[
  {
    "path": ".gitattributes",
    "content": "* text=auto\n*.css linguist-vendored\n*.scss linguist-vendored\n*.js linguist-vendored\nCHANGELOG.md export-ignore\n"
  },
  {
    "path": ".gitignore",
    "content": "/node_modules\n/public/hot\n/public/storage\n/storage/*.key\n/vendor\n/.idea\n/.vagrant\nHomestead.json\nHomestead.yaml\nnpm-debug.log\nyarn-error.log\n.env\n"
  },
  {
    "path": "app/Booking.php",
    "content": "<?php\n\nnamespace App;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Booking\n *\n * @package App\n * @property string $customer\n * @property string $room\n * @property string $time_from\n * @property string $time_to\n * @property text $additional_information\n */\nclass Booking extends Model\n{\n    use SoftDeletes;\n\n    protected $fillable = ['time_from', 'time_to', 'additional_information', 'customer_id', 'room_id','amount'];\n\n\n    /**\n     * Set to null if empty\n     * @param $input\n     */\n    public function setCustomerIdAttribute($input)\n    {\n        $this->attributes['customer_id'] = $input ? $input : null;\n    }\n\n    /**\n     * Set to null if empty\n     * @param $input\n     */\n    public function setRoomIdAttribute($input)\n    {\n        $this->attributes['room_id'] = $input ? $input : null;\n    }\n\n    /**\n     * Set attribute to date format\n     * @param $input\n     */\n    public function setTimeFromAttribute($input)\n    {\n        if ($input != null && $input != '') {\n            $this->attributes['time_from'] = Carbon::createFromFormat(config('app.date_format') . ' H:i', $input)->format('Y-m-d H:i');\n        } else {\n            $this->attributes['time_from'] = null;\n        }\n    }\n\n    /**\n     * Get attribute from date format\n     * @param $input\n     *\n     * @return string\n     */\n    public function getTimeFromAttribute($input)\n    {\n        $zeroDate = str_replace(['Y', 'm', 'd'], ['0000', '00', '00'], config('app.date_format') . ' H:i:s');\n\n        if ($input != $zeroDate && $input != null) {\n            return Carbon::createFromFormat('Y-m-d H:i:s', $input)->format(config('app.date_format') . ' H:i:s');\n        } else {\n            return '';\n        }\n    }\n\n    /**\n     * Set attribute to date format\n     * @param $input\n     */\n    public function setTimeToAttribute($input)\n    {\n        if ($input != null && $input != '') {\n            $this->attributes['time_to'] = Carbon::createFromFormat(config('app.date_format') . ' H:i', $input)->format('Y-m-d H:i');\n        } else {\n            $this->attributes['time_to'] = null;\n        }\n    }\n\n    /**\n     * Get attribute from date format\n     * @param $input\n     *\n     * @return string\n     */\n    public function getTimeToAttribute($input)\n    {\n        $zeroDate = str_replace(['Y', 'm', 'd'], ['0000', '00', '00'], config('app.date_format') . ' H:i');\n\n        if ($input != $zeroDate && $input != null) {\n            return Carbon::createFromFormat('Y-m-d H:i:s', $input)->format(config('app.date_format') . ' H:i:s');\n        } else {\n            return '';\n        }\n    }\n\n    public function customer()\n    {\n        return $this->belongsTo(Customer::class, 'customer_id')->withTrashed();\n    }\n\n    public function room()\n    {\n        return $this->belongsTo(Room::class, 'room_id')->withTrashed();\n    }\n}\n"
  },
  {
    "path": "app/Category.php",
    "content": "<?php\n\nnamespace App;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Category extends Model\n{\n    protected $fillable = ['name'];\n}\n"
  },
  {
    "path": "app/Console/Kernel.php",
    "content": "<?php\n\nnamespace App\\Console;\n\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\n\nclass Kernel extends ConsoleKernel\n{\n    /**\n     * The Artisan commands provided by your application.\n     *\n     * @var array\n     */\n    protected $commands = [\n        //\n    ];\n\n    /**\n     * Define the application's command schedule.\n     *\n     * @param  \\Illuminate\\Console\\Scheduling\\Schedule  $schedule\n     * @return void\n     */\n    protected function schedule(Schedule $schedule)\n    {\n        // $schedule->command('inspire')\n        //          ->hourly();\n    }\n\n    /**\n     * Register the commands for the application.\n     *\n     * @return void\n     */\n    protected function commands()\n    {\n        $this->load(__DIR__.'/Commands');\n\n        require base_path('routes/console.php');\n    }\n}\n"
  },
  {
    "path": "app/Country.php",
    "content": "<?php\nnamespace App;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Country\n *\n * @package App\n * @property string $shortcode\n * @property string $title\n * @property string $name\n*/\nclass Country extends Model\n{\n    use SoftDeletes;\n\n    protected $fillable = ['shortcode', 'title', 'name'];\n    \n    \n    \n}\n"
  },
  {
    "path": "app/Customer.php",
    "content": "<?php\nnamespace App;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Customer\n *\n * @package App\n * @property string $first_name\n * @property string $last_name\n * @property string $address\n * @property string $phone\n * @property string $email\n * @property string $country\n*/\nclass Customer extends Model\n{\n    use SoftDeletes;\n\n    protected $fillable = ['first_name', 'last_name', 'address', 'phone', 'email', 'country_id'];\n    \n    \n\n    /**\n     * Set to null if empty\n     * @param $input\n     */\n    public function setCountryIdAttribute($input)\n    {\n        $this->attributes['country_id'] = $input ? $input : null;\n    }\n    \n    public function country()\n    {\n        return $this->belongsTo(Country::class, 'country_id')->withTrashed();\n    }\n\n    public function getFullNameAttribute()\n    {\n        return $this->first_name . ' ' . $this->last_name;\n    }\n    \n}\n"
  },
  {
    "path": "app/Exceptions/Handler.php",
    "content": "<?php\n\nnamespace App\\Exceptions;\n\nuse Exception;\nuse Illuminate\\Auth\\AuthenticationException;\nuse Illuminate\\Foundation\\Exceptions\\Handler as ExceptionHandler;\n\nclass Handler extends ExceptionHandler\n{\n    /**\n     * A list of the exception types that are not reported.\n     *\n     * @var array\n     */\n    protected $dontReport = [\n        //\n    ];\n\n    /**\n     * A list of the inputs that are never flashed for validation exceptions.\n     *\n     * @var array\n     */\n    protected $dontFlash = [\n        'password',\n        'password_confirmation',\n    ];\n\n    /**\n     * Report or log an exception.\n     *\n     * This is a great spot to send exceptions to Sentry, Bugsnag, etc.\n     *\n     * @param  \\Exception  $exception\n     * @return void\n     */\n    public function report(Exception $exception)\n    {\n        parent::report($exception);\n    }\n\n    /**\n     * Render an exception into an HTTP response.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @param  \\Exception  $exception\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function render($request, Exception $exception)\n    {\n        return parent::render($request, $exception);\n    }\n\n    /**\n     * Convert an authentication exception into a response.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @param  \\Illuminate\\Auth\\AuthenticationException  $exception\n     * @return \\Illuminate\\Http\\Response\n     */\n    protected function unauthenticated($request, AuthenticationException $exception)\n    {\n        return $request->expectsJson()\n            ? response()->json(['message' => 'Unauthenticated.'], 401)\n            : redirect()->guest(route('auth.login'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/BookingsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Booking;\nuse App\\Customer;\nuse App\\Room;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Gate;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\StoreBookingsRequest;\nuse App\\Http\\Requests\\Admin\\UpdateBookingsRequest;\n\nclass BookingsController extends Controller\n{\n    /**\n     * Display a listing of Booking.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function index()\n    {\n        if (!Gate::allows('booking_access')) {\n            return abort(401);\n        }\n\n\n        if (request('show_deleted') == 1) {\n            if (!Gate::allows('booking_delete')) {\n                return abort(401);\n            }\n            $bookings = Booking::onlyTrashed()->get();\n        } else {\n            $bookings = Booking::all();\n        }\n\n        return view('admin.bookings.index', compact('bookings'));\n    }\n\n    /**\n     * Show the form for creating new Booking.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function create()\n    {\n        if (!Gate::allows('booking_create')) {\n            return abort(401);\n        }\n\n        $customers = Customer::get()->pluck('full_name', 'id')->prepend(trans('quickadmin.qa_please_select'), '');\n        $rooms = Room::get()->pluck('room_number', 'id')->prepend(trans('quickadmin.qa_please_select'), '');\n\n        return view('admin.bookings.create', compact('customers', 'rooms'));\n    }\n\n    /**\n     * Store a newly created Booking in storage.\n     *\n     * @param  \\App\\Http\\Requests\\StoreBookingsRequest $request\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function store(StoreBookingsRequest $request)\n    {\n        if (!Gate::allows('booking_create')) {\n            return abort(401);\n        }\n        $booking = Booking::create($request->all());\n\n        return redirect()->route('admin.bookings.index');\n    }\n\n\n    /**\n     * Show the form for editing Booking.\n     *\n     * @param  int $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function edit($id)\n    {\n        if (!Gate::allows('booking_edit')) {\n            return abort(401);\n        }\n\n        $customers = Customer::get()->pluck('first_name', 'id')->prepend(trans('quickadmin.qa_please_select'), '');\n        $rooms = Room::get()->pluck('room_number', 'id')->prepend(trans('quickadmin.qa_please_select'), '');\n\n        $booking = Booking::findOrFail($id);\n\n        return view('admin.bookings.edit', compact('booking', 'customers', 'rooms'));\n    }\n\n    /**\n     * Update Booking in storage.\n     *\n     * @param  \\App\\Http\\Requests\\UpdateBookingsRequest $request\n     * @param  int $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function update(UpdateBookingsRequest $request, $id)\n    {\n        if (!Gate::allows('booking_edit')) {\n            return abort(401);\n        }\n        $booking = Booking::findOrFail($id);\n        $booking->update($request->all());\n\n\n        return redirect()->route('admin.bookings.index');\n    }\n\n\n    /**\n     * Display Booking.\n     *\n     * @param  int $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function show($id)\n    {\n        if (!Gate::allows('booking_view')) {\n            return abort(401);\n        }\n        $booking = Booking::findOrFail($id);\n\n        return view('admin.bookings.show', compact('booking'));\n    }\n\n\n    /**\n     * Remove Booking from storage.\n     *\n     * @param  int $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function destroy($id)\n    {\n        if (!Gate::allows('booking_delete')) {\n            return abort(401);\n        }\n        $booking = Booking::findOrFail($id);\n        $booking->delete();\n\n        return redirect()->route('admin.bookings.index');\n    }\n\n    /**\n     * Delete all selected Booking at once.\n     *\n     * @param Request $request\n     */\n    public function massDestroy(Request $request)\n    {\n        if (!Gate::allows('booking_delete')) {\n            return abort(401);\n        }\n        if ($request->input('ids')) {\n            $entries = Booking::whereIn('id', $request->input('ids'))->get();\n\n            foreach ($entries as $entry) {\n                $entry->delete();\n            }\n        }\n    }\n\n\n    /**\n     * Restore Booking from storage.\n     *\n     * @param  int $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function restore($id)\n    {\n        if (!Gate::allows('booking_delete')) {\n            return abort(401);\n        }\n        $booking = Booking::onlyTrashed()->findOrFail($id);\n        $booking->restore();\n\n        return redirect()->route('admin.bookings.index');\n    }\n\n    /**\n     * Permanently delete Booking from storage.\n     *\n     * @param  int $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function perma_del($id)\n    {\n        if (!Gate::allows('booking_delete')) {\n            return abort(401);\n        }\n        $booking = Booking::onlyTrashed()->findOrFail($id);\n        $booking->forceDelete();\n\n        return redirect()->route('admin.bookings.index');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/CategoryController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse Illuminate\\Http\\Request;\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Support\\Facades\\Gate;\n\nuse App\\Ctegory;\nuse App\\Category;\nuse App\\Http\\Requests\\Admin\\UpdateCategoriesRequest;\nuse App\\Http\\Requests\\Admin\\StoreCategoriesRequest;\n\nclass CategoryController extends Controller\n{\n    public function index()\n    {\n        $categories=Category::all();\n        return view('admin.categories.index', compact('categories'));\n    }\n\n    public function create()\n    {\n        //show template\n        return view('admin.categories.create');\n    }\n\n    public function store(StoreCategoriesRequest $request)\n    {\n        if (! Gate::allows('category_create')) {\n            return abort(401);\n        }\n\n        $category = Category::create([\n            'name'=> $request->name\n        ]);\n        return redirect('/admin/categories');\n\n    }\n\n    /**\n     * Show the form for editing category.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function edit($id)\n    {\n        if (! Gate::allows('category_edit')) {\n            return abort(401);\n        }\n        $category = Category::findOrFail($id);\n\n        return view('admin.categories.edit', compact('category'));\n    }\n\n    /**\n     * Update category in storage.\n     *\n     * @param  \\App\\Http\\Requests\\UpdateCountriesRequest  $request\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function update(UpdateCategoriesRequest $request, $id)\n    {\n        if (! Gate::allows('category_edit')) {\n            return abort(401);\n        }\n        $category = Category::findOrFail($id);\n        $category->update($request->all());\n\n\n\n        return redirect()->route('admin.categories.index');\n    }\n\n\n    /**\n     * Remove Booking from storage.\n     *\n     * @param  int $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function destroy($id)\n    {\n        if (!Gate::allows('category_delete')) {\n            return abort(401);\n        }\n        $booking = Category::findOrFail($id);\n        $booking->delete();\n\n        return redirect()->route('admin.categories.index');\n    }\n\n    /**\n     * Delete all selected Category at once.\n     *\n     * @param Request $request\n     */\n    public function massDestroy(Request $request)\n    {\n        if (!Gate::allows('booking_delete')) {\n            return abort(401);\n        }\n        if ($request->input('ids')) {\n            $entries = Category::whereIn('id', $request->input('ids'))->get();\n\n            foreach ($entries as $entry) {\n                $entry->delete();\n            }\n        }\n    }\n\n\n    /**\n     * Restore Category from storage.\n     *\n     * @param  int $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function restore($id)\n    {\n        if (!Gate::allows('booking_delete')) {\n            return abort(401);\n        }\n        $booking = Category::onlyTrashed()->findOrFail($id);\n        $booking->restore();\n\n        return redirect()->route('admin.bookings.index');\n    }\n\n    /**\n     * Permanently delete Category from storage.\n     *\n     * @param  int $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function perma_del($id)\n    {\n        if (!Gate::allows('booking_delete')) {\n            return abort(401);\n        }\n        $booking = Category::onlyTrashed()->findOrFail($id);\n        $booking->forceDelete();\n\n        return redirect()->route('admin.bookings.index');\n    }\n    \n\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/CountriesController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Country;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Gate;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\StoreCountriesRequest;\nuse App\\Http\\Requests\\Admin\\UpdateCountriesRequest;\n\nclass CountriesController extends Controller\n{\n    /**\n     * Display a listing of Country.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function index()\n    {\n        if (! Gate::allows('country_access')) {\n            return abort(401);\n        }\n\n\n        if (request('show_deleted') == 1) {\n            if (! Gate::allows('country_delete')) {\n                return abort(401);\n            }\n            $countries = Country::onlyTrashed()->get();\n        } else {\n            $countries = Country::all();\n        }\n\n        return view('admin.countries.index', compact('countries'));\n    }\n\n    /**\n     * Show the form for creating new Country.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function create()\n    {\n        if (! Gate::allows('country_create')) {\n            return abort(401);\n        }\n        return view('admin.countries.create');\n    }\n\n    /**\n     * Store a newly created Country in storage.\n     *\n     * @param  \\App\\Http\\Requests\\StoreCountriesRequest  $request\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function store(StoreCountriesRequest $request)\n    {\n        if (! Gate::allows('country_create')) {\n            return abort(401);\n        }\n        $country = Country::create($request->all());\n\n\n\n        return redirect()->route('admin.countries.index');\n    }\n\n\n    /**\n     * Show the form for editing Country.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function edit($id)\n    {\n        if (! Gate::allows('country_edit')) {\n            return abort(401);\n        }\n        $country = Country::findOrFail($id);\n\n        return view('admin.countries.edit', compact('country'));\n    }\n\n    /**\n     * Update Country in storage.\n     *\n     * @param  \\App\\Http\\Requests\\UpdateCountriesRequest  $request\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function update(UpdateCountriesRequest $request, $id)\n    {\n        if (! Gate::allows('country_edit')) {\n            return abort(401);\n        }\n        $country = Country::findOrFail($id);\n        $country->update($request->all());\n\n\n\n        return redirect()->route('admin.countries.index');\n    }\n\n\n    /**\n     * Display Country.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function show($id)\n    {\n        if (! Gate::allows('country_view')) {\n            return abort(401);\n        }\n        $customers = \\App\\Customer::where('country_id', $id)->get();\n\n        $country = Country::findOrFail($id);\n\n        return view('admin.countries.show', compact('country', 'customers'));\n    }\n\n\n    /**\n     * Remove Country from storage.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function destroy($id)\n    {\n        if (! Gate::allows('country_delete')) {\n            return abort(401);\n        }\n        $country = Country::findOrFail($id);\n        $country->delete();\n\n        return redirect()->route('admin.countries.index');\n    }\n\n    /**\n     * Delete all selected Country at once.\n     *\n     * @param Request $request\n     */\n    public function massDestroy(Request $request)\n    {\n        if (! Gate::allows('country_delete')) {\n            return abort(401);\n        }\n        if ($request->input('ids')) {\n            $entries = Country::whereIn('id', $request->input('ids'))->get();\n\n            foreach ($entries as $entry) {\n                $entry->delete();\n            }\n        }\n    }\n\n\n    /**\n     * Restore Country from storage.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function restore($id)\n    {\n        if (! Gate::allows('country_delete')) {\n            return abort(401);\n        }\n        $country = Country::onlyTrashed()->findOrFail($id);\n        $country->restore();\n\n        return redirect()->route('admin.countries.index');\n    }\n\n    /**\n     * Permanently delete Country from storage.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function perma_del($id)\n    {\n        if (! Gate::allows('country_delete')) {\n            return abort(401);\n        }\n        $country = Country::onlyTrashed()->findOrFail($id);\n        $country->forceDelete();\n\n        return redirect()->route('admin.countries.index');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/CustomersController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Customer;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Gate;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\StoreCustomersRequest;\nuse App\\Http\\Requests\\Admin\\UpdateCustomersRequest;\n\nclass CustomersController extends Controller\n{\n    /**\n     * Display a listing of Customer.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function index()\n    {\n        if (! Gate::allows('customer_access')) {\n            return abort(401);\n        }\n\n\n        if (request('show_deleted') == 1) {\n            if (! Gate::allows('customer_delete')) {\n                return abort(401);\n            }\n            $customers = Customer::onlyTrashed()->get();\n        } else {\n            $customers = Customer::all();\n        }\n\n        return view('admin.customers.index', compact('customers'));\n    }\n\n    /**\n     * Show the form for creating new Customer.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function create()\n    {\n        if (! Gate::allows('customer_create')) {\n            return abort(401);\n        }\n        \n        $countries = \\App\\Country::get()->pluck('title', 'id')->prepend(trans('quickadmin.qa_please_select'), '');\n\n        return view('admin.customers.create', compact('countries'));\n    }\n\n    /**\n     * Store a newly created Customer in storage.\n     *\n     * @param  \\App\\Http\\Requests\\StoreCustomersRequest  $request\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function store(StoreCustomersRequest $request)\n    {\n        if (! Gate::allows('customer_create')) {\n            return abort(401);\n        }\n        $customer = Customer::create($request->all());\n\n\n\n        return redirect()->route('admin.customers.index');\n    }\n\n\n    /**\n     * Show the form for editing Customer.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function edit($id)\n    {\n        if (! Gate::allows('customer_edit')) {\n            return abort(401);\n        }\n        \n        $countries = \\App\\Country::get()->pluck('title', 'id')->prepend(trans('quickadmin.qa_please_select'), '');\n\n        $customer = Customer::findOrFail($id);\n\n        return view('admin.customers.edit', compact('customer', 'countries'));\n    }\n\n    /**\n     * Update Customer in storage.\n     *\n     * @param  \\App\\Http\\Requests\\UpdateCustomersRequest  $request\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function update(UpdateCustomersRequest $request, $id)\n    {\n        if (! Gate::allows('customer_edit')) {\n            return abort(401);\n        }\n        $customer = Customer::findOrFail($id);\n        $customer->update($request->all());\n\n\n\n        return redirect()->route('admin.customers.index');\n    }\n\n\n    /**\n     * Display Customer.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function show($id)\n    {\n        if (! Gate::allows('customer_view')) {\n            return abort(401);\n        }\n        \n        $countries = \\App\\Country::get()->pluck('title', 'id')->prepend(trans('quickadmin.qa_please_select'), '');$bookings = \\App\\Booking::where('customer_id', $id)->get();\n\n        $customer = Customer::findOrFail($id);\n\n        return view('admin.customers.show', compact('customer', 'bookings'));\n    }\n\n\n    /**\n     * Remove Customer from storage.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function destroy($id)\n    {\n        if (! Gate::allows('customer_delete')) {\n            return abort(401);\n        }\n        $customer = Customer::findOrFail($id);\n        $customer->delete();\n\n        return redirect()->route('admin.customers.index');\n    }\n\n    /**\n     * Delete all selected Customer at once.\n     *\n     * @param Request $request\n     */\n    public function massDestroy(Request $request)\n    {\n        if (! Gate::allows('customer_delete')) {\n            return abort(401);\n        }\n        if ($request->input('ids')) {\n            $entries = Customer::whereIn('id', $request->input('ids'))->get();\n\n            foreach ($entries as $entry) {\n                $entry->delete();\n            }\n        }\n    }\n\n\n    /**\n     * Restore Customer from storage.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function restore($id)\n    {\n        if (! Gate::allows('customer_delete')) {\n            return abort(401);\n        }\n        $customer = Customer::onlyTrashed()->findOrFail($id);\n        $customer->restore();\n\n        return redirect()->route('admin.customers.index');\n    }\n\n    /**\n     * Permanently delete Customer from storage.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function perma_del($id)\n    {\n        if (! Gate::allows('customer_delete')) {\n            return abort(401);\n        }\n        $customer = Customer::onlyTrashed()->findOrFail($id);\n        $customer->forceDelete();\n\n        return redirect()->route('admin.customers.index');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/FindRoomsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Room;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Gate;\nuse App\\Http\\Controllers\\Controller;\n\nclass FindRoomsController extends Controller\n{\n    public function index(Request $request)\n    {\n        if (!Gate::allows('find_room_access')) {\n            return abort(401);\n        }\n        $time_from = $request->input('time_from');\n        $time_to = $request->input('time_to');\n\n        if ($request->isMethod('POST')) {\n            $rooms = Room::with('booking')->whereHas('booking', function ($q) use ($time_from, $time_to) {\n                $q->where(function ($q2) use ($time_from, $time_to) {\n                    $q2->where('time_from', '>=', $time_to)\n                       ->orWhere('time_to', '<=', $time_from);\n                });\n            })->orWhereDoesntHave('booking')->get();\n        } else {\n            $rooms = null;\n        }\n        return view('admin.find_rooms.index', compact('rooms', 'time_from', 'time_to'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/RolesController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Role;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Gate;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\StoreRolesRequest;\nuse App\\Http\\Requests\\Admin\\UpdateRolesRequest;\n\nclass RolesController extends Controller\n{\n    /**\n     * Display a listing of Role.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function index()\n    {\n        if (! Gate::allows('role_access')) {\n            return abort(401);\n        }\n\n\n                $roles = Role::all();\n\n        return view('admin.roles.index', compact('roles'));\n    }\n\n    /**\n     * Show the form for creating new Role.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function create()\n    {\n        if (! Gate::allows('role_create')) {\n            return abort(401);\n        }\n        return view('admin.roles.create');\n    }\n\n    /**\n     * Store a newly created Role in storage.\n     *\n     * @param  \\App\\Http\\Requests\\StoreRolesRequest  $request\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function store(StoreRolesRequest $request)\n    {\n        if (! Gate::allows('role_create')) {\n            return abort(401);\n        }\n        $role = Role::create($request->all());\n\n\n\n        return redirect()->route('admin.roles.index');\n    }\n\n\n    /**\n     * Show the form for editing Role.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function edit($id)\n    {\n        if (! Gate::allows('role_edit')) {\n            return abort(401);\n        }\n        $role = Role::findOrFail($id);\n\n        return view('admin.roles.edit', compact('role'));\n    }\n\n    /**\n     * Update Role in storage.\n     *\n     * @param  \\App\\Http\\Requests\\UpdateRolesRequest  $request\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function update(UpdateRolesRequest $request, $id)\n    {\n        if (! Gate::allows('role_edit')) {\n            return abort(401);\n        }\n        $role = Role::findOrFail($id);\n        $role->update($request->all());\n\n\n\n        return redirect()->route('admin.roles.index');\n    }\n\n\n    /**\n     * Display Role.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function show($id)\n    {\n        if (! Gate::allows('role_view')) {\n            return abort(401);\n        }\n        $users = \\App\\User::where('role_id', $id)->get();\n\n        $role = Role::findOrFail($id);\n\n        return view('admin.roles.show', compact('role', 'users'));\n    }\n\n\n    /**\n     * Remove Role from storage.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function destroy($id)\n    {\n        if (! Gate::allows('role_delete')) {\n            return abort(401);\n        }\n        $role = Role::findOrFail($id);\n        $role->delete();\n\n        return redirect()->route('admin.roles.index');\n    }\n\n    /**\n     * Delete all selected Role at once.\n     *\n     * @param Request $request\n     */\n    public function massDestroy(Request $request)\n    {\n        if (! Gate::allows('role_delete')) {\n            return abort(401);\n        }\n        if ($request->input('ids')) {\n            $entries = Role::whereIn('id', $request->input('ids'))->get();\n\n            foreach ($entries as $entry) {\n                $entry->delete();\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/RoomsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Room;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Gate;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\StoreRoomsRequest;\nuse App\\Http\\Requests\\Admin\\UpdateRoomsRequest;\nuse App\\Category;\n\nclass RoomsController extends Controller\n{\n    /**\n     * Display a listing of Room.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function index()\n    {\n        if (! Gate::allows('room_access')) {\n            return abort(401);\n        }\n\n\n        if (request('show_deleted') == 1) {\n            if (! Gate::allows('room_delete')) {\n                return abort(401);\n            }\n            $rooms = Room::onlyTrashed()->get();\n        } else {\n            $rooms = Room::all();\n        }\n\n        return view('admin.rooms.index', compact('rooms'));\n    }\n\n    /**\n     * Show the form for creating new Room.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function create()\n    {\n        if (! Gate::allows('room_create')) {\n            return abort(401);\n        }\n        \n        $categories = Category::get()->pluck('name', 'id')->prepend(trans('quickadmin.qa_please_select'), '');\n        return view('admin.rooms.create',compact('categories'));\n    }\n\n    /**\n     * Store a newly created Room in storage.\n     *\n     * @param  \\App\\Http\\Requests\\StoreRoomsRequest  $request\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function store(StoreRoomsRequest $request)\n    {\n        if (! Gate::allows('room_create')) {\n            return abort(401);\n        }\n        $room = Room::create($request->all());\n\n\n\n        return redirect()->route('admin.rooms.index');\n    }\n\n\n    /**\n     * Show the form for editing Room.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function edit($id)\n    {\n        if (! Gate::allows('room_edit')) {\n            return abort(401);\n        }\n        $room = Room::findOrFail($id);\n        $categories = Category::get()->pluck('name', 'id')->prepend(trans('quickadmin.qa_please_select'), '');\n\n        return view('admin.rooms.edit', compact('room','categories'));\n    }\n\n    /**\n     * Update Room in storage.\n     *\n     * @param  \\App\\Http\\Requests\\UpdateRoomsRequest  $request\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function update(UpdateRoomsRequest $request, $id)\n    {\n        if (! Gate::allows('room_edit')) {\n            return abort(401);\n        }\n        $room = Room::findOrFail($id);\n        $room->update($request->all());\n\n\n\n        return redirect()->route('admin.rooms.index');\n    }\n\n\n    /**\n     * Display Room.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function show($id)\n    {\n        if (! Gate::allows('room_view')) {\n            return abort(401);\n        }\n        $bookings = \\App\\Booking::where('room_id', $id)->get();\n\n        $room = Room::findOrFail($id);\n\n        return view('admin.rooms.show', compact('room', 'bookings'));\n    }\n\n\n    /**\n     * Remove Room from storage.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function destroy($id)\n    {\n        if (! Gate::allows('room_delete')) {\n            return abort(401);\n        }\n        $room = Room::findOrFail($id);\n        $room->delete();\n\n        return redirect()->route('admin.rooms.index');\n    }\n\n    /**\n     * Delete all selected Room at once.\n     *\n     * @param Request $request\n     */\n    public function massDestroy(Request $request)\n    {\n        if (! Gate::allows('room_delete')) {\n            return abort(401);\n        }\n        if ($request->input('ids')) {\n            $entries = Room::whereIn('id', $request->input('ids'))->get();\n\n            foreach ($entries as $entry) {\n                $entry->delete();\n            }\n        }\n    }\n\n\n    /**\n     * Restore Room from storage.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function restore($id)\n    {\n        if (! Gate::allows('room_delete')) {\n            return abort(401);\n        }\n        $room = Room::onlyTrashed()->findOrFail($id);\n        $room->restore();\n\n        return redirect()->route('admin.rooms.index');\n    }\n\n    /**\n     * Permanently delete Room from storage.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function perma_del($id)\n    {\n        if (! Gate::allows('room_delete')) {\n            return abort(401);\n        }\n        $room = Room::onlyTrashed()->findOrFail($id);\n        $room->forceDelete();\n\n        return redirect()->route('admin.rooms.index');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/UsersController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\User;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Gate;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\StoreUsersRequest;\nuse App\\Http\\Requests\\Admin\\UpdateUsersRequest;\n\nclass UsersController extends Controller\n{\n    /**\n     * Display a listing of User.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function index()\n    {\n        if (! Gate::allows('user_access')) {\n            return abort(401);\n        }\n\n\n                $users = User::all();\n\n        return view('admin.users.index', compact('users'));\n    }\n\n    /**\n     * Show the form for creating new User.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function create()\n    {\n        if (! Gate::allows('user_create')) {\n            return abort(401);\n        }\n        \n        $roles = \\App\\Role::get()->pluck('title', 'id')->prepend(trans('quickadmin.qa_please_select'), '');\n\n        return view('admin.users.create', compact('roles'));\n    }\n\n    /**\n     * Store a newly created User in storage.\n     *\n     * @param  \\App\\Http\\Requests\\StoreUsersRequest  $request\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function store(StoreUsersRequest $request)\n    {\n        if (! Gate::allows('user_create')) {\n            return abort(401);\n        }\n        $user = User::create($request->all());\n\n\n\n        return redirect()->route('admin.users.index');\n    }\n\n\n    /**\n     * Show the form for editing User.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function edit($id)\n    {\n        if (! Gate::allows('user_edit')) {\n            return abort(401);\n        }\n        \n        $roles = \\App\\Role::get()->pluck('title', 'id')->prepend(trans('quickadmin.qa_please_select'), '');\n\n        $user = User::findOrFail($id);\n\n        return view('admin.users.edit', compact('user', 'roles'));\n    }\n\n    /**\n     * Update User in storage.\n     *\n     * @param  \\App\\Http\\Requests\\UpdateUsersRequest  $request\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function update(UpdateUsersRequest $request, $id)\n    {\n        if (! Gate::allows('user_edit')) {\n            return abort(401);\n        }\n        $user = User::findOrFail($id);\n        $user->update($request->all());\n\n\n\n        return redirect()->route('admin.users.index');\n    }\n\n\n    /**\n     * Display User.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function show($id)\n    {\n        if (! Gate::allows('user_view')) {\n            return abort(401);\n        }\n        $user = User::findOrFail($id);\n\n        return view('admin.users.show', compact('user'));\n    }\n\n\n    /**\n     * Remove User from storage.\n     *\n     * @param  int  $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function destroy($id)\n    {\n        if (! Gate::allows('user_delete')) {\n            return abort(401);\n        }\n        $user = User::findOrFail($id);\n        $user->delete();\n\n        return redirect()->route('admin.users.index');\n    }\n\n    /**\n     * Delete all selected User at once.\n     *\n     * @param Request $request\n     */\n    public function massDestroy(Request $request)\n    {\n        if (! Gate::allows('user_delete')) {\n            return abort(401);\n        }\n        if ($request->input('ids')) {\n            $entries = User::whereIn('id', $request->input('ids'))->get();\n\n            foreach ($entries as $entry) {\n                $entry->delete();\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/ChangePasswordController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Http\\Request;\nuse Hash;\nuse Validator;\n\nclass ChangePasswordController extends Controller\n{\n\n    /**\n     * Create a new controller instance.\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    /**\n     * Where to redirect users after password is changed.\n     *\n     * @var string $redirectTo\n     */\n    protected $redirectTo = '/change_password';\n\n    /**\n     * Change password form\n     *\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function showChangePasswordForm()\n    {\n        $user = Auth::getUser();\n\n        return view('auth.change_password', compact('user'));\n    }\n\n    /**\n     * Change password.\n     *\n     * @param Request $request\n     * @return $this|\\Illuminate\\Http\\RedirectResponse\n     */\n    public function changePassword(Request $request)\n    {\n        $user = Auth::getUser();\n        $this->validator($request->all())->validate();\n        if (Hash::check($request->get('current_password'), $user->password)) {\n            $user->password = $request->get('new_password');\n            $user->save();\n            return redirect($this->redirectTo)->with('success', 'Password change successfully!');\n        } else {\n            return redirect()->back()->withErrors('Current password is incorrect');\n        }\n    }\n\n    /**\n     * Get a validator for an incoming change password request.\n     *\n     * @param  array  $data\n     * @return \\Illuminate\\Contracts\\Validation\\Validator\n     */\n    protected function validator(array $data)\n    {\n        return Validator::make($data, [\n            'current_password' => 'required',\n            'new_password' => 'required|min:6|confirmed',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/ForgotPasswordController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\SendsPasswordResetEmails;\n\nclass ForgotPasswordController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reset Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller is responsible for handling password reset emails and\n    | includes a trait which assists in sending these notifications from\n    | your application to your users. Feel free to explore this trait.\n    |\n    */\n\n    use SendsPasswordResetEmails;\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('guest');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/LoginController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\AuthenticatesUsers;\nuse Socialite;\nuse Auth;\nuse App\\User;\n\nclass LoginController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Login Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller handles authenticating users for the application and\n    | redirecting them to your home screen. The controller uses a trait\n    | to conveniently provide its functionality to your applications.\n    |\n    */\n\n    use AuthenticatesUsers;\n\n    /**\n     * Where to redirect users after login / registration.\n     *\n     * @var string\n     */\n    protected $redirectTo = '/admin/home';\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('guest', ['except' => 'logout']);\n    }\n\n    \n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/RegisterController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\User;\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Illuminate\\Foundation\\Auth\\RegistersUsers;\n\nclass RegisterController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Register Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller handles the registration of new users as well as their\n    | validation and creation. By default this controller uses a trait to\n    | provide this functionality without requiring any additional code.\n    |\n    */\n\n    use RegistersUsers;\n\n    /**\n     * Where to redirect users after registration.\n     *\n     * @var string\n     */\n    protected $redirectTo = '/admin/home';\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('guest');\n    }\n\n    /**\n     * Get a validator for an incoming registration request.\n     *\n     * @param  array  $data\n     * @return \\Illuminate\\Contracts\\Validation\\Validator\n     */\n    protected function validator(array $data)\n    {\n        return Validator::make($data, [\n            'name' => 'required|string|max:255',\n            'email' => 'required|string|email|max:255|unique:users',\n            'password' => 'required|string|min:6|confirmed',\n        ]);\n    }\n\n    /**\n     * Create a new user instance after a valid registration.\n     *\n     * @param  array  $data\n     * @return \\App\\User\n     */\n    protected function create(array $data)\n    {\n        return User::create([\n            'name' => $data['name'],\n            'email' => $data['email'],\n            'password' => bcrypt($data['password']),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/ResetPasswordController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\ResetsPasswords;\n\nclass ResetPasswordController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reset Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller is responsible for handling password reset requests\n    | and uses a simple trait to include this behavior. You're free to\n    | explore this trait and override any methods you wish to tweak.\n    |\n    */\n\n    use ResetsPasswords;\n\n    /**\n     * Where to redirect users after resetting their password.\n     *\n     * @var string\n     */\n    protected $redirectTo = '/admin/home';\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('guest');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Controller.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Bus\\DispatchesJobs;\nuse Illuminate\\Routing\\Controller as BaseController;\nuse Illuminate\\Foundation\\Validation\\ValidatesRequests;\nuse Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests;\n\nclass Controller extends BaseController\n{\n    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;\n}\n"
  },
  {
    "path": "app/Http/Controllers/HomeController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests;\nuse Illuminate\\Http\\Request;\n\nclass HomeController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    /**\n     * Show the application dashboard.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function index()\n    {\n        return view('home');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Traits/FileUploadTrait.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Traits;\n\nuse Illuminate\\Http\\Request;\nuse Intervention\\Image\\Facades\\Image;\n\ntrait FileUploadTrait\n{\n\n    /**\n     * File upload trait used in controllers to upload files\n     */\n    public function saveFiles(Request $request)\n    {\n\n\t\t$uploadPath = public_path(env('UPLOAD_PATH'));\n\t\t$thumbPath = public_path(env('UPLOAD_PATH').'/thumb');\n        if (! file_exists($uploadPath)) {\n            mkdir($uploadPath, 0775);\n            mkdir($thumbPath, 0775);\n        }\n\n        $finalRequest = $request;\n\n        foreach ($request->all() as $key => $value) {\n            if ($request->hasFile($key)) {\n                if ($request->has($key . '_max_width') && $request->has($key . '_max_height')) {\n                    // Check file width\n                    $filename = time() . '-' . $request->file($key)->getClientOriginalName();\n                    $file     = $request->file($key);\n                    $image    = Image::make($file);\n                    if (! file_exists($thumbPath)) {\n                        mkdir($thumbPath, 0775, true);\n                    }\n                    Image::make($file)->resize(50, 50)->save($thumbPath . '/' . $filename);\n                    $width  = $image->width();\n                    $height = $image->height();\n                    if ($width > $request->{$key . '_max_width'} && $height > $request->{$key . '_max_height'}) {\n                        $image->resize($request->{$key . '_max_width'}, $request->{$key . '_max_height'});\n                    } elseif ($width > $request->{$key . '_max_width'}) {\n                        $image->resize($request->{$key . '_max_width'}, null, function ($constraint) {\n                            $constraint->aspectRatio();\n                        });\n                    } elseif ($height > $request->{$key . '_max_width'}) {\n                        $image->resize(null, $request->{$key . '_max_height'}, function ($constraint) {\n                            $constraint->aspectRatio();\n                        });\n                    }\n                    $image->save($uploadPath . '/' . $filename);\n                    $finalRequest = new Request(array_merge($finalRequest->all(), [$key => $filename]));\n                } else {\n                    $filename = time() . '-' . $request->file($key)->getClientOriginalName();\n                    $request->file($key)->move($uploadPath, $filename);\n                    $finalRequest = new Request(array_merge($finalRequest->all(), [$key => $filename]));\n                }\n            }\n        }\n\n        return $finalRequest;\n    }\n}"
  },
  {
    "path": "app/Http/Kernel.php",
    "content": "<?php\n\nnamespace App\\Http;\n\nuse Illuminate\\Foundation\\Http\\Kernel as HttpKernel;\n\nclass Kernel extends HttpKernel\n{\n    /**\n     * The application's global HTTP middleware stack.\n     *\n     * These middleware are run during every request to your application.\n     *\n     * @var array\n     */\n    protected $middleware = [\n        \\Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode::class,\n        \\Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize::class,\n        \\App\\Http\\Middleware\\TrimStrings::class,\n        \\Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull::class,\n        \\App\\Http\\Middleware\\TrustProxies::class,\n    ];\n\n    /**\n     * The application's route middleware groups.\n     *\n     * @var array\n     */\n    protected $middlewareGroups = [\n        'web' => [\n            \\App\\Http\\Middleware\\EncryptCookies::class,\n            \\Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse::class,\n            \\Illuminate\\Session\\Middleware\\StartSession::class,\n            // \\Illuminate\\Session\\Middleware\\AuthenticateSession::class,\n            \\Illuminate\\View\\Middleware\\ShareErrorsFromSession::class,\n            \\App\\Http\\Middleware\\VerifyCsrfToken::class,\n            \\Illuminate\\Routing\\Middleware\\SubstituteBindings::class,\n        ],\n\n        'api' => [\n            'throttle:60,1',\n            'bindings',\n        ],\n    ];\n\n    /**\n     * The application's route middleware.\n     *\n     * These middleware may be assigned to groups or used individually.\n     *\n     * @var array\n     */\n    protected $routeMiddleware = [\n        'auth' => \\Illuminate\\Auth\\Middleware\\Authenticate::class,\n        'auth.basic' => \\Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth::class,\n        'bindings' => \\Illuminate\\Routing\\Middleware\\SubstituteBindings::class,\n        'can' => \\Illuminate\\Auth\\Middleware\\Authorize::class,\n        'guest' => \\App\\Http\\Middleware\\RedirectIfAuthenticated::class,\n        'throttle' => \\Illuminate\\Routing\\Middleware\\ThrottleRequests::class,\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/EncryptCookies.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies as Middleware;\n\nclass EncryptCookies extends Middleware\n{\n    /**\n     * The names of the cookies that should not be encrypted.\n     *\n     * @var array\n     */\n    protected $except = [\n        //\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/RedirectIfAuthenticated.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass RedirectIfAuthenticated\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @param  \\Closure  $next\n     * @param  string|null  $guard\n     * @return mixed\n     */\n    public function handle($request, Closure $next, $guard = null)\n    {\n        if (Auth::guard($guard)->check()) {\n            return redirect('/admin/home');\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/TrimStrings.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\TrimStrings as Middleware;\n\nclass TrimStrings extends Middleware\n{\n    /**\n     * The names of the attributes that should not be trimmed.\n     *\n     * @var array\n     */\n    protected $except = [\n        'password',\n        'password_confirmation',\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/TrustProxies.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Http\\Request;\nuse Fideloper\\Proxy\\TrustProxies as Middleware;\n\nclass TrustProxies extends Middleware\n{\n    /**\n     * The trusted proxies for this application.\n     *\n     * @var array\n     */\n    protected $proxies;\n\n    /**\n     * The current proxy header mappings.\n     *\n     * @var array\n     */\n    protected $headers = [\n        Request::HEADER_FORWARDED => 'FORWARDED',\n        Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',\n        Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',\n        Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',\n        Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/VerifyCsrfToken.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as Middleware;\n\nclass VerifyCsrfToken extends Middleware\n{\n    /**\n     * The URIs that should be excluded from CSRF verification.\n     *\n     * @var array\n     */\n    protected $except = [\n        //\n    ];\n}\n"
  },
  {
    "path": "app/Http/Requests/Admin/StoreBookingsRequest.php",
    "content": "<?php\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreBookingsRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'customer_id' => 'required',\n            'room_id' => 'required',\n            'time_from' => 'required|date_format:'.config('app.date_format').' H:i',\n            'time_to' => 'required|date_format:'.config('app.date_format'). ' H:i',\n            'additional_information' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Admin/StoreCategoriesRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCategoriesRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Admin/StoreCountriesRequest.php",
    "content": "<?php\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCountriesRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Admin/StoreCustomersRequest.php",
    "content": "<?php\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCustomersRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'first_name' => 'required',\n            'last_name' => 'required',\n            'address' => 'required',\n            'email' => 'required|email',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Admin/StoreRolesRequest.php",
    "content": "<?php\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreRolesRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'title' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Admin/StoreRoomsRequest.php",
    "content": "<?php\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreRoomsRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'room_number' => 'required',\n            'floor' => 'max:2147483647|required|numeric',\n            'description' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Admin/StoreUsersRequest.php",
    "content": "<?php\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreUsersRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name' => 'required',\n            'email' => 'required|email|unique:users,email',\n            'password' => 'required',\n            'role_id' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Admin/UpdateBookingsRequest.php",
    "content": "<?php\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateBookingsRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'customer_id' => 'required',\n            'room_id' => 'required',\n            'time_from' => 'required|date_format:'.config('app.date_format').' H:i',\n            'time_to' => 'required|date_format:'.config('app.date_format').' H:i',\n            'additional_information' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Admin/UpdateCategoriesRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateCategoriesRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Admin/UpdateCountriesRequest.php",
    "content": "<?php\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateCountriesRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            \n            'name' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Admin/UpdateCustomersRequest.php",
    "content": "<?php\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateCustomersRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            \n            'first_name' => 'required',\n            'last_name' => 'required',\n            'address' => 'required',\n            'email' => 'required|email',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Admin/UpdateRolesRequest.php",
    "content": "<?php\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateRolesRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            \n            'title' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Admin/UpdateRoomsRequest.php",
    "content": "<?php\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateRoomsRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            \n            'room_number' => 'required',\n            'floor' => 'max:2147483647|required|numeric',\n            'description' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Admin/UpdateUsersRequest.php",
    "content": "<?php\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateUsersRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            \n            'name' => 'required',\n            'email' => 'required|email|unique:users,email,'.$this->route('user'),\n            'role_id' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Providers/AppServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\nuse Illuminate\\Support\\Facades\\Schema;\nuse Laravel\\Dusk\\DuskServiceProvider;\n\n\nclass AppServiceProvider extends ServiceProvider\n{\n    /**\n     * Bootstrap any application services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        Schema::defaultStringLength(191);\n\n    }\n\n    /**\n     * Register any application services.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        //\n        \n        if ($this->app->environment('local', 'testing')) {\n            $this->app->register(DuskServiceProvider::class);\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/Providers/AuthServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Role;\nuse App\\User;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider as ServiceProvider;\n\nclass AuthServiceProvider extends ServiceProvider\n{\n    /**\n     * The policy mappings for the application.\n     *\n     * @var array\n     */\n    protected $policies = [\n        'App\\Model' => 'App\\Policies\\ModelPolicy',\n    ];\n\n    /**\n     * Register any authentication / authorization services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        $this->registerPolicies();\n\n        $user = \\Auth::user();\n\n        \n        // Auth gates for: User management\n        Gate::define('user_management_access', function ($user) {\n            return in_array($user->role_id, [1]);\n        });\n\n        // Auth gates for: Roles\n        Gate::define('role_access', function ($user) {\n            return in_array($user->role_id, [1]);\n        });\n        Gate::define('role_create', function ($user) {\n            return in_array($user->role_id, [1]);\n        });\n        Gate::define('role_edit', function ($user) {\n            return in_array($user->role_id, [1]);\n        });\n        Gate::define('role_view', function ($user) {\n            return in_array($user->role_id, [1]);\n        });\n        Gate::define('role_delete', function ($user) {\n            return in_array($user->role_id, [1]);\n        });\n\n        // Auth gates for: Users\n        Gate::define('user_access', function ($user) {\n            return in_array($user->role_id, [1]);\n        });\n        Gate::define('user_create', function ($user) {\n            return in_array($user->role_id, [1]);\n        });\n        Gate::define('user_edit', function ($user) {\n            return in_array($user->role_id, [1]);\n        });\n        Gate::define('user_view', function ($user) {\n            return in_array($user->role_id, [1]);\n        });\n        Gate::define('user_delete', function ($user) {\n            return in_array($user->role_id, [1]);\n        });\n\n        // Auth gates for: Countries\n        Gate::define('country_access', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('country_create', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('country_edit', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('country_view', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('country_delete', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n\n        // Auth gates for: Customers\n        Gate::define('customer_access', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('customer_create', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('customer_edit', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('customer_view', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('customer_delete', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n\n        // Auth gates for: Rooms\n        Gate::define('room_access', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('room_create', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('room_edit', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('room_view', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('room_delete', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n\n        // Auth gates for: Bookings\n        Gate::define('booking_access', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('booking_create', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('booking_edit', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('booking_view', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        Gate::define('booking_delete', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n\n        // Auth gates for: Find room\n        Gate::define('find_room_access', function ($user) {\n            return in_array($user->role_id, [1, 2]);\n        });\n        // Auth gates for: add category\n        Gate::define('category_create', function ($user) {\n            return in_array($user->role_id, [1]);\n        });\n        // Auth gates for: add category\n        Gate::define('category_edit', function ($user) {\n            return in_array($user->role_id, [1]);\n        });\n        Gate::define('category_delete', function ($user) {\n            return in_array($user->role_id, [1]);\n        });\n\n    }\n}\n"
  },
  {
    "path": "app/Providers/BroadcastServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\nuse Illuminate\\Support\\Facades\\Broadcast;\n\nclass BroadcastServiceProvider extends ServiceProvider\n{\n    /**\n     * Bootstrap any application services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        Broadcast::routes();\n\n        require base_path('routes/channels.php');\n    }\n}\n"
  },
  {
    "path": "app/Providers/EventServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider as ServiceProvider;\n\nclass EventServiceProvider extends ServiceProvider\n{\n    /**\n     * The event listener mappings for the application.\n     *\n     * @var array\n     */\n    protected $listen = [\n        'App\\Events\\Event' => [\n            'App\\Listeners\\EventListener',\n        ],\n    ];\n\n    /**\n     * Register any events for your application.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        parent::boot();\n\n        //\n    }\n}\n"
  },
  {
    "path": "app/Providers/RouteServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Route;\nuse Illuminate\\Foundation\\Support\\Providers\\RouteServiceProvider as ServiceProvider;\n\nclass RouteServiceProvider extends ServiceProvider\n{\n    /**\n     * This namespace is applied to your controller routes.\n     *\n     * In addition, it is set as the URL generator's root namespace.\n     *\n     * @var string\n     */\n    protected $namespace = 'App\\Http\\Controllers';\n\n    /**\n     * Define your route model bindings, pattern filters, etc.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        //\n\n        parent::boot();\n    }\n\n    /**\n     * Define the routes for the application.\n     *\n     * @return void\n     */\n    public function map()\n    {\n        $this->mapApiRoutes();\n\n        $this->mapWebRoutes();\n\n        //\n    }\n\n    /**\n     * Define the \"web\" routes for the application.\n     *\n     * These routes all receive session state, CSRF protection, etc.\n     *\n     * @return void\n     */\n    protected function mapWebRoutes()\n    {\n        Route::middleware('web')\n             ->namespace($this->namespace)\n             ->group(base_path('routes/web.php'));\n    }\n\n    /**\n     * Define the \"api\" routes for the application.\n     *\n     * These routes are typically stateless.\n     *\n     * @return void\n     */\n    protected function mapApiRoutes()\n    {\n        Route::prefix('api')\n             ->middleware('api')\n             ->namespace($this->namespace)\n             ->group(base_path('routes/api.php'));\n    }\n}\n"
  },
  {
    "path": "app/Role.php",
    "content": "<?php\nnamespace App;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * Class Role\n *\n * @package App\n * @property string $title\n*/\nclass Role extends Model\n{\n    protected $fillable = ['title'];\n    \n    \n    \n}\n"
  },
  {
    "path": "app/Room.php",
    "content": "<?php\n\nnamespace App;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Room\n *\n * @package App\n * @property string $room_number\n * @property integer $floor\n * @property text $description\n */\nclass Room extends Model\n{\n    use SoftDeletes;\n\n    protected $fillable = ['room_number', 'floor', 'description','category_id'];\n\n    /**\n     * Set attribute to money format\n     * @param $input\n     */\n    public function setFloorAttribute($input)\n    {\n        $this->attributes['floor'] = $input ? $input : null;\n    }\n    public function booking()\n    {\n        return $this->HasOne(Booking::class, 'room_id')->withTrashed();\n    }\n}\n"
  },
  {
    "path": "app/User.php",
    "content": "<?php\nnamespace App;\n\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Illuminate\\Notifications\\Notifiable;\nuse Illuminate\\Auth\\Notifications\\ResetPassword;\nuse Hash;\n\n/**\n * Class User\n *\n * @package App\n * @property string $name\n * @property string $email\n * @property string $password\n * @property string $role\n * @property string $remember_token\n*/\nclass User extends Authenticatable\n{\n    use Notifiable;\n    protected $fillable = ['name', 'email', 'password', 'remember_token', 'role_id'];\n    \n    \n    \n    /**\n     * Hash password\n     * @param $input\n     */\n    public function setPasswordAttribute($input)\n    {\n        if ($input)\n            $this->attributes['password'] = app('hash')->needsRehash($input) ? Hash::make($input) : $input;\n    }\n    \n\n    /**\n     * Set to null if empty\n     * @param $input\n     */\n    public function setRoleIdAttribute($input)\n    {\n        $this->attributes['role_id'] = $input ? $input : null;\n    }\n    \n    public function role()\n    {\n        return $this->belongsTo(Role::class, 'role_id');\n    }\n    \n    \n    \n\n    public function sendPasswordResetNotification($token)\n    {\n       $this->notify(new ResetPassword($token));\n    }\n}\n"
  },
  {
    "path": "artisan",
    "content": "#!/usr/bin/env php\n<?php\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|--------------------------------------------------------------------------\n| Register The Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader\n| for our application. We just need to utilize it! We'll require it\n| into the script here so that we do not have to worry about the\n| loading of any our classes \"manually\". Feels great to relax.\n|\n*/\n\nrequire __DIR__.'/vendor/autoload.php';\n\n$app = require_once __DIR__.'/bootstrap/app.php';\n\n/*\n|--------------------------------------------------------------------------\n| Run The Artisan Application\n|--------------------------------------------------------------------------\n|\n| When we run the console application, the current CLI command will be\n| executed in this console and the response sent back to a terminal\n| or another output device for the developers. Here goes nothing!\n|\n*/\n\n$kernel = $app->make(Illuminate\\Contracts\\Console\\Kernel::class);\n\n$status = $kernel->handle(\n    $input = new Symfony\\Component\\Console\\Input\\ArgvInput,\n    new Symfony\\Component\\Console\\Output\\ConsoleOutput\n);\n\n/*\n|--------------------------------------------------------------------------\n| Shutdown The Application\n|--------------------------------------------------------------------------\n|\n| Once Artisan has finished running, we will fire off the shutdown events\n| so that any final work may be done by the application before we shut\n| down the process. This is the last thing to happen to the request.\n|\n*/\n\n$kernel->terminate($input, $status);\n\nexit($status);\n"
  },
  {
    "path": "bootstrap/app.php",
    "content": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Create The Application\n|--------------------------------------------------------------------------\n|\n| The first thing we will do is create a new Laravel application instance\n| which serves as the \"glue\" for all the components of Laravel, and is\n| the IoC container for the system binding all of the various parts.\n|\n*/\n\n$app = new Illuminate\\Foundation\\Application(\n    realpath(__DIR__.'/../')\n);\n\n/*\n|--------------------------------------------------------------------------\n| Bind Important Interfaces\n|--------------------------------------------------------------------------\n|\n| Next, we need to bind some important interfaces into the container so\n| we will be able to resolve them when needed. The kernels serve the\n| incoming requests to this application from both the web and CLI.\n|\n*/\n\n$app->singleton(\n    Illuminate\\Contracts\\Http\\Kernel::class,\n    App\\Http\\Kernel::class\n);\n\n$app->singleton(\n    Illuminate\\Contracts\\Console\\Kernel::class,\n    App\\Console\\Kernel::class\n);\n\n$app->singleton(\n    Illuminate\\Contracts\\Debug\\ExceptionHandler::class,\n    App\\Exceptions\\Handler::class\n);\n\n/*\n|--------------------------------------------------------------------------\n| Return The Application\n|--------------------------------------------------------------------------\n|\n| This script returns the application instance. The instance is given to\n| the calling script so we can separate the building of the instances\n| from the actual running of the application and sending responses.\n|\n*/\n\nreturn $app;\n"
  },
  {
    "path": "bootstrap/cache/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "composer.json",
    "content": "{\n  \"name\": \"laravel/laravel\",\n  \"description\": \"The Laravel Framework.\",\n  \"keywords\": [\n    \"framework\",\n    \"laravel\"\n  ],\n  \"license\": \"MIT\",\n  \"type\": \"project\",\n  \"require\": {\n    \"php\": \">=7.0.0\",\n    \"components/bootstrap-datetimepicker\": \"^2.4\",\n    \"doctrine/dbal\": \"^2.5\",\n    \"fideloper/proxy\": \"~3.3\",\n    \"intervention/image\": \"^2.4\",\n    \"laravel/framework\": \"5.5.*\",\n    \"laravel/tinker\": \"~1.0\",\n    \"laravelcollective/html\": \"^5.5\"\n  },\n  \"require-dev\": {\n    \"filp/whoops\": \"~2.0\",\n    \"fzaninotto/faker\": \"~1.4\",\n    \"mockery/mockery\": \"0.9.*\",\n    \"phpunit/phpunit\": \"~5.7\",\n    \"laravel/dusk\": \"^2.0\"\n  },\n  \"autoload\": {\n    \"classmap\": [\n      \"database\"\n    ],\n    \"psr-4\": {\n      \"App\\\\\": \"app/\"\n    }\n  },\n  \"autoload-dev\": {\n    \"psr-4\": {\n      \"Tests\\\\\": \"tests/\"\n    }\n  },\n  \"extra\": {\n    \"laravel\": {\n      \"dont-discover\": [\n      ]\n    }\n  },\n  \"scripts\": {\n    \"post-root-package-install\": [\n      \"php -r \\\"file_exists('.env') || copy('.env.example', '.env');\\\"\"\n    ],\n    \"post-create-project-cmd\": [\n      \"php artisan key:generate\"\n    ],\n    \"post-install-cmd\": [\n      \"Illuminate\\\\Foundation\\\\ComposerScripts::postInstall\"\n    ],\n    \"post-update-cmd\": [\n      \"Illuminate\\\\Foundation\\\\ComposerScripts::postUpdate\"\n    ]\n  },\n  \"config\": {\n    \"preferred-install\": \"dist\",\n    \"sort-packages\": true,\n    \"optimize-autoloader\": true\n  }\n}\n"
  },
  {
    "path": "config/app.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Name\n    |--------------------------------------------------------------------------\n    |\n    | This value is the name of your application. This value is used when the\n    | framework needs to place the application's name in a notification or\n    | any other location as required by the application or its packages.\n    */\n\n    'name' => 'Hotel-booking',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Environment\n    |--------------------------------------------------------------------------\n    |\n    | This value determines the \"environment\" your application is currently\n    | running in. This may determine how you prefer to configure various\n    | services your application utilizes. Set this in your \".env\" file.\n    |\n    */\n\n    'env' => env('APP_ENV', 'production'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Debug Mode\n    |--------------------------------------------------------------------------\n    |\n    | When your application is in debug mode, detailed error messages with\n    | stack traces will be shown on every error that occurs within your\n    | application. If disabled, a simple generic error page is shown.\n    |\n    */\n\n    'debug' => env('APP_DEBUG', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application URL\n    |--------------------------------------------------------------------------\n    |\n    | This URL is used by the console to properly generate URLs when using\n    | the Artisan command line tool. You should set this to the root of\n    | your application so that it is used when running Artisan tasks.\n    |\n    */\n\n    'url' => env('APP_URL', 'http://localhost'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Timezone\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default timezone for your application, which\n    | will be used by the PHP date and date-time functions. We have gone\n    | ahead and set this to a sensible default for you out of the box.\n    |\n    */\n\n    'timezone' => 'UTC',\n\n    /*\n     |--------------------------------------------------------------------------\n     | Application Date Format\n     |--------------------------------------------------------------------------\n     |\n     | Here you may specify the default date format for your application, which\n     | will be used with date and date-time functions.\n     |\n     */\n\n     'date_format' => 'Y-m-d',\n     'date_format_js' => 'Y-m-d',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Locale Configuration\n    |--------------------------------------------------------------------------\n    |\n    | The application locale determines the default locale that will be used\n    | by the translation service provider. You are free to set this value\n    | to any of the locales which will be supported by the application.\n    |\n    */\n\n    'locale' => 'en',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Fallback Locale\n    |--------------------------------------------------------------------------\n    |\n    | The fallback locale determines the locale to use when the current one\n    | is not available. You may change the value to correspond to any of\n    | the language folders that are provided through your application.\n    |\n    */\n\n    'fallback_locale' => 'en',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Encryption Key\n    |--------------------------------------------------------------------------\n    |\n    | This key is used by the Illuminate encrypter service and should be set\n    | to a random, 32 character string, otherwise these encrypted strings\n    | will not be safe. Please do this before deploying an application!\n    |\n    */\n\n    'key' => env('APP_KEY'),\n\n    'cipher' => 'AES-256-CBC',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Logging Configuration\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the log settings for your application. Out of\n    | the box, Laravel uses the Monolog PHP logging library. This gives\n    | you a variety of powerful log handlers / formatters to utilize.\n    |\n    | Available Settings: \"single\", \"daily\", \"syslog\", \"errorlog\"\n    |\n    */\n\n    'log' => env('APP_LOG', 'single'),\n\n    'log_level' => env('APP_LOG_LEVEL', 'debug'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Autoloaded Service Providers\n    |--------------------------------------------------------------------------\n    |\n    | The service providers listed here will be automatically loaded on the\n    | request to your application. Feel free to add your own services to\n    | this array to grant expanded functionality to your applications.\n    |\n    */\n\n    'providers' => [\n\n        /*\n         * Laravel Framework Service Providers...\n         */\n        Illuminate\\Auth\\AuthServiceProvider::class,\n        Illuminate\\Broadcasting\\BroadcastServiceProvider::class,\n        Illuminate\\Bus\\BusServiceProvider::class,\n        Illuminate\\Cache\\CacheServiceProvider::class,\n        Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider::class,\n        Illuminate\\Cookie\\CookieServiceProvider::class,\n        Illuminate\\Database\\DatabaseServiceProvider::class,\n        Illuminate\\Encryption\\EncryptionServiceProvider::class,\n        Illuminate\\Filesystem\\FilesystemServiceProvider::class,\n        Illuminate\\Foundation\\Providers\\FoundationServiceProvider::class,\n        Illuminate\\Hashing\\HashServiceProvider::class,\n        Illuminate\\Mail\\MailServiceProvider::class,\n        Illuminate\\Notifications\\NotificationServiceProvider::class,\n        Illuminate\\Pagination\\PaginationServiceProvider::class,\n        Illuminate\\Pipeline\\PipelineServiceProvider::class,\n        Illuminate\\Queue\\QueueServiceProvider::class,\n        Illuminate\\Redis\\RedisServiceProvider::class,\n        Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider::class,\n        Illuminate\\Session\\SessionServiceProvider::class,\n        Illuminate\\Translation\\TranslationServiceProvider::class,\n        Illuminate\\Validation\\ValidationServiceProvider::class,\n        Illuminate\\View\\ViewServiceProvider::class,\n\n        /*\n         * Package Service Providers...\n         */\n        Laravel\\Tinker\\TinkerServiceProvider::class,\n        Intervention\\Image\\ImageServiceProvider::class,\n        Collective\\Html\\HtmlServiceProvider::class,\n        \n        /*\n         * Application Service Providers...\n         */\n        App\\Providers\\AppServiceProvider::class,\n        App\\Providers\\AuthServiceProvider::class,\n        // App\\Providers\\BroadcastServiceProvider::class,\n        App\\Providers\\EventServiceProvider::class,\n        App\\Providers\\RouteServiceProvider::class,\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Class Aliases\n    |--------------------------------------------------------------------------\n    |\n    | This array of class aliases will be registered when this application\n    | is started. However, feel free to register as many as you wish as\n    | the aliases are \"lazy\" loaded so they don't hinder performance.\n    |\n    */\n\n    'aliases' => [\n\n        'App' => Illuminate\\Support\\Facades\\App::class,\n        'Artisan' => Illuminate\\Support\\Facades\\Artisan::class,\n        'Auth' => Illuminate\\Support\\Facades\\Auth::class,\n        'Blade' => Illuminate\\Support\\Facades\\Blade::class,\n        'Broadcast' => Illuminate\\Support\\Facades\\Broadcast::class,\n        'Bus' => Illuminate\\Support\\Facades\\Bus::class,\n        'Cache' => Illuminate\\Support\\Facades\\Cache::class,\n        'Config' => Illuminate\\Support\\Facades\\Config::class,\n        'Cookie' => Illuminate\\Support\\Facades\\Cookie::class,\n        'Crypt' => Illuminate\\Support\\Facades\\Crypt::class,\n        'DB' => Illuminate\\Support\\Facades\\DB::class,\n        'Eloquent' => Illuminate\\Database\\Eloquent\\Model::class,\n        'Event' => Illuminate\\Support\\Facades\\Event::class,\n        'File' => Illuminate\\Support\\Facades\\File::class,\n        'Gate' => Illuminate\\Support\\Facades\\Gate::class,\n        'Hash' => Illuminate\\Support\\Facades\\Hash::class,\n        'Lang' => Illuminate\\Support\\Facades\\Lang::class,\n        'Log' => Illuminate\\Support\\Facades\\Log::class,\n        'Mail' => Illuminate\\Support\\Facades\\Mail::class,\n        'Notification' => Illuminate\\Support\\Facades\\Notification::class,\n        'Password' => Illuminate\\Support\\Facades\\Password::class,\n        'Queue' => Illuminate\\Support\\Facades\\Queue::class,\n        'Redirect' => Illuminate\\Support\\Facades\\Redirect::class,\n        'Redis' => Illuminate\\Support\\Facades\\Redis::class,\n        'Request' => Illuminate\\Support\\Facades\\Request::class,\n        'Response' => Illuminate\\Support\\Facades\\Response::class,\n        'Route' => Illuminate\\Support\\Facades\\Route::class,\n        'Schema' => Illuminate\\Support\\Facades\\Schema::class,\n        'Session' => Illuminate\\Support\\Facades\\Session::class,\n        'Storage' => Illuminate\\Support\\Facades\\Storage::class,\n        'URL' => Illuminate\\Support\\Facades\\URL::class,\n        'Validator' => Illuminate\\Support\\Facades\\Validator::class,\n        'View' => Illuminate\\Support\\Facades\\View::class,\n\n        /*\n         * Package Aliases\n         */\n        'Image'        => Intervention\\Image\\Facades\\Image::class,\n        'Form'         => Collective\\Html\\FormFacade::class,\n        'Html'         => Collective\\Html\\HtmlFacade::class,\n        \n    ],\n\n    \n\n];\n"
  },
  {
    "path": "config/auth.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Defaults\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default authentication \"guard\" and password\n    | reset options for your application. You may change these defaults\n    | as required, but they're a perfect start for most applications.\n    |\n    */\n\n    'defaults' => [\n        'guard' => 'web',\n        'passwords' => 'users',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Guards\n    |--------------------------------------------------------------------------\n    |\n    | Next, you may define every authentication guard for your application.\n    | Of course, a great default configuration has been defined for you\n    | here which uses session storage and the Eloquent user provider.\n    |\n    | All authentication drivers have a user provider. This defines how the\n    | users are actually retrieved out of your database or other storage\n    | mechanisms used by this application to persist your user's data.\n    |\n    | Supported: \"session\", \"token\"\n    |\n    */\n\n    'guards' => [\n        'web' => [\n            'driver' => 'session',\n            'provider' => 'users',\n        ],\n\n        'api' => [\n            'driver' => 'token',\n            'provider' => 'users',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | User Providers\n    |--------------------------------------------------------------------------\n    |\n    | All authentication drivers have a user provider. This defines how the\n    | users are actually retrieved out of your database or other storage\n    | mechanisms used by this application to persist your user's data.\n    |\n    | If you have multiple user tables or models you may configure multiple\n    | sources which represent each model / table. These sources may then\n    | be assigned to any extra authentication guards you have defined.\n    |\n    | Supported: \"database\", \"eloquent\"\n    |\n    */\n\n    'providers' => [\n        'users' => [\n            'driver' => 'eloquent',\n            'model' => App\\User::class,\n        ],\n\n        // 'users' => [\n        //     'driver' => 'database',\n        //     'table' => 'users',\n        // ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Resetting Passwords\n    |--------------------------------------------------------------------------\n    |\n    | You may specify multiple password reset configurations if you have more\n    | than one user table or model in the application and you want to have\n    | separate password reset settings based on the specific user types.\n    |\n    | The expire time is the number of minutes that the reset token should be\n    | considered valid. This security feature keeps tokens short-lived so\n    | they have less time to be guessed. You may change this as needed.\n    |\n    */\n\n    'passwords' => [\n        'users' => [\n            'provider' => 'users',\n            'table' => 'password_resets',\n            'expire' => 60,\n        ],\n    ],\n\n];\n"
  },
  {
    "path": "config/broadcasting.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Broadcaster\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default broadcaster that will be used by the\n    | framework when an event needs to be broadcast. You may set this to\n    | any of the connections defined in the \"connections\" array below.\n    |\n    | Supported: \"pusher\", \"redis\", \"log\", \"null\"\n    |\n    */\n\n    'default' => env('BROADCAST_DRIVER', 'null'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Broadcast Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define all of the broadcast connections that will be used\n    | to broadcast events to other systems or over websockets. Samples of\n    | each available type of connection are provided inside this array.\n    |\n    */\n\n    'connections' => [\n\n        'pusher' => [\n            'driver' => 'pusher',\n            'key' => env('PUSHER_APP_KEY'),\n            'secret' => env('PUSHER_APP_SECRET'),\n            'app_id' => env('PUSHER_APP_ID'),\n            'options' => [\n                //\n            ],\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => 'default',\n        ],\n\n        'log' => [\n            'driver' => 'log',\n        ],\n\n        'null' => [\n            'driver' => 'null',\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/cache.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default cache connection that gets used while\n    | using this caching library. This connection is used when another is\n    | not explicitly specified when executing a given caching function.\n    |\n    | Supported: \"apc\", \"array\", \"database\", \"file\", \"memcached\", \"redis\"\n    |\n    */\n\n    'default' => env('CACHE_DRIVER', 'file'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Stores\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define all of the cache \"stores\" for your application as\n    | well as their drivers. You may even define multiple stores for the\n    | same cache driver to group types of items stored in your caches.\n    |\n    */\n\n    'stores' => [\n\n        'apc' => [\n            'driver' => 'apc',\n        ],\n\n        'array' => [\n            'driver' => 'array',\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'table' => 'cache',\n            'connection' => null,\n        ],\n\n        'file' => [\n            'driver' => 'file',\n            'path' => storage_path('framework/cache/data'),\n        ],\n\n        'memcached' => [\n            'driver' => 'memcached',\n            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),\n            'sasl' => [\n                env('MEMCACHED_USERNAME'),\n                env('MEMCACHED_PASSWORD'),\n            ],\n            'options' => [\n                // Memcached::OPT_CONNECT_TIMEOUT  => 2000,\n            ],\n            'servers' => [\n                [\n                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),\n                    'port' => env('MEMCACHED_PORT', 11211),\n                    'weight' => 100,\n                ],\n            ],\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => 'default',\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Key Prefix\n    |--------------------------------------------------------------------------\n    |\n    | When utilizing a RAM based store such as APC or Memcached, there might\n    | be other applications utilizing the same cache. So, we'll specify a\n    | value to get prefixed to all our keys so we can avoid collisions.\n    |\n    */\n\n    'prefix' => 'laravel',\n\n];\n"
  },
  {
    "path": "config/database.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Database Connection Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which of the database connections below you wish\n    | to use as your default connection for all database work. Of course\n    | you may use many connections at once using the Database library.\n    |\n    */\n\n    'default' => env('DB_CONNECTION', 'mysql'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Database Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here are each of the database connections setup for your application.\n    | Of course, examples of configuring each database platform that is\n    | supported by Laravel is shown below to make development simple.\n    |\n    |\n    | All database work in Laravel is done through the PHP PDO facilities\n    | so make sure you have the driver for your particular database of\n    | choice installed on your machine before you begin development.\n    |\n    */\n\n    'connections' => [\n\n        'sqlite' => [\n            'driver' => 'sqlite',\n            'database' => env('DB_DATABASE', database_path('database.sqlite')),\n            'prefix' => '',\n        ],\n\n        'mysql' => [\n            'driver' => 'mysql',\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '3306'),\n            'database' => env('DB_DATABASE', 'forge'),\n            'username' => env('DB_USERNAME', 'forge'),\n            'password' => env('DB_PASSWORD', ''),\n            'unix_socket' => env('DB_SOCKET', ''),\n            'charset' => 'utf8mb4',\n            'collation' => 'utf8mb4_unicode_ci',\n            'prefix' => '',\n            'strict' => true,\n            'engine' => null,\n        ],\n\n        'pgsql' => [\n            'driver' => 'pgsql',\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '5432'),\n            'database' => env('DB_DATABASE', 'forge'),\n            'username' => env('DB_USERNAME', 'forge'),\n            'password' => env('DB_PASSWORD', ''),\n            'charset' => 'utf8',\n            'prefix' => '',\n            'schema' => 'public',\n            'sslmode' => 'prefer',\n        ],\n\n        'sqlsrv' => [\n            'driver' => 'sqlsrv',\n            'host' => env('DB_HOST', 'localhost'),\n            'port' => env('DB_PORT', '1433'),\n            'database' => env('DB_DATABASE', 'forge'),\n            'username' => env('DB_USERNAME', 'forge'),\n            'password' => env('DB_PASSWORD', ''),\n            'charset' => 'utf8',\n            'prefix' => '',\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Migration Repository Table\n    |--------------------------------------------------------------------------\n    |\n    | This table keeps track of all the migrations that have already run for\n    | your application. Using this information, we can determine which of\n    | the migrations on disk haven't actually been run in the database.\n    |\n    */\n\n    'migrations' => 'migrations',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Redis Databases\n    |--------------------------------------------------------------------------\n    |\n    | Redis is an open source, fast, and advanced key-value store that also\n    | provides a richer set of commands than a typical key-value systems\n    | such as APC or Memcached. Laravel makes it easy to dig right in.\n    |\n    */\n\n    'redis' => [\n\n        'client' => 'predis',\n\n        'default' => [\n            'host' => env('REDIS_HOST', '127.0.0.1'),\n            'password' => env('REDIS_PASSWORD', null),\n            'port' => env('REDIS_PORT', 6379),\n            'database' => 0,\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/filesystems.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default filesystem disk that should be used\n    | by the framework. The \"local\" disk, as well as a variety of cloud\n    | based disks are available to your application. Just store away!\n    |\n    */\n\n    'default' => 'local',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Cloud Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | Many applications store files both locally and in the cloud. For this\n    | reason, you may specify a default \"cloud\" driver here. This driver\n    | will be bound as the Cloud disk implementation in the container.\n    |\n    */\n\n    'cloud' => 's3',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Filesystem Disks\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure as many filesystem \"disks\" as you wish, and you\n    | may even configure multiple disks of the same driver. Defaults have\n    | been setup for each driver as an example of the required options.\n    |\n    | Supported Drivers: \"local\", \"ftp\", \"s3\", \"rackspace\"\n    |\n    */\n\n    'disks' => [\n\n        'local' => [\n            'driver' => 'local',\n            'root'   => storage_path('app'),\n        ],\n        \n        'public' => [\n            'driver'     => 'local',\n            'root'       => storage_path('app/public'),\n            'url'        => env('APP_URL') . '/storage',\n            'visibility' => 'public',\n        ],\n\n        's3' => [\n            'driver' => 's3',\n            'key'    => env('AWS_KEY'),\n            'secret' => env('AWS_SECRET'),\n            'region' => env('AWS_REGION'),\n            'bucket' => env('AWS_BUCKET'),\n        ],\n\n        'uploads' => [\n            'driver' => 'local',\n            'root' => public_path('uploads'),\n        ],\n\n        'uploads_test' => [\n            'driver' => 'local',\n            'root' => public_path('uploads/test')\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/mail.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Mail Driver\n    |--------------------------------------------------------------------------\n    |\n    | Laravel supports both SMTP and PHP's \"mail\" function as drivers for the\n    | sending of e-mail. You may specify which one you're using throughout\n    | your application here. By default, Laravel is setup for SMTP mail.\n    |\n    | Supported: \"smtp\", \"sendmail\", \"mailgun\", \"mandrill\", \"ses\",\n    |            \"sparkpost\", \"log\", \"array\"\n    |\n    */\n\n    'driver' => env('MAIL_DRIVER', 'smtp'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | SMTP Host Address\n    |--------------------------------------------------------------------------\n    |\n    | Here you may provide the host address of the SMTP server used by your\n    | applications. A default option is provided that is compatible with\n    | the Mailgun mail service which will provide reliable deliveries.\n    |\n    */\n\n    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | SMTP Host Port\n    |--------------------------------------------------------------------------\n    |\n    | This is the SMTP port used by your application to deliver e-mails to\n    | users of the application. Like the host we have set this value to\n    | stay compatible with the Mailgun e-mail application by default.\n    |\n    */\n\n    'port' => env('MAIL_PORT', 587),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Global \"From\" Address\n    |--------------------------------------------------------------------------\n    |\n    | You may wish for all e-mails sent by your application to be sent from\n    | the same address. Here, you may specify a name and address that is\n    | used globally for all e-mails that are sent by your application.\n    |\n    */\n\n    'from' => [\n        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),\n        'name' => env('MAIL_FROM_NAME', 'Example'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | E-Mail Encryption Protocol\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the encryption protocol that should be used when\n    | the application send e-mail messages. A sensible default using the\n    | transport layer security protocol should provide great security.\n    |\n    */\n\n    'encryption' => env('MAIL_ENCRYPTION', 'tls'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | SMTP Server Username\n    |--------------------------------------------------------------------------\n    |\n    | If your SMTP server requires a username for authentication, you should\n    | set it here. This will get used to authenticate with your server on\n    | connection. You may also set the \"password\" value below this one.\n    |\n    */\n\n    'username' => env('MAIL_USERNAME'),\n\n    'password' => env('MAIL_PASSWORD'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Sendmail System Path\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"sendmail\" driver to send e-mails, we will need to know\n    | the path to where Sendmail lives on this server. A default path has\n    | been provided here, which will work well on most of your systems.\n    |\n    */\n\n    'sendmail' => '/usr/sbin/sendmail -bs',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Markdown Mail Settings\n    |--------------------------------------------------------------------------\n    |\n    | If you are using Markdown based email rendering, you may configure your\n    | theme and component paths here, allowing you to customize the design\n    | of the emails. Or, you may simply stick with the Laravel defaults!\n    |\n    */\n\n    'markdown' => [\n        'theme' => 'default',\n\n        'paths' => [\n            resource_path('views/vendor/mail'),\n        ],\n    ],\n\n];\n"
  },
  {
    "path": "config/queue.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Queue Driver\n    |--------------------------------------------------------------------------\n    |\n    | Laravel's queue API supports an assortment of back-ends via a single\n    | API, giving you convenient access to each back-end using the same\n    | syntax for each one. Here you may set the default queue driver.\n    |\n    | Supported: \"sync\", \"database\", \"beanstalkd\", \"sqs\", \"redis\", \"null\"\n    |\n    */\n\n    'default' => env('QUEUE_DRIVER', 'sync'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Queue Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the connection information for each server that\n    | is used by your application. A default configuration has been added\n    | for each back-end shipped with Laravel. You are free to add more.\n    |\n    */\n\n    'connections' => [\n\n        'sync' => [\n            'driver' => 'sync',\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'table' => 'jobs',\n            'queue' => 'default',\n            'retry_after' => 90,\n        ],\n\n        'beanstalkd' => [\n            'driver' => 'beanstalkd',\n            'host' => 'localhost',\n            'queue' => 'default',\n            'retry_after' => 90,\n        ],\n\n        'sqs' => [\n            'driver' => 'sqs',\n            'key' => 'your-public-key',\n            'secret' => 'your-secret-key',\n            'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id',\n            'queue' => 'your-queue-name',\n            'region' => 'us-east-1',\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => 'default',\n            'queue' => 'default',\n            'retry_after' => 90,\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Failed Queue Jobs\n    |--------------------------------------------------------------------------\n    |\n    | These options configure the behavior of failed queue job logging so you\n    | can control which database and table are used to store the jobs that\n    | have failed. You may change them to any database / table you wish.\n    |\n    */\n\n    'failed' => [\n        'database' => env('DB_CONNECTION', 'mysql'),\n        'table' => 'failed_jobs',\n    ],\n\n];\n"
  },
  {
    "path": "config/services.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Party Services\n    |--------------------------------------------------------------------------\n    |\n    | This file is for storing the credentials for third party services such\n    | as Stripe, Mailgun, SparkPost and others. This file provides a sane\n    | default location for this type of information, allowing packages\n    | to have a conventional place to find your various credentials.\n    |\n    */\n\n    'mailgun' => [\n        'domain' => env('MAILGUN_DOMAIN'),\n        'secret' => env('MAILGUN_SECRET'),\n    ],\n\n    'ses' => [\n        'key' => env('SES_KEY'),\n        'secret' => env('SES_SECRET'),\n        'region' => 'us-east-1',\n    ],\n\n    'sparkpost' => [\n        'secret' => env('SPARKPOST_SECRET'),\n    ],\n\n    'stripe' => [\n        'model' => App\\User::class,\n        'key' => env('STRIPE_KEY'),\n        'secret' => env('STRIPE_SECRET'),\n    ],\n\n    \n\n];\n"
  },
  {
    "path": "config/session.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Session Driver\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default session \"driver\" that will be used on\n    | requests. By default, we will use the lightweight native driver but\n    | you may specify any of the other wonderful drivers provided here.\n    |\n    | Supported: \"file\", \"cookie\", \"database\", \"apc\",\n    |            \"memcached\", \"redis\", \"array\"\n    |\n    */\n\n    'driver' => env('SESSION_DRIVER', 'file'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Lifetime\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the number of minutes that you wish the session\n    | to be allowed to remain idle before it expires. If you want them\n    | to immediately expire on the browser closing, set that option.\n    |\n    */\n\n    'lifetime' => 120,\n\n    'expire_on_close' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Encryption\n    |--------------------------------------------------------------------------\n    |\n    | This option allows you to easily specify that all of your session data\n    | should be encrypted before it is stored. All encryption will be run\n    | automatically by Laravel and you can use the Session like normal.\n    |\n    */\n\n    'encrypt' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session File Location\n    |--------------------------------------------------------------------------\n    |\n    | When using the native session driver, we need a location where session\n    | files may be stored. A default has been set for you but a different\n    | location may be specified. This is only needed for file sessions.\n    |\n    */\n\n    'files' => storage_path('framework/sessions'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Connection\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" or \"redis\" session drivers, you may specify a\n    | connection that should be used to manage these sessions. This should\n    | correspond to a connection in your database configuration options.\n    |\n    */\n\n    'connection' => null,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Table\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" session driver, you may specify the table we\n    | should use to manage the sessions. Of course, a sensible default is\n    | provided for you; however, you are free to change this as needed.\n    |\n    */\n\n    'table' => 'sessions',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"apc\" or \"memcached\" session drivers, you may specify a\n    | cache store that should be used for these sessions. This value must\n    | correspond with one of the application's configured cache stores.\n    |\n    */\n\n    'store' => null,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Sweeping Lottery\n    |--------------------------------------------------------------------------\n    |\n    | Some session drivers must manually sweep their storage location to get\n    | rid of old sessions from storage. Here are the chances that it will\n    | happen on a given request. By default, the odds are 2 out of 100.\n    |\n    */\n\n    'lottery' => [2, 100],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may change the name of the cookie used to identify a session\n    | instance by ID. The name specified here will get used every time a\n    | new session cookie is created by the framework for every driver.\n    |\n    */\n\n    'cookie' => env(\n        'SESSION_COOKIE',\n        str_slug(env('APP_NAME', 'laravel'), '_').'_session'\n    ),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Path\n    |--------------------------------------------------------------------------\n    |\n    | The session cookie path determines the path for which the cookie will\n    | be regarded as available. Typically, this will be the root path of\n    | your application but you are free to change this when necessary.\n    |\n    */\n\n    'path' => '/',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Domain\n    |--------------------------------------------------------------------------\n    |\n    | Here you may change the domain of the cookie used to identify a session\n    | in your application. This will determine which domains the cookie is\n    | available to in your application. A sensible default has been set.\n    |\n    */\n\n    'domain' => env('SESSION_DOMAIN', null),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTPS Only Cookies\n    |--------------------------------------------------------------------------\n    |\n    | By setting this option to true, session cookies will only be sent back\n    | to the server if the browser has a HTTPS connection. This will keep\n    | the cookie from being sent to you if it can not be done securely.\n    |\n    */\n\n    'secure' => env('SESSION_SECURE_COOKIE', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTP Access Only\n    |--------------------------------------------------------------------------\n    |\n    | Setting this value to true will prevent JavaScript from accessing the\n    | value of the cookie and the cookie will only be accessible through\n    | the HTTP protocol. You are free to modify this option if needed.\n    |\n    */\n\n    'http_only' => true,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Same-Site Cookies\n    |--------------------------------------------------------------------------\n    |\n    | This option determines how your cookies behave when cross-site requests\n    | take place, and can be used to mitigate CSRF attacks. By default, we\n    | do not enable this as other CSRF protection services are in place.\n    |\n    | Supported: \"lax\", \"strict\"\n    |\n    */\n\n    'same_site' => null,\n\n];\n"
  },
  {
    "path": "config/view.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | View Storage Paths\n    |--------------------------------------------------------------------------\n    |\n    | Most templating systems load templates from disk. Here you may specify\n    | an array of paths that should be checked for your views. Of course\n    | the usual Laravel view path has already been registered for you.\n    |\n    */\n\n    'paths' => [\n        resource_path('views'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Compiled View Path\n    |--------------------------------------------------------------------------\n    |\n    | This option determines where all the compiled Blade templates will be\n    | stored for your application. Typically, this is within the storage\n    | directory. However, as usual, you are free to change this value.\n    |\n    */\n\n    'compiled' => realpath(storage_path('framework/views')),\n\n];\n"
  },
  {
    "path": "database/.gitignore",
    "content": "*.sqlite\n"
  },
  {
    "path": "database/factories/BookingFactory.php",
    "content": "<?php\n\n$factory->define(App\\Booking::class, function (Faker\\Generator $faker) {\n    return [\n        \"customer_id\" => factory('App\\Customer')->create(),\n        \"room_id\" => factory('App\\Room')->create(),\n        \"time_from\" => $faker->date(\"d-m-Y H:i:s\", $max = 'now'),\n        \"time_to\" => $faker->date(\"d-m-Y H:i:s\", $max = 'now'),\n        \"additional_information\" => $faker->name,\n    ];\n});\n"
  },
  {
    "path": "database/factories/CountryFactory.php",
    "content": "<?php\n\n$factory->define(App\\Country::class, function (Faker\\Generator $faker) {\n    return [\n        \"shortcode\" => $faker->name,\n        \"title\" => $faker->name,\n        \"name\" => $faker->name,\n    ];\n});\n"
  },
  {
    "path": "database/factories/CustomerFactory.php",
    "content": "<?php\n\n$factory->define(App\\Customer::class, function (Faker\\Generator $faker) {\n    return [\n        \"first_name\" => $faker->name,\n        \"last_name\" => $faker->name,\n        \"address\" => $faker->name,\n        \"phone\" => $faker->name,\n        \"email\" => $faker->safeEmail,\n        \"country_id\" => factory('App\\Country')->create(),\n    ];\n});\n"
  },
  {
    "path": "database/factories/FindRoomFactory.php",
    "content": "<?php\n\n$factory->define(App\\FindRoom::class, function (Faker\\Generator $faker) {\n    return [\n\n    ];\n});\n"
  },
  {
    "path": "database/factories/RoleFactory.php",
    "content": "<?php\n\n$factory->define(App\\Role::class, function (Faker\\Generator $faker) {\n    return [\n        \"title\" => $faker->name,\n    ];\n});\n"
  },
  {
    "path": "database/factories/RoomFactory.php",
    "content": "<?php\n\n$factory->define(App\\Room::class, function (Faker\\Generator $faker) {\n    return [\n        \"room_number\" => $faker->name,\n        \"floor\" => $faker->randomNumber(2),\n        \"description\" => $faker->name,\n    ];\n});\n"
  },
  {
    "path": "database/factories/UserFactory.php",
    "content": "<?php\n\n$factory->define(App\\User::class, function (Faker\\Generator $faker) {\n    return [\n        \"name\" => $faker->name,\n        \"email\" => $faker->safeEmail,\n        \"password\" => str_random(10),\n        \"role_id\" => factory('App\\Role')->create(),\n        \"remember_token\" => $faker->name,\n    ];\n});\n"
  },
  {
    "path": "database/migrations/2014_10_12_100000_create_password_resets_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreatePasswordResetsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        if (! Schema::hasTable('password_resets')) {\n            Schema::create('password_resets', function (Blueprint $table) {\n                $table->string('email')->index();\n                $table->string('token');\n                $table->timestamp('created_at')->nullable();\n            });\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('password_resets');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_01_23_191448_create_1516727688_roles_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass Create1516727688RolesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        if(! Schema::hasTable('roles')) {\n            Schema::create('roles', function (Blueprint $table) {\n                $table->increments('id');\n                $table->string('title');\n                \n                $table->timestamps();\n                \n            });\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('roles');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_01_23_191453_create_1516727692_users_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass Create1516727692UsersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        if(! Schema::hasTable('users')) {\n            Schema::create('users', function (Blueprint $table) {\n                $table->increments('id');\n                $table->string('name');\n                $table->string('email');\n                $table->string('password');\n                $table->string('remember_token')->nullable();\n                \n                $table->timestamps();\n                \n            });\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('users');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_01_23_191454_add_5a676d8f84952_relationships_to_user_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass Add5a676d8f84952RelationshipsToUserTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('users', function(Blueprint $table) {\n            if (!Schema::hasColumn('users', 'role_id')) {\n                $table->integer('role_id')->unsigned()->nullable();\n                $table->foreign('role_id', '110457_5a676d8ddf4c7')->references('id')->on('roles')->onDelete('cascade');\n                }\n                \n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('users', function(Blueprint $table) {\n            \n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_01_23_191536_create_1516727736_countries_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass Create1516727736CountriesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        if(! Schema::hasTable('countries')) {\n            Schema::create('countries', function (Blueprint $table) {\n                $table->increments('id');\n                $table->string('shortcode')->nullable();\n                $table->string('title')->nullable();\n                \n                $table->timestamps();\n                $table->softDeletes();\n\n                $table->index(['deleted_at']);\n            });\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('countries');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_01_23_192021_create_1516728020_customers_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass Create1516728020CustomersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        if(! Schema::hasTable('customers')) {\n            Schema::create('customers', function (Blueprint $table) {\n                $table->increments('id');\n                $table->string('first_name');\n                $table->string('last_name');\n                $table->string('address')->nullable();\n                $table->string('phone')->nullable();\n                $table->string('email');\n                \n                $table->timestamps();\n                $table->softDeletes();\n\n                $table->index(['deleted_at']);\n            });\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('customers');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_01_23_192022_add_5a676ed766f5b_relationships_to_customer_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass Add5a676ed766f5bRelationshipsToCustomerTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('customers', function(Blueprint $table) {\n            if (!Schema::hasColumn('customers', 'country_id')) {\n                $table->integer('country_id')->unsigned()->nullable();\n                $table->foreign('country_id', '110459_5a676ed5d9792')->references('id')->on('countries')->onDelete('cascade');\n                }\n                \n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('customers', function(Blueprint $table) {\n            \n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_01_23_192145_create_1516728105_rooms_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass Create1516728105RoomsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        if(! Schema::hasTable('rooms')) {\n            Schema::create('rooms', function (Blueprint $table) {\n                $table->increments('id');\n                $table->string('room_number');\n                $table->integer('floor')->nullable();\n                $table->text('description')->nullable();\n                \n                $table->timestamps();\n                $table->softDeletes();\n\n                $table->index(['deleted_at']);\n            });\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('rooms');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_01_23_192345_create_1516728224_bookings_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass Create1516728224BookingsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        if(! Schema::hasTable('bookings')) {\n            Schema::create('bookings', function (Blueprint $table) {\n                $table->increments('id');\n                $table->datetime('time_from')->nullable();\n                $table->datetime('time_to')->nullable();\n                $table->text('additional_information')->nullable();\n                \n                $table->timestamps();\n                $table->softDeletes();\n\n                $table->index(['deleted_at']);\n\n\n            });\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('bookings');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_01_23_192346_add_5a676fa3e3cd8_relationships_to_booking_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass Add5a676fa3e3cd8RelationshipsToBookingTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('bookings', function(Blueprint $table) {\n            if (!Schema::hasColumn('bookings', 'customer_id')) {\n                $table->integer('customer_id')->unsigned()->nullable();\n                $table->foreign('customer_id', '110461_5a676fa2321c7')->references('id')->on('customers')->onDelete('cascade');\n                }\n                if (!Schema::hasColumn('bookings', 'room_id')) {\n                $table->integer('room_id')->unsigned()->nullable();\n                $table->foreign('room_id', '110461_5a676fa239ffd')->references('id')->on('rooms')->onDelete('cascade');\n                }\n                \n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('bookings', function(Blueprint $table) {\n            \n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_01_23_192755_add_5a67709b89c38_relationships_to_booking_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass Add5a67709b89c38RelationshipsToBookingTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('bookings', function(Blueprint $table) {\n            if (!Schema::hasColumn('bookings', 'customer_id')) {\n                $table->integer('customer_id')->unsigned()->nullable();\n                $table->foreign('customer_id', '110461_5a676fa2321c7')->references('id')->on('customers')->onDelete('cascade');\n                }\n                if (!Schema::hasColumn('bookings', 'room_id')) {\n                $table->integer('room_id')->unsigned()->nullable();\n                $table->foreign('room_id', '110461_5a676fa239ffd')->references('id')->on('rooms')->onDelete('cascade');\n                }\n                \n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('bookings', function(Blueprint $table) {\n            \n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_01_23_192910_add_5a6770e6b5767_relationships_to_customer_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass Add5a6770e6b5767RelationshipsToCustomerTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('customers', function(Blueprint $table) {\n            if (!Schema::hasColumn('customers', 'country_id')) {\n                $table->integer('country_id')->unsigned()->nullable();\n                $table->foreign('country_id', '110459_5a676ed5d9792')->references('id')->on('countries')->onDelete('cascade');\n                }\n                \n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('customers', function(Blueprint $table) {\n            \n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2019_05_11_143908_create_categories_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateCategoriesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('categories', function (Blueprint $table) {\n            $table->increments('id');\n            $table->timestamps();\n            $table->string('name');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('categories');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2019_05_11_144019_add_category_rooms.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass AddCategoryRooms extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('rooms', function (Blueprint $table) {\n            $table->integer('category_id')->unsigned()->nullable();\n\n            $table->foreign('category_id')->references('id')->on('categories');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('rooms', function (Blueprint $table) {\n            $table->dropColumn('category_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2019_10_18_114615_add_amount_to_bookings_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass AddAmountToBookingsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('bookings', function (Blueprint $table) {\n            $table->integer('amount');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('bookings', function (Blueprint $table) {\n            $table->dropColumn('amount');\n\n        });\n    }\n}\n"
  },
  {
    "path": "database/seeds/CountrySeed.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass CountrySeed extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $items = [\n            \n            ['id' => 1, 'shortcode' => 'AF', 'title' => 'Afghanistan',],\n            ['id' => 2, 'shortcode' => 'AL', 'title' => 'Albania',],\n            ['id' => 3, 'shortcode' => 'DZ', 'title' => 'Algeria',],\n            ['id' => 4, 'shortcode' => 'AS', 'title' => 'American Samoa',],\n            ['id' => 5, 'shortcode' => 'AD', 'title' => 'Andorra',],\n            ['id' => 6, 'shortcode' => 'AO', 'title' => 'Angola',],\n            ['id' => 7, 'shortcode' => 'AI', 'title' => 'Anguilla',],\n            ['id' => 8, 'shortcode' => 'AQ', 'title' => 'Antarctica',],\n            ['id' => 9, 'shortcode' => 'AG', 'title' => 'Antigua and Barbuda',],\n            ['id' => 10, 'shortcode' => 'AR', 'title' => 'Argentina',],\n            ['id' => 11, 'shortcode' => 'AM', 'title' => 'Armenia',],\n            ['id' => 12, 'shortcode' => 'AW', 'title' => 'Aruba',],\n            ['id' => 13, 'shortcode' => 'AU', 'title' => 'Australia',],\n            ['id' => 14, 'shortcode' => 'AT', 'title' => 'Austria',],\n            ['id' => 15, 'shortcode' => 'AZ', 'title' => 'Azerbaijan',],\n            ['id' => 16, 'shortcode' => 'BS', 'title' => 'Bahamas',],\n            ['id' => 17, 'shortcode' => 'BH', 'title' => 'Bahrain',],\n            ['id' => 18, 'shortcode' => 'BD', 'title' => 'Bangladesh',],\n            ['id' => 19, 'shortcode' => 'BB', 'title' => 'Barbados',],\n            ['id' => 20, 'shortcode' => 'BY', 'title' => 'Belarus',],\n            ['id' => 21, 'shortcode' => 'BE', 'title' => 'Belgium',],\n            ['id' => 22, 'shortcode' => 'BZ', 'title' => 'Belize',],\n            ['id' => 23, 'shortcode' => 'BJ', 'title' => 'Benin',],\n            ['id' => 24, 'shortcode' => 'BM', 'title' => 'Bermuda',],\n            ['id' => 25, 'shortcode' => 'BT', 'title' => 'Bhutan',],\n            ['id' => 26, 'shortcode' => 'BO', 'title' => 'Bolivia',],\n            ['id' => 27, 'shortcode' => 'BA', 'title' => 'Bosnia and Herzegovina',],\n            ['id' => 28, 'shortcode' => 'BW', 'title' => 'Botswana',],\n            ['id' => 29, 'shortcode' => 'BV', 'title' => 'Bouvet Island',],\n            ['id' => 30, 'shortcode' => 'BR', 'title' => 'Brazil',],\n            ['id' => 31, 'shortcode' => 'BQ', 'title' => 'British Antarctic Territory',],\n            ['id' => 32, 'shortcode' => 'IO', 'title' => 'British Indian Ocean Territory',],\n            ['id' => 33, 'shortcode' => 'VG', 'title' => 'British Virgin Islands',],\n            ['id' => 34, 'shortcode' => 'BN', 'title' => 'Brunei',],\n            ['id' => 35, 'shortcode' => 'BG', 'title' => 'Bulgaria',],\n            ['id' => 36, 'shortcode' => 'BF', 'title' => 'Burkina Faso',],\n            ['id' => 37, 'shortcode' => 'BI', 'title' => 'Burundi',],\n            ['id' => 38, 'shortcode' => 'KH', 'title' => 'Cambodia',],\n            ['id' => 39, 'shortcode' => 'CM', 'title' => 'Cameroon',],\n            ['id' => 40, 'shortcode' => 'CA', 'title' => 'Canada',],\n            ['id' => 41, 'shortcode' => 'CT', 'title' => 'Canton and Enderbury Islands',],\n            ['id' => 42, 'shortcode' => 'CV', 'title' => 'Cape Verde',],\n            ['id' => 43, 'shortcode' => 'KY', 'title' => 'Cayman Islands',],\n            ['id' => 44, 'shortcode' => 'CF', 'title' => 'Central African Republic',],\n            ['id' => 45, 'shortcode' => 'TD', 'title' => 'Chad',],\n            ['id' => 46, 'shortcode' => 'CL', 'title' => 'Chile',],\n            ['id' => 47, 'shortcode' => 'CN', 'title' => 'China',],\n            ['id' => 48, 'shortcode' => 'CX', 'title' => 'Christmas Island',],\n            ['id' => 49, 'shortcode' => 'CC', 'title' => 'Cocos [Keeling] Islands',],\n            ['id' => 50, 'shortcode' => 'CO', 'title' => 'Colombia',],\n            ['id' => 51, 'shortcode' => 'KM', 'title' => 'Comoros',],\n            ['id' => 52, 'shortcode' => 'CG', 'title' => 'Congo - Brazzaville',],\n            ['id' => 53, 'shortcode' => 'CD', 'title' => 'Congo - Kinshasa',],\n            ['id' => 54, 'shortcode' => 'CK', 'title' => 'Cook Islands',],\n            ['id' => 55, 'shortcode' => 'CR', 'title' => 'Costa Rica',],\n            ['id' => 56, 'shortcode' => 'HR', 'title' => 'Croatia',],\n            ['id' => 57, 'shortcode' => 'CU', 'title' => 'Cuba',],\n            ['id' => 58, 'shortcode' => 'CY', 'title' => 'Cyprus',],\n            ['id' => 59, 'shortcode' => 'CZ', 'title' => 'Czech Republic',],\n            ['id' => 60, 'shortcode' => 'CI', 'title' => 'Côte d’Ivoire',],\n            ['id' => 61, 'shortcode' => 'DK', 'title' => 'Denmark',],\n            ['id' => 62, 'shortcode' => 'DJ', 'title' => 'Djibouti',],\n            ['id' => 63, 'shortcode' => 'DM', 'title' => 'Dominica',],\n            ['id' => 64, 'shortcode' => 'DO', 'title' => 'Dominican Republic',],\n            ['id' => 65, 'shortcode' => 'NQ', 'title' => 'Dronning Maud Land',],\n            ['id' => 66, 'shortcode' => 'DD', 'title' => 'East Germany',],\n            ['id' => 67, 'shortcode' => 'EC', 'title' => 'Ecuador',],\n            ['id' => 68, 'shortcode' => 'EG', 'title' => 'Egypt',],\n            ['id' => 69, 'shortcode' => 'SV', 'title' => 'El Salvador',],\n            ['id' => 70, 'shortcode' => 'GQ', 'title' => 'Equatorial Guinea',],\n            ['id' => 71, 'shortcode' => 'ER', 'title' => 'Eritrea',],\n            ['id' => 72, 'shortcode' => 'EE', 'title' => 'Estonia',],\n            ['id' => 73, 'shortcode' => 'ET', 'title' => 'Ethiopia',],\n            ['id' => 74, 'shortcode' => 'FK', 'title' => 'Falkland Islands',],\n            ['id' => 75, 'shortcode' => 'FO', 'title' => 'Faroe Islands',],\n            ['id' => 76, 'shortcode' => 'FJ', 'title' => 'Fiji',],\n            ['id' => 77, 'shortcode' => 'FI', 'title' => 'Finland',],\n            ['id' => 78, 'shortcode' => 'FR', 'title' => 'France',],\n            ['id' => 79, 'shortcode' => 'GF', 'title' => 'French Guiana',],\n            ['id' => 80, 'shortcode' => 'PF', 'title' => 'French Polynesia',],\n            ['id' => 81, 'shortcode' => 'TF', 'title' => 'French Southern Territories',],\n            ['id' => 82, 'shortcode' => 'FQ', 'title' => 'French Southern and Antarctic Territories',],\n            ['id' => 83, 'shortcode' => 'GA', 'title' => 'Gabon',],\n            ['id' => 84, 'shortcode' => 'GM', 'title' => 'Gambia',],\n            ['id' => 85, 'shortcode' => 'GE', 'title' => 'Georgia',],\n            ['id' => 86, 'shortcode' => 'DE', 'title' => 'Germany',],\n            ['id' => 87, 'shortcode' => 'GH', 'title' => 'Ghana',],\n            ['id' => 88, 'shortcode' => 'GI', 'title' => 'Gibraltar',],\n            ['id' => 89, 'shortcode' => 'GR', 'title' => 'Greece',],\n            ['id' => 90, 'shortcode' => 'GL', 'title' => 'Greenland',],\n            ['id' => 91, 'shortcode' => 'GD', 'title' => 'Grenada',],\n            ['id' => 92, 'shortcode' => 'GP', 'title' => 'Guadeloupe',],\n            ['id' => 93, 'shortcode' => 'GU', 'title' => 'Guam',],\n            ['id' => 94, 'shortcode' => 'GT', 'title' => 'Guatemala',],\n            ['id' => 95, 'shortcode' => 'GG', 'title' => 'Guernsey',],\n            ['id' => 96, 'shortcode' => 'GN', 'title' => 'Guinea',],\n            ['id' => 97, 'shortcode' => 'GW', 'title' => 'Guinea-Bissau',],\n            ['id' => 98, 'shortcode' => 'GY', 'title' => 'Guyana',],\n            ['id' => 99, 'shortcode' => 'HT', 'title' => 'Haiti',],\n            ['id' => 100, 'shortcode' => 'HM', 'title' => 'Heard Island and McDonald Islands',],\n            ['id' => 101, 'shortcode' => 'HN', 'title' => 'Honduras',],\n            ['id' => 102, 'shortcode' => 'HK', 'title' => 'Hong Kong SAR China',],\n            ['id' => 103, 'shortcode' => 'HU', 'title' => 'Hungary',],\n            ['id' => 104, 'shortcode' => 'IS', 'title' => 'Iceland',],\n            ['id' => 105, 'shortcode' => 'IN', 'title' => 'India',],\n            ['id' => 106, 'shortcode' => 'ID', 'title' => 'Indonesia',],\n            ['id' => 107, 'shortcode' => 'IR', 'title' => 'Iran',],\n            ['id' => 108, 'shortcode' => 'IQ', 'title' => 'Iraq',],\n            ['id' => 109, 'shortcode' => 'IE', 'title' => 'Ireland',],\n            ['id' => 110, 'shortcode' => 'IM', 'title' => 'Isle of Man',],\n            ['id' => 111, 'shortcode' => 'IL', 'title' => 'Israel',],\n            ['id' => 112, 'shortcode' => 'IT', 'title' => 'Italy',],\n            ['id' => 113, 'shortcode' => 'JM', 'title' => 'Jamaica',],\n            ['id' => 114, 'shortcode' => 'JP', 'title' => 'Japan',],\n            ['id' => 115, 'shortcode' => 'JE', 'title' => 'Jersey',],\n            ['id' => 116, 'shortcode' => 'JT', 'title' => 'Johnston Island',],\n            ['id' => 117, 'shortcode' => 'JO', 'title' => 'Jordan',],\n            ['id' => 118, 'shortcode' => 'KZ', 'title' => 'Kazakhstan',],\n            ['id' => 119, 'shortcode' => 'KE', 'title' => 'Kenya',],\n            ['id' => 120, 'shortcode' => 'KI', 'title' => 'Kiribati',],\n            ['id' => 121, 'shortcode' => 'KW', 'title' => 'Kuwait',],\n            ['id' => 122, 'shortcode' => 'KG', 'title' => 'Kyrgyzstan',],\n            ['id' => 123, 'shortcode' => 'LA', 'title' => 'Laos',],\n            ['id' => 124, 'shortcode' => 'LV', 'title' => 'Latvia',],\n            ['id' => 125, 'shortcode' => 'LB', 'title' => 'Lebanon',],\n            ['id' => 126, 'shortcode' => 'LS', 'title' => 'Lesotho',],\n            ['id' => 127, 'shortcode' => 'LR', 'title' => 'Liberia',],\n            ['id' => 128, 'shortcode' => 'LY', 'title' => 'Libya',],\n            ['id' => 129, 'shortcode' => 'LI', 'title' => 'Liechtenstein',],\n            ['id' => 130, 'shortcode' => 'LT', 'title' => 'Lithuania',],\n            ['id' => 131, 'shortcode' => 'LU', 'title' => 'Luxembourg',],\n            ['id' => 132, 'shortcode' => 'MO', 'title' => 'Macau SAR China',],\n            ['id' => 133, 'shortcode' => 'MK', 'title' => 'Macedonia',],\n            ['id' => 134, 'shortcode' => 'MG', 'title' => 'Madagascar',],\n            ['id' => 135, 'shortcode' => 'MW', 'title' => 'Malawi',],\n            ['id' => 136, 'shortcode' => 'MY', 'title' => 'Malaysia',],\n            ['id' => 137, 'shortcode' => 'MV', 'title' => 'Maldives',],\n            ['id' => 138, 'shortcode' => 'ML', 'title' => 'Mali',],\n            ['id' => 139, 'shortcode' => 'MT', 'title' => 'Malta',],\n            ['id' => 140, 'shortcode' => 'MH', 'title' => 'Marshall Islands',],\n            ['id' => 141, 'shortcode' => 'MQ', 'title' => 'Martinique',],\n            ['id' => 142, 'shortcode' => 'MR', 'title' => 'Mauritania',],\n            ['id' => 143, 'shortcode' => 'MU', 'title' => 'Mauritius',],\n            ['id' => 144, 'shortcode' => 'YT', 'title' => 'Mayotte',],\n            ['id' => 145, 'shortcode' => 'FX', 'title' => 'Metropolitan France',],\n            ['id' => 146, 'shortcode' => 'MX', 'title' => 'Mexico',],\n            ['id' => 147, 'shortcode' => 'FM', 'title' => 'Micronesia',],\n            ['id' => 148, 'shortcode' => 'MI', 'title' => 'Midway Islands',],\n            ['id' => 149, 'shortcode' => 'MD', 'title' => 'Moldova',],\n            ['id' => 150, 'shortcode' => 'MC', 'title' => 'Monaco',],\n            ['id' => 151, 'shortcode' => 'MN', 'title' => 'Mongolia',],\n            ['id' => 152, 'shortcode' => 'ME', 'title' => 'Montenegro',],\n            ['id' => 153, 'shortcode' => 'MS', 'title' => 'Montserrat',],\n            ['id' => 154, 'shortcode' => 'MA', 'title' => 'Morocco',],\n            ['id' => 155, 'shortcode' => 'MZ', 'title' => 'Mozambique',],\n            ['id' => 156, 'shortcode' => 'MM', 'title' => 'Myanmar [Burma]',],\n            ['id' => 157, 'shortcode' => 'NA', 'title' => 'Namibia',],\n            ['id' => 158, 'shortcode' => 'NR', 'title' => 'Nauru',],\n            ['id' => 159, 'shortcode' => 'NP', 'title' => 'Nepal',],\n            ['id' => 160, 'shortcode' => 'NL', 'title' => 'Netherlands',],\n            ['id' => 161, 'shortcode' => 'AN', 'title' => 'Netherlands Antilles',],\n            ['id' => 162, 'shortcode' => 'NT', 'title' => 'Neutral Zone',],\n            ['id' => 163, 'shortcode' => 'NC', 'title' => 'New Caledonia',],\n            ['id' => 164, 'shortcode' => 'NZ', 'title' => 'New Zealand',],\n            ['id' => 165, 'shortcode' => 'NI', 'title' => 'Nicaragua',],\n            ['id' => 166, 'shortcode' => 'NE', 'title' => 'Niger',],\n            ['id' => 167, 'shortcode' => 'NG', 'title' => 'Nigeria',],\n            ['id' => 168, 'shortcode' => 'NU', 'title' => 'Niue',],\n            ['id' => 169, 'shortcode' => 'NF', 'title' => 'Norfolk Island',],\n            ['id' => 170, 'shortcode' => 'KP', 'title' => 'North Korea',],\n            ['id' => 171, 'shortcode' => 'VD', 'title' => 'North Vietnam',],\n            ['id' => 172, 'shortcode' => 'MP', 'title' => 'Northern Mariana Islands',],\n            ['id' => 173, 'shortcode' => 'NO', 'title' => 'Norway',],\n            ['id' => 174, 'shortcode' => 'OM', 'title' => 'Oman',],\n            ['id' => 175, 'shortcode' => 'PC', 'title' => 'Pacific Islands Trust Territory',],\n            ['id' => 176, 'shortcode' => 'PK', 'title' => 'Pakistan',],\n            ['id' => 177, 'shortcode' => 'PW', 'title' => 'Palau',],\n            ['id' => 178, 'shortcode' => 'PS', 'title' => 'Palestinian Territories',],\n            ['id' => 179, 'shortcode' => 'PA', 'title' => 'Panama',],\n            ['id' => 180, 'shortcode' => 'PZ', 'title' => 'Panama Canal Zone',],\n            ['id' => 181, 'shortcode' => 'PG', 'title' => 'Papua New Guinea',],\n            ['id' => 182, 'shortcode' => 'PY', 'title' => 'Paraguay',],\n            ['id' => 183, 'shortcode' => 'YD', 'title' => 'People\\'s Democratic Republic of Yemen',],\n            ['id' => 184, 'shortcode' => 'PE', 'title' => 'Peru',],\n            ['id' => 185, 'shortcode' => 'PH', 'title' => 'Philippines',],\n            ['id' => 186, 'shortcode' => 'PN', 'title' => 'Pitcairn Islands',],\n            ['id' => 187, 'shortcode' => 'PL', 'title' => 'Poland',],\n            ['id' => 188, 'shortcode' => 'PT', 'title' => 'Portugal',],\n            ['id' => 189, 'shortcode' => 'PR', 'title' => 'Puerto Rico',],\n            ['id' => 190, 'shortcode' => 'QA', 'title' => 'Qatar',],\n            ['id' => 191, 'shortcode' => 'RO', 'title' => 'Romania',],\n            ['id' => 192, 'shortcode' => 'RU', 'title' => 'Russia',],\n            ['id' => 193, 'shortcode' => 'RW', 'title' => 'Rwanda',],\n            ['id' => 194, 'shortcode' => 'RE', 'title' => 'Réunion',],\n            ['id' => 195, 'shortcode' => 'BL', 'title' => 'Saint Barthélemy',],\n            ['id' => 196, 'shortcode' => 'SH', 'title' => 'Saint Helena',],\n            ['id' => 197, 'shortcode' => 'KN', 'title' => 'Saint Kitts and Nevis',],\n            ['id' => 198, 'shortcode' => 'LC', 'title' => 'Saint Lucia',],\n            ['id' => 199, 'shortcode' => 'MF', 'title' => 'Saint Martin',],\n            ['id' => 200, 'shortcode' => 'PM', 'title' => 'Saint Pierre and Miquelon',],\n            ['id' => 201, 'shortcode' => 'VC', 'title' => 'Saint Vincent and the Grenadines',],\n            ['id' => 202, 'shortcode' => 'WS', 'title' => 'Samoa',],\n            ['id' => 203, 'shortcode' => 'SM', 'title' => 'San Marino',],\n            ['id' => 204, 'shortcode' => 'SA', 'title' => 'Saudi Arabia',],\n            ['id' => 205, 'shortcode' => 'SN', 'title' => 'Senegal',],\n            ['id' => 206, 'shortcode' => 'RS', 'title' => 'Serbia',],\n            ['id' => 207, 'shortcode' => 'CS', 'title' => 'Serbia and Montenegro',],\n            ['id' => 208, 'shortcode' => 'SC', 'title' => 'Seychelles',],\n            ['id' => 209, 'shortcode' => 'SL', 'title' => 'Sierra Leone',],\n            ['id' => 210, 'shortcode' => 'SG', 'title' => 'Singapore',],\n            ['id' => 211, 'shortcode' => 'SK', 'title' => 'Slovakia',],\n            ['id' => 212, 'shortcode' => 'SI', 'title' => 'Slovenia',],\n            ['id' => 213, 'shortcode' => 'SB', 'title' => 'Solomon Islands',],\n            ['id' => 214, 'shortcode' => 'SO', 'title' => 'Somalia',],\n            ['id' => 215, 'shortcode' => 'ZA', 'title' => 'South Africa',],\n            ['id' => 216, 'shortcode' => 'GS', 'title' => 'South Georgia and the South Sandwich Islands',],\n            ['id' => 217, 'shortcode' => 'KR', 'title' => 'South Korea',],\n            ['id' => 218, 'shortcode' => 'ES', 'title' => 'Spain',],\n            ['id' => 219, 'shortcode' => 'LK', 'title' => 'Sri Lanka',],\n            ['id' => 220, 'shortcode' => 'SD', 'title' => 'Sudan',],\n            ['id' => 221, 'shortcode' => 'SR', 'title' => 'Suriname',],\n            ['id' => 222, 'shortcode' => 'SJ', 'title' => 'Svalbard and Jan Mayen',],\n            ['id' => 223, 'shortcode' => 'SZ', 'title' => 'Swaziland',],\n            ['id' => 224, 'shortcode' => 'SE', 'title' => 'Sweden',],\n            ['id' => 225, 'shortcode' => 'CH', 'title' => 'Switzerland',],\n            ['id' => 226, 'shortcode' => 'SY', 'title' => 'Syria',],\n            ['id' => 227, 'shortcode' => 'ST', 'title' => 'São Tomé and Príncipe',],\n            ['id' => 228, 'shortcode' => 'TW', 'title' => 'Taiwan',],\n            ['id' => 229, 'shortcode' => 'TJ', 'title' => 'Tajikistan',],\n            ['id' => 230, 'shortcode' => 'TZ', 'title' => 'Tanzania',],\n            ['id' => 231, 'shortcode' => 'TH', 'title' => 'Thailand',],\n            ['id' => 232, 'shortcode' => 'TL', 'title' => 'Timor-Leste',],\n            ['id' => 233, 'shortcode' => 'TG', 'title' => 'Togo',],\n            ['id' => 234, 'shortcode' => 'TK', 'title' => 'Tokelau',],\n            ['id' => 235, 'shortcode' => 'TO', 'title' => 'Tonga',],\n            ['id' => 236, 'shortcode' => 'TT', 'title' => 'Trinidad and Tobago',],\n            ['id' => 237, 'shortcode' => 'TN', 'title' => 'Tunisia',],\n            ['id' => 238, 'shortcode' => 'TR', 'title' => 'Turkey',],\n            ['id' => 239, 'shortcode' => 'TM', 'title' => 'Turkmenistan',],\n            ['id' => 240, 'shortcode' => 'TC', 'title' => 'Turks and Caicos Islands',],\n            ['id' => 241, 'shortcode' => 'TV', 'title' => 'Tuvalu',],\n            ['id' => 242, 'shortcode' => 'UM', 'title' => 'U.S. Minor Outlying Islands',],\n            ['id' => 243, 'shortcode' => 'PU', 'title' => 'U.S. Miscellaneous Pacific Islands',],\n            ['id' => 244, 'shortcode' => 'VI', 'title' => 'U.S. Virgin Islands',],\n            ['id' => 245, 'shortcode' => 'UG', 'title' => 'Uganda',],\n            ['id' => 246, 'shortcode' => 'UA', 'title' => 'Ukraine',],\n            ['id' => 247, 'shortcode' => 'SU', 'title' => 'Union of Soviet Socialist Republics',],\n            ['id' => 248, 'shortcode' => 'AE', 'title' => 'United Arab Emirates',],\n            ['id' => 249, 'shortcode' => 'GB', 'title' => 'United Kingdom',],\n            ['id' => 250, 'shortcode' => 'US', 'title' => 'United States',],\n            ['id' => 251, 'shortcode' => 'ZZ', 'title' => 'Unknown or Invalid Region',],\n            ['id' => 252, 'shortcode' => 'UY', 'title' => 'Uruguay',],\n            ['id' => 253, 'shortcode' => 'UZ', 'title' => 'Uzbekistan',],\n            ['id' => 254, 'shortcode' => 'VU', 'title' => 'Vanuatu',],\n            ['id' => 255, 'shortcode' => 'VA', 'title' => 'Vatican City',],\n            ['id' => 256, 'shortcode' => 'VE', 'title' => 'Venezuela',],\n            ['id' => 257, 'shortcode' => 'VN', 'title' => 'Vietnam',],\n            ['id' => 258, 'shortcode' => 'WK', 'title' => 'Wake Island',],\n            ['id' => 259, 'shortcode' => 'WF', 'title' => 'Wallis and Futuna',],\n            ['id' => 260, 'shortcode' => 'EH', 'title' => 'Western Sahara',],\n            ['id' => 261, 'shortcode' => 'YE', 'title' => 'Yemen',],\n            ['id' => 262, 'shortcode' => 'ZM', 'title' => 'Zambia',],\n            ['id' => 263, 'shortcode' => 'ZW', 'title' => 'Zimbabwe',],\n            ['id' => 264, 'shortcode' => 'AX', 'title' => 'Åland Islands',],\n\n        ];\n\n        foreach ($items as $item) {\n            \\App\\Country::create($item);\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeds/DatabaseSeeder.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass DatabaseSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        \n        $this->call(CountrySeed::class);\n        $this->call(RoleSeed::class);\n        $this->call(UserSeed::class);\n\n    }\n}\n"
  },
  {
    "path": "database/seeds/RoleSeed.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass RoleSeed extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $items = [\n            \n            ['id' => 1, 'title' => 'Administrator (can create other users)',],\n            ['id' => 2, 'title' => 'Simple user',],\n\n        ];\n\n        foreach ($items as $item) {\n            \\App\\Role::create($item);\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeds/UserSeed.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass UserSeed extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $items = [\n            \n            ['id' => 1, 'name' => 'Admin', 'email' => 'admin@admin.com', 'password' => '$2y$10$akHCvTRpvma2eB8VOqUEoOtpWEelS2/e2TZK3LJyfLxuvw8MrQxVq', 'role_id' => 1, 'remember_token' => '',],\n\n        ];\n\n        foreach ($items as $item) {\n            \\App\\User::create($item);\n        }\n    }\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n    \"private\": true,\n    \"scripts\": {\n        \"dev\": \"npm run development\",\n        \"development\": \"cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js\",\n        \"watch\": \"cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js\",\n        \"watch-poll\": \"npm run watch -- --watch-poll\",\n        \"hot\": \"cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js\",\n        \"prod\": \"npm run production\",\n        \"production\": \"cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js\"\n    },\n    \"devDependencies\": {\n        \"axios\": \"^0.16.2\",\n        \"bootstrap-sass\": \"^3.3.7\",\n        \"cross-env\": \"^5.0.1\",\n        \"jquery\": \"^3.1.1\",\n        \"laravel-mix\": \"^1.0\",\n        \"lodash\": \"^4.17.4\",\n        \"vue\": \"^2.1.10\"\n    }\n}\n"
  },
  {
    "path": "phpunit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit backupGlobals=\"false\"\n         backupStaticAttributes=\"false\"\n         bootstrap=\"vendor/autoload.php\"\n         colors=\"true\"\n         convertErrorsToExceptions=\"true\"\n         convertNoticesToExceptions=\"true\"\n         convertWarningsToExceptions=\"true\"\n         processIsolation=\"false\"\n         stopOnFailure=\"false\">\n    <testsuites>\n        <testsuite name=\"Feature\">\n            <directory suffix=\"Test.php\">./tests/Feature</directory>\n        </testsuite>\n\n        <testsuite name=\"Unit\">\n            <directory suffix=\"Test.php\">./tests/Unit</directory>\n        </testsuite>\n    </testsuites>\n    <filter>\n        <whitelist processUncoveredFilesFromWhitelist=\"true\">\n            <directory suffix=\".php\">./app</directory>\n        </whitelist>\n    </filter>\n    <php>\n        <env name=\"APP_ENV\" value=\"testing\"/>\n        <env name=\"CACHE_DRIVER\" value=\"array\"/>\n        <env name=\"SESSION_DRIVER\" value=\"array\"/>\n        <env name=\"QUEUE_DRIVER\" value=\"sync\"/>\n    </php>\n</phpunit>\n"
  },
  {
    "path": "public/.htaccess",
    "content": "<IfModule mod_rewrite.c>\n    <IfModule mod_negotiation.c>\n        Options -MultiViews\n    </IfModule>\n\n    RewriteEngine On\n\n    # Redirect Trailing Slashes If Not A Folder...\n    RewriteCond %{REQUEST_FILENAME} !-d\n    RewriteCond %{REQUEST_URI} (.+)/$\n    RewriteRule ^ %1 [L,R=301]\n\n    # Handle Front Controller...\n    RewriteCond %{REQUEST_FILENAME} !-d\n    RewriteCond %{REQUEST_FILENAME} !-f\n    RewriteRule ^ index.php [L]\n\n    # Handle Authorization Header\n    RewriteCond %{HTTP:Authorization} .\n    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\n</IfModule>\n"
  },
  {
    "path": "public/adminlte/bootstrap/css/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #2e6da4;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));\n  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */\n"
  },
  {
    "path": "public/adminlte/bootstrap/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\002a\";\n}\n.glyphicon-plus:before {\n  content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.glyphicon-cd:before {\n  content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n  content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n  content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n  content: \"\\e204\";\n}\n.glyphicon-copy:before {\n  content: \"\\e205\";\n}\n.glyphicon-paste:before {\n  content: \"\\e206\";\n}\n.glyphicon-alert:before {\n  content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n  content: \"\\e210\";\n}\n.glyphicon-king:before {\n  content: \"\\e211\";\n}\n.glyphicon-queen:before {\n  content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n  content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n  content: \"\\e214\";\n}\n.glyphicon-knight:before {\n  content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n  content: \"\\e216\";\n}\n.glyphicon-tent:before {\n  content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n  content: \"\\e218\";\n}\n.glyphicon-bed:before {\n  content: \"\\e219\";\n}\n.glyphicon-apple:before {\n  content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n  content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n  content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n  content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n  content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n  content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n  content: \"\\e227\";\n}\n.glyphicon-btc:before {\n  content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n  content: \"\\e227\";\n}\n.glyphicon-yen:before {\n  content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n  content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n  content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n  content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n  content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\";\n}\n.glyphicon-education:before {\n  content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n  content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n  content: \"\\e237\";\n}\n.glyphicon-oil:before {\n  content: \"\\e238\";\n}\n.glyphicon-grain:before {\n  content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n  content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n  content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n  content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n  content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n  content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n  content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n  content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n  content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n  content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n  content: \"\\e253\";\n}\n.glyphicon-console:before {\n  content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n  content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n  content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n  content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n  content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n  content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n  content: \"\\e260\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  padding-right: 15px;\n  padding-left: 15px;\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  filter: alpha(opacity=0);\n  opacity: 0;\n\n  line-break: auto;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n\n  line-break: auto;\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000px;\n            perspective: 1000px;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  background-color: rgba(0, 0, 0, 0);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -10px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -10px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -10px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "public/adminlte/bootstrap/js/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  'use strict';\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.3.7\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.3.7\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.7'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector === '#' ? [] : selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.3.7\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.7'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.3.7\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.7'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.3.7\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.7'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.3.7\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.7'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.3.7\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options             = options\n    this.$body               = $(document.body)\n    this.$element            = $(element)\n    this.$dialog             = this.$element.find('.modal-dialog')\n    this.$backdrop           = null\n    this.isShown             = null\n    this.originalBodyPad     = null\n    this.scrollbarWidth      = 0\n    this.ignoreBackdropClick = false\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.7'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n            this.$element[0] !== e.target &&\n            !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.3.7\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.7'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.3.7\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.7'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.7\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.7'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.3.7\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.3.7'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.3.7\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.7'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "public/adminlte/bootstrap/js/npm.js",
    "content": "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')"
  },
  {
    "path": "public/adminlte/css/AdminLTE.css",
    "content": "@import url(https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic);\n/*!\n *   AdminLTE v2.3.8\n *   Author: Almsaeed Studio\n *\t Website: Almsaeed Studio <http://almsaeedstudio.com>\n *   License: Open source - MIT\n *           Please visit http://opensource.org/licenses/MIT for more information\n!*/\n/*\n * Core: General Layout Style\n * -------------------------\n */\nhtml,\nbody {\n  height: 100%;\n}\n.layout-boxed html,\n.layout-boxed body {\n  height: 100%;\n}\nbody {\n  font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-weight: 400;\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n/* Layout */\n.wrapper {\n  height: 100%;\n  position: relative;\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.wrapper:before,\n.wrapper:after {\n  content: \" \";\n  display: table;\n}\n.wrapper:after {\n  clear: both;\n}\n.layout-boxed .wrapper {\n  max-width: 1250px;\n  margin: 0 auto;\n  min-height: 100%;\n  box-shadow: 0 0 8px rgba(0, 0, 0, 0.5);\n  position: relative;\n}\n.layout-boxed {\n  background: url('../img/boxed-bg.jpg') repeat fixed;\n}\n/*\n * Content Wrapper - contains the main content\n * ```.right-side has been deprecated as of v2.0.0 in favor of .content-wrapper  ```\n */\n.content-wrapper,\n.right-side,\n.main-footer {\n  -webkit-transition: -webkit-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  -moz-transition: -moz-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  -o-transition: -o-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  margin-left: 230px;\n  z-index: 820;\n}\n.layout-top-nav .content-wrapper,\n.layout-top-nav .right-side,\n.layout-top-nav .main-footer {\n  margin-left: 0;\n}\n@media (max-width: 767px) {\n  .content-wrapper,\n  .right-side,\n  .main-footer {\n    margin-left: 0;\n  }\n}\n@media (min-width: 768px) {\n  .sidebar-collapse .content-wrapper,\n  .sidebar-collapse .right-side,\n  .sidebar-collapse .main-footer {\n    margin-left: 0;\n  }\n}\n@media (max-width: 767px) {\n  .sidebar-open .content-wrapper,\n  .sidebar-open .right-side,\n  .sidebar-open .main-footer {\n    -webkit-transform: translate(230px, 0);\n    -ms-transform: translate(230px, 0);\n    -o-transform: translate(230px, 0);\n    transform: translate(230px, 0);\n  }\n}\n.content-wrapper,\n.right-side {\n  min-height: 100%;\n  background-color: #ecf0f5;\n  z-index: 800;\n}\n.main-footer {\n  background: #fff;\n  padding: 15px;\n  color: #444;\n  border-top: 1px solid #d2d6de;\n}\n/* Fixed layout */\n.fixed .main-header,\n.fixed .main-sidebar,\n.fixed .left-side {\n  position: fixed;\n}\n.fixed .main-header {\n  top: 0;\n  right: 0;\n  left: 0;\n}\n.fixed .content-wrapper,\n.fixed .right-side {\n  padding-top: 50px;\n}\n@media (max-width: 767px) {\n  .fixed .content-wrapper,\n  .fixed .right-side {\n    padding-top: 100px;\n  }\n}\n.fixed.layout-boxed .wrapper {\n  max-width: 100%;\n}\nbody.hold-transition .content-wrapper,\nbody.hold-transition .right-side,\nbody.hold-transition .main-footer,\nbody.hold-transition .main-sidebar,\nbody.hold-transition .left-side,\nbody.hold-transition .main-header .navbar,\nbody.hold-transition .main-header .logo {\n  /* Fix for IE */\n  -webkit-transition: none;\n  -o-transition: none;\n  transition: none;\n}\n/* Content */\n.content {\n  min-height: 250px;\n  padding: 15px;\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n/* H1 - H6 font */\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: 'Source Sans Pro', sans-serif;\n}\n/* General Links */\na {\n  color: #3c8dbc;\n}\na:hover,\na:active,\na:focus {\n  outline: none;\n  text-decoration: none;\n  color: #72afd2;\n}\n/* Page Header */\n.page-header {\n  margin: 10px 0 20px 0;\n  font-size: 22px;\n}\n.page-header > small {\n  color: #666;\n  display: block;\n  margin-top: 5px;\n}\n/*\n * Component: Main Header\n * ----------------------\n */\n.main-header {\n  position: relative;\n  max-height: 100px;\n  z-index: 1030;\n}\n.main-header .navbar {\n  -webkit-transition: margin-left 0.3s ease-in-out;\n  -o-transition: margin-left 0.3s ease-in-out;\n  transition: margin-left 0.3s ease-in-out;\n  margin-bottom: 0;\n  margin-left: 230px;\n  border: none;\n  min-height: 50px;\n  border-radius: 0;\n}\n.layout-top-nav .main-header .navbar {\n  margin-left: 0;\n}\n.main-header #navbar-search-input.form-control {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: transparent;\n}\n.main-header #navbar-search-input.form-control:focus,\n.main-header #navbar-search-input.form-control:active {\n  border-color: rgba(0, 0, 0, 0.1);\n  background: rgba(255, 255, 255, 0.9);\n}\n.main-header #navbar-search-input.form-control::-moz-placeholder {\n  color: #ccc;\n  opacity: 1;\n}\n.main-header #navbar-search-input.form-control:-ms-input-placeholder {\n  color: #ccc;\n}\n.main-header #navbar-search-input.form-control::-webkit-input-placeholder {\n  color: #ccc;\n}\n.main-header .navbar-custom-menu,\n.main-header .navbar-right {\n  float: right;\n}\n@media (max-width: 991px) {\n  .main-header .navbar-custom-menu a,\n  .main-header .navbar-right a {\n    color: inherit;\n    background: transparent;\n  }\n}\n@media (max-width: 767px) {\n  .main-header .navbar-right {\n    float: none;\n  }\n  .navbar-collapse .main-header .navbar-right {\n    margin: 7.5px -15px;\n  }\n  .main-header .navbar-right > li {\n    color: inherit;\n    border: 0;\n  }\n}\n.main-header .sidebar-toggle {\n  float: left;\n  background-color: transparent;\n  background-image: none;\n  padding: 15px 15px;\n  font-family: fontAwesome;\n}\n.main-header .sidebar-toggle:before {\n  content: \"\\f0c9\";\n}\n.main-header .sidebar-toggle:hover {\n  color: #fff;\n}\n.main-header .sidebar-toggle:focus,\n.main-header .sidebar-toggle:active {\n  background: transparent;\n}\n.main-header .sidebar-toggle .icon-bar {\n  display: none;\n}\n.main-header .navbar .nav > li.user > a > .fa,\n.main-header .navbar .nav > li.user > a > .glyphicon,\n.main-header .navbar .nav > li.user > a > .ion {\n  margin-right: 5px;\n}\n.main-header .navbar .nav > li > a > .label {\n  position: absolute;\n  top: 9px;\n  right: 7px;\n  text-align: center;\n  font-size: 9px;\n  padding: 2px 3px;\n  line-height: .9;\n}\n.main-header .logo {\n  -webkit-transition: width 0.3s ease-in-out;\n  -o-transition: width 0.3s ease-in-out;\n  transition: width 0.3s ease-in-out;\n  display: block;\n  float: left;\n  height: 50px;\n  font-size: 20px;\n  line-height: 50px;\n  text-align: center;\n  width: 230px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  padding: 0 15px;\n  font-weight: 300;\n  overflow: hidden;\n}\n.main-header .logo .logo-lg {\n  display: block;\n}\n.main-header .logo .logo-mini {\n  display: none;\n}\n.main-header .navbar-brand {\n  color: #fff;\n}\n.content-header {\n  position: relative;\n  padding: 15px 15px 0 15px;\n}\n.content-header > h1 {\n  margin: 0;\n  font-size: 24px;\n}\n.content-header > h1 > small {\n  font-size: 15px;\n  display: inline-block;\n  padding-left: 4px;\n  font-weight: 300;\n}\n.content-header > .breadcrumb {\n  float: right;\n  background: transparent;\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 12px;\n  padding: 7px 5px;\n  position: absolute;\n  top: 15px;\n  right: 10px;\n  border-radius: 2px;\n}\n.content-header > .breadcrumb > li > a {\n  color: #444;\n  text-decoration: none;\n  display: inline-block;\n}\n.content-header > .breadcrumb > li > a > .fa,\n.content-header > .breadcrumb > li > a > .glyphicon,\n.content-header > .breadcrumb > li > a > .ion {\n  margin-right: 5px;\n}\n.content-header > .breadcrumb > li + li:before {\n  content: '>\\00a0';\n}\n@media (max-width: 991px) {\n  .content-header > .breadcrumb {\n    position: relative;\n    margin-top: 5px;\n    top: 0;\n    right: 0;\n    float: none;\n    background: #d2d6de;\n    padding-left: 10px;\n  }\n  .content-header > .breadcrumb li:before {\n    color: #97a0b3;\n  }\n}\n.navbar-toggle {\n  color: #fff;\n  border: 0;\n  margin: 0;\n  padding: 15px 15px;\n}\n@media (max-width: 991px) {\n  .navbar-custom-menu .navbar-nav > li {\n    float: left;\n  }\n  .navbar-custom-menu .navbar-nav {\n    margin: 0;\n    float: left;\n  }\n  .navbar-custom-menu .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n    line-height: 20px;\n  }\n}\n@media (max-width: 767px) {\n  .main-header {\n    position: relative;\n  }\n  .main-header .logo,\n  .main-header .navbar {\n    width: 100%;\n    float: none;\n  }\n  .main-header .navbar {\n    margin: 0;\n  }\n  .main-header .navbar-custom-menu {\n    float: right;\n  }\n}\n@media (max-width: 991px) {\n  .navbar-collapse.pull-left {\n    float: none !important;\n  }\n  .navbar-collapse.pull-left + .navbar-custom-menu {\n    display: block;\n    position: absolute;\n    top: 0;\n    right: 40px;\n  }\n}\n/*\n * Component: Sidebar\n * ------------------\n */\n.main-sidebar,\n.left-side {\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding-top: 50px;\n  min-height: 100%;\n  width: 230px;\n  z-index: 810;\n  -webkit-transition: -webkit-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  -moz-transition: -moz-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  -o-transition: -o-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, width 0.3s ease-in-out;\n}\n@media (max-width: 767px) {\n  .main-sidebar,\n  .left-side {\n    padding-top: 100px;\n  }\n}\n@media (max-width: 767px) {\n  .main-sidebar,\n  .left-side {\n    -webkit-transform: translate(-230px, 0);\n    -ms-transform: translate(-230px, 0);\n    -o-transform: translate(-230px, 0);\n    transform: translate(-230px, 0);\n  }\n}\n@media (min-width: 768px) {\n  .sidebar-collapse .main-sidebar,\n  .sidebar-collapse .left-side {\n    -webkit-transform: translate(-230px, 0);\n    -ms-transform: translate(-230px, 0);\n    -o-transform: translate(-230px, 0);\n    transform: translate(-230px, 0);\n  }\n}\n@media (max-width: 767px) {\n  .sidebar-open .main-sidebar,\n  .sidebar-open .left-side {\n    -webkit-transform: translate(0, 0);\n    -ms-transform: translate(0, 0);\n    -o-transform: translate(0, 0);\n    transform: translate(0, 0);\n  }\n}\n.sidebar {\n  padding-bottom: 10px;\n}\n.sidebar-form input:focus {\n  border-color: transparent;\n}\n.user-panel {\n  position: relative;\n  width: 100%;\n  padding: 10px;\n  overflow: hidden;\n}\n.user-panel:before,\n.user-panel:after {\n  content: \" \";\n  display: table;\n}\n.user-panel:after {\n  clear: both;\n}\n.user-panel > .image > img {\n  width: 100%;\n  max-width: 45px;\n  height: auto;\n}\n.user-panel > .info {\n  padding: 5px 5px 5px 15px;\n  line-height: 1;\n  position: absolute;\n  left: 55px;\n}\n.user-panel > .info > p {\n  font-weight: 600;\n  margin-bottom: 9px;\n}\n.user-panel > .info > a {\n  text-decoration: none;\n  padding-right: 5px;\n  margin-top: 3px;\n  font-size: 11px;\n}\n.user-panel > .info > a > .fa,\n.user-panel > .info > a > .ion,\n.user-panel > .info > a > .glyphicon {\n  margin-right: 3px;\n}\n.sidebar-menu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.sidebar-menu > li {\n  position: relative;\n  margin: 0;\n  padding: 0;\n}\n.sidebar-menu > li > a {\n  padding: 12px 5px 12px 15px;\n  display: block;\n}\n.sidebar-menu > li > a > .fa,\n.sidebar-menu > li > a > .glyphicon,\n.sidebar-menu > li > a > .ion {\n  width: 20px;\n}\n.sidebar-menu > li .label,\n.sidebar-menu > li .badge {\n  margin-right: 5px;\n}\n.sidebar-menu > li .badge {\n  margin-top: 3px;\n}\n.sidebar-menu li.header {\n  padding: 10px 25px 10px 15px;\n  font-size: 12px;\n}\n.sidebar-menu li > a > .fa-angle-left,\n.sidebar-menu li > a > .pull-right-container > .fa-angle-left {\n  width: auto;\n  height: auto;\n  padding: 0;\n  margin-right: 10px;\n}\n.sidebar-menu li > a > .fa-angle-left {\n  position: absolute;\n  top: 50%;\n  right: 10px;\n  margin-top: -8px;\n}\n.sidebar-menu li.active > a > .fa-angle-left,\n.sidebar-menu li.active > a > .pull-right-container > .fa-angle-left {\n  -webkit-transform: rotate(-90deg);\n  -ms-transform: rotate(-90deg);\n  -o-transform: rotate(-90deg);\n  transform: rotate(-90deg);\n}\n.sidebar-menu li.active > .treeview-menu {\n  display: block;\n}\n.sidebar-menu .treeview-menu {\n  display: none;\n  list-style: none;\n  padding: 0;\n  margin: 0;\n  padding-left: 5px;\n}\n.sidebar-menu .treeview-menu .treeview-menu {\n  padding-left: 20px;\n}\n.sidebar-menu .treeview-menu > li {\n  margin: 0;\n}\n.sidebar-menu .treeview-menu > li > a {\n  padding: 5px 5px 5px 15px;\n  display: block;\n  font-size: 14px;\n}\n.sidebar-menu .treeview-menu > li > a > .fa,\n.sidebar-menu .treeview-menu > li > a > .glyphicon,\n.sidebar-menu .treeview-menu > li > a > .ion {\n  width: 20px;\n}\n.sidebar-menu .treeview-menu > li > a > .pull-right-container > .fa-angle-left,\n.sidebar-menu .treeview-menu > li > a > .pull-right-container > .fa-angle-down,\n.sidebar-menu .treeview-menu > li > a > .fa-angle-left,\n.sidebar-menu .treeview-menu > li > a > .fa-angle-down {\n  width: auto;\n}\n/*\n * Component: Sidebar Mini\n */\n@media (min-width: 768px) {\n  .sidebar-mini.sidebar-collapse .content-wrapper,\n  .sidebar-mini.sidebar-collapse .right-side,\n  .sidebar-mini.sidebar-collapse .main-footer {\n    margin-left: 50px !important;\n    z-index: 840;\n  }\n  .sidebar-mini.sidebar-collapse .main-sidebar {\n    -webkit-transform: translate(0, 0);\n    -ms-transform: translate(0, 0);\n    -o-transform: translate(0, 0);\n    transform: translate(0, 0);\n    width: 50px !important;\n    z-index: 850;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li {\n    position: relative;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a {\n    margin-right: 0;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span {\n    border-top-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:not(.treeview) > a > span {\n    border-bottom-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    padding-top: 5px;\n    padding-bottom: 5px;\n    border-bottom-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right),\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu {\n    display: block !important;\n    position: absolute;\n    width: 180px;\n    left: 50px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span {\n    top: 0;\n    margin-left: -3px;\n    padding: 12px 5px 12px 20px;\n    background-color: inherit;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container {\n    position: relative!important;\n    float: right;\n    width: auto!important;\n    left: 180px !important;\n    top: -22px !important;\n    z-index: 900;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container > .label:not(:first-of-type) {\n    display: none;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu {\n    top: 44px;\n    margin-left: 0;\n  }\n  .sidebar-mini.sidebar-collapse .main-sidebar .user-panel > .info,\n  .sidebar-mini.sidebar-collapse .sidebar-form,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > .pull-right,\n  .sidebar-mini.sidebar-collapse .sidebar-menu li.header {\n    display: none !important;\n    -webkit-transform: translateZ(0);\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo {\n    width: 50px;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo > .logo-mini {\n    display: block;\n    margin-left: -15px;\n    margin-right: -15px;\n    font-size: 18px;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo > .logo-lg {\n    display: none;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .navbar {\n    margin-left: 50px;\n  }\n}\n.sidebar-menu,\n.main-sidebar .user-panel,\n.sidebar-menu > li.header {\n  white-space: nowrap;\n  overflow: hidden;\n}\n.sidebar-menu:hover {\n  overflow: visible;\n}\n.sidebar-form,\n.sidebar-menu > li.header {\n  overflow: hidden;\n  text-overflow: clip;\n}\n.sidebar-menu li > a {\n  position: relative;\n}\n.sidebar-menu li > a > .pull-right-container {\n  position: absolute;\n  right: 10px;\n  top: 50%;\n  margin-top: -7px;\n}\n/*\n * Component: Control sidebar. By default, this is the right sidebar.\n */\n.control-sidebar-bg {\n  position: fixed;\n  z-index: 1000;\n  bottom: 0;\n}\n.control-sidebar-bg,\n.control-sidebar {\n  top: 0;\n  right: -230px;\n  width: 230px;\n  -webkit-transition: right 0.3s ease-in-out;\n  -o-transition: right 0.3s ease-in-out;\n  transition: right 0.3s ease-in-out;\n}\n.control-sidebar {\n  position: absolute;\n  padding-top: 50px;\n  z-index: 1010;\n}\n@media (max-width: 768px) {\n  .control-sidebar {\n    padding-top: 100px;\n  }\n}\n.control-sidebar > .tab-content {\n  padding: 10px 15px;\n}\n.control-sidebar.control-sidebar-open,\n.control-sidebar.control-sidebar-open + .control-sidebar-bg {\n  right: 0;\n}\n.control-sidebar-open .control-sidebar-bg,\n.control-sidebar-open .control-sidebar {\n  right: 0;\n}\n@media (min-width: 768px) {\n  .control-sidebar-open .content-wrapper,\n  .control-sidebar-open .right-side,\n  .control-sidebar-open .main-footer {\n    margin-right: 230px;\n  }\n}\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a,\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a:hover,\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a:focus {\n  border-left-width: 0;\n}\n.nav-tabs.control-sidebar-tabs > li > a {\n  border-radius: 0;\n}\n.nav-tabs.control-sidebar-tabs > li > a,\n.nav-tabs.control-sidebar-tabs > li > a:hover {\n  border-top: none;\n  border-right: none;\n  border-left: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n}\n.nav-tabs.control-sidebar-tabs > li > a .icon {\n  font-size: 16px;\n}\n.nav-tabs.control-sidebar-tabs > li.active > a,\n.nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.nav-tabs.control-sidebar-tabs > li.active > a:active {\n  border-top: none;\n  border-right: none;\n  border-bottom: none;\n}\n@media (max-width: 768px) {\n  .nav-tabs.control-sidebar-tabs {\n    display: table;\n  }\n  .nav-tabs.control-sidebar-tabs > li {\n    display: table-cell;\n  }\n}\n.control-sidebar-heading {\n  font-weight: 400;\n  font-size: 16px;\n  padding: 10px 0;\n  margin-bottom: 10px;\n}\n.control-sidebar-subheading {\n  display: block;\n  font-weight: 400;\n  font-size: 14px;\n}\n.control-sidebar-menu {\n  list-style: none;\n  padding: 0;\n  margin: 0 -15px;\n}\n.control-sidebar-menu > li > a {\n  display: block;\n  padding: 10px 15px;\n}\n.control-sidebar-menu > li > a:before,\n.control-sidebar-menu > li > a:after {\n  content: \" \";\n  display: table;\n}\n.control-sidebar-menu > li > a:after {\n  clear: both;\n}\n.control-sidebar-menu > li > a > .control-sidebar-subheading {\n  margin-top: 0;\n}\n.control-sidebar-menu .menu-icon {\n  float: left;\n  width: 35px;\n  height: 35px;\n  border-radius: 50%;\n  text-align: center;\n  line-height: 35px;\n}\n.control-sidebar-menu .menu-info {\n  margin-left: 45px;\n  margin-top: 3px;\n}\n.control-sidebar-menu .menu-info > .control-sidebar-subheading {\n  margin: 0;\n}\n.control-sidebar-menu .menu-info > p {\n  margin: 0;\n  font-size: 11px;\n}\n.control-sidebar-menu .progress {\n  margin: 0;\n}\n.control-sidebar-dark {\n  color: #b8c7ce;\n}\n.control-sidebar-dark,\n.control-sidebar-dark + .control-sidebar-bg {\n  background: #222d32;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs {\n  border-bottom: #1c2529;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a {\n  background: #181f23;\n  color: #b8c7ce;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus {\n  border-left-color: #141a1d;\n  border-bottom-color: #141a1d;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:active {\n  background: #1c2529;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover {\n  color: #fff;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:active {\n  background: #222d32;\n  color: #fff;\n}\n.control-sidebar-dark .control-sidebar-heading,\n.control-sidebar-dark .control-sidebar-subheading {\n  color: #fff;\n}\n.control-sidebar-dark .control-sidebar-menu > li > a:hover {\n  background: #1e282c;\n}\n.control-sidebar-dark .control-sidebar-menu > li > a .menu-info > p {\n  color: #b8c7ce;\n}\n.control-sidebar-light {\n  color: #5e5e5e;\n}\n.control-sidebar-light,\n.control-sidebar-light + .control-sidebar-bg {\n  background: #f9fafc;\n  border-left: 1px solid #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs {\n  border-bottom: #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a {\n  background: #e8ecf4;\n  color: #444444;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus {\n  border-left-color: #d2d6de;\n  border-bottom-color: #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:active {\n  background: #eff1f7;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:active {\n  background: #f9fafc;\n  color: #111;\n}\n.control-sidebar-light .control-sidebar-heading,\n.control-sidebar-light .control-sidebar-subheading {\n  color: #111;\n}\n.control-sidebar-light .control-sidebar-menu {\n  margin-left: -14px;\n}\n.control-sidebar-light .control-sidebar-menu > li > a:hover {\n  background: #f4f4f5;\n}\n.control-sidebar-light .control-sidebar-menu > li > a .menu-info > p {\n  color: #5e5e5e;\n}\n/*\n * Component: Dropdown menus\n * -------------------------\n */\n/*Dropdowns in general*/\n.dropdown-menu {\n  box-shadow: none;\n  border-color: #eee;\n}\n.dropdown-menu > li > a {\n  color: #777;\n}\n.dropdown-menu > li > a > .glyphicon,\n.dropdown-menu > li > a > .fa,\n.dropdown-menu > li > a > .ion {\n  margin-right: 10px;\n}\n.dropdown-menu > li > a:hover {\n  background-color: #e1e3e9;\n  color: #333;\n}\n.dropdown-menu > .divider {\n  background-color: #eee;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu,\n.navbar-nav > .messages-menu > .dropdown-menu,\n.navbar-nav > .tasks-menu > .dropdown-menu {\n  width: 280px;\n  padding: 0 0 0 0;\n  margin: 0;\n  top: 100%;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li,\n.navbar-nav > .messages-menu > .dropdown-menu > li,\n.navbar-nav > .tasks-menu > .dropdown-menu > li {\n  position: relative;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.header,\n.navbar-nav > .messages-menu > .dropdown-menu > li.header,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.header {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  background-color: #ffffff;\n  padding: 7px 10px;\n  border-bottom: 1px solid #f4f4f4;\n  color: #444444;\n  font-size: 14px;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,\n.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n  font-size: 12px;\n  background-color: #fff;\n  padding: 7px 10px;\n  border-bottom: 1px solid #eeeeee;\n  color: #444 !important;\n  text-align: center;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,\n  .navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,\n  .navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a {\n    background: #fff !important;\n    color: #444 !important;\n  }\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a:hover,\n.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a:hover,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a:hover {\n  text-decoration: none;\n  font-weight: normal;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu {\n  max-height: 200px;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  overflow-x: hidden;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a {\n  display: block;\n  white-space: nowrap;\n  /* Prevent text from breaking */\n  border-bottom: 1px solid #f4f4f4;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a:hover,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:hover,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a:hover {\n  background: #f4f4f4;\n  text-decoration: none;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a {\n  color: #444444;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  padding: 10px;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .glyphicon,\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .fa,\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .ion {\n  width: 20px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a {\n  margin: 0;\n  padding: 10px 10px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > div > img {\n  margin: auto 10px auto auto;\n  width: 40px;\n  height: 40px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 {\n  padding: 0;\n  margin: 0 0 0 45px;\n  color: #444444;\n  font-size: 15px;\n  position: relative;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 > small {\n  color: #999999;\n  font-size: 10px;\n  position: absolute;\n  top: 0;\n  right: 0;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > p {\n  margin: 0 0 0 45px;\n  font-size: 12px;\n  color: #888888;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:before,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after {\n  clear: both;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a {\n  padding: 10px;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > h3 {\n  font-size: 14px;\n  padding: 0;\n  margin: 0 0 10px 0;\n  color: #666666;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > .progress {\n  padding: 0;\n  margin: 0;\n}\n.navbar-nav > .user-menu > .dropdown-menu {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n  padding: 1px 0 0 0;\n  border-top-width: 0;\n  width: 280px;\n}\n.navbar-nav > .user-menu > .dropdown-menu,\n.navbar-nav > .user-menu > .dropdown-menu > .user-body {\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header {\n  height: 175px;\n  padding: 10px;\n  text-align: center;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > img {\n  z-index: 5;\n  height: 90px;\n  width: 90px;\n  border: 3px solid;\n  border-color: transparent;\n  border-color: rgba(255, 255, 255, 0.2);\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p {\n  z-index: 5;\n  color: #fff;\n  color: rgba(255, 255, 255, 0.8);\n  font-size: 17px;\n  margin-top: 10px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p > small {\n  display: block;\n  font-size: 12px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body {\n  padding: 15px;\n  border-bottom: 1px solid #f4f4f4;\n  border-top: 1px solid #dddddd;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:before,\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:after {\n  clear: both;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body a {\n  color: #444 !important;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .user-menu > .dropdown-menu > .user-body a {\n    background: #fff !important;\n    color: #444 !important;\n  }\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer {\n  background-color: #f9f9f9;\n  padding: 10px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:before,\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after {\n  clear: both;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default {\n  color: #666666;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default:hover {\n    background-color: #f9f9f9;\n  }\n}\n.navbar-nav > .user-menu .user-image {\n  float: left;\n  width: 25px;\n  height: 25px;\n  border-radius: 50%;\n  margin-right: 10px;\n  margin-top: -2px;\n}\n@media (max-width: 767px) {\n  .navbar-nav > .user-menu .user-image {\n    float: none;\n    margin-right: 0;\n    margin-top: -8px;\n    line-height: 10px;\n  }\n}\n/* Add fade animation to dropdown menus by appending\n the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)*/\n.open:not(.dropup) > .animated-dropdown-menu {\n  backface-visibility: visible !important;\n  -webkit-animation: flipInX 0.7s both;\n  -o-animation: flipInX 0.7s both;\n  animation: flipInX 0.7s both;\n}\n@keyframes flipInX {\n  0% {\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transition-timing-function: ease-in;\n    opacity: 0;\n  }\n  40% {\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transition-timing-function: ease-in;\n  }\n  60% {\n    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n  80% {\n    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n  100% {\n    transform: perspective(400px);\n  }\n}\n@-webkit-keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    -webkit-transition-timing-function: ease-in;\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    -webkit-transition-timing-function: ease-in;\n  }\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n  100% {\n    -webkit-transform: perspective(400px);\n  }\n}\n/* Fix dropdown menu in navbars */\n.navbar-custom-menu > .navbar-nav > li {\n  position: relative;\n}\n.navbar-custom-menu > .navbar-nav > li > .dropdown-menu {\n  position: absolute;\n  right: 0;\n  left: auto;\n}\n@media (max-width: 991px) {\n  .navbar-custom-menu > .navbar-nav {\n    float: right;\n  }\n  .navbar-custom-menu > .navbar-nav > li {\n    position: static;\n  }\n  .navbar-custom-menu > .navbar-nav > li > .dropdown-menu {\n    position: absolute;\n    right: 5%;\n    left: auto;\n    border: 1px solid #ddd;\n    background: #fff;\n  }\n}\n/*\n * Component: Form\n * ---------------\n */\n.form-control {\n  border-radius: 0;\n  box-shadow: none;\n  border-color: #d2d6de;\n}\n.form-control:focus {\n  border-color: #3c8dbc;\n  box-shadow: none;\n}\n.form-control::-moz-placeholder,\n.form-control:-ms-input-placeholder,\n.form-control::-webkit-input-placeholder {\n  color: #bbb;\n  opacity: 1;\n}\n.form-control:not(select) {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n.form-group.has-success label {\n  color: #00a65a;\n}\n.form-group.has-success .form-control,\n.form-group.has-success .input-group-addon {\n  border-color: #00a65a;\n  box-shadow: none;\n}\n.form-group.has-success .help-block {\n  color: #00a65a;\n}\n.form-group.has-warning label {\n  color: #f39c12;\n}\n.form-group.has-warning .form-control,\n.form-group.has-warning .input-group-addon {\n  border-color: #f39c12;\n  box-shadow: none;\n}\n.form-group.has-warning .help-block {\n  color: #f39c12;\n}\n.form-group.has-error label {\n  color: #dd4b39;\n}\n.form-group.has-error .form-control,\n.form-group.has-error .input-group-addon {\n  border-color: #dd4b39;\n  box-shadow: none;\n}\n.form-group.has-error .help-block {\n  color: #dd4b39;\n}\n/* Input group */\n.input-group .input-group-addon {\n  border-radius: 0;\n  border-color: #d2d6de;\n  background-color: #fff;\n}\n/* button groups */\n.btn-group-vertical .btn.btn-flat:first-of-type,\n.btn-group-vertical .btn.btn-flat:last-of-type {\n  border-radius: 0;\n}\n.icheck > label {\n  padding-left: 0;\n}\n/* support Font Awesome icons in form-control */\n.form-control-feedback.fa {\n  line-height: 34px;\n}\n.input-lg + .form-control-feedback.fa,\n.input-group-lg + .form-control-feedback.fa,\n.form-group-lg .form-control + .form-control-feedback.fa {\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback.fa,\n.input-group-sm + .form-control-feedback.fa,\n.form-group-sm .form-control + .form-control-feedback.fa {\n  line-height: 30px;\n}\n/*\n * Component: Progress Bar\n * -----------------------\n */\n.progress,\n.progress > .progress-bar {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.progress,\n.progress > .progress-bar,\n.progress .progress-bar,\n.progress > .progress-bar .progress-bar {\n  border-radius: 1px;\n}\n/* size variation */\n.progress.sm,\n.progress-sm {\n  height: 10px;\n}\n.progress.sm,\n.progress-sm,\n.progress.sm .progress-bar,\n.progress-sm .progress-bar {\n  border-radius: 1px;\n}\n.progress.xs,\n.progress-xs {\n  height: 7px;\n}\n.progress.xs,\n.progress-xs,\n.progress.xs .progress-bar,\n.progress-xs .progress-bar {\n  border-radius: 1px;\n}\n.progress.xxs,\n.progress-xxs {\n  height: 3px;\n}\n.progress.xxs,\n.progress-xxs,\n.progress.xxs .progress-bar,\n.progress-xxs .progress-bar {\n  border-radius: 1px;\n}\n/* Vertical bars */\n.progress.vertical {\n  position: relative;\n  width: 30px;\n  height: 200px;\n  display: inline-block;\n  margin-right: 10px;\n}\n.progress.vertical > .progress-bar {\n  width: 100%;\n  position: absolute;\n  bottom: 0;\n}\n.progress.vertical.sm,\n.progress.vertical.progress-sm {\n  width: 20px;\n}\n.progress.vertical.xs,\n.progress.vertical.progress-xs {\n  width: 10px;\n}\n.progress.vertical.xxs,\n.progress.vertical.progress-xxs {\n  width: 3px;\n}\n.progress-group .progress-text {\n  font-weight: 600;\n}\n.progress-group .progress-number {\n  float: right;\n}\n/* Remove margins from progress bars when put in a table */\n.table tr > td .progress {\n  margin: 0;\n}\n.progress-bar-light-blue,\n.progress-bar-primary {\n  background-color: #3c8dbc;\n}\n.progress-striped .progress-bar-light-blue,\n.progress-striped .progress-bar-primary {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-green,\n.progress-bar-success {\n  background-color: #00a65a;\n}\n.progress-striped .progress-bar-green,\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-aqua,\n.progress-bar-info {\n  background-color: #00c0ef;\n}\n.progress-striped .progress-bar-aqua,\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-yellow,\n.progress-bar-warning {\n  background-color: #f39c12;\n}\n.progress-striped .progress-bar-yellow,\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-red,\n.progress-bar-danger {\n  background-color: #dd4b39;\n}\n.progress-striped .progress-bar-red,\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n/*\n * Component: Small Box\n * --------------------\n */\n.small-box {\n  border-radius: 2px;\n  position: relative;\n  display: block;\n  margin-bottom: 20px;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n.small-box > .inner {\n  padding: 10px;\n}\n.small-box > .small-box-footer {\n  position: relative;\n  text-align: center;\n  padding: 3px 0;\n  color: #fff;\n  color: rgba(255, 255, 255, 0.8);\n  display: block;\n  z-index: 10;\n  background: rgba(0, 0, 0, 0.1);\n  text-decoration: none;\n}\n.small-box > .small-box-footer:hover {\n  color: #fff;\n  background: rgba(0, 0, 0, 0.15);\n}\n.small-box h3 {\n  font-size: 38px;\n  font-weight: bold;\n  margin: 0 0 10px 0;\n  white-space: nowrap;\n  padding: 0;\n}\n.small-box p {\n  font-size: 15px;\n}\n.small-box p > small {\n  display: block;\n  color: #f9f9f9;\n  font-size: 13px;\n  margin-top: 5px;\n}\n.small-box h3,\n.small-box p {\n  z-index: 5;\n}\n.small-box .icon {\n  -webkit-transition: all 0.3s linear;\n  -o-transition: all 0.3s linear;\n  transition: all 0.3s linear;\n  position: absolute;\n  top: -10px;\n  right: 10px;\n  z-index: 0;\n  font-size: 90px;\n  color: rgba(0, 0, 0, 0.15);\n}\n.small-box:hover {\n  text-decoration: none;\n  color: #f9f9f9;\n}\n.small-box:hover .icon {\n  font-size: 95px;\n}\n@media (max-width: 767px) {\n  .small-box {\n    text-align: center;\n  }\n  .small-box .icon {\n    display: none;\n  }\n  .small-box p {\n    font-size: 12px;\n  }\n}\n/*\n * Component: Box\n * --------------\n */\n.box {\n  position: relative;\n  border-radius: 3px;\n  background: #ffffff;\n  border-top: 3px solid #d2d6de;\n  margin-bottom: 20px;\n  width: 100%;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n.box.box-primary {\n  border-top-color: #3c8dbc;\n}\n.box.box-info {\n  border-top-color: #00c0ef;\n}\n.box.box-danger {\n  border-top-color: #dd4b39;\n}\n.box.box-warning {\n  border-top-color: #f39c12;\n}\n.box.box-success {\n  border-top-color: #00a65a;\n}\n.box.box-default {\n  border-top-color: #d2d6de;\n}\n.box.collapsed-box .box-body,\n.box.collapsed-box .box-footer {\n  display: none;\n}\n.box .nav-stacked > li {\n  border-bottom: 1px solid #f4f4f4;\n  margin: 0;\n}\n.box .nav-stacked > li:last-of-type {\n  border-bottom: none;\n}\n.box.height-control .box-body {\n  max-height: 300px;\n  overflow: auto;\n}\n.box .border-right {\n  border-right: 1px solid #f4f4f4;\n}\n.box .border-left {\n  border-left: 1px solid #f4f4f4;\n}\n.box.box-solid {\n  border-top: 0;\n}\n.box.box-solid > .box-header .btn.btn-default {\n  background: transparent;\n}\n.box.box-solid > .box-header .btn:hover,\n.box.box-solid > .box-header a:hover {\n  background: rgba(0, 0, 0, 0.1);\n}\n.box.box-solid.box-default {\n  border: 1px solid #d2d6de;\n}\n.box.box-solid.box-default > .box-header {\n  color: #444444;\n  background: #d2d6de;\n  background-color: #d2d6de;\n}\n.box.box-solid.box-default > .box-header a,\n.box.box-solid.box-default > .box-header .btn {\n  color: #444444;\n}\n.box.box-solid.box-primary {\n  border: 1px solid #3c8dbc;\n}\n.box.box-solid.box-primary > .box-header {\n  color: #ffffff;\n  background: #3c8dbc;\n  background-color: #3c8dbc;\n}\n.box.box-solid.box-primary > .box-header a,\n.box.box-solid.box-primary > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-info {\n  border: 1px solid #00c0ef;\n}\n.box.box-solid.box-info > .box-header {\n  color: #ffffff;\n  background: #00c0ef;\n  background-color: #00c0ef;\n}\n.box.box-solid.box-info > .box-header a,\n.box.box-solid.box-info > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-danger {\n  border: 1px solid #dd4b39;\n}\n.box.box-solid.box-danger > .box-header {\n  color: #ffffff;\n  background: #dd4b39;\n  background-color: #dd4b39;\n}\n.box.box-solid.box-danger > .box-header a,\n.box.box-solid.box-danger > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-warning {\n  border: 1px solid #f39c12;\n}\n.box.box-solid.box-warning > .box-header {\n  color: #ffffff;\n  background: #f39c12;\n  background-color: #f39c12;\n}\n.box.box-solid.box-warning > .box-header a,\n.box.box-solid.box-warning > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-success {\n  border: 1px solid #00a65a;\n}\n.box.box-solid.box-success > .box-header {\n  color: #ffffff;\n  background: #00a65a;\n  background-color: #00a65a;\n}\n.box.box-solid.box-success > .box-header a,\n.box.box-solid.box-success > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid > .box-header > .box-tools .btn {\n  border: 0;\n  box-shadow: none;\n}\n.box.box-solid[class*='bg'] > .box-header {\n  color: #fff;\n}\n.box .box-group > .box {\n  margin-bottom: 5px;\n}\n.box .knob-label {\n  text-align: center;\n  color: #333;\n  font-weight: 100;\n  font-size: 12px;\n  margin-bottom: 0.3em;\n}\n.box > .overlay,\n.overlay-wrapper > .overlay,\n.box > .loading-img,\n.overlay-wrapper > .loading-img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n.box .overlay,\n.overlay-wrapper .overlay {\n  z-index: 50;\n  background: rgba(255, 255, 255, 0.7);\n  border-radius: 3px;\n}\n.box .overlay > .fa,\n.overlay-wrapper .overlay > .fa {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin-left: -15px;\n  margin-top: -15px;\n  color: #000;\n  font-size: 30px;\n}\n.box .overlay.dark,\n.overlay-wrapper .overlay.dark {\n  background: rgba(0, 0, 0, 0.5);\n}\n.box-header:before,\n.box-body:before,\n.box-footer:before,\n.box-header:after,\n.box-body:after,\n.box-footer:after {\n  content: \" \";\n  display: table;\n}\n.box-header:after,\n.box-body:after,\n.box-footer:after {\n  clear: both;\n}\n.box-header {\n  color: #444;\n  display: block;\n  padding: 10px;\n  position: relative;\n}\n.box-header.with-border {\n  border-bottom: 1px solid #f4f4f4;\n}\n.collapsed-box .box-header.with-border {\n  border-bottom: none;\n}\n.box-header > .fa,\n.box-header > .glyphicon,\n.box-header > .ion,\n.box-header .box-title {\n  display: inline-block;\n  font-size: 18px;\n  margin: 0;\n  line-height: 1;\n}\n.box-header > .fa,\n.box-header > .glyphicon,\n.box-header > .ion {\n  margin-right: 5px;\n}\n.box-header > .box-tools {\n  position: absolute;\n  right: 10px;\n  top: 5px;\n}\n.box-header > .box-tools [data-toggle=\"tooltip\"] {\n  position: relative;\n}\n.box-header > .box-tools.pull-right .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.box-header > .box-tools .dropdown-menu > li > a {\n  color: #444!important;\n}\n.btn-box-tool {\n  padding: 5px;\n  font-size: 12px;\n  background: transparent;\n  color: #97a0b3;\n}\n.open .btn-box-tool,\n.btn-box-tool:hover {\n  color: #606c84;\n}\n.btn-box-tool.btn:active {\n  box-shadow: none;\n}\n.box-body {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n  padding: 10px;\n}\n.no-header .box-body {\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.box-body > .table {\n  margin-bottom: 0;\n}\n.box-body .fc {\n  margin-top: 5px;\n}\n.box-body .full-width-chart {\n  margin: -19px;\n}\n.box-body.no-padding .full-width-chart {\n  margin: -9px;\n}\n.box-body .box-pane {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 3px;\n}\n.box-body .box-pane-right {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 0;\n}\n.box-footer {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n  border-top: 1px solid #f4f4f4;\n  padding: 10px;\n  background-color: #ffffff;\n}\n.chart-legend {\n  margin: 10px 0;\n}\n@media (max-width: 991px) {\n  .chart-legend > li {\n    float: left;\n    margin-right: 10px;\n  }\n}\n.box-comments {\n  background: #f7f7f7;\n}\n.box-comments .box-comment {\n  padding: 8px 0;\n  border-bottom: 1px solid #eee;\n}\n.box-comments .box-comment:before,\n.box-comments .box-comment:after {\n  content: \" \";\n  display: table;\n}\n.box-comments .box-comment:after {\n  clear: both;\n}\n.box-comments .box-comment:last-of-type {\n  border-bottom: 0;\n}\n.box-comments .box-comment:first-of-type {\n  padding-top: 0;\n}\n.box-comments .box-comment img {\n  float: left;\n}\n.box-comments .comment-text {\n  margin-left: 40px;\n  color: #555;\n}\n.box-comments .username {\n  color: #444;\n  display: block;\n  font-weight: 600;\n}\n.box-comments .text-muted {\n  font-weight: 400;\n  font-size: 12px;\n}\n/* Widget: TODO LIST */\n.todo-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  overflow: auto;\n}\n.todo-list > li {\n  border-radius: 2px;\n  padding: 10px;\n  background: #f4f4f4;\n  margin-bottom: 2px;\n  border-left: 2px solid #e6e7e8;\n  color: #444;\n}\n.todo-list > li:last-of-type {\n  margin-bottom: 0;\n}\n.todo-list > li > input[type='checkbox'] {\n  margin: 0 10px 0 5px;\n}\n.todo-list > li .text {\n  display: inline-block;\n  margin-left: 5px;\n  font-weight: 600;\n}\n.todo-list > li .label {\n  margin-left: 10px;\n  font-size: 9px;\n}\n.todo-list > li .tools {\n  display: none;\n  float: right;\n  color: #dd4b39;\n}\n.todo-list > li .tools > .fa,\n.todo-list > li .tools > .glyphicon,\n.todo-list > li .tools > .ion {\n  margin-right: 5px;\n  cursor: pointer;\n}\n.todo-list > li:hover .tools {\n  display: inline-block;\n}\n.todo-list > li.done {\n  color: #999;\n}\n.todo-list > li.done .text {\n  text-decoration: line-through;\n  font-weight: 500;\n}\n.todo-list > li.done .label {\n  background: #d2d6de !important;\n}\n.todo-list .danger {\n  border-left-color: #dd4b39;\n}\n.todo-list .warning {\n  border-left-color: #f39c12;\n}\n.todo-list .info {\n  border-left-color: #00c0ef;\n}\n.todo-list .success {\n  border-left-color: #00a65a;\n}\n.todo-list .primary {\n  border-left-color: #3c8dbc;\n}\n.todo-list .handle {\n  display: inline-block;\n  cursor: move;\n  margin: 0 5px;\n}\n/* Chat widget (DEPRECATED - this will be removed in the next major release. Use Direct Chat instead)*/\n.chat {\n  padding: 5px 20px 5px 10px;\n}\n.chat .item {\n  margin-bottom: 10px;\n}\n.chat .item:before,\n.chat .item:after {\n  content: \" \";\n  display: table;\n}\n.chat .item:after {\n  clear: both;\n}\n.chat .item > img {\n  width: 40px;\n  height: 40px;\n  border: 2px solid transparent;\n  border-radius: 50%;\n}\n.chat .item > .online {\n  border: 2px solid #00a65a;\n}\n.chat .item > .offline {\n  border: 2px solid #dd4b39;\n}\n.chat .item > .message {\n  margin-left: 55px;\n  margin-top: -40px;\n}\n.chat .item > .message > .name {\n  display: block;\n  font-weight: 600;\n}\n.chat .item > .attachment {\n  border-radius: 3px;\n  background: #f4f4f4;\n  margin-left: 65px;\n  margin-right: 15px;\n  padding: 10px;\n}\n.chat .item > .attachment > h4 {\n  margin: 0 0 5px 0;\n  font-weight: 600;\n  font-size: 14px;\n}\n.chat .item > .attachment > p,\n.chat .item > .attachment > .filename {\n  font-weight: 600;\n  font-size: 13px;\n  font-style: italic;\n  margin: 0;\n}\n.chat .item > .attachment:before,\n.chat .item > .attachment:after {\n  content: \" \";\n  display: table;\n}\n.chat .item > .attachment:after {\n  clear: both;\n}\n.box-input {\n  max-width: 200px;\n}\n.modal .panel-body {\n  color: #444;\n}\n/*\n * Component: Info Box\n * -------------------\n */\n.info-box {\n  display: block;\n  min-height: 90px;\n  background: #fff;\n  width: 100%;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 2px;\n  margin-bottom: 15px;\n}\n.info-box small {\n  font-size: 14px;\n}\n.info-box .progress {\n  background: rgba(0, 0, 0, 0.2);\n  margin: 5px -10px 5px -10px;\n  height: 2px;\n}\n.info-box .progress,\n.info-box .progress .progress-bar {\n  border-radius: 0;\n}\n.info-box .progress .progress-bar {\n  background: #fff;\n}\n.info-box-icon {\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n  display: block;\n  float: left;\n  height: 90px;\n  width: 90px;\n  text-align: center;\n  font-size: 45px;\n  line-height: 90px;\n  background: rgba(0, 0, 0, 0.2);\n}\n.info-box-icon > img {\n  max-width: 100%;\n}\n.info-box-content {\n  padding: 5px 10px;\n  margin-left: 90px;\n}\n.info-box-number {\n  display: block;\n  font-weight: bold;\n  font-size: 18px;\n}\n.progress-description,\n.info-box-text {\n  display: block;\n  font-size: 14px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.info-box-text {\n  text-transform: uppercase;\n}\n.info-box-more {\n  display: block;\n}\n.progress-description {\n  margin: 0;\n}\n/*\n * Component: Timeline\n * -------------------\n */\n.timeline {\n  position: relative;\n  margin: 0 0 30px 0;\n  padding: 0;\n  list-style: none;\n}\n.timeline:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  width: 4px;\n  background: #ddd;\n  left: 31px;\n  margin: 0;\n  border-radius: 2px;\n}\n.timeline > li {\n  position: relative;\n  margin-right: 10px;\n  margin-bottom: 15px;\n}\n.timeline > li:before,\n.timeline > li:after {\n  content: \" \";\n  display: table;\n}\n.timeline > li:after {\n  clear: both;\n}\n.timeline > li > .timeline-item {\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n  margin-top: 0;\n  background: #fff;\n  color: #444;\n  margin-left: 60px;\n  margin-right: 15px;\n  padding: 0;\n  position: relative;\n}\n.timeline > li > .timeline-item > .time {\n  color: #999;\n  float: right;\n  padding: 10px;\n  font-size: 12px;\n}\n.timeline > li > .timeline-item > .timeline-header {\n  margin: 0;\n  color: #555;\n  border-bottom: 1px solid #f4f4f4;\n  padding: 10px;\n  font-size: 16px;\n  line-height: 1.1;\n}\n.timeline > li > .timeline-item > .timeline-header > a {\n  font-weight: 600;\n}\n.timeline > li > .timeline-item > .timeline-body,\n.timeline > li > .timeline-item > .timeline-footer {\n  padding: 10px;\n}\n.timeline > li > .fa,\n.timeline > li > .glyphicon,\n.timeline > li > .ion {\n  width: 30px;\n  height: 30px;\n  font-size: 15px;\n  line-height: 30px;\n  position: absolute;\n  color: #666;\n  background: #d2d6de;\n  border-radius: 50%;\n  text-align: center;\n  left: 18px;\n  top: 0;\n}\n.timeline > .time-label > span {\n  font-weight: 600;\n  padding: 5px;\n  display: inline-block;\n  background-color: #fff;\n  border-radius: 4px;\n}\n.timeline-inverse > li > .timeline-item {\n  background: #f0f0f0;\n  border: 1px solid #ddd;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.timeline-inverse > li > .timeline-item > .timeline-header {\n  border-bottom-color: #ddd;\n}\n/*\n * Component: Button\n * -----------------\n */\n.btn {\n  border-radius: 3px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: 1px solid transparent;\n}\n.btn.uppercase {\n  text-transform: uppercase;\n}\n.btn.btn-flat {\n  border-radius: 0;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  border-width: 1px;\n}\n.btn:active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn:focus {\n  outline: none;\n}\n.btn.btn-file {\n  position: relative;\n  overflow: hidden;\n}\n.btn.btn-file > input[type='file'] {\n  position: absolute;\n  top: 0;\n  right: 0;\n  min-width: 100%;\n  min-height: 100%;\n  font-size: 100px;\n  text-align: right;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  outline: none;\n  background: white;\n  cursor: inherit;\n  display: block;\n}\n.btn-default {\n  background-color: #f4f4f4;\n  color: #444;\n  border-color: #ddd;\n}\n.btn-default:hover,\n.btn-default:active,\n.btn-default.hover {\n  background-color: #e7e7e7;\n}\n.btn-primary {\n  background-color: #3c8dbc;\n  border-color: #367fa9;\n}\n.btn-primary:hover,\n.btn-primary:active,\n.btn-primary.hover {\n  background-color: #367fa9;\n}\n.btn-success {\n  background-color: #00a65a;\n  border-color: #008d4c;\n}\n.btn-success:hover,\n.btn-success:active,\n.btn-success.hover {\n  background-color: #008d4c;\n}\n.btn-info {\n  background-color: #00c0ef;\n  border-color: #00acd6;\n}\n.btn-info:hover,\n.btn-info:active,\n.btn-info.hover {\n  background-color: #00acd6;\n}\n.btn-danger {\n  background-color: #dd4b39;\n  border-color: #d73925;\n}\n.btn-danger:hover,\n.btn-danger:active,\n.btn-danger.hover {\n  background-color: #d73925;\n}\n.btn-warning {\n  background-color: #f39c12;\n  border-color: #e08e0b;\n}\n.btn-warning:hover,\n.btn-warning:active,\n.btn-warning.hover {\n  background-color: #e08e0b;\n}\n.btn-outline {\n  border: 1px solid #fff;\n  background: transparent;\n  color: #fff;\n}\n.btn-outline:hover,\n.btn-outline:focus,\n.btn-outline:active {\n  color: rgba(255, 255, 255, 0.7);\n  border-color: rgba(255, 255, 255, 0.7);\n}\n.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn[class*='bg-']:hover {\n  -webkit-box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2);\n  box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2);\n}\n.btn-app {\n  border-radius: 3px;\n  position: relative;\n  padding: 15px 5px;\n  margin: 0 0 10px 10px;\n  min-width: 80px;\n  height: 60px;\n  text-align: center;\n  color: #666;\n  border: 1px solid #ddd;\n  background-color: #f4f4f4;\n  font-size: 12px;\n}\n.btn-app > .fa,\n.btn-app > .glyphicon,\n.btn-app > .ion {\n  font-size: 20px;\n  display: block;\n}\n.btn-app:hover {\n  background: #f4f4f4;\n  color: #444;\n  border-color: #aaa;\n}\n.btn-app:active,\n.btn-app:focus {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-app > .badge {\n  position: absolute;\n  top: -3px;\n  right: -10px;\n  font-size: 10px;\n  font-weight: 400;\n}\n/*\n * Component: Callout\n * ------------------\n */\n.callout {\n  border-radius: 3px;\n  margin: 0 0 20px 0;\n  padding: 15px 30px 15px 15px;\n  border-left: 5px solid #eee;\n}\n.callout a {\n  color: #fff;\n  text-decoration: underline;\n}\n.callout a:hover {\n  color: #eee;\n}\n.callout h4 {\n  margin-top: 0;\n  font-weight: 600;\n}\n.callout p:last-child {\n  margin-bottom: 0;\n}\n.callout code,\n.callout .highlight {\n  background-color: #fff;\n}\n.callout.callout-danger {\n  border-color: #c23321;\n}\n.callout.callout-warning {\n  border-color: #c87f0a;\n}\n.callout.callout-info {\n  border-color: #0097bc;\n}\n.callout.callout-success {\n  border-color: #00733e;\n}\n/*\n * Component: alert\n * ----------------\n */\n.alert {\n  border-radius: 3px;\n}\n.alert h4 {\n  font-weight: 600;\n}\n.alert .icon {\n  margin-right: 10px;\n}\n.alert .close {\n  color: #000;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n.alert .close:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.alert a {\n  color: #fff;\n  text-decoration: underline;\n}\n.alert-success {\n  border-color: #008d4c;\n}\n.alert-danger,\n.alert-error {\n  border-color: #d73925;\n}\n.alert-warning {\n  border-color: #e08e0b;\n}\n.alert-info {\n  border-color: #00acd6;\n}\n/*\n * Component: Nav\n * --------------\n */\n.nav > li > a:hover,\n.nav > li > a:active,\n.nav > li > a:focus {\n  color: #444;\n  background: #f7f7f7;\n}\n/* NAV PILLS */\n.nav-pills > li > a {\n  border-radius: 0;\n  border-top: 3px solid transparent;\n  color: #444;\n}\n.nav-pills > li > a > .fa,\n.nav-pills > li > a > .glyphicon,\n.nav-pills > li > a > .ion {\n  margin-right: 5px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  border-top-color: #3c8dbc;\n}\n.nav-pills > li.active > a {\n  font-weight: 600;\n}\n/* NAV STACKED */\n.nav-stacked > li > a {\n  border-radius: 0;\n  border-top: 0;\n  border-left: 3px solid transparent;\n  color: #444;\n}\n.nav-stacked > li.active > a,\n.nav-stacked > li.active > a:hover {\n  background: transparent;\n  color: #444;\n  border-top: 0;\n  border-left-color: #3c8dbc;\n}\n.nav-stacked > li.header {\n  border-bottom: 1px solid #ddd;\n  color: #777;\n  margin-bottom: 10px;\n  padding: 5px 10px;\n  text-transform: uppercase;\n}\n/* NAV TABS */\n.nav-tabs-custom {\n  margin-bottom: 20px;\n  background: #fff;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n}\n.nav-tabs-custom > .nav-tabs {\n  margin: 0;\n  border-bottom-color: #f4f4f4;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.nav-tabs-custom > .nav-tabs > li {\n  border-top: 3px solid transparent;\n  margin-bottom: -2px;\n  margin-right: 5px;\n}\n.nav-tabs-custom > .nav-tabs > li > a {\n  color: #444;\n  border-radius: 0;\n}\n.nav-tabs-custom > .nav-tabs > li > a.text-muted {\n  color: #999;\n}\n.nav-tabs-custom > .nav-tabs > li > a,\n.nav-tabs-custom > .nav-tabs > li > a:hover {\n  background: transparent;\n  margin: 0;\n}\n.nav-tabs-custom > .nav-tabs > li > a:hover {\n  color: #999;\n}\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:hover,\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:focus,\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:active {\n  border-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs > li.active {\n  border-top-color: #3c8dbc;\n}\n.nav-tabs-custom > .nav-tabs > li.active > a,\n.nav-tabs-custom > .nav-tabs > li.active:hover > a {\n  background-color: #fff;\n  color: #444;\n}\n.nav-tabs-custom > .nav-tabs > li.active > a {\n  border-top-color: transparent;\n  border-left-color: #f4f4f4;\n  border-right-color: #f4f4f4;\n}\n.nav-tabs-custom > .nav-tabs > li:first-of-type {\n  margin-left: 0;\n}\n.nav-tabs-custom > .nav-tabs > li:first-of-type.active > a {\n  border-left-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs.pull-right {\n  float: none !important;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li {\n  float: right;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type {\n  margin-right: 0;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type > a {\n  border-left-width: 1px;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type.active > a {\n  border-left-color: #f4f4f4;\n  border-right-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs > li.header {\n  line-height: 35px;\n  padding: 0 10px;\n  font-size: 20px;\n  color: #444;\n}\n.nav-tabs-custom > .nav-tabs > li.header > .fa,\n.nav-tabs-custom > .nav-tabs > li.header > .glyphicon,\n.nav-tabs-custom > .nav-tabs > li.header > .ion {\n  margin-right: 5px;\n}\n.nav-tabs-custom > .tab-content {\n  background: #fff;\n  padding: 10px;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.nav-tabs-custom .dropdown.open > a:active,\n.nav-tabs-custom .dropdown.open > a:focus {\n  background: transparent;\n  color: #999;\n}\n.nav-tabs-custom.tab-primary > .nav-tabs > li.active {\n  border-top-color: #3c8dbc;\n}\n.nav-tabs-custom.tab-info > .nav-tabs > li.active {\n  border-top-color: #00c0ef;\n}\n.nav-tabs-custom.tab-danger > .nav-tabs > li.active {\n  border-top-color: #dd4b39;\n}\n.nav-tabs-custom.tab-warning > .nav-tabs > li.active {\n  border-top-color: #f39c12;\n}\n.nav-tabs-custom.tab-success > .nav-tabs > li.active {\n  border-top-color: #00a65a;\n}\n.nav-tabs-custom.tab-default > .nav-tabs > li.active {\n  border-top-color: #d2d6de;\n}\n/* PAGINATION */\n.pagination > li > a {\n  background: #fafafa;\n  color: #666;\n}\n.pagination.pagination-flat > li > a {\n  border-radius: 0 !important;\n}\n/*\n * Component: Products List\n * ------------------------\n */\n.products-list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.products-list > .item {\n  border-radius: 3px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  padding: 10px 0;\n  background: #fff;\n}\n.products-list > .item:before,\n.products-list > .item:after {\n  content: \" \";\n  display: table;\n}\n.products-list > .item:after {\n  clear: both;\n}\n.products-list .product-img {\n  float: left;\n}\n.products-list .product-img img {\n  width: 50px;\n  height: 50px;\n}\n.products-list .product-info {\n  margin-left: 60px;\n}\n.products-list .product-title {\n  font-weight: 600;\n}\n.products-list .product-description {\n  display: block;\n  color: #999;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.product-list-in-box > .item {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-radius: 0;\n  border-bottom: 1px solid #f4f4f4;\n}\n.product-list-in-box > .item:last-of-type {\n  border-bottom-width: 0;\n}\n/*\n * Component: Table\n * ----------------\n */\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  border-top: 1px solid #f4f4f4;\n}\n.table > thead > tr > th {\n  border-bottom: 2px solid #f4f4f4;\n}\n.table tr td .progress {\n  margin-top: 5px;\n}\n.table-bordered {\n  border: 1px solid #f4f4f4;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #f4f4f4;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table.no-border,\n.table.no-border td,\n.table.no-border th {\n  border: 0;\n}\n/* .text-center in tables */\ntable.text-center,\ntable.text-center td,\ntable.text-center th {\n  text-align: center;\n}\n.table.align th {\n  text-align: left;\n}\n.table.align td {\n  text-align: right;\n}\n/*\n * Component: Label\n * ----------------\n */\n.label-default {\n  background-color: #d2d6de;\n  color: #444;\n}\n/*\n * Component: Direct Chat\n * ----------------------\n */\n.direct-chat .box-body {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  position: relative;\n  overflow-x: hidden;\n  padding: 0;\n}\n.direct-chat.chat-pane-open .direct-chat-contacts {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.direct-chat-messages {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n  padding: 10px;\n  height: 250px;\n  overflow: auto;\n}\n.direct-chat-msg,\n.direct-chat-text {\n  display: block;\n}\n.direct-chat-msg {\n  margin-bottom: 10px;\n}\n.direct-chat-msg:before,\n.direct-chat-msg:after {\n  content: \" \";\n  display: table;\n}\n.direct-chat-msg:after {\n  clear: both;\n}\n.direct-chat-messages,\n.direct-chat-contacts {\n  -webkit-transition: -webkit-transform 0.5s ease-in-out;\n  -moz-transition: -moz-transform 0.5s ease-in-out;\n  -o-transition: -o-transform 0.5s ease-in-out;\n  transition: transform 0.5s ease-in-out;\n}\n.direct-chat-text {\n  border-radius: 5px;\n  position: relative;\n  padding: 5px 10px;\n  background: #d2d6de;\n  border: 1px solid #d2d6de;\n  margin: 5px 0 0 50px;\n  color: #444444;\n}\n.direct-chat-text:after,\n.direct-chat-text:before {\n  position: absolute;\n  right: 100%;\n  top: 15px;\n  border: solid transparent;\n  border-right-color: #d2d6de;\n  content: ' ';\n  height: 0;\n  width: 0;\n  pointer-events: none;\n}\n.direct-chat-text:after {\n  border-width: 5px;\n  margin-top: -5px;\n}\n.direct-chat-text:before {\n  border-width: 6px;\n  margin-top: -6px;\n}\n.right .direct-chat-text {\n  margin-right: 50px;\n  margin-left: 0;\n}\n.right .direct-chat-text:after,\n.right .direct-chat-text:before {\n  right: auto;\n  left: 100%;\n  border-right-color: transparent;\n  border-left-color: #d2d6de;\n}\n.direct-chat-img {\n  border-radius: 50%;\n  float: left;\n  width: 40px;\n  height: 40px;\n}\n.right .direct-chat-img {\n  float: right;\n}\n.direct-chat-info {\n  display: block;\n  margin-bottom: 2px;\n  font-size: 12px;\n}\n.direct-chat-name {\n  font-weight: 600;\n}\n.direct-chat-timestamp {\n  color: #999;\n}\n.direct-chat-contacts-open .direct-chat-contacts {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.direct-chat-contacts {\n  -webkit-transform: translate(101%, 0);\n  -ms-transform: translate(101%, 0);\n  -o-transform: translate(101%, 0);\n  transform: translate(101%, 0);\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  height: 250px;\n  width: 100%;\n  background: #222d32;\n  color: #fff;\n  overflow: auto;\n}\n.contacts-list > li {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  padding: 10px;\n  margin: 0;\n}\n.contacts-list > li:before,\n.contacts-list > li:after {\n  content: \" \";\n  display: table;\n}\n.contacts-list > li:after {\n  clear: both;\n}\n.contacts-list > li:last-of-type {\n  border-bottom: none;\n}\n.contacts-list-img {\n  border-radius: 50%;\n  width: 40px;\n  float: left;\n}\n.contacts-list-info {\n  margin-left: 45px;\n  color: #fff;\n}\n.contacts-list-name,\n.contacts-list-status {\n  display: block;\n}\n.contacts-list-name {\n  font-weight: 600;\n}\n.contacts-list-status {\n  font-size: 12px;\n}\n.contacts-list-date {\n  color: #aaa;\n  font-weight: normal;\n}\n.contacts-list-msg {\n  color: #999;\n}\n.direct-chat-danger .right > .direct-chat-text {\n  background: #dd4b39;\n  border-color: #dd4b39;\n  color: #ffffff;\n}\n.direct-chat-danger .right > .direct-chat-text:after,\n.direct-chat-danger .right > .direct-chat-text:before {\n  border-left-color: #dd4b39;\n}\n.direct-chat-primary .right > .direct-chat-text {\n  background: #3c8dbc;\n  border-color: #3c8dbc;\n  color: #ffffff;\n}\n.direct-chat-primary .right > .direct-chat-text:after,\n.direct-chat-primary .right > .direct-chat-text:before {\n  border-left-color: #3c8dbc;\n}\n.direct-chat-warning .right > .direct-chat-text {\n  background: #f39c12;\n  border-color: #f39c12;\n  color: #ffffff;\n}\n.direct-chat-warning .right > .direct-chat-text:after,\n.direct-chat-warning .right > .direct-chat-text:before {\n  border-left-color: #f39c12;\n}\n.direct-chat-info .right > .direct-chat-text {\n  background: #00c0ef;\n  border-color: #00c0ef;\n  color: #ffffff;\n}\n.direct-chat-info .right > .direct-chat-text:after,\n.direct-chat-info .right > .direct-chat-text:before {\n  border-left-color: #00c0ef;\n}\n.direct-chat-success .right > .direct-chat-text {\n  background: #00a65a;\n  border-color: #00a65a;\n  color: #ffffff;\n}\n.direct-chat-success .right > .direct-chat-text:after,\n.direct-chat-success .right > .direct-chat-text:before {\n  border-left-color: #00a65a;\n}\n/*\n * Component: Users List\n * ---------------------\n */\n.users-list > li {\n  width: 25%;\n  float: left;\n  padding: 10px;\n  text-align: center;\n}\n.users-list > li img {\n  border-radius: 50%;\n  max-width: 100%;\n  height: auto;\n}\n.users-list > li > a:hover,\n.users-list > li > a:hover .users-list-name {\n  color: #999;\n}\n.users-list-name,\n.users-list-date {\n  display: block;\n}\n.users-list-name {\n  font-weight: 600;\n  color: #444;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.users-list-date {\n  color: #999;\n  font-size: 12px;\n}\n/*\n * Component: Carousel\n * -------------------\n */\n.carousel-control.left,\n.carousel-control.right {\n  background-image: none;\n}\n.carousel-control > .fa {\n  font-size: 40px;\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -20px;\n}\n/*\n * Component: modal\n * ----------------\n */\n.modal {\n  background: rgba(0, 0, 0, 0.3);\n}\n.modal-content {\n  border-radius: 0;\n  -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  border: 0;\n}\n@media (min-width: 768px) {\n  .modal-content {\n    -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n    box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  }\n}\n.modal-header {\n  border-bottom-color: #f4f4f4;\n}\n.modal-footer {\n  border-top-color: #f4f4f4;\n}\n.modal-primary .modal-header,\n.modal-primary .modal-footer {\n  border-color: #307095;\n}\n.modal-warning .modal-header,\n.modal-warning .modal-footer {\n  border-color: #c87f0a;\n}\n.modal-info .modal-header,\n.modal-info .modal-footer {\n  border-color: #0097bc;\n}\n.modal-success .modal-header,\n.modal-success .modal-footer {\n  border-color: #00733e;\n}\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  border-color: #c23321;\n}\n/*\n * Component: Social Widgets\n * -------------------------\n */\n.box-widget {\n  border: none;\n  position: relative;\n}\n.widget-user .widget-user-header {\n  padding: 20px;\n  height: 120px;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.widget-user .widget-user-username {\n  margin-top: 0;\n  margin-bottom: 5px;\n  font-size: 25px;\n  font-weight: 300;\n  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\n}\n.widget-user .widget-user-desc {\n  margin-top: 0;\n}\n.widget-user .widget-user-image {\n  position: absolute;\n  top: 65px;\n  left: 50%;\n  margin-left: -45px;\n}\n.widget-user .widget-user-image > img {\n  width: 90px;\n  height: auto;\n  border: 3px solid #fff;\n}\n.widget-user .box-footer {\n  padding-top: 30px;\n}\n.widget-user-2 .widget-user-header {\n  padding: 20px;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.widget-user-2 .widget-user-username {\n  margin-top: 5px;\n  margin-bottom: 5px;\n  font-size: 25px;\n  font-weight: 300;\n}\n.widget-user-2 .widget-user-desc {\n  margin-top: 0;\n}\n.widget-user-2 .widget-user-username,\n.widget-user-2 .widget-user-desc {\n  margin-left: 75px;\n}\n.widget-user-2 .widget-user-image > img {\n  width: 65px;\n  height: auto;\n  float: left;\n}\n/*\n * Page: Mailbox\n * -------------\n */\n.mailbox-messages > .table {\n  margin: 0;\n}\n.mailbox-controls {\n  padding: 5px;\n}\n.mailbox-controls.with-border {\n  border-bottom: 1px solid #f4f4f4;\n}\n.mailbox-read-info {\n  border-bottom: 1px solid #f4f4f4;\n  padding: 10px;\n}\n.mailbox-read-info h3 {\n  font-size: 20px;\n  margin: 0;\n}\n.mailbox-read-info h5 {\n  margin: 0;\n  padding: 5px 0 0 0;\n}\n.mailbox-read-time {\n  color: #999;\n  font-size: 13px;\n}\n.mailbox-read-message {\n  padding: 10px;\n}\n.mailbox-attachments li {\n  float: left;\n  width: 200px;\n  border: 1px solid #eee;\n  margin-bottom: 10px;\n  margin-right: 10px;\n}\n.mailbox-attachment-name {\n  font-weight: bold;\n  color: #666;\n}\n.mailbox-attachment-icon,\n.mailbox-attachment-info,\n.mailbox-attachment-size {\n  display: block;\n}\n.mailbox-attachment-info {\n  padding: 10px;\n  background: #f4f4f4;\n}\n.mailbox-attachment-size {\n  color: #999;\n  font-size: 12px;\n}\n.mailbox-attachment-icon {\n  text-align: center;\n  font-size: 65px;\n  color: #666;\n  padding: 20px 10px;\n}\n.mailbox-attachment-icon.has-img {\n  padding: 0;\n}\n.mailbox-attachment-icon.has-img > img {\n  max-width: 100%;\n  height: auto;\n}\n/*\n * Page: Lock Screen\n * -----------------\n */\n/* ADD THIS CLASS TO THE <BODY> TAG */\n.lockscreen {\n  background: #d2d6de;\n}\n.lockscreen-logo {\n  font-size: 35px;\n  text-align: center;\n  margin-bottom: 25px;\n  font-weight: 300;\n}\n.lockscreen-logo a {\n  color: #444;\n}\n.lockscreen-wrapper {\n  max-width: 400px;\n  margin: 0 auto;\n  margin-top: 10%;\n}\n/* User name [optional] */\n.lockscreen .lockscreen-name {\n  text-align: center;\n  font-weight: 600;\n}\n/* Will contain the image and the sign in form */\n.lockscreen-item {\n  border-radius: 4px;\n  padding: 0;\n  background: #fff;\n  position: relative;\n  margin: 10px auto 30px auto;\n  width: 290px;\n}\n/* User image */\n.lockscreen-image {\n  border-radius: 50%;\n  position: absolute;\n  left: -10px;\n  top: -25px;\n  background: #fff;\n  padding: 5px;\n  z-index: 10;\n}\n.lockscreen-image > img {\n  border-radius: 50%;\n  width: 70px;\n  height: 70px;\n}\n/* Contains the password input and the login button */\n.lockscreen-credentials {\n  margin-left: 70px;\n}\n.lockscreen-credentials .form-control {\n  border: 0;\n}\n.lockscreen-credentials .btn {\n  background-color: #fff;\n  border: 0;\n  padding: 0 10px;\n}\n.lockscreen-footer {\n  margin-top: 10px;\n}\n/*\n * Page: Login & Register\n * ----------------------\n */\n.login-logo,\n.register-logo {\n  font-size: 35px;\n  text-align: center;\n  margin-bottom: 25px;\n  font-weight: 300;\n}\n.login-logo a,\n.register-logo a {\n  color: #444;\n}\n.login-page,\n.register-page {\n  background: #d2d6de;\n}\n.login-box,\n.register-box {\n  width: 360px;\n  margin: 7% auto;\n}\n@media (max-width: 768px) {\n  .login-box,\n  .register-box {\n    width: 90%;\n    margin-top: 20px;\n  }\n}\n.login-box-body,\n.register-box-body {\n  background: #fff;\n  padding: 20px;\n  border-top: 0;\n  color: #666;\n}\n.login-box-body .form-control-feedback,\n.register-box-body .form-control-feedback {\n  color: #777;\n}\n.login-box-msg,\n.register-box-msg {\n  margin: 0;\n  text-align: center;\n  padding: 0 20px 20px 20px;\n}\n.social-auth-links {\n  margin: 10px 0;\n}\n/*\n * Page: 400 and 500 error pages\n * ------------------------------\n */\n.error-page {\n  width: 600px;\n  margin: 20px auto 0 auto;\n}\n@media (max-width: 991px) {\n  .error-page {\n    width: 100%;\n  }\n}\n.error-page > .headline {\n  float: left;\n  font-size: 100px;\n  font-weight: 300;\n}\n@media (max-width: 991px) {\n  .error-page > .headline {\n    float: none;\n    text-align: center;\n  }\n}\n.error-page > .error-content {\n  margin-left: 190px;\n  display: block;\n}\n@media (max-width: 991px) {\n  .error-page > .error-content {\n    margin-left: 0;\n  }\n}\n.error-page > .error-content > h3 {\n  font-weight: 300;\n  font-size: 25px;\n}\n@media (max-width: 991px) {\n  .error-page > .error-content > h3 {\n    text-align: center;\n  }\n}\n/*\n * Page: Invoice\n * -------------\n */\n.invoice {\n  position: relative;\n  background: #fff;\n  border: 1px solid #f4f4f4;\n  padding: 20px;\n  margin: 10px 25px;\n}\n.invoice-title {\n  margin-top: 0;\n}\n/*\n * Page: Profile\n * -------------\n */\n.profile-user-img {\n  margin: 0 auto;\n  width: 100px;\n  padding: 3px;\n  border: 3px solid #d2d6de;\n}\n.profile-username {\n  font-size: 21px;\n  margin-top: 5px;\n}\n.post {\n  border-bottom: 1px solid #d2d6de;\n  margin-bottom: 15px;\n  padding-bottom: 15px;\n  color: #666;\n}\n.post:last-of-type {\n  border-bottom: 0;\n  margin-bottom: 0;\n  padding-bottom: 0;\n}\n.post .user-block {\n  margin-bottom: 15px;\n}\n/*\n * Social Buttons for Bootstrap\n *\n * Copyright 2013-2015 Panayiotis Lipiridis\n * Licensed under the MIT License\n *\n * https://github.com/lipis/bootstrap-social\n */\n.btn-social {\n  position: relative;\n  padding-left: 44px;\n  text-align: left;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.btn-social > :first-child {\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: 32px;\n  line-height: 34px;\n  font-size: 1.6em;\n  text-align: center;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n}\n.btn-social.btn-lg {\n  padding-left: 61px;\n}\n.btn-social.btn-lg > :first-child {\n  line-height: 45px;\n  width: 45px;\n  font-size: 1.8em;\n}\n.btn-social.btn-sm {\n  padding-left: 38px;\n}\n.btn-social.btn-sm > :first-child {\n  line-height: 28px;\n  width: 28px;\n  font-size: 1.4em;\n}\n.btn-social.btn-xs {\n  padding-left: 30px;\n}\n.btn-social.btn-xs > :first-child {\n  line-height: 20px;\n  width: 20px;\n  font-size: 1.2em;\n}\n.btn-social-icon {\n  position: relative;\n  padding-left: 44px;\n  text-align: left;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  height: 34px;\n  width: 34px;\n  padding: 0;\n}\n.btn-social-icon > :first-child {\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: 32px;\n  line-height: 34px;\n  font-size: 1.6em;\n  text-align: center;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n}\n.btn-social-icon.btn-lg {\n  padding-left: 61px;\n}\n.btn-social-icon.btn-lg > :first-child {\n  line-height: 45px;\n  width: 45px;\n  font-size: 1.8em;\n}\n.btn-social-icon.btn-sm {\n  padding-left: 38px;\n}\n.btn-social-icon.btn-sm > :first-child {\n  line-height: 28px;\n  width: 28px;\n  font-size: 1.4em;\n}\n.btn-social-icon.btn-xs {\n  padding-left: 30px;\n}\n.btn-social-icon.btn-xs > :first-child {\n  line-height: 20px;\n  width: 20px;\n  font-size: 1.2em;\n}\n.btn-social-icon > :first-child {\n  border: none;\n  text-align: center;\n  width: 100%;\n}\n.btn-social-icon.btn-lg {\n  height: 45px;\n  width: 45px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-social-icon.btn-sm {\n  height: 30px;\n  width: 30px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-social-icon.btn-xs {\n  height: 22px;\n  width: 22px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-adn {\n  color: #ffffff;\n  background-color: #d87a68;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:focus,\n.btn-adn.focus {\n  color: #ffffff;\n  background-color: #ce563f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:hover {\n  color: #ffffff;\n  background-color: #ce563f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:active,\n.btn-adn.active,\n.open > .dropdown-toggle.btn-adn {\n  color: #ffffff;\n  background-color: #ce563f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:active,\n.btn-adn.active,\n.open > .dropdown-toggle.btn-adn {\n  background-image: none;\n}\n.btn-adn .badge {\n  color: #d87a68;\n  background-color: #ffffff;\n}\n.btn-bitbucket {\n  color: #ffffff;\n  background-color: #205081;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:focus,\n.btn-bitbucket.focus {\n  color: #ffffff;\n  background-color: #163758;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:hover {\n  color: #ffffff;\n  background-color: #163758;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:active,\n.btn-bitbucket.active,\n.open > .dropdown-toggle.btn-bitbucket {\n  color: #ffffff;\n  background-color: #163758;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:active,\n.btn-bitbucket.active,\n.open > .dropdown-toggle.btn-bitbucket {\n  background-image: none;\n}\n.btn-bitbucket .badge {\n  color: #205081;\n  background-color: #ffffff;\n}\n.btn-dropbox {\n  color: #ffffff;\n  background-color: #1087dd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:focus,\n.btn-dropbox.focus {\n  color: #ffffff;\n  background-color: #0d6aad;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:hover {\n  color: #ffffff;\n  background-color: #0d6aad;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:active,\n.btn-dropbox.active,\n.open > .dropdown-toggle.btn-dropbox {\n  color: #ffffff;\n  background-color: #0d6aad;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:active,\n.btn-dropbox.active,\n.open > .dropdown-toggle.btn-dropbox {\n  background-image: none;\n}\n.btn-dropbox .badge {\n  color: #1087dd;\n  background-color: #ffffff;\n}\n.btn-facebook {\n  color: #ffffff;\n  background-color: #3b5998;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:focus,\n.btn-facebook.focus {\n  color: #ffffff;\n  background-color: #2d4373;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:hover {\n  color: #ffffff;\n  background-color: #2d4373;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:active,\n.btn-facebook.active,\n.open > .dropdown-toggle.btn-facebook {\n  color: #ffffff;\n  background-color: #2d4373;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:active,\n.btn-facebook.active,\n.open > .dropdown-toggle.btn-facebook {\n  background-image: none;\n}\n.btn-facebook .badge {\n  color: #3b5998;\n  background-color: #ffffff;\n}\n.btn-flickr {\n  color: #ffffff;\n  background-color: #ff0084;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:focus,\n.btn-flickr.focus {\n  color: #ffffff;\n  background-color: #cc006a;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:hover {\n  color: #ffffff;\n  background-color: #cc006a;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:active,\n.btn-flickr.active,\n.open > .dropdown-toggle.btn-flickr {\n  color: #ffffff;\n  background-color: #cc006a;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:active,\n.btn-flickr.active,\n.open > .dropdown-toggle.btn-flickr {\n  background-image: none;\n}\n.btn-flickr .badge {\n  color: #ff0084;\n  background-color: #ffffff;\n}\n.btn-foursquare {\n  color: #ffffff;\n  background-color: #f94877;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:focus,\n.btn-foursquare.focus {\n  color: #ffffff;\n  background-color: #f71752;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:hover {\n  color: #ffffff;\n  background-color: #f71752;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:active,\n.btn-foursquare.active,\n.open > .dropdown-toggle.btn-foursquare {\n  color: #ffffff;\n  background-color: #f71752;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:active,\n.btn-foursquare.active,\n.open > .dropdown-toggle.btn-foursquare {\n  background-image: none;\n}\n.btn-foursquare .badge {\n  color: #f94877;\n  background-color: #ffffff;\n}\n.btn-github {\n  color: #ffffff;\n  background-color: #444444;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:focus,\n.btn-github.focus {\n  color: #ffffff;\n  background-color: #2b2b2b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:hover {\n  color: #ffffff;\n  background-color: #2b2b2b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:active,\n.btn-github.active,\n.open > .dropdown-toggle.btn-github {\n  color: #ffffff;\n  background-color: #2b2b2b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:active,\n.btn-github.active,\n.open > .dropdown-toggle.btn-github {\n  background-image: none;\n}\n.btn-github .badge {\n  color: #444444;\n  background-color: #ffffff;\n}\n.btn-google {\n  color: #ffffff;\n  background-color: #dd4b39;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:focus,\n.btn-google.focus {\n  color: #ffffff;\n  background-color: #c23321;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:hover {\n  color: #ffffff;\n  background-color: #c23321;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:active,\n.btn-google.active,\n.open > .dropdown-toggle.btn-google {\n  color: #ffffff;\n  background-color: #c23321;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:active,\n.btn-google.active,\n.open > .dropdown-toggle.btn-google {\n  background-image: none;\n}\n.btn-google .badge {\n  color: #dd4b39;\n  background-color: #ffffff;\n}\n.btn-instagram {\n  color: #ffffff;\n  background-color: #3f729b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:focus,\n.btn-instagram.focus {\n  color: #ffffff;\n  background-color: #305777;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:hover {\n  color: #ffffff;\n  background-color: #305777;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:active,\n.btn-instagram.active,\n.open > .dropdown-toggle.btn-instagram {\n  color: #ffffff;\n  background-color: #305777;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:active,\n.btn-instagram.active,\n.open > .dropdown-toggle.btn-instagram {\n  background-image: none;\n}\n.btn-instagram .badge {\n  color: #3f729b;\n  background-color: #ffffff;\n}\n.btn-linkedin {\n  color: #ffffff;\n  background-color: #007bb6;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:focus,\n.btn-linkedin.focus {\n  color: #ffffff;\n  background-color: #005983;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:hover {\n  color: #ffffff;\n  background-color: #005983;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:active,\n.btn-linkedin.active,\n.open > .dropdown-toggle.btn-linkedin {\n  color: #ffffff;\n  background-color: #005983;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:active,\n.btn-linkedin.active,\n.open > .dropdown-toggle.btn-linkedin {\n  background-image: none;\n}\n.btn-linkedin .badge {\n  color: #007bb6;\n  background-color: #ffffff;\n}\n.btn-microsoft {\n  color: #ffffff;\n  background-color: #2672ec;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:focus,\n.btn-microsoft.focus {\n  color: #ffffff;\n  background-color: #125acd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:hover {\n  color: #ffffff;\n  background-color: #125acd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:active,\n.btn-microsoft.active,\n.open > .dropdown-toggle.btn-microsoft {\n  color: #ffffff;\n  background-color: #125acd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:active,\n.btn-microsoft.active,\n.open > .dropdown-toggle.btn-microsoft {\n  background-image: none;\n}\n.btn-microsoft .badge {\n  color: #2672ec;\n  background-color: #ffffff;\n}\n.btn-openid {\n  color: #ffffff;\n  background-color: #f7931e;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:focus,\n.btn-openid.focus {\n  color: #ffffff;\n  background-color: #da7908;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:hover {\n  color: #ffffff;\n  background-color: #da7908;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:active,\n.btn-openid.active,\n.open > .dropdown-toggle.btn-openid {\n  color: #ffffff;\n  background-color: #da7908;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:active,\n.btn-openid.active,\n.open > .dropdown-toggle.btn-openid {\n  background-image: none;\n}\n.btn-openid .badge {\n  color: #f7931e;\n  background-color: #ffffff;\n}\n.btn-pinterest {\n  color: #ffffff;\n  background-color: #cb2027;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:focus,\n.btn-pinterest.focus {\n  color: #ffffff;\n  background-color: #9f191f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:hover {\n  color: #ffffff;\n  background-color: #9f191f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:active,\n.btn-pinterest.active,\n.open > .dropdown-toggle.btn-pinterest {\n  color: #ffffff;\n  background-color: #9f191f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:active,\n.btn-pinterest.active,\n.open > .dropdown-toggle.btn-pinterest {\n  background-image: none;\n}\n.btn-pinterest .badge {\n  color: #cb2027;\n  background-color: #ffffff;\n}\n.btn-reddit {\n  color: #000000;\n  background-color: #eff7ff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:focus,\n.btn-reddit.focus {\n  color: #000000;\n  background-color: #bcddff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:hover {\n  color: #000000;\n  background-color: #bcddff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:active,\n.btn-reddit.active,\n.open > .dropdown-toggle.btn-reddit {\n  color: #000000;\n  background-color: #bcddff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:active,\n.btn-reddit.active,\n.open > .dropdown-toggle.btn-reddit {\n  background-image: none;\n}\n.btn-reddit .badge {\n  color: #eff7ff;\n  background-color: #000000;\n}\n.btn-soundcloud {\n  color: #ffffff;\n  background-color: #ff5500;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:focus,\n.btn-soundcloud.focus {\n  color: #ffffff;\n  background-color: #cc4400;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:hover {\n  color: #ffffff;\n  background-color: #cc4400;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:active,\n.btn-soundcloud.active,\n.open > .dropdown-toggle.btn-soundcloud {\n  color: #ffffff;\n  background-color: #cc4400;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:active,\n.btn-soundcloud.active,\n.open > .dropdown-toggle.btn-soundcloud {\n  background-image: none;\n}\n.btn-soundcloud .badge {\n  color: #ff5500;\n  background-color: #ffffff;\n}\n.btn-tumblr {\n  color: #ffffff;\n  background-color: #2c4762;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:focus,\n.btn-tumblr.focus {\n  color: #ffffff;\n  background-color: #1c2d3f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:hover {\n  color: #ffffff;\n  background-color: #1c2d3f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:active,\n.btn-tumblr.active,\n.open > .dropdown-toggle.btn-tumblr {\n  color: #ffffff;\n  background-color: #1c2d3f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:active,\n.btn-tumblr.active,\n.open > .dropdown-toggle.btn-tumblr {\n  background-image: none;\n}\n.btn-tumblr .badge {\n  color: #2c4762;\n  background-color: #ffffff;\n}\n.btn-twitter {\n  color: #ffffff;\n  background-color: #55acee;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:focus,\n.btn-twitter.focus {\n  color: #ffffff;\n  background-color: #2795e9;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:hover {\n  color: #ffffff;\n  background-color: #2795e9;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:active,\n.btn-twitter.active,\n.open > .dropdown-toggle.btn-twitter {\n  color: #ffffff;\n  background-color: #2795e9;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:active,\n.btn-twitter.active,\n.open > .dropdown-toggle.btn-twitter {\n  background-image: none;\n}\n.btn-twitter .badge {\n  color: #55acee;\n  background-color: #ffffff;\n}\n.btn-vimeo {\n  color: #ffffff;\n  background-color: #1ab7ea;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:focus,\n.btn-vimeo.focus {\n  color: #ffffff;\n  background-color: #1295bf;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:hover {\n  color: #ffffff;\n  background-color: #1295bf;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:active,\n.btn-vimeo.active,\n.open > .dropdown-toggle.btn-vimeo {\n  color: #ffffff;\n  background-color: #1295bf;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:active,\n.btn-vimeo.active,\n.open > .dropdown-toggle.btn-vimeo {\n  background-image: none;\n}\n.btn-vimeo .badge {\n  color: #1ab7ea;\n  background-color: #ffffff;\n}\n.btn-vk {\n  color: #ffffff;\n  background-color: #587ea3;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:focus,\n.btn-vk.focus {\n  color: #ffffff;\n  background-color: #466482;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:hover {\n  color: #ffffff;\n  background-color: #466482;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:active,\n.btn-vk.active,\n.open > .dropdown-toggle.btn-vk {\n  color: #ffffff;\n  background-color: #466482;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:active,\n.btn-vk.active,\n.open > .dropdown-toggle.btn-vk {\n  background-image: none;\n}\n.btn-vk .badge {\n  color: #587ea3;\n  background-color: #ffffff;\n}\n.btn-yahoo {\n  color: #ffffff;\n  background-color: #720e9e;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:focus,\n.btn-yahoo.focus {\n  color: #ffffff;\n  background-color: #500a6f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:hover {\n  color: #ffffff;\n  background-color: #500a6f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:active,\n.btn-yahoo.active,\n.open > .dropdown-toggle.btn-yahoo {\n  color: #ffffff;\n  background-color: #500a6f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:active,\n.btn-yahoo.active,\n.open > .dropdown-toggle.btn-yahoo {\n  background-image: none;\n}\n.btn-yahoo .badge {\n  color: #720e9e;\n  background-color: #ffffff;\n}\n/*\n * Plugin: Full Calendar\n * ---------------------\n */\n.fc-button {\n  background: #f4f4f4;\n  background-image: none;\n  color: #444;\n  border-color: #ddd;\n  border-bottom-color: #ddd;\n}\n.fc-button:hover,\n.fc-button:active,\n.fc-button.hover {\n  background-color: #e9e9e9;\n}\n.fc-header-title h2 {\n  font-size: 15px;\n  line-height: 1.6em;\n  color: #666;\n  margin-left: 10px;\n}\n.fc-header-right {\n  padding-right: 10px;\n}\n.fc-header-left {\n  padding-left: 10px;\n}\n.fc-widget-header {\n  background: #fafafa;\n}\n.fc-grid {\n  width: 100%;\n  border: 0;\n}\n.fc-widget-header:first-of-type,\n.fc-widget-content:first-of-type {\n  border-left: 0;\n  border-right: 0;\n}\n.fc-widget-header:last-of-type,\n.fc-widget-content:last-of-type {\n  border-right: 0;\n}\n.fc-toolbar {\n  padding: 10px;\n  margin: 0;\n}\n.fc-day-number {\n  font-size: 20px;\n  font-weight: 300;\n  padding-right: 10px;\n}\n.fc-color-picker {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.fc-color-picker > li {\n  float: left;\n  font-size: 30px;\n  margin-right: 5px;\n  line-height: 30px;\n}\n.fc-color-picker > li .fa {\n  -webkit-transition: -webkit-transform linear 0.3s;\n  -moz-transition: -moz-transform linear 0.3s;\n  -o-transition: -o-transform linear 0.3s;\n  transition: transform linear 0.3s;\n}\n.fc-color-picker > li .fa:hover {\n  -webkit-transform: rotate(30deg);\n  -ms-transform: rotate(30deg);\n  -o-transform: rotate(30deg);\n  transform: rotate(30deg);\n}\n#add-new-event {\n  -webkit-transition: all linear 0.3s;\n  -o-transition: all linear 0.3s;\n  transition: all linear 0.3s;\n}\n.external-event {\n  padding: 5px 10px;\n  font-weight: bold;\n  margin-bottom: 4px;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n  cursor: move;\n}\n.external-event:hover {\n  box-shadow: inset 0 0 90px rgba(0, 0, 0, 0.2);\n}\n/*\n * Plugin: Select2\n * ---------------\n */\n.select2-container--default.select2-container--focus,\n.select2-selection.select2-container--focus,\n.select2-container--default:focus,\n.select2-selection:focus,\n.select2-container--default:active,\n.select2-selection:active {\n  outline: none;\n}\n.select2-container--default .select2-selection--single,\n.select2-selection .select2-selection--single {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n  padding: 6px 12px;\n  height: 34px;\n}\n.select2-container--default.select2-container--open {\n  border-color: #3c8dbc;\n}\n.select2-dropdown {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n}\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n  background-color: #3c8dbc;\n  color: white;\n}\n.select2-results__option {\n  padding: 6px 12px;\n  user-select: none;\n  -webkit-user-select: none;\n}\n.select2-container .select2-selection--single .select2-selection__rendered {\n  padding-left: 0;\n  padding-right: 0;\n  height: auto;\n  margin-top: -4px;\n}\n.select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n  padding-right: 6px;\n  padding-left: 20px;\n}\n.select2-container--default .select2-selection--single .select2-selection__arrow {\n  height: 28px;\n  right: 3px;\n}\n.select2-container--default .select2-selection--single .select2-selection__arrow b {\n  margin-top: 0;\n}\n.select2-dropdown .select2-search__field,\n.select2-search--inline .select2-search__field {\n  border: 1px solid #d2d6de;\n}\n.select2-dropdown .select2-search__field:focus,\n.select2-search--inline .select2-search__field:focus {\n  outline: none;\n  border: 1px solid #3c8dbc;\n}\n.select2-container--default .select2-results__option[aria-disabled=true] {\n  color: #999;\n}\n.select2-container--default .select2-results__option[aria-selected=true] {\n  background-color: #ddd;\n}\n.select2-container--default .select2-results__option[aria-selected=true],\n.select2-container--default .select2-results__option[aria-selected=true]:hover {\n  color: #444;\n}\n.select2-container--default .select2-selection--multiple {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n}\n.select2-container--default .select2-selection--multiple:focus {\n  border-color: #3c8dbc;\n}\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n  border-color: #d2d6de;\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice {\n  background-color: #3c8dbc;\n  border-color: #367fa9;\n  padding: 1px 10px;\n  color: #fff;\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n  margin-right: 5px;\n  color: rgba(255, 255, 255, 0.7);\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {\n  color: #fff;\n}\n.select2-container .select2-selection--single .select2-selection__rendered {\n  padding-right: 10px;\n}\n/*\n * General: Miscellaneous\n * ----------------------\n */\n.pad {\n  padding: 10px;\n}\n.margin {\n  margin: 10px;\n}\n.margin-bottom {\n  margin-bottom: 20px;\n}\n.margin-bottom-none {\n  margin-bottom: 0;\n}\n.margin-r-5 {\n  margin-right: 5px;\n}\n.inline {\n  display: inline;\n}\n.description-block {\n  display: block;\n  margin: 10px 0;\n  text-align: center;\n}\n.description-block.margin-bottom {\n  margin-bottom: 25px;\n}\n.description-block > .description-header {\n  margin: 0;\n  padding: 0;\n  font-weight: 600;\n  font-size: 16px;\n}\n.description-block > .description-text {\n  text-transform: uppercase;\n}\n.bg-red,\n.bg-yellow,\n.bg-aqua,\n.bg-blue,\n.bg-light-blue,\n.bg-green,\n.bg-navy,\n.bg-teal,\n.bg-olive,\n.bg-lime,\n.bg-orange,\n.bg-fuchsia,\n.bg-purple,\n.bg-maroon,\n.bg-black,\n.bg-red-active,\n.bg-yellow-active,\n.bg-aqua-active,\n.bg-blue-active,\n.bg-light-blue-active,\n.bg-green-active,\n.bg-navy-active,\n.bg-teal-active,\n.bg-olive-active,\n.bg-lime-active,\n.bg-orange-active,\n.bg-fuchsia-active,\n.bg-purple-active,\n.bg-maroon-active,\n.bg-black-active,\n.callout.callout-danger,\n.callout.callout-warning,\n.callout.callout-info,\n.callout.callout-success,\n.alert-success,\n.alert-danger,\n.alert-error,\n.alert-warning,\n.alert-info,\n.label-danger,\n.label-info,\n.label-warning,\n.label-primary,\n.label-success,\n.modal-primary .modal-body,\n.modal-primary .modal-header,\n.modal-primary .modal-footer,\n.modal-warning .modal-body,\n.modal-warning .modal-header,\n.modal-warning .modal-footer,\n.modal-info .modal-body,\n.modal-info .modal-header,\n.modal-info .modal-footer,\n.modal-success .modal-body,\n.modal-success .modal-header,\n.modal-success .modal-footer,\n.modal-danger .modal-body,\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  color: #fff !important;\n}\n.bg-gray {\n  color: #000;\n  background-color: #d2d6de !important;\n}\n.bg-gray-light {\n  background-color: #f7f7f7;\n}\n.bg-black {\n  background-color: #111111 !important;\n}\n.bg-red,\n.callout.callout-danger,\n.alert-danger,\n.alert-error,\n.label-danger,\n.modal-danger .modal-body {\n  background-color: #dd4b39 !important;\n}\n.bg-yellow,\n.callout.callout-warning,\n.alert-warning,\n.label-warning,\n.modal-warning .modal-body {\n  background-color: #f39c12 !important;\n}\n.bg-aqua,\n.callout.callout-info,\n.alert-info,\n.label-info,\n.modal-info .modal-body {\n  background-color: #00c0ef !important;\n}\n.bg-blue {\n  background-color: #0073b7 !important;\n}\n.bg-light-blue,\n.label-primary,\n.modal-primary .modal-body {\n  background-color: #3c8dbc !important;\n}\n.bg-green,\n.callout.callout-success,\n.alert-success,\n.label-success,\n.modal-success .modal-body {\n  background-color: #00a65a !important;\n}\n.bg-navy {\n  background-color: #001f3f !important;\n}\n.bg-teal {\n  background-color: #39cccc !important;\n}\n.bg-olive {\n  background-color: #3d9970 !important;\n}\n.bg-lime {\n  background-color: #01ff70 !important;\n}\n.bg-orange {\n  background-color: #ff851b !important;\n}\n.bg-fuchsia {\n  background-color: #f012be !important;\n}\n.bg-purple {\n  background-color: #605ca8 !important;\n}\n.bg-maroon {\n  background-color: #d81b60 !important;\n}\n.bg-gray-active {\n  color: #000;\n  background-color: #b5bbc8 !important;\n}\n.bg-black-active {\n  background-color: #000000 !important;\n}\n.bg-red-active,\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  background-color: #d33724 !important;\n}\n.bg-yellow-active,\n.modal-warning .modal-header,\n.modal-warning .modal-footer {\n  background-color: #db8b0b !important;\n}\n.bg-aqua-active,\n.modal-info .modal-header,\n.modal-info .modal-footer {\n  background-color: #00a7d0 !important;\n}\n.bg-blue-active {\n  background-color: #005384 !important;\n}\n.bg-light-blue-active,\n.modal-primary .modal-header,\n.modal-primary .modal-footer {\n  background-color: #357ca5 !important;\n}\n.bg-green-active,\n.modal-success .modal-header,\n.modal-success .modal-footer {\n  background-color: #008d4c !important;\n}\n.bg-navy-active {\n  background-color: #001a35 !important;\n}\n.bg-teal-active {\n  background-color: #30bbbb !important;\n}\n.bg-olive-active {\n  background-color: #368763 !important;\n}\n.bg-lime-active {\n  background-color: #00e765 !important;\n}\n.bg-orange-active {\n  background-color: #ff7701 !important;\n}\n.bg-fuchsia-active {\n  background-color: #db0ead !important;\n}\n.bg-purple-active {\n  background-color: #555299 !important;\n}\n.bg-maroon-active {\n  background-color: #ca195a !important;\n}\n[class^=\"bg-\"].disabled {\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n}\n.text-red {\n  color: #dd4b39 !important;\n}\n.text-yellow {\n  color: #f39c12 !important;\n}\n.text-aqua {\n  color: #00c0ef !important;\n}\n.text-blue {\n  color: #0073b7 !important;\n}\n.text-black {\n  color: #111111 !important;\n}\n.text-light-blue {\n  color: #3c8dbc !important;\n}\n.text-green {\n  color: #00a65a !important;\n}\n.text-gray {\n  color: #d2d6de !important;\n}\n.text-navy {\n  color: #001f3f !important;\n}\n.text-teal {\n  color: #39cccc !important;\n}\n.text-olive {\n  color: #3d9970 !important;\n}\n.text-lime {\n  color: #01ff70 !important;\n}\n.text-orange {\n  color: #ff851b !important;\n}\n.text-fuchsia {\n  color: #f012be !important;\n}\n.text-purple {\n  color: #605ca8 !important;\n}\n.text-maroon {\n  color: #d81b60 !important;\n}\n.link-muted {\n  color: #7a869d;\n}\n.link-muted:hover,\n.link-muted:focus {\n  color: #606c84;\n}\n.link-black {\n  color: #666;\n}\n.link-black:hover,\n.link-black:focus {\n  color: #999;\n}\n.hide {\n  display: none !important;\n}\n.no-border {\n  border: 0 !important;\n}\n.no-padding {\n  padding: 0 !important;\n}\n.no-margin {\n  margin: 0 !important;\n}\n.no-shadow {\n  box-shadow: none !important;\n}\n.list-unstyled,\n.chart-legend,\n.contacts-list,\n.users-list,\n.mailbox-attachments {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.list-group-unbordered > .list-group-item {\n  border-left: 0;\n  border-right: 0;\n  border-radius: 0;\n  padding-left: 0;\n  padding-right: 0;\n}\n.flat {\n  border-radius: 0 !important;\n}\n.text-bold,\n.text-bold.table td,\n.text-bold.table th {\n  font-weight: 700;\n}\n.text-sm {\n  font-size: 12px;\n}\n.jqstooltip {\n  padding: 5px !important;\n  width: auto !important;\n  height: auto !important;\n}\n.bg-teal-gradient {\n  background: #39cccc !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #39cccc), color-stop(1, #7adddd)) !important;\n  background: -ms-linear-gradient(bottom, #39cccc, #7adddd) !important;\n  background: -moz-linear-gradient(center bottom, #39cccc 0%, #7adddd 100%) !important;\n  background: -o-linear-gradient(#7adddd, #39cccc) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important;\n  color: #fff;\n}\n.bg-light-blue-gradient {\n  background: #3c8dbc !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important;\n  background: -ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important;\n  background: -moz-linear-gradient(center bottom, #3c8dbc 0%, #67a8ce 100%) !important;\n  background: -o-linear-gradient(#67a8ce, #3c8dbc) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important;\n  color: #fff;\n}\n.bg-blue-gradient {\n  background: #0073b7 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important;\n  background: -ms-linear-gradient(bottom, #0073b7, #0089db) !important;\n  background: -moz-linear-gradient(center bottom, #0073b7 0%, #0089db 100%) !important;\n  background: -o-linear-gradient(#0089db, #0073b7) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important;\n  color: #fff;\n}\n.bg-aqua-gradient {\n  background: #00c0ef !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important;\n  background: -ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important;\n  background: -moz-linear-gradient(center bottom, #00c0ef 0%, #14d1ff 100%) !important;\n  background: -o-linear-gradient(#14d1ff, #00c0ef) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;\n  color: #fff;\n}\n.bg-yellow-gradient {\n  background: #f39c12 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important;\n  background: -ms-linear-gradient(bottom, #f39c12, #f7bc60) !important;\n  background: -moz-linear-gradient(center bottom, #f39c12 0%, #f7bc60 100%) !important;\n  background: -o-linear-gradient(#f7bc60, #f39c12) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;\n  color: #fff;\n}\n.bg-purple-gradient {\n  background: #605ca8 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important;\n  background: -ms-linear-gradient(bottom, #605ca8, #9491c4) !important;\n  background: -moz-linear-gradient(center bottom, #605ca8 0%, #9491c4 100%) !important;\n  background: -o-linear-gradient(#9491c4, #605ca8) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;\n  color: #fff;\n}\n.bg-green-gradient {\n  background: #00a65a !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important;\n  background: -ms-linear-gradient(bottom, #00a65a, #00ca6d) !important;\n  background: -moz-linear-gradient(center bottom, #00a65a 0%, #00ca6d 100%) !important;\n  background: -o-linear-gradient(#00ca6d, #00a65a) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;\n  color: #fff;\n}\n.bg-red-gradient {\n  background: #dd4b39 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important;\n  background: -ms-linear-gradient(bottom, #dd4b39, #e47365) !important;\n  background: -moz-linear-gradient(center bottom, #dd4b39 0%, #e47365 100%) !important;\n  background: -o-linear-gradient(#e47365, #dd4b39) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;\n  color: #fff;\n}\n.bg-black-gradient {\n  background: #111111 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #111111), color-stop(1, #2b2b2b)) !important;\n  background: -ms-linear-gradient(bottom, #111111, #2b2b2b) !important;\n  background: -moz-linear-gradient(center bottom, #111111 0%, #2b2b2b 100%) !important;\n  background: -o-linear-gradient(#2b2b2b, #111111) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important;\n  color: #fff;\n}\n.bg-maroon-gradient {\n  background: #d81b60 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #d81b60), color-stop(1, #e73f7c)) !important;\n  background: -ms-linear-gradient(bottom, #d81b60, #e73f7c) !important;\n  background: -moz-linear-gradient(center bottom, #d81b60 0%, #e73f7c 100%) !important;\n  background: -o-linear-gradient(#e73f7c, #d81b60) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important;\n  color: #fff;\n}\n.description-block .description-icon {\n  font-size: 16px;\n}\n.no-pad-top {\n  padding-top: 0;\n}\n.position-static {\n  position: static !important;\n}\n.list-header {\n  font-size: 15px;\n  padding: 10px 4px;\n  font-weight: bold;\n  color: #666;\n}\n.list-seperator {\n  height: 1px;\n  background: #f4f4f4;\n  margin: 15px 0 9px 0;\n}\n.list-link > a {\n  padding: 4px;\n  color: #777;\n}\n.list-link > a:hover {\n  color: #222;\n}\n.font-light {\n  font-weight: 300;\n}\n.user-block:before,\n.user-block:after {\n  content: \" \";\n  display: table;\n}\n.user-block:after {\n  clear: both;\n}\n.user-block img {\n  width: 40px;\n  height: 40px;\n  float: left;\n}\n.user-block .username,\n.user-block .description,\n.user-block .comment {\n  display: block;\n  margin-left: 50px;\n}\n.user-block .username {\n  font-size: 16px;\n  font-weight: 600;\n}\n.user-block .description {\n  color: #999;\n  font-size: 13px;\n}\n.user-block.user-block-sm .username,\n.user-block.user-block-sm .description,\n.user-block.user-block-sm .comment {\n  margin-left: 40px;\n}\n.user-block.user-block-sm .username {\n  font-size: 14px;\n}\n.img-sm,\n.img-md,\n.img-lg,\n.box-comments .box-comment img,\n.user-block.user-block-sm img {\n  float: left;\n}\n.img-sm,\n.box-comments .box-comment img,\n.user-block.user-block-sm img {\n  width: 30px !important;\n  height: 30px !important;\n}\n.img-sm + .img-push {\n  margin-left: 40px;\n}\n.img-md {\n  width: 60px;\n  height: 60px;\n}\n.img-md + .img-push {\n  margin-left: 70px;\n}\n.img-lg {\n  width: 100px;\n  height: 100px;\n}\n.img-lg + .img-push {\n  margin-left: 110px;\n}\n.img-bordered {\n  border: 3px solid #d2d6de;\n  padding: 3px;\n}\n.img-bordered-sm {\n  border: 2px solid #d2d6de;\n  padding: 2px;\n}\n.attachment-block {\n  border: 1px solid #f4f4f4;\n  padding: 5px;\n  margin-bottom: 10px;\n  background: #f7f7f7;\n}\n.attachment-block .attachment-img {\n  max-width: 100px;\n  max-height: 100px;\n  height: auto;\n  float: left;\n}\n.attachment-block .attachment-pushed {\n  margin-left: 110px;\n}\n.attachment-block .attachment-heading {\n  margin: 0;\n}\n.attachment-block .attachment-text {\n  color: #555;\n}\n.connectedSortable {\n  min-height: 100px;\n}\n.ui-helper-hidden-accessible {\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n.sort-highlight {\n  background: #f4f4f4;\n  border: 1px dashed #ddd;\n  margin-bottom: 10px;\n}\n.full-opacity-hover {\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n}\n.full-opacity-hover:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.chart {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n}\n.chart svg,\n.chart canvas {\n  width: 100% !important;\n}\n/*\n * Misc: print\n * -----------\n */\n@media print {\n  .no-print,\n  .main-sidebar,\n  .left-side,\n  .main-header,\n  .content-header {\n    display: none !important;\n  }\n  .content-wrapper,\n  .right-side,\n  .main-footer {\n    margin-left: 0 !important;\n    min-height: 0 !important;\n    -webkit-transform: translate(0, 0) !important;\n    -ms-transform: translate(0, 0) !important;\n    -o-transform: translate(0, 0) !important;\n    transform: translate(0, 0) !important;\n  }\n  .fixed .content-wrapper,\n  .fixed .right-side {\n    padding-top: 0 !important;\n  }\n  .invoice {\n    width: 100%;\n    border: 0;\n    margin: 0;\n    padding: 0;\n  }\n  .invoice-col {\n    float: left;\n    width: 33.3333333%;\n  }\n  .table-responsive {\n    overflow: auto;\n  }\n  .table-responsive > .table tr th,\n  .table-responsive > .table tr td {\n    white-space: normal !important;\n  }\n}\n"
  },
  {
    "path": "public/adminlte/css/alt/AdminLTE-bootstrap-social.css",
    "content": "/*\n * Social Buttons for Bootstrap\n *\n * Copyright 2013-2015 Panayiotis Lipiridis\n * Licensed under the MIT License\n *\n * https://github.com/lipis/bootstrap-social\n */\n.btn-social {\n  position: relative;\n  padding-left: 44px;\n  text-align: left;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.btn-social > :first-child {\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: 32px;\n  line-height: 34px;\n  font-size: 1.6em;\n  text-align: center;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n}\n.btn-social.btn-lg {\n  padding-left: 61px;\n}\n.btn-social.btn-lg > :first-child {\n  line-height: 45px;\n  width: 45px;\n  font-size: 1.8em;\n}\n.btn-social.btn-sm {\n  padding-left: 38px;\n}\n.btn-social.btn-sm > :first-child {\n  line-height: 28px;\n  width: 28px;\n  font-size: 1.4em;\n}\n.btn-social.btn-xs {\n  padding-left: 30px;\n}\n.btn-social.btn-xs > :first-child {\n  line-height: 20px;\n  width: 20px;\n  font-size: 1.2em;\n}\n.btn-social-icon {\n  position: relative;\n  padding-left: 44px;\n  text-align: left;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  height: 34px;\n  width: 34px;\n  padding: 0;\n}\n.btn-social-icon > :first-child {\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: 32px;\n  line-height: 34px;\n  font-size: 1.6em;\n  text-align: center;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n}\n.btn-social-icon.btn-lg {\n  padding-left: 61px;\n}\n.btn-social-icon.btn-lg > :first-child {\n  line-height: 45px;\n  width: 45px;\n  font-size: 1.8em;\n}\n.btn-social-icon.btn-sm {\n  padding-left: 38px;\n}\n.btn-social-icon.btn-sm > :first-child {\n  line-height: 28px;\n  width: 28px;\n  font-size: 1.4em;\n}\n.btn-social-icon.btn-xs {\n  padding-left: 30px;\n}\n.btn-social-icon.btn-xs > :first-child {\n  line-height: 20px;\n  width: 20px;\n  font-size: 1.2em;\n}\n.btn-social-icon > :first-child {\n  border: none;\n  text-align: center;\n  width: 100%;\n}\n.btn-social-icon.btn-lg {\n  height: 45px;\n  width: 45px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-social-icon.btn-sm {\n  height: 30px;\n  width: 30px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-social-icon.btn-xs {\n  height: 22px;\n  width: 22px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-adn {\n  color: #ffffff;\n  background-color: #d87a68;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:focus,\n.btn-adn.focus {\n  color: #ffffff;\n  background-color: #ce563f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:hover {\n  color: #ffffff;\n  background-color: #ce563f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:active,\n.btn-adn.active,\n.open > .dropdown-toggle.btn-adn {\n  color: #ffffff;\n  background-color: #ce563f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:active,\n.btn-adn.active,\n.open > .dropdown-toggle.btn-adn {\n  background-image: none;\n}\n.btn-adn .badge {\n  color: #d87a68;\n  background-color: #ffffff;\n}\n.btn-bitbucket {\n  color: #ffffff;\n  background-color: #205081;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:focus,\n.btn-bitbucket.focus {\n  color: #ffffff;\n  background-color: #163758;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:hover {\n  color: #ffffff;\n  background-color: #163758;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:active,\n.btn-bitbucket.active,\n.open > .dropdown-toggle.btn-bitbucket {\n  color: #ffffff;\n  background-color: #163758;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:active,\n.btn-bitbucket.active,\n.open > .dropdown-toggle.btn-bitbucket {\n  background-image: none;\n}\n.btn-bitbucket .badge {\n  color: #205081;\n  background-color: #ffffff;\n}\n.btn-dropbox {\n  color: #ffffff;\n  background-color: #1087dd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:focus,\n.btn-dropbox.focus {\n  color: #ffffff;\n  background-color: #0d6aad;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:hover {\n  color: #ffffff;\n  background-color: #0d6aad;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:active,\n.btn-dropbox.active,\n.open > .dropdown-toggle.btn-dropbox {\n  color: #ffffff;\n  background-color: #0d6aad;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:active,\n.btn-dropbox.active,\n.open > .dropdown-toggle.btn-dropbox {\n  background-image: none;\n}\n.btn-dropbox .badge {\n  color: #1087dd;\n  background-color: #ffffff;\n}\n.btn-facebook {\n  color: #ffffff;\n  background-color: #3b5998;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:focus,\n.btn-facebook.focus {\n  color: #ffffff;\n  background-color: #2d4373;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:hover {\n  color: #ffffff;\n  background-color: #2d4373;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:active,\n.btn-facebook.active,\n.open > .dropdown-toggle.btn-facebook {\n  color: #ffffff;\n  background-color: #2d4373;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:active,\n.btn-facebook.active,\n.open > .dropdown-toggle.btn-facebook {\n  background-image: none;\n}\n.btn-facebook .badge {\n  color: #3b5998;\n  background-color: #ffffff;\n}\n.btn-flickr {\n  color: #ffffff;\n  background-color: #ff0084;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:focus,\n.btn-flickr.focus {\n  color: #ffffff;\n  background-color: #cc006a;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:hover {\n  color: #ffffff;\n  background-color: #cc006a;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:active,\n.btn-flickr.active,\n.open > .dropdown-toggle.btn-flickr {\n  color: #ffffff;\n  background-color: #cc006a;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:active,\n.btn-flickr.active,\n.open > .dropdown-toggle.btn-flickr {\n  background-image: none;\n}\n.btn-flickr .badge {\n  color: #ff0084;\n  background-color: #ffffff;\n}\n.btn-foursquare {\n  color: #ffffff;\n  background-color: #f94877;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:focus,\n.btn-foursquare.focus {\n  color: #ffffff;\n  background-color: #f71752;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:hover {\n  color: #ffffff;\n  background-color: #f71752;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:active,\n.btn-foursquare.active,\n.open > .dropdown-toggle.btn-foursquare {\n  color: #ffffff;\n  background-color: #f71752;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:active,\n.btn-foursquare.active,\n.open > .dropdown-toggle.btn-foursquare {\n  background-image: none;\n}\n.btn-foursquare .badge {\n  color: #f94877;\n  background-color: #ffffff;\n}\n.btn-github {\n  color: #ffffff;\n  background-color: #444444;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:focus,\n.btn-github.focus {\n  color: #ffffff;\n  background-color: #2b2b2b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:hover {\n  color: #ffffff;\n  background-color: #2b2b2b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:active,\n.btn-github.active,\n.open > .dropdown-toggle.btn-github {\n  color: #ffffff;\n  background-color: #2b2b2b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:active,\n.btn-github.active,\n.open > .dropdown-toggle.btn-github {\n  background-image: none;\n}\n.btn-github .badge {\n  color: #444444;\n  background-color: #ffffff;\n}\n.btn-google {\n  color: #ffffff;\n  background-color: #dd4b39;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:focus,\n.btn-google.focus {\n  color: #ffffff;\n  background-color: #c23321;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:hover {\n  color: #ffffff;\n  background-color: #c23321;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:active,\n.btn-google.active,\n.open > .dropdown-toggle.btn-google {\n  color: #ffffff;\n  background-color: #c23321;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:active,\n.btn-google.active,\n.open > .dropdown-toggle.btn-google {\n  background-image: none;\n}\n.btn-google .badge {\n  color: #dd4b39;\n  background-color: #ffffff;\n}\n.btn-instagram {\n  color: #ffffff;\n  background-color: #3f729b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:focus,\n.btn-instagram.focus {\n  color: #ffffff;\n  background-color: #305777;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:hover {\n  color: #ffffff;\n  background-color: #305777;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:active,\n.btn-instagram.active,\n.open > .dropdown-toggle.btn-instagram {\n  color: #ffffff;\n  background-color: #305777;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:active,\n.btn-instagram.active,\n.open > .dropdown-toggle.btn-instagram {\n  background-image: none;\n}\n.btn-instagram .badge {\n  color: #3f729b;\n  background-color: #ffffff;\n}\n.btn-linkedin {\n  color: #ffffff;\n  background-color: #007bb6;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:focus,\n.btn-linkedin.focus {\n  color: #ffffff;\n  background-color: #005983;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:hover {\n  color: #ffffff;\n  background-color: #005983;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:active,\n.btn-linkedin.active,\n.open > .dropdown-toggle.btn-linkedin {\n  color: #ffffff;\n  background-color: #005983;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:active,\n.btn-linkedin.active,\n.open > .dropdown-toggle.btn-linkedin {\n  background-image: none;\n}\n.btn-linkedin .badge {\n  color: #007bb6;\n  background-color: #ffffff;\n}\n.btn-microsoft {\n  color: #ffffff;\n  background-color: #2672ec;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:focus,\n.btn-microsoft.focus {\n  color: #ffffff;\n  background-color: #125acd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:hover {\n  color: #ffffff;\n  background-color: #125acd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:active,\n.btn-microsoft.active,\n.open > .dropdown-toggle.btn-microsoft {\n  color: #ffffff;\n  background-color: #125acd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:active,\n.btn-microsoft.active,\n.open > .dropdown-toggle.btn-microsoft {\n  background-image: none;\n}\n.btn-microsoft .badge {\n  color: #2672ec;\n  background-color: #ffffff;\n}\n.btn-openid {\n  color: #ffffff;\n  background-color: #f7931e;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:focus,\n.btn-openid.focus {\n  color: #ffffff;\n  background-color: #da7908;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:hover {\n  color: #ffffff;\n  background-color: #da7908;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:active,\n.btn-openid.active,\n.open > .dropdown-toggle.btn-openid {\n  color: #ffffff;\n  background-color: #da7908;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:active,\n.btn-openid.active,\n.open > .dropdown-toggle.btn-openid {\n  background-image: none;\n}\n.btn-openid .badge {\n  color: #f7931e;\n  background-color: #ffffff;\n}\n.btn-pinterest {\n  color: #ffffff;\n  background-color: #cb2027;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:focus,\n.btn-pinterest.focus {\n  color: #ffffff;\n  background-color: #9f191f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:hover {\n  color: #ffffff;\n  background-color: #9f191f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:active,\n.btn-pinterest.active,\n.open > .dropdown-toggle.btn-pinterest {\n  color: #ffffff;\n  background-color: #9f191f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:active,\n.btn-pinterest.active,\n.open > .dropdown-toggle.btn-pinterest {\n  background-image: none;\n}\n.btn-pinterest .badge {\n  color: #cb2027;\n  background-color: #ffffff;\n}\n.btn-reddit {\n  color: #000000;\n  background-color: #eff7ff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:focus,\n.btn-reddit.focus {\n  color: #000000;\n  background-color: #bcddff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:hover {\n  color: #000000;\n  background-color: #bcddff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:active,\n.btn-reddit.active,\n.open > .dropdown-toggle.btn-reddit {\n  color: #000000;\n  background-color: #bcddff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:active,\n.btn-reddit.active,\n.open > .dropdown-toggle.btn-reddit {\n  background-image: none;\n}\n.btn-reddit .badge {\n  color: #eff7ff;\n  background-color: #000000;\n}\n.btn-soundcloud {\n  color: #ffffff;\n  background-color: #ff5500;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:focus,\n.btn-soundcloud.focus {\n  color: #ffffff;\n  background-color: #cc4400;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:hover {\n  color: #ffffff;\n  background-color: #cc4400;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:active,\n.btn-soundcloud.active,\n.open > .dropdown-toggle.btn-soundcloud {\n  color: #ffffff;\n  background-color: #cc4400;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:active,\n.btn-soundcloud.active,\n.open > .dropdown-toggle.btn-soundcloud {\n  background-image: none;\n}\n.btn-soundcloud .badge {\n  color: #ff5500;\n  background-color: #ffffff;\n}\n.btn-tumblr {\n  color: #ffffff;\n  background-color: #2c4762;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:focus,\n.btn-tumblr.focus {\n  color: #ffffff;\n  background-color: #1c2d3f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:hover {\n  color: #ffffff;\n  background-color: #1c2d3f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:active,\n.btn-tumblr.active,\n.open > .dropdown-toggle.btn-tumblr {\n  color: #ffffff;\n  background-color: #1c2d3f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:active,\n.btn-tumblr.active,\n.open > .dropdown-toggle.btn-tumblr {\n  background-image: none;\n}\n.btn-tumblr .badge {\n  color: #2c4762;\n  background-color: #ffffff;\n}\n.btn-twitter {\n  color: #ffffff;\n  background-color: #55acee;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:focus,\n.btn-twitter.focus {\n  color: #ffffff;\n  background-color: #2795e9;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:hover {\n  color: #ffffff;\n  background-color: #2795e9;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:active,\n.btn-twitter.active,\n.open > .dropdown-toggle.btn-twitter {\n  color: #ffffff;\n  background-color: #2795e9;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:active,\n.btn-twitter.active,\n.open > .dropdown-toggle.btn-twitter {\n  background-image: none;\n}\n.btn-twitter .badge {\n  color: #55acee;\n  background-color: #ffffff;\n}\n.btn-vimeo {\n  color: #ffffff;\n  background-color: #1ab7ea;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:focus,\n.btn-vimeo.focus {\n  color: #ffffff;\n  background-color: #1295bf;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:hover {\n  color: #ffffff;\n  background-color: #1295bf;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:active,\n.btn-vimeo.active,\n.open > .dropdown-toggle.btn-vimeo {\n  color: #ffffff;\n  background-color: #1295bf;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:active,\n.btn-vimeo.active,\n.open > .dropdown-toggle.btn-vimeo {\n  background-image: none;\n}\n.btn-vimeo .badge {\n  color: #1ab7ea;\n  background-color: #ffffff;\n}\n.btn-vk {\n  color: #ffffff;\n  background-color: #587ea3;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:focus,\n.btn-vk.focus {\n  color: #ffffff;\n  background-color: #466482;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:hover {\n  color: #ffffff;\n  background-color: #466482;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:active,\n.btn-vk.active,\n.open > .dropdown-toggle.btn-vk {\n  color: #ffffff;\n  background-color: #466482;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:active,\n.btn-vk.active,\n.open > .dropdown-toggle.btn-vk {\n  background-image: none;\n}\n.btn-vk .badge {\n  color: #587ea3;\n  background-color: #ffffff;\n}\n.btn-yahoo {\n  color: #ffffff;\n  background-color: #720e9e;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:focus,\n.btn-yahoo.focus {\n  color: #ffffff;\n  background-color: #500a6f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:hover {\n  color: #ffffff;\n  background-color: #500a6f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:active,\n.btn-yahoo.active,\n.open > .dropdown-toggle.btn-yahoo {\n  color: #ffffff;\n  background-color: #500a6f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:active,\n.btn-yahoo.active,\n.open > .dropdown-toggle.btn-yahoo {\n  background-image: none;\n}\n.btn-yahoo .badge {\n  color: #720e9e;\n  background-color: #ffffff;\n}\n"
  },
  {
    "path": "public/adminlte/css/alt/AdminLTE-fullcalendar.css",
    "content": "/*\n * Plugin: Full Calendar\n * ---------------------\n */\n.fc-button {\n  background: #f4f4f4;\n  background-image: none;\n  color: #444;\n  border-color: #ddd;\n  border-bottom-color: #ddd;\n}\n.fc-button:hover,\n.fc-button:active,\n.fc-button.hover {\n  background-color: #e9e9e9;\n}\n.fc-header-title h2 {\n  font-size: 15px;\n  line-height: 1.6em;\n  color: #666;\n  margin-left: 10px;\n}\n.fc-header-right {\n  padding-right: 10px;\n}\n.fc-header-left {\n  padding-left: 10px;\n}\n.fc-widget-header {\n  background: #fafafa;\n}\n.fc-grid {\n  width: 100%;\n  border: 0;\n}\n.fc-widget-header:first-of-type,\n.fc-widget-content:first-of-type {\n  border-left: 0;\n  border-right: 0;\n}\n.fc-widget-header:last-of-type,\n.fc-widget-content:last-of-type {\n  border-right: 0;\n}\n.fc-toolbar {\n  padding: 10px;\n  margin: 0;\n}\n.fc-day-number {\n  font-size: 20px;\n  font-weight: 300;\n  padding-right: 10px;\n}\n.fc-color-picker {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.fc-color-picker > li {\n  float: left;\n  font-size: 30px;\n  margin-right: 5px;\n  line-height: 30px;\n}\n.fc-color-picker > li .fa {\n  -webkit-transition: -webkit-transform linear 0.3s;\n  -moz-transition: -moz-transform linear 0.3s;\n  -o-transition: -o-transform linear 0.3s;\n  transition: transform linear 0.3s;\n}\n.fc-color-picker > li .fa:hover {\n  -webkit-transform: rotate(30deg);\n  -ms-transform: rotate(30deg);\n  -o-transform: rotate(30deg);\n  transform: rotate(30deg);\n}\n#add-new-event {\n  -webkit-transition: all linear 0.3s;\n  -o-transition: all linear 0.3s;\n  transition: all linear 0.3s;\n}\n.external-event {\n  padding: 5px 10px;\n  font-weight: bold;\n  margin-bottom: 4px;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n  cursor: move;\n}\n.external-event:hover {\n  box-shadow: inset 0 0 90px rgba(0, 0, 0, 0.2);\n}\n"
  },
  {
    "path": "public/adminlte/css/alt/AdminLTE-select2.css",
    "content": "/*\n * Plugin: Select2\n * ---------------\n */\n.select2-container--default.select2-container--focus,\n.select2-selection.select2-container--focus,\n.select2-container--default:focus,\n.select2-selection:focus,\n.select2-container--default:active,\n.select2-selection:active {\n  outline: none;\n}\n.select2-container--default .select2-selection--single,\n.select2-selection .select2-selection--single {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n  padding: 6px 12px;\n  height: 34px;\n}\n.select2-container--default.select2-container--open {\n  border-color: #3c8dbc;\n}\n.select2-dropdown {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n}\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n  background-color: #3c8dbc;\n  color: white;\n}\n.select2-results__option {\n  padding: 6px 12px;\n  user-select: none;\n  -webkit-user-select: none;\n}\n.select2-container .select2-selection--single .select2-selection__rendered {\n  padding-left: 0;\n  padding-right: 0;\n  height: auto;\n  margin-top: -4px;\n}\n.select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n  padding-right: 6px;\n  padding-left: 20px;\n}\n.select2-container--default .select2-selection--single .select2-selection__arrow {\n  height: 28px;\n  right: 3px;\n}\n.select2-container--default .select2-selection--single .select2-selection__arrow b {\n  margin-top: 0;\n}\n.select2-dropdown .select2-search__field,\n.select2-search--inline .select2-search__field {\n  border: 1px solid #d2d6de;\n}\n.select2-dropdown .select2-search__field:focus,\n.select2-search--inline .select2-search__field:focus {\n  outline: none;\n  border: 1px solid #3c8dbc;\n}\n.select2-container--default .select2-results__option[aria-disabled=true] {\n  color: #999;\n}\n.select2-container--default .select2-results__option[aria-selected=true] {\n  background-color: #ddd;\n}\n.select2-container--default .select2-results__option[aria-selected=true],\n.select2-container--default .select2-results__option[aria-selected=true]:hover {\n  color: #444;\n}\n.select2-container--default .select2-selection--multiple {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n}\n.select2-container--default .select2-selection--multiple:focus {\n  border-color: #3c8dbc;\n}\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n  border-color: #d2d6de;\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice {\n  background-color: #3c8dbc;\n  border-color: #367fa9;\n  padding: 1px 10px;\n  color: #fff;\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n  margin-right: 5px;\n  color: rgba(255, 255, 255, 0.7);\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {\n  color: #fff;\n}\n.select2-container .select2-selection--single .select2-selection__rendered {\n  padding-right: 10px;\n}\n"
  },
  {
    "path": "public/adminlte/css/alt/AdminLTE-without-plugins.css",
    "content": "@import url(https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic);\n/*!\n *   AdminLTE v2.3.5 Without Third-Party Plugins\n *   Author: Almsaeed Studio\n *\t Website: Almsaeed Studio <http://almsaeedstudio.com>\n *   License: Open source - MIT\n *           Please visit http://opensource.org/licenses/MIT for more information\n!*/\n/*\n * Core: General Layout Style\n * -------------------------\n */\nhtml,\nbody {\n  height: 100%;\n}\n.layout-boxed html,\n.layout-boxed body {\n  height: 100%;\n}\nbody {\n  font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-weight: 400;\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n/* Layout */\n.wrapper {\n  height: 100%;\n  position: relative;\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.wrapper:before,\n.wrapper:after {\n  content: \" \";\n  display: table;\n}\n.wrapper:after {\n  clear: both;\n}\n.layout-boxed .wrapper {\n  max-width: 1250px;\n  margin: 0 auto;\n  min-height: 100%;\n  box-shadow: 0 0 8px rgba(0, 0, 0, 0.5);\n  position: relative;\n}\n.layout-boxed {\n  background: url('../img/boxed-bg.jpg') repeat fixed;\n}\n/*\n * Content Wrapper - contains the main content\n * ```.right-side has been deprecated as of v2.0.0 in favor of .content-wrapper  ```\n */\n.content-wrapper,\n.right-side,\n.main-footer {\n  -webkit-transition: -webkit-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  -moz-transition: -moz-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  -o-transition: -o-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  margin-left: 230px;\n  z-index: 820;\n}\n.layout-top-nav .content-wrapper,\n.layout-top-nav .right-side,\n.layout-top-nav .main-footer {\n  margin-left: 0;\n}\n@media (max-width: 767px) {\n  .content-wrapper,\n  .right-side,\n  .main-footer {\n    margin-left: 0;\n  }\n}\n@media (min-width: 768px) {\n  .sidebar-collapse .content-wrapper,\n  .sidebar-collapse .right-side,\n  .sidebar-collapse .main-footer {\n    margin-left: 0;\n  }\n}\n@media (max-width: 767px) {\n  .sidebar-open .content-wrapper,\n  .sidebar-open .right-side,\n  .sidebar-open .main-footer {\n    -webkit-transform: translate(230px, 0);\n    -ms-transform: translate(230px, 0);\n    -o-transform: translate(230px, 0);\n    transform: translate(230px, 0);\n  }\n}\n.content-wrapper,\n.right-side {\n  min-height: 100%;\n  background-color: #ecf0f5;\n  z-index: 800;\n}\n.main-footer {\n  background: #fff;\n  padding: 15px;\n  color: #444;\n  border-top: 1px solid #d2d6de;\n}\n/* Fixed layout */\n.fixed .main-header,\n.fixed .main-sidebar,\n.fixed .left-side {\n  position: fixed;\n}\n.fixed .main-header {\n  top: 0;\n  right: 0;\n  left: 0;\n}\n.fixed .content-wrapper,\n.fixed .right-side {\n  padding-top: 50px;\n}\n@media (max-width: 767px) {\n  .fixed .content-wrapper,\n  .fixed .right-side {\n    padding-top: 100px;\n  }\n}\n.fixed.layout-boxed .wrapper {\n  max-width: 100%;\n}\nbody.hold-transition .content-wrapper,\nbody.hold-transition .right-side,\nbody.hold-transition .main-footer,\nbody.hold-transition .main-sidebar,\nbody.hold-transition .left-side,\nbody.hold-transition .main-header .navbar,\nbody.hold-transition .main-header .logo {\n  /* Fix for IE */\n  -webkit-transition: none;\n  -o-transition: none;\n  transition: none;\n}\n/* Content */\n.content {\n  min-height: 250px;\n  padding: 15px;\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n/* H1 - H6 font */\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: 'Source Sans Pro', sans-serif;\n}\n/* General Links */\na {\n  color: #3c8dbc;\n}\na:hover,\na:active,\na:focus {\n  outline: none;\n  text-decoration: none;\n  color: #72afd2;\n}\n/* Page Header */\n.page-header {\n  margin: 10px 0 20px 0;\n  font-size: 22px;\n}\n.page-header > small {\n  color: #666;\n  display: block;\n  margin-top: 5px;\n}\n/*\n * Component: Main Header\n * ----------------------\n */\n.main-header {\n  position: relative;\n  max-height: 100px;\n  z-index: 1030;\n}\n.main-header .navbar {\n  -webkit-transition: margin-left 0.3s ease-in-out;\n  -o-transition: margin-left 0.3s ease-in-out;\n  transition: margin-left 0.3s ease-in-out;\n  margin-bottom: 0;\n  margin-left: 230px;\n  border: none;\n  min-height: 50px;\n  border-radius: 0;\n}\n.layout-top-nav .main-header .navbar {\n  margin-left: 0;\n}\n.main-header #navbar-search-input.form-control {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: transparent;\n}\n.main-header #navbar-search-input.form-control:focus,\n.main-header #navbar-search-input.form-control:active {\n  border-color: rgba(0, 0, 0, 0.1);\n  background: rgba(255, 255, 255, 0.9);\n}\n.main-header #navbar-search-input.form-control::-moz-placeholder {\n  color: #ccc;\n  opacity: 1;\n}\n.main-header #navbar-search-input.form-control:-ms-input-placeholder {\n  color: #ccc;\n}\n.main-header #navbar-search-input.form-control::-webkit-input-placeholder {\n  color: #ccc;\n}\n.main-header .navbar-custom-menu,\n.main-header .navbar-right {\n  float: right;\n}\n@media (max-width: 991px) {\n  .main-header .navbar-custom-menu a,\n  .main-header .navbar-right a {\n    color: inherit;\n    background: transparent;\n  }\n}\n@media (max-width: 767px) {\n  .main-header .navbar-right {\n    float: none;\n  }\n  .navbar-collapse .main-header .navbar-right {\n    margin: 7.5px -15px;\n  }\n  .main-header .navbar-right > li {\n    color: inherit;\n    border: 0;\n  }\n}\n.main-header .sidebar-toggle {\n  float: left;\n  background-color: transparent;\n  background-image: none;\n  padding: 15px 15px;\n  font-family: fontAwesome;\n}\n.main-header .sidebar-toggle:before {\n  content: \"\\f0c9\";\n}\n.main-header .sidebar-toggle:hover {\n  color: #fff;\n}\n.main-header .sidebar-toggle:focus,\n.main-header .sidebar-toggle:active {\n  background: transparent;\n}\n.main-header .sidebar-toggle .icon-bar {\n  display: none;\n}\n.main-header .navbar .nav > li.user > a > .fa,\n.main-header .navbar .nav > li.user > a > .glyphicon,\n.main-header .navbar .nav > li.user > a > .ion {\n  margin-right: 5px;\n}\n.main-header .navbar .nav > li > a > .label {\n  position: absolute;\n  top: 9px;\n  right: 7px;\n  text-align: center;\n  font-size: 9px;\n  padding: 2px 3px;\n  line-height: .9;\n}\n.main-header .logo {\n  -webkit-transition: width 0.3s ease-in-out;\n  -o-transition: width 0.3s ease-in-out;\n  transition: width 0.3s ease-in-out;\n  display: block;\n  float: left;\n  height: 50px;\n  font-size: 20px;\n  line-height: 50px;\n  text-align: center;\n  width: 230px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  padding: 0 15px;\n  font-weight: 300;\n  overflow: hidden;\n}\n.main-header .logo .logo-lg {\n  display: block;\n}\n.main-header .logo .logo-mini {\n  display: none;\n}\n.main-header .navbar-brand {\n  color: #fff;\n}\n.content-header {\n  position: relative;\n  padding: 15px 15px 0 15px;\n}\n.content-header > h1 {\n  margin: 0;\n  font-size: 24px;\n}\n.content-header > h1 > small {\n  font-size: 15px;\n  display: inline-block;\n  padding-left: 4px;\n  font-weight: 300;\n}\n.content-header > .breadcrumb {\n  float: right;\n  background: transparent;\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 12px;\n  padding: 7px 5px;\n  position: absolute;\n  top: 15px;\n  right: 10px;\n  border-radius: 2px;\n}\n.content-header > .breadcrumb > li > a {\n  color: #444;\n  text-decoration: none;\n  display: inline-block;\n}\n.content-header > .breadcrumb > li > a > .fa,\n.content-header > .breadcrumb > li > a > .glyphicon,\n.content-header > .breadcrumb > li > a > .ion {\n  margin-right: 5px;\n}\n.content-header > .breadcrumb > li + li:before {\n  content: '>\\00a0';\n}\n@media (max-width: 991px) {\n  .content-header > .breadcrumb {\n    position: relative;\n    margin-top: 5px;\n    top: 0;\n    right: 0;\n    float: none;\n    background: #d2d6de;\n    padding-left: 10px;\n  }\n  .content-header > .breadcrumb li:before {\n    color: #97a0b3;\n  }\n}\n.navbar-toggle {\n  color: #fff;\n  border: 0;\n  margin: 0;\n  padding: 15px 15px;\n}\n@media (max-width: 991px) {\n  .navbar-custom-menu .navbar-nav > li {\n    float: left;\n  }\n  .navbar-custom-menu .navbar-nav {\n    margin: 0;\n    float: left;\n  }\n  .navbar-custom-menu .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n    line-height: 20px;\n  }\n}\n@media (max-width: 767px) {\n  .main-header {\n    position: relative;\n  }\n  .main-header .logo,\n  .main-header .navbar {\n    width: 100%;\n    float: none;\n  }\n  .main-header .navbar {\n    margin: 0;\n  }\n  .main-header .navbar-custom-menu {\n    float: right;\n  }\n}\n@media (max-width: 991px) {\n  .navbar-collapse.pull-left {\n    float: none !important;\n  }\n  .navbar-collapse.pull-left + .navbar-custom-menu {\n    display: block;\n    position: absolute;\n    top: 0;\n    right: 40px;\n  }\n}\n/*\n * Component: Sidebar\n * ------------------\n */\n.main-sidebar,\n.left-side {\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding-top: 50px;\n  min-height: 100%;\n  width: 230px;\n  z-index: 810;\n  -webkit-transition: -webkit-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  -moz-transition: -moz-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  -o-transition: -o-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, width 0.3s ease-in-out;\n}\n@media (max-width: 767px) {\n  .main-sidebar,\n  .left-side {\n    padding-top: 100px;\n  }\n}\n@media (max-width: 767px) {\n  .main-sidebar,\n  .left-side {\n    -webkit-transform: translate(-230px, 0);\n    -ms-transform: translate(-230px, 0);\n    -o-transform: translate(-230px, 0);\n    transform: translate(-230px, 0);\n  }\n}\n@media (min-width: 768px) {\n  .sidebar-collapse .main-sidebar,\n  .sidebar-collapse .left-side {\n    -webkit-transform: translate(-230px, 0);\n    -ms-transform: translate(-230px, 0);\n    -o-transform: translate(-230px, 0);\n    transform: translate(-230px, 0);\n  }\n}\n@media (max-width: 767px) {\n  .sidebar-open .main-sidebar,\n  .sidebar-open .left-side {\n    -webkit-transform: translate(0, 0);\n    -ms-transform: translate(0, 0);\n    -o-transform: translate(0, 0);\n    transform: translate(0, 0);\n  }\n}\n.sidebar {\n  padding-bottom: 10px;\n}\n.sidebar-form input:focus {\n  border-color: transparent;\n}\n.user-panel {\n  position: relative;\n  width: 100%;\n  padding: 10px;\n  overflow: hidden;\n}\n.user-panel:before,\n.user-panel:after {\n  content: \" \";\n  display: table;\n}\n.user-panel:after {\n  clear: both;\n}\n.user-panel > .image > img {\n  width: 100%;\n  max-width: 45px;\n  height: auto;\n}\n.user-panel > .info {\n  padding: 5px 5px 5px 15px;\n  line-height: 1;\n  position: absolute;\n  left: 55px;\n}\n.user-panel > .info > p {\n  font-weight: 600;\n  margin-bottom: 9px;\n}\n.user-panel > .info > a {\n  text-decoration: none;\n  padding-right: 5px;\n  margin-top: 3px;\n  font-size: 11px;\n}\n.user-panel > .info > a > .fa,\n.user-panel > .info > a > .ion,\n.user-panel > .info > a > .glyphicon {\n  margin-right: 3px;\n}\n.sidebar-menu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.sidebar-menu > li {\n  position: relative;\n  margin: 0;\n  padding: 0;\n}\n.sidebar-menu > li > a {\n  padding: 12px 5px 12px 15px;\n  display: block;\n}\n.sidebar-menu > li > a > .fa,\n.sidebar-menu > li > a > .glyphicon,\n.sidebar-menu > li > a > .ion {\n  width: 20px;\n}\n.sidebar-menu > li .label,\n.sidebar-menu > li .badge {\n  margin-right: 5px;\n}\n.sidebar-menu > li .badge {\n  margin-top: 3px;\n}\n.sidebar-menu li.header {\n  padding: 10px 25px 10px 15px;\n  font-size: 12px;\n}\n.sidebar-menu li > a > .fa-angle-left,\n.sidebar-menu li > a > .pull-right-container > .fa-angle-left {\n  width: auto;\n  height: auto;\n  padding: 0;\n  margin-right: 10px;\n}\n.sidebar-menu li > a > .fa-angle-left {\n  position: absolute;\n  top: 50%;\n  right: 10px;\n  margin-top: -8px;\n}\n.sidebar-menu li.active > a > .fa-angle-left,\n.sidebar-menu li.active > a > .pull-right-container > .fa-angle-left {\n  -webkit-transform: rotate(-90deg);\n  -ms-transform: rotate(-90deg);\n  -o-transform: rotate(-90deg);\n  transform: rotate(-90deg);\n}\n.sidebar-menu li.active > .treeview-menu {\n  display: block;\n}\n.sidebar-menu .treeview-menu {\n  display: none;\n  list-style: none;\n  padding: 0;\n  margin: 0;\n  padding-left: 5px;\n}\n.sidebar-menu .treeview-menu .treeview-menu {\n  padding-left: 20px;\n}\n.sidebar-menu .treeview-menu > li {\n  margin: 0;\n}\n.sidebar-menu .treeview-menu > li > a {\n  padding: 5px 5px 5px 15px;\n  display: block;\n  font-size: 14px;\n}\n.sidebar-menu .treeview-menu > li > a > .fa,\n.sidebar-menu .treeview-menu > li > a > .glyphicon,\n.sidebar-menu .treeview-menu > li > a > .ion {\n  width: 20px;\n}\n.sidebar-menu .treeview-menu > li > a > .pull-right-container > .fa-angle-left,\n.sidebar-menu .treeview-menu > li > a > .pull-right-container > .fa-angle-down,\n.sidebar-menu .treeview-menu > li > a > .fa-angle-left,\n.sidebar-menu .treeview-menu > li > a > .fa-angle-down {\n  width: auto;\n}\n/*\n * Component: Sidebar Mini\n */\n@media (min-width: 768px) {\n  .sidebar-mini.sidebar-collapse .content-wrapper,\n  .sidebar-mini.sidebar-collapse .right-side,\n  .sidebar-mini.sidebar-collapse .main-footer {\n    margin-left: 50px !important;\n    z-index: 840;\n  }\n  .sidebar-mini.sidebar-collapse .main-sidebar {\n    -webkit-transform: translate(0, 0);\n    -ms-transform: translate(0, 0);\n    -o-transform: translate(0, 0);\n    transform: translate(0, 0);\n    width: 50px !important;\n    z-index: 850;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li {\n    position: relative;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a {\n    margin-right: 0;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span {\n    border-top-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:not(.treeview) > a > span {\n    border-bottom-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    padding-top: 5px;\n    padding-bottom: 5px;\n    border-bottom-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right),\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu {\n    display: block !important;\n    position: absolute;\n    width: 180px;\n    left: 50px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span {\n    top: 0;\n    margin-left: -3px;\n    padding: 12px 5px 12px 20px;\n    background-color: inherit;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container {\n    position: relative!important;\n    float: right;\n    width: auto!important;\n    left: 180px !important;\n    top: -22px !important;\n    z-index: 900;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container > .label:not(:first-of-type) {\n    display: none;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu {\n    top: 44px;\n    margin-left: 0;\n  }\n  .sidebar-mini.sidebar-collapse .main-sidebar .user-panel > .info,\n  .sidebar-mini.sidebar-collapse .sidebar-form,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > .pull-right,\n  .sidebar-mini.sidebar-collapse .sidebar-menu li.header {\n    display: none !important;\n    -webkit-transform: translateZ(0);\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo {\n    width: 50px;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo > .logo-mini {\n    display: block;\n    margin-left: -15px;\n    margin-right: -15px;\n    font-size: 18px;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo > .logo-lg {\n    display: none;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .navbar {\n    margin-left: 50px;\n  }\n}\n.sidebar-menu,\n.main-sidebar .user-panel,\n.sidebar-menu > li.header {\n  white-space: nowrap;\n  overflow: hidden;\n}\n.sidebar-menu:hover {\n  overflow: visible;\n}\n.sidebar-form,\n.sidebar-menu > li.header {\n  overflow: hidden;\n  text-overflow: clip;\n}\n.sidebar-menu li > a {\n  position: relative;\n}\n.sidebar-menu li > a > .pull-right-container {\n  position: absolute;\n  right: 10px;\n  top: 50%;\n  margin-top: -7px;\n}\n/*\n * Component: Control sidebar. By default, this is the right sidebar.\n */\n.control-sidebar-bg {\n  position: fixed;\n  z-index: 1000;\n  bottom: 0;\n}\n.control-sidebar-bg,\n.control-sidebar {\n  top: 0;\n  right: -230px;\n  width: 230px;\n  -webkit-transition: right 0.3s ease-in-out;\n  -o-transition: right 0.3s ease-in-out;\n  transition: right 0.3s ease-in-out;\n}\n.control-sidebar {\n  position: absolute;\n  padding-top: 50px;\n  z-index: 1010;\n}\n@media (max-width: 768px) {\n  .control-sidebar {\n    padding-top: 100px;\n  }\n}\n.control-sidebar > .tab-content {\n  padding: 10px 15px;\n}\n.control-sidebar.control-sidebar-open,\n.control-sidebar.control-sidebar-open + .control-sidebar-bg {\n  right: 0;\n}\n.control-sidebar-open .control-sidebar-bg,\n.control-sidebar-open .control-sidebar {\n  right: 0;\n}\n@media (min-width: 768px) {\n  .control-sidebar-open .content-wrapper,\n  .control-sidebar-open .right-side,\n  .control-sidebar-open .main-footer {\n    margin-right: 230px;\n  }\n}\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a,\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a:hover,\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a:focus {\n  border-left-width: 0;\n}\n.nav-tabs.control-sidebar-tabs > li > a {\n  border-radius: 0;\n}\n.nav-tabs.control-sidebar-tabs > li > a,\n.nav-tabs.control-sidebar-tabs > li > a:hover {\n  border-top: none;\n  border-right: none;\n  border-left: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n}\n.nav-tabs.control-sidebar-tabs > li > a .icon {\n  font-size: 16px;\n}\n.nav-tabs.control-sidebar-tabs > li.active > a,\n.nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.nav-tabs.control-sidebar-tabs > li.active > a:active {\n  border-top: none;\n  border-right: none;\n  border-bottom: none;\n}\n@media (max-width: 768px) {\n  .nav-tabs.control-sidebar-tabs {\n    display: table;\n  }\n  .nav-tabs.control-sidebar-tabs > li {\n    display: table-cell;\n  }\n}\n.control-sidebar-heading {\n  font-weight: 400;\n  font-size: 16px;\n  padding: 10px 0;\n  margin-bottom: 10px;\n}\n.control-sidebar-subheading {\n  display: block;\n  font-weight: 400;\n  font-size: 14px;\n}\n.control-sidebar-menu {\n  list-style: none;\n  padding: 0;\n  margin: 0 -15px;\n}\n.control-sidebar-menu > li > a {\n  display: block;\n  padding: 10px 15px;\n}\n.control-sidebar-menu > li > a:before,\n.control-sidebar-menu > li > a:after {\n  content: \" \";\n  display: table;\n}\n.control-sidebar-menu > li > a:after {\n  clear: both;\n}\n.control-sidebar-menu > li > a > .control-sidebar-subheading {\n  margin-top: 0;\n}\n.control-sidebar-menu .menu-icon {\n  float: left;\n  width: 35px;\n  height: 35px;\n  border-radius: 50%;\n  text-align: center;\n  line-height: 35px;\n}\n.control-sidebar-menu .menu-info {\n  margin-left: 45px;\n  margin-top: 3px;\n}\n.control-sidebar-menu .menu-info > .control-sidebar-subheading {\n  margin: 0;\n}\n.control-sidebar-menu .menu-info > p {\n  margin: 0;\n  font-size: 11px;\n}\n.control-sidebar-menu .progress {\n  margin: 0;\n}\n.control-sidebar-dark {\n  color: #b8c7ce;\n}\n.control-sidebar-dark,\n.control-sidebar-dark + .control-sidebar-bg {\n  background: #222d32;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs {\n  border-bottom: #1c2529;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a {\n  background: #181f23;\n  color: #b8c7ce;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus {\n  border-left-color: #141a1d;\n  border-bottom-color: #141a1d;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:active {\n  background: #1c2529;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover {\n  color: #fff;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:active {\n  background: #222d32;\n  color: #fff;\n}\n.control-sidebar-dark .control-sidebar-heading,\n.control-sidebar-dark .control-sidebar-subheading {\n  color: #fff;\n}\n.control-sidebar-dark .control-sidebar-menu > li > a:hover {\n  background: #1e282c;\n}\n.control-sidebar-dark .control-sidebar-menu > li > a .menu-info > p {\n  color: #b8c7ce;\n}\n.control-sidebar-light {\n  color: #5e5e5e;\n}\n.control-sidebar-light,\n.control-sidebar-light + .control-sidebar-bg {\n  background: #f9fafc;\n  border-left: 1px solid #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs {\n  border-bottom: #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a {\n  background: #e8ecf4;\n  color: #444444;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus {\n  border-left-color: #d2d6de;\n  border-bottom-color: #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:active {\n  background: #eff1f7;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:active {\n  background: #f9fafc;\n  color: #111;\n}\n.control-sidebar-light .control-sidebar-heading,\n.control-sidebar-light .control-sidebar-subheading {\n  color: #111;\n}\n.control-sidebar-light .control-sidebar-menu {\n  margin-left: -14px;\n}\n.control-sidebar-light .control-sidebar-menu > li > a:hover {\n  background: #f4f4f5;\n}\n.control-sidebar-light .control-sidebar-menu > li > a .menu-info > p {\n  color: #5e5e5e;\n}\n/*\n * Component: Dropdown menus\n * -------------------------\n */\n/*Dropdowns in general*/\n.dropdown-menu {\n  box-shadow: none;\n  border-color: #eee;\n}\n.dropdown-menu > li > a {\n  color: #777;\n}\n.dropdown-menu > li > a > .glyphicon,\n.dropdown-menu > li > a > .fa,\n.dropdown-menu > li > a > .ion {\n  margin-right: 10px;\n}\n.dropdown-menu > li > a:hover {\n  background-color: #e1e3e9;\n  color: #333;\n}\n.dropdown-menu > .divider {\n  background-color: #eee;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu,\n.navbar-nav > .messages-menu > .dropdown-menu,\n.navbar-nav > .tasks-menu > .dropdown-menu {\n  width: 280px;\n  padding: 0 0 0 0;\n  margin: 0;\n  top: 100%;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li,\n.navbar-nav > .messages-menu > .dropdown-menu > li,\n.navbar-nav > .tasks-menu > .dropdown-menu > li {\n  position: relative;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.header,\n.navbar-nav > .messages-menu > .dropdown-menu > li.header,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.header {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  background-color: #ffffff;\n  padding: 7px 10px;\n  border-bottom: 1px solid #f4f4f4;\n  color: #444444;\n  font-size: 14px;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,\n.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n  font-size: 12px;\n  background-color: #fff;\n  padding: 7px 10px;\n  border-bottom: 1px solid #eeeeee;\n  color: #444 !important;\n  text-align: center;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,\n  .navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,\n  .navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a {\n    background: #fff !important;\n    color: #444 !important;\n  }\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a:hover,\n.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a:hover,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a:hover {\n  text-decoration: none;\n  font-weight: normal;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu {\n  max-height: 200px;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  overflow-x: hidden;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a {\n  display: block;\n  white-space: nowrap;\n  /* Prevent text from breaking */\n  border-bottom: 1px solid #f4f4f4;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a:hover,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:hover,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a:hover {\n  background: #f4f4f4;\n  text-decoration: none;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a {\n  color: #444444;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  padding: 10px;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .glyphicon,\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .fa,\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .ion {\n  width: 20px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a {\n  margin: 0;\n  padding: 10px 10px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > div > img {\n  margin: auto 10px auto auto;\n  width: 40px;\n  height: 40px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 {\n  padding: 0;\n  margin: 0 0 0 45px;\n  color: #444444;\n  font-size: 15px;\n  position: relative;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 > small {\n  color: #999999;\n  font-size: 10px;\n  position: absolute;\n  top: 0;\n  right: 0;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > p {\n  margin: 0 0 0 45px;\n  font-size: 12px;\n  color: #888888;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:before,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after {\n  clear: both;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a {\n  padding: 10px;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > h3 {\n  font-size: 14px;\n  padding: 0;\n  margin: 0 0 10px 0;\n  color: #666666;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > .progress {\n  padding: 0;\n  margin: 0;\n}\n.navbar-nav > .user-menu > .dropdown-menu {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n  padding: 1px 0 0 0;\n  border-top-width: 0;\n  width: 280px;\n}\n.navbar-nav > .user-menu > .dropdown-menu,\n.navbar-nav > .user-menu > .dropdown-menu > .user-body {\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header {\n  height: 175px;\n  padding: 10px;\n  text-align: center;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > img {\n  z-index: 5;\n  height: 90px;\n  width: 90px;\n  border: 3px solid;\n  border-color: transparent;\n  border-color: rgba(255, 255, 255, 0.2);\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p {\n  z-index: 5;\n  color: #fff;\n  color: rgba(255, 255, 255, 0.8);\n  font-size: 17px;\n  margin-top: 10px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p > small {\n  display: block;\n  font-size: 12px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body {\n  padding: 15px;\n  border-bottom: 1px solid #f4f4f4;\n  border-top: 1px solid #dddddd;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:before,\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:after {\n  clear: both;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body a {\n  color: #444 !important;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .user-menu > .dropdown-menu > .user-body a {\n    background: #fff !important;\n    color: #444 !important;\n  }\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer {\n  background-color: #f9f9f9;\n  padding: 10px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:before,\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after {\n  clear: both;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default {\n  color: #666666;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default:hover {\n    background-color: #f9f9f9;\n  }\n}\n.navbar-nav > .user-menu .user-image {\n  float: left;\n  width: 25px;\n  height: 25px;\n  border-radius: 50%;\n  margin-right: 10px;\n  margin-top: -2px;\n}\n@media (max-width: 767px) {\n  .navbar-nav > .user-menu .user-image {\n    float: none;\n    margin-right: 0;\n    margin-top: -8px;\n    line-height: 10px;\n  }\n}\n/* Add fade animation to dropdown menus by appending\n the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)*/\n.open:not(.dropup) > .animated-dropdown-menu {\n  backface-visibility: visible !important;\n  -webkit-animation: flipInX 0.7s both;\n  -o-animation: flipInX 0.7s both;\n  animation: flipInX 0.7s both;\n}\n@keyframes flipInX {\n  0% {\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transition-timing-function: ease-in;\n    opacity: 0;\n  }\n  40% {\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transition-timing-function: ease-in;\n  }\n  60% {\n    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n  80% {\n    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n  100% {\n    transform: perspective(400px);\n  }\n}\n@-webkit-keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    -webkit-transition-timing-function: ease-in;\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    -webkit-transition-timing-function: ease-in;\n  }\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n  100% {\n    -webkit-transform: perspective(400px);\n  }\n}\n/* Fix dropdown menu in navbars */\n.navbar-custom-menu > .navbar-nav > li {\n  position: relative;\n}\n.navbar-custom-menu > .navbar-nav > li > .dropdown-menu {\n  position: absolute;\n  right: 0;\n  left: auto;\n}\n@media (max-width: 991px) {\n  .navbar-custom-menu > .navbar-nav {\n    float: right;\n  }\n  .navbar-custom-menu > .navbar-nav > li {\n    position: static;\n  }\n  .navbar-custom-menu > .navbar-nav > li > .dropdown-menu {\n    position: absolute;\n    right: 5%;\n    left: auto;\n    border: 1px solid #ddd;\n    background: #fff;\n  }\n}\n/*\n * Component: Form\n * ---------------\n */\n.form-control {\n  border-radius: 0;\n  box-shadow: none;\n  border-color: #d2d6de;\n}\n.form-control:focus {\n  border-color: #3c8dbc;\n  box-shadow: none;\n}\n.form-control::-moz-placeholder,\n.form-control:-ms-input-placeholder,\n.form-control::-webkit-input-placeholder {\n  color: #bbb;\n  opacity: 1;\n}\n.form-control:not(select) {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n.form-group.has-success label {\n  color: #00a65a;\n}\n.form-group.has-success .form-control,\n.form-group.has-success .input-group-addon {\n  border-color: #00a65a;\n  box-shadow: none;\n}\n.form-group.has-success .help-block {\n  color: #00a65a;\n}\n.form-group.has-warning label {\n  color: #f39c12;\n}\n.form-group.has-warning .form-control,\n.form-group.has-warning .input-group-addon {\n  border-color: #f39c12;\n  box-shadow: none;\n}\n.form-group.has-warning .help-block {\n  color: #f39c12;\n}\n.form-group.has-error label {\n  color: #dd4b39;\n}\n.form-group.has-error .form-control,\n.form-group.has-error .input-group-addon {\n  border-color: #dd4b39;\n  box-shadow: none;\n}\n.form-group.has-error .help-block {\n  color: #dd4b39;\n}\n/* Input group */\n.input-group .input-group-addon {\n  border-radius: 0;\n  border-color: #d2d6de;\n  background-color: #fff;\n}\n/* button groups */\n.btn-group-vertical .btn.btn-flat:first-of-type,\n.btn-group-vertical .btn.btn-flat:last-of-type {\n  border-radius: 0;\n}\n.icheck > label {\n  padding-left: 0;\n}\n/* support Font Awesome icons in form-control */\n.form-control-feedback.fa {\n  line-height: 34px;\n}\n.input-lg + .form-control-feedback.fa,\n.input-group-lg + .form-control-feedback.fa,\n.form-group-lg .form-control + .form-control-feedback.fa {\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback.fa,\n.input-group-sm + .form-control-feedback.fa,\n.form-group-sm .form-control + .form-control-feedback.fa {\n  line-height: 30px;\n}\n/*\n * Component: Progress Bar\n * -----------------------\n */\n.progress,\n.progress > .progress-bar {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.progress,\n.progress > .progress-bar,\n.progress .progress-bar,\n.progress > .progress-bar .progress-bar {\n  border-radius: 1px;\n}\n/* size variation */\n.progress.sm,\n.progress-sm {\n  height: 10px;\n}\n.progress.sm,\n.progress-sm,\n.progress.sm .progress-bar,\n.progress-sm .progress-bar {\n  border-radius: 1px;\n}\n.progress.xs,\n.progress-xs {\n  height: 7px;\n}\n.progress.xs,\n.progress-xs,\n.progress.xs .progress-bar,\n.progress-xs .progress-bar {\n  border-radius: 1px;\n}\n.progress.xxs,\n.progress-xxs {\n  height: 3px;\n}\n.progress.xxs,\n.progress-xxs,\n.progress.xxs .progress-bar,\n.progress-xxs .progress-bar {\n  border-radius: 1px;\n}\n/* Vertical bars */\n.progress.vertical {\n  position: relative;\n  width: 30px;\n  height: 200px;\n  display: inline-block;\n  margin-right: 10px;\n}\n.progress.vertical > .progress-bar {\n  width: 100%;\n  position: absolute;\n  bottom: 0;\n}\n.progress.vertical.sm,\n.progress.vertical.progress-sm {\n  width: 20px;\n}\n.progress.vertical.xs,\n.progress.vertical.progress-xs {\n  width: 10px;\n}\n.progress.vertical.xxs,\n.progress.vertical.progress-xxs {\n  width: 3px;\n}\n.progress-group .progress-text {\n  font-weight: 600;\n}\n.progress-group .progress-number {\n  float: right;\n}\n/* Remove margins from progress bars when put in a table */\n.table tr > td .progress {\n  margin: 0;\n}\n.progress-bar-light-blue,\n.progress-bar-primary {\n  background-color: #3c8dbc;\n}\n.progress-striped .progress-bar-light-blue,\n.progress-striped .progress-bar-primary {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-green,\n.progress-bar-success {\n  background-color: #00a65a;\n}\n.progress-striped .progress-bar-green,\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-aqua,\n.progress-bar-info {\n  background-color: #00c0ef;\n}\n.progress-striped .progress-bar-aqua,\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-yellow,\n.progress-bar-warning {\n  background-color: #f39c12;\n}\n.progress-striped .progress-bar-yellow,\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-red,\n.progress-bar-danger {\n  background-color: #dd4b39;\n}\n.progress-striped .progress-bar-red,\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n/*\n * Component: Small Box\n * --------------------\n */\n.small-box {\n  border-radius: 2px;\n  position: relative;\n  display: block;\n  margin-bottom: 20px;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n.small-box > .inner {\n  padding: 10px;\n}\n.small-box > .small-box-footer {\n  position: relative;\n  text-align: center;\n  padding: 3px 0;\n  color: #fff;\n  color: rgba(255, 255, 255, 0.8);\n  display: block;\n  z-index: 10;\n  background: rgba(0, 0, 0, 0.1);\n  text-decoration: none;\n}\n.small-box > .small-box-footer:hover {\n  color: #fff;\n  background: rgba(0, 0, 0, 0.15);\n}\n.small-box h3 {\n  font-size: 38px;\n  font-weight: bold;\n  margin: 0 0 10px 0;\n  white-space: nowrap;\n  padding: 0;\n}\n.small-box p {\n  font-size: 15px;\n}\n.small-box p > small {\n  display: block;\n  color: #f9f9f9;\n  font-size: 13px;\n  margin-top: 5px;\n}\n.small-box h3,\n.small-box p {\n  z-index: 5;\n}\n.small-box .icon {\n  -webkit-transition: all 0.3s linear;\n  -o-transition: all 0.3s linear;\n  transition: all 0.3s linear;\n  position: absolute;\n  top: -10px;\n  right: 10px;\n  z-index: 0;\n  font-size: 90px;\n  color: rgba(0, 0, 0, 0.15);\n}\n.small-box:hover {\n  text-decoration: none;\n  color: #f9f9f9;\n}\n.small-box:hover .icon {\n  font-size: 95px;\n}\n@media (max-width: 767px) {\n  .small-box {\n    text-align: center;\n  }\n  .small-box .icon {\n    display: none;\n  }\n  .small-box p {\n    font-size: 12px;\n  }\n}\n/*\n * Component: Box\n * --------------\n */\n.box {\n  position: relative;\n  border-radius: 3px;\n  background: #ffffff;\n  border-top: 3px solid #d2d6de;\n  margin-bottom: 20px;\n  width: 100%;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n.box.box-primary {\n  border-top-color: #3c8dbc;\n}\n.box.box-info {\n  border-top-color: #00c0ef;\n}\n.box.box-danger {\n  border-top-color: #dd4b39;\n}\n.box.box-warning {\n  border-top-color: #f39c12;\n}\n.box.box-success {\n  border-top-color: #00a65a;\n}\n.box.box-default {\n  border-top-color: #d2d6de;\n}\n.box.collapsed-box .box-body,\n.box.collapsed-box .box-footer {\n  display: none;\n}\n.box .nav-stacked > li {\n  border-bottom: 1px solid #f4f4f4;\n  margin: 0;\n}\n.box .nav-stacked > li:last-of-type {\n  border-bottom: none;\n}\n.box.height-control .box-body {\n  max-height: 300px;\n  overflow: auto;\n}\n.box .border-right {\n  border-right: 1px solid #f4f4f4;\n}\n.box .border-left {\n  border-left: 1px solid #f4f4f4;\n}\n.box.box-solid {\n  border-top: 0;\n}\n.box.box-solid > .box-header .btn.btn-default {\n  background: transparent;\n}\n.box.box-solid > .box-header .btn:hover,\n.box.box-solid > .box-header a:hover {\n  background: rgba(0, 0, 0, 0.1);\n}\n.box.box-solid.box-default {\n  border: 1px solid #d2d6de;\n}\n.box.box-solid.box-default > .box-header {\n  color: #444444;\n  background: #d2d6de;\n  background-color: #d2d6de;\n}\n.box.box-solid.box-default > .box-header a,\n.box.box-solid.box-default > .box-header .btn {\n  color: #444444;\n}\n.box.box-solid.box-primary {\n  border: 1px solid #3c8dbc;\n}\n.box.box-solid.box-primary > .box-header {\n  color: #ffffff;\n  background: #3c8dbc;\n  background-color: #3c8dbc;\n}\n.box.box-solid.box-primary > .box-header a,\n.box.box-solid.box-primary > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-info {\n  border: 1px solid #00c0ef;\n}\n.box.box-solid.box-info > .box-header {\n  color: #ffffff;\n  background: #00c0ef;\n  background-color: #00c0ef;\n}\n.box.box-solid.box-info > .box-header a,\n.box.box-solid.box-info > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-danger {\n  border: 1px solid #dd4b39;\n}\n.box.box-solid.box-danger > .box-header {\n  color: #ffffff;\n  background: #dd4b39;\n  background-color: #dd4b39;\n}\n.box.box-solid.box-danger > .box-header a,\n.box.box-solid.box-danger > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-warning {\n  border: 1px solid #f39c12;\n}\n.box.box-solid.box-warning > .box-header {\n  color: #ffffff;\n  background: #f39c12;\n  background-color: #f39c12;\n}\n.box.box-solid.box-warning > .box-header a,\n.box.box-solid.box-warning > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-success {\n  border: 1px solid #00a65a;\n}\n.box.box-solid.box-success > .box-header {\n  color: #ffffff;\n  background: #00a65a;\n  background-color: #00a65a;\n}\n.box.box-solid.box-success > .box-header a,\n.box.box-solid.box-success > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid > .box-header > .box-tools .btn {\n  border: 0;\n  box-shadow: none;\n}\n.box.box-solid[class*='bg'] > .box-header {\n  color: #fff;\n}\n.box .box-group > .box {\n  margin-bottom: 5px;\n}\n.box .knob-label {\n  text-align: center;\n  color: #333;\n  font-weight: 100;\n  font-size: 12px;\n  margin-bottom: 0.3em;\n}\n.box > .overlay,\n.overlay-wrapper > .overlay,\n.box > .loading-img,\n.overlay-wrapper > .loading-img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n.box .overlay,\n.overlay-wrapper .overlay {\n  z-index: 50;\n  background: rgba(255, 255, 255, 0.7);\n  border-radius: 3px;\n}\n.box .overlay > .fa,\n.overlay-wrapper .overlay > .fa {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin-left: -15px;\n  margin-top: -15px;\n  color: #000;\n  font-size: 30px;\n}\n.box .overlay.dark,\n.overlay-wrapper .overlay.dark {\n  background: rgba(0, 0, 0, 0.5);\n}\n.box-header:before,\n.box-body:before,\n.box-footer:before,\n.box-header:after,\n.box-body:after,\n.box-footer:after {\n  content: \" \";\n  display: table;\n}\n.box-header:after,\n.box-body:after,\n.box-footer:after {\n  clear: both;\n}\n.box-header {\n  color: #444;\n  display: block;\n  padding: 10px;\n  position: relative;\n}\n.box-header.with-border {\n  border-bottom: 1px solid #f4f4f4;\n}\n.collapsed-box .box-header.with-border {\n  border-bottom: none;\n}\n.box-header > .fa,\n.box-header > .glyphicon,\n.box-header > .ion,\n.box-header .box-title {\n  display: inline-block;\n  font-size: 18px;\n  margin: 0;\n  line-height: 1;\n}\n.box-header > .fa,\n.box-header > .glyphicon,\n.box-header > .ion {\n  margin-right: 5px;\n}\n.box-header > .box-tools {\n  position: absolute;\n  right: 10px;\n  top: 5px;\n}\n.box-header > .box-tools [data-toggle=\"tooltip\"] {\n  position: relative;\n}\n.box-header > .box-tools.pull-right .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.box-header > .box-tools .dropdown-menu > li > a {\n  color: #444!important;\n}\n.btn-box-tool {\n  padding: 5px;\n  font-size: 12px;\n  background: transparent;\n  color: #97a0b3;\n}\n.open .btn-box-tool,\n.btn-box-tool:hover {\n  color: #606c84;\n}\n.btn-box-tool.btn:active {\n  box-shadow: none;\n}\n.box-body {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n  padding: 10px;\n}\n.no-header .box-body {\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.box-body > .table {\n  margin-bottom: 0;\n}\n.box-body .fc {\n  margin-top: 5px;\n}\n.box-body .full-width-chart {\n  margin: -19px;\n}\n.box-body.no-padding .full-width-chart {\n  margin: -9px;\n}\n.box-body .box-pane {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 3px;\n}\n.box-body .box-pane-right {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 0;\n}\n.box-footer {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n  border-top: 1px solid #f4f4f4;\n  padding: 10px;\n  background-color: #ffffff;\n}\n.chart-legend {\n  margin: 10px 0;\n}\n@media (max-width: 991px) {\n  .chart-legend > li {\n    float: left;\n    margin-right: 10px;\n  }\n}\n.box-comments {\n  background: #f7f7f7;\n}\n.box-comments .box-comment {\n  padding: 8px 0;\n  border-bottom: 1px solid #eee;\n}\n.box-comments .box-comment:before,\n.box-comments .box-comment:after {\n  content: \" \";\n  display: table;\n}\n.box-comments .box-comment:after {\n  clear: both;\n}\n.box-comments .box-comment:last-of-type {\n  border-bottom: 0;\n}\n.box-comments .box-comment:first-of-type {\n  padding-top: 0;\n}\n.box-comments .box-comment img {\n  float: left;\n}\n.box-comments .comment-text {\n  margin-left: 40px;\n  color: #555;\n}\n.box-comments .username {\n  color: #444;\n  display: block;\n  font-weight: 600;\n}\n.box-comments .text-muted {\n  font-weight: 400;\n  font-size: 12px;\n}\n/* Widget: TODO LIST */\n.todo-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  overflow: auto;\n}\n.todo-list > li {\n  border-radius: 2px;\n  padding: 10px;\n  background: #f4f4f4;\n  margin-bottom: 2px;\n  border-left: 2px solid #e6e7e8;\n  color: #444;\n}\n.todo-list > li:last-of-type {\n  margin-bottom: 0;\n}\n.todo-list > li > input[type='checkbox'] {\n  margin: 0 10px 0 5px;\n}\n.todo-list > li .text {\n  display: inline-block;\n  margin-left: 5px;\n  font-weight: 600;\n}\n.todo-list > li .label {\n  margin-left: 10px;\n  font-size: 9px;\n}\n.todo-list > li .tools {\n  display: none;\n  float: right;\n  color: #dd4b39;\n}\n.todo-list > li .tools > .fa,\n.todo-list > li .tools > .glyphicon,\n.todo-list > li .tools > .ion {\n  margin-right: 5px;\n  cursor: pointer;\n}\n.todo-list > li:hover .tools {\n  display: inline-block;\n}\n.todo-list > li.done {\n  color: #999;\n}\n.todo-list > li.done .text {\n  text-decoration: line-through;\n  font-weight: 500;\n}\n.todo-list > li.done .label {\n  background: #d2d6de !important;\n}\n.todo-list .danger {\n  border-left-color: #dd4b39;\n}\n.todo-list .warning {\n  border-left-color: #f39c12;\n}\n.todo-list .info {\n  border-left-color: #00c0ef;\n}\n.todo-list .success {\n  border-left-color: #00a65a;\n}\n.todo-list .primary {\n  border-left-color: #3c8dbc;\n}\n.todo-list .handle {\n  display: inline-block;\n  cursor: move;\n  margin: 0 5px;\n}\n/* Chat widget (DEPRECATED - this will be removed in the next major release. Use Direct Chat instead)*/\n.chat {\n  padding: 5px 20px 5px 10px;\n}\n.chat .item {\n  margin-bottom: 10px;\n}\n.chat .item:before,\n.chat .item:after {\n  content: \" \";\n  display: table;\n}\n.chat .item:after {\n  clear: both;\n}\n.chat .item > img {\n  width: 40px;\n  height: 40px;\n  border: 2px solid transparent;\n  border-radius: 50%;\n}\n.chat .item > .online {\n  border: 2px solid #00a65a;\n}\n.chat .item > .offline {\n  border: 2px solid #dd4b39;\n}\n.chat .item > .message {\n  margin-left: 55px;\n  margin-top: -40px;\n}\n.chat .item > .message > .name {\n  display: block;\n  font-weight: 600;\n}\n.chat .item > .attachment {\n  border-radius: 3px;\n  background: #f4f4f4;\n  margin-left: 65px;\n  margin-right: 15px;\n  padding: 10px;\n}\n.chat .item > .attachment > h4 {\n  margin: 0 0 5px 0;\n  font-weight: 600;\n  font-size: 14px;\n}\n.chat .item > .attachment > p,\n.chat .item > .attachment > .filename {\n  font-weight: 600;\n  font-size: 13px;\n  font-style: italic;\n  margin: 0;\n}\n.chat .item > .attachment:before,\n.chat .item > .attachment:after {\n  content: \" \";\n  display: table;\n}\n.chat .item > .attachment:after {\n  clear: both;\n}\n.box-input {\n  max-width: 200px;\n}\n.modal .panel-body {\n  color: #444;\n}\n/*\n * Component: Info Box\n * -------------------\n */\n.info-box {\n  display: block;\n  min-height: 90px;\n  background: #fff;\n  width: 100%;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 2px;\n  margin-bottom: 15px;\n}\n.info-box small {\n  font-size: 14px;\n}\n.info-box .progress {\n  background: rgba(0, 0, 0, 0.2);\n  margin: 5px -10px 5px -10px;\n  height: 2px;\n}\n.info-box .progress,\n.info-box .progress .progress-bar {\n  border-radius: 0;\n}\n.info-box .progress .progress-bar {\n  background: #fff;\n}\n.info-box-icon {\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n  display: block;\n  float: left;\n  height: 90px;\n  width: 90px;\n  text-align: center;\n  font-size: 45px;\n  line-height: 90px;\n  background: rgba(0, 0, 0, 0.2);\n}\n.info-box-icon > img {\n  max-width: 100%;\n}\n.info-box-content {\n  padding: 5px 10px;\n  margin-left: 90px;\n}\n.info-box-number {\n  display: block;\n  font-weight: bold;\n  font-size: 18px;\n}\n.progress-description,\n.info-box-text {\n  display: block;\n  font-size: 14px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.info-box-text {\n  text-transform: uppercase;\n}\n.info-box-more {\n  display: block;\n}\n.progress-description {\n  margin: 0;\n}\n/*\n * Component: Timeline\n * -------------------\n */\n.timeline {\n  position: relative;\n  margin: 0 0 30px 0;\n  padding: 0;\n  list-style: none;\n}\n.timeline:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  width: 4px;\n  background: #ddd;\n  left: 31px;\n  margin: 0;\n  border-radius: 2px;\n}\n.timeline > li {\n  position: relative;\n  margin-right: 10px;\n  margin-bottom: 15px;\n}\n.timeline > li:before,\n.timeline > li:after {\n  content: \" \";\n  display: table;\n}\n.timeline > li:after {\n  clear: both;\n}\n.timeline > li > .timeline-item {\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n  margin-top: 0;\n  background: #fff;\n  color: #444;\n  margin-left: 60px;\n  margin-right: 15px;\n  padding: 0;\n  position: relative;\n}\n.timeline > li > .timeline-item > .time {\n  color: #999;\n  float: right;\n  padding: 10px;\n  font-size: 12px;\n}\n.timeline > li > .timeline-item > .timeline-header {\n  margin: 0;\n  color: #555;\n  border-bottom: 1px solid #f4f4f4;\n  padding: 10px;\n  font-size: 16px;\n  line-height: 1.1;\n}\n.timeline > li > .timeline-item > .timeline-header > a {\n  font-weight: 600;\n}\n.timeline > li > .timeline-item > .timeline-body,\n.timeline > li > .timeline-item > .timeline-footer {\n  padding: 10px;\n}\n.timeline > li > .fa,\n.timeline > li > .glyphicon,\n.timeline > li > .ion {\n  width: 30px;\n  height: 30px;\n  font-size: 15px;\n  line-height: 30px;\n  position: absolute;\n  color: #666;\n  background: #d2d6de;\n  border-radius: 50%;\n  text-align: center;\n  left: 18px;\n  top: 0;\n}\n.timeline > .time-label > span {\n  font-weight: 600;\n  padding: 5px;\n  display: inline-block;\n  background-color: #fff;\n  border-radius: 4px;\n}\n.timeline-inverse > li > .timeline-item {\n  background: #f0f0f0;\n  border: 1px solid #ddd;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.timeline-inverse > li > .timeline-item > .timeline-header {\n  border-bottom-color: #ddd;\n}\n/*\n * Component: Button\n * -----------------\n */\n.btn {\n  border-radius: 3px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: 1px solid transparent;\n}\n.btn.uppercase {\n  text-transform: uppercase;\n}\n.btn.btn-flat {\n  border-radius: 0;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  border-width: 1px;\n}\n.btn:active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn:focus {\n  outline: none;\n}\n.btn.btn-file {\n  position: relative;\n  overflow: hidden;\n}\n.btn.btn-file > input[type='file'] {\n  position: absolute;\n  top: 0;\n  right: 0;\n  min-width: 100%;\n  min-height: 100%;\n  font-size: 100px;\n  text-align: right;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  outline: none;\n  background: white;\n  cursor: inherit;\n  display: block;\n}\n.btn-default {\n  background-color: #f4f4f4;\n  color: #444;\n  border-color: #ddd;\n}\n.btn-default:hover,\n.btn-default:active,\n.btn-default.hover {\n  background-color: #e7e7e7;\n}\n.btn-primary {\n  background-color: #3c8dbc;\n  border-color: #367fa9;\n}\n.btn-primary:hover,\n.btn-primary:active,\n.btn-primary.hover {\n  background-color: #367fa9;\n}\n.btn-success {\n  background-color: #00a65a;\n  border-color: #008d4c;\n}\n.btn-success:hover,\n.btn-success:active,\n.btn-success.hover {\n  background-color: #008d4c;\n}\n.btn-info {\n  background-color: #00c0ef;\n  border-color: #00acd6;\n}\n.btn-info:hover,\n.btn-info:active,\n.btn-info.hover {\n  background-color: #00acd6;\n}\n.btn-danger {\n  background-color: #dd4b39;\n  border-color: #d73925;\n}\n.btn-danger:hover,\n.btn-danger:active,\n.btn-danger.hover {\n  background-color: #d73925;\n}\n.btn-warning {\n  background-color: #f39c12;\n  border-color: #e08e0b;\n}\n.btn-warning:hover,\n.btn-warning:active,\n.btn-warning.hover {\n  background-color: #e08e0b;\n}\n.btn-outline {\n  border: 1px solid #fff;\n  background: transparent;\n  color: #fff;\n}\n.btn-outline:hover,\n.btn-outline:focus,\n.btn-outline:active {\n  color: rgba(255, 255, 255, 0.7);\n  border-color: rgba(255, 255, 255, 0.7);\n}\n.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn[class*='bg-']:hover {\n  -webkit-box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2);\n  box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2);\n}\n.btn-app {\n  border-radius: 3px;\n  position: relative;\n  padding: 15px 5px;\n  margin: 0 0 10px 10px;\n  min-width: 80px;\n  height: 60px;\n  text-align: center;\n  color: #666;\n  border: 1px solid #ddd;\n  background-color: #f4f4f4;\n  font-size: 12px;\n}\n.btn-app > .fa,\n.btn-app > .glyphicon,\n.btn-app > .ion {\n  font-size: 20px;\n  display: block;\n}\n.btn-app:hover {\n  background: #f4f4f4;\n  color: #444;\n  border-color: #aaa;\n}\n.btn-app:active,\n.btn-app:focus {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-app > .badge {\n  position: absolute;\n  top: -3px;\n  right: -10px;\n  font-size: 10px;\n  font-weight: 400;\n}\n/*\n * Component: Callout\n * ------------------\n */\n.callout {\n  border-radius: 3px;\n  margin: 0 0 20px 0;\n  padding: 15px 30px 15px 15px;\n  border-left: 5px solid #eee;\n}\n.callout a {\n  color: #fff;\n  text-decoration: underline;\n}\n.callout a:hover {\n  color: #eee;\n}\n.callout h4 {\n  margin-top: 0;\n  font-weight: 600;\n}\n.callout p:last-child {\n  margin-bottom: 0;\n}\n.callout code,\n.callout .highlight {\n  background-color: #fff;\n}\n.callout.callout-danger {\n  border-color: #c23321;\n}\n.callout.callout-warning {\n  border-color: #c87f0a;\n}\n.callout.callout-info {\n  border-color: #0097bc;\n}\n.callout.callout-success {\n  border-color: #00733e;\n}\n/*\n * Component: alert\n * ----------------\n */\n.alert {\n  border-radius: 3px;\n}\n.alert h4 {\n  font-weight: 600;\n}\n.alert .icon {\n  margin-right: 10px;\n}\n.alert .close {\n  color: #000;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n.alert .close:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.alert a {\n  color: #fff;\n  text-decoration: underline;\n}\n.alert-success {\n  border-color: #008d4c;\n}\n.alert-danger,\n.alert-error {\n  border-color: #d73925;\n}\n.alert-warning {\n  border-color: #e08e0b;\n}\n.alert-info {\n  border-color: #00acd6;\n}\n/*\n * Component: Nav\n * --------------\n */\n.nav > li > a:hover,\n.nav > li > a:active,\n.nav > li > a:focus {\n  color: #444;\n  background: #f7f7f7;\n}\n/* NAV PILLS */\n.nav-pills > li > a {\n  border-radius: 0;\n  border-top: 3px solid transparent;\n  color: #444;\n}\n.nav-pills > li > a > .fa,\n.nav-pills > li > a > .glyphicon,\n.nav-pills > li > a > .ion {\n  margin-right: 5px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  border-top-color: #3c8dbc;\n}\n.nav-pills > li.active > a {\n  font-weight: 600;\n}\n/* NAV STACKED */\n.nav-stacked > li > a {\n  border-radius: 0;\n  border-top: 0;\n  border-left: 3px solid transparent;\n  color: #444;\n}\n.nav-stacked > li.active > a,\n.nav-stacked > li.active > a:hover {\n  background: transparent;\n  color: #444;\n  border-top: 0;\n  border-left-color: #3c8dbc;\n}\n.nav-stacked > li.header {\n  border-bottom: 1px solid #ddd;\n  color: #777;\n  margin-bottom: 10px;\n  padding: 5px 10px;\n  text-transform: uppercase;\n}\n/* NAV TABS */\n.nav-tabs-custom {\n  margin-bottom: 20px;\n  background: #fff;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n}\n.nav-tabs-custom > .nav-tabs {\n  margin: 0;\n  border-bottom-color: #f4f4f4;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.nav-tabs-custom > .nav-tabs > li {\n  border-top: 3px solid transparent;\n  margin-bottom: -2px;\n  margin-right: 5px;\n}\n.nav-tabs-custom > .nav-tabs > li > a {\n  color: #444;\n  border-radius: 0;\n}\n.nav-tabs-custom > .nav-tabs > li > a.text-muted {\n  color: #999;\n}\n.nav-tabs-custom > .nav-tabs > li > a,\n.nav-tabs-custom > .nav-tabs > li > a:hover {\n  background: transparent;\n  margin: 0;\n}\n.nav-tabs-custom > .nav-tabs > li > a:hover {\n  color: #999;\n}\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:hover,\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:focus,\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:active {\n  border-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs > li.active {\n  border-top-color: #3c8dbc;\n}\n.nav-tabs-custom > .nav-tabs > li.active > a,\n.nav-tabs-custom > .nav-tabs > li.active:hover > a {\n  background-color: #fff;\n  color: #444;\n}\n.nav-tabs-custom > .nav-tabs > li.active > a {\n  border-top-color: transparent;\n  border-left-color: #f4f4f4;\n  border-right-color: #f4f4f4;\n}\n.nav-tabs-custom > .nav-tabs > li:first-of-type {\n  margin-left: 0;\n}\n.nav-tabs-custom > .nav-tabs > li:first-of-type.active > a {\n  border-left-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs.pull-right {\n  float: none !important;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li {\n  float: right;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type {\n  margin-right: 0;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type > a {\n  border-left-width: 1px;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type.active > a {\n  border-left-color: #f4f4f4;\n  border-right-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs > li.header {\n  line-height: 35px;\n  padding: 0 10px;\n  font-size: 20px;\n  color: #444;\n}\n.nav-tabs-custom > .nav-tabs > li.header > .fa,\n.nav-tabs-custom > .nav-tabs > li.header > .glyphicon,\n.nav-tabs-custom > .nav-tabs > li.header > .ion {\n  margin-right: 5px;\n}\n.nav-tabs-custom > .tab-content {\n  background: #fff;\n  padding: 10px;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.nav-tabs-custom .dropdown.open > a:active,\n.nav-tabs-custom .dropdown.open > a:focus {\n  background: transparent;\n  color: #999;\n}\n.nav-tabs-custom.tab-primary > .nav-tabs > li.active {\n  border-top-color: #3c8dbc;\n}\n.nav-tabs-custom.tab-info > .nav-tabs > li.active {\n  border-top-color: #00c0ef;\n}\n.nav-tabs-custom.tab-danger > .nav-tabs > li.active {\n  border-top-color: #dd4b39;\n}\n.nav-tabs-custom.tab-warning > .nav-tabs > li.active {\n  border-top-color: #f39c12;\n}\n.nav-tabs-custom.tab-success > .nav-tabs > li.active {\n  border-top-color: #00a65a;\n}\n.nav-tabs-custom.tab-default > .nav-tabs > li.active {\n  border-top-color: #d2d6de;\n}\n/* PAGINATION */\n.pagination > li > a {\n  background: #fafafa;\n  color: #666;\n}\n.pagination.pagination-flat > li > a {\n  border-radius: 0 !important;\n}\n/*\n * Component: Products List\n * ------------------------\n */\n.products-list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.products-list > .item {\n  border-radius: 3px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  padding: 10px 0;\n  background: #fff;\n}\n.products-list > .item:before,\n.products-list > .item:after {\n  content: \" \";\n  display: table;\n}\n.products-list > .item:after {\n  clear: both;\n}\n.products-list .product-img {\n  float: left;\n}\n.products-list .product-img img {\n  width: 50px;\n  height: 50px;\n}\n.products-list .product-info {\n  margin-left: 60px;\n}\n.products-list .product-title {\n  font-weight: 600;\n}\n.products-list .product-description {\n  display: block;\n  color: #999;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.product-list-in-box > .item {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-radius: 0;\n  border-bottom: 1px solid #f4f4f4;\n}\n.product-list-in-box > .item:last-of-type {\n  border-bottom-width: 0;\n}\n/*\n * Component: Table\n * ----------------\n */\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  border-top: 1px solid #f4f4f4;\n}\n.table > thead > tr > th {\n  border-bottom: 2px solid #f4f4f4;\n}\n.table tr td .progress {\n  margin-top: 5px;\n}\n.table-bordered {\n  border: 1px solid #f4f4f4;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #f4f4f4;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table.no-border,\n.table.no-border td,\n.table.no-border th {\n  border: 0;\n}\n/* .text-center in tables */\ntable.text-center,\ntable.text-center td,\ntable.text-center th {\n  text-align: center;\n}\n.table.align th {\n  text-align: left;\n}\n.table.align td {\n  text-align: right;\n}\n/*\n * Component: Label\n * ----------------\n */\n.label-default {\n  background-color: #d2d6de;\n  color: #444;\n}\n/*\n * Component: Direct Chat\n * ----------------------\n */\n.direct-chat .box-body {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  position: relative;\n  overflow-x: hidden;\n  padding: 0;\n}\n.direct-chat.chat-pane-open .direct-chat-contacts {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.direct-chat-messages {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n  padding: 10px;\n  height: 250px;\n  overflow: auto;\n}\n.direct-chat-msg,\n.direct-chat-text {\n  display: block;\n}\n.direct-chat-msg {\n  margin-bottom: 10px;\n}\n.direct-chat-msg:before,\n.direct-chat-msg:after {\n  content: \" \";\n  display: table;\n}\n.direct-chat-msg:after {\n  clear: both;\n}\n.direct-chat-messages,\n.direct-chat-contacts {\n  -webkit-transition: -webkit-transform 0.5s ease-in-out;\n  -moz-transition: -moz-transform 0.5s ease-in-out;\n  -o-transition: -o-transform 0.5s ease-in-out;\n  transition: transform 0.5s ease-in-out;\n}\n.direct-chat-text {\n  border-radius: 5px;\n  position: relative;\n  padding: 5px 10px;\n  background: #d2d6de;\n  border: 1px solid #d2d6de;\n  margin: 5px 0 0 50px;\n  color: #444444;\n}\n.direct-chat-text:after,\n.direct-chat-text:before {\n  position: absolute;\n  right: 100%;\n  top: 15px;\n  border: solid transparent;\n  border-right-color: #d2d6de;\n  content: ' ';\n  height: 0;\n  width: 0;\n  pointer-events: none;\n}\n.direct-chat-text:after {\n  border-width: 5px;\n  margin-top: -5px;\n}\n.direct-chat-text:before {\n  border-width: 6px;\n  margin-top: -6px;\n}\n.right .direct-chat-text {\n  margin-right: 50px;\n  margin-left: 0;\n}\n.right .direct-chat-text:after,\n.right .direct-chat-text:before {\n  right: auto;\n  left: 100%;\n  border-right-color: transparent;\n  border-left-color: #d2d6de;\n}\n.direct-chat-img {\n  border-radius: 50%;\n  float: left;\n  width: 40px;\n  height: 40px;\n}\n.right .direct-chat-img {\n  float: right;\n}\n.direct-chat-info {\n  display: block;\n  margin-bottom: 2px;\n  font-size: 12px;\n}\n.direct-chat-name {\n  font-weight: 600;\n}\n.direct-chat-timestamp {\n  color: #999;\n}\n.direct-chat-contacts-open .direct-chat-contacts {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.direct-chat-contacts {\n  -webkit-transform: translate(101%, 0);\n  -ms-transform: translate(101%, 0);\n  -o-transform: translate(101%, 0);\n  transform: translate(101%, 0);\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  height: 250px;\n  width: 100%;\n  background: #222d32;\n  color: #fff;\n  overflow: auto;\n}\n.contacts-list > li {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  padding: 10px;\n  margin: 0;\n}\n.contacts-list > li:before,\n.contacts-list > li:after {\n  content: \" \";\n  display: table;\n}\n.contacts-list > li:after {\n  clear: both;\n}\n.contacts-list > li:last-of-type {\n  border-bottom: none;\n}\n.contacts-list-img {\n  border-radius: 50%;\n  width: 40px;\n  float: left;\n}\n.contacts-list-info {\n  margin-left: 45px;\n  color: #fff;\n}\n.contacts-list-name,\n.contacts-list-status {\n  display: block;\n}\n.contacts-list-name {\n  font-weight: 600;\n}\n.contacts-list-status {\n  font-size: 12px;\n}\n.contacts-list-date {\n  color: #aaa;\n  font-weight: normal;\n}\n.contacts-list-msg {\n  color: #999;\n}\n.direct-chat-danger .right > .direct-chat-text {\n  background: #dd4b39;\n  border-color: #dd4b39;\n  color: #ffffff;\n}\n.direct-chat-danger .right > .direct-chat-text:after,\n.direct-chat-danger .right > .direct-chat-text:before {\n  border-left-color: #dd4b39;\n}\n.direct-chat-primary .right > .direct-chat-text {\n  background: #3c8dbc;\n  border-color: #3c8dbc;\n  color: #ffffff;\n}\n.direct-chat-primary .right > .direct-chat-text:after,\n.direct-chat-primary .right > .direct-chat-text:before {\n  border-left-color: #3c8dbc;\n}\n.direct-chat-warning .right > .direct-chat-text {\n  background: #f39c12;\n  border-color: #f39c12;\n  color: #ffffff;\n}\n.direct-chat-warning .right > .direct-chat-text:after,\n.direct-chat-warning .right > .direct-chat-text:before {\n  border-left-color: #f39c12;\n}\n.direct-chat-info .right > .direct-chat-text {\n  background: #00c0ef;\n  border-color: #00c0ef;\n  color: #ffffff;\n}\n.direct-chat-info .right > .direct-chat-text:after,\n.direct-chat-info .right > .direct-chat-text:before {\n  border-left-color: #00c0ef;\n}\n.direct-chat-success .right > .direct-chat-text {\n  background: #00a65a;\n  border-color: #00a65a;\n  color: #ffffff;\n}\n.direct-chat-success .right > .direct-chat-text:after,\n.direct-chat-success .right > .direct-chat-text:before {\n  border-left-color: #00a65a;\n}\n/*\n * Component: Users List\n * ---------------------\n */\n.users-list > li {\n  width: 25%;\n  float: left;\n  padding: 10px;\n  text-align: center;\n}\n.users-list > li img {\n  border-radius: 50%;\n  max-width: 100%;\n  height: auto;\n}\n.users-list > li > a:hover,\n.users-list > li > a:hover .users-list-name {\n  color: #999;\n}\n.users-list-name,\n.users-list-date {\n  display: block;\n}\n.users-list-name {\n  font-weight: 600;\n  color: #444;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.users-list-date {\n  color: #999;\n  font-size: 12px;\n}\n/*\n * Component: Carousel\n * -------------------\n */\n.carousel-control.left,\n.carousel-control.right {\n  background-image: none;\n}\n.carousel-control > .fa {\n  font-size: 40px;\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -20px;\n}\n/*\n * Component: modal\n * ----------------\n */\n.modal {\n  background: rgba(0, 0, 0, 0.3);\n}\n.modal-content {\n  border-radius: 0;\n  -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  border: 0;\n}\n@media (min-width: 768px) {\n  .modal-content {\n    -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n    box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  }\n}\n.modal-header {\n  border-bottom-color: #f4f4f4;\n}\n.modal-footer {\n  border-top-color: #f4f4f4;\n}\n.modal-primary .modal-header,\n.modal-primary .modal-footer {\n  border-color: #307095;\n}\n.modal-warning .modal-header,\n.modal-warning .modal-footer {\n  border-color: #c87f0a;\n}\n.modal-info .modal-header,\n.modal-info .modal-footer {\n  border-color: #0097bc;\n}\n.modal-success .modal-header,\n.modal-success .modal-footer {\n  border-color: #00733e;\n}\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  border-color: #c23321;\n}\n/*\n * Component: Social Widgets\n * -------------------------\n */\n.box-widget {\n  border: none;\n  position: relative;\n}\n.widget-user .widget-user-header {\n  padding: 20px;\n  height: 120px;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.widget-user .widget-user-username {\n  margin-top: 0;\n  margin-bottom: 5px;\n  font-size: 25px;\n  font-weight: 300;\n  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\n}\n.widget-user .widget-user-desc {\n  margin-top: 0;\n}\n.widget-user .widget-user-image {\n  position: absolute;\n  top: 65px;\n  left: 50%;\n  margin-left: -45px;\n}\n.widget-user .widget-user-image > img {\n  width: 90px;\n  height: auto;\n  border: 3px solid #fff;\n}\n.widget-user .box-footer {\n  padding-top: 30px;\n}\n.widget-user-2 .widget-user-header {\n  padding: 20px;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.widget-user-2 .widget-user-username {\n  margin-top: 5px;\n  margin-bottom: 5px;\n  font-size: 25px;\n  font-weight: 300;\n}\n.widget-user-2 .widget-user-desc {\n  margin-top: 0;\n}\n.widget-user-2 .widget-user-username,\n.widget-user-2 .widget-user-desc {\n  margin-left: 75px;\n}\n.widget-user-2 .widget-user-image > img {\n  width: 65px;\n  height: auto;\n  float: left;\n}\n/*\n * Page: Mailbox\n * -------------\n */\n.mailbox-messages > .table {\n  margin: 0;\n}\n.mailbox-controls {\n  padding: 5px;\n}\n.mailbox-controls.with-border {\n  border-bottom: 1px solid #f4f4f4;\n}\n.mailbox-read-info {\n  border-bottom: 1px solid #f4f4f4;\n  padding: 10px;\n}\n.mailbox-read-info h3 {\n  font-size: 20px;\n  margin: 0;\n}\n.mailbox-read-info h5 {\n  margin: 0;\n  padding: 5px 0 0 0;\n}\n.mailbox-read-time {\n  color: #999;\n  font-size: 13px;\n}\n.mailbox-read-message {\n  padding: 10px;\n}\n.mailbox-attachments li {\n  float: left;\n  width: 200px;\n  border: 1px solid #eee;\n  margin-bottom: 10px;\n  margin-right: 10px;\n}\n.mailbox-attachment-name {\n  font-weight: bold;\n  color: #666;\n}\n.mailbox-attachment-icon,\n.mailbox-attachment-info,\n.mailbox-attachment-size {\n  display: block;\n}\n.mailbox-attachment-info {\n  padding: 10px;\n  background: #f4f4f4;\n}\n.mailbox-attachment-size {\n  color: #999;\n  font-size: 12px;\n}\n.mailbox-attachment-icon {\n  text-align: center;\n  font-size: 65px;\n  color: #666;\n  padding: 20px 10px;\n}\n.mailbox-attachment-icon.has-img {\n  padding: 0;\n}\n.mailbox-attachment-icon.has-img > img {\n  max-width: 100%;\n  height: auto;\n}\n/*\n * Page: Lock Screen\n * -----------------\n */\n/* ADD THIS CLASS TO THE <BODY> TAG */\n.lockscreen {\n  background: #d2d6de;\n}\n.lockscreen-logo {\n  font-size: 35px;\n  text-align: center;\n  margin-bottom: 25px;\n  font-weight: 300;\n}\n.lockscreen-logo a {\n  color: #444;\n}\n.lockscreen-wrapper {\n  max-width: 400px;\n  margin: 0 auto;\n  margin-top: 10%;\n}\n/* User name [optional] */\n.lockscreen .lockscreen-name {\n  text-align: center;\n  font-weight: 600;\n}\n/* Will contain the image and the sign in form */\n.lockscreen-item {\n  border-radius: 4px;\n  padding: 0;\n  background: #fff;\n  position: relative;\n  margin: 10px auto 30px auto;\n  width: 290px;\n}\n/* User image */\n.lockscreen-image {\n  border-radius: 50%;\n  position: absolute;\n  left: -10px;\n  top: -25px;\n  background: #fff;\n  padding: 5px;\n  z-index: 10;\n}\n.lockscreen-image > img {\n  border-radius: 50%;\n  width: 70px;\n  height: 70px;\n}\n/* Contains the password input and the login button */\n.lockscreen-credentials {\n  margin-left: 70px;\n}\n.lockscreen-credentials .form-control {\n  border: 0;\n}\n.lockscreen-credentials .btn {\n  background-color: #fff;\n  border: 0;\n  padding: 0 10px;\n}\n.lockscreen-footer {\n  margin-top: 10px;\n}\n/*\n * Page: Login & Register\n * ----------------------\n */\n.login-logo,\n.register-logo {\n  font-size: 35px;\n  text-align: center;\n  margin-bottom: 25px;\n  font-weight: 300;\n}\n.login-logo a,\n.register-logo a {\n  color: #444;\n}\n.login-page,\n.register-page {\n  background: #d2d6de;\n}\n.login-box,\n.register-box {\n  width: 360px;\n  margin: 7% auto;\n}\n@media (max-width: 768px) {\n  .login-box,\n  .register-box {\n    width: 90%;\n    margin-top: 20px;\n  }\n}\n.login-box-body,\n.register-box-body {\n  background: #fff;\n  padding: 20px;\n  border-top: 0;\n  color: #666;\n}\n.login-box-body .form-control-feedback,\n.register-box-body .form-control-feedback {\n  color: #777;\n}\n.login-box-msg,\n.register-box-msg {\n  margin: 0;\n  text-align: center;\n  padding: 0 20px 20px 20px;\n}\n.social-auth-links {\n  margin: 10px 0;\n}\n/*\n * Page: 400 and 500 error pages\n * ------------------------------\n */\n.error-page {\n  width: 600px;\n  margin: 20px auto 0 auto;\n}\n@media (max-width: 991px) {\n  .error-page {\n    width: 100%;\n  }\n}\n.error-page > .headline {\n  float: left;\n  font-size: 100px;\n  font-weight: 300;\n}\n@media (max-width: 991px) {\n  .error-page > .headline {\n    float: none;\n    text-align: center;\n  }\n}\n.error-page > .error-content {\n  margin-left: 190px;\n  display: block;\n}\n@media (max-width: 991px) {\n  .error-page > .error-content {\n    margin-left: 0;\n  }\n}\n.error-page > .error-content > h3 {\n  font-weight: 300;\n  font-size: 25px;\n}\n@media (max-width: 991px) {\n  .error-page > .error-content > h3 {\n    text-align: center;\n  }\n}\n/*\n * Page: Invoice\n * -------------\n */\n.invoice {\n  position: relative;\n  background: #fff;\n  border: 1px solid #f4f4f4;\n  padding: 20px;\n  margin: 10px 25px;\n}\n.invoice-title {\n  margin-top: 0;\n}\n/*\n * Page: Profile\n * -------------\n */\n.profile-user-img {\n  margin: 0 auto;\n  width: 100px;\n  padding: 3px;\n  border: 3px solid #d2d6de;\n}\n.profile-username {\n  font-size: 21px;\n  margin-top: 5px;\n}\n.post {\n  border-bottom: 1px solid #d2d6de;\n  margin-bottom: 15px;\n  padding-bottom: 15px;\n  color: #666;\n}\n.post:last-of-type {\n  border-bottom: 0;\n  margin-bottom: 0;\n  padding-bottom: 0;\n}\n.post .user-block {\n  margin-bottom: 15px;\n}\n/*\n * General: Miscellaneous\n * ----------------------\n */\n.pad {\n  padding: 10px;\n}\n.margin {\n  margin: 10px;\n}\n.margin-bottom {\n  margin-bottom: 20px;\n}\n.margin-bottom-none {\n  margin-bottom: 0;\n}\n.margin-r-5 {\n  margin-right: 5px;\n}\n.inline {\n  display: inline;\n}\n.description-block {\n  display: block;\n  margin: 10px 0;\n  text-align: center;\n}\n.description-block.margin-bottom {\n  margin-bottom: 25px;\n}\n.description-block > .description-header {\n  margin: 0;\n  padding: 0;\n  font-weight: 600;\n  font-size: 16px;\n}\n.description-block > .description-text {\n  text-transform: uppercase;\n}\n.bg-red,\n.bg-yellow,\n.bg-aqua,\n.bg-blue,\n.bg-light-blue,\n.bg-green,\n.bg-navy,\n.bg-teal,\n.bg-olive,\n.bg-lime,\n.bg-orange,\n.bg-fuchsia,\n.bg-purple,\n.bg-maroon,\n.bg-black,\n.bg-red-active,\n.bg-yellow-active,\n.bg-aqua-active,\n.bg-blue-active,\n.bg-light-blue-active,\n.bg-green-active,\n.bg-navy-active,\n.bg-teal-active,\n.bg-olive-active,\n.bg-lime-active,\n.bg-orange-active,\n.bg-fuchsia-active,\n.bg-purple-active,\n.bg-maroon-active,\n.bg-black-active,\n.callout.callout-danger,\n.callout.callout-warning,\n.callout.callout-info,\n.callout.callout-success,\n.alert-success,\n.alert-danger,\n.alert-error,\n.alert-warning,\n.alert-info,\n.label-danger,\n.label-info,\n.label-warning,\n.label-primary,\n.label-success,\n.modal-primary .modal-body,\n.modal-primary .modal-header,\n.modal-primary .modal-footer,\n.modal-warning .modal-body,\n.modal-warning .modal-header,\n.modal-warning .modal-footer,\n.modal-info .modal-body,\n.modal-info .modal-header,\n.modal-info .modal-footer,\n.modal-success .modal-body,\n.modal-success .modal-header,\n.modal-success .modal-footer,\n.modal-danger .modal-body,\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  color: #fff !important;\n}\n.bg-gray {\n  color: #000;\n  background-color: #d2d6de !important;\n}\n.bg-gray-light {\n  background-color: #f7f7f7;\n}\n.bg-black {\n  background-color: #111111 !important;\n}\n.bg-red,\n.callout.callout-danger,\n.alert-danger,\n.alert-error,\n.label-danger,\n.modal-danger .modal-body {\n  background-color: #dd4b39 !important;\n}\n.bg-yellow,\n.callout.callout-warning,\n.alert-warning,\n.label-warning,\n.modal-warning .modal-body {\n  background-color: #f39c12 !important;\n}\n.bg-aqua,\n.callout.callout-info,\n.alert-info,\n.label-info,\n.modal-info .modal-body {\n  background-color: #00c0ef !important;\n}\n.bg-blue {\n  background-color: #0073b7 !important;\n}\n.bg-light-blue,\n.label-primary,\n.modal-primary .modal-body {\n  background-color: #3c8dbc !important;\n}\n.bg-green,\n.callout.callout-success,\n.alert-success,\n.label-success,\n.modal-success .modal-body {\n  background-color: #00a65a !important;\n}\n.bg-navy {\n  background-color: #001f3f !important;\n}\n.bg-teal {\n  background-color: #39cccc !important;\n}\n.bg-olive {\n  background-color: #3d9970 !important;\n}\n.bg-lime {\n  background-color: #01ff70 !important;\n}\n.bg-orange {\n  background-color: #ff851b !important;\n}\n.bg-fuchsia {\n  background-color: #f012be !important;\n}\n.bg-purple {\n  background-color: #605ca8 !important;\n}\n.bg-maroon {\n  background-color: #d81b60 !important;\n}\n.bg-gray-active {\n  color: #000;\n  background-color: #b5bbc8 !important;\n}\n.bg-black-active {\n  background-color: #000000 !important;\n}\n.bg-red-active,\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  background-color: #d33724 !important;\n}\n.bg-yellow-active,\n.modal-warning .modal-header,\n.modal-warning .modal-footer {\n  background-color: #db8b0b !important;\n}\n.bg-aqua-active,\n.modal-info .modal-header,\n.modal-info .modal-footer {\n  background-color: #00a7d0 !important;\n}\n.bg-blue-active {\n  background-color: #005384 !important;\n}\n.bg-light-blue-active,\n.modal-primary .modal-header,\n.modal-primary .modal-footer {\n  background-color: #357ca5 !important;\n}\n.bg-green-active,\n.modal-success .modal-header,\n.modal-success .modal-footer {\n  background-color: #008d4c !important;\n}\n.bg-navy-active {\n  background-color: #001a35 !important;\n}\n.bg-teal-active {\n  background-color: #30bbbb !important;\n}\n.bg-olive-active {\n  background-color: #368763 !important;\n}\n.bg-lime-active {\n  background-color: #00e765 !important;\n}\n.bg-orange-active {\n  background-color: #ff7701 !important;\n}\n.bg-fuchsia-active {\n  background-color: #db0ead !important;\n}\n.bg-purple-active {\n  background-color: #555299 !important;\n}\n.bg-maroon-active {\n  background-color: #ca195a !important;\n}\n[class^=\"bg-\"].disabled {\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n}\n.text-red {\n  color: #dd4b39 !important;\n}\n.text-yellow {\n  color: #f39c12 !important;\n}\n.text-aqua {\n  color: #00c0ef !important;\n}\n.text-blue {\n  color: #0073b7 !important;\n}\n.text-black {\n  color: #111111 !important;\n}\n.text-light-blue {\n  color: #3c8dbc !important;\n}\n.text-green {\n  color: #00a65a !important;\n}\n.text-gray {\n  color: #d2d6de !important;\n}\n.text-navy {\n  color: #001f3f !important;\n}\n.text-teal {\n  color: #39cccc !important;\n}\n.text-olive {\n  color: #3d9970 !important;\n}\n.text-lime {\n  color: #01ff70 !important;\n}\n.text-orange {\n  color: #ff851b !important;\n}\n.text-fuchsia {\n  color: #f012be !important;\n}\n.text-purple {\n  color: #605ca8 !important;\n}\n.text-maroon {\n  color: #d81b60 !important;\n}\n.link-muted {\n  color: #7a869d;\n}\n.link-muted:hover,\n.link-muted:focus {\n  color: #606c84;\n}\n.link-black {\n  color: #666;\n}\n.link-black:hover,\n.link-black:focus {\n  color: #999;\n}\n.hide {\n  display: none !important;\n}\n.no-border {\n  border: 0 !important;\n}\n.no-padding {\n  padding: 0 !important;\n}\n.no-margin {\n  margin: 0 !important;\n}\n.no-shadow {\n  box-shadow: none !important;\n}\n.list-unstyled,\n.chart-legend,\n.contacts-list,\n.users-list,\n.mailbox-attachments {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.list-group-unbordered > .list-group-item {\n  border-left: 0;\n  border-right: 0;\n  border-radius: 0;\n  padding-left: 0;\n  padding-right: 0;\n}\n.flat {\n  border-radius: 0 !important;\n}\n.text-bold,\n.text-bold.table td,\n.text-bold.table th {\n  font-weight: 700;\n}\n.text-sm {\n  font-size: 12px;\n}\n.jqstooltip {\n  padding: 5px !important;\n  width: auto !important;\n  height: auto !important;\n}\n.bg-teal-gradient {\n  background: #39cccc !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #39cccc), color-stop(1, #7adddd)) !important;\n  background: -ms-linear-gradient(bottom, #39cccc, #7adddd) !important;\n  background: -moz-linear-gradient(center bottom, #39cccc 0%, #7adddd 100%) !important;\n  background: -o-linear-gradient(#7adddd, #39cccc) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important;\n  color: #fff;\n}\n.bg-light-blue-gradient {\n  background: #3c8dbc !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important;\n  background: -ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important;\n  background: -moz-linear-gradient(center bottom, #3c8dbc 0%, #67a8ce 100%) !important;\n  background: -o-linear-gradient(#67a8ce, #3c8dbc) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important;\n  color: #fff;\n}\n.bg-blue-gradient {\n  background: #0073b7 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important;\n  background: -ms-linear-gradient(bottom, #0073b7, #0089db) !important;\n  background: -moz-linear-gradient(center bottom, #0073b7 0%, #0089db 100%) !important;\n  background: -o-linear-gradient(#0089db, #0073b7) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important;\n  color: #fff;\n}\n.bg-aqua-gradient {\n  background: #00c0ef !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important;\n  background: -ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important;\n  background: -moz-linear-gradient(center bottom, #00c0ef 0%, #14d1ff 100%) !important;\n  background: -o-linear-gradient(#14d1ff, #00c0ef) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;\n  color: #fff;\n}\n.bg-yellow-gradient {\n  background: #f39c12 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important;\n  background: -ms-linear-gradient(bottom, #f39c12, #f7bc60) !important;\n  background: -moz-linear-gradient(center bottom, #f39c12 0%, #f7bc60 100%) !important;\n  background: -o-linear-gradient(#f7bc60, #f39c12) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;\n  color: #fff;\n}\n.bg-purple-gradient {\n  background: #605ca8 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important;\n  background: -ms-linear-gradient(bottom, #605ca8, #9491c4) !important;\n  background: -moz-linear-gradient(center bottom, #605ca8 0%, #9491c4 100%) !important;\n  background: -o-linear-gradient(#9491c4, #605ca8) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;\n  color: #fff;\n}\n.bg-green-gradient {\n  background: #00a65a !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important;\n  background: -ms-linear-gradient(bottom, #00a65a, #00ca6d) !important;\n  background: -moz-linear-gradient(center bottom, #00a65a 0%, #00ca6d 100%) !important;\n  background: -o-linear-gradient(#00ca6d, #00a65a) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;\n  color: #fff;\n}\n.bg-red-gradient {\n  background: #dd4b39 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important;\n  background: -ms-linear-gradient(bottom, #dd4b39, #e47365) !important;\n  background: -moz-linear-gradient(center bottom, #dd4b39 0%, #e47365 100%) !important;\n  background: -o-linear-gradient(#e47365, #dd4b39) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;\n  color: #fff;\n}\n.bg-black-gradient {\n  background: #111111 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #111111), color-stop(1, #2b2b2b)) !important;\n  background: -ms-linear-gradient(bottom, #111111, #2b2b2b) !important;\n  background: -moz-linear-gradient(center bottom, #111111 0%, #2b2b2b 100%) !important;\n  background: -o-linear-gradient(#2b2b2b, #111111) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important;\n  color: #fff;\n}\n.bg-maroon-gradient {\n  background: #d81b60 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #d81b60), color-stop(1, #e73f7c)) !important;\n  background: -ms-linear-gradient(bottom, #d81b60, #e73f7c) !important;\n  background: -moz-linear-gradient(center bottom, #d81b60 0%, #e73f7c 100%) !important;\n  background: -o-linear-gradient(#e73f7c, #d81b60) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important;\n  color: #fff;\n}\n.description-block .description-icon {\n  font-size: 16px;\n}\n.no-pad-top {\n  padding-top: 0;\n}\n.position-static {\n  position: static !important;\n}\n.list-header {\n  font-size: 15px;\n  padding: 10px 4px;\n  font-weight: bold;\n  color: #666;\n}\n.list-seperator {\n  height: 1px;\n  background: #f4f4f4;\n  margin: 15px 0 9px 0;\n}\n.list-link > a {\n  padding: 4px;\n  color: #777;\n}\n.list-link > a:hover {\n  color: #222;\n}\n.font-light {\n  font-weight: 300;\n}\n.user-block:before,\n.user-block:after {\n  content: \" \";\n  display: table;\n}\n.user-block:after {\n  clear: both;\n}\n.user-block img {\n  width: 40px;\n  height: 40px;\n  float: left;\n}\n.user-block .username,\n.user-block .description,\n.user-block .comment {\n  display: block;\n  margin-left: 50px;\n}\n.user-block .username {\n  font-size: 16px;\n  font-weight: 600;\n}\n.user-block .description {\n  color: #999;\n  font-size: 13px;\n}\n.user-block.user-block-sm .username,\n.user-block.user-block-sm .description,\n.user-block.user-block-sm .comment {\n  margin-left: 40px;\n}\n.user-block.user-block-sm .username {\n  font-size: 14px;\n}\n.img-sm,\n.img-md,\n.img-lg,\n.box-comments .box-comment img,\n.user-block.user-block-sm img {\n  float: left;\n}\n.img-sm,\n.box-comments .box-comment img,\n.user-block.user-block-sm img {\n  width: 30px !important;\n  height: 30px !important;\n}\n.img-sm + .img-push {\n  margin-left: 40px;\n}\n.img-md {\n  width: 60px;\n  height: 60px;\n}\n.img-md + .img-push {\n  margin-left: 70px;\n}\n.img-lg {\n  width: 100px;\n  height: 100px;\n}\n.img-lg + .img-push {\n  margin-left: 110px;\n}\n.img-bordered {\n  border: 3px solid #d2d6de;\n  padding: 3px;\n}\n.img-bordered-sm {\n  border: 2px solid #d2d6de;\n  padding: 2px;\n}\n.attachment-block {\n  border: 1px solid #f4f4f4;\n  padding: 5px;\n  margin-bottom: 10px;\n  background: #f7f7f7;\n}\n.attachment-block .attachment-img {\n  max-width: 100px;\n  max-height: 100px;\n  height: auto;\n  float: left;\n}\n.attachment-block .attachment-pushed {\n  margin-left: 110px;\n}\n.attachment-block .attachment-heading {\n  margin: 0;\n}\n.attachment-block .attachment-text {\n  color: #555;\n}\n.connectedSortable {\n  min-height: 100px;\n}\n.ui-helper-hidden-accessible {\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n.sort-highlight {\n  background: #f4f4f4;\n  border: 1px dashed #ddd;\n  margin-bottom: 10px;\n}\n.full-opacity-hover {\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n}\n.full-opacity-hover:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.chart {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n}\n.chart svg,\n.chart canvas {\n  width: 100% !important;\n}\n/*\n * Misc: print\n * -----------\n */\n@media print {\n  .no-print,\n  .main-sidebar,\n  .left-side,\n  .main-header,\n  .content-header {\n    display: none !important;\n  }\n  .content-wrapper,\n  .right-side,\n  .main-footer {\n    margin-left: 0 !important;\n    min-height: 0 !important;\n    -webkit-transform: translate(0, 0) !important;\n    -ms-transform: translate(0, 0) !important;\n    -o-transform: translate(0, 0) !important;\n    transform: translate(0, 0) !important;\n  }\n  .fixed .content-wrapper,\n  .fixed .right-side {\n    padding-top: 0 !important;\n  }\n  .invoice {\n    width: 100%;\n    border: 0;\n    margin: 0;\n    padding: 0;\n  }\n  .invoice-col {\n    float: left;\n    width: 33.3333333%;\n  }\n  .table-responsive {\n    overflow: auto;\n  }\n  .table-responsive > .table tr th,\n  .table-responsive > .table tr td {\n    white-space: normal !important;\n  }\n}\n"
  },
  {
    "path": "public/adminlte/css/custom.css",
    "content": "\n#wrapper {\n    position: relative;\n}"
  },
  {
    "path": "public/adminlte/css/skins/_all-skins.css",
    "content": "/*\n * Skin: Blue\n * ----------\n */\n.skin-blue .main-header .navbar {\n  background-color: #3c8dbc;\n}\n.skin-blue .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-blue .main-header .navbar .nav > li > a:hover,\n.skin-blue .main-header .navbar .nav > li > a:active,\n.skin-blue .main-header .navbar .nav > li > a:focus,\n.skin-blue .main-header .navbar .nav .open > a,\n.skin-blue .main-header .navbar .nav .open > a:hover,\n.skin-blue .main-header .navbar .nav .open > a:focus,\n.skin-blue .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-blue .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-blue .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-blue .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-blue .main-header .navbar .sidebar-toggle:hover {\n  background-color: #367fa9;\n}\n@media (max-width: 767px) {\n  .skin-blue .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-blue .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-blue .main-header .navbar .dropdown-menu li a:hover {\n    background: #367fa9;\n  }\n}\n.skin-blue .main-header .logo {\n  background-color: #367fa9;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue .main-header .logo:hover {\n  background-color: #357ca5;\n}\n.skin-blue .main-header li.user-header {\n  background-color: #3c8dbc;\n}\n.skin-blue .content-header {\n  background: transparent;\n}\n.skin-blue .wrapper,\n.skin-blue .main-sidebar,\n.skin-blue .left-side {\n  background-color: #222d32;\n}\n.skin-blue .user-panel > .info,\n.skin-blue .user-panel > .info > a {\n  color: #fff;\n}\n.skin-blue .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-blue .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-blue .sidebar-menu > li:hover > a,\n.skin-blue .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #3c8dbc;\n}\n.skin-blue .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-blue .sidebar a {\n  color: #b8c7ce;\n}\n.skin-blue .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-blue .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-blue .treeview-menu > li.active > a,\n.skin-blue .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-blue .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-blue .sidebar-form input[type=\"text\"],\n.skin-blue .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-blue .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-blue .sidebar-form input[type=\"text\"]:focus,\n.skin-blue .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-blue .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-blue .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n.skin-blue.layout-top-nav .main-header > .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue.layout-top-nav .main-header > .logo:hover {\n  background-color: #3b8ab8;\n}\n/*\n * Skin: Blue\n * ----------\n */\n.skin-blue-light .main-header .navbar {\n  background-color: #3c8dbc;\n}\n.skin-blue-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-blue-light .main-header .navbar .nav > li > a:hover,\n.skin-blue-light .main-header .navbar .nav > li > a:active,\n.skin-blue-light .main-header .navbar .nav > li > a:focus,\n.skin-blue-light .main-header .navbar .nav .open > a,\n.skin-blue-light .main-header .navbar .nav .open > a:hover,\n.skin-blue-light .main-header .navbar .nav .open > a:focus,\n.skin-blue-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #367fa9;\n}\n@media (max-width: 767px) {\n  .skin-blue-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-blue-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-blue-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #367fa9;\n  }\n}\n.skin-blue-light .main-header .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue-light .main-header .logo:hover {\n  background-color: #3b8ab8;\n}\n.skin-blue-light .main-header li.user-header {\n  background-color: #3c8dbc;\n}\n.skin-blue-light .content-header {\n  background: transparent;\n}\n.skin-blue-light .wrapper,\n.skin-blue-light .main-sidebar,\n.skin-blue-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-blue-light .content-wrapper,\n.skin-blue-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-blue-light .user-panel > .info,\n.skin-blue-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-blue-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-blue-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-blue-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-menu > li:hover > a,\n.skin-blue-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-blue-light .sidebar-menu > li.active {\n  border-left-color: #3c8dbc;\n}\n.skin-blue-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-blue-light .sidebar a {\n  color: #444444;\n}\n.skin-blue-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-blue-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-blue-light .treeview-menu > li.active > a,\n.skin-blue-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-blue-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"],\n.skin-blue-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus,\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-blue-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n.skin-blue-light .main-footer {\n  border-top-color: #d2d6de;\n}\n.skin-blue.layout-top-nav .main-header > .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue.layout-top-nav .main-header > .logo:hover {\n  background-color: #3b8ab8;\n}\n/*\n * Skin: Black\n * -----------\n */\n/* skin-black navbar */\n.skin-black .main-header {\n  -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n}\n.skin-black .main-header .navbar-toggle {\n  color: #333;\n}\n.skin-black .main-header .navbar-brand {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header .navbar {\n  background-color: #ffffff;\n}\n.skin-black .main-header .navbar .nav > li > a {\n  color: #333333;\n}\n.skin-black .main-header .navbar .nav > li > a:hover,\n.skin-black .main-header .navbar .nav > li > a:active,\n.skin-black .main-header .navbar .nav > li > a:focus,\n.skin-black .main-header .navbar .nav .open > a,\n.skin-black .main-header .navbar .nav .open > a:hover,\n.skin-black .main-header .navbar .nav .open > a:focus,\n.skin-black .main-header .navbar .nav > .active > a {\n  background: #ffffff;\n  color: #999999;\n}\n.skin-black .main-header .navbar .sidebar-toggle {\n  color: #333333;\n}\n.skin-black .main-header .navbar .sidebar-toggle:hover {\n  color: #999999;\n  background: #ffffff;\n}\n.skin-black .main-header .navbar > .sidebar-toggle {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header .navbar .navbar-nav > li > a {\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav > li > a,\n.skin-black .main-header .navbar .navbar-right > li > a {\n  border-left: 1px solid #eee;\n  border-right-width: 0;\n}\n.skin-black .main-header > .logo {\n  background-color: #ffffff;\n  color: #333333;\n  border-bottom: 0 solid transparent;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header > .logo:hover {\n  background-color: #fcfcfc;\n}\n@media (max-width: 767px) {\n  .skin-black .main-header > .logo {\n    background-color: #222222;\n    color: #ffffff;\n    border-bottom: 0 solid transparent;\n    border-right: none;\n  }\n  .skin-black .main-header > .logo:hover {\n    background-color: #1f1f1f;\n  }\n}\n.skin-black .main-header li.user-header {\n  background-color: #222;\n}\n.skin-black .content-header {\n  background: transparent;\n  box-shadow: none;\n}\n.skin-black .wrapper,\n.skin-black .main-sidebar,\n.skin-black .left-side {\n  background-color: #222d32;\n}\n.skin-black .user-panel > .info,\n.skin-black .user-panel > .info > a {\n  color: #fff;\n}\n.skin-black .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-black .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-black .sidebar-menu > li:hover > a,\n.skin-black .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #ffffff;\n}\n.skin-black .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-black .sidebar a {\n  color: #b8c7ce;\n}\n.skin-black .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-black .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-black .treeview-menu > li.active > a,\n.skin-black .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-black .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-black .sidebar-form input[type=\"text\"],\n.skin-black .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-black .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-black .sidebar-form input[type=\"text\"]:focus,\n.skin-black .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-black .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-black .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n.skin-black .pace .pace-progress {\n  background: #222;\n}\n.skin-black .pace .pace-activity {\n  border-top-color: #222;\n  border-left-color: #222;\n}\n/*\n * Skin: Black\n * -----------\n */\n/* skin-black navbar */\n.skin-black-light .main-header {\n  -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n}\n.skin-black-light .main-header .navbar-toggle {\n  color: #333;\n}\n.skin-black-light .main-header .navbar-brand {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header .navbar {\n  background-color: #ffffff;\n}\n.skin-black-light .main-header .navbar .nav > li > a {\n  color: #333333;\n}\n.skin-black-light .main-header .navbar .nav > li > a:hover,\n.skin-black-light .main-header .navbar .nav > li > a:active,\n.skin-black-light .main-header .navbar .nav > li > a:focus,\n.skin-black-light .main-header .navbar .nav .open > a,\n.skin-black-light .main-header .navbar .nav .open > a:hover,\n.skin-black-light .main-header .navbar .nav .open > a:focus,\n.skin-black-light .main-header .navbar .nav > .active > a {\n  background: #ffffff;\n  color: #999999;\n}\n.skin-black-light .main-header .navbar .sidebar-toggle {\n  color: #333333;\n}\n.skin-black-light .main-header .navbar .sidebar-toggle:hover {\n  color: #999999;\n  background: #ffffff;\n}\n.skin-black-light .main-header .navbar > .sidebar-toggle {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header .navbar .navbar-nav > li > a {\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav > li > a,\n.skin-black-light .main-header .navbar .navbar-right > li > a {\n  border-left: 1px solid #eee;\n  border-right-width: 0;\n}\n.skin-black-light .main-header > .logo {\n  background-color: #ffffff;\n  color: #333333;\n  border-bottom: 0 solid transparent;\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header > .logo:hover {\n  background-color: #fcfcfc;\n}\n@media (max-width: 767px) {\n  .skin-black-light .main-header > .logo {\n    background-color: #222222;\n    color: #ffffff;\n    border-bottom: 0 solid transparent;\n    border-right: none;\n  }\n  .skin-black-light .main-header > .logo:hover {\n    background-color: #1f1f1f;\n  }\n}\n.skin-black-light .main-header li.user-header {\n  background-color: #222;\n}\n.skin-black-light .content-header {\n  background: transparent;\n  box-shadow: none;\n}\n.skin-black-light .wrapper,\n.skin-black-light .main-sidebar,\n.skin-black-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-black-light .content-wrapper,\n.skin-black-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-black-light .user-panel > .info,\n.skin-black-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-black-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-black-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-black-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-black-light .sidebar-menu > li:hover > a,\n.skin-black-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-black-light .sidebar-menu > li.active {\n  border-left-color: #ffffff;\n}\n.skin-black-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-black-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-black-light .sidebar a {\n  color: #444444;\n}\n.skin-black-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-black-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-black-light .treeview-menu > li.active > a,\n.skin-black-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-black-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-black-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-black-light .sidebar-form input[type=\"text\"],\n.skin-black-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-black-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-black-light .sidebar-form input[type=\"text\"]:focus,\n.skin-black-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-black-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-black-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n/*\n * Skin: Green\n * -----------\n */\n.skin-green .main-header .navbar {\n  background-color: #00a65a;\n}\n.skin-green .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-green .main-header .navbar .nav > li > a:hover,\n.skin-green .main-header .navbar .nav > li > a:active,\n.skin-green .main-header .navbar .nav > li > a:focus,\n.skin-green .main-header .navbar .nav .open > a,\n.skin-green .main-header .navbar .nav .open > a:hover,\n.skin-green .main-header .navbar .nav .open > a:focus,\n.skin-green .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-green .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-green .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-green .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-green .main-header .navbar .sidebar-toggle:hover {\n  background-color: #008d4c;\n}\n@media (max-width: 767px) {\n  .skin-green .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-green .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-green .main-header .navbar .dropdown-menu li a:hover {\n    background: #008d4c;\n  }\n}\n.skin-green .main-header .logo {\n  background-color: #008d4c;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-green .main-header .logo:hover {\n  background-color: #008749;\n}\n.skin-green .main-header li.user-header {\n  background-color: #00a65a;\n}\n.skin-green .content-header {\n  background: transparent;\n}\n.skin-green .wrapper,\n.skin-green .main-sidebar,\n.skin-green .left-side {\n  background-color: #222d32;\n}\n.skin-green .user-panel > .info,\n.skin-green .user-panel > .info > a {\n  color: #fff;\n}\n.skin-green .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-green .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-green .sidebar-menu > li:hover > a,\n.skin-green .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #00a65a;\n}\n.skin-green .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-green .sidebar a {\n  color: #b8c7ce;\n}\n.skin-green .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-green .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-green .treeview-menu > li.active > a,\n.skin-green .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-green .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-green .sidebar-form input[type=\"text\"],\n.skin-green .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-green .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-green .sidebar-form input[type=\"text\"]:focus,\n.skin-green .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-green .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-green .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n/*\n * Skin: Green\n * -----------\n */\n.skin-green-light .main-header .navbar {\n  background-color: #00a65a;\n}\n.skin-green-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-green-light .main-header .navbar .nav > li > a:hover,\n.skin-green-light .main-header .navbar .nav > li > a:active,\n.skin-green-light .main-header .navbar .nav > li > a:focus,\n.skin-green-light .main-header .navbar .nav .open > a,\n.skin-green-light .main-header .navbar .nav .open > a:hover,\n.skin-green-light .main-header .navbar .nav .open > a:focus,\n.skin-green-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-green-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #008d4c;\n}\n@media (max-width: 767px) {\n  .skin-green-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-green-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-green-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #008d4c;\n  }\n}\n.skin-green-light .main-header .logo {\n  background-color: #00a65a;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-green-light .main-header .logo:hover {\n  background-color: #00a157;\n}\n.skin-green-light .main-header li.user-header {\n  background-color: #00a65a;\n}\n.skin-green-light .content-header {\n  background: transparent;\n}\n.skin-green-light .wrapper,\n.skin-green-light .main-sidebar,\n.skin-green-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-green-light .content-wrapper,\n.skin-green-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-green-light .user-panel > .info,\n.skin-green-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-green-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-green-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-green-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-green-light .sidebar-menu > li:hover > a,\n.skin-green-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-green-light .sidebar-menu > li.active {\n  border-left-color: #00a65a;\n}\n.skin-green-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-green-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-green-light .sidebar a {\n  color: #444444;\n}\n.skin-green-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-green-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-green-light .treeview-menu > li.active > a,\n.skin-green-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-green-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-green-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-green-light .sidebar-form input[type=\"text\"],\n.skin-green-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-green-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-green-light .sidebar-form input[type=\"text\"]:focus,\n.skin-green-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-green-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-green-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n/*\n * Skin: Red\n * ---------\n */\n.skin-red .main-header .navbar {\n  background-color: #dd4b39;\n}\n.skin-red .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-red .main-header .navbar .nav > li > a:hover,\n.skin-red .main-header .navbar .nav > li > a:active,\n.skin-red .main-header .navbar .nav > li > a:focus,\n.skin-red .main-header .navbar .nav .open > a,\n.skin-red .main-header .navbar .nav .open > a:hover,\n.skin-red .main-header .navbar .nav .open > a:focus,\n.skin-red .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-red .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-red .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-red .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-red .main-header .navbar .sidebar-toggle:hover {\n  background-color: #d73925;\n}\n@media (max-width: 767px) {\n  .skin-red .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-red .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-red .main-header .navbar .dropdown-menu li a:hover {\n    background: #d73925;\n  }\n}\n.skin-red .main-header .logo {\n  background-color: #d73925;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-red .main-header .logo:hover {\n  background-color: #d33724;\n}\n.skin-red .main-header li.user-header {\n  background-color: #dd4b39;\n}\n.skin-red .content-header {\n  background: transparent;\n}\n.skin-red .wrapper,\n.skin-red .main-sidebar,\n.skin-red .left-side {\n  background-color: #222d32;\n}\n.skin-red .user-panel > .info,\n.skin-red .user-panel > .info > a {\n  color: #fff;\n}\n.skin-red .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-red .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-red .sidebar-menu > li:hover > a,\n.skin-red .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #dd4b39;\n}\n.skin-red .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-red .sidebar a {\n  color: #b8c7ce;\n}\n.skin-red .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-red .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-red .treeview-menu > li.active > a,\n.skin-red .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-red .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-red .sidebar-form input[type=\"text\"],\n.skin-red .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-red .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-red .sidebar-form input[type=\"text\"]:focus,\n.skin-red .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-red .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-red .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n/*\n * Skin: Red\n * ---------\n */\n.skin-red-light .main-header .navbar {\n  background-color: #dd4b39;\n}\n.skin-red-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-red-light .main-header .navbar .nav > li > a:hover,\n.skin-red-light .main-header .navbar .nav > li > a:active,\n.skin-red-light .main-header .navbar .nav > li > a:focus,\n.skin-red-light .main-header .navbar .nav .open > a,\n.skin-red-light .main-header .navbar .nav .open > a:hover,\n.skin-red-light .main-header .navbar .nav .open > a:focus,\n.skin-red-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-red-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #d73925;\n}\n@media (max-width: 767px) {\n  .skin-red-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-red-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-red-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #d73925;\n  }\n}\n.skin-red-light .main-header .logo {\n  background-color: #dd4b39;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-red-light .main-header .logo:hover {\n  background-color: #dc4735;\n}\n.skin-red-light .main-header li.user-header {\n  background-color: #dd4b39;\n}\n.skin-red-light .content-header {\n  background: transparent;\n}\n.skin-red-light .wrapper,\n.skin-red-light .main-sidebar,\n.skin-red-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-red-light .content-wrapper,\n.skin-red-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-red-light .user-panel > .info,\n.skin-red-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-red-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-red-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-red-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-red-light .sidebar-menu > li:hover > a,\n.skin-red-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-red-light .sidebar-menu > li.active {\n  border-left-color: #dd4b39;\n}\n.skin-red-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-red-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-red-light .sidebar a {\n  color: #444444;\n}\n.skin-red-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-red-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-red-light .treeview-menu > li.active > a,\n.skin-red-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-red-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-red-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-red-light .sidebar-form input[type=\"text\"],\n.skin-red-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-red-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-red-light .sidebar-form input[type=\"text\"]:focus,\n.skin-red-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-red-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-red-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n/*\n * Skin: Yellow\n * ------------\n */\n.skin-yellow .main-header .navbar {\n  background-color: #f39c12;\n}\n.skin-yellow .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-yellow .main-header .navbar .nav > li > a:hover,\n.skin-yellow .main-header .navbar .nav > li > a:active,\n.skin-yellow .main-header .navbar .nav > li > a:focus,\n.skin-yellow .main-header .navbar .nav .open > a,\n.skin-yellow .main-header .navbar .nav .open > a:hover,\n.skin-yellow .main-header .navbar .nav .open > a:focus,\n.skin-yellow .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-yellow .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle:hover {\n  background-color: #e08e0b;\n}\n@media (max-width: 767px) {\n  .skin-yellow .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-yellow .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-yellow .main-header .navbar .dropdown-menu li a:hover {\n    background: #e08e0b;\n  }\n}\n.skin-yellow .main-header .logo {\n  background-color: #e08e0b;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-yellow .main-header .logo:hover {\n  background-color: #db8b0b;\n}\n.skin-yellow .main-header li.user-header {\n  background-color: #f39c12;\n}\n.skin-yellow .content-header {\n  background: transparent;\n}\n.skin-yellow .wrapper,\n.skin-yellow .main-sidebar,\n.skin-yellow .left-side {\n  background-color: #222d32;\n}\n.skin-yellow .user-panel > .info,\n.skin-yellow .user-panel > .info > a {\n  color: #fff;\n}\n.skin-yellow .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-yellow .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-yellow .sidebar-menu > li:hover > a,\n.skin-yellow .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #f39c12;\n}\n.skin-yellow .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-yellow .sidebar a {\n  color: #b8c7ce;\n}\n.skin-yellow .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-yellow .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-yellow .treeview-menu > li.active > a,\n.skin-yellow .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-yellow .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"],\n.skin-yellow .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"]:focus,\n.skin-yellow .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-yellow .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-yellow .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n/*\n * Skin: Yellow\n * ------------\n */\n.skin-yellow-light .main-header .navbar {\n  background-color: #f39c12;\n}\n.skin-yellow-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-yellow-light .main-header .navbar .nav > li > a:hover,\n.skin-yellow-light .main-header .navbar .nav > li > a:active,\n.skin-yellow-light .main-header .navbar .nav > li > a:focus,\n.skin-yellow-light .main-header .navbar .nav .open > a,\n.skin-yellow-light .main-header .navbar .nav .open > a:hover,\n.skin-yellow-light .main-header .navbar .nav .open > a:focus,\n.skin-yellow-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #e08e0b;\n}\n@media (max-width: 767px) {\n  .skin-yellow-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-yellow-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-yellow-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #e08e0b;\n  }\n}\n.skin-yellow-light .main-header .logo {\n  background-color: #f39c12;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-yellow-light .main-header .logo:hover {\n  background-color: #f39a0d;\n}\n.skin-yellow-light .main-header li.user-header {\n  background-color: #f39c12;\n}\n.skin-yellow-light .content-header {\n  background: transparent;\n}\n.skin-yellow-light .wrapper,\n.skin-yellow-light .main-sidebar,\n.skin-yellow-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-yellow-light .content-wrapper,\n.skin-yellow-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-yellow-light .user-panel > .info,\n.skin-yellow-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-yellow-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-yellow-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-yellow-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-menu > li:hover > a,\n.skin-yellow-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-yellow-light .sidebar-menu > li.active {\n  border-left-color: #f39c12;\n}\n.skin-yellow-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-yellow-light .sidebar a {\n  color: #444444;\n}\n.skin-yellow-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-yellow-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-yellow-light .treeview-menu > li.active > a,\n.skin-yellow-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-yellow-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"],\n.skin-yellow-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus,\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-yellow-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n/*\n * Skin: Purple\n * ------------\n */\n.skin-purple .main-header .navbar {\n  background-color: #605ca8;\n}\n.skin-purple .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-purple .main-header .navbar .nav > li > a:hover,\n.skin-purple .main-header .navbar .nav > li > a:active,\n.skin-purple .main-header .navbar .nav > li > a:focus,\n.skin-purple .main-header .navbar .nav .open > a,\n.skin-purple .main-header .navbar .nav .open > a:hover,\n.skin-purple .main-header .navbar .nav .open > a:focus,\n.skin-purple .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-purple .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-purple .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-purple .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-purple .main-header .navbar .sidebar-toggle:hover {\n  background-color: #555299;\n}\n@media (max-width: 767px) {\n  .skin-purple .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-purple .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-purple .main-header .navbar .dropdown-menu li a:hover {\n    background: #555299;\n  }\n}\n.skin-purple .main-header .logo {\n  background-color: #555299;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-purple .main-header .logo:hover {\n  background-color: #545096;\n}\n.skin-purple .main-header li.user-header {\n  background-color: #605ca8;\n}\n.skin-purple .content-header {\n  background: transparent;\n}\n.skin-purple .wrapper,\n.skin-purple .main-sidebar,\n.skin-purple .left-side {\n  background-color: #222d32;\n}\n.skin-purple .user-panel > .info,\n.skin-purple .user-panel > .info > a {\n  color: #fff;\n}\n.skin-purple .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-purple .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-purple .sidebar-menu > li:hover > a,\n.skin-purple .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #605ca8;\n}\n.skin-purple .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-purple .sidebar a {\n  color: #b8c7ce;\n}\n.skin-purple .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-purple .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-purple .treeview-menu > li.active > a,\n.skin-purple .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-purple .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-purple .sidebar-form input[type=\"text\"],\n.skin-purple .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-purple .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-purple .sidebar-form input[type=\"text\"]:focus,\n.skin-purple .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-purple .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-purple .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n/*\n * Skin: Purple\n * ------------\n */\n.skin-purple-light .main-header .navbar {\n  background-color: #605ca8;\n}\n.skin-purple-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-purple-light .main-header .navbar .nav > li > a:hover,\n.skin-purple-light .main-header .navbar .nav > li > a:active,\n.skin-purple-light .main-header .navbar .nav > li > a:focus,\n.skin-purple-light .main-header .navbar .nav .open > a,\n.skin-purple-light .main-header .navbar .nav .open > a:hover,\n.skin-purple-light .main-header .navbar .nav .open > a:focus,\n.skin-purple-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #555299;\n}\n@media (max-width: 767px) {\n  .skin-purple-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-purple-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-purple-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #555299;\n  }\n}\n.skin-purple-light .main-header .logo {\n  background-color: #605ca8;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-purple-light .main-header .logo:hover {\n  background-color: #5d59a6;\n}\n.skin-purple-light .main-header li.user-header {\n  background-color: #605ca8;\n}\n.skin-purple-light .content-header {\n  background: transparent;\n}\n.skin-purple-light .wrapper,\n.skin-purple-light .main-sidebar,\n.skin-purple-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-purple-light .content-wrapper,\n.skin-purple-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-purple-light .user-panel > .info,\n.skin-purple-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-purple-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-purple-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-purple-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-menu > li:hover > a,\n.skin-purple-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-purple-light .sidebar-menu > li.active {\n  border-left-color: #605ca8;\n}\n.skin-purple-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-purple-light .sidebar a {\n  color: #444444;\n}\n.skin-purple-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-purple-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-purple-light .treeview-menu > li.active > a,\n.skin-purple-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-purple-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"],\n.skin-purple-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus,\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-purple-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n"
  },
  {
    "path": "public/adminlte/css/skins/skin-black-light.css",
    "content": "/*\n * Skin: Black\n * -----------\n */\n/* skin-black navbar */\n.skin-black-light .main-header {\n  -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n}\n.skin-black-light .main-header .navbar-toggle {\n  color: #333;\n}\n.skin-black-light .main-header .navbar-brand {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header .navbar {\n  background-color: #ffffff;\n}\n.skin-black-light .main-header .navbar .nav > li > a {\n  color: #333333;\n}\n.skin-black-light .main-header .navbar .nav > li > a:hover,\n.skin-black-light .main-header .navbar .nav > li > a:active,\n.skin-black-light .main-header .navbar .nav > li > a:focus,\n.skin-black-light .main-header .navbar .nav .open > a,\n.skin-black-light .main-header .navbar .nav .open > a:hover,\n.skin-black-light .main-header .navbar .nav .open > a:focus,\n.skin-black-light .main-header .navbar .nav > .active > a {\n  background: #ffffff;\n  color: #999999;\n}\n.skin-black-light .main-header .navbar .sidebar-toggle {\n  color: #333333;\n}\n.skin-black-light .main-header .navbar .sidebar-toggle:hover {\n  color: #999999;\n  background: #ffffff;\n}\n.skin-black-light .main-header .navbar > .sidebar-toggle {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header .navbar .navbar-nav > li > a {\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav > li > a,\n.skin-black-light .main-header .navbar .navbar-right > li > a {\n  border-left: 1px solid #eee;\n  border-right-width: 0;\n}\n.skin-black-light .main-header > .logo {\n  background-color: #ffffff;\n  color: #333333;\n  border-bottom: 0 solid transparent;\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header > .logo:hover {\n  background-color: #fcfcfc;\n}\n@media (max-width: 767px) {\n  .skin-black-light .main-header > .logo {\n    background-color: #222222;\n    color: #ffffff;\n    border-bottom: 0 solid transparent;\n    border-right: none;\n  }\n  .skin-black-light .main-header > .logo:hover {\n    background-color: #1f1f1f;\n  }\n}\n.skin-black-light .main-header li.user-header {\n  background-color: #222;\n}\n.skin-black-light .content-header {\n  background: transparent;\n  box-shadow: none;\n}\n.skin-black-light .wrapper,\n.skin-black-light .main-sidebar,\n.skin-black-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-black-light .content-wrapper,\n.skin-black-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-black-light .user-panel > .info,\n.skin-black-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-black-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-black-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-black-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-black-light .sidebar-menu > li:hover > a,\n.skin-black-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-black-light .sidebar-menu > li.active {\n  border-left-color: #ffffff;\n}\n.skin-black-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-black-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-black-light .sidebar a {\n  color: #444444;\n}\n.skin-black-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-black-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-black-light .treeview-menu > li.active > a,\n.skin-black-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-black-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-black-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-black-light .sidebar-form input[type=\"text\"],\n.skin-black-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-black-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-black-light .sidebar-form input[type=\"text\"]:focus,\n.skin-black-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-black-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-black-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n"
  },
  {
    "path": "public/adminlte/css/skins/skin-black.css",
    "content": "/*\n * Skin: Black\n * -----------\n */\n/* skin-black navbar */\n.skin-black .main-header {\n  -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n}\n.skin-black .main-header .navbar-toggle {\n  color: #333;\n}\n.skin-black .main-header .navbar-brand {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header .navbar {\n  background-color: #ffffff;\n}\n.skin-black .main-header .navbar .nav > li > a {\n  color: #333333;\n}\n.skin-black .main-header .navbar .nav > li > a:hover,\n.skin-black .main-header .navbar .nav > li > a:active,\n.skin-black .main-header .navbar .nav > li > a:focus,\n.skin-black .main-header .navbar .nav .open > a,\n.skin-black .main-header .navbar .nav .open > a:hover,\n.skin-black .main-header .navbar .nav .open > a:focus,\n.skin-black .main-header .navbar .nav > .active > a {\n  background: #ffffff;\n  color: #999999;\n}\n.skin-black .main-header .navbar .sidebar-toggle {\n  color: #333333;\n}\n.skin-black .main-header .navbar .sidebar-toggle:hover {\n  color: #999999;\n  background: #ffffff;\n}\n.skin-black .main-header .navbar > .sidebar-toggle {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header .navbar .navbar-nav > li > a {\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav > li > a,\n.skin-black .main-header .navbar .navbar-right > li > a {\n  border-left: 1px solid #eee;\n  border-right-width: 0;\n}\n.skin-black .main-header > .logo {\n  background-color: #ffffff;\n  color: #333333;\n  border-bottom: 0 solid transparent;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header > .logo:hover {\n  background-color: #fcfcfc;\n}\n@media (max-width: 767px) {\n  .skin-black .main-header > .logo {\n    background-color: #222222;\n    color: #ffffff;\n    border-bottom: 0 solid transparent;\n    border-right: none;\n  }\n  .skin-black .main-header > .logo:hover {\n    background-color: #1f1f1f;\n  }\n}\n.skin-black .main-header li.user-header {\n  background-color: #222;\n}\n.skin-black .content-header {\n  background: transparent;\n  box-shadow: none;\n}\n.skin-black .wrapper,\n.skin-black .main-sidebar,\n.skin-black .left-side {\n  background-color: #222d32;\n}\n.skin-black .user-panel > .info,\n.skin-black .user-panel > .info > a {\n  color: #fff;\n}\n.skin-black .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-black .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-black .sidebar-menu > li:hover > a,\n.skin-black .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #ffffff;\n}\n.skin-black .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-black .sidebar a {\n  color: #b8c7ce;\n}\n.skin-black .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-black .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-black .treeview-menu > li.active > a,\n.skin-black .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-black .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-black .sidebar-form input[type=\"text\"],\n.skin-black .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-black .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-black .sidebar-form input[type=\"text\"]:focus,\n.skin-black .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-black .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-black .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n.skin-black .pace .pace-progress {\n  background: #222;\n}\n.skin-black .pace .pace-activity {\n  border-top-color: #222;\n  border-left-color: #222;\n}\n"
  },
  {
    "path": "public/adminlte/css/skins/skin-blue-light.css",
    "content": "/*\n * Skin: Blue\n * ----------\n */\n.skin-blue-light .main-header .navbar {\n  background-color: #3c8dbc;\n}\n.skin-blue-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-blue-light .main-header .navbar .nav > li > a:hover,\n.skin-blue-light .main-header .navbar .nav > li > a:active,\n.skin-blue-light .main-header .navbar .nav > li > a:focus,\n.skin-blue-light .main-header .navbar .nav .open > a,\n.skin-blue-light .main-header .navbar .nav .open > a:hover,\n.skin-blue-light .main-header .navbar .nav .open > a:focus,\n.skin-blue-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #367fa9;\n}\n@media (max-width: 767px) {\n  .skin-blue-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-blue-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-blue-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #367fa9;\n  }\n}\n.skin-blue-light .main-header .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue-light .main-header .logo:hover {\n  background-color: #3b8ab8;\n}\n.skin-blue-light .main-header li.user-header {\n  background-color: #3c8dbc;\n}\n.skin-blue-light .content-header {\n  background: transparent;\n}\n.skin-blue-light .wrapper,\n.skin-blue-light .main-sidebar,\n.skin-blue-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-blue-light .content-wrapper,\n.skin-blue-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-blue-light .user-panel > .info,\n.skin-blue-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-blue-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-blue-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-blue-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-menu > li:hover > a,\n.skin-blue-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-blue-light .sidebar-menu > li.active {\n  border-left-color: #3c8dbc;\n}\n.skin-blue-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-blue-light .sidebar a {\n  color: #444444;\n}\n.skin-blue-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-blue-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-blue-light .treeview-menu > li.active > a,\n.skin-blue-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-blue-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"],\n.skin-blue-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus,\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-blue-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n.skin-blue-light .main-footer {\n  border-top-color: #d2d6de;\n}\n.skin-blue.layout-top-nav .main-header > .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue.layout-top-nav .main-header > .logo:hover {\n  background-color: #3b8ab8;\n}\n"
  },
  {
    "path": "public/adminlte/css/skins/skin-blue.css",
    "content": "/*\n * Skin: Blue\n * ----------\n */\n.skin-blue .main-header .navbar {\n  background-color: #3c8dbc;\n}\n.skin-blue .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-blue .main-header .navbar .nav > li > a:hover,\n.skin-blue .main-header .navbar .nav > li > a:active,\n.skin-blue .main-header .navbar .nav > li > a:focus,\n.skin-blue .main-header .navbar .nav .open > a,\n.skin-blue .main-header .navbar .nav .open > a:hover,\n.skin-blue .main-header .navbar .nav .open > a:focus,\n.skin-blue .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-blue .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-blue .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-blue .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-blue .main-header .navbar .sidebar-toggle:hover {\n  background-color: #367fa9;\n}\n@media (max-width: 767px) {\n  .skin-blue .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-blue .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-blue .main-header .navbar .dropdown-menu li a:hover {\n    background: #367fa9;\n  }\n}\n.skin-blue .main-header .logo {\n  background-color: #367fa9;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue .main-header .logo:hover {\n  background-color: #357ca5;\n}\n.skin-blue .main-header li.user-header {\n  background-color: #3c8dbc;\n}\n.skin-blue .content-header {\n  background: transparent;\n}\n.skin-blue .wrapper,\n.skin-blue .main-sidebar,\n.skin-blue .left-side {\n  background-color: #222d32;\n}\n.skin-blue .user-panel > .info,\n.skin-blue .user-panel > .info > a {\n  color: #fff;\n}\n.skin-blue .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-blue .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-blue .sidebar-menu > li:hover > a,\n.skin-blue .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #3c8dbc;\n}\n.skin-blue .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-blue .sidebar a {\n  color: #b8c7ce;\n}\n.skin-blue .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-blue .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-blue .treeview-menu > li.active > a,\n.skin-blue .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-blue .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-blue .sidebar-form input[type=\"text\"],\n.skin-blue .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-blue .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-blue .sidebar-form input[type=\"text\"]:focus,\n.skin-blue .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-blue .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-blue .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n.skin-blue.layout-top-nav .main-header > .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue.layout-top-nav .main-header > .logo:hover {\n  background-color: #3b8ab8;\n}\n"
  },
  {
    "path": "public/adminlte/css/skins/skin-green-light.css",
    "content": "/*\n * Skin: Green\n * -----------\n */\n.skin-green-light .main-header .navbar {\n  background-color: #00a65a;\n}\n.skin-green-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-green-light .main-header .navbar .nav > li > a:hover,\n.skin-green-light .main-header .navbar .nav > li > a:active,\n.skin-green-light .main-header .navbar .nav > li > a:focus,\n.skin-green-light .main-header .navbar .nav .open > a,\n.skin-green-light .main-header .navbar .nav .open > a:hover,\n.skin-green-light .main-header .navbar .nav .open > a:focus,\n.skin-green-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-green-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #008d4c;\n}\n@media (max-width: 767px) {\n  .skin-green-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-green-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-green-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #008d4c;\n  }\n}\n.skin-green-light .main-header .logo {\n  background-color: #00a65a;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-green-light .main-header .logo:hover {\n  background-color: #00a157;\n}\n.skin-green-light .main-header li.user-header {\n  background-color: #00a65a;\n}\n.skin-green-light .content-header {\n  background: transparent;\n}\n.skin-green-light .wrapper,\n.skin-green-light .main-sidebar,\n.skin-green-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-green-light .content-wrapper,\n.skin-green-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-green-light .user-panel > .info,\n.skin-green-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-green-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-green-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-green-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-green-light .sidebar-menu > li:hover > a,\n.skin-green-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-green-light .sidebar-menu > li.active {\n  border-left-color: #00a65a;\n}\n.skin-green-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-green-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-green-light .sidebar a {\n  color: #444444;\n}\n.skin-green-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-green-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-green-light .treeview-menu > li.active > a,\n.skin-green-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-green-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-green-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-green-light .sidebar-form input[type=\"text\"],\n.skin-green-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-green-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-green-light .sidebar-form input[type=\"text\"]:focus,\n.skin-green-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-green-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-green-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n"
  },
  {
    "path": "public/adminlte/css/skins/skin-green.css",
    "content": "/*\n * Skin: Green\n * -----------\n */\n.skin-green .main-header .navbar {\n  background-color: #00a65a;\n}\n.skin-green .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-green .main-header .navbar .nav > li > a:hover,\n.skin-green .main-header .navbar .nav > li > a:active,\n.skin-green .main-header .navbar .nav > li > a:focus,\n.skin-green .main-header .navbar .nav .open > a,\n.skin-green .main-header .navbar .nav .open > a:hover,\n.skin-green .main-header .navbar .nav .open > a:focus,\n.skin-green .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-green .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-green .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-green .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-green .main-header .navbar .sidebar-toggle:hover {\n  background-color: #008d4c;\n}\n@media (max-width: 767px) {\n  .skin-green .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-green .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-green .main-header .navbar .dropdown-menu li a:hover {\n    background: #008d4c;\n  }\n}\n.skin-green .main-header .logo {\n  background-color: #008d4c;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-green .main-header .logo:hover {\n  background-color: #008749;\n}\n.skin-green .main-header li.user-header {\n  background-color: #00a65a;\n}\n.skin-green .content-header {\n  background: transparent;\n}\n.skin-green .wrapper,\n.skin-green .main-sidebar,\n.skin-green .left-side {\n  background-color: #222d32;\n}\n.skin-green .user-panel > .info,\n.skin-green .user-panel > .info > a {\n  color: #fff;\n}\n.skin-green .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-green .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-green .sidebar-menu > li:hover > a,\n.skin-green .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #00a65a;\n}\n.skin-green .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-green .sidebar a {\n  color: #b8c7ce;\n}\n.skin-green .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-green .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-green .treeview-menu > li.active > a,\n.skin-green .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-green .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-green .sidebar-form input[type=\"text\"],\n.skin-green .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-green .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-green .sidebar-form input[type=\"text\"]:focus,\n.skin-green .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-green .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-green .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n"
  },
  {
    "path": "public/adminlte/css/skins/skin-purple-light.css",
    "content": "/*\n * Skin: Purple\n * ------------\n */\n.skin-purple-light .main-header .navbar {\n  background-color: #605ca8;\n}\n.skin-purple-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-purple-light .main-header .navbar .nav > li > a:hover,\n.skin-purple-light .main-header .navbar .nav > li > a:active,\n.skin-purple-light .main-header .navbar .nav > li > a:focus,\n.skin-purple-light .main-header .navbar .nav .open > a,\n.skin-purple-light .main-header .navbar .nav .open > a:hover,\n.skin-purple-light .main-header .navbar .nav .open > a:focus,\n.skin-purple-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #555299;\n}\n@media (max-width: 767px) {\n  .skin-purple-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-purple-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-purple-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #555299;\n  }\n}\n.skin-purple-light .main-header .logo {\n  background-color: #605ca8;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-purple-light .main-header .logo:hover {\n  background-color: #5d59a6;\n}\n.skin-purple-light .main-header li.user-header {\n  background-color: #605ca8;\n}\n.skin-purple-light .content-header {\n  background: transparent;\n}\n.skin-purple-light .wrapper,\n.skin-purple-light .main-sidebar,\n.skin-purple-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-purple-light .content-wrapper,\n.skin-purple-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-purple-light .user-panel > .info,\n.skin-purple-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-purple-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-purple-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-purple-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-menu > li:hover > a,\n.skin-purple-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-purple-light .sidebar-menu > li.active {\n  border-left-color: #605ca8;\n}\n.skin-purple-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-purple-light .sidebar a {\n  color: #444444;\n}\n.skin-purple-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-purple-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-purple-light .treeview-menu > li.active > a,\n.skin-purple-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-purple-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"],\n.skin-purple-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus,\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-purple-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n"
  },
  {
    "path": "public/adminlte/css/skins/skin-purple.css",
    "content": "/*\n * Skin: Purple\n * ------------\n */\n.skin-purple .main-header .navbar {\n  background-color: #605ca8;\n}\n.skin-purple .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-purple .main-header .navbar .nav > li > a:hover,\n.skin-purple .main-header .navbar .nav > li > a:active,\n.skin-purple .main-header .navbar .nav > li > a:focus,\n.skin-purple .main-header .navbar .nav .open > a,\n.skin-purple .main-header .navbar .nav .open > a:hover,\n.skin-purple .main-header .navbar .nav .open > a:focus,\n.skin-purple .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-purple .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-purple .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-purple .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-purple .main-header .navbar .sidebar-toggle:hover {\n  background-color: #555299;\n}\n@media (max-width: 767px) {\n  .skin-purple .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-purple .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-purple .main-header .navbar .dropdown-menu li a:hover {\n    background: #555299;\n  }\n}\n.skin-purple .main-header .logo {\n  background-color: #555299;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-purple .main-header .logo:hover {\n  background-color: #545096;\n}\n.skin-purple .main-header li.user-header {\n  background-color: #605ca8;\n}\n.skin-purple .content-header {\n  background: transparent;\n}\n.skin-purple .wrapper,\n.skin-purple .main-sidebar,\n.skin-purple .left-side {\n  background-color: #222d32;\n}\n.skin-purple .user-panel > .info,\n.skin-purple .user-panel > .info > a {\n  color: #fff;\n}\n.skin-purple .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-purple .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-purple .sidebar-menu > li:hover > a,\n.skin-purple .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #605ca8;\n}\n.skin-purple .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-purple .sidebar a {\n  color: #b8c7ce;\n}\n.skin-purple .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-purple .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-purple .treeview-menu > li.active > a,\n.skin-purple .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-purple .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-purple .sidebar-form input[type=\"text\"],\n.skin-purple .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-purple .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-purple .sidebar-form input[type=\"text\"]:focus,\n.skin-purple .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-purple .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-purple .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n"
  },
  {
    "path": "public/adminlte/css/skins/skin-red-light.css",
    "content": "/*\n * Skin: Red\n * ---------\n */\n.skin-red-light .main-header .navbar {\n  background-color: #dd4b39;\n}\n.skin-red-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-red-light .main-header .navbar .nav > li > a:hover,\n.skin-red-light .main-header .navbar .nav > li > a:active,\n.skin-red-light .main-header .navbar .nav > li > a:focus,\n.skin-red-light .main-header .navbar .nav .open > a,\n.skin-red-light .main-header .navbar .nav .open > a:hover,\n.skin-red-light .main-header .navbar .nav .open > a:focus,\n.skin-red-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-red-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #d73925;\n}\n@media (max-width: 767px) {\n  .skin-red-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-red-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-red-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #d73925;\n  }\n}\n.skin-red-light .main-header .logo {\n  background-color: #dd4b39;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-red-light .main-header .logo:hover {\n  background-color: #dc4735;\n}\n.skin-red-light .main-header li.user-header {\n  background-color: #dd4b39;\n}\n.skin-red-light .content-header {\n  background: transparent;\n}\n.skin-red-light .wrapper,\n.skin-red-light .main-sidebar,\n.skin-red-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-red-light .content-wrapper,\n.skin-red-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-red-light .user-panel > .info,\n.skin-red-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-red-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-red-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-red-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-red-light .sidebar-menu > li:hover > a,\n.skin-red-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-red-light .sidebar-menu > li.active {\n  border-left-color: #dd4b39;\n}\n.skin-red-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-red-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-red-light .sidebar a {\n  color: #444444;\n}\n.skin-red-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-red-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-red-light .treeview-menu > li.active > a,\n.skin-red-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-red-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-red-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-red-light .sidebar-form input[type=\"text\"],\n.skin-red-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-red-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-red-light .sidebar-form input[type=\"text\"]:focus,\n.skin-red-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-red-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-red-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n"
  },
  {
    "path": "public/adminlte/css/skins/skin-red.css",
    "content": "/*\n * Skin: Red\n * ---------\n */\n.skin-red .main-header .navbar {\n  background-color: #dd4b39;\n}\n.skin-red .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-red .main-header .navbar .nav > li > a:hover,\n.skin-red .main-header .navbar .nav > li > a:active,\n.skin-red .main-header .navbar .nav > li > a:focus,\n.skin-red .main-header .navbar .nav .open > a,\n.skin-red .main-header .navbar .nav .open > a:hover,\n.skin-red .main-header .navbar .nav .open > a:focus,\n.skin-red .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-red .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-red .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-red .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-red .main-header .navbar .sidebar-toggle:hover {\n  background-color: #d73925;\n}\n@media (max-width: 767px) {\n  .skin-red .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-red .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-red .main-header .navbar .dropdown-menu li a:hover {\n    background: #d73925;\n  }\n}\n.skin-red .main-header .logo {\n  background-color: #d73925;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-red .main-header .logo:hover {\n  background-color: #d33724;\n}\n.skin-red .main-header li.user-header {\n  background-color: #dd4b39;\n}\n.skin-red .content-header {\n  background: transparent;\n}\n.skin-red .wrapper,\n.skin-red .main-sidebar,\n.skin-red .left-side {\n  background-color: #222d32;\n}\n.skin-red .user-panel > .info,\n.skin-red .user-panel > .info > a {\n  color: #fff;\n}\n.skin-red .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-red .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-red .sidebar-menu > li:hover > a,\n.skin-red .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #dd4b39;\n}\n.skin-red .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-red .sidebar a {\n  color: #b8c7ce;\n}\n.skin-red .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-red .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-red .treeview-menu > li.active > a,\n.skin-red .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-red .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-red .sidebar-form input[type=\"text\"],\n.skin-red .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-red .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-red .sidebar-form input[type=\"text\"]:focus,\n.skin-red .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-red .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-red .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n"
  },
  {
    "path": "public/adminlte/css/skins/skin-yellow-light.css",
    "content": "/*\n * Skin: Yellow\n * ------------\n */\n.skin-yellow-light .main-header .navbar {\n  background-color: #f39c12;\n}\n.skin-yellow-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-yellow-light .main-header .navbar .nav > li > a:hover,\n.skin-yellow-light .main-header .navbar .nav > li > a:active,\n.skin-yellow-light .main-header .navbar .nav > li > a:focus,\n.skin-yellow-light .main-header .navbar .nav .open > a,\n.skin-yellow-light .main-header .navbar .nav .open > a:hover,\n.skin-yellow-light .main-header .navbar .nav .open > a:focus,\n.skin-yellow-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #e08e0b;\n}\n@media (max-width: 767px) {\n  .skin-yellow-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-yellow-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-yellow-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #e08e0b;\n  }\n}\n.skin-yellow-light .main-header .logo {\n  background-color: #f39c12;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-yellow-light .main-header .logo:hover {\n  background-color: #f39a0d;\n}\n.skin-yellow-light .main-header li.user-header {\n  background-color: #f39c12;\n}\n.skin-yellow-light .content-header {\n  background: transparent;\n}\n.skin-yellow-light .wrapper,\n.skin-yellow-light .main-sidebar,\n.skin-yellow-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-yellow-light .content-wrapper,\n.skin-yellow-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-yellow-light .user-panel > .info,\n.skin-yellow-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-yellow-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-yellow-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-yellow-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-menu > li:hover > a,\n.skin-yellow-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-yellow-light .sidebar-menu > li.active {\n  border-left-color: #f39c12;\n}\n.skin-yellow-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-yellow-light .sidebar a {\n  color: #444444;\n}\n.skin-yellow-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-yellow-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-yellow-light .treeview-menu > li.active > a,\n.skin-yellow-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-yellow-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"],\n.skin-yellow-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus,\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-yellow-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n"
  },
  {
    "path": "public/adminlte/css/skins/skin-yellow.css",
    "content": "/*\n * Skin: Yellow\n * ------------\n */\n.skin-yellow .main-header .navbar {\n  background-color: #f39c12;\n}\n.skin-yellow .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-yellow .main-header .navbar .nav > li > a:hover,\n.skin-yellow .main-header .navbar .nav > li > a:active,\n.skin-yellow .main-header .navbar .nav > li > a:focus,\n.skin-yellow .main-header .navbar .nav .open > a,\n.skin-yellow .main-header .navbar .nav .open > a:hover,\n.skin-yellow .main-header .navbar .nav .open > a:focus,\n.skin-yellow .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-yellow .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle:hover {\n  background-color: #e08e0b;\n}\n@media (max-width: 767px) {\n  .skin-yellow .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-yellow .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-yellow .main-header .navbar .dropdown-menu li a:hover {\n    background: #e08e0b;\n  }\n}\n.skin-yellow .main-header .logo {\n  background-color: #e08e0b;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-yellow .main-header .logo:hover {\n  background-color: #db8b0b;\n}\n.skin-yellow .main-header li.user-header {\n  background-color: #f39c12;\n}\n.skin-yellow .content-header {\n  background: transparent;\n}\n.skin-yellow .wrapper,\n.skin-yellow .main-sidebar,\n.skin-yellow .left-side {\n  background-color: #222d32;\n}\n.skin-yellow .user-panel > .info,\n.skin-yellow .user-panel > .info > a {\n  color: #fff;\n}\n.skin-yellow .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-yellow .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-yellow .sidebar-menu > li:hover > a,\n.skin-yellow .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #f39c12;\n}\n.skin-yellow .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-yellow .sidebar a {\n  color: #b8c7ce;\n}\n.skin-yellow .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-yellow .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-yellow .treeview-menu > li.active > a,\n.skin-yellow .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-yellow .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"],\n.skin-yellow .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"]:focus,\n.skin-yellow .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-yellow .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-yellow .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n"
  },
  {
    "path": "public/adminlte/js/app.js",
    "content": "/*! AdminLTE app.js\n * ================\n * Main JS application file for AdminLTE v2. This file\n * should be included in all pages. It controls some layout\n * options and implements exclusive AdminLTE plugins.\n *\n * @Author  Almsaeed Studio\n * @Support <http://www.almsaeedstudio.com>\n * @Email   <abdullah@almsaeedstudio.com>\n * @version 2.3.8\n * @license MIT <http://opensource.org/licenses/MIT>\n */\n\n//Make sure jQuery has been loaded before app.js\nif (typeof jQuery === \"undefined\") {\n  throw new Error(\"AdminLTE requires jQuery\");\n}\n\n/* AdminLTE\n *\n * @type Object\n * @description $.AdminLTE is the main object for the template's app.\n *              It's used for implementing functions and options related\n *              to the template. Keeping everything wrapped in an object\n *              prevents conflict with other plugins and is a better\n *              way to organize our code.\n */\n$.AdminLTE = {};\n\n/* --------------------\n * - AdminLTE Options -\n * --------------------\n * Modify these options to suit your implementation\n */\n$.AdminLTE.options = {\n  //Add slimscroll to navbar menus\n  //This requires you to load the slimscroll plugin\n  //in every page before app.js\n  navbarMenuSlimscroll: true,\n  navbarMenuSlimscrollWidth: \"3px\", //The width of the scroll bar\n  navbarMenuHeight: \"200px\", //The height of the inner menu\n  //General animation speed for JS animated elements such as box collapse/expand and\n  //sidebar treeview slide up/down. This options accepts an integer as milliseconds,\n  //'fast', 'normal', or 'slow'\n  animationSpeed: 500,\n  //Sidebar push menu toggle button selector\n  sidebarToggleSelector: \"[data-toggle='offcanvas']\",\n  //Activate sidebar push menu\n  sidebarPushMenu: true,\n  //Activate sidebar slimscroll if the fixed layout is set (requires SlimScroll Plugin)\n  sidebarSlimScroll: true,\n  //Enable sidebar expand on hover effect for sidebar mini\n  //This option is forced to true if both the fixed layout and sidebar mini\n  //are used together\n  sidebarExpandOnHover: false,\n  //BoxRefresh Plugin\n  enableBoxRefresh: true,\n  //Bootstrap.js tooltip\n  enableBSToppltip: true,\n  BSTooltipSelector: \"[data-toggle='tooltip']\",\n  //Enable Fast Click. Fastclick.js creates a more\n  //native touch experience with touch devices. If you\n  //choose to enable the plugin, make sure you load the script\n  //before AdminLTE's app.js\n  enableFastclick: false,\n  //Control Sidebar Tree views\n  enableControlTreeView: true,\n  //Control Sidebar Options\n  enableControlSidebar: true,\n  controlSidebarOptions: {\n    //Which button should trigger the open/close event\n    toggleBtnSelector: \"[data-toggle='control-sidebar']\",\n    //The sidebar selector\n    selector: \".control-sidebar\",\n    //Enable slide over content\n    slide: true\n  },\n  //Box Widget Plugin. Enable this plugin\n  //to allow boxes to be collapsed and/or removed\n  enableBoxWidget: true,\n  //Box Widget plugin options\n  boxWidgetOptions: {\n    boxWidgetIcons: {\n      //Collapse icon\n      collapse: 'fa-minus',\n      //Open icon\n      open: 'fa-plus',\n      //Remove icon\n      remove: 'fa-times'\n    },\n    boxWidgetSelectors: {\n      //Remove button selector\n      remove: '[data-widget=\"remove\"]',\n      //Collapse button selector\n      collapse: '[data-widget=\"collapse\"]'\n    }\n  },\n  //Direct Chat plugin options\n  directChat: {\n    //Enable direct chat by default\n    enable: true,\n    //The button to open and close the chat contacts pane\n    contactToggleSelector: '[data-widget=\"chat-pane-toggle\"]'\n  },\n  //Define the set of colors to use globally around the website\n  colors: {\n    lightBlue: \"#3c8dbc\",\n    red: \"#f56954\",\n    green: \"#00a65a\",\n    aqua: \"#00c0ef\",\n    yellow: \"#f39c12\",\n    blue: \"#0073b7\",\n    navy: \"#001F3F\",\n    teal: \"#39CCCC\",\n    olive: \"#3D9970\",\n    lime: \"#01FF70\",\n    orange: \"#FF851B\",\n    fuchsia: \"#F012BE\",\n    purple: \"#8E24AA\",\n    maroon: \"#D81B60\",\n    black: \"#222222\",\n    gray: \"#d2d6de\"\n  },\n  //The standard screen sizes that bootstrap uses.\n  //If you change these in the variables.less file, change\n  //them here too.\n  screenSizes: {\n    xs: 480,\n    sm: 768,\n    md: 992,\n    lg: 1200\n  }\n};\n\n/* ------------------\n * - Implementation -\n * ------------------\n * The next block of code implements AdminLTE's\n * functions and plugins as specified by the\n * options above.\n */\n$(function () {\n  \"use strict\";\n\n  //Fix for IE page transitions\n  $(\"body\").removeClass(\"hold-transition\");\n\n  //Extend options if external options exist\n  if (typeof AdminLTEOptions !== \"undefined\") {\n    $.extend(true,\n      $.AdminLTE.options,\n      AdminLTEOptions);\n  }\n\n  //Easy access to options\n  var o = $.AdminLTE.options;\n\n  //Set up the object\n  _init();\n\n  //Activate the layout maker\n  $.AdminLTE.layout.activate();\n\n  //Enable sidebar tree view controls\n  if (o.enableControlTreeView) {\n    $.AdminLTE.tree('.sidebar');\n  }\n\n  //Enable control sidebar\n  if (o.enableControlSidebar) {\n    $.AdminLTE.controlSidebar.activate();\n  }\n\n  //Add slimscroll to navbar dropdown\n  if (o.navbarMenuSlimscroll && typeof $.fn.slimscroll != 'undefined') {\n    $(\".navbar .menu\").slimscroll({\n      height: o.navbarMenuHeight,\n      alwaysVisible: false,\n      size: o.navbarMenuSlimscrollWidth\n    }).css(\"width\", \"100%\");\n  }\n\n  //Activate sidebar push menu\n  if (o.sidebarPushMenu) {\n    $.AdminLTE.pushMenu.activate(o.sidebarToggleSelector);\n  }\n\n  //Activate Bootstrap tooltip\n  if (o.enableBSToppltip) {\n    $('body').tooltip({\n      selector: o.BSTooltipSelector,\n      container: 'body'\n    });\n  }\n\n  //Activate box widget\n  if (o.enableBoxWidget) {\n    $.AdminLTE.boxWidget.activate();\n  }\n\n  //Activate fast click\n  if (o.enableFastclick && typeof FastClick != 'undefined') {\n    FastClick.attach(document.body);\n  }\n\n  //Activate direct chat widget\n  if (o.directChat.enable) {\n    $(document).on('click', o.directChat.contactToggleSelector, function () {\n      var box = $(this).parents('.direct-chat').first();\n      box.toggleClass('direct-chat-contacts-open');\n    });\n  }\n\n  /*\n   * INITIALIZE BUTTON TOGGLE\n   * ------------------------\n   */\n  $('.btn-group[data-toggle=\"btn-toggle\"]').each(function () {\n    var group = $(this);\n    $(this).find(\".btn\").on('click', function (e) {\n      group.find(\".btn.active\").removeClass(\"active\");\n      $(this).addClass(\"active\");\n      e.preventDefault();\n    });\n\n  });\n});\n\n/* ----------------------------------\n * - Initialize the AdminLTE Object -\n * ----------------------------------\n * All AdminLTE functions are implemented below.\n */\nfunction _init() {\n  'use strict';\n  /* Layout\n   * ======\n   * Fixes the layout height in case min-height fails.\n   *\n   * @type Object\n   * @usage $.AdminLTE.layout.activate()\n   *        $.AdminLTE.layout.fix()\n   *        $.AdminLTE.layout.fixSidebar()\n   */\n  $.AdminLTE.layout = {\n    activate: function () {\n      var _this = this;\n      _this.fix();\n      _this.fixSidebar();\n      $('body, html, .wrapper').css('height', 'auto');\n      $(window, \".wrapper\").resize(function () {\n        _this.fix();\n        _this.fixSidebar();\n      });\n    },\n    fix: function () {\n      // Remove overflow from .wrapper if layout-boxed exists\n      $(\".layout-boxed > .wrapper\").css('overflow', 'hidden');\n      //Get window height and the wrapper height\n      var footer_height = $('.main-footer').outerHeight() || 0;\n      var neg = $('.main-header').outerHeight() + footer_height;\n      var window_height = $(window).height();\n      var sidebar_height = $(\".sidebar\").height() || 0;\n      //Set the min-height of the content and sidebar based on the\n      //the height of the document.\n      if ($(\"body\").hasClass(\"fixed\")) {\n        $(\".content-wrapper, .right-side\").css('min-height', window_height - footer_height);\n      } else {\n        var postSetWidth;\n        if (window_height >= sidebar_height) {\n          $(\".content-wrapper, .right-side\").css('min-height', window_height - neg);\n          postSetWidth = window_height - neg;\n        } else {\n          $(\".content-wrapper, .right-side\").css('min-height', sidebar_height);\n          postSetWidth = sidebar_height;\n        }\n\n        //Fix for the control sidebar height\n        var controlSidebar = $($.AdminLTE.options.controlSidebarOptions.selector);\n        if (typeof controlSidebar !== \"undefined\") {\n          if (controlSidebar.height() > postSetWidth)\n            $(\".content-wrapper, .right-side\").css('min-height', controlSidebar.height());\n        }\n\n      }\n    },\n    fixSidebar: function () {\n      //Make sure the body tag has the .fixed class\n      if (!$(\"body\").hasClass(\"fixed\")) {\n        if (typeof $.fn.slimScroll != 'undefined') {\n          $(\".sidebar\").slimScroll({destroy: true}).height(\"auto\");\n        }\n        return;\n      } else if (typeof $.fn.slimScroll == 'undefined' && window.console) {\n        window.console.error(\"Error: the fixed layout requires the slimscroll plugin!\");\n      }\n      //Enable slimscroll for fixed layout\n      if ($.AdminLTE.options.sidebarSlimScroll) {\n        if (typeof $.fn.slimScroll != 'undefined') {\n          //Destroy if it exists\n          $(\".sidebar\").slimScroll({destroy: true}).height(\"auto\");\n          //Add slimscroll\n          $(\".sidebar\").slimScroll({\n            height: ($(window).height() - $(\".main-header\").height()) + \"px\",\n            color: \"rgba(0,0,0,0.2)\",\n            size: \"3px\"\n          });\n        }\n      }\n    }\n  };\n\n  /* PushMenu()\n   * ==========\n   * Adds the push menu functionality to the sidebar.\n   *\n   * @type Function\n   * @usage: $.AdminLTE.pushMenu(\"[data-toggle='offcanvas']\")\n   */\n  $.AdminLTE.pushMenu = {\n    activate: function (toggleBtn) {\n      //Get the screen sizes\n      var screenSizes = $.AdminLTE.options.screenSizes;\n\n      //Enable sidebar toggle\n      $(document).on('click', toggleBtn, function (e) {\n        e.preventDefault();\n\n        //Enable sidebar push menu\n        if ($(window).width() > (screenSizes.sm - 1)) {\n          if ($(\"body\").hasClass('sidebar-collapse')) {\n            $(\"body\").removeClass('sidebar-collapse').trigger('expanded.pushMenu');\n          } else {\n            $(\"body\").addClass('sidebar-collapse').trigger('collapsed.pushMenu');\n          }\n        }\n        //Handle sidebar push menu for small screens\n        else {\n          if ($(\"body\").hasClass('sidebar-open')) {\n            $(\"body\").removeClass('sidebar-open').removeClass('sidebar-collapse').trigger('collapsed.pushMenu');\n          } else {\n            $(\"body\").addClass('sidebar-open').trigger('expanded.pushMenu');\n          }\n        }\n      });\n\n      $(\".content-wrapper\").click(function () {\n        //Enable hide menu when clicking on the content-wrapper on small screens\n        if ($(window).width() <= (screenSizes.sm - 1) && $(\"body\").hasClass(\"sidebar-open\")) {\n          $(\"body\").removeClass('sidebar-open');\n        }\n      });\n\n      //Enable expand on hover for sidebar mini\n      if ($.AdminLTE.options.sidebarExpandOnHover\n        || ($('body').hasClass('fixed')\n        && $('body').hasClass('sidebar-mini'))) {\n        this.expandOnHover();\n      }\n    },\n    expandOnHover: function () {\n      var _this = this;\n      var screenWidth = $.AdminLTE.options.screenSizes.sm - 1;\n      //Expand sidebar on hover\n      $('.main-sidebar').hover(function () {\n        if ($('body').hasClass('sidebar-mini')\n          && $(\"body\").hasClass('sidebar-collapse')\n          && $(window).width() > screenWidth) {\n          _this.expand();\n        }\n      }, function () {\n        if ($('body').hasClass('sidebar-mini')\n          && $('body').hasClass('sidebar-expanded-on-hover')\n          && $(window).width() > screenWidth) {\n          _this.collapse();\n        }\n      });\n    },\n    expand: function () {\n      $(\"body\").removeClass('sidebar-collapse').addClass('sidebar-expanded-on-hover');\n    },\n    collapse: function () {\n      if ($('body').hasClass('sidebar-expanded-on-hover')) {\n        $('body').removeClass('sidebar-expanded-on-hover').addClass('sidebar-collapse');\n      }\n    }\n  };\n\n  /* Tree()\n   * ======\n   * Converts the sidebar into a multilevel\n   * tree view menu.\n   *\n   * @type Function\n   * @Usage: $.AdminLTE.tree('.sidebar')\n   */\n  $.AdminLTE.tree = function (menu) {\n    var _this = this;\n    var animationSpeed = $.AdminLTE.options.animationSpeed;\n    $(document).off('click', menu + ' li a')\n      .on('click', menu + ' li a', function (e) {\n        //Get the clicked link and the next element\n        var $this = $(this);\n        var checkElement = $this.next();\n\n        //Check if the next element is a menu and is visible\n        if ((checkElement.is('.treeview-menu')) && (checkElement.is(':visible')) && (!$('body').hasClass('sidebar-collapse'))) {\n          //Close the menu\n          checkElement.slideUp(animationSpeed, function () {\n            checkElement.removeClass('menu-open');\n            //Fix the layout in case the sidebar stretches over the height of the window\n            //_this.layout.fix();\n          });\n          checkElement.parent(\"li\").removeClass(\"active\");\n        }\n        //If the menu is not visible\n        else if ((checkElement.is('.treeview-menu')) && (!checkElement.is(':visible'))) {\n          //Get the parent menu\n          var parent = $this.parents('ul').first();\n          //Close all open menus within the parent\n          var ul = parent.find('ul:visible').slideUp(animationSpeed);\n          //Remove the menu-open class from the parent\n          ul.removeClass('menu-open');\n          //Get the parent li\n          var parent_li = $this.parent(\"li\");\n\n          //Open the target menu and add the menu-open class\n          checkElement.slideDown(animationSpeed, function () {\n            //Add the class active to the parent li\n            checkElement.addClass('menu-open');\n            parent.find('li.active').removeClass('active');\n            parent_li.addClass('active');\n            //Fix the layout in case the sidebar stretches over the height of the window\n            _this.layout.fix();\n          });\n        }\n        //if this isn't a link, prevent the page from being redirected\n        if (checkElement.is('.treeview-menu')) {\n          e.preventDefault();\n        }\n      });\n  };\n\n  /* ControlSidebar\n   * ==============\n   * Adds functionality to the right sidebar\n   *\n   * @type Object\n   * @usage $.AdminLTE.controlSidebar.activate(options)\n   */\n  $.AdminLTE.controlSidebar = {\n    //instantiate the object\n    activate: function () {\n      //Get the object\n      var _this = this;\n      //Update options\n      var o = $.AdminLTE.options.controlSidebarOptions;\n      //Get the sidebar\n      var sidebar = $(o.selector);\n      //The toggle button\n      var btn = $(o.toggleBtnSelector);\n\n      //Listen to the click event\n      btn.on('click', function (e) {\n        e.preventDefault();\n        //If the sidebar is not open\n        if (!sidebar.hasClass('control-sidebar-open')\n          && !$('body').hasClass('control-sidebar-open')) {\n          //Open the sidebar\n          _this.open(sidebar, o.slide);\n        } else {\n          _this.close(sidebar, o.slide);\n        }\n      });\n\n      //If the body has a boxed layout, fix the sidebar bg position\n      var bg = $(\".control-sidebar-bg\");\n      _this._fix(bg);\n\n      //If the body has a fixed layout, make the control sidebar fixed\n      if ($('body').hasClass('fixed')) {\n        _this._fixForFixed(sidebar);\n      } else {\n        //If the content height is less than the sidebar's height, force max height\n        if ($('.content-wrapper, .right-side').height() < sidebar.height()) {\n          _this._fixForContent(sidebar);\n        }\n      }\n    },\n    //Open the control sidebar\n    open: function (sidebar, slide) {\n      //Slide over content\n      if (slide) {\n        sidebar.addClass('control-sidebar-open');\n      } else {\n        //Push the content by adding the open class to the body instead\n        //of the sidebar itself\n        $('body').addClass('control-sidebar-open');\n      }\n    },\n    //Close the control sidebar\n    close: function (sidebar, slide) {\n      if (slide) {\n        sidebar.removeClass('control-sidebar-open');\n      } else {\n        $('body').removeClass('control-sidebar-open');\n      }\n    },\n    _fix: function (sidebar) {\n      var _this = this;\n      if ($(\"body\").hasClass('layout-boxed')) {\n        sidebar.css('position', 'absolute');\n        sidebar.height($(\".wrapper\").height());\n        if (_this.hasBindedResize) {\n          return;\n        }\n        $(window).resize(function () {\n          _this._fix(sidebar);\n        });\n        _this.hasBindedResize = true;\n      } else {\n        sidebar.css({\n          'position': 'fixed',\n          'height': 'auto'\n        });\n      }\n    },\n    _fixForFixed: function (sidebar) {\n      sidebar.css({\n        'position': 'fixed',\n        'max-height': '100%',\n        'overflow': 'auto',\n        'padding-bottom': '50px'\n      });\n    },\n    _fixForContent: function (sidebar) {\n      $(\".content-wrapper, .right-side\").css('min-height', sidebar.height());\n    }\n  };\n\n  /* BoxWidget\n   * =========\n   * BoxWidget is a plugin to handle collapsing and\n   * removing boxes from the screen.\n   *\n   * @type Object\n   * @usage $.AdminLTE.boxWidget.activate()\n   *        Set all your options in the main $.AdminLTE.options object\n   */\n  $.AdminLTE.boxWidget = {\n    selectors: $.AdminLTE.options.boxWidgetOptions.boxWidgetSelectors,\n    icons: $.AdminLTE.options.boxWidgetOptions.boxWidgetIcons,\n    animationSpeed: $.AdminLTE.options.animationSpeed,\n    activate: function (_box) {\n      var _this = this;\n      if (!_box) {\n        _box = document; // activate all boxes per default\n      }\n      //Listen for collapse event triggers\n      $(_box).on('click', _this.selectors.collapse, function (e) {\n        e.preventDefault();\n        _this.collapse($(this));\n      });\n\n      //Listen for remove event triggers\n      $(_box).on('click', _this.selectors.remove, function (e) {\n        e.preventDefault();\n        _this.remove($(this));\n      });\n    },\n    collapse: function (element) {\n      var _this = this;\n      //Find the box parent\n      var box = element.parents(\".box\").first();\n      //Find the body and the footer\n      var box_content = box.find(\"> .box-body, > .box-footer, > form  >.box-body, > form > .box-footer\");\n      if (!box.hasClass(\"collapsed-box\")) {\n        //Convert minus into plus\n        element.children(\":first\")\n          .removeClass(_this.icons.collapse)\n          .addClass(_this.icons.open);\n        //Hide the content\n        box_content.slideUp(_this.animationSpeed, function () {\n          box.addClass(\"collapsed-box\");\n        });\n      } else {\n        //Convert plus into minus\n        element.children(\":first\")\n          .removeClass(_this.icons.open)\n          .addClass(_this.icons.collapse);\n        //Show the content\n        box_content.slideDown(_this.animationSpeed, function () {\n          box.removeClass(\"collapsed-box\");\n        });\n      }\n    },\n    remove: function (element) {\n      //Find the box parent\n      var box = element.parents(\".box\").first();\n      box.slideUp(this.animationSpeed);\n    }\n  };\n}\n\n/* ------------------\n * - Custom Plugins -\n * ------------------\n * All custom plugins are defined below.\n */\n\n/*\n * BOX REFRESH BUTTON\n * ------------------\n * This is a custom plugin to use with the component BOX. It allows you to add\n * a refresh button to the box. It converts the box's state to a loading state.\n *\n * @type plugin\n * @usage $(\"#box-widget\").boxRefresh( options );\n */\n(function ($) {\n\n  \"use strict\";\n\n  $.fn.boxRefresh = function (options) {\n\n    // Render options\n    var settings = $.extend({\n      //Refresh button selector\n      trigger: \".refresh-btn\",\n      //File source to be loaded (e.g: ajax/src.php)\n      source: \"\",\n      //Callbacks\n      onLoadStart: function (box) {\n        return box;\n      }, //Right after the button has been clicked\n      onLoadDone: function (box) {\n        return box;\n      } //When the source has been loaded\n\n    }, options);\n\n    //The overlay\n    var overlay = $('<div class=\"overlay\"><div class=\"fa fa-refresh fa-spin\"></div></div>');\n\n    return this.each(function () {\n      //if a source is specified\n      if (settings.source === \"\") {\n        if (window.console) {\n          window.console.log(\"Please specify a source first - boxRefresh()\");\n        }\n        return;\n      }\n      //the box\n      var box = $(this);\n      //the button\n      var rBtn = box.find(settings.trigger).first();\n\n      //On trigger click\n      rBtn.on('click', function (e) {\n        e.preventDefault();\n        //Add loading overlay\n        start(box);\n\n        //Perform ajax call\n        box.find(\".box-body\").load(settings.source, function () {\n          done(box);\n        });\n      });\n    });\n\n    function start(box) {\n      //Add overlay and loading img\n      box.append(overlay);\n\n      settings.onLoadStart.call(box);\n    }\n\n    function done(box) {\n      //Remove overlay and loading img\n      box.find(overlay).remove();\n\n      settings.onLoadDone.call(box);\n    }\n\n  };\n\n})(jQuery);\n\n/*\n * EXPLICIT BOX CONTROLS\n * -----------------------\n * This is a custom plugin to use with the component BOX. It allows you to activate\n * a box inserted in the DOM after the app.js was loaded, toggle and remove box.\n *\n * @type plugin\n * @usage $(\"#box-widget\").activateBox();\n * @usage $(\"#box-widget\").toggleBox();\n * @usage $(\"#box-widget\").removeBox();\n */\n(function ($) {\n\n  'use strict';\n\n  $.fn.activateBox = function () {\n    $.AdminLTE.boxWidget.activate(this);\n  };\n\n  $.fn.toggleBox = function () {\n    var button = $($.AdminLTE.boxWidget.selectors.collapse, this);\n    $.AdminLTE.boxWidget.collapse(button);\n  };\n\n  $.fn.removeBox = function () {\n    var button = $($.AdminLTE.boxWidget.selectors.remove, this);\n    $.AdminLTE.boxWidget.remove(button);\n  };\n\n})(jQuery);\n\n/*\n * TODO LIST CUSTOM PLUGIN\n * -----------------------\n * This plugin depends on iCheck plugin for checkbox and radio inputs\n *\n * @type plugin\n * @usage $(\"#todo-widget\").todolist( options );\n */\n(function ($) {\n\n  'use strict';\n\n  $.fn.todolist = function (options) {\n    // Render options\n    var settings = $.extend({\n      //When the user checks the input\n      onCheck: function (ele) {\n        return ele;\n      },\n      //When the user unchecks the input\n      onUncheck: function (ele) {\n        return ele;\n      }\n    }, options);\n\n    return this.each(function () {\n\n      if (typeof $.fn.iCheck != 'undefined') {\n        $('input', this).on('ifChecked', function () {\n          var ele = $(this).parents(\"li\").first();\n          ele.toggleClass(\"done\");\n          settings.onCheck.call(ele);\n        });\n\n        $('input', this).on('ifUnchecked', function () {\n          var ele = $(this).parents(\"li\").first();\n          ele.toggleClass(\"done\");\n          settings.onUncheck.call(ele);\n        });\n      } else {\n        $('input', this).on('change', function () {\n          var ele = $(this).parents(\"li\").first();\n          ele.toggleClass(\"done\");\n          if ($('input', ele).is(\":checked\")) {\n            settings.onCheck.call(ele);\n          } else {\n            settings.onUncheck.call(ele);\n          }\n        });\n      }\n    });\n  };\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/js/demo.js",
    "content": "/**\n * AdminLTE Demo Menu\n * ------------------\n * You should not use this file in production.\n * This file is for demo purposes only.\n */\n(function ($, AdminLTE) {\n\n  \"use strict\";\n\n  /**\n   * List of all the available skins\n   *\n   * @type Array\n   */\n  var my_skins = [\n    \"skin-blue\",\n    \"skin-black\",\n    \"skin-red\",\n    \"skin-yellow\",\n    \"skin-purple\",\n    \"skin-green\",\n    \"skin-blue-light\",\n    \"skin-black-light\",\n    \"skin-red-light\",\n    \"skin-yellow-light\",\n    \"skin-purple-light\",\n    \"skin-green-light\"\n  ];\n\n  //Create the new tab\n  var tab_pane = $(\"<div />\", {\n    \"id\": \"control-sidebar-theme-demo-options-tab\",\n    \"class\": \"tab-pane active\"\n  });\n\n  //Create the tab button\n  var tab_button = $(\"<li />\", {\"class\": \"active\"})\n      .html(\"<a href='#control-sidebar-theme-demo-options-tab' data-toggle='tab'>\"\n      + \"<i class='fa fa-wrench'></i>\"\n      + \"</a>\");\n\n  //Add the tab button to the right sidebar tabs\n  $(\"[href='#control-sidebar-home-tab']\")\n      .parent()\n      .before(tab_button);\n\n  //Create the menu\n  var demo_settings = $(\"<div />\");\n\n  //Layout options\n  demo_settings.append(\n      \"<h4 class='control-sidebar-heading'>\"\n      + \"Layout Options\"\n      + \"</h4>\"\n        //Fixed layout\n      + \"<div class='form-group'>\"\n      + \"<label class='control-sidebar-subheading'>\"\n      + \"<input type='checkbox' data-layout='fixed' class='pull-right'/> \"\n      + \"Fixed layout\"\n      + \"</label>\"\n      + \"<p>Activate the fixed layout. You can't use fixed and boxed layouts together</p>\"\n      + \"</div>\"\n        //Boxed layout\n      + \"<div class='form-group'>\"\n      + \"<label class='control-sidebar-subheading'>\"\n      + \"<input type='checkbox' data-layout='layout-boxed'class='pull-right'/> \"\n      + \"Boxed Layout\"\n      + \"</label>\"\n      + \"<p>Activate the boxed layout</p>\"\n      + \"</div>\"\n        //Sidebar Toggle\n      + \"<div class='form-group'>\"\n      + \"<label class='control-sidebar-subheading'>\"\n      + \"<input type='checkbox' data-layout='sidebar-collapse' class='pull-right'/> \"\n      + \"Toggle Sidebar\"\n      + \"</label>\"\n      + \"<p>Toggle the left sidebar's state (open or collapse)</p>\"\n      + \"</div>\"\n        //Sidebar mini expand on hover toggle\n      + \"<div class='form-group'>\"\n      + \"<label class='control-sidebar-subheading'>\"\n      + \"<input type='checkbox' data-enable='expandOnHover' class='pull-right'/> \"\n      + \"Sidebar Expand on Hover\"\n      + \"</label>\"\n      + \"<p>Let the sidebar mini expand on hover</p>\"\n      + \"</div>\"\n        //Control Sidebar Toggle\n      + \"<div class='form-group'>\"\n      + \"<label class='control-sidebar-subheading'>\"\n      + \"<input type='checkbox' data-controlsidebar='control-sidebar-open' class='pull-right'/> \"\n      + \"Toggle Right Sidebar Slide\"\n      + \"</label>\"\n      + \"<p>Toggle between slide over content and push content effects</p>\"\n      + \"</div>\"\n        //Control Sidebar Skin Toggle\n      + \"<div class='form-group'>\"\n      + \"<label class='control-sidebar-subheading'>\"\n      + \"<input type='checkbox' data-sidebarskin='toggle' class='pull-right'/> \"\n      + \"Toggle Right Sidebar Skin\"\n      + \"</label>\"\n      + \"<p>Toggle between dark and light skins for the right sidebar</p>\"\n      + \"</div>\"\n  );\n  var skins_list = $(\"<ul />\", {\"class\": 'list-unstyled clearfix'});\n\n  //Dark sidebar skins\n  var skin_blue =\n      $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-blue' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 7px; background: #367fa9;'></span><span class='bg-light-blue' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #222d32;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n          + \"</a>\"\n          + \"<p class='text-center no-margin'>Blue</p>\");\n  skins_list.append(skin_blue);\n  var skin_black =\n      $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-black' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n          + \"<div style='box-shadow: 0 0 2px rgba(0,0,0,0.1)' class='clearfix'><span style='display:block; width: 20%; float: left; height: 7px; background: #fefefe;'></span><span style='display:block; width: 80%; float: left; height: 7px; background: #fefefe;'></span></div>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #222;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n          + \"</a>\"\n          + \"<p class='text-center no-margin'>Black</p>\");\n  skins_list.append(skin_black);\n  var skin_purple =\n      $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-purple' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-purple-active'></span><span class='bg-purple' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #222d32;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n          + \"</a>\"\n          + \"<p class='text-center no-margin'>Purple</p>\");\n  skins_list.append(skin_purple);\n  var skin_green =\n      $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-green' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-green-active'></span><span class='bg-green' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #222d32;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n          + \"</a>\"\n          + \"<p class='text-center no-margin'>Green</p>\");\n  skins_list.append(skin_green);\n  var skin_red =\n      $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-red' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-red-active'></span><span class='bg-red' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #222d32;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n          + \"</a>\"\n          + \"<p class='text-center no-margin'>Red</p>\");\n  skins_list.append(skin_red);\n  var skin_yellow =\n      $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-yellow' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-yellow-active'></span><span class='bg-yellow' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #222d32;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n          + \"</a>\"\n          + \"<p class='text-center no-margin'>Yellow</p>\");\n  skins_list.append(skin_yellow);\n\n  //Light sidebar skins\n  var skin_blue_light =\n      $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-blue-light' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 7px; background: #367fa9;'></span><span class='bg-light-blue' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #f9fafc;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n          + \"</a>\"\n          + \"<p class='text-center no-margin' style='font-size: 12px'>Blue Light</p>\");\n  skins_list.append(skin_blue_light);\n  var skin_black_light =\n      $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-black-light' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n          + \"<div style='box-shadow: 0 0 2px rgba(0,0,0,0.1)' class='clearfix'><span style='display:block; width: 20%; float: left; height: 7px; background: #fefefe;'></span><span style='display:block; width: 80%; float: left; height: 7px; background: #fefefe;'></span></div>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #f9fafc;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n          + \"</a>\"\n          + \"<p class='text-center no-margin' style='font-size: 12px'>Black Light</p>\");\n  skins_list.append(skin_black_light);\n  var skin_purple_light =\n      $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-purple-light' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-purple-active'></span><span class='bg-purple' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #f9fafc;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n          + \"</a>\"\n          + \"<p class='text-center no-margin' style='font-size: 12px'>Purple Light</p>\");\n  skins_list.append(skin_purple_light);\n  var skin_green_light =\n      $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-green-light' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-green-active'></span><span class='bg-green' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #f9fafc;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n          + \"</a>\"\n          + \"<p class='text-center no-margin' style='font-size: 12px'>Green Light</p>\");\n  skins_list.append(skin_green_light);\n  var skin_red_light =\n      $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-red-light' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-red-active'></span><span class='bg-red' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #f9fafc;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n          + \"</a>\"\n          + \"<p class='text-center no-margin' style='font-size: 12px'>Red Light</p>\");\n  skins_list.append(skin_red_light);\n  var skin_yellow_light =\n      $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-yellow-light' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-yellow-active'></span><span class='bg-yellow' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n          + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #f9fafc;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n          + \"</a>\"\n          + \"<p class='text-center no-margin' style='font-size: 12px;'>Yellow Light</p>\");\n  skins_list.append(skin_yellow_light);\n\n  demo_settings.append(\"<h4 class='control-sidebar-heading'>Skins</h4>\");\n  demo_settings.append(skins_list);\n\n  tab_pane.append(demo_settings);\n  $(\"#control-sidebar-home-tab\").after(tab_pane);\n\n  setup();\n\n  /**\n   * Toggles layout classes\n   *\n   * @param String cls the layout class to toggle\n   * @returns void\n   */\n  function change_layout(cls) {\n    $(\"body\").toggleClass(cls);\n    AdminLTE.layout.fixSidebar();\n    //Fix the problem with right sidebar and layout boxed\n    if (cls == \"layout-boxed\")\n      AdminLTE.controlSidebar._fix($(\".control-sidebar-bg\"));\n    if ($('body').hasClass('fixed') && cls == 'fixed') {\n      AdminLTE.pushMenu.expandOnHover();\n      AdminLTE.layout.activate();\n    }\n    AdminLTE.controlSidebar._fix($(\".control-sidebar-bg\"));\n    AdminLTE.controlSidebar._fix($(\".control-sidebar\"));\n  }\n\n  /**\n   * Replaces the old skin with the new skin\n   * @param String cls the new skin class\n   * @returns Boolean false to prevent link's default action\n   */\n  function change_skin(cls) {\n    $.each(my_skins, function (i) {\n      $(\"body\").removeClass(my_skins[i]);\n    });\n\n    $(\"body\").addClass(cls);\n    store('skin', cls);\n    return false;\n  }\n\n  /**\n   * Store a new settings in the browser\n   *\n   * @param String name Name of the setting\n   * @param String val Value of the setting\n   * @returns void\n   */\n  function store(name, val) {\n    if (typeof (Storage) !== \"undefined\") {\n      localStorage.setItem(name, val);\n    } else {\n      window.alert('Please use a modern browser to properly view this template!');\n    }\n  }\n\n  /**\n   * Get a prestored setting\n   *\n   * @param String name Name of of the setting\n   * @returns String The value of the setting | null\n   */\n  function get(name) {\n    if (typeof (Storage) !== \"undefined\") {\n      return localStorage.getItem(name);\n    } else {\n      window.alert('Please use a modern browser to properly view this template!');\n    }\n  }\n\n  /**\n   * Retrieve default settings and apply them to the template\n   *\n   * @returns void\n   */\n  function setup() {\n    var tmp = get('skin');\n    if (tmp && $.inArray(tmp, my_skins))\n      change_skin(tmp);\n\n    //Add the change skin listener\n    $(\"[data-skin]\").on('click', function (e) {\n      if($(this).hasClass('knob'))\n        return;\n      e.preventDefault();\n      change_skin($(this).data('skin'));\n    });\n\n    //Add the layout manager\n    $(\"[data-layout]\").on('click', function () {\n      change_layout($(this).data('layout'));\n    });\n\n    $(\"[data-controlsidebar]\").on('click', function () {\n      change_layout($(this).data('controlsidebar'));\n      var slide = !AdminLTE.options.controlSidebarOptions.slide;\n      AdminLTE.options.controlSidebarOptions.slide = slide;\n      if (!slide)\n        $('.control-sidebar').removeClass('control-sidebar-open');\n    });\n\n    $(\"[data-sidebarskin='toggle']\").on('click', function () {\n      var sidebar = $(\".control-sidebar\");\n      if (sidebar.hasClass(\"control-sidebar-dark\")) {\n        sidebar.removeClass(\"control-sidebar-dark\")\n        sidebar.addClass(\"control-sidebar-light\")\n      } else {\n        sidebar.removeClass(\"control-sidebar-light\")\n        sidebar.addClass(\"control-sidebar-dark\")\n      }\n    });\n\n    $(\"[data-enable='expandOnHover']\").on('click', function () {\n      $(this).attr('disabled', true);\n      AdminLTE.pushMenu.expandOnHover();\n      if (!$('body').hasClass('sidebar-collapse'))\n        $(\"[data-layout='sidebar-collapse']\").click();\n    });\n\n    // Reset options\n    if ($('body').hasClass('fixed')) {\n      $(\"[data-layout='fixed']\").attr('checked', 'checked');\n    }\n    if ($('body').hasClass('layout-boxed')) {\n      $(\"[data-layout='layout-boxed']\").attr('checked', 'checked');\n    }\n    if ($('body').hasClass('sidebar-collapse')) {\n      $(\"[data-layout='sidebar-collapse']\").attr('checked', 'checked');\n    }\n\n  }\n})(jQuery, $.AdminLTE);\n"
  },
  {
    "path": "public/adminlte/js/main.js",
    "content": "$(document).ready(function () {\n\n    var activeSub = $(document).find('.active-sub');\n    if (activeSub.length > 0) {\n        activeSub.parent().show();\n        activeSub.parent().parent().find('.arrow').addClass('open');\n        activeSub.parent().parent().addClass('open');\n    }\n    window.dtDefaultOptions = {\n        retrieve: true,\n        dom: 'lBfrtip<\"actions\">',\n        columnDefs: [],\n        \"iDisplayLength\": 100,\n        \"aaSorting\": [],\n        buttons: [\n            {\n                extend: 'copy',\n                text: window.copyButtonTrans,\n                exportOptions: {\n                    columns: ':visible'\n                }\n            },\n            {\n                extend: 'csv',\n                text: window.csvButtonTrans,\n                exportOptions: {\n                    columns: ':visible'\n                }\n            },\n            {\n                extend: 'excel',\n                text: window.excelButtonTrans,\n                exportOptions: {\n                    columns: ':visible'\n                }\n            },\n            {\n                extend: 'pdf',\n                text: window.pdfButtonTrans,\n                exportOptions: {\n                    columns: ':visible'\n                }\n            },\n            {\n                extend: 'print',\n                text: window.printButtonTrans,\n                exportOptions: {\n                    columns: ':visible'\n                }\n            },\n            {\n                extend: 'colvis',\n                text: window.colvisButtonTrans,\n                exportOptions: {\n                    columns: ':visible'\n                }\n            },\n        ]\n    };\n    $('.datatable').each(function () {\n        if ($(this).hasClass('dt-select')) {\n            window.dtDefaultOptions.select = {\n                style: 'multi',\n                selector: 'td:first-child'\n            };\n\n            window.dtDefaultOptions.columnDefs.push({\n                orderable: false,\n                className: 'select-checkbox',\n                targets: 0\n            });\n        }\n        $(this).dataTable(window.dtDefaultOptions);\n    });\n    $(document).on( 'init.dt', function ( e, settings ) {\n        if (typeof window.route_mass_crud_entries_destroy != 'undefined') {\n            $('.datatable, .ajaxTable').siblings('.actions').html('<a href=\"' + window.route_mass_crud_entries_destroy + '\" class=\"btn btn-xs btn-danger js-delete-selected\" style=\"margin-top:0.755em;margin-left: 20px;\">'+window.deleteButtonTrans+'</a>');\n        }\n    });\n\n    $(document).on('click', '.js-delete-selected', function () {\n        if (confirm('Are you sure')) {\n            var ids = [];\n\n            $(this).closest('.actions').siblings('.datatable, .ajaxTable').find('tbody tr.selected').each(function () {\n                console.log(\"selected\", $(this).data('entry-id'));\n                ids.push($(this).data('entry-id'));\n            });\n\n            $.ajax({\n                method: 'POST',\n                url: $(this).attr('href'),\n                data: {\n                    _token: _token,\n                    ids: ids\n                }\n            }).done(function () {\n                location.reload();\n            });\n        }\n\n        return false;\n    });\n\n    $(document).on('click', '#select-all', function () {\n        var selected = $(this).is(':checked');\n\n        $(this).closest('table.datatable, table.ajaxTable').find('td:first-child').each(function () {\n            if (selected != $(this).closest('tr').hasClass('selected')) {\n                $(this).click();\n            }\n        });\n    });\n\n    $('.mass').click(function () {\n        if ($(this).is(\":checked\")) {\n            $('.single').each(function () {\n                if ($(this).is(\":checked\") == false) {\n                    $(this).click();\n                }\n            });\n        } else {\n            $('.single').each(function () {\n                if ($(this).is(\":checked\") == true) {\n                    $(this).click();\n                }\n            });\n        }\n    });\n\n    $('.page-sidebar').on('click', 'li > a', function (e) {\n\n        if ($('body').hasClass('page-sidebar-closed') && $(this).parent('li').parent('.page-sidebar-menu').size() === 1) {\n            return;\n        }\n\n        var hasSubMenu = $(this).next().hasClass('sub-menu');\n\n        if ($(this).next().hasClass('sub-menu always-open')) {\n            return;\n        }\n\n        var parent = $(this).parent().parent();\n        var the = $(this);\n        var menu = $('.page-sidebar-menu');\n        var sub = $(this).next();\n\n        var autoScroll = menu.data(\"auto-scroll\");\n        var slideSpeed = parseInt(menu.data(\"slide-speed\"));\n        var keepExpand = menu.data(\"keep-expanded\");\n\n        if (keepExpand !== true) {\n            parent.children('li.open').children('a').children('.arrow').removeClass('open');\n            parent.children('li.open').children('.sub-menu:not(.always-open)').slideUp(slideSpeed);\n            parent.children('li.open').removeClass('open');\n        }\n\n        var slideOffeset = -200;\n\n        if (sub.is(\":visible\")) {\n            $('.arrow', $(this)).removeClass(\"open\");\n            $(this).parent().removeClass(\"open\");\n            sub.slideUp(slideSpeed, function () {\n                if (autoScroll === true && $('body').hasClass('page-sidebar-closed') === false) {\n                    if ($('body').hasClass('page-sidebar-fixed')) {\n                        menu.slimScroll({\n                            'scrollTo': (the.position()).top\n                        });\n                    }\n                }\n            });\n        } else if (hasSubMenu) {\n            $('.arrow', $(this)).addClass(\"open\");\n            $(this).parent().addClass(\"open\");\n            sub.slideDown(slideSpeed, function () {\n                if (autoScroll === true && $('body').hasClass('page-sidebar-closed') === false) {\n                    if ($('body').hasClass('page-sidebar-fixed')) {\n                        menu.slimScroll({\n                            'scrollTo': (the.position()).top\n                        });\n                    }\n                }\n            });\n        }\n        if (hasSubMenu == true || $(this).attr('href') == '#') {\n            e.preventDefault();\n        }\n    });\n\n    $('.select2').select2();\n\n});\n\nfunction processAjaxTables() {\n    $('.ajaxTable').each(function () {\n        window.dtDefaultOptions.processing = true;\n        window.dtDefaultOptions.serverSide = true;\n        if ($(this).hasClass('dt-select')) {\n            window.dtDefaultOptions.select = {\n                style: 'multi',\n                selector: 'td:first-child'\n            };\n\n            window.dtDefaultOptions.columnDefs.push({\n                orderable: false,\n                className: 'select-checkbox',\n                targets: 0\n            });\n        }\n        $(this).DataTable(window.dtDefaultOptions);\n        if (typeof window.route_mass_crud_entries_destroy != 'undefined') {\n            $(this).siblings('.actions').html('<a href=\"' + window.route_mass_crud_entries_destroy + '\" class=\"btn btn-xs btn-danger js-delete-selected\" style=\"margin-top:0.755em;margin-left: 20px;\">'+window.deleteButtonTrans+'</a>');\n        }\n    });\n\n}\n"
  },
  {
    "path": "public/adminlte/js/mapInput.js",
    "content": "function initialize() {\n\n    $('form').on('keyup keypress', function(e) {\n        var keyCode = e.keyCode || e.which;\n        if (keyCode === 13) {\n            e.preventDefault();\n            return false;\n        }\n    });\n    const locationInputs = document.getElementsByClassName(\"map-input\");\n\n    const autocompletes = [];\n    const geocoder = new google.maps.Geocoder;\n    for (let i = 0; i < locationInputs.length; i++) {\n\n        const input = locationInputs[i];\n\n\n        const fieldKey = input.id.replace(\"-input\", \"\");\n        const isEdit = document.getElementById(fieldKey + \"-latitude\").value != '' && document.getElementById(fieldKey + \"-longitude\").value != '';\n\n        const latitude = parseFloat(document.getElementById(fieldKey + \"-latitude\").value) || -33.8688;\n        const longitude = parseFloat(document.getElementById(fieldKey + \"-longitude\").value) || 151.2195;\n\n        const map = new google.maps.Map(document.getElementById(fieldKey + '-map'), {\n            center: {lat: latitude, lng: longitude},\n            zoom: 13\n        });\n        const marker = new google.maps.Marker({\n            map: map,\n            position: {lat: latitude, lng: longitude},\n        });\n\n        marker.setVisible(isEdit);\n\n\n        const autocomplete = new google.maps.places.Autocomplete(input);\n\n        autocomplete.key = fieldKey;\n\n        autocompletes.push({input: input, map: map, marker: marker, autocomplete: autocomplete});\n    }\n\n    for (let i = 0; i < autocompletes.length; i++) {\n        const input = autocompletes[i].input;\n        const autocomplete = autocompletes[i].autocomplete;\n        const map = autocompletes[i].map;\n        const marker = autocompletes[i].marker;\n\n        google.maps.event.addListener(autocomplete, 'place_changed', function () {\n            marker.setVisible(false);\n            const place = autocomplete.getPlace();\n\n\n            geocoder.geocode({'placeId': place.place_id}, function (results, status) {\n                if (status === google.maps.GeocoderStatus.OK) {\n\n                    const lat = results[0].geometry.location.lat();\n                    const lng = results[0].geometry.location.lng();\n\n                    setLocationCoordinates(autocomplete.key, lat, lng);\n                }\n            });\n\n\n            if (!place.geometry) {\n\n                window.alert(\"No details available for input: '\" + place.name + \"'\");\n                input.value = \"\";\n                return;\n            }\n\n\n            if (place.geometry.viewport) {\n                map.fitBounds(place.geometry.viewport);\n            } else {\n                map.setCenter(place.geometry.location);\n                map.setZoom(17);\n            }\n            marker.setPosition(place.geometry.location);\n            marker.setVisible(true);\n\n        });\n    }\n}\n\nfunction setLocationCoordinates(key, lat, lng) {\n    const latitudeField = document.getElementById(key + \"-\" + \"latitude\");\n    const longitudeField = document.getElementById(key + \"-\" + \"longitude\");\n\n    latitudeField.value = lat;\n    longitudeField.value = lng;\n\n}\n"
  },
  {
    "path": "public/adminlte/js/pages/dashboard.js",
    "content": "/*\n * Author: Abdullah A Almsaeed\n * Date: 4 Jan 2014\n * Description:\n *      This is a demo file used only for the main dashboard (index.html)\n **/\n\n$(function () {\n\n  \"use strict\";\n\n  //Make the dashboard widgets sortable Using jquery UI\n  $(\".connectedSortable\").sortable({\n    placeholder: \"sort-highlight\",\n    connectWith: \".connectedSortable\",\n    handle: \".box-header, .nav-tabs\",\n    forcePlaceholderSize: true,\n    zIndex: 999999\n  });\n  $(\".connectedSortable .box-header, .connectedSortable .nav-tabs-custom\").css(\"cursor\", \"move\");\n\n  //jQuery UI sortable for the todo list\n  $(\".todo-list\").sortable({\n    placeholder: \"sort-highlight\",\n    handle: \".handle\",\n    forcePlaceholderSize: true,\n    zIndex: 999999\n  });\n\n  //bootstrap WYSIHTML5 - text editor\n  $(\".textarea\").wysihtml5();\n\n  $('.daterange').daterangepicker({\n    ranges: {\n      'Today': [moment(), moment()],\n      'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n      'Last 7 Days': [moment().subtract(6, 'days'), moment()],\n      'Last 30 Days': [moment().subtract(29, 'days'), moment()],\n      'This Month': [moment().startOf('month'), moment().endOf('month')],\n      'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]\n    },\n    startDate: moment().subtract(29, 'days'),\n    endDate: moment()\n  }, function (start, end) {\n    window.alert(\"You chose: \" + start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));\n  });\n\n  /* jQueryKnob */\n  $(\".knob\").knob();\n\n  //jvectormap data\n  var visitorsData = {\n    \"US\": 398, //USA\n    \"SA\": 400, //Saudi Arabia\n    \"CA\": 1000, //Canada\n    \"DE\": 500, //Germany\n    \"FR\": 760, //France\n    \"CN\": 300, //China\n    \"AU\": 700, //Australia\n    \"BR\": 600, //Brazil\n    \"IN\": 800, //India\n    \"GB\": 320, //Great Britain\n    \"RU\": 3000 //Russia\n  };\n  //World map by jvectormap\n  $('#world-map').vectorMap({\n    map: 'world_mill_en',\n    backgroundColor: \"transparent\",\n    regionStyle: {\n      initial: {\n        fill: '#e4e4e4',\n        \"fill-opacity\": 1,\n        stroke: 'none',\n        \"stroke-width\": 0,\n        \"stroke-opacity\": 1\n      }\n    },\n    series: {\n      regions: [{\n        values: visitorsData,\n        scale: [\"#92c1dc\", \"#ebf4f9\"],\n        normalizeFunction: 'polynomial'\n      }]\n    },\n    onRegionLabelShow: function (e, el, code) {\n      if (typeof visitorsData[code] != \"undefined\")\n        el.html(el.html() + ': ' + visitorsData[code] + ' new visitors');\n    }\n  });\n\n  //Sparkline charts\n  var myvalues = [1000, 1200, 920, 927, 931, 1027, 819, 930, 1021];\n  $('#sparkline-1').sparkline(myvalues, {\n    type: 'line',\n    lineColor: '#92c1dc',\n    fillColor: \"#ebf4f9\",\n    height: '50',\n    width: '80'\n  });\n  myvalues = [515, 519, 520, 522, 652, 810, 370, 627, 319, 630, 921];\n  $('#sparkline-2').sparkline(myvalues, {\n    type: 'line',\n    lineColor: '#92c1dc',\n    fillColor: \"#ebf4f9\",\n    height: '50',\n    width: '80'\n  });\n  myvalues = [15, 19, 20, 22, 33, 27, 31, 27, 19, 30, 21];\n  $('#sparkline-3').sparkline(myvalues, {\n    type: 'line',\n    lineColor: '#92c1dc',\n    fillColor: \"#ebf4f9\",\n    height: '50',\n    width: '80'\n  });\n\n  //The Calender\n  $(\"#calendar\").datepicker();\n\n  //SLIMSCROLL FOR CHAT WIDGET\n  $('#chat-box').slimScroll({\n    height: '250px'\n  });\n\n  /* Morris.js Charts */\n  // Sales chart\n  var area = new Morris.Area({\n    element: 'revenue-chart',\n    resize: true,\n    data: [\n      {y: '2011 Q1', item1: 2666, item2: 2666},\n      {y: '2011 Q2', item1: 2778, item2: 2294},\n      {y: '2011 Q3', item1: 4912, item2: 1969},\n      {y: '2011 Q4', item1: 3767, item2: 3597},\n      {y: '2012 Q1', item1: 6810, item2: 1914},\n      {y: '2012 Q2', item1: 5670, item2: 4293},\n      {y: '2012 Q3', item1: 4820, item2: 3795},\n      {y: '2012 Q4', item1: 15073, item2: 5967},\n      {y: '2013 Q1', item1: 10687, item2: 4460},\n      {y: '2013 Q2', item1: 8432, item2: 5713}\n    ],\n    xkey: 'y',\n    ykeys: ['item1', 'item2'],\n    labels: ['Item 1', 'Item 2'],\n    lineColors: ['#a0d0e0', '#3c8dbc'],\n    hideHover: 'auto'\n  });\n  var line = new Morris.Line({\n    element: 'line-chart',\n    resize: true,\n    data: [\n      {y: '2011 Q1', item1: 2666},\n      {y: '2011 Q2', item1: 2778},\n      {y: '2011 Q3', item1: 4912},\n      {y: '2011 Q4', item1: 3767},\n      {y: '2012 Q1', item1: 6810},\n      {y: '2012 Q2', item1: 5670},\n      {y: '2012 Q3', item1: 4820},\n      {y: '2012 Q4', item1: 15073},\n      {y: '2013 Q1', item1: 10687},\n      {y: '2013 Q2', item1: 8432}\n    ],\n    xkey: 'y',\n    ykeys: ['item1'],\n    labels: ['Item 1'],\n    lineColors: ['#efefef'],\n    lineWidth: 2,\n    hideHover: 'auto',\n    gridTextColor: \"#fff\",\n    gridStrokeWidth: 0.4,\n    pointSize: 4,\n    pointStrokeColors: [\"#efefef\"],\n    gridLineColor: \"#efefef\",\n    gridTextFamily: \"Open Sans\",\n    gridTextSize: 10\n  });\n\n  //Donut Chart\n  var donut = new Morris.Donut({\n    element: 'sales-chart',\n    resize: true,\n    colors: [\"#3c8dbc\", \"#f56954\", \"#00a65a\"],\n    data: [\n      {label: \"Download Sales\", value: 12},\n      {label: \"In-Store Sales\", value: 30},\n      {label: \"Mail-Order Sales\", value: 20}\n    ],\n    hideHover: 'auto'\n  });\n\n  //Fix for charts under tabs\n  $('.box ul.nav a').on('shown.bs.tab', function () {\n    area.redraw();\n    donut.redraw();\n    line.redraw();\n  });\n\n  /* The todo list plugin */\n  $(\".todo-list\").todolist({\n    onCheck: function (ele) {\n      window.console.log(\"The element has been checked\");\n      return ele;\n    },\n    onUncheck: function (ele) {\n      window.console.log(\"The element has been unchecked\");\n      return ele;\n    }\n  });\n\n});\n"
  },
  {
    "path": "public/adminlte/js/pages/dashboard2.js",
    "content": "$(function () {\n\n  'use strict';\n\n  /* ChartJS\n   * -------\n   * Here we will create a few charts using ChartJS\n   */\n\n  //-----------------------\n  //- MONTHLY SALES CHART -\n  //-----------------------\n\n  // Get context with jQuery - using jQuery's .get() method.\n  var salesChartCanvas = $(\"#salesChart\").get(0).getContext(\"2d\");\n  // This will get the first returned node in the jQuery collection.\n  var salesChart = new Chart(salesChartCanvas);\n\n  var salesChartData = {\n    labels: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\"],\n    datasets: [\n      {\n        label: \"Electronics\",\n        fillColor: \"rgb(210, 214, 222)\",\n        strokeColor: \"rgb(210, 214, 222)\",\n        pointColor: \"rgb(210, 214, 222)\",\n        pointStrokeColor: \"#c1c7d1\",\n        pointHighlightFill: \"#fff\",\n        pointHighlightStroke: \"rgb(220,220,220)\",\n        data: [65, 59, 80, 81, 56, 55, 40]\n      },\n      {\n        label: \"Digital Goods\",\n        fillColor: \"rgba(60,141,188,0.9)\",\n        strokeColor: \"rgba(60,141,188,0.8)\",\n        pointColor: \"#3b8bba\",\n        pointStrokeColor: \"rgba(60,141,188,1)\",\n        pointHighlightFill: \"#fff\",\n        pointHighlightStroke: \"rgba(60,141,188,1)\",\n        data: [28, 48, 40, 19, 86, 27, 90]\n      }\n    ]\n  };\n\n  var salesChartOptions = {\n    //Boolean - If we should show the scale at all\n    showScale: true,\n    //Boolean - Whether grid lines are shown across the chart\n    scaleShowGridLines: false,\n    //String - Colour of the grid lines\n    scaleGridLineColor: \"rgba(0,0,0,.05)\",\n    //Number - Width of the grid lines\n    scaleGridLineWidth: 1,\n    //Boolean - Whether to show horizontal lines (except X axis)\n    scaleShowHorizontalLines: true,\n    //Boolean - Whether to show vertical lines (except Y axis)\n    scaleShowVerticalLines: true,\n    //Boolean - Whether the line is curved between points\n    bezierCurve: true,\n    //Number - Tension of the bezier curve between points\n    bezierCurveTension: 0.3,\n    //Boolean - Whether to show a dot for each point\n    pointDot: false,\n    //Number - Radius of each point dot in pixels\n    pointDotRadius: 4,\n    //Number - Pixel width of point dot stroke\n    pointDotStrokeWidth: 1,\n    //Number - amount extra to add to the radius to cater for hit detection outside the drawn point\n    pointHitDetectionRadius: 20,\n    //Boolean - Whether to show a stroke for datasets\n    datasetStroke: true,\n    //Number - Pixel width of dataset stroke\n    datasetStrokeWidth: 2,\n    //Boolean - Whether to fill the dataset with a color\n    datasetFill: true,\n    //String - A legend template\n    legendTemplate: \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\\\"background-color:<%=datasets[i].lineColor%>\\\"></span><%=datasets[i].label%></li><%}%></ul>\",\n    //Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container\n    maintainAspectRatio: true,\n    //Boolean - whether to make the chart responsive to window resizing\n    responsive: true\n  };\n\n  //Create the line chart\n  salesChart.Line(salesChartData, salesChartOptions);\n\n  //---------------------------\n  //- END MONTHLY SALES CHART -\n  //---------------------------\n\n  //-------------\n  //- PIE CHART -\n  //-------------\n  // Get context with jQuery - using jQuery's .get() method.\n  var pieChartCanvas = $(\"#pieChart\").get(0).getContext(\"2d\");\n  var pieChart = new Chart(pieChartCanvas);\n  var PieData = [\n    {\n      value: 700,\n      color: \"#f56954\",\n      highlight: \"#f56954\",\n      label: \"Chrome\"\n    },\n    {\n      value: 500,\n      color: \"#00a65a\",\n      highlight: \"#00a65a\",\n      label: \"IE\"\n    },\n    {\n      value: 400,\n      color: \"#f39c12\",\n      highlight: \"#f39c12\",\n      label: \"FireFox\"\n    },\n    {\n      value: 600,\n      color: \"#00c0ef\",\n      highlight: \"#00c0ef\",\n      label: \"Safari\"\n    },\n    {\n      value: 300,\n      color: \"#3c8dbc\",\n      highlight: \"#3c8dbc\",\n      label: \"Opera\"\n    },\n    {\n      value: 100,\n      color: \"#d2d6de\",\n      highlight: \"#d2d6de\",\n      label: \"Navigator\"\n    }\n  ];\n  var pieOptions = {\n    //Boolean - Whether we should show a stroke on each segment\n    segmentShowStroke: true,\n    //String - The colour of each segment stroke\n    segmentStrokeColor: \"#fff\",\n    //Number - The width of each segment stroke\n    segmentStrokeWidth: 1,\n    //Number - The percentage of the chart that we cut out of the middle\n    percentageInnerCutout: 50, // This is 0 for Pie charts\n    //Number - Amount of animation steps\n    animationSteps: 100,\n    //String - Animation easing effect\n    animationEasing: \"easeOutBounce\",\n    //Boolean - Whether we animate the rotation of the Doughnut\n    animateRotate: true,\n    //Boolean - Whether we animate scaling the Doughnut from the centre\n    animateScale: false,\n    //Boolean - whether to make the chart responsive to window resizing\n    responsive: true,\n    // Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container\n    maintainAspectRatio: false,\n    //String - A legend template\n    legendTemplate: \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<segments.length; i++){%><li><span style=\\\"background-color:<%=segments[i].fillColor%>\\\"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>\",\n    //String - A tooltip template\n    tooltipTemplate: \"<%=value %> <%=label%> users\"\n  };\n  //Create pie or douhnut chart\n  // You can switch between pie and douhnut using the method below.\n  pieChart.Doughnut(PieData, pieOptions);\n  //-----------------\n  //- END PIE CHART -\n  //-----------------\n\n  /* jVector Maps\n   * ------------\n   * Create a world map with markers\n   */\n  $('#world-map-markers').vectorMap({\n    map: 'world_mill_en',\n    normalizeFunction: 'polynomial',\n    hoverOpacity: 0.7,\n    hoverColor: false,\n    backgroundColor: 'transparent',\n    regionStyle: {\n      initial: {\n        fill: 'rgba(210, 214, 222, 1)',\n        \"fill-opacity\": 1,\n        stroke: 'none',\n        \"stroke-width\": 0,\n        \"stroke-opacity\": 1\n      },\n      hover: {\n        \"fill-opacity\": 0.7,\n        cursor: 'pointer'\n      },\n      selected: {\n        fill: 'yellow'\n      },\n      selectedHover: {}\n    },\n    markerStyle: {\n      initial: {\n        fill: '#00a65a',\n        stroke: '#111'\n      }\n    },\n    markers: [\n      {latLng: [41.90, 12.45], name: 'Vatican City'},\n      {latLng: [43.73, 7.41], name: 'Monaco'},\n      {latLng: [-0.52, 166.93], name: 'Nauru'},\n      {latLng: [-8.51, 179.21], name: 'Tuvalu'},\n      {latLng: [43.93, 12.46], name: 'San Marino'},\n      {latLng: [47.14, 9.52], name: 'Liechtenstein'},\n      {latLng: [7.11, 171.06], name: 'Marshall Islands'},\n      {latLng: [17.3, -62.73], name: 'Saint Kitts and Nevis'},\n      {latLng: [3.2, 73.22], name: 'Maldives'},\n      {latLng: [35.88, 14.5], name: 'Malta'},\n      {latLng: [12.05, -61.75], name: 'Grenada'},\n      {latLng: [13.16, -61.23], name: 'Saint Vincent and the Grenadines'},\n      {latLng: [13.16, -59.55], name: 'Barbados'},\n      {latLng: [17.11, -61.85], name: 'Antigua and Barbuda'},\n      {latLng: [-4.61, 55.45], name: 'Seychelles'},\n      {latLng: [7.35, 134.46], name: 'Palau'},\n      {latLng: [42.5, 1.51], name: 'Andorra'},\n      {latLng: [14.01, -60.98], name: 'Saint Lucia'},\n      {latLng: [6.91, 158.18], name: 'Federated States of Micronesia'},\n      {latLng: [1.3, 103.8], name: 'Singapore'},\n      {latLng: [1.46, 173.03], name: 'Kiribati'},\n      {latLng: [-21.13, -175.2], name: 'Tonga'},\n      {latLng: [15.3, -61.38], name: 'Dominica'},\n      {latLng: [-20.2, 57.5], name: 'Mauritius'},\n      {latLng: [26.02, 50.55], name: 'Bahrain'},\n      {latLng: [0.33, 6.73], name: 'São Tomé and Príncipe'}\n    ]\n  });\n\n  /* SPARKLINE CHARTS\n   * ----------------\n   * Create a inline charts with spark line\n   */\n\n  //-----------------\n  //- SPARKLINE BAR -\n  //-----------------\n  $('.sparkbar').each(function () {\n    var $this = $(this);\n    $this.sparkline('html', {\n      type: 'bar',\n      height: $this.data('height') ? $this.data('height') : '30',\n      barColor: $this.data('color')\n    });\n  });\n\n  //-----------------\n  //- SPARKLINE PIE -\n  //-----------------\n  $('.sparkpie').each(function () {\n    var $this = $(this);\n    $this.sparkline('html', {\n      type: 'pie',\n      height: $this.data('height') ? $this.data('height') : '90',\n      sliceColors: $this.data('color')\n    });\n  });\n\n  //------------------\n  //- SPARKLINE LINE -\n  //------------------\n  $('.sparkline').each(function () {\n    var $this = $(this);\n    $this.sparkline('html', {\n      type: 'line',\n      height: $this.data('height') ? $this.data('height') : '90',\n      width: '100%',\n      lineColor: $this.data('linecolor'),\n      fillColor: $this.data('fillcolor'),\n      spotColor: $this.data('spotcolor')\n    });\n  });\n});\n"
  },
  {
    "path": "public/adminlte/js/textext.core.js",
    "content": "/**\n * jQuery TextExt Plugin\n * http://textextjs.com\n *\n * @version 1.3.1\n * @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.\n * @license MIT License\n */\n(function($, undefined)\n{\n\t/**\n\t * TextExt is the main core class which by itself doesn't provide any functionality\n\t * that is user facing, however it has the underlying mechanics to bring all the\n\t * plugins together under one roof and make them work with each other or on their\n\t * own.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt\n\t */\n\tfunction TextExt() {};\n\n\t/**\n\t * ItemManager is used to seamlessly convert between string that come from the user input to whatever \n\t * the format the item data is being passed around in. It's used by all plugins that in one way or \n\t * another operate with items, such as Tags, Filter, Autocomplete and Suggestions. Default implementation \n\t * works with `String` type. \n\t *\n\t * Each instance of `TextExt` creates a new instance of default implementation of `ItemManager`\n\t * unless `itemManager` option was set to another implementation.\n\t *\n\t * To satisfy requirements of managing items of type other than a `String`, different implementation\n\t * if `ItemManager` should be supplied.\n\t *\n\t * If you wish to bring your own implementation, you need to create a new class and implement all the \n\t * methods that `ItemManager` has. After, you need to supply your pass via the `itemManager` option during\n\t * initialization like so:\n\t *\n\t *     $('#input').textext({\n\t *         itemManager : CustomItemManager\n\t *     })\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id ItemManager\n\t */\n\tfunction ItemManager() {};\n\n\t/**\n\t * TextExtPlugin is a base class for all plugins. It provides common methods which are reused\n\t * by majority of plugins.\n\t *\n\t * All plugins must register themselves by calling the `$.fn.textext.addPlugin(name, constructor)`\n\t * function while providing plugin name and constructor. The plugin name is the same name that user\n\t * will identify the plugin in the `plugins` option when initializing TextExt component and constructor\n\t * function will create a new instance of the plugin. *Without registering, the core won't\n\t * be able to see the plugin.*\n\t *\n\t * <span class=\"new label version\">new in 1.2.0</span> You can get instance of each plugin from the core \n\t * via associated function with the same name as the plugin. For example:\n\t *\n\t *     $('#input').textext()[0].tags()\n\t *     $('#input').textext()[0].autocomplete()\n\t *     ...\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin\n\t */\n\tfunction TextExtPlugin() {};\n\n\tvar stringify = (JSON || {}).stringify,\n\t\tslice     = Array.prototype.slice,\n\t\tp,\n\t\tUNDEFINED = 'undefined',\n\n\t\t/**\n\t\t * TextExt provides a way to pass in the options to configure the core as well as\n\t\t * each plugin that is being currently used. The jQuery exposed plugin `$().textext()` \n\t\t * function takes a hash object with key/value set of options. For example:\n\t\t *\n\t\t *     $('textarea').textext({\n\t\t *         enabled: true\n\t\t *     })\n\t\t *\n\t\t * There are multiple ways of passing in the options:\n\t\t *\n\t\t * 1. Options could be nested multiple levels deep and accessed using all lowercased, dot\n\t\t * separated style, eg `foo.bar.world`. The manual is using this style for clarity and\n\t\t * consistency. For example:\n\t\t *\n\t\t *        {\n\t\t *            item: {\n\t\t *                manager: ...\n\t\t *            },\n\t\t *\n\t\t *            html: {\n\t\t *                wrap: ...\n\t\t *            },\n\t\t *\n\t\t *            autocomplete: {\n\t\t *                enabled: ...,\n\t\t *                dropdown: {\n\t\t *                   position: ...\n\t\t *                }\n\t\t *            }\n\t\t *        }\n\t\t *\n\t\t * 2. Options could be specified using camel cased names in a flat key/value fashion like so:\n\t\t *\n\t\t *        {\n\t\t *            itemManager: ...,\n\t\t *            htmlWrap: ...,\n\t\t *            autocompleteEnabled: ...,\n\t\t *            autocompleteDropdownPosition: ...\n\t\t *        }\n\t\t *\n\t\t * 3. Finally, options could be specified in mixed style. It's important to understand that\n\t\t * for each dot separated name, its alternative in camel case is also checked for, eg for \n\t\t * `foo.bar.world` it's alternatives could be `fooBarWorld`, `foo.barWorld` or `fooBar.world`, \n\t\t * which translates to `{ foo: { bar: { world: ... } } }`, `{ fooBarWorld: ... }`, \n\t\t * `{ foo : { barWorld : ... } }` or `{ fooBar: { world: ... } }` respectively. For example:\n\t\t *\n\t\t *        {\n\t\t *            itemManager : ...,\n\t\t *            htmlWrap: ...,\n\t\t *            autocomplete: {\n\t\t *                enabled: ...,\n\t\t *                dropdownPosition: ...\n\t\t *            }\n\t\t *        }\n\t\t *\n\t\t * Mixed case is used through out the code, wherever it seems appropriate. However in the code, all option\n\t\t * names are specified in the dot notation because it works both ways where as camel case is not\n\t\t * being converted to its alternative dot notation.\n\t\t *\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/17\n\t\t * @id TextExt.options\n\t\t */\n\n\t\t/**\n\t\t * Default instance of `ItemManager` which takes `String` type as default for tags.\n\t\t *\n\t\t * @name item.manager\n\t\t * @default ItemManager\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.options.item.manager\n\t\t */\n\t\tOPT_ITEM_MANAGER = 'item.manager',\n\t\t\n\t\t/**\n\t\t * List of plugins that should be used with the current instance of TextExt. The list could be\n\t\t * specified as array of strings or as comma or space separated string.\n\t\t *\n\t\t * @name plugins\n\t\t * @default []\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.options.plugins\n\t\t */\n\t\tOPT_PLUGINS = 'plugins',\n\t\t\n\t\t/**\n\t\t * TextExt allows for overriding of virtually any method that the core or any of its plugins\n\t\t * use. This could be accomplished through the use of the `ext` option.\n\t\t *\n\t\t * It's possible to specifically target the core or any plugin, as well as overwrite all the\n\t\t * desired methods everywhere.\n\t\t *\n\t\t * 1. Targeting the core:\n\t\t *\n\t\t *        ext: {\n\t\t *            core: {\n\t\t *                trigger: function()\n\t\t *                {\n\t\t *                    console.log('TextExt.trigger', arguments);\n\t\t *                    $.fn.textext.TextExt.prototype.trigger.apply(this, arguments);\n\t\t *                }\n\t\t *            }\n\t\t *        }\n\t\t *\n\t\t * 2. Targeting individual plugins:\n\t\t *\n\t\t *        ext: {\n\t\t *            tags: {\n\t\t *                addTags: function(tags)\n\t\t *                {\n\t\t *                    console.log('TextExtTags.addTags', tags);\n\t\t *                    $.fn.textext.TextExtTags.prototype.addTags.apply(this, arguments);\n\t\t *                }\n\t\t *            }\n\t\t *        }\n\t\t *\n\t\t * 3. Targeting `ItemManager` instance:\n\t\t *\n\t\t *        ext: {\n\t\t *            itemManager: {\n\t\t *                stringToItem: function(str)\n\t\t *                {\n\t\t *                    console.log('ItemManager.stringToItem', str);\n\t\t *                    return $.fn.textext.ItemManager.prototype.stringToItem.apply(this, arguments);\n\t\t *                }\n\t\t *            }\n\t\t *        }\n\t\t *\n\t\t * 4. And finally, in edge cases you can extend everything at once:\n\t\t *\n\t\t *        ext: {\n\t\t *            '*': {\n\t\t *                fooBar: function() {}\n\t\t *            }\n\t\t *        }\n\t\t *\n\t\t * @name ext\n\t\t * @default {}\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.options.ext\n\t\t */\n\t\tOPT_EXT = 'ext',\n\t\t\n\t\t/**\n\t\t * HTML source that is used to generate elements necessary for the core and all other\n\t\t * plugins to function.\n\t\t *\n\t\t * @name html.wrap\n\t\t * @default '<div class=\"text-core\"><div class=\"text-wrap\"/></div>'\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.options.html.wrap\n\t\t */\n\t\tOPT_HTML_WRAP = 'html.wrap',\n\n\t\t/**\n\t\t * HTML source that is used to generate hidden input value of which will be submitted \n\t\t * with the HTML form.\n\t\t *\n\t\t * @name html.hidden\n\t\t * @default '<input type=\"hidden\" />'\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/20\n\t\t * @id TextExt.options.html.hidden\n\t\t */\n\t\tOPT_HTML_HIDDEN = 'html.hidden',\n\t\t\n\t\t/**\n\t\t * Hash table of key codes and key names for which special events will be created\n\t\t * by the core. For each entry a `[name]KeyDown`, `[name]KeyUp` and `[name]KeyPress` events \n\t\t * will be triggered along side with `anyKeyUp` and `anyKeyDown` events for every \n\t\t * key stroke.\n\t\t *\n\t\t * Here's a list of default keys:\n\t\t *\n\t\t *     {\n\t\t *         8   : 'backspace',\n\t\t *         9   : 'tab',\n\t\t *         13  : 'enter!',\n\t\t *         27  : 'escape!',\n\t\t *         37  : 'left',\n\t\t *         38  : 'up!',\n\t\t *         39  : 'right',\n\t\t *         40  : 'down!',\n\t\t *         46  : 'delete',\n\t\t *         108 : 'numpadEnter'\n\t\t *     }\n\t\t *\n\t\t * Please note the `!` at the end of some keys. This tells the core that by default\n\t\t * this keypress will be trapped and not passed on to the text input.\n\t\t *\n\t\t * @name keys\n\t\t * @default { ... }\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.options.keys\n\t\t */\n\t\tOPT_KEYS = 'keys',\n\n\t\t/**\n\t\t * The core triggers or reacts to the following events.\n\t\t *\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/17\n\t\t * @id TextExt.events\n\t\t */\n\n\t\t/**\n\t\t * Core triggers `preInvalidate` event before the dimensions of padding on the text input\n\t\t * are set.\n\t\t *\n\t\t * @name preInvalidate\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.preInvalidate\n\t\t */\n\t\tEVENT_PRE_INVALIDATE = 'preInvalidate',\n\n\t\t/**\n\t\t * Core triggers `postInvalidate` event after the dimensions of padding on the text input\n\t\t * are set.\n\t\t *\n\t\t * @name postInvalidate\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.postInvalidate\n\t\t */\n\t\tEVENT_POST_INVALIDATE = 'postInvalidate',\n\t\t\n\t\t/**\n\t\t * Core triggers `getFormData` on every key press to collect data that will be populated\n\t\t * into the hidden input that will be submitted with the HTML form and data that will\n\t\t * be displayed in the input field that user is currently interacting with.\n\t\t *\n\t\t * All plugins that wish to affect how the data is presented or sent must react to \n\t\t * `getFormData` and populate the data in the following format:\n\t\t *\n\t\t *     {\n\t\t *         input : {String},\n\t\t *         form  : {Object}\n\t\t *     }\n\t\t *\n\t\t * The data key must be a numeric weight which will be used to determine which data\n\t\t * ends up being used. Data with the highest numerical weight gets the priority. This\n\t\t * allows plugins to set the final data regardless of their initialization order, which\n\t\t * otherwise would be impossible.\n\t\t *\n\t\t * For example, the Tags and Autocomplete plugins have to work side by side and Tags\n\t\t * plugin must get priority on setting the data. Therefore the Tags plugin sets data\n\t\t * with the weight 200 where as the Autocomplete plugin sets data with the weight 100.\n\t\t *\n\t\t * Here's an example of a typical `getFormData` handler:\n\t\t * \n\t\t *     TextExtPlugin.prototype.onGetFormData = function(e, data, keyCode)\n\t\t *     {\n\t\t *         data[100] = self.formDataObject('input value', 'form value');\n\t\t *     };\n\t\t *\n\t\t * Core also reacts to the `getFormData` and updates hidden input with data which will be\n\t\t * submitted with the HTML form.\n\t\t *\n\t\t * @name getFormData\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.getFormData\n\t\t */\n\t\tEVENT_GET_FORM_DATA = 'getFormData',\n\n\t\t/**\n\t\t * Core triggers and reacts to the `setFormData` event to update the actual value in the\n\t\t * hidden input that will be submitted with the HTML form. Second argument can be value\n\t\t * of any type and by default it will be JSON serialized with `TextExt.serializeData()`\n\t\t * function.\n\t\t *\n\t\t * @name setFormData\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/22\n\t\t * @id TextExt.events.setFormData\n\t\t */\n\t\tEVENT_SET_FORM_DATA = 'setFormData',\n\n\t\t/**\n\t\t * Core triggers and reacts to the `setInputData` event to update the actual value in the\n\t\t * text input that user is interacting with. Second argument must be of a `String` type\n\t\t * the value of which will be set into the text input.\n\t\t *\n\t\t * @name setInputData\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/22\n\t\t * @id TextExt.events.setInputData\n\t\t */\n\t\tEVENT_SET_INPUT_DATA = 'setInputData',\n\t\t\n\t\t/**\n\t\t * Core triggers `postInit` event to let plugins run code after all plugins have been \n\t\t * created and initialized. This is a good place to set some kind of global values before \n\t\t * somebody gets to use them. This is not the right place to expect all plugins to finish\n\t\t * their initialization.\n\t\t *\n\t\t * @name postInit\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.postInit\n\t\t */\n\t\tEVENT_POST_INIT = 'postInit',\n\n\t\t/**\n\t\t * Core triggers `ready` event after all global configuration and prepearation has been\n\t\t * done and the TextExt component is ready for use. Event handlers should expect all \n\t\t * values to be set and the plugins to be in the final state.\n\t\t *\n\t\t * @name ready\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.ready\n\t\t */\n\t\tEVENT_READY = 'ready',\n\n\t\t/**\n\t\t * Core triggers `anyKeyUp` event for every key up event triggered within the component.\n\t\t *\n\t\t * @name anyKeyUp\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.anyKeyUp\n\t\t */\n\n\t\t/**\n\t\t * Core triggers `anyKeyDown` event for every key down event triggered within the component.\n\t\t *\n\t\t * @name anyKeyDown\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.anyKeyDown\n\t\t */\n\n\t\t/**\n\t\t * Core triggers `[name]KeyUp` event for every key specifid in the `keys` option that is \n\t\t * triggered within the component.\n\t\t *\n\t\t * @name [name]KeyUp\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.[name]KeyUp\n\t\t */\n\n\t\t/**\n\t\t * Core triggers `[name]KeyDown` event for every key specified in the `keys` option that is \n\t\t * triggered within the component.\n\t\t *\n\t\t * @name [name]KeyDown\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.[name]KeyDown\n\t\t */\n\n\t\t/**\n\t\t * Core triggers `[name]KeyPress` event for every key specified in the `keys` option that is \n\t\t * triggered within the component.\n\t\t *\n\t\t * @name [name]KeyPress\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.[name]KeyPress\n\t\t */\n\n\t\tDEFAULT_OPTS = {\n\t\t\titemManager : ItemManager,\n\n\t\t\tplugins : [],\n\t\t\text : {},\n\n\t\t\thtml : {\n\t\t\t\twrap   : '<div class=\"text-core\"><div class=\"text-wrap\"/></div>',\n\t\t\t\thidden : '<input type=\"hidden\" />'\n\t\t\t},\n\n\t\t\tkeys : {\n\t\t\t\t8   : 'backspace',\n\t\t\t\t9   : 'tab',\n\t\t\t\t13  : 'enter!',\n\t\t\t\t27  : 'escape!',\n\t\t\t\t37  : 'left',\n\t\t\t\t38  : 'up!',\n\t\t\t\t39  : 'right',\n\t\t\t\t40  : 'down!',\n\t\t\t\t46  : 'delete',\n\t\t\t\t108 : 'numpadEnter'\n\t\t\t}\n\t\t}\n\t\t;\n\n\t// Freak out if there's no JSON.stringify function found\n\tif(!stringify)\n\t\tthrow new Error('JSON.stringify() not found');\n\n\t/**\n\t * Returns object property by name where name is dot-separated and object is multiple levels deep.\n\t * @param target Object Source object.\n\t * @param name String Dot separated property name, ie `foo.bar.world`\n\t * @id core.getProperty\n\t */\n\tfunction getProperty(source, name)\n\t{\n\t\tif(typeof(name) === 'string')\n\t\t\tname = name.split('.');\n\n\t\tvar fullCamelCaseName = name.join('.').replace(/\\.(\\w)/g, function(match, letter) { return letter.toUpperCase() }),\n\t\t\tnestedName        = name.shift(),\n\t\t\tresult\n\t\t\t;\n\n\t\tif(typeof(result = source[fullCamelCaseName]) != UNDEFINED)\n\t\t\tresult = result;\n\n\t\telse if(typeof(result = source[nestedName]) != UNDEFINED && name.length > 0)\n\t\t\tresult = getProperty(result, name);\n\n\t\t// name.length here should be zero\n\t\treturn result;\n\t};\n\n\t/**\n\t * Hooks up specified events in the scope of the current object.\n\t * @author agorbatchev\n\t * @date 2011/08/09\n\t */\n\tfunction hookupEvents()\n\t{\n\t\tvar args   = slice.apply(arguments),\n\t\t\tself   = this,\n\t\t\ttarget = args.length === 1 ? self : args.shift(),\n\t\t\tevent\n\t\t\t;\n\n\t\targs = args[0] || {};\n\n\t\tfunction bind(event, handler)\n\t\t{\n\t\t\ttarget.bind(event, function()\n\t\t\t{\n\t\t\t\t// apply handler to our PLUGIN object, not the target\n\t\t\t\treturn handler.apply(self, arguments);\n\t\t\t});\n\t\t}\n\n\t\tfor(event in args)\n\t\t\tbind(event, args[event]);\n\t};\n\n\tfunction formDataObject(input, form)\n\t{\n\t\treturn { 'input' : input, 'form' : form };\n\t};\n\n\t//--------------------------------------------------------------------------------\n\t// ItemManager core component\n\t\n\tp = ItemManager.prototype;\n\n\t/**\n\t * Initialization method called by the core during instantiation.\n\t *\n\t * @signature ItemManager.init(core)\n\t *\n\t * @param core {TextExt} Instance of the TextExt core class.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id ItemManager.init\n\t */\n\tp.init = function(core)\n\t{\n\t};\n\n\t/**\n\t * Filters out items from the list that don't match the query and returns remaining items. Default \n\t * implementation checks if the item starts with the query.\n\t *\n\t * @signature ItemManager.filter(list, query)\n\t *\n\t * @param list {Array} List of items. Default implementation works with strings.\n\t * @param query {String} Query string.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id ItemManager.filter\n\t */\n\tp.filter = function(list, query)\n\t{\n\t\tvar result = [],\n\t\t\ti, item\n\t\t\t;\n\n\t\tfor(i = 0; i < list.length; i++)\n\t\t{\n\t\t\titem = list[i];\n\t\t\tif(this.itemContains(item, query))\n\t\t\t\tresult.push(item);\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t/**\n\t * Returns `true` if specified item contains another string, `false` otherwise. In the default implementation \n\t * `String.indexOf()` is used to check if item string begins with the needle string.\n\t *\n\t * @signature ItemManager.itemContains(item, needle)\n\t *\n\t * @param item {Object} Item to check. Default implementation works with strings.\n\t * @param needle {String} Search string to be found within the item.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id ItemManager.itemContains\n\t */\n\tp.itemContains = function(item, needle)\n\t{\n\t\treturn this.itemToString(item).toLowerCase().indexOf(needle.toLowerCase()) == 0;\n\t};\n\n\t/**\n\t * Converts specified string to item. Because default implemenation works with string, input string\n\t * is simply returned back. To use custom objects, different implementation of this method could\n\t * return something like `{ name : {String} }`.\n\t *\n\t * @signature ItemManager.stringToItem(str)\n\t *\n\t * @param str {String} Input string.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id ItemManager.stringToItem\n\t */\n\tp.stringToItem = function(str)\n\t{\n\t\treturn str;\n\t};\n\n\t/**\n\t * Converts specified item to string. Because default implemenation works with string, input string\n\t * is simply returned back. To use custom objects, different implementation of this method could\n\t * for example return `name` field of `{ name : {String} }`.\n\t *\n\t * @signature ItemManager.itemToString(item)\n\t *\n\t * @param item {Object} Input item to be converted to string.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id ItemManager.itemToString\n\t */\n\tp.itemToString = function(item)\n\t{\n\t\treturn item;\n\t};\n\n\t/**\n\t * Returns `true` if both items are equal, `false` otherwise. Because default implemenation works with \n\t * string, input items are compared as strings. To use custom objects, different implementation of this \n\t * method could for example compare `name` fields of `{ name : {String} }` type object.\n\t *\n\t * @signature ItemManager.compareItems(item1, item2)\n\t *\n\t * @param item1 {Object} First item.\n\t * @param item2 {Object} Second item.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id ItemManager.compareItems\n\t */\n\tp.compareItems = function(item1, item2)\n\t{\n\t\treturn item1 == item2;\n\t};\n\n\t//--------------------------------------------------------------------------------\n\t// TextExt core component\n\n\tp = TextExt.prototype;\n\t\t\n\t/**\n\t * Initializes current component instance with work with the supplied text input and options.\n\t *\n\t * @signature TextExt.init(input, opts)\n\t *\n\t * @param input {HTMLElement} Text input.\n\t * @param opts {Object} Options.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.init\n\t */\n\tp.init = function(input, opts)\n\t{\n\t\tvar self = this,\n\t\t\thiddenInput,\n\t\t\titemManager,\n\t\t\tcontainer\n\t\t\t;\n\n\t\tself._defaults    = $.extend({}, DEFAULT_OPTS);\n\t\tself._opts        = opts || {};\n\t\tself._plugins     = {};\n\t\tself._itemManager = itemManager = new (self.opts(OPT_ITEM_MANAGER))();\n\t\tinput             = $(input);\n\t\tcontainer         = $(self.opts(OPT_HTML_WRAP));\n\t\thiddenInput       = $(self.opts(OPT_HTML_HIDDEN));\n\n\t\tinput\n\t\t\t.wrap(container)\n\t\t\t.keydown(function(e) { return self.onKeyDown(e) })\n\t\t\t.keyup(function(e) { return self.onKeyUp(e) })\n\t\t\t.data('textext', self)\n\t\t\t;\n\n\t\t// keep references to html elements using jQuery.data() to avoid circular references\n\t\t$(self).data({\n\t\t\t'hiddenInput'   : hiddenInput,\n\t\t\t'wrapElement' : input.parents('.text-wrap').first(),\n\t\t\t'input'         : input\n\t\t});\n\n\t\t// set the name of the hidden input to the text input's name\n\t\thiddenInput.attr('name', input.attr('name'));\n\t\t// remove name attribute from the text input\n\t\tinput.attr('name', null);\n\t\t// add hidden input to the DOM\n\t\thiddenInput.insertAfter(input);\n\n\t\t$.extend(true, itemManager, self.opts(OPT_EXT + '.item.manager'));\n\t\t$.extend(true, self, self.opts(OPT_EXT + '.*'), self.opts(OPT_EXT + '.core'));\n\t\t\n\t\tself.originalWidth = input.outerWidth();\n\n\t\tself.invalidateBounds();\n\n\t\titemManager.init(self);\n\n\t\tself.initPatches();\n\t\tself.initPlugins(self.opts(OPT_PLUGINS), $.fn.textext.plugins);\n\n\t\tself.on({\n\t\t\tsetFormData  : self.onSetFormData,\n\t\t\tgetFormData  : self.onGetFormData,\n\t\t\tsetInputData : self.onSetInputData,\n\t\t\tanyKeyUp     : self.onAnyKeyUp\n\t\t});\n\n\t\tself.trigger(EVENT_POST_INIT);\n\t\tself.trigger(EVENT_READY);\n\n\t\tself.getFormData(0);\n\t};\n\n\t/**\n\t * Initialized all installed patches against current instance. The patches are initialized based on their\n\t * initialization priority which is returned by each patch's `initPriority()` method. Priority\n\t * is a `Number` where patches with higher value gets their `init()` method called before patches\n\t * with lower priority value.\n\t *\n\t * This facilitates initializing of patches in certain order to insure proper dependencies\n\t * regardless of which order they are loaded.\n\t *\n\t * By default all patches have the same priority - zero, which means they will be initialized\n\t * in rorder they are loaded, that is unless `initPriority()` is overriden.\n\t *\n\t * @signature TextExt.initPatches()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/10/11\n\t * @id TextExt.initPatches\n\t */\n\tp.initPatches = function()\n\t{\n\t\tvar list   = [],\n\t\t\tsource = $.fn.textext.patches,\n\t\t\tname\n\t\t\t;\n\n\t\tfor(name in source)\n\t\t\tlist.push(name);\n\n\t\tthis.initPlugins(list, source);\n\t};\n\n\t/**\n\t * Creates and initializes all specified plugins. The plugins are initialized based on their\n\t * initialization priority which is returned by each plugin's `initPriority()` method. Priority\n\t * is a `Number` where plugins with higher value gets their `init()` method called before plugins\n\t * with lower priority value.\n\t *\n\t * This facilitates initializing of plugins in certain order to insure proper dependencies\n\t * regardless of which order user enters them in the `plugins` option field.\n\t *\n\t * By default all plugins have the same priority - zero, which means they will be initialized\n\t * in the same order as entered by the user.\n\t *\n\t * @signature TextExt.initPlugins(plugins)\n\t *\n\t * @param plugins {Array} List of plugin names to initialize.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.initPlugins\n\t */\n\tp.initPlugins = function(plugins, source)\n\t{\n\t\tvar self = this,\n\t\t\text, name, plugin, initList = [], i\n\t\t\t;\n\n\t\tif(typeof(plugins) == 'string')\n\t\t\tplugins = plugins.split(/\\s*,\\s*|\\s+/g);\n\n\t\tfor(i = 0; i < plugins.length; i++)\n\t\t{\n\t\t\tname   = plugins[i];\n\t\t\tplugin = source[name];\n\n\t\t\tif(plugin)\n\t\t\t{\n\t\t\t\tself._plugins[name] = plugin = new plugin();\n\t\t\t\tself[name] = (function(plugin) { \n\t\t\t\t  return function(){ return plugin; } \n\t\t\t\t})(plugin);\n\t\t\t\tinitList.push(plugin);\n\t\t\t\t$.extend(true, plugin, self.opts(OPT_EXT + '.*'), self.opts(OPT_EXT + '.' + name));\n\t\t\t}\n\t\t}\n\n\t\t// sort plugins based on their priority values\n\t\tinitList.sort(function(p1, p2)\n\t\t{\n\t\t\tp1 = p1.initPriority();\n\t\t\tp2 = p2.initPriority();\n\n\t\t\treturn p1 === p2\n\t\t\t\t? 0\n\t\t\t\t: p1 < p2 ? 1 : -1\n\t\t\t\t;\n\t\t});\n\n\t\tfor(i = 0; i < initList.length; i++)\n\t\t\tinitList[i].init(self);\n\t};\n\n\t/**\n\t * Returns true if specified plugin is was instantiated for the current instance of core.\n\t *\n\t * @signature TextExt.hasPlugin(name)\n\t *\n\t * @param name {String} Name of the plugin to check.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/12/28\n\t * @id TextExt.hasPlugin\n\t * @version 1.1\n\t */\n\tp.hasPlugin = function(name)\n\t{\n\t\treturn !!this._plugins[name];\n\t};\n\n\t/**\n\t * Allows to add multiple event handlers which will be execued in the scope of the current object.\n\t * \n\t * @signature TextExt.on([target], handlers)\n\t *\n\t * @param target {Object} **Optional**. Target object which has traditional `bind(event, handler)` method.\n\t *                        Handler function will still be executed in the current object's scope.\n\t * @param handlers {Object} Key/value pairs of event names and handlers, eg `{ event: handler }`.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.on\n\t */\n\tp.on = hookupEvents;\n\n\t/**\n\t * Binds an event handler to the input box that user interacts with.\n\t *\n\t * @signature TextExt.bind(event, handler)\n\t *\n\t * @param event {String} Event name.\n\t * @param handler {Function} Event handler.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.bind\n\t */\n\tp.bind = function(event, handler)\n\t{\n\t\tthis.input().bind(event, handler);\n\t};\n\n\t/**\n\t * Triggers an event on the input box that user interacts with. All core events are originated here.\n\t * \n\t * @signature TextExt.trigger(event, ...args)\n\t *\n\t * @param event {String} Name of the event to trigger.\n\t * @param ...args All remaining arguments will be passed to the event handler.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.trigger\n\t */\n\tp.trigger = function()\n\t{\n\t\tvar args = arguments;\n\t\tthis.input().trigger(args[0], slice.call(args, 1));\n\t};\n\n\t/**\n\t * Returns instance of `itemManager` that is used by the component.\n\t *\n\t * @signature TextExt.itemManager()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.itemManager\n\t */\n\tp.itemManager = function()\n\t{\n\t\treturn this._itemManager;\n\t};\n\n\t/**\n\t * Returns jQuery input element with which user is interacting with.\n\t *\n\t * @signature TextExt.input()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/10\n\t * @id TextExt.input\n\t */\n\tp.input = function()\n\t{\n\t\treturn $(this).data('input');\n\t};\n\n\t/**\n\t * Returns option value for the specified option by name. If the value isn't found in the user\n\t * provided options, it will try looking for default value.\n\t *\n\t * @signature TextExt.opts(name)\n\t *\n\t * @param name {String} Option name as described in the options.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.opts\n\t */\n\tp.opts = function(name)\n\t{\n\t\tvar result = getProperty(this._opts, name);\n\t\treturn typeof(result) == 'undefined' ? getProperty(this._defaults, name) : result;\n\t};\n\n\t/**\n\t * Returns HTML element that was created from the `html.wrap` option. This is the top level HTML\n\t * container for the text input with which user is interacting with.\n\t *\n\t * @signature TextExt.wrapElement()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.wrapElement\n\t */\n\tp.wrapElement = function()\n\t{\n\t\treturn $(this).data('wrapElement');\n\t};\n\n\t/**\n\t * Updates container to match dimensions of the text input. Triggers `preInvalidate` and `postInvalidate`\n\t * events.\n\t *\n\t * @signature TextExt.invalidateBounds()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.invalidateBounds\n\t */\n\tp.invalidateBounds = function()\n\t{\n\t\tvar self      = this,\n\t\t\tinput     = self.input(),\n\t\t\twrap      = self.wrapElement(),\n\t\t\tcontainer = wrap.parent(),\n\t\t\twidth     = self.originalWidth + 'px',\n\t\t\theight\n\t\t\t;\n\n\t\tself.trigger(EVENT_PRE_INVALIDATE);\n\n\t\theight = input.outerHeight() + 'px';\n\n\t\t// using css() method instead of width() and height() here because they don't seem to do the right thing in jQuery 1.8.x\n\t\t// https://github.com/alexgorbatchev/jquery-textext/issues/74\n\t\tinput.css({ 'width' : width });\n\t\twrap.css({ 'width' : width, 'height' : height });\n\t\tcontainer.css({ 'height' : height }); \n\n\t\tself.trigger(EVENT_POST_INVALIDATE);\n\t};\n\n\t/**\n\t * Focuses user input on the text box.\n\t *\n\t * @signature TextExt.focusInput()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.focusInput\n\t */\n\tp.focusInput = function()\n\t{\n\t\tthis.input()[0].focus();\n\t};\n\n\t/**\n\t * Serializes data for to be set into the hidden input field and which will be submitted \n\t * with the HTML form.\n\t *\n\t * By default simple JSON serialization is used. It's expected that `JSON.stringify`\n\t * method would be available either through built in class in most modern browsers\n\t * or through JSON2 library.\n\t *\n\t * @signature TextExt.serializeData(data)\n\t *\n\t * @param data {Object} Data to serialize.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/09\n\t * @id TextExt.serializeData\n\t */\n\tp.serializeData = stringify;\n\n\t/**\n\t * Returns the hidden input HTML element which will be submitted with the HTML form.\n\t *\n\t * @signature TextExt.hiddenInput()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/09\n\t * @id TextExt.hiddenInput\n\t */\n\tp.hiddenInput = function(value)\n\t{\n\t\treturn $(this).data('hiddenInput');\n\t};\n\n\t/**\n\t * Abstracted functionality to trigger an event and get the data with maximum weight set by all\n\t * the event handlers. This functionality is used for the `getFormData` event.\n\t *\n\t * @signature TextExt.getWeightedEventResponse(event, args)\n\t *\n\t * @param event {String} Event name.\n\t * @param args {Object} Argument to be passed with the event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExt.getWeightedEventResponse\n\t */\n\tp.getWeightedEventResponse = function(event, args)\n\t{\n\t\tvar self      = this,\n\t\t\tdata      = {},\n\t\t\tmaxWeight = 0\n\t\t\t;\n\n\t\tself.trigger(event, data, args);\n\n\t\tfor(var weight in data)\n\t\t\tmaxWeight = Math.max(maxWeight, weight);\n\n\t\treturn data[maxWeight];\n\t};\n\n\t/**\n\t * Triggers the `getFormData` event to get all the plugins to return their data.\n\t *\n\t * After the data is returned, triggers `setFormData` and `setInputData` to update appopriate values.\n\t *\n\t * @signature TextExt.getFormData(keyCode)\n\t *\n\t * @param keyCode {Number} Key code number which has triggered this update. It's impotant to pass\n\t * this value to the plugins because they might return different values based on the key that was \n\t * pressed. For example, the Tags plugin returns an empty string for the `input` value if the enter\n\t * key was pressed, otherwise it returns whatever is currently in the text input.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExt.getFormData\n\t */\n\tp.getFormData = function(keyCode)\n\t{\n\t\tvar self = this,\n\t\t\tdata = self.getWeightedEventResponse(EVENT_GET_FORM_DATA, keyCode || 0)\n\t\t\t;\n\n\t\tself.trigger(EVENT_SET_FORM_DATA  , data['form']);\n\t\tself.trigger(EVENT_SET_INPUT_DATA , data['input']);\n\t};\n\n\t//--------------------------------------------------------------------------------\n\t// Event handlers\n\n\t/**\n\t * Reacts to the `anyKeyUp` event and triggers the `getFormData` to change data that will be submitted\n\t * with the form. Default behaviour is that everything that is typed in will be JSON serialized, so\n\t * the end result will be a JSON string.\n\t *\n\t * @signature TextExt.onAnyKeyUp(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.onAnyKeyUp\n\t */\n\tp.onAnyKeyUp = function(e, keyCode)\n\t{\n\t\tthis.getFormData(keyCode);\n\t};\n\n\t/**\n\t * Reacts to the `setInputData` event and populates the input text field that user is currently\n\t * interacting with.\n\t *\n\t * @signature TextExt.onSetInputData(e, data)\n\t *\n\t * @param e {Event} jQuery event.\n\t * @param data {String} Value to be set.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExt.onSetInputData\n\t */\n\tp.onSetInputData = function(e, data)\n\t{\n\t\tthis.input().val(data);\n\t};\n\n\t/**\n\t * Reacts to the `setFormData` event and populates the hidden input with will be submitted with\n\t * the HTML form. The value will be serialized with `serializeData()` method.\n\t *\n\t * @signature TextExt.onSetFormData(e, data)\n\t *\n\t * @param e {Event} jQuery event.\n\t * @param data {Object} Data that will be set.\n\t * \n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExt.onSetFormData\n\t */\n\tp.onSetFormData = function(e, data)\n\t{\n\t\tvar self = this;\n\t\tself.hiddenInput().val(self.serializeData(data));\n\t};\n\n\t/**\n\t * Reacts to `getFormData` event triggered by the core. At the bare minimum the core will tell\n\t * itself to use the current value in the text input as the data to be submitted with the HTML\n\t * form.\n\t *\n\t * @signature TextExt.onGetFormData(e, data)\n\t *\n\t * @param e {Event} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/09\n\t * @id TextExt.onGetFormData\n\t */\n\tp.onGetFormData = function(e, data)\n\t{\n\t\tvar val = this.input().val();\n\t\tdata[0] = formDataObject(val, val);\n\t};\n\n\t//--------------------------------------------------------------------------------\n\t// User mouse/keyboard input\n\n\t/**\n\t * Triggers `[name]KeyUp` and `[name]KeyPress` for every keystroke as described in the events.\n\t *\n\t * @signature TextExt.onKeyUp(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.onKeyUp\n\t */\n\n\t/**\n\t * Triggers `[name]KeyDown` for every keystroke as described in the events.\n\t *\n\t * @signature TextExt.onKeyDown(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.onKeyDown\n\t */\n\t\n\t$(['Down', 'Up']).each(function()\n\t{\n\t\tvar type = this.toString();\n\n\t\tp['onKey' + type] = function(e)\n\t\t{\n\t\t\tvar self          = this,\n\t\t\t\tkeyName       = self.opts(OPT_KEYS)[e.keyCode],\n\t\t\t\tdefaultResult = true\n\t\t\t\t;\n\n\t\t\tif(keyName)\n\t\t\t{\n\t\t\t\tdefaultResult = keyName.substr(-1) != '!';\n\t\t\t\tkeyName       = keyName.replace('!', '');\n\n\t\t\t\tself.trigger(keyName + 'Key' + type);\n\n\t\t\t\t// manual *KeyPress event fimplementation for the function keys like Enter, Backspace, etc.\n\t\t\t\tif(type == 'Up' && self._lastKeyDown == e.keyCode)\n\t\t\t\t{\n\t\t\t\t\tself._lastKeyDown = null;\n\t\t\t\t\tself.trigger(keyName + 'KeyPress');\n\t\t\t\t}\n\n\t\t\t\tif(type == 'Down')\n\t\t\t\t\tself._lastKeyDown = e.keyCode;\n\t\t\t}\n\n\t\t\tself.trigger('anyKey' + type, e.keyCode);\n\n\t\t\treturn defaultResult;\n\t\t};\n\t});\n\n\t//--------------------------------------------------------------------------------\n\t// Plugin Base\n\t\n\tp = TextExtPlugin.prototype;\n\n\t/**\n\t * Allows to add multiple event handlers which will be execued in the scope of the current object.\n\t * \n\t * @signature TextExt.on([target], handlers)\n\t *\n\t * @param target {Object} **Optional**. Target object which has traditional `bind(event, handler)` method.\n\t *                        Handler function will still be executed in the current object's scope.\n\t * @param handlers {Object} Key/value pairs of event names and handlers, eg `{ event: handler }`.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.on\n\t */\n\tp.on = hookupEvents;\n\n\t/**\n\t * Returns the hash object that `getFormData` triggered by the core expects.\n\t *\n\t * @signature TextExtPlugin.formDataObject(input, form)\n\t *\n\t * @param input {String} Value that will go into the text input that user is interacting with.\n\t * @param form {Object} Value that will be serialized and put into the hidden that will be submitted\n\t * with the HTML form.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExtPlugin.formDataObject\n\t */\n\tp.formDataObject = formDataObject;\n\n\t/**\n\t * Initialization method called by the core during plugin instantiation. This method must be implemented\n\t * by each plugin individually.\n\t *\n\t * @signature TextExtPlugin.init(core)\n\t *\n\t * @param core {TextExt} Instance of the TextExt core class.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.init\n\t */\n\tp.init = function(core) { throw new Error('Not implemented') };\n\n\t/**\n\t * Initialization method wich should be called by the plugin during the `init()` call.\n\t *\n\t * @signature TextExtPlugin.baseInit(core, defaults)\n\t *\n\t * @param core {TextExt} Instance of the TextExt core class.\n\t * @param defaults {Object} Default plugin options. These will be checked if desired value wasn't\n\t * found in the options supplied by the user.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.baseInit\n\t */\n\tp.baseInit = function(core, defaults)\n\t{\n\t\tvar self = this;\n\n\t\tcore._defaults = $.extend(true, core._defaults, defaults);\n\t\tself._core     = core;\n\t\tself._timers   = {};\n\t};\n\n\t/**\n\t * Allows starting of multiple timeout calls. Each time this method is called with the same\n\t * timer name, the timer is reset. This functionality is useful in cases where an action needs\n\t * to occur only after a certain period of inactivity. For example, making an AJAX call after \n\t * user stoped typing for 1 second.\n\t *\n\t * @signature TextExtPlugin.startTimer(name, delay, callback)\n\t *\n\t * @param name {String} Timer name.\n\t * @param delay {Number} Delay in seconds.\n\t * @param callback {Function} Callback function.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/25\n\t * @id TextExtPlugin.startTimer\n\t */\n\tp.startTimer = function(name, delay, callback)\n\t{\n\t\tvar self = this;\n\n\t\tself.stopTimer(name);\n\n\t\tself._timers[name] = setTimeout(\n\t\t\tfunction()\n\t\t\t{\n\t\t\t\tdelete self._timers[name];\n\t\t\t\tcallback.apply(self);\n\t\t\t},\n\t\t\tdelay * 1000\n\t\t);\n\t};\n\n\t/**\n\t * Stops the timer by name without resetting it.\n\t *\n\t * @signature TextExtPlugin.stopTimer(name)\n\t *\n\t * @param name {String} Timer name.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/25\n\t * @id TextExtPlugin.stopTimer\n\t */\n\tp.stopTimer = function(name)\n\t{\n\t\tclearTimeout(this._timers[name]);\n\t};\n\n\t/**\n\t * Returns instance of the `TextExt` to which current instance of the plugin is attached to.\n\t *\n\t * @signature TextExtPlugin.core()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.core\n\t */\n\tp.core = function()\n\t{\n\t\treturn this._core;\n\t};\n\n\t/**\n\t * Shortcut to the core's `opts()` method. Returns option value.\n\t *\n\t * @signature TextExtPlugin.opts(name)\n\t * \n\t * @param name {String} Option name as described in the options.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.opts\n\t */\n\tp.opts = function(name)\n\t{\n\t\treturn this.core().opts(name);\n\t};\n\n\t/**\n\t * Shortcut to the core's `itemManager()` method. Returns instance of the `ItemManger` that is\n\t * currently in use.\n\t *\n\t * @signature TextExtPlugin.itemManager()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.itemManager\n\t */\n\tp.itemManager = function()\n\t{\n\t\treturn this.core().itemManager();\n\t};\n\n\t/**\n\t * Shortcut to the core's `input()` method. Returns instance of the HTML element that represents\n\t * current text input.\n\t *\n\t * @signature TextExtPlugin.input()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.input\n\t */\n\tp.input = function()\n\t{\n\t\treturn this.core().input();\n\t};\n\n\t/**\n\t * Shortcut to the commonly used `this.input().val()` call to get or set value of the text input.\n\t *\n\t * @signature TextExtPlugin.val(value)\n\t *\n\t * @param value {String} Optional value. If specified, the value will be set, otherwise it will be\n\t * returned.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/20\n\t * @id TextExtPlugin.val\n\t */\n\tp.val = function(value)\n\t{\n\t\tvar input = this.input();\n\n\t\tif(typeof(value) === UNDEFINED)\n\t\t\treturn input.val();\n\t\telse\n\t\t\tinput.val(value);\n\t};\n\n\t/**\n\t * Shortcut to the core's `trigger()` method. Triggers specified event with arguments on the\n\t * component core.\n\t *\n\t * @signature TextExtPlugin.trigger(event, ...args)\n\t *\n\t * @param event {String} Name of the event to trigger.\n\t * @param ...args All remaining arguments will be passed to the event handler.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.trigger\n\t */\n\tp.trigger = function()\n\t{\n\t\tvar core = this.core();\n\t\tcore.trigger.apply(core, arguments);\n\t};\n\n\t/**\n\t * Shortcut to the core's `bind()` method. Binds specified handler to the event.\n\t *\n\t * @signature TextExtPlugin.bind(event, handler)\n\t *\n\t * @param event {String} Event name.\n\t * @param handler {Function} Event handler.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/20\n\t * @id TextExtPlugin.bind\n\t */\n\tp.bind = function(event, handler)\n\t{\n\t\tthis.core().bind(event, handler);\n\t};\n\n\t/**\n\t * Returns initialization priority for this plugin. If current plugin depends upon some other plugin\n\t * to be initialized before or after, priority needs to be adjusted accordingly. Plugins with higher\n\t * priority initialize before plugins with lower priority.\n\t *\n\t * Default initialization priority is `0`.\n\t *\n\t * @signature TextExtPlugin.initPriority()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExtPlugin.initPriority\n\t */\n\tp.initPriority = function()\n\t{\n\t\treturn 0;\n\t};\n\n\t//--------------------------------------------------------------------------------\n\t// jQuery Integration\n\t\n\t/**\n\t * TextExt integrates as a jQuery plugin available through the `$(selector).textext(opts)` call. If\n\t * `opts` argument is passed, then a new instance of `TextExt` will be created for all the inputs\n\t * that match the `selector`. If `opts` wasn't passed and TextExt was already intantiated for \n\t * inputs that match the `selector`, array of `TextExt` instances will be returned instead.\n\t *\n\t *     // will create a new instance of `TextExt` for all elements that match `.sample`\n\t *     $('.sample').textext({ ... });\n\t *\n\t *     // will return array of all `TextExt` instances\n\t *     var list = $('.sample').textext();\n\t *\n\t * The following properties are also exposed through the jQuery `$.fn.textext`:\n\t *\n\t * * `TextExt` -- `TextExt` class.\n\t * * `TextExtPlugin` -- `TextExtPlugin` class.\n\t * * `ItemManager` -- `ItemManager` class.\n\t * * `plugins` -- Key/value table of all registered plugins.\n\t * * `addPlugin(name, constructor)` -- All plugins should register themselves using this function.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.jquery\n\t */\n\n\tvar cssInjected = false;\n\n\tvar textext = $.fn.textext = function(opts)\n\t{\n\t\tvar css;\n\t\t\n\t\tif(!cssInjected && (css = $.fn.textext.css) != null)\n\t\t{\n\t\t\t$('head').append('<style>' + css + '</style>');\n\t\t\tcssInjected = true;\n\t\t}\n\n\t\treturn this.map(function()\n\t\t{\n\t\t\tvar self = $(this);\n\n\t\t\tif(opts == null)\n\t\t\t\treturn self.data('textext');\n\n\t\t\tvar instance = new TextExt();\n\n\t\t\tinstance.init(self, opts);\n\t\t\tself.data('textext', instance);\n\n\t\t\treturn instance.input()[0];\n\t\t});\n\t};\n\n\t/**\n\t * This static function registers a new plugin which makes it available through the `plugins` option\n\t * to the end user. The name specified here is the name the end user would put in the `plugins` option\n\t * to add this plugin to a new instance of TextExt.\n\t * \n\t * @signature $.fn.textext.addPlugin(name, constructor)\n\t *\n\t * @param name {String} Name of the plugin.\n\t * @param constructor {Function} Plugin constructor.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/10/11\n\t * @id TextExt.addPlugin\n\t */\n\ttextext.addPlugin = function(name, constructor)\n\t{\n\t\ttextext.plugins[name] = constructor;\n\t\tconstructor.prototype = new textext.TextExtPlugin();\n\t};\n\n\t/**\n\t * This static function registers a new patch which is added to each instance of TextExt. If you are\n\t * adding a new patch, make sure to call this method.\n\t * \n\t * @signature $.fn.textext.addPatch(name, constructor)\n\t *\n\t * @param name {String} Name of the patch.\n\t * @param constructor {Function} Patch constructor.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/10/11\n\t * @id TextExt.addPatch\n\t */\n\ttextext.addPatch = function(name, constructor)\n\t{\n\t\ttextext.patches[name] = constructor;\n\t\tconstructor.prototype = new textext.TextExtPlugin();\n\t};\n\n\ttextext.TextExt       = TextExt;\n\ttextext.TextExtPlugin = TextExtPlugin;\n\ttextext.ItemManager   = ItemManager;\n\ttextext.plugins       = {};\n\ttextext.patches       = {};\n})(jQuery);\n\n(function($)\n{\n\tfunction TextExtIE9Patches() {};\n\n\t$.fn.textext.TextExtIE9Patches = TextExtIE9Patches;\n\t$.fn.textext.addPatch('ie9',TextExtIE9Patches);\n\n\tvar p = TextExtIE9Patches.prototype;\n\n\tp.init = function(core)\n\t{\n\t\tif(navigator.userAgent.indexOf('MSIE 9') == -1)\n\t\t\treturn;\n\n\t\tvar self = this;\n\n\t\tcore.on({ postInvalidate : self.onPostInvalidate });\n\t};\n\n\tp.onPostInvalidate = function()\n\t{\n\t\tvar self  = this,\n\t\t\tinput = self.input(),\n\t\t\tval   = input.val()\n\t\t\t;\n\n\t\t// agorbatchev :: IE9 doesn't seem to update the padding if box-sizing is on until the\n\t\t// text box value changes, so forcing this change seems to do the trick of updating\n\t\t// IE's padding visually.\n\t\tinput.val(Math.random());\n\t\tinput.val(val);\n\t};\n})(jQuery);\n\n"
  },
  {
    "path": "public/adminlte/js/textext.plugin.tags.js",
    "content": "/**\n * jQuery TextExt Plugin\n * http://textextjs.com\n *\n * @version 1.3.1\n * @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.\n * @license MIT License\n */\n(function($)\n{\n\t/**\n\t * Tags plugin brings in the traditional tag functionality where user can assemble and\n\t * edit list of tags. Tags plugin works especially well together with Autocomplete, Filter,\n\t * Suggestions and Ajax plugins to provide full spectrum of features. It can also work on\n\t * its own and just do one thing -- tags.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags\n\t */\n\tfunction TextExtTags() {};\n\n\t$.fn.textext.TextExtTags = TextExtTags;\n\t$.fn.textext.addPlugin('tags', TextExtTags);\n\n\tvar p = TextExtTags.prototype,\n\n\t\tCSS_DOT             = '.',\n\t\tCSS_TAGS_ON_TOP     = 'text-tags-on-top',\n\t\tCSS_DOT_TAGS_ON_TOP = CSS_DOT + CSS_TAGS_ON_TOP,\n\t\tCSS_TAG             = 'text-tag',\n\t\tCSS_DOT_TAG         = CSS_DOT + CSS_TAG,\n\t\tCSS_TAGS            = 'text-tags',\n\t\tCSS_DOT_TAGS        = CSS_DOT + CSS_TAGS,\n\t\tCSS_LABEL           = 'text-label',\n\t\tCSS_DOT_LABEL       = CSS_DOT + CSS_LABEL,\n\t\tCSS_REMOVE          = 'text-remove',\n\t\tCSS_DOT_REMOVE      = CSS_DOT + CSS_REMOVE,\n\n\t\t/**\n\t\t * Tags plugin options are grouped under `tags` when passed to the\n\t\t * `$().textext()` function. For example:\n\t\t *\n\t\t *     $('textarea').textext({\n\t\t *         plugins: 'tags',\n\t\t *         tags: {\n\t\t *             items: [ \"tag1\", \"tag2\" ]\n\t\t *         }\n\t\t *     })\n\t\t *\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExtTags.options\n\t\t */\n\n\t\t/**\n\t\t * This is a toggle switch to enable or disable the Tags plugin. The value is checked\n\t\t * each time at the top level which allows you to toggle this setting on the fly.\n\t\t *\n\t\t * @name tags.enabled\n\t\t * @default true\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExtTags.options.tags.enabled\n\t\t */\n\t\tOPT_ENABLED = 'tags.enabled',\n\n\t\t/**\n\t\t * Allows to specify tags which will be added to the input by default upon initialization.\n\t\t * Each item in the array must be of the type that current `ItemManager` can understand.\n\t\t * Default type is `String`.\n\t\t *\n\t\t * @name tags.items\n\t\t * @default null\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExtTags.options.tags.items\n\t\t */\n\t\tOPT_ITEMS = 'tags.items',\n\n\t\t/**\n\t\t * HTML source that is used to generate a single tag.\n\t\t *\n\t\t * @name html.tag\n\t\t * @default '<div class=\"text-tags\"/>'\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExtTags.options.html.tag\n\t\t */\n\t\tOPT_HTML_TAG  = 'html.tag',\n\n\t\t/**\n\t\t * HTML source that is used to generate container for the tags.\n\t\t *\n\t\t * @name html.tags\n\t\t * @default '<div class=\"text-tag\"><div class=\"text-button\"><span class=\"text-label\"/><a class=\"text-remove\"/></div></div>'\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExtTags.options.html.tags\n\t\t */\n\t\tOPT_HTML_TAGS = 'html.tags',\n\n\t\t/**\n\t\t * Tags plugin dispatches or reacts to the following events.\n\t\t *\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/17\n\t\t * @id TextExtTags.events\n\t\t */\n\n\t\t/**\n\t\t * Tags plugin triggers the `isTagAllowed` event before adding each tag to the tag list. Other plugins have\n\t\t * an opportunity to interrupt this by setting `result` of the second argument to `false`. For example:\n\t\t *\n\t\t *     $('textarea').textext({...}).bind('isTagAllowed', function(e, data)\n\t\t *     {\n\t\t *         if(data.tag === 'foo')\n\t\t *             data.result = false;\n\t\t *     })\n\t\t *\n\t\t * The second argument `data` has the following format: `{ tag : {Object}, result : {Boolean} }`. `tag`\n\t\t * property is in the format that the current `ItemManager` can understand.\n\t\t *\n\t\t * @name isTagAllowed\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExtTags.events.isTagAllowed\n\t\t */\n\t\tEVENT_IS_TAG_ALLOWED = 'isTagAllowed',\n\n\t\t/**\n\t\t * Tags plugin triggers the `tagClick` event when user clicks on one of the tags. This allows to process\n\t\t * the click and potentially change the value of the tag (for example in case of user feedback).\n\t\t *\n\t\t *     $('textarea').textext({...}).bind('tagClick', function(e, tag, value, callback)\n\t\t *     {\n\t\t *         var newValue = window.prompt('New value', value);\n\n\t\t *         if(newValue)\n\t\t *             callback(newValue, true);\n\t\t *     })\n\t\t *\n\t\t *  Callback argument has the following signature:\n\t\t *\n\t\t *     function(newValue, refocus)\n\t\t *     {\n\t\t *         ...\n\t\t *     }\n\t\t *\n\t\t * Please check out [example](/manual/examples/tags-changing.html).\n\t\t *\n\t\t * @name tagClick\n\t\t * @version 1.3.0\n\t\t * @author s.stok\n\t\t * @date 2011/01/23\n\t\t * @id TextExtTags.events.tagClick\n\t\t */\n\t\tEVENT_TAG_CLICK = 'tagClick',\n\n\t\tDEFAULT_OPTS = {\n\t\t\ttags : {\n\t\t\t\tenabled : true,\n\t\t\t\titems   : null\n\t\t\t},\n\n\t\t\thtml : {\n\t\t\t\ttags : '<div class=\"text-tags\"/>',\n\t\t\t\ttag  : '<div class=\"text-tag\"><div class=\"text-button\"><span class=\"text-label\"/><a class=\"text-remove\"/></div></div>'\n\t\t\t}\n\t\t}\n\t\t;\n\n\t/**\n\t * Initialization method called by the core during plugin instantiation.\n\t *\n\t * @signature TextExtTags.init(core)\n\t *\n\t * @param core {TextExt} Instance of the TextExt core class.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.init\n\t */\n\tp.init = function(core)\n\t{\n\t\tthis.baseInit(core, DEFAULT_OPTS);\n\t\tvar self  = this,\n\t\t\tinput = self.input(),\n\t\t\tcontainer\n\t\t\t;\n\n\t\tif(self.opts(OPT_ENABLED))\n\t\t{\n\t\t\tcontainer = $(self.opts(OPT_HTML_TAGS));\n\t\t\tinput.after(container);\n\n\t\t\t$(self).data('container', container);\n\n\t\t\tself.on({\n\t\t\t\tenterKeyPress    : self.onEnterKeyPress,\n\t\t\t\tbackspaceKeyDown : self.onBackspaceKeyDown,\n\t\t\t\tpreInvalidate    : self.onPreInvalidate,\n\t\t\t\tpostInit         : self.onPostInit,\n\t\t\t\tgetFormData      : self.onGetFormData\n\t\t\t});\n\n\t\t\tself.on(container, {\n\t\t\t\tclick     : self.onClick,\n\t\t\t\tmousemove : self.onContainerMouseMove\n\t\t\t});\n\n\t\t\tself.on(input, {\n\t\t\t\tmousemove : self.onInputMouseMove\n\t\t\t});\n\t\t}\n\n\t\tself._originalPadding = {\n\t\t\tleft : parseInt(input.css('paddingLeft') || 0),\n\t\t\ttop  : parseInt(input.css('paddingTop') || 0)\n\t\t};\n\n\t\tself._paddingBox = {\n\t\t\tleft : 0,\n\t\t\ttop  : 0\n\t\t};\n\n\t\tself.updateFormCache();\n\t};\n\n\t/**\n\t * Returns HTML element in which all tag HTML elements are residing.\n\t *\n\t * @signature TextExtTags.containerElement()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/15\n\t * @id TextExtTags.containerElement\n\t */\n\tp.containerElement = function()\n\t{\n\t\treturn $(this).data('container');\n\t};\n\n\t//--------------------------------------------------------------------------------\n\t// Event handlers\n\n\t/**\n\t * Reacts to the `postInit` event triggered by the core and sets default tags\n\t * if any were specified.\n\t *\n\t * @signature TextExtTags.onPostInit(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/09\n\t * @id TextExtTags.onPostInit\n\t */\n\tp.onPostInit = function(e)\n\t{\n\t\tvar self = this;\n\t\tself.addTags(self.opts(OPT_ITEMS));\n\t};\n\n\t/**\n\t * Reacts to the [`getFormData`][1] event triggered by the core. Returns data with the\n\t * weight of 200 to be *greater than the Autocomplete plugin* data weight. The weights\n\t * system is covered in greater detail in the [`getFormData`][1] event documentation.\n\t *\n\t * [1]: /manual/textext.html#getformdata\n\t *\n\t * @signature TextExtTags.onGetFormData(e, data, keyCode)\n\t *\n\t * @param e {Object} jQuery event.\n\t * @param data {Object} Data object to be populated.\n\t * @param keyCode {Number} Key code that triggered the original update request.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExtTags.onGetFormData\n\t */\n\tp.onGetFormData = function(e, data, keyCode)\n\t{\n\t\tvar self       = this,\n\t\t\tinputValue = keyCode === 13 ? '' : self.val(),\n\t\t\tformValue  = self._formData\n\t\t\t;\n\n\t\tdata[200] = self.formDataObject(inputValue, formValue);\n\t};\n\n\t/**\n\t * Returns initialization priority of the Tags plugin which is expected to be\n\t * *less than the Autocomplete plugin* because of the dependencies. The value is\n\t * 100.\n\t *\n\t * @signature TextExtTags.initPriority()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExtTags.initPriority\n\t */\n\tp.initPriority = function()\n\t{\n\t\treturn 100;\n\t};\n\n\t/**\n\t * Reacts to user moving mouse over the text area when cursor is over the text\n\t * and not over the tags. Whenever mouse cursor is over the area covered by\n\t * tags, the tags container is flipped to be on top of the text area which\n\t * makes all tags functional with the mouse.\n\t *\n\t * @signature TextExtTags.onInputMouseMove(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/08\n\t * @id TextExtTags.onInputMouseMove\n\t */\n\tp.onInputMouseMove = function(e)\n\t{\n\t\tthis.toggleZIndex(e);\n\t};\n\n\t/**\n\t * Reacts to user moving mouse over the tags. Whenever the cursor moves out\n\t * of the tags and back into where the text input is happening visually,\n\t * the tags container is sent back under the text area which allows user\n\t * to interact with the text using mouse cursor as expected.\n\t *\n\t * @signature TextExtTags.onContainerMouseMove(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/08\n\t * @id TextExtTags.onContainerMouseMove\n\t */\n\tp.onContainerMouseMove = function(e)\n\t{\n\t\tthis.toggleZIndex(e);\n\t};\n\n\t/**\n\t * Reacts to the `backspaceKeyDown` event. When backspace key is pressed in an empty text field,\n\t * deletes last tag from the list.\n\t *\n\t * @signature TextExtTags.onBackspaceKeyDown(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/02\n\t * @id TextExtTags.onBackspaceKeyDown\n\t */\n\tp.onBackspaceKeyDown = function(e)\n\t{\n\t\tvar self    = this,\n\t\t\tlastTag = self.tagElements().last()\n\t\t\t;\n\n\t\tif(self.val().length == 0)\n\t\t\tself.removeTag(lastTag);\n\t};\n\n\t/**\n\t * Reacts to the `preInvalidate` event and updates the input box to look like the tags are\n\t * positioned inside it.\n\t *\n\t * @signature TextExtTags.onPreInvalidate(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.onPreInvalidate\n\t */\n\tp.onPreInvalidate = function(e)\n\t{\n\t\tvar self    = this,\n\t\t\tlastTag = self.tagElements().last(),\n\t\t\tpos     = lastTag.position()\n\t\t\t;\n\n\t\tif(lastTag.length > 0)\n\t\t\tpos.left += lastTag.innerWidth();\n\t\telse\n\t\t\tpos = self._originalPadding;\n\n\t\tself._paddingBox = pos;\n\n\t\tself.input().css({\n\t\t\tpaddingLeft : pos.left,\n\t\t\tpaddingTop  : pos.top\n\t\t});\n\t};\n\n\t/**\n\t * Reacts to the mouse `click` event.\n\t *\n\t * @signature TextExtTags.onClick(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.onClick\n\t */\n\tp.onClick = function(e)\n\t{\n\t\tvar self   = this,\n\t\t\tcore   = self.core(),\n\t\t\tsource = $(e.target),\n\t\t\tfocus  = 0,\n\t\t\ttag\n\t\t\t;\n\n\t\tif(source.is(CSS_DOT_TAGS))\n\t\t{\n\t\t\tfocus = 1;\n\t\t}\n\t\telse if(source.is(CSS_DOT_REMOVE))\n\t\t{\n\t\t\tself.removeTag(source.parents(CSS_DOT_TAG + ':first'));\n\t\t\tfocus = 1;\n\t\t}\n\t\telse if(source.is(CSS_DOT_LABEL))\n\t\t{\n\t\t\ttag = source.parents(CSS_DOT_TAG + ':first');\n\t\t\tself.trigger(EVENT_TAG_CLICK, tag, tag.data(CSS_TAG), tagClickCallback);\n\t\t}\n\n\t\tfunction tagClickCallback(newValue, refocus)\n\t\t{\n\t\t\ttag.data(CSS_TAG, newValue);\n\t\t\ttag.find(CSS_DOT_LABEL).text(self.itemManager().itemToString(newValue));\n\n\t\t\tself.updateFormCache();\n\t\t\tcore.getFormData();\n\t\t\tcore.invalidateBounds();\n\n\t\t\tif(refocus)\n\t\t\t\tcore.focusInput();\n\t\t}\n\n\t\tif(focus)\n\t\t\tcore.focusInput();\n\t};\n\n\t/**\n\t * Reacts to the `enterKeyPress` event and adds whatever is currently in the text input\n\t * as a new tag. Triggers `isTagAllowed` to check if the tag could be added first.\n\t *\n\t * @signature TextExtTags.onEnterKeyPress(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.onEnterKeyPress\n\t */\n\tp.onEnterKeyPress = function(e)\n\t{\n\t\tvar self = this,\n\t\t\tval  = self.val(),\n\t\t\ttag  = self.itemManager().stringToItem(val)\n\t\t\t;\n\n\t\tif(self.isTagAllowed(tag))\n\t\t{\n\t\t\tself.addTags([ tag ]);\n\t\t\t// refocus the textarea just in case it lost the focus\n\t\t\tself.core().focusInput();\n\t\t}\n\t};\n\n\t//--------------------------------------------------------------------------------\n\t// Core functionality\n\n\t/**\n\t * Creates a cache object with all the tags currently added which will be returned\n\t * in the `onGetFormData` handler.\n\t *\n\t * @signature TextExtTags.updateFormCache()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/09\n\t * @id TextExtTags.updateFormCache\n\t */\n\tp.updateFormCache = function()\n\t{\n\t\tvar self   = this,\n\t\t\tresult = []\n\t\t\t;\n\n\t\tself.tagElements().each(function()\n\t\t{\n\t\t\tresult.push($(this).data(CSS_TAG));\n\t\t});\n\n\t\t// cache the results to be used in the onGetFormData\n\t\tself._formData = result;\n\t};\n\n\t/**\n\t * Toggles tag container to be on top of the text area or under based on where\n\t * the mouse cursor is located. When cursor is above the text input and out of\n\t * any of the tags, the tags container is sent under the text area. If cursor\n\t * is over any of the tags, the tag container is brought to be over the text\n\t * area.\n\t *\n\t * @signature TextExtTags.toggleZIndex(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/08\n\t * @id TextExtTags.toggleZIndex\n\t */\n\tp.toggleZIndex = function(e)\n\t{\n\t\tvar self            = this,\n\t\t\toffset          = self.input().offset(),\n\t\t\tmouseX          = e.clientX - offset.left,\n\t\t\tmouseY          = e.clientY - offset.top,\n\t\t\tbox             = self._paddingBox,\n\t\t\tcontainer       = self.containerElement(),\n\t\t\tisOnTop         = container.is(CSS_DOT_TAGS_ON_TOP),\n\t\t\tisMouseOverText = mouseX > box.left && mouseY > box.top\n\t\t\t;\n\n\t\tif(!isOnTop && !isMouseOverText || isOnTop && isMouseOverText)\n\t\t\tcontainer[(!isOnTop ? 'add' : 'remove') + 'Class'](CSS_TAGS_ON_TOP);\n\t};\n\n\t/**\n\t * Returns all tag HTML elements.\n\t *\n\t * @signature TextExtTags.tagElements()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.tagElements\n\t */\n\tp.tagElements = function()\n\t{\n\t\treturn this.containerElement().find(CSS_DOT_TAG);\n\t};\n\n\t/**\n\t * Wrapper around the `isTagAllowed` event which triggers it and returns `true`\n\t * if `result` property of the second argument remains `true`.\n\t *\n\t * @signature TextExtTags.isTagAllowed(tag)\n\t *\n\t * @param tag {Object} Tag object that the current `ItemManager` can understand.\n\t * Default is `String`.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.isTagAllowed\n\t */\n\tp.isTagAllowed = function(tag)\n\t{\n\t\tvar opts = { tag : tag, result : true };\n\t\tthis.trigger(EVENT_IS_TAG_ALLOWED, opts);\n\t\treturn opts.result === true;\n\t};\n\n\t/**\n\t * Adds specified tags to the tag list. Triggers `isTagAllowed` event for each tag\n\t * to insure that it could be added. Calls `TextExt.getFormData()` to refresh the data.\n\t *\n\t * @signature TextExtTags.addTags(tags)\n\t *\n\t * @param tags {Array} List of tags that current `ItemManager` can understand. Default\n\t * is `String`.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.addTags\n\t */\n\tp.addTags = function(tags)\n\t{\n\t\tif(!tags || tags.length == 0)\n\t\t\treturn;\n\n\t\tvar self      = this,\n\t\t\tcore      = self.core(),\n\t\t\tcontainer = self.containerElement(),\n\t\t\ti, tag\n\t\t\t;\n\n\t\tfor(i = 0; i < tags.length; i++)\n\t\t{\n\t\t\ttag = tags[i];\n\n\t\t\tif(tag && self.isTagAllowed(tag))\n\t\t\t\tcontainer.append(self.renderTag(tag));\n\t\t}\n\n\t\tself.updateFormCache();\n\t\tcore.getFormData();\n\t\tcore.invalidateBounds();\n\t};\n\n\t/**\n\t * Returns HTML element for the specified tag.\n\t *\n\t * @signature TextExtTags.getTagElement(tag)\n\t *\n\t * @param tag {Object} Tag object in the format that current `ItemManager` can understand.\n\t * Default is `String`.\n\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.getTagElement\n\t */\n\tp.getTagElement = function(tag)\n\t{\n\t\tvar self = this,\n\t\t\tlist = self.tagElements(),\n\t\t\ti, item\n\t\t\t;\n\n\t\tfor(i = 0; i < list.length; i++) {\n\t\t\titem = $(list[i]);\n\t\t\tif(self.itemManager().compareItems(item.data(CSS_TAG), tag))\n\t\t\t\treturn item;\n\t\t}\n\t\t\n\t\treturn null;\n\t};\n\n\t/**\n\t * Removes specified tag from the list. Calls `TextExt.getFormData()` to refresh the data.\n\t *\n\t * @signature TextExtTags.removeTag(tag)\n\t *\n\t * @param tag {Object} Tag object in the format that current `ItemManager` can understand.\n\t * Default is `String`.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.removeTag\n\t */\n\tp.removeTag = function(tag)\n\t{\n\t\tvar self = this,\n\t\t\tcore = self.core(),\n\t\t\telement\n\t\t\t;\n\n\t\tif(tag instanceof $)\n\t\t{\n\t\t\telement = tag;\n\t\t\ttag = tag.data(CSS_TAG);\n\t\t}\n\t\telse\n\t\t{\n\t\t\telement = self.getTagElement(tag);\n\t\t\tif (element === null) {\n\t\t\t\t//Tag does not exist\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\telement.remove();\n\t\tself.updateFormCache();\n\t\tcore.getFormData();\n\t\tcore.invalidateBounds();\n\t};\n\n\t/**\n\t * Creates and returns new HTML element from the source code specified in the `html.tag` option.\n\t *\n\t * @signature TextExtTags.renderTag(tag)\n\t *\n\t * @param tag {Object} Tag object in the format that current `ItemManager` can understand.\n\t * Default is `String`.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.renderTag\n\t */\n\tp.renderTag = function(tag)\n\t{\n\t\tvar self = this,\n\t\t\tnode = $(self.opts(OPT_HTML_TAG))\n\t\t\t;\n\n\t\tnode.find('.text-label').text(self.itemManager().itemToString(tag));\n\t\tnode.data(CSS_TAG, tag);\n\t\treturn node;\n\t};\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/js/timepicker.js",
    "content": "/*! jQuery Timepicker Addon - v1.6.1 - 2015-11-14\n * http://trentrichardson.com/examples/timepicker\n * Copyright (c) 2015 Trent Richardson; Licensed MIT */\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery', 'jquery-ui'], factory);\n    } else {\n        factory(jQuery);\n    }\n}(function ($) {\n\n    /*\n     * Lets not redefine timepicker, Prevent \"Uncaught RangeError: Maximum call stack size exceeded\"\n     */\n    $.ui.timepicker = $.ui.timepicker || {};\n    if ($.ui.timepicker.version) {\n        return;\n    }\n\n    /*\n     * Extend jQueryUI, get it started with our version number\n     */\n    $.extend($.ui, {\n        timepicker: {\n            version: \"1.6.1\"\n        }\n    });\n\n    /*\n     * Timepicker manager.\n     * Use the singleton instance of this class, $.timepicker, to interact with the time picker.\n     * Settings for (groups of) time pickers are maintained in an instance object,\n     * allowing multiple different settings on the same page.\n     */\n    var Timepicker = function () {\n        this.regional = []; // Available regional settings, indexed by language code\n        this.regional[''] = { // Default regional settings\n            currentText: 'Now',\n            closeText: 'Done',\n            amNames: ['AM', 'A'],\n            pmNames: ['PM', 'P'],\n            timeFormat: 'HH:mm',\n            timeSuffix: '',\n            timeOnlyTitle: 'Choose Time',\n            timeText: 'Time',\n            hourText: 'Hour',\n            minuteText: 'Minute',\n            secondText: 'Second',\n            millisecText: 'Millisecond',\n            microsecText: 'Microsecond',\n            timezoneText: 'Time Zone',\n            isRTL: false\n        };\n        this._defaults = { // Global defaults for all the datetime picker instances\n            showButtonPanel: true,\n            timeOnly: false,\n            timeOnlyShowDate: false,\n            showHour: null,\n            showMinute: null,\n            showSecond: null,\n            showMillisec: null,\n            showMicrosec: null,\n            showTimezone: null,\n            showTime: true,\n            stepHour: 1,\n            stepMinute: 1,\n            stepSecond: 1,\n            stepMillisec: 1,\n            stepMicrosec: 1,\n            hour: 0,\n            minute: 0,\n            second: 0,\n            millisec: 0,\n            microsec: 0,\n            timezone: null,\n            hourMin: 0,\n            minuteMin: 0,\n            secondMin: 0,\n            millisecMin: 0,\n            microsecMin: 0,\n            hourMax: 23,\n            minuteMax: 59,\n            secondMax: 59,\n            millisecMax: 999,\n            microsecMax: 999,\n            minDateTime: null,\n            maxDateTime: null,\n            maxTime: null,\n            minTime: null,\n            onSelect: null,\n            hourGrid: 0,\n            minuteGrid: 0,\n            secondGrid: 0,\n            millisecGrid: 0,\n            microsecGrid: 0,\n            alwaysSetTime: true,\n            separator: ' ',\n            altFieldTimeOnly: true,\n            altTimeFormat: null,\n            altSeparator: null,\n            altTimeSuffix: null,\n            altRedirectFocus: true,\n            pickerTimeFormat: null,\n            pickerTimeSuffix: null,\n            showTimepicker: true,\n            timezoneList: null,\n            addSliderAccess: false,\n            sliderAccessArgs: null,\n            controlType: 'slider',\n            oneLine: false,\n            defaultValue: null,\n            parse: 'strict',\n            afterInject: null\n        };\n        $.extend(this._defaults, this.regional['']);\n    };\n\n    $.extend(Timepicker.prototype, {\n        $input: null,\n        $altInput: null,\n        $timeObj: null,\n        inst: null,\n        hour_slider: null,\n        minute_slider: null,\n        second_slider: null,\n        millisec_slider: null,\n        microsec_slider: null,\n        timezone_select: null,\n        maxTime: null,\n        minTime: null,\n        hour: 0,\n        minute: 0,\n        second: 0,\n        millisec: 0,\n        microsec: 0,\n        timezone: null,\n        hourMinOriginal: null,\n        minuteMinOriginal: null,\n        secondMinOriginal: null,\n        millisecMinOriginal: null,\n        microsecMinOriginal: null,\n        hourMaxOriginal: null,\n        minuteMaxOriginal: null,\n        secondMaxOriginal: null,\n        millisecMaxOriginal: null,\n        microsecMaxOriginal: null,\n        ampm: '',\n        formattedDate: '',\n        formattedTime: '',\n        formattedDateTime: '',\n        timezoneList: null,\n        units: ['hour', 'minute', 'second', 'millisec', 'microsec'],\n        support: {},\n        control: null,\n\n        /*\n         * Override the default settings for all instances of the time picker.\n         * @param  {Object} settings  object - the new settings to use as defaults (anonymous object)\n         * @return {Object} the manager object\n         */\n        setDefaults: function (settings) {\n            extendRemove(this._defaults, settings || {});\n            return this;\n        },\n\n        /*\n         * Create a new Timepicker instance\n         */\n        _newInst: function ($input, opts) {\n            var tp_inst = new Timepicker(),\n                inlineSettings = {},\n                fns = {},\n                overrides, i;\n\n            for (var attrName in this._defaults) {\n                if (this._defaults.hasOwnProperty(attrName)) {\n                    var attrValue = $input.attr('time:' + attrName);\n                    if (attrValue) {\n                        try {\n                            inlineSettings[attrName] = eval(attrValue);\n                        } catch (err) {\n                            inlineSettings[attrName] = attrValue;\n                        }\n                    }\n                }\n            }\n\n            overrides = {\n                beforeShow: function (input, dp_inst) {\n                    if ($.isFunction(tp_inst._defaults.evnts.beforeShow)) {\n                        return tp_inst._defaults.evnts.beforeShow.call($input[0], input, dp_inst, tp_inst);\n                    }\n                },\n                onChangeMonthYear: function (year, month, dp_inst) {\n                    // Update the time as well : this prevents the time from disappearing from the $input field.\n                    // tp_inst._updateDateTime(dp_inst);\n                    if ($.isFunction(tp_inst._defaults.evnts.onChangeMonthYear)) {\n                        tp_inst._defaults.evnts.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst);\n                    }\n                },\n                onClose: function (dateText, dp_inst) {\n                    if (tp_inst.timeDefined === true && $input.val() !== '') {\n                        tp_inst._updateDateTime(dp_inst);\n                    }\n                    if ($.isFunction(tp_inst._defaults.evnts.onClose)) {\n                        tp_inst._defaults.evnts.onClose.call($input[0], dateText, dp_inst, tp_inst);\n                    }\n                }\n            };\n            for (i in overrides) {\n                if (overrides.hasOwnProperty(i)) {\n                    fns[i] = opts[i] || this._defaults[i] || null;\n                }\n            }\n\n            tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, opts, overrides, {\n                evnts: fns,\n                timepicker: tp_inst // add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');\n            });\n            tp_inst.amNames = $.map(tp_inst._defaults.amNames, function (val) {\n                return val.toUpperCase();\n            });\n            tp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function (val) {\n                return val.toUpperCase();\n            });\n\n            // detect which units are supported\n            tp_inst.support = detectSupport(\n                tp_inst._defaults.timeFormat +\n                (tp_inst._defaults.pickerTimeFormat ? tp_inst._defaults.pickerTimeFormat : '') +\n                (tp_inst._defaults.altTimeFormat ? tp_inst._defaults.altTimeFormat : ''));\n\n            // controlType is string - key to our this._controls\n            if (typeof(tp_inst._defaults.controlType) === 'string') {\n                if (tp_inst._defaults.controlType === 'slider' && typeof($.ui.slider) === 'undefined') {\n                    tp_inst._defaults.controlType = 'select';\n                }\n                tp_inst.control = tp_inst._controls[tp_inst._defaults.controlType];\n            }\n            // controlType is an object and must implement create, options, value methods\n            else {\n                tp_inst.control = tp_inst._defaults.controlType;\n            }\n\n            // prep the timezone options\n            var timezoneList = [-720, -660, -600, -570, -540, -480, -420, -360, -300, -270, -240, -210, -180, -120, -60,\n                0, 60, 120, 180, 210, 240, 270, 300, 330, 345, 360, 390, 420, 480, 525, 540, 570, 600, 630, 660, 690, 720, 765, 780, 840];\n            if (tp_inst._defaults.timezoneList !== null) {\n                timezoneList = tp_inst._defaults.timezoneList;\n            }\n            var tzl = timezoneList.length, tzi = 0, tzv = null;\n            if (tzl > 0 && typeof timezoneList[0] !== 'object') {\n                for (; tzi < tzl; tzi++) {\n                    tzv = timezoneList[tzi];\n                    timezoneList[tzi] = { value: tzv, label: $.timepicker.timezoneOffsetString(tzv, tp_inst.support.iso8601) };\n                }\n            }\n            tp_inst._defaults.timezoneList = timezoneList;\n\n            // set the default units\n            tp_inst.timezone = tp_inst._defaults.timezone !== null ? $.timepicker.timezoneOffsetNumber(tp_inst._defaults.timezone) :\n                ((new Date()).getTimezoneOffset() * -1);\n            tp_inst.hour = tp_inst._defaults.hour < tp_inst._defaults.hourMin ? tp_inst._defaults.hourMin :\n                tp_inst._defaults.hour > tp_inst._defaults.hourMax ? tp_inst._defaults.hourMax : tp_inst._defaults.hour;\n            tp_inst.minute = tp_inst._defaults.minute < tp_inst._defaults.minuteMin ? tp_inst._defaults.minuteMin :\n                tp_inst._defaults.minute > tp_inst._defaults.minuteMax ? tp_inst._defaults.minuteMax : tp_inst._defaults.minute;\n            tp_inst.second = tp_inst._defaults.second < tp_inst._defaults.secondMin ? tp_inst._defaults.secondMin :\n                tp_inst._defaults.second > tp_inst._defaults.secondMax ? tp_inst._defaults.secondMax : tp_inst._defaults.second;\n            tp_inst.millisec = tp_inst._defaults.millisec < tp_inst._defaults.millisecMin ? tp_inst._defaults.millisecMin :\n                tp_inst._defaults.millisec > tp_inst._defaults.millisecMax ? tp_inst._defaults.millisecMax : tp_inst._defaults.millisec;\n            tp_inst.microsec = tp_inst._defaults.microsec < tp_inst._defaults.microsecMin ? tp_inst._defaults.microsecMin :\n                tp_inst._defaults.microsec > tp_inst._defaults.microsecMax ? tp_inst._defaults.microsecMax : tp_inst._defaults.microsec;\n            tp_inst.ampm = '';\n            tp_inst.$input = $input;\n\n            if (tp_inst._defaults.altField) {\n                tp_inst.$altInput = $(tp_inst._defaults.altField);\n                if (tp_inst._defaults.altRedirectFocus === true) {\n                    tp_inst.$altInput.css({\n                        cursor: 'pointer'\n                    }).focus(function () {\n                        $input.trigger(\"focus\");\n                    });\n                }\n            }\n\n            if (tp_inst._defaults.minDate === 0 || tp_inst._defaults.minDateTime === 0) {\n                tp_inst._defaults.minDate = new Date();\n            }\n            if (tp_inst._defaults.maxDate === 0 || tp_inst._defaults.maxDateTime === 0) {\n                tp_inst._defaults.maxDate = new Date();\n            }\n\n            // datepicker needs minDate/maxDate, timepicker needs minDateTime/maxDateTime..\n            if (tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date) {\n                tp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime());\n            }\n            if (tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date) {\n                tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime());\n            }\n            if (tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date) {\n                tp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime());\n            }\n            if (tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date) {\n                tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime());\n            }\n            tp_inst.$input.bind('focus', function () {\n                tp_inst._onFocus();\n            });\n\n            return tp_inst;\n        },\n\n        /*\n         * add our sliders to the calendar\n         */\n        _addTimePicker: function (dp_inst) {\n            var currDT = $.trim((this.$altInput && this._defaults.altFieldTimeOnly) ? this.$input.val() + ' ' + this.$altInput.val() : this.$input.val());\n\n            this.timeDefined = this._parseTime(currDT);\n            this._limitMinMaxDateTime(dp_inst, false);\n            this._injectTimePicker();\n            this._afterInject();\n        },\n\n        /*\n         * parse the time string from input value or _setTime\n         */\n        _parseTime: function (timeString, withDate) {\n            if (!this.inst) {\n                this.inst = $.datepicker._getInst(this.$input[0]);\n            }\n\n            if (withDate || !this._defaults.timeOnly) {\n                var dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat');\n                try {\n                    var parseRes = parseDateTimeInternal(dp_dateFormat, this._defaults.timeFormat, timeString, $.datepicker._getFormatConfig(this.inst), this._defaults);\n                    if (!parseRes.timeObj) {\n                        return false;\n                    }\n                    $.extend(this, parseRes.timeObj);\n                } catch (err) {\n                    $.timepicker.log(\"Error parsing the date/time string: \" + err +\n                        \"\\ndate/time string = \" + timeString +\n                        \"\\ntimeFormat = \" + this._defaults.timeFormat +\n                        \"\\ndateFormat = \" + dp_dateFormat);\n                    return false;\n                }\n                return true;\n            } else {\n                var timeObj = $.datepicker.parseTime(this._defaults.timeFormat, timeString, this._defaults);\n                if (!timeObj) {\n                    return false;\n                }\n                $.extend(this, timeObj);\n                return true;\n            }\n        },\n\n        /*\n         * Handle callback option after injecting timepicker\n         */\n        _afterInject: function() {\n            var o = this.inst.settings;\n            if ($.isFunction(o.afterInject)) {\n                o.afterInject.call(this);\n            }\n        },\n\n        /*\n         * generate and inject html for timepicker into ui datepicker\n         */\n        _injectTimePicker: function () {\n            var $dp = this.inst.dpDiv,\n                o = this.inst.settings,\n                tp_inst = this,\n                litem = '',\n                uitem = '',\n                show = null,\n                max = {},\n                gridSize = {},\n                size = null,\n                i = 0,\n                l = 0;\n\n            // Prevent displaying twice\n            if ($dp.find(\"div.ui-timepicker-div\").length === 0 && o.showTimepicker) {\n                var noDisplay = ' ui_tpicker_unit_hide',\n                    html = '<div class=\"ui-timepicker-div' + (o.isRTL ? ' ui-timepicker-rtl' : '') + (o.oneLine && o.controlType === 'select' ? ' ui-timepicker-oneLine' : '') + '\"><dl>' + '<dt class=\"ui_tpicker_time_label' + ((o.showTime) ? '' : noDisplay) + '\">' + o.timeText + '</dt>' +\n                        '<dd class=\"ui_tpicker_time '+ ((o.showTime) ? '' : noDisplay) + '\"><input class=\"ui_tpicker_time_input\" ' + (o.timeInput ? '' : 'disabled') + '/></dd>';\n\n                // Create the markup\n                for (i = 0, l = this.units.length; i < l; i++) {\n                    litem = this.units[i];\n                    uitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);\n                    show = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];\n\n                    // Added by Peter Medeiros:\n                    // - Figure out what the hour/minute/second max should be based on the step values.\n                    // - Example: if stepMinute is 15, then minMax is 45.\n                    max[litem] = parseInt((o[litem + 'Max'] - ((o[litem + 'Max'] - o[litem + 'Min']) % o['step' + uitem])), 10);\n                    gridSize[litem] = 0;\n\n                    html += '<dt class=\"ui_tpicker_' + litem + '_label' + (show ? '' : noDisplay) + '\">' + o[litem + 'Text'] + '</dt>' +\n                        '<dd class=\"ui_tpicker_' + litem + (show ? '' : noDisplay) + '\"><div class=\"ui_tpicker_' + litem + '_slider' + (show ? '' : noDisplay) + '\"></div>';\n\n                    if (show && o[litem + 'Grid'] > 0) {\n                        html += '<div style=\"padding-left: 1px\"><table class=\"ui-tpicker-grid-label\"><tr>';\n\n                        if (litem === 'hour') {\n                            for (var h = o[litem + 'Min']; h <= max[litem]; h += parseInt(o[litem + 'Grid'], 10)) {\n                                gridSize[litem]++;\n                                var tmph = $.datepicker.formatTime(this.support.ampm ? 'hht' : 'HH', {hour: h}, o);\n                                html += '<td data-for=\"' + litem + '\">' + tmph + '</td>';\n                            }\n                        }\n                        else {\n                            for (var m = o[litem + 'Min']; m <= max[litem]; m += parseInt(o[litem + 'Grid'], 10)) {\n                                gridSize[litem]++;\n                                html += '<td data-for=\"' + litem + '\">' + ((m < 10) ? '0' : '') + m + '</td>';\n                            }\n                        }\n\n                        html += '</tr></table></div>';\n                    }\n                    html += '</dd>';\n                }\n\n                // Timezone\n                var showTz = o.showTimezone !== null ? o.showTimezone : this.support.timezone;\n                html += '<dt class=\"ui_tpicker_timezone_label' + (showTz ? '' : noDisplay) + '\">' + o.timezoneText + '</dt>';\n                html += '<dd class=\"ui_tpicker_timezone' + (showTz ? '' : noDisplay) + '\"></dd>';\n\n                // Create the elements from string\n                html += '</dl></div>';\n                var $tp = $(html);\n\n                // if we only want time picker...\n                if (o.timeOnly === true) {\n                    $tp.prepend('<div class=\"ui-widget-header ui-helper-clearfix ui-corner-all\">' + '<div class=\"ui-datepicker-title\">' + o.timeOnlyTitle + '</div>' + '</div>');\n                    $dp.find('.ui-datepicker-header, .ui-datepicker-calendar').hide();\n                }\n\n                // add sliders, adjust grids, add events\n                for (i = 0, l = tp_inst.units.length; i < l; i++) {\n                    litem = tp_inst.units[i];\n                    uitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);\n                    show = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];\n\n                    // add the slider\n                    tp_inst[litem + '_slider'] = tp_inst.control.create(tp_inst, $tp.find('.ui_tpicker_' + litem + '_slider'), litem, tp_inst[litem], o[litem + 'Min'], max[litem], o['step' + uitem]);\n\n                    // adjust the grid and add click event\n                    if (show && o[litem + 'Grid'] > 0) {\n                        size = 100 * gridSize[litem] * o[litem + 'Grid'] / (max[litem] - o[litem + 'Min']);\n                        $tp.find('.ui_tpicker_' + litem + ' table').css({\n                            width: size + \"%\",\n                            marginLeft: o.isRTL ? '0' : ((size / (-2 * gridSize[litem])) + \"%\"),\n                            marginRight: o.isRTL ? ((size / (-2 * gridSize[litem])) + \"%\") : '0',\n                            borderCollapse: 'collapse'\n                        }).find(\"td\").click(function (e) {\n                            var $t = $(this),\n                                h = $t.html(),\n                                n = parseInt(h.replace(/[^0-9]/g), 10),\n                                ap = h.replace(/[^apm]/ig),\n                                f = $t.data('for'); // loses scope, so we use data-for\n\n                            if (f === 'hour') {\n                                if (ap.indexOf('p') !== -1 && n < 12) {\n                                    n += 12;\n                                }\n                                else {\n                                    if (ap.indexOf('a') !== -1 && n === 12) {\n                                        n = 0;\n                                    }\n                                }\n                            }\n\n                            tp_inst.control.value(tp_inst, tp_inst[f + '_slider'], litem, n);\n\n                            tp_inst._onTimeChange();\n                            tp_inst._onSelectHandler();\n                        }).css({\n                            cursor: 'pointer',\n                            width: (100 / gridSize[litem]) + '%',\n                            textAlign: 'center',\n                            overflow: 'hidden'\n                        });\n                    } // end if grid > 0\n                } // end for loop\n\n                // Add timezone options\n                this.timezone_select = $tp.find('.ui_tpicker_timezone').append('<select></select>').find(\"select\");\n                $.fn.append.apply(this.timezone_select,\n                    $.map(o.timezoneList, function (val, idx) {\n                        return $(\"<option />\").val(typeof val === \"object\" ? val.value : val).text(typeof val === \"object\" ? val.label : val);\n                    }));\n                if (typeof(this.timezone) !== \"undefined\" && this.timezone !== null && this.timezone !== \"\") {\n                    var local_timezone = (new Date(this.inst.selectedYear, this.inst.selectedMonth, this.inst.selectedDay, 12)).getTimezoneOffset() * -1;\n                    if (local_timezone === this.timezone) {\n                        selectLocalTimezone(tp_inst);\n                    } else {\n                        this.timezone_select.val(this.timezone);\n                    }\n                } else {\n                    if (typeof(this.hour) !== \"undefined\" && this.hour !== null && this.hour !== \"\") {\n                        this.timezone_select.val(o.timezone);\n                    } else {\n                        selectLocalTimezone(tp_inst);\n                    }\n                }\n                this.timezone_select.change(function () {\n                    tp_inst._onTimeChange();\n                    tp_inst._onSelectHandler();\n                    tp_inst._afterInject();\n                });\n                // End timezone options\n\n                // inject timepicker into datepicker\n                var $buttonPanel = $dp.find('.ui-datepicker-buttonpane');\n                if ($buttonPanel.length) {\n                    $buttonPanel.before($tp);\n                } else {\n                    $dp.append($tp);\n                }\n\n                this.$timeObj = $tp.find('.ui_tpicker_time_input');\n                this.$timeObj.change(function () {\n                    var timeFormat = tp_inst.inst.settings.timeFormat;\n                    var parsedTime = $.datepicker.parseTime(timeFormat, this.value);\n                    var update = new Date();\n                    if (parsedTime) {\n                        update.setHours(parsedTime.hour);\n                        update.setMinutes(parsedTime.minute);\n                        update.setSeconds(parsedTime.second);\n                        $.datepicker._setTime(tp_inst.inst, update);\n                    } else {\n                        this.value = tp_inst.formattedTime;\n                        this.blur();\n                    }\n                });\n\n                if (this.inst !== null) {\n                    var timeDefined = this.timeDefined;\n                    this._onTimeChange();\n                    this.timeDefined = timeDefined;\n                }\n\n                // slideAccess integration: http://trentrichardson.com/2011/11/11/jquery-ui-sliders-and-touch-accessibility/\n                if (this._defaults.addSliderAccess) {\n                    var sliderAccessArgs = this._defaults.sliderAccessArgs,\n                        rtl = this._defaults.isRTL;\n                    sliderAccessArgs.isRTL = rtl;\n\n                    setTimeout(function () { // fix for inline mode\n                        if ($tp.find('.ui-slider-access').length === 0) {\n                            $tp.find('.ui-slider:visible').sliderAccess(sliderAccessArgs);\n\n                            // fix any grids since sliders are shorter\n                            var sliderAccessWidth = $tp.find('.ui-slider-access:eq(0)').outerWidth(true);\n                            if (sliderAccessWidth) {\n                                $tp.find('table:visible').each(function () {\n                                    var $g = $(this),\n                                        oldWidth = $g.outerWidth(),\n                                        oldMarginLeft = $g.css(rtl ? 'marginRight' : 'marginLeft').toString().replace('%', ''),\n                                        newWidth = oldWidth - sliderAccessWidth,\n                                        newMarginLeft = ((oldMarginLeft * newWidth) / oldWidth) + '%',\n                                        css = { width: newWidth, marginRight: 0, marginLeft: 0 };\n                                    css[rtl ? 'marginRight' : 'marginLeft'] = newMarginLeft;\n                                    $g.css(css);\n                                });\n                            }\n                        }\n                    }, 10);\n                }\n                // end slideAccess integration\n\n                tp_inst._limitMinMaxDateTime(this.inst, true);\n            }\n        },\n\n        /*\n         * This function tries to limit the ability to go outside the\n         * min/max date range\n         */\n        _limitMinMaxDateTime: function (dp_inst, adjustSliders) {\n            var o = this._defaults,\n                dp_date = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay);\n\n            if (!this._defaults.showTimepicker) {\n                return;\n            } // No time so nothing to check here\n\n            if ($.datepicker._get(dp_inst, 'minDateTime') !== null && $.datepicker._get(dp_inst, 'minDateTime') !== undefined && dp_date) {\n                var minDateTime = $.datepicker._get(dp_inst, 'minDateTime'),\n                    minDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);\n\n                if (this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null || this.microsecMinOriginal === null) {\n                    this.hourMinOriginal = o.hourMin;\n                    this.minuteMinOriginal = o.minuteMin;\n                    this.secondMinOriginal = o.secondMin;\n                    this.millisecMinOriginal = o.millisecMin;\n                    this.microsecMinOriginal = o.microsecMin;\n                }\n\n                if (dp_inst.settings.timeOnly || minDateTimeDate.getTime() === dp_date.getTime()) {\n                    this._defaults.hourMin = minDateTime.getHours();\n                    if (this.hour <= this._defaults.hourMin) {\n                        this.hour = this._defaults.hourMin;\n                        this._defaults.minuteMin = minDateTime.getMinutes();\n                        if (this.minute <= this._defaults.minuteMin) {\n                            this.minute = this._defaults.minuteMin;\n                            this._defaults.secondMin = minDateTime.getSeconds();\n                            if (this.second <= this._defaults.secondMin) {\n                                this.second = this._defaults.secondMin;\n                                this._defaults.millisecMin = minDateTime.getMilliseconds();\n                                if (this.millisec <= this._defaults.millisecMin) {\n                                    this.millisec = this._defaults.millisecMin;\n                                    this._defaults.microsecMin = minDateTime.getMicroseconds();\n                                } else {\n                                    if (this.microsec < this._defaults.microsecMin) {\n                                        this.microsec = this._defaults.microsecMin;\n                                    }\n                                    this._defaults.microsecMin = this.microsecMinOriginal;\n                                }\n                            } else {\n                                this._defaults.millisecMin = this.millisecMinOriginal;\n                                this._defaults.microsecMin = this.microsecMinOriginal;\n                            }\n                        } else {\n                            this._defaults.secondMin = this.secondMinOriginal;\n                            this._defaults.millisecMin = this.millisecMinOriginal;\n                            this._defaults.microsecMin = this.microsecMinOriginal;\n                        }\n                    } else {\n                        this._defaults.minuteMin = this.minuteMinOriginal;\n                        this._defaults.secondMin = this.secondMinOriginal;\n                        this._defaults.millisecMin = this.millisecMinOriginal;\n                        this._defaults.microsecMin = this.microsecMinOriginal;\n                    }\n                } else {\n                    this._defaults.hourMin = this.hourMinOriginal;\n                    this._defaults.minuteMin = this.minuteMinOriginal;\n                    this._defaults.secondMin = this.secondMinOriginal;\n                    this._defaults.millisecMin = this.millisecMinOriginal;\n                    this._defaults.microsecMin = this.microsecMinOriginal;\n                }\n            }\n\n            if ($.datepicker._get(dp_inst, 'maxDateTime') !== null && $.datepicker._get(dp_inst, 'maxDateTime') !== undefined && dp_date) {\n                var maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'),\n                    maxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);\n\n                if (this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null || this.millisecMaxOriginal === null) {\n                    this.hourMaxOriginal = o.hourMax;\n                    this.minuteMaxOriginal = o.minuteMax;\n                    this.secondMaxOriginal = o.secondMax;\n                    this.millisecMaxOriginal = o.millisecMax;\n                    this.microsecMaxOriginal = o.microsecMax;\n                }\n\n                if (dp_inst.settings.timeOnly || maxDateTimeDate.getTime() === dp_date.getTime()) {\n                    this._defaults.hourMax = maxDateTime.getHours();\n                    if (this.hour >= this._defaults.hourMax) {\n                        this.hour = this._defaults.hourMax;\n                        this._defaults.minuteMax = maxDateTime.getMinutes();\n                        if (this.minute >= this._defaults.minuteMax) {\n                            this.minute = this._defaults.minuteMax;\n                            this._defaults.secondMax = maxDateTime.getSeconds();\n                            if (this.second >= this._defaults.secondMax) {\n                                this.second = this._defaults.secondMax;\n                                this._defaults.millisecMax = maxDateTime.getMilliseconds();\n                                if (this.millisec >= this._defaults.millisecMax) {\n                                    this.millisec = this._defaults.millisecMax;\n                                    this._defaults.microsecMax = maxDateTime.getMicroseconds();\n                                } else {\n                                    if (this.microsec > this._defaults.microsecMax) {\n                                        this.microsec = this._defaults.microsecMax;\n                                    }\n                                    this._defaults.microsecMax = this.microsecMaxOriginal;\n                                }\n                            } else {\n                                this._defaults.millisecMax = this.millisecMaxOriginal;\n                                this._defaults.microsecMax = this.microsecMaxOriginal;\n                            }\n                        } else {\n                            this._defaults.secondMax = this.secondMaxOriginal;\n                            this._defaults.millisecMax = this.millisecMaxOriginal;\n                            this._defaults.microsecMax = this.microsecMaxOriginal;\n                        }\n                    } else {\n                        this._defaults.minuteMax = this.minuteMaxOriginal;\n                        this._defaults.secondMax = this.secondMaxOriginal;\n                        this._defaults.millisecMax = this.millisecMaxOriginal;\n                        this._defaults.microsecMax = this.microsecMaxOriginal;\n                    }\n                } else {\n                    this._defaults.hourMax = this.hourMaxOriginal;\n                    this._defaults.minuteMax = this.minuteMaxOriginal;\n                    this._defaults.secondMax = this.secondMaxOriginal;\n                    this._defaults.millisecMax = this.millisecMaxOriginal;\n                    this._defaults.microsecMax = this.microsecMaxOriginal;\n                }\n            }\n\n            if (dp_inst.settings.minTime!==null) {\n                var tempMinTime=new Date(\"01/01/1970 \" + dp_inst.settings.minTime);\n                if (this.hour<tempMinTime.getHours()) {\n                    this.hour=this._defaults.hourMin=tempMinTime.getHours();\n                    this.minute=this._defaults.minuteMin=tempMinTime.getMinutes();\n                } else if (this.hour===tempMinTime.getHours() && this.minute<tempMinTime.getMinutes()) {\n                    this.minute=this._defaults.minuteMin=tempMinTime.getMinutes();\n                } else {\n                    if (this._defaults.hourMin<tempMinTime.getHours()) {\n                        this._defaults.hourMin=tempMinTime.getHours();\n                        this._defaults.minuteMin=tempMinTime.getMinutes();\n                    } else if (this._defaults.hourMin===tempMinTime.getHours()===this.hour && this._defaults.minuteMin<tempMinTime.getMinutes()) {\n                        this._defaults.minuteMin=tempMinTime.getMinutes();\n                    } else {\n                        this._defaults.minuteMin=0;\n                    }\n                }\n            }\n\n            if (dp_inst.settings.maxTime!==null) {\n                var tempMaxTime=new Date(\"01/01/1970 \" + dp_inst.settings.maxTime);\n                if (this.hour>tempMaxTime.getHours()) {\n                    this.hour=this._defaults.hourMax=tempMaxTime.getHours();\n                    this.minute=this._defaults.minuteMax=tempMaxTime.getMinutes();\n                } else if (this.hour===tempMaxTime.getHours() && this.minute>tempMaxTime.getMinutes()) {\n                    this.minute=this._defaults.minuteMax=tempMaxTime.getMinutes();\n                } else {\n                    if (this._defaults.hourMax>tempMaxTime.getHours()) {\n                        this._defaults.hourMax=tempMaxTime.getHours();\n                        this._defaults.minuteMax=tempMaxTime.getMinutes();\n                    } else if (this._defaults.hourMax===tempMaxTime.getHours()===this.hour && this._defaults.minuteMax>tempMaxTime.getMinutes()) {\n                        this._defaults.minuteMax=tempMaxTime.getMinutes();\n                    } else {\n                        this._defaults.minuteMax=59;\n                    }\n                }\n            }\n\n            if (adjustSliders !== undefined && adjustSliders === true) {\n                var hourMax = parseInt((this._defaults.hourMax - ((this._defaults.hourMax - this._defaults.hourMin) % this._defaults.stepHour)), 10),\n                    minMax = parseInt((this._defaults.minuteMax - ((this._defaults.minuteMax - this._defaults.minuteMin) % this._defaults.stepMinute)), 10),\n                    secMax = parseInt((this._defaults.secondMax - ((this._defaults.secondMax - this._defaults.secondMin) % this._defaults.stepSecond)), 10),\n                    millisecMax = parseInt((this._defaults.millisecMax - ((this._defaults.millisecMax - this._defaults.millisecMin) % this._defaults.stepMillisec)), 10),\n                    microsecMax = parseInt((this._defaults.microsecMax - ((this._defaults.microsecMax - this._defaults.microsecMin) % this._defaults.stepMicrosec)), 10);\n\n                if (this.hour_slider) {\n                    this.control.options(this, this.hour_slider, 'hour', { min: this._defaults.hourMin, max: hourMax, step: this._defaults.stepHour });\n                    this.control.value(this, this.hour_slider, 'hour', this.hour - (this.hour % this._defaults.stepHour));\n                }\n                if (this.minute_slider) {\n                    this.control.options(this, this.minute_slider, 'minute', { min: this._defaults.minuteMin, max: minMax, step: this._defaults.stepMinute });\n                    this.control.value(this, this.minute_slider, 'minute', this.minute - (this.minute % this._defaults.stepMinute));\n                }\n                if (this.second_slider) {\n                    this.control.options(this, this.second_slider, 'second', { min: this._defaults.secondMin, max: secMax, step: this._defaults.stepSecond });\n                    this.control.value(this, this.second_slider, 'second', this.second - (this.second % this._defaults.stepSecond));\n                }\n                if (this.millisec_slider) {\n                    this.control.options(this, this.millisec_slider, 'millisec', { min: this._defaults.millisecMin, max: millisecMax, step: this._defaults.stepMillisec });\n                    this.control.value(this, this.millisec_slider, 'millisec', this.millisec - (this.millisec % this._defaults.stepMillisec));\n                }\n                if (this.microsec_slider) {\n                    this.control.options(this, this.microsec_slider, 'microsec', { min: this._defaults.microsecMin, max: microsecMax, step: this._defaults.stepMicrosec });\n                    this.control.value(this, this.microsec_slider, 'microsec', this.microsec - (this.microsec % this._defaults.stepMicrosec));\n                }\n            }\n\n        },\n\n        /*\n         * when a slider moves, set the internal time...\n         * on time change is also called when the time is updated in the text field\n         */\n        _onTimeChange: function () {\n            if (!this._defaults.showTimepicker) {\n                return;\n            }\n            var hour = (this.hour_slider) ? this.control.value(this, this.hour_slider, 'hour') : false,\n                minute = (this.minute_slider) ? this.control.value(this, this.minute_slider, 'minute') : false,\n                second = (this.second_slider) ? this.control.value(this, this.second_slider, 'second') : false,\n                millisec = (this.millisec_slider) ? this.control.value(this, this.millisec_slider, 'millisec') : false,\n                microsec = (this.microsec_slider) ? this.control.value(this, this.microsec_slider, 'microsec') : false,\n                timezone = (this.timezone_select) ? this.timezone_select.val() : false,\n                o = this._defaults,\n                pickerTimeFormat = o.pickerTimeFormat || o.timeFormat,\n                pickerTimeSuffix = o.pickerTimeSuffix || o.timeSuffix;\n\n            if (typeof(hour) === 'object') {\n                hour = false;\n            }\n            if (typeof(minute) === 'object') {\n                minute = false;\n            }\n            if (typeof(second) === 'object') {\n                second = false;\n            }\n            if (typeof(millisec) === 'object') {\n                millisec = false;\n            }\n            if (typeof(microsec) === 'object') {\n                microsec = false;\n            }\n            if (typeof(timezone) === 'object') {\n                timezone = false;\n            }\n\n            if (hour !== false) {\n                hour = parseInt(hour, 10);\n            }\n            if (minute !== false) {\n                minute = parseInt(minute, 10);\n            }\n            if (second !== false) {\n                second = parseInt(second, 10);\n            }\n            if (millisec !== false) {\n                millisec = parseInt(millisec, 10);\n            }\n            if (microsec !== false) {\n                microsec = parseInt(microsec, 10);\n            }\n            if (timezone !== false) {\n                timezone = timezone.toString();\n            }\n\n            var ampm = o[hour < 12 ? 'amNames' : 'pmNames'][0];\n\n            // If the update was done in the input field, the input field should not be updated.\n            // If the update was done using the sliders, update the input field.\n            var hasChanged = (\n                hour !== parseInt(this.hour,10) || // sliders should all be numeric\n                minute !== parseInt(this.minute,10) ||\n                second !== parseInt(this.second,10) ||\n                millisec !== parseInt(this.millisec,10) ||\n                microsec !== parseInt(this.microsec,10) ||\n                (this.ampm.length > 0 && (hour < 12) !== ($.inArray(this.ampm.toUpperCase(), this.amNames) !== -1)) ||\n                (this.timezone !== null && timezone !== this.timezone.toString()) // could be numeric or \"EST\" format, so use toString()\n            );\n\n            if (hasChanged) {\n\n                if (hour !== false) {\n                    this.hour = hour;\n                }\n                if (minute !== false) {\n                    this.minute = minute;\n                }\n                if (second !== false) {\n                    this.second = second;\n                }\n                if (millisec !== false) {\n                    this.millisec = millisec;\n                }\n                if (microsec !== false) {\n                    this.microsec = microsec;\n                }\n                if (timezone !== false) {\n                    this.timezone = timezone;\n                }\n\n                if (!this.inst) {\n                    this.inst = $.datepicker._getInst(this.$input[0]);\n                }\n\n                this._limitMinMaxDateTime(this.inst, true);\n            }\n            if (this.support.ampm) {\n                this.ampm = ampm;\n            }\n\n            // Updates the time within the timepicker\n            this.formattedTime = $.datepicker.formatTime(o.timeFormat, this, o);\n            if (this.$timeObj) {\n                var sPos = this.$timeObj[0].selectionStart;\n                var ePos = this.$timeObj[0].selectionEnd;\n                if (pickerTimeFormat === o.timeFormat) {\n                    this.$timeObj.val(this.formattedTime + pickerTimeSuffix);\n                }\n                else {\n                    this.$timeObj.val($.datepicker.formatTime(pickerTimeFormat, this, o) + pickerTimeSuffix);\n                }\n                this.$timeObj[0].setSelectionRange(sPos, ePos);\n            }\n\n            this.timeDefined = true;\n            if (hasChanged) {\n                this._updateDateTime();\n                //this.$input.focus(); // may automatically open the picker on setDate\n            }\n        },\n\n        /*\n         * call custom onSelect.\n         * bind to sliders slidestop, and grid click.\n         */\n        _onSelectHandler: function () {\n            var onSelect = this._defaults.onSelect || this.inst.settings.onSelect;\n            var inputEl = this.$input ? this.$input[0] : null;\n            if (onSelect && inputEl) {\n                onSelect.apply(inputEl, [this.formattedDateTime, this]);\n            }\n        },\n\n        /*\n         * update our input with the new date time..\n         */\n        _updateDateTime: function (dp_inst) {\n            dp_inst = this.inst || dp_inst;\n            var dtTmp = (dp_inst.currentYear > 0?\n                    new Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay) :\n                    new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),\n                dt = $.datepicker._daylightSavingAdjust(dtTmp),\n            //dt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),\n            //dt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay)),\n                dateFmt = $.datepicker._get(dp_inst, 'dateFormat'),\n                formatCfg = $.datepicker._getFormatConfig(dp_inst),\n                timeAvailable = dt !== null && this.timeDefined;\n            this.formattedDate = $.datepicker.formatDate(dateFmt, (dt === null ? new Date() : dt), formatCfg);\n            var formattedDateTime = this.formattedDate;\n\n            // if a slider was changed but datepicker doesn't have a value yet, set it\n            if (dp_inst.lastVal === \"\") {\n                dp_inst.currentYear = dp_inst.selectedYear;\n                dp_inst.currentMonth = dp_inst.selectedMonth;\n                dp_inst.currentDay = dp_inst.selectedDay;\n            }\n\n            /*\n             * remove following lines to force every changes in date picker to change the input value\n             * Bug descriptions: when an input field has a default value, and click on the field to pop up the date picker.\n             * If the user manually empty the value in the input field, the date picker will never change selected value.\n             */\n            //if (dp_inst.lastVal !== undefined && (dp_inst.lastVal.length > 0 && this.$input.val().length === 0)) {\n            //\treturn;\n            //}\n\n            if (this._defaults.timeOnly === true && this._defaults.timeOnlyShowDate === false) {\n                formattedDateTime = this.formattedTime;\n            } else if ((this._defaults.timeOnly !== true && (this._defaults.alwaysSetTime || timeAvailable)) || (this._defaults.timeOnly === true && this._defaults.timeOnlyShowDate === true)) {\n                formattedDateTime += this._defaults.separator + this.formattedTime + this._defaults.timeSuffix;\n            }\n\n            this.formattedDateTime = formattedDateTime;\n\n            if (!this._defaults.showTimepicker) {\n                this.$input.val(this.formattedDate);\n            } else if (this.$altInput && this._defaults.timeOnly === false && this._defaults.altFieldTimeOnly === true) {\n                this.$altInput.val(this.formattedTime);\n                this.$input.val(this.formattedDate);\n            } else if (this.$altInput) {\n                this.$input.val(formattedDateTime);\n                var altFormattedDateTime = '',\n                    altSeparator = this._defaults.altSeparator !== null ? this._defaults.altSeparator : this._defaults.separator,\n                    altTimeSuffix = this._defaults.altTimeSuffix !== null ? this._defaults.altTimeSuffix : this._defaults.timeSuffix;\n\n                if (!this._defaults.timeOnly) {\n                    if (this._defaults.altFormat) {\n                        altFormattedDateTime = $.datepicker.formatDate(this._defaults.altFormat, (dt === null ? new Date() : dt), formatCfg);\n                    }\n                    else {\n                        altFormattedDateTime = this.formattedDate;\n                    }\n\n                    if (altFormattedDateTime) {\n                        altFormattedDateTime += altSeparator;\n                    }\n                }\n\n                if (this._defaults.altTimeFormat !== null) {\n                    altFormattedDateTime += $.datepicker.formatTime(this._defaults.altTimeFormat, this, this._defaults) + altTimeSuffix;\n                }\n                else {\n                    altFormattedDateTime += this.formattedTime + altTimeSuffix;\n                }\n                this.$altInput.val(altFormattedDateTime);\n            } else {\n                this.$input.val(formattedDateTime);\n            }\n\n            this.$input.trigger(\"change\");\n        },\n\n        _onFocus: function () {\n            if (!this.$input.val() && this._defaults.defaultValue) {\n                this.$input.val(this._defaults.defaultValue);\n                var inst = $.datepicker._getInst(this.$input.get(0)),\n                    tp_inst = $.datepicker._get(inst, 'timepicker');\n                if (tp_inst) {\n                    if (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {\n                        try {\n                            $.datepicker._updateDatepicker(inst);\n                        } catch (err) {\n                            $.timepicker.log(err);\n                        }\n                    }\n                }\n            }\n        },\n\n        /*\n         * Small abstraction to control types\n         * We can add more, just be sure to follow the pattern: create, options, value\n         */\n        _controls: {\n            // slider methods\n            slider: {\n                create: function (tp_inst, obj, unit, val, min, max, step) {\n                    var rtl = tp_inst._defaults.isRTL; // if rtl go -60->0 instead of 0->60\n                    return obj.prop('slide', null).slider({\n                        orientation: \"horizontal\",\n                        value: rtl ? val * -1 : val,\n                        min: rtl ? max * -1 : min,\n                        max: rtl ? min * -1 : max,\n                        step: step,\n                        slide: function (event, ui) {\n                            tp_inst.control.value(tp_inst, $(this), unit, rtl ? ui.value * -1 : ui.value);\n                            tp_inst._onTimeChange();\n                        },\n                        stop: function (event, ui) {\n                            tp_inst._onSelectHandler();\n                        }\n                    });\n                },\n                options: function (tp_inst, obj, unit, opts, val) {\n                    if (tp_inst._defaults.isRTL) {\n                        if (typeof(opts) === 'string') {\n                            if (opts === 'min' || opts === 'max') {\n                                if (val !== undefined) {\n                                    return obj.slider(opts, val * -1);\n                                }\n                                return Math.abs(obj.slider(opts));\n                            }\n                            return obj.slider(opts);\n                        }\n                        var min = opts.min,\n                            max = opts.max;\n                        opts.min = opts.max = null;\n                        if (min !== undefined) {\n                            opts.max = min * -1;\n                        }\n                        if (max !== undefined) {\n                            opts.min = max * -1;\n                        }\n                        return obj.slider(opts);\n                    }\n                    if (typeof(opts) === 'string' && val !== undefined) {\n                        return obj.slider(opts, val);\n                    }\n                    return obj.slider(opts);\n                },\n                value: function (tp_inst, obj, unit, val) {\n                    if (tp_inst._defaults.isRTL) {\n                        if (val !== undefined) {\n                            return obj.slider('value', val * -1);\n                        }\n                        return Math.abs(obj.slider('value'));\n                    }\n                    if (val !== undefined) {\n                        return obj.slider('value', val);\n                    }\n                    return obj.slider('value');\n                }\n            },\n            // select methods\n            select: {\n                create: function (tp_inst, obj, unit, val, min, max, step) {\n                    var sel = '<select class=\"ui-timepicker-select ui-state-default ui-corner-all\" data-unit=\"' + unit + '\" data-min=\"' + min + '\" data-max=\"' + max + '\" data-step=\"' + step + '\">',\n                        format = tp_inst._defaults.pickerTimeFormat || tp_inst._defaults.timeFormat;\n\n                    for (var i = min; i <= max; i += step) {\n                        sel += '<option value=\"' + i + '\"' + (i === val ? ' selected' : '') + '>';\n                        if (unit === 'hour') {\n                            sel += $.datepicker.formatTime($.trim(format.replace(/[^ht ]/ig, '')), {hour: i}, tp_inst._defaults);\n                        }\n                        else if (unit === 'millisec' || unit === 'microsec' || i >= 10) { sel += i; }\n                        else {sel += '0' + i.toString(); }\n                        sel += '</option>';\n                    }\n                    sel += '</select>';\n\n                    obj.children('select').remove();\n\n                    $(sel).appendTo(obj).change(function (e) {\n                        tp_inst._onTimeChange();\n                        tp_inst._onSelectHandler();\n                        tp_inst._afterInject();\n                    });\n\n                    return obj;\n                },\n                options: function (tp_inst, obj, unit, opts, val) {\n                    var o = {},\n                        $t = obj.children('select');\n                    if (typeof(opts) === 'string') {\n                        if (val === undefined) {\n                            return $t.data(opts);\n                        }\n                        o[opts] = val;\n                    }\n                    else { o = opts; }\n                    return tp_inst.control.create(tp_inst, obj, $t.data('unit'), $t.val(), o.min>=0 ? o.min : $t.data('min'), o.max || $t.data('max'), o.step || $t.data('step'));\n                },\n                value: function (tp_inst, obj, unit, val) {\n                    var $t = obj.children('select');\n                    if (val !== undefined) {\n                        return $t.val(val);\n                    }\n                    return $t.val();\n                }\n            }\n        } // end _controls\n\n    });\n\n    $.fn.extend({\n        /*\n         * shorthand just to use timepicker.\n         */\n        timepicker: function (o) {\n            o = o || {};\n            var tmp_args = Array.prototype.slice.call(arguments);\n\n            if (typeof o === 'object') {\n                tmp_args[0] = $.extend(o, {\n                    timeOnly: true\n                });\n            }\n\n            return $(this).each(function () {\n                $.fn.datetimepicker.apply($(this), tmp_args);\n            });\n        },\n\n        /*\n         * extend timepicker to datepicker\n         */\n        datetimepicker: function (o) {\n            o = o || {};\n            var tmp_args = arguments;\n\n            if (typeof(o) === 'string') {\n                if (o === 'getDate'  || (o === 'option' && tmp_args.length === 2 && typeof (tmp_args[1]) === 'string')) {\n                    return $.fn.datepicker.apply($(this[0]), tmp_args);\n                } else {\n                    return this.each(function () {\n                        var $t = $(this);\n                        $t.datepicker.apply($t, tmp_args);\n                    });\n                }\n            } else {\n                return this.each(function () {\n                    var $t = $(this);\n                    $t.datepicker($.timepicker._newInst($t, o)._defaults);\n                });\n            }\n        }\n    });\n\n    /*\n     * Public Utility to parse date and time\n     */\n    $.datepicker.parseDateTime = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {\n        var parseRes = parseDateTimeInternal(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings);\n        if (parseRes.timeObj) {\n            var t = parseRes.timeObj;\n            parseRes.date.setHours(t.hour, t.minute, t.second, t.millisec);\n            parseRes.date.setMicroseconds(t.microsec);\n        }\n\n        return parseRes.date;\n    };\n\n    /*\n     * Public utility to parse time\n     */\n    $.datepicker.parseTime = function (timeFormat, timeString, options) {\n        var o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {}),\n            iso8601 = (timeFormat.replace(/\\'.*?\\'/g, '').indexOf('Z') !== -1);\n\n        // Strict parse requires the timeString to match the timeFormat exactly\n        var strictParse = function (f, s, o) {\n\n            // pattern for standard and localized AM/PM markers\n            var getPatternAmpm = function (amNames, pmNames) {\n                var markers = [];\n                if (amNames) {\n                    $.merge(markers, amNames);\n                }\n                if (pmNames) {\n                    $.merge(markers, pmNames);\n                }\n                markers = $.map(markers, function (val) {\n                    return val.replace(/[.*+?|()\\[\\]{}\\\\]/g, '\\\\$&');\n                });\n                return '(' + markers.join('|') + ')?';\n            };\n\n            // figure out position of time elements.. cause js cant do named captures\n            var getFormatPositions = function (timeFormat) {\n                var finds = timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|c{1}|t{1,2}|z|'.*?')/g),\n                    orders = {\n                        h: -1,\n                        m: -1,\n                        s: -1,\n                        l: -1,\n                        c: -1,\n                        t: -1,\n                        z: -1\n                    };\n\n                if (finds) {\n                    for (var i = 0; i < finds.length; i++) {\n                        if (orders[finds[i].toString().charAt(0)] === -1) {\n                            orders[finds[i].toString().charAt(0)] = i + 1;\n                        }\n                    }\n                }\n                return orders;\n            };\n\n            var regstr = '^' + f.toString()\n                    .replace(/([hH]{1,2}|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')/g, function (match) {\n                        var ml = match.length;\n                        switch (match.charAt(0).toLowerCase()) {\n                            case 'h':\n                                return ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\n                            case 'm':\n                                return ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\n                            case 's':\n                                return ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\n                            case 'l':\n                                return '(\\\\d?\\\\d?\\\\d)';\n                            case 'c':\n                                return '(\\\\d?\\\\d?\\\\d)';\n                            case 'z':\n                                return '(z|[-+]\\\\d\\\\d:?\\\\d\\\\d|\\\\S+)?';\n                            case 't':\n                                return getPatternAmpm(o.amNames, o.pmNames);\n                            default:    // literal escaped in quotes\n                                return '(' + match.replace(/\\'/g, \"\").replace(/(\\.|\\$|\\^|\\\\|\\/|\\(|\\)|\\[|\\]|\\?|\\+|\\*)/g, function (m) { return \"\\\\\" + m; }) + ')?';\n                        }\n                    })\n                    .replace(/\\s/g, '\\\\s?') +\n                    o.timeSuffix + '$',\n                order = getFormatPositions(f),\n                ampm = '',\n                treg;\n\n            treg = s.match(new RegExp(regstr, 'i'));\n\n            var resTime = {\n                hour: 0,\n                minute: 0,\n                second: 0,\n                millisec: 0,\n                microsec: 0\n            };\n\n            if (treg) {\n                if (order.t !== -1) {\n                    if (treg[order.t] === undefined || treg[order.t].length === 0) {\n                        ampm = '';\n                        resTime.ampm = '';\n                    } else {\n                        ampm = $.inArray(treg[order.t].toUpperCase(), $.map(o.amNames, function (x,i) { return x.toUpperCase(); })) !== -1 ? 'AM' : 'PM';\n                        resTime.ampm = o[ampm === 'AM' ? 'amNames' : 'pmNames'][0];\n                    }\n                }\n\n                if (order.h !== -1) {\n                    if (ampm === 'AM' && treg[order.h] === '12') {\n                        resTime.hour = 0; // 12am = 0 hour\n                    } else {\n                        if (ampm === 'PM' && treg[order.h] !== '12') {\n                            resTime.hour = parseInt(treg[order.h], 10) + 12; // 12pm = 12 hour, any other pm = hour + 12\n                        } else {\n                            resTime.hour = Number(treg[order.h]);\n                        }\n                    }\n                }\n\n                if (order.m !== -1) {\n                    resTime.minute = Number(treg[order.m]);\n                }\n                if (order.s !== -1) {\n                    resTime.second = Number(treg[order.s]);\n                }\n                if (order.l !== -1) {\n                    resTime.millisec = Number(treg[order.l]);\n                }\n                if (order.c !== -1) {\n                    resTime.microsec = Number(treg[order.c]);\n                }\n                if (order.z !== -1 && treg[order.z] !== undefined) {\n                    resTime.timezone = $.timepicker.timezoneOffsetNumber(treg[order.z]);\n                }\n\n\n                return resTime;\n            }\n            return false;\n        };// end strictParse\n\n        // First try JS Date, if that fails, use strictParse\n        var looseParse = function (f, s, o) {\n            try {\n                var d = new Date('2012-01-01 ' + s);\n                if (isNaN(d.getTime())) {\n                    d = new Date('2012-01-01T' + s);\n                    if (isNaN(d.getTime())) {\n                        d = new Date('01/01/2012 ' + s);\n                        if (isNaN(d.getTime())) {\n                            throw \"Unable to parse time with native Date: \" + s;\n                        }\n                    }\n                }\n\n                return {\n                    hour: d.getHours(),\n                    minute: d.getMinutes(),\n                    second: d.getSeconds(),\n                    millisec: d.getMilliseconds(),\n                    microsec: d.getMicroseconds(),\n                    timezone: d.getTimezoneOffset() * -1\n                };\n            }\n            catch (err) {\n                try {\n                    return strictParse(f, s, o);\n                }\n                catch (err2) {\n                    $.timepicker.log(\"Unable to parse \\ntimeString: \" + s + \"\\ntimeFormat: \" + f);\n                }\n            }\n            return false;\n        }; // end looseParse\n\n        if (typeof o.parse === \"function\") {\n            return o.parse(timeFormat, timeString, o);\n        }\n        if (o.parse === 'loose') {\n            return looseParse(timeFormat, timeString, o);\n        }\n        return strictParse(timeFormat, timeString, o);\n    };\n\n    /**\n     * Public utility to format the time\n     * @param {string} format format of the time\n     * @param {Object} time Object not a Date for timezones\n     * @param {Object} [options] essentially the regional[].. amNames, pmNames, ampm\n     * @returns {string} the formatted time\n     */\n    $.datepicker.formatTime = function (format, time, options) {\n        options = options || {};\n        options = $.extend({}, $.timepicker._defaults, options);\n        time = $.extend({\n            hour: 0,\n            minute: 0,\n            second: 0,\n            millisec: 0,\n            microsec: 0,\n            timezone: null\n        }, time);\n\n        var tmptime = format,\n            ampmName = options.amNames[0],\n            hour = parseInt(time.hour, 10);\n\n        if (hour > 11) {\n            ampmName = options.pmNames[0];\n        }\n\n        tmptime = tmptime.replace(/(?:HH?|hh?|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')/g, function (match) {\n            switch (match) {\n                case 'HH':\n                    return ('0' + hour).slice(-2);\n                case 'H':\n                    return hour;\n                case 'hh':\n                    return ('0' + convert24to12(hour)).slice(-2);\n                case 'h':\n                    return convert24to12(hour);\n                case 'mm':\n                    return ('0' + time.minute).slice(-2);\n                case 'm':\n                    return time.minute;\n                case 'ss':\n                    return ('0' + time.second).slice(-2);\n                case 's':\n                    return time.second;\n                case 'l':\n                    return ('00' + time.millisec).slice(-3);\n                case 'c':\n                    return ('00' + time.microsec).slice(-3);\n                case 'z':\n                    return $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, false);\n                case 'Z':\n                    return $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, true);\n                case 'T':\n                    return ampmName.charAt(0).toUpperCase();\n                case 'TT':\n                    return ampmName.toUpperCase();\n                case 't':\n                    return ampmName.charAt(0).toLowerCase();\n                case 'tt':\n                    return ampmName.toLowerCase();\n                default:\n                    return match.replace(/'/g, \"\");\n            }\n        });\n\n        return tmptime;\n    };\n\n    /*\n     * the bad hack :/ override datepicker so it doesn't close on select\n     // inspired: http://stackoverflow.com/questions/1252512/jquery-datepicker-prevent-closing-picker-when-clicking-a-date/1762378#1762378\n     */\n    $.datepicker._base_selectDate = $.datepicker._selectDate;\n    $.datepicker._selectDate = function (id, dateStr) {\n        var inst = this._getInst($(id)[0]),\n            tp_inst = this._get(inst, 'timepicker'),\n            was_inline;\n\n        if (tp_inst && inst.settings.showTimepicker) {\n            tp_inst._limitMinMaxDateTime(inst, true);\n            was_inline = inst.inline;\n            inst.inline = inst.stay_open = true;\n            //This way the onSelect handler called from calendarpicker get the full dateTime\n            this._base_selectDate(id, dateStr);\n            inst.inline = was_inline;\n            inst.stay_open = false;\n            this._notifyChange(inst);\n            this._updateDatepicker(inst);\n        } else {\n            this._base_selectDate(id, dateStr);\n        }\n    };\n\n    /*\n     * second bad hack :/ override datepicker so it triggers an event when changing the input field\n     * and does not redraw the datepicker on every selectDate event\n     */\n    $.datepicker._base_updateDatepicker = $.datepicker._updateDatepicker;\n    $.datepicker._updateDatepicker = function (inst) {\n\n        // don't popup the datepicker if there is another instance already opened\n        var input = inst.input[0];\n        if ($.datepicker._curInst && $.datepicker._curInst !== inst && $.datepicker._datepickerShowing && $.datepicker._lastInput !== input) {\n            return;\n        }\n\n        if (typeof(inst.stay_open) !== 'boolean' || inst.stay_open === false) {\n\n            this._base_updateDatepicker(inst);\n\n            // Reload the time control when changing something in the input text field.\n            var tp_inst = this._get(inst, 'timepicker');\n            if (tp_inst) {\n                tp_inst._addTimePicker(inst);\n            }\n        }\n    };\n\n    /*\n     * third bad hack :/ override datepicker so it allows spaces and colon in the input field\n     */\n    $.datepicker._base_doKeyPress = $.datepicker._doKeyPress;\n    $.datepicker._doKeyPress = function (event) {\n        var inst = $.datepicker._getInst(event.target),\n            tp_inst = $.datepicker._get(inst, 'timepicker');\n\n        if (tp_inst) {\n            if ($.datepicker._get(inst, 'constrainInput')) {\n                var ampm = tp_inst.support.ampm,\n                    tz = tp_inst._defaults.showTimezone !== null ? tp_inst._defaults.showTimezone : tp_inst.support.timezone,\n                    dateChars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')),\n                    datetimeChars = tp_inst._defaults.timeFormat.toString()\n                            .replace(/[hms]/g, '')\n                            .replace(/TT/g, ampm ? 'APM' : '')\n                            .replace(/Tt/g, ampm ? 'AaPpMm' : '')\n                            .replace(/tT/g, ampm ? 'AaPpMm' : '')\n                            .replace(/T/g, ampm ? 'AP' : '')\n                            .replace(/tt/g, ampm ? 'apm' : '')\n                            .replace(/t/g, ampm ? 'ap' : '') +\n                        \" \" + tp_inst._defaults.separator +\n                        tp_inst._defaults.timeSuffix +\n                        (tz ? tp_inst._defaults.timezoneList.join('') : '') +\n                        (tp_inst._defaults.amNames.join('')) + (tp_inst._defaults.pmNames.join('')) +\n                        dateChars,\n                    chr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);\n                return event.ctrlKey || (chr < ' ' || !dateChars || datetimeChars.indexOf(chr) > -1);\n            }\n        }\n\n        return $.datepicker._base_doKeyPress(event);\n    };\n\n    /*\n     * Fourth bad hack :/ override _updateAlternate function used in inline mode to init altField\n     * Update any alternate field to synchronise with the main field.\n     */\n    $.datepicker._base_updateAlternate = $.datepicker._updateAlternate;\n    $.datepicker._updateAlternate = function (inst) {\n        var tp_inst = this._get(inst, 'timepicker');\n        if (tp_inst) {\n            var altField = tp_inst._defaults.altField;\n            if (altField) { // update alternate field too\n                var altFormat = tp_inst._defaults.altFormat || tp_inst._defaults.dateFormat,\n                    date = this._getDate(inst),\n                    formatCfg = $.datepicker._getFormatConfig(inst),\n                    altFormattedDateTime = '',\n                    altSeparator = tp_inst._defaults.altSeparator ? tp_inst._defaults.altSeparator : tp_inst._defaults.separator,\n                    altTimeSuffix = tp_inst._defaults.altTimeSuffix ? tp_inst._defaults.altTimeSuffix : tp_inst._defaults.timeSuffix,\n                    altTimeFormat = tp_inst._defaults.altTimeFormat !== null ? tp_inst._defaults.altTimeFormat : tp_inst._defaults.timeFormat;\n\n                altFormattedDateTime += $.datepicker.formatTime(altTimeFormat, tp_inst, tp_inst._defaults) + altTimeSuffix;\n                if (!tp_inst._defaults.timeOnly && !tp_inst._defaults.altFieldTimeOnly && date !== null) {\n                    if (tp_inst._defaults.altFormat) {\n                        altFormattedDateTime = $.datepicker.formatDate(tp_inst._defaults.altFormat, date, formatCfg) + altSeparator + altFormattedDateTime;\n                    }\n                    else {\n                        altFormattedDateTime = tp_inst.formattedDate + altSeparator + altFormattedDateTime;\n                    }\n                }\n                $(altField).val( inst.input.val() ? altFormattedDateTime : \"\");\n            }\n        }\n        else {\n            $.datepicker._base_updateAlternate(inst);\n        }\n    };\n\n    /*\n     * Override key up event to sync manual input changes.\n     */\n    $.datepicker._base_doKeyUp = $.datepicker._doKeyUp;\n    $.datepicker._doKeyUp = function (event) {\n        var inst = $.datepicker._getInst(event.target),\n            tp_inst = $.datepicker._get(inst, 'timepicker');\n\n        if (tp_inst) {\n            if (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {\n                try {\n                    $.datepicker._updateDatepicker(inst);\n                } catch (err) {\n                    $.timepicker.log(err);\n                }\n            }\n        }\n\n        return $.datepicker._base_doKeyUp(event);\n    };\n\n    /*\n     * override \"Today\" button to also grab the time and set it to input field.\n     */\n    $.datepicker._base_gotoToday = $.datepicker._gotoToday;\n    $.datepicker._gotoToday = function (id) {\n        var inst = this._getInst($(id)[0]);\n        this._base_gotoToday(id);\n        var tp_inst = this._get(inst, 'timepicker');\n        var tzoffset = $.timepicker.timezoneOffsetNumber(tp_inst.timezone);\n        var now = new Date();\n        now.setMinutes(now.getMinutes() + now.getTimezoneOffset() + tzoffset);\n        this._setTime(inst, now);\n        this._setDate(inst, now);\n        tp_inst._onSelectHandler();\n    };\n\n    /*\n     * Disable & enable the Time in the datetimepicker\n     */\n    $.datepicker._disableTimepickerDatepicker = function (target) {\n        var inst = this._getInst(target);\n        if (!inst) {\n            return;\n        }\n\n        var tp_inst = this._get(inst, 'timepicker');\n        $(target).datepicker('getDate'); // Init selected[Year|Month|Day]\n        if (tp_inst) {\n            inst.settings.showTimepicker = false;\n            tp_inst._defaults.showTimepicker = false;\n            tp_inst._updateDateTime(inst);\n        }\n    };\n\n    $.datepicker._enableTimepickerDatepicker = function (target) {\n        var inst = this._getInst(target);\n        if (!inst) {\n            return;\n        }\n\n        var tp_inst = this._get(inst, 'timepicker');\n        $(target).datepicker('getDate'); // Init selected[Year|Month|Day]\n        if (tp_inst) {\n            inst.settings.showTimepicker = true;\n            tp_inst._defaults.showTimepicker = true;\n            tp_inst._addTimePicker(inst); // Could be disabled on page load\n            tp_inst._updateDateTime(inst);\n        }\n    };\n\n    /*\n     * Create our own set time function\n     */\n    $.datepicker._setTime = function (inst, date) {\n        var tp_inst = this._get(inst, 'timepicker');\n        if (tp_inst) {\n            var defaults = tp_inst._defaults;\n\n            // calling _setTime with no date sets time to defaults\n            tp_inst.hour = date ? date.getHours() : defaults.hour;\n            tp_inst.minute = date ? date.getMinutes() : defaults.minute;\n            tp_inst.second = date ? date.getSeconds() : defaults.second;\n            tp_inst.millisec = date ? date.getMilliseconds() : defaults.millisec;\n            tp_inst.microsec = date ? date.getMicroseconds() : defaults.microsec;\n\n            //check if within min/max times..\n            tp_inst._limitMinMaxDateTime(inst, true);\n\n            tp_inst._onTimeChange();\n            tp_inst._updateDateTime(inst);\n        }\n    };\n\n    /*\n     * Create new public method to set only time, callable as $().datepicker('setTime', date)\n     */\n    $.datepicker._setTimeDatepicker = function (target, date, withDate) {\n        var inst = this._getInst(target);\n        if (!inst) {\n            return;\n        }\n\n        var tp_inst = this._get(inst, 'timepicker');\n\n        if (tp_inst) {\n            this._setDateFromField(inst);\n            var tp_date;\n            if (date) {\n                if (typeof date === \"string\") {\n                    tp_inst._parseTime(date, withDate);\n                    tp_date = new Date();\n                    tp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);\n                    tp_date.setMicroseconds(tp_inst.microsec);\n                } else {\n                    tp_date = new Date(date.getTime());\n                    tp_date.setMicroseconds(date.getMicroseconds());\n                }\n                if (tp_date.toString() === 'Invalid Date') {\n                    tp_date = undefined;\n                }\n                this._setTime(inst, tp_date);\n            }\n        }\n\n    };\n\n    /*\n     * override setDate() to allow setting time too within Date object\n     */\n    $.datepicker._base_setDateDatepicker = $.datepicker._setDateDatepicker;\n    $.datepicker._setDateDatepicker = function (target, _date) {\n        var inst = this._getInst(target);\n        var date = _date;\n        if (!inst) {\n            return;\n        }\n\n        if (typeof(_date) === 'string') {\n            date = new Date(_date);\n            if (!date.getTime()) {\n                this._base_setDateDatepicker.apply(this, arguments);\n                date = $(target).datepicker('getDate');\n            }\n        }\n\n        var tp_inst = this._get(inst, 'timepicker');\n        var tp_date;\n        if (date instanceof Date) {\n            tp_date = new Date(date.getTime());\n            tp_date.setMicroseconds(date.getMicroseconds());\n        } else {\n            tp_date = date;\n        }\n\n        // This is important if you are using the timezone option, javascript's Date\n        // object will only return the timezone offset for the current locale, so we\n        // adjust it accordingly.  If not using timezone option this won't matter..\n        // If a timezone is different in tp, keep the timezone as is\n        if (tp_inst && tp_date) {\n            // look out for DST if tz wasn't specified\n            if (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {\n                tp_inst.timezone = tp_date.getTimezoneOffset() * -1;\n            }\n            date = $.timepicker.timezoneAdjust(date, tp_inst.timezone);\n            tp_date = $.timepicker.timezoneAdjust(tp_date, tp_inst.timezone);\n        }\n\n        this._updateDatepicker(inst);\n        this._base_setDateDatepicker.apply(this, arguments);\n        this._setTimeDatepicker(target, tp_date, true);\n    };\n\n    /*\n     * override getDate() to allow getting time too within Date object\n     */\n    $.datepicker._base_getDateDatepicker = $.datepicker._getDateDatepicker;\n    $.datepicker._getDateDatepicker = function (target, noDefault) {\n        var inst = this._getInst(target);\n        if (!inst) {\n            return;\n        }\n\n        var tp_inst = this._get(inst, 'timepicker');\n\n        if (tp_inst) {\n            // if it hasn't yet been defined, grab from field\n            if (inst.lastVal === undefined) {\n                this._setDateFromField(inst, noDefault);\n            }\n\n            var date = this._getDate(inst);\n            var currDT = $.trim((tp_inst.$altInput && tp_inst._defaults.altFieldTimeOnly) ? tp_inst.$input.val() + ' ' + tp_inst.$altInput.val() : tp_inst.$input.val());\n            if (date && tp_inst._parseTime(currDT, !inst.settings.timeOnly)) {\n                date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);\n                date.setMicroseconds(tp_inst.microsec);\n\n                // This is important if you are using the timezone option, javascript's Date\n                // object will only return the timezone offset for the current locale, so we\n                // adjust it accordingly.  If not using timezone option this won't matter..\n                if (tp_inst.timezone != null) {\n                    // look out for DST if tz wasn't specified\n                    if (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {\n                        tp_inst.timezone = date.getTimezoneOffset() * -1;\n                    }\n                    date = $.timepicker.timezoneAdjust(date, tp_inst.timezone);\n                }\n            }\n            return date;\n        }\n        return this._base_getDateDatepicker(target, noDefault);\n    };\n\n    /*\n     * override parseDate() because UI 1.8.14 throws an error about \"Extra characters\"\n     * An option in datapicker to ignore extra format characters would be nicer.\n     */\n    $.datepicker._base_parseDate = $.datepicker.parseDate;\n    $.datepicker.parseDate = function (format, value, settings) {\n        var date;\n        try {\n            date = this._base_parseDate(format, value, settings);\n        } catch (err) {\n            // Hack!  The error message ends with a colon, a space, and\n            // the \"extra\" characters.  We rely on that instead of\n            // attempting to perfectly reproduce the parsing algorithm.\n            if (err.indexOf(\":\") >= 0) {\n                date = this._base_parseDate(format, value.substring(0, value.length - (err.length - err.indexOf(':') - 2)), settings);\n                $.timepicker.log(\"Error parsing the date string: \" + err + \"\\ndate string = \" + value + \"\\ndate format = \" + format);\n            } else {\n                throw err;\n            }\n        }\n        return date;\n    };\n\n    /*\n     * override formatDate to set date with time to the input\n     */\n    $.datepicker._base_formatDate = $.datepicker._formatDate;\n    $.datepicker._formatDate = function (inst, day, month, year) {\n        var tp_inst = this._get(inst, 'timepicker');\n        if (tp_inst) {\n            tp_inst._updateDateTime(inst);\n            return tp_inst.$input.val();\n        }\n        return this._base_formatDate(inst);\n    };\n\n    /*\n     * override options setter to add time to maxDate(Time) and minDate(Time). MaxDate\n     */\n    $.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker;\n    $.datepicker._optionDatepicker = function (target, name, value) {\n        var inst = this._getInst(target),\n            name_clone;\n        if (!inst) {\n            return null;\n        }\n\n        var tp_inst = this._get(inst, 'timepicker');\n        if (tp_inst) {\n            var min = null,\n                max = null,\n                onselect = null,\n                overrides = tp_inst._defaults.evnts,\n                fns = {},\n                prop,\n                ret,\n                oldVal,\n                $target;\n            if (typeof name === 'string') { // if min/max was set with the string\n                if (name === 'minDate' || name === 'minDateTime') {\n                    min = value;\n                } else if (name === 'maxDate' || name === 'maxDateTime') {\n                    max = value;\n                } else if (name === 'onSelect') {\n                    onselect = value;\n                } else if (overrides.hasOwnProperty(name)) {\n                    if (typeof (value) === 'undefined') {\n                        return overrides[name];\n                    }\n                    fns[name] = value;\n                    name_clone = {}; //empty results in exiting function after overrides updated\n                }\n            } else if (typeof name === 'object') { //if min/max was set with the JSON\n                if (name.minDate) {\n                    min = name.minDate;\n                } else if (name.minDateTime) {\n                    min = name.minDateTime;\n                } else if (name.maxDate) {\n                    max = name.maxDate;\n                } else if (name.maxDateTime) {\n                    max = name.maxDateTime;\n                }\n                for (prop in overrides) {\n                    if (overrides.hasOwnProperty(prop) && name[prop]) {\n                        fns[prop] = name[prop];\n                    }\n                }\n            }\n            for (prop in fns) {\n                if (fns.hasOwnProperty(prop)) {\n                    overrides[prop] = fns[prop];\n                    if (!name_clone) { name_clone = $.extend({}, name); }\n                    delete name_clone[prop];\n                }\n            }\n            if (name_clone && isEmptyObject(name_clone)) { return; }\n            if (min) { //if min was set\n                if (min === 0) {\n                    min = new Date();\n                } else {\n                    min = new Date(min);\n                }\n                tp_inst._defaults.minDate = min;\n                tp_inst._defaults.minDateTime = min;\n            } else if (max) { //if max was set\n                if (max === 0) {\n                    max = new Date();\n                } else {\n                    max = new Date(max);\n                }\n                tp_inst._defaults.maxDate = max;\n                tp_inst._defaults.maxDateTime = max;\n            } else if (onselect) {\n                tp_inst._defaults.onSelect = onselect;\n            }\n\n            // Datepicker will override our date when we call _base_optionDatepicker when\n            // calling minDate/maxDate, so we will first grab the value, call\n            // _base_optionDatepicker, then set our value back.\n            if(min || max){\n                $target = $(target);\n                oldVal = $target.datetimepicker('getDate');\n                ret = this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);\n                $target.datetimepicker('setDate', oldVal);\n                return ret;\n            }\n        }\n        if (value === undefined) {\n            return this._base_optionDatepicker.call($.datepicker, target, name);\n        }\n        return this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);\n    };\n\n    /*\n     * jQuery isEmptyObject does not check hasOwnProperty - if someone has added to the object prototype,\n     * it will return false for all objects\n     */\n    var isEmptyObject = function (obj) {\n        var prop;\n        for (prop in obj) {\n            if (obj.hasOwnProperty(prop)) {\n                return false;\n            }\n        }\n        return true;\n    };\n\n    /*\n     * jQuery extend now ignores nulls!\n     */\n    var extendRemove = function (target, props) {\n        $.extend(target, props);\n        for (var name in props) {\n            if (props[name] === null || props[name] === undefined) {\n                target[name] = props[name];\n            }\n        }\n        return target;\n    };\n\n    /*\n     * Determine by the time format which units are supported\n     * Returns an object of booleans for each unit\n     */\n    var detectSupport = function (timeFormat) {\n        var tf = timeFormat.replace(/'.*?'/g, '').toLowerCase(), // removes literals\n            isIn = function (f, t) { // does the format contain the token?\n                return f.indexOf(t) !== -1 ? true : false;\n            };\n        return {\n            hour: isIn(tf, 'h'),\n            minute: isIn(tf, 'm'),\n            second: isIn(tf, 's'),\n            millisec: isIn(tf, 'l'),\n            microsec: isIn(tf, 'c'),\n            timezone: isIn(tf, 'z'),\n            ampm: isIn(tf, 't') && isIn(timeFormat, 'h'),\n            iso8601: isIn(timeFormat, 'Z')\n        };\n    };\n\n    /*\n     * Converts 24 hour format into 12 hour\n     * Returns 12 hour without leading 0\n     */\n    var convert24to12 = function (hour) {\n        hour %= 12;\n\n        if (hour === 0) {\n            hour = 12;\n        }\n\n        return String(hour);\n    };\n\n    var computeEffectiveSetting = function (settings, property) {\n        return settings && settings[property] ? settings[property] : $.timepicker._defaults[property];\n    };\n\n    /*\n     * Splits datetime string into date and time substrings.\n     * Throws exception when date can't be parsed\n     * Returns {dateString: dateString, timeString: timeString}\n     */\n    var splitDateTime = function (dateTimeString, timeSettings) {\n        // The idea is to get the number separator occurrences in datetime and the time format requested (since time has\n        // fewer unknowns, mostly numbers and am/pm). We will use the time pattern to split.\n        var separator = computeEffectiveSetting(timeSettings, 'separator'),\n            format = computeEffectiveSetting(timeSettings, 'timeFormat'),\n            timeParts = format.split(separator), // how many occurrences of separator may be in our format?\n            timePartsLen = timeParts.length,\n            allParts = dateTimeString.split(separator),\n            allPartsLen = allParts.length;\n\n        if (allPartsLen > 1) {\n            return {\n                dateString: allParts.splice(0, allPartsLen - timePartsLen).join(separator),\n                timeString: allParts.splice(0, timePartsLen).join(separator)\n            };\n        }\n\n        return {\n            dateString: dateTimeString,\n            timeString: ''\n        };\n    };\n\n    /*\n     * Internal function to parse datetime interval\n     * Returns: {date: Date, timeObj: Object}, where\n     *   date - parsed date without time (type Date)\n     *   timeObj = {hour: , minute: , second: , millisec: , microsec: } - parsed time. Optional\n     */\n    var parseDateTimeInternal = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {\n        var date,\n            parts,\n            parsedTime;\n\n        parts = splitDateTime(dateTimeString, timeSettings);\n        date = $.datepicker._base_parseDate(dateFormat, parts.dateString, dateSettings);\n\n        if (parts.timeString === '') {\n            return {\n                date: date\n            };\n        }\n\n        parsedTime = $.datepicker.parseTime(timeFormat, parts.timeString, timeSettings);\n\n        if (!parsedTime) {\n            throw 'Wrong time format';\n        }\n\n        return {\n            date: date,\n            timeObj: parsedTime\n        };\n    };\n\n    /*\n     * Internal function to set timezone_select to the local timezone\n     */\n    var selectLocalTimezone = function (tp_inst, date) {\n        if (tp_inst && tp_inst.timezone_select) {\n            var now = date || new Date();\n            tp_inst.timezone_select.val(-now.getTimezoneOffset());\n        }\n    };\n\n    /*\n     * Create a Singleton Instance\n     */\n    $.timepicker = new Timepicker();\n\n    /**\n     * Get the timezone offset as string from a date object (eg '+0530' for UTC+5.5)\n     * @param {number} tzMinutes if not a number, less than -720 (-1200), or greater than 840 (+1400) this value is returned\n     * @param {boolean} iso8601 if true formats in accordance to iso8601 \"+12:45\"\n     * @return {string}\n     */\n    $.timepicker.timezoneOffsetString = function (tzMinutes, iso8601) {\n        if (isNaN(tzMinutes) || tzMinutes > 840 || tzMinutes < -720) {\n            return tzMinutes;\n        }\n\n        var off = tzMinutes,\n            minutes = off % 60,\n            hours = (off - minutes) / 60,\n            iso = iso8601 ? ':' : '',\n            tz = (off >= 0 ? '+' : '-') + ('0' + Math.abs(hours)).slice(-2) + iso + ('0' + Math.abs(minutes)).slice(-2);\n\n        if (tz === '+00:00') {\n            return 'Z';\n        }\n        return tz;\n    };\n\n    /**\n     * Get the number in minutes that represents a timezone string\n     * @param  {string} tzString formatted like \"+0500\", \"-1245\", \"Z\"\n     * @return {number} the offset minutes or the original string if it doesn't match expectations\n     */\n    $.timepicker.timezoneOffsetNumber = function (tzString) {\n        var normalized = tzString.toString().replace(':', ''); // excuse any iso8601, end up with \"+1245\"\n\n        if (normalized.toUpperCase() === 'Z') { // if iso8601 with Z, its 0 minute offset\n            return 0;\n        }\n\n        if (!/^(\\-|\\+)\\d{4}$/.test(normalized)) { // possibly a user defined tz, so just give it back\n            return tzString;\n        }\n\n        return ((normalized.substr(0, 1) === '-' ? -1 : 1) * // plus or minus\n        ((parseInt(normalized.substr(1, 2), 10) * 60) + // hours (converted to minutes)\n        parseInt(normalized.substr(3, 2), 10))); // minutes\n    };\n\n    /**\n     * No way to set timezone in js Date, so we must adjust the minutes to compensate. (think setDate, getDate)\n     * @param  {Date} date\n     * @param  {string} toTimezone formatted like \"+0500\", \"-1245\"\n     * @return {Date}\n     */\n    $.timepicker.timezoneAdjust = function (date, toTimezone) {\n        var toTz = $.timepicker.timezoneOffsetNumber(toTimezone);\n        if (!isNaN(toTz)) {\n            date.setMinutes(date.getMinutes() + -date.getTimezoneOffset() - toTz);\n        }\n        return date;\n    };\n\n    /**\n     * Calls `timepicker()` on the `startTime` and `endTime` elements, and configures them to\n     * enforce date range limits.\n     * n.b. The input value must be correctly formatted (reformatting is not supported)\n     * @param  {Element} startTime\n     * @param  {Element} endTime\n     * @param  {Object} options Options for the timepicker() call\n     * @return {jQuery}\n     */\n    $.timepicker.timeRange = function (startTime, endTime, options) {\n        return $.timepicker.handleRange('timepicker', startTime, endTime, options);\n    };\n\n    /**\n     * Calls `datetimepicker` on the `startTime` and `endTime` elements, and configures them to\n     * enforce date range limits.\n     * @param  {Element} startTime\n     * @param  {Element} endTime\n     * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\n     *   a boolean value that can be used to reformat the input values to the `dateFormat`.\n     * @param  {string} method Can be used to specify the type of picker to be added\n     * @return {jQuery}\n     */\n    $.timepicker.datetimeRange = function (startTime, endTime, options) {\n        $.timepicker.handleRange('datetimepicker', startTime, endTime, options);\n    };\n\n    /**\n     * Calls `datepicker` on the `startTime` and `endTime` elements, and configures them to\n     * enforce date range limits.\n     * @param  {Element} startTime\n     * @param  {Element} endTime\n     * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\n     *   a boolean value that can be used to reformat the input values to the `dateFormat`.\n     * @return {jQuery}\n     */\n    $.timepicker.dateRange = function (startTime, endTime, options) {\n        $.timepicker.handleRange('datepicker', startTime, endTime, options);\n    };\n\n    /**\n     * Calls `method` on the `startTime` and `endTime` elements, and configures them to\n     * enforce date range limits.\n     * @param  {string} method Can be used to specify the type of picker to be added\n     * @param  {Element} startTime\n     * @param  {Element} endTime\n     * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\n     *   a boolean value that can be used to reformat the input values to the `dateFormat`.\n     * @return {jQuery}\n     */\n    $.timepicker.handleRange = function (method, startTime, endTime, options) {\n        options = $.extend({}, {\n            minInterval: 0, // min allowed interval in milliseconds\n            maxInterval: 0, // max allowed interval in milliseconds\n            start: {},      // options for start picker\n            end: {}         // options for end picker\n        }, options);\n\n        // for the mean time this fixes an issue with calling getDate with timepicker()\n        var timeOnly = false;\n        if(method === 'timepicker'){\n            timeOnly = true;\n            method = 'datetimepicker';\n        }\n\n        function checkDates(changed, other) {\n            var startdt = startTime[method]('getDate'),\n                enddt = endTime[method]('getDate'),\n                changeddt = changed[method]('getDate');\n\n            if (startdt !== null) {\n                var minDate = new Date(startdt.getTime()),\n                    maxDate = new Date(startdt.getTime());\n\n                minDate.setMilliseconds(minDate.getMilliseconds() + options.minInterval);\n                maxDate.setMilliseconds(maxDate.getMilliseconds() + options.maxInterval);\n\n                if (options.minInterval > 0 && minDate > enddt) { // minInterval check\n                    endTime[method]('setDate', minDate);\n                }\n                else if (options.maxInterval > 0 && maxDate < enddt) { // max interval check\n                    endTime[method]('setDate', maxDate);\n                }\n                else if (startdt > enddt) {\n                    other[method]('setDate', changeddt);\n                }\n            }\n        }\n\n        function selected(changed, other, option) {\n            if (!changed.val()) {\n                return;\n            }\n            var date = changed[method].call(changed, 'getDate');\n            if (date !== null && options.minInterval > 0) {\n                if (option === 'minDate') {\n                    date.setMilliseconds(date.getMilliseconds() + options.minInterval);\n                }\n                if (option === 'maxDate') {\n                    date.setMilliseconds(date.getMilliseconds() - options.minInterval);\n                }\n            }\n\n            if (date.getTime) {\n                other[method].call(other, 'option', option, date);\n            }\n        }\n\n        $.fn[method].call(startTime, $.extend({\n            timeOnly: timeOnly,\n            onClose: function (dateText, inst) {\n                checkDates($(this), endTime);\n            },\n            onSelect: function (selectedDateTime) {\n                selected($(this), endTime, 'minDate');\n            }\n        }, options, options.start));\n        $.fn[method].call(endTime, $.extend({\n            timeOnly: timeOnly,\n            onClose: function (dateText, inst) {\n                checkDates($(this), startTime);\n            },\n            onSelect: function (selectedDateTime) {\n                selected($(this), startTime, 'maxDate');\n            }\n        }, options, options.end));\n\n        checkDates(startTime, endTime);\n\n        selected(startTime, endTime, 'minDate');\n        selected(endTime, startTime, 'maxDate');\n\n        return $([startTime.get(0), endTime.get(0)]);\n    };\n\n    /**\n     * Log error or data to the console during error or debugging\n     * @param  {Object} err pass any type object to log to the console during error or debugging\n     * @return {void}\n     */\n    $.timepicker.log = function () {\n        if (window.console) {\n            window.console.log.apply(window.console, Array.prototype.slice.call(arguments));\n        }\n    };\n\n    /*\n     * Add util object to allow access to private methods for testability.\n     */\n    $.timepicker._util = {\n        _extendRemove: extendRemove,\n        _isEmptyObject: isEmptyObject,\n        _convert24to12: convert24to12,\n        _detectSupport: detectSupport,\n        _selectLocalTimezone: selectLocalTimezone,\n        _computeEffectiveSetting: computeEffectiveSetting,\n        _splitDateTime: splitDateTime,\n        _parseDateTimeInternal: parseDateTimeInternal\n    };\n\n    /*\n     * Microsecond support\n     */\n    if (!Date.prototype.getMicroseconds) {\n        Date.prototype.microseconds = 0;\n        Date.prototype.getMicroseconds = function () { return this.microseconds; };\n        Date.prototype.setMicroseconds = function (m) {\n            this.setMilliseconds(this.getMilliseconds() + Math.floor(m / 1000));\n            this.microseconds = m % 1000;\n            return this;\n        };\n    }\n\n    /*\n     * Keep up with the version\n     */\n    $.timepicker.version = \"1.6.1\";\n\n}));"
  },
  {
    "path": "public/adminlte/js/vue.js",
    "content": "/*!\n * Vue.js v1.0.24\n * (c) 2016 Evan You\n * Released under the MIT License.\n */\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n        typeof define === 'function' && define.amd ? define(factory) :\n            (global.Vue = factory());\n}(this, function () { 'use strict';\n\n    function set(obj, key, val) {\n        if (hasOwn(obj, key)) {\n            obj[key] = val;\n            return;\n        }\n        if (obj._isVue) {\n            set(obj._data, key, val);\n            return;\n        }\n        var ob = obj.__ob__;\n        if (!ob) {\n            obj[key] = val;\n            return;\n        }\n        ob.convert(key, val);\n        ob.dep.notify();\n        if (ob.vms) {\n            var i = ob.vms.length;\n            while (i--) {\n                var vm = ob.vms[i];\n                vm._proxy(key);\n                vm._digest();\n            }\n        }\n        return val;\n    }\n\n    /**\n     * Delete a property and trigger change if necessary.\n     *\n     * @param {Object} obj\n     * @param {String} key\n     */\n\n    function del(obj, key) {\n        if (!hasOwn(obj, key)) {\n            return;\n        }\n        delete obj[key];\n        var ob = obj.__ob__;\n        if (!ob) {\n            if (obj._isVue) {\n                delete obj._data[key];\n                obj._digest();\n            }\n            return;\n        }\n        ob.dep.notify();\n        if (ob.vms) {\n            var i = ob.vms.length;\n            while (i--) {\n                var vm = ob.vms[i];\n                vm._unproxy(key);\n                vm._digest();\n            }\n        }\n    }\n\n    var hasOwnProperty = Object.prototype.hasOwnProperty;\n    /**\n     * Check whether the object has the property.\n     *\n     * @param {Object} obj\n     * @param {String} key\n     * @return {Boolean}\n     */\n\n    function hasOwn(obj, key) {\n        return hasOwnProperty.call(obj, key);\n    }\n\n    /**\n     * Check if an expression is a literal value.\n     *\n     * @param {String} exp\n     * @return {Boolean}\n     */\n\n    var literalValueRE = /^\\s?(true|false|-?[\\d\\.]+|'[^']*'|\"[^\"]*\")\\s?$/;\n\n    function isLiteral(exp) {\n        return literalValueRE.test(exp);\n    }\n\n    /**\n     * Check if a string starts with $ or _\n     *\n     * @param {String} str\n     * @return {Boolean}\n     */\n\n    function isReserved(str) {\n        var c = (str + '').charCodeAt(0);\n        return c === 0x24 || c === 0x5F;\n    }\n\n    /**\n     * Guard text output, make sure undefined outputs\n     * empty string\n     *\n     * @param {*} value\n     * @return {String}\n     */\n\n    function _toString(value) {\n        return value == null ? '' : value.toString();\n    }\n\n    /**\n     * Check and convert possible numeric strings to numbers\n     * before setting back to data\n     *\n     * @param {*} value\n     * @return {*|Number}\n     */\n\n    function toNumber(value) {\n        if (typeof value !== 'string') {\n            return value;\n        } else {\n            var parsed = Number(value);\n            return isNaN(parsed) ? value : parsed;\n        }\n    }\n\n    /**\n     * Convert string boolean literals into real booleans.\n     *\n     * @param {*} value\n     * @return {*|Boolean}\n     */\n\n    function toBoolean(value) {\n        return value === 'true' ? true : value === 'false' ? false : value;\n    }\n\n    /**\n     * Strip quotes from a string\n     *\n     * @param {String} str\n     * @return {String | false}\n     */\n\n    function stripQuotes(str) {\n        var a = str.charCodeAt(0);\n        var b = str.charCodeAt(str.length - 1);\n        return a === b && (a === 0x22 || a === 0x27) ? str.slice(1, -1) : str;\n    }\n\n    /**\n     * Camelize a hyphen-delmited string.\n     *\n     * @param {String} str\n     * @return {String}\n     */\n\n    var camelizeRE = /-(\\w)/g;\n\n    function camelize(str) {\n        return str.replace(camelizeRE, toUpper);\n    }\n\n    function toUpper(_, c) {\n        return c ? c.toUpperCase() : '';\n    }\n\n    /**\n     * Hyphenate a camelCase string.\n     *\n     * @param {String} str\n     * @return {String}\n     */\n\n    var hyphenateRE = /([a-z\\d])([A-Z])/g;\n\n    function hyphenate(str) {\n        return str.replace(hyphenateRE, '$1-$2').toLowerCase();\n    }\n\n    /**\n     * Converts hyphen/underscore/slash delimitered names into\n     * camelized classNames.\n     *\n     * e.g. my-component => MyComponent\n     *      some_else    => SomeElse\n     *      some/comp    => SomeComp\n     *\n     * @param {String} str\n     * @return {String}\n     */\n\n    var classifyRE = /(?:^|[-_\\/])(\\w)/g;\n\n    function classify(str) {\n        return str.replace(classifyRE, toUpper);\n    }\n\n    /**\n     * Simple bind, faster than native\n     *\n     * @param {Function} fn\n     * @param {Object} ctx\n     * @return {Function}\n     */\n\n    function bind(fn, ctx) {\n        return function (a) {\n            var l = arguments.length;\n            return l ? l > 1 ? fn.apply(ctx, arguments) : fn.call(ctx, a) : fn.call(ctx);\n        };\n    }\n\n    /**\n     * Convert an Array-like object to a real Array.\n     *\n     * @param {Array-like} list\n     * @param {Number} [start] - start index\n     * @return {Array}\n     */\n\n    function toArray(list, start) {\n        start = start || 0;\n        var i = list.length - start;\n        var ret = new Array(i);\n        while (i--) {\n            ret[i] = list[i + start];\n        }\n        return ret;\n    }\n\n    /**\n     * Mix properties into target object.\n     *\n     * @param {Object} to\n     * @param {Object} from\n     */\n\n    function extend(to, from) {\n        var keys = Object.keys(from);\n        var i = keys.length;\n        while (i--) {\n            to[keys[i]] = from[keys[i]];\n        }\n        return to;\n    }\n\n    /**\n     * Quick object check - this is primarily used to tell\n     * Objects from primitive values when we know the value\n     * is a JSON-compliant type.\n     *\n     * @param {*} obj\n     * @return {Boolean}\n     */\n\n    function isObject(obj) {\n        return obj !== null && typeof obj === 'object';\n    }\n\n    /**\n     * Strict object type check. Only returns true\n     * for plain JavaScript objects.\n     *\n     * @param {*} obj\n     * @return {Boolean}\n     */\n\n    var toString = Object.prototype.toString;\n    var OBJECT_STRING = '[object Object]';\n\n    function isPlainObject(obj) {\n        return toString.call(obj) === OBJECT_STRING;\n    }\n\n    /**\n     * Array type check.\n     *\n     * @param {*} obj\n     * @return {Boolean}\n     */\n\n    var isArray = Array.isArray;\n\n    /**\n     * Define a property.\n     *\n     * @param {Object} obj\n     * @param {String} key\n     * @param {*} val\n     * @param {Boolean} [enumerable]\n     */\n\n    function def(obj, key, val, enumerable) {\n        Object.defineProperty(obj, key, {\n            value: val,\n            enumerable: !!enumerable,\n            writable: true,\n            configurable: true\n        });\n    }\n\n    /**\n     * Debounce a function so it only gets called after the\n     * input stops arriving after the given wait period.\n     *\n     * @param {Function} func\n     * @param {Number} wait\n     * @return {Function} - the debounced function\n     */\n\n    function _debounce(func, wait) {\n        var timeout, args, context, timestamp, result;\n        var later = function later() {\n            var last = Date.now() - timestamp;\n            if (last < wait && last >= 0) {\n                timeout = setTimeout(later, wait - last);\n            } else {\n                timeout = null;\n                result = func.apply(context, args);\n                if (!timeout) context = args = null;\n            }\n        };\n        return function () {\n            context = this;\n            args = arguments;\n            timestamp = Date.now();\n            if (!timeout) {\n                timeout = setTimeout(later, wait);\n            }\n            return result;\n        };\n    }\n\n    /**\n     * Manual indexOf because it's slightly faster than\n     * native.\n     *\n     * @param {Array} arr\n     * @param {*} obj\n     */\n\n    function indexOf(arr, obj) {\n        var i = arr.length;\n        while (i--) {\n            if (arr[i] === obj) return i;\n        }\n        return -1;\n    }\n\n    /**\n     * Make a cancellable version of an async callback.\n     *\n     * @param {Function} fn\n     * @return {Function}\n     */\n\n    function cancellable(fn) {\n        var cb = function cb() {\n            if (!cb.cancelled) {\n                return fn.apply(this, arguments);\n            }\n        };\n        cb.cancel = function () {\n            cb.cancelled = true;\n        };\n        return cb;\n    }\n\n    /**\n     * Check if two values are loosely equal - that is,\n     * if they are plain objects, do they have the same shape?\n     *\n     * @param {*} a\n     * @param {*} b\n     * @return {Boolean}\n     */\n\n    function looseEqual(a, b) {\n        /* eslint-disable eqeqeq */\n        return a == b || (isObject(a) && isObject(b) ? JSON.stringify(a) === JSON.stringify(b) : false);\n        /* eslint-enable eqeqeq */\n    }\n\n    var hasProto = ('__proto__' in {});\n\n    // Browser environment sniffing\n    var inBrowser = typeof window !== 'undefined' && Object.prototype.toString.call(window) !== '[object Object]';\n\n    // detect devtools\n    var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n    // UA sniffing for working around browser-specific quirks\n    var UA = inBrowser && window.navigator.userAgent.toLowerCase();\n    var isIE9 = UA && UA.indexOf('msie 9.0') > 0;\n    var isAndroid = UA && UA.indexOf('android') > 0;\n    var isIos = UA && /(iphone|ipad|ipod|ios)/i.test(UA);\n    var isWechat = UA && UA.indexOf('micromessenger') > 0;\n\n    var transitionProp = undefined;\n    var transitionEndEvent = undefined;\n    var animationProp = undefined;\n    var animationEndEvent = undefined;\n\n    // Transition property/event sniffing\n    if (inBrowser && !isIE9) {\n        var isWebkitTrans = window.ontransitionend === undefined && window.onwebkittransitionend !== undefined;\n        var isWebkitAnim = window.onanimationend === undefined && window.onwebkitanimationend !== undefined;\n        transitionProp = isWebkitTrans ? 'WebkitTransition' : 'transition';\n        transitionEndEvent = isWebkitTrans ? 'webkitTransitionEnd' : 'transitionend';\n        animationProp = isWebkitAnim ? 'WebkitAnimation' : 'animation';\n        animationEndEvent = isWebkitAnim ? 'webkitAnimationEnd' : 'animationend';\n    }\n\n    /**\n     * Defer a task to execute it asynchronously. Ideally this\n     * should be executed as a microtask, so we leverage\n     * MutationObserver if it's available, and fallback to\n     * setTimeout(0).\n     *\n     * @param {Function} cb\n     * @param {Object} ctx\n     */\n\n    var nextTick = (function () {\n        var callbacks = [];\n        var pending = false;\n        var timerFunc;\n        function nextTickHandler() {\n            pending = false;\n            var copies = callbacks.slice(0);\n            callbacks = [];\n            for (var i = 0; i < copies.length; i++) {\n                copies[i]();\n            }\n        }\n\n        /* istanbul ignore if */\n        if (typeof MutationObserver !== 'undefined' && !(isWechat && isIos)) {\n            var counter = 1;\n            var observer = new MutationObserver(nextTickHandler);\n            var textNode = document.createTextNode(counter);\n            observer.observe(textNode, {\n                characterData: true\n            });\n            timerFunc = function () {\n                counter = (counter + 1) % 2;\n                textNode.data = counter;\n            };\n        } else {\n            // webpack attempts to inject a shim for setImmediate\n            // if it is used as a global, so we have to work around that to\n            // avoid bundling unnecessary code.\n            var context = inBrowser ? window : typeof global !== 'undefined' ? global : {};\n            timerFunc = context.setImmediate || setTimeout;\n        }\n        return function (cb, ctx) {\n            var func = ctx ? function () {\n                cb.call(ctx);\n            } : cb;\n            callbacks.push(func);\n            if (pending) return;\n            pending = true;\n            timerFunc(nextTickHandler, 0);\n        };\n    })();\n\n    var _Set = undefined;\n    /* istanbul ignore if */\n    if (typeof Set !== 'undefined' && Set.toString().match(/native code/)) {\n        // use native Set when available.\n        _Set = Set;\n    } else {\n        // a non-standard Set polyfill that only works with primitive keys.\n        _Set = function () {\n            this.set = Object.create(null);\n        };\n        _Set.prototype.has = function (key) {\n            return this.set[key] !== undefined;\n        };\n        _Set.prototype.add = function (key) {\n            this.set[key] = 1;\n        };\n        _Set.prototype.clear = function () {\n            this.set = Object.create(null);\n        };\n    }\n\n    function Cache(limit) {\n        this.size = 0;\n        this.limit = limit;\n        this.head = this.tail = undefined;\n        this._keymap = Object.create(null);\n    }\n\n    var p = Cache.prototype;\n\n    /**\n     * Put <value> into the cache associated with <key>.\n     * Returns the entry which was removed to make room for\n     * the new entry. Otherwise undefined is returned.\n     * (i.e. if there was enough room already).\n     *\n     * @param {String} key\n     * @param {*} value\n     * @return {Entry|undefined}\n     */\n\n    p.put = function (key, value) {\n        var removed;\n        if (this.size === this.limit) {\n            removed = this.shift();\n        }\n\n        var entry = this.get(key, true);\n        if (!entry) {\n            entry = {\n                key: key\n            };\n            this._keymap[key] = entry;\n            if (this.tail) {\n                this.tail.newer = entry;\n                entry.older = this.tail;\n            } else {\n                this.head = entry;\n            }\n            this.tail = entry;\n            this.size++;\n        }\n        entry.value = value;\n\n        return removed;\n    };\n\n    /**\n     * Purge the least recently used (oldest) entry from the\n     * cache. Returns the removed entry or undefined if the\n     * cache was empty.\n     */\n\n    p.shift = function () {\n        var entry = this.head;\n        if (entry) {\n            this.head = this.head.newer;\n            this.head.older = undefined;\n            entry.newer = entry.older = undefined;\n            this._keymap[entry.key] = undefined;\n            this.size--;\n        }\n        return entry;\n    };\n\n    /**\n     * Get and register recent use of <key>. Returns the value\n     * associated with <key> or undefined if not in cache.\n     *\n     * @param {String} key\n     * @param {Boolean} returnEntry\n     * @return {Entry|*}\n     */\n\n    p.get = function (key, returnEntry) {\n        var entry = this._keymap[key];\n        if (entry === undefined) return;\n        if (entry === this.tail) {\n            return returnEntry ? entry : entry.value;\n        }\n        // HEAD--------------TAIL\n        //   <.older   .newer>\n        //  <--- add direction --\n        //   A  B  C  <D>  E\n        if (entry.newer) {\n            if (entry === this.head) {\n                this.head = entry.newer;\n            }\n            entry.newer.older = entry.older; // C <-- E.\n        }\n        if (entry.older) {\n            entry.older.newer = entry.newer; // C. --> E\n        }\n        entry.newer = undefined; // D --x\n        entry.older = this.tail; // D. --> E\n        if (this.tail) {\n            this.tail.newer = entry; // E. <-- D\n        }\n        this.tail = entry;\n        return returnEntry ? entry : entry.value;\n    };\n\n    var cache$1 = new Cache(1000);\n    var filterTokenRE = /[^\\s'\"]+|'[^']*'|\"[^\"]*\"/g;\n    var reservedArgRE = /^in$|^-?\\d+/;\n\n    /**\n     * Parser state\n     */\n\n    var str;\n    var dir;\n    var c;\n    var prev;\n    var i;\n    var l;\n    var lastFilterIndex;\n    var inSingle;\n    var inDouble;\n    var curly;\n    var square;\n    var paren;\n    /**\n     * Push a filter to the current directive object\n     */\n\n    function pushFilter() {\n        var exp = str.slice(lastFilterIndex, i).trim();\n        var filter;\n        if (exp) {\n            filter = {};\n            var tokens = exp.match(filterTokenRE);\n            filter.name = tokens[0];\n            if (tokens.length > 1) {\n                filter.args = tokens.slice(1).map(processFilterArg);\n            }\n        }\n        if (filter) {\n            (dir.filters = dir.filters || []).push(filter);\n        }\n        lastFilterIndex = i + 1;\n    }\n\n    /**\n     * Check if an argument is dynamic and strip quotes.\n     *\n     * @param {String} arg\n     * @return {Object}\n     */\n\n    function processFilterArg(arg) {\n        if (reservedArgRE.test(arg)) {\n            return {\n                value: toNumber(arg),\n                dynamic: false\n            };\n        } else {\n            var stripped = stripQuotes(arg);\n            var dynamic = stripped === arg;\n            return {\n                value: dynamic ? arg : stripped,\n                dynamic: dynamic\n            };\n        }\n    }\n\n    /**\n     * Parse a directive value and extract the expression\n     * and its filters into a descriptor.\n     *\n     * Example:\n     *\n     * \"a + 1 | uppercase\" will yield:\n     * {\n   *   expression: 'a + 1',\n   *   filters: [\n   *     { name: 'uppercase', args: null }\n   *   ]\n   * }\n     *\n     * @param {String} s\n     * @return {Object}\n     */\n\n    function parseDirective(s) {\n        var hit = cache$1.get(s);\n        if (hit) {\n            return hit;\n        }\n\n        // reset parser state\n        str = s;\n        inSingle = inDouble = false;\n        curly = square = paren = 0;\n        lastFilterIndex = 0;\n        dir = {};\n\n        for (i = 0, l = str.length; i < l; i++) {\n            prev = c;\n            c = str.charCodeAt(i);\n            if (inSingle) {\n                // check single quote\n                if (c === 0x27 && prev !== 0x5C) inSingle = !inSingle;\n            } else if (inDouble) {\n                // check double quote\n                if (c === 0x22 && prev !== 0x5C) inDouble = !inDouble;\n            } else if (c === 0x7C && // pipe\n                str.charCodeAt(i + 1) !== 0x7C && str.charCodeAt(i - 1) !== 0x7C) {\n                if (dir.expression == null) {\n                    // first filter, end of expression\n                    lastFilterIndex = i + 1;\n                    dir.expression = str.slice(0, i).trim();\n                } else {\n                    // already has filter\n                    pushFilter();\n                }\n            } else {\n                switch (c) {\n                    case 0x22:\n                        inDouble = true;break; // \"\n                    case 0x27:\n                        inSingle = true;break; // '\n                    case 0x28:\n                        paren++;break; // (\n                    case 0x29:\n                        paren--;break; // )\n                    case 0x5B:\n                        square++;break; // [\n                    case 0x5D:\n                        square--;break; // ]\n                    case 0x7B:\n                        curly++;break; // {\n                    case 0x7D:\n                        curly--;break; // }\n                }\n            }\n        }\n\n        if (dir.expression == null) {\n            dir.expression = str.slice(0, i).trim();\n        } else if (lastFilterIndex !== 0) {\n            pushFilter();\n        }\n\n        cache$1.put(s, dir);\n        return dir;\n    }\n\n    var directive = Object.freeze({\n        parseDirective: parseDirective\n    });\n\n    var regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\n    var cache = undefined;\n    var tagRE = undefined;\n    var htmlRE = undefined;\n    /**\n     * Escape a string so it can be used in a RegExp\n     * constructor.\n     *\n     * @param {String} str\n     */\n\n    function escapeRegex(str) {\n        return str.replace(regexEscapeRE, '\\\\$&');\n    }\n\n    function compileRegex() {\n        var open = escapeRegex(config.delimiters[0]);\n        var close = escapeRegex(config.delimiters[1]);\n        var unsafeOpen = escapeRegex(config.unsafeDelimiters[0]);\n        var unsafeClose = escapeRegex(config.unsafeDelimiters[1]);\n        tagRE = new RegExp(unsafeOpen + '((?:.|\\\\n)+?)' + unsafeClose + '|' + open + '((?:.|\\\\n)+?)' + close, 'g');\n        htmlRE = new RegExp('^' + unsafeOpen + '.*' + unsafeClose + '$');\n        // reset cache\n        cache = new Cache(1000);\n    }\n\n    /**\n     * Parse a template text string into an array of tokens.\n     *\n     * @param {String} text\n     * @return {Array<Object> | null}\n     *               - {String} type\n     *               - {String} value\n     *               - {Boolean} [html]\n     *               - {Boolean} [oneTime]\n     */\n\n    function parseText(text) {\n        if (!cache) {\n            compileRegex();\n        }\n        var hit = cache.get(text);\n        if (hit) {\n            return hit;\n        }\n        if (!tagRE.test(text)) {\n            return null;\n        }\n        var tokens = [];\n        var lastIndex = tagRE.lastIndex = 0;\n        var match, index, html, value, first, oneTime;\n        /* eslint-disable no-cond-assign */\n        while (match = tagRE.exec(text)) {\n            /* eslint-enable no-cond-assign */\n            index = match.index;\n            // push text token\n            if (index > lastIndex) {\n                tokens.push({\n                    value: text.slice(lastIndex, index)\n                });\n            }\n            // tag token\n            html = htmlRE.test(match[0]);\n            value = html ? match[1] : match[2];\n            first = value.charCodeAt(0);\n            oneTime = first === 42; // *\n            value = oneTime ? value.slice(1) : value;\n            tokens.push({\n                tag: true,\n                value: value.trim(),\n                html: html,\n                oneTime: oneTime\n            });\n            lastIndex = index + match[0].length;\n        }\n        if (lastIndex < text.length) {\n            tokens.push({\n                value: text.slice(lastIndex)\n            });\n        }\n        cache.put(text, tokens);\n        return tokens;\n    }\n\n    /**\n     * Format a list of tokens into an expression.\n     * e.g. tokens parsed from 'a {{b}} c' can be serialized\n     * into one single expression as '\"a \" + b + \" c\"'.\n     *\n     * @param {Array} tokens\n     * @param {Vue} [vm]\n     * @return {String}\n     */\n\n    function tokensToExp(tokens, vm) {\n        if (tokens.length > 1) {\n            return tokens.map(function (token) {\n                return formatToken(token, vm);\n            }).join('+');\n        } else {\n            return formatToken(tokens[0], vm, true);\n        }\n    }\n\n    /**\n     * Format a single token.\n     *\n     * @param {Object} token\n     * @param {Vue} [vm]\n     * @param {Boolean} [single]\n     * @return {String}\n     */\n\n    function formatToken(token, vm, single) {\n        return token.tag ? token.oneTime && vm ? '\"' + vm.$eval(token.value) + '\"' : inlineFilters(token.value, single) : '\"' + token.value + '\"';\n    }\n\n    /**\n     * For an attribute with multiple interpolation tags,\n     * e.g. attr=\"some-{{thing | filter}}\", in order to combine\n     * the whole thing into a single watchable expression, we\n     * have to inline those filters. This function does exactly\n     * that. This is a bit hacky but it avoids heavy changes\n     * to directive parser and watcher mechanism.\n     *\n     * @param {String} exp\n     * @param {Boolean} single\n     * @return {String}\n     */\n\n    var filterRE = /[^|]\\|[^|]/;\n    function inlineFilters(exp, single) {\n        if (!filterRE.test(exp)) {\n            return single ? exp : '(' + exp + ')';\n        } else {\n            var dir = parseDirective(exp);\n            if (!dir.filters) {\n                return '(' + exp + ')';\n            } else {\n                return 'this._applyFilters(' + dir.expression + // value\n                    ',null,' + // oldValue (null for read)\n                    JSON.stringify(dir.filters) + // filter descriptors\n                    ',false)'; // write?\n            }\n        }\n    }\n\n    var text = Object.freeze({\n        compileRegex: compileRegex,\n        parseText: parseText,\n        tokensToExp: tokensToExp\n    });\n\n    var delimiters = ['{{', '}}'];\n    var unsafeDelimiters = ['{{{', '}}}'];\n\n    var config = Object.defineProperties({\n\n        /**\n         * Whether to print debug messages.\n         * Also enables stack trace for warnings.\n         *\n         * @type {Boolean}\n         */\n\n        debug: false,\n\n        /**\n         * Whether to suppress warnings.\n         *\n         * @type {Boolean}\n         */\n\n        silent: false,\n\n        /**\n         * Whether to use async rendering.\n         */\n\n        async: true,\n\n        /**\n         * Whether to warn against errors caught when evaluating\n         * expressions.\n         */\n\n        warnExpressionErrors: true,\n\n        /**\n         * Whether to allow devtools inspection.\n         * Disabled by default in production builds.\n         */\n\n        devtools: 'development' !== 'production',\n\n        /**\n         * Internal flag to indicate the delimiters have been\n         * changed.\n         *\n         * @type {Boolean}\n         */\n\n        _delimitersChanged: true,\n\n        /**\n         * List of asset types that a component can own.\n         *\n         * @type {Array}\n         */\n\n        _assetTypes: ['component', 'directive', 'elementDirective', 'filter', 'transition', 'partial'],\n\n        /**\n         * prop binding modes\n         */\n\n        _propBindingModes: {\n            ONE_WAY: 0,\n            TWO_WAY: 1,\n            ONE_TIME: 2\n        },\n\n        /**\n         * Max circular updates allowed in a batcher flush cycle.\n         */\n\n        _maxUpdateCount: 100\n\n    }, {\n        delimiters: { /**\n         * Interpolation delimiters. Changing these would trigger\n         * the text parser to re-compile the regular expressions.\n         *\n         * @type {Array<String>}\n         */\n\n        get: function get() {\n            return delimiters;\n        },\n            set: function set(val) {\n                delimiters = val;\n                compileRegex();\n            },\n            configurable: true,\n            enumerable: true\n        },\n        unsafeDelimiters: {\n            get: function get() {\n                return unsafeDelimiters;\n            },\n            set: function set(val) {\n                unsafeDelimiters = val;\n                compileRegex();\n            },\n            configurable: true,\n            enumerable: true\n        }\n    });\n\n    var warn = undefined;\n    var formatComponentName = undefined;\n\n    if ('development' !== 'production') {\n        (function () {\n            var hasConsole = typeof console !== 'undefined';\n\n            warn = function (msg, vm) {\n                if (hasConsole && !config.silent) {\n                    console.error('[Vue warn]: ' + msg + (vm ? formatComponentName(vm) : ''));\n                }\n            };\n\n            formatComponentName = function (vm) {\n                var name = vm._isVue ? vm.$options.name : vm.name;\n                return name ? ' (found in component: <' + hyphenate(name) + '>)' : '';\n            };\n        })();\n    }\n\n    /**\n     * Append with transition.\n     *\n     * @param {Element} el\n     * @param {Element} target\n     * @param {Vue} vm\n     * @param {Function} [cb]\n     */\n\n    function appendWithTransition(el, target, vm, cb) {\n        applyTransition(el, 1, function () {\n            target.appendChild(el);\n        }, vm, cb);\n    }\n\n    /**\n     * InsertBefore with transition.\n     *\n     * @param {Element} el\n     * @param {Element} target\n     * @param {Vue} vm\n     * @param {Function} [cb]\n     */\n\n    function beforeWithTransition(el, target, vm, cb) {\n        applyTransition(el, 1, function () {\n            before(el, target);\n        }, vm, cb);\n    }\n\n    /**\n     * Remove with transition.\n     *\n     * @param {Element} el\n     * @param {Vue} vm\n     * @param {Function} [cb]\n     */\n\n    function removeWithTransition(el, vm, cb) {\n        applyTransition(el, -1, function () {\n            remove(el);\n        }, vm, cb);\n    }\n\n    /**\n     * Apply transitions with an operation callback.\n     *\n     * @param {Element} el\n     * @param {Number} direction\n     *                  1: enter\n     *                 -1: leave\n     * @param {Function} op - the actual DOM operation\n     * @param {Vue} vm\n     * @param {Function} [cb]\n     */\n\n    function applyTransition(el, direction, op, vm, cb) {\n        var transition = el.__v_trans;\n        if (!transition ||\n            // skip if there are no js hooks and CSS transition is\n            // not supported\n            !transition.hooks && !transitionEndEvent ||\n            // skip transitions for initial compile\n            !vm._isCompiled ||\n            // if the vm is being manipulated by a parent directive\n            // during the parent's compilation phase, skip the\n            // animation.\n            vm.$parent && !vm.$parent._isCompiled) {\n            op();\n            if (cb) cb();\n            return;\n        }\n        var action = direction > 0 ? 'enter' : 'leave';\n        transition[action](op, cb);\n    }\n\n    var transition = Object.freeze({\n        appendWithTransition: appendWithTransition,\n        beforeWithTransition: beforeWithTransition,\n        removeWithTransition: removeWithTransition,\n        applyTransition: applyTransition\n    });\n\n    /**\n     * Query an element selector if it's not an element already.\n     *\n     * @param {String|Element} el\n     * @return {Element}\n     */\n\n    function query(el) {\n        if (typeof el === 'string') {\n            var selector = el;\n            el = document.querySelector(el);\n            if (!el) {\n                'development' !== 'production' && warn('Cannot find element: ' + selector);\n            }\n        }\n        return el;\n    }\n\n    /**\n     * Check if a node is in the document.\n     * Note: document.documentElement.contains should work here\n     * but always returns false for comment nodes in phantomjs,\n     * making unit tests difficult. This is fixed by doing the\n     * contains() check on the node's parentNode instead of\n     * the node itself.\n     *\n     * @param {Node} node\n     * @return {Boolean}\n     */\n\n    function inDoc(node) {\n        if (!node) return false;\n        var doc = node.ownerDocument.documentElement;\n        var parent = node.parentNode;\n        return doc === node || doc === parent || !!(parent && parent.nodeType === 1 && doc.contains(parent));\n    }\n\n    /**\n     * Get and remove an attribute from a node.\n     *\n     * @param {Node} node\n     * @param {String} _attr\n     */\n\n    function getAttr(node, _attr) {\n        var val = node.getAttribute(_attr);\n        if (val !== null) {\n            node.removeAttribute(_attr);\n        }\n        return val;\n    }\n\n    /**\n     * Get an attribute with colon or v-bind: prefix.\n     *\n     * @param {Node} node\n     * @param {String} name\n     * @return {String|null}\n     */\n\n    function getBindAttr(node, name) {\n        var val = getAttr(node, ':' + name);\n        if (val === null) {\n            val = getAttr(node, 'v-bind:' + name);\n        }\n        return val;\n    }\n\n    /**\n     * Check the presence of a bind attribute.\n     *\n     * @param {Node} node\n     * @param {String} name\n     * @return {Boolean}\n     */\n\n    function hasBindAttr(node, name) {\n        return node.hasAttribute(name) || node.hasAttribute(':' + name) || node.hasAttribute('v-bind:' + name);\n    }\n\n    /**\n     * Insert el before target\n     *\n     * @param {Element} el\n     * @param {Element} target\n     */\n\n    function before(el, target) {\n        target.parentNode.insertBefore(el, target);\n    }\n\n    /**\n     * Insert el after target\n     *\n     * @param {Element} el\n     * @param {Element} target\n     */\n\n    function after(el, target) {\n        if (target.nextSibling) {\n            before(el, target.nextSibling);\n        } else {\n            target.parentNode.appendChild(el);\n        }\n    }\n\n    /**\n     * Remove el from DOM\n     *\n     * @param {Element} el\n     */\n\n    function remove(el) {\n        el.parentNode.removeChild(el);\n    }\n\n    /**\n     * Prepend el to target\n     *\n     * @param {Element} el\n     * @param {Element} target\n     */\n\n    function prepend(el, target) {\n        if (target.firstChild) {\n            before(el, target.firstChild);\n        } else {\n            target.appendChild(el);\n        }\n    }\n\n    /**\n     * Replace target with el\n     *\n     * @param {Element} target\n     * @param {Element} el\n     */\n\n    function replace(target, el) {\n        var parent = target.parentNode;\n        if (parent) {\n            parent.replaceChild(el, target);\n        }\n    }\n\n    /**\n     * Add event listener shorthand.\n     *\n     * @param {Element} el\n     * @param {String} event\n     * @param {Function} cb\n     * @param {Boolean} [useCapture]\n     */\n\n    function on(el, event, cb, useCapture) {\n        el.addEventListener(event, cb, useCapture);\n    }\n\n    /**\n     * Remove event listener shorthand.\n     *\n     * @param {Element} el\n     * @param {String} event\n     * @param {Function} cb\n     */\n\n    function off(el, event, cb) {\n        el.removeEventListener(event, cb);\n    }\n\n    /**\n     * For IE9 compat: when both class and :class are present\n     * getAttribute('class') returns wrong value...\n     *\n     * @param {Element} el\n     * @return {String}\n     */\n\n    function getClass(el) {\n        var classname = el.className;\n        if (typeof classname === 'object') {\n            classname = classname.baseVal || '';\n        }\n        return classname;\n    }\n\n    /**\n     * In IE9, setAttribute('class') will result in empty class\n     * if the element also has the :class attribute; However in\n     * PhantomJS, setting `className` does not work on SVG elements...\n     * So we have to do a conditional check here.\n     *\n     * @param {Element} el\n     * @param {String} cls\n     */\n\n    function setClass(el, cls) {\n        /* istanbul ignore if */\n        if (isIE9 && !/svg$/.test(el.namespaceURI)) {\n            el.className = cls;\n        } else {\n            el.setAttribute('class', cls);\n        }\n    }\n\n    /**\n     * Add class with compatibility for IE & SVG\n     *\n     * @param {Element} el\n     * @param {String} cls\n     */\n\n    function addClass(el, cls) {\n        if (el.classList) {\n            el.classList.add(cls);\n        } else {\n            var cur = ' ' + getClass(el) + ' ';\n            if (cur.indexOf(' ' + cls + ' ') < 0) {\n                setClass(el, (cur + cls).trim());\n            }\n        }\n    }\n\n    /**\n     * Remove class with compatibility for IE & SVG\n     *\n     * @param {Element} el\n     * @param {String} cls\n     */\n\n    function removeClass(el, cls) {\n        if (el.classList) {\n            el.classList.remove(cls);\n        } else {\n            var cur = ' ' + getClass(el) + ' ';\n            var tar = ' ' + cls + ' ';\n            while (cur.indexOf(tar) >= 0) {\n                cur = cur.replace(tar, ' ');\n            }\n            setClass(el, cur.trim());\n        }\n        if (!el.className) {\n            el.removeAttribute('class');\n        }\n    }\n\n    /**\n     * Extract raw content inside an element into a temporary\n     * container div\n     *\n     * @param {Element} el\n     * @param {Boolean} asFragment\n     * @return {Element|DocumentFragment}\n     */\n\n    function extractContent(el, asFragment) {\n        var child;\n        var rawContent;\n        /* istanbul ignore if */\n        if (isTemplate(el) && isFragment(el.content)) {\n            el = el.content;\n        }\n        if (el.hasChildNodes()) {\n            trimNode(el);\n            rawContent = asFragment ? document.createDocumentFragment() : document.createElement('div');\n            /* eslint-disable no-cond-assign */\n            while (child = el.firstChild) {\n                /* eslint-enable no-cond-assign */\n                rawContent.appendChild(child);\n            }\n        }\n        return rawContent;\n    }\n\n    /**\n     * Trim possible empty head/tail text and comment\n     * nodes inside a parent.\n     *\n     * @param {Node} node\n     */\n\n    function trimNode(node) {\n        var child;\n        /* eslint-disable no-sequences */\n        while ((child = node.firstChild, isTrimmable(child))) {\n            node.removeChild(child);\n        }\n        while ((child = node.lastChild, isTrimmable(child))) {\n            node.removeChild(child);\n        }\n        /* eslint-enable no-sequences */\n    }\n\n    function isTrimmable(node) {\n        return node && (node.nodeType === 3 && !node.data.trim() || node.nodeType === 8);\n    }\n\n    /**\n     * Check if an element is a template tag.\n     * Note if the template appears inside an SVG its tagName\n     * will be in lowercase.\n     *\n     * @param {Element} el\n     */\n\n    function isTemplate(el) {\n        return el.tagName && el.tagName.toLowerCase() === 'template';\n    }\n\n    /**\n     * Create an \"anchor\" for performing dom insertion/removals.\n     * This is used in a number of scenarios:\n     * - fragment instance\n     * - v-html\n     * - v-if\n     * - v-for\n     * - component\n     *\n     * @param {String} content\n     * @param {Boolean} persist - IE trashes empty textNodes on\n     *                            cloneNode(true), so in certain\n     *                            cases the anchor needs to be\n     *                            non-empty to be persisted in\n     *                            templates.\n     * @return {Comment|Text}\n     */\n\n    function createAnchor(content, persist) {\n        var anchor = config.debug ? document.createComment(content) : document.createTextNode(persist ? ' ' : '');\n        anchor.__v_anchor = true;\n        return anchor;\n    }\n\n    /**\n     * Find a component ref attribute that starts with $.\n     *\n     * @param {Element} node\n     * @return {String|undefined}\n     */\n\n    var refRE = /^v-ref:/;\n\n    function findRef(node) {\n        if (node.hasAttributes()) {\n            var attrs = node.attributes;\n            for (var i = 0, l = attrs.length; i < l; i++) {\n                var name = attrs[i].name;\n                if (refRE.test(name)) {\n                    return camelize(name.replace(refRE, ''));\n                }\n            }\n        }\n    }\n\n    /**\n     * Map a function to a range of nodes .\n     *\n     * @param {Node} node\n     * @param {Node} end\n     * @param {Function} op\n     */\n\n    function mapNodeRange(node, end, op) {\n        var next;\n        while (node !== end) {\n            next = node.nextSibling;\n            op(node);\n            node = next;\n        }\n        op(end);\n    }\n\n    /**\n     * Remove a range of nodes with transition, store\n     * the nodes in a fragment with correct ordering,\n     * and call callback when done.\n     *\n     * @param {Node} start\n     * @param {Node} end\n     * @param {Vue} vm\n     * @param {DocumentFragment} frag\n     * @param {Function} cb\n     */\n\n    function removeNodeRange(start, end, vm, frag, cb) {\n        var done = false;\n        var removed = 0;\n        var nodes = [];\n        mapNodeRange(start, end, function (node) {\n            if (node === end) done = true;\n            nodes.push(node);\n            removeWithTransition(node, vm, onRemoved);\n        });\n        function onRemoved() {\n            removed++;\n            if (done && removed >= nodes.length) {\n                for (var i = 0; i < nodes.length; i++) {\n                    frag.appendChild(nodes[i]);\n                }\n                cb && cb();\n            }\n        }\n    }\n\n    /**\n     * Check if a node is a DocumentFragment.\n     *\n     * @param {Node} node\n     * @return {Boolean}\n     */\n\n    function isFragment(node) {\n        return node && node.nodeType === 11;\n    }\n\n    /**\n     * Get outerHTML of elements, taking care\n     * of SVG elements in IE as well.\n     *\n     * @param {Element} el\n     * @return {String}\n     */\n\n    function getOuterHTML(el) {\n        if (el.outerHTML) {\n            return el.outerHTML;\n        } else {\n            var container = document.createElement('div');\n            container.appendChild(el.cloneNode(true));\n            return container.innerHTML;\n        }\n    }\n\n    var commonTagRE = /^(div|p|span|img|a|b|i|br|ul|ol|li|h1|h2|h3|h4|h5|h6|code|pre|table|th|td|tr|form|label|input|select|option|nav|article|section|header|footer)$/i;\n    var reservedTagRE = /^(slot|partial|component)$/i;\n\n    var isUnknownElement = undefined;\n    if ('development' !== 'production') {\n        isUnknownElement = function (el, tag) {\n            if (tag.indexOf('-') > -1) {\n                // http://stackoverflow.com/a/28210364/1070244\n                return el.constructor === window.HTMLUnknownElement || el.constructor === window.HTMLElement;\n            } else {\n                return (/HTMLUnknownElement/.test(el.toString()) &&\n                    // Chrome returns unknown for several HTML5 elements.\n                    // https://code.google.com/p/chromium/issues/detail?id=540526\n                    !/^(data|time|rtc|rb)$/.test(tag)\n                );\n            }\n        };\n    }\n\n    /**\n     * Check if an element is a component, if yes return its\n     * component id.\n     *\n     * @param {Element} el\n     * @param {Object} options\n     * @return {Object|undefined}\n     */\n\n    function checkComponentAttr(el, options) {\n        var tag = el.tagName.toLowerCase();\n        var hasAttrs = el.hasAttributes();\n        if (!commonTagRE.test(tag) && !reservedTagRE.test(tag)) {\n            if (resolveAsset(options, 'components', tag)) {\n                return { id: tag };\n            } else {\n                var is = hasAttrs && getIsBinding(el, options);\n                if (is) {\n                    return is;\n                } else if ('development' !== 'production') {\n                    var expectedTag = options._componentNameMap && options._componentNameMap[tag];\n                    if (expectedTag) {\n                        warn('Unknown custom element: <' + tag + '> - ' + 'did you mean <' + expectedTag + '>? ' + 'HTML is case-insensitive, remember to use kebab-case in templates.');\n                    } else if (isUnknownElement(el, tag)) {\n                        warn('Unknown custom element: <' + tag + '> - did you ' + 'register the component correctly? For recursive components, ' + 'make sure to provide the \"name\" option.');\n                    }\n                }\n            }\n        } else if (hasAttrs) {\n            return getIsBinding(el, options);\n        }\n    }\n\n    /**\n     * Get \"is\" binding from an element.\n     *\n     * @param {Element} el\n     * @param {Object} options\n     * @return {Object|undefined}\n     */\n\n    function getIsBinding(el, options) {\n        // dynamic syntax\n        var exp = el.getAttribute('is');\n        if (exp != null) {\n            if (resolveAsset(options, 'components', exp)) {\n                el.removeAttribute('is');\n                return { id: exp };\n            }\n        } else {\n            exp = getBindAttr(el, 'is');\n            if (exp != null) {\n                return { id: exp, dynamic: true };\n            }\n        }\n    }\n\n    /**\n     * Option overwriting strategies are functions that handle\n     * how to merge a parent option value and a child option\n     * value into the final value.\n     *\n     * All strategy functions follow the same signature:\n     *\n     * @param {*} parentVal\n     * @param {*} childVal\n     * @param {Vue} [vm]\n     */\n\n    var strats = config.optionMergeStrategies = Object.create(null);\n\n    /**\n     * Helper that recursively merges two data objects together.\n     */\n\n    function mergeData(to, from) {\n        var key, toVal, fromVal;\n        for (key in from) {\n            toVal = to[key];\n            fromVal = from[key];\n            if (!hasOwn(to, key)) {\n                set(to, key, fromVal);\n            } else if (isObject(toVal) && isObject(fromVal)) {\n                mergeData(toVal, fromVal);\n            }\n        }\n        return to;\n    }\n\n    /**\n     * Data\n     */\n\n    strats.data = function (parentVal, childVal, vm) {\n        if (!vm) {\n            // in a Vue.extend merge, both should be functions\n            if (!childVal) {\n                return parentVal;\n            }\n            if (typeof childVal !== 'function') {\n                'development' !== 'production' && warn('The \"data\" option should be a function ' + 'that returns a per-instance value in component ' + 'definitions.', vm);\n                return parentVal;\n            }\n            if (!parentVal) {\n                return childVal;\n            }\n            // when parentVal & childVal are both present,\n            // we need to return a function that returns the\n            // merged result of both functions... no need to\n            // check if parentVal is a function here because\n            // it has to be a function to pass previous merges.\n            return function mergedDataFn() {\n                return mergeData(childVal.call(this), parentVal.call(this));\n            };\n        } else if (parentVal || childVal) {\n            return function mergedInstanceDataFn() {\n                // instance merge\n                var instanceData = typeof childVal === 'function' ? childVal.call(vm) : childVal;\n                var defaultData = typeof parentVal === 'function' ? parentVal.call(vm) : undefined;\n                if (instanceData) {\n                    return mergeData(instanceData, defaultData);\n                } else {\n                    return defaultData;\n                }\n            };\n        }\n    };\n\n    /**\n     * El\n     */\n\n    strats.el = function (parentVal, childVal, vm) {\n        if (!vm && childVal && typeof childVal !== 'function') {\n            'development' !== 'production' && warn('The \"el\" option should be a function ' + 'that returns a per-instance value in component ' + 'definitions.', vm);\n            return;\n        }\n        var ret = childVal || parentVal;\n        // invoke the element factory if this is instance merge\n        return vm && typeof ret === 'function' ? ret.call(vm) : ret;\n    };\n\n    /**\n     * Hooks and param attributes are merged as arrays.\n     */\n\n    strats.init = strats.created = strats.ready = strats.attached = strats.detached = strats.beforeCompile = strats.compiled = strats.beforeDestroy = strats.destroyed = strats.activate = function (parentVal, childVal) {\n        return childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [childVal] : parentVal;\n    };\n\n    /**\n     * Assets\n     *\n     * When a vm is present (instance creation), we need to do\n     * a three-way merge between constructor options, instance\n     * options and parent options.\n     */\n\n    function mergeAssets(parentVal, childVal) {\n        var res = Object.create(parentVal || null);\n        return childVal ? extend(res, guardArrayAssets(childVal)) : res;\n    }\n\n    config._assetTypes.forEach(function (type) {\n        strats[type + 's'] = mergeAssets;\n    });\n\n    /**\n     * Events & Watchers.\n     *\n     * Events & watchers hashes should not overwrite one\n     * another, so we merge them as arrays.\n     */\n\n    strats.watch = strats.events = function (parentVal, childVal) {\n        if (!childVal) return parentVal;\n        if (!parentVal) return childVal;\n        var ret = {};\n        extend(ret, parentVal);\n        for (var key in childVal) {\n            var parent = ret[key];\n            var child = childVal[key];\n            if (parent && !isArray(parent)) {\n                parent = [parent];\n            }\n            ret[key] = parent ? parent.concat(child) : [child];\n        }\n        return ret;\n    };\n\n    /**\n     * Other object hashes.\n     */\n\n    strats.props = strats.methods = strats.computed = function (parentVal, childVal) {\n        if (!childVal) return parentVal;\n        if (!parentVal) return childVal;\n        var ret = Object.create(null);\n        extend(ret, parentVal);\n        extend(ret, childVal);\n        return ret;\n    };\n\n    /**\n     * Default strategy.\n     */\n\n    var defaultStrat = function defaultStrat(parentVal, childVal) {\n        return childVal === undefined ? parentVal : childVal;\n    };\n\n    /**\n     * Make sure component options get converted to actual\n     * constructors.\n     *\n     * @param {Object} options\n     */\n\n    function guardComponents(options) {\n        if (options.components) {\n            var components = options.components = guardArrayAssets(options.components);\n            var ids = Object.keys(components);\n            var def;\n            if ('development' !== 'production') {\n                var map = options._componentNameMap = {};\n            }\n            for (var i = 0, l = ids.length; i < l; i++) {\n                var key = ids[i];\n                if (commonTagRE.test(key) || reservedTagRE.test(key)) {\n                    'development' !== 'production' && warn('Do not use built-in or reserved HTML elements as component ' + 'id: ' + key);\n                    continue;\n                }\n                // record a all lowercase <-> kebab-case mapping for\n                // possible custom element case error warning\n                if ('development' !== 'production') {\n                    map[key.replace(/-/g, '').toLowerCase()] = hyphenate(key);\n                }\n                def = components[key];\n                if (isPlainObject(def)) {\n                    components[key] = Vue.extend(def);\n                }\n            }\n        }\n    }\n\n    /**\n     * Ensure all props option syntax are normalized into the\n     * Object-based format.\n     *\n     * @param {Object} options\n     */\n\n    function guardProps(options) {\n        var props = options.props;\n        var i, val;\n        if (isArray(props)) {\n            options.props = {};\n            i = props.length;\n            while (i--) {\n                val = props[i];\n                if (typeof val === 'string') {\n                    options.props[val] = null;\n                } else if (val.name) {\n                    options.props[val.name] = val;\n                }\n            }\n        } else if (isPlainObject(props)) {\n            var keys = Object.keys(props);\n            i = keys.length;\n            while (i--) {\n                val = props[keys[i]];\n                if (typeof val === 'function') {\n                    props[keys[i]] = { type: val };\n                }\n            }\n        }\n    }\n\n    /**\n     * Guard an Array-format assets option and converted it\n     * into the key-value Object format.\n     *\n     * @param {Object|Array} assets\n     * @return {Object}\n     */\n\n    function guardArrayAssets(assets) {\n        if (isArray(assets)) {\n            var res = {};\n            var i = assets.length;\n            var asset;\n            while (i--) {\n                asset = assets[i];\n                var id = typeof asset === 'function' ? asset.options && asset.options.name || asset.id : asset.name || asset.id;\n                if (!id) {\n                    'development' !== 'production' && warn('Array-syntax assets must provide a \"name\" or \"id\" field.');\n                } else {\n                    res[id] = asset;\n                }\n            }\n            return res;\n        }\n        return assets;\n    }\n\n    /**\n     * Merge two option objects into a new one.\n     * Core utility used in both instantiation and inheritance.\n     *\n     * @param {Object} parent\n     * @param {Object} child\n     * @param {Vue} [vm] - if vm is present, indicates this is\n     *                     an instantiation merge.\n     */\n\n    function mergeOptions(parent, child, vm) {\n        guardComponents(child);\n        guardProps(child);\n        if ('development' !== 'production') {\n            if (child.propsData && !vm) {\n                warn('propsData can only be used as an instantiation option.');\n            }\n        }\n        var options = {};\n        var key;\n        if (child['extends']) {\n            parent = typeof child['extends'] === 'function' ? mergeOptions(parent, child['extends'].options, vm) : mergeOptions(parent, child['extends'], vm);\n        }\n        if (child.mixins) {\n            for (var i = 0, l = child.mixins.length; i < l; i++) {\n                parent = mergeOptions(parent, child.mixins[i], vm);\n            }\n        }\n        for (key in parent) {\n            mergeField(key);\n        }\n        for (key in child) {\n            if (!hasOwn(parent, key)) {\n                mergeField(key);\n            }\n        }\n        function mergeField(key) {\n            var strat = strats[key] || defaultStrat;\n            options[key] = strat(parent[key], child[key], vm, key);\n        }\n        return options;\n    }\n\n    /**\n     * Resolve an asset.\n     * This function is used because child instances need access\n     * to assets defined in its ancestor chain.\n     *\n     * @param {Object} options\n     * @param {String} type\n     * @param {String} id\n     * @param {Boolean} warnMissing\n     * @return {Object|Function}\n     */\n\n    function resolveAsset(options, type, id, warnMissing) {\n        /* istanbul ignore if */\n        if (typeof id !== 'string') {\n            return;\n        }\n        var assets = options[type];\n        var camelizedId;\n        var res = assets[id] ||\n            // camelCase ID\n            assets[camelizedId = camelize(id)] ||\n            // Pascal Case ID\n            assets[camelizedId.charAt(0).toUpperCase() + camelizedId.slice(1)];\n        if ('development' !== 'production' && warnMissing && !res) {\n            warn('Failed to resolve ' + type.slice(0, -1) + ': ' + id, options);\n        }\n        return res;\n    }\n\n    var uid$1 = 0;\n\n    /**\n     * A dep is an observable that can have multiple\n     * directives subscribing to it.\n     *\n     * @constructor\n     */\n    function Dep() {\n        this.id = uid$1++;\n        this.subs = [];\n    }\n\n    // the current target watcher being evaluated.\n    // this is globally unique because there could be only one\n    // watcher being evaluated at any time.\n    Dep.target = null;\n\n    /**\n     * Add a directive subscriber.\n     *\n     * @param {Directive} sub\n     */\n\n    Dep.prototype.addSub = function (sub) {\n        this.subs.push(sub);\n    };\n\n    /**\n     * Remove a directive subscriber.\n     *\n     * @param {Directive} sub\n     */\n\n    Dep.prototype.removeSub = function (sub) {\n        this.subs.$remove(sub);\n    };\n\n    /**\n     * Add self as a dependency to the target watcher.\n     */\n\n    Dep.prototype.depend = function () {\n        Dep.target.addDep(this);\n    };\n\n    /**\n     * Notify all subscribers of a new value.\n     */\n\n    Dep.prototype.notify = function () {\n        // stablize the subscriber list first\n        var subs = toArray(this.subs);\n        for (var i = 0, l = subs.length; i < l; i++) {\n            subs[i].update();\n        }\n    };\n\n    var arrayProto = Array.prototype;\n    var arrayMethods = Object.create(arrayProto)\n\n    /**\n     * Intercept mutating methods and emit events\n     */\n\n        ;['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'].forEach(function (method) {\n        // cache original method\n        var original = arrayProto[method];\n        def(arrayMethods, method, function mutator() {\n            // avoid leaking arguments:\n            // http://jsperf.com/closure-with-arguments\n            var i = arguments.length;\n            var args = new Array(i);\n            while (i--) {\n                args[i] = arguments[i];\n            }\n            var result = original.apply(this, args);\n            var ob = this.__ob__;\n            var inserted;\n            switch (method) {\n                case 'push':\n                    inserted = args;\n                    break;\n                case 'unshift':\n                    inserted = args;\n                    break;\n                case 'splice':\n                    inserted = args.slice(2);\n                    break;\n            }\n            if (inserted) ob.observeArray(inserted);\n            // notify change\n            ob.dep.notify();\n            return result;\n        });\n    });\n\n    /**\n     * Swap the element at the given index with a new value\n     * and emits corresponding event.\n     *\n     * @param {Number} index\n     * @param {*} val\n     * @return {*} - replaced element\n     */\n\n    def(arrayProto, '$set', function $set(index, val) {\n        if (index >= this.length) {\n            this.length = Number(index) + 1;\n        }\n        return this.splice(index, 1, val)[0];\n    });\n\n    /**\n     * Convenience method to remove the element at given index or target element reference.\n     *\n     * @param {*} item\n     */\n\n    def(arrayProto, '$remove', function $remove(item) {\n        /* istanbul ignore if */\n        if (!this.length) return;\n        var index = indexOf(this, item);\n        if (index > -1) {\n            return this.splice(index, 1);\n        }\n    });\n\n    var arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n    /**\n     * By default, when a reactive property is set, the new value is\n     * also converted to become reactive. However in certain cases, e.g.\n     * v-for scope alias and props, we don't want to force conversion\n     * because the value may be a nested value under a frozen data structure.\n     *\n     * So whenever we want to set a reactive property without forcing\n     * conversion on the new value, we wrap that call inside this function.\n     */\n\n    var shouldConvert = true;\n\n    function withoutConversion(fn) {\n        shouldConvert = false;\n        fn();\n        shouldConvert = true;\n    }\n\n    /**\n     * Observer class that are attached to each observed\n     * object. Once attached, the observer converts target\n     * object's property keys into getter/setters that\n     * collect dependencies and dispatches updates.\n     *\n     * @param {Array|Object} value\n     * @constructor\n     */\n\n    function Observer(value) {\n        this.value = value;\n        this.dep = new Dep();\n        def(value, '__ob__', this);\n        if (isArray(value)) {\n            var augment = hasProto ? protoAugment : copyAugment;\n            augment(value, arrayMethods, arrayKeys);\n            this.observeArray(value);\n        } else {\n            this.walk(value);\n        }\n    }\n\n    // Instance methods\n\n    /**\n     * Walk through each property and convert them into\n     * getter/setters. This method should only be called when\n     * value type is Object.\n     *\n     * @param {Object} obj\n     */\n\n    Observer.prototype.walk = function (obj) {\n        var keys = Object.keys(obj);\n        for (var i = 0, l = keys.length; i < l; i++) {\n            this.convert(keys[i], obj[keys[i]]);\n        }\n    };\n\n    /**\n     * Observe a list of Array items.\n     *\n     * @param {Array} items\n     */\n\n    Observer.prototype.observeArray = function (items) {\n        for (var i = 0, l = items.length; i < l; i++) {\n            observe(items[i]);\n        }\n    };\n\n    /**\n     * Convert a property into getter/setter so we can emit\n     * the events when the property is accessed/changed.\n     *\n     * @param {String} key\n     * @param {*} val\n     */\n\n    Observer.prototype.convert = function (key, val) {\n        defineReactive(this.value, key, val);\n    };\n\n    /**\n     * Add an owner vm, so that when $set/$delete mutations\n     * happen we can notify owner vms to proxy the keys and\n     * digest the watchers. This is only called when the object\n     * is observed as an instance's root $data.\n     *\n     * @param {Vue} vm\n     */\n\n    Observer.prototype.addVm = function (vm) {\n        (this.vms || (this.vms = [])).push(vm);\n    };\n\n    /**\n     * Remove an owner vm. This is called when the object is\n     * swapped out as an instance's $data object.\n     *\n     * @param {Vue} vm\n     */\n\n    Observer.prototype.removeVm = function (vm) {\n        this.vms.$remove(vm);\n    };\n\n    // helpers\n\n    /**\n     * Augment an target Object or Array by intercepting\n     * the prototype chain using __proto__\n     *\n     * @param {Object|Array} target\n     * @param {Object} src\n     */\n\n    function protoAugment(target, src) {\n        /* eslint-disable no-proto */\n        target.__proto__ = src;\n        /* eslint-enable no-proto */\n    }\n\n    /**\n     * Augment an target Object or Array by defining\n     * hidden properties.\n     *\n     * @param {Object|Array} target\n     * @param {Object} proto\n     */\n\n    function copyAugment(target, src, keys) {\n        for (var i = 0, l = keys.length; i < l; i++) {\n            var key = keys[i];\n            def(target, key, src[key]);\n        }\n    }\n\n    /**\n     * Attempt to create an observer instance for a value,\n     * returns the new observer if successfully observed,\n     * or the existing observer if the value already has one.\n     *\n     * @param {*} value\n     * @param {Vue} [vm]\n     * @return {Observer|undefined}\n     * @static\n     */\n\n    function observe(value, vm) {\n        if (!value || typeof value !== 'object') {\n            return;\n        }\n        var ob;\n        if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n            ob = value.__ob__;\n        } else if (shouldConvert && (isArray(value) || isPlainObject(value)) && Object.isExtensible(value) && !value._isVue) {\n            ob = new Observer(value);\n        }\n        if (ob && vm) {\n            ob.addVm(vm);\n        }\n        return ob;\n    }\n\n    /**\n     * Define a reactive property on an Object.\n     *\n     * @param {Object} obj\n     * @param {String} key\n     * @param {*} val\n     */\n\n    function defineReactive(obj, key, val) {\n        var dep = new Dep();\n\n        var property = Object.getOwnPropertyDescriptor(obj, key);\n        if (property && property.configurable === false) {\n            return;\n        }\n\n        // cater for pre-defined getter/setters\n        var getter = property && property.get;\n        var setter = property && property.set;\n\n        var childOb = observe(val);\n        Object.defineProperty(obj, key, {\n            enumerable: true,\n            configurable: true,\n            get: function reactiveGetter() {\n                var value = getter ? getter.call(obj) : val;\n                if (Dep.target) {\n                    dep.depend();\n                    if (childOb) {\n                        childOb.dep.depend();\n                    }\n                    if (isArray(value)) {\n                        for (var e, i = 0, l = value.length; i < l; i++) {\n                            e = value[i];\n                            e && e.__ob__ && e.__ob__.dep.depend();\n                        }\n                    }\n                }\n                return value;\n            },\n            set: function reactiveSetter(newVal) {\n                var value = getter ? getter.call(obj) : val;\n                if (newVal === value) {\n                    return;\n                }\n                if (setter) {\n                    setter.call(obj, newVal);\n                } else {\n                    val = newVal;\n                }\n                childOb = observe(newVal);\n                dep.notify();\n            }\n        });\n    }\n\n\n\n    var util = Object.freeze({\n        defineReactive: defineReactive,\n        set: set,\n        del: del,\n        hasOwn: hasOwn,\n        isLiteral: isLiteral,\n        isReserved: isReserved,\n        _toString: _toString,\n        toNumber: toNumber,\n        toBoolean: toBoolean,\n        stripQuotes: stripQuotes,\n        camelize: camelize,\n        hyphenate: hyphenate,\n        classify: classify,\n        bind: bind,\n        toArray: toArray,\n        extend: extend,\n        isObject: isObject,\n        isPlainObject: isPlainObject,\n        def: def,\n        debounce: _debounce,\n        indexOf: indexOf,\n        cancellable: cancellable,\n        looseEqual: looseEqual,\n        isArray: isArray,\n        hasProto: hasProto,\n        inBrowser: inBrowser,\n        devtools: devtools,\n        isIE9: isIE9,\n        isAndroid: isAndroid,\n        isIos: isIos,\n        isWechat: isWechat,\n        get transitionProp () { return transitionProp; },\n        get transitionEndEvent () { return transitionEndEvent; },\n        get animationProp () { return animationProp; },\n        get animationEndEvent () { return animationEndEvent; },\n        nextTick: nextTick,\n        get _Set () { return _Set; },\n        query: query,\n        inDoc: inDoc,\n        getAttr: getAttr,\n        getBindAttr: getBindAttr,\n        hasBindAttr: hasBindAttr,\n        before: before,\n        after: after,\n        remove: remove,\n        prepend: prepend,\n        replace: replace,\n        on: on,\n        off: off,\n        setClass: setClass,\n        addClass: addClass,\n        removeClass: removeClass,\n        extractContent: extractContent,\n        trimNode: trimNode,\n        isTemplate: isTemplate,\n        createAnchor: createAnchor,\n        findRef: findRef,\n        mapNodeRange: mapNodeRange,\n        removeNodeRange: removeNodeRange,\n        isFragment: isFragment,\n        getOuterHTML: getOuterHTML,\n        mergeOptions: mergeOptions,\n        resolveAsset: resolveAsset,\n        checkComponentAttr: checkComponentAttr,\n        commonTagRE: commonTagRE,\n        reservedTagRE: reservedTagRE,\n        get warn () { return warn; }\n    });\n\n    var uid = 0;\n\n    function initMixin (Vue) {\n        /**\n         * The main init sequence. This is called for every\n         * instance, including ones that are created from extended\n         * constructors.\n         *\n         * @param {Object} options - this options object should be\n         *                           the result of merging class\n         *                           options and the options passed\n         *                           in to the constructor.\n         */\n\n        Vue.prototype._init = function (options) {\n            options = options || {};\n\n            this.$el = null;\n            this.$parent = options.parent;\n            this.$root = this.$parent ? this.$parent.$root : this;\n            this.$children = [];\n            this.$refs = {}; // child vm references\n            this.$els = {}; // element references\n            this._watchers = []; // all watchers as an array\n            this._directives = []; // all directives\n\n            // a uid\n            this._uid = uid++;\n\n            // a flag to avoid this being observed\n            this._isVue = true;\n\n            // events bookkeeping\n            this._events = {}; // registered callbacks\n            this._eventsCount = {}; // for $broadcast optimization\n\n            // fragment instance properties\n            this._isFragment = false;\n            this._fragment = // @type {DocumentFragment}\n                this._fragmentStart = // @type {Text|Comment}\n                    this._fragmentEnd = null; // @type {Text|Comment}\n\n            // lifecycle state\n            this._isCompiled = this._isDestroyed = this._isReady = this._isAttached = this._isBeingDestroyed = this._vForRemoving = false;\n            this._unlinkFn = null;\n\n            // context:\n            // if this is a transcluded component, context\n            // will be the common parent vm of this instance\n            // and its host.\n            this._context = options._context || this.$parent;\n\n            // scope:\n            // if this is inside an inline v-for, the scope\n            // will be the intermediate scope created for this\n            // repeat fragment. this is used for linking props\n            // and container directives.\n            this._scope = options._scope;\n\n            // fragment:\n            // if this instance is compiled inside a Fragment, it\n            // needs to reigster itself as a child of that fragment\n            // for attach/detach to work properly.\n            this._frag = options._frag;\n            if (this._frag) {\n                this._frag.children.push(this);\n            }\n\n            // push self into parent / transclusion host\n            if (this.$parent) {\n                this.$parent.$children.push(this);\n            }\n\n            // merge options.\n            options = this.$options = mergeOptions(this.constructor.options, options, this);\n\n            // set ref\n            this._updateRef();\n\n            // initialize data as empty object.\n            // it will be filled up in _initData().\n            this._data = {};\n\n            // call init hook\n            this._callHook('init');\n\n            // initialize data observation and scope inheritance.\n            this._initState();\n\n            // setup event system and option events.\n            this._initEvents();\n\n            // call created hook\n            this._callHook('created');\n\n            // if `el` option is passed, start compilation.\n            if (options.el) {\n                this.$mount(options.el);\n            }\n        };\n    }\n\n    var pathCache = new Cache(1000);\n\n    // actions\n    var APPEND = 0;\n    var PUSH = 1;\n    var INC_SUB_PATH_DEPTH = 2;\n    var PUSH_SUB_PATH = 3;\n\n    // states\n    var BEFORE_PATH = 0;\n    var IN_PATH = 1;\n    var BEFORE_IDENT = 2;\n    var IN_IDENT = 3;\n    var IN_SUB_PATH = 4;\n    var IN_SINGLE_QUOTE = 5;\n    var IN_DOUBLE_QUOTE = 6;\n    var AFTER_PATH = 7;\n    var ERROR = 8;\n\n    var pathStateMachine = [];\n\n    pathStateMachine[BEFORE_PATH] = {\n        'ws': [BEFORE_PATH],\n        'ident': [IN_IDENT, APPEND],\n        '[': [IN_SUB_PATH],\n        'eof': [AFTER_PATH]\n    };\n\n    pathStateMachine[IN_PATH] = {\n        'ws': [IN_PATH],\n        '.': [BEFORE_IDENT],\n        '[': [IN_SUB_PATH],\n        'eof': [AFTER_PATH]\n    };\n\n    pathStateMachine[BEFORE_IDENT] = {\n        'ws': [BEFORE_IDENT],\n        'ident': [IN_IDENT, APPEND]\n    };\n\n    pathStateMachine[IN_IDENT] = {\n        'ident': [IN_IDENT, APPEND],\n        '0': [IN_IDENT, APPEND],\n        'number': [IN_IDENT, APPEND],\n        'ws': [IN_PATH, PUSH],\n        '.': [BEFORE_IDENT, PUSH],\n        '[': [IN_SUB_PATH, PUSH],\n        'eof': [AFTER_PATH, PUSH]\n    };\n\n    pathStateMachine[IN_SUB_PATH] = {\n        \"'\": [IN_SINGLE_QUOTE, APPEND],\n        '\"': [IN_DOUBLE_QUOTE, APPEND],\n        '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH],\n        ']': [IN_PATH, PUSH_SUB_PATH],\n        'eof': ERROR,\n        'else': [IN_SUB_PATH, APPEND]\n    };\n\n    pathStateMachine[IN_SINGLE_QUOTE] = {\n        \"'\": [IN_SUB_PATH, APPEND],\n        'eof': ERROR,\n        'else': [IN_SINGLE_QUOTE, APPEND]\n    };\n\n    pathStateMachine[IN_DOUBLE_QUOTE] = {\n        '\"': [IN_SUB_PATH, APPEND],\n        'eof': ERROR,\n        'else': [IN_DOUBLE_QUOTE, APPEND]\n    };\n\n    /**\n     * Determine the type of a character in a keypath.\n     *\n     * @param {Char} ch\n     * @return {String} type\n     */\n\n    function getPathCharType(ch) {\n        if (ch === undefined) {\n            return 'eof';\n        }\n\n        var code = ch.charCodeAt(0);\n\n        switch (code) {\n            case 0x5B: // [\n            case 0x5D: // ]\n            case 0x2E: // .\n            case 0x22: // \"\n            case 0x27: // '\n            case 0x30:\n                // 0\n                return ch;\n\n            case 0x5F: // _\n            case 0x24:\n                // $\n                return 'ident';\n\n            case 0x20: // Space\n            case 0x09: // Tab\n            case 0x0A: // Newline\n            case 0x0D: // Return\n            case 0xA0: // No-break space\n            case 0xFEFF: // Byte Order Mark\n            case 0x2028: // Line Separator\n            case 0x2029:\n                // Paragraph Separator\n                return 'ws';\n        }\n\n        // a-z, A-Z\n        if (code >= 0x61 && code <= 0x7A || code >= 0x41 && code <= 0x5A) {\n            return 'ident';\n        }\n\n        // 1-9\n        if (code >= 0x31 && code <= 0x39) {\n            return 'number';\n        }\n\n        return 'else';\n    }\n\n    /**\n     * Format a subPath, return its plain form if it is\n     * a literal string or number. Otherwise prepend the\n     * dynamic indicator (*).\n     *\n     * @param {String} path\n     * @return {String}\n     */\n\n    function formatSubPath(path) {\n        var trimmed = path.trim();\n        // invalid leading 0\n        if (path.charAt(0) === '0' && isNaN(path)) {\n            return false;\n        }\n        return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed;\n    }\n\n    /**\n     * Parse a string path into an array of segments\n     *\n     * @param {String} path\n     * @return {Array|undefined}\n     */\n\n    function parse(path) {\n        var keys = [];\n        var index = -1;\n        var mode = BEFORE_PATH;\n        var subPathDepth = 0;\n        var c, newChar, key, type, transition, action, typeMap;\n\n        var actions = [];\n\n        actions[PUSH] = function () {\n            if (key !== undefined) {\n                keys.push(key);\n                key = undefined;\n            }\n        };\n\n        actions[APPEND] = function () {\n            if (key === undefined) {\n                key = newChar;\n            } else {\n                key += newChar;\n            }\n        };\n\n        actions[INC_SUB_PATH_DEPTH] = function () {\n            actions[APPEND]();\n            subPathDepth++;\n        };\n\n        actions[PUSH_SUB_PATH] = function () {\n            if (subPathDepth > 0) {\n                subPathDepth--;\n                mode = IN_SUB_PATH;\n                actions[APPEND]();\n            } else {\n                subPathDepth = 0;\n                key = formatSubPath(key);\n                if (key === false) {\n                    return false;\n                } else {\n                    actions[PUSH]();\n                }\n            }\n        };\n\n        function maybeUnescapeQuote() {\n            var nextChar = path[index + 1];\n            if (mode === IN_SINGLE_QUOTE && nextChar === \"'\" || mode === IN_DOUBLE_QUOTE && nextChar === '\"') {\n                index++;\n                newChar = '\\\\' + nextChar;\n                actions[APPEND]();\n                return true;\n            }\n        }\n\n        while (mode != null) {\n            index++;\n            c = path[index];\n\n            if (c === '\\\\' && maybeUnescapeQuote()) {\n                continue;\n            }\n\n            type = getPathCharType(c);\n            typeMap = pathStateMachine[mode];\n            transition = typeMap[type] || typeMap['else'] || ERROR;\n\n            if (transition === ERROR) {\n                return; // parse error\n            }\n\n            mode = transition[0];\n            action = actions[transition[1]];\n            if (action) {\n                newChar = transition[2];\n                newChar = newChar === undefined ? c : newChar;\n                if (action() === false) {\n                    return;\n                }\n            }\n\n            if (mode === AFTER_PATH) {\n                keys.raw = path;\n                return keys;\n            }\n        }\n    }\n\n    /**\n     * External parse that check for a cache hit first\n     *\n     * @param {String} path\n     * @return {Array|undefined}\n     */\n\n    function parsePath(path) {\n        var hit = pathCache.get(path);\n        if (!hit) {\n            hit = parse(path);\n            if (hit) {\n                pathCache.put(path, hit);\n            }\n        }\n        return hit;\n    }\n\n    /**\n     * Get from an object from a path string\n     *\n     * @param {Object} obj\n     * @param {String} path\n     */\n\n    function getPath(obj, path) {\n        return parseExpression(path).get(obj);\n    }\n\n    /**\n     * Warn against setting non-existent root path on a vm.\n     */\n\n    var warnNonExistent;\n    if ('development' !== 'production') {\n        warnNonExistent = function (path, vm) {\n            warn('You are setting a non-existent path \"' + path.raw + '\" ' + 'on a vm instance. Consider pre-initializing the property ' + 'with the \"data\" option for more reliable reactivity ' + 'and better performance.', vm);\n        };\n    }\n\n    /**\n     * Set on an object from a path\n     *\n     * @param {Object} obj\n     * @param {String | Array} path\n     * @param {*} val\n     */\n\n    function setPath(obj, path, val) {\n        var original = obj;\n        if (typeof path === 'string') {\n            path = parse(path);\n        }\n        if (!path || !isObject(obj)) {\n            return false;\n        }\n        var last, key;\n        for (var i = 0, l = path.length; i < l; i++) {\n            last = obj;\n            key = path[i];\n            if (key.charAt(0) === '*') {\n                key = parseExpression(key.slice(1)).get.call(original, original);\n            }\n            if (i < l - 1) {\n                obj = obj[key];\n                if (!isObject(obj)) {\n                    obj = {};\n                    if ('development' !== 'production' && last._isVue) {\n                        warnNonExistent(path, last);\n                    }\n                    set(last, key, obj);\n                }\n            } else {\n                if (isArray(obj)) {\n                    obj.$set(key, val);\n                } else if (key in obj) {\n                    obj[key] = val;\n                } else {\n                    if ('development' !== 'production' && obj._isVue) {\n                        warnNonExistent(path, obj);\n                    }\n                    set(obj, key, val);\n                }\n            }\n        }\n        return true;\n    }\n\n    var path = Object.freeze({\n        parsePath: parsePath,\n        getPath: getPath,\n        setPath: setPath\n    });\n\n    var expressionCache = new Cache(1000);\n\n    var allowedKeywords = 'Math,Date,this,true,false,null,undefined,Infinity,NaN,' + 'isNaN,isFinite,decodeURI,decodeURIComponent,encodeURI,' + 'encodeURIComponent,parseInt,parseFloat';\n    var allowedKeywordsRE = new RegExp('^(' + allowedKeywords.replace(/,/g, '\\\\b|') + '\\\\b)');\n\n    // keywords that don't make sense inside expressions\n    var improperKeywords = 'break,case,class,catch,const,continue,debugger,default,' + 'delete,do,else,export,extends,finally,for,function,if,' + 'import,in,instanceof,let,return,super,switch,throw,try,' + 'var,while,with,yield,enum,await,implements,package,' + 'protected,static,interface,private,public';\n    var improperKeywordsRE = new RegExp('^(' + improperKeywords.replace(/,/g, '\\\\b|') + '\\\\b)');\n\n    var wsRE = /\\s/g;\n    var newlineRE = /\\n/g;\n    var saveRE = /[\\{,]\\s*[\\w\\$_]+\\s*:|('(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`)|new |typeof |void /g;\n    var restoreRE = /\"(\\d+)\"/g;\n    var pathTestRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['.*?'\\]|\\[\".*?\"\\]|\\[\\d+\\]|\\[[A-Za-z_$][\\w$]*\\])*$/;\n    var identRE = /[^\\w$\\.](?:[A-Za-z_$][\\w$]*)/g;\n    var booleanLiteralRE = /^(?:true|false)$/;\n\n    /**\n     * Save / Rewrite / Restore\n     *\n     * When rewriting paths found in an expression, it is\n     * possible for the same letter sequences to be found in\n     * strings and Object literal property keys. Therefore we\n     * remove and store these parts in a temporary array, and\n     * restore them after the path rewrite.\n     */\n\n    var saved = [];\n\n    /**\n     * Save replacer\n     *\n     * The save regex can match two possible cases:\n     * 1. An opening object literal\n     * 2. A string\n     * If matched as a plain string, we need to escape its\n     * newlines, since the string needs to be preserved when\n     * generating the function body.\n     *\n     * @param {String} str\n     * @param {String} isString - str if matched as a string\n     * @return {String} - placeholder with index\n     */\n\n    function save(str, isString) {\n        var i = saved.length;\n        saved[i] = isString ? str.replace(newlineRE, '\\\\n') : str;\n        return '\"' + i + '\"';\n    }\n\n    /**\n     * Path rewrite replacer\n     *\n     * @param {String} raw\n     * @return {String}\n     */\n\n    function rewrite(raw) {\n        var c = raw.charAt(0);\n        var path = raw.slice(1);\n        if (allowedKeywordsRE.test(path)) {\n            return raw;\n        } else {\n            path = path.indexOf('\"') > -1 ? path.replace(restoreRE, restore) : path;\n            return c + 'scope.' + path;\n        }\n    }\n\n    /**\n     * Restore replacer\n     *\n     * @param {String} str\n     * @param {String} i - matched save index\n     * @return {String}\n     */\n\n    function restore(str, i) {\n        return saved[i];\n    }\n\n    /**\n     * Rewrite an expression, prefixing all path accessors with\n     * `scope.` and generate getter/setter functions.\n     *\n     * @param {String} exp\n     * @return {Function}\n     */\n\n    function compileGetter(exp) {\n        if (improperKeywordsRE.test(exp)) {\n            'development' !== 'production' && warn('Avoid using reserved keywords in expression: ' + exp);\n        }\n        // reset state\n        saved.length = 0;\n        // save strings and object literal keys\n        var body = exp.replace(saveRE, save).replace(wsRE, '');\n        // rewrite all paths\n        // pad 1 space here becaue the regex matches 1 extra char\n        body = (' ' + body).replace(identRE, rewrite).replace(restoreRE, restore);\n        return makeGetterFn(body);\n    }\n\n    /**\n     * Build a getter function. Requires eval.\n     *\n     * We isolate the try/catch so it doesn't affect the\n     * optimization of the parse function when it is not called.\n     *\n     * @param {String} body\n     * @return {Function|undefined}\n     */\n\n    function makeGetterFn(body) {\n        try {\n            /* eslint-disable no-new-func */\n            return new Function('scope', 'return ' + body + ';');\n            /* eslint-enable no-new-func */\n        } catch (e) {\n            'development' !== 'production' && warn('Invalid expression. ' + 'Generated function body: ' + body);\n        }\n    }\n\n    /**\n     * Compile a setter function for the expression.\n     *\n     * @param {String} exp\n     * @return {Function|undefined}\n     */\n\n    function compileSetter(exp) {\n        var path = parsePath(exp);\n        if (path) {\n            return function (scope, val) {\n                setPath(scope, path, val);\n            };\n        } else {\n            'development' !== 'production' && warn('Invalid setter expression: ' + exp);\n        }\n    }\n\n    /**\n     * Parse an expression into re-written getter/setters.\n     *\n     * @param {String} exp\n     * @param {Boolean} needSet\n     * @return {Function}\n     */\n\n    function parseExpression(exp, needSet) {\n        exp = exp.trim();\n        // try cache\n        var hit = expressionCache.get(exp);\n        if (hit) {\n            if (needSet && !hit.set) {\n                hit.set = compileSetter(hit.exp);\n            }\n            return hit;\n        }\n        var res = { exp: exp };\n        res.get = isSimplePath(exp) && exp.indexOf('[') < 0\n            // optimized super simple getter\n            ? makeGetterFn('scope.' + exp)\n            // dynamic getter\n            : compileGetter(exp);\n        if (needSet) {\n            res.set = compileSetter(exp);\n        }\n        expressionCache.put(exp, res);\n        return res;\n    }\n\n    /**\n     * Check if an expression is a simple path.\n     *\n     * @param {String} exp\n     * @return {Boolean}\n     */\n\n    function isSimplePath(exp) {\n        return pathTestRE.test(exp) &&\n            // don't treat true/false as paths\n            !booleanLiteralRE.test(exp) &&\n            // Math constants e.g. Math.PI, Math.E etc.\n            exp.slice(0, 5) !== 'Math.';\n    }\n\n    var expression = Object.freeze({\n        parseExpression: parseExpression,\n        isSimplePath: isSimplePath\n    });\n\n    // we have two separate queues: one for directive updates\n    // and one for user watcher registered via $watch().\n    // we want to guarantee directive updates to be called\n    // before user watchers so that when user watchers are\n    // triggered, the DOM would have already been in updated\n    // state.\n\n    var queue = [];\n    var userQueue = [];\n    var has = {};\n    var circular = {};\n    var waiting = false;\n\n    /**\n     * Reset the batcher's state.\n     */\n\n    function resetBatcherState() {\n        queue.length = 0;\n        userQueue.length = 0;\n        has = {};\n        circular = {};\n        waiting = false;\n    }\n\n    /**\n     * Flush both queues and run the watchers.\n     */\n\n    function flushBatcherQueue() {\n        var _again = true;\n\n        _function: while (_again) {\n            _again = false;\n\n            runBatcherQueue(queue);\n            runBatcherQueue(userQueue);\n            // user watchers triggered more watchers,\n            // keep flushing until it depletes\n            if (queue.length) {\n                _again = true;\n                continue _function;\n            }\n            // dev tool hook\n            /* istanbul ignore if */\n            if (devtools && config.devtools) {\n                devtools.emit('flush');\n            }\n            resetBatcherState();\n        }\n    }\n\n    /**\n     * Run the watchers in a single queue.\n     *\n     * @param {Array} queue\n     */\n\n    function runBatcherQueue(queue) {\n        // do not cache length because more watchers might be pushed\n        // as we run existing watchers\n        for (var i = 0; i < queue.length; i++) {\n            var watcher = queue[i];\n            var id = watcher.id;\n            has[id] = null;\n            watcher.run();\n            // in dev build, check and stop circular updates.\n            if ('development' !== 'production' && has[id] != null) {\n                circular[id] = (circular[id] || 0) + 1;\n                if (circular[id] > config._maxUpdateCount) {\n                    warn('You may have an infinite update loop for watcher ' + 'with expression \"' + watcher.expression + '\"', watcher.vm);\n                    break;\n                }\n            }\n        }\n        queue.length = 0;\n    }\n\n    /**\n     * Push a watcher into the watcher queue.\n     * Jobs with duplicate IDs will be skipped unless it's\n     * pushed when the queue is being flushed.\n     *\n     * @param {Watcher} watcher\n     *   properties:\n     *   - {Number} id\n     *   - {Function} run\n     */\n\n    function pushWatcher(watcher) {\n        var id = watcher.id;\n        if (has[id] == null) {\n            // push watcher into appropriate queue\n            var q = watcher.user ? userQueue : queue;\n            has[id] = q.length;\n            q.push(watcher);\n            // queue the flush\n            if (!waiting) {\n                waiting = true;\n                nextTick(flushBatcherQueue);\n            }\n        }\n    }\n\n    var uid$2 = 0;\n\n    /**\n     * A watcher parses an expression, collects dependencies,\n     * and fires callback when the expression value changes.\n     * This is used for both the $watch() api and directives.\n     *\n     * @param {Vue} vm\n     * @param {String|Function} expOrFn\n     * @param {Function} cb\n     * @param {Object} options\n     *                 - {Array} filters\n     *                 - {Boolean} twoWay\n     *                 - {Boolean} deep\n     *                 - {Boolean} user\n     *                 - {Boolean} sync\n     *                 - {Boolean} lazy\n     *                 - {Function} [preProcess]\n     *                 - {Function} [postProcess]\n     * @constructor\n     */\n    function Watcher(vm, expOrFn, cb, options) {\n        // mix in options\n        if (options) {\n            extend(this, options);\n        }\n        var isFn = typeof expOrFn === 'function';\n        this.vm = vm;\n        vm._watchers.push(this);\n        this.expression = expOrFn;\n        this.cb = cb;\n        this.id = ++uid$2; // uid for batching\n        this.active = true;\n        this.dirty = this.lazy; // for lazy watchers\n        this.deps = [];\n        this.newDeps = [];\n        this.depIds = new _Set();\n        this.newDepIds = new _Set();\n        this.prevError = null; // for async error stacks\n        // parse expression for getter/setter\n        if (isFn) {\n            this.getter = expOrFn;\n            this.setter = undefined;\n        } else {\n            var res = parseExpression(expOrFn, this.twoWay);\n            this.getter = res.get;\n            this.setter = res.set;\n        }\n        this.value = this.lazy ? undefined : this.get();\n        // state for avoiding false triggers for deep and Array\n        // watchers during vm._digest()\n        this.queued = this.shallow = false;\n    }\n\n    /**\n     * Evaluate the getter, and re-collect dependencies.\n     */\n\n    Watcher.prototype.get = function () {\n        this.beforeGet();\n        var scope = this.scope || this.vm;\n        var value;\n        try {\n            value = this.getter.call(scope, scope);\n        } catch (e) {\n            if ('development' !== 'production' && config.warnExpressionErrors) {\n                warn('Error when evaluating expression ' + '\"' + this.expression + '\": ' + e.toString(), this.vm);\n            }\n        }\n        // \"touch\" every property so they are all tracked as\n        // dependencies for deep watching\n        if (this.deep) {\n            traverse(value);\n        }\n        if (this.preProcess) {\n            value = this.preProcess(value);\n        }\n        if (this.filters) {\n            value = scope._applyFilters(value, null, this.filters, false);\n        }\n        if (this.postProcess) {\n            value = this.postProcess(value);\n        }\n        this.afterGet();\n        return value;\n    };\n\n    /**\n     * Set the corresponding value with the setter.\n     *\n     * @param {*} value\n     */\n\n    Watcher.prototype.set = function (value) {\n        var scope = this.scope || this.vm;\n        if (this.filters) {\n            value = scope._applyFilters(value, this.value, this.filters, true);\n        }\n        try {\n            this.setter.call(scope, scope, value);\n        } catch (e) {\n            if ('development' !== 'production' && config.warnExpressionErrors) {\n                warn('Error when evaluating setter ' + '\"' + this.expression + '\": ' + e.toString(), this.vm);\n            }\n        }\n        // two-way sync for v-for alias\n        var forContext = scope.$forContext;\n        if (forContext && forContext.alias === this.expression) {\n            if (forContext.filters) {\n                'development' !== 'production' && warn('It seems you are using two-way binding on ' + 'a v-for alias (' + this.expression + '), and the ' + 'v-for has filters. This will not work properly. ' + 'Either remove the filters or use an array of ' + 'objects and bind to object properties instead.', this.vm);\n                return;\n            }\n            forContext._withLock(function () {\n                if (scope.$key) {\n                    // original is an object\n                    forContext.rawValue[scope.$key] = value;\n                } else {\n                    forContext.rawValue.$set(scope.$index, value);\n                }\n            });\n        }\n    };\n\n    /**\n     * Prepare for dependency collection.\n     */\n\n    Watcher.prototype.beforeGet = function () {\n        Dep.target = this;\n    };\n\n    /**\n     * Add a dependency to this directive.\n     *\n     * @param {Dep} dep\n     */\n\n    Watcher.prototype.addDep = function (dep) {\n        var id = dep.id;\n        if (!this.newDepIds.has(id)) {\n            this.newDepIds.add(id);\n            this.newDeps.push(dep);\n            if (!this.depIds.has(id)) {\n                dep.addSub(this);\n            }\n        }\n    };\n\n    /**\n     * Clean up for dependency collection.\n     */\n\n    Watcher.prototype.afterGet = function () {\n        Dep.target = null;\n        var i = this.deps.length;\n        while (i--) {\n            var dep = this.deps[i];\n            if (!this.newDepIds.has(dep.id)) {\n                dep.removeSub(this);\n            }\n        }\n        var tmp = this.depIds;\n        this.depIds = this.newDepIds;\n        this.newDepIds = tmp;\n        this.newDepIds.clear();\n        tmp = this.deps;\n        this.deps = this.newDeps;\n        this.newDeps = tmp;\n        this.newDeps.length = 0;\n    };\n\n    /**\n     * Subscriber interface.\n     * Will be called when a dependency changes.\n     *\n     * @param {Boolean} shallow\n     */\n\n    Watcher.prototype.update = function (shallow) {\n        if (this.lazy) {\n            this.dirty = true;\n        } else if (this.sync || !config.async) {\n            this.run();\n        } else {\n            // if queued, only overwrite shallow with non-shallow,\n            // but not the other way around.\n            this.shallow = this.queued ? shallow ? this.shallow : false : !!shallow;\n            this.queued = true;\n            // record before-push error stack in debug mode\n            /* istanbul ignore if */\n            if ('development' !== 'production' && config.debug) {\n                this.prevError = new Error('[vue] async stack trace');\n            }\n            pushWatcher(this);\n        }\n    };\n\n    /**\n     * Batcher job interface.\n     * Will be called by the batcher.\n     */\n\n    Watcher.prototype.run = function () {\n        if (this.active) {\n            var value = this.get();\n            if (value !== this.value ||\n                // Deep watchers and watchers on Object/Arrays should fire even\n                // when the value is the same, because the value may\n                // have mutated; but only do so if this is a\n                // non-shallow update (caused by a vm digest).\n                (isObject(value) || this.deep) && !this.shallow) {\n                // set new value\n                var oldValue = this.value;\n                this.value = value;\n                // in debug + async mode, when a watcher callbacks\n                // throws, we also throw the saved before-push error\n                // so the full cross-tick stack trace is available.\n                var prevError = this.prevError;\n                /* istanbul ignore if */\n                if ('development' !== 'production' && config.debug && prevError) {\n                    this.prevError = null;\n                    try {\n                        this.cb.call(this.vm, value, oldValue);\n                    } catch (e) {\n                        nextTick(function () {\n                            throw prevError;\n                        }, 0);\n                        throw e;\n                    }\n                } else {\n                    this.cb.call(this.vm, value, oldValue);\n                }\n            }\n            this.queued = this.shallow = false;\n        }\n    };\n\n    /**\n     * Evaluate the value of the watcher.\n     * This only gets called for lazy watchers.\n     */\n\n    Watcher.prototype.evaluate = function () {\n        // avoid overwriting another watcher that is being\n        // collected.\n        var current = Dep.target;\n        this.value = this.get();\n        this.dirty = false;\n        Dep.target = current;\n    };\n\n    /**\n     * Depend on all deps collected by this watcher.\n     */\n\n    Watcher.prototype.depend = function () {\n        var i = this.deps.length;\n        while (i--) {\n            this.deps[i].depend();\n        }\n    };\n\n    /**\n     * Remove self from all dependencies' subcriber list.\n     */\n\n    Watcher.prototype.teardown = function () {\n        if (this.active) {\n            // remove self from vm's watcher list\n            // this is a somewhat expensive operation so we skip it\n            // if the vm is being destroyed or is performing a v-for\n            // re-render (the watcher list is then filtered by v-for).\n            if (!this.vm._isBeingDestroyed && !this.vm._vForRemoving) {\n                this.vm._watchers.$remove(this);\n            }\n            var i = this.deps.length;\n            while (i--) {\n                this.deps[i].removeSub(this);\n            }\n            this.active = false;\n            this.vm = this.cb = this.value = null;\n        }\n    };\n\n    /**\n     * Recrusively traverse an object to evoke all converted\n     * getters, so that every nested property inside the object\n     * is collected as a \"deep\" dependency.\n     *\n     * @param {*} val\n     */\n\n    var seenObjects = new _Set();\n    function traverse(val, seen) {\n        var i = undefined,\n            keys = undefined;\n        if (!seen) {\n            seen = seenObjects;\n            seen.clear();\n        }\n        var isA = isArray(val);\n        var isO = isObject(val);\n        if (isA || isO) {\n            if (val.__ob__) {\n                var depId = val.__ob__.dep.id;\n                if (seen.has(depId)) {\n                    return;\n                } else {\n                    seen.add(depId);\n                }\n            }\n            if (isA) {\n                i = val.length;\n                while (i--) traverse(val[i], seen);\n            } else if (isO) {\n                keys = Object.keys(val);\n                i = keys.length;\n                while (i--) traverse(val[keys[i]], seen);\n            }\n        }\n    }\n\n    var text$1 = {\n\n        bind: function bind() {\n            this.attr = this.el.nodeType === 3 ? 'data' : 'textContent';\n        },\n\n        update: function update(value) {\n            this.el[this.attr] = _toString(value);\n        }\n    };\n\n    var templateCache = new Cache(1000);\n    var idSelectorCache = new Cache(1000);\n\n    var map = {\n        efault: [0, '', ''],\n        legend: [1, '<fieldset>', '</fieldset>'],\n        tr: [2, '<table><tbody>', '</tbody></table>'],\n        col: [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>']\n    };\n\n    map.td = map.th = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\n\n    map.option = map.optgroup = [1, '<select multiple=\"multiple\">', '</select>'];\n\n    map.thead = map.tbody = map.colgroup = map.caption = map.tfoot = [1, '<table>', '</table>'];\n\n    map.g = map.defs = map.symbol = map.use = map.image = map.text = map.circle = map.ellipse = map.line = map.path = map.polygon = map.polyline = map.rect = [1, '<svg ' + 'xmlns=\"http://www.w3.org/2000/svg\" ' + 'xmlns:xlink=\"http://www.w3.org/1999/xlink\" ' + 'xmlns:ev=\"http://www.w3.org/2001/xml-events\"' + 'version=\"1.1\">', '</svg>'];\n\n    /**\n     * Check if a node is a supported template node with a\n     * DocumentFragment content.\n     *\n     * @param {Node} node\n     * @return {Boolean}\n     */\n\n    function isRealTemplate(node) {\n        return isTemplate(node) && isFragment(node.content);\n    }\n\n    var tagRE$1 = /<([\\w:-]+)/;\n    var entityRE = /&#?\\w+?;/;\n\n    /**\n     * Convert a string template to a DocumentFragment.\n     * Determines correct wrapping by tag types. Wrapping\n     * strategy found in jQuery & component/domify.\n     *\n     * @param {String} templateString\n     * @param {Boolean} raw\n     * @return {DocumentFragment}\n     */\n\n    function stringToFragment(templateString, raw) {\n        // try a cache hit first\n        var cacheKey = raw ? templateString : templateString.trim();\n        var hit = templateCache.get(cacheKey);\n        if (hit) {\n            return hit;\n        }\n\n        var frag = document.createDocumentFragment();\n        var tagMatch = templateString.match(tagRE$1);\n        var entityMatch = entityRE.test(templateString);\n\n        if (!tagMatch && !entityMatch) {\n            // text only, return a single text node.\n            frag.appendChild(document.createTextNode(templateString));\n        } else {\n            var tag = tagMatch && tagMatch[1];\n            var wrap = map[tag] || map.efault;\n            var depth = wrap[0];\n            var prefix = wrap[1];\n            var suffix = wrap[2];\n            var node = document.createElement('div');\n\n            node.innerHTML = prefix + templateString + suffix;\n            while (depth--) {\n                node = node.lastChild;\n            }\n\n            var child;\n            /* eslint-disable no-cond-assign */\n            while (child = node.firstChild) {\n                /* eslint-enable no-cond-assign */\n                frag.appendChild(child);\n            }\n        }\n        if (!raw) {\n            trimNode(frag);\n        }\n        templateCache.put(cacheKey, frag);\n        return frag;\n    }\n\n    /**\n     * Convert a template node to a DocumentFragment.\n     *\n     * @param {Node} node\n     * @return {DocumentFragment}\n     */\n\n    function nodeToFragment(node) {\n        // if its a template tag and the browser supports it,\n        // its content is already a document fragment. However, iOS Safari has\n        // bug when using directly cloned template content with touch\n        // events and can cause crashes when the nodes are removed from DOM, so we\n        // have to treat template elements as string templates. (#2805)\n        /* istanbul ignore if */\n        if (isRealTemplate(node)) {\n            return stringToFragment(node.innerHTML);\n        }\n        // script template\n        if (node.tagName === 'SCRIPT') {\n            return stringToFragment(node.textContent);\n        }\n        // normal node, clone it to avoid mutating the original\n        var clonedNode = cloneNode(node);\n        var frag = document.createDocumentFragment();\n        var child;\n        /* eslint-disable no-cond-assign */\n        while (child = clonedNode.firstChild) {\n            /* eslint-enable no-cond-assign */\n            frag.appendChild(child);\n        }\n        trimNode(frag);\n        return frag;\n    }\n\n    // Test for the presence of the Safari template cloning bug\n    // https://bugs.webkit.org/showug.cgi?id=137755\n    var hasBrokenTemplate = (function () {\n        /* istanbul ignore else */\n        if (inBrowser) {\n            var a = document.createElement('div');\n            a.innerHTML = '<template>1</template>';\n            return !a.cloneNode(true).firstChild.innerHTML;\n        } else {\n            return false;\n        }\n    })();\n\n    // Test for IE10/11 textarea placeholder clone bug\n    var hasTextareaCloneBug = (function () {\n        /* istanbul ignore else */\n        if (inBrowser) {\n            var t = document.createElement('textarea');\n            t.placeholder = 't';\n            return t.cloneNode(true).value === 't';\n        } else {\n            return false;\n        }\n    })();\n\n    /**\n     * 1. Deal with Safari cloning nested <template> bug by\n     *    manually cloning all template instances.\n     * 2. Deal with IE10/11 textarea placeholder bug by setting\n     *    the correct value after cloning.\n     *\n     * @param {Element|DocumentFragment} node\n     * @return {Element|DocumentFragment}\n     */\n\n    function cloneNode(node) {\n        /* istanbul ignore if */\n        if (!node.querySelectorAll) {\n            return node.cloneNode();\n        }\n        var res = node.cloneNode(true);\n        var i, original, cloned;\n        /* istanbul ignore if */\n        if (hasBrokenTemplate) {\n            var tempClone = res;\n            if (isRealTemplate(node)) {\n                node = node.content;\n                tempClone = res.content;\n            }\n            original = node.querySelectorAll('template');\n            if (original.length) {\n                cloned = tempClone.querySelectorAll('template');\n                i = cloned.length;\n                while (i--) {\n                    cloned[i].parentNode.replaceChild(cloneNode(original[i]), cloned[i]);\n                }\n            }\n        }\n        /* istanbul ignore if */\n        if (hasTextareaCloneBug) {\n            if (node.tagName === 'TEXTAREA') {\n                res.value = node.value;\n            } else {\n                original = node.querySelectorAll('textarea');\n                if (original.length) {\n                    cloned = res.querySelectorAll('textarea');\n                    i = cloned.length;\n                    while (i--) {\n                        cloned[i].value = original[i].value;\n                    }\n                }\n            }\n        }\n        return res;\n    }\n\n    /**\n     * Process the template option and normalizes it into a\n     * a DocumentFragment that can be used as a partial or a\n     * instance template.\n     *\n     * @param {*} template\n     *        Possible values include:\n     *        - DocumentFragment object\n     *        - Node object of type Template\n     *        - id selector: '#some-template-id'\n     *        - template string: '<div><span>{{msg}}</span></div>'\n     * @param {Boolean} shouldClone\n     * @param {Boolean} raw\n     *        inline HTML interpolation. Do not check for id\n     *        selector and keep whitespace in the string.\n     * @return {DocumentFragment|undefined}\n     */\n\n    function parseTemplate(template, shouldClone, raw) {\n        var node, frag;\n\n        // if the template is already a document fragment,\n        // do nothing\n        if (isFragment(template)) {\n            trimNode(template);\n            return shouldClone ? cloneNode(template) : template;\n        }\n\n        if (typeof template === 'string') {\n            // id selector\n            if (!raw && template.charAt(0) === '#') {\n                // id selector can be cached too\n                frag = idSelectorCache.get(template);\n                if (!frag) {\n                    node = document.getElementById(template.slice(1));\n                    if (node) {\n                        frag = nodeToFragment(node);\n                        // save selector to cache\n                        idSelectorCache.put(template, frag);\n                    }\n                }\n            } else {\n                // normal string template\n                frag = stringToFragment(template, raw);\n            }\n        } else if (template.nodeType) {\n            // a direct node\n            frag = nodeToFragment(template);\n        }\n\n        return frag && shouldClone ? cloneNode(frag) : frag;\n    }\n\n    var template = Object.freeze({\n        cloneNode: cloneNode,\n        parseTemplate: parseTemplate\n    });\n\n    var html = {\n\n        bind: function bind() {\n            // a comment node means this is a binding for\n            // {{{ inline unescaped html }}}\n            if (this.el.nodeType === 8) {\n                // hold nodes\n                this.nodes = [];\n                // replace the placeholder with proper anchor\n                this.anchor = createAnchor('v-html');\n                replace(this.el, this.anchor);\n            }\n        },\n\n        update: function update(value) {\n            value = _toString(value);\n            if (this.nodes) {\n                this.swap(value);\n            } else {\n                this.el.innerHTML = value;\n            }\n        },\n\n        swap: function swap(value) {\n            // remove old nodes\n            var i = this.nodes.length;\n            while (i--) {\n                remove(this.nodes[i]);\n            }\n            // convert new value to a fragment\n            // do not attempt to retrieve from id selector\n            var frag = parseTemplate(value, true, true);\n            // save a reference to these nodes so we can remove later\n            this.nodes = toArray(frag.childNodes);\n            before(frag, this.anchor);\n        }\n    };\n\n    /**\n     * Abstraction for a partially-compiled fragment.\n     * Can optionally compile content with a child scope.\n     *\n     * @param {Function} linker\n     * @param {Vue} vm\n     * @param {DocumentFragment} frag\n     * @param {Vue} [host]\n     * @param {Object} [scope]\n     * @param {Fragment} [parentFrag]\n     */\n    function Fragment(linker, vm, frag, host, scope, parentFrag) {\n        this.children = [];\n        this.childFrags = [];\n        this.vm = vm;\n        this.scope = scope;\n        this.inserted = false;\n        this.parentFrag = parentFrag;\n        if (parentFrag) {\n            parentFrag.childFrags.push(this);\n        }\n        this.unlink = linker(vm, frag, host, scope, this);\n        var single = this.single = frag.childNodes.length === 1 &&\n            // do not go single mode if the only node is an anchor\n            !frag.childNodes[0].__v_anchor;\n        if (single) {\n            this.node = frag.childNodes[0];\n            this.before = singleBefore;\n            this.remove = singleRemove;\n        } else {\n            this.node = createAnchor('fragment-start');\n            this.end = createAnchor('fragment-end');\n            this.frag = frag;\n            prepend(this.node, frag);\n            frag.appendChild(this.end);\n            this.before = multiBefore;\n            this.remove = multiRemove;\n        }\n        this.node.__v_frag = this;\n    }\n\n    /**\n     * Call attach/detach for all components contained within\n     * this fragment. Also do so recursively for all child\n     * fragments.\n     *\n     * @param {Function} hook\n     */\n\n    Fragment.prototype.callHook = function (hook) {\n        var i, l;\n        for (i = 0, l = this.childFrags.length; i < l; i++) {\n            this.childFrags[i].callHook(hook);\n        }\n        for (i = 0, l = this.children.length; i < l; i++) {\n            hook(this.children[i]);\n        }\n    };\n\n    /**\n     * Insert fragment before target, single node version\n     *\n     * @param {Node} target\n     * @param {Boolean} withTransition\n     */\n\n    function singleBefore(target, withTransition) {\n        this.inserted = true;\n        var method = withTransition !== false ? beforeWithTransition : before;\n        method(this.node, target, this.vm);\n        if (inDoc(this.node)) {\n            this.callHook(attach);\n        }\n    }\n\n    /**\n     * Remove fragment, single node version\n     */\n\n    function singleRemove() {\n        this.inserted = false;\n        var shouldCallRemove = inDoc(this.node);\n        var self = this;\n        this.beforeRemove();\n        removeWithTransition(this.node, this.vm, function () {\n            if (shouldCallRemove) {\n                self.callHook(detach);\n            }\n            self.destroy();\n        });\n    }\n\n    /**\n     * Insert fragment before target, multi-nodes version\n     *\n     * @param {Node} target\n     * @param {Boolean} withTransition\n     */\n\n    function multiBefore(target, withTransition) {\n        this.inserted = true;\n        var vm = this.vm;\n        var method = withTransition !== false ? beforeWithTransition : before;\n        mapNodeRange(this.node, this.end, function (node) {\n            method(node, target, vm);\n        });\n        if (inDoc(this.node)) {\n            this.callHook(attach);\n        }\n    }\n\n    /**\n     * Remove fragment, multi-nodes version\n     */\n\n    function multiRemove() {\n        this.inserted = false;\n        var self = this;\n        var shouldCallRemove = inDoc(this.node);\n        this.beforeRemove();\n        removeNodeRange(this.node, this.end, this.vm, this.frag, function () {\n            if (shouldCallRemove) {\n                self.callHook(detach);\n            }\n            self.destroy();\n        });\n    }\n\n    /**\n     * Prepare the fragment for removal.\n     */\n\n    Fragment.prototype.beforeRemove = function () {\n        var i, l;\n        for (i = 0, l = this.childFrags.length; i < l; i++) {\n            // call the same method recursively on child\n            // fragments, depth-first\n            this.childFrags[i].beforeRemove(false);\n        }\n        for (i = 0, l = this.children.length; i < l; i++) {\n            // Call destroy for all contained instances,\n            // with remove:false and defer:true.\n            // Defer is necessary because we need to\n            // keep the children to call detach hooks\n            // on them.\n            this.children[i].$destroy(false, true);\n        }\n        var dirs = this.unlink.dirs;\n        for (i = 0, l = dirs.length; i < l; i++) {\n            // disable the watchers on all the directives\n            // so that the rendered content stays the same\n            // during removal.\n            dirs[i]._watcher && dirs[i]._watcher.teardown();\n        }\n    };\n\n    /**\n     * Destroy the fragment.\n     */\n\n    Fragment.prototype.destroy = function () {\n        if (this.parentFrag) {\n            this.parentFrag.childFrags.$remove(this);\n        }\n        this.node.__v_frag = null;\n        this.unlink();\n    };\n\n    /**\n     * Call attach hook for a Vue instance.\n     *\n     * @param {Vue} child\n     */\n\n    function attach(child) {\n        if (!child._isAttached && inDoc(child.$el)) {\n            child._callHook('attached');\n        }\n    }\n\n    /**\n     * Call detach hook for a Vue instance.\n     *\n     * @param {Vue} child\n     */\n\n    function detach(child) {\n        if (child._isAttached && !inDoc(child.$el)) {\n            child._callHook('detached');\n        }\n    }\n\n    var linkerCache = new Cache(5000);\n\n    /**\n     * A factory that can be used to create instances of a\n     * fragment. Caches the compiled linker if possible.\n     *\n     * @param {Vue} vm\n     * @param {Element|String} el\n     */\n    function FragmentFactory(vm, el) {\n        this.vm = vm;\n        var template;\n        var isString = typeof el === 'string';\n        if (isString || isTemplate(el) && !el.hasAttribute('v-if')) {\n            template = parseTemplate(el, true);\n        } else {\n            template = document.createDocumentFragment();\n            template.appendChild(el);\n        }\n        this.template = template;\n        // linker can be cached, but only for components\n        var linker;\n        var cid = vm.constructor.cid;\n        if (cid > 0) {\n            var cacheId = cid + (isString ? el : getOuterHTML(el));\n            linker = linkerCache.get(cacheId);\n            if (!linker) {\n                linker = compile(template, vm.$options, true);\n                linkerCache.put(cacheId, linker);\n            }\n        } else {\n            linker = compile(template, vm.$options, true);\n        }\n        this.linker = linker;\n    }\n\n    /**\n     * Create a fragment instance with given host and scope.\n     *\n     * @param {Vue} host\n     * @param {Object} scope\n     * @param {Fragment} parentFrag\n     */\n\n    FragmentFactory.prototype.create = function (host, scope, parentFrag) {\n        var frag = cloneNode(this.template);\n        return new Fragment(this.linker, this.vm, frag, host, scope, parentFrag);\n    };\n\n    var ON = 700;\n    var MODEL = 800;\n    var BIND = 850;\n    var TRANSITION = 1100;\n    var EL = 1500;\n    var COMPONENT = 1500;\n    var PARTIAL = 1750;\n    var IF = 2100;\n    var FOR = 2200;\n    var SLOT = 2300;\n\n    var uid$3 = 0;\n\n    var vFor = {\n\n        priority: FOR,\n        terminal: true,\n\n        params: ['track-by', 'stagger', 'enter-stagger', 'leave-stagger'],\n\n        bind: function bind() {\n            // support \"item in/of items\" syntax\n            var inMatch = this.expression.match(/(.*) (?:in|of) (.*)/);\n            if (inMatch) {\n                var itMatch = inMatch[1].match(/\\((.*),(.*)\\)/);\n                if (itMatch) {\n                    this.iterator = itMatch[1].trim();\n                    this.alias = itMatch[2].trim();\n                } else {\n                    this.alias = inMatch[1].trim();\n                }\n                this.expression = inMatch[2];\n            }\n\n            if (!this.alias) {\n                'development' !== 'production' && warn('Invalid v-for expression \"' + this.descriptor.raw + '\": ' + 'alias is required.', this.vm);\n                return;\n            }\n\n            // uid as a cache identifier\n            this.id = '__v-for__' + ++uid$3;\n\n            // check if this is an option list,\n            // so that we know if we need to update the <select>'s\n            // v-model when the option list has changed.\n            // because v-model has a lower priority than v-for,\n            // the v-model is not bound here yet, so we have to\n            // retrive it in the actual updateModel() function.\n            var tag = this.el.tagName;\n            this.isOption = (tag === 'OPTION' || tag === 'OPTGROUP') && this.el.parentNode.tagName === 'SELECT';\n\n            // setup anchor nodes\n            this.start = createAnchor('v-for-start');\n            this.end = createAnchor('v-for-end');\n            replace(this.el, this.end);\n            before(this.start, this.end);\n\n            // cache\n            this.cache = Object.create(null);\n\n            // fragment factory\n            this.factory = new FragmentFactory(this.vm, this.el);\n        },\n\n        update: function update(data) {\n            this.diff(data);\n            this.updateRef();\n            this.updateModel();\n        },\n\n        /**\n         * Diff, based on new data and old data, determine the\n         * minimum amount of DOM manipulations needed to make the\n         * DOM reflect the new data Array.\n         *\n         * The algorithm diffs the new data Array by storing a\n         * hidden reference to an owner vm instance on previously\n         * seen data. This allows us to achieve O(n) which is\n         * better than a levenshtein distance based algorithm,\n         * which is O(m * n).\n         *\n         * @param {Array} data\n         */\n\n        diff: function diff(data) {\n            // check if the Array was converted from an Object\n            var item = data[0];\n            var convertedFromObject = this.fromObject = isObject(item) && hasOwn(item, '$key') && hasOwn(item, '$value');\n\n            var trackByKey = this.params.trackBy;\n            var oldFrags = this.frags;\n            var frags = this.frags = new Array(data.length);\n            var alias = this.alias;\n            var iterator = this.iterator;\n            var start = this.start;\n            var end = this.end;\n            var inDocument = inDoc(start);\n            var init = !oldFrags;\n            var i, l, frag, key, value, primitive;\n\n            // First pass, go through the new Array and fill up\n            // the new frags array. If a piece of data has a cached\n            // instance for it, we reuse it. Otherwise build a new\n            // instance.\n            for (i = 0, l = data.length; i < l; i++) {\n                item = data[i];\n                key = convertedFromObject ? item.$key : null;\n                value = convertedFromObject ? item.$value : item;\n                primitive = !isObject(value);\n                frag = !init && this.getCachedFrag(value, i, key);\n                if (frag) {\n                    // reusable fragment\n                    frag.reused = true;\n                    // update $index\n                    frag.scope.$index = i;\n                    // update $key\n                    if (key) {\n                        frag.scope.$key = key;\n                    }\n                    // update iterator\n                    if (iterator) {\n                        frag.scope[iterator] = key !== null ? key : i;\n                    }\n                    // update data for track-by, object repeat &\n                    // primitive values.\n                    if (trackByKey || convertedFromObject || primitive) {\n                        withoutConversion(function () {\n                            frag.scope[alias] = value;\n                        });\n                    }\n                } else {\n                    // new isntance\n                    frag = this.create(value, alias, i, key);\n                    frag.fresh = !init;\n                }\n                frags[i] = frag;\n                if (init) {\n                    frag.before(end);\n                }\n            }\n\n            // we're done for the initial render.\n            if (init) {\n                return;\n            }\n\n            // Second pass, go through the old fragments and\n            // destroy those who are not reused (and remove them\n            // from cache)\n            var removalIndex = 0;\n            var totalRemoved = oldFrags.length - frags.length;\n            // when removing a large number of fragments, watcher removal\n            // turns out to be a perf bottleneck, so we batch the watcher\n            // removals into a single filter call!\n            this.vm._vForRemoving = true;\n            for (i = 0, l = oldFrags.length; i < l; i++) {\n                frag = oldFrags[i];\n                if (!frag.reused) {\n                    this.deleteCachedFrag(frag);\n                    this.remove(frag, removalIndex++, totalRemoved, inDocument);\n                }\n            }\n            this.vm._vForRemoving = false;\n            if (removalIndex) {\n                this.vm._watchers = this.vm._watchers.filter(function (w) {\n                    return w.active;\n                });\n            }\n\n            // Final pass, move/insert new fragments into the\n            // right place.\n            var targetPrev, prevEl, currentPrev;\n            var insertionIndex = 0;\n            for (i = 0, l = frags.length; i < l; i++) {\n                frag = frags[i];\n                // this is the frag that we should be after\n                targetPrev = frags[i - 1];\n                prevEl = targetPrev ? targetPrev.staggerCb ? targetPrev.staggerAnchor : targetPrev.end || targetPrev.node : start;\n                if (frag.reused && !frag.staggerCb) {\n                    currentPrev = findPrevFrag(frag, start, this.id);\n                    if (currentPrev !== targetPrev && (!currentPrev ||\n                        // optimization for moving a single item.\n                        // thanks to suggestions by @livoras in #1807\n                        findPrevFrag(currentPrev, start, this.id) !== targetPrev)) {\n                        this.move(frag, prevEl);\n                    }\n                } else {\n                    // new instance, or still in stagger.\n                    // insert with updated stagger index.\n                    this.insert(frag, insertionIndex++, prevEl, inDocument);\n                }\n                frag.reused = frag.fresh = false;\n            }\n        },\n\n        /**\n         * Create a new fragment instance.\n         *\n         * @param {*} value\n         * @param {String} alias\n         * @param {Number} index\n         * @param {String} [key]\n         * @return {Fragment}\n         */\n\n        create: function create(value, alias, index, key) {\n            var host = this._host;\n            // create iteration scope\n            var parentScope = this._scope || this.vm;\n            var scope = Object.create(parentScope);\n            // ref holder for the scope\n            scope.$refs = Object.create(parentScope.$refs);\n            scope.$els = Object.create(parentScope.$els);\n            // make sure point $parent to parent scope\n            scope.$parent = parentScope;\n            // for two-way binding on alias\n            scope.$forContext = this;\n            // define scope properties\n            // important: define the scope alias without forced conversion\n            // so that frozen data structures remain non-reactive.\n            withoutConversion(function () {\n                defineReactive(scope, alias, value);\n            });\n            defineReactive(scope, '$index', index);\n            if (key) {\n                defineReactive(scope, '$key', key);\n            } else if (scope.$key) {\n                // avoid accidental fallback\n                def(scope, '$key', null);\n            }\n            if (this.iterator) {\n                defineReactive(scope, this.iterator, key !== null ? key : index);\n            }\n            var frag = this.factory.create(host, scope, this._frag);\n            frag.forId = this.id;\n            this.cacheFrag(value, frag, index, key);\n            return frag;\n        },\n\n        /**\n         * Update the v-ref on owner vm.\n         */\n\n        updateRef: function updateRef() {\n            var ref = this.descriptor.ref;\n            if (!ref) return;\n            var hash = (this._scope || this.vm).$refs;\n            var refs;\n            if (!this.fromObject) {\n                refs = this.frags.map(findVmFromFrag);\n            } else {\n                refs = {};\n                this.frags.forEach(function (frag) {\n                    refs[frag.scope.$key] = findVmFromFrag(frag);\n                });\n            }\n            hash[ref] = refs;\n        },\n\n        /**\n         * For option lists, update the containing v-model on\n         * parent <select>.\n         */\n\n        updateModel: function updateModel() {\n            if (this.isOption) {\n                var parent = this.start.parentNode;\n                var model = parent && parent.__v_model;\n                if (model) {\n                    model.forceUpdate();\n                }\n            }\n        },\n\n        /**\n         * Insert a fragment. Handles staggering.\n         *\n         * @param {Fragment} frag\n         * @param {Number} index\n         * @param {Node} prevEl\n         * @param {Boolean} inDocument\n         */\n\n        insert: function insert(frag, index, prevEl, inDocument) {\n            if (frag.staggerCb) {\n                frag.staggerCb.cancel();\n                frag.staggerCb = null;\n            }\n            var staggerAmount = this.getStagger(frag, index, null, 'enter');\n            if (inDocument && staggerAmount) {\n                // create an anchor and insert it synchronously,\n                // so that we can resolve the correct order without\n                // worrying about some elements not inserted yet\n                var anchor = frag.staggerAnchor;\n                if (!anchor) {\n                    anchor = frag.staggerAnchor = createAnchor('stagger-anchor');\n                    anchor.__v_frag = frag;\n                }\n                after(anchor, prevEl);\n                var op = frag.staggerCb = cancellable(function () {\n                    frag.staggerCb = null;\n                    frag.before(anchor);\n                    remove(anchor);\n                });\n                setTimeout(op, staggerAmount);\n            } else {\n                var target = prevEl.nextSibling;\n                /* istanbul ignore if */\n                if (!target) {\n                    // reset end anchor position in case the position was messed up\n                    // by an external drag-n-drop library.\n                    after(this.end, prevEl);\n                    target = this.end;\n                }\n                frag.before(target);\n            }\n        },\n\n        /**\n         * Remove a fragment. Handles staggering.\n         *\n         * @param {Fragment} frag\n         * @param {Number} index\n         * @param {Number} total\n         * @param {Boolean} inDocument\n         */\n\n        remove: function remove(frag, index, total, inDocument) {\n            if (frag.staggerCb) {\n                frag.staggerCb.cancel();\n                frag.staggerCb = null;\n                // it's not possible for the same frag to be removed\n                // twice, so if we have a pending stagger callback,\n                // it means this frag is queued for enter but removed\n                // before its transition started. Since it is already\n                // destroyed, we can just leave it in detached state.\n                return;\n            }\n            var staggerAmount = this.getStagger(frag, index, total, 'leave');\n            if (inDocument && staggerAmount) {\n                var op = frag.staggerCb = cancellable(function () {\n                    frag.staggerCb = null;\n                    frag.remove();\n                });\n                setTimeout(op, staggerAmount);\n            } else {\n                frag.remove();\n            }\n        },\n\n        /**\n         * Move a fragment to a new position.\n         * Force no transition.\n         *\n         * @param {Fragment} frag\n         * @param {Node} prevEl\n         */\n\n        move: function move(frag, prevEl) {\n            // fix a common issue with Sortable:\n            // if prevEl doesn't have nextSibling, this means it's\n            // been dragged after the end anchor. Just re-position\n            // the end anchor to the end of the container.\n            /* istanbul ignore if */\n            if (!prevEl.nextSibling) {\n                this.end.parentNode.appendChild(this.end);\n            }\n            frag.before(prevEl.nextSibling, false);\n        },\n\n        /**\n         * Cache a fragment using track-by or the object key.\n         *\n         * @param {*} value\n         * @param {Fragment} frag\n         * @param {Number} index\n         * @param {String} [key]\n         */\n\n        cacheFrag: function cacheFrag(value, frag, index, key) {\n            var trackByKey = this.params.trackBy;\n            var cache = this.cache;\n            var primitive = !isObject(value);\n            var id;\n            if (key || trackByKey || primitive) {\n                id = getTrackByKey(index, key, value, trackByKey);\n                if (!cache[id]) {\n                    cache[id] = frag;\n                } else if (trackByKey !== '$index') {\n                    'development' !== 'production' && this.warnDuplicate(value);\n                }\n            } else {\n                id = this.id;\n                if (hasOwn(value, id)) {\n                    if (value[id] === null) {\n                        value[id] = frag;\n                    } else {\n                        'development' !== 'production' && this.warnDuplicate(value);\n                    }\n                } else if (Object.isExtensible(value)) {\n                    def(value, id, frag);\n                } else if ('development' !== 'production') {\n                    warn('Frozen v-for objects cannot be automatically tracked, make sure to ' + 'provide a track-by key.');\n                }\n            }\n            frag.raw = value;\n        },\n\n        /**\n         * Get a cached fragment from the value/index/key\n         *\n         * @param {*} value\n         * @param {Number} index\n         * @param {String} key\n         * @return {Fragment}\n         */\n\n        getCachedFrag: function getCachedFrag(value, index, key) {\n            var trackByKey = this.params.trackBy;\n            var primitive = !isObject(value);\n            var frag;\n            if (key || trackByKey || primitive) {\n                var id = getTrackByKey(index, key, value, trackByKey);\n                frag = this.cache[id];\n            } else {\n                frag = value[this.id];\n            }\n            if (frag && (frag.reused || frag.fresh)) {\n                'development' !== 'production' && this.warnDuplicate(value);\n            }\n            return frag;\n        },\n\n        /**\n         * Delete a fragment from cache.\n         *\n         * @param {Fragment} frag\n         */\n\n        deleteCachedFrag: function deleteCachedFrag(frag) {\n            var value = frag.raw;\n            var trackByKey = this.params.trackBy;\n            var scope = frag.scope;\n            var index = scope.$index;\n            // fix #948: avoid accidentally fall through to\n            // a parent repeater which happens to have $key.\n            var key = hasOwn(scope, '$key') && scope.$key;\n            var primitive = !isObject(value);\n            if (trackByKey || key || primitive) {\n                var id = getTrackByKey(index, key, value, trackByKey);\n                this.cache[id] = null;\n            } else {\n                value[this.id] = null;\n                frag.raw = null;\n            }\n        },\n\n        /**\n         * Get the stagger amount for an insertion/removal.\n         *\n         * @param {Fragment} frag\n         * @param {Number} index\n         * @param {Number} total\n         * @param {String} type\n         */\n\n        getStagger: function getStagger(frag, index, total, type) {\n            type = type + 'Stagger';\n            var trans = frag.node.__v_trans;\n            var hooks = trans && trans.hooks;\n            var hook = hooks && (hooks[type] || hooks.stagger);\n            return hook ? hook.call(frag, index, total) : index * parseInt(this.params[type] || this.params.stagger, 10);\n        },\n\n        /**\n         * Pre-process the value before piping it through the\n         * filters. This is passed to and called by the watcher.\n         */\n\n        _preProcess: function _preProcess(value) {\n            // regardless of type, store the un-filtered raw value.\n            this.rawValue = value;\n            return value;\n        },\n\n        /**\n         * Post-process the value after it has been piped through\n         * the filters. This is passed to and called by the watcher.\n         *\n         * It is necessary for this to be called during the\n         * wathcer's dependency collection phase because we want\n         * the v-for to update when the source Object is mutated.\n         */\n\n        _postProcess: function _postProcess(value) {\n            if (isArray(value)) {\n                return value;\n            } else if (isPlainObject(value)) {\n                // convert plain object to array.\n                var keys = Object.keys(value);\n                var i = keys.length;\n                var res = new Array(i);\n                var key;\n                while (i--) {\n                    key = keys[i];\n                    res[i] = {\n                        $key: key,\n                        $value: value[key]\n                    };\n                }\n                return res;\n            } else {\n                if (typeof value === 'number' && !isNaN(value)) {\n                    value = range(value);\n                }\n                return value || [];\n            }\n        },\n\n        unbind: function unbind() {\n            if (this.descriptor.ref) {\n                (this._scope || this.vm).$refs[this.descriptor.ref] = null;\n            }\n            if (this.frags) {\n                var i = this.frags.length;\n                var frag;\n                while (i--) {\n                    frag = this.frags[i];\n                    this.deleteCachedFrag(frag);\n                    frag.destroy();\n                }\n            }\n        }\n    };\n\n    /**\n     * Helper to find the previous element that is a fragment\n     * anchor. This is necessary because a destroyed frag's\n     * element could still be lingering in the DOM before its\n     * leaving transition finishes, but its inserted flag\n     * should have been set to false so we can skip them.\n     *\n     * If this is a block repeat, we want to make sure we only\n     * return frag that is bound to this v-for. (see #929)\n     *\n     * @param {Fragment} frag\n     * @param {Comment|Text} anchor\n     * @param {String} id\n     * @return {Fragment}\n     */\n\n    function findPrevFrag(frag, anchor, id) {\n        var el = frag.node.previousSibling;\n        /* istanbul ignore if */\n        if (!el) return;\n        frag = el.__v_frag;\n        while ((!frag || frag.forId !== id || !frag.inserted) && el !== anchor) {\n            el = el.previousSibling;\n            /* istanbul ignore if */\n            if (!el) return;\n            frag = el.__v_frag;\n        }\n        return frag;\n    }\n\n    /**\n     * Find a vm from a fragment.\n     *\n     * @param {Fragment} frag\n     * @return {Vue|undefined}\n     */\n\n    function findVmFromFrag(frag) {\n        var node = frag.node;\n        // handle multi-node frag\n        if (frag.end) {\n            while (!node.__vue__ && node !== frag.end && node.nextSibling) {\n                node = node.nextSibling;\n            }\n        }\n        return node.__vue__;\n    }\n\n    /**\n     * Create a range array from given number.\n     *\n     * @param {Number} n\n     * @return {Array}\n     */\n\n    function range(n) {\n        var i = -1;\n        var ret = new Array(Math.floor(n));\n        while (++i < n) {\n            ret[i] = i;\n        }\n        return ret;\n    }\n\n    /**\n     * Get the track by key for an item.\n     *\n     * @param {Number} index\n     * @param {String} key\n     * @param {*} value\n     * @param {String} [trackByKey]\n     */\n\n    function getTrackByKey(index, key, value, trackByKey) {\n        return trackByKey ? trackByKey === '$index' ? index : trackByKey.charAt(0).match(/\\w/) ? getPath(value, trackByKey) : value[trackByKey] : key || value;\n    }\n\n    if ('development' !== 'production') {\n        vFor.warnDuplicate = function (value) {\n            warn('Duplicate value found in v-for=\"' + this.descriptor.raw + '\": ' + JSON.stringify(value) + '. Use track-by=\"$index\" if ' + 'you are expecting duplicate values.', this.vm);\n        };\n    }\n\n    var vIf = {\n\n        priority: IF,\n        terminal: true,\n\n        bind: function bind() {\n            var el = this.el;\n            if (!el.__vue__) {\n                // check else block\n                var next = el.nextElementSibling;\n                if (next && getAttr(next, 'v-else') !== null) {\n                    remove(next);\n                    this.elseEl = next;\n                }\n                // check main block\n                this.anchor = createAnchor('v-if');\n                replace(el, this.anchor);\n            } else {\n                'development' !== 'production' && warn('v-if=\"' + this.expression + '\" cannot be ' + 'used on an instance root element.', this.vm);\n                this.invalid = true;\n            }\n        },\n\n        update: function update(value) {\n            if (this.invalid) return;\n            if (value) {\n                if (!this.frag) {\n                    this.insert();\n                }\n            } else {\n                this.remove();\n            }\n        },\n\n        insert: function insert() {\n            if (this.elseFrag) {\n                this.elseFrag.remove();\n                this.elseFrag = null;\n            }\n            // lazy init factory\n            if (!this.factory) {\n                this.factory = new FragmentFactory(this.vm, this.el);\n            }\n            this.frag = this.factory.create(this._host, this._scope, this._frag);\n            this.frag.before(this.anchor);\n        },\n\n        remove: function remove() {\n            if (this.frag) {\n                this.frag.remove();\n                this.frag = null;\n            }\n            if (this.elseEl && !this.elseFrag) {\n                if (!this.elseFactory) {\n                    this.elseFactory = new FragmentFactory(this.elseEl._context || this.vm, this.elseEl);\n                }\n                this.elseFrag = this.elseFactory.create(this._host, this._scope, this._frag);\n                this.elseFrag.before(this.anchor);\n            }\n        },\n\n        unbind: function unbind() {\n            if (this.frag) {\n                this.frag.destroy();\n            }\n            if (this.elseFrag) {\n                this.elseFrag.destroy();\n            }\n        }\n    };\n\n    var show = {\n\n        bind: function bind() {\n            // check else block\n            var next = this.el.nextElementSibling;\n            if (next && getAttr(next, 'v-else') !== null) {\n                this.elseEl = next;\n            }\n        },\n\n        update: function update(value) {\n            this.apply(this.el, value);\n            if (this.elseEl) {\n                this.apply(this.elseEl, !value);\n            }\n        },\n\n        apply: function apply(el, value) {\n            if (inDoc(el)) {\n                applyTransition(el, value ? 1 : -1, toggle, this.vm);\n            } else {\n                toggle();\n            }\n            function toggle() {\n                el.style.display = value ? '' : 'none';\n            }\n        }\n    };\n\n    var text$2 = {\n\n        bind: function bind() {\n            var self = this;\n            var el = this.el;\n            var isRange = el.type === 'range';\n            var lazy = this.params.lazy;\n            var number = this.params.number;\n            var debounce = this.params.debounce;\n\n            // handle composition events.\n            //   http://blog.evanyou.me/2014/01/03/composition-event/\n            // skip this for Android because it handles composition\n            // events quite differently. Android doesn't trigger\n            // composition events for language input methods e.g.\n            // Chinese, but instead triggers them for spelling\n            // suggestions... (see Discussion/#162)\n            var composing = false;\n            if (!isAndroid && !isRange) {\n                this.on('compositionstart', function () {\n                    composing = true;\n                });\n                this.on('compositionend', function () {\n                    composing = false;\n                    // in IE11 the \"compositionend\" event fires AFTER\n                    // the \"input\" event, so the input handler is blocked\n                    // at the end... have to call it here.\n                    //\n                    // #1327: in lazy mode this is unecessary.\n                    if (!lazy) {\n                        self.listener();\n                    }\n                });\n            }\n\n            // prevent messing with the input when user is typing,\n            // and force update on blur.\n            this.focused = false;\n            if (!isRange && !lazy) {\n                this.on('focus', function () {\n                    self.focused = true;\n                });\n                this.on('blur', function () {\n                    self.focused = false;\n                    // do not sync value after fragment removal (#2017)\n                    if (!self._frag || self._frag.inserted) {\n                        self.rawListener();\n                    }\n                });\n            }\n\n            // Now attach the main listener\n            this.listener = this.rawListener = function () {\n                if (composing || !self._bound) {\n                    return;\n                }\n                var val = number || isRange ? toNumber(el.value) : el.value;\n                self.set(val);\n                // force update on next tick to avoid lock & same value\n                // also only update when user is not typing\n                nextTick(function () {\n                    if (self._bound && !self.focused) {\n                        self.update(self._watcher.value);\n                    }\n                });\n            };\n\n            // apply debounce\n            if (debounce) {\n                this.listener = _debounce(this.listener, debounce);\n            }\n\n            // Support jQuery events, since jQuery.trigger() doesn't\n            // trigger native events in some cases and some plugins\n            // rely on $.trigger()\n            //\n            // We want to make sure if a listener is attached using\n            // jQuery, it is also removed with jQuery, that's why\n            // we do the check for each directive instance and\n            // store that check result on itself. This also allows\n            // easier test coverage control by unsetting the global\n            // jQuery variable in tests.\n            this.hasjQuery = typeof jQuery === 'function';\n            if (this.hasjQuery) {\n                var method = jQuery.fn.on ? 'on' : 'bind';\n                jQuery(el)[method]('change', this.rawListener);\n                if (!lazy) {\n                    jQuery(el)[method]('input', this.listener);\n                }\n            } else {\n                this.on('change', this.rawListener);\n                if (!lazy) {\n                    this.on('input', this.listener);\n                }\n            }\n\n            // IE9 doesn't fire input event on backspace/del/cut\n            if (!lazy && isIE9) {\n                this.on('cut', function () {\n                    nextTick(self.listener);\n                });\n                this.on('keyup', function (e) {\n                    if (e.keyCode === 46 || e.keyCode === 8) {\n                        self.listener();\n                    }\n                });\n            }\n\n            // set initial value if present\n            if (el.hasAttribute('value') || el.tagName === 'TEXTAREA' && el.value.trim()) {\n                this.afterBind = this.listener;\n            }\n        },\n\n        update: function update(value) {\n            this.el.value = _toString(value);\n        },\n\n        unbind: function unbind() {\n            var el = this.el;\n            if (this.hasjQuery) {\n                var method = jQuery.fn.off ? 'off' : 'unbind';\n                jQuery(el)[method]('change', this.listener);\n                jQuery(el)[method]('input', this.listener);\n            }\n        }\n    };\n\n    var radio = {\n\n        bind: function bind() {\n            var self = this;\n            var el = this.el;\n\n            this.getValue = function () {\n                // value overwrite via v-bind:value\n                if (el.hasOwnProperty('_value')) {\n                    return el._value;\n                }\n                var val = el.value;\n                if (self.params.number) {\n                    val = toNumber(val);\n                }\n                return val;\n            };\n\n            this.listener = function () {\n                self.set(self.getValue());\n            };\n            this.on('change', this.listener);\n\n            if (el.hasAttribute('checked')) {\n                this.afterBind = this.listener;\n            }\n        },\n\n        update: function update(value) {\n            this.el.checked = looseEqual(value, this.getValue());\n        }\n    };\n\n    var select = {\n\n        bind: function bind() {\n            var self = this;\n            var el = this.el;\n\n            // method to force update DOM using latest value.\n            this.forceUpdate = function () {\n                if (self._watcher) {\n                    self.update(self._watcher.get());\n                }\n            };\n\n            // check if this is a multiple select\n            var multiple = this.multiple = el.hasAttribute('multiple');\n\n            // attach listener\n            this.listener = function () {\n                var value = getValue(el, multiple);\n                value = self.params.number ? isArray(value) ? value.map(toNumber) : toNumber(value) : value;\n                self.set(value);\n            };\n            this.on('change', this.listener);\n\n            // if has initial value, set afterBind\n            var initValue = getValue(el, multiple, true);\n            if (multiple && initValue.length || !multiple && initValue !== null) {\n                this.afterBind = this.listener;\n            }\n\n            // All major browsers except Firefox resets\n            // selectedIndex with value -1 to 0 when the element\n            // is appended to a new parent, therefore we have to\n            // force a DOM update whenever that happens...\n            this.vm.$on('hook:attached', this.forceUpdate);\n        },\n\n        update: function update(value) {\n            var el = this.el;\n            el.selectedIndex = -1;\n            var multi = this.multiple && isArray(value);\n            var options = el.options;\n            var i = options.length;\n            var op, val;\n            while (i--) {\n                op = options[i];\n                val = op.hasOwnProperty('_value') ? op._value : op.value;\n                /* eslint-disable eqeqeq */\n                op.selected = multi ? indexOf$1(value, val) > -1 : looseEqual(value, val);\n                /* eslint-enable eqeqeq */\n            }\n        },\n\n        unbind: function unbind() {\n            /* istanbul ignore next */\n            this.vm.$off('hook:attached', this.forceUpdate);\n        }\n    };\n\n    /**\n     * Get select value\n     *\n     * @param {SelectElement} el\n     * @param {Boolean} multi\n     * @param {Boolean} init\n     * @return {Array|*}\n     */\n\n    function getValue(el, multi, init) {\n        var res = multi ? [] : null;\n        var op, val, selected;\n        for (var i = 0, l = el.options.length; i < l; i++) {\n            op = el.options[i];\n            selected = init ? op.hasAttribute('selected') : op.selected;\n            if (selected) {\n                val = op.hasOwnProperty('_value') ? op._value : op.value;\n                if (multi) {\n                    res.push(val);\n                } else {\n                    return val;\n                }\n            }\n        }\n        return res;\n    }\n\n    /**\n     * Native Array.indexOf uses strict equal, but in this\n     * case we need to match string/numbers with custom equal.\n     *\n     * @param {Array} arr\n     * @param {*} val\n     */\n\n    function indexOf$1(arr, val) {\n        var i = arr.length;\n        while (i--) {\n            if (looseEqual(arr[i], val)) {\n                return i;\n            }\n        }\n        return -1;\n    }\n\n    var checkbox = {\n\n        bind: function bind() {\n            var self = this;\n            var el = this.el;\n\n            this.getValue = function () {\n                return el.hasOwnProperty('_value') ? el._value : self.params.number ? toNumber(el.value) : el.value;\n            };\n\n            function getBooleanValue() {\n                var val = el.checked;\n                if (val && el.hasOwnProperty('_trueValue')) {\n                    return el._trueValue;\n                }\n                if (!val && el.hasOwnProperty('_falseValue')) {\n                    return el._falseValue;\n                }\n                return val;\n            }\n\n            this.listener = function () {\n                var model = self._watcher.value;\n                if (isArray(model)) {\n                    var val = self.getValue();\n                    if (el.checked) {\n                        if (indexOf(model, val) < 0) {\n                            model.push(val);\n                        }\n                    } else {\n                        model.$remove(val);\n                    }\n                } else {\n                    self.set(getBooleanValue());\n                }\n            };\n\n            this.on('change', this.listener);\n            if (el.hasAttribute('checked')) {\n                this.afterBind = this.listener;\n            }\n        },\n\n        update: function update(value) {\n            var el = this.el;\n            if (isArray(value)) {\n                el.checked = indexOf(value, this.getValue()) > -1;\n            } else {\n                if (el.hasOwnProperty('_trueValue')) {\n                    el.checked = looseEqual(value, el._trueValue);\n                } else {\n                    el.checked = !!value;\n                }\n            }\n        }\n    };\n\n    var handlers = {\n        text: text$2,\n        radio: radio,\n        select: select,\n        checkbox: checkbox\n    };\n\n    var model = {\n\n        priority: MODEL,\n        twoWay: true,\n        handlers: handlers,\n        params: ['lazy', 'number', 'debounce'],\n\n        /**\n         * Possible elements:\n         *   <select>\n         *   <textarea>\n         *   <input type=\"*\">\n         *     - text\n         *     - checkbox\n         *     - radio\n         *     - number\n         */\n\n        bind: function bind() {\n            // friendly warning...\n            this.checkFilters();\n            if (this.hasRead && !this.hasWrite) {\n                'development' !== 'production' && warn('It seems you are using a read-only filter with ' + 'v-model=\"' + this.descriptor.raw + '\". ' + 'You might want to use a two-way filter to ensure correct behavior.', this.vm);\n            }\n            var el = this.el;\n            var tag = el.tagName;\n            var handler;\n            if (tag === 'INPUT') {\n                handler = handlers[el.type] || handlers.text;\n            } else if (tag === 'SELECT') {\n                handler = handlers.select;\n            } else if (tag === 'TEXTAREA') {\n                handler = handlers.text;\n            } else {\n                'development' !== 'production' && warn('v-model does not support element type: ' + tag, this.vm);\n                return;\n            }\n            el.__v_model = this;\n            handler.bind.call(this);\n            this.update = handler.update;\n            this._unbind = handler.unbind;\n        },\n\n        /**\n         * Check read/write filter stats.\n         */\n\n        checkFilters: function checkFilters() {\n            var filters = this.filters;\n            if (!filters) return;\n            var i = filters.length;\n            while (i--) {\n                var filter = resolveAsset(this.vm.$options, 'filters', filters[i].name);\n                if (typeof filter === 'function' || filter.read) {\n                    this.hasRead = true;\n                }\n                if (filter.write) {\n                    this.hasWrite = true;\n                }\n            }\n        },\n\n        unbind: function unbind() {\n            this.el.__v_model = null;\n            this._unbind && this._unbind();\n        }\n    };\n\n    // keyCode aliases\n    var keyCodes = {\n        esc: 27,\n        tab: 9,\n        enter: 13,\n        space: 32,\n        'delete': [8, 46],\n        up: 38,\n        left: 37,\n        right: 39,\n        down: 40\n    };\n\n    function keyFilter(handler, keys) {\n        var codes = keys.map(function (key) {\n            var charCode = key.charCodeAt(0);\n            if (charCode > 47 && charCode < 58) {\n                return parseInt(key, 10);\n            }\n            if (key.length === 1) {\n                charCode = key.toUpperCase().charCodeAt(0);\n                if (charCode > 64 && charCode < 91) {\n                    return charCode;\n                }\n            }\n            return keyCodes[key];\n        });\n        codes = [].concat.apply([], codes);\n        return function keyHandler(e) {\n            if (codes.indexOf(e.keyCode) > -1) {\n                return handler.call(this, e);\n            }\n        };\n    }\n\n    function stopFilter(handler) {\n        return function stopHandler(e) {\n            e.stopPropagation();\n            return handler.call(this, e);\n        };\n    }\n\n    function preventFilter(handler) {\n        return function preventHandler(e) {\n            e.preventDefault();\n            return handler.call(this, e);\n        };\n    }\n\n    function selfFilter(handler) {\n        return function selfHandler(e) {\n            if (e.target === e.currentTarget) {\n                return handler.call(this, e);\n            }\n        };\n    }\n\n    var on$1 = {\n\n        priority: ON,\n        acceptStatement: true,\n        keyCodes: keyCodes,\n\n        bind: function bind() {\n            // deal with iframes\n            if (this.el.tagName === 'IFRAME' && this.arg !== 'load') {\n                var self = this;\n                this.iframeBind = function () {\n                    on(self.el.contentWindow, self.arg, self.handler, self.modifiers.capture);\n                };\n                this.on('load', this.iframeBind);\n            }\n        },\n\n        update: function update(handler) {\n            // stub a noop for v-on with no value,\n            // e.g. @mousedown.prevent\n            if (!this.descriptor.raw) {\n                handler = function () {};\n            }\n\n            if (typeof handler !== 'function') {\n                'development' !== 'production' && warn('v-on:' + this.arg + '=\"' + this.expression + '\" expects a function value, ' + 'got ' + handler, this.vm);\n                return;\n            }\n\n            // apply modifiers\n            if (this.modifiers.stop) {\n                handler = stopFilter(handler);\n            }\n            if (this.modifiers.prevent) {\n                handler = preventFilter(handler);\n            }\n            if (this.modifiers.self) {\n                handler = selfFilter(handler);\n            }\n            // key filter\n            var keys = Object.keys(this.modifiers).filter(function (key) {\n                return key !== 'stop' && key !== 'prevent' && key !== 'self' && key !== 'capture';\n            });\n            if (keys.length) {\n                handler = keyFilter(handler, keys);\n            }\n\n            this.reset();\n            this.handler = handler;\n\n            if (this.iframeBind) {\n                this.iframeBind();\n            } else {\n                on(this.el, this.arg, this.handler, this.modifiers.capture);\n            }\n        },\n\n        reset: function reset() {\n            var el = this.iframeBind ? this.el.contentWindow : this.el;\n            if (this.handler) {\n                off(el, this.arg, this.handler);\n            }\n        },\n\n        unbind: function unbind() {\n            this.reset();\n        }\n    };\n\n    var prefixes = ['-webkit-', '-moz-', '-ms-'];\n    var camelPrefixes = ['Webkit', 'Moz', 'ms'];\n    var importantRE = /!important;?$/;\n    var propCache = Object.create(null);\n\n    var testEl = null;\n\n    var style = {\n\n        deep: true,\n\n        update: function update(value) {\n            if (typeof value === 'string') {\n                this.el.style.cssText = value;\n            } else if (isArray(value)) {\n                this.handleObject(value.reduce(extend, {}));\n            } else {\n                this.handleObject(value || {});\n            }\n        },\n\n        handleObject: function handleObject(value) {\n            // cache object styles so that only changed props\n            // are actually updated.\n            var cache = this.cache || (this.cache = {});\n            var name, val;\n            for (name in cache) {\n                if (!(name in value)) {\n                    this.handleSingle(name, null);\n                    delete cache[name];\n                }\n            }\n            for (name in value) {\n                val = value[name];\n                if (val !== cache[name]) {\n                    cache[name] = val;\n                    this.handleSingle(name, val);\n                }\n            }\n        },\n\n        handleSingle: function handleSingle(prop, value) {\n            prop = normalize(prop);\n            if (!prop) return; // unsupported prop\n            // cast possible numbers/booleans into strings\n            if (value != null) value += '';\n            if (value) {\n                var isImportant = importantRE.test(value) ? 'important' : '';\n                if (isImportant) {\n                    /* istanbul ignore if */\n                    if ('development' !== 'production') {\n                        warn('It\\'s probably a bad idea to use !important with inline rules. ' + 'This feature will be deprecated in a future version of Vue.');\n                    }\n                    value = value.replace(importantRE, '').trim();\n                    this.el.style.setProperty(prop.kebab, value, isImportant);\n                } else {\n                    this.el.style[prop.camel] = value;\n                }\n            } else {\n                this.el.style[prop.camel] = '';\n            }\n        }\n\n    };\n\n    /**\n     * Normalize a CSS property name.\n     * - cache result\n     * - auto prefix\n     * - camelCase -> dash-case\n     *\n     * @param {String} prop\n     * @return {String}\n     */\n\n    function normalize(prop) {\n        if (propCache[prop]) {\n            return propCache[prop];\n        }\n        var res = prefix(prop);\n        propCache[prop] = propCache[res] = res;\n        return res;\n    }\n\n    /**\n     * Auto detect the appropriate prefix for a CSS property.\n     * https://gist.github.com/paulirish/523692\n     *\n     * @param {String} prop\n     * @return {String}\n     */\n\n    function prefix(prop) {\n        prop = hyphenate(prop);\n        var camel = camelize(prop);\n        var upper = camel.charAt(0).toUpperCase() + camel.slice(1);\n        if (!testEl) {\n            testEl = document.createElement('div');\n        }\n        var i = prefixes.length;\n        var prefixed;\n        if (camel !== 'filter' && camel in testEl.style) {\n            return {\n                kebab: prop,\n                camel: camel\n            };\n        }\n        while (i--) {\n            prefixed = camelPrefixes[i] + upper;\n            if (prefixed in testEl.style) {\n                return {\n                    kebab: prefixes[i] + prop,\n                    camel: prefixed\n                };\n            }\n        }\n    }\n\n    // xlink\n    var xlinkNS = 'http://www.w3.org/1999/xlink';\n    var xlinkRE = /^xlink:/;\n\n    // check for attributes that prohibit interpolations\n    var disallowedInterpAttrRE = /^v-|^:|^@|^(?:is|transition|transition-mode|debounce|track-by|stagger|enter-stagger|leave-stagger)$/;\n    // these attributes should also set their corresponding properties\n    // because they only affect the initial state of the element\n    var attrWithPropsRE = /^(?:value|checked|selected|muted)$/;\n    // these attributes expect enumrated values of \"true\" or \"false\"\n    // but are not boolean attributes\n    var enumeratedAttrRE = /^(?:draggable|contenteditable|spellcheck)$/;\n\n    // these attributes should set a hidden property for\n    // binding v-model to object values\n    var modelProps = {\n        value: '_value',\n        'true-value': '_trueValue',\n        'false-value': '_falseValue'\n    };\n\n    var bind$1 = {\n\n        priority: BIND,\n\n        bind: function bind() {\n            var attr = this.arg;\n            var tag = this.el.tagName;\n            // should be deep watch on object mode\n            if (!attr) {\n                this.deep = true;\n            }\n            // handle interpolation bindings\n            var descriptor = this.descriptor;\n            var tokens = descriptor.interp;\n            if (tokens) {\n                // handle interpolations with one-time tokens\n                if (descriptor.hasOneTime) {\n                    this.expression = tokensToExp(tokens, this._scope || this.vm);\n                }\n\n                // only allow binding on native attributes\n                if (disallowedInterpAttrRE.test(attr) || attr === 'name' && (tag === 'PARTIAL' || tag === 'SLOT')) {\n                    'development' !== 'production' && warn(attr + '=\"' + descriptor.raw + '\": ' + 'attribute interpolation is not allowed in Vue.js ' + 'directives and special attributes.', this.vm);\n                    this.el.removeAttribute(attr);\n                    this.invalid = true;\n                }\n\n                /* istanbul ignore if */\n                if ('development' !== 'production') {\n                    var raw = attr + '=\"' + descriptor.raw + '\": ';\n                    // warn src\n                    if (attr === 'src') {\n                        warn(raw + 'interpolation in \"src\" attribute will cause ' + 'a 404 request. Use v-bind:src instead.', this.vm);\n                    }\n\n                    // warn style\n                    if (attr === 'style') {\n                        warn(raw + 'interpolation in \"style\" attribute will cause ' + 'the attribute to be discarded in Internet Explorer. ' + 'Use v-bind:style instead.', this.vm);\n                    }\n                }\n            }\n        },\n\n        update: function update(value) {\n            if (this.invalid) {\n                return;\n            }\n            var attr = this.arg;\n            if (this.arg) {\n                this.handleSingle(attr, value);\n            } else {\n                this.handleObject(value || {});\n            }\n        },\n\n        // share object handler with v-bind:class\n        handleObject: style.handleObject,\n\n        handleSingle: function handleSingle(attr, value) {\n            var el = this.el;\n            var interp = this.descriptor.interp;\n            if (this.modifiers.camel) {\n                attr = camelize(attr);\n            }\n            if (!interp && attrWithPropsRE.test(attr) && attr in el) {\n                var attrValue = attr === 'value' ? value == null // IE9 will set input.value to \"null\" for null...\n                    ? '' : value : value;\n\n                if (el[attr] !== attrValue) {\n                    el[attr] = attrValue;\n                }\n            }\n            // set model props\n            var modelProp = modelProps[attr];\n            if (!interp && modelProp) {\n                el[modelProp] = value;\n                // update v-model if present\n                var model = el.__v_model;\n                if (model) {\n                    model.listener();\n                }\n            }\n            // do not set value attribute for textarea\n            if (attr === 'value' && el.tagName === 'TEXTAREA') {\n                el.removeAttribute(attr);\n                return;\n            }\n            // update attribute\n            if (enumeratedAttrRE.test(attr)) {\n                el.setAttribute(attr, value ? 'true' : 'false');\n            } else if (value != null && value !== false) {\n                if (attr === 'class') {\n                    // handle edge case #1960:\n                    // class interpolation should not overwrite Vue transition class\n                    if (el.__v_trans) {\n                        value += ' ' + el.__v_trans.id + '-transition';\n                    }\n                    setClass(el, value);\n                } else if (xlinkRE.test(attr)) {\n                    el.setAttributeNS(xlinkNS, attr, value === true ? '' : value);\n                } else {\n                    el.setAttribute(attr, value === true ? '' : value);\n                }\n            } else {\n                el.removeAttribute(attr);\n            }\n        }\n    };\n\n    var el = {\n\n        priority: EL,\n\n        bind: function bind() {\n            /* istanbul ignore if */\n            if (!this.arg) {\n                return;\n            }\n            var id = this.id = camelize(this.arg);\n            var refs = (this._scope || this.vm).$els;\n            if (hasOwn(refs, id)) {\n                refs[id] = this.el;\n            } else {\n                defineReactive(refs, id, this.el);\n            }\n        },\n\n        unbind: function unbind() {\n            var refs = (this._scope || this.vm).$els;\n            if (refs[this.id] === this.el) {\n                refs[this.id] = null;\n            }\n        }\n    };\n\n    var ref = {\n        bind: function bind() {\n            'development' !== 'production' && warn('v-ref:' + this.arg + ' must be used on a child ' + 'component. Found on <' + this.el.tagName.toLowerCase() + '>.', this.vm);\n        }\n    };\n\n    var cloak = {\n        bind: function bind() {\n            var el = this.el;\n            this.vm.$once('pre-hook:compiled', function () {\n                el.removeAttribute('v-cloak');\n            });\n        }\n    };\n\n    // must export plain object\n    var directives = {\n        text: text$1,\n        html: html,\n        'for': vFor,\n        'if': vIf,\n        show: show,\n        model: model,\n        on: on$1,\n        bind: bind$1,\n        el: el,\n        ref: ref,\n        cloak: cloak\n    };\n\n    var vClass = {\n\n        deep: true,\n\n        update: function update(value) {\n            if (!value) {\n                this.cleanup();\n            } else if (typeof value === 'string') {\n                this.setClass(value.trim().split(/\\s+/));\n            } else {\n                this.setClass(normalize$1(value));\n            }\n        },\n\n        setClass: function setClass(value) {\n            this.cleanup(value);\n            for (var i = 0, l = value.length; i < l; i++) {\n                var val = value[i];\n                if (val) {\n                    apply(this.el, val, addClass);\n                }\n            }\n            this.prevKeys = value;\n        },\n\n        cleanup: function cleanup(value) {\n            var prevKeys = this.prevKeys;\n            if (!prevKeys) return;\n            var i = prevKeys.length;\n            while (i--) {\n                var key = prevKeys[i];\n                if (!value || value.indexOf(key) < 0) {\n                    apply(this.el, key, removeClass);\n                }\n            }\n        }\n    };\n\n    /**\n     * Normalize objects and arrays (potentially containing objects)\n     * into array of strings.\n     *\n     * @param {Object|Array<String|Object>} value\n     * @return {Array<String>}\n     */\n\n    function normalize$1(value) {\n        var res = [];\n        if (isArray(value)) {\n            for (var i = 0, l = value.length; i < l; i++) {\n                var _key = value[i];\n                if (_key) {\n                    if (typeof _key === 'string') {\n                        res.push(_key);\n                    } else {\n                        for (var k in _key) {\n                            if (_key[k]) res.push(k);\n                        }\n                    }\n                }\n            }\n        } else if (isObject(value)) {\n            for (var key in value) {\n                if (value[key]) res.push(key);\n            }\n        }\n        return res;\n    }\n\n    /**\n     * Add or remove a class/classes on an element\n     *\n     * @param {Element} el\n     * @param {String} key The class name. This may or may not\n     *                     contain a space character, in such a\n     *                     case we'll deal with multiple class\n     *                     names at once.\n     * @param {Function} fn\n     */\n\n    function apply(el, key, fn) {\n        key = key.trim();\n        if (key.indexOf(' ') === -1) {\n            fn(el, key);\n            return;\n        }\n        // The key contains one or more space characters.\n        // Since a class name doesn't accept such characters, we\n        // treat it as multiple classes.\n        var keys = key.split(/\\s+/);\n        for (var i = 0, l = keys.length; i < l; i++) {\n            fn(el, keys[i]);\n        }\n    }\n\n    var component = {\n\n        priority: COMPONENT,\n\n        params: ['keep-alive', 'transition-mode', 'inline-template'],\n\n        /**\n         * Setup. Two possible usages:\n         *\n         * - static:\n         *   <comp> or <div v-component=\"comp\">\n         *\n         * - dynamic:\n         *   <component :is=\"view\">\n         */\n\n        bind: function bind() {\n            if (!this.el.__vue__) {\n                // keep-alive cache\n                this.keepAlive = this.params.keepAlive;\n                if (this.keepAlive) {\n                    this.cache = {};\n                }\n                // check inline-template\n                if (this.params.inlineTemplate) {\n                    // extract inline template as a DocumentFragment\n                    this.inlineTemplate = extractContent(this.el, true);\n                }\n                // component resolution related state\n                this.pendingComponentCb = this.Component = null;\n                // transition related state\n                this.pendingRemovals = 0;\n                this.pendingRemovalCb = null;\n                // create a ref anchor\n                this.anchor = createAnchor('v-component');\n                replace(this.el, this.anchor);\n                // remove is attribute.\n                // this is removed during compilation, but because compilation is\n                // cached, when the component is used elsewhere this attribute\n                // will remain at link time.\n                this.el.removeAttribute('is');\n                this.el.removeAttribute(':is');\n                // remove ref, same as above\n                if (this.descriptor.ref) {\n                    this.el.removeAttribute('v-ref:' + hyphenate(this.descriptor.ref));\n                }\n                // if static, build right now.\n                if (this.literal) {\n                    this.setComponent(this.expression);\n                }\n            } else {\n                'development' !== 'production' && warn('cannot mount component \"' + this.expression + '\" ' + 'on already mounted element: ' + this.el);\n            }\n        },\n\n        /**\n         * Public update, called by the watcher in the dynamic\n         * literal scenario, e.g. <component :is=\"view\">\n         */\n\n        update: function update(value) {\n            if (!this.literal) {\n                this.setComponent(value);\n            }\n        },\n\n        /**\n         * Switch dynamic components. May resolve the component\n         * asynchronously, and perform transition based on\n         * specified transition mode. Accepts a few additional\n         * arguments specifically for vue-router.\n         *\n         * The callback is called when the full transition is\n         * finished.\n         *\n         * @param {String} value\n         * @param {Function} [cb]\n         */\n\n        setComponent: function setComponent(value, cb) {\n            this.invalidatePending();\n            if (!value) {\n                // just remove current\n                this.unbuild(true);\n                this.remove(this.childVM, cb);\n                this.childVM = null;\n            } else {\n                var self = this;\n                this.resolveComponent(value, function () {\n                    self.mountComponent(cb);\n                });\n            }\n        },\n\n        /**\n         * Resolve the component constructor to use when creating\n         * the child vm.\n         *\n         * @param {String|Function} value\n         * @param {Function} cb\n         */\n\n        resolveComponent: function resolveComponent(value, cb) {\n            var self = this;\n            this.pendingComponentCb = cancellable(function (Component) {\n                self.ComponentName = Component.options.name || (typeof value === 'string' ? value : null);\n                self.Component = Component;\n                cb();\n            });\n            this.vm._resolveComponent(value, this.pendingComponentCb);\n        },\n\n        /**\n         * Create a new instance using the current constructor and\n         * replace the existing instance. This method doesn't care\n         * whether the new component and the old one are actually\n         * the same.\n         *\n         * @param {Function} [cb]\n         */\n\n        mountComponent: function mountComponent(cb) {\n            // actual mount\n            this.unbuild(true);\n            var self = this;\n            var activateHooks = this.Component.options.activate;\n            var cached = this.getCached();\n            var newComponent = this.build();\n            if (activateHooks && !cached) {\n                this.waitingFor = newComponent;\n                callActivateHooks(activateHooks, newComponent, function () {\n                    if (self.waitingFor !== newComponent) {\n                        return;\n                    }\n                    self.waitingFor = null;\n                    self.transition(newComponent, cb);\n                });\n            } else {\n                // update ref for kept-alive component\n                if (cached) {\n                    newComponent._updateRef();\n                }\n                this.transition(newComponent, cb);\n            }\n        },\n\n        /**\n         * When the component changes or unbinds before an async\n         * constructor is resolved, we need to invalidate its\n         * pending callback.\n         */\n\n        invalidatePending: function invalidatePending() {\n            if (this.pendingComponentCb) {\n                this.pendingComponentCb.cancel();\n                this.pendingComponentCb = null;\n            }\n        },\n\n        /**\n         * Instantiate/insert a new child vm.\n         * If keep alive and has cached instance, insert that\n         * instance; otherwise build a new one and cache it.\n         *\n         * @param {Object} [extraOptions]\n         * @return {Vue} - the created instance\n         */\n\n        build: function build(extraOptions) {\n            var cached = this.getCached();\n            if (cached) {\n                return cached;\n            }\n            if (this.Component) {\n                // default options\n                var options = {\n                    name: this.ComponentName,\n                    el: cloneNode(this.el),\n                    template: this.inlineTemplate,\n                    // make sure to add the child with correct parent\n                    // if this is a transcluded component, its parent\n                    // should be the transclusion host.\n                    parent: this._host || this.vm,\n                    // if no inline-template, then the compiled\n                    // linker can be cached for better performance.\n                    _linkerCachable: !this.inlineTemplate,\n                    _ref: this.descriptor.ref,\n                    _asComponent: true,\n                    _isRouterView: this._isRouterView,\n                    // if this is a transcluded component, context\n                    // will be the common parent vm of this instance\n                    // and its host.\n                    _context: this.vm,\n                    // if this is inside an inline v-for, the scope\n                    // will be the intermediate scope created for this\n                    // repeat fragment. this is used for linking props\n                    // and container directives.\n                    _scope: this._scope,\n                    // pass in the owner fragment of this component.\n                    // this is necessary so that the fragment can keep\n                    // track of its contained components in order to\n                    // call attach/detach hooks for them.\n                    _frag: this._frag\n                };\n                // extra options\n                // in 1.0.0 this is used by vue-router only\n                /* istanbul ignore if */\n                if (extraOptions) {\n                    extend(options, extraOptions);\n                }\n                var child = new this.Component(options);\n                if (this.keepAlive) {\n                    this.cache[this.Component.cid] = child;\n                }\n                /* istanbul ignore if */\n                if ('development' !== 'production' && this.el.hasAttribute('transition') && child._isFragment) {\n                    warn('Transitions will not work on a fragment instance. ' + 'Template: ' + child.$options.template, child);\n                }\n                return child;\n            }\n        },\n\n        /**\n         * Try to get a cached instance of the current component.\n         *\n         * @return {Vue|undefined}\n         */\n\n        getCached: function getCached() {\n            return this.keepAlive && this.cache[this.Component.cid];\n        },\n\n        /**\n         * Teardown the current child, but defers cleanup so\n         * that we can separate the destroy and removal steps.\n         *\n         * @param {Boolean} defer\n         */\n\n        unbuild: function unbuild(defer) {\n            if (this.waitingFor) {\n                if (!this.keepAlive) {\n                    this.waitingFor.$destroy();\n                }\n                this.waitingFor = null;\n            }\n            var child = this.childVM;\n            if (!child || this.keepAlive) {\n                if (child) {\n                    // remove ref\n                    child._inactive = true;\n                    child._updateRef(true);\n                }\n                return;\n            }\n            // the sole purpose of `deferCleanup` is so that we can\n            // \"deactivate\" the vm right now and perform DOM removal\n            // later.\n            child.$destroy(false, defer);\n        },\n\n        /**\n         * Remove current destroyed child and manually do\n         * the cleanup after removal.\n         *\n         * @param {Function} cb\n         */\n\n        remove: function remove(child, cb) {\n            var keepAlive = this.keepAlive;\n            if (child) {\n                // we may have a component switch when a previous\n                // component is still being transitioned out.\n                // we want to trigger only one lastest insertion cb\n                // when the existing transition finishes. (#1119)\n                this.pendingRemovals++;\n                this.pendingRemovalCb = cb;\n                var self = this;\n                child.$remove(function () {\n                    self.pendingRemovals--;\n                    if (!keepAlive) child._cleanup();\n                    if (!self.pendingRemovals && self.pendingRemovalCb) {\n                        self.pendingRemovalCb();\n                        self.pendingRemovalCb = null;\n                    }\n                });\n            } else if (cb) {\n                cb();\n            }\n        },\n\n        /**\n         * Actually swap the components, depending on the\n         * transition mode. Defaults to simultaneous.\n         *\n         * @param {Vue} target\n         * @param {Function} [cb]\n         */\n\n        transition: function transition(target, cb) {\n            var self = this;\n            var current = this.childVM;\n            // for devtool inspection\n            if (current) current._inactive = true;\n            target._inactive = false;\n            this.childVM = target;\n            switch (self.params.transitionMode) {\n                case 'in-out':\n                    target.$before(self.anchor, function () {\n                        self.remove(current, cb);\n                    });\n                    break;\n                case 'out-in':\n                    self.remove(current, function () {\n                        target.$before(self.anchor, cb);\n                    });\n                    break;\n                default:\n                    self.remove(current);\n                    target.$before(self.anchor, cb);\n            }\n        },\n\n        /**\n         * Unbind.\n         */\n\n        unbind: function unbind() {\n            this.invalidatePending();\n            // Do not defer cleanup when unbinding\n            this.unbuild();\n            // destroy all keep-alive cached instances\n            if (this.cache) {\n                for (var key in this.cache) {\n                    this.cache[key].$destroy();\n                }\n                this.cache = null;\n            }\n        }\n    };\n\n    /**\n     * Call activate hooks in order (asynchronous)\n     *\n     * @param {Array} hooks\n     * @param {Vue} vm\n     * @param {Function} cb\n     */\n\n    function callActivateHooks(hooks, vm, cb) {\n        var total = hooks.length;\n        var called = 0;\n        hooks[0].call(vm, next);\n        function next() {\n            if (++called >= total) {\n                cb();\n            } else {\n                hooks[called].call(vm, next);\n            }\n        }\n    }\n\n    var propBindingModes = config._propBindingModes;\n    var empty = {};\n\n    // regexes\n    var identRE$1 = /^[$_a-zA-Z]+[\\w$]*$/;\n    var settablePathRE = /^[A-Za-z_$][\\w$]*(\\.[A-Za-z_$][\\w$]*|\\[[^\\[\\]]+\\])*$/;\n\n    /**\n     * Compile props on a root element and return\n     * a props link function.\n     *\n     * @param {Element|DocumentFragment} el\n     * @param {Array} propOptions\n     * @param {Vue} vm\n     * @return {Function} propsLinkFn\n     */\n\n    function compileProps(el, propOptions, vm) {\n        var props = [];\n        var names = Object.keys(propOptions);\n        var i = names.length;\n        var options, name, attr, value, path, parsed, prop;\n        while (i--) {\n            name = names[i];\n            options = propOptions[name] || empty;\n\n            if ('development' !== 'production' && name === '$data') {\n                warn('Do not use $data as prop.', vm);\n                continue;\n            }\n\n            // props could contain dashes, which will be\n            // interpreted as minus calculations by the parser\n            // so we need to camelize the path here\n            path = camelize(name);\n            if (!identRE$1.test(path)) {\n                'development' !== 'production' && warn('Invalid prop key: \"' + name + '\". Prop keys ' + 'must be valid identifiers.', vm);\n                continue;\n            }\n\n            prop = {\n                name: name,\n                path: path,\n                options: options,\n                mode: propBindingModes.ONE_WAY,\n                raw: null\n            };\n\n            attr = hyphenate(name);\n            // first check dynamic version\n            if ((value = getBindAttr(el, attr)) === null) {\n                if ((value = getBindAttr(el, attr + '.sync')) !== null) {\n                    prop.mode = propBindingModes.TWO_WAY;\n                } else if ((value = getBindAttr(el, attr + '.once')) !== null) {\n                    prop.mode = propBindingModes.ONE_TIME;\n                }\n            }\n            if (value !== null) {\n                // has dynamic binding!\n                prop.raw = value;\n                parsed = parseDirective(value);\n                value = parsed.expression;\n                prop.filters = parsed.filters;\n                // check binding type\n                if (isLiteral(value) && !parsed.filters) {\n                    // for expressions containing literal numbers and\n                    // booleans, there's no need to setup a prop binding,\n                    // so we can optimize them as a one-time set.\n                    prop.optimizedLiteral = true;\n                } else {\n                    prop.dynamic = true;\n                    // check non-settable path for two-way bindings\n                    if ('development' !== 'production' && prop.mode === propBindingModes.TWO_WAY && !settablePathRE.test(value)) {\n                        prop.mode = propBindingModes.ONE_WAY;\n                        warn('Cannot bind two-way prop with non-settable ' + 'parent path: ' + value, vm);\n                    }\n                }\n                prop.parentPath = value;\n\n                // warn required two-way\n                if ('development' !== 'production' && options.twoWay && prop.mode !== propBindingModes.TWO_WAY) {\n                    warn('Prop \"' + name + '\" expects a two-way binding type.', vm);\n                }\n            } else if ((value = getAttr(el, attr)) !== null) {\n                // has literal binding!\n                prop.raw = value;\n            } else if ('development' !== 'production') {\n                // check possible camelCase prop usage\n                var lowerCaseName = path.toLowerCase();\n                value = /[A-Z\\-]/.test(name) && (el.getAttribute(lowerCaseName) || el.getAttribute(':' + lowerCaseName) || el.getAttribute('v-bind:' + lowerCaseName) || el.getAttribute(':' + lowerCaseName + '.once') || el.getAttribute('v-bind:' + lowerCaseName + '.once') || el.getAttribute(':' + lowerCaseName + '.sync') || el.getAttribute('v-bind:' + lowerCaseName + '.sync'));\n                if (value) {\n                    warn('Possible usage error for prop `' + lowerCaseName + '` - ' + 'did you mean `' + attr + '`? HTML is case-insensitive, remember to use ' + 'kebab-case for props in templates.', vm);\n                } else if (options.required) {\n                    // warn missing required\n                    warn('Missing required prop: ' + name, vm);\n                }\n            }\n            // push prop\n            props.push(prop);\n        }\n        return makePropsLinkFn(props);\n    }\n\n    /**\n     * Build a function that applies props to a vm.\n     *\n     * @param {Array} props\n     * @return {Function} propsLinkFn\n     */\n\n    function makePropsLinkFn(props) {\n        return function propsLinkFn(vm, scope) {\n            // store resolved props info\n            vm._props = {};\n            var inlineProps = vm.$options.propsData;\n            var i = props.length;\n            var prop, path, options, value, raw;\n            while (i--) {\n                prop = props[i];\n                raw = prop.raw;\n                path = prop.path;\n                options = prop.options;\n                vm._props[path] = prop;\n                if (inlineProps && hasOwn(inlineProps, path)) {\n                    initProp(vm, prop, inlineProps[path]);\n                }if (raw === null) {\n                    // initialize absent prop\n                    initProp(vm, prop, undefined);\n                } else if (prop.dynamic) {\n                    // dynamic prop\n                    if (prop.mode === propBindingModes.ONE_TIME) {\n                        // one time binding\n                        value = (scope || vm._context || vm).$get(prop.parentPath);\n                        initProp(vm, prop, value);\n                    } else {\n                        if (vm._context) {\n                            // dynamic binding\n                            vm._bindDir({\n                                name: 'prop',\n                                def: propDef,\n                                prop: prop\n                            }, null, null, scope); // el, host, scope\n                        } else {\n                            // root instance\n                            initProp(vm, prop, vm.$get(prop.parentPath));\n                        }\n                    }\n                } else if (prop.optimizedLiteral) {\n                    // optimized literal, cast it and just set once\n                    var stripped = stripQuotes(raw);\n                    value = stripped === raw ? toBoolean(toNumber(raw)) : stripped;\n                    initProp(vm, prop, value);\n                } else {\n                    // string literal, but we need to cater for\n                    // Boolean props with no value, or with same\n                    // literal value (e.g. disabled=\"disabled\")\n                    // see https://github.com/vuejs/vue-loader/issues/182\n                    value = options.type === Boolean && (raw === '' || raw === hyphenate(prop.name)) ? true : raw;\n                    initProp(vm, prop, value);\n                }\n            }\n        };\n    }\n\n    /**\n     * Process a prop with a rawValue, applying necessary coersions,\n     * default values & assertions and call the given callback with\n     * processed value.\n     *\n     * @param {Vue} vm\n     * @param {Object} prop\n     * @param {*} rawValue\n     * @param {Function} fn\n     */\n\n    function processPropValue(vm, prop, rawValue, fn) {\n        var isSimple = prop.dynamic && isSimplePath(prop.parentPath);\n        var value = rawValue;\n        if (value === undefined) {\n            value = getPropDefaultValue(vm, prop);\n        }\n        value = coerceProp(prop, value);\n        var coerced = value !== rawValue;\n        if (!assertProp(prop, value, vm)) {\n            value = undefined;\n        }\n        if (isSimple && !coerced) {\n            withoutConversion(function () {\n                fn(value);\n            });\n        } else {\n            fn(value);\n        }\n    }\n\n    /**\n     * Set a prop's initial value on a vm and its data object.\n     *\n     * @param {Vue} vm\n     * @param {Object} prop\n     * @param {*} value\n     */\n\n    function initProp(vm, prop, value) {\n        processPropValue(vm, prop, value, function (value) {\n            defineReactive(vm, prop.path, value);\n        });\n    }\n\n    /**\n     * Update a prop's value on a vm.\n     *\n     * @param {Vue} vm\n     * @param {Object} prop\n     * @param {*} value\n     */\n\n    function updateProp(vm, prop, value) {\n        processPropValue(vm, prop, value, function (value) {\n            vm[prop.path] = value;\n        });\n    }\n\n    /**\n     * Get the default value of a prop.\n     *\n     * @param {Vue} vm\n     * @param {Object} prop\n     * @return {*}\n     */\n\n    function getPropDefaultValue(vm, prop) {\n        // no default, return undefined\n        var options = prop.options;\n        if (!hasOwn(options, 'default')) {\n            // absent boolean value defaults to false\n            return options.type === Boolean ? false : undefined;\n        }\n        var def = options['default'];\n        // warn against non-factory defaults for Object & Array\n        if (isObject(def)) {\n            'development' !== 'production' && warn('Invalid default value for prop \"' + prop.name + '\": ' + 'Props with type Object/Array must use a factory function ' + 'to return the default value.', vm);\n        }\n        // call factory function for non-Function types\n        return typeof def === 'function' && options.type !== Function ? def.call(vm) : def;\n    }\n\n    /**\n     * Assert whether a prop is valid.\n     *\n     * @param {Object} prop\n     * @param {*} value\n     * @param {Vue} vm\n     */\n\n    function assertProp(prop, value, vm) {\n        if (!prop.options.required && ( // non-required\n            prop.raw === null || // abscent\n            value == null) // null or undefined\n        ) {\n            return true;\n        }\n        var options = prop.options;\n        var type = options.type;\n        var valid = !type;\n        var expectedTypes = [];\n        if (type) {\n            if (!isArray(type)) {\n                type = [type];\n            }\n            for (var i = 0; i < type.length && !valid; i++) {\n                var assertedType = assertType(value, type[i]);\n                expectedTypes.push(assertedType.expectedType);\n                valid = assertedType.valid;\n            }\n        }\n        if (!valid) {\n            if ('development' !== 'production') {\n                warn('Invalid prop: type check failed for prop \"' + prop.name + '\".' + ' Expected ' + expectedTypes.map(formatType).join(', ') + ', got ' + formatValue(value) + '.', vm);\n            }\n            return false;\n        }\n        var validator = options.validator;\n        if (validator) {\n            if (!validator(value)) {\n                'development' !== 'production' && warn('Invalid prop: custom validator check failed for prop \"' + prop.name + '\".', vm);\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Force parsing value with coerce option.\n     *\n     * @param {*} value\n     * @param {Object} options\n     * @return {*}\n     */\n\n    function coerceProp(prop, value) {\n        var coerce = prop.options.coerce;\n        if (!coerce) {\n            return value;\n        }\n        // coerce is a function\n        return coerce(value);\n    }\n\n    /**\n     * Assert the type of a value\n     *\n     * @param {*} value\n     * @param {Function} type\n     * @return {Object}\n     */\n\n    function assertType(value, type) {\n        var valid;\n        var expectedType;\n        if (type === String) {\n            expectedType = 'string';\n            valid = typeof value === expectedType;\n        } else if (type === Number) {\n            expectedType = 'number';\n            valid = typeof value === expectedType;\n        } else if (type === Boolean) {\n            expectedType = 'boolean';\n            valid = typeof value === expectedType;\n        } else if (type === Function) {\n            expectedType = 'function';\n            valid = typeof value === expectedType;\n        } else if (type === Object) {\n            expectedType = 'object';\n            valid = isPlainObject(value);\n        } else if (type === Array) {\n            expectedType = 'array';\n            valid = isArray(value);\n        } else {\n            valid = value instanceof type;\n        }\n        return {\n            valid: valid,\n            expectedType: expectedType\n        };\n    }\n\n    /**\n     * Format type for output\n     *\n     * @param {String} type\n     * @return {String}\n     */\n\n    function formatType(type) {\n        return type ? type.charAt(0).toUpperCase() + type.slice(1) : 'custom type';\n    }\n\n    /**\n     * Format value\n     *\n     * @param {*} value\n     * @return {String}\n     */\n\n    function formatValue(val) {\n        return Object.prototype.toString.call(val).slice(8, -1);\n    }\n\n    var bindingModes = config._propBindingModes;\n\n    var propDef = {\n\n        bind: function bind() {\n            var child = this.vm;\n            var parent = child._context;\n            // passed in from compiler directly\n            var prop = this.descriptor.prop;\n            var childKey = prop.path;\n            var parentKey = prop.parentPath;\n            var twoWay = prop.mode === bindingModes.TWO_WAY;\n\n            var parentWatcher = this.parentWatcher = new Watcher(parent, parentKey, function (val) {\n                updateProp(child, prop, val);\n            }, {\n                twoWay: twoWay,\n                filters: prop.filters,\n                // important: props need to be observed on the\n                // v-for scope if present\n                scope: this._scope\n            });\n\n            // set the child initial value.\n            initProp(child, prop, parentWatcher.value);\n\n            // setup two-way binding\n            if (twoWay) {\n                // important: defer the child watcher creation until\n                // the created hook (after data observation)\n                var self = this;\n                child.$once('pre-hook:created', function () {\n                    self.childWatcher = new Watcher(child, childKey, function (val) {\n                        parentWatcher.set(val);\n                    }, {\n                        // ensure sync upward before parent sync down.\n                        // this is necessary in cases e.g. the child\n                        // mutates a prop array, then replaces it. (#1683)\n                        sync: true\n                    });\n                });\n            }\n        },\n\n        unbind: function unbind() {\n            this.parentWatcher.teardown();\n            if (this.childWatcher) {\n                this.childWatcher.teardown();\n            }\n        }\n    };\n\n    var queue$1 = [];\n    var queued = false;\n\n    /**\n     * Push a job into the queue.\n     *\n     * @param {Function} job\n     */\n\n    function pushJob(job) {\n        queue$1.push(job);\n        if (!queued) {\n            queued = true;\n            nextTick(flush);\n        }\n    }\n\n    /**\n     * Flush the queue, and do one forced reflow before\n     * triggering transitions.\n     */\n\n    function flush() {\n        // Force layout\n        var f = document.documentElement.offsetHeight;\n        for (var i = 0; i < queue$1.length; i++) {\n            queue$1[i]();\n        }\n        queue$1 = [];\n        queued = false;\n        // dummy return, so js linters don't complain about\n        // unused variable f\n        return f;\n    }\n\n    var TYPE_TRANSITION = 'transition';\n    var TYPE_ANIMATION = 'animation';\n    var transDurationProp = transitionProp + 'Duration';\n    var animDurationProp = animationProp + 'Duration';\n\n    /**\n     * If a just-entered element is applied the\n     * leave class while its enter transition hasn't started yet,\n     * and the transitioned property has the same value for both\n     * enter/leave, then the leave transition will be skipped and\n     * the transitionend event never fires. This function ensures\n     * its callback to be called after a transition has started\n     * by waiting for double raf.\n     *\n     * It falls back to setTimeout on devices that support CSS\n     * transitions but not raf (e.g. Android 4.2 browser) - since\n     * these environments are usually slow, we are giving it a\n     * relatively large timeout.\n     */\n\n    var raf = inBrowser && window.requestAnimationFrame;\n    var waitForTransitionStart = raf\n        /* istanbul ignore next */\n        ? function (fn) {\n        raf(function () {\n            raf(fn);\n        });\n    } : function (fn) {\n        setTimeout(fn, 50);\n    };\n\n    /**\n     * A Transition object that encapsulates the state and logic\n     * of the transition.\n     *\n     * @param {Element} el\n     * @param {String} id\n     * @param {Object} hooks\n     * @param {Vue} vm\n     */\n    function Transition(el, id, hooks, vm) {\n        this.id = id;\n        this.el = el;\n        this.enterClass = hooks && hooks.enterClass || id + '-enter';\n        this.leaveClass = hooks && hooks.leaveClass || id + '-leave';\n        this.hooks = hooks;\n        this.vm = vm;\n        // async state\n        this.pendingCssEvent = this.pendingCssCb = this.cancel = this.pendingJsCb = this.op = this.cb = null;\n        this.justEntered = false;\n        this.entered = this.left = false;\n        this.typeCache = {};\n        // check css transition type\n        this.type = hooks && hooks.type;\n        /* istanbul ignore if */\n        if ('development' !== 'production') {\n            if (this.type && this.type !== TYPE_TRANSITION && this.type !== TYPE_ANIMATION) {\n                warn('invalid CSS transition type for transition=\"' + this.id + '\": ' + this.type, vm);\n            }\n        }\n        // bind\n        var self = this;['enterNextTick', 'enterDone', 'leaveNextTick', 'leaveDone'].forEach(function (m) {\n            self[m] = bind(self[m], self);\n        });\n    }\n\n    var p$1 = Transition.prototype;\n\n    /**\n     * Start an entering transition.\n     *\n     * 1. enter transition triggered\n     * 2. call beforeEnter hook\n     * 3. add enter class\n     * 4. insert/show element\n     * 5. call enter hook (with possible explicit js callback)\n     * 6. reflow\n     * 7. based on transition type:\n     *    - transition:\n     *        remove class now, wait for transitionend,\n     *        then done if there's no explicit js callback.\n     *    - animation:\n     *        wait for animationend, remove class,\n     *        then done if there's no explicit js callback.\n     *    - no css transition:\n     *        done now if there's no explicit js callback.\n     * 8. wait for either done or js callback, then call\n     *    afterEnter hook.\n     *\n     * @param {Function} op - insert/show the element\n     * @param {Function} [cb]\n     */\n\n    p$1.enter = function (op, cb) {\n        this.cancelPending();\n        this.callHook('beforeEnter');\n        this.cb = cb;\n        addClass(this.el, this.enterClass);\n        op();\n        this.entered = false;\n        this.callHookWithCb('enter');\n        if (this.entered) {\n            return; // user called done synchronously.\n        }\n        this.cancel = this.hooks && this.hooks.enterCancelled;\n        pushJob(this.enterNextTick);\n    };\n\n    /**\n     * The \"nextTick\" phase of an entering transition, which is\n     * to be pushed into a queue and executed after a reflow so\n     * that removing the class can trigger a CSS transition.\n     */\n\n    p$1.enterNextTick = function () {\n        var _this = this;\n\n        // prevent transition skipping\n        this.justEntered = true;\n        waitForTransitionStart(function () {\n            _this.justEntered = false;\n        });\n        var enterDone = this.enterDone;\n        var type = this.getCssTransitionType(this.enterClass);\n        if (!this.pendingJsCb) {\n            if (type === TYPE_TRANSITION) {\n                // trigger transition by removing enter class now\n                removeClass(this.el, this.enterClass);\n                this.setupCssCb(transitionEndEvent, enterDone);\n            } else if (type === TYPE_ANIMATION) {\n                this.setupCssCb(animationEndEvent, enterDone);\n            } else {\n                enterDone();\n            }\n        } else if (type === TYPE_TRANSITION) {\n            removeClass(this.el, this.enterClass);\n        }\n    };\n\n    /**\n     * The \"cleanup\" phase of an entering transition.\n     */\n\n    p$1.enterDone = function () {\n        this.entered = true;\n        this.cancel = this.pendingJsCb = null;\n        removeClass(this.el, this.enterClass);\n        this.callHook('afterEnter');\n        if (this.cb) this.cb();\n    };\n\n    /**\n     * Start a leaving transition.\n     *\n     * 1. leave transition triggered.\n     * 2. call beforeLeave hook\n     * 3. add leave class (trigger css transition)\n     * 4. call leave hook (with possible explicit js callback)\n     * 5. reflow if no explicit js callback is provided\n     * 6. based on transition type:\n     *    - transition or animation:\n     *        wait for end event, remove class, then done if\n     *        there's no explicit js callback.\n     *    - no css transition:\n     *        done if there's no explicit js callback.\n     * 7. wait for either done or js callback, then call\n     *    afterLeave hook.\n     *\n     * @param {Function} op - remove/hide the element\n     * @param {Function} [cb]\n     */\n\n    p$1.leave = function (op, cb) {\n        this.cancelPending();\n        this.callHook('beforeLeave');\n        this.op = op;\n        this.cb = cb;\n        addClass(this.el, this.leaveClass);\n        this.left = false;\n        this.callHookWithCb('leave');\n        if (this.left) {\n            return; // user called done synchronously.\n        }\n        this.cancel = this.hooks && this.hooks.leaveCancelled;\n        // only need to handle leaveDone if\n        // 1. the transition is already done (synchronously called\n        //    by the user, which causes this.op set to null)\n        // 2. there's no explicit js callback\n        if (this.op && !this.pendingJsCb) {\n            // if a CSS transition leaves immediately after enter,\n            // the transitionend event never fires. therefore we\n            // detect such cases and end the leave immediately.\n            if (this.justEntered) {\n                this.leaveDone();\n            } else {\n                pushJob(this.leaveNextTick);\n            }\n        }\n    };\n\n    /**\n     * The \"nextTick\" phase of a leaving transition.\n     */\n\n    p$1.leaveNextTick = function () {\n        var type = this.getCssTransitionType(this.leaveClass);\n        if (type) {\n            var event = type === TYPE_TRANSITION ? transitionEndEvent : animationEndEvent;\n            this.setupCssCb(event, this.leaveDone);\n        } else {\n            this.leaveDone();\n        }\n    };\n\n    /**\n     * The \"cleanup\" phase of a leaving transition.\n     */\n\n    p$1.leaveDone = function () {\n        this.left = true;\n        this.cancel = this.pendingJsCb = null;\n        this.op();\n        removeClass(this.el, this.leaveClass);\n        this.callHook('afterLeave');\n        if (this.cb) this.cb();\n        this.op = null;\n    };\n\n    /**\n     * Cancel any pending callbacks from a previously running\n     * but not finished transition.\n     */\n\n    p$1.cancelPending = function () {\n        this.op = this.cb = null;\n        var hasPending = false;\n        if (this.pendingCssCb) {\n            hasPending = true;\n            off(this.el, this.pendingCssEvent, this.pendingCssCb);\n            this.pendingCssEvent = this.pendingCssCb = null;\n        }\n        if (this.pendingJsCb) {\n            hasPending = true;\n            this.pendingJsCb.cancel();\n            this.pendingJsCb = null;\n        }\n        if (hasPending) {\n            removeClass(this.el, this.enterClass);\n            removeClass(this.el, this.leaveClass);\n        }\n        if (this.cancel) {\n            this.cancel.call(this.vm, this.el);\n            this.cancel = null;\n        }\n    };\n\n    /**\n     * Call a user-provided synchronous hook function.\n     *\n     * @param {String} type\n     */\n\n    p$1.callHook = function (type) {\n        if (this.hooks && this.hooks[type]) {\n            this.hooks[type].call(this.vm, this.el);\n        }\n    };\n\n    /**\n     * Call a user-provided, potentially-async hook function.\n     * We check for the length of arguments to see if the hook\n     * expects a `done` callback. If true, the transition's end\n     * will be determined by when the user calls that callback;\n     * otherwise, the end is determined by the CSS transition or\n     * animation.\n     *\n     * @param {String} type\n     */\n\n    p$1.callHookWithCb = function (type) {\n        var hook = this.hooks && this.hooks[type];\n        if (hook) {\n            if (hook.length > 1) {\n                this.pendingJsCb = cancellable(this[type + 'Done']);\n            }\n            hook.call(this.vm, this.el, this.pendingJsCb);\n        }\n    };\n\n    /**\n     * Get an element's transition type based on the\n     * calculated styles.\n     *\n     * @param {String} className\n     * @return {Number}\n     */\n\n    p$1.getCssTransitionType = function (className) {\n        /* istanbul ignore if */\n        if (!transitionEndEvent ||\n            // skip CSS transitions if page is not visible -\n            // this solves the issue of transitionend events not\n            // firing until the page is visible again.\n            // pageVisibility API is supported in IE10+, same as\n            // CSS transitions.\n            document.hidden ||\n            // explicit js-only transition\n            this.hooks && this.hooks.css === false ||\n            // element is hidden\n            isHidden(this.el)) {\n            return;\n        }\n        var type = this.type || this.typeCache[className];\n        if (type) return type;\n        var inlineStyles = this.el.style;\n        var computedStyles = window.getComputedStyle(this.el);\n        var transDuration = inlineStyles[transDurationProp] || computedStyles[transDurationProp];\n        if (transDuration && transDuration !== '0s') {\n            type = TYPE_TRANSITION;\n        } else {\n            var animDuration = inlineStyles[animDurationProp] || computedStyles[animDurationProp];\n            if (animDuration && animDuration !== '0s') {\n                type = TYPE_ANIMATION;\n            }\n        }\n        if (type) {\n            this.typeCache[className] = type;\n        }\n        return type;\n    };\n\n    /**\n     * Setup a CSS transitionend/animationend callback.\n     *\n     * @param {String} event\n     * @param {Function} cb\n     */\n\n    p$1.setupCssCb = function (event, cb) {\n        this.pendingCssEvent = event;\n        var self = this;\n        var el = this.el;\n        var onEnd = this.pendingCssCb = function (e) {\n            if (e.target === el) {\n                off(el, event, onEnd);\n                self.pendingCssEvent = self.pendingCssCb = null;\n                if (!self.pendingJsCb && cb) {\n                    cb();\n                }\n            }\n        };\n        on(el, event, onEnd);\n    };\n\n    /**\n     * Check if an element is hidden - in that case we can just\n     * skip the transition alltogether.\n     *\n     * @param {Element} el\n     * @return {Boolean}\n     */\n\n    function isHidden(el) {\n        if (/svg$/.test(el.namespaceURI)) {\n            // SVG elements do not have offset(Width|Height)\n            // so we need to check the client rect\n            var rect = el.getBoundingClientRect();\n            return !(rect.width || rect.height);\n        } else {\n            return !(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n        }\n    }\n\n    var transition$1 = {\n\n        priority: TRANSITION,\n\n        update: function update(id, oldId) {\n            var el = this.el;\n            // resolve on owner vm\n            var hooks = resolveAsset(this.vm.$options, 'transitions', id);\n            id = id || 'v';\n            el.__v_trans = new Transition(el, id, hooks, this.vm);\n            if (oldId) {\n                removeClass(el, oldId + '-transition');\n            }\n            addClass(el, id + '-transition');\n        }\n    };\n\n    var internalDirectives = {\n        style: style,\n        'class': vClass,\n        component: component,\n        prop: propDef,\n        transition: transition$1\n    };\n\n    // special binding prefixes\n    var bindRE = /^v-bind:|^:/;\n    var onRE = /^v-on:|^@/;\n    var dirAttrRE = /^v-([^:]+)(?:$|:(.*)$)/;\n    var modifierRE = /\\.[^\\.]+/g;\n    var transitionRE = /^(v-bind:|:)?transition$/;\n\n    // default directive priority\n    var DEFAULT_PRIORITY = 1000;\n    var DEFAULT_TERMINAL_PRIORITY = 2000;\n\n    /**\n     * Compile a template and return a reusable composite link\n     * function, which recursively contains more link functions\n     * inside. This top level compile function would normally\n     * be called on instance root nodes, but can also be used\n     * for partial compilation if the partial argument is true.\n     *\n     * The returned composite link function, when called, will\n     * return an unlink function that tearsdown all directives\n     * created during the linking phase.\n     *\n     * @param {Element|DocumentFragment} el\n     * @param {Object} options\n     * @param {Boolean} partial\n     * @return {Function}\n     */\n\n    function compile(el, options, partial) {\n        // link function for the node itself.\n        var nodeLinkFn = partial || !options._asComponent ? compileNode(el, options) : null;\n        // link function for the childNodes\n        var childLinkFn = !(nodeLinkFn && nodeLinkFn.terminal) && !isScript(el) && el.hasChildNodes() ? compileNodeList(el.childNodes, options) : null;\n\n        /**\n         * A composite linker function to be called on a already\n         * compiled piece of DOM, which instantiates all directive\n         * instances.\n         *\n         * @param {Vue} vm\n         * @param {Element|DocumentFragment} el\n         * @param {Vue} [host] - host vm of transcluded content\n         * @param {Object} [scope] - v-for scope\n         * @param {Fragment} [frag] - link context fragment\n         * @return {Function|undefined}\n         */\n\n        return function compositeLinkFn(vm, el, host, scope, frag) {\n            // cache childNodes before linking parent, fix #657\n            var childNodes = toArray(el.childNodes);\n            // link\n            var dirs = linkAndCapture(function compositeLinkCapturer() {\n                if (nodeLinkFn) nodeLinkFn(vm, el, host, scope, frag);\n                if (childLinkFn) childLinkFn(vm, childNodes, host, scope, frag);\n            }, vm);\n            return makeUnlinkFn(vm, dirs);\n        };\n    }\n\n    /**\n     * Apply a linker to a vm/element pair and capture the\n     * directives created during the process.\n     *\n     * @param {Function} linker\n     * @param {Vue} vm\n     */\n\n    function linkAndCapture(linker, vm) {\n        /* istanbul ignore if */\n        if ('development' === 'production') {}\n        var originalDirCount = vm._directives.length;\n        linker();\n        var dirs = vm._directives.slice(originalDirCount);\n        dirs.sort(directiveComparator);\n        for (var i = 0, l = dirs.length; i < l; i++) {\n            dirs[i]._bind();\n        }\n        return dirs;\n    }\n\n    /**\n     * Directive priority sort comparator\n     *\n     * @param {Object} a\n     * @param {Object} b\n     */\n\n    function directiveComparator(a, b) {\n        a = a.descriptor.def.priority || DEFAULT_PRIORITY;\n        b = b.descriptor.def.priority || DEFAULT_PRIORITY;\n        return a > b ? -1 : a === b ? 0 : 1;\n    }\n\n    /**\n     * Linker functions return an unlink function that\n     * tearsdown all directives instances generated during\n     * the process.\n     *\n     * We create unlink functions with only the necessary\n     * information to avoid retaining additional closures.\n     *\n     * @param {Vue} vm\n     * @param {Array} dirs\n     * @param {Vue} [context]\n     * @param {Array} [contextDirs]\n     * @return {Function}\n     */\n\n    function makeUnlinkFn(vm, dirs, context, contextDirs) {\n        function unlink(destroying) {\n            teardownDirs(vm, dirs, destroying);\n            if (context && contextDirs) {\n                teardownDirs(context, contextDirs);\n            }\n        }\n        // expose linked directives\n        unlink.dirs = dirs;\n        return unlink;\n    }\n\n    /**\n     * Teardown partial linked directives.\n     *\n     * @param {Vue} vm\n     * @param {Array} dirs\n     * @param {Boolean} destroying\n     */\n\n    function teardownDirs(vm, dirs, destroying) {\n        var i = dirs.length;\n        while (i--) {\n            dirs[i]._teardown();\n            if ('development' !== 'production' && !destroying) {\n                vm._directives.$remove(dirs[i]);\n            }\n        }\n    }\n\n    /**\n     * Compile link props on an instance.\n     *\n     * @param {Vue} vm\n     * @param {Element} el\n     * @param {Object} props\n     * @param {Object} [scope]\n     * @return {Function}\n     */\n\n    function compileAndLinkProps(vm, el, props, scope) {\n        var propsLinkFn = compileProps(el, props, vm);\n        var propDirs = linkAndCapture(function () {\n            propsLinkFn(vm, scope);\n        }, vm);\n        return makeUnlinkFn(vm, propDirs);\n    }\n\n    /**\n     * Compile the root element of an instance.\n     *\n     * 1. attrs on context container (context scope)\n     * 2. attrs on the component template root node, if\n     *    replace:true (child scope)\n     *\n     * If this is a fragment instance, we only need to compile 1.\n     *\n     * @param {Element} el\n     * @param {Object} options\n     * @param {Object} contextOptions\n     * @return {Function}\n     */\n\n    function compileRoot(el, options, contextOptions) {\n        var containerAttrs = options._containerAttrs;\n        var replacerAttrs = options._replacerAttrs;\n        var contextLinkFn, replacerLinkFn;\n\n        // only need to compile other attributes for\n        // non-fragment instances\n        if (el.nodeType !== 11) {\n            // for components, container and replacer need to be\n            // compiled separately and linked in different scopes.\n            if (options._asComponent) {\n                // 2. container attributes\n                if (containerAttrs && contextOptions) {\n                    contextLinkFn = compileDirectives(containerAttrs, contextOptions);\n                }\n                if (replacerAttrs) {\n                    // 3. replacer attributes\n                    replacerLinkFn = compileDirectives(replacerAttrs, options);\n                }\n            } else {\n                // non-component, just compile as a normal element.\n                replacerLinkFn = compileDirectives(el.attributes, options);\n            }\n        } else if ('development' !== 'production' && containerAttrs) {\n            // warn container directives for fragment instances\n            var names = containerAttrs.filter(function (attr) {\n                // allow vue-loader/vueify scoped css attributes\n                return attr.name.indexOf('_v-') < 0 &&\n                    // allow event listeners\n                    !onRE.test(attr.name) &&\n                    // allow slots\n                    attr.name !== 'slot';\n            }).map(function (attr) {\n                return '\"' + attr.name + '\"';\n            });\n            if (names.length) {\n                var plural = names.length > 1;\n                warn('Attribute' + (plural ? 's ' : ' ') + names.join(', ') + (plural ? ' are' : ' is') + ' ignored on component ' + '<' + options.el.tagName.toLowerCase() + '> because ' + 'the component is a fragment instance: ' + 'http://vuejs.org/guide/components.html#Fragment-Instance');\n            }\n        }\n\n        options._containerAttrs = options._replacerAttrs = null;\n        return function rootLinkFn(vm, el, scope) {\n            // link context scope dirs\n            var context = vm._context;\n            var contextDirs;\n            if (context && contextLinkFn) {\n                contextDirs = linkAndCapture(function () {\n                    contextLinkFn(context, el, null, scope);\n                }, context);\n            }\n\n            // link self\n            var selfDirs = linkAndCapture(function () {\n                if (replacerLinkFn) replacerLinkFn(vm, el);\n            }, vm);\n\n            // return the unlink function that tearsdown context\n            // container directives.\n            return makeUnlinkFn(vm, selfDirs, context, contextDirs);\n        };\n    }\n\n    /**\n     * Compile a node and return a nodeLinkFn based on the\n     * node type.\n     *\n     * @param {Node} node\n     * @param {Object} options\n     * @return {Function|null}\n     */\n\n    function compileNode(node, options) {\n        var type = node.nodeType;\n        if (type === 1 && !isScript(node)) {\n            return compileElement(node, options);\n        } else if (type === 3 && node.data.trim()) {\n            return compileTextNode(node, options);\n        } else {\n            return null;\n        }\n    }\n\n    /**\n     * Compile an element and return a nodeLinkFn.\n     *\n     * @param {Element} el\n     * @param {Object} options\n     * @return {Function|null}\n     */\n\n    function compileElement(el, options) {\n        // preprocess textareas.\n        // textarea treats its text content as the initial value.\n        // just bind it as an attr directive for value.\n        if (el.tagName === 'TEXTAREA') {\n            var tokens = parseText(el.value);\n            if (tokens) {\n                el.setAttribute(':value', tokensToExp(tokens));\n                el.value = '';\n            }\n        }\n        var linkFn;\n        var hasAttrs = el.hasAttributes();\n        var attrs = hasAttrs && toArray(el.attributes);\n        // check terminal directives (for & if)\n        if (hasAttrs) {\n            linkFn = checkTerminalDirectives(el, attrs, options);\n        }\n        // check element directives\n        if (!linkFn) {\n            linkFn = checkElementDirectives(el, options);\n        }\n        // check component\n        if (!linkFn) {\n            linkFn = checkComponent(el, options);\n        }\n        // normal directives\n        if (!linkFn && hasAttrs) {\n            linkFn = compileDirectives(attrs, options);\n        }\n        return linkFn;\n    }\n\n    /**\n     * Compile a textNode and return a nodeLinkFn.\n     *\n     * @param {TextNode} node\n     * @param {Object} options\n     * @return {Function|null} textNodeLinkFn\n     */\n\n    function compileTextNode(node, options) {\n        // skip marked text nodes\n        if (node._skip) {\n            return removeText;\n        }\n\n        var tokens = parseText(node.wholeText);\n        if (!tokens) {\n            return null;\n        }\n\n        // mark adjacent text nodes as skipped,\n        // because we are using node.wholeText to compile\n        // all adjacent text nodes together. This fixes\n        // issues in IE where sometimes it splits up a single\n        // text node into multiple ones.\n        var next = node.nextSibling;\n        while (next && next.nodeType === 3) {\n            next._skip = true;\n            next = next.nextSibling;\n        }\n\n        var frag = document.createDocumentFragment();\n        var el, token;\n        for (var i = 0, l = tokens.length; i < l; i++) {\n            token = tokens[i];\n            el = token.tag ? processTextToken(token, options) : document.createTextNode(token.value);\n            frag.appendChild(el);\n        }\n        return makeTextNodeLinkFn(tokens, frag, options);\n    }\n\n    /**\n     * Linker for an skipped text node.\n     *\n     * @param {Vue} vm\n     * @param {Text} node\n     */\n\n    function removeText(vm, node) {\n        remove(node);\n    }\n\n    /**\n     * Process a single text token.\n     *\n     * @param {Object} token\n     * @param {Object} options\n     * @return {Node}\n     */\n\n    function processTextToken(token, options) {\n        var el;\n        if (token.oneTime) {\n            el = document.createTextNode(token.value);\n        } else {\n            if (token.html) {\n                el = document.createComment('v-html');\n                setTokenType('html');\n            } else {\n                // IE will clean up empty textNodes during\n                // frag.cloneNode(true), so we have to give it\n                // something here...\n                el = document.createTextNode(' ');\n                setTokenType('text');\n            }\n        }\n        function setTokenType(type) {\n            if (token.descriptor) return;\n            var parsed = parseDirective(token.value);\n            token.descriptor = {\n                name: type,\n                def: directives[type],\n                expression: parsed.expression,\n                filters: parsed.filters\n            };\n        }\n        return el;\n    }\n\n    /**\n     * Build a function that processes a textNode.\n     *\n     * @param {Array<Object>} tokens\n     * @param {DocumentFragment} frag\n     */\n\n    function makeTextNodeLinkFn(tokens, frag) {\n        return function textNodeLinkFn(vm, el, host, scope) {\n            var fragClone = frag.cloneNode(true);\n            var childNodes = toArray(fragClone.childNodes);\n            var token, value, node;\n            for (var i = 0, l = tokens.length; i < l; i++) {\n                token = tokens[i];\n                value = token.value;\n                if (token.tag) {\n                    node = childNodes[i];\n                    if (token.oneTime) {\n                        value = (scope || vm).$eval(value);\n                        if (token.html) {\n                            replace(node, parseTemplate(value, true));\n                        } else {\n                            node.data = value;\n                        }\n                    } else {\n                        vm._bindDir(token.descriptor, node, host, scope);\n                    }\n                }\n            }\n            replace(el, fragClone);\n        };\n    }\n\n    /**\n     * Compile a node list and return a childLinkFn.\n     *\n     * @param {NodeList} nodeList\n     * @param {Object} options\n     * @return {Function|undefined}\n     */\n\n    function compileNodeList(nodeList, options) {\n        var linkFns = [];\n        var nodeLinkFn, childLinkFn, node;\n        for (var i = 0, l = nodeList.length; i < l; i++) {\n            node = nodeList[i];\n            nodeLinkFn = compileNode(node, options);\n            childLinkFn = !(nodeLinkFn && nodeLinkFn.terminal) && node.tagName !== 'SCRIPT' && node.hasChildNodes() ? compileNodeList(node.childNodes, options) : null;\n            linkFns.push(nodeLinkFn, childLinkFn);\n        }\n        return linkFns.length ? makeChildLinkFn(linkFns) : null;\n    }\n\n    /**\n     * Make a child link function for a node's childNodes.\n     *\n     * @param {Array<Function>} linkFns\n     * @return {Function} childLinkFn\n     */\n\n    function makeChildLinkFn(linkFns) {\n        return function childLinkFn(vm, nodes, host, scope, frag) {\n            var node, nodeLinkFn, childrenLinkFn;\n            for (var i = 0, n = 0, l = linkFns.length; i < l; n++) {\n                node = nodes[n];\n                nodeLinkFn = linkFns[i++];\n                childrenLinkFn = linkFns[i++];\n                // cache childNodes before linking parent, fix #657\n                var childNodes = toArray(node.childNodes);\n                if (nodeLinkFn) {\n                    nodeLinkFn(vm, node, host, scope, frag);\n                }\n                if (childrenLinkFn) {\n                    childrenLinkFn(vm, childNodes, host, scope, frag);\n                }\n            }\n        };\n    }\n\n    /**\n     * Check for element directives (custom elements that should\n     * be resovled as terminal directives).\n     *\n     * @param {Element} el\n     * @param {Object} options\n     */\n\n    function checkElementDirectives(el, options) {\n        var tag = el.tagName.toLowerCase();\n        if (commonTagRE.test(tag)) {\n            return;\n        }\n        var def = resolveAsset(options, 'elementDirectives', tag);\n        if (def) {\n            return makeTerminalNodeLinkFn(el, tag, '', options, def);\n        }\n    }\n\n    /**\n     * Check if an element is a component. If yes, return\n     * a component link function.\n     *\n     * @param {Element} el\n     * @param {Object} options\n     * @return {Function|undefined}\n     */\n\n    function checkComponent(el, options) {\n        var component = checkComponentAttr(el, options);\n        if (component) {\n            var ref = findRef(el);\n            var descriptor = {\n                name: 'component',\n                ref: ref,\n                expression: component.id,\n                def: internalDirectives.component,\n                modifiers: {\n                    literal: !component.dynamic\n                }\n            };\n            var componentLinkFn = function componentLinkFn(vm, el, host, scope, frag) {\n                if (ref) {\n                    defineReactive((scope || vm).$refs, ref, null);\n                }\n                vm._bindDir(descriptor, el, host, scope, frag);\n            };\n            componentLinkFn.terminal = true;\n            return componentLinkFn;\n        }\n    }\n\n    /**\n     * Check an element for terminal directives in fixed order.\n     * If it finds one, return a terminal link function.\n     *\n     * @param {Element} el\n     * @param {Array} attrs\n     * @param {Object} options\n     * @return {Function} terminalLinkFn\n     */\n\n    function checkTerminalDirectives(el, attrs, options) {\n        // skip v-pre\n        if (getAttr(el, 'v-pre') !== null) {\n            return skip;\n        }\n        // skip v-else block, but only if following v-if\n        if (el.hasAttribute('v-else')) {\n            var prev = el.previousElementSibling;\n            if (prev && prev.hasAttribute('v-if')) {\n                return skip;\n            }\n        }\n\n        var attr, name, value, modifiers, matched, dirName, rawName, arg, def, termDef;\n        for (var i = 0, j = attrs.length; i < j; i++) {\n            attr = attrs[i];\n            name = attr.name.replace(modifierRE, '');\n            if (matched = name.match(dirAttrRE)) {\n                def = resolveAsset(options, 'directives', matched[1]);\n                if (def && def.terminal) {\n                    if (!termDef || (def.priority || DEFAULT_TERMINAL_PRIORITY) > termDef.priority) {\n                        termDef = def;\n                        rawName = attr.name;\n                        modifiers = parseModifiers(attr.name);\n                        value = attr.value;\n                        dirName = matched[1];\n                        arg = matched[2];\n                    }\n                }\n            }\n        }\n\n        if (termDef) {\n            return makeTerminalNodeLinkFn(el, dirName, value, options, termDef, rawName, arg, modifiers);\n        }\n    }\n\n    function skip() {}\n    skip.terminal = true;\n\n    /**\n     * Build a node link function for a terminal directive.\n     * A terminal link function terminates the current\n     * compilation recursion and handles compilation of the\n     * subtree in the directive.\n     *\n     * @param {Element} el\n     * @param {String} dirName\n     * @param {String} value\n     * @param {Object} options\n     * @param {Object} def\n     * @param {String} [rawName]\n     * @param {String} [arg]\n     * @param {Object} [modifiers]\n     * @return {Function} terminalLinkFn\n     */\n\n    function makeTerminalNodeLinkFn(el, dirName, value, options, def, rawName, arg, modifiers) {\n        var parsed = parseDirective(value);\n        var descriptor = {\n            name: dirName,\n            arg: arg,\n            expression: parsed.expression,\n            filters: parsed.filters,\n            raw: value,\n            attr: rawName,\n            modifiers: modifiers,\n            def: def\n        };\n        // check ref for v-for and router-view\n        if (dirName === 'for' || dirName === 'router-view') {\n            descriptor.ref = findRef(el);\n        }\n        var fn = function terminalNodeLinkFn(vm, el, host, scope, frag) {\n            if (descriptor.ref) {\n                defineReactive((scope || vm).$refs, descriptor.ref, null);\n            }\n            vm._bindDir(descriptor, el, host, scope, frag);\n        };\n        fn.terminal = true;\n        return fn;\n    }\n\n    /**\n     * Compile the directives on an element and return a linker.\n     *\n     * @param {Array|NamedNodeMap} attrs\n     * @param {Object} options\n     * @return {Function}\n     */\n\n    function compileDirectives(attrs, options) {\n        var i = attrs.length;\n        var dirs = [];\n        var attr, name, value, rawName, rawValue, dirName, arg, modifiers, dirDef, tokens, matched;\n        while (i--) {\n            attr = attrs[i];\n            name = rawName = attr.name;\n            value = rawValue = attr.value;\n            tokens = parseText(value);\n            // reset arg\n            arg = null;\n            // check modifiers\n            modifiers = parseModifiers(name);\n            name = name.replace(modifierRE, '');\n\n            // attribute interpolations\n            if (tokens) {\n                value = tokensToExp(tokens);\n                arg = name;\n                pushDir('bind', directives.bind, tokens);\n                // warn against mixing mustaches with v-bind\n                if ('development' !== 'production') {\n                    if (name === 'class' && Array.prototype.some.call(attrs, function (attr) {\n                            return attr.name === ':class' || attr.name === 'v-bind:class';\n                        })) {\n                        warn('class=\"' + rawValue + '\": Do not mix mustache interpolation ' + 'and v-bind for \"class\" on the same element. Use one or the other.', options);\n                    }\n                }\n            } else\n\n            // special attribute: transition\n            if (transitionRE.test(name)) {\n                modifiers.literal = !bindRE.test(name);\n                pushDir('transition', internalDirectives.transition);\n            } else\n\n            // event handlers\n            if (onRE.test(name)) {\n                arg = name.replace(onRE, '');\n                pushDir('on', directives.on);\n            } else\n\n            // attribute bindings\n            if (bindRE.test(name)) {\n                dirName = name.replace(bindRE, '');\n                if (dirName === 'style' || dirName === 'class') {\n                    pushDir(dirName, internalDirectives[dirName]);\n                } else {\n                    arg = dirName;\n                    pushDir('bind', directives.bind);\n                }\n            } else\n\n            // normal directives\n            if (matched = name.match(dirAttrRE)) {\n                dirName = matched[1];\n                arg = matched[2];\n\n                // skip v-else (when used with v-show)\n                if (dirName === 'else') {\n                    continue;\n                }\n\n                dirDef = resolveAsset(options, 'directives', dirName, true);\n                if (dirDef) {\n                    pushDir(dirName, dirDef);\n                }\n            }\n        }\n\n        /**\n         * Push a directive.\n         *\n         * @param {String} dirName\n         * @param {Object|Function} def\n         * @param {Array} [interpTokens]\n         */\n\n        function pushDir(dirName, def, interpTokens) {\n            var hasOneTimeToken = interpTokens && hasOneTime(interpTokens);\n            var parsed = !hasOneTimeToken && parseDirective(value);\n            dirs.push({\n                name: dirName,\n                attr: rawName,\n                raw: rawValue,\n                def: def,\n                arg: arg,\n                modifiers: modifiers,\n                // conversion from interpolation strings with one-time token\n                // to expression is differed until directive bind time so that we\n                // have access to the actual vm context for one-time bindings.\n                expression: parsed && parsed.expression,\n                filters: parsed && parsed.filters,\n                interp: interpTokens,\n                hasOneTime: hasOneTimeToken\n            });\n        }\n\n        if (dirs.length) {\n            return makeNodeLinkFn(dirs);\n        }\n    }\n\n    /**\n     * Parse modifiers from directive attribute name.\n     *\n     * @param {String} name\n     * @return {Object}\n     */\n\n    function parseModifiers(name) {\n        var res = Object.create(null);\n        var match = name.match(modifierRE);\n        if (match) {\n            var i = match.length;\n            while (i--) {\n                res[match[i].slice(1)] = true;\n            }\n        }\n        return res;\n    }\n\n    /**\n     * Build a link function for all directives on a single node.\n     *\n     * @param {Array} directives\n     * @return {Function} directivesLinkFn\n     */\n\n    function makeNodeLinkFn(directives) {\n        return function nodeLinkFn(vm, el, host, scope, frag) {\n            // reverse apply because it's sorted low to high\n            var i = directives.length;\n            while (i--) {\n                vm._bindDir(directives[i], el, host, scope, frag);\n            }\n        };\n    }\n\n    /**\n     * Check if an interpolation string contains one-time tokens.\n     *\n     * @param {Array} tokens\n     * @return {Boolean}\n     */\n\n    function hasOneTime(tokens) {\n        var i = tokens.length;\n        while (i--) {\n            if (tokens[i].oneTime) return true;\n        }\n    }\n\n    function isScript(el) {\n        return el.tagName === 'SCRIPT' && (!el.hasAttribute('type') || el.getAttribute('type') === 'text/javascript');\n    }\n\n    var specialCharRE = /[^\\w\\-:\\.]/;\n\n    /**\n     * Process an element or a DocumentFragment based on a\n     * instance option object. This allows us to transclude\n     * a template node/fragment before the instance is created,\n     * so the processed fragment can then be cloned and reused\n     * in v-for.\n     *\n     * @param {Element} el\n     * @param {Object} options\n     * @return {Element|DocumentFragment}\n     */\n\n    function transclude(el, options) {\n        // extract container attributes to pass them down\n        // to compiler, because they need to be compiled in\n        // parent scope. we are mutating the options object here\n        // assuming the same object will be used for compile\n        // right after this.\n        if (options) {\n            options._containerAttrs = extractAttrs(el);\n        }\n        // for template tags, what we want is its content as\n        // a documentFragment (for fragment instances)\n        if (isTemplate(el)) {\n            el = parseTemplate(el);\n        }\n        if (options) {\n            if (options._asComponent && !options.template) {\n                options.template = '<slot></slot>';\n            }\n            if (options.template) {\n                options._content = extractContent(el);\n                el = transcludeTemplate(el, options);\n            }\n        }\n        if (isFragment(el)) {\n            // anchors for fragment instance\n            // passing in `persist: true` to avoid them being\n            // discarded by IE during template cloning\n            prepend(createAnchor('v-start', true), el);\n            el.appendChild(createAnchor('v-end', true));\n        }\n        return el;\n    }\n\n    /**\n     * Process the template option.\n     * If the replace option is true this will swap the $el.\n     *\n     * @param {Element} el\n     * @param {Object} options\n     * @return {Element|DocumentFragment}\n     */\n\n    function transcludeTemplate(el, options) {\n        var template = options.template;\n        var frag = parseTemplate(template, true);\n        if (frag) {\n            var replacer = frag.firstChild;\n            var tag = replacer.tagName && replacer.tagName.toLowerCase();\n            if (options.replace) {\n                /* istanbul ignore if */\n                if (el === document.body) {\n                    'development' !== 'production' && warn('You are mounting an instance with a template to ' + '<body>. This will replace <body> entirely. You ' + 'should probably use `replace: false` here.');\n                }\n                // there are many cases where the instance must\n                // become a fragment instance: basically anything that\n                // can create more than 1 root nodes.\n                if (\n                    // multi-children template\n                frag.childNodes.length > 1 ||\n                // non-element template\n                replacer.nodeType !== 1 ||\n                // single nested component\n                tag === 'component' || resolveAsset(options, 'components', tag) || hasBindAttr(replacer, 'is') ||\n                // element directive\n                resolveAsset(options, 'elementDirectives', tag) ||\n                // for block\n                replacer.hasAttribute('v-for') ||\n                // if block\n                replacer.hasAttribute('v-if')) {\n                    return frag;\n                } else {\n                    options._replacerAttrs = extractAttrs(replacer);\n                    mergeAttrs(el, replacer);\n                    return replacer;\n                }\n            } else {\n                el.appendChild(frag);\n                return el;\n            }\n        } else {\n            'development' !== 'production' && warn('Invalid template option: ' + template);\n        }\n    }\n\n    /**\n     * Helper to extract a component container's attributes\n     * into a plain object array.\n     *\n     * @param {Element} el\n     * @return {Array}\n     */\n\n    function extractAttrs(el) {\n        if (el.nodeType === 1 && el.hasAttributes()) {\n            return toArray(el.attributes);\n        }\n    }\n\n    /**\n     * Merge the attributes of two elements, and make sure\n     * the class names are merged properly.\n     *\n     * @param {Element} from\n     * @param {Element} to\n     */\n\n    function mergeAttrs(from, to) {\n        var attrs = from.attributes;\n        var i = attrs.length;\n        var name, value;\n        while (i--) {\n            name = attrs[i].name;\n            value = attrs[i].value;\n            if (!to.hasAttribute(name) && !specialCharRE.test(name)) {\n                to.setAttribute(name, value);\n            } else if (name === 'class' && !parseText(value) && (value = value.trim())) {\n                value.split(/\\s+/).forEach(function (cls) {\n                    addClass(to, cls);\n                });\n            }\n        }\n    }\n\n    /**\n     * Scan and determine slot content distribution.\n     * We do this during transclusion instead at compile time so that\n     * the distribution is decoupled from the compilation order of\n     * the slots.\n     *\n     * @param {Element|DocumentFragment} template\n     * @param {Element} content\n     * @param {Vue} vm\n     */\n\n    function resolveSlots(vm, content) {\n        if (!content) {\n            return;\n        }\n        var contents = vm._slotContents = Object.create(null);\n        var el, name;\n        for (var i = 0, l = content.children.length; i < l; i++) {\n            el = content.children[i];\n            /* eslint-disable no-cond-assign */\n            if (name = el.getAttribute('slot')) {\n                (contents[name] || (contents[name] = [])).push(el);\n            }\n            /* eslint-enable no-cond-assign */\n            if ('development' !== 'production' && getBindAttr(el, 'slot')) {\n                warn('The \"slot\" attribute must be static.', vm.$parent);\n            }\n        }\n        for (name in contents) {\n            contents[name] = extractFragment(contents[name], content);\n        }\n        if (content.hasChildNodes()) {\n            var nodes = content.childNodes;\n            if (nodes.length === 1 && nodes[0].nodeType === 3 && !nodes[0].data.trim()) {\n                return;\n            }\n            contents['default'] = extractFragment(content.childNodes, content);\n        }\n    }\n\n    /**\n     * Extract qualified content nodes from a node list.\n     *\n     * @param {NodeList} nodes\n     * @return {DocumentFragment}\n     */\n\n    function extractFragment(nodes, parent) {\n        var frag = document.createDocumentFragment();\n        nodes = toArray(nodes);\n        for (var i = 0, l = nodes.length; i < l; i++) {\n            var node = nodes[i];\n            if (isTemplate(node) && !node.hasAttribute('v-if') && !node.hasAttribute('v-for')) {\n                parent.removeChild(node);\n                node = parseTemplate(node, true);\n            }\n            frag.appendChild(node);\n        }\n        return frag;\n    }\n\n\n\n    var compiler = Object.freeze({\n        compile: compile,\n        compileAndLinkProps: compileAndLinkProps,\n        compileRoot: compileRoot,\n        transclude: transclude,\n        resolveSlots: resolveSlots\n    });\n\n    function stateMixin (Vue) {\n        /**\n         * Accessor for `$data` property, since setting $data\n         * requires observing the new object and updating\n         * proxied properties.\n         */\n\n        Object.defineProperty(Vue.prototype, '$data', {\n            get: function get() {\n                return this._data;\n            },\n            set: function set(newData) {\n                if (newData !== this._data) {\n                    this._setData(newData);\n                }\n            }\n        });\n\n        /**\n         * Setup the scope of an instance, which contains:\n         * - observed data\n         * - computed properties\n         * - user methods\n         * - meta properties\n         */\n\n        Vue.prototype._initState = function () {\n            this._initProps();\n            this._initMeta();\n            this._initMethods();\n            this._initData();\n            this._initComputed();\n        };\n\n        /**\n         * Initialize props.\n         */\n\n        Vue.prototype._initProps = function () {\n            var options = this.$options;\n            var el = options.el;\n            var props = options.props;\n            if (props && !el) {\n                'development' !== 'production' && warn('Props will not be compiled if no `el` option is ' + 'provided at instantiation.', this);\n            }\n            // make sure to convert string selectors into element now\n            el = options.el = query(el);\n            this._propsUnlinkFn = el && el.nodeType === 1 && props\n                // props must be linked in proper scope if inside v-for\n                ? compileAndLinkProps(this, el, props, this._scope) : null;\n        };\n\n        /**\n         * Initialize the data.\n         */\n\n        Vue.prototype._initData = function () {\n            var dataFn = this.$options.data;\n            var data = this._data = dataFn ? dataFn() : {};\n            if (!isPlainObject(data)) {\n                data = {};\n                'development' !== 'production' && warn('data functions should return an object.', this);\n            }\n            var props = this._props;\n            // proxy data on instance\n            var keys = Object.keys(data);\n            var i, key;\n            i = keys.length;\n            while (i--) {\n                key = keys[i];\n                // there are two scenarios where we can proxy a data key:\n                // 1. it's not already defined as a prop\n                // 2. it's provided via a instantiation option AND there are no\n                //    template prop present\n                if (!props || !hasOwn(props, key)) {\n                    this._proxy(key);\n                } else if ('development' !== 'production') {\n                    warn('Data field \"' + key + '\" is already defined ' + 'as a prop. To provide default value for a prop, use the \"default\" ' + 'prop option; if you want to pass prop values to an instantiation ' + 'call, use the \"propsData\" option.', this);\n                }\n            }\n            // observe data\n            observe(data, this);\n        };\n\n        /**\n         * Swap the instance's $data. Called in $data's setter.\n         *\n         * @param {Object} newData\n         */\n\n        Vue.prototype._setData = function (newData) {\n            newData = newData || {};\n            var oldData = this._data;\n            this._data = newData;\n            var keys, key, i;\n            // unproxy keys not present in new data\n            keys = Object.keys(oldData);\n            i = keys.length;\n            while (i--) {\n                key = keys[i];\n                if (!(key in newData)) {\n                    this._unproxy(key);\n                }\n            }\n            // proxy keys not already proxied,\n            // and trigger change for changed values\n            keys = Object.keys(newData);\n            i = keys.length;\n            while (i--) {\n                key = keys[i];\n                if (!hasOwn(this, key)) {\n                    // new property\n                    this._proxy(key);\n                }\n            }\n            oldData.__ob__.removeVm(this);\n            observe(newData, this);\n            this._digest();\n        };\n\n        /**\n         * Proxy a property, so that\n         * vm.prop === vm._data.prop\n         *\n         * @param {String} key\n         */\n\n        Vue.prototype._proxy = function (key) {\n            if (!isReserved(key)) {\n                // need to store ref to self here\n                // because these getter/setters might\n                // be called by child scopes via\n                // prototype inheritance.\n                var self = this;\n                Object.defineProperty(self, key, {\n                    configurable: true,\n                    enumerable: true,\n                    get: function proxyGetter() {\n                        return self._data[key];\n                    },\n                    set: function proxySetter(val) {\n                        self._data[key] = val;\n                    }\n                });\n            }\n        };\n\n        /**\n         * Unproxy a property.\n         *\n         * @param {String} key\n         */\n\n        Vue.prototype._unproxy = function (key) {\n            if (!isReserved(key)) {\n                delete this[key];\n            }\n        };\n\n        /**\n         * Force update on every watcher in scope.\n         */\n\n        Vue.prototype._digest = function () {\n            for (var i = 0, l = this._watchers.length; i < l; i++) {\n                this._watchers[i].update(true); // shallow updates\n            }\n        };\n\n        /**\n         * Setup computed properties. They are essentially\n         * special getter/setters\n         */\n\n        function noop() {}\n        Vue.prototype._initComputed = function () {\n            var computed = this.$options.computed;\n            if (computed) {\n                for (var key in computed) {\n                    var userDef = computed[key];\n                    var def = {\n                        enumerable: true,\n                        configurable: true\n                    };\n                    if (typeof userDef === 'function') {\n                        def.get = makeComputedGetter(userDef, this);\n                        def.set = noop;\n                    } else {\n                        def.get = userDef.get ? userDef.cache !== false ? makeComputedGetter(userDef.get, this) : bind(userDef.get, this) : noop;\n                        def.set = userDef.set ? bind(userDef.set, this) : noop;\n                    }\n                    Object.defineProperty(this, key, def);\n                }\n            }\n        };\n\n        function makeComputedGetter(getter, owner) {\n            var watcher = new Watcher(owner, getter, null, {\n                lazy: true\n            });\n            return function computedGetter() {\n                if (watcher.dirty) {\n                    watcher.evaluate();\n                }\n                if (Dep.target) {\n                    watcher.depend();\n                }\n                return watcher.value;\n            };\n        }\n\n        /**\n         * Setup instance methods. Methods must be bound to the\n         * instance since they might be passed down as a prop to\n         * child components.\n         */\n\n        Vue.prototype._initMethods = function () {\n            var methods = this.$options.methods;\n            if (methods) {\n                for (var key in methods) {\n                    this[key] = bind(methods[key], this);\n                }\n            }\n        };\n\n        /**\n         * Initialize meta information like $index, $key & $value.\n         */\n\n        Vue.prototype._initMeta = function () {\n            var metas = this.$options._meta;\n            if (metas) {\n                for (var key in metas) {\n                    defineReactive(this, key, metas[key]);\n                }\n            }\n        };\n    }\n\n    var eventRE = /^v-on:|^@/;\n\n    function eventsMixin (Vue) {\n        /**\n         * Setup the instance's option events & watchers.\n         * If the value is a string, we pull it from the\n         * instance's methods by name.\n         */\n\n        Vue.prototype._initEvents = function () {\n            var options = this.$options;\n            if (options._asComponent) {\n                registerComponentEvents(this, options.el);\n            }\n            registerCallbacks(this, '$on', options.events);\n            registerCallbacks(this, '$watch', options.watch);\n        };\n\n        /**\n         * Register v-on events on a child component\n         *\n         * @param {Vue} vm\n         * @param {Element} el\n         */\n\n        function registerComponentEvents(vm, el) {\n            var attrs = el.attributes;\n            var name, value, handler;\n            for (var i = 0, l = attrs.length; i < l; i++) {\n                name = attrs[i].name;\n                if (eventRE.test(name)) {\n                    name = name.replace(eventRE, '');\n                    // force the expression into a statement so that\n                    // it always dynamically resolves the method to call (#2670)\n                    // kinda ugly hack, but does the job.\n                    value = attrs[i].value;\n                    if (isSimplePath(value)) {\n                        value += '.apply(this, $arguments)';\n                    }\n                    handler = (vm._scope || vm._context).$eval(value, true);\n                    handler._fromParent = true;\n                    vm.$on(name.replace(eventRE), handler);\n                }\n            }\n        }\n\n        /**\n         * Register callbacks for option events and watchers.\n         *\n         * @param {Vue} vm\n         * @param {String} action\n         * @param {Object} hash\n         */\n\n        function registerCallbacks(vm, action, hash) {\n            if (!hash) return;\n            var handlers, key, i, j;\n            for (key in hash) {\n                handlers = hash[key];\n                if (isArray(handlers)) {\n                    for (i = 0, j = handlers.length; i < j; i++) {\n                        register(vm, action, key, handlers[i]);\n                    }\n                } else {\n                    register(vm, action, key, handlers);\n                }\n            }\n        }\n\n        /**\n         * Helper to register an event/watch callback.\n         *\n         * @param {Vue} vm\n         * @param {String} action\n         * @param {String} key\n         * @param {Function|String|Object} handler\n         * @param {Object} [options]\n         */\n\n        function register(vm, action, key, handler, options) {\n            var type = typeof handler;\n            if (type === 'function') {\n                vm[action](key, handler, options);\n            } else if (type === 'string') {\n                var methods = vm.$options.methods;\n                var method = methods && methods[handler];\n                if (method) {\n                    vm[action](key, method, options);\n                } else {\n                    'development' !== 'production' && warn('Unknown method: \"' + handler + '\" when ' + 'registering callback for ' + action + ': \"' + key + '\".', vm);\n                }\n            } else if (handler && type === 'object') {\n                register(vm, action, key, handler.handler, handler);\n            }\n        }\n\n        /**\n         * Setup recursive attached/detached calls\n         */\n\n        Vue.prototype._initDOMHooks = function () {\n            this.$on('hook:attached', onAttached);\n            this.$on('hook:detached', onDetached);\n        };\n\n        /**\n         * Callback to recursively call attached hook on children\n         */\n\n        function onAttached() {\n            if (!this._isAttached) {\n                this._isAttached = true;\n                this.$children.forEach(callAttach);\n            }\n        }\n\n        /**\n         * Iterator to call attached hook\n         *\n         * @param {Vue} child\n         */\n\n        function callAttach(child) {\n            if (!child._isAttached && inDoc(child.$el)) {\n                child._callHook('attached');\n            }\n        }\n\n        /**\n         * Callback to recursively call detached hook on children\n         */\n\n        function onDetached() {\n            if (this._isAttached) {\n                this._isAttached = false;\n                this.$children.forEach(callDetach);\n            }\n        }\n\n        /**\n         * Iterator to call detached hook\n         *\n         * @param {Vue} child\n         */\n\n        function callDetach(child) {\n            if (child._isAttached && !inDoc(child.$el)) {\n                child._callHook('detached');\n            }\n        }\n\n        /**\n         * Trigger all handlers for a hook\n         *\n         * @param {String} hook\n         */\n\n        Vue.prototype._callHook = function (hook) {\n            this.$emit('pre-hook:' + hook);\n            var handlers = this.$options[hook];\n            if (handlers) {\n                for (var i = 0, j = handlers.length; i < j; i++) {\n                    handlers[i].call(this);\n                }\n            }\n            this.$emit('hook:' + hook);\n        };\n    }\n\n    function noop() {}\n\n    /**\n     * A directive links a DOM element with a piece of data,\n     * which is the result of evaluating an expression.\n     * It registers a watcher with the expression and calls\n     * the DOM update function when a change is triggered.\n     *\n     * @param {Object} descriptor\n     *                 - {String} name\n     *                 - {Object} def\n     *                 - {String} expression\n     *                 - {Array<Object>} [filters]\n     *                 - {Object} [modifiers]\n     *                 - {Boolean} literal\n     *                 - {String} attr\n     *                 - {String} arg\n     *                 - {String} raw\n     *                 - {String} [ref]\n     *                 - {Array<Object>} [interp]\n     *                 - {Boolean} [hasOneTime]\n     * @param {Vue} vm\n     * @param {Node} el\n     * @param {Vue} [host] - transclusion host component\n     * @param {Object} [scope] - v-for scope\n     * @param {Fragment} [frag] - owner fragment\n     * @constructor\n     */\n    function Directive(descriptor, vm, el, host, scope, frag) {\n        this.vm = vm;\n        this.el = el;\n        // copy descriptor properties\n        this.descriptor = descriptor;\n        this.name = descriptor.name;\n        this.expression = descriptor.expression;\n        this.arg = descriptor.arg;\n        this.modifiers = descriptor.modifiers;\n        this.filters = descriptor.filters;\n        this.literal = this.modifiers && this.modifiers.literal;\n        // private\n        this._locked = false;\n        this._bound = false;\n        this._listeners = null;\n        // link context\n        this._host = host;\n        this._scope = scope;\n        this._frag = frag;\n        // store directives on node in dev mode\n        if ('development' !== 'production' && this.el) {\n            this.el._vue_directives = this.el._vue_directives || [];\n            this.el._vue_directives.push(this);\n        }\n    }\n\n    /**\n     * Initialize the directive, mixin definition properties,\n     * setup the watcher, call definition bind() and update()\n     * if present.\n     */\n\n    Directive.prototype._bind = function () {\n        var name = this.name;\n        var descriptor = this.descriptor;\n\n        // remove attribute\n        if ((name !== 'cloak' || this.vm._isCompiled) && this.el && this.el.removeAttribute) {\n            var attr = descriptor.attr || 'v-' + name;\n            this.el.removeAttribute(attr);\n        }\n\n        // copy def properties\n        var def = descriptor.def;\n        if (typeof def === 'function') {\n            this.update = def;\n        } else {\n            extend(this, def);\n        }\n\n        // setup directive params\n        this._setupParams();\n\n        // initial bind\n        if (this.bind) {\n            this.bind();\n        }\n        this._bound = true;\n\n        if (this.literal) {\n            this.update && this.update(descriptor.raw);\n        } else if ((this.expression || this.modifiers) && (this.update || this.twoWay) && !this._checkStatement()) {\n            // wrapped updater for context\n            var dir = this;\n            if (this.update) {\n                this._update = function (val, oldVal) {\n                    if (!dir._locked) {\n                        dir.update(val, oldVal);\n                    }\n                };\n            } else {\n                this._update = noop;\n            }\n            var preProcess = this._preProcess ? bind(this._preProcess, this) : null;\n            var postProcess = this._postProcess ? bind(this._postProcess, this) : null;\n            var watcher = this._watcher = new Watcher(this.vm, this.expression, this._update, // callback\n                {\n                    filters: this.filters,\n                    twoWay: this.twoWay,\n                    deep: this.deep,\n                    preProcess: preProcess,\n                    postProcess: postProcess,\n                    scope: this._scope\n                });\n            // v-model with inital inline value need to sync back to\n            // model instead of update to DOM on init. They would\n            // set the afterBind hook to indicate that.\n            if (this.afterBind) {\n                this.afterBind();\n            } else if (this.update) {\n                this.update(watcher.value);\n            }\n        }\n    };\n\n    /**\n     * Setup all param attributes, e.g. track-by,\n     * transition-mode, etc...\n     */\n\n    Directive.prototype._setupParams = function () {\n        if (!this.params) {\n            return;\n        }\n        var params = this.params;\n        // swap the params array with a fresh object.\n        this.params = Object.create(null);\n        var i = params.length;\n        var key, val, mappedKey;\n        while (i--) {\n            key = hyphenate(params[i]);\n            mappedKey = camelize(key);\n            val = getBindAttr(this.el, key);\n            if (val != null) {\n                // dynamic\n                this._setupParamWatcher(mappedKey, val);\n            } else {\n                // static\n                val = getAttr(this.el, key);\n                if (val != null) {\n                    this.params[mappedKey] = val === '' ? true : val;\n                }\n            }\n        }\n    };\n\n    /**\n     * Setup a watcher for a dynamic param.\n     *\n     * @param {String} key\n     * @param {String} expression\n     */\n\n    Directive.prototype._setupParamWatcher = function (key, expression) {\n        var self = this;\n        var called = false;\n        var unwatch = (this._scope || this.vm).$watch(expression, function (val, oldVal) {\n            self.params[key] = val;\n            // since we are in immediate mode,\n            // only call the param change callbacks if this is not the first update.\n            if (called) {\n                var cb = self.paramWatchers && self.paramWatchers[key];\n                if (cb) {\n                    cb.call(self, val, oldVal);\n                }\n            } else {\n                called = true;\n            }\n        }, {\n            immediate: true,\n            user: false\n        });(this._paramUnwatchFns || (this._paramUnwatchFns = [])).push(unwatch);\n    };\n\n    /**\n     * Check if the directive is a function caller\n     * and if the expression is a callable one. If both true,\n     * we wrap up the expression and use it as the event\n     * handler.\n     *\n     * e.g. on-click=\"a++\"\n     *\n     * @return {Boolean}\n     */\n\n    Directive.prototype._checkStatement = function () {\n        var expression = this.expression;\n        if (expression && this.acceptStatement && !isSimplePath(expression)) {\n            var fn = parseExpression(expression).get;\n            var scope = this._scope || this.vm;\n            var handler = function handler(e) {\n                scope.$event = e;\n                fn.call(scope, scope);\n                scope.$event = null;\n            };\n            if (this.filters) {\n                handler = scope._applyFilters(handler, null, this.filters);\n            }\n            this.update(handler);\n            return true;\n        }\n    };\n\n    /**\n     * Set the corresponding value with the setter.\n     * This should only be used in two-way directives\n     * e.g. v-model.\n     *\n     * @param {*} value\n     * @public\n     */\n\n    Directive.prototype.set = function (value) {\n        /* istanbul ignore else */\n        if (this.twoWay) {\n            this._withLock(function () {\n                this._watcher.set(value);\n            });\n        } else if ('development' !== 'production') {\n            warn('Directive.set() can only be used inside twoWay' + 'directives.');\n        }\n    };\n\n    /**\n     * Execute a function while preventing that function from\n     * triggering updates on this directive instance.\n     *\n     * @param {Function} fn\n     */\n\n    Directive.prototype._withLock = function (fn) {\n        var self = this;\n        self._locked = true;\n        fn.call(self);\n        nextTick(function () {\n            self._locked = false;\n        });\n    };\n\n    /**\n     * Convenience method that attaches a DOM event listener\n     * to the directive element and autometically tears it down\n     * during unbind.\n     *\n     * @param {String} event\n     * @param {Function} handler\n     * @param {Boolean} [useCapture]\n     */\n\n    Directive.prototype.on = function (event, handler, useCapture) {\n        on(this.el, event, handler, useCapture);(this._listeners || (this._listeners = [])).push([event, handler]);\n    };\n\n    /**\n     * Teardown the watcher and call unbind.\n     */\n\n    Directive.prototype._teardown = function () {\n        if (this._bound) {\n            this._bound = false;\n            if (this.unbind) {\n                this.unbind();\n            }\n            if (this._watcher) {\n                this._watcher.teardown();\n            }\n            var listeners = this._listeners;\n            var i;\n            if (listeners) {\n                i = listeners.length;\n                while (i--) {\n                    off(this.el, listeners[i][0], listeners[i][1]);\n                }\n            }\n            var unwatchFns = this._paramUnwatchFns;\n            if (unwatchFns) {\n                i = unwatchFns.length;\n                while (i--) {\n                    unwatchFns[i]();\n                }\n            }\n            if ('development' !== 'production' && this.el) {\n                this.el._vue_directives.$remove(this);\n            }\n            this.vm = this.el = this._watcher = this._listeners = null;\n        }\n    };\n\n    function lifecycleMixin (Vue) {\n        /**\n         * Update v-ref for component.\n         *\n         * @param {Boolean} remove\n         */\n\n        Vue.prototype._updateRef = function (remove) {\n            var ref = this.$options._ref;\n            if (ref) {\n                var refs = (this._scope || this._context).$refs;\n                if (remove) {\n                    if (refs[ref] === this) {\n                        refs[ref] = null;\n                    }\n                } else {\n                    refs[ref] = this;\n                }\n            }\n        };\n\n        /**\n         * Transclude, compile and link element.\n         *\n         * If a pre-compiled linker is available, that means the\n         * passed in element will be pre-transcluded and compiled\n         * as well - all we need to do is to call the linker.\n         *\n         * Otherwise we need to call transclude/compile/link here.\n         *\n         * @param {Element} el\n         */\n\n        Vue.prototype._compile = function (el) {\n            var options = this.$options;\n\n            // transclude and init element\n            // transclude can potentially replace original\n            // so we need to keep reference; this step also injects\n            // the template and caches the original attributes\n            // on the container node and replacer node.\n            var original = el;\n            el = transclude(el, options);\n            this._initElement(el);\n\n            // handle v-pre on root node (#2026)\n            if (el.nodeType === 1 && getAttr(el, 'v-pre') !== null) {\n                return;\n            }\n\n            // root is always compiled per-instance, because\n            // container attrs and props can be different every time.\n            var contextOptions = this._context && this._context.$options;\n            var rootLinker = compileRoot(el, options, contextOptions);\n\n            // resolve slot distribution\n            resolveSlots(this, options._content);\n\n            // compile and link the rest\n            var contentLinkFn;\n            var ctor = this.constructor;\n            // component compilation can be cached\n            // as long as it's not using inline-template\n            if (options._linkerCachable) {\n                contentLinkFn = ctor.linker;\n                if (!contentLinkFn) {\n                    contentLinkFn = ctor.linker = compile(el, options);\n                }\n            }\n\n            // link phase\n            // make sure to link root with prop scope!\n            var rootUnlinkFn = rootLinker(this, el, this._scope);\n            var contentUnlinkFn = contentLinkFn ? contentLinkFn(this, el) : compile(el, options)(this, el);\n\n            // register composite unlink function\n            // to be called during instance destruction\n            this._unlinkFn = function () {\n                rootUnlinkFn();\n                // passing destroying: true to avoid searching and\n                // splicing the directives\n                contentUnlinkFn(true);\n            };\n\n            // finally replace original\n            if (options.replace) {\n                replace(original, el);\n            }\n\n            this._isCompiled = true;\n            this._callHook('compiled');\n        };\n\n        /**\n         * Initialize instance element. Called in the public\n         * $mount() method.\n         *\n         * @param {Element} el\n         */\n\n        Vue.prototype._initElement = function (el) {\n            if (isFragment(el)) {\n                this._isFragment = true;\n                this.$el = this._fragmentStart = el.firstChild;\n                this._fragmentEnd = el.lastChild;\n                // set persisted text anchors to empty\n                if (this._fragmentStart.nodeType === 3) {\n                    this._fragmentStart.data = this._fragmentEnd.data = '';\n                }\n                this._fragment = el;\n            } else {\n                this.$el = el;\n            }\n            this.$el.__vue__ = this;\n            this._callHook('beforeCompile');\n        };\n\n        /**\n         * Create and bind a directive to an element.\n         *\n         * @param {Object} descriptor - parsed directive descriptor\n         * @param {Node} node   - target node\n         * @param {Vue} [host] - transclusion host component\n         * @param {Object} [scope] - v-for scope\n         * @param {Fragment} [frag] - owner fragment\n         */\n\n        Vue.prototype._bindDir = function (descriptor, node, host, scope, frag) {\n            this._directives.push(new Directive(descriptor, this, node, host, scope, frag));\n        };\n\n        /**\n         * Teardown an instance, unobserves the data, unbind all the\n         * directives, turn off all the event listeners, etc.\n         *\n         * @param {Boolean} remove - whether to remove the DOM node.\n         * @param {Boolean} deferCleanup - if true, defer cleanup to\n         *                                 be called later\n         */\n\n        Vue.prototype._destroy = function (remove, deferCleanup) {\n            if (this._isBeingDestroyed) {\n                if (!deferCleanup) {\n                    this._cleanup();\n                }\n                return;\n            }\n\n            var destroyReady;\n            var pendingRemoval;\n\n            var self = this;\n            // Cleanup should be called either synchronously or asynchronoysly as\n            // callback of this.$remove(), or if remove and deferCleanup are false.\n            // In any case it should be called after all other removing, unbinding and\n            // turning of is done\n            var cleanupIfPossible = function cleanupIfPossible() {\n                if (destroyReady && !pendingRemoval && !deferCleanup) {\n                    self._cleanup();\n                }\n            };\n\n            // remove DOM element\n            if (remove && this.$el) {\n                pendingRemoval = true;\n                this.$remove(function () {\n                    pendingRemoval = false;\n                    cleanupIfPossible();\n                });\n            }\n\n            this._callHook('beforeDestroy');\n            this._isBeingDestroyed = true;\n            var i;\n            // remove self from parent. only necessary\n            // if parent is not being destroyed as well.\n            var parent = this.$parent;\n            if (parent && !parent._isBeingDestroyed) {\n                parent.$children.$remove(this);\n                // unregister ref (remove: true)\n                this._updateRef(true);\n            }\n            // destroy all children.\n            i = this.$children.length;\n            while (i--) {\n                this.$children[i].$destroy();\n            }\n            // teardown props\n            if (this._propsUnlinkFn) {\n                this._propsUnlinkFn();\n            }\n            // teardown all directives. this also tearsdown all\n            // directive-owned watchers.\n            if (this._unlinkFn) {\n                this._unlinkFn();\n            }\n            i = this._watchers.length;\n            while (i--) {\n                this._watchers[i].teardown();\n            }\n            // remove reference to self on $el\n            if (this.$el) {\n                this.$el.__vue__ = null;\n            }\n\n            destroyReady = true;\n            cleanupIfPossible();\n        };\n\n        /**\n         * Clean up to ensure garbage collection.\n         * This is called after the leave transition if there\n         * is any.\n         */\n\n        Vue.prototype._cleanup = function () {\n            if (this._isDestroyed) {\n                return;\n            }\n            // remove self from owner fragment\n            // do it in cleanup so that we can call $destroy with\n            // defer right when a fragment is about to be removed.\n            if (this._frag) {\n                this._frag.children.$remove(this);\n            }\n            // remove reference from data ob\n            // frozen object may not have observer.\n            if (this._data && this._data.__ob__) {\n                this._data.__ob__.removeVm(this);\n            }\n            // Clean up references to private properties and other\n            // instances. preserve reference to _data so that proxy\n            // accessors still work. The only potential side effect\n            // here is that mutating the instance after it's destroyed\n            // may affect the state of other components that are still\n            // observing the same object, but that seems to be a\n            // reasonable responsibility for the user rather than\n            // always throwing an error on them.\n            this.$el = this.$parent = this.$root = this.$children = this._watchers = this._context = this._scope = this._directives = null;\n            // call the last hook...\n            this._isDestroyed = true;\n            this._callHook('destroyed');\n            // turn off all instance listeners.\n            this.$off();\n        };\n    }\n\n    function miscMixin (Vue) {\n        /**\n         * Apply a list of filter (descriptors) to a value.\n         * Using plain for loops here because this will be called in\n         * the getter of any watcher with filters so it is very\n         * performance sensitive.\n         *\n         * @param {*} value\n         * @param {*} [oldValue]\n         * @param {Array} filters\n         * @param {Boolean} write\n         * @return {*}\n         */\n\n        Vue.prototype._applyFilters = function (value, oldValue, filters, write) {\n            var filter, fn, args, arg, offset, i, l, j, k;\n            for (i = 0, l = filters.length; i < l; i++) {\n                filter = filters[write ? l - i - 1 : i];\n                fn = resolveAsset(this.$options, 'filters', filter.name, true);\n                if (!fn) continue;\n                fn = write ? fn.write : fn.read || fn;\n                if (typeof fn !== 'function') continue;\n                args = write ? [value, oldValue] : [value];\n                offset = write ? 2 : 1;\n                if (filter.args) {\n                    for (j = 0, k = filter.args.length; j < k; j++) {\n                        arg = filter.args[j];\n                        args[j + offset] = arg.dynamic ? this.$get(arg.value) : arg.value;\n                    }\n                }\n                value = fn.apply(this, args);\n            }\n            return value;\n        };\n\n        /**\n         * Resolve a component, depending on whether the component\n         * is defined normally or using an async factory function.\n         * Resolves synchronously if already resolved, otherwise\n         * resolves asynchronously and caches the resolved\n         * constructor on the factory.\n         *\n         * @param {String|Function} value\n         * @param {Function} cb\n         */\n\n        Vue.prototype._resolveComponent = function (value, cb) {\n            var factory;\n            if (typeof value === 'function') {\n                factory = value;\n            } else {\n                factory = resolveAsset(this.$options, 'components', value, true);\n            }\n            /* istanbul ignore if */\n            if (!factory) {\n                return;\n            }\n            // async component factory\n            if (!factory.options) {\n                if (factory.resolved) {\n                    // cached\n                    cb(factory.resolved);\n                } else if (factory.requested) {\n                    // pool callbacks\n                    factory.pendingCallbacks.push(cb);\n                } else {\n                    factory.requested = true;\n                    var cbs = factory.pendingCallbacks = [cb];\n                    factory.call(this, function resolve(res) {\n                        if (isPlainObject(res)) {\n                            res = Vue.extend(res);\n                        }\n                        // cache resolved\n                        factory.resolved = res;\n                        // invoke callbacks\n                        for (var i = 0, l = cbs.length; i < l; i++) {\n                            cbs[i](res);\n                        }\n                    }, function reject(reason) {\n                        'development' !== 'production' && warn('Failed to resolve async component' + (typeof value === 'string' ? ': ' + value : '') + '. ' + (reason ? '\\nReason: ' + reason : ''));\n                    });\n                }\n            } else {\n                // normal component\n                cb(factory);\n            }\n        };\n    }\n\n    var filterRE$1 = /[^|]\\|[^|]/;\n\n    function dataAPI (Vue) {\n        /**\n         * Get the value from an expression on this vm.\n         *\n         * @param {String} exp\n         * @param {Boolean} [asStatement]\n         * @return {*}\n         */\n\n        Vue.prototype.$get = function (exp, asStatement) {\n            var res = parseExpression(exp);\n            if (res) {\n                if (asStatement) {\n                    var self = this;\n                    return function statementHandler() {\n                        self.$arguments = toArray(arguments);\n                        var result = res.get.call(self, self);\n                        self.$arguments = null;\n                        return result;\n                    };\n                } else {\n                    try {\n                        return res.get.call(this, this);\n                    } catch (e) {}\n                }\n            }\n        };\n\n        /**\n         * Set the value from an expression on this vm.\n         * The expression must be a valid left-hand\n         * expression in an assignment.\n         *\n         * @param {String} exp\n         * @param {*} val\n         */\n\n        Vue.prototype.$set = function (exp, val) {\n            var res = parseExpression(exp, true);\n            if (res && res.set) {\n                res.set.call(this, this, val);\n            }\n        };\n\n        /**\n         * Delete a property on the VM\n         *\n         * @param {String} key\n         */\n\n        Vue.prototype.$delete = function (key) {\n            del(this._data, key);\n        };\n\n        /**\n         * Watch an expression, trigger callback when its\n         * value changes.\n         *\n         * @param {String|Function} expOrFn\n         * @param {Function} cb\n         * @param {Object} [options]\n         *                 - {Boolean} deep\n         *                 - {Boolean} immediate\n         * @return {Function} - unwatchFn\n         */\n\n        Vue.prototype.$watch = function (expOrFn, cb, options) {\n            var vm = this;\n            var parsed;\n            if (typeof expOrFn === 'string') {\n                parsed = parseDirective(expOrFn);\n                expOrFn = parsed.expression;\n            }\n            var watcher = new Watcher(vm, expOrFn, cb, {\n                deep: options && options.deep,\n                sync: options && options.sync,\n                filters: parsed && parsed.filters,\n                user: !options || options.user !== false\n            });\n            if (options && options.immediate) {\n                cb.call(vm, watcher.value);\n            }\n            return function unwatchFn() {\n                watcher.teardown();\n            };\n        };\n\n        /**\n         * Evaluate a text directive, including filters.\n         *\n         * @param {String} text\n         * @param {Boolean} [asStatement]\n         * @return {String}\n         */\n\n        Vue.prototype.$eval = function (text, asStatement) {\n            // check for filters.\n            if (filterRE$1.test(text)) {\n                var dir = parseDirective(text);\n                // the filter regex check might give false positive\n                // for pipes inside strings, so it's possible that\n                // we don't get any filters here\n                var val = this.$get(dir.expression, asStatement);\n                return dir.filters ? this._applyFilters(val, null, dir.filters) : val;\n            } else {\n                // no filter\n                return this.$get(text, asStatement);\n            }\n        };\n\n        /**\n         * Interpolate a piece of template text.\n         *\n         * @param {String} text\n         * @return {String}\n         */\n\n        Vue.prototype.$interpolate = function (text) {\n            var tokens = parseText(text);\n            var vm = this;\n            if (tokens) {\n                if (tokens.length === 1) {\n                    return vm.$eval(tokens[0].value) + '';\n                } else {\n                    return tokens.map(function (token) {\n                        return token.tag ? vm.$eval(token.value) : token.value;\n                    }).join('');\n                }\n            } else {\n                return text;\n            }\n        };\n\n        /**\n         * Log instance data as a plain JS object\n         * so that it is easier to inspect in console.\n         * This method assumes console is available.\n         *\n         * @param {String} [path]\n         */\n\n        Vue.prototype.$log = function (path) {\n            var data = path ? getPath(this._data, path) : this._data;\n            if (data) {\n                data = clean(data);\n            }\n            // include computed fields\n            if (!path) {\n                var key;\n                for (key in this.$options.computed) {\n                    data[key] = clean(this[key]);\n                }\n                if (this._props) {\n                    for (key in this._props) {\n                        data[key] = clean(this[key]);\n                    }\n                }\n            }\n            console.log(data);\n        };\n\n        /**\n         * \"clean\" a getter/setter converted object into a plain\n         * object copy.\n         *\n         * @param {Object} - obj\n         * @return {Object}\n         */\n\n        function clean(obj) {\n            return JSON.parse(JSON.stringify(obj));\n        }\n    }\n\n    function domAPI (Vue) {\n        /**\n         * Convenience on-instance nextTick. The callback is\n         * auto-bound to the instance, and this avoids component\n         * modules having to rely on the global Vue.\n         *\n         * @param {Function} fn\n         */\n\n        Vue.prototype.$nextTick = function (fn) {\n            nextTick(fn, this);\n        };\n\n        /**\n         * Append instance to target\n         *\n         * @param {Node} target\n         * @param {Function} [cb]\n         * @param {Boolean} [withTransition] - defaults to true\n         */\n\n        Vue.prototype.$appendTo = function (target, cb, withTransition) {\n            return insert(this, target, cb, withTransition, append, appendWithTransition);\n        };\n\n        /**\n         * Prepend instance to target\n         *\n         * @param {Node} target\n         * @param {Function} [cb]\n         * @param {Boolean} [withTransition] - defaults to true\n         */\n\n        Vue.prototype.$prependTo = function (target, cb, withTransition) {\n            target = query(target);\n            if (target.hasChildNodes()) {\n                this.$before(target.firstChild, cb, withTransition);\n            } else {\n                this.$appendTo(target, cb, withTransition);\n            }\n            return this;\n        };\n\n        /**\n         * Insert instance before target\n         *\n         * @param {Node} target\n         * @param {Function} [cb]\n         * @param {Boolean} [withTransition] - defaults to true\n         */\n\n        Vue.prototype.$before = function (target, cb, withTransition) {\n            return insert(this, target, cb, withTransition, beforeWithCb, beforeWithTransition);\n        };\n\n        /**\n         * Insert instance after target\n         *\n         * @param {Node} target\n         * @param {Function} [cb]\n         * @param {Boolean} [withTransition] - defaults to true\n         */\n\n        Vue.prototype.$after = function (target, cb, withTransition) {\n            target = query(target);\n            if (target.nextSibling) {\n                this.$before(target.nextSibling, cb, withTransition);\n            } else {\n                this.$appendTo(target.parentNode, cb, withTransition);\n            }\n            return this;\n        };\n\n        /**\n         * Remove instance from DOM\n         *\n         * @param {Function} [cb]\n         * @param {Boolean} [withTransition] - defaults to true\n         */\n\n        Vue.prototype.$remove = function (cb, withTransition) {\n            if (!this.$el.parentNode) {\n                return cb && cb();\n            }\n            var inDocument = this._isAttached && inDoc(this.$el);\n            // if we are not in document, no need to check\n            // for transitions\n            if (!inDocument) withTransition = false;\n            var self = this;\n            var realCb = function realCb() {\n                if (inDocument) self._callHook('detached');\n                if (cb) cb();\n            };\n            if (this._isFragment) {\n                removeNodeRange(this._fragmentStart, this._fragmentEnd, this, this._fragment, realCb);\n            } else {\n                var op = withTransition === false ? removeWithCb : removeWithTransition;\n                op(this.$el, this, realCb);\n            }\n            return this;\n        };\n\n        /**\n         * Shared DOM insertion function.\n         *\n         * @param {Vue} vm\n         * @param {Element} target\n         * @param {Function} [cb]\n         * @param {Boolean} [withTransition]\n         * @param {Function} op1 - op for non-transition insert\n         * @param {Function} op2 - op for transition insert\n         * @return vm\n         */\n\n        function insert(vm, target, cb, withTransition, op1, op2) {\n            target = query(target);\n            var targetIsDetached = !inDoc(target);\n            var op = withTransition === false || targetIsDetached ? op1 : op2;\n            var shouldCallHook = !targetIsDetached && !vm._isAttached && !inDoc(vm.$el);\n            if (vm._isFragment) {\n                mapNodeRange(vm._fragmentStart, vm._fragmentEnd, function (node) {\n                    op(node, target, vm);\n                });\n                cb && cb();\n            } else {\n                op(vm.$el, target, vm, cb);\n            }\n            if (shouldCallHook) {\n                vm._callHook('attached');\n            }\n            return vm;\n        }\n\n        /**\n         * Check for selectors\n         *\n         * @param {String|Element} el\n         */\n\n        function query(el) {\n            return typeof el === 'string' ? document.querySelector(el) : el;\n        }\n\n        /**\n         * Append operation that takes a callback.\n         *\n         * @param {Node} el\n         * @param {Node} target\n         * @param {Vue} vm - unused\n         * @param {Function} [cb]\n         */\n\n        function append(el, target, vm, cb) {\n            target.appendChild(el);\n            if (cb) cb();\n        }\n\n        /**\n         * InsertBefore operation that takes a callback.\n         *\n         * @param {Node} el\n         * @param {Node} target\n         * @param {Vue} vm - unused\n         * @param {Function} [cb]\n         */\n\n        function beforeWithCb(el, target, vm, cb) {\n            before(el, target);\n            if (cb) cb();\n        }\n\n        /**\n         * Remove operation that takes a callback.\n         *\n         * @param {Node} el\n         * @param {Vue} vm - unused\n         * @param {Function} [cb]\n         */\n\n        function removeWithCb(el, vm, cb) {\n            remove(el);\n            if (cb) cb();\n        }\n    }\n\n    function eventsAPI (Vue) {\n        /**\n         * Listen on the given `event` with `fn`.\n         *\n         * @param {String} event\n         * @param {Function} fn\n         */\n\n        Vue.prototype.$on = function (event, fn) {\n            (this._events[event] || (this._events[event] = [])).push(fn);\n            modifyListenerCount(this, event, 1);\n            return this;\n        };\n\n        /**\n         * Adds an `event` listener that will be invoked a single\n         * time then automatically removed.\n         *\n         * @param {String} event\n         * @param {Function} fn\n         */\n\n        Vue.prototype.$once = function (event, fn) {\n            var self = this;\n            function on() {\n                self.$off(event, on);\n                fn.apply(this, arguments);\n            }\n            on.fn = fn;\n            this.$on(event, on);\n            return this;\n        };\n\n        /**\n         * Remove the given callback for `event` or all\n         * registered callbacks.\n         *\n         * @param {String} event\n         * @param {Function} fn\n         */\n\n        Vue.prototype.$off = function (event, fn) {\n            var cbs;\n            // all\n            if (!arguments.length) {\n                if (this.$parent) {\n                    for (event in this._events) {\n                        cbs = this._events[event];\n                        if (cbs) {\n                            modifyListenerCount(this, event, -cbs.length);\n                        }\n                    }\n                }\n                this._events = {};\n                return this;\n            }\n            // specific event\n            cbs = this._events[event];\n            if (!cbs) {\n                return this;\n            }\n            if (arguments.length === 1) {\n                modifyListenerCount(this, event, -cbs.length);\n                this._events[event] = null;\n                return this;\n            }\n            // specific handler\n            var cb;\n            var i = cbs.length;\n            while (i--) {\n                cb = cbs[i];\n                if (cb === fn || cb.fn === fn) {\n                    modifyListenerCount(this, event, -1);\n                    cbs.splice(i, 1);\n                    break;\n                }\n            }\n            return this;\n        };\n\n        /**\n         * Trigger an event on self.\n         *\n         * @param {String|Object} event\n         * @return {Boolean} shouldPropagate\n         */\n\n        Vue.prototype.$emit = function (event) {\n            var isSource = typeof event === 'string';\n            event = isSource ? event : event.name;\n            var cbs = this._events[event];\n            var shouldPropagate = isSource || !cbs;\n            if (cbs) {\n                cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n                // this is a somewhat hacky solution to the question raised\n                // in #2102: for an inline component listener like <comp @test=\"doThis\">,\n                // the propagation handling is somewhat broken. Therefore we\n                // need to treat these inline callbacks differently.\n                var hasParentCbs = isSource && cbs.some(function (cb) {\n                        return cb._fromParent;\n                    });\n                if (hasParentCbs) {\n                    shouldPropagate = false;\n                }\n                var args = toArray(arguments, 1);\n                for (var i = 0, l = cbs.length; i < l; i++) {\n                    var cb = cbs[i];\n                    var res = cb.apply(this, args);\n                    if (res === true && (!hasParentCbs || cb._fromParent)) {\n                        shouldPropagate = true;\n                    }\n                }\n            }\n            return shouldPropagate;\n        };\n\n        /**\n         * Recursively broadcast an event to all children instances.\n         *\n         * @param {String|Object} event\n         * @param {...*} additional arguments\n         */\n\n        Vue.prototype.$broadcast = function (event) {\n            var isSource = typeof event === 'string';\n            event = isSource ? event : event.name;\n            // if no child has registered for this event,\n            // then there's no need to broadcast.\n            if (!this._eventsCount[event]) return;\n            var children = this.$children;\n            var args = toArray(arguments);\n            if (isSource) {\n                // use object event to indicate non-source emit\n                // on children\n                args[0] = { name: event, source: this };\n            }\n            for (var i = 0, l = children.length; i < l; i++) {\n                var child = children[i];\n                var shouldPropagate = child.$emit.apply(child, args);\n                if (shouldPropagate) {\n                    child.$broadcast.apply(child, args);\n                }\n            }\n            return this;\n        };\n\n        /**\n         * Recursively propagate an event up the parent chain.\n         *\n         * @param {String} event\n         * @param {...*} additional arguments\n         */\n\n        Vue.prototype.$dispatch = function (event) {\n            var shouldPropagate = this.$emit.apply(this, arguments);\n            if (!shouldPropagate) return;\n            var parent = this.$parent;\n            var args = toArray(arguments);\n            // use object event to indicate non-source emit\n            // on parents\n            args[0] = { name: event, source: this };\n            while (parent) {\n                shouldPropagate = parent.$emit.apply(parent, args);\n                parent = shouldPropagate ? parent.$parent : null;\n            }\n            return this;\n        };\n\n        /**\n         * Modify the listener counts on all parents.\n         * This bookkeeping allows $broadcast to return early when\n         * no child has listened to a certain event.\n         *\n         * @param {Vue} vm\n         * @param {String} event\n         * @param {Number} count\n         */\n\n        var hookRE = /^hook:/;\n        function modifyListenerCount(vm, event, count) {\n            var parent = vm.$parent;\n            // hooks do not get broadcasted so no need\n            // to do bookkeeping for them\n            if (!parent || !count || hookRE.test(event)) return;\n            while (parent) {\n                parent._eventsCount[event] = (parent._eventsCount[event] || 0) + count;\n                parent = parent.$parent;\n            }\n        }\n    }\n\n    function lifecycleAPI (Vue) {\n        /**\n         * Set instance target element and kick off the compilation\n         * process. The passed in `el` can be a selector string, an\n         * existing Element, or a DocumentFragment (for block\n         * instances).\n         *\n         * @param {Element|DocumentFragment|string} el\n         * @public\n         */\n\n        Vue.prototype.$mount = function (el) {\n            if (this._isCompiled) {\n                'development' !== 'production' && warn('$mount() should be called only once.', this);\n                return;\n            }\n            el = query(el);\n            if (!el) {\n                el = document.createElement('div');\n            }\n            this._compile(el);\n            this._initDOMHooks();\n            if (inDoc(this.$el)) {\n                this._callHook('attached');\n                ready.call(this);\n            } else {\n                this.$once('hook:attached', ready);\n            }\n            return this;\n        };\n\n        /**\n         * Mark an instance as ready.\n         */\n\n        function ready() {\n            this._isAttached = true;\n            this._isReady = true;\n            this._callHook('ready');\n        }\n\n        /**\n         * Teardown the instance, simply delegate to the internal\n         * _destroy.\n         *\n         * @param {Boolean} remove\n         * @param {Boolean} deferCleanup\n         */\n\n        Vue.prototype.$destroy = function (remove, deferCleanup) {\n            this._destroy(remove, deferCleanup);\n        };\n\n        /**\n         * Partially compile a piece of DOM and return a\n         * decompile function.\n         *\n         * @param {Element|DocumentFragment} el\n         * @param {Vue} [host]\n         * @param {Object} [scope]\n         * @param {Fragment} [frag]\n         * @return {Function}\n         */\n\n        Vue.prototype.$compile = function (el, host, scope, frag) {\n            return compile(el, this.$options, true)(this, el, host, scope, frag);\n        };\n    }\n\n    /**\n     * The exposed Vue constructor.\n     *\n     * API conventions:\n     * - public API methods/properties are prefixed with `$`\n     * - internal methods/properties are prefixed with `_`\n     * - non-prefixed properties are assumed to be proxied user\n     *   data.\n     *\n     * @constructor\n     * @param {Object} [options]\n     * @public\n     */\n\n    function Vue(options) {\n        this._init(options);\n    }\n\n    // install internals\n    initMixin(Vue);\n    stateMixin(Vue);\n    eventsMixin(Vue);\n    lifecycleMixin(Vue);\n    miscMixin(Vue);\n\n    // install instance APIs\n    dataAPI(Vue);\n    domAPI(Vue);\n    eventsAPI(Vue);\n    lifecycleAPI(Vue);\n\n    var slot = {\n\n        priority: SLOT,\n        params: ['name'],\n\n        bind: function bind() {\n            // this was resolved during component transclusion\n            var name = this.params.name || 'default';\n            var content = this.vm._slotContents && this.vm._slotContents[name];\n            if (!content || !content.hasChildNodes()) {\n                this.fallback();\n            } else {\n                this.compile(content.cloneNode(true), this.vm._context, this.vm);\n            }\n        },\n\n        compile: function compile(content, context, host) {\n            if (content && context) {\n                if (this.el.hasChildNodes() && content.childNodes.length === 1 && content.childNodes[0].nodeType === 1 && content.childNodes[0].hasAttribute('v-if')) {\n                    // if the inserted slot has v-if\n                    // inject fallback content as the v-else\n                    var elseBlock = document.createElement('template');\n                    elseBlock.setAttribute('v-else', '');\n                    elseBlock.innerHTML = this.el.innerHTML;\n                    // the else block should be compiled in child scope\n                    elseBlock._context = this.vm;\n                    content.appendChild(elseBlock);\n                }\n                var scope = host ? host._scope : this._scope;\n                this.unlink = context.$compile(content, host, scope, this._frag);\n            }\n            if (content) {\n                replace(this.el, content);\n            } else {\n                remove(this.el);\n            }\n        },\n\n        fallback: function fallback() {\n            this.compile(extractContent(this.el, true), this.vm);\n        },\n\n        unbind: function unbind() {\n            if (this.unlink) {\n                this.unlink();\n            }\n        }\n    };\n\n    var partial = {\n\n        priority: PARTIAL,\n\n        params: ['name'],\n\n        // watch changes to name for dynamic partials\n        paramWatchers: {\n            name: function name(value) {\n                vIf.remove.call(this);\n                if (value) {\n                    this.insert(value);\n                }\n            }\n        },\n\n        bind: function bind() {\n            this.anchor = createAnchor('v-partial');\n            replace(this.el, this.anchor);\n            this.insert(this.params.name);\n        },\n\n        insert: function insert(id) {\n            var partial = resolveAsset(this.vm.$options, 'partials', id, true);\n            if (partial) {\n                this.factory = new FragmentFactory(this.vm, partial);\n                vIf.insert.call(this);\n            }\n        },\n\n        unbind: function unbind() {\n            if (this.frag) {\n                this.frag.destroy();\n            }\n        }\n    };\n\n    var elementDirectives = {\n        slot: slot,\n        partial: partial\n    };\n\n    var convertArray = vFor._postProcess;\n\n    /**\n     * Limit filter for arrays\n     *\n     * @param {Number} n\n     * @param {Number} offset (Decimal expected)\n     */\n\n    function limitBy(arr, n, offset) {\n        offset = offset ? parseInt(offset, 10) : 0;\n        n = toNumber(n);\n        return typeof n === 'number' ? arr.slice(offset, offset + n) : arr;\n    }\n\n    /**\n     * Filter filter for arrays\n     *\n     * @param {String} search\n     * @param {String} [delimiter]\n     * @param {String} ...dataKeys\n     */\n\n    function filterBy(arr, search, delimiter) {\n        arr = convertArray(arr);\n        if (search == null) {\n            return arr;\n        }\n        if (typeof search === 'function') {\n            return arr.filter(search);\n        }\n        // cast to lowercase string\n        search = ('' + search).toLowerCase();\n        // allow optional `in` delimiter\n        // because why not\n        var n = delimiter === 'in' ? 3 : 2;\n        // extract and flatten keys\n        var keys = Array.prototype.concat.apply([], toArray(arguments, n));\n        var res = [];\n        var item, key, val, j;\n        for (var i = 0, l = arr.length; i < l; i++) {\n            item = arr[i];\n            val = item && item.$value || item;\n            j = keys.length;\n            if (j) {\n                while (j--) {\n                    key = keys[j];\n                    if (key === '$key' && contains(item.$key, search) || contains(getPath(val, key), search)) {\n                        res.push(item);\n                        break;\n                    }\n                }\n            } else if (contains(item, search)) {\n                res.push(item);\n            }\n        }\n        return res;\n    }\n\n    /**\n     * Filter filter for arrays\n     *\n     * @param {String|Array<String>|Function} ...sortKeys\n     * @param {Number} [order]\n     */\n\n    function orderBy(arr) {\n        var comparator = null;\n        var sortKeys = undefined;\n        arr = convertArray(arr);\n\n        // determine order (last argument)\n        var args = toArray(arguments, 1);\n        var order = args[args.length - 1];\n        if (typeof order === 'number') {\n            order = order < 0 ? -1 : 1;\n            args = args.length > 1 ? args.slice(0, -1) : args;\n        } else {\n            order = 1;\n        }\n\n        // determine sortKeys & comparator\n        var firstArg = args[0];\n        if (!firstArg) {\n            return arr;\n        } else if (typeof firstArg === 'function') {\n            // custom comparator\n            comparator = function (a, b) {\n                return firstArg(a, b) * order;\n            };\n        } else {\n            // string keys. flatten first\n            sortKeys = Array.prototype.concat.apply([], args);\n            comparator = function (a, b, i) {\n                i = i || 0;\n                return i >= sortKeys.length - 1 ? baseCompare(a, b, i) : baseCompare(a, b, i) || comparator(a, b, i + 1);\n            };\n        }\n\n        function baseCompare(a, b, sortKeyIndex) {\n            var sortKey = sortKeys[sortKeyIndex];\n            if (sortKey) {\n                if (sortKey !== '$key') {\n                    if (isObject(a) && '$value' in a) a = a.$value;\n                    if (isObject(b) && '$value' in b) b = b.$value;\n                }\n                a = isObject(a) ? getPath(a, sortKey) : a;\n                b = isObject(b) ? getPath(b, sortKey) : b;\n            }\n            return a === b ? 0 : a > b ? order : -order;\n        }\n\n        // sort on a copy to avoid mutating original array\n        return arr.slice().sort(comparator);\n    }\n\n    /**\n     * String contain helper\n     *\n     * @param {*} val\n     * @param {String} search\n     */\n\n    function contains(val, search) {\n        var i;\n        if (isPlainObject(val)) {\n            var keys = Object.keys(val);\n            i = keys.length;\n            while (i--) {\n                if (contains(val[keys[i]], search)) {\n                    return true;\n                }\n            }\n        } else if (isArray(val)) {\n            i = val.length;\n            while (i--) {\n                if (contains(val[i], search)) {\n                    return true;\n                }\n            }\n        } else if (val != null) {\n            return val.toString().toLowerCase().indexOf(search) > -1;\n        }\n    }\n\n    var digitsRE = /(\\d{3})(?=\\d)/g;\n\n    // asset collections must be a plain object.\n    var filters = {\n\n        orderBy: orderBy,\n        filterBy: filterBy,\n        limitBy: limitBy,\n\n        /**\n         * Stringify value.\n         *\n         * @param {Number} indent\n         */\n\n        json: {\n            read: function read(value, indent) {\n                return typeof value === 'string' ? value : JSON.stringify(value, null, Number(indent) || 2);\n            },\n            write: function write(value) {\n                try {\n                    return JSON.parse(value);\n                } catch (e) {\n                    return value;\n                }\n            }\n        },\n\n        /**\n         * 'abc' => 'Abc'\n         */\n\n        capitalize: function capitalize(value) {\n            if (!value && value !== 0) return '';\n            value = value.toString();\n            return value.charAt(0).toUpperCase() + value.slice(1);\n        },\n\n        /**\n         * 'abc' => 'ABC'\n         */\n\n        uppercase: function uppercase(value) {\n            return value || value === 0 ? value.toString().toUpperCase() : '';\n        },\n\n        /**\n         * 'AbC' => 'abc'\n         */\n\n        lowercase: function lowercase(value) {\n            return value || value === 0 ? value.toString().toLowerCase() : '';\n        },\n\n        /**\n         * 12345 => $12,345.00\n         *\n         * @param {String} sign\n         * @param {Number} decimals Decimal places\n         */\n\n        currency: function currency(value, _currency, decimals) {\n            value = parseFloat(value);\n            if (!isFinite(value) || !value && value !== 0) return '';\n            _currency = _currency != null ? _currency : '$';\n            decimals = decimals != null ? decimals : 2;\n            var stringified = Math.abs(value).toFixed(decimals);\n            var _int = decimals ? stringified.slice(0, -1 - decimals) : stringified;\n            var i = _int.length % 3;\n            var head = i > 0 ? _int.slice(0, i) + (_int.length > 3 ? ',' : '') : '';\n            var _float = decimals ? stringified.slice(-1 - decimals) : '';\n            var sign = value < 0 ? '-' : '';\n            return sign + _currency + head + _int.slice(i).replace(digitsRE, '$1,') + _float;\n        },\n\n        /**\n         * 'item' => 'items'\n         *\n         * @params\n         *  an array of strings corresponding to\n         *  the single, double, triple ... forms of the word to\n         *  be pluralized. When the number to be pluralized\n         *  exceeds the length of the args, it will use the last\n         *  entry in the array.\n         *\n         *  e.g. ['single', 'double', 'triple', 'multiple']\n         */\n\n        pluralize: function pluralize(value) {\n            var args = toArray(arguments, 1);\n            return args.length > 1 ? args[value % 10 - 1] || args[args.length - 1] : args[0] + (value === 1 ? '' : 's');\n        },\n\n        /**\n         * Debounce a handler function.\n         *\n         * @param {Function} handler\n         * @param {Number} delay = 300\n         * @return {Function}\n         */\n\n        debounce: function debounce(handler, delay) {\n            if (!handler) return;\n            if (!delay) {\n                delay = 300;\n            }\n            return _debounce(handler, delay);\n        }\n    };\n\n    function installGlobalAPI (Vue) {\n        /**\n         * Vue and every constructor that extends Vue has an\n         * associated options object, which can be accessed during\n         * compilation steps as `this.constructor.options`.\n         *\n         * These can be seen as the default options of every\n         * Vue instance.\n         */\n\n        Vue.options = {\n            directives: directives,\n            elementDirectives: elementDirectives,\n            filters: filters,\n            transitions: {},\n            components: {},\n            partials: {},\n            replace: true\n        };\n\n        /**\n         * Expose useful internals\n         */\n\n        Vue.util = util;\n        Vue.config = config;\n        Vue.set = set;\n        Vue['delete'] = del;\n        Vue.nextTick = nextTick;\n\n        /**\n         * The following are exposed for advanced usage / plugins\n         */\n\n        Vue.compiler = compiler;\n        Vue.FragmentFactory = FragmentFactory;\n        Vue.internalDirectives = internalDirectives;\n        Vue.parsers = {\n            path: path,\n            text: text,\n            template: template,\n            directive: directive,\n            expression: expression\n        };\n\n        /**\n         * Each instance constructor, including Vue, has a unique\n         * cid. This enables us to create wrapped \"child\n         * constructors\" for prototypal inheritance and cache them.\n         */\n\n        Vue.cid = 0;\n        var cid = 1;\n\n        /**\n         * Class inheritance\n         *\n         * @param {Object} extendOptions\n         */\n\n        Vue.extend = function (extendOptions) {\n            extendOptions = extendOptions || {};\n            var Super = this;\n            var isFirstExtend = Super.cid === 0;\n            if (isFirstExtend && extendOptions._Ctor) {\n                return extendOptions._Ctor;\n            }\n            var name = extendOptions.name || Super.options.name;\n            if ('development' !== 'production') {\n                if (!/^[a-zA-Z][\\w-]*$/.test(name)) {\n                    warn('Invalid component name: \"' + name + '\". Component names ' + 'can only contain alphanumeric characaters and the hyphen.');\n                    name = null;\n                }\n            }\n            var Sub = createClass(name || 'VueComponent');\n            Sub.prototype = Object.create(Super.prototype);\n            Sub.prototype.constructor = Sub;\n            Sub.cid = cid++;\n            Sub.options = mergeOptions(Super.options, extendOptions);\n            Sub['super'] = Super;\n            // allow further extension\n            Sub.extend = Super.extend;\n            // create asset registers, so extended classes\n            // can have their private assets too.\n            config._assetTypes.forEach(function (type) {\n                Sub[type] = Super[type];\n            });\n            // enable recursive self-lookup\n            if (name) {\n                Sub.options.components[name] = Sub;\n            }\n            // cache constructor\n            if (isFirstExtend) {\n                extendOptions._Ctor = Sub;\n            }\n            return Sub;\n        };\n\n        /**\n         * A function that returns a sub-class constructor with the\n         * given name. This gives us much nicer output when\n         * logging instances in the console.\n         *\n         * @param {String} name\n         * @return {Function}\n         */\n\n        function createClass(name) {\n            /* eslint-disable no-new-func */\n            return new Function('return function ' + classify(name) + ' (options) { this._init(options) }')();\n            /* eslint-enable no-new-func */\n        }\n\n        /**\n         * Plugin system\n         *\n         * @param {Object} plugin\n         */\n\n        Vue.use = function (plugin) {\n            /* istanbul ignore if */\n            if (plugin.installed) {\n                return;\n            }\n            // additional parameters\n            var args = toArray(arguments, 1);\n            args.unshift(this);\n            if (typeof plugin.install === 'function') {\n                plugin.install.apply(plugin, args);\n            } else {\n                plugin.apply(null, args);\n            }\n            plugin.installed = true;\n            return this;\n        };\n\n        /**\n         * Apply a global mixin by merging it into the default\n         * options.\n         */\n\n        Vue.mixin = function (mixin) {\n            Vue.options = mergeOptions(Vue.options, mixin);\n        };\n\n        /**\n         * Create asset registration methods with the following\n         * signature:\n         *\n         * @param {String} id\n         * @param {*} definition\n         */\n\n        config._assetTypes.forEach(function (type) {\n            Vue[type] = function (id, definition) {\n                if (!definition) {\n                    return this.options[type + 's'][id];\n                } else {\n                    /* istanbul ignore if */\n                    if ('development' !== 'production') {\n                        if (type === 'component' && (commonTagRE.test(id) || reservedTagRE.test(id))) {\n                            warn('Do not use built-in or reserved HTML elements as component ' + 'id: ' + id);\n                        }\n                    }\n                    if (type === 'component' && isPlainObject(definition)) {\n                        definition.name = id;\n                        definition = Vue.extend(definition);\n                    }\n                    this.options[type + 's'][id] = definition;\n                    return definition;\n                }\n            };\n        });\n\n        // expose internal transition API\n        extend(Vue.transition, transition);\n    }\n\n    installGlobalAPI(Vue);\n\n    Vue.version = '1.0.24';\n\n    // devtools global hook\n    /* istanbul ignore next */\n    setTimeout(function () {\n        if (config.devtools) {\n            if (devtools) {\n                devtools.emit('init', Vue);\n            } else if ('development' !== 'production' && inBrowser && /Chrome\\/\\d+/.test(window.navigator.userAgent)) {\n                console.log('Download the Vue Devtools for a better development experience:\\n' + 'https://github.com/vuejs/vue-devtools');\n            }\n        }\n    }, 0);\n\n    return Vue;\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/bootstrap-slider/bootstrap-slider.js",
    "content": "/*! =========================================================\n * bootstrap-slider.js\n *\n * Maintainers:\n *\t\tKyle Kemp\n *\t\t\t- Twitter: @seiyria\n *\t\t\t- Github:  seiyria\n *\t\tRohit Kalkur\n *\t\t\t- Twitter: @Rovolutionary\n *\t\t\t- Github:  rovolution\n *\n * =========================================================\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================= */\n\n\n/**\n * Bridget makes jQuery widgets\n * v1.0.1\n * MIT license\n */\n\n(function(root, factory) {\n\tif(typeof define === \"function\" && define.amd) {\n\t\tdefine([\"jquery\"], factory);\n\t}\n\telse if(typeof module === \"object\" && module.exports) {\n\t\tvar jQuery;\n\t\ttry {\n\t\t\tjQuery = require(\"jquery\");\n\t\t}\n\t\tcatch (err) {\n\t\t\tjQuery = null;\n\t\t}\n\t\tmodule.exports = factory(jQuery);\n\t}\n\telse {\n\t\troot.Slider = factory(root.jQuery);\n\t}\n}(this, function($) {\n\t// Reference to Slider constructor\n\tvar Slider;\n\n\n\t(function( $ ) {\n\n\t\t'use strict';\n\n\t\t// -------------------------- utils -------------------------- //\n\n\t\tvar slice = Array.prototype.slice;\n\n\t\tfunction noop() {}\n\n\t\t// -------------------------- definition -------------------------- //\n\n\t\tfunction defineBridget( $ ) {\n\n\t\t\t// bail if no jQuery\n\t\t\tif ( !$ ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// -------------------------- addOptionMethod -------------------------- //\n\n\t\t\t/**\n\t\t\t * adds option method -> $().plugin('option', {...})\n\t\t\t * @param {Function} PluginClass - constructor class\n\t\t\t */\n\t\t\tfunction addOptionMethod( PluginClass ) {\n\t\t\t\t// don't overwrite original option method\n\t\t\t\tif ( PluginClass.prototype.option ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t  // option setter\n\t\t\t  PluginClass.prototype.option = function( opts ) {\n\t\t\t    // bail out if not an object\n\t\t\t    if ( !$.isPlainObject( opts ) ){\n\t\t\t      return;\n\t\t\t    }\n\t\t\t    this.options = $.extend( true, this.options, opts );\n\t\t\t  };\n\t\t\t}\n\n\n\t\t\t// -------------------------- plugin bridge -------------------------- //\n\n\t\t\t// helper function for logging errors\n\t\t\t// $.error breaks jQuery chaining\n\t\t\tvar logError = typeof console === 'undefined' ? noop :\n\t\t\t  function( message ) {\n\t\t\t    console.error( message );\n\t\t\t  };\n\n\t\t\t/**\n\t\t\t * jQuery plugin bridge, access methods like $elem.plugin('method')\n\t\t\t * @param {String} namespace - plugin name\n\t\t\t * @param {Function} PluginClass - constructor class\n\t\t\t */\n\t\t\tfunction bridge( namespace, PluginClass ) {\n\t\t\t  // add to jQuery fn namespace\n\t\t\t  $.fn[ namespace ] = function( options ) {\n\t\t\t    if ( typeof options === 'string' ) {\n\t\t\t      // call plugin method when first argument is a string\n\t\t\t      // get arguments for method\n\t\t\t      var args = slice.call( arguments, 1 );\n\n\t\t\t      for ( var i=0, len = this.length; i < len; i++ ) {\n\t\t\t        var elem = this[i];\n\t\t\t        var instance = $.data( elem, namespace );\n\t\t\t        if ( !instance ) {\n\t\t\t          logError( \"cannot call methods on \" + namespace + \" prior to initialization; \" +\n\t\t\t            \"attempted to call '\" + options + \"'\" );\n\t\t\t          continue;\n\t\t\t        }\n\t\t\t        if ( !$.isFunction( instance[options] ) || options.charAt(0) === '_' ) {\n\t\t\t          logError( \"no such method '\" + options + \"' for \" + namespace + \" instance\" );\n\t\t\t          continue;\n\t\t\t        }\n\n\t\t\t        // trigger method with arguments\n\t\t\t        var returnValue = instance[ options ].apply( instance, args);\n\n\t\t\t        // break look and return first value if provided\n\t\t\t        if ( returnValue !== undefined && returnValue !== instance) {\n\t\t\t          return returnValue;\n\t\t\t        }\n\t\t\t      }\n\t\t\t      // return this if no return value\n\t\t\t      return this;\n\t\t\t    } else {\n\t\t\t      var objects = this.map( function() {\n\t\t\t        var instance = $.data( this, namespace );\n\t\t\t        if ( instance ) {\n\t\t\t          // apply options & init\n\t\t\t          instance.option( options );\n\t\t\t          instance._init();\n\t\t\t        } else {\n\t\t\t          // initialize new instance\n\t\t\t          instance = new PluginClass( this, options );\n\t\t\t          $.data( this, namespace, instance );\n\t\t\t        }\n\t\t\t        return $(this);\n\t\t\t      });\n\n\t\t\t      if(!objects || objects.length > 1) {\n\t\t\t      \treturn objects;\n\t\t\t      } else {\n\t\t\t      \treturn objects[0];\n\t\t\t      }\n\t\t\t    }\n\t\t\t  };\n\n\t\t\t}\n\n\t\t\t// -------------------------- bridget -------------------------- //\n\n\t\t\t/**\n\t\t\t * converts a Prototypical class into a proper jQuery plugin\n\t\t\t *   the class must have a ._init method\n\t\t\t * @param {String} namespace - plugin name, used in $().pluginName\n\t\t\t * @param {Function} PluginClass - constructor class\n\t\t\t */\n\t\t\t$.bridget = function( namespace, PluginClass ) {\n\t\t\t  addOptionMethod( PluginClass );\n\t\t\t  bridge( namespace, PluginClass );\n\t\t\t};\n\n\t\t\treturn $.bridget;\n\n\t\t}\n\n\t  \t// get jquery from browser global\n\t  \tdefineBridget( $ );\n\n\t})( $ );\n\n\n\t/*************************************************\n\n\t\t\tBOOTSTRAP-SLIDER SOURCE CODE\n\n\t**************************************************/\n\n\t(function($) {\n\n\t\tvar ErrorMsgs = {\n\t\t\tformatInvalidInputErrorMsg : function(input) {\n\t\t\t\treturn \"Invalid input value '\" + input + \"' passed in\";\n\t\t\t},\n\t\t\tcallingContextNotSliderInstance : \"Calling context element does not have instance of Slider bound to it. Check your code to make sure the JQuery object returned from the call to the slider() initializer is calling the method\"\n\t\t};\n\n\t\tvar SliderScale = {\n\t\t\tlinear: {\n\t\t\t\ttoValue: function(percentage) {\n\t\t\t\t\tvar rawValue = percentage/100 * (this.options.max - this.options.min);\n\t\t\t\t\tif (this.options.ticks_positions.length > 0) {\n\t\t\t\t\t\tvar minv, maxv, minp, maxp = 0;\n\t\t\t\t\t\tfor (var i = 0; i < this.options.ticks_positions.length; i++) {\n\t\t\t\t\t\t\tif (percentage <= this.options.ticks_positions[i]) {\n\t\t\t\t\t\t\t\tminv = (i > 0) ? this.options.ticks[i-1] : 0;\n\t\t\t\t\t\t\t\tminp = (i > 0) ? this.options.ticks_positions[i-1] : 0;\n\t\t\t\t\t\t\t\tmaxv = this.options.ticks[i];\n\t\t\t\t\t\t\t\tmaxp = this.options.ticks_positions[i];\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\t\tvar partialPercentage = (percentage - minp) / (maxp - minp);\n\t\t\t\t\t\t\trawValue = minv + partialPercentage * (maxv - minv);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar value = this.options.min + Math.round(rawValue / this.options.step) * this.options.step;\n\t\t\t\t\tif (value < this.options.min) {\n\t\t\t\t\t\treturn this.options.min;\n\t\t\t\t\t} else if (value > this.options.max) {\n\t\t\t\t\t\treturn this.options.max;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttoPercentage: function(value) {\n\t\t\t\t\tif (this.options.max === this.options.min) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.options.ticks_positions.length > 0) {\n\t\t\t\t\t\tvar minv, maxv, minp, maxp = 0;\n\t\t\t\t\t\tfor (var i = 0; i < this.options.ticks.length; i++) {\n\t\t\t\t\t\t\tif (value  <= this.options.ticks[i]) {\n\t\t\t\t\t\t\t\tminv = (i > 0) ? this.options.ticks[i-1] : 0;\n\t\t\t\t\t\t\t\tminp = (i > 0) ? this.options.ticks_positions[i-1] : 0;\n\t\t\t\t\t\t\t\tmaxv = this.options.ticks[i];\n\t\t\t\t\t\t\t\tmaxp = this.options.ticks_positions[i];\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\t\tvar partialPercentage = (value - minv) / (maxv - minv);\n\t\t\t\t\t\t\treturn minp + partialPercentage * (maxp - minp);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn 100 * (value - this.options.min) / (this.options.max - this.options.min);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tlogarithmic: {\n\t\t\t\t/* Based on http://stackoverflow.com/questions/846221/logarithmic-slider */\n\t\t\t\ttoValue: function(percentage) {\n\t\t\t\t\tvar min = (this.options.min === 0) ? 0 : Math.log(this.options.min);\n\t\t\t\t\tvar max = Math.log(this.options.max);\n\t\t\t\t\tvar value = Math.exp(min + (max - min) * percentage / 100);\n\t\t\t\t\tvalue = this.options.min + Math.round((value - this.options.min) / this.options.step) * this.options.step;\n\t\t\t\t\t/* Rounding to the nearest step could exceed the min or\n\t\t\t\t\t * max, so clip to those values. */\n\t\t\t\t\tif (value < this.options.min) {\n\t\t\t\t\t\treturn this.options.min;\n\t\t\t\t\t} else if (value > this.options.max) {\n\t\t\t\t\t\treturn this.options.max;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttoPercentage: function(value) {\n\t\t\t\t\tif (this.options.max === this.options.min) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar max = Math.log(this.options.max);\n\t\t\t\t\t\tvar min = this.options.min === 0 ? 0 : Math.log(this.options.min);\n\t\t\t\t\t\tvar v = value === 0 ? 0 : Math.log(value);\n\t\t\t\t\t\treturn 100 * (v - min) / (max - min);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\n\t\t/*************************************************\n\n\t\t\t\t\t\t\tCONSTRUCTOR\n\n\t\t**************************************************/\n\t\tSlider = function(element, options) {\n\t\t\tcreateNewSlider.call(this, element, options);\n\t\t\treturn this;\n\t\t};\n\n\t\tfunction createNewSlider(element, options) {\n\n\t\t\t/*\n\t\t\t\tThe internal state object is used to store data about the current 'state' of slider.\n\n\t\t\t\tThis includes values such as the `value`, `enabled`, etc...\n\t\t\t*/\n\t\t\tthis._state = {\n\t\t\t\tvalue: null,\n\t\t\t\tenabled: null,\n\t\t\t\toffset: null,\n\t\t\t\tsize: null,\n\t\t\t\tpercentage: null,\n\t\t\t\tinDrag: false,\n\t\t\t\tover: false\n\t\t\t};\n\n\n\t\t\tif(typeof element === \"string\") {\n\t\t\t\tthis.element = document.querySelector(element);\n\t\t\t} else if(element instanceof HTMLElement) {\n\t\t\t\tthis.element = element;\n\t\t\t}\n\n\t\t\t/*************************************************\n\n\t\t\t\t\t\t\tProcess Options\n\n\t\t\t**************************************************/\n\t\t\toptions = options ? options : {};\n\t\t\tvar optionTypes = Object.keys(this.defaultOptions);\n\n\t\t\tfor(var i = 0; i < optionTypes.length; i++) {\n\t\t\t\tvar optName = optionTypes[i];\n\n\t\t\t\t// First check if an option was passed in via the constructor\n\t\t\t\tvar val = options[optName];\n\t\t\t\t// If no data attrib, then check data atrributes\n\t\t\t\tval = (typeof val !== 'undefined') ? val : getDataAttrib(this.element, optName);\n\t\t\t\t// Finally, if nothing was specified, use the defaults\n\t\t\t\tval = (val !== null) ? val : this.defaultOptions[optName];\n\n\t\t\t\t// Set all options on the instance of the Slider\n\t\t\t\tif(!this.options) {\n\t\t\t\t\tthis.options = {};\n\t\t\t\t}\n\t\t\t\tthis.options[optName] = val;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t\tValidate `tooltip_position` against 'orientation`\n\t\t\t\t- if `tooltip_position` is incompatible with orientation, swith it to a default compatible with specified `orientation`\n\t\t\t\t\t-- default for \"vertical\" -> \"right\"\n\t\t\t\t\t-- default for \"horizontal\" -> \"left\"\n\t\t\t*/\n\t\t\tif(this.options.orientation === \"vertical\" && (this.options.tooltip_position === \"top\" || this.options.tooltip_position === \"bottom\")) {\n\n\t\t\t\tthis.options.tooltip_position\t= \"right\";\n\n\t\t\t}\n\t\t\telse if(this.options.orientation === \"horizontal\" && (this.options.tooltip_position === \"left\" || this.options.tooltip_position === \"right\")) {\n\n\t\t\t\tthis.options.tooltip_position\t= \"top\";\n\n\t\t\t}\n\n\t\t\tfunction getDataAttrib(element, optName) {\n\t\t\t\tvar dataName = \"data-slider-\" + optName.replace(/_/g, '-');\n\t\t\t\tvar dataValString = element.getAttribute(dataName);\n\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(dataValString);\n\t\t\t\t}\n\t\t\t\tcatch(err) {\n\t\t\t\t\treturn dataValString;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/*************************************************\n\n\t\t\t\t\t\t\tCreate Markup\n\n\t\t\t**************************************************/\n\n\t\t\tvar origWidth = this.element.style.width;\n\t\t\tvar updateSlider = false;\n\t\t\tvar parent = this.element.parentNode;\n\t\t\tvar sliderTrackSelection;\n\t\t\tvar sliderTrackLow, sliderTrackHigh;\n\t\t\tvar sliderMinHandle;\n\t\t\tvar sliderMaxHandle;\n\n\t\t\tif (this.sliderElem) {\n\t\t\t\tupdateSlider = true;\n\t\t\t} else {\n\t\t\t\t/* Create elements needed for slider */\n\t\t\t\tthis.sliderElem = document.createElement(\"div\");\n\t\t\t\tthis.sliderElem.className = \"slider\";\n\n\t\t\t\t/* Create slider track elements */\n\t\t\t\tvar sliderTrack = document.createElement(\"div\");\n\t\t\t\tsliderTrack.className = \"slider-track\";\n\n\t\t\t\tsliderTrackLow = document.createElement(\"div\");\n\t\t\t\tsliderTrackLow.className = \"slider-track-low\";\n\n\t\t\t\tsliderTrackSelection = document.createElement(\"div\");\n\t\t\t\tsliderTrackSelection.className = \"slider-selection\";\n\n\t\t\t\tsliderTrackHigh = document.createElement(\"div\");\n\t\t\t\tsliderTrackHigh.className = \"slider-track-high\";\n\n\t\t\t\tsliderMinHandle = document.createElement(\"div\");\n\t\t\t\tsliderMinHandle.className = \"slider-handle min-slider-handle\";\n\t\t\t\tsliderMinHandle.setAttribute('role', 'slider');\n\t\t\t\tsliderMinHandle.setAttribute('aria-valuemin', this.options.min);\n\t\t\t\tsliderMinHandle.setAttribute('aria-valuemax', this.options.max);\n\n\t\t\t\tsliderMaxHandle = document.createElement(\"div\");\n\t\t\t\tsliderMaxHandle.className = \"slider-handle max-slider-handle\";\n\t\t\t\tsliderMaxHandle.setAttribute('role', 'slider');\n\t\t\t\tsliderMaxHandle.setAttribute('aria-valuemin', this.options.min);\n\t\t\t\tsliderMaxHandle.setAttribute('aria-valuemax', this.options.max);\n\n\t\t\t\tsliderTrack.appendChild(sliderTrackLow);\n\t\t\t\tsliderTrack.appendChild(sliderTrackSelection);\n\t\t\t\tsliderTrack.appendChild(sliderTrackHigh);\n\n\t\t\t\t/* Add aria-labelledby to handle's */\n\t\t\t\tvar isLabelledbyArray = Array.isArray(this.options.labelledby);\n\t\t\t\tif (isLabelledbyArray && this.options.labelledby[0]) {\n\t\t\t\t\tsliderMinHandle.setAttribute('aria-labelledby', this.options.labelledby[0]);\n\t\t\t\t}\n\t\t\t\tif (isLabelledbyArray && this.options.labelledby[1]) {\n\t\t\t\t\tsliderMaxHandle.setAttribute('aria-labelledby', this.options.labelledby[1]);\n\t\t\t\t}\n\t\t\t\tif (!isLabelledbyArray && this.options.labelledby) {\n\t\t\t\t\tsliderMinHandle.setAttribute('aria-labelledby', this.options.labelledby);\n\t\t\t\t\tsliderMaxHandle.setAttribute('aria-labelledby', this.options.labelledby);\n\t\t\t\t}\n\n\t\t\t\t/* Create ticks */\n\t\t\t\tthis.ticks = [];\n\t\t\t\tif (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {\n\t\t\t\t\tfor (i = 0; i < this.options.ticks.length; i++) {\n\t\t\t\t\t\tvar tick = document.createElement('div');\n\t\t\t\t\t\ttick.className = 'slider-tick';\n\n\t\t\t\t\t\tthis.ticks.push(tick);\n\t\t\t\t\t\tsliderTrack.appendChild(tick);\n\t\t\t\t\t}\n\n\t\t\t\t\tsliderTrackSelection.className += \" tick-slider-selection\";\n\t\t\t\t}\n\n\t\t\t\tsliderTrack.appendChild(sliderMinHandle);\n\t\t\t\tsliderTrack.appendChild(sliderMaxHandle);\n\n\t\t\t\tthis.tickLabels = [];\n\t\t\t\tif (Array.isArray(this.options.ticks_labels) && this.options.ticks_labels.length > 0) {\n\t\t\t\t\tthis.tickLabelContainer = document.createElement('div');\n\t\t\t\t\tthis.tickLabelContainer.className = 'slider-tick-label-container';\n\n\t\t\t\t\tfor (i = 0; i < this.options.ticks_labels.length; i++) {\n\t\t\t\t\t\tvar label = document.createElement('div');\n\t\t\t\t\t\tvar noTickPositionsSpecified = this.options.ticks_positions.length === 0;\n\t\t\t\t\t\tvar tickLabelsIndex = (this.options.reversed && noTickPositionsSpecified) ? (this.options.ticks_labels.length - (i + 1)) : i;\n\t\t\t\t\t\tlabel.className = 'slider-tick-label';\n\t\t\t\t\t\tlabel.innerHTML = this.options.ticks_labels[tickLabelsIndex];\n\n\t\t\t\t\t\tthis.tickLabels.push(label);\n\t\t\t\t\t\tthis.tickLabelContainer.appendChild(label);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t\tvar createAndAppendTooltipSubElements = function(tooltipElem) {\n\t\t\t\t\tvar arrow = document.createElement(\"div\");\n\t\t\t\t\tarrow.className = \"tooltip-arrow\";\n\n\t\t\t\t\tvar inner = document.createElement(\"div\");\n\t\t\t\t\tinner.className = \"tooltip-inner\";\n\n\t\t\t\t\ttooltipElem.appendChild(arrow);\n\t\t\t\t\ttooltipElem.appendChild(inner);\n\n\t\t\t\t};\n\n\t\t\t\t/* Create tooltip elements */\n\t\t\t\tvar sliderTooltip = document.createElement(\"div\");\n\t\t\t\tsliderTooltip.className = \"tooltip tooltip-main\";\n\t\t\t\tsliderTooltip.setAttribute('role', 'presentation');\n\t\t\t\tcreateAndAppendTooltipSubElements(sliderTooltip);\n\n\t\t\t\tvar sliderTooltipMin = document.createElement(\"div\");\n\t\t\t\tsliderTooltipMin.className = \"tooltip tooltip-min\";\n\t\t\t\tsliderTooltipMin.setAttribute('role', 'presentation');\n\t\t\t\tcreateAndAppendTooltipSubElements(sliderTooltipMin);\n\n\t\t\t\tvar sliderTooltipMax = document.createElement(\"div\");\n\t\t\t\tsliderTooltipMax.className = \"tooltip tooltip-max\";\n\t\t\t\tsliderTooltipMax.setAttribute('role', 'presentation');\n\t\t\t\tcreateAndAppendTooltipSubElements(sliderTooltipMax);\n\n\n\t\t\t\t/* Append components to sliderElem */\n\t\t\t\tthis.sliderElem.appendChild(sliderTrack);\n\t\t\t\tthis.sliderElem.appendChild(sliderTooltip);\n\t\t\t\tthis.sliderElem.appendChild(sliderTooltipMin);\n\t\t\t\tthis.sliderElem.appendChild(sliderTooltipMax);\n\n\t\t\t\tif (this.tickLabelContainer) {\n\t\t\t\t\tthis.sliderElem.appendChild(this.tickLabelContainer);\n\t\t\t\t}\n\n\t\t\t\t/* Append slider element to parent container, right before the original <input> element */\n\t\t\t\tparent.insertBefore(this.sliderElem, this.element);\n\n\t\t\t\t/* Hide original <input> element */\n\t\t\t\tthis.element.style.display = \"none\";\n\t\t\t}\n\t\t\t/* If JQuery exists, cache JQ references */\n\t\t\tif($) {\n\t\t\t\tthis.$element = $(this.element);\n\t\t\t\tthis.$sliderElem = $(this.sliderElem);\n\t\t\t}\n\n\t\t\t/*************************************************\n\n\t\t\t\t\t\t\t\tSetup\n\n\t\t\t**************************************************/\n\t\t\tthis.eventToCallbackMap = {};\n\t\t\tthis.sliderElem.id = this.options.id;\n\n\t\t\tthis.touchCapable = 'ontouchstart' in window || (window.DocumentTouch && document instanceof window.DocumentTouch);\n\n\t\t\tthis.tooltip = this.sliderElem.querySelector('.tooltip-main');\n\t\t\tthis.tooltipInner = this.tooltip.querySelector('.tooltip-inner');\n\n\t\t\tthis.tooltip_min = this.sliderElem.querySelector('.tooltip-min');\n\t\t\tthis.tooltipInner_min = this.tooltip_min.querySelector('.tooltip-inner');\n\n\t\t\tthis.tooltip_max = this.sliderElem.querySelector('.tooltip-max');\n\t\t\tthis.tooltipInner_max= this.tooltip_max.querySelector('.tooltip-inner');\n\n\t\t\tif (SliderScale[this.options.scale]) {\n\t\t\t\tthis.options.scale = SliderScale[this.options.scale];\n\t\t\t}\n\n\t\t\tif (updateSlider === true) {\n\t\t\t\t// Reset classes\n\t\t\t\tthis._removeClass(this.sliderElem, 'slider-horizontal');\n\t\t\t\tthis._removeClass(this.sliderElem, 'slider-vertical');\n\t\t\t\tthis._removeClass(this.tooltip, 'hide');\n\t\t\t\tthis._removeClass(this.tooltip_min, 'hide');\n\t\t\t\tthis._removeClass(this.tooltip_max, 'hide');\n\n\t\t\t\t// Undo existing inline styles for track\n\t\t\t\t[\"left\", \"top\", \"width\", \"height\"].forEach(function(prop) {\n\t\t\t\t\tthis._removeProperty(this.trackLow, prop);\n\t\t\t\t\tthis._removeProperty(this.trackSelection, prop);\n\t\t\t\t\tthis._removeProperty(this.trackHigh, prop);\n\t\t\t\t}, this);\n\n\t\t\t\t// Undo inline styles on handles\n\t\t\t\t[this.handle1, this.handle2].forEach(function(handle) {\n\t\t\t\t\tthis._removeProperty(handle, 'left');\n\t\t\t\t\tthis._removeProperty(handle, 'top');\n\t\t\t\t}, this);\n\n\t\t\t\t// Undo inline styles and classes on tooltips\n\t\t\t\t[this.tooltip, this.tooltip_min, this.tooltip_max].forEach(function(tooltip) {\n\t\t\t\t\tthis._removeProperty(tooltip, 'left');\n\t\t\t\t\tthis._removeProperty(tooltip, 'top');\n\t\t\t\t\tthis._removeProperty(tooltip, 'margin-left');\n\t\t\t\t\tthis._removeProperty(tooltip, 'margin-top');\n\n\t\t\t\t\tthis._removeClass(tooltip, 'right');\n\t\t\t\t\tthis._removeClass(tooltip, 'top');\n\t\t\t\t}, this);\n\t\t\t}\n\n\t\t\tif(this.options.orientation === 'vertical') {\n\t\t\t\tthis._addClass(this.sliderElem,'slider-vertical');\n\t\t\t\tthis.stylePos = 'top';\n\t\t\t\tthis.mousePos = 'pageY';\n\t\t\t\tthis.sizePos = 'offsetHeight';\n\t\t\t} else {\n\t\t\t\tthis._addClass(this.sliderElem, 'slider-horizontal');\n\t\t\t\tthis.sliderElem.style.width = origWidth;\n\t\t\t\tthis.options.orientation = 'horizontal';\n\t\t\t\tthis.stylePos = 'left';\n\t\t\t\tthis.mousePos = 'pageX';\n\t\t\t\tthis.sizePos = 'offsetWidth';\n\n\t\t\t}\n\t\t\tthis._setTooltipPosition();\n\t\t\t/* In case ticks are specified, overwrite the min and max bounds */\n\t\t\tif (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {\n\t\t\t\t\tthis.options.max = Math.max.apply(Math, this.options.ticks);\n\t\t\t\t\tthis.options.min = Math.min.apply(Math, this.options.ticks);\n\t\t\t}\n\n\t\t\tif (Array.isArray(this.options.value)) {\n\t\t\t\tthis.options.range = true;\n\t\t\t\tthis._state.value = this.options.value;\n\t\t\t}\n\t\t\telse if (this.options.range) {\n\t\t\t\t// User wants a range, but value is not an array\n\t\t\t\tthis._state.value = [this.options.value, this.options.max];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._state.value = this.options.value;\n\t\t\t}\n\n\t\t\tthis.trackLow = sliderTrackLow || this.trackLow;\n\t\t\tthis.trackSelection = sliderTrackSelection || this.trackSelection;\n\t\t\tthis.trackHigh = sliderTrackHigh || this.trackHigh;\n\n\t\t\tif (this.options.selection === 'none') {\n\t\t\t\tthis._addClass(this.trackLow, 'hide');\n\t\t\t\tthis._addClass(this.trackSelection, 'hide');\n\t\t\t\tthis._addClass(this.trackHigh, 'hide');\n\t\t\t}\n\n\t\t\tthis.handle1 = sliderMinHandle || this.handle1;\n\t\t\tthis.handle2 = sliderMaxHandle || this.handle2;\n\n\t\t\tif (updateSlider === true) {\n\t\t\t\t// Reset classes\n\t\t\t\tthis._removeClass(this.handle1, 'round triangle');\n\t\t\t\tthis._removeClass(this.handle2, 'round triangle hide');\n\n\t\t\t\tfor (i = 0; i < this.ticks.length; i++) {\n\t\t\t\t\tthis._removeClass(this.ticks[i], 'round triangle hide');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar availableHandleModifiers = ['round', 'triangle', 'custom'];\n\t\t\tvar isValidHandleType = availableHandleModifiers.indexOf(this.options.handle) !== -1;\n\t\t\tif (isValidHandleType) {\n\t\t\t\tthis._addClass(this.handle1, this.options.handle);\n\t\t\t\tthis._addClass(this.handle2, this.options.handle);\n\n\t\t\t\tfor (i = 0; i < this.ticks.length; i++) {\n\t\t\t\t\tthis._addClass(this.ticks[i], this.options.handle);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._state.offset = this._offset(this.sliderElem);\n\t\t\tthis._state.size = this.sliderElem[this.sizePos];\n\t\t\tthis.setValue(this._state.value);\n\n\t\t\t/******************************************\n\n\t\t\t\t\t\tBind Event Listeners\n\n\t\t\t******************************************/\n\n\t\t\t// Bind keyboard handlers\n\t\t\tthis.handle1Keydown = this._keydown.bind(this, 0);\n\t\t\tthis.handle1.addEventListener(\"keydown\", this.handle1Keydown, false);\n\n\t\t\tthis.handle2Keydown = this._keydown.bind(this, 1);\n\t\t\tthis.handle2.addEventListener(\"keydown\", this.handle2Keydown, false);\n\n\t\t\tthis.mousedown = this._mousedown.bind(this);\n\t\t\tif (this.touchCapable) {\n\t\t\t\t// Bind touch handlers\n\t\t\t\tthis.sliderElem.addEventListener(\"touchstart\", this.mousedown, false);\n\t\t\t}\n\t\t\tthis.sliderElem.addEventListener(\"mousedown\", this.mousedown, false);\n\n\n\t\t\t// Bind tooltip-related handlers\n\t\t\tif(this.options.tooltip === 'hide') {\n\t\t\t\tthis._addClass(this.tooltip, 'hide');\n\t\t\t\tthis._addClass(this.tooltip_min, 'hide');\n\t\t\t\tthis._addClass(this.tooltip_max, 'hide');\n\t\t\t}\n\t\t\telse if(this.options.tooltip === 'always') {\n\t\t\t\tthis._showTooltip();\n\t\t\t\tthis._alwaysShowTooltip = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.showTooltip = this._showTooltip.bind(this);\n\t\t\t\tthis.hideTooltip = this._hideTooltip.bind(this);\n\n\t\t\t\tthis.sliderElem.addEventListener(\"mouseenter\", this.showTooltip, false);\n\t\t\t\tthis.sliderElem.addEventListener(\"mouseleave\", this.hideTooltip, false);\n\n\t\t\t\tthis.handle1.addEventListener(\"focus\", this.showTooltip, false);\n\t\t\t\tthis.handle1.addEventListener(\"blur\", this.hideTooltip, false);\n\n\t\t\t\tthis.handle2.addEventListener(\"focus\", this.showTooltip, false);\n\t\t\t\tthis.handle2.addEventListener(\"blur\", this.hideTooltip, false);\n\t\t\t}\n\n\t\t\tif(this.options.enabled) {\n\t\t\t\tthis.enable();\n\t\t\t} else {\n\t\t\t\tthis.disable();\n\t\t\t}\n\t\t}\n\n\n\n\t\t/*************************************************\n\n\t\t\t\t\tINSTANCE PROPERTIES/METHODS\n\n\t\t- Any methods bound to the prototype are considered\n\t\tpart of the plugin's `public` interface\n\n\t\t**************************************************/\n\t\tSlider.prototype = {\n\t\t\t_init: function() {}, // NOTE: Must exist to support bridget\n\n\t\t\tconstructor: Slider,\n\n\t\t\tdefaultOptions: {\n\t\t\t\tid: \"\",\n\t\t\t  min: 0,\n\t\t\t\tmax: 10,\n\t\t\t\tstep: 1,\n\t\t\t\tprecision: 0,\n\t\t\t\torientation: 'horizontal',\n\t\t\t\tvalue: 5,\n\t\t\t\trange: false,\n\t\t\t\tselection: 'before',\n\t\t\t\ttooltip: 'show',\n\t\t\t\ttooltip_split: false,\n\t\t\t\thandle: 'round',\n\t\t\t\treversed: false,\n\t\t\t\tenabled: true,\n\t\t\t\tformatter: function(val) {\n\t\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\t\treturn val[0] + \" : \" + val[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn val;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tnatural_arrow_keys: false,\n\t\t\t\tticks: [],\n\t\t\t\tticks_positions: [],\n\t\t\t\tticks_labels: [],\n\t\t\t\tticks_snap_bounds: 0,\n\t\t\t\tscale: 'linear',\n\t\t\t\tfocus: false,\n\t\t\t\ttooltip_position: null,\n\t\t\t\tlabelledby: null\n\t\t\t},\n\n\t\t\tgetElement: function() {\n\t\t\t\treturn this.sliderElem;\n\t\t\t},\n\n\t\t\tgetValue: function() {\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\treturn this._state.value;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn this._state.value[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tsetValue: function(val, triggerSlideEvent, triggerChangeEvent) {\n\t\t\t\tif (!val) {\n\t\t\t\t\tval = 0;\n\t\t\t\t}\n\t\t\t\tvar oldValue = this.getValue();\n\t\t\t\tthis._state.value = this._validateInputValue(val);\n\t\t\t\tvar applyPrecision = this._applyPrecision.bind(this);\n\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tthis._state.value[0] = applyPrecision(this._state.value[0]);\n\t\t\t\t\tthis._state.value[1] = applyPrecision(this._state.value[1]);\n\n\t\t\t\t\tthis._state.value[0] = Math.max(this.options.min, Math.min(this.options.max, this._state.value[0]));\n\t\t\t\t\tthis._state.value[1] = Math.max(this.options.min, Math.min(this.options.max, this._state.value[1]));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._state.value = applyPrecision(this._state.value);\n\t\t\t\t\tthis._state.value = [ Math.max(this.options.min, Math.min(this.options.max, this._state.value))];\n\t\t\t\t\tthis._addClass(this.handle2, 'hide');\n\t\t\t\t\tif (this.options.selection === 'after') {\n\t\t\t\t\t\tthis._state.value[1] = this.options.max;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._state.value[1] = this.options.min;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.options.max > this.options.min) {\n\t\t\t\t\tthis._state.percentage = [\n\t\t\t\t\t\tthis._toPercentage(this._state.value[0]),\n\t\t\t\t\t\tthis._toPercentage(this._state.value[1]),\n\t\t\t\t\t\tthis.options.step * 100 / (this.options.max - this.options.min)\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tthis._state.percentage = [0, 0, 100];\n\t\t\t\t}\n\n\t\t\t\tthis._layout();\n\t\t\t\tvar newValue = this.options.range ? this._state.value : this._state.value[0];\n\n\t\t\t\tif(triggerSlideEvent === true) {\n\t\t\t\t\tthis._trigger('slide', newValue);\n\t\t\t\t}\n\t\t\t\tif( (oldValue !== newValue) && (triggerChangeEvent === true) ) {\n\t\t\t\t\tthis._trigger('change', {\n\t\t\t\t\t\toldValue: oldValue,\n\t\t\t\t\t\tnewValue: newValue\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis._setDataVal(newValue);\n\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\tdestroy: function(){\n\t\t\t\t// Remove event handlers on slider elements\n\t\t\t\tthis._removeSliderEventHandlers();\n\n\t\t\t\t// Remove the slider from the DOM\n\t\t\t\tthis.sliderElem.parentNode.removeChild(this.sliderElem);\n\t\t\t\t/* Show original <input> element */\n\t\t\t\tthis.element.style.display = \"\";\n\n\t\t\t\t// Clear out custom event bindings\n\t\t\t\tthis._cleanUpEventCallbacksMap();\n\n\t\t\t\t// Remove data values\n\t\t\t\tthis.element.removeAttribute(\"data\");\n\n\t\t\t\t// Remove JQuery handlers/data\n\t\t\t\tif($) {\n\t\t\t\t\tthis._unbindJQueryEventHandlers();\n\t\t\t\t\tthis.$element.removeData('slider');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tdisable: function() {\n\t\t\t\tthis._state.enabled = false;\n\t\t\t\tthis.handle1.removeAttribute(\"tabindex\");\n\t\t\t\tthis.handle2.removeAttribute(\"tabindex\");\n\t\t\t\tthis._addClass(this.sliderElem, 'slider-disabled');\n\t\t\t\tthis._trigger('slideDisabled');\n\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\tenable: function() {\n\t\t\t\tthis._state.enabled = true;\n\t\t\t\tthis.handle1.setAttribute(\"tabindex\", 0);\n\t\t\t\tthis.handle2.setAttribute(\"tabindex\", 0);\n\t\t\t\tthis._removeClass(this.sliderElem, 'slider-disabled');\n\t\t\t\tthis._trigger('slideEnabled');\n\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\ttoggle: function() {\n\t\t\t\tif(this._state.enabled) {\n\t\t\t\t\tthis.disable();\n\t\t\t\t} else {\n\t\t\t\t\tthis.enable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\tisEnabled: function() {\n\t\t\t\treturn this._state.enabled;\n\t\t\t},\n\n\t\t\ton: function(evt, callback) {\n\t\t\t\tthis._bindNonQueryEventHandler(evt, callback);\n\t\t\t\treturn this;\n\t\t\t},\n\n      off: function(evt, callback) {\n          if($) {\n              this.$element.off(evt, callback);\n              this.$sliderElem.off(evt, callback);\n          } else {\n              this._unbindNonQueryEventHandler(evt, callback);\n          }\n      },\n\n\t\t\tgetAttribute: function(attribute) {\n\t\t\t\tif(attribute) {\n\t\t\t\t\treturn this.options[attribute];\n\t\t\t\t} else {\n\t\t\t\t\treturn this.options;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tsetAttribute: function(attribute, value) {\n\t\t\t\tthis.options[attribute] = value;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\trefresh: function() {\n\t\t\t\tthis._removeSliderEventHandlers();\n\t\t\t\tcreateNewSlider.call(this, this.element, this.options);\n\t\t\t\tif($) {\n\t\t\t\t\t// Bind new instance of slider to the element\n\t\t\t\t\t$.data(this.element, 'slider', this);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\trelayout: function() {\n\t\t\t\tthis._layout();\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t/******************************+\n\n\t\t\t\t\t\tHELPERS\n\n\t\t\t- Any method that is not part of the public interface.\n\t\t\t- Place it underneath this comment block and write its signature like so:\n\n\t\t\t  \t\t\t\t\t_fnName : function() {...}\n\n\t\t\t********************************/\n\t\t\t_removeSliderEventHandlers: function() {\n\t\t\t\t// Remove keydown event listeners\n\t\t\t\tthis.handle1.removeEventListener(\"keydown\", this.handle1Keydown, false);\n\t\t\t\tthis.handle2.removeEventListener(\"keydown\", this.handle2Keydown, false);\n\n\t\t\t\tif (this.showTooltip) {\n\t\t\t\t\tthis.handle1.removeEventListener(\"focus\", this.showTooltip, false);\n\t\t\t\t\tthis.handle2.removeEventListener(\"focus\", this.showTooltip, false);\n\t\t\t\t}\n\t\t\t\tif (this.hideTooltip) {\n\t\t\t\t\tthis.handle1.removeEventListener(\"blur\", this.hideTooltip, false);\n\t\t\t\t\tthis.handle2.removeEventListener(\"blur\", this.hideTooltip, false);\n\t\t\t\t}\n\n\t\t\t\t// Remove event listeners from sliderElem\n\t\t\t\tif (this.showTooltip) {\n\t\t\t\t\tthis.sliderElem.removeEventListener(\"mouseenter\", this.showTooltip, false);\n\t\t\t\t}\n\t\t\t\tif (this.hideTooltip) {\n\t\t\t\t\tthis.sliderElem.removeEventListener(\"mouseleave\", this.hideTooltip, false);\n\t\t\t\t}\n\t\t\t\tthis.sliderElem.removeEventListener(\"touchstart\", this.mousedown, false);\n\t\t\t\tthis.sliderElem.removeEventListener(\"mousedown\", this.mousedown, false);\n\t\t\t},\n\t\t\t_bindNonQueryEventHandler: function(evt, callback) {\n\t\t\t\tif(this.eventToCallbackMap[evt] === undefined) {\n\t\t\t\t\tthis.eventToCallbackMap[evt] = [];\n\t\t\t\t}\n\t\t\t\tthis.eventToCallbackMap[evt].push(callback);\n\t\t\t},\n      _unbindNonQueryEventHandler: function(evt, callback) {\n          var callbacks = this.eventToCallbackMap[evt];\n          if(callbacks !== undefined) {\n              for (var i = 0; i < callbacks.length; i++) {\n                  if (callbacks[i] === callback) {\n                      callbacks.splice(i, 1);\n                      break;\n                  }\n              }\n          }\n      },\n\t\t\t_cleanUpEventCallbacksMap: function() {\n\t\t\t\tvar eventNames = Object.keys(this.eventToCallbackMap);\n\t\t\t\tfor(var i = 0; i < eventNames.length; i++) {\n\t\t\t\t\tvar eventName = eventNames[i];\n\t\t\t\t\tthis.eventToCallbackMap[eventName] = null;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_showTooltip: function() {\n\t\t\t\tif (this.options.tooltip_split === false ){\n        \tthis._addClass(this.tooltip, 'in');\n        \tthis.tooltip_min.style.display = 'none';\n        \tthis.tooltip_max.style.display = 'none';\n\t\t    } else {\n          this._addClass(this.tooltip_min, 'in');\n          this._addClass(this.tooltip_max, 'in');\n          this.tooltip.style.display = 'none';\n\t\t    }\n\t\t\t\tthis._state.over = true;\n\t\t\t},\n\t\t\t_hideTooltip: function() {\n\t\t\t\tif (this._state.inDrag === false && this.alwaysShowTooltip !== true) {\n\t\t\t\t\tthis._removeClass(this.tooltip, 'in');\n\t\t\t\t\tthis._removeClass(this.tooltip_min, 'in');\n\t\t\t\t\tthis._removeClass(this.tooltip_max, 'in');\n\t\t\t\t}\n\t\t\t\tthis._state.over = false;\n\t\t\t},\n\t\t\t_layout: function() {\n\t\t\t\tvar positionPercentages;\n\n\t\t\t\tif(this.options.reversed) {\n\t\t\t\t\tpositionPercentages = [ 100 - this._state.percentage[0], this.options.range ? 100 - this._state.percentage[1] : this._state.percentage[1]];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tpositionPercentages = [ this._state.percentage[0], this._state.percentage[1] ];\n\t\t\t\t}\n\n\t\t\t\tthis.handle1.style[this.stylePos] = positionPercentages[0]+'%';\n\t\t\t\tthis.handle1.setAttribute('aria-valuenow', this._state.value[0]);\n\n\t\t\t\tthis.handle2.style[this.stylePos] = positionPercentages[1]+'%';\n\t\t\t\tthis.handle2.setAttribute('aria-valuenow', this._state.value[1]);\n\n\t\t\t\t/* Position ticks and labels */\n\t\t\t\tif (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {\n\n\t\t\t\t\tvar styleSize = this.options.orientation === 'vertical' ? 'height' : 'width';\n\t\t\t\t\tvar styleMargin = this.options.orientation === 'vertical' ? 'marginTop' : 'marginLeft';\n\t\t\t\t\tvar labelSize = this._state.size / (this.options.ticks.length - 1);\n\n\t\t\t\t\tif (this.tickLabelContainer) {\n\t\t\t\t\t\tvar extraMargin = 0;\n\t\t\t\t\t\tif (this.options.ticks_positions.length === 0) {\n\t\t\t\t\t\t\tif (this.options.orientation !== 'vertical') {\n\t\t\t\t\t\t\t\tthis.tickLabelContainer.style[styleMargin] = -labelSize/2 + 'px';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\textraMargin = this.tickLabelContainer.offsetHeight;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t/* Chidren are position absolute, calculate height by finding the max offsetHeight of a child */\n\t\t\t\t\t\t\tfor (i = 0 ; i < this.tickLabelContainer.childNodes.length; i++) {\n\t\t\t\t\t\t\t\tif (this.tickLabelContainer.childNodes[i].offsetHeight > extraMargin) {\n\t\t\t\t\t\t\t\t\textraMargin = this.tickLabelContainer.childNodes[i].offsetHeight;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.options.orientation === 'horizontal') {\n\t\t\t\t\t\t\tthis.sliderElem.style.marginBottom = extraMargin + 'px';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (var i = 0; i < this.options.ticks.length; i++) {\n\n\t\t\t\t\t\tvar percentage = this.options.ticks_positions[i] || this._toPercentage(this.options.ticks[i]);\n\n\t\t\t\t\t\tif (this.options.reversed) {\n\t\t\t\t\t\t\tpercentage = 100 - percentage;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.ticks[i].style[this.stylePos] = percentage + '%';\n\n\t\t\t\t\t\t/* Set class labels to denote whether ticks are in the selection */\n\t\t\t\t\t\tthis._removeClass(this.ticks[i], 'in-selection');\n\t\t\t\t\t\tif (!this.options.range) {\n\t\t\t\t\t\t\tif (this.options.selection === 'after' && percentage >= positionPercentages[0]){\n\t\t\t\t\t\t\t\tthis._addClass(this.ticks[i], 'in-selection');\n\t\t\t\t\t\t\t} else if (this.options.selection === 'before' && percentage <= positionPercentages[0]) {\n\t\t\t\t\t\t\t\tthis._addClass(this.ticks[i], 'in-selection');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (percentage >= positionPercentages[0] && percentage <= positionPercentages[1]) {\n\t\t\t\t\t\t\tthis._addClass(this.ticks[i], 'in-selection');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.tickLabels[i]) {\n\t\t\t\t\t\t\tthis.tickLabels[i].style[styleSize] = labelSize + 'px';\n\n\t\t\t\t\t\t\tif (this.options.orientation !== 'vertical' && this.options.ticks_positions[i] !== undefined) {\n\t\t\t\t\t\t\t\tthis.tickLabels[i].style.position = 'absolute';\n\t\t\t\t\t\t\t\tthis.tickLabels[i].style[this.stylePos] = percentage + '%';\n\t\t\t\t\t\t\t\tthis.tickLabels[i].style[styleMargin] = -labelSize/2 + 'px';\n\t\t\t\t\t\t\t} else if (this.options.orientation === 'vertical') {\n\t\t\t\t\t\t\t\tthis.tickLabels[i].style['marginLeft'] =  this.sliderElem.offsetWidth + 'px';\n\t\t\t\t\t\t\t\tthis.tickLabelContainer.style['marginTop'] = this.sliderElem.offsetWidth / 2 * -1 + 'px';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar formattedTooltipVal;\n\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tformattedTooltipVal = this.options.formatter(this._state.value);\n\t\t\t\t\tthis._setText(this.tooltipInner, formattedTooltipVal);\n\t\t\t\t\tthis.tooltip.style[this.stylePos] = (positionPercentages[1] + positionPercentages[0])/2 + '%';\n\n\t\t\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\t\t\tthis._css(this.tooltip, 'margin-top', -this.tooltip.offsetHeight / 2 + 'px');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._css(this.tooltip, 'margin-left', -this.tooltip.offsetWidth / 2 + 'px');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\t\t\tthis._css(this.tooltip, 'margin-top', -this.tooltip.offsetHeight / 2 + 'px');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._css(this.tooltip, 'margin-left', -this.tooltip.offsetWidth / 2 + 'px');\n\t\t\t\t\t}\n\n\t\t\t\t\tvar innerTooltipMinText = this.options.formatter(this._state.value[0]);\n\t\t\t\t\tthis._setText(this.tooltipInner_min, innerTooltipMinText);\n\n\t\t\t\t\tvar innerTooltipMaxText = this.options.formatter(this._state.value[1]);\n\t\t\t\t\tthis._setText(this.tooltipInner_max, innerTooltipMaxText);\n\n\t\t\t\t\tthis.tooltip_min.style[this.stylePos] = positionPercentages[0] + '%';\n\n\t\t\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\t\t\tthis._css(this.tooltip_min, 'margin-top', -this.tooltip_min.offsetHeight / 2 + 'px');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._css(this.tooltip_min, 'margin-left', -this.tooltip_min.offsetWidth / 2 + 'px');\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.tooltip_max.style[this.stylePos] = positionPercentages[1] + '%';\n\n\t\t\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\t\t\tthis._css(this.tooltip_max, 'margin-top', -this.tooltip_max.offsetHeight / 2 + 'px');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._css(this.tooltip_max, 'margin-left', -this.tooltip_max.offsetWidth / 2 + 'px');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tformattedTooltipVal = this.options.formatter(this._state.value[0]);\n\t\t\t\t\tthis._setText(this.tooltipInner, formattedTooltipVal);\n\n\t\t\t\t\tthis.tooltip.style[this.stylePos] = positionPercentages[0] + '%';\n\t\t\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\t\t\tthis._css(this.tooltip, 'margin-top', -this.tooltip.offsetHeight / 2 + 'px');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._css(this.tooltip, 'margin-left', -this.tooltip.offsetWidth / 2 + 'px');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\t\tthis.trackLow.style.top = '0';\n\t\t\t\t\tthis.trackLow.style.height = Math.min(positionPercentages[0], positionPercentages[1]) +'%';\n\n\t\t\t\t\tthis.trackSelection.style.top = Math.min(positionPercentages[0], positionPercentages[1]) +'%';\n\t\t\t\t\tthis.trackSelection.style.height = Math.abs(positionPercentages[0] - positionPercentages[1]) +'%';\n\n\t\t\t\t\tthis.trackHigh.style.bottom = '0';\n\t\t\t\t\tthis.trackHigh.style.height = (100 - Math.min(positionPercentages[0], positionPercentages[1]) - Math.abs(positionPercentages[0] - positionPercentages[1])) +'%';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.trackLow.style.left = '0';\n\t\t\t\t\tthis.trackLow.style.width = Math.min(positionPercentages[0], positionPercentages[1]) +'%';\n\n\t\t\t\t\tthis.trackSelection.style.left = Math.min(positionPercentages[0], positionPercentages[1]) +'%';\n\t\t\t\t\tthis.trackSelection.style.width = Math.abs(positionPercentages[0] - positionPercentages[1]) +'%';\n\n\t\t\t\t\tthis.trackHigh.style.right = '0';\n\t\t\t\t\tthis.trackHigh.style.width = (100 - Math.min(positionPercentages[0], positionPercentages[1]) - Math.abs(positionPercentages[0] - positionPercentages[1])) +'%';\n\n\t\t\t        var offset_min = this.tooltip_min.getBoundingClientRect();\n\t\t\t        var offset_max = this.tooltip_max.getBoundingClientRect();\n\n\t\t\t        if (offset_min.right > offset_max.left) {\n\t\t\t            this._removeClass(this.tooltip_max, 'top');\n\t\t\t            this._addClass(this.tooltip_max, 'bottom');\n\t\t\t            this.tooltip_max.style.top = 18 + 'px';\n\t\t\t        } else {\n\t\t\t            this._removeClass(this.tooltip_max, 'bottom');\n\t\t\t            this._addClass(this.tooltip_max, 'top');\n\t\t\t            this.tooltip_max.style.top = this.tooltip_min.style.top;\n\t\t\t        }\n\t\t\t\t}\n\t\t\t},\n\t\t\t_removeProperty: function(element, prop) {\n\t\t\t\tif (element.style.removeProperty) {\n\t\t\t\t    element.style.removeProperty(prop);\n\t\t\t\t} else {\n\t\t\t\t    element.style.removeAttribute(prop);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_mousedown: function(ev) {\n\t\t\t\tif(!this._state.enabled) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthis._state.offset = this._offset(this.sliderElem);\n\t\t\t\tthis._state.size = this.sliderElem[this.sizePos];\n\n\t\t\t\tvar percentage = this._getPercentage(ev);\n\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tvar diff1 = Math.abs(this._state.percentage[0] - percentage);\n\t\t\t\t\tvar diff2 = Math.abs(this._state.percentage[1] - percentage);\n\t\t\t\t\tthis._state.dragged = (diff1 < diff2) ? 0 : 1;\n\t\t\t\t} else {\n\t\t\t\t\tthis._state.dragged = 0;\n\t\t\t\t}\n\n\t\t\t\tthis._state.percentage[this._state.dragged] = percentage;\n\t\t\t\tthis._layout();\n\n\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\tdocument.removeEventListener(\"touchmove\", this.mousemove, false);\n\t\t\t\t\tdocument.removeEventListener(\"touchend\", this.mouseup, false);\n\t\t\t\t}\n\n\t\t\t\tif(this.mousemove){\n\t\t\t\t\tdocument.removeEventListener(\"mousemove\", this.mousemove, false);\n\t\t\t\t}\n\t\t\t\tif(this.mouseup){\n\t\t\t\t\tdocument.removeEventListener(\"mouseup\", this.mouseup, false);\n\t\t\t\t}\n\n\t\t\t\tthis.mousemove = this._mousemove.bind(this);\n\t\t\t\tthis.mouseup = this._mouseup.bind(this);\n\n\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\t// Touch: Bind touch events:\n\t\t\t\t\tdocument.addEventListener(\"touchmove\", this.mousemove, false);\n\t\t\t\t\tdocument.addEventListener(\"touchend\", this.mouseup, false);\n\t\t\t\t}\n\t\t\t\t// Bind mouse events:\n\t\t\t\tdocument.addEventListener(\"mousemove\", this.mousemove, false);\n\t\t\t\tdocument.addEventListener(\"mouseup\", this.mouseup, false);\n\n\t\t\t\tthis._state.inDrag = true;\n\t\t\t\tvar newValue = this._calculateValue();\n\n\t\t\t\tthis._trigger('slideStart', newValue);\n\n\t\t\t\tthis._setDataVal(newValue);\n\t\t\t\tthis.setValue(newValue, false, true);\n\n\t\t\t\tthis._pauseEvent(ev);\n\n\t\t\t\tif (this.options.focus) {\n\t\t\t\t\tthis._triggerFocusOnHandle(this._state.dragged);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\t_triggerFocusOnHandle: function(handleIdx) {\n\t\t\t\tif(handleIdx === 0) {\n\t\t\t\t\tthis.handle1.focus();\n\t\t\t\t}\n\t\t\t\tif(handleIdx === 1) {\n\t\t\t\t\tthis.handle2.focus();\n\t\t\t\t}\n\t\t\t},\n\t\t\t_keydown: function(handleIdx, ev) {\n\t\t\t\tif(!this._state.enabled) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar dir;\n\t\t\t\tswitch (ev.keyCode) {\n\t\t\t\t\tcase 37: // left\n\t\t\t\t\tcase 40: // down\n\t\t\t\t\t\tdir = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 39: // right\n\t\t\t\t\tcase 38: // up\n\t\t\t\t\t\tdir = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!dir) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// use natural arrow keys instead of from min to max\n\t\t\t\tif (this.options.natural_arrow_keys) {\n\t\t\t\t\tvar ifVerticalAndNotReversed = (this.options.orientation === 'vertical' && !this.options.reversed);\n\t\t\t\t\tvar ifHorizontalAndReversed = (this.options.orientation === 'horizontal' && this.options.reversed);\n\n\t\t\t\t\tif (ifVerticalAndNotReversed || ifHorizontalAndReversed) {\n\t\t\t\t\t\tdir = -dir;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar val = this._state.value[handleIdx] + dir * this.options.step;\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tval = [ (!handleIdx) ? val : this._state.value[0],\n\t\t\t\t\t\t    ( handleIdx) ? val : this._state.value[1]];\n\t\t\t\t}\n\n\t\t\t\tthis._trigger('slideStart', val);\n\t\t\t\tthis._setDataVal(val);\n\t\t\t\tthis.setValue(val, true, true);\n\n\t\t\t\tthis._setDataVal(val);\n\t\t\t\tthis._trigger('slideStop', val);\n\t\t\t\tthis._layout();\n\n\t\t\t\tthis._pauseEvent(ev);\n\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\t_pauseEvent: function(ev) {\n\t\t\t\tif(ev.stopPropagation) {\n\t\t\t\t\tev.stopPropagation();\n\t\t\t\t}\n\t\t\t    if(ev.preventDefault) {\n\t\t\t    \tev.preventDefault();\n\t\t\t    }\n\t\t\t    ev.cancelBubble=true;\n\t\t\t    ev.returnValue=false;\n\t\t\t},\n\t\t\t_mousemove: function(ev) {\n\t\t\t\tif(!this._state.enabled) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar percentage = this._getPercentage(ev);\n\t\t\t\tthis._adjustPercentageForRangeSliders(percentage);\n\t\t\t\tthis._state.percentage[this._state.dragged] = percentage;\n\t\t\t\tthis._layout();\n\n\t\t\t\tvar val = this._calculateValue(true);\n\t\t\t\tthis.setValue(val, true, true);\n\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\t_adjustPercentageForRangeSliders: function(percentage) {\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tvar precision = this._getNumDigitsAfterDecimalPlace(percentage);\n\t\t\t\t\tprecision = precision ? precision - 1 : 0;\n\t\t\t\t\tvar percentageWithAdjustedPrecision = this._applyToFixedAndParseFloat(percentage, precision);\n\t\t\t\t\tif (this._state.dragged === 0 && this._applyToFixedAndParseFloat(this._state.percentage[1], precision) < percentageWithAdjustedPrecision) {\n\t\t\t\t\t\tthis._state.percentage[0] = this._state.percentage[1];\n\t\t\t\t\t\tthis._state.dragged = 1;\n\t\t\t\t\t} else if (this._state.dragged === 1 && this._applyToFixedAndParseFloat(this._state.percentage[0], precision) > percentageWithAdjustedPrecision) {\n\t\t\t\t\t\tthis._state.percentage[1] = this._state.percentage[0];\n\t\t\t\t\t\tthis._state.dragged = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_mouseup: function() {\n\t\t\t\tif(!this._state.enabled) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\t// Touch: Unbind touch event handlers:\n\t\t\t\t\tdocument.removeEventListener(\"touchmove\", this.mousemove, false);\n\t\t\t\t\tdocument.removeEventListener(\"touchend\", this.mouseup, false);\n\t\t\t\t}\n                // Unbind mouse event handlers:\n                document.removeEventListener(\"mousemove\", this.mousemove, false);\n                document.removeEventListener(\"mouseup\", this.mouseup, false);\n\n\t\t\t\tthis._state.inDrag = false;\n\t\t\t\tif (this._state.over === false) {\n\t\t\t\t\tthis._hideTooltip();\n\t\t\t\t}\n\t\t\t\tvar val = this._calculateValue(true);\n\n\t\t\t\tthis._layout();\n\t\t\t\tthis._setDataVal(val);\n\t\t\t\tthis._trigger('slideStop', val);\n\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\t_calculateValue: function(snapToClosestTick) {\n\t\t\t\tvar val;\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tval = [this.options.min,this.options.max];\n\t\t\t        if (this._state.percentage[0] !== 0){\n\t\t\t            val[0] = this._toValue(this._state.percentage[0]);\n\t\t\t            val[0] = this._applyPrecision(val[0]);\n\t\t\t        }\n\t\t\t        if (this._state.percentage[1] !== 100){\n\t\t\t            val[1] = this._toValue(this._state.percentage[1]);\n\t\t\t            val[1] = this._applyPrecision(val[1]);\n\t\t\t        }\n\t\t\t\t} else {\n\t\t            val = this._toValue(this._state.percentage[0]);\n\t\t\t\t\tval = parseFloat(val);\n\t\t\t\t\tval = this._applyPrecision(val);\n\t\t\t\t}\n\n\t\t\t\tif (snapToClosestTick) {\n\t\t\t\t\tvar min = [val, Infinity];\n\t\t\t\t\tfor (var i = 0; i < this.options.ticks.length; i++) {\n\t\t\t\t\t\tvar diff = Math.abs(this.options.ticks[i] - val);\n\t\t\t\t\t\tif (diff <= min[1]) {\n\t\t\t\t\t\t\tmin = [this.options.ticks[i], diff];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (min[1] <= this.options.ticks_snap_bounds) {\n\t\t\t\t\t\treturn min[0];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn val;\n\t\t\t},\n\t\t\t_applyPrecision: function(val) {\n\t\t\t\tvar precision = this.options.precision || this._getNumDigitsAfterDecimalPlace(this.options.step);\n\t\t\t\treturn this._applyToFixedAndParseFloat(val, precision);\n\t\t\t},\n\t\t\t_getNumDigitsAfterDecimalPlace: function(num) {\n\t\t\t\tvar match = (''+num).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n\t\t\t\tif (!match) { return 0; }\n\t\t\t\treturn Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));\n\t\t\t},\n\t\t\t_applyToFixedAndParseFloat: function(num, toFixedInput) {\n\t\t\t\tvar truncatedNum = num.toFixed(toFixedInput);\n\t\t\t\treturn parseFloat(truncatedNum);\n\t\t\t},\n\t\t\t/*\n\t\t\t\tCredits to Mike Samuel for the following method!\n\t\t\t\tSource: http://stackoverflow.com/questions/10454518/javascript-how-to-retrieve-the-number-of-decimals-of-a-string-number\n\t\t\t*/\n\t\t\t_getPercentage: function(ev) {\n\t\t\t\tif (this.touchCapable && (ev.type === 'touchstart' || ev.type === 'touchmove')) {\n\t\t\t\t\tev = ev.touches[0];\n\t\t\t\t}\n\n\t\t\t\tvar eventPosition = ev[this.mousePos];\n\t\t\t\tvar sliderOffset = this._state.offset[this.stylePos];\n\t\t\t\tvar distanceToSlide = eventPosition - sliderOffset;\n\t\t\t\t// Calculate what percent of the length the slider handle has slid\n\t\t\t\tvar percentage = (distanceToSlide / this._state.size) * 100;\n\t\t\t\tpercentage = Math.round(percentage / this._state.percentage[2]) * this._state.percentage[2];\n\t\t\t\tif (this.options.reversed) {\n\t\t\t\t\tpercentage = 100 - percentage;\n\t\t\t\t}\n\n\t\t\t\t// Make sure the percent is within the bounds of the slider.\n\t\t\t\t// 0% corresponds to the 'min' value of the slide\n\t\t\t\t// 100% corresponds to the 'max' value of the slide\n\t\t\t\treturn Math.max(0, Math.min(100, percentage));\n\t\t\t},\n\t\t\t_validateInputValue: function(val) {\n\t\t\t\tif (typeof val === 'number') {\n\t\t\t\t\treturn val;\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tthis._validateArray(val);\n\t\t\t\t\treturn val;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error( ErrorMsgs.formatInvalidInputErrorMsg(val) );\n\t\t\t\t}\n\t\t\t},\n\t\t\t_validateArray: function(val) {\n\t\t\t\tfor(var i = 0; i < val.length; i++) {\n\t\t\t\t\tvar input =  val[i];\n\t\t\t\t\tif (typeof input !== 'number') { throw new Error( ErrorMsgs.formatInvalidInputErrorMsg(input) ); }\n\t\t\t\t}\n\t\t\t},\n\t\t\t_setDataVal: function(val) {\n\t\t\t\tthis.element.setAttribute('data-value', val);\n\t\t\t\tthis.element.setAttribute('value', val);\n        this.element.value = val;\n\t\t\t},\n\t\t\t_trigger: function(evt, val) {\n\t\t\t\tval = (val || val === 0) ? val : undefined;\n\n\t\t\t\tvar callbackFnArray = this.eventToCallbackMap[evt];\n\t\t\t\tif(callbackFnArray && callbackFnArray.length) {\n\t\t\t\t\tfor(var i = 0; i < callbackFnArray.length; i++) {\n\t\t\t\t\t\tvar callbackFn = callbackFnArray[i];\n\t\t\t\t\t\tcallbackFn(val);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* If JQuery exists, trigger JQuery events */\n\t\t\t\tif($) {\n\t\t\t\t\tthis._triggerJQueryEvent(evt, val);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_triggerJQueryEvent: function(evt, val) {\n\t\t\t\tvar eventData = {\n\t\t\t\t\ttype: evt,\n\t\t\t\t\tvalue: val\n\t\t\t\t};\n\t\t\t\tthis.$element.trigger(eventData);\n\t\t\t\tthis.$sliderElem.trigger(eventData);\n\t\t\t},\n\t\t\t_unbindJQueryEventHandlers: function() {\n\t\t\t\tthis.$element.off();\n\t\t\t\tthis.$sliderElem.off();\n\t\t\t},\n\t\t\t_setText: function(element, text) {\n\t\t\t\tif(typeof element.innerText !== \"undefined\") {\n\t\t\t \t\telement.innerText = text;\n\t\t\t \t} else if(typeof element.textContent !== \"undefined\") {\n\t\t\t \t\telement.textContent = text;\n\t\t\t \t}\n\t\t\t},\n\t\t\t_removeClass: function(element, classString) {\n\t\t\t\tvar classes = classString.split(\" \");\n\t\t\t\tvar newClasses = element.className;\n\n\t\t\t\tfor(var i = 0; i < classes.length; i++) {\n\t\t\t\t\tvar classTag = classes[i];\n\t\t\t\t\tvar regex = new RegExp(\"(?:\\\\s|^)\" + classTag + \"(?:\\\\s|$)\");\n\t\t\t\t\tnewClasses = newClasses.replace(regex, \" \");\n\t\t\t\t}\n\n\t\t\t\telement.className = newClasses.trim();\n\t\t\t},\n\t\t\t_addClass: function(element, classString) {\n\t\t\t\tvar classes = classString.split(\" \");\n\t\t\t\tvar newClasses = element.className;\n\n\t\t\t\tfor(var i = 0; i < classes.length; i++) {\n\t\t\t\t\tvar classTag = classes[i];\n\t\t\t\t\tvar regex = new RegExp(\"(?:\\\\s|^)\" + classTag + \"(?:\\\\s|$)\");\n\t\t\t\t\tvar ifClassExists = regex.test(newClasses);\n\n\t\t\t\t\tif(!ifClassExists) {\n\t\t\t\t\t\tnewClasses += \" \" + classTag;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\telement.className = newClasses.trim();\n\t\t\t},\n\t\t\t_offsetLeft: function(obj){\n\t\t\t\treturn obj.getBoundingClientRect().left;\n\t\t\t},\n\t\t\t_offsetTop: function(obj){\n\t\t\t\tvar offsetTop = obj.offsetTop;\n\t\t\t\twhile((obj = obj.offsetParent) && !isNaN(obj.offsetTop)){\n\t\t\t\t\toffsetTop += obj.offsetTop;\n\t\t\t\t}\n\t\t\t\treturn offsetTop;\n\t\t\t},\n\t\t    _offset: function (obj) {\n\t\t\t\treturn {\n\t\t\t\t\tleft: this._offsetLeft(obj),\n\t\t\t\t\ttop: this._offsetTop(obj)\n\t\t\t\t};\n\t\t    },\n\t\t\t_css: function(elementRef, styleName, value) {\n                if ($) {\n                    $.style(elementRef, styleName, value);\n                } else {\n                    var style = styleName.replace(/^-ms-/, \"ms-\").replace(/-([\\da-z])/gi, function (all, letter) {\n                        return letter.toUpperCase();\n                    });\n                    elementRef.style[style] = value;\n                }\n\t\t\t},\n\t\t\t_toValue: function(percentage) {\n\t\t\t\treturn this.options.scale.toValue.apply(this, [percentage]);\n\t\t\t},\n\t\t\t_toPercentage: function(value) {\n\t\t\t\treturn this.options.scale.toPercentage.apply(this, [value]);\n\t\t\t},\n\t\t\t_setTooltipPosition: function(){\n\t\t\t\tvar tooltips = [this.tooltip, this.tooltip_min, this.tooltip_max];\n\t\t\t\tif (this.options.orientation === 'vertical'){\n\t\t\t\t\tvar tooltipPos = this.options.tooltip_position || 'right';\n\t\t\t\t\tvar oppositeSide = (tooltipPos === 'left') ? 'right' : 'left';\n\t\t\t\t\ttooltips.forEach(function(tooltip){\n\t\t\t\t\t\tthis._addClass(tooltip, tooltipPos);\n\t\t\t\t\t\ttooltip.style[oppositeSide] = '100%';\n\t\t\t\t\t}.bind(this));\n\t\t\t\t} else if(this.options.tooltip_position === 'bottom') {\n\t\t\t\t\ttooltips.forEach(function(tooltip){\n\t\t\t\t\t\tthis._addClass(tooltip, 'bottom');\n\t\t\t\t\t\ttooltip.style.top = 22 + 'px';\n\t\t\t\t\t}.bind(this));\n\t\t\t\t} else {\n\t\t\t\t\ttooltips.forEach(function(tooltip){\n\t\t\t\t\t\tthis._addClass(tooltip, 'top');\n\t\t\t\t\t\ttooltip.style.top = -this.tooltip.outerHeight - 14 + 'px';\n\t\t\t\t\t}.bind(this));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/*********************************\n\n\t\t\tAttach to global namespace\n\n\t\t*********************************/\n\t\tif($) {\n\t\t\tvar namespace = $.fn.slider ? 'bootstrapSlider' : 'slider';\n\t\t\t$.bridget(namespace, Slider);\n\t\t}\n\n\t})( $ );\n\n\treturn Slider;\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/bootstrap-slider/slider.css",
    "content": "/*!\n * Slider for Bootstrap\n *\n * Copyright 2012 Stefan Petre\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n */\n.slider {\n    display: block;\n    vertical-align: middle;\n    position: relative;\n\n}\n.slider.slider-horizontal {\n    width: 100%;\n    height: 20px;\n    margin-bottom: 20px;\n}\n.slider.slider-horizontal:last-of-type {\n    margin-bottom: 0;\n}\n.slider.slider-horizontal .slider-track {\n    height: 10px;\n    width: 100%;\n    margin-top: -5px;\n    top: 50%;\n    left: 0;\n}\n.slider.slider-horizontal .slider-selection,\n.slider.slider-horizontal .slider-track-low,\n.slider.slider-horizontal .slider-track-high {\n    height: 100%;\n    top: 0;\n    bottom: 0;\n}\n.slider.slider-horizontal .slider-tick,\n.slider.slider-horizontal .slider-handle {\n    margin-left: -10px;\n    margin-top: -5px;\n}\n.slider.slider-horizontal .slider-tick.triangle,\n.slider.slider-horizontal .slider-handle.triangle {\n    border-width: 0 10px 10px 10px;\n    width: 0;\n    height: 0;\n    border-bottom-color: #0480be;\n    margin-top: 0;\n}\n.slider.slider-horizontal .slider-tick-label-container {\n    white-space: nowrap;\n    margin-top: 20px;\n}\n.slider.slider-horizontal .slider-tick-label-container .slider-tick-label {\n    padding-top: 4px;\n    display: inline-block;\n    text-align: center;\n}\n.slider.slider-vertical {\n    height: 230px;\n    width: 20px;\n    margin-right: 20px;\n    display: inline-block;\n}\n.slider.slider-vertical:last-of-type {\n    margin-right: 0;\n}\n.slider.slider-vertical .slider-track {\n    width: 10px;\n    height: 100%;\n    margin-left: -5px;\n    left: 50%;\n    top: 0;\n}\n.slider.slider-vertical .slider-selection {\n    width: 100%;\n    left: 0;\n    top: 0;\n    bottom: 0;\n}\n.slider.slider-vertical .slider-track-low,\n.slider.slider-vertical .slider-track-high {\n    width: 100%;\n    left: 0;\n    right: 0;\n}\n.slider.slider-vertical .slider-tick,\n.slider.slider-vertical .slider-handle {\n    margin-left: -5px;\n    margin-top: -10px;\n}\n.slider.slider-vertical .slider-tick.triangle,\n.slider.slider-vertical .slider-handle.triangle {\n    border-width: 10px 0 10px 10px;\n    width: 1px;\n    height: 1px;\n    border-left-color: #0480be;\n    margin-left: 0;\n}\n.slider.slider-vertical .slider-tick-label-container {\n    white-space: nowrap;\n}\n.slider.slider-vertical .slider-tick-label-container .slider-tick-label {\n    padding-left: 4px;\n}\n.slider.slider-disabled .slider-handle {\n    background-image: -webkit-linear-gradient(top, #dfdfdf 0%, #bebebe 100%);\n    background-image: -o-linear-gradient(top, #dfdfdf 0%, #bebebe 100%);\n    background-image: linear-gradient(to bottom, #dfdfdf 0%, #bebebe 100%);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdfdfdf', endColorstr='#ffbebebe', GradientType=0);\n}\n.slider.slider-disabled .slider-track {\n    background-image: -webkit-linear-gradient(top, #e5e5e5 0%, #e9e9e9 100%);\n    background-image: -o-linear-gradient(top, #e5e5e5 0%, #e9e9e9 100%);\n    background-image: linear-gradient(to bottom, #e5e5e5 0%, #e9e9e9 100%);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe5e5e5', endColorstr='#ffe9e9e9', GradientType=0);\n    cursor: not-allowed;\n}\n.slider input {\n    display: none;\n}\n.slider .tooltip.top {\n  margin-top: -36px;\n}\n.slider .tooltip-inner {\n    white-space: nowrap;\n}\n.slider .hide {\n  display: none;\n}\n.slider-track {\n    position: absolute;\n    cursor: pointer;\n    background-color: #f7f7f7;\n    background-image: -moz-linear-gradient(top, #f0f0f0, #f9f9f9);\n    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f0f0f0), to(#f9f9f9));\n    background-image: -webkit-linear-gradient(top, #f0f0f0, #f9f9f9);\n    background-image: -o-linear-gradient(top, #f0f0f0, #f9f9f9);\n    background-image: linear-gradient(to bottom, #f0f0f0, #f9f9f9);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0f0f0', endColorstr='#fff9f9f9', GradientType=0);\n    -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n    -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n    box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    border-radius: 4px;\n}\n.slider-selection {\n    position: absolute;\n    background-color: #f7f7f7;\n    background-image: -moz-linear-gradient(top, #f9f9f9, #f5f5f5);\n    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f9f9f9), to(#f5f5f5));\n    background-image: -webkit-linear-gradient(top, #f9f9f9, #f5f5f5);\n    background-image: -o-linear-gradient(top, #f9f9f9, #f5f5f5);\n    background-image: linear-gradient(to bottom, #f9f9f9, #f5f5f5);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9', endColorstr='#fff5f5f5', GradientType=0);\n    -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n    -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n    box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    border-radius: 4px;\n}\n.slider-selection.tick-slider-selection {\n    background-image: -webkit-linear-gradient(top, #89cdef 0%, #81bfde 100%);\n    background-image: -o-linear-gradient(top, #89cdef 0%, #81bfde 100%);\n    background-image: linear-gradient(to bottom, #89cdef 0%, #81bfde 100%);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff89cdef', endColorstr='#ff81bfde', GradientType=0);\n}\n.slider-track-low,\n.slider-track-high {\n    position: absolute;\n    background: transparent;\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n    border-radius: 4px;\n}\n.slider-handle {\n    position: absolute;\n    width: 20px;\n    height: 20px;\n    background-color: #444;\n    -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);\n    -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);\n    box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);\n    opacity: 1;\n    border: 0px solid transparent;\n}\n.slider-handle.round {\n    -webkit-border-radius: 20px;\n    -moz-border-radius: 20px;\n    border-radius: 20px;\n}\n.slider-handle.triangle {\n    background: transparent none;\n}\n.slider-handle.custom {\n    background: transparent none;\n}\n.slider-handle.custom::before {\n    line-height: 20px;\n    font-size: 20px;\n    content: '\\2605';\n    color: #726204;\n}\n.slider-tick {\n    position: absolute;\n    width: 20px;\n    height: 20px;\n    background-image: -webkit-linear-gradient(top, #f9f9f9 0%, #f5f5f5 100%);\n    background-image: -o-linear-gradient(top, #f9f9f9 0%, #f5f5f5 100%);\n    background-image: linear-gradient(to bottom, #f9f9f9 0%, #f5f5f5 100%);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9', endColorstr='#fff5f5f5', GradientType=0);\n    -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n    box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n    filter: none;\n    opacity: 0.8;\n    border: 0px solid transparent;\n}\n.slider-tick.round {\n    border-radius: 50%;\n}\n.slider-tick.triangle {\n    background: transparent none;\n}\n.slider-tick.custom {\n    background: transparent none;\n}\n.slider-tick.custom::before {\n    line-height: 20px;\n    font-size: 20px;\n    content: '\\2605';\n    color: #726204;\n}\n.slider-tick.in-selection {\n    background-image: -webkit-linear-gradient(top, #89cdef 0%, #81bfde 100%);\n    background-image: -o-linear-gradient(top, #89cdef 0%, #81bfde 100%);\n    background-image: linear-gradient(to bottom, #89cdef 0%, #81bfde 100%);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff89cdef', endColorstr='#ff81bfde', GradientType=0);\n    opacity: 1;\n}\n.slider-disabled .slider-selection {\n    opacity: 0.5;\n}\n\n#red .slider-selection {\n    background: #f56954;\n}\n\n#blue .slider-selection {\n    background: #3c8dbc;\n}\n\n#green .slider-selection {\n    background: #00a65a;\n}\n\n#yellow .slider-selection {\n    background: #f39c12;\n}\n\n#aqua .slider-selection {\n    background: #00c0ef;\n}\n\n#purple .slider-selection {\n    background: #932ab6;\n}"
  },
  {
    "path": "public/adminlte/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.js",
    "content": "// TODO: in future try to replace most inline compability checks with polyfills for code readability \n\n// element.textContent polyfill.\n// Unsupporting browsers: IE8\n\nif (Object.defineProperty && Object.getOwnPropertyDescriptor && Object.getOwnPropertyDescriptor(Element.prototype, \"textContent\") && !Object.getOwnPropertyDescriptor(Element.prototype, \"textContent\").get) {\n\t(function() {\n\t\tvar innerText = Object.getOwnPropertyDescriptor(Element.prototype, \"innerText\");\n\t\tObject.defineProperty(Element.prototype, \"textContent\",\n\t\t\t{\n\t\t\t\tget: function() {\n\t\t\t\t\treturn innerText.get.call(this);\n\t\t\t\t},\n\t\t\t\tset: function(s) {\n\t\t\t\t\treturn innerText.set.call(this, s);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t})();\n}\n\n// isArray polyfill for ie8\nif(!Array.isArray) {\n  Array.isArray = function(arg) {\n    return Object.prototype.toString.call(arg) === '[object Array]';\n  };\n};/**\n * @license wysihtml5x v0.4.15\n * https://github.com/Edicy/wysihtml5\n *\n * Author: Christopher Blum (https://github.com/tiff)\n * Secondary author of extended features: Oliver Pulges (https://github.com/pulges)\n *\n * Copyright (C) 2012 XING AG\n * Licensed under the MIT license (MIT)\n *\n */\nvar wysihtml5 = {\n  version: \"0.4.15\",\n\n  // namespaces\n  commands:   {},\n  dom:        {},\n  quirks:     {},\n  toolbar:    {},\n  lang:       {},\n  selection:  {},\n  views:      {},\n\n  INVISIBLE_SPACE: \"\\uFEFF\",\n\n  EMPTY_FUNCTION: function() {},\n\n  ELEMENT_NODE: 1,\n  TEXT_NODE:    3,\n\n  BACKSPACE_KEY:  8,\n  ENTER_KEY:      13,\n  ESCAPE_KEY:     27,\n  SPACE_KEY:      32,\n  DELETE_KEY:     46\n};\n;/**\n * Rangy, a cross-browser JavaScript range and selection library\n * http://code.google.com/p/rangy/\n *\n * Copyright 2014, Tim Down\n * Licensed under the MIT license.\n * Version: 1.3alpha.20140804\n * Build date: 4 August 2014\n */\n\n(function(factory, global) {\n    if (typeof define == \"function\" && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(factory);\n/*\n    TODO: look into this properly.\n    \n    } else if (typeof exports == \"object\") {\n        // Node/CommonJS style for Browserify\n        module.exports = factory;\n*/\n    } else {\n        // No AMD or CommonJS support so we place Rangy in a global variable\n        global.rangy = factory();\n    }\n})(function() {\n\n    var OBJECT = \"object\", FUNCTION = \"function\", UNDEFINED = \"undefined\";\n\n    // Minimal set of properties required for DOM Level 2 Range compliance. Comparison constants such as START_TO_START\n    // are omitted because ranges in KHTML do not have them but otherwise work perfectly well. See issue 113.\n    var domRangeProperties = [\"startContainer\", \"startOffset\", \"endContainer\", \"endOffset\", \"collapsed\",\n        \"commonAncestorContainer\"];\n\n    // Minimal set of methods required for DOM Level 2 Range compliance\n    var domRangeMethods = [\"setStart\", \"setStartBefore\", \"setStartAfter\", \"setEnd\", \"setEndBefore\",\n        \"setEndAfter\", \"collapse\", \"selectNode\", \"selectNodeContents\", \"compareBoundaryPoints\", \"deleteContents\",\n        \"extractContents\", \"cloneContents\", \"insertNode\", \"surroundContents\", \"cloneRange\", \"toString\", \"detach\"];\n\n    var textRangeProperties = [\"boundingHeight\", \"boundingLeft\", \"boundingTop\", \"boundingWidth\", \"htmlText\", \"text\"];\n\n    // Subset of TextRange's full set of methods that we're interested in\n    var textRangeMethods = [\"collapse\", \"compareEndPoints\", \"duplicate\", \"moveToElementText\", \"parentElement\", \"select\",\n        \"setEndPoint\", \"getBoundingClientRect\"];\n\n    /*----------------------------------------------------------------------------------------------------------------*/\n\n    // Trio of functions taken from Peter Michaux's article:\n    // http://peter.michaux.ca/articles/feature-detection-state-of-the-art-browser-scripting\n    function isHostMethod(o, p) {\n        var t = typeof o[p];\n        return t == FUNCTION || (!!(t == OBJECT && o[p])) || t == \"unknown\";\n    }\n\n    function isHostObject(o, p) {\n        return !!(typeof o[p] == OBJECT && o[p]);\n    }\n\n    function isHostProperty(o, p) {\n        return typeof o[p] != UNDEFINED;\n    }\n\n    // Creates a convenience function to save verbose repeated calls to tests functions\n    function createMultiplePropertyTest(testFunc) {\n        return function(o, props) {\n            var i = props.length;\n            while (i--) {\n                if (!testFunc(o, props[i])) {\n                    return false;\n                }\n            }\n            return true;\n        };\n    }\n\n    // Next trio of functions are a convenience to save verbose repeated calls to previous two functions\n    var areHostMethods = createMultiplePropertyTest(isHostMethod);\n    var areHostObjects = createMultiplePropertyTest(isHostObject);\n    var areHostProperties = createMultiplePropertyTest(isHostProperty);\n\n    function isTextRange(range) {\n        return range && areHostMethods(range, textRangeMethods) && areHostProperties(range, textRangeProperties);\n    }\n\n    function getBody(doc) {\n        return isHostObject(doc, \"body\") ? doc.body : doc.getElementsByTagName(\"body\")[0];\n    }\n\n    var modules = {};\n\n    var api = {\n        version: \"1.3alpha.20140804\",\n        initialized: false,\n        supported: true,\n\n        util: {\n            isHostMethod: isHostMethod,\n            isHostObject: isHostObject,\n            isHostProperty: isHostProperty,\n            areHostMethods: areHostMethods,\n            areHostObjects: areHostObjects,\n            areHostProperties: areHostProperties,\n            isTextRange: isTextRange,\n            getBody: getBody\n        },\n\n        features: {},\n\n        modules: modules,\n        config: {\n            alertOnFail: true,\n            alertOnWarn: false,\n            preferTextRange: false,\n            autoInitialize: (typeof rangyAutoInitialize == UNDEFINED) ? true : rangyAutoInitialize\n        }\n    };\n\n    function consoleLog(msg) {\n        if (isHostObject(window, \"console\") && isHostMethod(window.console, \"log\")) {\n            window.console.log(msg);\n        }\n    }\n\n    function alertOrLog(msg, shouldAlert) {\n        if (shouldAlert) {\n            window.alert(msg);\n        } else  {\n            consoleLog(msg);\n        }\n    }\n\n    function fail(reason) {\n        api.initialized = true;\n        api.supported = false;\n        alertOrLog(\"Rangy is not supported on this page in your browser. Reason: \" + reason, api.config.alertOnFail);\n    }\n\n    api.fail = fail;\n\n    function warn(msg) {\n        alertOrLog(\"Rangy warning: \" + msg, api.config.alertOnWarn);\n    }\n\n    api.warn = warn;\n\n    // Add utility extend() method\n    if ({}.hasOwnProperty) {\n        api.util.extend = function(obj, props, deep) {\n            var o, p;\n            for (var i in props) {\n                if (props.hasOwnProperty(i)) {\n                    o = obj[i];\n                    p = props[i];\n                    if (deep && o !== null && typeof o == \"object\" && p !== null && typeof p == \"object\") {\n                        api.util.extend(o, p, true);\n                    }\n                    obj[i] = p;\n                }\n            }\n            // Special case for toString, which does not show up in for...in loops in IE <= 8\n            if (props.hasOwnProperty(\"toString\")) {\n                obj.toString = props.toString;\n            }\n            return obj;\n        };\n    } else {\n        fail(\"hasOwnProperty not supported\");\n    }\n\n    // Test whether Array.prototype.slice can be relied on for NodeLists and use an alternative toArray() if not\n    (function() {\n        var el = document.createElement(\"div\");\n        el.appendChild(document.createElement(\"span\"));\n        var slice = [].slice;\n        var toArray;\n        try {\n            if (slice.call(el.childNodes, 0)[0].nodeType == 1) {\n                toArray = function(arrayLike) {\n                    return slice.call(arrayLike, 0);\n                };\n            }\n        } catch (e) {}\n\n        if (!toArray) {\n            toArray = function(arrayLike) {\n                var arr = [];\n                for (var i = 0, len = arrayLike.length; i < len; ++i) {\n                    arr[i] = arrayLike[i];\n                }\n                return arr;\n            };\n        }\n\n        api.util.toArray = toArray;\n    })();\n\n\n    // Very simple event handler wrapper function that doesn't attempt to solve issues such as \"this\" handling or\n    // normalization of event properties\n    var addListener;\n    if (isHostMethod(document, \"addEventListener\")) {\n        addListener = function(obj, eventType, listener) {\n            obj.addEventListener(eventType, listener, false);\n        };\n    } else if (isHostMethod(document, \"attachEvent\")) {\n        addListener = function(obj, eventType, listener) {\n            obj.attachEvent(\"on\" + eventType, listener);\n        };\n    } else {\n        fail(\"Document does not have required addEventListener or attachEvent method\");\n    }\n\n    api.util.addListener = addListener;\n\n    var initListeners = [];\n\n    function getErrorDesc(ex) {\n        return ex.message || ex.description || String(ex);\n    }\n\n    // Initialization\n    function init() {\n        if (api.initialized) {\n            return;\n        }\n        var testRange;\n        var implementsDomRange = false, implementsTextRange = false;\n\n        // First, perform basic feature tests\n\n        if (isHostMethod(document, \"createRange\")) {\n            testRange = document.createRange();\n            if (areHostMethods(testRange, domRangeMethods) && areHostProperties(testRange, domRangeProperties)) {\n                implementsDomRange = true;\n            }\n        }\n\n        var body = getBody(document);\n        if (!body || body.nodeName.toLowerCase() != \"body\") {\n            fail(\"No body element found\");\n            return;\n        }\n\n        if (body && isHostMethod(body, \"createTextRange\")) {\n            testRange = body.createTextRange();\n            if (isTextRange(testRange)) {\n                implementsTextRange = true;\n            }\n        }\n\n        if (!implementsDomRange && !implementsTextRange) {\n            fail(\"Neither Range nor TextRange are available\");\n            return;\n        }\n\n        api.initialized = true;\n        api.features = {\n            implementsDomRange: implementsDomRange,\n            implementsTextRange: implementsTextRange\n        };\n\n        // Initialize modules\n        var module, errorMessage;\n        for (var moduleName in modules) {\n            if ( (module = modules[moduleName]) instanceof Module ) {\n                module.init(module, api);\n            }\n        }\n\n        // Call init listeners\n        for (var i = 0, len = initListeners.length; i < len; ++i) {\n            try {\n                initListeners[i](api);\n            } catch (ex) {\n                errorMessage = \"Rangy init listener threw an exception. Continuing. Detail: \" + getErrorDesc(ex);\n                consoleLog(errorMessage);\n            }\n        }\n    }\n\n    // Allow external scripts to initialize this library in case it's loaded after the document has loaded\n    api.init = init;\n\n    // Execute listener immediately if already initialized\n    api.addInitListener = function(listener) {\n        if (api.initialized) {\n            listener(api);\n        } else {\n            initListeners.push(listener);\n        }\n    };\n\n    var shimListeners = [];\n\n    api.addShimListener = function(listener) {\n        shimListeners.push(listener);\n    };\n\n    function shim(win) {\n        win = win || window;\n        init();\n\n        // Notify listeners\n        for (var i = 0, len = shimListeners.length; i < len; ++i) {\n            shimListeners[i](win);\n        }\n    }\n\n    api.shim = api.createMissingNativeApi = shim;\n\n    function Module(name, dependencies, initializer) {\n        this.name = name;\n        this.dependencies = dependencies;\n        this.initialized = false;\n        this.supported = false;\n        this.initializer = initializer;\n    }\n\n    Module.prototype = {\n        init: function() {\n            var requiredModuleNames = this.dependencies || [];\n            for (var i = 0, len = requiredModuleNames.length, requiredModule, moduleName; i < len; ++i) {\n                moduleName = requiredModuleNames[i];\n\n                requiredModule = modules[moduleName];\n                if (!requiredModule || !(requiredModule instanceof Module)) {\n                    throw new Error(\"required module '\" + moduleName + \"' not found\");\n                }\n\n                requiredModule.init();\n\n                if (!requiredModule.supported) {\n                    throw new Error(\"required module '\" + moduleName + \"' not supported\");\n                }\n            }\n            \n            // Now run initializer\n            this.initializer(this);\n        },\n        \n        fail: function(reason) {\n            this.initialized = true;\n            this.supported = false;\n            throw new Error(\"Module '\" + this.name + \"' failed to load: \" + reason);\n        },\n\n        warn: function(msg) {\n            api.warn(\"Module \" + this.name + \": \" + msg);\n        },\n\n        deprecationNotice: function(deprecated, replacement) {\n            api.warn(\"DEPRECATED: \" + deprecated + \" in module \" + this.name + \"is deprecated. Please use \" +\n                replacement + \" instead\");\n        },\n\n        createError: function(msg) {\n            return new Error(\"Error in Rangy \" + this.name + \" module: \" + msg);\n        }\n    };\n    \n    function createModule(isCore, name, dependencies, initFunc) {\n        var newModule = new Module(name, dependencies, function(module) {\n            if (!module.initialized) {\n                module.initialized = true;\n                try {\n                    initFunc(api, module);\n                    module.supported = true;\n                } catch (ex) {\n                    var errorMessage = \"Module '\" + name + \"' failed to load: \" + getErrorDesc(ex);\n                    consoleLog(errorMessage);\n                }\n            }\n        });\n        modules[name] = newModule;\n    }\n\n    api.createModule = function(name) {\n        // Allow 2 or 3 arguments (second argument is an optional array of dependencies)\n        var initFunc, dependencies;\n        if (arguments.length == 2) {\n            initFunc = arguments[1];\n            dependencies = [];\n        } else {\n            initFunc = arguments[2];\n            dependencies = arguments[1];\n        }\n\n        var module = createModule(false, name, dependencies, initFunc);\n\n        // Initialize the module immediately if the core is already initialized\n        if (api.initialized) {\n            module.init();\n        }\n    };\n\n    api.createCoreModule = function(name, dependencies, initFunc) {\n        createModule(true, name, dependencies, initFunc);\n    };\n\n    /*----------------------------------------------------------------------------------------------------------------*/\n\n    // Ensure rangy.rangePrototype and rangy.selectionPrototype are available immediately\n\n    function RangePrototype() {}\n    api.RangePrototype = RangePrototype;\n    api.rangePrototype = new RangePrototype();\n\n    function SelectionPrototype() {}\n    api.selectionPrototype = new SelectionPrototype();\n\n    /*----------------------------------------------------------------------------------------------------------------*/\n\n    // Wait for document to load before running tests\n\n    var docReady = false;\n\n    var loadHandler = function(e) {\n        if (!docReady) {\n            docReady = true;\n            if (!api.initialized && api.config.autoInitialize) {\n                init();\n            }\n        }\n    };\n\n    // Test whether we have window and document objects that we will need\n    if (typeof window == UNDEFINED) {\n        fail(\"No window found\");\n        return;\n    }\n    if (typeof document == UNDEFINED) {\n        fail(\"No document found\");\n        return;\n    }\n\n    if (isHostMethod(document, \"addEventListener\")) {\n        document.addEventListener(\"DOMContentLoaded\", loadHandler, false);\n    }\n\n    // Add a fallback in case the DOMContentLoaded event isn't supported\n    addListener(window, \"load\", loadHandler);\n\n    /*----------------------------------------------------------------------------------------------------------------*/\n    \n    // DOM utility methods used by Rangy\n    api.createCoreModule(\"DomUtil\", [], function(api, module) {\n        var UNDEF = \"undefined\";\n        var util = api.util;\n\n        // Perform feature tests\n        if (!util.areHostMethods(document, [\"createDocumentFragment\", \"createElement\", \"createTextNode\"])) {\n            module.fail(\"document missing a Node creation method\");\n        }\n\n        if (!util.isHostMethod(document, \"getElementsByTagName\")) {\n            module.fail(\"document missing getElementsByTagName method\");\n        }\n\n        var el = document.createElement(\"div\");\n        if (!util.areHostMethods(el, [\"insertBefore\", \"appendChild\", \"cloneNode\"] ||\n                !util.areHostObjects(el, [\"previousSibling\", \"nextSibling\", \"childNodes\", \"parentNode\"]))) {\n            module.fail(\"Incomplete Element implementation\");\n        }\n\n        // innerHTML is required for Range's createContextualFragment method\n        if (!util.isHostProperty(el, \"innerHTML\")) {\n            module.fail(\"Element is missing innerHTML property\");\n        }\n\n        var textNode = document.createTextNode(\"test\");\n        if (!util.areHostMethods(textNode, [\"splitText\", \"deleteData\", \"insertData\", \"appendData\", \"cloneNode\"] ||\n                !util.areHostObjects(el, [\"previousSibling\", \"nextSibling\", \"childNodes\", \"parentNode\"]) ||\n                !util.areHostProperties(textNode, [\"data\"]))) {\n            module.fail(\"Incomplete Text Node implementation\");\n        }\n\n        /*----------------------------------------------------------------------------------------------------------------*/\n\n        // Removed use of indexOf because of a bizarre bug in Opera that is thrown in one of the Acid3 tests. I haven't been\n        // able to replicate it outside of the test. The bug is that indexOf returns -1 when called on an Array that\n        // contains just the document as a single element and the value searched for is the document.\n        var arrayContains = /*Array.prototype.indexOf ?\n            function(arr, val) {\n                return arr.indexOf(val) > -1;\n            }:*/\n\n            function(arr, val) {\n                var i = arr.length;\n                while (i--) {\n                    if (arr[i] === val) {\n                        return true;\n                    }\n                }\n                return false;\n            };\n\n        // Opera 11 puts HTML elements in the null namespace, it seems, and IE 7 has undefined namespaceURI\n        function isHtmlNamespace(node) {\n            var ns;\n            return typeof node.namespaceURI == UNDEF || ((ns = node.namespaceURI) === null || ns == \"http://www.w3.org/1999/xhtml\");\n        }\n\n        function parentElement(node) {\n            var parent = node.parentNode;\n            return (parent.nodeType == 1) ? parent : null;\n        }\n\n        function getNodeIndex(node) {\n            var i = 0;\n            while( (node = node.previousSibling) ) {\n                ++i;\n            }\n            return i;\n        }\n\n        function getNodeLength(node) {\n            switch (node.nodeType) {\n                case 7:\n                case 10:\n                    return 0;\n                case 3:\n                case 8:\n                    return node.length;\n                default:\n                    return node.childNodes.length;\n            }\n        }\n\n        function getCommonAncestor(node1, node2) {\n            var ancestors = [], n;\n            for (n = node1; n; n = n.parentNode) {\n                ancestors.push(n);\n            }\n\n            for (n = node2; n; n = n.parentNode) {\n                if (arrayContains(ancestors, n)) {\n                    return n;\n                }\n            }\n\n            return null;\n        }\n\n        function isAncestorOf(ancestor, descendant, selfIsAncestor) {\n            var n = selfIsAncestor ? descendant : descendant.parentNode;\n            while (n) {\n                if (n === ancestor) {\n                    return true;\n                } else {\n                    n = n.parentNode;\n                }\n            }\n            return false;\n        }\n\n        function isOrIsAncestorOf(ancestor, descendant) {\n            return isAncestorOf(ancestor, descendant, true);\n        }\n\n        function getClosestAncestorIn(node, ancestor, selfIsAncestor) {\n            var p, n = selfIsAncestor ? node : node.parentNode;\n            while (n) {\n                p = n.parentNode;\n                if (p === ancestor) {\n                    return n;\n                }\n                n = p;\n            }\n            return null;\n        }\n\n        function isCharacterDataNode(node) {\n            var t = node.nodeType;\n            return t == 3 || t == 4 || t == 8 ; // Text, CDataSection or Comment\n        }\n\n        function isTextOrCommentNode(node) {\n            if (!node) {\n                return false;\n            }\n            var t = node.nodeType;\n            return t == 3 || t == 8 ; // Text or Comment\n        }\n\n        function insertAfter(node, precedingNode) {\n            var nextNode = precedingNode.nextSibling, parent = precedingNode.parentNode;\n            if (nextNode) {\n                parent.insertBefore(node, nextNode);\n            } else {\n                parent.appendChild(node);\n            }\n            return node;\n        }\n\n        // Note that we cannot use splitText() because it is bugridden in IE 9.\n        function splitDataNode(node, index, positionsToPreserve) {\n            var newNode = node.cloneNode(false);\n            newNode.deleteData(0, index);\n            node.deleteData(index, node.length - index);\n            insertAfter(newNode, node);\n\n            // Preserve positions\n            if (positionsToPreserve) {\n                for (var i = 0, position; position = positionsToPreserve[i++]; ) {\n                    // Handle case where position was inside the portion of node after the split point\n                    if (position.node == node && position.offset > index) {\n                        position.node = newNode;\n                        position.offset -= index;\n                    }\n                    // Handle the case where the position is a node offset within node's parent\n                    else if (position.node == node.parentNode && position.offset > getNodeIndex(node)) {\n                        ++position.offset;\n                    }\n                }\n            }\n            return newNode;\n        }\n\n        function getDocument(node) {\n            if (node.nodeType == 9) {\n                return node;\n            } else if (typeof node.ownerDocument != UNDEF) {\n                return node.ownerDocument;\n            } else if (typeof node.document != UNDEF) {\n                return node.document;\n            } else if (node.parentNode) {\n                return getDocument(node.parentNode);\n            } else {\n                throw module.createError(\"getDocument: no document found for node\");\n            }\n        }\n\n        function getWindow(node) {\n            var doc = getDocument(node);\n            if (typeof doc.defaultView != UNDEF) {\n                return doc.defaultView;\n            } else if (typeof doc.parentWindow != UNDEF) {\n                return doc.parentWindow;\n            } else {\n                throw module.createError(\"Cannot get a window object for node\");\n            }\n        }\n\n        function getIframeDocument(iframeEl) {\n            if (typeof iframeEl.contentDocument != UNDEF) {\n                return iframeEl.contentDocument;\n            } else if (typeof iframeEl.contentWindow != UNDEF) {\n                return iframeEl.contentWindow.document;\n            } else {\n                throw module.createError(\"getIframeDocument: No Document object found for iframe element\");\n            }\n        }\n\n        function getIframeWindow(iframeEl) {\n            if (typeof iframeEl.contentWindow != UNDEF) {\n                return iframeEl.contentWindow;\n            } else if (typeof iframeEl.contentDocument != UNDEF) {\n                return iframeEl.contentDocument.defaultView;\n            } else {\n                throw module.createError(\"getIframeWindow: No Window object found for iframe element\");\n            }\n        }\n\n        // This looks bad. Is it worth it?\n        function isWindow(obj) {\n            return obj && util.isHostMethod(obj, \"setTimeout\") && util.isHostObject(obj, \"document\");\n        }\n\n        function getContentDocument(obj, module, methodName) {\n            var doc;\n\n            if (!obj) {\n                doc = document;\n            }\n\n            // Test if a DOM node has been passed and obtain a document object for it if so\n            else if (util.isHostProperty(obj, \"nodeType\")) {\n                doc = (obj.nodeType == 1 && obj.tagName.toLowerCase() == \"iframe\") ?\n                    getIframeDocument(obj) : getDocument(obj);\n            }\n\n            // Test if the doc parameter appears to be a Window object\n            else if (isWindow(obj)) {\n                doc = obj.document;\n            }\n\n            if (!doc) {\n                throw module.createError(methodName + \"(): Parameter must be a Window object or DOM node\");\n            }\n\n            return doc;\n        }\n\n        function getRootContainer(node) {\n            var parent;\n            while ( (parent = node.parentNode) ) {\n                node = parent;\n            }\n            return node;\n        }\n\n        function comparePoints(nodeA, offsetA, nodeB, offsetB) {\n            // See http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Comparing\n            var nodeC, root, childA, childB, n;\n            if (nodeA == nodeB) {\n                // Case 1: nodes are the same\n                return offsetA === offsetB ? 0 : (offsetA < offsetB) ? -1 : 1;\n            } else if ( (nodeC = getClosestAncestorIn(nodeB, nodeA, true)) ) {\n                // Case 2: node C (container B or an ancestor) is a child node of A\n                return offsetA <= getNodeIndex(nodeC) ? -1 : 1;\n            } else if ( (nodeC = getClosestAncestorIn(nodeA, nodeB, true)) ) {\n                // Case 3: node C (container A or an ancestor) is a child node of B\n                return getNodeIndex(nodeC) < offsetB  ? -1 : 1;\n            } else {\n                root = getCommonAncestor(nodeA, nodeB);\n                if (!root) {\n                    throw new Error(\"comparePoints error: nodes have no common ancestor\");\n                }\n\n                // Case 4: containers are siblings or descendants of siblings\n                childA = (nodeA === root) ? root : getClosestAncestorIn(nodeA, root, true);\n                childB = (nodeB === root) ? root : getClosestAncestorIn(nodeB, root, true);\n\n                if (childA === childB) {\n                    // This shouldn't be possible\n                    throw module.createError(\"comparePoints got to case 4 and childA and childB are the same!\");\n                } else {\n                    n = root.firstChild;\n                    while (n) {\n                        if (n === childA) {\n                            return -1;\n                        } else if (n === childB) {\n                            return 1;\n                        }\n                        n = n.nextSibling;\n                    }\n                }\n            }\n        }\n\n        /*----------------------------------------------------------------------------------------------------------------*/\n\n        // Test for IE's crash (IE 6/7) or exception (IE >= 8) when a reference to garbage-collected text node is queried\n        var crashyTextNodes = false;\n\n        function isBrokenNode(node) {\n            var n;\n            try {\n                n = node.parentNode;\n                return false;\n            } catch (e) {\n                return true;\n            }\n        }\n\n        (function() {\n            var el = document.createElement(\"b\");\n            el.innerHTML = \"1\";\n            var textNode = el.firstChild;\n            el.innerHTML = \"<br>\";\n            crashyTextNodes = isBrokenNode(textNode);\n\n            api.features.crashyTextNodes = crashyTextNodes;\n        })();\n\n        /*----------------------------------------------------------------------------------------------------------------*/\n\n        function inspectNode(node) {\n            if (!node) {\n                return \"[No node]\";\n            }\n            if (crashyTextNodes && isBrokenNode(node)) {\n                return \"[Broken node]\";\n            }\n            if (isCharacterDataNode(node)) {\n                return '\"' + node.data + '\"';\n            }\n            if (node.nodeType == 1) {\n                var idAttr = node.id ? ' id=\"' + node.id + '\"' : \"\";\n                return \"<\" + node.nodeName + idAttr + \">[index:\" + getNodeIndex(node) + \",length:\" + node.childNodes.length + \"][\" + (node.innerHTML || \"[innerHTML not supported]\").slice(0, 25) + \"]\";\n            }\n            return node.nodeName;\n        }\n\n        function fragmentFromNodeChildren(node) {\n            var fragment = getDocument(node).createDocumentFragment(), child;\n            while ( (child = node.firstChild) ) {\n                fragment.appendChild(child);\n            }\n            return fragment;\n        }\n\n        var getComputedStyleProperty;\n        if (typeof window.getComputedStyle != UNDEF) {\n            getComputedStyleProperty = function(el, propName) {\n                return getWindow(el).getComputedStyle(el, null)[propName];\n            };\n        } else if (typeof document.documentElement.currentStyle != UNDEF) {\n            getComputedStyleProperty = function(el, propName) {\n                return el.currentStyle[propName];\n            };\n        } else {\n            module.fail(\"No means of obtaining computed style properties found\");\n        }\n\n        function NodeIterator(root) {\n            this.root = root;\n            this._next = root;\n        }\n\n        NodeIterator.prototype = {\n            _current: null,\n\n            hasNext: function() {\n                return !!this._next;\n            },\n\n            next: function() {\n                var n = this._current = this._next;\n                var child, next;\n                if (this._current) {\n                    child = n.firstChild;\n                    if (child) {\n                        this._next = child;\n                    } else {\n                        next = null;\n                        while ((n !== this.root) && !(next = n.nextSibling)) {\n                            n = n.parentNode;\n                        }\n                        this._next = next;\n                    }\n                }\n                return this._current;\n            },\n\n            detach: function() {\n                this._current = this._next = this.root = null;\n            }\n        };\n\n        function createIterator(root) {\n            return new NodeIterator(root);\n        }\n\n        function DomPosition(node, offset) {\n            this.node = node;\n            this.offset = offset;\n        }\n\n        DomPosition.prototype = {\n            equals: function(pos) {\n                return !!pos && this.node === pos.node && this.offset == pos.offset;\n            },\n\n            inspect: function() {\n                return \"[DomPosition(\" + inspectNode(this.node) + \":\" + this.offset + \")]\";\n            },\n\n            toString: function() {\n                return this.inspect();\n            }\n        };\n\n        function DOMException(codeName) {\n            this.code = this[codeName];\n            this.codeName = codeName;\n            this.message = \"DOMException: \" + this.codeName;\n        }\n\n        DOMException.prototype = {\n            INDEX_SIZE_ERR: 1,\n            HIERARCHY_REQUEST_ERR: 3,\n            WRONG_DOCUMENT_ERR: 4,\n            NO_MODIFICATION_ALLOWED_ERR: 7,\n            NOT_FOUND_ERR: 8,\n            NOT_SUPPORTED_ERR: 9,\n            INVALID_STATE_ERR: 11,\n            INVALID_NODE_TYPE_ERR: 24\n        };\n\n        DOMException.prototype.toString = function() {\n            return this.message;\n        };\n\n        api.dom = {\n            arrayContains: arrayContains,\n            isHtmlNamespace: isHtmlNamespace,\n            parentElement: parentElement,\n            getNodeIndex: getNodeIndex,\n            getNodeLength: getNodeLength,\n            getCommonAncestor: getCommonAncestor,\n            isAncestorOf: isAncestorOf,\n            isOrIsAncestorOf: isOrIsAncestorOf,\n            getClosestAncestorIn: getClosestAncestorIn,\n            isCharacterDataNode: isCharacterDataNode,\n            isTextOrCommentNode: isTextOrCommentNode,\n            insertAfter: insertAfter,\n            splitDataNode: splitDataNode,\n            getDocument: getDocument,\n            getWindow: getWindow,\n            getIframeWindow: getIframeWindow,\n            getIframeDocument: getIframeDocument,\n            getBody: util.getBody,\n            isWindow: isWindow,\n            getContentDocument: getContentDocument,\n            getRootContainer: getRootContainer,\n            comparePoints: comparePoints,\n            isBrokenNode: isBrokenNode,\n            inspectNode: inspectNode,\n            getComputedStyleProperty: getComputedStyleProperty,\n            fragmentFromNodeChildren: fragmentFromNodeChildren,\n            createIterator: createIterator,\n            DomPosition: DomPosition\n        };\n\n        api.DOMException = DOMException;\n    });\n\n    /*----------------------------------------------------------------------------------------------------------------*/\n\n    // Pure JavaScript implementation of DOM Range\n    api.createCoreModule(\"DomRange\", [\"DomUtil\"], function(api, module) {\n        var dom = api.dom;\n        var util = api.util;\n        var DomPosition = dom.DomPosition;\n        var DOMException = api.DOMException;\n\n        var isCharacterDataNode = dom.isCharacterDataNode;\n        var getNodeIndex = dom.getNodeIndex;\n        var isOrIsAncestorOf = dom.isOrIsAncestorOf;\n        var getDocument = dom.getDocument;\n        var comparePoints = dom.comparePoints;\n        var splitDataNode = dom.splitDataNode;\n        var getClosestAncestorIn = dom.getClosestAncestorIn;\n        var getNodeLength = dom.getNodeLength;\n        var arrayContains = dom.arrayContains;\n        var getRootContainer = dom.getRootContainer;\n        var crashyTextNodes = api.features.crashyTextNodes;\n\n        /*----------------------------------------------------------------------------------------------------------------*/\n\n        // Utility functions\n\n        function isNonTextPartiallySelected(node, range) {\n            return (node.nodeType != 3) &&\n                   (isOrIsAncestorOf(node, range.startContainer) || isOrIsAncestorOf(node, range.endContainer));\n        }\n\n        function getRangeDocument(range) {\n            return range.document || getDocument(range.startContainer);\n        }\n\n        function getBoundaryBeforeNode(node) {\n            return new DomPosition(node.parentNode, getNodeIndex(node));\n        }\n\n        function getBoundaryAfterNode(node) {\n            return new DomPosition(node.parentNode, getNodeIndex(node) + 1);\n        }\n\n        function insertNodeAtPosition(node, n, o) {\n            var firstNodeInserted = node.nodeType == 11 ? node.firstChild : node;\n            if (isCharacterDataNode(n)) {\n                if (o == n.length) {\n                    dom.insertAfter(node, n);\n                } else {\n                    n.parentNode.insertBefore(node, o == 0 ? n : splitDataNode(n, o));\n                }\n            } else if (o >= n.childNodes.length) {\n                n.appendChild(node);\n            } else {\n                n.insertBefore(node, n.childNodes[o]);\n            }\n            return firstNodeInserted;\n        }\n\n        function rangesIntersect(rangeA, rangeB, touchingIsIntersecting) {\n            assertRangeValid(rangeA);\n            assertRangeValid(rangeB);\n\n            if (getRangeDocument(rangeB) != getRangeDocument(rangeA)) {\n                throw new DOMException(\"WRONG_DOCUMENT_ERR\");\n            }\n\n            var startComparison = comparePoints(rangeA.startContainer, rangeA.startOffset, rangeB.endContainer, rangeB.endOffset),\n                endComparison = comparePoints(rangeA.endContainer, rangeA.endOffset, rangeB.startContainer, rangeB.startOffset);\n\n            return touchingIsIntersecting ? startComparison <= 0 && endComparison >= 0 : startComparison < 0 && endComparison > 0;\n        }\n\n        function cloneSubtree(iterator) {\n            var partiallySelected;\n            for (var node, frag = getRangeDocument(iterator.range).createDocumentFragment(), subIterator; node = iterator.next(); ) {\n                partiallySelected = iterator.isPartiallySelectedSubtree();\n                node = node.cloneNode(!partiallySelected);\n                if (partiallySelected) {\n                    subIterator = iterator.getSubtreeIterator();\n                    node.appendChild(cloneSubtree(subIterator));\n                    subIterator.detach();\n                }\n\n                if (node.nodeType == 10) { // DocumentType\n                    throw new DOMException(\"HIERARCHY_REQUEST_ERR\");\n                }\n                frag.appendChild(node);\n            }\n            return frag;\n        }\n\n        function iterateSubtree(rangeIterator, func, iteratorState) {\n            var it, n;\n            iteratorState = iteratorState || { stop: false };\n            for (var node, subRangeIterator; node = rangeIterator.next(); ) {\n                if (rangeIterator.isPartiallySelectedSubtree()) {\n                    if (func(node) === false) {\n                        iteratorState.stop = true;\n                        return;\n                    } else {\n                        // The node is partially selected by the Range, so we can use a new RangeIterator on the portion of\n                        // the node selected by the Range.\n                        subRangeIterator = rangeIterator.getSubtreeIterator();\n                        iterateSubtree(subRangeIterator, func, iteratorState);\n                        subRangeIterator.detach();\n                        if (iteratorState.stop) {\n                            return;\n                        }\n                    }\n                } else {\n                    // The whole node is selected, so we can use efficient DOM iteration to iterate over the node and its\n                    // descendants\n                    it = dom.createIterator(node);\n                    while ( (n = it.next()) ) {\n                        if (func(n) === false) {\n                            iteratorState.stop = true;\n                            return;\n                        }\n                    }\n                }\n            }\n        }\n\n        function deleteSubtree(iterator) {\n            var subIterator;\n            while (iterator.next()) {\n                if (iterator.isPartiallySelectedSubtree()) {\n                    subIterator = iterator.getSubtreeIterator();\n                    deleteSubtree(subIterator);\n                    subIterator.detach();\n                } else {\n                    iterator.remove();\n                }\n            }\n        }\n\n        function extractSubtree(iterator) {\n            for (var node, frag = getRangeDocument(iterator.range).createDocumentFragment(), subIterator; node = iterator.next(); ) {\n\n                if (iterator.isPartiallySelectedSubtree()) {\n                    node = node.cloneNode(false);\n                    subIterator = iterator.getSubtreeIterator();\n                    node.appendChild(extractSubtree(subIterator));\n                    subIterator.detach();\n                } else {\n                    iterator.remove();\n                }\n                if (node.nodeType == 10) { // DocumentType\n                    throw new DOMException(\"HIERARCHY_REQUEST_ERR\");\n                }\n                frag.appendChild(node);\n            }\n            return frag;\n        }\n\n        function getNodesInRange(range, nodeTypes, filter) {\n            var filterNodeTypes = !!(nodeTypes && nodeTypes.length), regex;\n            var filterExists = !!filter;\n            if (filterNodeTypes) {\n                regex = new RegExp(\"^(\" + nodeTypes.join(\"|\") + \")$\");\n            }\n\n            var nodes = [];\n            iterateSubtree(new RangeIterator(range, false), function(node) {\n                if (filterNodeTypes && !regex.test(node.nodeType)) {\n                    return;\n                }\n                if (filterExists && !filter(node)) {\n                    return;\n                }\n                // Don't include a boundary container if it is a character data node and the range does not contain any\n                // of its character data. See issue 190.\n                var sc = range.startContainer;\n                if (node == sc && isCharacterDataNode(sc) && range.startOffset == sc.length) {\n                    return;\n                }\n\n                var ec = range.endContainer;\n                if (node == ec && isCharacterDataNode(ec) && range.endOffset == 0) {\n                    return;\n                }\n\n                nodes.push(node);\n            });\n            return nodes;\n        }\n\n        function inspect(range) {\n            var name = (typeof range.getName == \"undefined\") ? \"Range\" : range.getName();\n            return \"[\" + name + \"(\" + dom.inspectNode(range.startContainer) + \":\" + range.startOffset + \", \" +\n                    dom.inspectNode(range.endContainer) + \":\" + range.endOffset + \")]\";\n        }\n\n        /*----------------------------------------------------------------------------------------------------------------*/\n\n        // RangeIterator code partially borrows from IERange by Tim Ryan (http://github.com/timcameronryan/IERange)\n\n        function RangeIterator(range, clonePartiallySelectedTextNodes) {\n            this.range = range;\n            this.clonePartiallySelectedTextNodes = clonePartiallySelectedTextNodes;\n\n\n            if (!range.collapsed) {\n                this.sc = range.startContainer;\n                this.so = range.startOffset;\n                this.ec = range.endContainer;\n                this.eo = range.endOffset;\n                var root = range.commonAncestorContainer;\n\n                if (this.sc === this.ec && isCharacterDataNode(this.sc)) {\n                    this.isSingleCharacterDataNode = true;\n                    this._first = this._last = this._next = this.sc;\n                } else {\n                    this._first = this._next = (this.sc === root && !isCharacterDataNode(this.sc)) ?\n                        this.sc.childNodes[this.so] : getClosestAncestorIn(this.sc, root, true);\n                    this._last = (this.ec === root && !isCharacterDataNode(this.ec)) ?\n                        this.ec.childNodes[this.eo - 1] : getClosestAncestorIn(this.ec, root, true);\n                }\n            }\n        }\n\n        RangeIterator.prototype = {\n            _current: null,\n            _next: null,\n            _first: null,\n            _last: null,\n            isSingleCharacterDataNode: false,\n\n            reset: function() {\n                this._current = null;\n                this._next = this._first;\n            },\n\n            hasNext: function() {\n                return !!this._next;\n            },\n\n            next: function() {\n                // Move to next node\n                var current = this._current = this._next;\n                if (current) {\n                    this._next = (current !== this._last) ? current.nextSibling : null;\n\n                    // Check for partially selected text nodes\n                    if (isCharacterDataNode(current) && this.clonePartiallySelectedTextNodes) {\n                        if (current === this.ec) {\n                            (current = current.cloneNode(true)).deleteData(this.eo, current.length - this.eo);\n                        }\n                        if (this._current === this.sc) {\n                            (current = current.cloneNode(true)).deleteData(0, this.so);\n                        }\n                    }\n                }\n\n                return current;\n            },\n\n            remove: function() {\n                var current = this._current, start, end;\n\n                if (isCharacterDataNode(current) && (current === this.sc || current === this.ec)) {\n                    start = (current === this.sc) ? this.so : 0;\n                    end = (current === this.ec) ? this.eo : current.length;\n                    if (start != end) {\n                        current.deleteData(start, end - start);\n                    }\n                } else {\n                    if (current.parentNode) {\n                        current.parentNode.removeChild(current);\n                    } else {\n                    }\n                }\n            },\n\n            // Checks if the current node is partially selected\n            isPartiallySelectedSubtree: function() {\n                var current = this._current;\n                return isNonTextPartiallySelected(current, this.range);\n            },\n\n            getSubtreeIterator: function() {\n                var subRange;\n                if (this.isSingleCharacterDataNode) {\n                    subRange = this.range.cloneRange();\n                    subRange.collapse(false);\n                } else {\n                    subRange = new Range(getRangeDocument(this.range));\n                    var current = this._current;\n                    var startContainer = current, startOffset = 0, endContainer = current, endOffset = getNodeLength(current);\n\n                    if (isOrIsAncestorOf(current, this.sc)) {\n                        startContainer = this.sc;\n                        startOffset = this.so;\n                    }\n                    if (isOrIsAncestorOf(current, this.ec)) {\n                        endContainer = this.ec;\n                        endOffset = this.eo;\n                    }\n\n                    updateBoundaries(subRange, startContainer, startOffset, endContainer, endOffset);\n                }\n                return new RangeIterator(subRange, this.clonePartiallySelectedTextNodes);\n            },\n\n            detach: function() {\n                this.range = this._current = this._next = this._first = this._last = this.sc = this.so = this.ec = this.eo = null;\n            }\n        };\n\n        /*----------------------------------------------------------------------------------------------------------------*/\n\n        var beforeAfterNodeTypes = [1, 3, 4, 5, 7, 8, 10];\n        var rootContainerNodeTypes = [2, 9, 11];\n        var readonlyNodeTypes = [5, 6, 10, 12];\n        var insertableNodeTypes = [1, 3, 4, 5, 7, 8, 10, 11];\n        var surroundNodeTypes = [1, 3, 4, 5, 7, 8];\n\n        function createAncestorFinder(nodeTypes) {\n            return function(node, selfIsAncestor) {\n                var t, n = selfIsAncestor ? node : node.parentNode;\n                while (n) {\n                    t = n.nodeType;\n                    if (arrayContains(nodeTypes, t)) {\n                        return n;\n                    }\n                    n = n.parentNode;\n                }\n                return null;\n            };\n        }\n\n        var getDocumentOrFragmentContainer = createAncestorFinder( [9, 11] );\n        var getReadonlyAncestor = createAncestorFinder(readonlyNodeTypes);\n        var getDocTypeNotationEntityAncestor = createAncestorFinder( [6, 10, 12] );\n\n        function assertNoDocTypeNotationEntityAncestor(node, allowSelf) {\n            if (getDocTypeNotationEntityAncestor(node, allowSelf)) {\n                throw new DOMException(\"INVALID_NODE_TYPE_ERR\");\n            }\n        }\n\n        function assertValidNodeType(node, invalidTypes) {\n            if (!arrayContains(invalidTypes, node.nodeType)) {\n                throw new DOMException(\"INVALID_NODE_TYPE_ERR\");\n            }\n        }\n\n        function assertValidOffset(node, offset) {\n            if (offset < 0 || offset > (isCharacterDataNode(node) ? node.length : node.childNodes.length)) {\n                throw new DOMException(\"INDEX_SIZE_ERR\");\n            }\n        }\n\n        function assertSameDocumentOrFragment(node1, node2) {\n            if (getDocumentOrFragmentContainer(node1, true) !== getDocumentOrFragmentContainer(node2, true)) {\n                throw new DOMException(\"WRONG_DOCUMENT_ERR\");\n            }\n        }\n\n        function assertNodeNotReadOnly(node) {\n            if (getReadonlyAncestor(node, true)) {\n                throw new DOMException(\"NO_MODIFICATION_ALLOWED_ERR\");\n            }\n        }\n\n        function assertNode(node, codeName) {\n            if (!node) {\n                throw new DOMException(codeName);\n            }\n        }\n\n        function isOrphan(node) {\n            return (crashyTextNodes && dom.isBrokenNode(node)) ||\n                !arrayContains(rootContainerNodeTypes, node.nodeType) && !getDocumentOrFragmentContainer(node, true);\n        }\n\n        function isValidOffset(node, offset) {\n            return offset <= (isCharacterDataNode(node) ? node.length : node.childNodes.length);\n        }\n\n        function isRangeValid(range) {\n            return (!!range.startContainer && !!range.endContainer &&\n                    !isOrphan(range.startContainer) &&\n                    !isOrphan(range.endContainer) &&\n                    isValidOffset(range.startContainer, range.startOffset) &&\n                    isValidOffset(range.endContainer, range.endOffset));\n        }\n\n        function assertRangeValid(range) {\n            if (!isRangeValid(range)) {\n                throw new Error(\"Range error: Range is no longer valid after DOM mutation (\" + range.inspect() + \")\");\n            }\n        }\n\n        /*----------------------------------------------------------------------------------------------------------------*/\n\n        // Test the browser's innerHTML support to decide how to implement createContextualFragment\n        var styleEl = document.createElement(\"style\");\n        var htmlParsingConforms = false;\n        try {\n            styleEl.innerHTML = \"<b>x</b>\";\n            htmlParsingConforms = (styleEl.firstChild.nodeType == 3); // Opera incorrectly creates an element node\n        } catch (e) {\n            // IE 6 and 7 throw\n        }\n\n        api.features.htmlParsingConforms = htmlParsingConforms;\n\n        var createContextualFragment = htmlParsingConforms ?\n\n            // Implementation as per HTML parsing spec, trusting in the browser's implementation of innerHTML. See\n            // discussion and base code for this implementation at issue 67.\n            // Spec: http://html5.org/specs/dom-parsing.html#extensions-to-the-range-interface\n            // Thanks to Aleks Williams.\n            function(fragmentStr) {\n                // \"Let node the context object's start's node.\"\n                var node = this.startContainer;\n                var doc = getDocument(node);\n\n                // \"If the context object's start's node is null, raise an INVALID_STATE_ERR\n                // exception and abort these steps.\"\n                if (!node) {\n                    throw new DOMException(\"INVALID_STATE_ERR\");\n                }\n\n                // \"Let element be as follows, depending on node's interface:\"\n                // Document, Document Fragment: null\n                var el = null;\n\n                // \"Element: node\"\n                if (node.nodeType == 1) {\n                    el = node;\n\n                // \"Text, Comment: node's parentElement\"\n                } else if (isCharacterDataNode(node)) {\n                    el = dom.parentElement(node);\n                }\n\n                // \"If either element is null or element's ownerDocument is an HTML document\n                // and element's local name is \"html\" and element's namespace is the HTML\n                // namespace\"\n                if (el === null || (\n                    el.nodeName == \"HTML\" &&\n                    dom.isHtmlNamespace(getDocument(el).documentElement) &&\n                    dom.isHtmlNamespace(el)\n                )) {\n\n                // \"let element be a new Element with \"body\" as its local name and the HTML\n                // namespace as its namespace.\"\"\n                    el = doc.createElement(\"body\");\n                } else {\n                    el = el.cloneNode(false);\n                }\n\n                // \"If the node's document is an HTML document: Invoke the HTML fragment parsing algorithm.\"\n                // \"If the node's document is an XML document: Invoke the XML fragment parsing algorithm.\"\n                // \"In either case, the algorithm must be invoked with fragment as the input\n                // and element as the context element.\"\n                el.innerHTML = fragmentStr;\n\n                // \"If this raises an exception, then abort these steps. Otherwise, let new\n                // children be the nodes returned.\"\n\n                // \"Let fragment be a new DocumentFragment.\"\n                // \"Append all new children to fragment.\"\n                // \"Return fragment.\"\n                return dom.fragmentFromNodeChildren(el);\n            } :\n\n            // In this case, innerHTML cannot be trusted, so fall back to a simpler, non-conformant implementation that\n            // previous versions of Rangy used (with the exception of using a body element rather than a div)\n            function(fragmentStr) {\n                var doc = getRangeDocument(this);\n                var el = doc.createElement(\"body\");\n                el.innerHTML = fragmentStr;\n\n                return dom.fragmentFromNodeChildren(el);\n            };\n\n        function splitRangeBoundaries(range, positionsToPreserve) {\n            assertRangeValid(range);\n\n            var sc = range.startContainer, so = range.startOffset, ec = range.endContainer, eo = range.endOffset;\n            var startEndSame = (sc === ec);\n\n            if (isCharacterDataNode(ec) && eo > 0 && eo < ec.length) {\n                splitDataNode(ec, eo, positionsToPreserve);\n            }\n\n            if (isCharacterDataNode(sc) && so > 0 && so < sc.length) {\n                sc = splitDataNode(sc, so, positionsToPreserve);\n                if (startEndSame) {\n                    eo -= so;\n                    ec = sc;\n                } else if (ec == sc.parentNode && eo >= getNodeIndex(sc)) {\n                    eo++;\n                }\n                so = 0;\n            }\n            range.setStartAndEnd(sc, so, ec, eo);\n        }\n        \n        function rangeToHtml(range) {\n            assertRangeValid(range);\n            var container = range.commonAncestorContainer.parentNode.cloneNode(false);\n            container.appendChild( range.cloneContents() );\n            return container.innerHTML;\n        }\n\n        /*----------------------------------------------------------------------------------------------------------------*/\n\n        var rangeProperties = [\"startContainer\", \"startOffset\", \"endContainer\", \"endOffset\", \"collapsed\",\n            \"commonAncestorContainer\"];\n\n        var s2s = 0, s2e = 1, e2e = 2, e2s = 3;\n        var n_b = 0, n_a = 1, n_b_a = 2, n_i = 3;\n\n        util.extend(api.rangePrototype, {\n            compareBoundaryPoints: function(how, range) {\n                assertRangeValid(this);\n                assertSameDocumentOrFragment(this.startContainer, range.startContainer);\n\n                var nodeA, offsetA, nodeB, offsetB;\n                var prefixA = (how == e2s || how == s2s) ? \"start\" : \"end\";\n                var prefixB = (how == s2e || how == s2s) ? \"start\" : \"end\";\n                nodeA = this[prefixA + \"Container\"];\n                offsetA = this[prefixA + \"Offset\"];\n                nodeB = range[prefixB + \"Container\"];\n                offsetB = range[prefixB + \"Offset\"];\n                return comparePoints(nodeA, offsetA, nodeB, offsetB);\n            },\n\n            insertNode: function(node) {\n                assertRangeValid(this);\n                assertValidNodeType(node, insertableNodeTypes);\n                assertNodeNotReadOnly(this.startContainer);\n\n                if (isOrIsAncestorOf(node, this.startContainer)) {\n                    throw new DOMException(\"HIERARCHY_REQUEST_ERR\");\n                }\n\n                // No check for whether the container of the start of the Range is of a type that does not allow\n                // children of the type of node: the browser's DOM implementation should do this for us when we attempt\n                // to add the node\n\n                var firstNodeInserted = insertNodeAtPosition(node, this.startContainer, this.startOffset);\n                this.setStartBefore(firstNodeInserted);\n            },\n\n            cloneContents: function() {\n                assertRangeValid(this);\n\n                var clone, frag;\n                if (this.collapsed) {\n                    return getRangeDocument(this).createDocumentFragment();\n                } else {\n                    if (this.startContainer === this.endContainer && isCharacterDataNode(this.startContainer)) {\n                        clone = this.startContainer.cloneNode(true);\n                        clone.data = clone.data.slice(this.startOffset, this.endOffset);\n                        frag = getRangeDocument(this).createDocumentFragment();\n                        frag.appendChild(clone);\n                        return frag;\n                    } else {\n                        var iterator = new RangeIterator(this, true);\n                        clone = cloneSubtree(iterator);\n                        iterator.detach();\n                    }\n                    return clone;\n                }\n            },\n\n            canSurroundContents: function() {\n                assertRangeValid(this);\n                assertNodeNotReadOnly(this.startContainer);\n                assertNodeNotReadOnly(this.endContainer);\n\n                // Check if the contents can be surrounded. Specifically, this means whether the range partially selects\n                // no non-text nodes.\n                var iterator = new RangeIterator(this, true);\n                var boundariesInvalid = (iterator._first && (isNonTextPartiallySelected(iterator._first, this)) ||\n                        (iterator._last && isNonTextPartiallySelected(iterator._last, this)));\n                iterator.detach();\n                return !boundariesInvalid;\n            },\n\n            surroundContents: function(node) {\n                assertValidNodeType(node, surroundNodeTypes);\n\n                if (!this.canSurroundContents()) {\n                    throw new DOMException(\"INVALID_STATE_ERR\");\n                }\n\n                // Extract the contents\n                var content = this.extractContents();\n\n                // Clear the children of the node\n                if (node.hasChildNodes()) {\n                    while (node.lastChild) {\n                        node.removeChild(node.lastChild);\n                    }\n                }\n\n                // Insert the new node and add the extracted contents\n                insertNodeAtPosition(node, this.startContainer, this.startOffset);\n                node.appendChild(content);\n\n                this.selectNode(node);\n            },\n\n            cloneRange: function() {\n                assertRangeValid(this);\n                var range = new Range(getRangeDocument(this));\n                var i = rangeProperties.length, prop;\n                while (i--) {\n                    prop = rangeProperties[i];\n                    range[prop] = this[prop];\n                }\n                return range;\n            },\n\n            toString: function() {\n                assertRangeValid(this);\n                var sc = this.startContainer;\n                if (sc === this.endContainer && isCharacterDataNode(sc)) {\n                    return (sc.nodeType == 3 || sc.nodeType == 4) ? sc.data.slice(this.startOffset, this.endOffset) : \"\";\n                } else {\n                    var textParts = [], iterator = new RangeIterator(this, true);\n                    iterateSubtree(iterator, function(node) {\n                        // Accept only text or CDATA nodes, not comments\n                        if (node.nodeType == 3 || node.nodeType == 4) {\n                            textParts.push(node.data);\n                        }\n                    });\n                    iterator.detach();\n                    return textParts.join(\"\");\n                }\n            },\n\n            // The methods below are all non-standard. The following batch were introduced by Mozilla but have since\n            // been removed from Mozilla.\n\n            compareNode: function(node) {\n                assertRangeValid(this);\n\n                var parent = node.parentNode;\n                var nodeIndex = getNodeIndex(node);\n\n                if (!parent) {\n                    throw new DOMException(\"NOT_FOUND_ERR\");\n                }\n\n                var startComparison = this.comparePoint(parent, nodeIndex),\n                    endComparison = this.comparePoint(parent, nodeIndex + 1);\n\n                if (startComparison < 0) { // Node starts before\n                    return (endComparison > 0) ? n_b_a : n_b;\n                } else {\n                    return (endComparison > 0) ? n_a : n_i;\n                }\n            },\n\n            comparePoint: function(node, offset) {\n                assertRangeValid(this);\n                assertNode(node, \"HIERARCHY_REQUEST_ERR\");\n                assertSameDocumentOrFragment(node, this.startContainer);\n\n                if (comparePoints(node, offset, this.startContainer, this.startOffset) < 0) {\n                    return -1;\n                } else if (comparePoints(node, offset, this.endContainer, this.endOffset) > 0) {\n                    return 1;\n                }\n                return 0;\n            },\n\n            createContextualFragment: createContextualFragment,\n\n            toHtml: function() {\n                return rangeToHtml(this);\n            },\n\n            // touchingIsIntersecting determines whether this method considers a node that borders a range intersects\n            // with it (as in WebKit) or not (as in Gecko pre-1.9, and the default)\n            intersectsNode: function(node, touchingIsIntersecting) {\n                assertRangeValid(this);\n                assertNode(node, \"NOT_FOUND_ERR\");\n                if (getDocument(node) !== getRangeDocument(this)) {\n                    return false;\n                }\n\n                var parent = node.parentNode, offset = getNodeIndex(node);\n                assertNode(parent, \"NOT_FOUND_ERR\");\n\n                var startComparison = comparePoints(parent, offset, this.endContainer, this.endOffset),\n                    endComparison = comparePoints(parent, offset + 1, this.startContainer, this.startOffset);\n\n                return touchingIsIntersecting ? startComparison <= 0 && endComparison >= 0 : startComparison < 0 && endComparison > 0;\n            },\n\n            isPointInRange: function(node, offset) {\n                assertRangeValid(this);\n                assertNode(node, \"HIERARCHY_REQUEST_ERR\");\n                assertSameDocumentOrFragment(node, this.startContainer);\n\n                return (comparePoints(node, offset, this.startContainer, this.startOffset) >= 0) &&\n                       (comparePoints(node, offset, this.endContainer, this.endOffset) <= 0);\n            },\n\n            // The methods below are non-standard and invented by me.\n\n            // Sharing a boundary start-to-end or end-to-start does not count as intersection.\n            intersectsRange: function(range) {\n                return rangesIntersect(this, range, false);\n            },\n\n            // Sharing a boundary start-to-end or end-to-start does count as intersection.\n            intersectsOrTouchesRange: function(range) {\n                return rangesIntersect(this, range, true);\n            },\n\n            intersection: function(range) {\n                if (this.intersectsRange(range)) {\n                    var startComparison = comparePoints(this.startContainer, this.startOffset, range.startContainer, range.startOffset),\n                        endComparison = comparePoints(this.endContainer, this.endOffset, range.endContainer, range.endOffset);\n\n                    var intersectionRange = this.cloneRange();\n                    if (startComparison == -1) {\n                        intersectionRange.setStart(range.startContainer, range.startOffset);\n                    }\n                    if (endComparison == 1) {\n                        intersectionRange.setEnd(range.endContainer, range.endOffset);\n                    }\n                    return intersectionRange;\n                }\n                return null;\n            },\n\n            union: function(range) {\n                if (this.intersectsOrTouchesRange(range)) {\n                    var unionRange = this.cloneRange();\n                    if (comparePoints(range.startContainer, range.startOffset, this.startContainer, this.startOffset) == -1) {\n                        unionRange.setStart(range.startContainer, range.startOffset);\n                    }\n                    if (comparePoints(range.endContainer, range.endOffset, this.endContainer, this.endOffset) == 1) {\n                        unionRange.setEnd(range.endContainer, range.endOffset);\n                    }\n                    return unionRange;\n                } else {\n                    throw new DOMException(\"Ranges do not intersect\");\n                }\n            },\n\n            containsNode: function(node, allowPartial) {\n                if (allowPartial) {\n                    return this.intersectsNode(node, false);\n                } else {\n                    return this.compareNode(node) == n_i;\n                }\n            },\n\n            containsNodeContents: function(node) {\n                return this.comparePoint(node, 0) >= 0 && this.comparePoint(node, getNodeLength(node)) <= 0;\n            },\n\n            containsRange: function(range) {\n                var intersection = this.intersection(range);\n                return intersection !== null && range.equals(intersection);\n            },\n\n            containsNodeText: function(node) {\n                var nodeRange = this.cloneRange();\n                nodeRange.selectNode(node);\n                var textNodes = nodeRange.getNodes([3]);\n                if (textNodes.length > 0) {\n                    nodeRange.setStart(textNodes[0], 0);\n                    var lastTextNode = textNodes.pop();\n                    nodeRange.setEnd(lastTextNode, lastTextNode.length);\n                    return this.containsRange(nodeRange);\n                } else {\n                    return this.containsNodeContents(node);\n                }\n            },\n\n            getNodes: function(nodeTypes, filter) {\n                assertRangeValid(this);\n                return getNodesInRange(this, nodeTypes, filter);\n            },\n\n            getDocument: function() {\n                return getRangeDocument(this);\n            },\n\n            collapseBefore: function(node) {\n                this.setEndBefore(node);\n                this.collapse(false);\n            },\n\n            collapseAfter: function(node) {\n                this.setStartAfter(node);\n                this.collapse(true);\n            },\n            \n            getBookmark: function(containerNode) {\n                var doc = getRangeDocument(this);\n                var preSelectionRange = api.createRange(doc);\n                containerNode = containerNode || dom.getBody(doc);\n                preSelectionRange.selectNodeContents(containerNode);\n                var range = this.intersection(preSelectionRange);\n                var start = 0, end = 0;\n                if (range) {\n                    preSelectionRange.setEnd(range.startContainer, range.startOffset);\n                    start = preSelectionRange.toString().length;\n                    end = start + range.toString().length;\n                }\n\n                return {\n                    start: start,\n                    end: end,\n                    containerNode: containerNode\n                };\n            },\n            \n            moveToBookmark: function(bookmark) {\n                var containerNode = bookmark.containerNode;\n                var charIndex = 0;\n                this.setStart(containerNode, 0);\n                this.collapse(true);\n                var nodeStack = [containerNode], node, foundStart = false, stop = false;\n                var nextCharIndex, i, childNodes;\n\n                while (!stop && (node = nodeStack.pop())) {\n                    if (node.nodeType == 3) {\n                        nextCharIndex = charIndex + node.length;\n                        if (!foundStart && bookmark.start >= charIndex && bookmark.start <= nextCharIndex) {\n                            this.setStart(node, bookmark.start - charIndex);\n                            foundStart = true;\n                        }\n                        if (foundStart && bookmark.end >= charIndex && bookmark.end <= nextCharIndex) {\n                            this.setEnd(node, bookmark.end - charIndex);\n                            stop = true;\n                        }\n                        charIndex = nextCharIndex;\n                    } else {\n                        childNodes = node.childNodes;\n                        i = childNodes.length;\n                        while (i--) {\n                            nodeStack.push(childNodes[i]);\n                        }\n                    }\n                }\n            },\n\n            getName: function() {\n                return \"DomRange\";\n            },\n\n            equals: function(range) {\n                return Range.rangesEqual(this, range);\n            },\n\n            isValid: function() {\n                return isRangeValid(this);\n            },\n            \n            inspect: function() {\n                return inspect(this);\n            },\n            \n            detach: function() {\n                // In DOM4, detach() is now a no-op.\n            }\n        });\n\n        function copyComparisonConstantsToObject(obj) {\n            obj.START_TO_START = s2s;\n            obj.START_TO_END = s2e;\n            obj.END_TO_END = e2e;\n            obj.END_TO_START = e2s;\n\n            obj.NODE_BEFORE = n_b;\n            obj.NODE_AFTER = n_a;\n            obj.NODE_BEFORE_AND_AFTER = n_b_a;\n            obj.NODE_INSIDE = n_i;\n        }\n\n        function copyComparisonConstants(constructor) {\n            copyComparisonConstantsToObject(constructor);\n            copyComparisonConstantsToObject(constructor.prototype);\n        }\n\n        function createRangeContentRemover(remover, boundaryUpdater) {\n            return function() {\n                assertRangeValid(this);\n\n                var sc = this.startContainer, so = this.startOffset, root = this.commonAncestorContainer;\n\n                var iterator = new RangeIterator(this, true);\n\n                // Work out where to position the range after content removal\n                var node, boundary;\n                if (sc !== root) {\n                    node = getClosestAncestorIn(sc, root, true);\n                    boundary = getBoundaryAfterNode(node);\n                    sc = boundary.node;\n                    so = boundary.offset;\n                }\n\n                // Check none of the range is read-only\n                iterateSubtree(iterator, assertNodeNotReadOnly);\n\n                iterator.reset();\n\n                // Remove the content\n                var returnValue = remover(iterator);\n                iterator.detach();\n\n                // Move to the new position\n                boundaryUpdater(this, sc, so, sc, so);\n\n                return returnValue;\n            };\n        }\n\n        function createPrototypeRange(constructor, boundaryUpdater) {\n            function createBeforeAfterNodeSetter(isBefore, isStart) {\n                return function(node) {\n                    assertValidNodeType(node, beforeAfterNodeTypes);\n                    assertValidNodeType(getRootContainer(node), rootContainerNodeTypes);\n\n                    var boundary = (isBefore ? getBoundaryBeforeNode : getBoundaryAfterNode)(node);\n                    (isStart ? setRangeStart : setRangeEnd)(this, boundary.node, boundary.offset);\n                };\n            }\n\n            function setRangeStart(range, node, offset) {\n                var ec = range.endContainer, eo = range.endOffset;\n                if (node !== range.startContainer || offset !== range.startOffset) {\n                    // Check the root containers of the range and the new boundary, and also check whether the new boundary\n                    // is after the current end. In either case, collapse the range to the new position\n                    if (getRootContainer(node) != getRootContainer(ec) || comparePoints(node, offset, ec, eo) == 1) {\n                        ec = node;\n                        eo = offset;\n                    }\n                    boundaryUpdater(range, node, offset, ec, eo);\n                }\n            }\n\n            function setRangeEnd(range, node, offset) {\n                var sc = range.startContainer, so = range.startOffset;\n                if (node !== range.endContainer || offset !== range.endOffset) {\n                    // Check the root containers of the range and the new boundary, and also check whether the new boundary\n                    // is after the current end. In either case, collapse the range to the new position\n                    if (getRootContainer(node) != getRootContainer(sc) || comparePoints(node, offset, sc, so) == -1) {\n                        sc = node;\n                        so = offset;\n                    }\n                    boundaryUpdater(range, sc, so, node, offset);\n                }\n            }\n\n            // Set up inheritance\n            var F = function() {};\n            F.prototype = api.rangePrototype;\n            constructor.prototype = new F();\n\n            util.extend(constructor.prototype, {\n                setStart: function(node, offset) {\n                    assertNoDocTypeNotationEntityAncestor(node, true);\n                    assertValidOffset(node, offset);\n\n                    setRangeStart(this, node, offset);\n                },\n\n                setEnd: function(node, offset) {\n                    assertNoDocTypeNotationEntityAncestor(node, true);\n                    assertValidOffset(node, offset);\n\n                    setRangeEnd(this, node, offset);\n                },\n\n                /**\n                 * Convenience method to set a range's start and end boundaries. Overloaded as follows:\n                 * - Two parameters (node, offset) creates a collapsed range at that position\n                 * - Three parameters (node, startOffset, endOffset) creates a range contained with node starting at\n                 *   startOffset and ending at endOffset\n                 * - Four parameters (startNode, startOffset, endNode, endOffset) creates a range starting at startOffset in\n                 *   startNode and ending at endOffset in endNode\n                 */\n                setStartAndEnd: function() {\n                    var args = arguments;\n                    var sc = args[0], so = args[1], ec = sc, eo = so;\n\n                    switch (args.length) {\n                        case 3:\n                            eo = args[2];\n                            break;\n                        case 4:\n                            ec = args[2];\n                            eo = args[3];\n                            break;\n                    }\n\n                    boundaryUpdater(this, sc, so, ec, eo);\n                },\n                \n                setBoundary: function(node, offset, isStart) {\n                    this[\"set\" + (isStart ? \"Start\" : \"End\")](node, offset);\n                },\n\n                setStartBefore: createBeforeAfterNodeSetter(true, true),\n                setStartAfter: createBeforeAfterNodeSetter(false, true),\n                setEndBefore: createBeforeAfterNodeSetter(true, false),\n                setEndAfter: createBeforeAfterNodeSetter(false, false),\n\n                collapse: function(isStart) {\n                    assertRangeValid(this);\n                    if (isStart) {\n                        boundaryUpdater(this, this.startContainer, this.startOffset, this.startContainer, this.startOffset);\n                    } else {\n                        boundaryUpdater(this, this.endContainer, this.endOffset, this.endContainer, this.endOffset);\n                    }\n                },\n\n                selectNodeContents: function(node) {\n                    assertNoDocTypeNotationEntityAncestor(node, true);\n\n                    boundaryUpdater(this, node, 0, node, getNodeLength(node));\n                },\n\n                selectNode: function(node) {\n                    assertNoDocTypeNotationEntityAncestor(node, false);\n                    assertValidNodeType(node, beforeAfterNodeTypes);\n\n                    var start = getBoundaryBeforeNode(node), end = getBoundaryAfterNode(node);\n                    boundaryUpdater(this, start.node, start.offset, end.node, end.offset);\n                },\n\n                extractContents: createRangeContentRemover(extractSubtree, boundaryUpdater),\n\n                deleteContents: createRangeContentRemover(deleteSubtree, boundaryUpdater),\n\n                canSurroundContents: function() {\n                    assertRangeValid(this);\n                    assertNodeNotReadOnly(this.startContainer);\n                    assertNodeNotReadOnly(this.endContainer);\n\n                    // Check if the contents can be surrounded. Specifically, this means whether the range partially selects\n                    // no non-text nodes.\n                    var iterator = new RangeIterator(this, true);\n                    var boundariesInvalid = (iterator._first && isNonTextPartiallySelected(iterator._first, this) ||\n                            (iterator._last && isNonTextPartiallySelected(iterator._last, this)));\n                    iterator.detach();\n                    return !boundariesInvalid;\n                },\n\n                splitBoundaries: function() {\n                    splitRangeBoundaries(this);\n                },\n\n                splitBoundariesPreservingPositions: function(positionsToPreserve) {\n                    splitRangeBoundaries(this, positionsToPreserve);\n                },\n\n                normalizeBoundaries: function() {\n                    assertRangeValid(this);\n\n                    var sc = this.startContainer, so = this.startOffset, ec = this.endContainer, eo = this.endOffset;\n\n                    var mergeForward = function(node) {\n                        var sibling = node.nextSibling;\n                        if (sibling && sibling.nodeType == node.nodeType) {\n                            ec = node;\n                            eo = node.length;\n                            node.appendData(sibling.data);\n                            sibling.parentNode.removeChild(sibling);\n                        }\n                    };\n\n                    var mergeBackward = function(node) {\n                        var sibling = node.previousSibling;\n                        if (sibling && sibling.nodeType == node.nodeType) {\n                            sc = node;\n                            var nodeLength = node.length;\n                            so = sibling.length;\n                            node.insertData(0, sibling.data);\n                            sibling.parentNode.removeChild(sibling);\n                            if (sc == ec) {\n                                eo += so;\n                                ec = sc;\n                            } else if (ec == node.parentNode) {\n                                var nodeIndex = getNodeIndex(node);\n                                if (eo == nodeIndex) {\n                                    ec = node;\n                                    eo = nodeLength;\n                                } else if (eo > nodeIndex) {\n                                    eo--;\n                                }\n                            }\n                        }\n                    };\n\n                    var normalizeStart = true;\n\n                    if (isCharacterDataNode(ec)) {\n                        if (ec.length == eo) {\n                            mergeForward(ec);\n                        }\n                    } else {\n                        if (eo > 0) {\n                            var endNode = ec.childNodes[eo - 1];\n                            if (endNode && isCharacterDataNode(endNode)) {\n                                mergeForward(endNode);\n                            }\n                        }\n                        normalizeStart = !this.collapsed;\n                    }\n\n                    if (normalizeStart) {\n                        if (isCharacterDataNode(sc)) {\n                            if (so == 0) {\n                                mergeBackward(sc);\n                            }\n                        } else {\n                            if (so < sc.childNodes.length) {\n                                var startNode = sc.childNodes[so];\n                                if (startNode && isCharacterDataNode(startNode)) {\n                                    mergeBackward(startNode);\n                                }\n                            }\n                        }\n                    } else {\n                        sc = ec;\n                        so = eo;\n                    }\n\n                    boundaryUpdater(this, sc, so, ec, eo);\n                },\n\n                collapseToPoint: function(node, offset) {\n                    assertNoDocTypeNotationEntityAncestor(node, true);\n                    assertValidOffset(node, offset);\n                    this.setStartAndEnd(node, offset);\n                }\n            });\n\n            copyComparisonConstants(constructor);\n        }\n\n        /*----------------------------------------------------------------------------------------------------------------*/\n\n        // Updates commonAncestorContainer and collapsed after boundary change\n        function updateCollapsedAndCommonAncestor(range) {\n            range.collapsed = (range.startContainer === range.endContainer && range.startOffset === range.endOffset);\n            range.commonAncestorContainer = range.collapsed ?\n                range.startContainer : dom.getCommonAncestor(range.startContainer, range.endContainer);\n        }\n\n        function updateBoundaries(range, startContainer, startOffset, endContainer, endOffset) {\n            range.startContainer = startContainer;\n            range.startOffset = startOffset;\n            range.endContainer = endContainer;\n            range.endOffset = endOffset;\n            range.document = dom.getDocument(startContainer);\n\n            updateCollapsedAndCommonAncestor(range);\n        }\n\n        function Range(doc) {\n            this.startContainer = doc;\n            this.startOffset = 0;\n            this.endContainer = doc;\n            this.endOffset = 0;\n            this.document = doc;\n            updateCollapsedAndCommonAncestor(this);\n        }\n\n        createPrototypeRange(Range, updateBoundaries);\n\n        util.extend(Range, {\n            rangeProperties: rangeProperties,\n            RangeIterator: RangeIterator,\n            copyComparisonConstants: copyComparisonConstants,\n            createPrototypeRange: createPrototypeRange,\n            inspect: inspect,\n            toHtml: rangeToHtml,\n            getRangeDocument: getRangeDocument,\n            rangesEqual: function(r1, r2) {\n                return r1.startContainer === r2.startContainer &&\n                    r1.startOffset === r2.startOffset &&\n                    r1.endContainer === r2.endContainer &&\n                    r1.endOffset === r2.endOffset;\n            }\n        });\n\n        api.DomRange = Range;\n    });\n\n    /*----------------------------------------------------------------------------------------------------------------*/\n\n    // Wrappers for the browser's native DOM Range and/or TextRange implementation \n    api.createCoreModule(\"WrappedRange\", [\"DomRange\"], function(api, module) {\n        var WrappedRange, WrappedTextRange;\n        var dom = api.dom;\n        var util = api.util;\n        var DomPosition = dom.DomPosition;\n        var DomRange = api.DomRange;\n        var getBody = dom.getBody;\n        var getContentDocument = dom.getContentDocument;\n        var isCharacterDataNode = dom.isCharacterDataNode;\n\n\n        /*----------------------------------------------------------------------------------------------------------------*/\n\n        if (api.features.implementsDomRange) {\n            // This is a wrapper around the browser's native DOM Range. It has two aims:\n            // - Provide workarounds for specific browser bugs\n            // - provide convenient extensions, which are inherited from Rangy's DomRange\n\n            (function() {\n                var rangeProto;\n                var rangeProperties = DomRange.rangeProperties;\n\n                function updateRangeProperties(range) {\n                    var i = rangeProperties.length, prop;\n                    while (i--) {\n                        prop = rangeProperties[i];\n                        range[prop] = range.nativeRange[prop];\n                    }\n                    // Fix for broken collapsed property in IE 9.\n                    range.collapsed = (range.startContainer === range.endContainer && range.startOffset === range.endOffset);\n                }\n\n                function updateNativeRange(range, startContainer, startOffset, endContainer, endOffset) {\n                    var startMoved = (range.startContainer !== startContainer || range.startOffset != startOffset);\n                    var endMoved = (range.endContainer !== endContainer || range.endOffset != endOffset);\n                    var nativeRangeDifferent = !range.equals(range.nativeRange);\n\n                    // Always set both boundaries for the benefit of IE9 (see issue 35)\n                    if (startMoved || endMoved || nativeRangeDifferent) {\n                        range.setEnd(endContainer, endOffset);\n                        range.setStart(startContainer, startOffset);\n                    }\n                }\n\n                var createBeforeAfterNodeSetter;\n\n                WrappedRange = function(range) {\n                    if (!range) {\n                        throw module.createError(\"WrappedRange: Range must be specified\");\n                    }\n                    this.nativeRange = range;\n                    updateRangeProperties(this);\n                };\n\n                DomRange.createPrototypeRange(WrappedRange, updateNativeRange);\n\n                rangeProto = WrappedRange.prototype;\n\n                rangeProto.selectNode = function(node) {\n                    this.nativeRange.selectNode(node);\n                    updateRangeProperties(this);\n                };\n\n                rangeProto.cloneContents = function() {\n                    return this.nativeRange.cloneContents();\n                };\n\n                // Due to a long-standing Firefox bug that I have not been able to find a reliable way to detect,\n                // insertNode() is never delegated to the native range.\n\n                rangeProto.surroundContents = function(node) {\n                    this.nativeRange.surroundContents(node);\n                    updateRangeProperties(this);\n                };\n\n                rangeProto.collapse = function(isStart) {\n                    this.nativeRange.collapse(isStart);\n                    updateRangeProperties(this);\n                };\n\n                rangeProto.cloneRange = function() {\n                    return new WrappedRange(this.nativeRange.cloneRange());\n                };\n\n                rangeProto.refresh = function() {\n                    updateRangeProperties(this);\n                };\n\n                rangeProto.toString = function() {\n                    return this.nativeRange.toString();\n                };\n\n                // Create test range and node for feature detection\n\n                var testTextNode = document.createTextNode(\"test\");\n                getBody(document).appendChild(testTextNode);\n                var range = document.createRange();\n\n                /*--------------------------------------------------------------------------------------------------------*/\n\n                // Test for Firefox 2 bug that prevents moving the start of a Range to a point after its current end and\n                // correct for it\n\n                range.setStart(testTextNode, 0);\n                range.setEnd(testTextNode, 0);\n\n                try {\n                    range.setStart(testTextNode, 1);\n\n                    rangeProto.setStart = function(node, offset) {\n                        this.nativeRange.setStart(node, offset);\n                        updateRangeProperties(this);\n                    };\n\n                    rangeProto.setEnd = function(node, offset) {\n                        this.nativeRange.setEnd(node, offset);\n                        updateRangeProperties(this);\n                    };\n\n                    createBeforeAfterNodeSetter = function(name) {\n                        return function(node) {\n                            this.nativeRange[name](node);\n                            updateRangeProperties(this);\n                        };\n                    };\n\n                } catch(ex) {\n\n                    rangeProto.setStart = function(node, offset) {\n                        try {\n                            this.nativeRange.setStart(node, offset);\n                        } catch (ex) {\n                            this.nativeRange.setEnd(node, offset);\n                            this.nativeRange.setStart(node, offset);\n                        }\n                        updateRangeProperties(this);\n                    };\n\n                    rangeProto.setEnd = function(node, offset) {\n                        try {\n                            this.nativeRange.setEnd(node, offset);\n                        } catch (ex) {\n                            this.nativeRange.setStart(node, offset);\n                            this.nativeRange.setEnd(node, offset);\n                        }\n                        updateRangeProperties(this);\n                    };\n\n                    createBeforeAfterNodeSetter = function(name, oppositeName) {\n                        return function(node) {\n                            try {\n                                this.nativeRange[name](node);\n                            } catch (ex) {\n                                this.nativeRange[oppositeName](node);\n                                this.nativeRange[name](node);\n                            }\n                            updateRangeProperties(this);\n                        };\n                    };\n                }\n\n                rangeProto.setStartBefore = createBeforeAfterNodeSetter(\"setStartBefore\", \"setEndBefore\");\n                rangeProto.setStartAfter = createBeforeAfterNodeSetter(\"setStartAfter\", \"setEndAfter\");\n                rangeProto.setEndBefore = createBeforeAfterNodeSetter(\"setEndBefore\", \"setStartBefore\");\n                rangeProto.setEndAfter = createBeforeAfterNodeSetter(\"setEndAfter\", \"setStartAfter\");\n\n                /*--------------------------------------------------------------------------------------------------------*/\n\n                // Always use DOM4-compliant selectNodeContents implementation: it's simpler and less code than testing\n                // whether the native implementation can be trusted\n                rangeProto.selectNodeContents = function(node) {\n                    this.setStartAndEnd(node, 0, dom.getNodeLength(node));\n                };\n\n                /*--------------------------------------------------------------------------------------------------------*/\n\n                // Test for and correct WebKit bug that has the behaviour of compareBoundaryPoints round the wrong way for\n                // constants START_TO_END and END_TO_START: https://bugs.webkit.org/show_bug.cgi?id=20738\n\n                range.selectNodeContents(testTextNode);\n                range.setEnd(testTextNode, 3);\n\n                var range2 = document.createRange();\n                range2.selectNodeContents(testTextNode);\n                range2.setEnd(testTextNode, 4);\n                range2.setStart(testTextNode, 2);\n\n                if (range.compareBoundaryPoints(range.START_TO_END, range2) == -1 &&\n                        range.compareBoundaryPoints(range.END_TO_START, range2) == 1) {\n                    // This is the wrong way round, so correct for it\n\n                    rangeProto.compareBoundaryPoints = function(type, range) {\n                        range = range.nativeRange || range;\n                        if (type == range.START_TO_END) {\n                            type = range.END_TO_START;\n                        } else if (type == range.END_TO_START) {\n                            type = range.START_TO_END;\n                        }\n                        return this.nativeRange.compareBoundaryPoints(type, range);\n                    };\n                } else {\n                    rangeProto.compareBoundaryPoints = function(type, range) {\n                        return this.nativeRange.compareBoundaryPoints(type, range.nativeRange || range);\n                    };\n                }\n\n                /*--------------------------------------------------------------------------------------------------------*/\n\n                // Test for IE 9 deleteContents() and extractContents() bug and correct it. See issue 107.\n\n                var el = document.createElement(\"div\");\n                el.innerHTML = \"123\";\n                var textNode = el.firstChild;\n                var body = getBody(document);\n                body.appendChild(el);\n\n                range.setStart(textNode, 1);\n                range.setEnd(textNode, 2);\n                range.deleteContents();\n\n                if (textNode.data == \"13\") {\n                    // Behaviour is correct per DOM4 Range so wrap the browser's implementation of deleteContents() and\n                    // extractContents()\n                    rangeProto.deleteContents = function() {\n                        this.nativeRange.deleteContents();\n                        updateRangeProperties(this);\n                    };\n\n                    rangeProto.extractContents = function() {\n                        var frag = this.nativeRange.extractContents();\n                        updateRangeProperties(this);\n                        return frag;\n                    };\n                } else {\n                }\n\n                body.removeChild(el);\n                body = null;\n\n                /*--------------------------------------------------------------------------------------------------------*/\n\n                // Test for existence of createContextualFragment and delegate to it if it exists\n                if (util.isHostMethod(range, \"createContextualFragment\")) {\n                    rangeProto.createContextualFragment = function(fragmentStr) {\n                        return this.nativeRange.createContextualFragment(fragmentStr);\n                    };\n                }\n\n                /*--------------------------------------------------------------------------------------------------------*/\n\n                // Clean up\n                getBody(document).removeChild(testTextNode);\n\n                rangeProto.getName = function() {\n                    return \"WrappedRange\";\n                };\n\n                api.WrappedRange = WrappedRange;\n\n                api.createNativeRange = function(doc) {\n                    doc = getContentDocument(doc, module, \"createNativeRange\");\n                    return doc.createRange();\n                };\n            })();\n        }\n        \n        if (api.features.implementsTextRange) {\n            /*\n            This is a workaround for a bug where IE returns the wrong container element from the TextRange's parentElement()\n            method. For example, in the following (where pipes denote the selection boundaries):\n\n            <ul id=\"ul\"><li id=\"a\">| a </li><li id=\"b\"> b |</li></ul>\n\n            var range = document.selection.createRange();\n            alert(range.parentElement().id); // Should alert \"ul\" but alerts \"b\"\n\n            This method returns the common ancestor node of the following:\n            - the parentElement() of the textRange\n            - the parentElement() of the textRange after calling collapse(true)\n            - the parentElement() of the textRange after calling collapse(false)\n            */\n            var getTextRangeContainerElement = function(textRange) {\n                var parentEl = textRange.parentElement();\n                var range = textRange.duplicate();\n                range.collapse(true);\n                var startEl = range.parentElement();\n                range = textRange.duplicate();\n                range.collapse(false);\n                var endEl = range.parentElement();\n                var startEndContainer = (startEl == endEl) ? startEl : dom.getCommonAncestor(startEl, endEl);\n\n                return startEndContainer == parentEl ? startEndContainer : dom.getCommonAncestor(parentEl, startEndContainer);\n            };\n\n            var textRangeIsCollapsed = function(textRange) {\n                return textRange.compareEndPoints(\"StartToEnd\", textRange) == 0;\n            };\n\n            // Gets the boundary of a TextRange expressed as a node and an offset within that node. This function started\n            // out as an improved version of code found in Tim Cameron Ryan's IERange (http://code.google.com/p/ierange/)\n            // but has grown, fixing problems with line breaks in preformatted text, adding workaround for IE TextRange\n            // bugs, handling for inputs and images, plus optimizations.\n            var getTextRangeBoundaryPosition = function(textRange, wholeRangeContainerElement, isStart, isCollapsed, startInfo) {\n                var workingRange = textRange.duplicate();\n                workingRange.collapse(isStart);\n                var containerElement = workingRange.parentElement();\n\n                // Sometimes collapsing a TextRange that's at the start of a text node can move it into the previous node, so\n                // check for that\n                if (!dom.isOrIsAncestorOf(wholeRangeContainerElement, containerElement)) {\n                    containerElement = wholeRangeContainerElement;\n                }\n\n\n                // Deal with nodes that cannot \"contain rich HTML markup\". In practice, this means form inputs, images and\n                // similar. See http://msdn.microsoft.com/en-us/library/aa703950%28VS.85%29.aspx\n                if (!containerElement.canHaveHTML) {\n                    var pos = new DomPosition(containerElement.parentNode, dom.getNodeIndex(containerElement));\n                    return {\n                        boundaryPosition: pos,\n                        nodeInfo: {\n                            nodeIndex: pos.offset,\n                            containerElement: pos.node\n                        }\n                    };\n                }\n\n                var workingNode = dom.getDocument(containerElement).createElement(\"span\");\n\n                // Workaround for HTML5 Shiv's insane violation of document.createElement(). See Rangy issue 104 and HTML5\n                // Shiv issue 64: https://github.com/aFarkas/html5shiv/issues/64\n                if (workingNode.parentNode) {\n                    workingNode.parentNode.removeChild(workingNode);\n                }\n\n                var comparison, workingComparisonType = isStart ? \"StartToStart\" : \"StartToEnd\";\n                var previousNode, nextNode, boundaryPosition, boundaryNode;\n                var start = (startInfo && startInfo.containerElement == containerElement) ? startInfo.nodeIndex : 0;\n                var childNodeCount = containerElement.childNodes.length;\n                var end = childNodeCount;\n\n                // Check end first. Code within the loop assumes that the endth child node of the container is definitely\n                // after the range boundary.\n                var nodeIndex = end;\n\n                while (true) {\n                    if (nodeIndex == childNodeCount) {\n                        containerElement.appendChild(workingNode);\n                    } else {\n                        containerElement.insertBefore(workingNode, containerElement.childNodes[nodeIndex]);\n                    }\n                    workingRange.moveToElementText(workingNode);\n                    comparison = workingRange.compareEndPoints(workingComparisonType, textRange);\n                    if (comparison == 0 || start == end) {\n                        break;\n                    } else if (comparison == -1) {\n                        if (end == start + 1) {\n                            // We know the endth child node is after the range boundary, so we must be done.\n                            break;\n                        } else {\n                            start = nodeIndex;\n                        }\n                    } else {\n                        end = (end == start + 1) ? start : nodeIndex;\n                    }\n                    nodeIndex = Math.floor((start + end) / 2);\n                    containerElement.removeChild(workingNode);\n                }\n\n\n                // We've now reached or gone past the boundary of the text range we're interested in\n                // so have identified the node we want\n                boundaryNode = workingNode.nextSibling;\n\n                if (comparison == -1 && boundaryNode && isCharacterDataNode(boundaryNode)) {\n                    // This is a character data node (text, comment, cdata). The working range is collapsed at the start of\n                    // the node containing the text range's boundary, so we move the end of the working range to the\n                    // boundary point and measure the length of its text to get the boundary's offset within the node.\n                    workingRange.setEndPoint(isStart ? \"EndToStart\" : \"EndToEnd\", textRange);\n\n                    var offset;\n\n                    if (/[\\r\\n]/.test(boundaryNode.data)) {\n                        /*\n                        For the particular case of a boundary within a text node containing rendered line breaks (within a\n                        <pre> element, for example), we need a slightly complicated approach to get the boundary's offset in\n                        IE. The facts:\n                        \n                        - Each line break is represented as \\r in the text node's data/nodeValue properties\n                        - Each line break is represented as \\r\\n in the TextRange's 'text' property\n                        - The 'text' property of the TextRange does not contain trailing line breaks\n                        \n                        To get round the problem presented by the final fact above, we can use the fact that TextRange's\n                        moveStart() and moveEnd() methods return the actual number of characters moved, which is not\n                        necessarily the same as the number of characters it was instructed to move. The simplest approach is\n                        to use this to store the characters moved when moving both the start and end of the range to the\n                        start of the document body and subtracting the start offset from the end offset (the\n                        \"move-negative-gazillion\" method). However, this is extremely slow when the document is large and\n                        the range is near the end of it. Clearly doing the mirror image (i.e. moving the range boundaries to\n                        the end of the document) has the same problem.\n                        \n                        Another approach that works is to use moveStart() to move the start boundary of the range up to the\n                        end boundary one character at a time and incrementing a counter with the value returned by the\n                        moveStart() call. However, the check for whether the start boundary has reached the end boundary is\n                        expensive, so this method is slow (although unlike \"move-negative-gazillion\" is largely unaffected\n                        by the location of the range within the document).\n                        \n                        The approach used below is a hybrid of the two methods above. It uses the fact that a string\n                        containing the TextRange's 'text' property with each \\r\\n converted to a single \\r character cannot\n                        be longer than the text of the TextRange, so the start of the range is moved that length initially\n                        and then a character at a time to make up for any trailing line breaks not contained in the 'text'\n                        property. This has good performance in most situations compared to the previous two methods.\n                        */\n                        var tempRange = workingRange.duplicate();\n                        var rangeLength = tempRange.text.replace(/\\r\\n/g, \"\\r\").length;\n\n                        offset = tempRange.moveStart(\"character\", rangeLength);\n                        while ( (comparison = tempRange.compareEndPoints(\"StartToEnd\", tempRange)) == -1) {\n                            offset++;\n                            tempRange.moveStart(\"character\", 1);\n                        }\n                    } else {\n                        offset = workingRange.text.length;\n                    }\n                    boundaryPosition = new DomPosition(boundaryNode, offset);\n                } else {\n\n                    // If the boundary immediately follows a character data node and this is the end boundary, we should favour\n                    // a position within that, and likewise for a start boundary preceding a character data node\n                    previousNode = (isCollapsed || !isStart) && workingNode.previousSibling;\n                    nextNode = (isCollapsed || isStart) && workingNode.nextSibling;\n                    if (nextNode && isCharacterDataNode(nextNode)) {\n                        boundaryPosition = new DomPosition(nextNode, 0);\n                    } else if (previousNode && isCharacterDataNode(previousNode)) {\n                        boundaryPosition = new DomPosition(previousNode, previousNode.data.length);\n                    } else {\n                        boundaryPosition = new DomPosition(containerElement, dom.getNodeIndex(workingNode));\n                    }\n                }\n\n                // Clean up\n                workingNode.parentNode.removeChild(workingNode);\n\n                return {\n                    boundaryPosition: boundaryPosition,\n                    nodeInfo: {\n                        nodeIndex: nodeIndex,\n                        containerElement: containerElement\n                    }\n                };\n            };\n\n            // Returns a TextRange representing the boundary of a TextRange expressed as a node and an offset within that\n            // node. This function started out as an optimized version of code found in Tim Cameron Ryan's IERange\n            // (http://code.google.com/p/ierange/)\n            var createBoundaryTextRange = function(boundaryPosition, isStart) {\n                var boundaryNode, boundaryParent, boundaryOffset = boundaryPosition.offset;\n                var doc = dom.getDocument(boundaryPosition.node);\n                var workingNode, childNodes, workingRange = getBody(doc).createTextRange();\n                var nodeIsDataNode = isCharacterDataNode(boundaryPosition.node);\n\n                if (nodeIsDataNode) {\n                    boundaryNode = boundaryPosition.node;\n                    boundaryParent = boundaryNode.parentNode;\n                } else {\n                    childNodes = boundaryPosition.node.childNodes;\n                    boundaryNode = (boundaryOffset < childNodes.length) ? childNodes[boundaryOffset] : null;\n                    boundaryParent = boundaryPosition.node;\n                }\n\n                // Position the range immediately before the node containing the boundary\n                workingNode = doc.createElement(\"span\");\n\n                // Making the working element non-empty element persuades IE to consider the TextRange boundary to be within\n                // the element rather than immediately before or after it\n                workingNode.innerHTML = \"&#feff;\";\n\n                // insertBefore is supposed to work like appendChild if the second parameter is null. However, a bug report\n                // for IERange suggests that it can crash the browser: http://code.google.com/p/ierange/issues/detail?id=12\n                if (boundaryNode) {\n                    boundaryParent.insertBefore(workingNode, boundaryNode);\n                } else {\n                    boundaryParent.appendChild(workingNode);\n                }\n\n                workingRange.moveToElementText(workingNode);\n                workingRange.collapse(!isStart);\n\n                // Clean up\n                boundaryParent.removeChild(workingNode);\n\n                // Move the working range to the text offset, if required\n                if (nodeIsDataNode) {\n                    workingRange[isStart ? \"moveStart\" : \"moveEnd\"](\"character\", boundaryOffset);\n                }\n\n                return workingRange;\n            };\n\n            /*------------------------------------------------------------------------------------------------------------*/\n\n            // This is a wrapper around a TextRange, providing full DOM Range functionality using rangy's DomRange as a\n            // prototype\n\n            WrappedTextRange = function(textRange) {\n                this.textRange = textRange;\n                this.refresh();\n            };\n\n            WrappedTextRange.prototype = new DomRange(document);\n\n            WrappedTextRange.prototype.refresh = function() {\n                var start, end, startBoundary;\n\n                // TextRange's parentElement() method cannot be trusted. getTextRangeContainerElement() works around that.\n                var rangeContainerElement = getTextRangeContainerElement(this.textRange);\n\n                if (textRangeIsCollapsed(this.textRange)) {\n                    end = start = getTextRangeBoundaryPosition(this.textRange, rangeContainerElement, true,\n                        true).boundaryPosition;\n                } else {\n                    startBoundary = getTextRangeBoundaryPosition(this.textRange, rangeContainerElement, true, false);\n                    start = startBoundary.boundaryPosition;\n\n                    // An optimization used here is that if the start and end boundaries have the same parent element, the\n                    // search scope for the end boundary can be limited to exclude the portion of the element that precedes\n                    // the start boundary\n                    end = getTextRangeBoundaryPosition(this.textRange, rangeContainerElement, false, false,\n                        startBoundary.nodeInfo).boundaryPosition;\n                }\n\n                this.setStart(start.node, start.offset);\n                this.setEnd(end.node, end.offset);\n            };\n\n            WrappedTextRange.prototype.getName = function() {\n                return \"WrappedTextRange\";\n            };\n\n            DomRange.copyComparisonConstants(WrappedTextRange);\n\n            var rangeToTextRange = function(range) {\n                if (range.collapsed) {\n                    return createBoundaryTextRange(new DomPosition(range.startContainer, range.startOffset), true);\n                } else {\n                    var startRange = createBoundaryTextRange(new DomPosition(range.startContainer, range.startOffset), true);\n                    var endRange = createBoundaryTextRange(new DomPosition(range.endContainer, range.endOffset), false);\n                    var textRange = getBody( DomRange.getRangeDocument(range) ).createTextRange();\n                    textRange.setEndPoint(\"StartToStart\", startRange);\n                    textRange.setEndPoint(\"EndToEnd\", endRange);\n                    return textRange;\n                }\n            };\n\n            WrappedTextRange.rangeToTextRange = rangeToTextRange;\n\n            WrappedTextRange.prototype.toTextRange = function() {\n                return rangeToTextRange(this);\n            };\n\n            api.WrappedTextRange = WrappedTextRange;\n\n            // IE 9 and above have both implementations and Rangy makes both available. The next few lines sets which\n            // implementation to use by default.\n            if (!api.features.implementsDomRange || api.config.preferTextRange) {\n                // Add WrappedTextRange as the Range property of the global object to allow expression like Range.END_TO_END to work\n                var globalObj = (function() { return this; })();\n                if (typeof globalObj.Range == \"undefined\") {\n                    globalObj.Range = WrappedTextRange;\n                }\n\n                api.createNativeRange = function(doc) {\n                    doc = getContentDocument(doc, module, \"createNativeRange\");\n                    return getBody(doc).createTextRange();\n                };\n\n                api.WrappedRange = WrappedTextRange;\n            }\n        }\n\n        api.createRange = function(doc) {\n            doc = getContentDocument(doc, module, \"createRange\");\n            return new api.WrappedRange(api.createNativeRange(doc));\n        };\n\n        api.createRangyRange = function(doc) {\n            doc = getContentDocument(doc, module, \"createRangyRange\");\n            return new DomRange(doc);\n        };\n\n        api.createIframeRange = function(iframeEl) {\n            module.deprecationNotice(\"createIframeRange()\", \"createRange(iframeEl)\");\n            return api.createRange(iframeEl);\n        };\n\n        api.createIframeRangyRange = function(iframeEl) {\n            module.deprecationNotice(\"createIframeRangyRange()\", \"createRangyRange(iframeEl)\");\n            return api.createRangyRange(iframeEl);\n        };\n\n        api.addShimListener(function(win) {\n            var doc = win.document;\n            if (typeof doc.createRange == \"undefined\") {\n                doc.createRange = function() {\n                    return api.createRange(doc);\n                };\n            }\n            doc = win = null;\n        });\n    });\n\n    /*----------------------------------------------------------------------------------------------------------------*/\n\n    // This module creates a selection object wrapper that conforms as closely as possible to the Selection specification\n    // in the HTML Editing spec (http://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#selections)\n    api.createCoreModule(\"WrappedSelection\", [\"DomRange\", \"WrappedRange\"], function(api, module) {\n        api.config.checkSelectionRanges = true;\n\n        var BOOLEAN = \"boolean\";\n        var NUMBER = \"number\";\n        var dom = api.dom;\n        var util = api.util;\n        var isHostMethod = util.isHostMethod;\n        var DomRange = api.DomRange;\n        var WrappedRange = api.WrappedRange;\n        var DOMException = api.DOMException;\n        var DomPosition = dom.DomPosition;\n        var getNativeSelection;\n        var selectionIsCollapsed;\n        var features = api.features;\n        var CONTROL = \"Control\";\n        var getDocument = dom.getDocument;\n        var getBody = dom.getBody;\n        var rangesEqual = DomRange.rangesEqual;\n\n\n        // Utility function to support direction parameters in the API that may be a string (\"backward\" or \"forward\") or a\n        // Boolean (true for backwards).\n        function isDirectionBackward(dir) {\n            return (typeof dir == \"string\") ? /^backward(s)?$/i.test(dir) : !!dir;\n        }\n\n        function getWindow(win, methodName) {\n            if (!win) {\n                return window;\n            } else if (dom.isWindow(win)) {\n                return win;\n            } else if (win instanceof WrappedSelection) {\n                return win.win;\n            } else {\n                var doc = dom.getContentDocument(win, module, methodName);\n                return dom.getWindow(doc);\n            }\n        }\n\n        function getWinSelection(winParam) {\n            return getWindow(winParam, \"getWinSelection\").getSelection();\n        }\n\n        function getDocSelection(winParam) {\n            return getWindow(winParam, \"getDocSelection\").document.selection;\n        }\n        \n        function winSelectionIsBackward(sel) {\n            var backward = false;\n            if (sel.anchorNode) {\n                backward = (dom.comparePoints(sel.anchorNode, sel.anchorOffset, sel.focusNode, sel.focusOffset) == 1);\n            }\n            return backward;\n        }\n\n        // Test for the Range/TextRange and Selection features required\n        // Test for ability to retrieve selection\n        var implementsWinGetSelection = isHostMethod(window, \"getSelection\"),\n            implementsDocSelection = util.isHostObject(document, \"selection\");\n\n        features.implementsWinGetSelection = implementsWinGetSelection;\n        features.implementsDocSelection = implementsDocSelection;\n\n        var useDocumentSelection = implementsDocSelection && (!implementsWinGetSelection || api.config.preferTextRange);\n\n        if (useDocumentSelection) {\n            getNativeSelection = getDocSelection;\n            api.isSelectionValid = function(winParam) {\n                var doc = getWindow(winParam, \"isSelectionValid\").document, nativeSel = doc.selection;\n\n                // Check whether the selection TextRange is actually contained within the correct document\n                return (nativeSel.type != \"None\" || getDocument(nativeSel.createRange().parentElement()) == doc);\n            };\n        } else if (implementsWinGetSelection) {\n            getNativeSelection = getWinSelection;\n            api.isSelectionValid = function() {\n                return true;\n            };\n        } else {\n            module.fail(\"Neither document.selection or window.getSelection() detected.\");\n        }\n\n        api.getNativeSelection = getNativeSelection;\n\n        var testSelection = getNativeSelection();\n        var testRange = api.createNativeRange(document);\n        var body = getBody(document);\n\n        // Obtaining a range from a selection\n        var selectionHasAnchorAndFocus = util.areHostProperties(testSelection,\n            [\"anchorNode\", \"focusNode\", \"anchorOffset\", \"focusOffset\"]);\n\n        features.selectionHasAnchorAndFocus = selectionHasAnchorAndFocus;\n\n        // Test for existence of native selection extend() method\n        var selectionHasExtend = isHostMethod(testSelection, \"extend\");\n        features.selectionHasExtend = selectionHasExtend;\n        \n        // Test if rangeCount exists\n        var selectionHasRangeCount = (typeof testSelection.rangeCount == NUMBER);\n        features.selectionHasRangeCount = selectionHasRangeCount;\n\n        var selectionSupportsMultipleRanges = false;\n        var collapsedNonEditableSelectionsSupported = true;\n\n        var addRangeBackwardToNative = selectionHasExtend ?\n            function(nativeSelection, range) {\n                var doc = DomRange.getRangeDocument(range);\n                var endRange = api.createRange(doc);\n                endRange.collapseToPoint(range.endContainer, range.endOffset);\n                nativeSelection.addRange(getNativeRange(endRange));\n                nativeSelection.extend(range.startContainer, range.startOffset);\n            } : null;\n\n        if (util.areHostMethods(testSelection, [\"addRange\", \"getRangeAt\", \"removeAllRanges\"]) &&\n                typeof testSelection.rangeCount == NUMBER && features.implementsDomRange) {\n\n            (function() {\n                // Previously an iframe was used but this caused problems in some circumstances in IE, so tests are\n                // performed on the current document's selection. See issue 109.\n\n                // Note also that if a selection previously existed, it is wiped by these tests. This should usually be fine\n                // because initialization usually happens when the document loads, but could be a problem for a script that\n                // loads and initializes Rangy later. If anyone complains, code could be added to save and restore the\n                // selection.\n                var sel = window.getSelection();\n                if (sel) {\n                    // Store the current selection\n                    var originalSelectionRangeCount = sel.rangeCount;\n                    var selectionHasMultipleRanges = (originalSelectionRangeCount > 1);\n                    var originalSelectionRanges = [];\n                    var originalSelectionBackward = winSelectionIsBackward(sel); \n                    for (var i = 0; i < originalSelectionRangeCount; ++i) {\n                        originalSelectionRanges[i] = sel.getRangeAt(i);\n                    }\n                    \n                    // Create some test elements\n                    var body = getBody(document);\n                    var testEl = body.appendChild( document.createElement(\"div\") );\n                    testEl.contentEditable = \"false\";\n                    var textNode = testEl.appendChild( document.createTextNode(\"\\u00a0\\u00a0\\u00a0\") );\n\n                    // Test whether the native selection will allow a collapsed selection within a non-editable element\n                    var r1 = document.createRange();\n\n                    r1.setStart(textNode, 1);\n                    r1.collapse(true);\n                    sel.addRange(r1);\n                    collapsedNonEditableSelectionsSupported = (sel.rangeCount == 1);\n                    sel.removeAllRanges();\n\n                    // Test whether the native selection is capable of supporting multiple ranges.\n                    if (!selectionHasMultipleRanges) {\n                        // Doing the original feature test here in Chrome 36 (and presumably later versions) prints a\n                        // console error of \"Discontiguous selection is not supported.\" that cannot be suppressed. There's\n                        // nothing we can do about this while retaining the feature test so we have to resort to a browser\n                        // sniff. I'm not happy about it. See\n                        // https://code.google.com/p/chromium/issues/detail?id=399791\n                        var chromeMatch = window.navigator.appVersion.match(/Chrome\\/(.*?) /);\n                        if (chromeMatch && parseInt(chromeMatch[1]) >= 36) {\n                            selectionSupportsMultipleRanges = false;\n                        } else {\n                            var r2 = r1.cloneRange();\n                            r1.setStart(textNode, 0);\n                            r2.setEnd(textNode, 3);\n                            r2.setStart(textNode, 2);\n                            sel.addRange(r1);\n                            sel.addRange(r2);\n                            selectionSupportsMultipleRanges = (sel.rangeCount == 2);\n                        }\n                    }\n\n                    // Clean up\n                    body.removeChild(testEl);\n                    sel.removeAllRanges();\n\n                    for (i = 0; i < originalSelectionRangeCount; ++i) {\n                        if (i == 0 && originalSelectionBackward) {\n                            if (addRangeBackwardToNative) {\n                                addRangeBackwardToNative(sel, originalSelectionRanges[i]);\n                            } else {\n                                api.warn(\"Rangy initialization: original selection was backwards but selection has been restored forwards because the browser does not support Selection.extend\");\n                                sel.addRange(originalSelectionRanges[i]);\n                            }\n                        } else {\n                            sel.addRange(originalSelectionRanges[i]);\n                        }\n                    }\n                }\n            })();\n        }\n\n        features.selectionSupportsMultipleRanges = selectionSupportsMultipleRanges;\n        features.collapsedNonEditableSelectionsSupported = collapsedNonEditableSelectionsSupported;\n\n        // ControlRanges\n        var implementsControlRange = false, testControlRange;\n\n        if (body && isHostMethod(body, \"createControlRange\")) {\n            testControlRange = body.createControlRange();\n            if (util.areHostProperties(testControlRange, [\"item\", \"add\"])) {\n                implementsControlRange = true;\n            }\n        }\n        features.implementsControlRange = implementsControlRange;\n\n        // Selection collapsedness\n        if (selectionHasAnchorAndFocus) {\n            selectionIsCollapsed = function(sel) {\n                return sel.anchorNode === sel.focusNode && sel.anchorOffset === sel.focusOffset;\n            };\n        } else {\n            selectionIsCollapsed = function(sel) {\n                return sel.rangeCount ? sel.getRangeAt(sel.rangeCount - 1).collapsed : false;\n            };\n        }\n\n        function updateAnchorAndFocusFromRange(sel, range, backward) {\n            var anchorPrefix = backward ? \"end\" : \"start\", focusPrefix = backward ? \"start\" : \"end\";\n            sel.anchorNode = range[anchorPrefix + \"Container\"];\n            sel.anchorOffset = range[anchorPrefix + \"Offset\"];\n            sel.focusNode = range[focusPrefix + \"Container\"];\n            sel.focusOffset = range[focusPrefix + \"Offset\"];\n        }\n\n        function updateAnchorAndFocusFromNativeSelection(sel) {\n            var nativeSel = sel.nativeSelection;\n            sel.anchorNode = nativeSel.anchorNode;\n            sel.anchorOffset = nativeSel.anchorOffset;\n            sel.focusNode = nativeSel.focusNode;\n            sel.focusOffset = nativeSel.focusOffset;\n        }\n\n        function updateEmptySelection(sel) {\n            sel.anchorNode = sel.focusNode = null;\n            sel.anchorOffset = sel.focusOffset = 0;\n            sel.rangeCount = 0;\n            sel.isCollapsed = true;\n            sel._ranges.length = 0;\n        }\n\n        function getNativeRange(range) {\n            var nativeRange;\n            if (range instanceof DomRange) {\n                nativeRange = api.createNativeRange(range.getDocument());\n                nativeRange.setEnd(range.endContainer, range.endOffset);\n                nativeRange.setStart(range.startContainer, range.startOffset);\n            } else if (range instanceof WrappedRange) {\n                nativeRange = range.nativeRange;\n            } else if (features.implementsDomRange && (range instanceof dom.getWindow(range.startContainer).Range)) {\n                nativeRange = range;\n            }\n            return nativeRange;\n        }\n\n        function rangeContainsSingleElement(rangeNodes) {\n            if (!rangeNodes.length || rangeNodes[0].nodeType != 1) {\n                return false;\n            }\n            for (var i = 1, len = rangeNodes.length; i < len; ++i) {\n                if (!dom.isAncestorOf(rangeNodes[0], rangeNodes[i])) {\n                    return false;\n                }\n            }\n            return true;\n        }\n\n        function getSingleElementFromRange(range) {\n            var nodes = range.getNodes();\n            if (!rangeContainsSingleElement(nodes)) {\n                throw module.createError(\"getSingleElementFromRange: range \" + range.inspect() + \" did not consist of a single element\");\n            }\n            return nodes[0];\n        }\n\n        // Simple, quick test which only needs to distinguish between a TextRange and a ControlRange\n        function isTextRange(range) {\n            return !!range && typeof range.text != \"undefined\";\n        }\n\n        function updateFromTextRange(sel, range) {\n            // Create a Range from the selected TextRange\n            var wrappedRange = new WrappedRange(range);\n            sel._ranges = [wrappedRange];\n\n            updateAnchorAndFocusFromRange(sel, wrappedRange, false);\n            sel.rangeCount = 1;\n            sel.isCollapsed = wrappedRange.collapsed;\n        }\n\n        function updateControlSelection(sel) {\n            // Update the wrapped selection based on what's now in the native selection\n            sel._ranges.length = 0;\n            if (sel.docSelection.type == \"None\") {\n                updateEmptySelection(sel);\n            } else {\n                var controlRange = sel.docSelection.createRange();\n                if (isTextRange(controlRange)) {\n                    // This case (where the selection type is \"Control\" and calling createRange() on the selection returns\n                    // a TextRange) can happen in IE 9. It happens, for example, when all elements in the selected\n                    // ControlRange have been removed from the ControlRange and removed from the document.\n                    updateFromTextRange(sel, controlRange);\n                } else {\n                    sel.rangeCount = controlRange.length;\n                    var range, doc = getDocument(controlRange.item(0));\n                    for (var i = 0; i < sel.rangeCount; ++i) {\n                        range = api.createRange(doc);\n                        range.selectNode(controlRange.item(i));\n                        sel._ranges.push(range);\n                    }\n                    sel.isCollapsed = sel.rangeCount == 1 && sel._ranges[0].collapsed;\n                    updateAnchorAndFocusFromRange(sel, sel._ranges[sel.rangeCount - 1], false);\n                }\n            }\n        }\n\n        function addRangeToControlSelection(sel, range) {\n            var controlRange = sel.docSelection.createRange();\n            var rangeElement = getSingleElementFromRange(range);\n\n            // Create a new ControlRange containing all the elements in the selected ControlRange plus the element\n            // contained by the supplied range\n            var doc = getDocument(controlRange.item(0));\n            var newControlRange = getBody(doc).createControlRange();\n            for (var i = 0, len = controlRange.length; i < len; ++i) {\n                newControlRange.add(controlRange.item(i));\n            }\n            try {\n                newControlRange.add(rangeElement);\n            } catch (ex) {\n                throw module.createError(\"addRange(): Element within the specified Range could not be added to control selection (does it have layout?)\");\n            }\n            newControlRange.select();\n\n            // Update the wrapped selection based on what's now in the native selection\n            updateControlSelection(sel);\n        }\n\n        var getSelectionRangeAt;\n\n        if (isHostMethod(testSelection, \"getRangeAt\")) {\n            // try/catch is present because getRangeAt() must have thrown an error in some browser and some situation.\n            // Unfortunately, I didn't write a comment about the specifics and am now scared to take it out. Let that be a\n            // lesson to us all, especially me.\n            getSelectionRangeAt = function(sel, index) {\n                try {\n                    return sel.getRangeAt(index);\n                } catch (ex) {\n                    return null;\n                }\n            };\n        } else if (selectionHasAnchorAndFocus) {\n            getSelectionRangeAt = function(sel) {\n                var doc = getDocument(sel.anchorNode);\n                var range = api.createRange(doc);\n                range.setStartAndEnd(sel.anchorNode, sel.anchorOffset, sel.focusNode, sel.focusOffset);\n\n                // Handle the case when the selection was selected backwards (from the end to the start in the\n                // document)\n                if (range.collapsed !== this.isCollapsed) {\n                    range.setStartAndEnd(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset);\n                }\n\n                return range;\n            };\n        }\n\n        function WrappedSelection(selection, docSelection, win) {\n            this.nativeSelection = selection;\n            this.docSelection = docSelection;\n            this._ranges = [];\n            this.win = win;\n            this.refresh();\n        }\n\n        WrappedSelection.prototype = api.selectionPrototype;\n\n        function deleteProperties(sel) {\n            sel.win = sel.anchorNode = sel.focusNode = sel._ranges = null;\n            sel.rangeCount = sel.anchorOffset = sel.focusOffset = 0;\n            sel.detached = true;\n        }\n\n        var cachedRangySelections = [];\n\n        function actOnCachedSelection(win, action) {\n            var i = cachedRangySelections.length, cached, sel;\n            while (i--) {\n                cached = cachedRangySelections[i];\n                sel = cached.selection;\n                if (action == \"deleteAll\") {\n                    deleteProperties(sel);\n                } else if (cached.win == win) {\n                    if (action == \"delete\") {\n                        cachedRangySelections.splice(i, 1);\n                        return true;\n                    } else {\n                        return sel;\n                    }\n                }\n            }\n            if (action == \"deleteAll\") {\n                cachedRangySelections.length = 0;\n            }\n            return null;\n        }\n\n        var getSelection = function(win) {\n            // Check if the parameter is a Rangy Selection object\n            if (win && win instanceof WrappedSelection) {\n                win.refresh();\n                return win;\n            }\n\n            win = getWindow(win, \"getNativeSelection\");\n\n            var sel = actOnCachedSelection(win);\n            var nativeSel = getNativeSelection(win), docSel = implementsDocSelection ? getDocSelection(win) : null;\n            if (sel) {\n                sel.nativeSelection = nativeSel;\n                sel.docSelection = docSel;\n                sel.refresh();\n            } else {\n                sel = new WrappedSelection(nativeSel, docSel, win);\n                cachedRangySelections.push( { win: win, selection: sel } );\n            }\n            return sel;\n        };\n\n        api.getSelection = getSelection;\n\n        api.getIframeSelection = function(iframeEl) {\n            module.deprecationNotice(\"getIframeSelection()\", \"getSelection(iframeEl)\");\n            return api.getSelection(dom.getIframeWindow(iframeEl));\n        };\n\n        var selProto = WrappedSelection.prototype;\n\n        function createControlSelection(sel, ranges) {\n            // Ensure that the selection becomes of type \"Control\"\n            var doc = getDocument(ranges[0].startContainer);\n            var controlRange = getBody(doc).createControlRange();\n            for (var i = 0, el, len = ranges.length; i < len; ++i) {\n                el = getSingleElementFromRange(ranges[i]);\n                try {\n                    controlRange.add(el);\n                } catch (ex) {\n                    throw module.createError(\"setRanges(): Element within one of the specified Ranges could not be added to control selection (does it have layout?)\");\n                }\n            }\n            controlRange.select();\n\n            // Update the wrapped selection based on what's now in the native selection\n            updateControlSelection(sel);\n        }\n\n        // Selecting a range\n        if (!useDocumentSelection && selectionHasAnchorAndFocus && util.areHostMethods(testSelection, [\"removeAllRanges\", \"addRange\"])) {\n            selProto.removeAllRanges = function() {\n                this.nativeSelection.removeAllRanges();\n                updateEmptySelection(this);\n            };\n\n            var addRangeBackward = function(sel, range) {\n                addRangeBackwardToNative(sel.nativeSelection, range);\n                sel.refresh();\n            };\n\n            if (selectionHasRangeCount) {\n                selProto.addRange = function(range, direction) {\n                    if (implementsControlRange && implementsDocSelection && this.docSelection.type == CONTROL) {\n                        addRangeToControlSelection(this, range);\n                    } else {\n                        if (isDirectionBackward(direction) && selectionHasExtend) {\n                            addRangeBackward(this, range);\n                        } else {\n                            var previousRangeCount;\n                            if (selectionSupportsMultipleRanges) {\n                                previousRangeCount = this.rangeCount;\n                            } else {\n                                this.removeAllRanges();\n                                previousRangeCount = 0;\n                            }\n                            // Clone the native range so that changing the selected range does not affect the selection.\n                            // This is contrary to the spec but is the only way to achieve consistency between browsers. See\n                            // issue 80.\n                            this.nativeSelection.addRange(getNativeRange(range).cloneRange());\n\n                            // Check whether adding the range was successful\n                            this.rangeCount = this.nativeSelection.rangeCount;\n\n                            if (this.rangeCount == previousRangeCount + 1) {\n                                // The range was added successfully\n\n                                // Check whether the range that we added to the selection is reflected in the last range extracted from\n                                // the selection\n                                if (api.config.checkSelectionRanges) {\n                                    var nativeRange = getSelectionRangeAt(this.nativeSelection, this.rangeCount - 1);\n                                    if (nativeRange && !rangesEqual(nativeRange, range)) {\n                                        // Happens in WebKit with, for example, a selection placed at the start of a text node\n                                        range = new WrappedRange(nativeRange);\n                                    }\n                                }\n                                this._ranges[this.rangeCount - 1] = range;\n                                updateAnchorAndFocusFromRange(this, range, selectionIsBackward(this.nativeSelection));\n                                this.isCollapsed = selectionIsCollapsed(this);\n                            } else {\n                                // The range was not added successfully. The simplest thing is to refresh\n                                this.refresh();\n                            }\n                        }\n                    }\n                };\n            } else {\n                selProto.addRange = function(range, direction) {\n                    if (isDirectionBackward(direction) && selectionHasExtend) {\n                        addRangeBackward(this, range);\n                    } else {\n                        this.nativeSelection.addRange(getNativeRange(range));\n                        this.refresh();\n                    }\n                };\n            }\n\n            selProto.setRanges = function(ranges) {\n                if (implementsControlRange && implementsDocSelection && ranges.length > 1) {\n                    createControlSelection(this, ranges);\n                } else {\n                    this.removeAllRanges();\n                    for (var i = 0, len = ranges.length; i < len; ++i) {\n                        this.addRange(ranges[i]);\n                    }\n                }\n            };\n        } else if (isHostMethod(testSelection, \"empty\") && isHostMethod(testRange, \"select\") &&\n                   implementsControlRange && useDocumentSelection) {\n\n            selProto.removeAllRanges = function() {\n                // Added try/catch as fix for issue #21\n                try {\n                    this.docSelection.empty();\n\n                    // Check for empty() not working (issue #24)\n                    if (this.docSelection.type != \"None\") {\n                        // Work around failure to empty a control selection by instead selecting a TextRange and then\n                        // calling empty()\n                        var doc;\n                        if (this.anchorNode) {\n                            doc = getDocument(this.anchorNode);\n                        } else if (this.docSelection.type == CONTROL) {\n                            var controlRange = this.docSelection.createRange();\n                            if (controlRange.length) {\n                                doc = getDocument( controlRange.item(0) );\n                            }\n                        }\n                        if (doc) {\n                            var textRange = getBody(doc).createTextRange();\n                            textRange.select();\n                            this.docSelection.empty();\n                        }\n                    }\n                } catch(ex) {}\n                updateEmptySelection(this);\n            };\n\n            selProto.addRange = function(range) {\n                if (this.docSelection.type == CONTROL) {\n                    addRangeToControlSelection(this, range);\n                } else {\n                    api.WrappedTextRange.rangeToTextRange(range).select();\n                    this._ranges[0] = range;\n                    this.rangeCount = 1;\n                    this.isCollapsed = this._ranges[0].collapsed;\n                    updateAnchorAndFocusFromRange(this, range, false);\n                }\n            };\n\n            selProto.setRanges = function(ranges) {\n                this.removeAllRanges();\n                var rangeCount = ranges.length;\n                if (rangeCount > 1) {\n                    createControlSelection(this, ranges);\n                } else if (rangeCount) {\n                    this.addRange(ranges[0]);\n                }\n            };\n        } else {\n            module.fail(\"No means of selecting a Range or TextRange was found\");\n            return false;\n        }\n\n        selProto.getRangeAt = function(index) {\n            if (index < 0 || index >= this.rangeCount) {\n                throw new DOMException(\"INDEX_SIZE_ERR\");\n            } else {\n                // Clone the range to preserve selection-range independence. See issue 80.\n                return this._ranges[index].cloneRange();\n            }\n        };\n\n        var refreshSelection;\n\n        if (useDocumentSelection) {\n            refreshSelection = function(sel) {\n                var range;\n                if (api.isSelectionValid(sel.win)) {\n                    range = sel.docSelection.createRange();\n                } else {\n                    range = getBody(sel.win.document).createTextRange();\n                    range.collapse(true);\n                }\n\n                if (sel.docSelection.type == CONTROL) {\n                    updateControlSelection(sel);\n                } else if (isTextRange(range)) {\n                    updateFromTextRange(sel, range);\n                } else {\n                    updateEmptySelection(sel);\n                }\n            };\n        } else if (isHostMethod(testSelection, \"getRangeAt\") && typeof testSelection.rangeCount == NUMBER) {\n            refreshSelection = function(sel) {\n                if (implementsControlRange && implementsDocSelection && sel.docSelection.type == CONTROL) {\n                    updateControlSelection(sel);\n                } else {\n                    sel._ranges.length = sel.rangeCount = sel.nativeSelection.rangeCount;\n                    if (sel.rangeCount) {\n                        for (var i = 0, len = sel.rangeCount; i < len; ++i) {\n                            sel._ranges[i] = new api.WrappedRange(sel.nativeSelection.getRangeAt(i));\n                        }\n                        updateAnchorAndFocusFromRange(sel, sel._ranges[sel.rangeCount - 1], selectionIsBackward(sel.nativeSelection));\n                        sel.isCollapsed = selectionIsCollapsed(sel);\n                    } else {\n                        updateEmptySelection(sel);\n                    }\n                }\n            };\n        } else if (selectionHasAnchorAndFocus && typeof testSelection.isCollapsed == BOOLEAN && typeof testRange.collapsed == BOOLEAN && features.implementsDomRange) {\n            refreshSelection = function(sel) {\n                var range, nativeSel = sel.nativeSelection;\n                if (nativeSel.anchorNode) {\n                    range = getSelectionRangeAt(nativeSel, 0);\n                    sel._ranges = [range];\n                    sel.rangeCount = 1;\n                    updateAnchorAndFocusFromNativeSelection(sel);\n                    sel.isCollapsed = selectionIsCollapsed(sel);\n                } else {\n                    updateEmptySelection(sel);\n                }\n            };\n        } else {\n            module.fail(\"No means of obtaining a Range or TextRange from the user's selection was found\");\n            return false;\n        }\n\n        selProto.refresh = function(checkForChanges) {\n            var oldRanges = checkForChanges ? this._ranges.slice(0) : null;\n            var oldAnchorNode = this.anchorNode, oldAnchorOffset = this.anchorOffset;\n\n            refreshSelection(this);\n            if (checkForChanges) {\n                // Check the range count first\n                var i = oldRanges.length;\n                if (i != this._ranges.length) {\n                    return true;\n                }\n\n                // Now check the direction. Checking the anchor position is the same is enough since we're checking all the\n                // ranges after this\n                if (this.anchorNode != oldAnchorNode || this.anchorOffset != oldAnchorOffset) {\n                    return true;\n                }\n\n                // Finally, compare each range in turn\n                while (i--) {\n                    if (!rangesEqual(oldRanges[i], this._ranges[i])) {\n                        return true;\n                    }\n                }\n                return false;\n            }\n        };\n\n        // Removal of a single range\n        var removeRangeManually = function(sel, range) {\n            var ranges = sel.getAllRanges();\n            sel.removeAllRanges();\n            for (var i = 0, len = ranges.length; i < len; ++i) {\n                if (!rangesEqual(range, ranges[i])) {\n                    sel.addRange(ranges[i]);\n                }\n            }\n            if (!sel.rangeCount) {\n                updateEmptySelection(sel);\n            }\n        };\n\n        if (implementsControlRange && implementsDocSelection) {\n            selProto.removeRange = function(range) {\n                if (this.docSelection.type == CONTROL) {\n                    var controlRange = this.docSelection.createRange();\n                    var rangeElement = getSingleElementFromRange(range);\n\n                    // Create a new ControlRange containing all the elements in the selected ControlRange minus the\n                    // element contained by the supplied range\n                    var doc = getDocument(controlRange.item(0));\n                    var newControlRange = getBody(doc).createControlRange();\n                    var el, removed = false;\n                    for (var i = 0, len = controlRange.length; i < len; ++i) {\n                        el = controlRange.item(i);\n                        if (el !== rangeElement || removed) {\n                            newControlRange.add(controlRange.item(i));\n                        } else {\n                            removed = true;\n                        }\n                    }\n                    newControlRange.select();\n\n                    // Update the wrapped selection based on what's now in the native selection\n                    updateControlSelection(this);\n                } else {\n                    removeRangeManually(this, range);\n                }\n            };\n        } else {\n            selProto.removeRange = function(range) {\n                removeRangeManually(this, range);\n            };\n        }\n\n        // Detecting if a selection is backward\n        var selectionIsBackward;\n        if (!useDocumentSelection && selectionHasAnchorAndFocus && features.implementsDomRange) {\n            selectionIsBackward = winSelectionIsBackward;\n\n            selProto.isBackward = function() {\n                return selectionIsBackward(this);\n            };\n        } else {\n            selectionIsBackward = selProto.isBackward = function() {\n                return false;\n            };\n        }\n\n        // Create an alias for backwards compatibility. From 1.3, everything is \"backward\" rather than \"backwards\"\n        selProto.isBackwards = selProto.isBackward;\n\n        // Selection stringifier\n        // This is conformant to the old HTML5 selections draft spec but differs from WebKit and Mozilla's implementation.\n        // The current spec does not yet define this method.\n        selProto.toString = function() {\n            var rangeTexts = [];\n            for (var i = 0, len = this.rangeCount; i < len; ++i) {\n                rangeTexts[i] = \"\" + this._ranges[i];\n            }\n            return rangeTexts.join(\"\");\n        };\n\n        function assertNodeInSameDocument(sel, node) {\n            if (sel.win.document != getDocument(node)) {\n                throw new DOMException(\"WRONG_DOCUMENT_ERR\");\n            }\n        }\n\n        // No current browser conforms fully to the spec for this method, so Rangy's own method is always used\n        selProto.collapse = function(node, offset) {\n            assertNodeInSameDocument(this, node);\n            var range = api.createRange(node);\n            range.collapseToPoint(node, offset);\n            this.setSingleRange(range);\n            this.isCollapsed = true;\n        };\n\n        selProto.collapseToStart = function() {\n            if (this.rangeCount) {\n                var range = this._ranges[0];\n                this.collapse(range.startContainer, range.startOffset);\n            } else {\n                throw new DOMException(\"INVALID_STATE_ERR\");\n            }\n        };\n\n        selProto.collapseToEnd = function() {\n            if (this.rangeCount) {\n                var range = this._ranges[this.rangeCount - 1];\n                this.collapse(range.endContainer, range.endOffset);\n            } else {\n                throw new DOMException(\"INVALID_STATE_ERR\");\n            }\n        };\n\n        // The spec is very specific on how selectAllChildren should be implemented so the native implementation is\n        // never used by Rangy.\n        selProto.selectAllChildren = function(node) {\n            assertNodeInSameDocument(this, node);\n            var range = api.createRange(node);\n            range.selectNodeContents(node);\n            this.setSingleRange(range);\n        };\n\n        selProto.deleteFromDocument = function() {\n            // Sepcial behaviour required for IE's control selections\n            if (implementsControlRange && implementsDocSelection && this.docSelection.type == CONTROL) {\n                var controlRange = this.docSelection.createRange();\n                var element;\n                while (controlRange.length) {\n                    element = controlRange.item(0);\n                    controlRange.remove(element);\n                    element.parentNode.removeChild(element);\n                }\n                this.refresh();\n            } else if (this.rangeCount) {\n                var ranges = this.getAllRanges();\n                if (ranges.length) {\n                    this.removeAllRanges();\n                    for (var i = 0, len = ranges.length; i < len; ++i) {\n                        ranges[i].deleteContents();\n                    }\n                    // The spec says nothing about what the selection should contain after calling deleteContents on each\n                    // range. Firefox moves the selection to where the final selected range was, so we emulate that\n                    this.addRange(ranges[len - 1]);\n                }\n            }\n        };\n\n        // The following are non-standard extensions\n        selProto.eachRange = function(func, returnValue) {\n            for (var i = 0, len = this._ranges.length; i < len; ++i) {\n                if ( func( this.getRangeAt(i) ) ) {\n                    return returnValue;\n                }\n            }\n        };\n\n        selProto.getAllRanges = function() {\n            var ranges = [];\n            this.eachRange(function(range) {\n                ranges.push(range);\n            });\n            return ranges;\n        };\n\n        selProto.setSingleRange = function(range, direction) {\n            this.removeAllRanges();\n            this.addRange(range, direction);\n        };\n\n        selProto.callMethodOnEachRange = function(methodName, params) {\n            var results = [];\n            this.eachRange( function(range) {\n                results.push( range[methodName].apply(range, params) );\n            } );\n            return results;\n        };\n        \n        function createStartOrEndSetter(isStart) {\n            return function(node, offset) {\n                var range;\n                if (this.rangeCount) {\n                    range = this.getRangeAt(0);\n                    range[\"set\" + (isStart ? \"Start\" : \"End\")](node, offset);\n                } else {\n                    range = api.createRange(this.win.document);\n                    range.setStartAndEnd(node, offset);\n                }\n                this.setSingleRange(range, this.isBackward());\n            };\n        }\n\n        selProto.setStart = createStartOrEndSetter(true);\n        selProto.setEnd = createStartOrEndSetter(false);\n        \n        // Add select() method to Range prototype. Any existing selection will be removed.\n        api.rangePrototype.select = function(direction) {\n            getSelection( this.getDocument() ).setSingleRange(this, direction);\n        };\n\n        selProto.changeEachRange = function(func) {\n            var ranges = [];\n            var backward = this.isBackward();\n\n            this.eachRange(function(range) {\n                func(range);\n                ranges.push(range);\n            });\n\n            this.removeAllRanges();\n            if (backward && ranges.length == 1) {\n                this.addRange(ranges[0], \"backward\");\n            } else {\n                this.setRanges(ranges);\n            }\n        };\n\n        selProto.containsNode = function(node, allowPartial) {\n            return this.eachRange( function(range) {\n                return range.containsNode(node, allowPartial);\n            }, true ) || false;\n        };\n\n        selProto.getBookmark = function(containerNode) {\n            return {\n                backward: this.isBackward(),\n                rangeBookmarks: this.callMethodOnEachRange(\"getBookmark\", [containerNode])\n            };\n        };\n\n        selProto.moveToBookmark = function(bookmark) {\n            var selRanges = [];\n            for (var i = 0, rangeBookmark, range; rangeBookmark = bookmark.rangeBookmarks[i++]; ) {\n                range = api.createRange(this.win);\n                range.moveToBookmark(rangeBookmark);\n                selRanges.push(range);\n            }\n            if (bookmark.backward) {\n                this.setSingleRange(selRanges[0], \"backward\");\n            } else {\n                this.setRanges(selRanges);\n            }\n        };\n\n        selProto.toHtml = function() {\n            var rangeHtmls = [];\n            this.eachRange(function(range) {\n                rangeHtmls.push( DomRange.toHtml(range) );\n            });\n            return rangeHtmls.join(\"\");\n        };\n\n        if (features.implementsTextRange) {\n            selProto.getNativeTextRange = function() {\n                var sel, textRange;\n                if ( (sel = this.docSelection) ) {\n                    var range = sel.createRange();\n                    if (isTextRange(range)) {\n                        return range;\n                    } else {\n                        throw module.createError(\"getNativeTextRange: selection is a control selection\"); \n                    }\n                } else if (this.rangeCount > 0) {\n                    return api.WrappedTextRange.rangeToTextRange( this.getRangeAt(0) );\n                } else {\n                    throw module.createError(\"getNativeTextRange: selection contains no range\");\n                }\n            };\n        }\n\n        function inspect(sel) {\n            var rangeInspects = [];\n            var anchor = new DomPosition(sel.anchorNode, sel.anchorOffset);\n            var focus = new DomPosition(sel.focusNode, sel.focusOffset);\n            var name = (typeof sel.getName == \"function\") ? sel.getName() : \"Selection\";\n\n            if (typeof sel.rangeCount != \"undefined\") {\n                for (var i = 0, len = sel.rangeCount; i < len; ++i) {\n                    rangeInspects[i] = DomRange.inspect(sel.getRangeAt(i));\n                }\n            }\n            return \"[\" + name + \"(Ranges: \" + rangeInspects.join(\", \") +\n                    \")(anchor: \" + anchor.inspect() + \", focus: \" + focus.inspect() + \"]\";\n        }\n\n        selProto.getName = function() {\n            return \"WrappedSelection\";\n        };\n\n        selProto.inspect = function() {\n            return inspect(this);\n        };\n\n        selProto.detach = function() {\n            actOnCachedSelection(this.win, \"delete\");\n            deleteProperties(this);\n        };\n\n        WrappedSelection.detachAll = function() {\n            actOnCachedSelection(null, \"deleteAll\");\n        };\n\n        WrappedSelection.inspect = inspect;\n        WrappedSelection.isDirectionBackward = isDirectionBackward;\n\n        api.Selection = WrappedSelection;\n\n        api.selectionPrototype = selProto;\n\n        api.addShimListener(function(win) {\n            if (typeof win.getSelection == \"undefined\") {\n                win.getSelection = function() {\n                    return getSelection(win);\n                };\n            }\n            win = null;\n        });\n    });\n    \n\n    /*----------------------------------------------------------------------------------------------------------------*/\n\n    return api;\n}, this);;/**\n * Selection save and restore module for Rangy.\n * Saves and restores user selections using marker invisible elements in the DOM.\n *\n * Part of Rangy, a cross-browser JavaScript range and selection library\n * http://code.google.com/p/rangy/\n *\n * Depends on Rangy core.\n *\n * Copyright 2014, Tim Down\n * Licensed under the MIT license.\n * Version: 1.3alpha.20140804\n * Build date: 4 August 2014\n */\n(function(factory, global) {\n    if (typeof define == \"function\" && define.amd) {\n        // AMD. Register as an anonymous module with a dependency on Rangy.\n        define([\"rangy\"], factory);\n        /*\n         } else if (typeof exports == \"object\") {\n         // Node/CommonJS style for Browserify\n         module.exports = factory;\n         */\n    } else {\n        // No AMD or CommonJS support so we use the rangy global variable\n        factory(global.rangy);\n    }\n})(function(rangy) {\n    rangy.createModule(\"SaveRestore\", [\"WrappedRange\"], function(api, module) {\n        var dom = api.dom;\n\n        var markerTextChar = \"\\ufeff\";\n\n        function gEBI(id, doc) {\n            return (doc || document).getElementById(id);\n        }\n\n        function insertRangeBoundaryMarker(range, atStart) {\n            var markerId = \"selectionBoundary_\" + (+new Date()) + \"_\" + (\"\" + Math.random()).slice(2);\n            var markerEl;\n            var doc = dom.getDocument(range.startContainer);\n\n            // Clone the Range and collapse to the appropriate boundary point\n            var boundaryRange = range.cloneRange();\n            boundaryRange.collapse(atStart);\n\n            // Create the marker element containing a single invisible character using DOM methods and insert it\n            markerEl = doc.createElement(\"span\");\n            markerEl.id = markerId;\n            markerEl.style.lineHeight = \"0\";\n            markerEl.style.display = \"none\";\n            markerEl.className = \"rangySelectionBoundary\";\n            markerEl.appendChild(doc.createTextNode(markerTextChar));\n\n            boundaryRange.insertNode(markerEl);\n            return markerEl;\n        }\n\n        function setRangeBoundary(doc, range, markerId, atStart) {\n            var markerEl = gEBI(markerId, doc);\n            if (markerEl) {\n                range[atStart ? \"setStartBefore\" : \"setEndBefore\"](markerEl);\n                markerEl.parentNode.removeChild(markerEl);\n            } else {\n                module.warn(\"Marker element has been removed. Cannot restore selection.\");\n            }\n        }\n\n        function compareRanges(r1, r2) {\n            return r2.compareBoundaryPoints(r1.START_TO_START, r1);\n        }\n\n        function saveRange(range, backward) {\n            var startEl, endEl, doc = api.DomRange.getRangeDocument(range), text = range.toString();\n\n            if (range.collapsed) {\n                endEl = insertRangeBoundaryMarker(range, false);\n                return {\n                    document: doc,\n                    markerId: endEl.id,\n                    collapsed: true\n                };\n            } else {\n                endEl = insertRangeBoundaryMarker(range, false);\n                startEl = insertRangeBoundaryMarker(range, true);\n\n                return {\n                    document: doc,\n                    startMarkerId: startEl.id,\n                    endMarkerId: endEl.id,\n                    collapsed: false,\n                    backward: backward,\n                    toString: function() {\n                        return \"original text: '\" + text + \"', new text: '\" + range.toString() + \"'\";\n                    }\n                };\n            }\n        }\n\n        function restoreRange(rangeInfo, normalize) {\n            var doc = rangeInfo.document;\n            if (typeof normalize == \"undefined\") {\n                normalize = true;\n            }\n            var range = api.createRange(doc);\n            if (rangeInfo.collapsed) {\n                var markerEl = gEBI(rangeInfo.markerId, doc);\n                if (markerEl) {\n                    markerEl.style.display = \"inline\";\n                    var previousNode = markerEl.previousSibling;\n\n                    // Workaround for issue 17\n                    if (previousNode && previousNode.nodeType == 3) {\n                        markerEl.parentNode.removeChild(markerEl);\n                        range.collapseToPoint(previousNode, previousNode.length);\n                    } else {\n                        range.collapseBefore(markerEl);\n                        markerEl.parentNode.removeChild(markerEl);\n                    }\n                } else {\n                    module.warn(\"Marker element has been removed. Cannot restore selection.\");\n                }\n            } else {\n                setRangeBoundary(doc, range, rangeInfo.startMarkerId, true);\n                setRangeBoundary(doc, range, rangeInfo.endMarkerId, false);\n            }\n\n            if (normalize) {\n                range.normalizeBoundaries();\n            }\n\n            return range;\n        }\n\n        function saveRanges(ranges, backward) {\n            var rangeInfos = [], range, doc;\n\n            // Order the ranges by position within the DOM, latest first, cloning the array to leave the original untouched\n            ranges = ranges.slice(0);\n            ranges.sort(compareRanges);\n\n            for (var i = 0, len = ranges.length; i < len; ++i) {\n                rangeInfos[i] = saveRange(ranges[i], backward);\n            }\n\n            // Now that all the markers are in place and DOM manipulation over, adjust each range's boundaries to lie\n            // between its markers\n            for (i = len - 1; i >= 0; --i) {\n                range = ranges[i];\n                doc = api.DomRange.getRangeDocument(range);\n                if (range.collapsed) {\n                    range.collapseAfter(gEBI(rangeInfos[i].markerId, doc));\n                } else {\n                    range.setEndBefore(gEBI(rangeInfos[i].endMarkerId, doc));\n                    range.setStartAfter(gEBI(rangeInfos[i].startMarkerId, doc));\n                }\n            }\n\n            return rangeInfos;\n        }\n\n        function saveSelection(win) {\n            if (!api.isSelectionValid(win)) {\n                module.warn(\"Cannot save selection. This usually happens when the selection is collapsed and the selection document has lost focus.\");\n                return null;\n            }\n            var sel = api.getSelection(win);\n            var ranges = sel.getAllRanges();\n            var backward = (ranges.length == 1 && sel.isBackward());\n\n            var rangeInfos = saveRanges(ranges, backward);\n\n            // Ensure current selection is unaffected\n            if (backward) {\n                sel.setSingleRange(ranges[0], \"backward\");\n            } else {\n                sel.setRanges(ranges);\n            }\n\n            return {\n                win: win,\n                rangeInfos: rangeInfos,\n                restored: false\n            };\n        }\n\n        function restoreRanges(rangeInfos) {\n            var ranges = [];\n\n            // Ranges are in reverse order of appearance in the DOM. We want to restore earliest first to avoid\n            // normalization affecting previously restored ranges.\n            var rangeCount = rangeInfos.length;\n\n            for (var i = rangeCount - 1; i >= 0; i--) {\n                ranges[i] = restoreRange(rangeInfos[i], true);\n            }\n\n            return ranges;\n        }\n\n        function restoreSelection(savedSelection, preserveDirection) {\n            if (!savedSelection.restored) {\n                var rangeInfos = savedSelection.rangeInfos;\n                var sel = api.getSelection(savedSelection.win);\n                var ranges = restoreRanges(rangeInfos), rangeCount = rangeInfos.length;\n\n                if (rangeCount == 1 && preserveDirection && api.features.selectionHasExtend && rangeInfos[0].backward) {\n                    sel.removeAllRanges();\n                    sel.addRange(ranges[0], true);\n                } else {\n                    sel.setRanges(ranges);\n                }\n\n                savedSelection.restored = true;\n            }\n        }\n\n        function removeMarkerElement(doc, markerId) {\n            var markerEl = gEBI(markerId, doc);\n            if (markerEl) {\n                markerEl.parentNode.removeChild(markerEl);\n            }\n        }\n\n        function removeMarkers(savedSelection) {\n            var rangeInfos = savedSelection.rangeInfos;\n            for (var i = 0, len = rangeInfos.length, rangeInfo; i < len; ++i) {\n                rangeInfo = rangeInfos[i];\n                if (rangeInfo.collapsed) {\n                    removeMarkerElement(savedSelection.doc, rangeInfo.markerId);\n                } else {\n                    removeMarkerElement(savedSelection.doc, rangeInfo.startMarkerId);\n                    removeMarkerElement(savedSelection.doc, rangeInfo.endMarkerId);\n                }\n            }\n        }\n\n        api.util.extend(api, {\n            saveRange: saveRange,\n            restoreRange: restoreRange,\n            saveRanges: saveRanges,\n            restoreRanges: restoreRanges,\n            saveSelection: saveSelection,\n            restoreSelection: restoreSelection,\n            removeMarkerElement: removeMarkerElement,\n            removeMarkers: removeMarkers\n        });\n    });\n    \n}, this);;/*\n\tBase.js, version 1.1a\n\tCopyright 2006-2010, Dean Edwards\n\tLicense: http://www.opensource.org/licenses/mit-license.php\n*/\n\nvar Base = function() {\n\t// dummy\n};\n\nBase.extend = function(_instance, _static) { // subclass\n\tvar extend = Base.prototype.extend;\n\t\n\t// build the prototype\n\tBase._prototyping = true;\n\tvar proto = new this;\n\textend.call(proto, _instance);\n  proto.base = function() {\n    // call this method from any other method to invoke that method's ancestor\n  };\n\tdelete Base._prototyping;\n\t\n\t// create the wrapper for the constructor function\n\t//var constructor = proto.constructor.valueOf(); //-dean\n\tvar constructor = proto.constructor;\n\tvar klass = proto.constructor = function() {\n\t\tif (!Base._prototyping) {\n\t\t\tif (this._constructing || this.constructor == klass) { // instantiation\n\t\t\t\tthis._constructing = true;\n\t\t\t\tconstructor.apply(this, arguments);\n\t\t\t\tdelete this._constructing;\n\t\t\t} else if (arguments[0] != null) { // casting\n\t\t\t\treturn (arguments[0].extend || extend).call(arguments[0], proto);\n\t\t\t}\n\t\t}\n\t};\n\t\n\t// build the class interface\n\tklass.ancestor = this;\n\tklass.extend = this.extend;\n\tklass.forEach = this.forEach;\n\tklass.implement = this.implement;\n\tklass.prototype = proto;\n\tklass.toString = this.toString;\n\tklass.valueOf = function(type) {\n\t\t//return (type == \"object\") ? klass : constructor; //-dean\n\t\treturn (type == \"object\") ? klass : constructor.valueOf();\n\t};\n\textend.call(klass, _static);\n\t// class initialisation\n\tif (typeof klass.init == \"function\") klass.init();\n\treturn klass;\n};\n\nBase.prototype = {\t\n\textend: function(source, value) {\n\t\tif (arguments.length > 1) { // extending with a name/value pair\n\t\t\tvar ancestor = this[source];\n\t\t\tif (ancestor && (typeof value == \"function\") && // overriding a method?\n\t\t\t\t// the valueOf() comparison is to avoid circular references\n\t\t\t\t(!ancestor.valueOf || ancestor.valueOf() != value.valueOf()) &&\n\t\t\t\t/\\bbase\\b/.test(value)) {\n\t\t\t\t// get the underlying method\n\t\t\t\tvar method = value.valueOf();\n\t\t\t\t// override\n\t\t\t\tvalue = function() {\n\t\t\t\t\tvar previous = this.base || Base.prototype.base;\n\t\t\t\t\tthis.base = ancestor;\n\t\t\t\t\tvar returnValue = method.apply(this, arguments);\n\t\t\t\t\tthis.base = previous;\n\t\t\t\t\treturn returnValue;\n\t\t\t\t};\n\t\t\t\t// point to the underlying method\n\t\t\t\tvalue.valueOf = function(type) {\n\t\t\t\t\treturn (type == \"object\") ? value : method;\n\t\t\t\t};\n\t\t\t\tvalue.toString = Base.toString;\n\t\t\t}\n\t\t\tthis[source] = value;\n\t\t} else if (source) { // extending with an object literal\n\t\t\tvar extend = Base.prototype.extend;\n\t\t\t// if this object has a customised extend method then use it\n\t\t\tif (!Base._prototyping && typeof this != \"function\") {\n\t\t\t\textend = this.extend || extend;\n\t\t\t}\n\t\t\tvar proto = {toSource: null};\n\t\t\t// do the \"toString\" and other methods manually\n\t\t\tvar hidden = [\"constructor\", \"toString\", \"valueOf\"];\n\t\t\t// if we are prototyping then include the constructor\n\t\t\tvar i = Base._prototyping ? 0 : 1;\n\t\t\twhile (key = hidden[i++]) {\n\t\t\t\tif (source[key] != proto[key]) {\n\t\t\t\t\textend.call(this, key, source[key]);\n\n\t\t\t\t}\n\t\t\t}\n\t\t\t// copy each of the source object's properties to this object\n\t\t\tfor (var key in source) {\n\t\t\t\tif (!proto[key]) extend.call(this, key, source[key]);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n};\n\n// initialise\nBase = Base.extend({\n\tconstructor: function() {\n\t\tthis.extend(arguments[0]);\n\t}\n}, {\n\tancestor: Object,\n\tversion: \"1.1\",\n\t\n\tforEach: function(object, block, context) {\n\t\tfor (var key in object) {\n\t\t\tif (this.prototype[key] === undefined) {\n\t\t\t\tblock.call(context, object[key], key, object);\n\t\t\t}\n\t\t}\n\t},\n\t\t\n\timplement: function() {\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tif (typeof arguments[i] == \"function\") {\n\t\t\t\t// if it's a function, call it\n\t\t\t\targuments[i](this.prototype);\n\t\t\t} else {\n\t\t\t\t// add the interface using the extend method\n\t\t\t\tthis.prototype.extend(arguments[i]);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\t\n\ttoString: function() {\n\t\treturn String(this.valueOf());\n\t}\n});;/**\n * Detect browser support for specific features\n */\nwysihtml5.browser = (function() {\n  var userAgent   = navigator.userAgent,\n      testElement = document.createElement(\"div\"),\n      // Browser sniffing is unfortunately needed since some behaviors are impossible to feature detect\n      isGecko     = userAgent.indexOf(\"Gecko\")        !== -1 && userAgent.indexOf(\"KHTML\") === -1,\n      isWebKit    = userAgent.indexOf(\"AppleWebKit/\") !== -1,\n      isChrome    = userAgent.indexOf(\"Chrome/\")      !== -1,\n      isOpera     = userAgent.indexOf(\"Opera/\")       !== -1;\n\n  function iosVersion(userAgent) {\n    return +((/ipad|iphone|ipod/.test(userAgent) && userAgent.match(/ os (\\d+).+? like mac os x/)) || [undefined, 0])[1];\n  }\n\n  function androidVersion(userAgent) {\n    return +(userAgent.match(/android (\\d+)/) || [undefined, 0])[1];\n  }\n\n  function isIE(version, equation) {\n    var rv = -1,\n        re;\n\n    if (navigator.appName == 'Microsoft Internet Explorer') {\n      re = new RegExp(\"MSIE ([0-9]{1,}[\\.0-9]{0,})\");\n    } else if (navigator.appName == 'Netscape') {\n      re = new RegExp(\"Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})\");\n    }\n\n    if (re && re.exec(navigator.userAgent) != null) {\n      rv = parseFloat(RegExp.$1);\n    }\n\n    if (rv === -1) { return false; }\n    if (!version) { return true; }\n    if (!equation) { return version === rv; }\n    if (equation === \"<\") { return version < rv; }\n    if (equation === \">\") { return version > rv; }\n    if (equation === \"<=\") { return version <= rv; }\n    if (equation === \">=\") { return version >= rv; }\n  }\n\n  return {\n    // Static variable needed, publicly accessible, to be able override it in unit tests\n    USER_AGENT: userAgent,\n\n    /**\n     * Exclude browsers that are not capable of displaying and handling\n     * contentEditable as desired:\n     *    - iPhone, iPad (tested iOS 4.2.2) and Android (tested 2.2) refuse to make contentEditables focusable\n     *    - IE < 8 create invalid markup and crash randomly from time to time\n     *\n     * @return {Boolean}\n     */\n    supported: function() {\n      var userAgent                   = this.USER_AGENT.toLowerCase(),\n          // Essential for making html elements editable\n          hasContentEditableSupport   = \"contentEditable\" in testElement,\n          // Following methods are needed in order to interact with the contentEditable area\n          hasEditingApiSupport        = document.execCommand && document.queryCommandSupported && document.queryCommandState,\n          // document selector apis are only supported by IE 8+, Safari 4+, Chrome and Firefox 3.5+\n          hasQuerySelectorSupport     = document.querySelector && document.querySelectorAll,\n          // contentEditable is unusable in mobile browsers (tested iOS 4.2.2, Android 2.2, Opera Mobile, WebOS 3.05)\n          isIncompatibleMobileBrowser = (this.isIos() && iosVersion(userAgent) < 5) || (this.isAndroid() && androidVersion(userAgent) < 4) || userAgent.indexOf(\"opera mobi\") !== -1 || userAgent.indexOf(\"hpwos/\") !== -1;\n      return hasContentEditableSupport\n        && hasEditingApiSupport\n        && hasQuerySelectorSupport\n        && !isIncompatibleMobileBrowser;\n    },\n\n    isTouchDevice: function() {\n      return this.supportsEvent(\"touchmove\");\n    },\n\n    isIos: function() {\n      return (/ipad|iphone|ipod/i).test(this.USER_AGENT);\n    },\n\n    isAndroid: function() {\n      return this.USER_AGENT.indexOf(\"Android\") !== -1;\n    },\n\n    /**\n     * Whether the browser supports sandboxed iframes\n     * Currently only IE 6+ offers such feature <iframe security=\"restricted\">\n     *\n     * http://msdn.microsoft.com/en-us/library/ms534622(v=vs.85).aspx\n     * http://blogs.msdn.com/b/ie/archive/2008/01/18/using-frames-more-securely.aspx\n     *\n     * HTML5 sandboxed iframes are still buggy and their DOM is not reachable from the outside (except when using postMessage)\n     */\n    supportsSandboxedIframes: function() {\n      return isIE();\n    },\n\n    /**\n     * IE6+7 throw a mixed content warning when the src of an iframe\n     * is empty/unset or about:blank\n     * window.querySelector is implemented as of IE8\n     */\n    throwsMixedContentWarningWhenIframeSrcIsEmpty: function() {\n      return !(\"querySelector\" in document);\n    },\n\n    /**\n     * Whether the caret is correctly displayed in contentEditable elements\n     * Firefox sometimes shows a huge caret in the beginning after focusing\n     */\n    displaysCaretInEmptyContentEditableCorrectly: function() {\n      return isIE();\n    },\n\n    /**\n     * Opera and IE are the only browsers who offer the css value\n     * in the original unit, thx to the currentStyle object\n     * All other browsers provide the computed style in px via window.getComputedStyle\n     */\n    hasCurrentStyleProperty: function() {\n      return \"currentStyle\" in testElement;\n    },\n\n    /**\n     * Firefox on OSX navigates through history when hitting CMD + Arrow right/left\n     */\n    hasHistoryIssue: function() {\n      return isGecko && navigator.platform.substr(0, 3) === \"Mac\";\n    },\n\n    /**\n     * Whether the browser inserts a <br> when pressing enter in a contentEditable element\n     */\n    insertsLineBreaksOnReturn: function() {\n      return isGecko;\n    },\n\n    supportsPlaceholderAttributeOn: function(element) {\n      return \"placeholder\" in element;\n    },\n\n    supportsEvent: function(eventName) {\n      return \"on\" + eventName in testElement || (function() {\n        testElement.setAttribute(\"on\" + eventName, \"return;\");\n        return typeof(testElement[\"on\" + eventName]) === \"function\";\n      })();\n    },\n\n    /**\n     * Opera doesn't correctly fire focus/blur events when clicking in- and outside of iframe\n     */\n    supportsEventsInIframeCorrectly: function() {\n      return !isOpera;\n    },\n\n    /**\n     * Everything below IE9 doesn't know how to treat HTML5 tags\n     *\n     * @param {Object} context The document object on which to check HTML5 support\n     *\n     * @example\n     *    wysihtml5.browser.supportsHTML5Tags(document);\n     */\n    supportsHTML5Tags: function(context) {\n      var element = context.createElement(\"div\"),\n          html5   = \"<article>foo</article>\";\n      element.innerHTML = html5;\n      return element.innerHTML.toLowerCase() === html5;\n    },\n\n    /**\n     * Checks whether a document supports a certain queryCommand\n     * In particular, Opera needs a reference to a document that has a contentEditable in it's dom tree\n     * in oder to report correct results\n     *\n     * @param {Object} doc Document object on which to check for a query command\n     * @param {String} command The query command to check for\n     * @return {Boolean}\n     *\n     * @example\n     *    wysihtml5.browser.supportsCommand(document, \"bold\");\n     */\n    supportsCommand: (function() {\n      // Following commands are supported but contain bugs in some browsers\n      var buggyCommands = {\n        // formatBlock fails with some tags (eg. <blockquote>)\n        \"formatBlock\":          isIE(10, \"<=\"),\n         // When inserting unordered or ordered lists in Firefox, Chrome or Safari, the current selection or line gets\n         // converted into a list (<ul><li>...</li></ul>, <ol><li>...</li></ol>)\n         // IE and Opera act a bit different here as they convert the entire content of the current block element into a list\n        \"insertUnorderedList\":  isIE(),\n        \"insertOrderedList\":    isIE()\n      };\n\n      // Firefox throws errors for queryCommandSupported, so we have to build up our own object of supported commands\n      var supported = {\n        \"insertHTML\": isGecko\n      };\n\n      return function(doc, command) {\n        var isBuggy = buggyCommands[command];\n        if (!isBuggy) {\n          // Firefox throws errors when invoking queryCommandSupported or queryCommandEnabled\n          try {\n            return doc.queryCommandSupported(command);\n          } catch(e1) {}\n\n          try {\n            return doc.queryCommandEnabled(command);\n          } catch(e2) {\n            return !!supported[command];\n          }\n        }\n        return false;\n      };\n    })(),\n\n    /**\n     * IE: URLs starting with:\n     *    www., http://, https://, ftp://, gopher://, mailto:, new:, snews:, telnet:, wasis:, file://,\n     *    nntp://, newsrc:, ldap://, ldaps://, outlook:, mic:// and url:\n     * will automatically be auto-linked when either the user inserts them via copy&paste or presses the\n     * space bar when the caret is directly after such an url.\n     * This behavior cannot easily be avoided in IE < 9 since the logic is hardcoded in the mshtml.dll\n     * (related blog post on msdn\n     * http://blogs.msdn.com/b/ieinternals/archive/2009/09/17/prevent-automatic-hyperlinking-in-contenteditable-html.aspx).\n     */\n    doesAutoLinkingInContentEditable: function() {\n      return isIE();\n    },\n\n    /**\n     * As stated above, IE auto links urls typed into contentEditable elements\n     * Since IE9 it's possible to prevent this behavior\n     */\n    canDisableAutoLinking: function() {\n      return this.supportsCommand(document, \"AutoUrlDetect\");\n    },\n\n    /**\n     * IE leaves an empty paragraph in the contentEditable element after clearing it\n     * Chrome/Safari sometimes an empty <div>\n     */\n    clearsContentEditableCorrectly: function() {\n      return isGecko || isOpera || isWebKit;\n    },\n\n    /**\n     * IE gives wrong results for getAttribute\n     */\n    supportsGetAttributeCorrectly: function() {\n      var td = document.createElement(\"td\");\n      return td.getAttribute(\"rowspan\") != \"1\";\n    },\n\n    /**\n     * When clicking on images in IE, Opera and Firefox, they are selected, which makes it easy to interact with them.\n     * Chrome and Safari both don't support this\n     */\n    canSelectImagesInContentEditable: function() {\n      return isGecko || isIE() || isOpera;\n    },\n\n    /**\n     * All browsers except Safari and Chrome automatically scroll the range/caret position into view\n     */\n    autoScrollsToCaret: function() {\n      return !isWebKit;\n    },\n\n    /**\n     * Check whether the browser automatically closes tags that don't need to be opened\n     */\n    autoClosesUnclosedTags: function() {\n      var clonedTestElement = testElement.cloneNode(false),\n          returnValue,\n          innerHTML;\n\n      clonedTestElement.innerHTML = \"<p><div></div>\";\n      innerHTML                   = clonedTestElement.innerHTML.toLowerCase();\n      returnValue                 = innerHTML === \"<p></p><div></div>\" || innerHTML === \"<p><div></div></p>\";\n\n      // Cache result by overwriting current function\n      this.autoClosesUnclosedTags = function() { return returnValue; };\n\n      return returnValue;\n    },\n\n    /**\n     * Whether the browser supports the native document.getElementsByClassName which returns live NodeLists\n     */\n    supportsNativeGetElementsByClassName: function() {\n      return String(document.getElementsByClassName).indexOf(\"[native code]\") !== -1;\n    },\n\n    /**\n     * As of now (19.04.2011) only supported by Firefox 4 and Chrome\n     * See https://developer.mozilla.org/en/DOM/Selection/modify\n     */\n    supportsSelectionModify: function() {\n      return \"getSelection\" in window && \"modify\" in window.getSelection();\n    },\n\n    /**\n     * Opera needs a white space after a <br> in order to position the caret correctly\n     */\n    needsSpaceAfterLineBreak: function() {\n      return isOpera;\n    },\n\n    /**\n     * Whether the browser supports the speech api on the given element\n     * See http://mikepultz.com/2011/03/accessing-google-speech-api-chrome-11/\n     *\n     * @example\n     *    var input = document.createElement(\"input\");\n     *    if (wysihtml5.browser.supportsSpeechApiOn(input)) {\n     *      // ...\n     *    }\n     */\n    supportsSpeechApiOn: function(input) {\n      var chromeVersion = userAgent.match(/Chrome\\/(\\d+)/) || [undefined, 0];\n      return chromeVersion[1] >= 11 && (\"onwebkitspeechchange\" in input || \"speech\" in input);\n    },\n\n    /**\n     * IE9 crashes when setting a getter via Object.defineProperty on XMLHttpRequest or XDomainRequest\n     * See https://connect.microsoft.com/ie/feedback/details/650112\n     * or try the POC http://tifftiff.de/ie9_crash/\n     */\n    crashesWhenDefineProperty: function(property) {\n      return isIE(9) && (property === \"XMLHttpRequest\" || property === \"XDomainRequest\");\n    },\n\n    /**\n     * IE is the only browser who fires the \"focus\" event not immediately when .focus() is called on an element\n     */\n    doesAsyncFocus: function() {\n      return isIE();\n    },\n\n    /**\n     * In IE it's impssible for the user and for the selection library to set the caret after an <img> when it's the lastChild in the document\n     */\n    hasProblemsSettingCaretAfterImg: function() {\n      return isIE();\n    },\n\n    hasUndoInContextMenu: function() {\n      return isGecko || isChrome || isOpera;\n    },\n\n    /**\n     * Opera sometimes doesn't insert the node at the right position when range.insertNode(someNode)\n     * is used (regardless if rangy or native)\n     * This especially happens when the caret is positioned right after a <br> because then\n     * insertNode() will insert the node right before the <br>\n     */\n    hasInsertNodeIssue: function() {\n      return isOpera;\n    },\n\n    /**\n     * IE 8+9 don't fire the focus event of the <body> when the iframe gets focused (even though the caret gets set into the <body>)\n     */\n    hasIframeFocusIssue: function() {\n      return isIE();\n    },\n\n    /**\n     * Chrome + Safari create invalid nested markup after paste\n     *\n     *  <p>\n     *    foo\n     *    <p>bar</p> <!-- BOO! -->\n     *  </p>\n     */\n    createsNestedInvalidMarkupAfterPaste: function() {\n      return isWebKit;\n    },\n\n    supportsMutationEvents: function() {\n        return (\"MutationEvent\" in window);\n    },\n\n    /**\n      IE (at least up to 11) does not support clipboardData on event.\n      It is on window but cannot return text/html\n      Should actually check for clipboardData on paste event, but cannot in firefox\n    */\n    supportsModenPaste: function () {\n      return !(\"clipboardData\" in window);\n    }\n  };\n})();\n;wysihtml5.lang.array = function(arr) {\n  return {\n    /**\n     * Check whether a given object exists in an array\n     *\n     * @example\n     *    wysihtml5.lang.array([1, 2]).contains(1);\n     *    // => true\n     *\n     * Can be used to match array with array. If intersection is found true is returned\n     */\n    contains: function(needle) {\n      if (Array.isArray(needle)) {\n        for (var i = needle.length; i--;) {\n          if (wysihtml5.lang.array(arr).indexOf(needle[i]) !== -1) {\n            return true;\n          }\n        }\n        return false;\n      } else {\n        return wysihtml5.lang.array(arr).indexOf(needle) !== -1;\n      }\n    },\n\n    /**\n     * Check whether a given object exists in an array and return index\n     * If no elelemt found returns -1\n     *\n     * @example\n     *    wysihtml5.lang.array([1, 2]).indexOf(2);\n     *    // => 1\n     */\n    indexOf: function(needle) {\n        if (arr.indexOf) {\n          return arr.indexOf(needle);\n        } else {\n          for (var i=0, length=arr.length; i<length; i++) {\n            if (arr[i] === needle) { return i; }\n          }\n          return -1;\n        }\n    },\n\n    /**\n     * Substract one array from another\n     *\n     * @example\n     *    wysihtml5.lang.array([1, 2, 3, 4]).without([3, 4]);\n     *    // => [1, 2]\n     */\n    without: function(arrayToSubstract) {\n      arrayToSubstract = wysihtml5.lang.array(arrayToSubstract);\n      var newArr  = [],\n          i       = 0,\n          length  = arr.length;\n      for (; i<length; i++) {\n        if (!arrayToSubstract.contains(arr[i])) {\n          newArr.push(arr[i]);\n        }\n      }\n      return newArr;\n    },\n\n    /**\n     * Return a clean native array\n     *\n     * Following will convert a Live NodeList to a proper Array\n     * @example\n     *    var childNodes = wysihtml5.lang.array(document.body.childNodes).get();\n     */\n    get: function() {\n      var i        = 0,\n          length   = arr.length,\n          newArray = [];\n      for (; i<length; i++) {\n        newArray.push(arr[i]);\n      }\n      return newArray;\n    },\n\n    /**\n     * Creates a new array with the results of calling a provided function on every element in this array.\n     * optionally this can be provided as second argument\n     *\n     * @example\n     *    var childNodes = wysihtml5.lang.array([1,2,3,4]).map(function (value, index, array) {\n            return value * 2;\n     *    });\n     *    // => [2,4,6,8]\n     */\n    map: function(callback, thisArg) {\n      if (Array.prototype.map) {\n        return arr.map(callback, thisArg);\n      } else {\n        var len = arr.length >>> 0,\n            A = new Array(len),\n            i = 0;\n        for (; i < len; i++) {\n           A[i] = callback.call(thisArg, arr[i], i, arr);\n        }\n        return A;\n      }\n    },\n\n    /* ReturnS new array without duplicate entries\n     *\n     * @example\n     *    var uniq = wysihtml5.lang.array([1,2,3,2,1,4]).unique();\n     *    // => [1,2,3,4]\n     */\n    unique: function() {\n      var vals = [],\n          max = arr.length,\n          idx = 0;\n\n      while (idx < max) {\n        if (!wysihtml5.lang.array(vals).contains(arr[idx])) {\n          vals.push(arr[idx]);\n        }\n        idx++;\n      }\n      return vals;\n    }\n\n  };\n};\n;wysihtml5.lang.Dispatcher = Base.extend(\n  /** @scope wysihtml5.lang.Dialog.prototype */ {\n  on: function(eventName, handler) {\n    this.events = this.events || {};\n    this.events[eventName] = this.events[eventName] || [];\n    this.events[eventName].push(handler);\n    return this;\n  },\n\n  off: function(eventName, handler) {\n    this.events = this.events || {};\n    var i = 0,\n        handlers,\n        newHandlers;\n    if (eventName) {\n      handlers    = this.events[eventName] || [],\n      newHandlers = [];\n      for (; i<handlers.length; i++) {\n        if (handlers[i] !== handler && handler) {\n          newHandlers.push(handlers[i]);\n        }\n      }\n      this.events[eventName] = newHandlers;\n    } else {\n      // Clean up all events\n      this.events = {};\n    }\n    return this;\n  },\n\n  fire: function(eventName, payload) {\n    this.events = this.events || {};\n    var handlers = this.events[eventName] || [],\n        i        = 0;\n    for (; i<handlers.length; i++) {\n      handlers[i].call(this, payload);\n    }\n    return this;\n  },\n\n  // deprecated, use .on()\n  observe: function() {\n    return this.on.apply(this, arguments);\n  },\n\n  // deprecated, use .off()\n  stopObserving: function() {\n    return this.off.apply(this, arguments);\n  }\n});\n;wysihtml5.lang.object = function(obj) {\n  return {\n    /**\n     * @example\n     *    wysihtml5.lang.object({ foo: 1, bar: 1 }).merge({ bar: 2, baz: 3 }).get();\n     *    // => { foo: 1, bar: 2, baz: 3 }\n     */\n    merge: function(otherObj) {\n      for (var i in otherObj) {\n        obj[i] = otherObj[i];\n      }\n      return this;\n    },\n\n    get: function() {\n      return obj;\n    },\n\n    /**\n     * @example\n     *    wysihtml5.lang.object({ foo: 1 }).clone();\n     *    // => { foo: 1 }\n     *\n     *    v0.4.14 adds options for deep clone : wysihtml5.lang.object({ foo: 1 }).clone(true);\n     */\n    clone: function(deep) {\n      var newObj = {},\n          i;\n\n      if (obj === null || !wysihtml5.lang.object(obj).isPlainObject()) {\n        return obj;\n      }\n\n      for (i in obj) {\n        if(obj.hasOwnProperty(i)) {\n          if (deep) {\n            newObj[i] = wysihtml5.lang.object(obj[i]).clone(deep);\n          } else {\n            newObj[i] = obj[i];\n          }\n        }\n      }\n      return newObj;\n    },\n\n    /**\n     * @example\n     *    wysihtml5.lang.object([]).isArray();\n     *    // => true\n     */\n    isArray: function() {\n      return Object.prototype.toString.call(obj) === \"[object Array]\";\n    },\n\n    /**\n     * @example\n     *    wysihtml5.lang.object(function() {}).isFunction();\n     *    // => true\n     */\n    isFunction: function() {\n      return Object.prototype.toString.call(obj) === '[object Function]';\n    },\n\n    isPlainObject: function () {\n      return Object.prototype.toString.call(obj) === '[object Object]';\n    }\n  };\n};\n;(function() {\n  var WHITE_SPACE_START = /^\\s+/,\n      WHITE_SPACE_END   = /\\s+$/,\n      ENTITY_REG_EXP    = /[&<>\\t\"]/g,\n      ENTITY_MAP = {\n        '&': '&amp;',\n        '<': '&lt;',\n        '>': '&gt;',\n        '\"': \"&quot;\",\n        '\\t':\"&nbsp; \"\n      };\n  wysihtml5.lang.string = function(str) {\n    str = String(str);\n    return {\n      /**\n       * @example\n       *    wysihtml5.lang.string(\"   foo   \").trim();\n       *    // => \"foo\"\n       */\n      trim: function() {\n        return str.replace(WHITE_SPACE_START, \"\").replace(WHITE_SPACE_END, \"\");\n      },\n\n      /**\n       * @example\n       *    wysihtml5.lang.string(\"Hello #{name}\").interpolate({ name: \"Christopher\" });\n       *    // => \"Hello Christopher\"\n       */\n      interpolate: function(vars) {\n        for (var i in vars) {\n          str = this.replace(\"#{\" + i + \"}\").by(vars[i]);\n        }\n        return str;\n      },\n\n      /**\n       * @example\n       *    wysihtml5.lang.string(\"Hello Tom\").replace(\"Tom\").with(\"Hans\");\n       *    // => \"Hello Hans\"\n       */\n      replace: function(search) {\n        return {\n          by: function(replace) {\n            return str.split(search).join(replace);\n          }\n        };\n      },\n\n      /**\n       * @example\n       *    wysihtml5.lang.string(\"hello<br>\").escapeHTML();\n       *    // => \"hello&lt;br&gt;\"\n       */\n      escapeHTML: function(linebreaks, convertSpaces) {\n        var html = str.replace(ENTITY_REG_EXP, function(c) { return ENTITY_MAP[c]; });\n        if (linebreaks) {\n          html = html.replace(/(?:\\r\\n|\\r|\\n)/g, '<br />');\n        }\n        if (convertSpaces) {\n          html = html.replace(/  /gi, \"&nbsp; \");\n        }\n        return html;\n      }\n    };\n  };\n})();\n;/**\n * Find urls in descendant text nodes of an element and auto-links them\n * Inspired by http://james.padolsey.com/javascript/find-and-replace-text-with-javascript/\n *\n * @param {Element} element Container element in which to search for urls\n *\n * @example\n *    <div id=\"text-container\">Please click here: www.google.com</div>\n *    <script>wysihtml5.dom.autoLink(document.getElementById(\"text-container\"));</script>\n */\n(function(wysihtml5) {\n  var /**\n       * Don't auto-link urls that are contained in the following elements:\n       */\n      IGNORE_URLS_IN        = wysihtml5.lang.array([\"CODE\", \"PRE\", \"A\", \"SCRIPT\", \"HEAD\", \"TITLE\", \"STYLE\"]),\n      /**\n       * revision 1:\n       *    /(\\S+\\.{1}[^\\s\\,\\.\\!]+)/g\n       *\n       * revision 2:\n       *    /(\\b(((https?|ftp):\\/\\/)|(www\\.))[-A-Z0-9+&@#\\/%?=~_|!:,.;\\[\\]]*[-A-Z0-9+&@#\\/%=~_|])/gim\n       *\n       * put this in the beginning if you don't wan't to match within a word\n       *    (^|[\\>\\(\\{\\[\\s\\>])\n       */\n      URL_REG_EXP           = /((https?:\\/\\/|www\\.)[^\\s<]{3,})/gi,\n      TRAILING_CHAR_REG_EXP = /([^\\w\\/\\-](,?))$/i,\n      MAX_DISPLAY_LENGTH    = 100,\n      BRACKETS              = { \")\": \"(\", \"]\": \"[\", \"}\": \"{\" };\n\n  function autoLink(element, ignoreInClasses) {\n    if (_hasParentThatShouldBeIgnored(element, ignoreInClasses)) {\n      return element;\n    }\n\n    if (element === element.ownerDocument.documentElement) {\n      element = element.ownerDocument.body;\n    }\n\n    return _parseNode(element, ignoreInClasses);\n  }\n\n  /**\n   * This is basically a rebuild of\n   * the rails auto_link_urls text helper\n   */\n  function _convertUrlsToLinks(str) {\n    return str.replace(URL_REG_EXP, function(match, url) {\n      var punctuation = (url.match(TRAILING_CHAR_REG_EXP) || [])[1] || \"\",\n          opening     = BRACKETS[punctuation];\n      url = url.replace(TRAILING_CHAR_REG_EXP, \"\");\n\n      if (url.split(opening).length > url.split(punctuation).length) {\n        url = url + punctuation;\n        punctuation = \"\";\n      }\n      var realUrl    = url,\n          displayUrl = url;\n      if (url.length > MAX_DISPLAY_LENGTH) {\n        displayUrl = displayUrl.substr(0, MAX_DISPLAY_LENGTH) + \"...\";\n      }\n      // Add http prefix if necessary\n      if (realUrl.substr(0, 4) === \"www.\") {\n        realUrl = \"http://\" + realUrl;\n      }\n\n      return '<a href=\"' + realUrl + '\">' + displayUrl + '</a>' + punctuation;\n    });\n  }\n\n  /**\n   * Creates or (if already cached) returns a temp element\n   * for the given document object\n   */\n  function _getTempElement(context) {\n    var tempElement = context._wysihtml5_tempElement;\n    if (!tempElement) {\n      tempElement = context._wysihtml5_tempElement = context.createElement(\"div\");\n    }\n    return tempElement;\n  }\n\n  /**\n   * Replaces the original text nodes with the newly auto-linked dom tree\n   */\n  function _wrapMatchesInNode(textNode) {\n    var parentNode  = textNode.parentNode,\n        nodeValue   = wysihtml5.lang.string(textNode.data).escapeHTML(),\n        tempElement = _getTempElement(parentNode.ownerDocument);\n\n    // We need to insert an empty/temporary <span /> to fix IE quirks\n    // Elsewise IE would strip white space in the beginning\n    tempElement.innerHTML = \"<span></span>\" + _convertUrlsToLinks(nodeValue);\n    tempElement.removeChild(tempElement.firstChild);\n\n    while (tempElement.firstChild) {\n      // inserts tempElement.firstChild before textNode\n      parentNode.insertBefore(tempElement.firstChild, textNode);\n    }\n    parentNode.removeChild(textNode);\n  }\n\n  function _hasParentThatShouldBeIgnored(node, ignoreInClasses) {\n    var nodeName;\n    while (node.parentNode) {\n      node = node.parentNode;\n      nodeName = node.nodeName;\n      if (node.className && wysihtml5.lang.array(node.className.split(' ')).contains(ignoreInClasses)) {\n        return true;\n      }\n      if (IGNORE_URLS_IN.contains(nodeName)) {\n        return true;\n      } else if (nodeName === \"body\") {\n        return false;\n      }\n    }\n    return false;\n  }\n\n  function _parseNode(element, ignoreInClasses) {\n    if (IGNORE_URLS_IN.contains(element.nodeName)) {\n      return;\n    }\n\n    if (element.className && wysihtml5.lang.array(element.className.split(' ')).contains(ignoreInClasses)) {\n      return;\n    }\n\n    if (element.nodeType === wysihtml5.TEXT_NODE && element.data.match(URL_REG_EXP)) {\n      _wrapMatchesInNode(element);\n      return;\n    }\n\n    var childNodes        = wysihtml5.lang.array(element.childNodes).get(),\n        childNodesLength  = childNodes.length,\n        i                 = 0;\n\n    for (; i<childNodesLength; i++) {\n      _parseNode(childNodes[i], ignoreInClasses);\n    }\n\n    return element;\n  }\n\n  wysihtml5.dom.autoLink = autoLink;\n\n  // Reveal url reg exp to the outside\n  wysihtml5.dom.autoLink.URL_REG_EXP = URL_REG_EXP;\n})(wysihtml5);\n;(function(wysihtml5) {\n  var api = wysihtml5.dom;\n\n  api.addClass = function(element, className) {\n    var classList = element.classList;\n    if (classList) {\n      return classList.add(className);\n    }\n    if (api.hasClass(element, className)) {\n      return;\n    }\n    element.className += \" \" + className;\n  };\n\n  api.removeClass = function(element, className) {\n    var classList = element.classList;\n    if (classList) {\n      return classList.remove(className);\n    }\n\n    element.className = element.className.replace(new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\"), \" \");\n  };\n\n  api.hasClass = function(element, className) {\n    var classList = element.classList;\n    if (classList) {\n      return classList.contains(className);\n    }\n\n    var elementClassName = element.className;\n    return (elementClassName.length > 0 && (elementClassName == className || new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\").test(elementClassName)));\n  };\n})(wysihtml5);\n;wysihtml5.dom.contains = (function() {\n  var documentElement = document.documentElement;\n  if (documentElement.contains) {\n    return function(container, element) {\n      if (element.nodeType !== wysihtml5.ELEMENT_NODE) {\n        element = element.parentNode;\n      }\n      return container !== element && container.contains(element);\n    };\n  } else if (documentElement.compareDocumentPosition) {\n    return function(container, element) {\n      // https://developer.mozilla.org/en/DOM/Node.compareDocumentPosition\n      return !!(container.compareDocumentPosition(element) & 16);\n    };\n  }\n})();\n;/**\n * Converts an HTML fragment/element into a unordered/ordered list\n *\n * @param {Element} element The element which should be turned into a list\n * @param {String} listType The list type in which to convert the tree (either \"ul\" or \"ol\")\n * @return {Element} The created list\n *\n * @example\n *    <!-- Assume the following dom: -->\n *    <span id=\"pseudo-list\">\n *      eminem<br>\n *      dr. dre\n *      <div>50 Cent</div>\n *    </span>\n *\n *    <script>\n *      wysihtml5.dom.convertToList(document.getElementById(\"pseudo-list\"), \"ul\");\n *    </script>\n *\n *    <!-- Will result in: -->\n *    <ul>\n *      <li>eminem</li>\n *      <li>dr. dre</li>\n *      <li>50 Cent</li>\n *    </ul>\n */\nwysihtml5.dom.convertToList = (function() {\n  function _createListItem(doc, list) {\n    var listItem = doc.createElement(\"li\");\n    list.appendChild(listItem);\n    return listItem;\n  }\n\n  function _createList(doc, type) {\n    return doc.createElement(type);\n  }\n\n  function convertToList(element, listType, uneditableClass) {\n    if (element.nodeName === \"UL\" || element.nodeName === \"OL\" || element.nodeName === \"MENU\") {\n      // Already a list\n      return element;\n    }\n\n    var doc               = element.ownerDocument,\n        list              = _createList(doc, listType),\n        lineBreaks        = element.querySelectorAll(\"br\"),\n        lineBreaksLength  = lineBreaks.length,\n        childNodes,\n        childNodesLength,\n        childNode,\n        lineBreak,\n        parentNode,\n        isBlockElement,\n        isLineBreak,\n        currentListItem,\n        i;\n\n    // First find <br> at the end of inline elements and move them behind them\n    for (i=0; i<lineBreaksLength; i++) {\n      lineBreak = lineBreaks[i];\n      while ((parentNode = lineBreak.parentNode) && parentNode !== element && parentNode.lastChild === lineBreak) {\n        if (wysihtml5.dom.getStyle(\"display\").from(parentNode) === \"block\") {\n          parentNode.removeChild(lineBreak);\n          break;\n        }\n        wysihtml5.dom.insert(lineBreak).after(lineBreak.parentNode);\n      }\n    }\n\n    childNodes        = wysihtml5.lang.array(element.childNodes).get();\n    childNodesLength  = childNodes.length;\n\n    for (i=0; i<childNodesLength; i++) {\n      currentListItem   = currentListItem || _createListItem(doc, list);\n      childNode         = childNodes[i];\n      isBlockElement    = wysihtml5.dom.getStyle(\"display\").from(childNode) === \"block\";\n      isLineBreak       = childNode.nodeName === \"BR\";\n\n      // consider uneditable as an inline element\n      if (isBlockElement && (!uneditableClass || !wysihtml5.dom.hasClass(childNode, uneditableClass))) {\n        // Append blockElement to current <li> if empty, otherwise create a new one\n        currentListItem = currentListItem.firstChild ? _createListItem(doc, list) : currentListItem;\n        currentListItem.appendChild(childNode);\n        currentListItem = null;\n        continue;\n      }\n\n      if (isLineBreak) {\n        // Only create a new list item in the next iteration when the current one has already content\n        currentListItem = currentListItem.firstChild ? null : currentListItem;\n        continue;\n      }\n\n      currentListItem.appendChild(childNode);\n    }\n\n    if (childNodes.length === 0) {\n      _createListItem(doc, list);\n    }\n\n    element.parentNode.replaceChild(list, element);\n    return list;\n  }\n\n  return convertToList;\n})();\n;/**\n * Copy a set of attributes from one element to another\n *\n * @param {Array} attributesToCopy List of attributes which should be copied\n * @return {Object} Returns an object which offers the \"from\" method which can be invoked with the element where to\n *    copy the attributes from., this again returns an object which provides a method named \"to\" which can be invoked\n *    with the element where to copy the attributes to (see example)\n *\n * @example\n *    var textarea    = document.querySelector(\"textarea\"),\n *        div         = document.querySelector(\"div[contenteditable=true]\"),\n *        anotherDiv  = document.querySelector(\"div.preview\");\n *    wysihtml5.dom.copyAttributes([\"spellcheck\", \"value\", \"placeholder\"]).from(textarea).to(div).andTo(anotherDiv);\n *\n */\nwysihtml5.dom.copyAttributes = function(attributesToCopy) {\n  return {\n    from: function(elementToCopyFrom) {\n      return {\n        to: function(elementToCopyTo) {\n          var attribute,\n              i         = 0,\n              length    = attributesToCopy.length;\n          for (; i<length; i++) {\n            attribute = attributesToCopy[i];\n            if (typeof(elementToCopyFrom[attribute]) !== \"undefined\" && elementToCopyFrom[attribute] !== \"\") {\n              elementToCopyTo[attribute] = elementToCopyFrom[attribute];\n            }\n          }\n          return { andTo: arguments.callee };\n        }\n      };\n    }\n  };\n};\n;/**\n * Copy a set of styles from one element to another\n * Please note that this only works properly across browsers when the element from which to copy the styles\n * is in the dom\n *\n * Interesting article on how to copy styles\n *\n * @param {Array} stylesToCopy List of styles which should be copied\n * @return {Object} Returns an object which offers the \"from\" method which can be invoked with the element where to\n *    copy the styles from., this again returns an object which provides a method named \"to\" which can be invoked\n *    with the element where to copy the styles to (see example)\n *\n * @example\n *    var textarea    = document.querySelector(\"textarea\"),\n *        div         = document.querySelector(\"div[contenteditable=true]\"),\n *        anotherDiv  = document.querySelector(\"div.preview\");\n *    wysihtml5.dom.copyStyles([\"overflow-y\", \"width\", \"height\"]).from(textarea).to(div).andTo(anotherDiv);\n *\n */\n(function(dom) {\n\n  /**\n   * Mozilla, WebKit and Opera recalculate the computed width when box-sizing: boder-box; is set\n   * So if an element has \"width: 200px; -moz-box-sizing: border-box; border: 1px;\" then\n   * its computed css width will be 198px\n   *\n   * See https://bugzilla.mozilla.org/show_bug.cgi?id=520992\n   */\n  var BOX_SIZING_PROPERTIES = [\"-webkit-box-sizing\", \"-moz-box-sizing\", \"-ms-box-sizing\", \"box-sizing\"];\n\n  var shouldIgnoreBoxSizingBorderBox = function(element) {\n    if (hasBoxSizingBorderBox(element)) {\n       return parseInt(dom.getStyle(\"width\").from(element), 10) < element.offsetWidth;\n    }\n    return false;\n  };\n\n  var hasBoxSizingBorderBox = function(element) {\n    var i       = 0,\n        length  = BOX_SIZING_PROPERTIES.length;\n    for (; i<length; i++) {\n      if (dom.getStyle(BOX_SIZING_PROPERTIES[i]).from(element) === \"border-box\") {\n        return BOX_SIZING_PROPERTIES[i];\n      }\n    }\n  };\n\n  dom.copyStyles = function(stylesToCopy) {\n    return {\n      from: function(element) {\n        if (shouldIgnoreBoxSizingBorderBox(element)) {\n          stylesToCopy = wysihtml5.lang.array(stylesToCopy).without(BOX_SIZING_PROPERTIES);\n        }\n\n        var cssText = \"\",\n            length  = stylesToCopy.length,\n            i       = 0,\n            property;\n        for (; i<length; i++) {\n          property = stylesToCopy[i];\n          cssText += property + \":\" + dom.getStyle(property).from(element) + \";\";\n        }\n\n        return {\n          to: function(element) {\n            dom.setStyles(cssText).on(element);\n            return { andTo: arguments.callee };\n          }\n        };\n      }\n    };\n  };\n})(wysihtml5.dom);\n;/**\n * Event Delegation\n *\n * @example\n *    wysihtml5.dom.delegate(document.body, \"a\", \"click\", function() {\n *      // foo\n *    });\n */\n(function(wysihtml5) {\n\n  wysihtml5.dom.delegate = function(container, selector, eventName, handler) {\n    return wysihtml5.dom.observe(container, eventName, function(event) {\n      var target    = event.target,\n          match     = wysihtml5.lang.array(container.querySelectorAll(selector));\n\n      while (target && target !== container) {\n        if (match.contains(target)) {\n          handler.call(target, event);\n          break;\n        }\n        target = target.parentNode;\n      }\n    });\n  };\n\n})(wysihtml5);\n;// TODO: Refactor dom tree traversing here\n(function(wysihtml5) {\n  wysihtml5.dom.domNode = function(node) {\n    var defaultNodeTypes = [wysihtml5.ELEMENT_NODE, wysihtml5.TEXT_NODE];\n\n    var _isBlankText = function(node) {\n      return node.nodeType === wysihtml5.TEXT_NODE && (/^\\s*$/g).test(node.data);\n    };\n\n    return {\n\n      // var node = wysihtml5.dom.domNode(element).prev({nodeTypes: [1,3], ignoreBlankTexts: true});\n      prev: function(options) {\n        var prevNode = node.previousSibling,\n            types = (options && options.nodeTypes) ? options.nodeTypes : defaultNodeTypes;\n        \n        if (!prevNode) {\n          return null;\n        }\n\n        if (\n          (!wysihtml5.lang.array(types).contains(prevNode.nodeType)) || // nodeTypes check.\n          (options && options.ignoreBlankTexts && _isBlankText(prevNode)) // Blank text nodes bypassed if set\n        ) {\n          return wysihtml5.dom.domNode(prevNode).prev(options);\n        }\n        \n        return prevNode;\n      },\n\n      // var node = wysihtml5.dom.domNode(element).next({nodeTypes: [1,3], ignoreBlankTexts: true});\n      next: function(options) {\n        var nextNode = node.nextSibling,\n            types = (options && options.nodeTypes) ? options.nodeTypes : defaultNodeTypes;\n        \n        if (!nextNode) {\n          return null;\n        }\n\n        if (\n          (!wysihtml5.lang.array(types).contains(nextNode.nodeType)) || // nodeTypes check.\n          (options && options.ignoreBlankTexts && _isBlankText(nextNode)) // blank text nodes bypassed if set\n        ) {\n          return wysihtml5.dom.domNode(nextNode).next(options);\n        }\n        \n        return nextNode;\n      }\n\n\n\n    };\n  };\n})(wysihtml5);;/**\n * Returns the given html wrapped in a div element\n *\n * Fixing IE's inability to treat unknown elements (HTML5 section, article, ...) correctly\n * when inserted via innerHTML\n *\n * @param {String} html The html which should be wrapped in a dom element\n * @param {Obejct} [context] Document object of the context the html belongs to\n *\n * @example\n *    wysihtml5.dom.getAsDom(\"<article>foo</article>\");\n */\nwysihtml5.dom.getAsDom = (function() {\n\n  var _innerHTMLShiv = function(html, context) {\n    var tempElement = context.createElement(\"div\");\n    tempElement.style.display = \"none\";\n    context.body.appendChild(tempElement);\n    // IE throws an exception when trying to insert <frameset></frameset> via innerHTML\n    try { tempElement.innerHTML = html; } catch(e) {}\n    context.body.removeChild(tempElement);\n    return tempElement;\n  };\n\n  /**\n   * Make sure IE supports HTML5 tags, which is accomplished by simply creating one instance of each element\n   */\n  var _ensureHTML5Compatibility = function(context) {\n    if (context._wysihtml5_supportsHTML5Tags) {\n      return;\n    }\n    for (var i=0, length=HTML5_ELEMENTS.length; i<length; i++) {\n      context.createElement(HTML5_ELEMENTS[i]);\n    }\n    context._wysihtml5_supportsHTML5Tags = true;\n  };\n\n\n  /**\n   * List of html5 tags\n   * taken from http://simon.html5.org/html5-elements\n   */\n  var HTML5_ELEMENTS = [\n    \"abbr\", \"article\", \"aside\", \"audio\", \"bdi\", \"canvas\", \"command\", \"datalist\", \"details\", \"figcaption\",\n    \"figure\", \"footer\", \"header\", \"hgroup\", \"keygen\", \"mark\", \"meter\", \"nav\", \"output\", \"progress\",\n    \"rp\", \"rt\", \"ruby\", \"svg\", \"section\", \"source\", \"summary\", \"time\", \"track\", \"video\", \"wbr\"\n  ];\n\n  return function(html, context) {\n    context = context || document;\n    var tempElement;\n    if (typeof(html) === \"object\" && html.nodeType) {\n      tempElement = context.createElement(\"div\");\n      tempElement.appendChild(html);\n    } else if (wysihtml5.browser.supportsHTML5Tags(context)) {\n      tempElement = context.createElement(\"div\");\n      tempElement.innerHTML = html;\n    } else {\n      _ensureHTML5Compatibility(context);\n      tempElement = _innerHTMLShiv(html, context);\n    }\n    return tempElement;\n  };\n})();\n;/**\n * Walks the dom tree from the given node up until it finds a match\n * Designed for optimal performance.\n *\n * @param {Element} node The from which to check the parent nodes\n * @param {Object} matchingSet Object to match against (possible properties: nodeName, className, classRegExp)\n * @param {Number} [levels] How many parents should the function check up from the current node (defaults to 50)\n * @return {null|Element} Returns the first element that matched the desiredNodeName(s)\n * @example\n *    var listElement = wysihtml5.dom.getParentElement(document.querySelector(\"li\"), { nodeName: [\"MENU\", \"UL\", \"OL\"] });\n *    // ... or ...\n *    var unorderedListElement = wysihtml5.dom.getParentElement(document.querySelector(\"li\"), { nodeName: \"UL\" });\n *    // ... or ...\n *    var coloredElement = wysihtml5.dom.getParentElement(myTextNode, { nodeName: \"SPAN\", className: \"wysiwyg-color-red\", classRegExp: /wysiwyg-color-[a-z]/g });\n */\nwysihtml5.dom.getParentElement = (function() {\n\n  function _isSameNodeName(nodeName, desiredNodeNames) {\n    if (!desiredNodeNames || !desiredNodeNames.length) {\n      return true;\n    }\n\n    if (typeof(desiredNodeNames) === \"string\") {\n      return nodeName === desiredNodeNames;\n    } else {\n      return wysihtml5.lang.array(desiredNodeNames).contains(nodeName);\n    }\n  }\n\n  function _isElement(node) {\n    return node.nodeType === wysihtml5.ELEMENT_NODE;\n  }\n\n  function _hasClassName(element, className, classRegExp) {\n    var classNames = (element.className || \"\").match(classRegExp) || [];\n    if (!className) {\n      return !!classNames.length;\n    }\n    return classNames[classNames.length - 1] === className;\n  }\n\n  function _hasStyle(element, cssStyle, styleRegExp) {\n    var styles = (element.getAttribute('style') || \"\").match(styleRegExp) || [];\n    if (!cssStyle) {\n      return !!styles.length;\n    }\n    return styles[styles.length - 1] === cssStyle;\n  }\n\n  return function(node, matchingSet, levels, container) {\n    var findByStyle = (matchingSet.cssStyle || matchingSet.styleRegExp),\n        findByClass = (matchingSet.className || matchingSet.classRegExp);\n\n    levels = levels || 50; // Go max 50 nodes upwards from current node\n\n    while (levels-- && node && node.nodeName !== \"BODY\" && (!container || node !== container)) {\n      if (_isElement(node) && _isSameNodeName(node.nodeName, matchingSet.nodeName) &&\n          (!findByStyle || _hasStyle(node, matchingSet.cssStyle, matchingSet.styleRegExp)) &&\n          (!findByClass || _hasClassName(node, matchingSet.className, matchingSet.classRegExp))\n      ) {\n        return node;\n      }\n      node = node.parentNode;\n    }\n    return null;\n  };\n})();\n;/**\n * Get element's style for a specific css property\n *\n * @param {Element} element The element on which to retrieve the style\n * @param {String} property The CSS property to retrieve (\"float\", \"display\", \"text-align\", ...)\n *\n * @example\n *    wysihtml5.dom.getStyle(\"display\").from(document.body);\n *    // => \"block\"\n */\nwysihtml5.dom.getStyle = (function() {\n  var stylePropertyMapping = {\n        \"float\": (\"styleFloat\" in document.createElement(\"div\").style) ? \"styleFloat\" : \"cssFloat\"\n      },\n      REG_EXP_CAMELIZE = /\\-[a-z]/g;\n\n  function camelize(str) {\n    return str.replace(REG_EXP_CAMELIZE, function(match) {\n      return match.charAt(1).toUpperCase();\n    });\n  }\n\n  return function(property) {\n    return {\n      from: function(element) {\n        if (element.nodeType !== wysihtml5.ELEMENT_NODE) {\n          return;\n        }\n\n        var doc               = element.ownerDocument,\n            camelizedProperty = stylePropertyMapping[property] || camelize(property),\n            style             = element.style,\n            currentStyle      = element.currentStyle,\n            styleValue        = style[camelizedProperty];\n        if (styleValue) {\n          return styleValue;\n        }\n\n        // currentStyle is no standard and only supported by Opera and IE but it has one important advantage over the standard-compliant\n        // window.getComputedStyle, since it returns css property values in their original unit:\n        // If you set an elements width to \"50%\", window.getComputedStyle will give you it's current width in px while currentStyle\n        // gives you the original \"50%\".\n        // Opera supports both, currentStyle and window.getComputedStyle, that's why checking for currentStyle should have higher prio\n        if (currentStyle) {\n          try {\n            return currentStyle[camelizedProperty];\n          } catch(e) {\n            //ie will occasionally fail for unknown reasons. swallowing exception\n          }\n        }\n\n        var win                 = doc.defaultView || doc.parentWindow,\n            needsOverflowReset  = (property === \"height\" || property === \"width\") && element.nodeName === \"TEXTAREA\",\n            originalOverflow,\n            returnValue;\n\n        if (win.getComputedStyle) {\n          // Chrome and Safari both calculate a wrong width and height for textareas when they have scroll bars\n          // therfore we remove and restore the scrollbar and calculate the value in between\n          if (needsOverflowReset) {\n            originalOverflow = style.overflow;\n            style.overflow = \"hidden\";\n          }\n          returnValue = win.getComputedStyle(element, null).getPropertyValue(property);\n          if (needsOverflowReset) {\n            style.overflow = originalOverflow || \"\";\n          }\n          return returnValue;\n        }\n      }\n    };\n  };\n})();\n;wysihtml5.dom.getTextNodes = function(node, ingoreEmpty){\n  var all = [];\n  for (node=node.firstChild;node;node=node.nextSibling){\n    if (node.nodeType == 3) {\n      if (!ingoreEmpty || !(/^\\s*$/).test(node.innerText || node.textContent)) {\n        all.push(node);\n      }\n    } else {\n      all = all.concat(wysihtml5.dom.getTextNodes(node, ingoreEmpty));\n    }\n  }\n  return all;\n};;/**\n * High performant way to check whether an element with a specific tag name is in the given document\n * Optimized for being heavily executed\n * Unleashes the power of live node lists\n *\n * @param {Object} doc The document object of the context where to check\n * @param {String} tagName Upper cased tag name\n * @example\n *    wysihtml5.dom.hasElementWithTagName(document, \"IMG\");\n */\nwysihtml5.dom.hasElementWithTagName = (function() {\n  var LIVE_CACHE          = {},\n      DOCUMENT_IDENTIFIER = 1;\n\n  function _getDocumentIdentifier(doc) {\n    return doc._wysihtml5_identifier || (doc._wysihtml5_identifier = DOCUMENT_IDENTIFIER++);\n  }\n\n  return function(doc, tagName) {\n    var key         = _getDocumentIdentifier(doc) + \":\" + tagName,\n        cacheEntry  = LIVE_CACHE[key];\n    if (!cacheEntry) {\n      cacheEntry = LIVE_CACHE[key] = doc.getElementsByTagName(tagName);\n    }\n\n    return cacheEntry.length > 0;\n  };\n})();\n;/**\n * High performant way to check whether an element with a specific class name is in the given document\n * Optimized for being heavily executed\n * Unleashes the power of live node lists\n *\n * @param {Object} doc The document object of the context where to check\n * @param {String} tagName Upper cased tag name\n * @example\n *    wysihtml5.dom.hasElementWithClassName(document, \"foobar\");\n */\n(function(wysihtml5) {\n  var LIVE_CACHE          = {},\n      DOCUMENT_IDENTIFIER = 1;\n\n  function _getDocumentIdentifier(doc) {\n    return doc._wysihtml5_identifier || (doc._wysihtml5_identifier = DOCUMENT_IDENTIFIER++);\n  }\n\n  wysihtml5.dom.hasElementWithClassName = function(doc, className) {\n    // getElementsByClassName is not supported by IE<9\n    // but is sometimes mocked via library code (which then doesn't return live node lists)\n    if (!wysihtml5.browser.supportsNativeGetElementsByClassName()) {\n      return !!doc.querySelector(\".\" + className);\n    }\n\n    var key         = _getDocumentIdentifier(doc) + \":\" + className,\n        cacheEntry  = LIVE_CACHE[key];\n    if (!cacheEntry) {\n      cacheEntry = LIVE_CACHE[key] = doc.getElementsByClassName(className);\n    }\n\n    return cacheEntry.length > 0;\n  };\n})(wysihtml5);\n;wysihtml5.dom.insert = function(elementToInsert) {\n  return {\n    after: function(element) {\n      element.parentNode.insertBefore(elementToInsert, element.nextSibling);\n    },\n\n    before: function(element) {\n      element.parentNode.insertBefore(elementToInsert, element);\n    },\n\n    into: function(element) {\n      element.appendChild(elementToInsert);\n    }\n  };\n};\n;wysihtml5.dom.insertCSS = function(rules) {\n  rules = rules.join(\"\\n\");\n\n  return {\n    into: function(doc) {\n      var styleElement = doc.createElement(\"style\");\n      styleElement.type = \"text/css\";\n\n      if (styleElement.styleSheet) {\n        styleElement.styleSheet.cssText = rules;\n      } else {\n        styleElement.appendChild(doc.createTextNode(rules));\n      }\n\n      var link = doc.querySelector(\"head link\");\n      if (link) {\n        link.parentNode.insertBefore(styleElement, link);\n        return;\n      } else {\n        var head = doc.querySelector(\"head\");\n        if (head) {\n          head.appendChild(styleElement);\n        }\n      }\n    }\n  };\n};\n;// TODO: Refactor dom tree traversing here\n(function(wysihtml5) {\n  wysihtml5.dom.lineBreaks = function(node) {\n\n    function _isLineBreak(n) {\n      return n.nodeName === \"BR\";\n    }\n\n    /**\n     * Checks whether the elment causes a visual line break\n     * (<br> or block elements)\n     */\n    function _isLineBreakOrBlockElement(element) {\n      if (_isLineBreak(element)) {\n        return true;\n      }\n\n      if (wysihtml5.dom.getStyle(\"display\").from(element) === \"block\") {\n        return true;\n      }\n\n      return false;\n    }\n\n    return {\n\n      /* wysihtml5.dom.lineBreaks(element).add();\n       *\n       * Adds line breaks before and after the given node if the previous and next siblings\n       * aren't already causing a visual line break (block element or <br>)\n       */\n      add: function(options) {\n        var doc             = node.ownerDocument,\n          nextSibling     = wysihtml5.dom.domNode(node).next({ignoreBlankTexts: true}),\n          previousSibling = wysihtml5.dom.domNode(node).prev({ignoreBlankTexts: true});\n\n        if (nextSibling && !_isLineBreakOrBlockElement(nextSibling)) {\n          wysihtml5.dom.insert(doc.createElement(\"br\")).after(node);\n        }\n        if (previousSibling && !_isLineBreakOrBlockElement(previousSibling)) {\n          wysihtml5.dom.insert(doc.createElement(\"br\")).before(node);\n        }\n      },\n\n      /* wysihtml5.dom.lineBreaks(element).remove();\n       *\n       * Removes line breaks before and after the given node\n       */\n      remove: function(options) {\n        var nextSibling     = wysihtml5.dom.domNode(node).next({ignoreBlankTexts: true}),\n            previousSibling = wysihtml5.dom.domNode(node).prev({ignoreBlankTexts: true});\n\n        if (nextSibling && _isLineBreak(nextSibling)) {\n          nextSibling.parentNode.removeChild(nextSibling);\n        }\n        if (previousSibling && _isLineBreak(previousSibling)) {\n          previousSibling.parentNode.removeChild(previousSibling);\n        }\n      }\n    };\n  };\n})(wysihtml5);;/**\n * Method to set dom events\n *\n * @example\n *    wysihtml5.dom.observe(iframe.contentWindow.document.body, [\"focus\", \"blur\"], function() { ... });\n */\nwysihtml5.dom.observe = function(element, eventNames, handler) {\n  eventNames = typeof(eventNames) === \"string\" ? [eventNames] : eventNames;\n\n  var handlerWrapper,\n      eventName,\n      i       = 0,\n      length  = eventNames.length;\n\n  for (; i<length; i++) {\n    eventName = eventNames[i];\n    if (element.addEventListener) {\n      element.addEventListener(eventName, handler, false);\n    } else {\n      handlerWrapper = function(event) {\n        if (!(\"target\" in event)) {\n          event.target = event.srcElement;\n        }\n        event.preventDefault = event.preventDefault || function() {\n          this.returnValue = false;\n        };\n        event.stopPropagation = event.stopPropagation || function() {\n          this.cancelBubble = true;\n        };\n        handler.call(element, event);\n      };\n      element.attachEvent(\"on\" + eventName, handlerWrapper);\n    }\n  }\n\n  return {\n    stop: function() {\n      var eventName,\n          i       = 0,\n          length  = eventNames.length;\n      for (; i<length; i++) {\n        eventName = eventNames[i];\n        if (element.removeEventListener) {\n          element.removeEventListener(eventName, handler, false);\n        } else {\n          element.detachEvent(\"on\" + eventName, handlerWrapper);\n        }\n      }\n    }\n  };\n};\n;/**\n * HTML Sanitizer\n * Rewrites the HTML based on given rules\n *\n * @param {Element|String} elementOrHtml HTML String to be sanitized OR element whose content should be sanitized\n * @param {Object} [rules] List of rules for rewriting the HTML, if there's no rule for an element it will\n *    be converted to a \"span\". Each rule is a key/value pair where key is the tag to convert, and value the\n *    desired substitution.\n * @param {Object} context Document object in which to parse the html, needed to sandbox the parsing\n *\n * @return {Element|String} Depends on the elementOrHtml parameter. When html then the sanitized html as string elsewise the element.\n *\n * @example\n *    var userHTML = '<div id=\"foo\" onclick=\"alert(1);\"><p><font color=\"red\">foo</font><script>alert(1);</script></p></div>';\n *    wysihtml5.dom.parse(userHTML, {\n *      tags {\n *        p:      \"div\",      // Rename p tags to div tags\n *        font:   \"span\"      // Rename font tags to span tags\n *        div:    true,       // Keep them, also possible (same result when passing: \"div\" or true)\n *        script: undefined   // Remove script elements\n *      }\n *    });\n *    // => <div><div><span>foo bar</span></div></div>\n *\n *    var userHTML = '<table><tbody><tr><td>I'm a table!</td></tr></tbody></table>';\n *    wysihtml5.dom.parse(userHTML);\n *    // => '<span><span><span><span>I'm a table!</span></span></span></span>'\n *\n *    var userHTML = '<div>foobar<br>foobar</div>';\n *    wysihtml5.dom.parse(userHTML, {\n *      tags: {\n *        div: undefined,\n *        br:  true\n *      }\n *    });\n *    // => ''\n *\n *    var userHTML = '<div class=\"red\">foo</div><div class=\"pink\">bar</div>';\n *    wysihtml5.dom.parse(userHTML, {\n *      classes: {\n *        red:    1,\n *        green:  1\n *      },\n *      tags: {\n *        div: {\n *          rename_tag:     \"p\"\n *        }\n *      }\n *    });\n *    // => '<p class=\"red\">foo</p><p>bar</p>'\n */\n\nwysihtml5.dom.parse = function(elementOrHtml_current, config_current) {\n  /* TODO: Currently escaped module pattern as otherwise folloowing default swill be shared among multiple editors.\n   * Refactor whole code as this method while workind is kind of awkward too */\n\n  /**\n   * It's not possible to use a XMLParser/DOMParser as HTML5 is not always well-formed XML\n   * new DOMParser().parseFromString('<img src=\"foo.gif\">') will cause a parseError since the\n   * node isn't closed\n   *\n   * Therefore we've to use the browser's ordinary HTML parser invoked by setting innerHTML.\n   */\n  var NODE_TYPE_MAPPING = {\n        \"1\": _handleElement,\n        \"3\": _handleText,\n        \"8\": _handleComment\n      },\n      // Rename unknown tags to this\n      DEFAULT_NODE_NAME   = \"span\",\n      WHITE_SPACE_REG_EXP = /\\s+/,\n      defaultRules        = { tags: {}, classes: {} },\n      currentRules        = {};\n\n  /**\n   * Iterates over all childs of the element, recreates them, appends them into a document fragment\n   * which later replaces the entire body content\n   */\n   function parse(elementOrHtml, config) {\n    wysihtml5.lang.object(currentRules).merge(defaultRules).merge(config.rules).get();\n\n    var context       = config.context || elementOrHtml.ownerDocument || document,\n        fragment      = context.createDocumentFragment(),\n        isString      = typeof(elementOrHtml) === \"string\",\n        clearInternals = false,\n        element,\n        newNode,\n        firstChild;\n\n    if (config.clearInternals === true) {\n      clearInternals = true;\n    }\n\n    if (isString) {\n      element = wysihtml5.dom.getAsDom(elementOrHtml, context);\n    } else {\n      element = elementOrHtml;\n    }\n\n    if (currentRules.selectors) {\n      _applySelectorRules(element, currentRules.selectors);\n    }\n\n    while (element.firstChild) {\n      firstChild = element.firstChild;\n      newNode = _convert(firstChild, config.cleanUp, clearInternals, config.uneditableClass);\n      if (newNode) {\n        fragment.appendChild(newNode);\n      }\n      if (firstChild !== newNode) {\n        element.removeChild(firstChild);\n      }\n    }\n\n    if (config.unjoinNbsps) {\n      // replace joined non-breakable spaces with unjoined\n      var txtnodes = wysihtml5.dom.getTextNodes(fragment);\n      for (var n = txtnodes.length; n--;) {\n        txtnodes[n].nodeValue = txtnodes[n].nodeValue.replace(/([\\S\\u00A0])\\u00A0/gi, \"$1 \");\n      }\n    }\n\n    // Clear element contents\n    element.innerHTML = \"\";\n\n    // Insert new DOM tree\n    element.appendChild(fragment);\n\n    return isString ? wysihtml5.quirks.getCorrectInnerHTML(element) : element;\n  }\n\n  function _convert(oldNode, cleanUp, clearInternals, uneditableClass) {\n    var oldNodeType     = oldNode.nodeType,\n        oldChilds       = oldNode.childNodes,\n        oldChildsLength = oldChilds.length,\n        method          = NODE_TYPE_MAPPING[oldNodeType],\n        i               = 0,\n        fragment,\n        newNode,\n        newChild;\n\n    // Passes directly elemets with uneditable class\n    if (uneditableClass && oldNodeType === 1 && wysihtml5.dom.hasClass(oldNode, uneditableClass)) {\n        return oldNode;\n    }\n\n    newNode = method && method(oldNode, clearInternals);\n\n    // Remove or unwrap node in case of return value null or false\n    if (!newNode) {\n        if (newNode === false) {\n            // false defines that tag should be removed but contents should remain (unwrap)\n            fragment = oldNode.ownerDocument.createDocumentFragment();\n\n            for (i = oldChildsLength; i--;) {\n              if (oldChilds[i]) {\n                newChild = _convert(oldChilds[i], cleanUp, clearInternals, uneditableClass);\n                if (newChild) {\n                  if (oldChilds[i] === newChild) {\n                    i--;\n                  }\n                  fragment.insertBefore(newChild, fragment.firstChild);\n                }\n              }\n            }\n\n            if (wysihtml5.dom.getStyle(\"display\").from(oldNode) === \"block\") {\n              fragment.appendChild(oldNode.ownerDocument.createElement(\"br\"));\n            }\n\n            // TODO: try to minimize surplus spaces\n            if (wysihtml5.lang.array([\n                \"div\", \"pre\", \"p\",\n                \"table\", \"td\", \"th\",\n                \"ul\", \"ol\", \"li\",\n                \"dd\", \"dl\",\n                \"footer\", \"header\", \"section\",\n                \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"\n            ]).contains(oldNode.nodeName.toLowerCase()) && oldNode.parentNode.lastChild !== oldNode) {\n                // add space at first when unwraping non-textflow elements\n                if (!oldNode.nextSibling || oldNode.nextSibling.nodeType !== 3 || !(/^\\s/).test(oldNode.nextSibling.nodeValue)) {\n                  fragment.appendChild(oldNode.ownerDocument.createTextNode(\" \"));\n                }\n            }\n\n            if (fragment.normalize) {\n              fragment.normalize();\n            }\n            return fragment;\n        } else {\n          // Remove\n          return null;\n        }\n    }\n\n    // Converts all childnodes\n    for (i=0; i<oldChildsLength; i++) {\n      if (oldChilds[i]) {\n        newChild = _convert(oldChilds[i], cleanUp, clearInternals, uneditableClass);\n        if (newChild) {\n          if (oldChilds[i] === newChild) {\n            i--;\n          }\n          newNode.appendChild(newChild);\n        }\n      }\n    }\n\n    // Cleanup senseless <span> elements\n    if (cleanUp &&\n        newNode.nodeName.toLowerCase() === DEFAULT_NODE_NAME &&\n        (!newNode.childNodes.length ||\n         ((/^\\s*$/gi).test(newNode.innerHTML) && (clearInternals || (oldNode.className !== \"_wysihtml5-temp-placeholder\" && oldNode.className !== \"rangySelectionBoundary\"))) ||\n         !newNode.attributes.length)\n        ) {\n      fragment = newNode.ownerDocument.createDocumentFragment();\n      while (newNode.firstChild) {\n        fragment.appendChild(newNode.firstChild);\n      }\n      if (fragment.normalize) {\n        fragment.normalize();\n      }\n      return fragment;\n    }\n\n    if (newNode.normalize) {\n      newNode.normalize();\n    }\n    return newNode;\n  }\n\n  function _applySelectorRules (element, selectorRules) {\n    var sel, method, els;\n\n    for (sel in selectorRules) {\n      if (selectorRules.hasOwnProperty(sel)) {\n        if (wysihtml5.lang.object(selectorRules[sel]).isFunction()) {\n          method = selectorRules[sel];\n        } else if (typeof(selectorRules[sel]) === \"string\" && elementHandlingMethods[selectorRules[sel]]) {\n          method = elementHandlingMethods[selectorRules[sel]];\n        }\n        els = element.querySelectorAll(sel);\n        for (var i = els.length; i--;) {\n          method(els[i]);\n        }\n      }\n    }\n  }\n\n  function _handleElement(oldNode, clearInternals) {\n    var rule,\n        newNode,\n        tagRules    = currentRules.tags,\n        nodeName    = oldNode.nodeName.toLowerCase(),\n        scopeName   = oldNode.scopeName,\n        renameTag;\n\n    /**\n     * We already parsed that element\n     * ignore it! (yes, this sometimes happens in IE8 when the html is invalid)\n     */\n    if (oldNode._wysihtml5) {\n      return null;\n    }\n    oldNode._wysihtml5 = 1;\n\n    if (oldNode.className === \"wysihtml5-temp\") {\n      return null;\n    }\n\n    /**\n     * IE is the only browser who doesn't include the namespace in the\n     * nodeName, that's why we have to prepend it by ourselves\n     * scopeName is a proprietary IE feature\n     * read more here http://msdn.microsoft.com/en-us/library/ms534388(v=vs.85).aspx\n     */\n    if (scopeName && scopeName != \"HTML\") {\n      nodeName = scopeName + \":\" + nodeName;\n    }\n    /**\n     * Repair node\n     * IE is a bit bitchy when it comes to invalid nested markup which includes unclosed tags\n     * A <p> doesn't need to be closed according HTML4-5 spec, we simply replace it with a <div> to preserve its content and layout\n     */\n    if (\"outerHTML\" in oldNode) {\n      if (!wysihtml5.browser.autoClosesUnclosedTags() &&\n          oldNode.nodeName === \"P\" &&\n          oldNode.outerHTML.slice(-4).toLowerCase() !== \"</p>\") {\n        nodeName = \"div\";\n      }\n    }\n\n    if (nodeName in tagRules) {\n      rule = tagRules[nodeName];\n      if (!rule || rule.remove) {\n        return null;\n      } else if (rule.unwrap) {\n        return false;\n      }\n      rule = typeof(rule) === \"string\" ? { rename_tag: rule } : rule;\n    } else if (oldNode.firstChild) {\n      rule = { rename_tag: DEFAULT_NODE_NAME };\n    } else {\n      // Remove empty unknown elements\n      return null;\n    }\n\n    // tests if type condition is met or node should be removed/unwrapped/renamed\n    if (rule.one_of_type && !_testTypes(oldNode, currentRules, rule.one_of_type, clearInternals)) {\n      if (rule.remove_action) {\n        if (rule.remove_action === \"unwrap\") {\n          return false;\n        } else if (rule.remove_action === \"rename\") {\n          renameTag = rule.remove_action_rename_to || DEFAULT_NODE_NAME;\n        } else {\n          return null;\n        }\n      } else {\n        return null;\n      }\n    }\n\n    newNode = oldNode.ownerDocument.createElement(renameTag || rule.rename_tag || nodeName);\n    _handleAttributes(oldNode, newNode, rule, clearInternals);\n    _handleStyles(oldNode, newNode, rule);\n\n    oldNode = null;\n\n    if (newNode.normalize) { newNode.normalize(); }\n    return newNode;\n  }\n\n  function _testTypes(oldNode, rules, types, clearInternals) {\n    var definition, type;\n\n    // do not interfere with placeholder span or pasting caret position is not maintained\n    if (oldNode.nodeName === \"SPAN\" && !clearInternals && (oldNode.className === \"_wysihtml5-temp-placeholder\" || oldNode.className === \"rangySelectionBoundary\")) {\n      return true;\n    }\n\n    for (type in types) {\n      if (types.hasOwnProperty(type) && rules.type_definitions && rules.type_definitions[type]) {\n        definition = rules.type_definitions[type];\n        if (_testType(oldNode, definition)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  function array_contains(a, obj) {\n      var i = a.length;\n      while (i--) {\n         if (a[i] === obj) {\n             return true;\n         }\n      }\n      return false;\n  }\n\n  function _testType(oldNode, definition) {\n\n    var nodeClasses = oldNode.getAttribute(\"class\"),\n        nodeStyles =  oldNode.getAttribute(\"style\"),\n        classesLength, s, s_corrected, a, attr, currentClass, styleProp;\n\n    // test for methods\n    if (definition.methods) {\n      for (var m in definition.methods) {\n        if (definition.methods.hasOwnProperty(m) && typeCeckMethods[m]) {\n\n          if (typeCeckMethods[m](oldNode)) {\n            return true;\n          }\n        }\n      }\n    }\n\n    // test for classes, if one found return true\n    if (nodeClasses && definition.classes) {\n      nodeClasses = nodeClasses.replace(/^\\s+/g, '').replace(/\\s+$/g, '').split(WHITE_SPACE_REG_EXP);\n      classesLength = nodeClasses.length;\n      for (var i = 0; i < classesLength; i++) {\n        if (definition.classes[nodeClasses[i]]) {\n          return true;\n        }\n      }\n    }\n\n    // test for styles, if one found return true\n    if (nodeStyles && definition.styles) {\n\n      nodeStyles = nodeStyles.split(';');\n      for (s in definition.styles) {\n        if (definition.styles.hasOwnProperty(s)) {\n          for (var sp = nodeStyles.length; sp--;) {\n            styleProp = nodeStyles[sp].split(':');\n\n            if (styleProp[0].replace(/\\s/g, '').toLowerCase() === s) {\n              if (definition.styles[s] === true || definition.styles[s] === 1 || wysihtml5.lang.array(definition.styles[s]).contains(styleProp[1].replace(/\\s/g, '').toLowerCase()) ) {\n                return true;\n              }\n            }\n          }\n        }\n      }\n    }\n\n    // test for attributes in general against regex match\n    if (definition.attrs) {\n        for (a in definition.attrs) {\n            if (definition.attrs.hasOwnProperty(a)) {\n                attr = wysihtml5.dom.getAttribute(oldNode, a);\n                if (typeof(attr) === \"string\") {\n                    if (attr.search(definition.attrs[a]) > -1) {\n                        return true;\n                    }\n                }\n            }\n        }\n    }\n    return false;\n  }\n\n  function _handleStyles(oldNode, newNode, rule) {\n    var s, v;\n    if(rule && rule.keep_styles) {\n      for (s in rule.keep_styles) {\n        if (rule.keep_styles.hasOwnProperty(s)) {\n          v = (s === \"float\") ? oldNode.style.styleFloat || oldNode.style.cssFloat : oldNode.style[s];\n          // value can be regex and if so should match or style skipped\n          if (rule.keep_styles[s] instanceof RegExp && !(rule.keep_styles[s].test(v))) {\n            continue;\n          }\n          if (s === \"float\") {\n            // IE compability\n            newNode.style[(oldNode.style.styleFloat) ? 'styleFloat': 'cssFloat'] = v;\n           } else if (oldNode.style[s]) {\n             newNode.style[s] = v;\n           }\n        }\n      }\n    }\n  };\n\n  function _getAttributesBeginningWith(beginning, attributes) {\n    var returnAttributes = [];\n    for (var attr in attributes) {\n      if (attributes.hasOwnProperty(attr) && attr.indexOf(beginning) === 0) {\n        returnAttributes.push(attr);\n      }\n    }\n    return returnAttributes;\n  }\n\n  function _checkAttribute(attributeName, attributeValue, methodName, nodeName) {\n    var method = attributeCheckMethods[methodName],\n        newAttributeValue;\n\n    if (method) {\n      if (attributeValue || (attributeName === \"alt\" && nodeName == \"IMG\")) {\n        newAttributeValue = method(attributeValue);\n        if (typeof(newAttributeValue) === \"string\") {\n          return newAttributeValue;\n        }\n      }\n    }\n\n    return false;\n  }\n\n  function _checkAttributes(oldNode, local_attributes) {\n    var globalAttributes  = wysihtml5.lang.object(currentRules.attributes || {}).clone(), // global values for check/convert values of attributes\n        checkAttributes   = wysihtml5.lang.object(globalAttributes).merge( wysihtml5.lang.object(local_attributes || {}).clone()).get(),\n        attributes        = {},\n        oldAttributes     = wysihtml5.dom.getAttributes(oldNode),\n        attributeName, newValue, matchingAttributes;\n\n    for (attributeName in checkAttributes) {\n      if ((/\\*$/).test(attributeName)) {\n\n        matchingAttributes = _getAttributesBeginningWith(attributeName.slice(0,-1), oldAttributes);\n        for (var i = 0, imax = matchingAttributes.length; i < imax; i++) {\n\n          newValue = _checkAttribute(matchingAttributes[i], oldAttributes[matchingAttributes[i]], checkAttributes[attributeName], oldNode.nodeName);\n          if (newValue !== false) {\n            attributes[matchingAttributes[i]] = newValue;\n          }\n        }\n      } else {\n        newValue = _checkAttribute(attributeName, oldAttributes[attributeName], checkAttributes[attributeName], oldNode.nodeName);\n        if (newValue !== false) {\n          attributes[attributeName] = newValue;\n        }\n      }\n    }\n\n    return attributes;\n  }\n\n  // TODO: refactor. Too long to read\n  function _handleAttributes(oldNode, newNode, rule, clearInternals) {\n    var attributes          = {},                         // fresh new set of attributes to set on newNode\n        setClass            = rule.set_class,             // classes to set\n        addClass            = rule.add_class,             // add classes based on existing attributes\n        addStyle            = rule.add_style,             // add styles based on existing attributes\n        setAttributes       = rule.set_attributes,        // attributes to set on the current node\n        allowedClasses      = currentRules.classes,\n        i                   = 0,\n        classes             = [],\n        styles              = [],\n        newClasses          = [],\n        oldClasses          = [],\n        classesLength,\n        newClassesLength,\n        currentClass,\n        newClass,\n        attributeName,\n        method;\n\n    if (setAttributes) {\n      attributes = wysihtml5.lang.object(setAttributes).clone();\n    }\n\n    // check/convert values of attributes\n    attributes = wysihtml5.lang.object(attributes).merge(_checkAttributes(oldNode,  rule.check_attributes)).get();\n\n    if (setClass) {\n      classes.push(setClass);\n    }\n\n    if (addClass) {\n      for (attributeName in addClass) {\n        method = addClassMethods[addClass[attributeName]];\n        if (!method) {\n          continue;\n        }\n        newClass = method(wysihtml5.dom.getAttribute(oldNode, attributeName));\n        if (typeof(newClass) === \"string\") {\n          classes.push(newClass);\n        }\n      }\n    }\n\n    if (addStyle) {\n      for (attributeName in addStyle) {\n        method = addStyleMethods[addStyle[attributeName]];\n        if (!method) {\n          continue;\n        }\n\n        newStyle = method(wysihtml5.dom.getAttribute(oldNode, attributeName));\n        if (typeof(newStyle) === \"string\") {\n          styles.push(newStyle);\n        }\n      }\n    }\n\n\n    if (typeof(allowedClasses) === \"string\" && allowedClasses === \"any\" && oldNode.getAttribute(\"class\")) {\n      if (currentRules.classes_blacklist) {\n        oldClasses = oldNode.getAttribute(\"class\");\n        if (oldClasses) {\n          classes = classes.concat(oldClasses.split(WHITE_SPACE_REG_EXP));\n        }\n\n        classesLength = classes.length;\n        for (; i<classesLength; i++) {\n          currentClass = classes[i];\n          if (!currentRules.classes_blacklist[currentClass]) {\n            newClasses.push(currentClass);\n          }\n        }\n\n        if (newClasses.length) {\n          attributes[\"class\"] = wysihtml5.lang.array(newClasses).unique().join(\" \");\n        }\n\n      } else {\n        attributes[\"class\"] = oldNode.getAttribute(\"class\");\n      }\n    } else {\n      // make sure that wysihtml5 temp class doesn't get stripped out\n      if (!clearInternals) {\n        allowedClasses[\"_wysihtml5-temp-placeholder\"] = 1;\n        allowedClasses[\"_rangySelectionBoundary\"] = 1;\n        allowedClasses[\"wysiwyg-tmp-selected-cell\"] = 1;\n      }\n\n      // add old classes last\n      oldClasses = oldNode.getAttribute(\"class\");\n      if (oldClasses) {\n        classes = classes.concat(oldClasses.split(WHITE_SPACE_REG_EXP));\n      }\n      classesLength = classes.length;\n      for (; i<classesLength; i++) {\n        currentClass = classes[i];\n        if (allowedClasses[currentClass]) {\n          newClasses.push(currentClass);\n        }\n      }\n\n      if (newClasses.length) {\n        attributes[\"class\"] = wysihtml5.lang.array(newClasses).unique().join(\" \");\n      }\n    }\n\n    // remove table selection class if present\n    if (attributes[\"class\"] && clearInternals) {\n      attributes[\"class\"] = attributes[\"class\"].replace(\"wysiwyg-tmp-selected-cell\", \"\");\n      if ((/^\\s*$/g).test(attributes[\"class\"])) {\n        delete attributes[\"class\"];\n      }\n    }\n\n    if (styles.length) {\n      attributes[\"style\"] = wysihtml5.lang.array(styles).unique().join(\" \");\n    }\n\n    // set attributes on newNode\n    for (attributeName in attributes) {\n      // Setting attributes can cause a js error in IE under certain circumstances\n      // eg. on a <img> under https when it's new attribute value is non-https\n      // TODO: Investigate this further and check for smarter handling\n      try {\n        newNode.setAttribute(attributeName, attributes[attributeName]);\n      } catch(e) {}\n    }\n\n    // IE8 sometimes loses the width/height attributes when those are set before the \"src\"\n    // so we make sure to set them again\n    if (attributes.src) {\n      if (typeof(attributes.width) !== \"undefined\") {\n        newNode.setAttribute(\"width\", attributes.width);\n      }\n      if (typeof(attributes.height) !== \"undefined\") {\n        newNode.setAttribute(\"height\", attributes.height);\n      }\n    }\n  }\n\n  var INVISIBLE_SPACE_REG_EXP = /\\uFEFF/g;\n  function _handleText(oldNode) {\n    var nextSibling = oldNode.nextSibling;\n    if (nextSibling && nextSibling.nodeType === wysihtml5.TEXT_NODE) {\n      // Concatenate text nodes\n      nextSibling.data = oldNode.data.replace(INVISIBLE_SPACE_REG_EXP, \"\") + nextSibling.data.replace(INVISIBLE_SPACE_REG_EXP, \"\");\n    } else {\n      // \\uFEFF = wysihtml5.INVISIBLE_SPACE (used as a hack in certain rich text editing situations)\n      var data = oldNode.data.replace(INVISIBLE_SPACE_REG_EXP, \"\");\n      return oldNode.ownerDocument.createTextNode(data);\n    }\n  }\n\n  function _handleComment(oldNode) {\n    if (currentRules.comments) {\n      return oldNode.ownerDocument.createComment(oldNode.nodeValue);\n    }\n  }\n\n  // ------------ attribute checks ------------ \\\\\n  var attributeCheckMethods = {\n    url: (function() {\n      var REG_EXP = /^https?:\\/\\//i;\n      return function(attributeValue) {\n        if (!attributeValue || !attributeValue.match(REG_EXP)) {\n          return null;\n        }\n        return attributeValue.replace(REG_EXP, function(match) {\n          return match.toLowerCase();\n        });\n      };\n    })(),\n\n    src: (function() {\n      var REG_EXP = /^(\\/|https?:\\/\\/)/i;\n      return function(attributeValue) {\n        if (!attributeValue || !attributeValue.match(REG_EXP)) {\n          return null;\n        }\n        return attributeValue.replace(REG_EXP, function(match) {\n          return match.toLowerCase();\n        });\n      };\n    })(),\n\n    href: (function() {\n      var REG_EXP = /^(#|\\/|https?:\\/\\/|mailto:)/i;\n      return function(attributeValue) {\n        if (!attributeValue || !attributeValue.match(REG_EXP)) {\n          return null;\n        }\n        return attributeValue.replace(REG_EXP, function(match) {\n          return match.toLowerCase();\n        });\n      };\n    })(),\n\n    alt: (function() {\n      var REG_EXP = /[^ a-z0-9_\\-]/gi;\n      return function(attributeValue) {\n        if (!attributeValue) {\n          return \"\";\n        }\n        return attributeValue.replace(REG_EXP, \"\");\n      };\n    })(),\n\n    numbers: (function() {\n      var REG_EXP = /\\D/g;\n      return function(attributeValue) {\n        attributeValue = (attributeValue || \"\").replace(REG_EXP, \"\");\n        return attributeValue || null;\n      };\n    })(),\n\n    any: (function() {\n      return function(attributeValue) {\n        return attributeValue;\n      };\n    })()\n  };\n\n  // ------------ style converter (converts an html attribute to a style) ------------ \\\\\n  var addStyleMethods = {\n    align_text: (function() {\n      var mapping = {\n        left:     \"text-align: left;\",\n        right:    \"text-align: right;\",\n        center:   \"text-align: center;\"\n      };\n      return function(attributeValue) {\n        return mapping[String(attributeValue).toLowerCase()];\n      };\n    })(),\n  };\n\n  // ------------ class converter (converts an html attribute to a class name) ------------ \\\\\n  var addClassMethods = {\n    align_img: (function() {\n      var mapping = {\n        left:   \"wysiwyg-float-left\",\n        right:  \"wysiwyg-float-right\"\n      };\n      return function(attributeValue) {\n        return mapping[String(attributeValue).toLowerCase()];\n      };\n    })(),\n\n    align_text: (function() {\n      var mapping = {\n        left:     \"wysiwyg-text-align-left\",\n        right:    \"wysiwyg-text-align-right\",\n        center:   \"wysiwyg-text-align-center\",\n        justify:  \"wysiwyg-text-align-justify\"\n      };\n      return function(attributeValue) {\n        return mapping[String(attributeValue).toLowerCase()];\n      };\n    })(),\n\n    clear_br: (function() {\n      var mapping = {\n        left:   \"wysiwyg-clear-left\",\n        right:  \"wysiwyg-clear-right\",\n        both:   \"wysiwyg-clear-both\",\n        all:    \"wysiwyg-clear-both\"\n      };\n      return function(attributeValue) {\n        return mapping[String(attributeValue).toLowerCase()];\n      };\n    })(),\n\n    size_font: (function() {\n      var mapping = {\n        \"1\": \"wysiwyg-font-size-xx-small\",\n        \"2\": \"wysiwyg-font-size-small\",\n        \"3\": \"wysiwyg-font-size-medium\",\n        \"4\": \"wysiwyg-font-size-large\",\n        \"5\": \"wysiwyg-font-size-x-large\",\n        \"6\": \"wysiwyg-font-size-xx-large\",\n        \"7\": \"wysiwyg-font-size-xx-large\",\n        \"-\": \"wysiwyg-font-size-smaller\",\n        \"+\": \"wysiwyg-font-size-larger\"\n      };\n      return function(attributeValue) {\n        return mapping[String(attributeValue).charAt(0)];\n      };\n    })()\n  };\n\n  // checks if element is possibly visible\n  var typeCeckMethods = {\n    has_visible_contet: (function() {\n      var txt,\n          isVisible = false,\n          visibleElements = ['img', 'video', 'picture', 'br', 'script', 'noscript',\n                             'style', 'table', 'iframe', 'object', 'embed', 'audio',\n                             'svg', 'input', 'button', 'select','textarea', 'canvas'];\n\n      return function(el) {\n\n        // has visible innertext. so is visible\n        txt = (el.innerText || el.textContent).replace(/\\s/g, '');\n        if (txt && txt.length > 0) {\n          return true;\n        }\n\n        // matches list of visible dimensioned elements\n        for (var i = visibleElements.length; i--;) {\n          if (el.querySelector(visibleElements[i])) {\n            return true;\n          }\n        }\n\n        // try to measure dimesions in last resort. (can find only of elements in dom)\n        if (el.offsetWidth && el.offsetWidth > 0 && el.offsetHeight && el.offsetHeight > 0) {\n          return true;\n        }\n\n        return false;\n      };\n    })()\n  };\n\n  var elementHandlingMethods = {\n    unwrap: function (element) {\n      wysihtml5.dom.unwrap(element);\n    },\n\n    remove: function (element) {\n      element.parentNode.removeChild(element);\n    }\n  };\n\n  return parse(elementOrHtml_current, config_current);\n};\n;/**\n * Checks for empty text node childs and removes them\n *\n * @param {Element} node The element in which to cleanup\n * @example\n *    wysihtml5.dom.removeEmptyTextNodes(element);\n */\nwysihtml5.dom.removeEmptyTextNodes = function(node) {\n  var childNode,\n      childNodes        = wysihtml5.lang.array(node.childNodes).get(),\n      childNodesLength  = childNodes.length,\n      i                 = 0;\n  for (; i<childNodesLength; i++) {\n    childNode = childNodes[i];\n    if (childNode.nodeType === wysihtml5.TEXT_NODE && childNode.data === \"\") {\n      childNode.parentNode.removeChild(childNode);\n    }\n  }\n};\n;/**\n * Renames an element (eg. a <div> to a <p>) and keeps its childs\n *\n * @param {Element} element The list element which should be renamed\n * @param {Element} newNodeName The desired tag name\n *\n * @example\n *    <!-- Assume the following dom: -->\n *    <ul id=\"list\">\n *      <li>eminem</li>\n *      <li>dr. dre</li>\n *      <li>50 Cent</li>\n *    </ul>\n *\n *    <script>\n *      wysihtml5.dom.renameElement(document.getElementById(\"list\"), \"ol\");\n *    </script>\n *\n *    <!-- Will result in: -->\n *    <ol>\n *      <li>eminem</li>\n *      <li>dr. dre</li>\n *      <li>50 Cent</li>\n *    </ol>\n */\nwysihtml5.dom.renameElement = function(element, newNodeName) {\n  var newElement = element.ownerDocument.createElement(newNodeName),\n      firstChild;\n  while (firstChild = element.firstChild) {\n    newElement.appendChild(firstChild);\n  }\n  wysihtml5.dom.copyAttributes([\"align\", \"className\"]).from(element).to(newElement);\n  element.parentNode.replaceChild(newElement, element);\n  return newElement;\n};\n;/**\n * Takes an element, removes it and replaces it with it's childs\n *\n * @param {Object} node The node which to replace with it's child nodes\n * @example\n *    <div id=\"foo\">\n *      <span>hello</span>\n *    </div>\n *    <script>\n *      // Remove #foo and replace with it's children\n *      wysihtml5.dom.replaceWithChildNodes(document.getElementById(\"foo\"));\n *    </script>\n */\nwysihtml5.dom.replaceWithChildNodes = function(node) {\n  if (!node.parentNode) {\n    return;\n  }\n\n  if (!node.firstChild) {\n    node.parentNode.removeChild(node);\n    return;\n  }\n\n  var fragment = node.ownerDocument.createDocumentFragment();\n  while (node.firstChild) {\n    fragment.appendChild(node.firstChild);\n  }\n  node.parentNode.replaceChild(fragment, node);\n  node = fragment = null;\n};\n;/**\n * Unwraps an unordered/ordered list\n *\n * @param {Element} element The list element which should be unwrapped\n *\n * @example\n *    <!-- Assume the following dom: -->\n *    <ul id=\"list\">\n *      <li>eminem</li>\n *      <li>dr. dre</li>\n *      <li>50 Cent</li>\n *    </ul>\n *\n *    <script>\n *      wysihtml5.dom.resolveList(document.getElementById(\"list\"));\n *    </script>\n *\n *    <!-- Will result in: -->\n *    eminem<br>\n *    dr. dre<br>\n *    50 Cent<br>\n */\n(function(dom) {\n  function _isBlockElement(node) {\n    return dom.getStyle(\"display\").from(node) === \"block\";\n  }\n\n  function _isLineBreak(node) {\n    return node.nodeName === \"BR\";\n  }\n\n  function _appendLineBreak(element) {\n    var lineBreak = element.ownerDocument.createElement(\"br\");\n    element.appendChild(lineBreak);\n  }\n\n  function resolveList(list, useLineBreaks) {\n    if (!list.nodeName.match(/^(MENU|UL|OL)$/)) {\n      return;\n    }\n\n    var doc             = list.ownerDocument,\n        fragment        = doc.createDocumentFragment(),\n        previousSibling = wysihtml5.dom.domNode(list).prev({ignoreBlankTexts: true}),\n        firstChild,\n        lastChild,\n        isLastChild,\n        shouldAppendLineBreak,\n        paragraph,\n        listItem;\n\n    if (useLineBreaks) {\n      // Insert line break if list is after a non-block element\n      if (previousSibling && !_isBlockElement(previousSibling) && !_isLineBreak(previousSibling)) {\n        _appendLineBreak(fragment);\n      }\n\n      while (listItem = (list.firstElementChild || list.firstChild)) {\n        lastChild = listItem.lastChild;\n        while (firstChild = listItem.firstChild) {\n          isLastChild           = firstChild === lastChild;\n          // This needs to be done before appending it to the fragment, as it otherwise will lose style information\n          shouldAppendLineBreak = isLastChild && !_isBlockElement(firstChild) && !_isLineBreak(firstChild);\n          fragment.appendChild(firstChild);\n          if (shouldAppendLineBreak) {\n            _appendLineBreak(fragment);\n          }\n        }\n\n        listItem.parentNode.removeChild(listItem);\n      }\n    } else {\n      while (listItem = (list.firstElementChild || list.firstChild)) {\n        if (listItem.querySelector && listItem.querySelector(\"div, p, ul, ol, menu, blockquote, h1, h2, h3, h4, h5, h6\")) {\n          while (firstChild = listItem.firstChild) {\n            fragment.appendChild(firstChild);\n          }\n        } else {\n          paragraph = doc.createElement(\"p\");\n          while (firstChild = listItem.firstChild) {\n            paragraph.appendChild(firstChild);\n          }\n          fragment.appendChild(paragraph);\n        }\n        listItem.parentNode.removeChild(listItem);\n      }\n    }\n\n    list.parentNode.replaceChild(fragment, list);\n  }\n\n  dom.resolveList = resolveList;\n})(wysihtml5.dom);\n;/**\n * Sandbox for executing javascript, parsing css styles and doing dom operations in a secure way\n *\n * Browser Compatibility:\n *  - Secure in MSIE 6+, but only when the user hasn't made changes to his security level \"restricted\"\n *  - Partially secure in other browsers (Firefox, Opera, Safari, Chrome, ...)\n *\n * Please note that this class can't benefit from the HTML5 sandbox attribute for the following reasons:\n *    - sandboxing doesn't work correctly with inlined content (src=\"javascript:'<html>...</html>'\")\n *    - sandboxing of physical documents causes that the dom isn't accessible anymore from the outside (iframe.contentWindow, ...)\n *    - setting the \"allow-same-origin\" flag would fix that, but then still javascript and dom events refuse to fire\n *    - therefore the \"allow-scripts\" flag is needed, which then would deactivate any security, as the js executed inside the iframe\n *      can do anything as if the sandbox attribute wasn't set\n *\n * @param {Function} [readyCallback] Method that gets invoked when the sandbox is ready\n * @param {Object} [config] Optional parameters\n *\n * @example\n *    new wysihtml5.dom.Sandbox(function(sandbox) {\n *      sandbox.getWindow().document.body.innerHTML = '<img src=foo.gif onerror=\"alert(document.cookie)\">';\n *    });\n */\n(function(wysihtml5) {\n  var /**\n       * Default configuration\n       */\n      doc                 = document,\n      /**\n       * Properties to unset/protect on the window object\n       */\n      windowProperties    = [\n        \"parent\", \"top\", \"opener\", \"frameElement\", \"frames\",\n        \"localStorage\", \"globalStorage\", \"sessionStorage\", \"indexedDB\"\n      ],\n      /**\n       * Properties on the window object which are set to an empty function\n       */\n      windowProperties2   = [\n        \"open\", \"close\", \"openDialog\", \"showModalDialog\",\n        \"alert\", \"confirm\", \"prompt\",\n        \"openDatabase\", \"postMessage\",\n        \"XMLHttpRequest\", \"XDomainRequest\"\n      ],\n      /**\n       * Properties to unset/protect on the document object\n       */\n      documentProperties  = [\n        \"referrer\",\n        \"write\", \"open\", \"close\"\n      ];\n\n  wysihtml5.dom.Sandbox = Base.extend(\n    /** @scope wysihtml5.dom.Sandbox.prototype */ {\n\n    constructor: function(readyCallback, config) {\n      this.callback = readyCallback || wysihtml5.EMPTY_FUNCTION;\n      this.config   = wysihtml5.lang.object({}).merge(config).get();\n      this.editableArea   = this._createIframe();\n    },\n\n    insertInto: function(element) {\n      if (typeof(element) === \"string\") {\n        element = doc.getElementById(element);\n      }\n\n      element.appendChild(this.editableArea);\n    },\n\n    getIframe: function() {\n      return this.editableArea;\n    },\n\n    getWindow: function() {\n      this._readyError();\n    },\n\n    getDocument: function() {\n      this._readyError();\n    },\n\n    destroy: function() {\n      var iframe = this.getIframe();\n      iframe.parentNode.removeChild(iframe);\n    },\n\n    _readyError: function() {\n      throw new Error(\"wysihtml5.Sandbox: Sandbox iframe isn't loaded yet\");\n    },\n\n    /**\n     * Creates the sandbox iframe\n     *\n     * Some important notes:\n     *  - We can't use HTML5 sandbox for now:\n     *    setting it causes that the iframe's dom can't be accessed from the outside\n     *    Therefore we need to set the \"allow-same-origin\" flag which enables accessing the iframe's dom\n     *    But then there's another problem, DOM events (focus, blur, change, keypress, ...) aren't fired.\n     *    In order to make this happen we need to set the \"allow-scripts\" flag.\n     *    A combination of allow-scripts and allow-same-origin is almost the same as setting no sandbox attribute at all.\n     *  - Chrome & Safari, doesn't seem to support sandboxing correctly when the iframe's html is inlined (no physical document)\n     *  - IE needs to have the security=\"restricted\" attribute set before the iframe is\n     *    inserted into the dom tree\n     *  - Believe it or not but in IE \"security\" in document.createElement(\"iframe\") is false, even\n     *    though it supports it\n     *  - When an iframe has security=\"restricted\", in IE eval() & execScript() don't work anymore\n     *  - IE doesn't fire the onload event when the content is inlined in the src attribute, therefore we rely\n     *    on the onreadystatechange event\n     */\n    _createIframe: function() {\n      var that   = this,\n          iframe = doc.createElement(\"iframe\");\n      iframe.className = \"wysihtml5-sandbox\";\n      wysihtml5.dom.setAttributes({\n        \"security\":           \"restricted\",\n        \"allowtransparency\":  \"true\",\n        \"frameborder\":        0,\n        \"width\":              0,\n        \"height\":             0,\n        \"marginwidth\":        0,\n        \"marginheight\":       0\n      }).on(iframe);\n\n      // Setting the src like this prevents ssl warnings in IE6\n      if (wysihtml5.browser.throwsMixedContentWarningWhenIframeSrcIsEmpty()) {\n        iframe.src = \"javascript:'<html></html>'\";\n      }\n\n      iframe.onload = function() {\n        iframe.onreadystatechange = iframe.onload = null;\n        that._onLoadIframe(iframe);\n      };\n\n      iframe.onreadystatechange = function() {\n        if (/loaded|complete/.test(iframe.readyState)) {\n          iframe.onreadystatechange = iframe.onload = null;\n          that._onLoadIframe(iframe);\n        }\n      };\n\n      return iframe;\n    },\n\n    /**\n     * Callback for when the iframe has finished loading\n     */\n    _onLoadIframe: function(iframe) {\n      // don't resume when the iframe got unloaded (eg. by removing it from the dom)\n      if (!wysihtml5.dom.contains(doc.documentElement, iframe)) {\n        return;\n      }\n\n      var that           = this,\n          iframeWindow   = iframe.contentWindow,\n          iframeDocument = iframe.contentWindow.document,\n          charset        = doc.characterSet || doc.charset || \"utf-8\",\n          sandboxHtml    = this._getHtml({\n            charset:      charset,\n            stylesheets:  this.config.stylesheets\n          });\n\n      // Create the basic dom tree including proper DOCTYPE and charset\n      iframeDocument.open(\"text/html\", \"replace\");\n      iframeDocument.write(sandboxHtml);\n      iframeDocument.close();\n\n      this.getWindow = function() { return iframe.contentWindow; };\n      this.getDocument = function() { return iframe.contentWindow.document; };\n\n      // Catch js errors and pass them to the parent's onerror event\n      // addEventListener(\"error\") doesn't work properly in some browsers\n      // TODO: apparently this doesn't work in IE9!\n      iframeWindow.onerror = function(errorMessage, fileName, lineNumber) {\n        throw new Error(\"wysihtml5.Sandbox: \" + errorMessage, fileName, lineNumber);\n      };\n\n      if (!wysihtml5.browser.supportsSandboxedIframes()) {\n        // Unset a bunch of sensitive variables\n        // Please note: This isn't hack safe!\n        // It more or less just takes care of basic attacks and prevents accidental theft of sensitive information\n        // IE is secure though, which is the most important thing, since IE is the only browser, who\n        // takes over scripts & styles into contentEditable elements when copied from external websites\n        // or applications (Microsoft Word, ...)\n        var i, length;\n        for (i=0, length=windowProperties.length; i<length; i++) {\n          this._unset(iframeWindow, windowProperties[i]);\n        }\n        for (i=0, length=windowProperties2.length; i<length; i++) {\n          this._unset(iframeWindow, windowProperties2[i], wysihtml5.EMPTY_FUNCTION);\n        }\n        for (i=0, length=documentProperties.length; i<length; i++) {\n          this._unset(iframeDocument, documentProperties[i]);\n        }\n        // This doesn't work in Safari 5\n        // See http://stackoverflow.com/questions/992461/is-it-possible-to-override-document-cookie-in-webkit\n        this._unset(iframeDocument, \"cookie\", \"\", true);\n      }\n\n      this.loaded = true;\n\n      // Trigger the callback\n      setTimeout(function() { that.callback(that); }, 0);\n    },\n\n    _getHtml: function(templateVars) {\n      var stylesheets = templateVars.stylesheets,\n          html        = \"\",\n          i           = 0,\n          length;\n      stylesheets = typeof(stylesheets) === \"string\" ? [stylesheets] : stylesheets;\n      if (stylesheets) {\n        length = stylesheets.length;\n        for (; i<length; i++) {\n          html += '<link rel=\"stylesheet\" href=\"' + stylesheets[i] + '\">';\n        }\n      }\n      templateVars.stylesheets = html;\n\n      return wysihtml5.lang.string(\n        '<!DOCTYPE html><html><head>'\n        + '<meta charset=\"#{charset}\">#{stylesheets}</head>'\n        + '<body></body></html>'\n      ).interpolate(templateVars);\n    },\n\n    /**\n     * Method to unset/override existing variables\n     * @example\n     *    // Make cookie unreadable and unwritable\n     *    this._unset(document, \"cookie\", \"\", true);\n     */\n    _unset: function(object, property, value, setter) {\n      try { object[property] = value; } catch(e) {}\n\n      try { object.__defineGetter__(property, function() { return value; }); } catch(e) {}\n      if (setter) {\n        try { object.__defineSetter__(property, function() {}); } catch(e) {}\n      }\n\n      if (!wysihtml5.browser.crashesWhenDefineProperty(property)) {\n        try {\n          var config = {\n            get: function() { return value; }\n          };\n          if (setter) {\n            config.set = function() {};\n          }\n          Object.defineProperty(object, property, config);\n        } catch(e) {}\n      }\n    }\n  });\n})(wysihtml5);\n;(function(wysihtml5) {\n  var doc = document;\n  wysihtml5.dom.ContentEditableArea = Base.extend({\n      getContentEditable: function() {\n        return this.element;\n      },\n\n      getWindow: function() {\n        return this.element.ownerDocument.defaultView;\n      },\n\n      getDocument: function() {\n        return this.element.ownerDocument;\n      },\n\n      constructor: function(readyCallback, config, contentEditable) {\n        this.callback = readyCallback || wysihtml5.EMPTY_FUNCTION;\n        this.config   = wysihtml5.lang.object({}).merge(config).get();\n        if (contentEditable) {\n            this.element = this._bindElement(contentEditable);\n        } else {\n            this.element = this._createElement();\n        }\n      },\n\n      // creates a new contenteditable and initiates it\n      _createElement: function() {\n        var element = doc.createElement(\"div\");\n        element.className = \"wysihtml5-sandbox\";\n        this._loadElement(element);\n        return element;\n      },\n\n      // initiates an allready existent contenteditable\n      _bindElement: function(contentEditable) {\n        contentEditable.className = (contentEditable.className && contentEditable.className != '') ? contentEditable.className + \" wysihtml5-sandbox\" : \"wysihtml5-sandbox\";\n        this._loadElement(contentEditable, true);\n        return contentEditable;\n      },\n\n      _loadElement: function(element, contentExists) {\n          var that = this;\n        if (!contentExists) {\n            var sandboxHtml = this._getHtml();\n            element.innerHTML = sandboxHtml;\n        }\n\n        this.getWindow = function() { return element.ownerDocument.defaultView; };\n        this.getDocument = function() { return element.ownerDocument; };\n\n        // Catch js errors and pass them to the parent's onerror event\n        // addEventListener(\"error\") doesn't work properly in some browsers\n        // TODO: apparently this doesn't work in IE9!\n        // TODO: figure out and bind the errors logic for contenteditble mode\n        /*iframeWindow.onerror = function(errorMessage, fileName, lineNumber) {\n          throw new Error(\"wysihtml5.Sandbox: \" + errorMessage, fileName, lineNumber);\n        }\n        */\n        this.loaded = true;\n        // Trigger the callback\n        setTimeout(function() { that.callback(that); }, 0);\n      },\n\n      _getHtml: function(templateVars) {\n        return '';\n      }\n\n  });\n})(wysihtml5);\n;(function() {\n  var mapping = {\n    \"className\": \"class\"\n  };\n  wysihtml5.dom.setAttributes = function(attributes) {\n    return {\n      on: function(element) {\n        for (var i in attributes) {\n          element.setAttribute(mapping[i] || i, attributes[i]);\n        }\n      }\n    };\n  };\n})();\n;wysihtml5.dom.setStyles = function(styles) {\n  return {\n    on: function(element) {\n      var style = element.style;\n      if (typeof(styles) === \"string\") {\n        style.cssText += \";\" + styles;\n        return;\n      }\n      for (var i in styles) {\n        if (i === \"float\") {\n          style.cssFloat = styles[i];\n          style.styleFloat = styles[i];\n        } else {\n          style[i] = styles[i];\n        }\n      }\n    }\n  };\n};\n;/**\n * Simulate HTML5 placeholder attribute\n *\n * Needed since\n *    - div[contentEditable] elements don't support it\n *    - older browsers (such as IE8 and Firefox 3.6) don't support it at all\n *\n * @param {Object} parent Instance of main wysihtml5.Editor class\n * @param {Element} view Instance of wysihtml5.views.* class\n * @param {String} placeholderText\n *\n * @example\n *    wysihtml.dom.simulatePlaceholder(this, composer, \"Foobar\");\n */\n(function(dom) {\n  dom.simulatePlaceholder = function(editor, view, placeholderText) {\n    var CLASS_NAME = \"placeholder\",\n        unset = function() {\n          var composerIsVisible   = view.element.offsetWidth > 0 && view.element.offsetHeight > 0;\n          if (view.hasPlaceholderSet()) {\n            view.clear();\n            view.element.focus();\n            if (composerIsVisible ) {\n              setTimeout(function() {\n                var sel = view.selection.getSelection();\n                if (!sel.focusNode || !sel.anchorNode) {\n                  view.selection.selectNode(view.element.firstChild || view.element);\n                }\n              }, 0);\n            }\n          }\n          view.placeholderSet = false;\n          dom.removeClass(view.element, CLASS_NAME);\n        },\n        set = function() {\n          if (view.isEmpty()) {\n            view.placeholderSet = true;\n            view.setValue(placeholderText);\n            dom.addClass(view.element, CLASS_NAME);\n          }\n        };\n\n    editor\n      .on(\"set_placeholder\", set)\n      .on(\"unset_placeholder\", unset)\n      .on(\"focus:composer\", unset)\n      .on(\"paste:composer\", unset)\n      .on(\"blur:composer\", set);\n\n    set();\n  };\n})(wysihtml5.dom);\n;(function(dom) {\n  var documentElement = document.documentElement;\n  if (\"textContent\" in documentElement) {\n    dom.setTextContent = function(element, text) {\n      element.textContent = text;\n    };\n\n    dom.getTextContent = function(element) {\n      return element.textContent;\n    };\n  } else if (\"innerText\" in documentElement) {\n    dom.setTextContent = function(element, text) {\n      element.innerText = text;\n    };\n\n    dom.getTextContent = function(element) {\n      return element.innerText;\n    };\n  } else {\n    dom.setTextContent = function(element, text) {\n      element.nodeValue = text;\n    };\n\n    dom.getTextContent = function(element) {\n      return element.nodeValue;\n    };\n  }\n})(wysihtml5.dom);\n\n;/**\n * Get a set of attribute from one element\n *\n * IE gives wrong results for hasAttribute/getAttribute, for example:\n *    var td = document.createElement(\"td\");\n *    td.getAttribute(\"rowspan\"); // => \"1\" in IE\n *\n * Therefore we have to check the element's outerHTML for the attribute\n*/\n\nwysihtml5.dom.getAttribute = function(node, attributeName) {\n  var HAS_GET_ATTRIBUTE_BUG = !wysihtml5.browser.supportsGetAttributeCorrectly();\n  attributeName = attributeName.toLowerCase();\n  var nodeName = node.nodeName;\n  if (nodeName == \"IMG\" && attributeName == \"src\" && wysihtml5.dom.isLoadedImage(node) === true) {\n    // Get 'src' attribute value via object property since this will always contain the\n    // full absolute url (http://...)\n    // this fixes a very annoying bug in firefox (ver 3.6 & 4) and IE 8 where images copied from the same host\n    // will have relative paths, which the sanitizer strips out (see attributeCheckMethods.url)\n    return node.src;\n  } else if (HAS_GET_ATTRIBUTE_BUG && \"outerHTML\" in node) {\n    // Don't trust getAttribute/hasAttribute in IE 6-8, instead check the element's outerHTML\n    var outerHTML      = node.outerHTML.toLowerCase(),\n        // TODO: This might not work for attributes without value: <input disabled>\n        hasAttribute   = outerHTML.indexOf(\" \" + attributeName +  \"=\") != -1;\n\n    return hasAttribute ? node.getAttribute(attributeName) : null;\n  } else{\n    return node.getAttribute(attributeName);\n  }\n};\n;/**\n * Get all attributes of an element\n *\n * IE gives wrong results for hasAttribute/getAttribute, for example:\n *    var td = document.createElement(\"td\");\n *    td.getAttribute(\"rowspan\"); // => \"1\" in IE\n *\n * Therefore we have to check the element's outerHTML for the attribute\n*/\n\nwysihtml5.dom.getAttributes = function(node) {\n  var HAS_GET_ATTRIBUTE_BUG = !wysihtml5.browser.supportsGetAttributeCorrectly(),\n      nodeName = node.nodeName,\n      attributes = [],\n      attr;\n\n  for (attr in node.attributes) {\n    if ((node.attributes.hasOwnProperty && node.attributes.hasOwnProperty(attr)) || (!node.attributes.hasOwnProperty && Object.prototype.hasOwnProperty.call(node.attributes, attr)))  {\n      if (node.attributes[attr].specified) {\n        if (nodeName == \"IMG\" && node.attributes[attr].name.toLowerCase() == \"src\" && wysihtml5.dom.isLoadedImage(node) === true) {\n          attributes['src'] = node.src;\n        } else if (wysihtml5.lang.array(['rowspan', 'colspan']).contains(node.attributes[attr].name.toLowerCase()) && HAS_GET_ATTRIBUTE_BUG) {\n          if (node.attributes[attr].value !== 1) {\n            attributes[node.attributes[attr].name] = node.attributes[attr].value;\n          }\n        } else {\n          attributes[node.attributes[attr].name] = node.attributes[attr].value;\n        }\n      }\n    }\n  }\n  return attributes;\n};;/**\n   * Check whether the given node is a proper loaded image\n   * FIXME: Returns undefined when unknown (Chrome, Safari)\n*/\n\nwysihtml5.dom.isLoadedImage = function (node) {\n  try {\n    return node.complete && !node.mozMatchesSelector(\":-moz-broken\");\n  } catch(e) {\n    if (node.complete && node.readyState === \"complete\") {\n      return true;\n    }\n  }\n};\n;(function(wysihtml5) {\n\n    var api = wysihtml5.dom;\n\n    var MapCell = function(cell) {\n      this.el = cell;\n      this.isColspan= false;\n      this.isRowspan= false;\n      this.firstCol= true;\n      this.lastCol= true;\n      this.firstRow= true;\n      this.lastRow= true;\n      this.isReal= true;\n      this.spanCollection= [];\n      this.modified = false;\n    };\n\n    var TableModifyerByCell = function (cell, table) {\n        if (cell) {\n            this.cell = cell;\n            this.table = api.getParentElement(cell, { nodeName: [\"TABLE\"] });\n        } else if (table) {\n            this.table = table;\n            this.cell = this.table.querySelectorAll('th, td')[0];\n        }\n    };\n\n    function queryInList(list, query) {\n        var ret = [],\n            q;\n        for (var e = 0, len = list.length; e < len; e++) {\n            q = list[e].querySelectorAll(query);\n            if (q) {\n                for(var i = q.length; i--; ret.unshift(q[i]));\n            }\n        }\n        return ret;\n    }\n\n    function removeElement(el) {\n        el.parentNode.removeChild(el);\n    }\n\n    function insertAfter(referenceNode, newNode) {\n        referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n    }\n\n    function nextNode(node, tag) {\n        var element = node.nextSibling;\n        while (element.nodeType !=1) {\n            element = element.nextSibling;\n            if (!tag || tag == element.tagName.toLowerCase()) {\n                return element;\n            }\n        }\n        return null;\n    }\n\n    TableModifyerByCell.prototype = {\n\n        addSpannedCellToMap: function(cell, map, r, c, cspan, rspan) {\n            var spanCollect = [],\n                rmax = r + ((rspan) ? parseInt(rspan, 10) - 1 : 0),\n                cmax = c + ((cspan) ? parseInt(cspan, 10) - 1 : 0);\n\n            for (var rr = r; rr <= rmax; rr++) {\n                if (typeof map[rr] == \"undefined\") { map[rr] = []; }\n                for (var cc = c; cc <= cmax; cc++) {\n                    map[rr][cc] = new MapCell(cell);\n                    map[rr][cc].isColspan = (cspan && parseInt(cspan, 10) > 1);\n                    map[rr][cc].isRowspan = (rspan && parseInt(rspan, 10) > 1);\n                    map[rr][cc].firstCol = cc == c;\n                    map[rr][cc].lastCol = cc == cmax;\n                    map[rr][cc].firstRow = rr == r;\n                    map[rr][cc].lastRow = rr == rmax;\n                    map[rr][cc].isReal = cc == c && rr == r;\n                    map[rr][cc].spanCollection = spanCollect;\n\n                    spanCollect.push(map[rr][cc]);\n                }\n            }\n        },\n\n        setCellAsModified: function(cell) {\n            cell.modified = true;\n            if (cell.spanCollection.length > 0) {\n              for (var s = 0, smax = cell.spanCollection.length; s < smax; s++) {\n                cell.spanCollection[s].modified = true;\n              }\n            }\n        },\n\n        setTableMap: function() {\n            var map = [];\n            var tableRows = this.getTableRows(),\n                ridx, row, cells, cidx, cell,\n                c,\n                cspan, rspan;\n\n            for (ridx = 0; ridx < tableRows.length; ridx++) {\n                row = tableRows[ridx];\n                cells = this.getRowCells(row);\n                c = 0;\n                if (typeof map[ridx] == \"undefined\") { map[ridx] = []; }\n                for (cidx = 0; cidx < cells.length; cidx++) {\n                    cell = cells[cidx];\n\n                    // If cell allready set means it is set by col or rowspan,\n                    // so increase cols index until free col is found\n                    while (typeof map[ridx][c] != \"undefined\") { c++; }\n\n                    cspan = api.getAttribute(cell, 'colspan');\n                    rspan = api.getAttribute(cell, 'rowspan');\n\n                    if (cspan || rspan) {\n                        this.addSpannedCellToMap(cell, map, ridx, c, cspan, rspan);\n                        c = c + ((cspan) ? parseInt(cspan, 10) : 1);\n                    } else {\n                        map[ridx][c] = new MapCell(cell);\n                        c++;\n                    }\n                }\n            }\n            this.map = map;\n            return map;\n        },\n\n        getRowCells: function(row) {\n            var inlineTables = this.table.querySelectorAll('table'),\n                inlineCells = (inlineTables) ? queryInList(inlineTables, 'th, td') : [],\n                allCells = row.querySelectorAll('th, td'),\n                tableCells = (inlineCells.length > 0) ? wysihtml5.lang.array(allCells).without(inlineCells) : allCells;\n\n            return tableCells;\n        },\n\n        getTableRows: function() {\n          var inlineTables = this.table.querySelectorAll('table'),\n              inlineRows = (inlineTables) ? queryInList(inlineTables, 'tr') : [],\n              allRows = this.table.querySelectorAll('tr'),\n              tableRows = (inlineRows.length > 0) ? wysihtml5.lang.array(allRows).without(inlineRows) : allRows;\n\n          return tableRows;\n        },\n\n        getMapIndex: function(cell) {\n          var r_length = this.map.length,\n              c_length = (this.map && this.map[0]) ? this.map[0].length : 0;\n\n          for (var r_idx = 0;r_idx < r_length; r_idx++) {\n              for (var c_idx = 0;c_idx < c_length; c_idx++) {\n                  if (this.map[r_idx][c_idx].el === cell) {\n                      return {'row': r_idx, 'col': c_idx};\n                  }\n              }\n          }\n          return false;\n        },\n\n        getElementAtIndex: function(idx) {\n            this.setTableMap();\n            if (this.map[idx.row] && this.map[idx.row][idx.col] && this.map[idx.row][idx.col].el) {\n                return this.map[idx.row][idx.col].el;\n            }\n            return null;\n        },\n\n        getMapElsTo: function(to_cell) {\n            var els = [];\n            this.setTableMap();\n            this.idx_start = this.getMapIndex(this.cell);\n            this.idx_end = this.getMapIndex(to_cell);\n\n            // switch indexes if start is bigger than end\n            if (this.idx_start.row > this.idx_end.row || (this.idx_start.row == this.idx_end.row && this.idx_start.col > this.idx_end.col)) {\n                var temp_idx = this.idx_start;\n                this.idx_start = this.idx_end;\n                this.idx_end = temp_idx;\n            }\n            if (this.idx_start.col > this.idx_end.col) {\n                var temp_cidx = this.idx_start.col;\n                this.idx_start.col = this.idx_end.col;\n                this.idx_end.col = temp_cidx;\n            }\n\n            if (this.idx_start != null && this.idx_end != null) {\n                for (var row = this.idx_start.row, maxr = this.idx_end.row; row <= maxr; row++) {\n                    for (var col = this.idx_start.col, maxc = this.idx_end.col; col <= maxc; col++) {\n                        els.push(this.map[row][col].el);\n                    }\n                }\n            }\n            return els;\n        },\n\n        orderSelectionEnds: function(secondcell) {\n            this.setTableMap();\n            this.idx_start = this.getMapIndex(this.cell);\n            this.idx_end = this.getMapIndex(secondcell);\n\n            // switch indexes if start is bigger than end\n            if (this.idx_start.row > this.idx_end.row || (this.idx_start.row == this.idx_end.row && this.idx_start.col > this.idx_end.col)) {\n                var temp_idx = this.idx_start;\n                this.idx_start = this.idx_end;\n                this.idx_end = temp_idx;\n            }\n            if (this.idx_start.col > this.idx_end.col) {\n                var temp_cidx = this.idx_start.col;\n                this.idx_start.col = this.idx_end.col;\n                this.idx_end.col = temp_cidx;\n            }\n\n            return {\n                \"start\": this.map[this.idx_start.row][this.idx_start.col].el,\n                \"end\": this.map[this.idx_end.row][this.idx_end.col].el\n            };\n        },\n\n        createCells: function(tag, nr, attrs) {\n            var doc = this.table.ownerDocument,\n                frag = doc.createDocumentFragment(),\n                cell;\n            for (var i = 0; i < nr; i++) {\n                cell = doc.createElement(tag);\n\n                if (attrs) {\n                    for (var attr in attrs) {\n                        if (attrs.hasOwnProperty(attr)) {\n                            cell.setAttribute(attr, attrs[attr]);\n                        }\n                    }\n                }\n\n                // add non breaking space\n                cell.appendChild(document.createTextNode(\"\\u00a0\"));\n\n                frag.appendChild(cell);\n            }\n            return frag;\n        },\n\n        // Returns next real cell (not part of spanned cell unless first) on row if selected index is not real. I no real cells -1 will be returned\n        correctColIndexForUnreals: function(col, row) {\n            var r = this.map[row],\n                corrIdx = -1;\n            for (var i = 0, max = col; i < col; i++) {\n                if (r[i].isReal){\n                    corrIdx++;\n                }\n            }\n            return corrIdx;\n        },\n\n        getLastNewCellOnRow: function(row, rowLimit) {\n            var cells = this.getRowCells(row),\n                cell, idx;\n\n            for (var cidx = 0, cmax = cells.length; cidx < cmax; cidx++) {\n                cell = cells[cidx];\n                idx = this.getMapIndex(cell);\n                if (idx === false || (typeof rowLimit != \"undefined\" && idx.row != rowLimit)) {\n                    return cell;\n                }\n            }\n            return null;\n        },\n\n        removeEmptyTable: function() {\n            var cells = this.table.querySelectorAll('td, th');\n            if (!cells || cells.length == 0) {\n                removeElement(this.table);\n                return true;\n            } else {\n                return false;\n            }\n        },\n\n        // Splits merged cell on row to unique cells\n        splitRowToCells: function(cell) {\n            if (cell.isColspan) {\n                var colspan = parseInt(api.getAttribute(cell.el, 'colspan') || 1, 10),\n                    cType = cell.el.tagName.toLowerCase();\n                if (colspan > 1) {\n                    var newCells = this.createCells(cType, colspan -1);\n                    insertAfter(cell.el, newCells);\n                }\n                cell.el.removeAttribute('colspan');\n            }\n        },\n\n        getRealRowEl: function(force, idx) {\n            var r = null,\n                c = null;\n\n            idx = idx || this.idx;\n\n            for (var cidx = 0, cmax = this.map[idx.row].length; cidx < cmax; cidx++) {\n                c = this.map[idx.row][cidx];\n                if (c.isReal) {\n                    r = api.getParentElement(c.el, { nodeName: [\"TR\"] });\n                    if (r) {\n                        return r;\n                    }\n                }\n            }\n\n            if (r === null && force) {\n                r = api.getParentElement(this.map[idx.row][idx.col].el, { nodeName: [\"TR\"] }) || null;\n            }\n\n            return r;\n        },\n\n        injectRowAt: function(row, col, colspan, cType, c) {\n            var r = this.getRealRowEl(false, {'row': row, 'col': col}),\n                new_cells = this.createCells(cType, colspan);\n\n            if (r) {\n                var n_cidx = this.correctColIndexForUnreals(col, row);\n                if (n_cidx >= 0) {\n                    insertAfter(this.getRowCells(r)[n_cidx], new_cells);\n                } else {\n                    r.insertBefore(new_cells, r.firstChild);\n                }\n            } else {\n                var rr = this.table.ownerDocument.createElement('tr');\n                rr.appendChild(new_cells);\n                insertAfter(api.getParentElement(c.el, { nodeName: [\"TR\"] }), rr);\n            }\n        },\n\n        canMerge: function(to) {\n            this.to = to;\n            this.setTableMap();\n            this.idx_start = this.getMapIndex(this.cell);\n            this.idx_end = this.getMapIndex(this.to);\n\n            // switch indexes if start is bigger than end\n            if (this.idx_start.row > this.idx_end.row || (this.idx_start.row == this.idx_end.row && this.idx_start.col > this.idx_end.col)) {\n                var temp_idx = this.idx_start;\n                this.idx_start = this.idx_end;\n                this.idx_end = temp_idx;\n            }\n            if (this.idx_start.col > this.idx_end.col) {\n                var temp_cidx = this.idx_start.col;\n                this.idx_start.col = this.idx_end.col;\n                this.idx_end.col = temp_cidx;\n            }\n\n            for (var row = this.idx_start.row, maxr = this.idx_end.row; row <= maxr; row++) {\n                for (var col = this.idx_start.col, maxc = this.idx_end.col; col <= maxc; col++) {\n                    if (this.map[row][col].isColspan || this.map[row][col].isRowspan) {\n                        return false;\n                    }\n                }\n            }\n            return true;\n        },\n\n        decreaseCellSpan: function(cell, span) {\n            var nr = parseInt(api.getAttribute(cell.el, span), 10) - 1;\n            if (nr >= 1) {\n                cell.el.setAttribute(span, nr);\n            } else {\n                cell.el.removeAttribute(span);\n                if (span == 'colspan') {\n                    cell.isColspan = false;\n                }\n                if (span == 'rowspan') {\n                    cell.isRowspan = false;\n                }\n                cell.firstCol = true;\n                cell.lastCol = true;\n                cell.firstRow = true;\n                cell.lastRow = true;\n                cell.isReal = true;\n            }\n        },\n\n        removeSurplusLines: function() {\n            var row, cell, ridx, rmax, cidx, cmax, allRowspan;\n\n            this.setTableMap();\n            if (this.map) {\n                ridx = 0;\n                rmax = this.map.length;\n                for (;ridx < rmax; ridx++) {\n                    row = this.map[ridx];\n                    allRowspan = true;\n                    cidx = 0;\n                    cmax = row.length;\n                    for (; cidx < cmax; cidx++) {\n                        cell = row[cidx];\n                        if (!(api.getAttribute(cell.el, \"rowspan\") && parseInt(api.getAttribute(cell.el, \"rowspan\"), 10) > 1 && cell.firstRow !== true)) {\n                            allRowspan = false;\n                            break;\n                        }\n                    }\n                    if (allRowspan) {\n                        cidx = 0;\n                        for (; cidx < cmax; cidx++) {\n                            this.decreaseCellSpan(row[cidx], 'rowspan');\n                        }\n                    }\n                }\n\n                // remove rows without cells\n                var tableRows = this.getTableRows();\n                ridx = 0;\n                rmax = tableRows.length;\n                for (;ridx < rmax; ridx++) {\n                    row = tableRows[ridx];\n                    if (row.childNodes.length == 0 && (/^\\s*$/.test(row.textContent || row.innerText))) {\n                        removeElement(row);\n                    }\n                }\n            }\n        },\n\n        fillMissingCells: function() {\n            var r_max = 0,\n                c_max = 0,\n                prevcell = null;\n\n            this.setTableMap();\n            if (this.map) {\n\n                // find maximal dimensions of broken table\n                r_max = this.map.length;\n                for (var ridx = 0; ridx < r_max; ridx++) {\n                    if (this.map[ridx].length > c_max) { c_max = this.map[ridx].length; }\n                }\n\n                for (var row = 0; row < r_max; row++) {\n                    for (var col = 0; col < c_max; col++) {\n                        if (this.map[row] && !this.map[row][col]) {\n                            if (col > 0) {\n                                this.map[row][col] = new MapCell(this.createCells('td', 1));\n                                prevcell = this.map[row][col-1];\n                                if (prevcell && prevcell.el && prevcell.el.parent) { // if parent does not exist element is removed from dom\n                                    insertAfter(this.map[row][col-1].el, this.map[row][col].el);\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        },\n\n        rectify: function() {\n            if (!this.removeEmptyTable()) {\n                this.removeSurplusLines();\n                this.fillMissingCells();\n                return true;\n            } else {\n                return false;\n            }\n        },\n\n        unmerge: function() {\n            if (this.rectify()) {\n                this.setTableMap();\n                this.idx = this.getMapIndex(this.cell);\n\n                if (this.idx) {\n                    var thisCell = this.map[this.idx.row][this.idx.col],\n                        colspan = (api.getAttribute(thisCell.el, \"colspan\")) ? parseInt(api.getAttribute(thisCell.el, \"colspan\"), 10) : 1,\n                        cType = thisCell.el.tagName.toLowerCase();\n\n                    if (thisCell.isRowspan) {\n                        var rowspan = parseInt(api.getAttribute(thisCell.el, \"rowspan\"), 10);\n                        if (rowspan > 1) {\n                            for (var nr = 1, maxr = rowspan - 1; nr <= maxr; nr++){\n                                this.injectRowAt(this.idx.row + nr, this.idx.col, colspan, cType, thisCell);\n                            }\n                        }\n                        thisCell.el.removeAttribute('rowspan');\n                    }\n                    this.splitRowToCells(thisCell);\n                }\n            }\n        },\n\n        // merges cells from start cell (defined in creating obj) to \"to\" cell\n        merge: function(to) {\n            if (this.rectify()) {\n                if (this.canMerge(to)) {\n                    var rowspan = this.idx_end.row - this.idx_start.row + 1,\n                        colspan = this.idx_end.col - this.idx_start.col + 1;\n\n                    for (var row = this.idx_start.row, maxr = this.idx_end.row; row <= maxr; row++) {\n                        for (var col = this.idx_start.col, maxc = this.idx_end.col; col <= maxc; col++) {\n\n                            if (row == this.idx_start.row && col == this.idx_start.col) {\n                                if (rowspan > 1) {\n                                    this.map[row][col].el.setAttribute('rowspan', rowspan);\n                                }\n                                if (colspan > 1) {\n                                    this.map[row][col].el.setAttribute('colspan', colspan);\n                                }\n                            } else {\n                                // transfer content\n                                if (!(/^\\s*<br\\/?>\\s*$/.test(this.map[row][col].el.innerHTML.toLowerCase()))) {\n                                    this.map[this.idx_start.row][this.idx_start.col].el.innerHTML += ' ' + this.map[row][col].el.innerHTML;\n                                }\n                                removeElement(this.map[row][col].el);\n                            }\n                        }\n                    }\n                    this.rectify();\n                } else {\n                    if (window.console) {\n                        console.log('Do not know how to merge allready merged cells.');\n                    }\n                }\n            }\n        },\n\n        // Decreases rowspan of a cell if it is done on first cell of rowspan row (real cell)\n        // Cell is moved to next row (if it is real)\n        collapseCellToNextRow: function(cell) {\n            var cellIdx = this.getMapIndex(cell.el),\n                newRowIdx = cellIdx.row + 1,\n                newIdx = {'row': newRowIdx, 'col': cellIdx.col};\n\n            if (newRowIdx < this.map.length) {\n\n                var row = this.getRealRowEl(false, newIdx);\n                if (row !== null) {\n                    var n_cidx = this.correctColIndexForUnreals(newIdx.col, newIdx.row);\n                    if (n_cidx >= 0) {\n                        insertAfter(this.getRowCells(row)[n_cidx], cell.el);\n                    } else {\n                        var lastCell = this.getLastNewCellOnRow(row, newRowIdx);\n                        if (lastCell !== null) {\n                            insertAfter(lastCell, cell.el);\n                        } else {\n                            row.insertBefore(cell.el, row.firstChild);\n                        }\n                    }\n                    if (parseInt(api.getAttribute(cell.el, 'rowspan'), 10) > 2) {\n                        cell.el.setAttribute('rowspan', parseInt(api.getAttribute(cell.el, 'rowspan'), 10) - 1);\n                    } else {\n                        cell.el.removeAttribute('rowspan');\n                    }\n                }\n            }\n        },\n\n        // Removes a cell when removing a row\n        // If is rowspan cell then decreases the rowspan\n        // and moves cell to next row if needed (is first cell of rowspan)\n        removeRowCell: function(cell) {\n            if (cell.isReal) {\n               if (cell.isRowspan) {\n                   this.collapseCellToNextRow(cell);\n               } else {\n                   removeElement(cell.el);\n               }\n            } else {\n                if (parseInt(api.getAttribute(cell.el, 'rowspan'), 10) > 2) {\n                    cell.el.setAttribute('rowspan', parseInt(api.getAttribute(cell.el, 'rowspan'), 10) - 1);\n                } else {\n                    cell.el.removeAttribute('rowspan');\n                }\n            }\n        },\n\n        getRowElementsByCell: function() {\n            var cells = [];\n            this.setTableMap();\n            this.idx = this.getMapIndex(this.cell);\n            if (this.idx !== false) {\n                var modRow = this.map[this.idx.row];\n                for (var cidx = 0, cmax = modRow.length; cidx < cmax; cidx++) {\n                    if (modRow[cidx].isReal) {\n                        cells.push(modRow[cidx].el);\n                    }\n                }\n            }\n            return cells;\n        },\n\n        getColumnElementsByCell: function() {\n            var cells = [];\n            this.setTableMap();\n            this.idx = this.getMapIndex(this.cell);\n            if (this.idx !== false) {\n                for (var ridx = 0, rmax = this.map.length; ridx < rmax; ridx++) {\n                    if (this.map[ridx][this.idx.col] && this.map[ridx][this.idx.col].isReal) {\n                        cells.push(this.map[ridx][this.idx.col].el);\n                    }\n                }\n            }\n            return cells;\n        },\n\n        // Removes the row of selected cell\n        removeRow: function() {\n            var oldRow = api.getParentElement(this.cell, { nodeName: [\"TR\"] });\n            if (oldRow) {\n                this.setTableMap();\n                this.idx = this.getMapIndex(this.cell);\n                if (this.idx !== false) {\n                    var modRow = this.map[this.idx.row];\n                    for (var cidx = 0, cmax = modRow.length; cidx < cmax; cidx++) {\n                        if (!modRow[cidx].modified) {\n                            this.setCellAsModified(modRow[cidx]);\n                            this.removeRowCell(modRow[cidx]);\n                        }\n                    }\n                }\n                removeElement(oldRow);\n            }\n        },\n\n        removeColCell: function(cell) {\n            if (cell.isColspan) {\n                if (parseInt(api.getAttribute(cell.el, 'colspan'), 10) > 2) {\n                    cell.el.setAttribute('colspan', parseInt(api.getAttribute(cell.el, 'colspan'), 10) - 1);\n                } else {\n                    cell.el.removeAttribute('colspan');\n                }\n            } else if (cell.isReal) {\n                removeElement(cell.el);\n            }\n        },\n\n        removeColumn: function() {\n            this.setTableMap();\n            this.idx = this.getMapIndex(this.cell);\n            if (this.idx !== false) {\n                for (var ridx = 0, rmax = this.map.length; ridx < rmax; ridx++) {\n                    if (!this.map[ridx][this.idx.col].modified) {\n                        this.setCellAsModified(this.map[ridx][this.idx.col]);\n                        this.removeColCell(this.map[ridx][this.idx.col]);\n                    }\n                }\n            }\n        },\n\n        // removes row or column by selected cell element\n        remove: function(what) {\n            if (this.rectify()) {\n                switch (what) {\n                    case 'row':\n                        this.removeRow();\n                    break;\n                    case 'column':\n                        this.removeColumn();\n                    break;\n                }\n                this.rectify();\n            }\n        },\n\n        addRow: function(where) {\n            var doc = this.table.ownerDocument;\n\n            this.setTableMap();\n            this.idx = this.getMapIndex(this.cell);\n            if (where == \"below\" && api.getAttribute(this.cell, 'rowspan')) {\n                this.idx.row = this.idx.row + parseInt(api.getAttribute(this.cell, 'rowspan'), 10) - 1;\n            }\n\n            if (this.idx !== false) {\n                var modRow = this.map[this.idx.row],\n                    newRow = doc.createElement('tr');\n\n                for (var ridx = 0, rmax = modRow.length; ridx < rmax; ridx++) {\n                    if (!modRow[ridx].modified) {\n                        this.setCellAsModified(modRow[ridx]);\n                        this.addRowCell(modRow[ridx], newRow, where);\n                    }\n                }\n\n                switch (where) {\n                    case 'below':\n                        insertAfter(this.getRealRowEl(true), newRow);\n                    break;\n                    case 'above':\n                        var cr = api.getParentElement(this.map[this.idx.row][this.idx.col].el, { nodeName: [\"TR\"] });\n                        if (cr) {\n                            cr.parentNode.insertBefore(newRow, cr);\n                        }\n                    break;\n                }\n            }\n        },\n\n        addRowCell: function(cell, row, where) {\n            var colSpanAttr = (cell.isColspan) ? {\"colspan\" : api.getAttribute(cell.el, 'colspan')} : null;\n            if (cell.isReal) {\n                if (where != 'above' && cell.isRowspan) {\n                    cell.el.setAttribute('rowspan', parseInt(api.getAttribute(cell.el,'rowspan'), 10) + 1);\n                } else {\n                    row.appendChild(this.createCells('td', 1, colSpanAttr));\n                }\n            } else {\n                if (where != 'above' && cell.isRowspan && cell.lastRow) {\n                    row.appendChild(this.createCells('td', 1, colSpanAttr));\n                } else if (c.isRowspan) {\n                    cell.el.attr('rowspan', parseInt(api.getAttribute(cell.el, 'rowspan'), 10) + 1);\n                }\n            }\n        },\n\n        add: function(where) {\n            if (this.rectify()) {\n                if (where == 'below' || where == 'above') {\n                    this.addRow(where);\n                }\n                if (where == 'before' || where == 'after') {\n                    this.addColumn(where);\n                }\n            }\n        },\n\n        addColCell: function (cell, ridx, where) {\n            var doAdd,\n                cType = cell.el.tagName.toLowerCase();\n\n            // defines add cell vs expand cell conditions\n            // true means add\n            switch (where) {\n                case \"before\":\n                    doAdd = (!cell.isColspan || cell.firstCol);\n                break;\n                case \"after\":\n                    doAdd = (!cell.isColspan || cell.lastCol || (cell.isColspan && c.el == this.cell));\n                break;\n            }\n\n            if (doAdd){\n                // adds a cell before or after current cell element\n                switch (where) {\n                    case \"before\":\n                        cell.el.parentNode.insertBefore(this.createCells(cType, 1), cell.el);\n                    break;\n                    case \"after\":\n                        insertAfter(cell.el, this.createCells(cType, 1));\n                    break;\n                }\n\n                // handles if cell has rowspan\n                if (cell.isRowspan) {\n                    this.handleCellAddWithRowspan(cell, ridx+1, where);\n                }\n\n            } else {\n                // expands cell\n                cell.el.setAttribute('colspan',  parseInt(api.getAttribute(cell.el, 'colspan'), 10) + 1);\n            }\n        },\n\n        addColumn: function(where) {\n            var row, modCell;\n\n            this.setTableMap();\n            this.idx = this.getMapIndex(this.cell);\n            if (where == \"after\" && api.getAttribute(this.cell, 'colspan')) {\n              this.idx.col = this.idx.col + parseInt(api.getAttribute(this.cell, 'colspan'), 10) - 1;\n            }\n\n            if (this.idx !== false) {\n                for (var ridx = 0, rmax = this.map.length; ridx < rmax; ridx++ ) {\n                    row = this.map[ridx];\n                    if (row[this.idx.col]) {\n                        modCell = row[this.idx.col];\n                        if (!modCell.modified) {\n                            this.setCellAsModified(modCell);\n                            this.addColCell(modCell, ridx , where);\n                        }\n                    }\n                }\n            }\n        },\n\n        handleCellAddWithRowspan: function (cell, ridx, where) {\n            var addRowsNr = parseInt(api.getAttribute(this.cell, 'rowspan'), 10) - 1,\n                crow = api.getParentElement(cell.el, { nodeName: [\"TR\"] }),\n                cType = cell.el.tagName.toLowerCase(),\n                cidx, temp_r_cells,\n                doc = this.table.ownerDocument,\n                nrow;\n\n            for (var i = 0; i < addRowsNr; i++) {\n                cidx = this.correctColIndexForUnreals(this.idx.col, (ridx + i));\n                crow = nextNode(crow, 'tr');\n                if (crow) {\n                    if (cidx > 0) {\n                        switch (where) {\n                            case \"before\":\n                                temp_r_cells = this.getRowCells(crow);\n                                if (cidx > 0 && this.map[ridx + i][this.idx.col].el != temp_r_cells[cidx] && cidx == temp_r_cells.length - 1) {\n                                     insertAfter(temp_r_cells[cidx], this.createCells(cType, 1));\n                                } else {\n                                    temp_r_cells[cidx].parentNode.insertBefore(this.createCells(cType, 1), temp_r_cells[cidx]);\n                                }\n\n                            break;\n                            case \"after\":\n                                insertAfter(this.getRowCells(crow)[cidx], this.createCells(cType, 1));\n                            break;\n                        }\n                    } else {\n                        crow.insertBefore(this.createCells(cType, 1), crow.firstChild);\n                    }\n                } else {\n                    nrow = doc.createElement('tr');\n                    nrow.appendChild(this.createCells(cType, 1));\n                    this.table.appendChild(nrow);\n                }\n            }\n        }\n    };\n\n    api.table = {\n        getCellsBetween: function(cell1, cell2) {\n            var c1 = new TableModifyerByCell(cell1);\n            return c1.getMapElsTo(cell2);\n        },\n\n        addCells: function(cell, where) {\n            var c = new TableModifyerByCell(cell);\n            c.add(where);\n        },\n\n        removeCells: function(cell, what) {\n            var c = new TableModifyerByCell(cell);\n            c.remove(what);\n        },\n\n        mergeCellsBetween: function(cell1, cell2) {\n            var c1 = new TableModifyerByCell(cell1);\n            c1.merge(cell2);\n        },\n\n        unmergeCell: function(cell) {\n            var c = new TableModifyerByCell(cell);\n            c.unmerge();\n        },\n\n        orderSelectionEnds: function(cell, cell2) {\n            var c = new TableModifyerByCell(cell);\n            return c.orderSelectionEnds(cell2);\n        },\n\n        indexOf: function(cell) {\n            var c = new TableModifyerByCell(cell);\n            c.setTableMap();\n            return c.getMapIndex(cell);\n        },\n\n        findCell: function(table, idx) {\n            var c = new TableModifyerByCell(null, table);\n            return c.getElementAtIndex(idx);\n        },\n\n        findRowByCell: function(cell) {\n            var c = new TableModifyerByCell(cell);\n            return c.getRowElementsByCell();\n        },\n\n        findColumnByCell: function(cell) {\n            var c = new TableModifyerByCell(cell);\n            return c.getColumnElementsByCell();\n        },\n\n        canMerge: function(cell1, cell2) {\n            var c = new TableModifyerByCell(cell1);\n            return c.canMerge(cell2);\n        }\n    };\n\n\n\n})(wysihtml5);\n;// does a selector query on element or array of elements\n\nwysihtml5.dom.query = function(elements, query) {\n    var ret = [],\n        q;\n\n    if (elements.nodeType) {\n        elements = [elements];\n    }\n\n    for (var e = 0, len = elements.length; e < len; e++) {\n        q = elements[e].querySelectorAll(query);\n        if (q) {\n            for(var i = q.length; i--; ret.unshift(q[i]));\n        }\n    }\n    return ret;\n};\n;wysihtml5.dom.compareDocumentPosition = (function() {\n  var documentElement = document.documentElement;\n  if (documentElement.compareDocumentPosition) {\n    return function(container, element) {\n      return container.compareDocumentPosition(element);\n    };\n  } else {\n    return function( container, element ) {\n      // implementation borrowed from https://github.com/tmpvar/jsdom/blob/681a8524b663281a0f58348c6129c8c184efc62c/lib/jsdom/level3/core.js // MIT license\n      var thisOwner, otherOwner;\n\n      if( container.nodeType === 9) // Node.DOCUMENT_NODE\n        thisOwner = container;\n      else\n        thisOwner = container.ownerDocument;\n\n      if( element.nodeType === 9) // Node.DOCUMENT_NODE\n        otherOwner = element;\n      else\n        otherOwner = element.ownerDocument;\n\n      if( container === element ) return 0;\n      if( container === element.ownerDocument ) return 4 + 16; //Node.DOCUMENT_POSITION_FOLLOWING + Node.DOCUMENT_POSITION_CONTAINED_BY;\n      if( container.ownerDocument === element ) return 2 + 8;  //Node.DOCUMENT_POSITION_PRECEDING + Node.DOCUMENT_POSITION_CONTAINS;\n      if( thisOwner !== otherOwner ) return 1; // Node.DOCUMENT_POSITION_DISCONNECTED;\n\n      // Text nodes for attributes does not have a _parentNode. So we need to find them as attribute child.\n      if( container.nodeType === 2 /*Node.ATTRIBUTE_NODE*/ && container.childNodes && wysihtml5.lang.array(container.childNodes).indexOf( element ) !== -1)\n        return 4 + 16; //Node.DOCUMENT_POSITION_FOLLOWING + Node.DOCUMENT_POSITION_CONTAINED_BY;\n\n      if( element.nodeType === 2 /*Node.ATTRIBUTE_NODE*/ && element.childNodes && wysihtml5.lang.array(element.childNodes).indexOf( container ) !== -1)\n        return 2 + 8; //Node.DOCUMENT_POSITION_PRECEDING + Node.DOCUMENT_POSITION_CONTAINS;\n\n      var point = container;\n      var parents = [ ];\n      var previous = null;\n      while( point ) {\n        if( point == element ) return 2 + 8; //Node.DOCUMENT_POSITION_PRECEDING + Node.DOCUMENT_POSITION_CONTAINS;\n        parents.push( point );\n        point = point.parentNode;\n      }\n      point = element;\n      previous = null;\n      while( point ) {\n        if( point == container ) return 4 + 16; //Node.DOCUMENT_POSITION_FOLLOWING + Node.DOCUMENT_POSITION_CONTAINED_BY;\n        var location_index = wysihtml5.lang.array(parents).indexOf( point );\n        if( location_index !== -1) {\n         var smallest_common_ancestor = parents[ location_index ];\n         var this_index = wysihtml5.lang.array(smallest_common_ancestor.childNodes).indexOf( parents[location_index - 1]);//smallest_common_ancestor.childNodes.toArray().indexOf( parents[location_index - 1] );\n         var other_index = wysihtml5.lang.array(smallest_common_ancestor.childNodes).indexOf( previous ); //smallest_common_ancestor.childNodes.toArray().indexOf( previous );\n         if( this_index > other_index ) {\n               return 2; //Node.DOCUMENT_POSITION_PRECEDING;\n         }\n         else {\n           return 4; //Node.DOCUMENT_POSITION_FOLLOWING;\n         }\n        }\n        previous = point;\n        point = point.parentNode;\n      }\n      return 1; //Node.DOCUMENT_POSITION_DISCONNECTED;\n    };\n  }\n})();\n;wysihtml5.dom.unwrap = function(node) {\n  if (node.parentNode) {\n    while (node.lastChild) {\n      wysihtml5.dom.insert(node.lastChild).after(node);\n    }\n    node.parentNode.removeChild(node);\n  }\n};;/* \n * Methods for fetching pasted html before it gets inserted into content\n**/\n\n/* Modern event.clipboardData driven approach.\n * Advantage is that it does not have to loose selection or modify dom to catch the data. \n * IE does not support though.\n**/\nwysihtml5.dom.getPastedHtml = function(event) {\n  var html;\n  if (event.clipboardData) {\n    if (wysihtml5.lang.array(event.clipboardData.types).contains('text/html')) {\n      html = event.clipboardData.getData('text/html');\n    } else if (wysihtml5.lang.array(event.clipboardData.types).contains('text/plain')) {\n      html = wysihtml5.lang.string(event.clipboardData.getData('text/plain')).escapeHTML(true, true);\n    }\n  }\n  return html;\n};\n\n/* Older temprorary contenteditable as paste source catcher method for fallbacks */\nwysihtml5.dom.getPastedHtmlWithDiv = function (composer, f) {\n  var selBookmark = composer.selection.getBookmark(),\n      doc = composer.element.ownerDocument,\n      cleanerDiv = doc.createElement('DIV');\n  \n  doc.body.appendChild(cleanerDiv);\n\n  cleanerDiv.style.width = \"1px\";\n  cleanerDiv.style.height = \"1px\";\n  cleanerDiv.style.overflow = \"hidden\";\n\n  cleanerDiv.setAttribute('contenteditable', 'true');\n  cleanerDiv.focus();\n\n  setTimeout(function () {\n    composer.selection.setBookmark(selBookmark);\n    f(cleanerDiv.innerHTML);\n    cleanerDiv.parentNode.removeChild(cleanerDiv);\n  }, 0);\n};;/**\n * Fix most common html formatting misbehaviors of browsers implementation when inserting\n * content via copy & paste contentEditable\n *\n * @author Christopher Blum\n */\nwysihtml5.quirks.cleanPastedHTML = (function() {\n\n  var styleToRegex = function (styleStr) {\n    var trimmedStr = wysihtml5.lang.string(styleStr).trim(),\n        escapedStr = trimmedStr.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n\n    return new RegExp(\"^((?!^\" + escapedStr + \"$).)*$\", \"i\");\n  };\n\n  var extendRulesWithStyleExceptions = function (rules, exceptStyles) {\n    var newRules = wysihtml5.lang.object(rules).clone(true),\n        tag, style;\n\n    for (tag in newRules.tags) {\n\n      if (newRules.tags.hasOwnProperty(tag)) {\n        if (newRules.tags[tag].keep_styles) {\n          for (style in newRules.tags[tag].keep_styles) {\n            if (newRules.tags[tag].keep_styles.hasOwnProperty(style)) {\n              if (exceptStyles[style]) {\n                newRules.tags[tag].keep_styles[style] = styleToRegex(exceptStyles[style]);\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return newRules;\n  };\n\n  var pickRuleset = function(ruleset, html) {\n    var pickedSet, defaultSet;\n\n    if (!ruleset) {\n      return null;\n    }\n\n    for (var i = 0, max = ruleset.length; i < max; i++) {\n      if (!ruleset[i].condition) {\n        defaultSet = ruleset[i].set;\n      }\n      if (ruleset[i].condition && ruleset[i].condition.test(html)) {\n        return ruleset[i].set;\n      }\n    }\n\n    return defaultSet;\n  };\n\n  return function(html, options) {\n    var exceptStyles = {\n          'color': wysihtml5.dom.getStyle(\"color\").from(options.referenceNode),\n          'fontSize': wysihtml5.dom.getStyle(\"font-size\").from(options.referenceNode)\n        },\n        rules = extendRulesWithStyleExceptions(pickRuleset(options.rules, html) || {}, exceptStyles),\n        newHtml;\n\n    newHtml = wysihtml5.dom.parse(html, {\n      \"rules\": rules,\n      \"cleanUp\": true, // <span> elements, empty or without attributes, should be removed/replaced with their content\n      \"context\": options.referenceNode.ownerDocument,\n      \"uneditableClass\": options.uneditableClass,\n      \"clearInternals\" : true, // don't paste temprorary selection and other markings\n      \"unjoinNbsps\" : true\n    });\n\n    return newHtml;\n  };\n\n})();;/**\n * IE and Opera leave an empty paragraph in the contentEditable element after clearing it\n *\n * @param {Object} contentEditableElement The contentEditable element to observe for clearing events\n * @exaple\n *    wysihtml5.quirks.ensureProperClearing(myContentEditableElement);\n */\nwysihtml5.quirks.ensureProperClearing = (function() {\n  var clearIfNecessary = function() {\n    var element = this;\n    setTimeout(function() {\n      var innerHTML = element.innerHTML.toLowerCase();\n      if (innerHTML == \"<p>&nbsp;</p>\" ||\n          innerHTML == \"<p>&nbsp;</p><p>&nbsp;</p>\") {\n        element.innerHTML = \"\";\n      }\n    }, 0);\n  };\n\n  return function(composer) {\n    wysihtml5.dom.observe(composer.element, [\"cut\", \"keydown\"], clearIfNecessary);\n  };\n})();\n;// See https://bugzilla.mozilla.org/show_bug.cgi?id=664398\n//\n// In Firefox this:\n//      var d = document.createElement(\"div\");\n//      d.innerHTML ='<a href=\"~\"></a>';\n//      d.innerHTML;\n// will result in:\n//      <a href=\"%7E\"></a>\n// which is wrong\n(function(wysihtml5) {\n  var TILDE_ESCAPED = \"%7E\";\n  wysihtml5.quirks.getCorrectInnerHTML = function(element) {\n    var innerHTML = element.innerHTML;\n    if (innerHTML.indexOf(TILDE_ESCAPED) === -1) {\n      return innerHTML;\n    }\n\n    var elementsWithTilde = element.querySelectorAll(\"[href*='~'], [src*='~']\"),\n        url,\n        urlToSearch,\n        length,\n        i;\n    for (i=0, length=elementsWithTilde.length; i<length; i++) {\n      url         = elementsWithTilde[i].href || elementsWithTilde[i].src;\n      urlToSearch = wysihtml5.lang.string(url).replace(\"~\").by(TILDE_ESCAPED);\n      innerHTML   = wysihtml5.lang.string(innerHTML).replace(urlToSearch).by(url);\n    }\n    return innerHTML;\n  };\n})(wysihtml5);\n;/**\n * Force rerendering of a given element\n * Needed to fix display misbehaviors of IE\n *\n * @param {Element} element The element object which needs to be rerendered\n * @example\n *    wysihtml5.quirks.redraw(document.body);\n */\n(function(wysihtml5) {\n  var CLASS_NAME = \"wysihtml5-quirks-redraw\";\n\n  wysihtml5.quirks.redraw = function(element) {\n    wysihtml5.dom.addClass(element, CLASS_NAME);\n    wysihtml5.dom.removeClass(element, CLASS_NAME);\n\n    // Following hack is needed for firefox to make sure that image resize handles are properly removed\n    try {\n      var doc = element.ownerDocument;\n      doc.execCommand(\"italic\", false, null);\n      doc.execCommand(\"italic\", false, null);\n    } catch(e) {}\n  };\n})(wysihtml5);\n;wysihtml5.quirks.tableCellsSelection = function(editable, editor) {\n\n    var dom = wysihtml5.dom,\n        select = {\n            table: null,\n            start: null,\n            end: null,\n            cells: null,\n            select: selectCells\n        },\n        selection_class = \"wysiwyg-tmp-selected-cell\",\n        moveHandler = null,\n        upHandler = null;\n\n    function init () {\n\n        dom.observe(editable, \"mousedown\", function(event) {\n          var target = wysihtml5.dom.getParentElement(event.target, { nodeName: [\"TD\", \"TH\"] });\n          if (target) {\n              handleSelectionMousedown(target);\n          }\n        });\n\n        return select;\n    }\n\n    function handleSelectionMousedown (target) {\n      select.start = target;\n      select.end = target;\n      select.cells = [target];\n      select.table = dom.getParentElement(select.start, { nodeName: [\"TABLE\"] });\n\n      if (select.table) {\n        removeCellSelections();\n        dom.addClass(target, selection_class);\n        moveHandler = dom.observe(editable, \"mousemove\", handleMouseMove);\n        upHandler = dom.observe(editable, \"mouseup\", handleMouseUp);\n        editor.fire(\"tableselectstart\").fire(\"tableselectstart:composer\");\n      }\n    }\n\n    // remove all selection classes\n    function removeCellSelections () {\n        if (editable) {\n            var selectedCells = editable.querySelectorAll('.' + selection_class);\n            if (selectedCells.length > 0) {\n              for (var i = 0; i < selectedCells.length; i++) {\n                  dom.removeClass(selectedCells[i], selection_class);\n              }\n            }\n        }\n    }\n\n    function addSelections (cells) {\n      for (var i = 0; i < cells.length; i++) {\n        dom.addClass(cells[i], selection_class);\n      }\n    }\n\n    function handleMouseMove (event) {\n      var curTable = null,\n          cell = dom.getParentElement(event.target, { nodeName: [\"TD\",\"TH\"] }),\n          oldEnd;\n\n      if (cell && select.table && select.start) {\n        curTable =  dom.getParentElement(cell, { nodeName: [\"TABLE\"] });\n        if (curTable && curTable === select.table) {\n          removeCellSelections();\n          oldEnd = select.end;\n          select.end = cell;\n          select.cells = dom.table.getCellsBetween(select.start, cell);\n          if (select.cells.length > 1) {\n            editor.composer.selection.deselect();\n          }\n          addSelections(select.cells);\n          if (select.end !== oldEnd) {\n            editor.fire(\"tableselectchange\").fire(\"tableselectchange:composer\");\n          }\n        }\n      }\n    }\n\n    function handleMouseUp (event) {\n      moveHandler.stop();\n      upHandler.stop();\n      editor.fire(\"tableselect\").fire(\"tableselect:composer\");\n      setTimeout(function() {\n        bindSideclick();\n      },0);\n    }\n\n    function bindSideclick () {\n        var sideClickHandler = dom.observe(editable.ownerDocument, \"click\", function(event) {\n          sideClickHandler.stop();\n          if (dom.getParentElement(event.target, { nodeName: [\"TABLE\"] }) != select.table) {\n              removeCellSelections();\n              select.table = null;\n              select.start = null;\n              select.end = null;\n              editor.fire(\"tableunselect\").fire(\"tableunselect:composer\");\n          }\n        });\n    }\n\n    function selectCells (start, end) {\n        select.start = start;\n        select.end = end;\n        select.table = dom.getParentElement(select.start, { nodeName: [\"TABLE\"] });\n        selectedCells = dom.table.getCellsBetween(select.start, select.end);\n        addSelections(selectedCells);\n        bindSideclick();\n        editor.fire(\"tableselect\").fire(\"tableselect:composer\");\n    }\n\n    return init();\n\n};\n;(function(wysihtml5) {\n  var RGBA_REGEX     = /^rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*([\\d\\.]+)\\s*\\)/i,\n      RGB_REGEX      = /^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)/i,\n      HEX6_REGEX     = /^#([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])/i,\n      HEX3_REGEX     = /^#([0-9a-f])([0-9a-f])([0-9a-f])/i;\n\n  var param_REGX = function (p) {\n    return new RegExp(\"(^|\\\\s|;)\" + p + \"\\\\s*:\\\\s*[^;$]+\" , \"gi\");\n  };\n\n  wysihtml5.quirks.styleParser = {\n\n    parseColor: function(stylesStr, paramName) {\n      var paramRegex = param_REGX(paramName),\n          params = stylesStr.match(paramRegex),\n          radix = 10,\n          str, colorMatch;\n\n      if (params) {\n        for (var i = params.length; i--;) {\n          params[i] = wysihtml5.lang.string(params[i].split(':')[1]).trim();\n        }\n        str = params[params.length-1];\n\n        if (RGBA_REGEX.test(str)) {\n          colorMatch = str.match(RGBA_REGEX);\n        } else if (RGB_REGEX.test(str)) {\n          colorMatch = str.match(RGB_REGEX);\n        } else if (HEX6_REGEX.test(str)) {\n          colorMatch = str.match(HEX6_REGEX);\n          radix = 16;\n        } else if (HEX3_REGEX.test(str)) {\n          colorMatch = str.match(HEX3_REGEX);\n          colorMatch.shift();\n          colorMatch.push(1);\n          return wysihtml5.lang.array(colorMatch).map(function(d, idx) {\n            return (idx < 3) ? (parseInt(d, 16) * 16) + parseInt(d, 16): parseFloat(d);\n          });\n        }\n\n        if (colorMatch) {\n          colorMatch.shift();\n          if (!colorMatch[3]) {\n            colorMatch.push(1);\n          }\n          return wysihtml5.lang.array(colorMatch).map(function(d, idx) {\n            return (idx < 3) ? parseInt(d, radix): parseFloat(d);\n          });\n        }\n      }\n      return false;\n    },\n\n    unparseColor: function(val, props) {\n      if (props) {\n        if (props == \"hex\") {\n          return (val[0].toString(16).toUpperCase()) + (val[1].toString(16).toUpperCase()) + (val[2].toString(16).toUpperCase());\n        } else if (props == \"hash\") {\n          return \"#\" + (val[0].toString(16).toUpperCase()) + (val[1].toString(16).toUpperCase()) + (val[2].toString(16).toUpperCase());\n        } else if (props == \"rgb\") {\n          return \"rgb(\" + val[0] + \",\" + val[1] + \",\" + val[2] + \")\";\n        } else if (props == \"rgba\") {\n          return \"rgba(\" + val[0] + \",\" + val[1] + \",\" + val[2] + \",\" + val[3] + \")\";\n        } else if (props == \"csv\") {\n          return  val[0] + \",\" + val[1] + \",\" + val[2] + \",\" + val[3];\n        }\n      }\n\n      if (val[3] && val[3] !== 1) {\n        return \"rgba(\" + val[0] + \",\" + val[1] + \",\" + val[2] + \",\" + val[3] + \")\";\n      } else {\n        return \"rgb(\" + val[0] + \",\" + val[1] + \",\" + val[2] + \")\";\n      }\n    },\n\n    parseFontSize: function(stylesStr) {\n      var params = stylesStr.match(param_REGX('font-size'));\n      if (params) {\n        return wysihtml5.lang.string(params[params.length - 1].split(':')[1]).trim();\n      }\n      return false;\n    }\n  };\n\n})(wysihtml5);\n;/**\n * Selection API\n *\n * @example\n *    var selection = new wysihtml5.Selection(editor);\n */\n(function(wysihtml5) {\n  var dom = wysihtml5.dom;\n\n  function _getCumulativeOffsetTop(element) {\n    var top = 0;\n    if (element.parentNode) {\n      do {\n        top += element.offsetTop || 0;\n        element = element.offsetParent;\n      } while (element);\n    }\n    return top;\n  }\n\n  // Provides the depth of ``descendant`` relative to ``ancestor``\n  function getDepth(ancestor, descendant) {\n      var ret = 0;\n      while (descendant !== ancestor) {\n          ret++;\n          descendant = descendant.parentNode;\n          if (!descendant)\n              throw new Error(\"not a descendant of ancestor!\");\n      }\n      return ret;\n  }\n\n  // Should fix the obtained ranges that cannot surrond contents normally to apply changes upon\n  // Being considerate to firefox that sets range start start out of span and end inside on doubleclick initiated selection\n  function expandRangeToSurround(range) {\n      if (range.canSurroundContents()) return;\n\n      var common = range.commonAncestorContainer,\n          start_depth = getDepth(common, range.startContainer),\n          end_depth = getDepth(common, range.endContainer);\n\n      while(!range.canSurroundContents()) {\n        // In the following branches, we cannot just decrement the depth variables because the setStartBefore/setEndAfter may move the start or end of the range more than one level relative to ``common``. So we need to recompute the depth.\n        if (start_depth > end_depth) {\n            range.setStartBefore(range.startContainer);\n            start_depth = getDepth(common, range.startContainer);\n        }\n        else {\n            range.setEndAfter(range.endContainer);\n            end_depth = getDepth(common, range.endContainer);\n        }\n      }\n  }\n\n  wysihtml5.Selection = Base.extend(\n    /** @scope wysihtml5.Selection.prototype */ {\n    constructor: function(editor, contain, unselectableClass) {\n      // Make sure that our external range library is initialized\n      window.rangy.init();\n\n      this.editor   = editor;\n      this.composer = editor.composer;\n      this.doc      = this.composer.doc;\n      this.contain = contain;\n      this.unselectableClass = unselectableClass || false;\n    },\n\n    /**\n     * Get the current selection as a bookmark to be able to later restore it\n     *\n     * @return {Object} An object that represents the current selection\n     */\n    getBookmark: function() {\n      var range = this.getRange();\n      if (range) expandRangeToSurround(range);\n      return range && range.cloneRange();\n    },\n\n    /**\n     * Restore a selection retrieved via wysihtml5.Selection.prototype.getBookmark\n     *\n     * @param {Object} bookmark An object that represents the current selection\n     */\n    setBookmark: function(bookmark) {\n      if (!bookmark) {\n        return;\n      }\n\n      this.setSelection(bookmark);\n    },\n\n    /**\n     * Set the caret in front of the given node\n     *\n     * @param {Object} node The element or text node where to position the caret in front of\n     * @example\n     *    selection.setBefore(myElement);\n     */\n    setBefore: function(node) {\n      var range = rangy.createRange(this.doc);\n      range.setStartBefore(node);\n      range.setEndBefore(node);\n      return this.setSelection(range);\n    },\n\n    /**\n     * Set the caret after the given node\n     *\n     * @param {Object} node The element or text node where to position the caret in front of\n     * @example\n     *    selection.setBefore(myElement);\n     */\n    setAfter: function(node) {\n      var range = rangy.createRange(this.doc);\n\n      range.setStartAfter(node);\n      range.setEndAfter(node);\n      return this.setSelection(range);\n    },\n\n    /**\n     * Ability to select/mark nodes\n     *\n     * @param {Element} node The node/element to select\n     * @example\n     *    selection.selectNode(document.getElementById(\"my-image\"));\n     */\n    selectNode: function(node, avoidInvisibleSpace) {\n      var range           = rangy.createRange(this.doc),\n          isElement       = node.nodeType === wysihtml5.ELEMENT_NODE,\n          canHaveHTML     = \"canHaveHTML\" in node ? node.canHaveHTML : (node.nodeName !== \"IMG\"),\n          content         = isElement ? node.innerHTML : node.data,\n          isEmpty         = (content === \"\" || content === wysihtml5.INVISIBLE_SPACE),\n          displayStyle    = dom.getStyle(\"display\").from(node),\n          isBlockElement  = (displayStyle === \"block\" || displayStyle === \"list-item\");\n\n      if (isEmpty && isElement && canHaveHTML && !avoidInvisibleSpace) {\n        // Make sure that caret is visible in node by inserting a zero width no breaking space\n        try { node.innerHTML = wysihtml5.INVISIBLE_SPACE; } catch(e) {}\n      }\n\n      if (canHaveHTML) {\n        range.selectNodeContents(node);\n      } else {\n        range.selectNode(node);\n      }\n\n      if (canHaveHTML && isEmpty && isElement) {\n        range.collapse(isBlockElement);\n      } else if (canHaveHTML && isEmpty) {\n        range.setStartAfter(node);\n        range.setEndAfter(node);\n      }\n\n      this.setSelection(range);\n    },\n\n    /**\n     * Get the node which contains the selection\n     *\n     * @param {Boolean} [controlRange] (only IE) Whether it should return the selected ControlRange element when the selection type is a \"ControlRange\"\n     * @return {Object} The node that contains the caret\n     * @example\n     *    var nodeThatContainsCaret = selection.getSelectedNode();\n     */\n    getSelectedNode: function(controlRange) {\n      var selection,\n          range;\n\n      if (controlRange && this.doc.selection && this.doc.selection.type === \"Control\") {\n        range = this.doc.selection.createRange();\n        if (range && range.length) {\n          return range.item(0);\n        }\n      }\n\n      selection = this.getSelection(this.doc);\n      if (selection.focusNode === selection.anchorNode) {\n        return selection.focusNode;\n      } else {\n        range = this.getRange(this.doc);\n        return range ? range.commonAncestorContainer : this.doc.body;\n      }\n    },\n\n    fixSelBorders: function() {\n      var range = this.getRange();\n      expandRangeToSurround(range);\n      this.setSelection(range);\n    },\n\n    getSelectedOwnNodes: function(controlRange) {\n      var selection,\n          ranges = this.getOwnRanges(),\n          ownNodes = [];\n\n      for (var i = 0, maxi = ranges.length; i < maxi; i++) {\n          ownNodes.push(ranges[i].commonAncestorContainer || this.doc.body);\n      }\n      return ownNodes;\n    },\n\n    findNodesInSelection: function(nodeTypes) {\n      var ranges = this.getOwnRanges(),\n          nodes = [], curNodes;\n      for (var i = 0, maxi = ranges.length; i < maxi; i++) {\n        curNodes = ranges[i].getNodes([1], function(node) {\n            return wysihtml5.lang.array(nodeTypes).contains(node.nodeName);\n        });\n        nodes = nodes.concat(curNodes);\n      }\n      return nodes;\n    },\n\n    containsUneditable: function() {\n      var uneditables = this.getOwnUneditables(),\n          selection = this.getSelection();\n\n      for (var i = 0, maxi = uneditables.length; i < maxi; i++) {\n        if (selection.containsNode(uneditables[i])) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n\n    deleteContents: function()  {\n      var ranges = this.getOwnRanges();\n      for (var i = ranges.length; i--;) {\n        ranges[i].deleteContents();\n      }\n      this.setSelection(ranges[0]);\n    },\n\n    getPreviousNode: function(node, ignoreEmpty) {\n      if (!node) {\n        var selection = this.getSelection();\n        node = selection.anchorNode;\n      }\n\n      if (node === this.contain) {\n          return false;\n      }\n\n      var ret = node.previousSibling,\n          parent;\n\n      if (ret === this.contain) {\n          return false;\n      }\n\n      if (ret && ret.nodeType !== 3 && ret.nodeType !== 1) {\n         // do not count comments and other node types\n         ret = this.getPreviousNode(ret, ignoreEmpty);\n      } else if (ret && ret.nodeType === 3 && (/^\\s*$/).test(ret.textContent)) {\n        // do not count empty textnodes as previus nodes\n        ret = this.getPreviousNode(ret, ignoreEmpty);\n      } else if (ignoreEmpty && ret && ret.nodeType === 1 && !wysihtml5.lang.array([\"BR\", \"HR\", \"IMG\"]).contains(ret.nodeName) && (/^[\\s]*$/).test(ret.innerHTML)) {\n        // Do not count empty nodes if param set.\n        // Contenteditable tends to bypass and delete these silently when deleting with caret\n        ret = this.getPreviousNode(ret, ignoreEmpty);\n      } else if (!ret && node !== this.contain) {\n        parent = node.parentNode;\n        if (parent !== this.contain) {\n            ret = this.getPreviousNode(parent, ignoreEmpty);\n        }\n      }\n\n      return (ret !== this.contain) ? ret : false;\n    },\n\n    getSelectionParentsByTag: function(tagName) {\n      var nodes = this.getSelectedOwnNodes(),\n          curEl, parents = [];\n\n      for (var i = 0, maxi = nodes.length; i < maxi; i++) {\n        curEl = (nodes[i].nodeName &&  nodes[i].nodeName === 'LI') ? nodes[i] : wysihtml5.dom.getParentElement(nodes[i], { nodeName: ['LI']}, false, this.contain);\n        if (curEl) {\n          parents.push(curEl);\n        }\n      }\n      return (parents.length) ? parents : null;\n    },\n\n    getRangeToNodeEnd: function() {\n      if (this.isCollapsed()) {\n        var range = this.getRange(),\n            sNode = range.startContainer,\n            pos = range.startOffset,\n            lastR = rangy.createRange(this.doc);\n\n        lastR.selectNodeContents(sNode);\n        lastR.setStart(sNode, pos);\n        return lastR;\n      }\n    },\n\n    caretIsLastInSelection: function() {\n      var r = rangy.createRange(this.doc),\n          s = this.getSelection(),\n          endc = this.getRangeToNodeEnd().cloneContents(),\n          endtxt = endc.textContent;\n\n      return (/^\\s*$/).test(endtxt);\n    },\n\n    caretIsFirstInSelection: function() {\n      var r = rangy.createRange(this.doc),\n          s = this.getSelection(),\n          range = this.getRange(),\n          startNode = range.startContainer;\n      \n      if (startNode.nodeType === wysihtml5.TEXT_NODE) {\n        return this.isCollapsed() && (startNode.nodeType === wysihtml5.TEXT_NODE && (/^\\s*$/).test(startNode.data.substr(0,range.startOffset)));\n      } else {\n        r.selectNodeContents(this.getRange().commonAncestorContainer);\n        r.collapse(true);\n        return (this.isCollapsed() && (r.startContainer === s.anchorNode || r.endContainer === s.anchorNode) && r.startOffset === s.anchorOffset);\n      }\n    },\n\n    caretIsInTheBeginnig: function(ofNode) {\n        var selection = this.getSelection(),\n            node = selection.anchorNode,\n            offset = selection.anchorOffset;\n        if (ofNode) {\n          return (offset === 0 && (node.nodeName && node.nodeName === ofNode.toUpperCase() || wysihtml5.dom.getParentElement(node.parentNode, { nodeName: ofNode }, 1)));\n        } else {\n          return (offset === 0 && !this.getPreviousNode(node, true));\n        }\n    },\n\n    caretIsBeforeUneditable: function() {\n      var selection = this.getSelection(),\n          node = selection.anchorNode,\n          offset = selection.anchorOffset;\n\n      if (offset === 0) {\n        var prevNode = this.getPreviousNode(node, true);\n        if (prevNode) {\n          var uneditables = this.getOwnUneditables();\n          for (var i = 0, maxi = uneditables.length; i < maxi; i++) {\n            if (prevNode === uneditables[i]) {\n              return uneditables[i];\n            }\n          }\n        }\n      }\n      return false;\n    },\n\n    // TODO: Figure out a method from following 2 that would work universally\n    executeAndRestoreRangy: function(method, restoreScrollPosition) {\n      var win = this.doc.defaultView || this.doc.parentWindow,\n          sel = rangy.saveSelection(win);\n\n      if (!sel) {\n        method();\n      } else {\n        try {\n          method();\n        } catch(e) {\n          setTimeout(function() { throw e; }, 0);\n        }\n      }\n      rangy.restoreSelection(sel);\n    },\n\n    // TODO: has problems in chrome 12. investigate block level and uneditable area inbetween\n    executeAndRestore: function(method, restoreScrollPosition) {\n      var body                  = this.doc.body,\n          oldScrollTop          = restoreScrollPosition && body.scrollTop,\n          oldScrollLeft         = restoreScrollPosition && body.scrollLeft,\n          className             = \"_wysihtml5-temp-placeholder\",\n          placeholderHtml       = '<span class=\"' + className + '\">' + wysihtml5.INVISIBLE_SPACE + '</span>',\n          range                 = this.getRange(true),\n          caretPlaceholder,\n          newCaretPlaceholder,\n          nextSibling, prevSibling,\n          node, node2, range2,\n          newRange;\n\n      // Nothing selected, execute and say goodbye\n      if (!range) {\n        method(body, body);\n        return;\n      }\n\n      if (!range.collapsed) {\n        range2 = range.cloneRange();\n        node2 = range2.createContextualFragment(placeholderHtml);\n        range2.collapse(false);\n        range2.insertNode(node2);\n        range2.detach();\n      }\n\n      node = range.createContextualFragment(placeholderHtml);\n      range.insertNode(node);\n\n      if (node2) {\n        caretPlaceholder = this.contain.querySelectorAll(\".\" + className);\n        range.setStartBefore(caretPlaceholder[0]);\n        range.setEndAfter(caretPlaceholder[caretPlaceholder.length -1]);\n      }\n      this.setSelection(range);\n\n      // Make sure that a potential error doesn't cause our placeholder element to be left as a placeholder\n      try {\n        method(range.startContainer, range.endContainer);\n      } catch(e) {\n        setTimeout(function() { throw e; }, 0);\n      }\n      caretPlaceholder = this.contain.querySelectorAll(\".\" + className);\n      if (caretPlaceholder && caretPlaceholder.length) {\n        newRange = rangy.createRange(this.doc);\n        nextSibling = caretPlaceholder[0].nextSibling;\n        if (caretPlaceholder.length > 1) {\n          prevSibling = caretPlaceholder[caretPlaceholder.length -1].previousSibling;\n        }\n        if (prevSibling && nextSibling) {\n          newRange.setStartBefore(nextSibling);\n          newRange.setEndAfter(prevSibling);\n        } else {\n          newCaretPlaceholder = this.doc.createTextNode(wysihtml5.INVISIBLE_SPACE);\n          dom.insert(newCaretPlaceholder).after(caretPlaceholder[0]);\n          newRange.setStartBefore(newCaretPlaceholder);\n          newRange.setEndAfter(newCaretPlaceholder);\n        }\n        this.setSelection(newRange);\n        for (var i = caretPlaceholder.length; i--;) {\n         caretPlaceholder[i].parentNode.removeChild(caretPlaceholder[i]);\n        }\n\n      } else {\n        // fallback for when all hell breaks loose\n        this.contain.focus();\n      }\n\n      if (restoreScrollPosition) {\n        body.scrollTop  = oldScrollTop;\n        body.scrollLeft = oldScrollLeft;\n      }\n\n      // Remove it again, just to make sure that the placeholder is definitely out of the dom tree\n      try {\n        caretPlaceholder.parentNode.removeChild(caretPlaceholder);\n      } catch(e2) {}\n    },\n\n    set: function(node, offset) {\n      var newRange = rangy.createRange(this.doc);\n      newRange.setStart(node, offset || 0);\n      this.setSelection(newRange);\n    },\n\n    /**\n     * Insert html at the caret position and move the cursor after the inserted html\n     *\n     * @param {String} html HTML string to insert\n     * @example\n     *    selection.insertHTML(\"<p>foobar</p>\");\n     */\n    insertHTML: function(html) {\n      var range     = rangy.createRange(this.doc),\n          node = this.doc.createElement('DIV'),\n          fragment = this.doc.createDocumentFragment(),\n          lastChild;\n\n      node.innerHTML = html;\n      lastChild = node.lastChild;\n\n      while (node.firstChild) {\n        fragment.appendChild(node.firstChild);\n      }\n      this.insertNode(fragment);\n\n      if (lastChild) {\n        this.setAfter(lastChild);\n      }\n    },\n\n    /**\n     * Insert a node at the caret position and move the cursor behind it\n     *\n     * @param {Object} node HTML string to insert\n     * @example\n     *    selection.insertNode(document.createTextNode(\"foobar\"));\n     */\n    insertNode: function(node) {\n      var range = this.getRange();\n      if (range) {\n        range.insertNode(node);\n      }\n    },\n\n    /**\n     * Wraps current selection with the given node\n     *\n     * @param {Object} node The node to surround the selected elements with\n     */\n    surround: function(nodeOptions) {\n      var ranges = this.getOwnRanges(),\n          node, nodes = [];\n      if (ranges.length == 0) {\n        return nodes;\n      }\n\n      for (var i = ranges.length; i--;) {\n        node = this.doc.createElement(nodeOptions.nodeName);\n        nodes.push(node);\n        if (nodeOptions.className) {\n          node.className = nodeOptions.className;\n        }\n        if (nodeOptions.cssStyle) {\n          node.setAttribute('style', nodeOptions.cssStyle);\n        }\n        try {\n          // This only works when the range boundaries are not overlapping other elements\n          ranges[i].surroundContents(node);\n          this.selectNode(node);\n        } catch(e) {\n          // fallback\n          node.appendChild(ranges[i].extractContents());\n          ranges[i].insertNode(node);\n        }\n      }\n      return nodes;\n    },\n\n    deblockAndSurround: function(nodeOptions) {\n      var tempElement = this.doc.createElement('div'),\n          range = rangy.createRange(this.doc),\n          tempDivElements,\n          tempElements,\n          firstChild;\n\n      tempElement.className = nodeOptions.className;\n\n      this.composer.commands.exec(\"formatBlock\", nodeOptions.nodeName, nodeOptions.className);\n      tempDivElements = this.contain.querySelectorAll(\".\" + nodeOptions.className);\n      if (tempDivElements[0]) {\n        tempDivElements[0].parentNode.insertBefore(tempElement, tempDivElements[0]);\n\n        range.setStartBefore(tempDivElements[0]);\n        range.setEndAfter(tempDivElements[tempDivElements.length - 1]);\n        tempElements = range.extractContents();\n\n        while (tempElements.firstChild) {\n          firstChild = tempElements.firstChild;\n          if (firstChild.nodeType == 1 && wysihtml5.dom.hasClass(firstChild, nodeOptions.className)) {\n            while (firstChild.firstChild) {\n              tempElement.appendChild(firstChild.firstChild);\n            }\n            if (firstChild.nodeName !== \"BR\") { tempElement.appendChild(this.doc.createElement('br')); }\n            tempElements.removeChild(firstChild);\n          } else {\n            tempElement.appendChild(firstChild);\n          }\n        }\n      } else {\n        tempElement = null;\n      }\n\n      return tempElement;\n    },\n\n    /**\n     * Scroll the current caret position into the view\n     * FIXME: This is a bit hacky, there might be a smarter way of doing this\n     *\n     * @example\n     *    selection.scrollIntoView();\n     */\n    scrollIntoView: function() {\n      var doc           = this.doc,\n          tolerance     = 5, // px\n          hasScrollBars = doc.documentElement.scrollHeight > doc.documentElement.offsetHeight,\n          tempElement   = doc._wysihtml5ScrollIntoViewElement = doc._wysihtml5ScrollIntoViewElement || (function() {\n            var element = doc.createElement(\"span\");\n            // The element needs content in order to be able to calculate it's position properly\n            element.innerHTML = wysihtml5.INVISIBLE_SPACE;\n            return element;\n          })(),\n          offsetTop;\n\n      if (hasScrollBars) {\n        this.insertNode(tempElement);\n        offsetTop = _getCumulativeOffsetTop(tempElement);\n        tempElement.parentNode.removeChild(tempElement);\n        if (offsetTop >= (doc.body.scrollTop + doc.documentElement.offsetHeight - tolerance)) {\n          doc.body.scrollTop = offsetTop;\n        }\n      }\n    },\n\n    /**\n     * Select line where the caret is in\n     */\n    selectLine: function() {\n      if (wysihtml5.browser.supportsSelectionModify()) {\n        this._selectLine_W3C();\n      } else if (this.doc.selection) {\n        this._selectLine_MSIE();\n      }\n    },\n\n    /**\n     * See https://developer.mozilla.org/en/DOM/Selection/modify\n     */\n    _selectLine_W3C: function() {\n      var win       = this.doc.defaultView,\n          selection = win.getSelection();\n      selection.modify(\"move\", \"left\", \"lineboundary\");\n      selection.modify(\"extend\", \"right\", \"lineboundary\");\n    },\n\n    _selectLine_MSIE: function() {\n      var range       = this.doc.selection.createRange(),\n          rangeTop    = range.boundingTop,\n          scrollWidth = this.doc.body.scrollWidth,\n          rangeBottom,\n          rangeEnd,\n          measureNode,\n          i,\n          j;\n\n      if (!range.moveToPoint) {\n        return;\n      }\n\n      if (rangeTop === 0) {\n        // Don't know why, but when the selection ends at the end of a line\n        // range.boundingTop is 0\n        measureNode = this.doc.createElement(\"span\");\n        this.insertNode(measureNode);\n        rangeTop = measureNode.offsetTop;\n        measureNode.parentNode.removeChild(measureNode);\n      }\n\n      rangeTop += 1;\n\n      for (i=-10; i<scrollWidth; i+=2) {\n        try {\n          range.moveToPoint(i, rangeTop);\n          break;\n        } catch(e1) {}\n      }\n\n      // Investigate the following in order to handle multi line selections\n      // rangeBottom = rangeTop + (rangeHeight ? (rangeHeight - 1) : 0);\n      rangeBottom = rangeTop;\n      rangeEnd = this.doc.selection.createRange();\n      for (j=scrollWidth; j>=0; j--) {\n        try {\n          rangeEnd.moveToPoint(j, rangeBottom);\n          break;\n        } catch(e2) {}\n      }\n\n      range.setEndPoint(\"EndToEnd\", rangeEnd);\n      range.select();\n    },\n\n    getText: function() {\n      var selection = this.getSelection();\n      return selection ? selection.toString() : \"\";\n    },\n\n    getNodes: function(nodeType, filter) {\n      var range = this.getRange();\n      if (range) {\n        return range.getNodes([nodeType], filter);\n      } else {\n        return [];\n      }\n    },\n\n    fixRangeOverflow: function(range) {\n      if (this.contain && this.contain.firstChild && range) {\n        var containment = range.compareNode(this.contain);\n        if (containment !== 2) {\n          if (containment === 1) {\n            range.setStartBefore(this.contain.firstChild);\n          }\n          if (containment === 0) {\n            range.setEndAfter(this.contain.lastChild);\n          }\n          if (containment === 3) {\n            range.setStartBefore(this.contain.firstChild);\n            range.setEndAfter(this.contain.lastChild);\n          }\n        } else if (this._detectInlineRangeProblems(range)) {\n          var previousElementSibling = range.endContainer.previousElementSibling;\n          if (previousElementSibling) {\n            range.setEnd(previousElementSibling, this._endOffsetForNode(previousElementSibling));\n          }\n        }\n      }\n    },\n\n    _endOffsetForNode: function(node) {\n      var range = document.createRange();\n      range.selectNodeContents(node);\n      return range.endOffset;\n    },\n\n    _detectInlineRangeProblems: function(range) {\n      var position = dom.compareDocumentPosition(range.startContainer, range.endContainer);\n      return (\n        range.endOffset == 0 &&\n        position & 4 //Node.DOCUMENT_POSITION_FOLLOWING\n      );\n    },\n\n    getRange: function(dontFix) {\n      var selection = this.getSelection(),\n          range = selection && selection.rangeCount && selection.getRangeAt(0);\n\n      if (dontFix !== true) {\n        this.fixRangeOverflow(range);\n      }\n\n      return range;\n    },\n\n    getOwnUneditables: function() {\n      var allUneditables = dom.query(this.contain, '.' + this.unselectableClass),\n          deepUneditables = dom.query(allUneditables, '.' + this.unselectableClass);\n\n      return wysihtml5.lang.array(allUneditables).without(deepUneditables);\n    },\n\n    // Returns an array of ranges that belong only to this editable\n    // Needed as uneditable block in contenteditabel can split range into pieces\n    // If manipulating content reverse loop is usually needed as manipulation can shift subsequent ranges\n    getOwnRanges: function()  {\n      var ranges = [],\n          r = this.getRange(),\n          tmpRanges;\n\n      if (r) { ranges.push(r); }\n\n      if (this.unselectableClass && this.contain && r) {\n          var uneditables = this.getOwnUneditables(),\n              tmpRange;\n          if (uneditables.length > 0) {\n            for (var i = 0, imax = uneditables.length; i < imax; i++) {\n              tmpRanges = [];\n              for (var j = 0, jmax = ranges.length; j < jmax; j++) {\n                if (ranges[j]) {\n                  switch (ranges[j].compareNode(uneditables[i])) {\n                    case 2:\n                      // all selection inside uneditable. remove\n                    break;\n                    case 3:\n                      //section begins before and ends after uneditable. spilt\n                      tmpRange = ranges[j].cloneRange();\n                      tmpRange.setEndBefore(uneditables[i]);\n                      tmpRanges.push(tmpRange);\n\n                      tmpRange = ranges[j].cloneRange();\n                      tmpRange.setStartAfter(uneditables[i]);\n                      tmpRanges.push(tmpRange);\n                    break;\n                    default:\n                      // in all other cases uneditable does not touch selection. dont modify\n                      tmpRanges.push(ranges[j]);\n                  }\n                }\n                ranges = tmpRanges;\n              }\n            }\n          }\n      }\n      return ranges;\n    },\n\n    getSelection: function() {\n      return rangy.getSelection(this.doc.defaultView || this.doc.parentWindow);\n    },\n\n    setSelection: function(range) {\n      var win       = this.doc.defaultView || this.doc.parentWindow,\n          selection = rangy.getSelection(win);\n      return selection.setSingleRange(range);\n    },\n\n    createRange: function() {\n      return rangy.createRange(this.doc);\n    },\n\n    isCollapsed: function() {\n        return this.getSelection().isCollapsed;\n    },\n\n    getHtml: function() {\n      return this.getSelection().toHtml();\n    },\n\n    isEndToEndInNode: function(nodeNames) {\n      var range = this.getRange(),\n          parentElement = range.commonAncestorContainer,\n          startNode = range.startContainer,\n          endNode = range.endContainer;\n\n\n        if (parentElement.nodeType === wysihtml5.TEXT_NODE) {\n          parentElement = parentElement.parentNode;\n        }\n\n        if (startNode.nodeType === wysihtml5.TEXT_NODE && !(/^\\s*$/).test(startNode.data.substr(range.startOffset))) {\n          return false;\n        }\n\n        if (endNode.nodeType === wysihtml5.TEXT_NODE && !(/^\\s*$/).test(endNode.data.substr(range.endOffset))) {\n          return false;\n        }\n\n        while (startNode && startNode !== parentElement) {\n          if (startNode.nodeType !== wysihtml5.TEXT_NODE && !wysihtml5.dom.contains(parentElement, startNode)) {\n            return false;\n          }\n          if (wysihtml5.dom.domNode(startNode).prev({ignoreBlankTexts: true})) {\n            return false;\n          }\n          startNode = startNode.parentNode;\n        }\n\n        while (endNode && endNode !== parentElement) {\n          if (endNode.nodeType !== wysihtml5.TEXT_NODE && !wysihtml5.dom.contains(parentElement, endNode)) {\n            return false;\n          }\n          if (wysihtml5.dom.domNode(endNode).next({ignoreBlankTexts: true})) {\n            return false;\n          }\n          endNode = endNode.parentNode;\n        }\n\n        return (wysihtml5.lang.array(nodeNames).contains(parentElement.nodeName)) ? parentElement : false;\n    },\n\n    deselect: function() {\n      var sel = this.getSelection();\n      sel && sel.removeAllRanges();\n    }\n  });\n\n})(wysihtml5);\n;/**\n * Inspired by the rangy CSS Applier module written by Tim Down and licensed under the MIT license.\n * http://code.google.com/p/rangy/\n *\n * changed in order to be able ...\n *    - to use custom tags\n *    - to detect and replace similar css classes via reg exp\n */\n(function(wysihtml5, rangy) {\n  var defaultTagName = \"span\";\n\n  var REG_EXP_WHITE_SPACE = /\\s+/g;\n\n  function hasClass(el, cssClass, regExp) {\n    if (!el.className) {\n      return false;\n    }\n\n    var matchingClassNames = el.className.match(regExp) || [];\n    return matchingClassNames[matchingClassNames.length - 1] === cssClass;\n  }\n\n  function hasStyleAttr(el, regExp) {\n    if (!el.getAttribute || !el.getAttribute('style')) {\n      return false;\n    }\n    var matchingStyles = el.getAttribute('style').match(regExp);\n    return  (el.getAttribute('style').match(regExp)) ? true : false;\n  }\n\n  function addStyle(el, cssStyle, regExp) {\n    if (el.getAttribute('style')) {\n      removeStyle(el, regExp);\n      if (el.getAttribute('style') && !(/^\\s*$/).test(el.getAttribute('style'))) {\n        el.setAttribute('style', cssStyle + \";\" + el.getAttribute('style'));\n      } else {\n        el.setAttribute('style', cssStyle);\n      }\n    } else {\n      el.setAttribute('style', cssStyle);\n    }\n  }\n\n  function addClass(el, cssClass, regExp) {\n    if (el.className) {\n      removeClass(el, regExp);\n      el.className += \" \" + cssClass;\n    } else {\n      el.className = cssClass;\n    }\n  }\n\n  function removeClass(el, regExp) {\n    if (el.className) {\n      el.className = el.className.replace(regExp, \"\");\n    }\n  }\n\n  function removeStyle(el, regExp) {\n    var s,\n        s2 = [];\n    if (el.getAttribute('style')) {\n      s = el.getAttribute('style').split(';');\n      for (var i = s.length; i--;) {\n        if (!s[i].match(regExp) && !(/^\\s*$/).test(s[i])) {\n          s2.push(s[i]);\n        }\n      }\n      if (s2.length) {\n        el.setAttribute('style', s2.join(';'));\n      } else {\n        el.removeAttribute('style');\n      }\n    }\n  }\n\n  function getMatchingStyleRegexp(el, style) {\n    var regexes = [],\n        sSplit = style.split(';'),\n        elStyle = el.getAttribute('style');\n\n    if (elStyle) {\n      elStyle = elStyle.replace(/\\s/gi, '').toLowerCase();\n      regexes.push(new RegExp(\"(^|\\\\s|;)\" + style.replace(/\\s/gi, '').replace(/([\\(\\)])/gi, \"\\\\$1\").toLowerCase().replace(\";\", \";?\").replace(/rgb\\\\\\((\\d+),(\\d+),(\\d+)\\\\\\)/gi, \"\\\\s?rgb\\\\($1,\\\\s?$2,\\\\s?$3\\\\)\"), \"gi\"));\n\n      for (var i = sSplit.length; i-- > 0;) {\n        if (!(/^\\s*$/).test(sSplit[i])) {\n          regexes.push(new RegExp(\"(^|\\\\s|;)\" + sSplit[i].replace(/\\s/gi, '').replace(/([\\(\\)])/gi, \"\\\\$1\").toLowerCase().replace(\";\", \";?\").replace(/rgb\\\\\\((\\d+),(\\d+),(\\d+)\\\\\\)/gi, \"\\\\s?rgb\\\\($1,\\\\s?$2,\\\\s?$3\\\\)\"), \"gi\"));\n        }\n      }\n      for (var j = 0, jmax = regexes.length; j < jmax; j++) {\n        if (elStyle.match(regexes[j])) {\n          return regexes[j];\n        }\n      }\n    }\n\n    return false;\n  }\n\n  function isMatchingAllready(node, tags, style, className) {\n    if (style) {\n      return getMatchingStyleRegexp(node, style);\n    } else if (className) {\n      return wysihtml5.dom.hasClass(node, className);\n    } else {\n      return rangy.dom.arrayContains(tags, node.tagName.toLowerCase());\n    }\n  }\n\n  function areMatchingAllready(nodes, tags, style, className) {\n    for (var i = nodes.length; i--;) {\n      if (!isMatchingAllready(nodes[i], tags, style, className)) {\n        return false;\n      }\n    }\n    return nodes.length ? true : false;\n  }\n\n  function removeOrChangeStyle(el, style, regExp) {\n\n    var exactRegex = getMatchingStyleRegexp(el, style);\n    if (exactRegex) {\n      // adding same style value on property again removes style\n      removeStyle(el, exactRegex);\n      return \"remove\";\n    } else {\n      // adding new style value changes value\n      addStyle(el, style, regExp);\n      return \"change\";\n    }\n  }\n\n  function hasSameClasses(el1, el2) {\n    return el1.className.replace(REG_EXP_WHITE_SPACE, \" \") == el2.className.replace(REG_EXP_WHITE_SPACE, \" \");\n  }\n\n  function replaceWithOwnChildren(el) {\n    var parent = el.parentNode;\n    while (el.firstChild) {\n      parent.insertBefore(el.firstChild, el);\n    }\n    parent.removeChild(el);\n  }\n\n  function elementsHaveSameNonClassAttributes(el1, el2) {\n    if (el1.attributes.length != el2.attributes.length) {\n      return false;\n    }\n    for (var i = 0, len = el1.attributes.length, attr1, attr2, name; i < len; ++i) {\n      attr1 = el1.attributes[i];\n      name = attr1.name;\n      if (name != \"class\") {\n        attr2 = el2.attributes.getNamedItem(name);\n        if (attr1.specified != attr2.specified) {\n          return false;\n        }\n        if (attr1.specified && attr1.nodeValue !== attr2.nodeValue) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n\n  function isSplitPoint(node, offset) {\n    if (rangy.dom.isCharacterDataNode(node)) {\n      if (offset == 0) {\n        return !!node.previousSibling;\n      } else if (offset == node.length) {\n        return !!node.nextSibling;\n      } else {\n        return true;\n      }\n    }\n\n    return offset > 0 && offset < node.childNodes.length;\n  }\n\n  function splitNodeAt(node, descendantNode, descendantOffset, container) {\n    var newNode;\n    if (rangy.dom.isCharacterDataNode(descendantNode)) {\n      if (descendantOffset == 0) {\n        descendantOffset = rangy.dom.getNodeIndex(descendantNode);\n        descendantNode = descendantNode.parentNode;\n      } else if (descendantOffset == descendantNode.length) {\n        descendantOffset = rangy.dom.getNodeIndex(descendantNode) + 1;\n        descendantNode = descendantNode.parentNode;\n      } else {\n        newNode = rangy.dom.splitDataNode(descendantNode, descendantOffset);\n      }\n    }\n    if (!newNode) {\n      if (!container || descendantNode !== container) {\n\n        newNode = descendantNode.cloneNode(false);\n        if (newNode.id) {\n          newNode.removeAttribute(\"id\");\n        }\n        var child;\n        while ((child = descendantNode.childNodes[descendantOffset])) {\n          newNode.appendChild(child);\n        }\n        rangy.dom.insertAfter(newNode, descendantNode);\n\n      }\n    }\n    return (descendantNode == node) ? newNode :  splitNodeAt(node, newNode.parentNode, rangy.dom.getNodeIndex(newNode), container);\n  }\n\n  function Merge(firstNode) {\n    this.isElementMerge = (firstNode.nodeType == wysihtml5.ELEMENT_NODE);\n    this.firstTextNode = this.isElementMerge ? firstNode.lastChild : firstNode;\n    this.textNodes = [this.firstTextNode];\n  }\n\n  Merge.prototype = {\n    doMerge: function() {\n      var textBits = [], textNode, parent, text;\n      for (var i = 0, len = this.textNodes.length; i < len; ++i) {\n        textNode = this.textNodes[i];\n        parent = textNode.parentNode;\n        textBits[i] = textNode.data;\n        if (i) {\n          parent.removeChild(textNode);\n          if (!parent.hasChildNodes()) {\n            parent.parentNode.removeChild(parent);\n          }\n        }\n      }\n      this.firstTextNode.data = text = textBits.join(\"\");\n      return text;\n    },\n\n    getLength: function() {\n      var i = this.textNodes.length, len = 0;\n      while (i--) {\n        len += this.textNodes[i].length;\n      }\n      return len;\n    },\n\n    toString: function() {\n      var textBits = [];\n      for (var i = 0, len = this.textNodes.length; i < len; ++i) {\n        textBits[i] = \"'\" + this.textNodes[i].data + \"'\";\n      }\n      return \"[Merge(\" + textBits.join(\",\") + \")]\";\n    }\n  };\n\n  function HTMLApplier(tagNames, cssClass, similarClassRegExp, normalize, cssStyle, similarStyleRegExp, container) {\n    this.tagNames = tagNames || [defaultTagName];\n    this.cssClass = cssClass || ((cssClass === false) ? false : \"\");\n    this.similarClassRegExp = similarClassRegExp;\n    this.cssStyle = cssStyle || \"\";\n    this.similarStyleRegExp = similarStyleRegExp;\n    this.normalize = normalize;\n    this.applyToAnyTagName = false;\n    this.container = container;\n  }\n\n  HTMLApplier.prototype = {\n    getAncestorWithClass: function(node) {\n      var cssClassMatch;\n      while (node) {\n        cssClassMatch = this.cssClass ? hasClass(node, this.cssClass, this.similarClassRegExp) : (this.cssStyle !== \"\") ? false : true;\n        if (node.nodeType == wysihtml5.ELEMENT_NODE && node.getAttribute(\"contenteditable\") != \"false\" &&  rangy.dom.arrayContains(this.tagNames, node.tagName.toLowerCase()) && cssClassMatch) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return false;\n    },\n\n    // returns parents of node with given style attribute\n    getAncestorWithStyle: function(node) {\n      var cssStyleMatch;\n      while (node) {\n        cssStyleMatch = this.cssStyle ? hasStyleAttr(node, this.similarStyleRegExp) : false;\n\n        if (node.nodeType == wysihtml5.ELEMENT_NODE && node.getAttribute(\"contenteditable\") != \"false\" && rangy.dom.arrayContains(this.tagNames, node.tagName.toLowerCase()) && cssStyleMatch) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return false;\n    },\n\n    getMatchingAncestor: function(node) {\n      var ancestor = this.getAncestorWithClass(node),\n          matchType = false;\n\n      if (!ancestor) {\n        ancestor = this.getAncestorWithStyle(node);\n        if (ancestor) {\n          matchType = \"style\";\n        }\n      } else {\n        if (this.cssStyle) {\n          matchType = \"class\";\n        }\n      }\n\n      return {\n        \"element\": ancestor,\n        \"type\": matchType\n      };\n    },\n\n    // Normalizes nodes after applying a CSS class to a Range.\n    postApply: function(textNodes, range) {\n      var firstNode = textNodes[0], lastNode = textNodes[textNodes.length - 1];\n\n      var merges = [], currentMerge;\n\n      var rangeStartNode = firstNode, rangeEndNode = lastNode;\n      var rangeStartOffset = 0, rangeEndOffset = lastNode.length;\n\n      var textNode, precedingTextNode;\n\n      for (var i = 0, len = textNodes.length; i < len; ++i) {\n        textNode = textNodes[i];\n        precedingTextNode = null;\n        if (textNode && textNode.parentNode) {\n          precedingTextNode = this.getAdjacentMergeableTextNode(textNode.parentNode, false);\n        }\n        if (precedingTextNode) {\n          if (!currentMerge) {\n            currentMerge = new Merge(precedingTextNode);\n            merges.push(currentMerge);\n          }\n          currentMerge.textNodes.push(textNode);\n          if (textNode === firstNode) {\n            rangeStartNode = currentMerge.firstTextNode;\n            rangeStartOffset = rangeStartNode.length;\n          }\n          if (textNode === lastNode) {\n            rangeEndNode = currentMerge.firstTextNode;\n            rangeEndOffset = currentMerge.getLength();\n          }\n        } else {\n          currentMerge = null;\n        }\n      }\n      // Test whether the first node after the range needs merging\n      if(lastNode && lastNode.parentNode) {\n        var nextTextNode = this.getAdjacentMergeableTextNode(lastNode.parentNode, true);\n        if (nextTextNode) {\n          if (!currentMerge) {\n            currentMerge = new Merge(lastNode);\n            merges.push(currentMerge);\n          }\n          currentMerge.textNodes.push(nextTextNode);\n        }\n      }\n      // Do the merges\n      if (merges.length) {\n        for (i = 0, len = merges.length; i < len; ++i) {\n          merges[i].doMerge();\n        }\n        // Set the range boundaries\n        range.setStart(rangeStartNode, rangeStartOffset);\n        range.setEnd(rangeEndNode, rangeEndOffset);\n      }\n    },\n\n    getAdjacentMergeableTextNode: function(node, forward) {\n        var isTextNode = (node.nodeType == wysihtml5.TEXT_NODE);\n        var el = isTextNode ? node.parentNode : node;\n        var adjacentNode;\n        var propName = forward ? \"nextSibling\" : \"previousSibling\";\n        if (isTextNode) {\n          // Can merge if the node's previous/next sibling is a text node\n          adjacentNode = node[propName];\n          if (adjacentNode && adjacentNode.nodeType == wysihtml5.TEXT_NODE) {\n            return adjacentNode;\n          }\n        } else {\n          // Compare element with its sibling\n          adjacentNode = el[propName];\n          if (adjacentNode && this.areElementsMergeable(node, adjacentNode)) {\n            return adjacentNode[forward ? \"firstChild\" : \"lastChild\"];\n          }\n        }\n        return null;\n    },\n\n    areElementsMergeable: function(el1, el2) {\n      return rangy.dom.arrayContains(this.tagNames, (el1.tagName || \"\").toLowerCase())\n        && rangy.dom.arrayContains(this.tagNames, (el2.tagName || \"\").toLowerCase())\n        && hasSameClasses(el1, el2)\n        && elementsHaveSameNonClassAttributes(el1, el2);\n    },\n\n    createContainer: function(doc) {\n      var el = doc.createElement(this.tagNames[0]);\n      if (this.cssClass) {\n        el.className = this.cssClass;\n      }\n      if (this.cssStyle) {\n        el.setAttribute('style', this.cssStyle);\n      }\n      return el;\n    },\n\n    applyToTextNode: function(textNode) {\n      var parent = textNode.parentNode;\n      if (parent.childNodes.length == 1 && rangy.dom.arrayContains(this.tagNames, parent.tagName.toLowerCase())) {\n\n        if (this.cssClass) {\n          addClass(parent, this.cssClass, this.similarClassRegExp);\n        }\n        if (this.cssStyle) {\n          addStyle(parent, this.cssStyle, this.similarStyleRegExp);\n        }\n      } else {\n        var el = this.createContainer(rangy.dom.getDocument(textNode));\n        textNode.parentNode.insertBefore(el, textNode);\n        el.appendChild(textNode);\n      }\n    },\n\n    isRemovable: function(el) {\n      return rangy.dom.arrayContains(this.tagNames, el.tagName.toLowerCase()) &&\n              wysihtml5.lang.string(el.className).trim() === \"\" &&\n              (\n                !el.getAttribute('style') ||\n                wysihtml5.lang.string(el.getAttribute('style')).trim() === \"\"\n              );\n    },\n\n    undoToTextNode: function(textNode, range, ancestorWithClass, ancestorWithStyle) {\n      var styleMode = (ancestorWithClass) ? false : true,\n          ancestor = ancestorWithClass || ancestorWithStyle,\n          styleChanged = false;\n      if (!range.containsNode(ancestor)) {\n        // Split out the portion of the ancestor from which we can remove the CSS class\n        var ancestorRange = range.cloneRange();\n            ancestorRange.selectNode(ancestor);\n\n        if (ancestorRange.isPointInRange(range.endContainer, range.endOffset) && isSplitPoint(range.endContainer, range.endOffset)) {\n            splitNodeAt(ancestor, range.endContainer, range.endOffset, this.container);\n            range.setEndAfter(ancestor);\n        }\n        if (ancestorRange.isPointInRange(range.startContainer, range.startOffset) && isSplitPoint(range.startContainer, range.startOffset)) {\n            ancestor = splitNodeAt(ancestor, range.startContainer, range.startOffset, this.container);\n        }\n      }\n\n      if (!styleMode && this.similarClassRegExp) {\n        removeClass(ancestor, this.similarClassRegExp);\n      }\n\n      if (styleMode && this.similarStyleRegExp) {\n        styleChanged = (removeOrChangeStyle(ancestor, this.cssStyle, this.similarStyleRegExp) === \"change\");\n      }\n      if (this.isRemovable(ancestor) && !styleChanged) {\n        replaceWithOwnChildren(ancestor);\n      }\n    },\n\n    applyToRange: function(range) {\n        var textNodes;\n        for (var ri = range.length; ri--;) {\n            textNodes = range[ri].getNodes([wysihtml5.TEXT_NODE]);\n\n            if (!textNodes.length) {\n              try {\n                var node = this.createContainer(range[ri].endContainer.ownerDocument);\n                range[ri].surroundContents(node);\n                this.selectNode(range[ri], node);\n                return;\n              } catch(e) {}\n            }\n\n            range[ri].splitBoundaries();\n            textNodes = range[ri].getNodes([wysihtml5.TEXT_NODE]);\n            if (textNodes.length) {\n              var textNode;\n\n              for (var i = 0, len = textNodes.length; i < len; ++i) {\n                textNode = textNodes[i];\n                if (!this.getMatchingAncestor(textNode).element) {\n                  this.applyToTextNode(textNode);\n                }\n              }\n\n              range[ri].setStart(textNodes[0], 0);\n              textNode = textNodes[textNodes.length - 1];\n              range[ri].setEnd(textNode, textNode.length);\n\n              if (this.normalize) {\n                this.postApply(textNodes, range[ri]);\n              }\n            }\n\n        }\n    },\n\n    undoToRange: function(range) {\n      var textNodes, textNode, ancestorWithClass, ancestorWithStyle, ancestor;\n      for (var ri = range.length; ri--;) {\n\n          textNodes = range[ri].getNodes([wysihtml5.TEXT_NODE]);\n          if (textNodes.length) {\n            range[ri].splitBoundaries();\n            textNodes = range[ri].getNodes([wysihtml5.TEXT_NODE]);\n          } else {\n            var doc = range[ri].endContainer.ownerDocument,\n                node = doc.createTextNode(wysihtml5.INVISIBLE_SPACE);\n            range[ri].insertNode(node);\n            range[ri].selectNode(node);\n            textNodes = [node];\n          }\n\n          for (var i = 0, len = textNodes.length; i < len; ++i) {\n            if (range[ri].isValid()) {\n              textNode = textNodes[i];\n\n              ancestor = this.getMatchingAncestor(textNode);\n              if (ancestor.type === \"style\") {\n                this.undoToTextNode(textNode, range[ri], false, ancestor.element);\n              } else if (ancestor.element) {\n                this.undoToTextNode(textNode, range[ri], ancestor.element);\n              }\n            }\n          }\n\n          if (len == 1) {\n            this.selectNode(range[ri], textNodes[0]);\n          } else {\n            range[ri].setStart(textNodes[0], 0);\n            textNode = textNodes[textNodes.length - 1];\n            range[ri].setEnd(textNode, textNode.length);\n\n            if (this.normalize) {\n              this.postApply(textNodes, range[ri]);\n            }\n          }\n\n      }\n    },\n\n    selectNode: function(range, node) {\n      var isElement       = node.nodeType === wysihtml5.ELEMENT_NODE,\n          canHaveHTML     = \"canHaveHTML\" in node ? node.canHaveHTML : true,\n          content         = isElement ? node.innerHTML : node.data,\n          isEmpty         = (content === \"\" || content === wysihtml5.INVISIBLE_SPACE);\n\n      if (isEmpty && isElement && canHaveHTML) {\n        // Make sure that caret is visible in node by inserting a zero width no breaking space\n        try { node.innerHTML = wysihtml5.INVISIBLE_SPACE; } catch(e) {}\n      }\n      range.selectNodeContents(node);\n      if (isEmpty && isElement) {\n        range.collapse(false);\n      } else if (isEmpty) {\n        range.setStartAfter(node);\n        range.setEndAfter(node);\n      }\n    },\n\n    getTextSelectedByRange: function(textNode, range) {\n      var textRange = range.cloneRange();\n      textRange.selectNodeContents(textNode);\n\n      var intersectionRange = textRange.intersection(range);\n      var text = intersectionRange ? intersectionRange.toString() : \"\";\n      textRange.detach();\n\n      return text;\n    },\n\n    isAppliedToRange: function(range) {\n      var ancestors = [],\n          appliedType = \"full\",\n          ancestor, styleAncestor, textNodes;\n\n      for (var ri = range.length; ri--;) {\n\n        textNodes = range[ri].getNodes([wysihtml5.TEXT_NODE]);\n        if (!textNodes.length) {\n          ancestor = this.getMatchingAncestor(range[ri].startContainer).element;\n\n          return (ancestor) ? {\n            \"elements\": [ancestor],\n            \"coverage\": appliedType\n          } : false;\n        }\n\n        for (var i = 0, len = textNodes.length, selectedText; i < len; ++i) {\n          selectedText = this.getTextSelectedByRange(textNodes[i], range[ri]);\n          ancestor = this.getMatchingAncestor(textNodes[i]).element;\n          if (ancestor && selectedText != \"\") {\n            ancestors.push(ancestor);\n\n            if (wysihtml5.dom.getTextNodes(ancestor, true).length === 1) {\n              appliedType = \"full\";\n            } else if (appliedType === \"full\") {\n              appliedType = \"inline\";\n            }\n          } else if (!ancestor) {\n            appliedType = \"partial\";\n          }\n        }\n\n      }\n\n      return (ancestors.length) ? {\n        \"elements\": ancestors,\n        \"coverage\": appliedType\n      } : false;\n    },\n\n    toggleRange: function(range) {\n      var isApplied = this.isAppliedToRange(range),\n          parentsExactMatch;\n\n      if (isApplied) {\n        if (isApplied.coverage === \"full\") {\n          this.undoToRange(range);\n        } else if (isApplied.coverage === \"inline\") {\n          parentsExactMatch = areMatchingAllready(isApplied.elements, this.tagNames, this.cssStyle, this.cssClass);\n          this.undoToRange(range);\n          if (!parentsExactMatch) {\n            this.applyToRange(range);\n          }\n        } else {\n          // partial\n          if (!areMatchingAllready(isApplied.elements, this.tagNames, this.cssStyle, this.cssClass)) {\n            this.undoToRange(range);\n          }\n          this.applyToRange(range);\n        }\n      } else {\n        this.applyToRange(range);\n      }\n    }\n  };\n\n  wysihtml5.selection.HTMLApplier = HTMLApplier;\n\n})(wysihtml5, rangy);\n;/**\n * Rich Text Query/Formatting Commands\n *\n * @example\n *    var commands = new wysihtml5.Commands(editor);\n */\nwysihtml5.Commands = Base.extend(\n  /** @scope wysihtml5.Commands.prototype */ {\n  constructor: function(editor) {\n    this.editor   = editor;\n    this.composer = editor.composer;\n    this.doc      = this.composer.doc;\n  },\n\n  /**\n   * Check whether the browser supports the given command\n   *\n   * @param {String} command The command string which to check (eg. \"bold\", \"italic\", \"insertUnorderedList\")\n   * @example\n   *    commands.supports(\"createLink\");\n   */\n  support: function(command) {\n    return wysihtml5.browser.supportsCommand(this.doc, command);\n  },\n\n  /**\n   * Check whether the browser supports the given command\n   *\n   * @param {String} command The command string which to execute (eg. \"bold\", \"italic\", \"insertUnorderedList\")\n   * @param {String} [value] The command value parameter, needed for some commands (\"createLink\", \"insertImage\", ...), optional for commands that don't require one (\"bold\", \"underline\", ...)\n   * @example\n   *    commands.exec(\"insertImage\", \"http://a1.twimg.com/profile_images/113868655/schrei_twitter_reasonably_small.jpg\");\n   */\n  exec: function(command, value) {\n    var obj     = wysihtml5.commands[command],\n        args    = wysihtml5.lang.array(arguments).get(),\n        method  = obj && obj.exec,\n        result  = null;\n\n    this.editor.fire(\"beforecommand:composer\");\n\n    if (method) {\n      args.unshift(this.composer);\n      result = method.apply(obj, args);\n    } else {\n      try {\n        // try/catch for buggy firefox\n        result = this.doc.execCommand(command, false, value);\n      } catch(e) {}\n    }\n\n    this.editor.fire(\"aftercommand:composer\");\n    return result;\n  },\n\n  /**\n   * Check whether the current command is active\n   * If the caret is within a bold text, then calling this with command \"bold\" should return true\n   *\n   * @param {String} command The command string which to check (eg. \"bold\", \"italic\", \"insertUnorderedList\")\n   * @param {String} [commandValue] The command value parameter (eg. for \"insertImage\" the image src)\n   * @return {Boolean} Whether the command is active\n   * @example\n   *    var isCurrentSelectionBold = commands.state(\"bold\");\n   */\n  state: function(command, commandValue) {\n    var obj     = wysihtml5.commands[command],\n        args    = wysihtml5.lang.array(arguments).get(),\n        method  = obj && obj.state;\n    if (method) {\n      args.unshift(this.composer);\n      return method.apply(obj, args);\n    } else {\n      try {\n        // try/catch for buggy firefox\n        return this.doc.queryCommandState(command);\n      } catch(e) {\n        return false;\n      }\n    }\n  },\n\n  /* Get command state parsed value if command has stateValue parsing function */\n  stateValue: function(command) {\n    var obj     = wysihtml5.commands[command],\n        args    = wysihtml5.lang.array(arguments).get(),\n        method  = obj && obj.stateValue;\n    if (method) {\n      args.unshift(this.composer);\n      return method.apply(obj, args);\n    } else {\n      return false;\n    }\n  }\n});\n;wysihtml5.commands.bold = {\n  exec: function(composer, command) {\n    wysihtml5.commands.formatInline.execWithToggle(composer, command, \"b\");\n  },\n\n  state: function(composer, command) {\n    // element.ownerDocument.queryCommandState(\"bold\") results:\n    // firefox: only <b>\n    // chrome:  <b>, <strong>, <h1>, <h2>, ...\n    // ie:      <b>, <strong>\n    // opera:   <b>, <strong>\n    return wysihtml5.commands.formatInline.state(composer, command, \"b\");\n  }\n};\n\n;(function(wysihtml5) {\n  var undef,\n      NODE_NAME = \"A\",\n      dom       = wysihtml5.dom;\n\n  function _format(composer, attributes) {\n    var doc             = composer.doc,\n        tempClass       = \"_wysihtml5-temp-\" + (+new Date()),\n        tempClassRegExp = /non-matching-class/g,\n        i               = 0,\n        length,\n        anchors,\n        anchor,\n        hasElementChild,\n        isEmpty,\n        elementToSetCaretAfter,\n        textContent,\n        whiteSpace,\n        j;\n    wysihtml5.commands.formatInline.exec(composer, undef, NODE_NAME, tempClass, tempClassRegExp, undef, undef, true, true);\n    anchors = doc.querySelectorAll(NODE_NAME + \".\" + tempClass);\n    length  = anchors.length;\n    for (; i<length; i++) {\n      anchor = anchors[i];\n      anchor.removeAttribute(\"class\");\n      for (j in attributes) {\n        // Do not set attribute \"text\" as it is meant for setting string value if created link has no textual data\n        if (j !== \"text\") {\n          anchor.setAttribute(j, attributes[j]);\n        }\n      }\n    }\n\n    elementToSetCaretAfter = anchor;\n    if (length === 1) {\n      textContent = dom.getTextContent(anchor);\n      hasElementChild = !!anchor.querySelector(\"*\");\n      isEmpty = textContent === \"\" || textContent === wysihtml5.INVISIBLE_SPACE;\n      if (!hasElementChild && isEmpty) {\n        dom.setTextContent(anchor, attributes.text || anchor.href);\n        whiteSpace = doc.createTextNode(\" \");\n        composer.selection.setAfter(anchor);\n        dom.insert(whiteSpace).after(anchor);\n        elementToSetCaretAfter = whiteSpace;\n      }\n    }\n    composer.selection.setAfter(elementToSetCaretAfter);\n  }\n\n  // Changes attributes of links\n  function _changeLinks(composer, anchors, attributes) {\n    var oldAttrs;\n    for (var a = anchors.length; a--;) {\n\n      // Remove all old attributes\n      oldAttrs = anchors[a].attributes;\n      for (var oa = oldAttrs.length; oa--;) {\n        anchors[a].removeAttribute(oldAttrs.item(oa).name);\n      }\n\n      // Set new attributes\n      for (var j in attributes) {\n        if (attributes.hasOwnProperty(j)) {\n          anchors[a].setAttribute(j, attributes[j]);\n        }\n      }\n\n    }\n  }\n\n  wysihtml5.commands.createLink = {\n    /**\n     * TODO: Use HTMLApplier or formatInline here\n     *\n     * Turns selection into a link\n     * If selection is already a link, it just changes the attributes\n     *\n     * @example\n     *    // either ...\n     *    wysihtml5.commands.createLink.exec(composer, \"createLink\", \"http://www.google.de\");\n     *    // ... or ...\n     *    wysihtml5.commands.createLink.exec(composer, \"createLink\", { href: \"http://www.google.de\", target: \"_blank\" });\n     */\n    exec: function(composer, command, value) {\n      var anchors = this.state(composer, command);\n      if (anchors) {\n        // Selection contains links then change attributes of these links\n        composer.selection.executeAndRestore(function() {\n          _changeLinks(composer, anchors, value);\n        });\n      } else {\n        // Create links\n        value = typeof(value) === \"object\" ? value : { href: value };\n        _format(composer, value);\n      }\n    },\n\n    state: function(composer, command) {\n      return wysihtml5.commands.formatInline.state(composer, command, \"A\");\n    }\n  };\n})(wysihtml5);\n;(function(wysihtml5) {\n  var dom = wysihtml5.dom;\n\n  function _removeFormat(composer, anchors) {\n    var length  = anchors.length,\n        i       = 0,\n        anchor,\n        codeElement,\n        textContent;\n    for (; i<length; i++) {\n      anchor      = anchors[i];\n      codeElement = dom.getParentElement(anchor, { nodeName: \"code\" });\n      textContent = dom.getTextContent(anchor);\n\n      // if <a> contains url-like text content, rename it to <code> to prevent re-autolinking\n      // else replace <a> with its childNodes\n      if (textContent.match(dom.autoLink.URL_REG_EXP) && !codeElement) {\n        // <code> element is used to prevent later auto-linking of the content\n        codeElement = dom.renameElement(anchor, \"code\");\n      } else {\n        dom.replaceWithChildNodes(anchor);\n      }\n    }\n  }\n\n  wysihtml5.commands.removeLink = {\n    /*\n     * If selection is a link, it removes the link and wraps it with a <code> element\n     * The <code> element is needed to avoid auto linking\n     *\n     * @example\n     *    wysihtml5.commands.createLink.exec(composer, \"removeLink\");\n     */\n\n    exec: function(composer, command) {\n      var anchors = this.state(composer, command);\n      if (anchors) {\n        composer.selection.executeAndRestore(function() {\n          _removeFormat(composer, anchors);\n        });\n      }\n    },\n\n    state: function(composer, command) {\n      return wysihtml5.commands.formatInline.state(composer, command, \"A\");\n    }\n  };\n})(wysihtml5);\n;/**\n * document.execCommand(\"fontSize\") will create either inline styles (firefox, chrome) or use font tags\n * which we don't want\n * Instead we set a css class\n */\n(function(wysihtml5) {\n  var REG_EXP = /wysiwyg-font-size-[0-9a-z\\-]+/g;\n\n  wysihtml5.commands.fontSize = {\n    exec: function(composer, command, size) {\n        wysihtml5.commands.formatInline.execWithToggle(composer, command, \"span\", \"wysiwyg-font-size-\" + size, REG_EXP);\n    },\n\n    state: function(composer, command, size) {\n      return wysihtml5.commands.formatInline.state(composer, command, \"span\", \"wysiwyg-font-size-\" + size, REG_EXP);\n    }\n  };\n})(wysihtml5);\n;/* In case font size adjustment to any number defined by user is preferred, we cannot use classes and must use inline styles. */\n(function(wysihtml5) {\n  var REG_EXP = /(\\s|^)font-size\\s*:\\s*[^;\\s]+;?/gi;\n\n  wysihtml5.commands.fontSizeStyle = {\n    exec: function(composer, command, size) {\n      size = (typeof(size) == \"object\") ? size.size : size;\n      if (!(/^\\s*$/).test(size)) {\n        wysihtml5.commands.formatInline.execWithToggle(composer, command, \"span\", false, false, \"font-size:\" + size, REG_EXP);\n      }\n    },\n\n    state: function(composer, command, size) {\n      return wysihtml5.commands.formatInline.state(composer, command, \"span\", false, false, \"font-size\", REG_EXP);\n    },\n\n    stateValue: function(composer, command) {\n      var st = this.state(composer, command),\n          styleStr, fontsizeMatches,\n          val = false;\n\n      if (st && wysihtml5.lang.object(st).isArray()) {\n          st = st[0];\n      }\n      if (st) {\n        styleStr = st.getAttribute('style');\n        if (styleStr) {\n          return wysihtml5.quirks.styleParser.parseFontSize(styleStr);\n        }\n      }\n      return false;\n    }\n  };\n})(wysihtml5);\n;/**\n * document.execCommand(\"foreColor\") will create either inline styles (firefox, chrome) or use font tags\n * which we don't want\n * Instead we set a css class\n */\n(function(wysihtml5) {\n  var REG_EXP = /wysiwyg-color-[0-9a-z]+/g;\n\n  wysihtml5.commands.foreColor = {\n    exec: function(composer, command, color) {\n        wysihtml5.commands.formatInline.execWithToggle(composer, command, \"span\", \"wysiwyg-color-\" + color, REG_EXP);\n    },\n\n    state: function(composer, command, color) {\n      return wysihtml5.commands.formatInline.state(composer, command, \"span\", \"wysiwyg-color-\" + color, REG_EXP);\n    }\n  };\n})(wysihtml5);\n;/**\n * document.execCommand(\"foreColor\") will create either inline styles (firefox, chrome) or use font tags\n * which we don't want\n * Instead we set a css class\n */\n(function(wysihtml5) {\n  var REG_EXP = /(\\s|^)color\\s*:\\s*[^;\\s]+;?/gi;\n\n  wysihtml5.commands.foreColorStyle = {\n    exec: function(composer, command, color) {\n      var colorVals  = wysihtml5.quirks.styleParser.parseColor((typeof(color) == \"object\") ? \"color:\" + color.color : \"color:\" + color, \"color\"),\n          colString;\n\n      if (colorVals) {\n        colString = \"color: rgb(\" + colorVals[0] + ',' + colorVals[1] + ',' + colorVals[2] + ');';\n        if (colorVals[3] !== 1) {\n          colString += \"color: rgba(\" + colorVals[0] + ',' + colorVals[1] + ',' + colorVals[2] + ',' + colorVals[3] + ');';\n        }\n        wysihtml5.commands.formatInline.execWithToggle(composer, command, \"span\", false, false, colString, REG_EXP);\n      }\n    },\n\n    state: function(composer, command) {\n      return wysihtml5.commands.formatInline.state(composer, command, \"span\", false, false, \"color\", REG_EXP);\n    },\n\n    stateValue: function(composer, command, props) {\n      var st = this.state(composer, command),\n          colorStr;\n\n      if (st && wysihtml5.lang.object(st).isArray()) {\n        st = st[0];\n      }\n\n      if (st) {\n        colorStr = st.getAttribute('style');\n        if (colorStr) {\n          if (colorStr) {\n            val = wysihtml5.quirks.styleParser.parseColor(colorStr, \"color\");\n            return wysihtml5.quirks.styleParser.unparseColor(val, props);\n          }\n        }\n      }\n      return false;\n    }\n\n  };\n})(wysihtml5);\n;/* In case background adjustment to any color defined by user is preferred, we cannot use classes and must use inline styles. */\n(function(wysihtml5) {\n  var REG_EXP = /(\\s|^)background-color\\s*:\\s*[^;\\s]+;?/gi;\n\n  wysihtml5.commands.bgColorStyle = {\n    exec: function(composer, command, color) {\n      var colorVals  = wysihtml5.quirks.styleParser.parseColor((typeof(color) == \"object\") ? \"background-color:\" + color.color : \"background-color:\" + color, \"background-color\"),\n          colString;\n\n      if (colorVals) {\n        colString = \"background-color: rgb(\" + colorVals[0] + ',' + colorVals[1] + ',' + colorVals[2] + ');';\n        if (colorVals[3] !== 1) {\n          colString += \"background-color: rgba(\" + colorVals[0] + ',' + colorVals[1] + ',' + colorVals[2] + ',' + colorVals[3] + ');';\n        }\n        wysihtml5.commands.formatInline.execWithToggle(composer, command, \"span\", false, false, colString, REG_EXP);\n      }\n    },\n\n    state: function(composer, command) {\n      return wysihtml5.commands.formatInline.state(composer, command, \"span\", false, false, \"background-color\", REG_EXP);\n    },\n\n    stateValue: function(composer, command, props) {\n      var st = this.state(composer, command),\n          colorStr,\n          val = false;\n\n      if (st && wysihtml5.lang.object(st).isArray()) {\n        st = st[0];\n      }\n\n      if (st) {\n        colorStr = st.getAttribute('style');\n        if (colorStr) {\n          val = wysihtml5.quirks.styleParser.parseColor(colorStr, \"background-color\");\n          return wysihtml5.quirks.styleParser.unparseColor(val, props);\n        }\n      }\n      return false;\n    }\n\n  };\n})(wysihtml5);\n;(function(wysihtml5) {\n  var dom                     = wysihtml5.dom,\n      // Following elements are grouped\n      // when the caret is within a H1 and the H4 is invoked, the H1 should turn into H4\n      // instead of creating a H4 within a H1 which would result in semantically invalid html\n      BLOCK_ELEMENTS_GROUP    = [\"H1\", \"H2\", \"H3\", \"H4\", \"H5\", \"H6\", \"P\", \"PRE\", \"DIV\"];\n\n  /**\n   * Remove similiar classes (based on classRegExp)\n   * and add the desired class name\n   */\n  function _addClass(element, className, classRegExp) {\n    if (element.className) {\n      _removeClass(element, classRegExp);\n      element.className = wysihtml5.lang.string(element.className + \" \" + className).trim();\n    } else {\n      element.className = className;\n    }\n  }\n\n  function _addStyle(element, cssStyle, styleRegExp) {\n    _removeStyle(element, styleRegExp);\n    if (element.getAttribute('style')) {\n      element.setAttribute('style', wysihtml5.lang.string(element.getAttribute('style') + \" \" + cssStyle).trim());\n    } else {\n      element.setAttribute('style', cssStyle);\n    }\n  }\n\n  function _removeClass(element, classRegExp) {\n    var ret = classRegExp.test(element.className);\n    element.className = element.className.replace(classRegExp, \"\");\n    if (wysihtml5.lang.string(element.className).trim() == '') {\n        element.removeAttribute('class');\n    }\n    return ret;\n  }\n\n  function _removeStyle(element, styleRegExp) {\n    var ret = styleRegExp.test(element.getAttribute('style'));\n    element.setAttribute('style', (element.getAttribute('style') || \"\").replace(styleRegExp, \"\"));\n    if (wysihtml5.lang.string(element.getAttribute('style') || \"\").trim() == '') {\n      element.removeAttribute('style');\n    }\n    return ret;\n  }\n\n  function _removeLastChildIfLineBreak(node) {\n    var lastChild = node.lastChild;\n    if (lastChild && _isLineBreak(lastChild)) {\n      lastChild.parentNode.removeChild(lastChild);\n    }\n  }\n\n  function _isLineBreak(node) {\n    return node.nodeName === \"BR\";\n  }\n\n  /**\n   * Execute native query command\n   * and if necessary modify the inserted node's className\n   */\n  function _execCommand(doc, composer, command, nodeName, className) {\n    var ranges = composer.selection.getOwnRanges();\n    for (var i = ranges.length; i--;){\n      composer.selection.getSelection().removeAllRanges();\n      composer.selection.setSelection(ranges[i]);\n      if (className) {\n        var eventListener = dom.observe(doc, \"DOMNodeInserted\", function(event) {\n          var target = event.target,\n              displayStyle;\n          if (target.nodeType !== wysihtml5.ELEMENT_NODE) {\n            return;\n          }\n          displayStyle = dom.getStyle(\"display\").from(target);\n          if (displayStyle.substr(0, 6) !== \"inline\") {\n            // Make sure that only block elements receive the given class\n            target.className += \" \" + className;\n          }\n        });\n      }\n      doc.execCommand(command, false, nodeName);\n\n      if (eventListener) {\n        eventListener.stop();\n      }\n    }\n  }\n\n  function _selectionWrap(composer, options) {\n    if (composer.selection.isCollapsed()) {\n        composer.selection.selectLine();\n    }\n\n    var surroundedNodes = composer.selection.surround(options);\n    for (var i = 0, imax = surroundedNodes.length; i < imax; i++) {\n      wysihtml5.dom.lineBreaks(surroundedNodes[i]).remove();\n      _removeLastChildIfLineBreak(surroundedNodes[i]);\n    }\n\n    // rethink restoring selection\n    // composer.selection.selectNode(element, wysihtml5.browser.displaysCaretInEmptyContentEditableCorrectly());\n  }\n\n  function _hasClasses(element) {\n    return !!wysihtml5.lang.string(element.className).trim();\n  }\n\n  function _hasStyles(element) {\n    return !!wysihtml5.lang.string(element.getAttribute('style') || '').trim();\n  }\n\n  wysihtml5.commands.formatBlock = {\n    exec: function(composer, command, nodeName, className, classRegExp, cssStyle, styleRegExp) {\n      var doc             = composer.doc,\n          blockElements    = this.state(composer, command, nodeName, className, classRegExp, cssStyle, styleRegExp),\n          useLineBreaks   = composer.config.useLineBreaks,\n          defaultNodeName = useLineBreaks ? \"DIV\" : \"P\",\n          selectedNodes, classRemoveAction, blockRenameFound, styleRemoveAction, blockElement;\n      nodeName = typeof(nodeName) === \"string\" ? nodeName.toUpperCase() : nodeName;\n\n      if (blockElements.length) {\n        composer.selection.executeAndRestoreRangy(function() {\n          for (var b = blockElements.length; b--;) {\n            if (classRegExp) {\n              classRemoveAction = _removeClass(blockElements[b], classRegExp);\n            }\n            if (styleRegExp) {\n              styleRemoveAction = _removeStyle(blockElements[b], styleRegExp);\n            }\n\n            if ((styleRemoveAction || classRemoveAction) && nodeName === null && blockElements[b].nodeName != defaultNodeName) {\n              // dont rename or remove element when just setting block formating class or style\n              return;\n            }\n\n            var hasClasses = _hasClasses(blockElements[b]),\n                hasStyles = _hasStyles(blockElements[b]);\n\n            if (!hasClasses && !hasStyles && (useLineBreaks || nodeName === \"P\")) {\n              // Insert a line break afterwards and beforewards when there are siblings\n              // that are not of type line break or block element\n              wysihtml5.dom.lineBreaks(blockElements[b]).add();\n              dom.replaceWithChildNodes(blockElements[b]);\n            } else {\n              // Make sure that styling is kept by renaming the element to a <div> or <p> and copying over the class name\n              dom.renameElement(blockElements[b], nodeName === \"P\" ? \"DIV\" : defaultNodeName);\n            }\n          }\n        });\n\n        return;\n      }\n\n      // Find similiar block element and rename it (<h2 class=\"foo\"></h2>  =>  <h1 class=\"foo\"></h1>)\n      if (nodeName === null || wysihtml5.lang.array(BLOCK_ELEMENTS_GROUP).contains(nodeName)) {\n        selectedNodes = composer.selection.findNodesInSelection(BLOCK_ELEMENTS_GROUP).concat(composer.selection.getSelectedOwnNodes());\n        composer.selection.executeAndRestoreRangy(function() {\n          for (var n = selectedNodes.length; n--;) {\n            blockElement = dom.getParentElement(selectedNodes[n], {\n              nodeName: BLOCK_ELEMENTS_GROUP\n            });\n            if (blockElement == composer.element) {\n              blockElement = null;\n            }\n            if (blockElement) {\n                // Rename current block element to new block element and add class\n                if (nodeName) {\n                  blockElement = dom.renameElement(blockElement, nodeName);\n                }\n                if (className) {\n                  _addClass(blockElement, className, classRegExp);\n                }\n                if (cssStyle) {\n                  _addStyle(blockElement, cssStyle, styleRegExp);\n                }\n              blockRenameFound = true;\n            }\n          }\n\n        });\n\n        if (blockRenameFound) {\n          return;\n        }\n      }\n\n      _selectionWrap(composer, {\n        \"nodeName\": (nodeName || defaultNodeName),\n        \"className\": className || null,\n        \"cssStyle\": cssStyle || null\n      });\n    },\n\n    state: function(composer, command, nodeName, className, classRegExp, cssStyle, styleRegExp) {\n      var nodes = composer.selection.getSelectedOwnNodes(),\n          parents = [],\n          parent;\n\n      nodeName = typeof(nodeName) === \"string\" ? nodeName.toUpperCase() : nodeName;\n\n      //var selectedNode = composer.selection.getSelectedNode();\n      for (var i = 0, maxi = nodes.length; i < maxi; i++) {\n        parent = dom.getParentElement(nodes[i], {\n          nodeName:     nodeName,\n          className:    className,\n          classRegExp:  classRegExp,\n          cssStyle:     cssStyle,\n          styleRegExp:  styleRegExp\n        });\n        if (parent && wysihtml5.lang.array(parents).indexOf(parent) == -1) {\n          parents.push(parent);\n        }\n      }\n      if (parents.length == 0) {\n        return false;\n      }\n      return parents;\n    }\n\n\n  };\n})(wysihtml5);\n;/* Formats block for as a <pre><code class=\"classname\"></code></pre> block\n * Useful in conjuction for sytax highlight utility: highlight.js\n *\n * Usage:\n *\n * editorInstance.composer.commands.exec(\"formatCode\", \"language-html\");\n*/\n\nwysihtml5.commands.formatCode = {\n\n  exec: function(composer, command, classname) {\n    var pre = this.state(composer),\n        code, range, selectedNodes;\n    if (pre) {\n      // caret is already within a <pre><code>...</code></pre>\n      composer.selection.executeAndRestore(function() {\n        code = pre.querySelector(\"code\");\n        wysihtml5.dom.replaceWithChildNodes(pre);\n        if (code) {\n          wysihtml5.dom.replaceWithChildNodes(code);\n        }\n      });\n    } else {\n      // Wrap in <pre><code>...</code></pre>\n      range = composer.selection.getRange();\n      selectedNodes = range.extractContents();\n      pre = composer.doc.createElement(\"pre\");\n      code = composer.doc.createElement(\"code\");\n\n      if (classname) {\n        code.className = classname;\n      }\n\n      pre.appendChild(code);\n      code.appendChild(selectedNodes);\n      range.insertNode(pre);\n      composer.selection.selectNode(pre);\n    }\n  },\n\n  state: function(composer) {\n    var selectedNode = composer.selection.getSelectedNode();\n    if (selectedNode && selectedNode.nodeName && selectedNode.nodeName == \"PRE\"&&\n        selectedNode.firstChild && selectedNode.firstChild.nodeName && selectedNode.firstChild.nodeName == \"CODE\") {\n      return selectedNode;\n    } else {\n      return wysihtml5.dom.getParentElement(selectedNode, { nodeName: \"CODE\" }) && wysihtml5.dom.getParentElement(selectedNode, { nodeName: \"PRE\" });\n    }\n  }\n};;/**\n * formatInline scenarios for tag \"B\" (| = caret, |foo| = selected text)\n *\n *   #1 caret in unformatted text:\n *      abcdefg|\n *   output:\n *      abcdefg<b>|</b>\n *\n *   #2 unformatted text selected:\n *      abc|deg|h\n *   output:\n *      abc<b>|deg|</b>h\n *\n *   #3 unformatted text selected across boundaries:\n *      ab|c <span>defg|h</span>\n *   output:\n *      ab<b>|c </b><span><b>defg</b>|h</span>\n *\n *   #4 formatted text entirely selected\n *      <b>|abc|</b>\n *   output:\n *      |abc|\n *\n *   #5 formatted text partially selected\n *      <b>ab|c|</b>\n *   output:\n *      <b>ab</b>|c|\n *\n *   #6 formatted text selected across boundaries\n *      <span>ab|c</span> <b>de|fgh</b>\n *   output:\n *      <span>ab|c</span> de|<b>fgh</b>\n */\n(function(wysihtml5) {\n  var // Treat <b> as <strong> and vice versa\n      ALIAS_MAPPING = {\n        \"strong\": \"b\",\n        \"em\":     \"i\",\n        \"b\":      \"strong\",\n        \"i\":      \"em\"\n      },\n      htmlApplier = {};\n\n  function _getTagNames(tagName) {\n    var alias = ALIAS_MAPPING[tagName];\n    return alias ? [tagName.toLowerCase(), alias.toLowerCase()] : [tagName.toLowerCase()];\n  }\n\n  function _getApplier(tagName, className, classRegExp, cssStyle, styleRegExp, container) {\n    var identifier = tagName;\n    \n    if (className) {\n      identifier += \":\" + className;\n    }\n    if (cssStyle) {\n      identifier += \":\" + cssStyle;\n    }\n\n    if (!htmlApplier[identifier]) {\n      htmlApplier[identifier] = new wysihtml5.selection.HTMLApplier(_getTagNames(tagName), className, classRegExp, true, cssStyle, styleRegExp, container);\n    }\n\n    return htmlApplier[identifier];\n  }\n\n  wysihtml5.commands.formatInline = {\n    exec: function(composer, command, tagName, className, classRegExp, cssStyle, styleRegExp, dontRestoreSelect, noCleanup) {\n      var range = composer.selection.createRange(),\n          ownRanges = composer.selection.getOwnRanges();\n\n      if (!ownRanges || ownRanges.length == 0) {\n        return false;\n      }\n      composer.selection.getSelection().removeAllRanges();\n\n      _getApplier(tagName, className, classRegExp, cssStyle, styleRegExp, composer.element).toggleRange(ownRanges);\n\n      if (!dontRestoreSelect) {\n        range.setStart(ownRanges[0].startContainer,  ownRanges[0].startOffset);\n        range.setEnd(\n          ownRanges[ownRanges.length - 1].endContainer,\n          ownRanges[ownRanges.length - 1].endOffset\n        );\n        composer.selection.setSelection(range);\n        composer.selection.executeAndRestore(function() {\n          if (!noCleanup) {\n            composer.cleanUp();\n          }\n        }, true, true);\n      } else if (!noCleanup) {\n        composer.cleanUp();\n      }\n    },\n\n    // Executes so that if collapsed caret is in a state and executing that state it should unformat that state\n    // It is achieved by selecting the entire state element before executing.\n    // This works on built in contenteditable inline format commands\n    execWithToggle: function(composer, command, tagName, className, classRegExp, cssStyle, styleRegExp) {\n      var that = this;\n\n      if (this.state(composer, command, tagName, className, classRegExp, cssStyle, styleRegExp) &&\n        composer.selection.isCollapsed() &&\n        !composer.selection.caretIsLastInSelection() &&\n        !composer.selection.caretIsFirstInSelection()\n      ) {\n        var state_element = that.state(composer, command, tagName, className, classRegExp)[0];\n        composer.selection.executeAndRestoreRangy(function() {\n          var parent = state_element.parentNode;\n          composer.selection.selectNode(state_element, true);\n          wysihtml5.commands.formatInline.exec(composer, command, tagName, className, classRegExp, cssStyle, styleRegExp, true, true);\n        });\n      } else {\n        if (this.state(composer, command, tagName, className, classRegExp, cssStyle, styleRegExp) && !composer.selection.isCollapsed()) {\n          composer.selection.executeAndRestoreRangy(function() {\n            wysihtml5.commands.formatInline.exec(composer, command, tagName, className, classRegExp, cssStyle, styleRegExp, true, true);\n          });\n        } else {\n          wysihtml5.commands.formatInline.exec(composer, command, tagName, className, classRegExp, cssStyle, styleRegExp);\n        }\n      }\n    },\n\n    state: function(composer, command, tagName, className, classRegExp, cssStyle, styleRegExp) {\n      var doc           = composer.doc,\n          aliasTagName  = ALIAS_MAPPING[tagName] || tagName,\n          ownRanges, isApplied;\n\n      // Check whether the document contains a node with the desired tagName\n      if (!wysihtml5.dom.hasElementWithTagName(doc, tagName) &&\n          !wysihtml5.dom.hasElementWithTagName(doc, aliasTagName)) {\n        return false;\n      }\n\n       // Check whether the document contains a node with the desired className\n      if (className && !wysihtml5.dom.hasElementWithClassName(doc, className)) {\n         return false;\n      }\n\n      ownRanges = composer.selection.getOwnRanges();\n\n      if (!ownRanges || ownRanges.length === 0) {\n        return false;\n      }\n\n      isApplied = _getApplier(tagName, className, classRegExp, cssStyle, styleRegExp, composer.element).isAppliedToRange(ownRanges);\n\n      return (isApplied && isApplied.elements) ? isApplied.elements : false;\n    }\n  };\n})(wysihtml5);\n;(function(wysihtml5) {\n\n  wysihtml5.commands.insertBlockQuote = {\n    exec: function(composer, command) {\n      var state = this.state(composer, command),\n          endToEndParent = composer.selection.isEndToEndInNode(['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'P']),\n          prevNode, nextNode;\n\n      composer.selection.executeAndRestore(function() {\n        if (state) {\n          if (composer.config.useLineBreaks) {\n             wysihtml5.dom.lineBreaks(state).add();\n          }\n          wysihtml5.dom.unwrap(state);\n        } else {\n          if (composer.selection.isCollapsed()) {\n            composer.selection.selectLine();\n          }\n          \n          if (endToEndParent) {\n            var qouteEl = endToEndParent.ownerDocument.createElement('blockquote');\n            wysihtml5.dom.insert(qouteEl).after(endToEndParent);\n            qouteEl.appendChild(endToEndParent);\n          } else {\n            composer.selection.surround({nodeName: \"blockquote\"});\n          }\n        }\n      });\n    },\n    state: function(composer, command) {\n      var selectedNode  = composer.selection.getSelectedNode(),\n          node = wysihtml5.dom.getParentElement(selectedNode, { nodeName: \"BLOCKQUOTE\" }, false, composer.element);\n\n      return (node) ? node : false;\n    }\n  };\n\n})(wysihtml5);;wysihtml5.commands.insertHTML = {\n  exec: function(composer, command, html) {\n    if (composer.commands.support(command)) {\n      composer.doc.execCommand(command, false, html);\n    } else {\n      composer.selection.insertHTML(html);\n    }\n  },\n\n  state: function() {\n    return false;\n  }\n};\n;(function(wysihtml5) {\n  var NODE_NAME = \"IMG\";\n\n  wysihtml5.commands.insertImage = {\n    /**\n     * Inserts an <img>\n     * If selection is already an image link, it removes it\n     *\n     * @example\n     *    // either ...\n     *    wysihtml5.commands.insertImage.exec(composer, \"insertImage\", \"http://www.google.de/logo.jpg\");\n     *    // ... or ...\n     *    wysihtml5.commands.insertImage.exec(composer, \"insertImage\", { src: \"http://www.google.de/logo.jpg\", title: \"foo\" });\n     */\n    exec: function(composer, command, value) {\n      value = typeof(value) === \"object\" ? value : { src: value };\n\n      var doc     = composer.doc,\n          image   = this.state(composer),\n          textNode,\n          parent;\n\n      if (image) {\n        // Image already selected, set the caret before it and delete it\n        composer.selection.setBefore(image);\n        parent = image.parentNode;\n        parent.removeChild(image);\n\n        // and it's parent <a> too if it hasn't got any other relevant child nodes\n        wysihtml5.dom.removeEmptyTextNodes(parent);\n        if (parent.nodeName === \"A\" && !parent.firstChild) {\n          composer.selection.setAfter(parent);\n          parent.parentNode.removeChild(parent);\n        }\n\n        // firefox and ie sometimes don't remove the image handles, even though the image got removed\n        wysihtml5.quirks.redraw(composer.element);\n        return;\n      }\n\n      image = doc.createElement(NODE_NAME);\n\n      for (var i in value) {\n        image.setAttribute(i === \"className\" ? \"class\" : i, value[i]);\n      }\n\n      composer.selection.insertNode(image);\n      if (wysihtml5.browser.hasProblemsSettingCaretAfterImg()) {\n        textNode = doc.createTextNode(wysihtml5.INVISIBLE_SPACE);\n        composer.selection.insertNode(textNode);\n        composer.selection.setAfter(textNode);\n      } else {\n        composer.selection.setAfter(image);\n      }\n    },\n\n    state: function(composer) {\n      var doc = composer.doc,\n          selectedNode,\n          text,\n          imagesInSelection;\n\n      if (!wysihtml5.dom.hasElementWithTagName(doc, NODE_NAME)) {\n        return false;\n      }\n\n      selectedNode = composer.selection.getSelectedNode();\n      if (!selectedNode) {\n        return false;\n      }\n\n      if (selectedNode.nodeName === NODE_NAME) {\n        // This works perfectly in IE\n        return selectedNode;\n      }\n\n      if (selectedNode.nodeType !== wysihtml5.ELEMENT_NODE) {\n        return false;\n      }\n\n      text = composer.selection.getText();\n      text = wysihtml5.lang.string(text).trim();\n      if (text) {\n        return false;\n      }\n\n      imagesInSelection = composer.selection.getNodes(wysihtml5.ELEMENT_NODE, function(node) {\n        return node.nodeName === \"IMG\";\n      });\n\n      if (imagesInSelection.length !== 1) {\n        return false;\n      }\n\n      return imagesInSelection[0];\n    }\n  };\n})(wysihtml5);\n;(function(wysihtml5) {\n  var LINE_BREAK = \"<br>\" + (wysihtml5.browser.needsSpaceAfterLineBreak() ? \" \" : \"\");\n\n  wysihtml5.commands.insertLineBreak = {\n    exec: function(composer, command) {\n      if (composer.commands.support(command)) {\n        composer.doc.execCommand(command, false, null);\n        if (!wysihtml5.browser.autoScrollsToCaret()) {\n          composer.selection.scrollIntoView();\n        }\n      } else {\n        composer.commands.exec(\"insertHTML\", LINE_BREAK);\n      }\n    },\n\n    state: function() {\n      return false;\n    }\n  };\n})(wysihtml5);\n;wysihtml5.commands.insertOrderedList = {\n  exec: function(composer, command) {\n    wysihtml5.commands.insertList.exec(composer, command, \"OL\");\n  },\n\n  state: function(composer, command) {\n    return wysihtml5.commands.insertList.state(composer, command, \"OL\");\n  }\n};\n;wysihtml5.commands.insertUnorderedList = {\n  exec: function(composer, command) {\n    wysihtml5.commands.insertList.exec(composer, command, \"UL\");\n  },\n\n  state: function(composer, command) {\n    return wysihtml5.commands.insertList.state(composer, command, \"UL\");\n  }\n};\n;wysihtml5.commands.insertList = (function(wysihtml5) {\n\n  var isNode = function(node, name) {\n    if (node && node.nodeName) {\n      if (typeof name === 'string') {\n        name = [name];\n      }\n      for (var n = name.length; n--;) {\n        if (node.nodeName === name[n]) {\n          return true;\n        }\n      }\n    }\n    return false;\n  };\n\n  var findListEl = function(node, nodeName, composer) {\n    var ret = {\n          el: null,\n          other: false\n        };\n\n    if (node) {\n      var parentLi = wysihtml5.dom.getParentElement(node, { nodeName: \"LI\" }),\n          otherNodeName = (nodeName === \"UL\") ? \"OL\" : \"UL\";\n\n      if (isNode(node, nodeName)) {\n        ret.el = node;\n      } else if (isNode(node, otherNodeName)) {\n        ret = {\n          el: node,\n          other: true\n        };\n      } else if (parentLi) {\n        if (isNode(parentLi.parentNode, nodeName)) {\n          ret.el = parentLi.parentNode;\n        } else if (isNode(parentLi.parentNode, otherNodeName)) {\n          ret = {\n            el : parentLi.parentNode,\n            other: true\n          };\n        }\n      }\n    }\n\n    // do not count list elements outside of composer\n    if (ret.el && !composer.element.contains(ret.el)) {\n      ret.el = null;\n    }\n\n    return ret;\n  };\n\n  var handleSameTypeList = function(el, nodeName, composer) {\n    var otherNodeName = (nodeName === \"UL\") ? \"OL\" : \"UL\",\n        otherLists, innerLists;\n    // Unwrap list\n    // <ul><li>foo</li><li>bar</li></ul>\n    // becomes:\n    // foo<br>bar<br>\n    composer.selection.executeAndRestore(function() {\n      var otherLists = getListsInSelection(otherNodeName, composer);\n      if (otherLists.length) {\n        for (var l = otherLists.length; l--;) {\n          wysihtml5.dom.renameElement(otherLists[l], nodeName.toLowerCase());\n        }\n      } else {\n        innerLists = getListsInSelection(['OL', 'UL'], composer);\n        for (var i = innerLists.length; i--;) {\n          wysihtml5.dom.resolveList(innerLists[i], composer.config.useLineBreaks);\n        }\n        wysihtml5.dom.resolveList(el, composer.config.useLineBreaks);\n      }\n    });\n  };\n\n  var handleOtherTypeList =  function(el, nodeName, composer) {\n    var otherNodeName = (nodeName === \"UL\") ? \"OL\" : \"UL\";\n    // Turn an ordered list into an unordered list\n    // <ol><li>foo</li><li>bar</li></ol>\n    // becomes:\n    // <ul><li>foo</li><li>bar</li></ul>\n    // Also rename other lists in selection\n    composer.selection.executeAndRestore(function() {\n      var renameLists = [el].concat(getListsInSelection(otherNodeName, composer));\n\n      // All selection inner lists get renamed too\n      for (var l = renameLists.length; l--;) {\n        wysihtml5.dom.renameElement(renameLists[l], nodeName.toLowerCase());\n      }\n    });\n  };\n\n  var getListsInSelection = function(nodeName, composer) {\n      var ranges = composer.selection.getOwnRanges(),\n          renameLists = [];\n\n      for (var r = ranges.length; r--;) {\n        renameLists = renameLists.concat(ranges[r].getNodes([1], function(node) {\n          return isNode(node, nodeName);\n        }));\n      }\n\n      return renameLists;\n  };\n\n  var createListFallback = function(nodeName, composer) {\n    // Fallback for Create list\n    composer.selection.executeAndRestoreRangy(function() {\n      var tempClassName =  \"_wysihtml5-temp-\" + new Date().getTime(),\n          tempElement = composer.selection.deblockAndSurround({\n            \"nodeName\": \"div\",\n            \"className\": tempClassName\n          }),\n          isEmpty, list;\n\n      // This space causes new lists to never break on enter \n      var INVISIBLE_SPACE_REG_EXP = /\\uFEFF/g;\n      tempElement.innerHTML = tempElement.innerHTML.replace(INVISIBLE_SPACE_REG_EXP, \"\");\n      \n      if (tempElement) {\n        isEmpty = wysihtml5.lang.array([\"\", \"<br>\", wysihtml5.INVISIBLE_SPACE]).contains(tempElement.innerHTML);\n        list = wysihtml5.dom.convertToList(tempElement, nodeName.toLowerCase(), composer.parent.config.uneditableContainerClassname);\n        if (isEmpty) {\n          composer.selection.selectNode(list.querySelector(\"li\"), true);\n        }\n      }\n    });\n  };\n\n  return {\n    exec: function(composer, command, nodeName) {\n      var doc           = composer.doc,\n          cmd           = (nodeName === \"OL\") ? \"insertOrderedList\" : \"insertUnorderedList\",\n          selectedNode  = composer.selection.getSelectedNode(),\n          list          = findListEl(selectedNode, nodeName, composer);\n\n      if (!list.el) {\n        if (composer.commands.support(cmd)) {\n          doc.execCommand(cmd, false, null);\n        } else {\n          createListFallback(nodeName, composer);\n        }\n      } else if (list.other) {\n        handleOtherTypeList(list.el, nodeName, composer);\n      } else {\n        handleSameTypeList(list.el, nodeName, composer);\n      }\n    },\n\n    state: function(composer, command, nodeName) {\n      var selectedNode = composer.selection.getSelectedNode(),\n          list         = findListEl(selectedNode, nodeName, composer);\n\n      return (list.el && !list.other) ? list.el : false;\n    }\n  };\n\n})(wysihtml5);;wysihtml5.commands.italic = {\n  exec: function(composer, command) {\n    wysihtml5.commands.formatInline.execWithToggle(composer, command, \"i\");\n  },\n\n  state: function(composer, command) {\n    // element.ownerDocument.queryCommandState(\"italic\") results:\n    // firefox: only <i>\n    // chrome:  <i>, <em>, <blockquote>, ...\n    // ie:      <i>, <em>\n    // opera:   only <i>\n    return wysihtml5.commands.formatInline.state(composer, command, \"i\");\n  }\n};\n;(function(wysihtml5) {\n  var CLASS_NAME  = \"wysiwyg-text-align-center\",\n      REG_EXP     = /wysiwyg-text-align-[0-9a-z]+/g;\n\n  wysihtml5.commands.justifyCenter = {\n    exec: function(composer, command) {\n      return wysihtml5.commands.formatBlock.exec(composer, \"formatBlock\", null, CLASS_NAME, REG_EXP);\n    },\n\n    state: function(composer, command) {\n      return wysihtml5.commands.formatBlock.state(composer, \"formatBlock\", null, CLASS_NAME, REG_EXP);\n    }\n  };\n})(wysihtml5);\n;(function(wysihtml5) {\n  var CLASS_NAME  = \"wysiwyg-text-align-left\",\n      REG_EXP     = /wysiwyg-text-align-[0-9a-z]+/g;\n\n  wysihtml5.commands.justifyLeft = {\n    exec: function(composer, command) {\n      return wysihtml5.commands.formatBlock.exec(composer, \"formatBlock\", null, CLASS_NAME, REG_EXP);\n    },\n\n    state: function(composer, command) {\n      return wysihtml5.commands.formatBlock.state(composer, \"formatBlock\", null, CLASS_NAME, REG_EXP);\n    }\n  };\n})(wysihtml5);\n;(function(wysihtml5) {\n  var CLASS_NAME  = \"wysiwyg-text-align-right\",\n      REG_EXP     = /wysiwyg-text-align-[0-9a-z]+/g;\n\n  wysihtml5.commands.justifyRight = {\n    exec: function(composer, command) {\n      return wysihtml5.commands.formatBlock.exec(composer, \"formatBlock\", null, CLASS_NAME, REG_EXP);\n    },\n\n    state: function(composer, command) {\n      return wysihtml5.commands.formatBlock.state(composer, \"formatBlock\", null, CLASS_NAME, REG_EXP);\n    }\n  };\n})(wysihtml5);\n;(function(wysihtml5) {\n  var CLASS_NAME  = \"wysiwyg-text-align-justify\",\n      REG_EXP     = /wysiwyg-text-align-[0-9a-z]+/g;\n\n  wysihtml5.commands.justifyFull = {\n    exec: function(composer, command) {\n      return wysihtml5.commands.formatBlock.exec(composer, \"formatBlock\", null, CLASS_NAME, REG_EXP);\n    },\n\n    state: function(composer, command) {\n      return wysihtml5.commands.formatBlock.state(composer, \"formatBlock\", null, CLASS_NAME, REG_EXP);\n    }\n  };\n})(wysihtml5);\n;(function(wysihtml5) {\n  var STYLE_STR  = \"text-align: right;\",\n      REG_EXP = /(\\s|^)text-align\\s*:\\s*[^;\\s]+;?/gi;\n\n  wysihtml5.commands.alignRightStyle = {\n    exec: function(composer, command) {\n      return wysihtml5.commands.formatBlock.exec(composer, \"formatBlock\", null, null, null, STYLE_STR, REG_EXP);\n    },\n\n    state: function(composer, command) {\n      return wysihtml5.commands.formatBlock.state(composer, \"formatBlock\", null, null, null, STYLE_STR, REG_EXP);\n    }\n  };\n})(wysihtml5);\n;(function(wysihtml5) {\n  var STYLE_STR  = \"text-align: left;\",\n      REG_EXP = /(\\s|^)text-align\\s*:\\s*[^;\\s]+;?/gi;\n\n  wysihtml5.commands.alignLeftStyle = {\n    exec: function(composer, command) {\n      return wysihtml5.commands.formatBlock.exec(composer, \"formatBlock\", null, null, null, STYLE_STR, REG_EXP);\n    },\n\n    state: function(composer, command) {\n      return wysihtml5.commands.formatBlock.state(composer, \"formatBlock\", null, null, null, STYLE_STR, REG_EXP);\n    }\n  };\n})(wysihtml5);\n;(function(wysihtml5) {\n  var STYLE_STR  = \"text-align: center;\",\n      REG_EXP = /(\\s|^)text-align\\s*:\\s*[^;\\s]+;?/gi;\n\n  wysihtml5.commands.alignCenterStyle = {\n    exec: function(composer, command) {\n      return wysihtml5.commands.formatBlock.exec(composer, \"formatBlock\", null, null, null, STYLE_STR, REG_EXP);\n    },\n\n    state: function(composer, command) {\n      return wysihtml5.commands.formatBlock.state(composer, \"formatBlock\", null, null, null, STYLE_STR, REG_EXP);\n    }\n  };\n})(wysihtml5);\n;wysihtml5.commands.redo = {\n  exec: function(composer) {\n    return composer.undoManager.redo();\n  },\n\n  state: function(composer) {\n    return false;\n  }\n};\n;wysihtml5.commands.underline = {\n  exec: function(composer, command) {\n    wysihtml5.commands.formatInline.execWithToggle(composer, command, \"u\");\n  },\n\n  state: function(composer, command) {\n    return wysihtml5.commands.formatInline.state(composer, command, \"u\");\n  }\n};\n;wysihtml5.commands.undo = {\n  exec: function(composer) {\n    return composer.undoManager.undo();\n  },\n\n  state: function(composer) {\n    return false;\n  }\n};\n;wysihtml5.commands.createTable = {\n  exec: function(composer, command, value) {\n      var col, row, html;\n      if (value && value.cols && value.rows && parseInt(value.cols, 10) > 0 && parseInt(value.rows, 10) > 0) {\n          if (value.tableStyle) {\n            html = \"<table style=\\\"\" + value.tableStyle + \"\\\">\";\n          } else {\n            html = \"<table>\";\n          }\n          html += \"<tbody>\";\n          for (row = 0; row < value.rows; row ++) {\n              html += '<tr>';\n              for (col = 0; col < value.cols; col ++) {\n                  html += \"<td>&nbsp;</td>\";\n              }\n              html += '</tr>';\n          }\n          html += \"</tbody></table>\";\n          composer.commands.exec(\"insertHTML\", html);\n          //composer.selection.insertHTML(html);\n      }\n\n\n  },\n\n  state: function(composer, command) {\n      return false;\n  }\n};\n;wysihtml5.commands.mergeTableCells = {\n  exec: function(composer, command) {\n      if (composer.tableSelection && composer.tableSelection.start && composer.tableSelection.end) {\n          if (this.state(composer, command)) {\n              wysihtml5.dom.table.unmergeCell(composer.tableSelection.start);\n          } else {\n              wysihtml5.dom.table.mergeCellsBetween(composer.tableSelection.start, composer.tableSelection.end);\n          }\n      }\n  },\n\n  state: function(composer, command) {\n      if (composer.tableSelection) {\n          var start = composer.tableSelection.start,\n              end = composer.tableSelection.end;\n          if (start && end && start == end &&\n              ((\n                  wysihtml5.dom.getAttribute(start, \"colspan\") &&\n                  parseInt(wysihtml5.dom.getAttribute(start, \"colspan\"), 10) > 1\n              ) || (\n                  wysihtml5.dom.getAttribute(start, \"rowspan\") &&\n                  parseInt(wysihtml5.dom.getAttribute(start, \"rowspan\"), 10) > 1\n              ))\n          ) {\n              return [start];\n          }\n      }\n      return false;\n  }\n};\n;wysihtml5.commands.addTableCells = {\n  exec: function(composer, command, value) {\n      if (composer.tableSelection && composer.tableSelection.start && composer.tableSelection.end) {\n\n          // switches start and end if start is bigger than end (reverse selection)\n          var tableSelect = wysihtml5.dom.table.orderSelectionEnds(composer.tableSelection.start, composer.tableSelection.end);\n          if (value == \"before\" || value == \"above\") {\n              wysihtml5.dom.table.addCells(tableSelect.start, value);\n          } else if (value == \"after\" || value == \"below\") {\n              wysihtml5.dom.table.addCells(tableSelect.end, value);\n          }\n          setTimeout(function() {\n              composer.tableSelection.select(tableSelect.start, tableSelect.end);\n          },0);\n      }\n  },\n\n  state: function(composer, command) {\n      return false;\n  }\n};\n;wysihtml5.commands.deleteTableCells = {\n  exec: function(composer, command, value) {\n      if (composer.tableSelection && composer.tableSelection.start && composer.tableSelection.end) {\n          var tableSelect = wysihtml5.dom.table.orderSelectionEnds(composer.tableSelection.start, composer.tableSelection.end),\n              idx = wysihtml5.dom.table.indexOf(tableSelect.start),\n              selCell,\n              table = composer.tableSelection.table;\n\n          wysihtml5.dom.table.removeCells(tableSelect.start, value);\n          setTimeout(function() {\n              // move selection to next or previous if not present\n              selCell = wysihtml5.dom.table.findCell(table, idx);\n\n              if (!selCell){\n                  if (value == \"row\") {\n                      selCell = wysihtml5.dom.table.findCell(table, {\n                          \"row\": idx.row - 1,\n                          \"col\": idx.col\n                      });\n                  }\n\n                  if (value == \"column\") {\n                      selCell = wysihtml5.dom.table.findCell(table, {\n                          \"row\": idx.row,\n                          \"col\": idx.col - 1\n                      });\n                  }\n              }\n              if (selCell) {\n                  composer.tableSelection.select(selCell, selCell);\n              }\n          }, 0);\n\n      }\n  },\n\n  state: function(composer, command) {\n      return false;\n  }\n};\n;wysihtml5.commands.indentList = {\n  exec: function(composer, command, value) {\n    var listEls = composer.selection.getSelectionParentsByTag('LI');\n    if (listEls) {\n      return this.tryToPushLiLevel(listEls, composer.selection);\n    }\n    return false;\n  },\n\n  state: function(composer, command) {\n      return false;\n  },\n\n  tryToPushLiLevel: function(liNodes, selection) {\n    var listTag, list, prevLi, liNode, prevLiList,\n        found = false;\n\n    selection.executeAndRestoreRangy(function() {\n\n      for (var i = liNodes.length; i--;) {\n        liNode = liNodes[i];\n        listTag = (liNode.parentNode.nodeName === 'OL') ? 'OL' : 'UL';\n        list = liNode.ownerDocument.createElement(listTag);\n        prevLi = wysihtml5.dom.domNode(liNode).prev({nodeTypes: [wysihtml5.ELEMENT_NODE]});\n        prevLiList = (prevLi) ? prevLi.querySelector('ul, ol') : null;\n\n        if (prevLi) {\n          if (prevLiList) {\n            prevLiList.appendChild(liNode);\n          } else {\n            list.appendChild(liNode);\n            prevLi.appendChild(list);\n          }\n          found = true;\n        }\n      }\n\n    });\n    return found;\n  }\n};\n;wysihtml5.commands.outdentList = {\n  exec: function(composer, command, value) {\n    var listEls = composer.selection.getSelectionParentsByTag('LI');\n    if (listEls) {\n      return this.tryToPullLiLevel(listEls, composer);\n    }\n    return false;\n  },\n\n  state: function(composer, command) {\n      return false;\n  },\n\n  tryToPullLiLevel: function(liNodes, composer) {\n    var listNode, outerListNode, outerLiNode, list, prevLi, liNode, afterList,\n        found = false,\n        that = this;\n\n    composer.selection.executeAndRestoreRangy(function() {\n\n      for (var i = liNodes.length; i--;) {\n        liNode = liNodes[i];\n        if (liNode.parentNode) {\n          listNode = liNode.parentNode;\n\n          if (listNode.tagName === 'OL' || listNode.tagName === 'UL') {\n            found = true;\n\n            outerListNode = wysihtml5.dom.getParentElement(listNode.parentNode, { nodeName: ['OL', 'UL']}, false, composer.element);\n            outerLiNode = wysihtml5.dom.getParentElement(listNode.parentNode, { nodeName: ['LI']}, false, composer.element);\n\n            if (outerListNode && outerLiNode) {\n\n              if (liNode.nextSibling) {\n                afterList = that.getAfterList(listNode, liNode);\n                liNode.appendChild(afterList);\n              }\n              outerListNode.insertBefore(liNode, outerLiNode.nextSibling);\n\n            } else {\n\n              if (liNode.nextSibling) {\n                afterList = that.getAfterList(listNode, liNode);\n                liNode.appendChild(afterList);\n              }\n\n              for (var j = liNode.childNodes.length; j--;) {\n                listNode.parentNode.insertBefore(liNode.childNodes[j], listNode.nextSibling);\n              }\n\n              listNode.parentNode.insertBefore(document.createElement('br'), listNode.nextSibling);\n              liNode.parentNode.removeChild(liNode);\n\n            }\n\n            // cleanup\n            if (listNode.childNodes.length === 0) {\n                listNode.parentNode.removeChild(listNode);\n            }\n          }\n        }\n      }\n\n    });\n    return found;\n  },\n\n  getAfterList: function(listNode, liNode) {\n    var nodeName = listNode.nodeName,\n        newList = document.createElement(nodeName);\n\n    while (liNode.nextSibling) {\n      newList.appendChild(liNode.nextSibling);\n    }\n    return newList;\n  }\n\n};;/**\n * Undo Manager for wysihtml5\n * slightly inspired by http://rniwa.com/editing/undomanager.html#the-undomanager-interface\n */\n(function(wysihtml5) {\n  var Z_KEY               = 90,\n      Y_KEY               = 89,\n      BACKSPACE_KEY       = 8,\n      DELETE_KEY          = 46,\n      MAX_HISTORY_ENTRIES = 25,\n      DATA_ATTR_NODE      = \"data-wysihtml5-selection-node\",\n      DATA_ATTR_OFFSET    = \"data-wysihtml5-selection-offset\",\n      UNDO_HTML           = '<span id=\"_wysihtml5-undo\" class=\"_wysihtml5-temp\">' + wysihtml5.INVISIBLE_SPACE + '</span>',\n      REDO_HTML           = '<span id=\"_wysihtml5-redo\" class=\"_wysihtml5-temp\">' + wysihtml5.INVISIBLE_SPACE + '</span>',\n      dom                 = wysihtml5.dom;\n\n  function cleanTempElements(doc) {\n    var tempElement;\n    while (tempElement = doc.querySelector(\"._wysihtml5-temp\")) {\n      tempElement.parentNode.removeChild(tempElement);\n    }\n  }\n\n  wysihtml5.UndoManager = wysihtml5.lang.Dispatcher.extend(\n    /** @scope wysihtml5.UndoManager.prototype */ {\n    constructor: function(editor) {\n      this.editor = editor;\n      this.composer = editor.composer;\n      this.element = this.composer.element;\n\n      this.position = 0;\n      this.historyStr = [];\n      this.historyDom = [];\n\n      this.transact();\n\n      this._observe();\n    },\n\n    _observe: function() {\n      var that      = this,\n          doc       = this.composer.sandbox.getDocument(),\n          lastKey;\n\n      // Catch CTRL+Z and CTRL+Y\n      dom.observe(this.element, \"keydown\", function(event) {\n        if (event.altKey || (!event.ctrlKey && !event.metaKey)) {\n          return;\n        }\n\n        var keyCode = event.keyCode,\n            isUndo = keyCode === Z_KEY && !event.shiftKey,\n            isRedo = (keyCode === Z_KEY && event.shiftKey) || (keyCode === Y_KEY);\n\n        if (isUndo) {\n          that.undo();\n          event.preventDefault();\n        } else if (isRedo) {\n          that.redo();\n          event.preventDefault();\n        }\n      });\n\n      // Catch delete and backspace\n      dom.observe(this.element, \"keydown\", function(event) {\n        var keyCode = event.keyCode;\n        if (keyCode === lastKey) {\n          return;\n        }\n\n        lastKey = keyCode;\n\n        if (keyCode === BACKSPACE_KEY || keyCode === DELETE_KEY) {\n          that.transact();\n        }\n      });\n\n      this.editor\n        .on(\"newword:composer\", function() {\n          that.transact();\n        })\n\n        .on(\"beforecommand:composer\", function() {\n          that.transact();\n        });\n    },\n\n    transact: function() {\n      var previousHtml      = this.historyStr[this.position - 1],\n          currentHtml       = this.composer.getValue(false, false),\n          composerIsVisible   = this.element.offsetWidth > 0 && this.element.offsetHeight > 0,\n          range, node, offset, element, position;\n\n      if (currentHtml === previousHtml) {\n        return;\n      }\n\n      var length = this.historyStr.length = this.historyDom.length = this.position;\n      if (length > MAX_HISTORY_ENTRIES) {\n        this.historyStr.shift();\n        this.historyDom.shift();\n        this.position--;\n      }\n\n      this.position++;\n\n      if (composerIsVisible) {\n        // Do not start saving selection if composer is not visible\n        range   = this.composer.selection.getRange();\n        node    = (range && range.startContainer) ? range.startContainer : this.element;\n        offset  = (range && range.startOffset) ? range.startOffset : 0;\n\n        if (node.nodeType === wysihtml5.ELEMENT_NODE) {\n          element = node;\n        } else {\n          element  = node.parentNode;\n          position = this.getChildNodeIndex(element, node);\n        }\n\n        element.setAttribute(DATA_ATTR_OFFSET, offset);\n        if (typeof(position) !== \"undefined\") {\n          element.setAttribute(DATA_ATTR_NODE, position);\n        }\n      }\n\n      var clone = this.element.cloneNode(!!currentHtml);\n      this.historyDom.push(clone);\n      this.historyStr.push(currentHtml);\n\n      if (element) {\n        element.removeAttribute(DATA_ATTR_OFFSET);\n        element.removeAttribute(DATA_ATTR_NODE);\n      }\n\n    },\n\n    undo: function() {\n      this.transact();\n\n      if (!this.undoPossible()) {\n        return;\n      }\n\n      this.set(this.historyDom[--this.position - 1]);\n      this.editor.fire(\"undo:composer\");\n    },\n\n    redo: function() {\n      if (!this.redoPossible()) {\n        return;\n      }\n\n      this.set(this.historyDom[++this.position - 1]);\n      this.editor.fire(\"redo:composer\");\n    },\n\n    undoPossible: function() {\n      return this.position > 1;\n    },\n\n    redoPossible: function() {\n      return this.position < this.historyStr.length;\n    },\n\n    set: function(historyEntry) {\n      this.element.innerHTML = \"\";\n\n      var i = 0,\n          childNodes = historyEntry.childNodes,\n          length = historyEntry.childNodes.length;\n\n      for (; i<length; i++) {\n        this.element.appendChild(childNodes[i].cloneNode(true));\n      }\n\n      // Restore selection\n      var offset,\n          node,\n          position;\n\n      if (historyEntry.hasAttribute(DATA_ATTR_OFFSET)) {\n        offset    = historyEntry.getAttribute(DATA_ATTR_OFFSET);\n        position  = historyEntry.getAttribute(DATA_ATTR_NODE);\n        node      = this.element;\n      } else {\n        node      = this.element.querySelector(\"[\" + DATA_ATTR_OFFSET + \"]\") || this.element;\n        offset    = node.getAttribute(DATA_ATTR_OFFSET);\n        position  = node.getAttribute(DATA_ATTR_NODE);\n        node.removeAttribute(DATA_ATTR_OFFSET);\n        node.removeAttribute(DATA_ATTR_NODE);\n      }\n\n      if (position !== null) {\n        node = this.getChildNodeByIndex(node, +position);\n      }\n\n      this.composer.selection.set(node, offset);\n    },\n\n    getChildNodeIndex: function(parent, child) {\n      var i           = 0,\n          childNodes  = parent.childNodes,\n          length      = childNodes.length;\n      for (; i<length; i++) {\n        if (childNodes[i] === child) {\n          return i;\n        }\n      }\n    },\n\n    getChildNodeByIndex: function(parent, index) {\n      return parent.childNodes[index];\n    }\n  });\n})(wysihtml5);\n;/**\n * TODO: the following methods still need unit test coverage\n */\nwysihtml5.views.View = Base.extend(\n  /** @scope wysihtml5.views.View.prototype */ {\n  constructor: function(parent, textareaElement, config) {\n    this.parent   = parent;\n    this.element  = textareaElement;\n    this.config   = config;\n    if (!this.config.noTextarea) {\n        this._observeViewChange();\n    }\n  },\n\n  _observeViewChange: function() {\n    var that = this;\n    this.parent.on(\"beforeload\", function() {\n      that.parent.on(\"change_view\", function(view) {\n        if (view === that.name) {\n          that.parent.currentView = that;\n          that.show();\n          // Using tiny delay here to make sure that the placeholder is set before focusing\n          setTimeout(function() { that.focus(); }, 0);\n        } else {\n          that.hide();\n        }\n      });\n    });\n  },\n\n  focus: function() {\n    if (this.element.ownerDocument.querySelector(\":focus\") === this.element) {\n      return;\n    }\n\n    try { this.element.focus(); } catch(e) {}\n  },\n\n  hide: function() {\n    this.element.style.display = \"none\";\n  },\n\n  show: function() {\n    this.element.style.display = \"\";\n  },\n\n  disable: function() {\n    this.element.setAttribute(\"disabled\", \"disabled\");\n  },\n\n  enable: function() {\n    this.element.removeAttribute(\"disabled\");\n  }\n});\n;(function(wysihtml5) {\n  var dom       = wysihtml5.dom,\n      browser   = wysihtml5.browser;\n\n  wysihtml5.views.Composer = wysihtml5.views.View.extend(\n    /** @scope wysihtml5.views.Composer.prototype */ {\n    name: \"composer\",\n\n    // Needed for firefox in order to display a proper caret in an empty contentEditable\n    CARET_HACK: \"<br>\",\n\n    constructor: function(parent, editableElement, config) {\n      this.base(parent, editableElement, config);\n      if (!this.config.noTextarea) {\n          this.textarea = this.parent.textarea;\n      } else {\n          this.editableArea = editableElement;\n      }\n      if (this.config.contentEditableMode) {\n          this._initContentEditableArea();\n      } else {\n          this._initSandbox();\n      }\n    },\n\n    clear: function() {\n      this.element.innerHTML = browser.displaysCaretInEmptyContentEditableCorrectly() ? \"\" : this.CARET_HACK;\n    },\n\n    getValue: function(parse, clearInternals) {\n      var value = this.isEmpty() ? \"\" : wysihtml5.quirks.getCorrectInnerHTML(this.element);\n      if (parse !== false) {\n        value = this.parent.parse(value, (clearInternals === false) ? false : true);\n      }\n\n      return value;\n    },\n\n    setValue: function(html, parse) {\n      if (parse) {\n        html = this.parent.parse(html);\n      }\n\n      try {\n        this.element.innerHTML = html;\n      } catch (e) {\n        this.element.innerText = html;\n      }\n    },\n\n    cleanUp: function() {\n        this.parent.parse(this.element);\n    },\n\n    show: function() {\n      this.editableArea.style.display = this._displayStyle || \"\";\n\n      if (!this.config.noTextarea && !this.textarea.element.disabled) {\n        // Firefox needs this, otherwise contentEditable becomes uneditable\n        this.disable();\n        this.enable();\n      }\n    },\n\n    hide: function() {\n      this._displayStyle = dom.getStyle(\"display\").from(this.editableArea);\n      if (this._displayStyle === \"none\") {\n        this._displayStyle = null;\n      }\n      this.editableArea.style.display = \"none\";\n    },\n\n    disable: function() {\n      this.parent.fire(\"disable:composer\");\n      this.element.removeAttribute(\"contentEditable\");\n    },\n\n    enable: function() {\n      this.parent.fire(\"enable:composer\");\n      this.element.setAttribute(\"contentEditable\", \"true\");\n    },\n\n    focus: function(setToEnd) {\n      // IE 8 fires the focus event after .focus()\n      // This is needed by our simulate_placeholder.js to work\n      // therefore we clear it ourselves this time\n      if (wysihtml5.browser.doesAsyncFocus() && this.hasPlaceholderSet()) {\n        this.clear();\n      }\n\n      this.base();\n\n      var lastChild = this.element.lastChild;\n      if (setToEnd && lastChild && this.selection) {\n        if (lastChild.nodeName === \"BR\") {\n          this.selection.setBefore(this.element.lastChild);\n        } else {\n          this.selection.setAfter(this.element.lastChild);\n        }\n      }\n    },\n\n    getTextContent: function() {\n      return dom.getTextContent(this.element);\n    },\n\n    hasPlaceholderSet: function() {\n      return this.getTextContent() == ((this.config.noTextarea) ? this.editableArea.getAttribute(\"data-placeholder\") : this.textarea.element.getAttribute(\"placeholder\")) && this.placeholderSet;\n    },\n\n    isEmpty: function() {\n      var innerHTML = this.element.innerHTML.toLowerCase();\n      return (/^(\\s|<br>|<\\/br>|<p>|<\\/p>)*$/i).test(innerHTML)  ||\n             innerHTML === \"\"            ||\n             innerHTML === \"<br>\"        ||\n             innerHTML === \"<p></p>\"     ||\n             innerHTML === \"<p><br></p>\" ||\n             this.hasPlaceholderSet();\n    },\n\n    _initContentEditableArea: function() {\n        var that = this;\n\n        if (this.config.noTextarea) {\n            this.sandbox = new dom.ContentEditableArea(function() {\n                that._create();\n            }, {}, this.editableArea);\n        } else {\n            this.sandbox = new dom.ContentEditableArea(function() {\n                that._create();\n            });\n            this.editableArea = this.sandbox.getContentEditable();\n            dom.insert(this.editableArea).after(this.textarea.element);\n            this._createWysiwygFormField();\n        }\n    },\n\n    _initSandbox: function() {\n      var that = this;\n\n      this.sandbox = new dom.Sandbox(function() {\n        that._create();\n      }, {\n        stylesheets:  this.config.stylesheets\n      });\n      this.editableArea  = this.sandbox.getIframe();\n\n      var textareaElement = this.textarea.element;\n      dom.insert(this.editableArea).after(textareaElement);\n\n      this._createWysiwygFormField();\n    },\n\n    // Creates hidden field which tells the server after submit, that the user used an wysiwyg editor\n    _createWysiwygFormField: function() {\n        if (this.textarea.element.form) {\n          var hiddenField = document.createElement(\"input\");\n          hiddenField.type   = \"hidden\";\n          hiddenField.name   = \"_wysihtml5_mode\";\n          hiddenField.value  = 1;\n          dom.insert(hiddenField).after(this.textarea.element);\n        }\n    },\n\n    _create: function() {\n      var that = this;\n      this.doc                = this.sandbox.getDocument();\n      this.element            = (this.config.contentEditableMode) ? this.sandbox.getContentEditable() : this.doc.body;\n      if (!this.config.noTextarea) {\n          this.textarea           = this.parent.textarea;\n          this.element.innerHTML  = this.textarea.getValue(true, false);\n      } else {\n          this.cleanUp(); // cleans contenteditable on initiation as it may contain html\n      }\n\n      // Make sure our selection handler is ready\n      this.selection = new wysihtml5.Selection(this.parent, this.element, this.config.uneditableContainerClassname);\n\n      // Make sure commands dispatcher is ready\n      this.commands  = new wysihtml5.Commands(this.parent);\n\n      if (!this.config.noTextarea) {\n          dom.copyAttributes([\n              \"className\", \"spellcheck\", \"title\", \"lang\", \"dir\", \"accessKey\"\n          ]).from(this.textarea.element).to(this.element);\n      }\n\n      dom.addClass(this.element, this.config.composerClassName);\n      //\n      // Make the editor look like the original textarea, by syncing styles\n      if (this.config.style && !this.config.contentEditableMode) {\n        this.style();\n      }\n\n      this.observe();\n\n      var name = this.config.name;\n      if (name) {\n        dom.addClass(this.element, name);\n        if (!this.config.contentEditableMode) { dom.addClass(this.editableArea, name); }\n      }\n\n      this.enable();\n\n      if (!this.config.noTextarea && this.textarea.element.disabled) {\n        this.disable();\n      }\n\n      // Simulate html5 placeholder attribute on contentEditable element\n      var placeholderText = typeof(this.config.placeholder) === \"string\"\n        ? this.config.placeholder\n        : ((this.config.noTextarea) ? this.editableArea.getAttribute(\"data-placeholder\") : this.textarea.element.getAttribute(\"placeholder\"));\n      if (placeholderText) {\n        dom.simulatePlaceholder(this.parent, this, placeholderText);\n      }\n\n      // Make sure that the browser avoids using inline styles whenever possible\n      this.commands.exec(\"styleWithCSS\", false);\n\n      this._initAutoLinking();\n      this._initObjectResizing();\n      this._initUndoManager();\n      this._initLineBreaking();\n\n      // Simulate html5 autofocus on contentEditable element\n      // This doesn't work on IOS (5.1.1)\n      if (!this.config.noTextarea && (this.textarea.element.hasAttribute(\"autofocus\") || document.querySelector(\":focus\") == this.textarea.element) && !browser.isIos()) {\n        setTimeout(function() { that.focus(true); }, 100);\n      }\n\n      // IE sometimes leaves a single paragraph, which can't be removed by the user\n      if (!browser.clearsContentEditableCorrectly()) {\n        wysihtml5.quirks.ensureProperClearing(this);\n      }\n\n      // Set up a sync that makes sure that textarea and editor have the same content\n      if (this.initSync && this.config.sync) {\n        this.initSync();\n      }\n\n      // Okay hide the textarea, we are ready to go\n      if (!this.config.noTextarea) { this.textarea.hide(); }\n\n      // Fire global (before-)load event\n      this.parent.fire(\"beforeload\").fire(\"load\");\n    },\n\n    _initAutoLinking: function() {\n      var that                           = this,\n          supportsDisablingOfAutoLinking = browser.canDisableAutoLinking(),\n          supportsAutoLinking            = browser.doesAutoLinkingInContentEditable();\n      if (supportsDisablingOfAutoLinking) {\n        this.commands.exec(\"autoUrlDetect\", false);\n      }\n\n      if (!this.config.autoLink) {\n        return;\n      }\n\n      // Only do the auto linking by ourselves when the browser doesn't support auto linking\n      // OR when he supports auto linking but we were able to turn it off (IE9+)\n      if (!supportsAutoLinking || (supportsAutoLinking && supportsDisablingOfAutoLinking)) {\n        this.parent.on(\"newword:composer\", function() {\n          if (dom.getTextContent(that.element).match(dom.autoLink.URL_REG_EXP)) {\n            that.selection.executeAndRestore(function(startContainer, endContainer) {\n              var uneditables = that.element.querySelectorAll(\".\" + that.config.uneditableContainerClassname),\n                  isInUneditable = false;\n\n              for (var i = uneditables.length; i--;) {\n                if (wysihtml5.dom.contains(uneditables[i], endContainer)) {\n                  isInUneditable = true;\n                }\n              }\n\n              if (!isInUneditable) dom.autoLink(endContainer.parentNode, [that.config.uneditableContainerClassname]);\n            });\n          }\n        });\n\n        dom.observe(this.element, \"blur\", function() {\n          dom.autoLink(that.element, [that.config.uneditableContainerClassname]);\n        });\n      }\n\n      // Assuming we have the following:\n      //  <a href=\"http://www.google.de\">http://www.google.de</a>\n      // If a user now changes the url in the innerHTML we want to make sure that\n      // it's synchronized with the href attribute (as long as the innerHTML is still a url)\n      var // Use a live NodeList to check whether there are any links in the document\n          links           = this.sandbox.getDocument().getElementsByTagName(\"a\"),\n          // The autoLink helper method reveals a reg exp to detect correct urls\n          urlRegExp       = dom.autoLink.URL_REG_EXP,\n          getTextContent  = function(element) {\n            var textContent = wysihtml5.lang.string(dom.getTextContent(element)).trim();\n            if (textContent.substr(0, 4) === \"www.\") {\n              textContent = \"http://\" + textContent;\n            }\n            return textContent;\n          };\n\n      dom.observe(this.element, \"keydown\", function(event) {\n        if (!links.length) {\n          return;\n        }\n\n        var selectedNode = that.selection.getSelectedNode(event.target.ownerDocument),\n            link         = dom.getParentElement(selectedNode, { nodeName: \"A\" }, 4),\n            textContent;\n\n        if (!link) {\n          return;\n        }\n\n        textContent = getTextContent(link);\n        // keydown is fired before the actual content is changed\n        // therefore we set a timeout to change the href\n        setTimeout(function() {\n          var newTextContent = getTextContent(link);\n          if (newTextContent === textContent) {\n            return;\n          }\n\n          // Only set href when new href looks like a valid url\n          if (newTextContent.match(urlRegExp)) {\n            link.setAttribute(\"href\", newTextContent);\n          }\n        }, 0);\n      });\n    },\n\n    _initObjectResizing: function() {\n      this.commands.exec(\"enableObjectResizing\", true);\n\n      // IE sets inline styles after resizing objects\n      // The following lines make sure that the width/height css properties\n      // are copied over to the width/height attributes\n      if (browser.supportsEvent(\"resizeend\")) {\n        var properties        = [\"width\", \"height\"],\n            propertiesLength  = properties.length,\n            element           = this.element;\n\n        dom.observe(element, \"resizeend\", function(event) {\n          var target = event.target || event.srcElement,\n              style  = target.style,\n              i      = 0,\n              property;\n\n          if (target.nodeName !== \"IMG\") {\n            return;\n          }\n\n          for (; i<propertiesLength; i++) {\n            property = properties[i];\n            if (style[property]) {\n              target.setAttribute(property, parseInt(style[property], 10));\n              style[property] = \"\";\n            }\n          }\n\n          // After resizing IE sometimes forgets to remove the old resize handles\n          wysihtml5.quirks.redraw(element);\n        });\n      }\n    },\n\n    _initUndoManager: function() {\n      this.undoManager = new wysihtml5.UndoManager(this.parent);\n    },\n\n    _initLineBreaking: function() {\n      var that                              = this,\n          USE_NATIVE_LINE_BREAK_INSIDE_TAGS = [\"LI\", \"P\", \"H1\", \"H2\", \"H3\", \"H4\", \"H5\", \"H6\"],\n          LIST_TAGS                         = [\"UL\", \"OL\", \"MENU\"];\n\n      function adjust(selectedNode) {\n        var parentElement = dom.getParentElement(selectedNode, { nodeName: [\"P\", \"DIV\"] }, 2);\n        if (parentElement && dom.contains(that.element, parentElement)) {\n          that.selection.executeAndRestore(function() {\n            if (that.config.useLineBreaks) {\n              dom.replaceWithChildNodes(parentElement);\n            } else if (parentElement.nodeName !== \"P\") {\n              dom.renameElement(parentElement, \"p\");\n            }\n          });\n        }\n      }\n\n      if (!this.config.useLineBreaks) {\n        dom.observe(this.element, [\"focus\", \"keydown\"], function() {\n          if (that.isEmpty()) {\n            var paragraph = that.doc.createElement(\"P\");\n            that.element.innerHTML = \"\";\n            that.element.appendChild(paragraph);\n            if (!browser.displaysCaretInEmptyContentEditableCorrectly()) {\n              paragraph.innerHTML = \"<br>\";\n              that.selection.setBefore(paragraph.firstChild);\n            } else {\n              that.selection.selectNode(paragraph, true);\n            }\n          }\n        });\n      }\n\n      // Under certain circumstances Chrome + Safari create nested <p> or <hX> tags after paste\n      // Inserting an invisible white space in front of it fixes the issue\n      // This is too hacky and causes selection not to replace content on paste in chrome\n     /* if (browser.createsNestedInvalidMarkupAfterPaste()) {\n        dom.observe(this.element, \"paste\", function(event) {\n          var invisibleSpace = that.doc.createTextNode(wysihtml5.INVISIBLE_SPACE);\n          that.selection.insertNode(invisibleSpace);\n        });\n      }*/\n\n\n      dom.observe(this.element, \"keydown\", function(event) {\n        var keyCode = event.keyCode;\n\n        if (event.shiftKey) {\n          return;\n        }\n\n        if (keyCode !== wysihtml5.ENTER_KEY && keyCode !== wysihtml5.BACKSPACE_KEY) {\n          return;\n        }\n        var blockElement = dom.getParentElement(that.selection.getSelectedNode(), { nodeName: USE_NATIVE_LINE_BREAK_INSIDE_TAGS }, 4);\n        if (blockElement) {\n          setTimeout(function() {\n            // Unwrap paragraph after leaving a list or a H1-6\n            var selectedNode = that.selection.getSelectedNode(),\n                list;\n\n            if (blockElement.nodeName === \"LI\") {\n              if (!selectedNode) {\n                return;\n              }\n\n              list = dom.getParentElement(selectedNode, { nodeName: LIST_TAGS }, 2);\n\n              if (!list) {\n                adjust(selectedNode);\n              }\n            }\n\n            if (keyCode === wysihtml5.ENTER_KEY && blockElement.nodeName.match(/^H[1-6]$/)) {\n              adjust(selectedNode);\n            }\n          }, 0);\n          return;\n        }\n\n        if (that.config.useLineBreaks && keyCode === wysihtml5.ENTER_KEY && !wysihtml5.browser.insertsLineBreaksOnReturn()) {\n          event.preventDefault();\n          that.commands.exec(\"insertLineBreak\");\n\n        }\n      });\n    }\n  });\n})(wysihtml5);\n;(function(wysihtml5) {\n  var dom             = wysihtml5.dom,\n      doc             = document,\n      win             = window,\n      HOST_TEMPLATE   = doc.createElement(\"div\"),\n      /**\n       * Styles to copy from textarea to the composer element\n       */\n      TEXT_FORMATTING = [\n        \"background-color\",\n        \"color\", \"cursor\",\n        \"font-family\", \"font-size\", \"font-style\", \"font-variant\", \"font-weight\",\n        \"line-height\", \"letter-spacing\",\n        \"text-align\", \"text-decoration\", \"text-indent\", \"text-rendering\",\n        \"word-break\", \"word-wrap\", \"word-spacing\"\n      ],\n      /**\n       * Styles to copy from textarea to the iframe\n       */\n      BOX_FORMATTING = [\n        \"background-color\",\n        \"border-collapse\",\n        \"border-bottom-color\", \"border-bottom-style\", \"border-bottom-width\",\n        \"border-left-color\", \"border-left-style\", \"border-left-width\",\n        \"border-right-color\", \"border-right-style\", \"border-right-width\",\n        \"border-top-color\", \"border-top-style\", \"border-top-width\",\n        \"clear\", \"display\", \"float\",\n        \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\",\n        \"outline-color\", \"outline-offset\", \"outline-width\", \"outline-style\",\n        \"padding-left\", \"padding-right\", \"padding-top\", \"padding-bottom\",\n        \"position\", \"top\", \"left\", \"right\", \"bottom\", \"z-index\",\n        \"vertical-align\", \"text-align\",\n        \"-webkit-box-sizing\", \"-moz-box-sizing\", \"-ms-box-sizing\", \"box-sizing\",\n        \"-webkit-box-shadow\", \"-moz-box-shadow\", \"-ms-box-shadow\",\"box-shadow\",\n        \"-webkit-border-top-right-radius\", \"-moz-border-radius-topright\", \"border-top-right-radius\",\n        \"-webkit-border-bottom-right-radius\", \"-moz-border-radius-bottomright\", \"border-bottom-right-radius\",\n        \"-webkit-border-bottom-left-radius\", \"-moz-border-radius-bottomleft\", \"border-bottom-left-radius\",\n        \"-webkit-border-top-left-radius\", \"-moz-border-radius-topleft\", \"border-top-left-radius\",\n        \"width\", \"height\"\n      ],\n      ADDITIONAL_CSS_RULES = [\n        \"html                 { height: 100%; }\",\n        \"body                 { height: 100%; padding: 1px 0 0 0; margin: -1px 0 0 0; }\",\n        \"body > p:first-child { margin-top: 0; }\",\n        \"._wysihtml5-temp     { display: none; }\",\n        wysihtml5.browser.isGecko ?\n          \"body.placeholder { color: graytext !important; }\" :\n          \"body.placeholder { color: #a9a9a9 !important; }\",\n        // Ensure that user see's broken images and can delete them\n        \"img:-moz-broken      { -moz-force-broken-image-icon: 1; height: 24px; width: 24px; }\"\n      ];\n\n  /**\n   * With \"setActive\" IE offers a smart way of focusing elements without scrolling them into view:\n   * http://msdn.microsoft.com/en-us/library/ms536738(v=vs.85).aspx\n   *\n   * Other browsers need a more hacky way: (pssst don't tell my mama)\n   * In order to prevent the element being scrolled into view when focusing it, we simply\n   * move it out of the scrollable area, focus it, and reset it's position\n   */\n  var focusWithoutScrolling = function(element) {\n    if (element.setActive) {\n      // Following line could cause a js error when the textarea is invisible\n      // See https://github.com/xing/wysihtml5/issues/9\n      try { element.setActive(); } catch(e) {}\n    } else {\n      var elementStyle = element.style,\n          originalScrollTop = doc.documentElement.scrollTop || doc.body.scrollTop,\n          originalScrollLeft = doc.documentElement.scrollLeft || doc.body.scrollLeft,\n          originalStyles = {\n            position:         elementStyle.position,\n            top:              elementStyle.top,\n            left:             elementStyle.left,\n            WebkitUserSelect: elementStyle.WebkitUserSelect\n          };\n\n      dom.setStyles({\n        position:         \"absolute\",\n        top:              \"-99999px\",\n        left:             \"-99999px\",\n        // Don't ask why but temporarily setting -webkit-user-select to none makes the whole thing performing smoother\n        WebkitUserSelect: \"none\"\n      }).on(element);\n\n      element.focus();\n\n      dom.setStyles(originalStyles).on(element);\n\n      if (win.scrollTo) {\n        // Some browser extensions unset this method to prevent annoyances\n        // \"Better PopUp Blocker\" for Chrome http://code.google.com/p/betterpopupblocker/source/browse/trunk/blockStart.js#100\n        // Issue: http://code.google.com/p/betterpopupblocker/issues/detail?id=1\n        win.scrollTo(originalScrollLeft, originalScrollTop);\n      }\n    }\n  };\n\n\n  wysihtml5.views.Composer.prototype.style = function() {\n    var that                  = this,\n        originalActiveElement = doc.querySelector(\":focus\"),\n        textareaElement       = this.textarea.element,\n        hasPlaceholder        = textareaElement.hasAttribute(\"placeholder\"),\n        originalPlaceholder   = hasPlaceholder && textareaElement.getAttribute(\"placeholder\"),\n        originalDisplayValue  = textareaElement.style.display,\n        originalDisabled      = textareaElement.disabled,\n        displayValueForCopying;\n\n    this.focusStylesHost      = HOST_TEMPLATE.cloneNode(false);\n    this.blurStylesHost       = HOST_TEMPLATE.cloneNode(false);\n    this.disabledStylesHost   = HOST_TEMPLATE.cloneNode(false);\n\n    // Remove placeholder before copying (as the placeholder has an affect on the computed style)\n    if (hasPlaceholder) {\n      textareaElement.removeAttribute(\"placeholder\");\n    }\n\n    if (textareaElement === originalActiveElement) {\n      textareaElement.blur();\n    }\n\n    // enable for copying styles\n    textareaElement.disabled = false;\n\n    // set textarea to display=\"none\" to get cascaded styles via getComputedStyle\n    textareaElement.style.display = displayValueForCopying = \"none\";\n\n    if ((textareaElement.getAttribute(\"rows\") && dom.getStyle(\"height\").from(textareaElement) === \"auto\") ||\n        (textareaElement.getAttribute(\"cols\") && dom.getStyle(\"width\").from(textareaElement) === \"auto\")) {\n      textareaElement.style.display = displayValueForCopying = originalDisplayValue;\n    }\n\n    // --------- iframe styles (has to be set before editor styles, otherwise IE9 sets wrong fontFamily on blurStylesHost) ---------\n    dom.copyStyles(BOX_FORMATTING).from(textareaElement).to(this.editableArea).andTo(this.blurStylesHost);\n\n    // --------- editor styles ---------\n    dom.copyStyles(TEXT_FORMATTING).from(textareaElement).to(this.element).andTo(this.blurStylesHost);\n\n    // --------- apply standard rules ---------\n    dom.insertCSS(ADDITIONAL_CSS_RULES).into(this.element.ownerDocument);\n\n    // --------- :disabled styles ---------\n    textareaElement.disabled = true;\n    dom.copyStyles(BOX_FORMATTING).from(textareaElement).to(this.disabledStylesHost);\n    dom.copyStyles(TEXT_FORMATTING).from(textareaElement).to(this.disabledStylesHost);\n    textareaElement.disabled = originalDisabled;\n\n    // --------- :focus styles ---------\n    textareaElement.style.display = originalDisplayValue;\n    focusWithoutScrolling(textareaElement);\n    textareaElement.style.display = displayValueForCopying;\n\n    dom.copyStyles(BOX_FORMATTING).from(textareaElement).to(this.focusStylesHost);\n    dom.copyStyles(TEXT_FORMATTING).from(textareaElement).to(this.focusStylesHost);\n\n    // reset textarea\n    textareaElement.style.display = originalDisplayValue;\n\n    dom.copyStyles([\"display\"]).from(textareaElement).to(this.editableArea);\n\n    // Make sure that we don't change the display style of the iframe when copying styles oblur/onfocus\n    // this is needed for when the change_view event is fired where the iframe is hidden and then\n    // the blur event fires and re-displays it\n    var boxFormattingStyles = wysihtml5.lang.array(BOX_FORMATTING).without([\"display\"]);\n\n    // --------- restore focus ---------\n    if (originalActiveElement) {\n      originalActiveElement.focus();\n    } else {\n      textareaElement.blur();\n    }\n\n    // --------- restore placeholder ---------\n    if (hasPlaceholder) {\n      textareaElement.setAttribute(\"placeholder\", originalPlaceholder);\n    }\n\n    // --------- Sync focus/blur styles ---------\n    this.parent.on(\"focus:composer\", function() {\n      dom.copyStyles(boxFormattingStyles) .from(that.focusStylesHost).to(that.editableArea);\n      dom.copyStyles(TEXT_FORMATTING)     .from(that.focusStylesHost).to(that.element);\n    });\n\n    this.parent.on(\"blur:composer\", function() {\n      dom.copyStyles(boxFormattingStyles) .from(that.blurStylesHost).to(that.editableArea);\n      dom.copyStyles(TEXT_FORMATTING)     .from(that.blurStylesHost).to(that.element);\n    });\n\n    this.parent.observe(\"disable:composer\", function() {\n      dom.copyStyles(boxFormattingStyles) .from(that.disabledStylesHost).to(that.editableArea);\n      dom.copyStyles(TEXT_FORMATTING)     .from(that.disabledStylesHost).to(that.element);\n    });\n\n    this.parent.observe(\"enable:composer\", function() {\n      dom.copyStyles(boxFormattingStyles) .from(that.blurStylesHost).to(that.editableArea);\n      dom.copyStyles(TEXT_FORMATTING)     .from(that.blurStylesHost).to(that.element);\n    });\n\n    return this;\n  };\n})(wysihtml5);\n;/**\n * Taking care of events\n *  - Simulating 'change' event on contentEditable element\n *  - Handling drag & drop logic\n *  - Catch paste events\n *  - Dispatch proprietary newword:composer event\n *  - Keyboard shortcuts\n */\n(function(wysihtml5) {\n  var dom       = wysihtml5.dom,\n      browser   = wysihtml5.browser,\n      /**\n       * Map keyCodes to query commands\n       */\n      shortcuts = {\n        \"66\": \"bold\",     // B\n        \"73\": \"italic\",   // I\n        \"85\": \"underline\" // U\n      };\n\n  var deleteAroundEditable = function(selection, uneditable, element) {\n    // merge node with previous node from uneditable\n    var prevNode = selection.getPreviousNode(uneditable, true),\n        curNode = selection.getSelectedNode();\n\n    if (curNode.nodeType !== 1 && curNode.parentNode !== element) { curNode = curNode.parentNode; }\n    if (prevNode) {\n      if (curNode.nodeType == 1) {\n        var first = curNode.firstChild;\n\n        if (prevNode.nodeType == 1) {\n          while (curNode.firstChild) {\n            prevNode.appendChild(curNode.firstChild);\n          }\n        } else {\n          while (curNode.firstChild) {\n            uneditable.parentNode.insertBefore(curNode.firstChild, uneditable);\n          }\n        }\n        if (curNode.parentNode) {\n          curNode.parentNode.removeChild(curNode);\n        }\n        selection.setBefore(first);\n      } else {\n        if (prevNode.nodeType == 1) {\n          prevNode.appendChild(curNode);\n        } else {\n          uneditable.parentNode.insertBefore(curNode, uneditable);\n        }\n        selection.setBefore(curNode);\n      }\n    }\n  };\n\n  var handleDeleteKeyPress = function(event, selection, element, composer) {\n    if (selection.isCollapsed()) {\n      if (selection.caretIsInTheBeginnig('LI')) {\n        event.preventDefault();\n        composer.commands.exec('outdentList');\n      } else if (selection.caretIsInTheBeginnig()) {\n        event.preventDefault();\n      } else {\n\n        if (selection.caretIsFirstInSelection() &&\n            selection.getPreviousNode() &&\n            selection.getPreviousNode().nodeName &&\n            (/^H\\d$/gi).test(selection.getPreviousNode().nodeName)\n        ) {\n          var prevNode = selection.getPreviousNode();\n          event.preventDefault();\n          if ((/^\\s*$/).test(prevNode.textContent || prevNode.innerText)) {\n            // heading is empty\n            prevNode.parentNode.removeChild(prevNode);\n          } else {\n            var range = prevNode.ownerDocument.createRange();\n            range.selectNodeContents(prevNode);\n            range.collapse(false);\n            selection.setSelection(range);\n          }\n        }\n\n        var beforeUneditable = selection.caretIsBeforeUneditable();\n        // Do a special delete if caret would delete uneditable\n        if (beforeUneditable) {\n          event.preventDefault();\n          deleteAroundEditable(selection, beforeUneditable, element);\n        }\n      }\n    } else {\n      if (selection.containsUneditable()) {\n        event.preventDefault();\n        selection.deleteContents();\n      }\n    }\n  };\n\n  var handleTabKeyDown = function(composer, element) {\n    if (!composer.selection.isCollapsed()) {\n      composer.selection.deleteContents();\n    } else if (composer.selection.caretIsInTheBeginnig('LI')) {\n      if (composer.commands.exec('indentList')) return;\n    }\n\n    // Is &emsp; close enough to tab. Could not find enough counter arguments for now.\n    composer.commands.exec(\"insertHTML\", \"&emsp;\");\n  };\n\n  wysihtml5.views.Composer.prototype.observe = function() {\n    var that                = this,\n        state               = this.getValue(false, false),\n        container           = (this.sandbox.getIframe) ? this.sandbox.getIframe() : this.sandbox.getContentEditable(),\n        element             = this.element,\n        focusBlurElement    = (browser.supportsEventsInIframeCorrectly() || this.sandbox.getContentEditable) ? element : this.sandbox.getWindow(),\n        pasteEvents         = [\"drop\", \"paste\", \"beforepaste\"],\n        interactionEvents   = [\"drop\", \"paste\", \"mouseup\", \"focus\", \"keyup\"];\n\n    // --------- destroy:composer event ---------\n    dom.observe(container, \"DOMNodeRemoved\", function() {\n      clearInterval(domNodeRemovedInterval);\n      that.parent.fire(\"destroy:composer\");\n    });\n\n    // DOMNodeRemoved event is not supported in IE 8\n    if (!browser.supportsMutationEvents()) {\n        var domNodeRemovedInterval = setInterval(function() {\n          if (!dom.contains(document.documentElement, container)) {\n            clearInterval(domNodeRemovedInterval);\n            that.parent.fire(\"destroy:composer\");\n          }\n        }, 250);\n    }\n\n    // --------- User interaction tracking --\n\n    dom.observe(focusBlurElement, interactionEvents, function() {\n      setTimeout(function() {\n        that.parent.fire(\"interaction\").fire(\"interaction:composer\");\n      }, 0);\n    });\n\n\n    if (this.config.handleTables) {\n      if(!this.tableClickHandle && this.doc.execCommand && wysihtml5.browser.supportsCommand(this.doc, \"enableObjectResizing\") && wysihtml5.browser.supportsCommand(this.doc, \"enableInlineTableEditing\")) {\n        if (this.sandbox.getIframe) {\n          this.tableClickHandle = dom.observe(container , [\"focus\", \"mouseup\", \"mouseover\"], function() {\n            that.doc.execCommand(\"enableObjectResizing\", false, \"false\");\n            that.doc.execCommand(\"enableInlineTableEditing\", false, \"false\");\n            that.tableClickHandle.stop();\n          });\n        } else {\n          setTimeout(function() {\n            that.doc.execCommand(\"enableObjectResizing\", false, \"false\");\n            that.doc.execCommand(\"enableInlineTableEditing\", false, \"false\");\n          }, 0);\n        }\n      }\n      this.tableSelection = wysihtml5.quirks.tableCellsSelection(element, that.parent);\n    }\n\n    // --------- Focus & blur logic ---------\n    dom.observe(focusBlurElement, \"focus\", function(event) {\n      that.parent.fire(\"focus\", event).fire(\"focus:composer\", event);\n\n      // Delay storing of state until all focus handler are fired\n      // especially the one which resets the placeholder\n      setTimeout(function() { state = that.getValue(false, false); }, 0);\n    });\n\n    dom.observe(focusBlurElement, \"blur\", function(event) {\n      if (state !== that.getValue(false, false)) {\n        //create change event if supported (all except IE8)\n        var changeevent = event;\n        if(typeof Object.create == 'function') {\n          changeevent = Object.create(event, { type: { value: 'change' } });\n        }\n        that.parent.fire(\"change\", changeevent).fire(\"change:composer\", changeevent);\n      }\n      that.parent.fire(\"blur\", event).fire(\"blur:composer\", event);\n    });\n\n    // --------- Drag & Drop logic ---------\n    dom.observe(element, \"dragenter\", function() {\n      that.parent.fire(\"unset_placeholder\");\n    });\n\n    dom.observe(element, pasteEvents, function(event) {\n      that.parent.fire(event.type, event).fire(event.type + \":composer\", event);\n    });\n\n\n    if (this.config.copyedFromMarking) {\n      // If supported the copied source is based directly on selection\n      // Very useful for webkit based browsers where copy will otherwise contain a lot of code and styles based on whatever and not actually in selection.\n      dom.observe(element, \"copy\", function(event) {\n        if (event.clipboardData) {\n          event.clipboardData.setData(\"text/html\", that.config.copyedFromMarking + that.selection.getHtml());\n          event.preventDefault();\n        }\n        that.parent.fire(event.type, event).fire(event.type + \":composer\", event);\n      });\n    }\n\n    // --------- neword event ---------\n    dom.observe(element, \"keyup\", function(event) {\n      var keyCode = event.keyCode;\n      if (keyCode === wysihtml5.SPACE_KEY || keyCode === wysihtml5.ENTER_KEY) {\n        that.parent.fire(\"newword:composer\");\n      }\n    });\n\n    this.parent.on(\"paste:composer\", function() {\n      setTimeout(function() { that.parent.fire(\"newword:composer\"); }, 0);\n    });\n\n    // --------- Make sure that images are selected when clicking on them ---------\n    if (!browser.canSelectImagesInContentEditable()) {\n      dom.observe(element, \"mousedown\", function(event) {\n        var target = event.target;\n        var allImages = element.querySelectorAll('img'),\n            notMyImages = element.querySelectorAll('.' + that.config.uneditableContainerClassname + ' img'),\n            myImages = wysihtml5.lang.array(allImages).without(notMyImages);\n\n        if (target.nodeName === \"IMG\" && wysihtml5.lang.array(myImages).contains(target)) {\n          that.selection.selectNode(target);\n        }\n      });\n    }\n\n    if (!browser.canSelectImagesInContentEditable()) {\n        dom.observe(element, \"drop\", function(event) {\n            // TODO: if I knew how to get dropped elements list from event I could limit it to only IMG element case\n            setTimeout(function() {\n                that.selection.getSelection().removeAllRanges();\n            }, 0);\n        });\n    }\n\n    if (browser.hasHistoryIssue() && browser.supportsSelectionModify()) {\n      dom.observe(element, \"keydown\", function(event) {\n        if (!event.metaKey && !event.ctrlKey) {\n          return;\n        }\n\n        var keyCode   = event.keyCode,\n            win       = element.ownerDocument.defaultView,\n            selection = win.getSelection();\n\n        if (keyCode === 37 || keyCode === 39) {\n          if (keyCode === 37) {\n            selection.modify(\"extend\", \"left\", \"lineboundary\");\n            if (!event.shiftKey) {\n              selection.collapseToStart();\n            }\n          }\n          if (keyCode === 39) {\n            selection.modify(\"extend\", \"right\", \"lineboundary\");\n            if (!event.shiftKey) {\n              selection.collapseToEnd();\n            }\n          }\n          event.preventDefault();\n        }\n      });\n    }\n\n    // --------- Shortcut logic ---------\n    dom.observe(element, \"keydown\", function(event) {\n      var keyCode  = event.keyCode,\n          command  = shortcuts[keyCode];\n      if ((event.ctrlKey || event.metaKey) && !event.altKey && command) {\n        that.commands.exec(command);\n        event.preventDefault();\n      }\n      if (keyCode === 8) {\n        // delete key\n        handleDeleteKeyPress(event, that.selection, element, that);\n      } else if (that.config.handleTabKey && keyCode === 9) {\n        event.preventDefault();\n        handleTabKeyDown(that, element);\n      }\n    });\n\n    // --------- Make sure that when pressing backspace/delete on selected images deletes the image and it's anchor ---------\n    dom.observe(element, \"keydown\", function(event) {\n      var target  = that.selection.getSelectedNode(true),\n          keyCode = event.keyCode,\n          parent;\n      if (target && target.nodeName === \"IMG\" && (keyCode === wysihtml5.BACKSPACE_KEY || keyCode === wysihtml5.DELETE_KEY)) { // 8 => backspace, 46 => delete\n        parent = target.parentNode;\n        // delete the <img>\n        parent.removeChild(target);\n        // and it's parent <a> too if it hasn't got any other child nodes\n        if (parent.nodeName === \"A\" && !parent.firstChild) {\n          parent.parentNode.removeChild(parent);\n        }\n\n        setTimeout(function() { wysihtml5.quirks.redraw(element); }, 0);\n        event.preventDefault();\n      }\n    });\n\n    // --------- IE 8+9 focus the editor when the iframe is clicked (without actually firing the 'focus' event on the <body>) ---------\n    if (!this.config.contentEditableMode && browser.hasIframeFocusIssue()) {\n      dom.observe(container, \"focus\", function() {\n        setTimeout(function() {\n          if (that.doc.querySelector(\":focus\") !== that.element) {\n            that.focus();\n          }\n        }, 0);\n      });\n\n      dom.observe(this.element, \"blur\", function() {\n        setTimeout(function() {\n          that.selection.getSelection().removeAllRanges();\n        }, 0);\n      });\n    }\n\n    // --------- Show url in tooltip when hovering links or images ---------\n    var titlePrefixes = {\n      IMG: \"Image: \",\n      A:   \"Link: \"\n    };\n\n    dom.observe(element, \"mouseover\", function(event) {\n      var target   = event.target,\n          nodeName = target.nodeName,\n          title;\n      if (nodeName !== \"A\" && nodeName !== \"IMG\") {\n        return;\n      }\n      var hasTitle = target.hasAttribute(\"title\");\n      if(!hasTitle){\n        title = titlePrefixes[nodeName] + (target.getAttribute(\"href\") || target.getAttribute(\"src\"));\n        target.setAttribute(\"title\", title);\n      }\n    });\n  };\n})(wysihtml5);\n;/**\n * Class that takes care that the value of the composer and the textarea is always in sync\n */\n(function(wysihtml5) {\n  var INTERVAL = 400;\n\n  wysihtml5.views.Synchronizer = Base.extend(\n    /** @scope wysihtml5.views.Synchronizer.prototype */ {\n\n    constructor: function(editor, textarea, composer) {\n      this.editor   = editor;\n      this.textarea = textarea;\n      this.composer = composer;\n\n      this._observe();\n    },\n\n    /**\n     * Sync html from composer to textarea\n     * Takes care of placeholders\n     * @param {Boolean} shouldParseHtml Whether the html should be sanitized before inserting it into the textarea\n     */\n    fromComposerToTextarea: function(shouldParseHtml) {\n      this.textarea.setValue(wysihtml5.lang.string(this.composer.getValue(false, false)).trim(), shouldParseHtml);\n    },\n\n    /**\n     * Sync value of textarea to composer\n     * Takes care of placeholders\n     * @param {Boolean} shouldParseHtml Whether the html should be sanitized before inserting it into the composer\n     */\n    fromTextareaToComposer: function(shouldParseHtml) {\n      var textareaValue = this.textarea.getValue(false, false);\n      if (textareaValue) {\n        this.composer.setValue(textareaValue, shouldParseHtml);\n      } else {\n        this.composer.clear();\n        this.editor.fire(\"set_placeholder\");\n      }\n    },\n\n    /**\n     * Invoke syncing based on view state\n     * @param {Boolean} shouldParseHtml Whether the html should be sanitized before inserting it into the composer/textarea\n     */\n    sync: function(shouldParseHtml) {\n      if (this.editor.currentView.name === \"textarea\") {\n        this.fromTextareaToComposer(shouldParseHtml);\n      } else {\n        this.fromComposerToTextarea(shouldParseHtml);\n      }\n    },\n\n    /**\n     * Initializes interval-based syncing\n     * also makes sure that on-submit the composer's content is synced with the textarea\n     * immediately when the form gets submitted\n     */\n    _observe: function() {\n      var interval,\n          that          = this,\n          form          = this.textarea.element.form,\n          startInterval = function() {\n            interval = setInterval(function() { that.fromComposerToTextarea(); }, INTERVAL);\n          },\n          stopInterval  = function() {\n            clearInterval(interval);\n            interval = null;\n          };\n\n      startInterval();\n\n      if (form) {\n        // If the textarea is in a form make sure that after onreset and onsubmit the composer\n        // has the correct state\n        wysihtml5.dom.observe(form, \"submit\", function() {\n          that.sync(true);\n        });\n        wysihtml5.dom.observe(form, \"reset\", function() {\n          setTimeout(function() { that.fromTextareaToComposer(); }, 0);\n        });\n      }\n\n      this.editor.on(\"change_view\", function(view) {\n        if (view === \"composer\" && !interval) {\n          that.fromTextareaToComposer(true);\n          startInterval();\n        } else if (view === \"textarea\") {\n          that.fromComposerToTextarea(true);\n          stopInterval();\n        }\n      });\n\n      this.editor.on(\"destroy:composer\", stopInterval);\n    }\n  });\n})(wysihtml5);\n;wysihtml5.views.Textarea = wysihtml5.views.View.extend(\n  /** @scope wysihtml5.views.Textarea.prototype */ {\n  name: \"textarea\",\n\n  constructor: function(parent, textareaElement, config) {\n    this.base(parent, textareaElement, config);\n\n    this._observe();\n  },\n\n  clear: function() {\n    this.element.value = \"\";\n  },\n\n  getValue: function(parse) {\n    var value = this.isEmpty() ? \"\" : this.element.value;\n    if (parse !== false) {\n      value = this.parent.parse(value);\n    }\n    return value;\n  },\n\n  setValue: function(html, parse) {\n    if (parse) {\n      html = this.parent.parse(html);\n    }\n    this.element.value = html;\n  },\n\n  cleanUp: function() {\n      var html = this.parent.parse(this.element.value);\n      this.element.value = html;\n  },\n\n  hasPlaceholderSet: function() {\n    var supportsPlaceholder = wysihtml5.browser.supportsPlaceholderAttributeOn(this.element),\n        placeholderText     = this.element.getAttribute(\"placeholder\") || null,\n        value               = this.element.value,\n        isEmpty             = !value;\n    return (supportsPlaceholder && isEmpty) || (value === placeholderText);\n  },\n\n  isEmpty: function() {\n    return !wysihtml5.lang.string(this.element.value).trim() || this.hasPlaceholderSet();\n  },\n\n  _observe: function() {\n    var element = this.element,\n        parent  = this.parent,\n        eventMapping = {\n          focusin:  \"focus\",\n          focusout: \"blur\"\n        },\n        /**\n         * Calling focus() or blur() on an element doesn't synchronously trigger the attached focus/blur events\n         * This is the case for focusin and focusout, so let's use them whenever possible, kkthxbai\n         */\n        events = wysihtml5.browser.supportsEvent(\"focusin\") ? [\"focusin\", \"focusout\", \"change\"] : [\"focus\", \"blur\", \"change\"];\n\n    parent.on(\"beforeload\", function() {\n      wysihtml5.dom.observe(element, events, function(event) {\n        var eventName = eventMapping[event.type] || event.type;\n        parent.fire(eventName).fire(eventName + \":textarea\");\n      });\n\n      wysihtml5.dom.observe(element, [\"paste\", \"drop\"], function() {\n        setTimeout(function() { parent.fire(\"paste\").fire(\"paste:textarea\"); }, 0);\n      });\n    });\n  }\n});\n;/**\n * WYSIHTML5 Editor\n *\n * @param {Element} editableElement Reference to the textarea which should be turned into a rich text interface\n * @param {Object} [config] See defaultConfig object below for explanation of each individual config option\n *\n * @events\n *    load\n *    beforeload (for internal use only)\n *    focus\n *    focus:composer\n *    focus:textarea\n *    blur\n *    blur:composer\n *    blur:textarea\n *    change\n *    change:composer\n *    change:textarea\n *    paste\n *    paste:composer\n *    paste:textarea\n *    newword:composer\n *    destroy:composer\n *    undo:composer\n *    redo:composer\n *    beforecommand:composer\n *    aftercommand:composer\n *    enable:composer\n *    disable:composer\n *    change_view\n */\n(function(wysihtml5) {\n  var undef;\n\n  var defaultConfig = {\n    // Give the editor a name, the name will also be set as class name on the iframe and on the iframe's body\n    name:                 undef,\n    // Whether the editor should look like the textarea (by adopting styles)\n    style:                true,\n    // Id of the toolbar element, pass falsey value if you don't want any toolbar logic\n    toolbar:              undef,\n    // Whether toolbar is displayed after init by script automatically.\n    // Can be set to false if toolobar is set to display only on editable area focus\n    showToolbarAfterInit: true,\n    // Whether urls, entered by the user should automatically become clickable-links\n    autoLink:             true,\n    // Includes table editing events and cell selection tracking\n    handleTables:         true,\n    // Tab key inserts tab into text as default behaviour. It can be disabled to regain keyboard navigation\n    handleTabKey:         true,\n    // Object which includes parser rules to apply when html gets cleaned\n    // See parser_rules/*.js for examples\n    parserRules:          { tags: { br: {}, span: {}, div: {}, p: {} }, classes: {} },\n    // Object which includes parser when the user inserts content via copy & paste. If null parserRules will be used instead\n    pasteParserRulesets: null,\n    // Parser method to use when the user inserts content\n    parser:               wysihtml5.dom.parse,\n    // Class name which should be set on the contentEditable element in the created sandbox iframe, can be styled via the 'stylesheets' option\n    composerClassName:    \"wysihtml5-editor\",\n    // Class name to add to the body when the wysihtml5 editor is supported\n    bodyClassName:        \"wysihtml5-supported\",\n    // By default wysihtml5 will insert a <br> for line breaks, set this to false to use <p>\n    useLineBreaks:        true,\n    // Array (or single string) of stylesheet urls to be loaded in the editor's iframe\n    stylesheets:          [],\n    // Placeholder text to use, defaults to the placeholder attribute on the textarea element\n    placeholderText:      undef,\n    // Whether the rich text editor should be rendered on touch devices (wysihtml5 >= 0.3.0 comes with basic support for iOS 5)\n    supportTouchDevices:  true,\n    // Whether senseless <span> elements (empty or without attributes) should be removed/replaced with their content\n    cleanUp:              true,\n    // Whether to use div instead of secure iframe\n    contentEditableMode: false,\n    // Classname of container that editor should not touch and pass through\n    // Pass false to disable\n    uneditableContainerClassname: \"wysihtml5-uneditable-container\",\n    // Browsers that support copied source handling will get a marking of the origin of the copied source (for determinig code cleanup rules on paste)\n    // Also copied source is based directly on selection - \n    // (very useful for webkit based browsers where copy will otherwise contain a lot of code and styles based on whatever and not actually in selection).\n    // If falsy value is passed source override is also disabled\n    copyedFromMarking: '<meta name=\"copied-from\" content=\"wysihtml5\">'\n  };\n\n  wysihtml5.Editor = wysihtml5.lang.Dispatcher.extend(\n    /** @scope wysihtml5.Editor.prototype */ {\n    constructor: function(editableElement, config) {\n      this.editableElement  = typeof(editableElement) === \"string\" ? document.getElementById(editableElement) : editableElement;\n      this.config           = wysihtml5.lang.object({}).merge(defaultConfig).merge(config).get();\n      this._isCompatible    = wysihtml5.browser.supported();\n\n      if (this.editableElement.nodeName.toLowerCase() != \"textarea\") {\n          this.config.contentEditableMode = true;\n          this.config.noTextarea = true;\n      }\n      if (!this.config.noTextarea) {\n          this.textarea         = new wysihtml5.views.Textarea(this, this.editableElement, this.config);\n          this.currentView      = this.textarea;\n      }\n\n      // Sort out unsupported/unwanted browsers here\n      if (!this._isCompatible || (!this.config.supportTouchDevices && wysihtml5.browser.isTouchDevice())) {\n        var that = this;\n        setTimeout(function() { that.fire(\"beforeload\").fire(\"load\"); }, 0);\n        return;\n      }\n\n      // Add class name to body, to indicate that the editor is supported\n      wysihtml5.dom.addClass(document.body, this.config.bodyClassName);\n\n      this.composer = new wysihtml5.views.Composer(this, this.editableElement, this.config);\n      this.currentView = this.composer;\n\n      if (typeof(this.config.parser) === \"function\") {\n        this._initParser();\n      }\n\n      this.on(\"beforeload\", this.handleBeforeLoad);\n    },\n\n    handleBeforeLoad: function() {\n        if (!this.config.noTextarea) {\n            this.synchronizer = new wysihtml5.views.Synchronizer(this, this.textarea, this.composer);\n        }\n        if (this.config.toolbar) {\n          this.toolbar = new wysihtml5.toolbar.Toolbar(this, this.config.toolbar, this.config.showToolbarAfterInit);\n        }\n    },\n\n    isCompatible: function() {\n      return this._isCompatible;\n    },\n\n    clear: function() {\n      this.currentView.clear();\n      return this;\n    },\n\n    getValue: function(parse, clearInternals) {\n      return this.currentView.getValue(parse, clearInternals);\n    },\n\n    setValue: function(html, parse) {\n      this.fire(\"unset_placeholder\");\n\n      if (!html) {\n        return this.clear();\n      }\n\n      this.currentView.setValue(html, parse);\n      return this;\n    },\n\n    cleanUp: function() {\n        this.currentView.cleanUp();\n    },\n\n    focus: function(setToEnd) {\n      this.currentView.focus(setToEnd);\n      return this;\n    },\n\n    /**\n     * Deactivate editor (make it readonly)\n     */\n    disable: function() {\n      this.currentView.disable();\n      return this;\n    },\n\n    /**\n     * Activate editor\n     */\n    enable: function() {\n      this.currentView.enable();\n      return this;\n    },\n\n    isEmpty: function() {\n      return this.currentView.isEmpty();\n    },\n\n    hasPlaceholderSet: function() {\n      return this.currentView.hasPlaceholderSet();\n    },\n\n    parse: function(htmlOrElement, clearInternals) {\n      var parseContext = (this.config.contentEditableMode) ? document : ((this.composer) ? this.composer.sandbox.getDocument() : null);\n      var returnValue = this.config.parser(htmlOrElement, {\n        \"rules\": this.config.parserRules,\n        \"cleanUp\": this.config.cleanUp,\n        \"context\": parseContext,\n        \"uneditableClass\": this.config.uneditableContainerClassname,\n        \"clearInternals\" : clearInternals\n      });\n      if (typeof(htmlOrElement) === \"object\") {\n        wysihtml5.quirks.redraw(htmlOrElement);\n      }\n      return returnValue;\n    },\n\n    /**\n     * Prepare html parser logic\n     *  - Observes for paste and drop\n     */\n    _initParser: function() {\n      var that = this,\n          oldHtml,\n          cleanHtml;\n\n      if (wysihtml5.browser.supportsModenPaste()) {\n        this.on(\"paste:composer\", function(event) {\n          event.preventDefault();\n          oldHtml = wysihtml5.dom.getPastedHtml(event);\n          if (oldHtml) {\n            that._cleanAndPaste(oldHtml);\n          }\n        });\n\n      } else {\n        this.on(\"beforepaste:composer\", function(event) {\n          event.preventDefault();\n          wysihtml5.dom.getPastedHtmlWithDiv(that.composer, function(pastedHTML) {\n            if (pastedHTML) {\n              that._cleanAndPaste(pastedHTML);\n            }\n          });\n        });\n\n      }\n    },\n\n    _cleanAndPaste: function (oldHtml) {\n      var cleanHtml = wysihtml5.quirks.cleanPastedHTML(oldHtml, {\n        \"referenceNode\": this.composer.element,\n        \"rules\": this.config.pasteParserRulesets || [{\"set\": this.config.parserRules}],\n        \"uneditableClass\": this.config.uneditableContainerClassname\n      });\n      this.composer.selection.deleteContents();\n      this.composer.selection.insertHTML(cleanHtml);\n    }\n  });\n})(wysihtml5);\n;/**\n * Toolbar Dialog\n *\n * @param {Element} link The toolbar link which causes the dialog to show up\n * @param {Element} container The dialog container\n *\n * @example\n *    <!-- Toolbar link -->\n *    <a data-wysihtml5-command=\"insertImage\">insert an image</a>\n *\n *    <!-- Dialog -->\n *    <div data-wysihtml5-dialog=\"insertImage\" style=\"display: none;\">\n *      <label>\n *        URL: <input data-wysihtml5-dialog-field=\"src\" value=\"http://\">\n *      </label>\n *      <label>\n *        Alternative text: <input data-wysihtml5-dialog-field=\"alt\" value=\"\">\n *      </label>\n *    </div>\n *\n *    <script>\n *      var dialog = new wysihtml5.toolbar.Dialog(\n *        document.querySelector(\"[data-wysihtml5-command='insertImage']\"),\n *        document.querySelector(\"[data-wysihtml5-dialog='insertImage']\")\n *      );\n *      dialog.observe(\"save\", function(attributes) {\n *        // do something\n *      });\n *    </script>\n */\n(function(wysihtml5) {\n  var dom                     = wysihtml5.dom,\n      CLASS_NAME_OPENED       = \"wysihtml5-command-dialog-opened\",\n      SELECTOR_FORM_ELEMENTS  = \"input, select, textarea\",\n      SELECTOR_FIELDS         = \"[data-wysihtml5-dialog-field]\",\n      ATTRIBUTE_FIELDS        = \"data-wysihtml5-dialog-field\";\n\n\n  wysihtml5.toolbar.Dialog = wysihtml5.lang.Dispatcher.extend(\n    /** @scope wysihtml5.toolbar.Dialog.prototype */ {\n    constructor: function(link, container) {\n      this.link       = link;\n      this.container  = container;\n    },\n\n    _observe: function() {\n      if (this._observed) {\n        return;\n      }\n\n      var that = this,\n          callbackWrapper = function(event) {\n            var attributes = that._serialize();\n            if (attributes == that.elementToChange) {\n              that.fire(\"edit\", attributes);\n            } else {\n              that.fire(\"save\", attributes);\n            }\n            that.hide();\n            event.preventDefault();\n            event.stopPropagation();\n          };\n\n      dom.observe(that.link, \"click\", function() {\n        if (dom.hasClass(that.link, CLASS_NAME_OPENED)) {\n          setTimeout(function() { that.hide(); }, 0);\n        }\n      });\n\n      dom.observe(this.container, \"keydown\", function(event) {\n        var keyCode = event.keyCode;\n        if (keyCode === wysihtml5.ENTER_KEY) {\n          callbackWrapper(event);\n        }\n        if (keyCode === wysihtml5.ESCAPE_KEY) {\n          that.fire(\"cancel\");\n          that.hide();\n        }\n      });\n\n      dom.delegate(this.container, \"[data-wysihtml5-dialog-action=save]\", \"click\", callbackWrapper);\n\n      dom.delegate(this.container, \"[data-wysihtml5-dialog-action=cancel]\", \"click\", function(event) {\n        that.fire(\"cancel\");\n        that.hide();\n        event.preventDefault();\n        event.stopPropagation();\n      });\n\n      var formElements  = this.container.querySelectorAll(SELECTOR_FORM_ELEMENTS),\n          i             = 0,\n          length        = formElements.length,\n          _clearInterval = function() { clearInterval(that.interval); };\n      for (; i<length; i++) {\n        dom.observe(formElements[i], \"change\", _clearInterval);\n      }\n\n      this._observed = true;\n    },\n\n    /**\n     * Grabs all fields in the dialog and puts them in key=>value style in an object which\n     * then gets returned\n     */\n    _serialize: function() {\n      var data    = this.elementToChange || {},\n          fields  = this.container.querySelectorAll(SELECTOR_FIELDS),\n          length  = fields.length,\n          i       = 0;\n\n      for (; i<length; i++) {\n        data[fields[i].getAttribute(ATTRIBUTE_FIELDS)] = fields[i].value;\n      }\n      return data;\n    },\n\n    /**\n     * Takes the attributes of the \"elementToChange\"\n     * and inserts them in their corresponding dialog input fields\n     *\n     * Assume the \"elementToChange\" looks like this:\n     *    <a href=\"http://www.google.com\" target=\"_blank\">foo</a>\n     *\n     * and we have the following dialog:\n     *    <input type=\"text\" data-wysihtml5-dialog-field=\"href\" value=\"\">\n     *    <input type=\"text\" data-wysihtml5-dialog-field=\"target\" value=\"\">\n     *\n     * after calling _interpolate() the dialog will look like this\n     *    <input type=\"text\" data-wysihtml5-dialog-field=\"href\" value=\"http://www.google.com\">\n     *    <input type=\"text\" data-wysihtml5-dialog-field=\"target\" value=\"_blank\">\n     *\n     * Basically it adopted the attribute values into the corresponding input fields\n     *\n     */\n    _interpolate: function(avoidHiddenFields) {\n      var field,\n          fieldName,\n          newValue,\n          focusedElement = document.querySelector(\":focus\"),\n          fields         = this.container.querySelectorAll(SELECTOR_FIELDS),\n          length         = fields.length,\n          i              = 0;\n      for (; i<length; i++) {\n        field = fields[i];\n\n        // Never change elements where the user is currently typing in\n        if (field === focusedElement) {\n          continue;\n        }\n\n        // Don't update hidden fields\n        // See https://github.com/xing/wysihtml5/pull/14\n        if (avoidHiddenFields && field.type === \"hidden\") {\n          continue;\n        }\n\n        fieldName = field.getAttribute(ATTRIBUTE_FIELDS);\n        newValue  = (this.elementToChange && typeof(this.elementToChange) !== 'boolean') ? (this.elementToChange.getAttribute(fieldName) || \"\") : field.defaultValue;\n        field.value = newValue;\n      }\n    },\n\n    /**\n     * Show the dialog element\n     */\n    show: function(elementToChange) {\n      if (dom.hasClass(this.link, CLASS_NAME_OPENED)) {\n        return;\n      }\n\n      var that        = this,\n          firstField  = this.container.querySelector(SELECTOR_FORM_ELEMENTS);\n      this.elementToChange = elementToChange;\n      this._observe();\n      this._interpolate();\n      if (elementToChange) {\n        this.interval = setInterval(function() { that._interpolate(true); }, 500);\n      }\n      dom.addClass(this.link, CLASS_NAME_OPENED);\n      this.container.style.display = \"\";\n      this.fire(\"show\");\n      if (firstField && !elementToChange) {\n        try {\n          firstField.focus();\n        } catch(e) {}\n      }\n    },\n\n    /**\n     * Hide the dialog element\n     */\n    hide: function() {\n      clearInterval(this.interval);\n      this.elementToChange = null;\n      dom.removeClass(this.link, CLASS_NAME_OPENED);\n      this.container.style.display = \"none\";\n      this.fire(\"hide\");\n    }\n  });\n})(wysihtml5);\n;/**\n * Converts speech-to-text and inserts this into the editor\n * As of now (2011/03/25) this only is supported in Chrome >= 11\n *\n * Note that it sends the recorded audio to the google speech recognition api:\n * http://stackoverflow.com/questions/4361826/does-chrome-have-buil-in-speech-recognition-for-input-type-text-x-webkit-speec\n *\n * Current HTML5 draft can be found here\n * http://lists.w3.org/Archives/Public/public-xg-htmlspeech/2011Feb/att-0020/api-draft.html\n *\n * \"Accessing Google Speech API Chrome 11\"\n * http://mikepultz.com/2011/03/accessing-google-speech-api-chrome-11/\n */\n(function(wysihtml5) {\n  var dom = wysihtml5.dom;\n\n  var linkStyles = {\n    position: \"relative\"\n  };\n\n  var wrapperStyles = {\n    left:     0,\n    margin:   0,\n    opacity:  0,\n    overflow: \"hidden\",\n    padding:  0,\n    position: \"absolute\",\n    top:      0,\n    zIndex:   1\n  };\n\n  var inputStyles = {\n    cursor:     \"inherit\",\n    fontSize:   \"50px\",\n    height:     \"50px\",\n    marginTop:  \"-25px\",\n    outline:    0,\n    padding:    0,\n    position:   \"absolute\",\n    right:      \"-4px\",\n    top:        \"50%\"\n  };\n\n  var inputAttributes = {\n    \"x-webkit-speech\": \"\",\n    \"speech\":          \"\"\n  };\n\n  wysihtml5.toolbar.Speech = function(parent, link) {\n    var input = document.createElement(\"input\");\n    if (!wysihtml5.browser.supportsSpeechApiOn(input)) {\n      link.style.display = \"none\";\n      return;\n    }\n    var lang = parent.editor.textarea.element.getAttribute(\"lang\");\n    if (lang) {\n      inputAttributes.lang = lang;\n    }\n\n    var wrapper = document.createElement(\"div\");\n\n    wysihtml5.lang.object(wrapperStyles).merge({\n      width:  link.offsetWidth  + \"px\",\n      height: link.offsetHeight + \"px\"\n    });\n\n    dom.insert(input).into(wrapper);\n    dom.insert(wrapper).into(link);\n\n    dom.setStyles(inputStyles).on(input);\n    dom.setAttributes(inputAttributes).on(input);\n\n    dom.setStyles(wrapperStyles).on(wrapper);\n    dom.setStyles(linkStyles).on(link);\n\n    var eventName = \"onwebkitspeechchange\" in input ? \"webkitspeechchange\" : \"speechchange\";\n    dom.observe(input, eventName, function() {\n      parent.execCommand(\"insertText\", input.value);\n      input.value = \"\";\n    });\n\n    dom.observe(input, \"click\", function(event) {\n      if (dom.hasClass(link, \"wysihtml5-command-disabled\")) {\n        event.preventDefault();\n      }\n\n      event.stopPropagation();\n    });\n  };\n})(wysihtml5);\n;/**\n * Toolbar\n *\n * @param {Object} parent Reference to instance of Editor instance\n * @param {Element} container Reference to the toolbar container element\n *\n * @example\n *    <div id=\"toolbar\">\n *      <a data-wysihtml5-command=\"createLink\">insert link</a>\n *      <a data-wysihtml5-command=\"formatBlock\" data-wysihtml5-command-value=\"h1\">insert h1</a>\n *    </div>\n *\n *    <script>\n *      var toolbar = new wysihtml5.toolbar.Toolbar(editor, document.getElementById(\"toolbar\"));\n *    </script>\n */\n(function(wysihtml5) {\n  var CLASS_NAME_COMMAND_DISABLED   = \"wysihtml5-command-disabled\",\n      CLASS_NAME_COMMANDS_DISABLED  = \"wysihtml5-commands-disabled\",\n      CLASS_NAME_COMMAND_ACTIVE     = \"wysihtml5-command-active\",\n      CLASS_NAME_ACTION_ACTIVE      = \"wysihtml5-action-active\",\n      dom                           = wysihtml5.dom;\n\n  wysihtml5.toolbar.Toolbar = Base.extend(\n    /** @scope wysihtml5.toolbar.Toolbar.prototype */ {\n    constructor: function(editor, container, showOnInit) {\n      this.editor     = editor;\n      this.container  = typeof(container) === \"string\" ? document.getElementById(container) : container;\n      this.composer   = editor.composer;\n\n      this._getLinks(\"command\");\n      this._getLinks(\"action\");\n\n      this._observe();\n      if (showOnInit) { this.show(); }\n\n      if (editor.config.classNameCommandDisabled != null) {\n        CLASS_NAME_COMMAND_DISABLED = editor.config.classNameCommandDisabled;\n      }\n      if (editor.config.classNameCommandsDisabled != null) {\n        CLASS_NAME_COMMANDS_DISABLED = editor.config.classNameCommandsDisabled;\n      }\n      if (editor.config.classNameCommandActive != null) {\n        CLASS_NAME_COMMAND_ACTIVE = editor.config.classNameCommandActive;\n      }\n      if (editor.config.classNameActionActive != null) {\n        CLASS_NAME_ACTION_ACTIVE = editor.config.classNameActionActive;\n      }\n\n      var speechInputLinks  = this.container.querySelectorAll(\"[data-wysihtml5-command=insertSpeech]\"),\n          length            = speechInputLinks.length,\n          i                 = 0;\n      for (; i<length; i++) {\n        new wysihtml5.toolbar.Speech(this, speechInputLinks[i]);\n      }\n    },\n\n    _getLinks: function(type) {\n      var links   = this[type + \"Links\"] = wysihtml5.lang.array(this.container.querySelectorAll(\"[data-wysihtml5-\" + type + \"]\")).get(),\n          length  = links.length,\n          i       = 0,\n          mapping = this[type + \"Mapping\"] = {},\n          link,\n          group,\n          name,\n          value,\n          dialog;\n      for (; i<length; i++) {\n        link    = links[i];\n        name    = link.getAttribute(\"data-wysihtml5-\" + type);\n        value   = link.getAttribute(\"data-wysihtml5-\" + type + \"-value\");\n        group   = this.container.querySelector(\"[data-wysihtml5-\" + type + \"-group='\" + name + \"']\");\n        dialog  = this._getDialog(link, name);\n\n        mapping[name + \":\" + value] = {\n          link:   link,\n          group:  group,\n          name:   name,\n          value:  value,\n          dialog: dialog,\n          state:  false\n        };\n      }\n    },\n\n    _getDialog: function(link, command) {\n      var that          = this,\n          dialogElement = this.container.querySelector(\"[data-wysihtml5-dialog='\" + command + \"']\"),\n          dialog,\n          caretBookmark;\n\n      if (dialogElement) {\n        if (wysihtml5.toolbar[\"Dialog_\" + command]) {\n            dialog = new wysihtml5.toolbar[\"Dialog_\" + command](link, dialogElement);\n        } else {\n            dialog = new wysihtml5.toolbar.Dialog(link, dialogElement);\n        }\n\n        dialog.on(\"show\", function() {\n          caretBookmark = that.composer.selection.getBookmark();\n\n          that.editor.fire(\"show:dialog\", { command: command, dialogContainer: dialogElement, commandLink: link });\n        });\n\n        dialog.on(\"save\", function(attributes) {\n          if (caretBookmark) {\n            that.composer.selection.setBookmark(caretBookmark);\n          }\n          that._execCommand(command, attributes);\n\n          that.editor.fire(\"save:dialog\", { command: command, dialogContainer: dialogElement, commandLink: link });\n        });\n\n        dialog.on(\"cancel\", function() {\n          that.editor.focus(false);\n          that.editor.fire(\"cancel:dialog\", { command: command, dialogContainer: dialogElement, commandLink: link });\n        });\n      }\n      return dialog;\n    },\n\n    /**\n     * @example\n     *    var toolbar = new wysihtml5.Toolbar();\n     *    // Insert a <blockquote> element or wrap current selection in <blockquote>\n     *    toolbar.execCommand(\"formatBlock\", \"blockquote\");\n     */\n    execCommand: function(command, commandValue) {\n      if (this.commandsDisabled) {\n        return;\n      }\n\n      var commandObj = this.commandMapping[command + \":\" + commandValue];\n\n      // Show dialog when available\n      if (commandObj && commandObj.dialog && !commandObj.state) {\n        commandObj.dialog.show();\n      } else {\n        this._execCommand(command, commandValue);\n      }\n    },\n\n    _execCommand: function(command, commandValue) {\n      // Make sure that composer is focussed (false => don't move caret to the end)\n      this.editor.focus(false);\n\n      this.composer.commands.exec(command, commandValue);\n      this._updateLinkStates();\n    },\n\n    execAction: function(action) {\n      var editor = this.editor;\n      if (action === \"change_view\") {\n        if (editor.textarea) {\n            if (editor.currentView === editor.textarea) {\n              editor.fire(\"change_view\", \"composer\");\n            } else {\n              editor.fire(\"change_view\", \"textarea\");\n            }\n        }\n      }\n      if (action == \"showSource\") {\n          editor.fire(\"showSource\");\n      }\n    },\n\n    _observe: function() {\n      var that      = this,\n          editor    = this.editor,\n          container = this.container,\n          links     = this.commandLinks.concat(this.actionLinks),\n          length    = links.length,\n          i         = 0;\n\n      for (; i<length; i++) {\n        // 'javascript:;' and unselectable=on Needed for IE, but done in all browsers to make sure that all get the same css applied\n        // (you know, a:link { ... } doesn't match anchors with missing href attribute)\n        if (links[i].nodeName === \"A\") {\n          dom.setAttributes({\n            href:         \"javascript:;\",\n            unselectable: \"on\"\n          }).on(links[i]);\n        } else {\n          dom.setAttributes({ unselectable: \"on\" }).on(links[i]);\n        }\n      }\n\n      // Needed for opera and chrome\n      dom.delegate(container, \"[data-wysihtml5-command], [data-wysihtml5-action]\", \"mousedown\", function(event) { event.preventDefault(); });\n\n      dom.delegate(container, \"[data-wysihtml5-command]\", \"click\", function(event) {\n        var link          = this,\n            command       = link.getAttribute(\"data-wysihtml5-command\"),\n            commandValue  = link.getAttribute(\"data-wysihtml5-command-value\");\n        that.execCommand(command, commandValue);\n        event.preventDefault();\n      });\n\n      dom.delegate(container, \"[data-wysihtml5-action]\", \"click\", function(event) {\n        var action = this.getAttribute(\"data-wysihtml5-action\");\n        that.execAction(action);\n        event.preventDefault();\n      });\n\n      editor.on(\"interaction:composer\", function() {\n          that._updateLinkStates();\n      });\n\n      editor.on(\"focus:composer\", function() {\n        that.bookmark = null;\n      });\n\n      if (this.editor.config.handleTables) {\n          editor.on(\"tableselect:composer\", function() {\n              that.container.querySelectorAll('[data-wysihtml5-hiddentools=\"table\"]')[0].style.display = \"\";\n          });\n          editor.on(\"tableunselect:composer\", function() {\n              that.container.querySelectorAll('[data-wysihtml5-hiddentools=\"table\"]')[0].style.display = \"none\";\n          });\n      }\n\n      editor.on(\"change_view\", function(currentView) {\n        // Set timeout needed in order to let the blur event fire first\n        if (editor.textarea) {\n            setTimeout(function() {\n              that.commandsDisabled = (currentView !== \"composer\");\n              that._updateLinkStates();\n              if (that.commandsDisabled) {\n                dom.addClass(container, CLASS_NAME_COMMANDS_DISABLED);\n              } else {\n                dom.removeClass(container, CLASS_NAME_COMMANDS_DISABLED);\n              }\n            }, 0);\n        }\n      });\n    },\n\n    _updateLinkStates: function() {\n\n      var commandMapping    = this.commandMapping,\n          actionMapping     = this.actionMapping,\n          i,\n          state,\n          action,\n          command;\n      // every millisecond counts... this is executed quite often\n      for (i in commandMapping) {\n        command = commandMapping[i];\n        if (this.commandsDisabled) {\n          state = false;\n          dom.removeClass(command.link, CLASS_NAME_COMMAND_ACTIVE);\n          if (command.group) {\n            dom.removeClass(command.group, CLASS_NAME_COMMAND_ACTIVE);\n          }\n          if (command.dialog) {\n            command.dialog.hide();\n          }\n        } else {\n          state = this.composer.commands.state(command.name, command.value);\n          dom.removeClass(command.link, CLASS_NAME_COMMAND_DISABLED);\n          if (command.group) {\n            dom.removeClass(command.group, CLASS_NAME_COMMAND_DISABLED);\n          }\n        }\n        if (command.state === state) {\n          continue;\n        }\n\n        command.state = state;\n        if (state) {\n          dom.addClass(command.link, CLASS_NAME_COMMAND_ACTIVE);\n          if (command.group) {\n            dom.addClass(command.group, CLASS_NAME_COMMAND_ACTIVE);\n          }\n          if (command.dialog) {\n            if (typeof(state) === \"object\" || wysihtml5.lang.object(state).isArray()) {\n\n              if (!command.dialog.multiselect && wysihtml5.lang.object(state).isArray()) {\n                // Grab first and only object/element in state array, otherwise convert state into boolean\n                // to avoid showing a dialog for multiple selected elements which may have different attributes\n                // eg. when two links with different href are selected, the state will be an array consisting of both link elements\n                // but the dialog interface can only update one\n                state = state.length === 1 ? state[0] : true;\n                command.state = state;\n              }\n              command.dialog.show(state);\n            } else {\n              command.dialog.hide();\n            }\n          }\n        } else {\n          dom.removeClass(command.link, CLASS_NAME_COMMAND_ACTIVE);\n          if (command.group) {\n            dom.removeClass(command.group, CLASS_NAME_COMMAND_ACTIVE);\n          }\n          if (command.dialog) {\n            command.dialog.hide();\n          }\n        }\n      }\n\n      for (i in actionMapping) {\n        action = actionMapping[i];\n\n        if (action.name === \"change_view\") {\n          action.state = this.editor.currentView === this.editor.textarea;\n          if (action.state) {\n            dom.addClass(action.link, CLASS_NAME_ACTION_ACTIVE);\n          } else {\n            dom.removeClass(action.link, CLASS_NAME_ACTION_ACTIVE);\n          }\n        }\n      }\n    },\n\n    show: function() {\n      this.container.style.display = \"\";\n    },\n\n    hide: function() {\n      this.container.style.display = \"none\";\n    }\n  });\n\n})(wysihtml5);\n;(function(wysihtml5) {\n    wysihtml5.toolbar.Dialog_createTable = wysihtml5.toolbar.Dialog.extend({\n        show: function(elementToChange) {\n            this.base(elementToChange);\n\n        }\n\n    });\n})(wysihtml5);\n;(function(wysihtml5) {\n  var dom                     = wysihtml5.dom,\n      SELECTOR_FIELDS         = \"[data-wysihtml5-dialog-field]\",\n      ATTRIBUTE_FIELDS        = \"data-wysihtml5-dialog-field\";\n\n  wysihtml5.toolbar.Dialog_foreColorStyle = wysihtml5.toolbar.Dialog.extend({\n    multiselect: true,\n\n    _serialize: function() {\n      var data    = {},\n          fields  = this.container.querySelectorAll(SELECTOR_FIELDS),\n          length  = fields.length,\n          i       = 0;\n\n      for (; i<length; i++) {\n        data[fields[i].getAttribute(ATTRIBUTE_FIELDS)] = fields[i].value;\n      }\n      return data;\n    },\n\n    _interpolate: function(avoidHiddenFields) {\n      var field,\n          fieldName,\n          newValue,\n          focusedElement = document.querySelector(\":focus\"),\n          fields         = this.container.querySelectorAll(SELECTOR_FIELDS),\n          length         = fields.length,\n          i              = 0,\n          firstElement   = (this.elementToChange) ? ((wysihtml5.lang.object(this.elementToChange).isArray()) ? this.elementToChange[0] : this.elementToChange) : null,\n          colorStr       = (firstElement) ? firstElement.getAttribute('style') : null,\n          color          = (colorStr) ? wysihtml5.quirks.styleParser.parseColor(colorStr, \"color\") : null;\n\n      for (; i<length; i++) {\n        field = fields[i];\n        // Never change elements where the user is currently typing in\n        if (field === focusedElement) {\n          continue;\n        }\n        // Don't update hidden fields3\n        if (avoidHiddenFields && field.type === \"hidden\") {\n          continue;\n        }\n        if (field.getAttribute(ATTRIBUTE_FIELDS) === \"color\") {\n          if (color) {\n            if (color[3] && color[3] != 1) {\n              field.value = \"rgba(\" + color[0] + \",\" + color[1] + \",\" + color[2] + \",\" + color[3] + \");\";\n            } else {\n              field.value = \"rgb(\" + color[0] + \",\" + color[1] + \",\" + color[2] + \");\";\n            }\n          } else {\n            field.value = \"rgb(0,0,0);\";\n          }\n        }\n      }\n    }\n\n  });\n})(wysihtml5);\n;(function(wysihtml5) {\n  var dom                     = wysihtml5.dom,\n      SELECTOR_FIELDS         = \"[data-wysihtml5-dialog-field]\",\n      ATTRIBUTE_FIELDS        = \"data-wysihtml5-dialog-field\";\n\n  wysihtml5.toolbar.Dialog_fontSizeStyle = wysihtml5.toolbar.Dialog.extend({\n    multiselect: true,\n\n    _serialize: function() {\n      return {\"size\" : this.container.querySelector('[data-wysihtml5-dialog-field=\"size\"]').value};\n    },\n\n    _interpolate: function(avoidHiddenFields) {\n      var focusedElement = document.querySelector(\":focus\"),\n          field          = this.container.querySelector(\"[data-wysihtml5-dialog-field='size']\"),\n          firstElement   = (this.elementToChange) ? ((wysihtml5.lang.object(this.elementToChange).isArray()) ? this.elementToChange[0] : this.elementToChange) : null,\n          styleStr       = (firstElement) ? firstElement.getAttribute('style') : null,\n          size           = (styleStr) ? wysihtml5.quirks.styleParser.parseFontSize(styleStr) : null;\n\n      if (field && field !== focusedElement && size && !(/^\\s*$/).test(size)) {\n        field.value = size;\n      }\n    }\n\n  });\n})(wysihtml5);\n/*!\n\n handlebars v1.3.0\n\nCopyright (C) 2011 by Yehuda Katz\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n@license\n*/\nvar Handlebars=function(){var a=function(){\"use strict\";function a(a){this.string=a}var b;return a.prototype.toString=function(){return\"\"+this.string},b=a}(),b=function(a){\"use strict\";function b(a){return h[a]||\"&amp;\"}function c(a,b){for(var c in b)Object.prototype.hasOwnProperty.call(b,c)&&(a[c]=b[c])}function d(a){return a instanceof g?a.toString():a||0===a?(a=\"\"+a,j.test(a)?a.replace(i,b):a):\"\"}function e(a){return a||0===a?m(a)&&0===a.length?!0:!1:!0}var f={},g=a,h={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#x27;\",\"`\":\"&#x60;\"},i=/[&<>\"'`]/g,j=/[&<>\"'`]/;f.extend=c;var k=Object.prototype.toString;f.toString=k;var l=function(a){return\"function\"==typeof a};l(/x/)&&(l=function(a){return\"function\"==typeof a&&\"[object Function]\"===k.call(a)});var l;f.isFunction=l;var m=Array.isArray||function(a){return a&&\"object\"==typeof a?\"[object Array]\"===k.call(a):!1};return f.isArray=m,f.escapeExpression=d,f.isEmpty=e,f}(a),c=function(){\"use strict\";function a(a,b){var d;b&&b.firstLine&&(d=b.firstLine,a+=\" - \"+d+\":\"+b.firstColumn);for(var e=Error.prototype.constructor.call(this,a),f=0;f<c.length;f++)this[c[f]]=e[c[f]];d&&(this.lineNumber=d,this.column=b.firstColumn)}var b,c=[\"description\",\"fileName\",\"lineNumber\",\"message\",\"name\",\"number\",\"stack\"];return a.prototype=new Error,b=a}(),d=function(a,b){\"use strict\";function c(a,b){this.helpers=a||{},this.partials=b||{},d(this)}function d(a){a.registerHelper(\"helperMissing\",function(a){if(2===arguments.length)return void 0;throw new h(\"Missing helper: '\"+a+\"'\")}),a.registerHelper(\"blockHelperMissing\",function(b,c){var d=c.inverse||function(){},e=c.fn;return m(b)&&(b=b.call(this)),b===!0?e(this):b===!1||null==b?d(this):l(b)?b.length>0?a.helpers.each(b,c):d(this):e(b)}),a.registerHelper(\"each\",function(a,b){var c,d=b.fn,e=b.inverse,f=0,g=\"\";if(m(a)&&(a=a.call(this)),b.data&&(c=q(b.data)),a&&\"object\"==typeof a)if(l(a))for(var h=a.length;h>f;f++)c&&(c.index=f,c.first=0===f,c.last=f===a.length-1),g+=d(a[f],{data:c});else for(var i in a)a.hasOwnProperty(i)&&(c&&(c.key=i,c.index=f,c.first=0===f),g+=d(a[i],{data:c}),f++);return 0===f&&(g=e(this)),g}),a.registerHelper(\"if\",function(a,b){return m(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||g.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper(\"unless\",function(b,c){return a.helpers[\"if\"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})}),a.registerHelper(\"with\",function(a,b){return m(a)&&(a=a.call(this)),g.isEmpty(a)?void 0:b.fn(a)}),a.registerHelper(\"log\",function(b,c){var d=c.data&&null!=c.data.level?parseInt(c.data.level,10):1;a.log(d,b)})}function e(a,b){p.log(a,b)}var f={},g=a,h=b,i=\"1.3.0\";f.VERSION=i;var j=4;f.COMPILER_REVISION=j;var k={1:\"<= 1.0.rc.2\",2:\"== 1.0.0-rc.3\",3:\"== 1.0.0-rc.4\",4:\">= 1.0.0\"};f.REVISION_CHANGES=k;var l=g.isArray,m=g.isFunction,n=g.toString,o=\"[object Object]\";f.HandlebarsEnvironment=c,c.prototype={constructor:c,logger:p,log:e,registerHelper:function(a,b,c){if(n.call(a)===o){if(c||b)throw new h(\"Arg not supported with multiple helpers\");g.extend(this.helpers,a)}else c&&(b.not=c),this.helpers[a]=b},registerPartial:function(a,b){n.call(a)===o?g.extend(this.partials,a):this.partials[a]=b}};var p={methodMap:{0:\"debug\",1:\"info\",2:\"warn\",3:\"error\"},DEBUG:0,INFO:1,WARN:2,ERROR:3,level:3,log:function(a,b){if(p.level<=a){var c=p.methodMap[a];\"undefined\"!=typeof console&&console[c]&&console[c].call(console,b)}}};f.logger=p,f.log=e;var q=function(a){var b={};return g.extend(b,a),b};return f.createFrame=q,f}(b,c),e=function(a,b,c){\"use strict\";function d(a){var b=a&&a[0]||1,c=m;if(b!==c){if(c>b){var d=n[c],e=n[b];throw new l(\"Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version (\"+d+\") or downgrade your runtime to an older version (\"+e+\").\")}throw new l(\"Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version (\"+a[1]+\").\")}}function e(a,b){if(!b)throw new l(\"No environment passed to template\");var c=function(a,c,d,e,f,g){var h=b.VM.invokePartial.apply(this,arguments);if(null!=h)return h;if(b.compile){var i={helpers:e,partials:f,data:g};return f[c]=b.compile(a,{data:void 0!==g},b),f[c](d,i)}throw new l(\"The partial \"+c+\" could not be compiled when running in runtime-only mode\")},d={escapeExpression:k.escapeExpression,invokePartial:c,programs:[],program:function(a,b,c){var d=this.programs[a];return c?d=g(a,b,c):d||(d=this.programs[a]=g(a,b)),d},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c={},k.extend(c,b),k.extend(c,a)),c},programWithDepth:b.VM.programWithDepth,noop:b.VM.noop,compilerInfo:null};return function(c,e){e=e||{};var f,g,h=e.partial?e:b;e.partial||(f=e.helpers,g=e.partials);var i=a.call(d,h,c,f,g,e.data);return e.partial||b.VM.checkRevision(d.compilerInfo),i}}function f(a,b,c){var d=Array.prototype.slice.call(arguments,3),e=function(a,e){return e=e||{},b.apply(this,[a,e.data||c].concat(d))};return e.program=a,e.depth=d.length,e}function g(a,b,c){var d=function(a,d){return d=d||{},b(a,d.data||c)};return d.program=a,d.depth=0,d}function h(a,b,c,d,e,f){var g={partial:!0,helpers:d,partials:e,data:f};if(void 0===a)throw new l(\"The partial \"+b+\" could not be found\");return a instanceof Function?a(c,g):void 0}function i(){return\"\"}var j={},k=a,l=b,m=c.COMPILER_REVISION,n=c.REVISION_CHANGES;return j.checkRevision=d,j.template=e,j.programWithDepth=f,j.program=g,j.invokePartial=h,j.noop=i,j}(b,c,d),f=function(a,b,c,d,e){\"use strict\";var f,g=a,h=b,i=c,j=d,k=e,l=function(){var a=new g.HandlebarsEnvironment;return j.extend(a,g),a.SafeString=h,a.Exception=i,a.Utils=j,a.VM=k,a.template=function(b){return k.template(b,a)},a},m=l();return m.create=l,f=m}(d,a,c,b,e);return f}();this[\"wysihtml5\"] = this[\"wysihtml5\"] || {};\nthis[\"wysihtml5\"][\"tpl\"] = this[\"wysihtml5\"][\"tpl\"] || {};\n\nthis[\"wysihtml5\"][\"tpl\"][\"blockquote\"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n  this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n  var buffer = \"\", stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = \"\", stack1;\n  buffer += \"btn-\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n  return buffer;\n  }\n\nfunction program3(depth0,data) {\n  \n  \n  return \" \\n      <span class=\\\"fa fa-quote-left\\\"></span>\\n    \";\n  }\n\nfunction program5(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"glyphicon glyphicon-quote\\\"></span>\\n    \";\n  }\n\n  buffer += \"<li>\\n  <a class=\\\"btn \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \" btn-default\\\" data-wysihtml5-command=\\\"formatBlock\\\" data-wysihtml5-command-value=\\\"blockquote\\\" data-wysihtml5-display-format-name=\\\"false\\\" tabindex=\\\"-1\\\">\\n    \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.fa), {hash:{},inverse:self.program(5, program5, data),fn:self.program(3, program3, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \"\\n  </a>\\n</li>\\n\";\n  return buffer;\n  });\n\nthis[\"wysihtml5\"][\"tpl\"][\"color\"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n  this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n  var buffer = \"\", stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = \"\", stack1;\n  buffer += \"btn-\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n  return buffer;\n  }\n\n  buffer += \"<li class=\\\"dropdown\\\">\\n  <a class=\\\"btn btn-default dropdown-toggle \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \"\\\" data-toggle=\\\"dropdown\\\" tabindex=\\\"-1\\\">\\n    <span class=\\\"current-color\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.colours)),stack1 == null || stack1 === false ? stack1 : stack1.black)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</span>\\n    <b class=\\\"caret\\\"></b>\\n  </a>\\n  <ul class=\\\"dropdown-menu\\\">\\n    <li><div class=\\\"wysihtml5-colors\\\" data-wysihtml5-command-value=\\\"black\\\"></div><a class=\\\"wysihtml5-colors-title\\\" data-wysihtml5-command=\\\"foreColor\\\" data-wysihtml5-command-value=\\\"black\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.colours)),stack1 == null || stack1 === false ? stack1 : stack1.black)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><div class=\\\"wysihtml5-colors\\\" data-wysihtml5-command-value=\\\"silver\\\"></div><a class=\\\"wysihtml5-colors-title\\\" data-wysihtml5-command=\\\"foreColor\\\" data-wysihtml5-command-value=\\\"silver\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.colours)),stack1 == null || stack1 === false ? stack1 : stack1.silver)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><div class=\\\"wysihtml5-colors\\\" data-wysihtml5-command-value=\\\"gray\\\"></div><a class=\\\"wysihtml5-colors-title\\\" data-wysihtml5-command=\\\"foreColor\\\" data-wysihtml5-command-value=\\\"gray\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.colours)),stack1 == null || stack1 === false ? stack1 : stack1.gray)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><div class=\\\"wysihtml5-colors\\\" data-wysihtml5-command-value=\\\"maroon\\\"></div><a class=\\\"wysihtml5-colors-title\\\" data-wysihtml5-command=\\\"foreColor\\\" data-wysihtml5-command-value=\\\"maroon\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.colours)),stack1 == null || stack1 === false ? stack1 : stack1.maroon)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><div class=\\\"wysihtml5-colors\\\" data-wysihtml5-command-value=\\\"red\\\"></div><a class=\\\"wysihtml5-colors-title\\\" data-wysihtml5-command=\\\"foreColor\\\" data-wysihtml5-command-value=\\\"red\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.colours)),stack1 == null || stack1 === false ? stack1 : stack1.red)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><div class=\\\"wysihtml5-colors\\\" data-wysihtml5-command-value=\\\"purple\\\"></div><a class=\\\"wysihtml5-colors-title\\\" data-wysihtml5-command=\\\"foreColor\\\" data-wysihtml5-command-value=\\\"purple\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.colours)),stack1 == null || stack1 === false ? stack1 : stack1.purple)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><div class=\\\"wysihtml5-colors\\\" data-wysihtml5-command-value=\\\"green\\\"></div><a class=\\\"wysihtml5-colors-title\\\" data-wysihtml5-command=\\\"foreColor\\\" data-wysihtml5-command-value=\\\"green\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.colours)),stack1 == null || stack1 === false ? stack1 : stack1.green)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><div class=\\\"wysihtml5-colors\\\" data-wysihtml5-command-value=\\\"olive\\\"></div><a class=\\\"wysihtml5-colors-title\\\" data-wysihtml5-command=\\\"foreColor\\\" data-wysihtml5-command-value=\\\"olive\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.colours)),stack1 == null || stack1 === false ? stack1 : stack1.olive)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><div class=\\\"wysihtml5-colors\\\" data-wysihtml5-command-value=\\\"navy\\\"></div><a class=\\\"wysihtml5-colors-title\\\" data-wysihtml5-command=\\\"foreColor\\\" data-wysihtml5-command-value=\\\"navy\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.colours)),stack1 == null || stack1 === false ? stack1 : stack1.navy)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><div class=\\\"wysihtml5-colors\\\" data-wysihtml5-command-value=\\\"blue\\\"></div><a class=\\\"wysihtml5-colors-title\\\" data-wysihtml5-command=\\\"foreColor\\\" data-wysihtml5-command-value=\\\"blue\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.colours)),stack1 == null || stack1 === false ? stack1 : stack1.blue)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><div class=\\\"wysihtml5-colors\\\" data-wysihtml5-command-value=\\\"orange\\\"></div><a class=\\\"wysihtml5-colors-title\\\" data-wysihtml5-command=\\\"foreColor\\\" data-wysihtml5-command-value=\\\"orange\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.colours)),stack1 == null || stack1 === false ? stack1 : stack1.orange)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n  </ul>\\n</li>\\n\";\n  return buffer;\n  });\n\nthis[\"wysihtml5\"][\"tpl\"][\"emphasis\"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n  this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n  var buffer = \"\", stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = \"\", stack1;\n  buffer += \"btn-\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n  return buffer;\n  }\n\nfunction program3(depth0,data) {\n  \n  var buffer = \"\", stack1;\n  buffer += \"\\n    <a class=\\\"btn \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \" btn-default\\\" data-wysihtml5-command=\\\"small\\\" title=\\\"CTRL+S\\\" tabindex=\\\"-1\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.emphasis)),stack1 == null || stack1 === false ? stack1 : stack1.small)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a>\\n    \";\n  return buffer;\n  }\n\n  buffer += \"<li>\\n  <div class=\\\"btn-group\\\">\\n    <a class=\\\"btn \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \" btn-default\\\" data-wysihtml5-command=\\\"bold\\\" title=\\\"CTRL+B\\\" tabindex=\\\"-1\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.emphasis)),stack1 == null || stack1 === false ? stack1 : stack1.bold)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a>\\n    <a class=\\\"btn \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \" btn-default\\\" data-wysihtml5-command=\\\"italic\\\" title=\\\"CTRL+I\\\" tabindex=\\\"-1\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.emphasis)),stack1 == null || stack1 === false ? stack1 : stack1.italic)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a>\\n    <a class=\\\"btn \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \" btn-default\\\" data-wysihtml5-command=\\\"underline\\\" title=\\\"CTRL+U\\\" tabindex=\\\"-1\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.emphasis)),stack1 == null || stack1 === false ? stack1 : stack1.underline)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a>\\n    \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.emphasis)),stack1 == null || stack1 === false ? stack1 : stack1.small), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \"\\n  </div>\\n</li>\\n\";\n  return buffer;\n  });\n\nthis[\"wysihtml5\"][\"tpl\"][\"font-styles\"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n  this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n  var buffer = \"\", stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = \"\", stack1;\n  buffer += \"btn-\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n  return buffer;\n  }\n\nfunction program3(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"fa fa-font\\\"></span>\\n    \";\n  }\n\nfunction program5(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"glyphicon glyphicon-font\\\"></span>\\n    \";\n  }\n\n  buffer += \"<li class=\\\"dropdown\\\">\\n  <a class=\\\"btn btn-default dropdown-toggle \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \"\\\" data-toggle=\\\"dropdown\\\">\\n    \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.fa), {hash:{},inverse:self.program(5, program5, data),fn:self.program(3, program3, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \"\\n    <span class=\\\"current-font\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.font_styles)),stack1 == null || stack1 === false ? stack1 : stack1.normal)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</span>\\n    <b class=\\\"caret\\\"></b>\\n  </a>\\n  <ul class=\\\"dropdown-menu\\\">\\n    <li><a data-wysihtml5-command=\\\"formatBlock\\\" data-wysihtml5-command-value=\\\"p\\\" tabindex=\\\"-1\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.font_styles)),stack1 == null || stack1 === false ? stack1 : stack1.normal)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><a data-wysihtml5-command=\\\"formatBlock\\\" data-wysihtml5-command-value=\\\"h1\\\" tabindex=\\\"-1\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.font_styles)),stack1 == null || stack1 === false ? stack1 : stack1.h1)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><a data-wysihtml5-command=\\\"formatBlock\\\" data-wysihtml5-command-value=\\\"h2\\\" tabindex=\\\"-1\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.font_styles)),stack1 == null || stack1 === false ? stack1 : stack1.h2)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><a data-wysihtml5-command=\\\"formatBlock\\\" data-wysihtml5-command-value=\\\"h3\\\" tabindex=\\\"-1\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.font_styles)),stack1 == null || stack1 === false ? stack1 : stack1.h3)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><a data-wysihtml5-command=\\\"formatBlock\\\" data-wysihtml5-command-value=\\\"h4\\\" tabindex=\\\"-1\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.font_styles)),stack1 == null || stack1 === false ? stack1 : stack1.h4)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><a data-wysihtml5-command=\\\"formatBlock\\\" data-wysihtml5-command-value=\\\"h5\\\" tabindex=\\\"-1\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.font_styles)),stack1 == null || stack1 === false ? stack1 : stack1.h5)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n    <li><a data-wysihtml5-command=\\\"formatBlock\\\" data-wysihtml5-command-value=\\\"h6\\\" tabindex=\\\"-1\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.font_styles)),stack1 == null || stack1 === false ? stack1 : stack1.h6)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a></li>\\n  </ul>\\n</li>\\n\";\n  return buffer;\n  });\n\nthis[\"wysihtml5\"][\"tpl\"][\"html\"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n  this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n  var buffer = \"\", stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = \"\", stack1;\n  buffer += \"btn-\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n  return buffer;\n  }\n\nfunction program3(depth0,data) {\n  \n  \n  return \"\\n        <span class=\\\"fa fa-pencil\\\"></span>\\n      \";\n  }\n\nfunction program5(depth0,data) {\n  \n  \n  return \"\\n        <span class=\\\"glyphicon glyphicon-pencil\\\"></span>\\n      \";\n  }\n\n  buffer += \"<li>\\n  <div class=\\\"btn-group\\\">\\n    <a class=\\\"btn \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \" btn-default\\\" data-wysihtml5-action=\\\"change_view\\\" title=\\\"\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.html)),stack1 == null || stack1 === false ? stack1 : stack1.edit)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"\\\" tabindex=\\\"-1\\\">\\n      \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.fa), {hash:{},inverse:self.program(5, program5, data),fn:self.program(3, program3, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \"\\n    </a>\\n  </div>\\n</li>\\n\";\n  return buffer;\n  });\n\nthis[\"wysihtml5\"][\"tpl\"][\"image\"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n  this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n  var buffer = \"\", stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  \n  return \"modal-sm\";\n  }\n\nfunction program3(depth0,data) {\n  \n  var buffer = \"\", stack1;\n  buffer += \"btn-\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n  return buffer;\n  }\n\nfunction program5(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"fa fa-file-image-o\\\"></span>\\n    \";\n  }\n\nfunction program7(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"glyphicon glyphicon-picture\\\"></span>\\n    \";\n  }\n\n  buffer += \"<li>\\n  <div class=\\\"bootstrap-wysihtml5-insert-image-modal modal fade\\\" data-wysihtml5-dialog=\\\"insertImage\\\">\\n    <div class=\\\"modal-dialog \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.smallmodals), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \"\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <a class=\\\"close\\\" data-dismiss=\\\"modal\\\">&times;</a>\\n          <h3>\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.image)),stack1 == null || stack1 === false ? stack1 : stack1.insert)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</h3>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <input value=\\\"http://\\\" class=\\\"bootstrap-wysihtml5-insert-image-url form-control\\\" data-wysihtml5-dialog-field=\\\"src\\\">\\n          </div> \\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <a class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\" data-wysihtml5-dialog-action=\\\"cancel\\\" href=\\\"#\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.image)),stack1 == null || stack1 === false ? stack1 : stack1.cancel)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a>\\n          <a class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\"  data-wysihtml5-dialog-action=\\\"save\\\" href=\\\"#\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.image)),stack1 == null || stack1 === false ? stack1 : stack1.insert)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <a class=\\\"btn \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \" btn-default\\\" data-wysihtml5-command=\\\"insertImage\\\" title=\\\"\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.image)),stack1 == null || stack1 === false ? stack1 : stack1.insert)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"\\\" tabindex=\\\"-1\\\">\\n    \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.fa), {hash:{},inverse:self.program(7, program7, data),fn:self.program(5, program5, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \"\\n  </a>\\n</li>\\n\";\n  return buffer;\n  });\n\nthis[\"wysihtml5\"][\"tpl\"][\"link\"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n  this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n  var buffer = \"\", stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  \n  return \"modal-sm\";\n  }\n\nfunction program3(depth0,data) {\n  \n  var buffer = \"\", stack1;\n  buffer += \"btn-\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n  return buffer;\n  }\n\nfunction program5(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"fa fa-share-square-o\\\"></span>\\n    \";\n  }\n\nfunction program7(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"glyphicon glyphicon-share\\\"></span>\\n    \";\n  }\n\n  buffer += \"<li>\\n  <div class=\\\"bootstrap-wysihtml5-insert-link-modal modal fade\\\" data-wysihtml5-dialog=\\\"createLink\\\">\\n    <div class=\\\"modal-dialog \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.smallmodals), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \"\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <a class=\\\"close\\\" data-dismiss=\\\"modal\\\">&times;</a>\\n          <h3>\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.link)),stack1 == null || stack1 === false ? stack1 : stack1.insert)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</h3>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <input value=\\\"http://\\\" class=\\\"bootstrap-wysihtml5-insert-link-url form-control\\\" data-wysihtml5-dialog-field=\\\"href\\\">\\n          </div> \\n          <div class=\\\"checkbox\\\">\\n            <label> \\n              <input type=\\\"checkbox\\\" class=\\\"bootstrap-wysihtml5-insert-link-target\\\" checked>\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.link)),stack1 == null || stack1 === false ? stack1 : stack1.target)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"\\n            </label>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <a class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\" data-wysihtml5-dialog-action=\\\"cancel\\\" href=\\\"#\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.link)),stack1 == null || stack1 === false ? stack1 : stack1.cancel)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a>\\n          <a href=\\\"#\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" data-wysihtml5-dialog-action=\\\"save\\\">\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.link)),stack1 == null || stack1 === false ? stack1 : stack1.insert)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"</a>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <a class=\\\"btn \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \" btn-default\\\" data-wysihtml5-command=\\\"createLink\\\" title=\\\"\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.link)),stack1 == null || stack1 === false ? stack1 : stack1.insert)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"\\\" tabindex=\\\"-1\\\">\\n    \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.fa), {hash:{},inverse:self.program(7, program7, data),fn:self.program(5, program5, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \"\\n  </a>\\n</li>\\n\";\n  return buffer;\n  });\n\nthis[\"wysihtml5\"][\"tpl\"][\"lists\"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n  this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n  var buffer = \"\", stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = \"\", stack1;\n  buffer += \"btn-\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n  return buffer;\n  }\n\nfunction program3(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"fa fa-list-ul\\\"></span>\\n    \";\n  }\n\nfunction program5(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"glyphicon glyphicon-list\\\"></span>\\n    \";\n  }\n\nfunction program7(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"fa fa-list-ol\\\"></span>\\n    \";\n  }\n\nfunction program9(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"glyphicon glyphicon-th-list\\\"></span>\\n    \";\n  }\n\nfunction program11(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"fa fa-outdent\\\"></span>\\n    \";\n  }\n\nfunction program13(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"glyphicon glyphicon-indent-right\\\"></span>\\n    \";\n  }\n\nfunction program15(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"fa fa-indent\\\"></span>\\n    \";\n  }\n\nfunction program17(depth0,data) {\n  \n  \n  return \"\\n      <span class=\\\"glyphicon glyphicon-indent-left\\\"></span>\\n    \";\n  }\n\n  buffer += \"<li>\\n  <div class=\\\"btn-group\\\">\\n    <a class=\\\"btn \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \" btn-default\\\" data-wysihtml5-command=\\\"insertUnorderedList\\\" title=\\\"\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.lists)),stack1 == null || stack1 === false ? stack1 : stack1.unordered)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"\\\" tabindex=\\\"-1\\\">\\n    \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.fa), {hash:{},inverse:self.program(5, program5, data),fn:self.program(3, program3, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \"\\n    </a>\\n    <a class=\\\"btn \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \" btn-default\\\" data-wysihtml5-command=\\\"insertOrderedList\\\" title=\\\"\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.lists)),stack1 == null || stack1 === false ? stack1 : stack1.ordered)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"\\\" tabindex=\\\"-1\\\">\\n    \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.fa), {hash:{},inverse:self.program(9, program9, data),fn:self.program(7, program7, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \"\\n    </a>\\n    <a class=\\\"btn \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \" btn-default\\\" data-wysihtml5-command=\\\"Outdent\\\" title=\\\"\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.lists)),stack1 == null || stack1 === false ? stack1 : stack1.outdent)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"\\\" tabindex=\\\"-1\\\">\\n    \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.fa), {hash:{},inverse:self.program(13, program13, data),fn:self.program(11, program11, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \"\\n    </a>\\n    <a class=\\\"btn \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.size), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \" btn-default\\\" data-wysihtml5-command=\\\"Indent\\\" title=\\\"\"\n    + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.locale)),stack1 == null || stack1 === false ? stack1 : stack1.lists)),stack1 == null || stack1 === false ? stack1 : stack1.indent)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n    + \"\\\" tabindex=\\\"-1\\\">\\n    \";\n  stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.toolbar)),stack1 == null || stack1 === false ? stack1 : stack1.fa), {hash:{},inverse:self.program(17, program17, data),fn:self.program(15, program15, data),data:data});\n  if(stack1 || stack1 === 0) { buffer += stack1; }\n  buffer += \"\\n    </a>\\n  </div>\\n</li>\\n\";\n  return buffer;\n  });(function (factory) {\n  'use strict';\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define('bootstrap.wysihtml5', ['jquery', 'wysihtml5', 'bootstrap', 'bootstrap.wysihtml5.templates', 'bootstrap.wysihtml5.commands'], factory);\n  } else {\n    // Browser globals\n    factory(jQuery, wysihtml5); // jshint ignore:line\n  }\n}(function ($, wysihtml5) {\n  'use strict';\n  var bsWysihtml5 = function($, wysihtml5) {\n\n    var templates = function(key, locale, options) {\n      if(wysihtml5.tpl[key]) {\n        return wysihtml5.tpl[key]({locale: locale, options: options});\n      }\n    };\n\n    var Wysihtml5 = function(el, options) {\n      this.el = el;\n      var toolbarOpts = $.extend(true, {}, defaultOptions, options);\n      for(var t in toolbarOpts.customTemplates) {\n        if (toolbarOpts.customTemplates.hasOwnProperty(t)) {\n          wysihtml5.tpl[t] = toolbarOpts.customTemplates[t];\n        }\n      }\n      this.toolbar = this.createToolbar(el, toolbarOpts);\n      this.editor =  this.createEditor(toolbarOpts);\n    };\n\n    Wysihtml5.prototype = {\n\n      constructor: Wysihtml5,\n\n      createEditor: function(options) {\n        options = options || {};\n\n        // Add the toolbar to a clone of the options object so multiple instances\n        // of the WYISYWG don't break because 'toolbar' is already defined\n        options = $.extend(true, {}, options);\n        options.toolbar = this.toolbar[0];\n        \n        this.initializeEditor(this.el[0], options);\n      },\n\n\n      initializeEditor: function(el, options) {\n        var editor = new wysihtml5.Editor(this.el[0], options);\n\n        editor.on('beforeload', this.syncBootstrapDialogEvents);\n        editor.on('beforeload', this.loadParserRules);\n\n        // #30 - body is in IE 10 not created by default, which leads to nullpointer\n        // 2014/02/13 - adapted to wysihtml5-0.4, does not work in IE\n        if(editor.composer.editableArea.contentDocument) {\n          this.addMoreShortcuts(editor, \n                                editor.composer.editableArea.contentDocument.body || editor.composer.editableArea.contentDocument, \n                                options.shortcuts);\n        } else {\n          this.addMoreShortcuts(editor, editor.composer.editableArea, options.shortcuts);    \n        }\n\n        if(options && options.events) {\n          for(var eventName in options.events) {\n            if (options.events.hasOwnProperty(eventName)) {\n              editor.on(eventName, options.events[eventName]);\n            }\n          }\n        }\n\n        return editor;\n      },\n\n      loadParserRules: function() {\n        if($.type(this.config.parserRules) === 'string') {\n          $.ajax({\n            dataType: 'json',\n            url: this.config.parserRules,\n            context: this,\n            error: function (jqXHR, textStatus, errorThrown) {\n              console.log(errorThrown);\n            },\n            success: function (parserRules) {\n              this.config.parserRules = parserRules;\n              console.log('parserrules loaded');\n            }\n          });\n        }\n\n        if(this.config.pasteParserRulesets && $.type(this.config.pasteParserRulesets) === 'string') {\n          $.ajax({\n            dataType: 'json',\n            url: this.config.pasteParserRulesets,\n            context: this,\n            error: function (jqXHR, textStatus, errorThrown) {\n              console.log(errorThrown);\n            },\n            success: function (pasteParserRulesets) {\n              this.config.pasteParserRulesets = pasteParserRulesets;\n            }\n          });\n        }\n      },\n\n      //sync wysihtml5 events for dialogs with bootstrap events\n      syncBootstrapDialogEvents: function() {\n        var editor = this;\n        $.map(this.toolbar.commandMapping, function(value) {\n          return [value];\n        }).filter(function(commandObj) {\n          return commandObj.dialog;\n        }).map(function(commandObj) {\n          return commandObj.dialog;\n        }).forEach(function(dialog) {\n          dialog.on('show', function() {\n            $(this.container).modal('show');\n          });\n          dialog.on('hide', function() {\n            $(this.container).modal('hide');\n            setTimeout(editor.composer.focus, 0);\n          });\n          $(dialog.container).on('shown.bs.modal', function () {\n            $(this).find('input, select, textarea').first().focus();\n          });\n        });\n        this.on('change_view', function() {\n          $(this.toolbar.container.children).find('a.btn').not('[data-wysihtml5-action=\"change_view\"]').toggleClass('disabled');\n        });\n      },\n\n      createToolbar: function(el, options) {\n        var self = this;\n        var toolbar = $('<ul/>', {\n          'class' : 'wysihtml5-toolbar',\n          'style': 'display:none'\n        });\n        var culture = options.locale || defaultOptions.locale || 'en';\n        if(!locale.hasOwnProperty(culture)) {\n          console.debug('Locale \\'' + culture + '\\' not found. Available locales are: ' + Object.keys(locale) + '. Falling back to \\'en\\'.');\n          culture = 'en';\n        }\n        var localeObject = $.extend(true, {}, locale.en, locale[culture]);\n        for(var key in options.toolbar) {\n          if(options.toolbar[key]) {\n            toolbar.append(templates(key, localeObject, options));\n          }\n        }\n\n        toolbar.find('a[data-wysihtml5-command=\"formatBlock\"]').click(function(e) {\n          var target = e.delegateTarget || e.target || e.srcElement,\n          el = $(target),\n          showformat = el.data('wysihtml5-display-format-name'),\n          formatname = el.data('wysihtml5-format-name') || el.html();\n          if(showformat === undefined || showformat === 'true') {\n            self.toolbar.find('.current-font').text(formatname);\n          }\n        });\n\n        toolbar.find('a[data-wysihtml5-command=\"foreColor\"]').click(function(e) {\n          var target = e.target || e.srcElement;\n          var el = $(target);\n          self.toolbar.find('.current-color').text(el.html());\n        });\n\n        this.el.before(toolbar);\n\n        return toolbar;\n      },\n\n      addMoreShortcuts: function(editor, el, shortcuts) {\n        /* some additional shortcuts */\n        wysihtml5.dom.observe(el, 'keydown', function(event) {\n          var keyCode  = event.keyCode,\n          command  = shortcuts[keyCode];\n          if ((event.ctrlKey || event.metaKey || event.altKey) && command && wysihtml5.commands[command]) {\n            var commandObj = editor.toolbar.commandMapping[command + ':null'];\n            if (commandObj && commandObj.dialog && !commandObj.state) {\n              commandObj.dialog.show();\n            } else {\n              wysihtml5.commands[command].exec(editor.composer, command);\n            }\n            event.preventDefault();\n          }\n        });\n      }\n    };\n\n    // these define our public api\n    var methods = {\n      resetDefaults: function() {\n        $.fn.wysihtml5.defaultOptions = $.extend(true, {}, $.fn.wysihtml5.defaultOptionsCache);\n      },\n      bypassDefaults: function(options) {\n        return this.each(function () {\n          var $this = $(this);\n          $this.data('wysihtml5', new Wysihtml5($this, options));\n        });\n      },\n      shallowExtend: function (options) {\n        var settings = $.extend({}, $.fn.wysihtml5.defaultOptions, options || {}, $(this).data());\n        var that = this;\n        return methods.bypassDefaults.apply(that, [settings]);\n      },\n      deepExtend: function(options) {\n        var settings = $.extend(true, {}, $.fn.wysihtml5.defaultOptions, options || {});\n        var that = this;\n        return methods.bypassDefaults.apply(that, [settings]);\n      },\n      init: function(options) {\n        var that = this;\n        return methods.shallowExtend.apply(that, [options]);\n      }\n    };\n\n    $.fn.wysihtml5 = function ( method ) {\n      if ( methods[method] ) {\n        return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));\n      } else if ( typeof method === 'object' || ! method ) {\n        return methods.init.apply( this, arguments );\n      } else {\n        $.error( 'Method ' +  method + ' does not exist on jQuery.wysihtml5' );\n      }    \n    };\n\n    $.fn.wysihtml5.Constructor = Wysihtml5;\n\n    var defaultOptions = $.fn.wysihtml5.defaultOptions = {\n      toolbar: {\n        'font-styles': true,\n        'color': false,\n        'emphasis': {\n          'small': true\n        },\n        'blockquote': true,\n        'lists': true,\n        'html': false,\n        'link': true,\n        'image': true,\n        'smallmodals': false\n      },\n      useLineBreaks: false,\n      parserRules: {\n        classes: {\n          'wysiwyg-color-silver' : 1,\n          'wysiwyg-color-gray' : 1,\n          'wysiwyg-color-white' : 1,\n          'wysiwyg-color-maroon' : 1,\n          'wysiwyg-color-red' : 1,\n          'wysiwyg-color-purple' : 1,\n          'wysiwyg-color-fuchsia' : 1,\n          'wysiwyg-color-green' : 1,\n          'wysiwyg-color-lime' : 1,\n          'wysiwyg-color-olive' : 1,\n          'wysiwyg-color-yellow' : 1,\n          'wysiwyg-color-navy' : 1,\n          'wysiwyg-color-blue' : 1,\n          'wysiwyg-color-teal' : 1,\n          'wysiwyg-color-aqua' : 1,\n          'wysiwyg-color-orange' : 1\n        },\n        tags: {\n          'b':  {},\n          'i':  {},\n          'strong': {},\n          'em': {},\n          'p': {},\n          'br': {},\n          'ol': {},\n          'ul': {},\n          'li': {},\n          'h1': {},\n          'h2': {},\n          'h3': {},\n          'h4': {},\n          'h5': {},\n          'h6': {},\n          'blockquote': {},\n          'u': 1,\n          'img': {\n            'check_attributes': {\n              'width': 'numbers',\n              'alt': 'alt',\n              'src': 'url',\n              'height': 'numbers'\n            }\n          },\n          'a':  {\n            'check_attributes': {\n              'href': 'url'\n            },\n            'set_attributes': {\n              'target': '_blank',\n              'rel': 'nofollow'\n            }\n          },\n          'span': 1,\n          'div': 1,\n          'small': 1,\n          'code': 1,\n          'pre': 1\n        }\n      },\n      locale: 'en',\n      shortcuts: {\n        '83': 'small',// S\n        '75': 'createLink'// K\n      }\n    };\n\n    if (typeof $.fn.wysihtml5.defaultOptionsCache === 'undefined') {\n      $.fn.wysihtml5.defaultOptionsCache = $.extend(true, {}, $.fn.wysihtml5.defaultOptions);\n    }\n\n    var locale = $.fn.wysihtml5.locale = {};\n  };\n  bsWysihtml5($, wysihtml5);\n}));\n(function(wysihtml5) {\n  wysihtml5.commands.small = {\n    exec: function(composer, command) {\n      return wysihtml5.commands.formatInline.exec(composer, command, \"small\");\n    },\n\n    state: function(composer, command) {\n      return wysihtml5.commands.formatInline.state(composer, command, \"small\");\n    }\n  };\n})(wysihtml5);\n\n/**\n * English translation for bootstrap-wysihtml5\n */\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define('bootstrap.wysihtml5.en-US', ['jquery', 'bootstrap.wysihtml5'], factory);\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n  $.fn.wysihtml5.locale.en = $.fn.wysihtml5.locale['en-US'] = {\n    font_styles: {\n      normal: 'Normal text',\n      h1: 'Heading 1',\n      h2: 'Heading 2',\n      h3: 'Heading 3',\n      h4: 'Heading 4',\n      h5: 'Heading 5',\n      h6: 'Heading 6'\n    },\n    emphasis: {\n      bold: 'Bold',\n      italic: 'Italic',\n      underline: 'Underline',\n      small: 'Small'\n    },\n    lists: {\n      unordered: 'Unordered list',\n      ordered: 'Ordered list',\n      outdent: 'Outdent',\n      indent: 'Indent'\n    },\n    link: {\n      insert: 'Insert link',\n      cancel: 'Cancel',\n      target: 'Open link in new window'\n    },\n    image: {\n      insert: 'Insert image',\n      cancel: 'Cancel'\n    },\n    html: {\n      edit: 'Edit HTML'\n    },\n    colours: {\n      black: 'Black',\n      silver: 'Silver',\n      gray: 'Grey',\n      maroon: 'Maroon',\n      red: 'Red',\n      purple: 'Purple',\n      green: 'Green',\n      olive: 'Olive',\n      navy: 'Navy',\n      blue: 'Blue',\n      orange: 'Orange'\n    }\n  };\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.css",
    "content": "ul.wysihtml5-toolbar {\n\tmargin: 0;\n\tpadding: 0;\n\tdisplay: block;\n}\n\nul.wysihtml5-toolbar::after {\n\tclear: both;\n\tdisplay: table;\n\tcontent: \"\";\n}\n\nul.wysihtml5-toolbar > li {\n\tfloat: left;\n\tdisplay: list-item;\n\tlist-style: none;\n\tmargin: 0 5px 10px 0;\n}\n\nul.wysihtml5-toolbar a[data-wysihtml5-command=bold] {\n\tfont-weight: bold;\n}\n\nul.wysihtml5-toolbar a[data-wysihtml5-command=italic] {\n\tfont-style: italic;\n}\n\nul.wysihtml5-toolbar a[data-wysihtml5-command=underline] {\n\ttext-decoration: underline;\n}\n\nul.wysihtml5-toolbar a.btn.wysihtml5-command-active {\n\tbackground-image: none;\n\t-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);\n\t-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);\n\tbox-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);\n\tbackground-color: #E6E6E6;\n\tbackground-color: #D9D9D9;\n\toutline: 0;\n}\n\nul.wysihtml5-commands-disabled .dropdown-menu {\n\tdisplay: none !important;\n}\n\nul.wysihtml5-toolbar div.wysihtml5-colors {\n  display:block;\n  width: 50px;\n  height: 20px;\n  margin-top: 2px;\n  margin-left: 5px;\n  position: absolute;\n  pointer-events: none;\n}\n\nul.wysihtml5-toolbar a.wysihtml5-colors-title {\n  padding-left: 70px;\n}\n\nul.wysihtml5-toolbar div[data-wysihtml5-command-value=\"black\"] {\n  background: black !important;\n}\n\nul.wysihtml5-toolbar div[data-wysihtml5-command-value=\"silver\"] {\n  background: silver !important;\n}\n\nul.wysihtml5-toolbar div[data-wysihtml5-command-value=\"gray\"] {\n  background: gray !important;\n}\n\nul.wysihtml5-toolbar div[data-wysihtml5-command-value=\"maroon\"] {\n  background: maroon !important;\n}\n\nul.wysihtml5-toolbar div[data-wysihtml5-command-value=\"red\"] {\n  background: red !important;\n}\n\nul.wysihtml5-toolbar div[data-wysihtml5-command-value=\"purple\"] {\n  background: purple !important;\n}\n\nul.wysihtml5-toolbar div[data-wysihtml5-command-value=\"green\"] {\n  background: green !important;\n}\n\nul.wysihtml5-toolbar div[data-wysihtml5-command-value=\"olive\"] {\n  background: olive !important;\n}\n\nul.wysihtml5-toolbar div[data-wysihtml5-command-value=\"navy\"] {\n  background: navy !important;\n}\n\nul.wysihtml5-toolbar div[data-wysihtml5-command-value=\"blue\"] {\n  background: blue !important;\n}\n\nul.wysihtml5-toolbar div[data-wysihtml5-command-value=\"orange\"] {\n  background: orange !important;\n}\n\n.glyphicon-quote:before {\n  content: \"\\201C\";\n  font-family: Georgia, serif;\n  font-size: 50px;\n  position: absolute;\n  top: -4px;\n  left: -3px;\n  max-height: 100%;\n}\n\n.glyphicon-quote:after {\n  content: \"\\0000a0\";\n}\n\n"
  },
  {
    "path": "public/adminlte/plugins/chartjs/Chart.js",
    "content": "/*!\n * Chart.js\n * http://chartjs.org/\n * Version: 1.1.1\n *\n * Copyright 2015 Nick Downie\n * Released under the MIT license\n * https://github.com/nnnick/Chart.js/blob/master/LICENSE.md\n */\n\n\n(function(){\n\n\t\"use strict\";\n\n\t//Declare root variable - window in the browser, global on the server\n\tvar root = this,\n\t\tprevious = root.Chart;\n\n\t//Occupy the global variable of Chart, and create a simple base class\n\tvar Chart = function(context){\n\t\tvar chart = this;\n\t\tthis.canvas = context.canvas;\n\n\t\tthis.ctx = context;\n\n\t\t//Variables global to the chart\n\t\tvar computeDimension = function(element,dimension)\n\t\t{\n\t\t\tif (element['offset'+dimension])\n\t\t\t{\n\t\t\t\treturn element['offset'+dimension];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn document.defaultView.getComputedStyle(element).getPropertyValue(dimension);\n\t\t\t}\n\t\t};\n\n\t\tvar width = this.width = computeDimension(context.canvas,'Width') || context.canvas.width;\n\t\tvar height = this.height = computeDimension(context.canvas,'Height') || context.canvas.height;\n\n\t\tthis.aspectRatio = this.width / this.height;\n\t\t//High pixel density displays - multiply the size of the canvas height/width by the device pixel ratio, then scale.\n\t\thelpers.retinaScale(this);\n\n\t\treturn this;\n\t};\n\t//Globally expose the defaults to allow for user updating/changing\n\tChart.defaults = {\n\t\tglobal: {\n\t\t\t// Boolean - Whether to animate the chart\n\t\t\tanimation: true,\n\n\t\t\t// Number - Number of animation steps\n\t\t\tanimationSteps: 60,\n\n\t\t\t// String - Animation easing effect\n\t\t\tanimationEasing: \"easeOutQuart\",\n\n\t\t\t// Boolean - If we should show the scale at all\n\t\t\tshowScale: true,\n\n\t\t\t// Boolean - If we want to override with a hard coded scale\n\t\t\tscaleOverride: false,\n\n\t\t\t// ** Required if scaleOverride is true **\n\t\t\t// Number - The number of steps in a hard coded scale\n\t\t\tscaleSteps: null,\n\t\t\t// Number - The value jump in the hard coded scale\n\t\t\tscaleStepWidth: null,\n\t\t\t// Number - The scale starting value\n\t\t\tscaleStartValue: null,\n\n\t\t\t// String - Colour of the scale line\n\t\t\tscaleLineColor: \"rgba(0,0,0,.1)\",\n\n\t\t\t// Number - Pixel width of the scale line\n\t\t\tscaleLineWidth: 1,\n\n\t\t\t// Boolean - Whether to show labels on the scale\n\t\t\tscaleShowLabels: true,\n\n\t\t\t// Interpolated JS string - can access value\n\t\t\tscaleLabel: \"<%=value%>\",\n\n\t\t\t// Boolean - Whether the scale should stick to integers, and not show any floats even if drawing space is there\n\t\t\tscaleIntegersOnly: true,\n\n\t\t\t// Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value\n\t\t\tscaleBeginAtZero: false,\n\n\t\t\t// String - Scale label font declaration for the scale label\n\t\t\tscaleFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n\n\t\t\t// Number - Scale label font size in pixels\n\t\t\tscaleFontSize: 12,\n\n\t\t\t// String - Scale label font weight style\n\t\t\tscaleFontStyle: \"normal\",\n\n\t\t\t// String - Scale label font colour\n\t\t\tscaleFontColor: \"#666\",\n\n\t\t\t// Boolean - whether or not the chart should be responsive and resize when the browser does.\n\t\t\tresponsive: false,\n\n\t\t\t// Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container\n\t\t\tmaintainAspectRatio: true,\n\n\t\t\t// Boolean - Determines whether to draw tooltips on the canvas or not - attaches events to touchmove & mousemove\n\t\t\tshowTooltips: true,\n\n\t\t\t// Boolean - Determines whether to draw built-in tooltip or call custom tooltip function\n\t\t\tcustomTooltips: false,\n\n\t\t\t// Array - Array of string names to attach tooltip events\n\t\t\ttooltipEvents: [\"mousemove\", \"touchstart\", \"touchmove\", \"mouseout\"],\n\n\t\t\t// String - Tooltip background colour\n\t\t\ttooltipFillColor: \"rgba(0,0,0,0.8)\",\n\n\t\t\t// String - Tooltip label font declaration for the scale label\n\t\t\ttooltipFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n\n\t\t\t// Number - Tooltip label font size in pixels\n\t\t\ttooltipFontSize: 14,\n\n\t\t\t// String - Tooltip font weight style\n\t\t\ttooltipFontStyle: \"normal\",\n\n\t\t\t// String - Tooltip label font colour\n\t\t\ttooltipFontColor: \"#fff\",\n\n\t\t\t// String - Tooltip title font declaration for the scale label\n\t\t\ttooltipTitleFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n\n\t\t\t// Number - Tooltip title font size in pixels\n\t\t\ttooltipTitleFontSize: 14,\n\n\t\t\t// String - Tooltip title font weight style\n\t\t\ttooltipTitleFontStyle: \"bold\",\n\n\t\t\t// String - Tooltip title font colour\n\t\t\ttooltipTitleFontColor: \"#fff\",\n\n\t\t\t// String - Tooltip title template\n\t\t\ttooltipTitleTemplate: \"<%= label%>\",\n\n\t\t\t// Number - pixel width of padding around tooltip text\n\t\t\ttooltipYPadding: 6,\n\n\t\t\t// Number - pixel width of padding around tooltip text\n\t\t\ttooltipXPadding: 6,\n\n\t\t\t// Number - Size of the caret on the tooltip\n\t\t\ttooltipCaretSize: 8,\n\n\t\t\t// Number - Pixel radius of the tooltip border\n\t\t\ttooltipCornerRadius: 6,\n\n\t\t\t// Number - Pixel offset from point x to tooltip edge\n\t\t\ttooltipXOffset: 10,\n\n\t\t\t// String - Template string for single tooltips\n\t\t\ttooltipTemplate: \"<%if (label){%><%=label%>: <%}%><%= value %>\",\n\n\t\t\t// String - Template string for single tooltips\n\t\t\tmultiTooltipTemplate: \"<%= datasetLabel %>: <%= value %>\",\n\n\t\t\t// String - Colour behind the legend colour block\n\t\t\tmultiTooltipKeyBackground: '#fff',\n\n\t\t\t// Array - A list of colors to use as the defaults\n\t\t\tsegmentColorDefault: [\"#A6CEE3\", \"#1F78B4\", \"#B2DF8A\", \"#33A02C\", \"#FB9A99\", \"#E31A1C\", \"#FDBF6F\", \"#FF7F00\", \"#CAB2D6\", \"#6A3D9A\", \"#B4B482\", \"#B15928\" ],\n\n\t\t\t// Array - A list of highlight colors to use as the defaults\n\t\t\tsegmentHighlightColorDefaults: [ \"#CEF6FF\", \"#47A0DC\", \"#DAFFB2\", \"#5BC854\", \"#FFC2C1\", \"#FF4244\", \"#FFE797\", \"#FFA728\", \"#F2DAFE\", \"#9265C2\", \"#DCDCAA\", \"#D98150\" ],\n\n\t\t\t// Function - Will fire on animation progression.\n\t\t\tonAnimationProgress: function(){},\n\n\t\t\t// Function - Will fire on animation completion.\n\t\t\tonAnimationComplete: function(){}\n\n\t\t}\n\t};\n\n\t//Create a dictionary of chart types, to allow for extension of existing types\n\tChart.types = {};\n\n\t//Global Chart helpers object for utility methods and classes\n\tvar helpers = Chart.helpers = {};\n\n\t\t//-- Basic js utility methods\n\tvar each = helpers.each = function(loopable,callback,self){\n\t\t\tvar additionalArgs = Array.prototype.slice.call(arguments, 3);\n\t\t\t// Check to see if null or undefined firstly.\n\t\t\tif (loopable){\n\t\t\t\tif (loopable.length === +loopable.length){\n\t\t\t\t\tvar i;\n\t\t\t\t\tfor (i=0; i<loopable.length; i++){\n\t\t\t\t\t\tcallback.apply(self,[loopable[i], i].concat(additionalArgs));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tfor (var item in loopable){\n\t\t\t\t\t\tcallback.apply(self,[loopable[item],item].concat(additionalArgs));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tclone = helpers.clone = function(obj){\n\t\t\tvar objClone = {};\n\t\t\teach(obj,function(value,key){\n\t\t\t\tif (obj.hasOwnProperty(key)){\n\t\t\t\t\tobjClone[key] = value;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn objClone;\n\t\t},\n\t\textend = helpers.extend = function(base){\n\t\t\teach(Array.prototype.slice.call(arguments,1), function(extensionObject) {\n\t\t\t\teach(extensionObject,function(value,key){\n\t\t\t\t\tif (extensionObject.hasOwnProperty(key)){\n\t\t\t\t\t\tbase[key] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn base;\n\t\t},\n\t\tmerge = helpers.merge = function(base,master){\n\t\t\t//Merge properties in left object over to a shallow clone of object right.\n\t\t\tvar args = Array.prototype.slice.call(arguments,0);\n\t\t\targs.unshift({});\n\t\t\treturn extend.apply(null, args);\n\t\t},\n\t\tindexOf = helpers.indexOf = function(arrayToSearch, item){\n\t\t\tif (Array.prototype.indexOf) {\n\t\t\t\treturn arrayToSearch.indexOf(item);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tfor (var i = 0; i < arrayToSearch.length; i++) {\n\t\t\t\t\tif (arrayToSearch[i] === item) return i;\n\t\t\t\t}\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t},\n\t\twhere = helpers.where = function(collection, filterCallback){\n\t\t\tvar filtered = [];\n\n\t\t\thelpers.each(collection, function(item){\n\t\t\t\tif (filterCallback(item)){\n\t\t\t\t\tfiltered.push(item);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn filtered;\n\t\t},\n\t\tfindNextWhere = helpers.findNextWhere = function(arrayToSearch, filterCallback, startIndex){\n\t\t\t// Default to start of the array\n\t\t\tif (!startIndex){\n\t\t\t\tstartIndex = -1;\n\t\t\t}\n\t\t\tfor (var i = startIndex + 1; i < arrayToSearch.length; i++) {\n\t\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\t\tif (filterCallback(currentItem)){\n\t\t\t\t\treturn currentItem;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tfindPreviousWhere = helpers.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex){\n\t\t\t// Default to end of the array\n\t\t\tif (!startIndex){\n\t\t\t\tstartIndex = arrayToSearch.length;\n\t\t\t}\n\t\t\tfor (var i = startIndex - 1; i >= 0; i--) {\n\t\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\t\tif (filterCallback(currentItem)){\n\t\t\t\t\treturn currentItem;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinherits = helpers.inherits = function(extensions){\n\t\t\t//Basic javascript inheritance based on the model created in Backbone.js\n\t\t\tvar parent = this;\n\t\t\tvar ChartElement = (extensions && extensions.hasOwnProperty(\"constructor\")) ? extensions.constructor : function(){ return parent.apply(this, arguments); };\n\n\t\t\tvar Surrogate = function(){ this.constructor = ChartElement;};\n\t\t\tSurrogate.prototype = parent.prototype;\n\t\t\tChartElement.prototype = new Surrogate();\n\n\t\t\tChartElement.extend = inherits;\n\n\t\t\tif (extensions) extend(ChartElement.prototype, extensions);\n\n\t\t\tChartElement.__super__ = parent.prototype;\n\n\t\t\treturn ChartElement;\n\t\t},\n\t\tnoop = helpers.noop = function(){},\n\t\tuid = helpers.uid = (function(){\n\t\t\tvar id=0;\n\t\t\treturn function(){\n\t\t\t\treturn \"chart-\" + id++;\n\t\t\t};\n\t\t})(),\n\t\twarn = helpers.warn = function(str){\n\t\t\t//Method for warning of errors\n\t\t\tif (window.console && typeof window.console.warn === \"function\") console.warn(str);\n\t\t},\n\t\tamd = helpers.amd = (typeof define === 'function' && define.amd),\n\t\t//-- Math methods\n\t\tisNumber = helpers.isNumber = function(n){\n\t\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\n\t\t},\n\t\tmax = helpers.max = function(array){\n\t\t\treturn Math.max.apply( Math, array );\n\t\t},\n\t\tmin = helpers.min = function(array){\n\t\t\treturn Math.min.apply( Math, array );\n\t\t},\n\t\tcap = helpers.cap = function(valueToCap,maxValue,minValue){\n\t\t\tif(isNumber(maxValue)) {\n\t\t\t\tif( valueToCap > maxValue ) {\n\t\t\t\t\treturn maxValue;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(isNumber(minValue)){\n\t\t\t\tif ( valueToCap < minValue ){\n\t\t\t\t\treturn minValue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn valueToCap;\n\t\t},\n\t\tgetDecimalPlaces = helpers.getDecimalPlaces = function(num){\n\t\t\tif (num%1!==0 && isNumber(num)){\n\t\t\t\tvar s = num.toString();\n\t\t\t\tif(s.indexOf(\"e-\") < 0){\n\t\t\t\t\t// no exponent, e.g. 0.01\n\t\t\t\t\treturn s.split(\".\")[1].length;\n\t\t\t\t}\n\t\t\t\telse if(s.indexOf(\".\") < 0) {\n\t\t\t\t\t// no decimal point, e.g. 1e-9\n\t\t\t\t\treturn parseInt(s.split(\"e-\")[1]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// exponent and decimal point, e.g. 1.23e-9\n\t\t\t\t\tvar parts = s.split(\".\")[1].split(\"e-\");\n\t\t\t\t\treturn parts[0].length + parseInt(parts[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t},\n\t\ttoRadians = helpers.radians = function(degrees){\n\t\t\treturn degrees * (Math.PI/180);\n\t\t},\n\t\t// Gets the angle from vertical upright to the point about a centre.\n\t\tgetAngleFromPoint = helpers.getAngleFromPoint = function(centrePoint, anglePoint){\n\t\t\tvar distanceFromXCenter = anglePoint.x - centrePoint.x,\n\t\t\t\tdistanceFromYCenter = anglePoint.y - centrePoint.y,\n\t\t\t\tradialDistanceFromCenter = Math.sqrt( distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n\n\t\t\tvar angle = Math.PI * 2 + Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n\t\t\t//If the segment is in the top left quadrant, we need to add another rotation to the angle\n\t\t\tif (distanceFromXCenter < 0 && distanceFromYCenter < 0){\n\t\t\t\tangle += Math.PI*2;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tangle: angle,\n\t\t\t\tdistance: radialDistanceFromCenter\n\t\t\t};\n\t\t},\n\t\taliasPixel = helpers.aliasPixel = function(pixelWidth){\n\t\t\treturn (pixelWidth % 2 === 0) ? 0 : 0.5;\n\t\t},\n\t\tsplineCurve = helpers.splineCurve = function(FirstPoint,MiddlePoint,AfterPoint,t){\n\t\t\t//Props to Rob Spencer at scaled innovation for his post on splining between points\n\t\t\t//http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\t\t\tvar d01=Math.sqrt(Math.pow(MiddlePoint.x-FirstPoint.x,2)+Math.pow(MiddlePoint.y-FirstPoint.y,2)),\n\t\t\t\td12=Math.sqrt(Math.pow(AfterPoint.x-MiddlePoint.x,2)+Math.pow(AfterPoint.y-MiddlePoint.y,2)),\n\t\t\t\tfa=t*d01/(d01+d12),// scaling factor for triangle Ta\n\t\t\t\tfb=t*d12/(d01+d12);\n\t\t\treturn {\n\t\t\t\tinner : {\n\t\t\t\t\tx : MiddlePoint.x-fa*(AfterPoint.x-FirstPoint.x),\n\t\t\t\t\ty : MiddlePoint.y-fa*(AfterPoint.y-FirstPoint.y)\n\t\t\t\t},\n\t\t\t\touter : {\n\t\t\t\t\tx: MiddlePoint.x+fb*(AfterPoint.x-FirstPoint.x),\n\t\t\t\t\ty : MiddlePoint.y+fb*(AfterPoint.y-FirstPoint.y)\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tcalculateOrderOfMagnitude = helpers.calculateOrderOfMagnitude = function(val){\n\t\t\treturn Math.floor(Math.log(val) / Math.LN10);\n\t\t},\n\t\tcalculateScaleRange = helpers.calculateScaleRange = function(valuesArray, drawingSize, textSize, startFromZero, integersOnly){\n\n\t\t\t//Set a minimum step of two - a point at the top of the graph, and a point at the base\n\t\t\tvar minSteps = 2,\n\t\t\t\tmaxSteps = Math.floor(drawingSize/(textSize * 1.5)),\n\t\t\t\tskipFitting = (minSteps >= maxSteps);\n\n\t\t\t// Filter out null values since these would min() to zero\n\t\t\tvar values = [];\n\t\t\teach(valuesArray, function( v ){\n\t\t\t\tv == null || values.push( v );\n\t\t\t});\n\t\t\tvar minValue = min(values),\n\t\t\t    maxValue = max(values);\n\n\t\t\t// We need some degree of separation here to calculate the scales if all the values are the same\n\t\t\t// Adding/minusing 0.5 will give us a range of 1.\n\t\t\tif (maxValue === minValue){\n\t\t\t\tmaxValue += 0.5;\n\t\t\t\t// So we don't end up with a graph with a negative start value if we've said always start from zero\n\t\t\t\tif (minValue >= 0.5 && !startFromZero){\n\t\t\t\t\tminValue -= 0.5;\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\t// Make up a whole number above the values\n\t\t\t\t\tmaxValue += 0.5;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar\tvalueRange = Math.abs(maxValue - minValue),\n\t\t\t\trangeOrderOfMagnitude = calculateOrderOfMagnitude(valueRange),\n\t\t\t\tgraphMax = Math.ceil(maxValue / (1 * Math.pow(10, rangeOrderOfMagnitude))) * Math.pow(10, rangeOrderOfMagnitude),\n\t\t\t\tgraphMin = (startFromZero) ? 0 : Math.floor(minValue / (1 * Math.pow(10, rangeOrderOfMagnitude))) * Math.pow(10, rangeOrderOfMagnitude),\n\t\t\t\tgraphRange = graphMax - graphMin,\n\t\t\t\tstepValue = Math.pow(10, rangeOrderOfMagnitude),\n\t\t\t\tnumberOfSteps = Math.round(graphRange / stepValue);\n\n\t\t\t//If we have more space on the graph we'll use it to give more definition to the data\n\t\t\twhile((numberOfSteps > maxSteps || (numberOfSteps * 2) < maxSteps) && !skipFitting) {\n\t\t\t\tif(numberOfSteps > maxSteps){\n\t\t\t\t\tstepValue *=2;\n\t\t\t\t\tnumberOfSteps = Math.round(graphRange/stepValue);\n\t\t\t\t\t// Don't ever deal with a decimal number of steps - cancel fitting and just use the minimum number of steps.\n\t\t\t\t\tif (numberOfSteps % 1 !== 0){\n\t\t\t\t\t\tskipFitting = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//We can fit in double the amount of scale points on the scale\n\t\t\t\telse{\n\t\t\t\t\t//If user has declared ints only, and the step value isn't a decimal\n\t\t\t\t\tif (integersOnly && rangeOrderOfMagnitude >= 0){\n\t\t\t\t\t\t//If the user has said integers only, we need to check that making the scale more granular wouldn't make it a float\n\t\t\t\t\t\tif(stepValue/2 % 1 === 0){\n\t\t\t\t\t\t\tstepValue /=2;\n\t\t\t\t\t\t\tnumberOfSteps = Math.round(graphRange/stepValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//If it would make it a float break out of the loop\n\t\t\t\t\t\telse{\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//If the scale doesn't have to be an int, make the scale more granular anyway.\n\t\t\t\t\telse{\n\t\t\t\t\t\tstepValue /=2;\n\t\t\t\t\t\tnumberOfSteps = Math.round(graphRange/stepValue);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (skipFitting){\n\t\t\t\tnumberOfSteps = minSteps;\n\t\t\t\tstepValue = graphRange / numberOfSteps;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tsteps : numberOfSteps,\n\t\t\t\tstepValue : stepValue,\n\t\t\t\tmin : graphMin,\n\t\t\t\tmax\t: graphMin + (numberOfSteps * stepValue)\n\t\t\t};\n\n\t\t},\n\t\t/* jshint ignore:start */\n\t\t// Blows up jshint errors based on the new Function constructor\n\t\t//Templating methods\n\t\t//Javascript micro templating by John Resig - source at http://ejohn.org/blog/javascript-micro-templating/\n\t\ttemplate = helpers.template = function(templateString, valuesObject){\n\n\t\t\t// If templateString is function rather than string-template - call the function for valuesObject\n\n\t\t\tif(templateString instanceof Function){\n\t\t\t \treturn templateString(valuesObject);\n\t\t \t}\n\n\t\t\tvar cache = {};\n\t\t\tfunction tmpl(str, data){\n\t\t\t\t// Figure out if we're getting a template, or if we need to\n\t\t\t\t// load the template - and be sure to cache the result.\n\t\t\t\tvar fn = !/\\W/.test(str) ?\n\t\t\t\tcache[str] = cache[str] :\n\n\t\t\t\t// Generate a reusable function that will serve as a template\n\t\t\t\t// generator (and which will be cached).\n\t\t\t\tnew Function(\"obj\",\n\t\t\t\t\t\"var p=[],print=function(){p.push.apply(p,arguments);};\" +\n\n\t\t\t\t\t// Introduce the data as local variables using with(){}\n\t\t\t\t\t\"with(obj){p.push('\" +\n\n\t\t\t\t\t// Convert the template into pure JavaScript\n\t\t\t\t\tstr\n\t\t\t\t\t\t.replace(/[\\r\\t\\n]/g, \" \")\n\t\t\t\t\t\t.split(\"<%\").join(\"\\t\")\n\t\t\t\t\t\t.replace(/((^|%>)[^\\t]*)'/g, \"$1\\r\")\n\t\t\t\t\t\t.replace(/\\t=(.*?)%>/g, \"',$1,'\")\n\t\t\t\t\t\t.split(\"\\t\").join(\"');\")\n\t\t\t\t\t\t.split(\"%>\").join(\"p.push('\")\n\t\t\t\t\t\t.split(\"\\r\").join(\"\\\\'\") +\n\t\t\t\t\t\"');}return p.join('');\"\n\t\t\t\t);\n\n\t\t\t\t// Provide some basic currying to the user\n\t\t\t\treturn data ? fn( data ) : fn;\n\t\t\t}\n\t\t\treturn tmpl(templateString,valuesObject);\n\t\t},\n\t\t/* jshint ignore:end */\n\t\tgenerateLabels = helpers.generateLabels = function(templateString,numberOfSteps,graphMin,stepValue){\n\t\t\tvar labelsArray = new Array(numberOfSteps);\n\t\t\tif (templateString){\n\t\t\t\teach(labelsArray,function(val,index){\n\t\t\t\t\tlabelsArray[index] = template(templateString,{value: (graphMin + (stepValue*(index+1)))});\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn labelsArray;\n\t\t},\n\t\t//--Animation methods\n\t\t//Easing functions adapted from Robert Penner's easing equations\n\t\t//http://www.robertpenner.com/easing/\n\t\teasingEffects = helpers.easingEffects = {\n\t\t\tlinear: function (t) {\n\t\t\t\treturn t;\n\t\t\t},\n\t\t\teaseInQuad: function (t) {\n\t\t\t\treturn t * t;\n\t\t\t},\n\t\t\teaseOutQuad: function (t) {\n\t\t\t\treturn -1 * t * (t - 2);\n\t\t\t},\n\t\t\teaseInOutQuad: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1){\n\t\t\t\t\treturn 1 / 2 * t * t;\n\t\t\t\t}\n\t\t\t\treturn -1 / 2 * ((--t) * (t - 2) - 1);\n\t\t\t},\n\t\t\teaseInCubic: function (t) {\n\t\t\t\treturn t * t * t;\n\t\t\t},\n\t\t\teaseOutCubic: function (t) {\n\t\t\t\treturn 1 * ((t = t / 1 - 1) * t * t + 1);\n\t\t\t},\n\t\t\teaseInOutCubic: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1){\n\t\t\t\t\treturn 1 / 2 * t * t * t;\n\t\t\t\t}\n\t\t\t\treturn 1 / 2 * ((t -= 2) * t * t + 2);\n\t\t\t},\n\t\t\teaseInQuart: function (t) {\n\t\t\t\treturn t * t * t * t;\n\t\t\t},\n\t\t\teaseOutQuart: function (t) {\n\t\t\t\treturn -1 * ((t = t / 1 - 1) * t * t * t - 1);\n\t\t\t},\n\t\t\teaseInOutQuart: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1){\n\t\t\t\t\treturn 1 / 2 * t * t * t * t;\n\t\t\t\t}\n\t\t\t\treturn -1 / 2 * ((t -= 2) * t * t * t - 2);\n\t\t\t},\n\t\t\teaseInQuint: function (t) {\n\t\t\t\treturn 1 * (t /= 1) * t * t * t * t;\n\t\t\t},\n\t\t\teaseOutQuint: function (t) {\n\t\t\t\treturn 1 * ((t = t / 1 - 1) * t * t * t * t + 1);\n\t\t\t},\n\t\t\teaseInOutQuint: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1){\n\t\t\t\t\treturn 1 / 2 * t * t * t * t * t;\n\t\t\t\t}\n\t\t\t\treturn 1 / 2 * ((t -= 2) * t * t * t * t + 2);\n\t\t\t},\n\t\t\teaseInSine: function (t) {\n\t\t\t\treturn -1 * Math.cos(t / 1 * (Math.PI / 2)) + 1;\n\t\t\t},\n\t\t\teaseOutSine: function (t) {\n\t\t\t\treturn 1 * Math.sin(t / 1 * (Math.PI / 2));\n\t\t\t},\n\t\t\teaseInOutSine: function (t) {\n\t\t\t\treturn -1 / 2 * (Math.cos(Math.PI * t / 1) - 1);\n\t\t\t},\n\t\t\teaseInExpo: function (t) {\n\t\t\t\treturn (t === 0) ? 1 : 1 * Math.pow(2, 10 * (t / 1 - 1));\n\t\t\t},\n\t\t\teaseOutExpo: function (t) {\n\t\t\t\treturn (t === 1) ? 1 : 1 * (-Math.pow(2, -10 * t / 1) + 1);\n\t\t\t},\n\t\t\teaseInOutExpo: function (t) {\n\t\t\t\tif (t === 0){\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tif (t === 1){\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\tif ((t /= 1 / 2) < 1){\n\t\t\t\t\treturn 1 / 2 * Math.pow(2, 10 * (t - 1));\n\t\t\t\t}\n\t\t\t\treturn 1 / 2 * (-Math.pow(2, -10 * --t) + 2);\n\t\t\t},\n\t\t\teaseInCirc: function (t) {\n\t\t\t\tif (t >= 1){\n\t\t\t\t\treturn t;\n\t\t\t\t}\n\t\t\t\treturn -1 * (Math.sqrt(1 - (t /= 1) * t) - 1);\n\t\t\t},\n\t\t\teaseOutCirc: function (t) {\n\t\t\t\treturn 1 * Math.sqrt(1 - (t = t / 1 - 1) * t);\n\t\t\t},\n\t\t\teaseInOutCirc: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1){\n\t\t\t\t\treturn -1 / 2 * (Math.sqrt(1 - t * t) - 1);\n\t\t\t\t}\n\t\t\t\treturn 1 / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n\t\t\t},\n\t\t\teaseInElastic: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\tvar p = 0;\n\t\t\t\tvar a = 1;\n\t\t\t\tif (t === 0){\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tif ((t /= 1) == 1){\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\tif (!p){\n\t\t\t\t\tp = 1 * 0.3;\n\t\t\t\t}\n\t\t\t\tif (a < Math.abs(1)) {\n\t\t\t\t\ta = 1;\n\t\t\t\t\ts = p / 4;\n\t\t\t\t} else{\n\t\t\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t\t}\n\t\t\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));\n\t\t\t},\n\t\t\teaseOutElastic: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\tvar p = 0;\n\t\t\t\tvar a = 1;\n\t\t\t\tif (t === 0){\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tif ((t /= 1) == 1){\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\tif (!p){\n\t\t\t\t\tp = 1 * 0.3;\n\t\t\t\t}\n\t\t\t\tif (a < Math.abs(1)) {\n\t\t\t\t\ta = 1;\n\t\t\t\t\ts = p / 4;\n\t\t\t\t} else{\n\t\t\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t\t}\n\t\t\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) + 1;\n\t\t\t},\n\t\t\teaseInOutElastic: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\tvar p = 0;\n\t\t\t\tvar a = 1;\n\t\t\t\tif (t === 0){\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tif ((t /= 1 / 2) == 2){\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\tif (!p){\n\t\t\t\t\tp = 1 * (0.3 * 1.5);\n\t\t\t\t}\n\t\t\t\tif (a < Math.abs(1)) {\n\t\t\t\t\ta = 1;\n\t\t\t\t\ts = p / 4;\n\t\t\t\t} else {\n\t\t\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t\t}\n\t\t\t\tif (t < 1){\n\t\t\t\t\treturn -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));}\n\t\t\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) * 0.5 + 1;\n\t\t\t},\n\t\t\teaseInBack: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\treturn 1 * (t /= 1) * t * ((s + 1) * t - s);\n\t\t\t},\n\t\t\teaseOutBack: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\treturn 1 * ((t = t / 1 - 1) * t * ((s + 1) * t + s) + 1);\n\t\t\t},\n\t\t\teaseInOutBack: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\tif ((t /= 1 / 2) < 1){\n\t\t\t\t\treturn 1 / 2 * (t * t * (((s *= (1.525)) + 1) * t - s));\n\t\t\t\t}\n\t\t\t\treturn 1 / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n\t\t\t},\n\t\t\teaseInBounce: function (t) {\n\t\t\t\treturn 1 - easingEffects.easeOutBounce(1 - t);\n\t\t\t},\n\t\t\teaseOutBounce: function (t) {\n\t\t\t\tif ((t /= 1) < (1 / 2.75)) {\n\t\t\t\t\treturn 1 * (7.5625 * t * t);\n\t\t\t\t} else if (t < (2 / 2.75)) {\n\t\t\t\t\treturn 1 * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75);\n\t\t\t\t} else if (t < (2.5 / 2.75)) {\n\t\t\t\t\treturn 1 * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375);\n\t\t\t\t} else {\n\t\t\t\t\treturn 1 * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375);\n\t\t\t\t}\n\t\t\t},\n\t\t\teaseInOutBounce: function (t) {\n\t\t\t\tif (t < 1 / 2){\n\t\t\t\t\treturn easingEffects.easeInBounce(t * 2) * 0.5;\n\t\t\t\t}\n\t\t\t\treturn easingEffects.easeOutBounce(t * 2 - 1) * 0.5 + 1 * 0.5;\n\t\t\t}\n\t\t},\n\t\t//Request animation polyfill - http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\n\t\trequestAnimFrame = helpers.requestAnimFrame = (function(){\n\t\t\treturn window.requestAnimationFrame ||\n\t\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\t\twindow.oRequestAnimationFrame ||\n\t\t\t\twindow.msRequestAnimationFrame ||\n\t\t\t\tfunction(callback) {\n\t\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\n\t\t\t\t};\n\t\t})(),\n\t\tcancelAnimFrame = helpers.cancelAnimFrame = (function(){\n\t\t\treturn window.cancelAnimationFrame ||\n\t\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\t\twindow.oCancelAnimationFrame ||\n\t\t\t\twindow.msCancelAnimationFrame ||\n\t\t\t\tfunction(callback) {\n\t\t\t\t\treturn window.clearTimeout(callback, 1000 / 60);\n\t\t\t\t};\n\t\t})(),\n\t\tanimationLoop = helpers.animationLoop = function(callback,totalSteps,easingString,onProgress,onComplete,chartInstance){\n\n\t\t\tvar currentStep = 0,\n\t\t\t\teasingFunction = easingEffects[easingString] || easingEffects.linear;\n\n\t\t\tvar animationFrame = function(){\n\t\t\t\tcurrentStep++;\n\t\t\t\tvar stepDecimal = currentStep/totalSteps;\n\t\t\t\tvar easeDecimal = easingFunction(stepDecimal);\n\n\t\t\t\tcallback.call(chartInstance,easeDecimal,stepDecimal, currentStep);\n\t\t\t\tonProgress.call(chartInstance,easeDecimal,stepDecimal);\n\t\t\t\tif (currentStep < totalSteps){\n\t\t\t\t\tchartInstance.animationFrame = requestAnimFrame(animationFrame);\n\t\t\t\t} else{\n\t\t\t\t\tonComplete.apply(chartInstance);\n\t\t\t\t}\n\t\t\t};\n\t\t\trequestAnimFrame(animationFrame);\n\t\t},\n\t\t//-- DOM methods\n\t\tgetRelativePosition = helpers.getRelativePosition = function(evt){\n\t\t\tvar mouseX, mouseY;\n\t\t\tvar e = evt.originalEvent || evt,\n\t\t\t\tcanvas = evt.currentTarget || evt.srcElement,\n\t\t\t\tboundingRect = canvas.getBoundingClientRect();\n\n\t\t\tif (e.touches){\n\t\t\t\tmouseX = e.touches[0].clientX - boundingRect.left;\n\t\t\t\tmouseY = e.touches[0].clientY - boundingRect.top;\n\n\t\t\t}\n\t\t\telse{\n\t\t\t\tmouseX = e.clientX - boundingRect.left;\n\t\t\t\tmouseY = e.clientY - boundingRect.top;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx : mouseX,\n\t\t\t\ty : mouseY\n\t\t\t};\n\n\t\t},\n\t\taddEvent = helpers.addEvent = function(node,eventType,method){\n\t\t\tif (node.addEventListener){\n\t\t\t\tnode.addEventListener(eventType,method);\n\t\t\t} else if (node.attachEvent){\n\t\t\t\tnode.attachEvent(\"on\"+eventType, method);\n\t\t\t} else {\n\t\t\t\tnode[\"on\"+eventType] = method;\n\t\t\t}\n\t\t},\n\t\tremoveEvent = helpers.removeEvent = function(node, eventType, handler){\n\t\t\tif (node.removeEventListener){\n\t\t\t\tnode.removeEventListener(eventType, handler, false);\n\t\t\t} else if (node.detachEvent){\n\t\t\t\tnode.detachEvent(\"on\"+eventType,handler);\n\t\t\t} else{\n\t\t\t\tnode[\"on\" + eventType] = noop;\n\t\t\t}\n\t\t},\n\t\tbindEvents = helpers.bindEvents = function(chartInstance, arrayOfEvents, handler){\n\t\t\t// Create the events object if it's not already present\n\t\t\tif (!chartInstance.events) chartInstance.events = {};\n\n\t\t\teach(arrayOfEvents,function(eventName){\n\t\t\t\tchartInstance.events[eventName] = function(){\n\t\t\t\t\thandler.apply(chartInstance, arguments);\n\t\t\t\t};\n\t\t\t\taddEvent(chartInstance.chart.canvas,eventName,chartInstance.events[eventName]);\n\t\t\t});\n\t\t},\n\t\tunbindEvents = helpers.unbindEvents = function (chartInstance, arrayOfEvents) {\n\t\t\teach(arrayOfEvents, function(handler,eventName){\n\t\t\t\tremoveEvent(chartInstance.chart.canvas, eventName, handler);\n\t\t\t});\n\t\t},\n\t\tgetMaximumWidth = helpers.getMaximumWidth = function(domNode){\n\t\t\tvar container = domNode.parentNode,\n\t\t\t    padding = parseInt(getStyle(container, 'padding-left')) + parseInt(getStyle(container, 'padding-right'));\n\t\t\t// TODO = check cross browser stuff with this.\n\t\t\treturn container ? container.clientWidth - padding : 0;\n\t\t},\n\t\tgetMaximumHeight = helpers.getMaximumHeight = function(domNode){\n\t\t\tvar container = domNode.parentNode,\n\t\t\t    padding = parseInt(getStyle(container, 'padding-bottom')) + parseInt(getStyle(container, 'padding-top'));\n\t\t\t// TODO = check cross browser stuff with this.\n\t\t\treturn container ? container.clientHeight - padding : 0;\n\t\t},\n\t\tgetStyle = helpers.getStyle = function (el, property) {\n\t\t\treturn el.currentStyle ?\n\t\t\t\tel.currentStyle[property] :\n\t\t\t\tdocument.defaultView.getComputedStyle(el, null).getPropertyValue(property);\n\t\t},\n\t\tgetMaximumSize = helpers.getMaximumSize = helpers.getMaximumWidth, // legacy support\n\t\tretinaScale = helpers.retinaScale = function(chart){\n\t\t\tvar ctx = chart.ctx,\n\t\t\t\twidth = chart.canvas.width,\n\t\t\t\theight = chart.canvas.height;\n\n\t\t\tif (window.devicePixelRatio) {\n\t\t\t\tctx.canvas.style.width = width + \"px\";\n\t\t\t\tctx.canvas.style.height = height + \"px\";\n\t\t\t\tctx.canvas.height = height * window.devicePixelRatio;\n\t\t\t\tctx.canvas.width = width * window.devicePixelRatio;\n\t\t\t\tctx.scale(window.devicePixelRatio, window.devicePixelRatio);\n\t\t\t}\n\t\t},\n\t\t//-- Canvas methods\n\t\tclear = helpers.clear = function(chart){\n\t\t\tchart.ctx.clearRect(0,0,chart.width,chart.height);\n\t\t},\n\t\tfontString = helpers.fontString = function(pixelSize,fontStyle,fontFamily){\n\t\t\treturn fontStyle + \" \" + pixelSize+\"px \" + fontFamily;\n\t\t},\n\t\tlongestText = helpers.longestText = function(ctx,font,arrayOfStrings){\n\t\t\tctx.font = font;\n\t\t\tvar longest = 0;\n\t\t\teach(arrayOfStrings,function(string){\n\t\t\t\tvar textWidth = ctx.measureText(string).width;\n\t\t\t\tlongest = (textWidth > longest) ? textWidth : longest;\n\t\t\t});\n\t\t\treturn longest;\n\t\t},\n\t\tdrawRoundedRectangle = helpers.drawRoundedRectangle = function(ctx,x,y,width,height,radius){\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x + radius, y);\n\t\t\tctx.lineTo(x + width - radius, y);\n\t\t\tctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n\t\t\tctx.lineTo(x + width, y + height - radius);\n\t\t\tctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n\t\t\tctx.lineTo(x + radius, y + height);\n\t\t\tctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n\t\t\tctx.lineTo(x, y + radius);\n\t\t\tctx.quadraticCurveTo(x, y, x + radius, y);\n\t\t\tctx.closePath();\n\t\t};\n\n\n\t//Store a reference to each instance - allowing us to globally resize chart instances on window resize.\n\t//Destroy method on the chart will remove the instance of the chart from this reference.\n\tChart.instances = {};\n\n\tChart.Type = function(data,options,chart){\n\t\tthis.options = options;\n\t\tthis.chart = chart;\n\t\tthis.id = uid();\n\t\t//Add the chart instance to the global namespace\n\t\tChart.instances[this.id] = this;\n\n\t\t// Initialize is always called when a chart type is created\n\t\t// By default it is a no op, but it should be extended\n\t\tif (options.responsive){\n\t\t\tthis.resize();\n\t\t}\n\t\tthis.initialize.call(this,data);\n\t};\n\n\t//Core methods that'll be a part of every chart type\n\textend(Chart.Type.prototype,{\n\t\tinitialize : function(){return this;},\n\t\tclear : function(){\n\t\t\tclear(this.chart);\n\t\t\treturn this;\n\t\t},\n\t\tstop : function(){\n\t\t\t// Stops any current animation loop occuring\n\t\t\tChart.animationService.cancelAnimation(this);\n\t\t\treturn this;\n\t\t},\n\t\tresize : function(callback){\n\t\t\tthis.stop();\n\t\t\tvar canvas = this.chart.canvas,\n\t\t\t\tnewWidth = getMaximumWidth(this.chart.canvas),\n\t\t\t\tnewHeight = this.options.maintainAspectRatio ? newWidth / this.chart.aspectRatio : getMaximumHeight(this.chart.canvas);\n\n\t\t\tcanvas.width = this.chart.width = newWidth;\n\t\t\tcanvas.height = this.chart.height = newHeight;\n\n\t\t\tretinaScale(this.chart);\n\n\t\t\tif (typeof callback === \"function\"){\n\t\t\t\tcallback.apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\treflow : noop,\n\t\trender : function(reflow){\n\t\t\tif (reflow){\n\t\t\t\tthis.reflow();\n\t\t\t}\n\t\t\t\n\t\t\tif (this.options.animation && !reflow){\n\t\t\t\tvar animation = new Chart.Animation();\n\t\t\t\tanimation.numSteps = this.options.animationSteps;\n\t\t\t\tanimation.easing = this.options.animationEasing;\n\t\t\t\t\n\t\t\t\t// render function\n\t\t\t\tanimation.render = function(chartInstance, animationObject) {\n\t\t\t\t\tvar easingFunction = helpers.easingEffects[animationObject.easing];\n\t\t\t\t\tvar stepDecimal = animationObject.currentStep / animationObject.numSteps;\n\t\t\t\t\tvar easeDecimal = easingFunction(stepDecimal);\n\t\t\t\t\t\n\t\t\t\t\tchartInstance.draw(easeDecimal, stepDecimal, animationObject.currentStep);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// user events\n\t\t\t\tanimation.onAnimationProgress = this.options.onAnimationProgress;\n\t\t\t\tanimation.onAnimationComplete = this.options.onAnimationComplete;\n\t\t\t\t\n\t\t\t\tChart.animationService.addAnimation(this, animation);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tthis.draw();\n\t\t\t\tthis.options.onAnimationComplete.call(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\tgenerateLegend : function(){\n\t\t\treturn helpers.template(this.options.legendTemplate, this);\n\t\t},\n\t\tdestroy : function(){\n\t\t\tthis.stop();\n\t\t\tthis.clear();\n\t\t\tunbindEvents(this, this.events);\n\t\t\tvar canvas = this.chart.canvas;\n\n\t\t\t// Reset canvas height/width attributes starts a fresh with the canvas context\n\t\t\tcanvas.width = this.chart.width;\n\t\t\tcanvas.height = this.chart.height;\n\n\t\t\t// < IE9 doesn't support removeProperty\n\t\t\tif (canvas.style.removeProperty) {\n\t\t\t\tcanvas.style.removeProperty('width');\n\t\t\t\tcanvas.style.removeProperty('height');\n\t\t\t} else {\n\t\t\t\tcanvas.style.removeAttribute('width');\n\t\t\t\tcanvas.style.removeAttribute('height');\n\t\t\t}\n\n\t\t\tdelete Chart.instances[this.id];\n\t\t},\n\t\tshowTooltip : function(ChartElements, forceRedraw){\n\t\t\t// Only redraw the chart if we've actually changed what we're hovering on.\n\t\t\tif (typeof this.activeElements === 'undefined') this.activeElements = [];\n\n\t\t\tvar isChanged = (function(Elements){\n\t\t\t\tvar changed = false;\n\n\t\t\t\tif (Elements.length !== this.activeElements.length){\n\t\t\t\t\tchanged = true;\n\t\t\t\t\treturn changed;\n\t\t\t\t}\n\n\t\t\t\teach(Elements, function(element, index){\n\t\t\t\t\tif (element !== this.activeElements[index]){\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\t\t\t\treturn changed;\n\t\t\t}).call(this, ChartElements);\n\n\t\t\tif (!isChanged && !forceRedraw){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tthis.activeElements = ChartElements;\n\t\t\t}\n\t\t\tthis.draw();\n\t\t\tif(this.options.customTooltips){\n\t\t\t\tthis.options.customTooltips(false);\n\t\t\t}\n\t\t\tif (ChartElements.length > 0){\n\t\t\t\t// If we have multiple datasets, show a MultiTooltip for all of the data points at that index\n\t\t\t\tif (this.datasets && this.datasets.length > 1) {\n\t\t\t\t\tvar dataArray,\n\t\t\t\t\t\tdataIndex;\n\n\t\t\t\t\tfor (var i = this.datasets.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tdataArray = this.datasets[i].points || this.datasets[i].bars || this.datasets[i].segments;\n\t\t\t\t\t\tdataIndex = indexOf(dataArray, ChartElements[0]);\n\t\t\t\t\t\tif (dataIndex !== -1){\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar tooltipLabels = [],\n\t\t\t\t\t\ttooltipColors = [],\n\t\t\t\t\t\tmedianPosition = (function(index) {\n\n\t\t\t\t\t\t\t// Get all the points at that particular index\n\t\t\t\t\t\t\tvar Elements = [],\n\t\t\t\t\t\t\t\tdataCollection,\n\t\t\t\t\t\t\t\txPositions = [],\n\t\t\t\t\t\t\t\tyPositions = [],\n\t\t\t\t\t\t\t\txMax,\n\t\t\t\t\t\t\t\tyMax,\n\t\t\t\t\t\t\t\txMin,\n\t\t\t\t\t\t\t\tyMin;\n\t\t\t\t\t\t\thelpers.each(this.datasets, function(dataset){\n\t\t\t\t\t\t\t\tdataCollection = dataset.points || dataset.bars || dataset.segments;\n\t\t\t\t\t\t\t\tif (dataCollection[dataIndex] && dataCollection[dataIndex].hasValue()){\n\t\t\t\t\t\t\t\t\tElements.push(dataCollection[dataIndex]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\thelpers.each(Elements, function(element) {\n\t\t\t\t\t\t\t\txPositions.push(element.x);\n\t\t\t\t\t\t\t\tyPositions.push(element.y);\n\n\n\t\t\t\t\t\t\t\t//Include any colour information about the element\n\t\t\t\t\t\t\t\ttooltipLabels.push(helpers.template(this.options.multiTooltipTemplate, element));\n\t\t\t\t\t\t\t\ttooltipColors.push({\n\t\t\t\t\t\t\t\t\tfill: element._saved.fillColor || element.fillColor,\n\t\t\t\t\t\t\t\t\tstroke: element._saved.strokeColor || element.strokeColor\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t}, this);\n\n\t\t\t\t\t\t\tyMin = min(yPositions);\n\t\t\t\t\t\t\tyMax = max(yPositions);\n\n\t\t\t\t\t\t\txMin = min(xPositions);\n\t\t\t\t\t\t\txMax = max(xPositions);\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tx: (xMin > this.chart.width/2) ? xMin : xMax,\n\t\t\t\t\t\t\t\ty: (yMin + yMax)/2\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}).call(this, dataIndex);\n\n\t\t\t\t\tnew Chart.MultiTooltip({\n\t\t\t\t\t\tx: medianPosition.x,\n\t\t\t\t\t\ty: medianPosition.y,\n\t\t\t\t\t\txPadding: this.options.tooltipXPadding,\n\t\t\t\t\t\tyPadding: this.options.tooltipYPadding,\n\t\t\t\t\t\txOffset: this.options.tooltipXOffset,\n\t\t\t\t\t\tfillColor: this.options.tooltipFillColor,\n\t\t\t\t\t\ttextColor: this.options.tooltipFontColor,\n\t\t\t\t\t\tfontFamily: this.options.tooltipFontFamily,\n\t\t\t\t\t\tfontStyle: this.options.tooltipFontStyle,\n\t\t\t\t\t\tfontSize: this.options.tooltipFontSize,\n\t\t\t\t\t\ttitleTextColor: this.options.tooltipTitleFontColor,\n\t\t\t\t\t\ttitleFontFamily: this.options.tooltipTitleFontFamily,\n\t\t\t\t\t\ttitleFontStyle: this.options.tooltipTitleFontStyle,\n\t\t\t\t\t\ttitleFontSize: this.options.tooltipTitleFontSize,\n\t\t\t\t\t\tcornerRadius: this.options.tooltipCornerRadius,\n\t\t\t\t\t\tlabels: tooltipLabels,\n\t\t\t\t\t\tlegendColors: tooltipColors,\n\t\t\t\t\t\tlegendColorBackground : this.options.multiTooltipKeyBackground,\n\t\t\t\t\t\ttitle: template(this.options.tooltipTitleTemplate,ChartElements[0]),\n\t\t\t\t\t\tchart: this.chart,\n\t\t\t\t\t\tctx: this.chart.ctx,\n\t\t\t\t\t\tcustom: this.options.customTooltips\n\t\t\t\t\t}).draw();\n\n\t\t\t\t} else {\n\t\t\t\t\teach(ChartElements, function(Element) {\n\t\t\t\t\t\tvar tooltipPosition = Element.tooltipPosition();\n\t\t\t\t\t\tnew Chart.Tooltip({\n\t\t\t\t\t\t\tx: Math.round(tooltipPosition.x),\n\t\t\t\t\t\t\ty: Math.round(tooltipPosition.y),\n\t\t\t\t\t\t\txPadding: this.options.tooltipXPadding,\n\t\t\t\t\t\t\tyPadding: this.options.tooltipYPadding,\n\t\t\t\t\t\t\tfillColor: this.options.tooltipFillColor,\n\t\t\t\t\t\t\ttextColor: this.options.tooltipFontColor,\n\t\t\t\t\t\t\tfontFamily: this.options.tooltipFontFamily,\n\t\t\t\t\t\t\tfontStyle: this.options.tooltipFontStyle,\n\t\t\t\t\t\t\tfontSize: this.options.tooltipFontSize,\n\t\t\t\t\t\t\tcaretHeight: this.options.tooltipCaretSize,\n\t\t\t\t\t\t\tcornerRadius: this.options.tooltipCornerRadius,\n\t\t\t\t\t\t\ttext: template(this.options.tooltipTemplate, Element),\n\t\t\t\t\t\t\tchart: this.chart,\n\t\t\t\t\t\t\tcustom: this.options.customTooltips\n\t\t\t\t\t\t}).draw();\n\t\t\t\t\t}, this);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\ttoBase64Image : function(){\n\t\t\treturn this.chart.canvas.toDataURL.apply(this.chart.canvas, arguments);\n\t\t}\n\t});\n\n\tChart.Type.extend = function(extensions){\n\n\t\tvar parent = this;\n\n\t\tvar ChartType = function(){\n\t\t\treturn parent.apply(this,arguments);\n\t\t};\n\n\t\t//Copy the prototype object of the this class\n\t\tChartType.prototype = clone(parent.prototype);\n\t\t//Now overwrite some of the properties in the base class with the new extensions\n\t\textend(ChartType.prototype, extensions);\n\n\t\tChartType.extend = Chart.Type.extend;\n\n\t\tif (extensions.name || parent.prototype.name){\n\n\t\t\tvar chartName = extensions.name || parent.prototype.name;\n\t\t\t//Assign any potential default values of the new chart type\n\n\t\t\t//If none are defined, we'll use a clone of the chart type this is being extended from.\n\t\t\t//I.e. if we extend a line chart, we'll use the defaults from the line chart if our new chart\n\t\t\t//doesn't define some defaults of their own.\n\n\t\t\tvar baseDefaults = (Chart.defaults[parent.prototype.name]) ? clone(Chart.defaults[parent.prototype.name]) : {};\n\n\t\t\tChart.defaults[chartName] = extend(baseDefaults,extensions.defaults);\n\n\t\t\tChart.types[chartName] = ChartType;\n\n\t\t\t//Register this new chart type in the Chart prototype\n\t\t\tChart.prototype[chartName] = function(data,options){\n\t\t\t\tvar config = merge(Chart.defaults.global, Chart.defaults[chartName], options || {});\n\t\t\t\treturn new ChartType(data,config,this);\n\t\t\t};\n\t\t} else{\n\t\t\twarn(\"Name not provided for this chart, so it hasn't been registered\");\n\t\t}\n\t\treturn parent;\n\t};\n\n\tChart.Element = function(configuration){\n\t\textend(this,configuration);\n\t\tthis.initialize.apply(this,arguments);\n\t\tthis.save();\n\t};\n\textend(Chart.Element.prototype,{\n\t\tinitialize : function(){},\n\t\trestore : function(props){\n\t\t\tif (!props){\n\t\t\t\textend(this,this._saved);\n\t\t\t} else {\n\t\t\t\teach(props,function(key){\n\t\t\t\t\tthis[key] = this._saved[key];\n\t\t\t\t},this);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\tsave : function(){\n\t\t\tthis._saved = clone(this);\n\t\t\tdelete this._saved._saved;\n\t\t\treturn this;\n\t\t},\n\t\tupdate : function(newProps){\n\t\t\teach(newProps,function(value,key){\n\t\t\t\tthis._saved[key] = this[key];\n\t\t\t\tthis[key] = value;\n\t\t\t},this);\n\t\t\treturn this;\n\t\t},\n\t\ttransition : function(props,ease){\n\t\t\teach(props,function(value,key){\n\t\t\t\tthis[key] = ((value - this._saved[key]) * ease) + this._saved[key];\n\t\t\t},this);\n\t\t\treturn this;\n\t\t},\n\t\ttooltipPosition : function(){\n\t\t\treturn {\n\t\t\t\tx : this.x,\n\t\t\t\ty : this.y\n\t\t\t};\n\t\t},\n\t\thasValue: function(){\n\t\t\treturn isNumber(this.value);\n\t\t}\n\t});\n\n\tChart.Element.extend = inherits;\n\n\n\tChart.Point = Chart.Element.extend({\n\t\tdisplay: true,\n\t\tinRange: function(chartX,chartY){\n\t\t\tvar hitDetectionRange = this.hitDetectionRadius + this.radius;\n\t\t\treturn ((Math.pow(chartX-this.x, 2)+Math.pow(chartY-this.y, 2)) < Math.pow(hitDetectionRange,2));\n\t\t},\n\t\tdraw : function(){\n\t\t\tif (this.display){\n\t\t\t\tvar ctx = this.ctx;\n\t\t\t\tctx.beginPath();\n\n\t\t\t\tctx.arc(this.x, this.y, this.radius, 0, Math.PI*2);\n\t\t\t\tctx.closePath();\n\n\t\t\t\tctx.strokeStyle = this.strokeColor;\n\t\t\t\tctx.lineWidth = this.strokeWidth;\n\n\t\t\t\tctx.fillStyle = this.fillColor;\n\n\t\t\t\tctx.fill();\n\t\t\t\tctx.stroke();\n\t\t\t}\n\n\n\t\t\t//Quick debug for bezier curve splining\n\t\t\t//Highlights control points and the line between them.\n\t\t\t//Handy for dev - stripped in the min version.\n\n\t\t\t// ctx.save();\n\t\t\t// ctx.fillStyle = \"black\";\n\t\t\t// ctx.strokeStyle = \"black\"\n\t\t\t// ctx.beginPath();\n\t\t\t// ctx.arc(this.controlPoints.inner.x,this.controlPoints.inner.y, 2, 0, Math.PI*2);\n\t\t\t// ctx.fill();\n\n\t\t\t// ctx.beginPath();\n\t\t\t// ctx.arc(this.controlPoints.outer.x,this.controlPoints.outer.y, 2, 0, Math.PI*2);\n\t\t\t// ctx.fill();\n\n\t\t\t// ctx.moveTo(this.controlPoints.inner.x,this.controlPoints.inner.y);\n\t\t\t// ctx.lineTo(this.x, this.y);\n\t\t\t// ctx.lineTo(this.controlPoints.outer.x,this.controlPoints.outer.y);\n\t\t\t// ctx.stroke();\n\n\t\t\t// ctx.restore();\n\n\n\n\t\t}\n\t});\n\n\tChart.Arc = Chart.Element.extend({\n\t\tinRange : function(chartX,chartY){\n\n\t\t\tvar pointRelativePosition = helpers.getAngleFromPoint(this, {\n\t\t\t\tx: chartX,\n\t\t\t\ty: chartY\n\t\t\t});\n\n\t\t\t// Normalize all angles to 0 - 2*PI (0 - 360°)\n\t\t\tvar pointRelativeAngle = pointRelativePosition.angle % (Math.PI * 2),\n\t\t\t    startAngle = (Math.PI * 2 + this.startAngle) % (Math.PI * 2),\n\t\t\t    endAngle = (Math.PI * 2 + this.endAngle) % (Math.PI * 2) || 360;\n\n\t\t\t// Calculate wether the pointRelativeAngle is between the start and the end angle\n\t\t\tvar betweenAngles = (endAngle < startAngle) ?\n\t\t\t\tpointRelativeAngle <= endAngle || pointRelativeAngle >= startAngle:\n\t\t\t\tpointRelativeAngle >= startAngle && pointRelativeAngle <= endAngle;\n\n\t\t\t//Check if within the range of the open/close angle\n\t\t\tvar withinRadius = (pointRelativePosition.distance >= this.innerRadius && pointRelativePosition.distance <= this.outerRadius);\n\n\t\t\treturn (betweenAngles && withinRadius);\n\t\t\t//Ensure within the outside of the arc centre, but inside arc outer\n\t\t},\n\t\ttooltipPosition : function(){\n\t\t\tvar centreAngle = this.startAngle + ((this.endAngle - this.startAngle) / 2),\n\t\t\t\trangeFromCentre = (this.outerRadius - this.innerRadius) / 2 + this.innerRadius;\n\t\t\treturn {\n\t\t\t\tx : this.x + (Math.cos(centreAngle) * rangeFromCentre),\n\t\t\t\ty : this.y + (Math.sin(centreAngle) * rangeFromCentre)\n\t\t\t};\n\t\t},\n\t\tdraw : function(animationPercent){\n\n\t\t\tvar easingDecimal = animationPercent || 1;\n\n\t\t\tvar ctx = this.ctx;\n\n\t\t\tctx.beginPath();\n\n\t\t\tctx.arc(this.x, this.y, this.outerRadius < 0 ? 0 : this.outerRadius, this.startAngle, this.endAngle);\n\n            ctx.arc(this.x, this.y, this.innerRadius < 0 ? 0 : this.innerRadius, this.endAngle, this.startAngle, true);\n\n\t\t\tctx.closePath();\n\t\t\tctx.strokeStyle = this.strokeColor;\n\t\t\tctx.lineWidth = this.strokeWidth;\n\n\t\t\tctx.fillStyle = this.fillColor;\n\n\t\t\tctx.fill();\n\t\t\tctx.lineJoin = 'bevel';\n\n\t\t\tif (this.showStroke){\n\t\t\t\tctx.stroke();\n\t\t\t}\n\t\t}\n\t});\n\n\tChart.Rectangle = Chart.Element.extend({\n\t\tdraw : function(){\n\t\t\tvar ctx = this.ctx,\n\t\t\t\thalfWidth = this.width/2,\n\t\t\t\tleftX = this.x - halfWidth,\n\t\t\t\trightX = this.x + halfWidth,\n\t\t\t\ttop = this.base - (this.base - this.y),\n\t\t\t\thalfStroke = this.strokeWidth / 2;\n\n\t\t\t// Canvas doesn't allow us to stroke inside the width so we can\n\t\t\t// adjust the sizes to fit if we're setting a stroke on the line\n\t\t\tif (this.showStroke){\n\t\t\t\tleftX += halfStroke;\n\t\t\t\trightX -= halfStroke;\n\t\t\t\ttop += halfStroke;\n\t\t\t}\n\n\t\t\tctx.beginPath();\n\n\t\t\tctx.fillStyle = this.fillColor;\n\t\t\tctx.strokeStyle = this.strokeColor;\n\t\t\tctx.lineWidth = this.strokeWidth;\n\n\t\t\t// It'd be nice to keep this class totally generic to any rectangle\n\t\t\t// and simply specify which border to miss out.\n\t\t\tctx.moveTo(leftX, this.base);\n\t\t\tctx.lineTo(leftX, top);\n\t\t\tctx.lineTo(rightX, top);\n\t\t\tctx.lineTo(rightX, this.base);\n\t\t\tctx.fill();\n\t\t\tif (this.showStroke){\n\t\t\t\tctx.stroke();\n\t\t\t}\n\t\t},\n\t\theight : function(){\n\t\t\treturn this.base - this.y;\n\t\t},\n\t\tinRange : function(chartX,chartY){\n\t\t\treturn (chartX >= this.x - this.width/2 && chartX <= this.x + this.width/2) && (chartY >= this.y && chartY <= this.base);\n\t\t}\n\t});\n\n\tChart.Animation = Chart.Element.extend({\n\t\tcurrentStep: null, // the current animation step\n\t\tnumSteps: 60, // default number of steps\n\t\teasing: \"\", // the easing to use for this animation\n\t\trender: null, // render function used by the animation service\n\t\t\n\t\tonAnimationProgress: null, // user specified callback to fire on each step of the animation \n\t\tonAnimationComplete: null, // user specified callback to fire when the animation finishes\n\t});\n\t\n\tChart.Tooltip = Chart.Element.extend({\n\t\tdraw : function(){\n\n\t\t\tvar ctx = this.chart.ctx;\n\n\t\t\tctx.font = fontString(this.fontSize,this.fontStyle,this.fontFamily);\n\n\t\t\tthis.xAlign = \"center\";\n\t\t\tthis.yAlign = \"above\";\n\n\t\t\t//Distance between the actual element.y position and the start of the tooltip caret\n\t\t\tvar caretPadding = this.caretPadding = 2;\n\n\t\t\tvar tooltipWidth = ctx.measureText(this.text).width + 2*this.xPadding,\n\t\t\t\ttooltipRectHeight = this.fontSize + 2*this.yPadding,\n\t\t\t\ttooltipHeight = tooltipRectHeight + this.caretHeight + caretPadding;\n\n\t\t\tif (this.x + tooltipWidth/2 >this.chart.width){\n\t\t\t\tthis.xAlign = \"left\";\n\t\t\t} else if (this.x - tooltipWidth/2 < 0){\n\t\t\t\tthis.xAlign = \"right\";\n\t\t\t}\n\n\t\t\tif (this.y - tooltipHeight < 0){\n\t\t\t\tthis.yAlign = \"below\";\n\t\t\t}\n\n\n\t\t\tvar tooltipX = this.x - tooltipWidth/2,\n\t\t\t\ttooltipY = this.y - tooltipHeight;\n\n\t\t\tctx.fillStyle = this.fillColor;\n\n\t\t\t// Custom Tooltips\n\t\t\tif(this.custom){\n\t\t\t\tthis.custom(this);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tswitch(this.yAlign)\n\t\t\t\t{\n\t\t\t\tcase \"above\":\n\t\t\t\t\t//Draw a caret above the x/y\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(this.x,this.y - caretPadding);\n\t\t\t\t\tctx.lineTo(this.x + this.caretHeight, this.y - (caretPadding + this.caretHeight));\n\t\t\t\t\tctx.lineTo(this.x - this.caretHeight, this.y - (caretPadding + this.caretHeight));\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"below\":\n\t\t\t\t\ttooltipY = this.y + caretPadding + this.caretHeight;\n\t\t\t\t\t//Draw a caret below the x/y\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(this.x, this.y + caretPadding);\n\t\t\t\t\tctx.lineTo(this.x + this.caretHeight, this.y + caretPadding + this.caretHeight);\n\t\t\t\t\tctx.lineTo(this.x - this.caretHeight, this.y + caretPadding + this.caretHeight);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tswitch(this.xAlign)\n\t\t\t\t{\n\t\t\t\tcase \"left\":\n\t\t\t\t\ttooltipX = this.x - tooltipWidth + (this.cornerRadius + this.caretHeight);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\ttooltipX = this.x - (this.cornerRadius + this.caretHeight);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdrawRoundedRectangle(ctx,tooltipX,tooltipY,tooltipWidth,tooltipRectHeight,this.cornerRadius);\n\n\t\t\t\tctx.fill();\n\n\t\t\t\tctx.fillStyle = this.textColor;\n\t\t\t\tctx.textAlign = \"center\";\n\t\t\t\tctx.textBaseline = \"middle\";\n\t\t\t\tctx.fillText(this.text, tooltipX + tooltipWidth/2, tooltipY + tooltipRectHeight/2);\n\t\t\t}\n\t\t}\n\t});\n\n\tChart.MultiTooltip = Chart.Element.extend({\n\t\tinitialize : function(){\n\t\t\tthis.font = fontString(this.fontSize,this.fontStyle,this.fontFamily);\n\n\t\t\tthis.titleFont = fontString(this.titleFontSize,this.titleFontStyle,this.titleFontFamily);\n\n\t\t\tthis.titleHeight = this.title ? this.titleFontSize * 1.5 : 0;\n\t\t\tthis.height = (this.labels.length * this.fontSize) + ((this.labels.length-1) * (this.fontSize/2)) + (this.yPadding*2) + this.titleHeight;\n\n\t\t\tthis.ctx.font = this.titleFont;\n\n\t\t\tvar titleWidth = this.ctx.measureText(this.title).width,\n\t\t\t\t//Label has a legend square as well so account for this.\n\t\t\t\tlabelWidth = longestText(this.ctx,this.font,this.labels) + this.fontSize + 3,\n\t\t\t\tlongestTextWidth = max([labelWidth,titleWidth]);\n\n\t\t\tthis.width = longestTextWidth + (this.xPadding*2);\n\n\n\t\t\tvar halfHeight = this.height/2;\n\n\t\t\t//Check to ensure the height will fit on the canvas\n\t\t\tif (this.y - halfHeight < 0 ){\n\t\t\t\tthis.y = halfHeight;\n\t\t\t} else if (this.y + halfHeight > this.chart.height){\n\t\t\t\tthis.y = this.chart.height - halfHeight;\n\t\t\t}\n\n\t\t\t//Decide whether to align left or right based on position on canvas\n\t\t\tif (this.x > this.chart.width/2){\n\t\t\t\tthis.x -= this.xOffset + this.width;\n\t\t\t} else {\n\t\t\t\tthis.x += this.xOffset;\n\t\t\t}\n\n\n\t\t},\n\t\tgetLineHeight : function(index){\n\t\t\tvar baseLineHeight = this.y - (this.height/2) + this.yPadding,\n\t\t\t\tafterTitleIndex = index-1;\n\n\t\t\t//If the index is zero, we're getting the title\n\t\t\tif (index === 0){\n\t\t\t\treturn baseLineHeight + this.titleHeight / 3;\n\t\t\t} else{\n\t\t\t\treturn baseLineHeight + ((this.fontSize * 1.5 * afterTitleIndex) + this.fontSize / 2) + this.titleHeight;\n\t\t\t}\n\n\t\t},\n\t\tdraw : function(){\n\t\t\t// Custom Tooltips\n\t\t\tif(this.custom){\n\t\t\t\tthis.custom(this);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tdrawRoundedRectangle(this.ctx,this.x,this.y - this.height/2,this.width,this.height,this.cornerRadius);\n\t\t\t\tvar ctx = this.ctx;\n\t\t\t\tctx.fillStyle = this.fillColor;\n\t\t\t\tctx.fill();\n\t\t\t\tctx.closePath();\n\n\t\t\t\tctx.textAlign = \"left\";\n\t\t\t\tctx.textBaseline = \"middle\";\n\t\t\t\tctx.fillStyle = this.titleTextColor;\n\t\t\t\tctx.font = this.titleFont;\n\n\t\t\t\tctx.fillText(this.title,this.x + this.xPadding, this.getLineHeight(0));\n\n\t\t\t\tctx.font = this.font;\n\t\t\t\thelpers.each(this.labels,function(label,index){\n\t\t\t\t\tctx.fillStyle = this.textColor;\n\t\t\t\t\tctx.fillText(label,this.x + this.xPadding + this.fontSize + 3, this.getLineHeight(index + 1));\n\n\t\t\t\t\t//A bit gnarly, but clearing this rectangle breaks when using explorercanvas (clears whole canvas)\n\t\t\t\t\t//ctx.clearRect(this.x + this.xPadding, this.getLineHeight(index + 1) - this.fontSize/2, this.fontSize, this.fontSize);\n\t\t\t\t\t//Instead we'll make a white filled block to put the legendColour palette over.\n\n\t\t\t\t\tctx.fillStyle = this.legendColorBackground;\n\t\t\t\t\tctx.fillRect(this.x + this.xPadding, this.getLineHeight(index + 1) - this.fontSize/2, this.fontSize, this.fontSize);\n\n\t\t\t\t\tctx.fillStyle = this.legendColors[index].fill;\n\t\t\t\t\tctx.fillRect(this.x + this.xPadding, this.getLineHeight(index + 1) - this.fontSize/2, this.fontSize, this.fontSize);\n\n\n\t\t\t\t},this);\n\t\t\t}\n\t\t}\n\t});\n\n\tChart.Scale = Chart.Element.extend({\n\t\tinitialize : function(){\n\t\t\tthis.fit();\n\t\t},\n\t\tbuildYLabels : function(){\n\t\t\tthis.yLabels = [];\n\n\t\t\tvar stepDecimalPlaces = getDecimalPlaces(this.stepValue);\n\n\t\t\tfor (var i=0; i<=this.steps; i++){\n\t\t\t\tthis.yLabels.push(template(this.templateString,{value:(this.min + (i * this.stepValue)).toFixed(stepDecimalPlaces)}));\n\t\t\t}\n\t\t\tthis.yLabelWidth = (this.display && this.showLabels) ? longestText(this.ctx,this.font,this.yLabels) + 10 : 0;\n\t\t},\n\t\taddXLabel : function(label){\n\t\t\tthis.xLabels.push(label);\n\t\t\tthis.valuesCount++;\n\t\t\tthis.fit();\n\t\t},\n\t\tremoveXLabel : function(){\n\t\t\tthis.xLabels.shift();\n\t\t\tthis.valuesCount--;\n\t\t\tthis.fit();\n\t\t},\n\t\t// Fitting loop to rotate x Labels and figure out what fits there, and also calculate how many Y steps to use\n\t\tfit: function(){\n\t\t\t// First we need the width of the yLabels, assuming the xLabels aren't rotated\n\n\t\t\t// To do that we need the base line at the top and base of the chart, assuming there is no x label rotation\n\t\t\tthis.startPoint = (this.display) ? this.fontSize : 0;\n\t\t\tthis.endPoint = (this.display) ? this.height - (this.fontSize * 1.5) - 5 : this.height; // -5 to pad labels\n\n\t\t\t// Apply padding settings to the start and end point.\n\t\t\tthis.startPoint += this.padding;\n\t\t\tthis.endPoint -= this.padding;\n\n\t\t\t// Cache the starting endpoint, excluding the space for x labels\n\t\t\tvar cachedEndPoint = this.endPoint;\n\n\t\t\t// Cache the starting height, so can determine if we need to recalculate the scale yAxis\n\t\t\tvar cachedHeight = this.endPoint - this.startPoint,\n\t\t\t\tcachedYLabelWidth;\n\n\t\t\t// Build the current yLabels so we have an idea of what size they'll be to start\n\t\t\t/*\n\t\t\t *\tThis sets what is returned from calculateScaleRange as static properties of this class:\n\t\t\t *\n\t\t\t\tthis.steps;\n\t\t\t\tthis.stepValue;\n\t\t\t\tthis.min;\n\t\t\t\tthis.max;\n\t\t\t *\n\t\t\t */\n\t\t\tthis.calculateYRange(cachedHeight);\n\n\t\t\t// With these properties set we can now build the array of yLabels\n\t\t\t// and also the width of the largest yLabel\n\t\t\tthis.buildYLabels();\n\n\t\t\tthis.calculateXLabelRotation();\n\n\t\t\twhile((cachedHeight > this.endPoint - this.startPoint)){\n\t\t\t\tcachedHeight = this.endPoint - this.startPoint;\n\t\t\t\tcachedYLabelWidth = this.yLabelWidth;\n\n\t\t\t\tthis.calculateYRange(cachedHeight);\n\t\t\t\tthis.buildYLabels();\n\n\t\t\t\t// Only go through the xLabel loop again if the yLabel width has changed\n\t\t\t\tif (cachedYLabelWidth < this.yLabelWidth){\n\t\t\t\t\tthis.endPoint = cachedEndPoint;\n\t\t\t\t\tthis.calculateXLabelRotation();\n\t\t\t\t}\n\t\t\t}\n\n\t\t},\n\t\tcalculateXLabelRotation : function(){\n\t\t\t//Get the width of each grid by calculating the difference\n\t\t\t//between x offsets between 0 and 1.\n\n\t\t\tthis.ctx.font = this.font;\n\n\t\t\tvar firstWidth = this.ctx.measureText(this.xLabels[0]).width,\n\t\t\t\tlastWidth = this.ctx.measureText(this.xLabels[this.xLabels.length - 1]).width,\n\t\t\t\tfirstRotated,\n\t\t\t\tlastRotated;\n\n\n\t\t\tthis.xScalePaddingRight = lastWidth/2 + 3;\n\t\t\tthis.xScalePaddingLeft = (firstWidth/2 > this.yLabelWidth) ? firstWidth/2 : this.yLabelWidth;\n\n\t\t\tthis.xLabelRotation = 0;\n\t\t\tif (this.display){\n\t\t\t\tvar originalLabelWidth = longestText(this.ctx,this.font,this.xLabels),\n\t\t\t\t\tcosRotation,\n\t\t\t\t\tfirstRotatedWidth;\n\t\t\t\tthis.xLabelWidth = originalLabelWidth;\n\t\t\t\t//Allow 3 pixels x2 padding either side for label readability\n\t\t\t\tvar xGridWidth = Math.floor(this.calculateX(1) - this.calculateX(0)) - 6;\n\n\t\t\t\t//Max label rotate should be 90 - also act as a loop counter\n\t\t\t\twhile ((this.xLabelWidth > xGridWidth && this.xLabelRotation === 0) || (this.xLabelWidth > xGridWidth && this.xLabelRotation <= 90 && this.xLabelRotation > 0)){\n\t\t\t\t\tcosRotation = Math.cos(toRadians(this.xLabelRotation));\n\n\t\t\t\t\tfirstRotated = cosRotation * firstWidth;\n\t\t\t\t\tlastRotated = cosRotation * lastWidth;\n\n\t\t\t\t\t// We're right aligning the text now.\n\t\t\t\t\tif (firstRotated + this.fontSize / 2 > this.yLabelWidth){\n\t\t\t\t\t\tthis.xScalePaddingLeft = firstRotated + this.fontSize / 2;\n\t\t\t\t\t}\n\t\t\t\t\tthis.xScalePaddingRight = this.fontSize/2;\n\n\n\t\t\t\t\tthis.xLabelRotation++;\n\t\t\t\t\tthis.xLabelWidth = cosRotation * originalLabelWidth;\n\n\t\t\t\t}\n\t\t\t\tif (this.xLabelRotation > 0){\n\t\t\t\t\tthis.endPoint -= Math.sin(toRadians(this.xLabelRotation))*originalLabelWidth + 3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse{\n\t\t\t\tthis.xLabelWidth = 0;\n\t\t\t\tthis.xScalePaddingRight = this.padding;\n\t\t\t\tthis.xScalePaddingLeft = this.padding;\n\t\t\t}\n\n\t\t},\n\t\t// Needs to be overidden in each Chart type\n\t\t// Otherwise we need to pass all the data into the scale class\n\t\tcalculateYRange: noop,\n\t\tdrawingArea: function(){\n\t\t\treturn this.startPoint - this.endPoint;\n\t\t},\n\t\tcalculateY : function(value){\n\t\t\tvar scalingFactor = this.drawingArea() / (this.min - this.max);\n\t\t\treturn this.endPoint - (scalingFactor * (value - this.min));\n\t\t},\n\t\tcalculateX : function(index){\n\t\t\tvar isRotated = (this.xLabelRotation > 0),\n\t\t\t\t// innerWidth = (this.offsetGridLines) ? this.width - offsetLeft - this.padding : this.width - (offsetLeft + halfLabelWidth * 2) - this.padding,\n\t\t\t\tinnerWidth = this.width - (this.xScalePaddingLeft + this.xScalePaddingRight),\n\t\t\t\tvalueWidth = innerWidth/Math.max((this.valuesCount - ((this.offsetGridLines) ? 0 : 1)), 1),\n\t\t\t\tvalueOffset = (valueWidth * index) + this.xScalePaddingLeft;\n\n\t\t\tif (this.offsetGridLines){\n\t\t\t\tvalueOffset += (valueWidth/2);\n\t\t\t}\n\n\t\t\treturn Math.round(valueOffset);\n\t\t},\n\t\tupdate : function(newProps){\n\t\t\thelpers.extend(this, newProps);\n\t\t\tthis.fit();\n\t\t},\n\t\tdraw : function(){\n\t\t\tvar ctx = this.ctx,\n\t\t\t\tyLabelGap = (this.endPoint - this.startPoint) / this.steps,\n\t\t\t\txStart = Math.round(this.xScalePaddingLeft);\n\t\t\tif (this.display){\n\t\t\t\tctx.fillStyle = this.textColor;\n\t\t\t\tctx.font = this.font;\n\t\t\t\teach(this.yLabels,function(labelString,index){\n\t\t\t\t\tvar yLabelCenter = this.endPoint - (yLabelGap * index),\n\t\t\t\t\t\tlinePositionY = Math.round(yLabelCenter),\n\t\t\t\t\t\tdrawHorizontalLine = this.showHorizontalLines;\n\n\t\t\t\t\tctx.textAlign = \"right\";\n\t\t\t\t\tctx.textBaseline = \"middle\";\n\t\t\t\t\tif (this.showLabels){\n\t\t\t\t\t\tctx.fillText(labelString,xStart - 10,yLabelCenter);\n\t\t\t\t\t}\n\n\t\t\t\t\t// This is X axis, so draw it\n\t\t\t\t\tif (index === 0 && !drawHorizontalLine){\n\t\t\t\t\t\tdrawHorizontalLine = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (drawHorizontalLine){\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index > 0){\n\t\t\t\t\t\t// This is a grid line in the centre, so drop that\n\t\t\t\t\t\tctx.lineWidth = this.gridLineWidth;\n\t\t\t\t\t\tctx.strokeStyle = this.gridLineColor;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This is the first line on the scale\n\t\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\t\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\t\t\t\t\t}\n\n\t\t\t\t\tlinePositionY += helpers.aliasPixel(ctx.lineWidth);\n\n\t\t\t\t\tif(drawHorizontalLine){\n\t\t\t\t\t\tctx.moveTo(xStart, linePositionY);\n\t\t\t\t\t\tctx.lineTo(this.width, linePositionY);\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(xStart - 5, linePositionY);\n\t\t\t\t\tctx.lineTo(xStart, linePositionY);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t\tctx.closePath();\n\n\t\t\t\t},this);\n\n\t\t\t\teach(this.xLabels,function(label,index){\n\t\t\t\t\tvar xPos = this.calculateX(index) + aliasPixel(this.lineWidth),\n\t\t\t\t\t\t// Check to see if line/bar here and decide where to place the line\n\t\t\t\t\t\tlinePos = this.calculateX(index - (this.offsetGridLines ? 0.5 : 0)) + aliasPixel(this.lineWidth),\n\t\t\t\t\t\tisRotated = (this.xLabelRotation > 0),\n\t\t\t\t\t\tdrawVerticalLine = this.showVerticalLines;\n\n\t\t\t\t\t// This is Y axis, so draw it\n\t\t\t\t\tif (index === 0 && !drawVerticalLine){\n\t\t\t\t\t\tdrawVerticalLine = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (drawVerticalLine){\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index > 0){\n\t\t\t\t\t\t// This is a grid line in the centre, so drop that\n\t\t\t\t\t\tctx.lineWidth = this.gridLineWidth;\n\t\t\t\t\t\tctx.strokeStyle = this.gridLineColor;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This is the first line on the scale\n\t\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\t\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (drawVerticalLine){\n\t\t\t\t\t\tctx.moveTo(linePos,this.endPoint);\n\t\t\t\t\t\tctx.lineTo(linePos,this.startPoint - 3);\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t}\n\n\n\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\n\n\t\t\t\t\t// Small lines at the bottom of the base grid line\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(linePos,this.endPoint);\n\t\t\t\t\tctx.lineTo(linePos,this.endPoint + 5);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t\tctx.closePath();\n\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.translate(xPos,(isRotated) ? this.endPoint + 12 : this.endPoint + 8);\n\t\t\t\t\tctx.rotate(toRadians(this.xLabelRotation)*-1);\n\t\t\t\t\tctx.font = this.font;\n\t\t\t\t\tctx.textAlign = (isRotated) ? \"right\" : \"center\";\n\t\t\t\t\tctx.textBaseline = (isRotated) ? \"middle\" : \"top\";\n\t\t\t\t\tctx.fillText(label, 0, 0);\n\t\t\t\t\tctx.restore();\n\t\t\t\t},this);\n\n\t\t\t}\n\t\t}\n\n\t});\n\n\tChart.RadialScale = Chart.Element.extend({\n\t\tinitialize: function(){\n\t\t\tthis.size = min([this.height, this.width]);\n\t\t\tthis.drawingArea = (this.display) ? (this.size/2) - (this.fontSize/2 + this.backdropPaddingY) : (this.size/2);\n\t\t},\n\t\tcalculateCenterOffset: function(value){\n\t\t\t// Take into account half font size + the yPadding of the top value\n\t\t\tvar scalingFactor = this.drawingArea / (this.max - this.min);\n\n\t\t\treturn (value - this.min) * scalingFactor;\n\t\t},\n\t\tupdate : function(){\n\t\t\tif (!this.lineArc){\n\t\t\t\tthis.setScaleSize();\n\t\t\t} else {\n\t\t\t\tthis.drawingArea = (this.display) ? (this.size/2) - (this.fontSize/2 + this.backdropPaddingY) : (this.size/2);\n\t\t\t}\n\t\t\tthis.buildYLabels();\n\t\t},\n\t\tbuildYLabels: function(){\n\t\t\tthis.yLabels = [];\n\n\t\t\tvar stepDecimalPlaces = getDecimalPlaces(this.stepValue);\n\n\t\t\tfor (var i=0; i<=this.steps; i++){\n\t\t\t\tthis.yLabels.push(template(this.templateString,{value:(this.min + (i * this.stepValue)).toFixed(stepDecimalPlaces)}));\n\t\t\t}\n\t\t},\n\t\tgetCircumference : function(){\n\t\t\treturn ((Math.PI*2) / this.valuesCount);\n\t\t},\n\t\tsetScaleSize: function(){\n\t\t\t/*\n\t\t\t * Right, this is really confusing and there is a lot of maths going on here\n\t\t\t * The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n\t\t\t *\n\t\t\t * Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n\t\t\t *\n\t\t\t * Solution:\n\t\t\t *\n\t\t\t * We assume the radius of the polygon is half the size of the canvas at first\n\t\t\t * at each index we check if the text overlaps.\n\t\t\t *\n\t\t\t * Where it does, we store that angle and that index.\n\t\t\t *\n\t\t\t * After finding the largest index and angle we calculate how much we need to remove\n\t\t\t * from the shape radius to move the point inwards by that x.\n\t\t\t *\n\t\t\t * We average the left and right distances to get the maximum shape radius that can fit in the box\n\t\t\t * along with labels.\n\t\t\t *\n\t\t\t * Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n\t\t\t * on each side, removing that from the size, halving it and adding the left x protrusion width.\n\t\t\t *\n\t\t\t * This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n\t\t\t * and position it in the most space efficient manner\n\t\t\t *\n\t\t\t * https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\t\t\t */\n\n\n\t\t\t// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n\t\t\t// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n\t\t\tvar largestPossibleRadius = min([(this.height/2 - this.pointLabelFontSize - 5), this.width/2]),\n\t\t\t\tpointPosition,\n\t\t\t\ti,\n\t\t\t\ttextWidth,\n\t\t\t\thalfTextWidth,\n\t\t\t\tfurthestRight = this.width,\n\t\t\t\tfurthestRightIndex,\n\t\t\t\tfurthestRightAngle,\n\t\t\t\tfurthestLeft = 0,\n\t\t\t\tfurthestLeftIndex,\n\t\t\t\tfurthestLeftAngle,\n\t\t\t\txProtrusionLeft,\n\t\t\t\txProtrusionRight,\n\t\t\t\tradiusReductionRight,\n\t\t\t\tradiusReductionLeft,\n\t\t\t\tmaxWidthRadius;\n\t\t\tthis.ctx.font = fontString(this.pointLabelFontSize,this.pointLabelFontStyle,this.pointLabelFontFamily);\n\t\t\tfor (i=0;i<this.valuesCount;i++){\n\t\t\t\t// 5px to space the text slightly out - similar to what we do in the draw function.\n\t\t\t\tpointPosition = this.getPointPosition(i, largestPossibleRadius);\n\t\t\t\ttextWidth = this.ctx.measureText(template(this.templateString, { value: this.labels[i] })).width + 5;\n\t\t\t\tif (i === 0 || i === this.valuesCount/2){\n\t\t\t\t\t// If we're at index zero, or exactly the middle, we're at exactly the top/bottom\n\t\t\t\t\t// of the radar chart, so text will be aligned centrally, so we'll half it and compare\n\t\t\t\t\t// w/left and right text sizes\n\t\t\t\t\thalfTextWidth = textWidth/2;\n\t\t\t\t\tif (pointPosition.x + halfTextWidth > furthestRight) {\n\t\t\t\t\t\tfurthestRight = pointPosition.x + halfTextWidth;\n\t\t\t\t\t\tfurthestRightIndex = i;\n\t\t\t\t\t}\n\t\t\t\t\tif (pointPosition.x - halfTextWidth < furthestLeft) {\n\t\t\t\t\t\tfurthestLeft = pointPosition.x - halfTextWidth;\n\t\t\t\t\t\tfurthestLeftIndex = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (i < this.valuesCount/2) {\n\t\t\t\t\t// Less than half the values means we'll left align the text\n\t\t\t\t\tif (pointPosition.x + textWidth > furthestRight) {\n\t\t\t\t\t\tfurthestRight = pointPosition.x + textWidth;\n\t\t\t\t\t\tfurthestRightIndex = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (i > this.valuesCount/2){\n\t\t\t\t\t// More than half the values means we'll right align the text\n\t\t\t\t\tif (pointPosition.x - textWidth < furthestLeft) {\n\t\t\t\t\t\tfurthestLeft = pointPosition.x - textWidth;\n\t\t\t\t\t\tfurthestLeftIndex = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txProtrusionLeft = furthestLeft;\n\n\t\t\txProtrusionRight = Math.ceil(furthestRight - this.width);\n\n\t\t\tfurthestRightAngle = this.getIndexAngle(furthestRightIndex);\n\n\t\t\tfurthestLeftAngle = this.getIndexAngle(furthestLeftIndex);\n\n\t\t\tradiusReductionRight = xProtrusionRight / Math.sin(furthestRightAngle + Math.PI/2);\n\n\t\t\tradiusReductionLeft = xProtrusionLeft / Math.sin(furthestLeftAngle + Math.PI/2);\n\n\t\t\t// Ensure we actually need to reduce the size of the chart\n\t\t\tradiusReductionRight = (isNumber(radiusReductionRight)) ? radiusReductionRight : 0;\n\t\t\tradiusReductionLeft = (isNumber(radiusReductionLeft)) ? radiusReductionLeft : 0;\n\n\t\t\tthis.drawingArea = largestPossibleRadius - (radiusReductionLeft + radiusReductionRight)/2;\n\n\t\t\t//this.drawingArea = min([maxWidthRadius, (this.height - (2 * (this.pointLabelFontSize + 5)))/2])\n\t\t\tthis.setCenterPoint(radiusReductionLeft, radiusReductionRight);\n\n\t\t},\n\t\tsetCenterPoint: function(leftMovement, rightMovement){\n\n\t\t\tvar maxRight = this.width - rightMovement - this.drawingArea,\n\t\t\t\tmaxLeft = leftMovement + this.drawingArea;\n\n\t\t\tthis.xCenter = (maxLeft + maxRight)/2;\n\t\t\t// Always vertically in the centre as the text height doesn't change\n\t\t\tthis.yCenter = (this.height/2);\n\t\t},\n\n\t\tgetIndexAngle : function(index){\n\t\t\tvar angleMultiplier = (Math.PI * 2) / this.valuesCount;\n\t\t\t// Start from the top instead of right, so remove a quarter of the circle\n\n\t\t\treturn index * angleMultiplier - (Math.PI/2);\n\t\t},\n\t\tgetPointPosition : function(index, distanceFromCenter){\n\t\t\tvar thisAngle = this.getIndexAngle(index);\n\t\t\treturn {\n\t\t\t\tx : (Math.cos(thisAngle) * distanceFromCenter) + this.xCenter,\n\t\t\t\ty : (Math.sin(thisAngle) * distanceFromCenter) + this.yCenter\n\t\t\t};\n\t\t},\n\t\tdraw: function(){\n\t\t\tif (this.display){\n\t\t\t\tvar ctx = this.ctx;\n\t\t\t\teach(this.yLabels, function(label, index){\n\t\t\t\t\t// Don't draw a centre value\n\t\t\t\t\tif (index > 0){\n\t\t\t\t\t\tvar yCenterOffset = index * (this.drawingArea/this.steps),\n\t\t\t\t\t\t\tyHeight = this.yCenter - yCenterOffset,\n\t\t\t\t\t\t\tpointPosition;\n\n\t\t\t\t\t\t// Draw circular lines around the scale\n\t\t\t\t\t\tif (this.lineWidth > 0){\n\t\t\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\t\t\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\n\t\t\t\t\t\t\tif(this.lineArc){\n\t\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\t\tctx.arc(this.xCenter, this.yCenter, yCenterOffset, 0, Math.PI*2);\n\t\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\t\t} else{\n\t\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\t\tfor (var i=0;i<this.valuesCount;i++)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tpointPosition = this.getPointPosition(i, this.calculateCenterOffset(this.min + (index * this.stepValue)));\n\t\t\t\t\t\t\t\t\tif (i === 0){\n\t\t\t\t\t\t\t\t\t\tctx.moveTo(pointPosition.x, pointPosition.y);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tctx.lineTo(pointPosition.x, pointPosition.y);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(this.showLabels){\n\t\t\t\t\t\t\tctx.font = fontString(this.fontSize,this.fontStyle,this.fontFamily);\n\t\t\t\t\t\t\tif (this.showLabelBackdrop){\n\t\t\t\t\t\t\t\tvar labelWidth = ctx.measureText(label).width;\n\t\t\t\t\t\t\t\tctx.fillStyle = this.backdropColor;\n\t\t\t\t\t\t\t\tctx.fillRect(\n\t\t\t\t\t\t\t\t\tthis.xCenter - labelWidth/2 - this.backdropPaddingX,\n\t\t\t\t\t\t\t\t\tyHeight - this.fontSize/2 - this.backdropPaddingY,\n\t\t\t\t\t\t\t\t\tlabelWidth + this.backdropPaddingX*2,\n\t\t\t\t\t\t\t\t\tthis.fontSize + this.backdropPaddingY*2\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t\tctx.textBaseline = \"middle\";\n\t\t\t\t\t\t\tctx.fillStyle = this.fontColor;\n\t\t\t\t\t\t\tctx.fillText(label, this.xCenter, yHeight);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\n\t\t\t\tif (!this.lineArc){\n\t\t\t\t\tctx.lineWidth = this.angleLineWidth;\n\t\t\t\t\tctx.strokeStyle = this.angleLineColor;\n\t\t\t\t\tfor (var i = this.valuesCount - 1; i >= 0; i--) {\n\t\t\t\t\t\tvar centerOffset = null, outerPosition = null;\n\n\t\t\t\t\t\tif (this.angleLineWidth > 0 && (i % this.angleLineInterval === 0)){\n\t\t\t\t\t\t\tcenterOffset = this.calculateCenterOffset(this.max);\n\t\t\t\t\t\t\touterPosition = this.getPointPosition(i, centerOffset);\n\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\tctx.moveTo(this.xCenter, this.yCenter);\n\t\t\t\t\t\t\tctx.lineTo(outerPosition.x, outerPosition.y);\n\t\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.backgroundColors && this.backgroundColors.length == this.valuesCount) {\n\t\t\t\t\t\t\tif (centerOffset == null)\n\t\t\t\t\t\t\t\tcenterOffset = this.calculateCenterOffset(this.max);\n\n\t\t\t\t\t\t\tif (outerPosition == null)\n\t\t\t\t\t\t\t\touterPosition = this.getPointPosition(i, centerOffset);\n\n\t\t\t\t\t\t\tvar previousOuterPosition = this.getPointPosition(i === 0 ? this.valuesCount - 1 : i - 1, centerOffset);\n\t\t\t\t\t\t\tvar nextOuterPosition = this.getPointPosition(i === this.valuesCount - 1 ? 0 : i + 1, centerOffset);\n\n\t\t\t\t\t\t\tvar previousOuterHalfway = { x: (previousOuterPosition.x + outerPosition.x) / 2, y: (previousOuterPosition.y + outerPosition.y) / 2 };\n\t\t\t\t\t\t\tvar nextOuterHalfway = { x: (outerPosition.x + nextOuterPosition.x) / 2, y: (outerPosition.y + nextOuterPosition.y) / 2 };\n\n\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\tctx.moveTo(this.xCenter, this.yCenter);\n\t\t\t\t\t\t\tctx.lineTo(previousOuterHalfway.x, previousOuterHalfway.y);\n\t\t\t\t\t\t\tctx.lineTo(outerPosition.x, outerPosition.y);\n\t\t\t\t\t\t\tctx.lineTo(nextOuterHalfway.x, nextOuterHalfway.y);\n\t\t\t\t\t\t\tctx.fillStyle = this.backgroundColors[i];\n\t\t\t\t\t\t\tctx.fill();\n\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Extra 3px out for some label spacing\n\t\t\t\t\t\tvar pointLabelPosition = this.getPointPosition(i, this.calculateCenterOffset(this.max) + 5);\n\t\t\t\t\t\tctx.font = fontString(this.pointLabelFontSize,this.pointLabelFontStyle,this.pointLabelFontFamily);\n\t\t\t\t\t\tctx.fillStyle = this.pointLabelFontColor;\n\n\t\t\t\t\t\tvar labelsCount = this.labels.length,\n\t\t\t\t\t\t\thalfLabelsCount = this.labels.length/2,\n\t\t\t\t\t\t\tquarterLabelsCount = halfLabelsCount/2,\n\t\t\t\t\t\t\tupperHalf = (i < quarterLabelsCount || i > labelsCount - quarterLabelsCount),\n\t\t\t\t\t\t\texactQuarter = (i === quarterLabelsCount || i === labelsCount - quarterLabelsCount);\n\t\t\t\t\t\tif (i === 0){\n\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t} else if(i === halfLabelsCount){\n\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t} else if (i < halfLabelsCount){\n\t\t\t\t\t\t\tctx.textAlign = 'left';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.textAlign = 'right';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Set the correct text baseline based on outer positioning\n\t\t\t\t\t\tif (exactQuarter){\n\t\t\t\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\t\t\t} else if (upperHalf){\n\t\t\t\t\t\t\tctx.textBaseline = 'bottom';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.textBaseline = 'top';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tctx.fillText(this.labels[i], pointLabelPosition.x, pointLabelPosition.y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tChart.animationService = {\n\t\tframeDuration: 17,\n\t\tanimations: [],\n\t\tdropFrames: 0,\n\t\taddAnimation: function(chartInstance, animationObject) {\n\t\t\tfor (var index = 0; index < this.animations.length; ++ index){\n\t\t\t\tif (this.animations[index].chartInstance === chartInstance){\n\t\t\t\t\t// replacing an in progress animation\n\t\t\t\t\tthis.animations[index].animationObject = animationObject;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.animations.push({\n\t\t\t\tchartInstance: chartInstance,\n\t\t\t\tanimationObject: animationObject\n\t\t\t});\n\n\t\t\t// If there are no animations queued, manually kickstart a digest, for lack of a better word\n\t\t\tif (this.animations.length == 1) {\n\t\t\t\thelpers.requestAnimFrame.call(window, this.digestWrapper);\n\t\t\t}\n\t\t},\n\t\t// Cancel the animation for a given chart instance\n\t\tcancelAnimation: function(chartInstance) {\n\t\t\tvar index = helpers.findNextWhere(this.animations, function(animationWrapper) {\n\t\t\t\treturn animationWrapper.chartInstance === chartInstance;\n\t\t\t});\n\t\t\t\n\t\t\tif (index)\n\t\t\t{\n\t\t\t\tthis.animations.splice(index, 1);\n\t\t\t}\n\t\t},\n\t\t// calls startDigest with the proper context\n\t\tdigestWrapper: function() {\n\t\t\tChart.animationService.startDigest.call(Chart.animationService);\n\t\t},\n\t\tstartDigest: function() {\n\n\t\t\tvar startTime = Date.now();\n\t\t\tvar framesToDrop = 0;\n\n\t\t\tif(this.dropFrames > 1){\n\t\t\t\tframesToDrop = Math.floor(this.dropFrames);\n\t\t\t\tthis.dropFrames -= framesToDrop;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < this.animations.length; i++) {\n\n\t\t\t\tif (this.animations[i].animationObject.currentStep === null){\n\t\t\t\t\tthis.animations[i].animationObject.currentStep = 0;\n\t\t\t\t}\n\n\t\t\t\tthis.animations[i].animationObject.currentStep += 1 + framesToDrop;\n\t\t\t\tif(this.animations[i].animationObject.currentStep > this.animations[i].animationObject.numSteps){\n\t\t\t\t\tthis.animations[i].animationObject.currentStep = this.animations[i].animationObject.numSteps;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.animations[i].animationObject.render(this.animations[i].chartInstance, this.animations[i].animationObject);\n\t\t\t\t\n\t\t\t\t// Check if executed the last frame.\n\t\t\t\tif (this.animations[i].animationObject.currentStep == this.animations[i].animationObject.numSteps){\n\t\t\t\t\t// Call onAnimationComplete\n\t\t\t\t\tthis.animations[i].animationObject.onAnimationComplete.call(this.animations[i].chartInstance);\n\t\t\t\t\t// Remove the animation.\n\t\t\t\t\tthis.animations.splice(i, 1);\n\t\t\t\t\t// Keep the index in place to offset the splice\n\t\t\t\t\ti--;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar endTime = Date.now();\n\t\t\tvar delay = endTime - startTime - this.frameDuration;\n\t\t\tvar frameDelay = delay / this.frameDuration;\n\n\t\t\tif(frameDelay > 1){\n\t\t\t\tthis.dropFrames += frameDelay;\n\t\t\t}\n\n\t\t\t// Do we have more stuff to animate?\n\t\t\tif (this.animations.length > 0){\n\t\t\t\thelpers.requestAnimFrame.call(window, this.digestWrapper);\n\t\t\t}\n\t\t}\n\t};\n\n\t// Attach global event to resize each chart instance when the browser resizes\n\thelpers.addEvent(window, \"resize\", (function(){\n\t\t// Basic debounce of resize function so it doesn't hurt performance when resizing browser.\n\t\tvar timeout;\n\t\treturn function(){\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(function(){\n\t\t\t\teach(Chart.instances,function(instance){\n\t\t\t\t\t// If the responsive flag is set in the chart instance config\n\t\t\t\t\t// Cascade the resize event down to the chart.\n\t\t\t\t\tif (instance.options.responsive){\n\t\t\t\t\t\tinstance.resize(instance.render, true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, 50);\n\t\t};\n\t})());\n\n\n\tif (amd) {\n\t\tdefine('Chart', [], function(){\n\t\t\treturn Chart;\n\t\t});\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = Chart;\n\t}\n\n\troot.Chart = Chart;\n\n\tChart.noConflict = function(){\n\t\troot.Chart = previous;\n\t\treturn Chart;\n\t};\n\n}).call(this);\n\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\thelpers = Chart.helpers;\n\n\n\tvar defaultConfig = {\n\t\t//Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value\n\t\tscaleBeginAtZero : true,\n\n\t\t//Boolean - Whether grid lines are shown across the chart\n\t\tscaleShowGridLines : true,\n\n\t\t//String - Colour of the grid lines\n\t\tscaleGridLineColor : \"rgba(0,0,0,.05)\",\n\n\t\t//Number - Width of the grid lines\n\t\tscaleGridLineWidth : 1,\n\n\t\t//Boolean - Whether to show horizontal lines (except X axis)\n\t\tscaleShowHorizontalLines: true,\n\n\t\t//Boolean - Whether to show vertical lines (except Y axis)\n\t\tscaleShowVerticalLines: true,\n\n\t\t//Boolean - If there is a stroke on each bar\n\t\tbarShowStroke : true,\n\n\t\t//Number - Pixel width of the bar stroke\n\t\tbarStrokeWidth : 2,\n\n\t\t//Number - Spacing between each of the X value sets\n\t\tbarValueSpacing : 5,\n\n\t\t//Number - Spacing between data sets within X values\n\t\tbarDatasetSpacing : 1,\n\n\t\t//String - A legend template\n\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<datasets.length; i++){%><li><span class=\\\"<%=name.toLowerCase()%>-legend-icon\\\" style=\\\"background-color:<%=datasets[i].fillColor%>\\\"></span><span class=\\\"<%=name.toLowerCase()%>-legend-text\\\"><%if(datasets[i].label){%><%=datasets[i].label%><%}%></span></li><%}%></ul>\"\n\n\t};\n\n\n\tChart.Type.extend({\n\t\tname: \"Bar\",\n\t\tdefaults : defaultConfig,\n\t\tinitialize:  function(data){\n\n\t\t\t//Expose options as a scope variable here so we can access it in the ScaleClass\n\t\t\tvar options = this.options;\n\n\t\t\tthis.ScaleClass = Chart.Scale.extend({\n\t\t\t\toffsetGridLines : true,\n\t\t\t\tcalculateBarX : function(datasetCount, datasetIndex, barIndex){\n\t\t\t\t\t//Reusable method for calculating the xPosition of a given bar based on datasetIndex & width of the bar\n\t\t\t\t\tvar xWidth = this.calculateBaseWidth(),\n\t\t\t\t\t\txAbsolute = this.calculateX(barIndex) - (xWidth/2),\n\t\t\t\t\t\tbarWidth = this.calculateBarWidth(datasetCount);\n\n\t\t\t\t\treturn xAbsolute + (barWidth * datasetIndex) + (datasetIndex * options.barDatasetSpacing) + barWidth/2;\n\t\t\t\t},\n\t\t\t\tcalculateBaseWidth : function(){\n\t\t\t\t\treturn (this.calculateX(1) - this.calculateX(0)) - (2*options.barValueSpacing);\n\t\t\t\t},\n\t\t\t\tcalculateBarWidth : function(datasetCount){\n\t\t\t\t\t//The padding between datasets is to the right of each bar, providing that there are more than 1 dataset\n\t\t\t\t\tvar baseWidth = this.calculateBaseWidth() - ((datasetCount - 1) * options.barDatasetSpacing);\n\n\t\t\t\t\treturn (baseWidth / datasetCount);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.datasets = [];\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activeBars = (evt.type !== 'mouseout') ? this.getBarsAtEvent(evt) : [];\n\n\t\t\t\t\tthis.eachBars(function(bar){\n\t\t\t\t\t\tbar.restore(['fillColor', 'strokeColor']);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activeBars, function(activeBar){\n\t\t\t\t\t\tif (activeBar) {\n\t\t\t\t\t\t\tactiveBar.fillColor = activeBar.highlightFill;\n\t\t\t\t\t\t\tactiveBar.strokeColor = activeBar.highlightStroke;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tthis.showTooltip(activeBars);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//Declare the extension of the default point, to cater for the options passed in to the constructor\n\t\t\tthis.BarClass = Chart.Rectangle.extend({\n\t\t\t\tstrokeWidth : this.options.barStrokeWidth,\n\t\t\t\tshowStroke : this.options.barShowStroke,\n\t\t\t\tctx : this.chart.ctx\n\t\t\t});\n\n\t\t\t//Iterate through each of the datasets, and build this into a property of the chart\n\t\t\thelpers.each(data.datasets,function(dataset,datasetIndex){\n\n\t\t\t\tvar datasetObject = {\n\t\t\t\t\tlabel : dataset.label || null,\n\t\t\t\t\tfillColor : dataset.fillColor,\n\t\t\t\t\tstrokeColor : dataset.strokeColor,\n\t\t\t\t\tbars : []\n\t\t\t\t};\n\n\t\t\t\tthis.datasets.push(datasetObject);\n\n\t\t\t\thelpers.each(dataset.data,function(dataPoint,index){\n\t\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\t\tdatasetObject.bars.push(new this.BarClass({\n\t\t\t\t\t\tvalue : dataPoint,\n\t\t\t\t\t\tlabel : data.labels[index],\n\t\t\t\t\t\tdatasetLabel: dataset.label,\n\t\t\t\t\t\tstrokeColor : (typeof dataset.strokeColor == 'object') ? dataset.strokeColor[index] : dataset.strokeColor,\n\t\t\t\t\t\tfillColor : (typeof dataset.fillColor == 'object') ? dataset.fillColor[index] : dataset.fillColor,\n\t\t\t\t\t\thighlightFill : (dataset.highlightFill) ? (typeof dataset.highlightFill == 'object') ? dataset.highlightFill[index] : dataset.highlightFill : (typeof dataset.fillColor == 'object') ? dataset.fillColor[index] : dataset.fillColor,\n\t\t\t\t\t\thighlightStroke : (dataset.highlightStroke) ? (typeof dataset.highlightStroke == 'object') ? dataset.highlightStroke[index] : dataset.highlightStroke : (typeof dataset.strokeColor == 'object') ? dataset.strokeColor[index] : dataset.strokeColor\n\t\t\t\t\t}));\n\t\t\t\t},this);\n\n\t\t\t},this);\n\n\t\t\tthis.buildScale(data.labels);\n\n\t\t\tthis.BarClass.prototype.base = this.scale.endPoint;\n\n\t\t\tthis.eachBars(function(bar, index, datasetIndex){\n\t\t\t\thelpers.extend(bar, {\n\t\t\t\t\twidth : this.scale.calculateBarWidth(this.datasets.length),\n\t\t\t\t\tx: this.scale.calculateBarX(this.datasets.length, datasetIndex, index),\n\t\t\t\t\ty: this.scale.endPoint\n\t\t\t\t});\n\t\t\t\tbar.save();\n\t\t\t}, this);\n\n\t\t\tthis.render();\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.scale.update();\n\t\t\t// Reset any highlight colours before updating.\n\t\t\thelpers.each(this.activeElements, function(activeElement){\n\t\t\t\tactiveElement.restore(['fillColor', 'strokeColor']);\n\t\t\t});\n\n\t\t\tthis.eachBars(function(bar){\n\t\t\t\tbar.save();\n\t\t\t});\n\t\t\tthis.render();\n\t\t},\n\t\teachBars : function(callback){\n\t\t\thelpers.each(this.datasets,function(dataset, datasetIndex){\n\t\t\t\thelpers.each(dataset.bars, callback, this, datasetIndex);\n\t\t\t},this);\n\t\t},\n\t\tgetBarsAtEvent : function(e){\n\t\t\tvar barsArray = [],\n\t\t\t\teventPosition = helpers.getRelativePosition(e),\n\t\t\t\tdatasetIterator = function(dataset){\n\t\t\t\t\tbarsArray.push(dataset.bars[barIndex]);\n\t\t\t\t},\n\t\t\t\tbarIndex;\n\n\t\t\tfor (var datasetIndex = 0; datasetIndex < this.datasets.length; datasetIndex++) {\n\t\t\t\tfor (barIndex = 0; barIndex < this.datasets[datasetIndex].bars.length; barIndex++) {\n\t\t\t\t\tif (this.datasets[datasetIndex].bars[barIndex].inRange(eventPosition.x,eventPosition.y)){\n\t\t\t\t\t\thelpers.each(this.datasets, datasetIterator);\n\t\t\t\t\t\treturn barsArray;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn barsArray;\n\t\t},\n\t\tbuildScale : function(labels){\n\t\t\tvar self = this;\n\n\t\t\tvar dataTotal = function(){\n\t\t\t\tvar values = [];\n\t\t\t\tself.eachBars(function(bar){\n\t\t\t\t\tvalues.push(bar.value);\n\t\t\t\t});\n\t\t\t\treturn values;\n\t\t\t};\n\n\t\t\tvar scaleOptions = {\n\t\t\t\ttemplateString : this.options.scaleLabel,\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth : this.chart.width,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\ttextColor : this.options.scaleFontColor,\n\t\t\t\tfontSize : this.options.scaleFontSize,\n\t\t\t\tfontStyle : this.options.scaleFontStyle,\n\t\t\t\tfontFamily : this.options.scaleFontFamily,\n\t\t\t\tvaluesCount : labels.length,\n\t\t\t\tbeginAtZero : this.options.scaleBeginAtZero,\n\t\t\t\tintegersOnly : this.options.scaleIntegersOnly,\n\t\t\t\tcalculateYRange: function(currentHeight){\n\t\t\t\t\tvar updatedRanges = helpers.calculateScaleRange(\n\t\t\t\t\t\tdataTotal(),\n\t\t\t\t\t\tcurrentHeight,\n\t\t\t\t\t\tthis.fontSize,\n\t\t\t\t\t\tthis.beginAtZero,\n\t\t\t\t\t\tthis.integersOnly\n\t\t\t\t\t);\n\t\t\t\t\thelpers.extend(this, updatedRanges);\n\t\t\t\t},\n\t\t\t\txLabels : labels,\n\t\t\t\tfont : helpers.fontString(this.options.scaleFontSize, this.options.scaleFontStyle, this.options.scaleFontFamily),\n\t\t\t\tlineWidth : this.options.scaleLineWidth,\n\t\t\t\tlineColor : this.options.scaleLineColor,\n\t\t\t\tshowHorizontalLines : this.options.scaleShowHorizontalLines,\n\t\t\t\tshowVerticalLines : this.options.scaleShowVerticalLines,\n\t\t\t\tgridLineWidth : (this.options.scaleShowGridLines) ? this.options.scaleGridLineWidth : 0,\n\t\t\t\tgridLineColor : (this.options.scaleShowGridLines) ? this.options.scaleGridLineColor : \"rgba(0,0,0,0)\",\n\t\t\t\tpadding : (this.options.showScale) ? 0 : (this.options.barShowStroke) ? this.options.barStrokeWidth : 0,\n\t\t\t\tshowLabels : this.options.scaleShowLabels,\n\t\t\t\tdisplay : this.options.showScale\n\t\t\t};\n\n\t\t\tif (this.options.scaleOverride){\n\t\t\t\thelpers.extend(scaleOptions, {\n\t\t\t\t\tcalculateYRange: helpers.noop,\n\t\t\t\t\tsteps: this.options.scaleSteps,\n\t\t\t\t\tstepValue: this.options.scaleStepWidth,\n\t\t\t\t\tmin: this.options.scaleStartValue,\n\t\t\t\t\tmax: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.scale = new this.ScaleClass(scaleOptions);\n\t\t},\n\t\taddData : function(valuesArray,label){\n\t\t\t//Map the values array for each of the datasets\n\t\t\thelpers.each(valuesArray,function(value,datasetIndex){\n\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\tthis.datasets[datasetIndex].bars.push(new this.BarClass({\n\t\t\t\t\tvalue : value,\n\t\t\t\t\tlabel : label,\n\t\t\t\t\tdatasetLabel: this.datasets[datasetIndex].label,\n\t\t\t\t\tx: this.scale.calculateBarX(this.datasets.length, datasetIndex, this.scale.valuesCount+1),\n\t\t\t\t\ty: this.scale.endPoint,\n\t\t\t\t\twidth : this.scale.calculateBarWidth(this.datasets.length),\n\t\t\t\t\tbase : this.scale.endPoint,\n\t\t\t\t\tstrokeColor : this.datasets[datasetIndex].strokeColor,\n\t\t\t\t\tfillColor : this.datasets[datasetIndex].fillColor\n\t\t\t\t}));\n\t\t\t},this);\n\n\t\t\tthis.scale.addXLabel(label);\n\t\t\t//Then re-render the chart.\n\t\t\tthis.update();\n\t\t},\n\t\tremoveData : function(){\n\t\t\tthis.scale.removeXLabel();\n\t\t\t//Then re-render the chart.\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\tdataset.bars.shift();\n\t\t\t},this);\n\t\t\tthis.update();\n\t\t},\n\t\treflow : function(){\n\t\t\thelpers.extend(this.BarClass.prototype,{\n\t\t\t\ty: this.scale.endPoint,\n\t\t\t\tbase : this.scale.endPoint\n\t\t\t});\n\t\t\tvar newScaleProps = helpers.extend({\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth : this.chart.width\n\t\t\t});\n\t\t\tthis.scale.update(newScaleProps);\n\t\t},\n\t\tdraw : function(ease){\n\t\t\tvar easingDecimal = ease || 1;\n\t\t\tthis.clear();\n\n\t\t\tvar ctx = this.chart.ctx;\n\n\t\t\tthis.scale.draw(easingDecimal);\n\n\t\t\t//Draw all the bars for each dataset\n\t\t\thelpers.each(this.datasets,function(dataset,datasetIndex){\n\t\t\t\thelpers.each(dataset.bars,function(bar,index){\n\t\t\t\t\tif (bar.hasValue()){\n\t\t\t\t\t\tbar.base = this.scale.endPoint;\n\t\t\t\t\t\t//Transition then draw\n\t\t\t\t\t\tbar.transition({\n\t\t\t\t\t\t\tx : this.scale.calculateBarX(this.datasets.length, datasetIndex, index),\n\t\t\t\t\t\t\ty : this.scale.calculateY(bar.value),\n\t\t\t\t\t\t\twidth : this.scale.calculateBarWidth(this.datasets.length)\n\t\t\t\t\t\t}, easingDecimal).draw();\n\t\t\t\t\t}\n\t\t\t\t},this);\n\n\t\t\t},this);\n\t\t}\n\t});\n\n\n}).call(this);\n\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\t//Cache a local reference to Chart.helpers\n\t\thelpers = Chart.helpers;\n\n\tvar defaultConfig = {\n\t\t//Boolean - Whether we should show a stroke on each segment\n\t\tsegmentShowStroke : true,\n\n\t\t//String - The colour of each segment stroke\n\t\tsegmentStrokeColor : \"#fff\",\n\n\t\t//Number - The width of each segment stroke\n\t\tsegmentStrokeWidth : 2,\n\n\t\t//The percentage of the chart that we cut out of the middle.\n\t\tpercentageInnerCutout : 50,\n\n\t\t//Number - Amount of animation steps\n\t\tanimationSteps : 100,\n\n\t\t//String - Animation easing effect\n\t\tanimationEasing : \"easeOutBounce\",\n\n\t\t//Boolean - Whether we animate the rotation of the Doughnut\n\t\tanimateRotate : true,\n\n\t\t//Boolean - Whether we animate scaling the Doughnut from the centre\n\t\tanimateScale : false,\n\n\t\t//String - A legend template\n\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<segments.length; i++){%><li><span class=\\\"<%=name.toLowerCase()%>-legend-icon\\\" style=\\\"background-color:<%=segments[i].fillColor%>\\\"></span><span class=\\\"<%=name.toLowerCase()%>-legend-text\\\"><%if(segments[i].label){%><%=segments[i].label%><%}%></span></li><%}%></ul>\"\n\n\t};\n\n\tChart.Type.extend({\n\t\t//Passing in a name registers this chart in the Chart namespace\n\t\tname: \"Doughnut\",\n\t\t//Providing a defaults will also register the defaults in the chart namespace\n\t\tdefaults : defaultConfig,\n\t\t//Initialize is fired when the chart is initialized - Data is passed in as a parameter\n\t\t//Config is automatically merged by the core of Chart.js, and is available at this.options\n\t\tinitialize:  function(data){\n\n\t\t\t//Declare segments as a static property to prevent inheriting across the Chart type prototype\n\t\t\tthis.segments = [];\n\t\t\tthis.outerRadius = (helpers.min([this.chart.width,this.chart.height]) -\tthis.options.segmentStrokeWidth/2)/2;\n\n\t\t\tthis.SegmentArc = Chart.Arc.extend({\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\tx : this.chart.width/2,\n\t\t\t\ty : this.chart.height/2\n\t\t\t});\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activeSegments = (evt.type !== 'mouseout') ? this.getSegmentsAtEvent(evt) : [];\n\n\t\t\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\t\t\tsegment.restore([\"fillColor\"]);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activeSegments,function(activeSegment){\n\t\t\t\t\t\tactiveSegment.fillColor = activeSegment.highlightColor;\n\t\t\t\t\t});\n\t\t\t\t\tthis.showTooltip(activeSegments);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.calculateTotal(data);\n\n\t\t\thelpers.each(data,function(datapoint, index){\n\t\t\t\tif (!datapoint.color) {\n\t\t\t\t\tdatapoint.color = 'hsl(' + (360 * index / data.length) + ', 100%, 50%)';\n\t\t\t\t}\n\t\t\t\tthis.addData(datapoint, index, true);\n\t\t\t},this);\n\n\t\t\tthis.render();\n\t\t},\n\t\tgetSegmentsAtEvent : function(e){\n\t\t\tvar segmentsArray = [];\n\n\t\t\tvar location = helpers.getRelativePosition(e);\n\n\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\tif (segment.inRange(location.x,location.y)) segmentsArray.push(segment);\n\t\t\t},this);\n\t\t\treturn segmentsArray;\n\t\t},\n\t\taddData : function(segment, atIndex, silent){\n\t\t\tvar index = atIndex !== undefined ? atIndex : this.segments.length;\n\t\t\tif ( typeof(segment.color) === \"undefined\" ) {\n\t\t\t\tsegment.color = Chart.defaults.global.segmentColorDefault[index % Chart.defaults.global.segmentColorDefault.length];\n\t\t\t\tsegment.highlight = Chart.defaults.global.segmentHighlightColorDefaults[index % Chart.defaults.global.segmentHighlightColorDefaults.length];\t\t\t\t\n\t\t\t}\n\t\t\tthis.segments.splice(index, 0, new this.SegmentArc({\n\t\t\t\tvalue : segment.value,\n\t\t\t\touterRadius : (this.options.animateScale) ? 0 : this.outerRadius,\n\t\t\t\tinnerRadius : (this.options.animateScale) ? 0 : (this.outerRadius/100) * this.options.percentageInnerCutout,\n\t\t\t\tfillColor : segment.color,\n\t\t\t\thighlightColor : segment.highlight || segment.color,\n\t\t\t\tshowStroke : this.options.segmentShowStroke,\n\t\t\t\tstrokeWidth : this.options.segmentStrokeWidth,\n\t\t\t\tstrokeColor : this.options.segmentStrokeColor,\n\t\t\t\tstartAngle : Math.PI * 1.5,\n\t\t\t\tcircumference : (this.options.animateRotate) ? 0 : this.calculateCircumference(segment.value),\n\t\t\t\tlabel : segment.label\n\t\t\t}));\n\t\t\tif (!silent){\n\t\t\t\tthis.reflow();\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t},\n\t\tcalculateCircumference : function(value) {\n\t\t\tif ( this.total > 0 ) {\n\t\t\t\treturn (Math.PI*2)*(value / this.total);\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t},\n\t\tcalculateTotal : function(data){\n\t\t\tthis.total = 0;\n\t\t\thelpers.each(data,function(segment){\n\t\t\t\tthis.total += Math.abs(segment.value);\n\t\t\t},this);\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.calculateTotal(this.segments);\n\n\t\t\t// Reset any highlight colours before updating.\n\t\t\thelpers.each(this.activeElements, function(activeElement){\n\t\t\t\tactiveElement.restore(['fillColor']);\n\t\t\t});\n\n\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\tsegment.save();\n\t\t\t});\n\t\t\tthis.render();\n\t\t},\n\n\t\tremoveData: function(atIndex){\n\t\t\tvar indexToDelete = (helpers.isNumber(atIndex)) ? atIndex : this.segments.length-1;\n\t\t\tthis.segments.splice(indexToDelete, 1);\n\t\t\tthis.reflow();\n\t\t\tthis.update();\n\t\t},\n\n\t\treflow : function(){\n\t\t\thelpers.extend(this.SegmentArc.prototype,{\n\t\t\t\tx : this.chart.width/2,\n\t\t\t\ty : this.chart.height/2\n\t\t\t});\n\t\t\tthis.outerRadius = (helpers.min([this.chart.width,this.chart.height]) -\tthis.options.segmentStrokeWidth/2)/2;\n\t\t\thelpers.each(this.segments, function(segment){\n\t\t\t\tsegment.update({\n\t\t\t\t\touterRadius : this.outerRadius,\n\t\t\t\t\tinnerRadius : (this.outerRadius/100) * this.options.percentageInnerCutout\n\t\t\t\t});\n\t\t\t}, this);\n\t\t},\n\t\tdraw : function(easeDecimal){\n\t\t\tvar animDecimal = (easeDecimal) ? easeDecimal : 1;\n\t\t\tthis.clear();\n\t\t\thelpers.each(this.segments,function(segment,index){\n\t\t\t\tsegment.transition({\n\t\t\t\t\tcircumference : this.calculateCircumference(segment.value),\n\t\t\t\t\touterRadius : this.outerRadius,\n\t\t\t\t\tinnerRadius : (this.outerRadius/100) * this.options.percentageInnerCutout\n\t\t\t\t},animDecimal);\n\n\t\t\t\tsegment.endAngle = segment.startAngle + segment.circumference;\n\n\t\t\t\tsegment.draw();\n\t\t\t\tif (index === 0){\n\t\t\t\t\tsegment.startAngle = Math.PI * 1.5;\n\t\t\t\t}\n\t\t\t\t//Check to see if it's the last segment, if not get the next and update the start angle\n\t\t\t\tif (index < this.segments.length-1){\n\t\t\t\t\tthis.segments[index+1].startAngle = segment.endAngle;\n\t\t\t\t}\n\t\t\t},this);\n\n\t\t}\n\t});\n\n\tChart.types.Doughnut.extend({\n\t\tname : \"Pie\",\n\t\tdefaults : helpers.merge(defaultConfig,{percentageInnerCutout : 0})\n\t});\n\n}).call(this);\n\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\thelpers = Chart.helpers;\n\n\tvar defaultConfig = {\n\n\t\t///Boolean - Whether grid lines are shown across the chart\n\t\tscaleShowGridLines : true,\n\n\t\t//String - Colour of the grid lines\n\t\tscaleGridLineColor : \"rgba(0,0,0,.05)\",\n\n\t\t//Number - Width of the grid lines\n\t\tscaleGridLineWidth : 1,\n\n\t\t//Boolean - Whether to show horizontal lines (except X axis)\n\t\tscaleShowHorizontalLines: true,\n\n\t\t//Boolean - Whether to show vertical lines (except Y axis)\n\t\tscaleShowVerticalLines: true,\n\n\t\t//Boolean - Whether the line is curved between points\n\t\tbezierCurve : true,\n\n\t\t//Number - Tension of the bezier curve between points\n\t\tbezierCurveTension : 0.4,\n\n\t\t//Boolean - Whether to show a dot for each point\n\t\tpointDot : true,\n\n\t\t//Number - Radius of each point dot in pixels\n\t\tpointDotRadius : 4,\n\n\t\t//Number - Pixel width of point dot stroke\n\t\tpointDotStrokeWidth : 1,\n\n\t\t//Number - amount extra to add to the radius to cater for hit detection outside the drawn point\n\t\tpointHitDetectionRadius : 20,\n\n\t\t//Boolean - Whether to show a stroke for datasets\n\t\tdatasetStroke : true,\n\n\t\t//Number - Pixel width of dataset stroke\n\t\tdatasetStrokeWidth : 2,\n\n\t\t//Boolean - Whether to fill the dataset with a colour\n\t\tdatasetFill : true,\n\n\t\t//String - A legend template\n\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<datasets.length; i++){%><li><span class=\\\"<%=name.toLowerCase()%>-legend-icon\\\" style=\\\"background-color:<%=datasets[i].strokeColor%>\\\"></span><span class=\\\"<%=name.toLowerCase()%>-legend-text\\\"><%if(datasets[i].label){%><%=datasets[i].label%><%}%></span></li><%}%></ul>\",\n\n\t\t//Boolean - Whether to horizontally center the label and point dot inside the grid\n\t\toffsetGridLines : false\n\n\t};\n\n\n\tChart.Type.extend({\n\t\tname: \"Line\",\n\t\tdefaults : defaultConfig,\n\t\tinitialize:  function(data){\n\t\t\t//Declare the extension of the default point, to cater for the options passed in to the constructor\n\t\t\tthis.PointClass = Chart.Point.extend({\n\t\t\t\toffsetGridLines : this.options.offsetGridLines,\n\t\t\t\tstrokeWidth : this.options.pointDotStrokeWidth,\n\t\t\t\tradius : this.options.pointDotRadius,\n\t\t\t\tdisplay: this.options.pointDot,\n\t\t\t\thitDetectionRadius : this.options.pointHitDetectionRadius,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\tinRange : function(mouseX){\n\t\t\t\t\treturn (Math.pow(mouseX-this.x, 2) < Math.pow(this.radius + this.hitDetectionRadius,2));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.datasets = [];\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activePoints = (evt.type !== 'mouseout') ? this.getPointsAtEvent(evt) : [];\n\t\t\t\t\tthis.eachPoints(function(point){\n\t\t\t\t\t\tpoint.restore(['fillColor', 'strokeColor']);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activePoints, function(activePoint){\n\t\t\t\t\t\tactivePoint.fillColor = activePoint.highlightFill;\n\t\t\t\t\t\tactivePoint.strokeColor = activePoint.highlightStroke;\n\t\t\t\t\t});\n\t\t\t\t\tthis.showTooltip(activePoints);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//Iterate through each of the datasets, and build this into a property of the chart\n\t\t\thelpers.each(data.datasets,function(dataset){\n\n\t\t\t\tvar datasetObject = {\n\t\t\t\t\tlabel : dataset.label || null,\n\t\t\t\t\tfillColor : dataset.fillColor,\n\t\t\t\t\tstrokeColor : dataset.strokeColor,\n\t\t\t\t\tpointColor : dataset.pointColor,\n\t\t\t\t\tpointStrokeColor : dataset.pointStrokeColor,\n\t\t\t\t\tpoints : []\n\t\t\t\t};\n\n\t\t\t\tthis.datasets.push(datasetObject);\n\n\n\t\t\t\thelpers.each(dataset.data,function(dataPoint,index){\n\t\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\t\tdatasetObject.points.push(new this.PointClass({\n\t\t\t\t\t\tvalue : dataPoint,\n\t\t\t\t\t\tlabel : data.labels[index],\n\t\t\t\t\t\tdatasetLabel: dataset.label,\n\t\t\t\t\t\tstrokeColor : dataset.pointStrokeColor,\n\t\t\t\t\t\tfillColor : dataset.pointColor,\n\t\t\t\t\t\thighlightFill : dataset.pointHighlightFill || dataset.pointColor,\n\t\t\t\t\t\thighlightStroke : dataset.pointHighlightStroke || dataset.pointStrokeColor\n\t\t\t\t\t}));\n\t\t\t\t},this);\n\n\t\t\t\tthis.buildScale(data.labels);\n\n\n\t\t\t\tthis.eachPoints(function(point, index){\n\t\t\t\t\thelpers.extend(point, {\n\t\t\t\t\t\tx: this.scale.calculateX(index),\n\t\t\t\t\t\ty: this.scale.endPoint\n\t\t\t\t\t});\n\t\t\t\t\tpoint.save();\n\t\t\t\t}, this);\n\n\t\t\t},this);\n\n\n\t\t\tthis.render();\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.scale.update();\n\t\t\t// Reset any highlight colours before updating.\n\t\t\thelpers.each(this.activeElements, function(activeElement){\n\t\t\t\tactiveElement.restore(['fillColor', 'strokeColor']);\n\t\t\t});\n\t\t\tthis.eachPoints(function(point){\n\t\t\t\tpoint.save();\n\t\t\t});\n\t\t\tthis.render();\n\t\t},\n\t\teachPoints : function(callback){\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\thelpers.each(dataset.points,callback,this);\n\t\t\t},this);\n\t\t},\n\t\tgetPointsAtEvent : function(e){\n\t\t\tvar pointsArray = [],\n\t\t\t\teventPosition = helpers.getRelativePosition(e);\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\thelpers.each(dataset.points,function(point){\n\t\t\t\t\tif (point.inRange(eventPosition.x,eventPosition.y)) pointsArray.push(point);\n\t\t\t\t});\n\t\t\t},this);\n\t\t\treturn pointsArray;\n\t\t},\n\t\tbuildScale : function(labels){\n\t\t\tvar self = this;\n\n\t\t\tvar dataTotal = function(){\n\t\t\t\tvar values = [];\n\t\t\t\tself.eachPoints(function(point){\n\t\t\t\t\tvalues.push(point.value);\n\t\t\t\t});\n\n\t\t\t\treturn values;\n\t\t\t};\n\n\t\t\tvar scaleOptions = {\n\t\t\t\ttemplateString : this.options.scaleLabel,\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth : this.chart.width,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\ttextColor : this.options.scaleFontColor,\n\t\t\t\toffsetGridLines : this.options.offsetGridLines,\n\t\t\t\tfontSize : this.options.scaleFontSize,\n\t\t\t\tfontStyle : this.options.scaleFontStyle,\n\t\t\t\tfontFamily : this.options.scaleFontFamily,\n\t\t\t\tvaluesCount : labels.length,\n\t\t\t\tbeginAtZero : this.options.scaleBeginAtZero,\n\t\t\t\tintegersOnly : this.options.scaleIntegersOnly,\n\t\t\t\tcalculateYRange : function(currentHeight){\n\t\t\t\t\tvar updatedRanges = helpers.calculateScaleRange(\n\t\t\t\t\t\tdataTotal(),\n\t\t\t\t\t\tcurrentHeight,\n\t\t\t\t\t\tthis.fontSize,\n\t\t\t\t\t\tthis.beginAtZero,\n\t\t\t\t\t\tthis.integersOnly\n\t\t\t\t\t);\n\t\t\t\t\thelpers.extend(this, updatedRanges);\n\t\t\t\t},\n\t\t\t\txLabels : labels,\n\t\t\t\tfont : helpers.fontString(this.options.scaleFontSize, this.options.scaleFontStyle, this.options.scaleFontFamily),\n\t\t\t\tlineWidth : this.options.scaleLineWidth,\n\t\t\t\tlineColor : this.options.scaleLineColor,\n\t\t\t\tshowHorizontalLines : this.options.scaleShowHorizontalLines,\n\t\t\t\tshowVerticalLines : this.options.scaleShowVerticalLines,\n\t\t\t\tgridLineWidth : (this.options.scaleShowGridLines) ? this.options.scaleGridLineWidth : 0,\n\t\t\t\tgridLineColor : (this.options.scaleShowGridLines) ? this.options.scaleGridLineColor : \"rgba(0,0,0,0)\",\n\t\t\t\tpadding: (this.options.showScale) ? 0 : this.options.pointDotRadius + this.options.pointDotStrokeWidth,\n\t\t\t\tshowLabels : this.options.scaleShowLabels,\n\t\t\t\tdisplay : this.options.showScale\n\t\t\t};\n\n\t\t\tif (this.options.scaleOverride){\n\t\t\t\thelpers.extend(scaleOptions, {\n\t\t\t\t\tcalculateYRange: helpers.noop,\n\t\t\t\t\tsteps: this.options.scaleSteps,\n\t\t\t\t\tstepValue: this.options.scaleStepWidth,\n\t\t\t\t\tmin: this.options.scaleStartValue,\n\t\t\t\t\tmax: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)\n\t\t\t\t});\n\t\t\t}\n\n\n\t\t\tthis.scale = new Chart.Scale(scaleOptions);\n\t\t},\n\t\taddData : function(valuesArray,label){\n\t\t\t//Map the values array for each of the datasets\n\n\t\t\thelpers.each(valuesArray,function(value,datasetIndex){\n\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\tthis.datasets[datasetIndex].points.push(new this.PointClass({\n\t\t\t\t\tvalue : value,\n\t\t\t\t\tlabel : label,\n\t\t\t\t\tdatasetLabel: this.datasets[datasetIndex].label,\n\t\t\t\t\tx: this.scale.calculateX(this.scale.valuesCount+1),\n\t\t\t\t\ty: this.scale.endPoint,\n\t\t\t\t\tstrokeColor : this.datasets[datasetIndex].pointStrokeColor,\n\t\t\t\t\tfillColor : this.datasets[datasetIndex].pointColor\n\t\t\t\t}));\n\t\t\t},this);\n\n\t\t\tthis.scale.addXLabel(label);\n\t\t\t//Then re-render the chart.\n\t\t\tthis.update();\n\t\t},\n\t\tremoveData : function(){\n\t\t\tthis.scale.removeXLabel();\n\t\t\t//Then re-render the chart.\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\tdataset.points.shift();\n\t\t\t},this);\n\t\t\tthis.update();\n\t\t},\n\t\treflow : function(){\n\t\t\tvar newScaleProps = helpers.extend({\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth : this.chart.width\n\t\t\t});\n\t\t\tthis.scale.update(newScaleProps);\n\t\t},\n\t\tdraw : function(ease){\n\t\t\tvar easingDecimal = ease || 1;\n\t\t\tthis.clear();\n\n\t\t\tvar ctx = this.chart.ctx;\n\n\t\t\t// Some helper methods for getting the next/prev points\n\t\t\tvar hasValue = function(item){\n\t\t\t\treturn item.value !== null;\n\t\t\t},\n\t\t\tnextPoint = function(point, collection, index){\n\t\t\t\treturn helpers.findNextWhere(collection, hasValue, index) || point;\n\t\t\t},\n\t\t\tpreviousPoint = function(point, collection, index){\n\t\t\t\treturn helpers.findPreviousWhere(collection, hasValue, index) || point;\n\t\t\t};\n\n\t\t\tif (!this.scale) return;\n\t\t\tthis.scale.draw(easingDecimal);\n\n\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\tvar pointsWithValues = helpers.where(dataset.points, hasValue);\n\n\t\t\t\t//Transition each point first so that the line and point drawing isn't out of sync\n\t\t\t\t//We can use this extra loop to calculate the control points of this dataset also in this loop\n\n\t\t\t\thelpers.each(dataset.points, function(point, index){\n\t\t\t\t\tif (point.hasValue()){\n\t\t\t\t\t\tpoint.transition({\n\t\t\t\t\t\t\ty : this.scale.calculateY(point.value),\n\t\t\t\t\t\t\tx : this.scale.calculateX(index)\n\t\t\t\t\t\t}, easingDecimal);\n\t\t\t\t\t}\n\t\t\t\t},this);\n\n\n\t\t\t\t// Control points need to be calculated in a separate loop, because we need to know the current x/y of the point\n\t\t\t\t// This would cause issues when there is no animation, because the y of the next point would be 0, so beziers would be skewed\n\t\t\t\tif (this.options.bezierCurve){\n\t\t\t\t\thelpers.each(pointsWithValues, function(point, index){\n\t\t\t\t\t\tvar tension = (index > 0 && index < pointsWithValues.length - 1) ? this.options.bezierCurveTension : 0;\n\t\t\t\t\t\tpoint.controlPoints = helpers.splineCurve(\n\t\t\t\t\t\t\tpreviousPoint(point, pointsWithValues, index),\n\t\t\t\t\t\t\tpoint,\n\t\t\t\t\t\t\tnextPoint(point, pointsWithValues, index),\n\t\t\t\t\t\t\ttension\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Prevent the bezier going outside of the bounds of the graph\n\n\t\t\t\t\t\t// Cap puter bezier handles to the upper/lower scale bounds\n\t\t\t\t\t\tif (point.controlPoints.outer.y > this.scale.endPoint){\n\t\t\t\t\t\t\tpoint.controlPoints.outer.y = this.scale.endPoint;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (point.controlPoints.outer.y < this.scale.startPoint){\n\t\t\t\t\t\t\tpoint.controlPoints.outer.y = this.scale.startPoint;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Cap inner bezier handles to the upper/lower scale bounds\n\t\t\t\t\t\tif (point.controlPoints.inner.y > this.scale.endPoint){\n\t\t\t\t\t\t\tpoint.controlPoints.inner.y = this.scale.endPoint;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (point.controlPoints.inner.y < this.scale.startPoint){\n\t\t\t\t\t\t\tpoint.controlPoints.inner.y = this.scale.startPoint;\n\t\t\t\t\t\t}\n\t\t\t\t\t},this);\n\t\t\t\t}\n\n\n\t\t\t\t//Draw the line between all the points\n\t\t\t\tctx.lineWidth = this.options.datasetStrokeWidth;\n\t\t\t\tctx.strokeStyle = dataset.strokeColor;\n\t\t\t\tctx.beginPath();\n\n\t\t\t\thelpers.each(pointsWithValues, function(point, index){\n\t\t\t\t\tif (index === 0){\n\t\t\t\t\t\tctx.moveTo(point.x, point.y);\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tif(this.options.bezierCurve){\n\t\t\t\t\t\t\tvar previous = previousPoint(point, pointsWithValues, index);\n\n\t\t\t\t\t\t\tctx.bezierCurveTo(\n\t\t\t\t\t\t\t\tprevious.controlPoints.outer.x,\n\t\t\t\t\t\t\t\tprevious.controlPoints.outer.y,\n\t\t\t\t\t\t\t\tpoint.controlPoints.inner.x,\n\t\t\t\t\t\t\t\tpoint.controlPoints.inner.y,\n\t\t\t\t\t\t\t\tpoint.x,\n\t\t\t\t\t\t\t\tpoint.y\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse{\n\t\t\t\t\t\t\tctx.lineTo(point.x,point.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\n\t\t\t\tif (this.options.datasetStroke) {\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\n\t\t\t\tif (this.options.datasetFill && pointsWithValues.length > 0){\n\t\t\t\t\t//Round off the line by going to the base of the chart, back to the start, then fill.\n\t\t\t\t\tctx.lineTo(pointsWithValues[pointsWithValues.length - 1].x, this.scale.endPoint);\n\t\t\t\t\tctx.lineTo(pointsWithValues[0].x, this.scale.endPoint);\n\t\t\t\t\tctx.fillStyle = dataset.fillColor;\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tctx.fill();\n\t\t\t\t}\n\n\t\t\t\t//Now draw the points over the line\n\t\t\t\t//A little inefficient double looping, but better than the line\n\t\t\t\t//lagging behind the point positions\n\t\t\t\thelpers.each(pointsWithValues,function(point){\n\t\t\t\t\tpoint.draw();\n\t\t\t\t});\n\t\t\t},this);\n\t\t}\n\t});\n\n\n}).call(this);\n\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\t//Cache a local reference to Chart.helpers\n\t\thelpers = Chart.helpers;\n\n\tvar defaultConfig = {\n\t\t//Boolean - Show a backdrop to the scale label\n\t\tscaleShowLabelBackdrop : true,\n\n\t\t//String - The colour of the label backdrop\n\t\tscaleBackdropColor : \"rgba(255,255,255,0.75)\",\n\n\t\t// Boolean - Whether the scale should begin at zero\n\t\tscaleBeginAtZero : true,\n\n\t\t//Number - The backdrop padding above & below the label in pixels\n\t\tscaleBackdropPaddingY : 2,\n\n\t\t//Number - The backdrop padding to the side of the label in pixels\n\t\tscaleBackdropPaddingX : 2,\n\n\t\t//Boolean - Show line for each value in the scale\n\t\tscaleShowLine : true,\n\n\t\t//Boolean - Stroke a line around each segment in the chart\n\t\tsegmentShowStroke : true,\n\n\t\t//String - The colour of the stroke on each segment.\n\t\tsegmentStrokeColor : \"#fff\",\n\n\t\t//Number - The width of the stroke value in pixels\n\t\tsegmentStrokeWidth : 2,\n\n\t\t//Number - Amount of animation steps\n\t\tanimationSteps : 100,\n\n\t\t//String - Animation easing effect.\n\t\tanimationEasing : \"easeOutBounce\",\n\n\t\t//Boolean - Whether to animate the rotation of the chart\n\t\tanimateRotate : true,\n\n\t\t//Boolean - Whether to animate scaling the chart from the centre\n\t\tanimateScale : false,\n\n\t\t//String - A legend template\n\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<segments.length; i++){%><li><span class=\\\"<%=name.toLowerCase()%>-legend-icon\\\" style=\\\"background-color:<%=segments[i].fillColor%>\\\"></span><span class=\\\"<%=name.toLowerCase()%>-legend-text\\\"><%if(segments[i].label){%><%=segments[i].label%><%}%></span></li><%}%></ul>\"\n\t};\n\n\n\tChart.Type.extend({\n\t\t//Passing in a name registers this chart in the Chart namespace\n\t\tname: \"PolarArea\",\n\t\t//Providing a defaults will also register the defaults in the chart namespace\n\t\tdefaults : defaultConfig,\n\t\t//Initialize is fired when the chart is initialized - Data is passed in as a parameter\n\t\t//Config is automatically merged by the core of Chart.js, and is available at this.options\n\t\tinitialize:  function(data){\n\t\t\tthis.segments = [];\n\t\t\t//Declare segment class as a chart instance specific class, so it can share props for this instance\n\t\t\tthis.SegmentArc = Chart.Arc.extend({\n\t\t\t\tshowStroke : this.options.segmentShowStroke,\n\t\t\t\tstrokeWidth : this.options.segmentStrokeWidth,\n\t\t\t\tstrokeColor : this.options.segmentStrokeColor,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\tinnerRadius : 0,\n\t\t\t\tx : this.chart.width/2,\n\t\t\t\ty : this.chart.height/2\n\t\t\t});\n\t\t\tthis.scale = new Chart.RadialScale({\n\t\t\t\tdisplay: this.options.showScale,\n\t\t\t\tfontStyle: this.options.scaleFontStyle,\n\t\t\t\tfontSize: this.options.scaleFontSize,\n\t\t\t\tfontFamily: this.options.scaleFontFamily,\n\t\t\t\tfontColor: this.options.scaleFontColor,\n\t\t\t\tshowLabels: this.options.scaleShowLabels,\n\t\t\t\tshowLabelBackdrop: this.options.scaleShowLabelBackdrop,\n\t\t\t\tbackdropColor: this.options.scaleBackdropColor,\n\t\t\t\tbackdropPaddingY : this.options.scaleBackdropPaddingY,\n\t\t\t\tbackdropPaddingX: this.options.scaleBackdropPaddingX,\n\t\t\t\tlineWidth: (this.options.scaleShowLine) ? this.options.scaleLineWidth : 0,\n\t\t\t\tlineColor: this.options.scaleLineColor,\n\t\t\t\tlineArc: true,\n\t\t\t\twidth: this.chart.width,\n\t\t\t\theight: this.chart.height,\n\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\tyCenter: this.chart.height/2,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\ttemplateString: this.options.scaleLabel,\n\t\t\t\tvaluesCount: data.length\n\t\t\t});\n\n\t\t\tthis.updateScaleRange(data);\n\n\t\t\tthis.scale.update();\n\n\t\t\thelpers.each(data,function(segment,index){\n\t\t\t\tthis.addData(segment,index,true);\n\t\t\t},this);\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activeSegments = (evt.type !== 'mouseout') ? this.getSegmentsAtEvent(evt) : [];\n\t\t\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\t\t\tsegment.restore([\"fillColor\"]);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activeSegments,function(activeSegment){\n\t\t\t\t\t\tactiveSegment.fillColor = activeSegment.highlightColor;\n\t\t\t\t\t});\n\t\t\t\t\tthis.showTooltip(activeSegments);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.render();\n\t\t},\n\t\tgetSegmentsAtEvent : function(e){\n\t\t\tvar segmentsArray = [];\n\n\t\t\tvar location = helpers.getRelativePosition(e);\n\n\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\tif (segment.inRange(location.x,location.y)) segmentsArray.push(segment);\n\t\t\t},this);\n\t\t\treturn segmentsArray;\n\t\t},\n\t\taddData : function(segment, atIndex, silent){\n\t\t\tvar index = atIndex || this.segments.length;\n\n\t\t\tthis.segments.splice(index, 0, new this.SegmentArc({\n\t\t\t\tfillColor: segment.color,\n\t\t\t\thighlightColor: segment.highlight || segment.color,\n\t\t\t\tlabel: segment.label,\n\t\t\t\tvalue: segment.value,\n\t\t\t\touterRadius: (this.options.animateScale) ? 0 : this.scale.calculateCenterOffset(segment.value),\n\t\t\t\tcircumference: (this.options.animateRotate) ? 0 : this.scale.getCircumference(),\n\t\t\t\tstartAngle: Math.PI * 1.5\n\t\t\t}));\n\t\t\tif (!silent){\n\t\t\t\tthis.reflow();\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t},\n\t\tremoveData: function(atIndex){\n\t\t\tvar indexToDelete = (helpers.isNumber(atIndex)) ? atIndex : this.segments.length-1;\n\t\t\tthis.segments.splice(indexToDelete, 1);\n\t\t\tthis.reflow();\n\t\t\tthis.update();\n\t\t},\n\t\tcalculateTotal: function(data){\n\t\t\tthis.total = 0;\n\t\t\thelpers.each(data,function(segment){\n\t\t\t\tthis.total += segment.value;\n\t\t\t},this);\n\t\t\tthis.scale.valuesCount = this.segments.length;\n\t\t},\n\t\tupdateScaleRange: function(datapoints){\n\t\t\tvar valuesArray = [];\n\t\t\thelpers.each(datapoints,function(segment){\n\t\t\t\tvaluesArray.push(segment.value);\n\t\t\t});\n\n\t\t\tvar scaleSizes = (this.options.scaleOverride) ?\n\t\t\t\t{\n\t\t\t\t\tsteps: this.options.scaleSteps,\n\t\t\t\t\tstepValue: this.options.scaleStepWidth,\n\t\t\t\t\tmin: this.options.scaleStartValue,\n\t\t\t\t\tmax: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)\n\t\t\t\t} :\n\t\t\t\thelpers.calculateScaleRange(\n\t\t\t\t\tvaluesArray,\n\t\t\t\t\thelpers.min([this.chart.width, this.chart.height])/2,\n\t\t\t\t\tthis.options.scaleFontSize,\n\t\t\t\t\tthis.options.scaleBeginAtZero,\n\t\t\t\t\tthis.options.scaleIntegersOnly\n\t\t\t\t);\n\n\t\t\thelpers.extend(\n\t\t\t\tthis.scale,\n\t\t\t\tscaleSizes,\n\t\t\t\t{\n\t\t\t\t\tsize: helpers.min([this.chart.width, this.chart.height]),\n\t\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\t\tyCenter: this.chart.height/2\n\t\t\t\t}\n\t\t\t);\n\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.calculateTotal(this.segments);\n\n\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\tsegment.save();\n\t\t\t});\n\t\t\t\n\t\t\tthis.reflow();\n\t\t\tthis.render();\n\t\t},\n\t\treflow : function(){\n\t\t\thelpers.extend(this.SegmentArc.prototype,{\n\t\t\t\tx : this.chart.width/2,\n\t\t\t\ty : this.chart.height/2\n\t\t\t});\n\t\t\tthis.updateScaleRange(this.segments);\n\t\t\tthis.scale.update();\n\n\t\t\thelpers.extend(this.scale,{\n\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\tyCenter: this.chart.height/2\n\t\t\t});\n\n\t\t\thelpers.each(this.segments, function(segment){\n\t\t\t\tsegment.update({\n\t\t\t\t\touterRadius : this.scale.calculateCenterOffset(segment.value)\n\t\t\t\t});\n\t\t\t}, this);\n\n\t\t},\n\t\tdraw : function(ease){\n\t\t\tvar easingDecimal = ease || 1;\n\t\t\t//Clear & draw the canvas\n\t\t\tthis.clear();\n\t\t\thelpers.each(this.segments,function(segment, index){\n\t\t\t\tsegment.transition({\n\t\t\t\t\tcircumference : this.scale.getCircumference(),\n\t\t\t\t\touterRadius : this.scale.calculateCenterOffset(segment.value)\n\t\t\t\t},easingDecimal);\n\n\t\t\t\tsegment.endAngle = segment.startAngle + segment.circumference;\n\n\t\t\t\t// If we've removed the first segment we need to set the first one to\n\t\t\t\t// start at the top.\n\t\t\t\tif (index === 0){\n\t\t\t\t\tsegment.startAngle = Math.PI * 1.5;\n\t\t\t\t}\n\n\t\t\t\t//Check to see if it's the last segment, if not get the next and update the start angle\n\t\t\t\tif (index < this.segments.length - 1){\n\t\t\t\t\tthis.segments[index+1].startAngle = segment.endAngle;\n\t\t\t\t}\n\t\t\t\tsegment.draw();\n\t\t\t}, this);\n\t\t\tthis.scale.draw();\n\t\t}\n\t});\n\n}).call(this);\n\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\thelpers = Chart.helpers;\n\n\n\n\tChart.Type.extend({\n\t\tname: \"Radar\",\n\t\tdefaults:{\n\t\t\t//Boolean - Whether to show lines for each scale point\n\t\t\tscaleShowLine : true,\n\n\t\t\t//Boolean - Whether we show the angle lines out of the radar\n\t\t\tangleShowLineOut : true,\n\n\t\t\t//Boolean - Whether to show labels on the scale\n\t\t\tscaleShowLabels : false,\n\n\t\t\t// Boolean - Whether the scale should begin at zero\n\t\t\tscaleBeginAtZero : true,\n\n\t\t\t//String - Colour of the angle line\n\t\t\tangleLineColor : \"rgba(0,0,0,.1)\",\n\n\t\t\t//Number - Pixel width of the angle line\n\t\t\tangleLineWidth : 1,\n\n\t\t\t//Number - Interval at which to draw angle lines (\"every Nth point\")\n\t\t\tangleLineInterval: 1,\n\n\t\t\t//String - Point label font declaration\n\t\t\tpointLabelFontFamily : \"'Arial'\",\n\n\t\t\t//String - Point label font weight\n\t\t\tpointLabelFontStyle : \"normal\",\n\n\t\t\t//Number - Point label font size in pixels\n\t\t\tpointLabelFontSize : 10,\n\n\t\t\t//String - Point label font colour\n\t\t\tpointLabelFontColor : \"#666\",\n\n\t\t\t//Boolean - Whether to show a dot for each point\n\t\t\tpointDot : true,\n\n\t\t\t//Number - Radius of each point dot in pixels\n\t\t\tpointDotRadius : 3,\n\n\t\t\t//Number - Pixel width of point dot stroke\n\t\t\tpointDotStrokeWidth : 1,\n\n\t\t\t//Number - amount extra to add to the radius to cater for hit detection outside the drawn point\n\t\t\tpointHitDetectionRadius : 20,\n\n\t\t\t//Boolean - Whether to show a stroke for datasets\n\t\t\tdatasetStroke : true,\n\n\t\t\t//Number - Pixel width of dataset stroke\n\t\t\tdatasetStrokeWidth : 2,\n\n\t\t\t//Boolean - Whether to fill the dataset with a colour\n\t\t\tdatasetFill : true,\n\n\t\t\t//String - A legend template\n\t\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<datasets.length; i++){%><li><span class=\\\"<%=name.toLowerCase()%>-legend-icon\\\" style=\\\"background-color:<%=datasets[i].strokeColor%>\\\"></span><span class=\\\"<%=name.toLowerCase()%>-legend-text\\\"><%if(datasets[i].label){%><%=datasets[i].label%><%}%></span></li><%}%></ul>\"\n\n\t\t},\n\n\t\tinitialize: function(data){\n\t\t\tthis.PointClass = Chart.Point.extend({\n\t\t\t\tstrokeWidth : this.options.pointDotStrokeWidth,\n\t\t\t\tradius : this.options.pointDotRadius,\n\t\t\t\tdisplay: this.options.pointDot,\n\t\t\t\thitDetectionRadius : this.options.pointHitDetectionRadius,\n\t\t\t\tctx : this.chart.ctx\n\t\t\t});\n\n\t\t\tthis.datasets = [];\n\n\t\t\tthis.buildScale(data);\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activePointsCollection = (evt.type !== 'mouseout') ? this.getPointsAtEvent(evt) : [];\n\n\t\t\t\t\tthis.eachPoints(function(point){\n\t\t\t\t\t\tpoint.restore(['fillColor', 'strokeColor']);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activePointsCollection, function(activePoint){\n\t\t\t\t\t\tactivePoint.fillColor = activePoint.highlightFill;\n\t\t\t\t\t\tactivePoint.strokeColor = activePoint.highlightStroke;\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.showTooltip(activePointsCollection);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//Iterate through each of the datasets, and build this into a property of the chart\n\t\t\thelpers.each(data.datasets,function(dataset){\n\n\t\t\t\tvar datasetObject = {\n\t\t\t\t\tlabel: dataset.label || null,\n\t\t\t\t\tfillColor : dataset.fillColor,\n\t\t\t\t\tstrokeColor : dataset.strokeColor,\n\t\t\t\t\tpointColor : dataset.pointColor,\n\t\t\t\t\tpointStrokeColor : dataset.pointStrokeColor,\n\t\t\t\t\tpoints : []\n\t\t\t\t};\n\n\t\t\t\tthis.datasets.push(datasetObject);\n\n\t\t\t\thelpers.each(dataset.data,function(dataPoint,index){\n\t\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\t\tvar pointPosition;\n\t\t\t\t\tif (!this.scale.animation){\n\t\t\t\t\t\tpointPosition = this.scale.getPointPosition(index, this.scale.calculateCenterOffset(dataPoint));\n\t\t\t\t\t}\n\t\t\t\t\tdatasetObject.points.push(new this.PointClass({\n\t\t\t\t\t\tvalue : dataPoint,\n\t\t\t\t\t\tlabel : data.labels[index],\n\t\t\t\t\t\tdatasetLabel: dataset.label,\n\t\t\t\t\t\tx: (this.options.animation) ? this.scale.xCenter : pointPosition.x,\n\t\t\t\t\t\ty: (this.options.animation) ? this.scale.yCenter : pointPosition.y,\n\t\t\t\t\t\tstrokeColor : dataset.pointStrokeColor,\n\t\t\t\t\t\tfillColor : dataset.pointColor,\n\t\t\t\t\t\thighlightFill : dataset.pointHighlightFill || dataset.pointColor,\n\t\t\t\t\t\thighlightStroke : dataset.pointHighlightStroke || dataset.pointStrokeColor\n\t\t\t\t\t}));\n\t\t\t\t},this);\n\n\t\t\t},this);\n\n\t\t\tthis.render();\n\t\t},\n\t\teachPoints : function(callback){\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\thelpers.each(dataset.points,callback,this);\n\t\t\t},this);\n\t\t},\n\n\t\tgetPointsAtEvent : function(evt){\n\t\t\tvar mousePosition = helpers.getRelativePosition(evt),\n\t\t\t\tfromCenter = helpers.getAngleFromPoint({\n\t\t\t\t\tx: this.scale.xCenter,\n\t\t\t\t\ty: this.scale.yCenter\n\t\t\t\t}, mousePosition);\n\n\t\t\tvar anglePerIndex = (Math.PI * 2) /this.scale.valuesCount,\n\t\t\t\tpointIndex = Math.round((fromCenter.angle - Math.PI * 1.5) / anglePerIndex),\n\t\t\t\tactivePointsCollection = [];\n\n\t\t\t// If we're at the top, make the pointIndex 0 to get the first of the array.\n\t\t\tif (pointIndex >= this.scale.valuesCount || pointIndex < 0){\n\t\t\t\tpointIndex = 0;\n\t\t\t}\n\n\t\t\tif (fromCenter.distance <= this.scale.drawingArea){\n\t\t\t\thelpers.each(this.datasets, function(dataset){\n\t\t\t\t\tactivePointsCollection.push(dataset.points[pointIndex]);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn activePointsCollection;\n\t\t},\n\n\t\tbuildScale : function(data){\n\t\t\tthis.scale = new Chart.RadialScale({\n\t\t\t\tdisplay: this.options.showScale,\n\t\t\t\tfontStyle: this.options.scaleFontStyle,\n\t\t\t\tfontSize: this.options.scaleFontSize,\n\t\t\t\tfontFamily: this.options.scaleFontFamily,\n\t\t\t\tfontColor: this.options.scaleFontColor,\n\t\t\t\tshowLabels: this.options.scaleShowLabels,\n\t\t\t\tshowLabelBackdrop: this.options.scaleShowLabelBackdrop,\n\t\t\t\tbackdropColor: this.options.scaleBackdropColor,\n\t\t\t\tbackgroundColors: this.options.scaleBackgroundColors,\n\t\t\t\tbackdropPaddingY : this.options.scaleBackdropPaddingY,\n\t\t\t\tbackdropPaddingX: this.options.scaleBackdropPaddingX,\n\t\t\t\tlineWidth: (this.options.scaleShowLine) ? this.options.scaleLineWidth : 0,\n\t\t\t\tlineColor: this.options.scaleLineColor,\n\t\t\t\tangleLineColor : this.options.angleLineColor,\n\t\t\t\tangleLineWidth : (this.options.angleShowLineOut) ? this.options.angleLineWidth : 0,\n        angleLineInterval: (this.options.angleLineInterval) ? this.options.angleLineInterval : 1,\n\t\t\t\t// Point labels at the edge of each line\n\t\t\t\tpointLabelFontColor : this.options.pointLabelFontColor,\n\t\t\t\tpointLabelFontSize : this.options.pointLabelFontSize,\n\t\t\t\tpointLabelFontFamily : this.options.pointLabelFontFamily,\n\t\t\t\tpointLabelFontStyle : this.options.pointLabelFontStyle,\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth: this.chart.width,\n\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\tyCenter: this.chart.height/2,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\ttemplateString: this.options.scaleLabel,\n\t\t\t\tlabels: data.labels,\n\t\t\t\tvaluesCount: data.datasets[0].data.length\n\t\t\t});\n\n\t\t\tthis.scale.setScaleSize();\n\t\t\tthis.updateScaleRange(data.datasets);\n\t\t\tthis.scale.buildYLabels();\n\t\t},\n\t\tupdateScaleRange: function(datasets){\n\t\t\tvar valuesArray = (function(){\n\t\t\t\tvar totalDataArray = [];\n\t\t\t\thelpers.each(datasets,function(dataset){\n\t\t\t\t\tif (dataset.data){\n\t\t\t\t\t\ttotalDataArray = totalDataArray.concat(dataset.data);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\thelpers.each(dataset.points, function(point){\n\t\t\t\t\t\t\ttotalDataArray.push(point.value);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn totalDataArray;\n\t\t\t})();\n\n\n\t\t\tvar scaleSizes = (this.options.scaleOverride) ?\n\t\t\t\t{\n\t\t\t\t\tsteps: this.options.scaleSteps,\n\t\t\t\t\tstepValue: this.options.scaleStepWidth,\n\t\t\t\t\tmin: this.options.scaleStartValue,\n\t\t\t\t\tmax: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)\n\t\t\t\t} :\n\t\t\t\thelpers.calculateScaleRange(\n\t\t\t\t\tvaluesArray,\n\t\t\t\t\thelpers.min([this.chart.width, this.chart.height])/2,\n\t\t\t\t\tthis.options.scaleFontSize,\n\t\t\t\t\tthis.options.scaleBeginAtZero,\n\t\t\t\t\tthis.options.scaleIntegersOnly\n\t\t\t\t);\n\n\t\t\thelpers.extend(\n\t\t\t\tthis.scale,\n\t\t\t\tscaleSizes\n\t\t\t);\n\n\t\t},\n\t\taddData : function(valuesArray,label){\n\t\t\t//Map the values array for each of the datasets\n\t\t\tthis.scale.valuesCount++;\n\t\t\thelpers.each(valuesArray,function(value,datasetIndex){\n\t\t\t\tvar pointPosition = this.scale.getPointPosition(this.scale.valuesCount, this.scale.calculateCenterOffset(value));\n\t\t\t\tthis.datasets[datasetIndex].points.push(new this.PointClass({\n\t\t\t\t\tvalue : value,\n\t\t\t\t\tlabel : label,\n\t\t\t\t\tdatasetLabel: this.datasets[datasetIndex].label,\n\t\t\t\t\tx: pointPosition.x,\n\t\t\t\t\ty: pointPosition.y,\n\t\t\t\t\tstrokeColor : this.datasets[datasetIndex].pointStrokeColor,\n\t\t\t\t\tfillColor : this.datasets[datasetIndex].pointColor\n\t\t\t\t}));\n\t\t\t},this);\n\n\t\t\tthis.scale.labels.push(label);\n\n\t\t\tthis.reflow();\n\n\t\t\tthis.update();\n\t\t},\n\t\tremoveData : function(){\n\t\t\tthis.scale.valuesCount--;\n\t\t\tthis.scale.labels.shift();\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\tdataset.points.shift();\n\t\t\t},this);\n\t\t\tthis.reflow();\n\t\t\tthis.update();\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.eachPoints(function(point){\n\t\t\t\tpoint.save();\n\t\t\t});\n\t\t\tthis.reflow();\n\t\t\tthis.render();\n\t\t},\n\t\treflow: function(){\n\t\t\thelpers.extend(this.scale, {\n\t\t\t\twidth : this.chart.width,\n\t\t\t\theight: this.chart.height,\n\t\t\t\tsize : helpers.min([this.chart.width, this.chart.height]),\n\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\tyCenter: this.chart.height/2\n\t\t\t});\n\t\t\tthis.updateScaleRange(this.datasets);\n\t\t\tthis.scale.setScaleSize();\n\t\t\tthis.scale.buildYLabels();\n\t\t},\n\t\tdraw : function(ease){\n\t\t\tvar easeDecimal = ease || 1,\n\t\t\t\tctx = this.chart.ctx;\n\t\t\tthis.clear();\n\t\t\tthis.scale.draw();\n\n\t\t\thelpers.each(this.datasets,function(dataset){\n\n\t\t\t\t//Transition each point first so that the line and point drawing isn't out of sync\n\t\t\t\thelpers.each(dataset.points,function(point,index){\n\t\t\t\t\tif (point.hasValue()){\n\t\t\t\t\t\tpoint.transition(this.scale.getPointPosition(index, this.scale.calculateCenterOffset(point.value)), easeDecimal);\n\t\t\t\t\t}\n\t\t\t\t},this);\n\n\n\n\t\t\t\t//Draw the line between all the points\n\t\t\t\tctx.lineWidth = this.options.datasetStrokeWidth;\n\t\t\t\tctx.strokeStyle = dataset.strokeColor;\n\t\t\t\tctx.beginPath();\n\t\t\t\thelpers.each(dataset.points,function(point,index){\n\t\t\t\t\tif (index === 0){\n\t\t\t\t\t\tctx.moveTo(point.x,point.y);\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tctx.lineTo(point.x,point.y);\n\t\t\t\t\t}\n\t\t\t\t},this);\n\t\t\t\tctx.closePath();\n\t\t\t\tctx.stroke();\n\n\t\t\t\tctx.fillStyle = dataset.fillColor;\n\t\t\t\tif(this.options.datasetFill){\n\t\t\t\t\tctx.fill();\n\t\t\t\t}\n\t\t\t\t//Now draw the points over the line\n\t\t\t\t//A little inefficient double looping, but better than the line\n\t\t\t\t//lagging behind the point positions\n\t\t\t\thelpers.each(dataset.points,function(point){\n\t\t\t\t\tif (point.hasValue()){\n\t\t\t\t\t\tpoint.draw();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t},this);\n\n\t\t}\n\n\t});\n\n\n\n\n\n}).call(this);\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/CHANGES.md",
    "content": "CKEditor 4 Changelog\n====================\n\n## CKEditor 4.5.7\n\nNew Features:\n\n* [#14327](http://dev.ckeditor.com/ticket/14327): Added Swiss German localization.\n\nOther Changes:\n\n* [#13816](http://dev.ckeditor.com/ticket/13816): Introduced a new strategy for Filling Character handling to avoid changes in DOM. This fixes the following issues:\n\t* [#12727](http://dev.ckeditor.com/ticket/12727): [Blink] `IndexSizeError` when using the [Div Editing Area](http://ckeditor.com/addon/divarea) and [Content Templates](http://ckeditor.com/addon/templates) plugins.\n\t* [#13377](http://dev.ckeditor.com/ticket/13377): [Widget](http://ckeditor.com/addon/widget) plugin issue when typing in Korean.\n\t* [#13389](http://dev.ckeditor.com/ticket/13389): [Blink] [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) fails when the cursor is next to an `<hr>` tag.\n\t* [#13513](http://dev.ckeditor.com/ticket/13513): [Blink, WebKit] [Div Editing Area](http://ckeditor.com/addon/divarea) and [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) throw an error when an image is the only data in the editor.\n* [#13884](http://dev.ckeditor.com/ticket/13884): Fixed: Copy/paste table in Firefox results in just first cell being pasted.\n* [#14234](http://dev.ckeditor.com/ticket/14234): Fixed: URL input field is not marked as required in the [Embed](http://ckeditor.com/addon/embed) dialog.\n\n## CKEditor 4.5.6\n\nNew Features:\n\n* Introduced the [`CKEDITOR.tools.getCookie()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-getCookie) and [`CKEDITOR.tools.setCookie()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-setCookie) methods for accessing cookies.\n* Introduced the [`CKEDITOR.tools.getCsrfToken()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-getCsrfToken) method. The CSRF token is now automatically sent by the [File Browser](http://ckeditor.com/addon/filebrowser) and [File Tools](http://ckeditor.com/addon/filetools) plugins during file uploads. The server-side upload handlers may check it and use it to additionally secure the communication.\n\nOther Changes:\n\n* Updated [SCAYT](http://ckeditor.com/addon/scayt) (Spell Check As You Type):\n\t- New features:\n\t\t- CKEditor [Language](http://ckeditor.com/addon/language) plugin support.\n\t\t- CKEditor [Placeholder](http://ckeditor.com/addon/placeholder) plugin support.\n\t\t- [Drag&Drop](http://sdk.ckeditor.com/samples/fileupload.html) support.\n\t\t- **Experimental** [GRAYT](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-grayt_autoStartup) (Grammar As You Type) functionality.\n\t- Fixed issues:\n\t\t* [#98](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/98): SCAYT affects dialog double-click. Fixed in SCAYT core.\n\t\t* [#102](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/102): SCAYT core performance enhancements.\n\t\t* [#104](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/104): SCAYT's spans leak into the clipboard and after pasting.\n\t\t* [#105](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/105): A JavaScript error fired in case of multiple instances of CKEditor on one page.\n\t\t* [#107](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/107): SCAYT should not check non-editable parts of content.\n\t\t* [#108](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/108): Latest SCAYT copies the ID of the editor element to the iframe.\n\t\t* SCAYT stops working when CKEditor [Undo plugin](http://ckeditor.com/addon/undo) not enabled.\n\t\t* Issue with pasting SCAYT markup in CKEditor.\n\t\t* SCAYT stops working after pressing the *Cancel* button in the WSC dialog.\n\n## CKEditor 4.5.5\n\nFixed Issues:\n\n* [#13887](https://dev.ckeditor.com/ticket/13887): Fixed: [Link](http://ckeditor.com/addon/link) plugin alters the `target` attribute value. Thanks to [SamZiemer](https://github.com/SamZiemer)!\n* [#12189](http://dev.ckeditor.com/ticket/12189): Fixed: The [Link](http://ckeditor.com/addon/link) plugin dialog does not display the subject of email links if the subject parameter is not lowercase.\n* [#9192](http://dev.ckeditor.com/ticket/9192): Fixed: An `undefined` string is appended to an email address added with the [Link](http://ckeditor.com/addon/link) plugin if subject and email body are empty and [`config.emailProtection`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-emailProtection) is set to `encode`.\n* [#13790](https://dev.ckeditor.com/ticket/13790): Fixed: It is not possible to destroy the editor `<iframe>` after the editor was detached from DOM. Thanks to [Stefan Rijnhart](https://github.com/StefanRijnhart)!\n* [#13803](https://dev.ckeditor.com/ticket/13803): Fixed: The editor cannot be destroyed before being fully initialized. Thanks to [Cyril Fluck](https://github.com/cyril-sf)!\n* [#13867](http://dev.ckeditor.com/ticket/13867): Fixed: CKEditor does not work when the `classList` polyfill is used.\n* [#13885](http://dev.ckeditor.com/ticket/13885): Fixed: [Enhanced Image](http://ckeditor.com/addon/image2) requires the [Link](http://ckeditor.com/addon/link) plugin to link an image.\n* [#13883](http://dev.ckeditor.com/ticket/13883): Fixed: Copying a table using the context menu strips off styles.\n* [#13872](http://dev.ckeditor.com/ticket/13872): Fixed: Cutting is possible in the [read-only](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) mode.\n* [#12848](http://dev.ckeditor.com/ticket/12848): [Blink] Fixed: Opening the [Find and Replace](http://ckeditor.com/addon/find) dialog window in the [read-only](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) mode throws an exception.\n* [#13879](http://dev.ckeditor.com/ticket/13879): Fixed: It is not possible to prevent the [`editor.drop`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-drop) event.\n* [#13361](http://dev.ckeditor.com/ticket/13361): Fixed: Skin images fail when the site path includes parentheses because the `background-image` path needs single quotes around the URL value.\n* [#13771](http://dev.ckeditor.com/ticket/13771): Fixed: The `contents.css` style is not used if the [IFrame Editing Area](http://ckeditor.com/addon/wysiwygarea) plugin is missing.\n* [#13782](http://dev.ckeditor.com/ticket/13782): Fixed: Unclear log messages.\n* [#13919](http://dev.ckeditor.com/ticket/13919): [Edge] Fixed: Browser window crashes when accessing the `isContentEditable` property of an `<input>` DOM element.\n\nOther Changes:\n\n* [#13859](http://dev.ckeditor.com/ticket/13859): Test cases created with `bender.tools.createTestsForEditors` will also receive editor bot as a second parameter.\n\n## CKEditor 4.5.4\n\nNew Features:\n\n* [#13632](http://dev.ckeditor.com/ticket/13632): Introduce error logging mechanism.\n* [#13730](http://dev.ckeditor.com/ticket/13730): Switch to the new error logging mechanism.\n\nFixed Issues:\n\n* [#9856](http://dev.ckeditor.com/ticket/9856): Fixed: Cannot use the native context menu together with the [Div Editing Area](http://ckeditor.com/addon/divarea) plugin. Thanks to [Mark Wade](https://github.com/mark-wade)!\n* [#12733](http://dev.ckeditor.com/ticket/12733): [IE9+] Fixed: Radio button `onChange` does not work. Thanks to [Iliya Kostadinov](https://github.com/iliyakostadinov)!\n* [#13142](http://dev.ckeditor.com/ticket/13142): [Edge] Fixed: *Ctrl+A* and then *Backspace* result in an empty `<div>` element.\n* [#13599](http://dev.ckeditor.com/ticket/13599): Fixed: Cross-editor drag and drop of an inline widget results in error/artifacts.\n* [#13640](http://dev.ckeditor.com/ticket/13640): [IE] Fixed: Dropping a widget outside the `<body>` element is not handled correctly.\n* [#13533](http://dev.ckeditor.com/ticket/13533): Fixed: No progress during upload.\n* [#13680](http://dev.ckeditor.com/ticket/13680): Fixed: The parser should allow the `<h1-6>` element to be a child of the `<summary>` element.\n* [#11724](http://dev.ckeditor.com/ticket/11724): [Touch devices] Fixed: Drop-downs often hide right after opening them.\n* [#13690](http://dev.ckeditor.com/ticket/13690): Fixed: Copying content from IE to Chrome adds an extra paragraph.\n* [#13284](http://dev.ckeditor.com/ticket/13284): Fixed: Cannot drag and drop a widget if the text caret is placed just after the widget instance.\n* [#13516](http://dev.ckeditor.com/ticket/13516): Fixed: CKEditor removes empty HTML5 anchors without the `name` attribute.\n* [#13765](http://dev.ckeditor.com/ticket/13765): [Safari 9] Fixed: Problems with rendering samples.\n\nOther Changes:\n\n* [#11725](http://dev.ckeditor.com/ticket/11725): Marked [`CKEDITOR.env.mobile`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-mobile) as deprecated. The reason is that it is no longer clear what \"mobile\" means.\n* [#13737](http://dev.ckeditor.com/ticket/13737): Upgraded [Bender.js](https://github.com/benderjs/benderjs) to 0.4.1.\n\n## CKEditor 4.5.3\n\nNew Features:\n\n* [#13501](http://dev.ckeditor.com/ticket/13501): Added the [`config.fileTools_defaultFileName`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fileTools_defaultFileName) option to allow setting a default file name for paste uploads.\n* [#13603](http://dev.ckeditor.com/ticket/13603): Added support for uploading dropped BMP images.\n\nFixed Issues:\n\n* [#13590](http://dev.ckeditor.com/ticket/13590): Fixed: Various issues related to the [Paste from Word](http://ckeditor.com/addon/pastefromword) feature. Fixes also:\n  * [#11215](http://dev.ckeditor.com/ticket/11215),\n  * [#8780](http://dev.ckeditor.com/ticket/8780),\n  * [#12762](http://dev.ckeditor.com/ticket/12762).\n* [#13386](http://dev.ckeditor.com/ticket/13386): [Edge] Fixed: Issues with selecting and editing images.\n* [#13568](http://dev.ckeditor.com/ticket/13568): Fixed: The [`editor.getSelectedHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml) method returns invalid results for entire content selection.\n* [#13453](http://dev.ckeditor.com/ticket/13453): Fixed: Drag&drop of entire editor content throws an error.\n* [#13465](http://dev.ckeditor.com/ticket/13465): Fixed: Error is thrown and the widget is lost on drag&drop if it is the only content of the editor.\n* [#13414](http://dev.ckeditor.com/ticket/13414): Fixed: Content auto paragraphing in a nested editable despite editor configuration.\n* [#13429](http://dev.ckeditor.com/ticket/13429): Fixed: Incorrect selection after content insertion by the [Auto Embed](http://ckeditor.com/addon/autoembed) plugin.\n* [#13388](http://dev.ckeditor.com/ticket/13388): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) integration with [Undo](http://ckeditor.com/addon/undo) is broken.\n\nOther Changes:\n\n* [#13637](https://dev.ckeditor.com/ticket/13637): Several icons were refactored.\n* Updated [Bender.js](https://github.com/benderjs/benderjs) to 0.3.0 and introduced the ability to run tests via HTTPs ([#13265](https://dev.ckeditor.com/ticket/13265)).\n\n## CKEditor 4.5.2\n\nFixed Issues:\n\n* [#13609](http://dev.ckeditor.com/ticket/13609): [Edge] Fixed: The browser crashes when switching to the source mode. Thanks to [Andrew Williams and Mark Smeed](http://webxsolution.com/)!\n* [PR#201](https://github.com/ckeditor/ckeditor-dev/pull/201): Fixed: Buttons in the toolbar configurator cause form submission. Thanks to [colemanw](https://github.com/colemanw)!\n* [#13422](http://dev.ckeditor.com/ticket/13422): Fixed: A monospaced font should be used in the `<textarea>` element storing editor configuration in the toolbar configurator.\n* [#13494](http://dev.ckeditor.com/ticket/13494): Fixed: Error thrown in the toolbar configurator if plugin requirements are not met.\n* [#13409](http://dev.ckeditor.com/ticket/13409): Fixed: List elements incorrectly merged when pressing *Backspace* or *Delete*.\n* [#13434](http://dev.ckeditor.com/ticket/13434): Fixed: Dialog state indicator broken in Right–To–Left environments.\n* [#13460](http://dev.ckeditor.com/ticket/13460): [IE8] Fixed: Copying inline widgets is broken when [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_acf) is disabled.\n* [#13495](http://dev.ckeditor.com/ticket/13495): [Firefox, IE] Fixed: Text is not word-wrapped in the Paste dialog window.\n* [#13528](http://dev.ckeditor.com/ticket/13528): [Firefox@Windows] Fixed: Content copied from Microsoft Word and other external applications is pasted as a plain text. Removed the `CKEDITOR.plugins.clipboard.isHtmlInExternalDataTransfer` property as the check must be dynamic.\n* [#13583](http://dev.ckeditor.com/ticket/13583): Fixed: [`DataTransfer.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.clipboard.dataTransfer-method-getData) should work consistently in all browsers and should not strip valuable content. Fixed pasting tables from Microsoft Excel on Chrome.\n* [#13468](http://dev.ckeditor.com/ticket/13468): [IE] Fixed: Binding drag&drop `dataTransfer` does not work if `text` data was set in the meantime.\n* [#13451](http://dev.ckeditor.com/ticket/13451): [IE8-9] Fixed: One drag&drop operation may affect following ones.\n* [#13184](http://dev.ckeditor.com/ticket/13184): Fixed: Web page reloaded after a drop on editor UI.\n* [#13129](http://dev.ckeditor.com/ticket/13129) Fixed: Block widget blurred after a drop followed by an undo.\n* [#13397](http://dev.ckeditor.com/ticket/13397): Fixed: Drag&drop of a widget inside its nested widget crashes the editor.\n* [#13385](http://dev.ckeditor.com/ticket/13385): Fixed: [`editor.getSnapshot()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSnapshot) may return a non-string value.\n* [#13419](http://dev.ckeditor.com/ticket/13419): Fixed: The [Auto Link](http://ckeditor.com/addon/autolink) plugin does not encode double quotes in URLs.\n* [#13420](http://dev.ckeditor.com/ticket/13420): Fixed: The [Auto Embed](http://ckeditor.com/addon/autoembed) plugin ignores encoded characters in URL parameters.\n* [#13410](http://dev.ckeditor.com/ticket/13410): Fixed: Error thrown in the [Auto Embed](http://ckeditor.com/addon/autoembed) plugin when undoing right after pasting a link.\n* [#13566](http://dev.ckeditor.com/ticket/13566): Fixed: Suppressed notifications in the [Media Embed Base](http://ckeditor.com/addon/embedbase) plugin.\n* [#11616](http://dev.ckeditor.com/ticket/11616): [Chrome] Fixed: Resizing the editor while it is not displayed breaks the editable. Fixes also [#9160](http://dev.ckeditor.com/ticket/9160) and [#9715](http://dev.ckeditor.com/ticket/9715).\n* [#11376](http://dev.ckeditor.com/ticket/11376): [IE11] Fixed: Loss of text when pasting bulleted lists from Microsoft Word.\n* [#13143](http://dev.ckeditor.com/ticket/13143): [Edge] Fixed: Focus lost when opening the panel.\n* [#13387](http://dev.ckeditor.com/ticket/13387): [Edge] Fixed: \"Permission denied\" error thrown when loading the editor with developer tools open.\n* [#13574](http://dev.ckeditor.com/ticket/13574): [Edge] Fixed: \"Permission denied\" error thrown when opening editor dialog windows.\n* [#13441](http://dev.ckeditor.com/ticket/13441): [Edge] Fixed: The [Clipboard](http://ckeditor.com/addon/clipboard) plugin breaks the state of [Undo](http://ckeditor.com/addon/undo) commands after a paste.\n* [#13554](http://dev.ckeditor.com/ticket/13554): [Edge] Fixed: Paste dialog's iframe does not receive focus on show.\n* [#13440](http://dev.ckeditor.com/ticket/13440): [Edge] Fixed: Unable to paste a widget.\n\nOther Changes:\n\n* [#13421](http://dev.ckeditor.com/ticket/13421): UX improvements to notifications in the [Auto Embed](http://ckeditor.com/addon/autoembed) plugin.\n\n## CKEditor 4.5.1\n\nFixed Issues:\n\n* [#13486](http://dev.ckeditor.com/ticket/13486): Fixed: The [Upload Image](http://ckeditor.com/addon/uploadimage) plugin should log an error, not throw an error when upload URL is not set.\n\n## CKEditor 4.5\n\nNew Features:\n\n* [#13304](http://dev.ckeditor.com/ticket/13304): Added support for passing DOM elements to [`config.sharedSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-sharedSpaces). Thanks to [Undergrounder](https://github.com/Undergrounder)!\n* [#13215](http://dev.ckeditor.com/ticket/13215): Added ability to cancel fetching a resource by the Embed plugins.\n* [#13213](http://dev.ckeditor.com/ticket/13213): Added the [`dialog#setState()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-method-setState) method and used it in the [Embed](http://ckeditor.com/addon/embed) dialog to indicate that a resource is being loaded.\n* [#13337](http://dev.ckeditor.com/ticket/13337): Added the [`repository.onWidget()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-onWidget) method &mdash; a convenient way to listen to [widget](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) events through the [repository](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository).\n* [#13214](http://dev.ckeditor.com/ticket/13214): Added support for pasting links that convert into embeddable resources on the fly.\n\nFixed Issues:\n\n* [#13334](http://dev.ckeditor.com/ticket/13334): Fixed: Error after nesting widgets and playing with undo/redo.\n* [#13118](http://dev.ckeditor.com/ticket/13118): Fixed: The [`editor.getSelectedHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml) method throws an error when called in the source mode.\n* [#13158](http://dev.ckeditor.com/ticket/13158): Fixed: Error after canceling a dialog when creating a widget.\n* [#13197](http://dev.ckeditor.com/ticket/13197): Fixed: Linked inline [Enhanced Image](http://ckeditor.com/addon/image2) alignment class is not transferred to the widget wrapper.\n* [#13199](http://dev.ckeditor.com/ticket/13199): Fixed: [Semantic Embed](http://ckeditor.com/addon/embedsemantic) does not support widget classes.\n* [#13003](http://dev.ckeditor.com/ticket/13003): Fixed: Anchors are uploaded when moving them by drag and drop.\n* [#13032](http://dev.ckeditor.com/ticket/13032): Fixed: When upload is done, notification update should be marked as important.\n* [#13300](http://dev.ckeditor.com/ticket/13300): Fixed: The `internalCommit` argument in the [Image](http://ckeditor.com/addon/image) dialog seems to be never used.\n* [#13036](http://dev.ckeditor.com/ticket/13036): Fixed: Notifications are moved 10px to the right.\n* [#13280](http://dev.ckeditor.com/ticket/13280): [IE8] Fixed: Undo after inline widget drag&drop throws an error.\n* [#13186](http://dev.ckeditor.com/ticket/13186): Fixed: Content dropped into a nested editable is not filtered by [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_acf).\n* [#13140](http://dev.ckeditor.com/ticket/13140): Fixed: Error thrown when dropping a block widget right after itself.\n* [#13176](http://dev.ckeditor.com/ticket/13176): [IE8] Fixed: Errors on drag&drop of embed widgets.\n* [#13015](http://dev.ckeditor.com/ticket/13015): Fixed: Dropping an image file on [Enhanced Image](http://ckeditor.com/addon/image2) causes a page reload.\n* [#13080](http://dev.ckeditor.com/ticket/13080): Fixed: Ugly notification shown when the response contains HTML content.\n* [#13011](http://dev.ckeditor.com/ticket/13011): [IE8] Fixed: Anchors are duplicated on drag&drop in specific locations.\n* [#13105](http://dev.ckeditor.com/ticket/13105): Fixed: Various issues related to [`CKEDITOR.tools.htmlEncode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlEncode) and [`CKEDITOR.tools.htmlDecode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlDecode) methods.\n* [#11976](http://dev.ckeditor.com/ticket/11976): [Chrome] Fixed: Copy&paste and drag&drop lists from Microsoft Word.\n* [#13128](http://dev.ckeditor.com/ticket/13128): Fixed: Various issues with cloning element IDs:\n  * Fixed the default behavior of [`range.cloneContents()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-cloneContents) and [`range.extractContents()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-extractContents) methods which now clone IDs similarly to their native counterparts.\n  * Added `cloneId` arguments to the above methods, [`range.splitBlock()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-splitBlock) and [`element.breakParent()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-breakParent). Mind the default values and special behavior in the `extractContents()` method!\n  * Fixed issues where IDs were lost on copy&paste and drag&drop.\n* Toolbar configurators:\n  * [#13185](http://dev.ckeditor.com/ticket/13185): Fixed: Wrong position of the suggestion box if there is not enough space below the caret.\n  * [#13138](http://dev.ckeditor.com/ticket/13138): Fixed: The \"Toggle empty elements\" button label is unclear.\n  * [#13136](http://dev.ckeditor.com/ticket/13136): Fixed: Autocompleter is far too intrusive.\n  * [#13133](http://dev.ckeditor.com/ticket/13133): Fixed: Tab leaves the editor.\n  * [#13173](http://dev.ckeditor.com/ticket/13173): Fixed: [`config.removeButtons`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-removeButtons) is ignored by the advanced toolbar configurator.\n\nOther Changes:\n\n* [#13119](http://dev.ckeditor.com/ticket/13119): Improved compatibility of editor skins ([Moono](http://ckeditor.com/addon/moono) and [Kama](http://ckeditor.com/addon/kama)) with external web page style sheets.\n* Toolbar configurators:\n  * [#13147](http://dev.ckeditor.com/ticket/13147): Added buttons to the sticky toolbar.\n  * [#13207](http://dev.ckeditor.com/ticket/13207): Used modal window to display toolbar configurator help.\n* [#13316](http://dev.ckeditor.com/ticket/13316): Made [`CKEDITOR.env.isCompatible`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-isCompatible) a blacklist rather than a whitelist. More about the change in the [Browser Compatibility](http://docs.ckeditor.com/#!/guide/dev_browsers) guide.\n* [#13398](http://dev.ckeditor.com/ticket/13398): Renamed `CKEDITOR.fileTools.UploadsRepository` to [`CKEDITOR.fileTools.UploadRepository`](http://docs.ckeditor.com/#!/api/CKEDITOR.fileTools.uploadRepository) and changed all related properties.\n* [#13279](http://dev.ckeditor.com/ticket/13279): Reviewed CSS vendor prefixes.\n* [#13454](http://dev.ckeditor.com/ticket/13454): Removed unused `lang.image.alertUrl` token from the [Image](http://ckeditor.com/addon/image) plugin.\n\n## CKEditor 4.5 Beta\n\nNew Features:\n\n* Clipboard (copy&paste, drag&drop) and file uploading features and improvements ([#11437](http://dev.ckeditor.com/ticket/11437)).\n\n  * Major features:\n    * Support for dropping and pasting files into the editor was introduced. Through a set of new facades for native APIs it is now possible to easily intercept and process inserted files.\n    * [File upload tools](http://docs.ckeditor.com/#!/api/CKEDITOR.fileTools) were introduced in order to simplify controlling the loading, uploading and handling server response, properly handle [new upload configuration](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-uploadUrl) options, etc.\n    * [Upload Image](http://ckeditor.com/addon/uploadimage) widget was introduced to upload dropped images. A base class for the [upload widget](http://docs.ckeditor.com/#!/api/CKEDITOR.fileTools.uploadWidgetDefinition) was exposed, too, to make it simple to create new types of upload widgets which can handle any type of dropped file, show the upload progress and update the content when the process is done. It also handles editing and undo/redo operations when a file is being uploaded and integrates with the [notification aggregator](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.notificationAggregator) to show progress and success or error.\n    * All drag and drop operations were integrated with the editor. All dropped content is passed through the [`editor#paste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-paste) event and a set of new editor events was introduced &mdash; [`dragstart`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-dragstart), [`drop`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-drop), [`dragend`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-dragend).\n    * The [Data Transfer](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.clipboard.dataTransfer) facade was introduced to unify access to data in various types and files. [Data Transfer](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.clipboard.dataTransfer) is now always available in the [`editor#paste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-paste) event.\n    * Switched from the pastebin to using the native clipboard access whenever possible. This solved many issues related to pastebin such as unnecessary scrolling or data loss. Additionally, on copy and cut from the editor the clipboard data is set. Therefore, on paste the editor has access to clean data, undisturbed by the browsers.\n    * Drag and drop of inline and block widgets was integrated with the standard clipboard APIs. By listening to drag events you will thus be notified about widgets, too. This opens a possibility to filter pasted and dropped widgets.\n    * The [`editor#paste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-paste) event can have the `range` parameter so it is possible to change the paste position in the listener or paste in the not selectable position. Also the [`editor.insertHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertHtml) method now accepts `range` as an additional parameter.\n    * [#11621](http://dev.ckeditor.com/ticket/11621): A configurable [paste filter](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFilter) was introduced. The filter is by default turned to `'semantic-content'` on Webkit and Blink for all pasted content coming from external sources because of the low quality of HTML that these engines put into the clipboard. Internal and cross-editor paste is safe due to the change explained in the previous point.\n\n  * Other changes and related fixes:\n    * [#12095](http://dev.ckeditor.com/ticket/12095): On drag and copy of widgets [the same method](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml) is used to get selected HTML as in the normal case. Thanks to that styles applied to inline widgets are not lost.\n    * [#11219](http://dev.ckeditor.com/ticket/11219): Fixed: Dragging a [captioned image](http://ckeditor.com/addon/image2) does not fire the [`editor#paste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-paste) event.\n    * [#9554](http://dev.ckeditor.com/ticket/9554): [Webkit Mac] Fixed: Editor scrolls on paste.\n    * [#9898](http://dev.ckeditor.com/ticket/9898): [Webkit&Divarea] Fixed: Pasting causes undesirable scrolling.\n    * [#11993](http://dev.ckeditor.com/ticket/11993): [Chrome] Fixed: Pasting content scrolls the document.\n    * [#12613](http://dev.ckeditor.com/ticket/12613): Show the user that they can not drop on editor UI (toolbar, bottom bar).\n    * [#12851](http://dev.ckeditor.com/ticket/12851): [Blink/Webkit] Fixed: Formatting disappears when pasting content into cells.\n    * [#12914](http://dev.ckeditor.com/ticket/12914): Fixed: Copy/Paste of table broken in `div`-based editor.\n\n  * Browser support.<br>Browser support for related features varies significantly (see http://caniuse.com/clipboard).\n    * File APIs needed to operate and file upload is not supported in Internet Explorer 9 and below.\n    * Only Chrome and Safari on Mac OS support setting custom data items in the clipboard, so currently it is possible to recognize the origin of the copied content in these browsers only. All drag and drop operations can be identified thanks to the new Data Transfer facade.\n    * No Internet Explorer browser supports the standard clipboard API which results in small glitches like where only plain text can be dropped from outside the editor. Thanks to the new Data Transfer facade, internal and cross-editor drag and drop supports the full range of data.\n    * Direct access to clipboard could only be implemented in Chrome, Safari on Mac OS, Opera and Firefox. In other browsers the pastebin must still be used.\n\n* [#12875](http://dev.ckeditor.com/ticket/12875): Samples and toolbar configuration tools.\n  * The old set of samples shipped with every CKEditor package was replaced with a shiny new single-page sample. This change concluded a long term plan which started from introducing the [CKEditor SDK](http://sdk.ckeditor.com/) and [CKEditor Functionality Overview](http://docs.ckeditor.com/#!/guide/dev_features) section in the documentation which essentially redefined the old samples.\n  * Toolbar configurators with live previews were introduced. They will be shipped with every CKEditor package and are meant to help in configuring toolbar layouts.\n\n* [#10925](http://dev.ckeditor.com/ticket/10925): The [Media Embed](http://ckeditor.com/addon/embed) and [Semantic Media Embed](http://ckeditor.com/addon/embedsemantic) plugins were introduced. Read more about the new features in the [Embedding Content](http://docs.ckeditor.com/#!/guide/dev_media_embed) article.\n* [#10931](http://dev.ckeditor.com/ticket/10931): Added support for nesting widgets. It is now possible to insert one widget into another widget's nested editable. Note that unless nested editable's [allowed content](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.nestedEditable.definition-property-allowedContent) is defined precisely, starting from CKEditor 4.5 some widget buttons may become enabled. This feature is not supported in IE8. Included issues:\n  * [#12018](http://dev.ckeditor.com/ticket/12018): Fixed and reviewed: Nested widgets garbage collection.\n  * [#12024](http://dev.ckeditor.com/ticket/12024): [Firefox] Fixed: Outline is extended to the left by unpositioned drag handlers.\n  * [#12006](http://dev.ckeditor.com/ticket/12006): Fixed: Drag and drop of nested block widgets.\n  * [#12008](http://dev.ckeditor.com/ticket/12008): Fixed various cases of inserting a single non-editable element using the [`editor.insertHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertHtml) method. Fixes pasting a widget with a nested editable inside another widget's nested editable.\n\n* Notification system:\n  * [#11580](http://dev.ckeditor.com/ticket/11580): Introduced the [notification system](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.notification).\n  * [#12810](http://dev.ckeditor.com/ticket/12810): Introduced a [notification aggregator](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.notificationAggregator) for the [notification system](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.notification) which simplifies displaying progress of many concurrent tasks.\n* [#11636](http://dev.ckeditor.com/ticket/11636): Introduced new, UX-focused, methods for getting selected HTML and deleting it &mdash; [`editor.getSelectedHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml) and [`editor.deleteSelectedHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml).\n* [#12416](http://dev.ckeditor.com/ticket/12416): Added the [`widget.definition.upcastPriority`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-upcastPriority) property which gives more control over widget upcasting order to the widget author.\n* [#12036](http://dev.ckeditor.com/ticket/12036): Initialize the editor in [read-only](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) mode when the `<textarea>` element has a `readonly` attribute.\n* [#11905](http://dev.ckeditor.com/ticket/11905): The [`resize` event](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-resize) passes the current dimensions in its data.\n* [#12126](http://dev.ckeditor.com/ticket/12126): Introduced [`config.image_prefillDimensions`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image_prefillDimensions) and [`config.image2_prefillDimensions`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_prefillDimensions) to make pre-filling `width` and `height` configurable for the [Enhanced Image](http://ckeditor.com/addon/image2).\n* [#12746](http://dev.ckeditor.com/ticket/12746): Added a new configuration option to hide the [Enhanced Image](http://ckeditor.com/addon/image2) resizer.\n* [#12150](http://dev.ckeditor.com/ticket/12150): Exposed the [`getNestedEditable()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-static-method-getNestedEditable) and `is*` [widget helper](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) functions (see the static methods).\n* [#12448](http://dev.ckeditor.com/ticket/12448): Introduced the [`editable.insertHtmlIntoRange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertHtmlIntoRange) method.\n* [#12143](http://dev.ckeditor.com/ticket/12143): Added the [`config.floatSpacePreferRight`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-floatSpacePreferRight) configuration option that switches the alignment of the floating toolbar. Thanks to [InvisibleBacon](http://github.com/InvisibleBacon)!\n* [#10986](http://dev.ckeditor.com/ticket/10986): Added support for changing dialog input and textarea text directions by using the *Shift+Alt+Home/End* keystrokes. The direction is stored in the value of the input by prepending the [`\\u202A`](http://unicode.org/cldr/utility/character.jsp?a=202A) or [`\\u202B`](http://unicode.org/cldr/utility/character.jsp?a=202B) marker to it. Read more in the [documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog.definition.textInput-property-bidi). Thanks to [edithkk](https://github.com/edithkk)!\n* [#12770](http://dev.ckeditor.com/ticket/12770): Added support for passing [widget](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget)'s startup data as a widget command's argument. Thanks to [Rebrov Boris](https://github.com/zipp3r) and [Tieme van Veen](https://github.com/tiemevanveen)!\n* [#11583](http://dev.ckeditor.com/ticket/11583): Added support for the HTML5 `required` attribute in various form elements. Thanks to [Steven Busse](https://github.com/sbusse)!\n\nChanges:\n\n* [#12858](http://dev.ckeditor.com/ticket/12858): Basic [Spartan](http://blogs.windows.com/bloggingwindows/2015/03/30/introducing-project-spartan-the-new-browser-built-for-windows-10/) browser compatibility. Full compatibility will be introduced later, because at the moment Spartan is still too unstable to be used for tests and we see many changes from version to version.\n* [#12948](http://dev.ckeditor.com/ticket/12948): The [`config.mathJaxLibrary`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-mathJaxLib) option does not default to the MathJax CDN any more. It needs to be configured to enable the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin now.\n* [#13069](http://dev.ckeditor.com/ticket/13069): Fixed inconsistencies between [`editable.insertHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElement) and [`editable.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElement) when the `range` parameter is used. Now, the `editor.insertElement()` method works on a higher level, which means that it saves undo snapshots and sets the selection after insertion. Use the [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange) method directly for the pre 4.5 behavior of `editable.insertElement()`.\n* [#12870](http://dev.ckeditor.com/ticket/12870): Use [`editor.showNotification()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-showNotification) instead of `alert()` directly whenever possible. When the [Notification plugin](http://ckeditor.com/addon/notification) is loaded, the notification system is used automatically. Otherwise, the native `alert()` is displayed.\n* [#8024](http://dev.ckeditor.com/ticket/8024): Swapped behavior of the Split Cell Vertically and Horizontally features of the [Table Tools](http://ckeditor.com/addon/tabletools) plugin to be more intuitive. Thanks to [kevinisagit](https://github.com/kevinisagit)!\n* [#10903](http://dev.ckeditor.com/ticket/10903): Performance improvements for the [`dom.element.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-addClass), [`dom.element.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeClass) and [`dom.element.hasClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-hasClass) methods. Note: The previous implementation allowed passing multiple classes to `addClass()` although it was only a side effect of that implementation. The new implementation does not allow this.\n* [#11856](http://dev.ckeditor.com/ticket/11856): The jQuery adapter throws a meaningful error if CKEditor or jQuery are not loaded.\n\nFixed issues:\n\n* [#11586](http://dev.ckeditor.com/ticket/11586): Fixed: [`range.cloneContents()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-cloneContents) should not change the DOM in order not to affect selection.\n* [#12148](http://dev.ckeditor.com/ticket/12148): Fixed: [`dom.element.getChild()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-getChild) should not modify a passed array.\n* [#12503](http://dev.ckeditor.com/ticket/12503): [Blink/Webkit] Fixed: Incorrect result of Select All and *Backspace* or *Delete*.\n* [#13001](http://dev.ckeditor.com/ticket/13001): [Firefox] Fixed: The `<br />` filler is placed in the wrong position by the [`range.fixBlock()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-fixBlock) method due to quirky Firefox behavior.\n* [#13101](http://dev.ckeditor.com/ticket/13101): [IE8] Fixed: Colons are prepended to HTML5 element names when cloning them.\n\n## CKEditor 4.4.8\n\n**Security Updates:**\n\n* Fixed XSS vulnerability in the HTML parser reported by [Dheeraj Joshi](https://twitter.com/dheerajhere) and [Prem Kumar](https://twitter.com/iAmPr3m).\n\n\tIssue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode.\n\n**An upgrade is highly recommended!**\n\nFixed Issues:\n\n* [#12899](http://dev.ckeditor.com/ticket/12899): Fixed: Corrected wrong tag ending for horizontal box definition in the [Dialog User Interface](http://ckeditor.com/addon/dialogui) plugin. Thanks to [mizafish](https://github.com/mizafish)!\n* [#13254](http://dev.ckeditor.com/ticket/13254): Fixed: Cannot outdent block after indent when using the [Div Editing Area](http://ckeditor.com/addon/divarea) plugin. Thanks to [Jonathan Cottrill](https://github.com/jcttrll)!\n* [#13268](http://dev.ckeditor.com/ticket/13268): Fixed: Documentation for [`CKEDITOR.dom.text`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.text) is incorrect. Thanks to [Ben Kiefer](https://github.com/benkiefer)!\n* [#12739](http://dev.ckeditor.com/ticket/12739): Fixed: Link loses inline styles when edited without the [Advanced Tab for Dialogs](http://ckeditor.com/addon/dialogadvtab) plugin. Thanks to [Віталій Крутько](https://github.com/asmforce)!\n* [#13292](http://dev.ckeditor.com/ticket/13292): Fixed: Protection pattern does not work in attribute in self-closing elements with no space before `/>`. Thanks to [Віталій Крутько](https://github.com/asmforce)!\n* [PR#192](https://github.com/ckeditor/ckeditor-dev/pull/192): Fixed: Variable name typo in the [Dialog User Interface](http://ckeditor.com/addon/dialogui) plugin which caused [`CKEDITOR.ui.dialog.radio`](http://docs.ckeditor.com/#!/api/CKEDITOR.ui.dialog.radio) validation to not work. Thanks to [Florian Ludwig](https://github.com/FlorianLudwig)!\n* [#13232](http://dev.ckeditor.com/ticket/13232): [Safari] Fixed: The [`element.appendText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-appendText) method does not work properly for empty elements.\n* [#13233](http://dev.ckeditor.com/ticket/13233): Fixed: [HTMLDataProcessor](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) can process `foo:href` attributes.\n* [#12796](http://dev.ckeditor.com/ticket/12796): Fixed: The [Indent List](http://ckeditor.com/addon/indentlist) plugin unwraps parent `<li>` elements. Thanks to [Andrew Stucki](https://github.com/andrewstucki)!\n* [#12885](http://dev.ckeditor.com/ticket/12885): Added missing [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) parameter documentation.\n* [#11982](http://dev.ckeditor.com/ticket/11982): Fixed: Bullet added in a wrong position after the *Enter* key is pressed in a nested list.\n* [#13027](http://dev.ckeditor.com/ticket/13027): Fixed: Keyboard navigation in dialog windows with multiple tabs not following IBM CI 162 instructions or [ARIA Authoring Practices](http://www.w3.org/TR/2013/WD-wai-aria-practices-20130307/#tabpanel).\n* [#12256](http://dev.ckeditor.com/ticket/12256): Fixed: Basic styles classes are lost when pasting from Microsoft Word if [basic styles](http://ckeditor.com/addon/basicstyles) were configured to use classes.\n* [#12729](http://dev.ckeditor.com/ticket/12729): Fixed: Incorrect structure created when merging a block into a list item on *Backspace* and *Delete*.\n* [#13031](http://dev.ckeditor.com/ticket/13031): [Firefox] Fixed: No more line breaks in source view since Firefox 36.\n* [#13131](http://dev.ckeditor.com/ticket/13131): Fixed: The [Code Snippet](http://ckeditor.com/addon/codesnippet) plugin cannot be used without the [IFrame Editing Area](http://ckeditor.com/addon/wysiwygarea) plugin.\n* [#9086](http://dev.ckeditor.com/ticket/9086): Fixed: Invalid ARIA property used on paste area `<iframe>`.\n* [#13164](http://dev.ckeditor.com/ticket/13164): Fixed: Error when inserting a hidden field.\n* [#13155](http://dev.ckeditor.com/ticket/13155): Fixed: Incorrect [Line Utilities](http://ckeditor.com/addon/lineutils) positioning when `<body>` has a margin.\n* [#13351](http://dev.ckeditor.com/ticket/13351): Fixed: Link lost when editing a linked image with the Link tab disabled. This also fixed a bug when inserting an image into a fully selected link would throw an error ([#12847](https://dev.ckeditor.com/ticket/12847)).\n* [#13344](http://dev.ckeditor.com/ticket/13344): [WebKit/Blink] Fixed: It is possible to remove or change editor content in [read-only mode](http://docs.ckeditor.com/#!/guide/dev_readonly).\n\nOther Changes:\n\n* [#12844](http://dev.ckeditor.com/ticket/12844) and [#13103](http://dev.ckeditor.com/ticket/13103): Upgraded the [testing environment](http://docs.ckeditor.com/#!/guide/dev_tests) to [Bender.js](https://github.com/benderjs/benderjs) `0.2.3`.\n* [#12930](http://dev.ckeditor.com/ticket/12930): Because of licensing issues, `truncated-mathjax/` is now removed from the `tests/` directory. Now `bender.config.mathJaxLibPath` must be configured manually in order to run [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin tests.\n* [#13266](http://dev.ckeditor.com/ticket/13266): Added more shades of gray in the [Color Dialog](http://ckeditor.com/addon/colordialog) window. Thanks to [mizafish](https://github.com/mizafish)!\n\n\n## CKEditor 4.4.7\n\nFixed Issues:\n\n* [#12825](http://dev.ckeditor.com/ticket/12825): Fixed: Preventing the [Table Resize](http://ckeditor.com/addon/tableresize) plugin from operating on elements outside the editor. Thanks to [Paul Martin](https://github.com/Paul-Martin)!\n* [#12157](http://dev.ckeditor.com/ticket/12157): Fixed: Lost text formatting on pressing *Tab* when the [`config.tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces) configuration option value was greater than zero.\n* [#12777](http://dev.ckeditor.com/ticket/12777): Fixed: The `table-layout` CSS property should be reset by skins. Thanks to [vita10gy](https://github.com/vita10gy)!\n* [#12812](http://dev.ckeditor.com/ticket/12812): Fixed: An uncaught security exception is thrown when [Line Utilities](http://ckeditor.com/addon/lineutils) are used in an inline editor loaded in a cross-domain `iframe`. Thanks to [Vitaliy Zurian](https://github.com/thecatontheflat)!\n* [#12735](http://dev.ckeditor.com/ticket/12735): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) should only apply when outputting data.\n* [#10032](http://dev.ckeditor.com/ticket/10032): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) filter is executed for every paste after using the button.\n* [#12597](http://dev.ckeditor.com/ticket/12597): [Blink/WebKit] Fixed: Multi-byte Japanese characters entry not working properly after *Shift+Enter*.\n* [#12387](http://dev.ckeditor.com/ticket/12387): Fixed: An error is thrown if a skin does not have the [`chameleon`](http://docs.ckeditor.com/#!/api/CKEDITOR.skin-method-chameleon) property defined and [`config.uiColor`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-uiColor) is defined.\n* [#12747](http://dev.ckeditor.com/ticket/12747): [IE8-10] Fixed: Opening a drop-down for a specific selection when the editor is maximized results in incorrect drop-down panel position.\n* [#12850](http://dev.ckeditor.com/ticket/12850): [IEQM] Fixed: An error is thrown after focusing the editor.\n\n## CKEditor 4.4.6\n\n**Security Updates:**\n\n* Fixed XSS vulnerability in the HTML parser reported by [Maco Cortes](https://www.facebook.com/Maaacoooo).\n\n\tIssue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode.\n\n**An upgrade is highly recommended!**\n\nNew Features:\n\n* [#12501](http://dev.ckeditor.com/ticket/12501): Allowed dashes in element names in the [string format of allowed content rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules-section-string-format).\n* [#12550](http://dev.ckeditor.com/ticket/12550): Added the `<main>` element to the [`CKEDITOR.dtd`](http://docs.ckeditor.com/#!/api/CKEDITOR.dtd).\n\nFixed Issues:\n\n* [#12506](http://dev.ckeditor.com/ticket/12506): [Safari] Fixed: Cannot paste into inline editor if the page has `user-select: none` style. Thanks to [shaohua](https://github.com/shaohua)!\n* [#12683](http://dev.ckeditor.com/ticket/12683): Fixed: [Filter](http://docs.ckeditor.com/#!/guide/dev_acf) fails to remove custom tags. Thanks to [timselier](https://github.com/timselier)!\n* [#12489](http://dev.ckeditor.com/ticket/12489) and [#12491](http://dev.ckeditor.com/ticket/12491): Fixed: Various issues related to restoring the selection after performing operations on filler character. See the [fixed cases](http://dev.ckeditor.com/ticket/12491#comment:4).\n* [#12621](http://dev.ckeditor.com/ticket/12621): Fixed: Cannot remove inline styles (bold, italic, etc.) in empty lines.\n* [#12630](http://dev.ckeditor.com/ticket/12630): [Chrome] Fixed: Selection is placed outside the paragraph when the [New Page](http://ckeditor.com/addon/newpage) button is clicked. This patch significantly simplified the way how the initial selection (a selection after the content of the editable is overwritten) is being fixed. That might have fixed many related scenarios in all browsers.\n* [#11647](http://dev.ckeditor.com/ticket/11647): Fixed: The [`editor.blur`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-blur) event is not fired on first blur after initializing the inline editor on an already focused element.\n* [#12601](http://dev.ckeditor.com/ticket/12601): Fixed: [Strikethrough](http://ckeditor.com/addon/basicstyles) button tooltip spelling.\n* [#12546](http://dev.ckeditor.com/ticket/12546): Fixed: The Preview tab in the [Document Properties](http://ckeditor.com/addon/docprops) dialog window is always disabled.\n* [#12300](http://dev.ckeditor.com/ticket/12300): Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event fired on first navigation key press after typing.\n* [#12141](http://dev.ckeditor.com/ticket/12141): Fixed: List items are lost when indenting a list item with content wrapped with a block element.\n* [#12515](http://dev.ckeditor.com/ticket/12515): Fixed: Cursor is in the wrong position when undoing after adding an image and typing some text.\n* [#12484](http://dev.ckeditor.com/ticket/12484): [Blink/WebKit] Fixed: DOM is changed outside the editor area in a certain case.\n* [#12688](http://dev.ckeditor.com/ticket/12688): Improved the tests of the [styles system](http://docs.ckeditor.com/#!/api/CKEDITOR.style) and fixed two minor issues.\n* [#12403](http://dev.ckeditor.com/ticket/12403): Fixed: Changing the [font](http://ckeditor.com/addon/font) style should not lead to nesting it in the previous style element.\n* [#12609](http://dev.ckeditor.com/ticket/12609): Fixed: Incorrect `config.magicline_putEverywhere` name used for a [Magic Line](http://ckeditor.com/addon/magicline) all-encompassing [`config.magicline_everywhere`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-magicline_everywhere) configuration option.\n\n\n## CKEditor 4.4.5\n\nNew Features:\n\n* [#12279](http://dev.ckeditor.com/ticket/12279): Added a possibility to pass a custom evaluator to [`node.getAscendant()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.node-method-getAscendant).\n\nFixed Issues:\n\n* [#12423](http://dev.ckeditor.com/ticket/12423): [Safari7.1+] Fixed: *Enter* key moved cursor to a strange position.\n* [#12381](http://dev.ckeditor.com/ticket/12381): [iOS] Fixed: Selection issue. Thanks to [Remiremi](https://github.com/Remiremi)!\n* [#10804](http://dev.ckeditor.com/ticket/10804): Fixed: `CKEDITOR_GETURL` is not used with some plugins where it should be used. Thanks to [Thomas Andraschko](https://github.com/tandraschko)!\n* [#9137](http://dev.ckeditor.com/ticket/9137): Fixed: The `<base>` tag is not created when `<head>` has an attribute. Thanks to [naoki.fujikawa](https://github.com/naoki-fujikawa)!\n* [#12377](http://dev.ckeditor.com/ticket/12377): Fixed: Errors thrown in the [Image](http://ckeditor.com/addon/image) plugin when removing preview from the dialog window definition. Thanks to [Axinet](https://github.com/Axinet)!\n* [#12162](http://dev.ckeditor.com/ticket/12162): Fixed: Auto paragraphing and *Enter* key in nested editables.\n* [#12315](http://dev.ckeditor.com/ticket/12315): Fixed: Marked [`config.autoParagraph`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoParagraph) as deprecated.\n* [#12113](http://dev.ckeditor.com/ticket/12113): Fixed: A [code snippet](http://ckeditor.com/addon/codesnippet) should be presented in the [elements path](http://ckeditor.com/addon/elementspath) as \"code snippet\" (translatable).\n* [#12311](http://dev.ckeditor.com/ticket/12311): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) should also remove `<cite>` elements.\n* [#12261](http://dev.ckeditor.com/ticket/12261): Fixed: Filter has to be destroyed and removed from [`CKEDITOR.filter.instances`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-static-property-instances) on editor destroy.\n* [#12398](http://dev.ckeditor.com/ticket/12398): Fixed: [Maximize](http://ckeditor.com/addon/maximize) does not work on an instance without a [title](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title).\n* [#12097](http://dev.ckeditor.com/ticket/12097): Fixed: JAWS not reading the number of options correctly in the [Text Color and Background Color](http://ckeditor.com/addon/colorbutton) button menu.\n* [#12411](http://dev.ckeditor.com/ticket/12411): Fixed: [Page Break](http://ckeditor.com/addon/pagebreak) used directly in the editable breaks the editor.\n* [#12354](http://dev.ckeditor.com/ticket/12354): Fixed: Various issues in undo manager when holding keys.\n* [#12324](http://dev.ckeditor.com/ticket/12324): [IE8] Fixed: Undo steps are not recorded when changing the caret position by clicking below the body.\n* [#12332](http://dev.ckeditor.com/ticket/12332): Fixed: Lowered DOM events listeners' priorities in undo manager in order to avoid ambiguity.\n* [#12402](http://dev.ckeditor.com/ticket/12402): [Blink] Fixed: Workaround for Blink bug with `document.title` which breaks updating title in the full HTML mode.\n* [#12338](http://dev.ckeditor.com/ticket/12338): Fixed: The CKEditor package contains unoptimized images.\n\n\n## CKEditor 4.4.4\n\nFixed Issues:\n\n* [#12268](http://dev.ckeditor.com/ticket/12268): Cleanup of [UI Color](http://ckeditor.com/addon/uicolor) YUI styles. Thanks to [CasherWest](https://github.com/CasherWest)!\n* [#12263](http://dev.ckeditor.com/ticket/12263): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) filter does not properly normalize semicolons style text. Thanks to [Alin Purcaru](https://github.com/mesmerizero)!\n* [#12243](http://dev.ckeditor.com/ticket/12243): Fixed: Text formatting lost when pasting from Word. Thanks to [Alin Purcaru](https://github.com/mesmerizero)!\n* [#111739](http://dev.ckeditor.com/ticket/11739): Fixed: `keypress` listeners should not be used in the undo manager. A complete rewrite of keyboard handling in the undo manager was made. Numerous smaller issues were fixed, among others:\n  * [#10926](http://dev.ckeditor.com/ticket/10926): [Chrome@Android] Fixed: Typing does not record snapshots and does not fire the [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event.\n  * [#11611](http://dev.ckeditor.com/ticket/11611): [Firefox] Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event is fired when pressing Arrow keys.\n  * [#12219](http://dev.ckeditor.com/ticket/12219): [Safari] Fixed: Some modifications of the [`UndoManager.locked`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-property-locked) property violate strict mode in the [Undo](http://ckeditor.com/addon/undo) plugin.\n* [#10916](http://dev.ckeditor.com/ticket/10916): Fixed: [Magic Line](http://ckeditor.com/addon/magicline) icon in Right-To-Left environments.\n* [#11970](http://dev.ckeditor.com/ticket/11970): [IE] Fixed: CKEditor `paste` event is not fired when pasting with *Shift+Ins*.\n* [#12111](http://dev.ckeditor.com/ticket/12111): Fixed: Linked image attributes are not read when opening the image dialog window by doubleclicking.\n* [#10030](http://dev.ckeditor.com/ticket/10030): [IE] Fixed: Prevented \"Unspecified Error\" thrown in various cases when IE8-9 does not allow access to `document.activeElement`.\n* [#12273](http://dev.ckeditor.com/ticket/12273): Fixed: Applying block style in a description list breaks it.\n* [#12218](http://dev.ckeditor.com/ticket/12218): Fixed: Minor syntax issue in CSS files.\n* [#12178](http://dev.ckeditor.com/ticket/12178): [Blink/WebKit] Fixed: Iterator does not return the block if the selection is located at the end of it.\n* [#12185](http://dev.ckeditor.com/ticket/12185): [IE9QM] Fixed: Error thrown when moving the mouse over focused editor's scrollbar.\n* [#12215](http://dev.ckeditor.com/ticket/12215): Fixed: Basepath resolution does not recognize semicolon as a query separator.\n* [#12135](http://dev.ckeditor.com/ticket/12135): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) does not work on widgets.\n* [#12298](http://dev.ckeditor.com/ticket/12298): [IE11] Fixed: Clicking below `<body>` in Compatibility Mode will no longer reset selection to the first line.\n* [#12204](http://dev.ckeditor.com/ticket/12204): Fixed: Editor's voice label is not affected by [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title).\n* [#11915](http://dev.ckeditor.com/ticket/11915): Fixed: With [SCAYT](http://ckeditor.com/addon/scayt) enabled, cursor moves to the beginning of the first highlighted, misspelled word after typing or pasting into the editor.\n* [SCAYT](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/69): Fixed: Error thrown in the console after enabling [SCAYT](http://ckeditor.com/addon/scayt) and trying to add a new image.\n\n\nOther Changes:\n\n* [#12296](http://dev.ckeditor.com/ticket/12296): Merged `benderjs-ckeditor` into the main CKEditor repository.\n\n## CKEditor 4.4.3\n\n**Security Updates:**\n\n* Fixed XSS vulnerability in the Preview plugin reported by Mario Heiderich of [Cure53](https://cure53.de/).\n\n**An upgrade is highly recommended!**\n\nNew Features:\n\n* [#12164](http://dev.ckeditor.com/ticket/12164): Added the \"Justify\" option to the \"Horizontal Alignment\" drop-down in the Table Cell Properties dialog window.\n\nFixed Issues:\n\n* [#12110](http://dev.ckeditor.com/ticket/12110): Fixed: Editor crash after deleting a table. Thanks to [Alin Purcaru](https://github.com/mesmerizero)!\n* [#11897](http://dev.ckeditor.com/ticket/11897): Fixed: *Enter* key used in an empty list item creates a new line instead of breaking the list. Thanks to [noam-si](https://github.com/noam-si)!\n* [#12140](http://dev.ckeditor.com/ticket/12140): Fixed: Double-clicking linked widgets opens two dialog windows.\n* [#12132](http://dev.ckeditor.com/ticket/12132): Fixed: Image is inserted with `width` and `height` styles even when they are not allowed.\n* [#9317](http://dev.ckeditor.com/ticket/9317): [IE] Fixed: [`config.disableObjectResizing`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-disableObjectResizing) does not work on IE. **Note**: We were not able to fix this issue on IE11+ because necessary events stopped working. See a [last resort workaround](http://dev.ckeditor.com/ticket/9317#comment:16) and make sure to [support our complaint to Microsoft](https://connect.microsoft.com/IE/feedback/details/742593/please-respect-execcommand-enableobjectresizing-in-contenteditable-elements).\n* [#9638](http://dev.ckeditor.com/ticket/9638): Fixed: There should be no information about accessibility help available under the *Alt+0* keyboard shortcut if the [Accessibility Help](http://ckeditor.com/addon/a11yhelp) plugin is not available.\n* [#8117](http://dev.ckeditor.com/ticket/8117) and [#9186](http://dev.ckeditor.com/ticket/9186): Fixed: In HTML5 `<meta>` tags should be allowed everywhere, including inside the `<body>` element.\n* [#10422](http://dev.ckeditor.com/ticket/10422): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) not working properly if a function is specified.\n\n## CKEditor 4.4.2\n\nImportant Notes:\n\n* The CKEditor testing environment is now publicly available. Read more about how to set up the environment and execute tests in the [CKEditor Testing Environment](http://docs.ckeditor.com/#!/guide/dev_tests) guide.\n\tPlease note that the [`tests/`](https://github.com/ckeditor/ckeditor-dev/tree/master/tests) directory which contains editor tests is not available in release packages. It can only be found in the development version of CKEditor on [GitHub](https://github.com/ckeditor/ckeditor-dev/).\n\nNew Features:\n\n* [#11909](http://dev.ckeditor.com/ticket/11909): Introduced a parameter to prevent the [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) method from recording undo snapshots.\n\nFixed Issues:\n\n* [#11757](http://dev.ckeditor.com/ticket/11757): Fixed: Imperfections in the [Moono](http://ckeditor.com/addon/moono) skin. Thanks to [danyaPostfactum](https://github.com/danyaPostfactum)!\n* [#10091](http://dev.ckeditor.com/ticket/10091): Blockquote should be treated like an object by the styles system. Thanks to [dan-james-deeson](https://github.com/dan-james-deeson)!\n* [#11478](http://dev.ckeditor.com/ticket/11478): Fixed: Issue with passing jQuery objects to [adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) configuration.\n* [#10867](http://dev.ckeditor.com/ticket/10867): Fixed: Issue with setting encoded URI as image link.\n* [#11983](http://dev.ckeditor.com/ticket/11983): Fixed: Clicking a nested widget does not focus it. Additionally, performance of the [`widget.repository.getByElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-getByElement) method was improved.\n* [#12000](http://dev.ckeditor.com/ticket/12000): Fixed: Nested widgets should be initialized on [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) and [`nestedEditable.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.nestedEditable-method-setData).\n* [#12022](http://dev.ckeditor.com/ticket/12022): Fixed: Outer widget's drag handler is not created at all if it has any nested widgets inside.\n* [#11960](http://dev.ckeditor.com/ticket/11960): [Blink/WebKit] Fixed: The caret should be scrolled into view on *Backspace* and *Delete* (covers only the merging blocks case).\n* [#11306](http://dev.ckeditor.com/ticket/11306): [OSX][Blink/WebKit] Fixed: No widget entries in the context menu on widget right-click.\n* [#11957](http://dev.ckeditor.com/ticket/11957): Fixed: Alignment labels in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window are not translated.\n* [#11980](http://dev.ckeditor.com/ticket/11980): [Blink/WebKit] Fixed: `<span>` elements created when joining adjacent elements (non-collapsed selection).\n* [#12009](http://dev.ckeditor.com/ticket/12009): [Nested widgets] Integration with the [Magic Line](http://ckeditor.com/addon/magicline) plugin.\n* [#11387](http://dev.ckeditor.com/ticket/11387): Fixed: `role=\"radiogroup\"` should be applied only to radio inputs' container.\n* [#7975](http://dev.ckeditor.com/ticket/7975): [IE8] Fixed: Errors when trying to select an empty table cell.\n* [#11947](http://dev.ckeditor.com/ticket/11947): [Firefox+IE11] Fixed: *Shift+Enter* in lists produces two line breaks.\n* [#11972](http://dev.ckeditor.com/ticket/11972): Fixed: Feature detection in the [`element.setText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-setText) method should not trigger the layout engine.\n* [#7634](http://dev.ckeditor.com/ticket/7634): Fixed: The [Flash Dialog](http://ckeditor.com/addon/flash) plugin omits the `allowFullScreen` parameter in the editor data if set to `true`.\n* [#11910](http://dev.ckeditor.com/ticket/11910): Fixed: [Enhanced Image](http://ckeditor.com/addon/image2) does not take [`config.baseHref`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-baseHref) into account when updating image dimensions.\n* [#11753](http://dev.ckeditor.com/ticket/11753): Fixed: Wrong [`checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method value after focusing or blurring a widget.\n* [#11830](http://dev.ckeditor.com/ticket/11830): Fixed: Impossible to pass some arguments to [CKBuilder](https://github.com/ckeditor/ckbuilder) when using the `/dev/builder/build.sh` script.\n* [#11945](http://dev.ckeditor.com/ticket/11945): Fixed: [Form Elements](http://ckeditor.com/addon/forms) plugin should not change a core method.\n* [#11384](http://dev.ckeditor.com/ticket/11384): [IE9+] Fixed: `IndexSizeError` thrown when pasting into a non-empty selection anchored in one text node.\n\n## CKEditor 4.4.1\n\nNew Features:\n\n* [#9661](http://dev.ckeditor.com/ticket/9661): Added the option to [configure](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-linkJavaScriptLinksAllowed) anchor tags with JavaScript code in the `href` attribute.\n\nFixed Issues:\n\n* [#11861](http://dev.ckeditor.com/ticket/11861): [WebKit/Blink] Fixed: Span elements created while joining adjacent elements. **Note:** This patch only covers cases when *Backspace* or *Delete* is pressed on a collapsed (empty) selection. The remaining case, with a non-empty selection, will be fixed in the next release.\n* [#10714](http://dev.ckeditor.com/ticket/10714): [iOS] Fixed: Selection and drop-downs are broken if a touch event listener is used due to a [WebKit bug](https://bugs.webkit.org/show_bug.cgi?id=128924). Thanks to [Arty Gus](https://github.com/artygus)!\n* [#11911](http://dev.ckeditor.com/ticket/11911): Fixed setting the `dir` attribute for a preloaded language in [CKEDITOR.lang](http://docs.ckeditor.com/#!/api/CKEDITOR.lang). Thanks to [Akash Mohapatra](https://github.com/akashmohapatra)!\n* [#11926](http://dev.ckeditor.com/ticket/11926): Fixed: [Code Snippet](http://ckeditor.com/addon/codesnippet) does not decode HTML entities when loading code from the `<code>` element.\n* [#11223](http://dev.ckeditor.com/ticket/11223): Fixed: Issue when [Protected Source](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-protectedSource) was not working in the `<title>` element.\n* [#11859](http://dev.ckeditor.com/ticket/11859): Fixed: Removed the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin dependency from the [Code Snippet](http://ckeditor.com/addon/codesnippet) sample.\n* [#11754](http://dev.ckeditor.com/ticket/11754): [Chrome] Fixed: Infinite loop when content includes not closed attributes.\n* [#11848](http://dev.ckeditor.com/ticket/11848): [IE] Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) throwing an exception when there was no selection in the editor.\n* [#11801](http://dev.ckeditor.com/ticket/11801): Fixed: Editor anchors unavailable when linking the [Enhanced Image](http://ckeditor.com/addon/image2) widget.\n* [#11626](http://dev.ckeditor.com/ticket/11626): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) sets invalid column width.\n* [#11872](http://dev.ckeditor.com/ticket/11872): Made [`element.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-addClass) chainable symmetrically to [`element.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeClass).\n* [#11813](http://dev.ckeditor.com/ticket/11813): Fixed: Link lost while pasting a captioned image and restoring an undo snapshot ([Enhanced Image](http://ckeditor.com/addon/image2)).\n* [#11814](http://dev.ckeditor.com/ticket/11814): Fixed: _Link_ and _Unlink_ entries persistently displayed in the [Enhanced Image](http://ckeditor.com/addon/image2) context menu.\n* [#11839](http://dev.ckeditor.com/ticket/11839): [IE9] Fixed: The caret jumps out of the editable area when resizing the editor in the source mode.\n* [#11822](http://dev.ckeditor.com/ticket/11822): [WebKit] Fixed: Editing anchors by double-click is broken in some cases.\n* [#11823](http://dev.ckeditor.com/ticket/11823): [IE8] Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) throws an error over scrollbar.\n* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: It is not possible to change the language back to _Not set_ in the [Code Snippet](http://ckeditor.com/addon/codesnippet) dialog window.\n* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: [Filter](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied inside elements with the `contenteditable` attribute set to `true`.\n* [#11798](http://dev.ckeditor.com/ticket/11798): Fixed: Inserting a non-editable element inside a table cell breaks the table.\n* [#11793](http://dev.ckeditor.com/ticket/11793): Fixed: Drop-down is not \"on\" when clicking it while the editor is blurred.\n* [#11850](http://dev.ckeditor.com/ticket/11850): Fixed: Fake objects with the `contenteditable` attribute set to `false` are not downcasted properly.\n* [#11811](http://dev.ckeditor.com/ticket/11811): Fixed: Widget's data is not encoded correctly when passed to an attribute.\n* [#11777](http://dev.ckeditor.com/ticket/11777): Fixed encoding ampersand in the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin.\n* [#11880](http://dev.ckeditor.com/ticket/11880): [IE8-9] Fixed: Linked image has a default thick border.\n\nOther Changes:\n\n* [#11807](http://dev.ckeditor.com/ticket/11807): Updated jQuery version used in the sample to 1.11.0 and tested CKEditor jQuery Adapter with version 1.11.0 and 2.1.0.\n* [#9504](http://dev.ckeditor.com/ticket/9504): Stopped using deprecated `attribute.specified` in all browsers except Internet Explorer.\n* [#11809](http://dev.ckeditor.com/ticket/11809): Changed tab size in `<pre>` to 4 spaces.\n\n## CKEditor 4.4\n\n**Important Notes:**\n\n* Marked the [`editor.beforePaste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-beforePaste) event as deprecated.\n* The default class of captioned images has changed to `image` (was: `caption`). Please note that once edited in CKEditor 4.4+, all existing images of the `caption` class (`<figure class=\"caption\">`) will be [filtered out](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) unless the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option is set to `caption`. For backward compatibility (i.e. when upgrading), it is highly recommended to use this setting, which also helps prevent CSS conflicts, etc. This does not apply to new CKEditor integrations.\n* Widgets without defined buttons are no longer registered automatically to the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). Before CKEditor 4.4 widgets were registered to the ACF which was an incorrect behavior ([#11567](http://dev.ckeditor.com/ticket/11567)). This change should not have any impact on standard scenarios, but if your button does not execute the widget command, you need to set [`allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-allowedContent) and [`requiredContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-requiredContent) properties for it manually, because the editor will not be able to find them.\n* The [Show Borders](http://ckeditor.com/addon/showborders) plugin was added to the Standard installation package in order to ensure that unstyled tables are still visible for the user ([#11665](http://dev.ckeditor.com/ticket/11665)).\n* Since CKEditor 4.4 the editor instance should be passed to [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) methods to ensure full compatibility with other features (e.g. applying styles to widgets requires that). We ensured backward compatibility though, so the [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) will work even when the editor instance is not provided.\n\nNew Features:\n\n* [#11297](http://dev.ckeditor.com/ticket/11297): Styles can now be applied to widgets. The definition of a style which can be applied to a specific widget must contain two additional properties &mdash; `type` and `widget`. Read more in the [Widget Styles](http://docs.ckeditor.com/#!/guide/dev_styles-section-widget-styles) section of the \"Syles Drop-down\" guide. Note that by default, widgets support only classes and no other attributes or styles. Related changes and features:\n  * Introduced the [`CKEDITOR.style.addCustomHandler()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-static-method-addCustomHandler) method for registering custom style handlers.\n  * The [`CKEDITOR.style.apply()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-apply) and [`CKEDITOR.style.remove()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-remove) methods are now called with an editor instance instead of the document so they can be reused by the [`CKEDITOR.editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) and [`CKEDITOR.editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) methods. Backward compatibility was preserved, but from CKEditor 4.4 it is highly recommended to pass an editor instead of a document to these methods.\n  * Many new methods and properties were introduced in the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) to make the handling of styles by widgets fully customizable. See: [`widget.definition.styleableElements`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleableElements), [`widget.definition.styleToAllowedContentRule`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleToAllowedContentRules), [`widget.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-addClass), [`widget.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeClass), [`widget.getClasses()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-getClasses), [`widget.hasClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-hasClass), [`widget.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-applyStyle), [`widget.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeStyle), [`widget.checkStyleActive()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-checkStyleActive).\n  * Integration with the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) required an introduction of the [`CKEDITOR.style.toAllowedContent()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-toAllowedContentRules) method which can be implemented by the custom style handler and if exists, it is used by the [`CKEDITOR.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter) to translate a style to [allowed content rules](http://docs.ckeditor.com/#!/api/CKEDITOR.filter.allowedContentRules).\n* [#11300](http://dev.ckeditor.com/ticket/11300): Various changes in the [Enhanced Image](http://ckeditor.com/addon/image2) plugin:\n  * Introduced the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option to configure the class of captioned images.\n  * Introduced the [`config.image2_alignClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_alignClasses) option to configure the way images are aligned with CSS classes.\n  If this setting is defined, the editor produces classes instead of inline styles for aligned images.\n  * Default image caption can be translated (customized) with the `editor.lang.image2.captionPlaceholder` string.\n* [#11341](http://dev.ckeditor.com/ticket/11341): [Enhanced Image](http://ckeditor.com/addon/image2) plugin: It is now possible to add a link to any image type.\n* [#10202](http://dev.ckeditor.com/ticket/10202): Introduced wildcard support in the [Allowed Content Rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) format.\n* [#10276](http://dev.ckeditor.com/ticket/10276): Introduced blacklisting in the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter).\n* [#10480](http://dev.ckeditor.com/ticket/10480): Introduced code snippets with code highlighting. There are two versions available so far &mdash; the default [Code Snippet](http://ckeditor.com/addon/codesnippet) which uses the [highlight.js](http://highlightjs.org) library and the [Code Snippet GeSHi](http://ckeditor.com/addon/codesnippetgeshi) which uses the [GeSHi](http://qbnz.com/highlighter/) library.\n* [#11737](http://dev.ckeditor.com/ticket/11737): Introduced an option to prevent [filtering](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) of an element that matches custom criteria (see [`filter.addElementCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-method-addElementCallback)).\n* [#11532](http://dev.ckeditor.com/ticket/11532): Introduced the [`editor.addContentsCss()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addContentsCss) method that can be used for [adding custom CSS files](http://docs.ckeditor.com/#!/guide/plugin_sdk_styles).\n* [#11536](http://dev.ckeditor.com/ticket/11536): Added the [`CKEDITOR.tools.htmlDecode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlDecode) method for decoding HTML entities.\n* [#11225](http://dev.ckeditor.com/ticket/11225): Introduced the [`CKEDITOR.tools.transparentImageData`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-property-transparentImageData) property which contains transparent image data to be used in CSS or as image source.\n\nOther Changes:\n\n* [#11377](http://dev.ckeditor.com/ticket/11377): Unified internal representation of empty anchors using the [fake objects](http://ckeditor.com/addon/fakeobjects).\n* [#11422](http://dev.ckeditor.com/ticket/11422): Removed Firefox 3.x, Internet Explorer 6 and Opera 12.x leftovers in code.\n* [#5217](http://dev.ckeditor.com/ticket/5217): Setting data (including switching between modes) creates a new undo snapshot. Besides that:\n  * Introduced the [`editable.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-property-status) property.\n  * Introduced a new `forceUpdate` option for the [`editor.lockSnapshot`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-lockSnapshot) event.\n  * Fixed: Selection not being unlocked in inline editor after setting data ([#11500](http://dev.ckeditor.com/ticket/11500)).\n* The [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin was updated to the latest version.\n\nFixed Issues:\n\n* [#10190](http://dev.ckeditor.com/ticket/10190): Fixed: Removing block style with [`editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) should result in a paragraph and not a div.\n* [#11727](http://dev.ckeditor.com/ticket/11727): Fixed: The editor tries to select a non-editable image which was clicked.\n\n## CKEditor 4.3.5\n\nNew Features:\n\n* Added new translation: Tatar.\n\nFixed Issues:\n\n* [#11677](http://dev.ckeditor.com/ticket/11677): Fixed: Undo/Redo keystrokes are blocked in the source mode.\n* [#11717](http://dev.ckeditor.com/ticket/11717): [Document Properties](http://ckeditor.com/addon/docprops) plugin requires the [Color Dialog](http://ckeditor.com/addon/colordialog) plugin to work.\n\n## CKEditor 4.3.4\n\nFixed Issues:\n\n* [#11597](http://dev.ckeditor.com/ticket/11597): [IE11] Fixed: Error thrown when trying to open the [preview](http://ckeditor.com/addon/preview) using the keyboard.\n* [#11544](http://dev.ckeditor.com/ticket/11544): [Placeholders](http://ckeditor.com/addon/placeholder) will no longer be upcasted in parents not accepting `<span>` elements.\n* [#8663](http://dev.ckeditor.com/ticket/8663): Fixed [`element.renameNode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-renameNode) not clearing the [`element.getName()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-getName) cache.\n* [#11574](http://dev.ckeditor.com/ticket/11574): Fixed: *Backspace* destroying the DOM structure if an inline editable is placed in a list item.\n* [#11603](http://dev.ckeditor.com/ticket/11603): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) attaches to tables outside the editable.\n* [#9205](http://dev.ckeditor.com/ticket/9205), [#7805](http://dev.ckeditor.com/ticket/7805), [#8216](http://dev.ckeditor.com/ticket/8216): Fixed: `{cke_protected_1}` appearing in data in various cases where HTML comments are placed next to `\"` or `'`.\n* [#11635](http://dev.ckeditor.com/ticket/11635): Fixed: Some attributes are not protected before the content is passed through the fix bin.\n* [#11660](http://dev.ckeditor.com/ticket/11660): [IE] Fixed: Table content is lost when some extra markup is inside the table.\n* [#11641](http://dev.ckeditor.com/ticket/11641): Fixed: Switching between modes in the classic editor removes content styles for the inline editor.\n* [#11568](http://dev.ckeditor.com/ticket/11568): Fixed: [Styles](http://ckeditor.com/addon/stylescombo) drop-down list is not enabled on selection change.\n\n## CKEditor 4.3.3\n\nFixed Issues:\n\n* [#11500](http://dev.ckeditor.com/ticket/11500): [WebKit/Blink] Fixed: Selection lost when setting data in another inline editor. Additionally, [`selection.removeAllRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-removeAllRanges) is now scoped to selection's [root](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-property-root).\n* [#11104](http://dev.ckeditor.com/ticket/11104): [IE] Fixed: Various issues with scrolling and selection when focusing widgets.\n* [#11487](http://dev.ckeditor.com/ticket/11487): Moving mouse over the [Enhanced Image](http://ckeditor.com/addon/image2) widget will no longer change the value returned by the [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method.\n* [#8673](http://dev.ckeditor.com/ticket/8673): [WebKit] Fixed: Cannot select and remove the [Page Break](http://ckeditor.com/addon/pagebreak).\n* [#11413](http://dev.ckeditor.com/ticket/11413): Fixed: Incorrect [`editor.execCommand()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand) behavior.\n* [#11438](http://dev.ckeditor.com/ticket/11438): Splitting table cells vertically is no longer changing table structure.\n* [#8899](http://dev.ckeditor.com/ticket/8899): Fixed: Links in the [About CKEditor](http://ckeditor.com/addon/about) dialog window now open in a new browser window or tab.\n* [#11490](http://dev.ckeditor.com/ticket/11490): Fixed: [Menu button](http://ckeditor.com/addon/menubutton) panel not showing in the source mode.\n* [#11417](http://dev.ckeditor.com/ticket/11417): The [`widget.doubleclick`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-event-doubleclick) event is not canceled anymore after editing was triggered.\n* [#11253](http://dev.ckeditor.com/ticket/11253): [IE] Fixed: Clipped upload button in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window.\n* [#11359](http://dev.ckeditor.com/ticket/11359): Standardized the way anchors are discovered by the [Link](http://ckeditor.com/addon/link) plugin.\n* [#11058](http://dev.ckeditor.com/ticket/11058): [IE8] Fixed: Error when deleting a table row.\n* [#11508](http://dev.ckeditor.com/ticket/11508): Fixed: [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) discovering protected attributes within other attributes' values.\n* [#11533](http://dev.ckeditor.com/ticket/11533): Widgets: Avoid recurring upcasts if the DOM structure was modified during an upcast.\n* [#11400](http://dev.ckeditor.com/ticket/11400): Fixed: The [`domObject.removeAllListeners()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.domObject-method-removeAllListeners) method does not remove custom listeners completely.\n* [#11493](http://dev.ckeditor.com/ticket/11493): Fixed: The [`selection.getRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-getRanges) method does not override cached ranges when used with the `onlyEditables` argument.\n* [#11390](http://dev.ckeditor.com/ticket/11390): [IE] All [XML](http://ckeditor.com/addon/xml) plugin [methods](http://docs.ckeditor.com/#!/api/CKEDITOR.xml) now work in IE10+.\n* [#11542](http://dev.ckeditor.com/ticket/11542): [IE11] Fixed: Blurry toolbar icons when Right-to-Left UI language is set.\n* [#11504](http://dev.ckeditor.com/ticket/11504): Fixed: When [`config.fullPage`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fullPage) is set to `true`, entities are not encoded in editor output.\n* [#11004](http://dev.ckeditor.com/ticket/11004): Integrated [Enhanced Image](http://ckeditor.com/addon/image2) dialog window with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter).\n* [#11439](http://dev.ckeditor.com/ticket/11439): Fixed: Properties get cloned in the Cell Properties dialog window if multiple cells are selected.\n\n## CKEditor 4.3.2\n\nFixed Issues:\n\n* [#11331](http://dev.ckeditor.com/ticket/11331): A menu button will have a changed label when selected instead of using the `aria-pressed` attribute.\n* [#11177](http://dev.ckeditor.com/ticket/11177): Widget drag handler improvements:\n  * [#11176](http://dev.ckeditor.com/ticket/11176): Fixed: Initial position is not updated when the widget data object is empty.\n  * [#11001](http://dev.ckeditor.com/ticket/11001): Fixed: Multiple synchronous layout recalculations are caused by initial drag handler positioning causing performance issues.\n  * [#11161](http://dev.ckeditor.com/ticket/11161): Fixed: Drag handler is not repositioned in various situations.\n  * [#11281](http://dev.ckeditor.com/ticket/11281): Fixed: Drag handler and mask are duplicated after widget reinitialization.\n* [#11207](http://dev.ckeditor.com/ticket/11207): [Firefox] Fixed: Misplaced [Enhanced Image](http://ckeditor.com/addon/image2) resizer in the inline editor.\n* [#11102](http://dev.ckeditor.com/ticket/11102): `CKEDITOR.template` improvements:\n  * [#11102](http://dev.ckeditor.com/ticket/11102): Added newline character support.\n  * [#11216](http://dev.ckeditor.com/ticket/11216): Added \"\\\\'\" substring support.\n* [#11121](http://dev.ckeditor.com/ticket/11121): [Firefox] Fixed: High Contrast mode is enabled when the editor is loaded in a hidden iframe.\n* [#11350](http://dev.ckeditor.com/ticket/11350): The default value of [`config.contentsCss`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-contentsCss) is affected by [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl).\n* [#11097](http://dev.ckeditor.com/ticket/11097): Improved the [Autogrow](http://ckeditor.com/addon/autogrow) plugin performance when dealing with very big tables.\n* [#11290](http://dev.ckeditor.com/ticket/11290): Removed redundant code in the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin.\n* [#11133](http://dev.ckeditor.com/ticket/11133): [Page Break](http://ckeditor.com/addon/pagebreak) becomes editable if pasted.\n* [#11126](http://dev.ckeditor.com/ticket/11126): Fixed: Native Undo executed once the bottom of the snapshot stack is reached.\n* [#11131](http://dev.ckeditor.com/ticket/11131): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Error thrown when switching to source mode if the selection was in widget's nested editable.\n* [#11139](http://dev.ckeditor.com/ticket/11139): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Elements Path is not cleared after switching to source mode.\n* [#10778](http://dev.ckeditor.com/ticket/10778): Fixed a bug with range enlargement. The range no longer expands to visible whitespace.\n* [#11146](http://dev.ckeditor.com/ticket/11146): [IE] Fixed: Preview window switches Internet Explorer to Quirks Mode.\n* [#10762](http://dev.ckeditor.com/ticket/10762): [IE] Fixed: JavaScript code displayed in preview window's URL bar.\n* [#11186](http://dev.ckeditor.com/ticket/11186): Introduced the [`widgets.repository.addUpcastCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-addUpcastCallback) method that allows to block upcasting given element to a widget.\n* [#11307](http://dev.ckeditor.com/ticket/11307): Fixed: Paste as Plain Text conflict with the [MooTools](http://mootools.net) library.\n* [#11140](http://dev.ckeditor.com/ticket/11140): [IE11] Fixed: Anchors are not draggable.\n* [#11379](http://dev.ckeditor.com/ticket/11379): Changed default contents `line-height` to unitless values to avoid huge text overlapping (like in [#9696](http://dev.ckeditor.com/ticket/9696)).\n* [#10787](http://dev.ckeditor.com/ticket/10787): [Firefox] Fixed: Broken replacement of text while pasting into `div`-based editor.\n* [#10884](http://dev.ckeditor.com/ticket/10884): Widgets integration with the [Show Blocks](http://ckeditor.com/addon/showblocks) plugin.\n* [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable contents while fake selection is on.\n* [#11086](http://dev.ckeditor.com/ticket/11086): [IE8] Re-enable inline widgets drag&drop in Internet Explorer 8.\n* [#11372](http://dev.ckeditor.com/ticket/11372): Widgets: Special characters encoded twice in nested editables.\n* [#10068](http://dev.ckeditor.com/ticket/10068): Fixed: Support for protocol-relative URLs.\n* [#11283](http://dev.ckeditor.com/ticket/11283): [Enhanced Image](http://ckeditor.com/addon/image2): A `<div>` element with `text-align: center` and an image inside is not recognised correctly.\n* [#11196](http://dev.ckeditor.com/ticket/11196): [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp): Allowed additional keyboard button labels to be translated in the dialog window.\n\n## CKEditor 4.3.1\n\n**Important Notes:**\n\n* To match the naming convention, the `language` button is now `Language` ([#11201](http://dev.ckeditor.com/ticket/11201)).\n* [Enhanced Image](http://ckeditor.com/addon/image2) button, context menu, command, and icon names match those of the [Image](http://ckeditor.com/addon/image) plugin ([#11222](http://dev.ckeditor.com/ticket/11222)).\n\nFixed Issues:\n\n* [#11244](http://dev.ckeditor.com/ticket/11244): Changed: The [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method now fires the [`widget.repository.checkWidgets`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-event-checkWidgets) event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event.\n* [#11171](http://dev.ckeditor.com/ticket/11171): Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) and [`editor.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText) methods do not call the [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method.\n* [#11085](http://dev.ckeditor.com/ticket/11085): [IE8] Replaced preview generated by the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget with a placeholder.\n* [#11044](http://dev.ckeditor.com/ticket/11044): Enhanced WAI-ARIA support for the [Language](http://ckeditor.com/addon/language) plugin drop-down menu.\n* [#11075](http://dev.ckeditor.com/ticket/11075): With drop-down menu button focused, pressing the *Down Arrow* key will now open the menu and focus its first option.\n* [#11165](http://dev.ckeditor.com/ticket/11165): Fixed: The [File Browser](http://ckeditor.com/addon/filebrowser) plugin cannot be removed from the editor.\n* [#11159](http://dev.ckeditor.com/ticket/11159): [IE9-10] [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions.\n* [#11101](http://dev.ckeditor.com/ticket/11101): Drop-down lists no longer break when given double quotes.\n* [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image.\n* [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image.\n* [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when an inline widget is in a heading.\n* [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of an inline widget.\n* [#11182](http://dev.ckeditor.com/ticket/11182): [IE10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if a page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details.\n* [#11204](http://dev.ckeditor.com/ticket/11204): Added `figure` and `figcaption` styles to the `contents.css` file so [Enhanced Image](http://ckeditor.com/addon/image2) looks nicer.\n* [#11202](http://dev.ckeditor.com/ticket/11202): Fixed: No newline in [BBCode](http://ckeditor.com/addon/bbcode) mode.\n* [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing the *Delete* key in a list item.\n* [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on a selected image causes the browser to go back.\n* [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting a horizontal rule or a table in multiple row selection causes a browser crash. Additionally, the [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert the element into every range of a selection any more.\n* [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on an element containing a non-editable element was not auto faked.\n* [#11125](http://dev.ckeditor.com/ticket/11125): Fixed: Keyboard navigation through menu and drop-down items will now cycle.\n* [#11011](http://dev.ckeditor.com/ticket/11011): Fixed: The [`editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) method removes attributes from nested elements.\n* [#11179](http://dev.ckeditor.com/ticket/11179): Fixed: [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy) does not cleanup content generated by the [Table Resize](http://ckeditor.com/addon/tableresize) plugin for inline editors.\n* [#11237](http://dev.ckeditor.com/ticket/11237): Fixed: Table border attribute value is deleted when pasting content from Microsoft Word.\n* [#11250](http://dev.ckeditor.com/ticket/11250): Fixed: HTML entities inside the `<textarea>` element are not encoded.\n* [#11260](http://dev.ckeditor.com/ticket/11260): Fixed: Initially disabled buttons are not read by JAWS as disabled.\n* [#11200](http://dev.ckeditor.com/ticket/11200):  Added [Clipboard](http://ckeditor.com/addon/clipboard) plugin as a dependency for [Widget](http://ckeditor.com/addon/widget) to fix drag and drop.\n\n## CKEditor 4.3\n\nNew Features:\n\n* [#10612](http://dev.ckeditor.com/ticket/10612): Internet Explorer 11 support.\n* [#10869](http://dev.ckeditor.com/ticket/10869): Widgets: Added better integration with the [Elements Path](http://ckeditor.com/addon/elementspath) plugin.\n* [#10886](http://dev.ckeditor.com/ticket/10886): Widgets: Added tooltip to the drag handle.\n* [#10933](http://dev.ckeditor.com/ticket/10933): Widgets: Introduced drag and drop of block widgets with the [Line Utilities](http://ckeditor.com/addon/lineutils) plugin.\n* [#10936](http://dev.ckeditor.com/ticket/10936): Widget System changes for easier integration with other dialog systems.\n* [#10895](http://dev.ckeditor.com/ticket/10895): [Enhanced Image](http://ckeditor.com/addon/image2): Added file browser integration.\n* [#11002](http://dev.ckeditor.com/ticket/11002): Added the [`draggable`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-draggable) option to disable drag and drop support for widgets.\n* [#10937](http://dev.ckeditor.com/ticket/10937): [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget improvements:\n  * loading indicator ([#10948](http://dev.ckeditor.com/ticket/10948)),\n  * applying paragraph changes (like font color change) to iframe ([#10841](http://dev.ckeditor.com/ticket/10841)),\n  * Firefox and IE9 clipboard fixes ([#10857](http://dev.ckeditor.com/ticket/10857)),\n  * fixing same origin policy issue ([#10840](http://dev.ckeditor.com/ticket/10840)),\n  * fixing undo bugs ([#10842](http://dev.ckeditor.com/ticket/10842), [#10930](http://dev.ckeditor.com/ticket/10930)),\n  * fixing other minor bugs.\n* [#10862](http://dev.ckeditor.com/ticket/10862): [Placeholder](http://ckeditor.com/addon/placeholder) plugin was rewritten as a widget.\n* [#10822](http://dev.ckeditor.com/ticket/10822): Added styles system integration with non-editable elements (for example widgets) and their nested editables. Styles cannot change non-editable content and are applied in nested editable only if allowed by its type and content filter.\n* [#10856](http://dev.ckeditor.com/ticket/10856): Menu buttons will now toggle the visibility of their panels when clicked multiple times. [Language](http://ckeditor.com/addon/language) plugin fixes: Added active language highlighting, added an option to remove the language.\n* [#10028](http://dev.ckeditor.com/ticket/10028): New [`config.dialog_noConfirmCancel`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-dialog_noConfirmCancel) configuration option that eliminates the need to confirm closing of a dialog window when the user changed any of its fields.\n* [#10848](http://dev.ckeditor.com/ticket/10848): Integrate remaining plugins ([Styles](http://ckeditor.com/addon/stylescombo), [Format](http://ckeditor.com/addon/format), [Font](http://ckeditor.com/addon/font), [Color Button](http://ckeditor.com/addon/colorbutton), [Language](http://ckeditor.com/addon/language) and [Indent](http://ckeditor.com/addon/indent)) with [active filter](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter).\n* [#10855](http://dev.ckeditor.com/ticket/10855): Change the extension of emoticons in the [BBCode](http://ckeditor.com/addon/bbcode) sample from GIF to PNG.\n\nFixed Issues:\n\n* [#10831](http://dev.ckeditor.com/ticket/10831): [Enhanced Image](http://ckeditor.com/addon/image2): Merged `image2inline` and `image2block` into one `image2` widget.\n* [#10835](http://dev.ckeditor.com/ticket/10835): [Enhanced Image](http://ckeditor.com/addon/image2): Improved visibility of the resize handle.\n* [#10836](http://dev.ckeditor.com/ticket/10836): [Enhanced Image](http://ckeditor.com/addon/image2): Preserve custom mouse cursor while resizing the image.\n* [#10939](http://dev.ckeditor.com/ticket/10939): [Firefox] [Enhanced Image](http://ckeditor.com/addon/image2): hovering the image causes it to change.\n* [#10866](http://dev.ckeditor.com/ticket/10866): Fixed: Broken *Tab* key navigation in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window.\n* [#10833](http://dev.ckeditor.com/ticket/10833): Fixed: *Lock ratio* option should be on by default in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window.\n* [#10881](http://dev.ckeditor.com/ticket/10881): Various improvements to *Enter* key behavior in nested editables.\n* [#10879](http://dev.ckeditor.com/ticket/10879): [Remove Format](http://ckeditor.com/addon/removeformat) should not leak from a nested editable.\n* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [WebSpellChecker](http://ckeditor.com/addon/wsc) fails to apply changes if a nested editable was focused.\n* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [SCAYT](http://ckeditor.com/addon/wsc) blocks typing in nested editables.\n* [#11079](http://dev.ckeditor.com/ticket/11079): Add button icons to the [Placeholder](http://ckeditor.com/addon/placeholder) sample.\n* [#10870](http://dev.ckeditor.com/ticket/10870): The `paste` command is no longer being disabled when the clipboard is empty.\n* [#10854](http://dev.ckeditor.com/ticket/10854): Fixed: Firefox prepends `<br>` to `<body>`, so it is stripped by the HTML data processor.\n* [#10823](http://dev.ckeditor.com/ticket/10823): Fixed: [Link](http://ckeditor.com/addon/link) plugin does not work with non-editable content.\n* [#10828](http://dev.ckeditor.com/ticket/10828): [Magic Line](http://ckeditor.com/addon/magicline) integration with the Widget System.\n* [#10865](http://dev.ckeditor.com/ticket/10865): Improved hiding copybin, so copying widgets works smoothly.\n* [#11066](http://dev.ckeditor.com/ticket/11066): Widget's private parts use CSS reset.\n* [#11027](http://dev.ckeditor.com/ticket/11027): Fixed: Block commands break on widgets; added the [`contentDomInvalidated`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDomInvalidated) event.\n* [#10430](http://dev.ckeditor.com/ticket/10430): Resolve dependence of the [Image](http://ckeditor.com/addon/image) plugin on the [Form Elements](http://ckeditor.com/addon/forms) plugin.\n* [#10911](http://dev.ckeditor.com/ticket/10911): Fixed: Browser *Alt* hotkeys will no longer be blocked while a widget is focused.\n* [#11082](http://dev.ckeditor.com/ticket/11082): Fixed: Selected widget is not copied or cut when using toolbar buttons or context menu.\n* [#11083](http://dev.ckeditor.com/ticket/11083): Fixed list and div element application to block widgets.\n* [#10887](http://dev.ckeditor.com/ticket/10887): Internet Explorer 8 compatibility issues related to the Widget System.\n* [#11074](http://dev.ckeditor.com/ticket/11074): Temporarily disabled inline widget drag and drop, because of seriously buggy native `range#moveToPoint` method.\n* [#11098](http://dev.ckeditor.com/ticket/11098): Fixed: Wrong selection position after undoing widget drag and drop.\n* [#11110](http://dev.ckeditor.com/ticket/11110): Fixed: IFrame and Flash objects are being incorrectly pasted in certain conditions.\n* [#11129](http://dev.ckeditor.com/ticket/11129): Page break is lost when loading data.\n* [#11123](http://dev.ckeditor.com/ticket/11123): [Firefox] Widget is destroyed after being dragged outside of `<body>`.\n* [#11124](http://dev.ckeditor.com/ticket/11124): Fixed the [Elements Path](http://ckeditor.com/addon/elementspath) in an editor using the [Div Editing Area](http://ckeditor.com/addon/divarea).\n\n## CKEditor 4.3 Beta\n\nNew Features:\n\n* [#9764](http://dev.ckeditor.com/ticket/9764): Widget System.\n  * [Widget plugin](http://ckeditor.com/addon/widget) introducing the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget).\n  * New [`editor.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) and [`editor.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-shiftEnterMode) properties &ndash; normalized versions of [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) and [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode).\n  * Dynamic editor settings. Starting from CKEditor 4.3 Beta, *Enter* mode values and [content filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) instances may be changed dynamically (for example when the caret was placed in an element in which editor features should be adjusted). When you are implementing a new editor feature, you should base its behavior on [dynamic](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) or [static](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) *Enter* mode values depending on whether this feature works in selection context or globally on editor content.\n      * Dynamic *Enter* mode values &ndash; [`editor.setActiveEnterMode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveEnterMode) method, [`editor.activeEnterModeChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeEnterModeChange) event, and two properties: [`editor.activeEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) and [`editor.activeShiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeShiftEnterMode).\n      * Dynamic content filter instances &ndash; [`editor.setActiveFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveFilter) method, [`editor.activeFilterChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeFilterChange) event, and [`editor.activeFilter`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter) property.\n  * \"Fake\" selection was introduced. It makes it possible to virtually select any element when the real selection remains hidden. See the  [`selection.fake()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-fake) method.\n  * Default [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied to non-editable elements (elements with `contenteditable` attribute set to `false` and their descendants) anymore. To add a rule which will be applied to all elements you need to pass an additional argument to the [`filter.addRules()`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter-method-addRules) method.\n  * Dozens of new methods were introduced &ndash; most interesting ones:\n      * [`document.find()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-find),\n      * [`document.findOne()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-findOne),\n      * [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange),\n      * [`range.moveToClosestEditablePosition()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToClosestEditablePosition),\n      * New methods for [`htmlParser.node`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.node) and [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element).\n* [#10659](http://dev.ckeditor.com/ticket/10659): New [Enhanced Image](http://ckeditor.com/addon/image2) plugin that introduces a widget with integrated image captions, an option to center images, and dynamic \"click and drag\" resizing.\n* [#10664](http://dev.ckeditor.com/ticket/10664): New [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin that introduces the MathJax widget.\n* [#7987](https://dev.ckeditor.com/ticket/7987): New [Language](http://ckeditor.com/addon/language) plugin that implements Language toolbar button to support [WCAG 3.1.2 Language of Parts](http://www.w3.org/TR/UNDERSTANDING-WCAG20/meaning-other-lang-id.html).\n* [#10708](http://dev.ckeditor.com/ticket/10708): New [smileys](http://ckeditor.com/addon/smiley).\n\n## CKEditor 4.2.3\n\nFixed Issues:\n\n* [#10994](http://dev.ckeditor.com/ticket/10994): Fixed: Loading external jQuery library when opening the [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) sample directly from file.\n* [#10975](http://dev.ckeditor.com/ticket/10975): [IE] Fixed: Error thrown while opening the color palette.\n* [#9929](http://dev.ckeditor.com/ticket/9929): [Blink/WebKit] Fixed: A non-breaking space is created once a character is deleted and a regular space is typed.\n* [#10963](http://dev.ckeditor.com/ticket/10963): Fixed: JAWS issue with the keyboard shortcut for [Magic Line](http://ckeditor.com/addon/magicline).\n* [#11096](http://dev.ckeditor.com/ticket/11096): Fixed: TypeError: Object has no method 'is'.\n\n## CKEditor 4.2.2\n\nFixed Issues:\n\n* [#9314](http://dev.ckeditor.com/ticket/9314): Fixed: Incorrect error message on closing a dialog window without saving changs.\n* [#10308](http://dev.ckeditor.com/ticket/10308): [IE10] Fixed: Unspecified error when deleting a row.\n* [#10945](http://dev.ckeditor.com/ticket/10945): [Chrome] Fixed: Clicking with a mouse inside the editor does not show the caret.\n* [#10912](http://dev.ckeditor.com/ticket/10912): Prevent default action when content of a non-editable link is clicked.\n* [#10913](http://dev.ckeditor.com/ticket/10913): Fixed [`CKEDITOR.plugins.addExternal()`](http://docs.ckeditor.com/#!/api/CKEDITOR.resourceManager-method-addExternal) not handling paths including file name specified.\n* [#10666](http://dev.ckeditor.com/ticket/10666): Fixed [`CKEDITOR.tools.isArray()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-isArray) not working cross frame.\n* [#10910](http://dev.ckeditor.com/ticket/10910): [IE9] Fixed JavaScript error thrown in Compatibility Mode when clicking and/or typing in the editing area.\n* [#10868](http://dev.ckeditor.com/ticket/10868): [IE8] Prevent the browser from crashing when applying the Inline Quotation style.\n* [#10915](http://dev.ckeditor.com/ticket/10915): Fixed: Invalid CSS filter in the Kama skin.\n* [#10914](http://dev.ckeditor.com/ticket/10914): Plugins [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock) are now included in the build configuration.\n* [#10812](http://dev.ckeditor.com/ticket/10812): Fixed [`range.createBookmark2()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-createBookmark2) incorrectly normalizing offsets. This bug was causing many issues: [#10850](http://dev.ckeditor.com/ticket/10850), [#10842](http://dev.ckeditor.com/ticket/10842).\n* [#10951](http://dev.ckeditor.com/ticket/10951): Reviewed and optimized focus handling on panels (combo, menu buttons, color buttons, and context menu) to enhance accessibility. Fixed [#10705](http://dev.ckeditor.com/ticket/10705), [#10706](http://dev.ckeditor.com/ticket/10706) and [#10707](http://dev.ckeditor.com/ticket/10707).\n* [#10704](http://dev.ckeditor.com/ticket/10704): Fixed a JAWS issue with the Select Color dialog window title not being announced.\n* [#10753](http://dev.ckeditor.com/ticket/10753): The floating toolbar in inline instances now has a dedicated accessibility label.\n\n## CKEditor 4.2.1\n\nFixed Issues:\n\n* [#10301](http://dev.ckeditor.com/ticket/10301): [IE9-10] Undo fails after 3+ consecutive paste actions with a JavaScript error.\n* [#10689](http://dev.ckeditor.com/ticket/10689): Save toolbar button saves only the first editor instance.\n* [#10368](http://dev.ckeditor.com/ticket/10368): Move language reading direction definition (`dir`) from main language file to core.\n* [#9330](http://dev.ckeditor.com/ticket/9330): Fixed pasting anchors from MS Word.\n* [#8103](http://dev.ckeditor.com/ticket/8103): Fixed pasting nested lists from MS Word.\n* [#9958](http://dev.ckeditor.com/ticket/9958): [IE9] Pressing the \"OK\" button will trigger the `onbeforeunload` event in the popup dialog.\n* [#10662](http://dev.ckeditor.com/ticket/10662): Fixed styles from the Styles drop-down list not registering to the ACF in case when the [Shared Spaces plugin](http://ckeditor.com/addon/sharedspace) is used.\n* [#9654](http://dev.ckeditor.com/ticket/9654): Problems with Internet Explorer 10 Quirks Mode.\n* [#9816](http://dev.ckeditor.com/ticket/9816): Floating toolbar does not reposition vertically in several cases.\n* [#10646](http://dev.ckeditor.com/ticket/10646): Removing a selected sublist or nested table with *Backspace/Delete* removes the parent element.\n* [#10623](http://dev.ckeditor.com/ticket/10623): [WebKit] Page is scrolled when opening a drop-down list.\n* [#10004](http://dev.ckeditor.com/ticket/10004): [ChromeVox] Button names are not announced.\n* [#10731](http://dev.ckeditor.com/ticket/10731): [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin breaks cloning of editor configuration.\n* It is now possible to set per instance [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin configuration instead of setting the configuration globally.\n\n## CKEditor 4.2\n\n**Important Notes:**\n\n* Dropped compatibility support for Internet Explorer 7 and Firefox 3.6.\n\n* Both the Basic and the Standard distribution packages will not contain the new [Indent Block](http://ckeditor.com/addon/indentblock) plugin. Because of this the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) might remove block indentations from existing contents. If you want to prevent this, either [add an appropriate ACF rule to your filter](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) or create a custom build based on the Basic/Standard package and add the Indent Block plugin in [CKBuilder](http://ckeditor.com/builder).\n\nNew Features:\n\n* [#10027](http://dev.ckeditor.com/ticket/10027): Separated list and block indentation into two plugins: [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock).\n* [#8244](http://dev.ckeditor.com/ticket/8244): Use *(Shift+)Tab* to indent and outdent lists.\n* [#10281](http://dev.ckeditor.com/ticket/10281): The [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) is now available. Several jQuery-related issues fixed: [#8261](http://dev.ckeditor.com/ticket/8261), [#9077](http://dev.ckeditor.com/ticket/9077), [#8710](http://dev.ckeditor.com/ticket/8710), [#8530](http://dev.ckeditor.com/ticket/8530), [#9019](http://dev.ckeditor.com/ticket/9019), [#6181](http://dev.ckeditor.com/ticket/6181), [#7876](http://dev.ckeditor.com/ticket/7876), [#6906](http://dev.ckeditor.com/ticket/6906).\n* [#10042](http://dev.ckeditor.com/ticket/10042): Introduced [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title) setting to change the human-readable title of the editor.\n* [#9794](http://dev.ckeditor.com/ticket/9794): Added [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event.\n* [#9923](http://dev.ckeditor.com/ticket/9923): HiDPI support in the editor UI. HiDPI icons for [Moono skin](http://ckeditor.com/addon/moono) added.\n* [#8031](http://dev.ckeditor.com/ticket/8031): Handle `required` attributes on `<textarea>` elements &mdash; introduced [`editor.required`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-required) event.\n* [#10280](http://dev.ckeditor.com/ticket/10280): Ability to replace `<textarea>` elements with the inline editor.\n\nFixed Issues:\n\n* [#10599](http://dev.ckeditor.com/ticket/10599): [Indent](http://ckeditor.com/addon/indent) plugin is no longer required by the [List](http://ckeditor.com/addon/list) plugin.\n* [#10370](http://dev.ckeditor.com/ticket/10370): Inconsistency in data events between framed and inline editors.\n* [#10438](http://dev.ckeditor.com/ticket/10438): [FF, IE] No selection is done on an editable element on executing [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData).\n\n## CKEditor 4.1.3\n\nNew Features:\n\n* Added new translation: Indonesian.\n\nFixed Issues:\n\n* [#10644](http://dev.ckeditor.com/ticket/10644): Fixed a critical bug when pasting plain text in Blink-based browsers.\n* [#5189](http://dev.ckeditor.com/ticket/5189): [Find/Replace](http://ckeditor.com/addon/find) dialog window: rename \"Cancel\" button to \"Close\".\n* [#10562](http://dev.ckeditor.com/ticket/10562): [Housekeeping] Unified CSS gradient filter formats in the [Moono](http://ckeditor.com/addon/moono) skin.\n* [#10537](http://dev.ckeditor.com/ticket/10537): Advanced Content Filter should register a default rule for [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode).\n* [#10610](http://dev.ckeditor.com/ticket/10610): [`CKEDITOR.dialog.addIframe()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-static-method-addIframe) incorrectly sets the iframe size in dialog windows.\n\n## CKEditor 4.1.2\n\nNew Features:\n\n* Added new translation: Sinhala.\n\nFixed Issues:\n\n* [#10339](http://dev.ckeditor.com/ticket/10339): Fixed: Error thrown when inserted data was totally stripped out after filtering and processing.\n* [#10298](http://dev.ckeditor.com/ticket/10298): Fixed: Data processor breaks attributes containing protected parts.\n* [#10367](http://dev.ckeditor.com/ticket/10367): Fixed: [`editable.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertText) loses characters when `RegExp` replace controls are being inserted.\n* [#10165](http://dev.ckeditor.com/ticket/10165): [IE] Access denied error when `document.domain` has been altered.\n* [#9761](http://dev.ckeditor.com/ticket/9761): Update the *Backspace* key state in [`keystrokeHandler.blockedKeystrokes`](http://docs.ckeditor.com/#!/api/CKEDITOR.keystrokeHandler-property-blockedKeystrokes) when calling [`editor.setReadOnly()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly).\n* [#6504](http://dev.ckeditor.com/ticket/6504): Fixed: Race condition while loading several [`config.customConfig`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-customConfig) files.\n* [#10146](http://dev.ckeditor.com/ticket/10146): [Firefox] Empty lines are being removed while [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR).\n* [#10360](http://dev.ckeditor.com/ticket/10360): Fixed: ARIA `role=\"application\"` should not be used for dialog windows.\n* [#10361](http://dev.ckeditor.com/ticket/10361): Fixed: ARIA `role=\"application\"` should not be used for floating panels.\n* [#10510](http://dev.ckeditor.com/ticket/10510): Introduced unique voice labels to differentiate between different editor instances.\n* [#9945](http://dev.ckeditor.com/ticket/9945): [iOS] Scrolling not possible on iPad.\n* [#10389](http://dev.ckeditor.com/ticket/10389): Fixed: Invalid HTML in the \"Text and Table\" template.\n* [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin user interface was changed to match CKEditor 4 style.\n\n## CKEditor 4.1.1\n\nNew Features:\n\n* Added new translation: Albanian.\n\nFixed Issues:\n\n* [#10172](http://dev.ckeditor.com/ticket/10172): Pressing *Delete* or *Backspace* in an empty table cell moves the cursor to the next/previous cell.\n* [#10219](http://dev.ckeditor.com/ticket/10219): Error thrown when destroying an editor instance in parallel with a `mouseup` event.\n* [#10265](http://dev.ckeditor.com/ticket/10265): Wrong loop type in the [File Browser](http://ckeditor.com/addon/filebrowser) plugin.\n* [#10249](http://dev.ckeditor.com/ticket/10249): Wrong undo/redo states at start.\n* [#10268](http://dev.ckeditor.com/ticket/10268): [Show Blocks](http://ckeditor.com/addon/showblocks) does not recover after switching to Source view.\n* [#9995](http://dev.ckeditor.com/ticket/9995): HTML code in the `<textarea>` should not be modified by the [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor).\n* [#10320](http://dev.ckeditor.com/ticket/10320): [Justify](http://ckeditor.com/addon/justify) plugin should add elements to Advanced Content Filter based on current [Enter mode](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode).\n* [#10260](http://dev.ckeditor.com/ticket/10260): Fixed: Advanced Content Filter blocks [`tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces). Unified `data-cke-*` attributes filtering.\n* [#10315](http://dev.ckeditor.com/ticket/10315): [WebKit] [Undo manager](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager) should not record snapshots after a filling character was added/removed.\n* [#10291](http://dev.ckeditor.com/ticket/10291): [WebKit] Space after a filling character should be secured.\n* [#10330](http://dev.ckeditor.com/ticket/10330): [WebKit] The filling character is not removed on `keydown` in specific cases.\n* [#10285](http://dev.ckeditor.com/ticket/10285): Fixed: Styled text pasted from MS Word causes an infinite loop.\n* [#10131](http://dev.ckeditor.com/ticket/10131): Fixed: [`undoManager.update()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-method-update) does not refresh the command state.\n* [#10337](http://dev.ckeditor.com/ticket/10337): Fixed: Unable to remove `<s>` using [Remove Format](http://ckeditor.com/addon/removeformat).\n\n## CKEditor 4.1\n\nFixed Issues:\n\n* [#10192](http://dev.ckeditor.com/ticket/10192): Closing lists with the *Enter* key does not work with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) in several cases.\n* [#10191](http://dev.ckeditor.com/ticket/10191): Fixed allowed content rules unification, so the [`filter.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-allowedContent) property always contains rules in the same format.\n* [#10224](http://dev.ckeditor.com/ticket/10224): Advanced Content Filter does not remove non-empty `<a>` elements anymore.\n* Minor issues in plugin integration with Advanced Content Filter:\n  * [#10166](http://dev.ckeditor.com/ticket/10166): Added transformation from the `align` attribute to `float` style to preserve backward compatibility after the introduction of Advanced Content Filter.\n  * [#10195](http://dev.ckeditor.com/ticket/10195): [Image](http://ckeditor.com/addon/image) plugin no longer registers rules for links to Advanced Content Filter.\n  * [#10213](http://dev.ckeditor.com/ticket/10213): [Justify](http://ckeditor.com/addon/justify) plugin is now correctly registering rules to Advanced Content Filter when [`config.justifyClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-justifyClasses) is defined.\n\n## CKEditor 4.1 RC\n\nNew Features:\n\n* [#9829](http://dev.ckeditor.com/ticket/9829): Advanced Content Filter - data and features activation based on editor configuration.\n\n  Brand new data filtering system that works in 2 modes:\n\n  * Based on loaded features (toolbar items, plugins) - the data will be filtered according to what the editor in its\n  current configuration can handle.\n  * Based on [`config.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent) rules - the data\n  will be filtered and the editor features (toolbar items, commands, keystrokes) will be enabled if they are allowed.\n\n  See the `datafiltering.html` sample, [guides](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) and [`CKEDITOR.filter` API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.filter).\n* [#9387](http://dev.ckeditor.com/ticket/9387): Reintroduced [Shared Spaces](http://ckeditor.com/addon/sharedspace) - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances.\n* [#9907](http://dev.ckeditor.com/ticket/9907): Added the [`contentPreview`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-contentPreview) event for preview data manipulation.\n* [#9713](http://dev.ckeditor.com/ticket/9713): Introduced the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin that brings raw HTML editing for inline editor instances.\n* Included in [#9829](http://dev.ckeditor.com/ticket/9829): Introduced new events, [`toHtml`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml) and [`toDataFormat`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toDataFormat), allowing for better integration with data processing.\n* [#9981](http://dev.ckeditor.com/ticket/9981): Added ability to filter [`htmlParser.fragment`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.fragment), [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element) etc. by many [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter)s before writing structure to an HTML string.\n* Included in [#10103](http://dev.ckeditor.com/ticket/10103):\n  * Introduced the [`editor.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-status) property to make it easier to check the current status of the editor.\n  * Default [`command`](http://docs.ckeditor.com/#!/api/CKEDITOR.command) state is now [`CKEDITOR.TRISTATE_DISABLE`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-TRISTATE_DISABLED). It will be activated on [`editor.instanceReady`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-instanceReady) or immediately after being added if the editor is already initialized.\n* [#9796](http://dev.ckeditor.com/ticket/9796): Introduced `<s>` as a default tag for strikethrough, which replaces obsolete `<strike>` in HTML5.\n\n## CKEditor 4.0.3\n\nFixed Issues:\n\n* [#10196](http://dev.ckeditor.com/ticket/10196): Fixed context menus not opening with keyboard shortcuts when [Autogrow](http://ckeditor.com/addon/autogrow) is enabled.\n* [#10212](http://dev.ckeditor.com/ticket/10212): [IE7-10] Undo command throws errors after multiple switches between Source and WYSIWYG view.\n* [#10219](http://dev.ckeditor.com/ticket/10219): [Inline editor] Error thrown after calling [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy).\n\n## CKEditor 4.0.2\n\nFixed Issues:\n\n* [#9779](http://dev.ckeditor.com/ticket/9779): Fixed overriding [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl) with `CKEDITOR_GETURL`.\n* [#9772](http://dev.ckeditor.com/ticket/9772): Custom buttons in the dialog window footer have different look and size ([Moono](http://ckeditor.com/addon/moono), [Kama](http://ckeditor.com/addon/kama) skins).\n* [#9029](http://dev.ckeditor.com/ticket/9029): Custom styles added with the [`stylesSet.add()`](http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet-method-add) are displayed in the wrong order.\n* [#9887](http://dev.ckeditor.com/ticket/9887): Disable [Magic Line](http://ckeditor.com/addon/magicline) when [`editor.readOnly`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) is set.\n* [#9882](http://dev.ckeditor.com/ticket/9882): Fixed empty document title on [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) if set via the Document Properties dialog window.\n* [#9773](http://dev.ckeditor.com/ticket/9773): Fixed rendering problems with selection fields in the Kama skin.\n* [#9851](http://dev.ckeditor.com/ticket/9851): The [`selectionChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-selectionChange) event is not fired when mouse selection ended outside editable.\n* [#9903](http://dev.ckeditor.com/ticket/9903): [Inline editor] Bad positioning of floating space with page horizontal scroll.\n* [#9872](http://dev.ckeditor.com/ticket/9872): [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) returns `true` when called onload. Removed the obsolete `editor.mayBeDirty` flag.\n* [#9893](http://dev.ckeditor.com/ticket/9893): [IE] Fixed broken toolbar when editing mixed direction content in Quirks mode.\n* [#9845](http://dev.ckeditor.com/ticket/9845): Fixed TAB navigation in the [Link](http://ckeditor.com/addon/link) dialog window when the Anchor option is used and no anchors are available.\n* [#9883](http://dev.ckeditor.com/ticket/9883): Maximizing was making the entire page editable with [divarea](http://ckeditor.com/addon/divarea)-based editors.\n* [#9940](http://dev.ckeditor.com/ticket/9940): [Firefox] Navigating back to a page with the editor was making the entire page editable.\n* [#9966](http://dev.ckeditor.com/ticket/9966): Fixed: Unable to type square brackets with French keyboard layout. Changed [Magic Line](http://ckeditor.com/addon/magicline) keystrokes.\n* [#9507](http://dev.ckeditor.com/ticket/9507): [Firefox] Selection is moved before editable position when the editor is focused for the first time.\n* [#9947](http://dev.ckeditor.com/ticket/9947): [WebKit] Editor overflows parent container in some edge cases.\n* [#10105](http://dev.ckeditor.com/ticket/10105): Fixed: Broken [sourcearea](http://ckeditor.com/addon/sourcearea) view when an RTL language is set.\n* [#10123](http://dev.ckeditor.com/ticket/10123): [WebKit] Fixed: Several dialog windows have broken layout since the latest WebKit release.\n* [#10152](http://dev.ckeditor.com/ticket/10152): Fixed: Invalid ARIA property used on menu items.\n\n## CKEditor 4.0.1.1\n\nFixed Issues:\n\n* Security update: Added protection against XSS attack and possible path disclosure in the PHP sample.\n\n## CKEditor 4.0.1\n\nFixed Issues:\n\n* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in the new [Moono skin](http://ckeditor.com/addon/moono).\n* Accessibility issues (mainly in inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844).\n* [Magic Line](http://ckeditor.com/addon/magicline) plugin:\n    * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic Line.\n    * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic Line support for forms.\n    * [#9573](http://dev.ckeditor.com/ticket/9573): Magic Line does not disappear on `mouseout` in a specific case.\n* [#9754](http://dev.ckeditor.com/ticket/9754): [WebKit] Cutting & pasting simple unformatted text generates an inline wrapper in WebKit browsers.\n* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS Word.\n* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging.\n* Context menu:\n    * [#9712](http://dev.ckeditor.com/ticket/9712): Opening the context menu destroys editor focus.\n    * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over the floating toolbar.\n    * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates a JavaScript error in inline mode when the editor is attached to a header element.\n* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing the window.\n* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div-based editor puts the editing area under the bottom UI space.\n* [#9528](http://dev.ckeditor.com/ticket/9528): Host page `box-sizing` style should not influence the editor UI elements.\n* [#9503](http://dev.ckeditor.com/ticket/9503): [Form Elements](http://ckeditor.com/addon/forms) plugin adds context menu listeners only on supported input types. Added support for `tel`, `email`, `search` and `url` input types.\n* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in a narrow window.\n* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog window does not populate width correctly.\n* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in a nested table removes the outer table cell.\n* [#9815](http://dev.ckeditor.com/ticket/9815): Cannot edit dialog window fields in an editor initialized in the jQuery UI modal dialog.\n* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialog windows do not show completely in a small window.\n* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a `<div>` element stay permanently even after the user exits editing the `<div>`.\n* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing the Format drop-down list by clicking its button.\n* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when the `border-width` style is specified.\n* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read-only mode.\n* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected images.\n* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>` elements.\n* [#9709](http://dev.ckeditor.com/ticket/9709): [Paste from Word](http://ckeditor.com/addon/pastefromword) should not depend on configuration from other styles.\n* [#9726](http://dev.ckeditor.com/ticket/9726): Removed [Color Dialog](http://ckeditor.com/addon/colordialog) plugin dependency from [Table Tools](http://ckeditor.com/addon/tabletools).\n* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly in the [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp) dialog window.\n* [#9771](http://dev.ckeditor.com/ticket/9771): [WebKit & Opera] Fixed scrolling issues when pasting.\n* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] `onChange` is not fired for checkboxes in dialogs.\n* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When opening a toolbar menu for the first time and pressing the *Down Arrow* key, focus goes to the next toolbar button instead of the menu options.\n* [#9847](http://dev.ckeditor.com/ticket/9847): [Elements Path](http://ckeditor.com/addon/elementspath) should not be initialized in the inline editor.\n* [#9853](http://dev.ckeditor.com/ticket/9853): [`editor.addRemoveFormatFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addRemoveFormatFilter) is exposed before it really works.\n* [#8893](http://dev.ckeditor.com/ticket/8893): Value of the [`pasteFromWordCleanupFile`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordCleanupFile) configuration option is now taken from the instance configuration.\n* [#9693](http://dev.ckeditor.com/ticket/9693): Removed \"Live Preview\" checkbox from UI color picker.\n\n\n## CKEditor 4.0\n\nThe first stable release of the new CKEditor 4 code line.\n\nThe CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever\npossible. The list of relevant changes can be found in the [API Changes page of\nthe CKEditor 4 documentation][1].\n\n[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes \"API Changes\"\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/LICENSE.md",
    "content": "Software License Agreement\n==========================\n\nCKEditor - The text editor for Internet - http://ckeditor.com\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n\nLicensed under the terms of any of the following licenses at your\nchoice:\n\n - GNU General Public License Version 2 or later (the \"GPL\")\n   http://www.gnu.org/licenses/gpl.html\n   (See Appendix A)\n\n - GNU Lesser General Public License Version 2.1 or later (the \"LGPL\")\n   http://www.gnu.org/licenses/lgpl.html\n   (See Appendix B)\n\n - Mozilla Public License Version 1.1 or later (the \"MPL\")\n   http://www.mozilla.org/MPL/MPL-1.1.html\n   (See Appendix C)\n\nYou are not required to, but if you want to explicitly declare the\nlicense you have chosen to be bound to when using, reproducing,\nmodifying and distributing this software, just include a text file\ntitled \"legal.txt\" in your version of this software, indicating your\nlicense choice. In any case, your choice will not restrict any\nrecipient of your version of this software to use, reproduce, modify\nand distribute this software under any of the above licenses.\n\nSources of Intellectual Property Included in CKEditor\n-----------------------------------------------------\n\nWhere not otherwise indicated, all CKEditor content is authored by\nCKSource engineers and consists of CKSource-owned intellectual\nproperty. In some specific instances, CKEditor will incorporate work\ndone by developers outside of CKSource with their express permission.\n\nThe following libraries are included in CKEditor under the MIT license (see Appendix D):\n\n* CKSource Samples Framework (included in the samples) - Copyright (c) 2014-2016, CKSource - Frederico Knabben.\n* PicoModal (included in `samples/js/sf.js`) - Copyright (c) 2012 James Frasca.\n* CodeMirror (included in the samples) - Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others.\n\nParts of code taken from the following libraries are included in CKEditor under the MIT license (see Appendix D):\n\n* jQuery (inspired the domReady function, ckeditor_base.js) - Copyright (c) 2011 John Resig, http://jquery.com/\n\nThe following libraries are included in CKEditor under the SIL Open Font License, Version 1.1 (see Appendix E):\n\n* Font Awesome (included in the toolbar configurator) - Copyright (C) 2012 by Dave Gandy.\n\nThe following libraries are included in CKEditor under the BSD-3 License (see Appendix F):\n\n* highlight.js (included in the `codesnippet` plugin) - Copyright (c) 2006, Ivan Sagalaev.\n* YUI Library (included in the `uicolor` plugin) - Copyright (c) 2009, Yahoo! Inc.\n\n\nTrademarks\n----------\n\nCKEditor is a trademark of CKSource - Frederico Knabben. All other brand\nand product names are trademarks, registered trademarks or service\nmarks of their respective holders.\n\n---\n\nAppendix A: The GPL License\n---------------------------\n\n```\nGNU GENERAL PUBLIC LICENSE\nVersion 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\n 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\nPreamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware-to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Lesser General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\nGNU GENERAL PUBLIC LICENSE\nTERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\nNO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\nEND OF TERMS AND CONDITIONS\n```\n\nAppendix B: The LGPL License\n----------------------------\n\n```\nGNU LESSER GENERAL PUBLIC LICENSE\nVersion 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n[This is the first released version of the Lesser GPL.  It also counts\n as the successor of the GNU Library Public License, version 2, hence\n the version number 2.1.]\n\nPreamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicenses are intended to guarantee your freedom to share and change\nfree software-to make sure the software is free for all its users.\n\n  This license, the Lesser General Public License, applies to some\nspecially designated software packages-typically libraries-of the\nFree Software Foundation and other authors who decide to use it.  You\ncan use it too, but we suggest you first think carefully about whether\nthis license or the ordinary General Public License is the better\nstrategy to use in any particular case, based on the explanations below.\n\n  When we speak of free software, we are referring to freedom of use,\nnot price.  Our General Public Licenses are designed to make sure that\nyou have the freedom to distribute copies of free software (and charge\nfor this service if you wish); that you receive source code or can get\nit if you want it; that you can change the software and use pieces of\nit in new free programs; and that you are informed that you can do\nthese things.\n\n  To protect your rights, we need to make restrictions that forbid\ndistributors to deny you these rights or to ask you to surrender these\nrights.  These restrictions translate to certain responsibilities for\nyou if you distribute copies of the library or if you modify it.\n\n  For example, if you distribute copies of the library, whether gratis\nor for a fee, you must give the recipients all the rights that we gave\nyou.  You must make sure that they, too, receive or can get the source\ncode.  If you link other code with the library, you must provide\ncomplete object files to the recipients, so that they can relink them\nwith the library after making changes to the library and recompiling\nit.  And you must show them these terms so they know their rights.\n\n  We protect your rights with a two-step method: (1) we copyright the\nlibrary, and (2) we offer you this license, which gives you legal\npermission to copy, distribute and/or modify the library.\n\n  To protect each distributor, we want to make it very clear that\nthere is no warranty for the free library.  Also, if the library is\nmodified by someone else and passed on, the recipients should know\nthat what they have is not the original version, so that the original\nauthor's reputation will not be affected by problems that might be\nintroduced by others.\n\n  Finally, software patents pose a constant threat to the existence of\nany free program.  We wish to make sure that a company cannot\neffectively restrict the users of a free program by obtaining a\nrestrictive license from a patent holder.  Therefore, we insist that\nany patent license obtained for a version of the library must be\nconsistent with the full freedom of use specified in this license.\n\n  Most GNU software, including some libraries, is covered by the\nordinary GNU General Public License.  This license, the GNU Lesser\nGeneral Public License, applies to certain designated libraries, and\nis quite different from the ordinary General Public License.  We use\nthis license for certain libraries in order to permit linking those\nlibraries into non-free programs.\n\n  When a program is linked with a library, whether statically or using\na shared library, the combination of the two is legally speaking a\ncombined work, a derivative of the original library.  The ordinary\nGeneral Public License therefore permits such linking only if the\nentire combination fits its criteria of freedom.  The Lesser General\nPublic License permits more lax criteria for linking other code with\nthe library.\n\n  We call this license the \"Lesser\" General Public License because it\ndoes Less to protect the user's freedom than the ordinary General\nPublic License.  It also provides other free software developers Less\nof an advantage over competing non-free programs.  These disadvantages\nare the reason we use the ordinary General Public License for many\nlibraries.  However, the Lesser license provides advantages in certain\nspecial circumstances.\n\n  For example, on rare occasions, there may be a special need to\nencourage the widest possible use of a certain library, so that it becomes\na de-facto standard.  To achieve this, non-free programs must be\nallowed to use the library.  A more frequent case is that a free\nlibrary does the same job as widely used non-free libraries.  In this\ncase, there is little to gain by limiting the free library to free\nsoftware only, so we use the Lesser General Public License.\n\n  In other cases, permission to use a particular library in non-free\nprograms enables a greater number of people to use a large body of\nfree software.  For example, permission to use the GNU C Library in\nnon-free programs enables many more people to use the whole GNU\noperating system, as well as its variant, the GNU/Linux operating\nsystem.\n\n  Although the Lesser General Public License is Less protective of the\nusers' freedom, it does ensure that the user of a program that is\nlinked with the Library has the freedom and the wherewithal to run\nthat program using a modified version of the Library.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.  Pay close attention to the difference between a\n\"work based on the library\" and a \"work that uses the library\".  The\nformer contains code derived from the library, whereas the latter must\nbe combined with the library in order to run.\n\nGNU LESSER GENERAL PUBLIC LICENSE\nTERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License Agreement applies to any software library or other\nprogram which contains a notice placed by the copyright holder or\nother authorized party saying it may be distributed under the terms of\nthis Lesser General Public License (also called \"this License\").\nEach licensee is addressed as \"you\".\n\n  A \"library\" means a collection of software functions and/or data\nprepared so as to be conveniently linked with application programs\n(which use some of those functions and data) to form executables.\n\n  The \"Library\", below, refers to any such software library or work\nwhich has been distributed under these terms.  A \"work based on the\nLibrary\" means either the Library or any derivative work under\ncopyright law: that is to say, a work containing the Library or a\nportion of it, either verbatim or with modifications and/or translated\nstraightforwardly into another language.  (Hereinafter, translation is\nincluded without limitation in the term \"modification\".)\n\n  \"Source code\" for a work means the preferred form of the work for\nmaking modifications to it.  For a library, complete source code means\nall the source code for all modules it contains, plus any associated\ninterface definition files, plus the scripts used to control compilation\nand installation of the library.\n\n  Activities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning a program using the Library is not restricted, and output from\nsuch a program is covered only if its contents constitute a work based\non the Library (independent of the use of the Library in a tool for\nwriting it).  Whether that is true depends on what the Library does\nand what the program that uses the Library does.\n\n  1. You may copy and distribute verbatim copies of the Library's\ncomplete source code as you receive it, in any medium, provided that\nyou conspicuously and appropriately publish on each copy an\nappropriate copyright notice and disclaimer of warranty; keep intact\nall the notices that refer to this License and to the absence of any\nwarranty; and distribute a copy of this License along with the\nLibrary.\n\n  You may charge a fee for the physical act of transferring a copy,\nand you may at your option offer warranty protection in exchange for a\nfee.\n\n  2. You may modify your copy or copies of the Library or any portion\nof it, thus forming a work based on the Library, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) The modified work must itself be a software library.\n\n    b) You must cause the files modified to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    c) You must cause the whole of the work to be licensed at no\n    charge to all third parties under the terms of this License.\n\n    d) If a facility in the modified Library refers to a function or a\n    table of data to be supplied by an application program that uses\n    the facility, other than as an argument passed when the facility\n    is invoked, then you must make a good faith effort to ensure that,\n    in the event an application does not supply such function or\n    table, the facility still operates, and performs whatever part of\n    its purpose remains meaningful.\n\n    (For example, a function in a library to compute square roots has\n    a purpose that is entirely well-defined independent of the\n    application.  Therefore, Subsection 2d requires that any\n    application-supplied function or table used by this function must\n    be optional: if the application does not supply it, the square\n    root function must still compute square roots.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Library,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Library, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote\nit.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Library.\n\nIn addition, mere aggregation of another work not based on the Library\nwith the Library (or with a work based on the Library) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may opt to apply the terms of the ordinary GNU General Public\nLicense instead of this License to a given copy of the Library.  To do\nthis, you must alter all the notices that refer to this License, so\nthat they refer to the ordinary GNU General Public License, version 2,\ninstead of to this License.  (If a newer version than version 2 of the\nordinary GNU General Public License has appeared, then you can specify\nthat version instead if you wish.)  Do not make any other change in\nthese notices.\n\n  Once this change is made in a given copy, it is irreversible for\nthat copy, so the ordinary GNU General Public License applies to all\nsubsequent copies and derivative works made from that copy.\n\n  This option is useful when you wish to copy part of the code of\nthe Library into a program that is not a library.\n\n  4. You may copy and distribute the Library (or a portion or\nderivative of it, under Section 2) in object code or executable form\nunder the terms of Sections 1 and 2 above provided that you accompany\nit with the complete corresponding machine-readable source code, which\nmust be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange.\n\n  If distribution of object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the\nsource code from the same place satisfies the requirement to\ndistribute the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  5. A program that contains no derivative of any portion of the\nLibrary, but is designed to work with the Library by being compiled or\nlinked with it, is called a \"work that uses the Library\".  Such a\nwork, in isolation, is not a derivative work of the Library, and\ntherefore falls outside the scope of this License.\n\n  However, linking a \"work that uses the Library\" with the Library\ncreates an executable that is a derivative of the Library (because it\ncontains portions of the Library), rather than a \"work that uses the\nlibrary\".  The executable is therefore covered by this License.\nSection 6 states terms for distribution of such executables.\n\n  When a \"work that uses the Library\" uses material from a header file\nthat is part of the Library, the object code for the work may be a\nderivative work of the Library even though the source code is not.\nWhether this is true is especially significant if the work can be\nlinked without the Library, or if the work is itself a library.  The\nthreshold for this to be true is not precisely defined by law.\n\n  If such an object file uses only numerical parameters, data\nstructure layouts and accessors, and small macros and small inline\nfunctions (ten lines or less in length), then the use of the object\nfile is unrestricted, regardless of whether it is legally a derivative\nwork.  (Executables containing this object code plus portions of the\nLibrary will still fall under Section 6.)\n\n  Otherwise, if the work is a derivative of the Library, you may\ndistribute the object code for the work under the terms of Section 6.\nAny executables containing that work also fall under Section 6,\nwhether or not they are linked directly with the Library itself.\n\n  6. As an exception to the Sections above, you may also combine or\nlink a \"work that uses the Library\" with the Library to produce a\nwork containing portions of the Library, and distribute that work\nunder terms of your choice, provided that the terms permit\nmodification of the work for the customer's own use and reverse\nengineering for debugging such modifications.\n\n  You must give prominent notice with each copy of the work that the\nLibrary is used in it and that the Library and its use are covered by\nthis License.  You must supply a copy of this License.  If the work\nduring execution displays copyright notices, you must include the\ncopyright notice for the Library among them, as well as a reference\ndirecting the user to the copy of this License.  Also, you must do one\nof these things:\n\n    a) Accompany the work with the complete corresponding\n    machine-readable source code for the Library including whatever\n    changes were used in the work (which must be distributed under\n    Sections 1 and 2 above); and, if the work is an executable linked\n    with the Library, with the complete machine-readable \"work that\n    uses the Library\", as object code and/or source code, so that the\n    user can modify the Library and then relink to produce a modified\n    executable containing the modified Library.  (It is understood\n    that the user who changes the contents of definitions files in the\n    Library will not necessarily be able to recompile the application\n    to use the modified definitions.)\n\n    b) Use a suitable shared library mechanism for linking with the\n    Library.  A suitable mechanism is one that (1) uses at run time a\n    copy of the library already present on the user's computer system,\n    rather than copying library functions into the executable, and (2)\n    will operate properly with a modified version of the library, if\n    the user installs one, as long as the modified version is\n    interface-compatible with the version that the work was made with.\n\n    c) Accompany the work with a written offer, valid for at\n    least three years, to give the same user the materials\n    specified in Subsection 6a, above, for a charge no more\n    than the cost of performing this distribution.\n\n    d) If distribution of the work is made by offering access to copy\n    from a designated place, offer equivalent access to copy the above\n    specified materials from the same place.\n\n    e) Verify that the user has already received a copy of these\n    materials or that you have already sent this user a copy.\n\n  For an executable, the required form of the \"work that uses the\nLibrary\" must include any data and utility programs needed for\nreproducing the executable from it.  However, as a special exception,\nthe materials to be distributed need not include anything that is\nnormally distributed (in either source or binary form) with the major\ncomponents (compiler, kernel, and so on) of the operating system on\nwhich the executable runs, unless that component itself accompanies\nthe executable.\n\n  It may happen that this requirement contradicts the license\nrestrictions of other proprietary libraries that do not normally\naccompany the operating system.  Such a contradiction means you cannot\nuse both them and the Library together in an executable that you\ndistribute.\n\n  7. You may place library facilities that are a work based on the\nLibrary side-by-side in a single library together with other library\nfacilities not covered by this License, and distribute such a combined\nlibrary, provided that the separate distribution of the work based on\nthe Library and of the other library facilities is otherwise\npermitted, and provided that you do these two things:\n\n    a) Accompany the combined library with a copy of the same work\n    based on the Library, uncombined with any other library\n    facilities.  This must be distributed under the terms of the\n    Sections above.\n\n    b) Give prominent notice with the combined library of the fact\n    that part of it is a work based on the Library, and explaining\n    where to find the accompanying uncombined form of the same work.\n\n  8. You may not copy, modify, sublicense, link with, or distribute\nthe Library except as expressly provided under this License.  Any\nattempt otherwise to copy, modify, sublicense, link with, or\ndistribute the Library is void, and will automatically terminate your\nrights under this License.  However, parties who have received copies,\nor rights, from you under this License will not have their licenses\nterminated so long as such parties remain in full compliance.\n\n  9. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Library or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Library (or any work based on the\nLibrary), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Library or works based on it.\n\n  10. Each time you redistribute the Library (or any work based on the\nLibrary), the recipient automatically receives a license from the\noriginal licensor to copy, distribute, link with or modify the Library\nsubject to these terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties with\nthis License.\n\n  11. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Library at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Library by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Library.\n\nIf any portion of this section is held invalid or unenforceable under any\nparticular circumstance, the balance of the section is intended to apply,\nand the section as a whole is intended to apply in other circumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  12. If the distribution and/or use of the Library is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Library under this License may add\nan explicit geographical distribution limitation excluding those countries,\nso that distribution is permitted only in or among countries not thus\nexcluded.  In such case, this License incorporates the limitation as if\nwritten in the body of this License.\n\n  13. The Free Software Foundation may publish revised and/or new\nversions of the Lesser General Public License from time to time.\nSuch new versions will be similar in spirit to the present version,\nbut may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Library\nspecifies a version number of this License which applies to it and\n\"any later version\", you have the option of following the terms and\nconditions either of that version or of any later version published by\nthe Free Software Foundation.  If the Library does not specify a\nlicense version number, you may choose any version ever published by\nthe Free Software Foundation.\n\n  14. If you wish to incorporate parts of the Library into other free\nprograms whose distribution conditions are incompatible with these,\nwrite to the author to ask for permission.  For software which is\ncopyrighted by the Free Software Foundation, write to the Free\nSoftware Foundation; we sometimes make exceptions for this.  Our\ndecision will be guided by the two goals of preserving the free status\nof all derivatives of our free software and of promoting the sharing\nand reuse of software generally.\n\nNO WARRANTY\n\n  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\nWARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\nOTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\nKIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\nLIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\nTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\nWRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\nFOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\nCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\nLIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\nRENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\nEND OF TERMS AND CONDITIONS\n```\n\nAppendix C: The MPL License\n---------------------------\n\n```\nMOZILLA PUBLIC LICENSE\nVersion 1.1\n\n1. Definitions.\n\n     1.0.1. \"Commercial Use\" means distribution or otherwise making the\n     Covered Code available to a third party.\n\n     1.1. \"Contributor\" means each entity that creates or contributes to\n     the creation of Modifications.\n\n     1.2. \"Contributor Version\" means the combination of the Original\n     Code, prior Modifications used by a Contributor, and the Modifications\n     made by that particular Contributor.\n\n     1.3. \"Covered Code\" means the Original Code or Modifications or the\n     combination of the Original Code and Modifications, in each case\n     including portions thereof.\n\n     1.4. \"Electronic Distribution Mechanism\" means a mechanism generally\n     accepted in the software development community for the electronic\n     transfer of data.\n\n     1.5. \"Executable\" means Covered Code in any form other than Source\n     Code.\n\n     1.6. \"Initial Developer\" means the individual or entity identified\n     as the Initial Developer in the Source Code notice required by Exhibit\n     A.\n\n     1.7. \"Larger Work\" means a work which combines Covered Code or\n     portions thereof with code not governed by the terms of this License.\n\n     1.8. \"License\" means this document.\n\n     1.8.1. \"Licensable\" means having the right to grant, to the maximum\n     extent possible, whether at the time of the initial grant or\n     subsequently acquired, any and all of the rights conveyed herein.\n\n     1.9. \"Modifications\" means any addition to or deletion from the\n     substance or structure of either the Original Code or any previous\n     Modifications. When Covered Code is released as a series of files, a\n     Modification is:\n          A. Any addition to or deletion from the contents of a file\n          containing Original Code or previous Modifications.\n\n          B. Any new file that contains any part of the Original Code or\n          previous Modifications.\n\n     1.10. \"Original Code\" means Source Code of computer software code\n     which is described in the Source Code notice required by Exhibit A as\n     Original Code, and which, at the time of its release under this\n     License is not already Covered Code governed by this License.\n\n     1.10.1. \"Patent Claims\" means any patent claim(s), now owned or\n     hereafter acquired, including without limitation,  method, process,\n     and apparatus claims, in any patent Licensable by grantor.\n\n     1.11. \"Source Code\" means the preferred form of the Covered Code for\n     making modifications to it, including all modules it contains, plus\n     any associated interface definition files, scripts used to control\n     compilation and installation of an Executable, or source code\n     differential comparisons against either the Original Code or another\n     well known, available Covered Code of the Contributor's choice. The\n     Source Code can be in a compressed or archival form, provided the\n     appropriate decompression or de-archiving software is widely available\n     for no charge.\n\n     1.12. \"You\" (or \"Your\")  means an individual or a legal entity\n     exercising rights under, and complying with all of the terms of, this\n     License or a future version of this License issued under Section 6.1.\n     For legal entities, \"You\" includes any entity which controls, is\n     controlled by, or is under common control with You. For purposes of\n     this definition, \"control\" means (a) the power, direct or indirect,\n     to cause the direction or management of such entity, whether by\n     contract or otherwise, or (b) ownership of more than fifty percent\n     (50%) of the outstanding shares or beneficial ownership of such\n     entity.\n\n2. Source Code License.\n\n     2.1. The Initial Developer Grant.\n     The Initial Developer hereby grants You a world-wide, royalty-free,\n     non-exclusive license, subject to third party intellectual property\n     claims:\n          (a)  under intellectual property rights (other than patent or\n          trademark) Licensable by Initial Developer to use, reproduce,\n          modify, display, perform, sublicense and distribute the Original\n          Code (or portions thereof) with or without Modifications, and/or\n          as part of a Larger Work; and\n\n          (b) under Patents Claims infringed by the making, using or\n          selling of Original Code, to make, have made, use, practice,\n          sell, and offer for sale, and/or otherwise dispose of the\n          Original Code (or portions thereof).\n\n          (c) the licenses granted in this Section 2.1(a) and (b) are\n          effective on the date Initial Developer first distributes\n          Original Code under the terms of this License.\n\n          (d) Notwithstanding Section 2.1(b) above, no patent license is\n          granted: 1) for code that You delete from the Original Code; 2)\n          separate from the Original Code;  or 3) for infringements caused\n          by: i) the modification of the Original Code or ii) the\n          combination of the Original Code with other software or devices.\n\n     2.2. Contributor Grant.\n     Subject to third party intellectual property claims, each Contributor\n     hereby grants You a world-wide, royalty-free, non-exclusive license\n\n          (a)  under intellectual property rights (other than patent or\n          trademark) Licensable by Contributor, to use, reproduce, modify,\n          display, perform, sublicense and distribute the Modifications\n          created by such Contributor (or portions thereof) either on an\n          unmodified basis, with other Modifications, as Covered Code\n          and/or as part of a Larger Work; and\n\n          (b) under Patent Claims infringed by the making, using, or\n          selling of  Modifications made by that Contributor either alone\n          and/or in combination with its Contributor Version (or portions\n          of such combination), to make, use, sell, offer for sale, have\n          made, and/or otherwise dispose of: 1) Modifications made by that\n          Contributor (or portions thereof); and 2) the combination of\n          Modifications made by that Contributor with its Contributor\n          Version (or portions of such combination).\n\n          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are\n          effective on the date Contributor first makes Commercial Use of\n          the Covered Code.\n\n          (d)    Notwithstanding Section 2.2(b) above, no patent license is\n          granted: 1) for any code that Contributor has deleted from the\n          Contributor Version; 2)  separate from the Contributor Version;\n          3)  for infringements caused by: i) third party modifications of\n          Contributor Version or ii)  the combination of Modifications made\n          by that Contributor with other software  (except as part of the\n          Contributor Version) or other devices; or 4) under Patent Claims\n          infringed by Covered Code in the absence of Modifications made by\n          that Contributor.\n\n3. Distribution Obligations.\n\n     3.1. Application of License.\n     The Modifications which You create or to which You contribute are\n     governed by the terms of this License, including without limitation\n     Section 2.2. The Source Code version of Covered Code may be\n     distributed only under the terms of this License or a future version\n     of this License released under Section 6.1, and You must include a\n     copy of this License with every copy of the Source Code You\n     distribute. You may not offer or impose any terms on any Source Code\n     version that alters or restricts the applicable version of this\n     License or the recipients' rights hereunder. However, You may include\n     an additional document offering the additional rights described in\n     Section 3.5.\n\n     3.2. Availability of Source Code.\n     Any Modification which You create or to which You contribute must be\n     made available in Source Code form under the terms of this License\n     either on the same media as an Executable version or via an accepted\n     Electronic Distribution Mechanism to anyone to whom you made an\n     Executable version available; and if made available via Electronic\n     Distribution Mechanism, must remain available for at least twelve (12)\n     months after the date it initially became available, or at least six\n     (6) months after a subsequent version of that particular Modification\n     has been made available to such recipients. You are responsible for\n     ensuring that the Source Code version remains available even if the\n     Electronic Distribution Mechanism is maintained by a third party.\n\n     3.3. Description of Modifications.\n     You must cause all Covered Code to which You contribute to contain a\n     file documenting the changes You made to create that Covered Code and\n     the date of any change. You must include a prominent statement that\n     the Modification is derived, directly or indirectly, from Original\n     Code provided by the Initial Developer and including the name of the\n     Initial Developer in (a) the Source Code, and (b) in any notice in an\n     Executable version or related documentation in which You describe the\n     origin or ownership of the Covered Code.\n\n     3.4. Intellectual Property Matters\n          (a) Third Party Claims.\n          If Contributor has knowledge that a license under a third party's\n          intellectual property rights is required to exercise the rights\n          granted by such Contributor under Sections 2.1 or 2.2,\n          Contributor must include a text file with the Source Code\n          distribution titled \"LEGAL\" which describes the claim and the\n          party making the claim in sufficient detail that a recipient will\n          know whom to contact. If Contributor obtains such knowledge after\n          the Modification is made available as described in Section 3.2,\n          Contributor shall promptly modify the LEGAL file in all copies\n          Contributor makes available thereafter and shall take other steps\n          (such as notifying appropriate mailing lists or newsgroups)\n          reasonably calculated to inform those who received the Covered\n          Code that new knowledge has been obtained.\n\n          (b) Contributor APIs.\n          If Contributor's Modifications include an application programming\n          interface and Contributor has knowledge of patent licenses which\n          are reasonably necessary to implement that API, Contributor must\n          also include this information in the LEGAL file.\n\n               (c)    Representations.\n          Contributor represents that, except as disclosed pursuant to\n          Section 3.4(a) above, Contributor believes that Contributor's\n          Modifications are Contributor's original creation(s) and/or\n          Contributor has sufficient rights to grant the rights conveyed by\n          this License.\n\n     3.5. Required Notices.\n     You must duplicate the notice in Exhibit A in each file of the Source\n     Code.  If it is not possible to put such notice in a particular Source\n     Code file due to its structure, then You must include such notice in a\n     location (such as a relevant directory) where a user would be likely\n     to look for such a notice.  If You created one or more Modification(s)\n     You may add your name as a Contributor to the notice described in\n     Exhibit A.  You must also duplicate this License in any documentation\n     for the Source Code where You describe recipients' rights or ownership\n     rights relating to Covered Code.  You may choose to offer, and to\n     charge a fee for, warranty, support, indemnity or liability\n     obligations to one or more recipients of Covered Code. However, You\n     may do so only on Your own behalf, and not on behalf of the Initial\n     Developer or any Contributor. You must make it absolutely clear than\n     any such warranty, support, indemnity or liability obligation is\n     offered by You alone, and You hereby agree to indemnify the Initial\n     Developer and every Contributor for any liability incurred by the\n     Initial Developer or such Contributor as a result of warranty,\n     support, indemnity or liability terms You offer.\n\n     3.6. Distribution of Executable Versions.\n     You may distribute Covered Code in Executable form only if the\n     requirements of Section 3.1-3.5 have been met for that Covered Code,\n     and if You include a notice stating that the Source Code version of\n     the Covered Code is available under the terms of this License,\n     including a description of how and where You have fulfilled the\n     obligations of Section 3.2. The notice must be conspicuously included\n     in any notice in an Executable version, related documentation or\n     collateral in which You describe recipients' rights relating to the\n     Covered Code. You may distribute the Executable version of Covered\n     Code or ownership rights under a license of Your choice, which may\n     contain terms different from this License, provided that You are in\n     compliance with the terms of this License and that the license for the\n     Executable version does not attempt to limit or alter the recipient's\n     rights in the Source Code version from the rights set forth in this\n     License. If You distribute the Executable version under a different\n     license You must make it absolutely clear that any terms which differ\n     from this License are offered by You alone, not by the Initial\n     Developer or any Contributor. You hereby agree to indemnify the\n     Initial Developer and every Contributor for any liability incurred by\n     the Initial Developer or such Contributor as a result of any such\n     terms You offer.\n\n     3.7. Larger Works.\n     You may create a Larger Work by combining Covered Code with other code\n     not governed by the terms of this License and distribute the Larger\n     Work as a single product. In such a case, You must make sure the\n     requirements of this License are fulfilled for the Covered Code.\n\n4. Inability to Comply Due to Statute or Regulation.\n\n     If it is impossible for You to comply with any of the terms of this\n     License with respect to some or all of the Covered Code due to\n     statute, judicial order, or regulation then You must: (a) comply with\n     the terms of this License to the maximum extent possible; and (b)\n     describe the limitations and the code they affect. Such description\n     must be included in the LEGAL file described in Section 3.4 and must\n     be included with all distributions of the Source Code. Except to the\n     extent prohibited by statute or regulation, such description must be\n     sufficiently detailed for a recipient of ordinary skill to be able to\n     understand it.\n\n5. Application of this License.\n\n     This License applies to code to which the Initial Developer has\n     attached the notice in Exhibit A and to related Covered Code.\n\n6. Versions of the License.\n\n     6.1. New Versions.\n     Netscape Communications Corporation (\"Netscape\") may publish revised\n     and/or new versions of the License from time to time. Each version\n     will be given a distinguishing version number.\n\n     6.2. Effect of New Versions.\n     Once Covered Code has been published under a particular version of the\n     License, You may always continue to use it under the terms of that\n     version. You may also choose to use such Covered Code under the terms\n     of any subsequent version of the License published by Netscape. No one\n     other than Netscape has the right to modify the terms applicable to\n     Covered Code created under this License.\n\n     6.3. Derivative Works.\n     If You create or use a modified version of this License (which you may\n     only do in order to apply it to code which is not already Covered Code\n     governed by this License), You must (a) rename Your license so that\n     the phrases \"Mozilla\", \"MOZILLAPL\", \"MOZPL\", \"Netscape\",\n     \"MPL\", \"NPL\" or any confusingly similar phrase do not appear in your\n     license (except to note that your license differs from this License)\n     and (b) otherwise make it clear that Your version of the license\n     contains terms which differ from the Mozilla Public License and\n     Netscape Public License. (Filling in the name of the Initial\n     Developer, Original Code or Contributor in the notice described in\n     Exhibit A shall not of themselves be deemed to be modifications of\n     this License.)\n\n7. DISCLAIMER OF WARRANTY.\n\n     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN \"AS IS\" BASIS,\n     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,\n     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF\n     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.\n     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE\n     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,\n     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE\n     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER\n     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF\n     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.\n\n8. TERMINATION.\n\n     8.1.  This License and the rights granted hereunder will terminate\n     automatically if You fail to comply with terms herein and fail to cure\n     such breach within 30 days of becoming aware of the breach. All\n     sublicenses to the Covered Code which are properly granted shall\n     survive any termination of this License. Provisions which, by their\n     nature, must remain in effect beyond the termination of this License\n     shall survive.\n\n     8.2.  If You initiate litigation by asserting a patent infringement\n     claim (excluding declatory judgment actions) against Initial Developer\n     or a Contributor (the Initial Developer or Contributor against whom\n     You file such action is referred to as \"Participant\")  alleging that:\n\n     (a)  such Participant's Contributor Version directly or indirectly\n     infringes any patent, then any and all rights granted by such\n     Participant to You under Sections 2.1 and/or 2.2 of this License\n     shall, upon 60 days notice from Participant terminate prospectively,\n     unless if within 60 days after receipt of notice You either: (i)\n     agree in writing to pay Participant a mutually agreeable reasonable\n     royalty for Your past and future use of Modifications made by such\n     Participant, or (ii) withdraw Your litigation claim with respect to\n     the Contributor Version against such Participant.  If within 60 days\n     of notice, a reasonable royalty and payment arrangement are not\n     mutually agreed upon in writing by the parties or the litigation claim\n     is not withdrawn, the rights granted by Participant to You under\n     Sections 2.1 and/or 2.2 automatically terminate at the expiration of\n     the 60 day notice period specified above.\n\n     (b)  any software, hardware, or device, other than such Participant's\n     Contributor Version, directly or indirectly infringes any patent, then\n     any rights granted to You by such Participant under Sections 2.1(b)\n     and 2.2(b) are revoked effective as of the date You first made, used,\n     sold, distributed, or had made, Modifications made by that\n     Participant.\n\n     8.3.  If You assert a patent infringement claim against Participant\n     alleging that such Participant's Contributor Version directly or\n     indirectly infringes any patent where such claim is resolved (such as\n     by license or settlement) prior to the initiation of patent\n     infringement litigation, then the reasonable value of the licenses\n     granted by such Participant under Sections 2.1 or 2.2 shall be taken\n     into account in determining the amount or value of any payment or\n     license.\n\n     8.4.  In the event of termination under Sections 8.1 or 8.2 above,\n     all end user license agreements (excluding distributors and resellers)\n     which have been validly granted by You or any distributor hereunder\n     prior to termination shall survive termination.\n\n9. LIMITATION OF LIABILITY.\n\n     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT\n     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL\n     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,\n     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR\n     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY\n     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,\n     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER\n     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN\n     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF\n     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY\n     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW\n     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE\n     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO\n     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.\n\n10. U.S. GOVERNMENT END USERS.\n\n     The Covered Code is a \"commercial item,\" as that term is defined in\n     48 C.F.R. 2.101 (Oct. 1995), consisting of \"commercial computer\n     software\" and \"commercial computer software documentation,\" as such\n     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48\n     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),\n     all U.S. Government End Users acquire Covered Code with only those\n     rights set forth herein.\n\n11. MISCELLANEOUS.\n\n     This License represents the complete agreement concerning subject\n     matter hereof. If any provision of this License is held to be\n     unenforceable, such provision shall be reformed only to the extent\n     necessary to make it enforceable. This License shall be governed by\n     California law provisions (except to the extent applicable law, if\n     any, provides otherwise), excluding its conflict-of-law provisions.\n     With respect to disputes in which at least one party is a citizen of,\n     or an entity chartered or registered to do business in the United\n     States of America, any litigation relating to this License shall be\n     subject to the jurisdiction of the Federal Courts of the Northern\n     District of California, with venue lying in Santa Clara County,\n     California, with the losing party responsible for costs, including\n     without limitation, court costs and reasonable attorneys' fees and\n     expenses. The application of the United Nations Convention on\n     Contracts for the International Sale of Goods is expressly excluded.\n     Any law or regulation which provides that the language of a contract\n     shall be construed against the drafter shall not apply to this\n     License.\n\n12. RESPONSIBILITY FOR CLAIMS.\n\n     As between Initial Developer and the Contributors, each party is\n     responsible for claims and damages arising, directly or indirectly,\n     out of its utilization of rights under this License and You agree to\n     work with Initial Developer and Contributors to distribute such\n     responsibility on an equitable basis. Nothing herein is intended or\n     shall be deemed to constitute any admission of liability.\n\n13. MULTIPLE-LICENSED CODE.\n\n     Initial Developer may designate portions of the Covered Code as\n     \"Multiple-Licensed\".  \"Multiple-Licensed\" means that the Initial\n     Developer permits you to utilize portions of the Covered Code under\n     Your choice of the NPL or the alternative licenses, if any, specified\n     by the Initial Developer in the file described in Exhibit A.\n\nEXHIBIT A -Mozilla Public License.\n\n     ``The contents of this file are subject to the Mozilla Public License\n     Version 1.1 (the \"License\"); you may not use this file except in\n     compliance with the License. You may obtain a copy of the License at\n     http://www.mozilla.org/MPL/\n\n     Software distributed under the License is distributed on an \"AS IS\"\n     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the\n     License for the specific language governing rights and limitations\n     under the License.\n\n     The Original Code is ______________________________________.\n\n     The Initial Developer of the Original Code is ________________________.\n     Portions created by ______________________ are Copyright (C) ______\n     _______________________. All Rights Reserved.\n\n     Contributor(s): ______________________________________.\n\n     Alternatively, the contents of this file may be used under the terms\n     of the _____ license (the  \"[___] License\"), in which case the\n     provisions of [______] License are applicable instead of those\n     above.  If you wish to allow use of your version of this file only\n     under the terms of the [____] License and not to allow others to use\n     your version of this file under the MPL, indicate your decision by\n     deleting  the provisions above and replace  them with the notice and\n     other provisions required by the [___] License.  If you do not delete\n     the provisions above, a recipient may use your version of this file\n     under either the MPL or the [___] License.\"\n\n     [NOTE: The text of this Exhibit A may differ slightly from the text of\n     the notices in the Source Code files of the Original Code. You should\n     use the text of this Exhibit A rather than the text found in the\n     Original Code Source Code for Your Modifications.]\n```\n\nAppendix D: The MIT License\n---------------------------\n\n```\nThe MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n```\n\nAppendix E: The SIL Open Font License Version 1.1\n---------------------------------------------\n\n```\nSIL OPEN FONT LICENSE Version 1.1 - 26 February 2007\n-----------------------------------------------------------\n\nPREAMBLE\nThe goals of the Open Font License (OFL) are to stimulate worldwide\ndevelopment of collaborative font projects, to support the font creation\nefforts of academic and linguistic communities, and to provide a free and\nopen framework in which fonts may be shared and improved in partnership\nwith others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves. The\nfonts, including any derivative works, can be bundled, embedded,\nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works. The fonts and derivatives,\nhowever, cannot be released under any other type of license. The\nrequirement for fonts to remain under this license does not apply\nto any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\"Font Software\" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such. This may\ninclude source files, build scripts and documentation.\n\n\"Reserved Font Name\" refers to any names specified as such after the\ncopyright statement(s).\n\n\"Original Version\" refers to the collection of Font Software components as\ndistributed by the Copyright Holder(s).\n\n\"Modified Version\" refers to any derivative made by adding to, deleting,\nor substituting -- in part or in whole -- any of the components of the\nOriginal Version, by changing formats or by porting the Font Software to a\nnew environment.\n\n\"Author\" refers to any designer, engineer, programmer, technical\nwriter or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,\nin Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\nredistributed and/or sold with any software, provided that each copy\ncontains the above copyright notice and this license. These can be\nincluded either as stand-alone text files, human-readable headers or\nin the appropriate machine-readable metadata fields within text or\nbinary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\nName(s) unless explicit written permission is granted by the corresponding\nCopyright Holder. This restriction only applies to the primary font name as\npresented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\nSoftware shall not be used to promote, endorse or advertise any\nModified Version, except to acknowledge the contribution(s) of the\nCopyright Holder(s) and the Author(s) or with their explicit written\npermission.\n\n5) The Font Software, modified or unmodified, in part or in whole,\nmust be distributed entirely under this license, and must not be\ndistributed under any other license. The requirement for fonts to\nremain under this license does not apply to any document created\nusing the Font Software.\n\nTERMINATION\nThis license becomes null and void if any of the above conditions are\nnot met.\n\nDISCLAIMER\nTHE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\nOTHER DEALINGS IN THE FONT SOFTWARE.\n```\n\nAppendix F: The BSD-3 License\n-----------------------------\n\n```\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n```\n\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/README.md",
    "content": "CKEditor 4\n==========\n\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.  \nhttp://ckeditor.com - See LICENSE.md for license information.\n\nCKEditor is a text editor to be used inside web pages. It's not a replacement\nfor desktop text editors like Word or OpenOffice, but a component to be used as\npart of web applications and websites.\n\n## Documentation\n\nThe full editor documentation is available online at the following address:\nhttp://docs.ckeditor.com\n\n## Installation\n\nInstalling CKEditor is an easy task. Just follow these simple steps:\n\n 1. **Download** the latest version from the CKEditor website:\n    http://ckeditor.com. You should have already completed this step, but be\n    sure you have the very latest version.\n 2. **Extract** (decompress) the downloaded file into the root of your website.\n\n**Note:** CKEditor is by default installed in the `ckeditor` folder. You can\nplace the files in whichever you want though.\n\n## Checking Your Installation\n\nThe editor comes with a few sample pages that can be used to verify that\ninstallation proceeded properly. Take a look at the `samples` directory.\n\nTo test your installation, just call the following page at your website:\n\n\thttp://<your site>/<CKEditor installation path>/samples/index.html\n\nFor example:\n\n\thttp://www.example.com/ckeditor/samples/index.html\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/adapters/jquery.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n(function(a){if(\"undefined\"==typeof a)throw Error(\"jQuery should be loaded before CKEditor jQuery adapter.\");if(\"undefined\"==typeof CKEDITOR)throw Error(\"CKEditor should be loaded before CKEditor jQuery adapter.\");CKEDITOR.config.jqueryOverrideVal=\"undefined\"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data(\"ckeditorInstance\");if(!a)throw\"CKEditor is not initialized yet, use ckeditor() with a callback.\";return a},\nckeditor:function(g,d){if(!CKEDITOR.env.isCompatible)throw Error(\"The environment is incompatible.\");if(!a.isFunction(g)){var m=d;d=g;g=m}var k=[];d=d||{};this.each(function(){var b=a(this),c=b.data(\"ckeditorInstance\"),f=b.data(\"_ckeditorInstanceLock\"),h=this,l=new a.Deferred;k.push(l.promise());if(c&&!f)g&&g.apply(c,[this]),l.resolve();else if(f)c.once(\"instanceReady\",function(){setTimeout(function(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),l.resolve()):setTimeout(arguments.callee,100)},0)},\nnull,null,9999);else{if(d.autoUpdateElement||\"undefined\"==typeof d.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)d.autoUpdateElementJquery=!0;d.autoUpdateElement=!1;b.data(\"_ckeditorInstanceLock\",!0);c=a(this).is(\"textarea\")?CKEDITOR.replace(h,d):CKEDITOR.inline(h,d);b.data(\"ckeditorInstance\",c);c.on(\"instanceReady\",function(d){var e=d.editor;setTimeout(function(){if(e.element){d.removeListener();e.on(\"dataReady\",function(){b.trigger(\"dataReady.ckeditor\",[e])});e.on(\"setData\",function(a){b.trigger(\"setData.ckeditor\",\n[e,a.data])});e.on(\"getData\",function(a){b.trigger(\"getData.ckeditor\",[e,a.data])},999);e.on(\"destroy\",function(){b.trigger(\"destroy.ckeditor\",[e])});e.on(\"save\",function(){a(h.form).submit();return!1},null,null,20);if(e.config.autoUpdateElementJquery&&b.is(\"textarea\")&&a(h.form).length){var c=function(){b.ckeditor(function(){e.updateElement()})};a(h.form).submit(c);a(h.form).bind(\"form-pre-serialize\",c);b.bind(\"destroy.ckeditor\",function(){a(h.form).unbind(\"submit\",c);a(h.form).unbind(\"form-pre-serialize\",\nc)})}e.on(\"destroy\",function(){b.removeData(\"ckeditorInstance\")});b.removeData(\"_ckeditorInstanceLock\");b.trigger(\"instanceReady.ckeditor\",[e]);g&&g.apply(e,[h]);l.resolve()}else setTimeout(arguments.callee,100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,k).then(function(){f.resolve()});this.editor=this.eq(0).data(\"ckeditorInstance\");return this}});CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(d){if(arguments.length){var m=\nthis,k=[],f=this.each(function(){var b=a(this),c=b.data(\"ckeditorInstance\");if(b.is(\"textarea\")&&c){var f=new a.Deferred;c.setData(d,function(){f.resolve()});k.push(f.promise());return!0}return g.call(b,d)});if(k.length){var b=new a.Deferred;a.when.apply(this,k).done(function(){b.resolveWith(m)});return b.promise()}return f}var f=a(this).eq(0),c=f.data(\"ckeditorInstance\");return f.is(\"textarea\")&&c?c.getData():g.call(f)}}))})(window.jQuery);"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/build-config.js",
    "content": "﻿/**\n * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * This file was added automatically by CKEditor builder.\n * You may re-use it at any time to build CKEditor again.\n *\n * If you would like to build CKEditor online again\n * (for example to upgrade), visit one the following links:\n *\n * (1) http://ckeditor.com/builder\n *     Visit online builder to build CKEditor from scratch.\n *\n * (2) http://ckeditor.com/builder/ba0d86b4a03f476b450cdf7d3057be62\n *     Visit online builder to build CKEditor, starting with the same setup as before.\n *\n * (3) http://ckeditor.com/builder/download/ba0d86b4a03f476b450cdf7d3057be62\n *     Straight download link to the latest version of CKEditor (Optimized) with the same setup as before.\n *\n * NOTE:\n *    This file is not used by CKEditor, you may remove it.\n *    Changing this file will not change your CKEditor configuration.\n */\n\nvar CKBUILDER_CONFIG = {\n\tskin: 'moono',\n\tpreset: 'standard',\n\tignore: [\n\t\t'.bender',\n\t\t'bender.js',\n\t\t'bender-err.log',\n\t\t'bender-out.log',\n\t\t'dev',\n\t\t'.DS_Store',\n\t\t'.editorconfig',\n\t\t'.gitattributes',\n\t\t'.gitignore',\n\t\t'gruntfile.js',\n\t\t'.idea',\n\t\t'.jscsrc',\n\t\t'.jshintignore',\n\t\t'.jshintrc',\n\t\t'less',\n\t\t'.mailmap',\n\t\t'node_modules',\n\t\t'package.json',\n\t\t'README.md',\n\t\t'tests'\n\t],\n\tplugins : {\n\t\t'a11yhelp' : 1,\n\t\t'about' : 1,\n\t\t'basicstyles' : 1,\n\t\t'blockquote' : 1,\n\t\t'clipboard' : 1,\n\t\t'contextmenu' : 1,\n\t\t'elementspath' : 1,\n\t\t'enterkey' : 1,\n\t\t'entities' : 1,\n\t\t'filebrowser' : 1,\n\t\t'floatingspace' : 1,\n\t\t'format' : 1,\n\t\t'horizontalrule' : 1,\n\t\t'htmlwriter' : 1,\n\t\t'image' : 1,\n\t\t'indentlist' : 1,\n\t\t'link' : 1,\n\t\t'list' : 1,\n\t\t'magicline' : 1,\n\t\t'maximize' : 1,\n\t\t'pastefromword' : 1,\n\t\t'pastetext' : 1,\n\t\t'removeformat' : 1,\n\t\t'resize' : 1,\n\t\t'scayt' : 1,\n\t\t'showborders' : 1,\n\t\t'sourcearea' : 1,\n\t\t'specialchar' : 1,\n\t\t'stylescombo' : 1,\n\t\t'tab' : 1,\n\t\t'table' : 1,\n\t\t'tabletools' : 1,\n\t\t'toolbar' : 1,\n\t\t'undo' : 1,\n\t\t'wsc' : 1,\n\t\t'wysiwygarea' : 1\n\t},\n\tlanguages : {\n\t\t'af' : 1,\n\t\t'ar' : 1,\n\t\t'bg' : 1,\n\t\t'bn' : 1,\n\t\t'bs' : 1,\n\t\t'ca' : 1,\n\t\t'cs' : 1,\n\t\t'cy' : 1,\n\t\t'da' : 1,\n\t\t'de' : 1,\n\t\t'de-ch' : 1,\n\t\t'el' : 1,\n\t\t'en' : 1,\n\t\t'en-au' : 1,\n\t\t'en-ca' : 1,\n\t\t'en-gb' : 1,\n\t\t'eo' : 1,\n\t\t'es' : 1,\n\t\t'et' : 1,\n\t\t'eu' : 1,\n\t\t'fa' : 1,\n\t\t'fi' : 1,\n\t\t'fo' : 1,\n\t\t'fr' : 1,\n\t\t'fr-ca' : 1,\n\t\t'gl' : 1,\n\t\t'gu' : 1,\n\t\t'he' : 1,\n\t\t'hi' : 1,\n\t\t'hr' : 1,\n\t\t'hu' : 1,\n\t\t'id' : 1,\n\t\t'is' : 1,\n\t\t'it' : 1,\n\t\t'ja' : 1,\n\t\t'ka' : 1,\n\t\t'km' : 1,\n\t\t'ko' : 1,\n\t\t'ku' : 1,\n\t\t'lt' : 1,\n\t\t'lv' : 1,\n\t\t'mk' : 1,\n\t\t'mn' : 1,\n\t\t'ms' : 1,\n\t\t'nb' : 1,\n\t\t'nl' : 1,\n\t\t'no' : 1,\n\t\t'pl' : 1,\n\t\t'pt' : 1,\n\t\t'pt-br' : 1,\n\t\t'ro' : 1,\n\t\t'ru' : 1,\n\t\t'si' : 1,\n\t\t'sk' : 1,\n\t\t'sl' : 1,\n\t\t'sq' : 1,\n\t\t'sr' : 1,\n\t\t'sr-latn' : 1,\n\t\t'sv' : 1,\n\t\t'th' : 1,\n\t\t'tr' : 1,\n\t\t'tt' : 1,\n\t\t'ug' : 1,\n\t\t'uk' : 1,\n\t\t'vi' : 1,\n\t\t'zh' : 1,\n\t\t'zh-cn' : 1\n\t}\n};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/ckeditor.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\\\\/])ckeditor\\.js(?:\\?.*|;.*)?$/i,d={timestamp:\"G14E\",version:\"4.5.7\",revision:\"e98277f\",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:\"unloaded\",basePath:function(){var b=window.CKEDITOR_BASEPATH||\"\";if(!b)for(var c=document.getElementsByTagName(\"script\"),d=0;d<c.length;d++){var k=c[d].src.match(a);if(k){b=k[1];break}}-1==b.indexOf(\":/\")&&\"//\"!=b.slice(0,2)&&(b=0===b.indexOf(\"/\")?location.href.match(/^.*?:\\/\\/[^\\/]*/)[0]+\nb:location.href.match(/^[^\\?]*\\/(?:)/)[0]+b);if(!b)throw'The CKEditor installation path could not be automatically detected. Please set the global variable \"CKEDITOR_BASEPATH\" before creating editor instances.';return b}(),getUrl:function(a){-1==a.indexOf(\":/\")&&0!==a.indexOf(\"/\")&&(a=this.basePath+a);this.timestamp&&\"/\"!=a.charAt(a.length-1)&&!/[&?]t=/.test(a)&&(a+=(0<=a.indexOf(\"?\")?\"\\x26\":\"?\")+\"t\\x3d\"+this.timestamp);return a},domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener(\"DOMContentLoaded\",\na,!1),b()):document.attachEvent&&\"complete\"===document.readyState&&(document.detachEvent(\"onreadystatechange\",a),b())}catch(c){}}function b(){for(var a;a=c.shift();)a()}var c=[];return function(b){function d(){try{document.documentElement.doScroll(\"left\")}catch(f){setTimeout(d,1);return}a()}c.push(b);\"complete\"===document.readyState&&setTimeout(a,1);if(1==c.length)if(document.addEventListener)document.addEventListener(\"DOMContentLoaded\",a,!1),window.addEventListener(\"load\",a,!1);else if(document.attachEvent){document.attachEvent(\"onreadystatechange\",\na);window.attachEvent(\"onload\",a);b=!1;try{b=!window.frameElement}catch(w){}document.documentElement.doScroll&&b&&d()}}}()},b=window.CKEDITOR_GETURL;if(b){var c=d.getUrl;d.getUrl=function(a){return b.call(d,a)||c.call(d,a)}}return d}());\nCKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(a){var d=CKEDITOR.event.prototype,b;for(b in d)null==a[b]&&(a[b]=d[b])},CKEDITOR.event.prototype=function(){function a(a){var e=d(this);return e[a]||(e[a]=new b(a))}var d=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},b=function(a){this.name=a;this.listeners=[]};b.prototype={getListenerIndex:function(a){for(var b=0,d=this.listeners;b<d.length;b++)if(d[b].fn==a)return b;return-1}};\nreturn{define:function(b,d){var g=a.call(this,b);CKEDITOR.tools.extend(g,d,!0)},on:function(b,d,g,l,k){function n(a,f,x,k){a={name:b,sender:this,editor:a,data:f,listenerData:l,stop:x,cancel:k,removeListener:w};return!1===d.call(g,a)?!1:a.data}function w(){x.removeListener(b,d)}var f=a.call(this,b);if(0>f.getListenerIndex(d)){f=f.listeners;g||(g=this);isNaN(k)&&(k=10);var x=this;n.fn=d;n.priority=k;for(var A=f.length-1;0<=A;A--)if(f[A].priority<=k)return f.splice(A+1,0,n),{removeListener:w};f.unshift(n)}return{removeListener:w}},\nonce:function(){var a=Array.prototype.slice.call(arguments),b=a[1];a[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,b=function(){a=1},g=0,l=function(){g=1};return function(k,n,w){var f=d(this)[k];k=a;var x=g;a=g=0;if(f){var A=f.listeners;if(A.length)for(var A=A.slice(0),u,B=0;B<A.length;B++){if(f.errorProof)try{u=\nA[B].call(this,w,n,b,l)}catch(q){}else u=A[B].call(this,w,n,b,l);!1===u?g=1:\"undefined\"!=typeof u&&(n=u);if(a||g)break}}n=g?!1:\"undefined\"==typeof n?!0:n;a=k;g=x;return n}}(),fireOnce:function(a,b,g){b=this.fire(a,b,g);delete d(this)[a];return b},removeListener:function(a,b){var g=d(this)[a];if(g){var l=g.getListenerIndex(b);0<=l&&g.listeners.splice(l,1)}},removeAllListeners:function(){var a=d(this),b;for(b in a)delete a[b]},hasListeners:function(a){return(a=d(this)[a])&&0<a.listeners.length}}}());\nCKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,d){a in{instanceReady:1,loaded:1}&&(this[a]=!0);return CKEDITOR.event.prototype.fire.call(this,a,d,this)},CKEDITOR.editor.prototype.fireOnce=function(a,d){a in{instanceReady:1,loaded:1}&&(this[a]=!0);return CKEDITOR.event.prototype.fireOnce.call(this,a,d,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype));\nCKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),d=a.match(/edge[ \\/](\\d+.?\\d*)/),b=-1<a.indexOf(\"trident/\"),b=!(!d&&!b),b={ie:b,edge:!!d,webkit:!b&&-1<a.indexOf(\" applewebkit/\"),air:-1<a.indexOf(\" adobeair/\"),mac:-1<a.indexOf(\"macintosh\"),quirks:\"BackCompat\"==document.compatMode&&(!document.documentMode||10>document.documentMode),mobile:-1<a.indexOf(\"mobile\"),iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return!1;var a=document.domain,b=window.location.hostname;\nreturn a!=b&&a!=\"[\"+b+\"]\"},secure:\"https:\"==location.protocol};b.gecko=\"Gecko\"==navigator.product&&!b.webkit&&!b.ie;b.webkit&&(-1<a.indexOf(\"chrome\")?b.chrome=!0:b.safari=!0);var c=0;b.ie&&(c=d?parseFloat(d[1]):b.quirks||!document.documentMode?parseFloat(a.match(/msie (\\d+)/)[1]):document.documentMode,b.ie9Compat=9==c,b.ie8Compat=8==c,b.ie7Compat=7==c,b.ie6Compat=7>c||b.quirks);b.gecko&&(d=a.match(/rv:([\\d\\.]+)/))&&(d=d[1].split(\".\"),c=1E4*d[0]+100*(d[1]||0)+1*(d[2]||0));b.air&&(c=parseFloat(a.match(/ adobeair\\/(\\d+)/)[1]));\nb.webkit&&(c=parseFloat(a.match(/ applewebkit\\/(\\d+)/)[1]));b.version=c;b.isCompatible=!(b.ie&&7>c)&&!(b.gecko&&4E4>c)&&!(b.webkit&&534>c);b.hidpi=2<=window.devicePixelRatio;b.needsBrFiller=b.gecko||b.webkit||b.ie&&10<c;b.needsNbspFiller=b.ie&&11>c;b.cssClass=\"cke_browser_\"+(b.ie?\"ie\":b.gecko?\"gecko\":b.webkit?\"webkit\":\"unknown\");b.quirks&&(b.cssClass+=\" cke_browser_quirks\");b.ie&&(b.cssClass+=\" cke_browser_ie\"+(b.quirks?\"6 cke_browser_iequirks\":b.version));b.air&&(b.cssClass+=\" cke_browser_air\");\nb.iOS&&(b.cssClass+=\" cke_browser_ios\");b.hidpi&&(b.cssClass+=\" cke_hidpi\");return b}());\n\"unloaded\"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(\"basic_ready\"!=CKEDITOR.status)CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement(\"script\");a.type=\"text/javascript\";a.src=CKEDITOR.basePath+\"ckeditor.js\";document.getElementsByTagName(\"head\")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a=\nCKEDITOR.loadFullCore,d=CKEDITOR.loadFullCoreTimeout;a&&(CKEDITOR.status=\"basic_ready\",a&&a._load?a():d&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},1E3*d))})})();CKEDITOR.status=\"basic_loaded\"}();\"use strict\";CKEDITOR.VERBOSITY_WARN=1;CKEDITOR.VERBOSITY_ERROR=2;CKEDITOR.verbosity=CKEDITOR.VERBOSITY_WARN|CKEDITOR.VERBOSITY_ERROR;CKEDITOR.warn=function(a,d){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_WARN&&CKEDITOR.fire(\"log\",{type:\"warn\",errorCode:a,additionalData:d})};\nCKEDITOR.error=function(a,d){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_ERROR&&CKEDITOR.fire(\"log\",{type:\"error\",errorCode:a,additionalData:d})};\nCKEDITOR.on(\"log\",function(a){if(window.console&&window.console.log){var d=console[a.data.type]?a.data.type:\"log\",b=a.data.errorCode;if(a=a.data.additionalData)console[d](\"[CKEDITOR] Error code: \"+b+\".\",a);else console[d](\"[CKEDITOR] Error code: \"+b+\".\");console[d](\"[CKEDITOR] For more information about this error go to http://docs.ckeditor.com/#!/guide/dev_errors-section-\"+b)}},null,null,999);CKEDITOR.dom={};\n(function(){var a=[],d=CKEDITOR.env.gecko?\"-moz-\":CKEDITOR.env.webkit?\"-webkit-\":CKEDITOR.env.ie?\"-ms-\":\"\",b=/&/g,c=/>/g,e=/</g,g=/\"/g,l=/&(lt|gt|amp|quot|nbsp|shy|#\\d{1,5});/g,k={lt:\"\\x3c\",gt:\"\\x3e\",amp:\"\\x26\",quot:'\"',nbsp:\" \",shy:\"­\"},n=function(a,f){return\"#\"==f[0]?String.fromCharCode(parseInt(f.slice(1),10)):k[f]};CKEDITOR.on(\"reset\",function(){a=[]});CKEDITOR.tools={arrayCompare:function(a,f){if(!a&&!f)return!0;if(!a||!f||a.length!=f.length)return!1;for(var b=0;b<a.length;b++)if(a[b]!=f[b])return!1;\nreturn!0},getIndex:function(a,f){for(var b=0;b<a.length;++b)if(f(a[b]))return b;return-1},clone:function(a){var f;if(a&&a instanceof Array){f=[];for(var b=0;b<a.length;b++)f[b]=CKEDITOR.tools.clone(a[b]);return f}if(null===a||\"object\"!=typeof a||a instanceof String||a instanceof Number||a instanceof Boolean||a instanceof Date||a instanceof RegExp||a.nodeType||a.window===a)return a;f=new a.constructor;for(b in a)f[b]=CKEDITOR.tools.clone(a[b]);return f},capitalize:function(a,f){return a.charAt(0).toUpperCase()+\n(f?a.slice(1):a.slice(1).toLowerCase())},extend:function(a){var f=arguments.length,b,c;\"boolean\"==typeof(b=arguments[f-1])?f--:\"boolean\"==typeof(b=arguments[f-2])&&(c=arguments[f-1],f-=2);for(var k=1;k<f;k++){var d=arguments[k],q;for(q in d)if(!0===b||null==a[q])if(!c||q in c)a[q]=d[q]}return a},prototypedCopy:function(a){var f=function(){};f.prototype=a;return new f},copy:function(a){var f={},b;for(b in a)f[b]=a[b];return f},isArray:function(a){return\"[object Array]\"==Object.prototype.toString.call(a)},\nisEmpty:function(a){for(var f in a)if(a.hasOwnProperty(f))return!1;return!0},cssVendorPrefix:function(a,f,b){if(b)return d+a+\":\"+f+\";\"+a+\":\"+f;b={};b[a]=f;b[d+a]=f;return b},cssStyleToDomStyle:function(){var a=document.createElement(\"div\").style,f=\"undefined\"!=typeof a.cssFloat?\"cssFloat\":\"undefined\"!=typeof a.styleFloat?\"styleFloat\":\"float\";return function(a){return\"float\"==a?f:a.replace(/-./g,function(a){return a.substr(1).toUpperCase()})}}(),buildStyleHtml:function(a){a=[].concat(a);for(var f,\nb=[],c=0;c<a.length;c++)if(f=a[c])/@import|[{}]/.test(f)?b.push(\"\\x3cstyle\\x3e\"+f+\"\\x3c/style\\x3e\"):b.push('\\x3clink type\\x3d\"text/css\" rel\\x3dstylesheet href\\x3d\"'+f+'\"\\x3e');return b.join(\"\")},htmlEncode:function(a){return void 0===a||null===a?\"\":String(a).replace(b,\"\\x26amp;\").replace(c,\"\\x26gt;\").replace(e,\"\\x26lt;\")},htmlDecode:function(a){return a.replace(l,n)},htmlEncodeAttr:function(a){return CKEDITOR.tools.htmlEncode(a).replace(g,\"\\x26quot;\")},htmlDecodeAttr:function(a){return CKEDITOR.tools.htmlDecode(a)},\ntransformPlainTextToHtml:function(a,f){var b=f==CKEDITOR.ENTER_BR,c=this.htmlEncode(a.replace(/\\r\\n/g,\"\\n\")),c=c.replace(/\\t/g,\"\\x26nbsp;\\x26nbsp; \\x26nbsp;\"),k=f==CKEDITOR.ENTER_P?\"p\":\"div\";if(!b){var d=/\\n{2}/g;if(d.test(c))var q=\"\\x3c\"+k+\"\\x3e\",n=\"\\x3c/\"+k+\"\\x3e\",c=q+c.replace(d,function(){return n+q})+n}c=c.replace(/\\n/g,\"\\x3cbr\\x3e\");b||(c=c.replace(new RegExp(\"\\x3cbr\\x3e(?\\x3d\\x3c/\"+k+\"\\x3e)\"),function(a){return CKEDITOR.tools.repeat(a,2)}));c=c.replace(/^ | $/g,\"\\x26nbsp;\");return c=c.replace(/(>|\\s) /g,\nfunction(a,f){return f+\"\\x26nbsp;\"}).replace(/ (?=<)/g,\"\\x26nbsp;\")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return\"cke_\"+this.getNextNumber()},getUniqueId:function(){for(var a=\"e\",f=0;8>f;f++)a+=Math.floor(65536*(1+Math.random())).toString(16).substring(1);return a},override:function(a,f){var b=f(a);b.prototype=a.prototype;return b},setTimeout:function(a,f,b,c,k){k||(k=window);b||(b=k);return k.setTimeout(function(){c?a.apply(b,[].concat(c)):a.apply(b)},\nf||0)},trim:function(){var a=/(?:^[ \\t\\n\\r]+)|(?:[ \\t\\n\\r]+$)/g;return function(f){return f.replace(a,\"\")}}(),ltrim:function(){var a=/^[ \\t\\n\\r]+/g;return function(f){return f.replace(a,\"\")}}(),rtrim:function(){var a=/[ \\t\\n\\r]+$/g;return function(f){return f.replace(a,\"\")}}(),indexOf:function(a,f){if(\"function\"==typeof f)for(var b=0,c=a.length;b<c;b++){if(f(a[b]))return b}else{if(a.indexOf)return a.indexOf(f);b=0;for(c=a.length;b<c;b++)if(a[b]===f)return b}return-1},search:function(a,b){var c=CKEDITOR.tools.indexOf(a,\nb);return 0<=c?a[c]:null},bind:function(a,b){return function(){return a.apply(b,arguments)}},createClass:function(a){var b=a.$,c=a.base,k=a.privates||a._,d=a.proto;a=a.statics;!b&&(b=function(){c&&this.base.apply(this,arguments)});if(k)var n=b,b=function(){var a=this._||(this._={}),b;for(b in k){var f=k[b];a[b]=\"function\"==typeof f?CKEDITOR.tools.bind(f,this):f}n.apply(this,arguments)};c&&(b.prototype=this.prototypedCopy(c.prototype),b.prototype.constructor=b,b.base=c,b.baseProto=c.prototype,b.prototype.base=\nfunction(){this.base=c.prototype.base;c.apply(this,arguments);this.base=arguments.callee});d&&this.extend(b.prototype,d,!0);a&&this.extend(b,a,!0);return b},addFunction:function(b,f){return a.push(function(){return b.apply(f||this,arguments)})-1},removeFunction:function(b){a[b]=null},callFunction:function(b){var f=a[b];return f&&f.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a=/^-?\\d+\\.?\\d*px$/,b;return function(c){b=CKEDITOR.tools.trim(c+\"\")+\"px\";return a.test(b)?\nb:c||\"\"}}(),convertToPx:function(){var a;return function(b){a||(a=CKEDITOR.dom.element.createFromHtml('\\x3cdiv style\\x3d\"position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;\"\\x3e\\x3c/div\\x3e',CKEDITOR.document),CKEDITOR.document.getBody().append(a));return/%$/.test(b)?b:(a.setStyle(\"width\",b),a.$.clientWidth)}}(),repeat:function(a,b){return Array(b+1).join(a)},tryThese:function(){for(var a,b=0,c=arguments.length;b<c;b++){var k=arguments[b];try{a=k();break}catch(d){}}return a},\ngenKey:function(){return Array.prototype.slice.call(arguments).join(\"-\")},defer:function(a){return function(){var b=arguments,c=this;window.setTimeout(function(){a.apply(c,b)},0)}},normalizeCssText:function(a,b){var c=[],k,d=CKEDITOR.tools.parseCssText(a,!0,b);for(k in d)c.push(k+\":\"+d[k]);c.sort();return c.length?c.join(\";\")+\";\":\"\"},convertRgbToHex:function(a){return a.replace(/(?:rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\))/gi,function(a,b,c,k){a=[b,c,k];for(b=0;3>b;b++)a[b]=(\"0\"+parseInt(a[b],10).toString(16)).slice(-2);\nreturn\"#\"+a.join(\"\")})},parseCssText:function(a,b,c){var k={};c&&(c=new CKEDITOR.dom.element(\"span\"),c.setAttribute(\"style\",a),a=CKEDITOR.tools.convertRgbToHex(c.getAttribute(\"style\")||\"\"));if(!a||\";\"==a)return k;a.replace(/&quot;/g,'\"').replace(/\\s*([^:;\\s]+)\\s*:\\s*([^;]+)\\s*(?=;|$)/g,function(a,c,d){b&&(c=c.toLowerCase(),\"font-family\"==c&&(d=d.toLowerCase().replace(/[\"']/g,\"\").replace(/\\s*,\\s*/g,\",\")),d=CKEDITOR.tools.trim(d));k[c]=d});return k},writeCssText:function(a,b){var c,k=[];for(c in a)k.push(c+\n\":\"+a[c]);b&&k.sort();return k.join(\"; \")},objectCompare:function(a,b,c){var k;if(!a&&!b)return!0;if(!a||!b)return!1;for(k in a)if(a[k]!=b[k])return!1;if(!c)for(k in b)if(a[k]!=b[k])return!1;return!0},objectKeys:function(a){var b=[],c;for(c in a)b.push(c);return b},convertArrayToObject:function(a,b){var c={};1==arguments.length&&(b=!0);for(var k=0,d=a.length;k<d;++k)c[a[k]]=b;return c},fixDomain:function(){for(var a;;)try{a=window.parent.document.domain;break}catch(b){a=a?a.replace(/.+?(?:\\.|$)/,\n\"\"):document.domain;if(!a)break;document.domain=a}return!!a},eventsBuffer:function(a,b,c){function k(){n=(new Date).getTime();d=!1;c?b.call(c):b()}var d,n=0;return{input:function(){if(!d){var b=(new Date).getTime()-n;b<a?d=setTimeout(k,a-b):k()}},reset:function(){d&&clearTimeout(d);d=n=0}}},enableHtml5Elements:function(a,b){for(var c=\"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video\".split(\" \"),\nk=c.length,d;k--;)d=a.createElement(c[k]),b&&a.appendChild(d)},checkIfAnyArrayItemMatches:function(a,b){for(var c=0,k=a.length;c<k;++c)if(a[c].match(b))return!0;return!1},checkIfAnyObjectPropertyMatches:function(a,b){for(var c in a)if(c.match(b))return!0;return!1},transparentImageData:\"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\\x3d\\x3d\",getCookie:function(a){a=a.toLowerCase();for(var b=document.cookie.split(\";\"),c,k,d=0;d<b.length;d++)if(c=b[d].split(\"\\x3d\"),\nk=decodeURIComponent(CKEDITOR.tools.trim(c[0]).toLowerCase()),k===a)return decodeURIComponent(1<c.length?c[1]:\"\");return null},setCookie:function(a,b){document.cookie=encodeURIComponent(a)+\"\\x3d\"+encodeURIComponent(b)+\";path\\x3d/\"},getCsrfToken:function(){var a=CKEDITOR.tools.getCookie(\"ckCsrfToken\");if(!a||40!=a.length){var a=[],b=\"\";if(window.crypto&&window.crypto.getRandomValues)a=new Uint8Array(40),window.crypto.getRandomValues(a);else for(var c=0;40>c;c++)a.push(Math.floor(256*Math.random()));\nfor(c=0;c<a.length;c++)var k=\"abcdefghijklmnopqrstuvwxyz0123456789\".charAt(a[c]%36),b=b+(.5<Math.random()?k.toUpperCase():k);a=b;CKEDITOR.tools.setCookie(\"ckCsrfToken\",a)}return a}}})();\nCKEDITOR.dtd=function(){var a=CKEDITOR.tools.extend,d=function(a,b){for(var c=CKEDITOR.tools.clone(a),k=1;k<arguments.length;k++){b=arguments[k];for(var d in b)delete c[d]}return c},b={},c={},e={address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,main:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},g={command:1,link:1,meta:1,noscript:1,script:1,style:1},l={},k={\"#\":1},n={center:1,dir:1,noframes:1};\na(b,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,\"var\":1,video:1,wbr:1},k,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});a(c,e,b,n);d={a:d(b,{a:1,button:1}),abbr:b,address:c,\narea:l,article:c,aside:c,audio:a({source:1,track:1},c),b:b,base:l,bdi:b,bdo:b,blockquote:c,body:c,br:l,button:d(b,{a:1,button:1}),canvas:b,caption:c,cite:b,code:b,col:l,colgroup:{col:1},command:l,datalist:a({option:1},b),dd:c,del:b,details:a({summary:1},c),dfn:b,div:c,dl:{dt:1,dd:1},dt:c,em:b,embed:l,fieldset:a({legend:1},c),figcaption:c,figure:a({figcaption:1},c),footer:c,form:c,h1:b,h2:b,h3:b,h4:b,h5:b,h6:b,head:a({title:1,base:1},g),header:c,hgroup:{h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},hr:l,html:a({head:1,\nbody:1},c,g),i:b,iframe:k,img:l,input:l,ins:b,kbd:b,keygen:l,label:b,legend:b,li:c,link:l,main:c,map:c,mark:b,menu:a({li:1},c),meta:l,meter:d(b,{meter:1}),nav:c,noscript:a({link:1,meta:1,style:1},b),object:a({param:1},b),ol:{li:1},optgroup:{option:1},option:k,output:b,p:b,param:l,pre:b,progress:d(b,{progress:1}),q:b,rp:b,rt:b,ruby:a({rp:1,rt:1},b),s:b,samp:b,script:k,section:c,select:{optgroup:1,option:1},small:b,source:l,span:b,strong:b,style:k,sub:b,summary:a({h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},b),\nsup:b,table:{caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:c,textarea:k,tfoot:{tr:1},th:c,thead:{tr:1},time:d(b,{time:1}),title:k,tr:{th:1,td:1},track:l,u:b,ul:{li:1},\"var\":b,video:a({source:1,track:1},c),wbr:l,acronym:b,applet:a({param:1},c),basefont:l,big:b,center:c,dialog:l,dir:{li:1},font:b,isindex:l,noframes:c,strike:b,tt:b};a(d,{$block:a({audio:1,dd:1,dt:1,figcaption:1,li:1,video:1},e,n),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,div:1,dl:1,\nfieldset:1,figcaption:1,figure:1,footer:1,form:1,header:1,hgroup:1,main:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,figcaption:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,main:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,\ntrack:1,wbr:1},$inline:b,$list:{dl:1,ol:1,ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:a({body:1,head:1,html:1},d.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,\ns:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,\"var\":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return d}();\nCKEDITOR.dom.event=function(a){this.$=a};\nCKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which},getKeystroke:function(){var a=this.getKey();if(this.$.ctrlKey||this.$.metaKey)a+=CKEDITOR.CTRL;this.$.shiftKey&&(a+=CKEDITOR.SHIFT);this.$.altKey&&(a+=CKEDITOR.ALT);return a},preventDefault:function(a){var d=this.$;d.preventDefault?d.preventDefault():d.returnValue=!1;a&&this.stopPropagation()},stopPropagation:function(){var a=this.$;a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},getTarget:function(){var a=\nthis.$.target||this.$.srcElement;return a?new CKEDITOR.dom.node(a):null},getPhase:function(){return this.$.eventPhase||2},getPageOffset:function(){var a=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(a.documentElement.scrollLeft||a.body.scrollLeft),y:this.$.pageY||this.$.clientY+(a.documentElement.scrollTop||a.body.scrollTop)}}};CKEDITOR.CTRL=1114112;CKEDITOR.SHIFT=2228224;CKEDITOR.ALT=4456448;CKEDITOR.EVENT_PHASE_CAPTURING=1;CKEDITOR.EVENT_PHASE_AT_TARGET=2;\nCKEDITOR.EVENT_PHASE_BUBBLING=3;CKEDITOR.dom.domObject=function(a){a&&(this.$=a)};\nCKEDITOR.dom.domObject.prototype=function(){var a=function(a,b){return function(c){\"undefined\"!=typeof CKEDITOR&&a.fire(b,new CKEDITOR.dom.event(c))}};return{getPrivate:function(){var a;(a=this.getCustomData(\"_\"))||this.setCustomData(\"_\",a={});return a},on:function(d){var b=this.getCustomData(\"_cke_nativeListeners\");b||(b={},this.setCustomData(\"_cke_nativeListeners\",b));b[d]||(b=b[d]=a(this,d),this.$.addEventListener?this.$.addEventListener(d,b,!!CKEDITOR.event.useCapture):this.$.attachEvent&&this.$.attachEvent(\"on\"+\nd,b));return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(a){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(a)){var b=this.getCustomData(\"_cke_nativeListeners\"),c=b&&b[a];c&&(this.$.removeEventListener?this.$.removeEventListener(a,c,!1):this.$.detachEvent&&this.$.detachEvent(\"on\"+a,c),delete b[a])}},removeAllListeners:function(){var a=this.getCustomData(\"_cke_nativeListeners\"),b;for(b in a){var c=a[b];this.$.detachEvent?this.$.detachEvent(\"on\"+\nb,c):this.$.removeEventListener&&this.$.removeEventListener(b,c,!1);delete a[b]}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}();\n(function(a){var d={};CKEDITOR.on(\"reset\",function(){d={}});a.equals=function(a){try{return a&&a.$===this.$}catch(c){return!1}};a.setCustomData=function(a,c){var e=this.getUniqueId();(d[e]||(d[e]={}))[a]=c;return this};a.getCustomData=function(a){var c=this.$[\"data-cke-expando\"];return(c=c&&d[c])&&a in c?c[a]:null};a.removeCustomData=function(a){var c=this.$[\"data-cke-expando\"],c=c&&d[c],e,g;c&&(e=c[a],g=a in c,delete c[a]);return g?e:null};a.clearCustomData=function(){this.removeAllListeners();var a=\nthis.$[\"data-cke-expando\"];a&&delete d[a]};a.getUniqueId=function(){return this.$[\"data-cke-expando\"]||(this.$[\"data-cke-expando\"]=CKEDITOR.tools.getNextNumber())};CKEDITOR.event.implementOn(a)})(CKEDITOR.dom.domObject.prototype);\nCKEDITOR.dom.node=function(a){return a?new CKEDITOR.dom[a.nodeType==CKEDITOR.NODE_DOCUMENT?\"document\":a.nodeType==CKEDITOR.NODE_ELEMENT?\"element\":a.nodeType==CKEDITOR.NODE_TEXT?\"text\":a.nodeType==CKEDITOR.NODE_COMMENT?\"comment\":a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?\"documentFragment\":\"domObject\"](a):this};CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject;CKEDITOR.NODE_ELEMENT=1;CKEDITOR.NODE_DOCUMENT=9;CKEDITOR.NODE_TEXT=3;CKEDITOR.NODE_COMMENT=8;CKEDITOR.NODE_DOCUMENT_FRAGMENT=11;\nCKEDITOR.POSITION_IDENTICAL=0;CKEDITOR.POSITION_DISCONNECTED=1;CKEDITOR.POSITION_FOLLOWING=2;CKEDITOR.POSITION_PRECEDING=4;CKEDITOR.POSITION_IS_CONTAINED=8;CKEDITOR.POSITION_CONTAINS=16;\nCKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(a,d){a.append(this,d);return a},clone:function(a,d){function b(c){c[\"data-cke-expando\"]&&(c[\"data-cke-expando\"]=!1);if(c.nodeType==CKEDITOR.NODE_ELEMENT||c.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)if(d||c.nodeType!=CKEDITOR.NODE_ELEMENT||c.removeAttribute(\"id\",!1),a){c=c.childNodes;for(var e=0;e<c.length;e++)b(c[e])}}function c(b){if(b.type==CKEDITOR.NODE_ELEMENT||b.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT){if(b.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var d=\nb.getName();\":\"==d[0]&&b.renameNode(d.substring(1))}if(a)for(d=0;d<b.getChildCount();d++)c(b.getChild(d))}}var e=this.$.cloneNode(a);b(e);e=new CKEDITOR.dom.node(e);CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(this.type==CKEDITOR.NODE_ELEMENT||this.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)&&c(e);return e},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(a){a.$.parentNode.insertBefore(this.$,a.$.nextSibling);return a},insertBefore:function(a){a.$.parentNode.insertBefore(this.$,\na.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var d=[],b=this.getDocument().$.documentElement,c=this.$;c&&c!=b;){var e=c.parentNode;e&&d.unshift(this.getIndex.call({$:c},a));c=e}return d},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){function d(a,c){var n=c?a.nextSibling:a.previousSibling;return n&&n.nodeType==CKEDITOR.NODE_TEXT?b(n)?d(n,\nc):n:null}function b(a){return!a.nodeValue||a.nodeValue==CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE}var c=this.$,e=-1,g;if(!this.$.parentNode||a&&c.nodeType==CKEDITOR.NODE_TEXT&&b(c)&&!d(c)&&!d(c,!0))return-1;do a&&c!=this.$&&c.nodeType==CKEDITOR.NODE_TEXT&&(g||b(c))||(e++,g=c.nodeType==CKEDITOR.NODE_TEXT);while(c=c.previousSibling);return e},getNextSourceNode:function(a,d,b){if(b&&!b.call){var c=b;b=function(a){return!a.equals(c)}}a=!a&&this.getFirst&&this.getFirst();var e;if(!a){if(this.type==\nCKEDITOR.NODE_ELEMENT&&b&&!1===b(this,!0))return null;a=this.getNext()}for(;!a&&(e=(e||this).getParent());){if(b&&!1===b(e,!0))return null;a=e.getNext()}return!a||b&&!1===b(a)?null:d&&d!=a.type?a.getNextSourceNode(!1,d,b):a},getPreviousSourceNode:function(a,d,b){if(b&&!b.call){var c=b;b=function(a){return!a.equals(c)}}a=!a&&this.getLast&&this.getLast();var e;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&!1===b(this,!0))return null;a=this.getPrevious()}for(;!a&&(e=(e||this).getParent());){if(b&&!1===\nb(e,!0))return null;a=e.getPrevious()}return!a||b&&!1===b(a)?null:d&&a.type!=d?a.getPreviousSourceNode(!1,d,b):a},getPrevious:function(a){var d=this.$,b;do b=(d=d.previousSibling)&&10!=d.nodeType&&new CKEDITOR.dom.node(d);while(b&&a&&!a(b));return b},getNext:function(a){var d=this.$,b;do b=(d=d.nextSibling)&&new CKEDITOR.dom.node(d);while(b&&a&&!a(b));return b},getParent:function(a){var d=this.$.parentNode;return d&&(d.nodeType==CKEDITOR.NODE_ELEMENT||a&&d.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?\nnew CKEDITOR.dom.node(d):null},getParents:function(a){var d=this,b=[];do b[a?\"push\":\"unshift\"](d);while(d=d.getParent());return b},getCommonAncestor:function(a){if(a.equals(this))return this;if(a.contains&&a.contains(this))return a;var d=this.contains?this:this.getParent();do if(d.contains(a))return d;while(d=d.getParent());return null},getPosition:function(a){var d=this.$,b=a.$;if(d.compareDocumentPosition)return d.compareDocumentPosition(b);if(d==b)return CKEDITOR.POSITION_IDENTICAL;if(this.type==\nCKEDITOR.NODE_ELEMENT&&a.type==CKEDITOR.NODE_ELEMENT){if(d.contains){if(d.contains(b))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(b.contains(d))return CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING}if(\"sourceIndex\"in d)return 0>d.sourceIndex||0>b.sourceIndex?CKEDITOR.POSITION_DISCONNECTED:d.sourceIndex<b.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}d=this.getAddress();a=a.getAddress();for(var b=Math.min(d.length,a.length),c=0;c<b;c++)if(d[c]!=\na[c])return d[c]<a[c]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;return d.length<a.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING},getAscendant:function(a,d){var b=this.$,c,e;d||(b=b.parentNode);\"function\"==typeof a?(e=!0,c=a):(e=!1,c=function(b){b=\"string\"==typeof b.nodeName?b.nodeName.toLowerCase():\"\";return\"string\"==typeof a?b==a:b in a});for(;b;){if(c(e?new CKEDITOR.dom.node(b):b))return new CKEDITOR.dom.node(b);\ntry{b=b.parentNode}catch(g){b=null}}return null},hasAscendant:function(a,d){var b=this.$;d||(b=b.parentNode);for(;b;){if(b.nodeName&&b.nodeName.toLowerCase()==a)return!0;b=b.parentNode}return!1},move:function(a,d){a.append(this.remove(),d)},remove:function(a){var d=this.$,b=d.parentNode;if(b){if(a)for(;a=d.firstChild;)b.insertBefore(d.removeChild(a),d);b.removeChild(d)}return this},replace:function(a){this.insertBefore(a);a.remove()},trim:function(){this.ltrim();this.rtrim()},ltrim:function(){for(var a;this.getFirst&&\n(a=this.getFirst());){if(a.type==CKEDITOR.NODE_TEXT){var d=CKEDITOR.tools.ltrim(a.getText()),b=a.getLength();if(d)d.length<b&&(a.split(b-d.length),this.$.removeChild(this.$.firstChild));else{a.remove();continue}}break}},rtrim:function(){for(var a;this.getLast&&(a=this.getLast());){if(a.type==CKEDITOR.NODE_TEXT){var d=CKEDITOR.tools.rtrim(a.getText()),b=a.getLength();if(d)d.length<b&&(a.split(d.length),this.$.lastChild.parentNode.removeChild(this.$.lastChild));else{a.remove();continue}}break}CKEDITOR.env.needsBrFiller&&\n(a=this.$.lastChild)&&1==a.type&&\"br\"==a.nodeName.toLowerCase()&&a.parentNode.removeChild(a)},isReadOnly:function(a){var d=this;this.type!=CKEDITOR.NODE_ELEMENT&&(d=this.getParent());CKEDITOR.env.edge&&d&&d.is(\"textarea\",\"input\")&&(a=!0);if(!a&&d&&\"undefined\"!=typeof d.$.isContentEditable)return!(d.$.isContentEditable||d.data(\"cke-editable\"));for(;d;){if(d.data(\"cke-editable\"))return!1;if(d.hasAttribute(\"contenteditable\"))return\"false\"==d.getAttribute(\"contenteditable\");d=d.getParent()}return!0}});\nCKEDITOR.dom.window=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject;\nCKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus()},getViewPaneSize:function(){var a=this.$.document,d=\"CSS1Compat\"==a.compatMode;return{width:(d?a.documentElement.clientWidth:a.body.clientWidth)||0,height:(d?a.documentElement.clientHeight:a.body.clientHeight)||0}},getScrollPosition:function(){var a=this.$;if(\"pageXOffset\"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};a=a.document;return{x:a.documentElement.scrollLeft||a.body.scrollLeft||0,y:a.documentElement.scrollTop||\na.body.scrollTop||0}},getFrame:function(){var a=this.$.frameElement;return a?new CKEDITOR.dom.element.get(a):null}});CKEDITOR.dom.document=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject;\nCKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(a){if(this.$.createStyleSheet)this.$.createStyleSheet(a);else{var d=new CKEDITOR.dom.element(\"link\");d.setAttributes({rel:\"stylesheet\",type:\"text/css\",href:a});this.getHead().append(d)}},appendStyleText:function(a){if(this.$.createStyleSheet){var d=this.$.createStyleSheet(\"\");d.cssText=a}else{var b=new CKEDITOR.dom.element(\"style\",this);b.append(new CKEDITOR.dom.text(a,this));this.getHead().append(b)}return d||\nb.$.sheet},createElement:function(a,d){var b=new CKEDITOR.dom.element(a,this);d&&(d.attributes&&b.setAttributes(d.attributes),d.styles&&b.setStyles(d.styles));return b},createText:function(a){return new CKEDITOR.dom.text(a,this)},focus:function(){this.getWindow().focus()},getActive:function(){var a;try{a=this.$.activeElement}catch(d){return null}return new CKEDITOR.dom.element(a)},getById:function(a){return(a=this.$.getElementById(a))?new CKEDITOR.dom.element(a):null},getByAddress:function(a,d){for(var b=\nthis.$.documentElement,c=0;b&&c<a.length;c++){var e=a[c];if(d)for(var g=-1,l=0;l<b.childNodes.length;l++){var k=b.childNodes[l];if(!0!==d||3!=k.nodeType||!k.previousSibling||3!=k.previousSibling.nodeType)if(g++,g==e){b=k;break}}else b=b.childNodes[e]}return b?new CKEDITOR.dom.node(b):null},getElementsByTag:function(a,d){CKEDITOR.env.ie&&8>=document.documentMode||!d||(a=d+\":\"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName(\"head\")[0];\nreturn a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element(\"head\"),!0)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open(\"text/html\",\"replace\");CKEDITOR.env.ie&&(a=a.replace(/(?:^\\s*<!DOCTYPE[^>]*?>)|^/i,'$\\x26\\n\\x3cscript data-cke-temp\\x3d\"1\"\\x3e('+\nCKEDITOR.tools.fixDomain+\")();\\x3c/script\\x3e\"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a=this.getCustomData(\"html5ShivFrag\");a||(a=this.$.createDocumentFragment(),CKEDITOR.tools.enableHtml5Elements(a,!0),this.setCustomData(\"html5ShivFrag\",a));return a}});CKEDITOR.dom.nodeList=function(a){this.$=a};\nCKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){return 0>a||a>=this.$.length?null:(a=this.$[a])?new CKEDITOR.dom.node(a):null}};CKEDITOR.dom.element=function(a,d){\"string\"==typeof a&&(a=(d?d.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.element.get=function(a){return(a=\"string\"==typeof a?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))};CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;\nCKEDITOR.dom.element.createFromHtml=function(a,d){var b=new CKEDITOR.dom.element(\"div\",d);b.setHtml(a);return b.getFirst().remove()};CKEDITOR.dom.element.setMarker=function(a,d,b,c){var e=d.getCustomData(\"list_marker_id\")||d.setCustomData(\"list_marker_id\",CKEDITOR.tools.getNextNumber()).getCustomData(\"list_marker_id\"),g=d.getCustomData(\"list_marker_names\")||d.setCustomData(\"list_marker_names\",{}).getCustomData(\"list_marker_names\");a[e]=d;g[b]=1;return d.setCustomData(b,c)};\nCKEDITOR.dom.element.clearAllMarkers=function(a){for(var d in a)CKEDITOR.dom.element.clearMarkers(a,a[d],1)};CKEDITOR.dom.element.clearMarkers=function(a,d,b){var c=d.getCustomData(\"list_marker_names\"),e=d.getCustomData(\"list_marker_id\"),g;for(g in c)d.removeCustomData(g);d.removeCustomData(\"list_marker_names\");b&&(d.removeCustomData(\"list_marker_id\"),delete a[e])};\n(function(){function a(a,b){return-1<(\" \"+a+\" \").replace(g,\" \").indexOf(\" \"+b+\" \")}function d(a){var b=!0;a.$.id||(a.$.id=\"cke_tmp_\"+CKEDITOR.tools.getNextNumber(),b=!1);return function(){b||a.removeAttribute(\"id\")}}function b(a,b){return\"#\"+a.$.id+\" \"+b.split(/,\\s*/).join(\", #\"+a.$.id+\" \")}function c(a){for(var b=0,c=0,f=l[a].length;c<f;c++)b+=parseInt(this.getComputedStyle(l[a][c])||0,10)||0;return b}var e=document.createElement(\"_\").classList,e=\"undefined\"!==typeof e&&null!==String(e.add).match(/\\[Native code\\]/gi),\ng=/[\\n\\t\\r]/g;CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:e?function(a){this.$.classList.add(a);return this}:function(b){var c=this.$.className;c&&(a(c,b)||(c+=\" \"+b));this.$.className=c||b;return this},removeClass:e?function(a){var b=this.$;b.classList.remove(a);b.className||b.removeAttribute(\"class\");return this}:function(b){var c=this.getAttribute(\"class\");c&&a(c,b)&&((c=c.replace(new RegExp(\"(?:^|\\\\s+)\"+b+\"(?\\x3d\\\\s|$)\"),\"\").replace(/^\\s+/,\"\"))?this.setAttribute(\"class\",\nc):this.removeAttribute(\"class\"));return this},hasClass:function(b){return a(this.$.className,b)},append:function(a,b){\"string\"==typeof a&&(a=this.getDocument().createElement(a));b?this.$.insertBefore(a.$,this.$.firstChild):this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var b=new CKEDITOR.dom.element(\"div\",this.getDocument());b.setHtml(a);b.moveChildren(this)}else this.setHtml(a)},appendText:function(a){null!=this.$.text&&CKEDITOR.env.ie&&9>CKEDITOR.env.version?\nthis.$.text+=a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();a&&a.is&&a.is(\"br\")||(a=this.getDocument().createElement(\"br\"),CKEDITOR.env.gecko&&a.setAttribute(\"type\",\"_moz\"),this.append(a))}},breakParent:function(a,b){var c=new CKEDITOR.dom.range(this.getDocument());c.setStartAfter(this);c.setEndAfter(a);var f=c.extractContents(!1,b||!1);c.insertNode(this.remove());\nf.insertAfterNode(this)},contains:document.compareDocumentPosition?function(a){return!!(this.$.compareDocumentPosition(a.$)&16)}:function(a){var b=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?b.contains(a.getParent().$):b!=a.$&&b.contains(a.$)},focus:function(){function a(){try{this.$.focus()}catch(b){}}return function(b){b?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\\?[^>]*>/g,\"\"):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\\?[^>]*>/,\n\"\");var a=this.$.ownerDocument.createElement(\"div\");a.appendChild(this.$.cloneNode(!0));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!a.width&&(a.width=a.right-a.left);!a.height&&(a.height=a.bottom-a.top);return a},setHtml:CKEDITOR.env.ie&&9>CKEDITOR.env.version?function(a){try{var b=this.$;if(this.getParent())return b.innerHTML=a;var c=this.getDocument()._getHtml5ShivFrag();c.appendChild(b);b.innerHTML=a;c.removeChild(b);return a}catch(f){this.$.innerHTML=\n\"\";b=new CKEDITOR.dom.element(\"body\",this.getDocument());b.$.innerHTML=a;for(b=b.getChildren();b.count();)this.append(b.getItem(0));return a}}:function(a){return this.$.innerHTML=a},setText:function(){var a=document.createElement(\"p\");a.innerHTML=\"x\";a=a.textContent;return function(b){this.$[a?\"textContent\":\"innerText\"]=b}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case \"class\":a=\n\"className\";break;case \"http-equiv\":a=\"httpEquiv\";break;case \"name\":return this.$.name;case \"tabindex\":return a=this.$.getAttribute(a,2),0!==a&&0===this.$.tabIndex&&(a=null),a;case \"checked\":return a=this.$.attributes.getNamedItem(a),(a.specified?a.nodeValue:this.$.checked)?\"checked\":null;case \"hspace\":case \"value\":return this.$[a];case \"style\":return this.$.style.cssText;case \"contenteditable\":case \"contentEditable\":return this.$.attributes.getNamedItem(\"contentEditable\").specified?this.$.getAttribute(\"contentEditable\"):\nnull}return this.$.getAttribute(a,2)}:a}(),getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:document.defaultView&&document.defaultView.getComputedStyle?function(a){var b=this.getWindow().$.getComputedStyle(this.$,null);return b?b.getPropertyValue(a):\"\"}:function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]},getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,\ngetTabIndex:function(){var a=this.$.tabIndex;return 0!==a||CKEDITOR.dtd.$tabIndex[this.getName()]||0===parseInt(this.getAttribute(\"tabindex\"),10)?a:-1},getText:function(){return this.$.textContent||this.$.innerText||\"\"},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||null},getNameAtt:function(){return this.$.name||null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&8>=document.documentMode){var b=this.$.scopeName;\"HTML\"!=\nb&&(a=b.toLowerCase()+\":\"+a)}this.getName=function(){return a};return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var b=this.$.firstChild;(b=b&&new CKEDITOR.dom.node(b))&&a&&!a(b)&&(b=b.getNext(a));return b},getLast:function(a){var b=this.$.lastChild;(b=b&&new CKEDITOR.dom.node(b))&&a&&!a(b)&&(b=b.getPrevious(a));return b},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},is:function(){var a=this.getName();if(\"object\"==typeof arguments[0])return!!arguments[0][a];\nfor(var b=0;b<arguments.length;b++)if(arguments[b]==a)return!0;return!1},isEditable:function(a){var b=this.getName();return this.isReadOnly()||\"none\"==this.getComputedStyle(\"display\")||\"hidden\"==this.getComputedStyle(\"visibility\")||CKEDITOR.dtd.$nonEditable[b]||CKEDITOR.dtd.$empty[b]||this.is(\"a\")&&(this.data(\"cke-saved-name\")||this.hasAttribute(\"name\"))&&!this.getChildCount()?!1:!1!==a?(a=CKEDITOR.dtd[b]||CKEDITOR.dtd.span,!(!a||!a[\"#\"])):!0},isIdentical:function(a){var b=this.clone(0,1);a=a.clone(0,\n1);b.removeAttributes([\"_moz_dirty\",\"data-cke-expando\",\"data-cke-saved-href\",\"data-cke-saved-name\"]);a.removeAttributes([\"_moz_dirty\",\"data-cke-expando\",\"data-cke-saved-href\",\"data-cke-saved-name\"]);if(b.$.isEqualNode)return b.$.style.cssText=CKEDITOR.tools.normalizeCssText(b.$.style.cssText),a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText),b.$.isEqualNode(a.$);b=b.getOuterHtml();a=a.getOuterHtml();if(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&this.is(\"a\")){var c=this.getParent();\nc.type==CKEDITOR.NODE_ELEMENT&&(c=c.clone(),c.setHtml(b),b=c.getHtml(),c.setHtml(a),a=c.getHtml())}return b==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&\"hidden\"!=this.getComputedStyle(\"visibility\"),b,c;a&&CKEDITOR.env.webkit&&(b=this.getWindow(),!b.equals(CKEDITOR.document.getWindow())&&(c=b.$.frameElement)&&(a=(new CKEDITOR.dom.element(c)).isVisible()));return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return!1;for(var a=this.getChildren(),\nb=0,c=a.count();b<c;b++){var f=a.getItem(b);if(f.type!=CKEDITOR.NODE_ELEMENT||!f.data(\"cke-bookmark\"))if(f.type==CKEDITOR.NODE_ELEMENT&&!f.isEmptyInlineRemoveable()||f.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(f.getText()))return!1}return!0},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,b=0;b<a.length;b++){var c=a[b];switch(c.nodeName){case \"class\":if(this.getAttribute(\"class\"))return!0;case \"data-cke-expando\":continue;default:if(c.specified)return!0}}return!1}:\nfunction(){var a=this.$.attributes,b=a.length,c={\"data-cke-expando\":1,_moz_dirty:1};return 0<b&&(2<b||!c[a[0].nodeName]||2==b&&!c[a[1].nodeName])},hasAttribute:function(){function a(b){var c=this.$.attributes.getNamedItem(b);if(\"input\"==this.getName())switch(b){case \"class\":return 0<this.$.className.length;case \"checked\":return!!this.$.checked;case \"value\":return b=this.getAttribute(\"type\"),\"checkbox\"==b||\"radio\"==b?\"on\"!=this.$.value:!!this.$.value}return c?c.specified:!1}return CKEDITOR.env.ie?\n8>CKEDITOR.env.version?function(b){return\"name\"==b?!!this.$.name:a.call(this,b)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle(\"display\",\"none\")},moveChildren:function(a,b){var c=this.$;a=a.$;if(c!=a){var f;if(b)for(;f=c.lastChild;)a.insertBefore(c.removeChild(f),a.firstChild);else for(;f=c.firstChild;)a.appendChild(c.removeChild(f))}},mergeSiblings:function(){function a(b,c,f){if(c&&c.type==CKEDITOR.NODE_ELEMENT){for(var d=[];c.data(\"cke-bookmark\")||c.isEmptyInlineRemoveable();)if(d.push(c),\nc=f?c.getNext():c.getPrevious(),!c||c.type!=CKEDITOR.NODE_ELEMENT)return;if(b.isIdentical(c)){for(var k=f?b.getLast():b.getFirst();d.length;)d.shift().move(b,!f);c.moveChildren(b,!f);c.remove();k&&k.type==CKEDITOR.NODE_ELEMENT&&k.mergeSiblings()}}}return function(b){if(!1===b||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is(\"a\"))a(this,this.getNext(),!0),a(this,this.getPrevious())}}(),show:function(){this.setStyles({display:\"\",visibility:\"\"})},setAttribute:function(){var a=function(a,b){this.$.setAttribute(a,\nb);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(b,c){\"class\"==b?this.$.className=c:\"style\"==b?this.$.style.cssText=c:\"tabindex\"==b?this.$.tabIndex=c:\"checked\"==b?this.$.checked=c:\"contenteditable\"==b?a.call(this,\"contentEditable\",c):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(b,c){if(\"src\"==b&&c.match(/^http:\\/\\//))try{a.apply(this,arguments)}catch(f){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var b in a)this.setAttribute(b,\na[b]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){\"class\"==a?a=\"className\":\"tabindex\"==a?a=\"tabIndex\":\"contenteditable\"==a&&(a=\"contentEditable\");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var b=0;b<a.length;b++)this.removeAttribute(a[b]);else for(b in a)a.hasOwnProperty(b)&&this.removeAttribute(b)},\nremoveStyle:function(a){var b=this.$.style;if(b.removeProperty||\"border\"!=a&&\"margin\"!=a&&\"padding\"!=a)b.removeProperty?b.removeProperty(a):b.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a)),this.$.style.cssText||this.removeAttribute(\"style\");else{var c=[\"top\",\"left\",\"right\",\"bottom\"],f;\"border\"==a&&(f=[\"color\",\"style\",\"width\"]);for(var b=[],d=0;d<c.length;d++)if(f)for(var e=0;e<f.length;e++)b.push([a,c[d],f[e]].join(\"-\"));else b.push([a,c[d]].join(\"-\"));for(a=0;a<b.length;a++)this.removeStyle(b[a])}},\nsetStyle:function(a,b){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=b;return this},setStyles:function(a){for(var b in a)this.setStyle(b,a[b]);return this},setOpacity:function(a){CKEDITOR.env.ie&&9>CKEDITOR.env.version?(a=Math.round(100*a),this.setStyle(\"filter\",100<=a?\"\":\"progid:DXImageTransform.Microsoft.Alpha(opacity\\x3d\"+a+\")\")):this.setStyle(\"opacity\",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix(\"user-select\",\"none\"));if(CKEDITOR.env.ie){this.setAttribute(\"unselectable\",\n\"on\");for(var a,b=this.getElementsByTag(\"*\"),c=0,f=b.count();c<f;c++)a=b.getItem(c),a.setAttribute(\"unselectable\",\"on\")}},getPositionedAncestor:function(){for(var a=this;\"html\"!=a.getName();){if(\"static\"!=a.getComputedStyle(\"position\"))return a;a=a.getParent()}return null},getDocumentPosition:function(a){var b=0,c=0,f=this.getDocument(),d=f.getBody(),e=\"BackCompat\"==f.$.compatMode;if(document.documentElement.getBoundingClientRect){var u=this.$.getBoundingClientRect(),g=f.$.documentElement,q=g.clientTop||\nd.$.clientTop||0,y=g.clientLeft||d.$.clientLeft||0,l=!0;CKEDITOR.env.ie&&(l=f.getDocumentElement().contains(this),f=f.getBody().contains(this),l=e&&f||!e&&l);l&&(CKEDITOR.env.webkit||CKEDITOR.env.ie&&12<=CKEDITOR.env.version?(b=d.$.scrollLeft||g.scrollLeft,c=d.$.scrollTop||g.scrollTop):(c=e?d.$:g,b=c.scrollLeft,c=c.scrollTop),b=u.left+b-y,c=u.top+c-q)}else for(q=this,y=null;q&&\"body\"!=q.getName()&&\"html\"!=q.getName();){b+=q.$.offsetLeft-q.$.scrollLeft;c+=q.$.offsetTop-q.$.scrollTop;q.equals(this)||\n(b+=q.$.clientLeft||0,c+=q.$.clientTop||0);for(;y&&!y.equals(q);)b-=y.$.scrollLeft,c-=y.$.scrollTop,y=y.getParent();y=q;q=(u=q.$.offsetParent)?new CKEDITOR.dom.element(u):null}a&&(u=this.getWindow(),q=a.getWindow(),!u.equals(q)&&u.$.frameElement&&(a=(new CKEDITOR.dom.element(u.$.frameElement)).getDocumentPosition(a),b+=a.x,c+=a.y));document.documentElement.getBoundingClientRect||!CKEDITOR.env.gecko||e||(b+=this.$.clientLeft?1:0,c+=this.$.clientTop?1:0);return{x:b,y:c}},scrollIntoView:function(a){var b=\nthis.getParent();if(b){do if((b.$.clientWidth&&b.$.clientWidth<b.$.scrollWidth||b.$.clientHeight&&b.$.clientHeight<b.$.scrollHeight)&&!b.is(\"body\")&&this.scrollIntoParent(b,a,1),b.is(\"html\")){var c=b.getWindow();try{var f=c.$.frameElement;f&&(b=new CKEDITOR.dom.element(f))}catch(d){}}while(b=b.getParent())}},scrollIntoParent:function(a,b,c){var f,d,e,u;function g(b,c){/body|html/.test(a.getName())?a.getWindow().$.scrollBy(b,c):(a.$.scrollLeft+=b,a.$.scrollTop+=c)}function q(a,b){var c={x:0,y:0};if(!a.is(l?\n\"body\":\"html\")){var f=a.$.getBoundingClientRect();c.x=f.left;c.y=f.top}f=a.getWindow();f.equals(b)||(f=q(CKEDITOR.dom.element.get(f.$.frameElement),b),c.x+=f.x,c.y+=f.y);return c}function y(a,b){return parseInt(a.getComputedStyle(\"margin-\"+b)||0,10)||0}!a&&(a=this.getWindow());e=a.getDocument();var l=\"BackCompat\"==e.$.compatMode;a instanceof CKEDITOR.dom.window&&(a=l?e.getBody():e.getDocumentElement());e=a.getWindow();d=q(this,e);var t=q(a,e),z=this.$.offsetHeight;f=this.$.offsetWidth;var h=a.$.clientHeight,\np=a.$.clientWidth;e=d.x-y(this,\"left\")-t.x||0;u=d.y-y(this,\"top\")-t.y||0;f=d.x+f+y(this,\"right\")-(t.x+p)||0;d=d.y+z+y(this,\"bottom\")-(t.y+h)||0;(0>u||0<d)&&g(0,!0===b?u:!1===b?d:0>u?u:d);c&&(0>e||0<f)&&g(0>e?e:f,0)},setState:function(a,b,c){b=b||\"cke\";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+\"_on\");this.removeClass(b+\"_off\");this.removeClass(b+\"_disabled\");c&&this.setAttribute(\"aria-pressed\",!0);c&&this.removeAttribute(\"aria-disabled\");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+\n\"_disabled\");this.removeClass(b+\"_off\");this.removeClass(b+\"_on\");c&&this.setAttribute(\"aria-disabled\",!0);c&&this.removeAttribute(\"aria-pressed\");break;default:this.addClass(b+\"_off\"),this.removeClass(b+\"_on\"),this.removeClass(b+\"_disabled\"),c&&this.removeAttribute(\"aria-pressed\"),c&&this.removeAttribute(\"aria-disabled\")}},getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},copyAttributes:function(a,\nb){var c=this.$.attributes;b=b||{};for(var f=0;f<c.length;f++){var d=c[f],e=d.nodeName.toLowerCase(),u;if(!(e in b))if(\"checked\"==e&&(u=this.getAttribute(e)))a.setAttribute(e,u);else if(!CKEDITOR.env.ie||this.hasAttribute(e))u=this.getAttribute(e),null===u&&(u=d.nodeValue),a.setAttribute(e,u)}\"\"!==this.$.style.cssText&&(a.$.style.cssText=this.$.style.cssText)},renameNode:function(a){if(this.getName()!=a){var b=this.getDocument();a=new CKEDITOR.dom.element(a,b);this.copyAttributes(a);this.moveChildren(a);\nthis.getParent(!0)&&this.$.parentNode.replaceChild(a.$,this.$);a.$[\"data-cke-expando\"]=this.$[\"data-cke-expando\"];this.$=a.$;delete this.getName}},getChild:function(){function a(b,c){var f=b.childNodes;if(0<=c&&c<f.length)return f[c]}return function(b){var c=this.$;if(b.slice)for(b=b.slice();0<b.length&&c;)c=a(c,b.shift());else c=a(c,b);return c?new CKEDITOR.dom.node(c):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT&&\nb.hasClass(\"cke_enable_context_menu\")}this.on(\"contextmenu\",function(b){b.data.getTarget().getAscendant(a,!0)||b.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle(\"direction\")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir||\"ltr\":this.getStyle(\"direction\")||this.getAttribute(\"dir\")},data:function(a,b){a=\"data-\"+a;if(void 0===b)return this.getAttribute(a);!1===b?this.removeAttribute(a):this.setAttribute(a,b);return null},\ngetEditor:function(){var a=CKEDITOR.instances,b,c;for(b in a)if(c=a[b],c.element.equals(this)&&c.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO)return c;return null},find:function(a){var c=d(this);a=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(b(this,a)));c();return a},findOne:function(a){var c=d(this);a=this.$.querySelector(b(this,a));c();return a?new CKEDITOR.dom.element(a):null},forEach:function(a,b,c){if(!(c||b&&this.type!=b))var f=a(this);if(!1!==f){c=this.getChildren();for(var d=0;d<c.count();d++)f=\nc.getItem(d),f.type==CKEDITOR.NODE_ELEMENT?f.forEach(a,b):b&&f.type!=b||a(f)}}});var l={width:[\"border-left-width\",\"border-right-width\",\"padding-left\",\"padding-right\"],height:[\"border-top-width\",\"border-bottom-width\",\"padding-top\",\"padding-bottom\"]};CKEDITOR.dom.element.prototype.setSize=function(a,b,d){\"number\"==typeof b&&(!d||CKEDITOR.env.ie&&CKEDITOR.env.quirks||(b-=c.call(this,a)),this.setStyle(a,b+\"px\"))};CKEDITOR.dom.element.prototype.getSize=function(a,b){var d=Math.max(this.$[\"offset\"+CKEDITOR.tools.capitalize(a)],\nthis.$[\"client\"+CKEDITOR.tools.capitalize(a)])||0;b&&(d-=c.call(this,a));return d}})();CKEDITOR.dom.documentFragment=function(a){a=a||CKEDITOR.document;this.$=a.type==CKEDITOR.NODE_DOCUMENT?a.$.createDocumentFragment():a};\nCKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(a){a=a.$;a.parentNode.insertBefore(this.$,a.nextSibling)},getHtml:function(){var a=new CKEDITOR.dom.element(\"div\");this.clone(1,1).appendTo(a);return a.getHtml().replace(/\\s*data-cke-expando=\".*?\"/g,\"\")}},!0,{append:1,appendBogus:1,clone:1,getFirst:1,getHtml:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,\ninsertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1});\n(function(){function a(a,b){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed)return this.end(),null;c.optimize()}var f,d=c.startContainer;f=c.endContainer;var e=c.startOffset,x=c.endOffset,z,h=this.guard,p=this.type,m=a?\"getPreviousSourceNode\":\"getNextSourceNode\";if(!a&&!this._.guardLTR){var C=f.type==CKEDITOR.NODE_ELEMENT?f:f.getParent(),r=f.type==CKEDITOR.NODE_ELEMENT?f.getChild(x):f.getNext();this._.guardLTR=function(a,b){return(!b||!C.equals(a))&&(!r||\n!a.equals(r))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}if(a&&!this._.guardRTL){var G=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),g=d.type==CKEDITOR.NODE_ELEMENT?e?d.getChild(e-1):null:d.getPrevious();this._.guardRTL=function(a,b){return(!b||!G.equals(a))&&(!g||!a.equals(g))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}var l=a?this._.guardRTL:this._.guardLTR;z=h?function(a,b){return!1===l(a,b)?!1:h(a,b)}:l;this.current?f=this.current[m](!1,p,z):(a?f.type==CKEDITOR.NODE_ELEMENT&&\n(f=0<x?f.getChild(x-1):!1===z(f,!0)?null:f.getPreviousSourceNode(!0,p,z)):(f=d,f.type==CKEDITOR.NODE_ELEMENT&&((f=f.getChild(e))||(f=!1===z(d,!0)?null:d.getNextSourceNode(!0,p,z)))),f&&!1===z(f)&&(f=null));for(;f&&!this._.end;){this.current=f;if(!this.evaluator||!1!==this.evaluator(f)){if(!b)return f}else if(b&&this.evaluator)return!1;f=f[m](!1,p,z)}this.end();return this.current=null}function d(b){for(var c,f=null;c=a.call(this,b);)f=c;return f}CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(a){this.range=\na;this._={}},proto:{end:function(){this._.end=1},next:function(){return a.call(this)},previous:function(){return a.call(this,1)},checkForward:function(){return!1!==a.call(this,0,1)},checkBackward:function(){return!1!==a.call(this,1,1)},lastForward:function(){return d.call(this)},lastBackward:function(){return d.call(this,1)},reset:function(){delete this.current;this._={}}}});var b={block:1,\"list-item\":1,table:1,\"table-row-group\":1,\"table-header-group\":1,\"table-footer-group\":1,\"table-row\":1,\"table-column-group\":1,\n\"table-column\":1,\"table-cell\":1,\"table-caption\":1},c={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(a){return\"none\"!=this.getComputedStyle(\"float\")||this.getComputedStyle(\"position\")in c||!b[this.getComputedStyle(\"display\")]?!!(this.is(CKEDITOR.dtd.$block)||a&&this.is(a)):!0};CKEDITOR.dom.walker.blockBoundary=function(a){return function(b){return!(b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary=function(){return this.blockBoundary({br:1})};\nCKEDITOR.dom.walker.bookmark=function(a,b){function c(a){return a&&a.getName&&\"span\"==a.getName()&&a.data(\"cke-bookmark\")}return function(f){var d,e;d=f&&f.type!=CKEDITOR.NODE_ELEMENT&&(e=f.getParent())&&c(e);d=a?d:d||c(f);return!!(b^d)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(b){var c;b&&b.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(b.getText())||CKEDITOR.env.webkit&&b.getText()==CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE);return!!(a^c)}};CKEDITOR.dom.walker.invisible=\nfunction(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.env.webkit?1:0;return function(f){b(f)?f=1:(f.type==CKEDITOR.NODE_TEXT&&(f=f.getParent()),f=f.$.offsetWidth<=c);return!!(a^f)}};CKEDITOR.dom.walker.nodeType=function(a,b){return function(c){return!!(b^c.type==a)}};CKEDITOR.dom.walker.bogus=function(a){function b(a){return!g(a)&&!l(a)}return function(c){var f=CKEDITOR.env.needsBrFiller?c.is&&c.is(\"br\"):c.getText&&e.test(c.getText());f&&(f=c.getParent(),c=c.getNext(b),f=f.isBlockBoundary()&&\n(!c||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()));return!!(a^f)}};CKEDITOR.dom.walker.temp=function(a){return function(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b=b&&b.hasAttribute(\"data-cke-temp\");return!!(a^b)}};var e=/^[\\t\\r\\n ]*(?:&nbsp;|\\xa0)$/,g=CKEDITOR.dom.walker.whitespaces(),l=CKEDITOR.dom.walker.bookmark(),k=CKEDITOR.dom.walker.temp(),n=function(a){return l(a)||g(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty)};CKEDITOR.dom.walker.ignored=\nfunction(a){return function(b){b=g(b)||l(b)||k(b);return!!(a^b)}};var w=CKEDITOR.dom.walker.ignored();CKEDITOR.dom.walker.empty=function(a){return function(b){for(var c=0,f=b.getChildCount();c<f;++c)if(!w(b.getChild(c)))return!!a;return!a}};var f=CKEDITOR.dom.walker.empty(),x=CKEDITOR.dom.walker.validEmptyBlockContainers=CKEDITOR.tools.extend(function(a){var b={},c;for(c in a)CKEDITOR.dtd[c][\"#\"]&&(b[c]=1);return b}(CKEDITOR.dtd.$block),{caption:1,td:1,th:1});CKEDITOR.dom.walker.editable=function(a){return function(b){b=\nw(b)?!1:b.type==CKEDITOR.NODE_TEXT||b.type==CKEDITOR.NODE_ELEMENT&&(b.is(CKEDITOR.dtd.$inline)||b.is(\"hr\")||\"false\"==b.getAttribute(\"contenteditable\")||!CKEDITOR.env.needsBrFiller&&b.is(x)&&f(b))?!0:!1;return!!(a^b)}};CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(n(a));return a&&(CKEDITOR.env.needsBrFiller?a.is&&a.is(\"br\"):a.getText&&e.test(a.getText()))?a:!1}})();\nCKEDITOR.dom.range=function(a){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=!0;var d=a instanceof CKEDITOR.dom.document;this.document=d?a:a.getDocument();this.root=d?a.getBody():a};\n(function(){function a(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset}function d(a,b,c,d,e){function q(a,b,c,f){var d=c?a.getPrevious():a.getNext();if(f&&k)return d;h||f?b.append(a.clone(!0,e),c):(a.remove(),z&&b.append(a));return d}function g(){var a,b,c,f=Math.min(v.length,D.length);for(a=0;a<f;a++)if(b=v[a],c=D[a],!b.equals(c))return a;return a-1}function l(){var b=I-1,c=w&&n&&!p.equals(m);b<E-1||b<L-1||c?(c?a.moveToPosition(m,\nCKEDITOR.POSITION_BEFORE_START):L==b+1&&H?a.moveToPosition(D[b],CKEDITOR.POSITION_BEFORE_END):a.moveToPosition(D[b+1],CKEDITOR.POSITION_BEFORE_START),d&&(b=v[b+1])&&b.type==CKEDITOR.NODE_ELEMENT&&(c=CKEDITOR.dom.element.createFromHtml('\\x3cspan data-cke-bookmark\\x3d\"1\" style\\x3d\"display:none\"\\x3e\\x26nbsp;\\x3c/span\\x3e',a.document),c.insertAfter(b),b.mergeSiblings(!1),a.moveToBookmark({startNode:c}))):a.collapse(!0)}a.optimizeBookmark();var k=0===b,z=1==b,h=2==b;b=h||z;var p=a.startContainer,m=a.endContainer,\nC=a.startOffset,r=a.endOffset,G,H,w,n,M,Q;if(h&&m.type==CKEDITOR.NODE_TEXT&&p.equals(m))p=a.document.createText(p.substring(C,r)),c.append(p);else{m.type==CKEDITOR.NODE_TEXT?h?Q=!0:m=m.split(r):0<m.getChildCount()?r>=m.getChildCount()?(m=m.getChild(r-1),H=!0):m=m.getChild(r):n=H=!0;p.type==CKEDITOR.NODE_TEXT?h?M=!0:p.split(C):0<p.getChildCount()?0===C?(p=p.getChild(C),G=!0):p=p.getChild(C-1):w=G=!0;for(var v=p.getParents(),D=m.getParents(),I=g(),E=v.length-1,L=D.length-1,J=c,ba,Z,V,fa=-1,O=I;O<=E;O++){Z=\nv[O];V=Z.getNext();for(O!=E||Z.equals(D[O])&&E<L?b&&(ba=J.append(Z.clone(0,e))):G?q(Z,J,!1,w):M&&J.append(a.document.createText(Z.substring(C)));V;){if(V.equals(D[O])){fa=O;break}V=q(V,J)}J=ba}J=c;for(O=I;O<=L;O++)if(c=D[O],V=c.getPrevious(),c.equals(v[O]))b&&(J=J.getChild(0));else{O!=L||c.equals(v[O])&&L<E?b&&(ba=J.append(c.clone(0,e))):H?q(c,J,!1,n):Q&&J.append(a.document.createText(c.substring(0,r)));if(O>fa)for(;V;)V=q(V,J,!0);J=ba}h||l()}}function b(){var a=!1,b=CKEDITOR.dom.walker.whitespaces(),\nc=CKEDITOR.dom.walker.bookmark(!0),d=CKEDITOR.dom.walker.bogus();return function(e){return c(e)||b(e)?!0:d(e)&&!a?a=!0:e.type==CKEDITOR.NODE_TEXT&&(e.hasAscendant(\"pre\")||CKEDITOR.tools.trim(e.getText()).length)||e.type==CKEDITOR.NODE_ELEMENT&&!e.is(g)?!1:!0}}function c(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?!0:!a&&l(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}}function e(a){return function(){var b;return this[a?\n\"getPreviousNode\":\"getNextNode\"](function(a){!b&&w(a)&&(b=a);return n(a)&&!(l(a)&&a.equals(b))})}}var g={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,\"var\":1},l=CKEDITOR.dom.walker.bogus(),k=/^[\\t\\r\\n ]*(?:&nbsp;|\\xa0)$/,n=CKEDITOR.dom.walker.editable(),w=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype={clone:function(){var a=new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer);\na.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){a?(this._setEndContainer(this.startContainer),this.endOffset=this.startOffset):(this._setStartContainer(this.endContainer),this.startOffset=this.endOffset);this.collapsed=!0},cloneContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||d(this,2,b,!1,\"undefined\"==typeof a?!0:a);return b},deleteContents:function(a){this.collapsed||\nd(this,0,null,a)},extractContents:function(a,b){var c=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||d(this,1,c,a,\"undefined\"==typeof b?!0:b);return c},createBookmark:function(a){var b,c,d,e,q=this.collapsed;b=this.document.createElement(\"span\");b.data(\"cke-bookmark\",1);b.setStyle(\"display\",\"none\");b.setHtml(\"\\x26nbsp;\");a&&(d=\"cke_bm_\"+CKEDITOR.tools.getNextNumber(),b.setAttribute(\"id\",d+(q?\"C\":\"S\")));q||(c=b.clone(),c.setHtml(\"\\x26nbsp;\"),a&&c.setAttribute(\"id\",d+\"E\"),e=this.clone(),\ne.collapse(),e.insertNode(c));e=this.clone();e.collapse(!0);e.insertNode(b);c?(this.setStartAfter(b),this.setEndBefore(c)):this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(q?\"C\":\"S\"):b,endNode:a?d+\"E\":c,serializable:a,collapsed:q}},createBookmark2:function(){function a(b){var f=b.container,d=b.offset,e;e=f;var g=d;e=e.type!=CKEDITOR.NODE_ELEMENT||0===g||g==e.getChildCount()?0:e.getChild(g-1).type==CKEDITOR.NODE_TEXT&&e.getChild(g).type==CKEDITOR.NODE_TEXT;e&&(f=f.getChild(d-\n1),d=f.getLength());if(f.type==CKEDITOR.NODE_ELEMENT&&0<d){a:{for(e=f;d--;)if(g=e.getChild(d).getIndex(!0),0<=g){d=g;break a}d=-1}d+=1}if(f.type==CKEDITOR.NODE_TEXT){e=f;for(g=0;(e=e.getPrevious())&&e.type==CKEDITOR.NODE_TEXT;)g+=e.getText().replace(CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE,\"\").length;e=g;f.getText()?d+=e:(g=f.getPrevious(c),e?(d=e,f=g?g.getNext():f.getParent().getFirst()):(f=f.getParent(),d=g?g.getIndex(!0)+1:0))}b.container=f;b.offset=d}function b(a,c){var f=c.getCustomData(\"cke-fillingChar\");\nif(f){var d=a.container;f.equals(d)&&(a.offset-=CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE.length,0>=a.offset&&(a.offset=d.getIndex(),a.container=d.getParent()))}}var c=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,!0);return function(c){var d=this.collapsed,e={container:this.startContainer,offset:this.startOffset},g={container:this.endContainer,offset:this.endOffset};c&&(a(e),b(e,this.root),d||(a(g),b(g,this.root)));return{start:e.container.getAddress(c),end:d?null:g.container.getAddress(c),\nstartOffset:e.offset,endOffset:g.offset,normalized:c,collapsed:d,is2:!0}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&&this.document.getByAddress(a.end,a.normalized);a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a):this.collapse(!0)}else b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode,a=c?this.document.getById(a.endNode):a.endNode,this.setStartBefore(b),b.remove(),a?(this.setEndBefore(a),a.remove()):\nthis.collapse(!0)},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,e;if(a.type==CKEDITOR.NODE_ELEMENT)if(e=a.getChildCount(),e>c)a=a.getChild(c);else if(1>e)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}if(b.type==CKEDITOR.NODE_ELEMENT)if(e=b.getChildCount(),e>d)b=b.getChild(d).getPreviousSourceNode(!0);else if(1>e)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b=\nb.lastChild;b=new CKEDITOR.dom.node(b)}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer,d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a):\nthis.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&a.is(\"span\")&&a.data(\"cke-bookmark\")&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&b.is&&b.is(\"span\")&&b.data(\"cke-bookmark\")&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer,d=this.startOffset,e=this.collapsed;if((!a||\ne)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength())d=c.getIndex()+1,c=c.getParent();else{var q=c.split(d),d=c.getIndex()+1,c=c.getParent();this.startContainer.equals(this.endContainer)?this.setEnd(q,this.endOffset-this.startOffset):c.equals(this.endContainer)&&(this.endOffset+=1)}else d=c.getIndex(),c=c.getParent();this.setStart(c,d);if(e){this.collapse(!0);return}}c=this.endContainer;d=this.endOffset;b||e||!c||c.type!=CKEDITOR.NODE_TEXT||(d?(d>=c.getLength()||c.split(d),d=c.getIndex()+1):\nd=c.getIndex(),c=c.getParent(),this.setEnd(c,d))},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute(\"contenteditable\")?null:a}var d=new RegExp(/[^\\s\\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var e=1;case CKEDITOR.ENLARGE_ELEMENT:var q=function(a,b){var c=new CKEDITOR.dom.range(l);c.setStart(a,b);c.setEndAt(l,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),f;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};f=\nc.next();){if(f.type!=CKEDITOR.NODE_TEXT)return!1;G=f!=a?f.getText():f.substring(b);if(d.test(G))return!1}return!0};if(this.collapsed)break;var g=this.getCommonAncestor(),l=this.root,k,z,h,p,m,C=!1,r,G;r=this.startContainer;var H=this.startOffset;r.type==CKEDITOR.NODE_TEXT?(H&&(r=!CKEDITOR.tools.trim(r.substring(0,H)).length&&r,C=!!r),r&&((p=r.getPrevious())||(h=r.getParent()))):(H&&(p=r.getChild(H-1)||r.getLast()),p||(h=r));for(h=c(h);h||p;){if(h&&!p){!m&&h.equals(g)&&(m=!0);if(e?h.isBlockBoundary():\n!l.contains(h))break;C&&\"inline\"==h.getComputedStyle(\"display\")||(C=!1,m?k=h:this.setStartBefore(h));p=h.getPrevious()}for(;p;)if(r=!1,p.type==CKEDITOR.NODE_COMMENT)p=p.getPrevious();else{if(p.type==CKEDITOR.NODE_TEXT)G=p.getText(),d.test(G)&&(p=null),r=/[\\s\\ufeff]$/.test(G);else if((p.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&p.is(\"br\"))&&!p.data(\"cke-bookmark\"))if(C&&CKEDITOR.dtd.$removeEmpty[p.getName()]){G=p.getText();if(d.test(G))p=null;else for(var H=p.$.getElementsByTagName(\"*\"),w=0,n;n=\nH[w++];)if(!CKEDITOR.dtd.$removeEmpty[n.nodeName.toLowerCase()]){p=null;break}p&&(r=!!G.length)}else p=null;r&&(C?m?k=h:h&&this.setStartBefore(h):C=!0);if(p){r=p.getPrevious();if(!h&&!r){h=p;p=null;break}p=r}else h=null}h&&(h=c(h.getParent()))}r=this.endContainer;H=this.endOffset;h=p=null;m=C=!1;r.type==CKEDITOR.NODE_TEXT?CKEDITOR.tools.trim(r.substring(H)).length?C=!0:(C=!r.getLength(),H==r.getLength()?(p=r.getNext())||(h=r.getParent()):q(r,H)&&(h=r.getParent())):(p=r.getChild(H))||(h=r);for(;h||\np;){if(h&&!p){!m&&h.equals(g)&&(m=!0);if(e?h.isBlockBoundary():!l.contains(h))break;C&&\"inline\"==h.getComputedStyle(\"display\")||(C=!1,m?z=h:h&&this.setEndAfter(h));p=h.getNext()}for(;p;){r=!1;if(p.type==CKEDITOR.NODE_TEXT)G=p.getText(),q(p,0)||(p=null),r=/^[\\s\\ufeff]/.test(G);else if(p.type==CKEDITOR.NODE_ELEMENT){if((0<p.$.offsetWidth||b&&p.is(\"br\"))&&!p.data(\"cke-bookmark\"))if(C&&CKEDITOR.dtd.$removeEmpty[p.getName()]){G=p.getText();if(d.test(G))p=null;else for(H=p.$.getElementsByTagName(\"*\"),w=\n0;n=H[w++];)if(!CKEDITOR.dtd.$removeEmpty[n.nodeName.toLowerCase()]){p=null;break}p&&(r=!!G.length)}else p=null}else r=1;r&&C&&(m?z=h:this.setEndAfter(h));if(p){r=p.getNext();if(!h&&!r){h=p;p=null;break}p=r}else h=null}h&&(h=c(h.getParent()))}k&&z&&(g=k.contains(z)?z:k,this.setStartBefore(g),this.setEndAfter(g));break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:h=new CKEDITOR.dom.range(this.root);l=this.root;h.setStartAt(l,CKEDITOR.POSITION_AFTER_START);h.setEnd(this.startContainer,\nthis.startOffset);h=new CKEDITOR.dom.walker(h);var M,Q,v=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),D=null,I=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&\"false\"==a.getAttribute(\"contenteditable\"))if(D){if(D.equals(a)){D=null;return}}else D=a;else if(D)return;var b=v(a);b||(M=a);return b},e=function(a){var b=I(a);!b&&a.is&&a.is(\"br\")&&(Q=a);return b};h.guard=I;h=h.lastBackward();M=M||l;this.setStartAt(M,!M.is(\"br\")&&(!h&&this.checkStartOfBlock()||h&&M.contains(h))?\nCKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){h=this.clone();h=new CKEDITOR.dom.walker(h);var E=CKEDITOR.dom.walker.whitespaces(),L=CKEDITOR.dom.walker.bookmark();h.evaluator=function(a){return!E(a)&&!L(a)};if((h=h.previous())&&h.type==CKEDITOR.NODE_ELEMENT&&h.is(\"br\"))break}h=this.clone();h.collapse();h.setEndAt(l,CKEDITOR.POSITION_BEFORE_END);h=new CKEDITOR.dom.walker(h);h.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?e:I;M=D=Q=null;h=h.lastForward();\nM=M||l;this.setEndAt(M,!h&&this.checkEndOfBlock()||h&&M.contains(h)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);Q&&this.setEndAfter(Q)}},shrink:function(a,b,c){if(!this.collapsed){a=a||CKEDITOR.SHRINK_TEXT;var d=this.clone(),e=this.startContainer,q=this.endContainer,g=this.startOffset,l=this.endOffset,k=1,z=1;e&&e.type==CKEDITOR.NODE_TEXT&&(g?g>=e.getLength()?d.setStartAfter(e):(d.setStartBefore(e),k=0):d.setStartBefore(e));q&&q.type==CKEDITOR.NODE_TEXT&&(l?l>=q.getLength()?d.setEndAfter(q):\n(d.setEndAfter(q),z=0):d.setEndBefore(q));var d=new CKEDITOR.dom.walker(d),h=CKEDITOR.dom.walker.bookmark();d.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var p;d.guard=function(b,d){if(h(b))return!0;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||d&&b.equals(p)||!1===c&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute(\"contenteditable\"))return!1;d||b.type!=CKEDITOR.NODE_ELEMENT||\n(p=b);return!0};k&&(e=d[a==CKEDITOR.SHRINK_ELEMENT?\"lastForward\":\"next\"]())&&this.setStartAt(e,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);z&&(d.reset(),(d=d[a==CKEDITOR.SHRINK_ELEMENT?\"lastBackward\":\"previous\"]())&&this.setEndAt(d,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END));return!(!k&&!z)}},insertNode:function(a){this.optimizeBookmark();this.trim(!1,!0);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&\nthis.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(!0)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(b,c){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(c=b.getIndex(),b=b.getParent());this._setStartContainer(b);this.startOffset=\nc;this.endContainer||(this._setEndContainer(b),this.endOffset=c);a(this)},setEnd:function(b,c){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(c=b.getIndex()+1,b=b.getParent());this._setEndContainer(b);this.endOffset=c;this.startContainer||(this._setStartContainer(b),this.startOffset=c);a(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),\na.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setStart(b,0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setStart(b,b.getLength()):this.setStart(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(b);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(b)}a(this)},setEndAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setEnd(b,\n0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setEnd(b,b.getLength()):this.setEnd(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(b);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(b)}a(this)},fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();this.insertNode(d);var e=d.getBogus();e&&e.remove();\nd.appendBogus();this.moveToBookmark(c);return d},splitBlock:function(a,b){var c=new CKEDITOR.dom.elementPath(this.startContainer,this.root),d=new CKEDITOR.dom.elementPath(this.endContainer,this.root),e=c.block,q=d.block,g=null;if(!c.blockLimit.equals(d.blockLimit))return null;\"br\"!=a&&(e||(e=this.fixBlock(!0,a),q=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block),q||(q=this.fixBlock(!1,a)));c=e&&this.checkStartOfBlock();d=q&&this.checkEndOfBlock();this.deleteContents();e&&e.equals(q)&&\n(d?(g=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(q,CKEDITOR.POSITION_AFTER_END),q=null):c?(g=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e=null):(q=this.splitElement(e,b||!1),e.is(\"ul\",\"ol\")||e.appendBogus()));return{previousBlock:e,nextBlock:q,wasStartOfBlock:c,wasEndOfBlock:d,elementPath:g}},splitElement:function(a,b){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);\nvar c=this.extractContents(!1,b||!1),d=a.clone(!1,b||!1);c.appendTo(d);d.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return d},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)||c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable()||d.is(\"table\")&&a.is(\"caption\")?!1:!0}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(!1);return function(b){for(var c=this.createBookmark(),d=this[b?\"endPath\":\"startPath\"](),e=d.block||\nd.blockLimit,g;e&&!e.equals(d.root)&&!e.getFirst(a(e));)g=e.getParent(),this[b?\"setEndAt\":\"setStartAt\"](e,CKEDITOR.POSITION_AFTER_END),e.remove(1),e=g;this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a,b){var d=b==CKEDITOR.START,e=this.clone();e.collapse(d);e[d?\"setStartAt\":\"setEndAt\"](a,d?CKEDITOR.POSITION_AFTER_START:\nCKEDITOR.POSITION_BEFORE_END);e=new CKEDITOR.dom.walker(e);e.evaluator=c(d);return e[d?\"checkBackward\":\"checkForward\"]()},checkStartOfBlock:function(){var a=this.startContainer,c=this.startOffset;CKEDITOR.env.ie&&c&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.ltrim(a.substring(0,c)),k.test(a)&&this.trim(0,1));this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(!0);c.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(c);\na.evaluator=b();return a.checkBackward()},checkEndOfBlock:function(){var a=this.endContainer,c=this.endOffset;CKEDITOR.env.ie&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.rtrim(a.substring(c)),k.test(a)&&this.trim(1,0));this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(!1);c.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END);a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();\nd.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type==CKEDITOR.NODE_ELEMENT){if(\"false\"==b.getAttribute(\"contentEditable\")&&!b.data(\"cke-editable\"))return 0;if(b.is(\"html\")||\n\"true\"==b.getAttribute(\"contentEditable\")&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(!1))return this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START),!0;for(var c=0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&this.checkEndOfBlock()&&k.test(a.getText())?this.moveToPosition(a,\nCKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable())this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START),c=1;else if(b&&a.is(\"br\")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);else if(\"false\"==a.getAttribute(\"contenteditable\")&&a.is(CKEDITOR.dtd.$block))return this.setStartBefore(a),this.setEndAfter(a),\n!0;var d=a,e=c,q=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(!1)&&(q=d[b?\"getLast\":\"getFirst\"](w));e||q||(q=d[b?\"getPrevious\":\"getNext\"](w));a=q}return!!c},moveToClosestEditablePosition:function(a,b){var c,d=0,e,q,g=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];a?(c=new CKEDITOR.dom.range(this.root),c.moveToPosition(a,g[b?0:1])):c=this.clone();if(a&&!a.is(CKEDITOR.dtd.$block))d=1;else if(e=c[b?\"getNextEditableNode\":\"getPreviousEditableNode\"]())d=1,(q=e.type==CKEDITOR.NODE_ELEMENT)&&\ne.is(CKEDITOR.dtd.$block)&&\"false\"==e.getAttribute(\"contenteditable\")?(c.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),c.setEndAt(e,CKEDITOR.POSITION_AFTER_END)):!CKEDITOR.env.needsBrFiller&&q&&e.is(CKEDITOR.dom.walker.validEmptyBlockContainers)?(c.setEnd(e,0),c.collapse()):c.moveToPosition(e,g[b?1:0]);d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,!0)},getEnclosedNode:function(){var a=\nthis.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(!1,!0),c=CKEDITOR.dom.walker.whitespaces(!0);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=\nthis.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:e(),getPreviousEditableNode:e(1),scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml(\"\\x3cspan\\x3e\\x26nbsp;\\x3c/span\\x3e\",this.document),b,c,d,e=this.clone();e.optimize();(d=e.startContainer.type==CKEDITOR.NODE_TEXT)?(c=e.startContainer.getText(),b=e.startContainer.split(e.startOffset),a.insertAfter(e.startContainer)):e.insertNode(a);a.scrollIntoView();\nd&&(e.startContainer.setText(c),b.remove());a.remove()},_setStartContainer:function(a){this.startContainer=a},_setEndContainer:function(a){this.endContainer=a}}})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3;CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT=1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2;\"use strict\";\n(function(){function a(a){1>arguments.length||(this.range=a,this.forceBrBreak=0,this.enlargeBr=1,this.enforceRealBlocks=0,this._||(this._={}))}function d(a){var b=[];a.forEach(function(a){if(\"true\"==a.getAttribute(\"contenteditable\"))return b.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return b}function b(a,c,e,g){a:{null==g&&(g=d(e));for(var l;l=g.shift();)if(l.getDtd().p){g={element:l,remaining:g};break a}g=null}if(!g)return 0;if((l=CKEDITOR.filter.instances[g.element.data(\"cke-filter\")])&&!l.check(c))return b(a,\nc,e,g.remaining);c=new CKEDITOR.dom.range(g.element);c.selectNodeContents(g.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=l;a._.nestedEditable={element:g.element,container:e,remaining:g.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return!1;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var e=/^[\\r\\n\\t ]+$/,g=CKEDITOR.dom.walker.bookmark(!1,!0),l=CKEDITOR.dom.walker.whitespaces(!0),\nk=function(a){return g(a)&&l(a)},n={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var d,l,A,u,B;a=a||\"p\";if(this._.nestedEditable){if(d=this._.nestedEditable.iterator.getNextParagraph(a))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,d;this.activeFilter=this.filter;if(b(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(a);this._.nestedEditable=\nnull}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var q=this.range.clone();l=q.startPath();var y=q.endPath(),F=!q.collapsed&&c(q,l.block),t=!q.collapsed&&c(q,y.block,1);q.shrink(CKEDITOR.SHRINK_ELEMENT,!0);F&&q.setStartAt(l.block,CKEDITOR.POSITION_BEFORE_END);t&&q.setEndAt(y.block,CKEDITOR.POSITION_AFTER_START);l=q.endContainer.hasAscendant(\"pre\",!0)||q.startContainer.hasAscendant(\"pre\",!0);q.enlarge(this.forceBrBreak&&!l||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);\nq.collapsed||(l=new CKEDITOR.dom.walker(q.clone()),y=CKEDITOR.dom.walker.bookmark(!0,!0),l.evaluator=y,this._.nextNode=l.next(),l=new CKEDITOR.dom.walker(q.clone()),l.evaluator=y,l=l.previous(),this._.lastNode=l.getNextSourceNode(!0,null,q.root),this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(y=this.range.clone(),y.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),y.checkEndOfBlock()&&\n(y=new CKEDITOR.dom.elementPath(y.endContainer,y.root),this._.lastNode=(y.block||y.blockLimit).getNextSourceNode(!0))),this._.lastNode&&q.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=q.document.createText(\"\"),this._.lastNode.insertAfter(l)),q=null);this._.started=1;l=q}y=this._.nextNode;q=this._.lastNode;for(this._.nextNode=null;y;){var F=0,t=y.hasAscendant(\"pre\"),z=y.type!=CKEDITOR.NODE_ELEMENT,h=0;if(z)y.type==CKEDITOR.NODE_TEXT&&e.test(y.getText())&&(z=0);else{var p=y.getName();\nif(CKEDITOR.dtd.$block[p]&&\"false\"==y.getAttribute(\"contenteditable\")){d=y;b(this,a,d);break}else if(y.isBlockBoundary(this.forceBrBreak&&!t&&{br:1})){if(\"br\"==p)z=1;else if(!l&&!y.getChildCount()&&\"hr\"!=p){d=y;A=y.equals(q);break}l&&(l.setEndAt(y,CKEDITOR.POSITION_BEFORE_START),\"br\"!=p&&(this._.nextNode=y));F=1}else{if(y.getFirst()){l||(l=this.range.clone(),l.setStartAt(y,CKEDITOR.POSITION_BEFORE_START));y=y.getFirst();continue}z=1}}z&&!l&&(l=this.range.clone(),l.setStartAt(y,CKEDITOR.POSITION_BEFORE_START));\nA=(!F||z)&&y.equals(q);if(l&&!F)for(;!y.getNext(k)&&!A;){p=y.getParent();if(p.isBlockBoundary(this.forceBrBreak&&!t&&{br:1})){F=1;z=0;A||p.equals(q);l.setEndAt(p,CKEDITOR.POSITION_BEFORE_END);break}y=p;z=1;A=y.equals(q);h=1}z&&l.setEndAt(y,CKEDITOR.POSITION_AFTER_END);y=this._getNextSourceNode(y,h,q);if((A=!y)||F&&l)break}if(!d){if(!l)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;d=new CKEDITOR.dom.elementPath(l.startContainer,l.root);y=d.blockLimit;F={div:1,th:1,td:1};\nd=d.block;!d&&y&&!this.enforceRealBlocks&&F[y.getName()]&&l.checkStartOfBlock()&&l.checkEndOfBlock()&&!y.equals(l.root)?d=y:!d||this.enforceRealBlocks&&d.is(n)?(d=this.range.document.createElement(a),l.extractContents().appendTo(d),d.trim(),l.insertNode(d),u=B=!0):\"li\"!=d.getName()?l.checkStartOfBlock()&&l.checkEndOfBlock()||(d=d.clone(!1),l.extractContents().appendTo(d),d.trim(),B=l.splitBlock(),u=!B.wasStartOfBlock,B=!B.wasEndOfBlock,l.insertNode(d)):A||(this._.nextNode=d.equals(q)?null:this._getNextSourceNode(l.getBoundaryNodes().endNode,\n1,q))}u&&(u=d.getPrevious())&&u.type==CKEDITOR.NODE_ELEMENT&&(\"br\"==u.getName()?u.remove():u.getLast()&&\"br\"==u.getLast().$.nodeName.toLowerCase()&&u.getLast().remove());B&&(u=d.getLast())&&u.type==CKEDITOR.NODE_ELEMENT&&\"br\"==u.getName()&&(!CKEDITOR.env.needsBrFiller||u.getPrevious(g)||u.getNext(g))&&u.remove();this._.nextNode||(this._.nextNode=A||d.equals(q)||!q?null:this._getNextSourceNode(d,1,q));return d},_getNextSourceNode:function(a,b,c){function d(a){return!(a.equals(c)||a.equals(e))}var e=\nthis.range.root;for(a=a.getNextSourceNode(b,null,d);!g(a);)a=a.getNextSourceNode(b,null,d);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})();\nCKEDITOR.command=function(a,d){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return!1;this.editorFocus&&a.focus();return!1===this.fire(\"exec\")?!0:!1!==d.exec.call(this,a,b)};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return!0;if(this.context&&!b.isContextFor(this.context)||!this.checkAllowed(!0))return this.disable(),!0;this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&&this.disable();return!1===this.fire(\"refresh\",\n{editor:a,path:b})?!0:d.refresh&&!1!==d.refresh.apply(this,arguments)};var b;this.checkAllowed=function(c){return c||\"boolean\"!=typeof b?b=a.activeFilter.checkFeature(this):b};CKEDITOR.tools.extend(this,d,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!d.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)};\nCKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(this.preserveState&&\"undefined\"!=typeof this.previousState?this.previousState:CKEDITOR.TRISTATE_OFF)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return!1;this.previousState=this.state;this.state=a;this.fire(\"state\");return!0},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF?\nthis.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3;\nCKEDITOR.config={customConfig:\"config.js\",autoUpdateElement:!0,language:\"\",defaultLanguage:\"en\",contentsLangDirection:\"\",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:\"\\x3c!DOCTYPE html\\x3e\",bodyId:\"\",bodyClass:\"\",fullPage:!1,height:200,contentsCss:CKEDITOR.getUrl(\"contents.css\"),extraPlugins:\"\",removePlugins:\"\",protectedSource:[],tabIndex:0,width:\"\",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]};\n(function(){function a(a,b,c,d,e){var h,p;a=[];for(h in b){p=b[h];p=\"boolean\"==typeof p?{}:\"function\"==typeof p?{match:p}:K(p);\"$\"!=h.charAt(0)&&(p.elements=h);c&&(p.featureName=c.toLowerCase());var m=p;m.elements=l(m.elements,/\\s+/)||null;m.propertiesOnly=m.propertiesOnly||!0===m.elements;var r=/\\s*,\\s*/,q=void 0;for(q in Q){m[q]=l(m[q],r)||null;var f=m,E=v[q],z=l(m[v[q]],r),g=m[q],C=[],G=!0,L=void 0;z?G=!1:z={};for(L in g)\"!\"==L.charAt(0)&&(L=L.slice(1),C.push(L),z[L]=!0,G=!1);for(;L=C.pop();)g[L]=\ng[\"!\"+L],delete g[\"!\"+L];f[E]=(G?!1:z)||null}m.match=m.match||null;d.push(p);a.push(p)}b=e.elements;e=e.generic;var k;c=0;for(d=a.length;c<d;++c){h=K(a[c]);p=!0===h.classes||!0===h.styles||!0===h.attributes;m=h;q=E=r=void 0;for(r in Q)m[r]=F(m[r]);f=!0;for(q in v){r=v[q];E=m[r];z=[];g=void 0;for(g in E)-1<g.indexOf(\"*\")?z.push(new RegExp(\"^\"+g.replace(/\\*/g,\".*\")+\"$\")):z.push(g);E=z;E.length&&(m[r]=E,f=!1)}m.nothingRequired=f;m.noProperties=!(m.attributes||m.classes||m.styles);if(!0===h.elements||\nnull===h.elements)e[p?\"unshift\":\"push\"](h);else for(k in m=h.elements,delete h.elements,m)if(b[k])b[k][p?\"unshift\":\"push\"](h);else b[k]=[h]}}function d(a,c,d,h){if(!a.match||a.match(c))if(h||k(a,c))if(a.propertiesOnly||(d.valid=!0),d.allAttributes||(d.allAttributes=b(a.attributes,c.attributes,d.validAttributes)),d.allStyles||(d.allStyles=b(a.styles,c.styles,d.validStyles)),!d.allClasses){a=a.classes;c=c.classes;h=d.validClasses;if(a)if(!0===a)a=!0;else{for(var p=0,e=c.length,m;p<e;++p)m=c[p],h[m]||\n(h[m]=a(m));a=!1}else a=!1;d.allClasses=a}}function b(a,b,c){if(!a)return!1;if(!0===a)return!0;for(var d in b)c[d]||(c[d]=a(d));return!1}function c(a,b,c){if(!a.match||a.match(b)){if(a.noProperties)return!1;c.hadInvalidAttribute=e(a.attributes,b.attributes)||c.hadInvalidAttribute;c.hadInvalidStyle=e(a.styles,b.styles)||c.hadInvalidStyle;a=a.classes;b=b.classes;if(a){for(var d=!1,h=!0===a,p=b.length;p--;)if(h||a(b[p]))b.splice(p,1),d=!0;a=d}else a=!1;c.hadInvalidClass=a||c.hadInvalidClass}}function e(a,\nb){if(!a)return!1;var c=!1,d=!0===a,h;for(h in b)if(d||a(h))delete b[h],c=!0;return c}function g(a,b,c){if(a.disabled||a.customConfig&&!c||!b)return!1;a._.cachedChecks={};return!0}function l(a,b){if(!a)return!1;if(!0===a)return a;if(\"string\"==typeof a)return a=R(a),\"*\"==a?!0:CKEDITOR.tools.convertArrayToObject(a.split(b));if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a):!1;var c={},d=0,h;for(h in a)c[h]=a[h],d++;return d?c:!1}function k(a,b){if(a.nothingRequired)return!0;\nvar c,d,h,p;if(h=a.requiredClasses)for(p=b.classes,c=0;c<h.length;++c)if(d=h[c],\"string\"==typeof d){if(-1==CKEDITOR.tools.indexOf(p,d))return!1}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(p,d))return!1;return n(b.styles,a.requiredStyles)&&n(b.attributes,a.requiredAttributes)}function n(a,b){if(!b)return!0;for(var c=0,d;c<b.length;++c)if(d=b[c],\"string\"==typeof d){if(!(d in a))return!1}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,d))return!1;return!0}function w(a){if(!a)return{};\na=a.split(/\\s*,\\s*/).sort();for(var b={};a.length;)b[a.shift()]=\"cke-test\";return b}function f(a){var b,c,d,h,p={},e=1;for(a=R(a);b=a.match(D);)(c=b[2])?(d=x(c,\"styles\"),h=x(c,\"attrs\"),c=x(c,\"classes\")):d=h=c=null,p[\"$\"+e++]={elements:b[1],classes:c,styles:d,attributes:h},a=a.slice(b[0].length);return p}function x(a,b){var c=a.match(I[b]);return c?R(c[1]):null}function A(a){var b=a.styleBackup=a.attributes.style,c=a.classBackup=a.attributes[\"class\"];a.styles||(a.styles=CKEDITOR.tools.parseCssText(b||\n\"\",1));a.classes||(a.classes=c?c.split(/\\s+/):[])}function u(a,b,h,e){var m=0,r;e.toHtml&&(b.name=b.name.replace(E,\"$1\"));if(e.doCallbacks&&a.elementCallbacks){a:{r=a.elementCallbacks;for(var g=0,f=r.length,z;g<f;++g)if(z=r[g](b)){r=z;break a}r=void 0}if(r)return r}if(e.doTransform&&(r=a._.transformations[b.name])){A(b);for(g=0;g<r.length;++g)p(a,b,r[g]);q(b)}if(e.doFilter){a:{g=b.name;f=a._;a=f.allowedRules.elements[g];r=f.allowedRules.generic;g=f.disallowedRules.elements[g];f=f.disallowedRules.generic;\nz=e.skipRequired;var C={valid:!1,validAttributes:{},validClasses:{},validStyles:{},allAttributes:!1,allClasses:!1,allStyles:!1,hadInvalidAttribute:!1,hadInvalidClass:!1,hadInvalidStyle:!1},v,l;if(a||r){A(b);if(g)for(v=0,l=g.length;v<l;++v)if(!1===c(g[v],b,C)){a=null;break a}if(f)for(v=0,l=f.length;v<l;++v)c(f[v],b,C);if(a)for(v=0,l=a.length;v<l;++v)d(a[v],b,C,z);if(r)for(v=0,l=r.length;v<l;++v)d(r[v],b,C,z);a=C}else a=null}if(!a||!a.valid)return h.push(b),1;l=a.validAttributes;var G=a.validStyles;\nr=a.validClasses;var g=b.attributes,k=b.styles,f=b.classes;z=b.classBackup;var I=b.styleBackup,D,H,J=[],C=[],n=/^data-cke-/;v=!1;delete g.style;delete g[\"class\"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(D in g)l[D]||(n.test(D)?D==(H=D.replace(/^data-cke-saved-/,\"\"))||l[H]||(delete g[D],v=!0):(delete g[D],v=!0));if(!a.allStyles||a.hadInvalidStyle){for(D in k)a.allStyles||G[D]?J.push(D+\":\"+k[D]):v=!0;J.length&&(g.style=J.sort().join(\"; \"))}else I&&(g.style=I);if(!a.allClasses||\na.hadInvalidClass){for(D=0;D<f.length;++D)(a.allClasses||r[f[D]])&&C.push(f[D]);C.length&&(g[\"class\"]=C.sort().join(\" \"));z&&C.length<z.split(/\\s+/).length&&(v=!0)}else z&&(g[\"class\"]=z);v&&(m=1);if(!e.skipFinalValidation&&!y(b))return h.push(b),1}e.toHtml&&(b.name=b.name.replace(L,\"cke:$1\"));return m}function B(a){var b=[],c;for(c in a)-1<c.indexOf(\"*\")&&b.push(c.replace(/\\*/g,\".*\"));return b.length?new RegExp(\"^(?:\"+b.join(\"|\")+\")$\"):null}function q(a){var b=a.attributes,c;delete b.style;delete b[\"class\"];\nif(c=CKEDITOR.tools.writeCssText(a.styles,!0))b.style=c;a.classes.length&&(b[\"class\"]=a.classes.sort().join(\" \"))}function y(a){switch(a.name){case \"a\":if(!(a.children.length||a.attributes.name||a.attributes.id))return!1;break;case \"img\":if(!a.attributes.src)return!1}return!0}function F(a){if(!a)return!1;if(!0===a)return!0;var b=B(a);return function(c){return c in a||b&&c.match(b)}}function t(){return new CKEDITOR.htmlParser.element(\"br\")}function z(a){return a.type==CKEDITOR.NODE_ELEMENT&&(\"br\"==\na.name||H.$block[a.name])}function h(a,b,c){var d=a.name;if(H.$empty[d]||!a.children.length)\"hr\"==d&&\"br\"==b?a.replaceWith(t()):(a.parent&&c.push({check:\"it\",el:a.parent}),a.remove());else if(H.$block[d]||\"tr\"==d)if(\"br\"==b)a.previous&&!z(a.previous)&&(b=t(),b.insertBefore(a)),a.next&&!z(a.next)&&(b=t(),b.insertAfter(a)),a.replaceWithChildren();else{var d=a.children,h;b:{h=H[b];for(var p=0,e=d.length,m;p<e;++p)if(m=d[p],m.type==CKEDITOR.NODE_ELEMENT&&!h[m.name]){h=!1;break b}h=!0}if(h)a.name=b,a.attributes=\n{},c.push({check:\"parent-down\",el:a});else{h=a.parent;for(var p=h.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||\"body\"==h.name,r,g,e=d.length;0<e;)m=d[--e],p&&(m.type==CKEDITOR.NODE_TEXT||m.type==CKEDITOR.NODE_ELEMENT&&H.$inline[m.name])?(r||(r=new CKEDITOR.htmlParser.element(b),r.insertAfter(a),c.push({check:\"parent-down\",el:r})),r.add(m,0)):(r=null,g=H[h.name]||H.span,m.insertAfter(a),h.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||m.type!=CKEDITOR.NODE_ELEMENT||g[m.name]||c.push({check:\"el-up\",el:m}));a.remove()}}else d in\n{style:1,script:1}?a.remove():(a.parent&&c.push({check:\"it\",el:a.parent}),a.replaceWithChildren())}function p(a,b,c){var d,h;for(d=0;d<c.length;++d)if(h=c[d],!(h.check&&!a.check(h.check,!1)||h.left&&!h.left(b))){h.right(b,J);break}}function m(a,b){var c=b.getDefinition(),d=c.attributes,h=c.styles,p,e,m,r;if(a.name!=c.element)return!1;for(p in d)if(\"class\"==p)for(c=d[p].split(/\\s+/),m=a.classes.join(\"|\");r=c.pop();){if(-1==m.indexOf(r))return!1}else if(a.attributes[p]!=d[p])return!1;for(e in h)if(a.styles[e]!=\nh[e])return!1;return!0}function C(a,b){var c,d;\"string\"==typeof a?c=a:a instanceof CKEDITOR.style?d=a:(c=a[0],d=a[1]);return[{element:c,left:d,right:function(a,c){c.transform(a,b)}}]}function r(a){return function(b){return m(b,a)}}function G(a){return function(b,c){c[a](b)}}var H=CKEDITOR.dtd,K=CKEDITOR.tools.copy,R=CKEDITOR.tools.trim,M=[\"\",\"p\",\"br\",\"div\"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=\n!1;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{}};CKEDITOR.filter.instances[this.id]=this;if(a instanceof CKEDITOR.editor){a=this.editor=a;this.customConfig=!0;var b=a.config.allowedContent;!0===b?this.disabled=!0:(b||(this.customConfig=!1),this.allow(b,\"config\",1),this.allow(a.config.extraAllowedContent,\"extra\",1),this.allow(M[a.enterMode]+\" \"+M[a.shiftEnterMode],\"default\",\n1),this.disallow(a.config.disallowedContent))}else this.customConfig=!1,this.allow(a,\"default\",1)};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(b,c,d){if(!g(this,b,d))return!1;var h,p;if(\"string\"==typeof b)b=f(b);else if(b instanceof CKEDITOR.style){if(b.toAllowedContentRules)return this.allow(b.toAllowedContentRules(this.editor),c,d);h=b.getDefinition();b={};d=h.attributes;b[h.element]=h={styles:h.styles,requiredStyles:h.styles&&CKEDITOR.tools.objectKeys(h.styles)};d&&(d=\nK(d),h.classes=d[\"class\"]?d[\"class\"].split(/\\s+/):null,h.requiredClasses=h.classes,delete d[\"class\"],h.attributes=d,h.requiredAttributes=d&&CKEDITOR.tools.objectKeys(d))}else if(CKEDITOR.tools.isArray(b)){for(h=0;h<b.length;++h)p=this.allow(b[h],c,d);return p}a(this,b,c,this.allowedContent,this._.allowedRules);return!0},applyTo:function(a,b,c,d){if(this.disabled)return!1;var p=this,e=[],m=this.editor&&this.editor.config.protectedSource,r,g=!1,f={doFilter:!c,doTransform:!0,doCallbacks:!0,toHtml:b};\na.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if(\"off\"==a.attributes[\"data-cke-filter\"])return!1;if(!b||\"span\"!=a.name||!~CKEDITOR.tools.objectKeys(a.attributes).join(\"|\").indexOf(\"data-cke-\"))if(r=u(p,a,e,f),r&1)g=!0;else if(r&2)return!1}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\\{cke_protected\\}(?!\\{C\\})/)){var c;a:{var d=decodeURIComponent(a.value.replace(/^\\{cke_protected\\}/,\"\"));c=[];var h,q,z;if(m)for(q=0;q<m.length;++q)if((z=d.match(m[q]))&&z[0].length==d.length){c=!0;\nbreak a}d=CKEDITOR.htmlParser.fragment.fromHtml(d);1==d.children.length&&(h=d.children[0]).type==CKEDITOR.NODE_ELEMENT&&u(p,h,c,f);c=!c.length}c||e.push(a)}},null,!0);e.length&&(g=!0);var q;a=[];d=M[d||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)];for(var z;c=e.pop();)c.type==CKEDITOR.NODE_ELEMENT?h(c,d,a):c.remove();for(;q=a.pop();)if(c=q.el,c.parent)switch(z=H[c.parent.name]||H.span,q.check){case \"it\":H.$removeEmpty[c.name]&&!c.children.length?h(c,d,a):y(c)||h(c,d,a);break;case \"el-up\":c.parent.type==\nCKEDITOR.NODE_DOCUMENT_FRAGMENT||z[c.name]||h(c,d,a);break;case \"parent-down\":c.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||z[c.name]||h(c.parent,d,a)}return g},checkFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=!0},disallow:function(b){if(!g(this,b,!0))return!1;\"string\"==typeof b&&(b=f(b));a(this,b,null,this.disallowedContent,this._.disallowedRules);return!0},\naddContentForms:function(a){if(!this.disabled&&a){var b,c,d=[],h;for(b=0;b<a.length&&!h;++b)c=a[b],(\"string\"==typeof c||c instanceof CKEDITOR.style)&&this.check(c)&&(h=c);if(h){for(b=0;b<a.length;++b)d.push(C(a[b],h));this.addTransformations(d)}}},addElementCallback:function(a){this.elementCallbacks||(this.elementCallbacks=[]);this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);\nthis.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?this.check(a.requiredContent):!0},addTransformations:function(a){var b,c;if(!this.disabled&&a){var d=this._.transformations,h;for(h=0;h<a.length;++h){b=a[h];var p=void 0,e=void 0,m=void 0,g=void 0,q=void 0,f=void 0;c=[];for(e=0;e<b.length;++e)m=b[e],\"string\"==typeof m?(m=m.split(/\\s*:\\s*/),g=m[0],q=null,f=m[1]):(g=m.check,q=m.left,f=m.right),p||(p=m,p=p.element?p.element:g?g.match(/^([a-z0-9]+)/i)[0]:\np.left.getDefinition().element),q instanceof CKEDITOR.style&&(q=r(q)),c.push({check:g==p?null:g,left:q,right:\"string\"==typeof f?G(f):f});b=p;d[b]||(d[b]=[]);d[b].push(c)}}},check:function(a,b,c){if(this.disabled)return!0;if(CKEDITOR.tools.isArray(a)){for(var d=a.length;d--;)if(this.check(a[d],b,c))return!0;return!1}var h,e;if(\"string\"==typeof a){e=a+\"\\x3c\"+(!1===b?\"0\":\"1\")+(c?\"1\":\"0\")+\"\\x3e\";if(e in this._.cachedChecks)return this._.cachedChecks[e];d=f(a).$1;h=d.styles;var m=d.classes;d.name=d.elements;\nd.classes=m=m?m.split(/\\s*,\\s*/):[];d.styles=w(h);d.attributes=w(d.attributes);d.children=[];m.length&&(d.attributes[\"class\"]=m.join(\" \"));h&&(d.attributes.style=CKEDITOR.tools.writeCssText(d.styles));h=d}else d=a.getDefinition(),h=d.styles,m=d.attributes||{},h?(h=K(h),m.style=CKEDITOR.tools.writeCssText(h,!0)):h={},h={name:d.element,attributes:m,classes:m[\"class\"]?m[\"class\"].split(/\\s+/):[],styles:h,children:[]};var m=CKEDITOR.tools.clone(h),r=[],g;if(!1!==b&&(g=this._.transformations[h.name])){for(d=\n0;d<g.length;++d)p(this,h,g[d]);q(h)}u(this,m,r,{doFilter:!0,doTransform:!1!==b,skipRequired:!c,skipFinalValidation:!c});b=0<r.length?!1:CKEDITOR.tools.objectCompare(h.attributes,m.attributes,!0)?!0:!1;\"string\"==typeof a&&(this._.cachedChecks[e]=b);return b},getAllowedEnterMode:function(){var a=[\"p\",\"div\",\"br\"],b={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(c,d){var h=a.slice(),p;if(this.check(M[c]))return c;for(d||(h=h.reverse());p=h.pop();)if(this.check(p))return b[p];\nreturn CKEDITOR.ENTER_BR}}(),destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent;delete this.disallowedContent}};var Q={styles:1,attributes:1,classes:1},v={styles:\"requiredStyles\",attributes:\"requiredAttributes\",classes:\"requiredClasses\"},D=/^([a-z0-9\\-*\\s]+)((?:\\s*\\{[!\\w\\-,\\s\\*]+\\}\\s*|\\s*\\[[!\\w\\-,\\s\\*]+\\]\\s*|\\s*\\([!\\w\\-,\\s\\*]+\\)\\s*){0,3})(?:;\\s*|$)/i,I={styles:/{([^}]+)}/,attrs:/\\[([^\\]]+)\\]/,classes:/\\(([^\\)]+)\\)/},E=/^cke:(object|embed|param)$/,\nL=/^(object|embed|param)$/,J=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,\"width\");this.lengthToStyle(a,\"height\")},sizeToAttribute:function(a){this.lengthToAttribute(a,\"width\");this.lengthToAttribute(a,\"height\")},lengthToStyle:function(a,b,c){c=c||b;if(!(c in a.styles)){var d=a.attributes[b];d&&(/^\\d+$/.test(d)&&(d+=\"px\"),a.styles[c]=d)}delete a.attributes[b]},lengthToAttribute:function(a,b,c){c=c||b;if(!(c in a.attributes)){var d=a.styles[b],h=d&&d.match(/^(\\d+)(?:\\.\\d*)?px$/);\nh?a.attributes[c]=h[1]:\"cke-test\"==d&&(a.attributes[c]=\"cke-test\")}delete a.styles[b]},alignmentToStyle:function(a){if(!(\"float\"in a.styles)){var b=a.attributes.align;if(\"left\"==b||\"right\"==b)a.styles[\"float\"]=b}delete a.attributes.align},alignmentToAttribute:function(a){if(!(\"align\"in a.attributes)){var b=a.styles[\"float\"];if(\"left\"==b||\"right\"==b)a.attributes.align=b}delete a.styles[\"float\"]},matchesStyle:m,transform:function(a,b){if(\"string\"==typeof b)a.name=b;else{var c=b.getDefinition(),d=c.styles,\nh=c.attributes,p,m,e,r;a.name=c.element;for(p in h)if(\"class\"==p)for(c=a.classes.join(\"|\"),e=h[p].split(/\\s+/);r=e.pop();)-1==c.indexOf(r)&&a.classes.push(r);else a.attributes[p]=h[p];for(m in d)a.styles[m]=d[m]}}}})();\n(function(){CKEDITOR.focusManager=function(a){if(a.focusManager)return a.focusManager;this.hasFocus=!1;this.currentActive=null;this._={editor:a};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(a){this._.timer&&clearTimeout(this._.timer);a&&(this.currentActive=a);this.hasFocus||this._.locked||((a=CKEDITOR.currentInstance)&&a.focusManager.blur(1),this.hasFocus=!0,(a=this._.editor.container)&&a.addClass(\"cke_focus\"),this._.editor.fire(\"focus\"))},lock:function(){this._.locked=\n1},unlock:function(){delete this._.locked},blur:function(a){function d(){if(this.hasFocus){this.hasFocus=!1;var a=this._.editor.container;a&&a.removeClass(\"cke_focus\");this._.editor.fire(\"blur\")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var b=CKEDITOR.focusManager._.blurDelay;a||!b?d.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer;d.call(this)},b,this)}},add:function(a,d){var b=a.getCustomData(\"focusmanager\");if(!b||b!=this){b&&b.remove(a);var b=\n\"focus\",c=\"blur\";d&&(CKEDITOR.env.ie?(b=\"focusin\",c=\"focusout\"):CKEDITOR.event.useCapture=1);var e={blur:function(){a.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(a)}};a.on(b,e.focus,this);a.on(c,e.blur,this);d&&(CKEDITOR.event.useCapture=0);a.setCustomData(\"focusmanager\",this);a.setCustomData(\"focusmanager_handlers\",e)}},remove:function(a){a.removeCustomData(\"focusmanager\");var d=a.removeCustomData(\"focusmanager_handlers\");a.removeListener(\"blur\",d.blur);a.removeListener(\"focus\",\nd.focus)}}})();CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)return a.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:a};return this};\n(function(){var a,d=function(b){b=b.data;var d=b.getKeystroke(),g=this.keystrokes[d],l=this._.editor;a=!1===l.fire(\"key\",{keyCode:d,domEvent:b});a||(g&&(a=!1!==l.execCommand(g,{from:\"keystrokeHandler\"})),a||(a=!!this.blockedKeystrokes[d]));a&&b.preventDefault(!0);return!a},b=function(b){a&&(a=!1,b.data.preventDefault(!0))};CKEDITOR.keystrokeHandler.prototype={attach:function(a){a.on(\"keydown\",d,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)a.on(\"keypress\",b,this)}}})();\n(function(){CKEDITOR.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,\"de-ch\":1,el:1,\"en-au\":1,\"en-ca\":1,\"en-gb\":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,\"fr-ca\":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,\"pt-br\":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,\"sr-latn\":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,\"zh-cn\":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(a,d,b){a&&CKEDITOR.lang.languages[a]||(a=\nthis.detect(d,a));var c=this;d=function(){c[a].dir=c.rtl[a]?\"rtl\":\"ltr\";b(a,c[a])};this[a]?d():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(\"lang/\"+a+\".js\"),d,this)},detect:function(a,d){var b=this.languages;d=d||navigator.userLanguage||navigator.language||a;var c=d.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),e=c[1],c=c[2];b[e+\"-\"+c]?e=e+\"-\"+c:b[e]||(e=null);CKEDITOR.lang.detect=e?function(){return e}:function(a){return a};return e||a}}})();\nCKEDITOR.scriptLoader=function(){var a={},d={};return{load:function(b,c,e,g){var l=\"string\"==typeof b;l&&(b=[b]);e||(e=CKEDITOR);var k=b.length,n=[],w=[],f=function(a){c&&(l?c.call(e,a):c.call(e,n,w))};if(0===k)f(!0);else{var x=function(a,b){(b?n:w).push(a);0>=--k&&(g&&CKEDITOR.document.getDocumentElement().removeStyle(\"cursor\"),f(b))},A=function(b,c){a[b]=1;var e=d[b];delete d[b];for(var g=0;g<e.length;g++)e[g](b,c)},u=function(b){if(a[b])x(b,!0);else{var e=d[b]||(d[b]=[]);e.push(x);if(!(1<e.length)){var g=\nnew CKEDITOR.dom.element(\"script\");g.setAttributes({type:\"text/javascript\",src:b});c&&(CKEDITOR.env.ie&&11>CKEDITOR.env.version?g.$.onreadystatechange=function(){if(\"loaded\"==g.$.readyState||\"complete\"==g.$.readyState)g.$.onreadystatechange=null,A(b,!0)}:(g.$.onload=function(){setTimeout(function(){A(b,!0)},0)},g.$.onerror=function(){A(b,!1)}));g.appendTo(CKEDITOR.document.getHead())}}};g&&CKEDITOR.document.getDocumentElement().setStyle(\"cursor\",\"wait\");for(var B=0;B<k;B++)u(b[B])}},queue:function(){function a(){var b;\n(b=c[0])&&this.load(b.scriptUrl,b.callback,CKEDITOR,0)}var c=[];return function(d,g){var l=this;c.push({scriptUrl:d,callback:function(){g&&g.apply(this,arguments);c.shift();a.call(l)}});1==c.length&&a.call(this)}}()}}();CKEDITOR.resourceManager=function(a,d){this.basePath=a;this.fileName=d;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}};\nCKEDITOR.resourceManager.prototype={add:function(a,d){if(this.registered[a])throw Error('[CKEDITOR.resourceManager.add] The resource name \"'+a+'\" is already registered.');var b=this.registered[a]=d||{};b.name=a;b.path=this.getPath(a);CKEDITOR.fire(a+CKEDITOR.tools.capitalize(this.fileName)+\"Ready\",b);return this.get(a)},get:function(a){return this.registered[a]||null},getPath:function(a){var d=this.externals[a];return CKEDITOR.getUrl(d&&d.dir||this.basePath+a+\"/\")},getFilePath:function(a){var d=this.externals[a];\nreturn CKEDITOR.getUrl(this.getPath(a)+(d?d.file:this.fileName+\".js\"))},addExternal:function(a,d,b){a=a.split(\",\");for(var c=0;c<a.length;c++){var e=a[c];b||(d=d.replace(/[^\\/]+$/,function(a){b=a;return\"\"}));this.externals[e]={dir:d,file:b||this.fileName+\".js\"}}},load:function(a,d,b){CKEDITOR.tools.isArray(a)||(a=a?[a]:[]);for(var c=this.loaded,e=this.registered,g=[],l={},k={},n=0;n<a.length;n++){var w=a[n];if(w)if(c[w]||e[w])k[w]=this.get(w);else{var f=this.getFilePath(w);g.push(f);f in l||(l[f]=\n[]);l[f].push(w)}}CKEDITOR.scriptLoader.load(g,function(a,e){if(e.length)throw Error('[CKEDITOR.resourceManager.load] Resource name \"'+l[e[0]].join(\",\")+'\" was not found at \"'+e[0]+'\".');for(var g=0;g<a.length;g++)for(var f=l[a[g]],q=0;q<f.length;q++){var y=f[q];k[y]=this.get(y);c[y]=1}d.call(b,k)},this)}};CKEDITOR.plugins=new CKEDITOR.resourceManager(\"plugins/\",\"plugin\");\nCKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(a){var d={};return function(b,c,e){var g={},l=function(b){a.call(this,b,function(a){CKEDITOR.tools.extend(g,a);var b=[],f;for(f in a){var k=a[f],A=k&&k.requires;if(!d[f]){if(k.icons)for(var u=k.icons.split(\",\"),B=u.length;B--;)CKEDITOR.skin.addIcon(u[B],k.path+\"icons/\"+(CKEDITOR.env.hidpi&&k.hidpi?\"hidpi/\":\"\")+u[B]+\".png\");d[f]=1}if(A)for(A.split&&(A=A.split(\",\")),k=0;k<A.length;k++)g[A[k]]||b.push(A[k])}if(b.length)l.call(this,\nb);else{for(f in g)k=g[f],k.onLoad&&!k.onLoad._called&&(!1===k.onLoad()&&delete g[f],k.onLoad._called=1);c&&c.call(e||window,g)}},this)};l.call(this,b)}});CKEDITOR.plugins.setLang=function(a,d,b){var c=this.get(a);a=c.langEntries||(c.langEntries={});c=c.lang||(c.lang=[]);c.split&&(c=c.split(\",\"));-1==CKEDITOR.tools.indexOf(c,d)&&c.push(d);a[d]=b};CKEDITOR.ui=function(a){if(a.ui)return a.ui;this.items={};this.instances={};this.editor=a;this._={handlers:{}};return this};\nCKEDITOR.ui.prototype={add:function(a,d,b){b.name=a.toLowerCase();var c=this.items[a]={type:d,command:b.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(c,b)},get:function(a){return this.instances[a]},create:function(a){var d=this.items[a],b=d&&this._.handlers[d.type],c=d&&d.command&&this.editor.getCommand(d.command),b=b&&b.create.apply(this,d.args);this.instances[a]=b;c&&c.uiItems.push(b);b&&!b.type&&(b.type=d.type);return b},addHandler:function(a,d){this._.handlers[a]=\nd},space:function(a){return CKEDITOR.document.getById(this.spaceId(a))},spaceId:function(a){return this.editor.id+\"_\"+a}};CKEDITOR.event.implementOn(CKEDITOR.ui);\n(function(){function a(a,e,f){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(void 0!==e){if(!(e instanceof CKEDITOR.dom.element))throw Error(\"Expect element of type CKEDITOR.dom.element.\");if(!f)throw Error(\"One of the element modes must be specified.\");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&f==CKEDITOR.ELEMENT_MODE_INLINE)throw Error(\"Inline element mode is not supported on IE quirks.\");if(!b(e,f))throw Error('The specified element mode is not supported on element: \"'+e.getName()+'\".');\nthis.element=e;this.elementMode=f;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(e.getId()||e.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||d();this.id=CKEDITOR.tools.getNextId();this.status=\"unloaded\";this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config);this.ui=new CKEDITOR.ui(this);this.focusManager=new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on(\"readOnly\",\nc);this.on(\"selectionChange\",function(a){g(this,a.data.path)});this.on(\"activeFilterChange\",function(){g(this,this.elementPath(),!0)});this.on(\"mode\",c);this.on(\"instanceReady\",function(){this.config.startupFocus&&this.focus()});CKEDITOR.fire(\"instanceCreated\",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){\"destroyed\"!==this.status?k(this,a):CKEDITOR.warn(\"editor-incorrect-destroy\")},0,this)}function d(){do var a=\"editor\"+ ++u;while(CKEDITOR.instances[a]);return a}function b(a,\nb){return b==CKEDITOR.ELEMENT_MODE_INLINE?a.is(CKEDITOR.dtd.$editable)||a.is(\"textarea\"):b==CKEDITOR.ELEMENT_MODE_REPLACE?!a.is(CKEDITOR.dtd.$nonBodyContent):1}function c(){var a=this.commands,b;for(b in a)e(this,a[b])}function e(a,b){b[b.startDisabled?\"disable\":a.readOnly&&!b.readOnly?\"disable\":b.modes[a.mode]?\"enable\":\"disable\"]()}function g(a,b,c){if(b){var d,e,h=a.commands;for(e in h)d=h[e],(c||d.contextSensitive)&&d.refresh(a,b)}}function l(a){var b=a.config.customConfig;if(!b)return!1;var b=\nCKEDITOR.getUrl(b),c=B[b]||(B[b]={});c.fn?(c.fn.call(a,a.config),CKEDITOR.getUrl(a.config.customConfig)!=b&&l(a)||a.fireOnce(\"customConfigLoaded\")):CKEDITOR.scriptLoader.queue(b,function(){c.fn=CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};l(a)});return!0}function k(a,b){a.on(\"customConfigLoaded\",function(){if(b){if(b.on)for(var c in b.on)a.on(c,b.on[c]);CKEDITOR.tools.extend(a.config,b,!0);delete a.config.on}c=a.config;a.readOnly=c.readOnly?!0:a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?\na.element.is(\"textarea\")?a.element.hasAttribute(\"disabled\")||a.element.hasAttribute(\"readonly\"):a.element.isReadOnly():a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?a.element.hasAttribute(\"disabled\")||a.element.hasAttribute(\"readonly\"):!1;a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is(\"textarea\")||CKEDITOR.dtd[a.element.getName()].p):!1;a.tabIndex=c.tabIndex||a.element&&a.element.getAttribute(\"tabindex\")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:c.enterMode;\na.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:c.shiftEnterMode;c.skin&&(CKEDITOR.skinName=c.skin);a.fireOnce(\"configLoaded\");a.dataProcessor=new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);n(a)});b&&null!=b.customConfig&&(a.config.customConfig=b.customConfig);l(a)||a.fireOnce(\"customConfigLoaded\")}function n(a){CKEDITOR.skin.loadPart(\"editor\",function(){w(a)})}function w(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(b,\nc){var d=a.config.title;a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(c);a.title=\"string\"==typeof d||!1===d?d:[a.lang.editor,a.name].join(\", \");a.config.contentsLangDirection||(a.config.contentsLangDirection=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir);a.fire(\"langLoaded\");f(a)})}function f(a){a.getStylesSet(function(b){a.once(\"loaded\",function(){a.fire(\"stylesSet\",{styles:b})},null,null,1);x(a)})}function x(a){var b=a.config,c=b.plugins,d=b.extraPlugins,e=\nb.removePlugins;if(d)var h=new RegExp(\"(?:^|,)(?:\"+d.replace(/\\s*,\\s*/g,\"|\")+\")(?\\x3d,|$)\",\"g\"),c=c.replace(h,\"\"),c=c+(\",\"+d);if(e)var p=new RegExp(\"(?:^|,)(?:\"+e.replace(/\\s*,\\s*/g,\"|\")+\")(?\\x3d,|$)\",\"g\"),c=c.replace(p,\"\");CKEDITOR.env.air&&(c+=\",adobeair\");CKEDITOR.plugins.load(c.split(\",\"),function(c){var d=[],h=[],e=[];a.plugins=c;for(var g in c){var f=c[g],z=f.lang,l=null,k=f.requires,v;CKEDITOR.tools.isArray(k)&&(k=k.join(\",\"));if(k&&(v=k.match(p)))for(;k=v.pop();)CKEDITOR.error(\"editor-plugin-required\",\n{plugin:k.replace(\",\",\"\"),requiredBy:g});z&&!a.lang[g]&&(z.split&&(z=z.split(\",\")),0<=CKEDITOR.tools.indexOf(z,a.langCode)?l=a.langCode:(l=a.langCode.replace(/-.*/,\"\"),l=l!=a.langCode&&0<=CKEDITOR.tools.indexOf(z,l)?l:0<=CKEDITOR.tools.indexOf(z,\"en\")?\"en\":z[0]),f.langEntries&&f.langEntries[l]?(a.lang[g]=f.langEntries[l],l=null):e.push(CKEDITOR.getUrl(f.path+\"lang/\"+l+\".js\")));h.push(l);d.push(f)}CKEDITOR.scriptLoader.load(e,function(){for(var c=[\"beforeInit\",\"init\",\"afterInit\"],e=0;e<c.length;e++)for(var p=\n0;p<d.length;p++){var m=d[p];0===e&&h[p]&&m.lang&&m.langEntries&&(a.lang[m.name]=m.langEntries[h[p]]);if(m[c[e]])m[c[e]](a)}a.fireOnce(\"pluginsLoaded\");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(p=0;p<a.config.blockedKeystrokes.length;p++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[p]]=1;a.status=\"loaded\";a.fireOnce(\"loaded\");CKEDITOR.fire(\"instanceLoaded\",null,a)})})}function A(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();\nthis.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is(\"textarea\")?a.setValue(b):a.setHtml(b);return!0}return!1}a.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=a;var u=0,B={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(a,b){b.name=a.toLowerCase();var c=new CKEDITOR.command(this,b);this.mode&&e(this,c);return this.commands[a]=c},_attachToForm:function(){function a(b){c.updateElement();c._.required&&!d.getValue()&&!1===c.fire(\"required\")&&b.data.preventDefault()}\nfunction b(a){return!!(a&&a.call&&a.apply)}var c=this,d=c.element,e=new CKEDITOR.dom.element(d.$.form);d.is(\"textarea\")&&e&&(e.on(\"submit\",a),b(e.$.submit)&&(e.$.submit=CKEDITOR.tools.override(e.$.submit,function(b){return function(){a();b.apply?b.apply(this):b()}})),c.on(\"destroy\",function(){e.removeListener(\"submit\",a)}))},destroy:function(a){this.fire(\"beforeDestroy\");!a&&A.call(this);this.editable(null);this.filter&&(this.filter.destroy(),delete this.filter);delete this.activeFilter;this.status=\n\"destroyed\";this.fire(\"destroy\");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire(\"instanceDestroyed\",null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,b){var c=this.getCommand(a),d={name:a,commandData:b,command:c};return c&&c.state!=CKEDITOR.TRISTATE_DISABLED&&\n!1!==this.fire(\"beforeCommandExec\",d)&&(d.returnValue=c.exec(d.commandData),!c.async&&!1!==this.fire(\"afterCommandExec\",d))?d.returnValue:!1},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire(\"beforeGetData\");var b=this._.data;\"string\"!=typeof b&&(b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is(\"textarea\")?b.getValue():b.getHtml():\"\");b={dataValue:b};!a&&this.fire(\"getData\",b);return b.dataValue},getSnapshot:function(){var a=this.fire(\"getSnapshot\");\n\"string\"!=typeof a&&(a=(a=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?a.is(\"textarea\")?a.getValue():a.getHtml():\"\");return a},loadSnapshot:function(a){this.fire(\"loadSnapshot\",a)},setData:function(a,b,c){var d=!0,e=b;b&&\"object\"==typeof b&&(c=b.internal,e=b.callback,d=!b.noSnapshot);!c&&d&&this.fire(\"saveSnapshot\");if(e||!c)this.once(\"dataReady\",function(a){!c&&d&&this.fire(\"saveSnapshot\");e&&e.call(a.editor)});a={dataValue:a};!c&&this.fire(\"setData\",a);this._.data=a.dataValue;\n!c&&this.fire(\"afterSetData\",a)},setReadOnly:function(a){a=null==a||a;this.readOnly!=a&&(this.readOnly=a,this.keystrokeHandler.blockedKeystrokes[8]=+a,this.editable().setReadOnly(a),this.fire(\"readOnly\"))},insertHtml:function(a,b,c){this.fire(\"insertHtml\",{dataValue:a,mode:b,range:c})},insertText:function(a){this.fire(\"insertText\",a)},insertElement:function(a){this.fire(\"insertElement\",a)},getSelectedHtml:function(a){var b=this.editable(),c=this.getSelection(),c=c&&c.getRanges();if(!b||!c||0===c.length)return null;\nfor(var d=new CKEDITOR.dom.documentFragment,e,h,p,m=0;m<c.length;m++){var g=c[m],r=g.startContainer;r.getName&&\"tr\"==r.getName()?(e||(e=r.getAscendant(\"table\").clone(),e.append(r.getAscendant(\"tbody\").clone()),d.append(e),e=e.findOne(\"tbody\")),h&&h.equals(r)||(h=r,p=r.clone(),e.append(p)),p.append(g.cloneContents())):d.append(g.cloneContents())}b=e?d:b.getHtmlFromRange(c[0]);return a?b.getHtml():b},extractSelectedHtml:function(a,b){var c=this.editable(),d=this.getSelection().getRanges();if(!c||0===\nd.length)return null;d=d[0];c=c.extractHtmlFromRange(d,b);b||this.getSelection().selectRanges([d]);return a?c.getHtml():c},focus:function(){this.fire(\"beforeFocus\")},checkDirty:function(){return\"ready\"==this.status&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return A.call(this)},setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,\n0)],c,d,e=b.length;e--;)c=b[e],d=0,CKEDITOR.tools.isArray(c)&&(d=c[1],c=c[0]),d?a[c]=d:delete a[c]},addFeature:function(a){return this.filter.addFeature(a)},setActiveFilter:function(a){a||(a=this.filter);this.activeFilter!==a&&(this.activeFilter=a,this.fire(\"activeFilterChange\"),a===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode),a.getAllowedEnterMode(this.shiftEnterMode,!0)))},setActiveEnterMode:function(a,b){a=a?this.blockless?CKEDITOR.ENTER_BR:\na:this.enterMode;b=b?this.blockless?CKEDITOR.ENTER_BR:b:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=b)this.activeEnterMode=a,this.activeShiftEnterMode=b,this.fire(\"activeEnterModeChange\")},showNotification:function(a){alert(a)}})})();CKEDITOR.ELEMENT_MODE_NONE=0;CKEDITOR.ELEMENT_MODE_REPLACE=1;CKEDITOR.ELEMENT_MODE_APPENDTO=2;CKEDITOR.ELEMENT_MODE_INLINE=3;CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:/<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)--\\x3e)|(?:([^\\/\\s>]+)((?:\\s+[\\w\\-:.]+(?:\\s*=\\s*?(?:(?:\"[^\"]*\")|(?:'[^']*')|[^\\s\"'\\/>]+))?)*)[\\S\\s]*?(\\/?)>))/g}};\n(function(){var a=/([\\w\\-:.]+)(?:(?:\\s*=\\s*(?:(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s>]+)))|(?=\\s|$))/g,d={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,e,g=0,l;c=this._.htmlPartsRegex.exec(b);){e=c.index;if(e>g)if(g=b.substring(g,e),l)l.push(g);else this.onText(g);\ng=this._.htmlPartsRegex.lastIndex;if(e=c[1])if(e=e.toLowerCase(),l&&CKEDITOR.dtd.$cdata[e]&&(this.onCDATA(l.join(\"\")),l=null),!l){this.onTagClose(e);continue}if(l)l.push(c[0]);else if(e=c[3]){if(e=e.toLowerCase(),!/=\"/.test(e)){var k={},n,w=c[4];c=!!c[5];if(w)for(;n=a.exec(w);){var f=n[1].toLowerCase();n=n[2]||n[3]||n[4]||\"\";k[f]=!n&&d[f]?f:CKEDITOR.tools.htmlDecodeAttr(n)}this.onTagOpen(e,k,c);!l&&CKEDITOR.dtd.$cdata[e]&&(l=[])}}else if(e=c[2])this.onComment(e)}if(b.length>g)this.onText(b.substring(g,\nb.length))}}})();\nCKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push(\"\\x3c\",a)},openTagClose:function(a,d){d?this._.output.push(\" /\\x3e\"):this._.output.push(\"\\x3e\")},attribute:function(a,d){\"string\"==typeof d&&(d=CKEDITOR.tools.htmlEncodeAttr(d));this._.output.push(\" \",a,'\\x3d\"',d,'\"')},closeTag:function(a){this._.output.push(\"\\x3c/\",a,\"\\x3e\")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push(\"\\x3c!--\",a,\n\"--\\x3e\")},write:function(a){this._.output.push(a)},reset:function(){this._.output=[];this._.indent=!1},getHtml:function(a){var d=this._.output.join(\"\");a&&this.reset();return d}}});\"use strict\";\n(function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var a=this.parent.children,d=CKEDITOR.tools.indexOf(a,this),b=this.previous,c=this.next;b&&(b.next=c);c&&(c.previous=b);a.splice(d,1);this.parent=null},replaceWith:function(a){var d=this.parent.children,b=CKEDITOR.tools.indexOf(d,this),c=a.previous=this.previous,e=a.next=this.next;c&&(c.next=a);e&&(e.previous=a);d[b]=a;a.parent=this.parent;this.parent=null},insertAfter:function(a){var d=a.parent.children,\nb=CKEDITOR.tools.indexOf(d,a),c=a.next;d.splice(b+1,0,this);this.next=a.next;this.previous=a;a.next=this;c&&(c.previous=this);this.parent=a.parent},insertBefore:function(a){var d=a.parent.children,b=CKEDITOR.tools.indexOf(d,a);d.splice(b,0,this);this.next=a;(this.previous=a.previous)&&(a.previous.next=this);a.previous=this;this.parent=a.parent},getAscendant:function(a){var d=\"function\"==typeof a?a:\"string\"==typeof a?function(b){return b.name==a}:function(b){return b.name in a},b=this.parent;for(;b&&\nb.type==CKEDITOR.NODE_ELEMENT;){if(d(b))return b;b=b.parent}return null},wrapWith:function(a){this.replaceWith(a);a.add(this);return a},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(a){return a||{}}}})();\"use strict\";CKEDITOR.htmlParser.comment=function(a){this.value=a;this._={isBlockLike:!1}};\nCKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(a,d){var b=this.value;if(!(b=a.onComment(d,b,this)))return this.remove(),!1;if(\"string\"!=typeof b)return this.replaceWith(b),!1;this.value=b;return!0},writeHtml:function(a,d){d&&this.filter(d);a.comment(this.value)}});\"use strict\";\n(function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:!1}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,d){if(!(this.value=a.onText(d,this.value,this)))return this.remove(),!1},writeHtml:function(a,d){d&&this.filter(d);a.text(this.value)}})})();\"use strict\";\n(function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})})();\"use strict\";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:!0,hasInlineStarted:!1}};\n(function(){function a(a){return a.attributes[\"data-cke-survive\"]?!1:\"a\"==a.name&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var d=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},c=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),e={ul:\"li\",ol:\"li\",dl:\"dd\",table:\"tbody\",tbody:\"tr\",thead:\"tr\",tfoot:\"tr\",tr:\"td\"};CKEDITOR.htmlParser.fragment.fromHtml=\nfunction(g,l,k){function n(a){var b;if(0<y.length)for(var c=0;c<y.length;c++){var d=y[c],h=d.name,e=CKEDITOR.dtd[h],g=t.name&&CKEDITOR.dtd[t.name];g&&!g[h]||a&&e&&!e[a]&&CKEDITOR.dtd[a]?h==t.name&&(x(t,t.parent,1),c--):(b||(w(),b=1),d=d.clone(),d.parent=t,t=d,y.splice(c,1),c--)}}function w(){for(;F.length;)x(F.shift(),t)}function f(a){if(a._.isBlockLike&&\"pre\"!=a.name&&\"textarea\"!=a.name){var b=a.children.length,c=a.children[b-1],d;c&&c.type==CKEDITOR.NODE_TEXT&&((d=CKEDITOR.tools.rtrim(c.value))?\nc.value=d:a.children.length=b-1)}}function x(b,c,d){c=c||t||q;var e=t;void 0===b.previous&&(A(c,b)&&(t=c,B.onTagOpen(k,{}),b.returnPoint=c=t),f(b),a(b)&&!b.children.length||c.add(b),\"pre\"==b.name&&(h=!1),\"textarea\"==b.name&&(z=!1));b.returnPoint?(t=b.returnPoint,delete b.returnPoint):t=d?c:e}function A(a,b){if((a==q||\"body\"==a.name)&&k&&(!a.name||CKEDITOR.dtd[a.name][k])){var c,d;return(c=b.attributes&&(d=b.attributes[\"data-cke-real-element-type\"])?d:b.name)&&c in CKEDITOR.dtd.$inline&&!(c in CKEDITOR.dtd.head)&&\n!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function u(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||\"dt\"==a&&\"dd\"==b||\"dd\"==a&&\"dt\"==b:!1}var B=new CKEDITOR.htmlParser,q=l instanceof CKEDITOR.htmlParser.element?l:\"string\"==typeof l?new CKEDITOR.htmlParser.element(l):new CKEDITOR.htmlParser.fragment,y=[],F=[],t=q,z=\"textarea\"==q.name,h=\"pre\"==q.name;B.onTagOpen=function(e,m,g,f){m=new CKEDITOR.htmlParser.element(e,m);m.isUnknown&&g&&(m.isEmpty=!0);m.isOptionalClose=f;\nif(a(m))y.push(m);else{if(\"pre\"==e)h=!0;else{if(\"br\"==e&&h){t.add(new CKEDITOR.htmlParser.text(\"\\n\"));return}\"textarea\"==e&&(z=!0)}if(\"br\"==e)F.push(m);else{for(;!(f=(g=t.name)?CKEDITOR.dtd[g]||(t._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c,m.isUnknown||t.isUnknown||f[e]);)if(t.isOptionalClose)B.onTagClose(g);else if(e in b&&g in b)g=t.children,(g=g[g.length-1])&&\"li\"==g.name||x(g=new CKEDITOR.htmlParser.element(\"li\"),t),!m.returnPoint&&(m.returnPoint=t),t=g;else if(e in CKEDITOR.dtd.$listItem&&\n!u(e,g))B.onTagOpen(\"li\"==e?\"ul\":\"dl\",{},0,1);else if(g in d&&!u(e,g))!m.returnPoint&&(m.returnPoint=t),t=t.parent;else if(g in CKEDITOR.dtd.$inline&&y.unshift(t),t.parent)x(t,t.parent,1);else{m.isOrphan=1;break}n(e);w();m.parent=t;m.isEmpty?x(m):t=m}}};B.onTagClose=function(a){for(var b=y.length-1;0<=b;b--)if(a==y[b].name){y.splice(b,1);return}for(var c=[],d=[],h=t;h!=q&&h.name!=a;)h._.isBlockLike||d.unshift(h),c.push(h),h=h.returnPoint||h.parent;if(h!=q){for(b=0;b<c.length;b++){var e=c[b];x(e,e.parent)}t=\nh;h._.isBlockLike&&w();x(h,h.parent);h==t&&(t=t.parent);y=y.concat(d)}\"body\"==a&&(k=!1)};B.onText=function(a){if(!(t._.hasInlineStarted&&!F.length||h||z)&&(a=CKEDITOR.tools.ltrim(a),0===a.length))return;var b=t.name,g=b?CKEDITOR.dtd[b]||(t._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!z&&!g[\"#\"]&&b in d)B.onTagOpen(e[b]||\"\"),B.onText(a);else{w();n();h||z||(a=a.replace(/[\\t\\r\\n ]{2,}|[\\t\\r\\n]/g,\" \"));a=new CKEDITOR.htmlParser.text(a);if(A(t,a))this.onTagOpen(k,{},0,1);t.add(a)}};B.onCDATA=\nfunction(a){t.add(new CKEDITOR.htmlParser.cdata(a))};B.onComment=function(a){w();n();t.add(new CKEDITOR.htmlParser.comment(a))};B.parse(g);for(w();t!=q;)x(t,t.parent,1);f(q);return q};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var c=0<b?this.children[b-1]:null;if(c){if(a._.isBlockLike&&c.type==CKEDITOR.NODE_TEXT&&(c.value=CKEDITOR.tools.rtrim(c.value),0===c.value.length)){this.children.pop();this.add(a);return}c.next=\na}a.previous=c;a.parent=this;this.children.splice(b,0,a);this._.hasInlineStarted||(this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike)},filter:function(a,b){b=this.getFilterContext(b);a.onRoot(b,this);this.filterChildren(a,!1,b)},filterChildren:function(a,b,c){if(this.childrenFilteredBy!=a.id){c=this.getFilterContext(c);if(b&&!this.parent)a.onRoot(c,this);this.childrenFilteredBy=a.id;for(b=0;b<this.children.length;b++)!1===this.children[b].filter(a,\nc)&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,b,c){var d=this.getFilterContext();if(c&&!this.parent&&b)b.onRoot(d,this);b&&this.filterChildren(b,!1,d);b=0;c=this.children;for(d=c.length;b<d;b++)c[b].writeHtml(a)},forEach:function(a,b,c){if(!(c||b&&this.type!=b))var d=a(this);if(!1!==d){c=this.children;for(var e=0;e<c.length;e++)d=c[e],d.type==CKEDITOR.NODE_ELEMENT?d.forEach(a,b):b&&d.type!=b||a(d)}},getFilterContext:function(a){return a||\n{}}}})();\"use strict\";\n(function(){function a(){this.rules=[]}function d(b,c,d,g){var l,k;for(l in c)(k=b[l])||(k=b[l]=new a),k.add(c[l],d,g)}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(b){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new a;this.attributeNameRules=new a;this.elementsRules={};this.attributesRules={};this.textRules=new a;this.commentRules=new a;this.rootRules=new a;b&&this.addRules(b,10)},proto:{addRules:function(a,c){var e;\"number\"==typeof c?e=c:c&&\"priority\"in c&&(e=\nc.priority);\"number\"!=typeof e&&(e=10);\"object\"!=typeof c&&(c={});a.elementNames&&this.elementNameRules.addMany(a.elementNames,e,c);a.attributeNames&&this.attributeNameRules.addMany(a.attributeNames,e,c);a.elements&&d(this.elementsRules,a.elements,e,c);a.attributes&&d(this.attributesRules,a.attributes,e,c);a.text&&this.textRules.add(a.text,e,c);a.comment&&this.commentRules.add(a.comment,e,c);a.root&&this.rootRules.add(a.root,e,c)},applyTo:function(a){a.filter(this)},onElementName:function(a,c){return this.elementNameRules.execOnName(a,\nc)},onAttributeName:function(a,c){return this.attributeNameRules.execOnName(a,c)},onText:function(a,c,d){return this.textRules.exec(a,c,d)},onComment:function(a,c,d){return this.commentRules.exec(a,c,d)},onRoot:function(a,c){return this.rootRules.exec(a,c)},onElement:function(a,c){for(var d=[this.elementsRules[\"^\"],this.elementsRules[c.name],this.elementsRules.$],g,l=0;3>l;l++)if(g=d[l]){g=g.exec(a,c,this);if(!1===g)return null;if(g&&g!=c)return this.onNode(a,g);if(c.parent&&!c.name)break}return c},\nonNode:function(a,c){var d=c.type;return d==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):d==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value)):d==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value)):null},onAttribute:function(a,c,d,g){return(d=this.attributesRules[d])?d.exec(a,g,c,this):g}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,d){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:d})},addMany:function(a,\nc,d){for(var g=[this.findIndex(c),0],l=0,k=a.length;l<k;l++)g.push({value:a[l],priority:c,options:d});this.rules.splice.apply(this.rules,g)},findIndex:function(a){for(var c=this.rules,d=c.length-1;0<=d&&a<c[d].priority;)d--;return d+1},exec:function(a,c){var d=c instanceof CKEDITOR.htmlParser.node||c instanceof CKEDITOR.htmlParser.fragment,g=Array.prototype.slice.call(arguments,1),l=this.rules,k=l.length,n,w,f,x;for(x=0;x<k;x++)if(d&&(n=c.type,w=c.name),f=l[x],!(a.nonEditable&&!f.options.applyToAll||\na.nestedEditable&&f.options.excludeNestedEditable)){f=f.value.apply(null,g);if(!1===f||d&&f&&(f.name!=w||f.type!=n))return f;null!=f&&(g[0]=c=f)}return c},execOnName:function(a,c){for(var d=0,g=this.rules,l=g.length,k;c&&d<l;d++)k=g[d],a.nonEditable&&!k.options.applyToAll||a.nestedEditable&&k.options.excludeNestedEditable||(c=c.replace(k.value[0],k.value[1]));return c}}})();\n(function(){function a(a,d){function m(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(\" \"):new CKEDITOR.htmlParser.element(\"br\",{\"data-cke-bogus\":1})}function p(a,d){return function(h){if(h.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var e=[],p=b(h),r,v;if(p)for(f(p,1)&&e.push(p);p;)g(p)&&(r=c(p))&&f(r)&&((v=c(r))&&!g(v)?e.push(r):(m(z).insertAfter(r),r.remove())),p=p.previous;for(p=0;p<e.length;p++)e[p].remove();if(e=!a||!1!==(\"function\"==typeof d?d(h):d))z||CKEDITOR.env.needsBrFiller||\nh.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT?z||CKEDITOR.env.needsBrFiller||!(7<document.documentMode||h.name in CKEDITOR.dtd.tr||h.name in CKEDITOR.dtd.$listItem)?(e=b(h),e=!e||\"form\"==h.name&&\"input\"==e.name):e=!1:e=!1;e&&h.add(m(a))}}}function f(a,b){if((!z||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&\"br\"==a.name&&!a.attributes[\"data-cke-eol\"])return!0;var c;return a.type==CKEDITOR.NODE_TEXT&&(c=a.value.match(y))&&(c.index&&((new CKEDITOR.htmlParser.text(a.value.substring(0,c.index))).insertBefore(a),\na.value=c[0]),!CKEDITOR.env.needsBrFiller&&z&&(!b||a.parent.name in v)||!z&&((c=a.previous)&&\"br\"==c.name||!c||g(c)))?!0:!1}var r={elements:{}},z=\"html\"==d,v=CKEDITOR.tools.extend({},h),C;for(C in v)\"#\"in t[C]||delete v[C];for(C in v)r.elements[C]=p(z,a.config.fillEmptyBlocks);r.root=p(z,!1);r.elements.br=function(a){return function(b){if(b.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var d=b.attributes;if(\"data-cke-bogus\"in d||\"data-cke-eol\"in d)delete d[\"data-cke-bogus\"];else{for(d=b.next;d&&e(d);)d=\nd.next;var h=c(b);!d&&g(b.parent)?l(b.parent,m(a)):g(d)&&h&&!g(h)&&m(a).insertBefore(d)}}}}(z);return r}function d(a,b){return a!=CKEDITOR.ENTER_BR&&!1!==b?a==CKEDITOR.ENTER_DIV?\"div\":\"p\":!1}function b(a){for(a=a.children[a.children.length-1];a&&e(a);)a=a.previous;return a}function c(a){for(a=a.previous;a&&e(a);)a=a.previous;return a}function e(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&&a.attributes[\"data-cke-bookmark\"]}function g(a){return a&&\n(a.type==CKEDITOR.NODE_ELEMENT&&a.name in h||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function l(a,b){var c=a.children[a.children.length-1];a.children.push(b);b.parent=a;c&&(c.next=b,b.previous=c)}function k(a){a=a.attributes;\"false\"!=a.contenteditable&&(a[\"data-cke-editable\"]=a.contenteditable?\"true\":1);a.contenteditable=\"false\"}function n(a){a=a.attributes;switch(a[\"data-cke-editable\"]){case \"true\":a.contenteditable=\"true\";break;case \"1\":delete a.contenteditable}}function w(a){return a.replace(G,\nfunction(a,b,c){return\"\\x3c\"+b+c.replace(H,function(a,b){return K.test(b)&&-1==c.indexOf(\"data-cke-saved-\"+b)?\" data-cke-saved-\"+a+\" data-cke-\"+CKEDITOR.rnd+\"-\"+a:a})+\"\\x3e\"})}function f(a,b){return a.replace(b,function(a,b,c){0===a.indexOf(\"\\x3ctextarea\")&&(a=b+u(c).replace(/</g,\"\\x26lt;\").replace(/>/g,\"\\x26gt;\")+\"\\x3c/textarea\\x3e\");return\"\\x3ccke:encoded\\x3e\"+encodeURIComponent(a)+\"\\x3c/cke:encoded\\x3e\"})}function x(a){return a.replace(Q,function(a,b){return decodeURIComponent(b)})}function A(a){return a.replace(/\\x3c!--(?!{cke_protected})[\\s\\S]+?--\\x3e/g,\nfunction(a){return\"\\x3c!--\"+F+\"{C}\"+encodeURIComponent(a).replace(/--/g,\"%2D%2D\")+\"--\\x3e\"})}function u(a){return a.replace(/\\x3c!--\\{cke_protected\\}\\{C\\}([\\s\\S]+?)--\\x3e/g,function(a,b){return decodeURIComponent(b)})}function B(a,b){var c=b._.dataStore;return a.replace(/\\x3c!--\\{cke_protected\\}([\\s\\S]+?)--\\x3e/g,function(a,b){return decodeURIComponent(b)}).replace(/\\{cke_protected_(\\d+)\\}/g,function(a,b){return c&&c[b]||\"\"})}function q(a,b){var c=[],d=b.config.protectedSource,h=b._.dataStore||(b._.dataStore=\n{id:1}),e=/<\\!--\\{cke_temp(comment)?\\}(\\d*?)--\\x3e/g,d=[/<script[\\s\\S]*?(<\\/script>|$)/gi,/<noscript[\\s\\S]*?<\\/noscript>/gi,/<meta[\\s\\S]*?\\/?>/gi].concat(d);a=a.replace(/\\x3c!--[\\s\\S]*?--\\x3e/g,function(a){return\"\\x3c!--{cke_tempcomment}\"+(c.push(a)-1)+\"--\\x3e\"});for(var p=0;p<d.length;p++)a=a.replace(d[p],function(a){a=a.replace(e,function(a,b,d){return c[d]});return/cke_temp(comment)?/.test(a)?a:\"\\x3c!--{cke_temp}\"+(c.push(a)-1)+\"--\\x3e\"});a=a.replace(e,function(a,b,d){return\"\\x3c!--\"+F+(b?\"{C}\":\n\"\")+encodeURIComponent(c[d]).replace(/--/g,\"%2D%2D\")+\"--\\x3e\"});a=a.replace(/<\\w+(?:\\s+(?:(?:[^\\s=>]+\\s*=\\s*(?:[^'\"\\s>]+|'[^']*'|\"[^\"]*\"))|[^\\s=\\/>]+))+\\s*\\/?>/g,function(a){return a.replace(/\\x3c!--\\{cke_protected\\}([^>]*)--\\x3e/g,function(a,b){h[h.id]=decodeURIComponent(b);return\"{cke_protected_\"+h.id++ +\"}\"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\\s\\S]*?)<\\/\\1>/g,function(a,c,d,h){return\"\\x3c\"+c+d+\"\\x3e\"+B(u(h),b)+\"\\x3c/\"+c+\"\\x3e\"})}CKEDITOR.htmlDataProcessor=function(b){var c,\nh,e=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=h=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(p);c.addRules(m,{applyToAll:!0});c.addRules(a(b,\"data\"),{applyToAll:!0});h.addRules(C);h.addRules(r,{applyToAll:!0});h.addRules(a(b,\"html\"),{applyToAll:!0});b.on(\"toHtml\",function(a){a=a.data;var c=a.dataValue,h,c=q(c,b),c=f(c,M),c=w(c),c=f(c,R),c=c.replace(v,\"$1cke:$2\"),c=c.replace(I,\"\\x3ccke:$1$2\\x3e\\x3c/cke:$1\\x3e\"),\nc=c.replace(/(<pre\\b[^>]*>)(\\r\\n|\\n)/g,\"$1$2$2\"),c=c.replace(/([^a-z0-9<\\-])(on\\w{3,})(?!>)/gi,\"$1data-cke-\"+CKEDITOR.rnd+\"-$2\");h=a.context||b.editable().getName();var e;CKEDITOR.env.ie&&9>CKEDITOR.env.version&&\"pre\"==h&&(h=\"div\",c=\"\\x3cpre\\x3e\"+c+\"\\x3c/pre\\x3e\",e=1);h=b.document.createElement(h);h.setHtml(\"a\"+c);c=h.getHtml().substr(1);c=c.replace(new RegExp(\"data-cke-\"+CKEDITOR.rnd+\"-\",\"ig\"),\"\");e&&(c=c.replace(/^<pre>|<\\/pre>$/gi,\"\"));c=c.replace(D,\"$1$2\");c=x(c);c=u(c);h=!1===a.fixForBody?!1:\nd(a.enterMode,b.config.autoParagraph);c=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,h);h&&(e=c,!e.children.length&&CKEDITOR.dtd[e.name][h]&&(h=new CKEDITOR.htmlParser.element(h),e.add(h)));a.dataValue=c},null,null,5);b.on(\"toHtml\",function(a){a.data.filter.applyTo(a.data.dataValue,!0,a.data.dontFilter,a.data.enterMode)&&b.fire(\"dataFiltered\")},null,null,6);b.on(\"toHtml\",function(a){a.data.dataValue.filterChildren(e.dataFilter,!0)},null,null,10);b.on(\"toHtml\",function(a){a=a.data;var b=a.dataValue,\nc=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(!0);a.dataValue=A(b)},null,null,15);b.on(\"toDataFormat\",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^<br *\\/?>/i,\"\"));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,d(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on(\"toDataFormat\",function(a){a.data.dataValue.filterChildren(e.htmlFilter,!0)},null,null,10);b.on(\"toDataFormat\",function(a){a.data.filter.applyTo(a.data.dataValue,\n!1,!0)},null,null,11);b.on(\"toDataFormat\",function(a){var c=a.data.dataValue,d=e.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(!0);c=u(c);c=B(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,c,d){var h=this.editor,e,p,m,g;b&&\"object\"==typeof b?(e=b.context,c=b.fixForBody,d=b.dontFilter,p=b.filter,m=b.enterMode,g=b.protectedWhitespaces):e=b;e||null===e||(e=h.editable().getName());return h.fire(\"toHtml\",{dataValue:a,context:e,fixForBody:c,dontFilter:d,\nfilter:p||h.filter,enterMode:m||h.enterMode,protectedWhitespaces:g}).dataValue},toDataFormat:function(a,b){var c,d,h;b&&(c=b.context,d=b.filter,h=b.enterMode);c||null===c||(c=this.editor.editable().getName());return this.editor.fire(\"toDataFormat\",{dataValue:a,filter:d||this.editor.filter,context:c,enterMode:h||this.editor.enterMode}).dataValue}};var y=/(?:&nbsp;|\\xa0)$/,F=\"{cke_protected}\",t=CKEDITOR.dtd,z=\"caption colgroup col thead tfoot tbody\".split(\" \"),h=CKEDITOR.tools.extend({},t.$blockLimit,\nt.$block),p={elements:{input:k,textarea:k}},m={attributeNames:[[/^on/,\"data-cke-pa-on\"],[/^data-cke-expando$/,\"\"]]},C={elements:{embed:function(a){var b=a.parent;if(b&&\"object\"==b.name){var c=b.attributes.width,b=b.attributes.height;c&&(a.attributes.width=c);b&&(a.attributes.height=b)}},a:function(a){var b=a.attributes;if(!(a.children.length||b.name||b.id||a.attributes[\"data-cke-saved-name\"]))return!1}}},r={elementNames:[[/^cke:/,\"\"],[/^\\?xml:namespace$/,\"\"]],attributeNames:[[/^data-cke-(saved|pa)-/,\n\"\"],[/^data-cke-.*/,\"\"],[\"hidefocus\",\"\"]],elements:{$:function(a){var b=a.attributes;if(b){if(b[\"data-cke-temp\"])return!1;for(var c=[\"name\",\"href\",\"src\"],d,h=0;h<c.length;h++)d=\"data-cke-saved-\"+c[h],d in b&&delete b[c[h]]}return a},table:function(a){a.children.slice(0).sort(function(a,b){var c,d;a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type&&(c=CKEDITOR.tools.indexOf(z,a.name),d=CKEDITOR.tools.indexOf(z,b.name));-1<c&&-1<d&&c!=d||(c=a.parent?a.getIndex():-1,d=b.parent?b.getIndex():-1);return c>d?\n1:-1})},param:function(a){a.children=[];a.isEmpty=!0;return a},span:function(a){\"Apple-style-span\"==a.attributes[\"class\"]&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes[\"class\"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var b=a.children[0];b&&b.value&&(b.value=CKEDITOR.tools.trim(b.value));a.attributes.type||(a.attributes.type=\"text/css\")},title:function(a){var b=a.children[0];!b&&l(a,b=new CKEDITOR.htmlParser.text);\nb.value=a.attributes[\"data-cke-title\"]||\"\"},input:n,textarea:n},attributes:{\"class\":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\\s+)cke_[^\\s]*/g,\"\"))||!1}}};CKEDITOR.env.ie&&(r.attributes.style=function(a){return a.replace(/(^|;)([^\\:]+)/g,function(a){return a.toLowerCase()})});var G=/<(a|area|img|input|source)\\b([^>]*)>/gi,H=/([\\w-:]+)\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|(?:[^ \"'>]+))/gi,K=/^(href|src|name)$/i,R=/(?:<style(?=[ >])[^>]*>[\\s\\S]*?<\\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,\nM=/(<textarea(?=[ >])[^>]*>)([\\s\\S]*?)(?:<\\/textarea>)/gi,Q=/<cke:encoded>([^<]*)<\\/cke:encoded>/gi,v=/(<\\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,D=/(<\\/?)cke:((?:html|body|head|title)[^>]*>)/gi,I=/<cke:(param|embed)([^>]*?)\\/?>(?!\\s*<\\/cke:\\1)/gi})();\"use strict\";\nCKEDITOR.htmlParser.element=function(a,d){this.name=a;this.attributes=d||{};this.children=[];var b=a||\"\",c=b.match(/^cke:(.*)/);c&&(b=c[1]);b=!!(CKEDITOR.dtd.$nonBodyContent[b]||CKEDITOR.dtd.$block[b]||CKEDITOR.dtd.$listItem[b]||CKEDITOR.dtd.$tableContent[b]||CKEDITOR.dtd.$nonEditable[b]||\"br\"==b);this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}};\nCKEDITOR.htmlParser.cssStyle=function(a){var d={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||\"\").replace(/&quot;/g,'\"').replace(/\\s*([^ :;]+)\\s*:\\s*([^;]+)\\s*(?=;|$)/g,function(a,c,e){\"font-family\"==c&&(e=e.replace(/[\"']/g,\"\"));d[c.toLowerCase()]=e});return{rules:d,populate:function(a){var c=this.toString();c&&(a instanceof CKEDITOR.dom.element?a.setAttribute(\"style\",c):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=c:a.style=c)},toString:function(){var a=[],c;\nfor(c in d)d[c]&&a.push(c,\":\",d[c],\";\");return a.join(\"\")}}};\n(function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&(\"string\"==typeof a?b.name==a:b.name in a)}}var d=function(a,b){a=a[0];b=b[0];return a<b?-1:a>b?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,l,k;b=d.getFilterContext(b);if(b.off)return!0;\nif(!d.parent)a.onRoot(b,d);for(;;){l=d.name;if(!(k=a.onElementName(b,l)))return this.remove(),!1;d.name=k;if(!(d=a.onElement(b,d)))return this.remove(),!1;if(d!==this)return this.replaceWith(d),!1;if(d.name==l)break;if(d.type!=CKEDITOR.NODE_ELEMENT)return this.replaceWith(d),!1;if(!d.name)return this.replaceWithChildren(),!1}l=d.attributes;var n,w;for(n in l){for(k=l[n];;)if(w=a.onAttributeName(b,n))if(w!=n)delete l[n],n=w;else break;else{delete l[n];break}w&&(!1===(k=a.onAttribute(b,d,w,k))?delete l[w]:\nl[w]=k)}d.isEmpty||this.filterChildren(a,!1,b);return!0},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var g=this.name,l=[],k=this.attributes,n,w;a.openTag(g,k);for(n in k)l.push([n,k[n]]);a.sortAttributes&&l.sort(d);n=0;for(w=l.length;n<w;n++)k=l[n],a.attribute(k[0],k[1]);a.openTagClose(g,this.isEmpty);this.writeChildrenHtml(a);this.isEmpty||a.closeTag(g)},writeChildrenHtml:b.writeChildrenHtml,replaceWithChildren:function(){for(var a=this.children,b=a.length;b;)a[--b].insertAfter(this);\nthis.remove()},forEach:b.forEach,getFirst:function(b){if(!b)return this.children.length?this.children[0]:null;\"function\"!=typeof b&&(b=a(b));for(var d=0,g=this.children.length;d<g;++d)if(b(this.children[d]))return this.children[d];return null},getHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(a);return a.getHtml()},setHtml:function(a){a=this.children=CKEDITOR.htmlParser.fragment.fromHtml(a).children;for(var b=0,d=a.length;b<d;++b)a[b].parent=this},getOuterHtml:function(){var a=\nnew CKEDITOR.htmlParser.basicWriter;this.writeHtml(a);return a.getHtml()},split:function(a){for(var b=this.children.splice(a,this.children.length-a),d=this.clone(),l=0;l<b.length;++l)b[l].parent=d;d.children=b;b[0]&&(b[0].previous=null);0<a&&(this.children[a-1].next=null);this.parent.add(d,this.getIndex()+1);return d},addClass:function(a){if(!this.hasClass(a)){var b=this.attributes[\"class\"]||\"\";this.attributes[\"class\"]=b+(b?\" \":\"\")+a}},removeClass:function(a){var b=this.attributes[\"class\"];b&&((b=\nCKEDITOR.tools.trim(b.replace(new RegExp(\"(?:\\\\s+|^)\"+a+\"(?:\\\\s+|$)\"),\" \")))?this.attributes[\"class\"]=b:delete this.attributes[\"class\"])},hasClass:function(a){var b=this.attributes[\"class\"];return b?(new RegExp(\"(?:^|\\\\s)\"+a+\"(?\\x3d\\\\s|$)\")).test(b):!1},getFilterContext:function(a){var b=[];a||(a={off:!1,nonEditable:!1,nestedEditable:!1});a.off||\"off\"!=this.attributes[\"data-cke-processor\"]||b.push(\"off\",!0);a.nonEditable||\"false\"!=this.attributes.contenteditable?a.nonEditable&&!a.nestedEditable&&\n\"true\"==this.attributes.contenteditable&&b.push(\"nestedEditable\",!0):b.push(\"nonEditable\",!0);if(b.length){a=CKEDITOR.tools.copy(a);for(var d=0;d<b.length;d+=2)a[b[d]]=b[d+1]}return a}},!0)})();\n(function(){var a={},d=/{([^}]+)}/g,b=/([\\\\'])/g,c=/\\n/g,e=/\\r/g;CKEDITOR.template=function(g){if(a[g])this.output=a[g];else{var l=g.replace(b,\"\\\\$1\").replace(c,\"\\\\n\").replace(e,\"\\\\r\").replace(d,function(a,b){return\"',data['\"+b+\"']\\x3d\\x3dundefined?'{\"+b+\"}':data['\"+b+\"'],'\"});this.output=a[g]=Function(\"data\",\"buffer\",\"return buffer?buffer.push('\"+l+\"'):['\"+l+\"'].join('');\")}}})();delete CKEDITOR.loadFullCore;CKEDITOR.instances={};CKEDITOR.document=new CKEDITOR.dom.document(document);\nCKEDITOR.add=function(a){CKEDITOR.instances[a.name]=a;a.on(\"focus\",function(){CKEDITOR.currentInstance!=a&&(CKEDITOR.currentInstance=a,CKEDITOR.fire(\"currentInstance\"))});a.on(\"blur\",function(){CKEDITOR.currentInstance==a&&(CKEDITOR.currentInstance=null,CKEDITOR.fire(\"currentInstance\"))});CKEDITOR.fire(\"instance\",null,a)};CKEDITOR.remove=function(a){delete CKEDITOR.instances[a.name]};\n(function(){var a={};CKEDITOR.addTemplate=function(d,b){var c=a[d];if(c)return c;c={name:d,source:b};CKEDITOR.fire(\"template\",c);return a[d]=new CKEDITOR.template(c.source)};CKEDITOR.getTemplate=function(d){return a[d]}})();(function(){var a=[];CKEDITOR.addCss=function(d){a.push(d)};CKEDITOR.getCss=function(){return a.join(\"\\n\")}})();CKEDITOR.on(\"instanceDestroyed\",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire(\"reset\")});CKEDITOR.TRISTATE_ON=1;CKEDITOR.TRISTATE_OFF=2;\nCKEDITOR.TRISTATE_DISABLED=0;\n(function(){CKEDITOR.inline=function(a,d){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance \"'+a.getEditor().name+'\" is already attached to the provided element.';var b=new CKEDITOR.editor(d,a,CKEDITOR.ELEMENT_MODE_INLINE),c=a.is(\"textarea\")?a:null;c?(b.setData(c.getValue(),null,!0),a=CKEDITOR.dom.element.createFromHtml('\\x3cdiv contenteditable\\x3d\"'+!!b.readOnly+'\" class\\x3d\"cke_textarea_inline\"\\x3e'+c.getValue()+\"\\x3c/div\\x3e\",CKEDITOR.document),\na.insertAfter(c),c.hide(),c.$.form&&b._attachToForm()):b.setData(a.getHtml(),null,!0);b.on(\"loaded\",function(){b.fire(\"uiReady\");b.editable(a);b.container=a;b.ui.contentsElement=a;b.setData(b.getData(1));b.resetDirty();b.fire(\"contentDom\");b.mode=\"wysiwyg\";b.fire(\"mode\");b.status=\"ready\";b.fireOnce(\"instanceReady\");CKEDITOR.fire(\"instanceReady\",null,b)},null,null,1E4);b.on(\"destroy\",function(){c&&(b.container.clearCustomData(),b.container.remove(),c.show());b.element.clearCustomData();delete b.element});\nreturn b};CKEDITOR.inlineAll=function(){var a,d,b;for(b in CKEDITOR.dtd.$editable)for(var c=CKEDITOR.document.getElementsByTag(b),e=0,g=c.count();e<g;e++)a=c.getItem(e),\"true\"==a.getAttribute(\"contenteditable\")&&(d={element:a,config:{}},!1!==CKEDITOR.fire(\"inline\",d)&&CKEDITOR.inline(a,d.config))};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})})();CKEDITOR.replaceClass=\"ckeditor\";\n(function(){function a(a,e,g,l){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance \"'+a.getEditor().name+'\" is already attached to the provided element.';var k=new CKEDITOR.editor(e,a,l);l==CKEDITOR.ELEMENT_MODE_REPLACE&&(a.setStyle(\"visibility\",\"hidden\"),k._.required=a.hasAttribute(\"required\"),a.removeAttribute(\"required\"));g&&k.setData(g,null,!0);k.on(\"loaded\",function(){b(k);l==CKEDITOR.ELEMENT_MODE_REPLACE&&k.config.autoUpdateElement&&\na.$.form&&k._attachToForm();k.setMode(k.config.startupMode,function(){k.resetDirty();k.status=\"ready\";k.fireOnce(\"instanceReady\");CKEDITOR.fire(\"instanceReady\",null,k)})});k.on(\"destroy\",d);return k}function d(){var a=this.container,b=this.element;a&&(a.clearCustomData(),a.remove());b&&(b.clearCustomData(),this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&(b.show(),this._.required&&b.setAttribute(\"required\",\"required\")),delete this.element)}function b(a){var b=a.name,d=a.element,l=a.elementMode,k=\na.fire(\"uiSpace\",{space:\"top\",html:\"\"}).html,n=a.fire(\"uiSpace\",{space:\"bottom\",html:\"\"}).html,w=new CKEDITOR.template('\\x3c{outerEl} id\\x3d\"cke_{name}\" class\\x3d\"{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'\"  dir\\x3d\"{langDir}\" lang\\x3d\"{langCode}\" role\\x3d\"application\"'+(a.title?' aria-labelledby\\x3d\"cke_{name}_arialbl\"':\"\")+\"\\x3e\"+(a.title?'\\x3cspan id\\x3d\"cke_{name}_arialbl\" class\\x3d\"cke_voice_label\"\\x3e{voiceLabel}\\x3c/span\\x3e':\"\")+'\\x3c{outerEl} class\\x3d\"cke_inner cke_reset\" role\\x3d\"presentation\"\\x3e{topHtml}\\x3c{outerEl} id\\x3d\"{contentId}\" class\\x3d\"cke_contents cke_reset\" role\\x3d\"presentation\"\\x3e\\x3c/{outerEl}\\x3e{bottomHtml}\\x3c/{outerEl}\\x3e\\x3c/{outerEl}\\x3e'),\nb=CKEDITOR.dom.element.createFromHtml(w.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:a.title,topHtml:k?'\\x3cspan id\\x3d\"'+a.ui.spaceId(\"top\")+'\" class\\x3d\"cke_top cke_reset_all\" role\\x3d\"presentation\" style\\x3d\"height:auto\"\\x3e'+k+\"\\x3c/span\\x3e\":\"\",contentId:a.ui.spaceId(\"contents\"),bottomHtml:n?'\\x3cspan id\\x3d\"'+a.ui.spaceId(\"bottom\")+'\" class\\x3d\"cke_bottom cke_reset_all\" role\\x3d\"presentation\"\\x3e'+n+\"\\x3c/span\\x3e\":\"\",outerEl:CKEDITOR.env.ie?\"span\":\"div\"}));l==CKEDITOR.ELEMENT_MODE_REPLACE?\n(d.hide(),b.insertAfter(d)):d.append(b);a.container=b;a.ui.contentsElement=a.ui.space(\"contents\");k&&a.ui.space(\"top\").unselectable();n&&a.ui.space(\"bottom\").unselectable();d=a.config.width;l=a.config.height;d&&b.setStyle(\"width\",CKEDITOR.tools.cssLength(d));l&&a.ui.space(\"contents\").setStyle(\"height\",CKEDITOR.tools.cssLength(l));b.disableContextMenu();CKEDITOR.env.webkit&&b.on(\"focus\",function(){a.focus()});a.fireOnce(\"uiReady\")}CKEDITOR.replace=function(b,d){return a(b,d,null,CKEDITOR.ELEMENT_MODE_REPLACE)};\nCKEDITOR.appendTo=function(b,d,g){return a(b,d,g,CKEDITOR.ELEMENT_MODE_APPENDTO)};CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName(\"textarea\"),b=0;b<a.length;b++){var d=null,l=a[b];if(l.name||l.id){if(\"string\"==typeof arguments[0]){if(!(new RegExp(\"(?:^|\\\\s)\"+arguments[0]+\"(?:$|\\\\s)\")).test(l.className))continue}else if(\"function\"==typeof arguments[0]&&(d={},!1===arguments[0](l,d)))continue;this.replace(l,d)}}};CKEDITOR.editor.prototype.addMode=function(a,b){(this._.modes||(this._.modes=\n{}))[a]=b};CKEDITOR.editor.prototype.setMode=function(a,b){var d=this,l=this._.modes;if(a!=d.mode&&l&&l[a]){d.fire(\"beforeSetMode\",a);if(d.mode){var k=d.checkDirty(),l=d._.previousModeData,n,w=0;d.fire(\"beforeModeUnload\");d.editable(0);d._.previousMode=d.mode;d._.previousModeData=n=d.getData(1);\"source\"==d.mode&&l==n&&(d.fire(\"lockSnapshot\",{forceUpdate:!0}),w=1);d.ui.space(\"contents\").setHtml(\"\");d.mode=\"\"}else d._.previousModeData=d.getData(1);this._.modes[a](function(){d.mode=a;void 0!==k&&!k&&\nd.resetDirty();w?d.fire(\"unlockSnapshot\"):\"wysiwyg\"==a&&d.fire(\"saveSnapshot\");setTimeout(function(){d.fire(\"mode\");b&&b.call(d)},0)})}};CKEDITOR.editor.prototype.resize=function(a,b,d,l){var k=this.container,n=this.ui.space(\"contents\"),w=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement;l=l?this.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass(\"cke_inner\")}):k;l.setSize(\"width\",a,!0);w&&(w.style.width=\"1%\");var f=(l.$.offsetHeight||0)-(n.$.clientHeight||\n0),k=Math.max(b-(d?0:f),0);b=d?b+f:b;n.setStyle(\"height\",k+\"px\");w&&(w.style.width=\"100%\");this.fire(\"resize\",{outerHeight:b,contentsHeight:k,outerWidth:a||l.getSize(\"width\")})};CKEDITOR.editor.prototype.getResizable=function(a){return a?this.ui.space(\"contents\"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})})();CKEDITOR.config.startupMode=\"wysiwyg\";\n(function(){function a(a){var b=a.editor,e=a.data.path,m=e.blockLimit,f=a.data.selection,r=f.getRanges()[0],g;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(f=d(f,e))f.appendBogus(),g=CKEDITOR.env.ie;l(b,e.block,m)&&r.collapsed&&!r.getCommonAncestor().isReadOnly()&&(e=r.clone(),e.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS),m=new CKEDITOR.dom.walker(e),m.guard=function(a){return!c(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()},!m.checkForward()||e.checkStartOfBlock()&&e.checkEndOfBlock())&&\n(b=r.fixBlock(!0,b.activeEnterMode==CKEDITOR.ENTER_DIV?\"div\":\"p\"),CKEDITOR.env.needsBrFiller||(b=b.getFirst(c))&&b.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(b.getText()).match(/^(?:&nbsp;|\\xa0)$/)&&b.remove(),g=1,a.cancel());g&&r.select()}function d(a,b){if(a.isFake)return 0;var d=b.block||b.blockLimit,e=d&&d.getLast(c);if(!(!d||!d.isBlockBoundary()||e&&e.type==CKEDITOR.NODE_ELEMENT&&e.isBlockBoundary()||d.is(\"pre\")||d.getBogus()))return d}function b(a){var b=a.data.getTarget();b.is(\"input\")&&\n(b=b.getAttribute(\"type\"),\"submit\"!=b&&\"reset\"!=b||a.data.preventDefault())}function c(a){return f(a)&&x(a)}function e(a,b){return function(c){var d=c.data.$.toElement||c.data.$.fromElement||c.data.$.relatedTarget;(d=d&&d.nodeType==CKEDITOR.NODE_ELEMENT?new CKEDITOR.dom.element(d):null)&&(b.equals(d)||b.contains(d))||a.call(this,c)}}function g(a){function b(a){return function(b,h){h&&b.type==CKEDITOR.NODE_ELEMENT&&b.is(f)&&(d=b);if(!(h||!c(b)||a&&u(b)))return!1}}var d,e=a.getRanges()[0];a=a.root;\nvar f={table:1,ul:1,ol:1,dl:1};if(e.startPath().contains(f)){var r=e.clone();r.collapse(1);r.setStartAt(a,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(r);a.guard=b();a.checkBackward();if(d)return r=e.clone(),r.collapse(),r.setEndAt(d,CKEDITOR.POSITION_AFTER_END),a=new CKEDITOR.dom.walker(r),a.guard=b(!0),d=!1,a.checkForward(),d}return null}function l(a,b,c){return!1!==a.config.autoParagraph&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&(a.editable().equals(c)&&!b||b&&\"true\"==b.getAttribute(\"contenteditable\"))}\nfunction k(a){return a.activeEnterMode!=CKEDITOR.ENTER_BR&&!1!==a.config.autoParagraph?a.activeEnterMode==CKEDITOR.ENTER_DIV?\"div\":\"p\":!1}function n(a){var b=a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire(\"saveSnapshot\")},0)}function w(a,b,c){var d=a.getCommonAncestor(b);for(b=a=c?b:a;(a=a.getParent())&&!d.equals(a)&&1==a.getChildCount();)b=a;b.remove()}CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,b){this.base(b.$||b);this.editor=a;\nthis.status=\"unloaded\";this.hasFocus=!1;this.setup()},proto:{focus:function(){var a;if(CKEDITOR.env.webkit&&!this.hasFocus&&(a=this.editor._.previousActive||this.getDocument().getActive(),this.contains(a))){a.focus();return}try{this.$[CKEDITOR.env.ie&&this.getDocument().equals(CKEDITOR.document)?\"setActive\":\"focus\"]()}catch(b){if(!CKEDITOR.env.ie)throw b;}CKEDITOR.env.safari&&!this.isInline()&&(a=CKEDITOR.document.getActive(),a.equals(this.getWindow().getFrame())||this.getWindow().focus())},on:function(a,\nb){var c=Array.prototype.slice.call(arguments,0);CKEDITOR.env.ie&&/^focus|blur$/.exec(a)&&(a=\"focus\"==a?\"focusin\":\"focusout\",b=e(b,this),c[0]=a,c[1]=b);return CKEDITOR.dom.element.prototype.on.apply(this,c)},attachListener:function(a){!this._.listeners&&(this._.listeners=[]);var b=Array.prototype.slice.call(arguments,1),b=a.on.apply(a,b);this._.listeners.push(b);return b},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}},restoreAttrs:function(){var a=\nthis._.attrChanges,b,c;for(c in a)a.hasOwnProperty(c)&&(b=a[c],null!==b?this.setAttribute(c,b):this.removeAttribute(c))},attachClass:function(a){var b=this.getCustomData(\"classes\");this.hasClass(a)||(!b&&(b=[]),b.push(a),this.setCustomData(\"classes\",b),this.addClass(a))},changeAttr:function(a,b){var c=this.getAttribute(a);b!==c&&(!this._.attrChanges&&(this._.attrChanges={}),a in this._.attrChanges||(this._.attrChanges[a]=c),this.setAttribute(a,b))},insertText:function(a){this.editor.focus();this.insertHtml(this.transformPlainTextToHtml(a),\n\"text\")},transformPlainTextToHtml:function(a){var b=this.editor.getSelection().getStartElement().hasAscendant(\"pre\",!0)?CKEDITOR.ENTER_BR:this.editor.activeEnterMode;return CKEDITOR.tools.transformPlainTextToHtml(a,b)},insertHtml:function(a,b,c){var d=this.editor;d.focus();d.fire(\"saveSnapshot\");c||(c=d.getSelection().getRanges()[0]);q(this,b||\"html\",a,c);c.select();n(this);this.editor.fire(\"afterInsertHtml\",{})},insertHtmlIntoRange:function(a,b,c){q(this,c||\"html\",a,b);this.editor.fire(\"afterInsertHtml\",\n{intoRange:b})},insertElement:function(a,b){var d=this.editor;d.focus();d.fire(\"saveSnapshot\");var e=d.activeEnterMode,d=d.getSelection(),f=a.getName(),f=CKEDITOR.dtd.$block[f];b||(b=d.getRanges()[0]);this.insertElementIntoRange(a,b)&&(b.moveToPosition(a,CKEDITOR.POSITION_AFTER_END),f&&((f=a.getNext(function(a){return c(a)&&!u(a)}))&&f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block)?f.getDtd()[\"#\"]?b.moveToElementEditStart(f):b.moveToElementEditEnd(a):f||e==CKEDITOR.ENTER_BR||(f=b.fixBlock(!0,\ne==CKEDITOR.ENTER_DIV?\"div\":\"p\"),b.moveToElementEditStart(f))));d.selectRanges([b]);n(this)},insertElementIntoSelection:function(a){this.insertElement(a)},insertElementIntoRange:function(a,b){var c=this.editor,d=c.config.enterMode,e=a.getName(),f=CKEDITOR.dtd.$block[e];if(b.checkReadOnly())return!1;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})&&y(b);var g,l;if(f)for(;(g=b.getCommonAncestor(0,1))&&(l=CKEDITOR.dtd[g.getName()])&&\n(!l||!l[e]);)g.getName()in CKEDITOR.dtd.span?b.splitElement(g):b.checkStartOfBlock()&&b.checkEndOfBlock()?(b.setStartBefore(g),b.collapse(!0),g.remove()):b.splitBlock(d==CKEDITOR.ENTER_DIV?\"div\":\"p\",c.editable());b.insertNode(a);return!0},setData:function(a,b){b||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);this.fixInitialSelection();\"unloaded\"==this.status&&(this.status=\"ready\");this.editor.fire(\"dataReady\")},getData:function(a){var b=this.getHtml();a||(b=this.editor.dataProcessor.toDataFormat(b));\nreturn b},setReadOnly:function(a){this.setAttribute(\"contenteditable\",!a)},detach:function(){this.removeClass(\"cke_editable\");this.status=\"detached\";var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},fixInitialSelection:function(){function a(){var b=c.getDocument().$,d=b.getSelection(),h;a:if(d.anchorNode&&d.anchorNode==c.$)h=!0;else{if(CKEDITOR.env.webkit&&(h=c.getDocument().getActive())&&h.equals(c)&&!d.anchorNode){h=\n!0;break a}h=void 0}h&&(h=new CKEDITOR.dom.range(c),h.moveToElementEditStart(c),b=b.createRange(),b.setStart(h.startContainer.$,h.startOffset),b.collapse(!0),d.removeAllRanges(),d.addRange(b))}function b(){var a=c.getDocument().$,d=a.selection,h=c.getDocument().getActive();\"None\"==d.type&&h.equals(c)&&(d=new CKEDITOR.dom.range(c),a=a.body.createTextRange(),d.moveToElementEditStart(c),d=d.startContainer,d.type!=CKEDITOR.NODE_ELEMENT&&(d=d.getParent()),a.moveToElementText(d.$),a.collapse(!0),a.select())}\nvar c=this;if(CKEDITOR.env.ie&&(9>CKEDITOR.env.version||CKEDITOR.env.quirks))this.hasFocus&&(this.focus(),b());else if(this.hasFocus)this.focus(),a();else this.once(\"focus\",function(){a()},null,null,-999)},getHtmlFromRange:function(a){if(a.collapsed)return new CKEDITOR.dom.documentFragment(a.document);a={doc:this.getDocument(),range:a.clone()};F.eol.detect(a,this);F.bogus.exclude(a);F.cell.shrink(a);a.fragment=a.range.cloneContents();F.tree.rebuild(a,this);F.eol.fix(a,this);return new CKEDITOR.dom.documentFragment(a.fragment.$)},\nextractHtmlFromRange:function(a,b){var c=t,d={range:a,doc:a.document},e=this.getHtmlFromRange(a);if(a.collapsed)return a.optimize(),e;a.enlarge(CKEDITOR.ENLARGE_INLINE,1);c.table.detectPurge(d);d.bookmark=a.createBookmark();delete d.range;var f=this.editor.createRange();f.moveToPosition(d.bookmark.startNode,CKEDITOR.POSITION_BEFORE_START);d.targetBookmark=f.createBookmark();c.list.detectMerge(d,this);c.table.detectRanges(d,this);c.block.detectMerge(d,this);d.tableContentsRanges?(c.table.deleteRanges(d),\na.moveToBookmark(d.bookmark),d.range=a):(a.moveToBookmark(d.bookmark),d.range=a,a.extractContents(c.detectExtractMerge(d)));a.moveToBookmark(d.targetBookmark);a.optimize();c.fixUneditableRangePosition(a);c.list.merge(d,this);c.table.purge(d,this);c.block.merge(d,this);if(b){c=a.startPath();if(d=a.checkStartOfBlock()&&a.checkEndOfBlock()&&c.block&&!a.root.equals(c.block)){a:{var d=c.block.getElementsByTag(\"span\"),f=0,g;if(d)for(;g=d.getItem(f++);)if(!x(g)){d=!0;break a}d=!1}d=!d}d&&(a.moveToPosition(c.block,\nCKEDITOR.POSITION_BEFORE_START),c.block.remove())}else c.autoParagraph(this.editor,a),A(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings();return e},setup:function(){var a=this.editor;this.attachListener(a,\"beforeGetData\",function(){var b=this.getData();this.is(\"textarea\")||!1!==a.config.ignoreEmptyParagraph&&(b=b.replace(B,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a,\"getSnapshot\",function(a){a.data=this.getData(1)},this);this.attachListener(a,\n\"afterSetData\",function(){this.setData(a.getData(1))},this);this.attachListener(a,\"loadSnapshot\",function(a){this.setData(a.data,1)},this);this.attachListener(a,\"beforeFocus\",function(){var b=a.getSelection();(b=b&&b.getNative())&&\"Control\"==b.type||this.focus()},this);this.attachListener(a,\"insertHtml\",function(a){this.insertHtml(a.data.dataValue,a.data.mode,a.data.range)},this);this.attachListener(a,\"insertElement\",function(a){this.insertElement(a.data)},this);this.attachListener(a,\"insertText\",\nfunction(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass(\"cke_editable\");a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?this.attachClass(\"cke_editable_inline\"):a.elementMode!=CKEDITOR.ELEMENT_MODE_REPLACE&&a.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO||this.attachClass(\"cke_editable_themed\");this.attachClass(\"cke_contents_\"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=+a.readOnly;a.keystrokeHandler.attach(this);this.on(\"blur\",function(){this.hasFocus=\n!1},null,null,-1);this.on(\"focus\",function(){this.hasFocus=!0},null,null,-1);a.focusManager.add(this);this.equals(CKEDITOR.document.getActive())&&(this.hasFocus=!0,a.once(\"contentDom\",function(){a.focusManager.focus(this)},this));this.isInline()&&this.changeAttr(\"tabindex\",a.tabIndex);if(!this.is(\"textarea\")){a.document=this.getDocument();a.window=this.getWindow();var d=a.document;this.changeAttr(\"spellcheck\",!a.config.disableNativeSpellChecker);var e=a.config.contentsLangDirection;this.getDirection(1)!=\ne&&this.changeAttr(\"dir\",e);var m=CKEDITOR.getCss();m&&(e=d.getHead(),e.getCustomData(\"stylesheet\")||(m=d.appendStyleText(m),m=new CKEDITOR.dom.element(m.ownerNode||m.owningElement),e.setCustomData(\"stylesheet\",m),m.data(\"cke-temp\",1)));e=d.getCustomData(\"stylesheet_ref\")||0;d.setCustomData(\"stylesheet_ref\",e+1);this.setCustomData(\"cke_includeReadonly\",!a.config.disableReadonlyStyling);this.attachListener(this,\"click\",function(a){a=a.data;var b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains(\"a\");\nb&&2!=a.$.button&&b.isReadOnly()&&a.preventDefault()});var l={8:1,46:1};this.attachListener(a,\"key\",function(b){if(a.readOnly)return!0;var c=b.data.domEvent.getKey(),d;if(c in l){b=a.getSelection();var h,e=b.getRanges()[0],m=e.startPath(),p,v,k,c=8==c;CKEDITOR.env.ie&&11>CKEDITOR.env.version&&(h=b.getSelectedElement())||(h=g(b))?(a.fire(\"saveSnapshot\"),e.moveToPosition(h,CKEDITOR.POSITION_BEFORE_START),h.remove(),e.select(),a.fire(\"saveSnapshot\"),d=1):e.collapsed&&((p=m.block)&&(k=p[c?\"getPrevious\":\n\"getNext\"](f))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is(\"table\")&&e[c?\"checkStartOfBlock\":\"checkEndOfBlock\"]()?(a.fire(\"saveSnapshot\"),e[c?\"checkEndOfBlock\":\"checkStartOfBlock\"]()&&p.remove(),e[\"moveToElementEdit\"+(c?\"End\":\"Start\")](k),e.select(),a.fire(\"saveSnapshot\"),d=1):m.blockLimit&&m.blockLimit.is(\"td\")&&(v=m.blockLimit.getAscendant(\"table\"))&&e.checkBoundaryOfElement(v,c?CKEDITOR.START:CKEDITOR.END)&&(k=v[c?\"getPrevious\":\"getNext\"](f))?(a.fire(\"saveSnapshot\"),e[\"moveToElementEdit\"+(c?\"End\":\"Start\")](k),\ne.checkStartOfBlock()&&e.checkEndOfBlock()?k.remove():e.select(),a.fire(\"saveSnapshot\"),d=1):(v=m.contains([\"td\",\"th\",\"caption\"]))&&e.checkBoundaryOfElement(v,c?CKEDITOR.START:CKEDITOR.END)&&(d=1))}return!d});a.blockless&&CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller&&this.attachListener(this,\"keyup\",function(b){b.data.getKeystroke()in l&&!this.getFirst(c)&&(this.appendBogus(),b=a.createRange(),b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START),b.select())});this.attachListener(this,\"dblclick\",function(b){if(a.readOnly)return!1;\nb={element:b.data.getTarget()};a.fire(\"doubleclick\",b)});CKEDITOR.env.ie&&this.attachListener(this,\"click\",b);CKEDITOR.env.ie&&!CKEDITOR.env.edge||this.attachListener(this,\"mousedown\",function(b){var c=b.data.getTarget();c.is(\"img\",\"hr\",\"input\",\"textarea\",\"select\")&&!c.isReadOnly()&&(a.getSelection().selectElement(c),c.is(\"input\",\"textarea\",\"select\")&&b.data.preventDefault())});CKEDITOR.env.edge&&this.attachListener(this,\"mouseup\",function(b){(b=b.data.getTarget())&&b.is(\"img\")&&a.getSelection().selectElement(b)});\nCKEDITOR.env.gecko&&this.attachListener(this,\"mouseup\",function(b){if(2==b.data.$.button&&(b=b.data.getTarget(),!b.getOuterHtml().replace(B,\"\"))){var c=a.createRange();c.moveToElementEditStart(b);c.select(!0)}});CKEDITOR.env.webkit&&(this.attachListener(this,\"click\",function(a){a.data.getTarget().is(\"input\",\"select\")&&a.data.preventDefault()}),this.attachListener(this,\"mouseup\",function(a){a.data.getTarget().is(\"input\",\"textarea\")&&a.data.preventDefault()}));CKEDITOR.env.webkit&&this.attachListener(a,\n\"key\",function(b){if(a.readOnly)return!0;b=b.data.domEvent.getKey();if(b in l){var c=8==b,d=a.getSelection().getRanges()[0];b=d.startPath();if(d.collapsed)a:{var h=b.block;if(h&&d[c?\"checkStartOfBlock\":\"checkEndOfBlock\"]()&&d.moveToClosestEditablePosition(h,!c)&&d.collapsed){if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var e=d.startContainer.getChild(d.startOffset-(c?1:0));if(e&&e.type==CKEDITOR.NODE_ELEMENT&&e.is(\"hr\")){a.fire(\"saveSnapshot\");e.remove();b=!0;break a}}d=d.startPath().block;if(!d||\nd&&d.contains(h))b=void 0;else{a.fire(\"saveSnapshot\");var m;(m=(c?d:h).getBogus())&&m.remove();m=a.getSelection();e=m.createBookmarks();(c?h:d).moveChildren(c?d:h,!1);b.lastElement.mergeSiblings();w(h,d,!c);m.selectBookmarks(e);b=!0}}else b=!1}else c=d,m=b.block,d=c.endPath().block,m&&d&&!m.equals(d)?(a.fire(\"saveSnapshot\"),(h=m.getBogus())&&h.remove(),c.enlarge(CKEDITOR.ENLARGE_INLINE),c.deleteContents(),d.getParent()&&(d.moveChildren(m,!1),b.lastElement.mergeSiblings(),w(m,d,!0)),c=a.getSelection().getRanges()[0],\nc.collapse(1),c.optimize(),\"\"===c.startContainer.getHtml()&&c.startContainer.appendBogus(),c.select(),b=!0):b=!1;if(!b)return;a.getSelection().scrollIntoView();a.fire(\"saveSnapshot\");return!1}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData(\"classes\"))for(;a.length;)this.removeClass(a.pop());if(!this.is(\"textarea\")){a=this.getDocument();var b=a.getHead();if(b.getCustomData(\"stylesheet\")){var c=\na.getCustomData(\"stylesheet_ref\");--c?a.setCustomData(\"stylesheet_ref\",c):(a.removeCustomData(\"stylesheet_ref\"),b.removeCustomData(\"stylesheet\").remove())}}this.editor.fire(\"contentDomUnload\");delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;arguments.length&&(b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null));return b};CKEDITOR.on(\"instanceLoaded\",function(b){var c=b.editor;c.on(\"insertElement\",\nfunction(a){a=a.data;a.type==CKEDITOR.NODE_ELEMENT&&(a.is(\"input\")||a.is(\"textarea\"))&&(\"false\"!=a.getAttribute(\"contentEditable\")&&a.data(\"cke-editable\",a.hasAttribute(\"contenteditable\")?\"true\":\"1\"),a.setAttribute(\"contentEditable\",!1))});c.on(\"selectionChange\",function(b){if(!c.readOnly){var d=c.getSelection();d&&!d.isLocked&&(d=c.checkDirty(),c.fire(\"lockSnapshot\"),a(b),c.fire(\"unlockSnapshot\"),!d&&c.resetDirty())}})});CKEDITOR.on(\"instanceCreated\",function(a){var b=a.editor;b.on(\"mode\",function(){var a=\nb.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr(\"role\",\"textbox\");a.changeAttr(\"aria-label\",c);c&&a.changeAttr(\"title\",c);var d=b.fire(\"ariaEditorHelpLabel\",{}).label;if(d&&(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?\"top\":\"contents\"))){var e=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('\\x3cspan id\\x3d\"'+e+'\" class\\x3d\"cke_voice_label\"\\x3e'+d+\"\\x3c/span\\x3e\");c.append(d);a.changeAttr(\"aria-describedby\",e)}}})});CKEDITOR.addCss(\".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}\");\nvar f=CKEDITOR.dom.walker.whitespaces(!0),x=CKEDITOR.dom.walker.bookmark(!1,!0),A=CKEDITOR.dom.walker.empty(),u=CKEDITOR.dom.walker.bogus(),B=/(^|<body\\b[^>]*>)\\s*<(p|div|address|h\\d|center|pre)[^>]*>\\s*(?:<br[^>]*>|&nbsp;|\\u00A0|&#160;)?\\s*(:?<\\/\\2>)?\\s*(?=$|<\\/body>)/gi,q=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var e,m,f,p,g=[],l=d.range.startContainer;e=d.range.startPath();for(var l=q[l.getName()],r=0,k=c.getChildren(),C=k.count(),G=-1,n=-1,w=0,K=e.contains(q.$list);r<\nC;++r)e=k.getItem(r),a(e)?(f=e.getName(),K&&f in CKEDITOR.dtd.$list?g=g.concat(b(e,d)):(p=!!l[f],\"br\"!=f||!e.data(\"cke-eol\")||r&&r!=C-1||(w=(m=r?g[r-1].node:k.getItem(r+1))&&(!a(m)||!m.is(\"br\")),m=m&&a(m)&&q.$block[m.getName()]),-1!=G||p||(G=r),p||(n=r),g.push({isElement:1,isLineBreak:w,isBlock:e.isBlockBoundary(),hasBlockSibling:m,node:e,name:f,allowed:p}),m=w=0)):g.push({isElement:0,node:e,allowed:1});-1<G&&(g[G].firstNotAllowed=1);-1<n&&(g[n].lastNotAllowed=1);return g}function d(b,c){var e=[],\nh=b.getChildren(),m=h.count(),f,g=0,l=q[c],r=!b.is(q.$inline)||b.is(\"br\");for(r&&e.push(\" \");g<m;g++)f=h.getItem(g),a(f)&&!f.is(l)?e=e.concat(d(f,c)):e.push(f);r&&e.push(\" \");return e}function e(b){return a(b.startContainer)&&b.startContainer.getChild(b.startOffset-1)}function f(b){return b&&a(b)&&(b.is(q.$removeEmpty)||b.is(\"a\")&&!b.isBlockBoundary())}function g(b,c,d,e){var h=b.clone(),m,f;h.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);(m=(new CKEDITOR.dom.walker(h)).next())&&a(m)&&n[m.getName()]&&\n(f=m.getPrevious())&&a(f)&&!f.getParent().equals(b.startContainer)&&d.contains(f)&&e.contains(m)&&m.isIdentical(f)&&(m.moveChildren(f),m.remove(),g(b,c,d,e))}function G(b,c){function d(b,c){if(c.isBlock&&c.isElement&&!c.node.is(\"br\")&&a(b)&&b.is(\"br\"))return b.remove(),1}var e=c.endContainer.getChild(c.endOffset),h=c.endContainer.getChild(c.endOffset-1);e&&d(e,b[b.length-1]);h&&d(h,b[0])&&(c.setEnd(c.endContainer,c.endOffset-1),c.collapse())}var q=CKEDITOR.dtd,n={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,\nh6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},w={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},M=CKEDITOR.tools.extend({},q.$inline);delete M.br;return function(n,v,D,I){var E=n.editor,L=!1;\"unfiltered_html\"==v&&(v=\"html\",L=!0);if(!I.checkReadOnly()){var J=(new CKEDITOR.dom.elementPath(I.startContainer,I.root)).blockLimit||I.root;n={type:v,dontFilter:L,editable:n,editor:E,range:I,blockLimit:J,mergeCandidates:[],zombies:[]};v=n.range;I=n.mergeCandidates;var K,u;\"text\"==n.type&&v.shrink(CKEDITOR.SHRINK_ELEMENT,\n!0,!1)&&(K=CKEDITOR.dom.element.createFromHtml(\"\\x3cspan\\x3e\\x26nbsp;\\x3c/span\\x3e\",v.document),v.insertNode(K),v.setStartAfter(K));L=new CKEDITOR.dom.elementPath(v.startContainer);n.endPath=J=new CKEDITOR.dom.elementPath(v.endContainer);if(!v.collapsed){var E=J.block||J.blockLimit,y=v.getCommonAncestor();E&&!E.equals(y)&&!E.contains(y)&&v.checkEndOfBlock()&&n.zombies.push(E);v.deleteContents()}for(;(u=e(v))&&a(u)&&u.isBlockBoundary()&&L.contains(u);)v.moveToPosition(u,CKEDITOR.POSITION_BEFORE_END);\ng(v,n.blockLimit,L,J);K&&(v.setEndBefore(K),v.collapse(),K.remove());K=v.startPath();if(E=K.contains(f,!1,1))v.splitElement(E),n.inlineStylesRoot=E,n.inlineStylesPeak=K.lastElement;K=v.createBookmark();(E=K.startNode.getPrevious(c))&&a(E)&&f(E)&&I.push(E);(E=K.startNode.getNext(c))&&a(E)&&f(E)&&I.push(E);for(E=K.startNode;(E=E.getParent())&&f(E);)I.push(E);v.moveToBookmark(K);if(K=D){K=n.range;if(\"text\"==n.type&&n.inlineStylesRoot){u=n.inlineStylesPeak;v=u.getDocument().createText(\"{cke-peak}\");for(I=\nn.inlineStylesRoot.getParent();!u.equals(I);)v=v.appendTo(u.clone()),u=u.getParent();D=v.getOuterHtml().split(\"{cke-peak}\").join(D)}u=n.blockLimit.getName();if(/^\\s+|\\s+$/.test(D)&&\"span\"in CKEDITOR.dtd[u]){var A='\\x3cspan data-cke-marker\\x3d\"1\"\\x3e\\x26nbsp;\\x3c/span\\x3e';D=A+D+A}D=n.editor.dataProcessor.toHtml(D,{context:null,fixForBody:!1,protectedWhitespaces:!!A,dontFilter:n.dontFilter,filter:n.editor.activeFilter,enterMode:n.editor.activeEnterMode});u=K.document.createElement(\"body\");u.setHtml(D);\nA&&(u.getFirst().remove(),u.getLast().remove());if((A=K.startPath().block)&&(1!=A.getChildCount()||!A.getBogus()))a:{var x;if(1==u.getChildCount()&&a(x=u.getFirst())&&x.is(w)&&!x.hasAttribute(\"contenteditable\")){A=x.getElementsByTag(\"*\");K=0;for(I=A.count();K<I;K++)if(v=A.getItem(K),!v.is(M))break a;x.moveChildren(x.getParent(1));x.remove()}}n.dataWrapper=u;K=D}if(K){x=n.range;K=x.document;var t;u=n.blockLimit;I=0;var B,A=[],N,T;D=E=0;var F,W;v=x.startContainer;var L=n.endPath.elements[0],X,J=L.getPosition(v),\ny=!!L.getCommonAncestor(v)&&J!=CKEDITOR.POSITION_IDENTICAL&&!(J&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);v=b(n.dataWrapper,n);for(G(v,x);I<v.length;I++){J=v[I];if(t=J.isLineBreak){t=x;F=u;var S=void 0,aa=void 0;J.hasBlockSibling?t=1:(S=t.startContainer.getAscendant(q.$block,1))&&S.is({div:1,p:1})?(aa=S.getPosition(F),aa==CKEDITOR.POSITION_IDENTICAL||aa==CKEDITOR.POSITION_CONTAINS?t=0:(F=t.splitElement(S),t.moveToPosition(F,CKEDITOR.POSITION_AFTER_START),t=1)):t=0}if(t)D=0<I;else{t=\nx.startPath();!J.isBlock&&l(n.editor,t.block,t.blockLimit)&&(T=k(n.editor))&&(T=K.createElement(T),T.appendBogus(),x.insertNode(T),CKEDITOR.env.needsBrFiller&&(B=T.getBogus())&&B.remove(),x.moveToPosition(T,CKEDITOR.POSITION_BEFORE_END));if((t=x.startPath().block)&&!t.equals(N)){if(B=t.getBogus())B.remove(),A.push(t);N=t}J.firstNotAllowed&&(E=1);if(E&&J.isElement){t=x.startContainer;for(F=null;t&&!q[t.getName()][J.name];){if(t.equals(u)){t=null;break}F=t;t=t.getParent()}if(t)F&&(W=x.splitElement(F),\nn.zombies.push(W),n.zombies.push(F));else{F=u.getName();X=!I;t=I==v.length-1;F=d(J.node,F);for(var S=[],aa=F.length,ca=0,ea=void 0,Y=0,U=-1;ca<aa;ca++)ea=F[ca],\" \"==ea?(Y||X&&!ca||(S.push(new CKEDITOR.dom.text(\" \")),U=S.length),Y=1):(S.push(ea),Y=0);t&&U==S.length&&S.pop();X=S}}if(X){for(;t=X.pop();)x.insertNode(t);X=0}else x.insertNode(J.node);J.lastNotAllowed&&I<v.length-1&&((W=y?L:W)&&x.setEndAt(W,CKEDITOR.POSITION_AFTER_START),E=0);x.collapse()}}1!=v.length?B=!1:(B=v[0],B=B.isElement&&\"false\"==\nB.node.getAttribute(\"contenteditable\"));B&&(D=!0,t=v[0].node,x.setStartAt(t,CKEDITOR.POSITION_BEFORE_START),x.setEndAt(t,CKEDITOR.POSITION_AFTER_END));n.dontMoveCaret=D;n.bogusNeededBlocks=A}B=n.range;var P;W=n.bogusNeededBlocks;for(X=B.createBookmark();N=n.zombies.pop();)N.getParent()&&(T=B.clone(),T.moveToElementEditStart(N),T.removeEmptyBlocksAtEnd());if(W)for(;N=W.pop();)CKEDITOR.env.needsBrFiller?N.appendBogus():N.append(B.document.createText(\" \"));for(;N=n.mergeCandidates.pop();)N.mergeSiblings();\nB.moveToBookmark(X);if(!n.dontMoveCaret){for(N=e(B);N&&a(N)&&!N.is(q.$empty);){if(N.isBlockBoundary())B.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END);else{if(f(N)&&N.getHtml().match(/(\\s|&nbsp;)$/g)){P=null;break}P=B.clone();P.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END)}N=N.getLast(c)}P&&B.moveToRange(P)}}}}(),y=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==\nCKEDITOR.NODE_ELEMENT};return b}function b(a,c,d){c=a.getDocument().createElement(c);a.append(c,d);return c}function c(a){var b=a.count(),d;for(b;0<b--;)d=a.getItem(b),CKEDITOR.tools.trim(d.getHtml())||(d.appendBogus(),CKEDITOR.env.ie&&9>CKEDITOR.env.version&&d.getChildCount()&&d.getFirst().remove())}return function(d){var e=d.startContainer,f=e.getAscendant(\"table\",1),g=!1;c(f.getElementsByTag(\"td\"));c(f.getElementsByTag(\"th\"));f=d.clone();f.setStart(e,0);f=a(f).lastBackward();f||(f=d.clone(),f.setEndAt(e,\nCKEDITOR.POSITION_BEFORE_END),f=a(f).lastForward(),g=!0);f||(f=e);f.is(\"table\")?(d.setStartAt(f,CKEDITOR.POSITION_BEFORE_START),d.collapse(!0),f.remove()):(f.is({tbody:1,thead:1,tfoot:1})&&(f=b(f,\"tr\",g)),f.is(\"tr\")&&(f=b(f,f.getParent().is(\"thead\")?\"th\":\"td\",g)),(e=f.getBogus())&&e.remove(),d.moveToPosition(f,g?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END))}}(),F={eol:{detect:function(a,b){var c=a.range,d=c.clone(),e=c.clone(),f=new CKEDITOR.dom.elementPath(c.startContainer,b),g=new CKEDITOR.dom.elementPath(c.endContainer,\nb);d.collapse(1);e.collapse();f.block&&d.checkBoundaryOfElement(f.block,CKEDITOR.END)&&(c.setStartAfter(f.block),a.prependEolBr=1);g.block&&e.checkBoundaryOfElement(g.block,CKEDITOR.START)&&(c.setEndBefore(g.block),a.appendEolBr=1)},fix:function(a,b){var c=b.getDocument(),d;a.appendEolBr&&(d=this.createEolBr(c),a.fragment.append(d));!a.prependEolBr||d&&!d.getPrevious()||a.fragment.append(this.createEolBr(c),1)},createEolBr:function(a){return a.createElement(\"br\",{attributes:{\"data-cke-eol\":1}})}},\nbogus:{exclude:function(a){var b=a.range.getBoundaryNodes(),c=b.startNode,b=b.endNode;!b||!u(b)||c&&c.equals(b)||a.range.setEndBefore(b)}},tree:{rebuild:function(a,b){var c=a.range,d=c.getCommonAncestor(),e=new CKEDITOR.dom.elementPath(d,b),f=new CKEDITOR.dom.elementPath(c.startContainer,b),c=new CKEDITOR.dom.elementPath(c.endContainer,b),g;d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());if(e.blockLimit.is({tr:1,table:1})){var l=e.contains(\"table\").getParent();g=function(a){return!a.equals(l)}}else if(e.block&&\ne.block.is(CKEDITOR.dtd.$listItem)&&(f=f.contains(CKEDITOR.dtd.$list),c=c.contains(CKEDITOR.dtd.$list),!f.equals(c))){var k=e.contains(CKEDITOR.dtd.$list).getParent();g=function(a){return!a.equals(k)}}g||(g=function(a){return!a.equals(e.block)&&!a.equals(e.blockLimit)});this.rebuildFragment(a,b,d,g)},rebuildFragment:function(a,b,c,d){for(var e;c&&!c.equals(b)&&d(c);)e=c.clone(0,1),a.fragment.appendTo(e),a.fragment=e,c=c.getParent()}},cell:{shrink:function(a){a=a.range;var b=a.startContainer,c=a.endContainer,\nd=a.startOffset,e=a.endOffset;b.type==CKEDITOR.NODE_ELEMENT&&b.equals(c)&&b.is(\"tr\")&&++d==e&&a.shrink(CKEDITOR.SHRINK_TEXT)}}},t=function(){function a(b,c){var d=b.getParent();if(d.is(CKEDITOR.dtd.$inline))b[c?\"insertBefore\":\"insertAfter\"](d)}function b(c,d,e){a(d);a(e,1);for(var h;h=e.getNext();)h.insertAfter(d),d=h;A(c)&&c.remove()}function c(a,b){var d=new CKEDITOR.dom.range(a);d.setStartAfter(b.startNode);d.setEndBefore(b.endNode);return d}return{list:{detectMerge:function(a,b){var d=c(b,a.bookmark),\ne=d.startPath(),h=d.endPath(),f=e.contains(CKEDITOR.dtd.$list),g=h.contains(CKEDITOR.dtd.$list);a.mergeList=f&&g&&f.getParent().equals(g.getParent())&&!f.equals(g);a.mergeListItems=e.block&&h.block&&e.block.is(CKEDITOR.dtd.$listItem)&&h.block.is(CKEDITOR.dtd.$listItem);if(a.mergeList||a.mergeListItems)d=d.clone(),d.setStartBefore(a.bookmark.startNode),d.setEndAfter(a.bookmark.endNode),a.mergeListBookmark=d.createBookmark()},merge:function(a,c){if(a.mergeListBookmark){var d=a.mergeListBookmark.startNode,\ne=a.mergeListBookmark.endNode,f=new CKEDITOR.dom.elementPath(d,c),g=new CKEDITOR.dom.elementPath(e,c);if(a.mergeList){var p=f.contains(CKEDITOR.dtd.$list),l=g.contains(CKEDITOR.dtd.$list);p.equals(l)||(l.moveChildren(p),l.remove())}a.mergeListItems&&(f=f.contains(CKEDITOR.dtd.$listItem),g=g.contains(CKEDITOR.dtd.$listItem),f.equals(g)||b(g,d,e));d.remove();e.remove()}}},block:{detectMerge:function(a,b){if(!a.tableContentsRanges&&!a.mergeListBookmark){var c=new CKEDITOR.dom.range(b);c.setStartBefore(a.bookmark.startNode);\nc.setEndAfter(a.bookmark.endNode);a.mergeBlockBookmark=c.createBookmark()}},merge:function(a,c){if(a.mergeBlockBookmark&&!a.purgeTableBookmark){var d=a.mergeBlockBookmark.startNode,e=a.mergeBlockBookmark.endNode,f=new CKEDITOR.dom.elementPath(d,c),g=new CKEDITOR.dom.elementPath(e,c),f=f.block,g=g.block;f&&g&&!f.equals(g)&&b(g,d,e);d.remove();e.remove()}}},table:function(){function a(c){var e=[],h,f=new CKEDITOR.dom.walker(c),g=c.startPath().contains(d),m=c.endPath().contains(d),p={};f.guard=function(a,\nf){if(a.type==CKEDITOR.NODE_ELEMENT){var l=\"visited_\"+(f?\"out\":\"in\");if(a.getCustomData(l))return;CKEDITOR.dom.element.setMarker(p,a,l,1)}if(f&&g&&a.equals(g))h=c.clone(),h.setEndAt(g,CKEDITOR.POSITION_BEFORE_END),e.push(h);else if(!f&&m&&a.equals(m))h=c.clone(),h.setStartAt(m,CKEDITOR.POSITION_AFTER_START),e.push(h);else{if(l=!f)l=a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&(!g||b(a,g))&&(!m||b(a,m));l&&(h=c.clone(),h.selectNodeContents(a),e.push(h))}};f.lastForward();CKEDITOR.dom.element.clearAllMarkers(p);\nreturn e}function b(a,c){var d=CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED,e=a.getPosition(c);return e===CKEDITOR.POSITION_IDENTICAL?!1:0===(e&d)}var d={td:1,th:1,caption:1};return{detectPurge:function(a){var b=a.range,c=b.clone();c.enlarge(CKEDITOR.ENLARGE_ELEMENT);var c=new CKEDITOR.dom.walker(c),e=0;c.evaluator=function(a){a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&++e};c.checkForward();if(1<e){var c=b.startPath().contains(\"table\"),h=b.endPath().contains(\"table\");c&&h&&b.checkBoundaryOfElement(c,\nCKEDITOR.START)&&b.checkBoundaryOfElement(h,CKEDITOR.END)&&(b=a.range.clone(),b.setStartBefore(c),b.setEndAfter(h),a.purgeTableBookmark=b.createBookmark())}},detectRanges:function(e,h){var f=c(h,e.bookmark),g=f.clone(),l,k,v=f.getCommonAncestor();v.is(CKEDITOR.dtd.$tableContent)&&!v.is(d)&&(v=v.getAscendant(\"table\",!0));k=v;v=new CKEDITOR.dom.elementPath(f.startContainer,k);k=new CKEDITOR.dom.elementPath(f.endContainer,k);v=v.contains(\"table\");k=k.contains(\"table\");if(v||k)v&&k&&b(v,k)?(e.tableSurroundingRange=\ng,g.setStartAt(v,CKEDITOR.POSITION_AFTER_END),g.setEndAt(k,CKEDITOR.POSITION_BEFORE_START),g=f.clone(),g.setEndAt(v,CKEDITOR.POSITION_AFTER_END),l=f.clone(),l.setStartAt(k,CKEDITOR.POSITION_BEFORE_START),l=a(g).concat(a(l))):v?k||(e.tableSurroundingRange=g,g.setStartAt(v,CKEDITOR.POSITION_AFTER_END),f.setEndAt(v,CKEDITOR.POSITION_AFTER_END)):(e.tableSurroundingRange=g,g.setEndAt(k,CKEDITOR.POSITION_BEFORE_START),f.setStartAt(k,CKEDITOR.POSITION_AFTER_START)),e.tableContentsRanges=l?l:a(f)},deleteRanges:function(a){for(var b;b=\na.tableContentsRanges.pop();)b.extractContents(),A(b.startContainer)&&b.startContainer.appendBogus();a.tableSurroundingRange&&a.tableSurroundingRange.extractContents()},purge:function(a){if(a.purgeTableBookmark){var b=a.doc,c=a.range.clone(),b=b.createElement(\"p\");b.insertBefore(a.purgeTableBookmark.startNode);c.moveToBookmark(a.purgeTableBookmark);c.deleteContents();a.range.moveToPosition(b,CKEDITOR.POSITION_AFTER_START)}}}}(),detectExtractMerge:function(a){return!(a.range.startPath().contains(CKEDITOR.dtd.$listItem)&&\na.range.endPath().contains(CKEDITOR.dtd.$listItem))},fixUneditableRangePosition:function(a){a.startContainer.getDtd()[\"#\"]||a.moveToClosestEditablePosition(null,!0)},autoParagraph:function(a,b){var c=b.startPath(),d;l(a,c.block,c.blockLimit)&&(d=k(a))&&(d=b.document.createElement(d),d.appendBogus(),b.insertNode(d),b.moveToPosition(d,CKEDITOR.POSITION_AFTER_START))}}}()})();\n(function(){function a(){var a=this._.fakeSelection,b;a&&(b=this.getSelection(1),b&&b.isHidden()||(a.reset(),a=0));if(!a&&(a=b||this.getSelection(1),!a||a.getType()==CKEDITOR.SELECTION_NONE))return;this.fire(\"selectionCheck\",a);b=this.elementPath();b.compare(this._.selectionPreviousPath)||(CKEDITOR.env.webkit&&(this._.previousActive=this.document.getActive()),this._.selectionPreviousPath=b,this.fire(\"selectionChange\",{selection:a,path:b}))}function d(){A=!0;x||(b.call(this),x=CKEDITOR.tools.setTimeout(b,\n200,this))}function b(){x=null;A&&(CKEDITOR.tools.setTimeout(a,0,this),A=!1)}function c(a){return u(a)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(CKEDITOR.dtd.$empty)?!0:!1}function e(a){function b(c,d){return c&&c.type!=CKEDITOR.NODE_TEXT?a.clone()[\"moveToElementEdit\"+(d?\"End\":\"Start\")](c):!1}if(!(a.root instanceof CKEDITOR.editable))return!1;var d=a.startContainer,e=a.getPreviousNode(c,null,d),f=a.getNextNode(c,null,d);return b(e)||b(f,1)||!(e||f||d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()&&\nd.getBogus())?!0:!1}function g(a){l(a,!1);var b=a.getDocument().createText(t);a.setCustomData(\"cke-fillingChar\",b);return b}function l(a,b){var c=a&&a.removeCustomData(\"cke-fillingChar\");if(c){if(!1!==b){var d=a.getDocument().getSelection().getNative(),e=d&&\"None\"!=d.type&&d.getRangeAt(0),f=t.length;if(c.getLength()>f&&e&&e.intersectsNode(c.$)){var g=[{node:d.anchorNode,offset:d.anchorOffset},{node:d.focusNode,offset:d.focusOffset}];d.anchorNode==c.$&&d.anchorOffset>f&&(g[0].offset-=f);d.focusNode==\nc.$&&d.focusOffset>f&&(g[1].offset-=f)}}c.setText(k(c.getText(),1));g&&(c=a.getDocument().$,d=c.getSelection(),c=c.createRange(),c.setStart(g[0].node,g[0].offset),c.collapse(!0),d.removeAllRanges(),d.addRange(c),d.extend(g[1].node,g[1].offset))}}function k(a,b){return b?a.replace(z,function(a,b){return b?\" \":\"\"}):a.replace(t,\"\")}function n(a){var b=CKEDITOR.dom.element.createFromHtml('\\x3cdiv data-cke-hidden-sel\\x3d\"1\" data-cke-temp\\x3d\"1\" style\\x3d\"'+(CKEDITOR.env.ie?\"display:none\":\"position:fixed;top:0;left:-1000px\")+\n'\"\\x3e\\x26nbsp;\\x3c/div\\x3e',a.document);a.fire(\"lockSnapshot\");a.editable().append(b);var c=a.getSelection(1),d=a.createRange(),e=c.root.on(\"selectionchange\",function(a){a.cancel()},null,null,0);d.setStartAt(b,CKEDITOR.POSITION_AFTER_START);d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);c.selectRanges([d]);e.removeListener();a.fire(\"unlockSnapshot\");a._.hiddenSelectionContainer=b}function w(a){var b={37:1,39:1,8:1,46:1};return function(c){var d=c.data.getKeystroke();if(b[d]){var e=a.getSelection().getRanges(),\nf=e[0];1==e.length&&f.collapsed&&(d=f[38>d?\"getPreviousEditableNode\":\"getNextEditableNode\"]())&&d.type==CKEDITOR.NODE_ELEMENT&&\"false\"==d.getAttribute(\"contenteditable\")&&(a.getSelection().fake(d),c.data.preventDefault(),c.cancel())}}}function f(a){for(var b=0;b<a.length;b++){var c=a[b];c.getCommonAncestor().isReadOnly()&&a.splice(b,1);if(!c.collapsed){if(c.startContainer.isReadOnly())for(var d=c.startContainer,e;d&&!((e=d.type==CKEDITOR.NODE_ELEMENT)&&d.is(\"body\")||!d.isReadOnly());)e&&\"false\"==\nd.getAttribute(\"contentEditable\")&&c.setStartAfter(d),d=d.getParent();d=c.startContainer;e=c.endContainer;var f=c.startOffset,g=c.endOffset,l=c.clone();d&&d.type==CKEDITOR.NODE_TEXT&&(f>=d.getLength()?l.setStartAfter(d):l.setStartBefore(d));e&&e.type==CKEDITOR.NODE_TEXT&&(g?l.setEndAfter(e):l.setEndBefore(e));d=new CKEDITOR.dom.walker(l);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var e=c.clone();c.setEndBefore(d);c.collapsed&&a.splice(b--,1);d.getPosition(l.endContainer)&\nCKEDITOR.POSITION_CONTAINS||(e.setStartAfter(d),e.collapsed||a.splice(b+1,0,e));return!0}return!1};d.next()}}return a}var x,A,u=CKEDITOR.dom.walker.invisible(1),B=function(){function a(b){return function(a){var c=a.editor.createRange();c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);return!1}}function b(a){return function(b){var c=b.editor,d=c.createRange(),e;(e=d.moveToClosestEditablePosition(b.selected,a))||(e=d.moveToClosestEditablePosition(b.selected,!a));\ne&&c.getSelection().selectRanges([d]);c.fire(\"saveSnapshot\");b.selected.remove();e||(d.moveToElementEditablePosition(c.editable()),c.getSelection().selectRanges([d]));c.fire(\"saveSnapshot\");return!1}}var c=a(),d=a(1);return{37:c,38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on(\"instanceCreated\",function(b){function c(){var a=e.getSelection();a&&a.removeAllRanges()}var e=b.editor;e.on(\"contentDom\",function(){function b(){D=new CKEDITOR.dom.selection(e.getSelection());D.lock()}function c(){h.removeListener(\"mouseup\",\nc);k.removeListener(\"mouseup\",c);var a=CKEDITOR.document.$.selection,b=a.createRange();\"None\"!=a.type&&b.parentElement().ownerDocument==f.$&&b.select()}var f=e.document,h=CKEDITOR.document,g=e.editable(),p=f.getBody(),k=f.getDocumentElement(),n=g.isInline(),v,D;CKEDITOR.env.gecko&&g.attachListener(g,\"focus\",function(a){a.removeListener();0!==v&&(a=e.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==g.$&&(a=e.createRange(),a.moveToElementEditStart(g),a.select())},null,null,-2);g.attachListener(g,\nCKEDITOR.env.webkit?\"DOMFocusIn\":\"focus\",function(){v&&CKEDITOR.env.webkit&&(v=e._.previousActive&&e._.previousActive.equals(f.getActive()));e.unlockSelection(v);v=0},null,null,-1);g.attachListener(g,\"mousedown\",function(){v=0});if(CKEDITOR.env.ie||n)q?g.attachListener(g,\"beforedeactivate\",b,null,null,-1):g.attachListener(e,\"selectionCheck\",b,null,null,-1),g.attachListener(g,CKEDITOR.env.webkit?\"DOMFocusOut\":\"blur\",function(){e.lockSelection(D);v=1},null,null,-1),g.attachListener(g,\"mousedown\",function(){v=\n0});if(CKEDITOR.env.ie&&!n){var I;g.attachListener(g,\"mousedown\",function(a){2==a.data.$.button&&((a=e.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(I=e.window.getScrollPosition()))});g.attachListener(g,\"mouseup\",function(a){2==a.data.$.button&&I&&(e.document.$.documentElement.scrollLeft=I.x,e.document.$.documentElement.scrollTop=I.y);I=null});if(\"BackCompat\"!=f.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)k.on(\"mousedown\",function(a){function b(a){a=a.data.$;\nif(d){var c=p.$.createTextRange();try{c.moveToPoint(a.clientX,a.clientY)}catch(e){}d.setEndPoint(0>f.compareEndPoints(\"StartToStart\",c)?\"EndToEnd\":\"StartToStart\",c);d.select()}}function c(){k.removeListener(\"mousemove\",b);h.removeListener(\"mouseup\",c);k.removeListener(\"mouseup\",c);d.select()}a=a.data;if(a.getTarget().is(\"html\")&&a.$.y<k.$.clientHeight&&a.$.x<k.$.clientWidth){var d=p.$.createTextRange();try{d.moveToPoint(a.$.clientX,a.$.clientY)}catch(e){}var f=d.duplicate();k.on(\"mousemove\",b);h.on(\"mouseup\",\nc);k.on(\"mouseup\",c)}});if(7<CKEDITOR.env.version&&11>CKEDITOR.env.version)k.on(\"mousedown\",function(a){a.data.getTarget().is(\"html\")&&(h.on(\"mouseup\",c),k.on(\"mouseup\",c))})}}g.attachListener(g,\"selectionchange\",a,e);g.attachListener(g,\"keyup\",d,e);g.attachListener(g,CKEDITOR.env.webkit?\"DOMFocusIn\":\"focus\",function(){e.forceNextSelectionCheck();e.selectionChange(1)});if(n&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var E;g.attachListener(g,\"mousedown\",function(){E=1});g.attachListener(f.getDocumentElement(),\n\"mouseup\",function(){E&&d.call(e);E=0})}else g.attachListener(CKEDITOR.env.ie?g:f.getDocumentElement(),\"mouseup\",d,e);CKEDITOR.env.webkit&&g.attachListener(f,\"keydown\",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:l(g)}},null,null,-1);g.attachListener(g,\"keydown\",w(e),null,null,-1)});e.on(\"setData\",function(){e.unlockSelection();CKEDITOR.env.webkit&&c()});e.on(\"contentDomUnload\",function(){e.unlockSelection()});if(CKEDITOR.env.ie9Compat)e.on(\"beforeDestroy\",\nc,null,null,9);e.on(\"dataReady\",function(){delete e._.fakeSelection;delete e._.hiddenSelectionContainer;e.selectionChange(1)});e.on(\"loadSnapshot\",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),b=e.editable().getLast(a);b&&b.hasAttribute(\"data-cke-hidden-sel\")&&(b.remove(),CKEDITOR.env.gecko&&(a=e.editable().getFirst(a))&&a.is(\"br\")&&a.getAttribute(\"_moz_editor_bogus_node\")&&a.remove())},null,null,100);e.on(\"key\",function(a){if(\"wysiwyg\"==e.mode){var b=e.getSelection();if(b.isFake){var c=\nB[a.data.keyCode];if(c)return c({editor:e,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});if(CKEDITOR.env.webkit)CKEDITOR.on(\"instanceReady\",function(a){var b=a.editor;b.on(\"selectionChange\",function(){var a=b.editable(),c=a.getCustomData(\"cke-fillingChar\");c&&(c.getCustomData(\"ready\")?l(a):c.setCustomData(\"ready\",1))},null,null,-1);b.on(\"beforeSetMode\",function(){l(b.editable())},null,null,-1);b.on(\"getSnapshot\",function(a){a.data&&(a.data=k(a.data))},b,null,20);b.on(\"toDataFormat\",\nfunction(a){a.data.dataValue=k(a.data.dataValue)},null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(b){(b?a:d).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){return!this._.savedSelection&&!this._.fakeSelection||a?(a=this.editable())&&\"wysiwyg\"==this.mode?new CKEDITOR.dom.selection(a):null:this._.savedSelection||this._.fakeSelection};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);return a.getType()!=CKEDITOR.SELECTION_NONE?(!a.isLocked&&\na.lock(),this._.savedSelection=a,!0):!1};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;return b?(b.unlock(a),delete this._.savedSelection,!0):!1};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():\nnew CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var q=\"function\"!=typeof window.getSelection,y=1;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection){var b=a;a=a.root}var c=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:y++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b)return CKEDITOR.tools.extend(this._.cache,\nb._.cache),this.isFake=b.isFake,this.isLocked=b.isLocked,this;a=this.getNative();var d,e;if(a)if(a.getRangeAt)d=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(f){}d=e&&CKEDITOR.dom.element.get(e.item&&e.item(0)||e.parentElement())}if(!d||d.type!=CKEDITOR.NODE_ELEMENT&&d.type!=CKEDITOR.NODE_TEXT||!this.root.equals(d)&&!this.root.contains(d))this._.cache.type=CKEDITOR.SELECTION_NONE,this._.cache.startElement=null,this._.cache.selectedElement=\nnull,this._.cache.selectedText=\"\",this._.cache.ranges=new CKEDITOR.dom.rangeList;return this};var F={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1},t=CKEDITOR.tools.repeat(\"​\",7),z=new RegExp(t+\"( )?\",\"g\");CKEDITOR.tools.extend(CKEDITOR.dom.selection,{_removeFillingCharSequenceString:k,_createFillingCharSequenceNode:g,FILLING_CHAR_SEQUENCE:t});CKEDITOR.dom.selection.prototype={getNative:function(){return void 0!==\nthis._.cache.nativeSel?this._.cache.nativeSel:this._.cache.nativeSel=q?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:q?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;\"Text\"==d&&(b=CKEDITOR.SELECTION_TEXT);\"Control\"==d&&(b=CKEDITOR.SELECTION_ELEMENT);c.createRange().parentElement()&&(b=CKEDITOR.SELECTION_TEXT)}catch(e){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=\nCKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(1==c.rangeCount){var c=c.getRangeAt(0),d=c.startContainer;d==c.endContainer&&1==d.nodeType&&1==c.endOffset-c.startOffset&&F[d.childNodes[c.startOffset].nodeName.toLowerCase()]&&(b=CKEDITOR.SELECTION_ELEMENT)}return a.type=b},getRanges:function(){var a=q?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c);var d=b.parentElement();if(!d.hasChildNodes())return{container:d,\noffset:0};for(var e=d.children,f,g,h=b.duplicate(),l=0,v=e.length-1,k=-1,m,E;l<=v;)if(k=Math.floor((l+v)/2),f=e[k],h.moveToElementText(f),m=h.compareEndPoints(\"StartToStart\",b),0<m)v=k-1;else if(0>m)l=k+1;else return{container:d,offset:a(f)};if(-1==k||k==e.length-1&&0>m){h.moveToElementText(d);h.setEndPoint(\"StartToStart\",b);h=h.text.replace(/(\\r\\n|\\r)/g,\"\\n\").length;e=d.childNodes;if(!h)return f=e[e.length-1],f.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:e.length}:{container:f,offset:f.nodeValue.length};\nfor(d=e.length;0<h&&0<d;)g=e[--d],g.nodeType==CKEDITOR.NODE_TEXT&&(E=g,h-=g.nodeValue.length);return{container:E,offset:-h}}h.collapse(0<m?!0:!1);h.setEndPoint(0<m?\"StartToStart\":\"EndToStart\",b);h=h.text.replace(/(\\r\\n|\\r)/g,\"\\n\").length;if(!h)return{container:d,offset:a(f)+(0<m?0:1)};for(;0<h;)try{g=f[0<m?\"previousSibling\":\"nextSibling\"],g.nodeType==CKEDITOR.NODE_TEXT&&(h-=g.nodeValue.length,E=g),f=g}catch(n){return{container:d,offset:a(f)}}return{container:E,offset:0<m?-h:E.nodeValue.length+h}};\nreturn function(){var a=this.getNative(),c=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT)return a=new CKEDITOR.dom.range(this.root),d=b(c,!0),a.setStart(new CKEDITOR.dom.node(d.container),d.offset),d=b(c),a.setEnd(new CKEDITOR.dom.node(d.container),d.offset),a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse(),[a];if(d==CKEDITOR.SELECTION_ELEMENT){for(var d=[],e=0;e<c.length;e++){for(var f=\nc.item(e),h=f.parentNode,g=0,a=new CKEDITOR.dom.range(this.root);g<h.childNodes.length&&h.childNodes[g]!=f;g++);a.setStart(new CKEDITOR.dom.node(h),g);a.setEnd(new CKEDITOR.dom.node(h),g+1);d.push(a)}return d}return[]}}():function(){var a=[],b,c=this.getNative();if(!c)return a;for(var d=0;d<c.rangeCount;d++){var e=c.getRangeAt(d);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(e.startContainer),e.startOffset);b.setEnd(new CKEDITOR.dom.node(e.endContainer),e.endOffset);a.push(b)}return a};\nreturn function(b){var c=this._.cache,d=c.ranges;d||(c.ranges=d=new CKEDITOR.dom.rangeList(a.call(this)));return b?f(new CKEDITOR.dom.rangeList(d.slice())):d}}(),getStartElement:function(){var a=this._.cache;if(void 0!==a.startElement)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];if(c){if(c.collapsed)b=c.startContainer,b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());else{for(c.optimize();b=\nc.startContainer,c.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary();)c.setStartAfter(b);b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent();if((b=b.getChild(c.startOffset))&&b.type==CKEDITOR.NODE_ELEMENT)for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;)b=c,c=c.getFirst();else b=c.startContainer}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b):null},getSelectedElement:function(){var a=this._.cache;if(void 0!==a.selectedElement)return a.selectedElement;\nvar b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0].clone(),c,d,e=2;e&&!((c=a.getEnclosedNode())&&c.type==CKEDITOR.NODE_ELEMENT&&F[c.getName()]&&(d=c));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d&&d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=this._.cache;if(void 0!==a.selectedText)return a.selectedText;var b=this.getNative(),b=q?\"Control\"==b.type?\"\":b.createRange().text:\nb.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges(),d=this.isFake;this.isLocked=0;this.reset();a&&(a=b||c[0]&&c[0].getCommonAncestor())&&a.getAscendant(\"body\",1)&&(d?this.fake(b):b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={};this.isFake=\n0;var a=this.root.editor;if(a&&a._.fakeSelection)if(this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;var b=a._.hiddenSelectionContainer;if(b){var c=a.checkDirty();a.fire(\"lockSnapshot\");b.remove();a.fire(\"unlockSnapshot\");!c&&a.resetDirty()}delete a._.hiddenSelectionContainer}else CKEDITOR.warn(\"selection-fake-reset\");this.rev=y++},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(a){var b=\nthis.root.editor,b=b&&b._.hiddenSelectionContainer;this.reset();if(b)for(var b=this.root,c,d=0;d<a.length;++d)c=a[d],c.endContainer.equals(b)&&(c.endOffset=Math.min(c.endOffset,b.getChildCount()));if(a.length)if(this.isLocked){var f=CKEDITOR.document.getActive();this.unlock();this.selectRanges(a);this.lock();f&&!f.equals(this.root)&&f.focus()}else{var k;a:{var n,w;if(1==a.length&&!(w=a[0]).collapsed&&(k=w.getEnclosedNode())&&k.type==CKEDITOR.NODE_ELEMENT&&(w=w.clone(),w.shrink(CKEDITOR.SHRINK_ELEMENT,\n!0),(n=w.getEnclosedNode())&&n.type==CKEDITOR.NODE_ELEMENT&&(k=n),\"false\"==k.getAttribute(\"contenteditable\")))break a;k=void 0}if(k)this.fake(k);else{if(q){w=CKEDITOR.dom.walker.whitespaces(!0);n=/\\ufeff|\\u00a0/;b={table:1,tbody:1,tr:1};1<a.length&&(k=a[a.length-1],a[0].setEnd(k.endContainer,k.endOffset));k=a[0];a=k.collapsed;var u,t,x;if((c=k.getEnclosedNode())&&c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in F&&(!c.is(\"a\")||!c.getText()))try{x=c.$.createControlRange();x.addElement(c.$);x.select();\nreturn}catch(v){}if(k.startContainer.type==CKEDITOR.NODE_ELEMENT&&k.startContainer.getName()in b||k.endContainer.type==CKEDITOR.NODE_ELEMENT&&k.endContainer.getName()in b)k.shrink(CKEDITOR.NODE_ELEMENT,!0),a=k.collapsed;x=k.createBookmark();b=x.startNode;a||(f=x.endNode);x=k.document.$.body.createTextRange();x.moveToElementText(b.$);x.moveStart(\"character\",1);f?(n=k.document.$.body.createTextRange(),n.moveToElementText(f.$),x.setEndPoint(\"EndToEnd\",n),x.moveEnd(\"character\",-1)):(u=b.getNext(w),t=\nb.hasAscendant(\"pre\"),u=!(u&&u.getText&&u.getText().match(n))&&(t||!b.hasPrevious()||b.getPrevious().is&&b.getPrevious().is(\"br\")),t=k.document.createElement(\"span\"),t.setHtml(\"\\x26#65279;\"),t.insertBefore(b),u&&k.document.createText(\"﻿\").insertBefore(b));k.setStartBefore(b);b.remove();a?(u?(x.moveStart(\"character\",-1),x.select(),k.document.$.selection.clear()):x.select(),k.moveToPosition(t,CKEDITOR.POSITION_BEFORE_START),t.remove()):(k.setEndBefore(f),f.remove(),x.select())}else{f=this.getNative();\nif(!f)return;this.removeAllRanges();for(x=0;x<a.length;x++){if(x<a.length-1&&(u=a[x],t=a[x+1],n=u.clone(),n.setStart(u.endContainer,u.endOffset),n.setEnd(t.startContainer,t.startOffset),!n.collapsed&&(n.shrink(CKEDITOR.NODE_ELEMENT,!0),k=n.getCommonAncestor(),n=n.getEnclosedNode(),k.isReadOnly()||n&&n.isReadOnly()))){t.setStart(u.startContainer,u.startOffset);a.splice(x--,1);continue}k=a[x];t=this.document.$.createRange();k.collapsed&&CKEDITOR.env.webkit&&e(k)&&(n=g(this.root),k.insertNode(n),(u=\nn.getNext())&&!n.getPrevious()&&u.type==CKEDITOR.NODE_ELEMENT&&\"br\"==u.getName()?(l(this.root),k.moveToPosition(u,CKEDITOR.POSITION_BEFORE_START)):k.moveToPosition(n,CKEDITOR.POSITION_AFTER_END));t.setStart(k.startContainer.$,k.startOffset);try{t.setEnd(k.endContainer.$,k.endOffset)}catch(D){if(0<=D.toString().indexOf(\"NS_ERROR_ILLEGAL_VALUE\"))k.collapse(1),t.setEnd(k.endContainer.$,k.endOffset);else throw D;}f.addRange(t)}}this.reset();this.root.fire(\"selectionchange\")}}},fake:function(a){var b=\nthis.root.editor;this.reset();n(b);var c=this._.cache,d=new CKEDITOR.dom.range(this.root);d.setStartBefore(a);d.setEndAfter(a);c.ranges=new CKEDITOR.dom.rangeList(d);c.selectedElement=c.startElement=a;c.type=CKEDITOR.SELECTION_ELEMENT;c.selectedText=c.nativeSel=null;this.isFake=1;this.rev=y++;b._.fakeSelection=this;this.root.fire(\"selectionchange\")},isHidden:function(){var a=this.getCommonAncestor();a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data(\"cke-hidden-sel\"))},createBookmarks:function(a){a=\nthis.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var b=[],c,d=0;d<a.length;d++){var e=new CKEDITOR.dom.range(this.root);e.moveToBookmark(a[d]);b.push(e)}a.isFake&&(c=b[0].getEnclosedNode(),c&&c.type==CKEDITOR.NODE_ELEMENT||(CKEDITOR.warn(\"selection-not-fake\"),a.isFake=0));a.isFake?this.fake(c):this.selectRanges(b);return this},getCommonAncestor:function(){var a=\nthis.getRanges();return a.length?a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer):null},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative();try{a&&a[q?\"empty\":\"removeAllRanges\"]()}catch(b){}this.reset()}}}})();\"use strict\";CKEDITOR.STYLE_BLOCK=1;CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3;\n(function(){function a(a,b){for(var c,d;(a=a.getParent())&&!a.equals(b);)if(a.getAttribute(\"data-nostyle\"))c=a;else if(!d){var e=a.getAttribute(\"contentEditable\");\"false\"==e?c=a:\"true\"==e&&(d=1)}return c}function d(a,b,c,d){return(a.getPosition(b)|d)==d&&(!c.childRule||c.childRule(a))}function b(c){var f=c.document;if(c.collapsed)f=F(this,f),c.insertNode(f),c.moveToPosition(f,CKEDITOR.POSITION_BEFORE_END);else{var g=this.element,h=this._.definition,l,k=h.ignoreReadonly,m=k||h.includeReadonly;null==\nm&&(m=c.root.getCustomData(\"cke_includeReadonly\"));var n=CKEDITOR.dtd[g];n||(l=!0,n=CKEDITOR.dtd.span);c.enlarge(CKEDITOR.ENLARGE_INLINE,1);c.trim();var p=c.createBookmark(),q=p.startNode,w=p.endNode,r=q,u;if(!k){var x=c.getCommonAncestor(),k=a(q,x),x=a(w,x);k&&(r=k.getNextSourceNode(!0));x&&(w=x)}for(r.getPosition(w)==CKEDITOR.POSITION_FOLLOWING&&(r=0);r;){k=!1;if(r.equals(w))r=null,k=!0;else{var t=r.type==CKEDITOR.NODE_ELEMENT?r.getName():null,x=t&&\"false\"==r.getAttribute(\"contentEditable\"),y=t&&\nr.getAttribute(\"data-nostyle\");if(t&&r.data(\"cke-bookmark\")){r=r.getNextSourceNode(!0);continue}if(x&&m&&CKEDITOR.dtd.$block[t])for(var A=r,z=e(A),C=void 0,G=z.length,H=0,A=G&&new CKEDITOR.dom.range(A.getDocument());H<G;++H){var C=z[H],R=CKEDITOR.filter.instances[C.data(\"cke-filter\")];if(R?R.check(this):1)A.selectNodeContents(C),b.call(this,A)}z=t?!n[t]||y?0:x&&!m?0:d(r,w,h,M):1;if(z)if(C=r.getParent(),z=h,G=g,H=l,!C||!(C.getDtd()||CKEDITOR.dtd.span)[G]&&!H||z.parentRule&&!z.parentRule(C))k=!0;else{if(u||\nt&&CKEDITOR.dtd.$removeEmpty[t]&&(r.getPosition(w)|M)!=M||(u=c.clone(),u.setStartBefore(r)),t=r.type,t==CKEDITOR.NODE_TEXT||x||t==CKEDITOR.NODE_ELEMENT&&!r.getChildCount()){for(var t=r,Y;(k=!t.getNext(K))&&(Y=t.getParent(),n[Y.getName()])&&d(Y,q,h,Q);)t=Y;u.setEndAfter(t)}}else k=!0;r=r.getNextSourceNode(y||x)}if(k&&u&&!u.collapsed){for(var k=F(this,f),x=k.hasAttributes(),y=u.getCommonAncestor(),t={},z={},C={},G={},U,P,da;k&&y;){if(y.getName()==g){for(U in h.attributes)!G[U]&&(da=y.getAttribute(P))&&\n(k.getAttribute(U)==da?z[U]=1:G[U]=1);for(P in h.styles)!C[P]&&(da=y.getStyle(P))&&(k.getStyle(P)==da?t[P]=1:C[P]=1)}y=y.getParent()}for(U in z)k.removeAttribute(U);for(P in t)k.removeStyle(P);x&&!k.hasAttributes()&&(k=null);k?(u.extractContents().appendTo(k),u.insertNode(k),B.call(this,k),k.mergeSiblings(),CKEDITOR.env.ie||k.$.normalize()):(k=new CKEDITOR.dom.element(\"span\"),u.extractContents().appendTo(k),u.insertNode(k),B.call(this,k),k.remove(!0));u=null}}c.moveToBookmark(p);c.shrink(CKEDITOR.SHRINK_TEXT);\nc.shrink(CKEDITOR.NODE_ELEMENT,!0)}}function c(a){function b(){for(var a=new CKEDITOR.dom.elementPath(d.getParent()),c=new CKEDITOR.dom.elementPath(m.getParent()),e=null,f=null,g=0;g<a.elements.length;g++){var h=a.elements[g];if(h==a.block||h==a.blockLimit)break;n.checkElementRemovable(h,!0)&&(e=h)}for(g=0;g<c.elements.length;g++){h=c.elements[g];if(h==c.block||h==c.blockLimit)break;n.checkElementRemovable(h,!0)&&(f=h)}f&&m.breakParent(f);e&&d.breakParent(e)}a.enlarge(CKEDITOR.ENLARGE_INLINE,1);var c=\na.createBookmark(),d=c.startNode;if(a.collapsed){for(var e=new CKEDITOR.dom.elementPath(d.getParent(),a.root),f,g=0,k;g<e.elements.length&&(k=e.elements[g])&&k!=e.block&&k!=e.blockLimit;g++)if(this.checkElementRemovable(k)){var l;a.collapsed&&(a.checkBoundaryOfElement(k,CKEDITOR.END)||(l=a.checkBoundaryOfElement(k,CKEDITOR.START)))?(f=k,f.match=l?\"start\":\"end\"):(k.mergeSiblings(),k.is(this.element)?u.call(this,k):q(k,h(this)[k.getName()]))}if(f){k=d;for(g=0;;g++){l=e.elements[g];if(l.equals(f))break;\nelse if(l.match)continue;else l=l.clone();l.append(k);k=l}k[\"start\"==f.match?\"insertBefore\":\"insertAfter\"](f)}}else{var m=c.endNode,n=this;b();for(e=d;!e.equals(m);)f=e.getNextSourceNode(),e.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(e)&&(e.getName()==this.element?u.call(this,e):q(e,h(this)[e.getName()]),f.type==CKEDITOR.NODE_ELEMENT&&f.contains(d)&&(b(),f=d.getNext())),e=f}a.moveToBookmark(c);a.shrink(CKEDITOR.NODE_ELEMENT,!0)}function e(a){var b=[];a.forEach(function(a){if(\"true\"==\na.getAttribute(\"contenteditable\"))return b.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return b}function g(a){var b=a.getEnclosedNode()||a.getCommonAncestor(!1,!0);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&t(a,this)}function l(a){var b=a.getCommonAncestor(!0,!0);if(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1)){var b=this._.definition,c=b.attributes;if(c)for(var d in c)a.removeAttribute(d,c[d]);if(b.styles)for(var e in b.styles)b.styles.hasOwnProperty(e)&&\na.removeStyle(e)}}function k(a){var b=a.createBookmark(!0),c=a.createIterator();c.enforceRealBlocks=!0;this._.enterMode&&(c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR);for(var d,e=a.document,f;d=c.getNextParagraph();)!d.isReadOnly()&&(c.activeFilter?c.activeFilter.check(this):1)&&(f=F(this,e,d),w(d,f));a.moveToBookmark(b)}function n(a){var b=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=!0;c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e;d=c.getNextParagraph();)this.checkElementRemovable(d)&&\n(d.is(\"pre\")?((e=this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?\"p\":\"div\"))&&d.copyAttributes(e),w(d,e)):u.call(this,d));a.moveToBookmark(b)}function w(a,b){var c=!b;c&&(b=a.getDocument().createElement(\"div\"),a.copyAttributes(b));var d=b&&b.is(\"pre\"),e=a.is(\"pre\"),g=!d&&e;if(d&&!e){e=b;(g=a.getBogus())&&g.remove();g=a.getHtml();g=x(g,/(?:^[ \\t\\n\\r]+)|(?:[ \\t\\n\\r]+$)/g,\"\");g=g.replace(/[ \\t\\r\\n]*(<br[^>]*>)[ \\t\\r\\n]*/gi,\"$1\");g=g.replace(/([ \\t\\n\\r]+|&nbsp;)/g,\n\" \");g=g.replace(/<br\\b[^>]*>/gi,\"\\n\");if(CKEDITOR.env.ie){var h=a.getDocument().createElement(\"div\");h.append(e);e.$.outerHTML=\"\\x3cpre\\x3e\"+g+\"\\x3c/pre\\x3e\";e.copyAttributes(h.getFirst());e=h.getFirst().remove()}else e.setHtml(g);b=e}else g?b=A(c?[a.getHtml()]:f(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,k;(k=c.getPrevious(R))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is(\"pre\")&&(d=x(k.getHtml(),/\\n$/,\"\")+\"\\n\\n\"+x(c.getHtml(),/^\\n/,\"\"),CKEDITOR.env.ie?c.$.outerHTML=\"\\x3cpre\\x3e\"+d+\"\\x3c/pre\\x3e\":\nc.setHtml(d),k.remove())}else c&&y(b)}function f(a){var b=[];x(a.getOuterHtml(),/(\\S\\s*)\\n(?:\\s|(<span[^>]+data-cke-bookmark.*?\\/span>))*\\n(?!$)/gi,function(a,b,c){return b+\"\\x3c/pre\\x3e\"+c+\"\\x3cpre\\x3e\"}).replace(/<pre\\b.*?>([\\s\\S]*?)<\\/pre>/gi,function(a,c){b.push(c)});return b}function x(a,b,c){var d=\"\",e=\"\";a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\\/span>)|(<span[^>]+data-cke-bookmark.*?\\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return\"\"});return d+a.replace(b,c)+e}function A(a,b){var c;\n1<a.length&&(c=new CKEDITOR.dom.documentFragment(b.getDocument()));for(var d=0;d<a.length;d++){var e=a[d],e=e.replace(/(\\r\\n|\\r)/g,\"\\n\"),e=x(e,/^[ \\t]*\\n/,\"\"),e=x(e,/\\n$/,\"\"),e=x(e,/^[ \\t]+|[ \\t]+$/g,function(a,b){return 1==a.length?\"\\x26nbsp;\":b?\" \"+CKEDITOR.tools.repeat(\"\\x26nbsp;\",a.length-1):CKEDITOR.tools.repeat(\"\\x26nbsp;\",a.length-1)+\" \"}),e=e.replace(/\\n/g,\"\\x3cbr\\x3e\"),e=e.replace(/[ \\t]{2,}/g,function(a){return CKEDITOR.tools.repeat(\"\\x26nbsp;\",a.length-1)+\" \"});if(c){var f=b.clone();f.setHtml(e);\nc.append(f)}else b.setHtml(e)}return c||b}function u(a,b){var c=this._.definition,d=c.attributes,c=c.styles,e=h(this)[a.getName()],f=CKEDITOR.tools.isEmpty(d)&&CKEDITOR.tools.isEmpty(c),g;for(g in d)if(\"class\"!=g&&!this._.definition.fullMatch||a.getAttribute(g)==p(g,d[g]))b&&\"data-\"==g.slice(0,5)||(f=a.hasAttribute(g),a.removeAttribute(g));for(var k in c)this._.definition.fullMatch&&a.getStyle(k)!=p(k,c[k],!0)||(f=f||!!a.getStyle(k),a.removeStyle(k));q(a,e,C[a.getName()]);f&&(this._.definition.alwaysRemoveElement?\ny(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==CKEDITOR.ENTER_BR&&!a.hasAttributes()?y(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?\"p\":\"div\"))}function B(a){for(var b=h(this),c=a.getElementsByTag(this.element),d,e=c.count();0<=--e;)d=c.getItem(e),d.isReadOnly()||u.call(this,d,!0);for(var f in b)if(f!=this.element)for(c=a.getElementsByTag(f),e=c.count()-1;0<=e;e--)d=c.getItem(e),d.isReadOnly()||q(d,b[f])}function q(a,b,c){if(b=b&&b.attributes)for(var d=0;d<b.length;d++){var e=b[d][0],\nf;if(f=a.getAttribute(e)){var g=b[d][1];(null===g||g.test&&g.test(f)||\"string\"==typeof g&&f==g)&&a.removeAttribute(e)}}c||y(a)}function y(a,b){if(!a.hasAttributes()||b)if(CKEDITOR.dtd.$block[a.getName()]){var c=a.getPrevious(R),d=a.getNext(R);!c||c.type!=CKEDITOR.NODE_TEXT&&c.isBlockBoundary({br:1})||a.append(\"br\",1);!d||d.type!=CKEDITOR.NODE_TEXT&&d.isBlockBoundary({br:1})||a.append(\"br\");a.remove(!0)}else c=a.getFirst(),d=a.getLast(),a.remove(!0),c&&(c.type==CKEDITOR.NODE_ELEMENT&&c.mergeSiblings(),\nd&&!c.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT&&d.mergeSiblings())}function F(a,b,c){var d;d=a.element;\"*\"==d&&(d=\"span\");d=new CKEDITOR.dom.element(d,b);c&&c.copyAttributes(d);d=t(d,a);b.getCustomData(\"doc_processing_style\")&&d.hasAttribute(\"id\")?d.removeAttribute(\"id\"):b.setCustomData(\"doc_processing_style\",1);return d}function t(a,b){var c=b._.definition,d=c.attributes,c=CKEDITOR.style.getStyleText(c);if(d)for(var e in d)a.setAttribute(e,d[e]);c&&a.setAttribute(\"style\",c);return a}function z(a,\nb){for(var c in a)a[c]=a[c].replace(H,function(a,c){return b[c]})}function h(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},c=a._.definition.overrides;if(c){CKEDITOR.tools.isArray(c)||(c=[c]);for(var d=0;d<c.length;d++){var e=c[d],f,g;\"string\"==typeof e?f=e.toLowerCase():(f=e.element?e.element.toLowerCase():a.element,g=e.attributes);e=b[f]||(b[f]={});if(g){var e=e.attributes=e.attributes||[],h;for(h in g)e.push([h.toLowerCase(),g[h]])}}}return b}function p(a,b,c){var d=new CKEDITOR.dom.element(\"span\");\nd[c?\"setStyle\":\"setAttribute\"](a,b);return d[c?\"getStyle\":\"getAttribute\"](a)}function m(a,b,c){var d=a.document,e=a.getRanges();b=b?this.removeFromRange:this.applyToRange;for(var f,g=e.createIterator();f=g.getNextRange();)b.call(this,f,c);a.selectRanges(e);d.removeCustomData(\"doc_processing_style\")}var C={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,\ndetails:1,datagrid:1,datalist:1},r={a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},G=/\\s*(?:;\\s*|$)/,H=/#\\((.+?)\\)/g,K=CKEDITOR.dom.walker.bookmark(0,1),R=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){if(\"string\"==typeof a.type)return new CKEDITOR.style.customHandlers[a.type](a);var c=a.attributes;c&&c.style&&(a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(c.style)),delete c.style);\nb&&(a=CKEDITOR.tools.clone(a),z(a.attributes,b),z(a.styles,b));c=this.element=a.element?\"string\"==typeof a.element?a.element.toLowerCase():a.element:\"*\";this.type=a.type||(C[c]?CKEDITOR.STYLE_BLOCK:r[c]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);\"object\"==typeof this.element&&(this.type=CKEDITOR.STYLE_OBJECT);this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof CKEDITOR.dom.document)return m.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var b=\nthis._.enterMode;b||(this._.enterMode=a.activeEnterMode);m.call(this,a.getSelection(),0,a);this._.enterMode=b}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return m.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;b||(this._.enterMode=a.activeEnterMode);m.call(this,a.getSelection(),1,a);this._.enterMode=b}},applyToRange:function(a){this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?b:this.type==CKEDITOR.STYLE_BLOCK?k:this.type==CKEDITOR.STYLE_OBJECT?\ng:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?c:this.type==CKEDITOR.STYLE_BLOCK?n:this.type==CKEDITOR.STYLE_OBJECT?l:null;return this.removeFromRange(a)},applyToObject:function(a){t(a,this)},checkActive:function(a,b){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,!0,b);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var c=a.elements,d=0,e;d<c.length;d++)if(e=c[d],\nthis.type!=CKEDITOR.STYLE_INLINE||e!=a.block&&e!=a.blockLimit){if(this.type==CKEDITOR.STYLE_OBJECT){var f=e.getName();if(!(\"string\"==typeof this.element?f==this.element:f in this.element))continue}if(this.checkElementRemovable(e,!0,b))return!0}}return!1},checkApplicable:function(a,b,c){b&&b instanceof CKEDITOR.filter&&(c=b);if(c&&!c.check(this))return!1;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return!0},\ncheckElementMatch:function(a,b){var c=this._.definition;if(!a||!c.ignoreReadonly&&a.isReadOnly())return!1;var d=a.getName();if(\"string\"==typeof this.element?d==this.element:d in this.element){if(!b&&!a.hasAttributes())return!0;if(d=c._AC)c=d;else{var d={},e=0,f=c.attributes;if(f)for(var g in f)e++,d[g]=f[g];if(g=CKEDITOR.style.getStyleText(c))d.style||e++,d.style=g;d._length=e;c=c._AC=d}if(c._length){for(var h in c)if(\"_length\"!=h){e=a.getAttribute(h)||\"\";if(\"style\"==h)a:{d=c[h];\"string\"==typeof d&&\n(d=CKEDITOR.tools.parseCssText(d));\"string\"==typeof e&&(e=CKEDITOR.tools.parseCssText(e,!0));g=void 0;for(g in d)if(!(g in e)||e[g]!=d[g]&&\"inherit\"!=d[g]&&\"inherit\"!=e[g]){d=!1;break a}d=!0}else d=c[h]==e;if(d){if(!b)return!0}else if(b)return!1}if(b)return!0}else return!0}return!1},checkElementRemovable:function(a,b,c){if(this.checkElementMatch(a,b,c))return!0;if(b=h(this)[a.getName()]){var d;if(!(b=b.attributes))return!0;for(c=0;c<b.length;c++)if(d=b[c][0],d=a.getAttribute(d)){var e=b[c][1];if(null===\ne)return!0;if(\"string\"==typeof e){if(d==e)return!0}else if(e.test(d))return!0}}return!1},buildPreview:function(a){var b=this._.definition,c=[],d=b.element;\"bdo\"==d&&(d=\"span\");var c=[\"\\x3c\",d],e=b.attributes;if(e)for(var f in e)c.push(\" \",f,'\\x3d\"',e[f],'\"');(e=CKEDITOR.style.getStyleText(b))&&c.push(' style\\x3d\"',e,'\"');c.push(\"\\x3e\",a||b.name,\"\\x3c/\",d,\"\\x3e\");return c.join(\"\")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;\nvar b=a.styles,c=a.attributes&&a.attributes.style||\"\",d=\"\";c.length&&(c=c.replace(G,\";\"));for(var e in b){var f=b[e],g=(e+\":\"+f).replace(G,\";\");\"inherit\"==f?d+=g:c+=g}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,!0));return a._ST=c+d};CKEDITOR.style.customHandlers={};CKEDITOR.style.addCustomHandler=function(a){var b=function(a){this._={definition:a};this.setup&&this.setup(a)};b.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT},\na,!0);return this.customHandlers[a.type]=b};var M=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,Q=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED})();CKEDITOR.styleCommand=function(a,d){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,d,!0)};\nCKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&a.removeStyle(this.style)};CKEDITOR.stylesSet=new CKEDITOR.resourceManager(\"\",\"stylesSet\");CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);CKEDITOR.loadStylesSet=function(a,d,b){CKEDITOR.stylesSet.addExternal(a,d,\"\");CKEDITOR.stylesSet.load(a,b)};\nCKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(a,d){var b=this._.styleStateChangeCallbacks;b||(b=this._.styleStateChangeCallbacks=[],this.on(\"selectionChange\",function(a){for(var d=0;d<b.length;d++){var g=b[d],l=g.style.checkActive(a.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;g.fn.call(this,l)}}));b.push({style:a,fn:d})},applyStyle:function(a){a.apply(this)},removeStyle:function(a){a.remove(this)},getStylesSet:function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions);\nelse{var d=this,b=d.config.stylesCombo_stylesSet||d.config.stylesSet;if(!1===b)a(null);else if(b instanceof Array)d._.stylesDefinitions=b,a(b);else{b||(b=\"default\");var b=b.split(\":\"),c=b[0];CKEDITOR.stylesSet.addExternal(c,b[1]?b.slice(1).join(\":\"):CKEDITOR.getUrl(\"styles.js\"),\"\");CKEDITOR.stylesSet.load(c,function(b){d._.stylesDefinitions=b[c];a(d._.stylesDefinitions)})}}}});\nCKEDITOR.dom.comment=function(a,d){\"string\"==typeof a&&(a=(d?d.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return\"\\x3c!--\"+this.$.nodeValue+\"--\\x3e\"}});\"use strict\";\n(function(){var a={},d={},b;for(b in CKEDITOR.dtd.$blockLimit)b in CKEDITOR.dtd.$list||(a[b]=1);for(b in CKEDITOR.dtd.$block)b in CKEDITOR.dtd.$blockLimit||b in CKEDITOR.dtd.$empty||(d[b]=1);CKEDITOR.dom.elementPath=function(b,e){var g=null,l=null,k=[],n=b,w;e=e||b.getDocument().getBody();do if(n.type==CKEDITOR.NODE_ELEMENT){k.push(n);if(!this.lastElement&&(this.lastElement=n,n.is(CKEDITOR.dtd.$object)||\"false\"==n.getAttribute(\"contenteditable\")))continue;if(n.equals(e))break;if(!l&&(w=n.getName(),\n\"true\"==n.getAttribute(\"contenteditable\")?l=n:!g&&d[w]&&(g=n),a[w])){if(w=!g&&\"div\"==w){a:{w=n.getChildren();for(var f=0,x=w.count();f<x;f++){var A=w.getItem(f);if(A.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[A.getName()]){w=!0;break a}}w=!1}w=!w}w?g=n:l=n}}while(n=n.getParent());l||(l=e);this.block=g;this.blockLimit=l;this.root=e;this.elements=k}})();\nCKEDITOR.dom.elementPath.prototype={compare:function(a){var d=this.elements;a=a&&a.elements;if(!a||d.length!=a.length)return!1;for(var b=0;b<d.length;b++)if(!d[b].equals(a[b]))return!1;return!0},contains:function(a,d,b){var c;\"string\"==typeof a&&(c=function(b){return b.getName()==a});a instanceof CKEDITOR.dom.element?c=function(b){return b.equals(a)}:CKEDITOR.tools.isArray(a)?c=function(b){return-1<CKEDITOR.tools.indexOf(a,b.getName())}:\"function\"==typeof a?c=a:\"object\"==typeof a&&(c=function(b){return b.getName()in\na});var e=this.elements,g=e.length;d&&g--;b&&(e=Array.prototype.slice.call(e,0),e.reverse());for(d=0;d<g;d++)if(c(e[d]))return e[d];return null},isContextFor:function(a){var d;return a in CKEDITOR.dtd.$block?(d=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit,!!d.getDtd()[a]):!0},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}};\nCKEDITOR.dom.text=function(a,d){\"string\"==typeof a&&(a=(d?d.$:document).createTextNode(a));this.$=a};CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node;\nCKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(a){this.$.nodeValue=a},split:function(a){var d=this.$.parentNode,b=d.childNodes.length,c=this.getLength(),e=this.getDocument(),g=new CKEDITOR.dom.text(this.$.splitText(a),e);d.childNodes.length==b&&(a>=c?(g=e.createText(\"\"),g.insertAfter(this)):(a=e.createText(\"\"),a.insertAfter(g),a.remove()));return g},substring:function(a,\nd){return\"number\"!=typeof d?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,d)}});\n(function(){function a(a,c,d){var g=a.serializable,l=c[d?\"endContainer\":\"startContainer\"],k=d?\"endOffset\":\"startOffset\",n=g?c.document.getById(a.startNode):a.startNode;a=g?c.document.getById(a.endNode):a.endNode;l.equals(n.getPrevious())?(c.startOffset=c.startOffset-l.getLength()-a.getPrevious().getLength(),l=a.getNext()):l.equals(a.getPrevious())&&(c.startOffset-=l.getLength(),l=a.getNext());l.equals(n.getParent())&&c[k]++;l.equals(a.getParent())&&c[k]++;c[d?\"endContainer\":\"startContainer\"]=l;return c}\nCKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,d)};var d={createIterator:function(){var a=this,c=CKEDITOR.dom.walker.bookmark(),d=[],g;return{getNextRange:function(l){g=void 0===g?0:g+1;var k=a[g];if(k&&1<a.length){if(!g)for(var n=a.length-1;0<=n;n--)d.unshift(a[n].createBookmark(!0));if(l)for(var w=0;a[g+w+1];){var f=k.document;l=0;n=f.getById(d[w].endNode);for(f=f.getById(d[w+1].startNode);;){n=\nn.getNextSourceNode(!1);if(f.equals(n))l=1;else if(c(n)||n.type==CKEDITOR.NODE_ELEMENT&&n.isBlockBoundary())continue;break}if(!l)break;w++}for(k.moveToBookmark(d.shift());w--;)n=a[++g],n.moveToBookmark(d.shift()),k.setEnd(n.endContainer,n.endOffset)}return k}}},createBookmarks:function(b){for(var c=[],d,g=0;g<this.length;g++){c.push(d=this[g].createBookmark(b,!0));for(var l=g+1;l<this.length;l++)this[l]=a(d,this[l]),this[l]=a(d,this[l],!0)}return c},createBookmarks2:function(a){for(var c=[],d=0;d<\nthis.length;d++)c.push(this[d].createBookmark2(a));return c},moveToBookmarks:function(a){for(var c=0;c<this.length;c++)this[c].moveToBookmark(a[c])}}})();\n(function(){function a(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(\",\")[1]||\"skins/\"+CKEDITOR.skinName.split(\",\")[0]+\"/\")}function d(b){var c=CKEDITOR.skin[\"ua_\"+b],d=CKEDITOR.env;if(c)for(var c=c.split(\",\").sort(function(a,b){return a>b?-1:1}),e=0,g;e<c.length;e++)if(g=c[e],d.ie&&(g.replace(/^ie/,\"\")==d.version||d.quirks&&\"iequirks\"==g)&&(g=\"ie\"),d[g]){b+=\"_\"+c[e];break}return CKEDITOR.getUrl(a()+b+\".css\")}function b(a,b){g[a]||(CKEDITOR.document.appendStyleSheet(d(a)),g[a]=1);b&&b()}function c(a){var b=\na.getById(l);b||(b=a.getHead().append(\"style\"),b.setAttribute(\"id\",l),b.setAttribute(\"type\",\"text/css\"));return b}function e(a,b,c){var d,e,g;if(CKEDITOR.env.webkit)for(b=b.split(\"}\").slice(0,-1),e=0;e<b.length;e++)b[e]=b[e].split(\"{\");for(var k=0;k<a.length;k++)if(CKEDITOR.env.webkit)for(e=0;e<b.length;e++){g=b[e][1];for(d=0;d<c.length;d++)g=g.replace(c[d][0],c[d][1]);a[k].$.sheet.addRule(b[e][0],g)}else{g=b;for(d=0;d<c.length;d++)g=g.replace(c[d][0],c[d][1]);CKEDITOR.env.ie&&11>CKEDITOR.env.version?\na[k].$.styleSheet.cssText+=g:a[k].$.innerHTML+=g}}var g={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(\",\")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+\"skin.js\"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(d(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||\"16px\"})},getIconStyle:function(a,b,c,d,e){var g;a&&(a=a.toLowerCase(),b&&(g=this.icons[a+\"-rtl\"]),\ng||(g=this.icons[a]));a=c||g&&g.path||\"\";d=d||g&&g.offset;e=e||g&&g.bgsize||\"16px\";a&&(a=a.replace(/'/g,\"\\\\'\"));return a&&\"background-image:url('\"+CKEDITOR.getUrl(a)+\"');background-position:0 \"+d+\"px;background-size:\"+e+\";\"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=c(CKEDITOR.document);return(this.setUiColor=function(a){this.uiColor=a;var c=CKEDITOR.skin.chameleon,d=\"\",g=\"\";\"function\"==typeof c&&(d=c(this,\"editor\"),g=\nc(this,\"panel\"));a=[[n,a]];e([b],d,a);e(k,g,a)}).call(this,a)}});var l=\"cke_ui_color\",k=[],n=/\\$color/g;CKEDITOR.on(\"instanceLoaded\",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor;a=function(a){a=(a.data[0]||a.data).element.getElementsByTag(\"iframe\").getItem(0).getFrameDocument();if(!a.getById(\"cke_ui_color\")){a=c(a);k.push(a);var d=b.getUiColor();d&&e([a],CKEDITOR.skin.chameleon(b,\"panel\"),[[n,d]])}};b.on(\"panelShow\",a);b.on(\"menuShow\",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})})();\n(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=!1;else{var a=CKEDITOR.dom.element.createFromHtml('\\x3cdiv style\\x3d\"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue\"\\x3e\\x3c/div\\x3e',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var d=a.getComputedStyle(\"border-top-color\"),b=a.getComputedStyle(\"border-right-color\");CKEDITOR.env.hc=!(!d||d!=b)}catch(c){CKEDITOR.env.hc=!1}a.remove()}CKEDITOR.env.hc&&(CKEDITOR.env.cssClass+=\" cke_hc\");CKEDITOR.document.appendStyleText(\".cke{visibility:hidden;}\");\nCKEDITOR.status=\"loaded\";CKEDITOR.fireOnce(\"loaded\");if(a=CKEDITOR._.pending)for(delete CKEDITOR._.pending,d=0;d<a.length;d++)CKEDITOR.editor.prototype.constructor.apply(a[d][0],a[d][1]),CKEDITOR.add(a[d][0])})();/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.skin.name=\"moono\";CKEDITOR.skin.ua_editor=\"ie,iequirks,ie7,ie8,gecko\";CKEDITOR.skin.ua_dialog=\"ie,iequirks,ie7,ie8\";\nCKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),c=0;3>c;c++){var f=c,d;d=parseInt(a[c],16);d=(\"0\"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);a[f]=d}return\"#\"+a.join(\"\")}}(),c=function(){var b=new CKEDITOR.template(\"background:#{to};background-image:linear-gradient(to bottom,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType\\x3d0,startColorstr\\x3d'{from}',endColorstr\\x3d'{to}');\");return function(c,a){return b.output({from:c,\nto:a})}}(),f={editor:new CKEDITOR.template(\"{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] \"),\npanel:new CKEDITOR.template(\".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] \")};\nreturn function(g,e){var a=g.uiColor,a={id:\".\"+g.id,defaultBorder:b(a,-.1),defaultGradient:c(b(a,.9),a),lightGradient:c(b(a,1),b(a,.7)),mediumGradient:c(b(a,.8),b(a,.5)),ckeButtonOn:c(b(a,.6),b(a,.7)),ckeResizer:b(a,-.4),ckeToolbarSeparator:b(a,.5),ckeColorauto:b(a,.8),dialogBody:b(a,.7),dialogTabSelected:c(\"#FFFFFF\",\"#FFFFFF\"),dialogTabSelectedBorder:\"#FFF\",elementsPathColor:b(a,-.6),elementsPathBg:a,menubuttonIcon:b(a,.5),menubuttonIconHover:b(a,.3)};return f[e].output(a).replace(/\\[/g,\"{\").replace(/\\]/g,\n\"}\")}}();CKEDITOR.plugins.add(\"dialogui\",{onLoad:function(){var h=function(b){this._||(this._={});this._[\"default\"]=this._.initValue=b[\"default\"]||\"\";this._.required=b.required||!1;for(var a=[this._],d=1;d<arguments.length;d++)a.push(arguments[d]);a.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,a);return this._},v={build:function(b,a,d){return new CKEDITOR.ui.dialog.textInput(b,a,d)}},n={build:function(b,a,d){return new CKEDITOR.ui.dialog[a.type](b,a,d)}},q={isChanged:function(){return this.getValue()!=\nthis.getInitValue()},reset:function(b){this.setValue(this.getInitValue(),b)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._[\"default\"]},getInitValue:function(){return this._.initValue}},r=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(b,a){this._.domOnChangeRegistered||(b.on(\"load\",function(){this.getInputElement().on(\"change\",function(){b.parts.dialog.isVisible()&&this.fire(\"change\",{value:this.getValue()})},\nthis)},this),this._.domOnChangeRegistered=!0);this.on(\"change\",a)}},!0),x=/^on([A-Z]\\w+)/,t=function(b){for(var a in b)(x.test(a)||\"title\"==a||\"type\"==a)&&delete b[a];return b},w=function(b){b=b.data.getKeystroke();b==CKEDITOR.SHIFT+CKEDITOR.ALT+36?this.setDirectionMarker(\"ltr\"):b==CKEDITOR.SHIFT+CKEDITOR.ALT+35&&this.setDirectionMarker(\"rtl\")};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(b,a,d,f){if(!(4>arguments.length)){var c=h.call(this,a);c.labelId=CKEDITOR.tools.getNextId()+\n\"_label\";this._.children=[];var e={role:a.role||\"presentation\"};a.includeLabel&&(e[\"aria-labelledby\"]=c.labelId);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,\"div\",null,e,function(){var e=[],g=a.required?\" cke_required\":\"\";\"horizontal\"!=a.labelLayout?e.push('\\x3clabel class\\x3d\"cke_dialog_ui_labeled_label'+g+'\" ',' id\\x3d\"'+c.labelId+'\"',c.inputId?' for\\x3d\"'+c.inputId+'\"':\"\",(a.labelStyle?' style\\x3d\"'+a.labelStyle+'\"':\"\")+\"\\x3e\",a.label,\"\\x3c/label\\x3e\",'\\x3cdiv class\\x3d\"cke_dialog_ui_labeled_content\"',\na.controlStyle?' style\\x3d\"'+a.controlStyle+'\"':\"\",' role\\x3d\"presentation\"\\x3e',f.call(this,b,a),\"\\x3c/div\\x3e\"):(g={type:\"hbox\",widths:a.widths,padding:0,children:[{type:\"html\",html:'\\x3clabel class\\x3d\"cke_dialog_ui_labeled_label'+g+'\" id\\x3d\"'+c.labelId+'\" for\\x3d\"'+c.inputId+'\"'+(a.labelStyle?' style\\x3d\"'+a.labelStyle+'\"':\"\")+\"\\x3e\"+CKEDITOR.tools.htmlEncode(a.label)+\"\\x3c/label\\x3e\"},{type:\"html\",html:'\\x3cspan class\\x3d\"cke_dialog_ui_labeled_content\"'+(a.controlStyle?' style\\x3d\"'+a.controlStyle+\n'\"':\"\")+\"\\x3e\"+f.call(this,b,a)+\"\\x3c/span\\x3e\"}]},CKEDITOR.dialog._.uiElementBuilders.hbox.build(b,g,e));return e.join(\"\")})}},textInput:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this._.inputId=CKEDITOR.tools.getNextId()+\"_textInput\",c={\"class\":\"cke_dialog_ui_input_\"+a.type,id:f,type:a.type};a.validate&&(this.validate=a.validate);a.maxLength&&(c.maxlength=a.maxLength);a.size&&(c.size=a.size);a.inputStyle&&(c.style=a.inputStyle);var e=this,m=!1;b.on(\"load\",function(){e.getInputElement().on(\"keydown\",\nfunction(a){13==a.data.getKeystroke()&&(m=!0)});e.getInputElement().on(\"keyup\",function(a){13==a.data.getKeystroke()&&m&&(b.getButton(\"ok\")&&setTimeout(function(){b.getButton(\"ok\").click()},0),m=!1);e.bidi&&w.call(e,a)},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var b=['\\x3cdiv class\\x3d\"cke_dialog_ui_input_',a.type,'\" role\\x3d\"presentation\"'];a.width&&b.push('style\\x3d\"width:'+a.width+'\" ');b.push(\"\\x3e\\x3cinput \");c[\"aria-labelledby\"]=this._.labelId;this._.required&&\n(c[\"aria-required\"]=this._.required);for(var e in c)b.push(e+'\\x3d\"'+c[e]+'\" ');b.push(\" /\\x3e\\x3c/div\\x3e\");return b.join(\"\")})}},textarea:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this,c=this._.inputId=CKEDITOR.tools.getNextId()+\"_textarea\",e={};a.validate&&(this.validate=a.validate);e.rows=a.rows||5;e.cols=a.cols||20;e[\"class\"]=\"cke_dialog_ui_input_textarea \"+(a[\"class\"]||\"\");\"undefined\"!=typeof a.inputStyle&&(e.style=a.inputStyle);a.dir&&(e.dir=a.dir);if(f.bidi)b.on(\"load\",\nfunction(){f.getInputElement().on(\"keyup\",w)},f);CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){e[\"aria-labelledby\"]=this._.labelId;this._.required&&(e[\"aria-required\"]=this._.required);var a=['\\x3cdiv class\\x3d\"cke_dialog_ui_input_textarea\" role\\x3d\"presentation\"\\x3e\\x3ctextarea id\\x3d\"',c,'\" '],b;for(b in e)a.push(b+'\\x3d\"'+CKEDITOR.tools.htmlEncode(e[b])+'\" ');a.push(\"\\x3e\",CKEDITOR.tools.htmlEncode(f._[\"default\"]),\"\\x3c/textarea\\x3e\\x3c/div\\x3e\");return a.join(\"\")})}},checkbox:function(b,\na,d){if(!(3>arguments.length)){var f=h.call(this,a,{\"default\":!!a[\"default\"]});a.validate&&(this.validate=a.validate);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,\"span\",null,null,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+\"_checkbox\":CKEDITOR.tools.getNextId()+\"_checkbox\"},!0),e=[],d=CKEDITOR.tools.getNextId()+\"_label\",g={\"class\":\"cke_dialog_ui_checkbox_input\",type:\"checkbox\",\"aria-labelledby\":d};t(c);a[\"default\"]&&(g.checked=\"checked\");\"undefined\"!=typeof c.inputStyle&&(c.style=c.inputStyle);\nf.checkbox=new CKEDITOR.ui.dialog.uiElement(b,c,e,\"input\",null,g);e.push(' \\x3clabel id\\x3d\"',d,'\" for\\x3d\"',g.id,'\"'+(a.labelStyle?' style\\x3d\"'+a.labelStyle+'\"':\"\")+\"\\x3e\",CKEDITOR.tools.htmlEncode(a.label),\"\\x3c/label\\x3e\");return e.join(\"\")})}},radio:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);this._[\"default\"]||(this._[\"default\"]=this._.initValue=a.items[0][1]);a.validate&&(this.validate=a.validate);var f=[],c=this;a.role=\"radiogroup\";a.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this,\nb,a,d,function(){for(var e=[],d=[],g=(a.id?a.id:CKEDITOR.tools.getNextId())+\"_radio\",k=0;k<a.items.length;k++){var l=a.items[k],h=void 0!==l[2]?l[2]:l[0],n=void 0!==l[1]?l[1]:l[0],p=CKEDITOR.tools.getNextId()+\"_radio_input\",q=p+\"_label\",p=CKEDITOR.tools.extend({},a,{id:p,title:null,type:null},!0),h=CKEDITOR.tools.extend({},p,{title:h},!0),r={type:\"radio\",\"class\":\"cke_dialog_ui_radio_input\",name:g,value:n,\"aria-labelledby\":q},u=[];c._[\"default\"]==n&&(r.checked=\"checked\");t(p);t(h);\"undefined\"!=typeof p.inputStyle&&\n(p.style=p.inputStyle);p.keyboardFocusable=!0;f.push(new CKEDITOR.ui.dialog.uiElement(b,p,u,\"input\",null,r));u.push(\" \");new CKEDITOR.ui.dialog.uiElement(b,h,u,\"label\",null,{id:q,\"for\":r.id},l[0]);e.push(u.join(\"\"))}new CKEDITOR.ui.dialog.hbox(b,f,e,d);return d.join(\"\")});this._.children=f}},button:function(b,a,d){if(arguments.length){\"function\"==typeof a&&(a=a(b.getParentEditor()));h.call(this,a,{disabled:a.disabled||!1});CKEDITOR.event.implementOn(this);var f=this;b.on(\"load\",function(){var a=this.getElement();\n(function(){a.on(\"click\",function(a){f.click();a.data.preventDefault()});a.on(\"keydown\",function(a){a.data.getKeystroke()in{32:1}&&(f.click(),a.data.preventDefault())})})();a.unselectable()},this);var c=CKEDITOR.tools.extend({},a);delete c.style;var e=CKEDITOR.tools.getNextId()+\"_label\";CKEDITOR.ui.dialog.uiElement.call(this,b,c,d,\"a\",null,{style:a.style,href:\"javascript:void(0)\",title:a.label,hidefocus:\"true\",\"class\":a[\"class\"],role:\"button\",\"aria-labelledby\":e},'\\x3cspan id\\x3d\"'+e+'\" class\\x3d\"cke_dialog_ui_button\"\\x3e'+\nCKEDITOR.tools.htmlEncode(a.label)+\"\\x3c/span\\x3e\")}},select:function(b,a,d){if(!(3>arguments.length)){var f=h.call(this,a);a.validate&&(this.validate=a.validate);f.inputId=CKEDITOR.tools.getNextId()+\"_select\";CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+\"_select\":CKEDITOR.tools.getNextId()+\"_select\"},!0),e=[],d=[],g={id:f.inputId,\"class\":\"cke_dialog_ui_input_select\",\"aria-labelledby\":this._.labelId};e.push('\\x3cdiv class\\x3d\"cke_dialog_ui_input_',\na.type,'\" role\\x3d\"presentation\"');a.width&&e.push('style\\x3d\"width:'+a.width+'\" ');e.push(\"\\x3e\");void 0!==a.size&&(g.size=a.size);void 0!==a.multiple&&(g.multiple=a.multiple);t(c);for(var k=0,l;k<a.items.length&&(l=a.items[k]);k++)d.push('\\x3coption value\\x3d\"',CKEDITOR.tools.htmlEncode(void 0!==l[1]?l[1]:l[0]).replace(/\"/g,\"\\x26quot;\"),'\" /\\x3e ',CKEDITOR.tools.htmlEncode(l[0]));\"undefined\"!=typeof c.inputStyle&&(c.style=c.inputStyle);f.select=new CKEDITOR.ui.dialog.uiElement(b,c,e,\"select\",null,\ng,d.join(\"\"));e.push(\"\\x3c/div\\x3e\");return e.join(\"\")})}},file:function(b,a,d){if(!(3>arguments.length)){void 0===a[\"default\"]&&(a[\"default\"]=\"\");var f=CKEDITOR.tools.extend(h.call(this,a),{definition:a,buttons:[]});a.validate&&(this.validate=a.validate);b.on(\"load\",function(){CKEDITOR.document.getById(f.frameId).getParent().addClass(\"cke_dialog_ui_input_file\")});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){f.frameId=CKEDITOR.tools.getNextId()+\"_fileInput\";var b=['\\x3ciframe frameborder\\x3d\"0\" allowtransparency\\x3d\"0\" class\\x3d\"cke_dialog_ui_input_file\" role\\x3d\"presentation\" id\\x3d\"',\nf.frameId,'\" title\\x3d\"',a.label,'\" src\\x3d\"javascript:void('];b.push(CKEDITOR.env.ie?\"(function(){\"+encodeURIComponent(\"document.open();(\"+CKEDITOR.tools.fixDomain+\")();document.close();\")+\"})()\":\"0\");b.push(')\"\\x3e\\x3c/iframe\\x3e');return b.join(\"\")})}},fileButton:function(b,a,d){var f=this;if(!(3>arguments.length)){h.call(this,a);a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),e=c.onClick;c.className=(c.className?c.className+\" \":\"\")+\"cke_dialog_ui_button\";c.onClick=function(c){var d=\na[\"for\"];e&&!1===e.call(this,c)||(b.getContentElement(d[0],d[1]).submit(),this.disable())};b.on(\"load\",function(){b.getContentElement(a[\"for\"][0],a[\"for\"][1])._.buttons.push(f)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\\s*<[\\w:]+\\s+([^>]*)?>/,a=/^(\\s*<[\\w:]+(?:\\s+[^>]*)?)((?:.|\\r|\\n)+)$/,d=/\\/$/;return function(f,c,e){if(!(3>arguments.length)){var m=[],g=c.html;\"\\x3c\"!=g.charAt(0)&&(g=\"\\x3cspan\\x3e\"+g+\"\\x3c/span\\x3e\");var k=c.focus;if(k){var l=this.focus;this.focus=function(){(\"function\"==\ntypeof k?k:l).call(this);this.fire(\"focus\")};c.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,f,c,m,\"span\",null,null,\"\");m=m.join(\"\").match(b);g=g.match(a)||[\"\",\"\",\"\"];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]=\"/\"+g[2]);e.push([g[1],\" \",m[1]||\"\",g[2]].join(\"\"))}}}(),fieldset:function(b,a,d,f,c){var e=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,f,\"fieldset\",null,null,function(){var a=[];e&&a.push(\"\\x3clegend\"+\n(c.labelStyle?' style\\x3d\"'+c.labelStyle+'\"':\"\")+\"\\x3e\"+e+\"\\x3c/legend\\x3e\");for(var b=0;b<d.length;b++)a.push(d[b]);return a.join(\"\")})}},!0);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(b){var a=CKEDITOR.document.getById(this._.labelId);1>a.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b=\nCKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()?\"\":b.getChild(0).getText()},eventProcessors:r},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return this._.disabled?!1:this.fire(\"click\",{dialog:this._.dialog})},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass(\"cke_disabled\")},disable:function(){this._.disabled=!0;this.getElement().addClass(\"cke_disabled\")},isVisible:function(){return this.getElement().getFirst().isVisible()},\nisEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(b,a){this.on(\"click\",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)},\nfocus:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){if(this.bidi){var a=b&&b.charAt(0);(a=\"‪\"==a?\"ltr\":\"‫\"==a?\"rtl\":null)&&(b=b.slice(1));this.setDirectionMarker(a)}b||(b=\"\");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},\ngetValue:function(){var b=CKEDITOR.ui.dialog.uiElement.prototype.getValue.call(this);if(this.bidi&&b){var a=this.getDirectionMarker();a&&(b=(\"ltr\"==a?\"‪\":\"‫\")+b)}return b},setDirectionMarker:function(b){var a=this.getInputElement();b?a.setAttributes({dir:b,\"data-cke-dir-marker\":b}):this.getDirectionMarker()&&a.removeAttributes([\"dir\",\"data-cke-dir-marker\"])},getDirectionMarker:function(){return this.getInputElement().data(\"cke-dir-marker\")},keyboardFocusable:!0},q,!0);CKEDITOR.ui.dialog.textarea.prototype=\nnew CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(b,a,d){var f=new CKEDITOR.dom.element(\"option\",this.getDialog().getParentEditor().document),c=this.getInputElement().$;f.$.text=b;f.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(f.$):c.add(f.$,null):c.add(f.$,d);return this},remove:function(b){this.getInputElement().$.remove(b);\nreturn this},clear:function(){for(var b=this.getInputElement().$;0<b.length;)b.remove(0);return this},keyboardFocusable:!0},q,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(b,a){this.getInputElement().$.checked=b;!a&&this.fire(\"change\",{value:b})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(b,\na){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return r.onChange.apply(this,arguments);b.on(\"load\",function(){var a=this._.checkbox.getElement();a.on(\"propertychange\",function(b){b=b.data.$;\"checked\"==b.propertyName&&this.fire(\"change\",{value:a.$.checked})},this)},this);this.on(\"change\",a);return null}},keyboardFocusable:!0},q,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(b,a){for(var d=this._.children,f,c=0;c<d.length&&(f=d[c]);c++)f.getElement().$.checked=\nf.getValue()==b;!a&&this.fire(\"change\",{value:b})},getValue:function(){for(var b=this._.children,a=0;a<b.length;a++)if(b[a].getElement().$.checked)return b[a].getValue();return null},accessKeyUp:function(){var b=this._.children,a;for(a=0;a<b.length;a++)if(b[a].getElement().$.checked){b[a].getElement().focus();return}b[0].getElement().focus()},eventProcessors:{onChange:function(b,a){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return r.onChange.apply(this,arguments);b.on(\"load\",function(){for(var a=\nthis._.children,b=this,c=0;c<a.length;c++)a[c].getElement().on(\"propertychange\",function(a){a=a.data.$;\"checked\"==a.propertyName&&this.$.checked&&b.fire(\"change\",{value:this.getAttribute(\"value\")})})},this);this.on(\"change\",a);return null}}},q,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,q,{getInputElement:function(){var b=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<b.$.forms.length?new CKEDITOR.dom.element(b.$.forms[0].elements[0]):\nthis.getElement()},submit:function(){this.getInputElement().getParent().$.submit();return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(b){var a=/^on([A-Z]\\w+)/,d,f=function(a,b,c,d){a.on(\"formLoaded\",function(){a.getInputElement().on(c,d,a)})},c;for(c in b)if(d=c.match(a))this.eventProcessors[c]?this.eventProcessors[c].call(this,this._.dialog,b[c]):f(this,this._.dialog,d[1].toLowerCase(),b[c]);return this},reset:function(){function b(){d.$.open();\nvar b=\"\";f.size&&(b=f.size-(CKEDITOR.env.ie?7:0));var h=a.frameId+\"_input\";d.$.write(['\\x3chtml dir\\x3d\"'+g+'\" lang\\x3d\"'+k+'\"\\x3e\\x3chead\\x3e\\x3ctitle\\x3e\\x3c/title\\x3e\\x3c/head\\x3e\\x3cbody style\\x3d\"margin: 0; overflow: hidden; background: transparent;\"\\x3e','\\x3cform enctype\\x3d\"multipart/form-data\" method\\x3d\"POST\" dir\\x3d\"'+g+'\" lang\\x3d\"'+k+'\" action\\x3d\"',CKEDITOR.tools.htmlEncode(f.action),'\"\\x3e\\x3clabel id\\x3d\"',a.labelId,'\" for\\x3d\"',h,'\" style\\x3d\"display:none\"\\x3e',CKEDITOR.tools.htmlEncode(f.label),\n'\\x3c/label\\x3e\\x3cinput style\\x3d\"width:100%\" id\\x3d\"',h,'\" aria-labelledby\\x3d\"',a.labelId,'\" type\\x3d\"file\" name\\x3d\"',CKEDITOR.tools.htmlEncode(f.id||\"cke_upload\"),'\" size\\x3d\"',CKEDITOR.tools.htmlEncode(0<b?b:\"\"),'\" /\\x3e\\x3c/form\\x3e\\x3c/body\\x3e\\x3c/html\\x3e\\x3cscript\\x3e',CKEDITOR.env.ie?\"(\"+CKEDITOR.tools.fixDomain+\")();\":\"\",\"window.parent.CKEDITOR.tools.callFunction(\"+e+\");\",\"window.onbeforeunload \\x3d function() {window.parent.CKEDITOR.tools.callFunction(\"+m+\")}\",\"\\x3c/script\\x3e\"].join(\"\"));\nd.$.close();for(b=0;b<c.length;b++)c[b].enable()}var a=this._,d=CKEDITOR.document.getById(a.frameId).getFrameDocument(),f=a.definition,c=a.buttons,e=this.formLoadedNumber,m=this.formUnloadNumber,g=a.dialog._.editor.lang.dir,k=a.dialog._.editor.langCode;e||(e=this.formLoadedNumber=CKEDITOR.tools.addFunction(function(){this.fire(\"formLoaded\")},this),m=this.formUnloadNumber=CKEDITOR.tools.addFunction(function(){this.getInputElement().clearCustomData()},this),this.getDialog()._.editor.on(\"destroy\",function(){CKEDITOR.tools.removeFunction(e);\nCKEDITOR.tools.removeFunction(m)}));CKEDITOR.env.gecko?setTimeout(b,500):b()},getValue:function(){return this.getInputElement().$.value||\"\"},setInitValue:function(){this._.initValue=\"\"},eventProcessors:{onChange:function(b,a){this._.domOnChangeRegistered||(this.on(\"formLoaded\",function(){this.getInputElement().on(\"change\",function(){this.fire(\"change\",{value:this.getValue()})},this)},this),this._.domOnChangeRegistered=!0);this.on(\"change\",a)}},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.fileButton.prototype=\nnew CKEDITOR.ui.dialog.button;CKEDITOR.ui.dialog.fieldset.prototype=CKEDITOR.tools.clone(CKEDITOR.ui.dialog.hbox.prototype);CKEDITOR.dialog.addUIElement(\"text\",v);CKEDITOR.dialog.addUIElement(\"password\",v);CKEDITOR.dialog.addUIElement(\"textarea\",n);CKEDITOR.dialog.addUIElement(\"checkbox\",n);CKEDITOR.dialog.addUIElement(\"radio\",n);CKEDITOR.dialog.addUIElement(\"button\",n);CKEDITOR.dialog.addUIElement(\"select\",n);CKEDITOR.dialog.addUIElement(\"file\",n);CKEDITOR.dialog.addUIElement(\"fileButton\",n);CKEDITOR.dialog.addUIElement(\"html\",\nn);CKEDITOR.dialog.addUIElement(\"fieldset\",{build:function(b,a,d){for(var f=a.children,c,e=[],h=[],g=0;g<f.length&&(c=f[g]);g++){var k=[];e.push(k);h.push(CKEDITOR.dialog._.uiElementBuilders[c.type].build(b,c,k))}return new CKEDITOR.ui.dialog[a.type](b,h,e,d,a)}})}});CKEDITOR.DIALOG_RESIZE_NONE=0;CKEDITOR.DIALOG_RESIZE_WIDTH=1;CKEDITOR.DIALOG_RESIZE_HEIGHT=2;CKEDITOR.DIALOG_RESIZE_BOTH=3;CKEDITOR.DIALOG_STATE_IDLE=1;CKEDITOR.DIALOG_STATE_BUSY=2;\n(function(){function x(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId)+a,c=b-1;c>b-a;c--)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function A(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId),c=b+1;c<b+a;c++)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function K(a,b){for(var c=a.$.getElementsByTagName(\"input\"),\nd=0,e=c.length;d<e;d++){var f=new CKEDITOR.dom.element(c[d]);\"text\"==f.getAttribute(\"type\").toLowerCase()&&(b?(f.setAttribute(\"value\",f.getCustomData(\"fake_value\")||\"\"),f.removeCustomData(\"fake_value\")):(f.setCustomData(\"fake_value\",f.getAttribute(\"value\")),f.setAttribute(\"value\",\"\")))}}function T(a,b){var c=this.getInputElement();c&&(a?c.removeAttribute(\"aria-invalid\"):c.setAttribute(\"aria-invalid\",!0));a||(this.select?this.select():this.focus());b&&alert(b);this.fire(\"validated\",{valid:a,msg:b})}\nfunction U(){var a=this.getInputElement();a&&a.removeAttribute(\"aria-invalid\")}function V(a){var b=CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate(\"dialog\",W).output({id:CKEDITOR.tools.getNextNumber(),editorId:a.id,langDir:a.lang.dir,langCode:a.langCode,editorDialogClass:\"cke_editor_\"+a.name.replace(/\\./g,\"\\\\.\")+\"_dialog\",closeTitle:a.lang.common.close,hidpi:CKEDITOR.env.hidpi?\"cke_hidpi\":\"\"})),c=b.getChild([0,0,0,0,0]),d=c.getChild(0),e=c.getChild(1);a.plugins.clipboard&&CKEDITOR.plugins.clipboard.preventDefaultDropOnElement(c);\n!CKEDITOR.env.ie||CKEDITOR.env.quirks||CKEDITOR.env.edge||(a=\"javascript:void(function(){\"+encodeURIComponent(\"document.open();(\"+CKEDITOR.tools.fixDomain+\")();document.close();\")+\"}())\",CKEDITOR.dom.element.createFromHtml('\\x3ciframe frameBorder\\x3d\"0\" class\\x3d\"cke_iframe_shim\" src\\x3d\"'+a+'\" tabIndex\\x3d\"-1\"\\x3e\\x3c/iframe\\x3e').appendTo(c.getParent()));d.unselectable();e.unselectable();return{element:b,parts:{dialog:b.getChild(0),title:d,close:e,tabs:c.getChild(2),contents:c.getChild([3,0,0,0]),\nfooter:c.getChild([3,0,1,0])}}}function L(a,b,c){this.element=b;this.focusIndex=c;this.tabIndex=0;this.isFocusable=function(){return!b.getAttribute(\"disabled\")&&b.isVisible()};this.focus=function(){a._.currentFocusIndex=this.focusIndex;this.element.focus()};b.on(\"keydown\",function(a){a.data.getKeystroke()in{32:1,13:1}&&this.fire(\"click\")});b.on(\"focus\",function(){this.fire(\"mouseover\")});b.on(\"blur\",function(){this.fire(\"mouseout\")})}function X(a){function b(){a.layout()}var c=CKEDITOR.document.getWindow();\nc.on(\"resize\",b);a.on(\"hide\",function(){c.removeListener(\"resize\",b)})}function M(a,b){this._={dialog:a};CKEDITOR.tools.extend(this,b)}function Y(a){function b(b){var c=a.getSize(),k=CKEDITOR.document.getWindow().getViewPaneSize(),q=b.data.$.screenX,n=b.data.$.screenY,r=q-d.x,l=n-d.y;d={x:q,y:n};e.x+=r;e.y+=l;a.move(e.x+h[3]<g?-h[3]:e.x-h[1]>k.width-c.width-g?k.width-c.width+(\"rtl\"==f.lang.dir?0:h[1]):e.x,e.y+h[0]<g?-h[0]:e.y-h[2]>k.height-c.height-g?k.height-c.height+h[2]:e.y,1);b.data.preventDefault()}\nfunction c(){CKEDITOR.document.removeListener(\"mousemove\",b);CKEDITOR.document.removeListener(\"mouseup\",c);if(CKEDITOR.env.ie6Compat){var a=u.getChild(0).getFrameDocument();a.removeListener(\"mousemove\",b);a.removeListener(\"mouseup\",c)}}var d=null,e=null,f=a.getParentEditor(),g=f.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];\"undefined\"==typeof g&&(g=20);a.parts.title.on(\"mousedown\",function(g){d={x:g.data.$.screenX,y:g.data.$.screenY};CKEDITOR.document.on(\"mousemove\",b);CKEDITOR.document.on(\"mouseup\",\nc);e=a.getPosition();if(CKEDITOR.env.ie6Compat){var f=u.getChild(0).getFrameDocument();f.on(\"mousemove\",b);f.on(\"mouseup\",c)}g.data.preventDefault()},a)}function Z(a){function b(b){var c=\"rtl\"==f.lang.dir,n=k.width,q=k.height,G=n+(b.data.$.screenX-m.x)*(c?-1:1)*(a._.moved?1:2),H=q+(b.data.$.screenY-m.y)*(a._.moved?1:2),B=a._.element.getFirst(),B=c&&B.getComputedStyle(\"right\"),C=a.getPosition();C.y+H>p.height&&(H=p.height-C.y);(c?B:C.x)+G>p.width&&(G=p.width-(c?B:C.x));if(e==CKEDITOR.DIALOG_RESIZE_WIDTH||\ne==CKEDITOR.DIALOG_RESIZE_BOTH)n=Math.max(d.minWidth||0,G-g);if(e==CKEDITOR.DIALOG_RESIZE_HEIGHT||e==CKEDITOR.DIALOG_RESIZE_BOTH)q=Math.max(d.minHeight||0,H-h);a.resize(n,q);a._.moved||a.layout();b.data.preventDefault()}function c(){CKEDITOR.document.removeListener(\"mouseup\",c);CKEDITOR.document.removeListener(\"mousemove\",b);q&&(q.remove(),q=null);if(CKEDITOR.env.ie6Compat){var a=u.getChild(0).getFrameDocument();a.removeListener(\"mouseup\",c);a.removeListener(\"mousemove\",b)}}var d=a.definition,e=d.resizable;\nif(e!=CKEDITOR.DIALOG_RESIZE_NONE){var f=a.getParentEditor(),g,h,p,m,k,q,n=CKEDITOR.tools.addFunction(function(e){k=a.getSize();var d=a.parts.contents;d.$.getElementsByTagName(\"iframe\").length&&(q=CKEDITOR.dom.element.createFromHtml('\\x3cdiv class\\x3d\"cke_dialog_resize_cover\" style\\x3d\"height: 100%; position: absolute; width: 100%;\"\\x3e\\x3c/div\\x3e'),d.append(q));h=k.height-a.parts.contents.getSize(\"height\",!(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.quirks));g=k.width-a.parts.contents.getSize(\"width\",\n1);m={x:e.screenX,y:e.screenY};p=CKEDITOR.document.getWindow().getViewPaneSize();CKEDITOR.document.on(\"mousemove\",b);CKEDITOR.document.on(\"mouseup\",c);CKEDITOR.env.ie6Compat&&(d=u.getChild(0).getFrameDocument(),d.on(\"mousemove\",b),d.on(\"mouseup\",c));e.preventDefault&&e.preventDefault()});a.on(\"load\",function(){var b=\"\";e==CKEDITOR.DIALOG_RESIZE_WIDTH?b=\" cke_resizer_horizontal\":e==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(b=\" cke_resizer_vertical\");b=CKEDITOR.dom.element.createFromHtml('\\x3cdiv class\\x3d\"cke_resizer'+\nb+\" cke_resizer_\"+f.lang.dir+'\" title\\x3d\"'+CKEDITOR.tools.htmlEncode(f.lang.common.resize)+'\" onmousedown\\x3d\"CKEDITOR.tools.callFunction('+n+', event )\"\\x3e'+(\"ltr\"==f.lang.dir?\"◢\":\"◣\")+\"\\x3c/div\\x3e\");a.parts.footer.append(b,1)});f.on(\"destroy\",function(){CKEDITOR.tools.removeFunction(n)})}}function I(a){a.data.preventDefault(1)}function N(a){var b=CKEDITOR.document.getWindow(),c=a.config,d=c.dialog_backgroundCoverColor||\"white\",e=c.dialog_backgroundCoverOpacity,f=c.baseFloatZIndex,c=CKEDITOR.tools.genKey(d,\ne,f),g=z[c];g?g.show():(f=['\\x3cdiv tabIndex\\x3d\"-1\" style\\x3d\"position: ',CKEDITOR.env.ie6Compat?\"absolute\":\"fixed\",\"; z-index: \",f,\"; top: 0px; left: 0px; \",CKEDITOR.env.ie6Compat?\"\":\"background-color: \"+d,'\" class\\x3d\"cke_dialog_background_cover\"\\x3e'],CKEDITOR.env.ie6Compat&&(d=\"\\x3chtml\\x3e\\x3cbody style\\x3d\\\\'background-color:\"+d+\";\\\\'\\x3e\\x3c/body\\x3e\\x3c/html\\x3e\",f.push('\\x3ciframe hidefocus\\x3d\"true\" frameborder\\x3d\"0\" id\\x3d\"cke_dialog_background_iframe\" src\\x3d\"javascript:'),f.push(\"void((function(){\"+\nencodeURIComponent(\"document.open();(\"+CKEDITOR.tools.fixDomain+\")();document.write( '\"+d+\"' );document.close();\")+\"})())\"),f.push('\" style\\x3d\"position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity\\x3d0)\"\\x3e\\x3c/iframe\\x3e')),f.push(\"\\x3c/div\\x3e\"),g=CKEDITOR.dom.element.createFromHtml(f.join(\"\")),g.setOpacity(void 0!==e?e:.5),g.on(\"keydown\",I),g.on(\"keypress\",I),g.on(\"keyup\",I),g.appendTo(CKEDITOR.document.getBody()),z[c]=g);a.focusManager.add(g);\nu=g;a=function(){var a=b.getViewPaneSize();g.setStyles({width:a.width+\"px\",height:a.height+\"px\"})};var h=function(){var a=b.getScrollPosition(),c=CKEDITOR.dialog._.currentTop;g.setStyles({left:a.x+\"px\",top:a.y+\"px\"});if(c){do a=c.getPosition(),c.move(a.x,a.y);while(c=c._.parentDialog)}};J=a;b.on(\"resize\",a);a();CKEDITOR.env.mac&&CKEDITOR.env.webkit||g.focus();if(CKEDITOR.env.ie6Compat){var p=function(){h();arguments.callee.prevScrollHandler.apply(this,arguments)};b.$.setTimeout(function(){p.prevScrollHandler=\nwindow.onscroll||function(){};window.onscroll=p},0);h()}}function O(a){u&&(a.focusManager.remove(u),a=CKEDITOR.document.getWindow(),u.hide(),a.removeListener(\"resize\",J),CKEDITOR.env.ie6Compat&&a.$.setTimeout(function(){window.onscroll=window.onscroll&&window.onscroll.prevScrollHandler||null},0),J=null)}var v=CKEDITOR.tools.cssLength,W='\\x3cdiv class\\x3d\"cke_reset_all {editorId} {editorDialogClass} {hidpi}\" dir\\x3d\"{langDir}\" lang\\x3d\"{langCode}\" role\\x3d\"dialog\" aria-labelledby\\x3d\"cke_dialog_title_{id}\"\\x3e\\x3ctable class\\x3d\"cke_dialog '+\nCKEDITOR.env.cssClass+' cke_{langDir}\" style\\x3d\"position:absolute\" role\\x3d\"presentation\"\\x3e\\x3ctr\\x3e\\x3ctd role\\x3d\"presentation\"\\x3e\\x3cdiv class\\x3d\"cke_dialog_body\" role\\x3d\"presentation\"\\x3e\\x3cdiv id\\x3d\"cke_dialog_title_{id}\" class\\x3d\"cke_dialog_title\" role\\x3d\"presentation\"\\x3e\\x3c/div\\x3e\\x3ca id\\x3d\"cke_dialog_close_button_{id}\" class\\x3d\"cke_dialog_close_button\" href\\x3d\"javascript:void(0)\" title\\x3d\"{closeTitle}\" role\\x3d\"button\"\\x3e\\x3cspan class\\x3d\"cke_label\"\\x3eX\\x3c/span\\x3e\\x3c/a\\x3e\\x3cdiv id\\x3d\"cke_dialog_tabs_{id}\" class\\x3d\"cke_dialog_tabs\" role\\x3d\"tablist\"\\x3e\\x3c/div\\x3e\\x3ctable class\\x3d\"cke_dialog_contents\" role\\x3d\"presentation\"\\x3e\\x3ctr\\x3e\\x3ctd id\\x3d\"cke_dialog_contents_{id}\" class\\x3d\"cke_dialog_contents_body\" role\\x3d\"presentation\"\\x3e\\x3c/td\\x3e\\x3c/tr\\x3e\\x3ctr\\x3e\\x3ctd id\\x3d\"cke_dialog_footer_{id}\" class\\x3d\"cke_dialog_footer\" role\\x3d\"presentation\"\\x3e\\x3c/td\\x3e\\x3c/tr\\x3e\\x3c/table\\x3e\\x3c/div\\x3e\\x3c/td\\x3e\\x3c/tr\\x3e\\x3c/table\\x3e\\x3c/div\\x3e';\nCKEDITOR.dialog=function(a,b){function c(){var a=l._.focusList;a.sort(function(a,b){return a.tabIndex!=b.tabIndex?b.tabIndex-a.tabIndex:a.focusIndex-b.focusIndex});for(var b=a.length,c=0;c<b;c++)a[c].focusIndex=c}function d(a){var b=l._.focusList;a=a||0;if(!(1>b.length)){var c=l._.currentFocusIndex;l._.tabBarMode&&0>a&&(c=0);try{b[c].getInputElement().$.blur()}catch(e){}var d=c,g=1<l._.pageCount;do{d+=a;if(g&&!l._.tabBarMode&&(d==b.length||-1==d)){l._.tabBarMode=!0;l._.tabs[l._.currentTabId][0].focus();\nl._.currentFocusIndex=-1;return}d=(d+b.length)%b.length;if(d==c)break}while(a&&!b[d].isFocusable());b[d].focus();\"text\"==b[d].type&&b[d].select()}}function e(b){if(l==CKEDITOR.dialog._.currentTop){var c=b.data.getKeystroke(),e=\"rtl\"==a.lang.dir,g=[37,38,39,40];q=n=0;if(9==c||c==CKEDITOR.SHIFT+9)d(c==CKEDITOR.SHIFT+9?-1:1),q=1;else if(c==CKEDITOR.ALT+121&&!l._.tabBarMode&&1<l.getPageCount())l._.tabBarMode=!0,l._.tabs[l._.currentTabId][0].focus(),l._.currentFocusIndex=-1,q=1;else if(-1!=CKEDITOR.tools.indexOf(g,\nc)&&l._.tabBarMode)c=-1!=CKEDITOR.tools.indexOf([e?39:37,38],c)?x.call(l):A.call(l),l.selectPage(c),l._.tabs[c][0].focus(),q=1;else if(13!=c&&32!=c||!l._.tabBarMode)if(13==c)c=b.data.getTarget(),c.is(\"a\",\"button\",\"select\",\"textarea\")||c.is(\"input\")&&\"button\"==c.$.type||((c=this.getButton(\"ok\"))&&CKEDITOR.tools.setTimeout(c.click,0,c),q=1),n=1;else if(27==c)(c=this.getButton(\"cancel\"))?CKEDITOR.tools.setTimeout(c.click,0,c):!1!==this.fire(\"cancel\",{hide:!0}).hide&&this.hide(),n=1;else return;else this.selectPage(this._.currentTabId),\nthis._.tabBarMode=!1,this._.currentFocusIndex=-1,d(1),q=1;f(b)}}function f(a){q?a.data.preventDefault(1):n&&a.data.stopPropagation()}var g=CKEDITOR.dialog._.dialogDefinitions[b],h=CKEDITOR.tools.clone(aa),p=a.config.dialog_buttonsOrder||\"OS\",m=a.lang.dir,k={},q,n;(\"OS\"==p&&CKEDITOR.env.mac||\"rtl\"==p&&\"ltr\"==m||\"ltr\"==p&&\"rtl\"==m)&&h.buttons.reverse();g=CKEDITOR.tools.extend(g(a),h);g=CKEDITOR.tools.clone(g);g=new P(this,g);h=V(a);this._={editor:a,element:h.element,name:b,contentSize:{width:0,height:0},\nsize:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:!1,focusList:[],currentFocusIndex:0,hasFocus:!1};this.parts=h.parts;CKEDITOR.tools.setTimeout(function(){a.fire(\"ariaWidget\",this.parts.contents)},0,this);h={position:CKEDITOR.env.ie6Compat?\"absolute\":\"fixed\",top:0,visibility:\"hidden\"};h[\"rtl\"==m?\"right\":\"left\"]=0;this.parts.dialog.setStyles(h);CKEDITOR.event.call(this);this.definition=g=CKEDITOR.fire(\"dialogDefinition\",\n{name:b,definition:g},a).definition;if(!(\"removeDialogTabs\"in a._)&&a.config.removeDialogTabs){h=a.config.removeDialogTabs.split(\";\");for(m=0;m<h.length;m++)if(p=h[m].split(\":\"),2==p.length){var r=p[0];k[r]||(k[r]=[]);k[r].push(p[1])}a._.removeDialogTabs=k}if(a._.removeDialogTabs&&(k=a._.removeDialogTabs[b]))for(m=0;m<k.length;m++)g.removeContents(k[m]);if(g.onLoad)this.on(\"load\",g.onLoad);if(g.onShow)this.on(\"show\",g.onShow);if(g.onHide)this.on(\"hide\",g.onHide);if(g.onOk)this.on(\"ok\",function(b){a.fire(\"saveSnapshot\");\nsetTimeout(function(){a.fire(\"saveSnapshot\")},0);!1===g.onOk.call(this,b)&&(b.data.hide=!1)});this.state=CKEDITOR.DIALOG_STATE_IDLE;if(g.onCancel)this.on(\"cancel\",function(a){!1===g.onCancel.call(this,a)&&(a.data.hide=!1)});var l=this,t=function(a){var b=l._.contents,c=!1,d;for(d in b)for(var e in b[d])if(c=a.call(this,b[d][e]))return};this.on(\"ok\",function(a){t(function(b){if(b.validate){var c=b.validate(this),d=\"string\"==typeof c||!1===c;d&&(a.data.hide=!1,a.stop());T.call(b,!d,\"string\"==typeof c?\nc:void 0);return d}})},this,null,0);this.on(\"cancel\",function(b){t(function(c){if(c.isChanged())return a.config.dialog_noConfirmCancel||confirm(a.lang.common.confirmCancel)||(b.data.hide=!1),!0})},this,null,0);this.parts.close.on(\"click\",function(a){!1!==this.fire(\"cancel\",{hide:!0}).hide&&this.hide();a.data.preventDefault()},this);this.changeFocus=d;var y=this._.element;a.focusManager.add(y,1);this.on(\"show\",function(){y.on(\"keydown\",e,this);if(CKEDITOR.env.gecko)y.on(\"keypress\",f,this)});this.on(\"hide\",\nfunction(){y.removeListener(\"keydown\",e);CKEDITOR.env.gecko&&y.removeListener(\"keypress\",f);t(function(a){U.apply(a)})});this.on(\"iframeAdded\",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on(\"keydown\",e,this,null,0)});this.on(\"show\",function(){c();var b=1<l._.pageCount;a.config.dialog_startupFocusTab&&b?(l._.tabBarMode=!0,l._.tabs[l._.currentTabId][0].focus(),l._.currentFocusIndex=-1):this._.hasFocus||(this._.currentFocusIndex=b?-1:this._.focusList.length-1,g.onFocus?\n(b=g.onFocus.call(this))&&b.focus():d(1))},this,null,4294967295);if(CKEDITOR.env.ie6Compat)this.on(\"load\",function(){var a=this.getElement(),b=a.getFirst();b.remove();b.appendTo(a)},this);Y(this);Z(this);(new CKEDITOR.dom.text(g.title,CKEDITOR.document)).appendTo(this.parts.title);for(m=0;m<g.contents.length;m++)(k=g.contents[m])&&this.addPage(k);this.parts.tabs.on(\"click\",function(a){var b=a.data.getTarget();b.hasClass(\"cke_dialog_tab\")&&(b=b.$.id,this.selectPage(b.substring(4,b.lastIndexOf(\"_\"))),\nthis._.tabBarMode&&(this._.tabBarMode=!1,this._.currentFocusIndex=-1,d(1)),a.data.preventDefault())},this);m=[];k=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this,{type:\"hbox\",className:\"cke_dialog_footer_buttons\",widths:[],children:g.buttons},m).getChild();this.parts.footer.setHtml(m.join(\"\"));for(m=0;m<k.length;m++)this._.buttons[k[m].id]=k[m]};CKEDITOR.dialog.prototype={destroy:function(){this.hide();this._.element.remove()},resize:function(){return function(a,b){this._.contentSize&&this._.contentSize.width==\na&&this._.contentSize.height==b||(CKEDITOR.dialog.fire(\"resize\",{dialog:this,width:a,height:b},this._.editor),this.fire(\"resize\",{width:a,height:b},this._.editor),this.parts.contents.setStyles({width:a+\"px\",height:b+\"px\"}),\"rtl\"==this._.editor.lang.dir&&this._.position&&(this._.position.x=CKEDITOR.document.getWindow().getViewPaneSize().width-this._.contentSize.width-parseInt(this._.element.getFirst().getStyle(\"right\"),10)),this._.contentSize={width:a,height:b})}}(),getSize:function(){var a=this._.element.getFirst();\nreturn{width:a.$.offsetWidth||0,height:a.$.offsetHeight||0}},move:function(a,b,c){var d=this._.element.getFirst(),e=\"rtl\"==this._.editor.lang.dir,f=\"fixed\"==d.getComputedStyle(\"position\");CKEDITOR.env.ie&&d.setStyle(\"zoom\",\"100%\");f&&this._.position&&this._.position.x==a&&this._.position.y==b||(this._.position={x:a,y:b},f||(f=CKEDITOR.document.getWindow().getScrollPosition(),a+=f.x,b+=f.y),e&&(f=this.getSize(),a=CKEDITOR.document.getWindow().getViewPaneSize().width-f.width-a),b={top:(0<b?b:0)+\"px\"},\nb[e?\"right\":\"left\"]=(0<a?a:0)+\"px\",d.setStyles(b),c&&(this._.moved=1))},getPosition:function(){return CKEDITOR.tools.extend({},this._.position)},show:function(){var a=this._.element,b=this.definition;a.getParent()&&a.getParent().equals(CKEDITOR.document.getBody())?a.setStyle(\"display\",\"block\"):a.appendTo(CKEDITOR.document.getBody());this.resize(this._.contentSize&&this._.contentSize.width||b.width||b.minWidth,this._.contentSize&&this._.contentSize.height||b.height||b.minHeight);this.reset();this.selectPage(this.definition.contents[0].id);\nnull===CKEDITOR.dialog._.currentZIndex&&(CKEDITOR.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex);this._.element.getFirst().setStyle(\"z-index\",CKEDITOR.dialog._.currentZIndex+=10);null===CKEDITOR.dialog._.currentTop?(CKEDITOR.dialog._.currentTop=this,this._.parentDialog=null,N(this._.editor)):(this._.parentDialog=CKEDITOR.dialog._.currentTop,this._.parentDialog.getElement().getFirst().$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2),CKEDITOR.dialog._.currentTop=this);\na.on(\"keydown\",Q);a.on(\"keyup\",R);this._.hasFocus=!1;for(var c in b.contents)if(b.contents[c]){var a=b.contents[c],d=this._.tabs[a.id],e=a.requiredContent,f=0;if(d){for(var g in this._.contents[a.id]){var h=this._.contents[a.id][g];\"hbox\"!=h.type&&\"vbox\"!=h.type&&h.getInputElement()&&(h.requiredContent&&!this._.editor.activeFilter.check(h.requiredContent)?h.disable():(h.enable(),f++))}!f||e&&!this._.editor.activeFilter.check(e)?d[0].addClass(\"cke_dialog_tab_disabled\"):d[0].removeClass(\"cke_dialog_tab_disabled\")}}CKEDITOR.tools.setTimeout(function(){this.layout();\nX(this);this.parts.dialog.setStyle(\"visibility\",\"\");this.fireOnce(\"load\",{});CKEDITOR.ui.fire(\"ready\",this);this.fire(\"show\",{});this._.editor.fire(\"dialogShow\",this);this._.parentDialog||this._.editor.focusManager.lock();this.foreach(function(a){a.setInitValue&&a.setInitValue()})},100,this)},layout:function(){var a=this.parts.dialog,b=this.getSize(),c=CKEDITOR.document.getWindow().getViewPaneSize(),d=(c.width-b.width)/2,e=(c.height-b.height)/2;CKEDITOR.env.ie6Compat||(b.height+(0<e?e:0)>c.height||\nb.width+(0<d?d:0)>c.width?a.setStyle(\"position\",\"absolute\"):a.setStyle(\"position\",\"fixed\"));this.move(this._.moved?this._.position.x:d,this._.moved?this._.position.y:e)},foreach:function(a){for(var b in this._.contents)for(var c in this._.contents[b])a.call(this,this._.contents[b][c]);return this},reset:function(){var a=function(a){a.reset&&a.reset(1)};return function(){this.foreach(a);return this}}(),setupContent:function(){var a=arguments;this.foreach(function(b){b.setup&&b.setup.apply(b,a)})},\ncommitContent:function(){var a=arguments;this.foreach(function(b){CKEDITOR.env.ie&&this._.currentFocusIndex==b.focusIndex&&b.getInputElement().$.blur();b.commit&&b.commit.apply(b,a)})},hide:function(){if(this.parts.dialog.isVisible()){this.fire(\"hide\",{});this._.editor.fire(\"dialogHide\",this);this.selectPage(this._.tabIdList[0]);var a=this._.element;a.setStyle(\"display\",\"none\");this.parts.dialog.setStyle(\"visibility\",\"hidden\");for(ba(this);CKEDITOR.dialog._.currentTop!=this;)CKEDITOR.dialog._.currentTop.hide();\nif(this._.parentDialog){var b=this._.parentDialog.getElement().getFirst();b.setStyle(\"z-index\",parseInt(b.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else O(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex-=10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener(\"keydown\",Q);a.removeListener(\"keyup\",R);var c=this._.editor;c.focus();setTimeout(function(){c.focusManager.unlock();CKEDITOR.env.iOS&&c.window.focus()},0)}delete this._.parentDialog;\nthis.foreach(function(a){a.resetInitValue&&a.resetInitValue()});this.setState(CKEDITOR.DIALOG_STATE_IDLE)}},addPage:function(a){if(!a.requiredContent||this._.editor.filter.check(a.requiredContent)){for(var b=[],c=a.label?' title\\x3d\"'+CKEDITOR.tools.htmlEncode(a.label)+'\"':\"\",d=CKEDITOR.dialog._.uiElementBuilders.vbox.build(this,{type:\"vbox\",className:\"cke_dialog_page_contents\",children:a.elements,expand:!!a.expand,padding:a.padding,style:a.style||\"width: 100%;\"},b),e=this._.contents[a.id]={},f=d.getChild(),\ng=0;d=f.shift();)d.notAllowed||\"hbox\"==d.type||\"vbox\"==d.type||g++,e[d.id]=d,\"function\"==typeof d.getChild&&f.push.apply(f,d.getChild());g||(a.hidden=!0);b=CKEDITOR.dom.element.createFromHtml(b.join(\"\"));b.setAttribute(\"role\",\"tabpanel\");d=CKEDITOR.env;e=\"cke_\"+a.id+\"_\"+CKEDITOR.tools.getNextNumber();c=CKEDITOR.dom.element.createFromHtml(['\\x3ca class\\x3d\"cke_dialog_tab\"',0<this._.pageCount?\" cke_last\":\"cke_first\",c,a.hidden?' style\\x3d\"display:none\"':\"\",' id\\x3d\"',e,'\"',d.gecko&&!d.hc?\"\":' href\\x3d\"javascript:void(0)\"',\n' tabIndex\\x3d\"-1\" hidefocus\\x3d\"true\" role\\x3d\"tab\"\\x3e',a.label,\"\\x3c/a\\x3e\"].join(\"\"));b.setAttribute(\"aria-labelledby\",e);this._.tabs[a.id]=[c,b];this._.tabIdList.push(a.id);!a.hidden&&this._.pageCount++;this._.lastTab=c;this.updateStyle();b.setAttribute(\"name\",a.id);b.appendTo(this.parts.contents);c.unselectable();this.parts.tabs.append(c);a.accessKey&&(S(this,this,\"CTRL+\"+a.accessKey,ca,da),this._.accessKeyMap[\"CTRL+\"+a.accessKey]=a.id)}},selectPage:function(a){if(this._.currentTabId!=a&&!this._.tabs[a][0].hasClass(\"cke_dialog_tab_disabled\")&&\n!1!==this.fire(\"selectPage\",{page:a,currentPage:this._.currentTabId})){for(var b in this._.tabs){var c=this._.tabs[b][0],d=this._.tabs[b][1];b!=a&&(c.removeClass(\"cke_dialog_tab_selected\"),d.hide());d.setAttribute(\"aria-hidden\",b!=a)}var e=this._.tabs[a];e[0].addClass(\"cke_dialog_tab_selected\");CKEDITOR.env.ie6Compat||CKEDITOR.env.ie7Compat?(K(e[1]),e[1].show(),setTimeout(function(){K(e[1],1)},0)):e[1].show();this._.currentTabId=a;this._.currentTabIndex=CKEDITOR.tools.indexOf(this._.tabIdList,a)}},\nupdateStyle:function(){this.parts.dialog[(1===this._.pageCount?\"add\":\"remove\")+\"Class\"](\"cke_single_page\")},hidePage:function(a){var b=this._.tabs[a]&&this._.tabs[a][0];b&&1!=this._.pageCount&&b.isVisible()&&(a==this._.currentTabId&&this.selectPage(x.call(this)),b.hide(),this._.pageCount--,this.updateStyle())},showPage:function(a){if(a=this._.tabs[a]&&this._.tabs[a][0])a.show(),this._.pageCount++,this.updateStyle()},getElement:function(){return this._.element},getName:function(){return this._.name},\ngetContentElement:function(a,b){var c=this._.contents[a];return c&&c[b]},getValueOf:function(a,b){return this.getContentElement(a,b).getValue()},setValueOf:function(a,b,c){return this.getContentElement(a,b).setValue(c)},getButton:function(a){return this._.buttons[a]},click:function(a){return this._.buttons[a].click()},disableButton:function(a){return this._.buttons[a].disable()},enableButton:function(a){return this._.buttons[a].enable()},getPageCount:function(){return this._.pageCount},getParentEditor:function(){return this._.editor},\ngetSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement()},addFocusable:function(a,b){if(\"undefined\"==typeof b)b=this._.focusList.length,this._.focusList.push(new L(this,a,b));else{this._.focusList.splice(b,0,new L(this,a,b));for(var c=b+1;c<this._.focusList.length;c++)this._.focusList[c].focusIndex++}},setState:function(a){if(this.state!=a){this.state=a;if(a==CKEDITOR.DIALOG_STATE_BUSY){if(!this.parts.spinner){var b=this.getParentEditor().lang.dir,c={attributes:{\"class\":\"cke_dialog_spinner\"},\nstyles:{\"float\":\"rtl\"==b?\"right\":\"left\"}};c.styles[\"margin-\"+(\"rtl\"==b?\"left\":\"right\")]=\"8px\";this.parts.spinner=CKEDITOR.document.createElement(\"div\",c);this.parts.spinner.setHtml(\"\\x26#8987;\");this.parts.spinner.appendTo(this.parts.title,1)}this.parts.spinner.show();this.getButton(\"ok\").disable()}else a==CKEDITOR.DIALOG_STATE_IDLE&&(this.parts.spinner&&this.parts.spinner.hide(),this.getButton(\"ok\").enable());this.fire(\"state\",a)}}};CKEDITOR.tools.extend(CKEDITOR.dialog,{add:function(a,b){this._.dialogDefinitions[a]&&\n\"function\"!=typeof b||(this._.dialogDefinitions[a]=b)},exists:function(a){return!!this._.dialogDefinitions[a]},getCurrent:function(){return CKEDITOR.dialog._.currentTop},isTabEnabled:function(a,b,c){a=a.config.removeDialogTabs;return!(a&&a.match(new RegExp(\"(?:^|;)\"+b+\":\"+c+\"(?:$|;)\",\"i\")))},okButton:function(){var a=function(a,c){c=c||{};return CKEDITOR.tools.extend({id:\"ok\",type:\"button\",label:a.lang.common.ok,\"class\":\"cke_dialog_ui_button_ok\",onClick:function(a){a=a.data.dialog;!1!==a.fire(\"ok\",\n{hide:!0}).hide&&a.hide()}},c,!0)};a.type=\"button\";a.override=function(b){return CKEDITOR.tools.extend(function(c){return a(c,b)},{type:\"button\"},!0)};return a}(),cancelButton:function(){var a=function(a,c){c=c||{};return CKEDITOR.tools.extend({id:\"cancel\",type:\"button\",label:a.lang.common.cancel,\"class\":\"cke_dialog_ui_button_cancel\",onClick:function(a){a=a.data.dialog;!1!==a.fire(\"cancel\",{hide:!0}).hide&&a.hide()}},c,!0)};a.type=\"button\";a.override=function(b){return CKEDITOR.tools.extend(function(c){return a(c,\nb)},{type:\"button\"},!0)};return a}(),addUIElement:function(a,b){this._.uiElementBuilders[a]=b}});CKEDITOR.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};CKEDITOR.event.implementOn(CKEDITOR.dialog);CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype);var aa={resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]},D=function(a,b,c){for(var d=0,e;e=a[d];d++)if(e.id==b||c&&e[c]&&(e=D(e[c],\nb,c)))return e;return null},E=function(a,b,c,d,e){if(c){for(var f=0,g;g=a[f];f++){if(g.id==c)return a.splice(f,0,b),b;if(d&&g[d]&&(g=E(g[d],b,c,d,!0)))return g}if(e)return null}a.push(b);return b},F=function(a,b,c){for(var d=0,e;e=a[d];d++){if(e.id==b)return a.splice(d,1);if(c&&e[c]&&(e=F(e[c],b,c)))return e}return null},P=function(a,b){this.dialog=a;for(var c=b.contents,d=0,e;e=c[d];d++)c[d]=e&&new M(a,e);CKEDITOR.tools.extend(this,b)};P.prototype={getContents:function(a){return D(this.contents,\na)},getButton:function(a){return D(this.buttons,a)},addContents:function(a,b){return E(this.contents,a,b)},addButton:function(a,b){return E(this.buttons,a,b)},removeContents:function(a){F(this.contents,a)},removeButton:function(a){F(this.buttons,a)}};M.prototype={get:function(a){return D(this.elements,a,\"children\")},add:function(a,b){return E(this.elements,a,b,\"children\")},remove:function(a){F(this.elements,a,\"children\")}};var J,z={},u,w={},Q=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=\na.data.$.altKey,d=a.data.$.shiftKey,e=String.fromCharCode(a.data.$.keyCode);(b=w[(b?\"CTRL+\":\"\")+(c?\"ALT+\":\"\")+(d?\"SHIFT+\":\"\")+e])&&b.length&&(b=b[b.length-1],b.keydown&&b.keydown.call(b.uiElement,b.dialog,b.key),a.data.preventDefault())},R=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,d=a.data.$.shiftKey,e=String.fromCharCode(a.data.$.keyCode);(b=w[(b?\"CTRL+\":\"\")+(c?\"ALT+\":\"\")+(d?\"SHIFT+\":\"\")+e])&&b.length&&(b=b[b.length-1],b.keyup&&(b.keyup.call(b.uiElement,b.dialog,b.key),\na.data.preventDefault()))},S=function(a,b,c,d,e){(w[c]||(w[c]=[])).push({uiElement:a,dialog:b,key:c,keyup:e||a.accessKeyUp,keydown:d||a.accessKeyDown})},ba=function(a){for(var b in w){for(var c=w[b],d=c.length-1;0<=d;d--)c[d].dialog!=a&&c[d].uiElement!=a||c.splice(d,1);0===c.length&&delete w[b]}},da=function(a,b){a._.accessKeyMap[b]&&a.selectPage(a._.accessKeyMap[b])},ca=function(){};(function(){CKEDITOR.ui.dialog={uiElement:function(a,b,c,d,e,f,g){if(!(4>arguments.length)){var h=(d.call?d(b):d)||\n\"div\",p=[\"\\x3c\",h,\" \"],m=(e&&e.call?e(b):e)||{},k=(f&&f.call?f(b):f)||{},q=(g&&g.call?g.call(this,a,b):g)||\"\",n=this.domId=k.id||CKEDITOR.tools.getNextId()+\"_uiElement\";b.requiredContent&&!a.getParentEditor().filter.check(b.requiredContent)&&(m.display=\"none\",this.notAllowed=!0);k.id=n;var r={};b.type&&(r[\"cke_dialog_ui_\"+b.type]=1);b.className&&(r[b.className]=1);b.disabled&&(r.cke_disabled=1);for(var l=k[\"class\"]&&k[\"class\"].split?k[\"class\"].split(\" \"):[],n=0;n<l.length;n++)l[n]&&(r[l[n]]=1);l=\n[];for(n in r)l.push(n);k[\"class\"]=l.join(\" \");b.title&&(k.title=b.title);r=(b.style||\"\").split(\";\");b.align&&(l=b.align,m[\"margin-left\"]=\"left\"==l?0:\"auto\",m[\"margin-right\"]=\"right\"==l?0:\"auto\");for(n in m)r.push(n+\":\"+m[n]);b.hidden&&r.push(\"display:none\");for(n=r.length-1;0<=n;n--)\"\"===r[n]&&r.splice(n,1);0<r.length&&(k.style=(k.style?k.style+\"; \":\"\")+r.join(\"; \"));for(n in k)p.push(n+'\\x3d\"'+CKEDITOR.tools.htmlEncode(k[n])+'\" ');p.push(\"\\x3e\",q,\"\\x3c/\",h,\"\\x3e\");c.push(p.join(\"\"));(this._||(this._=\n{})).dialog=a;\"boolean\"==typeof b.isChanged&&(this.isChanged=function(){return b.isChanged});\"function\"==typeof b.isChanged&&(this.isChanged=b.isChanged);\"function\"==typeof b.setValue&&(this.setValue=CKEDITOR.tools.override(this.setValue,function(a){return function(c){a.call(this,b.setValue.call(this,c))}}));\"function\"==typeof b.getValue&&(this.getValue=CKEDITOR.tools.override(this.getValue,function(a){return function(){return b.getValue.call(this,a.call(this))}}));CKEDITOR.event.implementOn(this);\nthis.registerEvents(b);this.accessKeyUp&&this.accessKeyDown&&b.accessKey&&S(this,a,\"CTRL+\"+b.accessKey);var t=this;a.on(\"load\",function(){var b=t.getInputElement();if(b){var c=t.type in{checkbox:1,ratio:1}&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?\"cke_dialog_ui_focused\":\"\";b.on(\"focus\",function(){a._.tabBarMode=!1;a._.hasFocus=!0;t.fire(\"focus\");c&&this.addClass(c)});b.on(\"blur\",function(){t.fire(\"blur\");c&&this.removeClass(c)})}});CKEDITOR.tools.extend(this,b);this.keyboardFocusable&&(this.tabIndex=\nb.tabIndex||0,this.focusIndex=a._.focusList.push(this)-1,this.on(\"focus\",function(){a._.currentFocusIndex=t.focusIndex}))}},hbox:function(a,b,c,d,e){if(!(4>arguments.length)){this._||(this._={});var f=this._.children=b,g=e&&e.widths||null,h=e&&e.height||null,p,m={role:\"presentation\"};e&&e.align&&(m.align=e.align);CKEDITOR.ui.dialog.uiElement.call(this,a,e||{type:\"hbox\"},d,\"table\",{},m,function(){var a=['\\x3ctbody\\x3e\\x3ctr class\\x3d\"cke_dialog_ui_hbox\"\\x3e'];for(p=0;p<c.length;p++){var b=\"cke_dialog_ui_hbox_child\",\nd=[];0===p&&(b=\"cke_dialog_ui_hbox_first\");p==c.length-1&&(b=\"cke_dialog_ui_hbox_last\");a.push('\\x3ctd class\\x3d\"',b,'\" role\\x3d\"presentation\" ');g?g[p]&&d.push(\"width:\"+v(g[p])):d.push(\"width:\"+Math.floor(100/c.length)+\"%\");h&&d.push(\"height:\"+v(h));e&&void 0!==e.padding&&d.push(\"padding:\"+v(e.padding));CKEDITOR.env.ie&&CKEDITOR.env.quirks&&f[p].align&&d.push(\"text-align:\"+f[p].align);0<d.length&&a.push('style\\x3d\"'+d.join(\"; \")+'\" ');a.push(\"\\x3e\",c[p],\"\\x3c/td\\x3e\")}a.push(\"\\x3c/tr\\x3e\\x3c/tbody\\x3e\");\nreturn a.join(\"\")})}},vbox:function(a,b,c,d,e){if(!(3>arguments.length)){this._||(this._={});var f=this._.children=b,g=e&&e.width||null,h=e&&e.heights||null;CKEDITOR.ui.dialog.uiElement.call(this,a,e||{type:\"vbox\"},d,\"div\",null,{role:\"presentation\"},function(){var b=['\\x3ctable role\\x3d\"presentation\" cellspacing\\x3d\"0\" border\\x3d\"0\" '];b.push('style\\x3d\"');e&&e.expand&&b.push(\"height:100%;\");b.push(\"width:\"+v(g||\"100%\"),\";\");CKEDITOR.env.webkit&&b.push(\"float:none;\");b.push('\"');b.push('align\\x3d\"',\nCKEDITOR.tools.htmlEncode(e&&e.align||(\"ltr\"==a.getParentEditor().lang.dir?\"left\":\"right\")),'\" ');b.push(\"\\x3e\\x3ctbody\\x3e\");for(var d=0;d<c.length;d++){var k=[];b.push('\\x3ctr\\x3e\\x3ctd role\\x3d\"presentation\" ');g&&k.push(\"width:\"+v(g||\"100%\"));h?k.push(\"height:\"+v(h[d])):e&&e.expand&&k.push(\"height:\"+Math.floor(100/c.length)+\"%\");e&&void 0!==e.padding&&k.push(\"padding:\"+v(e.padding));CKEDITOR.env.ie&&CKEDITOR.env.quirks&&f[d].align&&k.push(\"text-align:\"+f[d].align);0<k.length&&b.push('style\\x3d\"',\nk.join(\"; \"),'\" ');b.push(' class\\x3d\"cke_dialog_ui_vbox_child\"\\x3e',c[d],\"\\x3c/td\\x3e\\x3c/tr\\x3e\")}b.push(\"\\x3c/tbody\\x3e\\x3c/table\\x3e\");return b.join(\"\")})}}}})();CKEDITOR.ui.dialog.uiElement.prototype={getElement:function(){return CKEDITOR.document.getById(this.domId)},getInputElement:function(){return this.getElement()},getDialog:function(){return this._.dialog},setValue:function(a,b){this.getInputElement().setValue(a);!b&&this.fire(\"change\",{value:a});return this},getValue:function(){return this.getInputElement().getValue()},\nisChanged:function(){return!1},selectParentTab:function(){for(var a=this.getInputElement();(a=a.getParent())&&-1==a.$.className.search(\"cke_dialog_page_contents\"););if(!a)return this;a=a.getAttribute(\"name\");this._.dialog._.currentTabId!=a&&this._.dialog.selectPage(a);return this},focus:function(){this.selectParentTab().getInputElement().focus();return this},registerEvents:function(a){var b=/^on([A-Z]\\w+)/,c,d=function(a,b,c,d){b.on(\"load\",function(){a.getInputElement().on(c,d,a)})},e;for(e in a)if(c=\ne.match(b))this.eventProcessors[e]?this.eventProcessors[e].call(this,this._.dialog,a[e]):d(this,this._.dialog,c[1].toLowerCase(),a[e]);return this},eventProcessors:{onLoad:function(a,b){a.on(\"load\",b,this)},onShow:function(a,b){a.on(\"show\",b,this)},onHide:function(a,b){a.on(\"hide\",b,this)}},accessKeyDown:function(){this.focus()},accessKeyUp:function(){},disable:function(){var a=this.getElement();this.getInputElement().setAttribute(\"disabled\",\"true\");a.addClass(\"cke_disabled\")},enable:function(){var a=\nthis.getElement();this.getInputElement().removeAttribute(\"disabled\");a.removeClass(\"cke_disabled\")},isEnabled:function(){return!this.getElement().hasClass(\"cke_disabled\")},isVisible:function(){return this.getInputElement().isVisible()},isFocusable:function(){return this.isEnabled()&&this.isVisible()?!0:!1}};CKEDITOR.ui.dialog.hbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getChild:function(a){if(1>arguments.length)return this._.children.concat();a.splice||(a=[a]);return 2>\na.length?this._.children[a[0]]:this._.children[a[0]]&&this._.children[a[0]].getChild?this._.children[a[0]].getChild(a.slice(1,a.length)):null}},!0);CKEDITOR.ui.dialog.vbox.prototype=new CKEDITOR.ui.dialog.hbox;(function(){var a={build:function(a,c,d){for(var e=c.children,f,g=[],h=[],p=0;p<e.length&&(f=e[p]);p++){var m=[];g.push(m);h.push(CKEDITOR.dialog._.uiElementBuilders[f.type].build(a,f,m))}return new CKEDITOR.ui.dialog[c.type](a,h,g,d,c)}};CKEDITOR.dialog.addUIElement(\"hbox\",a);CKEDITOR.dialog.addUIElement(\"vbox\",\na)})();CKEDITOR.dialogCommand=function(a,b){this.dialogName=a;CKEDITOR.tools.extend(this,b,!0)};CKEDITOR.dialogCommand.prototype={exec:function(a){a.openDialog(this.dialogName)},canUndo:!1,editorFocus:1};(function(){var a=/^([a]|[^a])+$/,b=/^\\d*$/,c=/^\\d*(?:\\.\\d+)?$/,d=/^(((\\d*(\\.\\d+))|(\\d*))(px|\\%)?)?$/,e=/^(((\\d*(\\.\\d+))|(\\d*))(px|em|ex|in|cm|mm|pt|pc|\\%)?)?$/i,f=/^(\\s*[\\w-]+\\s*:\\s*[^:;]+(?:;|$))*$/;CKEDITOR.VALIDATE_OR=1;CKEDITOR.VALIDATE_AND=2;CKEDITOR.dialog.validate={functions:function(){var a=\narguments;return function(){var b=this&&this.getValue?this.getValue():a[0],c,d=CKEDITOR.VALIDATE_AND,e=[],f;for(f=0;f<a.length;f++)if(\"function\"==typeof a[f])e.push(a[f]);else break;f<a.length&&\"string\"==typeof a[f]&&(c=a[f],f++);f<a.length&&\"number\"==typeof a[f]&&(d=a[f]);var n=d==CKEDITOR.VALIDATE_AND?!0:!1;for(f=0;f<e.length;f++)n=d==CKEDITOR.VALIDATE_AND?n&&e[f](b):n||e[f](b);return n?!0:c}},regex:function(a,b){return function(c){c=this&&this.getValue?this.getValue():c;return a.test(c)?!0:b}},\nnotEmpty:function(b){return this.regex(a,b)},integer:function(a){return this.regex(b,a)},number:function(a){return this.regex(c,a)},cssLength:function(a){return this.functions(function(a){return e.test(CKEDITOR.tools.trim(a))},a)},htmlLength:function(a){return this.functions(function(a){return d.test(CKEDITOR.tools.trim(a))},a)},inlineStyle:function(a){return this.functions(function(a){return f.test(CKEDITOR.tools.trim(a))},a)},equals:function(a,b){return this.functions(function(b){return b==a},b)},\nnotEqual:function(a,b){return this.functions(function(b){return b!=a},b)}};CKEDITOR.on(\"instanceDestroyed\",function(a){if(CKEDITOR.tools.isEmpty(CKEDITOR.instances)){for(var b;b=CKEDITOR.dialog._.currentTop;)b.hide();for(var c in z)z[c].remove();z={}}a=a.editor._.storedDialogs;for(var d in a)a[d].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,b){var c=null,d=CKEDITOR.dialog._.dialogDefinitions[a];null===CKEDITOR.dialog._.currentTop&&N(this);if(\"function\"==typeof d)c=\nthis._.storedDialogs||(this._.storedDialogs={}),c=c[a]||(c[a]=new CKEDITOR.dialog(this,a)),b&&b.call(c,c),c.show();else{if(\"failed\"==d)throw O(this),Error('[CKEDITOR.dialog.openDialog] Dialog \"'+a+'\" failed when loading definition.');\"string\"==typeof d&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(d),function(){\"function\"!=typeof CKEDITOR.dialog._.dialogDefinitions[a]&&(CKEDITOR.dialog._.dialogDefinitions[a]=\"failed\");this.openDialog(a,b)},this,0,1)}CKEDITOR.skin.loadPart(\"dialog\");return c}})})();\nCKEDITOR.plugins.add(\"dialog\",{requires:\"dialogui\",init:function(x){x.on(\"doubleclick\",function(A){A.data.dialog&&x.openDialog(A.data.dialog)},null,null,999)}});CKEDITOR.plugins.add(\"about\",{requires:\"dialog\",init:function(a){var b=a.addCommand(\"about\",new CKEDITOR.dialogCommand(\"about\"));b.modes={wysiwyg:1,source:1};b.canUndo=!1;b.readOnly=1;a.ui.addButton&&a.ui.addButton(\"About\",{label:a.lang.about.title,command:\"about\",toolbar:\"about\"});CKEDITOR.dialog.add(\"about\",this.path+\"dialogs/about.js\")}});(function(){CKEDITOR.plugins.add(\"a11yhelp\",{requires:\"dialog\",availableLangs:{af:1,ar:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,\"de-ch\":1,el:1,en:1,\"en-gb\":1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,fr:1,\"fr-ca\":1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,pl:1,pt:1,\"pt-br\":1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,\"sr-latn\":1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,\"zh-cn\":1},init:function(b){var c=this;b.addCommand(\"a11yHelp\",{exec:function(){var a=b.langCode,a=c.availableLangs[a]?\na:c.availableLangs[a.replace(/-.*/,\"\")]?a.replace(/-.*/,\"\"):\"en\";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c.path+\"dialogs/lang/\"+a+\".js\"),function(){b.lang.a11yhelp=c.langEntries[a];b.openDialog(\"a11yHelp\")})},modes:{wysiwyg:1,source:1},readOnly:1,canUndo:!1});b.setKeystroke(CKEDITOR.ALT+48,\"a11yHelp\");CKEDITOR.dialog.add(\"a11yHelp\",this.path+\"dialogs/a11yhelp.js\");b.on(\"ariaEditorHelpLabel\",function(a){a.data.label=b.lang.common.editorHelp})}})})();CKEDITOR.plugins.add(\"basicstyles\",{init:function(c){var e=0,d=function(g,d,b,a){if(a){a=new CKEDITOR.style(a);var f=h[b];f.unshift(a);c.attachStyleStateChange(a,function(a){!c.readOnly&&c.getCommand(b).setState(a)});c.addCommand(b,new CKEDITOR.styleCommand(a,{contentForms:f}));c.ui.addButton&&c.ui.addButton(g,{label:d,command:b,toolbar:\"basicstyles,\"+(e+=10)})}},h={bold:[\"strong\",\"b\",[\"span\",function(a){a=a.styles[\"font-weight\"];return\"bold\"==a||700<=+a}]],italic:[\"em\",\"i\",[\"span\",function(a){return\"italic\"==\na.styles[\"font-style\"]}]],underline:[\"u\",[\"span\",function(a){return\"underline\"==a.styles[\"text-decoration\"]}]],strike:[\"s\",\"strike\",[\"span\",function(a){return\"line-through\"==a.styles[\"text-decoration\"]}]],subscript:[\"sub\"],superscript:[\"sup\"]},b=c.config,a=c.lang.basicstyles;d(\"Bold\",a.bold,\"bold\",b.coreStyles_bold);d(\"Italic\",a.italic,\"italic\",b.coreStyles_italic);d(\"Underline\",a.underline,\"underline\",b.coreStyles_underline);d(\"Strike\",a.strike,\"strike\",b.coreStyles_strike);d(\"Subscript\",a.subscript,\n\"subscript\",b.coreStyles_subscript);d(\"Superscript\",a.superscript,\"superscript\",b.coreStyles_superscript);c.setKeystroke([[CKEDITOR.CTRL+66,\"bold\"],[CKEDITOR.CTRL+73,\"italic\"],[CKEDITOR.CTRL+85,\"underline\"]])}});CKEDITOR.config.coreStyles_bold={element:\"strong\",overrides:\"b\"};CKEDITOR.config.coreStyles_italic={element:\"em\",overrides:\"i\"};CKEDITOR.config.coreStyles_underline={element:\"u\"};CKEDITOR.config.coreStyles_strike={element:\"s\",overrides:\"strike\"};CKEDITOR.config.coreStyles_subscript={element:\"sub\"};\nCKEDITOR.config.coreStyles_superscript={element:\"sup\"};(function(){var m={exec:function(g){var a=g.getCommand(\"blockquote\").state,k=g.getSelection(),c=k&&k.getRanges()[0];if(c){var h=k.createBookmarks();if(CKEDITOR.env.ie){var e=h[0].startNode,b=h[0].endNode,d;if(e&&\"blockquote\"==e.getParent().getName())for(d=e;d=d.getNext();)if(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()){e.move(d,!0);break}if(b&&\"blockquote\"==b.getParent().getName())for(d=b;d=d.getPrevious();)if(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()){b.move(d);break}}var f=c.createIterator();\nf.enlargeBr=g.config.enterMode!=CKEDITOR.ENTER_BR;if(a==CKEDITOR.TRISTATE_OFF){for(e=[];a=f.getNextParagraph();)e.push(a);1>e.length&&(a=g.document.createElement(g.config.enterMode==CKEDITOR.ENTER_P?\"p\":\"div\"),b=h.shift(),c.insertNode(a),a.append(new CKEDITOR.dom.text(\"﻿\",g.document)),c.moveToBookmark(b),c.selectNodeContents(a),c.collapse(!0),b=c.createBookmark(),e.push(a),h.unshift(b));d=e[0].getParent();c=[];for(b=0;b<e.length;b++)a=e[b],d=d.getCommonAncestor(a.getParent());for(a={table:1,tbody:1,\ntr:1,ol:1,ul:1};a[d.getName()];)d=d.getParent();for(b=null;0<e.length;){for(a=e.shift();!a.getParent().equals(d);)a=a.getParent();a.equals(b)||c.push(a);b=a}for(;0<c.length;)if(a=c.shift(),\"blockquote\"==a.getName()){for(b=new CKEDITOR.dom.documentFragment(g.document);a.getFirst();)b.append(a.getFirst().remove()),e.push(b.getLast());b.replace(a)}else e.push(a);c=g.document.createElement(\"blockquote\");for(c.insertBefore(e[0]);0<e.length;)a=e.shift(),c.append(a)}else if(a==CKEDITOR.TRISTATE_ON){b=[];\nfor(d={};a=f.getNextParagraph();){for(e=c=null;a.getParent();){if(\"blockquote\"==a.getParent().getName()){c=a.getParent();e=a;break}a=a.getParent()}c&&e&&!e.getCustomData(\"blockquote_moveout\")&&(b.push(e),CKEDITOR.dom.element.setMarker(d,e,\"blockquote_moveout\",!0))}CKEDITOR.dom.element.clearAllMarkers(d);a=[];e=[];for(d={};0<b.length;)f=b.shift(),c=f.getParent(),f.getPrevious()?f.getNext()?(f.breakParent(f.getParent()),e.push(f.getNext())):f.remove().insertAfter(c):f.remove().insertBefore(c),c.getCustomData(\"blockquote_processed\")||\n(e.push(c),CKEDITOR.dom.element.setMarker(d,c,\"blockquote_processed\",!0)),a.push(f);CKEDITOR.dom.element.clearAllMarkers(d);for(b=e.length-1;0<=b;b--){c=e[b];a:{d=c;for(var f=0,m=d.getChildCount(),l=void 0;f<m&&(l=d.getChild(f));f++)if(l.type==CKEDITOR.NODE_ELEMENT&&l.isBlockBoundary()){d=!1;break a}d=!0}d&&c.remove()}if(g.config.enterMode==CKEDITOR.ENTER_BR)for(c=!0;a.length;)if(f=a.shift(),\"div\"==f.getName()){b=new CKEDITOR.dom.documentFragment(g.document);!c||!f.getPrevious()||f.getPrevious().type==\nCKEDITOR.NODE_ELEMENT&&f.getPrevious().isBlockBoundary()||b.append(g.document.createElement(\"br\"));for(c=f.getNext()&&!(f.getNext().type==CKEDITOR.NODE_ELEMENT&&f.getNext().isBlockBoundary());f.getFirst();)f.getFirst().remove().appendTo(b);c&&b.append(g.document.createElement(\"br\"));b.replace(f);c=!1}}k.selectBookmarks(h);g.focus()}},refresh:function(g,a){this.setState(g.elementPath(a.block||a.blockLimit).contains(\"blockquote\",1)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)},context:\"blockquote\",allowedContent:\"blockquote\",\nrequiredContent:\"blockquote\"};CKEDITOR.plugins.add(\"blockquote\",{init:function(g){g.blockless||(g.addCommand(\"blockquote\",m),g.ui.addButton&&g.ui.addButton(\"Blockquote\",{label:g.lang.blockquote.toolbar,command:\"blockquote\",toolbar:\"blocks,10\"}))}})})();(function(){function r(b,a,c){a.type||(a.type=\"auto\");if(c&&!1===b.fire(\"beforePaste\",a)||!a.dataValue&&a.dataTransfer.isEmpty())return!1;a.dataValue||(a.dataValue=\"\");if(CKEDITOR.env.gecko&&\"drop\"==a.method&&b.toolbox)b.once(\"afterPaste\",function(){b.toolbox.focus()});return b.fire(\"paste\",a)}function y(b){function a(){var a=b.editable();if(CKEDITOR.plugins.clipboard.isCustomCopyCutSupported){var d=function(a){b.readOnly&&\"cut\"==a.name||n.initPasteDataTransfer(a,b);a.data.preventDefault()};a.on(\"copy\",\nd);a.on(\"cut\",d);a.on(\"cut\",function(){b.readOnly||b.extractSelectedHtml()},null,null,999)}a.on(n.mainPasteEvent,function(b){\"beforepaste\"==n.mainPasteEvent&&p||k(b)});\"beforepaste\"==n.mainPasteEvent&&(a.on(\"paste\",function(a){v||(e(),a.data.preventDefault(),k(a),f(\"paste\")||b.openDialog(\"paste\"))}),a.on(\"contextmenu\",g,null,null,0),a.on(\"beforepaste\",function(b){!b.data||b.data.$.ctrlKey||b.data.$.shiftKey||g()},null,null,0));a.on(\"beforecut\",function(){!p&&h(b)});var c;a.attachListener(CKEDITOR.env.ie?\na:b.document.getDocumentElement(),\"mouseup\",function(){c=setTimeout(function(){t()},0)});b.on(\"destroy\",function(){clearTimeout(c)});a.on(\"keyup\",t)}function c(a){return{type:a,canUndo:\"cut\"==a,startDisabled:!0,exec:function(){\"cut\"==this.type&&h();var a;var d=this.type;if(CKEDITOR.env.ie)a=f(d);else try{a=b.document.$.execCommand(d,!1,null)}catch(c){a=!1}a||b.showNotification(b.lang.clipboard[this.type+\"Error\"]);return a}}}function d(){return{canUndo:!1,async:!0,exec:function(b,a){var d=function(a,\nd){a&&r(b,a,!!d);b.fire(\"afterCommandExec\",{name:\"paste\",command:c,returnValue:!!a})},c=this;\"string\"==typeof a?d({dataValue:a,method:\"paste\",dataTransfer:n.initPasteDataTransfer()},1):b.getClipboardData(d)}}}function e(){v=1;setTimeout(function(){v=0},100)}function g(){p=1;setTimeout(function(){p=0},10)}function f(a){var d=b.document,c=d.getBody(),e=!1,f=function(){e=!0};c.on(a,f);7<CKEDITOR.env.version?d.$.execCommand(a):d.$.selection.createRange().execCommand(a);c.removeListener(a,f);return e}\nfunction h(){if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var a=b.getSelection(),d,c,e;a.getType()==CKEDITOR.SELECTION_ELEMENT&&(d=a.getSelectedElement())&&(c=a.getRanges()[0],e=b.document.createText(\"\"),e.insertBefore(d),c.setStartBefore(e),c.setEndAfter(d),a.selectRanges([c]),setTimeout(function(){d.getParent()&&(e.remove(),a.selectElement(d))},0))}}function l(a,d){var c=b.document,e=b.editable(),f=function(b){b.cancel()},q;if(!c.getById(\"cke_pastebin\")){var g=b.getSelection(),h=g.createBookmarks();\nCKEDITOR.env.ie&&g.root.fire(\"selectionchange\");var m=new CKEDITOR.dom.element(!CKEDITOR.env.webkit&&!e.is(\"body\")||CKEDITOR.env.ie?\"div\":\"body\",c);m.setAttributes({id:\"cke_pastebin\",\"data-cke-temp\":\"1\"});var k=0,c=c.getWindow();CKEDITOR.env.webkit?(e.append(m),m.addClass(\"cke_editable\"),e.is(\"body\")||(k=\"static\"!=e.getComputedStyle(\"position\")?e:CKEDITOR.dom.element.get(e.$.offsetParent),k=k.getDocumentPosition().y)):e.getAscendant(CKEDITOR.env.ie?\"body\":\"html\",1).append(m);m.setStyles({position:\"absolute\",\ntop:c.getScrollPosition().y-k+10+\"px\",width:\"1px\",height:Math.max(1,c.getViewPaneSize().height-20)+\"px\",overflow:\"hidden\",margin:0,padding:0});CKEDITOR.env.safari&&m.setStyles(CKEDITOR.tools.cssVendorPrefix(\"user-select\",\"text\"));(k=m.getParent().isReadOnly())?(m.setOpacity(0),m.setAttribute(\"contenteditable\",!0)):m.setStyle(\"ltr\"==b.config.contentsLangDirection?\"left\":\"right\",\"-1000px\");b.on(\"selectionChange\",f,null,null,0);if(CKEDITOR.env.webkit||CKEDITOR.env.gecko)q=e.once(\"blur\",f,null,null,-100);\nk&&m.focus();k=new CKEDITOR.dom.range(m);k.selectNodeContents(m);var t=k.select();CKEDITOR.env.ie&&(q=e.once(\"blur\",function(){b.lockSelection(t)}));var l=CKEDITOR.document.getWindow().getScrollPosition().y;setTimeout(function(){CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=l);q&&q.removeListener();CKEDITOR.env.ie&&e.focus();g.selectBookmarks(h);m.remove();var a;CKEDITOR.env.webkit&&(a=m.getFirst())&&a.is&&a.hasClass(\"Apple-style-span\")&&(m=a);b.removeListener(\"selectionChange\",f);\nd(m.getHtml())},0)}}function z(){if(\"paste\"==n.mainPasteEvent)return b.fire(\"beforePaste\",{type:\"auto\",method:\"paste\"}),!1;b.focus();e();var a=b.focusManager;a.lock();if(b.editable().fire(n.mainPasteEvent)&&!f(\"paste\"))return a.unlock(),!1;a.unlock();return!0}function q(a){if(\"wysiwyg\"==b.mode)switch(a.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:a=b.editable();e();\"paste\"==n.mainPasteEvent&&a.fire(\"beforepaste\");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+46:b.fire(\"saveSnapshot\"),\nsetTimeout(function(){b.fire(\"saveSnapshot\")},50)}}function k(a){var d={type:\"auto\",method:\"paste\",dataTransfer:n.initPasteDataTransfer(a)};d.dataTransfer.cacheData();var c=!1!==b.fire(\"beforePaste\",d);c&&n.canClipboardApiBeTrusted(d.dataTransfer,b)?(a.data.preventDefault(),setTimeout(function(){r(b,d)},0)):l(a,function(a){d.dataValue=a.replace(/<span[^>]+data-cke-bookmark[^<]*?<\\/span>/ig,\"\");c&&r(b,d)})}function t(){if(\"wysiwyg\"==b.mode){var a=u(\"paste\");b.getCommand(\"cut\").setState(u(\"cut\"));b.getCommand(\"copy\").setState(u(\"copy\"));\nb.getCommand(\"paste\").setState(a);b.fire(\"pasteState\",a)}}function u(a){if(w&&a in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if(\"paste\"==a)return CKEDITOR.TRISTATE_OFF;a=b.getSelection();var d=a.getRanges();return a.getType()==CKEDITOR.SELECTION_NONE||1==d.length&&d[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var n=CKEDITOR.plugins.clipboard,p=0,v=0,w=0;(function(){b.on(\"key\",q);b.on(\"contentDom\",a);b.on(\"selectionChange\",function(b){w=b.data.selection.getRanges()[0].checkReadOnly();\nt()});b.contextMenu&&b.contextMenu.addListener(function(b,a){w=a.getRanges()[0].checkReadOnly();return{cut:u(\"cut\"),copy:u(\"copy\"),paste:u(\"paste\")}})})();(function(){function a(d,c,e,f,q){var g=b.lang.clipboard[c];b.addCommand(c,e);b.ui.addButton&&b.ui.addButton(d,{label:g,command:c,toolbar:\"clipboard,\"+f});b.addMenuItems&&b.addMenuItem(c,{label:g,command:c,group:\"clipboard\",order:q})}a(\"Cut\",\"cut\",c(\"cut\"),10,1);a(\"Copy\",\"copy\",c(\"copy\"),20,4);a(\"Paste\",\"paste\",d(),30,8)})();b.getClipboardData=\nfunction(a,d){function c(a){a.removeListener();a.cancel();d(a.data)}function e(a){a.removeListener();a.cancel();k=!0;d({type:g,dataValue:a.data.dataValue,dataTransfer:a.data.dataTransfer,method:\"paste\"})}function f(){this.customTitle=a&&a.title}var q=!1,g=\"auto\",k=!1;d||(d=a,a=null);b.on(\"paste\",c,null,null,0);b.on(\"beforePaste\",function(a){a.removeListener();q=!0;g=a.data.type},null,null,1E3);!1===z()&&(b.removeListener(\"paste\",c),q&&b.fire(\"pasteDialog\",f)?(b.on(\"pasteDialogCommit\",e),b.on(\"dialogHide\",\nfunction(a){a.removeListener();a.data.removeListener(\"pasteDialogCommit\",e);setTimeout(function(){k||d(null)},10)})):d(null))}}function A(b){if(CKEDITOR.env.webkit){if(!b.match(/^[^<]*$/g)&&!b.match(/^(<div><br( ?\\/)?><\\/div>|<div>[^<]*<\\/div>)*$/gi))return\"html\"}else if(CKEDITOR.env.ie){if(!b.match(/^([^<]|<br( ?\\/)?>)*$/gi)&&!b.match(/^(<p>([^<]|<br( ?\\/)?>)*<\\/p>|(\\r\\n))*$/gi))return\"html\"}else if(CKEDITOR.env.gecko){if(!b.match(/^([^<]|<br( ?\\/)?>)*$/gi))return\"html\"}else return\"html\";return\"htmlifiedtext\"}\nfunction B(b,a){function c(a){return CKEDITOR.tools.repeat(\"\\x3c/p\\x3e\\x3cp\\x3e\",~~(a/2))+(1==a%2?\"\\x3cbr\\x3e\":\"\")}a=a.replace(/\\s+/g,\" \").replace(/> +</g,\"\\x3e\\x3c\").replace(/<br ?\\/>/gi,\"\\x3cbr\\x3e\");a=a.replace(/<\\/?[A-Z]+>/g,function(a){return a.toLowerCase()});if(a.match(/^[^<]$/))return a;CKEDITOR.env.webkit&&-1<a.indexOf(\"\\x3cdiv\\x3e\")&&(a=a.replace(/^(<div>(<br>|)<\\/div>)(?!$|(<div>(<br>|)<\\/div>))/g,\"\\x3cbr\\x3e\").replace(/^(<div>(<br>|)<\\/div>){2}(?!$)/g,\"\\x3cdiv\\x3e\\x3c/div\\x3e\"),a.match(/<div>(<br>|)<\\/div>/)&&\n(a=\"\\x3cp\\x3e\"+a.replace(/(<div>(<br>|)<\\/div>)+/g,function(a){return c(a.split(\"\\x3c/div\\x3e\\x3cdiv\\x3e\").length+1)})+\"\\x3c/p\\x3e\"),a=a.replace(/<\\/div><div>/g,\"\\x3cbr\\x3e\"),a=a.replace(/<\\/?div>/g,\"\"));CKEDITOR.env.gecko&&b.enterMode!=CKEDITOR.ENTER_BR&&(CKEDITOR.env.gecko&&(a=a.replace(/^<br><br>$/,\"\\x3cbr\\x3e\")),-1<a.indexOf(\"\\x3cbr\\x3e\\x3cbr\\x3e\")&&(a=\"\\x3cp\\x3e\"+a.replace(/(<br>){2,}/g,function(a){return c(a.length/4)})+\"\\x3c/p\\x3e\"));return C(b,a)}function D(){function b(){var a={},b;for(b in CKEDITOR.dtd)\"$\"!=\nb.charAt(0)&&\"div\"!=b&&\"span\"!=b&&(a[b]=1);return a}var a={};return{get:function(c){return\"plain-text\"==c?a.plainText||(a.plainText=new CKEDITOR.filter(\"br\")):\"semantic-content\"==c?((c=a.semanticContent)||(c=new CKEDITOR.filter,c.allow({$1:{elements:b(),attributes:!0,styles:!1,classes:!1}}),c=a.semanticContent=c),c):c?new CKEDITOR.filter(c):null}}}function x(b,a,c){a=CKEDITOR.htmlParser.fragment.fromHtml(a);var d=new CKEDITOR.htmlParser.basicWriter;c.applyTo(a,!0,!1,b.activeEnterMode);a.writeHtml(d);\nreturn d.getHtml()}function C(b,a){b.enterMode==CKEDITOR.ENTER_BR?a=a.replace(/(<\\/p><p>)+/g,function(a){return CKEDITOR.tools.repeat(\"\\x3cbr\\x3e\",a.length/7*2)}).replace(/<\\/?p>/g,\"\"):b.enterMode==CKEDITOR.ENTER_DIV&&(a=a.replace(/<(\\/)?p>/g,\"\\x3c$1div\\x3e\"));return a}function E(b){b.data.preventDefault();b.data.$.dataTransfer.dropEffect=\"none\"}function F(b){var a=CKEDITOR.plugins.clipboard;b.on(\"contentDom\",function(){function c(a,d,c){d.select();r(b,{dataTransfer:c,method:\"drop\"},1);c.sourceEditor.fire(\"saveSnapshot\");\nc.sourceEditor.editable().extractHtmlFromRange(a);c.sourceEditor.getSelection().selectRanges([a]);c.sourceEditor.fire(\"saveSnapshot\")}function d(d,c){d.select();r(b,{dataTransfer:c,method:\"drop\"},1);a.resetDragDataTransfer()}function e(a,d,c){var e={$:a.data.$,target:a.data.getTarget()};d&&(e.dragRange=d);c&&(e.dropRange=c);!1===b.fire(a.name,e)&&a.data.preventDefault()}function g(a){a.type!=CKEDITOR.NODE_ELEMENT&&(a=a.getParent());return a.getChildCount()}var f=b.editable(),h=CKEDITOR.plugins.clipboard.getDropTarget(b),\nl=b.ui.space(\"top\"),p=b.ui.space(\"bottom\");a.preventDefaultDropOnElement(l);a.preventDefaultDropOnElement(p);f.attachListener(h,\"dragstart\",e);f.attachListener(b,\"dragstart\",a.resetDragDataTransfer,a,null,1);f.attachListener(b,\"dragstart\",function(d){a.initDragDataTransfer(d,b)},null,null,2);f.attachListener(b,\"dragstart\",function(){var d=a.dragRange=b.getSelection().getRanges()[0];CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(a.dragStartContainerChildCount=d?g(d.startContainer):null,a.dragEndContainerChildCount=\nd?g(d.endContainer):null)},null,null,100);f.attachListener(h,\"dragend\",e);f.attachListener(b,\"dragend\",a.initDragDataTransfer,a,null,1);f.attachListener(b,\"dragend\",a.resetDragDataTransfer,a,null,100);f.attachListener(h,\"dragover\",function(a){var b=a.data.getTarget();b&&b.is&&b.is(\"html\")?a.data.preventDefault():CKEDITOR.env.ie&&CKEDITOR.plugins.clipboard.isFileApiSupported&&a.data.$.dataTransfer.types.contains(\"Files\")&&a.data.preventDefault()});f.attachListener(h,\"drop\",function(d){if(!d.data.$.defaultPrevented){d.data.preventDefault();\nvar c=d.data.getTarget();if(!c.isReadOnly()||c.type==CKEDITOR.NODE_ELEMENT&&c.is(\"html\")){var c=a.getRangeAtDropPosition(d,b),f=a.dragRange;c&&e(d,f,c)}}},null,null,9999);f.attachListener(b,\"drop\",a.initDragDataTransfer,a,null,1);f.attachListener(b,\"drop\",function(e){if(e=e.data){var f=e.dropRange,g=e.dragRange,h=e.dataTransfer;h.getTransferType(b)==CKEDITOR.DATA_TRANSFER_INTERNAL?setTimeout(function(){a.internalDrop(g,f,h,b)},0):h.getTransferType(b)==CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?c(g,f,h):\nd(f,h)}},null,null,9999)})}CKEDITOR.plugins.add(\"clipboard\",{requires:\"dialog\",init:function(b){var a,c=D();b.config.forcePasteAsPlainText?a=\"plain-text\":b.config.pasteFilter?a=b.config.pasteFilter:!CKEDITOR.env.webkit||\"pasteFilter\"in b.config||(a=\"semantic-content\");b.pasteFilter=c.get(a);y(b);F(b);CKEDITOR.dialog.add(\"paste\",CKEDITOR.getUrl(this.path+\"dialogs/paste.js\"));b.on(\"paste\",function(a){a.data.dataTransfer||(a.data.dataTransfer=new CKEDITOR.plugins.clipboard.dataTransfer);if(!a.data.dataValue){var c=\na.data.dataTransfer,g=c.getData(\"text/html\");if(g)a.data.dataValue=g,a.data.type=\"html\";else if(g=c.getData(\"text/plain\"))a.data.dataValue=b.editable().transformPlainTextToHtml(g),a.data.type=\"text\"}},null,null,1);b.on(\"paste\",function(a){var b=a.data.dataValue,c=CKEDITOR.dtd.$block;-1<b.indexOf(\"Apple-\")&&(b=b.replace(/<span class=\"Apple-converted-space\">&nbsp;<\\/span>/gi,\" \"),\"html\"!=a.data.type&&(b=b.replace(/<span class=\"Apple-tab-span\"[^>]*>([^<]*)<\\/span>/gi,function(a,b){return b.replace(/\\t/g,\n\"\\x26nbsp;\\x26nbsp; \\x26nbsp;\")})),-1<b.indexOf('\\x3cbr class\\x3d\"Apple-interchange-newline\"\\x3e')&&(a.data.startsWithEOL=1,a.data.preSniffing=\"html\",b=b.replace(/<br class=\"Apple-interchange-newline\">/,\"\")),b=b.replace(/(<[^>]+) class=\"Apple-[^\"]*\"/gi,\"$1\"));if(b.match(/^<[^<]+cke_(editable|contents)/i)){var f,h,l=new CKEDITOR.dom.element(\"div\");for(l.setHtml(b);1==l.getChildCount()&&(f=l.getFirst())&&f.type==CKEDITOR.NODE_ELEMENT&&(f.hasClass(\"cke_editable\")||f.hasClass(\"cke_contents\"));)l=h=f;\nh&&(b=h.getHtml().replace(/<br>$/i,\"\"))}CKEDITOR.env.ie?b=b.replace(/^&nbsp;(?: |\\r\\n)?<(\\w+)/g,function(b,f){return f.toLowerCase()in c?(a.data.preSniffing=\"html\",\"\\x3c\"+f):b}):CKEDITOR.env.webkit?b=b.replace(/<\\/(\\w+)><div><br><\\/div>$/,function(b,f){return f in c?(a.data.endsWithEOL=1,\"\\x3c/\"+f+\"\\x3e\"):b}):CKEDITOR.env.gecko&&(b=b.replace(/(\\s)<br>$/,\"$1\"));a.data.dataValue=b},null,null,3);b.on(\"paste\",function(a){a=a.data;var e=a.type,g=a.dataValue,f,h=b.config.clipboard_defaultContentType||\"html\",\nl=a.dataTransfer.getTransferType(b);f=\"html\"==e||\"html\"==a.preSniffing?\"html\":A(g);\"htmlifiedtext\"==f&&(g=B(b.config,g));\"text\"==e&&\"html\"==f?g=x(b,g,c.get(\"plain-text\")):l==CKEDITOR.DATA_TRANSFER_EXTERNAL&&b.pasteFilter&&!a.dontFilter&&(g=x(b,g,b.pasteFilter));a.startsWithEOL&&(g='\\x3cbr data-cke-eol\\x3d\"1\"\\x3e'+g);a.endsWithEOL&&(g+='\\x3cbr data-cke-eol\\x3d\"1\"\\x3e');\"auto\"==e&&(e=\"html\"==f||\"html\"==h?\"html\":\"text\");a.type=e;a.dataValue=g;delete a.preSniffing;delete a.startsWithEOL;delete a.endsWithEOL},\nnull,null,6);b.on(\"paste\",function(a){a=a.data;a.dataValue&&(b.insertHtml(a.dataValue,a.type,a.range),setTimeout(function(){b.fire(\"afterPaste\")},0))},null,null,1E3);b.on(\"pasteDialog\",function(a){setTimeout(function(){b.openDialog(\"paste\",a.data)},0)})}});CKEDITOR.plugins.clipboard={isCustomCopyCutSupported:!CKEDITOR.env.ie&&!CKEDITOR.env.iOS,isCustomDataTypesSupported:!CKEDITOR.env.ie,isFileApiSupported:!CKEDITOR.env.ie||9<CKEDITOR.env.version,mainPasteEvent:CKEDITOR.env.ie&&!CKEDITOR.env.edge?\n\"beforepaste\":\"paste\",canClipboardApiBeTrusted:function(b,a){return b.getTransferType(a)!=CKEDITOR.DATA_TRANSFER_EXTERNAL||CKEDITOR.env.chrome&&!b.isEmpty()||CKEDITOR.env.gecko&&(b.getData(\"text/html\")||b.getFilesCount())?!0:!1},getDropTarget:function(b){var a=b.editable();return CKEDITOR.env.ie&&9>CKEDITOR.env.version||a.isInline()?a:b.document},fixSplitNodesAfterDrop:function(b,a,c,d){function e(b,c,d){var e=b;e.type==CKEDITOR.NODE_TEXT&&(e=b.getParent());if(e.equals(c)&&d!=c.getChildCount())return b=\na.startContainer.getChild(a.startOffset-1),c=a.startContainer.getChild(a.startOffset),b&&b.type==CKEDITOR.NODE_TEXT&&c&&c.type==CKEDITOR.NODE_TEXT&&(d=b.getLength(),b.setText(b.getText()+c.getText()),c.remove(),a.setStart(b,d),a.collapse(!0)),!0}var g=a.startContainer;\"number\"==typeof d&&\"number\"==typeof c&&g.type==CKEDITOR.NODE_ELEMENT&&(e(b.startContainer,g,c)||e(b.endContainer,g,d))},isDropRangeAffectedByDragRange:function(b,a){var c=a.startContainer,d=a.endOffset;return b.endContainer.equals(c)&&\nb.endOffset<=d||b.startContainer.getParent().equals(c)&&b.startContainer.getIndex()<d||b.endContainer.getParent().equals(c)&&b.endContainer.getIndex()<d?!0:!1},internalDrop:function(b,a,c,d){var e=CKEDITOR.plugins.clipboard,g=d.editable(),f,h;d.fire(\"saveSnapshot\");d.fire(\"lockSnapshot\",{dontUpdate:1});CKEDITOR.env.ie&&10>CKEDITOR.env.version&&this.fixSplitNodesAfterDrop(b,a,e.dragStartContainerChildCount,e.dragEndContainerChildCount);(h=this.isDropRangeAffectedByDragRange(b,a))||(f=b.createBookmark(!1));\ne=a.clone().createBookmark(!1);h&&(f=b.createBookmark(!1));b=f.startNode;a=f.endNode;h=e.startNode;a&&b.getPosition(h)&CKEDITOR.POSITION_PRECEDING&&a.getPosition(h)&CKEDITOR.POSITION_FOLLOWING&&h.insertBefore(b);b=d.createRange();b.moveToBookmark(f);g.extractHtmlFromRange(b,1);a=d.createRange();a.moveToBookmark(e);r(d,{dataTransfer:c,method:\"drop\",range:a},1);d.fire(\"unlockSnapshot\")},getRangeAtDropPosition:function(b,a){var c=b.data.$,d=c.clientX,e=c.clientY,g=a.getSelection(!0).getRanges()[0],f=\na.createRange();if(b.data.testRange)return b.data.testRange;if(document.caretRangeFromPoint)c=a.document.$.caretRangeFromPoint(d,e),f.setStart(CKEDITOR.dom.node(c.startContainer),c.startOffset),f.collapse(!0);else if(c.rangeParent)f.setStart(CKEDITOR.dom.node(c.rangeParent),c.rangeOffset),f.collapse(!0);else{if(CKEDITOR.env.ie&&8<CKEDITOR.env.version&&g&&a.editable().hasFocus)return g;if(document.body.createTextRange){a.focus();c=a.document.getBody().$.createTextRange();try{for(var h=!1,l=0;20>l&&\n!h;l++){if(!h)try{c.moveToPoint(d,e-l),h=!0}catch(p){}if(!h)try{c.moveToPoint(d,e+l),h=!0}catch(q){}}if(h){var k=\"cke-temp-\"+(new Date).getTime();c.pasteHTML('\\x3cspan id\\x3d\"'+k+'\"\\x3e​\\x3c/span\\x3e');var t=a.document.getById(k);f.moveToPosition(t,CKEDITOR.POSITION_BEFORE_START);t.remove()}else{var u=a.document.$.elementFromPoint(d,e),n=new CKEDITOR.dom.element(u),r;if(n.equals(a.editable())||\"html\"==n.getName())return g&&g.startContainer&&!g.startContainer.equals(a.editable())?g:null;r=n.getClientRect();\nd<r.left?f.setStartAt(n,CKEDITOR.POSITION_AFTER_START):f.setStartAt(n,CKEDITOR.POSITION_BEFORE_END);f.collapse(!0)}}catch(v){return null}}else return null}return f},initDragDataTransfer:function(b,a){var c=b.data.$?b.data.$.dataTransfer:null,d=new this.dataTransfer(c,a);c?this.dragData&&d.id==this.dragData.id?d=this.dragData:this.dragData=d:this.dragData?d=this.dragData:this.dragData=d;b.data.dataTransfer=d},resetDragDataTransfer:function(){this.dragData=null},initPasteDataTransfer:function(b,a){if(this.isCustomCopyCutSupported&&\nb&&b.data&&b.data.$){var c=new this.dataTransfer(b.data.$.clipboardData,a);this.copyCutData&&c.id==this.copyCutData.id?(c=this.copyCutData,c.$=b.data.$.clipboardData):this.copyCutData=c;return c}return new this.dataTransfer(null,a)},preventDefaultDropOnElement:function(b){b&&b.on(\"dragover\",E)}};var p=CKEDITOR.plugins.clipboard.isCustomDataTypesSupported?\"cke/id\":\"Text\";CKEDITOR.plugins.clipboard.dataTransfer=function(b,a){b&&(this.$=b);this._={metaRegExp:/^<meta.*?>/i,bodyRegExp:/<body(?:[\\s\\S]*?)>([\\s\\S]*)<\\/body>/i,\nfragmentRegExp:/\\x3c!--(?:Start|End)Fragment--\\x3e/g,data:{},files:[],normalizeType:function(a){a=a.toLowerCase();return\"text\"==a||\"text/plain\"==a?\"Text\":\"url\"==a?\"URL\":a}};this.id=this.getData(p);this.id||(this.id=\"Text\"==p?\"\":\"cke-\"+CKEDITOR.tools.getUniqueId());if(\"Text\"!=p)try{this.$.setData(p,this.id)}catch(c){}a&&(this.sourceEditor=a,this.setData(\"text/html\",a.getSelectedHtml(1)),\"Text\"==p||this.getData(\"text/plain\")||this.setData(\"text/plain\",a.getSelection().getSelectedText()))};CKEDITOR.DATA_TRANSFER_INTERNAL=\n1;CKEDITOR.DATA_TRANSFER_CROSS_EDITORS=2;CKEDITOR.DATA_TRANSFER_EXTERNAL=3;CKEDITOR.plugins.clipboard.dataTransfer.prototype={getData:function(b){b=this._.normalizeType(b);var a=this._.data[b];if(void 0===a||null===a||\"\"===a)try{a=this.$.getData(b)}catch(c){}if(void 0===a||null===a||\"\"===a)a=\"\";\"text/html\"==b?(a=a.replace(this._.metaRegExp,\"\"),(b=this._.bodyRegExp.exec(a))&&b.length&&(a=b[1],a=a.replace(this._.fragmentRegExp,\"\"))):\"Text\"==b&&CKEDITOR.env.gecko&&this.getFilesCount()&&\"file://\"==a.substring(0,\n7)&&(a=\"\");return a},setData:function(b,a){b=this._.normalizeType(b);this._.data[b]=a;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||\"URL\"==b||\"Text\"==b){\"Text\"==p&&\"Text\"==b&&(this.id=a);try{this.$.setData(b,a)}catch(c){}}},getTransferType:function(b){return this.sourceEditor?this.sourceEditor==b?CKEDITOR.DATA_TRANSFER_INTERNAL:CKEDITOR.DATA_TRANSFER_CROSS_EDITORS:CKEDITOR.DATA_TRANSFER_EXTERNAL},cacheData:function(){function b(b){b=a._.normalizeType(b);var c=a.getData(b);c&&(a._.data[b]=\nc)}if(this.$){var a=this,c,d;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(c=0;c<this.$.types.length;c++)b(this.$.types[c])}else b(\"Text\"),b(\"URL\");d=this._getImageFromClipboard();if(this.$&&this.$.files||d){this._.files=[];for(c=0;c<this.$.files.length;c++)this._.files.push(this.$.files[c]);0===this._.files.length&&d&&this._.files.push(d)}}},getFilesCount:function(){return this._.files.length?this._.files.length:this.$&&this.$.files&&this.$.files.length?this.$.files.length:\nthis._getImageFromClipboard()?1:0},getFile:function(b){return this._.files.length?this._.files[b]:this.$&&this.$.files&&this.$.files.length?this.$.files[b]:0===b?this._getImageFromClipboard():void 0},isEmpty:function(){var b={},a;if(this.getFilesCount())return!1;for(a in this._.data)b[a]=1;if(this.$)if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(var c=0;c<this.$.types.length;c++)b[this.$.types[c]]=1}else b.Text=1,b.URL=1;\"Text\"!=p&&(b[p]=0);for(a in b)if(b[a]&&\"\"!==\nthis.getData(a))return!1;return!0},_getImageFromClipboard:function(){var b;if(this.$&&this.$.items&&this.$.items[0])try{if((b=this.$.items[0].getAsFile())&&b.type)return b}catch(a){}}}})();(function(){CKEDITOR.plugins.add(\"panel\",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler)}});CKEDITOR.UI_PANEL=\"panel\";CKEDITOR.ui.panel=function(a,b){b&&CKEDITOR.tools.extend(this,b);CKEDITOR.tools.extend(this,{className:\"\",css:[]});this.id=CKEDITOR.tools.getNextId();this.document=a;this.isFramed=this.forceIFrame||this.css.length;this._={blocks:{}}};CKEDITOR.ui.panel.handler={create:function(a){return new CKEDITOR.ui.panel(a)}};var f=CKEDITOR.addTemplate(\"panel\",\n'\\x3cdiv lang\\x3d\"{langCode}\" id\\x3d\"{id}\" dir\\x3d{dir} class\\x3d\"cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}\" style\\x3d\"z-index:{z-index}\" role\\x3d\"presentation\"\\x3e{frame}\\x3c/div\\x3e'),g=CKEDITOR.addTemplate(\"panel-frame\",'\\x3ciframe id\\x3d\"{id}\" class\\x3d\"cke_panel_frame\" role\\x3d\"presentation\" frameborder\\x3d\"0\" src\\x3d\"{src}\"\\x3e\\x3c/iframe\\x3e'),h=CKEDITOR.addTemplate(\"panel-frame-inner\",'\\x3c!DOCTYPE html\\x3e\\x3chtml class\\x3d\"cke_panel_container {env}\" dir\\x3d\"{dir}\" lang\\x3d\"{langCode}\"\\x3e\\x3chead\\x3e{css}\\x3c/head\\x3e\\x3cbody class\\x3d\"cke_{dir}\" style\\x3d\"margin:0;padding:0\" onload\\x3d\"{onload}\"\\x3e\\x3c/body\\x3e\\x3c/html\\x3e');\nCKEDITOR.ui.panel.prototype={render:function(a,b){this.getHolderElement=function(){var a=this._.holder;if(!a){if(this.isFramed){var a=this.document.getById(this.id+\"_frame\"),b=a.getParent(),a=a.getFrameDocument();CKEDITOR.env.iOS&&b.setStyles({overflow:\"scroll\",\"-webkit-overflow-scrolling\":\"touch\"});b=CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function(){this.isLoaded=!0;if(this.onLoad)this.onLoad()},this));a.write(h.output(CKEDITOR.tools.extend({css:CKEDITOR.tools.buildStyleHtml(this.css),onload:\"window.parent.CKEDITOR.tools.callFunction(\"+\nb+\");\"},d)));a.getWindow().$.CKEDITOR=CKEDITOR;a.on(\"keydown\",function(a){var b=a.data.getKeystroke(),c=this.document.getById(this.id).getAttribute(\"dir\");this._.onKeyDown&&!1===this._.onKeyDown(b)?a.data.preventDefault():(27==b||b==(\"rtl\"==c?39:37))&&this.onEscape&&!1===this.onEscape(b)&&a.data.preventDefault()},this);a=a.getBody();a.unselectable();CKEDITOR.env.air&&CKEDITOR.tools.callFunction(b)}else a=this.document.getById(this.id);this._.holder=a}return a};var d={editorId:a.id,id:this.id,langCode:a.langCode,\ndir:a.lang.dir,cls:this.className,frame:\"\",env:CKEDITOR.env.cssClass,\"z-index\":a.config.baseFloatZIndex+1};if(this.isFramed){var e=CKEDITOR.env.air?\"javascript:void(0)\":CKEDITOR.env.ie?\"javascript:void(function(){\"+encodeURIComponent(\"document.open();(\"+CKEDITOR.tools.fixDomain+\")();document.close();\")+\"}())\":\"\";d.frame=g.output({id:this.id+\"_frame\",src:e})}e=f.output(d);b&&b.push(e);return e},addBlock:function(a,b){b=this._.blocks[a]=b instanceof CKEDITOR.ui.panel.block?b:new CKEDITOR.ui.panel.block(this.getHolderElement(),\nb);this._.currentBlock||this.showBlock(a);return b},getBlock:function(a){return this._.blocks[a]},showBlock:function(a){a=this._.blocks[a];var b=this._.currentBlock,d=!this.forceIFrame||CKEDITOR.env.ie?this._.holder:this.document.getById(this.id+\"_frame\");b&&b.hide();this._.currentBlock=a;CKEDITOR.fire(\"ariaWidget\",d);a._.focusIndex=-1;this._.onKeyDown=a.onKeyDown&&CKEDITOR.tools.bind(a.onKeyDown,a);a.show();return a},destroy:function(){this.element&&this.element.remove()}};CKEDITOR.ui.panel.block=\nCKEDITOR.tools.createClass({$:function(a,b){this.element=a.append(a.getDocument().createElement(\"div\",{attributes:{tabindex:-1,\"class\":\"cke_panel_block\"},styles:{display:\"none\"}}));b&&CKEDITOR.tools.extend(this,b);this.element.setAttributes({role:this.attributes.role||\"presentation\",\"aria-label\":this.attributes[\"aria-label\"],title:this.attributes.title||this.attributes[\"aria-label\"]});this.keys={};this._.focusIndex=-1;this.element.disableContextMenu()},_:{markItem:function(a){-1!=a&&(a=this.element.getElementsByTag(\"a\").getItem(this._.focusIndex=\na),CKEDITOR.env.webkit&&a.getDocument().getWindow().focus(),a.focus(),this.onMark&&this.onMark(a))}},proto:{show:function(){this.element.setStyle(\"display\",\"\")},hide:function(){this.onHide&&!0===this.onHide.call(this)||this.element.setStyle(\"display\",\"none\")},onKeyDown:function(a,b){var d=this.keys[a];switch(d){case \"next\":for(var e=this._.focusIndex,d=this.element.getElementsByTag(\"a\"),c;c=d.getItem(++e);)if(c.getAttribute(\"_cke_focus\")&&c.$.offsetWidth){this._.focusIndex=e;c.focus();break}return c||\nb?!1:(this._.focusIndex=-1,this.onKeyDown(a,1));case \"prev\":e=this._.focusIndex;for(d=this.element.getElementsByTag(\"a\");0<e&&(c=d.getItem(--e));){if(c.getAttribute(\"_cke_focus\")&&c.$.offsetWidth){this._.focusIndex=e;c.focus();break}c=null}return c||b?!1:(this._.focusIndex=d.count(),this.onKeyDown(a,1));case \"click\":case \"mouseup\":return e=this._.focusIndex,(c=0<=e&&this.element.getElementsByTag(\"a\").getItem(e))&&(c.$[d]?c.$[d]():c.$[\"on\"+d]()),!1}return!0}}})})();CKEDITOR.plugins.add(\"floatpanel\",{requires:\"panel\"});\n(function(){function v(a,b,c,l,h){h=CKEDITOR.tools.genKey(b.getUniqueId(),c.getUniqueId(),a.lang.dir,a.uiColor||\"\",l.css||\"\",h||\"\");var g=f[h];g||(g=f[h]=new CKEDITOR.ui.panel(b,l),g.element=c.append(CKEDITOR.dom.element.createFromHtml(g.render(a),b)),g.element.setStyles({display:\"none\",position:\"absolute\"}));return g}var f={};CKEDITOR.ui.floatPanel=CKEDITOR.tools.createClass({$:function(a,b,c,l){function h(){e.hide()}c.forceIFrame=1;c.toolbarRelated&&a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&\n(b=CKEDITOR.document.getById(\"cke_\"+a.name));var g=b.getDocument();l=v(a,g,b,c,l||0);var m=l.element,p=m.getFirst(),e=this;m.disableContextMenu();this.element=m;this._={editor:a,panel:l,parentElement:b,definition:c,document:g,iframe:p,children:[],dir:a.lang.dir,showBlockParams:null};a.on(\"mode\",h);a.on(\"resize\",h);g.getWindow().on(\"resize\",function(){this.reposition()},this)},proto:{addBlock:function(a,b){return this._.panel.addBlock(a,b)},addListBlock:function(a,b){return this._.panel.addListBlock(a,\nb)},getBlock:function(a){return this._.panel.getBlock(a)},showBlock:function(a,b,c,l,h,g){var m=this._.panel,p=m.showBlock(a);this._.showBlockParams=[].slice.call(arguments);this.allowBlur(!1);var e=this._.editor.editable();this._.returnFocus=e.hasFocus?e:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);this._.hideTimeout=0;var k=this.element,e=this._.iframe,e=CKEDITOR.env.ie&&!CKEDITOR.env.edge?e:new CKEDITOR.dom.window(e.$.contentWindow),f=k.getDocument(),r=this._.parentElement.getPositionedAncestor(),\nt=b.getDocumentPosition(f),f=r?r.getDocumentPosition(f):{x:0,y:0},q=\"rtl\"==this._.dir,d=t.x+(l||0)-f.x,n=t.y+(h||0)-f.y;!q||1!=c&&4!=c?q||2!=c&&3!=c||(d+=b.$.offsetWidth-1):d+=b.$.offsetWidth;if(3==c||4==c)n+=b.$.offsetHeight-1;this._.panel._.offsetParentId=b.getId();k.setStyles({top:n+\"px\",left:0,display:\"\"});k.setOpacity(0);k.getFirst().removeStyle(\"width\");this._.editor.focusManager.add(e);this._.blurSet||(CKEDITOR.event.useCapture=!0,e.on(\"blur\",function(a){function u(){delete this._.returnFocus;\nthis.hide()}this.allowBlur()&&a.data.getPhase()==CKEDITOR.EVENT_PHASE_AT_TARGET&&this.visible&&!this._.activeChild&&(CKEDITOR.env.iOS?this._.hideTimeout||(this._.hideTimeout=CKEDITOR.tools.setTimeout(u,0,this)):u.call(this))},this),e.on(\"focus\",function(){this._.focused=!0;this.hideChild();this.allowBlur(!0)},this),CKEDITOR.env.iOS&&(e.on(\"touchstart\",function(){clearTimeout(this._.hideTimeout)},this),e.on(\"touchend\",function(){this._.hideTimeout=0;this.focus()},this)),CKEDITOR.event.useCapture=!1,\nthis._.blurSet=1);m.onEscape=CKEDITOR.tools.bind(function(a){if(this.onEscape&&!1===this.onEscape(a))return!1},this);CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.tools.bind(function(){var a=k;a.removeStyle(\"width\");if(p.autoSize){var b=p.element.getDocument(),b=(CKEDITOR.env.webkit?p.element:b.getBody()).$.scrollWidth;CKEDITOR.env.ie&&CKEDITOR.env.quirks&&0<b&&(b+=(a.$.offsetWidth||0)-(a.$.clientWidth||0)+3);a.setStyle(\"width\",b+10+\"px\");b=p.element.$.scrollHeight;CKEDITOR.env.ie&&CKEDITOR.env.quirks&&\n0<b&&(b+=(a.$.offsetHeight||0)-(a.$.clientHeight||0)+3);a.setStyle(\"height\",b+\"px\");m._.currentBlock.element.setStyle(\"display\",\"none\").removeStyle(\"display\")}else a.removeStyle(\"height\");q&&(d-=k.$.offsetWidth);k.setStyle(\"left\",d+\"px\");var b=m.element.getWindow(),a=k.$.getBoundingClientRect(),b=b.getViewPaneSize(),c=a.width||a.right-a.left,e=a.height||a.bottom-a.top,l=q?a.right:b.width-a.left,h=q?b.width-a.right:a.left;q?l<c&&(d=h>c?d+c:b.width>c?d-a.left:d-a.right+b.width):l<c&&(d=h>c?d-c:b.width>\nc?d-a.right+b.width:d-a.left);c=a.top;b.height-a.top<e&&(n=c>e?n-e:b.height>e?n-a.bottom+b.height:n-a.top);CKEDITOR.env.ie&&(b=a=new CKEDITOR.dom.element(k.$.offsetParent),\"html\"==b.getName()&&(b=b.getDocument().getBody()),\"rtl\"==b.getComputedStyle(\"direction\")&&(d=CKEDITOR.env.ie8Compat?d-2*k.getDocument().getDocumentElement().$.scrollLeft:d-(a.$.scrollWidth-a.$.clientWidth)));var a=k.getFirst(),f;(f=a.getCustomData(\"activePanel\"))&&f.onHide&&f.onHide.call(this,1);a.setCustomData(\"activePanel\",this);\nk.setStyles({top:n+\"px\",left:d+\"px\"});k.setOpacity(1);g&&g()},this);m.isLoaded?a():m.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();p.element.focus();CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=a);this.allowBlur(!0);this._.editor.fire(\"panelShow\",this)},0,this)},CKEDITOR.env.air?200:0,this);this.visible=1;this.onShow&&this.onShow.call(this)},reposition:function(){var a=this._.showBlockParams;\nthis.visible&&this._.showBlockParams&&(this.hide(),this.showBlock.apply(this,a))},focus:function(){if(CKEDITOR.env.webkit){var a=CKEDITOR.document.getActive();a&&!a.equals(this._.iframe)&&a.$.blur()}(this._.lastFocused||this._.iframe.getFrameDocument().getWindow()).focus()},blur:function(){var a=this._.iframe.getFrameDocument().getActive();a&&a.is(\"a\")&&(this._.lastFocused=a)},hide:function(a){if(this.visible&&(!this.onHide||!0!==this.onHide.call(this))){this.hideChild();CKEDITOR.env.gecko&&this._.iframe.getFrameDocument().$.activeElement.blur();\nthis.element.setStyle(\"display\",\"none\");this.visible=0;this.element.getFirst().removeCustomData(\"activePanel\");if(a=a&&this._.returnFocus)CKEDITOR.env.webkit&&a.type&&a.getWindow().$.focus(),a.focus();delete this._.lastFocused;this._.showBlockParams=null;this._.editor.fire(\"panelHide\",this)}},allowBlur:function(a){var b=this._.panel;void 0!==a&&(b.allowBlur=a);return b.allowBlur},showAsChild:function(a,b,c,f,h,g){if(this._.activeChild!=a||a._.panel._.offsetParentId!=c.getId())this.hideChild(),a.onHide=\nCKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused||this.hide()},0,this)},this),this._.activeChild=a,this._.focused=!1,a.showBlock(b,c,f,h,g),this.blur(),(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&setTimeout(function(){a.element.getChild(0).$.style.cssText+=\"\"},100)},hideChild:function(a){var b=this._.activeChild;b&&(delete b.onHide,delete this._.activeChild,b.hide(),a&&this.focus())}}});CKEDITOR.on(\"instanceDestroyed\",function(){var a=CKEDITOR.tools.isEmpty(CKEDITOR.instances),\nb;for(b in f){var c=f[b];a?c.destroy():c.element.hide()}a&&(f={})})})();CKEDITOR.plugins.add(\"menu\",{requires:\"floatpanel\",beforeInit:function(g){for(var h=g.config.menu_groups.split(\",\"),p=g._.menuGroups={},n=g._.menuItems={},a=0;a<h.length;a++)p[h[a]]=a+1;g.addMenuGroup=function(b,a){p[b]=a||100};g.addMenuItem=function(a,c){p[c.group]&&(n[a]=new CKEDITOR.menuItem(this,a,c))};g.addMenuItems=function(a){for(var c in a)this.addMenuItem(c,a[c])};g.getMenuItem=function(a){return n[a]};g.removeMenuItem=function(a){delete n[a]}}});\n(function(){function g(a){a.sort(function(a,c){return a.group<c.group?-1:a.group>c.group?1:a.order<c.order?-1:a.order>c.order?1:0})}var h='\\x3cspan class\\x3d\"cke_menuitem\"\\x3e\\x3ca id\\x3d\"{id}\" class\\x3d\"cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}\" href\\x3d\"{href}\" title\\x3d\"{title}\" tabindex\\x3d\"-1\"_cke_focus\\x3d1 hidefocus\\x3d\"true\" role\\x3d\"{role}\" aria-haspopup\\x3d\"{hasPopup}\" aria-disabled\\x3d\"{disabled}\" {ariaChecked}';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(h+=' onkeypress\\x3d\"return false;\"');\nCKEDITOR.env.gecko&&(h+=' onblur\\x3d\"this.style.cssText \\x3d this.style.cssText;\"');var h=h+(' onmouseover\\x3d\"CKEDITOR.tools.callFunction({hoverFn},{index});\" onmouseout\\x3d\"CKEDITOR.tools.callFunction({moveOutFn},{index});\" '+(CKEDITOR.env.ie?'onclick\\x3d\"return false;\" onmouseup':\"onclick\")+'\\x3d\"CKEDITOR.tools.callFunction({clickFn},{index}); return false;\"\\x3e'),p=CKEDITOR.addTemplate(\"menuItem\",h+'\\x3cspan class\\x3d\"cke_menubutton_inner\"\\x3e\\x3cspan class\\x3d\"cke_menubutton_icon\"\\x3e\\x3cspan class\\x3d\"cke_button_icon cke_button__{iconName}_icon\" style\\x3d\"{iconStyle}\"\\x3e\\x3c/span\\x3e\\x3c/span\\x3e\\x3cspan class\\x3d\"cke_menubutton_label\"\\x3e{label}\\x3c/span\\x3e{arrowHtml}\\x3c/span\\x3e\\x3c/a\\x3e\\x3c/span\\x3e'),\nn=CKEDITOR.addTemplate(\"menuArrow\",'\\x3cspan class\\x3d\"cke_menuarrow\"\\x3e\\x3cspan\\x3e{label}\\x3c/span\\x3e\\x3c/span\\x3e');CKEDITOR.menu=CKEDITOR.tools.createClass({$:function(a,b){b=this._.definition=b||{};this.id=CKEDITOR.tools.getNextId();this.editor=a;this.items=[];this._.listeners=[];this._.level=b.level||1;var c=CKEDITOR.tools.extend({},b.panel,{css:[CKEDITOR.skin.getPath(\"editor\")],level:this._.level-1,block:{}}),m=c.block.attributes=c.attributes||{};!m.role&&(m.role=\"menu\");this._.panelDefinition=\nc},_:{onShow:function(){var a=this.editor.getSelection(),b=a&&a.getStartElement(),c=this.editor.elementPath(),m=this._.listeners;this.removeAll();for(var e=0;e<m.length;e++){var l=m[e](b,a,c);if(l)for(var k in l){var f=this.editor.getMenuItem(k);!f||f.command&&!this.editor.getCommand(f.command).state||(f.state=l[k],this.add(f))}}},onClick:function(a){this.hide();if(a.onClick)a.onClick();else a.command&&this.editor.execCommand(a.command)},onEscape:function(a){var b=this.parent;b?b._.panel.hideChild(1):\n27==a&&this.hide(1);return!1},onHide:function(){this.onHide&&this.onHide()},showSubMenu:function(a){var b=this._.subMenu,c=this.items[a];if(c=c.getItems&&c.getItems()){b?b.removeAll():(b=this._.subMenu=new CKEDITOR.menu(this.editor,CKEDITOR.tools.extend({},this._.definition,{level:this._.level+1},!0)),b.parent=this,b._.onClick=CKEDITOR.tools.bind(this._.onClick,this));for(var m in c){var e=this.editor.getMenuItem(m);e&&(e.state=c[m],b.add(e))}var l=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+\nString(a));setTimeout(function(){b.show(l,2)},0)}else this._.panel.hideChild(1)}},proto:{add:function(a){a.order||(a.order=this.items.length);this.items.push(a)},removeAll:function(){this.items=[]},show:function(a,b,c,m){if(!this.parent&&(this._.onShow(),!this.items.length))return;b=b||(\"rtl\"==this.editor.lang.dir?2:1);var e=this.items,l=this.editor,k=this._.panel,f=this._.element;if(!k){k=this._.panel=new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),this._.panelDefinition,this._.level);\nk.onEscape=CKEDITOR.tools.bind(function(a){if(!1===this._.onEscape(a))return!1},this);k.onShow=function(){k._.panel.getHolderElement().getParent().addClass(\"cke\").addClass(\"cke_reset_all\")};k.onHide=CKEDITOR.tools.bind(function(){this._.onHide&&this._.onHide()},this);f=k.addBlock(this.id,this._.panelDefinition.block);f.autoSize=!0;var d=f.keys;d[40]=\"next\";d[9]=\"next\";d[38]=\"prev\";d[CKEDITOR.SHIFT+9]=\"prev\";d[\"rtl\"==l.lang.dir?37:39]=CKEDITOR.env.ie?\"mouseup\":\"click\";d[32]=CKEDITOR.env.ie?\"mouseup\":\n\"click\";CKEDITOR.env.ie&&(d[13]=\"mouseup\");f=this._.element=f.element;d=f.getDocument();d.getBody().setStyle(\"overflow\",\"hidden\");d.getElementsByTag(\"html\").getItem(0).setStyle(\"overflow\",\"hidden\");this._.itemOverFn=CKEDITOR.tools.addFunction(function(a){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,l.config.menu_subMenuDelay||400,this,[a])},this);this._.itemOutFn=CKEDITOR.tools.addFunction(function(){clearTimeout(this._.showSubTimeout)},this);\nthis._.itemClickFn=CKEDITOR.tools.addFunction(function(a){var b=this.items[a];if(b.state==CKEDITOR.TRISTATE_DISABLED)this.hide(1);else if(b.getItems)this._.showSubMenu(a);else this._.onClick(b)},this)}g(e);for(var d=l.elementPath(),d=['\\x3cdiv class\\x3d\"cke_menu'+(d&&d.direction()!=l.lang.dir?\" cke_mixed_dir_content\":\"\")+'\" role\\x3d\"presentation\"\\x3e'],h=e.length,p=h&&e[0].group,n=0;n<h;n++){var q=e[n];p!=q.group&&(d.push('\\x3cdiv class\\x3d\"cke_menuseparator\" role\\x3d\"separator\"\\x3e\\x3c/div\\x3e'),\np=q.group);q.render(this,n,d)}d.push(\"\\x3c/div\\x3e\");f.setHtml(d.join(\"\"));CKEDITOR.ui.fire(\"ready\",this);this.parent?this.parent._.panel.showAsChild(k,this.id,a,b,c,m):k.showBlock(this.id,a,b,c,m);l.fire(\"menuShow\",[k])},addListener:function(a){this._.listeners.push(a)},hide:function(a){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(a)}}});CKEDITOR.menuItem=CKEDITOR.tools.createClass({$:function(a,b,c){CKEDITOR.tools.extend(this,c,{order:0,className:\"cke_menubutton__\"+b});this.group=\na._.menuGroups[this.group];this.editor=a;this.name=b},proto:{render:function(a,b,c){var h=a.id+String(b),e=\"undefined\"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,l=\"\",k=e==CKEDITOR.TRISTATE_ON?\"on\":e==CKEDITOR.TRISTATE_DISABLED?\"disabled\":\"off\";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(l=' aria-checked\\x3d\"'+(e==CKEDITOR.TRISTATE_ON?\"true\":\"false\")+'\"');var f=this.getItems,d=\"\\x26#\"+(\"rtl\"==this.editor.lang.dir?\"9668\":\"9658\")+\";\",g=this.name;this.icon&&!/\\./.test(this.icon)&&(g=\nthis.icon);a={id:h,name:this.name,iconName:g,label:this.label,cls:this.className||\"\",state:k,hasPopup:f?\"true\":\"false\",disabled:e==CKEDITOR.TRISTATE_DISABLED,title:this.label,href:\"javascript:void('\"+(this.label||\"\").replace(\"'\")+\"')\",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn,clickFn:a._.itemClickFn,index:b,iconStyle:CKEDITOR.skin.getIconStyle(g,\"rtl\"==this.editor.lang.dir,g==this.icon?null:this.icon,this.iconOffset),arrowHtml:f?n.output({label:d}):\"\",role:this.role?this.role:\"menuitem\",ariaChecked:l};\np.output(a,c)}}})})();CKEDITOR.config.menu_groups=\"clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div\";CKEDITOR.plugins.add(\"contextmenu\",{requires:\"menu\",onLoad:function(){CKEDITOR.plugins.contextMenu=CKEDITOR.tools.createClass({base:CKEDITOR.menu,$:function(a){this.base.call(this,a,{panel:{className:\"cke_menu_panel\",attributes:{\"aria-label\":a.lang.contextmenu.options}}})},proto:{addTarget:function(a,e){a.on(\"contextmenu\",function(a){a=a.data;var c=CKEDITOR.env.webkit?f:CKEDITOR.env.mac?a.$.metaKey:a.$.ctrlKey;if(!e||!c){a.preventDefault();if(CKEDITOR.env.mac&&CKEDITOR.env.webkit){var c=this.editor,\nb=(new CKEDITOR.dom.elementPath(a.getTarget(),c.editable())).contains(function(a){return a.hasAttribute(\"contenteditable\")},!0);b&&\"false\"==b.getAttribute(\"contenteditable\")&&c.getSelection().fake(b)}var b=a.getTarget().getDocument(),d=a.getTarget().getDocument().getDocumentElement(),c=!b.equals(CKEDITOR.document),b=b.getWindow().getScrollPosition(),g=c?a.$.clientX:a.$.pageX||b.x+a.$.clientX,h=c?a.$.clientY:a.$.pageY||b.y+a.$.clientY;CKEDITOR.tools.setTimeout(function(){this.open(d,null,g,h)},CKEDITOR.env.ie?\n200:0,this)}},this);if(CKEDITOR.env.webkit){var f,d=function(){f=0};a.on(\"keydown\",function(a){f=CKEDITOR.env.mac?a.data.$.metaKey:a.data.$.ctrlKey});a.on(\"keyup\",d);a.on(\"contextmenu\",d)}},open:function(a,e,f,d){this.editor.focus();a=a||CKEDITOR.document.getDocumentElement();this.editor.selectionChange(1);this.show(a,e,f,d)}}})},beforeInit:function(a){var e=a.contextMenu=new CKEDITOR.plugins.contextMenu(a);a.on(\"contentDom\",function(){e.addTarget(a.editable(),!1!==a.config.browserContextMenuOnCtrl)});\na.addCommand(\"contextMenu\",{exec:function(){a.contextMenu.open(a.document.getBody())}});a.setKeystroke(CKEDITOR.SHIFT+121,\"contextMenu\");a.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,\"contextMenu\")}});CKEDITOR.plugins.add(\"resize\",{init:function(b){function f(d){var e=c.width,m=c.height,f=e+(d.data.$.screenX-n.x)*(\"rtl\"==g?-1:1);d=m+(d.data.$.screenY-n.y);h&&(e=Math.max(a.resize_minWidth,Math.min(f,a.resize_maxWidth)));p&&(m=Math.max(a.resize_minHeight,Math.min(d,a.resize_maxHeight)));b.resize(h?e:null,m)}function k(){CKEDITOR.document.removeListener(\"mousemove\",f);CKEDITOR.document.removeListener(\"mouseup\",k);b.document&&(b.document.removeListener(\"mousemove\",f),b.document.removeListener(\"mouseup\",\nk))}var a=b.config,r=b.ui.spaceId(\"resizer\"),g=b.element?b.element.getDirection(1):\"ltr\";!a.resize_dir&&(a.resize_dir=\"vertical\");void 0===a.resize_maxWidth&&(a.resize_maxWidth=3E3);void 0===a.resize_maxHeight&&(a.resize_maxHeight=3E3);void 0===a.resize_minWidth&&(a.resize_minWidth=750);void 0===a.resize_minHeight&&(a.resize_minHeight=250);if(!1!==a.resize_enabled){var l=null,n,c,h=(\"both\"==a.resize_dir||\"horizontal\"==a.resize_dir)&&a.resize_minWidth!=a.resize_maxWidth,p=(\"both\"==a.resize_dir||\"vertical\"==\na.resize_dir)&&a.resize_minHeight!=a.resize_maxHeight,q=CKEDITOR.tools.addFunction(function(d){l||(l=b.getResizable());c={width:l.$.offsetWidth||0,height:l.$.offsetHeight||0};n={x:d.screenX,y:d.screenY};a.resize_minWidth>c.width&&(a.resize_minWidth=c.width);a.resize_minHeight>c.height&&(a.resize_minHeight=c.height);CKEDITOR.document.on(\"mousemove\",f);CKEDITOR.document.on(\"mouseup\",k);b.document&&(b.document.on(\"mousemove\",f),b.document.on(\"mouseup\",k));d.preventDefault&&d.preventDefault()});b.on(\"destroy\",\nfunction(){CKEDITOR.tools.removeFunction(q)});b.on(\"uiSpace\",function(a){if(\"bottom\"==a.data.space){var e=\"\";h&&!p&&(e=\" cke_resizer_horizontal\");!h&&p&&(e=\" cke_resizer_vertical\");var c='\\x3cspan id\\x3d\"'+r+'\" class\\x3d\"cke_resizer'+e+\" cke_resizer_\"+g+'\" title\\x3d\"'+CKEDITOR.tools.htmlEncode(b.lang.common.resize)+'\" onmousedown\\x3d\"CKEDITOR.tools.callFunction('+q+', event)\"\\x3e'+(\"ltr\"==g?\"◢\":\"◣\")+\"\\x3c/span\\x3e\";\"ltr\"==g&&\"ltr\"==e?a.data.html+=c:a.data.html=c+a.data.html}},b,null,100);b.on(\"maximize\",\nfunction(a){b.ui.space(\"resizer\")[a.data==CKEDITOR.TRISTATE_ON?\"hide\":\"show\"]()})}}});(function(){var c='\\x3ca id\\x3d\"{id}\" class\\x3d\"cke_button cke_button__{name} cke_button_{state} {cls}\"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?\"\":\" href\\x3d\\\"javascript:void('{titleJs}')\\\"\")+' title\\x3d\"{title}\" tabindex\\x3d\"-1\" hidefocus\\x3d\"true\" role\\x3d\"button\" aria-labelledby\\x3d\"{id}_label\" aria-haspopup\\x3d\"{hasArrow}\" aria-disabled\\x3d\"{ariaDisabled}\"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(c+=' onkeypress\\x3d\"return false;\"');CKEDITOR.env.gecko&&(c+=' onblur\\x3d\"this.style.cssText \\x3d this.style.cssText;\"');\nvar c=c+(' onkeydown\\x3d\"return CKEDITOR.tools.callFunction({keydownFn},event);\" onfocus\\x3d\"return CKEDITOR.tools.callFunction({focusFn},event);\" '+(CKEDITOR.env.ie?'onclick\\x3d\"return false;\" onmouseup':\"onclick\")+'\\x3d\"CKEDITOR.tools.callFunction({clickFn},this);return false;\"\\x3e\\x3cspan class\\x3d\"cke_button_icon cke_button__{iconName}_icon\" style\\x3d\"{style}\"'),c=c+'\\x3e\\x26nbsp;\\x3c/span\\x3e\\x3cspan id\\x3d\"{id}_label\" class\\x3d\"cke_button_label cke_button__{name}_label\" aria-hidden\\x3d\"false\"\\x3e{label}\\x3c/span\\x3e{arrowHtml}\\x3c/a\\x3e',\nr=CKEDITOR.addTemplate(\"buttonArrow\",'\\x3cspan class\\x3d\"cke_button_arrow\"\\x3e'+(CKEDITOR.env.hc?\"\\x26#9660;\":\"\")+\"\\x3c/span\\x3e\"),t=CKEDITOR.addTemplate(\"button\",c);CKEDITOR.plugins.add(\"button\",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON,CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON=\"button\";CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label,click:a.click||function(b){b.execCommand(a.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a)}};\nCKEDITOR.ui.button.prototype={render:function(a,b){function c(){var e=a.mode;e&&(e=this.modes[e]?void 0!==k[e]?k[e]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,e=a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED:e,this.setState(e),this.refresh&&this.refresh())}var l=CKEDITOR.env,m=this._.id=CKEDITOR.tools.getNextId(),f=\"\",g=this.command,n;this._.editor=a;var d={id:m,button:this,editor:a,focus:function(){CKEDITOR.document.getById(m).focus()},execute:function(){this.button.click(a)},attach:function(a){this.button.attach(a)}},\nu=CKEDITOR.tools.addFunction(function(a){if(d.onkey)return a=new CKEDITOR.dom.event(a),!1!==d.onkey(d,a.getKeystroke())}),v=CKEDITOR.tools.addFunction(function(a){var b;d.onfocus&&(b=!1!==d.onfocus(d,new CKEDITOR.dom.event(a)));return b}),p=0;d.clickFn=n=CKEDITOR.tools.addFunction(function(){p&&(a.unlockSelection(1),p=0);d.execute();l.iOS&&a.focus()});if(this.modes){var k={};a.on(\"beforeModeUnload\",function(){a.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(k[a.mode]=this._.state)},this);a.on(\"activeFilterChange\",\nc,this);a.on(\"mode\",c,this);!this.readOnly&&a.on(\"readOnly\",c,this)}else g&&(g=a.getCommand(g))&&(g.on(\"state\",function(){this.setState(g.state)},this),f+=g.state==CKEDITOR.TRISTATE_ON?\"on\":g.state==CKEDITOR.TRISTATE_DISABLED?\"disabled\":\"off\");if(this.directional)a.on(\"contentDirChanged\",function(b){var c=CKEDITOR.document.getById(this._.id),d=c.getFirst();b=b.data;b!=a.lang.dir?c.addClass(\"cke_\"+b):c.removeClass(\"cke_ltr\").removeClass(\"cke_rtl\");d.setAttribute(\"style\",CKEDITOR.skin.getIconStyle(h,\n\"rtl\"==b,this.icon,this.iconOffset))},this);g||(f+=\"off\");var q=this.name||this.command,h=q;this.icon&&!/\\./.test(this.icon)&&(h=this.icon,this.icon=null);f={id:m,name:q,iconName:h,label:this.label,cls:this.className||\"\",state:f,ariaDisabled:\"disabled\"==f?\"true\":\"false\",title:this.title,titleJs:l.gecko&&!l.hc?\"\":(this.title||\"\").replace(\"'\",\"\"),hasArrow:this.hasArrow?\"true\":\"false\",keydownFn:u,focusFn:v,clickFn:n,style:CKEDITOR.skin.getIconStyle(h,\"rtl\"==a.lang.dir,this.icon,this.iconOffset),arrowHtml:this.hasArrow?\nr.output():\"\"};t.output(f,b);if(this.onRender)this.onRender();return d},setState:function(a){if(this._.state==a)return!1;this._.state=a;var b=CKEDITOR.document.getById(this._.id);return b?(b.setState(a,\"cke_button\"),a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute(\"aria-disabled\",!0):b.removeAttribute(\"aria-disabled\"),this.hasArrow?(a=a==CKEDITOR.TRISTATE_ON?this._.editor.lang.button.selectedLabel.replace(/%1/g,this.label):this.label,CKEDITOR.document.getById(this._.id+\"_label\").setText(a)):a==CKEDITOR.TRISTATE_ON?\nb.setAttribute(\"aria-pressed\",!0):b.removeAttribute(\"aria-pressed\"),!0):!1},getState:function(){return this._.state},toFeature:function(a){if(this._.feature)return this._.feature;var b=this;this.allowedContent||this.requiredContent||!this.command||(b=a.getCommand(this.command)||b);return this._.feature=b}};CKEDITOR.ui.prototype.addButton=function(a,b){this.add(a,CKEDITOR.UI_BUTTON,b)}})();(function(){function B(a){function d(){for(var b=g(),e=CKEDITOR.tools.clone(a.config.toolbarGroups)||q(a),f=0;f<e.length;f++){var l=e[f];if(\"/\"!=l){\"string\"==typeof l&&(l=e[f]={name:l});var m,d=l.groups;if(d)for(var h=0;h<d.length;h++)m=d[h],(m=b[m])&&c(l,m);(m=b[l.name])&&c(l,m)}}return e}function g(){var b={},c,f,e;for(c in a.ui.items)f=a.ui.items[c],e=f.toolbar||\"others\",e=e.split(\",\"),f=e[0],e=parseInt(e[1]||-1,10),b[f]||(b[f]=[]),b[f].push({name:c,order:e});for(f in b)b[f]=b[f].sort(function(b,\na){return b.order==a.order?0:0>a.order?-1:0>b.order?1:b.order<a.order?-1:1});return b}function c(c,e){if(e.length){c.items?c.items.push(a.ui.create(\"-\")):c.items=[];for(var f;f=e.shift();)f=\"string\"==typeof f?f:f.name,b&&-1!=CKEDITOR.tools.indexOf(b,f)||(f=a.ui.create(f))&&a.addFeature(f)&&c.items.push(f)}}function h(b){var a=[],e,d,h;for(e=0;e<b.length;++e)d=b[e],h={},\"/\"==d?a.push(d):CKEDITOR.tools.isArray(d)?(c(h,CKEDITOR.tools.clone(d)),a.push(h)):d.items&&(c(h,CKEDITOR.tools.clone(d.items)),\nh.name=d.name,a.push(h));return a}var b=a.config.removeButtons,b=b&&b.split(\",\"),e=a.config.toolbar;\"string\"==typeof e&&(e=a.config[\"toolbar_\"+e]);return a.toolbar=e?h(e):d()}function q(a){return a._.toolbarGroups||(a._.toolbarGroups=[{name:\"document\",groups:[\"mode\",\"document\",\"doctools\"]},{name:\"clipboard\",groups:[\"clipboard\",\"undo\"]},{name:\"editing\",groups:[\"find\",\"selection\",\"spellchecker\"]},{name:\"forms\"},\"/\",{name:\"basicstyles\",groups:[\"basicstyles\",\"cleanup\"]},{name:\"paragraph\",groups:[\"list\",\n\"indent\",\"blocks\",\"align\",\"bidi\"]},{name:\"links\"},{name:\"insert\"},\"/\",{name:\"styles\"},{name:\"colors\"},{name:\"tools\"},{name:\"others\"},{name:\"about\"}])}var y=function(){this.toolbars=[];this.focusCommandExecuted=!1};y.prototype.focus=function(){for(var a=0,d;d=this.toolbars[a++];)for(var g=0,c;c=d.items[g++];)if(c.focus){c.focus();return}};var C={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(a){a.toolbox&&(a.toolbox.focusCommandExecuted=!0,CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){a.toolbox.focus()},\n100):a.toolbox.focus())}};CKEDITOR.plugins.add(\"toolbar\",{requires:\"button\",init:function(a){var d,g=function(c,h){var b,e=\"rtl\"==a.lang.dir,k=a.config.toolbarGroupCycling,r=e?37:39,e=e?39:37,k=void 0===k||k;switch(h){case 9:case CKEDITOR.SHIFT+9:for(;!b||!b.items.length;)if(b=9==h?(b?b.next:c.toolbar.next)||a.toolbox.toolbars[0]:(b?b.previous:c.toolbar.previous)||a.toolbox.toolbars[a.toolbox.toolbars.length-1],b.items.length)for(c=b.items[d?b.items.length-1:0];c&&!c.focus;)(c=d?c.previous:c.next)||\n(b=0);c&&c.focus();return!1;case r:b=c;do b=b.next,!b&&k&&(b=c.toolbar.items[0]);while(b&&!b.focus);b?b.focus():g(c,9);return!1;case 40:return c.button&&c.button.hasArrow?(a.once(\"panelShow\",function(b){b.data._.panel._.currentBlock.onKeyDown(40)}),c.execute()):g(c,40==h?r:e),!1;case e:case 38:b=c;do b=b.previous,!b&&k&&(b=c.toolbar.items[c.toolbar.items.length-1]);while(b&&!b.focus);b?b.focus():(d=1,g(c,CKEDITOR.SHIFT+9),d=0);return!1;case 27:return a.focus(),!1;case 13:case 32:return c.execute(),\n!1}return!0};a.on(\"uiSpace\",function(c){if(c.data.space==a.config.toolbarLocation){c.removeListener();a.toolbox=new y;var d=CKEDITOR.tools.getNextId(),b=['\\x3cspan id\\x3d\"',d,'\" class\\x3d\"cke_voice_label\"\\x3e',a.lang.toolbar.toolbars,\"\\x3c/span\\x3e\",'\\x3cspan id\\x3d\"'+a.ui.spaceId(\"toolbox\")+'\" class\\x3d\"cke_toolbox\" role\\x3d\"group\" aria-labelledby\\x3d\"',d,'\" onmousedown\\x3d\"return false;\"\\x3e'],d=!1!==a.config.toolbarStartupExpanded,e,k;a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&\nb.push('\\x3cspan class\\x3d\"cke_toolbox_main\"'+(d?\"\\x3e\":' style\\x3d\"display:none\"\\x3e'));for(var r=a.toolbox.toolbars,f=B(a),l=0;l<f.length;l++){var m,n=0,v,p=f[l],w;if(p)if(e&&(b.push(\"\\x3c/span\\x3e\"),k=e=0),\"/\"===p)b.push('\\x3cspan class\\x3d\"cke_toolbar_break\"\\x3e\\x3c/span\\x3e');else{w=p.items||p;for(var x=0;x<w.length;x++){var t=w[x],q;if(t){var z=function(c){c=c.render(a,b);u=n.items.push(c)-1;0<u&&(c.previous=n.items[u-1],c.previous.next=c);c.toolbar=n;c.onkey=g;c.onfocus=function(){a.toolbox.focusCommandExecuted||\na.focus()}};if(t.type==CKEDITOR.UI_SEPARATOR)k=e&&t;else{q=!1!==t.canGroup;if(!n){m=CKEDITOR.tools.getNextId();n={id:m,items:[]};v=p.name&&(a.lang.toolbar.toolbarGroups[p.name]||p.name);b.push('\\x3cspan id\\x3d\"',m,'\" class\\x3d\"cke_toolbar\"',v?' aria-labelledby\\x3d\"'+m+'_label\"':\"\",' role\\x3d\"toolbar\"\\x3e');v&&b.push('\\x3cspan id\\x3d\"',m,'_label\" class\\x3d\"cke_voice_label\"\\x3e',v,\"\\x3c/span\\x3e\");b.push('\\x3cspan class\\x3d\"cke_toolbar_start\"\\x3e\\x3c/span\\x3e');var u=r.push(n)-1;0<u&&(n.previous=r[u-\n1],n.previous.next=n)}q?e||(b.push('\\x3cspan class\\x3d\"cke_toolgroup\" role\\x3d\"presentation\"\\x3e'),e=1):e&&(b.push(\"\\x3c/span\\x3e\"),e=0);k&&(z(k),k=0);z(t)}}}e&&(b.push(\"\\x3c/span\\x3e\"),k=e=0);n&&b.push('\\x3cspan class\\x3d\"cke_toolbar_end\"\\x3e\\x3c/span\\x3e\\x3c/span\\x3e')}}a.config.toolbarCanCollapse&&b.push(\"\\x3c/span\\x3e\");if(a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var A=CKEDITOR.tools.addFunction(function(){a.execCommand(\"toolbarCollapse\")});a.on(\"destroy\",function(){CKEDITOR.tools.removeFunction(A)});\na.addCommand(\"toolbarCollapse\",{readOnly:1,exec:function(b){var a=b.ui.space(\"toolbar_collapser\"),c=a.getPrevious(),e=b.ui.space(\"contents\"),d=c.getParent(),f=parseInt(e.$.style.height,10),h=d.$.offsetHeight,g=a.hasClass(\"cke_toolbox_collapser_min\");g?(c.show(),a.removeClass(\"cke_toolbox_collapser_min\"),a.setAttribute(\"title\",b.lang.toolbar.toolbarCollapse)):(c.hide(),a.addClass(\"cke_toolbox_collapser_min\"),a.setAttribute(\"title\",b.lang.toolbar.toolbarExpand));a.getFirst().setText(g?\"▲\":\"◀\");e.setStyle(\"height\",\nf-(d.$.offsetHeight-h)+\"px\");b.fire(\"resize\",{outerHeight:b.container.$.offsetHeight,contentsHeight:e.$.offsetHeight,outerWidth:b.container.$.offsetWidth})},modes:{wysiwyg:1,source:1}});a.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),\"toolbarCollapse\");b.push('\\x3ca title\\x3d\"'+(d?a.lang.toolbar.toolbarCollapse:a.lang.toolbar.toolbarExpand)+'\" id\\x3d\"'+a.ui.spaceId(\"toolbar_collapser\")+'\" tabIndex\\x3d\"-1\" class\\x3d\"cke_toolbox_collapser');d||b.push(\" cke_toolbox_collapser_min\");\nb.push('\" onclick\\x3d\"CKEDITOR.tools.callFunction('+A+')\"\\x3e','\\x3cspan class\\x3d\"cke_arrow\"\\x3e\\x26#9650;\\x3c/span\\x3e',\"\\x3c/a\\x3e\")}b.push(\"\\x3c/span\\x3e\");c.data.html+=b.join(\"\")}});a.on(\"destroy\",function(){if(this.toolbox){var a,d=0,b,e,g;for(a=this.toolbox.toolbars;d<a.length;d++)for(e=a[d].items,b=0;b<e.length;b++)g=e[b],g.clickFn&&CKEDITOR.tools.removeFunction(g.clickFn),g.keyDownFn&&CKEDITOR.tools.removeFunction(g.keyDownFn)}});a.on(\"uiReady\",function(){var c=a.ui.space(\"toolbox\");c&&a.focusManager.add(c,\n1)});a.addCommand(\"toolbarFocus\",C);a.setKeystroke(CKEDITOR.ALT+121,\"toolbarFocus\");a.ui.add(\"-\",CKEDITOR.UI_SEPARATOR,{});a.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a,d){d.push('\\x3cspan class\\x3d\"cke_toolbar_separator\" role\\x3d\"separator\"\\x3e\\x3c/span\\x3e');return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(a,d,g){var c=q(this.editor),h=0===d,b={name:a};if(g){if(g=CKEDITOR.tools.search(c,function(a){return a.name==g})){!g.groups&&(g.groups=[]);if(d&&\n(d=CKEDITOR.tools.indexOf(g.groups,d),0<=d)){g.groups.splice(d+1,0,a);return}h?g.groups.splice(0,0,a):g.groups.push(a);return}d=null}d&&(d=CKEDITOR.tools.indexOf(c,function(a){return a.name==d}));h?c.splice(0,0,a):\"number\"==typeof d?c.splice(d+1,0,b):c.push(a)}})();CKEDITOR.UI_SEPARATOR=\"separator\";CKEDITOR.config.toolbarLocation=\"top\";(function(){function q(a,d){function l(c){c=k.list[c];if(c.equals(a.editable())||\"true\"==c.getAttribute(\"contenteditable\")){var e=a.createRange();e.selectNodeContents(c);e.select()}else a.getSelection().selectElement(c);a.focus()}function m(){n&&n.setHtml('\\x3cspan class\\x3d\"cke_path_empty\"\\x3e\\x26nbsp;\\x3c/span\\x3e');delete k.list}var p=a.ui.spaceId(\"path\"),n,k=a._.elementsPath,q=k.idBase;d.html+='\\x3cspan id\\x3d\"'+p+'_label\" class\\x3d\"cke_voice_label\"\\x3e'+a.lang.elementspath.eleLabel+'\\x3c/span\\x3e\\x3cspan id\\x3d\"'+\np+'\" class\\x3d\"cke_path\" role\\x3d\"group\" aria-labelledby\\x3d\"'+p+'_label\"\\x3e\\x3cspan class\\x3d\"cke_path_empty\"\\x3e\\x26nbsp;\\x3c/span\\x3e\\x3c/span\\x3e';a.on(\"uiReady\",function(){var c=a.ui.space(\"path\");c&&a.focusManager.add(c,1)});k.onClick=l;var v=CKEDITOR.tools.addFunction(l),w=CKEDITOR.tools.addFunction(function(c,e){var g=k.idBase,b;e=new CKEDITOR.dom.event(e);b=\"rtl\"==a.lang.dir;switch(e.getKeystroke()){case b?39:37:case 9:return(b=CKEDITOR.document.getById(g+(c+1)))||(b=CKEDITOR.document.getById(g+\n\"0\")),b.focus(),!1;case b?37:39:case CKEDITOR.SHIFT+9:return(b=CKEDITOR.document.getById(g+(c-1)))||(b=CKEDITOR.document.getById(g+(k.list.length-1))),b.focus(),!1;case 27:return a.focus(),!1;case 13:case 32:return l(c),!1}return!0});a.on(\"selectionChange\",function(){for(var c=[],e=k.list=[],g=[],b=k.filters,d=!0,l=a.elementPath().elements,f,u=l.length;u--;){var h=l[u],r=0;f=h.data(\"cke-display-name\")?h.data(\"cke-display-name\"):h.data(\"cke-real-element-type\")?h.data(\"cke-real-element-type\"):h.getName();\n(d=h.hasAttribute(\"contenteditable\")?\"true\"==h.getAttribute(\"contenteditable\"):d)||h.hasAttribute(\"contenteditable\")||(r=1);for(var t=0;t<b.length;t++){var m=b[t](h,f);if(!1===m){r=1;break}f=m||f}r||(e.unshift(h),g.unshift(f))}e=e.length;for(b=0;b<e;b++)f=g[b],d=a.lang.elementspath.eleTitle.replace(/%1/,f),f=x.output({id:q+b,label:d,text:f,jsTitle:\"javascript:void('\"+f+\"')\",index:b,keyDownFn:w,clickFn:v}),c.unshift(f);n||(n=CKEDITOR.document.getById(p));g=n;g.setHtml(c.join(\"\")+'\\x3cspan class\\x3d\"cke_path_empty\"\\x3e\\x26nbsp;\\x3c/span\\x3e');\na.fire(\"elementsPathUpdate\",{space:g})});a.on(\"readOnly\",m);a.on(\"contentDomUnload\",m);a.addCommand(\"elementsPathFocus\",y.toolbarFocus);a.setKeystroke(CKEDITOR.ALT+122,\"elementsPathFocus\")}var y={toolbarFocus:{editorFocus:!1,readOnly:1,exec:function(a){(a=CKEDITOR.document.getById(a._.elementsPath.idBase+\"0\"))&&a.focus(CKEDITOR.env.ie||CKEDITOR.env.air)}}},d=\"\";CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(d+=' onkeypress\\x3d\"return false;\"');CKEDITOR.env.gecko&&(d+=' onblur\\x3d\"this.style.cssText \\x3d this.style.cssText;\"');\nvar x=CKEDITOR.addTemplate(\"pathItem\",'\\x3ca id\\x3d\"{id}\" href\\x3d\"{jsTitle}\" tabindex\\x3d\"-1\" class\\x3d\"cke_path_item\" title\\x3d\"{label}\"'+d+' hidefocus\\x3d\"true\"  onkeydown\\x3d\"return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );\" onclick\\x3d\"CKEDITOR.tools.callFunction({clickFn},{index}); return false;\" role\\x3d\"button\" aria-label\\x3d\"{label}\"\\x3e{text}\\x3c/a\\x3e');CKEDITOR.plugins.add(\"elementspath\",{init:function(a){a._.elementsPath={idBase:\"cke_elementspath_\"+CKEDITOR.tools.getNextNumber()+\n\"_\",filters:[]};a.on(\"uiSpace\",function(d){\"bottom\"==d.data.space&&q(a,d.data)})}})})();(function(){function q(b,d,a){a=b.config.forceEnterMode||a;\"wysiwyg\"==b.mode&&(d||(d=b.activeEnterMode),b.elementPath().isContextFor(\"p\")||(d=CKEDITOR.ENTER_BR,a=1),b.fire(\"saveSnapshot\"),d==CKEDITOR.ENTER_BR?t(b,d,null,a):u(b,d,null,a),b.fire(\"saveSnapshot\"))}function v(b){b=b.getSelection().getRanges(!0);for(var d=b.length-1;0<d;d--)b[d].deleteContents();return b[0]}function y(b){var d=b.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&\"true\"==a.getAttribute(\"contenteditable\")},\n!0);if(b.root.equals(d))return b;d=new CKEDITOR.dom.range(d);d.moveToRange(b);return d}CKEDITOR.plugins.add(\"enterkey\",{init:function(b){b.addCommand(\"enter\",{modes:{wysiwyg:1},editorFocus:!1,exec:function(b){q(b)}});b.addCommand(\"shiftEnter\",{modes:{wysiwyg:1},editorFocus:!1,exec:function(b){q(b,b.activeShiftEnterMode,1)}});b.setKeystroke([[13,\"enter\"],[CKEDITOR.SHIFT+13,\"shiftEnter\"]])}});var z=CKEDITOR.dom.walker.whitespaces(),A=CKEDITOR.dom.walker.bookmark();CKEDITOR.plugins.enterkey={enterBlock:function(b,\nd,a,h){if(a=a||v(b)){a=y(a);var f=a.document,k=a.checkStartOfBlock(),m=a.checkEndOfBlock(),l=b.elementPath(a.startContainer),c=l.block,n=d==CKEDITOR.ENTER_DIV?\"div\":\"p\",e;if(k&&m){if(c&&(c.is(\"li\")||c.getParent().is(\"li\"))){c.is(\"li\")||(c=c.getParent());a=c.getParent();e=a.getParent();h=!c.hasPrevious();var p=!c.hasNext(),n=b.getSelection(),g=n.createBookmarks(),k=c.getDirection(1),m=c.getAttribute(\"class\"),r=c.getAttribute(\"style\"),q=e.getDirection(1)!=k;b=b.enterMode!=CKEDITOR.ENTER_BR||q||r||m;\nif(e.is(\"li\"))h||p?(h&&p&&a.remove(),c[p?\"insertAfter\":\"insertBefore\"](e)):c.breakParent(e);else{if(b)if(l.block.is(\"li\")?(e=f.createElement(d==CKEDITOR.ENTER_P?\"p\":\"div\"),q&&e.setAttribute(\"dir\",k),r&&e.setAttribute(\"style\",r),m&&e.setAttribute(\"class\",m),c.moveChildren(e)):e=l.block,h||p)e[h?\"insertBefore\":\"insertAfter\"](a);else c.breakParent(a),e.insertAfter(a);else if(c.appendBogus(!0),h||p)for(;f=c[h?\"getFirst\":\"getLast\"]();)f[h?\"insertBefore\":\"insertAfter\"](a);else for(c.breakParent(a);f=c.getLast();)f.insertAfter(a);\nc.remove()}n.selectBookmarks(g);return}if(c&&c.getParent().is(\"blockquote\")){c.breakParent(c.getParent());c.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||c.getPrevious().remove();c.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))||c.getNext().remove();a.moveToElementEditStart(c);a.select();return}}else if(c&&c.is(\"pre\")&&!m){t(b,d,a,h);return}if(k=a.splitBlock(n)){d=k.previousBlock;c=k.nextBlock;l=k.wasStartOfBlock;b=k.wasEndOfBlock;c?(g=c.getParent(),g.is(\"li\")&&(c.breakParent(g),\nc.move(c.getNext(),1))):d&&(g=d.getParent())&&g.is(\"li\")&&(d.breakParent(g),g=d.getNext(),a.moveToElementEditStart(g),d.move(d.getPrevious()));if(l||b){if(d){if(d.is(\"li\")||!w.test(d.getName())&&!d.is(\"pre\"))e=d.clone()}else c&&(e=c.clone());e?h&&!e.is(\"li\")&&e.renameNode(n):g&&g.is(\"li\")?e=g:(e=f.createElement(n),d&&(p=d.getDirection())&&e.setAttribute(\"dir\",p));if(f=k.elementPath)for(h=0,n=f.elements.length;h<n;h++){g=f.elements[h];if(g.equals(f.block)||g.equals(f.blockLimit))break;CKEDITOR.dtd.$removeEmpty[g.getName()]&&\n(g=g.clone(),e.moveChildren(g),e.append(g))}e.appendBogus();e.getParent()||a.insertNode(e);e.is(\"li\")&&e.removeAttribute(\"value\");!CKEDITOR.env.ie||!l||b&&d.getChildCount()||(a.moveToElementEditStart(b?d:e),a.select());a.moveToElementEditStart(l&&!b?c:e)}else c.is(\"li\")&&(e=a.clone(),e.selectNodeContents(c),e=new CKEDITOR.dom.walker(e),e.evaluator=function(a){return!(A(a)||z(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty))},(g=e.next())&&\ng.type==CKEDITOR.NODE_ELEMENT&&g.is(\"ul\",\"ol\")&&(CKEDITOR.env.needsBrFiller?f.createElement(\"br\"):f.createText(\" \")).insertBefore(g)),c&&a.moveToElementEditStart(c);a.select();a.scrollIntoView()}}},enterBr:function(b,d,a,h){if(a=a||v(b)){var f=a.document,k=a.checkEndOfBlock(),m=new CKEDITOR.dom.elementPath(b.getSelection().getStartElement()),l=m.block,c=l&&m.block.getName();h||\"li\"!=c?(!h&&k&&w.test(c)?(k=l.getDirection())?(f=f.createElement(\"div\"),f.setAttribute(\"dir\",k),f.insertAfter(l),a.setStart(f,\n0)):(f.createElement(\"br\").insertAfter(l),CKEDITOR.env.gecko&&f.createText(\"\").insertAfter(l),a.setStartAt(l.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START)):(b=\"pre\"==c&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?f.createText(\"\\r\"):f.createElement(\"br\"),a.deleteContents(),a.insertNode(b),CKEDITOR.env.needsBrFiller?(f.createText(\"﻿\").insertAfter(b),k&&(l||m.blockLimit).appendBogus(),b.getNext().$.nodeValue=\"\",a.setStartAt(b.getNext(),CKEDITOR.POSITION_AFTER_START)):\na.setStartAt(b,CKEDITOR.POSITION_AFTER_END)),a.collapse(!0),a.select(),a.scrollIntoView()):u(b,d,a,h)}}};var x=CKEDITOR.plugins.enterkey,t=x.enterBr,u=x.enterBlock,w=/^h[1-6]$/})();(function(){function k(b,f){var g={},c=[],e={nbsp:\" \",shy:\"­\",gt:\"\\x3e\",lt:\"\\x3c\",amp:\"\\x26\",apos:\"'\",quot:'\"'};b=b.replace(/\\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(b,a){var d=f?\"\\x26\"+a+\";\":e[a];g[d]=f?e[a]:\"\\x26\"+a+\";\";c.push(d);return\"\"});if(!f&&b){b=b.split(\",\");var a=document.createElement(\"div\"),d;a.innerHTML=\"\\x26\"+b.join(\";\\x26\")+\";\";d=a.innerHTML;a=null;for(a=0;a<d.length;a++){var h=d.charAt(a);g[h]=\"\\x26\"+b[a]+\";\";c.push(h)}}g.regex=c.join(f?\"|\":\"\");return g}CKEDITOR.plugins.add(\"entities\",\n{afterInit:function(b){function f(a){return h[a]}function g(b){return\"force\"!=c.entities_processNumerical&&a[b]?a[b]:\"\\x26#\"+b.charCodeAt(0)+\";\"}var c=b.config;if(b=(b=b.dataProcessor)&&b.htmlFilter){var e=[];!1!==c.basicEntities&&e.push(\"nbsp,gt,lt,amp\");c.entities&&(e.length&&e.push(\"quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro\"),\nc.entities_latin&&e.push(\"Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml\"),c.entities_greek&&e.push(\"Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv\"),\nc.entities_additional&&e.push(c.entities_additional));var a=k(e.join(\",\")),d=a.regex?\"[\"+a.regex+\"]\":\"a^\";delete a.regex;c.entities&&c.entities_processNumerical&&(d=\"[^ -~]|\"+d);var d=new RegExp(d,\"g\"),h=k(\"nbsp,gt,lt,amp,shy\",!0),l=new RegExp(h.regex,\"g\");b.addRules({text:function(a){return a.replace(l,f).replace(d,g)}},{applyToAll:!0,excludeNestedEditable:!0})}}})})();CKEDITOR.config.basicEntities=!0;CKEDITOR.config.entities=!0;CKEDITOR.config.entities_latin=!0;CKEDITOR.config.entities_greek=!0;\nCKEDITOR.config.entities_additional=\"#39\";CKEDITOR.plugins.add(\"popup\");\nCKEDITOR.tools.extend(CKEDITOR.editor.prototype,{popup:function(e,a,b,d){a=a||\"80%\";b=b||\"70%\";\"string\"==typeof a&&1<a.length&&\"%\"==a.substr(a.length-1,1)&&(a=parseInt(window.screen.width*parseInt(a,10)/100,10));\"string\"==typeof b&&1<b.length&&\"%\"==b.substr(b.length-1,1)&&(b=parseInt(window.screen.height*parseInt(b,10)/100,10));640>a&&(a=640);420>b&&(b=420);var f=parseInt((window.screen.height-b)/2,10),g=parseInt((window.screen.width-a)/2,10);d=(d||\"location\\x3dno,menubar\\x3dno,toolbar\\x3dno,dependent\\x3dyes,minimizable\\x3dno,modal\\x3dyes,alwaysRaised\\x3dyes,resizable\\x3dyes,scrollbars\\x3dyes\")+\",width\\x3d\"+\na+\",height\\x3d\"+b+\",top\\x3d\"+f+\",left\\x3d\"+g;var c=window.open(\"\",null,d,!0);if(!c)return!1;try{-1==navigator.userAgent.toLowerCase().indexOf(\" chrome/\")&&(c.moveTo(g,f),c.resizeTo(a,b)),c.focus(),c.location.href=e}catch(h){window.open(e,null,d,!0)}return!0}});(function(){function g(a,c){var d=[];if(c)for(var b in c)d.push(b+\"\\x3d\"+encodeURIComponent(c[b]));else return a;return a+(-1!=a.indexOf(\"?\")?\"\\x26\":\"?\")+d.join(\"\\x26\")}function k(a){a+=\"\";return a.charAt(0).toUpperCase()+a.substr(1)}function m(){var a=this.getDialog(),c=a.getParentEditor();c._.filebrowserSe=this;var d=c.config[\"filebrowser\"+k(a.getName())+\"WindowWidth\"]||c.config.filebrowserWindowWidth||\"80%\",a=c.config[\"filebrowser\"+k(a.getName())+\"WindowHeight\"]||c.config.filebrowserWindowHeight||\n\"70%\",b=this.filebrowser.params||{};b.CKEditor=c.name;b.CKEditorFuncNum=c._.filebrowserFn;b.langCode||(b.langCode=c.langCode);b=g(this.filebrowser.url,b);c.popup(b,d,a,c.config.filebrowserWindowFeatures||c.config.fileBrowserWindowFeatures)}function n(){var a=this.getDialog();a.getParentEditor()._.filebrowserSe=this;return a.getContentElement(this[\"for\"][0],this[\"for\"][1]).getInputElement().$.value&&a.getContentElement(this[\"for\"][0],this[\"for\"][1]).getAction()?!0:!1}function p(a,c,d){var b=d.params||\n{};b.CKEditor=a.name;b.CKEditorFuncNum=a._.filebrowserFn;b.langCode||(b.langCode=a.langCode);c.action=g(d.url,b);c.filebrowser=d}function l(a,c,d,b){if(b&&b.length)for(var e,g=b.length;g--;)if(e=b[g],\"hbox\"!=e.type&&\"vbox\"!=e.type&&\"fieldset\"!=e.type||l(a,c,d,e.children),e.filebrowser)if(\"string\"==typeof e.filebrowser&&(e.filebrowser={action:\"fileButton\"==e.type?\"QuickUpload\":\"Browse\",target:e.filebrowser}),\"Browse\"==e.filebrowser.action){var f=e.filebrowser.url;void 0===f&&(f=a.config[\"filebrowser\"+\nk(c)+\"BrowseUrl\"],void 0===f&&(f=a.config.filebrowserBrowseUrl));f&&(e.onClick=m,e.filebrowser.url=f,e.hidden=!1)}else if(\"QuickUpload\"==e.filebrowser.action&&e[\"for\"]&&(f=e.filebrowser.url,void 0===f&&(f=a.config[\"filebrowser\"+k(c)+\"UploadUrl\"],void 0===f&&(f=a.config.filebrowserUploadUrl)),f)){var h=e.onClick;e.onClick=function(a){var b=a.sender;if(h&&!1===h.call(b,a))return!1;if(n.call(b,a)){a=b.getDialog().getContentElement(this[\"for\"][0],this[\"for\"][1]).getInputElement();if(b=new CKEDITOR.dom.element(a.$.form))(a=\nb.$.elements.ckCsrfToken)?a=new CKEDITOR.dom.element(a):(a=new CKEDITOR.dom.element(\"input\"),a.setAttributes({name:\"ckCsrfToken\",type:\"hidden\"}),b.append(a)),a.setAttribute(\"value\",CKEDITOR.tools.getCsrfToken());return!0}return!1};e.filebrowser.url=f;e.hidden=!1;p(a,d.getContents(e[\"for\"][0]).get(e[\"for\"][1]),e.filebrowser)}}function h(a,c,d){if(-1!==d.indexOf(\";\")){d=d.split(\";\");for(var b=0;b<d.length;b++)if(h(a,c,d[b]))return!0;return!1}return(a=a.getContents(c).get(d).filebrowser)&&a.url}function q(a,\nc){var d=this._.filebrowserSe.getDialog(),b=this._.filebrowserSe[\"for\"],e=this._.filebrowserSe.filebrowser.onSelect;b&&d.getContentElement(b[0],b[1]).reset();if(\"function\"!=typeof c||!1!==c.call(this._.filebrowserSe))if(!e||!1!==e.call(this._.filebrowserSe,a,c))if(\"string\"==typeof c&&c&&alert(c),a&&(b=this._.filebrowserSe,d=b.getDialog(),b=b.filebrowser.target||null))if(b=b.split(\":\"),e=d.getContentElement(b[0],b[1]))e.setValue(a),d.selectPage(b[0])}CKEDITOR.plugins.add(\"filebrowser\",{requires:\"popup\",\ninit:function(a){a._.filebrowserFn=CKEDITOR.tools.addFunction(q,a);a.on(\"destroy\",function(){CKEDITOR.tools.removeFunction(this._.filebrowserFn)})}});CKEDITOR.on(\"dialogDefinition\",function(a){if(a.editor.plugins.filebrowser)for(var c=a.data.definition,d,b=0;b<c.contents.length;++b)if(d=c.contents[b])l(a.editor,a.data.name,c,d.elements),d.hidden&&d.filebrowser&&(d.hidden=!h(c,d.id,d.filebrowser))})})();(function(){function k(a){var l=a.config,p=a.fire(\"uiSpace\",{space:\"top\",html:\"\"}).html,t=function(){function f(a,c,e){b.setStyle(c,w(e));b.setStyle(\"position\",a)}function e(a){var b=k.getDocumentPosition();switch(a){case \"top\":f(\"absolute\",\"top\",b.y-q-r);break;case \"pin\":f(\"fixed\",\"top\",x);break;case \"bottom\":f(\"absolute\",\"top\",b.y+(c.height||c.bottom-c.top)+r)}m=a}var m,k,n,c,h,q,v,p=l.floatSpaceDockedOffsetX||0,r=l.floatSpaceDockedOffsetY||0,u=l.floatSpacePinnedOffsetX||0,x=l.floatSpacePinnedOffsetY||\n0;return function(d){if(k=a.editable()){var f=d&&\"focus\"==d.name;f&&b.show();a.fire(\"floatingSpaceLayout\",{show:f});b.removeStyle(\"left\");b.removeStyle(\"right\");n=b.getClientRect();c=k.getClientRect();h=g.getViewPaneSize();q=n.height;v=\"pageXOffset\"in g.$?g.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft;m?(q+r<=c.top?e(\"top\"):q+r>h.height-c.bottom?e(\"pin\"):e(\"bottom\"),d=h.width/2,d=l.floatSpacePreferRight?\"right\":0<c.left&&c.right<h.width&&c.width>n.width?\"rtl\"==l.contentsLangDirection?\n\"right\":\"left\":d-c.left>c.right-d?\"left\":\"right\",n.width>h.width?(d=\"left\",f=0):(f=\"left\"==d?0<c.left?c.left:0:c.right<h.width?h.width-c.right:0,f+n.width>h.width&&(d=\"left\"==d?\"right\":\"left\",f=0)),b.setStyle(d,w((\"pin\"==m?u:p)+f+(\"pin\"==m?0:\"left\"==d?v:-v)))):(m=\"pin\",e(\"pin\"),t(d))}}}();if(p){var k=new CKEDITOR.template('\\x3cdiv id\\x3d\"cke_{name}\" class\\x3d\"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+CKEDITOR.env.cssClass+'\" dir\\x3d\"{langDir}\" title\\x3d\"'+(CKEDITOR.env.gecko?\n\" \":\"\")+'\" lang\\x3d\"{langCode}\" role\\x3d\"application\" style\\x3d\"{style}\"'+(a.title?' aria-labelledby\\x3d\"cke_{name}_arialbl\"':\" \")+\"\\x3e\"+(a.title?'\\x3cspan id\\x3d\"cke_{name}_arialbl\" class\\x3d\"cke_voice_label\"\\x3e{voiceLabel}\\x3c/span\\x3e':\" \")+'\\x3cdiv class\\x3d\"cke_inner\"\\x3e\\x3cdiv id\\x3d\"{topId}\" class\\x3d\"cke_top\" role\\x3d\"presentation\"\\x3e{content}\\x3c/div\\x3e\\x3c/div\\x3e\\x3c/div\\x3e'),b=CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(k.output({content:p,id:a.id,langDir:a.lang.dir,\nlangCode:a.langCode,name:a.name,style:\"display:none;z-index:\"+(l.baseFloatZIndex-1),topId:a.ui.spaceId(\"top\"),voiceLabel:a.title}))),u=CKEDITOR.tools.eventsBuffer(500,t),e=CKEDITOR.tools.eventsBuffer(100,t);b.unselectable();b.on(\"mousedown\",function(a){a=a.data;a.getTarget().hasAscendant(\"a\",1)||a.preventDefault()});a.on(\"focus\",function(b){t(b);a.on(\"change\",u.input);g.on(\"scroll\",e.input);g.on(\"resize\",e.input)});a.on(\"blur\",function(){b.hide();a.removeListener(\"change\",u.input);g.removeListener(\"scroll\",\ne.input);g.removeListener(\"resize\",e.input)});a.on(\"destroy\",function(){g.removeListener(\"scroll\",e.input);g.removeListener(\"resize\",e.input);b.clearCustomData();b.remove()});a.focusManager.hasFocus&&b.show();a.focusManager.add(b,1)}}var g=CKEDITOR.document.getWindow(),w=CKEDITOR.tools.cssLength;CKEDITOR.plugins.add(\"floatingspace\",{init:function(a){a.on(\"loaded\",function(){k(this)},null,null,20)}})})();CKEDITOR.plugins.add(\"listblock\",{requires:\"panel\",onLoad:function(){var f=CKEDITOR.addTemplate(\"panel-list\",'\\x3cul role\\x3d\"presentation\" class\\x3d\"cke_panel_list\"\\x3e{items}\\x3c/ul\\x3e'),g=CKEDITOR.addTemplate(\"panel-list-item\",'\\x3cli id\\x3d\"{id}\" class\\x3d\"cke_panel_listItem\" role\\x3dpresentation\\x3e\\x3ca id\\x3d\"{id}_option\" _cke_focus\\x3d1 hidefocus\\x3dtrue title\\x3d\"{title}\" href\\x3d\"javascript:void(\\'{val}\\')\"  {onclick}\\x3d\"CKEDITOR.tools.callFunction({clickFn},\\'{val}\\'); return false;\" role\\x3d\"option\"\\x3e{text}\\x3c/a\\x3e\\x3c/li\\x3e'),\nh=CKEDITOR.addTemplate(\"panel-list-group\",'\\x3ch1 id\\x3d\"{id}\" class\\x3d\"cke_panel_grouptitle\" role\\x3d\"presentation\" \\x3e{label}\\x3c/h1\\x3e'),k=/\\'/g;CKEDITOR.ui.panel.prototype.addListBlock=function(a,b){return this.addBlock(a,new CKEDITOR.ui.listBlock(this.getHolderElement(),b))};CKEDITOR.ui.listBlock=CKEDITOR.tools.createClass({base:CKEDITOR.ui.panel.block,$:function(a,b){b=b||{};var c=b.attributes||(b.attributes={});(this.multiSelect=!!b.multiSelect)&&(c[\"aria-multiselectable\"]=!0);!c.role&&\n(c.role=\"listbox\");this.base.apply(this,arguments);this.element.setAttribute(\"role\",c.role);c=this.keys;c[40]=\"next\";c[9]=\"next\";c[38]=\"prev\";c[CKEDITOR.SHIFT+9]=\"prev\";c[32]=CKEDITOR.env.ie?\"mouseup\":\"click\";CKEDITOR.env.ie&&(c[13]=\"mouseup\");this._.pendingHtml=[];this._.pendingList=[];this._.items={};this._.groups={}},_:{close:function(){if(this._.started){var a=f.output({items:this._.pendingList.join(\"\")});this._.pendingList=[];this._.pendingHtml.push(a);delete this._.started}},getClick:function(){this._.click||\n(this._.click=CKEDITOR.tools.addFunction(function(a){var b=this.toggle(a);if(this.onClick)this.onClick(a,b)},this));return this._.click}},proto:{add:function(a,b,c){var d=CKEDITOR.tools.getNextId();this._.started||(this._.started=1,this._.size=this._.size||0);this._.items[a]=d;var e;e=CKEDITOR.tools.htmlEncodeAttr(a).replace(k,\"\\\\'\");a={id:d,val:e,onclick:CKEDITOR.env.ie?'onclick\\x3d\"return false;\" onmouseup':\"onclick\",clickFn:this._.getClick(),title:CKEDITOR.tools.htmlEncodeAttr(c||a),text:b||a};\nthis._.pendingList.push(g.output(a))},startGroup:function(a){this._.close();var b=CKEDITOR.tools.getNextId();this._.groups[a]=b;this._.pendingHtml.push(h.output({id:b,label:a}))},commit:function(){this._.close();this.element.appendHtml(this._.pendingHtml.join(\"\"));delete this._.size;this._.pendingHtml=[]},toggle:function(a){var b=this.isMarked(a);b?this.unmark(a):this.mark(a);return!b},hideGroup:function(a){var b=(a=this.element.getDocument().getById(this._.groups[a]))&&a.getNext();a&&(a.setStyle(\"display\",\n\"none\"),b&&\"ul\"==b.getName()&&b.setStyle(\"display\",\"none\"))},hideItem:function(a){this.element.getDocument().getById(this._.items[a]).setStyle(\"display\",\"none\")},showAll:function(){var a=this._.items,b=this._.groups,c=this.element.getDocument(),d;for(d in a)c.getById(a[d]).setStyle(\"display\",\"\");for(var e in b)a=c.getById(b[e]),d=a.getNext(),a.setStyle(\"display\",\"\"),d&&\"ul\"==d.getName()&&d.setStyle(\"display\",\"\")},mark:function(a){this.multiSelect||this.unmarkAll();a=this._.items[a];var b=this.element.getDocument().getById(a);\nb.addClass(\"cke_selected\");this.element.getDocument().getById(a+\"_option\").setAttribute(\"aria-selected\",!0);this.onMark&&this.onMark(b)},unmark:function(a){var b=this.element.getDocument();a=this._.items[a];var c=b.getById(a);c.removeClass(\"cke_selected\");b.getById(a+\"_option\").removeAttribute(\"aria-selected\");this.onUnmark&&this.onUnmark(c)},unmarkAll:function(){var a=this._.items,b=this.element.getDocument(),c;for(c in a){var d=a[c];b.getById(d).removeClass(\"cke_selected\");b.getById(d+\"_option\").removeAttribute(\"aria-selected\")}this.onUnmark&&\nthis.onUnmark()},isMarked:function(a){return this.element.getDocument().getById(this._.items[a]).hasClass(\"cke_selected\")},focus:function(a){this._.focusIndex=-1;var b=this.element.getElementsByTag(\"a\"),c,d=-1;if(a)for(c=this.element.getDocument().getById(this._.items[a]).getFirst();a=b.getItem(++d);){if(a.equals(c)){this._.focusIndex=d;break}}else this.element.focus();c&&setTimeout(function(){c.focus()},0)}}})}});CKEDITOR.plugins.add(\"richcombo\",{requires:\"floatpanel,listblock,button\",beforeInit:function(d){d.ui.addHandler(CKEDITOR.UI_RICHCOMBO,CKEDITOR.ui.richCombo.handler)}});\n(function(){var d='\\x3cspan id\\x3d\"{id}\" class\\x3d\"cke_combo cke_combo__{name} {cls}\" role\\x3d\"presentation\"\\x3e\\x3cspan id\\x3d\"{id}_label\" class\\x3d\"cke_combo_label\"\\x3e{label}\\x3c/span\\x3e\\x3ca class\\x3d\"cke_combo_button\" title\\x3d\"{title}\" tabindex\\x3d\"-1\"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?\"\":\" href\\x3d\\\"javascript:void('{titleJs}')\\\"\")+' hidefocus\\x3d\"true\" role\\x3d\"button\" aria-labelledby\\x3d\"{id}_label\" aria-haspopup\\x3d\"true\"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(d+=' onkeypress\\x3d\"return false;\"');\nCKEDITOR.env.gecko&&(d+=' onblur\\x3d\"this.style.cssText \\x3d this.style.cssText;\"');var d=d+(' onkeydown\\x3d\"return CKEDITOR.tools.callFunction({keydownFn},event,this);\" onfocus\\x3d\"return CKEDITOR.tools.callFunction({focusFn},event);\" '+(CKEDITOR.env.ie?'onclick\\x3d\"return false;\" onmouseup':\"onclick\")+'\\x3d\"CKEDITOR.tools.callFunction({clickFn},this);return false;\"\\x3e\\x3cspan id\\x3d\"{id}_text\" class\\x3d\"cke_combo_text cke_combo_inlinelabel\"\\x3e{label}\\x3c/span\\x3e\\x3cspan class\\x3d\"cke_combo_open\"\\x3e\\x3cspan class\\x3d\"cke_combo_arrow\"\\x3e'+\n(CKEDITOR.env.hc?\"\\x26#9660;\":CKEDITOR.env.air?\"\\x26nbsp;\":\"\")+\"\\x3c/span\\x3e\\x3c/span\\x3e\\x3c/a\\x3e\\x3c/span\\x3e\"),k=CKEDITOR.addTemplate(\"combo\",d);CKEDITOR.UI_RICHCOMBO=\"richcombo\";CKEDITOR.ui.richCombo=CKEDITOR.tools.createClass({$:function(a){CKEDITOR.tools.extend(this,a,{canGroup:!1,title:a.label,modes:{wysiwyg:1},editorFocus:1});a=this.panel||{};delete this.panel;this.id=CKEDITOR.tools.getNextNumber();this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.className=\"cke_combopanel\";\na.block={multiSelect:a.multiSelect,attributes:a.attributes};a.toolbarRelated=!0;this._={panelDefinition:a,items:{}}},proto:{renderHtml:function(a){var b=[];this.render(a,b);return b.join(\"\")},render:function(a,b){function g(){if(this.getState()!=CKEDITOR.TRISTATE_ON){var c=this.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;a.readOnly&&!this.readOnly&&(c=CKEDITOR.TRISTATE_DISABLED);this.setState(c);this.setValue(\"\");c!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var d=\nCKEDITOR.env,h=\"cke_\"+this.id,e=CKEDITOR.tools.addFunction(function(b){l&&(a.unlockSelection(1),l=0);c.execute(b)},this),f=this,c={id:h,combo:this,focus:function(){CKEDITOR.document.getById(h).getChild(1).focus()},execute:function(c){var b=f._;if(b.state!=CKEDITOR.TRISTATE_DISABLED)if(f.createPanel(a),b.on)b.panel.hide();else{f.commit();var d=f.getValue();d?b.list.mark(d):b.list.unmarkAll();b.panel.showBlock(f.id,new CKEDITOR.dom.element(c),4)}},clickFn:e};a.on(\"activeFilterChange\",g,this);a.on(\"mode\",\ng,this);a.on(\"selectionChange\",g,this);!this.readOnly&&a.on(\"readOnly\",g,this);var m=CKEDITOR.tools.addFunction(function(b,d){b=new CKEDITOR.dom.event(b);var g=b.getKeystroke();if(40==g)a.once(\"panelShow\",function(a){a.data._.panel._.currentBlock.onKeyDown(40)});switch(g){case 13:case 32:case 40:CKEDITOR.tools.callFunction(e,d);break;default:c.onkey(c,g)}b.preventDefault()}),n=CKEDITOR.tools.addFunction(function(){c.onfocus&&c.onfocus()}),l=0;c.keyDownFn=m;d={id:h,name:this.name||this.command,label:this.label,\ntitle:this.title,cls:this.className||\"\",titleJs:d.gecko&&!d.hc?\"\":(this.title||\"\").replace(\"'\",\"\"),keydownFn:m,focusFn:n,clickFn:e};k.output(d,b);if(this.onRender)this.onRender();return c},createPanel:function(a){if(!this._.panel){var b=this._.panelDefinition,d=this._.panelDefinition.block,k=b.parent||CKEDITOR.document.getBody(),h=\"cke_combopanel__\"+this.name,e=new CKEDITOR.ui.floatPanel(a,k,b),f=e.addListBlock(this.id,d),c=this;e.onShow=function(){this.element.addClass(h);c.setState(CKEDITOR.TRISTATE_ON);\nc._.on=1;c.editorFocus&&!a.focusManager.hasFocus&&a.focus();if(c.onOpen)c.onOpen();a.once(\"panelShow\",function(){f.focus(!f.multiSelect&&c.getValue())})};e.onHide=function(b){this.element.removeClass(h);c.setState(c.modes&&c.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);c._.on=0;if(!b&&c.onClose)c.onClose()};e.onEscape=function(){e.hide(1)};f.onClick=function(a,b){c.onClick&&c.onClick.call(c,a,b);e.hide()};this._.panel=e;this._.list=f;e.getBlock(this.id).onHide=function(){c._.on=\n0;c.setState(CKEDITOR.TRISTATE_OFF)};this.init&&this.init()}},setValue:function(a,b){this._.value=a;var d=this.document.getById(\"cke_\"+this.id+\"_text\");d&&(a||b?d.removeClass(\"cke_combo_inlinelabel\"):(b=this.label,d.addClass(\"cke_combo_inlinelabel\")),d.setText(\"undefined\"!=typeof b?b:a))},getValue:function(){return this._.value||\"\"},unmarkAll:function(){this._.list.unmarkAll()},mark:function(a){this._.list.mark(a)},hideItem:function(a){this._.list.hideItem(a)},hideGroup:function(a){this._.list.hideGroup(a)},\nshowAll:function(){this._.list.showAll()},add:function(a,b,d){this._.items[a]=d||a;this._.list.add(a,b,d)},startGroup:function(a){this._.list.startGroup(a)},commit:function(){this._.committed||(this._.list.commit(),this._.committed=1,CKEDITOR.ui.fire(\"ready\",this));this._.committed=1},setState:function(a){if(this._.state!=a){var b=this.document.getById(\"cke_\"+this.id);b.setState(a,\"cke_combo\");a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute(\"aria-disabled\",!0):b.removeAttribute(\"aria-disabled\");this._.state=\na}},getState:function(){return this._.state},enable:function(){this._.state==CKEDITOR.TRISTATE_DISABLED&&this.setState(this._.lastState)},disable:function(){this._.state!=CKEDITOR.TRISTATE_DISABLED&&(this._.lastState=this._.state,this.setState(CKEDITOR.TRISTATE_DISABLED))}},statics:{handler:{create:function(a){return new CKEDITOR.ui.richCombo(a)}}}});CKEDITOR.ui.prototype.addRichCombo=function(a,b){this.add(a,CKEDITOR.UI_RICHCOMBO,b)}})();CKEDITOR.plugins.add(\"format\",{requires:\"richcombo\",init:function(a){if(!a.blockless){for(var f=a.config,c=a.lang.format,l=f.format_tags.split(\";\"),d={},m=0,n=[],g=0;g<l.length;g++){var h=l[g],k=new CKEDITOR.style(f[\"format_\"+h]);if(!a.filter.customConfig||a.filter.check(k))m++,d[h]=k,d[h]._.enterMode=a.config.enterMode,n.push(k)}0!==m&&a.ui.addRichCombo(\"Format\",{label:c.label,title:c.panelTitle,toolbar:\"styles,20\",allowedContent:n,panel:{css:[CKEDITOR.skin.getPath(\"editor\")].concat(f.contentsCss),\nmultiSelect:!1,attributes:{\"aria-label\":c.panelTitle}},init:function(){this.startGroup(c.panelTitle);for(var a in d){var e=c[\"tag_\"+a];this.add(a,d[a].buildPreview(e),e)}},onClick:function(b){a.focus();a.fire(\"saveSnapshot\");b=d[b];var e=a.elementPath();a[b.checkActive(e,a)?\"removeStyle\":\"applyStyle\"](b);setTimeout(function(){a.fire(\"saveSnapshot\")},0)},onRender:function(){a.on(\"selectionChange\",function(b){var e=this.getValue();b=b.data.path;this.refresh();for(var c in d)if(d[c].checkActive(b,a)){c!=\ne&&this.setValue(c,a.lang.format[\"tag_\"+c]);return}this.setValue(\"\")},this)},onOpen:function(){this.showAll();for(var b in d)a.activeFilter.check(d[b])||this.hideItem(b)},refresh:function(){var b=a.elementPath();if(b){if(b.isContextFor(\"p\"))for(var c in d)if(a.activeFilter.check(d[c]))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}}})}}});CKEDITOR.config.format_tags=\"p;h1;h2;h3;h4;h5;h6;pre;address;div\";CKEDITOR.config.format_p={element:\"p\"};CKEDITOR.config.format_div={element:\"div\"};\nCKEDITOR.config.format_pre={element:\"pre\"};CKEDITOR.config.format_address={element:\"address\"};CKEDITOR.config.format_h1={element:\"h1\"};CKEDITOR.config.format_h2={element:\"h2\"};CKEDITOR.config.format_h3={element:\"h3\"};CKEDITOR.config.format_h4={element:\"h4\"};CKEDITOR.config.format_h5={element:\"h5\"};CKEDITOR.config.format_h6={element:\"h6\"};(function(){var b={canUndo:!1,exec:function(a){var b=a.document.createElement(\"hr\");a.insertElement(b)},allowedContent:\"hr\",requiredContent:\"hr\"};CKEDITOR.plugins.add(\"horizontalrule\",{init:function(a){a.blockless||(a.addCommand(\"horizontalrule\",b),a.ui.addButton&&a.ui.addButton(\"HorizontalRule\",{label:a.lang.horizontalrule.toolbar,command:\"horizontalrule\",toolbar:\"insert,40\"}))}})})();CKEDITOR.plugins.add(\"htmlwriter\",{init:function(b){var a=new CKEDITOR.htmlWriter;a.forceSimpleAmpersand=b.config.forceSimpleAmpersand;a.indentationChars=b.config.dataIndentationChars||\"\\t\";b.dataProcessor.writer=a}});\nCKEDITOR.htmlWriter=CKEDITOR.tools.createClass({base:CKEDITOR.htmlParser.basicWriter,$:function(){this.base();this.indentationChars=\"\\t\";this.selfClosingEnd=\" /\\x3e\";this.lineBreakChars=\"\\n\";this.sortAttributes=1;this._.indent=0;this._.indentation=\"\";this._.inPre=0;this._.rules={};var b=CKEDITOR.dtd,a;for(a in CKEDITOR.tools.extend({},b.$nonBodyContent,b.$block,b.$listItem,b.$tableContent))this.setRules(a,{indent:!b[a][\"#\"],breakBeforeOpen:1,breakBeforeClose:!b[a][\"#\"],breakAfterClose:1,needsSpace:a in\nb.$block&&!(a in{li:1,dt:1,dd:1})});this.setRules(\"br\",{breakAfterOpen:1});this.setRules(\"title\",{indent:0,breakAfterOpen:0});this.setRules(\"style\",{indent:0,breakBeforeClose:1});this.setRules(\"pre\",{breakAfterOpen:1,indent:0})},proto:{openTag:function(b){var a=this._.rules[b];this._.afterCloser&&a&&a.needsSpace&&this._.needsSpace&&this._.output.push(\"\\n\");this._.indent?this.indentation():a&&a.breakBeforeOpen&&(this.lineBreak(),this.indentation());this._.output.push(\"\\x3c\",b);this._.afterCloser=0},\nopenTagClose:function(b,a){var c=this._.rules[b];a?(this._.output.push(this.selfClosingEnd),c&&c.breakAfterClose&&(this._.needsSpace=c.needsSpace)):(this._.output.push(\"\\x3e\"),c&&c.indent&&(this._.indentation+=this.indentationChars));c&&c.breakAfterOpen&&this.lineBreak();\"pre\"==b&&(this._.inPre=1)},attribute:function(b,a){\"string\"==typeof a&&(this.forceSimpleAmpersand&&(a=a.replace(/&amp;/g,\"\\x26\")),a=CKEDITOR.tools.htmlEncodeAttr(a));this._.output.push(\" \",b,'\\x3d\"',a,'\"')},closeTag:function(b){var a=\nthis._.rules[b];a&&a.indent&&(this._.indentation=this._.indentation.substr(this.indentationChars.length));this._.indent?this.indentation():a&&a.breakBeforeClose&&(this.lineBreak(),this.indentation());this._.output.push(\"\\x3c/\",b,\"\\x3e\");\"pre\"==b&&(this._.inPre=0);a&&a.breakAfterClose&&(this.lineBreak(),this._.needsSpace=a.needsSpace);this._.afterCloser=1},text:function(b){this._.indent&&(this.indentation(),!this._.inPre&&(b=CKEDITOR.tools.ltrim(b)));this._.output.push(b)},comment:function(b){this._.indent&&\nthis.indentation();this._.output.push(\"\\x3c!--\",b,\"--\\x3e\")},lineBreak:function(){!this._.inPre&&0<this._.output.length&&this._.output.push(this.lineBreakChars);this._.indent=1},indentation:function(){!this._.inPre&&this._.indentation&&this._.output.push(this._.indentation);this._.indent=0},reset:function(){this._.output=[];this._.indent=0;this._.indentation=\"\";this._.afterCloser=0;this._.inPre=0},setRules:function(b,a){var c=this._.rules[b];c?CKEDITOR.tools.extend(c,a,!0):this._.rules[b]=a}}});(function(){function m(a){function f(a){var b=!1;g.attachListener(g,\"keydown\",function(){var d=c.getBody().getElementsByTag(a);if(!b){for(var e=0;e<d.count();e++)d.getItem(e).setCustomData(\"retain\",!0);b=!0}},null,null,1);g.attachListener(g,\"keyup\",function(){var d=c.getElementsByTag(a);b&&(1!=d.count()||d.getItem(0).getCustomData(\"retain\")||d.getItem(0).remove(1),b=!1)})}var b=this.editor,c=a.document,d=c.body,e=c.getElementById(\"cke_actscrpt\");e&&e.parentNode.removeChild(e);(e=c.getElementById(\"cke_shimscrpt\"))&&\ne.parentNode.removeChild(e);(e=c.getElementById(\"cke_basetagscrpt\"))&&e.parentNode.removeChild(e);d.contentEditable=!0;CKEDITOR.env.ie&&(d.hideFocus=!0,d.disabled=!0,d.removeAttribute(\"disabled\"));delete this._.isLoadingData;this.$=d;c=new CKEDITOR.dom.document(c);this.setup();this.fixInitialSelection();var g=this;CKEDITOR.env.ie&&!CKEDITOR.env.edge&&c.getDocumentElement().addClass(c.$.compatMode);CKEDITOR.env.ie&&!CKEDITOR.env.edge&&b.enterMode!=CKEDITOR.ENTER_P?f(\"p\"):CKEDITOR.env.edge&&b.enterMode!=\nCKEDITOR.ENTER_DIV&&f(\"div\");if(CKEDITOR.env.webkit||CKEDITOR.env.ie&&10<CKEDITOR.env.version)c.getDocumentElement().on(\"mousedown\",function(a){a.data.getTarget().is(\"html\")&&setTimeout(function(){b.editable().focus()})});n(b);try{b.document.$.execCommand(\"2D-position\",!1,!0)}catch(h){}(CKEDITOR.env.gecko||CKEDITOR.env.ie&&\"CSS1Compat\"==b.document.$.compatMode)&&this.attachListener(this,\"keydown\",function(a){var c=a.data.getKeystroke();if(33==c||34==c)if(CKEDITOR.env.ie)setTimeout(function(){b.getSelection().scrollIntoView()},\n0);else if(b.window.$.innerHeight>this.$.offsetHeight){var d=b.createRange();d[33==c?\"moveToElementEditStart\":\"moveToElementEditEnd\"](this);d.select();a.data.preventDefault()}});CKEDITOR.env.ie&&this.attachListener(c,\"blur\",function(){try{c.$.selection.empty()}catch(a){}});CKEDITOR.env.iOS&&this.attachListener(c,\"touchend\",function(){a.focus()});d=b.document.getElementsByTag(\"title\").getItem(0);d.data(\"cke-title\",d.getText());CKEDITOR.env.ie&&(b.document.$.title=this._.docTitle);CKEDITOR.tools.setTimeout(function(){\"unloaded\"==\nthis.status&&(this.status=\"ready\");b.fire(\"contentDom\");this._.isPendingFocus&&(b.focus(),this._.isPendingFocus=!1);setTimeout(function(){b.fire(\"dataReady\")},0)},0,this)}function n(a){function f(){var c;a.editable().attachListener(a,\"selectionChange\",function(){var d=a.getSelection().getSelectedElement();d&&(c&&(c.detachEvent(\"onresizestart\",b),c=null),d.$.attachEvent(\"onresizestart\",b),c=d.$)})}function b(a){a.returnValue=!1}if(CKEDITOR.env.gecko)try{var c=a.document.$;c.execCommand(\"enableObjectResizing\",\n!1,!a.config.disableObjectResizing);c.execCommand(\"enableInlineTableEditing\",!1,!a.config.disableNativeTableHandles)}catch(d){}else CKEDITOR.env.ie&&11>CKEDITOR.env.version&&a.config.disableObjectResizing&&f(a)}function p(){var a=[];if(8<=CKEDITOR.document.$.documentMode){a.push(\"html.CSS1Compat [contenteditable\\x3dfalse]{min-height:0 !important}\");var f=[],b;for(b in CKEDITOR.dtd.$removeEmpty)f.push(\"html.CSS1Compat \"+b+\"[contenteditable\\x3dfalse]\");a.push(f.join(\",\")+\"{display:inline-block}\")}else CKEDITOR.env.gecko&&\n(a.push(\"html{height:100% !important}\"),a.push(\"img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}\"));a.push(\"html{cursor:text;*cursor:auto}\");a.push(\"img,input,textarea{cursor:default}\");return a.join(\"\\n\")}CKEDITOR.plugins.add(\"wysiwygarea\",{init:function(a){a.config.fullPage&&a.addFeature({allowedContent:\"html head title; style [media,type]; body (*)[id]; meta link [*]\",requiredContent:\"body\"});a.addMode(\"wysiwyg\",function(f){function b(b){b&&b.removeListener();a.editable(new l(a,\nd.$.contentWindow.document.body));a.setData(a.getData(1),f)}var c=\"document.open();\"+(CKEDITOR.env.ie?\"(\"+CKEDITOR.tools.fixDomain+\")();\":\"\")+\"document.close();\",c=CKEDITOR.env.air?\"javascript:void(0)\":CKEDITOR.env.ie&&!CKEDITOR.env.edge?\"javascript:void(function(){\"+encodeURIComponent(c)+\"}())\":\"\",d=CKEDITOR.dom.element.createFromHtml('\\x3ciframe src\\x3d\"'+c+'\" frameBorder\\x3d\"0\"\\x3e\\x3c/iframe\\x3e');d.setStyles({width:\"100%\",height:\"100%\"});d.addClass(\"cke_wysiwyg_frame\").addClass(\"cke_reset\");\nc=a.ui.space(\"contents\");c.append(d);var e=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.gecko;if(e)d.on(\"load\",b);var g=a.title,h=a.fire(\"ariaEditorHelpLabel\",{}).label;g&&(CKEDITOR.env.ie&&h&&(g+=\", \"+h),d.setAttribute(\"title\",g));if(h){var g=CKEDITOR.tools.getNextId(),k=CKEDITOR.dom.element.createFromHtml('\\x3cspan id\\x3d\"'+g+'\" class\\x3d\"cke_voice_label\"\\x3e'+h+\"\\x3c/span\\x3e\");c.append(k,1);d.setAttribute(\"aria-describedby\",g)}a.on(\"beforeModeUnload\",function(a){a.removeListener();k&&k.remove()});\nd.setAttributes({tabIndex:a.tabIndex,allowTransparency:\"true\"});!e&&b();a.fire(\"ariaWidget\",d)})}});CKEDITOR.editor.prototype.addContentsCss=function(a){var f=this.config,b=f.contentsCss;CKEDITOR.tools.isArray(b)||(f.contentsCss=b?[b]:[]);f.contentsCss.push(a)};var l=CKEDITOR.tools.createClass({$:function(){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(a){CKEDITOR.tools.setTimeout(m,0,this,a)},this);this._.docTitle=this.getWindow().getFrame().getAttribute(\"title\")},\nbase:CKEDITOR.editable,proto:{setData:function(a,f){var b=this.editor;if(f)this.setHtml(a),this.fixInitialSelection(),b.fire(\"dataReady\");else{this._.isLoadingData=!0;b._.dataStore={id:1};var c=b.config,d=c.fullPage,e=c.docType,g=CKEDITOR.tools.buildStyleHtml(p()).replace(/<style>/,'\\x3cstyle data-cke-temp\\x3d\"1\"\\x3e');d||(g+=CKEDITOR.tools.buildStyleHtml(b.config.contentsCss));var h=c.baseHref?'\\x3cbase href\\x3d\"'+c.baseHref+'\" data-cke-temp\\x3d\"1\" /\\x3e':\"\";d&&(a=a.replace(/<!DOCTYPE[^>]*>/i,function(a){b.docType=\ne=a;return\"\"}).replace(/<\\?xml\\s[^\\?]*\\?>/i,function(a){b.xmlDeclaration=a;return\"\"}));a=b.dataProcessor.toHtml(a);d?(/<body[\\s|>]/.test(a)||(a=\"\\x3cbody\\x3e\"+a),/<html[\\s|>]/.test(a)||(a=\"\\x3chtml\\x3e\"+a+\"\\x3c/html\\x3e\"),/<head[\\s|>]/.test(a)?/<title[\\s|>]/.test(a)||(a=a.replace(/<head[^>]*>/,\"$\\x26\\x3ctitle\\x3e\\x3c/title\\x3e\")):a=a.replace(/<html[^>]*>/,\"$\\x26\\x3chead\\x3e\\x3ctitle\\x3e\\x3c/title\\x3e\\x3c/head\\x3e\"),h&&(a=a.replace(/<head[^>]*?>/,\"$\\x26\"+h)),a=a.replace(/<\\/head\\s*>/,g+\"$\\x26\"),a=\ne+a):a=c.docType+'\\x3chtml dir\\x3d\"'+c.contentsLangDirection+'\" lang\\x3d\"'+(c.contentsLanguage||b.langCode)+'\"\\x3e\\x3chead\\x3e\\x3ctitle\\x3e'+this._.docTitle+\"\\x3c/title\\x3e\"+h+g+\"\\x3c/head\\x3e\\x3cbody\"+(c.bodyId?' id\\x3d\"'+c.bodyId+'\"':\"\")+(c.bodyClass?' class\\x3d\"'+c.bodyClass+'\"':\"\")+\"\\x3e\"+a+\"\\x3c/body\\x3e\\x3c/html\\x3e\";CKEDITOR.env.gecko&&(a=a.replace(/<body/,'\\x3cbody contenteditable\\x3d\"true\" '),2E4>CKEDITOR.env.version&&(a=a.replace(/<body[^>]*>/,\"$\\x26\\x3c!-- cke-content-start --\\x3e\")));\nc='\\x3cscript id\\x3d\"cke_actscrpt\" type\\x3d\"text/javascript\"'+(CKEDITOR.env.ie?' defer\\x3d\"defer\" ':\"\")+\"\\x3evar wasLoaded\\x3d0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction(\"+this._.frameLoadedHandler+\",window);wasLoaded\\x3d1;}\"+(CKEDITOR.env.ie?\"onload();\":'document.addEventListener(\"DOMContentLoaded\", onload, false );')+\"\\x3c/script\\x3e\";CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(c+='\\x3cscript id\\x3d\"cke_shimscrpt\"\\x3ewindow.parent.CKEDITOR.tools.enableHtml5Elements(document)\\x3c/script\\x3e');\nh&&CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(c+='\\x3cscript id\\x3d\"cke_basetagscrpt\"\\x3evar baseTag \\x3d document.querySelector( \"base\" );baseTag.href \\x3d baseTag.href;\\x3c/script\\x3e');a=a.replace(/(?=\\s*<\\/(:?head)>)/,c);this.clearCustomData();this.clearListeners();b.fire(\"contentDomUnload\");var k=this.getDocument();try{k.write(a)}catch(l){setTimeout(function(){k.write(a)},0)}}},getData:function(a){if(a)return this.getHtml();a=this.editor;var f=a.config,b=f.fullPage,c=b&&a.docType,d=b&&a.xmlDeclaration,\ne=this.getDocument(),b=b?e.getDocumentElement().getOuterHtml():e.getBody().getHtml();CKEDITOR.env.gecko&&f.enterMode!=CKEDITOR.ENTER_BR&&(b=b.replace(/<br>(?=\\s*(:?$|<\\/body>))/,\"\"));b=a.dataProcessor.toDataFormat(b);d&&(b=d+\"\\n\"+b);c&&(b=c+\"\\n\"+b);return b},focus:function(){this._.isLoadingData?this._.isPendingFocus=!0:l.baseProto.focus.call(this)},detach:function(){var a=this.editor,f=a.document,b;try{b=a.window.getFrame()}catch(c){}l.baseProto.detach.call(this);this.clearCustomData();f.getDocumentElement().clearCustomData();\nCKEDITOR.tools.removeFunction(this._.frameLoadedHandler);b&&b.getParent()?(b.clearCustomData(),(a=b.removeCustomData(\"onResize\"))&&a.removeListener(),b.remove()):CKEDITOR.warn(\"editor-destroy-iframe\")}}})})();CKEDITOR.config.disableObjectResizing=!1;CKEDITOR.config.disableNativeTableHandles=!0;CKEDITOR.config.disableNativeSpellChecker=!0;(function(){function e(b,a){a||(a=b.getSelection().getSelectedElement());if(a&&a.is(\"img\")&&!a.data(\"cke-realelement\")&&!a.isReadOnly())return a}function f(b){var a=b.getStyle(\"float\");if(\"inherit\"==a||\"none\"==a)a=0;a||(a=b.getAttribute(\"align\"));return a}CKEDITOR.plugins.add(\"image\",{requires:\"dialog\",init:function(b){if(!b.plugins.image2){CKEDITOR.dialog.add(\"image\",this.path+\"dialogs/image.js\");var a=\"img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}\";\nCKEDITOR.dialog.isTabEnabled(b,\"image\",\"advanced\")&&(a=\"img[alt,dir,id,lang,longdesc,!src,title]{*}(*)\");b.addCommand(\"image\",new CKEDITOR.dialogCommand(\"image\",{allowedContent:a,requiredContent:\"img[alt,src]\",contentTransformations:[[\"img{width}: sizeToStyle\",\"img[width]: sizeToAttribute\"],[\"img{float}: alignmentToStyle\",\"img[align]: alignmentToAttribute\"]]}));b.ui.addButton&&b.ui.addButton(\"Image\",{label:b.lang.common.image,command:\"image\",toolbar:\"insert,10\"});b.on(\"doubleclick\",function(b){var a=\nb.data.element;!a.is(\"img\")||a.data(\"cke-realelement\")||a.isReadOnly()||(b.data.dialog=\"image\")});b.addMenuItems&&b.addMenuItems({image:{label:b.lang.image.menu,command:\"image\",group:\"image\"}});b.contextMenu&&b.contextMenu.addListener(function(a){if(e(b,a))return{image:CKEDITOR.TRISTATE_OFF}})}},afterInit:function(b){function a(a){var d=b.getCommand(\"justify\"+a);if(d){if(\"left\"==a||\"right\"==a)d.on(\"exec\",function(d){var c=e(b),g;c&&(g=f(c),g==a?(c.removeStyle(\"float\"),a==f(c)&&c.removeAttribute(\"align\")):\nc.setStyle(\"float\",a),d.cancel())});d.on(\"refresh\",function(d){var c=e(b);c&&(c=f(c),this.setState(c==a?CKEDITOR.TRISTATE_ON:\"right\"==a||\"left\"==a?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),d.cancel())})}}b.plugins.image2||(a(\"left\"),a(\"right\"),a(\"center\"),a(\"block\"))}})})();CKEDITOR.config.image_removeLinkByEmptyURL=!0;(function(){function m(a,b){var e,f;b.on(\"refresh\",function(a){var b=[k],c;for(c in a.data.states)b.push(a.data.states[c]);this.setState(CKEDITOR.tools.search(b,p)?p:k)},b,null,100);b.on(\"exec\",function(b){e=a.getSelection();f=e.createBookmarks(1);b.data||(b.data={});b.data.done=!1},b,null,0);b.on(\"exec\",function(){a.forceNextSelectionCheck();e.selectBookmarks(f)},b,null,100)}var k=CKEDITOR.TRISTATE_DISABLED,p=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add(\"indent\",{init:function(a){var b=CKEDITOR.plugins.indent.genericDefinition;\nm(a,a.addCommand(\"indent\",new b(!0)));m(a,a.addCommand(\"outdent\",new b));a.ui.addButton&&(a.ui.addButton(\"Indent\",{label:a.lang.indent.indent,command:\"indent\",directional:!0,toolbar:\"indent,20\"}),a.ui.addButton(\"Outdent\",{label:a.lang.indent.outdent,command:\"outdent\",directional:!0,toolbar:\"indent,10\"}));a.on(\"dirChanged\",function(b){var f=a.createRange(),l=b.data.node;f.setStartBefore(l);f.setEndAfter(l);for(var n=new CKEDITOR.dom.walker(f),c;c=n.next();)if(c.type==CKEDITOR.NODE_ELEMENT)if(!c.equals(l)&&\nc.getDirection())f.setStartAfter(c),n=new CKEDITOR.dom.walker(f);else{var d=a.config.indentClasses;if(d)for(var g=\"ltr\"==b.data.dir?[\"_rtl\",\"\"]:[\"\",\"_rtl\"],h=0;h<d.length;h++)c.hasClass(d[h]+g[0])&&(c.removeClass(d[h]+g[0]),c.addClass(d[h]+g[1]));d=c.getStyle(\"margin-right\");g=c.getStyle(\"margin-left\");d?c.setStyle(\"margin-left\",d):c.removeStyle(\"margin-left\");g?c.setStyle(\"margin-right\",g):c.removeStyle(\"margin-right\")}})}});CKEDITOR.plugins.indent={genericDefinition:function(a){this.isIndent=!!a;\nthis.startDisabled=!this.isIndent},specificDefinition:function(a,b,e){this.name=b;this.editor=a;this.jobs={};this.enterBr=a.config.enterMode==CKEDITOR.ENTER_BR;this.isIndent=!!e;this.relatedGlobal=e?\"indent\":\"outdent\";this.indentKey=e?9:CKEDITOR.SHIFT+9;this.database={}},registerCommands:function(a,b){a.on(\"pluginsLoaded\",function(){for(var a in b)(function(a,b){var e=a.getCommand(b.relatedGlobal),c;for(c in b.jobs)e.on(\"exec\",function(d){d.data.done||(a.fire(\"lockSnapshot\"),b.execJob(a,c)&&(d.data.done=\n!0),a.fire(\"unlockSnapshot\"),CKEDITOR.dom.element.clearAllMarkers(b.database))},this,null,c),e.on(\"refresh\",function(d){d.data.states||(d.data.states={});d.data.states[b.name+\"@\"+c]=b.refreshJob(a,c,d.data.path)},this,null,c);a.addFeature(b)})(this,b[a])})}};CKEDITOR.plugins.indent.genericDefinition.prototype={context:\"p\",exec:function(){}};CKEDITOR.plugins.indent.specificDefinition.prototype={execJob:function(a,b){var e=this.jobs[b];if(e.state!=k)return e.exec.call(this,a)},refreshJob:function(a,\nb,e){b=this.jobs[b];a.activeFilter.checkFeature(this)?b.state=b.refresh.call(this,a,e):b.state=k;return b.state},getContext:function(a){return a.contains(this.context)}}})();(function(){function w(c){function f(b){for(var e=d.startContainer,a=d.endContainer;e&&!e.getParent().equals(b);)e=e.getParent();for(;a&&!a.getParent().equals(b);)a=a.getParent();if(!e||!a)return!1;for(var g=e,e=[],k=!1;!k;)g.equals(a)&&(k=!0),e.push(g),g=g.getNext();if(1>e.length)return!1;g=b.getParents(!0);for(a=0;a<g.length;a++)if(g[a].getName&&p[g[a].getName()]){b=g[a];break}for(var g=l.isIndent?1:-1,a=e[0],e=e[e.length-1],k=CKEDITOR.plugins.list.listToArray(b,q),n=k[e.getCustomData(\"listarray_index\")].indent,\na=a.getCustomData(\"listarray_index\");a<=e.getCustomData(\"listarray_index\");a++)if(k[a].indent+=g,0<g){var h=k[a].parent;k[a].parent=new CKEDITOR.dom.element(h.getName(),h.getDocument())}for(a=e.getCustomData(\"listarray_index\")+1;a<k.length&&k[a].indent>n;a++)k[a].indent+=g;e=CKEDITOR.plugins.list.arrayToList(k,q,null,c.config.enterMode,b.getDirection());if(!l.isIndent){var f;if((f=b.getParent())&&f.is(\"li\"))for(var g=e.listNode.getChildren(),r=[],m,a=g.count()-1;0<=a;a--)(m=g.getItem(a))&&m.is&&m.is(\"li\")&&\nr.push(m)}e&&e.listNode.replace(b);if(r&&r.length)for(a=0;a<r.length;a++){for(m=b=r[a];(m=m.getNext())&&m.is&&m.getName()in p;)CKEDITOR.env.needsNbspFiller&&!b.getFirst(x)&&b.append(d.document.createText(\" \")),b.append(m);b.insertAfter(f)}e&&c.fire(\"contentDomInvalidated\");return!0}for(var l=this,q=this.database,p=this.context,n=c.getSelection(),n=(n&&n.getRanges()).createIterator(),d;d=n.getNextRange();){for(var b=d.getCommonAncestor();b&&(b.type!=CKEDITOR.NODE_ELEMENT||!p[b.getName()]);){if(c.editable().equals(b)){b=\n!1;break}b=b.getParent()}b||(b=d.startPath().contains(p))&&d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);if(!b){var h=d.getEnclosedNode();h&&h.type==CKEDITOR.NODE_ELEMENT&&h.getName()in p&&(d.setStartAt(h,CKEDITOR.POSITION_AFTER_START),d.setEndAt(h,CKEDITOR.POSITION_BEFORE_END),b=h)}b&&d.startContainer.type==CKEDITOR.NODE_ELEMENT&&d.startContainer.getName()in p&&(h=new CKEDITOR.dom.walker(d),h.evaluator=t,d.startContainer=h.next());b&&d.endContainer.type==CKEDITOR.NODE_ELEMENT&&d.endContainer.getName()in\np&&(h=new CKEDITOR.dom.walker(d),h.evaluator=t,d.endContainer=h.previous());if(b)return f(b)}return 0}function t(c){return c.type==CKEDITOR.NODE_ELEMENT&&c.is(\"li\")}function x(c){return y(c)&&z(c)}var y=CKEDITOR.dom.walker.whitespaces(!0),z=CKEDITOR.dom.walker.bookmark(!1,!0),u=CKEDITOR.TRISTATE_DISABLED,v=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add(\"indentlist\",{requires:\"indent\",init:function(c){function f(c){l.specificDefinition.apply(this,arguments);this.requiredContent=[\"ul\",\"ol\"];c.on(\"key\",\nfunction(f){if(\"wysiwyg\"==c.mode&&f.data.keyCode==this.indentKey){var n=this.getContext(c.elementPath());!n||this.isIndent&&CKEDITOR.plugins.indentList.firstItemInPath(this.context,c.elementPath(),n)||(c.execCommand(this.relatedGlobal),f.cancel())}},this);this.jobs[this.isIndent?10:30]={refresh:this.isIndent?function(c,f){var d=this.getContext(f),b=CKEDITOR.plugins.indentList.firstItemInPath(this.context,f,d);return d&&this.isIndent&&!b?v:u}:function(c,f){return!this.getContext(f)||this.isIndent?\nu:v},exec:CKEDITOR.tools.bind(w,this)}}var l=CKEDITOR.plugins.indent;l.registerCommands(c,{indentlist:new f(c,\"indentlist\",!0),outdentlist:new f(c,\"outdentlist\")});CKEDITOR.tools.extend(f.prototype,l.specificDefinition.prototype,{context:{ol:1,ul:1}})}});CKEDITOR.plugins.indentList={};CKEDITOR.plugins.indentList.firstItemInPath=function(c,f,l){var q=f.contains(t);l||(l=f.contains(c));return l&&q&&q.equals(l.getFirst(t))}})();(function(){function g(a,b){var c=l.exec(a),d=l.exec(b);if(c){if(!c[2]&&\"px\"==d[2])return d[1];if(\"px\"==c[2]&&!d[2])return d[1]+\"px\"}return b}var k=CKEDITOR.htmlParser.cssStyle,h=CKEDITOR.tools.cssLength,l=/^((?:\\d*(?:\\.\\d+))|(?:\\d+))(.*)?$/i,m={elements:{$:function(a){var b=a.attributes;if((b=(b=(b=b&&b[\"data-cke-realelement\"])&&new CKEDITOR.htmlParser.fragment.fromHtml(decodeURIComponent(b)))&&b.children[0])&&a.attributes[\"data-cke-resizable\"]){var c=(new k(a)).rules;a=b.attributes;var d=c.width,\nc=c.height;d&&(a.width=g(a.width,d));c&&(a.height=g(a.height,c))}return b}}};CKEDITOR.plugins.add(\"fakeobjects\",{init:function(a){a.filter.allow(\"img[!data-cke-realelement,src,alt,title](*){*}\",\"fakeobjects\")},afterInit:function(a){(a=(a=a.dataProcessor)&&a.htmlFilter)&&a.addRules(m,{applyToAll:!0})}});CKEDITOR.editor.prototype.createFakeElement=function(a,b,c,d){var e=this.lang.fakeobjects,e=e[c]||e.unknown;b={\"class\":b,\"data-cke-realelement\":encodeURIComponent(a.getOuterHtml()),\"data-cke-real-node-type\":a.type,\nalt:e,title:e,align:a.getAttribute(\"align\")||\"\"};CKEDITOR.env.hc||(b.src=CKEDITOR.tools.transparentImageData);c&&(b[\"data-cke-real-element-type\"]=c);d&&(b[\"data-cke-resizable\"]=d,c=new k,d=a.getAttribute(\"width\"),a=a.getAttribute(\"height\"),d&&(c.rules.width=h(d)),a&&(c.rules.height=h(a)),c.populate(b));return this.document.createElement(\"img\",{attributes:b})};CKEDITOR.editor.prototype.createFakeParserElement=function(a,b,c,d){var e=this.lang.fakeobjects,e=e[c]||e.unknown,f;f=new CKEDITOR.htmlParser.basicWriter;\na.writeHtml(f);f=f.getHtml();b={\"class\":b,\"data-cke-realelement\":encodeURIComponent(f),\"data-cke-real-node-type\":a.type,alt:e,title:e,align:a.attributes.align||\"\"};CKEDITOR.env.hc||(b.src=CKEDITOR.tools.transparentImageData);c&&(b[\"data-cke-real-element-type\"]=c);d&&(b[\"data-cke-resizable\"]=d,d=a.attributes,a=new k,c=d.width,d=d.height,void 0!==c&&(a.rules.width=h(c)),void 0!==d&&(a.rules.height=h(d)),a.populate(b));return new CKEDITOR.htmlParser.element(\"img\",b)};CKEDITOR.editor.prototype.restoreRealElement=\nfunction(a){if(a.data(\"cke-real-node-type\")!=CKEDITOR.NODE_ELEMENT)return null;var b=CKEDITOR.dom.element.createFromHtml(decodeURIComponent(a.data(\"cke-realelement\")),this.document);if(a.data(\"cke-resizable\")){var c=a.getStyle(\"width\");a=a.getStyle(\"height\");c&&b.setAttribute(\"width\",g(b.getAttribute(\"width\"),c));a&&b.setAttribute(\"height\",g(b.getAttribute(\"height\"),a))}return b}})();(function(){function p(c){return c.replace(/'/g,\"\\\\$\\x26\")}function q(c){for(var b,a=c.length,f=[],e=0;e<a;e++)b=c.charCodeAt(e),f.push(b);return\"String.fromCharCode(\"+f.join(\",\")+\")\"}function r(c,b){var a=c.plugins.link,f=a.compiledProtectionFunction.params,e,d;d=[a.compiledProtectionFunction.name,\"(\"];for(var g=0;g<f.length;g++)a=f[g].toLowerCase(),e=b[a],0<g&&d.push(\",\"),d.push(\"'\",e?p(encodeURIComponent(b[a])):\"\",\"'\");d.push(\")\");return d.join(\"\")}function n(c){c=c.config.emailProtection||\"\";\nvar b;c&&\"encode\"!=c&&(b={},c.replace(/^([^(]+)\\(([^)]+)\\)$/,function(a,c,e){b.name=c;b.params=[];e.replace(/[^,\\s]+/g,function(a){b.params.push(a)})}));return b}CKEDITOR.plugins.add(\"link\",{requires:\"dialog,fakeobjects\",onLoad:function(){function c(b){return a.replace(/%1/g,\"rtl\"==b?\"right\":\"left\").replace(/%2/g,\"cke_contents_\"+b)}var b=\"background:url(\"+CKEDITOR.getUrl(this.path+\"images\"+(CKEDITOR.env.hidpi?\"/hidpi\":\"\")+\"/anchor.png\")+\") no-repeat %1 center;border:1px dotted #00f;background-size:16px;\",\na=\".%2 a.cke_anchor,.%2 a.cke_anchor_empty,.cke_editable.%2 a[name],.cke_editable.%2 a[data-cke-saved-name]{\"+b+\"padding-%1:18px;cursor:auto;}.%2 img.cke_anchor{\"+b+\"width:16px;min-height:15px;height:1.15em;vertical-align:text-bottom;}\";CKEDITOR.addCss(c(\"ltr\")+c(\"rtl\"))},init:function(c){var b=\"a[!href]\";CKEDITOR.dialog.isTabEnabled(c,\"link\",\"advanced\")&&(b=b.replace(\"]\",\",accesskey,charset,dir,id,lang,name,rel,tabindex,title,type]{*}(*)\"));CKEDITOR.dialog.isTabEnabled(c,\"link\",\"target\")&&(b=b.replace(\"]\",\n\",target,onclick]\"));c.addCommand(\"link\",new CKEDITOR.dialogCommand(\"link\",{allowedContent:b,requiredContent:\"a[href]\"}));c.addCommand(\"anchor\",new CKEDITOR.dialogCommand(\"anchor\",{allowedContent:\"a[!name,id]\",requiredContent:\"a[name]\"}));c.addCommand(\"unlink\",new CKEDITOR.unlinkCommand);c.addCommand(\"removeAnchor\",new CKEDITOR.removeAnchorCommand);c.setKeystroke(CKEDITOR.CTRL+76,\"link\");c.ui.addButton&&(c.ui.addButton(\"Link\",{label:c.lang.link.toolbar,command:\"link\",toolbar:\"links,10\"}),c.ui.addButton(\"Unlink\",\n{label:c.lang.link.unlink,command:\"unlink\",toolbar:\"links,20\"}),c.ui.addButton(\"Anchor\",{label:c.lang.link.anchor.toolbar,command:\"anchor\",toolbar:\"links,30\"}));CKEDITOR.dialog.add(\"link\",this.path+\"dialogs/link.js\");CKEDITOR.dialog.add(\"anchor\",this.path+\"dialogs/anchor.js\");c.on(\"doubleclick\",function(a){var b=CKEDITOR.plugins.link.getSelectedLink(c)||a.data.element;b.isReadOnly()||(b.is(\"a\")?(a.data.dialog=!b.getAttribute(\"name\")||b.getAttribute(\"href\")&&b.getChildCount()?\"link\":\"anchor\",a.data.link=\nb):CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b)&&(a.data.dialog=\"anchor\"))},null,null,0);c.on(\"doubleclick\",function(a){a.data.dialog in{link:1,anchor:1}&&a.data.link&&c.getSelection().selectElement(a.data.link)},null,null,20);c.addMenuItems&&c.addMenuItems({anchor:{label:c.lang.link.anchor.menu,command:\"anchor\",group:\"anchor\",order:1},removeAnchor:{label:c.lang.link.anchor.remove,command:\"removeAnchor\",group:\"anchor\",order:5},link:{label:c.lang.link.menu,command:\"link\",group:\"link\",order:1},unlink:{label:c.lang.link.unlink,\ncommand:\"unlink\",group:\"link\",order:5}});c.contextMenu&&c.contextMenu.addListener(function(a){if(!a||a.isReadOnly())return null;a=CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,a);if(!a&&!(a=CKEDITOR.plugins.link.getSelectedLink(c)))return null;var b={};a.getAttribute(\"href\")&&a.getChildCount()&&(b={link:CKEDITOR.TRISTATE_OFF,unlink:CKEDITOR.TRISTATE_OFF});a&&a.hasAttribute(\"name\")&&(b.anchor=b.removeAnchor=CKEDITOR.TRISTATE_OFF);return b});this.compiledProtectionFunction=n(c)},afterInit:function(c){c.dataProcessor.dataFilter.addRules({elements:{a:function(a){return a.attributes.name?\na.children.length?null:c.createFakeParserElement(a,\"cke_anchor\",\"anchor\"):null}}});var b=c._.elementsPath&&c._.elementsPath.filters;b&&b.push(function(a,b){if(\"a\"==b&&(CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,a)||a.getAttribute(\"name\")&&(!a.getAttribute(\"href\")||!a.getChildCount())))return\"anchor\"})}});var t=/^javascript:/,u=/^mailto:([^?]+)(?:\\?(.+))?$/,v=/subject=([^;?:@&=$,\\/]*)/i,w=/body=([^;?:@&=$,\\/]*)/i,x=/^#(.*)$/,y=/^((?:http|https|ftp|news):\\/\\/)?(.*)$/,z=/^(_(?:self|top|parent|blank))$/,\nA=/^javascript:void\\(location\\.href='mailto:'\\+String\\.fromCharCode\\(([^)]+)\\)(?:\\+'(.*)')?\\)$/,B=/^javascript:([^(]+)\\(([^)]+)\\)$/,C=/\\s*window.open\\(\\s*this\\.href\\s*,\\s*(?:'([^']*)'|null)\\s*,\\s*'([^']*)'\\s*\\)\\s*;\\s*return\\s*false;*\\s*/,D=/(?:^|,)([^=]+)=(\\d+|yes|no)/gi,m={id:\"advId\",dir:\"advLangDir\",accessKey:\"advAccessKey\",name:\"advName\",lang:\"advLangCode\",tabindex:\"advTabIndex\",title:\"advTitle\",type:\"advContentType\",\"class\":\"advCSSClasses\",charset:\"advCharset\",style:\"advStyles\",rel:\"advRel\"};\nCKEDITOR.plugins.link={getSelectedLink:function(c){var b=c.getSelection(),a=b.getSelectedElement();return a&&a.is(\"a\")?a:(b=b.getRanges()[0])?(b.shrink(CKEDITOR.SHRINK_TEXT),c.elementPath(b.getCommonAncestor()).contains(\"a\",1)):null},getEditorAnchors:function(c){for(var b=c.editable(),a=b.isInline()&&!c.plugins.divarea?c.document:b,b=a.getElementsByTag(\"a\"),a=a.getElementsByTag(\"img\"),f=[],e=0,d;d=b.getItem(e++);)(d.data(\"cke-saved-name\")||d.hasAttribute(\"name\"))&&f.push({name:d.data(\"cke-saved-name\")||\nd.getAttribute(\"name\"),id:d.getAttribute(\"id\")});for(e=0;d=a.getItem(e++);)(d=this.tryRestoreFakeAnchor(c,d))&&f.push({name:d.getAttribute(\"name\"),id:d.getAttribute(\"id\")});return f},fakeAnchor:!0,tryRestoreFakeAnchor:function(c,b){if(b&&b.data(\"cke-real-element-type\")&&\"anchor\"==b.data(\"cke-real-element-type\")){var a=c.restoreRealElement(b);if(a.data(\"cke-saved-name\"))return a}},parseLinkAttributes:function(c,b){var a=b&&(b.data(\"cke-saved-href\")||b.getAttribute(\"href\"))||\"\",f=c.plugins.link.compiledProtectionFunction,\ne=c.config.emailProtection,d,g={};a.match(t)&&(\"encode\"==e?a=a.replace(A,function(a,b,c){c=c||\"\";return\"mailto:\"+String.fromCharCode.apply(String,b.split(\",\"))+c.replace(/\\\\'/g,\"'\")}):e&&a.replace(B,function(a,b,c){if(b==f.name){g.type=\"email\";a=g.email={};b=/(^')|('$)/g;c=c.match(/[^,\\s]+/g);for(var d=c.length,e,h,k=0;k<d;k++)e=decodeURIComponent,h=c[k].replace(b,\"\").replace(/\\\\'/g,\"'\"),h=e(h),e=f.params[k].toLowerCase(),a[e]=h;a.address=[a.name,a.domain].join(\"@\")}}));if(!g.type)if(e=a.match(x))g.type=\n\"anchor\",g.anchor={},g.anchor.name=g.anchor.id=e[1];else if(e=a.match(u)){d=a.match(v);a=a.match(w);g.type=\"email\";var k=g.email={};k.address=e[1];d&&(k.subject=decodeURIComponent(d[1]));a&&(k.body=decodeURIComponent(a[1]))}else a&&(d=a.match(y))&&(g.type=\"url\",g.url={},g.url.protocol=d[1],g.url.url=d[2]);if(b){if(a=b.getAttribute(\"target\"))g.target={type:a.match(z)?a:\"frame\",name:a};else if(a=(a=b.data(\"cke-pa-onclick\")||b.getAttribute(\"onclick\"))&&a.match(C))for(g.target={type:\"popup\",name:a[1]};e=\nD.exec(a[2]);)\"yes\"!=e[2]&&\"1\"!=e[2]||e[1]in{height:1,width:1,top:1,left:1}?isFinite(e[2])&&(g.target[e[1]]=e[2]):g.target[e[1]]=!0;var a={},h;for(h in m)(e=b.getAttribute(h))&&(a[m[h]]=e);if(h=b.data(\"cke-saved-name\")||a.advName)a.advName=h;CKEDITOR.tools.isEmpty(a)||(g.advanced=a)}return g},getLinkAttributes:function(c,b){var a=c.config.emailProtection||\"\",f={};switch(b.type){case \"url\":var a=b.url&&void 0!==b.url.protocol?b.url.protocol:\"http://\",e=b.url&&CKEDITOR.tools.trim(b.url.url)||\"\";f[\"data-cke-saved-href\"]=\n0===e.indexOf(\"/\")?e:a+e;break;case \"anchor\":a=b.anchor&&b.anchor.id;f[\"data-cke-saved-href\"]=\"#\"+(b.anchor&&b.anchor.name||a||\"\");break;case \"email\":var d=b.email,e=d.address;switch(a){case \"\":case \"encode\":var g=encodeURIComponent(d.subject||\"\"),k=encodeURIComponent(d.body||\"\"),d=[];g&&d.push(\"subject\\x3d\"+g);k&&d.push(\"body\\x3d\"+k);d=d.length?\"?\"+d.join(\"\\x26\"):\"\";\"encode\"==a?(a=[\"javascript:void(location.href\\x3d'mailto:'+\",q(e)],d&&a.push(\"+'\",p(d),\"'\"),a.push(\")\")):a=[\"mailto:\",e,d];break;default:a=\ne.split(\"@\",2),d.name=a[0],d.domain=a[1],a=[\"javascript:\",r(c,d)]}f[\"data-cke-saved-href\"]=a.join(\"\")}if(b.target)if(\"popup\"==b.target.type){for(var a=[\"window.open(this.href, '\",b.target.name||\"\",\"', '\"],h=\"resizable status location toolbar menubar fullscreen scrollbars dependent\".split(\" \"),e=h.length,g=function(a){b.target[a]&&h.push(a+\"\\x3d\"+b.target[a])},d=0;d<e;d++)h[d]+=b.target[h[d]]?\"\\x3dyes\":\"\\x3dno\";g(\"width\");g(\"left\");g(\"height\");g(\"top\");a.push(h.join(\",\"),\"'); return false;\");f[\"data-cke-pa-onclick\"]=\na.join(\"\")}else\"notSet\"!=b.target.type&&b.target.name&&(f.target=b.target.name);if(b.advanced){for(var l in m)(a=b.advanced[m[l]])&&(f[l]=a);f.name&&(f[\"data-cke-saved-name\"]=f.name)}f[\"data-cke-saved-href\"]&&(f.href=f[\"data-cke-saved-href\"]);l={target:1,onclick:1,\"data-cke-pa-onclick\":1,\"data-cke-saved-name\":1};b.advanced&&CKEDITOR.tools.extend(l,m);for(var n in f)delete l[n];return{set:f,removed:CKEDITOR.tools.objectKeys(l)}}};CKEDITOR.unlinkCommand=function(){};CKEDITOR.unlinkCommand.prototype=\n{exec:function(c){var b=new CKEDITOR.style({element:\"a\",type:CKEDITOR.STYLE_INLINE,alwaysRemoveElement:1});c.removeStyle(b)},refresh:function(c,b){var a=b.lastElement&&b.lastElement.getAscendant(\"a\",!0);a&&\"a\"==a.getName()&&a.getAttribute(\"href\")&&a.getChildCount()?this.setState(CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)},contextSensitive:1,startDisabled:1,requiredContent:\"a[href]\"};CKEDITOR.removeAnchorCommand=function(){};CKEDITOR.removeAnchorCommand.prototype={exec:function(c){var b=\nc.getSelection(),a=b.createBookmarks(),f;if(b&&(f=b.getSelectedElement())&&(f.getChildCount()?f.is(\"a\"):CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,f)))f.remove(1);else if(f=CKEDITOR.plugins.link.getSelectedLink(c))f.hasAttribute(\"href\")?(f.removeAttributes({name:1,\"data-cke-saved-name\":1}),f.removeClass(\"cke_anchor\")):f.remove(1);b.selectBookmarks(a)},requiredContent:\"a[name]\"};CKEDITOR.tools.extend(CKEDITOR.config,{linkShowAdvancedTab:!0,linkShowTargetTab:!0})})();(function(){function I(b,m,e){function c(c){if(!(!(a=d[c?\"getFirst\":\"getLast\"]())||a.is&&a.isBlockBoundary()||!(p=m.root[c?\"getPrevious\":\"getNext\"](CKEDITOR.dom.walker.invisible(!0)))||p.is&&p.isBlockBoundary({br:1})))b.document.createElement(\"br\")[c?\"insertBefore\":\"insertAfter\"](a)}for(var f=CKEDITOR.plugins.list.listToArray(m.root,e),g=[],k=0;k<m.contents.length;k++){var h=m.contents[k];(h=h.getAscendant(\"li\",!0))&&!h.getCustomData(\"list_item_processed\")&&(g.push(h),CKEDITOR.dom.element.setMarker(e,\nh,\"list_item_processed\",!0))}h=null;for(k=0;k<g.length;k++)h=g[k].getCustomData(\"listarray_index\"),f[h].indent=-1;for(k=h+1;k<f.length;k++)if(f[k].indent>f[k-1].indent+1){g=f[k-1].indent+1-f[k].indent;for(h=f[k].indent;f[k]&&f[k].indent>=h;)f[k].indent+=g,k++;k--}var d=CKEDITOR.plugins.list.arrayToList(f,e,null,b.config.enterMode,m.root.getAttribute(\"dir\")).listNode,a,p;c(!0);c();d.replace(m.root);b.fire(\"contentDomInvalidated\")}function B(b,m){this.name=b;this.context=this.type=m;this.allowedContent=\nm+\" li\";this.requiredContent=m}function E(b,m,e,c){for(var f,g;f=b[c?\"getLast\":\"getFirst\"](J);)(g=f.getDirection(1))!==m.getDirection(1)&&f.setAttribute(\"dir\",g),f.remove(),e?f[c?\"insertBefore\":\"insertAfter\"](e):m.append(f,c)}function F(b){function m(e){var c=b[e?\"getPrevious\":\"getNext\"](u);c&&c.type==CKEDITOR.NODE_ELEMENT&&c.is(b.getName())&&(E(b,c,null,!e),b.remove(),b=c)}m();m(1)}function G(b){return b.type==CKEDITOR.NODE_ELEMENT&&(b.getName()in CKEDITOR.dtd.$block||b.getName()in CKEDITOR.dtd.$listItem)&&\nCKEDITOR.dtd[b.getName()][\"#\"]}function C(b,m,e){b.fire(\"saveSnapshot\");e.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var c=e.extractContents();m.trim(!1,!0);var f=m.createBookmark(),g=new CKEDITOR.dom.elementPath(m.startContainer),k=g.block,g=g.lastElement.getAscendant(\"li\",1)||k,h=new CKEDITOR.dom.elementPath(e.startContainer),d=h.contains(CKEDITOR.dtd.$listItem),h=h.contains(CKEDITOR.dtd.$list);k?(k=k.getBogus())&&k.remove():h&&(k=h.getPrevious(u))&&z(k)&&k.remove();(k=c.getLast())&&k.type==CKEDITOR.NODE_ELEMENT&&\nk.is(\"br\")&&k.remove();(k=m.startContainer.getChild(m.startOffset))?c.insertBefore(k):m.startContainer.append(c);d&&(c=A(d))&&(g.contains(d)?(E(c,d.getParent(),d),c.remove()):g.append(c));for(;e.checkStartOfBlock()&&e.checkEndOfBlock();){h=e.startPath();c=h.block;if(!c)break;c.is(\"li\")&&(g=c.getParent(),c.equals(g.getLast(u))&&c.equals(g.getFirst(u))&&(c=g));e.moveToPosition(c,CKEDITOR.POSITION_BEFORE_START);c.remove()}e=e.clone();c=b.editable();e.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);e=new CKEDITOR.dom.walker(e);\ne.evaluator=function(a){return u(a)&&!z(a)};(e=e.next())&&e.type==CKEDITOR.NODE_ELEMENT&&e.getName()in CKEDITOR.dtd.$list&&F(e);m.moveToBookmark(f);m.select();b.fire(\"saveSnapshot\")}function A(b){return(b=b.getLast(u))&&b.type==CKEDITOR.NODE_ELEMENT&&b.getName()in v?b:null}var v={ol:1,ul:1},K=CKEDITOR.dom.walker.whitespaces(),H=CKEDITOR.dom.walker.bookmark(),u=function(b){return!(K(b)||H(b))},z=CKEDITOR.dom.walker.bogus();CKEDITOR.plugins.list={listToArray:function(b,m,e,c,f){if(!v[b.getName()])return[];\nc||(c=0);e||(e=[]);for(var g=0,k=b.getChildCount();g<k;g++){var h=b.getChild(g);h.type==CKEDITOR.NODE_ELEMENT&&h.getName()in CKEDITOR.dtd.$list&&CKEDITOR.plugins.list.listToArray(h,m,e,c+1);if(\"li\"==h.$.nodeName.toLowerCase()){var d={parent:b,indent:c,element:h,contents:[]};f?d.grandparent=f:(d.grandparent=b.getParent(),d.grandparent&&\"li\"==d.grandparent.$.nodeName.toLowerCase()&&(d.grandparent=d.grandparent.getParent()));m&&CKEDITOR.dom.element.setMarker(m,h,\"listarray_index\",e.length);e.push(d);\nfor(var a=0,p=h.getChildCount(),l;a<p;a++)l=h.getChild(a),l.type==CKEDITOR.NODE_ELEMENT&&v[l.getName()]?CKEDITOR.plugins.list.listToArray(l,m,e,c+1,d.grandparent):d.contents.push(l)}}return e},arrayToList:function(b,m,e,c,f){e||(e=0);if(!b||b.length<e+1)return null;for(var g,k=b[e].parent.getDocument(),h=new CKEDITOR.dom.documentFragment(k),d=null,a=e,p=Math.max(b[e].indent,0),l=null,q,n,t=c==CKEDITOR.ENTER_P?\"p\":\"div\";;){var r=b[a];g=r.grandparent;q=r.element.getDirection(1);if(r.indent==p){d&&b[a].parent.getName()==\nd.getName()||(d=b[a].parent.clone(!1,1),f&&d.setAttribute(\"dir\",f),h.append(d));l=d.append(r.element.clone(0,1));q!=d.getDirection(1)&&l.setAttribute(\"dir\",q);for(g=0;g<r.contents.length;g++)l.append(r.contents[g].clone(1,1));a++}else if(r.indent==Math.max(p,0)+1)r=b[a-1].element.getDirection(1),a=CKEDITOR.plugins.list.arrayToList(b,null,a,c,r!=q?q:null),!l.getChildCount()&&CKEDITOR.env.needsNbspFiller&&7>=k.$.documentMode&&l.append(k.createText(\" \")),l.append(a.listNode),a=a.nextIndex;else if(-1==\nr.indent&&!e&&g){v[g.getName()]?(l=r.element.clone(!1,!0),q!=g.getDirection(1)&&l.setAttribute(\"dir\",q)):l=new CKEDITOR.dom.documentFragment(k);var d=g.getDirection(1)!=q,y=r.element,D=y.getAttribute(\"class\"),z=y.getAttribute(\"style\"),A=l.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(c!=CKEDITOR.ENTER_BR||d||z||D),w,B=r.contents.length,x;for(g=0;g<B;g++)if(w=r.contents[g],H(w)&&1<B)A?x=w.clone(1,1):l.append(w.clone(1,1));else if(w.type==CKEDITOR.NODE_ELEMENT&&w.isBlockBoundary()){d&&!w.getDirection()&&\nw.setAttribute(\"dir\",q);n=w;var C=y.getAttribute(\"style\");C&&n.setAttribute(\"style\",C.replace(/([^;])$/,\"$1;\")+(n.getAttribute(\"style\")||\"\"));D&&w.addClass(D);n=null;x&&(l.append(x),x=null);l.append(w.clone(1,1))}else A?(n||(n=k.createElement(t),l.append(n),d&&n.setAttribute(\"dir\",q)),z&&n.setAttribute(\"style\",z),D&&n.setAttribute(\"class\",D),x&&(n.append(x),x=null),n.append(w.clone(1,1))):l.append(w.clone(1,1));x&&((n||l).append(x),x=null);l.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&a!=b.length-1&&(CKEDITOR.env.needsBrFiller&&\n(q=l.getLast())&&q.type==CKEDITOR.NODE_ELEMENT&&q.is(\"br\")&&q.remove(),(q=l.getLast(u))&&q.type==CKEDITOR.NODE_ELEMENT&&q.is(CKEDITOR.dtd.$block)||l.append(k.createElement(\"br\")));q=l.$.nodeName.toLowerCase();\"div\"!=q&&\"p\"!=q||l.appendBogus();h.append(l);d=null;a++}else return null;n=null;if(b.length<=a||Math.max(b[a].indent,0)<p)break}if(m)for(b=h.getFirst();b;){if(b.type==CKEDITOR.NODE_ELEMENT&&(CKEDITOR.dom.element.clearMarkers(m,b),b.getName()in CKEDITOR.dtd.$listItem&&(e=b,k=f=c=void 0,c=e.getDirection()))){for(f=\ne.getParent();f&&!(k=f.getDirection());)f=f.getParent();c==k&&e.removeAttribute(\"dir\")}b=b.getNextSourceNode()}return{listNode:h,nextIndex:a}}};var L=/^h[1-6]$/,J=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);B.prototype={exec:function(b){this.refresh(b,b.elementPath());var m=b.config,e=b.getSelection(),c=e&&e.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var f=b.editable();if(f.getFirst(u)){var g=1==c.length&&c[0];(m=g&&g.getEnclosedNode())&&m.is&&this.type==m.getName()&&this.setState(CKEDITOR.TRISTATE_ON)}else m.enterMode==\nCKEDITOR.ENTER_BR?f.appendBogus():c[0].fixBlock(1,m.enterMode==CKEDITOR.ENTER_P?\"p\":\"div\"),e.selectRanges(c)}for(var m=e.createBookmarks(!0),f=[],k={},c=c.createIterator(),h=0;(g=c.getNextRange())&&++h;){var d=g.getBoundaryNodes(),a=d.startNode,p=d.endNode;a.type==CKEDITOR.NODE_ELEMENT&&\"td\"==a.getName()&&g.setStartAt(d.startNode,CKEDITOR.POSITION_AFTER_START);p.type==CKEDITOR.NODE_ELEMENT&&\"td\"==p.getName()&&g.setEndAt(d.endNode,CKEDITOR.POSITION_BEFORE_END);g=g.createIterator();for(g.forceBrBreak=\nthis.state==CKEDITOR.TRISTATE_OFF;d=g.getNextParagraph();)if(!d.getCustomData(\"list_block\")){CKEDITOR.dom.element.setMarker(k,d,\"list_block\",1);for(var l=b.elementPath(d),a=l.elements,p=0,l=l.blockLimit,q,n=a.length-1;0<=n&&(q=a[n]);n--)if(v[q.getName()]&&l.contains(q)){l.removeCustomData(\"list_group_object_\"+h);(a=q.getCustomData(\"list_group_object\"))?a.contents.push(d):(a={root:q,contents:[d]},f.push(a),CKEDITOR.dom.element.setMarker(k,q,\"list_group_object\",a));p=1;break}p||(p=l,p.getCustomData(\"list_group_object_\"+\nh)?p.getCustomData(\"list_group_object_\"+h).contents.push(d):(a={root:p,contents:[d]},CKEDITOR.dom.element.setMarker(k,p,\"list_group_object_\"+h,a),f.push(a)))}}for(q=[];0<f.length;)if(a=f.shift(),this.state==CKEDITOR.TRISTATE_OFF)if(v[a.root.getName()]){c=b;h=a;a=k;g=q;p=CKEDITOR.plugins.list.listToArray(h.root,a);l=[];for(d=0;d<h.contents.length;d++)n=h.contents[d],(n=n.getAscendant(\"li\",!0))&&!n.getCustomData(\"list_item_processed\")&&(l.push(n),CKEDITOR.dom.element.setMarker(a,n,\"list_item_processed\",\n!0));for(var n=h.root.getDocument(),t=void 0,r=void 0,d=0;d<l.length;d++){var y=l[d].getCustomData(\"listarray_index\"),t=p[y].parent;t.is(this.type)||(r=n.createElement(this.type),t.copyAttributes(r,{start:1,type:1}),r.removeStyle(\"list-style-type\"),p[y].parent=r)}a=CKEDITOR.plugins.list.arrayToList(p,a,null,c.config.enterMode);p=void 0;l=a.listNode.getChildCount();for(d=0;d<l&&(p=a.listNode.getChild(d));d++)p.getName()==this.type&&g.push(p);a.listNode.replace(h.root);c.fire(\"contentDomInvalidated\")}else{p=\nb;g=a;d=q;l=g.contents;c=g.root.getDocument();h=[];1==l.length&&l[0].equals(g.root)&&(a=c.createElement(\"div\"),l[0].moveChildren&&l[0].moveChildren(a),l[0].append(a),l[0]=a);g=g.contents[0].getParent();for(n=0;n<l.length;n++)g=g.getCommonAncestor(l[n].getParent());t=p.config.useComputedState;p=a=void 0;t=void 0===t||t;for(n=0;n<l.length;n++)for(r=l[n];y=r.getParent();){if(y.equals(g)){h.push(r);!p&&r.getDirection()&&(p=1);r=r.getDirection(t);null!==a&&(a=a&&a!=r?null:r);break}r=y}if(!(1>h.length)){l=\nh[h.length-1].getNext();n=c.createElement(this.type);d.push(n);for(t=d=void 0;h.length;)d=h.shift(),t=c.createElement(\"li\"),r=d,r.is(\"pre\")||L.test(r.getName())||\"false\"==r.getAttribute(\"contenteditable\")?d.appendTo(t):(d.copyAttributes(t),a&&d.getDirection()&&(t.removeStyle(\"direction\"),t.removeAttribute(\"dir\")),d.moveChildren(t),d.remove()),t.appendTo(n);a&&p&&n.setAttribute(\"dir\",a);l?n.insertBefore(l):n.appendTo(g)}}else this.state==CKEDITOR.TRISTATE_ON&&v[a.root.getName()]&&I.call(this,b,a,k);\nfor(n=0;n<q.length;n++)F(q[n]);CKEDITOR.dom.element.clearAllMarkers(k);e.selectBookmarks(m);b.focus()},refresh:function(b,m){var e=m.contains(v,1),c=m.blockLimit||m.root;e&&c.contains(e)?this.setState(e.is(this.type)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add(\"list\",{requires:\"indentlist\",init:function(b){b.blockless||(b.addCommand(\"numberedlist\",new B(\"numberedlist\",\"ol\")),b.addCommand(\"bulletedlist\",new B(\"bulletedlist\",\"ul\")),b.ui.addButton&&\n(b.ui.addButton(\"NumberedList\",{label:b.lang.list.numberedlist,command:\"numberedlist\",directional:!0,toolbar:\"list,10\"}),b.ui.addButton(\"BulletedList\",{label:b.lang.list.bulletedlist,command:\"bulletedlist\",directional:!0,toolbar:\"list,20\"})),b.on(\"key\",function(m){var e=m.data.domEvent.getKey(),c;if(\"wysiwyg\"==b.mode&&e in{8:1,46:1}){var f=b.getSelection().getRanges()[0],g=f&&f.startPath();if(f&&f.collapsed){var k=8==e,h=b.editable(),d=new CKEDITOR.dom.walker(f.clone());d.evaluator=function(a){return u(a)&&\n!z(a)};d.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is(\"table\"))};e=f.clone();if(k){var a;(a=g.contains(v))&&f.checkBoundaryOfElement(a,CKEDITOR.START)&&(a=a.getParent())&&a.is(\"li\")&&(a=A(a))?(c=a,a=a.getPrevious(u),e.moveToPosition(a&&z(a)?a:c,CKEDITOR.POSITION_BEFORE_START)):(d.range.setStartAt(h,CKEDITOR.POSITION_AFTER_START),d.range.setEnd(f.startContainer,f.startOffset),(a=d.previous())&&a.type==CKEDITOR.NODE_ELEMENT&&(a.getName()in v||a.is(\"li\"))&&(a.is(\"li\")||(d.range.selectNodeContents(a),\nd.reset(),d.evaluator=G,a=d.previous()),c=a,e.moveToElementEditEnd(c),e.moveToPosition(e.endPath().block,CKEDITOR.POSITION_BEFORE_END)));if(c)C(b,e,f),m.cancel();else{var p=g.contains(v);p&&f.checkBoundaryOfElement(p,CKEDITOR.START)&&(c=p.getFirst(u),f.checkBoundaryOfElement(c,CKEDITOR.START)&&(a=p.getPrevious(u),A(c)?a&&(f.moveToElementEditEnd(a),f.select()):b.execCommand(\"outdent\"),m.cancel()))}}else if(c=g.contains(\"li\")){if(d.range.setEndAt(h,CKEDITOR.POSITION_BEFORE_END),k=(h=c.getLast(u))&&\nG(h)?h:c,g=0,(a=d.next())&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in v&&a.equals(h)?(g=1,a=d.next()):f.checkBoundaryOfElement(k,CKEDITOR.END)&&(g=2),g&&a){f=f.clone();f.moveToElementEditStart(a);if(1==g&&(e.optimize(),!e.startContainer.equals(c))){for(c=e.startContainer;c.is(CKEDITOR.dtd.$inline);)p=c,c=c.getParent();p&&e.moveToPosition(p,CKEDITOR.POSITION_AFTER_END)}2==g&&(e.moveToPosition(e.endPath().block,CKEDITOR.POSITION_BEFORE_END),f.endPath().block&&f.moveToPosition(f.endPath().block,CKEDITOR.POSITION_AFTER_START));\nC(b,e,f);m.cancel()}}else d.range.setEndAt(h,CKEDITOR.POSITION_BEFORE_END),(a=d.next())&&a.type==CKEDITOR.NODE_ELEMENT&&a.is(v)&&(a=a.getFirst(u),g.block&&f.checkStartOfBlock()&&f.checkEndOfBlock()?(g.block.remove(),f.moveToElementEditStart(a),f.select()):A(a)?(f.moveToElementEditStart(a),f.select()):(f=f.clone(),f.moveToElementEditStart(a),C(b,e,f)),m.cancel());setTimeout(function(){b.selectionChange(1)})}}}))}})})();(function(){function V(a,c,d){return n(c)&&n(d)&&d.equals(c.getNext(function(a){return!(E(a)||F(a)||u(a))}))}function z(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))}function O(a){var c=a.element;if(c&&n(c)&&(c=c.getAscendant(a.triggers,!0))&&a.editable.contains(c)){var d=P(c);if(\"true\"==d.getAttribute(\"contenteditable\"))return c;if(d.is(a.triggers))return d}return null}function ka(a,c,d){r(a,c);r(a,d);a=c.size.bottom;d=d.size.top;return a&&d?0|(a+d)/2:a||d}function w(a,c,d){return c=\nc[d?\"getPrevious\":\"getNext\"](function(b){return b&&b.type==CKEDITOR.NODE_TEXT&&!E(b)||n(b)&&!u(b)&&!A(a,b)})}function q(a,c,d){return a>c&&a<d}function P(a,c){if(a.data(\"cke-editable\"))return null;for(c||(a=a.getParent());a&&!a.data(\"cke-editable\");){if(a.hasAttribute(\"contenteditable\"))return a;a=a.getParent()}return null}function la(a){var c=a.doc,d=G('\\x3cspan contenteditable\\x3d\"false\" style\\x3d\"'+Q+\"position:absolute;border-top:1px dashed \"+a.boxColor+'\"\\x3e\\x3c/span\\x3e',c),b=CKEDITOR.getUrl(this.path+\n\"images/\"+(t.hidpi?\"hidpi/\":\"\")+\"icon\"+(a.rtl?\"-rtl\":\"\")+\".png\");v(d,{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,!0);return this},lineChildren:[v(G('\\x3cspan title\\x3d\"'+a.editor.lang.magicline.title+'\" contenteditable\\x3d\"false\"\\x3e\\x26#8629;\\x3c/span\\x3e',c),{base:Q+\"height:17px;width:17px;\"+(a.rtl?\"left\":\"right\")+\":17px;background:url(\"+b+\") center no-repeat \"+a.boxColor+\";cursor:pointer;\"+(t.hc?\"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;\":\n\"\")+(t.hidpi?\"background-size: 9px 10px;\":\"\"),looks:[\"top:-8px; border-radius: 2px;\",\"top:-17px; border-radius: 2px 2px 0px 0px;\",\"top:-1px; border-radius: 0px 0px 2px 2px;\"]}),v(G(W,c),{base:X+\"left:0px;border-left-color:\"+a.boxColor+\";\",looks:[\"border-width:8px 0 8px 8px;top:-8px\",\"border-width:8px 0 0 8px;top:-8px\",\"border-width:0 0 8px 8px;top:0px\"]}),v(G(W,c),{base:X+\"right:0px;border-right-color:\"+a.boxColor+\";\",looks:[\"border-width:8px 8px 8px 0;top:-8px\",\"border-width:8px 8px 0 0;top:-8px\",\n\"border-width:0 8px 8px 0;top:0px\"]})],detach:function(){this.wrap.getParent()&&this.wrap.remove();return this},mouseNear:function(){r(a,this);var b=a.holdDistance,c=this.size;return c&&q(a.mouse.y,c.top-b,c.bottom+b)&&q(a.mouse.x,c.left-b,c.right+b)?!0:!1},place:function(){var b=a.view,c=a.editable,d=a.trigger,h=d.upper,g=d.lower,l=h||g,p=l.getParent(),m={};this.trigger=d;h&&r(a,h,!0);g&&r(a,g,!0);r(a,p,!0);a.inInlineMode&&H(a,!0);p.equals(c)?(m.left=b.scroll.x,m.right=-b.scroll.x,m.width=\"\"):(m.left=\nl.size.left-l.size.margin.left+b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left:0),m.width=l.size.outerWidth+l.size.margin.left+l.size.margin.right+b.scroll.x,m.right=\"\");h&&g?m.top=h.size.margin.bottom===g.size.margin.top?0|h.size.bottom+h.size.margin.bottom/2:h.size.margin.bottom<g.size.margin.top?h.size.bottom+h.size.margin.bottom:h.size.bottom+h.size.margin.bottom-g.size.margin.top:h?g||(m.top=h.size.bottom+h.size.margin.bottom):m.top=g.size.top-g.size.margin.top;d.is(C)||q(m.top,\nb.scroll.y-15,b.scroll.y+5)?(m.top=a.inInlineMode?0:b.scroll.y,this.look(C)):d.is(D)||q(m.top,b.pane.bottom-5,b.pane.bottom+15)?(m.top=a.inInlineMode?b.editable.height+b.editable.padding.top+b.editable.padding.bottom:b.pane.bottom-1,this.look(D)):(a.inInlineMode&&(m.top-=b.editable.top+b.editable.border.top),this.look(x));a.inInlineMode&&(m.top--,m.top+=b.editable.scroll.top,m.left+=b.editable.scroll.left);for(var n in m)m[n]=CKEDITOR.tools.cssLength(m[n]);this.setStyles(m)},look:function(a){if(this.oldLook!=\na){for(var b=this.lineChildren.length,c;b--;)(c=this.lineChildren[b]).setAttribute(\"style\",c.base+c.looks[0|a/2]);this.oldLook=a}},wrap:new R(\"span\",a.doc)});for(c=d.lineChildren.length;c--;)d.lineChildren[c].appendTo(d);d.look(x);d.appendTo(d.wrap);d.unselectable();d.lineChildren[0].on(\"mouseup\",function(b){d.detach();S(a,function(b){var c=a.line.trigger;b[c.is(I)?\"insertBefore\":\"insertAfter\"](c.is(I)?c.lower:c.upper)},!0);a.editor.focus();t.ie||a.enterMode==CKEDITOR.ENTER_BR||a.hotNode.scrollIntoView();\nb.data.preventDefault(!0)});d.on(\"mousedown\",function(a){a.data.preventDefault(!0)});a.line=d}function S(a,c,d){var b=new CKEDITOR.dom.range(a.doc),e=a.editor,f;t.ie&&a.enterMode==CKEDITOR.ENTER_BR?f=a.doc.createText(J):(f=(f=P(a.element,!0))&&f.data(\"cke-enter-mode\")||a.enterMode,f=new R(K[f],a.doc),f.is(\"br\")||a.doc.createText(J).appendTo(f));d&&e.fire(\"saveSnapshot\");c(f);b.moveToPosition(f,CKEDITOR.POSITION_AFTER_START);e.getSelection().selectRanges([b]);a.hotNode=f;d&&e.fire(\"saveSnapshot\")}\nfunction Y(a,c){return{canUndo:!0,modes:{wysiwyg:1},exec:function(){function d(b){var d=t.ie&&9>t.version?\" \":J,f=a.hotNode&&a.hotNode.getText()==d&&a.element.equals(a.hotNode)&&a.lastCmdDirection===!!c;S(a,function(d){f&&a.hotNode&&a.hotNode.remove();d[c?\"insertAfter\":\"insertBefore\"](b);d.setAttributes({\"data-cke-magicline-hot\":1,\"data-cke-magicline-dir\":!!c});a.lastCmdDirection=!!c});t.ie||a.enterMode==CKEDITOR.ENTER_BR||a.hotNode.scrollIntoView();a.line.detach()}return function(b){b=b.getSelection().getStartElement();\nvar e;b=b.getAscendant(Z,1);if(!aa(a,b)&&b&&!b.equals(a.editable)&&!b.contains(a.editable)){(e=P(b))&&\"false\"==e.getAttribute(\"contenteditable\")&&(b=e);a.element=b;e=w(a,b,!c);var f;n(e)&&e.is(a.triggers)&&e.is(ma)&&(!w(a,e,!c)||(f=w(a,e,!c))&&n(f)&&f.is(a.triggers))?d(e):(f=O(a,b),n(f)&&(w(a,f,!c)?(b=w(a,f,!c))&&n(b)&&b.is(a.triggers)&&d(f):d(f)))}}}()}}function A(a,c){if(!c||c.type!=CKEDITOR.NODE_ELEMENT||!c.$)return!1;var d=a.line;return d.wrap.equals(c)||d.wrap.contains(c)}function n(a){return a&&\na.type==CKEDITOR.NODE_ELEMENT&&a.$}function u(a){if(!n(a))return!1;var c;(c=ba(a))||(n(a)?(c={left:1,right:1,center:1},c=!(!c[a.getComputedStyle(\"float\")]&&!c[a.getAttribute(\"align\")])):c=!1);return c}function ba(a){return!!{absolute:1,fixed:1}[a.getComputedStyle(\"position\")]}function L(a,c){return n(c)?c.is(a.triggers):null}function aa(a,c){if(!c)return!1;for(var d=c.getParents(1),b=d.length;b--;)for(var e=a.tabuList.length;e--;)if(d[b].hasAttribute(a.tabuList[e]))return!0;return!1}function na(a,\nc,d){c=c[d?\"getLast\":\"getFirst\"](function(b){return a.isRelevant(b)&&!b.is(oa)});if(!c)return!1;r(a,c);return d?c.size.top>a.mouse.y:c.size.bottom<a.mouse.y}function ca(a){var c=a.editable,d=a.mouse,b=a.view,e=a.triggerOffset;H(a);var f=d.y>(a.inInlineMode?b.editable.top+b.editable.height/2:Math.min(b.editable.height,b.pane.height)/2),c=c[f?\"getLast\":\"getFirst\"](function(a){return!(E(a)||F(a))});if(!c)return null;A(a,c)&&(c=a.line.wrap[f?\"getPrevious\":\"getNext\"](function(a){return!(E(a)||F(a))}));\nif(!n(c)||u(c)||!L(a,c))return null;r(a,c);return!f&&0<=c.size.top&&q(d.y,0,c.size.top+e)?(a=a.inInlineMode||0===b.scroll.y?C:x,new z([null,c,I,M,a])):f&&c.size.bottom<=b.pane.height&&q(d.y,c.size.bottom-e,b.pane.height)?(a=a.inInlineMode||q(c.size.bottom,b.pane.height-e,b.pane.height)?D:x,new z([c,null,da,M,a])):null}function ea(a){var c=a.mouse,d=a.view,b=a.triggerOffset,e=O(a);if(!e)return null;r(a,e);var b=Math.min(b,0|e.size.outerHeight/2),f=[],k,h;if(q(c.y,e.size.top-1,e.size.top+b))h=!1;else if(q(c.y,\ne.size.bottom-b,e.size.bottom+1))h=!0;else return null;if(u(e)||na(a,e,h)||e.getParent().is(fa))return null;var g=w(a,e,!h);if(g){if(g&&g.type==CKEDITOR.NODE_TEXT)return null;if(n(g)){if(u(g)||!L(a,g)||g.getParent().is(fa))return null;f=[g,e][h?\"reverse\":\"concat\"]().concat([T,M])}}else e.equals(a.editable[h?\"getLast\":\"getFirst\"](a.isRelevant))?(H(a),h&&q(c.y,e.size.bottom-b,d.pane.height)&&q(e.size.bottom,d.pane.height-b,d.pane.height)?k=D:q(c.y,0,e.size.top+b)&&(k=C)):k=x,f=[null,e][h?\"reverse\":\n\"concat\"]().concat([h?da:I,M,k,e.equals(a.editable[h?\"getLast\":\"getFirst\"](a.isRelevant))?h?D:C:x]);return 0 in f?new z(f):null}function U(a,c,d,b){for(var e=c.getDocumentPosition(),f={},k={},h={},g={},l=y.length;l--;)f[y[l]]=parseInt(c.getComputedStyle.call(c,\"border-\"+y[l]+\"-width\"),10)||0,h[y[l]]=parseInt(c.getComputedStyle.call(c,\"padding-\"+y[l]),10)||0,k[y[l]]=parseInt(c.getComputedStyle.call(c,\"margin-\"+y[l]),10)||0;d&&!b||N(a,b);g.top=e.y-(d?0:a.view.scroll.y);g.left=e.x-(d?0:a.view.scroll.x);\ng.outerWidth=c.$.offsetWidth;g.outerHeight=c.$.offsetHeight;g.height=g.outerHeight-(h.top+h.bottom+f.top+f.bottom);g.width=g.outerWidth-(h.left+h.right+f.left+f.right);g.bottom=g.top+g.outerHeight;g.right=g.left+g.outerWidth;a.inInlineMode&&(g.scroll={top:c.$.scrollTop,left:c.$.scrollLeft});return v({border:f,padding:h,margin:k,ignoreScroll:d},g,!0)}function r(a,c,d){if(!n(c))return c.size=null;if(!c.size)c.size={};else if(c.size.ignoreScroll==d&&c.size.date>new Date-ga)return null;return v(c.size,\nU(a,c,d),{date:+new Date},!0)}function H(a,c){a.view.editable=U(a,a.editable,c,!0)}function N(a,c){a.view||(a.view={});var d=a.view;if(!(!c&&d&&d.date>new Date-ga)){var b=a.win,d=b.getScrollPosition(),b=b.getViewPaneSize();v(a.view,{scroll:{x:d.x,y:d.y,width:a.doc.$.documentElement.scrollWidth-b.width,height:a.doc.$.documentElement.scrollHeight-b.height},pane:{width:b.width,height:b.height,bottom:b.height+d.y},date:+new Date},!0)}}function pa(a,c,d,b){for(var e=b,f=b,k=0,h=!1,g=!1,l=a.view.pane.height,\np=a.mouse;p.y+k<l&&0<p.y-k;){h||(h=c(e,b));g||(g=c(f,b));!h&&0<p.y-k&&(e=d(a,{x:p.x,y:p.y-k}));!g&&p.y+k<l&&(f=d(a,{x:p.x,y:p.y+k}));if(h&&g)break;k+=2}return new z([e,f,null,null])}CKEDITOR.plugins.add(\"magicline\",{init:function(a){var c=a.config,d=c.magicline_triggerOffset||30,b={editor:a,enterMode:c.enterMode,triggerOffset:d,holdDistance:0|d*(c.magicline_holdDistance||.5),boxColor:c.magicline_color||\"#ff0000\",rtl:\"rtl\"==c.contentsLangDirection,tabuList:[\"data-cke-hidden-sel\"].concat(c.magicline_tabuList||\n[]),triggers:c.magicline_everywhere?Z:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},e,f,k;b.isRelevant=function(a){return n(a)&&!A(b,a)&&!u(a)};a.on(\"contentDom\",function(){var d=a.editable(),g=a.document,l=a.window;v(b,{editable:d,inInlineMode:d.isInline(),doc:g,win:l,hotNode:null},!0);b.boundary=b.inInlineMode?b.editable:b.doc.getDocumentElement();d.is(B.$inline)||(b.inInlineMode&&!ba(d)&&d.setStyles({position:\"relative\",top:null,left:null}),la.call(this,b),N(b),d.attachListener(a,\"beforeUndoImage\",\nfunction(){b.line.detach()}),d.attachListener(a,\"beforeGetData\",function(){b.line.wrap.getParent()&&(b.line.detach(),a.once(\"getData\",function(){b.line.attach()},null,null,1E3))},null,null,0),d.attachListener(b.inInlineMode?g:g.getWindow().getFrame(),\"mouseout\",function(c){if(\"wysiwyg\"==a.mode)if(b.inInlineMode){var d=c.data.$.clientX;c=c.data.$.clientY;N(b);H(b,!0);var e=b.view.editable,f=b.view.scroll;d>e.left-f.x&&d<e.right-f.x&&c>e.top-f.y&&c<e.bottom-f.y||(clearTimeout(k),k=null,b.line.detach())}else clearTimeout(k),\nk=null,b.line.detach()}),d.attachListener(d,\"keyup\",function(){b.hiddenMode=0}),d.attachListener(d,\"keydown\",function(c){if(\"wysiwyg\"==a.mode)switch(c.data.getKeystroke()){case 2228240:case 16:b.hiddenMode=1,b.line.detach()}}),d.attachListener(b.inInlineMode?d:g,\"mousemove\",function(c){f=!0;if(\"wysiwyg\"==a.mode&&!a.readOnly&&!k){var d={x:c.data.$.clientX,y:c.data.$.clientY};k=setTimeout(function(){b.mouse=d;k=b.trigger=null;N(b);f&&!b.hiddenMode&&a.focusManager.hasFocus&&!b.line.mouseNear()&&(b.element=\nha(b,!0))&&((b.trigger=ca(b)||ea(b)||ia(b))&&!aa(b,b.trigger.upper||b.trigger.lower)?b.line.attach().place():(b.trigger=null,b.line.detach()),f=!1)},30)}}),d.attachListener(l,\"scroll\",function(){\"wysiwyg\"==a.mode&&(b.line.detach(),t.webkit&&(b.hiddenMode=1,clearTimeout(e),e=setTimeout(function(){b.mouseDown||(b.hiddenMode=0)},50)))}),d.attachListener(ja?g:l,\"mousedown\",function(){\"wysiwyg\"==a.mode&&(b.line.detach(),b.hiddenMode=1,b.mouseDown=1)}),d.attachListener(ja?g:l,\"mouseup\",function(){b.hiddenMode=\n0;b.mouseDown=0}),a.addCommand(\"accessPreviousSpace\",Y(b)),a.addCommand(\"accessNextSpace\",Y(b,!0)),a.setKeystroke([[c.magicline_keystrokePrevious,\"accessPreviousSpace\"],[c.magicline_keystrokeNext,\"accessNextSpace\"]]),a.on(\"loadSnapshot\",function(){var c,d,e,f;for(f in{p:1,br:1,div:1})for(c=a.document.getElementsByTag(f),e=c.count();e--;)if((d=c.getItem(e)).data(\"cke-magicline-hot\")){b.hotNode=d;b.lastCmdDirection=\"true\"===d.data(\"cke-magicline-dir\")?!0:!1;return}}),this.backdoor={accessFocusSpace:S,\nboxTrigger:z,isLine:A,getAscendantTrigger:O,getNonEmptyNeighbour:w,getSize:U,that:b,triggerEdge:ea,triggerEditable:ca,triggerExpand:ia})},this)}});var v=CKEDITOR.tools.extend,R=CKEDITOR.dom.element,G=R.createFromHtml,t=CKEDITOR.env,ja=CKEDITOR.env.ie&&9>CKEDITOR.env.version,B=CKEDITOR.dtd,K={},I=128,da=64,T=32,M=16,C=4,D=2,x=1,J=\" \",fa=B.$listItem,oa=B.$tableContent,ma=v({},B.$nonEditable,B.$empty),Z=B.$block,ga=100,Q=\"width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;\",\nX=Q+\"border-color:transparent;display:block;border-style:solid;\",W=\"\\x3cspan\\x3e\"+J+\"\\x3c/span\\x3e\";K[CKEDITOR.ENTER_BR]=\"br\";K[CKEDITOR.ENTER_P]=\"p\";K[CKEDITOR.ENTER_DIV]=\"div\";z.prototype={set:function(a,c,d){this.properties=a+c+(d||x);return this},is:function(a){return(this.properties&a)==a}};var ha=function(){function a(a,d){var b=a.$.elementFromPoint(d.x,d.y);return b&&b.nodeType?new CKEDITOR.dom.element(b):null}return function(c,d,b){if(!c.mouse)return null;var e=c.doc,f=c.line.wrap;b=b||c.mouse;\nvar k=a(e,b);d&&A(c,k)&&(f.hide(),k=a(e,b),f.show());return!k||k.type!=CKEDITOR.NODE_ELEMENT||!k.$||t.ie&&9>t.version&&!c.boundary.equals(k)&&!c.boundary.contains(k)?null:k}}(),E=CKEDITOR.dom.walker.whitespaces(),F=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT),ia=function(){function a(a){var b=a.element,e,f,k;if(!n(b)||b.contains(a.editable)||b.isReadOnly())return null;k=pa(a,function(a,b){return!b.equals(a)},function(a,b){return ha(a,!0,b)},b);e=k.upper;f=k.lower;if(V(a,e,f))return k.set(T,\n8);if(e&&b.contains(e))for(;!e.getParent().equals(b);)e=e.getParent();else e=b.getFirst(function(b){return c(a,b)});if(f&&b.contains(f))for(;!f.getParent().equals(b);)f=f.getParent();else f=b.getLast(function(b){return c(a,b)});if(!e||!f)return null;r(a,e);r(a,f);if(!q(a.mouse.y,e.size.top,f.size.bottom))return null;for(var b=Number.MAX_VALUE,h,g,l,p;f&&!f.equals(e)&&(g=e.getNext(a.isRelevant));)h=Math.abs(ka(a,e,g)-a.mouse.y),h<b&&(b=h,l=e,p=g),e=g,r(a,e);if(!l||!p||!q(a.mouse.y,l.size.top,p.size.bottom))return null;\nk.upper=l;k.lower=p;return k.set(T,8)}function c(a,b){return!(b&&b.type==CKEDITOR.NODE_TEXT||F(b)||u(b)||A(a,b)||b.type==CKEDITOR.NODE_ELEMENT&&b.$&&b.is(\"br\"))}return function(c){var b=a(c),e;if(e=b){e=b.upper;var f=b.lower;e=!e||!f||u(f)||u(e)||f.equals(e)||e.equals(f)||f.contains(e)||e.contains(f)?!1:L(c,e)&&L(c,f)&&V(c,e,f)?!0:!1}return e?b:null}}(),y=[\"top\",\"left\",\"right\",\"bottom\"]})();CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51;\nCKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.SHIFT+52;(function(){function n(a){if(!a||a.type!=CKEDITOR.NODE_ELEMENT||\"form\"!=a.getName())return[];for(var e=[],f=[\"style\",\"className\"],b=0;b<f.length;b++){var c=a.$.elements.namedItem(f[b]);c&&(c=new CKEDITOR.dom.element(c),e.push([c,c.nextSibling]),c.remove())}return e}function t(a,e){if(a&&a.type==CKEDITOR.NODE_ELEMENT&&\"form\"==a.getName()&&0<e.length)for(var f=e.length-1;0<=f;f--){var b=e[f][0],c=e[f][1];c?b.insertBefore(c):b.appendTo(a)}}function r(a,e){var f=n(a),b={},c=a.$;e||(b[\"class\"]=c.className||\n\"\",c.className=\"\");b.inline=c.style.cssText||\"\";e||(c.style.cssText=\"position: static; overflow: visible\");t(f);return b}function u(a,e){var f=n(a),b=a.$;\"class\"in e&&(b.className=e[\"class\"]);\"inline\"in e&&(b.style.cssText=e.inline);t(f)}function v(a){if(!a.editable().isInline()){var e=CKEDITOR.instances,f;for(f in e){var b=e[f];\"wysiwyg\"!=b.mode||b.readOnly||(b=b.document.getBody(),b.setAttribute(\"contentEditable\",!1),b.setAttribute(\"contentEditable\",!0))}a.editable().hasFocus&&(a.toolbox.focus(),\na.focus())}}CKEDITOR.plugins.add(\"maximize\",{init:function(a){function e(){var b=c.getViewPaneSize();a.resize(b.width,b.height,null,!0)}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var f=a.lang,b=CKEDITOR.document,c=b.getWindow(),l,m,p,n=CKEDITOR.TRISTATE_OFF;a.addCommand(\"maximize\",{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:!1,exec:function(){var h=a.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass(\"cke_inner\")}),g=a.ui.space(\"contents\");\nif(\"wysiwyg\"==a.mode){var d=a.getSelection();l=d&&d.getRanges();m=c.getScrollPosition()}else{var k=a.editable().$;l=!CKEDITOR.env.ie&&[k.selectionStart,k.selectionEnd];m=[k.scrollLeft,k.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){c.on(\"resize\",e);p=c.getScrollPosition();for(d=a.container;d=d.getParent();)d.setCustomData(\"maximize_saved_styles\",r(d)),d.setStyle(\"z-index\",a.config.baseFloatZIndex-5);g.setCustomData(\"maximize_saved_styles\",r(g,!0));h.setCustomData(\"maximize_saved_styles\",r(h,!0));\ng={overflow:CKEDITOR.env.webkit?\"\":\"hidden\",width:0,height:0};b.getDocumentElement().setStyles(g);!CKEDITOR.env.gecko&&b.getDocumentElement().setStyle(\"position\",\"fixed\");CKEDITOR.env.gecko&&CKEDITOR.env.quirks||b.getBody().setStyles(g);CKEDITOR.env.ie?setTimeout(function(){c.$.scrollTo(0,0)},0):c.$.scrollTo(0,0);h.setStyle(\"position\",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?\"fixed\":\"absolute\");h.$.offsetLeft;h.setStyles({\"z-index\":a.config.baseFloatZIndex-5,left:\"0px\",top:\"0px\"});h.addClass(\"cke_maximized\");\ne();g=h.getDocumentPosition();h.setStyles({left:-1*g.x+\"px\",top:-1*g.y+\"px\"});CKEDITOR.env.gecko&&v(a)}else if(this.state==CKEDITOR.TRISTATE_ON){c.removeListener(\"resize\",e);for(var d=[g,h],q=0;q<d.length;q++)u(d[q],d[q].getCustomData(\"maximize_saved_styles\")),d[q].removeCustomData(\"maximize_saved_styles\");for(d=a.container;d=d.getParent();)u(d,d.getCustomData(\"maximize_saved_styles\")),d.removeCustomData(\"maximize_saved_styles\");CKEDITOR.env.ie?setTimeout(function(){c.$.scrollTo(p.x,p.y)},0):c.$.scrollTo(p.x,\np.y);h.removeClass(\"cke_maximized\");CKEDITOR.env.webkit&&(h.setStyle(\"display\",\"inline\"),setTimeout(function(){h.setStyle(\"display\",\"block\")},0));a.fire(\"resize\",{outerHeight:a.container.$.offsetHeight,contentsHeight:g.$.offsetHeight,outerWidth:a.container.$.offsetWidth})}this.toggleState();if(d=this.uiItems[0])g=this.state==CKEDITOR.TRISTATE_OFF?f.maximize.maximize:f.maximize.minimize,d=CKEDITOR.document.getById(d._.id),d.getChild(1).setHtml(g),d.setAttribute(\"title\",g),d.setAttribute(\"href\",'javascript:void(\"'+\ng+'\");');\"wysiwyg\"==a.mode?l?(CKEDITOR.env.gecko&&v(a),a.getSelection().selectRanges(l),(k=a.getSelection().getStartElement())&&k.scrollIntoView(!0)):c.$.scrollTo(m.x,m.y):(l&&(k.selectionStart=l[0],k.selectionEnd=l[1]),k.scrollLeft=m[0],k.scrollTop=m[1]);l=m=null;n=this.state;a.fire(\"maximize\",this.state)},canUndo:!1});a.ui.addButton&&a.ui.addButton(\"Maximize\",{label:f.maximize.maximize,command:\"maximize\",toolbar:\"tools,10\"});a.on(\"mode\",function(){var b=a.getCommand(\"maximize\");b.setState(b.state==\nCKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:n)},null,null,100)}}})})();(function(){var c={canUndo:!1,async:!0,exec:function(a){a.getClipboardData({title:a.lang.pastetext.title},function(b){b&&a.fire(\"paste\",{type:\"text\",dataValue:b.dataValue,method:\"paste\",dataTransfer:CKEDITOR.plugins.clipboard.initPasteDataTransfer()});a.fire(\"afterCommandExec\",{name:\"pastetext\",command:c,returnValue:!!b})})}};CKEDITOR.plugins.add(\"pastetext\",{requires:\"clipboard\",init:function(a){a.addCommand(\"pastetext\",c);a.ui.addButton&&a.ui.addButton(\"PasteText\",{label:a.lang.pastetext.button,\ncommand:\"pastetext\",toolbar:\"clipboard,40\"});if(a.config.forcePasteAsPlainText)a.on(\"beforePaste\",function(a){\"html\"!=a.data.type&&(a.data.type=\"text\")});a.on(\"pasteState\",function(b){a.getCommand(\"pastetext\").setState(b.data)})}})})();(function(){function h(a,d,f){var b=CKEDITOR.cleanWord;b?f():(a=CKEDITOR.getUrl(a.config.pasteFromWordCleanupFile||d+\"filter/default.js\"),CKEDITOR.scriptLoader.load(a,f,null,!0));return!b}function k(a){a.data.type=\"html\"}CKEDITOR.plugins.add(\"pastefromword\",{requires:\"clipboard\",init:function(a){var d=0,f=this.path;a.addCommand(\"pastefromword\",{canUndo:!1,async:!0,exec:function(a){var e=this;d=1;a.once(\"beforePaste\",k);a.getClipboardData({title:a.lang.pastefromword.title},function(c){c&&a.fire(\"paste\",\n{type:\"html\",dataValue:c.dataValue,method:\"paste\",dataTransfer:CKEDITOR.plugins.clipboard.initPasteDataTransfer()});a.fire(\"afterCommandExec\",{name:\"pastefromword\",command:e,returnValue:!!c})})}});a.ui.addButton&&a.ui.addButton(\"PasteFromWord\",{label:a.lang.pastefromword.toolbar,command:\"pastefromword\",toolbar:\"clipboard,50\"});a.on(\"pasteState\",function(b){a.getCommand(\"pastefromword\").setState(b.data)});a.on(\"paste\",function(b){var e=b.data,c=e.dataValue;if(c&&(d||/(class=\\\"?Mso|style=\\\"[^\\\"]*\\bmso\\-|w:WordDocument)/.test(c))){e.dontFilter=\n!0;var g=h(a,f,function(){if(g)a.fire(\"paste\",e);else if(!a.config.pasteFromWordPromptCleanup||d||confirm(a.lang.pastefromword.confirmCleanup))e.dataValue=CKEDITOR.cleanWord(c,a);d=0});g&&b.cancel()}},null,null,3)}})})();CKEDITOR.plugins.add(\"removeformat\",{init:function(a){a.addCommand(\"removeFormat\",CKEDITOR.plugins.removeformat.commands.removeformat);a.ui.addButton&&a.ui.addButton(\"RemoveFormat\",{label:a.lang.removeformat.toolbar,command:\"removeFormat\",toolbar:\"cleanup,10\"})}});\nCKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){for(var h=a._.removeFormatRegex||(a._.removeFormatRegex=new RegExp(\"^(?:\"+a.config.removeFormatTags.replace(/,/g,\"|\")+\")$\",\"i\")),e=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(\",\")),f=CKEDITOR.plugins.removeformat.filter,m=a.getSelection().getRanges(),n=m.createIterator(),p=function(a){return a.type==CKEDITOR.NODE_ELEMENT},c;c=n.getNextRange();){c.collapsed||c.enlarge(CKEDITOR.ENLARGE_ELEMENT);\nvar l=c.createBookmark(),b=l.startNode,d=l.endNode,k=function(b){for(var c=a.elementPath(b),e=c.elements,d=1,g;(g=e[d])&&!g.equals(c.block)&&!g.equals(c.blockLimit);d++)h.test(g.getName())&&f(a,g)&&b.breakParent(g)};k(b);if(d)for(k(d),b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);b&&!b.equals(d);)if(b.isReadOnly()){if(b.getPosition(d)&CKEDITOR.POSITION_CONTAINS)break;b=b.getNext(p)}else k=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),\"img\"==b.getName()&&b.data(\"cke-realelement\")||!f(a,b)||(h.test(b.getName())?\nb.remove(1):(b.removeAttributes(e),a.fire(\"removeFormatCleanup\",b))),b=k;c.moveToBookmark(l)}a.forceNextSelectionCheck();a.getSelection().selectRanges(m)}}},filter:function(a,h){for(var e=a._.removeFormatFilters||[],f=0;f<e.length;f++)if(!1===e[f](h))return!1;return!0}};CKEDITOR.editor.prototype.addRemoveFormatFilter=function(a){this._.removeFormatFilters||(this._.removeFormatFilters=[]);this._.removeFormatFilters.push(a)};CKEDITOR.config.removeFormatTags=\"b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var\";\nCKEDITOR.config.removeFormatAttributes=\"class,style,lang,width,height,align,hspace,valign\";(function(){var f={preserveState:!0,editorFocus:!1,readOnly:1,exec:function(a){this.toggleState();this.refresh(a)},refresh:function(a){if(a.document){var b=this.state==CKEDITOR.TRISTATE_ON?\"attachClass\":\"removeClass\";a.editable()[b](\"cke_show_borders\")}}};CKEDITOR.plugins.add(\"showborders\",{modes:{wysiwyg:1},onLoad:function(){var a;a=(CKEDITOR.env.ie6Compat?[\".%1 table.%2,\",\".%1 table.%2 td, .%1 table.%2 th\",\"{\",\"border : #d3d3d3 1px dotted\",\"}\"]:\".%1 table.%2,;.%1 table.%2 \\x3e tr \\x3e td, .%1 table.%2 \\x3e tr \\x3e th,;.%1 table.%2 \\x3e tbody \\x3e tr \\x3e td, .%1 table.%2 \\x3e tbody \\x3e tr \\x3e th,;.%1 table.%2 \\x3e thead \\x3e tr \\x3e td, .%1 table.%2 \\x3e thead \\x3e tr \\x3e th,;.%1 table.%2 \\x3e tfoot \\x3e tr \\x3e td, .%1 table.%2 \\x3e tfoot \\x3e tr \\x3e th;{;border : #d3d3d3 1px dotted;}\".split(\";\")).join(\"\").replace(/%2/g,\n\"cke_show_border\").replace(/%1/g,\"cke_show_borders \");CKEDITOR.addCss(a)},init:function(a){var b=a.addCommand(\"showborders\",f);b.canUndo=!1;!1!==a.config.startupShowBorders&&b.setState(CKEDITOR.TRISTATE_ON);a.on(\"mode\",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)},null,null,100);a.on(\"contentDom\",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)});a.on(\"removeFormatCleanup\",function(d){d=d.data;a.getCommand(\"showborders\").state==CKEDITOR.TRISTATE_ON&&d.is(\"table\")&&(!d.hasAttribute(\"border\")||\n0>=parseInt(d.getAttribute(\"border\"),10))&&d.addClass(\"cke_show_border\")})},afterInit:function(a){var b=a.dataProcessor;a=b&&b.dataFilter;b=b&&b.htmlFilter;a&&a.addRules({elements:{table:function(a){a=a.attributes;var b=a[\"class\"],c=parseInt(a.border,10);c&&!(0>=c)||b&&-1!=b.indexOf(\"cke_show_border\")||(a[\"class\"]=(b||\"\")+\" cke_show_border\")}}});b&&b.addRules({elements:{table:function(a){a=a.attributes;var b=a[\"class\"];b&&(a[\"class\"]=b.replace(\"cke_show_border\",\"\").replace(/\\s{2}/,\" \").replace(/^\\s+|\\s+$/,\n\"\"))}}})}});CKEDITOR.on(\"dialogDefinition\",function(a){var b=a.data.name;if(\"table\"==b||\"tableProperties\"==b)if(a=a.data.definition,b=a.getContents(\"info\").get(\"txtBorder\"),b.commit=CKEDITOR.tools.override(b.commit,function(a){return function(b,c){a.apply(this,arguments);var e=parseInt(this.getValue(),10);c[!e||0>=e?\"addClass\":\"removeClass\"](\"cke_show_border\")}}),a=(a=a.getContents(\"advanced\"))&&a.get(\"advCSSClasses\"))a.setup=CKEDITOR.tools.override(a.setup,function(a){return function(){a.apply(this,\narguments);this.setValue(this.getValue().replace(/cke_show_border/,\"\"))}}),a.commit=CKEDITOR.tools.override(a.commit,function(a){return function(b,c){a.apply(this,arguments);parseInt(c.getAttribute(\"border\"),10)||c.addClass(\"cke_show_border\")}})})})();(function(){CKEDITOR.plugins.add(\"sourcearea\",{init:function(a){function d(){var a=e&&this.equals(CKEDITOR.document.getActive());this.hide();this.setStyle(\"height\",this.getParent().$.clientHeight+\"px\");this.setStyle(\"width\",this.getParent().$.clientWidth+\"px\");this.show();a&&this.focus()}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var f=CKEDITOR.plugins.sourcearea;a.addMode(\"source\",function(e){var b=a.ui.space(\"contents\").getDocument().createElement(\"textarea\");b.setStyles(CKEDITOR.tools.extend({width:CKEDITOR.env.ie7Compat?\n\"99%\":\"100%\",height:\"100%\",resize:\"none\",outline:\"none\",\"text-align\":\"left\"},CKEDITOR.tools.cssVendorPrefix(\"tab-size\",a.config.sourceAreaTabSize||4)));b.setAttribute(\"dir\",\"ltr\");b.addClass(\"cke_source\").addClass(\"cke_reset\").addClass(\"cke_enable_context_menu\");a.ui.space(\"contents\").append(b);b=a.editable(new c(a,b));b.setData(a.getData(1));CKEDITOR.env.ie&&(b.attachListener(a,\"resize\",d,b),b.attachListener(CKEDITOR.document.getWindow(),\"resize\",d,b),CKEDITOR.tools.setTimeout(d,0,b));a.fire(\"ariaWidget\",\nthis);e()});a.addCommand(\"source\",f.commands.source);a.ui.addButton&&a.ui.addButton(\"Source\",{label:a.lang.sourcearea.toolbar,command:\"source\",toolbar:\"mode,10\"});a.on(\"mode\",function(){a.getCommand(\"source\").setState(\"source\"==a.mode?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)});var e=CKEDITOR.env.ie&&9==CKEDITOR.env.version}}});var c=CKEDITOR.tools.createClass({base:CKEDITOR.editable,proto:{setData:function(a){this.setValue(a);this.status=\"ready\";this.editor.fire(\"dataReady\")},getData:function(){return this.getValue()},\ninsertHtml:function(){},insertElement:function(){},insertText:function(){},setReadOnly:function(a){this[(a?\"set\":\"remove\")+\"Attribute\"](\"readOnly\",\"readonly\")},detach:function(){c.baseProto.detach.call(this);this.clearCustomData();this.remove()}}})})();\nCKEDITOR.plugins.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:!1,readOnly:1,exec:function(c){\"wysiwyg\"==c.mode&&c.fire(\"saveSnapshot\");c.getCommand(\"source\").setState(CKEDITOR.TRISTATE_DISABLED);c.setMode(\"source\"==c.mode?\"wysiwyg\":\"source\")},canUndo:!1}}};CKEDITOR.plugins.add(\"specialchar\",{availableLangs:{af:1,ar:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,\"de-ch\":1,el:1,en:1,\"en-gb\":1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fr:1,\"fr-ca\":1,gl:1,he:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,nb:1,nl:1,no:1,pl:1,pt:1,\"pt-br\":1,ru:1,si:1,sk:1,sl:1,sq:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,\"zh-cn\":1},requires:\"dialog\",init:function(a){var c=this;CKEDITOR.dialog.add(\"specialchar\",this.path+\"dialogs/specialchar.js\");a.addCommand(\"specialchar\",{exec:function(){var b=\na.langCode,b=c.availableLangs[b]?b:c.availableLangs[b.replace(/-.*/,\"\")]?b.replace(/-.*/,\"\"):\"en\";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c.path+\"dialogs/lang/\"+b+\".js\"),function(){CKEDITOR.tools.extend(a.lang.specialchar,c.langEntries[b]);a.openDialog(\"specialchar\")})},modes:{wysiwyg:1},canUndo:!1});a.ui.addButton&&a.ui.addButton(\"SpecialChar\",{label:a.lang.specialchar.toolbar,command:\"specialchar\",toolbar:\"insert,50\"})}});CKEDITOR.config.specialChars=\"! \\x26quot; # $ % \\x26amp; ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; \\x26lt; \\x3d \\x26gt; ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x26euro; \\x26lsquo; \\x26rsquo; \\x26ldquo; \\x26rdquo; \\x26ndash; \\x26mdash; \\x26iexcl; \\x26cent; \\x26pound; \\x26curren; \\x26yen; \\x26brvbar; \\x26sect; \\x26uml; \\x26copy; \\x26ordf; \\x26laquo; \\x26not; \\x26reg; \\x26macr; \\x26deg; \\x26sup2; \\x26sup3; \\x26acute; \\x26micro; \\x26para; \\x26middot; \\x26cedil; \\x26sup1; \\x26ordm; \\x26raquo; \\x26frac14; \\x26frac12; \\x26frac34; \\x26iquest; \\x26Agrave; \\x26Aacute; \\x26Acirc; \\x26Atilde; \\x26Auml; \\x26Aring; \\x26AElig; \\x26Ccedil; \\x26Egrave; \\x26Eacute; \\x26Ecirc; \\x26Euml; \\x26Igrave; \\x26Iacute; \\x26Icirc; \\x26Iuml; \\x26ETH; \\x26Ntilde; \\x26Ograve; \\x26Oacute; \\x26Ocirc; \\x26Otilde; \\x26Ouml; \\x26times; \\x26Oslash; \\x26Ugrave; \\x26Uacute; \\x26Ucirc; \\x26Uuml; \\x26Yacute; \\x26THORN; \\x26szlig; \\x26agrave; \\x26aacute; \\x26acirc; \\x26atilde; \\x26auml; \\x26aring; \\x26aelig; \\x26ccedil; \\x26egrave; \\x26eacute; \\x26ecirc; \\x26euml; \\x26igrave; \\x26iacute; \\x26icirc; \\x26iuml; \\x26eth; \\x26ntilde; \\x26ograve; \\x26oacute; \\x26ocirc; \\x26otilde; \\x26ouml; \\x26divide; \\x26oslash; \\x26ugrave; \\x26uacute; \\x26ucirc; \\x26uuml; \\x26yacute; \\x26thorn; \\x26yuml; \\x26OElig; \\x26oelig; \\x26#372; \\x26#374 \\x26#373 \\x26#375; \\x26sbquo; \\x26#8219; \\x26bdquo; \\x26hellip; \\x26trade; \\x26#9658; \\x26bull; \\x26rarr; \\x26rArr; \\x26hArr; \\x26diams; \\x26asymp;\".split(\" \");CKEDITOR.plugins.add(\"menubutton\",{requires:\"button,menu\",onLoad:function(){var d=function(c){var a=this._,b=a.menu;a.state!==CKEDITOR.TRISTATE_DISABLED&&(a.on&&b?b.hide():(a.previousState=a.state,b||(b=a.menu=new CKEDITOR.menu(c,{panel:{className:\"cke_menu_panel\",attributes:{\"aria-label\":c.lang.common.options}}}),b.onHide=CKEDITOR.tools.bind(function(){var b=this.command?c.getCommand(this.command).modes:this.modes;this.setState(!b||b[c.mode]?a.previousState:CKEDITOR.TRISTATE_DISABLED);a.on=0},this),\nthis.onMenu&&b.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),a.on=1,setTimeout(function(){b.show(CKEDITOR.document.getById(a.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(c){delete c.panel;this.base(c);this.hasArrow=!0;this.click=d},statics:{handler:{create:function(c){return new CKEDITOR.ui.menuButton(c)}}}})},beforeInit:function(d){d.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler)}});\nCKEDITOR.UI_MENUBUTTON=\"menubutton\";CKEDITOR.plugins.add(\"scayt\",{requires:\"menubutton,dialog\",tabToOpen:null,dialogName:\"scaytDialog\",init:function(a){var c=this,d=CKEDITOR.plugins.scayt;this.bindEvents(a);this.parseConfig(a);this.addRule(a);CKEDITOR.dialog.add(this.dialogName,CKEDITOR.getUrl(this.path+\"dialogs/options.js\"));this.addMenuItems(a);var b=a.lang.scayt,e=CKEDITOR.env;a.ui.add(\"Scayt\",CKEDITOR.UI_MENUBUTTON,{label:b.text_title,title:a.plugins.wsc?a.lang.wsc.title:b.text_title,modes:{wysiwyg:!(e.ie&&(8>e.version||e.quirks))},\ntoolbar:\"spellchecker,20\",refresh:function(){var b=a.ui.instances.Scayt.getState();a.scayt&&(b=d.state.scayt[a.name]?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF);a.fire(\"scaytButtonState\",b)},onRender:function(){var b=this;a.on(\"scaytButtonState\",function(a){void 0!==typeof a.data&&b.setState(a.data)})},onMenu:function(){var b=a.scayt;a.getMenuItem(\"scaytToggle\").label=a.lang.scayt[b&&d.state.scayt[a.name]?\"btn_disable\":\"btn_enable\"];b={scaytToggle:CKEDITOR.TRISTATE_OFF,scaytOptions:b?CKEDITOR.TRISTATE_OFF:\nCKEDITOR.TRISTATE_DISABLED,scaytLangs:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytDict:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytAbout:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,WSC:a.plugins.wsc?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED};a.config.scayt_uiTabs[0]||delete b.scaytOptions;a.config.scayt_uiTabs[1]||delete b.scaytLangs;a.config.scayt_uiTabs[2]||delete b.scaytDict;return b}});a.contextMenu&&a.addMenuItems&&(a.contextMenu.addListener(function(b,d){var e=\na.scayt,k,l;e&&(l=e.getSelectionNode())&&(k=c.menuGenerator(a,l),e.showBanner(\".\"+a.contextMenu._.definition.panel.className.split(\" \").join(\" .\")));return k}),a.contextMenu._.onHide=CKEDITOR.tools.override(a.contextMenu._.onHide,function(b){return function(){var d=a.scayt;d&&d.hideBanner();return b.apply(this)}}))},addMenuItems:function(a){var c=this,d=CKEDITOR.plugins.scayt;a.addMenuGroup(\"scaytButton\");for(var b=a.config.scayt_contextMenuItemsOrder.split(\"|\"),e=0;e<b.length;e++)b[e]=\"scayt_\"+b[e];\nif((b=[\"grayt_description\",\"grayt_suggest\",\"grayt_control\"].concat(b))&&b.length)for(e=0;e<b.length;e++)a.addMenuGroup(b[e],e-10);a.addCommand(\"scaytToggle\",{exec:function(a){var b=a.scayt;d.state.scayt[a.name]=!d.state.scayt[a.name];!0===d.state.scayt[a.name]?b||d.createScayt(a):b&&d.destroy(a)}});a.addCommand(\"scaytAbout\",{exec:function(a){a.scayt.tabToOpen=\"about\";a.lockSelection();a.openDialog(c.dialogName)}});a.addCommand(\"scaytOptions\",{exec:function(a){a.scayt.tabToOpen=\"options\";a.lockSelection();\na.openDialog(c.dialogName)}});a.addCommand(\"scaytLangs\",{exec:function(a){a.scayt.tabToOpen=\"langs\";a.lockSelection();a.openDialog(c.dialogName)}});a.addCommand(\"scaytDict\",{exec:function(a){a.scayt.tabToOpen=\"dictionaries\";a.lockSelection();a.openDialog(c.dialogName)}});b={scaytToggle:{label:a.lang.scayt.btn_enable,group:\"scaytButton\",command:\"scaytToggle\"},scaytAbout:{label:a.lang.scayt.btn_about,group:\"scaytButton\",command:\"scaytAbout\"},scaytOptions:{label:a.lang.scayt.btn_options,group:\"scaytButton\",\ncommand:\"scaytOptions\"},scaytLangs:{label:a.lang.scayt.btn_langs,group:\"scaytButton\",command:\"scaytLangs\"},scaytDict:{label:a.lang.scayt.btn_dictionaries,group:\"scaytButton\",command:\"scaytDict\"}};a.plugins.wsc&&(b.WSC={label:a.lang.wsc.toolbar,group:\"scaytButton\",onClick:function(){var b=CKEDITOR.plugins.scayt,d=a.scayt,c=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText():a.document.getBody().getText();(c=c.replace(/\\s/g,\"\"))?(d&&b.state.scayt[a.name]&&d.setMarkupPaused&&d.setMarkupPaused(!0),\na.lockSelection(),a.execCommand(\"checkspell\")):alert(\"Nothing to check!\")}});a.addMenuItems(b)},bindEvents:function(a){var c=CKEDITOR.plugins.scayt,d=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE,b=function(){c.destroy(a)},e=function(){!c.state.scayt[a.name]||a.readOnly||a.scayt||c.createScayt(a)},f=function(){var b=a.editable();b.attachListener(b,\"focus\",function(b){CKEDITOR.plugins.scayt&&!a.scayt&&setTimeout(e,0);b=CKEDITOR.plugins.scayt&&CKEDITOR.plugins.scayt.state.scayt[a.name]&&a.scayt;var c,\nh;if((d||b)&&a._.savedSelection){b=a._.savedSelection.getSelectedElement();b=!b&&a._.savedSelection.getRanges();for(var f=0;f<b.length;f++)h=b[f],\"string\"===typeof h.startContainer.$.nodeValue&&(c=h.startContainer.getText().length,(c<h.startOffset||c<h.endOffset)&&a.unlockSelection(!1))}},this,null,-10)},g=function(){d?a.config.scayt_inlineModeImmediateMarkup?e():(a.on(\"blur\",function(){setTimeout(b,0)}),a.on(\"focus\",e),a.focusManager.hasFocus&&e()):e();f();var c=a.editable();c.attachListener(c,\"mousedown\",\nfunction(b){b=b.data.getTarget();var d=a.widgets&&a.widgets.getByElement(b);d&&(d.wrapper=b.getAscendant(function(a){return a.hasAttribute(\"data-cke-widget-wrapper\")},!0))},this,null,-10)};a.on(\"contentDom\",g);a.on(\"beforeCommandExec\",function(b){var d=a.scayt,e=null,f=!1,g=!0;b.data.name in c.options.disablingCommandExec&&\"wysiwyg\"==a.mode?d&&(c.destroy(a),a.fire(\"scaytButtonState\",CKEDITOR.TRISTATE_DISABLED)):\"bold\"!==b.data.name&&\"italic\"!==b.data.name&&\"underline\"!==b.data.name&&\"strike\"!==b.data.name&&\n\"subscript\"!==b.data.name&&\"superscript\"!==b.data.name&&\"enter\"!==b.data.name&&\"cut\"!==b.data.name&&\"language\"!==b.data.name||!d||(\"cut\"===b.data.name&&(g=!1,f=!0),\"language\"===b.data.name&&(e=(e=a.plugins.language.getCurrentLangElement(a))&&e.$,f=!0),a.fire(\"reloadMarkupScayt\",{removeOptions:{removeInside:g,forceBookmark:f,selectionNode:e},timeout:0}))});a.on(\"beforeSetMode\",function(b){if(\"source\"==b.data){if(b=a.scayt)c.destroy(a),a.fire(\"scaytButtonState\",CKEDITOR.TRISTATE_DISABLED);a.document&&\na.document.getBody().removeAttribute(\"_jquid\")}});a.on(\"afterCommandExec\",function(b){\"wysiwyg\"!=a.mode||\"undo\"!=b.data.name&&\"redo\"!=b.data.name||setTimeout(function(){var b=a.scayt,d=b&&b.getScaytLangList();d&&d.ltr&&d.rtl&&b.fire(\"startSpellCheck, startGrammarCheck\")},250)});a.on(\"readOnly\",function(b){var d;b&&(d=a.scayt,!0===b.editor.readOnly?d&&d.fire(\"removeMarkupInDocument\",{}):d?d.fire(\"startSpellCheck, startGrammarCheck\"):\"wysiwyg\"==b.editor.mode&&!0===c.state.scayt[b.editor.name]&&(c.createScayt(a),\nb.editor.fire(\"scaytButtonState\",CKEDITOR.TRISTATE_ON)))});a.on(\"beforeDestroy\",b);a.on(\"setData\",function(){b();(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE||a.plugins.divarea)&&g()},this,null,50);a.on(\"reloadMarkupScayt\",function(b){var d=b.data&&b.data.removeOptions;setTimeout(function(){var b=a.scayt,c=b&&b.getScaytLangList();c&&c.ltr&&c.rtl&&(a.document.fire(\"keydown\",new CKEDITOR.dom.event({keyCode:37})),b.removeMarkupInSelectionNode(d),b.fire(\"startSpellCheck, startGrammarCheck\"))},b.data&&\nb.data.timeout||0)});a.on(\"insertElement\",function(){a.fire(\"reloadMarkupScayt\",{removeOptions:{forceBookmark:!0}})},this,null,50);a.on(\"insertHtml\",function(){a.fire(\"reloadMarkupScayt\")},this,null,50);a.on(\"insertText\",function(){a.fire(\"reloadMarkupScayt\")},this,null,50);a.on(\"scaytDialogShown\",function(b){b.data.selectPage(a.scayt.tabToOpen)})},parseConfig:function(a){var c=CKEDITOR.plugins.scayt;c.replaceOldOptionsNames(a.config);\"boolean\"!==typeof a.config.scayt_autoStartup&&(a.config.scayt_autoStartup=\n!1);c.state.scayt[a.name]=a.config.scayt_autoStartup;\"boolean\"!==typeof a.config.grayt_autoStartup&&(a.config.grayt_autoStartup=!1);\"boolean\"!==typeof a.config.scayt_inlineModeImmediateMarkup&&(a.config.scayt_inlineModeImmediateMarkup=!1);c.state.grayt[a.name]=a.config.grayt_autoStartup;a.config.scayt_contextCommands||(a.config.scayt_contextCommands=\"ignore|ignoreall|add\");a.config.scayt_contextMenuItemsOrder||(a.config.scayt_contextMenuItemsOrder=\"suggest|moresuggest|control\");a.config.scayt_sLang||\n(a.config.scayt_sLang=\"en_US\");if(void 0===a.config.scayt_maxSuggestions||\"number\"!=typeof a.config.scayt_maxSuggestions||0>a.config.scayt_maxSuggestions)a.config.scayt_maxSuggestions=5;if(void 0===a.config.scayt_minWordLength||\"number\"!=typeof a.config.scayt_minWordLength||1>a.config.scayt_minWordLength)a.config.scayt_minWordLength=4;if(void 0===a.config.scayt_customDictionaryIds||\"string\"!==typeof a.config.scayt_customDictionaryIds)a.config.scayt_customDictionaryIds=\"\";if(void 0===a.config.scayt_userDictionaryName||\n\"string\"!==typeof a.config.scayt_userDictionaryName)a.config.scayt_userDictionaryName=null;if(\"string\"===typeof a.config.scayt_uiTabs&&3===a.config.scayt_uiTabs.split(\",\").length){var d=[],b=[];a.config.scayt_uiTabs=a.config.scayt_uiTabs.split(\",\");CKEDITOR.tools.search(a.config.scayt_uiTabs,function(a){1===Number(a)||0===Number(a)?(b.push(!0),d.push(Number(a))):b.push(!1)});null===CKEDITOR.tools.search(b,!1)?a.config.scayt_uiTabs=d:a.config.scayt_uiTabs=[1,1,1]}else a.config.scayt_uiTabs=[1,1,1];\n\"string\"!=typeof a.config.scayt_serviceProtocol&&(a.config.scayt_serviceProtocol=null);\"string\"!=typeof a.config.scayt_serviceHost&&(a.config.scayt_serviceHost=null);\"string\"!=typeof a.config.scayt_servicePort&&(a.config.scayt_servicePort=null);\"string\"!=typeof a.config.scayt_servicePath&&(a.config.scayt_servicePath=null);a.config.scayt_moreSuggestions||(a.config.scayt_moreSuggestions=\"on\");\"string\"!==typeof a.config.scayt_customerId&&(a.config.scayt_customerId=\"1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2\");\n\"string\"!==typeof a.config.scayt_srcUrl&&(c=document.location.protocol,c=-1!=c.search(/https?:/)?c:\"http:\",a.config.scayt_srcUrl=c+\"//svc.webspellchecker.net/spellcheck31/lf/scayt3/ckscayt/ckscayt.js\");\"boolean\"!==typeof CKEDITOR.config.scayt_handleCheckDirty&&(CKEDITOR.config.scayt_handleCheckDirty=!0);\"boolean\"!==typeof CKEDITOR.config.scayt_handleUndoRedo&&(CKEDITOR.config.scayt_handleUndoRedo=!0);CKEDITOR.config.scayt_handleUndoRedo=CKEDITOR.plugins.undo?CKEDITOR.config.scayt_handleUndoRedo:!1;\n\"boolean\"!==typeof a.config.scayt_multiLanguageMode&&(a.config.scayt_multiLanguageMode=!1);\"object\"!==typeof a.config.scayt_multiLanguageStyles&&(a.config.scayt_multiLanguageStyles={});a.config.scayt_ignoreAllCapsWords&&\"boolean\"!==typeof a.config.scayt_ignoreAllCapsWords&&(a.config.scayt_ignoreAllCapsWords=!1);a.config.scayt_ignoreDomainNames&&\"boolean\"!==typeof a.config.scayt_ignoreDomainNames&&(a.config.scayt_ignoreDomainNames=!1);a.config.scayt_ignoreWordsWithMixedCases&&\"boolean\"!==typeof a.config.scayt_ignoreWordsWithMixedCases&&\n(a.config.scayt_ignoreWordsWithMixedCases=!1);a.config.scayt_ignoreWordsWithNumbers&&\"boolean\"!==typeof a.config.scayt_ignoreWordsWithNumbers&&(a.config.scayt_ignoreWordsWithNumbers=!1);if(a.config.scayt_disableOptionsStorage){var c=CKEDITOR.tools.isArray(a.config.scayt_disableOptionsStorage)?a.config.scayt_disableOptionsStorage:\"string\"===typeof a.config.scayt_disableOptionsStorage?[a.config.scayt_disableOptionsStorage]:void 0,e=\"all options lang ignore-all-caps-words ignore-domain-names ignore-words-with-mixed-cases ignore-words-with-numbers\".split(\" \"),\nf=[\"lang\",\"ignore-all-caps-words\",\"ignore-domain-names\",\"ignore-words-with-mixed-cases\",\"ignore-words-with-numbers\"],g=CKEDITOR.tools.search,h=CKEDITOR.tools.indexOf;a.config.scayt_disableOptionsStorage=function(a){for(var b=[],d=0;d<a.length;d++){var c=a[d],m=!!g(a,\"options\");if(!g(e,c)||m&&g(f,function(a){if(\"lang\"===a)return!1}))return;g(f,c)&&f.splice(h(f,c),1);if(\"all\"===c||m&&g(a,\"lang\"))return[];\"options\"===c&&(f=[\"lang\"])}return b=b.concat(f)}(c)}},addRule:function(a){var c=CKEDITOR.plugins.scayt,\nd=a.dataProcessor,b=d&&d.htmlFilter,e=a._.elementsPath&&a._.elementsPath.filters,d=d&&d.dataFilter,f=a.addRemoveFormatFilter,g=function(b){if(a.scayt&&(b.hasAttribute(c.options.data_attribute_name)||b.hasAttribute(c.options.problem_grammar_data_attribute)))return!1},h=function(b){var d=!0;a.scayt&&(b.hasAttribute(c.options.data_attribute_name)||b.hasAttribute(c.options.problem_grammar_data_attribute))&&(d=!1);return d};e&&e.push(g);d&&d.addRules({elements:{span:function(a){var b=a.hasClass(c.options.misspelled_word_class)&&\na.attributes[c.options.data_attribute_name],d=a.hasClass(c.options.problem_grammar_class)&&a.attributes[c.options.problem_grammar_data_attribute];c&&(b||d)&&delete a.name;return a}}});b&&b.addRules({elements:{span:function(a){var b=a.hasClass(c.options.misspelled_word_class)&&a.attributes[c.options.data_attribute_name],d=a.hasClass(c.options.problem_grammar_class)&&a.attributes[c.options.problem_grammar_data_attribute];c&&(b||d)&&delete a.name;return a}}});f&&f.call(a,h)},scaytMenuDefinition:function(a){var c=\nthis;a=a.scayt;return{scayt:{scayt_ignore:{label:a.getLocal(\"btn_ignore\"),group:\"scayt_control\",order:1,exec:function(a){a.scayt.ignoreWord()}},scayt_ignoreall:{label:a.getLocal(\"btn_ignoreAll\"),group:\"scayt_control\",order:2,exec:function(a){a.scayt.ignoreAllWords()}},scayt_add:{label:a.getLocal(\"btn_addWord\"),group:\"scayt_control\",order:3,exec:function(a){var b=a.scayt;setTimeout(function(){b.addWordToUserDictionary()},10)}},scayt_option:{label:a.getLocal(\"btn_options\"),group:\"scayt_control\",order:4,\nexec:function(a){a.scayt.tabToOpen=\"options\";a.lockSelection();a.openDialog(c.dialogName)},verification:function(a){return 1==a.config.scayt_uiTabs[0]?!0:!1}},scayt_language:{label:a.getLocal(\"btn_langs\"),group:\"scayt_control\",order:5,exec:function(a){a.scayt.tabToOpen=\"langs\";a.lockSelection();a.openDialog(c.dialogName)},verification:function(a){return 1==a.config.scayt_uiTabs[1]?!0:!1}},scayt_dictionary:{label:a.getLocal(\"btn_dictionaries\"),group:\"scayt_control\",order:6,exec:function(a){a.scayt.tabToOpen=\n\"dictionaries\";a.lockSelection();a.openDialog(c.dialogName)},verification:function(a){return 1==a.config.scayt_uiTabs[2]?!0:!1}},scayt_about:{label:a.getLocal(\"btn_about\"),group:\"scayt_control\",order:7,exec:function(a){a.scayt.tabToOpen=\"about\";a.lockSelection();a.openDialog(c.dialogName)}}},grayt:{grayt_problemdescription:{label:\"Grammar problem description\",group:\"grayt_description\",order:1,state:CKEDITOR.TRISTATE_DISABLED,exec:function(a){}},grayt_ignore:{label:a.getLocal(\"btn_ignore\"),group:\"grayt_control\",\norder:2,exec:function(a){a.scayt.ignorePhrase()}}}}},buildSuggestionMenuItems:function(a,c,d){var b={},e={},f=d?\"word\":\"phrase\",g=d?\"startGrammarCheck\":\"startSpellCheck\",h=a.scayt;if(0<c.length&&\"no_any_suggestions\"!==c[0])if(d)for(d=0;d<c.length;d++){var k=\"scayt_suggest_\"+CKEDITOR.plugins.scayt.suggestions[d].replace(\" \",\"_\");a.addCommand(k,this.createCommand(CKEDITOR.plugins.scayt.suggestions[d],f,g));d<a.config.scayt_maxSuggestions?(a.addMenuItem(k,{label:c[d],command:k,group:\"scayt_suggest\",\norder:d+1}),b[k]=CKEDITOR.TRISTATE_OFF):(a.addMenuItem(k,{label:c[d],command:k,group:\"scayt_moresuggest\",order:d+1}),e[k]=CKEDITOR.TRISTATE_OFF,\"on\"===a.config.scayt_moreSuggestions&&(a.addMenuItem(\"scayt_moresuggest\",{label:h.getLocal(\"btn_moreSuggestions\"),group:\"scayt_moresuggest\",order:10,getItems:function(){return e}}),b.scayt_moresuggest=CKEDITOR.TRISTATE_OFF))}else for(d=0;d<c.length;d++)k=\"grayt_suggest_\"+CKEDITOR.plugins.scayt.suggestions[d].replace(\" \",\"_\"),a.addCommand(k,this.createCommand(CKEDITOR.plugins.scayt.suggestions[d],\nf,g)),a.addMenuItem(k,{label:c[d],command:k,group:\"grayt_suggest\",order:d+1}),b[k]=CKEDITOR.TRISTATE_OFF;else b.no_scayt_suggest=CKEDITOR.TRISTATE_DISABLED,a.addCommand(\"no_scayt_suggest\",{exec:function(){}}),a.addMenuItem(\"no_scayt_suggest\",{label:h.getLocal(\"btn_noSuggestions\")||\"no_scayt_suggest\",command:\"no_scayt_suggest\",group:\"scayt_suggest\",order:0});return b},menuGenerator:function(a,c){var d=a.scayt,b=this.scaytMenuDefinition(a),e={},f=a.config.scayt_contextCommands.split(\"|\"),g=c.getAttribute(d.getLangAttribute())||\nd.getLang(),h,k;h=d.isScaytNode(c);k=d.isGraytNode(c);h?(b=b.scayt,e=c.getAttribute(d.getScaytNodeAttributeName()),d.fire(\"getSuggestionsList\",{lang:g,word:e}),e=this.buildSuggestionMenuItems(a,CKEDITOR.plugins.scayt.suggestions,h)):k&&(b=b.grayt,e=c.getAttribute(d.getGraytNodeAttributeName()),k=d.getProblemDescriptionText(e,g),b.grayt_problemdescription&&k&&(b.grayt_problemdescription.label=k),d.fire(\"getGrammarSuggestionsList\",{lang:g,phrase:e}),e=this.buildSuggestionMenuItems(a,CKEDITOR.plugins.scayt.suggestions,\nh));if(h&&\"off\"==a.config.scayt_contextCommands)return e;for(var l in b)h&&-1==CKEDITOR.tools.indexOf(f,l.replace(\"scayt_\",\"\"))&&\"all\"!=a.config.scayt_contextCommands||(e[l]=\"undefined\"!=typeof b[l].state?b[l].state:CKEDITOR.TRISTATE_OFF,\"function\"!==typeof b[l].verification||b[l].verification(a)||delete e[l],a.addCommand(l,{exec:b[l].exec}),a.addMenuItem(l,{label:a.lang.scayt[b[l].label]||b[l].label,command:l,group:b[l].group,order:b[l].order}));return e},createCommand:function(a,c,d){return{exec:function(b){b=\nb.scayt;var e={};e[c]=a;b.replaceSelectionNode(e);\"startGrammarCheck\"===d&&b.removeMarkupInSelectionNode({grammarOnly:!0});b.fire(d)}}}});\nCKEDITOR.plugins.scayt={state:{scayt:{},grayt:{}},suggestions:[],loadingHelper:{loadOrder:[]},isLoading:!1,options:{disablingCommandExec:{source:!0,newpage:!0,templates:!0},data_attribute_name:\"data-scayt-word\",misspelled_word_class:\"scayt-misspell-word\",problem_grammar_data_attribute:\"data-grayt-phrase\",problem_grammar_class:\"gramm-problem\"},backCompatibilityMap:{scayt_service_protocol:\"scayt_serviceProtocol\",scayt_service_host:\"scayt_serviceHost\",scayt_service_port:\"scayt_servicePort\",scayt_service_path:\"scayt_servicePath\",\nscayt_customerid:\"scayt_customerId\"},replaceOldOptionsNames:function(a){for(var c in a)c in this.backCompatibilityMap&&(a[this.backCompatibilityMap[c]]=a[c],delete a[c])},createScayt:function(a){var c=this,d=CKEDITOR.plugins.scayt;this.loadScaytLibrary(a,function(a){var e=a.window&&a.window.getFrame()||a.editable();e?(e={lang:a.config.scayt_sLang,container:e.$,customDictionary:a.config.scayt_customDictionaryIds,userDictionaryName:a.config.scayt_userDictionaryName,localization:a.langCode,customer_id:a.config.scayt_customerId,\ndebug:a.config.scayt_debug,data_attribute_name:c.options.data_attribute_name,misspelled_word_class:c.options.misspelled_word_class,problem_grammar_data_attribute:c.options.problem_grammar_data_attribute,problem_grammar_class:c.options.problem_grammar_class,\"options-to-restore\":a.config.scayt_disableOptionsStorage,focused:a.editable().hasFocus,ignoreElementsRegex:a.config.scayt_elementsToIgnore,minWordLength:a.config.scayt_minWordLength,multiLanguageMode:a.config.scayt_multiLanguageMode,multiLanguageStyles:a.config.scayt_multiLanguageStyles,\ngraytAutoStartup:d.state.grayt[a.name]},a.config.scayt_serviceProtocol&&(e.service_protocol=a.config.scayt_serviceProtocol),a.config.scayt_serviceHost&&(e.service_host=a.config.scayt_serviceHost),a.config.scayt_servicePort&&(e.service_port=a.config.scayt_servicePort),a.config.scayt_servicePath&&(e.service_path=a.config.scayt_servicePath),\"boolean\"===typeof a.config.scayt_ignoreAllCapsWords&&(e[\"ignore-all-caps-words\"]=a.config.scayt_ignoreAllCapsWords),\"boolean\"===typeof a.config.scayt_ignoreDomainNames&&\n(e[\"ignore-domain-names\"]=a.config.scayt_ignoreDomainNames),\"boolean\"===typeof a.config.scayt_ignoreWordsWithMixedCases&&(e[\"ignore-words-with-mixed-cases\"]=a.config.scayt_ignoreWordsWithMixedCases),\"boolean\"===typeof a.config.scayt_ignoreWordsWithNumbers&&(e[\"ignore-words-with-numbers\"]=a.config.scayt_ignoreWordsWithNumbers),e=new SCAYT.CKSCAYT(e,function(){},function(){}),e.subscribe(\"suggestionListSend\",function(a){for(var b={},d=[],c=0;c<a.suggestionList.length;c++)b[\"word_\"+a.suggestionList[c]]||\n(b[\"word_\"+a.suggestionList[c]]=a.suggestionList[c],d.push(a.suggestionList[c]));CKEDITOR.plugins.scayt.suggestions=d}),e.subscribe(\"selectionIsChanged\",function(d){a.getSelection().isLocked&&a.lockSelection()}),e.subscribe(\"graytStateChanged\",function(c){d.state.grayt[a.name]=c.state}),a.scayt=e,a.fire(\"scaytButtonState\",a.readOnly?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_ON)):d.state.scayt[a.name]=!1})},destroy:function(a){a.scayt&&a.scayt.destroy();delete a.scayt;a.fire(\"scaytButtonState\",\nCKEDITOR.TRISTATE_OFF)},loadScaytLibrary:function(a,c){var d=this,b,e;this.loadingHelper[a.name]||(\"undefined\"===typeof window.SCAYT||\"function\"!==typeof window.SCAYT.CKSCAYT?(this.loadingHelper[a.name]=c,this.loadingHelper.loadOrder.push(a.name),b=new Date,b=b.getTime(),e=a.config.scayt_srcUrl,e+=0<=e.indexOf(\"?\")?\"\":\"?\"+b,this.loadingHelper.ckscaytLoading||(CKEDITOR.scriptLoader.load(e,function(a){if(a){CKEDITOR.fireOnce(\"scaytReady\");for(var b=0;b<d.loadingHelper.loadOrder.length;b++){a=d.loadingHelper.loadOrder[b];\nif(\"function\"===typeof d.loadingHelper[a])d.loadingHelper[a](CKEDITOR.instances[a]);delete d.loadingHelper[a]}d.loadingHelper.loadOrder=[]}}),this.loadingHelper.ckscaytLoading=!0)):window.SCAYT&&\"function\"===typeof window.SCAYT.CKSCAYT&&(CKEDITOR.fireOnce(\"scaytReady\"),a.scayt||\"function\"===typeof c&&c(a)))}};\nCKEDITOR.on(\"dialogDefinition\",function(a){var c=a.data.name;a=a.data.definition.dialog;if(\"scaytDialog\"===c)a.on(\"cancel\",function(a){return!1},this,null,-1);if(\"checkspell\"===c)a.on(\"cancel\",function(a){a=a.sender&&a.sender.getParentEditor();var b=CKEDITOR.plugins.scayt,c=a.scayt;c&&b.state.scayt[a.name]&&c.setMarkupPaused&&c.setMarkupPaused(!1);a.unlockSelection()},this,null,-2);if(\"link\"===c)a.on(\"ok\",function(a){var b=a.sender&&a.sender.getParentEditor();b&&setTimeout(function(){b.fire(\"reloadMarkupScayt\",\n{removeOptions:{removeInside:!0,forceBookmark:!0},timeout:0})},0)})});\nCKEDITOR.on(\"scaytReady\",function(){if(!0===CKEDITOR.config.scayt_handleCheckDirty){var a=CKEDITOR.editor.prototype;a.checkDirty=CKEDITOR.tools.override(a.checkDirty,function(a){return function(){var b=null,c=this.scayt;if(CKEDITOR.plugins.scayt&&CKEDITOR.plugins.scayt.state.scayt[this.name]&&this.scayt){if(b=\"ready\"==this.status)var f=c.removeMarkupFromString(this.getSnapshot()),c=c.removeMarkupFromString(this._.previousValue),b=b&&c!==f}else b=a.call(this);return b}});a.resetDirty=CKEDITOR.tools.override(a.resetDirty,\nfunction(a){return function(){var b=this.scayt;CKEDITOR.plugins.scayt&&CKEDITOR.plugins.scayt.state.scayt[this.name]&&this.scayt?this._.previousValue=b.removeMarkupFromString(this.getSnapshot()):a.call(this)}})}if(!0===CKEDITOR.config.scayt_handleUndoRedo){var a=CKEDITOR.plugins.undo.Image.prototype,c=\"function\"==typeof a.equalsContent?\"equalsContent\":\"equals\";a[c]=CKEDITOR.tools.override(a[c],function(a){return function(b){var c=b.editor.scayt,f=this.contents,g=b.contents,h=null;CKEDITOR.plugins.scayt&&\nCKEDITOR.plugins.scayt.state.scayt[b.editor.name]&&b.editor.scayt&&(this.contents=c.removeMarkupFromString(f)||\"\",b.contents=c.removeMarkupFromString(g)||\"\");h=a.apply(this,arguments);this.contents=f;b.contents=g;return h}})}});(function(){CKEDITOR.plugins.add(\"stylescombo\",{requires:\"richcombo\",init:function(c){var l=c.config,g=c.lang.stylescombo,f={},k=[],m=[];c.on(\"stylesSet\",function(b){if(b=b.data.styles){for(var a,h,d,e=0,n=b.length;e<n;e++)(a=b[e],c.blockless&&a.element in CKEDITOR.dtd.$block||(h=a.name,a=new CKEDITOR.style(a),c.filter.customConfig&&!c.filter.check(a)))||(a._name=h,a._.enterMode=l.enterMode,a._.type=d=a.assignedTo||a.type,a._.weight=e+1E3*(d==CKEDITOR.STYLE_OBJECT?1:d==CKEDITOR.STYLE_BLOCK?2:3),f[h]=\na,k.push(a),m.push(a));k.sort(function(a,b){return a._.weight-b._.weight})}});c.ui.addRichCombo(\"Styles\",{label:g.label,title:g.panelTitle,toolbar:\"styles,10\",allowedContent:m,panel:{css:[CKEDITOR.skin.getPath(\"editor\")].concat(l.contentsCss),multiSelect:!0,attributes:{\"aria-label\":g.panelTitle}},init:function(){var b,a,c,d,e,f;e=0;for(f=k.length;e<f;e++)b=k[e],a=b._name,d=b._.type,d!=c&&(this.startGroup(g[\"panelTitle\"+String(d)]),c=d),this.add(a,b.type==CKEDITOR.STYLE_OBJECT?a:b.buildPreview(),a);\nthis.commit()},onClick:function(b){c.focus();c.fire(\"saveSnapshot\");b=f[b];var a=c.elementPath();c[b.checkActive(a,c)?\"removeStyle\":\"applyStyle\"](b);c.fire(\"saveSnapshot\")},onRender:function(){c.on(\"selectionChange\",function(b){var a=this.getValue();b=b.data.path.elements;for(var h=0,d=b.length,e;h<d;h++){e=b[h];for(var g in f)if(f[g].checkElementRemovable(e,!0,c)){g!=a&&this.setValue(g);return}}this.setValue(\"\")},this)},onOpen:function(){var b=c.getSelection().getSelectedElement(),b=c.elementPath(b),\na=[0,0,0,0];this.showAll();this.unmarkAll();for(var h in f){var d=f[h],e=d._.type;d.checkApplicable(b,c,c.activeFilter)?a[e]++:this.hideItem(h);d.checkActive(b,c)&&this.mark(h)}a[CKEDITOR.STYLE_BLOCK]||this.hideGroup(g[\"panelTitle\"+String(CKEDITOR.STYLE_BLOCK)]);a[CKEDITOR.STYLE_INLINE]||this.hideGroup(g[\"panelTitle\"+String(CKEDITOR.STYLE_INLINE)]);a[CKEDITOR.STYLE_OBJECT]||this.hideGroup(g[\"panelTitle\"+String(CKEDITOR.STYLE_OBJECT)])},refresh:function(){var b=c.elementPath();if(b){for(var a in f)if(f[a].checkApplicable(b,\nc,c.activeFilter))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}},reset:function(){f={};k=[]}})}})})();(function(){function k(c){return{editorFocus:!1,canUndo:!1,modes:{wysiwyg:1},exec:function(d){if(d.editable().hasFocus){var e=d.getSelection(),b;if(b=(new CKEDITOR.dom.elementPath(e.getCommonAncestor(),e.root)).contains({td:1,th:1},1)){var e=d.createRange(),a=CKEDITOR.tools.tryThese(function(){var a=b.getParent().$.cells[b.$.cellIndex+(c?-1:1)];a.parentNode.parentNode;return a},function(){var a=b.getParent(),a=a.getAscendant(\"table\").$.rows[a.$.rowIndex+(c?-1:1)];return a.cells[c?a.cells.length-1:\n0]});if(a||c)if(a)a=new CKEDITOR.dom.element(a),e.moveToElementEditStart(a),e.checkStartOfBlock()&&e.checkEndOfBlock()||e.selectNodeContents(a);else return!0;else{for(var f=b.getAscendant(\"table\").$,a=b.getParent().$.cells,f=new CKEDITOR.dom.element(f.insertRow(-1),d.document),g=0,h=a.length;g<h;g++)f.append((new CKEDITOR.dom.element(a[g],d.document)).clone(!1,!1)).appendBogus();e.moveToElementEditStart(f)}e.select(!0);return!0}}return!1}}}var h={editorFocus:!1,modes:{wysiwyg:1,source:1}},g={exec:function(c){c.container.focusNext(!0,\nc.tabIndex)}},f={exec:function(c){c.container.focusPrevious(!0,c.tabIndex)}};CKEDITOR.plugins.add(\"tab\",{init:function(c){for(var d=!1!==c.config.enableTabKeyTools,e=c.config.tabSpaces||0,b=\"\";e--;)b+=\" \";if(b)c.on(\"key\",function(a){9==a.data.keyCode&&(c.insertText(b),a.cancel())});if(d)c.on(\"key\",function(a){(9==a.data.keyCode&&c.execCommand(\"selectNextCell\")||a.data.keyCode==CKEDITOR.SHIFT+9&&c.execCommand(\"selectPreviousCell\"))&&a.cancel()});c.addCommand(\"blur\",CKEDITOR.tools.extend(g,h));c.addCommand(\"blurBack\",\nCKEDITOR.tools.extend(f,h));c.addCommand(\"selectNextCell\",k());c.addCommand(\"selectPreviousCell\",k(!0))}})})();\nCKEDITOR.dom.element.prototype.focusNext=function(k,h){var g=void 0===h?this.getTabIndex():h,f,c,d,e,b,a;if(0>=g)for(b=this.getNextSourceNode(k,CKEDITOR.NODE_ELEMENT);b;){if(b.isVisible()&&0===b.getTabIndex()){d=b;break}b=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT)}else for(b=this.getDocument().getBody().getFirst();b=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!f)if(!c&&b.equals(this)){if(c=!0,k){if(!(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;f=1}}else c&&!this.contains(b)&&\n(f=1);if(b.isVisible()&&!(0>(a=b.getTabIndex()))){if(f&&a==g){d=b;break}a>g&&(!d||!e||a<e)?(d=b,e=a):d||0!==a||(d=b,e=a)}}d&&d.focus()};\nCKEDITOR.dom.element.prototype.focusPrevious=function(k,h){for(var g=void 0===h?this.getTabIndex():h,f,c,d,e=0,b,a=this.getDocument().getBody().getLast();a=a.getPreviousSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!f)if(!c&&a.equals(this)){if(c=!0,k){if(!(a=a.getPreviousSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;f=1}}else c&&!this.contains(a)&&(f=1);if(a.isVisible()&&!(0>(b=a.getTabIndex())))if(0>=g){if(f&&0===b){d=a;break}b>e&&(d=a,e=b)}else{if(f&&b==g){d=a;break}b<g&&(!d||b>e)&&(d=a,e=b)}}d&&d.focus()};CKEDITOR.plugins.add(\"table\",{requires:\"dialog\",init:function(a){function e(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,f){this.setState(f.contains(\"table\",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!a.blockless){var c=a.lang.table;a.addCommand(\"table\",new CKEDITOR.dialogCommand(\"table\",{context:\"table\",allowedContent:\"table{width,height}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];\"+(a.plugins.dialogadvtab?\n\"table\"+a.plugins.dialogadvtab.allowedContent():\"\"),requiredContent:\"table\",contentTransformations:[[\"table{width}: sizeToStyle\",\"table[width]: sizeToAttribute\"]]}));a.addCommand(\"tableProperties\",new CKEDITOR.dialogCommand(\"tableProperties\",e()));a.addCommand(\"tableDelete\",e({exec:function(a){var b=a.elementPath().contains(\"table\",1);if(b){var d=b.getParent(),c=a.editable();1!=d.getChildCount()||d.is(\"td\",\"th\")||d.equals(c)||(b=d);a=a.createRange();a.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START);\nb.remove();a.select()}}}));a.ui.addButton&&a.ui.addButton(\"Table\",{label:c.toolbar,command:\"table\",toolbar:\"insert,30\"});CKEDITOR.dialog.add(\"table\",this.path+\"dialogs/table.js\");CKEDITOR.dialog.add(\"tableProperties\",this.path+\"dialogs/table.js\");a.addMenuItems&&a.addMenuItems({table:{label:c.menu,command:\"tableProperties\",group:\"table\",order:5},tabledelete:{label:c.deleteTable,command:\"tableDelete\",group:\"table\",order:1}});a.on(\"doubleclick\",function(a){a.data.element.is(\"table\")&&(a.data.dialog=\n\"tableProperties\")});a.contextMenu&&a.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}});(function(){function t(e){function d(a){0<b.length||a.type!=CKEDITOR.NODE_ELEMENT||!C.test(a.getName())||a.getCustomData(\"selected_cell\")||(CKEDITOR.dom.element.setMarker(c,a,\"selected_cell\",!0),b.push(a))}e=e.getRanges();for(var b=[],c={},a=0;a<e.length;a++){var f=e[a];if(f.collapsed)f=f.getCommonAncestor(),(f=f.getAscendant(\"td\",!0)||f.getAscendant(\"th\",!0))&&b.push(f);else{var f=new CKEDITOR.dom.walker(f),g;for(f.guard=d;g=f.next();)g.type==CKEDITOR.NODE_ELEMENT&&g.is(CKEDITOR.dtd.table)||(g=g.getAscendant(\"td\",\n!0)||g.getAscendant(\"th\",!0))&&!g.getCustomData(\"selected_cell\")&&(CKEDITOR.dom.element.setMarker(c,g,\"selected_cell\",!0),b.push(g))}}CKEDITOR.dom.element.clearAllMarkers(c);return b}function p(e,d){for(var b=t(e),c=b[0],a=c.getAscendant(\"table\"),c=c.getDocument(),f=b[0].getParent(),g=f.$.rowIndex,b=b[b.length-1],h=b.getParent().$.rowIndex+b.$.rowSpan-1,b=new CKEDITOR.dom.element(a.$.rows[h]),g=d?g:h,f=d?f:b,b=CKEDITOR.tools.buildTableMap(a),a=b[g],g=d?b[g-1]:b[g+1],b=b[0].length,c=c.createElement(\"tr\"),\nh=0;a[h]&&h<b;h++){var k;1<a[h].rowSpan&&g&&a[h]==g[h]?(k=a[h],k.rowSpan+=1):(k=(new CKEDITOR.dom.element(a[h])).clone(),k.removeAttribute(\"rowSpan\"),k.appendBogus(),c.append(k),k=k.$);h+=k.colSpan-1}d?c.insertBefore(f):c.insertAfter(f)}function u(e){if(e instanceof CKEDITOR.dom.selection){var d=t(e),b=d[0].getAscendant(\"table\"),c=CKEDITOR.tools.buildTableMap(b);e=d[0].getParent().$.rowIndex;for(var d=d[d.length-1],a=d.getParent().$.rowIndex+d.$.rowSpan-1,d=[],f=e;f<=a;f++){for(var g=c[f],h=new CKEDITOR.dom.element(b.$.rows[f]),\nk=0;k<g.length;k++){var l=new CKEDITOR.dom.element(g[k]),n=l.getParent().$.rowIndex;1==l.$.rowSpan?l.remove():(--l.$.rowSpan,n==f&&(n=c[f+1],n[k-1]?l.insertAfter(new CKEDITOR.dom.element(n[k-1])):(new CKEDITOR.dom.element(b.$.rows[f+1])).append(l,1)));k+=l.$.colSpan-1}d.push(h)}c=b.$.rows;b=new CKEDITOR.dom.element(c[a+1]||(0<e?c[e-1]:null)||b.$.parentNode);for(f=d.length;0<=f;f--)u(d[f]);return b}e instanceof CKEDITOR.dom.element&&(b=e.getAscendant(\"table\"),1==b.$.rows.length?b.remove():e.remove());\nreturn null}function v(e,d){for(var b=d?Infinity:0,c=0;c<e.length;c++){var a;a=e[c];for(var f=d,g=a.getParent().$.cells,h=0,k=0;k<g.length;k++){var l=g[k],h=h+(f?1:l.colSpan);if(l==a.$)break}a=h-1;if(d?a<b:a>b)b=a}return b}function m(e,d){for(var b=t(e),c=b[0].getAscendant(\"table\"),a=v(b,1),b=v(b),a=d?a:b,f=CKEDITOR.tools.buildTableMap(c),c=[],b=[],g=f.length,h=0;h<g;h++)c.push(f[h][a]),b.push(d?f[h][a-1]:f[h][a+1]);for(h=0;h<g;h++)c[h]&&(1<c[h].colSpan&&b[h]==c[h]?(a=c[h],a.colSpan+=1):(a=(new CKEDITOR.dom.element(c[h])).clone(),\na.removeAttribute(\"colSpan\"),a.appendBogus(),a[d?\"insertBefore\":\"insertAfter\"].call(a,new CKEDITOR.dom.element(c[h])),a=a.$),h+=a.rowSpan-1)}function y(e,d){var b=e.getStartElement();if(b=b.getAscendant(\"td\",1)||b.getAscendant(\"th\",1)){var c=b.clone();c.appendBogus();d?c.insertBefore(b):c.insertAfter(b)}}function x(e){if(e instanceof CKEDITOR.dom.selection){e=t(e);var d=e[0]&&e[0].getAscendant(\"table\"),b;a:{var c=0;b=e.length-1;for(var a={},f,g;f=e[c++];)CKEDITOR.dom.element.setMarker(a,f,\"delete_cell\",\n!0);for(c=0;f=e[c++];)if((g=f.getPrevious())&&!g.getCustomData(\"delete_cell\")||(g=f.getNext())&&!g.getCustomData(\"delete_cell\")){CKEDITOR.dom.element.clearAllMarkers(a);b=g;break a}CKEDITOR.dom.element.clearAllMarkers(a);g=e[0].getParent();(g=g.getPrevious())?b=g.getLast():(g=e[b].getParent(),b=(g=g.getNext())?g.getChild(0):null)}for(g=e.length-1;0<=g;g--)x(e[g]);b?q(b,!0):d&&d.remove()}else e instanceof CKEDITOR.dom.element&&(d=e.getParent(),1==d.getChildCount()?d.remove():e.remove())}function q(e,\nd){var b=e.getDocument(),c=CKEDITOR.document;CKEDITOR.env.ie&&10==CKEDITOR.env.version&&(c.focus(),b.focus());b=new CKEDITOR.dom.range(b);b[\"moveToElementEdit\"+(d?\"End\":\"Start\")](e)||(b.selectNodeContents(e),b.collapse(d?!1:!0));b.select(!0)}function z(e,d,b){e=e[d];if(\"undefined\"==typeof b)return e;for(d=0;e&&d<e.length;d++){if(b.is&&e[d]==b.$)return d;if(d==b)return new CKEDITOR.dom.element(e[d])}return b.is?-1:null}function w(e,d,b){var c=t(e),a;if((d?1!=c.length:2>c.length)||(a=e.getCommonAncestor())&&\na.type==CKEDITOR.NODE_ELEMENT&&a.is(\"table\"))return!1;var f;e=c[0];a=e.getAscendant(\"table\");var g=CKEDITOR.tools.buildTableMap(a),h=g.length,k=g[0].length,l=e.getParent().$.rowIndex,n=z(g,l,e);if(d){var r;try{var q=parseInt(e.getAttribute(\"rowspan\"),10)||1;f=parseInt(e.getAttribute(\"colspan\"),10)||1;r=g[\"up\"==d?l-q:\"down\"==d?l+q:l][\"left\"==d?n-f:\"right\"==d?n+f:n]}catch(D){return!1}if(!r||e.$==r)return!1;c[\"up\"==d||\"left\"==d?\"unshift\":\"push\"](new CKEDITOR.dom.element(r))}d=e.getDocument();var p=l,\nq=r=0,u=!b&&new CKEDITOR.dom.documentFragment(d),w=0;for(d=0;d<c.length;d++){f=c[d];var m=f.getParent(),x=f.getFirst(),v=f.$.colSpan,y=f.$.rowSpan,m=m.$.rowIndex,A=z(g,m,f),w=w+v*y,q=Math.max(q,A-n+v);r=Math.max(r,m-l+y);b||(v=f,(y=v.getBogus())&&y.remove(),v.trim(),f.getChildren().count()&&(m==p||!x||x.isBlockBoundary&&x.isBlockBoundary({br:1})||(p=u.getLast(CKEDITOR.dom.walker.whitespaces(!0)),!p||p.is&&p.is(\"br\")||u.append(\"br\")),f.moveChildren(u)),d?f.remove():f.setHtml(\"\"));p=m}if(b)return r*\nq==w;u.moveChildren(e);e.appendBogus();q>=k?e.removeAttribute(\"rowSpan\"):e.$.rowSpan=r;r>=h?e.removeAttribute(\"colSpan\"):e.$.colSpan=q;b=new CKEDITOR.dom.nodeList(a.$.rows);c=b.count();for(d=c-1;0<=d;d--)a=b.getItem(d),a.$.cells.length||(a.remove(),c++);return e}function A(e,d){var b=t(e);if(1<b.length)return!1;if(d)return!0;var b=b[0],c=b.getParent(),a=c.getAscendant(\"table\"),f=CKEDITOR.tools.buildTableMap(a),g=c.$.rowIndex,h=z(f,g,b),k=b.$.rowSpan,l;if(1<k){l=Math.ceil(k/2);for(var k=Math.floor(k/\n2),c=g+l,a=new CKEDITOR.dom.element(a.$.rows[c]),f=z(f,c),n,c=b.clone(),g=0;g<f.length;g++)if(n=f[g],n.parentNode==a.$&&g>h){c.insertBefore(new CKEDITOR.dom.element(n));break}else n=null;n||a.append(c)}else for(k=l=1,a=c.clone(),a.insertAfter(c),a.append(c=b.clone()),n=z(f,g),h=0;h<n.length;h++)n[h].rowSpan++;c.appendBogus();b.$.rowSpan=l;c.$.rowSpan=k;1==l&&b.removeAttribute(\"rowSpan\");1==k&&c.removeAttribute(\"rowSpan\");return c}function B(e,d){var b=t(e);if(1<b.length)return!1;if(d)return!0;var b=\nb[0],c=b.getParent(),a=c.getAscendant(\"table\"),a=CKEDITOR.tools.buildTableMap(a),f=z(a,c.$.rowIndex,b),g=b.$.colSpan;if(1<g)c=Math.ceil(g/2),g=Math.floor(g/2);else{for(var g=c=1,h=[],k=0;k<a.length;k++){var l=a[k];h.push(l[f]);1<l[f].rowSpan&&(k+=l[f].rowSpan-1)}for(a=0;a<h.length;a++)h[a].colSpan++}a=b.clone();a.insertAfter(b);a.appendBogus();b.$.colSpan=c;a.$.colSpan=g;1==c&&b.removeAttribute(\"colSpan\");1==g&&a.removeAttribute(\"colSpan\");return a}var C=/^(?:td|th)$/;CKEDITOR.plugins.tabletools=\n{requires:\"table,dialog,contextmenu\",init:function(e){function d(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains({td:1,th:1},1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}function b(a,b){var c=e.addCommand(a,b);e.addFeature(c)}var c=e.lang.table;b(\"cellProperties\",new CKEDITOR.dialogCommand(\"cellProperties\",d({allowedContent:\"td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]\",\nrequiredContent:\"table\"})));CKEDITOR.dialog.add(\"cellProperties\",this.path+\"dialogs/tableCell.js\");b(\"rowDelete\",d({requiredContent:\"table\",exec:function(a){a=a.getSelection();q(u(a))}}));b(\"rowInsertBefore\",d({requiredContent:\"table\",exec:function(a){a=a.getSelection();p(a,!0)}}));b(\"rowInsertAfter\",d({requiredContent:\"table\",exec:function(a){a=a.getSelection();p(a)}}));b(\"columnDelete\",d({requiredContent:\"table\",exec:function(a){a=a.getSelection();a=t(a);var b=a[0],c=a[a.length-1];a=b.getAscendant(\"table\");\nfor(var d=CKEDITOR.tools.buildTableMap(a),e,l,n=[],r=0,p=d.length;r<p;r++)for(var m=0,u=d[r].length;m<u;m++)d[r][m]==b.$&&(e=m),d[r][m]==c.$&&(l=m);for(r=e;r<=l;r++)for(m=0;m<d.length;m++)c=d[m],b=new CKEDITOR.dom.element(a.$.rows[m]),c=new CKEDITOR.dom.element(c[r]),c.$&&(1==c.$.colSpan?c.remove():--c.$.colSpan,m+=c.$.rowSpan-1,b.$.cells.length||n.push(b));l=a.$.rows[0]&&a.$.rows[0].cells;e=new CKEDITOR.dom.element(l[e]||(e?l[e-1]:a.$.parentNode));n.length==p&&a.remove();e&&q(e,!0)}}));b(\"columnInsertBefore\",\nd({requiredContent:\"table\",exec:function(a){a=a.getSelection();m(a,!0)}}));b(\"columnInsertAfter\",d({requiredContent:\"table\",exec:function(a){a=a.getSelection();m(a)}}));b(\"cellDelete\",d({requiredContent:\"table\",exec:function(a){a=a.getSelection();x(a)}}));b(\"cellMerge\",d({allowedContent:\"td[colspan,rowspan]\",requiredContent:\"td[colspan,rowspan]\",exec:function(a){q(w(a.getSelection()),!0)}}));b(\"cellMergeRight\",d({allowedContent:\"td[colspan]\",requiredContent:\"td[colspan]\",exec:function(a){q(w(a.getSelection(),\n\"right\"),!0)}}));b(\"cellMergeDown\",d({allowedContent:\"td[rowspan]\",requiredContent:\"td[rowspan]\",exec:function(a){q(w(a.getSelection(),\"down\"),!0)}}));b(\"cellVerticalSplit\",d({allowedContent:\"td[rowspan]\",requiredContent:\"td[rowspan]\",exec:function(a){q(B(a.getSelection()))}}));b(\"cellHorizontalSplit\",d({allowedContent:\"td[colspan]\",requiredContent:\"td[colspan]\",exec:function(a){q(A(a.getSelection()))}}));b(\"cellInsertBefore\",d({requiredContent:\"table\",exec:function(a){a=a.getSelection();y(a,!0)}}));\nb(\"cellInsertAfter\",d({requiredContent:\"table\",exec:function(a){a=a.getSelection();y(a)}}));e.addMenuItems&&e.addMenuItems({tablecell:{label:c.cell.menu,group:\"tablecell\",order:1,getItems:function(){var a=e.getSelection(),b=t(a);return{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:w(a,null,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:w(a,\"right\",!0)?CKEDITOR.TRISTATE_OFF:\nCKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:w(a,\"down\",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:B(a,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_horizontal:A(a,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_properties:0<b.length?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED}}},tablecell_insertBefore:{label:c.cell.insertBefore,group:\"tablecell\",command:\"cellInsertBefore\",order:5},tablecell_insertAfter:{label:c.cell.insertAfter,\ngroup:\"tablecell\",command:\"cellInsertAfter\",order:10},tablecell_delete:{label:c.cell.deleteCell,group:\"tablecell\",command:\"cellDelete\",order:15},tablecell_merge:{label:c.cell.merge,group:\"tablecell\",command:\"cellMerge\",order:16},tablecell_merge_right:{label:c.cell.mergeRight,group:\"tablecell\",command:\"cellMergeRight\",order:17},tablecell_merge_down:{label:c.cell.mergeDown,group:\"tablecell\",command:\"cellMergeDown\",order:18},tablecell_split_horizontal:{label:c.cell.splitHorizontal,group:\"tablecell\",\ncommand:\"cellHorizontalSplit\",order:19},tablecell_split_vertical:{label:c.cell.splitVertical,group:\"tablecell\",command:\"cellVerticalSplit\",order:20},tablecell_properties:{label:c.cell.title,group:\"tablecellproperties\",command:\"cellProperties\",order:21},tablerow:{label:c.row.menu,group:\"tablerow\",order:1,getItems:function(){return{tablerow_insertBefore:CKEDITOR.TRISTATE_OFF,tablerow_insertAfter:CKEDITOR.TRISTATE_OFF,tablerow_delete:CKEDITOR.TRISTATE_OFF}}},tablerow_insertBefore:{label:c.row.insertBefore,\ngroup:\"tablerow\",command:\"rowInsertBefore\",order:5},tablerow_insertAfter:{label:c.row.insertAfter,group:\"tablerow\",command:\"rowInsertAfter\",order:10},tablerow_delete:{label:c.row.deleteRow,group:\"tablerow\",command:\"rowDelete\",order:15},tablecolumn:{label:c.column.menu,group:\"tablecolumn\",order:1,getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF,tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,tablecolumn_delete:CKEDITOR.TRISTATE_OFF}}},tablecolumn_insertBefore:{label:c.column.insertBefore,\ngroup:\"tablecolumn\",command:\"columnInsertBefore\",order:5},tablecolumn_insertAfter:{label:c.column.insertAfter,group:\"tablecolumn\",command:\"columnInsertAfter\",order:10},tablecolumn_delete:{label:c.column.deleteColumn,group:\"tablecolumn\",command:\"columnDelete\",order:15}});e.contextMenu&&e.contextMenu.addListener(function(a,b,c){return(a=c.contains({td:1,th:1},1))&&!a.isReadOnly()?{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF}:null})},getSelectedCells:t};\nCKEDITOR.plugins.add(\"tabletools\",CKEDITOR.plugins.tabletools)})();CKEDITOR.tools.buildTableMap=function(t){t=t.$.rows;for(var p=-1,u=[],v=0;v<t.length;v++){p++;!u[p]&&(u[p]=[]);for(var m=-1,y=0;y<t[v].cells.length;y++){var x=t[v].cells[y];for(m++;u[p][m];)m++;for(var q=isNaN(x.colSpan)?1:x.colSpan,x=isNaN(x.rowSpan)?1:x.rowSpan,z=0;z<x;z++){u[p+z]||(u[p+z]=[]);for(var w=0;w<q;w++)u[p+z][m+w]=t[v].cells[y]}m+=q-1}}return u};(function(){var g=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],n={8:1,46:1};CKEDITOR.plugins.add(\"undo\",{init:function(a){function b(a){d.enabled&&!1!==a.data.command.canUndo&&d.save()}function c(){d.enabled=a.readOnly?!1:\"wysiwyg\"==a.mode;d.onChange()}var d=a.undoManager=new e(a),l=d.editingHandler=new k(d),f=a.addCommand(\"undo\",{exec:function(){d.undo()&&(a.selectionChange(),this.fire(\"afterUndo\"))},startDisabled:!0,canUndo:!1}),h=a.addCommand(\"redo\",{exec:function(){d.redo()&&\n(a.selectionChange(),this.fire(\"afterRedo\"))},startDisabled:!0,canUndo:!1});a.setKeystroke([[g[0],\"undo\"],[g[1],\"redo\"],[g[2],\"redo\"]]);d.onChange=function(){f.setState(d.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);h.setState(d.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)};a.on(\"beforeCommandExec\",b);a.on(\"afterCommandExec\",b);a.on(\"saveSnapshot\",function(a){d.save(a.data&&a.data.contentOnly)});a.on(\"contentDom\",l.attachListeners,l);a.on(\"instanceReady\",function(){a.fire(\"saveSnapshot\")});\na.on(\"beforeModeUnload\",function(){\"wysiwyg\"==a.mode&&d.save(!0)});a.on(\"mode\",c);a.on(\"readOnly\",c);a.ui.addButton&&(a.ui.addButton(\"Undo\",{label:a.lang.undo.undo,command:\"undo\",toolbar:\"undo,10\"}),a.ui.addButton(\"Redo\",{label:a.lang.undo.redo,command:\"redo\",toolbar:\"undo,20\"}));a.resetUndo=function(){d.reset();a.fire(\"saveSnapshot\")};a.on(\"updateSnapshot\",function(){d.currentImage&&d.update()});a.on(\"lockSnapshot\",function(a){a=a.data;d.lock(a&&a.dontUpdate,a&&a.forceUpdate)});a.on(\"unlockSnapshot\",\nd.unlock,d)}});CKEDITOR.plugins.undo={};var e=CKEDITOR.plugins.undo.UndoManager=function(a){this.strokesRecorded=[0,0];this.locked=null;this.previousKeyGroup=-1;this.limit=a.config.undoStackSize||20;this.strokesLimit=25;this.editor=a;this.reset()};e.prototype={type:function(a,b){var c=e.getKeyGroup(a),d=this.strokesRecorded[c]+1;b=b||d>=this.strokesLimit;this.typing||(this.hasUndo=this.typing=!0,this.hasRedo=!1,this.onChange());b?(d=0,this.editor.fire(\"saveSnapshot\")):this.editor.fire(\"change\");this.strokesRecorded[c]=\nd;this.previousKeyGroup=c},keyGroupChanged:function(a){return e.getKeyGroup(a)!=this.previousKeyGroup},reset:function(){this.snapshots=[];this.index=-1;this.currentImage=null;this.hasRedo=this.hasUndo=!1;this.locked=null;this.resetType()},resetType:function(){this.strokesRecorded=[0,0];this.typing=!1;this.previousKeyGroup=-1},refreshState:function(){this.hasUndo=!!this.getNextImage(!0);this.hasRedo=!!this.getNextImage(!1);this.resetType();this.onChange()},save:function(a,b,c){var d=this.editor;if(this.locked||\n\"ready\"!=d.status||\"wysiwyg\"!=d.mode)return!1;var e=d.editable();if(!e||\"ready\"!=e.status)return!1;e=this.snapshots;b||(b=new f(d));if(!1===b.contents)return!1;if(this.currentImage)if(b.equalsContent(this.currentImage)){if(a||b.equalsSelection(this.currentImage))return!1}else!1!==c&&d.fire(\"change\");e.splice(this.index+1,e.length-this.index-1);e.length==this.limit&&e.shift();this.index=e.push(b)-1;this.currentImage=b;!1!==c&&this.refreshState();return!0},restoreImage:function(a){var b=this.editor,\nc;a.bookmarks&&(b.focus(),c=b.getSelection());this.locked={level:999};this.editor.loadSnapshot(a.contents);a.bookmarks?c.selectBookmarks(a.bookmarks):CKEDITOR.env.ie&&(c=this.editor.document.getBody().$.createTextRange(),c.collapse(!0),c.select());this.locked=null;this.index=a.index;this.currentImage=this.snapshots[this.index];this.update();this.refreshState();b.fire(\"change\")},getNextImage:function(a){var b=this.snapshots,c=this.currentImage,d;if(c)if(a)for(d=this.index-1;0<=d;d--){if(a=b[d],!c.equalsContent(a))return a.index=\nd,a}else for(d=this.index+1;d<b.length;d++)if(a=b[d],!c.equalsContent(a))return a.index=d,a;return null},redoable:function(){return this.enabled&&this.hasRedo},undoable:function(){return this.enabled&&this.hasUndo},undo:function(){if(this.undoable()){this.save(!0);var a=this.getNextImage(!0);if(a)return this.restoreImage(a),!0}return!1},redo:function(){if(this.redoable()&&(this.save(!0),this.redoable())){var a=this.getNextImage(!1);if(a)return this.restoreImage(a),!0}return!1},update:function(a){if(!this.locked){a||\n(a=new f(this.editor));for(var b=this.index,c=this.snapshots;0<b&&this.currentImage.equalsContent(c[b-1]);)--b;c.splice(b,this.index-b+1,a);this.index=b;this.currentImage=a}},updateSelection:function(a){if(!this.snapshots.length)return!1;var b=this.snapshots,c=b[b.length-1];return c.equalsContent(a)&&!c.equalsSelection(a)?(this.currentImage=b[b.length-1]=a,!0):!1},lock:function(a,b){if(this.locked)this.locked.level++;else if(a)this.locked={level:1};else{var c=null;if(b)c=!0;else{var d=new f(this.editor,\n!0);this.currentImage&&this.currentImage.equalsContent(d)&&(c=d)}this.locked={update:c,level:1}}},unlock:function(){if(this.locked&&!--this.locked.level){var a=this.locked.update;this.locked=null;if(!0===a)this.update();else if(a){var b=new f(this.editor,!0);a.equalsContent(b)||this.update()}}}};e.navigationKeyCodes={37:1,38:1,39:1,40:1,36:1,35:1,33:1,34:1};e.keyGroups={PRINTABLE:0,FUNCTIONAL:1};e.isNavigationKey=function(a){return!!e.navigationKeyCodes[a]};e.getKeyGroup=function(a){var b=e.keyGroups;\nreturn n[a]?b.FUNCTIONAL:b.PRINTABLE};e.getOppositeKeyGroup=function(a){var b=e.keyGroups;return a==b.FUNCTIONAL?b.PRINTABLE:b.FUNCTIONAL};e.ieFunctionalKeysBug=function(a){return CKEDITOR.env.ie&&e.getKeyGroup(a)==e.keyGroups.FUNCTIONAL};var f=CKEDITOR.plugins.undo.Image=function(a,b){this.editor=a;a.fire(\"beforeUndoImage\");var c=a.getSnapshot();CKEDITOR.env.ie&&c&&(c=c.replace(/\\s+data-cke-expando=\".*?\"/g,\"\"));this.contents=c;b||(this.bookmarks=(c=c&&a.getSelection())&&c.createBookmarks2(!0));a.fire(\"afterUndoImage\")},\nh=/\\b(?:href|src|name)=\"[^\"]*?\"/gi;f.prototype={equalsContent:function(a){var b=this.contents;a=a.contents;CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)&&(b=b.replace(h,\"\"),a=a.replace(h,\"\"));return b!=a?!1:!0},equalsSelection:function(a){var b=this.bookmarks;a=a.bookmarks;if(b||a){if(!b||!a||b.length!=a.length)return!1;for(var c=0;c<b.length;c++){var d=b[c],e=a[c];if(d.startOffset!=e.startOffset||d.endOffset!=e.endOffset||!CKEDITOR.tools.arrayCompare(d.start,e.start)||!CKEDITOR.tools.arrayCompare(d.end,\ne.end))return!1}}return!0}};var k=CKEDITOR.plugins.undo.NativeEditingHandler=function(a){this.undoManager=a;this.ignoreInputEvent=!1;this.keyEventsStack=new m;this.lastKeydownImage=null};k.prototype={onKeydown:function(a){var b=a.data.getKey();if(229!==b)if(-1<CKEDITOR.tools.indexOf(g,a.data.getKeystroke()))a.data.preventDefault();else if(this.keyEventsStack.cleanUp(a),a=this.undoManager,this.keyEventsStack.getLast(b)||this.keyEventsStack.push(b),this.lastKeydownImage=new f(a.editor),e.isNavigationKey(b)||\nthis.undoManager.keyGroupChanged(b))if(a.strokesRecorded[0]||a.strokesRecorded[1])a.save(!1,this.lastKeydownImage,!1),a.resetType()},onInput:function(){if(this.ignoreInputEvent)this.ignoreInputEvent=!1;else{var a=this.keyEventsStack.getLast();a||(a=this.keyEventsStack.push(0));this.keyEventsStack.increment(a.keyCode);this.keyEventsStack.getTotalInputs()>=this.undoManager.strokesLimit&&(this.undoManager.type(a.keyCode,!0),this.keyEventsStack.resetInputs())}},onKeyup:function(a){var b=this.undoManager;\na=a.data.getKey();var c=this.keyEventsStack.getTotalInputs();this.keyEventsStack.remove(a);if(!(e.ieFunctionalKeysBug(a)&&this.lastKeydownImage&&this.lastKeydownImage.equalsContent(new f(b.editor,!0))))if(0<c)b.type(a);else if(e.isNavigationKey(a))this.onNavigationKey(!0)},onNavigationKey:function(a){var b=this.undoManager;!a&&b.save(!0,null,!1)||b.updateSelection(new f(b.editor));b.resetType()},ignoreInputEventListener:function(){this.ignoreInputEvent=!0},attachListeners:function(){var a=this.undoManager.editor,\nb=a.editable(),c=this;b.attachListener(b,\"keydown\",function(a){c.onKeydown(a);if(e.ieFunctionalKeysBug(a.data.getKey()))c.onInput()},null,null,999);b.attachListener(b,CKEDITOR.env.ie?\"keypress\":\"input\",c.onInput,c,null,999);b.attachListener(b,\"keyup\",c.onKeyup,c,null,999);b.attachListener(b,\"paste\",c.ignoreInputEventListener,c,null,999);b.attachListener(b,\"drop\",c.ignoreInputEventListener,c,null,999);b.attachListener(b.isInline()?b:a.document.getDocumentElement(),\"click\",function(){c.onNavigationKey()},\nnull,null,999);b.attachListener(this.undoManager.editor,\"blur\",function(){c.keyEventsStack.remove(9)},null,null,999)}};var m=CKEDITOR.plugins.undo.KeyEventsStack=function(){this.stack=[]};m.prototype={push:function(a){a=this.stack.push({keyCode:a,inputs:0});return this.stack[a-1]},getLastIndex:function(a){if(\"number\"!=typeof a)return this.stack.length-1;for(var b=this.stack.length;b--;)if(this.stack[b].keyCode==a)return b;return-1},getLast:function(a){a=this.getLastIndex(a);return-1!=a?this.stack[a]:\nnull},increment:function(a){this.getLast(a).inputs++},remove:function(a){a=this.getLastIndex(a);-1!=a&&this.stack.splice(a,1)},resetInputs:function(a){if(\"number\"==typeof a)this.getLast(a).inputs=0;else for(a=this.stack.length;a--;)this.stack[a].inputs=0},getTotalInputs:function(){for(var a=this.stack.length,b=0;a--;)b+=this.stack[a].inputs;return b},cleanUp:function(a){a=a.data.$;a.ctrlKey||a.metaKey||this.remove(17);a.shiftKey||this.remove(16);a.altKey||this.remove(18)}}})();CKEDITOR.plugins.add(\"wsc\",{requires:\"dialog\",parseApi:function(a){a.config.wsc_onFinish=\"function\"===typeof a.config.wsc_onFinish?a.config.wsc_onFinish:function(){};a.config.wsc_onClose=\"function\"===typeof a.config.wsc_onClose?a.config.wsc_onClose:function(){}},parseConfig:function(a){a.config.wsc_customerId=a.config.wsc_customerId||CKEDITOR.config.wsc_customerId||\"1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk\";a.config.wsc_customDictionaryIds=a.config.wsc_customDictionaryIds||\nCKEDITOR.config.wsc_customDictionaryIds||\"\";a.config.wsc_userDictionaryName=a.config.wsc_userDictionaryName||CKEDITOR.config.wsc_userDictionaryName||\"\";a.config.wsc_customLoaderScript=a.config.wsc_customLoaderScript||CKEDITOR.config.wsc_customLoaderScript;CKEDITOR.config.wsc_cmd=a.config.wsc_cmd||CKEDITOR.config.wsc_cmd||\"spell\";CKEDITOR.config.wsc_version=\"v4.3.0-master-d769233\";CKEDITOR.config.wsc_removeGlobalVariable=!0},init:function(a){var b=CKEDITOR.env;this.parseConfig(a);this.parseApi(a);\na.addCommand(\"checkspell\",new CKEDITOR.dialogCommand(\"checkspell\")).modes={wysiwyg:!CKEDITOR.env.opera&&!CKEDITOR.env.air&&document.domain==window.location.hostname&&!(b.ie&&(8>b.version||b.quirks))};\"undefined\"==typeof a.plugins.scayt&&a.ui.addButton&&a.ui.addButton(\"SpellChecker\",{label:a.lang.wsc.toolbar,click:function(a){var b=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText():a.document.getBody().getText();(b=b.replace(/\\s/g,\"\"))?a.execCommand(\"checkspell\"):alert(\"Nothing to check!\")},\ntoolbar:\"spellchecker,10\"});CKEDITOR.dialog.add(\"checkspell\",this.path+(CKEDITOR.env.ie&&7>=CKEDITOR.env.version?\"dialogs/wsc_ie.js\":window.postMessage?\"dialogs/wsc.js\":\"dialogs/wsc_ie.js\"))}});CKEDITOR.config.plugins='dialogui,dialog,about,a11yhelp,basicstyles,blockquote,clipboard,panel,floatpanel,menu,contextmenu,resize,button,toolbar,elementspath,enterkey,entities,popup,filebrowser,floatingspace,listblock,richcombo,format,horizontalrule,htmlwriter,wysiwygarea,image,indent,indentlist,fakeobjects,link,list,magicline,maximize,pastetext,pastefromword,removeformat,showborders,sourcearea,specialchar,menubutton,scayt,stylescombo,tab,table,tabletools,undo,wsc';CKEDITOR.config.skin='moono';(function() {var setIcons = function(icons, strip) {var path = CKEDITOR.getUrl( 'plugins/' + strip );icons = icons.split( ',' );for ( var i = 0; i < icons.length; i++ )CKEDITOR.skin.icons[ icons[ i ] ] = { path: path, offset: -icons[ ++i ], bgsize : icons[ ++i ] };};if (CKEDITOR.env.hidpi) setIcons('about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,blockquote,168,,copy-rtl,192,,copy,216,,cut-rtl,240,,cut,264,,paste-rtl,288,,paste,312,,horizontalrule,336,,image,360,,indent-rtl,384,,indent,408,,outdent-rtl,432,,outdent,456,,anchor-rtl,480,,anchor,504,,link,528,,unlink,552,,bulletedlist-rtl,576,,bulletedlist,600,,numberedlist-rtl,624,,numberedlist,648,,maximize,672,,pastetext-rtl,696,,pastetext,720,,pastefromword-rtl,744,,pastefromword,768,,removeformat,792,,source-rtl,816,,source,840,,specialchar,864,,scayt,888,,table,912,,redo-rtl,936,,redo,960,,undo-rtl,984,,undo,1008,,spellchecker,1032,','icons_hidpi.png');else setIcons('about,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,blockquote,168,auto,copy-rtl,192,auto,copy,216,auto,cut-rtl,240,auto,cut,264,auto,paste-rtl,288,auto,paste,312,auto,horizontalrule,336,auto,image,360,auto,indent-rtl,384,auto,indent,408,auto,outdent-rtl,432,auto,outdent,456,auto,anchor-rtl,480,auto,anchor,504,auto,link,528,auto,unlink,552,auto,bulletedlist-rtl,576,auto,bulletedlist,600,auto,numberedlist-rtl,624,auto,numberedlist,648,auto,maximize,672,auto,pastetext-rtl,696,auto,pastetext,720,auto,pastefromword-rtl,744,auto,pastefromword,768,auto,removeformat,792,auto,source-rtl,816,auto,source,840,auto,specialchar,864,auto,scayt,888,auto,table,912,auto,redo-rtl,936,auto,redo,960,auto,undo-rtl,984,auto,undo,1008,auto,spellchecker,1032,auto','icons.png');})();CKEDITOR.lang.languages={\"af\":1,\"sq\":1,\"ar\":1,\"eu\":1,\"bn\":1,\"bs\":1,\"bg\":1,\"ca\":1,\"zh-cn\":1,\"zh\":1,\"hr\":1,\"cs\":1,\"da\":1,\"nl\":1,\"en\":1,\"en-au\":1,\"en-ca\":1,\"en-gb\":1,\"eo\":1,\"et\":1,\"fo\":1,\"fi\":1,\"fr\":1,\"fr-ca\":1,\"gl\":1,\"ka\":1,\"de\":1,\"de-ch\":1,\"el\":1,\"gu\":1,\"he\":1,\"hi\":1,\"hu\":1,\"is\":1,\"id\":1,\"it\":1,\"ja\":1,\"km\":1,\"ko\":1,\"ku\":1,\"lv\":1,\"lt\":1,\"mk\":1,\"ms\":1,\"mn\":1,\"no\":1,\"nb\":1,\"fa\":1,\"pl\":1,\"pt-br\":1,\"pt\":1,\"ro\":1,\"ru\":1,\"sr\":1,\"sr-latn\":1,\"si\":1,\"sk\":1,\"sl\":1,\"es\":1,\"sv\":1,\"tt\":1,\"th\":1,\"tr\":1,\"ug\":1,\"uk\":1,\"vi\":1,\"cy\":1};}());"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/config.js",
    "content": "/**\n * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.editorConfig = function( config ) {\n\t// Define changes to default configuration here.\n\t// For complete reference see:\n\t// http://docs.ckeditor.com/#!/api/CKEDITOR.config\n\n\t// The toolbar groups arrangement, optimized for two toolbar rows.\n\tconfig.toolbarGroups = [\n\t\t{ name: 'clipboard',   groups: [ 'clipboard', 'undo' ] },\n\t\t{ name: 'editing',     groups: [ 'find', 'selection', 'spellchecker' ] },\n\t\t{ name: 'links' },\n\t\t{ name: 'insert' },\n\t\t{ name: 'forms' },\n\t\t{ name: 'tools' },\n\t\t{ name: 'document',\t   groups: [ 'mode', 'document', 'doctools' ] },\n\t\t{ name: 'others' },\n\t\t'/',\n\t\t{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },\n\t\t{ name: 'paragraph',   groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] },\n\t\t{ name: 'styles' },\n\t\t{ name: 'colors' },\n\t\t{ name: 'about' }\n\t];\n\n\t// Remove some buttons provided by the standard plugins, which are\n\t// not needed in the Standard(s) toolbar.\n\tconfig.removeButtons = 'Underline,Subscript,Superscript';\n\n\t// Set the most common block elements.\n\tconfig.format_tags = 'p;h1;h2;h3;pre';\n\n\t// Simplify the dialog windows.\n\tconfig.removeDialogTabs = 'image:advanced;link:advanced';\n};\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/contents.css",
    "content": "/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n\nbody\n{\n\t/* Font */\n\tfont-family: sans-serif, Arial, Verdana, \"Trebuchet MS\";\n\tfont-size: 12px;\n\n\t/* Text color */\n\tcolor: #333;\n\n\t/* Remove the background color to make it transparent */\n\tbackground-color: #fff;\n\n\tmargin: 20px;\n}\n\n.cke_editable\n{\n\tfont-size: 13px;\n\tline-height: 1.6;\n}\n\nblockquote\n{\n\tfont-style: italic;\n\tfont-family: Georgia, Times, \"Times New Roman\", serif;\n\tpadding: 2px 0;\n\tborder-style: solid;\n\tborder-color: #ccc;\n\tborder-width: 0;\n}\n\n.cke_contents_ltr blockquote\n{\n\tpadding-left: 20px;\n\tpadding-right: 8px;\n\tborder-left-width: 5px;\n}\n\n.cke_contents_rtl blockquote\n{\n\tpadding-left: 8px;\n\tpadding-right: 20px;\n\tborder-right-width: 5px;\n}\n\na\n{\n\tcolor: #0782C1;\n}\n\nol,ul,dl\n{\n\t/* IE7: reset rtl list margin. (#7334) */\n\t*margin-right: 0px;\n\t/* preserved spaces for list items with text direction other than the list. (#6249,#8049)*/\n\tpadding: 0 40px;\n}\n\nh1,h2,h3,h4,h5,h6\n{\n\tfont-weight: normal;\n\tline-height: 1.2;\n}\n\nhr\n{\n\tborder: 0px;\n\tborder-top: 1px solid #ccc;\n}\n\nimg.right\n{\n\tborder: 1px solid #ccc;\n\tfloat: right;\n\tmargin-left: 15px;\n\tpadding: 5px;\n}\n\nimg.left\n{\n\tborder: 1px solid #ccc;\n\tfloat: left;\n\tmargin-right: 15px;\n\tpadding: 5px;\n}\n\npre\n{\n\twhite-space: pre-wrap; /* CSS 2.1 */\n\tword-wrap: break-word; /* IE7 */\n\t-moz-tab-size: 4;\n\ttab-size: 4;\n}\n\n.marker\n{\n\tbackground-color: Yellow;\n}\n\nspan[lang]\n{\n\tfont-style: italic;\n}\n\nfigure\n{\n\ttext-align: center;\n\tborder: solid 1px #ccc;\n\tborder-radius: 2px;\n\tbackground: rgba(0,0,0,0.05);\n\tpadding: 10px;\n\tmargin: 10px 20px;\n\tdisplay: inline-block;\n}\n\nfigure > figcaption\n{\n\ttext-align: center;\n\tdisplay: block; /* For IE8 */\n}\n\na > img {\n\tpadding: 1px;\n\tmargin: 1px;\n\tborder: none;\n\toutline: 1px solid #0782C1;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/af.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['af']={\"editor\":\"Woordverwerker\",\"editorPanel\":\"Woordverwerkerpaneel\",\"common\":{\"editorHelp\":\"Druk op ALT 0 vir hulp\",\"browseServer\":\"Blaai op bediener\",\"url\":\"URL\",\"protocol\":\"Protokol\",\"upload\":\"Oplaai\",\"uploadSubmit\":\"Stuur aan die bediener\",\"image\":\"Beeld\",\"flash\":\"Flash\",\"form\":\"Vorm\",\"checkbox\":\"Merkhokkie\",\"radio\":\"Radioknoppie\",\"textField\":\"Teksveld\",\"textarea\":\"Teksarea\",\"hiddenField\":\"Versteekteveld\",\"button\":\"Knop\",\"select\":\"Keuseveld\",\"imageButton\":\"Beeldknop\",\"notSet\":\"<geen instelling>\",\"id\":\"Id\",\"name\":\"Naam\",\"langDir\":\"Skryfrigting\",\"langDirLtr\":\"Links na regs (LTR)\",\"langDirRtl\":\"Regs na links (RTL)\",\"langCode\":\"Taalkode\",\"longDescr\":\"Lang beskrywing URL\",\"cssClass\":\"CSS klasse\",\"advisoryTitle\":\"Aanbevole titel\",\"cssStyle\":\"Styl\",\"ok\":\"OK\",\"cancel\":\"Kanselleer\",\"close\":\"Sluit\",\"preview\":\"Voorbeeld\",\"resize\":\"Skalierung\",\"generalTab\":\"Algemeen\",\"advancedTab\":\"Gevorderd\",\"validateNumberFailed\":\"Hierdie waarde is nie 'n nommer nie.\",\"confirmNewPage\":\"Alle wysiginge sal verlore gaan. Is jy seker dat jy 'n nuwe bladsy wil laai?\",\"confirmCancel\":\"Sommige opsies is gewysig. Is jy seker dat jy hierdie dialoogvenster wil sluit?\",\"options\":\"Opsies\",\"target\":\"Teiken\",\"targetNew\":\"Nuwe venster (_blank)\",\"targetTop\":\"Boonste venster (_top)\",\"targetSelf\":\"Selfde venster (_self)\",\"targetParent\":\"Oorspronklike venster (_parent)\",\"langDirLTR\":\"Links na Regs (LTR)\",\"langDirRTL\":\"Regs na Links (RTL)\",\"styles\":\"Styl\",\"cssClasses\":\"CSS klasse\",\"width\":\"Breedte\",\"height\":\"Hoogte\",\"align\":\"Orienteerung\",\"alignLeft\":\"Links\",\"alignRight\":\"Regs\",\"alignCenter\":\"Middel\",\"alignJustify\":\"Eweredig\",\"alignTop\":\"Bo\",\"alignMiddle\":\"Middel\",\"alignBottom\":\"Onder\",\"alignNone\":\"Geen\",\"invalidValue\":\"Ongeldige waarde\",\"invalidHeight\":\"Hoogte moet 'n getal wees\",\"invalidWidth\":\"Breedte moet 'n getal wees.\",\"invalidCssLength\":\"Die waarde vir die \\\"%1\\\" veld moet 'n posetiewe getal wees met of sonder 'n geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).\",\"invalidHtmlLength\":\"Die waarde vir die  \\\"%1\\\" veld moet 'n posetiewe getal wees met of sonder 'n geldige HTML eenheid (px of %).\",\"invalidInlineStyle\":\"Ongeldige CSS. Formaat is een of meer sleutel-wert paare, \\\"naam : wert\\\" met kommapunte gesky.\",\"cssLengthTooltip\":\"Voeg 'n getal wert in pixel in, of 'n waarde met geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, nie beskikbaar nie</span>\"},\"about\":{\"copy\":\"Kopiereg &copy; $1. Alle regte voorbehou.\",\"dlgTitle\":\"Meer oor CKEditor\",\"help\":\"Slaan $1 na vir hulp.\",\"moreInfo\":\"Vir lisensie-informasie, besoek asb. ons webwerf:\",\"title\":\"Meer oor CKEditor\",\"userGuide\":\"CKEditor Gebruikers gits\"},\"basicstyles\":{\"bold\":\"Vet\",\"italic\":\"Skuins\",\"strike\":\"Deurgestreep\",\"subscript\":\"Onderskrif\",\"superscript\":\"Bo-skrif\",\"underline\":\"Onderstreep\"},\"blockquote\":{\"toolbar\":\"Sitaatblok\"},\"clipboard\":{\"copy\":\"Kopiëer\",\"copyError\":\"U blaaier se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).\",\"cut\":\"Knip\",\"cutError\":\"U blaaier se sekuriteitsinstelling belet die outomatiese knip-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).\",\"paste\":\"Plak\",\"pasteArea\":\"Plak-area\",\"pasteMsg\":\"Plak die teks in die volgende teks-area met die sleutelbordkombinasie (<STRONG>Ctrl/Cmd+V</STRONG>) en druk <STRONG>OK</STRONG>.\",\"securityMsg\":\"Weens u blaaier se sekuriteitsinstelling is data op die knipbord nie toeganklik nie. U kan dit eers weer in hierdie venster plak.\",\"title\":\"Byvoeg\"},\"contextmenu\":{\"options\":\"Konteks Spyskaart-opsies\"},\"button\":{\"selectedLabel\":\"%1 uitgekies\"},\"toolbar\":{\"toolbarCollapse\":\"Verklein werkbalk\",\"toolbarExpand\":\"Vergroot werkbalk\",\"toolbarGroups\":{\"document\":\"Dokument\",\"clipboard\":\"Knipbord/Undo\",\"editing\":\"Verander\",\"forms\":\"Vorms\",\"basicstyles\":\"Eenvoudige Styl\",\"paragraph\":\"Paragraaf\",\"links\":\"Skakels\",\"insert\":\"Toevoeg\",\"styles\":\"Style\",\"colors\":\"Kleure\",\"tools\":\"Gereedskap\"},\"toolbars\":\"Werkbalke\"},\"elementspath\":{\"eleLabel\":\"Elemente-pad\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Opmaak\",\"panelTitle\":\"Opmaak\",\"tag_address\":\"Adres\",\"tag_div\":\"Normaal (DIV)\",\"tag_h1\":\"Opskrif 1\",\"tag_h2\":\"Opskrif 2\",\"tag_h3\":\"Opskrif 3\",\"tag_h4\":\"Opskrif 4\",\"tag_h5\":\"Opskrif 5\",\"tag_h6\":\"Opskrif 6\",\"tag_p\":\"Normaal\",\"tag_pre\":\"Opgemaak\"},\"horizontalrule\":{\"toolbar\":\"Horisontale lyn invoeg\"},\"image\":{\"alt\":\"Alternatiewe teks\",\"border\":\"Rand\",\"btnUpload\":\"Stuur na bediener\",\"button2Img\":\"Wil u die geselekteerde afbeeldingsknop vervang met 'n eenvoudige afbeelding?\",\"hSpace\":\"HSpasie\",\"img2Button\":\"Wil u die geselekteerde afbeelding vervang met 'n afbeeldingsknop?\",\"infoTab\":\"Afbeelding informasie\",\"linkTab\":\"Skakel\",\"lockRatio\":\"Vaste proporsie\",\"menu\":\"Afbeelding eienskappe\",\"resetSize\":\"Herstel grootte\",\"title\":\"Afbeelding eienskappe\",\"titleButton\":\"Afbeeldingsknop eienskappe\",\"upload\":\"Oplaai\",\"urlMissing\":\"Die URL na die afbeelding ontbreek.\",\"vSpace\":\"VSpasie\",\"validateBorder\":\"Rand moet 'n heelgetal wees.\",\"validateHSpace\":\"HSpasie moet 'n heelgetal wees.\",\"validateVSpace\":\"VSpasie moet 'n heelgetal wees.\"},\"indent\":{\"indent\":\"Vergroot inspring\",\"outdent\":\"Verklein inspring\"},\"fakeobjects\":{\"anchor\":\"Anker\",\"flash\":\"Flash animasie\",\"hiddenfield\":\"Verborge veld\",\"iframe\":\"IFrame\",\"unknown\":\"Onbekende objek\"},\"link\":{\"acccessKey\":\"Toegangsleutel\",\"advanced\":\"Gevorderd\",\"advisoryContentType\":\"Aanbevole inhoudstipe\",\"advisoryTitle\":\"Aanbevole titel\",\"anchor\":{\"toolbar\":\"Anker byvoeg/verander\",\"menu\":\"Anker-eienskappe\",\"title\":\"Anker-eienskappe\",\"name\":\"Ankernaam\",\"errorName\":\"Voltooi die ankernaam asseblief\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"Op element Id\",\"anchorName\":\"Op ankernaam\",\"charset\":\"Karakterstel van geskakelde bron\",\"cssClasses\":\"CSS klasse\",\"emailAddress\":\"E-posadres\",\"emailBody\":\"Berig-inhoud\",\"emailSubject\":\"Berig-onderwerp\",\"id\":\"Id\",\"info\":\"Skakel informasie\",\"langCode\":\"Taalkode\",\"langDir\":\"Skryfrigting\",\"langDirLTR\":\"Links na regs (LTR)\",\"langDirRTL\":\"Regs na links (RTL)\",\"menu\":\"Wysig skakel\",\"name\":\"Naam\",\"noAnchors\":\"(Geen ankers beskikbaar in dokument)\",\"noEmail\":\"Gee die e-posadres\",\"noUrl\":\"Gee die skakel se URL\",\"other\":\"<ander>\",\"popupDependent\":\"Afhanklik (Netscape)\",\"popupFeatures\":\"Eienskappe van opspringvenster\",\"popupFullScreen\":\"Volskerm (IE)\",\"popupLeft\":\"Posisie links\",\"popupLocationBar\":\"Adresbalk\",\"popupMenuBar\":\"Spyskaartbalk\",\"popupResizable\":\"Herskaalbaar\",\"popupScrollBars\":\"Skuifbalke\",\"popupStatusBar\":\"Statusbalk\",\"popupToolbar\":\"Werkbalk\",\"popupTop\":\"Posisie bo\",\"rel\":\"Relationship\",\"selectAnchor\":\"Kies 'n anker\",\"styles\":\"Styl\",\"tabIndex\":\"Tab indeks\",\"target\":\"Doel\",\"targetFrame\":\"<raam>\",\"targetFrameName\":\"Naam van doelraam\",\"targetPopup\":\"<opspringvenster>\",\"targetPopupName\":\"Naam van opspringvenster\",\"title\":\"Skakel\",\"toAnchor\":\"Anker in bladsy\",\"toEmail\":\"E-pos\",\"toUrl\":\"URL\",\"toolbar\":\"Skakel invoeg/wysig\",\"type\":\"Skakelsoort\",\"unlink\":\"Verwyder skakel\",\"upload\":\"Oplaai\"},\"list\":{\"bulletedlist\":\"Ongenommerde lys\",\"numberedlist\":\"Genommerde lys\"},\"magicline\":{\"title\":\"Voeg paragraaf hier in\"},\"maximize\":{\"maximize\":\"Maksimaliseer\",\"minimize\":\"Minimaliseer\"},\"pastetext\":{\"button\":\"Plak as eenvoudige teks\",\"title\":\"Plak as eenvoudige teks\"},\"pastefromword\":{\"confirmCleanup\":\"Die teks wat u wil plak lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit geplak word?\",\"error\":\"Die geplakte teks kon nie skoongemaak word nie, weens 'n interne fout\",\"title\":\"Plak vanuit Word\",\"toolbar\":\"Plak vanuit Word\"},\"removeformat\":{\"toolbar\":\"Verwyder opmaak\"},\"sourcearea\":{\"toolbar\":\"Bron\"},\"specialchar\":{\"options\":\"Spesiale karakter-opsies\",\"title\":\"Kies spesiale karakter\",\"toolbar\":\"Voeg spesiaale karakter in\"},\"scayt\":{\"btn_about\":\"SCAYT info\",\"btn_dictionaries\":\"Woordeboeke\",\"btn_disable\":\"SCAYT af\",\"btn_enable\":\"SCAYT aan\",\"btn_langs\":\"Tale\",\"btn_options\":\"Opsies\",\"text_title\":\"Speltoets terwyl u tik\"},\"stylescombo\":{\"label\":\"Styl\",\"panelTitle\":\"Vormaat style\",\"panelTitle1\":\"Blok style\",\"panelTitle2\":\"Inlyn style\",\"panelTitle3\":\"Objek style\"},\"table\":{\"border\":\"Randbreedte\",\"caption\":\"Naam\",\"cell\":{\"menu\":\"Sel\",\"insertBefore\":\"Voeg sel in voor\",\"insertAfter\":\"Voeg sel in na\",\"deleteCell\":\"Verwyder sel\",\"merge\":\"Voeg selle saam\",\"mergeRight\":\"Voeg saam na regs\",\"mergeDown\":\"Voeg saam ondertoe\",\"splitHorizontal\":\"Splits sel horisontaal\",\"splitVertical\":\"Splits sel vertikaal\",\"title\":\"Sel eienskappe\",\"cellType\":\"Sel tipe\",\"rowSpan\":\"Omspan rye\",\"colSpan\":\"Omspan kolomme\",\"wordWrap\":\"Woord terugloop\",\"hAlign\":\"Horisontale oplyning\",\"vAlign\":\"Vertikale oplyning\",\"alignBaseline\":\"Basislyn\",\"bgColor\":\"Agtergrondkleur\",\"borderColor\":\"Randkleur\",\"data\":\"Inhoud\",\"header\":\"Opskrif\",\"yes\":\"Ja\",\"no\":\"Nee\",\"invalidWidth\":\"Selbreedte moet 'n getal wees.\",\"invalidHeight\":\"Selhoogte moet 'n getal wees.\",\"invalidRowSpan\":\"Omspan rye moet 'n heelgetal wees.\",\"invalidColSpan\":\"Omspan kolomme moet 'n heelgetal wees.\",\"chooseColor\":\"Kies\"},\"cellPad\":\"Sel-spasie\",\"cellSpace\":\"Sel-afstand\",\"column\":{\"menu\":\"Kolom\",\"insertBefore\":\"Voeg kolom in voor\",\"insertAfter\":\"Voeg kolom in na\",\"deleteColumn\":\"Verwyder kolom\"},\"columns\":\"Kolomme\",\"deleteTable\":\"Verwyder tabel\",\"headers\":\"Opskrifte\",\"headersBoth\":\"Beide    \",\"headersColumn\":\"Eerste kolom\",\"headersNone\":\"Geen\",\"headersRow\":\"Eerste ry\",\"invalidBorder\":\"Randbreedte moet 'n getal wees.\",\"invalidCellPadding\":\"Sel-spasie moet 'n getal wees.\",\"invalidCellSpacing\":\"Sel-afstand moet 'n getal wees.\",\"invalidCols\":\"Aantal kolomme moet 'n getal groter as 0 wees.\",\"invalidHeight\":\"Tabelhoogte moet 'n getal wees.\",\"invalidRows\":\"Aantal rye moet 'n getal groter as 0 wees.\",\"invalidWidth\":\"Tabelbreedte moet 'n getal wees.\",\"menu\":\"Tabel eienskappe\",\"row\":{\"menu\":\"Ry\",\"insertBefore\":\"Voeg ry in voor\",\"insertAfter\":\"Voeg ry in na\",\"deleteRow\":\"Verwyder ry\"},\"rows\":\"Rye\",\"summary\":\"Opsomming\",\"title\":\"Tabel eienskappe\",\"toolbar\":\"Tabel\",\"widthPc\":\"persent\",\"widthPx\":\"piksels\",\"widthUnit\":\"breedte-eenheid\"},\"undo\":{\"redo\":\"Oordoen\",\"undo\":\"Ontdoen\"},\"wsc\":{\"btnIgnore\":\"Ignoreer\",\"btnIgnoreAll\":\"Ignoreer alles\",\"btnReplace\":\"Vervang\",\"btnReplaceAll\":\"vervang alles\",\"btnUndo\":\"Ontdoen\",\"changeTo\":\"Verander na\",\"errorLoading\":\"Fout by inlaai van diens: %s.\",\"ieSpellDownload\":\"Speltoetser is nie geïnstalleer nie. Wil u dit nou aflaai?\",\"manyChanges\":\"Klaar met speltoets: %1 woorde verander\",\"noChanges\":\"Klaar met speltoets: Geen woorde verander nie\",\"noMispell\":\"Klaar met speltoets: Geen foute nie\",\"noSuggestions\":\"- Geen voorstel -\",\"notAvailable\":\"Jammer, hierdie diens is nie nou beskikbaar nie.\",\"notInDic\":\"Nie in woordeboek nie\",\"oneChange\":\"Klaar met speltoets: Een woord verander\",\"progress\":\"Spelling word getoets...\",\"title\":\"Speltoetser\",\"toolbar\":\"Speltoets\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/ar.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['ar']={\"editor\":\"محرر النص الغني\",\"editorPanel\":\"لائحة محرر النص المنسق\",\"common\":{\"editorHelp\":\"إضغط على ALT + 0 للحصول على المساعدة.\",\"browseServer\":\"تصفح\",\"url\":\"الرابط\",\"protocol\":\"البروتوكول\",\"upload\":\"رفع\",\"uploadSubmit\":\"أرسل\",\"image\":\"صورة\",\"flash\":\"فلاش\",\"form\":\"نموذج\",\"checkbox\":\"خانة إختيار\",\"radio\":\"زر اختيار\",\"textField\":\"مربع نص\",\"textarea\":\"مساحة نصية\",\"hiddenField\":\"إدراج حقل خفي\",\"button\":\"زر ضغط\",\"select\":\"اختار\",\"imageButton\":\"زر صورة\",\"notSet\":\"<بدون تحديد>\",\"id\":\"الرقم\",\"name\":\"إسم\",\"langDir\":\"إتجاه النص\",\"langDirLtr\":\"اليسار لليمين (LTR)\",\"langDirRtl\":\"اليمين لليسار (RTL)\",\"langCode\":\"رمز اللغة\",\"longDescr\":\"الوصف التفصيلى\",\"cssClass\":\"فئات التنسيق\",\"advisoryTitle\":\"عنوان التقرير\",\"cssStyle\":\"نمط\",\"ok\":\"موافق\",\"cancel\":\"إلغاء الأمر\",\"close\":\"أغلق\",\"preview\":\"استعراض\",\"resize\":\"تغيير الحجم\",\"generalTab\":\"عام\",\"advancedTab\":\"متقدم\",\"validateNumberFailed\":\"لايوجد نتيجة\",\"confirmNewPage\":\"ستفقد أي متغييرات اذا لم تقم بحفظها اولا. هل أنت متأكد أنك تريد صفحة جديدة؟\",\"confirmCancel\":\"بعض الخيارات قد تغيرت. هل أنت متأكد من إغلاق مربع النص؟\",\"options\":\"خيارات\",\"target\":\"هدف الرابط\",\"targetNew\":\"نافذة جديدة\",\"targetTop\":\"النافذة الأعلى\",\"targetSelf\":\"داخل النافذة\",\"targetParent\":\"النافذة الأم\",\"langDirLTR\":\"اليسار لليمين (LTR)\",\"langDirRTL\":\"اليمين لليسار (RTL)\",\"styles\":\"نمط\",\"cssClasses\":\"فئات التنسيق\",\"width\":\"العرض\",\"height\":\"الإرتفاع\",\"align\":\"محاذاة\",\"alignLeft\":\"يسار\",\"alignRight\":\"يمين\",\"alignCenter\":\"وسط\",\"alignJustify\":\"ضبط\",\"alignTop\":\"أعلى\",\"alignMiddle\":\"وسط\",\"alignBottom\":\"أسفل\",\"alignNone\":\"None\",\"invalidValue\":\"قيمة غير مفبولة.\",\"invalidHeight\":\"الارتفاع يجب أن يكون عدداً.\",\"invalidWidth\":\"العرض يجب أن يكون عدداً.\",\"invalidCssLength\":\"قيمة الخانة المخصصة لـ \\\"%1\\\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة CSS قياس مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"قيمة الخانة المخصصة لـ \\\"%1\\\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة HTML قياس مقبولة (px or %).\",\"invalidInlineStyle\":\"قيمة الخانة المخصصة لـ  Inline Style يجب أن تختوي على مجموع واحد أو أكثر بالشكل التالي: \\\"name : value\\\", مفصولة بفاصلة منقزطة.\",\"cssLengthTooltip\":\"أدخل رقما للقيمة بالبكسل أو رقما بوحدة CSS مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, غير متاح</span>\"},\"about\":{\"copy\":\"حقوق النشر &copy; $1. جميع الحقوق محفوظة.\",\"dlgTitle\":\"عن CKEditor\",\"help\":\"راجع $1 من أجل المساعدة\",\"moreInfo\":\"للحصول على معلومات الترخيص ، يرجى زيارة موقعنا:\",\"title\":\"عن CKEditor\",\"userGuide\":\"دليل مستخدم CKEditor.\"},\"basicstyles\":{\"bold\":\"عريض\",\"italic\":\"مائل\",\"strike\":\"يتوسطه خط\",\"subscript\":\"منخفض\",\"superscript\":\"مرتفع\",\"underline\":\"تسطير\"},\"blockquote\":{\"toolbar\":\"اقتباس\"},\"clipboard\":{\"copy\":\"نسخ\",\"copyError\":\"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع عمليات النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+C).\",\"cut\":\"قص\",\"cutError\":\"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+X).\",\"paste\":\"لصق\",\"pasteArea\":\"منطقة اللصق\",\"pasteMsg\":\"الصق داخل الصندوق بإستخدام زرائر (<STRONG>Ctrl/Cmd+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر  <STRONG>موافق</STRONG>.\",\"securityMsg\":\"نظراً لإعدادات الأمان الخاصة بمتصفحك، لن يتمكن هذا المحرر من الوصول لمحتوى حافظتك، لذلك يجب عليك لصق المحتوى مرة أخرى في هذه النافذة.\",\"title\":\"لصق\"},\"contextmenu\":{\"options\":\"خصائص قائمة السياق\"},\"button\":{\"selectedLabel\":\"%1 (محدد)\"},\"toolbar\":{\"toolbarCollapse\":\"تقليص شريط الأدوت\",\"toolbarExpand\":\"تمديد شريط الأدوات\",\"toolbarGroups\":{\"document\":\"مستند\",\"clipboard\":\"الحافظة/الرجوع\",\"editing\":\"تحرير\",\"forms\":\"نماذج\",\"basicstyles\":\"نمط بسيط\",\"paragraph\":\"فقرة\",\"links\":\"روابط\",\"insert\":\"إدراج\",\"styles\":\"أنماط\",\"colors\":\"ألوان\",\"tools\":\"أدوات\"},\"toolbars\":\"أشرطة أدوات المحرر\"},\"elementspath\":{\"eleLabel\":\"مسار العنصر\",\"eleTitle\":\"عنصر 1%\"},\"format\":{\"label\":\"تنسيق\",\"panelTitle\":\"تنسيق الفقرة\",\"tag_address\":\"عنوان\",\"tag_div\":\"عادي (DIV)\",\"tag_h1\":\"العنوان 1\",\"tag_h2\":\"العنوان  2\",\"tag_h3\":\"العنوان  3\",\"tag_h4\":\"العنوان  4\",\"tag_h5\":\"العنوان  5\",\"tag_h6\":\"العنوان  6\",\"tag_p\":\"عادي\",\"tag_pre\":\"منسّق\"},\"horizontalrule\":{\"toolbar\":\"خط فاصل\"},\"image\":{\"alt\":\"عنوان الصورة\",\"border\":\"سمك الحدود\",\"btnUpload\":\"أرسلها للخادم\",\"button2Img\":\"هل تريد تحويل زر الصورة المختار إلى صورة بسيطة؟\",\"hSpace\":\"تباعد أفقي\",\"img2Button\":\"هل تريد تحويل الصورة المختارة إلى زر صورة؟\",\"infoTab\":\"معلومات الصورة\",\"linkTab\":\"الرابط\",\"lockRatio\":\"تناسق الحجم\",\"menu\":\"خصائص الصورة\",\"resetSize\":\"إستعادة الحجم الأصلي\",\"title\":\"خصائص الصورة\",\"titleButton\":\"خصائص زر الصورة\",\"upload\":\"رفع\",\"urlMissing\":\"عنوان مصدر الصورة مفقود\",\"vSpace\":\"تباعد عمودي\",\"validateBorder\":\"الإطار يجب أن يكون عددا\",\"validateHSpace\":\"HSpace يجب أن يكون عدداً.\",\"validateVSpace\":\"VSpace يجب أن يكون عدداً.\"},\"indent\":{\"indent\":\"زيادة المسافة البادئة\",\"outdent\":\"إنقاص المسافة البادئة\"},\"fakeobjects\":{\"anchor\":\"إرساء\",\"flash\":\"رسم متحرك بالفلاش\",\"hiddenfield\":\"إدراج حقل خفي\",\"iframe\":\"iframe\",\"unknown\":\"عنصر غير معروف\"},\"link\":{\"acccessKey\":\"مفاتيح الإختصار\",\"advanced\":\"متقدم\",\"advisoryContentType\":\"نوع التقرير\",\"advisoryTitle\":\"عنوان التقرير\",\"anchor\":{\"toolbar\":\"إشارة مرجعية\",\"menu\":\"تحرير الإشارة المرجعية\",\"title\":\"خصائص الإشارة المرجعية\",\"name\":\"اسم الإشارة المرجعية\",\"errorName\":\"الرجاء كتابة اسم الإشارة المرجعية\",\"remove\":\"إزالة الإشارة المرجعية\"},\"anchorId\":\"حسب رقم العنصر\",\"anchorName\":\"حسب إسم الإشارة المرجعية\",\"charset\":\"ترميز المادة المطلوبة\",\"cssClasses\":\"فئات التنسيق\",\"emailAddress\":\"البريد الإلكتروني\",\"emailBody\":\"محتوى الرسالة\",\"emailSubject\":\"موضوع الرسالة\",\"id\":\"هوية\",\"info\":\"معلومات الرابط\",\"langCode\":\"رمز اللغة\",\"langDir\":\"إتجاه نص اللغة\",\"langDirLTR\":\"اليسار لليمين (LTR)\",\"langDirRTL\":\"اليمين لليسار (RTL)\",\"menu\":\"تحرير الرابط\",\"name\":\"إسم\",\"noAnchors\":\"(لا توجد علامات مرجعية في هذا المستند)\",\"noEmail\":\"الرجاء كتابة الريد الإلكتروني\",\"noUrl\":\"الرجاء كتابة رابط الموقع\",\"other\":\"<أخرى>\",\"popupDependent\":\"تابع (Netscape)\",\"popupFeatures\":\"خصائص النافذة المنبثقة\",\"popupFullScreen\":\"ملئ الشاشة (IE)\",\"popupLeft\":\"التمركز لليسار\",\"popupLocationBar\":\"شريط العنوان\",\"popupMenuBar\":\"القوائم الرئيسية\",\"popupResizable\":\"قابلة التشكيل\",\"popupScrollBars\":\"أشرطة التمرير\",\"popupStatusBar\":\"شريط الحالة\",\"popupToolbar\":\"شريط الأدوات\",\"popupTop\":\"التمركز للأعلى\",\"rel\":\"العلاقة\",\"selectAnchor\":\"اختر علامة مرجعية\",\"styles\":\"نمط\",\"tabIndex\":\"الترتيب\",\"target\":\"هدف الرابط\",\"targetFrame\":\"<إطار>\",\"targetFrameName\":\"اسم الإطار المستهدف\",\"targetPopup\":\"<نافذة منبثقة>\",\"targetPopupName\":\"اسم النافذة المنبثقة\",\"title\":\"رابط\",\"toAnchor\":\"مكان في هذا المستند\",\"toEmail\":\"بريد إلكتروني\",\"toUrl\":\"الرابط\",\"toolbar\":\"رابط\",\"type\":\"نوع الربط\",\"unlink\":\"إزالة رابط\",\"upload\":\"رفع\"},\"list\":{\"bulletedlist\":\"ادخال/حذف تعداد نقطي\",\"numberedlist\":\"ادخال/حذف تعداد رقمي\"},\"magicline\":{\"title\":\"إدراج فقرة هنا\"},\"maximize\":{\"maximize\":\"تكبير\",\"minimize\":\"تصغير\"},\"pastetext\":{\"button\":\"لصق كنص بسيط\",\"title\":\"لصق كنص بسيط\"},\"pastefromword\":{\"confirmCleanup\":\"يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟\",\"error\":\"لم يتم مسح المعلومات الملصقة لخلل داخلي\",\"title\":\"لصق من وورد\",\"toolbar\":\"لصق من وورد\"},\"removeformat\":{\"toolbar\":\"إزالة التنسيقات\"},\"sourcearea\":{\"toolbar\":\"المصدر\"},\"specialchar\":{\"options\":\"خيارات الأحرف الخاصة\",\"title\":\"اختر حرف خاص\",\"toolbar\":\"إدراج  حرف خاص\"},\"scayt\":{\"btn_about\":\"عن SCAYT\",\"btn_dictionaries\":\"قواميس\",\"btn_disable\":\"تعطيل SCAYT\",\"btn_enable\":\"تفعيل SCAYT\",\"btn_langs\":\"لغات\",\"btn_options\":\"خيارات\",\"text_title\":\"تدقيق إملائي أثناء الكتابة\"},\"stylescombo\":{\"label\":\"أنماط\",\"panelTitle\":\"أنماط التنسيق\",\"panelTitle1\":\"أنماط الفقرة\",\"panelTitle2\":\"أنماط مضمنة\",\"panelTitle3\":\"أنماط الكائن\"},\"table\":{\"border\":\"الحدود\",\"caption\":\"الوصف\",\"cell\":{\"menu\":\"خلية\",\"insertBefore\":\"إدراج خلية قبل\",\"insertAfter\":\"إدراج خلية بعد\",\"deleteCell\":\"حذف خلية\",\"merge\":\"دمج خلايا\",\"mergeRight\":\"دمج لليمين\",\"mergeDown\":\"دمج للأسفل\",\"splitHorizontal\":\"تقسيم الخلية أفقياً\",\"splitVertical\":\"تقسيم الخلية عمودياً\",\"title\":\"خصائص الخلية\",\"cellType\":\"نوع الخلية\",\"rowSpan\":\"امتداد الصفوف\",\"colSpan\":\"امتداد الأعمدة\",\"wordWrap\":\"التفاف النص\",\"hAlign\":\"محاذاة أفقية\",\"vAlign\":\"محاذاة رأسية\",\"alignBaseline\":\"خط القاعدة\",\"bgColor\":\"لون الخلفية\",\"borderColor\":\"لون الحدود\",\"data\":\"بيانات\",\"header\":\"عنوان\",\"yes\":\"نعم\",\"no\":\"لا\",\"invalidWidth\":\"عرض الخلية يجب أن يكون عدداً.\",\"invalidHeight\":\"ارتفاع الخلية يجب أن يكون عدداً.\",\"invalidRowSpan\":\"امتداد الصفوف يجب أن يكون عدداً صحيحاً.\",\"invalidColSpan\":\"امتداد الأعمدة يجب أن يكون عدداً صحيحاً.\",\"chooseColor\":\"اختر\"},\"cellPad\":\"المسافة البادئة\",\"cellSpace\":\"تباعد الخلايا\",\"column\":{\"menu\":\"عمود\",\"insertBefore\":\"إدراج عمود قبل\",\"insertAfter\":\"إدراج عمود بعد\",\"deleteColumn\":\"حذف أعمدة\"},\"columns\":\"أعمدة\",\"deleteTable\":\"حذف الجدول\",\"headers\":\"العناوين\",\"headersBoth\":\"كلاهما\",\"headersColumn\":\"العمود الأول\",\"headersNone\":\"بدون\",\"headersRow\":\"الصف الأول\",\"invalidBorder\":\"حجم الحد يجب أن يكون عدداً.\",\"invalidCellPadding\":\"المسافة البادئة يجب أن تكون عدداً\",\"invalidCellSpacing\":\"المسافة بين الخلايا يجب أن تكون عدداً.\",\"invalidCols\":\"عدد الأعمدة يجب أن يكون عدداً أكبر من صفر.\",\"invalidHeight\":\"ارتفاع الجدول يجب أن يكون عدداً.\",\"invalidRows\":\"عدد الصفوف يجب أن يكون عدداً أكبر من صفر.\",\"invalidWidth\":\"عرض الجدول يجب أن يكون عدداً.\",\"menu\":\"خصائص الجدول\",\"row\":{\"menu\":\"صف\",\"insertBefore\":\"إدراج صف قبل\",\"insertAfter\":\"إدراج صف بعد\",\"deleteRow\":\"حذف صفوف\"},\"rows\":\"صفوف\",\"summary\":\"الخلاصة\",\"title\":\"خصائص الجدول\",\"toolbar\":\"جدول\",\"widthPc\":\"بالمئة\",\"widthPx\":\"بكسل\",\"widthUnit\":\"وحدة العرض\"},\"undo\":{\"redo\":\"إعادة\",\"undo\":\"تراجع\"},\"wsc\":{\"btnIgnore\":\"تجاهل\",\"btnIgnoreAll\":\"تجاهل الكل\",\"btnReplace\":\"تغيير\",\"btnReplaceAll\":\"تغيير الكل\",\"btnUndo\":\"تراجع\",\"changeTo\":\"التغيير إلى\",\"errorLoading\":\"خطأ في تحميل تطبيق خدمة الاستضافة: %s.\",\"ieSpellDownload\":\"المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟\",\"manyChanges\":\"تم إكمال التدقيق الإملائي: تم تغيير %1 من كلمات\",\"noChanges\":\"تم التدقيق الإملائي: لم يتم تغيير أي كلمة\",\"noMispell\":\"تم التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية\",\"noSuggestions\":\"- لا توجد إقتراحات -\",\"notAvailable\":\"عفواً، ولكن هذه الخدمة غير متاحة الان\",\"notInDic\":\"ليست في القاموس\",\"oneChange\":\"تم التدقيق الإملائي: تم تغيير كلمة واحدة فقط\",\"progress\":\"جاري التدقيق الاملائى\",\"title\":\"التدقيق الإملائي\",\"toolbar\":\"تدقيق إملائي\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/bg.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['bg']={\"editor\":\"Текстов редактор за форматиран текст\",\"editorPanel\":\"Панел на текстовия редактор\",\"common\":{\"editorHelp\":\"натиснете ALT 0 за помощ\",\"browseServer\":\"Избор от сървъра\",\"url\":\"URL\",\"protocol\":\"Протокол\",\"upload\":\"Качване\",\"uploadSubmit\":\"Изпращане към сървъра\",\"image\":\"Снимка\",\"flash\":\"Флаш\",\"form\":\"Форма\",\"checkbox\":\"Поле за избор\",\"radio\":\"Радио бутон\",\"textField\":\"Текстово поле\",\"textarea\":\"Текстова зона\",\"hiddenField\":\"Скрито поле\",\"button\":\"Бутон\",\"select\":\"Поле за избор\",\"imageButton\":\"Бутон за снимка\",\"notSet\":\"<не е избрано>\",\"id\":\"ID\",\"name\":\"Име\",\"langDir\":\"Посока на езика\",\"langDirLtr\":\"Ляво на дясно (ЛнД)\",\"langDirRtl\":\"Дясно на ляво (ДнЛ)\",\"langCode\":\"Код на езика\",\"longDescr\":\"Уеб адрес за дълго описание\",\"cssClass\":\"Класове за CSS\",\"advisoryTitle\":\"Препоръчително заглавие\",\"cssStyle\":\"Стил\",\"ok\":\"ОК\",\"cancel\":\"Отказ\",\"close\":\"Затвори\",\"preview\":\"Преглед\",\"resize\":\"Влачете за да оразмерите\",\"generalTab\":\"Общи\",\"advancedTab\":\"Разширено\",\"validateNumberFailed\":\"Тази стойност не е число\",\"confirmNewPage\":\"Всички незапазени промени ще бъдат изгубени. Сигурни ли сте, че желаете да заредите нова страница?\",\"confirmCancel\":\"Някои от опциите са променени. Сигурни ли сте, че желаете да затворите прозореца?\",\"options\":\"Опции\",\"target\":\"Цел\",\"targetNew\":\"Нов прозорец (_blank)\",\"targetTop\":\"Горна позиция (_top)\",\"targetSelf\":\"Текущия прозорец (_self)\",\"targetParent\":\"Основен прозорец (_parent)\",\"langDirLTR\":\"Ляво на дясно (ЛнД)\",\"langDirRTL\":\"Дясно на ляво (ДнЛ)\",\"styles\":\"Стил\",\"cssClasses\":\"Класове за CSS\",\"width\":\"Ширина\",\"height\":\"Височина\",\"align\":\"Подравняване\",\"alignLeft\":\"Ляво\",\"alignRight\":\"Дясно\",\"alignCenter\":\"Център\",\"alignJustify\":\"Двустранно подравняване\",\"alignTop\":\"Горе\",\"alignMiddle\":\"По средата\",\"alignBottom\":\"Долу\",\"alignNone\":\"Без подравняване\",\"invalidValue\":\"Невалидна стойност.\",\"invalidHeight\":\"Височината трябва да е число.\",\"invalidWidth\":\"Ширина требе да е число.\",\"invalidCssLength\":\"Стойността на полето \\\"%1\\\" трябва да бъде положително число с или без валидна CSS измервателна единица (px, %, in, cm, mm, em, ex, pt, или pc).\",\"invalidHtmlLength\":\"Стойността на полето \\\"%1\\\" трябва да бъде положително число с или без валидна HTML измервателна единица (px или %).\",\"invalidInlineStyle\":\"Стойността на стилa трябва да съдържат една или повече двойки във формат \\\"name : value\\\", разделени с двоеточие.\",\"cssLengthTooltip\":\"Въведете числена стойност в пиксели или друга валидна CSS единица (px, %, in, cm, mm, em, ex, pt, или pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, недостъпно</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"Относно CKEditor\",\"help\":\"Проверете $1 за помощ.\",\"moreInfo\":\"За лицензионна информация моля посетете сайта ни:\",\"title\":\"Относно CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"Удебелен\",\"italic\":\"Наклонен\",\"strike\":\"Зачертан текст\",\"subscript\":\"Индексиран текст\",\"superscript\":\"Суперскрипт\",\"underline\":\"Подчертан\"},\"blockquote\":{\"toolbar\":\"Блок за цитат\"},\"clipboard\":{\"copy\":\"Копирай\",\"copyError\":\"Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl/Cmd+C).\",\"cut\":\"Отрежи\",\"cutError\":\"Настройките за сигурност на Вашия браузър не позволяват на редактора автоматично да изъплни действията за отрязване. Моля ползвайте клавиатурните команди за целта (ctrl+x).\",\"paste\":\"Вмъкни\",\"pasteArea\":\"Зона за вмъкване\",\"pasteMsg\":\"Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl/Cmd+V</STRONG>) и натиснете <STRONG>OK</STRONG>.\",\"securityMsg\":\"Заради настройките за сигурност на Вашия браузър, редакторът не може да прочете данните от клипборда коректно.\",\"title\":\"Вмъкни\"},\"contextmenu\":{\"options\":\"Опции на контекстното меню\"},\"button\":{\"selectedLabel\":\"%1 (Избрано)\"},\"toolbar\":{\"toolbarCollapse\":\"Свиване на лентата с инструменти\",\"toolbarExpand\":\"Разширяване на лентата с инструменти\",\"toolbarGroups\":{\"document\":\"Документ\",\"clipboard\":\"Клипборд/Отмяна\",\"editing\":\"Промяна\",\"forms\":\"Форми\",\"basicstyles\":\"Базови стилове\",\"paragraph\":\"Параграф\",\"links\":\"Връзки\",\"insert\":\"Вмъкване\",\"styles\":\"Стилове\",\"colors\":\"Цветове\",\"tools\":\"Инструменти\"},\"toolbars\":\"Ленти с инструменти\"},\"elementspath\":{\"eleLabel\":\"Път за елементите\",\"eleTitle\":\"%1 елемент\"},\"format\":{\"label\":\"Формат\",\"panelTitle\":\"Формат\",\"tag_address\":\"Адрес\",\"tag_div\":\"Параграф (DIV)\",\"tag_h1\":\"Заглавие 1\",\"tag_h2\":\"Заглавие 2\",\"tag_h3\":\"Заглавие 3\",\"tag_h4\":\"Заглавие 4\",\"tag_h5\":\"Заглавие 5\",\"tag_h6\":\"Заглавие 6\",\"tag_p\":\"Нормален\",\"tag_pre\":\"Форматиран\"},\"horizontalrule\":{\"toolbar\":\"Вмъкване на хоризонтална линия\"},\"image\":{\"alt\":\"Алтернативен текст\",\"border\":\"Рамка\",\"btnUpload\":\"Изпрати я на сървъра\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"Хоризонтален отстъп\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"Инфо за снимка\",\"linkTab\":\"Връзка\",\"lockRatio\":\"Заключване на съотношението\",\"menu\":\"Настройки за снимка\",\"resetSize\":\"Нулиране на размер\",\"title\":\"Настройки за снимка\",\"titleButton\":\"Настойки за бутон за снимка\",\"upload\":\"Качване\",\"urlMissing\":\"Image source URL is missing.\",\"vSpace\":\"Вертикален отстъп\",\"validateBorder\":\"Border must be a whole number.\",\"validateHSpace\":\"HSpace must be a whole number.\",\"validateVSpace\":\"VSpace must be a whole number.\"},\"indent\":{\"indent\":\"Увеличаване на отстъпа\",\"outdent\":\"Намаляване на отстъпа\"},\"fakeobjects\":{\"anchor\":\"Кука\",\"flash\":\"Флаш анимация\",\"hiddenfield\":\"Скрито поле\",\"iframe\":\"IFrame\",\"unknown\":\"Неизвестен обект\"},\"link\":{\"acccessKey\":\"Ключ за достъп\",\"advanced\":\"Разширено\",\"advisoryContentType\":\"Препоръчителен тип на съдържанието\",\"advisoryTitle\":\"Препоръчително заглавие\",\"anchor\":{\"toolbar\":\"Котва\",\"menu\":\"Промяна на котва\",\"title\":\"Настройки на котва\",\"name\":\"Име на котва\",\"errorName\":\"Моля въведете име на котвата\",\"remove\":\"Премахване на котва\"},\"anchorId\":\"По ID на елемент\",\"anchorName\":\"По име на котва\",\"charset\":\"Тип на свързания ресурс\",\"cssClasses\":\"Класове за CSS\",\"emailAddress\":\"E-mail aдрес\",\"emailBody\":\"Съдържание\",\"emailSubject\":\"Тема\",\"id\":\"ID\",\"info\":\"Инфо за връзката\",\"langCode\":\"Код за езика\",\"langDir\":\"Посока на езика\",\"langDirLTR\":\"Ляво на Дясно (ЛнД)\",\"langDirRTL\":\"Дясно на Ляво (ДнЛ)\",\"menu\":\"Промяна на връзка\",\"name\":\"Име\",\"noAnchors\":\"(Няма котви в текущия документ)\",\"noEmail\":\"Моля въведете e-mail aдрес\",\"noUrl\":\"Моля въведете URL адреса\",\"other\":\"<друго>\",\"popupDependent\":\"Зависимост (Netscape)\",\"popupFeatures\":\"Функции на изкачащ прозорец\",\"popupFullScreen\":\"Цял екран (IE)\",\"popupLeft\":\"Лява позиция\",\"popupLocationBar\":\"Лента с локацията\",\"popupMenuBar\":\"Лента за меню\",\"popupResizable\":\"Оразмеряем\",\"popupScrollBars\":\"Скролери\",\"popupStatusBar\":\"Статусна лента\",\"popupToolbar\":\"Лента с инструменти\",\"popupTop\":\"Горна позиция\",\"rel\":\"Връзка\",\"selectAnchor\":\"Изберете котва\",\"styles\":\"Стил\",\"tabIndex\":\"Ред на достъп\",\"target\":\"Цел\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Име на целевият прозорец\",\"targetPopup\":\"<изкачащ прозорец>\",\"targetPopupName\":\"Име на изкачащ прозорец\",\"title\":\"Връзка\",\"toAnchor\":\"Връзка към котва в текста\",\"toEmail\":\"E-mail\",\"toUrl\":\"Уеб адрес\",\"toolbar\":\"Връзка\",\"type\":\"Тип на връзката\",\"unlink\":\"Премахни връзката\",\"upload\":\"Качване\"},\"list\":{\"bulletedlist\":\"Вмъкване/Премахване на точков списък\",\"numberedlist\":\"Вмъкване/Премахване на номериран списък\"},\"magicline\":{\"title\":\"Вмъкнете параграф тук\"},\"maximize\":{\"maximize\":\"Максимизиране\",\"minimize\":\"Минимизиране\"},\"pastetext\":{\"button\":\"Вмъкни като чист текст\",\"title\":\"Вмъкни като чист текст\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"Вмъкни от MS Word\",\"toolbar\":\"Вмъкни от MS Word\"},\"removeformat\":{\"toolbar\":\"Премахване на форматирането\"},\"sourcearea\":{\"toolbar\":\"Изходен код\"},\"specialchar\":{\"options\":\"Опции за специален знак\",\"title\":\"Избор на специален знак\",\"toolbar\":\"Вмъкване на специален знак\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Речници\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Стилове\",\"panelTitle\":\"Стилове за форматиране\",\"panelTitle1\":\"Блокови стилове\",\"panelTitle2\":\"Вътрешни стилове\",\"panelTitle3\":\"Обектни стилове\"},\"table\":{\"border\":\"Размер на рамката\",\"caption\":\"Заглавие\",\"cell\":{\"menu\":\"Клетка\",\"insertBefore\":\"Вмъкване на клетка преди\",\"insertAfter\":\"Вмъкване на клетка след\",\"deleteCell\":\"Изтриване на клетки\",\"merge\":\"Сливане на клетки\",\"mergeRight\":\"Сливане в дясно\",\"mergeDown\":\"Merge Down\",\"splitHorizontal\":\"Split Cell Horizontally\",\"splitVertical\":\"Split Cell Vertically\",\"title\":\"Настройки на клетката\",\"cellType\":\"Тип на клетката\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Авто. пренос\",\"hAlign\":\"Хоризонтално подравняване\",\"vAlign\":\"Вертикално подравняване\",\"alignBaseline\":\"Базова линия\",\"bgColor\":\"Фон\",\"borderColor\":\"Цвят на рамката\",\"data\":\"Данни\",\"header\":\"Хедър\",\"yes\":\"Да\",\"no\":\"Не\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Изберете\"},\"cellPad\":\"Отделяне на клетките\",\"cellSpace\":\"Разтояние между клетките\",\"column\":{\"menu\":\"Колона\",\"insertBefore\":\"Вмъкване на колона преди\",\"insertAfter\":\"Вмъкване на колона след\",\"deleteColumn\":\"Изтриване на колони\"},\"columns\":\"Колони\",\"deleteTable\":\"Изтриване на таблица\",\"headers\":\"Хедъри\",\"headersBoth\":\"Заедно\",\"headersColumn\":\"Първа колона\",\"headersNone\":\"Няма\",\"headersRow\":\"Първи ред\",\"invalidBorder\":\"Размерът на рамката трябва да е число.\",\"invalidCellPadding\":\"Отстоянието на клетките трябва да е позитивно число.\",\"invalidCellSpacing\":\"Интервала в клетките трябва да е позитивно число.\",\"invalidCols\":\"Броят колони трябва да е по-голям от 0.\",\"invalidHeight\":\"Височината на таблицата трябва да е число.\",\"invalidRows\":\"Броят редове трябва да е по-голям от 0.\",\"invalidWidth\":\"Ширината на таблицата трябва да е число.\",\"menu\":\"Настройки на таблицата\",\"row\":{\"menu\":\"Ред\",\"insertBefore\":\"Вмъкване на ред преди\",\"insertAfter\":\"Вмъкване на ред след\",\"deleteRow\":\"Изтриване на редове\"},\"rows\":\"Редове\",\"summary\":\"Обща информация\",\"title\":\"Настройки на таблицата\",\"toolbar\":\"Таблица\",\"widthPc\":\"процент\",\"widthPx\":\"пиксела\",\"widthUnit\":\"единица за ширина\"},\"undo\":{\"redo\":\"Връщане на предишен статус\",\"undo\":\"Възтанови\"},\"wsc\":{\"btnIgnore\":\"Игнорирай\",\"btnIgnoreAll\":\"Игнорирай всичко\",\"btnReplace\":\"Препокриване\",\"btnReplaceAll\":\"Препокрий всичко\",\"btnUndo\":\"Възтанови\",\"changeTo\":\"Промени на\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Spell checker not installed. Do you want to download it now?\",\"manyChanges\":\"Spell check complete: %1 words changed\",\"noChanges\":\"Spell check complete: No words changed\",\"noMispell\":\"Spell check complete: No misspellings found\",\"noSuggestions\":\"- Няма препоръчани -\",\"notAvailable\":\"Съжаляваме, но услугата не е достъпна за момента\",\"notInDic\":\"Не е в речника\",\"oneChange\":\"Spell check complete: One word changed\",\"progress\":\"Проверява се правописа...\",\"title\":\"Проверка на правопис\",\"toolbar\":\"Проверка на правопис\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/bn.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['bn']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Press ALT 0 for help\",\"browseServer\":\"ব্রাউজ সার্ভার\",\"url\":\"URL\",\"protocol\":\"প্রোটোকল\",\"upload\":\"আপলোড\",\"uploadSubmit\":\"ইহাকে সার্ভারে প্রেরন কর\",\"image\":\"ছবির লেবেল যুক্ত কর\",\"flash\":\"ফ্লাশ লেবেল যুক্ত কর\",\"form\":\"ফর্ম\",\"checkbox\":\"চেক বাক্স\",\"radio\":\"রেডিও বাটন\",\"textField\":\"টেক্সট ফীল্ড\",\"textarea\":\"টেক্সট এরিয়া\",\"hiddenField\":\"গুপ্ত ফীল্ড\",\"button\":\"বাটন\",\"select\":\"বাছাই ফীল্ড\",\"imageButton\":\"ছবির বাটন\",\"notSet\":\"<সেট নেই>\",\"id\":\"আইডি\",\"name\":\"নাম\",\"langDir\":\"ভাষা লেখার দিক\",\"langDirLtr\":\"বাম থেকে ডান (LTR)\",\"langDirRtl\":\"ডান থেকে বাম (RTL)\",\"langCode\":\"ভাষা কোড\",\"longDescr\":\"URL এর লম্বা বর্ণনা\",\"cssClass\":\"স্টাইল-শীট ক্লাস\",\"advisoryTitle\":\"পরামর্শ শীর্ষক\",\"cssStyle\":\"স্টাইল\",\"ok\":\"ওকে\",\"cancel\":\"বাতিল\",\"close\":\"Close\",\"preview\":\"প্রিভিউ\",\"resize\":\"Resize\",\"generalTab\":\"General\",\"advancedTab\":\"এডভান্সড\",\"validateNumberFailed\":\"This value is not a number.\",\"confirmNewPage\":\"Any unsaved changes to this content will be lost. Are you sure you want to load new page?\",\"confirmCancel\":\"You have changed some options. Are you sure you want to close the dialog window?\",\"options\":\"Options\",\"target\":\"টার্গেট\",\"targetNew\":\"New Window (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"Same Window (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"বাম থেকে ডান (LTR)\",\"langDirRTL\":\"ডান থেকে বাম (RTL)\",\"styles\":\"স্টাইল\",\"cssClasses\":\"স্টাইল-শীট ক্লাস\",\"width\":\"প্রস্থ\",\"height\":\"দৈর্ঘ্য\",\"align\":\"এলাইন\",\"alignLeft\":\"বামে\",\"alignRight\":\"ডানে\",\"alignCenter\":\"মাঝখানে\",\"alignJustify\":\"ব্লক জাস্টিফাই\",\"alignTop\":\"উপর\",\"alignMiddle\":\"মধ্য\",\"alignBottom\":\"নীচে\",\"alignNone\":\"None\",\"invalidValue\":\"Invalid value.\",\"invalidHeight\":\"Height must be a number.\",\"invalidWidth\":\"Width must be a number.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"About CKEditor\",\"help\":\"Check $1 for help.\",\"moreInfo\":\"For licensing information please visit our web site:\",\"title\":\"About CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"বোল্ড\",\"italic\":\"ইটালিক\",\"strike\":\"স্ট্রাইক থ্রু\",\"subscript\":\"অধোলেখ\",\"superscript\":\"অভিলেখ\",\"underline\":\"আন্ডারলাইন\"},\"blockquote\":{\"toolbar\":\"Block Quote\"},\"clipboard\":{\"copy\":\"কপি\",\"copyError\":\"আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কপি করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+C)।\",\"cut\":\"কাট\",\"cutError\":\"আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+X)।\",\"paste\":\"পেস্ট\",\"pasteArea\":\"Paste Area\",\"pasteMsg\":\"অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (<STRONG>Ctrl/Cmd+V</STRONG>) পেস্ট করুন এবং <STRONG>OK</STRONG> চাপ দিন\",\"securityMsg\":\"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.\",\"title\":\"পেস্ট\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Collapse Toolbar\",\"toolbarExpand\":\"Expand Toolbar\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"Editor toolbars\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"ফন্ট ফরমেট\",\"panelTitle\":\"ফন্ট ফরমেট\",\"tag_address\":\"ঠিকানা\",\"tag_div\":\"শীর্ষক (DIV)\",\"tag_h1\":\"শীর্ষক ১\",\"tag_h2\":\"শীর্ষক ২\",\"tag_h3\":\"শীর্ষক ৩\",\"tag_h4\":\"শীর্ষক ৪\",\"tag_h5\":\"শীর্ষক ৫\",\"tag_h6\":\"শীর্ষক ৬\",\"tag_p\":\"সাধারণ\",\"tag_pre\":\"ফর্মেটেড\"},\"horizontalrule\":{\"toolbar\":\"রেখা যুক্ত কর\"},\"image\":{\"alt\":\"বিকল্প টেক্সট\",\"border\":\"বর্ডার\",\"btnUpload\":\"ইহাকে সার্ভারে প্রেরন কর\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"হরাইজন্টাল স্পেস\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"ছবির তথ্য\",\"linkTab\":\"লিংক\",\"lockRatio\":\"অনুপাত লক কর\",\"menu\":\"ছবির প্রোপার্টি\",\"resetSize\":\"সাইজ পূর্বাবস্থায় ফিরিয়ে দাও\",\"title\":\"ছবির প্রোপার্টি\",\"titleButton\":\"ছবি বাটন প্রোপার্টি\",\"upload\":\"আপলোড\",\"urlMissing\":\"Image source URL is missing.\",\"vSpace\":\"ভার্টিকেল স্পেস\",\"validateBorder\":\"Border must be a whole number.\",\"validateHSpace\":\"HSpace must be a whole number.\",\"validateVSpace\":\"VSpace must be a whole number.\"},\"indent\":{\"indent\":\"ইনডেন্ট বাড়াও\",\"outdent\":\"ইনডেন্ট কমাও\"},\"fakeobjects\":{\"anchor\":\"Anchor\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"Hidden Field\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"এক্সেস কী\",\"advanced\":\"এডভান্সড\",\"advisoryContentType\":\"পরামর্শ কন্টেন্টের প্রকার\",\"advisoryTitle\":\"পরামর্শ শীর্ষক\",\"anchor\":{\"toolbar\":\"নোঙ্গর\",\"menu\":\"নোঙর প্রোপার্টি\",\"title\":\"নোঙর প্রোপার্টি\",\"name\":\"নোঙরের নাম\",\"errorName\":\"নোঙরের নাম টাইপ করুন\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"নোঙরের আইডি দিয়ে\",\"anchorName\":\"নোঙরের নাম দিয়ে\",\"charset\":\"লিংক রিসোর্স ক্যারেক্টর সেট\",\"cssClasses\":\"স্টাইল-শীট ক্লাস\",\"emailAddress\":\"ইমেইল ঠিকানা\",\"emailBody\":\"মেসেজের দেহ\",\"emailSubject\":\"মেসেজের বিষয়\",\"id\":\"আইডি\",\"info\":\"লিংক তথ্য\",\"langCode\":\"ভাষা লেখার দিক\",\"langDir\":\"ভাষা লেখার দিক\",\"langDirLTR\":\"বাম থেকে ডান (LTR)\",\"langDirRTL\":\"ডান থেকে বাম (RTL)\",\"menu\":\"লিংক সম্পাদন\",\"name\":\"নাম\",\"noAnchors\":\"(No anchors available in the document)\",\"noEmail\":\"অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন\",\"noUrl\":\"অনুগ্রহ করে URL লিংক টাইপ করুন\",\"other\":\"<other>\",\"popupDependent\":\"ডিপেন্ডেন্ট (Netscape)\",\"popupFeatures\":\"পপআপ উইন্ডো ফীচার সমূহ\",\"popupFullScreen\":\"পূর্ণ পর্দা জুড়ে (IE)\",\"popupLeft\":\"বামের পজিশন\",\"popupLocationBar\":\"লোকেশন বার\",\"popupMenuBar\":\"মেন্যু বার\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"স্ক্রল বার\",\"popupStatusBar\":\"স্ট্যাটাস বার\",\"popupToolbar\":\"টুল বার\",\"popupTop\":\"ডানের পজিশন\",\"rel\":\"Relationship\",\"selectAnchor\":\"নোঙর বাছাই\",\"styles\":\"স্টাইল\",\"tabIndex\":\"ট্যাব ইন্ডেক্স\",\"target\":\"টার্গেট\",\"targetFrame\":\"<ফ্রেম>\",\"targetFrameName\":\"টার্গেট ফ্রেমের নাম\",\"targetPopup\":\"<পপআপ উইন্ডো>\",\"targetPopupName\":\"পপআপ উইন্ডোর নাম\",\"title\":\"লিংক\",\"toAnchor\":\"এই পেজে নোঙর কর\",\"toEmail\":\"ইমেইল\",\"toUrl\":\"URL\",\"toolbar\":\"লিংক যুক্ত কর\",\"type\":\"লিংক প্রকার\",\"unlink\":\"লিংক সরাও\",\"upload\":\"আপলোড\"},\"list\":{\"bulletedlist\":\"বুলেট লিস্ট লেবেল\",\"numberedlist\":\"সাংখ্যিক লিস্টের লেবেল\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Maximize\",\"minimize\":\"Minimize\"},\"pastetext\":{\"button\":\"সাদা টেক্সট হিসেবে পেস্ট কর\",\"title\":\"সাদা টেক্সট হিসেবে পেস্ট কর\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"পেস্ট (শব্দ)\",\"toolbar\":\"পেস্ট (শব্দ)\"},\"removeformat\":{\"toolbar\":\"ফরমেট সরাও\"},\"sourcearea\":{\"toolbar\":\"সোর্স\"},\"specialchar\":{\"options\":\"Special Character Options\",\"title\":\"বিশেষ ক্যারেক্টার বাছাই কর\",\"toolbar\":\"বিশেষ অক্ষর যুক্ত কর\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"স্টাইল\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"বর্ডার সাইজ\",\"caption\":\"শীর্ষক\",\"cell\":{\"menu\":\"সেল\",\"insertBefore\":\"Insert Cell Before\",\"insertAfter\":\"Insert Cell After\",\"deleteCell\":\"সেল মুছে দাও\",\"merge\":\"সেল জোড়া দাও\",\"mergeRight\":\"Merge Right\",\"mergeDown\":\"Merge Down\",\"splitHorizontal\":\"Split Cell Horizontally\",\"splitVertical\":\"Split Cell Vertically\",\"title\":\"Cell Properties\",\"cellType\":\"Cell Type\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Horizontal Alignment\",\"vAlign\":\"Vertical Alignment\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Background Color\",\"borderColor\":\"Border Color\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Yes\",\"no\":\"No\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Choose\"},\"cellPad\":\"সেল প্যাডিং\",\"cellSpace\":\"সেল স্পেস\",\"column\":{\"menu\":\"কলাম\",\"insertBefore\":\"Insert Column Before\",\"insertAfter\":\"Insert Column After\",\"deleteColumn\":\"কলাম মুছে দাও\"},\"columns\":\"কলাম\",\"deleteTable\":\"টেবিল ডিলীট কর\",\"headers\":\"Headers\",\"headersBoth\":\"Both\",\"headersColumn\":\"First column\",\"headersNone\":\"None\",\"headersRow\":\"First Row\",\"invalidBorder\":\"Border size must be a number.\",\"invalidCellPadding\":\"Cell padding must be a positive number.\",\"invalidCellSpacing\":\"Cell spacing must be a positive number.\",\"invalidCols\":\"Number of columns must be a number greater than 0.\",\"invalidHeight\":\"Table height must be a number.\",\"invalidRows\":\"Number of rows must be a number greater than 0.\",\"invalidWidth\":\"Table width must be a number.\",\"menu\":\"টেবিল প্রোপার্টি\",\"row\":{\"menu\":\"রো\",\"insertBefore\":\"Insert Row Before\",\"insertAfter\":\"Insert Row After\",\"deleteRow\":\"রো মুছে দাও\"},\"rows\":\"রো\",\"summary\":\"সারাংশ\",\"title\":\"টেবিল প্রোপার্টি\",\"toolbar\":\"টেবিলের লেবেল যুক্ত কর\",\"widthPc\":\"শতকরা\",\"widthPx\":\"পিক্সেল\",\"widthUnit\":\"width unit\"},\"undo\":{\"redo\":\"রি-ডু\",\"undo\":\"আনডু\"},\"wsc\":{\"btnIgnore\":\"ইগনোর কর\",\"btnIgnoreAll\":\"সব ইগনোর কর\",\"btnReplace\":\"বদলে দাও\",\"btnReplaceAll\":\"সব বদলে দাও\",\"btnUndo\":\"আন্ডু\",\"changeTo\":\"এতে বদলাও\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"বানান পরীক্ষক ইনস্টল করা নেই। আপনি কি এখনই এটা ডাউনলোড করতে চান?\",\"manyChanges\":\"বানান পরীক্ষা শেষ: %1 গুলো শব্দ বদলে গ্যাছে\",\"noChanges\":\"বানান পরীক্ষা শেষ: কোন শব্দ পরিবর্তন করা হয়নি\",\"noMispell\":\"বানান পরীক্ষা শেষ: কোন ভুল বানান পাওয়া যায়নি\",\"noSuggestions\":\"- কোন সাজেশন নেই -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"শব্দকোষে নেই\",\"oneChange\":\"বানান পরীক্ষা শেষ: একটি মাত্র শব্দ পরিবর্তন করা হয়েছে\",\"progress\":\"বানান পরীক্ষা চলছে...\",\"title\":\"Spell Checker\",\"toolbar\":\"বানান চেক\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/bs.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['bs']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Press ALT 0 for help\",\"browseServer\":\"Browse Server\",\"url\":\"URL\",\"protocol\":\"Protokol\",\"upload\":\"Šalji\",\"uploadSubmit\":\"Šalji na server\",\"image\":\"Slika\",\"flash\":\"Flash\",\"form\":\"Form\",\"checkbox\":\"Checkbox\",\"radio\":\"Radio Button\",\"textField\":\"Text Field\",\"textarea\":\"Textarea\",\"hiddenField\":\"Hidden Field\",\"button\":\"Button\",\"select\":\"Selection Field\",\"imageButton\":\"Image Button\",\"notSet\":\"<nije podešeno>\",\"id\":\"Id\",\"name\":\"Naziv\",\"langDir\":\"Smjer pisanja\",\"langDirLtr\":\"S lijeva na desno (LTR)\",\"langDirRtl\":\"S desna na lijevo (RTL)\",\"langCode\":\"Jezièni kôd\",\"longDescr\":\"Dugaèki opis URL-a\",\"cssClass\":\"Klase CSS stilova\",\"advisoryTitle\":\"Advisory title\",\"cssStyle\":\"Stil\",\"ok\":\"OK\",\"cancel\":\"Odustani\",\"close\":\"Close\",\"preview\":\"Prikaži\",\"resize\":\"Resize\",\"generalTab\":\"General\",\"advancedTab\":\"Naprednije\",\"validateNumberFailed\":\"This value is not a number.\",\"confirmNewPage\":\"Any unsaved changes to this content will be lost. Are you sure you want to load new page?\",\"confirmCancel\":\"You have changed some options. Are you sure you want to close the dialog window?\",\"options\":\"Options\",\"target\":\"Prozor\",\"targetNew\":\"New Window (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"Same Window (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"S lijeva na desno (LTR)\",\"langDirRTL\":\"S desna na lijevo (RTL)\",\"styles\":\"Stil\",\"cssClasses\":\"Klase CSS stilova\",\"width\":\"Širina\",\"height\":\"Visina\",\"align\":\"Poravnanje\",\"alignLeft\":\"Lijevo\",\"alignRight\":\"Desno\",\"alignCenter\":\"Centar\",\"alignJustify\":\"Puno poravnanje\",\"alignTop\":\"Vrh\",\"alignMiddle\":\"Sredina\",\"alignBottom\":\"Dno\",\"alignNone\":\"None\",\"invalidValue\":\"Invalid value.\",\"invalidHeight\":\"Height must be a number.\",\"invalidWidth\":\"Width must be a number.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"About CKEditor\",\"help\":\"Check $1 for help.\",\"moreInfo\":\"For licensing information please visit our web site:\",\"title\":\"About CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"Boldiraj\",\"italic\":\"Ukosi\",\"strike\":\"Precrtaj\",\"subscript\":\"Subscript\",\"superscript\":\"Superscript\",\"underline\":\"Podvuci\"},\"blockquote\":{\"toolbar\":\"Block Quote\"},\"clipboard\":{\"copy\":\"Kopiraj\",\"copyError\":\"Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+C).\",\"cut\":\"Izreži\",\"cutError\":\"Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+X).\",\"paste\":\"Zalijepi\",\"pasteArea\":\"Paste Area\",\"pasteMsg\":\"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK\",\"securityMsg\":\"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.\",\"title\":\"Zalijepi\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Collapse Toolbar\",\"toolbarExpand\":\"Expand Toolbar\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"Editor toolbars\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Format\",\"tag_address\":\"Address\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Heading 1\",\"tag_h2\":\"Heading 2\",\"tag_h3\":\"Heading 3\",\"tag_h4\":\"Heading 4\",\"tag_h5\":\"Heading 5\",\"tag_h6\":\"Heading 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatted\"},\"horizontalrule\":{\"toolbar\":\"Ubaci horizontalnu liniju\"},\"image\":{\"alt\":\"Tekst na slici\",\"border\":\"Okvir\",\"btnUpload\":\"Šalji na server\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"Info slike\",\"linkTab\":\"Link\",\"lockRatio\":\"Zakljuèaj odnos\",\"menu\":\"Svojstva slike\",\"resetSize\":\"Resetuj dimenzije\",\"title\":\"Svojstva slike\",\"titleButton\":\"Image Button Properties\",\"upload\":\"Šalji\",\"urlMissing\":\"Image source URL is missing.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"Border must be a whole number.\",\"validateHSpace\":\"HSpace must be a whole number.\",\"validateVSpace\":\"VSpace must be a whole number.\"},\"indent\":{\"indent\":\"Poveæaj uvod\",\"outdent\":\"Smanji uvod\"},\"fakeobjects\":{\"anchor\":\"Anchor\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"Hidden Field\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"Pristupna tipka\",\"advanced\":\"Naprednije\",\"advisoryContentType\":\"Advisory vrsta sadržaja\",\"advisoryTitle\":\"Advisory title\",\"anchor\":{\"toolbar\":\"Anchor\",\"menu\":\"Edit Anchor\",\"title\":\"Anchor Properties\",\"name\":\"Anchor Name\",\"errorName\":\"Please type the anchor name\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"Po Id-u elementa\",\"anchorName\":\"Po nazivu sidra\",\"charset\":\"Linked Resource Charset\",\"cssClasses\":\"Klase CSS stilova\",\"emailAddress\":\"E-Mail Adresa\",\"emailBody\":\"Poruka\",\"emailSubject\":\"Subjekt poruke\",\"id\":\"Id\",\"info\":\"Link info\",\"langCode\":\"Smjer pisanja\",\"langDir\":\"Smjer pisanja\",\"langDirLTR\":\"S lijeva na desno (LTR)\",\"langDirRTL\":\"S desna na lijevo (RTL)\",\"menu\":\"Izmjeni link\",\"name\":\"Naziv\",\"noAnchors\":\"(Nema dostupnih sidra na stranici)\",\"noEmail\":\"Molimo ukucajte e-mail adresu\",\"noUrl\":\"Molimo ukucajte URL link\",\"other\":\"<other>\",\"popupDependent\":\"Ovisno (Netscape)\",\"popupFeatures\":\"Moguænosti popup prozora\",\"popupFullScreen\":\"Cijeli ekran (IE)\",\"popupLeft\":\"Lijeva pozicija\",\"popupLocationBar\":\"Traka za lokaciju\",\"popupMenuBar\":\"Izborna traka\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"Scroll traka\",\"popupStatusBar\":\"Statusna traka\",\"popupToolbar\":\"Traka sa alatima\",\"popupTop\":\"Gornja pozicija\",\"rel\":\"Relationship\",\"selectAnchor\":\"Izaberi sidro\",\"styles\":\"Stil\",\"tabIndex\":\"Tab indeks\",\"target\":\"Prozor\",\"targetFrame\":\"<frejm>\",\"targetFrameName\":\"Target Frame Name\",\"targetPopup\":\"<popup prozor>\",\"targetPopupName\":\"Naziv popup prozora\",\"title\":\"Link\",\"toAnchor\":\"Sidro na ovoj stranici\",\"toEmail\":\"E-Mail\",\"toUrl\":\"URL\",\"toolbar\":\"Ubaci/Izmjeni link\",\"type\":\"Tip linka\",\"unlink\":\"Izbriši link\",\"upload\":\"Šalji\"},\"list\":{\"bulletedlist\":\"Lista\",\"numberedlist\":\"Numerisana lista\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Maximize\",\"minimize\":\"Minimize\"},\"pastetext\":{\"button\":\"Zalijepi kao obièan tekst\",\"title\":\"Zalijepi kao obièan tekst\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"Zalijepi iz Word-a\",\"toolbar\":\"Zalijepi iz Word-a\"},\"removeformat\":{\"toolbar\":\"Poništi format\"},\"sourcearea\":{\"toolbar\":\"HTML kôd\"},\"specialchar\":{\"options\":\"Special Character Options\",\"title\":\"Izaberi specijalni karakter\",\"toolbar\":\"Ubaci specijalni karater\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Stil\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"Okvir\",\"caption\":\"Naslov\",\"cell\":{\"menu\":\"Cell\",\"insertBefore\":\"Insert Cell Before\",\"insertAfter\":\"Insert Cell After\",\"deleteCell\":\"Briši æelije\",\"merge\":\"Spoji æelije\",\"mergeRight\":\"Merge Right\",\"mergeDown\":\"Merge Down\",\"splitHorizontal\":\"Split Cell Horizontally\",\"splitVertical\":\"Split Cell Vertically\",\"title\":\"Cell Properties\",\"cellType\":\"Cell Type\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Horizontal Alignment\",\"vAlign\":\"Vertical Alignment\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Background Color\",\"borderColor\":\"Border Color\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Yes\",\"no\":\"No\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Choose\"},\"cellPad\":\"Uvod æelija\",\"cellSpace\":\"Razmak æelija\",\"column\":{\"menu\":\"Column\",\"insertBefore\":\"Insert Column Before\",\"insertAfter\":\"Insert Column After\",\"deleteColumn\":\"Briši kolone\"},\"columns\":\"Kolona\",\"deleteTable\":\"Delete Table\",\"headers\":\"Headers\",\"headersBoth\":\"Both\",\"headersColumn\":\"First column\",\"headersNone\":\"None\",\"headersRow\":\"First Row\",\"invalidBorder\":\"Border size must be a number.\",\"invalidCellPadding\":\"Cell padding must be a positive number.\",\"invalidCellSpacing\":\"Cell spacing must be a positive number.\",\"invalidCols\":\"Number of columns must be a number greater than 0.\",\"invalidHeight\":\"Table height must be a number.\",\"invalidRows\":\"Number of rows must be a number greater than 0.\",\"invalidWidth\":\"Table width must be a number.\",\"menu\":\"Svojstva tabele\",\"row\":{\"menu\":\"Row\",\"insertBefore\":\"Insert Row Before\",\"insertAfter\":\"Insert Row After\",\"deleteRow\":\"Briši redove\"},\"rows\":\"Redova\",\"summary\":\"Summary\",\"title\":\"Svojstva tabele\",\"toolbar\":\"Tabela\",\"widthPc\":\"posto\",\"widthPx\":\"piksela\",\"widthUnit\":\"width unit\"},\"undo\":{\"redo\":\"Ponovi\",\"undo\":\"Vrati\"},\"wsc\":{\"btnIgnore\":\"Ignore\",\"btnIgnoreAll\":\"Ignore All\",\"btnReplace\":\"Replace\",\"btnReplaceAll\":\"Replace All\",\"btnUndo\":\"Undo\",\"changeTo\":\"Change to\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Spell checker not installed. Do you want to download it now?\",\"manyChanges\":\"Spell check complete: %1 words changed\",\"noChanges\":\"Spell check complete: No words changed\",\"noMispell\":\"Spell check complete: No misspellings found\",\"noSuggestions\":\"- No suggestions -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Not in dictionary\",\"oneChange\":\"Spell check complete: One word changed\",\"progress\":\"Spell check in progress...\",\"title\":\"Spell Checker\",\"toolbar\":\"Check Spelling\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/ca.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['ca']={\"editor\":\"Editor de text enriquit\",\"editorPanel\":\"Panell de l'editor de text enriquit\",\"common\":{\"editorHelp\":\"Premeu ALT 0 per ajuda\",\"browseServer\":\"Veure servidor\",\"url\":\"URL\",\"protocol\":\"Protocol\",\"upload\":\"Puja\",\"uploadSubmit\":\"Envia-la al servidor\",\"image\":\"Imatge\",\"flash\":\"Flash\",\"form\":\"Formulari\",\"checkbox\":\"Casella de verificació\",\"radio\":\"Botó d'opció\",\"textField\":\"Camp de text\",\"textarea\":\"Àrea de text\",\"hiddenField\":\"Camp ocult\",\"button\":\"Botó\",\"select\":\"Camp de selecció\",\"imageButton\":\"Botó d'imatge\",\"notSet\":\"<no definit>\",\"id\":\"Id\",\"name\":\"Nom\",\"langDir\":\"Direcció de l'idioma\",\"langDirLtr\":\"D'esquerra a dreta (LTR)\",\"langDirRtl\":\"De dreta a esquerra (RTL)\",\"langCode\":\"Codi d'idioma\",\"longDescr\":\"Descripció llarga de la URL\",\"cssClass\":\"Classes del full d'estil\",\"advisoryTitle\":\"Títol consultiu\",\"cssStyle\":\"Estil\",\"ok\":\"D'acord\",\"cancel\":\"Cancel·la\",\"close\":\"Tanca\",\"preview\":\"Previsualitza\",\"resize\":\"Arrossegueu per redimensionar\",\"generalTab\":\"General\",\"advancedTab\":\"Avançat\",\"validateNumberFailed\":\"Aquest valor no és un número.\",\"confirmNewPage\":\"Els canvis en aquest contingut que no es desin es perdran. Esteu segur que voleu carregar una pàgina nova?\",\"confirmCancel\":\"Algunes opcions s'han canviat. Esteu segur que voleu tancar el quadre de diàleg?\",\"options\":\"Opcions\",\"target\":\"Destí\",\"targetNew\":\"Nova finestra (_blank)\",\"targetTop\":\"Finestra superior (_top)\",\"targetSelf\":\"Mateixa finestra (_self)\",\"targetParent\":\"Finestra pare (_parent)\",\"langDirLTR\":\"D'esquerra a dreta (LTR)\",\"langDirRTL\":\"De dreta a esquerra (RTL)\",\"styles\":\"Estil\",\"cssClasses\":\"Classes del full d'estil\",\"width\":\"Amplada\",\"height\":\"Alçada\",\"align\":\"Alineació\",\"alignLeft\":\"Ajusta a l'esquerra\",\"alignRight\":\"Ajusta a la dreta\",\"alignCenter\":\"Centre\",\"alignJustify\":\"Justificat\",\"alignTop\":\"Superior\",\"alignMiddle\":\"Centre\",\"alignBottom\":\"Inferior\",\"alignNone\":\"None\",\"invalidValue\":\"Valor no vàlid.\",\"invalidHeight\":\"L'alçada ha de ser un número.\",\"invalidWidth\":\"L'amplada ha de ser un número.\",\"invalidCssLength\":\"El valor especificat per als \\\"%1\\\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).\",\"invalidHtmlLength\":\"El valor especificat per als \\\"%1\\\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida d'HTML (px o %).\",\"invalidInlineStyle\":\"El valor especificat per l'estil en línia ha de constar d'una o més tuples amb el format \\\"name: value\\\", separats per punt i coma.\",\"cssLengthTooltip\":\"Introduïu un número per un valor en píxels o un número amb una unitat vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, no disponible</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Tots els drets reservats.\",\"dlgTitle\":\"Quant al CKEditor\",\"help\":\"Premi $1 per obtenir ajuda.\",\"moreInfo\":\"Per informació sobre llicències visiteu el nostre lloc web:\",\"title\":\"Quant al CKEditor\",\"userGuide\":\"Manual d'usuari de CKEditor\"},\"basicstyles\":{\"bold\":\"Negreta\",\"italic\":\"Cursiva\",\"strike\":\"Ratllat\",\"subscript\":\"Subíndex\",\"superscript\":\"Superíndex\",\"underline\":\"Subratllat\"},\"blockquote\":{\"toolbar\":\"Bloc de cita\"},\"clipboard\":{\"copy\":\"Copiar\",\"copyError\":\"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+C).\",\"cut\":\"Retallar\",\"cutError\":\"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+X).\",\"paste\":\"Enganxar\",\"pasteArea\":\"Àrea d'enganxat\",\"pasteMsg\":\"Si us plau, enganxi dins del següent camp utilitzant el teclat (<strong>Ctrl/Cmd+V</strong>) i premi OK.\",\"securityMsg\":\"A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir a les dades del porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.\",\"title\":\"Enganxar\"},\"contextmenu\":{\"options\":\"Opcions del menú contextual\"},\"button\":{\"selectedLabel\":\"%1 (Seleccionat)\"},\"toolbar\":{\"toolbarCollapse\":\"Redueix la barra d'eines\",\"toolbarExpand\":\"Amplia la barra d'eines\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"Editor de barra d'eines\"},\"elementspath\":{\"eleLabel\":\"Ruta dels elements\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Format\",\"tag_address\":\"Adreça\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Encapçalament 1\",\"tag_h2\":\"Encapçalament 2\",\"tag_h3\":\"Encapçalament 3\",\"tag_h4\":\"Encapçalament 4\",\"tag_h5\":\"Encapçalament 5\",\"tag_h6\":\"Encapçalament 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatejat\"},\"horizontalrule\":{\"toolbar\":\"Insereix línia horitzontal\"},\"image\":{\"alt\":\"Text alternatiu\",\"border\":\"Vora\",\"btnUpload\":\"Envia-la al servidor\",\"button2Img\":\"Voleu transformar el botó d'imatge seleccionat en una simple imatge?\",\"hSpace\":\"Espaiat horit.\",\"img2Button\":\"Voleu transformar la imatge seleccionada en un botó d'imatge?\",\"infoTab\":\"Informació de la imatge\",\"linkTab\":\"Enllaç\",\"lockRatio\":\"Bloqueja les proporcions\",\"menu\":\"Propietats de la imatge\",\"resetSize\":\"Restaura la mida\",\"title\":\"Propietats de la imatge\",\"titleButton\":\"Propietats del botó d'imatge\",\"upload\":\"Puja\",\"urlMissing\":\"Falta la URL de la imatge.\",\"vSpace\":\"Espaiat vert.\",\"validateBorder\":\"La vora ha de ser un nombre enter.\",\"validateHSpace\":\"HSpace ha de ser un nombre enter.\",\"validateVSpace\":\"VSpace ha de ser un nombre enter.\"},\"indent\":{\"indent\":\"Augmenta el sagnat\",\"outdent\":\"Redueix el sagnat\"},\"fakeobjects\":{\"anchor\":\"Àncora\",\"flash\":\"Animació Flash\",\"hiddenfield\":\"Camp ocult\",\"iframe\":\"IFrame\",\"unknown\":\"Objecte desconegut\"},\"link\":{\"acccessKey\":\"Clau d'accés\",\"advanced\":\"Avançat\",\"advisoryContentType\":\"Tipus de contingut consultiu\",\"advisoryTitle\":\"Títol consultiu\",\"anchor\":{\"toolbar\":\"Insereix/Edita àncora\",\"menu\":\"Propietats de l'àncora\",\"title\":\"Propietats de l'àncora\",\"name\":\"Nom de l'àncora\",\"errorName\":\"Si us plau, escriviu el nom de l'ancora\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"Per Id d'element\",\"anchorName\":\"Per nom d'àncora\",\"charset\":\"Conjunt de caràcters font enllaçat\",\"cssClasses\":\"Classes del full d'estil\",\"emailAddress\":\"Adreça de correu electrònic\",\"emailBody\":\"Cos del missatge\",\"emailSubject\":\"Assumpte del missatge\",\"id\":\"Id\",\"info\":\"Informació de l'enllaç\",\"langCode\":\"Direcció de l'idioma\",\"langDir\":\"Direcció de l'idioma\",\"langDirLTR\":\"D'esquerra a dreta (LTR)\",\"langDirRTL\":\"De dreta a esquerra (RTL)\",\"menu\":\"Edita l'enllaç\",\"name\":\"Nom\",\"noAnchors\":\"(No hi ha àncores disponibles en aquest document)\",\"noEmail\":\"Si us plau, escrigui l'adreça correu electrònic\",\"noUrl\":\"Si us plau, escrigui l'enllaç URL\",\"other\":\"<altre>\",\"popupDependent\":\"Depenent (Netscape)\",\"popupFeatures\":\"Característiques finestra popup\",\"popupFullScreen\":\"Pantalla completa (IE)\",\"popupLeft\":\"Posició esquerra\",\"popupLocationBar\":\"Barra d'adreça\",\"popupMenuBar\":\"Barra de menú\",\"popupResizable\":\"Redimensionable\",\"popupScrollBars\":\"Barres d'scroll\",\"popupStatusBar\":\"Barra d'estat\",\"popupToolbar\":\"Barra d'eines\",\"popupTop\":\"Posició dalt\",\"rel\":\"Relació\",\"selectAnchor\":\"Selecciona una àncora\",\"styles\":\"Estil\",\"tabIndex\":\"Index de Tab\",\"target\":\"Destí\",\"targetFrame\":\"<marc>\",\"targetFrameName\":\"Nom del marc de destí\",\"targetPopup\":\"<finestra emergent>\",\"targetPopupName\":\"Nom finestra popup\",\"title\":\"Enllaç\",\"toAnchor\":\"Àncora en aquesta pàgina\",\"toEmail\":\"Correu electrònic\",\"toUrl\":\"URL\",\"toolbar\":\"Insereix/Edita enllaç\",\"type\":\"Tipus d'enllaç\",\"unlink\":\"Elimina l'enllaç\",\"upload\":\"Puja\"},\"list\":{\"bulletedlist\":\"Llista de pics\",\"numberedlist\":\"Llista numerada\"},\"magicline\":{\"title\":\"Insereix el paràgraf aquí\"},\"maximize\":{\"maximize\":\"Maximitza\",\"minimize\":\"Minimitza\"},\"pastetext\":{\"button\":\"Enganxa com a text no formatat\",\"title\":\"Enganxa com a text no formatat\"},\"pastefromword\":{\"confirmCleanup\":\"El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?\",\"error\":\"No ha estat possible netejar les dades enganxades degut a un error intern\",\"title\":\"Enganxa des del Word\",\"toolbar\":\"Enganxa des del Word\"},\"removeformat\":{\"toolbar\":\"Elimina Format\"},\"sourcearea\":{\"toolbar\":\"Codi font\"},\"specialchar\":{\"options\":\"Opcions de caràcters especials\",\"title\":\"Selecciona el caràcter especial\",\"toolbar\":\"Insereix caràcter especial\"},\"scayt\":{\"btn_about\":\"Quant a l'SCAYT\",\"btn_dictionaries\":\"Diccionaris\",\"btn_disable\":\"Deshabilita SCAYT\",\"btn_enable\":\"Habilitat l'SCAYT\",\"btn_langs\":\"Idiomes\",\"btn_options\":\"Opcions\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Estil\",\"panelTitle\":\"Estils de format\",\"panelTitle1\":\"Estils de bloc\",\"panelTitle2\":\"Estils incrustats\",\"panelTitle3\":\"Estils d'objecte\"},\"table\":{\"border\":\"Mida vora\",\"caption\":\"Títol\",\"cell\":{\"menu\":\"Cel·la\",\"insertBefore\":\"Insereix abans\",\"insertAfter\":\"Insereix després\",\"deleteCell\":\"Suprimeix\",\"merge\":\"Fusiona\",\"mergeRight\":\"Fusiona a la dreta\",\"mergeDown\":\"Fusiona avall\",\"splitHorizontal\":\"Divideix horitzontalment\",\"splitVertical\":\"Divideix verticalment\",\"title\":\"Propietats de la cel·la\",\"cellType\":\"Tipus de cel·la\",\"rowSpan\":\"Expansió de files\",\"colSpan\":\"Expansió de columnes\",\"wordWrap\":\"Ajustar al contingut\",\"hAlign\":\"Alineació Horizontal\",\"vAlign\":\"Alineació Vertical\",\"alignBaseline\":\"A la línia base\",\"bgColor\":\"Color de fons\",\"borderColor\":\"Color de la vora\",\"data\":\"Dades\",\"header\":\"Capçalera\",\"yes\":\"Sí\",\"no\":\"No\",\"invalidWidth\":\"L'amplada de cel·la ha de ser un nombre.\",\"invalidHeight\":\"L'alçada de cel·la ha de ser un nombre.\",\"invalidRowSpan\":\"L'expansió de files ha de ser un nombre enter.\",\"invalidColSpan\":\"L'expansió de columnes ha de ser un nombre enter.\",\"chooseColor\":\"Trieu\"},\"cellPad\":\"Encoixinament de cel·les\",\"cellSpace\":\"Espaiat de cel·les\",\"column\":{\"menu\":\"Columna\",\"insertBefore\":\"Insereix columna abans de\",\"insertAfter\":\"Insereix columna darrera\",\"deleteColumn\":\"Suprimeix una columna\"},\"columns\":\"Columnes\",\"deleteTable\":\"Suprimeix la taula\",\"headers\":\"Capçaleres\",\"headersBoth\":\"Ambdues\",\"headersColumn\":\"Primera columna\",\"headersNone\":\"Cap\",\"headersRow\":\"Primera fila\",\"invalidBorder\":\"El gruix de la vora ha de ser un nombre.\",\"invalidCellPadding\":\"L'encoixinament de cel·la  ha de ser un nombre.\",\"invalidCellSpacing\":\"L'espaiat de cel·la  ha de ser un nombre.\",\"invalidCols\":\"El nombre de columnes ha de ser un nombre major que 0.\",\"invalidHeight\":\"L'alçada de la taula  ha de ser un nombre.\",\"invalidRows\":\"El nombre de files ha de ser un nombre major que 0.\",\"invalidWidth\":\"L'amplada de la taula  ha de ser un nombre.\",\"menu\":\"Propietats de la taula\",\"row\":{\"menu\":\"Fila\",\"insertBefore\":\"Insereix fila abans de\",\"insertAfter\":\"Insereix fila darrera\",\"deleteRow\":\"Suprimeix una fila\"},\"rows\":\"Files\",\"summary\":\"Resum\",\"title\":\"Propietats de la taula\",\"toolbar\":\"Taula\",\"widthPc\":\"percentatge\",\"widthPx\":\"píxels\",\"widthUnit\":\"unitat d'amplada\"},\"undo\":{\"redo\":\"Refés\",\"undo\":\"Desfés\"},\"wsc\":{\"btnIgnore\":\"Ignora\",\"btnIgnoreAll\":\"Ignora-les totes\",\"btnReplace\":\"Canvia\",\"btnReplaceAll\":\"Canvia-les totes\",\"btnUndo\":\"Desfés\",\"changeTo\":\"Reemplaça amb\",\"errorLoading\":\"Error carregant el servidor: %s.\",\"ieSpellDownload\":\"Verificació ortogràfica no instal·lada. Voleu descarregar-ho ara?\",\"manyChanges\":\"Verificació ortogràfica: s'han canviat %1 paraules\",\"noChanges\":\"Verificació ortogràfica: no s'ha canviat cap paraula\",\"noMispell\":\"Verificació ortogràfica acabada: no hi ha cap paraula mal escrita\",\"noSuggestions\":\"Cap suggeriment\",\"notAvailable\":\"El servei no es troba disponible ara.\",\"notInDic\":\"No és al diccionari\",\"oneChange\":\"Verificació ortogràfica: s'ha canviat una paraula\",\"progress\":\"Verificació ortogràfica en curs...\",\"title\":\"Comprova l'ortografia\",\"toolbar\":\"Revisa l'ortografia\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/cs.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['cs']={\"editor\":\"Textový editor\",\"editorPanel\":\"Panel textového editoru\",\"common\":{\"editorHelp\":\"Stiskněte ALT 0 pro nápovědu\",\"browseServer\":\"Vybrat na serveru\",\"url\":\"URL\",\"protocol\":\"Protokol\",\"upload\":\"Odeslat\",\"uploadSubmit\":\"Odeslat na server\",\"image\":\"Obrázek\",\"flash\":\"Flash\",\"form\":\"Formulář\",\"checkbox\":\"Zaškrtávací políčko\",\"radio\":\"Přepínač\",\"textField\":\"Textové pole\",\"textarea\":\"Textová oblast\",\"hiddenField\":\"Skryté pole\",\"button\":\"Tlačítko\",\"select\":\"Seznam\",\"imageButton\":\"Obrázkové tlačítko\",\"notSet\":\"<nenastaveno>\",\"id\":\"Id\",\"name\":\"Jméno\",\"langDir\":\"Směr jazyka\",\"langDirLtr\":\"Zleva doprava (LTR)\",\"langDirRtl\":\"Zprava doleva (RTL)\",\"langCode\":\"Kód jazyka\",\"longDescr\":\"Dlouhý popis URL\",\"cssClass\":\"Třída stylu\",\"advisoryTitle\":\"Pomocný titulek\",\"cssStyle\":\"Styl\",\"ok\":\"OK\",\"cancel\":\"Zrušit\",\"close\":\"Zavřít\",\"preview\":\"Náhled\",\"resize\":\"Uchopit pro změnu velikosti\",\"generalTab\":\"Obecné\",\"advancedTab\":\"Rozšířené\",\"validateNumberFailed\":\"Zadaná hodnota není číselná.\",\"confirmNewPage\":\"Jakékoliv neuložené změny obsahu budou ztraceny. Skutečně chcete otevřít novou stránku?\",\"confirmCancel\":\"Některá z nastavení byla změněna. Skutečně chcete zavřít dialogové okno?\",\"options\":\"Nastavení\",\"target\":\"Cíl\",\"targetNew\":\"Nové okno (_blank)\",\"targetTop\":\"Okno nejvyšší úrovně (_top)\",\"targetSelf\":\"Stejné okno (_self)\",\"targetParent\":\"Rodičovské okno (_parent)\",\"langDirLTR\":\"Zleva doprava (LTR)\",\"langDirRTL\":\"Zprava doleva (RTL)\",\"styles\":\"Styly\",\"cssClasses\":\"Třídy stylů\",\"width\":\"Šířka\",\"height\":\"Výška\",\"align\":\"Zarovnání\",\"alignLeft\":\"Vlevo\",\"alignRight\":\"Vpravo\",\"alignCenter\":\"Na střed\",\"alignJustify\":\"Zarovnat do bloku\",\"alignTop\":\"Nahoru\",\"alignMiddle\":\"Na střed\",\"alignBottom\":\"Dolů\",\"alignNone\":\"Žádné\",\"invalidValue\":\"Neplatná hodnota.\",\"invalidHeight\":\"Zadaná výška musí být číslo.\",\"invalidWidth\":\"Šířka musí být číslo.\",\"invalidCssLength\":\"Hodnota určená pro pole \\\"%1\\\" musí být kladné číslo bez nebo s platnou jednotkou míry CSS (px, %, in, cm, mm, em, ex, pt, nebo pc).\",\"invalidHtmlLength\":\"Hodnota určená pro pole \\\"%1\\\" musí být kladné číslo bez nebo s platnou jednotkou míry HTML (px nebo %).\",\"invalidInlineStyle\":\"Hodnota určená pro řádkový styl se musí skládat z jedné nebo více n-tic ve formátu \\\"název : hodnota\\\", oddělené středníky\",\"cssLengthTooltip\":\"Zadejte číslo jako hodnotu v pixelech nebo číslo s platnou jednotkou CSS (px, %, v cm, mm, em, ex, pt, nebo pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, nedostupné</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"O aplikaci CKEditor\",\"help\":\"Prohlédněte si $1 pro nápovědu.\",\"moreInfo\":\"Pro informace o lincenci navštivte naši webovou stránku:\",\"title\":\"O aplikaci CKEditor\",\"userGuide\":\"Uživatelská příručka CKEditor\"},\"basicstyles\":{\"bold\":\"Tučné\",\"italic\":\"Kurzíva\",\"strike\":\"Přeškrtnuté\",\"subscript\":\"Dolní index\",\"superscript\":\"Horní index\",\"underline\":\"Podtržené\"},\"blockquote\":{\"toolbar\":\"Citace\"},\"clipboard\":{\"copy\":\"Kopírovat\",\"copyError\":\"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+C).\",\"cut\":\"Vyjmout\",\"cutError\":\"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+X).\",\"paste\":\"Vložit\",\"pasteArea\":\"Oblast vkládání\",\"pasteMsg\":\"Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.\",\"securityMsg\":\"Z důvodů nastavení bezpečnosti vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.\",\"title\":\"Vložit\"},\"contextmenu\":{\"options\":\"Nastavení kontextové nabídky\"},\"button\":{\"selectedLabel\":\"%1 (Vybráno)\"},\"toolbar\":{\"toolbarCollapse\":\"Skrýt panel nástrojů\",\"toolbarExpand\":\"Zobrazit panel nástrojů\",\"toolbarGroups\":{\"document\":\"Dokument\",\"clipboard\":\"Schránka/Zpět\",\"editing\":\"Úpravy\",\"forms\":\"Formuláře\",\"basicstyles\":\"Základní styly\",\"paragraph\":\"Odstavec\",\"links\":\"Odkazy\",\"insert\":\"Vložit\",\"styles\":\"Styly\",\"colors\":\"Barvy\",\"tools\":\"Nástroje\"},\"toolbars\":\"Panely nástrojů editoru\"},\"elementspath\":{\"eleLabel\":\"Cesta objektu\",\"eleTitle\":\"%1 objekt\"},\"format\":{\"label\":\"Formát\",\"panelTitle\":\"Formát\",\"tag_address\":\"Adresa\",\"tag_div\":\"Normální (DIV)\",\"tag_h1\":\"Nadpis 1\",\"tag_h2\":\"Nadpis 2\",\"tag_h3\":\"Nadpis 3\",\"tag_h4\":\"Nadpis 4\",\"tag_h5\":\"Nadpis 5\",\"tag_h6\":\"Nadpis 6\",\"tag_p\":\"Normální\",\"tag_pre\":\"Naformátováno\"},\"horizontalrule\":{\"toolbar\":\"Vložit vodorovnou linku\"},\"image\":{\"alt\":\"Alternativní text\",\"border\":\"Okraje\",\"btnUpload\":\"Odeslat na server\",\"button2Img\":\"Skutečně chcete převést zvolené obrázkové tlačítko na obyčejný obrázek?\",\"hSpace\":\"Horizontální mezera\",\"img2Button\":\"Skutečně chcete převést zvolený obrázek na obrázkové tlačítko?\",\"infoTab\":\"Informace o obrázku\",\"linkTab\":\"Odkaz\",\"lockRatio\":\"Zámek\",\"menu\":\"Vlastnosti obrázku\",\"resetSize\":\"Původní velikost\",\"title\":\"Vlastnosti obrázku\",\"titleButton\":\"Vlastností obrázkového tlačítka\",\"upload\":\"Odeslat\",\"urlMissing\":\"Zadané URL zdroje obrázku nebylo nalezeno.\",\"vSpace\":\"Vertikální mezera\",\"validateBorder\":\"Okraj musí být nastaven v celých číslech.\",\"validateHSpace\":\"Horizontální mezera musí být nastavena v celých číslech.\",\"validateVSpace\":\"Vertikální mezera musí být nastavena v celých číslech.\"},\"indent\":{\"indent\":\"Zvětšit odsazení\",\"outdent\":\"Zmenšit odsazení\"},\"fakeobjects\":{\"anchor\":\"Záložka\",\"flash\":\"Flash animace\",\"hiddenfield\":\"Skryté pole\",\"iframe\":\"IFrame\",\"unknown\":\"Neznámý objekt\"},\"link\":{\"acccessKey\":\"Přístupový klíč\",\"advanced\":\"Rozšířené\",\"advisoryContentType\":\"Pomocný typ obsahu\",\"advisoryTitle\":\"Pomocný titulek\",\"anchor\":{\"toolbar\":\"Záložka\",\"menu\":\"Vlastnosti záložky\",\"title\":\"Vlastnosti záložky\",\"name\":\"Název záložky\",\"errorName\":\"Zadejte prosím název záložky\",\"remove\":\"Odstranit záložku\"},\"anchorId\":\"Podle Id objektu\",\"anchorName\":\"Podle jména kotvy\",\"charset\":\"Přiřazená znaková sada\",\"cssClasses\":\"Třída stylu\",\"emailAddress\":\"E-mailová adresa\",\"emailBody\":\"Tělo zprávy\",\"emailSubject\":\"Předmět zprávy\",\"id\":\"Id\",\"info\":\"Informace o odkazu\",\"langCode\":\"Kód jazyka\",\"langDir\":\"Směr jazyka\",\"langDirLTR\":\"Zleva doprava (LTR)\",\"langDirRTL\":\"Zprava doleva (RTL)\",\"menu\":\"Změnit odkaz\",\"name\":\"Jméno\",\"noAnchors\":\"(Ve stránce není definována žádná kotva!)\",\"noEmail\":\"Zadejte prosím e-mailovou adresu\",\"noUrl\":\"Zadejte prosím URL odkazu\",\"other\":\"<jiný>\",\"popupDependent\":\"Závislost (Netscape)\",\"popupFeatures\":\"Vlastnosti vyskakovacího okna\",\"popupFullScreen\":\"Celá obrazovka (IE)\",\"popupLeft\":\"Levý okraj\",\"popupLocationBar\":\"Panel umístění\",\"popupMenuBar\":\"Panel nabídky\",\"popupResizable\":\"Umožňující měnit velikost\",\"popupScrollBars\":\"Posuvníky\",\"popupStatusBar\":\"Stavový řádek\",\"popupToolbar\":\"Panel nástrojů\",\"popupTop\":\"Horní okraj\",\"rel\":\"Vztah\",\"selectAnchor\":\"Vybrat kotvu\",\"styles\":\"Styl\",\"tabIndex\":\"Pořadí prvku\",\"target\":\"Cíl\",\"targetFrame\":\"<rámec>\",\"targetFrameName\":\"Název cílového rámu\",\"targetPopup\":\"<vyskakovací okno>\",\"targetPopupName\":\"Název vyskakovacího okna\",\"title\":\"Odkaz\",\"toAnchor\":\"Kotva v této stránce\",\"toEmail\":\"E-mail\",\"toUrl\":\"URL\",\"toolbar\":\"Odkaz\",\"type\":\"Typ odkazu\",\"unlink\":\"Odstranit odkaz\",\"upload\":\"Odeslat\"},\"list\":{\"bulletedlist\":\"Odrážky\",\"numberedlist\":\"Číslování\"},\"magicline\":{\"title\":\"zde vložit odstavec\"},\"maximize\":{\"maximize\":\"Maximalizovat\",\"minimize\":\"Minimalizovat\"},\"pastetext\":{\"button\":\"Vložit jako čistý text\",\"title\":\"Vložit jako čistý text\"},\"pastefromword\":{\"confirmCleanup\":\"Jak je vidět, vkládaný text je kopírován z Wordu. Chcete jej před vložením vyčistit?\",\"error\":\"Z důvodu vnitřní chyby nebylo možné provést vyčištění vkládaného textu.\",\"title\":\"Vložit z Wordu\",\"toolbar\":\"Vložit z Wordu\"},\"removeformat\":{\"toolbar\":\"Odstranit formátování\"},\"sourcearea\":{\"toolbar\":\"Zdroj\"},\"specialchar\":{\"options\":\"Nastavení speciálních znaků\",\"title\":\"Výběr speciálního znaku\",\"toolbar\":\"Vložit speciální znaky\"},\"scayt\":{\"btn_about\":\"O aplikaci SCAYT\",\"btn_dictionaries\":\"Slovníky\",\"btn_disable\":\"Vypnout SCAYT\",\"btn_enable\":\"Zapnout SCAYT\",\"btn_langs\":\"Jazyky\",\"btn_options\":\"Nastavení\",\"text_title\":\"Kontrola pravopisu během psaní (SCAYT)\"},\"stylescombo\":{\"label\":\"Styl\",\"panelTitle\":\"Formátovací styly\",\"panelTitle1\":\"Blokové styly\",\"panelTitle2\":\"Řádkové styly\",\"panelTitle3\":\"Objektové styly\"},\"table\":{\"border\":\"Ohraničení\",\"caption\":\"Popis\",\"cell\":{\"menu\":\"Buňka\",\"insertBefore\":\"Vložit buňku před\",\"insertAfter\":\"Vložit buňku za\",\"deleteCell\":\"Smazat buňky\",\"merge\":\"Sloučit buňky\",\"mergeRight\":\"Sloučit doprava\",\"mergeDown\":\"Sloučit dolů\",\"splitHorizontal\":\"Rozdělit buňky vodorovně\",\"splitVertical\":\"Rozdělit buňky svisle\",\"title\":\"Vlastnosti buňky\",\"cellType\":\"Typ buňky\",\"rowSpan\":\"Spojit řádky\",\"colSpan\":\"Spojit sloupce\",\"wordWrap\":\"Zalamování\",\"hAlign\":\"Vodorovné zarovnání\",\"vAlign\":\"Svislé zarovnání\",\"alignBaseline\":\"Na účaří\",\"bgColor\":\"Barva pozadí\",\"borderColor\":\"Barva okraje\",\"data\":\"Data\",\"header\":\"Hlavička\",\"yes\":\"Ano\",\"no\":\"Ne\",\"invalidWidth\":\"Šířka buňky musí být číslo.\",\"invalidHeight\":\"Zadaná výška buňky musí být číslená.\",\"invalidRowSpan\":\"Zadaný počet sloučených řádků musí být celé číslo.\",\"invalidColSpan\":\"Zadaný počet sloučených sloupců musí být celé číslo.\",\"chooseColor\":\"Výběr\"},\"cellPad\":\"Odsazení obsahu v buňce\",\"cellSpace\":\"Vzdálenost buněk\",\"column\":{\"menu\":\"Sloupec\",\"insertBefore\":\"Vložit sloupec před\",\"insertAfter\":\"Vložit sloupec za\",\"deleteColumn\":\"Smazat sloupec\"},\"columns\":\"Sloupce\",\"deleteTable\":\"Smazat tabulku\",\"headers\":\"Záhlaví\",\"headersBoth\":\"Obojí\",\"headersColumn\":\"První sloupec\",\"headersNone\":\"Žádné\",\"headersRow\":\"První řádek\",\"invalidBorder\":\"Zdaná velikost okraje musí být číselná.\",\"invalidCellPadding\":\"Zadané odsazení obsahu v buňce musí být číselné.\",\"invalidCellSpacing\":\"Zadaná vzdálenost buněk musí být číselná.\",\"invalidCols\":\"Počet sloupců musí být číslo větší než 0.\",\"invalidHeight\":\"Zadaná výška tabulky musí být číselná.\",\"invalidRows\":\"Počet řádků musí být číslo větší než 0.\",\"invalidWidth\":\"Šířka tabulky musí být číslo.\",\"menu\":\"Vlastnosti tabulky\",\"row\":{\"menu\":\"Řádek\",\"insertBefore\":\"Vložit řádek před\",\"insertAfter\":\"Vložit řádek za\",\"deleteRow\":\"Smazat řádky\"},\"rows\":\"Řádky\",\"summary\":\"Souhrn\",\"title\":\"Vlastnosti tabulky\",\"toolbar\":\"Tabulka\",\"widthPc\":\"procent\",\"widthPx\":\"bodů\",\"widthUnit\":\"jednotka šířky\"},\"undo\":{\"redo\":\"Znovu\",\"undo\":\"Zpět\"},\"wsc\":{\"btnIgnore\":\"Přeskočit\",\"btnIgnoreAll\":\"Přeskakovat vše\",\"btnReplace\":\"Zaměnit\",\"btnReplaceAll\":\"Zaměňovat vše\",\"btnUndo\":\"Zpět\",\"changeTo\":\"Změnit na\",\"errorLoading\":\"Chyba nahrávání služby aplikace z: %s.\",\"ieSpellDownload\":\"Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?\",\"manyChanges\":\"Kontrola pravopisu dokončena: %1 slov změněno\",\"noChanges\":\"Kontrola pravopisu dokončena: Beze změn\",\"noMispell\":\"Kontrola pravopisu dokončena: Žádné pravopisné chyby nenalezeny\",\"noSuggestions\":\"- žádné návrhy -\",\"notAvailable\":\"Omlouváme se, ale služba nyní není dostupná.\",\"notInDic\":\"Není ve slovníku\",\"oneChange\":\"Kontrola pravopisu dokončena: Jedno slovo změněno\",\"progress\":\"Probíhá kontrola pravopisu...\",\"title\":\"Kontrola pravopisu\",\"toolbar\":\"Zkontrolovat pravopis\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/cy.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['cy']={\"editor\":\"Golygydd Testun Cyfoethog\",\"editorPanel\":\"Panel Golygydd Testun Cyfoethog\",\"common\":{\"editorHelp\":\"Gwasgwch ALT 0 am gymorth\",\"browseServer\":\"Pori'r Gweinydd\",\"url\":\"URL\",\"protocol\":\"Protocol\",\"upload\":\"Lanlwytho\",\"uploadSubmit\":\"Anfon i'r Gweinydd\",\"image\":\"Delwedd\",\"flash\":\"Flash\",\"form\":\"Ffurflen\",\"checkbox\":\"Blwch ticio\",\"radio\":\"Botwm Radio\",\"textField\":\"Maes Testun\",\"textarea\":\"Ardal Testun\",\"hiddenField\":\"Maes Cudd\",\"button\":\"Botwm\",\"select\":\"Maes Dewis\",\"imageButton\":\"Botwm Delwedd\",\"notSet\":\"<heb osod>\",\"id\":\"Id\",\"name\":\"Name\",\"langDir\":\"Cyfeiriad Iaith\",\"langDirLtr\":\"Chwith i'r Dde (LTR)\",\"langDirRtl\":\"Dde i'r Chwith (RTL)\",\"langCode\":\"Cod Iaith\",\"longDescr\":\"URL Disgrifiad Hir\",\"cssClass\":\"Dosbarthiadau Dalen Arddull\",\"advisoryTitle\":\"Teitl Cynghorol\",\"cssStyle\":\"Arddull\",\"ok\":\"Iawn\",\"cancel\":\"Diddymu\",\"close\":\"Cau\",\"preview\":\"Rhagolwg\",\"resize\":\"Ailfeintio\",\"generalTab\":\"Cyffredinol\",\"advancedTab\":\"Uwch\",\"validateNumberFailed\":\"'Dyw'r gwerth hwn ddim yn rhif.\",\"confirmNewPage\":\"Byddwch chi'n colli unrhyw newidiadau i'r cynnwys sydd heb eu cadw. Ydych am barhau i lwytho tudalen newydd?\",\"confirmCancel\":\"Cafodd rhai o'r opsiynau eu newid. Ydych chi wir am gau'r deialog?\",\"options\":\"Opsiynau\",\"target\":\"Targed\",\"targetNew\":\"Ffenest Newydd (_blank)\",\"targetTop\":\"Ffenest ar y Brig (_top)\",\"targetSelf\":\"Yr un Ffenest (_self)\",\"targetParent\":\"Ffenest y Rhiant (_parent)\",\"langDirLTR\":\"Chwith i'r Dde (LTR)\",\"langDirRTL\":\"Dde i'r Chwith (RTL)\",\"styles\":\"Arddull\",\"cssClasses\":\"Dosbarthiadau Dalen Arddull\",\"width\":\"Lled\",\"height\":\"Uchder\",\"align\":\"Alinio\",\"alignLeft\":\"Chwith\",\"alignRight\":\"Dde\",\"alignCenter\":\"Canol\",\"alignJustify\":\"Unioni\",\"alignTop\":\"Brig\",\"alignMiddle\":\"Canol\",\"alignBottom\":\"Gwaelod\",\"alignNone\":\"None\",\"invalidValue\":\"Gwerth annilys.\",\"invalidHeight\":\"Mae'n rhaid i'r uchder fod yn rhif.\",\"invalidWidth\":\"Mae'n rhaid i'r lled fod yn rhif.\",\"invalidCssLength\":\"Mae'n rhaid i'r gwerth ar gyfer maes \\\"%1\\\" fod yn rhif positif gyda neu heb uned fesuriad CSS dilys (px, %, in, cm, mm, em, ex, pt, neu pc).\",\"invalidHtmlLength\":\"Mae'n rhaid i'r gwerth ar gyfer maes \\\"%1\\\" fod yn rhif positif gyda neu heb uned fesuriad HTML dilys (px neu %).\",\"invalidInlineStyle\":\"Mae'n rhaid i'r gwerth ar gyfer arddull mewn-llinell gynnwys un set neu fwy ar y fformat \\\"enw : gwerth\\\", wedi'u gwahanu gyda hanner colon.\",\"cssLengthTooltip\":\"Rhowch rif am werth mewn picsel neu rhif gydag uned CSS dilys (px, %, in, cm, mm, em, pt neu pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, ddim ar gael</span>\"},\"about\":{\"copy\":\"Hawlfraint &copy; $1. Cedwir pob hawl.\",\"dlgTitle\":\"Ynghylch CKEditor\",\"help\":\"Gwirio $1 am gymorth.\",\"moreInfo\":\"Am wybodaeth ynghylch trwyddedau, ewch i'n gwefan:\",\"title\":\"Ynghylch CKEditor\",\"userGuide\":\"Canllawiau Defnyddiwr CKEditor\"},\"basicstyles\":{\"bold\":\"Bras\",\"italic\":\"Italig\",\"strike\":\"Llinell Trwyddo\",\"subscript\":\"Is-sgript\",\"superscript\":\"Uwchsgript\",\"underline\":\"Tanlinellu\"},\"blockquote\":{\"toolbar\":\"Dyfyniad bloc\"},\"clipboard\":{\"copy\":\"Copïo\",\"copyError\":\"'Dyw gosodiadau diogelwch eich porwr ddim yn caniatàu'r golygydd i gynnal 'gweithredoedd copïo' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+C).\",\"cut\":\"Torri\",\"cutError\":\"Nid yw gosodiadau diogelwch eich porwr yn caniatàu'r golygydd i gynnal 'gweithredoedd torri' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+X).\",\"paste\":\"Gludo\",\"pasteArea\":\"Ardal Gludo\",\"pasteMsg\":\"Gludwch i mewn i'r blwch canlynol gan ddefnyddio'r bysellfwrdd (<strong>Ctrl/Cmd+V</strong>) a phwyso <strong>Iawn</strong>.\",\"securityMsg\":\"Oherwydd gosodiadau diogelwch eich porwr, 'dyw'r porwr ddim yn gallu ennill mynediad i'r data ar y clipfwrdd yn uniongyrchol. Mae angen i chi ei ludo eto i'r ffenestr hon.\",\"title\":\"Gludo\"},\"contextmenu\":{\"options\":\"Opsiynau Dewislen Cyd-destun\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Cyfangu'r Bar Offer\",\"toolbarExpand\":\"Ehangu'r Bar Offer\",\"toolbarGroups\":{\"document\":\"Dogfen\",\"clipboard\":\"Clipfwrdd/Dadwneud\",\"editing\":\"Golygu\",\"forms\":\"Ffurflenni\",\"basicstyles\":\"Arddulliau Sylfaenol\",\"paragraph\":\"Paragraff\",\"links\":\"Dolenni\",\"insert\":\"Mewnosod\",\"styles\":\"Arddulliau\",\"colors\":\"Lliwiau\",\"tools\":\"Offer\"},\"toolbars\":\"Bariau offer y golygydd\"},\"elementspath\":{\"eleLabel\":\"Llwybr elfennau\",\"eleTitle\":\"Elfen %1\"},\"format\":{\"label\":\"Fformat\",\"panelTitle\":\"Fformat Paragraff\",\"tag_address\":\"Cyfeiriad\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Pennawd 1\",\"tag_h2\":\"Pennawd 2\",\"tag_h3\":\"Pennawd 3\",\"tag_h4\":\"Pennawd 4\",\"tag_h5\":\"Pennawd 5\",\"tag_h6\":\"Pennawd 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Wedi'i Fformatio\"},\"horizontalrule\":{\"toolbar\":\"Mewnosod Llinell Lorweddol\"},\"image\":{\"alt\":\"Testun Amgen\",\"border\":\"Ymyl\",\"btnUpload\":\"Anfon i'r Gweinydd\",\"button2Img\":\"Ydych am drawsffurfio'r botwm ddelwedd hwn ar ddelwedd syml?\",\"hSpace\":\"BwlchLl\",\"img2Button\":\"Ydych am drawsffurfio'r ddelwedd hon ar fotwm delwedd?\",\"infoTab\":\"Gwyb Delwedd\",\"linkTab\":\"Dolen\",\"lockRatio\":\"Cloi Cymhareb\",\"menu\":\"Priodweddau Delwedd\",\"resetSize\":\"Ailosod Maint\",\"title\":\"Priodweddau Delwedd\",\"titleButton\":\"Priodweddau Botwm Delwedd\",\"upload\":\"Lanlwytho\",\"urlMissing\":\"URL gwreiddiol y ddelwedd ar goll.\",\"vSpace\":\"BwlchF\",\"validateBorder\":\"Rhaid i'r ymyl fod yn gyfanrif.\",\"validateHSpace\":\"Rhaid i'r HSpace fod yn gyfanrif.\",\"validateVSpace\":\"Rhaid i'r VSpace fod yn gyfanrif.\"},\"indent\":{\"indent\":\"Cynyddu'r Mewnoliad\",\"outdent\":\"Lleihau'r Mewnoliad\"},\"fakeobjects\":{\"anchor\":\"Angor\",\"flash\":\"Animeiddiant Flash\",\"hiddenfield\":\"Maes Cudd\",\"iframe\":\"IFrame\",\"unknown\":\"Gwrthrych Anhysbys\"},\"link\":{\"acccessKey\":\"Allwedd Mynediad\",\"advanced\":\"Uwch\",\"advisoryContentType\":\"Math y Cynnwys Cynghorol\",\"advisoryTitle\":\"Teitl Cynghorol\",\"anchor\":{\"toolbar\":\"Angor\",\"menu\":\"Golygu'r Angor\",\"title\":\"Priodweddau'r Angor\",\"name\":\"Enw'r Angor\",\"errorName\":\"Teipiwch enw'r angor\",\"remove\":\"Tynnwch yr Angor\"},\"anchorId\":\"Gan Id yr Elfen\",\"anchorName\":\"Gan Enw'r Angor\",\"charset\":\"Set Nodau'r Adnodd Cysylltiedig\",\"cssClasses\":\"Dosbarthiadau Dalen Arddull\",\"emailAddress\":\"Cyfeiriad E-Bost\",\"emailBody\":\"Corff y Neges\",\"emailSubject\":\"Testun y Neges\",\"id\":\"Id\",\"info\":\"Gwyb y Ddolen\",\"langCode\":\"Cod Iaith\",\"langDir\":\"Cyfeiriad Iaith\",\"langDirLTR\":\"Chwith i'r Dde (LTR)\",\"langDirRTL\":\"Dde i'r Chwith (RTL)\",\"menu\":\"Golygu Dolen\",\"name\":\"Enw\",\"noAnchors\":\"(Dim angorau ar gael yn y ddogfen)\",\"noEmail\":\"Teipiwch gyfeiriad yr e-bost\",\"noUrl\":\"Teipiwch URL y ddolen\",\"other\":\"<eraill>\",\"popupDependent\":\"Dibynnol (Netscape)\",\"popupFeatures\":\"Nodweddion Ffenestr Bop\",\"popupFullScreen\":\"Sgrin Llawn (IE)\",\"popupLeft\":\"Safle Chwith\",\"popupLocationBar\":\"Bar Safle\",\"popupMenuBar\":\"Dewislen\",\"popupResizable\":\"Ailfeintiol\",\"popupScrollBars\":\"Barrau Sgrolio\",\"popupStatusBar\":\"Bar Statws\",\"popupToolbar\":\"Bar Offer\",\"popupTop\":\"Safle Top\",\"rel\":\"Perthynas\",\"selectAnchor\":\"Dewiswch Angor\",\"styles\":\"Arddull\",\"tabIndex\":\"Indecs Tab\",\"target\":\"Targed\",\"targetFrame\":\"<ffrâm>\",\"targetFrameName\":\"Enw Ffrâm y Targed\",\"targetPopup\":\"<ffenestr bop>\",\"targetPopupName\":\"Enw Ffenestr Bop\",\"title\":\"Dolen\",\"toAnchor\":\"Dolen at angor yn y testun\",\"toEmail\":\"E-bost\",\"toUrl\":\"URL\",\"toolbar\":\"Dolen\",\"type\":\"Math y Ddolen\",\"unlink\":\"Datgysylltu\",\"upload\":\"Lanlwytho\"},\"list\":{\"bulletedlist\":\"Mewnosod/Tynnu Rhestr Bwled\",\"numberedlist\":\"Mewnosod/Tynnu Rhestr Rhifol\"},\"magicline\":{\"title\":\"Mewnosod paragraff yma\"},\"maximize\":{\"maximize\":\"Mwyhau\",\"minimize\":\"Lleihau\"},\"pastetext\":{\"button\":\"Gludo fel testun plaen\",\"title\":\"Gludo fel Testun Plaen\"},\"pastefromword\":{\"confirmCleanup\":\"Mae'r testun rydych chi am ludo wedi'i gopïo o Word. Ydych chi am ei lanhau cyn ei ludo?\",\"error\":\"Doedd dim modd glanhau y data a ludwyd oherwydd gwall mewnol\",\"title\":\"Gludo o Word\",\"toolbar\":\"Gludo o Word\"},\"removeformat\":{\"toolbar\":\"Tynnu Fformat\"},\"sourcearea\":{\"toolbar\":\"HTML\"},\"specialchar\":{\"options\":\"Opsiynau Nodau Arbennig\",\"title\":\"Dewis Nod Arbennig\",\"toolbar\":\"Mewnosod Nod Arbennig\"},\"scayt\":{\"btn_about\":\"Ynghylch SCAYT\",\"btn_dictionaries\":\"Geiriaduron\",\"btn_disable\":\"Analluogi SCAYT\",\"btn_enable\":\"Galluogi SCAYT\",\"btn_langs\":\"Ieithoedd\",\"btn_options\":\"Opsiynau\",\"text_title\":\"Gwirio'r Sillafu Wrth Deipio\"},\"stylescombo\":{\"label\":\"Arddulliau\",\"panelTitle\":\"Arddulliau Fformatio\",\"panelTitle1\":\"Arddulliau Bloc\",\"panelTitle2\":\"Arddulliau Mewnol\",\"panelTitle3\":\"Arddulliau Gwrthrych\"},\"table\":{\"border\":\"Maint yr Ymyl\",\"caption\":\"Pennawd\",\"cell\":{\"menu\":\"Cell\",\"insertBefore\":\"Mewnosod Cell Cyn\",\"insertAfter\":\"Mewnosod Cell Ar Ôl\",\"deleteCell\":\"Dileu Celloedd\",\"merge\":\"Cyfuno Celloedd\",\"mergeRight\":\"Cyfuno i'r Dde\",\"mergeDown\":\"Cyfuno i Lawr\",\"splitHorizontal\":\"Hollti'r Gell yn Lorweddol\",\"splitVertical\":\"Hollti'r Gell yn Fertigol\",\"title\":\"Priodweddau'r Gell\",\"cellType\":\"Math y Gell\",\"rowSpan\":\"Rhychwant Rhesi\",\"colSpan\":\"Rhychwant Colofnau\",\"wordWrap\":\"Lapio Geiriau\",\"hAlign\":\"Aliniad Llorweddol\",\"vAlign\":\"Aliniad Fertigol\",\"alignBaseline\":\"Baslinell\",\"bgColor\":\"Lliw Cefndir\",\"borderColor\":\"Lliw Ymyl\",\"data\":\"Data\",\"header\":\"Pennyn\",\"yes\":\"Ie\",\"no\":\"Na\",\"invalidWidth\":\"Mae'n rhaid i led y gell fod yn rhif.\",\"invalidHeight\":\"Mae'n rhaid i uchder y gell fod yn rhif.\",\"invalidRowSpan\":\"Mae'n rhaid i rychwant y rhesi fod yn gyfanrif.\",\"invalidColSpan\":\"Mae'n rhaid i rychwant y colofnau fod yn gyfanrif.\",\"chooseColor\":\"Dewis\"},\"cellPad\":\"Padio'r gell\",\"cellSpace\":\"Bylchiad y gell\",\"column\":{\"menu\":\"Colofn\",\"insertBefore\":\"Mewnosod Colofn Cyn\",\"insertAfter\":\"Mewnosod Colofn Ar Ôl\",\"deleteColumn\":\"Dileu Colofnau\"},\"columns\":\"Colofnau\",\"deleteTable\":\"Dileu Tabl\",\"headers\":\"Penynnau\",\"headersBoth\":\"Y Ddau\",\"headersColumn\":\"Colofn gyntaf\",\"headersNone\":\"Dim\",\"headersRow\":\"Rhes gyntaf\",\"invalidBorder\":\"Mae'n rhaid i faint yr ymyl fod yn rhif.\",\"invalidCellPadding\":\"Mae'n rhaid i badiad y gell fod yn rhif positif.\",\"invalidCellSpacing\":\"Mae'n rhaid i fylchiad y gell fod yn rhif positif.\",\"invalidCols\":\"Mae'n rhaid cael o leiaf un golofn.\",\"invalidHeight\":\"Mae'n rhaid i uchder y tabl fod yn rhif.\",\"invalidRows\":\"Mae'n rhaid cael o leiaf un rhes.\",\"invalidWidth\":\"Mae'n rhaid i led y tabl fod yn rhif.\",\"menu\":\"Priodweddau'r Tabl\",\"row\":{\"menu\":\"Rhes\",\"insertBefore\":\"Mewnosod Rhes Cyn\",\"insertAfter\":\"Mewnosod Rhes Ar Ôl\",\"deleteRow\":\"Dileu Rhesi\"},\"rows\":\"Rhesi\",\"summary\":\"Crynodeb\",\"title\":\"Priodweddau'r Tabl\",\"toolbar\":\"Tabl\",\"widthPc\":\"y cant\",\"widthPx\":\"picsel\",\"widthUnit\":\"uned lled\"},\"undo\":{\"redo\":\"Ailwneud\",\"undo\":\"Dadwneud\"},\"wsc\":{\"btnIgnore\":\"Anwybyddu Un\",\"btnIgnoreAll\":\"Anwybyddu Pob\",\"btnReplace\":\"Amnewid Un\",\"btnReplaceAll\":\"Amnewid Pob\",\"btnUndo\":\"Dadwneud\",\"changeTo\":\"Newid i\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Gwirydd sillafu heb ei arsefydlu. A ydych am ei lawrlwytho nawr?\",\"manyChanges\":\"Gwirio sillafu wedi gorffen: Newidiwyd %1 gair\",\"noChanges\":\"Gwirio sillafu wedi gorffen: Dim newidiadau\",\"noMispell\":\"Gwirio sillafu wedi gorffen: Dim camsillaf.\",\"noSuggestions\":\"- Dim awgrymiadau -\",\"notAvailable\":\"Nid yw'r gwasanaeth hwn ar gael yn bresennol.\",\"notInDic\":\"Nid i'w gael yn y geiriadur\",\"oneChange\":\"Gwirio sillafu wedi gorffen: Newidiwyd 1 gair\",\"progress\":\"Gwirio sillafu yn ar y gweill...\",\"title\":\"Gwirio Sillafu\",\"toolbar\":\"Gwirio Sillafu\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/da.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['da']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Tryk ALT 0 for hjælp\",\"browseServer\":\"Gennemse...\",\"url\":\"URL\",\"protocol\":\"Protokol\",\"upload\":\"Upload\",\"uploadSubmit\":\"Upload\",\"image\":\"Indsæt billede\",\"flash\":\"Indsæt Flash\",\"form\":\"Indsæt formular\",\"checkbox\":\"Indsæt afkrydsningsfelt\",\"radio\":\"Indsæt alternativknap\",\"textField\":\"Indsæt tekstfelt\",\"textarea\":\"Indsæt tekstboks\",\"hiddenField\":\"Indsæt skjult felt\",\"button\":\"Indsæt knap\",\"select\":\"Indsæt liste\",\"imageButton\":\"Indsæt billedknap\",\"notSet\":\"<intet valgt>\",\"id\":\"Id\",\"name\":\"Navn\",\"langDir\":\"Tekstretning\",\"langDirLtr\":\"Fra venstre mod højre (LTR)\",\"langDirRtl\":\"Fra højre mod venstre (RTL)\",\"langCode\":\"Sprogkode\",\"longDescr\":\"Udvidet beskrivelse\",\"cssClass\":\"Typografiark (CSS)\",\"advisoryTitle\":\"Titel\",\"cssStyle\":\"Typografi (CSS)\",\"ok\":\"OK\",\"cancel\":\"Annullér\",\"close\":\"Luk\",\"preview\":\"Forhåndsvisning\",\"resize\":\"Træk for at skalere\",\"generalTab\":\"Generelt\",\"advancedTab\":\"Avanceret\",\"validateNumberFailed\":\"Værdien er ikke et tal.\",\"confirmNewPage\":\"Alt indhold, der ikke er blevet gemt, vil gå tabt. Er du sikker på, at du vil indlæse en ny side?\",\"confirmCancel\":\"Nogle af indstillingerne er blevet ændret. Er du sikker på, at du vil lukke vinduet?\",\"options\":\"Vis muligheder\",\"target\":\"Mål\",\"targetNew\":\"Nyt vindue (_blank)\",\"targetTop\":\"Øverste vindue (_top)\",\"targetSelf\":\"Samme vindue (_self)\",\"targetParent\":\"Samme vindue (_parent)\",\"langDirLTR\":\"Venstre til højre (LTR)\",\"langDirRTL\":\"Højre til venstre (RTL)\",\"styles\":\"Style\",\"cssClasses\":\"Stylesheetklasser\",\"width\":\"Bredde\",\"height\":\"Højde\",\"align\":\"Justering\",\"alignLeft\":\"Venstre\",\"alignRight\":\"Højre\",\"alignCenter\":\"Centreret\",\"alignJustify\":\"Lige margener\",\"alignTop\":\"Øverst\",\"alignMiddle\":\"Centreret\",\"alignBottom\":\"Nederst\",\"alignNone\":\"Ingen\",\"invalidValue\":\"Ugyldig værdi.\",\"invalidHeight\":\"Højde skal være et tal.\",\"invalidWidth\":\"Bredde skal være et tal.\",\"invalidCssLength\":\"Værdien specificeret for \\\"%1\\\" feltet skal være et positivt nummer med eller uden en CSS måleenhed  (px, %, in, cm, mm, em, ex, pt, eller pc).\",\"invalidHtmlLength\":\"Værdien specificeret for \\\"%1\\\" feltet skal være et positivt nummer med eller uden en CSS måleenhed  (px eller %).\",\"invalidInlineStyle\":\"Værdien specificeret for inline style skal indeholde en eller flere elementer med et format som \\\"name:value\\\", separeret af semikoloner\",\"cssLengthTooltip\":\"Indsæt en numerisk værdi i pixel eller nummer med en gyldig CSS værdi (px, %, in, cm, mm, em, ex, pt, eller pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, ikke tilgængelig</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Alle rettigheder forbeholdes.\",\"dlgTitle\":\"Om CKEditor\",\"help\":\"Se $1 for at få hjælp.\",\"moreInfo\":\"For informationer omkring licens, se venligst vores hjemmeside (på engelsk):\",\"title\":\"Om CKEditor\",\"userGuide\":\"CKEditor-brugermanual\"},\"basicstyles\":{\"bold\":\"Fed\",\"italic\":\"Kursiv\",\"strike\":\"Gennemstreget\",\"subscript\":\"Sænket skrift\",\"superscript\":\"Hævet skrift\",\"underline\":\"Understreget\"},\"blockquote\":{\"toolbar\":\"Blokcitat\"},\"clipboard\":{\"copy\":\"Kopiér\",\"copyError\":\"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at kopiere teksten (Ctrl/Cmd+C).\",\"cut\":\"Klip\",\"cutError\":\"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).\",\"paste\":\"Indsæt\",\"pasteArea\":\"Indsæt område\",\"pasteMsg\":\"Indsæt i feltet herunder (<STRONG>Ctrl/Cmd+V</STRONG>) og klik på <STRONG>OK</STRONG>.\",\"securityMsg\":\"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Du skal indsætte udklipsholderens indhold i dette vindue igen.\",\"title\":\"Indsæt\"},\"contextmenu\":{\"options\":\"Muligheder for hjælpemenu\"},\"button\":{\"selectedLabel\":\"%1 (Valgt)\"},\"toolbar\":{\"toolbarCollapse\":\"Sammenklap værktøjslinje\",\"toolbarExpand\":\"Udvid værktøjslinje\",\"toolbarGroups\":{\"document\":\"Dokument\",\"clipboard\":\"Udklipsholder/Fortryd\",\"editing\":\"Redigering\",\"forms\":\"Formularer\",\"basicstyles\":\"Basis styles\",\"paragraph\":\"Paragraf\",\"links\":\"Links\",\"insert\":\"Indsæt\",\"styles\":\"Typografier\",\"colors\":\"Farver\",\"tools\":\"Værktøjer\"},\"toolbars\":\"Editors værktøjslinjer\"},\"elementspath\":{\"eleLabel\":\"Sti på element\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Formatering\",\"panelTitle\":\"Formatering\",\"tag_address\":\"Adresse\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Overskrift 1\",\"tag_h2\":\"Overskrift 2\",\"tag_h3\":\"Overskrift 3\",\"tag_h4\":\"Overskrift 4\",\"tag_h5\":\"Overskrift 5\",\"tag_h6\":\"Overskrift 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formateret\"},\"horizontalrule\":{\"toolbar\":\"Indsæt vandret streg\"},\"image\":{\"alt\":\"Alternativ tekst\",\"border\":\"Ramme\",\"btnUpload\":\"Upload fil til serveren\",\"button2Img\":\"Vil du lave billedknappen om til et almindeligt billede?\",\"hSpace\":\"Vandret margen\",\"img2Button\":\"Vil du lave billedet om til en billedknap?\",\"infoTab\":\"Generelt\",\"linkTab\":\"Hyperlink\",\"lockRatio\":\"Lås størrelsesforhold\",\"menu\":\"Egenskaber for billede\",\"resetSize\":\"Nulstil størrelse\",\"title\":\"Egenskaber for billede\",\"titleButton\":\"Egenskaber for billedknap\",\"upload\":\"Upload\",\"urlMissing\":\"Kilde på billed-URL mangler\",\"vSpace\":\"Lodret margen\",\"validateBorder\":\"Kant skal være et helt nummer.\",\"validateHSpace\":\"HSpace skal være et helt nummer.\",\"validateVSpace\":\"VSpace skal være et helt nummer.\"},\"indent\":{\"indent\":\"Forøg indrykning\",\"outdent\":\"Formindsk indrykning\"},\"fakeobjects\":{\"anchor\":\"Anker\",\"flash\":\"Flashanimation\",\"hiddenfield\":\"Skjult felt\",\"iframe\":\"Iframe\",\"unknown\":\"Ukendt objekt\"},\"link\":{\"acccessKey\":\"Genvejstast\",\"advanced\":\"Avanceret\",\"advisoryContentType\":\"Indholdstype\",\"advisoryTitle\":\"Titel\",\"anchor\":{\"toolbar\":\"Indsæt/redigér bogmærke\",\"menu\":\"Egenskaber for bogmærke\",\"title\":\"Egenskaber for bogmærke\",\"name\":\"Bogmærkenavn\",\"errorName\":\"Indtast bogmærkenavn\",\"remove\":\"Fjern bogmærke\"},\"anchorId\":\"Efter element-Id\",\"anchorName\":\"Efter ankernavn\",\"charset\":\"Tegnsæt\",\"cssClasses\":\"Typografiark\",\"emailAddress\":\"E-mailadresse\",\"emailBody\":\"Besked\",\"emailSubject\":\"Emne\",\"id\":\"Id\",\"info\":\"Generelt\",\"langCode\":\"Tekstretning\",\"langDir\":\"Tekstretning\",\"langDirLTR\":\"Fra venstre mod højre (LTR)\",\"langDirRTL\":\"Fra højre mod venstre (RTL)\",\"menu\":\"Redigér hyperlink\",\"name\":\"Navn\",\"noAnchors\":\"(Ingen bogmærker i dokumentet)\",\"noEmail\":\"Indtast e-mailadresse!\",\"noUrl\":\"Indtast hyperlink-URL!\",\"other\":\"<anden>\",\"popupDependent\":\"Koblet/dependent (Netscape)\",\"popupFeatures\":\"Egenskaber for popup\",\"popupFullScreen\":\"Fuld skærm (IE)\",\"popupLeft\":\"Position fra venstre\",\"popupLocationBar\":\"Adresselinje\",\"popupMenuBar\":\"Menulinje\",\"popupResizable\":\"Justérbar\",\"popupScrollBars\":\"Scrollbar\",\"popupStatusBar\":\"Statuslinje\",\"popupToolbar\":\"Værktøjslinje\",\"popupTop\":\"Position fra toppen\",\"rel\":\"Relation\",\"selectAnchor\":\"Vælg et anker\",\"styles\":\"Typografi\",\"tabIndex\":\"Tabulatorindeks\",\"target\":\"Mål\",\"targetFrame\":\"<ramme>\",\"targetFrameName\":\"Destinationsvinduets navn\",\"targetPopup\":\"<popup vindue>\",\"targetPopupName\":\"Popupvinduets navn\",\"title\":\"Egenskaber for hyperlink\",\"toAnchor\":\"Bogmærke på denne side\",\"toEmail\":\"E-mail\",\"toUrl\":\"URL\",\"toolbar\":\"Indsæt/redigér hyperlink\",\"type\":\"Type\",\"unlink\":\"Fjern hyperlink\",\"upload\":\"Upload\"},\"list\":{\"bulletedlist\":\"Punktopstilling\",\"numberedlist\":\"Talopstilling\"},\"magicline\":{\"title\":\"Indsæt afsnit\"},\"maximize\":{\"maximize\":\"Maksimér\",\"minimize\":\"Minimér\"},\"pastetext\":{\"button\":\"Indsæt som ikke-formateret tekst\",\"title\":\"Indsæt som ikke-formateret tekst\"},\"pastefromword\":{\"confirmCleanup\":\"Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes?\",\"error\":\"Det var ikke muligt at fjerne formatteringen på den indsatte tekst grundet en intern fejl\",\"title\":\"Indsæt fra Word\",\"toolbar\":\"Indsæt fra Word\"},\"removeformat\":{\"toolbar\":\"Fjern formatering\"},\"sourcearea\":{\"toolbar\":\"Kilde\"},\"specialchar\":{\"options\":\"Muligheder for specialkarakterer\",\"title\":\"Vælg symbol\",\"toolbar\":\"Indsæt symbol\"},\"scayt\":{\"btn_about\":\"Om SCAYT\",\"btn_dictionaries\":\"Ordbøger\",\"btn_disable\":\"Deaktivér SCAYT\",\"btn_enable\":\"Aktivér SCAYT\",\"btn_langs\":\"Sprog\",\"btn_options\":\"Indstillinger\",\"text_title\":\"Stavekontrol mens du skriver\"},\"stylescombo\":{\"label\":\"Typografi\",\"panelTitle\":\"Formattering på stylesheet\",\"panelTitle1\":\"Block typografi\",\"panelTitle2\":\"Inline typografi\",\"panelTitle3\":\"Object typografi\"},\"table\":{\"border\":\"Rammebredde\",\"caption\":\"Titel\",\"cell\":{\"menu\":\"Celle\",\"insertBefore\":\"Indsæt celle før\",\"insertAfter\":\"Indsæt celle efter\",\"deleteCell\":\"Slet celle\",\"merge\":\"Flet celler\",\"mergeRight\":\"Flet til højre\",\"mergeDown\":\"Flet nedad\",\"splitHorizontal\":\"Del celle vandret\",\"splitVertical\":\"Del celle lodret\",\"title\":\"Celleegenskaber\",\"cellType\":\"Celletype\",\"rowSpan\":\"Række span (rows span)\",\"colSpan\":\"Kolonne span (columns span)\",\"wordWrap\":\"Tekstombrydning\",\"hAlign\":\"Vandret justering\",\"vAlign\":\"Lodret justering\",\"alignBaseline\":\"Grundlinje\",\"bgColor\":\"Baggrundsfarve\",\"borderColor\":\"Rammefarve\",\"data\":\"Data\",\"header\":\"Hoved\",\"yes\":\"Ja\",\"no\":\"Nej\",\"invalidWidth\":\"Cellebredde skal være et tal.\",\"invalidHeight\":\"Cellehøjde skal være et tal.\",\"invalidRowSpan\":\"Række span skal være et heltal.\",\"invalidColSpan\":\"Kolonne span skal være et heltal.\",\"chooseColor\":\"Vælg\"},\"cellPad\":\"Cellemargen\",\"cellSpace\":\"Celleafstand\",\"column\":{\"menu\":\"Kolonne\",\"insertBefore\":\"Indsæt kolonne før\",\"insertAfter\":\"Indsæt kolonne efter\",\"deleteColumn\":\"Slet kolonne\"},\"columns\":\"Kolonner\",\"deleteTable\":\"Slet tabel\",\"headers\":\"Hoved\",\"headersBoth\":\"Begge\",\"headersColumn\":\"Første kolonne\",\"headersNone\":\"Ingen\",\"headersRow\":\"Første række\",\"invalidBorder\":\"Rammetykkelse skal være et tal.\",\"invalidCellPadding\":\"Cellemargen skal være et tal.\",\"invalidCellSpacing\":\"Celleafstand skal være et tal.\",\"invalidCols\":\"Antallet af kolonner skal være større end 0.\",\"invalidHeight\":\"Tabelhøjde skal være et tal.\",\"invalidRows\":\"Antallet af rækker skal være større end 0.\",\"invalidWidth\":\"Tabelbredde skal være et tal.\",\"menu\":\"Egenskaber for tabel\",\"row\":{\"menu\":\"Række\",\"insertBefore\":\"Indsæt række før\",\"insertAfter\":\"Indsæt række efter\",\"deleteRow\":\"Slet række\"},\"rows\":\"Rækker\",\"summary\":\"Resumé\",\"title\":\"Egenskaber for tabel\",\"toolbar\":\"Tabel\",\"widthPc\":\"procent\",\"widthPx\":\"pixels\",\"widthUnit\":\"Bredde på enhed\"},\"undo\":{\"redo\":\"Annullér fortryd\",\"undo\":\"Fortryd\"},\"wsc\":{\"btnIgnore\":\"Ignorér\",\"btnIgnoreAll\":\"Ignorér alle\",\"btnReplace\":\"Erstat\",\"btnReplaceAll\":\"Erstat alle\",\"btnUndo\":\"Tilbage\",\"changeTo\":\"Forslag\",\"errorLoading\":\"Fejl ved indlæsning af host: %s.\",\"ieSpellDownload\":\"Stavekontrol ikke installeret. Vil du installere den nu?\",\"manyChanges\":\"Stavekontrol færdig: %1 ord ændret\",\"noChanges\":\"Stavekontrol færdig: Ingen ord ændret\",\"noMispell\":\"Stavekontrol færdig: Ingen fejl fundet\",\"noSuggestions\":\"(ingen forslag)\",\"notAvailable\":\"Stavekontrol er desværre ikke tilgængelig.\",\"notInDic\":\"Ikke i ordbogen\",\"oneChange\":\"Stavekontrol færdig: Et ord ændret\",\"progress\":\"Stavekontrollen arbejder...\",\"title\":\"Stavekontrol\",\"toolbar\":\"Stavekontrol\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/de-ch.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['de-ch']={\"editor\":\"WYSIWYG-Editor\",\"editorPanel\":\"WYSIWYG-Editor-Leiste\",\"common\":{\"editorHelp\":\"Drücken Sie ALT 0 für Hilfe\",\"browseServer\":\"Server durchsuchen\",\"url\":\"URL\",\"protocol\":\"Protokoll\",\"upload\":\"Hochladen\",\"uploadSubmit\":\"Zum Server senden\",\"image\":\"Bild\",\"flash\":\"Flash\",\"form\":\"Formular\",\"checkbox\":\"Kontrollbox\",\"radio\":\"Optionsfeld\",\"textField\":\"Textfeld\",\"textarea\":\"Textfeld\",\"hiddenField\":\"Verstecktes Feld\",\"button\":\"Schaltfläche\",\"select\":\"Auswahlfeld\",\"imageButton\":\"Bildschaltfläche\",\"notSet\":\"<nicht festgelegt>\",\"id\":\"Kennung\",\"name\":\"Name\",\"langDir\":\"Schreibrichtung\",\"langDirLtr\":\"Links nach Rechts (LTR)\",\"langDirRtl\":\"Rechts nach Links (RTL)\",\"langCode\":\"Sprachcode\",\"longDescr\":\"Langbeschreibungs-URL\",\"cssClass\":\"Formatvorlagenklassen\",\"advisoryTitle\":\"Titel Beschreibung\",\"cssStyle\":\"Stil\",\"ok\":\"OK\",\"cancel\":\"Abbrechen\",\"close\":\"Schliessen\",\"preview\":\"Vorschau\",\"resize\":\"Grösse ändern\",\"generalTab\":\"Allgemein\",\"advancedTab\":\"Erweitert\",\"validateNumberFailed\":\"Dieser Wert ist keine Nummer.\",\"confirmNewPage\":\"Alle nicht gespeicherten Änderungen gehen verlohren. Sind Sie sicher die neue Seite zu laden?\",\"confirmCancel\":\"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schliessen?\",\"options\":\"Optionen\",\"target\":\"Zielseite\",\"targetNew\":\"Neues Fenster (_blank)\",\"targetTop\":\"Oberstes Fenster (_top)\",\"targetSelf\":\"Gleiches Fenster (_self)\",\"targetParent\":\"Oberes Fenster (_parent)\",\"langDirLTR\":\"Links nach Rechts (LNR)\",\"langDirRTL\":\"Rechts nach Links (RNL)\",\"styles\":\"Style\",\"cssClasses\":\"Stylesheet Klasse\",\"width\":\"Breite\",\"height\":\"Höhe\",\"align\":\"Ausrichtung\",\"alignLeft\":\"Links\",\"alignRight\":\"Rechts\",\"alignCenter\":\"Zentriert\",\"alignJustify\":\"Blocksatz\",\"alignTop\":\"Oben\",\"alignMiddle\":\"Mitte\",\"alignBottom\":\"Unten\",\"alignNone\":\"Keine\",\"invalidValue\":\"Ungültiger Wert.\",\"invalidHeight\":\"Höhe muss eine Zahl sein.\",\"invalidWidth\":\"Breite muss eine Zahl sein.\",\"invalidCssLength\":\"Wert spezifiziert für \\\"%1\\\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).\",\"invalidHtmlLength\":\"Wert spezifiziert für \\\"%1\\\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte HTML Messeinheit (px oder %).\",\"invalidInlineStyle\":\"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Tupels mit dem Format \\\"Name : Wert\\\" getrennt mit Semikolons.\",\"cssLengthTooltip\":\"Gebe eine Zahl ein für ein Wert in pixels oder eine Zahl mit einer korrekten CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, nicht verfügbar</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Alle Rechte vorbehalten.\",\"dlgTitle\":\"Über CKEditor\",\"help\":\"Prüfen Sie $1 für Hilfe.\",\"moreInfo\":\"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:\",\"title\":\"Über CKEditor\",\"userGuide\":\"CKEditor Benutzerhandbuch\"},\"basicstyles\":{\"bold\":\"Fett\",\"italic\":\"Kursiv\",\"strike\":\"Durchgestrichen\",\"subscript\":\"Tiefgestellt\",\"superscript\":\"Hochgestellt\",\"underline\":\"Unterstrichen\"},\"blockquote\":{\"toolbar\":\"Zitatblock\"},\"clipboard\":{\"copy\":\"Kopieren\",\"copyError\":\"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).\",\"cut\":\"Ausschneiden\",\"cutError\":\"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).\",\"paste\":\"Einfügen\",\"pasteArea\":\"Einfügebereich\",\"pasteMsg\":\"Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.\",\"securityMsg\":\"Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.\",\"title\":\"Einfügen\"},\"contextmenu\":{\"options\":\"Kontextmenüoptionen\"},\"button\":{\"selectedLabel\":\"%1 (Ausgewählt)\"},\"toolbar\":{\"toolbarCollapse\":\"Werkzeugleiste einklappen\",\"toolbarExpand\":\"Werkzeugleiste ausklappen\",\"toolbarGroups\":{\"document\":\"Dokument\",\"clipboard\":\"Zwischenablage/Rückgängig\",\"editing\":\"Editieren\",\"forms\":\"Formulare\",\"basicstyles\":\"Grundstile\",\"paragraph\":\"Absatz\",\"links\":\"Links\",\"insert\":\"Einfügen\",\"styles\":\"Stile\",\"colors\":\"Farben\",\"tools\":\"Werkzeuge\"},\"toolbars\":\"Editor Werkzeugleisten\"},\"elementspath\":{\"eleLabel\":\"Elementepfad\",\"eleTitle\":\"%1 Element\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Absatzformat\",\"tag_address\":\"Adresse\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Überschrift 1\",\"tag_h2\":\"Überschrift 2\",\"tag_h3\":\"Überschrift 3\",\"tag_h4\":\"Überschrift 4\",\"tag_h5\":\"Überschrift 5\",\"tag_h6\":\"Überschrift 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatiert\"},\"horizontalrule\":{\"toolbar\":\"Horizontale Linie einfügen\"},\"image\":{\"alt\":\"Alternativer Text\",\"border\":\"Rahmen\",\"btnUpload\":\"Zum Server senden\",\"button2Img\":\"Möchten Sie die ausgewählte Bildschaltfläche in ein einfaches Bild umwandeln?\",\"hSpace\":\"Horizontal-Abstand\",\"img2Button\":\"Möchten Sie das ausgewählte Bild in eine Bildschaltfläche umwandeln?\",\"infoTab\":\"Bildinfo\",\"linkTab\":\"Link\",\"lockRatio\":\"Grössenverhältnis beibehalten\",\"menu\":\"Bildeigenschaften\",\"resetSize\":\"Grösse zurücksetzen\",\"title\":\"Bildeigenschaften\",\"titleButton\":\"Bildschaltflächeneigenschaften\",\"upload\":\"Hochladen\",\"urlMissing\":\"Bildquellen-URL fehlt.\",\"vSpace\":\"Vertikal-Abstand\",\"validateBorder\":\"Rahmen muss eine ganze Zahl sein.\",\"validateHSpace\":\"Horizontal-Abstand muss eine ganze Zahl sein.\",\"validateVSpace\":\"Vertikal-Abstand muss eine ganze Zahl sein.\"},\"indent\":{\"indent\":\"Einzug erhöhen\",\"outdent\":\"Einzug verringern\"},\"fakeobjects\":{\"anchor\":\"Anker\",\"flash\":\"Flash-Animation\",\"hiddenfield\":\"Verstecktes Feld\",\"iframe\":\"IFrame\",\"unknown\":\"Unbekanntes Objekt\"},\"link\":{\"acccessKey\":\"Zugriffstaste\",\"advanced\":\"Erweitert\",\"advisoryContentType\":\"Inhaltstyp\",\"advisoryTitle\":\"Titel Beschreibung\",\"anchor\":{\"toolbar\":\"Anker\",\"menu\":\"Anker bearbeiten\",\"title\":\"Ankereigenschaften\",\"name\":\"Ankername\",\"errorName\":\"Bitte geben Sie den Namen des Ankers ein\",\"remove\":\"Anker entfernen\"},\"anchorId\":\"Nach Elementkennung\",\"anchorName\":\"Nach Ankername\",\"charset\":\"Verknüpfter Ressourcenzeichensatz\",\"cssClasses\":\"Formatvorlagenklasse\",\"emailAddress\":\"E-Mail-Adresse\",\"emailBody\":\"Nachrichtentext\",\"emailSubject\":\"Betreffzeile\",\"id\":\"Kennung\",\"info\":\"Linkinfo\",\"langCode\":\"Sprachcode\",\"langDir\":\"Schreibrichtung\",\"langDirLTR\":\"Links nach Rechts (LTR)\",\"langDirRTL\":\"Rechts nach Links (RTL)\",\"menu\":\"Link bearbeiten\",\"name\":\"Name\",\"noAnchors\":\"(Keine Anker im Dokument vorhanden)\",\"noEmail\":\"Bitte geben Sie E-Mail-Adresse an\",\"noUrl\":\"Bitte geben Sie die Link-URL an\",\"other\":\"<andere>\",\"popupDependent\":\"Abhängig (Netscape)\",\"popupFeatures\":\"Pop-up Fenstereigenschaften\",\"popupFullScreen\":\"Vollbild (IE)\",\"popupLeft\":\"Linke Position\",\"popupLocationBar\":\"Adressleiste\",\"popupMenuBar\":\"Menüleiste\",\"popupResizable\":\"Grösse änderbar\",\"popupScrollBars\":\"Rollbalken\",\"popupStatusBar\":\"Statusleiste\",\"popupToolbar\":\"Werkzeugleiste\",\"popupTop\":\"Obere Position\",\"rel\":\"Beziehung\",\"selectAnchor\":\"Anker auswählen\",\"styles\":\"Style\",\"tabIndex\":\"Tab-Index\",\"target\":\"Zielseite\",\"targetFrame\":\"<Frame>\",\"targetFrameName\":\"Ziel-Fenster-Name\",\"targetPopup\":\"<Pop-up Fenster>\",\"targetPopupName\":\"Pop-up Fenster-Name\",\"title\":\"Link\",\"toAnchor\":\"Anker in dieser Seite\",\"toEmail\":\"E-Mail\",\"toUrl\":\"URL\",\"toolbar\":\"Link einfügen/editieren\",\"type\":\"Link-Typ\",\"unlink\":\"Link entfernen\",\"upload\":\"Hochladen\"},\"list\":{\"bulletedlist\":\"Liste\",\"numberedlist\":\"Nummerierte Liste einfügen/entfernen\"},\"magicline\":{\"title\":\"Absatz hier einfügen\"},\"maximize\":{\"maximize\":\"Maximieren\",\"minimize\":\"Minimieren\"},\"pastetext\":{\"button\":\"Als Klartext einfügen\",\"title\":\"Als Klartext einfügen\"},\"pastefromword\":{\"confirmCleanup\":\"Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?\",\"error\":\"Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen\",\"title\":\"Aus Word einfügen\",\"toolbar\":\"Aus Word einfügen\"},\"removeformat\":{\"toolbar\":\"Formatierung entfernen\"},\"sourcearea\":{\"toolbar\":\"Quellcode\"},\"specialchar\":{\"options\":\"Sonderzeichenoptionen\",\"title\":\"Sonderzeichen auswählen\",\"toolbar\":\"Sonderzeichen einfügen\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Stil\",\"panelTitle\":\"Formatierungsstile\",\"panelTitle1\":\"Blockstile\",\"panelTitle2\":\"Inline Stilart\",\"panelTitle3\":\"Objektstile\"},\"table\":{\"border\":\"Rahmengrösse\",\"caption\":\"Überschrift\",\"cell\":{\"menu\":\"Zelle\",\"insertBefore\":\"Zelle davor einfügen\",\"insertAfter\":\"Zelle danach einfügen\",\"deleteCell\":\"Zelle löschen\",\"merge\":\"Zellen verbinden\",\"mergeRight\":\"Nach rechts verbinden\",\"mergeDown\":\"Nach unten verbinden\",\"splitHorizontal\":\"Zelle horizontal teilen\",\"splitVertical\":\"Zelle vertikal teilen\",\"title\":\"Zelleneigenschaften\",\"cellType\":\"Zellart\",\"rowSpan\":\"Anzahl Zeilen verbinden\",\"colSpan\":\"Anzahl Spalten verbinden\",\"wordWrap\":\"Zeilenumbruch\",\"hAlign\":\"Horizontale Ausrichtung\",\"vAlign\":\"Vertikale Ausrichtung\",\"alignBaseline\":\"Grundlinie\",\"bgColor\":\"Hintergrundfarbe\",\"borderColor\":\"Rahmenfarbe\",\"data\":\"Daten\",\"header\":\"Überschrift\",\"yes\":\"Ja\",\"no\":\"Nein\",\"invalidWidth\":\"Zellenbreite muss eine Zahl sein.\",\"invalidHeight\":\"Zellenhöhe muss eine Zahl sein.\",\"invalidRowSpan\":\"\\\"Anzahl Zeilen verbinden\\\" muss eine Ganzzahl sein.\",\"invalidColSpan\":\"\\\"Anzahl Spalten verbinden\\\" muss eine Ganzzahl sein.\",\"chooseColor\":\"Wählen\"},\"cellPad\":\"Zellenabstand innen\",\"cellSpace\":\"Zellenabstand aussen\",\"column\":{\"menu\":\"Spalte\",\"insertBefore\":\"Spalte links davor einfügen\",\"insertAfter\":\"Spalte rechts danach einfügen\",\"deleteColumn\":\"Spalte löschen\"},\"columns\":\"Spalte\",\"deleteTable\":\"Tabelle löschen\",\"headers\":\"Kopfzeile\",\"headersBoth\":\"Beide\",\"headersColumn\":\"Erste Spalte\",\"headersNone\":\"Keine\",\"headersRow\":\"Erste Zeile\",\"invalidBorder\":\"Die Rahmenbreite muss eine Zahl sein.\",\"invalidCellPadding\":\"Der Zellenabstand innen muss eine positive Zahl sein.\",\"invalidCellSpacing\":\"Der Zellenabstand aussen muss eine positive Zahl sein.\",\"invalidCols\":\"Die Anzahl der Spalten muß grösser als 0 sein..\",\"invalidHeight\":\"Die Tabellenbreite muss eine Zahl sein.\",\"invalidRows\":\"Die Anzahl der Zeilen muß grösser als 0 sein.\",\"invalidWidth\":\"Die Tabellenbreite muss eine Zahl sein.\",\"menu\":\"Tabellen-Eigenschaften\",\"row\":{\"menu\":\"Zeile\",\"insertBefore\":\"Zeile oberhalb einfügen\",\"insertAfter\":\"Zeile unterhalb einfügen\",\"deleteRow\":\"Zeile entfernen\"},\"rows\":\"Zeile\",\"summary\":\"Inhaltsübersicht\",\"title\":\"Tabellen-Eigenschaften\",\"toolbar\":\"Tabelle\",\"widthPc\":\"%\",\"widthPx\":\"Pixel\",\"widthUnit\":\"Breite Einheit\"},\"undo\":{\"redo\":\"Wiederherstellen\",\"undo\":\"Rückgängig\"},\"wsc\":{\"btnIgnore\":\"Ignore\",\"btnIgnoreAll\":\"Ignore All\",\"btnReplace\":\"Replace\",\"btnReplaceAll\":\"Replace All\",\"btnUndo\":\"Undo\",\"changeTo\":\"Change to\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Spell checker not installed. Do you want to download it now?\",\"manyChanges\":\"Spell check complete: %1 words changed\",\"noChanges\":\"Spell check complete: No words changed\",\"noMispell\":\"Spell check complete: No misspellings found\",\"noSuggestions\":\"- No suggestions -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Not in dictionary\",\"oneChange\":\"Spell check complete: One word changed\",\"progress\":\"Spell check in progress...\",\"title\":\"Spell Checker\",\"toolbar\":\"Check Spelling\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/de.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['de']={\"editor\":\"WYSIWYG-Editor\",\"editorPanel\":\"WYSIWYG-Editor-Leiste\",\"common\":{\"editorHelp\":\"Drücken Sie ALT 0 für Hilfe\",\"browseServer\":\"Server durchsuchen\",\"url\":\"URL\",\"protocol\":\"Protokoll\",\"upload\":\"Hochladen\",\"uploadSubmit\":\"Zum Server senden\",\"image\":\"Bild\",\"flash\":\"Flash\",\"form\":\"Formular\",\"checkbox\":\"Kontrollbox\",\"radio\":\"Optionsfeld\",\"textField\":\"Textfeld\",\"textarea\":\"Textfeld\",\"hiddenField\":\"Verstecktes Feld\",\"button\":\"Schaltfläche\",\"select\":\"Auswahlfeld\",\"imageButton\":\"Bildschaltfläche\",\"notSet\":\"<nicht festgelegt>\",\"id\":\"Kennung\",\"name\":\"Name\",\"langDir\":\"Schreibrichtung\",\"langDirLtr\":\"Links nach Rechts (LTR)\",\"langDirRtl\":\"Rechts nach Links (RTL)\",\"langCode\":\"Sprachcode\",\"longDescr\":\"Langbeschreibungs-URL\",\"cssClass\":\"Formatvorlagenklassen\",\"advisoryTitle\":\"Titel Beschreibung\",\"cssStyle\":\"Stil\",\"ok\":\"OK\",\"cancel\":\"Abbrechen\",\"close\":\"Schließen\",\"preview\":\"Vorschau\",\"resize\":\"Größe ändern\",\"generalTab\":\"Allgemein\",\"advancedTab\":\"Erweitert\",\"validateNumberFailed\":\"Dieser Wert ist keine Nummer.\",\"confirmNewPage\":\"Alle nicht gespeicherten Änderungen gehen verlohren. Sind Sie sicher die neue Seite zu laden?\",\"confirmCancel\":\"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?\",\"options\":\"Optionen\",\"target\":\"Zielseite\",\"targetNew\":\"Neues Fenster (_blank)\",\"targetTop\":\"Oberstes Fenster (_top)\",\"targetSelf\":\"Gleiches Fenster (_self)\",\"targetParent\":\"Oberes Fenster (_parent)\",\"langDirLTR\":\"Links nach Rechts (LNR)\",\"langDirRTL\":\"Rechts nach Links (RNL)\",\"styles\":\"Style\",\"cssClasses\":\"Stylesheet Klasse\",\"width\":\"Breite\",\"height\":\"Höhe\",\"align\":\"Ausrichtung\",\"alignLeft\":\"Links\",\"alignRight\":\"Rechts\",\"alignCenter\":\"Zentriert\",\"alignJustify\":\"Blocksatz\",\"alignTop\":\"Oben\",\"alignMiddle\":\"Mitte\",\"alignBottom\":\"Unten\",\"alignNone\":\"Keine\",\"invalidValue\":\"Ungültiger Wert.\",\"invalidHeight\":\"Höhe muss eine Zahl sein.\",\"invalidWidth\":\"Breite muss eine Zahl sein.\",\"invalidCssLength\":\"Wert spezifiziert für \\\"%1\\\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).\",\"invalidHtmlLength\":\"Wert spezifiziert für \\\"%1\\\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte HTML Messeinheit (px oder %).\",\"invalidInlineStyle\":\"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Tupels mit dem Format \\\"Name : Wert\\\" getrennt mit Semikolons.\",\"cssLengthTooltip\":\"Gebe eine Zahl ein für ein Wert in pixels oder eine Zahl mit einer korrekten CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, nicht verfügbar</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Alle Rechte vorbehalten.\",\"dlgTitle\":\"Über CKEditor\",\"help\":\"Prüfen Sie $1 für Hilfe.\",\"moreInfo\":\"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:\",\"title\":\"Über CKEditor\",\"userGuide\":\"CKEditor Benutzerhandbuch\"},\"basicstyles\":{\"bold\":\"Fett\",\"italic\":\"Kursiv\",\"strike\":\"Durchgestrichen\",\"subscript\":\"Tiefgestellt\",\"superscript\":\"Hochgestellt\",\"underline\":\"Unterstrichen\"},\"blockquote\":{\"toolbar\":\"Zitatblock\"},\"clipboard\":{\"copy\":\"Kopieren\",\"copyError\":\"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).\",\"cut\":\"Ausschneiden\",\"cutError\":\"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).\",\"paste\":\"Einfügen\",\"pasteArea\":\"Einfügebereich\",\"pasteMsg\":\"Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.\",\"securityMsg\":\"Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.\",\"title\":\"Einfügen\"},\"contextmenu\":{\"options\":\"Kontextmenüoptionen\"},\"button\":{\"selectedLabel\":\"%1 (Ausgewählt)\"},\"toolbar\":{\"toolbarCollapse\":\"Werkzeugleiste einklappen\",\"toolbarExpand\":\"Werkzeugleiste ausklappen\",\"toolbarGroups\":{\"document\":\"Dokument\",\"clipboard\":\"Zwischenablage/Rückgängig\",\"editing\":\"Editieren\",\"forms\":\"Formulare\",\"basicstyles\":\"Grundstile\",\"paragraph\":\"Absatz\",\"links\":\"Links\",\"insert\":\"Einfügen\",\"styles\":\"Stile\",\"colors\":\"Farben\",\"tools\":\"Werkzeuge\"},\"toolbars\":\"Editor Werkzeugleisten\"},\"elementspath\":{\"eleLabel\":\"Elementepfad\",\"eleTitle\":\"%1 Element\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Absatzformat\",\"tag_address\":\"Adresse\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Überschrift 1\",\"tag_h2\":\"Überschrift 2\",\"tag_h3\":\"Überschrift 3\",\"tag_h4\":\"Überschrift 4\",\"tag_h5\":\"Überschrift 5\",\"tag_h6\":\"Überschrift 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatiert\"},\"horizontalrule\":{\"toolbar\":\"Horizontale Linie einfügen\"},\"image\":{\"alt\":\"Alternativer Text\",\"border\":\"Rahmen\",\"btnUpload\":\"Zum Server senden\",\"button2Img\":\"Möchten Sie die ausgewählte Bildschaltfläche in ein einfaches Bild umwandeln?\",\"hSpace\":\"Horizontal-Abstand\",\"img2Button\":\"Möchten Sie das ausgewählte Bild in eine Bildschaltfläche umwandeln?\",\"infoTab\":\"Bildinfo\",\"linkTab\":\"Link\",\"lockRatio\":\"Größenverhältnis beibehalten\",\"menu\":\"Bildeigenschaften\",\"resetSize\":\"Größe zurücksetzen\",\"title\":\"Bildeigenschaften\",\"titleButton\":\"Bildschaltflächeneigenschaften\",\"upload\":\"Hochladen\",\"urlMissing\":\"Bildquellen-URL fehlt.\",\"vSpace\":\"Vertikal-Abstand\",\"validateBorder\":\"Rahmen muss eine ganze Zahl sein.\",\"validateHSpace\":\"Horizontal-Abstand muss eine ganze Zahl sein.\",\"validateVSpace\":\"Vertikal-Abstand muss eine ganze Zahl sein.\"},\"indent\":{\"indent\":\"Einzug erhöhen\",\"outdent\":\"Einzug verringern\"},\"fakeobjects\":{\"anchor\":\"Anker\",\"flash\":\"Flash-Animation\",\"hiddenfield\":\"Verstecktes Feld\",\"iframe\":\"IFrame\",\"unknown\":\"Unbekanntes Objekt\"},\"link\":{\"acccessKey\":\"Zugriffstaste\",\"advanced\":\"Erweitert\",\"advisoryContentType\":\"Inhaltstyp\",\"advisoryTitle\":\"Titel Beschreibung\",\"anchor\":{\"toolbar\":\"Anker\",\"menu\":\"Anker bearbeiten\",\"title\":\"Ankereigenschaften\",\"name\":\"Ankername\",\"errorName\":\"Bitte geben Sie den Namen des Ankers ein\",\"remove\":\"Anker entfernen\"},\"anchorId\":\"Nach Elementkennung\",\"anchorName\":\"Nach Ankername\",\"charset\":\"Verknüpfter Ressourcenzeichensatz\",\"cssClasses\":\"Formatvorlagenklasse\",\"emailAddress\":\"E-Mail-Adresse\",\"emailBody\":\"Nachrichtentext\",\"emailSubject\":\"Betreffzeile\",\"id\":\"Kennung\",\"info\":\"Linkinfo\",\"langCode\":\"Sprachcode\",\"langDir\":\"Schreibrichtung\",\"langDirLTR\":\"Links nach Rechts (LTR)\",\"langDirRTL\":\"Rechts nach Links (RTL)\",\"menu\":\"Link bearbeiten\",\"name\":\"Name\",\"noAnchors\":\"(Keine Anker im Dokument vorhanden)\",\"noEmail\":\"Bitte geben Sie E-Mail-Adresse an\",\"noUrl\":\"Bitte geben Sie die Link-URL an\",\"other\":\"<andere>\",\"popupDependent\":\"Abhängig (Netscape)\",\"popupFeatures\":\"Pop-up Fenstereigenschaften\",\"popupFullScreen\":\"Vollbild (IE)\",\"popupLeft\":\"Linke Position\",\"popupLocationBar\":\"Adressleiste\",\"popupMenuBar\":\"Menüleiste\",\"popupResizable\":\"Größe änderbar\",\"popupScrollBars\":\"Rollbalken\",\"popupStatusBar\":\"Statusleiste\",\"popupToolbar\":\"Werkzeugleiste\",\"popupTop\":\"Obere Position\",\"rel\":\"Beziehung\",\"selectAnchor\":\"Anker auswählen\",\"styles\":\"Style\",\"tabIndex\":\"Tab-Index\",\"target\":\"Zielseite\",\"targetFrame\":\"<Frame>\",\"targetFrameName\":\"Ziel-Fenster-Name\",\"targetPopup\":\"<Pop-up Fenster>\",\"targetPopupName\":\"Pop-up Fenster-Name\",\"title\":\"Link\",\"toAnchor\":\"Anker in dieser Seite\",\"toEmail\":\"E-Mail\",\"toUrl\":\"URL\",\"toolbar\":\"Link einfügen/editieren\",\"type\":\"Link-Typ\",\"unlink\":\"Link entfernen\",\"upload\":\"Hochladen\"},\"list\":{\"bulletedlist\":\"Liste\",\"numberedlist\":\"Nummerierte Liste einfügen/entfernen\"},\"magicline\":{\"title\":\"Absatz hier einfügen\"},\"maximize\":{\"maximize\":\"Maximieren\",\"minimize\":\"Minimieren\"},\"pastetext\":{\"button\":\"Als Klartext einfügen\",\"title\":\"Als Klartext einfügen\"},\"pastefromword\":{\"confirmCleanup\":\"Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?\",\"error\":\"Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen\",\"title\":\"Aus Word einfügen\",\"toolbar\":\"Aus Word einfügen\"},\"removeformat\":{\"toolbar\":\"Formatierung entfernen\"},\"sourcearea\":{\"toolbar\":\"Quellcode\"},\"specialchar\":{\"options\":\"Sonderzeichenoptionen\",\"title\":\"Sonderzeichen auswählen\",\"toolbar\":\"Sonderzeichen einfügen\"},\"scayt\":{\"btn_about\":\"Über SCAYT\",\"btn_dictionaries\":\"Wörterbücher\",\"btn_disable\":\"SCAYT ausschalten\",\"btn_enable\":\"SCAYT einschalten\",\"btn_langs\":\"Sprachen\",\"btn_options\":\"Optionen\",\"text_title\":\"Rechtschreibprüfung während der Texteingabe (SCAYT)\"},\"stylescombo\":{\"label\":\"Stil\",\"panelTitle\":\"Formatierungsstile\",\"panelTitle1\":\"Blockstile\",\"panelTitle2\":\"Inline Stilart\",\"panelTitle3\":\"Objektstile\"},\"table\":{\"border\":\"Rahmengröße\",\"caption\":\"Überschrift\",\"cell\":{\"menu\":\"Zelle\",\"insertBefore\":\"Zelle davor einfügen\",\"insertAfter\":\"Zelle danach einfügen\",\"deleteCell\":\"Zelle löschen\",\"merge\":\"Zellen verbinden\",\"mergeRight\":\"Nach rechts verbinden\",\"mergeDown\":\"Nach unten verbinden\",\"splitHorizontal\":\"Zelle horizontal teilen\",\"splitVertical\":\"Zelle vertikal teilen\",\"title\":\"Zelleneigenschaften\",\"cellType\":\"Zellart\",\"rowSpan\":\"Anzahl Zeilen verbinden\",\"colSpan\":\"Anzahl Spalten verbinden\",\"wordWrap\":\"Zeilenumbruch\",\"hAlign\":\"Horizontale Ausrichtung\",\"vAlign\":\"Vertikale Ausrichtung\",\"alignBaseline\":\"Grundlinie\",\"bgColor\":\"Hintergrundfarbe\",\"borderColor\":\"Rahmenfarbe\",\"data\":\"Daten\",\"header\":\"Überschrift\",\"yes\":\"Ja\",\"no\":\"Nein\",\"invalidWidth\":\"Zellenbreite muss eine Zahl sein.\",\"invalidHeight\":\"Zellenhöhe muss eine Zahl sein.\",\"invalidRowSpan\":\"\\\"Anzahl Zeilen verbinden\\\" muss eine Ganzzahl sein.\",\"invalidColSpan\":\"\\\"Anzahl Spalten verbinden\\\" muss eine Ganzzahl sein.\",\"chooseColor\":\"Wählen\"},\"cellPad\":\"Zellenabstand innen\",\"cellSpace\":\"Zellenabstand außen\",\"column\":{\"menu\":\"Spalte\",\"insertBefore\":\"Spalte links davor einfügen\",\"insertAfter\":\"Spalte rechts danach einfügen\",\"deleteColumn\":\"Spalte löschen\"},\"columns\":\"Spalte\",\"deleteTable\":\"Tabelle löschen\",\"headers\":\"Kopfzeile\",\"headersBoth\":\"Beide\",\"headersColumn\":\"Erste Spalte\",\"headersNone\":\"Keine\",\"headersRow\":\"Erste Zeile\",\"invalidBorder\":\"Die Rahmenbreite muß eine Zahl sein.\",\"invalidCellPadding\":\"Der Zellenabstand innen muß eine positive Zahl sein.\",\"invalidCellSpacing\":\"Der Zellenabstand außen muß eine positive Zahl sein.\",\"invalidCols\":\"Die Anzahl der Spalten muß größer als 0 sein..\",\"invalidHeight\":\"Die Tabellenbreite muß eine Zahl sein.\",\"invalidRows\":\"Die Anzahl der Zeilen muß größer als 0 sein.\",\"invalidWidth\":\"Die Tabellenbreite muss eine Zahl sein.\",\"menu\":\"Tabellen-Eigenschaften\",\"row\":{\"menu\":\"Zeile\",\"insertBefore\":\"Zeile oberhalb einfügen\",\"insertAfter\":\"Zeile unterhalb einfügen\",\"deleteRow\":\"Zeile entfernen\"},\"rows\":\"Zeile\",\"summary\":\"Inhaltsübersicht\",\"title\":\"Tabellen-Eigenschaften\",\"toolbar\":\"Tabelle\",\"widthPc\":\"%\",\"widthPx\":\"Pixel\",\"widthUnit\":\"Breite Einheit\"},\"undo\":{\"redo\":\"Wiederherstellen\",\"undo\":\"Rückgängig\"},\"wsc\":{\"btnIgnore\":\"Ignorieren\",\"btnIgnoreAll\":\"Alle Ignorieren\",\"btnReplace\":\"Ersetzen\",\"btnReplaceAll\":\"Alle Ersetzen\",\"btnUndo\":\"Rückgängig\",\"changeTo\":\"Ändern in\",\"errorLoading\":\"Fehler beim laden des Dienstanbieters: %s.\",\"ieSpellDownload\":\"Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?\",\"manyChanges\":\"Rechtschreibprüfung abgeschlossen - %1 Wörter geändert\",\"noChanges\":\"Rechtschreibprüfung abgeschlossen - keine Worte geändert\",\"noMispell\":\"Rechtschreibprüfung abgeschlossen - keine Fehler gefunden\",\"noSuggestions\":\" - keine Vorschläge - \",\"notAvailable\":\"Entschuldigung, aber dieser Dienst steht im Moment nicht zur Verfügung.\",\"notInDic\":\"Nicht im Wörterbuch\",\"oneChange\":\"Rechtschreibprüfung abgeschlossen - ein Wort geändert\",\"progress\":\"Rechtschreibprüfung läuft...\",\"title\":\"Rechtschreibprüfung\",\"toolbar\":\"Rechtschreibprüfung\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/el.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['el']={\"editor\":\"Επεξεργαστής Πλούσιου Κειμένου\",\"editorPanel\":\"Πίνακας Επεξεργαστή Πλούσιου Κειμένου\",\"common\":{\"editorHelp\":\"Πατήστε το ALT 0 για βοήθεια\",\"browseServer\":\"Εξερεύνηση Διακομιστή\",\"url\":\"URL\",\"protocol\":\"Πρωτόκολλο\",\"upload\":\"Αποστολή\",\"uploadSubmit\":\"Αποστολή στον Διακομιστή\",\"image\":\"Εικόνα\",\"flash\":\"Flash\",\"form\":\"Φόρμα\",\"checkbox\":\"Κουτί Επιλογής\",\"radio\":\"Κουμπί Επιλογής\",\"textField\":\"Πεδίο Κειμένου\",\"textarea\":\"Περιοχή Κειμένου\",\"hiddenField\":\"Κρυφό Πεδίο\",\"button\":\"Κουμπί\",\"select\":\"Πεδίο Επιλογής\",\"imageButton\":\"Κουμπί Εικόνας\",\"notSet\":\"<δεν έχει ρυθμιστεί>\",\"id\":\"Id\",\"name\":\"Όνομα\",\"langDir\":\"Κατεύθυνση Κειμένου\",\"langDirLtr\":\"Αριστερά προς Δεξιά (LTR)\",\"langDirRtl\":\"Δεξιά προς Αριστερά (RTL)\",\"langCode\":\"Κωδικός Γλώσσας\",\"longDescr\":\"Αναλυτική Περιγραφή URL\",\"cssClass\":\"Κλάσεις Φύλλων Στυλ\",\"advisoryTitle\":\"Ενδεικτικός Τίτλος\",\"cssStyle\":\"Μορφή Κειμένου\",\"ok\":\"OK\",\"cancel\":\"Ακύρωση\",\"close\":\"Κλείσιμο\",\"preview\":\"Προεπισκόπηση\",\"resize\":\"Αλλαγή Μεγέθους\",\"generalTab\":\"Γενικά\",\"advancedTab\":\"Για Προχωρημένους\",\"validateNumberFailed\":\"Αυτή η τιμή δεν είναι αριθμός.\",\"confirmNewPage\":\"Οι όποιες αλλαγές στο περιεχόμενο θα χαθούν. Είσαστε σίγουροι ότι θέλετε να φορτώσετε μια νέα σελίδα;\",\"confirmCancel\":\"Μερικές επιλογές έχουν αλλάξει. Είσαστε σίγουροι ότι θέλετε να κλείσετε το παράθυρο διαλόγου;\",\"options\":\"Επιλογές\",\"target\":\"Προορισμός\",\"targetNew\":\"Νέο Παράθυρο (_blank)\",\"targetTop\":\"Αρχική Περιοχή (_top)\",\"targetSelf\":\"Ίδιο Παράθυρο (_self)\",\"targetParent\":\"Γονεϊκό Παράθυρο (_parent)\",\"langDirLTR\":\"Αριστερά προς Δεξιά (LTR)\",\"langDirRTL\":\"Δεξιά προς Αριστερά (RTL)\",\"styles\":\"Μορφή\",\"cssClasses\":\"Κλάσεις Φύλλων Στυλ\",\"width\":\"Πλάτος\",\"height\":\"Ύψος\",\"align\":\"Στοίχιση\",\"alignLeft\":\"Αριστερά\",\"alignRight\":\"Δεξιά\",\"alignCenter\":\"Κέντρο\",\"alignJustify\":\"Πλήρης Στοίχιση\",\"alignTop\":\"Πάνω\",\"alignMiddle\":\"Μέση\",\"alignBottom\":\"Κάτω\",\"alignNone\":\"Χωρίς\",\"invalidValue\":\"Μη έγκυρη τιμή.\",\"invalidHeight\":\"Το ύψος πρέπει να είναι ένας αριθμός.\",\"invalidWidth\":\"Το πλάτος πρέπει να είναι ένας αριθμός.\",\"invalidCssLength\":\"Η τιμή που ορίζεται για το πεδίο \\\"%1\\\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).\",\"invalidHtmlLength\":\"Η τιμή που ορίζεται για το πεδίο \\\"%1\\\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης HTML (px ή %).\",\"invalidInlineStyle\":\"Η τιμή για το εν σειρά στυλ πρέπει να περιέχει ένα ή περισσότερα ζεύγη με την μορφή \\\"όνομα: τιμή\\\" διαχωρισμένα με Ελληνικό ερωτηματικό.\",\"cssLengthTooltip\":\"Εισάγεται μια τιμή σε pixel ή έναν αριθμό μαζί με μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, δεν είναι διαθέσιμο</span>\"},\"about\":{\"copy\":\"Πνευματικά δικαιώματα &copy; $1 Με επιφύλαξη παντός δικαιώματος.\",\"dlgTitle\":\"Περί του CKEditor\",\"help\":\"Ελέγξτε τις $1 για βοήθεια.\",\"moreInfo\":\"Για πληροφορίες σχετικές με την άδεια χρήσης, παρακαλούμε επισκεφθείτε την ιστοσελίδα μας:\",\"title\":\"Περί του CKEditor\",\"userGuide\":\"Οδηγίες Χρήστη CKEditor\"},\"basicstyles\":{\"bold\":\"Έντονη\",\"italic\":\"Πλάγια\",\"strike\":\"Διακριτή Διαγραφή\",\"subscript\":\"Δείκτης\",\"superscript\":\"Εκθέτης\",\"underline\":\"Υπογράμμιση\"},\"blockquote\":{\"toolbar\":\"Περιοχή Παράθεσης\"},\"clipboard\":{\"copy\":\"Αντιγραφή\",\"copyError\":\"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+C).\",\"cut\":\"Αποκοπή\",\"cutError\":\"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+X).\",\"paste\":\"Επικόλληση\",\"pasteArea\":\"Περιοχή Επικόλλησης\",\"pasteMsg\":\"Παρακαλώ επικολλήστε στο ακόλουθο κουτί χρησιμοποιώντας το πληκτρολόγιο (<strong>Ctrl/Cmd+V</strong>) και πατήστε OK.\",\"securityMsg\":\"Λόγων των ρυθμίσεων ασφάλειας του περιηγητή σας, ο επεξεργαστής δεν μπορεί να έχει πρόσβαση στην μνήμη επικόλλησης. Χρειάζεται να επικολλήσετε ξανά σε αυτό το παράθυρο.\",\"title\":\"Επικόλληση\"},\"contextmenu\":{\"options\":\"Επιλογές Αναδυόμενου Μενού\"},\"button\":{\"selectedLabel\":\"%1 (Επιλεγμένο)\"},\"toolbar\":{\"toolbarCollapse\":\"Σύμπτυξη Εργαλειοθήκης\",\"toolbarExpand\":\"Ανάπτυξη Εργαλειοθήκης\",\"toolbarGroups\":{\"document\":\"Έγγραφο\",\"clipboard\":\"Πρόχειρο/Αναίρεση\",\"editing\":\"Επεξεργασία\",\"forms\":\"Φόρμες\",\"basicstyles\":\"Βασικά Στυλ\",\"paragraph\":\"Παράγραφος\",\"links\":\"Σύνδεσμοι\",\"insert\":\"Εισαγωγή\",\"styles\":\"Στυλ\",\"colors\":\"Χρώματα\",\"tools\":\"Εργαλεία\"},\"toolbars\":\"Εργαλειοθήκες επεξεργαστή\"},\"elementspath\":{\"eleLabel\":\"Διαδρομή Στοιχείων\",\"eleTitle\":\"Στοιχείο %1\"},\"format\":{\"label\":\"Μορφοποίηση\",\"panelTitle\":\"Μορφοποίηση Παραγράφου\",\"tag_address\":\"Διεύθυνση\",\"tag_div\":\"Κανονική (DIV)\",\"tag_h1\":\"Κεφαλίδα 1\",\"tag_h2\":\"Κεφαλίδα 2\",\"tag_h3\":\"Κεφαλίδα 3\",\"tag_h4\":\"Κεφαλίδα 4\",\"tag_h5\":\"Κεφαλίδα 5\",\"tag_h6\":\"Κεφαλίδα 6\",\"tag_p\":\"Κανονική\",\"tag_pre\":\"Προ-μορφοποιημένη\"},\"horizontalrule\":{\"toolbar\":\"Εισαγωγή Οριζόντιας Γραμμής\"},\"image\":{\"alt\":\"Εναλλακτικό Κείμενο\",\"border\":\"Περίγραμμα\",\"btnUpload\":\"Αποστολή στον Διακομιστή\",\"button2Img\":\"Θέλετε να μετατρέψετε το επιλεγμένο κουμπί εικόνας σε απλή εικόνα;\",\"hSpace\":\"HSpace\",\"img2Button\":\"Θέλετε να μεταμορφώσετε την επιλεγμένη εικόνα που είναι πάνω σε ένα κουμπί;\",\"infoTab\":\"Πληροφορίες Εικόνας\",\"linkTab\":\"Σύνδεσμος\",\"lockRatio\":\"Κλείδωμα Αναλογίας\",\"menu\":\"Ιδιότητες Εικόνας\",\"resetSize\":\"Επαναφορά Αρχικού Μεγέθους\",\"title\":\"Ιδιότητες Εικόνας\",\"titleButton\":\"Ιδιότητες Κουμπιού Εικόνας\",\"upload\":\"Αποστολή\",\"urlMissing\":\"Το URL πηγής για την εικόνα λείπει.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"Το περίγραμμα πρέπει να είναι ένας ακέραιος αριθμός.\",\"validateHSpace\":\"Το HSpace πρέπει να είναι ένας ακέραιος αριθμός.\",\"validateVSpace\":\"Το VSpace πρέπει να είναι ένας ακέραιος αριθμός.\"},\"indent\":{\"indent\":\"Αύξηση Εσοχής\",\"outdent\":\"Μείωση Εσοχής\"},\"fakeobjects\":{\"anchor\":\"Άγκυρα\",\"flash\":\"Ταινία Flash\",\"hiddenfield\":\"Κρυφό Πεδίο\",\"iframe\":\"IFrame\",\"unknown\":\"Άγνωστο Αντικείμενο\"},\"link\":{\"acccessKey\":\"Συντόμευση\",\"advanced\":\"Για Προχωρημένους\",\"advisoryContentType\":\"Ενδεικτικός Τύπος Περιεχομένου\",\"advisoryTitle\":\"Ενδεικτικός Τίτλος\",\"anchor\":{\"toolbar\":\"Εισαγωγή/επεξεργασία Άγκυρας\",\"menu\":\"Ιδιότητες άγκυρας\",\"title\":\"Ιδιότητες άγκυρας\",\"name\":\"Όνομα άγκυρας\",\"errorName\":\"Παρακαλούμε εισάγετε όνομα άγκυρας\",\"remove\":\"Αφαίρεση Άγκυρας\"},\"anchorId\":\"Βάσει του Element Id\",\"anchorName\":\"Βάσει του Ονόματος Άγκυρας\",\"charset\":\"Κωδικοποίηση Χαρακτήρων Προσαρτημένης Πηγής\",\"cssClasses\":\"Κλάσεις Φύλλων Στυλ\",\"emailAddress\":\"Διεύθυνση E-mail\",\"emailBody\":\"Κείμενο Μηνύματος\",\"emailSubject\":\"Θέμα Μηνύματος\",\"id\":\"Id\",\"info\":\"Πληροφορίες Συνδέσμου\",\"langCode\":\"Κατεύθυνση Κειμένου\",\"langDir\":\"Κατεύθυνση Κειμένου\",\"langDirLTR\":\"Αριστερά προς Δεξιά (LTR)\",\"langDirRTL\":\"Δεξιά προς Αριστερά (RTL)\",\"menu\":\"Επεξεργασία Συνδέσμου\",\"name\":\"Όνομα\",\"noAnchors\":\"(Δεν υπάρχουν άγκυρες στο κείμενο)\",\"noEmail\":\"Εισάγετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου\",\"noUrl\":\"Εισάγετε την τοποθεσία (URL) του συνδέσμου\",\"other\":\"<άλλο>\",\"popupDependent\":\"Εξαρτημένο (Netscape)\",\"popupFeatures\":\"Επιλογές Αναδυόμενου Παραθύρου\",\"popupFullScreen\":\"Πλήρης Οθόνη (IE)\",\"popupLeft\":\"Θέση Αριστερά\",\"popupLocationBar\":\"Γραμμή Τοποθεσίας\",\"popupMenuBar\":\"Γραμμή Επιλογών\",\"popupResizable\":\"Προσαρμοζόμενο Μέγεθος\",\"popupScrollBars\":\"Μπάρες Κύλισης\",\"popupStatusBar\":\"Γραμμή Κατάστασης\",\"popupToolbar\":\"Εργαλειοθήκη\",\"popupTop\":\"Θέση Πάνω\",\"rel\":\"Σχέση\",\"selectAnchor\":\"Επιλέξτε μια Άγκυρα\",\"styles\":\"Μορφή\",\"tabIndex\":\"Σειρά Μεταπήδησης\",\"target\":\"Παράθυρο Προορισμού\",\"targetFrame\":\"<πλαίσιο>\",\"targetFrameName\":\"Όνομα Πλαισίου Προορισμού\",\"targetPopup\":\"<αναδυόμενο παράθυρο>\",\"targetPopupName\":\"Όνομα Αναδυόμενου Παραθύρου\",\"title\":\"Σύνδεσμος\",\"toAnchor\":\"Άγκυρα σε αυτήν τη σελίδα\",\"toEmail\":\"E-Mail\",\"toUrl\":\"URL\",\"toolbar\":\"Σύνδεσμος\",\"type\":\"Τύπος Συνδέσμου\",\"unlink\":\"Αφαίρεση Συνδέσμου\",\"upload\":\"Αποστολή\"},\"list\":{\"bulletedlist\":\"Εισαγωγή/Απομάκρυνση Λίστας Κουκκίδων\",\"numberedlist\":\"Εισαγωγή/Απομάκρυνση Αριθμημένης Λίστας\"},\"magicline\":{\"title\":\"Εισάγετε παράγραφο εδώ\"},\"maximize\":{\"maximize\":\"Μεγιστοποίηση\",\"minimize\":\"Ελαχιστοποίηση\"},\"pastetext\":{\"button\":\"Επικόλληση ως απλό κείμενο\",\"title\":\"Επικόλληση ως απλό κείμενο\"},\"pastefromword\":{\"confirmCleanup\":\"Το κείμενο που επικολλάται φαίνεται να είναι αντιγραμμένο από το Word. Μήπως θα θέλατε να καθαριστεί προτού επικολληθεί;\",\"error\":\"Δεν ήταν δυνατό να καθαριστούν τα δεδομένα λόγω ενός εσωτερικού σφάλματος\",\"title\":\"Επικόλληση από το Word\",\"toolbar\":\"Επικόλληση από το Word\"},\"removeformat\":{\"toolbar\":\"Εκκαθάριση Μορφοποίησης\"},\"sourcearea\":{\"toolbar\":\"Κώδικας\"},\"specialchar\":{\"options\":\"Επιλογές Ειδικών Χαρακτήρων\",\"title\":\"Επιλέξτε Έναν Ειδικό Χαρακτήρα\",\"toolbar\":\"Εισαγωγή Ειδικού Χαρακτήρα\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Λεξικά\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Γλώσσες\",\"btn_options\":\"Επιλογές\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Μορφές\",\"panelTitle\":\"Στυλ Μορφοποίησης\",\"panelTitle1\":\"Στυλ Τμημάτων\",\"panelTitle2\":\"Στυλ Εν Σειρά\",\"panelTitle3\":\"Στυλ Αντικειμένων\"},\"table\":{\"border\":\"Πάχος Περιγράμματος\",\"caption\":\"Λεζάντα\",\"cell\":{\"menu\":\"Κελί\",\"insertBefore\":\"Εισαγωγή Κελιού Πριν\",\"insertAfter\":\"Εισαγωγή Κελιού Μετά\",\"deleteCell\":\"Διαγραφή Κελιών\",\"merge\":\"Ενοποίηση Κελιών\",\"mergeRight\":\"Συγχώνευση Με Δεξιά\",\"mergeDown\":\"Συγχώνευση Με Κάτω\",\"splitHorizontal\":\"Οριζόντια Διαίρεση Κελιού\",\"splitVertical\":\"Κατακόρυφη Διαίρεση Κελιού\",\"title\":\"Ιδιότητες Κελιού\",\"cellType\":\"Τύπος Κελιού\",\"rowSpan\":\"Εύρος Γραμμών\",\"colSpan\":\"Εύρος Στηλών\",\"wordWrap\":\"Αναδίπλωση Λέξεων\",\"hAlign\":\"Οριζόντια Στοίχιση\",\"vAlign\":\"Κάθετη Στοίχιση\",\"alignBaseline\":\"Γραμμή Βάσης\",\"bgColor\":\"Χρώμα Φόντου\",\"borderColor\":\"Χρώμα Περιγράμματος\",\"data\":\"Δεδομένα\",\"header\":\"Κεφαλίδα\",\"yes\":\"Ναι\",\"no\":\"Όχι\",\"invalidWidth\":\"Το πλάτος του κελιού πρέπει να είναι αριθμός.\",\"invalidHeight\":\"Το ύψος του κελιού πρέπει να είναι αριθμός.\",\"invalidRowSpan\":\"Το εύρος των γραμμών πρέπει να είναι ακέραιος αριθμός.\",\"invalidColSpan\":\"Το εύρος των στηλών πρέπει να είναι ακέραιος αριθμός.\",\"chooseColor\":\"Επιλέξτε\"},\"cellPad\":\"Αναπλήρωση κελιών\",\"cellSpace\":\"Απόσταση κελιών\",\"column\":{\"menu\":\"Στήλη\",\"insertBefore\":\"Εισαγωγή Στήλης Πριν\",\"insertAfter\":\"Εισαγωγή Στήλης Μετά\",\"deleteColumn\":\"Διαγραφή Στηλών\"},\"columns\":\"Στήλες\",\"deleteTable\":\"Διαγραφή Πίνακα\",\"headers\":\"Κεφαλίδες\",\"headersBoth\":\"Και τα δύο\",\"headersColumn\":\"Πρώτη στήλη\",\"headersNone\":\"Κανένα\",\"headersRow\":\"Πρώτη Γραμμή\",\"invalidBorder\":\"Το πάχος του περιγράμματος πρέπει να είναι ένας αριθμός.\",\"invalidCellPadding\":\"Η αναπλήρωση των κελιών πρέπει να είναι θετικός αριθμός.\",\"invalidCellSpacing\":\"Η απόσταση μεταξύ των κελιών πρέπει να είναι ένας θετικός αριθμός.\",\"invalidCols\":\"Ο αριθμός των στηλών πρέπει να είναι μεγαλύτερος από 0.\",\"invalidHeight\":\"Το ύψος του πίνακα πρέπει να είναι αριθμός.\",\"invalidRows\":\"Ο αριθμός των σειρών πρέπει να είναι μεγαλύτερος από 0.\",\"invalidWidth\":\"Το πλάτος του πίνακα πρέπει να είναι ένας αριθμός.\",\"menu\":\"Ιδιότητες Πίνακα\",\"row\":{\"menu\":\"Γραμμή\",\"insertBefore\":\"Εισαγωγή Γραμμής Πριν\",\"insertAfter\":\"Εισαγωγή Γραμμής Μετά\",\"deleteRow\":\"Διαγραφή Γραμμών\"},\"rows\":\"Γραμμές\",\"summary\":\"Περίληψη\",\"title\":\"Ιδιότητες Πίνακα\",\"toolbar\":\"Πίνακας\",\"widthPc\":\"τοις εκατό\",\"widthPx\":\"pixel\",\"widthUnit\":\"μονάδα πλάτους\"},\"undo\":{\"redo\":\"Επανάληψη\",\"undo\":\"Αναίρεση\"},\"wsc\":{\"btnIgnore\":\"Αγνόηση\",\"btnIgnoreAll\":\"Αγνόηση όλων\",\"btnReplace\":\"Αντικατάσταση\",\"btnReplaceAll\":\"Αντικατάσταση όλων\",\"btnUndo\":\"Αναίρεση\",\"changeTo\":\"Αλλαγή σε\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Δεν υπάρχει εγκατεστημένος ορθογράφος. Θέλετε να τον κατεβάσετε τώρα;\",\"manyChanges\":\"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Άλλαξαν %1 λέξεις\",\"noChanges\":\"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν άλλαξαν λέξεις\",\"noMispell\":\"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν βρέθηκαν λάθη\",\"noSuggestions\":\"- Δεν υπάρχουν προτάσεις -\",\"notAvailable\":\"Η υπηρεσία δεν είναι διαθέσιμη αυτήν την στιγμή.\",\"notInDic\":\"Δεν υπάρχει στο λεξικό\",\"oneChange\":\"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Άλλαξε μια λέξη\",\"progress\":\"Γίνεται ορθογραφικός έλεγχος...\",\"title\":\"Ορθογραφικός Έλεγχος\",\"toolbar\":\"Ορθογραφικός Έλεγχος\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/en-au.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['en-au']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Press ALT 0 for help\",\"browseServer\":\"Browse Server\",\"url\":\"URL\",\"protocol\":\"Protocol\",\"upload\":\"Upload\",\"uploadSubmit\":\"Send it to the Server\",\"image\":\"Image\",\"flash\":\"Flash\",\"form\":\"Form\",\"checkbox\":\"Checkbox\",\"radio\":\"Radio Button\",\"textField\":\"Text Field\",\"textarea\":\"Textarea\",\"hiddenField\":\"Hidden Field\",\"button\":\"Button\",\"select\":\"Selection Field\",\"imageButton\":\"Image Button\",\"notSet\":\"<not set>\",\"id\":\"Id\",\"name\":\"Name\",\"langDir\":\"Language Direction\",\"langDirLtr\":\"Left to Right (LTR)\",\"langDirRtl\":\"Right to Left (RTL)\",\"langCode\":\"Language Code\",\"longDescr\":\"Long Description URL\",\"cssClass\":\"Stylesheet Classes\",\"advisoryTitle\":\"Advisory Title\",\"cssStyle\":\"Style\",\"ok\":\"OK\",\"cancel\":\"Cancel\",\"close\":\"Close\",\"preview\":\"Preview\",\"resize\":\"Resize\",\"generalTab\":\"General\",\"advancedTab\":\"Advanced\",\"validateNumberFailed\":\"This value is not a number.\",\"confirmNewPage\":\"Any unsaved changes to this content will be lost. Are you sure you want to load new page?\",\"confirmCancel\":\"You have changed some options. Are you sure you want to close the dialog window?\",\"options\":\"Options\",\"target\":\"Target\",\"targetNew\":\"New Window (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"Same Window (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"Left to Right (LTR)\",\"langDirRTL\":\"Right to Left (RTL)\",\"styles\":\"Style\",\"cssClasses\":\"Stylesheet Classes\",\"width\":\"Width\",\"height\":\"Height\",\"align\":\"Align\",\"alignLeft\":\"Left\",\"alignRight\":\"Right\",\"alignCenter\":\"Centre\",\"alignJustify\":\"Justify\",\"alignTop\":\"Top\",\"alignMiddle\":\"Middle\",\"alignBottom\":\"Bottom\",\"alignNone\":\"None\",\"invalidValue\":\"Invalid value.\",\"invalidHeight\":\"Height must be a number.\",\"invalidWidth\":\"Width must be a number.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"About CKEditor\",\"help\":\"Check $1 for help.\",\"moreInfo\":\"For licensing information please visit our web site:\",\"title\":\"About CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"Bold\",\"italic\":\"Italic\",\"strike\":\"Strike Through\",\"subscript\":\"Subscript\",\"superscript\":\"Superscript\",\"underline\":\"Underline\"},\"blockquote\":{\"toolbar\":\"Block Quote\"},\"clipboard\":{\"copy\":\"Copy\",\"copyError\":\"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).\",\"cut\":\"Cut\",\"cutError\":\"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).\",\"paste\":\"Paste\",\"pasteArea\":\"Paste Area\",\"pasteMsg\":\"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK\",\"securityMsg\":\"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.\",\"title\":\"Paste\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Collapse Toolbar\",\"toolbarExpand\":\"Expand Toolbar\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"Editor toolbars\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Paragraph Format\",\"tag_address\":\"Address\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Heading 1\",\"tag_h2\":\"Heading 2\",\"tag_h3\":\"Heading 3\",\"tag_h4\":\"Heading 4\",\"tag_h5\":\"Heading 5\",\"tag_h6\":\"Heading 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatted\"},\"horizontalrule\":{\"toolbar\":\"Insert Horizontal Line\"},\"image\":{\"alt\":\"Alternative Text\",\"border\":\"Border\",\"btnUpload\":\"Send it to the Server\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"Image Info\",\"linkTab\":\"Link\",\"lockRatio\":\"Lock Ratio\",\"menu\":\"Image Properties\",\"resetSize\":\"Reset Size\",\"title\":\"Image Properties\",\"titleButton\":\"Image Button Properties\",\"upload\":\"Upload\",\"urlMissing\":\"Image source URL is missing.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"Border must be a whole number.\",\"validateHSpace\":\"HSpace must be a whole number.\",\"validateVSpace\":\"VSpace must be a whole number.\"},\"indent\":{\"indent\":\"Increase Indent\",\"outdent\":\"Decrease Indent\"},\"fakeobjects\":{\"anchor\":\"Anchor\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"Hidden Field\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"Access Key\",\"advanced\":\"Advanced\",\"advisoryContentType\":\"Advisory Content Type\",\"advisoryTitle\":\"Advisory Title\",\"anchor\":{\"toolbar\":\"Anchor\",\"menu\":\"Edit Anchor\",\"title\":\"Anchor Properties\",\"name\":\"Anchor Name\",\"errorName\":\"Please type the anchor name\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"By Element Id\",\"anchorName\":\"By Anchor Name\",\"charset\":\"Linked Resource Charset\",\"cssClasses\":\"Stylesheet Classes\",\"emailAddress\":\"E-Mail Address\",\"emailBody\":\"Message Body\",\"emailSubject\":\"Message Subject\",\"id\":\"Id\",\"info\":\"Link Info\",\"langCode\":\"Language Code\",\"langDir\":\"Language Direction\",\"langDirLTR\":\"Left to Right (LTR)\",\"langDirRTL\":\"Right to Left (RTL)\",\"menu\":\"Edit Link\",\"name\":\"Name\",\"noAnchors\":\"(No anchors available in the document)\",\"noEmail\":\"Please type the e-mail address\",\"noUrl\":\"Please type the link URL\",\"other\":\"<other>\",\"popupDependent\":\"Dependent (Netscape)\",\"popupFeatures\":\"Popup Window Features\",\"popupFullScreen\":\"Full Screen (IE)\",\"popupLeft\":\"Left Position\",\"popupLocationBar\":\"Location Bar\",\"popupMenuBar\":\"Menu Bar\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"Scroll Bars\",\"popupStatusBar\":\"Status Bar\",\"popupToolbar\":\"Toolbar\",\"popupTop\":\"Top Position\",\"rel\":\"Relationship\",\"selectAnchor\":\"Select an Anchor\",\"styles\":\"Style\",\"tabIndex\":\"Tab Index\",\"target\":\"Target\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Target Frame Name\",\"targetPopup\":\"<popup window>\",\"targetPopupName\":\"Popup Window Name\",\"title\":\"Link\",\"toAnchor\":\"Link to anchor in the text\",\"toEmail\":\"E-mail\",\"toUrl\":\"URL\",\"toolbar\":\"Link\",\"type\":\"Link Type\",\"unlink\":\"Unlink\",\"upload\":\"Upload\"},\"list\":{\"bulletedlist\":\"Insert/Remove Bulleted List\",\"numberedlist\":\"Insert/Remove Numbered List\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Maximize\",\"minimize\":\"Minimize\"},\"pastetext\":{\"button\":\"Paste as plain text\",\"title\":\"Paste as Plain Text\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"Paste from Word\",\"toolbar\":\"Paste from Word\"},\"removeformat\":{\"toolbar\":\"Remove Format\"},\"sourcearea\":{\"toolbar\":\"Source\"},\"specialchar\":{\"options\":\"Special Character Options\",\"title\":\"Select Special Character\",\"toolbar\":\"Insert Special Character\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Styles\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"Border size\",\"caption\":\"Caption\",\"cell\":{\"menu\":\"Cell\",\"insertBefore\":\"Insert Cell Before\",\"insertAfter\":\"Insert Cell After\",\"deleteCell\":\"Delete Cells\",\"merge\":\"Merge Cells\",\"mergeRight\":\"Merge Right\",\"mergeDown\":\"Merge Down\",\"splitHorizontal\":\"Split Cell Horizontally\",\"splitVertical\":\"Split Cell Vertically\",\"title\":\"Cell Properties\",\"cellType\":\"Cell Type\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Horizontal Alignment\",\"vAlign\":\"Vertical Alignment\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Background Color\",\"borderColor\":\"Border Color\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Yes\",\"no\":\"No\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Choose\"},\"cellPad\":\"Cell padding\",\"cellSpace\":\"Cell spacing\",\"column\":{\"menu\":\"Column\",\"insertBefore\":\"Insert Column Before\",\"insertAfter\":\"Insert Column After\",\"deleteColumn\":\"Delete Columns\"},\"columns\":\"Columns\",\"deleteTable\":\"Delete Table\",\"headers\":\"Headers\",\"headersBoth\":\"Both\",\"headersColumn\":\"First column\",\"headersNone\":\"None\",\"headersRow\":\"First Row\",\"invalidBorder\":\"Border size must be a number.\",\"invalidCellPadding\":\"Cell padding must be a number.\",\"invalidCellSpacing\":\"Cell spacing must be a number.\",\"invalidCols\":\"Number of columns must be a number greater than 0.\",\"invalidHeight\":\"Table height must be a number.\",\"invalidRows\":\"Number of rows must be a number greater than 0.\",\"invalidWidth\":\"Table width must be a number.\",\"menu\":\"Table Properties\",\"row\":{\"menu\":\"Row\",\"insertBefore\":\"Insert Row Before\",\"insertAfter\":\"Insert Row After\",\"deleteRow\":\"Delete Rows\"},\"rows\":\"Rows\",\"summary\":\"Summary\",\"title\":\"Table Properties\",\"toolbar\":\"Table\",\"widthPc\":\"percent\",\"widthPx\":\"pixels\",\"widthUnit\":\"width unit\"},\"undo\":{\"redo\":\"Redo\",\"undo\":\"Undo\"},\"wsc\":{\"btnIgnore\":\"Ignore\",\"btnIgnoreAll\":\"Ignore All\",\"btnReplace\":\"Replace\",\"btnReplaceAll\":\"Replace All\",\"btnUndo\":\"Undo\",\"changeTo\":\"Change to\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Spell checker not installed. Do you want to download it now?\",\"manyChanges\":\"Spell check complete: %1 words changed\",\"noChanges\":\"Spell check complete: No words changed\",\"noMispell\":\"Spell check complete: No misspellings found\",\"noSuggestions\":\"- No suggestions -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Not in dictionary\",\"oneChange\":\"Spell check complete: One word changed\",\"progress\":\"Spell check in progress...\",\"title\":\"Spell Checker\",\"toolbar\":\"Check Spelling\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/en-ca.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['en-ca']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Press ALT 0 for help\",\"browseServer\":\"Browse Server\",\"url\":\"URL\",\"protocol\":\"Protocol\",\"upload\":\"Upload\",\"uploadSubmit\":\"Send it to the Server\",\"image\":\"Image\",\"flash\":\"Flash\",\"form\":\"Form\",\"checkbox\":\"Checkbox\",\"radio\":\"Radio Button\",\"textField\":\"Text Field\",\"textarea\":\"Textarea\",\"hiddenField\":\"Hidden Field\",\"button\":\"Button\",\"select\":\"Selection Field\",\"imageButton\":\"Image Button\",\"notSet\":\"<not set>\",\"id\":\"Id\",\"name\":\"Name\",\"langDir\":\"Language Direction\",\"langDirLtr\":\"Left to Right (LTR)\",\"langDirRtl\":\"Right to Left (RTL)\",\"langCode\":\"Language Code\",\"longDescr\":\"Long Description URL\",\"cssClass\":\"Stylesheet Classes\",\"advisoryTitle\":\"Advisory Title\",\"cssStyle\":\"Style\",\"ok\":\"OK\",\"cancel\":\"Cancel\",\"close\":\"Close\",\"preview\":\"Preview\",\"resize\":\"Resize\",\"generalTab\":\"General\",\"advancedTab\":\"Advanced\",\"validateNumberFailed\":\"This value is not a number.\",\"confirmNewPage\":\"Any unsaved changes to this content will be lost. Are you sure you want to load new page?\",\"confirmCancel\":\"You have changed some options. Are you sure you want to close the dialog window?\",\"options\":\"Options\",\"target\":\"Target\",\"targetNew\":\"New Window (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"Same Window (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"Left to Right (LTR)\",\"langDirRTL\":\"Right to Left (RTL)\",\"styles\":\"Style\",\"cssClasses\":\"Stylesheet Classes\",\"width\":\"Width\",\"height\":\"Height\",\"align\":\"Align\",\"alignLeft\":\"Left\",\"alignRight\":\"Right\",\"alignCenter\":\"Centre\",\"alignJustify\":\"Justify\",\"alignTop\":\"Top\",\"alignMiddle\":\"Middle\",\"alignBottom\":\"Bottom\",\"alignNone\":\"None\",\"invalidValue\":\"Invalid value.\",\"invalidHeight\":\"Height must be a number.\",\"invalidWidth\":\"Width must be a number.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"About CKEditor\",\"help\":\"Check $1 for help.\",\"moreInfo\":\"For licensing information please visit our web site:\",\"title\":\"About CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"Bold\",\"italic\":\"Italic\",\"strike\":\"Strike Through\",\"subscript\":\"Subscript\",\"superscript\":\"Superscript\",\"underline\":\"Underline\"},\"blockquote\":{\"toolbar\":\"Block Quote\"},\"clipboard\":{\"copy\":\"Copy\",\"copyError\":\"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).\",\"cut\":\"Cut\",\"cutError\":\"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).\",\"paste\":\"Paste\",\"pasteArea\":\"Paste Area\",\"pasteMsg\":\"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK\",\"securityMsg\":\"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.\",\"title\":\"Paste\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Collapse Toolbar\",\"toolbarExpand\":\"Expand Toolbar\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"Editor toolbars\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Paragraph Format\",\"tag_address\":\"Address\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Heading 1\",\"tag_h2\":\"Heading 2\",\"tag_h3\":\"Heading 3\",\"tag_h4\":\"Heading 4\",\"tag_h5\":\"Heading 5\",\"tag_h6\":\"Heading 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatted\"},\"horizontalrule\":{\"toolbar\":\"Insert Horizontal Line\"},\"image\":{\"alt\":\"Alternative Text\",\"border\":\"Border\",\"btnUpload\":\"Send it to the Server\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"Image Info\",\"linkTab\":\"Link\",\"lockRatio\":\"Lock Ratio\",\"menu\":\"Image Properties\",\"resetSize\":\"Reset Size\",\"title\":\"Image Properties\",\"titleButton\":\"Image Button Properties\",\"upload\":\"Upload\",\"urlMissing\":\"Image source URL is missing.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"Border must be a whole number.\",\"validateHSpace\":\"HSpace must be a whole number.\",\"validateVSpace\":\"VSpace must be a whole number.\"},\"indent\":{\"indent\":\"Increase Indent\",\"outdent\":\"Decrease Indent\"},\"fakeobjects\":{\"anchor\":\"Anchor\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"Hidden Field\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"Access Key\",\"advanced\":\"Advanced\",\"advisoryContentType\":\"Advisory Content Type\",\"advisoryTitle\":\"Advisory Title\",\"anchor\":{\"toolbar\":\"Anchor\",\"menu\":\"Edit Anchor\",\"title\":\"Anchor Properties\",\"name\":\"Anchor Name\",\"errorName\":\"Please type the anchor name\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"By Element Id\",\"anchorName\":\"By Anchor Name\",\"charset\":\"Linked Resource Charset\",\"cssClasses\":\"Stylesheet Classes\",\"emailAddress\":\"E-Mail Address\",\"emailBody\":\"Message Body\",\"emailSubject\":\"Message Subject\",\"id\":\"Id\",\"info\":\"Link Info\",\"langCode\":\"Language Code\",\"langDir\":\"Language Direction\",\"langDirLTR\":\"Left to Right (LTR)\",\"langDirRTL\":\"Right to Left (RTL)\",\"menu\":\"Edit Link\",\"name\":\"Name\",\"noAnchors\":\"(No anchors available in the document)\",\"noEmail\":\"Please type the e-mail address\",\"noUrl\":\"Please type the link URL\",\"other\":\"<other>\",\"popupDependent\":\"Dependent (Netscape)\",\"popupFeatures\":\"Popup Window Features\",\"popupFullScreen\":\"Full Screen (IE)\",\"popupLeft\":\"Left Position\",\"popupLocationBar\":\"Location Bar\",\"popupMenuBar\":\"Menu Bar\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"Scroll Bars\",\"popupStatusBar\":\"Status Bar\",\"popupToolbar\":\"Toolbar\",\"popupTop\":\"Top Position\",\"rel\":\"Relationship\",\"selectAnchor\":\"Select an Anchor\",\"styles\":\"Style\",\"tabIndex\":\"Tab Index\",\"target\":\"Target\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Target Frame Name\",\"targetPopup\":\"<popup window>\",\"targetPopupName\":\"Popup Window Name\",\"title\":\"Link\",\"toAnchor\":\"Link to anchor in the text\",\"toEmail\":\"E-mail\",\"toUrl\":\"URL\",\"toolbar\":\"Link\",\"type\":\"Link Type\",\"unlink\":\"Unlink\",\"upload\":\"Upload\"},\"list\":{\"bulletedlist\":\"Insert/Remove Bulleted List\",\"numberedlist\":\"Insert/Remove Numbered List\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Maximize\",\"minimize\":\"Minimize\"},\"pastetext\":{\"button\":\"Paste as plain text\",\"title\":\"Paste as Plain Text\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"Paste from Word\",\"toolbar\":\"Paste from Word\"},\"removeformat\":{\"toolbar\":\"Remove Format\"},\"sourcearea\":{\"toolbar\":\"Source\"},\"specialchar\":{\"options\":\"Special Character Options\",\"title\":\"Select Special Character\",\"toolbar\":\"Insert Special Character\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Styles\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"Border size\",\"caption\":\"Caption\",\"cell\":{\"menu\":\"Cell\",\"insertBefore\":\"Insert Cell Before\",\"insertAfter\":\"Insert Cell After\",\"deleteCell\":\"Delete Cells\",\"merge\":\"Merge Cells\",\"mergeRight\":\"Merge Right\",\"mergeDown\":\"Merge Down\",\"splitHorizontal\":\"Split Cell Horizontally\",\"splitVertical\":\"Split Cell Vertically\",\"title\":\"Cell Properties\",\"cellType\":\"Cell Type\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Horizontal Alignment\",\"vAlign\":\"Vertical Alignment\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Background Color\",\"borderColor\":\"Border Color\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Yes\",\"no\":\"No\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Choose\"},\"cellPad\":\"Cell padding\",\"cellSpace\":\"Cell spacing\",\"column\":{\"menu\":\"Column\",\"insertBefore\":\"Insert Column Before\",\"insertAfter\":\"Insert Column After\",\"deleteColumn\":\"Delete Columns\"},\"columns\":\"Columns\",\"deleteTable\":\"Delete Table\",\"headers\":\"Headers\",\"headersBoth\":\"Both\",\"headersColumn\":\"First column\",\"headersNone\":\"None\",\"headersRow\":\"First Row\",\"invalidBorder\":\"Border size must be a number.\",\"invalidCellPadding\":\"Cell padding must be a number.\",\"invalidCellSpacing\":\"Cell spacing must be a number.\",\"invalidCols\":\"Number of columns must be a number greater than 0.\",\"invalidHeight\":\"Table height must be a number.\",\"invalidRows\":\"Number of rows must be a number greater than 0.\",\"invalidWidth\":\"Table width must be a number.\",\"menu\":\"Table Properties\",\"row\":{\"menu\":\"Row\",\"insertBefore\":\"Insert Row Before\",\"insertAfter\":\"Insert Row After\",\"deleteRow\":\"Delete Rows\"},\"rows\":\"Rows\",\"summary\":\"Summary\",\"title\":\"Table Properties\",\"toolbar\":\"Table\",\"widthPc\":\"percent\",\"widthPx\":\"pixels\",\"widthUnit\":\"width unit\"},\"undo\":{\"redo\":\"Redo\",\"undo\":\"Undo\"},\"wsc\":{\"btnIgnore\":\"Ignore\",\"btnIgnoreAll\":\"Ignore All\",\"btnReplace\":\"Replace\",\"btnReplaceAll\":\"Replace All\",\"btnUndo\":\"Undo\",\"changeTo\":\"Change to\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Spell checker not installed. Do you want to download it now?\",\"manyChanges\":\"Spell check complete: %1 words changed\",\"noChanges\":\"Spell check complete: No words changed\",\"noMispell\":\"Spell check complete: No misspellings found\",\"noSuggestions\":\"- No suggestions -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Not in dictionary\",\"oneChange\":\"Spell check complete: One word changed\",\"progress\":\"Spell check in progress...\",\"title\":\"Spell Checker\",\"toolbar\":\"Check Spelling\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/en-gb.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['en-gb']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Press ALT 0 for help\",\"browseServer\":\"Browse Server\",\"url\":\"URL\",\"protocol\":\"Protocol\",\"upload\":\"Upload\",\"uploadSubmit\":\"Send it to the Server\",\"image\":\"Image\",\"flash\":\"Flash\",\"form\":\"Form\",\"checkbox\":\"Checkbox\",\"radio\":\"Radio Button\",\"textField\":\"Text Field\",\"textarea\":\"Textarea\",\"hiddenField\":\"Hidden Field\",\"button\":\"Button\",\"select\":\"Selection Field\",\"imageButton\":\"Image Button\",\"notSet\":\"<not set>\",\"id\":\"Id\",\"name\":\"Name\",\"langDir\":\"Language Direction\",\"langDirLtr\":\"Left to Right (LTR)\",\"langDirRtl\":\"Right to Left (RTL)\",\"langCode\":\"Language Code\",\"longDescr\":\"Long Description URL\",\"cssClass\":\"Stylesheet Classes\",\"advisoryTitle\":\"Advisory Title\",\"cssStyle\":\"Style\",\"ok\":\"OK\",\"cancel\":\"Cancel\",\"close\":\"Close\",\"preview\":\"Preview\",\"resize\":\"Drag to resize\",\"generalTab\":\"General\",\"advancedTab\":\"Advanced\",\"validateNumberFailed\":\"This value is not a number.\",\"confirmNewPage\":\"Any unsaved changes to this content will be lost. Are you sure you want to load new page?\",\"confirmCancel\":\"You have changed some options. Are you sure you want to close the dialogue window?\",\"options\":\"Options\",\"target\":\"Target\",\"targetNew\":\"New Window (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"Same Window (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"Left to Right (LTR)\",\"langDirRTL\":\"Right to Left (RTL)\",\"styles\":\"Style\",\"cssClasses\":\"Stylesheet Classes\",\"width\":\"Width\",\"height\":\"Height\",\"align\":\"Align\",\"alignLeft\":\"Left\",\"alignRight\":\"Right\",\"alignCenter\":\"Centre\",\"alignJustify\":\"Justify\",\"alignTop\":\"Top\",\"alignMiddle\":\"Middle\",\"alignBottom\":\"Bottom\",\"alignNone\":\"None\",\"invalidValue\":\"Invalid value.\",\"invalidHeight\":\"Height must be a number.\",\"invalidWidth\":\"Width must be a number.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"About CKEditor\",\"help\":\"Check $1 for help.\",\"moreInfo\":\"For licensing information please visit our web site:\",\"title\":\"About CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"Bold\",\"italic\":\"Italic\",\"strike\":\"Strike Through\",\"subscript\":\"Subscript\",\"superscript\":\"Superscript\",\"underline\":\"Underline\"},\"blockquote\":{\"toolbar\":\"Block Quote\"},\"clipboard\":{\"copy\":\"Copy\",\"copyError\":\"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).\",\"cut\":\"Cut\",\"cutError\":\"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).\",\"paste\":\"Paste\",\"pasteArea\":\"Paste Area\",\"pasteMsg\":\"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK\",\"securityMsg\":\"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.\",\"title\":\"Paste\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Collapse Toolbar\",\"toolbarExpand\":\"Expand Toolbar\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"Editor toolbars\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Paragraph Format\",\"tag_address\":\"Address\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Heading 1\",\"tag_h2\":\"Heading 2\",\"tag_h3\":\"Heading 3\",\"tag_h4\":\"Heading 4\",\"tag_h5\":\"Heading 5\",\"tag_h6\":\"Heading 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatted\"},\"horizontalrule\":{\"toolbar\":\"Insert Horizontal Line\"},\"image\":{\"alt\":\"Alternative Text\",\"border\":\"Border\",\"btnUpload\":\"Send it to the Server\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"Image Info\",\"linkTab\":\"Link\",\"lockRatio\":\"Lock Ratio\",\"menu\":\"Image Properties\",\"resetSize\":\"Reset Size\",\"title\":\"Image Properties\",\"titleButton\":\"Image Button Properties\",\"upload\":\"Upload\",\"urlMissing\":\"Image source URL is missing.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"Border must be a whole number.\",\"validateHSpace\":\"HSpace must be a whole number.\",\"validateVSpace\":\"VSpace must be a whole number.\"},\"indent\":{\"indent\":\"Increase Indent\",\"outdent\":\"Decrease Indent\"},\"fakeobjects\":{\"anchor\":\"Anchor\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"Hidden Field\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"Access Key\",\"advanced\":\"Advanced\",\"advisoryContentType\":\"Advisory Content Type\",\"advisoryTitle\":\"Advisory Title\",\"anchor\":{\"toolbar\":\"Anchor\",\"menu\":\"Edit Anchor\",\"title\":\"Anchor Properties\",\"name\":\"Anchor Name\",\"errorName\":\"Please type the anchor name\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"By Element Id\",\"anchorName\":\"By Anchor Name\",\"charset\":\"Linked Resource Charset\",\"cssClasses\":\"Stylesheet Classes\",\"emailAddress\":\"E-Mail Address\",\"emailBody\":\"Message Body\",\"emailSubject\":\"Message Subject\",\"id\":\"Id\",\"info\":\"Link Info\",\"langCode\":\"Language Code\",\"langDir\":\"Language Direction\",\"langDirLTR\":\"Left to Right (LTR)\",\"langDirRTL\":\"Right to Left (RTL)\",\"menu\":\"Edit Link\",\"name\":\"Name\",\"noAnchors\":\"(No anchors available in the document)\",\"noEmail\":\"Please type the e-mail address\",\"noUrl\":\"Please type the link URL\",\"other\":\"<other>\",\"popupDependent\":\"Dependent (Netscape)\",\"popupFeatures\":\"Popup Window Features\",\"popupFullScreen\":\"Full Screen (IE)\",\"popupLeft\":\"Left Position\",\"popupLocationBar\":\"Location Bar\",\"popupMenuBar\":\"Menu Bar\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"Scroll Bars\",\"popupStatusBar\":\"Status Bar\",\"popupToolbar\":\"Toolbar\",\"popupTop\":\"Top Position\",\"rel\":\"Relationship\",\"selectAnchor\":\"Select an Anchor\",\"styles\":\"Style\",\"tabIndex\":\"Tab Index\",\"target\":\"Target\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Target Frame Name\",\"targetPopup\":\"<popup window>\",\"targetPopupName\":\"Popup Window Name\",\"title\":\"Link\",\"toAnchor\":\"Link to anchor in the text\",\"toEmail\":\"E-mail\",\"toUrl\":\"URL\",\"toolbar\":\"Link\",\"type\":\"Link Type\",\"unlink\":\"Unlink\",\"upload\":\"Upload\"},\"list\":{\"bulletedlist\":\"Insert/Remove Bulleted List\",\"numberedlist\":\"Insert/Remove Numbered List\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Maximise\",\"minimize\":\"Minimise\"},\"pastetext\":{\"button\":\"Paste as plain text\",\"title\":\"Paste as Plain Text\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"Paste from Word\",\"toolbar\":\"Paste from Word\"},\"removeformat\":{\"toolbar\":\"Remove Format\"},\"sourcearea\":{\"toolbar\":\"Source\"},\"specialchar\":{\"options\":\"Special Character Options\",\"title\":\"Select Special Character\",\"toolbar\":\"Insert Special Character\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Styles\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"Border size\",\"caption\":\"Caption\",\"cell\":{\"menu\":\"Cell\",\"insertBefore\":\"Insert Cell Before\",\"insertAfter\":\"Insert Cell After\",\"deleteCell\":\"Delete Cells\",\"merge\":\"Merge Cells\",\"mergeRight\":\"Merge Right\",\"mergeDown\":\"Merge Down\",\"splitHorizontal\":\"Split Cell Horizontally\",\"splitVertical\":\"Split Cell Vertically\",\"title\":\"Cell Properties\",\"cellType\":\"Cell Type\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Horizontal Alignment\",\"vAlign\":\"Vertical Alignment\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Background Color\",\"borderColor\":\"Border Color\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Yes\",\"no\":\"No\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Choose\"},\"cellPad\":\"Cell padding\",\"cellSpace\":\"Cell spacing\",\"column\":{\"menu\":\"Column\",\"insertBefore\":\"Insert Column Before\",\"insertAfter\":\"Insert Column After\",\"deleteColumn\":\"Delete Columns\"},\"columns\":\"Columns\",\"deleteTable\":\"Delete Table\",\"headers\":\"Headers\",\"headersBoth\":\"Both\",\"headersColumn\":\"First column\",\"headersNone\":\"None\",\"headersRow\":\"First Row\",\"invalidBorder\":\"Border size must be a number.\",\"invalidCellPadding\":\"Cell padding must be a number.\",\"invalidCellSpacing\":\"Cell spacing must be a number.\",\"invalidCols\":\"Number of columns must be a number greater than 0.\",\"invalidHeight\":\"Table height must be a number.\",\"invalidRows\":\"Number of rows must be a number greater than 0.\",\"invalidWidth\":\"Table width must be a number.\",\"menu\":\"Table Properties\",\"row\":{\"menu\":\"Row\",\"insertBefore\":\"Insert Row Before\",\"insertAfter\":\"Insert Row After\",\"deleteRow\":\"Delete Rows\"},\"rows\":\"Rows\",\"summary\":\"Summary\",\"title\":\"Table Properties\",\"toolbar\":\"Table\",\"widthPc\":\"percent\",\"widthPx\":\"pixels\",\"widthUnit\":\"width unit\"},\"undo\":{\"redo\":\"Redo\",\"undo\":\"Undo\"},\"wsc\":{\"btnIgnore\":\"Ignore\",\"btnIgnoreAll\":\"Ignore All\",\"btnReplace\":\"Replace\",\"btnReplaceAll\":\"Replace All\",\"btnUndo\":\"Undo\",\"changeTo\":\"Change to\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Spell checker not installed. Do you want to download it now?\",\"manyChanges\":\"Spell check complete: %1 words changed\",\"noChanges\":\"Spell check complete: No words changed\",\"noMispell\":\"Spell check complete: No misspellings found\",\"noSuggestions\":\"- No suggestions -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Not in dictionary\",\"oneChange\":\"Spell check complete: One word changed\",\"progress\":\"Spell check in progress...\",\"title\":\"Spell Checker\",\"toolbar\":\"Check Spelling\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/en.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['en']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Press ALT 0 for help\",\"browseServer\":\"Browse Server\",\"url\":\"URL\",\"protocol\":\"Protocol\",\"upload\":\"Upload\",\"uploadSubmit\":\"Send it to the Server\",\"image\":\"Image\",\"flash\":\"Flash\",\"form\":\"Form\",\"checkbox\":\"Checkbox\",\"radio\":\"Radio Button\",\"textField\":\"Text Field\",\"textarea\":\"Textarea\",\"hiddenField\":\"Hidden Field\",\"button\":\"Button\",\"select\":\"Selection Field\",\"imageButton\":\"Image Button\",\"notSet\":\"<not set>\",\"id\":\"Id\",\"name\":\"Name\",\"langDir\":\"Language Direction\",\"langDirLtr\":\"Left to Right (LTR)\",\"langDirRtl\":\"Right to Left (RTL)\",\"langCode\":\"Language Code\",\"longDescr\":\"Long Description URL\",\"cssClass\":\"Stylesheet Classes\",\"advisoryTitle\":\"Advisory Title\",\"cssStyle\":\"Style\",\"ok\":\"OK\",\"cancel\":\"Cancel\",\"close\":\"Close\",\"preview\":\"Preview\",\"resize\":\"Resize\",\"generalTab\":\"General\",\"advancedTab\":\"Advanced\",\"validateNumberFailed\":\"This value is not a number.\",\"confirmNewPage\":\"Any unsaved changes to this content will be lost. Are you sure you want to load new page?\",\"confirmCancel\":\"You have changed some options. Are you sure you want to close the dialog window?\",\"options\":\"Options\",\"target\":\"Target\",\"targetNew\":\"New Window (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"Same Window (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"Left to Right (LTR)\",\"langDirRTL\":\"Right to Left (RTL)\",\"styles\":\"Style\",\"cssClasses\":\"Stylesheet Classes\",\"width\":\"Width\",\"height\":\"Height\",\"align\":\"Alignment\",\"alignLeft\":\"Left\",\"alignRight\":\"Right\",\"alignCenter\":\"Center\",\"alignJustify\":\"Justify\",\"alignTop\":\"Top\",\"alignMiddle\":\"Middle\",\"alignBottom\":\"Bottom\",\"alignNone\":\"None\",\"invalidValue\":\"Invalid value.\",\"invalidHeight\":\"Height must be a number.\",\"invalidWidth\":\"Width must be a number.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"About CKEditor\",\"help\":\"Check $1 for help.\",\"moreInfo\":\"For licensing information please visit our web site:\",\"title\":\"About CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"Bold\",\"italic\":\"Italic\",\"strike\":\"Strikethrough\",\"subscript\":\"Subscript\",\"superscript\":\"Superscript\",\"underline\":\"Underline\"},\"blockquote\":{\"toolbar\":\"Block Quote\"},\"clipboard\":{\"copy\":\"Copy\",\"copyError\":\"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).\",\"cut\":\"Cut\",\"cutError\":\"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).\",\"paste\":\"Paste\",\"pasteArea\":\"Paste Area\",\"pasteMsg\":\"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK\",\"securityMsg\":\"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.\",\"title\":\"Paste\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Collapse Toolbar\",\"toolbarExpand\":\"Expand Toolbar\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"Editor toolbars\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Paragraph Format\",\"tag_address\":\"Address\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Heading 1\",\"tag_h2\":\"Heading 2\",\"tag_h3\":\"Heading 3\",\"tag_h4\":\"Heading 4\",\"tag_h5\":\"Heading 5\",\"tag_h6\":\"Heading 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatted\"},\"horizontalrule\":{\"toolbar\":\"Insert Horizontal Line\"},\"image\":{\"alt\":\"Alternative Text\",\"border\":\"Border\",\"btnUpload\":\"Send it to the Server\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"Image Info\",\"linkTab\":\"Link\",\"lockRatio\":\"Lock Ratio\",\"menu\":\"Image Properties\",\"resetSize\":\"Reset Size\",\"title\":\"Image Properties\",\"titleButton\":\"Image Button Properties\",\"upload\":\"Upload\",\"urlMissing\":\"Image source URL is missing.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"Border must be a whole number.\",\"validateHSpace\":\"HSpace must be a whole number.\",\"validateVSpace\":\"VSpace must be a whole number.\"},\"indent\":{\"indent\":\"Increase Indent\",\"outdent\":\"Decrease Indent\"},\"fakeobjects\":{\"anchor\":\"Anchor\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"Hidden Field\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"Access Key\",\"advanced\":\"Advanced\",\"advisoryContentType\":\"Advisory Content Type\",\"advisoryTitle\":\"Advisory Title\",\"anchor\":{\"toolbar\":\"Anchor\",\"menu\":\"Edit Anchor\",\"title\":\"Anchor Properties\",\"name\":\"Anchor Name\",\"errorName\":\"Please type the anchor name\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"By Element Id\",\"anchorName\":\"By Anchor Name\",\"charset\":\"Linked Resource Charset\",\"cssClasses\":\"Stylesheet Classes\",\"emailAddress\":\"E-Mail Address\",\"emailBody\":\"Message Body\",\"emailSubject\":\"Message Subject\",\"id\":\"Id\",\"info\":\"Link Info\",\"langCode\":\"Language Code\",\"langDir\":\"Language Direction\",\"langDirLTR\":\"Left to Right (LTR)\",\"langDirRTL\":\"Right to Left (RTL)\",\"menu\":\"Edit Link\",\"name\":\"Name\",\"noAnchors\":\"(No anchors available in the document)\",\"noEmail\":\"Please type the e-mail address\",\"noUrl\":\"Please type the link URL\",\"other\":\"<other>\",\"popupDependent\":\"Dependent (Netscape)\",\"popupFeatures\":\"Popup Window Features\",\"popupFullScreen\":\"Full Screen (IE)\",\"popupLeft\":\"Left Position\",\"popupLocationBar\":\"Location Bar\",\"popupMenuBar\":\"Menu Bar\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"Scroll Bars\",\"popupStatusBar\":\"Status Bar\",\"popupToolbar\":\"Toolbar\",\"popupTop\":\"Top Position\",\"rel\":\"Relationship\",\"selectAnchor\":\"Select an Anchor\",\"styles\":\"Style\",\"tabIndex\":\"Tab Index\",\"target\":\"Target\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Target Frame Name\",\"targetPopup\":\"<popup window>\",\"targetPopupName\":\"Popup Window Name\",\"title\":\"Link\",\"toAnchor\":\"Link to anchor in the text\",\"toEmail\":\"E-mail\",\"toUrl\":\"URL\",\"toolbar\":\"Link\",\"type\":\"Link Type\",\"unlink\":\"Unlink\",\"upload\":\"Upload\"},\"list\":{\"bulletedlist\":\"Insert/Remove Bulleted List\",\"numberedlist\":\"Insert/Remove Numbered List\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Maximize\",\"minimize\":\"Minimize\"},\"pastetext\":{\"button\":\"Paste as plain text\",\"title\":\"Paste as Plain Text\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"Paste from Word\",\"toolbar\":\"Paste from Word\"},\"removeformat\":{\"toolbar\":\"Remove Format\"},\"sourcearea\":{\"toolbar\":\"Source\"},\"specialchar\":{\"options\":\"Special Character Options\",\"title\":\"Select Special Character\",\"toolbar\":\"Insert Special Character\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Styles\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"Border size\",\"caption\":\"Caption\",\"cell\":{\"menu\":\"Cell\",\"insertBefore\":\"Insert Cell Before\",\"insertAfter\":\"Insert Cell After\",\"deleteCell\":\"Delete Cells\",\"merge\":\"Merge Cells\",\"mergeRight\":\"Merge Right\",\"mergeDown\":\"Merge Down\",\"splitHorizontal\":\"Split Cell Horizontally\",\"splitVertical\":\"Split Cell Vertically\",\"title\":\"Cell Properties\",\"cellType\":\"Cell Type\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Horizontal Alignment\",\"vAlign\":\"Vertical Alignment\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Background Color\",\"borderColor\":\"Border Color\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Yes\",\"no\":\"No\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Choose\"},\"cellPad\":\"Cell padding\",\"cellSpace\":\"Cell spacing\",\"column\":{\"menu\":\"Column\",\"insertBefore\":\"Insert Column Before\",\"insertAfter\":\"Insert Column After\",\"deleteColumn\":\"Delete Columns\"},\"columns\":\"Columns\",\"deleteTable\":\"Delete Table\",\"headers\":\"Headers\",\"headersBoth\":\"Both\",\"headersColumn\":\"First column\",\"headersNone\":\"None\",\"headersRow\":\"First Row\",\"invalidBorder\":\"Border size must be a number.\",\"invalidCellPadding\":\"Cell padding must be a positive number.\",\"invalidCellSpacing\":\"Cell spacing must be a positive number.\",\"invalidCols\":\"Number of columns must be a number greater than 0.\",\"invalidHeight\":\"Table height must be a number.\",\"invalidRows\":\"Number of rows must be a number greater than 0.\",\"invalidWidth\":\"Table width must be a number.\",\"menu\":\"Table Properties\",\"row\":{\"menu\":\"Row\",\"insertBefore\":\"Insert Row Before\",\"insertAfter\":\"Insert Row After\",\"deleteRow\":\"Delete Rows\"},\"rows\":\"Rows\",\"summary\":\"Summary\",\"title\":\"Table Properties\",\"toolbar\":\"Table\",\"widthPc\":\"percent\",\"widthPx\":\"pixels\",\"widthUnit\":\"width unit\"},\"undo\":{\"redo\":\"Redo\",\"undo\":\"Undo\"},\"wsc\":{\"btnIgnore\":\"Ignore\",\"btnIgnoreAll\":\"Ignore All\",\"btnReplace\":\"Replace\",\"btnReplaceAll\":\"Replace All\",\"btnUndo\":\"Undo\",\"changeTo\":\"Change to\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Spell checker not installed. Do you want to download it now?\",\"manyChanges\":\"Spell check complete: %1 words changed\",\"noChanges\":\"Spell check complete: No words changed\",\"noMispell\":\"Spell check complete: No misspellings found\",\"noSuggestions\":\"- No suggestions -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Not in dictionary\",\"oneChange\":\"Spell check complete: One word changed\",\"progress\":\"Spell check in progress...\",\"title\":\"Spell Checker\",\"toolbar\":\"Check Spelling\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/eo.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['eo']={\"editor\":\"RiĉTeksta Redaktilo\",\"editorPanel\":\"Panelo de la RiĉTeksta Redaktilo\",\"common\":{\"editorHelp\":\"Premu ALT 0 por helpilo\",\"browseServer\":\"Foliumi en la Servilo\",\"url\":\"URL\",\"protocol\":\"Protokolo\",\"upload\":\"Alŝuti\",\"uploadSubmit\":\"Sendu al Servilo\",\"image\":\"Bildo\",\"flash\":\"Flaŝo\",\"form\":\"Formularo\",\"checkbox\":\"Markobutono\",\"radio\":\"Radiobutono\",\"textField\":\"Teksta kampo\",\"textarea\":\"Teksta Areo\",\"hiddenField\":\"Kaŝita Kampo\",\"button\":\"Butono\",\"select\":\"Elekta Kampo\",\"imageButton\":\"Bildbutono\",\"notSet\":\"<Defaŭlta>\",\"id\":\"Id\",\"name\":\"Nomo\",\"langDir\":\"Skribdirekto\",\"langDirLtr\":\"De maldekstro dekstren (LTR)\",\"langDirRtl\":\"De dekstro maldekstren (RTL)\",\"langCode\":\"Lingva Kodo\",\"longDescr\":\"URL de Longa Priskribo\",\"cssClass\":\"Klasoj de Stilfolioj\",\"advisoryTitle\":\"Priskriba Titolo\",\"cssStyle\":\"Stilo\",\"ok\":\"Akcepti\",\"cancel\":\"Rezigni\",\"close\":\"Fermi\",\"preview\":\"Vidigi Aspekton\",\"resize\":\"Movigi por ŝanĝi la grandon\",\"generalTab\":\"Ĝenerala\",\"advancedTab\":\"Speciala\",\"validateNumberFailed\":\"Tiu valoro ne estas nombro.\",\"confirmNewPage\":\"La neregistritaj ŝanĝoj estas perdotaj. Ĉu vi certas, ke vi volas ŝargi novan paĝon?\",\"confirmCancel\":\"Iuj opcioj esta ŝanĝitaj. Ĉu vi certas, ke vi volas fermi la dialogon?\",\"options\":\"Opcioj\",\"target\":\"Celo\",\"targetNew\":\"Nova Fenestro (_blank)\",\"targetTop\":\"Supra Fenestro (_top)\",\"targetSelf\":\"Sama Fenestro (_self)\",\"targetParent\":\"Patra Fenestro (_parent)\",\"langDirLTR\":\"De maldekstro dekstren (LTR)\",\"langDirRTL\":\"De dekstro maldekstren (RTL)\",\"styles\":\"Stilo\",\"cssClasses\":\"Stilfoliaj Klasoj\",\"width\":\"Larĝo\",\"height\":\"Alto\",\"align\":\"Ĝisrandigo\",\"alignLeft\":\"Maldekstre\",\"alignRight\":\"Dekstre\",\"alignCenter\":\"Centre\",\"alignJustify\":\"Ĝisrandigi Ambaŭflanke\",\"alignTop\":\"Supre\",\"alignMiddle\":\"Centre\",\"alignBottom\":\"Malsupre\",\"alignNone\":\"Neniu\",\"invalidValue\":\"Nevalida Valoro\",\"invalidHeight\":\"Alto devas esti nombro.\",\"invalidWidth\":\"Larĝo devas esti nombro.\",\"invalidCssLength\":\"La valoro indikita por la \\\"%1\\\" kampo devas esti pozitiva nombro kun aŭ sen valida CSSmezurunuo (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"La valoro indikita por la \\\"%1\\\" kampo devas esti pozitiva nombro kun aŭ sen valida HTMLmezurunuo (px or %).\",\"invalidInlineStyle\":\"La valoro indikita por la enlinia stilo devas konsisti el unu aŭ pluraj elementoj kun la formato de \\\"nomo : valoro\\\", apartigitaj per punktokomoj.\",\"cssLengthTooltip\":\"Entajpu nombron por rastrumera valoro aŭ nombron kun valida CSSunuo (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, nehavebla</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Ĉiuj rajtoj rezervitaj.\",\"dlgTitle\":\"Pri CKEditor\",\"help\":\"Kontroli $1 por helpo.\",\"moreInfo\":\"Por informoj pri licenco, bonvolu viziti nian retpaĝaron:\",\"title\":\"Pri CKEditor\",\"userGuide\":\"CKEditor Uzindikoj\"},\"basicstyles\":{\"bold\":\"Grasa\",\"italic\":\"Kursiva\",\"strike\":\"Trastreko\",\"subscript\":\"Suba indico\",\"superscript\":\"Supra indico\",\"underline\":\"Substreko\"},\"blockquote\":{\"toolbar\":\"Citaĵo\"},\"clipboard\":{\"copy\":\"Kopii\",\"copyError\":\"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-C).\",\"cut\":\"Eltondi\",\"cutError\":\"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-X).\",\"paste\":\"Interglui\",\"pasteArea\":\"Intergluoareo\",\"pasteMsg\":\"Bonvolu glui la tekston en la jenan areon per uzado de la klavaro (<strong>Ctrl/Cmd+V</strong>) kaj premu OK\",\"securityMsg\":\"Pro la sekurecagordo de via TTT-legilo, la redaktilo ne povas rekte atingi viajn datenojn en la poŝo. Bonvolu denove interglui la datenojn en tiun fenestron.\",\"title\":\"Interglui\"},\"contextmenu\":{\"options\":\"Opcioj de Kunteksta Menuo\"},\"button\":{\"selectedLabel\":\"%1 (Selektita)\"},\"toolbar\":{\"toolbarCollapse\":\"Faldi la ilbreton\",\"toolbarExpand\":\"Malfaldi la ilbreton\",\"toolbarGroups\":{\"document\":\"Dokumento\",\"clipboard\":\"Poŝo/Malfari\",\"editing\":\"Redaktado\",\"forms\":\"Formularoj\",\"basicstyles\":\"Bazaj stiloj\",\"paragraph\":\"Paragrafo\",\"links\":\"Ligiloj\",\"insert\":\"Enmeti\",\"styles\":\"Stiloj\",\"colors\":\"Koloroj\",\"tools\":\"Iloj\"},\"toolbars\":\"Ilobretoj de la redaktilo\"},\"elementspath\":{\"eleLabel\":\"Vojo al Elementoj\",\"eleTitle\":\"%1 elementoj\"},\"format\":{\"label\":\"Formato\",\"panelTitle\":\"ParagrafFormato\",\"tag_address\":\"Adreso\",\"tag_div\":\"Normala (DIV)\",\"tag_h1\":\"Titolo 1\",\"tag_h2\":\"Titolo 2\",\"tag_h3\":\"Titolo 3\",\"tag_h4\":\"Titolo 4\",\"tag_h5\":\"Titolo 5\",\"tag_h6\":\"Titolo 6\",\"tag_p\":\"Normala\",\"tag_pre\":\"Formatita\"},\"horizontalrule\":{\"toolbar\":\"Enmeti Horizontalan Linion\"},\"image\":{\"alt\":\"Anstataŭiga Teksto\",\"border\":\"Bordero\",\"btnUpload\":\"Sendu al Servilo\",\"button2Img\":\"Ĉu vi volas transformi la selektitan bildbutonon en simplan bildon?\",\"hSpace\":\"Horizontala Spaco\",\"img2Button\":\"Ĉu vi volas transformi la selektitan bildon en bildbutonon?\",\"infoTab\":\"Informoj pri Bildo\",\"linkTab\":\"Ligilo\",\"lockRatio\":\"Konservi Proporcion\",\"menu\":\"Atributoj de Bildo\",\"resetSize\":\"Origina Grando\",\"title\":\"Atributoj de Bildo\",\"titleButton\":\"Bildbutonaj Atributoj\",\"upload\":\"Alŝuti\",\"urlMissing\":\"La fontretadreso de la bildo mankas.\",\"vSpace\":\"Vertikala Spaco\",\"validateBorder\":\"La bordero devas esti entjera nombro.\",\"validateHSpace\":\"La horizontala spaco devas esti entjera nombro.\",\"validateVSpace\":\"La vertikala spaco devas esti entjera nombro.\"},\"indent\":{\"indent\":\"Pligrandigi Krommarĝenon\",\"outdent\":\"Malpligrandigi Krommarĝenon\"},\"fakeobjects\":{\"anchor\":\"Ankro\",\"flash\":\"FlaŝAnimacio\",\"hiddenfield\":\"Kaŝita kampo\",\"iframe\":\"Enlinia Kadro (IFrame)\",\"unknown\":\"Nekonata objekto\"},\"link\":{\"acccessKey\":\"Fulmoklavo\",\"advanced\":\"Speciala\",\"advisoryContentType\":\"Enhavotipo\",\"advisoryTitle\":\"Priskriba Titolo\",\"anchor\":{\"toolbar\":\"Ankro\",\"menu\":\"Enmeti/Ŝanĝi Ankron\",\"title\":\"Ankraj Atributoj\",\"name\":\"Ankra Nomo\",\"errorName\":\"Bv entajpi la ankran nomon\",\"remove\":\"Forigi Ankron\"},\"anchorId\":\"Per Elementidentigilo\",\"anchorName\":\"Per Ankronomo\",\"charset\":\"Signaro de la Ligita Rimedo\",\"cssClasses\":\"Klasoj de Stilfolioj\",\"emailAddress\":\"Retpoŝto\",\"emailBody\":\"Mesaĝa korpo\",\"emailSubject\":\"Mesaĝa Temo\",\"id\":\"Id\",\"info\":\"Informoj pri la Ligilo\",\"langCode\":\"Lingva Kodo\",\"langDir\":\"Skribdirekto\",\"langDirLTR\":\"De maldekstro dekstren (LTR)\",\"langDirRTL\":\"De dekstro maldekstren (RTL)\",\"menu\":\"Ŝanĝi Ligilon\",\"name\":\"Nomo\",\"noAnchors\":\"<Ne disponeblas ankroj en la dokumento>\",\"noEmail\":\"Bonvolu entajpi la retpoŝtadreson\",\"noUrl\":\"Bonvolu entajpi la URL-on\",\"other\":\"<alia>\",\"popupDependent\":\"Dependa (Netscape)\",\"popupFeatures\":\"Atributoj de la Ŝprucfenestro\",\"popupFullScreen\":\"Tutekrane (IE)\",\"popupLeft\":\"Maldekstra Pozicio\",\"popupLocationBar\":\"Adresobreto\",\"popupMenuBar\":\"Menubreto\",\"popupResizable\":\"Dimensiŝanĝebla\",\"popupScrollBars\":\"Rulumskaloj\",\"popupStatusBar\":\"Statobreto\",\"popupToolbar\":\"Ilobreto\",\"popupTop\":\"Supra Pozicio\",\"rel\":\"Rilato\",\"selectAnchor\":\"Elekti Ankron\",\"styles\":\"Stilo\",\"tabIndex\":\"Taba Indekso\",\"target\":\"Celo\",\"targetFrame\":\"<kadro>\",\"targetFrameName\":\"Nomo de CelKadro\",\"targetPopup\":\"<ŝprucfenestro>\",\"targetPopupName\":\"Nomo de Ŝprucfenestro\",\"title\":\"Ligilo\",\"toAnchor\":\"Ankri en tiu ĉi paĝo\",\"toEmail\":\"Retpoŝto\",\"toUrl\":\"URL\",\"toolbar\":\"Enmeti/Ŝanĝi Ligilon\",\"type\":\"Tipo de Ligilo\",\"unlink\":\"Forigi Ligilon\",\"upload\":\"Alŝuti\"},\"list\":{\"bulletedlist\":\"Bula Listo\",\"numberedlist\":\"Numera Listo\"},\"magicline\":{\"title\":\"Enmeti paragrafon ĉi-tien\"},\"maximize\":{\"maximize\":\"Pligrandigi\",\"minimize\":\"Malgrandigi\"},\"pastetext\":{\"button\":\"Interglui kiel platan tekston\",\"title\":\"Interglui kiel platan tekston\"},\"pastefromword\":{\"confirmCleanup\":\"La teksto, kiun vi volas interglui, ŝajnas esti kopiita el Word. Ĉu vi deziras purigi ĝin antaŭ intergluo?\",\"error\":\"Ne eblis purigi la intergluitajn datenojn pro interna eraro\",\"title\":\"Interglui el Word\",\"toolbar\":\"Interglui el Word\"},\"removeformat\":{\"toolbar\":\"Forigi Formaton\"},\"sourcearea\":{\"toolbar\":\"Fonto\"},\"specialchar\":{\"options\":\"Opcioj pri Specialaj Signoj\",\"title\":\"Selekti Specialan Signon\",\"toolbar\":\"Enmeti Specialan Signon\"},\"scayt\":{\"btn_about\":\"Pri OKDVT\",\"btn_dictionaries\":\"Vortaroj\",\"btn_disable\":\"Malebligi OKDVT\",\"btn_enable\":\"Ebligi OKDVT\",\"btn_langs\":\"Lingvoj\",\"btn_options\":\"Opcioj\",\"text_title\":\"OrtografiKontrolado Dum Vi Tajpas (OKDVT)\"},\"stylescombo\":{\"label\":\"Stiloj\",\"panelTitle\":\"Stiloj pri enpaĝigo\",\"panelTitle1\":\"Stiloj de blokoj\",\"panelTitle2\":\"Enliniaj Stiloj\",\"panelTitle3\":\"Stiloj de objektoj\"},\"table\":{\"border\":\"Bordero\",\"caption\":\"Tabeltitolo\",\"cell\":{\"menu\":\"Ĉelo\",\"insertBefore\":\"Enmeti Ĉelon Antaŭ\",\"insertAfter\":\"Enmeti Ĉelon Post\",\"deleteCell\":\"Forigi la Ĉelojn\",\"merge\":\"Kunfandi la Ĉelojn\",\"mergeRight\":\"Kunfandi dekstren\",\"mergeDown\":\"Kunfandi malsupren \",\"splitHorizontal\":\"Horizontale dividi\",\"splitVertical\":\"Vertikale dividi\",\"title\":\"Ĉelatributoj\",\"cellType\":\"Ĉeltipo\",\"rowSpan\":\"Kunfando de linioj\",\"colSpan\":\"Kunfando de kolumnoj\",\"wordWrap\":\"Cezuro\",\"hAlign\":\"Horizontala ĝisrandigo\",\"vAlign\":\"Vertikala ĝisrandigo\",\"alignBaseline\":\"Malsupro de la teksto\",\"bgColor\":\"Fonkoloro\",\"borderColor\":\"Borderkoloro\",\"data\":\"Datenoj\",\"header\":\"Supra paĝotitolo\",\"yes\":\"Jes\",\"no\":\"No\",\"invalidWidth\":\"Ĉellarĝo devas esti nombro.\",\"invalidHeight\":\"Ĉelalto devas esti nombro.\",\"invalidRowSpan\":\"Kunfando de linioj devas esti entjera nombro.\",\"invalidColSpan\":\"Kunfando de kolumnoj devas esti entjera nombro.\",\"chooseColor\":\"Elektu\"},\"cellPad\":\"Interna Marĝeno de la ĉeloj\",\"cellSpace\":\"Spaco inter la Ĉeloj\",\"column\":{\"menu\":\"Kolumno\",\"insertBefore\":\"Enmeti kolumnon antaŭ\",\"insertAfter\":\"Enmeti kolumnon post\",\"deleteColumn\":\"Forigi Kolumnojn\"},\"columns\":\"Kolumnoj\",\"deleteTable\":\"Forigi Tabelon\",\"headers\":\"Supraj Paĝotitoloj\",\"headersBoth\":\"Ambaŭ\",\"headersColumn\":\"Unua kolumno\",\"headersNone\":\"Neniu\",\"headersRow\":\"Unua linio\",\"invalidBorder\":\"La bordergrando devas esti nombro.\",\"invalidCellPadding\":\"La interna marĝeno en la ĉeloj devas esti pozitiva nombro.\",\"invalidCellSpacing\":\"La spaco inter la ĉeloj devas esti pozitiva nombro.\",\"invalidCols\":\"La nombro de la kolumnoj devas superi 0.\",\"invalidHeight\":\"La tabelalto devas esti nombro.\",\"invalidRows\":\"La nombro de la linioj devas superi 0.\",\"invalidWidth\":\"La tabellarĝo devas esti nombro.\",\"menu\":\"Atributoj de Tabelo\",\"row\":{\"menu\":\"Linio\",\"insertBefore\":\"Enmeti linion antaŭ\",\"insertAfter\":\"Enmeti linion post\",\"deleteRow\":\"Forigi Liniojn\"},\"rows\":\"Linioj\",\"summary\":\"Resumo\",\"title\":\"Atributoj de Tabelo\",\"toolbar\":\"Tabelo\",\"widthPc\":\"elcentoj\",\"widthPx\":\"Rastrumeroj\",\"widthUnit\":\"unuo de larĝo\"},\"undo\":{\"redo\":\"Refari\",\"undo\":\"Malfari\"},\"wsc\":{\"btnIgnore\":\"Ignori\",\"btnIgnoreAll\":\"Ignori Ĉion\",\"btnReplace\":\"Anstataŭigi\",\"btnReplaceAll\":\"Anstataŭigi Ĉion\",\"btnUndo\":\"Malfari\",\"changeTo\":\"Ŝanĝi al\",\"errorLoading\":\"Eraro en la servoelŝuto el la gastiga komputiko: %s.\",\"ieSpellDownload\":\"Ortografikontrolilo ne instalita. Ĉu vi volas elŝuti ĝin nun?\",\"manyChanges\":\"Ortografikontrolado finita: %1 vortoj korektitaj\",\"noChanges\":\"Ortografikontrolado finita: neniu vorto korektita\",\"noMispell\":\"Ortografikontrolado finita: neniu eraro trovita\",\"noSuggestions\":\"- Neniu propono -\",\"notAvailable\":\"Bedaŭrinde la servo ne funkcias nuntempe.\",\"notInDic\":\"Ne trovita en la vortaro\",\"oneChange\":\"Ortografikontrolado finita: unu vorto korektita\",\"progress\":\"La ortografio estas kontrolata...\",\"title\":\"Kontroli la ortografion\",\"toolbar\":\"Kontroli la ortografion\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/es.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['es']={\"editor\":\"Editor de texto enriquecido\",\"editorPanel\":\"Panel del Editor de Texto Enriquecido\",\"common\":{\"editorHelp\":\"Pulse ALT 0 para ayuda\",\"browseServer\":\"Ver Servidor\",\"url\":\"URL\",\"protocol\":\"Protocolo\",\"upload\":\"Cargar\",\"uploadSubmit\":\"Enviar al Servidor\",\"image\":\"Imagen\",\"flash\":\"Flash\",\"form\":\"Formulario\",\"checkbox\":\"Casilla de Verificación\",\"radio\":\"Botones de Radio\",\"textField\":\"Campo de Texto\",\"textarea\":\"Area de Texto\",\"hiddenField\":\"Campo Oculto\",\"button\":\"Botón\",\"select\":\"Campo de Selección\",\"imageButton\":\"Botón Imagen\",\"notSet\":\"<No definido>\",\"id\":\"Id\",\"name\":\"Nombre\",\"langDir\":\"Orientación\",\"langDirLtr\":\"Izquierda a Derecha (LTR)\",\"langDirRtl\":\"Derecha a Izquierda (RTL)\",\"langCode\":\"Cód. de idioma\",\"longDescr\":\"Descripción larga URL\",\"cssClass\":\"Clases de hojas de estilo\",\"advisoryTitle\":\"Título\",\"cssStyle\":\"Estilo\",\"ok\":\"Aceptar\",\"cancel\":\"Cancelar\",\"close\":\"Cerrar\",\"preview\":\"Previsualización\",\"resize\":\"Arrastre para redimensionar\",\"generalTab\":\"General\",\"advancedTab\":\"Avanzado\",\"validateNumberFailed\":\"El valor no es un número.\",\"confirmNewPage\":\"Cualquier cambio que no se haya guardado se perderá.\\r\\n¿Está seguro de querer crear una nueva página?\",\"confirmCancel\":\"Algunas de las opciones se han cambiado.\\r\\n¿Está seguro de querer cerrar el diálogo?\",\"options\":\"Opciones\",\"target\":\"Destino\",\"targetNew\":\"Nueva ventana (_blank)\",\"targetTop\":\"Ventana principal (_top)\",\"targetSelf\":\"Misma ventana (_self)\",\"targetParent\":\"Ventana padre (_parent)\",\"langDirLTR\":\"Izquierda a derecha (LTR)\",\"langDirRTL\":\"Derecha a izquierda (RTL)\",\"styles\":\"Estilos\",\"cssClasses\":\"Clase de la hoja de estilos\",\"width\":\"Anchura\",\"height\":\"Altura\",\"align\":\"Alineación\",\"alignLeft\":\"Izquierda\",\"alignRight\":\"Derecha\",\"alignCenter\":\"Centrado\",\"alignJustify\":\"Justificado\",\"alignTop\":\"Tope\",\"alignMiddle\":\"Centro\",\"alignBottom\":\"Pie\",\"alignNone\":\"Ninguno\",\"invalidValue\":\"Valor no válido\",\"invalidHeight\":\"Altura debe ser un número.\",\"invalidWidth\":\"Anchura debe ser un número.\",\"invalidCssLength\":\"El valor especificado para el campo \\\"%1\\\" debe ser un número positivo, incluyendo optionalmente una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).\",\"invalidHtmlLength\":\"El valor especificado para el campo \\\"%1\\\" debe ser un número positivo, incluyendo optionalmente una unidad de medida HTML válida (px o %).\",\"invalidInlineStyle\":\"El valor especificado para el estilo debe consistir en uno o más pares con el formato \\\"nombre: valor\\\", separados por punto y coma.\",\"cssLengthTooltip\":\"Introduca un número para el valor en pixels o un número con una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, no disponible</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Todos los derechos reservados.\",\"dlgTitle\":\"Acerca de CKEditor\",\"help\":\"Lea la  $1 para resolver sus dudas.\",\"moreInfo\":\"Para información de licencia, por favor visite nuestro sitio web:\",\"title\":\"Acerca de CKEditor\",\"userGuide\":\"Guía de usuario de CKEditor\"},\"basicstyles\":{\"bold\":\"Negrita\",\"italic\":\"Cursiva\",\"strike\":\"Tachado\",\"subscript\":\"Subíndice\",\"superscript\":\"Superíndice\",\"underline\":\"Subrayado\"},\"blockquote\":{\"toolbar\":\"Cita\"},\"clipboard\":{\"copy\":\"Copiar\",\"copyError\":\"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\\r\\nPor favor use el teclado (Ctrl/Cmd+C).\",\"cut\":\"Cortar\",\"cutError\":\"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\\r\\nPor favor use el teclado (Ctrl/Cmd+X).\",\"paste\":\"Pegar\",\"pasteArea\":\"Zona de pegado\",\"pasteMsg\":\"Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl/Cmd+V</STRONG>);\\r\\nluego presione <STRONG>Aceptar</STRONG>.\",\"securityMsg\":\"Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles.\\r\\nEs necesario que lo pegue de nuevo en esta ventana.\",\"title\":\"Pegar\"},\"contextmenu\":{\"options\":\"Opciones del menú contextual\"},\"button\":{\"selectedLabel\":\"%1 (Seleccionado)\"},\"toolbar\":{\"toolbarCollapse\":\"Contraer barra de herramientas\",\"toolbarExpand\":\"Expandir barra de herramientas\",\"toolbarGroups\":{\"document\":\"Documento\",\"clipboard\":\"Portapapeles/Deshacer\",\"editing\":\"Edición\",\"forms\":\"Formularios\",\"basicstyles\":\"Estilos básicos\",\"paragraph\":\"Párrafo\",\"links\":\"Enlaces\",\"insert\":\"Insertar\",\"styles\":\"Estilos\",\"colors\":\"Colores\",\"tools\":\"Herramientas\"},\"toolbars\":\"Barras de herramientas del editor\"},\"elementspath\":{\"eleLabel\":\"Ruta de los elementos\",\"eleTitle\":\"%1 elemento\"},\"format\":{\"label\":\"Formato\",\"panelTitle\":\"Formato\",\"tag_address\":\"Dirección\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Encabezado 1\",\"tag_h2\":\"Encabezado 2\",\"tag_h3\":\"Encabezado 3\",\"tag_h4\":\"Encabezado 4\",\"tag_h5\":\"Encabezado 5\",\"tag_h6\":\"Encabezado 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Con formato\"},\"horizontalrule\":{\"toolbar\":\"Insertar Línea Horizontal\"},\"image\":{\"alt\":\"Texto Alternativo\",\"border\":\"Borde\",\"btnUpload\":\"Enviar al Servidor\",\"button2Img\":\"¿Desea convertir el botón de imagen en una simple imagen?\",\"hSpace\":\"Esp.Horiz\",\"img2Button\":\"¿Desea convertir la imagen en un botón de imagen?\",\"infoTab\":\"Información de Imagen\",\"linkTab\":\"Vínculo\",\"lockRatio\":\"Proporcional\",\"menu\":\"Propiedades de Imagen\",\"resetSize\":\"Tamaño Original\",\"title\":\"Propiedades de Imagen\",\"titleButton\":\"Propiedades de Botón de Imagen\",\"upload\":\"Cargar\",\"urlMissing\":\"Debe indicar la URL de la imagen.\",\"vSpace\":\"Esp.Vert\",\"validateBorder\":\"El borde debe ser un número.\",\"validateHSpace\":\"El espaciado horizontal debe ser un número.\",\"validateVSpace\":\"El espaciado vertical debe ser un número.\"},\"indent\":{\"indent\":\"Aumentar Sangría\",\"outdent\":\"Disminuir Sangría\"},\"fakeobjects\":{\"anchor\":\"Ancla\",\"flash\":\"Animación flash\",\"hiddenfield\":\"Campo oculto\",\"iframe\":\"IFrame\",\"unknown\":\"Objeto desconocido\"},\"link\":{\"acccessKey\":\"Tecla de Acceso\",\"advanced\":\"Avanzado\",\"advisoryContentType\":\"Tipo de Contenido\",\"advisoryTitle\":\"Título\",\"anchor\":{\"toolbar\":\"Referencia\",\"menu\":\"Propiedades de Referencia\",\"title\":\"Propiedades de Referencia\",\"name\":\"Nombre de la Referencia\",\"errorName\":\"Por favor, complete el nombre de la Referencia\",\"remove\":\"Quitar Referencia\"},\"anchorId\":\"Por ID de elemento\",\"anchorName\":\"Por Nombre de Referencia\",\"charset\":\"Fuente de caracteres vinculado\",\"cssClasses\":\"Clases de hojas de estilo\",\"emailAddress\":\"Dirección de E-Mail\",\"emailBody\":\"Cuerpo del Mensaje\",\"emailSubject\":\"Título del Mensaje\",\"id\":\"Id\",\"info\":\"Información de Vínculo\",\"langCode\":\"Código idioma\",\"langDir\":\"Orientación\",\"langDirLTR\":\"Izquierda a Derecha (LTR)\",\"langDirRTL\":\"Derecha a Izquierda (RTL)\",\"menu\":\"Editar Vínculo\",\"name\":\"Nombre\",\"noAnchors\":\"(No hay referencias disponibles en el documento)\",\"noEmail\":\"Por favor escriba la dirección de e-mail\",\"noUrl\":\"Por favor escriba el vínculo URL\",\"other\":\"<otro>\",\"popupDependent\":\"Dependiente (Netscape)\",\"popupFeatures\":\"Características de Ventana Emergente\",\"popupFullScreen\":\"Pantalla Completa (IE)\",\"popupLeft\":\"Posición Izquierda\",\"popupLocationBar\":\"Barra de ubicación\",\"popupMenuBar\":\"Barra de Menú\",\"popupResizable\":\"Redimensionable\",\"popupScrollBars\":\"Barras de desplazamiento\",\"popupStatusBar\":\"Barra de Estado\",\"popupToolbar\":\"Barra de Herramientas\",\"popupTop\":\"Posición Derecha\",\"rel\":\"Relación\",\"selectAnchor\":\"Seleccionar una referencia\",\"styles\":\"Estilo\",\"tabIndex\":\"Indice de tabulación\",\"target\":\"Destino\",\"targetFrame\":\"<marco>\",\"targetFrameName\":\"Nombre del Marco Destino\",\"targetPopup\":\"<ventana emergente>\",\"targetPopupName\":\"Nombre de Ventana Emergente\",\"title\":\"Vínculo\",\"toAnchor\":\"Referencia en esta página\",\"toEmail\":\"E-Mail\",\"toUrl\":\"URL\",\"toolbar\":\"Insertar/Editar Vínculo\",\"type\":\"Tipo de vínculo\",\"unlink\":\"Eliminar Vínculo\",\"upload\":\"Cargar\"},\"list\":{\"bulletedlist\":\"Viñetas\",\"numberedlist\":\"Numeración\"},\"magicline\":{\"title\":\"Insertar párrafo aquí\"},\"maximize\":{\"maximize\":\"Maximizar\",\"minimize\":\"Minimizar\"},\"pastetext\":{\"button\":\"Pegar como Texto Plano\",\"title\":\"Pegar como Texto Plano\"},\"pastefromword\":{\"confirmCleanup\":\"El texto que desea parece provenir de Word.\\r\\n¿Desea depurarlo antes de pegarlo?\",\"error\":\"No ha sido posible limpiar los datos debido a un error interno\",\"title\":\"Pegar desde Word\",\"toolbar\":\"Pegar desde Word\"},\"removeformat\":{\"toolbar\":\"Eliminar Formato\"},\"sourcearea\":{\"toolbar\":\"Fuente HTML\"},\"specialchar\":{\"options\":\"Opciones de caracteres especiales\",\"title\":\"Seleccione un caracter especial\",\"toolbar\":\"Insertar Caracter Especial\"},\"scayt\":{\"btn_about\":\"Acerca de Corrector\",\"btn_dictionaries\":\"Diccionarios\",\"btn_disable\":\"Desactivar Corrector\",\"btn_enable\":\"Activar Corrector\",\"btn_langs\":\"Idiomas\",\"btn_options\":\"Opciones\",\"text_title\":\"Comprobar Ortografía Mientras Escribe\"},\"stylescombo\":{\"label\":\"Estilo\",\"panelTitle\":\"Estilos para formatear\",\"panelTitle1\":\"Estilos de párrafo\",\"panelTitle2\":\"Estilos de carácter\",\"panelTitle3\":\"Estilos de objeto\"},\"table\":{\"border\":\"Tamaño de Borde\",\"caption\":\"Título\",\"cell\":{\"menu\":\"Celda\",\"insertBefore\":\"Insertar celda a la izquierda\",\"insertAfter\":\"Insertar celda a la derecha\",\"deleteCell\":\"Eliminar Celdas\",\"merge\":\"Combinar Celdas\",\"mergeRight\":\"Combinar a la derecha\",\"mergeDown\":\"Combinar hacia abajo\",\"splitHorizontal\":\"Dividir la celda horizontalmente\",\"splitVertical\":\"Dividir la celda verticalmente\",\"title\":\"Propiedades de celda\",\"cellType\":\"Tipo de Celda\",\"rowSpan\":\"Expandir filas\",\"colSpan\":\"Expandir columnas\",\"wordWrap\":\"Ajustar al contenido\",\"hAlign\":\"Alineación Horizontal\",\"vAlign\":\"Alineación Vertical\",\"alignBaseline\":\"Linea de base\",\"bgColor\":\"Color de fondo\",\"borderColor\":\"Color de borde\",\"data\":\"Datos\",\"header\":\"Encabezado\",\"yes\":\"Sí\",\"no\":\"No\",\"invalidWidth\":\"La anchura de celda debe ser un número.\",\"invalidHeight\":\"La altura de celda debe ser un número.\",\"invalidRowSpan\":\"La expansión de filas debe ser un número entero.\",\"invalidColSpan\":\"La expansión de columnas debe ser un número entero.\",\"chooseColor\":\"Elegir\"},\"cellPad\":\"Esp. interior\",\"cellSpace\":\"Esp. e/celdas\",\"column\":{\"menu\":\"Columna\",\"insertBefore\":\"Insertar columna a la izquierda\",\"insertAfter\":\"Insertar columna a la derecha\",\"deleteColumn\":\"Eliminar Columnas\"},\"columns\":\"Columnas\",\"deleteTable\":\"Eliminar Tabla\",\"headers\":\"Encabezados\",\"headersBoth\":\"Ambas\",\"headersColumn\":\"Primera columna\",\"headersNone\":\"Ninguno\",\"headersRow\":\"Primera fila\",\"invalidBorder\":\"El tamaño del borde debe ser un número.\",\"invalidCellPadding\":\"El espaciado interior debe ser un número.\",\"invalidCellSpacing\":\"El espaciado entre celdas debe ser un número.\",\"invalidCols\":\"El número de columnas debe ser un número mayor que 0.\",\"invalidHeight\":\"La altura de tabla debe ser un número.\",\"invalidRows\":\"El número de filas debe ser un número mayor que 0.\",\"invalidWidth\":\"La anchura de tabla debe ser un número.\",\"menu\":\"Propiedades de Tabla\",\"row\":{\"menu\":\"Fila\",\"insertBefore\":\"Insertar fila en la parte superior\",\"insertAfter\":\"Insertar fila en la parte inferior\",\"deleteRow\":\"Eliminar Filas\"},\"rows\":\"Filas\",\"summary\":\"Síntesis\",\"title\":\"Propiedades de Tabla\",\"toolbar\":\"Tabla\",\"widthPc\":\"porcentaje\",\"widthPx\":\"pixeles\",\"widthUnit\":\"unidad de la anchura\"},\"undo\":{\"redo\":\"Rehacer\",\"undo\":\"Deshacer\"},\"wsc\":{\"btnIgnore\":\"Ignorar\",\"btnIgnoreAll\":\"Ignorar Todo\",\"btnReplace\":\"Reemplazar\",\"btnReplaceAll\":\"Reemplazar Todo\",\"btnUndo\":\"Deshacer\",\"changeTo\":\"Cambiar a\",\"errorLoading\":\"Error cargando la aplicación del servidor: %s.\",\"ieSpellDownload\":\"Módulo de Control de Ortografía no instalado.\\r\\n¿Desea descargarlo ahora?\",\"manyChanges\":\"Control finalizado: se ha cambiado %1 palabras\",\"noChanges\":\"Control finalizado: no se ha cambiado ninguna palabra\",\"noMispell\":\"Control finalizado: no se encontraron errores\",\"noSuggestions\":\"- No hay sugerencias -\",\"notAvailable\":\"Lo sentimos pero el servicio no está disponible.\",\"notInDic\":\"No se encuentra en el Diccionario\",\"oneChange\":\"Control finalizado: se ha cambiado una palabra\",\"progress\":\"Control de Ortografía en progreso...\",\"title\":\"Comprobar ortografía\",\"toolbar\":\"Ortografía\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/et.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['et']={\"editor\":\"Rikkalik tekstiredaktor\",\"editorPanel\":\"Rikkaliku tekstiredaktori paneel\",\"common\":{\"editorHelp\":\"Abi saamiseks vajuta ALT 0\",\"browseServer\":\"Serveri sirvimine\",\"url\":\"URL\",\"protocol\":\"Protokoll\",\"upload\":\"Laadi üles\",\"uploadSubmit\":\"Saada serverisse\",\"image\":\"Pilt\",\"flash\":\"Flash\",\"form\":\"Vorm\",\"checkbox\":\"Märkeruut\",\"radio\":\"Raadionupp\",\"textField\":\"Tekstilahter\",\"textarea\":\"Tekstiala\",\"hiddenField\":\"Varjatud lahter\",\"button\":\"Nupp\",\"select\":\"Valiklahter\",\"imageButton\":\"Piltnupp\",\"notSet\":\"<määramata>\",\"id\":\"ID\",\"name\":\"Nimi\",\"langDir\":\"Keele suund\",\"langDirLtr\":\"Vasakult paremale (LTR)\",\"langDirRtl\":\"Paremalt vasakule (RTL)\",\"langCode\":\"Keele kood\",\"longDescr\":\"Pikk kirjeldus URL\",\"cssClass\":\"Stiilistiku klassid\",\"advisoryTitle\":\"Soovituslik pealkiri\",\"cssStyle\":\"Laad\",\"ok\":\"Olgu\",\"cancel\":\"Loobu\",\"close\":\"Sulge\",\"preview\":\"Eelvaade\",\"resize\":\"Suuruse muutmiseks lohista\",\"generalTab\":\"Üldine\",\"advancedTab\":\"Täpsemalt\",\"validateNumberFailed\":\"See väärtus pole number.\",\"confirmNewPage\":\"Kõik salvestamata muudatused lähevad kaotsi. Kas oled kindel, et tahad laadida uue lehe?\",\"confirmCancel\":\"Mõned valikud on muudetud. Kas oled kindel, et tahad dialoogi sulgeda?\",\"options\":\"Valikud\",\"target\":\"Sihtkoht\",\"targetNew\":\"Uus aken (_blank)\",\"targetTop\":\"Kõige ülemine aken (_top)\",\"targetSelf\":\"Sama aken (_self)\",\"targetParent\":\"Vanemaken (_parent)\",\"langDirLTR\":\"Vasakult paremale (LTR)\",\"langDirRTL\":\"Paremalt vasakule (RTL)\",\"styles\":\"Stiili\",\"cssClasses\":\"Stiililehe klassid\",\"width\":\"Laius\",\"height\":\"Kõrgus\",\"align\":\"Joondus\",\"alignLeft\":\"Vasak\",\"alignRight\":\"Paremale\",\"alignCenter\":\"Kesk\",\"alignJustify\":\"Rööpjoondus\",\"alignTop\":\"Üles\",\"alignMiddle\":\"Keskele\",\"alignBottom\":\"Alla\",\"alignNone\":\"None\",\"invalidValue\":\"Vigane väärtus.\",\"invalidHeight\":\"Kõrgus peab olema number.\",\"invalidWidth\":\"Laius peab olema number.\",\"invalidCssLength\":\"\\\"%1\\\" välja jaoks määratud väärtus peab olema positiivne täisarv CSS ühikuga (px, %, in, cm, mm, em, ex, pt või pc) või ilma.\",\"invalidHtmlLength\":\"\\\"%1\\\" välja jaoks määratud väärtus peab olema positiivne täisarv HTML ühikuga (px või %) või ilma.\",\"invalidInlineStyle\":\"Reasisese stiili määrangud peavad koosnema paarisväärtustest (tuples), mis on semikoolonitega eraldatult järgnevas vormingus: \\\"nimi : väärtus\\\".\",\"cssLengthTooltip\":\"Sisesta väärtus pikslites või number koos sobiva CSS-i ühikuga (px, %, in, cm, mm, em, ex, pt või pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, pole saadaval</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Kõik õigused kaitstud.\",\"dlgTitle\":\"CKEditorist\",\"help\":\"Abi jaoks vaata $1.\",\"moreInfo\":\"Litsentsi andmed leiab meie veebilehelt:\",\"title\":\"CKEditorist\",\"userGuide\":\"CKEditori kasutusjuhendit\"},\"basicstyles\":{\"bold\":\"Paks\",\"italic\":\"Kursiiv\",\"strike\":\"Läbijoonitud\",\"subscript\":\"Allindeks\",\"superscript\":\"Ülaindeks\",\"underline\":\"Allajoonitud\"},\"blockquote\":{\"toolbar\":\"Blokktsitaat\"},\"clipboard\":{\"copy\":\"Kopeeri\",\"copyError\":\"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+C).\",\"cut\":\"Lõika\",\"cutError\":\"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+X).\",\"paste\":\"Aseta\",\"pasteArea\":\"Asetamise ala\",\"pasteMsg\":\"Palun aseta tekst järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl/Cmd+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.\",\"securityMsg\":\"Sinu veebisirvija turvaseadete tõttu ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead asetama need uuesti siia aknasse.\",\"title\":\"Asetamine\"},\"contextmenu\":{\"options\":\"Kontekstimenüü valikud\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Tööriistariba peitmine\",\"toolbarExpand\":\"Tööriistariba näitamine\",\"toolbarGroups\":{\"document\":\"Dokument\",\"clipboard\":\"Lõikelaud/tagasivõtmine\",\"editing\":\"Muutmine\",\"forms\":\"Vormid\",\"basicstyles\":\"Põhistiilid\",\"paragraph\":\"Lõik\",\"links\":\"Lingid\",\"insert\":\"Sisesta\",\"styles\":\"Stiilid\",\"colors\":\"Värvid\",\"tools\":\"Tööriistad\"},\"toolbars\":\"Redaktori tööriistaribad\"},\"elementspath\":{\"eleLabel\":\"Elementide asukoht\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Vorming\",\"panelTitle\":\"Vorming\",\"tag_address\":\"Aadress\",\"tag_div\":\"Tavaline (DIV)\",\"tag_h1\":\"Pealkiri 1\",\"tag_h2\":\"Pealkiri 2\",\"tag_h3\":\"Pealkiri 3\",\"tag_h4\":\"Pealkiri 4\",\"tag_h5\":\"Pealkiri 5\",\"tag_h6\":\"Pealkiri 6\",\"tag_p\":\"Tavaline\",\"tag_pre\":\"Vormindatud\"},\"horizontalrule\":{\"toolbar\":\"Horisontaaljoone sisestamine\"},\"image\":{\"alt\":\"Alternatiivne tekst\",\"border\":\"Joon\",\"btnUpload\":\"Saada serverisse\",\"button2Img\":\"Kas tahad teisendada valitud pildiga nupu tavaliseks pildiks?\",\"hSpace\":\"H. vaheruum\",\"img2Button\":\"Kas tahad teisendada valitud tavalise pildi pildiga nupuks?\",\"infoTab\":\"Pildi info\",\"linkTab\":\"Link\",\"lockRatio\":\"Lukusta kuvasuhe\",\"menu\":\"Pildi omadused\",\"resetSize\":\"Lähtesta suurus\",\"title\":\"Pildi omadused\",\"titleButton\":\"Piltnupu omadused\",\"upload\":\"Lae üles\",\"urlMissing\":\"Pildi lähte-URL on puudu.\",\"vSpace\":\"V. vaheruum\",\"validateBorder\":\"Äärise laius peab olema täisarv.\",\"validateHSpace\":\"Horisontaalne vaheruum peab olema täisarv.\",\"validateVSpace\":\"Vertikaalne vaheruum peab olema täisarv.\"},\"indent\":{\"indent\":\"Taande suurendamine\",\"outdent\":\"Taande vähendamine\"},\"fakeobjects\":{\"anchor\":\"Ankur\",\"flash\":\"Flashi animatsioon\",\"hiddenfield\":\"Varjatud väli\",\"iframe\":\"IFrame\",\"unknown\":\"Tundmatu objekt\"},\"link\":{\"acccessKey\":\"Juurdepääsu võti\",\"advanced\":\"Täpsemalt\",\"advisoryContentType\":\"Juhendava sisu tüüp\",\"advisoryTitle\":\"Juhendav tiitel\",\"anchor\":{\"toolbar\":\"Ankru sisestamine/muutmine\",\"menu\":\"Ankru omadused\",\"title\":\"Ankru omadused\",\"name\":\"Ankru nimi\",\"errorName\":\"Palun sisesta ankru nimi\",\"remove\":\"Eemalda ankur\"},\"anchorId\":\"Elemendi id järgi\",\"anchorName\":\"Ankru nime järgi\",\"charset\":\"Lingitud ressursi märgistik\",\"cssClasses\":\"Stiilistiku klassid\",\"emailAddress\":\"E-posti aadress\",\"emailBody\":\"Sõnumi tekst\",\"emailSubject\":\"Sõnumi teema\",\"id\":\"ID\",\"info\":\"Lingi info\",\"langCode\":\"Keele suund\",\"langDir\":\"Keele suund\",\"langDirLTR\":\"Vasakult paremale (LTR)\",\"langDirRTL\":\"Paremalt vasakule (RTL)\",\"menu\":\"Muuda linki\",\"name\":\"Nimi\",\"noAnchors\":\"(Selles dokumendis pole ankruid)\",\"noEmail\":\"Palun kirjuta e-posti aadress\",\"noUrl\":\"Palun kirjuta lingi URL\",\"other\":\"<muu>\",\"popupDependent\":\"Sõltuv (Netscape)\",\"popupFeatures\":\"Hüpikakna omadused\",\"popupFullScreen\":\"Täisekraan (IE)\",\"popupLeft\":\"Vasak asukoht\",\"popupLocationBar\":\"Aadressiriba\",\"popupMenuBar\":\"Menüüriba\",\"popupResizable\":\"Suurust saab muuta\",\"popupScrollBars\":\"Kerimisribad\",\"popupStatusBar\":\"Olekuriba\",\"popupToolbar\":\"Tööriistariba\",\"popupTop\":\"Ülemine asukoht\",\"rel\":\"Suhe\",\"selectAnchor\":\"Vali ankur\",\"styles\":\"Laad\",\"tabIndex\":\"Tab indeks\",\"target\":\"Sihtkoht\",\"targetFrame\":\"<raam>\",\"targetFrameName\":\"Sihtmärk raami nimi\",\"targetPopup\":\"<hüpikaken>\",\"targetPopupName\":\"Hüpikakna nimi\",\"title\":\"Link\",\"toAnchor\":\"Ankur sellel lehel\",\"toEmail\":\"E-post\",\"toUrl\":\"URL\",\"toolbar\":\"Lingi lisamine/muutmine\",\"type\":\"Lingi liik\",\"unlink\":\"Lingi eemaldamine\",\"upload\":\"Lae üles\"},\"list\":{\"bulletedlist\":\"Punktloend\",\"numberedlist\":\"Numberloend\"},\"magicline\":{\"title\":\"Sisesta siia lõigu tekst\"},\"maximize\":{\"maximize\":\"Maksimeerimine\",\"minimize\":\"Minimeerimine\"},\"pastetext\":{\"button\":\"Asetamine tavalise tekstina\",\"title\":\"Asetamine tavalise tekstina\"},\"pastefromword\":{\"confirmCleanup\":\"Tekst, mida tahad asetada näib pärinevat Wordist. Kas tahad selle enne asetamist puhastada?\",\"error\":\"Asetatud andmete puhastamine ei olnud sisemise vea tõttu võimalik\",\"title\":\"Asetamine Wordist\",\"toolbar\":\"Asetamine Wordist\"},\"removeformat\":{\"toolbar\":\"Vormingu eemaldamine\"},\"sourcearea\":{\"toolbar\":\"Lähtekood\"},\"specialchar\":{\"options\":\"Erimärkide valikud\",\"title\":\"Erimärgi valimine\",\"toolbar\":\"Erimärgi sisestamine\"},\"scayt\":{\"btn_about\":\"SCAYT-ist lähemalt\",\"btn_dictionaries\":\"Sõnaraamatud\",\"btn_disable\":\"SCAYT keelatud\",\"btn_enable\":\"SCAYT lubatud\",\"btn_langs\":\"Keeled\",\"btn_options\":\"Valikud\",\"text_title\":\"Õigekirjakontroll kirjutamise ajal\"},\"stylescombo\":{\"label\":\"Stiil\",\"panelTitle\":\"Vormindusstiilid\",\"panelTitle1\":\"Blokkstiilid\",\"panelTitle2\":\"Reasisesed stiilid\",\"panelTitle3\":\"Objektistiilid\"},\"table\":{\"border\":\"Joone suurus\",\"caption\":\"Tabeli tiitel\",\"cell\":{\"menu\":\"Lahter\",\"insertBefore\":\"Sisesta lahter enne\",\"insertAfter\":\"Sisesta lahter peale\",\"deleteCell\":\"Eemalda lahtrid\",\"merge\":\"Ühenda lahtrid\",\"mergeRight\":\"Ühenda paremale\",\"mergeDown\":\"Ühenda alla\",\"splitHorizontal\":\"Poolita lahter horisontaalselt\",\"splitVertical\":\"Poolita lahter vertikaalselt\",\"title\":\"Lahtri omadused\",\"cellType\":\"Lahtri liik\",\"rowSpan\":\"Ridade vahe\",\"colSpan\":\"Tulpade vahe\",\"wordWrap\":\"Sõnade murdmine\",\"hAlign\":\"Horisontaalne joondus\",\"vAlign\":\"Vertikaalne joondus\",\"alignBaseline\":\"Baasjoon\",\"bgColor\":\"Tausta värv\",\"borderColor\":\"Äärise värv\",\"data\":\"Andmed\",\"header\":\"Päis\",\"yes\":\"Jah\",\"no\":\"Ei\",\"invalidWidth\":\"Lahtri laius peab olema number.\",\"invalidHeight\":\"Lahtri kõrgus peab olema number.\",\"invalidRowSpan\":\"Ridade vahe peab olema täisarv.\",\"invalidColSpan\":\"Tulpade vahe peab olema täisarv.\",\"chooseColor\":\"Vali\"},\"cellPad\":\"Lahtri täidis\",\"cellSpace\":\"Lahtri vahe\",\"column\":{\"menu\":\"Veerg\",\"insertBefore\":\"Sisesta veerg enne\",\"insertAfter\":\"Sisesta veerg peale\",\"deleteColumn\":\"Eemalda veerud\"},\"columns\":\"Veerud\",\"deleteTable\":\"Kustuta tabel\",\"headers\":\"Päised\",\"headersBoth\":\"Mõlemad\",\"headersColumn\":\"Esimene tulp\",\"headersNone\":\"Puudub\",\"headersRow\":\"Esimene rida\",\"invalidBorder\":\"Äärise suurus peab olema number.\",\"invalidCellPadding\":\"Lahtrite polsterdus (padding) peab olema positiivne arv.\",\"invalidCellSpacing\":\"Lahtrite vahe peab olema positiivne arv.\",\"invalidCols\":\"Tulpade arv peab olema nullist suurem.\",\"invalidHeight\":\"Tabeli kõrgus peab olema number.\",\"invalidRows\":\"Ridade arv peab olema nullist suurem.\",\"invalidWidth\":\"Tabeli laius peab olema number.\",\"menu\":\"Tabeli omadused\",\"row\":{\"menu\":\"Rida\",\"insertBefore\":\"Sisesta rida enne\",\"insertAfter\":\"Sisesta rida peale\",\"deleteRow\":\"Eemalda read\"},\"rows\":\"Read\",\"summary\":\"Kokkuvõte\",\"title\":\"Tabeli omadused\",\"toolbar\":\"Tabel\",\"widthPc\":\"protsenti\",\"widthPx\":\"pikslit\",\"widthUnit\":\"laiuse ühik\"},\"undo\":{\"redo\":\"Toimingu kordamine\",\"undo\":\"Tagasivõtmine\"},\"wsc\":{\"btnIgnore\":\"Ignoreeri\",\"btnIgnoreAll\":\"Ignoreeri kõiki\",\"btnReplace\":\"Asenda\",\"btnReplaceAll\":\"Asenda kõik\",\"btnUndo\":\"Võta tagasi\",\"changeTo\":\"Muuda\",\"errorLoading\":\"Viga rakenduse teenushosti laadimisel: %s.\",\"ieSpellDownload\":\"Õigekirja kontrollija ei ole paigaldatud. Soovid sa selle alla laadida?\",\"manyChanges\":\"Õigekirja kontroll sooritatud: %1 sõna muudetud\",\"noChanges\":\"Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud\",\"noMispell\":\"Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud\",\"noSuggestions\":\"- Soovitused puuduvad -\",\"notAvailable\":\"Kahjuks ei ole teenus praegu saadaval.\",\"notInDic\":\"Puudub sõnastikust\",\"oneChange\":\"Õigekirja kontroll sooritatud: üks sõna muudeti\",\"progress\":\"Toimub õigekirja kontroll...\",\"title\":\"Õigekirjakontroll\",\"toolbar\":\"Õigekirjakontroll\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/eu.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['eu']={\"editor\":\"Testu aberastuaren editorea\",\"editorPanel\":\"Testu aberastuaren editorearen panela\",\"common\":{\"editorHelp\":\"Sakatu ALT 0 laguntza jasotzeko\",\"browseServer\":\"Arakatu zerbitzaria\",\"url\":\"URLa\",\"protocol\":\"Protokoloa\",\"upload\":\"Kargatu\",\"uploadSubmit\":\"Bidali zerbitzarira\",\"image\":\"Irudia\",\"flash\":\"Flash\",\"form\":\"Formularioa\",\"checkbox\":\"Kontrol-laukia\",\"radio\":\"Aukera-botoia\",\"textField\":\"Testu-eremua\",\"textarea\":\"Testu-area\",\"hiddenField\":\"Ezkutuko eremua\",\"button\":\"Botoia\",\"select\":\"Hautespen-eremua\",\"imageButton\":\"Irudi-botoia\",\"notSet\":\"<ezarri gabe>\",\"id\":\"Id\",\"name\":\"Izena\",\"langDir\":\"Hizkuntzaren norabidea\",\"langDirLtr\":\"Ezkerretik eskuinera (LTR)\",\"langDirRtl\":\"Eskuinetik ezkerrera (RTL)\",\"langCode\":\"Hizkuntzaren kodea\",\"longDescr\":\"URLaren deskribapen luzea\",\"cssClass\":\"Estilo-orriko klaseak\",\"advisoryTitle\":\"Aholkatutako izenburua\",\"cssStyle\":\"Estiloa\",\"ok\":\"Ados\",\"cancel\":\"Utzi\",\"close\":\"Itxi\",\"preview\":\"Aurrebista\",\"resize\":\"Aldatu tamainaz\",\"generalTab\":\"Orokorra\",\"advancedTab\":\"Aurreratua\",\"validateNumberFailed\":\"Balio hau ez da zenbaki bat.\",\"confirmNewPage\":\"Eduki honetan gorde gabe dauden aldaketak galduko dira. Ziur zaude orri berri bat kargatu nahi duzula?\",\"confirmCancel\":\"Aukera batzuk aldatu dituzu. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?\",\"options\":\"Aukerak\",\"target\":\"Helburua\",\"targetNew\":\"Leiho berria (_blank)\",\"targetTop\":\"Goieneko leihoan (_top)\",\"targetSelf\":\"Leiho berean (_self)\",\"targetParent\":\"Leiho gurasoan (_parent)\",\"langDirLTR\":\"Ezkerretik eskuinera (LTR)\",\"langDirRTL\":\"Eskuinetik ezkerrera (RTL)\",\"styles\":\"Estiloa\",\"cssClasses\":\"Estilo-orriko klaseak\",\"width\":\"Zabalera\",\"height\":\"Altuera\",\"align\":\"Lerrokatzea\",\"alignLeft\":\"Ezkerrean\",\"alignRight\":\"Eskuinean\",\"alignCenter\":\"Erdian\",\"alignJustify\":\"Justifikatu\",\"alignTop\":\"Goian\",\"alignMiddle\":\"Erdian\",\"alignBottom\":\"Behean\",\"alignNone\":\"Bat ere ez\",\"invalidValue\":\"Balio desegokia.\",\"invalidHeight\":\"Altuera zenbaki bat izan behar da.\",\"invalidWidth\":\"Zabalera zenbaki bat izan behar da.\",\"invalidCssLength\":\"\\\"%1\\\" eremurako zehaztutako balioak zenbaki positibo bat izan behar du, CSS neurri unitate batekin edo gabe (px, %, in, cm, mm, em, ex, pt edo pc).\",\"invalidHtmlLength\":\"\\\"%1\\\" eremurako zehaztutako balioak zenbaki positibo bat izan behar du, HTML neurri unitate batekin edo gabe (px edo %).\",\"invalidInlineStyle\":\"Lineako estiloan zehaztutako balioak \\\"izen : balio\\\" formatuko tupla bat edo gehiago izan behar dira, komaz bereiztuak.\",\"cssLengthTooltip\":\"Sartu zenbaki bat edo zenbaki bat baliozko CSS unitate batekin (px, %, in, cm, mm, em, ex, pt, edo pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, erabilezina</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Eskubide guztiak erreserbaturik.\",\"dlgTitle\":\"CKEditor-i buruz\",\"help\":\"Begiratu $1 laguntzarako.\",\"moreInfo\":\"Lizentziari buruzko informazioa gure webgunean:\",\"title\":\"CKEditor-i buruz\",\"userGuide\":\"CKEditor-en erabiltzaile-gida\"},\"basicstyles\":{\"bold\":\"Lodia\",\"italic\":\"Etzana\",\"strike\":\"Marratua\",\"subscript\":\"Azpi-indizea\",\"superscript\":\"Goi-indizea\",\"underline\":\"Azpimarratu\"},\"blockquote\":{\"toolbar\":\"Aipamen blokea\"},\"clipboard\":{\"copy\":\"Kopiatu\",\"copyError\":\"Zure web nabigatzailearen segurtasun ezarpenek ez dute baimentzen testuak automatikoki kopiatzea. Mesedez teklatua erabil ezazu (Ctrl/Cmd+C).\",\"cut\":\"Ebaki\",\"cutError\":\"Zure web nabigatzailearen segurtasun ezarpenek ez dute baimentzen testuak automatikoki moztea. Mesedez teklatua erabil ezazu (Ctrl/Cmd+X).\",\"paste\":\"Itsatsi\",\"pasteArea\":\"Itsasteko area\",\"pasteMsg\":\"Mesedez teklatua erabiliz (<strong>Ctrl/Cmd+V</strong>) ondorengo eremuan testua itsatsi eta sakatu <strong>Ados</strong>.\",\"securityMsg\":\"Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.\",\"title\":\"Itsatsi\"},\"contextmenu\":{\"options\":\"Testuinguru-menuaren aukerak\"},\"button\":{\"selectedLabel\":\"%1 (hautatuta)\"},\"toolbar\":{\"toolbarCollapse\":\"Tolestu tresna-barra\",\"toolbarExpand\":\"Zabaldu tresna-barra\",\"toolbarGroups\":{\"document\":\"Dokumentua\",\"clipboard\":\"Arbela/Desegin\",\"editing\":\"Editatu\",\"forms\":\"Formularioak\",\"basicstyles\":\"Oinarrizko estiloak\",\"paragraph\":\"Paragrafoa\",\"links\":\"Estekak\",\"insert\":\"Txertatu\",\"styles\":\"Estiloak\",\"colors\":\"Koloreak\",\"tools\":\"Tresnak\"},\"toolbars\":\"Editorearen tresna-barrak\"},\"elementspath\":{\"eleLabel\":\"Elementuen bidea\",\"eleTitle\":\"%1 elementua\"},\"format\":{\"label\":\"Formatua\",\"panelTitle\":\"Paragrafoaren formatua\",\"tag_address\":\"Helbidea\",\"tag_div\":\"Normala (DIV)\",\"tag_h1\":\"Izenburua 1\",\"tag_h2\":\"Izenburua 2\",\"tag_h3\":\"Izenburua 3\",\"tag_h4\":\"Izenburua 4\",\"tag_h5\":\"Izenburua 5\",\"tag_h6\":\"Izenburua 6\",\"tag_p\":\"Normala\",\"tag_pre\":\"Formatuduna\"},\"horizontalrule\":{\"toolbar\":\"Txertatu marra horizontala\"},\"image\":{\"alt\":\"Ordezko testua\",\"border\":\"Ertza\",\"btnUpload\":\"Bidali zerbitzarira\",\"button2Img\":\"Hautatutako irudi-botoia irudi arrunt bihurtu nahi duzu?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Hautatutako irudia irudi-botoi bihurtu nahi duzu?\",\"infoTab\":\"Irudiaren informazioa\",\"linkTab\":\"Esteka\",\"lockRatio\":\"Blokeatu erlazioa\",\"menu\":\"Irudiaren propietateak\",\"resetSize\":\"Berrezarri tamaina\",\"title\":\"Irudiaren propietateak\",\"titleButton\":\"Irudi-botoiaren propietateak\",\"upload\":\"Kargatu\",\"urlMissing\":\"Irudiaren iturburuaren URLa falta da.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"Ertza zenbaki oso bat izan behar da.\",\"validateHSpace\":\"HSpace zenbaki oso bat izan behar da.\",\"validateVSpace\":\"VSpace zenbaki oso bat izan behar da.\"},\"indent\":{\"indent\":\"Handitu koska\",\"outdent\":\"Txikitu koska\"},\"fakeobjects\":{\"anchor\":\"Aingura\",\"flash\":\"Flash animazioa\",\"hiddenfield\":\"Ezkutuko eremua\",\"iframe\":\"IFrame-a\",\"unknown\":\"Objektu ezezaguna\"},\"link\":{\"acccessKey\":\"Sarbide-tekla\",\"advanced\":\"Aurreratua\",\"advisoryContentType\":\"Aholkatutako eduki-mota\",\"advisoryTitle\":\"Aholkatutako izenburua\",\"anchor\":{\"toolbar\":\"Aingura\",\"menu\":\"Editatu aingura\",\"title\":\"Ainguraren propietateak\",\"name\":\"Ainguraren izena\",\"errorName\":\"Idatzi ainguraren izena\",\"remove\":\"Kendu aingura\"},\"anchorId\":\"Elementuaren Id-aren arabera\",\"anchorName\":\"Aingura-izenaren arabera\",\"charset\":\"Estekatutako baliabide karaktere-jokoa\",\"cssClasses\":\"Estilo-orriko klaseak\",\"emailAddress\":\"E-posta helbidea\",\"emailBody\":\"Mezuaren gorputza\",\"emailSubject\":\"Mezuaren gaia\",\"id\":\"Id\",\"info\":\"Estekaren informazioa\",\"langCode\":\"Hizkuntzaren kodea\",\"langDir\":\"Hizkuntzaren norabidea\",\"langDirLTR\":\"Ezkerretik eskuinera (LTR)\",\"langDirRTL\":\"Eskuinetik ezkerrera (RTL)\",\"menu\":\"Editatu esteka\",\"name\":\"Izena\",\"noAnchors\":\"(Ez dago aingurarik erabilgarri dokumentuan)\",\"noEmail\":\"Mesedez idatzi e-posta helbidea\",\"noUrl\":\"Mesedez idatzi estekaren URLa\",\"other\":\"<bestelakoa>\",\"popupDependent\":\"Menpekoa (Netscape)\",\"popupFeatures\":\"Laster-leihoaren ezaugarriak\",\"popupFullScreen\":\"Pantaila osoa (IE)\",\"popupLeft\":\"Ezkerreko posizioa\",\"popupLocationBar\":\"Kokaleku-barra\",\"popupMenuBar\":\"Menu-barra\",\"popupResizable\":\"Tamaina aldakorra\",\"popupScrollBars\":\"Korritze-barrak\",\"popupStatusBar\":\"Egoera-barra\",\"popupToolbar\":\"Tresna-barra\",\"popupTop\":\"Goiko posizioa\",\"rel\":\"Erlazioa\",\"selectAnchor\":\"Hautatu aingura\",\"styles\":\"Estiloa\",\"tabIndex\":\"Tabulazio indizea\",\"target\":\"Helburua\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Helburuko markoaren izena\",\"targetPopup\":\"<laster-leihoa>\",\"targetPopupName\":\"Laster-leihoaren izena\",\"title\":\"Esteka\",\"toAnchor\":\"Estekatu testuko aingurara\",\"toEmail\":\"E-posta\",\"toUrl\":\"URLa\",\"toolbar\":\"Esteka\",\"type\":\"Esteka-mota\",\"unlink\":\"Kendu esteka\",\"upload\":\"Kargatu\"},\"list\":{\"bulletedlist\":\"Buletdun Zerrenda\",\"numberedlist\":\"Zenbakidun Zerrenda\"},\"magicline\":{\"title\":\"Txertatu paragrafoa hemen\"},\"maximize\":{\"maximize\":\"Maximizatu\",\"minimize\":\"Minimizatu\"},\"pastetext\":{\"button\":\"Itsatsi testu arrunta bezala\",\"title\":\"Itsatsi testu arrunta bezala\"},\"pastefromword\":{\"confirmCleanup\":\"Itsatsi nahi duzun testua Word-etik kopiatua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?\",\"error\":\"Barne-errore bat dela eta ezin izan da itsatsitako testua garbitu\",\"title\":\"Itsatsi Word-etik\",\"toolbar\":\"Itsatsi Word-etik\"},\"removeformat\":{\"toolbar\":\"Kendu formatua\"},\"sourcearea\":{\"toolbar\":\"Iturburua\"},\"specialchar\":{\"options\":\"Karaktere berezien aukerak\",\"title\":\"Hautatu karaktere berezia\",\"toolbar\":\"Txertatu karaktere berezia\"},\"scayt\":{\"btn_about\":\"SCAYTi buruz\",\"btn_dictionaries\":\"Hiztegiak\",\"btn_disable\":\"Desgaitu SCAYT\",\"btn_enable\":\"Gaitu SCAYT\",\"btn_langs\":\"Hizkuntzak\",\"btn_options\":\"Aukerak\",\"text_title\":\"Ortografia Zuzenketa Idatzi Ahala (SCAYT)\"},\"stylescombo\":{\"label\":\"Estiloak\",\"panelTitle\":\"Formatu estiloak\",\"panelTitle1\":\"Bloke estiloak\",\"panelTitle2\":\"Lineako estiloak\",\"panelTitle3\":\"Objektu estiloak\"},\"table\":{\"border\":\"Ertzaren zabalera\",\"caption\":\"Epigrafea\",\"cell\":{\"menu\":\"Gelaxka\",\"insertBefore\":\"Txertatu gelaxka aurretik\",\"insertAfter\":\"Txertatu gelaxka ondoren\",\"deleteCell\":\"Ezabatu gelaxkak\",\"merge\":\"Batu gelaxkak\",\"mergeRight\":\"Batu eskuinetara\",\"mergeDown\":\"Batu behera\",\"splitHorizontal\":\"Banatu gelaxka horizontalki\",\"splitVertical\":\"Banatu gelaxka bertikalki\",\"title\":\"Gelaxkaren propietateak\",\"cellType\":\"Gelaxka-mota\",\"rowSpan\":\"Errenkaden hedadura\",\"colSpan\":\"Zutabeen hedadura\",\"wordWrap\":\"Itzulbira\",\"hAlign\":\"Lerrokatze horizontala\",\"vAlign\":\"Lerrokatze bertikala\",\"alignBaseline\":\"Oinarri-lerroan\",\"bgColor\":\"Atzeko planoaren kolorea\",\"borderColor\":\"Ertzaren kolorea\",\"data\":\"Data\",\"header\":\"Goiburua\",\"yes\":\"Bai\",\"no\":\"Ez\",\"invalidWidth\":\"Gelaxkaren zabalera zenbaki bat izan behar da.\",\"invalidHeight\":\"Gelaxkaren altuera zenbaki bat izan behar da.\",\"invalidRowSpan\":\"Errenkaden hedadura zenbaki osoa izan behar da.\",\"invalidColSpan\":\"Zutabeen hedadura zenbaki osoa izan behar da.\",\"chooseColor\":\"Aukeratu\"},\"cellPad\":\"Gelaxken betegarria\",\"cellSpace\":\"Gelaxka arteko tartea\",\"column\":{\"menu\":\"Zutabea\",\"insertBefore\":\"Txertatu zutabea aurretik\",\"insertAfter\":\"Txertatu zutabea ondoren\",\"deleteColumn\":\"Ezabatu zutabeak\"},\"columns\":\"Zutabeak\",\"deleteTable\":\"Ezabatu taula\",\"headers\":\"Goiburuak\",\"headersBoth\":\"Biak\",\"headersColumn\":\"Lehen zutabea\",\"headersNone\":\"Bat ere ez\",\"headersRow\":\"Lehen errenkada\",\"invalidBorder\":\"Ertzaren tamaina zenbaki bat izan behar da.\",\"invalidCellPadding\":\"Gelaxken betegarria zenbaki bat izan behar da.\",\"invalidCellSpacing\":\"Gelaxka arteko tartea zenbaki bat izan behar da.\",\"invalidCols\":\"Zutabe kopurua 0 baino handiagoa den zenbakia izan behar da.\",\"invalidHeight\":\"Taularen altuera zenbaki bat izan behar da.\",\"invalidRows\":\"Errenkada kopurua 0 baino handiagoa den zenbakia izan behar da.\",\"invalidWidth\":\"Taularen zabalera zenbaki bat izan behar da.\",\"menu\":\"Taularen propietateak\",\"row\":{\"menu\":\"Errenkada\",\"insertBefore\":\"Txertatu errenkada aurretik\",\"insertAfter\":\"Txertatu errenkada ondoren\",\"deleteRow\":\"Ezabatu errenkadak\"},\"rows\":\"Errenkadak\",\"summary\":\"Laburpena\",\"title\":\"Taularen propietateak\",\"toolbar\":\"Taula\",\"widthPc\":\"ehuneko\",\"widthPx\":\"pixel\",\"widthUnit\":\"zabalera unitatea\"},\"undo\":{\"redo\":\"Berregin\",\"undo\":\"Desegin\"},\"wsc\":{\"btnIgnore\":\"Ezikusi\",\"btnIgnoreAll\":\"Denak Ezikusi\",\"btnReplace\":\"Ordezkatu\",\"btnReplaceAll\":\"Denak Ordezkatu\",\"btnUndo\":\"Desegin\",\"changeTo\":\"Honekin ordezkatu\",\"errorLoading\":\"Errorea gertatu da aplikazioa zerbitzaritik kargatzean: %s.\",\"ieSpellDownload\":\"Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?\",\"manyChanges\":\"Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira\",\"noChanges\":\"Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu\",\"noMispell\":\"Zuzenketa ortografikoa bukatuta: Akatsik ez\",\"noSuggestions\":\"- Iradokizunik ez -\",\"notAvailable\":\"Barkatu baina momentu honetan zerbitzua ez dago erabilgarri.\",\"notInDic\":\"Ez dago hiztegian\",\"oneChange\":\"Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da\",\"progress\":\"Zuzenketa ortografikoa martxan...\",\"title\":\"Ortografia zuzenketa\",\"toolbar\":\"Ortografia\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/fa.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['fa']={\"editor\":\"ویرایش‌گر متن غنی\",\"editorPanel\":\"پنل ویرایشگر متن غنی\",\"common\":{\"editorHelp\":\"کلید Alt+0 را برای راهنمایی بفشارید\",\"browseServer\":\"فهرست​نمایی سرور\",\"url\":\"URL\",\"protocol\":\"قرارداد\",\"upload\":\"بالاگذاری\",\"uploadSubmit\":\"به سرور بفرست\",\"image\":\"تصویر\",\"flash\":\"فلش\",\"form\":\"فرم\",\"checkbox\":\"چک‌باکس\",\"radio\":\"دکمه‌ی رادیویی\",\"textField\":\"فیلد متنی\",\"textarea\":\"ناحیهٴ متنی\",\"hiddenField\":\"فیلد پنهان\",\"button\":\"دکمه\",\"select\":\"فیلد انتخاب چند گزینه​ای\",\"imageButton\":\"دکمه‌ی تصویری\",\"notSet\":\"<تعیین‌نشده>\",\"id\":\"شناسه\",\"name\":\"نام\",\"langDir\":\"جهت زبان\",\"langDirLtr\":\"چپ به راست\",\"langDirRtl\":\"راست به چپ\",\"langCode\":\"کد زبان\",\"longDescr\":\"URL توصیف طولانی\",\"cssClass\":\"کلاس​های شیوه​نامه (Stylesheet)\",\"advisoryTitle\":\"عنوان کمکی\",\"cssStyle\":\"سبک\",\"ok\":\"پذیرش\",\"cancel\":\"انصراف\",\"close\":\"بستن\",\"preview\":\"پیش‌نمایش\",\"resize\":\"تغییر اندازه\",\"generalTab\":\"عمومی\",\"advancedTab\":\"پیش‌رفته\",\"validateNumberFailed\":\"این مقدار یک عدد نیست.\",\"confirmNewPage\":\"هر تغییر ایجاد شده​ی ذخیره نشده از بین خواهد رفت. آیا اطمینان دارید که قصد بارگیری صفحه جدیدی را دارید؟\",\"confirmCancel\":\"برخی از گزینه‌ها تغییر کرده‌اند. آیا واقعا قصد بستن این پنجره را دارید؟\",\"options\":\"گزینه​ها\",\"target\":\"مقصد\",\"targetNew\":\"پنجره جدید\",\"targetTop\":\"بالاترین پنجره\",\"targetSelf\":\"همان پنجره\",\"targetParent\":\"پنجره والد\",\"langDirLTR\":\"چپ به راست\",\"langDirRTL\":\"راست به چپ\",\"styles\":\"سبک\",\"cssClasses\":\"کلاس‌های سبک‌نامه\",\"width\":\"عرض\",\"height\":\"طول\",\"align\":\"چینش\",\"alignLeft\":\"چپ\",\"alignRight\":\"راست\",\"alignCenter\":\"وسط\",\"alignJustify\":\"بلوک چین\",\"alignTop\":\"بالا\",\"alignMiddle\":\"میانه\",\"alignBottom\":\"پائین\",\"alignNone\":\"هیچ\",\"invalidValue\":\"مقدار نامعتبر.\",\"invalidHeight\":\"ارتفاع باید یک عدد باشد.\",\"invalidWidth\":\"عرض باید یک عدد باشد.\",\"invalidCssLength\":\"عدد تعیین شده برای فیلد \\\"%1\\\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری CSS معتبر باشد (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"عدد تعیین شده برای فیلد \\\"%1\\\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری HTML معتبر باشد (px or %).\",\"invalidInlineStyle\":\"عدد تعیین شده برای سبک درون​خطی -Inline Style- باید دارای یک یا چند چندتایی با شکلی شبیه \\\"name : value\\\" که باید با یک \\\";\\\" از هم جدا شوند.\",\"cssLengthTooltip\":\"یک عدد برای یک مقدار بر حسب پیکسل و یا یک عدد با یک واحد CSS معتبر وارد کنید (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">، غیر قابل دسترس</span>\"},\"about\":{\"copy\":\"حق نشر &copy; $1. کلیه حقوق محفوظ است.\",\"dlgTitle\":\"درباره CKEditor\",\"help\":\" برای راهنمایی $1 را ملاحظه کنید.\",\"moreInfo\":\"برای کسب اطلاعات مجوز لطفا به وب سایت ما مراجعه کنید:\",\"title\":\"درباره CKEditor\",\"userGuide\":\"راهنمای کاربران CKEditor\"},\"basicstyles\":{\"bold\":\"درشت\",\"italic\":\"خمیده\",\"strike\":\"خط‌خورده\",\"subscript\":\"زیرنویس\",\"superscript\":\"بالانویس\",\"underline\":\"زیرخط‌دار\"},\"blockquote\":{\"toolbar\":\"بلوک نقل قول\"},\"clipboard\":{\"copy\":\"رونوشت\",\"copyError\":\"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپی کردن را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+C).\",\"cut\":\"برش\",\"cutError\":\"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+X).\",\"paste\":\"چسباندن\",\"pasteArea\":\"محل چسباندن\",\"pasteMsg\":\"لطفا متن را با کلیدهای (<STRONG>Ctrl/Cmd+V</STRONG>) در این جعبهٴ متنی بچسبانید و <STRONG>پذیرش</STRONG> را بزنید.\",\"securityMsg\":\"به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمیتواند دسترسی مستقیم به دادههای clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.\",\"title\":\"چسباندن\"},\"contextmenu\":{\"options\":\"گزینه​های منوی زمینه\"},\"button\":{\"selectedLabel\":\"%1 (انتخاب شده)\"},\"toolbar\":{\"toolbarCollapse\":\"بستن نوار ابزار\",\"toolbarExpand\":\"بازکردن نوار ابزار\",\"toolbarGroups\":{\"document\":\"سند\",\"clipboard\":\"حافظه موقت/برگشت\",\"editing\":\"در حال ویرایش\",\"forms\":\"فرم​ها\",\"basicstyles\":\"سبک‌های پایه\",\"paragraph\":\"بند\",\"links\":\"پیوندها\",\"insert\":\"ورود\",\"styles\":\"سبک‌ها\",\"colors\":\"رنگ​ها\",\"tools\":\"ابزارها\"},\"toolbars\":\"نوار ابزارهای ویرایش‌گر\"},\"elementspath\":{\"eleLabel\":\"مسیر عناصر\",\"eleTitle\":\"%1 عنصر\"},\"format\":{\"label\":\"قالب\",\"panelTitle\":\"قالب بند\",\"tag_address\":\"نشانی\",\"tag_div\":\"بند\",\"tag_h1\":\"سرنویس ۱\",\"tag_h2\":\"سرنویس ۲\",\"tag_h3\":\"سرنویس ۳\",\"tag_h4\":\"سرنویس ۴\",\"tag_h5\":\"سرنویس ۵\",\"tag_h6\":\"سرنویس ۶\",\"tag_p\":\"معمولی\",\"tag_pre\":\"قالب‌دار\"},\"horizontalrule\":{\"toolbar\":\"گنجاندن خط افقی\"},\"image\":{\"alt\":\"متن جایگزین\",\"border\":\"لبه\",\"btnUpload\":\"به سرور بفرست\",\"button2Img\":\"آیا مایلید از یک تصویر ساده روی دکمه تصویری انتخاب شده استفاده کنید؟\",\"hSpace\":\"فاصلهٴ افقی\",\"img2Button\":\"آیا مایلید از یک دکمه تصویری روی تصویر انتخاب شده استفاده کنید؟\",\"infoTab\":\"اطلاعات تصویر\",\"linkTab\":\"پیوند\",\"lockRatio\":\"قفل کردن نسبت\",\"menu\":\"ویژگی​های تصویر\",\"resetSize\":\"بازنشانی اندازه\",\"title\":\"ویژگی​های تصویر\",\"titleButton\":\"ویژگی​های دکمهٴ تصویری\",\"upload\":\"انتقال به سرور\",\"urlMissing\":\"آدرس URL اصلی تصویر یافت نشد.\",\"vSpace\":\"فاصلهٴ عمودی\",\"validateBorder\":\"مقدار خطوط باید یک عدد باشد.\",\"validateHSpace\":\"مقدار فاصله گذاری افقی باید یک عدد باشد.\",\"validateVSpace\":\"مقدار فاصله گذاری عمودی باید یک عدد باشد.\"},\"indent\":{\"indent\":\"افزایش تورفتگی\",\"outdent\":\"کاهش تورفتگی\"},\"fakeobjects\":{\"anchor\":\"لنگر\",\"flash\":\"انیمشن فلش\",\"hiddenfield\":\"فیلد پنهان\",\"iframe\":\"IFrame\",\"unknown\":\"شیء ناشناخته\"},\"link\":{\"acccessKey\":\"کلید دستیابی\",\"advanced\":\"پیشرفته\",\"advisoryContentType\":\"نوع محتوای کمکی\",\"advisoryTitle\":\"عنوان کمکی\",\"anchor\":{\"toolbar\":\"گنجاندن/ویرایش لنگر\",\"menu\":\"ویژگی​های لنگر\",\"title\":\"ویژگی​های لنگر\",\"name\":\"نام لنگر\",\"errorName\":\"لطفا نام لنگر را بنویسید\",\"remove\":\"حذف لنگر\"},\"anchorId\":\"با شناسهٴ المان\",\"anchorName\":\"با نام لنگر\",\"charset\":\"نویسه​گان منبع پیوند شده\",\"cssClasses\":\"کلاس​های شیوه​نامه(Stylesheet)\",\"emailAddress\":\"نشانی پست الکترونیکی\",\"emailBody\":\"متن پیام\",\"emailSubject\":\"موضوع پیام\",\"id\":\"شناسه\",\"info\":\"اطلاعات پیوند\",\"langCode\":\"جهت​نمای زبان\",\"langDir\":\"جهت​نمای زبان\",\"langDirLTR\":\"چپ به راست (LTR)\",\"langDirRTL\":\"راست به چپ (RTL)\",\"menu\":\"ویرایش پیوند\",\"name\":\"نام\",\"noAnchors\":\"(در این سند لنگری دردسترس نیست)\",\"noEmail\":\"لطفا نشانی پست الکترونیکی را بنویسید\",\"noUrl\":\"لطفا URL پیوند را بنویسید\",\"other\":\"<سایر>\",\"popupDependent\":\"وابسته (Netscape)\",\"popupFeatures\":\"ویژگی​های پنجرهٴ پاپاپ\",\"popupFullScreen\":\"تمام صفحه (IE)\",\"popupLeft\":\"موقعیت چپ\",\"popupLocationBar\":\"نوار موقعیت\",\"popupMenuBar\":\"نوار منو\",\"popupResizable\":\"قابل تغییر اندازه\",\"popupScrollBars\":\"میله​های پیمایش\",\"popupStatusBar\":\"نوار وضعیت\",\"popupToolbar\":\"نوار ابزار\",\"popupTop\":\"موقعیت بالا\",\"rel\":\"وابستگی\",\"selectAnchor\":\"یک لنگر برگزینید\",\"styles\":\"شیوه (style)\",\"tabIndex\":\"نمایهٴ دسترسی با برگه\",\"target\":\"مقصد\",\"targetFrame\":\"<فریم>\",\"targetFrameName\":\"نام فریم مقصد\",\"targetPopup\":\"<پنجرهٴ پاپاپ>\",\"targetPopupName\":\"نام پنجرهٴ پاپاپ\",\"title\":\"پیوند\",\"toAnchor\":\"لنگر در همین صفحه\",\"toEmail\":\"پست الکترونیکی\",\"toUrl\":\"URL\",\"toolbar\":\"گنجاندن/ویرایش پیوند\",\"type\":\"نوع پیوند\",\"unlink\":\"برداشتن پیوند\",\"upload\":\"انتقال به سرور\"},\"list\":{\"bulletedlist\":\"فهرست نقطه​ای\",\"numberedlist\":\"فهرست شماره​دار\"},\"magicline\":{\"title\":\"قرار دادن بند در اینجا\"},\"maximize\":{\"maximize\":\"بیشنه کردن\",\"minimize\":\"کمینه کردن\"},\"pastetext\":{\"button\":\"چسباندن به عنوان متن ساده\",\"title\":\"چسباندن به عنوان متن ساده\"},\"pastefromword\":{\"confirmCleanup\":\"متنی که میخواهید بچسبانید به نظر میرسد که از Word کپی شده است. آیا میخواهید قبل از چسباندن آن را پاکسازی کنید؟\",\"error\":\"به دلیل بروز خطای داخلی امکان پاکسازی اطلاعات بازنشانی شده وجود ندارد.\",\"title\":\"چسباندن از Word\",\"toolbar\":\"چسباندن از Word\"},\"removeformat\":{\"toolbar\":\"برداشتن فرمت\"},\"sourcearea\":{\"toolbar\":\"منبع\"},\"specialchar\":{\"options\":\"گزینه‌های نویسه‌های ویژه\",\"title\":\"گزینش نویسه‌ی ویژه\",\"toolbar\":\"گنجاندن نویسه‌ی ویژه\"},\"scayt\":{\"btn_about\":\"درباره SCAYT\",\"btn_dictionaries\":\"دیکشنریها\",\"btn_disable\":\"غیرفعالسازی SCAYT\",\"btn_enable\":\"فعالسازی SCAYT\",\"btn_langs\":\"زبانها\",\"btn_options\":\"گزینهها\",\"text_title\":\"بررسی املای تایپ شما\"},\"stylescombo\":{\"label\":\"سبک\",\"panelTitle\":\"سبکهای قالببندی\",\"panelTitle1\":\"سبکهای بلوک\",\"panelTitle2\":\"سبکهای درونخطی\",\"panelTitle3\":\"سبکهای شیء\"},\"table\":{\"border\":\"اندازهٴ لبه\",\"caption\":\"عنوان\",\"cell\":{\"menu\":\"سلول\",\"insertBefore\":\"افزودن سلول قبل از\",\"insertAfter\":\"افزودن سلول بعد از\",\"deleteCell\":\"حذف سلولها\",\"merge\":\"ادغام سلولها\",\"mergeRight\":\"ادغام به راست\",\"mergeDown\":\"ادغام به پایین\",\"splitHorizontal\":\"جدا کردن افقی سلول\",\"splitVertical\":\"جدا کردن عمودی سلول\",\"title\":\"ویژگیهای سلول\",\"cellType\":\"نوع سلول\",\"rowSpan\":\"محدوده ردیفها\",\"colSpan\":\"محدوده ستونها\",\"wordWrap\":\"شکستن کلمه\",\"hAlign\":\"چینش افقی\",\"vAlign\":\"چینش عمودی\",\"alignBaseline\":\"خط مبنا\",\"bgColor\":\"رنگ زمینه\",\"borderColor\":\"رنگ خطوط\",\"data\":\"اطلاعات\",\"header\":\"سرنویس\",\"yes\":\"بله\",\"no\":\"خیر\",\"invalidWidth\":\"عرض سلول باید یک عدد باشد.\",\"invalidHeight\":\"ارتفاع سلول باید عدد باشد.\",\"invalidRowSpan\":\"مقدار محدوده ردیفها باید یک عدد باشد.\",\"invalidColSpan\":\"مقدار محدوده ستونها باید یک عدد باشد.\",\"chooseColor\":\"انتخاب\"},\"cellPad\":\"فاصلهٴ پرشده در سلول\",\"cellSpace\":\"فاصلهٴ میان سلولها\",\"column\":{\"menu\":\"ستون\",\"insertBefore\":\"افزودن ستون قبل از\",\"insertAfter\":\"افزودن ستون بعد از\",\"deleteColumn\":\"حذف ستونها\"},\"columns\":\"ستونها\",\"deleteTable\":\"پاک کردن جدول\",\"headers\":\"سرنویسها\",\"headersBoth\":\"هردو\",\"headersColumn\":\"اولین ستون\",\"headersNone\":\"هیچ\",\"headersRow\":\"اولین ردیف\",\"invalidBorder\":\"مقدار اندازه خطوط باید یک عدد باشد.\",\"invalidCellPadding\":\"بالشتک سلول باید یک عدد باشد.\",\"invalidCellSpacing\":\"مقدار فاصلهگذاری سلول باید یک عدد باشد.\",\"invalidCols\":\"تعداد ستونها باید یک عدد بزرگتر از 0 باشد.\",\"invalidHeight\":\"مقدار ارتفاع  جدول باید یک عدد باشد.\",\"invalidRows\":\"تعداد ردیفها باید یک عدد بزرگتر از 0 باشد.\",\"invalidWidth\":\"مقدار پهنای جدول باید یک عدد باشد.\",\"menu\":\"ویژگیهای جدول\",\"row\":{\"menu\":\"سطر\",\"insertBefore\":\"افزودن سطر قبل از\",\"insertAfter\":\"افزودن سطر بعد از\",\"deleteRow\":\"حذف سطرها\"},\"rows\":\"سطرها\",\"summary\":\"خلاصه\",\"title\":\"ویژگیهای جدول\",\"toolbar\":\"جدول\",\"widthPc\":\"درصد\",\"widthPx\":\"پیکسل\",\"widthUnit\":\"واحد پهنا\"},\"undo\":{\"redo\":\"بازچیدن\",\"undo\":\"واچیدن\"},\"wsc\":{\"btnIgnore\":\"چشمپوشی\",\"btnIgnoreAll\":\"چشمپوشی همه\",\"btnReplace\":\"جایگزینی\",\"btnReplaceAll\":\"جایگزینی همه\",\"btnUndo\":\"واچینش\",\"changeTo\":\"تغییر به\",\"errorLoading\":\"خطا در بارگیری برنامه خدمات میزبان: %s.\",\"ieSpellDownload\":\"بررسی کنندهٴ املا نصب نشده است. آیا میخواهید آن را هماکنون دریافت کنید؟\",\"manyChanges\":\"بررسی املا انجام شد. %1 واژه تغییر یافت\",\"noChanges\":\"بررسی املا انجام شد. هیچ واژهای تغییر نیافت\",\"noMispell\":\"بررسی املا انجام شد. هیچ غلط املائی یافت نشد\",\"noSuggestions\":\"- پیشنهادی نیست -\",\"notAvailable\":\"با عرض پوزش خدمات الان در دسترس نیستند.\",\"notInDic\":\"در واژه~نامه یافت نشد\",\"oneChange\":\"بررسی املا انجام شد. یک واژه تغییر یافت\",\"progress\":\"بررسی املا در حال انجام...\",\"title\":\"بررسی املا\",\"toolbar\":\"بررسی املا\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/fi.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['fi']={\"editor\":\"Rikastekstieditori\",\"editorPanel\":\"Rikastekstieditoripaneeli\",\"common\":{\"editorHelp\":\"Paina ALT 0 nähdäksesi ohjeen\",\"browseServer\":\"Selaa palvelinta\",\"url\":\"Osoite\",\"protocol\":\"Protokolla\",\"upload\":\"Lisää tiedosto\",\"uploadSubmit\":\"Lähetä palvelimelle\",\"image\":\"Kuva\",\"flash\":\"Flash-animaatio\",\"form\":\"Lomake\",\"checkbox\":\"Valintaruutu\",\"radio\":\"Radiopainike\",\"textField\":\"Tekstikenttä\",\"textarea\":\"Tekstilaatikko\",\"hiddenField\":\"Piilokenttä\",\"button\":\"Painike\",\"select\":\"Valintakenttä\",\"imageButton\":\"Kuvapainike\",\"notSet\":\"<ei asetettu>\",\"id\":\"Tunniste\",\"name\":\"Nimi\",\"langDir\":\"Kielen suunta\",\"langDirLtr\":\"Vasemmalta oikealle (LTR)\",\"langDirRtl\":\"Oikealta vasemmalle (RTL)\",\"langCode\":\"Kielikoodi\",\"longDescr\":\"Pitkän kuvauksen URL\",\"cssClass\":\"Tyyliluokat\",\"advisoryTitle\":\"Avustava otsikko\",\"cssStyle\":\"Tyyli\",\"ok\":\"OK\",\"cancel\":\"Peruuta\",\"close\":\"Sulje\",\"preview\":\"Esikatselu\",\"resize\":\"Raahaa muuttaaksesi kokoa\",\"generalTab\":\"Yleinen\",\"advancedTab\":\"Lisäominaisuudet\",\"validateNumberFailed\":\"Arvon pitää olla numero.\",\"confirmNewPage\":\"Kaikki tallentamattomat muutokset tähän sisältöön menetetään. Oletko varma, että haluat ladata uuden sivun?\",\"confirmCancel\":\"Jotkut asetuksista on muuttuneet. Oletko varma, että haluat sulkea valintaikkunan?\",\"options\":\"Asetukset\",\"target\":\"Kohde\",\"targetNew\":\"Uusi ikkuna (_blank)\",\"targetTop\":\"Päällimmäinen ikkuna (_top)\",\"targetSelf\":\"Sama ikkuna (_self)\",\"targetParent\":\"Ylemmän tason ikkuna (_parent)\",\"langDirLTR\":\"Vasemmalta oikealle (LTR)\",\"langDirRTL\":\"Oikealta vasemmalle (RTL)\",\"styles\":\"Tyyli\",\"cssClasses\":\"Tyylitiedoston luokat\",\"width\":\"Leveys\",\"height\":\"Korkeus\",\"align\":\"Kohdistus\",\"alignLeft\":\"Vasemmalle\",\"alignRight\":\"Oikealle\",\"alignCenter\":\"Keskelle\",\"alignJustify\":\"Tasaa molemmat reunat\",\"alignTop\":\"Ylös\",\"alignMiddle\":\"Keskelle\",\"alignBottom\":\"Alas\",\"alignNone\":\"Ei asetettu\",\"invalidValue\":\"Virheellinen arvo.\",\"invalidHeight\":\"Korkeuden täytyy olla numero.\",\"invalidWidth\":\"Leveyden täytyy olla numero.\",\"invalidCssLength\":\"Kentän \\\"%1\\\" arvon täytyy olla positiivinen luku CSS mittayksikön (px, %, in, cm, mm, em, ex, pt tai pc) kanssa tai ilman.\",\"invalidHtmlLength\":\"Kentän \\\"%1\\\" arvon täytyy olla positiivinen luku HTML mittayksikön (px tai %) kanssa tai ilman.\",\"invalidInlineStyle\":\"Tyylille annetun arvon täytyy koostua yhdestä tai useammasta \\\"nimi : arvo\\\" parista, jotka ovat eroteltuna toisistaan puolipisteillä.\",\"cssLengthTooltip\":\"Anna numeroarvo pikseleinä tai numeroarvo CSS mittayksikön kanssa (px, %, in, cm, mm, em, ex, pt, tai pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, ei saatavissa</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Kaikki oikeuden pidätetään.\",\"dlgTitle\":\"Tietoa CKEditorista\",\"help\":\"Katso ohjeet: $1.\",\"moreInfo\":\"Lisenssitiedot löytyvät kotisivuiltamme:\",\"title\":\"Tietoa CKEditorista\",\"userGuide\":\"CKEditorin käyttäjäopas\"},\"basicstyles\":{\"bold\":\"Lihavoitu\",\"italic\":\"Kursivoitu\",\"strike\":\"Yliviivattu\",\"subscript\":\"Alaindeksi\",\"superscript\":\"Yläindeksi\",\"underline\":\"Alleviivattu\"},\"blockquote\":{\"toolbar\":\"Lainaus\"},\"clipboard\":{\"copy\":\"Kopioi\",\"copyError\":\"Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).\",\"cut\":\"Leikkaa\",\"cutError\":\"Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).\",\"paste\":\"Liitä\",\"pasteArea\":\"Leikealue\",\"pasteMsg\":\"Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.\",\"securityMsg\":\"Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.\",\"title\":\"Liitä\"},\"contextmenu\":{\"options\":\"Pikavalikon ominaisuudet\"},\"button\":{\"selectedLabel\":\"%1 (Valittu)\"},\"toolbar\":{\"toolbarCollapse\":\"Kutista työkalupalkki\",\"toolbarExpand\":\"Laajenna työkalupalkki\",\"toolbarGroups\":{\"document\":\"Dokumentti\",\"clipboard\":\"Leikepöytä/Kumoa\",\"editing\":\"Muokkaus\",\"forms\":\"Lomakkeet\",\"basicstyles\":\"Perustyylit\",\"paragraph\":\"Kappale\",\"links\":\"Linkit\",\"insert\":\"Lisää\",\"styles\":\"Tyylit\",\"colors\":\"Värit\",\"tools\":\"Työkalut\"},\"toolbars\":\"Editorin työkalupalkit\"},\"elementspath\":{\"eleLabel\":\"Elementin polku\",\"eleTitle\":\"%1 elementti\"},\"format\":{\"label\":\"Muotoilu\",\"panelTitle\":\"Muotoilu\",\"tag_address\":\"Osoite\",\"tag_div\":\"Normaali (DIV)\",\"tag_h1\":\"Otsikko 1\",\"tag_h2\":\"Otsikko 2\",\"tag_h3\":\"Otsikko 3\",\"tag_h4\":\"Otsikko 4\",\"tag_h5\":\"Otsikko 5\",\"tag_h6\":\"Otsikko 6\",\"tag_p\":\"Normaali\",\"tag_pre\":\"Muotoiltu\"},\"horizontalrule\":{\"toolbar\":\"Lisää murtoviiva\"},\"image\":{\"alt\":\"Vaihtoehtoinen teksti\",\"border\":\"Kehys\",\"btnUpload\":\"Lähetä palvelimelle\",\"button2Img\":\"Haluatko muuntaa valitun kuvanäppäimen kuvaksi?\",\"hSpace\":\"Vaakatila\",\"img2Button\":\"Haluatko muuntaa valitun kuvan kuvanäppäimeksi?\",\"infoTab\":\"Kuvan tiedot\",\"linkTab\":\"Linkki\",\"lockRatio\":\"Lukitse suhteet\",\"menu\":\"Kuvan ominaisuudet\",\"resetSize\":\"Alkuperäinen koko\",\"title\":\"Kuvan ominaisuudet\",\"titleButton\":\"Kuvapainikkeen ominaisuudet\",\"upload\":\"Lisää kuva\",\"urlMissing\":\"Kuvan lähdeosoite puuttuu.\",\"vSpace\":\"Pystytila\",\"validateBorder\":\"Kehyksen täytyy olla kokonaisluku.\",\"validateHSpace\":\"HSpace-määrityksen täytyy olla kokonaisluku.\",\"validateVSpace\":\"VSpace-määrityksen täytyy olla kokonaisluku.\"},\"indent\":{\"indent\":\"Suurenna sisennystä\",\"outdent\":\"Pienennä sisennystä\"},\"fakeobjects\":{\"anchor\":\"Ankkuri\",\"flash\":\"Flash animaatio\",\"hiddenfield\":\"Piilokenttä\",\"iframe\":\"IFrame-kehys\",\"unknown\":\"Tuntematon objekti\"},\"link\":{\"acccessKey\":\"Pikanäppäin\",\"advanced\":\"Lisäominaisuudet\",\"advisoryContentType\":\"Avustava sisällön tyyppi\",\"advisoryTitle\":\"Avustava otsikko\",\"anchor\":{\"toolbar\":\"Lisää ankkuri/muokkaa ankkuria\",\"menu\":\"Ankkurin ominaisuudet\",\"title\":\"Ankkurin ominaisuudet\",\"name\":\"Nimi\",\"errorName\":\"Ankkurille on kirjoitettava nimi\",\"remove\":\"Poista ankkuri\"},\"anchorId\":\"Ankkurin ID:n mukaan\",\"anchorName\":\"Ankkurin nimen mukaan\",\"charset\":\"Linkitetty kirjaimisto\",\"cssClasses\":\"Tyyliluokat\",\"emailAddress\":\"Sähköpostiosoite\",\"emailBody\":\"Viesti\",\"emailSubject\":\"Aihe\",\"id\":\"Tunniste\",\"info\":\"Linkin tiedot\",\"langCode\":\"Kielen suunta\",\"langDir\":\"Kielen suunta\",\"langDirLTR\":\"Vasemmalta oikealle (LTR)\",\"langDirRTL\":\"Oikealta vasemmalle (RTL)\",\"menu\":\"Muokkaa linkkiä\",\"name\":\"Nimi\",\"noAnchors\":\"(Ei ankkureita tässä dokumentissa)\",\"noEmail\":\"Kirjoita sähköpostiosoite\",\"noUrl\":\"Linkille on kirjoitettava URL\",\"other\":\"<muu>\",\"popupDependent\":\"Riippuva (Netscape)\",\"popupFeatures\":\"Popup ikkunan ominaisuudet\",\"popupFullScreen\":\"Täysi ikkuna (IE)\",\"popupLeft\":\"Vasemmalta (px)\",\"popupLocationBar\":\"Osoiterivi\",\"popupMenuBar\":\"Valikkorivi\",\"popupResizable\":\"Venytettävä\",\"popupScrollBars\":\"Vierityspalkit\",\"popupStatusBar\":\"Tilarivi\",\"popupToolbar\":\"Vakiopainikkeet\",\"popupTop\":\"Ylhäältä (px)\",\"rel\":\"Suhde\",\"selectAnchor\":\"Valitse ankkuri\",\"styles\":\"Tyyli\",\"tabIndex\":\"Tabulaattori indeksi\",\"target\":\"Kohde\",\"targetFrame\":\"<kehys>\",\"targetFrameName\":\"Kohdekehyksen nimi\",\"targetPopup\":\"<popup ikkuna>\",\"targetPopupName\":\"Popup ikkunan nimi\",\"title\":\"Linkki\",\"toAnchor\":\"Ankkuri tässä sivussa\",\"toEmail\":\"Sähköposti\",\"toUrl\":\"Osoite\",\"toolbar\":\"Lisää linkki/muokkaa linkkiä\",\"type\":\"Linkkityyppi\",\"unlink\":\"Poista linkki\",\"upload\":\"Lisää tiedosto\"},\"list\":{\"bulletedlist\":\"Luettelomerkit\",\"numberedlist\":\"Numerointi\"},\"magicline\":{\"title\":\"Lisää kappale tähän.\"},\"maximize\":{\"maximize\":\"Suurenna\",\"minimize\":\"Pienennä\"},\"pastetext\":{\"button\":\"Liitä tekstinä\",\"title\":\"Liitä tekstinä\"},\"pastefromword\":{\"confirmCleanup\":\"Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)\",\"error\":\"Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia\",\"title\":\"Liitä Word-dokumentista\",\"toolbar\":\"Liitä Word-dokumentista\"},\"removeformat\":{\"toolbar\":\"Poista muotoilu\"},\"sourcearea\":{\"toolbar\":\"Koodi\"},\"specialchar\":{\"options\":\"Erikoismerkin ominaisuudet\",\"title\":\"Valitse erikoismerkki\",\"toolbar\":\"Lisää erikoismerkki\"},\"scayt\":{\"btn_about\":\"Tietoja oikoluvusta kirjoitetaessa\",\"btn_dictionaries\":\"Sanakirjat\",\"btn_disable\":\"Poista käytöstä oikoluku kirjoitetaessa\",\"btn_enable\":\"Ota käyttöön oikoluku kirjoitettaessa\",\"btn_langs\":\"Kielet\",\"btn_options\":\"Asetukset\",\"text_title\":\"Oikolue kirjoitettaessa\"},\"stylescombo\":{\"label\":\"Tyyli\",\"panelTitle\":\"Muotoilujen tyylit\",\"panelTitle1\":\"Lohkojen tyylit\",\"panelTitle2\":\"Rivinsisäiset tyylit\",\"panelTitle3\":\"Objektien tyylit\"},\"table\":{\"border\":\"Rajan paksuus\",\"caption\":\"Otsikko\",\"cell\":{\"menu\":\"Solu\",\"insertBefore\":\"Lisää solu eteen\",\"insertAfter\":\"Lisää solu perään\",\"deleteCell\":\"Poista solut\",\"merge\":\"Yhdistä solut\",\"mergeRight\":\"Yhdistä oikealla olevan kanssa\",\"mergeDown\":\"Yhdistä alla olevan kanssa\",\"splitHorizontal\":\"Jaa solu vaakasuunnassa\",\"splitVertical\":\"Jaa solu pystysuunnassa\",\"title\":\"Solun ominaisuudet\",\"cellType\":\"Solun tyyppi\",\"rowSpan\":\"Rivin jatkuvuus\",\"colSpan\":\"Solun jatkuvuus\",\"wordWrap\":\"Rivitys\",\"hAlign\":\"Horisontaali kohdistus\",\"vAlign\":\"Vertikaali kohdistus\",\"alignBaseline\":\"Alas (teksti)\",\"bgColor\":\"Taustan väri\",\"borderColor\":\"Reunan väri\",\"data\":\"Data\",\"header\":\"Ylätunniste\",\"yes\":\"Kyllä\",\"no\":\"Ei\",\"invalidWidth\":\"Solun leveyden täytyy olla numero.\",\"invalidHeight\":\"Solun korkeuden täytyy olla numero.\",\"invalidRowSpan\":\"Rivin jatkuvuuden täytyy olla kokonaisluku.\",\"invalidColSpan\":\"Solun jatkuvuuden täytyy olla kokonaisluku.\",\"chooseColor\":\"Valitse\"},\"cellPad\":\"Solujen sisennys\",\"cellSpace\":\"Solujen väli\",\"column\":{\"menu\":\"Sarake\",\"insertBefore\":\"Lisää sarake vasemmalle\",\"insertAfter\":\"Lisää sarake oikealle\",\"deleteColumn\":\"Poista sarakkeet\"},\"columns\":\"Sarakkeet\",\"deleteTable\":\"Poista taulu\",\"headers\":\"Ylätunnisteet\",\"headersBoth\":\"Molemmat\",\"headersColumn\":\"Ensimmäinen sarake\",\"headersNone\":\"Ei\",\"headersRow\":\"Ensimmäinen rivi\",\"invalidBorder\":\"Reunan koon täytyy olla numero.\",\"invalidCellPadding\":\"Solujen sisennyksen täytyy olla numero.\",\"invalidCellSpacing\":\"Solujen välin täytyy olla numero.\",\"invalidCols\":\"Sarakkeiden määrän täytyy olla suurempi kuin 0.\",\"invalidHeight\":\"Taulun korkeuden täytyy olla numero.\",\"invalidRows\":\"Rivien määrän täytyy olla suurempi kuin 0.\",\"invalidWidth\":\"Taulun leveyden täytyy olla numero.\",\"menu\":\"Taulun ominaisuudet\",\"row\":{\"menu\":\"Rivi\",\"insertBefore\":\"Lisää rivi yläpuolelle\",\"insertAfter\":\"Lisää rivi alapuolelle\",\"deleteRow\":\"Poista rivit\"},\"rows\":\"Rivit\",\"summary\":\"Yhteenveto\",\"title\":\"Taulun ominaisuudet\",\"toolbar\":\"Taulu\",\"widthPc\":\"prosenttia\",\"widthPx\":\"pikseliä\",\"widthUnit\":\"leveysyksikkö\"},\"undo\":{\"redo\":\"Toista\",\"undo\":\"Kumoa\"},\"wsc\":{\"btnIgnore\":\"Jätä huomioimatta\",\"btnIgnoreAll\":\"Jätä kaikki huomioimatta\",\"btnReplace\":\"Korvaa\",\"btnReplaceAll\":\"Korvaa kaikki\",\"btnUndo\":\"Kumoa\",\"changeTo\":\"Vaihda\",\"errorLoading\":\"Virhe ladattaessa oikolukupalvelua isännältä: %s.\",\"ieSpellDownload\":\"Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?\",\"manyChanges\":\"Tarkistus valmis: %1 sanaa muutettiin\",\"noChanges\":\"Tarkistus valmis: Yhtään sanaa ei muutettu\",\"noMispell\":\"Tarkistus valmis: Ei virheitä\",\"noSuggestions\":\"Ei ehdotuksia\",\"notAvailable\":\"Valitettavasti oikoluku ei ole käytössä tällä hetkellä.\",\"notInDic\":\"Ei sanakirjassa\",\"oneChange\":\"Tarkistus valmis: Yksi sana muutettiin\",\"progress\":\"Tarkistus käynnissä...\",\"title\":\"Oikoluku\",\"toolbar\":\"Tarkista oikeinkirjoitus\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/fo.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['fo']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Trýst ALT og 0 fyri vegleiðing\",\"browseServer\":\"Ambætarakagi\",\"url\":\"URL\",\"protocol\":\"Protokoll\",\"upload\":\"Send til ambætaran\",\"uploadSubmit\":\"Send til ambætaran\",\"image\":\"Myndir\",\"flash\":\"Flash\",\"form\":\"Formur\",\"checkbox\":\"Flugubein\",\"radio\":\"Radioknøttur\",\"textField\":\"Tekstteigur\",\"textarea\":\"Tekstumráði\",\"hiddenField\":\"Fjaldur teigur\",\"button\":\"Knøttur\",\"select\":\"Valskrá\",\"imageButton\":\"Myndaknøttur\",\"notSet\":\"<ikki sett>\",\"id\":\"Id\",\"name\":\"Navn\",\"langDir\":\"Tekstkós\",\"langDirLtr\":\"Frá vinstru til høgru (LTR)\",\"langDirRtl\":\"Frá høgru til vinstru (RTL)\",\"langCode\":\"Málkoda\",\"longDescr\":\"Víðkað URL frágreiðing\",\"cssClass\":\"Typografi klassar\",\"advisoryTitle\":\"Vegleiðandi heiti\",\"cssStyle\":\"Typografi\",\"ok\":\"Góðkent\",\"cancel\":\"Avlýs\",\"close\":\"Lat aftur\",\"preview\":\"Frumsýn\",\"resize\":\"Drag fyri at broyta stødd\",\"generalTab\":\"Generelt\",\"advancedTab\":\"Fjølbroytt\",\"validateNumberFailed\":\"Hetta er ikki eitt tal.\",\"confirmNewPage\":\"Allar ikki goymdar broytingar í hesum innihaldið hvørva. Skal nýggj síða lesast kortini?\",\"confirmCancel\":\"Nakrir valmøguleikar eru broyttir. Ert tú vísur í, at dialogurin skal latast aftur?\",\"options\":\"Options\",\"target\":\"Target\",\"targetNew\":\"Nýtt vindeyga (_blank)\",\"targetTop\":\"Vindeyga ovast (_top)\",\"targetSelf\":\"Sama vindeyga (_self)\",\"targetParent\":\"Upphavligt vindeyga (_parent)\",\"langDirLTR\":\"Frá vinstru til høgru (LTR)\",\"langDirRTL\":\"Frá høgru til vinstru (RTL)\",\"styles\":\"Style\",\"cssClasses\":\"Stylesheet Classes\",\"width\":\"Breidd\",\"height\":\"Hædd\",\"align\":\"Justering\",\"alignLeft\":\"Vinstra\",\"alignRight\":\"Høgra\",\"alignCenter\":\"Miðsett\",\"alignJustify\":\"Javnir tekstkantar\",\"alignTop\":\"Ovast\",\"alignMiddle\":\"Miðja\",\"alignBottom\":\"Botnur\",\"alignNone\":\"Eingin\",\"invalidValue\":\"Invalid value.\",\"invalidHeight\":\"Hædd má vera eitt tal.\",\"invalidWidth\":\"Breidd má vera eitt tal.\",\"invalidCssLength\":\"Virðið sett í \\\"%1\\\" feltið má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px, %, in, cm, mm, em, ex, pt, ella pc).\",\"invalidHtmlLength\":\"Virðið sett í \\\"%1\\\" feltiðield má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px ella %).\",\"invalidInlineStyle\":\"Virði specifiserað fyri inline style má hava eitt ella fleiri pør (tuples) skrivað sum \\\"name : value\\\", hvørt parið sundurskilt við semi-colon.\",\"cssLengthTooltip\":\"Skriva eitt tal fyri eitt virði í pixels ella eitt tal við gyldigum CSS eind (px, %, in, cm, mm, em, ex, pt, ella pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, ikki tøkt</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"Um CKEditor\",\"help\":\"Kekka $1 fyri hjálp.\",\"moreInfo\":\"Licens upplýsingar finnast á heimasíðu okkara:\",\"title\":\"Um CKEditor\",\"userGuide\":\"CKEditor Brúkaravegleiðing\"},\"basicstyles\":{\"bold\":\"Feit skrift\",\"italic\":\"Skráskrift\",\"strike\":\"Yvirstrikað\",\"subscript\":\"Lækkað skrift\",\"superscript\":\"Hækkað skrift\",\"underline\":\"Undirstrikað\"},\"blockquote\":{\"toolbar\":\"Blockquote\"},\"clipboard\":{\"copy\":\"Avrita\",\"copyError\":\"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (Ctrl/Cmd+C).\",\"cut\":\"Kvett\",\"cutError\":\"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (Ctrl/Cmd+X).\",\"paste\":\"Innrita\",\"pasteArea\":\"Avritingarumráði\",\"pasteMsg\":\"Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>Ctrl/Cmd+V</strong>) og klikk á <strong>Góðtak</strong>.\",\"securityMsg\":\"Trygdaruppseting alnótskagans forðar tekstviðgeranum í beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur í hesum rútinum.\",\"title\":\"Innrita\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Lat Toolbar aftur\",\"toolbarExpand\":\"Vís Toolbar\",\"toolbarGroups\":{\"document\":\"Dokument\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editering\",\"forms\":\"Formar\",\"basicstyles\":\"Grundleggjandi Styles\",\"paragraph\":\"Reglubrot\",\"links\":\"Leinkjur\",\"insert\":\"Set inn\",\"styles\":\"Styles\",\"colors\":\"Litir\",\"tools\":\"Tól\"},\"toolbars\":\"Editor toolbars\"},\"elementspath\":{\"eleLabel\":\"Slóð til elementir\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Skriftsnið\",\"panelTitle\":\"Skriftsnið\",\"tag_address\":\"Adressa\",\"tag_div\":\"Vanligt (DIV)\",\"tag_h1\":\"Yvirskrift 1\",\"tag_h2\":\"Yvirskrift 2\",\"tag_h3\":\"Yvirskrift 3\",\"tag_h4\":\"Yvirskrift 4\",\"tag_h5\":\"Yvirskrift 5\",\"tag_h6\":\"Yvirskrift 6\",\"tag_p\":\"Vanligt\",\"tag_pre\":\"Sniðgivið\"},\"horizontalrule\":{\"toolbar\":\"Ger vatnrætta linju\"},\"image\":{\"alt\":\"Alternativur tekstur\",\"border\":\"Bordi\",\"btnUpload\":\"Send til ambætaran\",\"button2Img\":\"Skal valdi myndaknøttur gerast til vanliga mynd?\",\"hSpace\":\"Høgri breddi\",\"img2Button\":\"Skal valda mynd gerast til myndaknøtt?\",\"infoTab\":\"Myndaupplýsingar\",\"linkTab\":\"Tilknýti\",\"lockRatio\":\"Læs lutfallið\",\"menu\":\"Myndaeginleikar\",\"resetSize\":\"Upprunastødd\",\"title\":\"Myndaeginleikar\",\"titleButton\":\"Eginleikar fyri myndaknøtt\",\"upload\":\"Send\",\"urlMissing\":\"URL til mynd manglar.\",\"vSpace\":\"Vinstri breddi\",\"validateBorder\":\"Bordi má vera eitt heiltal.\",\"validateHSpace\":\"HSpace má vera eitt heiltal.\",\"validateVSpace\":\"VSpace má vera eitt heiltal.\"},\"indent\":{\"indent\":\"Økja reglubrotarinntriv\",\"outdent\":\"Minka reglubrotarinntriv\"},\"fakeobjects\":{\"anchor\":\"Anchor\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"Fjaldur teigur\",\"iframe\":\"IFrame\",\"unknown\":\"Ókent Object\"},\"link\":{\"acccessKey\":\"Snarvegisknöttur\",\"advanced\":\"Fjølbroytt\",\"advisoryContentType\":\"Vegleiðandi innihaldsslag\",\"advisoryTitle\":\"Vegleiðandi heiti\",\"anchor\":{\"toolbar\":\"Ger/broyt marknastein\",\"menu\":\"Eginleikar fyri marknastein\",\"title\":\"Eginleikar fyri marknastein\",\"name\":\"Heiti marknasteinsins\",\"errorName\":\"Vinarliga rita marknasteinsins heiti\",\"remove\":\"Strika marknastein\"},\"anchorId\":\"Eftir element Id\",\"anchorName\":\"Eftir navni á marknasteini\",\"charset\":\"Atknýtt teknsett\",\"cssClasses\":\"Typografi klassar\",\"emailAddress\":\"Teldupost-adressa\",\"emailBody\":\"Breyðtekstur\",\"emailSubject\":\"Evni\",\"id\":\"Id\",\"info\":\"Tilknýtis upplýsingar\",\"langCode\":\"Tekstkós\",\"langDir\":\"Tekstkós\",\"langDirLTR\":\"Frá vinstru til høgru (LTR)\",\"langDirRTL\":\"Frá høgru til vinstru (RTL)\",\"menu\":\"Broyt tilknýti\",\"name\":\"Navn\",\"noAnchors\":\"(Eingir marknasteinar eru í hesum dokumentið)\",\"noEmail\":\"Vinarliga skriva teldupost-adressu\",\"noUrl\":\"Vinarliga skriva tilknýti (URL)\",\"other\":\"<annað>\",\"popupDependent\":\"Bundið (Netscape)\",\"popupFeatures\":\"Popup vindeygans víðkaðu eginleikar\",\"popupFullScreen\":\"Fullur skermur (IE)\",\"popupLeft\":\"Frástøða frá vinstru\",\"popupLocationBar\":\"Adressulinja\",\"popupMenuBar\":\"Skrábjálki\",\"popupResizable\":\"Stødd kann broytast\",\"popupScrollBars\":\"Rullibjálki\",\"popupStatusBar\":\"Støðufrágreiðingarbjálki\",\"popupToolbar\":\"Amboðsbjálki\",\"popupTop\":\"Frástøða frá íerva\",\"rel\":\"Relatión\",\"selectAnchor\":\"Vel ein marknastein\",\"styles\":\"Typografi\",\"tabIndex\":\"Tabulator indeks\",\"target\":\"Target\",\"targetFrame\":\"<ramma>\",\"targetFrameName\":\"Vís navn vindeygans\",\"targetPopup\":\"<popup vindeyga>\",\"targetPopupName\":\"Popup vindeygans navn\",\"title\":\"Tilknýti\",\"toAnchor\":\"Tilknýti til marknastein í tekstinum\",\"toEmail\":\"Teldupostur\",\"toUrl\":\"URL\",\"toolbar\":\"Ger/broyt tilknýti\",\"type\":\"Tilknýtisslag\",\"unlink\":\"Strika tilknýti\",\"upload\":\"Send til ambætaran\"},\"list\":{\"bulletedlist\":\"Punktmerktur listi\",\"numberedlist\":\"Talmerktur listi\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Maksimera\",\"minimize\":\"Minimera\"},\"pastetext\":{\"button\":\"Innrita som reinan tekst\",\"title\":\"Innrita som reinan tekst\"},\"pastefromword\":{\"confirmCleanup\":\"Teksturin, tú roynir at seta inn, sýnist at stava frá Word. Skal teksturin reinsast fyrst?\",\"error\":\"Tað eydnaðist ikki at reinsa tekstin vegna ein internan feil\",\"title\":\"Innrita frá Word\",\"toolbar\":\"Innrita frá Word\"},\"removeformat\":{\"toolbar\":\"Strika sniðgeving\"},\"sourcearea\":{\"toolbar\":\"Kelda\"},\"specialchar\":{\"options\":\"Møguleikar við serteknum\",\"title\":\"Vel sertekn\",\"toolbar\":\"Set inn sertekn\"},\"scayt\":{\"btn_about\":\"Um SCAYT\",\"btn_dictionaries\":\"Orðabøkur\",\"btn_disable\":\"Nokta SCAYT\",\"btn_enable\":\"Loyv SCAYT\",\"btn_langs\":\"Tungumál\",\"btn_options\":\"Uppseting\",\"text_title\":\"Kanna stavseting, meðan tú skrivar\"},\"stylescombo\":{\"label\":\"Typografi\",\"panelTitle\":\"Formatterings stílir\",\"panelTitle1\":\"Blokk stílir\",\"panelTitle2\":\"Inline stílir\",\"panelTitle3\":\"Object stílir\"},\"table\":{\"border\":\"Bordabreidd\",\"caption\":\"Tabellfrágreiðing\",\"cell\":{\"menu\":\"Meski\",\"insertBefore\":\"Set meska inn áðrenn\",\"insertAfter\":\"Set meska inn aftaná\",\"deleteCell\":\"Strika meskar\",\"merge\":\"Flætta meskar\",\"mergeRight\":\"Flætta meskar til høgru\",\"mergeDown\":\"Flætta saman\",\"splitHorizontal\":\"Kloyv meska vatnrætt\",\"splitVertical\":\"Kloyv meska loddrætt\",\"title\":\"Mesku eginleikar\",\"cellType\":\"Mesku slag\",\"rowSpan\":\"Ræð spenni\",\"colSpan\":\"Kolonnu spenni\",\"wordWrap\":\"Orðkloyving\",\"hAlign\":\"Horisontal plasering\",\"vAlign\":\"Loddrøtt plasering\",\"alignBaseline\":\"Basislinja\",\"bgColor\":\"Bakgrundslitur\",\"borderColor\":\"Bordalitur\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Ja\",\"no\":\"Nei\",\"invalidWidth\":\"Meskubreidd má vera eitt tal.\",\"invalidHeight\":\"Meskuhædd má vera eitt tal.\",\"invalidRowSpan\":\"Raðspennið má vera eitt heiltal.\",\"invalidColSpan\":\"Kolonnuspennið má vera eitt heiltal.\",\"chooseColor\":\"Vel\"},\"cellPad\":\"Meskubreddi\",\"cellSpace\":\"Fjarstøða millum meskar\",\"column\":{\"menu\":\"Kolonna\",\"insertBefore\":\"Set kolonnu inn áðrenn\",\"insertAfter\":\"Set kolonnu inn aftaná\",\"deleteColumn\":\"Strika kolonnur\"},\"columns\":\"Kolonnur\",\"deleteTable\":\"Strika tabell\",\"headers\":\"Yvirskriftir\",\"headersBoth\":\"Báðir\",\"headersColumn\":\"Fyrsta kolonna\",\"headersNone\":\"Eingin\",\"headersRow\":\"Fyrsta rað\",\"invalidBorder\":\"Borda-stødd má vera eitt tal.\",\"invalidCellPadding\":\"Cell padding má vera eitt tal.\",\"invalidCellSpacing\":\"Cell spacing má vera eitt tal.\",\"invalidCols\":\"Talið av kolonnum má vera eitt tal størri enn 0.\",\"invalidHeight\":\"Tabell-hædd má vera eitt tal.\",\"invalidRows\":\"Talið av røðum má vera eitt tal størri enn 0.\",\"invalidWidth\":\"Tabell-breidd má vera eitt tal.\",\"menu\":\"Eginleikar fyri tabell\",\"row\":{\"menu\":\"Rað\",\"insertBefore\":\"Set rað inn áðrenn\",\"insertAfter\":\"Set rað inn aftaná\",\"deleteRow\":\"Strika røðir\"},\"rows\":\"Røðir\",\"summary\":\"Samandráttur\",\"title\":\"Eginleikar fyri tabell\",\"toolbar\":\"Tabell\",\"widthPc\":\"prosent\",\"widthPx\":\"pixels\",\"widthUnit\":\"breiddar unit\"},\"undo\":{\"redo\":\"Vend aftur\",\"undo\":\"Angra\"},\"wsc\":{\"btnIgnore\":\"Forfjóna\",\"btnIgnoreAll\":\"Forfjóna alt\",\"btnReplace\":\"Yvirskriva\",\"btnReplaceAll\":\"Yvirskriva alt\",\"btnUndo\":\"Angra\",\"changeTo\":\"Broyt til\",\"errorLoading\":\"Feilur við innlesing av application service host: %s.\",\"ieSpellDownload\":\"Rættstavarin er ikki tøkur í tekstviðgeranum. Vilt tú heinta hann nú?\",\"manyChanges\":\"Rættstavarin liðugur: %1 orð broytt\",\"noChanges\":\"Rættstavarin liðugur: Einki orð varð broytt\",\"noMispell\":\"Rættstavarin liðugur: Eingin feilur funnin\",\"noSuggestions\":\"- Einki uppskot -\",\"notAvailable\":\"Tíverri, ikki tøkt í løtuni.\",\"notInDic\":\"Finst ikki í orðabókini\",\"oneChange\":\"Rættstavarin liðugur: Eitt orð er broytt\",\"progress\":\"Rættstavarin arbeiðir...\",\"title\":\"Kanna stavseting\",\"toolbar\":\"Kanna stavseting\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/fr-ca.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['fr-ca']={\"editor\":\"Éditeur de texte enrichi\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Appuyez sur 0 pour de l'aide\",\"browseServer\":\"Parcourir le serveur\",\"url\":\"URL\",\"protocol\":\"Protocole\",\"upload\":\"Envoyer\",\"uploadSubmit\":\"Envoyer au serveur\",\"image\":\"Image\",\"flash\":\"Animation Flash\",\"form\":\"Formulaire\",\"checkbox\":\"Case à cocher\",\"radio\":\"Bouton radio\",\"textField\":\"Champ texte\",\"textarea\":\"Zone de texte\",\"hiddenField\":\"Champ caché\",\"button\":\"Bouton\",\"select\":\"Liste déroulante\",\"imageButton\":\"Bouton image\",\"notSet\":\"<Par défaut>\",\"id\":\"Id\",\"name\":\"Nom\",\"langDir\":\"Sens d'écriture\",\"langDirLtr\":\"De gauche à droite (LTR)\",\"langDirRtl\":\"De droite à gauche (RTL)\",\"langCode\":\"Code langue\",\"longDescr\":\"URL de description longue\",\"cssClass\":\"Classes CSS\",\"advisoryTitle\":\"Titre\",\"cssStyle\":\"Style\",\"ok\":\"OK\",\"cancel\":\"Annuler\",\"close\":\"Fermer\",\"preview\":\"Aperçu\",\"resize\":\"Redimensionner\",\"generalTab\":\"Général\",\"advancedTab\":\"Avancé\",\"validateNumberFailed\":\"Cette valeur n'est pas un nombre.\",\"confirmNewPage\":\"Les changements non sauvegardés seront perdus. Êtes-vous certain de vouloir charger une nouvelle page?\",\"confirmCancel\":\"Certaines options ont été modifiées.  Êtes-vous certain de vouloir fermer?\",\"options\":\"Options\",\"target\":\"Cible\",\"targetNew\":\"Nouvelle fenêtre (_blank)\",\"targetTop\":\"Fenêtre supérieur (_top)\",\"targetSelf\":\"Cette fenêtre (_self)\",\"targetParent\":\"Fenêtre parent (_parent)\",\"langDirLTR\":\"De gauche à droite (LTR)\",\"langDirRTL\":\"De droite à gauche (RTL)\",\"styles\":\"Style\",\"cssClasses\":\"Classe CSS\",\"width\":\"Largeur\",\"height\":\"Hauteur\",\"align\":\"Alignement\",\"alignLeft\":\"Gauche\",\"alignRight\":\"Droite\",\"alignCenter\":\"Centré\",\"alignJustify\":\"Justifié\",\"alignTop\":\"Haut\",\"alignMiddle\":\"Milieu\",\"alignBottom\":\"Bas\",\"alignNone\":\"None\",\"invalidValue\":\"Valeur invalide.\",\"invalidHeight\":\"La hauteur doit être un nombre.\",\"invalidWidth\":\"La largeur doit être un nombre.\",\"invalidCssLength\":\"La valeur spécifiée pour le champ \\\"%1\\\" doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).\",\"invalidHtmlLength\":\"La valeur spécifiée pour le champ \\\"%1\\\" doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).\",\"invalidInlineStyle\":\"La valeur spécifiée pour le style intégré doit être composée d'un ou plusieurs couples de valeur au format \\\"nom : valeur\\\", separés par des points-virgules.\",\"cssLengthTooltip\":\"Entrer un nombre pour la valeur en pixel ou un nombre avec une unité CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, indisponible</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Tous droits réservés.\",\"dlgTitle\":\"À propos de CKEditor\",\"help\":\"Consulter $1 pour l'aide.\",\"moreInfo\":\"Pour les informations de licence, consulter notre site internet:\",\"title\":\"À propos de CKEditor\",\"userGuide\":\"Guide utilisateur de CKEditor\"},\"basicstyles\":{\"bold\":\"Gras\",\"italic\":\"Italique\",\"strike\":\"Barré\",\"subscript\":\"Indice\",\"superscript\":\"Exposant\",\"underline\":\"Souligné\"},\"blockquote\":{\"toolbar\":\"Citation\"},\"clipboard\":{\"copy\":\"Copier\",\"copyError\":\"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+C).\",\"cut\":\"Couper\",\"cutError\":\"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+X).\",\"paste\":\"Coller\",\"pasteArea\":\"Coller la zone\",\"pasteMsg\":\"Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl/Cmd+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.\",\"securityMsg\":\"A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.\",\"title\":\"Coller\"},\"contextmenu\":{\"options\":\"Options du menu contextuel\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Enrouler la barre d'outils\",\"toolbarExpand\":\"Dérouler la barre d'outils\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Presse papier/Annuler\",\"editing\":\"Édition\",\"forms\":\"Formulaires\",\"basicstyles\":\"Styles de base\",\"paragraph\":\"Paragraphe\",\"links\":\"Liens\",\"insert\":\"Insérer\",\"styles\":\"Styles\",\"colors\":\"Couleurs\",\"tools\":\"Outils\"},\"toolbars\":\"Barre d'outils de l'éditeur\"},\"elementspath\":{\"eleLabel\":\"Chemin d'éléments\",\"eleTitle\":\"element %1\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Format de paragraphe\",\"tag_address\":\"Adresse\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"En-tête 1\",\"tag_h2\":\"En-tête 2\",\"tag_h3\":\"En-tête 3\",\"tag_h4\":\"En-tête 4\",\"tag_h5\":\"En-tête 5\",\"tag_h6\":\"En-tête 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formaté\"},\"horizontalrule\":{\"toolbar\":\"Insérer un séparateur horizontale\"},\"image\":{\"alt\":\"Texte alternatif\",\"border\":\"Bordure\",\"btnUpload\":\"Envoyer sur le serveur\",\"button2Img\":\"Désirez-vous transformer l'image sélectionnée en image simple?\",\"hSpace\":\"Espacement horizontal\",\"img2Button\":\"Désirez-vous transformer l'image sélectionnée en bouton image?\",\"infoTab\":\"Informations sur l'image\",\"linkTab\":\"Lien\",\"lockRatio\":\"Verrouiller les proportions\",\"menu\":\"Propriétés de l'image\",\"resetSize\":\"Taille originale\",\"title\":\"Propriétés de l'image\",\"titleButton\":\"Propriétés du bouton image\",\"upload\":\"Téléverser\",\"urlMissing\":\"L'URL de la source de l'image est manquant.\",\"vSpace\":\"Espacement vertical\",\"validateBorder\":\"La bordure doit être un entier.\",\"validateHSpace\":\"L'espacement horizontal doit être un entier.\",\"validateVSpace\":\"L'espacement vertical doit être un entier.\"},\"indent\":{\"indent\":\"Augmenter le retrait\",\"outdent\":\"Diminuer le retrait\"},\"fakeobjects\":{\"anchor\":\"Ancre\",\"flash\":\"Animation Flash\",\"hiddenfield\":\"Champ caché\",\"iframe\":\"IFrame\",\"unknown\":\"Objet inconnu\"},\"link\":{\"acccessKey\":\"Touche d'accessibilité\",\"advanced\":\"Avancé\",\"advisoryContentType\":\"Type de contenu\",\"advisoryTitle\":\"Description\",\"anchor\":{\"toolbar\":\"Ancre\",\"menu\":\"Modifier l'ancre\",\"title\":\"Propriétés de l'ancre\",\"name\":\"Nom de l'ancre\",\"errorName\":\"Veuillez saisir le nom de l'ancre\",\"remove\":\"Supprimer l'ancre\"},\"anchorId\":\"Par ID\",\"anchorName\":\"Par nom\",\"charset\":\"Encodage de la cible\",\"cssClasses\":\"Classes CSS\",\"emailAddress\":\"Courriel\",\"emailBody\":\"Corps du message\",\"emailSubject\":\"Objet du message\",\"id\":\"ID\",\"info\":\"Informations sur le lien\",\"langCode\":\"Code de langue\",\"langDir\":\"Sens d'écriture\",\"langDirLTR\":\"De gauche à droite (LTR)\",\"langDirRTL\":\"De droite à gauche (RTL)\",\"menu\":\"Modifier le lien\",\"name\":\"Nom\",\"noAnchors\":\"(Pas d'ancre disponible dans le document)\",\"noEmail\":\"Veuillez saisir le courriel\",\"noUrl\":\"Veuillez saisir l'URL\",\"other\":\"<autre>\",\"popupDependent\":\"Dépendante (Netscape)\",\"popupFeatures\":\"Caractéristiques de la fenêtre popup\",\"popupFullScreen\":\"Plein écran (IE)\",\"popupLeft\":\"Position de la gauche\",\"popupLocationBar\":\"Barre d'adresse\",\"popupMenuBar\":\"Barre de menu\",\"popupResizable\":\"Redimensionnable\",\"popupScrollBars\":\"Barres de défilement\",\"popupStatusBar\":\"Barre d'état\",\"popupToolbar\":\"Barre d'outils\",\"popupTop\":\"Position à partir du haut\",\"rel\":\"Relation\",\"selectAnchor\":\"Sélectionner une ancre\",\"styles\":\"Style\",\"tabIndex\":\"Ordre de tabulation\",\"target\":\"Destination\",\"targetFrame\":\"<Cadre>\",\"targetFrameName\":\"Nom du cadre de destination\",\"targetPopup\":\"<fenêtre popup>\",\"targetPopupName\":\"Nom de la fenêtre popup\",\"title\":\"Lien\",\"toAnchor\":\"Ancre dans cette page\",\"toEmail\":\"Courriel\",\"toUrl\":\"URL\",\"toolbar\":\"Lien\",\"type\":\"Type de lien\",\"unlink\":\"Supprimer le lien\",\"upload\":\"Téléverser\"},\"list\":{\"bulletedlist\":\"Liste à puces\",\"numberedlist\":\"Liste numérotée\"},\"magicline\":{\"title\":\"Insérer le paragraphe ici\"},\"maximize\":{\"maximize\":\"Maximizer\",\"minimize\":\"Minimizer\"},\"pastetext\":{\"button\":\"Coller comme texte\",\"title\":\"Coller comme texte\"},\"pastefromword\":{\"confirmCleanup\":\"Le texte que vous tentez de coller semble provenir de Word.  Désirez vous le nettoyer avant de coller?\",\"error\":\"Il n'a pas été possible de nettoyer les données collées du à une erreur interne\",\"title\":\"Coller de Word\",\"toolbar\":\"Coller de Word\"},\"removeformat\":{\"toolbar\":\"Supprimer le formatage\"},\"sourcearea\":{\"toolbar\":\"Source\"},\"specialchar\":{\"options\":\"Option des caractères spéciaux\",\"title\":\"Sélectionner un caractère spécial\",\"toolbar\":\"Insérer un caractère spécial\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Styles\",\"panelTitle\":\"Styles de formattage\",\"panelTitle1\":\"Styles de block\",\"panelTitle2\":\"Styles en ligne\",\"panelTitle3\":\"Styles d'objet\"},\"table\":{\"border\":\"Taille de la bordure\",\"caption\":\"Titre\",\"cell\":{\"menu\":\"Cellule\",\"insertBefore\":\"Insérer une cellule avant\",\"insertAfter\":\"Insérer une cellule après\",\"deleteCell\":\"Supprimer des cellules\",\"merge\":\"Fusionner les cellules\",\"mergeRight\":\"Fusionner à droite\",\"mergeDown\":\"Fusionner en bas\",\"splitHorizontal\":\"Scinder la cellule horizontalement\",\"splitVertical\":\"Scinder la cellule verticalement\",\"title\":\"Propriétés de la cellule\",\"cellType\":\"Type de cellule\",\"rowSpan\":\"Fusion de lignes\",\"colSpan\":\"Fusion de colonnes\",\"wordWrap\":\"Retour à la ligne\",\"hAlign\":\"Alignement horizontal\",\"vAlign\":\"Alignement vertical\",\"alignBaseline\":\"Bas du texte\",\"bgColor\":\"Couleur d'arrière plan\",\"borderColor\":\"Couleur de bordure\",\"data\":\"Données\",\"header\":\"En-tête\",\"yes\":\"Oui\",\"no\":\"Non\",\"invalidWidth\":\"La largeur de cellule doit être un nombre.\",\"invalidHeight\":\"La hauteur de cellule doit être un nombre.\",\"invalidRowSpan\":\"La fusion de lignes doit être un nombre entier.\",\"invalidColSpan\":\"La fusion de colonnes doit être un nombre entier.\",\"chooseColor\":\"Sélectionner\"},\"cellPad\":\"Marge interne des cellules\",\"cellSpace\":\"Espacement des cellules\",\"column\":{\"menu\":\"Colonne\",\"insertBefore\":\"Insérer une colonne avant\",\"insertAfter\":\"Insérer une colonne après\",\"deleteColumn\":\"Supprimer des colonnes\"},\"columns\":\"Colonnes\",\"deleteTable\":\"Supprimer le tableau\",\"headers\":\"En-têtes\",\"headersBoth\":\"Les deux.\",\"headersColumn\":\"Première colonne\",\"headersNone\":\"Aucun\",\"headersRow\":\"Première ligne\",\"invalidBorder\":\"La taille de bordure doit être un nombre.\",\"invalidCellPadding\":\"La marge interne des cellules doit être un nombre positif.\",\"invalidCellSpacing\":\"L'espacement des cellules doit être un nombre positif.\",\"invalidCols\":\"Le nombre de colonnes doit être supérieur à 0.\",\"invalidHeight\":\"La hauteur du tableau doit être un nombre.\",\"invalidRows\":\"Le nombre de lignes doit être supérieur à 0.\",\"invalidWidth\":\"La largeur du tableau doit être un nombre.\",\"menu\":\"Propriétés du tableau\",\"row\":{\"menu\":\"Ligne\",\"insertBefore\":\"Insérer une ligne avant\",\"insertAfter\":\"Insérer une ligne après\",\"deleteRow\":\"Supprimer des lignes\"},\"rows\":\"Lignes\",\"summary\":\"Résumé\",\"title\":\"Propriétés du tableau\",\"toolbar\":\"Tableau\",\"widthPc\":\"pourcentage\",\"widthPx\":\"pixels\",\"widthUnit\":\"unité de largeur\"},\"undo\":{\"redo\":\"Refaire\",\"undo\":\"Annuler\"},\"wsc\":{\"btnIgnore\":\"Ignorer\",\"btnIgnoreAll\":\"Ignorer tout\",\"btnReplace\":\"Remplacer\",\"btnReplaceAll\":\"Remplacer tout\",\"btnUndo\":\"Annuler\",\"changeTo\":\"Changer en\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Le Correcteur d'orthographe n'est pas installé. Souhaitez-vous le télécharger maintenant?\",\"manyChanges\":\"Vérification d'orthographe terminée: %1 mots modifiés\",\"noChanges\":\"Vérification d'orthographe terminée: Pas de modifications\",\"noMispell\":\"Vérification d'orthographe terminée: pas d'erreur trouvée\",\"noSuggestions\":\"- Pas de suggestion -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Pas dans le dictionnaire\",\"oneChange\":\"Vérification d'orthographe terminée: Un mot modifié\",\"progress\":\"Vérification d'orthographe en cours...\",\"title\":\"Spell Checker\",\"toolbar\":\"Orthographe\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/fr.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['fr']={\"editor\":\"Éditeur de Texte Enrichi\",\"editorPanel\":\"Tableau de bord de l'éditeur de texte enrichi\",\"common\":{\"editorHelp\":\"Appuyez sur ALT-0 pour l'aide\",\"browseServer\":\"Explorer le serveur\",\"url\":\"URL\",\"protocol\":\"Protocole\",\"upload\":\"Télécharger\",\"uploadSubmit\":\"Envoyer sur le serveur\",\"image\":\"Image\",\"flash\":\"Flash\",\"form\":\"Formulaire\",\"checkbox\":\"Case à cocher\",\"radio\":\"Bouton Radio\",\"textField\":\"Champ texte\",\"textarea\":\"Zone de texte\",\"hiddenField\":\"Champ caché\",\"button\":\"Bouton\",\"select\":\"Liste déroulante\",\"imageButton\":\"Bouton image\",\"notSet\":\"<non défini>\",\"id\":\"Id\",\"name\":\"Nom\",\"langDir\":\"Sens d'écriture\",\"langDirLtr\":\"Gauche à droite (LTR)\",\"langDirRtl\":\"Droite à gauche (RTL)\",\"langCode\":\"Code de langue\",\"longDescr\":\"URL de description longue (longdesc => malvoyant)\",\"cssClass\":\"Classe CSS\",\"advisoryTitle\":\"Description (title)\",\"cssStyle\":\"Style\",\"ok\":\"OK\",\"cancel\":\"Annuler\",\"close\":\"Fermer\",\"preview\":\"Aperçu\",\"resize\":\"Déplacer pour modifier la taille\",\"generalTab\":\"Général\",\"advancedTab\":\"Avancé\",\"validateNumberFailed\":\"Cette valeur n'est pas un nombre.\",\"confirmNewPage\":\"Les changements non sauvegardés seront perdus. Êtes-vous sûr de vouloir charger une nouvelle page?\",\"confirmCancel\":\"Certaines options ont été modifiées. Êtes-vous sûr de vouloir fermer?\",\"options\":\"Options\",\"target\":\"Cible (Target)\",\"targetNew\":\"Nouvelle fenêtre (_blank)\",\"targetTop\":\"Fenêtre supérieure (_top)\",\"targetSelf\":\"Même fenêtre (_self)\",\"targetParent\":\"Fenêtre parent (_parent)\",\"langDirLTR\":\"Gauche à Droite (LTR)\",\"langDirRTL\":\"Droite à Gauche (RTL)\",\"styles\":\"Style\",\"cssClasses\":\"Classes de style\",\"width\":\"Largeur\",\"height\":\"Hauteur\",\"align\":\"Alignement\",\"alignLeft\":\"Gauche\",\"alignRight\":\"Droite\",\"alignCenter\":\"Centré\",\"alignJustify\":\"Justifier\",\"alignTop\":\"Haut\",\"alignMiddle\":\"Milieu\",\"alignBottom\":\"Bas\",\"alignNone\":\"Aucun\",\"invalidValue\":\"Valeur incorrecte.\",\"invalidHeight\":\"La hauteur doit être un nombre.\",\"invalidWidth\":\"La largeur doit être un nombre.\",\"invalidCssLength\":\"La valeur spécifiée pour le champ \\\"%1\\\" doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).\",\"invalidHtmlLength\":\"La valeur spécifiée pour le champ \\\"%1\\\" doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).\",\"invalidInlineStyle\":\"La valeur spécifiée pour le style inline doit être composée d'un ou plusieurs couples de valeur au format \\\"nom : valeur\\\", separés par des points-virgules.\",\"cssLengthTooltip\":\"Entrer un nombre pour une valeur en pixels ou un nombre avec une unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, Indisponible</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Tous droits réservés.\",\"dlgTitle\":\"À propos de CKEditor\",\"help\":\"Consulter $1 pour l'aide.\",\"moreInfo\":\"Pour les informations de licence, veuillez visiter notre site web:\",\"title\":\"À propos de CKEditor\",\"userGuide\":\"Guide de l'utilisateur CKEditor en anglais\"},\"basicstyles\":{\"bold\":\"Gras\",\"italic\":\"Italique\",\"strike\":\"Barré\",\"subscript\":\"Indice\",\"superscript\":\"Exposant\",\"underline\":\"Souligné\"},\"blockquote\":{\"toolbar\":\"Citation\"},\"clipboard\":{\"copy\":\"Copier\",\"copyError\":\"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement des opérations de copie. Veuillez utiliser le raccourci clavier (Ctrl/Cmd+C).\",\"cut\":\"Couper\",\"cutError\":\"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement l'opération \\\"couper\\\". Veuillez utiliser le raccourci clavier (Ctrl/Cmd+X).\",\"paste\":\"Coller\",\"pasteArea\":\"Coller la zone\",\"pasteMsg\":\"Veuillez coller le texte dans la zone suivante en utilisant le raccourci clavier (<strong>Ctrl/Cmd+V</strong>) et cliquez sur OK.\",\"securityMsg\":\"A cause des paramètres de sécurité de votre navigateur, l'éditeur n'est pas en mesure d'accéder directement à vos données contenues dans le presse-papier. Vous devriez réessayer de coller les données dans la fenêtre.\",\"title\":\"Coller\"},\"contextmenu\":{\"options\":\"Options du menu contextuel\"},\"button\":{\"selectedLabel\":\"%1 (Sélectionné)\"},\"toolbar\":{\"toolbarCollapse\":\"Enrouler la barre d'outils\",\"toolbarExpand\":\"Dérouler la barre d'outils\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Presse-papier/Défaire\",\"editing\":\"Editer\",\"forms\":\"Formulaires\",\"basicstyles\":\"Styles de base\",\"paragraph\":\"Paragraphe\",\"links\":\"Liens\",\"insert\":\"Insérer\",\"styles\":\"Styles\",\"colors\":\"Couleurs\",\"tools\":\"Outils\"},\"toolbars\":\"Barre d'outils de l'éditeur\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 éléments\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Format de paragraphe\",\"tag_address\":\"Adresse\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Titre 1\",\"tag_h2\":\"Titre 2\",\"tag_h3\":\"Titre 3\",\"tag_h4\":\"Titre 4\",\"tag_h5\":\"Titre 5\",\"tag_h6\":\"Titre 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formaté\"},\"horizontalrule\":{\"toolbar\":\"Ligne horizontale\"},\"image\":{\"alt\":\"Texte de remplacement\",\"border\":\"Bordure\",\"btnUpload\":\"Envoyer sur le serveur\",\"button2Img\":\"Voulez-vous transformer le bouton image sélectionné en simple image?\",\"hSpace\":\"Espacement horizontal\",\"img2Button\":\"Voulez-vous transformer l'image en bouton image?\",\"infoTab\":\"Informations sur l'image\",\"linkTab\":\"Lien\",\"lockRatio\":\"Conserver les proportions\",\"menu\":\"Propriétés de l'image\",\"resetSize\":\"Taille d'origine\",\"title\":\"Propriétés de l'image\",\"titleButton\":\"Propriétés du bouton image\",\"upload\":\"Envoyer\",\"urlMissing\":\"L'adresse source de l'image est manquante.\",\"vSpace\":\"Espacement vertical\",\"validateBorder\":\"Bordure doit être un entier.\",\"validateHSpace\":\"HSpace doit être un entier.\",\"validateVSpace\":\"VSpace doit être un entier.\"},\"indent\":{\"indent\":\"Augmenter le retrait (tabulation)\",\"outdent\":\"Diminuer le retrait (tabulation)\"},\"fakeobjects\":{\"anchor\":\"Ancre\",\"flash\":\"Animation Flash\",\"hiddenfield\":\"Champ caché\",\"iframe\":\"IFrame\",\"unknown\":\"Objet inconnu\"},\"link\":{\"acccessKey\":\"Touche d'accessibilité\",\"advanced\":\"Avancé\",\"advisoryContentType\":\"Type de contenu (ex: text/html)\",\"advisoryTitle\":\"Description (title)\",\"anchor\":{\"toolbar\":\"Ancre\",\"menu\":\"Editer l'ancre\",\"title\":\"Propriétés de l'ancre\",\"name\":\"Nom de l'ancre\",\"errorName\":\"Veuillez entrer le nom de l'ancre.\",\"remove\":\"Supprimer l'ancre\"},\"anchorId\":\"Par ID d'élément\",\"anchorName\":\"Par nom d'ancre\",\"charset\":\"Charset de la cible\",\"cssClasses\":\"Classe CSS\",\"emailAddress\":\"Adresse E-Mail\",\"emailBody\":\"Corps du message\",\"emailSubject\":\"Sujet du message\",\"id\":\"Id\",\"info\":\"Infos sur le lien\",\"langCode\":\"Code de langue\",\"langDir\":\"Sens d'écriture\",\"langDirLTR\":\"Gauche à droite\",\"langDirRTL\":\"Droite à gauche\",\"menu\":\"Editer le lien\",\"name\":\"Nom\",\"noAnchors\":\"(Aucune ancre disponible dans ce document)\",\"noEmail\":\"Veuillez entrer l'adresse e-mail\",\"noUrl\":\"Veuillez entrer l'adresse du lien\",\"other\":\"<autre>\",\"popupDependent\":\"Dépendante (Netscape)\",\"popupFeatures\":\"Options de la fenêtre popup\",\"popupFullScreen\":\"Plein écran (IE)\",\"popupLeft\":\"Position gauche\",\"popupLocationBar\":\"Barre d'adresse\",\"popupMenuBar\":\"Barre de menu\",\"popupResizable\":\"Redimensionnable\",\"popupScrollBars\":\"Barres de défilement\",\"popupStatusBar\":\"Barre de status\",\"popupToolbar\":\"Barre d'outils\",\"popupTop\":\"Position haute\",\"rel\":\"Relation\",\"selectAnchor\":\"Sélectionner l'ancre\",\"styles\":\"Style\",\"tabIndex\":\"Index de tabulation\",\"target\":\"Cible\",\"targetFrame\":\"<cadre>\",\"targetFrameName\":\"Nom du Cadre destination\",\"targetPopup\":\"<fenêtre popup>\",\"targetPopupName\":\"Nom de la fenêtre popup\",\"title\":\"Lien\",\"toAnchor\":\"Ancre\",\"toEmail\":\"E-mail\",\"toUrl\":\"URL\",\"toolbar\":\"Lien\",\"type\":\"Type de lien\",\"unlink\":\"Supprimer le lien\",\"upload\":\"Envoyer\"},\"list\":{\"bulletedlist\":\"Insérer/Supprimer la liste à puces\",\"numberedlist\":\"Insérer/Supprimer la liste numérotée\"},\"magicline\":{\"title\":\"Insérez un paragraphe ici\"},\"maximize\":{\"maximize\":\"Agrandir\",\"minimize\":\"Minimiser\"},\"pastetext\":{\"button\":\"Coller comme texte sans mise en forme\",\"title\":\"Coller comme texte sans mise en forme\"},\"pastefromword\":{\"confirmCleanup\":\"Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?\",\"error\":\"Il n'a pas été possible de nettoyer les données collées à la suite d'une erreur interne.\",\"title\":\"Coller depuis Word\",\"toolbar\":\"Coller depuis Word\"},\"removeformat\":{\"toolbar\":\"Supprimer la mise en forme\"},\"sourcearea\":{\"toolbar\":\"Source\"},\"specialchar\":{\"options\":\"Options des caractères spéciaux\",\"title\":\"Sélectionnez un caractère\",\"toolbar\":\"Insérer un caractère spécial\"},\"scayt\":{\"btn_about\":\"A propos de SCAYT\",\"btn_dictionaries\":\"Dictionnaires\",\"btn_disable\":\"Désactiver SCAYT\",\"btn_enable\":\"Activer SCAYT\",\"btn_langs\":\"Langues\",\"btn_options\":\"Options\",\"text_title\":\"Vérification de l'Orthographe en Cours de Frappe (SCAYT)\"},\"stylescombo\":{\"label\":\"Styles\",\"panelTitle\":\"Styles de mise en page\",\"panelTitle1\":\"Styles de blocs\",\"panelTitle2\":\"Styles en ligne\",\"panelTitle3\":\"Styles d'objet\"},\"table\":{\"border\":\"Taille de la bordure\",\"caption\":\"Titre du tableau\",\"cell\":{\"menu\":\"Cellule\",\"insertBefore\":\"Insérer une cellule avant\",\"insertAfter\":\"Insérer une cellule après\",\"deleteCell\":\"Supprimer les cellules\",\"merge\":\"Fusionner les cellules\",\"mergeRight\":\"Fusionner à droite\",\"mergeDown\":\"Fusionner en bas\",\"splitHorizontal\":\"Fractionner horizontalement\",\"splitVertical\":\"Fractionner verticalement\",\"title\":\"Propriétés de la cellule\",\"cellType\":\"Type de cellule\",\"rowSpan\":\"Fusion de lignes\",\"colSpan\":\"Fusion de colonnes\",\"wordWrap\":\"Césure\",\"hAlign\":\"Alignement Horizontal\",\"vAlign\":\"Alignement Vertical\",\"alignBaseline\":\"Bas du texte\",\"bgColor\":\"Couleur d'arrière-plan\",\"borderColor\":\"Couleur de Bordure\",\"data\":\"Données\",\"header\":\"Entête\",\"yes\":\"Oui\",\"no\":\"Non\",\"invalidWidth\":\"La Largeur de Cellule doit être un nombre.\",\"invalidHeight\":\"La Hauteur de Cellule doit être un nombre.\",\"invalidRowSpan\":\"La fusion de lignes doit être un nombre entier.\",\"invalidColSpan\":\"La fusion de colonnes doit être un nombre entier.\",\"chooseColor\":\"Choisissez\"},\"cellPad\":\"Marge interne des cellules\",\"cellSpace\":\"Espacement des cellules\",\"column\":{\"menu\":\"Colonnes\",\"insertBefore\":\"Insérer une colonne avant\",\"insertAfter\":\"Insérer une colonne après\",\"deleteColumn\":\"Supprimer les colonnes\"},\"columns\":\"Colonnes\",\"deleteTable\":\"Supprimer le tableau\",\"headers\":\"En-Têtes\",\"headersBoth\":\"Les deux\",\"headersColumn\":\"Première colonne\",\"headersNone\":\"Aucunes\",\"headersRow\":\"Première ligne\",\"invalidBorder\":\"La taille de la bordure doit être un nombre.\",\"invalidCellPadding\":\"La marge intérieure des cellules doit être un nombre positif.\",\"invalidCellSpacing\":\"L'espacement des cellules doit être un nombre positif.\",\"invalidCols\":\"Le nombre de colonnes doit être supérieur à 0.\",\"invalidHeight\":\"La hauteur du tableau doit être un nombre.\",\"invalidRows\":\"Le nombre de lignes doit être supérieur à 0.\",\"invalidWidth\":\"La largeur du tableau doit être un nombre.\",\"menu\":\"Propriétés du tableau\",\"row\":{\"menu\":\"Ligne\",\"insertBefore\":\"Insérer une ligne avant\",\"insertAfter\":\"Insérer une ligne après\",\"deleteRow\":\"Supprimer les lignes\"},\"rows\":\"Lignes\",\"summary\":\"Résumé (description)\",\"title\":\"Propriétés du tableau\",\"toolbar\":\"Tableau\",\"widthPc\":\"% pourcents\",\"widthPx\":\"pixels\",\"widthUnit\":\"unité de largeur\"},\"undo\":{\"redo\":\"Rétablir\",\"undo\":\"Annuler\"},\"wsc\":{\"btnIgnore\":\"Ignorer\",\"btnIgnoreAll\":\"Ignorer tout\",\"btnReplace\":\"Remplacer\",\"btnReplaceAll\":\"Remplacer tout\",\"btnUndo\":\"Annuler\",\"changeTo\":\"Modifier pour\",\"errorLoading\":\"Erreur du chargement du service depuis l'hôte : %s.\",\"ieSpellDownload\":\"La vérification d'orthographe n'est pas installée. Voulez-vous la télécharger maintenant?\",\"manyChanges\":\"Vérification de l'orthographe terminée : %1 mots corrigés.\",\"noChanges\":\"Vérification de l'orthographe terminée : Aucun mot corrigé.\",\"noMispell\":\"Vérification de l'orthographe terminée : aucune erreur trouvée.\",\"noSuggestions\":\"- Aucune suggestion -\",\"notAvailable\":\"Désolé, le service est indisponible actuellement.\",\"notInDic\":\"N'existe pas dans le dictionnaire.\",\"oneChange\":\"Vérification de l'orthographe terminée : Un seul mot corrigé.\",\"progress\":\"Vérification de l'orthographe en cours...\",\"title\":\"Vérifier l'orthographe\",\"toolbar\":\"Vérifier l'orthographe\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/gl.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['gl']={\"editor\":\"Editor de texto mellorado\",\"editorPanel\":\"Panel do editor de texto mellorado\",\"common\":{\"editorHelp\":\"Prema ALT 0 para obter axuda\",\"browseServer\":\"Examinar o servidor\",\"url\":\"URL\",\"protocol\":\"Protocolo\",\"upload\":\"Enviar\",\"uploadSubmit\":\"Enviar ao servidor\",\"image\":\"Imaxe\",\"flash\":\"Flash\",\"form\":\"Formulario\",\"checkbox\":\"Caixa de selección\",\"radio\":\"Botón de opción\",\"textField\":\"Campo de texto\",\"textarea\":\"Área de texto\",\"hiddenField\":\"Campo agochado\",\"button\":\"Botón\",\"select\":\"Campo de selección\",\"imageButton\":\"Botón de imaxe\",\"notSet\":\"<sen estabelecer>\",\"id\":\"ID\",\"name\":\"Nome\",\"langDir\":\"Dirección de escritura do idioma\",\"langDirLtr\":\"Esquerda a dereita (LTR)\",\"langDirRtl\":\"Dereita a esquerda (RTL)\",\"langCode\":\"Código do idioma\",\"longDescr\":\"Descrición completa do URL\",\"cssClass\":\"Clases da folla de estilos\",\"advisoryTitle\":\"Título\",\"cssStyle\":\"Estilo\",\"ok\":\"Aceptar\",\"cancel\":\"Cancelar\",\"close\":\"Pechar\",\"preview\":\"Vista previa\",\"resize\":\"Redimensionar\",\"generalTab\":\"Xeral\",\"advancedTab\":\"Avanzado\",\"validateNumberFailed\":\"Este valor non é un número.\",\"confirmNewPage\":\"Calquera cambio que non gardara neste contido perderase.\\r\\nConfirma que quere cargar unha páxina nova?\",\"confirmCancel\":\"Algunhas das opcións foron cambiadas.\\r\\nConfirma que quere pechar o diálogo?\",\"options\":\"Opcións\",\"target\":\"Destino\",\"targetNew\":\"Nova xanela (_blank)\",\"targetTop\":\"Xanela principal (_top)\",\"targetSelf\":\"Mesma xanela (_self)\",\"targetParent\":\"Xanela superior (_parent)\",\"langDirLTR\":\"Esquerda a dereita (LTR)\",\"langDirRTL\":\"Dereita a esquerda (RTL)\",\"styles\":\"Estilo\",\"cssClasses\":\"Clases da folla de estilos\",\"width\":\"Largo\",\"height\":\"Alto\",\"align\":\"Aliñamento\",\"alignLeft\":\"Esquerda\",\"alignRight\":\"Dereita\",\"alignCenter\":\"Centro\",\"alignJustify\":\"Xustificado\",\"alignTop\":\"Arriba\",\"alignMiddle\":\"Centro\",\"alignBottom\":\"Abaixo\",\"alignNone\":\"Ningún\",\"invalidValue\":\"Valor incorrecto.\",\"invalidHeight\":\"O alto debe ser un número.\",\"invalidWidth\":\"O largo debe ser un número.\",\"invalidCssLength\":\"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).\",\"invalidHtmlLength\":\"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida HTML correcta (px ou %).\",\"invalidInlineStyle\":\"O valor especificado no estilo en liña debe consistir nunha ou máis tuplas co formato «nome : valor», separadas por punto e coma.\",\"cssLengthTooltip\":\"Escriba un número para o valor en píxeles ou un número cunha unidade CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, non dispoñíbel</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Todos os dereitos reservados.\",\"dlgTitle\":\"Sobre o CKEditor\",\"help\":\"Consulte $1 para obter axuda.\",\"moreInfo\":\"Para obter  información sobre a licenza, visite o noso sitio web:\",\"title\":\"Sobre o CKEditor\",\"userGuide\":\"Guía do usuario do CKEditor\"},\"basicstyles\":{\"bold\":\"Negra\",\"italic\":\"Cursiva\",\"strike\":\"Riscado\",\"subscript\":\"Subíndice\",\"superscript\":\"Superíndice\",\"underline\":\"Subliñado\"},\"blockquote\":{\"toolbar\":\"Cita\"},\"clipboard\":{\"copy\":\"Copiar\",\"copyError\":\"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de copia. Use o teclado para iso (Ctrl/Cmd+C).\",\"cut\":\"Cortar\",\"cutError\":\"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de corte. Use o teclado para iso (Ctrl/Cmd+X).\",\"paste\":\"Pegar\",\"pasteArea\":\"Zona de pegado\",\"pasteMsg\":\"Pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e prema en Aceptar\",\"securityMsg\":\"Por mor da configuración de seguranza do seu navegador, o editor non ten acceso ao portapapeis. É necesario pegalo novamente nesta xanela.\",\"title\":\"Pegar\"},\"contextmenu\":{\"options\":\"Opcións do menú contextual\"},\"button\":{\"selectedLabel\":\"%1 (seleccionado)\"},\"toolbar\":{\"toolbarCollapse\":\"Contraer a barra de ferramentas\",\"toolbarExpand\":\"Expandir a barra de ferramentas\",\"toolbarGroups\":{\"document\":\"Documento\",\"clipboard\":\"Portapapeis/desfacer\",\"editing\":\"Edición\",\"forms\":\"Formularios\",\"basicstyles\":\"Estilos básicos\",\"paragraph\":\"Paragrafo\",\"links\":\"Ligazóns\",\"insert\":\"Inserir\",\"styles\":\"Estilos\",\"colors\":\"Cores\",\"tools\":\"Ferramentas\"},\"toolbars\":\"Barras de ferramentas do editor\"},\"elementspath\":{\"eleLabel\":\"Ruta dos elementos\",\"eleTitle\":\"Elemento %1\"},\"format\":{\"label\":\"Formato\",\"panelTitle\":\"Formato do parágrafo\",\"tag_address\":\"Enderezo\",\"tag_div\":\"Normal  (DIV)\",\"tag_h1\":\"Enacabezado 1\",\"tag_h2\":\"Encabezado 2\",\"tag_h3\":\"Encabezado 3\",\"tag_h4\":\"Encabezado 4\",\"tag_h5\":\"Encabezado 5\",\"tag_h6\":\"Encabezado 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatado\"},\"horizontalrule\":{\"toolbar\":\"Inserir unha liña horizontal\"},\"image\":{\"alt\":\"Texto alternativo\",\"border\":\"Bordo\",\"btnUpload\":\"Enviar ao servidor\",\"button2Img\":\"Quere converter o botón da imaxe seleccionada nunha imaxe sinxela?\",\"hSpace\":\"Esp.Horiz.\",\"img2Button\":\"Quere converter a imaxe seleccionada nun botón de imaxe?\",\"infoTab\":\"Información da imaxe\",\"linkTab\":\"Ligazón\",\"lockRatio\":\"Proporcional\",\"menu\":\"Propiedades da imaxe\",\"resetSize\":\"Tamaño orixinal\",\"title\":\"Propiedades da imaxe\",\"titleButton\":\"Propiedades do botón de imaxe\",\"upload\":\"Cargar\",\"urlMissing\":\"Non se atopa o URL da imaxe.\",\"vSpace\":\"Esp.Vert.\",\"validateBorder\":\"O bordo debe ser un número.\",\"validateHSpace\":\"O espazado horizontal debe ser un número.\",\"validateVSpace\":\"O espazado vertical debe ser un número.\"},\"indent\":{\"indent\":\"Aumentar a sangría\",\"outdent\":\"Reducir a sangría\"},\"fakeobjects\":{\"anchor\":\"Ancoraxe\",\"flash\":\"Animación «Flash»\",\"hiddenfield\":\"Campo agochado\",\"iframe\":\"IFrame\",\"unknown\":\"Obxecto descoñecido\"},\"link\":{\"acccessKey\":\"Chave de acceso\",\"advanced\":\"Avanzado\",\"advisoryContentType\":\"Tipo de contido informativo\",\"advisoryTitle\":\"Título\",\"anchor\":{\"toolbar\":\"Ancoraxe\",\"menu\":\"Editar a ancoraxe\",\"title\":\"Propiedades da ancoraxe\",\"name\":\"Nome da ancoraxe\",\"errorName\":\"Escriba o nome da ancoraxe\",\"remove\":\"Retirar a ancoraxe\"},\"anchorId\":\"Polo ID do elemento\",\"anchorName\":\"Polo nome da ancoraxe\",\"charset\":\"Codificación do recurso ligado\",\"cssClasses\":\"Clases da folla de estilos\",\"emailAddress\":\"Enderezo de correo\",\"emailBody\":\"Corpo da mensaxe\",\"emailSubject\":\"Asunto da mensaxe\",\"id\":\"ID\",\"info\":\"Información da ligazón\",\"langCode\":\"Código do idioma\",\"langDir\":\"Dirección de escritura do idioma\",\"langDirLTR\":\"Esquerda a dereita (LTR)\",\"langDirRTL\":\"Dereita a esquerda (RTL)\",\"menu\":\"Editar a ligazón\",\"name\":\"Nome\",\"noAnchors\":\"(Non hai ancoraxes dispoñíbeis no documento)\",\"noEmail\":\"Escriba o enderezo de correo\",\"noUrl\":\"Escriba a ligazón URL\",\"other\":\"<outro>\",\"popupDependent\":\"Dependente (Netscape)\",\"popupFeatures\":\"Características da xanela emerxente\",\"popupFullScreen\":\"Pantalla completa (IE)\",\"popupLeft\":\"Posición esquerda\",\"popupLocationBar\":\"Barra de localización\",\"popupMenuBar\":\"Barra do menú\",\"popupResizable\":\"Redimensionábel\",\"popupScrollBars\":\"Barras de desprazamento\",\"popupStatusBar\":\"Barra de estado\",\"popupToolbar\":\"Barra de ferramentas\",\"popupTop\":\"Posición superior\",\"rel\":\"Relación\",\"selectAnchor\":\"Seleccionar unha ancoraxe\",\"styles\":\"Estilo\",\"tabIndex\":\"Índice de tabulación\",\"target\":\"Destino\",\"targetFrame\":\"<marco>\",\"targetFrameName\":\"Nome do marco de destino\",\"targetPopup\":\"<xanela emerxente>\",\"targetPopupName\":\"Nome da xanela emerxente\",\"title\":\"Ligazón\",\"toAnchor\":\"Ligar coa ancoraxe no testo\",\"toEmail\":\"Correo\",\"toUrl\":\"URL\",\"toolbar\":\"Ligazón\",\"type\":\"Tipo de ligazón\",\"unlink\":\"Eliminar a ligazón\",\"upload\":\"Enviar\"},\"list\":{\"bulletedlist\":\"Inserir/retirar lista viñeteada\",\"numberedlist\":\"Inserir/retirar lista numerada\"},\"magicline\":{\"title\":\"Inserir aquí o parágrafo\"},\"maximize\":{\"maximize\":\"Maximizar\",\"minimize\":\"Minimizar\"},\"pastetext\":{\"button\":\"Pegar como texto simple\",\"title\":\"Pegar como texto simple\"},\"pastefromword\":{\"confirmCleanup\":\"O texto que quere pegar semella ser copiado desde o Word. Quere depuralo antes de pegalo?\",\"error\":\"Non foi posíbel depurar os datos pegados por mor dun erro interno\",\"title\":\"Pegar desde Word\",\"toolbar\":\"Pegar desde Word\"},\"removeformat\":{\"toolbar\":\"Retirar o formato\"},\"sourcearea\":{\"toolbar\":\"Orixe\"},\"specialchar\":{\"options\":\"Opcións de caracteres especiais\",\"title\":\"Seleccione un carácter especial\",\"toolbar\":\"Inserir un carácter especial\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Estilos\",\"panelTitle\":\"Estilos de formatando\",\"panelTitle1\":\"Estilos de bloque\",\"panelTitle2\":\"Estilos de liña\",\"panelTitle3\":\"Estilos de obxecto\"},\"table\":{\"border\":\"Tamaño do bordo\",\"caption\":\"Título\",\"cell\":{\"menu\":\"Cela\",\"insertBefore\":\"Inserir a cela á esquerda\",\"insertAfter\":\"Inserir a cela á dereita\",\"deleteCell\":\"Eliminar celas\",\"merge\":\"Combinar celas\",\"mergeRight\":\"Combinar á dereita\",\"mergeDown\":\"Combinar cara abaixo\",\"splitHorizontal\":\"Dividir a cela en horizontal\",\"splitVertical\":\"Dividir a cela en vertical\",\"title\":\"Propiedades da cela\",\"cellType\":\"Tipo de cela\",\"rowSpan\":\"Expandir filas\",\"colSpan\":\"Expandir columnas\",\"wordWrap\":\"Axustar ao contido\",\"hAlign\":\"Aliñación horizontal\",\"vAlign\":\"Aliñación vertical\",\"alignBaseline\":\"Liña de base\",\"bgColor\":\"Cor do fondo\",\"borderColor\":\"Cor do bordo\",\"data\":\"Datos\",\"header\":\"Cabeceira\",\"yes\":\"Si\",\"no\":\"Non\",\"invalidWidth\":\"O largo da cela debe ser un número.\",\"invalidHeight\":\"O alto da cela debe ser un número.\",\"invalidRowSpan\":\"A expansión de filas debe ser un número enteiro.\",\"invalidColSpan\":\"A expansión de columnas debe ser un número enteiro.\",\"chooseColor\":\"Escoller\"},\"cellPad\":\"Marxe interior da cela\",\"cellSpace\":\"Marxe entre celas\",\"column\":{\"menu\":\"Columna\",\"insertBefore\":\"Inserir a columna á esquerda\",\"insertAfter\":\"Inserir a columna á dereita\",\"deleteColumn\":\"Borrar Columnas\"},\"columns\":\"Columnas\",\"deleteTable\":\"Borrar Táboa\",\"headers\":\"Cabeceiras\",\"headersBoth\":\"Ambas\",\"headersColumn\":\"Primeira columna\",\"headersNone\":\"Ningún\",\"headersRow\":\"Primeira fila\",\"invalidBorder\":\"O tamaño do bordo debe ser un número.\",\"invalidCellPadding\":\"A marxe interior debe ser un número positivo.\",\"invalidCellSpacing\":\"A marxe entre celas debe ser un número positivo.\",\"invalidCols\":\"O número de columnas debe ser un número maior que 0.\",\"invalidHeight\":\"O alto da táboa debe ser un número.\",\"invalidRows\":\"O número de filas debe ser un número maior que 0\",\"invalidWidth\":\"O largo da táboa debe ser un número.\",\"menu\":\"Propiedades da táboa\",\"row\":{\"menu\":\"Fila\",\"insertBefore\":\"Inserir a fila por riba\",\"insertAfter\":\"Inserir a fila por baixo\",\"deleteRow\":\"Eliminar filas\"},\"rows\":\"Filas\",\"summary\":\"Resumo\",\"title\":\"Propiedades da táboa\",\"toolbar\":\"Taboa\",\"widthPc\":\"porcentaxe\",\"widthPx\":\"píxeles\",\"widthUnit\":\"unidade do largo\"},\"undo\":{\"redo\":\"Refacer\",\"undo\":\"Desfacer\"},\"wsc\":{\"btnIgnore\":\"Ignorar\",\"btnIgnoreAll\":\"Ignorar Todas\",\"btnReplace\":\"Substituir\",\"btnReplaceAll\":\"Substituir Todas\",\"btnUndo\":\"Desfacer\",\"changeTo\":\"Cambiar a\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"O corrector ortográfico non está instalado. ¿Quere descargalo agora?\",\"manyChanges\":\"Corrección ortográfica rematada: %1 verbas substituidas\",\"noChanges\":\"Corrección ortográfica rematada: Non se substituiu nengunha verba\",\"noMispell\":\"Corrección ortográfica rematada: Non se atoparon erros\",\"noSuggestions\":\"- Sen candidatos -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Non está no diccionario\",\"oneChange\":\"Corrección ortográfica rematada: Unha verba substituida\",\"progress\":\"Corrección ortográfica en progreso...\",\"title\":\"Spell Checker\",\"toolbar\":\"Corrección Ortográfica\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/gu.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['gu']={\"editor\":\"રીચ ટેક્ષ્ત્ એડીટર\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"પ્રેસ ALT 0 મદદ માટ\",\"browseServer\":\"સર્વર બ્રાઉઝ કરો\",\"url\":\"URL\",\"protocol\":\"પ્રોટોકૉલ\",\"upload\":\"અપલોડ\",\"uploadSubmit\":\"આ સર્વરને મોકલવું\",\"image\":\"ચિત્ર\",\"flash\":\"ફ્લૅશ\",\"form\":\"ફૉર્મ/પત્રક\",\"checkbox\":\"ચેક બોક્સ\",\"radio\":\"રેડિઓ બટન\",\"textField\":\"ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્ર\",\"textarea\":\"ટેક્સ્ટ એરિઆ, શબ્દ વિસ્તાર\",\"hiddenField\":\"ગુપ્ત ક્ષેત્ર\",\"button\":\"બટન\",\"select\":\"પસંદગી ક્ષેત્ર\",\"imageButton\":\"ચિત્ર બટન\",\"notSet\":\"<સેટ નથી>\",\"id\":\"Id\",\"name\":\"નામ\",\"langDir\":\"ભાષા લેખવાની પદ્ધતિ\",\"langDirLtr\":\"ડાબે થી જમણે (LTR)\",\"langDirRtl\":\"જમણે થી ડાબે (RTL)\",\"langCode\":\"ભાષા કોડ\",\"longDescr\":\"વધારે માહિતી માટે URL\",\"cssClass\":\"સ્ટાઇલ-શીટ ક્લાસ\",\"advisoryTitle\":\"મુખ્ય મથાળું\",\"cssStyle\":\"સ્ટાઇલ\",\"ok\":\"ઠીક છે\",\"cancel\":\"રદ કરવું\",\"close\":\"બંધ કરવું\",\"preview\":\"જોવું\",\"resize\":\"ખેંચી ને યોગ્ય કરવું\",\"generalTab\":\"જનરલ\",\"advancedTab\":\"અડ્વાન્સડ\",\"validateNumberFailed\":\"આ રકમ આકડો નથી.\",\"confirmNewPage\":\"સવે કાર્ય વગરનું ફકરો ખોવાઈ જશે. તમને ખાતરી છે કે તમને નવું પાનું ખોલવું છે?\",\"confirmCancel\":\"ઘણા વિકલ્પો બદલાયા છે. તમારે આ બોક્ષ્ બંધ કરવું છે?\",\"options\":\"વિકલ્પો\",\"target\":\"લક્ષ્ય\",\"targetNew\":\"નવી વિન્ડો (_blank)\",\"targetTop\":\"ઉપરની વિન્ડો (_top)\",\"targetSelf\":\"એજ વિન્ડો (_self)\",\"targetParent\":\"પેરનટ વિન્ડો (_parent)\",\"langDirLTR\":\"ડાબે થી જમણે (LTR)\",\"langDirRTL\":\"જમણે થી ડાબે (RTL)\",\"styles\":\"શૈલી\",\"cssClasses\":\"શૈલી કલાસીસ\",\"width\":\"પહોળાઈ\",\"height\":\"ઊંચાઈ\",\"align\":\"લાઇનદોરીમાં ગોઠવવું\",\"alignLeft\":\"ડાબી બાજુ ગોઠવવું\",\"alignRight\":\"જમણી\",\"alignCenter\":\"મધ્ય સેન્ટર\",\"alignJustify\":\"બ્લૉક, અંતરાય જસ્ટિફાઇ\",\"alignTop\":\"ઉપર\",\"alignMiddle\":\"વચ્ચે\",\"alignBottom\":\"નીચે\",\"alignNone\":\"None\",\"invalidValue\":\"Invalid value.\",\"invalidHeight\":\"ઉંચાઈ એક આંકડો હોવો જોઈએ.\",\"invalidWidth\":\"પોહળ ઈ એક આંકડો હોવો જોઈએ.\",\"invalidCssLength\":\"\\\"%1\\\" ની વેલ્યુ એક પોસીટીવ આંકડો હોવો જોઈએ અથવા CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc) વગર.\",\"invalidHtmlLength\":\"\\\"%1\\\" ની વેલ્યુ એક પોસીટીવ આંકડો હોવો જોઈએ અથવા HTML measurement unit (px or %) વગર.\",\"invalidInlineStyle\":\"ઈનલાઈન  સ્ટાઈલ ની વેલ્યુ  \\\"name : value\\\" ના ફોર્મેટ માં હોવી જોઈએ, વચ્ચે સેમી-કોલોન જોઈએ.\",\"cssLengthTooltip\":\"પિક્ષ્લ્ નો આંકડો CSS unit (px, %, in, cm, mm, em, ex, pt, or pc) માં નાખો.\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, નથી મળતું</span>\"},\"about\":{\"copy\":\"કોપીરાઈટ &copy; $1. ઓલ રાઈટ્સ \",\"dlgTitle\":\"CKEditor વિષે\",\"help\":\"મદદ માટે $1 તપાસો\",\"moreInfo\":\"લાયસનસની માહિતી માટે અમારી વેબ સાઈટ\",\"title\":\"CKEditor વિષે\",\"userGuide\":\"CKEditor યુઝર્સ ગાઈડ\"},\"basicstyles\":{\"bold\":\"બોલ્ડ/સ્પષ્ટ\",\"italic\":\"ઇટેલિક, ત્રાંસા\",\"strike\":\"છેકી નાખવું\",\"subscript\":\"એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન\",\"superscript\":\"એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.\",\"underline\":\"અન્ડર્લાઇન, નીચે લીટી\"},\"blockquote\":{\"toolbar\":\"બ્લૉક-કોટ, અવતરણચિહ્નો\"},\"clipboard\":{\"copy\":\"નકલ\",\"copyError\":\"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી.  (Ctrl/Cmd+C) का प्रयोग करें।\",\"cut\":\"કાપવું\",\"cutError\":\"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+X) નો ઉપયોગ કરો.\",\"paste\":\"પેસ્ટ\",\"pasteArea\":\"પેસ્ટ કરવાની જગ્યા\",\"pasteMsg\":\"Ctrl/Cmd+V નો પ્રયોગ કરી પેસ્ટ કરો\",\"securityMsg\":\"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસના કારણે,એડિટર તમારા કિલ્પબોર્ડ ડેટા ને કોપી નથી કરી શકતો. તમારે આ વિન્ડોમાં ફરીથી પેસ્ટ કરવું પડશે.\",\"title\":\"પેસ્ટ\"},\"contextmenu\":{\"options\":\"કોન્તેક્ષ્ત્ મેનુના વિકલ્પો\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"ટૂલબાર નાનું કરવું\",\"toolbarExpand\":\"ટૂલબાર મોટું કરવું\",\"toolbarGroups\":{\"document\":\"દસ્તાવેજ\",\"clipboard\":\"ક્લિપબોર્ડ/અન\",\"editing\":\"એડીટ કરવું\",\"forms\":\"ફોર્મ\",\"basicstyles\":\"બેસિક્ સ્ટાઇલ\",\"paragraph\":\"ફકરો\",\"links\":\"લીંક\",\"insert\":\"ઉમેરવું\",\"styles\":\"સ્ટાઇલ\",\"colors\":\"રંગ\",\"tools\":\"ટૂલ્સ\"},\"toolbars\":\"એડીટર ટૂલ બાર\"},\"elementspath\":{\"eleLabel\":\"એલીમેન્ટ્સ નો \",\"eleTitle\":\"એલીમેન્ટ %1\"},\"format\":{\"label\":\"ફૉન્ટ ફૉર્મટ, રચનાની શૈલી\",\"panelTitle\":\"ફૉન્ટ ફૉર્મટ, રચનાની શૈલી\",\"tag_address\":\"સરનામું\",\"tag_div\":\"શીર્ષક (DIV)\",\"tag_h1\":\"શીર્ષક 1\",\"tag_h2\":\"શીર્ષક 2\",\"tag_h3\":\"શીર્ષક 3\",\"tag_h4\":\"શીર્ષક 4\",\"tag_h5\":\"શીર્ષક 5\",\"tag_h6\":\"શીર્ષક 6\",\"tag_p\":\"સામાન્ય\",\"tag_pre\":\"ફૉર્મટેડ\"},\"horizontalrule\":{\"toolbar\":\"સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી\"},\"image\":{\"alt\":\"ઑલ્ટર્નટ ટેક્સ્ટ\",\"border\":\"બોર્ડર\",\"btnUpload\":\"આ સર્વરને મોકલવું\",\"button2Img\":\"તમારે ઈમેજ બટનને સાદી ઈમેજમાં બદલવું છે.\",\"hSpace\":\"સમસ્તરીય જગ્યા\",\"img2Button\":\"તમારે સાદી ઈમેજને ઈમેજ બટનમાં બદલવું છે.\",\"infoTab\":\"ચિત્ર ની જાણકારી\",\"linkTab\":\"લિંક\",\"lockRatio\":\"લૉક ગુણોત્તર\",\"menu\":\"ચિત્રના ગુણ\",\"resetSize\":\"રીસેટ સાઇઝ\",\"title\":\"ચિત્રના ગુણ\",\"titleButton\":\"ચિત્ર બટનના ગુણ\",\"upload\":\"અપલોડ\",\"urlMissing\":\"ઈમેજની મૂળ URL છે નહી.\",\"vSpace\":\"લંબરૂપ જગ્યા\",\"validateBorder\":\"બોર્ડેર આંકડો હોવો જોઈએ.\",\"validateHSpace\":\"HSpaceઆંકડો હોવો જોઈએ.\",\"validateVSpace\":\"VSpace આંકડો હોવો જોઈએ. \"},\"indent\":{\"indent\":\"ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી\",\"outdent\":\"ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી\"},\"fakeobjects\":{\"anchor\":\"અનકર\",\"flash\":\"ફ્લેશ \",\"hiddenfield\":\"હિડન \",\"iframe\":\"IFrame\",\"unknown\":\"અનનોન ઓબ્જેક્ટ\"},\"link\":{\"acccessKey\":\"ઍક્સેસ કી\",\"advanced\":\"અડ્વાન્સડ\",\"advisoryContentType\":\"મુખ્ય કન્ટેન્ટ પ્રકાર\",\"advisoryTitle\":\"મુખ્ય મથાળું\",\"anchor\":{\"toolbar\":\"ઍંકર ઇન્સર્ટ/દાખલ કરવી\",\"menu\":\"ઍંકરના ગુણ\",\"title\":\"ઍંકરના ગુણ\",\"name\":\"ઍંકરનું નામ\",\"errorName\":\"ઍંકરનું નામ ટાઈપ કરો\",\"remove\":\"સ્થિર નકરવું\"},\"anchorId\":\"ઍંકર એલિમન્ટ Id થી પસંદ કરો\",\"anchorName\":\"ઍંકર નામથી પસંદ કરો\",\"charset\":\"લિંક રિસૉર્સ કૅરિક્ટર સેટ\",\"cssClasses\":\"સ્ટાઇલ-શીટ ક્લાસ\",\"emailAddress\":\"ઈ-મેલ સરનામું\",\"emailBody\":\"સંદેશ\",\"emailSubject\":\"ઈ-મેલ વિષય\",\"id\":\"Id\",\"info\":\"લિંક ઇન્ફૉ ટૅબ\",\"langCode\":\"ભાષા લેખવાની પદ્ધતિ\",\"langDir\":\"ભાષા લેખવાની પદ્ધતિ\",\"langDirLTR\":\"ડાબે થી જમણે (LTR)\",\"langDirRTL\":\"જમણે થી ડાબે (RTL)\",\"menu\":\" લિંક એડિટ/માં ફેરફાર કરવો\",\"name\":\"નામ\",\"noAnchors\":\"(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)\",\"noEmail\":\"ઈ-મેલ સરનામું ટાઇપ કરો\",\"noUrl\":\"લિંક  URL ટાઇપ કરો\",\"other\":\"<other> <અન્ય>\",\"popupDependent\":\"ડિપેન્ડન્ટ (Netscape)\",\"popupFeatures\":\"પૉપ-અપ વિન્ડો ફીચરસૅ\",\"popupFullScreen\":\"ફુલ સ્ક્રીન (IE)\",\"popupLeft\":\"ડાબી બાજુ\",\"popupLocationBar\":\"લોકેશન બાર\",\"popupMenuBar\":\"મેન્યૂ બાર\",\"popupResizable\":\"રીસાઈઝએબલ\",\"popupScrollBars\":\"સ્ક્રોલ બાર\",\"popupStatusBar\":\"સ્ટૅટસ બાર\",\"popupToolbar\":\"ટૂલ બાર\",\"popupTop\":\"જમણી બાજુ\",\"rel\":\"સંબંધની સ્થિતિ\",\"selectAnchor\":\"ઍંકર પસંદ કરો\",\"styles\":\"સ્ટાઇલ\",\"tabIndex\":\"ટૅબ ઇન્ડેક્સ\",\"target\":\"ટાર્ગેટ/લક્ષ્ય\",\"targetFrame\":\"<ફ્રેમ>\",\"targetFrameName\":\"ટાર્ગેટ ફ્રેમ નું નામ\",\"targetPopup\":\"<પૉપ-અપ વિન્ડો>\",\"targetPopupName\":\"પૉપ-અપ વિન્ડો નું નામ\",\"title\":\"લિંક\",\"toAnchor\":\"આ પેજનો ઍંકર\",\"toEmail\":\"ઈ-મેલ\",\"toUrl\":\"URL\",\"toolbar\":\"લિંક ઇન્સર્ટ/દાખલ કરવી\",\"type\":\"લિંક પ્રકાર\",\"unlink\":\"લિંક કાઢવી\",\"upload\":\"અપલોડ\"},\"list\":{\"bulletedlist\":\"બુલેટ સૂચિ\",\"numberedlist\":\"સંખ્યાંકન સૂચિ\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"મોટું કરવું\",\"minimize\":\"નાનું કરવું\"},\"pastetext\":{\"button\":\"પેસ્ટ (ટેક્સ્ટ)\",\"title\":\"પેસ્ટ (ટેક્સ્ટ)\"},\"pastefromword\":{\"confirmCleanup\":\"તમે જે ટેક્ષ્ત્ કોપી કરી રહ્યા છો ટે વર્ડ ની છે. કોપી કરતા પેહલા સાફ કરવી છે?\",\"error\":\"પેસ્ટ કરેલો ડેટા ઇન્ટરનલ એરર ના લીથે સાફ કરી શકાયો નથી.\",\"title\":\"પેસ્ટ (વડૅ ટેક્સ્ટ)\",\"toolbar\":\"પેસ્ટ (વડૅ ટેક્સ્ટ)\"},\"removeformat\":{\"toolbar\":\"ફૉર્મટ કાઢવું\"},\"sourcearea\":{\"toolbar\":\"મૂળ કે પ્રાથમિક દસ્તાવેજ\"},\"specialchar\":{\"options\":\"સ્પેશિઅલ કરેક્ટરના વિકલ્પો\",\"title\":\"સ્પેશિઅલ વિશિષ્ટ અક્ષર પસંદ કરો\",\"toolbar\":\"વિશિષ્ટ અક્ષર ઇન્સર્ટ/દાખલ કરવું\"},\"scayt\":{\"btn_about\":\"SCAYT વિષે\",\"btn_dictionaries\":\"શબ્દકોશ\",\"btn_disable\":\"SCAYT ડિસેબલ કરવું\",\"btn_enable\":\"SCAYT એનેબલ કરવું\",\"btn_langs\":\"ભાષાઓ\",\"btn_options\":\"વિકલ્પો\",\"text_title\":\"ટાઈપ કરતા સ્પેલ તપાસો\"},\"stylescombo\":{\"label\":\"શૈલી/રીત\",\"panelTitle\":\"ફોર્મેટ \",\"panelTitle1\":\"બ્લોક \",\"panelTitle2\":\"ઈનલાઈન \",\"panelTitle3\":\"ઓબ્જેક્ટ પદ્ધતિ\"},\"table\":{\"border\":\"કોઠાની બાજુ(બોર્ડર) સાઇઝ\",\"caption\":\"મથાળું/કૅપ્શન \",\"cell\":{\"menu\":\"કોષના ખાના\",\"insertBefore\":\"પહેલાં કોષ ઉમેરવો\",\"insertAfter\":\"પછી કોષ ઉમેરવો\",\"deleteCell\":\"કોષ ડિલીટ/કાઢી નાખવો\",\"merge\":\"કોષ ભેગા કરવા\",\"mergeRight\":\"જમણી બાજુ ભેગા કરવા\",\"mergeDown\":\"નીચે ભેગા કરવા\",\"splitHorizontal\":\"કોષને સમસ્તરીય વિભાજન કરવું\",\"splitVertical\":\"કોષને સીધું ને ઊભું વિભાજન કરવું\",\"title\":\"સેલના ગુણ\",\"cellType\":\"સેલનો પ્રકાર\",\"rowSpan\":\"આડી કટારની જગ્યા\",\"colSpan\":\"ઊભી કતારની જગ્યા\",\"wordWrap\":\"વર્ડ રેપ\",\"hAlign\":\"સપાટ લાઈનદોરી\",\"vAlign\":\"ઊભી લાઈનદોરી\",\"alignBaseline\":\"બસે લાઈન\",\"bgColor\":\"પાછાળનો રંગ\",\"borderColor\":\"બોર્ડેર રંગ\",\"data\":\"સ્વીકૃત માહિતી\",\"header\":\"મથાળું\",\"yes\":\"હા\",\"no\":\"ના\",\"invalidWidth\":\"સેલની પોહલાઈ આંકડો હોવો જોઈએ.\",\"invalidHeight\":\"સેલની ઊંચાઈ આંકડો હોવો જોઈએ.\",\"invalidRowSpan\":\"રો સ્પાન આંકડો હોવો જોઈએ.\",\"invalidColSpan\":\"કોલમ સ્પાન આંકડો હોવો જોઈએ.\",\"chooseColor\":\"પસંદ કરવું\"},\"cellPad\":\"સેલ પૅડિંગ\",\"cellSpace\":\"સેલ અંતર\",\"column\":{\"menu\":\"કૉલમ/ઊભી કટાર\",\"insertBefore\":\"પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી\",\"insertAfter\":\"પછી કૉલમ/ઊભી કટાર ઉમેરવી\",\"deleteColumn\":\"કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી\"},\"columns\":\"કૉલમ/ઊભી કટાર\",\"deleteTable\":\"કોઠો ડિલીટ/કાઢી નાખવું\",\"headers\":\"મથાળા\",\"headersBoth\":\"બેવું\",\"headersColumn\":\"પહેલી ઊભી કટાર\",\"headersNone\":\"નથી \",\"headersRow\":\"પહેલી  કટાર\",\"invalidBorder\":\"બોર્ડર એક આંકડો હોવો જોઈએ\",\"invalidCellPadding\":\"સેલની અંદરની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.\",\"invalidCellSpacing\":\"સેલ વચ્ચેની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.\",\"invalidCols\":\"ઉભી કટાર, 0 કરતા વધારે હોવી જોઈએ.\",\"invalidHeight\":\"ટેબલની ઊંચાઈ આંકડો હોવો જોઈએ.\",\"invalidRows\":\"આડી કટાર, 0 કરતા વધારે હોવી જોઈએ.\",\"invalidWidth\":\"ટેબલની પોહલાઈ આંકડો હોવો જોઈએ.\",\"menu\":\"ટેબલ, કોઠાનું મથાળું\",\"row\":{\"menu\":\"પંક્તિના ખાના\",\"insertBefore\":\"પહેલાં પંક્તિ ઉમેરવી\",\"insertAfter\":\"પછી પંક્તિ ઉમેરવી\",\"deleteRow\":\"પંક્તિઓ ડિલીટ/કાઢી નાખવી\"},\"rows\":\"પંક્તિના ખાના\",\"summary\":\"ટૂંકો એહેવાલ\",\"title\":\"ટેબલ, કોઠાનું મથાળું\",\"toolbar\":\"ટેબલ, કોઠો\",\"widthPc\":\"પ્રતિશત\",\"widthPx\":\"પિકસલ\",\"widthUnit\":\"પોહાલાઈ એકમ\"},\"undo\":{\"redo\":\"રિડૂ; પછી હતી એવી સ્થિતિ પાછી લાવવી\",\"undo\":\"રદ કરવું; પહેલાં હતી એવી સ્થિતિ પાછી લાવવી\"},\"wsc\":{\"btnIgnore\":\"ઇગ્નોર/અવગણના કરવી\",\"btnIgnoreAll\":\"બધાની ઇગ્નોર/અવગણના કરવી\",\"btnReplace\":\"બદલવું\",\"btnReplaceAll\":\"બધા બદલી કરો\",\"btnUndo\":\"અન્ડૂ\",\"changeTo\":\"આનાથી બદલવું\",\"errorLoading\":\"સર્વિસ એપ્લીકેશન લોડ નથી થ: %s.\",\"ieSpellDownload\":\"સ્પેલ-ચેકર ઇન્સ્ટોલ નથી. શું તમે ડાઉનલોડ કરવા માંગો છો?\",\"manyChanges\":\"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: %1 શબ્દ બદલયા છે\",\"noChanges\":\"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એકપણ શબ્દ બદલયો નથી\",\"noMispell\":\"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: ખોટી જોડણી મળી નથી\",\"noSuggestions\":\"- કઇ સજેશન નથી -\",\"notAvailable\":\"માફ કરશો, આ સુવિધા ઉપલબ્ધ નથી\",\"notInDic\":\"શબ્દકોશમાં નથી\",\"oneChange\":\"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એક શબ્દ બદલયો છે\",\"progress\":\"શબ્દની જોડણી/સ્પેલ ચેક ચાલુ છે...\",\"title\":\"સ્પેલ \",\"toolbar\":\"જોડણી (સ્પેલિંગ) તપાસવી\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/he.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['he']={\"editor\":\"עורך טקסט עשיר\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"לחץ אלט ALT + 0 לעזרה\",\"browseServer\":\"סייר השרת\",\"url\":\"כתובת (URL)\",\"protocol\":\"פרוטוקול\",\"upload\":\"העלאה\",\"uploadSubmit\":\"שליחה לשרת\",\"image\":\"תמונה\",\"flash\":\"פלאש\",\"form\":\"טופס\",\"checkbox\":\"תיבת סימון\",\"radio\":\"לחצן אפשרויות\",\"textField\":\"שדה טקסט\",\"textarea\":\"איזור טקסט\",\"hiddenField\":\"שדה חבוי\",\"button\":\"כפתור\",\"select\":\"שדה בחירה\",\"imageButton\":\"כפתור תמונה\",\"notSet\":\"<לא נקבע>\",\"id\":\"זיהוי (ID)\",\"name\":\"שם\",\"langDir\":\"כיוון שפה\",\"langDirLtr\":\"שמאל לימין (LTR)\",\"langDirRtl\":\"ימין לשמאל (RTL)\",\"langCode\":\"קוד שפה\",\"longDescr\":\"קישור לתיאור מפורט\",\"cssClass\":\"מחלקת עיצוב (CSS Class)\",\"advisoryTitle\":\"כותרת מוצעת\",\"cssStyle\":\"סגנון\",\"ok\":\"אישור\",\"cancel\":\"ביטול\",\"close\":\"סגירה\",\"preview\":\"תצוגה מקדימה\",\"resize\":\"יש לגרור בכדי לשנות את הגודל\",\"generalTab\":\"כללי\",\"advancedTab\":\"אפשרויות מתקדמות\",\"validateNumberFailed\":\"הערך חייב להיות מספרי.\",\"confirmNewPage\":\"כל השינויים שלא נשמרו יאבדו. האם להעלות דף חדש?\",\"confirmCancel\":\"חלק מהאפשרויות שונו, האם לסגור את הדיאלוג?\",\"options\":\"אפשרויות\",\"target\":\"מטרה\",\"targetNew\":\"חלון חדש (_blank)\",\"targetTop\":\"החלון העליון ביותר (_top)\",\"targetSelf\":\"אותו חלון (_self)\",\"targetParent\":\"חלון האב (_parent)\",\"langDirLTR\":\"שמאל לימין (LTR)\",\"langDirRTL\":\"ימין לשמאל (RTL)\",\"styles\":\"סגנון\",\"cssClasses\":\"מחלקות גליונות סגנון\",\"width\":\"רוחב\",\"height\":\"גובה\",\"align\":\"יישור\",\"alignLeft\":\"לשמאל\",\"alignRight\":\"לימין\",\"alignCenter\":\"מרכז\",\"alignJustify\":\"יישור לשוליים\",\"alignTop\":\"למעלה\",\"alignMiddle\":\"לאמצע\",\"alignBottom\":\"לתחתית\",\"alignNone\":\"None\",\"invalidValue\":\"ערך לא חוקי.\",\"invalidHeight\":\"הגובה חייב להיות מספר.\",\"invalidWidth\":\"הרוחב חייב להיות מספר.\",\"invalidCssLength\":\"הערך שצוין לשדה \\\"%1\\\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של CSS (px, %, in, cm, mm, em, ex, pt, או pc).\",\"invalidHtmlLength\":\"הערך שצוין לשדה \\\"%1\\\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של HTML (px או %).\",\"invalidInlineStyle\":\"הערך שצויין לשדה הסגנון חייב להכיל זוג ערכים אחד או יותר בפורמט \\\"שם : ערך\\\", מופרדים על ידי נקודה-פסיק.\",\"cssLengthTooltip\":\"יש להכניס מספר המייצג פיקסלים או מספר עם יחידת גליונות סגנון תקינה (px, %, in, cm, mm, em, ex, pt, או pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, לא זמין</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. כל הזכויות שמורות.\",\"dlgTitle\":\"אודות CKEditor\",\"help\":\"היכנסו ל$1 לעזרה.\",\"moreInfo\":\"למידע נוסף בקרו באתרנו:\",\"title\":\"אודות CKEditor\",\"userGuide\":\"מדריך המשתמש של CKEditor\"},\"basicstyles\":{\"bold\":\"מודגש\",\"italic\":\"נטוי\",\"strike\":\"כתיב מחוק\",\"subscript\":\"כתיב תחתון\",\"superscript\":\"כתיב עליון\",\"underline\":\"קו תחתון\"},\"blockquote\":{\"toolbar\":\"בלוק ציטוט\"},\"clipboard\":{\"copy\":\"העתקה\",\"copyError\":\"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+C).\",\"cut\":\"גזירה\",\"cutError\":\"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+X).\",\"paste\":\"הדבקה\",\"pasteArea\":\"איזור הדבקה\",\"pasteMsg\":\"נא להדביק בתוך הקופסה באמצעות (<b>Ctrl/Cmd+V</b>) וללחוץ על <b>אישור</b>.\",\"securityMsg\":\"עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (Clipboard) בצורה ישירה. נא להדביק שוב בחלון זה.\",\"title\":\"הדבקה\"},\"contextmenu\":{\"options\":\"אפשרויות תפריט ההקשר\"},\"button\":{\"selectedLabel\":\"1% (סומן)\"},\"toolbar\":{\"toolbarCollapse\":\"מזעור סרגל כלים\",\"toolbarExpand\":\"הרחבת סרגל כלים\",\"toolbarGroups\":{\"document\":\"מסמך\",\"clipboard\":\"לוח הגזירים (Clipboard)/צעד אחרון\",\"editing\":\"עריכה\",\"forms\":\"טפסים\",\"basicstyles\":\"עיצוב בסיסי\",\"paragraph\":\"פסקה\",\"links\":\"קישורים\",\"insert\":\"הכנסה\",\"styles\":\"עיצוב\",\"colors\":\"צבעים\",\"tools\":\"כלים\"},\"toolbars\":\"סרגלי כלים של העורך\"},\"elementspath\":{\"eleLabel\":\"עץ האלמנטים\",\"eleTitle\":\"%1 אלמנט\"},\"format\":{\"label\":\"עיצוב\",\"panelTitle\":\"עיצוב\",\"tag_address\":\"כתובת\",\"tag_div\":\"נורמלי (DIV)\",\"tag_h1\":\"כותרת\",\"tag_h2\":\"כותרת 2\",\"tag_h3\":\"כותרת 3\",\"tag_h4\":\"כותרת 4\",\"tag_h5\":\"כותרת 5\",\"tag_h6\":\"כותרת 6\",\"tag_p\":\"נורמלי\",\"tag_pre\":\"קוד\"},\"horizontalrule\":{\"toolbar\":\"הוספת קו אופקי\"},\"image\":{\"alt\":\"טקסט חלופי\",\"border\":\"מסגרת\",\"btnUpload\":\"שליחה לשרת\",\"button2Img\":\"האם להפוך את תמונת הכפתור לתמונה פשוטה?\",\"hSpace\":\"מרווח אופקי\",\"img2Button\":\"האם להפוך את התמונה לכפתור תמונה?\",\"infoTab\":\"מידע על התמונה\",\"linkTab\":\"קישור\",\"lockRatio\":\"נעילת היחס\",\"menu\":\"תכונות התמונה\",\"resetSize\":\"איפוס הגודל\",\"title\":\"מאפייני התמונה\",\"titleButton\":\"מאפיני כפתור תמונה\",\"upload\":\"העלאה\",\"urlMissing\":\"כתובת התמונה חסרה.\",\"vSpace\":\"מרווח אנכי\",\"validateBorder\":\"שדה המסגרת חייב להיות מספר שלם.\",\"validateHSpace\":\"שדה המרווח האופקי חייב להיות מספר שלם.\",\"validateVSpace\":\"שדה המרווח האנכי חייב להיות מספר שלם.\"},\"indent\":{\"indent\":\"הגדלת הזחה\",\"outdent\":\"הקטנת הזחה\"},\"fakeobjects\":{\"anchor\":\"עוגן\",\"flash\":\"סרטון פלאש\",\"hiddenfield\":\"שדה חבוי\",\"iframe\":\"חלון פנימי (iframe)\",\"unknown\":\"אובייקט לא ידוע\"},\"link\":{\"acccessKey\":\"מקש גישה\",\"advanced\":\"אפשרויות מתקדמות\",\"advisoryContentType\":\"Content Type מוצע\",\"advisoryTitle\":\"כותרת מוצעת\",\"anchor\":{\"toolbar\":\"הוספת/עריכת נקודת עיגון\",\"menu\":\"מאפייני נקודת עיגון\",\"title\":\"מאפייני נקודת עיגון\",\"name\":\"שם לנקודת עיגון\",\"errorName\":\"יש להקליד שם לנקודת עיגון\",\"remove\":\"מחיקת נקודת עיגון\"},\"anchorId\":\"עפ\\\"י זיהוי (ID) האלמנט\",\"anchorName\":\"עפ\\\"י שם העוגן\",\"charset\":\"קידוד המשאב המקושר\",\"cssClasses\":\"גיליונות עיצוב קבוצות\",\"emailAddress\":\"כתובת הדוא\\\"ל\",\"emailBody\":\"גוף ההודעה\",\"emailSubject\":\"נושא ההודעה\",\"id\":\"זיהוי (ID)\",\"info\":\"מידע על הקישור\",\"langCode\":\"קוד שפה\",\"langDir\":\"כיוון שפה\",\"langDirLTR\":\"שמאל לימין (LTR)\",\"langDirRTL\":\"ימין לשמאל (RTL)\",\"menu\":\"מאפייני קישור\",\"name\":\"שם\",\"noAnchors\":\"(אין עוגנים זמינים בדף)\",\"noEmail\":\"יש להקליד את כתובת הדוא\\\"ל\",\"noUrl\":\"יש להקליד את כתובת הקישור (URL)\",\"other\":\"<אחר>\",\"popupDependent\":\"תלוי (Netscape)\",\"popupFeatures\":\"תכונות החלון הקופץ\",\"popupFullScreen\":\"מסך מלא (IE)\",\"popupLeft\":\"מיקום צד שמאל\",\"popupLocationBar\":\"סרגל כתובת\",\"popupMenuBar\":\"סרגל תפריט\",\"popupResizable\":\"שינוי גודל\",\"popupScrollBars\":\"ניתן לגלילה\",\"popupStatusBar\":\"סרגל חיווי\",\"popupToolbar\":\"סרגל הכלים\",\"popupTop\":\"מיקום צד עליון\",\"rel\":\"קשר גומלין\",\"selectAnchor\":\"בחירת עוגן\",\"styles\":\"סגנון\",\"tabIndex\":\"מספר טאב\",\"target\":\"מטרה\",\"targetFrame\":\"<מסגרת>\",\"targetFrameName\":\"שם מסגרת היעד\",\"targetPopup\":\"<חלון קופץ>\",\"targetPopupName\":\"שם החלון הקופץ\",\"title\":\"קישור\",\"toAnchor\":\"עוגן בעמוד זה\",\"toEmail\":\"דוא\\\"ל\",\"toUrl\":\"כתובת (URL)\",\"toolbar\":\"הוספת/עריכת קישור\",\"type\":\"סוג קישור\",\"unlink\":\"הסרת הקישור\",\"upload\":\"העלאה\"},\"list\":{\"bulletedlist\":\"רשימת נקודות\",\"numberedlist\":\"רשימה ממוספרת\"},\"magicline\":{\"title\":\"הכנס פסקה כאן\"},\"maximize\":{\"maximize\":\"הגדלה למקסימום\",\"minimize\":\"הקטנה למינימום\"},\"pastetext\":{\"button\":\"הדבקה כטקסט פשוט\",\"title\":\"הדבקה כטקסט פשוט\"},\"pastefromword\":{\"confirmCleanup\":\"נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?\",\"error\":\"לא ניתן היה לנקות את המידע בשל תקלה פנימית.\",\"title\":\"הדבקה מ-Word\",\"toolbar\":\"הדבקה מ-Word\"},\"removeformat\":{\"toolbar\":\"הסרת העיצוב\"},\"sourcearea\":{\"toolbar\":\"מקור\"},\"specialchar\":{\"options\":\"אפשרויות תווים מיוחדים\",\"title\":\"בחירת תו מיוחד\",\"toolbar\":\"הוספת תו מיוחד\"},\"scayt\":{\"btn_about\":\"אודות SCAYT\",\"btn_dictionaries\":\"מילון\",\"btn_disable\":\"בטל SCAYT\",\"btn_enable\":\"אפשר SCAYT\",\"btn_langs\":\"שפות\",\"btn_options\":\"אפשרויות\",\"text_title\":\"בדיקת איות בזמן כתיבה (SCAYT)\"},\"stylescombo\":{\"label\":\"סגנון\",\"panelTitle\":\"סגנונות פורמט\",\"panelTitle1\":\"סגנונות בלוק\",\"panelTitle2\":\"סגנונות רצף\",\"panelTitle3\":\"סגנונות אובייקט\"},\"table\":{\"border\":\"גודל מסגרת\",\"caption\":\"כיתוב\",\"cell\":{\"menu\":\"מאפייני תא\",\"insertBefore\":\"הוספת תא לפני\",\"insertAfter\":\"הוספת תא אחרי\",\"deleteCell\":\"מחיקת תאים\",\"merge\":\"מיזוג תאים\",\"mergeRight\":\"מזג ימינה\",\"mergeDown\":\"מזג למטה\",\"splitHorizontal\":\"פיצול תא אופקית\",\"splitVertical\":\"פיצול תא אנכית\",\"title\":\"תכונות התא\",\"cellType\":\"סוג התא\",\"rowSpan\":\"מתיחת השורות\",\"colSpan\":\"מתיחת התאים\",\"wordWrap\":\"מניעת גלישת שורות\",\"hAlign\":\"יישור אופקי\",\"vAlign\":\"יישור אנכי\",\"alignBaseline\":\"שורת בסיס\",\"bgColor\":\"צבע רקע\",\"borderColor\":\"צבע מסגרת\",\"data\":\"מידע\",\"header\":\"כותרת\",\"yes\":\"כן\",\"no\":\"לא\",\"invalidWidth\":\"שדה רוחב התא חייב להיות מספר.\",\"invalidHeight\":\"שדה גובה התא חייב להיות מספר.\",\"invalidRowSpan\":\"שדה מתיחת השורות חייב להיות מספר שלם.\",\"invalidColSpan\":\"שדה מתיחת העמודות חייב להיות מספר שלם.\",\"chooseColor\":\"בחר\"},\"cellPad\":\"ריפוד תא\",\"cellSpace\":\"מרווח תא\",\"column\":{\"menu\":\"עמודה\",\"insertBefore\":\"הוספת עמודה לפני\",\"insertAfter\":\"הוספת עמודה אחרי\",\"deleteColumn\":\"מחיקת עמודות\"},\"columns\":\"עמודות\",\"deleteTable\":\"מחק טבלה\",\"headers\":\"כותרות\",\"headersBoth\":\"שניהם\",\"headersColumn\":\"עמודה ראשונה\",\"headersNone\":\"אין\",\"headersRow\":\"שורה ראשונה\",\"invalidBorder\":\"שדה גודל המסגרת חייב להיות מספר.\",\"invalidCellPadding\":\"שדה ריפוד התאים חייב להיות מספר חיובי.\",\"invalidCellSpacing\":\"שדה ריווח התאים חייב להיות מספר חיובי.\",\"invalidCols\":\"שדה מספר העמודות חייב להיות מספר גדול מ 0.\",\"invalidHeight\":\"שדה גובה הטבלה חייב להיות מספר.\",\"invalidRows\":\"שדה מספר השורות חייב להיות מספר גדול מ 0.\",\"invalidWidth\":\"שדה רוחב הטבלה חייב להיות מספר.\",\"menu\":\"מאפייני טבלה\",\"row\":{\"menu\":\"שורה\",\"insertBefore\":\"הוספת שורה לפני\",\"insertAfter\":\"הוספת שורה אחרי\",\"deleteRow\":\"מחיקת שורות\"},\"rows\":\"שורות\",\"summary\":\"תקציר\",\"title\":\"מאפייני טבלה\",\"toolbar\":\"טבלה\",\"widthPc\":\"אחוז\",\"widthPx\":\"פיקסלים\",\"widthUnit\":\"יחידת רוחב\"},\"undo\":{\"redo\":\"חזרה על צעד אחרון\",\"undo\":\"ביטול צעד אחרון\"},\"wsc\":{\"btnIgnore\":\"התעלמות\",\"btnIgnoreAll\":\"התעלמות מהכל\",\"btnReplace\":\"החלפה\",\"btnReplaceAll\":\"החלפת הכל\",\"btnUndo\":\"החזרה\",\"changeTo\":\"שינוי ל\",\"errorLoading\":\"שגיאה בהעלאת השירות: %s.\",\"ieSpellDownload\":\"בודק האיות לא מותקן, האם להורידו?\",\"manyChanges\":\"בדיקות איות הסתיימה: %1 מילים שונו\",\"noChanges\":\"בדיקות איות הסתיימה: לא שונתה אף מילה\",\"noMispell\":\"בדיקות איות הסתיימה: לא נמצאו שגיאות כתיב\",\"noSuggestions\":\"- אין הצעות -\",\"notAvailable\":\"לא נמצא שירות זמין.\",\"notInDic\":\"לא נמצא במילון\",\"oneChange\":\"בדיקות איות הסתיימה: שונתה מילה אחת\",\"progress\":\"בודק האיות בתהליך בדיקה....\",\"title\":\"בדיקת איות\",\"toolbar\":\"בדיקת איות\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/hi.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['hi']={\"editor\":\"रिच टेक्स्ट एडिटर\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"मदद के लिये ALT 0 दबाए\",\"browseServer\":\"सर्वर ब्राउज़ करें\",\"url\":\"URL\",\"protocol\":\"प्रोटोकॉल\",\"upload\":\"अपलोड\",\"uploadSubmit\":\"इसे सर्वर को भेजें\",\"image\":\"तस्वीर\",\"flash\":\"फ़्लैश\",\"form\":\"फ़ॉर्म\",\"checkbox\":\"चॅक बॉक्स\",\"radio\":\"रेडिओ बटन\",\"textField\":\"टेक्स्ट फ़ील्ड\",\"textarea\":\"टेक्स्ट एरिया\",\"hiddenField\":\"गुप्त फ़ील्ड\",\"button\":\"बटन\",\"select\":\"चुनाव फ़ील्ड\",\"imageButton\":\"तस्वीर बटन\",\"notSet\":\"<सॅट नहीं>\",\"id\":\"Id\",\"name\":\"नाम\",\"langDir\":\"भाषा लिखने की दिशा\",\"langDirLtr\":\"बायें से दायें (LTR)\",\"langDirRtl\":\"दायें से बायें (RTL)\",\"langCode\":\"भाषा कोड\",\"longDescr\":\"अधिक विवरण के लिए URL\",\"cssClass\":\"स्टाइल-शीट क्लास\",\"advisoryTitle\":\"परामर्श शीर्शक\",\"cssStyle\":\"स्टाइल\",\"ok\":\"ठीक है\",\"cancel\":\"रद्द करें\",\"close\":\"Close\",\"preview\":\"प्रीव्यू\",\"resize\":\"Resize\",\"generalTab\":\"सामान्य\",\"advancedTab\":\"ऍड्वान्स्ड\",\"validateNumberFailed\":\"This value is not a number.\",\"confirmNewPage\":\"Any unsaved changes to this content will be lost. Are you sure you want to load new page?\",\"confirmCancel\":\"You have changed some options. Are you sure you want to close the dialog window?\",\"options\":\"Options\",\"target\":\"टार्गेट\",\"targetNew\":\"New Window (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"Same Window (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"बायें से दायें (LTR)\",\"langDirRTL\":\"दायें से बायें (RTL)\",\"styles\":\"स्टाइल\",\"cssClasses\":\"स्टाइल-शीट क्लास\",\"width\":\"चौड़ाई\",\"height\":\"ऊँचाई\",\"align\":\"ऍलाइन\",\"alignLeft\":\"दायें\",\"alignRight\":\"दायें\",\"alignCenter\":\"बीच में\",\"alignJustify\":\"ब्लॉक जस्टीफ़ाई\",\"alignTop\":\"ऊपर\",\"alignMiddle\":\"मध्य\",\"alignBottom\":\"नीचे\",\"alignNone\":\"None\",\"invalidValue\":\"Invalid value.\",\"invalidHeight\":\"Height must be a number.\",\"invalidWidth\":\"Width must be a number.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"About CKEditor\",\"help\":\"Check $1 for help.\",\"moreInfo\":\"For licensing information please visit our web site:\",\"title\":\"About CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"बोल्ड\",\"italic\":\"इटैलिक\",\"strike\":\"स्ट्राइक थ्रू\",\"subscript\":\"अधोलेख\",\"superscript\":\"अभिलेख\",\"underline\":\"रेखांकण\"},\"blockquote\":{\"toolbar\":\"ब्लॉक-कोट\"},\"clipboard\":{\"copy\":\"कॉपी\",\"copyError\":\"आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+C) का प्रयोग करें।\",\"cut\":\"कट\",\"cutError\":\"आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+X) का प्रयोग करें।\",\"paste\":\"पेस्ट\",\"pasteArea\":\"Paste Area\",\"pasteMsg\":\"Ctrl/Cmd+V का प्रयोग करके पेस्ट करें और ठीक है करें.\",\"securityMsg\":\"आपके ब्राउज़र की सुरक्षा आपके ब्राउज़र की सुरKश सैटिंग के कारण, एडिटर आपके क्लिपबोर्ड डेटा को नहीं पा सकता है. आपको उसे इस विन्डो में दोबारा पेस्ट करना होगा.\",\"title\":\"पेस्ट\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Collapse Toolbar\",\"toolbarExpand\":\"Expand Toolbar\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"एडिटर टूलबार\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"फ़ॉर्मैट\",\"panelTitle\":\"फ़ॉर्मैट\",\"tag_address\":\"पता\",\"tag_div\":\"शीर्षक (DIV)\",\"tag_h1\":\"शीर्षक 1\",\"tag_h2\":\"शीर्षक 2\",\"tag_h3\":\"शीर्षक 3\",\"tag_h4\":\"शीर्षक 4\",\"tag_h5\":\"शीर्षक 5\",\"tag_h6\":\"शीर्षक 6\",\"tag_p\":\"साधारण\",\"tag_pre\":\"फ़ॉर्मैटॅड\"},\"horizontalrule\":{\"toolbar\":\"हॉरिज़ॉन्टल रेखा इन्सर्ट करें\"},\"image\":{\"alt\":\"वैकल्पिक टेक्स्ट\",\"border\":\"बॉर्डर\",\"btnUpload\":\"इसे सर्वर को भेजें\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"हॉरिज़ॉन्टल स्पेस\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"तस्वीर की जानकारी\",\"linkTab\":\"लिंक\",\"lockRatio\":\"लॉक अनुपात\",\"menu\":\"तस्वीर प्रॉपर्टीज़\",\"resetSize\":\"रीसॅट साइज़\",\"title\":\"तस्वीर प्रॉपर्टीज़\",\"titleButton\":\"तस्वीर बटन प्रॉपर्टीज़\",\"upload\":\"अपलोड\",\"urlMissing\":\"Image source URL is missing.\",\"vSpace\":\"वर्टिकल स्पेस\",\"validateBorder\":\"Border must be a whole number.\",\"validateHSpace\":\"HSpace must be a whole number.\",\"validateVSpace\":\"VSpace must be a whole number.\"},\"indent\":{\"indent\":\"इन्डॅन्ट बढ़ायें\",\"outdent\":\"इन्डॅन्ट कम करें\"},\"fakeobjects\":{\"anchor\":\"ऐंकर इन्सर्ट/संपादन\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"गुप्त फ़ील्ड\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"ऍक्सॅस की\",\"advanced\":\"ऍड्वान्स्ड\",\"advisoryContentType\":\"परामर्श कन्टॅन्ट प्रकार\",\"advisoryTitle\":\"परामर्श शीर्शक\",\"anchor\":{\"toolbar\":\"ऐंकर इन्सर्ट/संपादन\",\"menu\":\"ऐंकर प्रॉपर्टीज़\",\"title\":\"ऐंकर प्रॉपर्टीज़\",\"name\":\"ऐंकर का नाम\",\"errorName\":\"ऐंकर का नाम टाइप करें\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"ऍलीमॅन्ट Id से\",\"anchorName\":\"ऐंकर नाम से\",\"charset\":\"लिंक रिसोर्स करॅक्टर सॅट\",\"cssClasses\":\"स्टाइल-शीट क्लास\",\"emailAddress\":\"ई-मेल पता\",\"emailBody\":\"संदेश\",\"emailSubject\":\"संदेश विषय\",\"id\":\"Id\",\"info\":\"लिंक  \",\"langCode\":\"भाषा लिखने की दिशा\",\"langDir\":\"भाषा लिखने की दिशा\",\"langDirLTR\":\"बायें से दायें (LTR)\",\"langDirRTL\":\"दायें से बायें (RTL)\",\"menu\":\"लिंक संपादन\",\"name\":\"नाम\",\"noAnchors\":\"(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)\",\"noEmail\":\"ई-मेल पता टाइप करें\",\"noUrl\":\"लिंक URL टाइप करें\",\"other\":\"<अन्य>\",\"popupDependent\":\"डिपेन्डॅन्ट (Netscape)\",\"popupFeatures\":\"पॉप-अप विन्डो फ़ीचर्स\",\"popupFullScreen\":\"फ़ुल स्क्रीन (IE)\",\"popupLeft\":\"बायीं तरफ\",\"popupLocationBar\":\"लोकेशन बार\",\"popupMenuBar\":\"मॅन्यू बार\",\"popupResizable\":\"आकार बदलने लायक\",\"popupScrollBars\":\"स्क्रॉल बार\",\"popupStatusBar\":\"स्टेटस बार\",\"popupToolbar\":\"टूल बार\",\"popupTop\":\"दायीं तरफ\",\"rel\":\"संबंध\",\"selectAnchor\":\"ऐंकर चुनें\",\"styles\":\"स्टाइल\",\"tabIndex\":\"टैब इन्डॅक्स\",\"target\":\"टार्गेट\",\"targetFrame\":\"<फ़्रेम>\",\"targetFrameName\":\"टार्गेट फ़्रेम का नाम\",\"targetPopup\":\"<पॉप-अप विन्डो>\",\"targetPopupName\":\"पॉप-अप विन्डो का नाम\",\"title\":\"लिंक\",\"toAnchor\":\"इस पेज का ऐंकर\",\"toEmail\":\"ई-मेल\",\"toUrl\":\"URL\",\"toolbar\":\"लिंक इन्सर्ट/संपादन\",\"type\":\"लिंक प्रकार\",\"unlink\":\"लिंक हटायें\",\"upload\":\"अपलोड\"},\"list\":{\"bulletedlist\":\"बुलॅट सूची\",\"numberedlist\":\"अंकीय सूची\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"मेक्सिमाईज़\",\"minimize\":\"मिनिमाईज़\"},\"pastetext\":{\"button\":\"पेस्ट (सादा टॅक्स्ट)\",\"title\":\"पेस्ट (सादा टॅक्स्ट)\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"पेस्ट (वर्ड से)\",\"toolbar\":\"पेस्ट (वर्ड से)\"},\"removeformat\":{\"toolbar\":\"फ़ॉर्मैट हटायें\"},\"sourcearea\":{\"toolbar\":\"सोर्स\"},\"specialchar\":{\"options\":\"विशेष चरित्र विकल्प\",\"title\":\"विशेष करॅक्टर चुनें\",\"toolbar\":\"विशेष करॅक्टर इन्सर्ट करें\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"स्टाइल\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"बॉर्डर साइज़\",\"caption\":\"शीर्षक\",\"cell\":{\"menu\":\"खाना\",\"insertBefore\":\"पहले सैल डालें\",\"insertAfter\":\"बाद में सैल डालें\",\"deleteCell\":\"सैल डिलीट करें\",\"merge\":\"सैल मिलायें\",\"mergeRight\":\"बाँया विलय\",\"mergeDown\":\"नीचे विलय करें\",\"splitHorizontal\":\"सैल को क्षैतिज स्थिति में विभाजित करें\",\"splitVertical\":\"सैल को लम्बाकार में विभाजित करें\",\"title\":\"Cell Properties\",\"cellType\":\"Cell Type\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Horizontal Alignment\",\"vAlign\":\"Vertical Alignment\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Background Color\",\"borderColor\":\"Border Color\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Yes\",\"no\":\"No\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Choose\"},\"cellPad\":\"सैल पैडिंग\",\"cellSpace\":\"सैल अंतर\",\"column\":{\"menu\":\"कालम\",\"insertBefore\":\"पहले कालम डालें\",\"insertAfter\":\"बाद में कालम डालें\",\"deleteColumn\":\"कालम डिलीट करें\"},\"columns\":\"कालम\",\"deleteTable\":\"टेबल डिलीट करें\",\"headers\":\"Headers\",\"headersBoth\":\"Both\",\"headersColumn\":\"First column\",\"headersNone\":\"None\",\"headersRow\":\"First Row\",\"invalidBorder\":\"Border size must be a number.\",\"invalidCellPadding\":\"Cell padding must be a positive number.\",\"invalidCellSpacing\":\"Cell spacing must be a positive number.\",\"invalidCols\":\"Number of columns must be a number greater than 0.\",\"invalidHeight\":\"Table height must be a number.\",\"invalidRows\":\"Number of rows must be a number greater than 0.\",\"invalidWidth\":\"Table width must be a number.\",\"menu\":\"टेबल प्रॉपर्टीज़\",\"row\":{\"menu\":\"पंक्ति\",\"insertBefore\":\"पहले पंक्ति डालें\",\"insertAfter\":\"बाद में पंक्ति डालें\",\"deleteRow\":\"पंक्तियाँ डिलीट करें\"},\"rows\":\"पंक्तियाँ\",\"summary\":\"सारांश\",\"title\":\"टेबल प्रॉपर्टीज़\",\"toolbar\":\"टेबल\",\"widthPc\":\"प्रतिशत\",\"widthPx\":\"पिक्सैल\",\"widthUnit\":\"width unit\"},\"undo\":{\"redo\":\"रीडू\",\"undo\":\"अन्डू\"},\"wsc\":{\"btnIgnore\":\"इग्नोर\",\"btnIgnoreAll\":\"सभी इग्नोर करें\",\"btnReplace\":\"रिप्लेस\",\"btnReplaceAll\":\"सभी रिप्लेस करें\",\"btnUndo\":\"अन्डू\",\"changeTo\":\"इसमें बदलें\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"स्पॅल-चॅकर इन्स्टाल नहीं किया गया है। क्या आप इसे डाउनलोड करना चाहेंगे?\",\"manyChanges\":\"वर्तनी की जाँच : %1 शब्द बदले गये\",\"noChanges\":\"वर्तनी की जाँच :कोई शब्द नहीं बदला गया\",\"noMispell\":\"वर्तनी की जाँच : कोई गलत वर्तनी (स्पॅलिंग) नहीं पाई गई\",\"noSuggestions\":\"- कोई सुझाव नहीं -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"शब्दकोश में नहीं\",\"oneChange\":\"वर्तनी की जाँच : एक शब्द बदला गया\",\"progress\":\"वर्तनी की जाँच (स्पॅल-चॅक) जारी है...\",\"title\":\"Spell Checker\",\"toolbar\":\"वर्तनी (स्पेलिंग) जाँच\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/hr.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['hr']={\"editor\":\"Bogati uređivač teksta, %1\",\"editorPanel\":\"Ploča Bogatog Uređivača Teksta\",\"common\":{\"editorHelp\":\"Pritisni ALT 0 za pomoć\",\"browseServer\":\"Pretraži server\",\"url\":\"URL\",\"protocol\":\"Protokol\",\"upload\":\"Pošalji\",\"uploadSubmit\":\"Pošalji na server\",\"image\":\"Slika\",\"flash\":\"Flash\",\"form\":\"Forma\",\"checkbox\":\"Checkbox\",\"radio\":\"Radio Button\",\"textField\":\"Text Field\",\"textarea\":\"Textarea\",\"hiddenField\":\"Hidden Field\",\"button\":\"Button\",\"select\":\"Selection Field\",\"imageButton\":\"Image Button\",\"notSet\":\"<nije postavljeno>\",\"id\":\"Id\",\"name\":\"Naziv\",\"langDir\":\"Smjer jezika\",\"langDirLtr\":\"S lijeva na desno (LTR)\",\"langDirRtl\":\"S desna na lijevo (RTL)\",\"langCode\":\"Kôd jezika\",\"longDescr\":\"Dugački opis URL\",\"cssClass\":\"Klase stilova\",\"advisoryTitle\":\"Advisory naslov\",\"cssStyle\":\"Stil\",\"ok\":\"OK\",\"cancel\":\"Poništi\",\"close\":\"Zatvori\",\"preview\":\"Pregledaj\",\"resize\":\"Povuci za promjenu veličine\",\"generalTab\":\"Općenito\",\"advancedTab\":\"Napredno\",\"validateNumberFailed\":\"Ova vrijednost nije broj.\",\"confirmNewPage\":\"Sve napravljene promjene će biti izgubljene ukoliko ih niste snimili. Sigurno želite učitati novu stranicu?\",\"confirmCancel\":\"Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?\",\"options\":\"Opcije\",\"target\":\"Odredište\",\"targetNew\":\"Novi prozor (_blank)\",\"targetTop\":\"Vršni prozor (_top)\",\"targetSelf\":\"Isti prozor (_self)\",\"targetParent\":\"Roditeljski prozor (_parent)\",\"langDirLTR\":\"S lijeva na desno (LTR)\",\"langDirRTL\":\"S desna na lijevo (RTL)\",\"styles\":\"Stil\",\"cssClasses\":\"Klase stilova\",\"width\":\"Širina\",\"height\":\"Visina\",\"align\":\"Poravnanje\",\"alignLeft\":\"Lijevo\",\"alignRight\":\"Desno\",\"alignCenter\":\"Središnje\",\"alignJustify\":\"Blok poravnanje\",\"alignTop\":\"Vrh\",\"alignMiddle\":\"Sredina\",\"alignBottom\":\"Dolje\",\"alignNone\":\"None\",\"invalidValue\":\"Neispravna vrijednost.\",\"invalidHeight\":\"Visina mora biti broj.\",\"invalidWidth\":\"Širina mora biti broj.\",\"invalidCssLength\":\"Vrijednost određena za \\\"%1\\\" polje mora biti pozitivni broj sa ili bez važećih CSS mjernih jedinica (px, %, in, cm, mm, em, ex, pt ili pc).\",\"invalidHtmlLength\":\"Vrijednost određena za \\\"%1\\\" polje mora biti pozitivni broj sa ili bez važećih HTML mjernih jedinica (px ili %).\",\"invalidInlineStyle\":\"Vrijednost za linijski stil mora sadržavati jednu ili više definicija s formatom \\\"naziv:vrijednost\\\", odvojenih točka-zarezom.\",\"cssLengthTooltip\":\"Unesite broj za vrijednost u pikselima ili broj s važećim CSS mjernim jedinicama (px, %, in, cm, mm, em, ex, pt ili pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, nedostupno</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"O CKEditoru\",\"help\":\"Provjeri $1 za pomoć.\",\"moreInfo\":\"Za informacije o licencama posjetite našu web stranicu:\",\"title\":\"O CKEditoru\",\"userGuide\":\"Vodič za CKEditor korisnike\"},\"basicstyles\":{\"bold\":\"Podebljaj\",\"italic\":\"Ukosi\",\"strike\":\"Precrtano\",\"subscript\":\"Subscript\",\"superscript\":\"Superscript\",\"underline\":\"Potcrtano\"},\"blockquote\":{\"toolbar\":\"Blockquote\"},\"clipboard\":{\"copy\":\"Kopiraj\",\"copyError\":\"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+C).\",\"cut\":\"Izreži\",\"cutError\":\"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+X).\",\"paste\":\"Zalijepi\",\"pasteArea\":\"Prostor za ljepljenje\",\"pasteMsg\":\"Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl/Cmd+V</STRONG>) i kliknite <STRONG>OK</STRONG>.\",\"securityMsg\":\"Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.\",\"title\":\"Zalijepi\"},\"contextmenu\":{\"options\":\"Opcije izbornika\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Smanji alatnu traku\",\"toolbarExpand\":\"Proširi alatnu traku\",\"toolbarGroups\":{\"document\":\"Dokument\",\"clipboard\":\"Međuspremnik/Poništi\",\"editing\":\"Uređivanje\",\"forms\":\"Forme\",\"basicstyles\":\"Osnovni stilovi\",\"paragraph\":\"Paragraf\",\"links\":\"Veze\",\"insert\":\"Umetni\",\"styles\":\"Stilovi\",\"colors\":\"Boje\",\"tools\":\"Alatke\"},\"toolbars\":\"Alatne trake uređivača teksta\"},\"elementspath\":{\"eleLabel\":\"Putanja elemenata\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Format\",\"tag_address\":\"Address\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Heading 1\",\"tag_h2\":\"Heading 2\",\"tag_h3\":\"Heading 3\",\"tag_h4\":\"Heading 4\",\"tag_h5\":\"Heading 5\",\"tag_h6\":\"Heading 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatirano\"},\"horizontalrule\":{\"toolbar\":\"Ubaci vodoravnu liniju\"},\"image\":{\"alt\":\"Alternativni tekst\",\"border\":\"Okvir\",\"btnUpload\":\"Pošalji na server\",\"button2Img\":\"Želite li promijeniti odabrani gumb u jednostavnu sliku?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Želite li promijeniti odabranu sliku u gumb?\",\"infoTab\":\"Info slike\",\"linkTab\":\"Link\",\"lockRatio\":\"Zaključaj odnos\",\"menu\":\"Svojstva slika\",\"resetSize\":\"Obriši veličinu\",\"title\":\"Svojstva slika\",\"titleButton\":\"Image Button svojstva\",\"upload\":\"Pošalji\",\"urlMissing\":\"Nedostaje URL slike.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"Okvir mora biti cijeli broj.\",\"validateHSpace\":\"HSpace mora biti cijeli broj\",\"validateVSpace\":\"VSpace mora biti cijeli broj.\"},\"indent\":{\"indent\":\"Pomakni udesno\",\"outdent\":\"Pomakni ulijevo\"},\"fakeobjects\":{\"anchor\":\"Sidro\",\"flash\":\"Flash animacija\",\"hiddenfield\":\"Sakriveno polje\",\"iframe\":\"IFrame\",\"unknown\":\"Nepoznati objekt\"},\"link\":{\"acccessKey\":\"Pristupna tipka\",\"advanced\":\"Napredno\",\"advisoryContentType\":\"Advisory vrsta sadržaja\",\"advisoryTitle\":\"Advisory naslov\",\"anchor\":{\"toolbar\":\"Ubaci/promijeni sidro\",\"menu\":\"Svojstva sidra\",\"title\":\"Svojstva sidra\",\"name\":\"Ime sidra\",\"errorName\":\"Molimo unesite ime sidra\",\"remove\":\"Ukloni sidro\"},\"anchorId\":\"Po Id elementa\",\"anchorName\":\"Po nazivu sidra\",\"charset\":\"Kodna stranica povezanih resursa\",\"cssClasses\":\"Stylesheet klase\",\"emailAddress\":\"E-Mail adresa\",\"emailBody\":\"Sadržaj poruke\",\"emailSubject\":\"Naslov\",\"id\":\"Id\",\"info\":\"Link Info\",\"langCode\":\"Smjer jezika\",\"langDir\":\"Smjer jezika\",\"langDirLTR\":\"S lijeva na desno (LTR)\",\"langDirRTL\":\"S desna na lijevo (RTL)\",\"menu\":\"Promijeni link\",\"name\":\"Naziv\",\"noAnchors\":\"(Nema dostupnih sidra)\",\"noEmail\":\"Molimo upišite e-mail adresu\",\"noUrl\":\"Molimo upišite URL link\",\"other\":\"<drugi>\",\"popupDependent\":\"Ovisno (Netscape)\",\"popupFeatures\":\"Mogućnosti popup prozora\",\"popupFullScreen\":\"Cijeli ekran (IE)\",\"popupLeft\":\"Lijeva pozicija\",\"popupLocationBar\":\"Traka za lokaciju\",\"popupMenuBar\":\"Izborna traka\",\"popupResizable\":\"Promjenjiva veličina\",\"popupScrollBars\":\"Scroll traka\",\"popupStatusBar\":\"Statusna traka\",\"popupToolbar\":\"Traka s alatima\",\"popupTop\":\"Gornja pozicija\",\"rel\":\"Veza\",\"selectAnchor\":\"Odaberi sidro\",\"styles\":\"Stil\",\"tabIndex\":\"Tab Indeks\",\"target\":\"Meta\",\"targetFrame\":\"<okvir>\",\"targetFrameName\":\"Ime ciljnog okvira\",\"targetPopup\":\"<popup prozor>\",\"targetPopupName\":\"Naziv popup prozora\",\"title\":\"Link\",\"toAnchor\":\"Sidro na ovoj stranici\",\"toEmail\":\"E-Mail\",\"toUrl\":\"URL\",\"toolbar\":\"Ubaci/promijeni link\",\"type\":\"Link vrsta\",\"unlink\":\"Ukloni link\",\"upload\":\"Pošalji\"},\"list\":{\"bulletedlist\":\"Obična lista\",\"numberedlist\":\"Brojčana lista\"},\"magicline\":{\"title\":\"Ubaci paragraf ovdje\"},\"maximize\":{\"maximize\":\"Povećaj\",\"minimize\":\"Smanji\"},\"pastetext\":{\"button\":\"Zalijepi kao čisti tekst\",\"title\":\"Zalijepi kao čisti tekst\"},\"pastefromword\":{\"confirmCleanup\":\"Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?\",\"error\":\"Nije moguće očistiti podatke za ljepljenje zbog interne greške\",\"title\":\"Zalijepi iz Worda\",\"toolbar\":\"Zalijepi iz Worda\"},\"removeformat\":{\"toolbar\":\"Ukloni formatiranje\"},\"sourcearea\":{\"toolbar\":\"Kôd\"},\"specialchar\":{\"options\":\"Opcije specijalnih znakova\",\"title\":\"Odaberite posebni karakter\",\"toolbar\":\"Ubaci posebne znakove\"},\"scayt\":{\"btn_about\":\"O SCAYT\",\"btn_dictionaries\":\"Rječnici\",\"btn_disable\":\"Onemogući SCAYT\",\"btn_enable\":\"Omogući SCAYT\",\"btn_langs\":\"Jezici\",\"btn_options\":\"Opcije\",\"text_title\":\"Provjeri pravopis tijekom tipkanja (SCAYT)\"},\"stylescombo\":{\"label\":\"Stil\",\"panelTitle\":\"Stilovi formatiranja\",\"panelTitle1\":\"Block stilovi\",\"panelTitle2\":\"Inline stilovi\",\"panelTitle3\":\"Object stilovi\"},\"table\":{\"border\":\"Veličina okvira\",\"caption\":\"Naslov\",\"cell\":{\"menu\":\"Ćelija\",\"insertBefore\":\"Ubaci ćeliju prije\",\"insertAfter\":\"Ubaci ćeliju poslije\",\"deleteCell\":\"Izbriši ćelije\",\"merge\":\"Spoji ćelije\",\"mergeRight\":\"Spoji desno\",\"mergeDown\":\"Spoji dolje\",\"splitHorizontal\":\"Podijeli ćeliju vodoravno\",\"splitVertical\":\"Podijeli ćeliju okomito\",\"title\":\"Svojstva ćelije\",\"cellType\":\"Vrsta ćelije\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Prelazak u novi red\",\"hAlign\":\"Vodoravno poravnanje\",\"vAlign\":\"Okomito poravnanje\",\"alignBaseline\":\"Osnovna linija\",\"bgColor\":\"Boja pozadine\",\"borderColor\":\"Boja ruba\",\"data\":\"Podatak\",\"header\":\"Zaglavlje\",\"yes\":\"Da\",\"no\":\"ne\",\"invalidWidth\":\"Širina ćelije mora biti broj.\",\"invalidHeight\":\"Visina ćelije mora biti broj.\",\"invalidRowSpan\":\"Rows span mora biti cijeli broj.\",\"invalidColSpan\":\"Columns span mora biti cijeli broj.\",\"chooseColor\":\"Odaberi\"},\"cellPad\":\"Razmak ćelija\",\"cellSpace\":\"Prostornost ćelija\",\"column\":{\"menu\":\"Kolona\",\"insertBefore\":\"Ubaci kolonu prije\",\"insertAfter\":\"Ubaci kolonu poslije\",\"deleteColumn\":\"Izbriši kolone\"},\"columns\":\"Kolona\",\"deleteTable\":\"Izbriši tablicu\",\"headers\":\"Zaglavlje\",\"headersBoth\":\"Oba\",\"headersColumn\":\"Prva kolona\",\"headersNone\":\"Ništa\",\"headersRow\":\"Prvi red\",\"invalidBorder\":\"Debljina ruba mora biti broj.\",\"invalidCellPadding\":\"Razmak ćelija mora biti broj.\",\"invalidCellSpacing\":\"Prostornost ćelija mora biti broj.\",\"invalidCols\":\"Broj kolona mora biti broj veći od 0.\",\"invalidHeight\":\"Visina tablice mora biti broj.\",\"invalidRows\":\"Broj redova mora biti broj veći od 0.\",\"invalidWidth\":\"Širina tablice mora biti broj.\",\"menu\":\"Svojstva tablice\",\"row\":{\"menu\":\"Red\",\"insertBefore\":\"Ubaci red prije\",\"insertAfter\":\"Ubaci red poslije\",\"deleteRow\":\"Izbriši redove\"},\"rows\":\"Redova\",\"summary\":\"Sažetak\",\"title\":\"Svojstva tablice\",\"toolbar\":\"Tablica\",\"widthPc\":\"postotaka\",\"widthPx\":\"piksela\",\"widthUnit\":\"jedinica širine\"},\"undo\":{\"redo\":\"Ponovi\",\"undo\":\"Poništi\"},\"wsc\":{\"btnIgnore\":\"Zanemari\",\"btnIgnoreAll\":\"Zanemari sve\",\"btnReplace\":\"Zamijeni\",\"btnReplaceAll\":\"Zamijeni sve\",\"btnUndo\":\"Vrati\",\"changeTo\":\"Promijeni u\",\"errorLoading\":\"Greška učitavanja aplikacije: %s.\",\"ieSpellDownload\":\"Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?\",\"manyChanges\":\"Provjera završena: Promijenjeno %1 riječi\",\"noChanges\":\"Provjera završena: Nije napravljena promjena\",\"noMispell\":\"Provjera završena: Nema grešaka\",\"noSuggestions\":\"-Nema preporuke-\",\"notAvailable\":\"Žao nam je, ali usluga trenutno nije dostupna.\",\"notInDic\":\"Nije u rječniku\",\"oneChange\":\"Provjera završena: Jedna riječ promjenjena\",\"progress\":\"Provjera u tijeku...\",\"title\":\"Provjera pravopisa\",\"toolbar\":\"Provjeri pravopis\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/hu.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['hu']={\"editor\":\"HTML szerkesztő\",\"editorPanel\":\"Rich Text szerkesztő panel\",\"common\":{\"editorHelp\":\"Segítségért nyomjon ALT 0\",\"browseServer\":\"Böngészés a szerveren\",\"url\":\"Hivatkozás\",\"protocol\":\"Protokoll\",\"upload\":\"Feltöltés\",\"uploadSubmit\":\"Küldés a szerverre\",\"image\":\"Kép\",\"flash\":\"Flash\",\"form\":\"Űrlap\",\"checkbox\":\"Jelölőnégyzet\",\"radio\":\"Választógomb\",\"textField\":\"Szövegmező\",\"textarea\":\"Szövegterület\",\"hiddenField\":\"Rejtettmező\",\"button\":\"Gomb\",\"select\":\"Legördülő lista\",\"imageButton\":\"Képgomb\",\"notSet\":\"<nincs beállítva>\",\"id\":\"Azonosító\",\"name\":\"Név\",\"langDir\":\"Írás iránya\",\"langDirLtr\":\"Balról jobbra\",\"langDirRtl\":\"Jobbról balra\",\"langCode\":\"Nyelv kódja\",\"longDescr\":\"Részletes leírás webcíme\",\"cssClass\":\"Stíluskészlet\",\"advisoryTitle\":\"Súgócimke\",\"cssStyle\":\"Stílus\",\"ok\":\"Rendben\",\"cancel\":\"Mégsem\",\"close\":\"Bezárás\",\"preview\":\"Előnézet\",\"resize\":\"Húzza az átméretezéshez\",\"generalTab\":\"Általános\",\"advancedTab\":\"További opciók\",\"validateNumberFailed\":\"A mezőbe csak számokat írhat.\",\"confirmNewPage\":\"Minden nem mentett változás el fog veszni! Biztosan be szeretné tölteni az oldalt?\",\"confirmCancel\":\"Az űrlap tartalma megváltozott, ám a változásokat nem rögzítette. Biztosan be szeretné zárni az űrlapot?\",\"options\":\"Beállítások\",\"target\":\"Cél\",\"targetNew\":\"Új ablak (_blank)\",\"targetTop\":\"Legfelső ablak (_top)\",\"targetSelf\":\"Aktuális ablakban (_self)\",\"targetParent\":\"Szülő ablak (_parent)\",\"langDirLTR\":\"Balról jobbra (LTR)\",\"langDirRTL\":\"Jobbról balra (RTL)\",\"styles\":\"Stílus\",\"cssClasses\":\"Stíluslap osztály\",\"width\":\"Szélesség\",\"height\":\"Magasság\",\"align\":\"Igazítás\",\"alignLeft\":\"Bal\",\"alignRight\":\"Jobbra\",\"alignCenter\":\"Középre\",\"alignJustify\":\"Sorkizárt\",\"alignTop\":\"Tetejére\",\"alignMiddle\":\"Középre\",\"alignBottom\":\"Aljára\",\"alignNone\":\"None\",\"invalidValue\":\"Érvénytelen érték.\",\"invalidHeight\":\"A magasság mezőbe csak számokat írhat.\",\"invalidWidth\":\"A szélesség mezőbe csak számokat írhat.\",\"invalidCssLength\":\"\\\"%1\\\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes CSS egységgel megjelölve(px, %, in, cm, mm, em, ex, pt vagy pc).\",\"invalidHtmlLength\":\"\\\"%1\\\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes HTML egységgel megjelölve(px vagy %).\",\"invalidInlineStyle\":\"Az inline stílusnak megadott értéknek tartalmaznia kell egy vagy több rekordot a \\\"name : value\\\" formátumban, pontosvesszővel elválasztva.\",\"cssLengthTooltip\":\"Adjon meg egy számot értéknek pixelekben vagy egy számot érvényes CSS mértékegységben (px, %, in, cm, mm, em, ex, pt, vagy pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, nem elérhető</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Minden jog fenntartva.\",\"dlgTitle\":\"CKEditor névjegy\",\"help\":\"Itt találsz segítséget: $1\",\"moreInfo\":\"Licenszelési információkért kérjük látogassa meg weboldalunkat:\",\"title\":\"CKEditor névjegy\",\"userGuide\":\"CKEditor Felhasználói útmutató\"},\"basicstyles\":{\"bold\":\"Félkövér\",\"italic\":\"Dőlt\",\"strike\":\"Áthúzott\",\"subscript\":\"Alsó index\",\"superscript\":\"Felső index\",\"underline\":\"Aláhúzott\"},\"blockquote\":{\"toolbar\":\"Idézet blokk\"},\"clipboard\":{\"copy\":\"Másolás\",\"copyError\":\"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).\",\"cut\":\"Kivágás\",\"cutError\":\"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).\",\"paste\":\"Beillesztés\",\"pasteArea\":\"Beszúrás mező\",\"pasteMsg\":\"Másolja be az alábbi mezőbe a <STRONG>Ctrl/Cmd+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.\",\"securityMsg\":\"A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.\",\"title\":\"Beillesztés\"},\"contextmenu\":{\"options\":\"Helyi menü opciók\"},\"button\":{\"selectedLabel\":\"%1 (Kiválasztva)\"},\"toolbar\":{\"toolbarCollapse\":\"Eszköztár összecsukása\",\"toolbarExpand\":\"Eszköztár szétnyitása\",\"toolbarGroups\":{\"document\":\"Dokumentum\",\"clipboard\":\"Vágólap/Visszavonás\",\"editing\":\"Szerkesztés\",\"forms\":\"Űrlapok\",\"basicstyles\":\"Alapstílusok\",\"paragraph\":\"Bekezdés\",\"links\":\"Hivatkozások\",\"insert\":\"Beszúrás\",\"styles\":\"Stílusok\",\"colors\":\"Színek\",\"tools\":\"Eszközök\"},\"toolbars\":\"Szerkesztő Eszköztár\"},\"elementspath\":{\"eleLabel\":\"Elem utak\",\"eleTitle\":\"%1 elem\"},\"format\":{\"label\":\"Formátum\",\"panelTitle\":\"Formátum\",\"tag_address\":\"Címsor\",\"tag_div\":\"Bekezdés (DIV)\",\"tag_h1\":\"Fejléc 1\",\"tag_h2\":\"Fejléc 2\",\"tag_h3\":\"Fejléc 3\",\"tag_h4\":\"Fejléc 4\",\"tag_h5\":\"Fejléc 5\",\"tag_h6\":\"Fejléc 6\",\"tag_p\":\"Normál\",\"tag_pre\":\"Formázott\"},\"horizontalrule\":{\"toolbar\":\"Elválasztóvonal beillesztése\"},\"image\":{\"alt\":\"Alternatív szöveg\",\"border\":\"Keret\",\"btnUpload\":\"Küldés a szerverre\",\"button2Img\":\"A kiválasztott képgombból sima képet szeretne csinálni?\",\"hSpace\":\"Vízsz. táv\",\"img2Button\":\"A kiválasztott képből képgombot szeretne csinálni?\",\"infoTab\":\"Alaptulajdonságok\",\"linkTab\":\"Hivatkozás\",\"lockRatio\":\"Arány megtartása\",\"menu\":\"Kép tulajdonságai\",\"resetSize\":\"Eredeti méret\",\"title\":\"Kép tulajdonságai\",\"titleButton\":\"Képgomb tulajdonságai\",\"upload\":\"Feltöltés\",\"urlMissing\":\"Hiányzik a kép URL-je\",\"vSpace\":\"Függ. táv\",\"validateBorder\":\"A keret méretének egész számot kell beírni!\",\"validateHSpace\":\"Vízszintes távolságnak egész számot kell beírni!\",\"validateVSpace\":\"Függőleges távolságnak egész számot kell beírni!\"},\"indent\":{\"indent\":\"Behúzás növelése\",\"outdent\":\"Behúzás csökkentése\"},\"fakeobjects\":{\"anchor\":\"Horgony\",\"flash\":\"Flash animáció\",\"hiddenfield\":\"Rejtett mezõ\",\"iframe\":\"IFrame\",\"unknown\":\"Ismeretlen objektum\"},\"link\":{\"acccessKey\":\"Billentyűkombináció\",\"advanced\":\"További opciók\",\"advisoryContentType\":\"Súgó tartalomtípusa\",\"advisoryTitle\":\"Súgócimke\",\"anchor\":{\"toolbar\":\"Horgony beillesztése/szerkesztése\",\"menu\":\"Horgony tulajdonságai\",\"title\":\"Horgony tulajdonságai\",\"name\":\"Horgony neve\",\"errorName\":\"Kérem adja meg a horgony nevét\",\"remove\":\"Horgony eltávolítása\"},\"anchorId\":\"Azonosító szerint\",\"anchorName\":\"Horgony név szerint\",\"charset\":\"Hivatkozott tartalom kódlapja\",\"cssClasses\":\"Stíluskészlet\",\"emailAddress\":\"E-Mail cím\",\"emailBody\":\"Üzenet\",\"emailSubject\":\"Üzenet tárgya\",\"id\":\"Id\",\"info\":\"Alaptulajdonságok\",\"langCode\":\"Írás iránya\",\"langDir\":\"Írás iránya\",\"langDirLTR\":\"Balról jobbra\",\"langDirRTL\":\"Jobbról balra\",\"menu\":\"Hivatkozás módosítása\",\"name\":\"Név\",\"noAnchors\":\"(Nincs horgony a dokumentumban)\",\"noEmail\":\"Adja meg az E-Mail címet\",\"noUrl\":\"Adja meg a hivatkozás webcímét\",\"other\":\"<más>\",\"popupDependent\":\"Szülőhöz kapcsolt (csak Netscape)\",\"popupFeatures\":\"Felugró ablak jellemzői\",\"popupFullScreen\":\"Teljes képernyő (csak IE)\",\"popupLeft\":\"Bal pozíció\",\"popupLocationBar\":\"Címsor\",\"popupMenuBar\":\"Menü sor\",\"popupResizable\":\"Átméretezés\",\"popupScrollBars\":\"Gördítősáv\",\"popupStatusBar\":\"Állapotsor\",\"popupToolbar\":\"Eszköztár\",\"popupTop\":\"Felső pozíció\",\"rel\":\"Kapcsolat típusa\",\"selectAnchor\":\"Horgony választása\",\"styles\":\"Stílus\",\"tabIndex\":\"Tabulátor index\",\"target\":\"Tartalom megjelenítése\",\"targetFrame\":\"<keretben>\",\"targetFrameName\":\"Keret neve\",\"targetPopup\":\"<felugró ablakban>\",\"targetPopupName\":\"Felugró ablak neve\",\"title\":\"Hivatkozás tulajdonságai\",\"toAnchor\":\"Horgony az oldalon\",\"toEmail\":\"E-Mail\",\"toUrl\":\"URL\",\"toolbar\":\"Hivatkozás beillesztése/módosítása\",\"type\":\"Hivatkozás típusa\",\"unlink\":\"Hivatkozás törlése\",\"upload\":\"Feltöltés\"},\"list\":{\"bulletedlist\":\"Felsorolás\",\"numberedlist\":\"Számozás\"},\"magicline\":{\"title\":\"Szúrja be a bekezdést ide\"},\"maximize\":{\"maximize\":\"Teljes méret\",\"minimize\":\"Kis méret\"},\"pastetext\":{\"button\":\"Beillesztés formázatlan szövegként\",\"title\":\"Beillesztés formázatlan szövegként\"},\"pastefromword\":{\"confirmCleanup\":\"Úgy tűnik a beillesztett szöveget Word-ből másolt át. Meg szeretné tisztítani a szöveget? (ajánlott)\",\"error\":\"Egy belső hiba miatt nem sikerült megtisztítani a szöveget\",\"title\":\"Beillesztés Word-ből\",\"toolbar\":\"Beillesztés Word-ből\"},\"removeformat\":{\"toolbar\":\"Formázás eltávolítása\"},\"sourcearea\":{\"toolbar\":\"Forráskód\"},\"specialchar\":{\"options\":\"Speciális karakter opciók\",\"title\":\"Speciális karakter választása\",\"toolbar\":\"Speciális karakter beillesztése\"},\"scayt\":{\"btn_about\":\"SCAYT névjegy\",\"btn_dictionaries\":\"Szótár\",\"btn_disable\":\"SCAYT letiltása\",\"btn_enable\":\"SCAYT engedélyezése\",\"btn_langs\":\"Nyelvek\",\"btn_options\":\"Beállítások\",\"text_title\":\"Helyesírás ellenőrzés gépelés közben\"},\"stylescombo\":{\"label\":\"Stílus\",\"panelTitle\":\"Formázási stílusok\",\"panelTitle1\":\"Blokk stílusok\",\"panelTitle2\":\"Inline stílusok\",\"panelTitle3\":\"Objektum stílusok\"},\"table\":{\"border\":\"Szegélyméret\",\"caption\":\"Felirat\",\"cell\":{\"menu\":\"Cella\",\"insertBefore\":\"Beszúrás balra\",\"insertAfter\":\"Beszúrás jobbra\",\"deleteCell\":\"Cellák törlése\",\"merge\":\"Cellák egyesítése\",\"mergeRight\":\"Cellák egyesítése jobbra\",\"mergeDown\":\"Cellák egyesítése lefelé\",\"splitHorizontal\":\"Cellák szétválasztása vízszintesen\",\"splitVertical\":\"Cellák szétválasztása függőlegesen\",\"title\":\"Cella tulajdonságai\",\"cellType\":\"Cella típusa\",\"rowSpan\":\"Függőleges egyesítés\",\"colSpan\":\"Vízszintes egyesítés\",\"wordWrap\":\"Hosszú sorok törése\",\"hAlign\":\"Vízszintes igazítás\",\"vAlign\":\"Függőleges igazítás\",\"alignBaseline\":\"Alapvonalra\",\"bgColor\":\"Háttér színe\",\"borderColor\":\"Keret színe\",\"data\":\"Adat\",\"header\":\"Fejléc\",\"yes\":\"Igen\",\"no\":\"Nem\",\"invalidWidth\":\"A szélesség mezőbe csak számokat írhat.\",\"invalidHeight\":\"A magasság mezőbe csak számokat írhat.\",\"invalidRowSpan\":\"A függőleges egyesítés mezőbe csak számokat írhat.\",\"invalidColSpan\":\"A vízszintes egyesítés mezőbe csak számokat írhat.\",\"chooseColor\":\"Válasszon\"},\"cellPad\":\"Cella belső margó\",\"cellSpace\":\"Cella térköz\",\"column\":{\"menu\":\"Oszlop\",\"insertBefore\":\"Beszúrás balra\",\"insertAfter\":\"Beszúrás jobbra\",\"deleteColumn\":\"Oszlopok törlése\"},\"columns\":\"Oszlopok\",\"deleteTable\":\"Táblázat törlése\",\"headers\":\"Fejlécek\",\"headersBoth\":\"Mindkettő\",\"headersColumn\":\"Első oszlop\",\"headersNone\":\"Nincsenek\",\"headersRow\":\"Első sor\",\"invalidBorder\":\"A szegélyméret mezőbe csak számokat írhat.\",\"invalidCellPadding\":\"A cella belső margó mezőbe csak számokat írhat.\",\"invalidCellSpacing\":\"A cella térköz mezőbe csak számokat írhat.\",\"invalidCols\":\"Az oszlopok számának nagyobbnak kell lenni mint 0.\",\"invalidHeight\":\"A magasság mezőbe csak számokat írhat.\",\"invalidRows\":\"A sorok számának nagyobbnak kell lenni mint 0.\",\"invalidWidth\":\"A szélesség mezőbe csak számokat írhat.\",\"menu\":\"Táblázat tulajdonságai\",\"row\":{\"menu\":\"Sor\",\"insertBefore\":\"Beszúrás fölé\",\"insertAfter\":\"Beszúrás alá\",\"deleteRow\":\"Sorok törlése\"},\"rows\":\"Sorok\",\"summary\":\"Leírás\",\"title\":\"Táblázat tulajdonságai\",\"toolbar\":\"Táblázat\",\"widthPc\":\"százalék\",\"widthPx\":\"képpont\",\"widthUnit\":\"Szélesség egység\"},\"undo\":{\"redo\":\"Ismétlés\",\"undo\":\"Visszavonás\"},\"wsc\":{\"btnIgnore\":\"Kihagyja\",\"btnIgnoreAll\":\"Mindet kihagyja\",\"btnReplace\":\"Csere\",\"btnReplaceAll\":\"Összes cseréje\",\"btnUndo\":\"Visszavonás\",\"changeTo\":\"Módosítás\",\"errorLoading\":\"Hiba a szolgáltatás host betöltése közben: %s.\",\"ieSpellDownload\":\"A helyesírás-ellenőrző nincs telepítve. Szeretné letölteni most?\",\"manyChanges\":\"Helyesírás-ellenőrzés kész: %1 szó cserélve\",\"noChanges\":\"Helyesírás-ellenőrzés kész: Nincs változtatott szó\",\"noMispell\":\"Helyesírás-ellenőrzés kész: Nem találtam hibát\",\"noSuggestions\":\"Nincs javaslat\",\"notAvailable\":\"Sajnálom, de a szolgáltatás jelenleg nem elérhető.\",\"notInDic\":\"Nincs a szótárban\",\"oneChange\":\"Helyesírás-ellenőrzés kész: Egy szó cserélve\",\"progress\":\"Helyesírás-ellenőrzés folyamatban...\",\"title\":\"Helyesírás ellenörző\",\"toolbar\":\"Helyesírás-ellenőrzés\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/id.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['id']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Tekan ALT 0 untuk bantuan.\",\"browseServer\":\"Jelajah Server\",\"url\":\"URL\",\"protocol\":\"Protokol\",\"upload\":\"Unggah\",\"uploadSubmit\":\"Kirim ke Server\",\"image\":\"Gambar\",\"flash\":\"Flash\",\"form\":\"Formulir\",\"checkbox\":\"Kotak Cek\",\"radio\":\"Tombol Radio\",\"textField\":\"Kolom Teks\",\"textarea\":\"Area Teks\",\"hiddenField\":\"Kolom Tersembunyi\",\"button\":\"Tombol\",\"select\":\"Kolom Seleksi\",\"imageButton\":\"Tombol Gambar\",\"notSet\":\"<tidak diatur>\",\"id\":\"Id\",\"name\":\"Nama\",\"langDir\":\"Arah Bahasa\",\"langDirLtr\":\"Kiri ke Kanan (LTR)\",\"langDirRtl\":\"Kanan ke Kiri\",\"langCode\":\"Kode Bahasa\",\"longDescr\":\"Deskripsi URL Panjang\",\"cssClass\":\"Kelas Stylesheet\",\"advisoryTitle\":\"Penasehat Judul\",\"cssStyle\":\"Gaya\",\"ok\":\"OK\",\"cancel\":\"Batal\",\"close\":\"Tutup\",\"preview\":\"Pratinjau\",\"resize\":\"Ubah ukuran\",\"generalTab\":\"Umum\",\"advancedTab\":\"Advanced\",\"validateNumberFailed\":\"Nilai ini tidak sebuah angka\",\"confirmNewPage\":\"Semua perubahan yang tidak disimpan di konten ini akan hilang. Apakah anda yakin ingin memuat halaman baru?\",\"confirmCancel\":\"Beberapa opsi telah berubah. Apakah anda yakin ingin menutup dialog?\",\"options\":\"Opsi\",\"target\":\"Sasaran\",\"targetNew\":\"Jendela Baru (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"Jendela yang Sama (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"Kiri ke Kanan (LTR)\",\"langDirRTL\":\"Kanan ke Kiri (RTL)\",\"styles\":\"Gaya\",\"cssClasses\":\"Kelas Stylesheet\",\"width\":\"Lebar\",\"height\":\"Tinggi\",\"align\":\"Penjajaran\",\"alignLeft\":\"Kiri\",\"alignRight\":\"Kanan\",\"alignCenter\":\"Tengah\",\"alignJustify\":\"Rata kiri-kanan\",\"alignTop\":\"Atas\",\"alignMiddle\":\"Tengah\",\"alignBottom\":\"Bawah\",\"alignNone\":\"None\",\"invalidValue\":\"Nilai tidak sah.\",\"invalidHeight\":\"Tinggi harus sebuah angka.\",\"invalidWidth\":\"Lebar harus sebuah angka.\",\"invalidCssLength\":\"Nilai untuk \\\"%1\\\" harus sebuah angkat positif dengan atau tanpa pengukuran unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Nilai yang dispesifikasian untuk kolom \\\"%1\\\" harus sebuah angka positif dengan atau tanpa sebuah unit pengukuran HTML (px atau %) yang valid.\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Masukkan sebuah angka untuk sebuah nilai dalam pixel atau sebuah angka dengan unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, tidak tersedia</span>\"},\"about\":{\"copy\":\"Hak cipta &copy; $1. All rights reserved.\",\"dlgTitle\":\"Tentang CKEditor\",\"help\":\"Cel $1 untuk bantuan.\",\"moreInfo\":\"Untuk informasi lisensi silahkan kunjungi web site kami:\",\"title\":\"Tentang CKEditor\",\"userGuide\":\"Petunjuk Pengguna CKEditor\"},\"basicstyles\":{\"bold\":\"Huruf Tebal\",\"italic\":\"Huruf Miring\",\"strike\":\"Strikethrough\",\"subscript\":\"Subscript\",\"superscript\":\"Superscript\",\"underline\":\"Garis Bawah\"},\"blockquote\":{\"toolbar\":\"Kutipan Blok\"},\"clipboard\":{\"copy\":\"Salin\",\"copyError\":\"Pengaturan keamanan peramban anda tidak mengizinkan editor untuk mengeksekusi operasi menyalin secara otomatis. Mohon gunakan papan tuts (Ctrl/Cmd+C)\",\"cut\":\"Potong\",\"cutError\":\"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).\",\"paste\":\"Tempel\",\"pasteArea\":\"Area Tempel\",\"pasteMsg\":\"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK\",\"securityMsg\":\"Karena pengaturan keamanan peramban anda, editor tida dapat mengakses data clipboard anda secara langsung. Anda harus mem-paste kembali pada halaman ini\",\"title\":\"Tempel\"},\"contextmenu\":{\"options\":\"Opsi Konteks Pilihan\"},\"button\":{\"selectedLabel\":\"%1(Dipilih)\"},\"toolbar\":{\"toolbarCollapse\":\"Ciutkan Toolbar\",\"toolbarExpand\":\"Bentangkan Toolbar\",\"toolbarGroups\":{\"document\":\"Dokumen\",\"clipboard\":\"Papan klip / Kembalikan perlakuan\",\"editing\":\"Sunting\",\"forms\":\"Formulir\",\"basicstyles\":\"Gaya Dasar\",\"paragraph\":\"Paragraf\",\"links\":\"Tautan\",\"insert\":\"Sisip\",\"styles\":\"Gaya\",\"colors\":\"Warna\",\"tools\":\"Alat\"},\"toolbars\":\"Toolbar Penyunting\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Bentuk\",\"panelTitle\":\"Bentuk Paragraf\",\"tag_address\":\"Alamat\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Heading 1\",\"tag_h2\":\"Heading 2\",\"tag_h3\":\"Heading 3\",\"tag_h4\":\"Heading 4\",\"tag_h5\":\"Heading 5\",\"tag_h6\":\"Heading 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Membentuk\"},\"horizontalrule\":{\"toolbar\":\"Sisip Garis Horisontal\"},\"image\":{\"alt\":\"Teks alternatif\",\"border\":\"Batas\",\"btnUpload\":\"Kirim ke Server\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Apakah anda ingin mengubah gambar yang dipilih pada tombol gambar?\",\"infoTab\":\"Info Gambar\",\"linkTab\":\"Tautan\",\"lockRatio\":\"Lock Ratio\",\"menu\":\"Image Properties\",\"resetSize\":\"Atur Ulang Ukuran\",\"title\":\"Image Properties\",\"titleButton\":\"Image Button Properties\",\"upload\":\"Unggah\",\"urlMissing\":\"Image source URL is missing.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"Border harus berupa angka\",\"validateHSpace\":\"HSpace harus berupa angka\",\"validateVSpace\":\"VSpace must be a whole number.\"},\"indent\":{\"indent\":\"Tingkatkan Lekuk\",\"outdent\":\"Kurangi Lekuk\"},\"fakeobjects\":{\"anchor\":\"Anchor\",\"flash\":\"Animasi Flash\",\"hiddenfield\":\"Kolom Tersembunyi\",\"iframe\":\"IFrame\",\"unknown\":\"Obyek Tak Dikenal\"},\"link\":{\"acccessKey\":\"Access Key\",\"advanced\":\"Advanced\",\"advisoryContentType\":\"Advisory Content Type\",\"advisoryTitle\":\"Penasehat Judul\",\"anchor\":{\"toolbar\":\"Anchor\",\"menu\":\"Edit Anchor\",\"title\":\"Anchor Properties\",\"name\":\"Anchor Name\",\"errorName\":\"Please type the anchor name\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"By Element Id\",\"anchorName\":\"By Anchor Name\",\"charset\":\"Linked Resource Charset\",\"cssClasses\":\"Kelas Stylesheet\",\"emailAddress\":\"Alamat E-mail\",\"emailBody\":\"Message Body\",\"emailSubject\":\"Judul Pesan\",\"id\":\"Id\",\"info\":\"Link Info\",\"langCode\":\"Kode Bahasa\",\"langDir\":\"Arah Bahasa\",\"langDirLTR\":\"Kiri ke Kanan (LTR)\",\"langDirRTL\":\"Kanan ke Kiri (RTL)\",\"menu\":\"Sunting Tautan\",\"name\":\"Nama\",\"noAnchors\":\"(No anchors available in the document)\",\"noEmail\":\"Silahkan ketikkan alamat e-mail\",\"noUrl\":\"Silahkan ketik URL tautan\",\"other\":\"<lainnya>\",\"popupDependent\":\"Dependent (Netscape)\",\"popupFeatures\":\"Popup Window Features\",\"popupFullScreen\":\"Full Screen (IE)\",\"popupLeft\":\"Left Position\",\"popupLocationBar\":\"Location Bar\",\"popupMenuBar\":\"Menu Bar\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"Scroll Bars\",\"popupStatusBar\":\"Status Bar\",\"popupToolbar\":\"Toolbar\",\"popupTop\":\"Top Position\",\"rel\":\"Hubungan\",\"selectAnchor\":\"Select an Anchor\",\"styles\":\"Gaya\",\"tabIndex\":\"Tab Index\",\"target\":\"Sasaran\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Target Frame Name\",\"targetPopup\":\"<popup window>\",\"targetPopupName\":\"Popup Window Name\",\"title\":\"Tautan\",\"toAnchor\":\"Link to anchor in the text\",\"toEmail\":\"E-mail\",\"toUrl\":\"URL\",\"toolbar\":\"Tautan\",\"type\":\"Link Type\",\"unlink\":\"Unlink\",\"upload\":\"Unggah\"},\"list\":{\"bulletedlist\":\"Sisip/Hapus Daftar Bullet\",\"numberedlist\":\"Sisip/Hapus Daftar Bernomor\"},\"magicline\":{\"title\":\"Masukkan paragraf disini\"},\"maximize\":{\"maximize\":\"Memperbesar\",\"minimize\":\"Memperkecil\"},\"pastetext\":{\"button\":\"Tempel sebagai teks polos\",\"title\":\"Tempel sebagai Teks Polos\"},\"pastefromword\":{\"confirmCleanup\":\"Teks yang ingin anda tempel sepertinya di salin dari Word. Apakah anda mau membersihkannya sebelum menempel?\",\"error\":\"Tidak mungkin membersihkan data yang ditempel dikerenakan kesalahan internal\",\"title\":\"Tempel dari Word\",\"toolbar\":\"Tempel dari Word\"},\"removeformat\":{\"toolbar\":\"Hapus Format\"},\"sourcearea\":{\"toolbar\":\"Sumber\"},\"specialchar\":{\"options\":\"Opsi spesial karakter\",\"title\":\"Pilih spesial karakter\",\"toolbar\":\"Sisipkan spesial karakter\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Gaya\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"Ukuran batas\",\"caption\":\"Judul halaman\",\"cell\":{\"menu\":\"Sel\",\"insertBefore\":\"Sisip Sel Sebelum\",\"insertAfter\":\"Sisip Sel Setelah\",\"deleteCell\":\"Hapus Sel\",\"merge\":\"Gabungkan Sel\",\"mergeRight\":\"Gabungkan ke Kanan\",\"mergeDown\":\"Gabungkan ke Bawah\",\"splitHorizontal\":\"Pisahkan Sel Secara Horisontal\",\"splitVertical\":\"Pisahkan Sel Secara Vertikal\",\"title\":\"Properti Sel\",\"cellType\":\"Tipe Sel\",\"rowSpan\":\"Rentang antar baris\",\"colSpan\":\"Rentang antar kolom\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Jajaran Horisontal\",\"vAlign\":\"Jajaran Vertikal\",\"alignBaseline\":\"Dasar\",\"bgColor\":\"Warna Latar Belakang\",\"borderColor\":\"Warna Batasan\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Ya\",\"no\":\"Tidak\",\"invalidWidth\":\"Lebar sel harus sebuah angka.\",\"invalidHeight\":\"Tinggi sel harus sebuah angka\",\"invalidRowSpan\":\"Rentang antar baris harus angka seluruhnya.\",\"invalidColSpan\":\"Rentang antar kolom harus angka seluruhnya\",\"chooseColor\":\"Pilih\"},\"cellPad\":\"Sel spasi dalam\",\"cellSpace\":\"Spasi antar sel\",\"column\":{\"menu\":\"Kolom\",\"insertBefore\":\"Sisip Kolom Sebelum\",\"insertAfter\":\"Sisip Kolom Sesudah\",\"deleteColumn\":\"Hapus Kolom\"},\"columns\":\"Kolom\",\"deleteTable\":\"Hapus Tabel\",\"headers\":\"Headers\",\"headersBoth\":\"Keduanya\",\"headersColumn\":\"Kolom pertama\",\"headersNone\":\"Tidak ada\",\"headersRow\":\"Baris Pertama\",\"invalidBorder\":\"Ukuran batasan harus sebuah angka\",\"invalidCellPadding\":\"'Spasi dalam' sel harus angka positif.\",\"invalidCellSpacing\":\"Spasi antar sel harus angka positif.\",\"invalidCols\":\"Jumlah kolom harus sebuah angka lebih besar dari 0\",\"invalidHeight\":\"Tinggi tabel harus sebuah angka.\",\"invalidRows\":\"Jumlah barus harus sebuah angka dan lebih besar dari 0.\",\"invalidWidth\":\"Lebar tabel harus sebuah angka.\",\"menu\":\"Properti Tabel\",\"row\":{\"menu\":\"Baris\",\"insertBefore\":\"Sisip Baris Sebelum\",\"insertAfter\":\"Sisip Baris Sesudah\",\"deleteRow\":\"Hapus Baris\"},\"rows\":\"Baris\",\"summary\":\"Intisari\",\"title\":\"Properti Tabel\",\"toolbar\":\"Tabe\",\"widthPc\":\"persen\",\"widthPx\":\"piksel\",\"widthUnit\":\"lebar satuan\"},\"undo\":{\"redo\":\"Kembali lakukan\",\"undo\":\"Batalkan perlakuan\"},\"wsc\":{\"btnIgnore\":\"Ignore\",\"btnIgnoreAll\":\"Ignore All\",\"btnReplace\":\"Replace\",\"btnReplaceAll\":\"Replace All\",\"btnUndo\":\"Undo\",\"changeTo\":\"Change to\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Spell checker not installed. Do you want to download it now?\",\"manyChanges\":\"Spell check complete: %1 words changed\",\"noChanges\":\"Spell check complete: No words changed\",\"noMispell\":\"Spell check complete: No misspellings found\",\"noSuggestions\":\"- No suggestions -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Not in dictionary\",\"oneChange\":\"Spell check complete: One word changed\",\"progress\":\"Spell check in progress...\",\"title\":\"Spell Checker\",\"toolbar\":\"Check Spelling\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/is.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['is']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Press ALT 0 for help\",\"browseServer\":\"Fletta í skjalasafni\",\"url\":\"Vefslóð\",\"protocol\":\"Samskiptastaðall\",\"upload\":\"Senda upp\",\"uploadSubmit\":\"Hlaða upp\",\"image\":\"Setja inn mynd\",\"flash\":\"Flash\",\"form\":\"Setja inn innsláttarform\",\"checkbox\":\"Setja inn hökunarreit\",\"radio\":\"Setja inn valhnapp\",\"textField\":\"Setja inn textareit\",\"textarea\":\"Setja inn textasvæði\",\"hiddenField\":\"Setja inn falið svæði\",\"button\":\"Setja inn hnapp\",\"select\":\"Setja inn lista\",\"imageButton\":\"Setja inn myndahnapp\",\"notSet\":\"<ekkert valið>\",\"id\":\"Auðkenni\",\"name\":\"Nafn\",\"langDir\":\"Lesstefna\",\"langDirLtr\":\"Frá vinstri til hægri (LTR)\",\"langDirRtl\":\"Frá hægri til vinstri (RTL)\",\"langCode\":\"Tungumálakóði\",\"longDescr\":\"Nánari lýsing\",\"cssClass\":\"Stílsniðsflokkur\",\"advisoryTitle\":\"Titill\",\"cssStyle\":\"Stíll\",\"ok\":\"Í lagi\",\"cancel\":\"Hætta við\",\"close\":\"Close\",\"preview\":\"Forskoða\",\"resize\":\"Resize\",\"generalTab\":\"Almennt\",\"advancedTab\":\"Tæknilegt\",\"validateNumberFailed\":\"This value is not a number.\",\"confirmNewPage\":\"Any unsaved changes to this content will be lost. Are you sure you want to load new page?\",\"confirmCancel\":\"You have changed some options. Are you sure you want to close the dialog window?\",\"options\":\"Options\",\"target\":\"Mark\",\"targetNew\":\"New Window (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"Same Window (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"Frá vinstri til hægri (LTR)\",\"langDirRTL\":\"Frá hægri til vinstri (RTL)\",\"styles\":\"Stíll\",\"cssClasses\":\"Stílsniðsflokkur\",\"width\":\"Breidd\",\"height\":\"Hæð\",\"align\":\"Jöfnun\",\"alignLeft\":\"Vinstri\",\"alignRight\":\"Hægri\",\"alignCenter\":\"Miðjað\",\"alignJustify\":\"Jafna báðum megin\",\"alignTop\":\"Efst\",\"alignMiddle\":\"Miðjuð\",\"alignBottom\":\"Neðst\",\"alignNone\":\"None\",\"invalidValue\":\"Invalid value.\",\"invalidHeight\":\"Height must be a number.\",\"invalidWidth\":\"Width must be a number.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"About CKEditor\",\"help\":\"Check $1 for help.\",\"moreInfo\":\"For licensing information please visit our web site:\",\"title\":\"About CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"Feitletrað\",\"italic\":\"Skáletrað\",\"strike\":\"Yfirstrikað\",\"subscript\":\"Niðurskrifað\",\"superscript\":\"Uppskrifað\",\"underline\":\"Undirstrikað\"},\"blockquote\":{\"toolbar\":\"Inndráttur\"},\"clipboard\":{\"copy\":\"Afrita\",\"copyError\":\"Öryggisstillingar vafrans þíns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið í afrita (Ctrl/Cmd+C).\",\"cut\":\"Klippa\",\"cutError\":\"Öryggisstillingar vafrans þíns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið í klippa (Ctrl/Cmd+X).\",\"paste\":\"Líma\",\"pasteArea\":\"Paste Area\",\"pasteMsg\":\"Límdu í svæðið hér að neðan og (<STRONG>Ctrl/Cmd+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.\",\"securityMsg\":\"Vegna öryggisstillinga í vafranum þínum fær ritillinn ekki beinan aðgang að klippuborðinu. Þú verður að líma innihaldið aftur inn í þennan glugga.\",\"title\":\"Líma\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Collapse Toolbar\",\"toolbarExpand\":\"Expand Toolbar\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"Editor toolbars\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Stílsnið\",\"panelTitle\":\"Stílsnið\",\"tag_address\":\"Vistfang\",\"tag_div\":\"Venjulegt (DIV)\",\"tag_h1\":\"Fyrirsögn 1\",\"tag_h2\":\"Fyrirsögn 2\",\"tag_h3\":\"Fyrirsögn 3\",\"tag_h4\":\"Fyrirsögn 4\",\"tag_h5\":\"Fyrirsögn 5\",\"tag_h6\":\"Fyrirsögn 6\",\"tag_p\":\"Venjulegt letur\",\"tag_pre\":\"Forsniðið\"},\"horizontalrule\":{\"toolbar\":\"Lóðrétt lína\"},\"image\":{\"alt\":\"Baklægur texti\",\"border\":\"Rammi\",\"btnUpload\":\"Hlaða upp\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"Vinstri bil\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"Almennt\",\"linkTab\":\"Stikla\",\"lockRatio\":\"Festa stærðarhlutfall\",\"menu\":\"Eigindi myndar\",\"resetSize\":\"Reikna stærð\",\"title\":\"Eigindi myndar\",\"titleButton\":\"Eigindi myndahnapps\",\"upload\":\"Hlaða upp\",\"urlMissing\":\"Image source URL is missing.\",\"vSpace\":\"Hægri bil\",\"validateBorder\":\"Border must be a whole number.\",\"validateHSpace\":\"HSpace must be a whole number.\",\"validateVSpace\":\"VSpace must be a whole number.\"},\"indent\":{\"indent\":\"Minnka inndrátt\",\"outdent\":\"Auka inndrátt\"},\"fakeobjects\":{\"anchor\":\"Anchor\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"Hidden Field\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"Skammvalshnappur\",\"advanced\":\"Tæknilegt\",\"advisoryContentType\":\"Tegund innihalds\",\"advisoryTitle\":\"Titill\",\"anchor\":{\"toolbar\":\"Stofna/breyta kaflamerki\",\"menu\":\"Eigindi kaflamerkis\",\"title\":\"Eigindi kaflamerkis\",\"name\":\"Nafn bókamerkis\",\"errorName\":\"Sláðu inn nafn bókamerkis!\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"Eftir auðkenni einingar\",\"anchorName\":\"Eftir akkerisnafni\",\"charset\":\"Táknróf\",\"cssClasses\":\"Stílsniðsflokkur\",\"emailAddress\":\"Netfang\",\"emailBody\":\"Meginmál\",\"emailSubject\":\"Efni\",\"id\":\"Auðkenni\",\"info\":\"Almennt\",\"langCode\":\"Lesstefna\",\"langDir\":\"Lesstefna\",\"langDirLTR\":\"Frá vinstri til hægri (LTR)\",\"langDirRTL\":\"Frá hægri til vinstri (RTL)\",\"menu\":\"Breyta stiklu\",\"name\":\"Nafn\",\"noAnchors\":\"<Engin bókamerki á skrá>\",\"noEmail\":\"Sláðu inn netfang!\",\"noUrl\":\"Sláðu inn veffang stiklunnar!\",\"other\":\"<annar>\",\"popupDependent\":\"Háð venslum (Netscape)\",\"popupFeatures\":\"Eigindi sprettiglugga\",\"popupFullScreen\":\"Heilskjár (IE)\",\"popupLeft\":\"Fjarlægð frá vinstri\",\"popupLocationBar\":\"Fanglína\",\"popupMenuBar\":\"Vallína\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"Skrunstikur\",\"popupStatusBar\":\"Stöðustika\",\"popupToolbar\":\"Verkfærastika\",\"popupTop\":\"Fjarlægð frá efri brún\",\"rel\":\"Relationship\",\"selectAnchor\":\"Veldu akkeri\",\"styles\":\"Stíll\",\"tabIndex\":\"Raðnúmer innsláttarreits\",\"target\":\"Mark\",\"targetFrame\":\"<rammi>\",\"targetFrameName\":\"Nafn markglugga\",\"targetPopup\":\"<sprettigluggi>\",\"targetPopupName\":\"Nafn sprettiglugga\",\"title\":\"Stikla\",\"toAnchor\":\"Bókamerki á þessari síðu\",\"toEmail\":\"Netfang\",\"toUrl\":\"Vefslóð\",\"toolbar\":\"Stofna/breyta stiklu\",\"type\":\"Stikluflokkur\",\"unlink\":\"Fjarlægja stiklu\",\"upload\":\"Senda upp\"},\"list\":{\"bulletedlist\":\"Punktalisti\",\"numberedlist\":\"Númeraður listi\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Maximize\",\"minimize\":\"Minimize\"},\"pastetext\":{\"button\":\"Líma sem ósniðinn texta\",\"title\":\"Líma sem ósniðinn texta\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"Líma úr Word\",\"toolbar\":\"Líma úr Word\"},\"removeformat\":{\"toolbar\":\"Fjarlægja snið\"},\"sourcearea\":{\"toolbar\":\"Kóði\"},\"specialchar\":{\"options\":\"Special Character Options\",\"title\":\"Velja tákn\",\"toolbar\":\"Setja inn merki\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Stílflokkur\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"Breidd ramma\",\"caption\":\"Titill\",\"cell\":{\"menu\":\"Reitur\",\"insertBefore\":\"Skjóta inn reiti fyrir aftan\",\"insertAfter\":\"Skjóta inn reiti fyrir framan\",\"deleteCell\":\"Fella reit\",\"merge\":\"Sameina reiti\",\"mergeRight\":\"Sameina til hægri\",\"mergeDown\":\"Sameina niður á við\",\"splitHorizontal\":\"Kljúfa reit lárétt\",\"splitVertical\":\"Kljúfa reit lóðrétt\",\"title\":\"Cell Properties\",\"cellType\":\"Cell Type\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Horizontal Alignment\",\"vAlign\":\"Vertical Alignment\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Background Color\",\"borderColor\":\"Border Color\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Yes\",\"no\":\"No\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Choose\"},\"cellPad\":\"Reitaspássía\",\"cellSpace\":\"Bil milli reita\",\"column\":{\"menu\":\"Dálkur\",\"insertBefore\":\"Skjóta inn dálki vinstra megin\",\"insertAfter\":\"Skjóta inn dálki hægra megin\",\"deleteColumn\":\"Fella dálk\"},\"columns\":\"Dálkar\",\"deleteTable\":\"Fella töflu\",\"headers\":\"Fyrirsagnir\",\"headersBoth\":\"Hvort tveggja\",\"headersColumn\":\"Fyrsti dálkur\",\"headersNone\":\"Engar\",\"headersRow\":\"Fyrsta röð\",\"invalidBorder\":\"Border size must be a number.\",\"invalidCellPadding\":\"Cell padding must be a positive number.\",\"invalidCellSpacing\":\"Cell spacing must be a positive number.\",\"invalidCols\":\"Number of columns must be a number greater than 0.\",\"invalidHeight\":\"Table height must be a number.\",\"invalidRows\":\"Number of rows must be a number greater than 0.\",\"invalidWidth\":\"Table width must be a number.\",\"menu\":\"Eigindi töflu\",\"row\":{\"menu\":\"Röð\",\"insertBefore\":\"Skjóta inn röð fyrir ofan\",\"insertAfter\":\"Skjóta inn röð fyrir neðan\",\"deleteRow\":\"Eyða röð\"},\"rows\":\"Raðir\",\"summary\":\"Áfram\",\"title\":\"Eigindi töflu\",\"toolbar\":\"Tafla\",\"widthPc\":\"prósent\",\"widthPx\":\"myndeindir\",\"widthUnit\":\"width unit\"},\"undo\":{\"redo\":\"Hætta við afturköllun\",\"undo\":\"Afturkalla\"},\"wsc\":{\"btnIgnore\":\"Hunsa\",\"btnIgnoreAll\":\"Hunsa allt\",\"btnReplace\":\"Skipta\",\"btnReplaceAll\":\"Skipta öllu\",\"btnUndo\":\"Til baka\",\"changeTo\":\"Tillaga\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Villuleit ekki sett upp.<br>Viltu setja hana upp?\",\"manyChanges\":\"Villuleit lokið: %1 orðum breytt\",\"noChanges\":\"Villuleit lokið: Engu orði breytt\",\"noMispell\":\"Villuleit lokið: Engin villa fannst\",\"noSuggestions\":\"- engar tillögur -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Ekki í orðabókinni\",\"oneChange\":\"Villuleit lokið: Einu orði breytt\",\"progress\":\"Villuleit í gangi...\",\"title\":\"Spell Checker\",\"toolbar\":\"Villuleit\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/it.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['it']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Pannello Rich Text Editor\",\"common\":{\"editorHelp\":\"Premi ALT 0 per aiuto\",\"browseServer\":\"Cerca sul server\",\"url\":\"URL\",\"protocol\":\"Protocollo\",\"upload\":\"Carica\",\"uploadSubmit\":\"Invia al server\",\"image\":\"Immagine\",\"flash\":\"Oggetto Flash\",\"form\":\"Modulo\",\"checkbox\":\"Checkbox\",\"radio\":\"Radio Button\",\"textField\":\"Campo di testo\",\"textarea\":\"Area di testo\",\"hiddenField\":\"Campo nascosto\",\"button\":\"Bottone\",\"select\":\"Menu di selezione\",\"imageButton\":\"Bottone immagine\",\"notSet\":\"<non impostato>\",\"id\":\"Id\",\"name\":\"Nome\",\"langDir\":\"Direzione scrittura\",\"langDirLtr\":\"Da Sinistra a Destra (LTR)\",\"langDirRtl\":\"Da Destra a Sinistra (RTL)\",\"langCode\":\"Codice Lingua\",\"longDescr\":\"URL descrizione estesa\",\"cssClass\":\"Nome classe CSS\",\"advisoryTitle\":\"Titolo\",\"cssStyle\":\"Stile\",\"ok\":\"OK\",\"cancel\":\"Annulla\",\"close\":\"Chiudi\",\"preview\":\"Anteprima\",\"resize\":\"Trascina per ridimensionare\",\"generalTab\":\"Generale\",\"advancedTab\":\"Avanzate\",\"validateNumberFailed\":\"Il valore inserito non è un numero.\",\"confirmNewPage\":\"Ogni modifica non salvata sarà persa. Sei sicuro di voler caricare una nuova pagina?\",\"confirmCancel\":\"Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?\",\"options\":\"Opzioni\",\"target\":\"Destinazione\",\"targetNew\":\"Nuova finestra (_blank)\",\"targetTop\":\"Finestra in primo piano (_top)\",\"targetSelf\":\"Stessa finestra (_self)\",\"targetParent\":\"Finestra Padre (_parent)\",\"langDirLTR\":\"Da sinistra a destra (LTR)\",\"langDirRTL\":\"Da destra a sinistra (RTL)\",\"styles\":\"Stile\",\"cssClasses\":\"Classi di stile\",\"width\":\"Larghezza\",\"height\":\"Altezza\",\"align\":\"Allineamento\",\"alignLeft\":\"Sinistra\",\"alignRight\":\"Destra\",\"alignCenter\":\"Centrato\",\"alignJustify\":\"Giustifica\",\"alignTop\":\"In Alto\",\"alignMiddle\":\"Centrato\",\"alignBottom\":\"In Basso\",\"alignNone\":\"Nessuno\",\"invalidValue\":\"Valore non valido.\",\"invalidHeight\":\"L'altezza dev'essere un numero\",\"invalidWidth\":\"La Larghezza dev'essere un numero\",\"invalidCssLength\":\"Il valore indicato per il campo \\\"%1\\\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le classi CSS (px, %, in, cm, mm, em, ex, pt, o pc).\",\"invalidHtmlLength\":\"Il valore indicato per il campo \\\"%1\\\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le pagine HTML (px o %).\",\"invalidInlineStyle\":\"Il valore specificato per lo stile inline deve consistere in una o più tuple con il formato di \\\"name : value\\\", separati da semicolonne.\",\"cssLengthTooltip\":\"Inserisci un numero per il valore in pixel oppure un numero con una valida unità CSS (px, %, in, cm, mm, ex, pt, o pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, non disponibile</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Tutti i diritti riservati.\",\"dlgTitle\":\"Riguardo CKEditor\",\"help\":\"Vedi $1 per l'aiuto.\",\"moreInfo\":\"Per le informazioni sulla licenza si prega di visitare il nostro sito:\",\"title\":\"Riguardo CKEditor\",\"userGuide\":\"Guida Utente CKEditor\"},\"basicstyles\":{\"bold\":\"Grassetto\",\"italic\":\"Corsivo\",\"strike\":\"Barrato\",\"subscript\":\"Pedice\",\"superscript\":\"Apice\",\"underline\":\"Sottolineato\"},\"blockquote\":{\"toolbar\":\"Citazione\"},\"clipboard\":{\"copy\":\"Copia\",\"copyError\":\"Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+C).\",\"cut\":\"Taglia\",\"cutError\":\"Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+X).\",\"paste\":\"Incolla\",\"pasteArea\":\"Incolla\",\"pasteMsg\":\"Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl/Cmd+V</STRONG>) e premi <STRONG>OK</STRONG>.\",\"securityMsg\":\"A causa delle impostazioni di sicurezza del browser,l'editor non è in grado di accedere direttamente agli appunti. E' pertanto necessario incollarli di nuovo in questa finestra.\",\"title\":\"Incolla\"},\"contextmenu\":{\"options\":\"Opzioni del menù contestuale\"},\"button\":{\"selectedLabel\":\"%1 (selezionato)\"},\"toolbar\":{\"toolbarCollapse\":\"Minimizza Toolbar\",\"toolbarExpand\":\"Espandi Toolbar\",\"toolbarGroups\":{\"document\":\"Documento\",\"clipboard\":\"Copia negli appunti/Annulla\",\"editing\":\"Modifica\",\"forms\":\"Form\",\"basicstyles\":\"Stili di base\",\"paragraph\":\"Paragrafo\",\"links\":\"Link\",\"insert\":\"Inserisci\",\"styles\":\"Stili\",\"colors\":\"Colori\",\"tools\":\"Strumenti\"},\"toolbars\":\"Editor toolbar\"},\"elementspath\":{\"eleLabel\":\"Percorso degli elementi\",\"eleTitle\":\"%1 elemento\"},\"format\":{\"label\":\"Formato\",\"panelTitle\":\"Formato\",\"tag_address\":\"Indirizzo\",\"tag_div\":\"Paragrafo (DIV)\",\"tag_h1\":\"Titolo 1\",\"tag_h2\":\"Titolo 2\",\"tag_h3\":\"Titolo 3\",\"tag_h4\":\"Titolo 4\",\"tag_h5\":\"Titolo 5\",\"tag_h6\":\"Titolo 6\",\"tag_p\":\"Normale\",\"tag_pre\":\"Formattato\"},\"horizontalrule\":{\"toolbar\":\"Inserisci riga orizzontale\"},\"image\":{\"alt\":\"Testo alternativo\",\"border\":\"Bordo\",\"btnUpload\":\"Invia al server\",\"button2Img\":\"Vuoi trasformare il bottone immagine selezionato in un'immagine semplice?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Vuoi trasferomare l'immagine selezionata in un bottone immagine?\",\"infoTab\":\"Informazioni immagine\",\"linkTab\":\"Collegamento\",\"lockRatio\":\"Blocca rapporto\",\"menu\":\"Proprietà immagine\",\"resetSize\":\"Reimposta dimensione\",\"title\":\"Proprietà immagine\",\"titleButton\":\"Proprietà bottone immagine\",\"upload\":\"Carica\",\"urlMissing\":\"Manca l'URL dell'immagine.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"Il campo Bordo deve essere un numero intero.\",\"validateHSpace\":\"Il campo HSpace deve essere un numero intero.\",\"validateVSpace\":\"Il campo VSpace deve essere un numero intero.\"},\"indent\":{\"indent\":\"Aumenta rientro\",\"outdent\":\"Riduci rientro\"},\"fakeobjects\":{\"anchor\":\"Ancora\",\"flash\":\"Animazione Flash\",\"hiddenfield\":\"Campo Nascosto\",\"iframe\":\"IFrame\",\"unknown\":\"Oggetto sconosciuto\"},\"link\":{\"acccessKey\":\"Scorciatoia da tastiera\",\"advanced\":\"Avanzate\",\"advisoryContentType\":\"Tipo della risorsa collegata\",\"advisoryTitle\":\"Titolo\",\"anchor\":{\"toolbar\":\"Inserisci/Modifica Ancora\",\"menu\":\"Proprietà ancora\",\"title\":\"Proprietà ancora\",\"name\":\"Nome ancora\",\"errorName\":\"Inserici il nome dell'ancora\",\"remove\":\"Rimuovi l'ancora\"},\"anchorId\":\"Per id elemento\",\"anchorName\":\"Per Nome\",\"charset\":\"Set di caretteri della risorsa collegata\",\"cssClasses\":\"Nome classe CSS\",\"emailAddress\":\"Indirizzo E-Mail\",\"emailBody\":\"Corpo del messaggio\",\"emailSubject\":\"Oggetto del messaggio\",\"id\":\"Id\",\"info\":\"Informazioni collegamento\",\"langCode\":\"Direzione scrittura\",\"langDir\":\"Direzione scrittura\",\"langDirLTR\":\"Da Sinistra a Destra (LTR)\",\"langDirRTL\":\"Da Destra a Sinistra (RTL)\",\"menu\":\"Modifica collegamento\",\"name\":\"Nome\",\"noAnchors\":\"(Nessuna ancora disponibile nel documento)\",\"noEmail\":\"Devi inserire un'indirizzo e-mail\",\"noUrl\":\"Devi inserire l'URL del collegamento\",\"other\":\"<altro>\",\"popupDependent\":\"Dipendente (Netscape)\",\"popupFeatures\":\"Caratteristiche finestra popup\",\"popupFullScreen\":\"A tutto schermo (IE)\",\"popupLeft\":\"Posizione da sinistra\",\"popupLocationBar\":\"Barra degli indirizzi\",\"popupMenuBar\":\"Barra del menu\",\"popupResizable\":\"Ridimensionabile\",\"popupScrollBars\":\"Barre di scorrimento\",\"popupStatusBar\":\"Barra di stato\",\"popupToolbar\":\"Barra degli strumenti\",\"popupTop\":\"Posizione dall'alto\",\"rel\":\"Relazioni\",\"selectAnchor\":\"Scegli Ancora\",\"styles\":\"Stile\",\"tabIndex\":\"Ordine di tabulazione\",\"target\":\"Destinazione\",\"targetFrame\":\"<riquadro>\",\"targetFrameName\":\"Nome del riquadro di destinazione\",\"targetPopup\":\"<finestra popup>\",\"targetPopupName\":\"Nome finestra popup\",\"title\":\"Collegamento\",\"toAnchor\":\"Ancora nel testo\",\"toEmail\":\"E-Mail\",\"toUrl\":\"URL\",\"toolbar\":\"Collegamento\",\"type\":\"Tipo di Collegamento\",\"unlink\":\"Elimina collegamento\",\"upload\":\"Carica\"},\"list\":{\"bulletedlist\":\"Inserisci/Rimuovi Elenco Puntato\",\"numberedlist\":\"Inserisci/Rimuovi Elenco Numerato\"},\"magicline\":{\"title\":\"Inserisci paragrafo qui\"},\"maximize\":{\"maximize\":\"Massimizza\",\"minimize\":\"Minimizza\"},\"pastetext\":{\"button\":\"Incolla come testo semplice\",\"title\":\"Incolla come testo semplice\"},\"pastefromword\":{\"confirmCleanup\":\"Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?\",\"error\":\"Non è stato possibile eliminare il testo incollato a causa di un errore interno.\",\"title\":\"Incolla da Word\",\"toolbar\":\"Incolla da Word\"},\"removeformat\":{\"toolbar\":\"Elimina formattazione\"},\"sourcearea\":{\"toolbar\":\"Sorgente\"},\"specialchar\":{\"options\":\"Opzioni carattere speciale\",\"title\":\"Seleziona carattere speciale\",\"toolbar\":\"Inserisci carattere speciale\"},\"scayt\":{\"btn_about\":\"About COMS\",\"btn_dictionaries\":\"Dizionari\",\"btn_disable\":\"Disabilita COMS\",\"btn_enable\":\"Abilita COMS\",\"btn_langs\":\"Lingue\",\"btn_options\":\"Opzioni\",\"text_title\":\"Controllo Ortografico Mentre Scrivi\"},\"stylescombo\":{\"label\":\"Stili\",\"panelTitle\":\"Stili di formattazione\",\"panelTitle1\":\"Stili per blocchi\",\"panelTitle2\":\"Stili in linea\",\"panelTitle3\":\"Stili per oggetti\"},\"table\":{\"border\":\"Dimensione bordo\",\"caption\":\"Intestazione\",\"cell\":{\"menu\":\"Cella\",\"insertBefore\":\"Inserisci Cella Prima\",\"insertAfter\":\"Inserisci Cella Dopo\",\"deleteCell\":\"Elimina celle\",\"merge\":\"Unisce celle\",\"mergeRight\":\"Unisci a Destra\",\"mergeDown\":\"Unisci in Basso\",\"splitHorizontal\":\"Dividi Cella Orizzontalmente\",\"splitVertical\":\"Dividi Cella Verticalmente\",\"title\":\"Proprietà della cella\",\"cellType\":\"Tipo di cella\",\"rowSpan\":\"Su più righe\",\"colSpan\":\"Su più colonne\",\"wordWrap\":\"Ritorno a capo\",\"hAlign\":\"Allineamento orizzontale\",\"vAlign\":\"Allineamento verticale\",\"alignBaseline\":\"Linea Base\",\"bgColor\":\"Colore di Sfondo\",\"borderColor\":\"Colore del Bordo\",\"data\":\"Dati\",\"header\":\"Intestazione\",\"yes\":\"Si\",\"no\":\"No\",\"invalidWidth\":\"La larghezza della cella dev'essere un numero.\",\"invalidHeight\":\"L'altezza della cella dev'essere un numero.\",\"invalidRowSpan\":\"Il numero di righe dev'essere un numero intero.\",\"invalidColSpan\":\"Il numero di colonne dev'essere un numero intero.\",\"chooseColor\":\"Scegli\"},\"cellPad\":\"Padding celle\",\"cellSpace\":\"Spaziatura celle\",\"column\":{\"menu\":\"Colonna\",\"insertBefore\":\"Inserisci Colonna Prima\",\"insertAfter\":\"Inserisci Colonna Dopo\",\"deleteColumn\":\"Elimina colonne\"},\"columns\":\"Colonne\",\"deleteTable\":\"Cancella Tabella\",\"headers\":\"Intestazione\",\"headersBoth\":\"Entrambe\",\"headersColumn\":\"Prima Colonna\",\"headersNone\":\"Nessuna\",\"headersRow\":\"Prima Riga\",\"invalidBorder\":\"La dimensione del bordo dev'essere un numero.\",\"invalidCellPadding\":\"Il paging delle celle dev'essere un numero\",\"invalidCellSpacing\":\"La spaziatura tra le celle dev'essere un numero.\",\"invalidCols\":\"Il numero di colonne dev'essere un numero maggiore di 0.\",\"invalidHeight\":\"L'altezza della tabella dev'essere un numero.\",\"invalidRows\":\"Il numero di righe dev'essere un numero maggiore di 0.\",\"invalidWidth\":\"La larghezza della tabella dev'essere un numero.\",\"menu\":\"Proprietà tabella\",\"row\":{\"menu\":\"Riga\",\"insertBefore\":\"Inserisci Riga Prima\",\"insertAfter\":\"Inserisci Riga Dopo\",\"deleteRow\":\"Elimina righe\"},\"rows\":\"Righe\",\"summary\":\"Indice\",\"title\":\"Proprietà tabella\",\"toolbar\":\"Tabella\",\"widthPc\":\"percento\",\"widthPx\":\"pixel\",\"widthUnit\":\"unità larghezza\"},\"undo\":{\"redo\":\"Ripristina\",\"undo\":\"Annulla\"},\"wsc\":{\"btnIgnore\":\"Ignora\",\"btnIgnoreAll\":\"Ignora tutto\",\"btnReplace\":\"Cambia\",\"btnReplaceAll\":\"Cambia tutto\",\"btnUndo\":\"Annulla\",\"changeTo\":\"Cambia in\",\"errorLoading\":\"Errore nel caricamento dell'host col servizio applicativo: %s.\",\"ieSpellDownload\":\"Contollo ortografico non installato. Lo vuoi scaricare ora?\",\"manyChanges\":\"Controllo ortografico completato: %1 parole cambiate\",\"noChanges\":\"Controllo ortografico completato: nessuna parola cambiata\",\"noMispell\":\"Controllo ortografico completato: nessun errore trovato\",\"noSuggestions\":\"- Nessun suggerimento -\",\"notAvailable\":\"Il servizio non è momentaneamente disponibile.\",\"notInDic\":\"Non nel dizionario\",\"oneChange\":\"Controllo ortografico completato: 1 parola cambiata\",\"progress\":\"Controllo ortografico in corso\",\"title\":\"Controllo ortografico\",\"toolbar\":\"Correttore ortografico\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/ja.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['ja']={\"editor\":\"リッチテキストエディタ\",\"editorPanel\":\"リッチテキストエディタパネル\",\"common\":{\"editorHelp\":\"ヘルプは ALT 0 を押してください\",\"browseServer\":\"サーバブラウザ\",\"url\":\"URL\",\"protocol\":\"プロトコル\",\"upload\":\"アップロード\",\"uploadSubmit\":\"サーバーに送信\",\"image\":\"イメージ\",\"flash\":\"Flash\",\"form\":\"フォーム\",\"checkbox\":\"チェックボックス\",\"radio\":\"ラジオボタン\",\"textField\":\"１行テキスト\",\"textarea\":\"テキストエリア\",\"hiddenField\":\"不可視フィールド\",\"button\":\"ボタン\",\"select\":\"選択フィールド\",\"imageButton\":\"画像ボタン\",\"notSet\":\"<なし>\",\"id\":\"Id\",\"name\":\"Name属性\",\"langDir\":\"文字表記の方向\",\"langDirLtr\":\"左から右 (LTR)\",\"langDirRtl\":\"右から左 (RTL)\",\"langCode\":\"言語コード\",\"longDescr\":\"longdesc属性(長文説明)\",\"cssClass\":\"スタイルシートクラス\",\"advisoryTitle\":\"Title属性\",\"cssStyle\":\"スタイルシート\",\"ok\":\"OK\",\"cancel\":\"キャンセル\",\"close\":\"閉じる\",\"preview\":\"プレビュー\",\"resize\":\"ドラッグしてリサイズ\",\"generalTab\":\"全般\",\"advancedTab\":\"高度な設定\",\"validateNumberFailed\":\"値が数ではありません\",\"confirmNewPage\":\"変更内容を保存せず、 新しいページを開いてもよろしいでしょうか？\",\"confirmCancel\":\"オプション設定を変更しました。ダイアログを閉じてもよろしいでしょうか？\",\"options\":\"オプション\",\"target\":\"ターゲット\",\"targetNew\":\"新しいウインドウ (_blank)\",\"targetTop\":\"最上部ウィンドウ (_top)\",\"targetSelf\":\"同じウィンドウ (_self)\",\"targetParent\":\"親ウィンドウ (_parent)\",\"langDirLTR\":\"左から右 (LTR)\",\"langDirRTL\":\"右から左 (RTL)\",\"styles\":\"スタイル\",\"cssClasses\":\"スタイルシートクラス\",\"width\":\"幅\",\"height\":\"高さ\",\"align\":\"行揃え\",\"alignLeft\":\"左\",\"alignRight\":\"右\",\"alignCenter\":\"中央\",\"alignJustify\":\"両端揃え\",\"alignTop\":\"上\",\"alignMiddle\":\"中央\",\"alignBottom\":\"下\",\"alignNone\":\"なし\",\"invalidValue\":\"不正な値です。\",\"invalidHeight\":\"高さは数値で入力してください。\",\"invalidWidth\":\"幅は数値で入力してください。\",\"invalidCssLength\":\"入力された \\\"%1\\\" 項目の値は、CSSの大きさ(px, %, in, cm, mm, em, ex, pt, または pc)が正しいものである/ないに関わらず、正の値である必要があります。\",\"invalidHtmlLength\":\"入力された \\\"%1\\\" 項目の値は、HTMLの大きさ(px または %)が正しいものである/ないに関わらず、正の値である必要があります。\",\"invalidInlineStyle\":\"入力されたインラインスタイルの値は、\\\"名前 : 値\\\" のフォーマットのセットで、複数の場合はセミコロンで区切られている形式である必要があります。\",\"cssLengthTooltip\":\"ピクセル数もしくはCSSにセットできる数値を入力してください。(px,%,in,cm,mm,em,ex,pt,or pc)\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, 利用不可能</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"CKEditorについて\",\"help\":\"$1 のヘルプを見てください。\",\"moreInfo\":\"ライセンス情報の詳細はウェブサイトにて確認してください:\",\"title\":\"CKEditorについて\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"太字\",\"italic\":\"斜体\",\"strike\":\"打ち消し線\",\"subscript\":\"下付き\",\"superscript\":\"上付き\",\"underline\":\"下線\"},\"blockquote\":{\"toolbar\":\"ブロック引用文\"},\"clipboard\":{\"copy\":\"コピー\",\"copyError\":\"ブラウザーのセキュリティ設定によりエディタのコピー操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+C)を使用してください。\",\"cut\":\"切り取り\",\"cutError\":\"ブラウザーのセキュリティ設定によりエディタの切り取り操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+X)を使用してください。\",\"paste\":\"貼り付け\",\"pasteArea\":\"貼り付け場所\",\"pasteMsg\":\"キーボード(<STRONG>Ctrl/Cmd+V</STRONG>)を使用して、次の入力エリア内で貼り付けて、<STRONG>OK</STRONG>を押してください。\",\"securityMsg\":\"ブラウザのセキュリティ設定により、エディタはクリップボードデータに直接アクセスすることができません。このウィンドウは貼り付け操作を行う度に表示されます。\",\"title\":\"貼り付け\"},\"contextmenu\":{\"options\":\"コンテキストメニューオプション\"},\"button\":{\"selectedLabel\":\"%1 (選択中)\"},\"toolbar\":{\"toolbarCollapse\":\"ツールバーを閉じる\",\"toolbarExpand\":\"ツールバーを開く\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"編集ツールバー\"},\"elementspath\":{\"eleLabel\":\"要素パス\",\"eleTitle\":\"%1 要素\"},\"format\":{\"label\":\"書式\",\"panelTitle\":\"段落の書式\",\"tag_address\":\"アドレス\",\"tag_div\":\"標準 (DIV)\",\"tag_h1\":\"見出し 1\",\"tag_h2\":\"見出し 2\",\"tag_h3\":\"見出し 3\",\"tag_h4\":\"見出し 4\",\"tag_h5\":\"見出し 5\",\"tag_h6\":\"見出し 6\",\"tag_p\":\"標準\",\"tag_pre\":\"書式付き\"},\"horizontalrule\":{\"toolbar\":\"水平線\"},\"image\":{\"alt\":\"代替テキスト\",\"border\":\"枠線の幅\",\"btnUpload\":\"サーバーに送信\",\"button2Img\":\"選択した画像ボタンを画像に変換しますか？\",\"hSpace\":\"水平間隔\",\"img2Button\":\"選択した画像を画像ボタンに変換しますか？\",\"infoTab\":\"画像情報\",\"linkTab\":\"リンク\",\"lockRatio\":\"比率を固定\",\"menu\":\"画像のプロパティ\",\"resetSize\":\"サイズをリセット\",\"title\":\"画像のプロパティ\",\"titleButton\":\"画像ボタンのプロパティ\",\"upload\":\"アップロード\",\"urlMissing\":\"画像のURLを入力してください。\",\"vSpace\":\"垂直間隔\",\"validateBorder\":\"枠線の幅は数値で入力してください。\",\"validateHSpace\":\"水平間隔は数値で入力してください。\",\"validateVSpace\":\"垂直間隔は数値で入力してください。\"},\"indent\":{\"indent\":\"インデント\",\"outdent\":\"インデント解除\"},\"fakeobjects\":{\"anchor\":\"アンカー\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"不可視フィールド\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"アクセスキー\",\"advanced\":\"高度な設定\",\"advisoryContentType\":\"Content Type属性\",\"advisoryTitle\":\"Title属性\",\"anchor\":{\"toolbar\":\"アンカー挿入/編集\",\"menu\":\"アンカーの編集\",\"title\":\"アンカーのプロパティ\",\"name\":\"アンカー名\",\"errorName\":\"アンカー名を入力してください。\",\"remove\":\"アンカーを削除\"},\"anchorId\":\"エレメントID\",\"anchorName\":\"アンカー名\",\"charset\":\"リンク先のcharset\",\"cssClasses\":\"スタイルシートクラス\",\"emailAddress\":\"E-Mail アドレス\",\"emailBody\":\"本文\",\"emailSubject\":\"件名\",\"id\":\"Id\",\"info\":\"ハイパーリンク情報\",\"langCode\":\"言語コード\",\"langDir\":\"文字表記の方向\",\"langDirLTR\":\"左から右 (LTR)\",\"langDirRTL\":\"右から左 (RTL)\",\"menu\":\"リンクを編集\",\"name\":\"Name属性\",\"noAnchors\":\"(このドキュメント内にアンカーはありません)\",\"noEmail\":\"メールアドレスを入力してください。\",\"noUrl\":\"リンクURLを入力してください。\",\"other\":\"<その他の>\",\"popupDependent\":\"開いたウィンドウに連動して閉じる (Netscape)\",\"popupFeatures\":\"ポップアップウィンドウ特徴\",\"popupFullScreen\":\"全画面モード(IE)\",\"popupLeft\":\"左端からの座標で指定\",\"popupLocationBar\":\"ロケーションバー\",\"popupMenuBar\":\"メニューバー\",\"popupResizable\":\"サイズ可変\",\"popupScrollBars\":\"スクロールバー\",\"popupStatusBar\":\"ステータスバー\",\"popupToolbar\":\"ツールバー\",\"popupTop\":\"上端からの座標で指定\",\"rel\":\"関連リンク\",\"selectAnchor\":\"アンカーを選択\",\"styles\":\"スタイルシート\",\"tabIndex\":\"タブインデックス\",\"target\":\"ターゲット\",\"targetFrame\":\"<フレーム>\",\"targetFrameName\":\"ターゲットのフレーム名\",\"targetPopup\":\"<ポップアップウィンドウ>\",\"targetPopupName\":\"ポップアップウィンドウ名\",\"title\":\"ハイパーリンク\",\"toAnchor\":\"ページ内のアンカー\",\"toEmail\":\"E-Mail\",\"toUrl\":\"URL\",\"toolbar\":\"リンク挿入/編集\",\"type\":\"リンクタイプ\",\"unlink\":\"リンクを削除\",\"upload\":\"アップロード\"},\"list\":{\"bulletedlist\":\"番号無しリスト\",\"numberedlist\":\"番号付きリスト\"},\"magicline\":{\"title\":\"ここに段落を挿入\"},\"maximize\":{\"maximize\":\"最大化\",\"minimize\":\"最小化\"},\"pastetext\":{\"button\":\"プレーンテキストとして貼り付け\",\"title\":\"プレーンテキストとして貼り付け\"},\"pastefromword\":{\"confirmCleanup\":\"貼り付けを行うテキストはワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか？\",\"error\":\"内部エラーにより貼り付けたデータをクリアできませんでした\",\"title\":\"ワード文章から貼り付け\",\"toolbar\":\"ワード文章から貼り付け\"},\"removeformat\":{\"toolbar\":\"書式を解除\"},\"sourcearea\":{\"toolbar\":\"ソース\"},\"specialchar\":{\"options\":\"特殊文字オプション\",\"title\":\"特殊文字の選択\",\"toolbar\":\"特殊文字を挿入\"},\"scayt\":{\"btn_about\":\"SCAYTﾊﾞｰｼﾞｮﾝ\",\"btn_dictionaries\":\"辞書\",\"btn_disable\":\"SCAYT無効\",\"btn_enable\":\"SCAYT有効\",\"btn_langs\":\"言語\",\"btn_options\":\"オプション\",\"text_title\":\"スペルチェック設定(SCAYT)\"},\"stylescombo\":{\"label\":\"スタイル\",\"panelTitle\":\"スタイル\",\"panelTitle1\":\"ブロックスタイル\",\"panelTitle2\":\"インラインスタイル\",\"panelTitle3\":\"オブジェクトスタイル\"},\"table\":{\"border\":\"枠線の幅\",\"caption\":\"キャプション\",\"cell\":{\"menu\":\"セル\",\"insertBefore\":\"セルを前に挿入\",\"insertAfter\":\"セルを後に挿入\",\"deleteCell\":\"セルを削除\",\"merge\":\"セルを結合\",\"mergeRight\":\"右に結合\",\"mergeDown\":\"下に結合\",\"splitHorizontal\":\"セルを水平方向に分割\",\"splitVertical\":\"セルを垂直方向に分割\",\"title\":\"セルのプロパティ\",\"cellType\":\"セルの種類\",\"rowSpan\":\"行の結合数\",\"colSpan\":\"列の結合数\",\"wordWrap\":\"単語の折り返し\",\"hAlign\":\"水平方向の配置\",\"vAlign\":\"垂直方向の配置\",\"alignBaseline\":\"ベースライン\",\"bgColor\":\"背景色\",\"borderColor\":\"ボーダーカラー\",\"data\":\"テーブルデータ (td)\",\"header\":\"ヘッダ\",\"yes\":\"はい\",\"no\":\"いいえ\",\"invalidWidth\":\"セル幅は数値で入力してください。\",\"invalidHeight\":\"セル高さは数値で入力してください。\",\"invalidRowSpan\":\"縦幅(行数)は数値で入力してください。\",\"invalidColSpan\":\"横幅(列数)は数値で入力してください。\",\"chooseColor\":\"色の選択\"},\"cellPad\":\"セル内間隔\",\"cellSpace\":\"セル内余白\",\"column\":{\"menu\":\"列\",\"insertBefore\":\"列を左に挿入\",\"insertAfter\":\"列を右に挿入\",\"deleteColumn\":\"列を削除\"},\"columns\":\"列数\",\"deleteTable\":\"表を削除\",\"headers\":\"ヘッダ (th)\",\"headersBoth\":\"両方\",\"headersColumn\":\"最初の列のみ\",\"headersNone\":\"なし\",\"headersRow\":\"最初の行のみ\",\"invalidBorder\":\"枠線の幅は数値で入力してください。\",\"invalidCellPadding\":\"セル内余白は数値で入力してください。\",\"invalidCellSpacing\":\"セル間余白は数値で入力してください。\",\"invalidCols\":\"列数は0より大きな数値を入力してください。\",\"invalidHeight\":\"高さは数値で入力してください。\",\"invalidRows\":\"行数は0より大きな数値を入力してください。\",\"invalidWidth\":\"幅は数値で入力してください。\",\"menu\":\"表のプロパティ\",\"row\":{\"menu\":\"行\",\"insertBefore\":\"行を上に挿入\",\"insertAfter\":\"行を下に挿入\",\"deleteRow\":\"行を削除\"},\"rows\":\"行数\",\"summary\":\"表の概要\",\"title\":\"表のプロパティ\",\"toolbar\":\"表\",\"widthPc\":\"パーセント\",\"widthPx\":\"ピクセル\",\"widthUnit\":\"幅の単位\"},\"undo\":{\"redo\":\"やり直す\",\"undo\":\"元に戻す\"},\"wsc\":{\"btnIgnore\":\"無視\",\"btnIgnoreAll\":\"すべて無視\",\"btnReplace\":\"置換\",\"btnReplaceAll\":\"すべて置換\",\"btnUndo\":\"やり直し\",\"changeTo\":\"変更\",\"errorLoading\":\"アプリケーションサービスホスト読込みエラー: %s.\",\"ieSpellDownload\":\"スペルチェッカーがインストールされていません。今すぐダウンロードしますか?\",\"manyChanges\":\"スペルチェック完了: %1 語句変更されました\",\"noChanges\":\"スペルチェック完了: 語句は変更されませんでした\",\"noMispell\":\"スペルチェック完了: スペルの誤りはありませんでした\",\"noSuggestions\":\"- 該当なし -\",\"notAvailable\":\"申し訳ありません、現在サービスを利用することができません\",\"notInDic\":\"辞書にありません\",\"oneChange\":\"スペルチェック完了: １語句変更されました\",\"progress\":\"スペルチェック処理中...\",\"title\":\"スペルチェック\",\"toolbar\":\"スペルチェック\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/ka.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['ka']={\"editor\":\"ტექსტის რედაქტორი\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"დააჭირეთ ALT 0-ს დახმარების მისაღებად\",\"browseServer\":\"სერვერზე დათვალიერება\",\"url\":\"URL\",\"protocol\":\"პროტოკოლი\",\"upload\":\"ატვირთვა\",\"uploadSubmit\":\"სერვერზე გაგზავნა\",\"image\":\"სურათი\",\"flash\":\"Flash\",\"form\":\"ფორმა\",\"checkbox\":\"მონიშვნის ღილაკი\",\"radio\":\"ამორჩევის ღილაკი\",\"textField\":\"ტექსტური ველი\",\"textarea\":\"ტექსტური არე\",\"hiddenField\":\"მალული ველი\",\"button\":\"ღილაკი\",\"select\":\"არჩევის ველი\",\"imageButton\":\"სურათიანი ღილაკი\",\"notSet\":\"<არაფერი>\",\"id\":\"Id\",\"name\":\"სახელი\",\"langDir\":\"ენის მიმართულება\",\"langDirLtr\":\"მარცხნიდან მარჯვნივ (LTR)\",\"langDirRtl\":\"მარჯვნიდან მარცხნივ (RTL)\",\"langCode\":\"ენის კოდი\",\"longDescr\":\"დიდი აღწერის URL\",\"cssClass\":\"CSS კლასი\",\"advisoryTitle\":\"სათაური\",\"cssStyle\":\"CSS სტილი\",\"ok\":\"დიახ\",\"cancel\":\"გაუქმება\",\"close\":\"დახურვა\",\"preview\":\"გადახედვა\",\"resize\":\"გაწიე ზომის შესაცვლელად\",\"generalTab\":\"ინფორმაცია\",\"advancedTab\":\"გაფართოებული\",\"validateNumberFailed\":\"ეს მნიშვნელობა არაა რიცხვი.\",\"confirmNewPage\":\"ამ დოკუმენტში ყველა ჩაუწერელი ცვლილება დაიკარგება. დარწმუნებული ხართ რომ ახალი გვერდის ჩატვირთვა გინდათ?\",\"confirmCancel\":\"ზოგიერთი პარამეტრი შეცვლილია, დარწმუნებულილ ხართ რომ ფანჯრის დახურვა გსურთ?\",\"options\":\"პარამეტრები\",\"target\":\"გახსნის ადგილი\",\"targetNew\":\"ახალი ფანჯარა (_blank)\",\"targetTop\":\"ზედა ფანჯარა (_top)\",\"targetSelf\":\"იგივე ფანჯარა (_self)\",\"targetParent\":\"მშობელი ფანჯარა (_parent)\",\"langDirLTR\":\"მარცხნიდან მარჯვნივ (LTR)\",\"langDirRTL\":\"მარჯვნიდან მარცხნივ (RTL)\",\"styles\":\"სტილი\",\"cssClasses\":\"CSS კლასი\",\"width\":\"სიგანე\",\"height\":\"სიმაღლე\",\"align\":\"სწორება\",\"alignLeft\":\"მარცხენა\",\"alignRight\":\"მარჯვენა\",\"alignCenter\":\"შუა\",\"alignJustify\":\"両端揃え\",\"alignTop\":\"ზემოთა\",\"alignMiddle\":\"შუა\",\"alignBottom\":\"ქვემოთა\",\"alignNone\":\"None\",\"invalidValue\":\"Invalid value.\",\"invalidHeight\":\"სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.\",\"invalidWidth\":\"სიგანე რიცხვით უნდა იყოს წარმოდგენილი.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, მიუწვდომელია</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. ყველა უფლება დაცულია.\",\"dlgTitle\":\"CKEditor-ის შესახებ\",\"help\":\"დახმარებისთვის იხილეთ $1.\",\"moreInfo\":\"ლიცენზიის ინფორმაციისთვის ეწვიეთ ჩვენს საიტს:\",\"title\":\"CKEditor-ის შესახებ\",\"userGuide\":\"CKEditor-ის მომხმარებლის სახელმძღვანელო\"},\"basicstyles\":{\"bold\":\"მსხვილი\",\"italic\":\"დახრილი\",\"strike\":\"გადახაზული\",\"subscript\":\"ინდექსი\",\"superscript\":\"ხარისხი\",\"underline\":\"გახაზული\"},\"blockquote\":{\"toolbar\":\"ციტატა\"},\"clipboard\":{\"copy\":\"ასლი\",\"copyError\":\"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ასლის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+C).\",\"cut\":\"ამოჭრა\",\"cutError\":\"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ამოჭრის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+X).\",\"paste\":\"ჩასმა\",\"pasteArea\":\"ჩასმის არე\",\"pasteMsg\":\"ჩასვით ამ არის შიგნით კლავიატურის გამოყენებით (<strong>Ctrl/Cmd+V</strong>) და დააჭირეთ OK-ს\",\"securityMsg\":\"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა clipboard-ის მონაცემების წვდომის უფლებას. კიდევ უნდა ჩასვათ ტექსტი ამ ფანჯარაში.\",\"title\":\"ჩასმა\"},\"contextmenu\":{\"options\":\"კონტექსტური მენიუს პარამეტრები\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"ხელსაწყოთა ზოლის შეწევა\",\"toolbarExpand\":\"ხელსაწყოთა ზოლის გამოწევა\",\"toolbarGroups\":{\"document\":\"დოკუმენტი\",\"clipboard\":\"Clipboard/გაუქმება\",\"editing\":\"რედაქტირება\",\"forms\":\"ფორმები\",\"basicstyles\":\"ძირითადი სტილები\",\"paragraph\":\"აბზაცი\",\"links\":\"ბმულები\",\"insert\":\"ჩასმა\",\"styles\":\"სტილები\",\"colors\":\"ფერები\",\"tools\":\"ხელსაწყოები\"},\"toolbars\":\"Editor toolbars\"},\"elementspath\":{\"eleLabel\":\"ელემეტის გზა\",\"eleTitle\":\"%1 ელემენტი\"},\"format\":{\"label\":\"ფიორმატირება\",\"panelTitle\":\"ფორმატირება\",\"tag_address\":\"მისამართი\",\"tag_div\":\"ჩვეულებრივი (DIV)\",\"tag_h1\":\"სათაური 1\",\"tag_h2\":\"სათაური 2\",\"tag_h3\":\"სათაური 3\",\"tag_h4\":\"სათაური 4\",\"tag_h5\":\"სათაური 5\",\"tag_h6\":\"სათაური 6\",\"tag_p\":\"ჩვეულებრივი\",\"tag_pre\":\"ფორმატირებული\"},\"horizontalrule\":{\"toolbar\":\"ჰორიზონტალური ხაზის ჩასმა\"},\"image\":{\"alt\":\"სანაცვლო ტექსტი\",\"border\":\"ჩარჩო\",\"btnUpload\":\"სერვერისთვის გაგზავნა\",\"button2Img\":\"გსურთ არჩეული სურათიანი ღილაკის გადაქცევა ჩვეულებრივ ღილაკად?\",\"hSpace\":\"ჰორიზონტალური სივრცე\",\"img2Button\":\"გსურთ არჩეული ჩვეულებრივი ღილაკის გადაქცევა სურათიან ღილაკად?\",\"infoTab\":\"სურათის ინფორმცია\",\"linkTab\":\"ბმული\",\"lockRatio\":\"პროპორციის შენარჩუნება\",\"menu\":\"სურათის პარამეტრები\",\"resetSize\":\"ზომის დაბრუნება\",\"title\":\"სურათის პარამეტრები\",\"titleButton\":\"სურათიანი ღილაკის პარამეტრები\",\"upload\":\"ატვირთვა\",\"urlMissing\":\"სურათის URL არაა შევსებული.\",\"vSpace\":\"ვერტიკალური სივრცე\",\"validateBorder\":\"ჩარჩო მთელი რიცხვი უნდა იყოს.\",\"validateHSpace\":\"ჰორიზონტალური სივრცე მთელი რიცხვი უნდა იყოს.\",\"validateVSpace\":\"ვერტიკალური სივრცე მთელი რიცხვი უნდა იყოს.\"},\"indent\":{\"indent\":\"მეტად შეწევა\",\"outdent\":\"ნაკლებად შეწევა\"},\"fakeobjects\":{\"anchor\":\"ღუზა\",\"flash\":\"Flash ანიმაცია\",\"hiddenfield\":\"მალული ველი\",\"iframe\":\"IFrame\",\"unknown\":\"უცნობი ობიექტი\"},\"link\":{\"acccessKey\":\"წვდომის ღილაკი\",\"advanced\":\"დაწვრილებით\",\"advisoryContentType\":\"შიგთავსის ტიპი\",\"advisoryTitle\":\"სათაური\",\"anchor\":{\"toolbar\":\"ღუზა\",\"menu\":\"ღუზის რედაქტირება\",\"title\":\"ღუზის პარამეტრები\",\"name\":\"ღუზუს სახელი\",\"errorName\":\"აკრიფეთ ღუზის სახელი\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"ელემენტის Id-თ\",\"anchorName\":\"ღუზის სახელით\",\"charset\":\"კოდირება\",\"cssClasses\":\"CSS კლასი\",\"emailAddress\":\"ელფოსტის მისამართები\",\"emailBody\":\"წერილის ტექსტი\",\"emailSubject\":\"წერილის სათაური\",\"id\":\"Id\",\"info\":\"ბმულის ინფორმაცია\",\"langCode\":\"ენის კოდი\",\"langDir\":\"ენის მიმართულება\",\"langDirLTR\":\"მარცხნიდან მარჯვნივ (LTR)\",\"langDirRTL\":\"მარჯვნიდან მარცხნივ (RTL)\",\"menu\":\"ბმულის რედაქტირება\",\"name\":\"სახელი\",\"noAnchors\":\"(ამ დოკუმენტში ღუზა არაა)\",\"noEmail\":\"აკრიფეთ ელფოსტის მისამართი\",\"noUrl\":\"აკრიფეთ ბმულის URL\",\"other\":\"<სხვა>\",\"popupDependent\":\"დამოკიდებული (Netscape)\",\"popupFeatures\":\"Popup ფანჯრის პარამეტრები\",\"popupFullScreen\":\"მთელი ეკრანი (IE)\",\"popupLeft\":\"მარცხენა პოზიცია\",\"popupLocationBar\":\"ნავიგაციის ზოლი\",\"popupMenuBar\":\"მენიუს ზოლი\",\"popupResizable\":\"ცვალებადი ზომით\",\"popupScrollBars\":\"გადახვევის ზოლები\",\"popupStatusBar\":\"სტატუსის ზოლი\",\"popupToolbar\":\"ხელსაწყოთა ზოლი\",\"popupTop\":\"ზედა პოზიცია\",\"rel\":\"კავშირი\",\"selectAnchor\":\"აირჩიეთ ღუზა\",\"styles\":\"CSS სტილი\",\"tabIndex\":\"Tab-ის ინდექსი\",\"target\":\"გახსნის ადგილი\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Frame-ის სახელი\",\"targetPopup\":\"<popup ფანჯარა>\",\"targetPopupName\":\"Popup ფანჯრის სახელი\",\"title\":\"ბმული\",\"toAnchor\":\"ბმული ტექსტში ღუზაზე\",\"toEmail\":\"ელფოსტა\",\"toUrl\":\"URL\",\"toolbar\":\"ბმული\",\"type\":\"ბმულის ტიპი\",\"unlink\":\"ბმულის მოხსნა\",\"upload\":\"აქაჩვა\"},\"list\":{\"bulletedlist\":\"ღილიანი სია\",\"numberedlist\":\"გადანომრილი სია\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"გადიდება\",\"minimize\":\"დაპატარავება\"},\"pastetext\":{\"button\":\"მხოლოდ ტექსტის ჩასმა\",\"title\":\"მხოლოდ ტექსტის ჩასმა\"},\"pastefromword\":{\"confirmCleanup\":\"ჩასასმელი ტექსტი ვორდიდან გადმოტანილს გავს - გინდათ მისი წინასწარ გაწმენდა?\",\"error\":\"შიდა შეცდომის გამო ვერ მოხერხდა ტექსტის გაწმენდა\",\"title\":\"ვორდიდან ჩასმა\",\"toolbar\":\"ვორდიდან ჩასმა\"},\"removeformat\":{\"toolbar\":\"ფორმატირების მოხსნა\"},\"sourcearea\":{\"toolbar\":\"კოდები\"},\"specialchar\":{\"options\":\"სპეციალური სიმბოლოს პარამეტრები\",\"title\":\"სპეციალური სიმბოლოს არჩევა\",\"toolbar\":\"სპეციალური სიმბოლოს ჩასმა\"},\"scayt\":{\"btn_about\":\"SCAYT-ის შესახებ\",\"btn_dictionaries\":\"ლექსიკონები\",\"btn_disable\":\"SCAYT-ის გამორთვა\",\"btn_enable\":\"SCAYT-ის ჩართვა\",\"btn_langs\":\"ენები\",\"btn_options\":\"პარამეტრები\",\"text_title\":\"მართლწერის შემოწმება კრეფისას\"},\"stylescombo\":{\"label\":\"სტილები\",\"panelTitle\":\"ფორმატირების სტილები\",\"panelTitle1\":\"არის სტილები\",\"panelTitle2\":\"თანდართული სტილები\",\"panelTitle3\":\"ობიექტის სტილები\"},\"table\":{\"border\":\"ჩარჩოს ზომა\",\"caption\":\"სათაური\",\"cell\":{\"menu\":\"უჯრა\",\"insertBefore\":\"უჯრის ჩასმა მანამდე\",\"insertAfter\":\"უჯრის ჩასმა მერე\",\"deleteCell\":\"უჯრების წაშლა\",\"merge\":\"უჯრების შეერთება\",\"mergeRight\":\"შეერთება მარჯვენასთან\",\"mergeDown\":\"შეერთება ქვემოთასთან\",\"splitHorizontal\":\"გაყოფა ჰორიზონტალურად\",\"splitVertical\":\"გაყოფა ვერტიკალურად\",\"title\":\"უჯრის პარამეტრები\",\"cellType\":\"უჯრის ტიპი\",\"rowSpan\":\"სტრიქონების ოდენობა\",\"colSpan\":\"სვეტების ოდენობა\",\"wordWrap\":\"სტრიქონის გადატანა (Word Wrap)\",\"hAlign\":\"ჰორიზონტალური სწორება\",\"vAlign\":\"ვერტიკალური სწორება\",\"alignBaseline\":\"ძირითადი ხაზის გასწვრივ\",\"bgColor\":\"ფონის ფერი\",\"borderColor\":\"ჩარჩოს ფერი\",\"data\":\"მონაცემები\",\"header\":\"სათაური\",\"yes\":\"დიახ\",\"no\":\"არა\",\"invalidWidth\":\"უჯრის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.\",\"invalidHeight\":\"უჯრის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.\",\"invalidRowSpan\":\"სტრიქონების რაოდენობა მთელი რიცხვი უნდა იყოს.\",\"invalidColSpan\":\"სვეტების რაოდენობა მთელი რიცხვი უნდა იყოს.\",\"chooseColor\":\"არჩევა\"},\"cellPad\":\"უჯრის კიდე (padding)\",\"cellSpace\":\"უჯრის სივრცე (spacing)\",\"column\":{\"menu\":\"სვეტი\",\"insertBefore\":\"სვეტის ჩამატება წინ\",\"insertAfter\":\"სვეტის ჩამატება მერე\",\"deleteColumn\":\"სვეტების წაშლა\"},\"columns\":\"სვეტი\",\"deleteTable\":\"ცხრილის წაშლა\",\"headers\":\"სათაურები\",\"headersBoth\":\"ორივე\",\"headersColumn\":\"პირველი სვეტი\",\"headersNone\":\"არაფერი\",\"headersRow\":\"პირველი სტრიქონი\",\"invalidBorder\":\"ჩარჩოს ზომა რიცხვით უდნა იყოს წარმოდგენილი.\",\"invalidCellPadding\":\"უჯრის კიდე (padding) რიცხვით უნდა იყოს წარმოდგენილი.\",\"invalidCellSpacing\":\"უჯრის სივრცე (spacing) რიცხვით უნდა იყოს წარმოდგენილი.\",\"invalidCols\":\"სვეტების რაოდენობა დადებითი რიცხვი უნდა იყოს.\",\"invalidHeight\":\"ცხრილის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.\",\"invalidRows\":\"სტრიქონების რაოდენობა დადებითი რიცხვი უნდა იყოს.\",\"invalidWidth\":\"ცხრილის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.\",\"menu\":\"ცხრილის პარამეტრები\",\"row\":{\"menu\":\"სტრიქონი\",\"insertBefore\":\"სტრიქონის ჩამატება წინ\",\"insertAfter\":\"სტრიქონის ჩამატება მერე\",\"deleteRow\":\"სტრიქონების წაშლა\"},\"rows\":\"სტრიქონი\",\"summary\":\"შეჯამება\",\"title\":\"ცხრილის პარამეტრები\",\"toolbar\":\"ცხრილი\",\"widthPc\":\"პროცენტი\",\"widthPx\":\"წერტილი\",\"widthUnit\":\"საზომი ერთეული\"},\"undo\":{\"redo\":\"გამეორება\",\"undo\":\"გაუქმება\"},\"wsc\":{\"btnIgnore\":\"უგულებელყოფა\",\"btnIgnoreAll\":\"ყველას უგულებელყოფა\",\"btnReplace\":\"შეცვლა\",\"btnReplaceAll\":\"ყველას შეცვლა\",\"btnUndo\":\"გაუქმება\",\"changeTo\":\"შეცვლელი\",\"errorLoading\":\"სერვისის გამოძახების შეცდომა: %s.\",\"ieSpellDownload\":\"მართლწერის შემოწმება არაა დაინსტალირებული. ჩამოვქაჩოთ ინტერნეტიდან?\",\"manyChanges\":\"მართლწერის შემოწმება: %1 სიტყვა შეიცვალა\",\"noChanges\":\"მართლწერის შემოწმება: არაფერი შეცვლილა\",\"noMispell\":\"მართლწერის შემოწმება: შეცდომა არ მოიძებნა\",\"noSuggestions\":\"- არაა შემოთავაზება -\",\"notAvailable\":\"უკაცრავად, ეს სერვისი ამჟამად მიუწვდომელია.\",\"notInDic\":\"არაა ლექსიკონში\",\"oneChange\":\"მართლწერის შემოწმება: ერთი სიტყვა შეიცვალა\",\"progress\":\"მიმდინარეობს მართლწერის შემოწმება...\",\"title\":\"მართლწერა\",\"toolbar\":\"მართლწერა\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/km.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['km']={\"editor\":\"ឧបករណ៍​សរសេរ​អត្ថបទ​សម្បូរ​បែប\",\"editorPanel\":\"ផ្ទាំង​ឧបករណ៍​សរសេរ​អត្ថបទ​សម្បូរ​បែប\",\"common\":{\"editorHelp\":\"ចុច ALT 0 សម្រាប់​ជំនួយ\",\"browseServer\":\"រក​មើល​ក្នុង​ម៉ាស៊ីន​បម្រើ\",\"url\":\"URL\",\"protocol\":\"ពិធីការ\",\"upload\":\"ផ្ទុក​ឡើង\",\"uploadSubmit\":\"បញ្ជូនទៅកាន់ម៉ាស៊ីន​បម្រើ\",\"image\":\"រូបភាព\",\"flash\":\"Flash\",\"form\":\"បែបបទ\",\"checkbox\":\"ប្រអប់​ធីក\",\"radio\":\"ប៊ូតុង​មូល\",\"textField\":\"វាល​អត្ថបទ\",\"textarea\":\"Textarea\",\"hiddenField\":\"វាល​កំបាំង\",\"button\":\"ប៊ូតុង\",\"select\":\"វាល​ជម្រើស\",\"imageButton\":\"ប៊ូតុង​រូបភាព\",\"notSet\":\"<មិនកំណត់>\",\"id\":\"Id\",\"name\":\"ឈ្មោះ\",\"langDir\":\"ទិសដៅភាសា\",\"langDirLtr\":\"ពីឆ្វេងទៅស្តាំ (LTR)\",\"langDirRtl\":\"ពីស្តាំទៅឆ្វេង (RTL)\",\"langCode\":\"លេខ​កូដ​ភាសា\",\"longDescr\":\"URL អធិប្បាយ​វែង\",\"cssClass\":\"Stylesheet Classes\",\"advisoryTitle\":\"ចំណង​ជើង​ណែនាំ\",\"cssStyle\":\"រចនាបថ\",\"ok\":\"ព្រម\",\"cancel\":\"បោះបង់\",\"close\":\"បិទ\",\"preview\":\"មើល​ជា​មុន\",\"resize\":\"ប្ដូរ​ទំហំ\",\"generalTab\":\"ទូទៅ\",\"advancedTab\":\"កម្រិត​ខ្ពស់\",\"validateNumberFailed\":\"តម្លៃ​នេះ​ពុំ​មែន​ជា​លេខ​ទេ។\",\"confirmNewPage\":\"រាល់​បន្លាស់​ប្ដូរ​នានា​ដែល​មិន​ទាន់​រក្សា​ទុក​ក្នុង​មាតិកា​នេះ នឹង​ត្រូវ​បាត់​បង់។ តើ​អ្នក​ពិត​ជា​ចង់​ផ្ទុក​ទំព័រ​ថ្មី​មែនទេ?\",\"confirmCancel\":\"ការ​កំណត់​មួយ​ចំនួន​ត្រូ​វ​បាន​ផ្លាស់​ប្ដូរ។ តើ​អ្នក​ពិត​ជា​ចង់​បិទ​ប្រអប់​នេះ​មែនទេ?\",\"options\":\"ការ​កំណត់\",\"target\":\"គោលដៅ\",\"targetNew\":\"វីនដូ​ថ្មី (_blank)\",\"targetTop\":\"វីនដូ​លើ​គេ (_top)\",\"targetSelf\":\"វីនដូ​ដូច​គ្នា (_self)\",\"targetParent\":\"វីនដូ​មេ (_parent)\",\"langDirLTR\":\"ពីឆ្វេងទៅស្តាំ(LTR)\",\"langDirRTL\":\"ពីស្តាំទៅឆ្វេង(RTL)\",\"styles\":\"រចនាបថ\",\"cssClasses\":\"Stylesheet Classes\",\"width\":\"ទទឹង\",\"height\":\"កំពស់\",\"align\":\"កំណត់​ទីតាំង\",\"alignLeft\":\"ខាងឆ្វង\",\"alignRight\":\"ខាងស្តាំ\",\"alignCenter\":\"កណ្តាល\",\"alignJustify\":\"តំរឹមសងខាង\",\"alignTop\":\"ខាងលើ\",\"alignMiddle\":\"កណ្តាល\",\"alignBottom\":\"ខាងក្រោម\",\"alignNone\":\"គ្មាន\",\"invalidValue\":\"តម្លៃ​មិន​ត្រឹម​ត្រូវ។\",\"invalidHeight\":\"តម្លៃ​កំពស់​ត្រូវ​តែ​ជា​លេខ។\",\"invalidWidth\":\"តម្លៃ​ទទឹង​ត្រូវ​តែ​ជា​លេខ។\",\"invalidCssLength\":\"តម្លៃ​កំណត់​សម្រាប់​វាល \\\"%1\\\" ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន​ ដោយ​ភ្ជាប់ឬ​មិន​ភ្ជាប់​ជាមួយ​នឹង​ឯកតា​រង្វាស់​របស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។\",\"invalidHtmlLength\":\"តម្លៃ​កំណត់​សម្រាប់​វាល \\\"%1\\\" ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន ដោយ​ភ្ជាប់​ឬ​មិន​ភ្ជាប់​ជាមួយ​នឹង​ឯកតា​រង្វាស់​របស់ HTML (px ឬ %) ។\",\"invalidInlineStyle\":\"តម្លៃ​កំណត់​សម្រាប់​រចនាបថ​ក្នុង​តួ ត្រូវ​តែ​មាន​មួយ​ឬ​ធាតុ​ច្រើន​ដោយ​មាន​ទ្រង់ទ្រាយ​ជា \\\"ឈ្មោះ : តម្លៃ\\\" ហើយ​ញែក​ចេញ​ពី​គ្នា​ដោយ​ចុច​ក្បៀស។\",\"cssLengthTooltip\":\"បញ្ចូល​លេខ​សម្រាប់​តម្លៃ​ជា​ភិចសែល ឬ​លេខ​ដែល​មាន​ឯកតា​ត្រឹមត្រូវ​របស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, មិន​មាន</span>\"},\"about\":{\"copy\":\"រក្សាសិទ្ធិ &copy; $1។ រក្សា​សិទ្ធិ​គ្រប់​បែប​យ៉ាង។\",\"dlgTitle\":\"អំពី CKEditor\",\"help\":\"ពិនិត្យ $1 សម្រាប់​ជំនួយ។\",\"moreInfo\":\"សម្រាប់​ព័ត៌មាន​អំពី​អាជ្ញាបណញណ សូម​មើល​ក្នុង​គេហទំព័រ​របស់​យើង៖\",\"title\":\"អំពី CKEditor\",\"userGuide\":\"វិធី​ប្រើ​ប្រាស់ CKEditor\"},\"basicstyles\":{\"bold\":\"ដិត\",\"italic\":\"ទ្រេត\",\"strike\":\"គូស​បន្ទាត់​ចំ​កណ្ដាល\",\"subscript\":\"អក្សរតូចក្រោម\",\"superscript\":\"អក្សរតូចលើ\",\"underline\":\"គូស​បន្ទាត់​ក្រោម\"},\"blockquote\":{\"toolbar\":\"ប្លក់​ពាក្យ​សម្រង់\"},\"clipboard\":{\"copy\":\"ចម្លង\",\"copyError\":\"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+C)។\",\"cut\":\"កាត់យក\",\"cutError\":\"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ  (Ctrl/Cmd+X) ។\",\"paste\":\"បិទ​ភ្ជាប់\",\"pasteArea\":\"តំបន់​បិទ​ភ្ជាប់\",\"pasteMsg\":\"សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី ​(<STRONG>Ctrl/Cmd+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។\",\"securityMsg\":\"ព្រោះតែ​ការកំណត់​សុវត្ថិភាព ប្រអប់សរសេរ​មិន​អាចចាប់​យកទិន្នន័យពីក្តារតម្បៀតខ្ទាស់​អ្នក​​ដោយផ្ទាល់​បានទេ។ អ្នក​ត្រូវចំលង​ដាក់វាម្តង​ទៀត ក្នុងផ្ទាំងនេះ។\",\"title\":\"បិទ​ភ្ជាប់\"},\"contextmenu\":{\"options\":\"ជម្រើស​ម៉ឺនុយ​បរិបទ\"},\"button\":{\"selectedLabel\":\"%1 (បាន​ជ្រើស​រើស)\"},\"toolbar\":{\"toolbarCollapse\":\"បង្រួម​របារ​ឧបករណ៍\",\"toolbarExpand\":\"ពង្រីក​របារ​ឧបករណ៍\",\"toolbarGroups\":{\"document\":\"ឯកសារ\",\"clipboard\":\"Clipboard/មិន​ធ្វើ​វិញ\",\"editing\":\"ការ​កែ​សម្រួល\",\"forms\":\"បែបបទ\",\"basicstyles\":\"រចនាបថ​មូលដ្ឋាន\",\"paragraph\":\"កថាខណ្ឌ\",\"links\":\"តំណ\",\"insert\":\"បញ្ចូល\",\"styles\":\"រចនាបថ\",\"colors\":\"ពណ៌\",\"tools\":\"ឧបករណ៍\"},\"toolbars\":\"របារ​ឧបករណ៍​កែ​សម្រួល\"},\"elementspath\":{\"eleLabel\":\"ទីតាំង​ធាតុ\",\"eleTitle\":\"ធាតុ %1\"},\"format\":{\"label\":\"ទម្រង់\",\"panelTitle\":\"ទម្រង់​កថាខណ្ឌ\",\"tag_address\":\"អាសយដ្ឋាន\",\"tag_div\":\"ធម្មតា (DIV)\",\"tag_h1\":\"ចំណង​ជើង 1\",\"tag_h2\":\"ចំណង​ជើង 2\",\"tag_h3\":\"ចំណង​ជើង 3\",\"tag_h4\":\"ចំណង​ជើង 4\",\"tag_h5\":\"ចំណង​ជើង 5\",\"tag_h6\":\"ចំណង​ជើង 6\",\"tag_p\":\"ធម្មតា\",\"tag_pre\":\"Formatted\"},\"horizontalrule\":{\"toolbar\":\"បន្ថែមបន្ទាត់ផ្តេក\"},\"image\":{\"alt\":\"អត្ថបទជំនួស\",\"border\":\"ស៊ុម\",\"btnUpload\":\"ផ្ញើ​ទៅ​ម៉ាស៊ីន​បម្រើ\",\"button2Img\":\"តើ​អ្នក​ចង់​ផ្លាស់​ប្ដូរ​ប៊ូតុង​រូបភាព​ដែល​បាន​ជ្រើស នៅ​លើ​រូបភាព​ធម្មតា​មួយ​មែនទេ?\",\"hSpace\":\"គម្លាត​ផ្ដេក\",\"img2Button\":\"តើ​អ្នក​ចង់​ផ្លាស់​ប្ដូរ​រូបភាព​ដែល​បាន​ជ្រើស នៅ​លើ​ប៊ូតុង​រូបភាព​មែនទេ?\",\"infoTab\":\"ពត៌មានអំពីរូបភាព\",\"linkTab\":\"តំណ\",\"lockRatio\":\"ចាក់​សោ​ផល​ធៀប\",\"menu\":\"លក្ខណៈ​រូបភាព\",\"resetSize\":\"កំណត់ទំហំឡើងវិញ\",\"title\":\"លក្ខណៈ​រូបភាព\",\"titleButton\":\"លក្ខណៈ​ប៊ូតុង​រូបភាព\",\"upload\":\"ផ្ទុកឡើង\",\"urlMissing\":\"ខ្វះ URL ប្រភព​រូប​ភាព។\",\"vSpace\":\"គម្លាត​បញ្ឈរ\",\"validateBorder\":\"ស៊ុម​ត្រូវ​តែ​ជា​លេខ។\",\"validateHSpace\":\"គម្លាត​ផ្ដេក​ត្រូវ​តែ​ជា​លេខ។\",\"validateVSpace\":\"គម្លាត​បញ្ឈរ​ត្រូវ​តែ​ជា​លេខ។\"},\"indent\":{\"indent\":\"បន្ថែមការចូលបន្ទាត់\",\"outdent\":\"បន្ថយការចូលបន្ទាត់\"},\"fakeobjects\":{\"anchor\":\"យុថ្កា\",\"flash\":\"Flash មាន​ចលនា\",\"hiddenfield\":\"វាល​កំបាំង\",\"iframe\":\"IFrame\",\"unknown\":\"វត្ថុ​មិន​ស្គាល់\"},\"link\":{\"acccessKey\":\"សោរ​ចូល\",\"advanced\":\"កម្រិត​ខ្ពស់\",\"advisoryContentType\":\"ប្រភេទអត្ថបទ​ប្រឹក្សា\",\"advisoryTitle\":\"ចំណងជើង​ប្រឹក្សា\",\"anchor\":{\"toolbar\":\"យុថ្កា\",\"menu\":\"កែ​យុថ្កា\",\"title\":\"លក្ខណៈ​យុថ្កា\",\"name\":\"ឈ្មោះ​យុថ្កា\",\"errorName\":\"សូម​បញ្ចូល​ឈ្មោះ​យុថ្កា\",\"remove\":\"ដក​យុថ្កា​ចេញ\"},\"anchorId\":\"តាម ID ធាតុ\",\"anchorName\":\"តាម​ឈ្មោះ​យុថ្កា\",\"charset\":\"លេខកូតអក្សររបស់ឈ្នាប់\",\"cssClasses\":\"Stylesheet Classes\",\"emailAddress\":\"អាសយដ្ឋាន​អ៊ីមែល\",\"emailBody\":\"តួ​អត្ថបទ\",\"emailSubject\":\"ប្រធានបទ​សារ\",\"id\":\"Id\",\"info\":\"ព័ត៌មាន​ពី​តំណ\",\"langCode\":\"កូដ​ភាសា\",\"langDir\":\"ទិសដៅភាសា\",\"langDirLTR\":\"ពីឆ្វេងទៅស្តាំ(LTR)\",\"langDirRTL\":\"ពីស្តាំទៅឆ្វេង(RTL)\",\"menu\":\"កែ​តំណ\",\"name\":\"ឈ្មោះ\",\"noAnchors\":\"(មិន​មាន​យុថ្កា​នៅ​ក្នុង​ឯកសារ​អត្ថថបទ​ទេ)\",\"noEmail\":\"សូម​បញ្ចូល​អាសយដ្ឋាន​អ៊ីមែល\",\"noUrl\":\"សូម​បញ្ចូល​តំណ URL\",\"other\":\"<ផ្សេង​ទៀត>\",\"popupDependent\":\"Dependent (Netscape)\",\"popupFeatures\":\"មុខ​ងារ​ផុស​ផ្ទាំង​វីនដូ​ឡើង\",\"popupFullScreen\":\"ពេញ​អេក្រង់ (IE)\",\"popupLeft\":\"ទីតាំងខាងឆ្វេង\",\"popupLocationBar\":\"របារ​ទីតាំង\",\"popupMenuBar\":\"របារ​ម៉ឺនុយ\",\"popupResizable\":\"អាច​ប្ដូរ​ទំហំ\",\"popupScrollBars\":\"របារ​រំកិល\",\"popupStatusBar\":\"របារ​ស្ថានភាព\",\"popupToolbar\":\"របារ​ឧបករណ៍\",\"popupTop\":\"ទីតាំង​កំពូល\",\"rel\":\"សម្ពន្ធ​ភាព\",\"selectAnchor\":\"រើស​យក​យុថ្កា​មួយ\",\"styles\":\"ស្ទីល\",\"tabIndex\":\"លេខ Tab\",\"target\":\"គោលដៅ\",\"targetFrame\":\"<ស៊ុម>\",\"targetFrameName\":\"ឈ្មោះ​ស៊ុម​ជា​គោល​ដៅ\",\"targetPopup\":\"<វីនដូ​ផុស​ឡើង>\",\"targetPopupName\":\"ឈ្មោះ​វីនដូត​ផុស​ឡើង\",\"title\":\"តំណ\",\"toAnchor\":\"ត​ភ្ជាប់​ទៅ​យុថ្កា​ក្នុង​អត្ថបទ\",\"toEmail\":\"អ៊ីមែល\",\"toUrl\":\"URL\",\"toolbar\":\"តំណ\",\"type\":\"ប្រភេទ​តំណ\",\"unlink\":\"ផ្ដាច់​តំណ\",\"upload\":\"ផ្ទុក​ឡើង\"},\"list\":{\"bulletedlist\":\"បញ្ចូល / លុប​បញ្ជី​ជា​ចំណុច​មូល\",\"numberedlist\":\"បញ្ចូល / លុប​បញ្ជី​ជា​លេខ\"},\"magicline\":{\"title\":\"បញ្ចូល​កថាខណ្ឌ​នៅ​ទីនេះ\"},\"maximize\":{\"maximize\":\"ពង្រីក​អតិបរមា\",\"minimize\":\"បង្រួម​អប្បបរមា\"},\"pastetext\":{\"button\":\"បិទ​ភ្ជាប់​ជា​អត្ថបទ​ធម្មតា\",\"title\":\"បិទ​ភ្ជាប់​ជា​អត្ថបទ​ធម្មតា\"},\"pastefromword\":{\"confirmCleanup\":\"អត្ថបទ​ដែល​អ្នក​ចង់​បិទ​ភ្ជាប់​នេះ ទំនង​ដូច​ជា​ចម្លង​មក​ពី Word។ តើ​អ្នក​ចង់​សម្អាត​វា​មុន​បិទ​ភ្ជាប់​ទេ?\",\"error\":\"ដោយ​សារ​មាន​បញ្ហា​ផ្នែក​ក្នុង​ធ្វើ​ឲ្យ​មិន​អាច​សម្អាត​ទិន្នន័យ​ដែល​បាន​បិទ​ភ្ជាប់\",\"title\":\"បិទ​ភ្ជាប់​ពី Word\",\"toolbar\":\"បិទ​ភ្ជាប់​ពី Word\"},\"removeformat\":{\"toolbar\":\"ជម្រះ​ទ្រង់​ទ្រាយ\"},\"sourcearea\":{\"toolbar\":\"អក្សរ​កូដ\"},\"specialchar\":{\"options\":\"ជម្រើស​តួ​អក្សរ​ពិសេស\",\"title\":\"រើស​តួអក្សរ​ពិសេស\",\"toolbar\":\"បន្ថែមអក្សរពិសេស\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"រចនាបថ\",\"panelTitle\":\"ទ្រង់ទ្រាយ​រចនាបថ\",\"panelTitle1\":\"រចនាបថ​ប្លក់\",\"panelTitle2\":\"រចនាបថ​ក្នុង​ជួរ\",\"panelTitle3\":\"រចនាបថ​វត្ថុ\"},\"table\":{\"border\":\"ទំហំ​បន្ទាត់​ស៊ុម\",\"caption\":\"ចំណងជើង\",\"cell\":{\"menu\":\"ក្រឡា\",\"insertBefore\":\"បញ្ចូល​ក្រឡា​ពីមុខ\",\"insertAfter\":\"បញ្ចូល​ក្រឡា​ពី​ក្រោយ\",\"deleteCell\":\"លុប​ក្រឡា\",\"merge\":\"បញ្ចូល​ក្រឡា​ចូល​គ្នា\",\"mergeRight\":\"បញ្ចូល​គ្នា​ខាង​ស្ដាំ\",\"mergeDown\":\"បញ្ចូល​គ្នា​ចុះ​ក្រោម\",\"splitHorizontal\":\"ពុះ​ក្រឡា​ផ្ដេក\",\"splitVertical\":\"ពុះ​ក្រឡា​បញ្ឈរ\",\"title\":\"លក្ខណៈ​ក្រឡា\",\"cellType\":\"ប្រភេទ​ក្រឡា\",\"rowSpan\":\"ចំនួន​ជួរ​ដេក​លាយ​ចូល​គ្នា\",\"colSpan\":\"ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា\",\"wordWrap\":\"រុំ​ពាក្យ\",\"hAlign\":\"ការ​តម្រឹម​ផ្ដេក\",\"vAlign\":\"ការ​តម្រឹម​បញ្ឈរ\",\"alignBaseline\":\"ខ្សែ​បន្ទាត់​គោល\",\"bgColor\":\"ពណ៌​ផ្ទៃ​ក្រោយ\",\"borderColor\":\"ពណ៌​បន្ទាត់​ស៊ុម\",\"data\":\"ទិន្នន័យ\",\"header\":\"ក្បាល\",\"yes\":\"ព្រម\",\"no\":\"ទេ\",\"invalidWidth\":\"ទទឹង​ក្រឡា​ត្រូវ​តែ​ជា​លេខ។\",\"invalidHeight\":\"កម្ពស់​ក្រឡា​ត្រូវ​តែ​ជា​លេខ។\",\"invalidRowSpan\":\"ចំនួន​ជួរ​ដេក​លាយ​ចូល​គ្នា​ត្រូវ​តែ​ជា​លេខ​ទាំង​អស់។\",\"invalidColSpan\":\"ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា​ត្រូវ​តែ​ជា​លេខ​ទាំង​អស់។\",\"chooseColor\":\"រើស\"},\"cellPad\":\"ចន្លោះ​ក្រឡា\",\"cellSpace\":\"គម្លាត​ក្រឡា\",\"column\":{\"menu\":\"ជួរ​ឈរ\",\"insertBefore\":\"បញ្ចូល​ជួរ​ឈរ​ពីមុខ\",\"insertAfter\":\"បញ្ចូល​ជួរ​ឈរ​ពី​ក្រោយ\",\"deleteColumn\":\"លុប​ជួរ​ឈរ\"},\"columns\":\"ជួរឈរ\",\"deleteTable\":\"លុប​តារាង\",\"headers\":\"ក្បាល\",\"headersBoth\":\"ទាំង​ពីរ\",\"headersColumn\":\"ជួរ​ឈរ​ដំបូង\",\"headersNone\":\"មិន​មាន\",\"headersRow\":\"ជួរ​ដេក​ដំបូង\",\"invalidBorder\":\"ទំហំ​បន្ទាត់​ស៊ុម​ត្រូវ​តែ​ជា​លេខ។\",\"invalidCellPadding\":\"ចន្លោះ​ក្រឡា​ត្រូវ​តែជា​លេខ​វិជ្ជមាន។\",\"invalidCellSpacing\":\"គម្លាត​ក្រឡា​ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន។\",\"invalidCols\":\"ចំនួន​ជួរ​ឈរ​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។\",\"invalidHeight\":\"កម្ពស់​តារាង​ត្រូវ​តែ​ជា​លេខ\",\"invalidRows\":\"ចំនួន​ជួរ​ដេក​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។\",\"invalidWidth\":\"ទទឹង​តារាង​ត្រូវ​តែ​ជា​លេខ។\",\"menu\":\"លក្ខណៈ​តារាង\",\"row\":{\"menu\":\"ជួរ​ដេក\",\"insertBefore\":\"បញ្ចូល​ជួរ​ដេក​ពីមុខ\",\"insertAfter\":\"បញ្ចូល​ជួរ​ដេក​ពី​ក្រោយ\",\"deleteRow\":\"លុប​ជួរ​ដេក\"},\"rows\":\"ជួរ​ដេក\",\"summary\":\"សេចក្តី​សង្ខេប\",\"title\":\"លក្ខណៈ​តារាង\",\"toolbar\":\"តារាង\",\"widthPc\":\"ភាគរយ\",\"widthPx\":\"ភីកសែល\",\"widthUnit\":\"ឯកតា​ទទឹង\"},\"undo\":{\"redo\":\"ធ្វើ​ឡើង​វិញ\",\"undo\":\"មិន​ធ្វើ​វិញ\"},\"wsc\":{\"btnIgnore\":\"មិនផ្លាស់ប្តូរ\",\"btnIgnoreAll\":\"មិនផ្លាស់ប្តូរ ទាំងអស់\",\"btnReplace\":\"ជំនួស\",\"btnReplaceAll\":\"ជំនួសទាំងអស់\",\"btnUndo\":\"សារឡើងវិញ\",\"changeTo\":\"ផ្លាស់ប្តូរទៅ\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"ពុំមានកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ ។ តើចង់ទាញយកពីណា?\",\"manyChanges\":\"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្តូរ\",\"noChanges\":\"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពុំមានផ្លាស់ប្តូរ\",\"noMispell\":\"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: គ្មានកំហុស\",\"noSuggestions\":\"- គ្មានសំណើរ -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"គ្មានក្នុងវចនានុក្រម\",\"oneChange\":\"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពាក្យមួយត្រូចបានផ្លាស់ប្តូរ\",\"progress\":\"កំពុងពិនិត្យអក្ខរាវិរុទ្ធ...\",\"title\":\"Spell Checker\",\"toolbar\":\"ពិនិត្យអក្ខរាវិរុទ្ធ\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/ko.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['ko']={\"editor\":\"리치 텍스트 편집기\",\"editorPanel\":\"리치 텍스트 편집기 패널\",\"common\":{\"editorHelp\":\"도움이 필요하면 ALT 0 을 누르세요\",\"browseServer\":\"서버 보기\",\"url\":\"URL\",\"protocol\":\"프로토콜\",\"upload\":\"업로드\",\"uploadSubmit\":\"서버로 전송\",\"image\":\"이미지\",\"flash\":\"플래시\",\"form\":\"폼\",\"checkbox\":\"체크 박스\",\"radio\":\"라디오 버튼\",\"textField\":\"한 줄 입력 칸\",\"textarea\":\"여러 줄 입력 칸\",\"hiddenField\":\"숨은 입력 칸\",\"button\":\"버튼\",\"select\":\"선택 목록\",\"imageButton\":\"이미지 버튼\",\"notSet\":\"<설정 안 됨>\",\"id\":\"ID\",\"name\":\"이름\",\"langDir\":\"언어 방향\",\"langDirLtr\":\"왼쪽에서 오른쪽 (LTR)\",\"langDirRtl\":\"오른쪽에서 왼쪽 (RTL)\",\"langCode\":\"언어 코드\",\"longDescr\":\"웹 주소 설명\",\"cssClass\":\"스타일 시트 클래스\",\"advisoryTitle\":\"보조 제목\",\"cssStyle\":\"스타일\",\"ok\":\"확인\",\"cancel\":\"취소\",\"close\":\"닫기\",\"preview\":\"미리보기\",\"resize\":\"크기 조절\",\"generalTab\":\"일반\",\"advancedTab\":\"자세히\",\"validateNumberFailed\":\"이 값은 숫자가 아닙니다.\",\"confirmNewPage\":\"저장하지 않은 모든 변경사항은 유실됩니다. 정말로 새로운 페이지를 부르겠습니까?\",\"confirmCancel\":\"일부 옵션이 변경 되었습니다. 정말로 창을 닫겠습니까?\",\"options\":\"옵션\",\"target\":\"타겟\",\"targetNew\":\"새 창 (_blank)\",\"targetTop\":\"최상위 창 (_top)\",\"targetSelf\":\"같은 창 (_self)\",\"targetParent\":\"부모 창 (_parent)\",\"langDirLTR\":\"왼쪽에서 오른쪽 (LTR)\",\"langDirRTL\":\"오른쪽에서 왼쪽 (RTL)\",\"styles\":\"스타일\",\"cssClasses\":\"스타일 시트 클래스\",\"width\":\"너비\",\"height\":\"높이\",\"align\":\"정렬\",\"alignLeft\":\"왼쪽\",\"alignRight\":\"오른쪽\",\"alignCenter\":\"가운데\",\"alignJustify\":\"양쪽 맞춤\",\"alignTop\":\"위\",\"alignMiddle\":\"중간\",\"alignBottom\":\"아래\",\"alignNone\":\"기본\",\"invalidValue\":\"잘못된 값.\",\"invalidHeight\":\"높이는 숫자여야 합니다.\",\"invalidWidth\":\"넓이는 숫자여야 합니다.\",\"invalidCssLength\":\"\\\"%1\\\" 값은 유효한 CSS 측정 단위(px, %, in, cm, mm, em, ex, pt, or pc)를 포함하거나 포함하지 않은 양수 여야 합니다.\",\"invalidHtmlLength\":\"\\\"%1\\\" 값은 유효한 HTML 측정 단위(px or %)를 포함하거나 포함하지 않은 양수여야 합니다.\",\"invalidInlineStyle\":\"인라인 스타일에 설정된 값은 \\\"name : value\\\" 형식을 가진 하나 이상의 투플(tuples)이 세미콜론(;)으로 구분되어 구성되어야 합니다.\",\"cssLengthTooltip\":\"픽셀 단위의 숫자만 입력하시거나 유효한 CSS 단위(px, %, in, cm, mm, em, ex, pt, or pc)와 함께 숫자를 입력해주세요.\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, 사용불가</span>\"},\"about\":{\"copy\":\"저작권 &copy; $1 . 판권 소유.\",\"dlgTitle\":\"CKEditor 에 대하여\",\"help\":\"도움이 필요하시면 $1 를 확인하세요.\",\"moreInfo\":\"라이선스에 대한 정보는 저희 웹 사이트를 참고하세요:\",\"title\":\"CKEditor에 대하여\",\"userGuide\":\"CKEditor 사용설명서\"},\"basicstyles\":{\"bold\":\"굵게\",\"italic\":\"기울임꼴\",\"strike\":\"취소선\",\"subscript\":\"아래 첨자\",\"superscript\":\"위 첨자\",\"underline\":\"밑줄\"},\"blockquote\":{\"toolbar\":\"인용 단락\"},\"clipboard\":{\"copy\":\"복사\",\"copyError\":\"브라우저의 보안설정 때문에 복사할 수 없습니다. 키보드(Ctrl/Cmd+C)를 이용해서 복사하십시오.\",\"cut\":\"잘라내기\",\"cutError\":\"브라우저의 보안설정 때문에 잘라내기 기능을 실행할 수 없습니다. 키보드(Ctrl/Cmd+X)를 이용해서 잘라내기 하십시오\",\"paste\":\"붙여넣기\",\"pasteArea\":\"붙여넣기 범위\",\"pasteMsg\":\"키보드(<strong>Ctrl/Cmd+V</strong>)를 이용해서 상자안에 붙여넣고 <strong>확인</strong> 를 누르세요.\",\"securityMsg\":\"브라우저 보안 설정으로 인해, 클립보드에 직접 접근할 수 없습니다. 이 창에 다시 붙여넣기 하십시오.\",\"title\":\"붙여넣기\"},\"contextmenu\":{\"options\":\"컨텍스트 메뉴 옵션\"},\"button\":{\"selectedLabel\":\"%1 (선택됨)\"},\"toolbar\":{\"toolbarCollapse\":\"툴바 줄이기\",\"toolbarExpand\":\"툴바 확장\",\"toolbarGroups\":{\"document\":\"문서\",\"clipboard\":\"클립보드/실행 취소\",\"editing\":\"편집\",\"forms\":\"폼\",\"basicstyles\":\"기본 스타일\",\"paragraph\":\"단락\",\"links\":\"링크\",\"insert\":\"삽입\",\"styles\":\"스타일\",\"colors\":\"색상\",\"tools\":\"도구\"},\"toolbars\":\"에디터 툴바\"},\"elementspath\":{\"eleLabel\":\"요소 경로\",\"eleTitle\":\"%1 요소\"},\"format\":{\"label\":\"문단\",\"panelTitle\":\"문단 형식\",\"tag_address\":\"글쓴이\",\"tag_div\":\"기본 (DIV)\",\"tag_h1\":\"제목 1\",\"tag_h2\":\"제목 2\",\"tag_h3\":\"제목 3\",\"tag_h4\":\"제목 4\",\"tag_h5\":\"제목 5\",\"tag_h6\":\"제목 6\",\"tag_p\":\"본문\",\"tag_pre\":\"정형 문단\"},\"horizontalrule\":{\"toolbar\":\"가로 줄 삽입\"},\"image\":{\"alt\":\"대체 문자열\",\"border\":\"테두리\",\"btnUpload\":\"서버로 전송\",\"button2Img\":\"단순 이미지에서 선택한 이미지 버튼을 변환하시겠습니까?\",\"hSpace\":\"가로 여백\",\"img2Button\":\"이미지 버튼에 선택한 이미지를 변환하시겠습니까?\",\"infoTab\":\"이미지 정보\",\"linkTab\":\"링크\",\"lockRatio\":\"비율 유지\",\"menu\":\"이미지 속성\",\"resetSize\":\"원래 크기로\",\"title\":\"이미지 속성\",\"titleButton\":\"이미지 버튼 속성\",\"upload\":\"업로드\",\"urlMissing\":\"이미지 원본 주소(URL)가 없습니다.\",\"vSpace\":\"세로 여백\",\"validateBorder\":\"테두리 두께는 정수여야 합니다.\",\"validateHSpace\":\"가로 길이는 정수여야 합니다.\",\"validateVSpace\":\"세로 길이는 정수여야 합니다.\"},\"indent\":{\"indent\":\"들여쓰기\",\"outdent\":\"내어쓰기\"},\"fakeobjects\":{\"anchor\":\"책갈피\",\"flash\":\"플래시 애니메이션\",\"hiddenfield\":\"숨은 입력 칸\",\"iframe\":\"아이프레임\",\"unknown\":\"알 수 없는 객체\"},\"link\":{\"acccessKey\":\"액세스 키\",\"advanced\":\"고급\",\"advisoryContentType\":\"보조 콘텐츠 유형\",\"advisoryTitle\":\"보조 제목\",\"anchor\":{\"toolbar\":\"책갈피\",\"menu\":\"책갈피 편집\",\"title\":\"책갈피 속성\",\"name\":\"책갈피 이름\",\"errorName\":\"책갈피 이름을 입력하십시오\",\"remove\":\"책갈피 제거\"},\"anchorId\":\"책갈피 ID\",\"anchorName\":\"책갈피 이름\",\"charset\":\"링크된 자료 문자열 인코딩\",\"cssClasses\":\"스타일시트 클래스\",\"emailAddress\":\"이메일 주소\",\"emailBody\":\"메시지 내용\",\"emailSubject\":\"메시지 제목\",\"id\":\"ID\",\"info\":\"링크 정보\",\"langCode\":\"언어 코드\",\"langDir\":\"언어 방향\",\"langDirLTR\":\"왼쪽에서 오른쪽 (LTR)\",\"langDirRTL\":\"오른쪽에서 왼쪽 (RTL)\",\"menu\":\"링크 수정\",\"name\":\"이름\",\"noAnchors\":\"(문서에 책갈피가 없습니다.)\",\"noEmail\":\"이메일 주소를 입력하십시오\",\"noUrl\":\"링크 주소(URL)를 입력하십시오\",\"other\":\"<기타>\",\"popupDependent\":\"Dependent (Netscape)\",\"popupFeatures\":\"팝업창 속성\",\"popupFullScreen\":\"전체화면 (IE)\",\"popupLeft\":\"왼쪽 위치\",\"popupLocationBar\":\"주소 표시줄\",\"popupMenuBar\":\"메뉴 바\",\"popupResizable\":\"크기 조절 가능\",\"popupScrollBars\":\"스크롤 바\",\"popupStatusBar\":\"상태 바\",\"popupToolbar\":\"툴바\",\"popupTop\":\"위쪽 위치\",\"rel\":\"관계\",\"selectAnchor\":\"책갈피 선택\",\"styles\":\"스타일\",\"tabIndex\":\"탭 순서\",\"target\":\"타겟\",\"targetFrame\":\"<프레임>\",\"targetFrameName\":\"타겟 프레임 이름\",\"targetPopup\":\"<팝업 창>\",\"targetPopupName\":\"팝업 창 이름\",\"title\":\"링크\",\"toAnchor\":\"책갈피\",\"toEmail\":\"이메일\",\"toUrl\":\"주소(URL)\",\"toolbar\":\"링크 삽입/변경\",\"type\":\"링크 종류\",\"unlink\":\"링크 지우기\",\"upload\":\"업로드\"},\"list\":{\"bulletedlist\":\"순서 없는 목록\",\"numberedlist\":\"순서 있는 목록\"},\"magicline\":{\"title\":\"여기에 단락 삽입\"},\"maximize\":{\"maximize\":\"최대화\",\"minimize\":\"최소화\"},\"pastetext\":{\"button\":\"텍스트로 붙여넣기\",\"title\":\"텍스트로 붙여넣기\"},\"pastefromword\":{\"confirmCleanup\":\"붙여 넣을 내용은 MS Word에서 복사 한 것입니다. 붙여 넣기 전에 정리 하시겠습니까?\",\"error\":\"내부 오류로 붙여 넣은 데이터를 정리 할 수 없습니다.\",\"title\":\"MS Word 에서 붙여넣기\",\"toolbar\":\"MS Word 에서 붙여넣기\"},\"removeformat\":{\"toolbar\":\"형식 지우기\"},\"sourcearea\":{\"toolbar\":\"소스\"},\"specialchar\":{\"options\":\"특수문자 옵션\",\"title\":\"특수문자 선택\",\"toolbar\":\"특수문자 삽입\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"스타일\",\"panelTitle\":\"전체 구성 스타일\",\"panelTitle1\":\"블록 스타일\",\"panelTitle2\":\"인라인 스타일\",\"panelTitle3\":\"객체 스타일\"},\"table\":{\"border\":\"테두리 두께\",\"caption\":\"주석\",\"cell\":{\"menu\":\"셀\",\"insertBefore\":\"앞에 셀 삽입\",\"insertAfter\":\"뒤에 셀 삽입\",\"deleteCell\":\"셀 삭제\",\"merge\":\"셀 합치기\",\"mergeRight\":\"오른쪽 합치기\",\"mergeDown\":\"왼쪽 합치기\",\"splitHorizontal\":\"수평 나누기\",\"splitVertical\":\"수직 나누기\",\"title\":\"셀 속성\",\"cellType\":\"셀 종류\",\"rowSpan\":\"행 간격\",\"colSpan\":\"열 간격\",\"wordWrap\":\"줄 끝 단어 줄 바꿈\",\"hAlign\":\"가로 정렬\",\"vAlign\":\"세로 정렬\",\"alignBaseline\":\"영문 글꼴 기준선\",\"bgColor\":\"배경색\",\"borderColor\":\"테두리 색\",\"data\":\"자료\",\"header\":\"머릿칸\",\"yes\":\"예\",\"no\":\"아니오\",\"invalidWidth\":\"셀 너비는 숫자여야 합니다.\",\"invalidHeight\":\"셀 높이는 숫자여야 합니다.\",\"invalidRowSpan\":\"행 간격은 정수여야 합니다.\",\"invalidColSpan\":\"열 간격은 정수여야 합니다.\",\"chooseColor\":\"선택\"},\"cellPad\":\"셀 여백\",\"cellSpace\":\"셀 간격\",\"column\":{\"menu\":\"열\",\"insertBefore\":\"왼쪽에 열 삽입\",\"insertAfter\":\"오른쪽에 열 삽입\",\"deleteColumn\":\"열 삭제\"},\"columns\":\"열\",\"deleteTable\":\"표 삭제\",\"headers\":\"머릿칸\",\"headersBoth\":\"모두\",\"headersColumn\":\"첫 열\",\"headersNone\":\"없음\",\"headersRow\":\"첫 행\",\"invalidBorder\":\"테두리 두께는 숫자여야 합니다.\",\"invalidCellPadding\":\"셀 여백은 0 이상이어야 합니다.\",\"invalidCellSpacing\":\"셀 간격은 0 이상이어야 합니다.\",\"invalidCols\":\"열 번호는 0보다 커야 합니다.\",\"invalidHeight\":\"표 높이는 숫자여야 합니다.\",\"invalidRows\":\"행 번호는 0보다 커야 합니다.\",\"invalidWidth\":\"표의 너비는 숫자여야 합니다.\",\"menu\":\"표 속성\",\"row\":{\"menu\":\"행\",\"insertBefore\":\"위에 행 삽입\",\"insertAfter\":\"아래에 행 삽입\",\"deleteRow\":\"행 삭제\"},\"rows\":\"행\",\"summary\":\"요약\",\"title\":\"표 속성\",\"toolbar\":\"표\",\"widthPc\":\"백분율\",\"widthPx\":\"픽셀\",\"widthUnit\":\"너비 단위\"},\"undo\":{\"redo\":\"다시 실행\",\"undo\":\"실행 취소\"},\"wsc\":{\"btnIgnore\":\"건너뜀\",\"btnIgnoreAll\":\"모두 건너뜀\",\"btnReplace\":\"변경\",\"btnReplaceAll\":\"모두 변경\",\"btnUndo\":\"취소\",\"changeTo\":\"변경할 단어\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"철자 검사기가 철치되지 않았습니다. 지금 다운로드하시겠습니까?\",\"manyChanges\":\"철자검사 완료: %1 단어가 변경되었습니다.\",\"noChanges\":\"철자검사 완료: 변경된 단어가 없습니다.\",\"noMispell\":\"철자검사 완료: 잘못된 철자가 없습니다.\",\"noSuggestions\":\"- 추천단어 없음 -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"사전에 없는 단어\",\"oneChange\":\"철자검사 완료: 단어가 변경되었습니다.\",\"progress\":\"철자검사를 진행중입니다...\",\"title\":\"Spell Check\",\"toolbar\":\"철자검사\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/ku.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['ku']={\"editor\":\"سەرنووسەی دەقی تەواو\",\"editorPanel\":\"بڕگەی سەرنووسەی دەقی تەواو\",\"common\":{\"editorHelp\":\"کلیکی ALT لەگەڵ 0 بکه‌ بۆ یارمەتی\",\"browseServer\":\"هێنانی ڕاژە\",\"url\":\"ناونیشانی بەستەر\",\"protocol\":\"پڕۆتۆکۆڵ\",\"upload\":\"بارکردن\",\"uploadSubmit\":\"ناردنی بۆ ڕاژە\",\"image\":\"وێنە\",\"flash\":\"فلاش\",\"form\":\"داڕشتە\",\"checkbox\":\"خانەی نیشانکردن\",\"radio\":\"جێگرەوەی دوگمە\",\"textField\":\"خانەی دەق\",\"textarea\":\"ڕووبەری دەق\",\"hiddenField\":\"شاردنەوی خانە\",\"button\":\"دوگمە\",\"select\":\"هەڵبژاردەی خانە\",\"imageButton\":\"دوگمەی وێنە\",\"notSet\":\"<هیچ دانەدراوە>\",\"id\":\"ناسنامە\",\"name\":\"ناو\",\"langDir\":\"ئاراستەی زمان\",\"langDirLtr\":\"چەپ بۆ ڕاست (LTR)\",\"langDirRtl\":\"ڕاست بۆ چەپ (RTL)\",\"langCode\":\"هێمای زمان\",\"longDescr\":\"پێناسەی درێژی بەستەر\",\"cssClass\":\"شێوازی چینی په‌ڕە\",\"advisoryTitle\":\"ڕاوێژکاری سەردێڕ\",\"cssStyle\":\"شێواز\",\"ok\":\"باشە\",\"cancel\":\"پاشگەزبوونەوە\",\"close\":\"داخستن\",\"preview\":\"پێشبینین\",\"resize\":\"گۆڕینی ئەندازە\",\"generalTab\":\"گشتی\",\"advancedTab\":\"پەرەسەندوو\",\"validateNumberFailed\":\"ئەم نرخە ژمارە نیە، تکایە نرخێکی ژمارە بنووسە.\",\"confirmNewPage\":\"سەرجەم گۆڕانکاریەکان و پێکهاتەکانی ناووەوە لەدەست دەدەی گەر بێتوو پاشکەوتی نەکەی یەکەم جار، تۆ هەر دڵنیایی لەکردنەوەی پەنجەرەکی نوێ؟\",\"confirmCancel\":\"هەندێك هەڵبژاردە گۆڕدراوە. تۆ دڵنیایی لە داخستنی ئەم دیالۆگە؟\",\"options\":\"هەڵبژاردەکان\",\"target\":\"ئامانج\",\"targetNew\":\"پەنجەرەیەکی نوێ (_blank)\",\"targetTop\":\"لووتکەی پەنجەرە (_top)\",\"targetSelf\":\"لەهەمان پەنجەرە (_self)\",\"targetParent\":\"پەنجەرەی باوان (_parent)\",\"langDirLTR\":\"چەپ بۆ ڕاست (LTR)\",\"langDirRTL\":\"ڕاست بۆ چەپ (RTL)\",\"styles\":\"شێواز\",\"cssClasses\":\"شێوازی چینی پەڕە\",\"width\":\"پانی\",\"height\":\"درێژی\",\"align\":\"ڕێککەرەوە\",\"alignLeft\":\"چەپ\",\"alignRight\":\"ڕاست\",\"alignCenter\":\"ناوەڕاست\",\"alignJustify\":\"هاوستوونی\",\"alignTop\":\"سەرەوە\",\"alignMiddle\":\"ناوەند\",\"alignBottom\":\"ژێرەوە\",\"alignNone\":\"هیچ\",\"invalidValue\":\"نرخێکی نادرووست.\",\"invalidHeight\":\"درێژی دەبێت ژمارە بێت.\",\"invalidWidth\":\"پانی دەبێت ژمارە بێت.\",\"invalidCssLength\":\"ئەم نرخەی دراوە بۆ خانەی \\\"%1\\\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی (px, %, in, cm, mm, em, ex, pt, یان pc).\",\"invalidHtmlLength\":\"ئەم نرخەی دراوە بۆ خانەی \\\"%1\\\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی HTML (px یان %).\",\"invalidInlineStyle\":\"دانەی نرخی شێوازی ناوهێڵ دەبێت پێکهاتبێت لەیەك یان زیاتری داڕشتە \\\"ناو : نرخ\\\", جیاکردنەوەی بە فاریزە و خاڵ\",\"cssLengthTooltip\":\"ژمارەیەك بنووسه‌ بۆ نرخی piksel یان ئامرازێکی درووستی CSS (px, %, in, cm, mm, em, ex, pt, یان pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, ئامادە نیە</span>\"},\"about\":{\"copy\":\"مافی لەبەرگەرتنەوەی &copy; $1. گشتی پارێزراوه. ورگێڕانی بۆ کوردی لەلایەن هۆژە کۆیی.\",\"dlgTitle\":\"دەربارەی CKEditor\",\"help\":\"سەیری $1 بکه بۆ یارمەتی.\",\"moreInfo\":\"بۆ زانیاری زیاتر دەربارەی مۆڵەتی بەکارهێنان، تکایه سەردانی ماڵپەڕەکەمان بکه:\",\"title\":\"دەربارەی CKEditor\",\"userGuide\":\"ڕێپیشاندەری CKEditors\"},\"basicstyles\":{\"bold\":\"قەڵەو\",\"italic\":\"لار\",\"strike\":\"لێدان\",\"subscript\":\"ژێرنووس\",\"superscript\":\"سەرنووس\",\"underline\":\"ژێرهێڵ\"},\"blockquote\":{\"toolbar\":\"بەربەستکردنی ووتەی وەرگیراو\"},\"clipboard\":{\"copy\":\"لەبەرگرتنەوە\",\"copyError\":\"پارێزی وێبگەڕەکەت ڕێگەنادات بەسەرنووسەکە لە لکاندنی دەقی خۆکارارنە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+C).\",\"cut\":\"بڕین\",\"cutError\":\"پارێزی وێبگەڕەکەت ڕێگەنادات بە سەرنووسەکە لەبڕینی خۆکارانە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+X).\",\"paste\":\"لکاندن\",\"pasteArea\":\"ناوچەی لکاندن\",\"pasteMsg\":\"تکایە بیلکێنە لەناوەوەی ئەم سنوقە لەڕێی تەختەکلیلەکەت بە بەکارهێنانی کلیلی (<STRONG>Ctrl/Cmd+V</STRONG>) دووای کلیکی باشە بکە.\",\"securityMsg\":\"بەهۆی شێوەپێدانی پارێزی وێبگەڕەکەت، سەرنووسەکه ناتوانێت دەستبگەیەنێت بەهەڵگیراوەکە ڕاستەوخۆ. بۆیه پێویسته دووباره بیلکێنیت لەم پەنجەرەیه.\",\"title\":\"لکاندن\"},\"contextmenu\":{\"options\":\"هەڵبژاردەی لیستەی کلیکی دەستی ڕاست\"},\"button\":{\"selectedLabel\":\"%1 (هەڵبژێردراو)\"},\"toolbar\":{\"toolbarCollapse\":\"شاردنەوی هێڵی تووڵامراز\",\"toolbarExpand\":\"نیشاندانی هێڵی تووڵامراز\",\"toolbarGroups\":{\"document\":\"پەڕه\",\"clipboard\":\"بڕین/پووچکردنەوە\",\"editing\":\"چاکسازی\",\"forms\":\"داڕشتە\",\"basicstyles\":\"شێوازی بنچینەیی\",\"paragraph\":\"بڕگە\",\"links\":\"بەستەر\",\"insert\":\"خستنە ناو\",\"styles\":\"شێواز\",\"colors\":\"ڕەنگەکان\",\"tools\":\"ئامرازەکان\"},\"toolbars\":\"تووڵامرازی دەسکاریکەر\"},\"elementspath\":{\"eleLabel\":\"ڕێڕەوی توخمەکان\",\"eleTitle\":\"%1 توخم\"},\"format\":{\"label\":\"ڕازاندنەوە\",\"panelTitle\":\"بەشی ڕازاندنەوه\",\"tag_address\":\"ناونیشان\",\"tag_div\":\"(DIV)-ی ئاسایی\",\"tag_h1\":\"سەرنووسەی ١\",\"tag_h2\":\"سەرنووسەی ٢\",\"tag_h3\":\"سەرنووسەی ٣\",\"tag_h4\":\"سەرنووسەی ٤\",\"tag_h5\":\"سەرنووسەی ٥\",\"tag_h6\":\"سەرنووسەی ٦\",\"tag_p\":\"ئاسایی\",\"tag_pre\":\"شێوازکراو\"},\"horizontalrule\":{\"toolbar\":\"دانانی هێلی ئاسۆیی\"},\"image\":{\"alt\":\"جێگرەوەی دەق\",\"border\":\"پەراوێز\",\"btnUpload\":\"ناردنی بۆ ڕاژه\",\"button2Img\":\"تۆ دەتەوێت دوگمەی وێنەی دیاریکراو بگۆڕیت بۆ وێنەیەکی ئاسایی؟\",\"hSpace\":\"بۆشایی ئاسۆیی\",\"img2Button\":\"تۆ دەتەوێت وێنەی دیاریکراو بگۆڕیت بۆ دوگمەی وێنه؟\",\"infoTab\":\"زانیاری وێنه\",\"linkTab\":\"بەستەر\",\"lockRatio\":\"داخستنی ڕێژه\",\"menu\":\"خاسیەتی وێنه\",\"resetSize\":\"ڕێکخستنەوەی قەباره\",\"title\":\"خاسیەتی وێنه\",\"titleButton\":\"خاسیەتی دوگمەی وێنه\",\"upload\":\"بارکردن\",\"urlMissing\":\"سەرچاوەی بەستەری وێنه بزره\",\"vSpace\":\"بۆشایی ئەستونی\",\"validateBorder\":\"پەراوێز دەبێت بەتەواوی تەنها ژماره بێت.\",\"validateHSpace\":\"بۆشایی ئاسۆیی دەبێت بەتەواوی تەنها ژمارە بێت.\",\"validateVSpace\":\"بۆشایی ئەستونی دەبێت بەتەواوی تەنها ژماره بێت.\"},\"indent\":{\"indent\":\"زیادکردنی بۆشایی\",\"outdent\":\"کەمکردنەوەی بۆشایی\"},\"fakeobjects\":{\"anchor\":\"لەنگەر\",\"flash\":\"فلاش\",\"hiddenfield\":\"شاردنەوەی خانه\",\"iframe\":\"لەچوارچێوە\",\"unknown\":\"بەرکارێکی نەناسراو\"},\"link\":{\"acccessKey\":\"کلیلی دەستپێگەیشتن\",\"advanced\":\"پێشکەوتوو\",\"advisoryContentType\":\"جۆری ناوەڕۆکی ڕاویژکار\",\"advisoryTitle\":\"ڕاوێژکاری سەردێڕ\",\"anchor\":{\"toolbar\":\"دانان/چاکسازی لەنگەر\",\"menu\":\"چاکسازی لەنگەر\",\"title\":\"خاسیەتی لەنگەر\",\"name\":\"ناوی لەنگەر\",\"errorName\":\"تکایه ناوی لەنگەر بنووسه\",\"remove\":\"لابردنی لەنگەر\"},\"anchorId\":\"بەپێی ناسنامەی توخم\",\"anchorName\":\"بەپێی ناوی لەنگەر\",\"charset\":\"بەستەری سەرچاوەی نووسە\",\"cssClasses\":\"شێوازی چینی پەڕه\",\"emailAddress\":\"ناونیشانی ئیمەیل\",\"emailBody\":\"ناوەڕۆکی نامە\",\"emailSubject\":\"بابەتی نامە\",\"id\":\"ناسنامە\",\"info\":\"زانیاری بەستەر\",\"langCode\":\"هێمای زمان\",\"langDir\":\"ئاراستەی زمان\",\"langDirLTR\":\"چەپ بۆ ڕاست (LTR)\",\"langDirRTL\":\"ڕاست بۆ چەپ (RTL)\",\"menu\":\"چاکسازی بەستەر\",\"name\":\"ناو\",\"noAnchors\":\"(هیچ جۆرێکی لەنگەر ئامادە نیە لەم پەڕەیه)\",\"noEmail\":\"تکایە ناونیشانی ئیمەیل بنووسە\",\"noUrl\":\"تکایە ناونیشانی بەستەر بنووسە\",\"other\":\"<هیتر>\",\"popupDependent\":\"پێوەبەستراو (Netscape)\",\"popupFeatures\":\"خاسیەتی پەنجەرەی سەرهەڵدەر\",\"popupFullScreen\":\"پڕ بەپڕی شاشە (IE)\",\"popupLeft\":\"جێگای چەپ\",\"popupLocationBar\":\"هێڵی ناونیشانی بەستەر\",\"popupMenuBar\":\"هێڵی لیسته\",\"popupResizable\":\"توانای گۆڕینی قەباره\",\"popupScrollBars\":\"هێڵی هاتووچۆپێکردن\",\"popupStatusBar\":\"هێڵی دۆخ\",\"popupToolbar\":\"هێڵی تووڵامراز\",\"popupTop\":\"جێگای سەرەوە\",\"rel\":\"پەیوەندی\",\"selectAnchor\":\"هەڵبژاردنی لەنگەرێك\",\"styles\":\"شێواز\",\"tabIndex\":\"بازدەری تابی  ئیندێکس\",\"target\":\"ئامانج\",\"targetFrame\":\"<چووارچێوە>\",\"targetFrameName\":\"ناوی ئامانجی چووارچێوە\",\"targetPopup\":\"<پەنجەرەی سەرهەڵدەر>\",\"targetPopupName\":\"ناوی پەنجەرەی سەرهەڵدەر\",\"title\":\"بەستەر\",\"toAnchor\":\"بەستەر بۆ لەنگەر له دەق\",\"toEmail\":\"ئیمەیل\",\"toUrl\":\"ناونیشانی بەستەر\",\"toolbar\":\"دانان/ڕێکخستنی بەستەر\",\"type\":\"جۆری بەستەر\",\"unlink\":\"لابردنی بەستەر\",\"upload\":\"بارکردن\"},\"list\":{\"bulletedlist\":\"دانان/لابردنی خاڵی لیست\",\"numberedlist\":\"دانان/لابردنی ژمارەی لیست\"},\"magicline\":{\"title\":\"بڕگە لێرە دابنێ\"},\"maximize\":{\"maximize\":\"ئەوپەڕی گەورەیی\",\"minimize\":\"ئەوپەڕی بچووکی\"},\"pastetext\":{\"button\":\"لکاندنی وەك دەقی ڕوون\",\"title\":\"لکاندنی وەك دەقی ڕوون\"},\"pastefromword\":{\"confirmCleanup\":\"ئەم دەقەی بەتەمای بیلکێنی پێدەچێت له word هێنرابێت. دەتەوێت پاکی بکەیوه پێش ئەوەی بیلکێنی؟\",\"error\":\"هیچ ڕێگەیەك نەبوو لەلکاندنی دەقەکه بەهۆی هەڵەیەکی ناوەخۆیی\",\"title\":\"لکاندنی لەلایەن Word\",\"toolbar\":\"لکاندنی لەڕێی Word\"},\"removeformat\":{\"toolbar\":\"لابردنی داڕشتەکە\"},\"sourcearea\":{\"toolbar\":\"سەرچاوە\"},\"specialchar\":{\"options\":\"هەڵبژاردەی نووسەی تایبەتی\",\"title\":\"هەڵبژاردنی نووسەی تایبەتی\",\"toolbar\":\"دانانی نووسەی تایبەتی\"},\"scayt\":{\"btn_about\":\"دهربارهی SCAYT\",\"btn_dictionaries\":\"فهرههنگهکان\",\"btn_disable\":\"ناچالاککردنی SCAYT\",\"btn_enable\":\"چالاککردنی SCAYT\",\"btn_langs\":\"زمانهکان\",\"btn_options\":\"ههڵبژارده\",\"text_title\":\"پشکنینی نووسه لهکاتی نووسین\"},\"stylescombo\":{\"label\":\"شێواز\",\"panelTitle\":\"شێوازی ڕازاندنەوە\",\"panelTitle1\":\"شێوازی خشت\",\"panelTitle2\":\"شێوازی ناوهێڵ\",\"panelTitle3\":\"شێوازی بەرکار\"},\"table\":{\"border\":\"گەورەیی پەراوێز\",\"caption\":\"سەردێڕ\",\"cell\":{\"menu\":\"خانه\",\"insertBefore\":\"دانانی خانه لەپێش\",\"insertAfter\":\"دانانی خانه لەپاش\",\"deleteCell\":\"سڕینەوەی خانه\",\"merge\":\"تێکەڵکردنی خانە\",\"mergeRight\":\"تێکەڵکردنی لەگەڵ ڕاست\",\"mergeDown\":\"تێکەڵکردنی لەگەڵ خوارەوە\",\"splitHorizontal\":\"دابەشکردنی خانەی ئاسۆیی\",\"splitVertical\":\"دابەشکردنی خانەی ئەستونی\",\"title\":\"خاسیەتی خانه\",\"cellType\":\"جۆری خانه\",\"rowSpan\":\"ماوەی نێوان ڕیز\",\"colSpan\":\"بستی ئەستونی\",\"wordWrap\":\"پێچانەوەی وشە\",\"hAlign\":\"ڕیزکردنی ئاسۆیی\",\"vAlign\":\"ڕیزکردنی ئەستونی\",\"alignBaseline\":\"هێڵەبنەڕەت\",\"bgColor\":\"ڕەنگی پاشبنەما\",\"borderColor\":\"ڕەنگی پەراوێز\",\"data\":\"داتا\",\"header\":\"سەرپەڕه\",\"yes\":\"بەڵێ\",\"no\":\"نەخێر\",\"invalidWidth\":\"پانی خانه دەبێت بەتەواوی ژماره بێت.\",\"invalidHeight\":\"درێژی خانه بەتەواوی دەبێت ژمارە بێت.\",\"invalidRowSpan\":\"ماوەی نێوان ڕیز بەتەواوی دەبێت ژمارە بێت.\",\"invalidColSpan\":\"ماوەی نێوان ئەستونی بەتەواوی دەبێت ژمارە بێت.\",\"chooseColor\":\"هەڵبژێرە\"},\"cellPad\":\"بۆشایی ناوپۆش\",\"cellSpace\":\"بۆشایی خانه\",\"column\":{\"menu\":\"ئەستون\",\"insertBefore\":\"دانانی ئەستون لەپێش\",\"insertAfter\":\"دانانی ئەستوون لەپاش\",\"deleteColumn\":\"سڕینەوەی ئەستوون\"},\"columns\":\"ستوونەکان\",\"deleteTable\":\"سڕینەوەی خشتە\",\"headers\":\"سەرپەڕه\",\"headersBoth\":\"هەردووك\",\"headersColumn\":\"یەکەم ئەستوون\",\"headersNone\":\"هیچ\",\"headersRow\":\"یەکەم ڕیز\",\"invalidBorder\":\"ژمارەی پەراوێز دەبێت تەنها ژماره بێت.\",\"invalidCellPadding\":\"ناوپۆشی خانه دەبێت ژمارەکی درووست بێت.\",\"invalidCellSpacing\":\"بۆشایی خانه دەبێت ژمارەکی درووست بێت.\",\"invalidCols\":\"ژمارەی ئەستوونی دەبێت گەورەتر بێت لەژمارەی 0.\",\"invalidHeight\":\"درێژی خشته دهبێت تهنها ژماره بێت.\",\"invalidRows\":\"ژمارەی ڕیز دەبێت گەورەتر بێت لەژمارەی 0.\",\"invalidWidth\":\"پانی خشته دەبێت تەنها ژماره بێت.\",\"menu\":\"خاسیەتی خشتە\",\"row\":{\"menu\":\"ڕیز\",\"insertBefore\":\"دانانی ڕیز لەپێش\",\"insertAfter\":\"دانانی ڕیز لەپاش\",\"deleteRow\":\"سڕینەوەی ڕیز\"},\"rows\":\"ڕیز\",\"summary\":\"کورتە\",\"title\":\"خاسیەتی خشتە\",\"toolbar\":\"خشتە\",\"widthPc\":\"لەسەدا\",\"widthPx\":\"وێنەخاڵ - پیکسل\",\"widthUnit\":\"پانی یەکە\"},\"undo\":{\"redo\":\"هەڵگەڕاندنەوە\",\"undo\":\"پووچکردنەوە\"},\"wsc\":{\"btnIgnore\":\"پشتگوێ کردن\",\"btnIgnoreAll\":\"پشتگوێکردنی ههمووی\",\"btnReplace\":\"لهبریدانن\",\"btnReplaceAll\":\"لهبریدانانی ههمووی\",\"btnUndo\":\"پووچکردنهوه\",\"changeTo\":\"گۆڕینی بۆ\",\"errorLoading\":\"ههڵه لههێنانی داخوازینامهی خانهخۆێی ڕاژه: %s.\",\"ieSpellDownload\":\"پشکنینی ڕێنووس دانهمزراوه. دهتهوێت ئێستا دایبگریت?\",\"manyChanges\":\"پشکنینی ڕێنووس کۆتای هات: لهسهدا %1 ی وشهکان گۆڕدرا\",\"noChanges\":\"پشکنینی ڕێنووس کۆتای هات: هیچ وشهیهك نۆگۆڕدرا\",\"noMispell\":\"پشکنینی ڕێنووس کۆتای هات: هیچ ههڵهیهکی ڕێنووس نهدۆزراوه\",\"noSuggestions\":\"- هیچ پێشنیارێك -\",\"notAvailable\":\"ببووره، لهمکاتهدا ڕاژهکه لهبهردهستا نیه.\",\"notInDic\":\"لهفهرههنگ دانیه\",\"oneChange\":\"پشکنینی ڕێنووس کۆتای هات: یهك وشه گۆڕدرا\",\"progress\":\"پشکنینی ڕێنووس لهبهردهوامبوون دایه...\",\"title\":\"پشکنینی ڕێنووس\",\"toolbar\":\"پشکنینی ڕێنووس\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/lt.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['lt']={\"editor\":\"Pilnas redaktorius\",\"editorPanel\":\"Pilno redagtoriaus skydelis\",\"common\":{\"editorHelp\":\"Spauskite ALT 0 dėl pagalbos\",\"browseServer\":\"Naršyti po serverį\",\"url\":\"URL\",\"protocol\":\"Protokolas\",\"upload\":\"Siųsti\",\"uploadSubmit\":\"Siųsti į serverį\",\"image\":\"Vaizdas\",\"flash\":\"Flash\",\"form\":\"Forma\",\"checkbox\":\"Žymimasis langelis\",\"radio\":\"Žymimoji akutė\",\"textField\":\"Teksto laukas\",\"textarea\":\"Teksto sritis\",\"hiddenField\":\"Nerodomas laukas\",\"button\":\"Mygtukas\",\"select\":\"Atrankos laukas\",\"imageButton\":\"Vaizdinis mygtukas\",\"notSet\":\"<nėra nustatyta>\",\"id\":\"Id\",\"name\":\"Vardas\",\"langDir\":\"Teksto kryptis\",\"langDirLtr\":\"Iš kairės į dešinę (LTR)\",\"langDirRtl\":\"Iš dešinės į kairę (RTL)\",\"langCode\":\"Kalbos kodas\",\"longDescr\":\"Ilgas aprašymas URL\",\"cssClass\":\"Stilių lentelės klasės\",\"advisoryTitle\":\"Konsultacinė antraštė\",\"cssStyle\":\"Stilius\",\"ok\":\"OK\",\"cancel\":\"Nutraukti\",\"close\":\"Uždaryti\",\"preview\":\"Peržiūrėti\",\"resize\":\"Pavilkite, kad pakeistumėte dydį\",\"generalTab\":\"Bendros savybės\",\"advancedTab\":\"Papildomas\",\"validateNumberFailed\":\"Ši reikšmė nėra skaičius.\",\"confirmNewPage\":\"Visas neišsaugotas turinys bus prarastas. Ar tikrai norite įkrauti naują puslapį?\",\"confirmCancel\":\"Kai kurie parametrai pasikeitė. Ar tikrai norite užverti langą?\",\"options\":\"Parametrai\",\"target\":\"Tikslinė nuoroda\",\"targetNew\":\"Naujas langas (_blank)\",\"targetTop\":\"Viršutinis langas (_top)\",\"targetSelf\":\"Esamas langas (_self)\",\"targetParent\":\"Paskutinis langas (_parent)\",\"langDirLTR\":\"Iš kairės į dešinę (LTR)\",\"langDirRTL\":\"Iš dešinės į kairę (RTL)\",\"styles\":\"Stilius\",\"cssClasses\":\"Stilių klasės\",\"width\":\"Plotis\",\"height\":\"Aukštis\",\"align\":\"Lygiuoti\",\"alignLeft\":\"Kairę\",\"alignRight\":\"Dešinę\",\"alignCenter\":\"Centrą\",\"alignJustify\":\"Lygiuoti abi puses\",\"alignTop\":\"Viršūnę\",\"alignMiddle\":\"Vidurį\",\"alignBottom\":\"Apačią\",\"alignNone\":\"Niekas\",\"invalidValue\":\"Neteisinga reikšmė.\",\"invalidHeight\":\"Aukštis turi būti nurodytas skaičiais.\",\"invalidWidth\":\"Plotis turi būti nurodytas skaičiais.\",\"invalidCssLength\":\"Reikšmė nurodyta \\\"%1\\\" laukui, turi būti teigiamas skaičius su arba be tinkamo CSS matavimo vieneto (px, %, in, cm, mm, em, ex, pt arba pc).\",\"invalidHtmlLength\":\"Reikšmė nurodyta \\\"%1\\\" laukui, turi būti teigiamas skaičius su arba be tinkamo HTML matavimo vieneto (px arba %).\",\"invalidInlineStyle\":\"Reikšmė nurodyta vidiniame stiliuje turi būti sudaryta iš vieno šių reikšmių \\\"vardas : reikšmė\\\", atskirta kabliataškiais.\",\"cssLengthTooltip\":\"Įveskite reikšmę pikseliais arba skaičiais su tinkamu CSS vienetu (px, %, in, cm, mm, em, ex, pt arba pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, netinkamas</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Visos teiss saugomos.\",\"dlgTitle\":\"Apie CKEditor\",\"help\":\"Patikrinkite $1 dėl pagalbos.\",\"moreInfo\":\"Dėl licencijavimo apsilankykite mūsų svetainėje:\",\"title\":\"Apie CKEditor\",\"userGuide\":\"CKEditor Vartotojo Gidas\"},\"basicstyles\":{\"bold\":\"Pusjuodis\",\"italic\":\"Kursyvas\",\"strike\":\"Perbrauktas\",\"subscript\":\"Apatinis indeksas\",\"superscript\":\"Viršutinis indeksas\",\"underline\":\"Pabrauktas\"},\"blockquote\":{\"toolbar\":\"Citata\"},\"clipboard\":{\"copy\":\"Kopijuoti\",\"copyError\":\"Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+C).\",\"cut\":\"Iškirpti\",\"cutError\":\"Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+X).\",\"paste\":\"Įdėti\",\"pasteArea\":\"Įkelti dalį\",\"pasteMsg\":\"Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl/Cmd+V</STRONG>) ir paspauskite mygtuką <STRONG>OK</STRONG>.\",\"securityMsg\":\"Dėl jūsų naršyklės saugumo nustatymų, redaktorius negali tiesiogiai pasiekti laikinosios atminties. Jums reikia nukopijuoti dar kartą į šį langą.\",\"title\":\"Įdėti\"},\"contextmenu\":{\"options\":\"Kontekstinio meniu parametrai\"},\"button\":{\"selectedLabel\":\"%1 (Pasirinkta)\"},\"toolbar\":{\"toolbarCollapse\":\"Apjungti įrankių juostą\",\"toolbarExpand\":\"Išplėsti įrankių juostą\",\"toolbarGroups\":{\"document\":\"Dokumentas\",\"clipboard\":\"Atmintinė/Atgal\",\"editing\":\"Redagavimas\",\"forms\":\"Formos\",\"basicstyles\":\"Pagrindiniai stiliai\",\"paragraph\":\"Paragrafas\",\"links\":\"Nuorodos\",\"insert\":\"Įterpti\",\"styles\":\"Stiliai\",\"colors\":\"Spalvos\",\"tools\":\"Įrankiai\"},\"toolbars\":\"Redaktoriaus įrankiai\"},\"elementspath\":{\"eleLabel\":\"Elemento kelias\",\"eleTitle\":\"%1 elementas\"},\"format\":{\"label\":\"Šrifto formatas\",\"panelTitle\":\"Šrifto formatas\",\"tag_address\":\"Kreipinio\",\"tag_div\":\"Normalus (DIV)\",\"tag_h1\":\"Antraštinis 1\",\"tag_h2\":\"Antraštinis 2\",\"tag_h3\":\"Antraštinis 3\",\"tag_h4\":\"Antraštinis 4\",\"tag_h5\":\"Antraštinis 5\",\"tag_h6\":\"Antraštinis 6\",\"tag_p\":\"Normalus\",\"tag_pre\":\"Formuotas\"},\"horizontalrule\":{\"toolbar\":\"Įterpti horizontalią liniją\"},\"image\":{\"alt\":\"Alternatyvus Tekstas\",\"border\":\"Rėmelis\",\"btnUpload\":\"Siųsti į serverį\",\"button2Img\":\"Ar norite mygtuką paversti paprastu paveiksliuku?\",\"hSpace\":\"Hor.Erdvė\",\"img2Button\":\"Ar norite paveiksliuką paversti mygtuku?\",\"infoTab\":\"Vaizdo informacija\",\"linkTab\":\"Nuoroda\",\"lockRatio\":\"Išlaikyti proporciją\",\"menu\":\"Vaizdo savybės\",\"resetSize\":\"Atstatyti dydį\",\"title\":\"Vaizdo savybės\",\"titleButton\":\"Vaizdinio mygtuko savybės\",\"upload\":\"Nusiųsti\",\"urlMissing\":\"Paveiksliuko nuorodos nėra.\",\"vSpace\":\"Vert.Erdvė\",\"validateBorder\":\"Reikšmė turi būti sveikas skaičius.\",\"validateHSpace\":\"Reikšmė turi būti sveikas skaičius.\",\"validateVSpace\":\"Reikšmė turi būti sveikas skaičius.\"},\"indent\":{\"indent\":\"Padidinti įtrauką\",\"outdent\":\"Sumažinti įtrauką\"},\"fakeobjects\":{\"anchor\":\"Žymė\",\"flash\":\"Flash animacija\",\"hiddenfield\":\"Paslėptas laukas\",\"iframe\":\"IFrame\",\"unknown\":\"Nežinomas objektas\"},\"link\":{\"acccessKey\":\"Prieigos raktas\",\"advanced\":\"Papildomas\",\"advisoryContentType\":\"Konsultacinio turinio tipas\",\"advisoryTitle\":\"Konsultacinė antraštė\",\"anchor\":{\"toolbar\":\"Įterpti/modifikuoti žymę\",\"menu\":\"Žymės savybės\",\"title\":\"Žymės savybės\",\"name\":\"Žymės vardas\",\"errorName\":\"Prašome įvesti žymės vardą\",\"remove\":\"Pašalinti žymę\"},\"anchorId\":\"Pagal žymės Id\",\"anchorName\":\"Pagal žymės vardą\",\"charset\":\"Susietų išteklių simbolių lentelė\",\"cssClasses\":\"Stilių lentelės klasės\",\"emailAddress\":\"El.pašto adresas\",\"emailBody\":\"Žinutės turinys\",\"emailSubject\":\"Žinutės tema\",\"id\":\"Id\",\"info\":\"Nuorodos informacija\",\"langCode\":\"Teksto kryptis\",\"langDir\":\"Teksto kryptis\",\"langDirLTR\":\"Iš kairės į dešinę (LTR)\",\"langDirRTL\":\"Iš dešinės į kairę (RTL)\",\"menu\":\"Taisyti nuorodą\",\"name\":\"Vardas\",\"noAnchors\":\"(Šiame dokumente žymių nėra)\",\"noEmail\":\"Prašome įvesti el.pašto adresą\",\"noUrl\":\"Prašome įvesti nuorodos URL\",\"other\":\"<kitas>\",\"popupDependent\":\"Priklausomas (Netscape)\",\"popupFeatures\":\"Išskleidžiamo lango savybės\",\"popupFullScreen\":\"Visas ekranas (IE)\",\"popupLeft\":\"Kairė pozicija\",\"popupLocationBar\":\"Adreso juosta\",\"popupMenuBar\":\"Meniu juosta\",\"popupResizable\":\"Kintamas dydis\",\"popupScrollBars\":\"Slinkties juostos\",\"popupStatusBar\":\"Būsenos juosta\",\"popupToolbar\":\"Mygtukų juosta\",\"popupTop\":\"Viršutinė pozicija\",\"rel\":\"Sąsajos\",\"selectAnchor\":\"Pasirinkite žymę\",\"styles\":\"Stilius\",\"tabIndex\":\"Tabuliavimo indeksas\",\"target\":\"Paskirties vieta\",\"targetFrame\":\"<kadras>\",\"targetFrameName\":\"Paskirties kadro vardas\",\"targetPopup\":\"<išskleidžiamas langas>\",\"targetPopupName\":\"Paskirties lango vardas\",\"title\":\"Nuoroda\",\"toAnchor\":\"Žymė šiame puslapyje\",\"toEmail\":\"El.paštas\",\"toUrl\":\"Nuoroda\",\"toolbar\":\"Įterpti/taisyti nuorodą\",\"type\":\"Nuorodos tipas\",\"unlink\":\"Panaikinti nuorodą\",\"upload\":\"Siųsti\"},\"list\":{\"bulletedlist\":\"Suženklintas sąrašas\",\"numberedlist\":\"Numeruotas sąrašas\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Išdidinti\",\"minimize\":\"Sumažinti\"},\"pastetext\":{\"button\":\"Įdėti kaip gryną tekstą\",\"title\":\"Įdėti kaip gryną tekstą\"},\"pastefromword\":{\"confirmCleanup\":\"Tekstas, kurį įkeliate yra kopijuojamas iš Word. Ar norite jį išvalyti prieš įkeliant?\",\"error\":\"Dėl vidinių sutrikimų, nepavyko išvalyti įkeliamo teksto\",\"title\":\"Įdėti iš Word\",\"toolbar\":\"Įdėti iš Word\"},\"removeformat\":{\"toolbar\":\"Panaikinti formatą\"},\"sourcearea\":{\"toolbar\":\"Šaltinis\"},\"specialchar\":{\"options\":\"Specialaus simbolio nustatymai\",\"title\":\"Pasirinkite specialų simbolį\",\"toolbar\":\"Įterpti specialų simbolį\"},\"scayt\":{\"btn_about\":\"Apie SCAYT\",\"btn_dictionaries\":\"Žodynai\",\"btn_disable\":\"Išjungti SCAYT\",\"btn_enable\":\"Įjungti SCAYT\",\"btn_langs\":\"Kalbos\",\"btn_options\":\"Parametrai\",\"text_title\":\"Tikrinti klaidas kai rašoma\"},\"stylescombo\":{\"label\":\"Stilius\",\"panelTitle\":\"Stilių formatavimas\",\"panelTitle1\":\"Blokų stiliai\",\"panelTitle2\":\"Vidiniai stiliai\",\"panelTitle3\":\"Objektų stiliai\"},\"table\":{\"border\":\"Rėmelio dydis\",\"caption\":\"Antraštė\",\"cell\":{\"menu\":\"Langelis\",\"insertBefore\":\"Įterpti langelį prieš\",\"insertAfter\":\"Įterpti langelį po\",\"deleteCell\":\"Šalinti langelius\",\"merge\":\"Sujungti langelius\",\"mergeRight\":\"Sujungti su dešine\",\"mergeDown\":\"Sujungti su apačia\",\"splitHorizontal\":\"Skaidyti langelį horizontaliai\",\"splitVertical\":\"Skaidyti langelį vertikaliai\",\"title\":\"Cell nustatymai\",\"cellType\":\"Cell rūšis\",\"rowSpan\":\"Eilučių Span\",\"colSpan\":\"Stulpelių Span\",\"wordWrap\":\"Sutraukti raides\",\"hAlign\":\"Horizontalus lygiavimas\",\"vAlign\":\"Vertikalus lygiavimas\",\"alignBaseline\":\"Apatinė linija\",\"bgColor\":\"Fono spalva\",\"borderColor\":\"Rėmelio spalva\",\"data\":\"Data\",\"header\":\"Antraštė\",\"yes\":\"Taip\",\"no\":\"Ne\",\"invalidWidth\":\"Reikšmė turi būti skaičius.\",\"invalidHeight\":\"Reikšmė turi būti skaičius.\",\"invalidRowSpan\":\"Reikšmė turi būti skaičius.\",\"invalidColSpan\":\"Reikšmė turi būti skaičius.\",\"chooseColor\":\"Pasirinkite\"},\"cellPad\":\"Tarpas nuo langelio rėmo iki teksto\",\"cellSpace\":\"Tarpas tarp langelių\",\"column\":{\"menu\":\"Stulpelis\",\"insertBefore\":\"Įterpti stulpelį prieš\",\"insertAfter\":\"Įterpti stulpelį po\",\"deleteColumn\":\"Šalinti stulpelius\"},\"columns\":\"Stulpeliai\",\"deleteTable\":\"Šalinti lentelę\",\"headers\":\"Antraštės\",\"headersBoth\":\"Abu\",\"headersColumn\":\"Pirmas stulpelis\",\"headersNone\":\"Nėra\",\"headersRow\":\"Pirma eilutė\",\"invalidBorder\":\"Reikšmė turi būti nurodyta skaičiumi.\",\"invalidCellPadding\":\"Reikšmė turi būti nurodyta skaičiumi.\",\"invalidCellSpacing\":\"Reikšmė turi būti nurodyta skaičiumi.\",\"invalidCols\":\"Skaičius turi būti didesnis nei 0.\",\"invalidHeight\":\"Reikšmė turi būti nurodyta skaičiumi.\",\"invalidRows\":\"Skaičius turi būti didesnis nei 0.\",\"invalidWidth\":\"Reikšmė turi būti nurodyta skaičiumi.\",\"menu\":\"Lentelės savybės\",\"row\":{\"menu\":\"Eilutė\",\"insertBefore\":\"Įterpti eilutę prieš\",\"insertAfter\":\"Įterpti eilutę po\",\"deleteRow\":\"Šalinti eilutes\"},\"rows\":\"Eilutės\",\"summary\":\"Santrauka\",\"title\":\"Lentelės savybės\",\"toolbar\":\"Lentelė\",\"widthPc\":\"procentais\",\"widthPx\":\"taškais\",\"widthUnit\":\"pločio vienetas\"},\"undo\":{\"redo\":\"Atstatyti\",\"undo\":\"Atšaukti\"},\"wsc\":{\"btnIgnore\":\"Ignoruoti\",\"btnIgnoreAll\":\"Ignoruoti visus\",\"btnReplace\":\"Pakeisti\",\"btnReplaceAll\":\"Pakeisti visus\",\"btnUndo\":\"Atšaukti\",\"changeTo\":\"Pakeisti į\",\"errorLoading\":\"Klaida įkraunant servisą: %s.\",\"ieSpellDownload\":\"Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?\",\"manyChanges\":\"Rašybos tikrinimas baigtas: Pakeista %1 žodžių\",\"noChanges\":\"Rašybos tikrinimas baigtas: Nėra pakeistų žodžių\",\"noMispell\":\"Rašybos tikrinimas baigtas: Nerasta rašybos klaidų\",\"noSuggestions\":\"- Nėra pasiūlymų -\",\"notAvailable\":\"Atleiskite, šiuo metu servisas neprieinamas.\",\"notInDic\":\"Žodyne nerastas\",\"oneChange\":\"Rašybos tikrinimas baigtas: Vienas žodis pakeistas\",\"progress\":\"Vyksta rašybos tikrinimas...\",\"title\":\"Tikrinti klaidas\",\"toolbar\":\"Rašybos tikrinimas\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/lv.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['lv']={\"editor\":\"Bagātinātā teksta redaktors\",\"editorPanel\":\"Bagātinātā teksta redaktora panelis\",\"common\":{\"editorHelp\":\"Palīdzībai, nospiediet ALT 0 \",\"browseServer\":\"Skatīt servera saturu\",\"url\":\"URL\",\"protocol\":\"Protokols\",\"upload\":\"Augšupielādēt\",\"uploadSubmit\":\"Nosūtīt serverim\",\"image\":\"Attēls\",\"flash\":\"Flash\",\"form\":\"Forma\",\"checkbox\":\"Atzīmēšanas kastīte\",\"radio\":\"Izvēles poga\",\"textField\":\"Teksta rinda\",\"textarea\":\"Teksta laukums\",\"hiddenField\":\"Paslēpta teksta rinda\",\"button\":\"Poga\",\"select\":\"Iezīmēšanas lauks\",\"imageButton\":\"Attēlpoga\",\"notSet\":\"<nav iestatīts>\",\"id\":\"Id\",\"name\":\"Nosaukums\",\"langDir\":\"Valodas lasīšanas virziens\",\"langDirLtr\":\"No kreisās uz labo (LTR)\",\"langDirRtl\":\"No labās uz kreiso (RTL)\",\"langCode\":\"Valodas kods\",\"longDescr\":\"Gara apraksta Hipersaite\",\"cssClass\":\"Stilu saraksta klases\",\"advisoryTitle\":\"Konsultatīvs virsraksts\",\"cssStyle\":\"Stils\",\"ok\":\"Darīts!\",\"cancel\":\"Atcelt\",\"close\":\"Aizvērt\",\"preview\":\"Priekšskatījums\",\"resize\":\"Mērogot\",\"generalTab\":\"Vispārīgi\",\"advancedTab\":\"Izvērstais\",\"validateNumberFailed\":\"Šī vērtība nav skaitlis\",\"confirmNewPage\":\"Jebkuras nesaglabātās izmaiņas tiks zaudētas. Vai tiešām vēlaties atvērt jaunu lapu?\",\"confirmCancel\":\"Daži no uzstādījumiem ir mainīti. Vai tiešām vēlaties aizvērt šo dialogu?\",\"options\":\"Uzstādījumi\",\"target\":\"Mērķis\",\"targetNew\":\"Jauns logs (_blank)\",\"targetTop\":\"Virsējais logs (_top)\",\"targetSelf\":\"Tas pats logs (_self)\",\"targetParent\":\"Avota logs (_parent)\",\"langDirLTR\":\"Kreisais uz Labo (LTR)\",\"langDirRTL\":\"Labais uz Kreiso (RTL)\",\"styles\":\"Stils\",\"cssClasses\":\"Stilu klases\",\"width\":\"Platums\",\"height\":\"Augstums\",\"align\":\"Nolīdzināt\",\"alignLeft\":\"Pa kreisi\",\"alignRight\":\"Pa labi\",\"alignCenter\":\"Centrēti\",\"alignJustify\":\"Izlīdzināt malas\",\"alignTop\":\"Augšā\",\"alignMiddle\":\"Vertikāli centrēts\",\"alignBottom\":\"Apakšā\",\"alignNone\":\"Nekas\",\"invalidValue\":\"Nekorekta vērtība\",\"invalidHeight\":\"Augstumam jābūt skaitlim.\",\"invalidWidth\":\"Platumam jābūt skaitlim\",\"invalidCssLength\":\"Laukam \\\"%1\\\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām CSS mērvienībām (px, %, in, cm, mm, em, ex, pt, vai pc).\",\"invalidHtmlLength\":\"Laukam \\\"%1\\\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām HTML mērvienībām (px vai %).\",\"invalidInlineStyle\":\"Iekļautajā stilā norādītajai vērtībai jāsastāv no viena vai vairākiem pāriem pēc forma'ta \\\"nosaukums: vērtība\\\", atdalītiem ar semikolu.\",\"cssLengthTooltip\":\"Ievadiet vērtību pikseļos vai skaitli ar derīgu CSS mērvienību (px, %, in, cm, mm, em, ex, pt, vai pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, nav pieejams</span>\"},\"about\":{\"copy\":\"Kopēšanas tiesības &copy; $1. Visas tiesības rezervētas.\",\"dlgTitle\":\"Par CKEditor\",\"help\":\"Pārbaudiet $1 palīdzībai.\",\"moreInfo\":\"Informācijai par licenzēšanu apmeklējiet mūsu mājas lapu:\",\"title\":\"Par CKEditor\",\"userGuide\":\"CKEditor Lietotāja pamācība\"},\"basicstyles\":{\"bold\":\"Treknināts\",\"italic\":\"Kursīvs\",\"strike\":\"Pārsvītrots\",\"subscript\":\"Apakšrakstā\",\"superscript\":\"Augšrakstā\",\"underline\":\"Pasvītrots\"},\"blockquote\":{\"toolbar\":\"Bloka citāts\"},\"clipboard\":{\"copy\":\"Kopēt\",\"copyError\":\"Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt kopēšanas darbību.  Lūdzu, izmantojiet (Ctrl/Cmd+C), lai veiktu šo darbību.\",\"cut\":\"Izgriezt\",\"cutError\":\"Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt izgriezšanas darbību.  Lūdzu, izmantojiet (Ctrl/Cmd+X), lai veiktu šo darbību.\",\"paste\":\"Ielīmēt\",\"pasteArea\":\"Ielīmēšanas zona\",\"pasteMsg\":\"Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (<STRONG>Ctrl/Cmd+V</STRONG>) un apstipriniet ar <STRONG>Darīts!</STRONG>.\",\"securityMsg\":\"Jūsu pārlūka drošības uzstādījumu dēļ, nav iespējams tieši piekļūt jūsu starpliktuvei. Jums jāielīmē atkārtoti šajā logā.\",\"title\":\"Ievietot\"},\"contextmenu\":{\"options\":\"Uznirstošās izvēlnes uzstādījumi\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Aizvērt rīkjoslu\",\"toolbarExpand\":\"Atvērt rīkjoslu\",\"toolbarGroups\":{\"document\":\"Dokuments\",\"clipboard\":\"Starpliktuve/Atcelt\",\"editing\":\"Labošana\",\"forms\":\"Formas\",\"basicstyles\":\"Pamata stili\",\"paragraph\":\"Paragrāfs\",\"links\":\"Saites\",\"insert\":\"Ievietot\",\"styles\":\"Stili\",\"colors\":\"Krāsas\",\"tools\":\"Rīki\"},\"toolbars\":\"Redaktora rīkjoslas\"},\"elementspath\":{\"eleLabel\":\"Elementa ceļš\",\"eleTitle\":\"%1 elements\"},\"format\":{\"label\":\"Formāts\",\"panelTitle\":\"Formāts\",\"tag_address\":\"Adrese\",\"tag_div\":\"Rindkopa (DIV)\",\"tag_h1\":\"Virsraksts 1\",\"tag_h2\":\"Virsraksts 2\",\"tag_h3\":\"Virsraksts 3\",\"tag_h4\":\"Virsraksts 4\",\"tag_h5\":\"Virsraksts 5\",\"tag_h6\":\"Virsraksts 6\",\"tag_p\":\"Normāls teksts\",\"tag_pre\":\"Formatēts teksts\"},\"horizontalrule\":{\"toolbar\":\"Ievietot horizontālu Atdalītājsvītru\"},\"image\":{\"alt\":\"Alternatīvais teksts\",\"border\":\"Rāmis\",\"btnUpload\":\"Nosūtīt serverim\",\"button2Img\":\"Vai vēlaties pārveidot izvēlēto attēla pogu uz attēla?\",\"hSpace\":\"Horizontālā telpa\",\"img2Button\":\"Vai vēlaties pārveidot izvēlēto attēlu uz attēla pogas?\",\"infoTab\":\"Informācija par attēlu\",\"linkTab\":\"Hipersaite\",\"lockRatio\":\"Nemainīga Augstuma/Platuma attiecība\",\"menu\":\"Attēla īpašības\",\"resetSize\":\"Atjaunot sākotnējo izmēru\",\"title\":\"Attēla īpašības\",\"titleButton\":\"Attēlpogas īpašības\",\"upload\":\"Augšupielādēt\",\"urlMissing\":\"Trūkst attēla atrašanās adrese.\",\"vSpace\":\"Vertikālā telpa\",\"validateBorder\":\"Apmalei jābūt veselam skaitlim\",\"validateHSpace\":\"HSpace jābūt veselam skaitlim\",\"validateVSpace\":\"VSpace jābūt veselam skaitlim\"},\"indent\":{\"indent\":\"Palielināt atkāpi\",\"outdent\":\"Samazināt atkāpi\"},\"fakeobjects\":{\"anchor\":\"Iezīme\",\"flash\":\"Flash animācija\",\"hiddenfield\":\"Slēpts lauks\",\"iframe\":\"Iframe\",\"unknown\":\"Nezināms objekts\"},\"link\":{\"acccessKey\":\"Pieejas taustiņš\",\"advanced\":\"Izvērstais\",\"advisoryContentType\":\"Konsultatīvs satura tips\",\"advisoryTitle\":\"Konsultatīvs virsraksts\",\"anchor\":{\"toolbar\":\"Ievietot/Labot iezīmi\",\"menu\":\"Labot iezīmi\",\"title\":\"Iezīmes uzstādījumi\",\"name\":\"Iezīmes nosaukums\",\"errorName\":\"Lūdzu norādiet iezīmes nosaukumu\",\"remove\":\"Noņemt iezīmi\"},\"anchorId\":\"Pēc elementa ID\",\"anchorName\":\"Pēc iezīmes nosaukuma\",\"charset\":\"Pievienotā resursa kodējums\",\"cssClasses\":\"Stilu saraksta klases\",\"emailAddress\":\"E-pasta adrese\",\"emailBody\":\"Ziņas saturs\",\"emailSubject\":\"Ziņas tēma\",\"id\":\"ID\",\"info\":\"Hipersaites informācija\",\"langCode\":\"Valodas kods\",\"langDir\":\"Valodas lasīšanas virziens\",\"langDirLTR\":\"No kreisās uz labo (LTR)\",\"langDirRTL\":\"No labās uz kreiso (RTL)\",\"menu\":\"Labot hipersaiti\",\"name\":\"Nosaukums\",\"noAnchors\":\"(Šajā dokumentā nav iezīmju)\",\"noEmail\":\"Lūdzu norādi e-pasta adresi\",\"noUrl\":\"Lūdzu norādi hipersaiti\",\"other\":\"<cits>\",\"popupDependent\":\"Atkarīgs (Netscape)\",\"popupFeatures\":\"Uznirstošā loga nosaukums īpašības\",\"popupFullScreen\":\"Pilnā ekrānā (IE)\",\"popupLeft\":\"Kreisā koordināte\",\"popupLocationBar\":\"Atrašanās vietas josla\",\"popupMenuBar\":\"Izvēlnes josla\",\"popupResizable\":\"Mērogojams\",\"popupScrollBars\":\"Ritjoslas\",\"popupStatusBar\":\"Statusa josla\",\"popupToolbar\":\"Rīku josla\",\"popupTop\":\"Augšējā koordināte\",\"rel\":\"Relācija\",\"selectAnchor\":\"Izvēlēties iezīmi\",\"styles\":\"Stils\",\"tabIndex\":\"Ciļņu indekss\",\"target\":\"Mērķis\",\"targetFrame\":\"<ietvars>\",\"targetFrameName\":\"Mērķa ietvara nosaukums\",\"targetPopup\":\"<uznirstošā logā>\",\"targetPopupName\":\"Uznirstošā loga nosaukums\",\"title\":\"Hipersaite\",\"toAnchor\":\"Iezīme šajā lapā\",\"toEmail\":\"E-pasts\",\"toUrl\":\"Adrese\",\"toolbar\":\"Ievietot/Labot hipersaiti\",\"type\":\"Hipersaites tips\",\"unlink\":\"Noņemt hipersaiti\",\"upload\":\"Augšupielādēt\"},\"list\":{\"bulletedlist\":\"Pievienot/Noņemt vienkāršu sarakstu\",\"numberedlist\":\"Numurēts saraksts\"},\"magicline\":{\"title\":\"Ievietot šeit rindkopu\"},\"maximize\":{\"maximize\":\"Maksimizēt\",\"minimize\":\"Minimizēt\"},\"pastetext\":{\"button\":\"Ievietot kā vienkāršu tekstu\",\"title\":\"Ievietot kā vienkāršu tekstu\"},\"pastefromword\":{\"confirmCleanup\":\"Teksts, kuru vēlaties ielīmēt, izskatās ir nokopēts no Word. Vai vēlaties to iztīrīt pirms ielīmēšanas?\",\"error\":\"Iekšējas kļūdas dēļ, neizdevās iztīrīt ielīmētos datus.\",\"title\":\"Ievietot no Worda\",\"toolbar\":\"Ievietot no Worda\"},\"removeformat\":{\"toolbar\":\"Noņemt stilus\"},\"sourcearea\":{\"toolbar\":\"HTML kods\"},\"specialchar\":{\"options\":\"Speciālo simbolu uzstādījumi\",\"title\":\"Ievietot īpašu simbolu\",\"toolbar\":\"Ievietot speciālo simbolu\"},\"scayt\":{\"btn_about\":\"Par SCAYT\",\"btn_dictionaries\":\"Vārdnīcas\",\"btn_disable\":\"Atslēgt SCAYT\",\"btn_enable\":\"Ieslēgt SCAYT\",\"btn_langs\":\"Valodas\",\"btn_options\":\"Uzstādījumi\",\"text_title\":\"Pārbaudīt gramatiku rakstot\"},\"stylescombo\":{\"label\":\"Stils\",\"panelTitle\":\"Formatēšanas stili\",\"panelTitle1\":\"Bloka stili\",\"panelTitle2\":\"iekļautie stili\",\"panelTitle3\":\"Objekta stili\"},\"table\":{\"border\":\"Rāmja izmērs\",\"caption\":\"Leģenda\",\"cell\":{\"menu\":\"Šūna\",\"insertBefore\":\"Pievienot šūnu pirms\",\"insertAfter\":\"Pievienot šūnu pēc\",\"deleteCell\":\"Dzēst rūtiņas\",\"merge\":\"Apvienot rūtiņas\",\"mergeRight\":\"Apvieno pa labi\",\"mergeDown\":\"Apvienot uz leju\",\"splitHorizontal\":\"Sadalīt šūnu horizontāli\",\"splitVertical\":\"Sadalīt šūnu vertikāli\",\"title\":\"Šūnas uzstādījumi\",\"cellType\":\"Šūnas tips\",\"rowSpan\":\"Apvienotas rindas\",\"colSpan\":\"Apvienotas kolonas\",\"wordWrap\":\"Vārdu pārnese\",\"hAlign\":\"Horizontālais novietojums\",\"vAlign\":\"Vertikālais novietojums\",\"alignBaseline\":\"Pamatrinda\",\"bgColor\":\"Fona krāsa\",\"borderColor\":\"Rāmja krāsa\",\"data\":\"Dati\",\"header\":\"Virsraksts\",\"yes\":\"Jā\",\"no\":\"Nē\",\"invalidWidth\":\"Šūnas platumam jābūt skaitlim\",\"invalidHeight\":\"Šūnas augstumam jābūt skaitlim\",\"invalidRowSpan\":\"Apvienojamo rindu skaitam jābūt veselam skaitlim\",\"invalidColSpan\":\"Apvienojamo kolonu skaitam jābūt veselam skaitlim\",\"chooseColor\":\"Izvēlēties\"},\"cellPad\":\"Rūtiņu nobīde\",\"cellSpace\":\"Rūtiņu atstatums\",\"column\":{\"menu\":\"Kolonna\",\"insertBefore\":\"Ievietot kolonu pirms\",\"insertAfter\":\"Ievieto kolonu pēc\",\"deleteColumn\":\"Dzēst kolonnas\"},\"columns\":\"Kolonnas\",\"deleteTable\":\"Dzēst tabulu\",\"headers\":\"Virsraksti\",\"headersBoth\":\"Abi\",\"headersColumn\":\"Pirmā kolona\",\"headersNone\":\"Nekas\",\"headersRow\":\"Pirmā rinda\",\"invalidBorder\":\"Rāmju izmēram jābūt skaitlim\",\"invalidCellPadding\":\"Šūnu atkāpēm jābūt pozitīvam skaitlim\",\"invalidCellSpacing\":\"Šūnu atstarpēm jābūt pozitīvam skaitlim\",\"invalidCols\":\"Kolonu skaitam jābūt lielākam par 0\",\"invalidHeight\":\"Tabulas augstumam jābūt skaitlim\",\"invalidRows\":\"Rindu skaitam jābūt lielākam par 0\",\"invalidWidth\":\"Tabulas platumam jābūt skaitlim\",\"menu\":\"Tabulas īpašības\",\"row\":{\"menu\":\"Rinda\",\"insertBefore\":\"Ievietot rindu pirms\",\"insertAfter\":\"Ievietot rindu pēc\",\"deleteRow\":\"Dzēst rindas\"},\"rows\":\"Rindas\",\"summary\":\"Anotācija\",\"title\":\"Tabulas īpašības\",\"toolbar\":\"Tabula\",\"widthPc\":\"procentuāli\",\"widthPx\":\"pikseļos\",\"widthUnit\":\"platuma mērvienība\"},\"undo\":{\"redo\":\"Atkārtot\",\"undo\":\"Atcelt\"},\"wsc\":{\"btnIgnore\":\"Ignorēt\",\"btnIgnoreAll\":\"Ignorēt visu\",\"btnReplace\":\"Aizvietot\",\"btnReplaceAll\":\"Aizvietot visu\",\"btnUndo\":\"Atcelt\",\"changeTo\":\"Nomainīt uz\",\"errorLoading\":\"Kļūda ielādējot aplikācijas servisa adresi: %s.\",\"ieSpellDownload\":\"Pareizrakstības pārbaudītājs nav pievienots. Vai vēlaties to lejupielādēt tagad?\",\"manyChanges\":\"Pareizrakstības pārbaude pabeigta: %1 vārdi tika mainīti\",\"noChanges\":\"Pareizrakstības pārbaude pabeigta: nekas netika labots\",\"noMispell\":\"Pareizrakstības pārbaude pabeigta: kļūdas netika atrastas\",\"noSuggestions\":\"- Nav ieteikumu -\",\"notAvailable\":\"Atvainojiet, bet serviss šobrīd nav pieejams.\",\"notInDic\":\"Netika atrasts vārdnīcā\",\"oneChange\":\"Pareizrakstības pārbaude pabeigta: 1 vārds izmainīts\",\"progress\":\"Notiek pareizrakstības pārbaude...\",\"title\":\"Pārbaudīt gramatiku\",\"toolbar\":\"Pareizrakstības pārbaude\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/mk.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['mk']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Притисни ALT 0 за помош\",\"browseServer\":\"Пребарај низ серверот\",\"url\":\"URL\",\"protocol\":\"Протокол\",\"upload\":\"Прикачи\",\"uploadSubmit\":\"Прикачи на сервер\",\"image\":\"Слика\",\"flash\":\"Flash\",\"form\":\"Form\",\"checkbox\":\"Checkbox\",\"radio\":\"Radio Button\",\"textField\":\"Поле за текст\",\"textarea\":\"Големо поле за текст\",\"hiddenField\":\"Скриено поле\",\"button\":\"Button\",\"select\":\"Selection Field\",\"imageButton\":\"Копче-слика\",\"notSet\":\"<not set>\",\"id\":\"Id\",\"name\":\"Name\",\"langDir\":\"Насока на јазик\",\"langDirLtr\":\"Лево кон десно\",\"langDirRtl\":\"Десно кон лево\",\"langCode\":\"Код на јазик\",\"longDescr\":\"Long Description URL\",\"cssClass\":\"Stylesheet Classes\",\"advisoryTitle\":\"Advisory Title\",\"cssStyle\":\"Стил\",\"ok\":\"OK\",\"cancel\":\"Cancel\",\"close\":\"Close\",\"preview\":\"Preview\",\"resize\":\"Resize\",\"generalTab\":\"Општо\",\"advancedTab\":\"Advanced\",\"validateNumberFailed\":\"This value is not a number.\",\"confirmNewPage\":\"Any unsaved changes to this content will be lost. Are you sure you want to load new page?\",\"confirmCancel\":\"You have changed some options. Are you sure you want to close the dialog window?\",\"options\":\"Опции\",\"target\":\"Target\",\"targetNew\":\"Нов прозорец (_blank)\",\"targetTop\":\"Најгорниот прозорец (_top)\",\"targetSelf\":\"Истиот прозорец (_self)\",\"targetParent\":\"Прозорец-родител (_parent)\",\"langDirLTR\":\"Лево кон десно\",\"langDirRTL\":\"Десно кон лево\",\"styles\":\"Стил\",\"cssClasses\":\"Stylesheet Classes\",\"width\":\"Широчина\",\"height\":\"Височина\",\"align\":\"Alignment\",\"alignLeft\":\"Лево\",\"alignRight\":\"Десно\",\"alignCenter\":\"Во средина\",\"alignJustify\":\"Justify\",\"alignTop\":\"Горе\",\"alignMiddle\":\"Средина\",\"alignBottom\":\"Доле\",\"alignNone\":\"Никое\",\"invalidValue\":\"Невалидна вредност\",\"invalidHeight\":\"Височината мора да биде број.\",\"invalidWidth\":\"Широчината мора да биде број.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Авторски права &copy; $1. Сите права се задржани.\",\"dlgTitle\":\"За CKEditor\",\"help\":\"Отворете $1 за помош.\",\"moreInfo\":\"За информации околу лиценцата, ве молиме посетете го нашиот веб-сајт: \",\"title\":\"За CKEditor\",\"userGuide\":\"CKEditor упатство за корисници\"},\"basicstyles\":{\"bold\":\"Здебелено\",\"italic\":\"Накривено\",\"strike\":\"Прецртано\",\"subscript\":\"Долен индекс\",\"superscript\":\"Горен индекс\",\"underline\":\"Подвлечено\"},\"blockquote\":{\"toolbar\":\"Одвоен цитат\"},\"clipboard\":{\"copy\":\"Копирај (Copy)\",\"copyError\":\"Опциите за безбедност на вашиот прелистувач не дозволуваат уредувачот автоматски да изврши копирање. Ве молиме употребете ја тастатурата. (Ctrl/Cmd+C)\",\"cut\":\"Исечи (Cut)\",\"cutError\":\"Опциите за безбедност на вашиот прелистувач не дозволуваат уредувачот автоматски да изврши сечење. Ве молиме употребете ја тастатурата. (Ctrl/Cmd+C)\",\"paste\":\"Залепи (Paste)\",\"pasteArea\":\"Простор за залепување\",\"pasteMsg\":\"Ве молиме да залепите во следниот квадрат користејќи ја тастатурата (<string>Ctrl/Cmd+V</string>) и да притиснете OK\",\"securityMsg\":\"Опциите за безбедност на вашиот прелистувач не дозволуваат уредувачот директно да пристапи до копираните податоци. Потребно е повторно да се обидете во овој прозорец.\",\"title\":\"Залепи (Paste)\"},\"contextmenu\":{\"options\":\"Контекст-мени опции\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Collapse Toolbar\",\"toolbarExpand\":\"Expand Toolbar\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"Editor toolbars\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Paragraph Format\",\"tag_address\":\"Address\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Heading 1\",\"tag_h2\":\"Heading 2\",\"tag_h3\":\"Heading 3\",\"tag_h4\":\"Heading 4\",\"tag_h5\":\"Heading 5\",\"tag_h6\":\"Heading 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatted\"},\"horizontalrule\":{\"toolbar\":\"Insert Horizontal Line\"},\"image\":{\"alt\":\"Алтернативен текст\",\"border\":\"Раб\",\"btnUpload\":\"Прикачи на сервер\",\"button2Img\":\"Дали сакате да направите сликата-копче да биде само слика?\",\"hSpace\":\"Хоризонтален простор\",\"img2Button\":\"Дали сакате да ја претворите сликата во слика-копче?\",\"infoTab\":\"Информации за сликата\",\"linkTab\":\"Врска\",\"lockRatio\":\"Зачувај пропорција\",\"menu\":\"Својства на сликата\",\"resetSize\":\"Ресетирај големина\",\"title\":\"Својства на сликата\",\"titleButton\":\"Својства на копче-сликата\",\"upload\":\"Прикачи\",\"urlMissing\":\"Недостасува URL-то на сликата.\",\"vSpace\":\"Вертикален простор\",\"validateBorder\":\"Работ мора да биде цел број.\",\"validateHSpace\":\"Хор. простор мора да биде цел број.\",\"validateVSpace\":\"Верт. простор мора да биде цел број.\"},\"indent\":{\"indent\":\"Increase Indent\",\"outdent\":\"Decrease Indent\"},\"fakeobjects\":{\"anchor\":\"Anchor\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"Скриено поле\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"Access Key\",\"advanced\":\"Advanced\",\"advisoryContentType\":\"Advisory Content Type\",\"advisoryTitle\":\"Advisory Title\",\"anchor\":{\"toolbar\":\"Anchor\",\"menu\":\"Edit Anchor\",\"title\":\"Anchor Properties\",\"name\":\"Anchor Name\",\"errorName\":\"Please type the anchor name\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"By Element Id\",\"anchorName\":\"By Anchor Name\",\"charset\":\"Linked Resource Charset\",\"cssClasses\":\"Stylesheet Classes\",\"emailAddress\":\"E-Mail Address\",\"emailBody\":\"Message Body\",\"emailSubject\":\"Message Subject\",\"id\":\"Id\",\"info\":\"Link Info\",\"langCode\":\"Код на јазик\",\"langDir\":\"Насока на јазик\",\"langDirLTR\":\"Лево кон десно\",\"langDirRTL\":\"Десно кон лево\",\"menu\":\"Edit Link\",\"name\":\"Name\",\"noAnchors\":\"(No anchors available in the document)\",\"noEmail\":\"Please type the e-mail address\",\"noUrl\":\"Please type the link URL\",\"other\":\"<other>\",\"popupDependent\":\"Dependent (Netscape)\",\"popupFeatures\":\"Popup Window Features\",\"popupFullScreen\":\"Full Screen (IE)\",\"popupLeft\":\"Left Position\",\"popupLocationBar\":\"Location Bar\",\"popupMenuBar\":\"Menu Bar\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"Scroll Bars\",\"popupStatusBar\":\"Status Bar\",\"popupToolbar\":\"Toolbar\",\"popupTop\":\"Top Position\",\"rel\":\"Relationship\",\"selectAnchor\":\"Select an Anchor\",\"styles\":\"Стил\",\"tabIndex\":\"Tab Index\",\"target\":\"Target\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Target Frame Name\",\"targetPopup\":\"<popup window>\",\"targetPopupName\":\"Popup Window Name\",\"title\":\"Врска\",\"toAnchor\":\"Link to anchor in the text\",\"toEmail\":\"E-mail\",\"toUrl\":\"URL\",\"toolbar\":\"Врска\",\"type\":\"Link Type\",\"unlink\":\"Unlink\",\"upload\":\"Прикачи\"},\"list\":{\"bulletedlist\":\"Insert/Remove Bulleted List\",\"numberedlist\":\"Insert/Remove Numbered List\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Maximize\",\"minimize\":\"Minimize\"},\"pastetext\":{\"button\":\"Paste as plain text\",\"title\":\"Paste as Plain Text\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"Paste from Word\",\"toolbar\":\"Paste from Word\"},\"removeformat\":{\"toolbar\":\"Remove Format\"},\"sourcearea\":{\"toolbar\":\"Source\"},\"specialchar\":{\"options\":\"Special Character Options\",\"title\":\"Select Special Character\",\"toolbar\":\"Insert Special Character\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Styles\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"Border size\",\"caption\":\"Caption\",\"cell\":{\"menu\":\"Cell\",\"insertBefore\":\"Insert Cell Before\",\"insertAfter\":\"Insert Cell After\",\"deleteCell\":\"Delete Cells\",\"merge\":\"Merge Cells\",\"mergeRight\":\"Merge Right\",\"mergeDown\":\"Merge Down\",\"splitHorizontal\":\"Split Cell Horizontally\",\"splitVertical\":\"Split Cell Vertically\",\"title\":\"Cell Properties\",\"cellType\":\"Cell Type\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Horizontal Alignment\",\"vAlign\":\"Vertical Alignment\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Background Color\",\"borderColor\":\"Border Color\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Yes\",\"no\":\"No\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Choose\"},\"cellPad\":\"Cell padding\",\"cellSpace\":\"Cell spacing\",\"column\":{\"menu\":\"Column\",\"insertBefore\":\"Insert Column Before\",\"insertAfter\":\"Insert Column After\",\"deleteColumn\":\"Delete Columns\"},\"columns\":\"Columns\",\"deleteTable\":\"Delete Table\",\"headers\":\"Headers\",\"headersBoth\":\"Both\",\"headersColumn\":\"First column\",\"headersNone\":\"None\",\"headersRow\":\"First Row\",\"invalidBorder\":\"Border size must be a number.\",\"invalidCellPadding\":\"Cell padding must be a positive number.\",\"invalidCellSpacing\":\"Cell spacing must be a positive number.\",\"invalidCols\":\"Number of columns must be a number greater than 0.\",\"invalidHeight\":\"Table height must be a number.\",\"invalidRows\":\"Number of rows must be a number greater than 0.\",\"invalidWidth\":\"Table width must be a number.\",\"menu\":\"Table Properties\",\"row\":{\"menu\":\"Row\",\"insertBefore\":\"Insert Row Before\",\"insertAfter\":\"Insert Row After\",\"deleteRow\":\"Delete Rows\"},\"rows\":\"Rows\",\"summary\":\"Summary\",\"title\":\"Table Properties\",\"toolbar\":\"Table\",\"widthPc\":\"percent\",\"widthPx\":\"pixels\",\"widthUnit\":\"width unit\"},\"undo\":{\"redo\":\"Redo\",\"undo\":\"Undo\"},\"wsc\":{\"btnIgnore\":\"Ignore\",\"btnIgnoreAll\":\"Ignore All\",\"btnReplace\":\"Replace\",\"btnReplaceAll\":\"Replace All\",\"btnUndo\":\"Undo\",\"changeTo\":\"Change to\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Spell checker not installed. Do you want to download it now?\",\"manyChanges\":\"Spell check complete: %1 words changed\",\"noChanges\":\"Spell check complete: No words changed\",\"noMispell\":\"Spell check complete: No misspellings found\",\"noSuggestions\":\"- No suggestions -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Not in dictionary\",\"oneChange\":\"Spell check complete: One word changed\",\"progress\":\"Spell check in progress...\",\"title\":\"Spell Checker\",\"toolbar\":\"Check Spelling\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/mn.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['mn']={\"editor\":\"Хэлбэрт бичвэр боловсруулагч\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Press ALT 0 for help\",\"browseServer\":\"Үйлчлэгч тооцоолуур (сервэр)-ийг үзэх\",\"url\":\"цахим хуудасны хаяг (URL)\",\"protocol\":\"Протокол\",\"upload\":\"Илгээж ачаалах\",\"uploadSubmit\":\"Үүнийг үйлчлэгч тооцоолуур (сервер) лүү илгээх\",\"image\":\"Зураг\",\"flash\":\"Флаш хөдөлгөөнтэй зураг\",\"form\":\"Маягт\",\"checkbox\":\"Тэмдэглээний нүд\",\"radio\":\"Радио товчлуур\",\"textField\":\"Бичвэрийн талбар\",\"textarea\":\"Бичвэрийн зай\",\"hiddenField\":\"Далд талбар\",\"button\":\"Товчлуур\",\"select\":\"Сонголтын талбар\",\"imageButton\":\"Зургий товчуур\",\"notSet\":\"<тохируулаагүй>\",\"id\":\"Id (техникийн нэр)\",\"name\":\"Нэр\",\"langDir\":\"Хэлний чиглэл\",\"langDirLtr\":\"Зүүнээс баруун (LTR)\",\"langDirRtl\":\"Баруунаас зүүн (RTL)\",\"langCode\":\"Хэлний код\",\"longDescr\":\"Урт тайлбарын вэб хаяг\",\"cssClass\":\"Хэлбэрийн хуудасны ангиуд\",\"advisoryTitle\":\"Зөвлөх гарчиг\",\"cssStyle\":\"Загвар\",\"ok\":\"За\",\"cancel\":\"Болих\",\"close\":\"Хаах\",\"preview\":\"Урьдчилан харах\",\"resize\":\"Resize\",\"generalTab\":\"Ерөнхий\",\"advancedTab\":\"Гүнзгий\",\"validateNumberFailed\":\"This value is not a number.\",\"confirmNewPage\":\"Any unsaved changes to this content will be lost. Are you sure you want to load new page?\",\"confirmCancel\":\"You have changed some options. Are you sure you want to close the dialog window?\",\"options\":\"Сонголт\",\"target\":\"Бай\",\"targetNew\":\"New Window (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"Same Window (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"Зүүн талаас баруун тийшээ (LTR)\",\"langDirRTL\":\"Баруун талаас зүүн тийшээ (RTL)\",\"styles\":\"Загвар\",\"cssClasses\":\"Хэлбэрийн хуудасны ангиуд\",\"width\":\"Өргөн\",\"height\":\"Өндөр\",\"align\":\"Эгнээ\",\"alignLeft\":\"Зүүн\",\"alignRight\":\"Баруун\",\"alignCenter\":\"Төвд\",\"alignJustify\":\"Тэгшлэх\",\"alignTop\":\"Дээд талд\",\"alignMiddle\":\"Дунд\",\"alignBottom\":\"Доод талд\",\"alignNone\":\"None\",\"invalidValue\":\"Invalid value.\",\"invalidHeight\":\"Өндөр нь тоо байх ёстой.\",\"invalidWidth\":\"Өргөн нь тоо байх ёстой.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"About CKEditor\",\"help\":\"Check $1 for help.\",\"moreInfo\":\"For licensing information please visit our web site:\",\"title\":\"About CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"Тод бүдүүн\",\"italic\":\"Налуу\",\"strike\":\"Дундуур нь зураастай болгох\",\"subscript\":\"Суурь болгох\",\"superscript\":\"Зэрэг болгох\",\"underline\":\"Доогуур нь зураастай болгох\"},\"blockquote\":{\"toolbar\":\"Ишлэл хэсэг\"},\"clipboard\":{\"copy\":\"Хуулах\",\"copyError\":\"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+C) товчны хослолыг ашиглана уу.\",\"cut\":\"Хайчлах\",\"cutError\":\"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+X) товчны хослолыг ашиглана уу.\",\"paste\":\"Буулгах\",\"pasteArea\":\"Paste Area\",\"pasteMsg\":\"(<strong>Ctrl/Cmd+V</strong>) товчийг ашиглан paste хийнэ үү. Мөн <strong>OK</strong> дар.\",\"securityMsg\":\"Таны үзүүлэгч/browser/-н хамгаалалтын тохиргооноос болоод editor clipboard өгөгдөлрүү шууд хандах боломжгүй. Энэ цонход дахин paste хийхийг оролд.\",\"title\":\"Буулгах\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Collapse Toolbar\",\"toolbarExpand\":\"Expand Toolbar\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Холбоосууд\",\"insert\":\"Оруулах\",\"styles\":\"Загварууд\",\"colors\":\"Онгөнүүд\",\"tools\":\"Хэрэгслүүд\"},\"toolbars\":\"Болосруулагчийн хэрэгслийн самбар\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Параргафын загвар\",\"panelTitle\":\"Параргафын загвар\",\"tag_address\":\"Хаяг\",\"tag_div\":\"Paragraph (DIV)\",\"tag_h1\":\"Гарчиг 1\",\"tag_h2\":\"Гарчиг 2\",\"tag_h3\":\"Гарчиг 3\",\"tag_h4\":\"Гарчиг 4\",\"tag_h5\":\"Гарчиг 5\",\"tag_h6\":\"Гарчиг 6\",\"tag_p\":\"Хэвийн\",\"tag_pre\":\"Formatted\"},\"horizontalrule\":{\"toolbar\":\"Хөндлөн зураас оруулах\"},\"image\":{\"alt\":\"Зургийг орлох бичвэр\",\"border\":\"Хүрээ\",\"btnUpload\":\"Үүнийг сервэррүү илгээ\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"Хөндлөн зай\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"Зурагны мэдээлэл\",\"linkTab\":\"Холбоос\",\"lockRatio\":\"Радио түгжих\",\"menu\":\"Зураг\",\"resetSize\":\"хэмжээ дахин оноох\",\"title\":\"Зураг\",\"titleButton\":\"Зурган товчны шинж чанар\",\"upload\":\"Хуулах\",\"urlMissing\":\"Зургийн эх сурвалжийн хаяг (URL) байхгүй байна.\",\"vSpace\":\"Босоо зай\",\"validateBorder\":\"Border must be a whole number.\",\"validateHSpace\":\"HSpace must be a whole number.\",\"validateVSpace\":\"VSpace must be a whole number.\"},\"indent\":{\"indent\":\"Догол мөр хасах\",\"outdent\":\"Догол мөр нэмэх\"},\"fakeobjects\":{\"anchor\":\"Зангуу\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"Нууц талбар\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"Холбох түлхүүр\",\"advanced\":\"Нэмэлт\",\"advisoryContentType\":\"Зөвлөлдөх төрлийн агуулга\",\"advisoryTitle\":\"Зөвлөлдөх гарчиг\",\"anchor\":{\"toolbar\":\"Зангуу\",\"menu\":\"Зангууг болосруулах\",\"title\":\"Зангуугийн шинж чанар\",\"name\":\"Зангуугийн нэр\",\"errorName\":\"Зангуугийн нэрийг оруулна уу\",\"remove\":\"Зангууг устгах\"},\"anchorId\":\"Элемэнтйн Id нэрээр\",\"anchorName\":\"Зангуугийн нэрээр\",\"charset\":\"Тэмдэгт оноох нөөцөд холбогдсон\",\"cssClasses\":\"Stylesheet классууд\",\"emailAddress\":\"Э-шуудангийн хаяг\",\"emailBody\":\"Зурвасны их бие\",\"emailSubject\":\"Зурвасны гарчиг\",\"id\":\"Id\",\"info\":\"Холбоосын тухай мэдээлэл\",\"langCode\":\"Хэлний код\",\"langDir\":\"Хэлний чиглэл\",\"langDirLTR\":\"Зүүнээс баруун (LTR)\",\"langDirRTL\":\"Баруунаас зүүн (RTL)\",\"menu\":\"Холбоос засварлах\",\"name\":\"Нэр\",\"noAnchors\":\"(Баримт бичиг зангуугүй байна)\",\"noEmail\":\"Э-шуудангий хаягаа шивнэ үү\",\"noUrl\":\"Холбоосны URL хаягийг шивнэ үү\",\"other\":\"<other>\",\"popupDependent\":\"Хамаатай (Netscape)\",\"popupFeatures\":\"Popup цонхны онцлог\",\"popupFullScreen\":\"Цонх дүүргэх (Internet Explorer)\",\"popupLeft\":\"Зүүн байрлал\",\"popupLocationBar\":\"Location хэсэг\",\"popupMenuBar\":\"Цэсний самбар\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"Скрол хэсэгүүд\",\"popupStatusBar\":\"Статус хэсэг\",\"popupToolbar\":\"Багажны самбар\",\"popupTop\":\"Дээд байрлал\",\"rel\":\"Relationship\",\"selectAnchor\":\"Нэг зангууг сонгоно уу\",\"styles\":\"Загвар\",\"tabIndex\":\"Tab индекс\",\"target\":\"Байрлал\",\"targetFrame\":\"<Агуулах хүрээ>\",\"targetFrameName\":\"Очих фремын нэр\",\"targetPopup\":\"<popup цонх>\",\"targetPopupName\":\"Popup цонхны нэр\",\"title\":\"Холбоос\",\"toAnchor\":\"Энэ бичвэр дэх зангуу руу очих холбоос\",\"toEmail\":\"Э-захиа\",\"toUrl\":\"цахим хуудасны хаяг (URL)\",\"toolbar\":\"Холбоос\",\"type\":\"Линкийн төрөл\",\"unlink\":\"Холбоос авч хаях\",\"upload\":\"Хуулах\"},\"list\":{\"bulletedlist\":\"Цэгтэй жагсаалт\",\"numberedlist\":\"Дугаарлагдсан жагсаалт\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Дэлгэц дүүргэх\",\"minimize\":\"Цонхыг багсгаж харуулах\"},\"pastetext\":{\"button\":\"Энгийн бичвэрээр буулгах\",\"title\":\"Энгийн бичвэрээр буулгах\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"Word-оос буулгах\",\"toolbar\":\"Word-оос буулгах\"},\"removeformat\":{\"toolbar\":\"Параргафын загварыг авч хаях\"},\"sourcearea\":{\"toolbar\":\"Код\"},\"specialchar\":{\"options\":\"Special Character Options\",\"title\":\"Онцгой тэмдэгт сонгох\",\"toolbar\":\"Онцгой тэмдэгт оруулах\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Толь бичгүүд\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Хэлүүд\",\"btn_options\":\"Сонголт\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Загвар\",\"panelTitle\":\"Загвар хэлбэржүүлэх\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"Хүрээний хэмжээ\",\"caption\":\"Тайлбар\",\"cell\":{\"menu\":\"Нүх/зай\",\"insertBefore\":\"Нүх/зай өмнө нь оруулах\",\"insertAfter\":\"Нүх/зай дараа нь оруулах\",\"deleteCell\":\"Нүх устгах\",\"merge\":\"Нүх нэгтэх\",\"mergeRight\":\"Баруун тийш нэгтгэх\",\"mergeDown\":\"Доош нэгтгэх\",\"splitHorizontal\":\"Нүх/зайг босоогоор нь тусгаарлах\",\"splitVertical\":\"Нүх/зайг хөндлөнгөөр нь тусгаарлах\",\"title\":\"Cell Properties\",\"cellType\":\"Cell Type\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Хэвтээд тэгшлэх арга\",\"vAlign\":\"Босоод тэгшлэх арга\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Дэвсгэр өнгө\",\"borderColor\":\"Хүрээний өнгө\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Тийм\",\"no\":\"Үгүй\",\"invalidWidth\":\"Нүдний өргөн нь тоо байх ёстой.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Сонгох\"},\"cellPad\":\"Нүх доторлох(padding)\",\"cellSpace\":\"Нүх хоорондын зай (spacing)\",\"column\":{\"menu\":\"Багана\",\"insertBefore\":\"Багана өмнө нь оруулах\",\"insertAfter\":\"Багана дараа нь оруулах\",\"deleteColumn\":\"Багана устгах\"},\"columns\":\"Багана\",\"deleteTable\":\"Хүснэгт устгах\",\"headers\":\"Headers\",\"headersBoth\":\"Both\",\"headersColumn\":\"First column\",\"headersNone\":\"None\",\"headersRow\":\"First Row\",\"invalidBorder\":\"Border size must be a number.\",\"invalidCellPadding\":\"Cell padding must be a positive number.\",\"invalidCellSpacing\":\"Cell spacing must be a positive number.\",\"invalidCols\":\"Number of columns must be a number greater than 0.\",\"invalidHeight\":\"Table height must be a number.\",\"invalidRows\":\"Number of rows must be a number greater than 0.\",\"invalidWidth\":\"Хүснэгтийн өргөн нь тоо байх ёстой.\",\"menu\":\"Хүснэгт\",\"row\":{\"menu\":\"Мөр\",\"insertBefore\":\"Мөр өмнө нь оруулах\",\"insertAfter\":\"Мөр дараа нь оруулах\",\"deleteRow\":\"Мөр устгах\"},\"rows\":\"Мөр\",\"summary\":\"Тайлбар\",\"title\":\"Хүснэгт\",\"toolbar\":\"Хүснэгт\",\"widthPc\":\"хувь\",\"widthPx\":\"цэг\",\"widthUnit\":\"өргөний нэгж\"},\"undo\":{\"redo\":\"Өмнөх үйлдлээ сэргээх\",\"undo\":\"Хүчингүй болгох\"},\"wsc\":{\"btnIgnore\":\"Зөвшөөрөх\",\"btnIgnoreAll\":\"Бүгдийг зөвшөөрөх\",\"btnReplace\":\"Солих\",\"btnReplaceAll\":\"Бүгдийг Дарж бичих\",\"btnUndo\":\"Буцаах\",\"changeTo\":\"Өөрчлөх\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Дүрэм шалгагч суугаагүй байна. Татаж авахыг хүсч байна уу?\",\"manyChanges\":\"Дүрэм шалгаад дууссан: %1 үг өөрчлөгдсөн\",\"noChanges\":\"Дүрэм шалгаад дууссан: үг өөрчлөгдөөгүй\",\"noMispell\":\"Дүрэм шалгаад дууссан: Алдаа олдсонгүй\",\"noSuggestions\":\"- Тайлбаргүй -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Толь бичиггүй\",\"oneChange\":\"Дүрэм шалгаад дууссан: 1 үг өөрчлөгдсөн\",\"progress\":\"Дүрэм шалгаж байгаа үйл явц...\",\"title\":\"Spell Checker\",\"toolbar\":\"Үгийн дүрэх шалгах\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/ms.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['ms']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Press ALT 0 for help\",\"browseServer\":\"Browse Server\",\"url\":\"URL\",\"protocol\":\"Protokol\",\"upload\":\"Muat Naik\",\"uploadSubmit\":\"Hantar ke Server\",\"image\":\"Gambar\",\"flash\":\"Flash\",\"form\":\"Borang\",\"checkbox\":\"Checkbox\",\"radio\":\"Butang Radio\",\"textField\":\"Text Field\",\"textarea\":\"Textarea\",\"hiddenField\":\"Field Tersembunyi\",\"button\":\"Butang\",\"select\":\"Field Pilihan\",\"imageButton\":\"Butang Bergambar\",\"notSet\":\"<tidak di set>\",\"id\":\"Id\",\"name\":\"Nama\",\"langDir\":\"Arah Tulisan\",\"langDirLtr\":\"Kiri ke Kanan (LTR)\",\"langDirRtl\":\"Kanan ke Kiri (RTL)\",\"langCode\":\"Kod Bahasa\",\"longDescr\":\"Butiran Panjang URL\",\"cssClass\":\"Kelas-kelas Stylesheet\",\"advisoryTitle\":\"Tajuk Makluman\",\"cssStyle\":\"Stail\",\"ok\":\"OK\",\"cancel\":\"Batal\",\"close\":\"Tutup\",\"preview\":\"Prebiu\",\"resize\":\"Resize\",\"generalTab\":\"Umum\",\"advancedTab\":\"Advanced\",\"validateNumberFailed\":\"This value is not a number.\",\"confirmNewPage\":\"Any unsaved changes to this content will be lost. Are you sure you want to load new page?\",\"confirmCancel\":\"You have changed some options. Are you sure you want to close the dialog window?\",\"options\":\"Options\",\"target\":\"Sasaran\",\"targetNew\":\"New Window (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"Same Window (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"Kiri ke Kanan (LTR)\",\"langDirRTL\":\"Kanan ke Kiri (RTL)\",\"styles\":\"Stail\",\"cssClasses\":\"Kelas-kelas Stylesheet\",\"width\":\"Lebar\",\"height\":\"Tinggi\",\"align\":\"Jajaran\",\"alignLeft\":\"Kiri\",\"alignRight\":\"Kanan\",\"alignCenter\":\"Tengah\",\"alignJustify\":\"Jajaran Blok\",\"alignTop\":\"Atas\",\"alignMiddle\":\"Pertengahan\",\"alignBottom\":\"Bawah\",\"alignNone\":\"None\",\"invalidValue\":\"Nilai tidak sah.\",\"invalidHeight\":\"Height must be a number.\",\"invalidWidth\":\"Width must be a number.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"About CKEditor\",\"help\":\"Check $1 for help.\",\"moreInfo\":\"For licensing information please visit our web site:\",\"title\":\"About CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"Bold\",\"italic\":\"Italic\",\"strike\":\"Strike Through\",\"subscript\":\"Subscript\",\"superscript\":\"Superscript\",\"underline\":\"Underline\"},\"blockquote\":{\"toolbar\":\"Block Quote\"},\"clipboard\":{\"copy\":\"Salin\",\"copyError\":\"Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+C).\",\"cut\":\"Potong\",\"cutError\":\"Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+X).\",\"paste\":\"Tampal\",\"pasteArea\":\"Paste Area\",\"pasteMsg\":\"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK\",\"securityMsg\":\"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.\",\"title\":\"Tampal\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Collapse Toolbar\",\"toolbarExpand\":\"Expand Toolbar\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"Editor toolbars\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Format\",\"tag_address\":\"Alamat\",\"tag_div\":\"Perenggan (DIV)\",\"tag_h1\":\"Heading 1\",\"tag_h2\":\"Heading 2\",\"tag_h3\":\"Heading 3\",\"tag_h4\":\"Heading 4\",\"tag_h5\":\"Heading 5\",\"tag_h6\":\"Heading 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Telah Diformat\"},\"horizontalrule\":{\"toolbar\":\"Masukkan Garisan Membujur\"},\"image\":{\"alt\":\"Text Alternatif\",\"border\":\"Border\",\"btnUpload\":\"Hantar ke Server\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"Ruang Melintang\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"Info Imej\",\"linkTab\":\"Sambungan\",\"lockRatio\":\"Tetapkan Nisbah\",\"menu\":\"Ciri-ciri Imej\",\"resetSize\":\"Saiz Set Semula\",\"title\":\"Ciri-ciri Imej\",\"titleButton\":\"Ciri-ciri Butang Bergambar\",\"upload\":\"Muat Naik\",\"urlMissing\":\"Image source URL is missing.\",\"vSpace\":\"Ruang Menegak\",\"validateBorder\":\"Border must be a whole number.\",\"validateHSpace\":\"HSpace must be a whole number.\",\"validateVSpace\":\"VSpace must be a whole number.\"},\"indent\":{\"indent\":\"Tambahkan Inden\",\"outdent\":\"Kurangkan Inden\"},\"fakeobjects\":{\"anchor\":\"Anchor\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"Hidden Field\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"Kunci Akses\",\"advanced\":\"Advanced\",\"advisoryContentType\":\"Jenis Kandungan Makluman\",\"advisoryTitle\":\"Tajuk Makluman\",\"anchor\":{\"toolbar\":\"Masukkan/Sunting Pautan\",\"menu\":\"Ciri-ciri Pautan\",\"title\":\"Ciri-ciri Pautan\",\"name\":\"Nama Pautan\",\"errorName\":\"Sila taip nama pautan\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"dengan menggunakan ID elemen\",\"anchorName\":\"dengan menggunakan nama pautan\",\"charset\":\"Linked Resource Charset\",\"cssClasses\":\"Kelas-kelas Stylesheet\",\"emailAddress\":\"Alamat E-Mail\",\"emailBody\":\"Isi Kandungan Mesej\",\"emailSubject\":\"Subjek Mesej\",\"id\":\"Id\",\"info\":\"Butiran Sambungan\",\"langCode\":\"Arah Tulisan\",\"langDir\":\"Arah Tulisan\",\"langDirLTR\":\"Kiri ke Kanan (LTR)\",\"langDirRTL\":\"Kanan ke Kiri (RTL)\",\"menu\":\"Sunting Sambungan\",\"name\":\"Nama\",\"noAnchors\":\"(Tiada pautan terdapat dalam dokumen ini)\",\"noEmail\":\"Sila taip alamat e-mail\",\"noUrl\":\"Sila taip sambungan URL\",\"other\":\"<lain>\",\"popupDependent\":\"Bergantungan (Netscape)\",\"popupFeatures\":\"Ciri Tetingkap Popup\",\"popupFullScreen\":\"Skrin Penuh (IE)\",\"popupLeft\":\"Posisi Kiri\",\"popupLocationBar\":\"Bar Lokasi\",\"popupMenuBar\":\"Bar Menu\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"Bar-bar skrol\",\"popupStatusBar\":\"Bar Status\",\"popupToolbar\":\"Toolbar\",\"popupTop\":\"Posisi Atas\",\"rel\":\"Relationship\",\"selectAnchor\":\"Sila pilih pautan\",\"styles\":\"Stail\",\"tabIndex\":\"Indeks Tab \",\"target\":\"Sasaran\",\"targetFrame\":\"<bingkai>\",\"targetFrameName\":\"Nama Bingkai Sasaran\",\"targetPopup\":\"<tetingkap popup>\",\"targetPopupName\":\"Nama Tetingkap Popup\",\"title\":\"Sambungan\",\"toAnchor\":\"Pautan dalam muka surat ini\",\"toEmail\":\"E-Mail\",\"toUrl\":\"URL\",\"toolbar\":\"Masukkan/Sunting Sambungan\",\"type\":\"Jenis Sambungan\",\"unlink\":\"Buang Sambungan\",\"upload\":\"Muat Naik\"},\"list\":{\"bulletedlist\":\"Senarai tidak bernombor\",\"numberedlist\":\"Senarai bernombor\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Maximize\",\"minimize\":\"Minimize\"},\"pastetext\":{\"button\":\"Tampal sebagai text biasa\",\"title\":\"Tampal sebagai text biasa\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"Tampal dari Word\",\"toolbar\":\"Tampal dari Word\"},\"removeformat\":{\"toolbar\":\"Buang Format\"},\"sourcearea\":{\"toolbar\":\"Sumber\"},\"specialchar\":{\"options\":\"Special Character Options\",\"title\":\"Sila pilih huruf istimewa\",\"toolbar\":\"Masukkan Huruf Istimewa\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Stail\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"Saiz Border\",\"caption\":\"Keterangan\",\"cell\":{\"menu\":\"Cell\",\"insertBefore\":\"Insert Cell Before\",\"insertAfter\":\"Insert Cell After\",\"deleteCell\":\"Buangkan Sel-sel\",\"merge\":\"Cantumkan Sel-sel\",\"mergeRight\":\"Merge Right\",\"mergeDown\":\"Merge Down\",\"splitHorizontal\":\"Split Cell Horizontally\",\"splitVertical\":\"Split Cell Vertically\",\"title\":\"Cell Properties\",\"cellType\":\"Cell Type\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Horizontal Alignment\",\"vAlign\":\"Vertical Alignment\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Background Color\",\"borderColor\":\"Border Color\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Yes\",\"no\":\"No\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Choose\"},\"cellPad\":\"Tambahan Ruang Sel\",\"cellSpace\":\"Ruangan Antara Sel\",\"column\":{\"menu\":\"Column\",\"insertBefore\":\"Insert Column Before\",\"insertAfter\":\"Insert Column After\",\"deleteColumn\":\"Buangkan Lajur\"},\"columns\":\"Jaluran\",\"deleteTable\":\"Delete Table\",\"headers\":\"Headers\",\"headersBoth\":\"Both\",\"headersColumn\":\"First column\",\"headersNone\":\"None\",\"headersRow\":\"First Row\",\"invalidBorder\":\"Border size must be a number.\",\"invalidCellPadding\":\"Cell padding must be a positive number.\",\"invalidCellSpacing\":\"Cell spacing must be a positive number.\",\"invalidCols\":\"Number of columns must be a number greater than 0.\",\"invalidHeight\":\"Table height must be a number.\",\"invalidRows\":\"Number of rows must be a number greater than 0.\",\"invalidWidth\":\"Table width must be a number.\",\"menu\":\"Ciri-ciri Jadual\",\"row\":{\"menu\":\"Row\",\"insertBefore\":\"Insert Row Before\",\"insertAfter\":\"Insert Row After\",\"deleteRow\":\"Buangkan Baris\"},\"rows\":\"Barisan\",\"summary\":\"Summary\",\"title\":\"Ciri-ciri Jadual\",\"toolbar\":\"Jadual\",\"widthPc\":\"peratus\",\"widthPx\":\"piksel-piksel\",\"widthUnit\":\"width unit\"},\"undo\":{\"redo\":\"Ulangkan\",\"undo\":\"Batalkan\"},\"wsc\":{\"btnIgnore\":\"Biar\",\"btnIgnoreAll\":\"Biarkan semua\",\"btnReplace\":\"Ganti\",\"btnReplaceAll\":\"Gantikan Semua\",\"btnUndo\":\"Batalkan\",\"changeTo\":\"Tukarkan kepada\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?\",\"manyChanges\":\"Pemeriksaan ejaan siap: %1 perkataan diubah\",\"noChanges\":\"Pemeriksaan ejaan siap: Tiada perkataan diubah\",\"noMispell\":\"Pemeriksaan ejaan siap: Tiada salah ejaan\",\"noSuggestions\":\"- Tiada cadangan -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Tidak terdapat didalam kamus\",\"oneChange\":\"Pemeriksaan ejaan siap: Satu perkataan telah diubah\",\"progress\":\"Pemeriksaan ejaan sedang diproses...\",\"title\":\"Spell Checker\",\"toolbar\":\"Semak Ejaan\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/nb.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['nb']={\"editor\":\"Rikteksteditor\",\"editorPanel\":\"Panel for rikteksteditor\",\"common\":{\"editorHelp\":\"Trykk ALT 0 for hjelp\",\"browseServer\":\"Bla gjennom tjener\",\"url\":\"URL\",\"protocol\":\"Protokoll\",\"upload\":\"Last opp\",\"uploadSubmit\":\"Send det til serveren\",\"image\":\"Bilde\",\"flash\":\"Flash\",\"form\":\"Skjema\",\"checkbox\":\"Avmerkingsboks\",\"radio\":\"Alternativknapp\",\"textField\":\"Tekstboks\",\"textarea\":\"Tekstområde\",\"hiddenField\":\"Skjult felt\",\"button\":\"Knapp\",\"select\":\"Rullegardinliste\",\"imageButton\":\"Bildeknapp\",\"notSet\":\"<ikke satt>\",\"id\":\"Id\",\"name\":\"Navn\",\"langDir\":\"Språkretning\",\"langDirLtr\":\"Venstre til høyre (VTH)\",\"langDirRtl\":\"Høyre til venstre (HTV)\",\"langCode\":\"Språkkode\",\"longDescr\":\"Utvidet beskrivelse\",\"cssClass\":\"Stilarkklasser\",\"advisoryTitle\":\"Tittel\",\"cssStyle\":\"Stil\",\"ok\":\"OK\",\"cancel\":\"Avbryt\",\"close\":\"Lukk\",\"preview\":\"Forhåndsvis\",\"resize\":\"Dra for å skalere\",\"generalTab\":\"Generelt\",\"advancedTab\":\"Avansert\",\"validateNumberFailed\":\"Denne verdien er ikke et tall.\",\"confirmNewPage\":\"Alle ulagrede endringer som er gjort i dette innholdet vil gå tapt. Er du sikker på at du vil laste en ny side?\",\"confirmCancel\":\"Du har endret noen alternativer. Er du sikker på at du vil lukke dialogvinduet?\",\"options\":\"Valg\",\"target\":\"Mål\",\"targetNew\":\"Nytt vindu (_blank)\",\"targetTop\":\"Hele vindu (_top)\",\"targetSelf\":\"Samme vindu (_self)\",\"targetParent\":\"Foreldrevindu (_parent)\",\"langDirLTR\":\"Venstre til høyre (VTH)\",\"langDirRTL\":\"Høyre til venstre (HTV)\",\"styles\":\"Stil\",\"cssClasses\":\"Stilarkklasser\",\"width\":\"Bredde\",\"height\":\"Høyde\",\"align\":\"Juster\",\"alignLeft\":\"Venstre\",\"alignRight\":\"Høyre\",\"alignCenter\":\"Midtjuster\",\"alignJustify\":\"Blokkjuster\",\"alignTop\":\"Topp\",\"alignMiddle\":\"Midten\",\"alignBottom\":\"Bunn\",\"alignNone\":\"Ingen\",\"invalidValue\":\"Ugyldig verdi.\",\"invalidHeight\":\"Høyde må være et tall.\",\"invalidWidth\":\"Bredde må være et tall.\",\"invalidCssLength\":\"Den angitte verdien for feltet \\\"%1\\\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).\",\"invalidHtmlLength\":\"Den angitte verdien for feltet \\\"%1\\\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).\",\"invalidInlineStyle\":\"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \\\"navn : verdi\\\", separert med semikolon\",\"cssLengthTooltip\":\"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, utilgjenglig</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Alle rettigheter reservert.\",\"dlgTitle\":\"Om CKEditor\",\"help\":\"Se $1 for hjelp.\",\"moreInfo\":\"For lisensieringsinformasjon, vennligst besøk vårt nettsted:\",\"title\":\"Om CKEditor\",\"userGuide\":\"CKEditors brukerveiledning\"},\"basicstyles\":{\"bold\":\"Fet\",\"italic\":\"Kursiv\",\"strike\":\"Gjennomstreking\",\"subscript\":\"Senket skrift\",\"superscript\":\"Hevet skrift\",\"underline\":\"Understreking\"},\"blockquote\":{\"toolbar\":\"Blokksitat\"},\"clipboard\":{\"copy\":\"Kopier\",\"copyError\":\"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+C).\",\"cut\":\"Klipp ut\",\"cutError\":\"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+X).\",\"paste\":\"Lim inn\",\"pasteArea\":\"Innlimingsområde\",\"pasteMsg\":\"Vennligst lim inn i følgende boks med tastaturet (<strong>Ctrl/Cmd+V</strong>) og trykk <strong>OK</strong>.\",\"securityMsg\":\"Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.\",\"title\":\"Lim inn\"},\"contextmenu\":{\"options\":\"Alternativer for høyreklikkmeny\"},\"button\":{\"selectedLabel\":\"%1 (Valgt)\"},\"toolbar\":{\"toolbarCollapse\":\"Skjul verktøylinje\",\"toolbarExpand\":\"Vis verktøylinje\",\"toolbarGroups\":{\"document\":\"Dokument\",\"clipboard\":\"Utklippstavle/Angre\",\"editing\":\"Redigering\",\"forms\":\"Skjema\",\"basicstyles\":\"Basisstiler\",\"paragraph\":\"Avsnitt\",\"links\":\"Lenker\",\"insert\":\"Innsetting\",\"styles\":\"Stiler\",\"colors\":\"Farger\",\"tools\":\"Verktøy\"},\"toolbars\":\"Verktøylinjer for editor\"},\"elementspath\":{\"eleLabel\":\"Element-sti\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Avsnittsformat\",\"tag_address\":\"Adresse\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Overskrift 1\",\"tag_h2\":\"Overskrift 2\",\"tag_h3\":\"Overskrift 3\",\"tag_h4\":\"Overskrift 4\",\"tag_h5\":\"Overskrift 5\",\"tag_h6\":\"Overskrift 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatert\"},\"horizontalrule\":{\"toolbar\":\"Sett inn horisontal linje\"},\"image\":{\"alt\":\"Alternativ tekst\",\"border\":\"Ramme\",\"btnUpload\":\"Send det til serveren\",\"button2Img\":\"Vil du endre den valgte bildeknappen til et vanlig bilde?\",\"hSpace\":\"HMarg\",\"img2Button\":\"Vil du endre det valgte bildet til en bildeknapp?\",\"infoTab\":\"Bildeinformasjon\",\"linkTab\":\"Lenke\",\"lockRatio\":\"Lås forhold\",\"menu\":\"Bildeegenskaper\",\"resetSize\":\"Tilbakestill størrelse\",\"title\":\"Bildeegenskaper\",\"titleButton\":\"Egenskaper for bildeknapp\",\"upload\":\"Last opp\",\"urlMissing\":\"Bildets adresse mangler.\",\"vSpace\":\"VMarg\",\"validateBorder\":\"Ramme må være et heltall.\",\"validateHSpace\":\"HMarg må være et heltall.\",\"validateVSpace\":\"VMarg må være et heltall.\"},\"indent\":{\"indent\":\"Øk innrykk\",\"outdent\":\"Reduser innrykk\"},\"fakeobjects\":{\"anchor\":\"Anker\",\"flash\":\"Flash-animasjon\",\"hiddenfield\":\"Skjult felt\",\"iframe\":\"IFrame\",\"unknown\":\"Ukjent objekt\"},\"link\":{\"acccessKey\":\"Aksessknapp\",\"advanced\":\"Avansert\",\"advisoryContentType\":\"Type\",\"advisoryTitle\":\"Tittel\",\"anchor\":{\"toolbar\":\"Sett inn/Rediger anker\",\"menu\":\"Egenskaper for anker\",\"title\":\"Egenskaper for anker\",\"name\":\"Ankernavn\",\"errorName\":\"Vennligst skriv inn ankernavnet\",\"remove\":\"Fjern anker\"},\"anchorId\":\"Element etter ID\",\"anchorName\":\"Anker etter navn\",\"charset\":\"Lenket tegnsett\",\"cssClasses\":\"Stilarkklasser\",\"emailAddress\":\"E-postadresse\",\"emailBody\":\"Melding\",\"emailSubject\":\"Meldingsemne\",\"id\":\"Id\",\"info\":\"Lenkeinfo\",\"langCode\":\"Språkkode\",\"langDir\":\"Språkretning\",\"langDirLTR\":\"Venstre til høyre (VTH)\",\"langDirRTL\":\"Høyre til venstre (HTV)\",\"menu\":\"Rediger lenke\",\"name\":\"Navn\",\"noAnchors\":\"(Ingen anker i dokumentet)\",\"noEmail\":\"Vennligst skriv inn e-postadressen\",\"noUrl\":\"Vennligst skriv inn lenkens URL\",\"other\":\"<annen>\",\"popupDependent\":\"Avhenging (Netscape)\",\"popupFeatures\":\"Egenskaper for popup-vindu\",\"popupFullScreen\":\"Fullskjerm (IE)\",\"popupLeft\":\"Venstre posisjon\",\"popupLocationBar\":\"Adresselinje\",\"popupMenuBar\":\"Menylinje\",\"popupResizable\":\"Skalerbar\",\"popupScrollBars\":\"Scrollbar\",\"popupStatusBar\":\"Statuslinje\",\"popupToolbar\":\"Verktøylinje\",\"popupTop\":\"Topp-posisjon\",\"rel\":\"Relasjon (rel)\",\"selectAnchor\":\"Velg et anker\",\"styles\":\"Stil\",\"tabIndex\":\"Tabindeks\",\"target\":\"Mål\",\"targetFrame\":\"<ramme>\",\"targetFrameName\":\"Målramme\",\"targetPopup\":\"<popup-vindu>\",\"targetPopupName\":\"Navn på popup-vindu\",\"title\":\"Lenke\",\"toAnchor\":\"Lenke til anker i teksten\",\"toEmail\":\"E-post\",\"toUrl\":\"URL\",\"toolbar\":\"Sett inn/Rediger lenke\",\"type\":\"Lenketype\",\"unlink\":\"Fjern lenke\",\"upload\":\"Last opp\"},\"list\":{\"bulletedlist\":\"Legg til / fjern punktmerket liste\",\"numberedlist\":\"Legg til / fjern nummerert liste\"},\"magicline\":{\"title\":\"Sett inn nytt avsnitt her\"},\"maximize\":{\"maximize\":\"Maksimer\",\"minimize\":\"Minimer\"},\"pastetext\":{\"button\":\"Lim inn som ren tekst\",\"title\":\"Lim inn som ren tekst\"},\"pastefromword\":{\"confirmCleanup\":\"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?\",\"error\":\"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil\",\"title\":\"Lim inn fra Word\",\"toolbar\":\"Lim inn fra Word\"},\"removeformat\":{\"toolbar\":\"Fjern formatering\"},\"sourcearea\":{\"toolbar\":\"Kilde\"},\"specialchar\":{\"options\":\"Alternativer for spesialtegn\",\"title\":\"Velg spesialtegn\",\"toolbar\":\"Sett inn spesialtegn\"},\"scayt\":{\"btn_about\":\"Om SCAYT\",\"btn_dictionaries\":\"Ordbøker\",\"btn_disable\":\"Slå av SCAYT\",\"btn_enable\":\"Slå på SCAYT\",\"btn_langs\":\"Språk\",\"btn_options\":\"Valg\",\"text_title\":\"Stavekontroll mens du skriver\"},\"stylescombo\":{\"label\":\"Stil\",\"panelTitle\":\"Stilformater\",\"panelTitle1\":\"Blokkstiler\",\"panelTitle2\":\"Inlinestiler\",\"panelTitle3\":\"Objektstiler\"},\"table\":{\"border\":\"Rammestørrelse\",\"caption\":\"Tittel\",\"cell\":{\"menu\":\"Celle\",\"insertBefore\":\"Sett inn celle før\",\"insertAfter\":\"Sett inn celle etter\",\"deleteCell\":\"Slett celler\",\"merge\":\"Slå sammen celler\",\"mergeRight\":\"Slå sammen høyre\",\"mergeDown\":\"Slå sammen ned\",\"splitHorizontal\":\"Del celle horisontalt\",\"splitVertical\":\"Del celle vertikalt\",\"title\":\"Celleegenskaper\",\"cellType\":\"Celletype\",\"rowSpan\":\"Radspenn\",\"colSpan\":\"Kolonnespenn\",\"wordWrap\":\"Tekstbrytning\",\"hAlign\":\"Horisontal justering\",\"vAlign\":\"Vertikal justering\",\"alignBaseline\":\"Grunnlinje\",\"bgColor\":\"Bakgrunnsfarge\",\"borderColor\":\"Rammefarge\",\"data\":\"Data\",\"header\":\"Overskrift\",\"yes\":\"Ja\",\"no\":\"Nei\",\"invalidWidth\":\"Cellebredde må være et tall.\",\"invalidHeight\":\"Cellehøyde må være et tall.\",\"invalidRowSpan\":\"Radspenn må være et heltall.\",\"invalidColSpan\":\"Kolonnespenn må være et heltall.\",\"chooseColor\":\"Velg\"},\"cellPad\":\"Cellepolstring\",\"cellSpace\":\"Cellemarg\",\"column\":{\"menu\":\"Kolonne\",\"insertBefore\":\"Sett inn kolonne før\",\"insertAfter\":\"Sett inn kolonne etter\",\"deleteColumn\":\"Slett kolonner\"},\"columns\":\"Kolonner\",\"deleteTable\":\"Slett tabell\",\"headers\":\"Overskrifter\",\"headersBoth\":\"Begge\",\"headersColumn\":\"Første kolonne\",\"headersNone\":\"Ingen\",\"headersRow\":\"Første rad\",\"invalidBorder\":\"Rammestørrelse må være et tall.\",\"invalidCellPadding\":\"Cellepolstring må være et positivt tall.\",\"invalidCellSpacing\":\"Cellemarg må være et positivt tall.\",\"invalidCols\":\"Antall kolonner må være et tall større enn 0.\",\"invalidHeight\":\"Tabellhøyde må være et tall.\",\"invalidRows\":\"Antall rader må være et tall større enn 0.\",\"invalidWidth\":\"Tabellbredde må være et tall.\",\"menu\":\"Egenskaper for tabell\",\"row\":{\"menu\":\"Rader\",\"insertBefore\":\"Sett inn rad før\",\"insertAfter\":\"Sett inn rad etter\",\"deleteRow\":\"Slett rader\"},\"rows\":\"Rader\",\"summary\":\"Sammendrag\",\"title\":\"Egenskaper for tabell\",\"toolbar\":\"Tabell\",\"widthPc\":\"prosent\",\"widthPx\":\"piksler\",\"widthUnit\":\"Bredde-enhet\"},\"undo\":{\"redo\":\"Gjør om\",\"undo\":\"Angre\"},\"wsc\":{\"btnIgnore\":\"Ignorer\",\"btnIgnoreAll\":\"Ignorer alle\",\"btnReplace\":\"Erstatt\",\"btnReplaceAll\":\"Erstatt alle\",\"btnUndo\":\"Angre\",\"changeTo\":\"Endre til\",\"errorLoading\":\"Feil under lasting av applikasjonstjenestetjener: %s.\",\"ieSpellDownload\":\"Stavekontroll er ikke installert. Vil du laste den ned nå?\",\"manyChanges\":\"Stavekontroll fullført: %1 ord endret\",\"noChanges\":\"Stavekontroll fullført: ingen ord endret\",\"noMispell\":\"Stavekontroll fullført: ingen feilstavinger funnet\",\"noSuggestions\":\"- Ingen forslag -\",\"notAvailable\":\"Beklager, tjenesten er utilgjenglig nå.\",\"notInDic\":\"Ikke i ordboken\",\"oneChange\":\"Stavekontroll fullført: Ett ord endret\",\"progress\":\"Stavekontroll pågår...\",\"title\":\"Stavekontroll\",\"toolbar\":\"Stavekontroll\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/nl.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['nl']={\"editor\":\"Tekstverwerker\",\"editorPanel\":\"Tekstverwerker beheerpaneel\",\"common\":{\"editorHelp\":\"Druk ALT 0 voor hulp\",\"browseServer\":\"Bladeren op server\",\"url\":\"URL\",\"protocol\":\"Protocol\",\"upload\":\"Upload\",\"uploadSubmit\":\"Naar server verzenden\",\"image\":\"Afbeelding\",\"flash\":\"Flash\",\"form\":\"Formulier\",\"checkbox\":\"Selectievinkje\",\"radio\":\"Keuzerondje\",\"textField\":\"Tekstveld\",\"textarea\":\"Tekstvak\",\"hiddenField\":\"Verborgen veld\",\"button\":\"Knop\",\"select\":\"Selectieveld\",\"imageButton\":\"Afbeeldingsknop\",\"notSet\":\"<niet ingevuld>\",\"id\":\"Id\",\"name\":\"Naam\",\"langDir\":\"Schrijfrichting\",\"langDirLtr\":\"Links naar rechts (LTR)\",\"langDirRtl\":\"Rechts naar links (RTL)\",\"langCode\":\"Taalcode\",\"longDescr\":\"Lange URL-omschrijving\",\"cssClass\":\"Stylesheet-klassen\",\"advisoryTitle\":\"Adviserende titel\",\"cssStyle\":\"Stijl\",\"ok\":\"OK\",\"cancel\":\"Annuleren\",\"close\":\"Sluiten\",\"preview\":\"Voorbeeld\",\"resize\":\"Sleep om te herschalen\",\"generalTab\":\"Algemeen\",\"advancedTab\":\"Geavanceerd\",\"validateNumberFailed\":\"Deze waarde is geen geldig getal.\",\"confirmNewPage\":\"Alle aangebrachte wijzigingen gaan verloren. Weet u zeker dat u een nieuwe pagina wilt openen?\",\"confirmCancel\":\"Enkele opties zijn gewijzigd. Weet u zeker dat u dit dialoogvenster wilt sluiten?\",\"options\":\"Opties\",\"target\":\"Doelvenster\",\"targetNew\":\"Nieuw venster (_blank)\",\"targetTop\":\"Hele venster (_top)\",\"targetSelf\":\"Zelfde venster (_self)\",\"targetParent\":\"Origineel venster (_parent)\",\"langDirLTR\":\"Links naar rechts (LTR)\",\"langDirRTL\":\"Rechts naar links (RTL)\",\"styles\":\"Stijl\",\"cssClasses\":\"Stylesheet-klassen\",\"width\":\"Breedte\",\"height\":\"Hoogte\",\"align\":\"Uitlijning\",\"alignLeft\":\"Links\",\"alignRight\":\"Rechts\",\"alignCenter\":\"Centreren\",\"alignJustify\":\"Uitvullen\",\"alignTop\":\"Boven\",\"alignMiddle\":\"Midden\",\"alignBottom\":\"Onder\",\"alignNone\":\"Geen\",\"invalidValue\":\"Ongeldige waarde.\",\"invalidHeight\":\"De hoogte moet een getal zijn.\",\"invalidWidth\":\"De breedte moet een getal zijn.\",\"invalidCssLength\":\"Waarde in veld \\\"%1\\\" moet een positief nummer zijn, met of zonder een geldige CSS meeteenheid (px, %, in, cm, mm, em, ex, pt of pc).\",\"invalidHtmlLength\":\"Waarde in veld \\\"%1\\\" moet een positief nummer zijn, met of zonder een geldige HTML meeteenheid (px of %).\",\"invalidInlineStyle\":\"Waarde voor de online stijl moet bestaan uit een of meerdere tupels met het formaat \\\"naam : waarde\\\", gescheiden door puntkomma's.\",\"cssLengthTooltip\":\"Geef een nummer in voor een waarde in pixels of geef een nummer in met een geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, niet beschikbaar</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Alle rechten voorbehouden.\",\"dlgTitle\":\"Over CKEditor\",\"help\":\"Bekijk de $1 voor hulp.\",\"moreInfo\":\"Bezoek onze website voor licentieinformatie:\",\"title\":\"Over CKEditor\",\"userGuide\":\"CKEditor gebruiksaanwijzing\"},\"basicstyles\":{\"bold\":\"Vet\",\"italic\":\"Cursief\",\"strike\":\"Doorhalen\",\"subscript\":\"Subscript\",\"superscript\":\"Superscript\",\"underline\":\"Onderstrepen\"},\"blockquote\":{\"toolbar\":\"Citaatblok\"},\"clipboard\":{\"copy\":\"Kopiëren\",\"copyError\":\"De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl/Cmd+C van het toetsenbord.\",\"cut\":\"Knippen\",\"cutError\":\"De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl/Cmd+X van het toetsenbord.\",\"paste\":\"Plakken\",\"pasteArea\":\"Plakgebied\",\"pasteMsg\":\"Plak de tekst in het volgende vak gebruikmakend van uw toetsenbord (<strong>Ctrl/Cmd+V</strong>) en klik op OK.\",\"securityMsg\":\"Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.\",\"title\":\"Plakken\"},\"contextmenu\":{\"options\":\"Contextmenu opties\"},\"button\":{\"selectedLabel\":\"%1 (Geselecteerd)\"},\"toolbar\":{\"toolbarCollapse\":\"Werkbalk inklappen\",\"toolbarExpand\":\"Werkbalk uitklappen\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Klembord/Ongedaan maken\",\"editing\":\"Bewerken\",\"forms\":\"Formulieren\",\"basicstyles\":\"Basisstijlen\",\"paragraph\":\"Paragraaf\",\"links\":\"Links\",\"insert\":\"Invoegen\",\"styles\":\"Stijlen\",\"colors\":\"Kleuren\",\"tools\":\"Toepassingen\"},\"toolbars\":\"Werkbalken\"},\"elementspath\":{\"eleLabel\":\"Elementenpad\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Opmaak\",\"panelTitle\":\"Opmaak\",\"tag_address\":\"Adres\",\"tag_div\":\"Normaal (DIV)\",\"tag_h1\":\"Kop 1\",\"tag_h2\":\"Kop 2\",\"tag_h3\":\"Kop 3\",\"tag_h4\":\"Kop 4\",\"tag_h5\":\"Kop 5\",\"tag_h6\":\"Kop 6\",\"tag_p\":\"Normaal\",\"tag_pre\":\"Met opmaak\"},\"horizontalrule\":{\"toolbar\":\"Horizontale lijn invoegen\"},\"image\":{\"alt\":\"Alternatieve tekst\",\"border\":\"Rand\",\"btnUpload\":\"Naar server verzenden\",\"button2Img\":\"Wilt u de geselecteerde afbeeldingsknop vervangen door een eenvoudige afbeelding?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Wilt u de geselecteerde afbeelding vervangen door een afbeeldingsknop?\",\"infoTab\":\"Informatie afbeelding\",\"linkTab\":\"Link\",\"lockRatio\":\"Afmetingen vergrendelen\",\"menu\":\"Eigenschappen afbeelding\",\"resetSize\":\"Afmetingen resetten\",\"title\":\"Eigenschappen afbeelding\",\"titleButton\":\"Eigenschappen afbeeldingsknop\",\"upload\":\"Upload\",\"urlMissing\":\"De URL naar de afbeelding ontbreekt.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"Rand moet een heel nummer zijn.\",\"validateHSpace\":\"HSpace moet een heel nummer zijn.\",\"validateVSpace\":\"VSpace moet een heel nummer zijn.\"},\"indent\":{\"indent\":\"Inspringing vergroten\",\"outdent\":\"Inspringing verkleinen\"},\"fakeobjects\":{\"anchor\":\"Interne link\",\"flash\":\"Flash animatie\",\"hiddenfield\":\"Verborgen veld\",\"iframe\":\"IFrame\",\"unknown\":\"Onbekend object\"},\"link\":{\"acccessKey\":\"Toegangstoets\",\"advanced\":\"Geavanceerd\",\"advisoryContentType\":\"Aanbevolen content-type\",\"advisoryTitle\":\"Adviserende titel\",\"anchor\":{\"toolbar\":\"Interne link\",\"menu\":\"Eigenschappen interne link\",\"title\":\"Eigenschappen interne link\",\"name\":\"Naam interne link\",\"errorName\":\"Geef de naam van de interne link op\",\"remove\":\"Interne link verwijderen\"},\"anchorId\":\"Op kenmerk interne link\",\"anchorName\":\"Op naam interne link\",\"charset\":\"Karakterset van gelinkte bron\",\"cssClasses\":\"Stylesheet-klassen\",\"emailAddress\":\"E-mailadres\",\"emailBody\":\"Inhoud bericht\",\"emailSubject\":\"Onderwerp bericht\",\"id\":\"Id\",\"info\":\"Linkomschrijving\",\"langCode\":\"Taalcode\",\"langDir\":\"Schrijfrichting\",\"langDirLTR\":\"Links naar rechts (LTR)\",\"langDirRTL\":\"Rechts naar links (RTL)\",\"menu\":\"Link wijzigen\",\"name\":\"Naam\",\"noAnchors\":\"(Geen interne links in document gevonden)\",\"noEmail\":\"Geef een e-mailadres\",\"noUrl\":\"Geef de link van de URL\",\"other\":\"<ander>\",\"popupDependent\":\"Afhankelijk (Netscape)\",\"popupFeatures\":\"Instellingen popupvenster\",\"popupFullScreen\":\"Volledig scherm (IE)\",\"popupLeft\":\"Positie links\",\"popupLocationBar\":\"Locatiemenu\",\"popupMenuBar\":\"Menubalk\",\"popupResizable\":\"Herschaalbaar\",\"popupScrollBars\":\"Schuifbalken\",\"popupStatusBar\":\"Statusbalk\",\"popupToolbar\":\"Werkbalk\",\"popupTop\":\"Positie boven\",\"rel\":\"Relatie\",\"selectAnchor\":\"Kies een interne link\",\"styles\":\"Stijl\",\"tabIndex\":\"Tabvolgorde\",\"target\":\"Doelvenster\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Naam doelframe\",\"targetPopup\":\"<popupvenster>\",\"targetPopupName\":\"Naam popupvenster\",\"title\":\"Link\",\"toAnchor\":\"Interne link in pagina\",\"toEmail\":\"E-mail\",\"toUrl\":\"URL\",\"toolbar\":\"Link invoegen/wijzigen\",\"type\":\"Linktype\",\"unlink\":\"Link verwijderen\",\"upload\":\"Upload\"},\"list\":{\"bulletedlist\":\"Opsomming invoegen\",\"numberedlist\":\"Genummerde lijst invoegen\"},\"magicline\":{\"title\":\"Hier paragraaf invoeren\"},\"maximize\":{\"maximize\":\"Maximaliseren\",\"minimize\":\"Minimaliseren\"},\"pastetext\":{\"button\":\"Plakken als platte tekst\",\"title\":\"Plakken als platte tekst\"},\"pastefromword\":{\"confirmCleanup\":\"De tekst die u wilt plakken lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?\",\"error\":\"Het was niet mogelijk om de geplakte tekst op te schonen door een interne fout\",\"title\":\"Plakken vanuit Word\",\"toolbar\":\"Plakken vanuit Word\"},\"removeformat\":{\"toolbar\":\"Opmaak verwijderen\"},\"sourcearea\":{\"toolbar\":\"Broncode\"},\"specialchar\":{\"options\":\"Speciale tekens opties\",\"title\":\"Selecteer speciaal teken\",\"toolbar\":\"Speciaal teken invoegen\"},\"scayt\":{\"btn_about\":\"Over SCAYT\",\"btn_dictionaries\":\"Woordenboeken\",\"btn_disable\":\"SCAYT uitschakelen\",\"btn_enable\":\"SCAYT inschakelen\",\"btn_langs\":\"Talen\",\"btn_options\":\"Opties\",\"text_title\":\"Controleer de spelling tijdens het typen\"},\"stylescombo\":{\"label\":\"Stijl\",\"panelTitle\":\"Opmaakstijlen\",\"panelTitle1\":\"Blok stijlen\",\"panelTitle2\":\"Inline stijlen\",\"panelTitle3\":\"Object stijlen\"},\"table\":{\"border\":\"Randdikte\",\"caption\":\"Onderschrift\",\"cell\":{\"menu\":\"Cel\",\"insertBefore\":\"Voeg cel in voor\",\"insertAfter\":\"Voeg cel in na\",\"deleteCell\":\"Cellen verwijderen\",\"merge\":\"Cellen samenvoegen\",\"mergeRight\":\"Voeg samen naar rechts\",\"mergeDown\":\"Voeg samen naar beneden\",\"splitHorizontal\":\"Splits cel horizontaal\",\"splitVertical\":\"Splits cel vertikaal\",\"title\":\"Celeigenschappen\",\"cellType\":\"Celtype\",\"rowSpan\":\"Rijen samenvoegen\",\"colSpan\":\"Kolommen samenvoegen\",\"wordWrap\":\"Automatische terugloop\",\"hAlign\":\"Horizontale uitlijning\",\"vAlign\":\"Verticale uitlijning\",\"alignBaseline\":\"Tekstregel\",\"bgColor\":\"Achtergrondkleur\",\"borderColor\":\"Randkleur\",\"data\":\"Gegevens\",\"header\":\"Kop\",\"yes\":\"Ja\",\"no\":\"Nee\",\"invalidWidth\":\"De celbreedte moet een getal zijn.\",\"invalidHeight\":\"De celhoogte moet een getal zijn.\",\"invalidRowSpan\":\"Rijen samenvoegen moet een heel getal zijn.\",\"invalidColSpan\":\"Kolommen samenvoegen moet een heel getal zijn.\",\"chooseColor\":\"Kies\"},\"cellPad\":\"Celopvulling\",\"cellSpace\":\"Celafstand\",\"column\":{\"menu\":\"Kolom\",\"insertBefore\":\"Voeg kolom in voor\",\"insertAfter\":\"Voeg kolom in na\",\"deleteColumn\":\"Kolommen verwijderen\"},\"columns\":\"Kolommen\",\"deleteTable\":\"Tabel verwijderen\",\"headers\":\"Koppen\",\"headersBoth\":\"Beide\",\"headersColumn\":\"Eerste kolom\",\"headersNone\":\"Geen\",\"headersRow\":\"Eerste rij\",\"invalidBorder\":\"De randdikte moet een getal zijn.\",\"invalidCellPadding\":\"Celopvulling moet een getal zijn.\",\"invalidCellSpacing\":\"Celafstand moet een getal zijn.\",\"invalidCols\":\"Het aantal kolommen moet een getal zijn groter dan 0.\",\"invalidHeight\":\"De tabelhoogte moet een getal zijn.\",\"invalidRows\":\"Het aantal rijen moet een getal zijn groter dan 0.\",\"invalidWidth\":\"De tabelbreedte moet een getal zijn.\",\"menu\":\"Tabeleigenschappen\",\"row\":{\"menu\":\"Rij\",\"insertBefore\":\"Voeg rij in voor\",\"insertAfter\":\"Voeg rij in na\",\"deleteRow\":\"Rijen verwijderen\"},\"rows\":\"Rijen\",\"summary\":\"Samenvatting\",\"title\":\"Tabeleigenschappen\",\"toolbar\":\"Tabel\",\"widthPc\":\"procent\",\"widthPx\":\"pixels\",\"widthUnit\":\"eenheid breedte\"},\"undo\":{\"redo\":\"Opnieuw uitvoeren\",\"undo\":\"Ongedaan maken\"},\"wsc\":{\"btnIgnore\":\"Negeren\",\"btnIgnoreAll\":\"Alles negeren\",\"btnReplace\":\"Vervangen\",\"btnReplaceAll\":\"Alles vervangen\",\"btnUndo\":\"Ongedaan maken\",\"changeTo\":\"Wijzig in\",\"errorLoading\":\"Er is een fout opgetreden bij het laden van de dienst: %s.\",\"ieSpellDownload\":\"De spellingscontrole is niet geïnstalleerd. Wilt u deze nu downloaden?\",\"manyChanges\":\"Klaar met spellingscontrole: %1 woorden aangepast\",\"noChanges\":\"Klaar met spellingscontrole: geen woorden aangepast\",\"noMispell\":\"Klaar met spellingscontrole: geen fouten gevonden\",\"noSuggestions\":\"- Geen suggesties -\",\"notAvailable\":\"Excuses, deze dienst is momenteel niet beschikbaar.\",\"notInDic\":\"Niet in het woordenboek\",\"oneChange\":\"Klaar met spellingscontrole: één woord aangepast\",\"progress\":\"Bezig met spellingscontrole...\",\"title\":\"Spellingscontrole\",\"toolbar\":\"Spellingscontrole\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/no.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['no']={\"editor\":\"Rikteksteditor\",\"editorPanel\":\"Panel for rikteksteditor\",\"common\":{\"editorHelp\":\"Trykk ALT 0 for hjelp\",\"browseServer\":\"Bla igjennom server\",\"url\":\"URL\",\"protocol\":\"Protokoll\",\"upload\":\"Last opp\",\"uploadSubmit\":\"Send det til serveren\",\"image\":\"Bilde\",\"flash\":\"Flash\",\"form\":\"Skjema\",\"checkbox\":\"Avmerkingsboks\",\"radio\":\"Alternativknapp\",\"textField\":\"Tekstboks\",\"textarea\":\"Tekstområde\",\"hiddenField\":\"Skjult felt\",\"button\":\"Knapp\",\"select\":\"Rullegardinliste\",\"imageButton\":\"Bildeknapp\",\"notSet\":\"<ikke satt>\",\"id\":\"Id\",\"name\":\"Navn\",\"langDir\":\"Språkretning\",\"langDirLtr\":\"Venstre til høyre (VTH)\",\"langDirRtl\":\"Høyre til venstre (HTV)\",\"langCode\":\"Språkkode\",\"longDescr\":\"Utvidet beskrivelse\",\"cssClass\":\"Stilarkklasser\",\"advisoryTitle\":\"Tittel\",\"cssStyle\":\"Stil\",\"ok\":\"OK\",\"cancel\":\"Avbryt\",\"close\":\"Lukk\",\"preview\":\"Forhåndsvis\",\"resize\":\"Dra for å skalere\",\"generalTab\":\"Generelt\",\"advancedTab\":\"Avansert\",\"validateNumberFailed\":\"Denne verdien er ikke et tall.\",\"confirmNewPage\":\"Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?\",\"confirmCancel\":\"Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?\",\"options\":\"Valg\",\"target\":\"Mål\",\"targetNew\":\"Nytt vindu (_blank)\",\"targetTop\":\"Hele vindu (_top)\",\"targetSelf\":\"Samme vindu (_self)\",\"targetParent\":\"Foreldrevindu (_parent)\",\"langDirLTR\":\"Venstre til høyre (VTH)\",\"langDirRTL\":\"Høyre til venstre (HTV)\",\"styles\":\"Stil\",\"cssClasses\":\"Stilarkklasser\",\"width\":\"Bredde\",\"height\":\"Høyde\",\"align\":\"Juster\",\"alignLeft\":\"Venstre\",\"alignRight\":\"Høyre\",\"alignCenter\":\"Midtjuster\",\"alignJustify\":\"Blokkjuster\",\"alignTop\":\"Topp\",\"alignMiddle\":\"Midten\",\"alignBottom\":\"Bunn\",\"alignNone\":\"Ingen\",\"invalidValue\":\"Ugyldig verdi.\",\"invalidHeight\":\"Høyde må være et tall.\",\"invalidWidth\":\"Bredde må være et tall.\",\"invalidCssLength\":\"Den angitte verdien for feltet \\\"%1\\\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).\",\"invalidHtmlLength\":\"Den angitte verdien for feltet \\\"%1\\\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).\",\"invalidInlineStyle\":\"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \\\"navn : verdi\\\", separert med semikolon\",\"cssLengthTooltip\":\"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, utilgjenglig</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Alle rettigheter reservert.\",\"dlgTitle\":\"Om CKEditor\",\"help\":\"Se $1 for hjelp.\",\"moreInfo\":\"For lisensieringsinformasjon, vennligst besøk vårt nettsted:\",\"title\":\"Om CKEditor\",\"userGuide\":\"CKEditors brukerveiledning\"},\"basicstyles\":{\"bold\":\"Fet\",\"italic\":\"Kursiv\",\"strike\":\"Gjennomstreking\",\"subscript\":\"Senket skrift\",\"superscript\":\"Hevet skrift\",\"underline\":\"Understreking\"},\"blockquote\":{\"toolbar\":\"Blokksitat\"},\"clipboard\":{\"copy\":\"Kopier\",\"copyError\":\"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snarveien (Ctrl/Cmd+C).\",\"cut\":\"Klipp ut\",\"cutError\":\"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk snarveien (Ctrl/Cmd+X).\",\"paste\":\"Lim inn\",\"pasteArea\":\"Innlimingsområde\",\"pasteMsg\":\"Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.\",\"securityMsg\":\"Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.\",\"title\":\"Lim inn\"},\"contextmenu\":{\"options\":\"Alternativer for høyreklikkmeny\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Skjul verktøylinje\",\"toolbarExpand\":\"Vis verktøylinje\",\"toolbarGroups\":{\"document\":\"Dokument\",\"clipboard\":\"Utklippstavle/Angre\",\"editing\":\"Redigering\",\"forms\":\"Skjema\",\"basicstyles\":\"Basisstiler\",\"paragraph\":\"Avsnitt\",\"links\":\"Lenker\",\"insert\":\"Innsetting\",\"styles\":\"Stiler\",\"colors\":\"Farger\",\"tools\":\"Verktøy\"},\"toolbars\":\"Verktøylinjer for editor\"},\"elementspath\":{\"eleLabel\":\"Element-sti\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Avsnittsformat\",\"tag_address\":\"Adresse\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Overskrift 1\",\"tag_h2\":\"Overskrift 2\",\"tag_h3\":\"Overskrift 3\",\"tag_h4\":\"Overskrift 4\",\"tag_h5\":\"Overskrift 5\",\"tag_h6\":\"Overskrift 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatert\"},\"horizontalrule\":{\"toolbar\":\"Sett inn horisontal linje\"},\"image\":{\"alt\":\"Alternativ tekst\",\"border\":\"Ramme\",\"btnUpload\":\"Send det til serveren\",\"button2Img\":\"Vil du endre den valgte bildeknappen til et vanlig bilde?\",\"hSpace\":\"HMarg\",\"img2Button\":\"Vil du endre det valgte bildet til en bildeknapp?\",\"infoTab\":\"Bildeinformasjon\",\"linkTab\":\"Lenke\",\"lockRatio\":\"Lås forhold\",\"menu\":\"Bildeegenskaper\",\"resetSize\":\"Tilbakestill størrelse\",\"title\":\"Bildeegenskaper\",\"titleButton\":\"Egenskaper for bildeknapp\",\"upload\":\"Last opp\",\"urlMissing\":\"Bildets adresse mangler.\",\"vSpace\":\"VMarg\",\"validateBorder\":\"Ramme må være et heltall.\",\"validateHSpace\":\"HMarg må være et heltall.\",\"validateVSpace\":\"VMarg må være et heltall.\"},\"indent\":{\"indent\":\"Øk innrykk\",\"outdent\":\"Reduser innrykk\"},\"fakeobjects\":{\"anchor\":\"Anker\",\"flash\":\"Flash-animasjon\",\"hiddenfield\":\"Skjult felt\",\"iframe\":\"IFrame\",\"unknown\":\"Ukjent objekt\"},\"link\":{\"acccessKey\":\"Aksessknapp\",\"advanced\":\"Avansert\",\"advisoryContentType\":\"Type\",\"advisoryTitle\":\"Tittel\",\"anchor\":{\"toolbar\":\"Sett inn/Rediger anker\",\"menu\":\"Egenskaper for anker\",\"title\":\"Egenskaper for anker\",\"name\":\"Ankernavn\",\"errorName\":\"Vennligst skriv inn ankernavnet\",\"remove\":\"Fjern anker\"},\"anchorId\":\"Element etter ID\",\"anchorName\":\"Anker etter navn\",\"charset\":\"Lenket tegnsett\",\"cssClasses\":\"Stilarkklasser\",\"emailAddress\":\"E-postadresse\",\"emailBody\":\"Melding\",\"emailSubject\":\"Meldingsemne\",\"id\":\"Id\",\"info\":\"Lenkeinfo\",\"langCode\":\"Språkkode\",\"langDir\":\"Språkretning\",\"langDirLTR\":\"Venstre til høyre (VTH)\",\"langDirRTL\":\"Høyre til venstre (HTV)\",\"menu\":\"Rediger lenke\",\"name\":\"Navn\",\"noAnchors\":\"(Ingen anker i dokumentet)\",\"noEmail\":\"Vennligst skriv inn e-postadressen\",\"noUrl\":\"Vennligst skriv inn lenkens URL\",\"other\":\"<annen>\",\"popupDependent\":\"Avhenging (Netscape)\",\"popupFeatures\":\"Egenskaper for popup-vindu\",\"popupFullScreen\":\"Fullskjerm (IE)\",\"popupLeft\":\"Venstre posisjon\",\"popupLocationBar\":\"Adresselinje\",\"popupMenuBar\":\"Menylinje\",\"popupResizable\":\"Skalerbar\",\"popupScrollBars\":\"Scrollbar\",\"popupStatusBar\":\"Statuslinje\",\"popupToolbar\":\"Verktøylinje\",\"popupTop\":\"Topp-posisjon\",\"rel\":\"Relasjon (rel)\",\"selectAnchor\":\"Velg et anker\",\"styles\":\"Stil\",\"tabIndex\":\"Tabindeks\",\"target\":\"Mål\",\"targetFrame\":\"<ramme>\",\"targetFrameName\":\"Målramme\",\"targetPopup\":\"<popup-vindu>\",\"targetPopupName\":\"Navn på popup-vindu\",\"title\":\"Lenke\",\"toAnchor\":\"Lenke til anker i teksten\",\"toEmail\":\"E-post\",\"toUrl\":\"URL\",\"toolbar\":\"Sett inn/Rediger lenke\",\"type\":\"Lenketype\",\"unlink\":\"Fjern lenke\",\"upload\":\"Last opp\"},\"list\":{\"bulletedlist\":\"Legg til/Fjern punktmerket liste\",\"numberedlist\":\"Legg til/Fjern nummerert liste\"},\"magicline\":{\"title\":\"Sett inn nytt avsnitt her\"},\"maximize\":{\"maximize\":\"Maksimer\",\"minimize\":\"Minimer\"},\"pastetext\":{\"button\":\"Lim inn som ren tekst\",\"title\":\"Lim inn som ren tekst\"},\"pastefromword\":{\"confirmCleanup\":\"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?\",\"error\":\"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil\",\"title\":\"Lim inn fra Word\",\"toolbar\":\"Lim inn fra Word\"},\"removeformat\":{\"toolbar\":\"Fjern formatering\"},\"sourcearea\":{\"toolbar\":\"Kilde\"},\"specialchar\":{\"options\":\"Alternativer for spesialtegn\",\"title\":\"Velg spesialtegn\",\"toolbar\":\"Sett inn spesialtegn\"},\"scayt\":{\"btn_about\":\"Om SCAYT\",\"btn_dictionaries\":\"Ordbøker\",\"btn_disable\":\"Slå av SCAYT\",\"btn_enable\":\"Slå på SCAYT\",\"btn_langs\":\"Språk\",\"btn_options\":\"Valg\",\"text_title\":\"Stavekontroll mens du skriver\"},\"stylescombo\":{\"label\":\"Stil\",\"panelTitle\":\"Stilformater\",\"panelTitle1\":\"Blokkstiler\",\"panelTitle2\":\"Inlinestiler\",\"panelTitle3\":\"Objektstiler\"},\"table\":{\"border\":\"Rammestørrelse\",\"caption\":\"Tittel\",\"cell\":{\"menu\":\"Celle\",\"insertBefore\":\"Sett inn celle før\",\"insertAfter\":\"Sett inn celle etter\",\"deleteCell\":\"Slett celler\",\"merge\":\"Slå sammen celler\",\"mergeRight\":\"Slå sammen høyre\",\"mergeDown\":\"Slå sammen ned\",\"splitHorizontal\":\"Del celle horisontalt\",\"splitVertical\":\"Del celle vertikalt\",\"title\":\"Celleegenskaper\",\"cellType\":\"Celletype\",\"rowSpan\":\"Radspenn\",\"colSpan\":\"Kolonnespenn\",\"wordWrap\":\"Tekstbrytning\",\"hAlign\":\"Horisontal justering\",\"vAlign\":\"Vertikal justering\",\"alignBaseline\":\"Grunnlinje\",\"bgColor\":\"Bakgrunnsfarge\",\"borderColor\":\"Rammefarge\",\"data\":\"Data\",\"header\":\"Overskrift\",\"yes\":\"Ja\",\"no\":\"Nei\",\"invalidWidth\":\"Cellebredde må være et tall.\",\"invalidHeight\":\"Cellehøyde må være et tall.\",\"invalidRowSpan\":\"Radspenn må være et heltall.\",\"invalidColSpan\":\"Kolonnespenn må være et heltall.\",\"chooseColor\":\"Velg\"},\"cellPad\":\"Cellepolstring\",\"cellSpace\":\"Cellemarg\",\"column\":{\"menu\":\"Kolonne\",\"insertBefore\":\"Sett inn kolonne før\",\"insertAfter\":\"Sett inn kolonne etter\",\"deleteColumn\":\"Slett kolonner\"},\"columns\":\"Kolonner\",\"deleteTable\":\"Slett tabell\",\"headers\":\"Overskrifter\",\"headersBoth\":\"Begge\",\"headersColumn\":\"Første kolonne\",\"headersNone\":\"Ingen\",\"headersRow\":\"Første rad\",\"invalidBorder\":\"Rammestørrelse må være et tall.\",\"invalidCellPadding\":\"Cellepolstring må være et positivt tall.\",\"invalidCellSpacing\":\"Cellemarg må være et positivt tall.\",\"invalidCols\":\"Antall kolonner må være et tall større enn 0.\",\"invalidHeight\":\"Tabellhøyde må være et tall.\",\"invalidRows\":\"Antall rader må være et tall større enn 0.\",\"invalidWidth\":\"Tabellbredde må være et tall.\",\"menu\":\"Egenskaper for tabell\",\"row\":{\"menu\":\"Rader\",\"insertBefore\":\"Sett inn rad før\",\"insertAfter\":\"Sett inn rad etter\",\"deleteRow\":\"Slett rader\"},\"rows\":\"Rader\",\"summary\":\"Sammendrag\",\"title\":\"Egenskaper for tabell\",\"toolbar\":\"Tabell\",\"widthPc\":\"prosent\",\"widthPx\":\"piksler\",\"widthUnit\":\"Bredde-enhet\"},\"undo\":{\"redo\":\"Gjør om\",\"undo\":\"Angre\"},\"wsc\":{\"btnIgnore\":\"Ignorer\",\"btnIgnoreAll\":\"Ignorer alle\",\"btnReplace\":\"Erstatt\",\"btnReplaceAll\":\"Erstatt alle\",\"btnUndo\":\"Angre\",\"changeTo\":\"Endre til\",\"errorLoading\":\"Feil under lasting av applikasjonstjenestetjener: %s.\",\"ieSpellDownload\":\"Stavekontroll er ikke installert. Vil du laste den ned nå?\",\"manyChanges\":\"Stavekontroll fullført: %1 ord endret\",\"noChanges\":\"Stavekontroll fullført: ingen ord endret\",\"noMispell\":\"Stavekontroll fullført: ingen feilstavinger funnet\",\"noSuggestions\":\"- Ingen forslag -\",\"notAvailable\":\"Beklager, tjenesten er utilgjenglig nå.\",\"notInDic\":\"Ikke i ordboken\",\"oneChange\":\"Stavekontroll fullført: Ett ord endret\",\"progress\":\"Stavekontroll pågår...\",\"title\":\"Stavekontroll\",\"toolbar\":\"Stavekontroll\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/pl.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['pl']={\"editor\":\"Edytor tekstu sformatowanego\",\"editorPanel\":\"Panel edytora tekstu sformatowanego\",\"common\":{\"editorHelp\":\"W celu uzyskania pomocy naciśnij ALT 0\",\"browseServer\":\"Przeglądaj\",\"url\":\"Adres URL\",\"protocol\":\"Protokół\",\"upload\":\"Wyślij\",\"uploadSubmit\":\"Wyślij\",\"image\":\"Obrazek\",\"flash\":\"Flash\",\"form\":\"Formularz\",\"checkbox\":\"Pole wyboru (checkbox)\",\"radio\":\"Przycisk opcji (radio)\",\"textField\":\"Pole tekstowe\",\"textarea\":\"Obszar tekstowy\",\"hiddenField\":\"Pole ukryte\",\"button\":\"Przycisk\",\"select\":\"Lista wyboru\",\"imageButton\":\"Przycisk graficzny\",\"notSet\":\"<nie ustawiono>\",\"id\":\"Id\",\"name\":\"Nazwa\",\"langDir\":\"Kierunek tekstu\",\"langDirLtr\":\"Od lewej do prawej (LTR)\",\"langDirRtl\":\"Od prawej do lewej (RTL)\",\"langCode\":\"Kod języka\",\"longDescr\":\"Adres URL długiego opisu\",\"cssClass\":\"Nazwa klasy CSS\",\"advisoryTitle\":\"Opis obiektu docelowego\",\"cssStyle\":\"Styl\",\"ok\":\"OK\",\"cancel\":\"Anuluj\",\"close\":\"Zamknij\",\"preview\":\"Podgląd\",\"resize\":\"Przeciągnij, aby zmienić rozmiar\",\"generalTab\":\"Ogólne\",\"advancedTab\":\"Zaawansowane\",\"validateNumberFailed\":\"Ta wartość nie jest liczbą.\",\"confirmNewPage\":\"Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno wczytać nową stronę?\",\"confirmCancel\":\"Pewne opcje zostały zmienione. Czy na pewno zamknąć okno dialogowe?\",\"options\":\"Opcje\",\"target\":\"Obiekt docelowy\",\"targetNew\":\"Nowe okno (_blank)\",\"targetTop\":\"Okno najwyżej w hierarchii (_top)\",\"targetSelf\":\"To samo okno (_self)\",\"targetParent\":\"Okno nadrzędne (_parent)\",\"langDirLTR\":\"Od lewej do prawej (LTR)\",\"langDirRTL\":\"Od prawej do lewej (RTL)\",\"styles\":\"Style\",\"cssClasses\":\"Klasy arkusza stylów\",\"width\":\"Szerokość\",\"height\":\"Wysokość\",\"align\":\"Wyrównaj\",\"alignLeft\":\"Do lewej\",\"alignRight\":\"Do prawej\",\"alignCenter\":\"Do środka\",\"alignJustify\":\"Wyjustuj\",\"alignTop\":\"Do góry\",\"alignMiddle\":\"Do środka\",\"alignBottom\":\"Do dołu\",\"alignNone\":\"Brak\",\"invalidValue\":\"Nieprawidłowa wartość.\",\"invalidHeight\":\"Wysokość musi być liczbą.\",\"invalidWidth\":\"Szerokość musi być liczbą.\",\"invalidCssLength\":\"Wartość podana dla pola \\\"%1\\\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).\",\"invalidHtmlLength\":\"Wartość podana dla pola \\\"%1\\\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z HTML (px lub %).\",\"invalidInlineStyle\":\"Wartość podana dla stylu musi składać się z jednej lub większej liczby krotek w formacie \\\"nazwa : wartość\\\", rozdzielonych średnikami.\",\"cssLengthTooltip\":\"Wpisz liczbę dla wartości w pikselach lub liczbę wraz z jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, niedostępne</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Wszelkie prawa zastrzeżone.\",\"dlgTitle\":\"Informacje o programie CKEditor\",\"help\":\"Pomoc znajdziesz w $1.\",\"moreInfo\":\"Informacje na temat licencji można znaleźć na naszej stronie:\",\"title\":\"Informacje o programie CKEditor\",\"userGuide\":\"podręczniku użytkownika programu CKEditor\"},\"basicstyles\":{\"bold\":\"Pogrubienie\",\"italic\":\"Kursywa\",\"strike\":\"Przekreślenie\",\"subscript\":\"Indeks dolny\",\"superscript\":\"Indeks górny\",\"underline\":\"Podkreślenie\"},\"blockquote\":{\"toolbar\":\"Cytat\"},\"clipboard\":{\"copy\":\"Kopiuj\",\"copyError\":\"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+C.\",\"cut\":\"Wytnij\",\"cutError\":\"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+X.\",\"paste\":\"Wklej\",\"pasteArea\":\"Obszar wklejania\",\"pasteMsg\":\"Wklej tekst w poniższym polu, używając skrótu klawiaturowego (<STRONG>Ctrl/Cmd+V</STRONG>), i kliknij <STRONG>OK</STRONG>.\",\"securityMsg\":\"Zabezpieczenia przeglądarki uniemożliwiają wklejenie danych bezpośrednio do edytora. Proszę ponownie wkleić dane w tym oknie.\",\"title\":\"Wklej\"},\"contextmenu\":{\"options\":\"Opcje menu kontekstowego\"},\"button\":{\"selectedLabel\":\"%1 (Wybrany)\"},\"toolbar\":{\"toolbarCollapse\":\"Zwiń pasek narzędzi\",\"toolbarExpand\":\"Rozwiń pasek narzędzi\",\"toolbarGroups\":{\"document\":\"Dokument\",\"clipboard\":\"Schowek/Wstecz\",\"editing\":\"Edycja\",\"forms\":\"Formularze\",\"basicstyles\":\"Style podstawowe\",\"paragraph\":\"Akapit\",\"links\":\"Hiperłącza\",\"insert\":\"Wstawianie\",\"styles\":\"Style\",\"colors\":\"Kolory\",\"tools\":\"Narzędzia\"},\"toolbars\":\"Paski narzędzi edytora\"},\"elementspath\":{\"eleLabel\":\"Ścieżka elementów\",\"eleTitle\":\"element %1\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Format\",\"tag_address\":\"Adres\",\"tag_div\":\"Normalny (DIV)\",\"tag_h1\":\"Nagłówek 1\",\"tag_h2\":\"Nagłówek 2\",\"tag_h3\":\"Nagłówek 3\",\"tag_h4\":\"Nagłówek 4\",\"tag_h5\":\"Nagłówek 5\",\"tag_h6\":\"Nagłówek 6\",\"tag_p\":\"Normalny\",\"tag_pre\":\"Tekst sformatowany\"},\"horizontalrule\":{\"toolbar\":\"Wstaw poziomą linię\"},\"image\":{\"alt\":\"Tekst zastępczy\",\"border\":\"Obramowanie\",\"btnUpload\":\"Wyślij\",\"button2Img\":\"Czy chcesz przekonwertować zaznaczony przycisk graficzny do zwykłego obrazka?\",\"hSpace\":\"Odstęp poziomy\",\"img2Button\":\"Czy chcesz przekonwertować zaznaczony obrazek do przycisku graficznego?\",\"infoTab\":\"Informacje o obrazku\",\"linkTab\":\"Hiperłącze\",\"lockRatio\":\"Zablokuj proporcje\",\"menu\":\"Właściwości obrazka\",\"resetSize\":\"Przywróć rozmiar\",\"title\":\"Właściwości obrazka\",\"titleButton\":\"Właściwości przycisku graficznego\",\"upload\":\"Wyślij\",\"urlMissing\":\"Podaj adres URL obrazka.\",\"vSpace\":\"Odstęp pionowy\",\"validateBorder\":\"Wartość obramowania musi być liczbą całkowitą.\",\"validateHSpace\":\"Wartość odstępu poziomego musi być liczbą całkowitą.\",\"validateVSpace\":\"Wartość odstępu pionowego musi być liczbą całkowitą.\"},\"indent\":{\"indent\":\"Zwiększ wcięcie\",\"outdent\":\"Zmniejsz wcięcie\"},\"fakeobjects\":{\"anchor\":\"Kotwica\",\"flash\":\"Animacja Flash\",\"hiddenfield\":\"Pole ukryte\",\"iframe\":\"IFrame\",\"unknown\":\"Nieznany obiekt\"},\"link\":{\"acccessKey\":\"Klawisz dostępu\",\"advanced\":\"Zaawansowane\",\"advisoryContentType\":\"Typ MIME obiektu docelowego\",\"advisoryTitle\":\"Opis obiektu docelowego\",\"anchor\":{\"toolbar\":\"Wstaw/edytuj kotwicę\",\"menu\":\"Właściwości kotwicy\",\"title\":\"Właściwości kotwicy\",\"name\":\"Nazwa kotwicy\",\"errorName\":\"Wpisz nazwę kotwicy\",\"remove\":\"Usuń kotwicę\"},\"anchorId\":\"Wg identyfikatora\",\"anchorName\":\"Wg nazwy\",\"charset\":\"Kodowanie znaków obiektu docelowego\",\"cssClasses\":\"Nazwa klasy CSS\",\"emailAddress\":\"Adres e-mail\",\"emailBody\":\"Treść\",\"emailSubject\":\"Temat\",\"id\":\"Id\",\"info\":\"Informacje \",\"langCode\":\"Kod języka\",\"langDir\":\"Kierunek tekstu\",\"langDirLTR\":\"Od lewej do prawej (LTR)\",\"langDirRTL\":\"Od prawej do lewej (RTL)\",\"menu\":\"Edytuj odnośnik\",\"name\":\"Nazwa\",\"noAnchors\":\"(W dokumencie nie zdefiniowano żadnych kotwic)\",\"noEmail\":\"Podaj adres e-mail\",\"noUrl\":\"Podaj adres URL\",\"other\":\"<inny>\",\"popupDependent\":\"Okno zależne (Netscape)\",\"popupFeatures\":\"Właściwości wyskakującego okna\",\"popupFullScreen\":\"Pełny ekran (IE)\",\"popupLeft\":\"Pozycja w poziomie\",\"popupLocationBar\":\"Pasek adresu\",\"popupMenuBar\":\"Pasek menu\",\"popupResizable\":\"Skalowalny\",\"popupScrollBars\":\"Paski przewijania\",\"popupStatusBar\":\"Pasek statusu\",\"popupToolbar\":\"Pasek narzędzi\",\"popupTop\":\"Pozycja w pionie\",\"rel\":\"Relacja\",\"selectAnchor\":\"Wybierz kotwicę\",\"styles\":\"Styl\",\"tabIndex\":\"Indeks kolejności\",\"target\":\"Obiekt docelowy\",\"targetFrame\":\"<ramka>\",\"targetFrameName\":\"Nazwa ramki docelowej\",\"targetPopup\":\"<wyskakujące okno>\",\"targetPopupName\":\"Nazwa wyskakującego okna\",\"title\":\"Odnośnik\",\"toAnchor\":\"Odnośnik wewnątrz strony (kotwica)\",\"toEmail\":\"Adres e-mail\",\"toUrl\":\"Adres URL\",\"toolbar\":\"Wstaw/edytuj odnośnik\",\"type\":\"Typ odnośnika\",\"unlink\":\"Usuń odnośnik\",\"upload\":\"Wyślij\"},\"list\":{\"bulletedlist\":\"Lista wypunktowana\",\"numberedlist\":\"Lista numerowana\"},\"magicline\":{\"title\":\"Wstaw nowy akapit\"},\"maximize\":{\"maximize\":\"Maksymalizuj\",\"minimize\":\"Minimalizuj\"},\"pastetext\":{\"button\":\"Wklej jako czysty tekst\",\"title\":\"Wklej jako czysty tekst\"},\"pastefromword\":{\"confirmCleanup\":\"Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Microsoft Word. Czy chcesz go wyczyścić przed wklejeniem?\",\"error\":\"Wyczyszczenie wklejonych danych nie było możliwe z powodu wystąpienia błędu.\",\"title\":\"Wklej z programu MS Word\",\"toolbar\":\"Wklej z programu MS Word\"},\"removeformat\":{\"toolbar\":\"Usuń formatowanie\"},\"sourcearea\":{\"toolbar\":\"Źródło dokumentu\"},\"specialchar\":{\"options\":\"Opcje znaków specjalnych\",\"title\":\"Wybierz znak specjalny\",\"toolbar\":\"Wstaw znak specjalny\"},\"scayt\":{\"btn_about\":\"Informacje o SCAYT\",\"btn_dictionaries\":\"Słowniki\",\"btn_disable\":\"Wyłącz SCAYT\",\"btn_enable\":\"Włącz SCAYT\",\"btn_langs\":\"Języki\",\"btn_options\":\"Opcje\",\"text_title\":\"Sprawdź pisownię podczas pisania (SCAYT)\"},\"stylescombo\":{\"label\":\"Styl\",\"panelTitle\":\"Style formatujące\",\"panelTitle1\":\"Style blokowe\",\"panelTitle2\":\"Style liniowe\",\"panelTitle3\":\"Style obiektowe\"},\"table\":{\"border\":\"Grubość obramowania\",\"caption\":\"Tytuł\",\"cell\":{\"menu\":\"Komórka\",\"insertBefore\":\"Wstaw komórkę z lewej\",\"insertAfter\":\"Wstaw komórkę z prawej\",\"deleteCell\":\"Usuń komórki\",\"merge\":\"Połącz komórki\",\"mergeRight\":\"Połącz z komórką z prawej\",\"mergeDown\":\"Połącz z komórką poniżej\",\"splitHorizontal\":\"Podziel komórkę poziomo\",\"splitVertical\":\"Podziel komórkę pionowo\",\"title\":\"Właściwości komórki\",\"cellType\":\"Typ komórki\",\"rowSpan\":\"Scalenie wierszy\",\"colSpan\":\"Scalenie komórek\",\"wordWrap\":\"Zawijanie słów\",\"hAlign\":\"Wyrównanie poziome\",\"vAlign\":\"Wyrównanie pionowe\",\"alignBaseline\":\"Linia bazowa\",\"bgColor\":\"Kolor tła\",\"borderColor\":\"Kolor obramowania\",\"data\":\"Dane\",\"header\":\"Nagłówek\",\"yes\":\"Tak\",\"no\":\"Nie\",\"invalidWidth\":\"Szerokość komórki musi być liczbą.\",\"invalidHeight\":\"Wysokość komórki musi być liczbą.\",\"invalidRowSpan\":\"Scalenie wierszy musi być liczbą całkowitą.\",\"invalidColSpan\":\"Scalenie komórek musi być liczbą całkowitą.\",\"chooseColor\":\"Wybierz\"},\"cellPad\":\"Dopełnienie komórek\",\"cellSpace\":\"Odstęp pomiędzy komórkami\",\"column\":{\"menu\":\"Kolumna\",\"insertBefore\":\"Wstaw kolumnę z lewej\",\"insertAfter\":\"Wstaw kolumnę z prawej\",\"deleteColumn\":\"Usuń kolumny\"},\"columns\":\"Liczba kolumn\",\"deleteTable\":\"Usuń tabelę\",\"headers\":\"Nagłówki\",\"headersBoth\":\"Oba\",\"headersColumn\":\"Pierwsza kolumna\",\"headersNone\":\"Brak\",\"headersRow\":\"Pierwszy wiersz\",\"invalidBorder\":\"Wartość obramowania musi być liczbą.\",\"invalidCellPadding\":\"Dopełnienie komórek musi być liczbą dodatnią.\",\"invalidCellSpacing\":\"Odstęp pomiędzy komórkami musi być liczbą dodatnią.\",\"invalidCols\":\"Liczba kolumn musi być większa niż 0.\",\"invalidHeight\":\"Wysokość tabeli musi być liczbą.\",\"invalidRows\":\"Liczba wierszy musi być większa niż 0.\",\"invalidWidth\":\"Szerokość tabeli musi być liczbą.\",\"menu\":\"Właściwości tabeli\",\"row\":{\"menu\":\"Wiersz\",\"insertBefore\":\"Wstaw wiersz powyżej\",\"insertAfter\":\"Wstaw wiersz poniżej\",\"deleteRow\":\"Usuń wiersze\"},\"rows\":\"Liczba wierszy\",\"summary\":\"Podsumowanie\",\"title\":\"Właściwości tabeli\",\"toolbar\":\"Tabela\",\"widthPc\":\"%\",\"widthPx\":\"piksele\",\"widthUnit\":\"jednostka szerokości\"},\"undo\":{\"redo\":\"Ponów\",\"undo\":\"Cofnij\"},\"wsc\":{\"btnIgnore\":\"Ignoruj\",\"btnIgnoreAll\":\"Ignoruj wszystkie\",\"btnReplace\":\"Zmień\",\"btnReplaceAll\":\"Zmień wszystkie\",\"btnUndo\":\"Cofnij\",\"changeTo\":\"Zmień na\",\"errorLoading\":\"Błąd wczytywania hosta aplikacji usługi: %s.\",\"ieSpellDownload\":\"Słownik nie jest zainstalowany. Czy chcesz go pobrać?\",\"manyChanges\":\"Sprawdzanie zakończone: zmieniono %l słów\",\"noChanges\":\"Sprawdzanie zakończone: nie zmieniono żadnego słowa\",\"noMispell\":\"Sprawdzanie zakończone: nie znaleziono błędów\",\"noSuggestions\":\"- Brak sugestii -\",\"notAvailable\":\"Przepraszamy, ale usługa jest obecnie niedostępna.\",\"notInDic\":\"Słowa nie ma w słowniku\",\"oneChange\":\"Sprawdzanie zakończone: zmieniono jedno słowo\",\"progress\":\"Trwa sprawdzanie...\",\"title\":\"Sprawdź pisownię\",\"toolbar\":\"Sprawdź pisownię\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/pt-br.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['pt-br']={\"editor\":\"Editor de Rich Text\",\"editorPanel\":\"Painel do editor de Rich Text\",\"common\":{\"editorHelp\":\"Pressione ALT+0 para ajuda\",\"browseServer\":\"Localizar no Servidor\",\"url\":\"URL\",\"protocol\":\"Protocolo\",\"upload\":\"Enviar ao Servidor\",\"uploadSubmit\":\"Enviar para o Servidor\",\"image\":\"Imagem\",\"flash\":\"Flash\",\"form\":\"Formulário\",\"checkbox\":\"Caixa de Seleção\",\"radio\":\"Botão de Opção\",\"textField\":\"Caixa de Texto\",\"textarea\":\"Área de Texto\",\"hiddenField\":\"Campo Oculto\",\"button\":\"Botão\",\"select\":\"Caixa de Listagem\",\"imageButton\":\"Botão de Imagem\",\"notSet\":\"<não ajustado>\",\"id\":\"Id\",\"name\":\"Nome\",\"langDir\":\"Direção do idioma\",\"langDirLtr\":\"Esquerda para Direita (LTR)\",\"langDirRtl\":\"Direita para Esquerda (RTL)\",\"langCode\":\"Idioma\",\"longDescr\":\"Descrição da URL\",\"cssClass\":\"Classe de CSS\",\"advisoryTitle\":\"Título\",\"cssStyle\":\"Estilos\",\"ok\":\"OK\",\"cancel\":\"Cancelar\",\"close\":\"Fechar\",\"preview\":\"Visualizar\",\"resize\":\"Arraste para redimensionar\",\"generalTab\":\"Geral\",\"advancedTab\":\"Avançado\",\"validateNumberFailed\":\"Este valor não é um número.\",\"confirmNewPage\":\"Todas as mudanças não salvas serão perdidas. Tem certeza de que quer abrir uma nova página?\",\"confirmCancel\":\"Algumas opções foram alteradas. Tem certeza de que quer fechar a caixa de diálogo?\",\"options\":\"Opções\",\"target\":\"Destino\",\"targetNew\":\"Nova Janela (_blank)\",\"targetTop\":\"Janela de Cima (_top)\",\"targetSelf\":\"Mesma Janela (_self)\",\"targetParent\":\"Janela Pai (_parent)\",\"langDirLTR\":\"Esquerda para Direita (LTR)\",\"langDirRTL\":\"Direita para Esquerda (RTL)\",\"styles\":\"Estilo\",\"cssClasses\":\"Classes\",\"width\":\"Largura\",\"height\":\"Altura\",\"align\":\"Alinhamento\",\"alignLeft\":\"Esquerda\",\"alignRight\":\"Direita\",\"alignCenter\":\"Centralizado\",\"alignJustify\":\"Justificar\",\"alignTop\":\"Superior\",\"alignMiddle\":\"Centralizado\",\"alignBottom\":\"Inferior\",\"alignNone\":\"Nenhum\",\"invalidValue\":\"Valor inválido.\",\"invalidHeight\":\"A altura tem que ser um número\",\"invalidWidth\":\"A largura tem que ser um número.\",\"invalidCssLength\":\"O valor do campo \\\"%1\\\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt ou pc).\",\"invalidHtmlLength\":\"O valor do campo \\\"%1\\\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de HTML (px ou %).\",\"invalidInlineStyle\":\"O valor válido para estilo deve conter uma ou mais tuplas no formato \\\"nome : valor\\\", separados por ponto e vírgula.\",\"cssLengthTooltip\":\"Insira um número para valor em pixels ou um número seguido de uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt ou pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, indisponível</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Todos os direitos reservados.\",\"dlgTitle\":\"Sobre o CKEditor\",\"help\":\"Verifique o $1 para obter ajuda.\",\"moreInfo\":\"Para informações sobre a licença por favor visite o nosso site:\",\"title\":\"Sobre o CKEditor\",\"userGuide\":\"Guia do Usuário do CKEditor\"},\"basicstyles\":{\"bold\":\"Negrito\",\"italic\":\"Itálico\",\"strike\":\"Tachado\",\"subscript\":\"Subscrito\",\"superscript\":\"Sobrescrito\",\"underline\":\"Sublinhado\"},\"blockquote\":{\"toolbar\":\"Citação\"},\"clipboard\":{\"copy\":\"Copiar\",\"copyError\":\"As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl/Cmd+C).\",\"cut\":\"Recortar\",\"cutError\":\"As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl/Cmd+X).\",\"paste\":\"Colar\",\"pasteArea\":\"Área para Colar\",\"pasteMsg\":\"Transfira o link usado na caixa usando o teclado com (<STRONG>Ctrl/Cmd+V</STRONG>) e <STRONG>OK</STRONG>.\",\"securityMsg\":\"As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo manualmente nesta janela.\",\"title\":\"Colar\"},\"contextmenu\":{\"options\":\"Opções Menu de Contexto\"},\"button\":{\"selectedLabel\":\"%1 (Selecionado)\"},\"toolbar\":{\"toolbarCollapse\":\"Diminuir Barra de Ferramentas\",\"toolbarExpand\":\"Aumentar Barra de Ferramentas\",\"toolbarGroups\":{\"document\":\"Documento\",\"clipboard\":\"Clipboard/Desfazer\",\"editing\":\"Edição\",\"forms\":\"Formulários\",\"basicstyles\":\"Estilos Básicos\",\"paragraph\":\"Paragrafo\",\"links\":\"Links\",\"insert\":\"Inserir\",\"styles\":\"Estilos\",\"colors\":\"Cores\",\"tools\":\"Ferramentas\"},\"toolbars\":\"Barra de Ferramentas do Editor\"},\"elementspath\":{\"eleLabel\":\"Caminho dos Elementos\",\"eleTitle\":\"Elemento %1\"},\"format\":{\"label\":\"Formatação\",\"panelTitle\":\"Formatação\",\"tag_address\":\"Endereço\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Título 1\",\"tag_h2\":\"Título 2\",\"tag_h3\":\"Título 3\",\"tag_h4\":\"Título 4\",\"tag_h5\":\"Título 5\",\"tag_h6\":\"Título 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatado\"},\"horizontalrule\":{\"toolbar\":\"Inserir Linha Horizontal\"},\"image\":{\"alt\":\"Texto Alternativo\",\"border\":\"Borda\",\"btnUpload\":\"Enviar para o Servidor\",\"button2Img\":\"Deseja transformar o botão de imagem em uma imagem comum?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Deseja transformar a imagem em um botão de imagem?\",\"infoTab\":\"Informações da Imagem\",\"linkTab\":\"Link\",\"lockRatio\":\"Travar Proporções\",\"menu\":\"Formatar Imagem\",\"resetSize\":\"Redefinir para o Tamanho Original\",\"title\":\"Formatar Imagem\",\"titleButton\":\"Formatar Botão de Imagem\",\"upload\":\"Enviar\",\"urlMissing\":\"URL da imagem está faltando.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"A borda deve ser um número inteiro.\",\"validateHSpace\":\"O HSpace deve ser um número inteiro.\",\"validateVSpace\":\"O VSpace deve ser um número inteiro.\"},\"indent\":{\"indent\":\"Aumentar Recuo\",\"outdent\":\"Diminuir Recuo\"},\"fakeobjects\":{\"anchor\":\"Âncora\",\"flash\":\"Animação em Flash\",\"hiddenfield\":\"Campo Oculto\",\"iframe\":\"IFrame\",\"unknown\":\"Objeto desconhecido\"},\"link\":{\"acccessKey\":\"Chave de Acesso\",\"advanced\":\"Avançado\",\"advisoryContentType\":\"Tipo de Conteúdo\",\"advisoryTitle\":\"Título\",\"anchor\":{\"toolbar\":\"Inserir/Editar Âncora\",\"menu\":\"Formatar Âncora\",\"title\":\"Formatar Âncora\",\"name\":\"Nome da Âncora\",\"errorName\":\"Por favor, digite o nome da âncora\",\"remove\":\"Remover Âncora\"},\"anchorId\":\"Id da âncora\",\"anchorName\":\"Nome da âncora\",\"charset\":\"Charset do Link\",\"cssClasses\":\"Classe de CSS\",\"emailAddress\":\"Endereço E-Mail\",\"emailBody\":\"Corpo da Mensagem\",\"emailSubject\":\"Assunto da Mensagem\",\"id\":\"Id\",\"info\":\"Informações\",\"langCode\":\"Direção do idioma\",\"langDir\":\"Direção do idioma\",\"langDirLTR\":\"Esquerda para Direita (LTR)\",\"langDirRTL\":\"Direita para Esquerda (RTL)\",\"menu\":\"Editar Link\",\"name\":\"Nome\",\"noAnchors\":\"(Não há âncoras no documento)\",\"noEmail\":\"Por favor, digite o endereço de e-mail\",\"noUrl\":\"Por favor, digite o endereço do Link\",\"other\":\"<outro>\",\"popupDependent\":\"Dependente (Netscape)\",\"popupFeatures\":\"Propriedades da Janela Pop-up\",\"popupFullScreen\":\"Modo Tela Cheia (IE)\",\"popupLeft\":\"Esquerda\",\"popupLocationBar\":\"Barra de Endereços\",\"popupMenuBar\":\"Barra de Menus\",\"popupResizable\":\"Redimensionável\",\"popupScrollBars\":\"Barras de Rolagem\",\"popupStatusBar\":\"Barra de Status\",\"popupToolbar\":\"Barra de Ferramentas\",\"popupTop\":\"Topo\",\"rel\":\"Tipo de Relação\",\"selectAnchor\":\"Selecione uma âncora\",\"styles\":\"Estilos\",\"tabIndex\":\"Índice de Tabulação\",\"target\":\"Destino\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Nome do Frame de Destino\",\"targetPopup\":\"<janela popup>\",\"targetPopupName\":\"Nome da Janela Pop-up\",\"title\":\"Editar Link\",\"toAnchor\":\"Âncora nesta página\",\"toEmail\":\"E-Mail\",\"toUrl\":\"URL\",\"toolbar\":\"Inserir/Editar Link\",\"type\":\"Tipo de hiperlink\",\"unlink\":\"Remover Link\",\"upload\":\"Enviar ao Servidor\"},\"list\":{\"bulletedlist\":\"Lista sem números\",\"numberedlist\":\"Lista numerada\"},\"magicline\":{\"title\":\"Insera um parágrafo aqui\"},\"maximize\":{\"maximize\":\"Maximizar\",\"minimize\":\"Minimize\"},\"pastetext\":{\"button\":\"Colar como Texto sem Formatação\",\"title\":\"Colar como Texto sem Formatação\"},\"pastefromword\":{\"confirmCleanup\":\"O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?\",\"error\":\"Não foi possível limpar os dados colados devido a um erro interno\",\"title\":\"Colar do Word\",\"toolbar\":\"Colar do Word\"},\"removeformat\":{\"toolbar\":\"Remover Formatação\"},\"sourcearea\":{\"toolbar\":\"Código-Fonte\"},\"specialchar\":{\"options\":\"Opções de Caractere Especial\",\"title\":\"Selecione um Caractere Especial\",\"toolbar\":\"Inserir Caractere Especial\"},\"scayt\":{\"btn_about\":\"Sobre a correção ortográfica durante a digitação\",\"btn_dictionaries\":\"Dicionários\",\"btn_disable\":\"Desabilitar correção ortográfica durante a digitação\",\"btn_enable\":\"Habilitar correção ortográfica durante a digitação\",\"btn_langs\":\"Idiomas\",\"btn_options\":\"Opções\",\"text_title\":\"Correção ortográfica durante a digitação\"},\"stylescombo\":{\"label\":\"Estilo\",\"panelTitle\":\"Estilos de Formatação\",\"panelTitle1\":\"Estilos de bloco\",\"panelTitle2\":\"Estilos de texto corrido\",\"panelTitle3\":\"Estilos de objeto\"},\"table\":{\"border\":\"Borda\",\"caption\":\"Legenda\",\"cell\":{\"menu\":\"Célula\",\"insertBefore\":\"Inserir célula a esquerda\",\"insertAfter\":\"Inserir célula a direita\",\"deleteCell\":\"Remover Células\",\"merge\":\"Mesclar Células\",\"mergeRight\":\"Mesclar com célula a direita\",\"mergeDown\":\"Mesclar com célula abaixo\",\"splitHorizontal\":\"Dividir célula horizontalmente\",\"splitVertical\":\"Dividir célula verticalmente\",\"title\":\"Propriedades da célula\",\"cellType\":\"Tipo de célula\",\"rowSpan\":\"Linhas cobertas\",\"colSpan\":\"Colunas cobertas\",\"wordWrap\":\"Quebra de palavra\",\"hAlign\":\"Alinhamento horizontal\",\"vAlign\":\"Alinhamento vertical\",\"alignBaseline\":\"Patamar de alinhamento\",\"bgColor\":\"Cor de fundo\",\"borderColor\":\"Cor das bordas\",\"data\":\"Dados\",\"header\":\"Cabeçalho\",\"yes\":\"Sim\",\"no\":\"Não\",\"invalidWidth\":\"A largura da célula tem que ser um número.\",\"invalidHeight\":\"A altura da célula tem que ser um número.\",\"invalidRowSpan\":\"Linhas cobertas tem que ser um número inteiro.\",\"invalidColSpan\":\"Colunas cobertas tem que ser um número inteiro.\",\"chooseColor\":\"Escolher\"},\"cellPad\":\"Margem interna\",\"cellSpace\":\"Espaçamento\",\"column\":{\"menu\":\"Coluna\",\"insertBefore\":\"Inserir coluna a esquerda\",\"insertAfter\":\"Inserir coluna a direita\",\"deleteColumn\":\"Remover Colunas\"},\"columns\":\"Colunas\",\"deleteTable\":\"Apagar Tabela\",\"headers\":\"Cabeçalho\",\"headersBoth\":\"Ambos\",\"headersColumn\":\"Primeira coluna\",\"headersNone\":\"Nenhum\",\"headersRow\":\"Primeira linha\",\"invalidBorder\":\"O tamanho da borda tem que ser um número.\",\"invalidCellPadding\":\"A margem interna das células tem que ser um número.\",\"invalidCellSpacing\":\"O espaçamento das células tem que ser um número.\",\"invalidCols\":\"O número de colunas tem que ser um número maior que 0.\",\"invalidHeight\":\"A altura da tabela tem que ser um número.\",\"invalidRows\":\"O número de linhas tem que ser um número maior que 0.\",\"invalidWidth\":\"A largura da tabela tem que ser um número.\",\"menu\":\"Formatar Tabela\",\"row\":{\"menu\":\"Linha\",\"insertBefore\":\"Inserir linha acima\",\"insertAfter\":\"Inserir linha abaixo\",\"deleteRow\":\"Remover Linhas\"},\"rows\":\"Linhas\",\"summary\":\"Resumo\",\"title\":\"Formatar Tabela\",\"toolbar\":\"Tabela\",\"widthPc\":\"%\",\"widthPx\":\"pixels\",\"widthUnit\":\"unidade largura\"},\"undo\":{\"redo\":\"Refazer\",\"undo\":\"Desfazer\"},\"wsc\":{\"btnIgnore\":\"Ignorar uma vez\",\"btnIgnoreAll\":\"Ignorar Todas\",\"btnReplace\":\"Alterar\",\"btnReplaceAll\":\"Alterar Todas\",\"btnUndo\":\"Desfazer\",\"changeTo\":\"Alterar para\",\"errorLoading\":\"Erro carregando servidor de aplicação: %s.\",\"ieSpellDownload\":\"A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?\",\"manyChanges\":\"Verificação ortográfica encerrada: %1 palavras foram alteradas\",\"noChanges\":\"Verificação ortográfica encerrada: Não houve alterações\",\"noMispell\":\"Verificação encerrada: Não foram encontrados erros de ortografia\",\"noSuggestions\":\"-sem sugestões de ortografia-\",\"notAvailable\":\"Desculpe, o serviço não está disponível no momento.\",\"notInDic\":\"Não encontrada\",\"oneChange\":\"Verificação ortográfica encerrada: Uma palavra foi alterada\",\"progress\":\"Verificação ortográfica em andamento...\",\"title\":\"Corretor Ortográfico\",\"toolbar\":\"Verificar Ortografia\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/pt.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['pt']={\"editor\":\"Editor de texto enriquecido\",\"editorPanel\":\"Painel do editor de texto enriquecido\",\"common\":{\"editorHelp\":\"Pressione ALT+0 para ajuda\",\"browseServer\":\"Navegar no servidor\",\"url\":\"URL\",\"protocol\":\"Protocolo\",\"upload\":\"Enviar\",\"uploadSubmit\":\"Enviar para o servidor\",\"image\":\"Imagem\",\"flash\":\"Flash\",\"form\":\"Formulário\",\"checkbox\":\"Caixa de Seleção\",\"radio\":\"Botão\",\"textField\":\"Campo do Texto\",\"textarea\":\"Área do Texto\",\"hiddenField\":\"Campo oculto\",\"button\":\"Botão\",\"select\":\"Campo da Seleção\",\"imageButton\":\"Botão da Imagem\",\"notSet\":\"<Não definido>\",\"id\":\"Id.\",\"name\":\"Nome\",\"langDir\":\"Direção do Idioma\",\"langDirLtr\":\"Esquerda para a Direita (EPD)\",\"langDirRtl\":\"Direita para a Esquerda (DPE)\",\"langCode\":\"Código do Idioma\",\"longDescr\":\"Descrição Completa do URL\",\"cssClass\":\"Classes de Estilo das Folhas\",\"advisoryTitle\":\"Título Consultivo\",\"cssStyle\":\"Estilo\",\"ok\":\"CONFIRMAR\",\"cancel\":\"Cancelar\",\"close\":\"Fechar\",\"preview\":\"Pré-visualização\",\"resize\":\"Redimensionar\",\"generalTab\":\"Geral\",\"advancedTab\":\"Avançado\",\"validateNumberFailed\":\"Este valor não é um numero.\",\"confirmNewPage\":\"Irão ser perdidas quaisquer alterações não guardadas. Tem a certeza que deseja carregar a nova página?\",\"confirmCancel\":\"Foram alteradas algumas das opções. Tem a certeza que deseja fechar a janela?\",\"options\":\"Opções\",\"target\":\"Destino\",\"targetNew\":\"Nova Janela (_blank)\",\"targetTop\":\"Janela Superior (_top)\",\"targetSelf\":\"Mesma Janela (_self)\",\"targetParent\":\"Janela Parente (_parent)\",\"langDirLTR\":\"Esquerda para a Direita (EPD)\",\"langDirRTL\":\"Direita para a Esquerda (DPE)\",\"styles\":\"Estilo\",\"cssClasses\":\"Classes de folhas de estilo\",\"width\":\"Largura\",\"height\":\"Altura\",\"align\":\"Alinhamento\",\"alignLeft\":\"Esquerda\",\"alignRight\":\"Direita\",\"alignCenter\":\"Centrado\",\"alignJustify\":\"Justificado\",\"alignTop\":\"Topo\",\"alignMiddle\":\"Centro\",\"alignBottom\":\"Base\",\"alignNone\":\"Nenhum\",\"invalidValue\":\"Valor inválido.\",\"invalidHeight\":\"A altura deve ser um número.\",\"invalidWidth\":\"A largura deve ser um número. \",\"invalidCssLength\":\"O valor especificado para o campo \\\"1%\\\" deve ser um número positivo, com ou sem uma unidade de medida CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).\",\"invalidHtmlLength\":\"O valor especificado para o campo \\\"1%\\\" deve ser um número positivo, com ou sem uma unidade de medida HTML válida (px ou %).\",\"invalidInlineStyle\":\"O valor especificado para o estilo em linha deve constituir um ou mais conjuntos de valores com o formato de \\\"nome : valor\\\", separados por ponto e vírgula.\",\"cssLengthTooltip\":\"Insira um número para um valor em pontos ou um número com uma unidade CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, indisponível</span>\"},\"about\":{\"copy\":\"Direitos de Autor &copy; $1. Todos os direitos reservados.\",\"dlgTitle\":\"Sobre o CKEditor\",\"help\":\"Doar $1 para ajudar.\",\"moreInfo\":\"Para informação sobre licenciamento visite o nosso sítio web:\",\"title\":\"Sobre o CKEditor\",\"userGuide\":\"CKEditor - Guia do Utilizador\"},\"basicstyles\":{\"bold\":\"Negrito\",\"italic\":\"Itálico\",\"strike\":\"Rasurado\",\"subscript\":\"Superior à linha\",\"superscript\":\"Inferior à Linha\",\"underline\":\"Sublinhado\"},\"blockquote\":{\"toolbar\":\"Bloco de citação\"},\"clipboard\":{\"copy\":\"Copiar\",\"copyError\":\"A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl/Cmd+C).\",\"cut\":\"Cortar\",\"cutError\":\"A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl/Cmd+X).\",\"paste\":\"Colar\",\"pasteArea\":\"Colar área\",\"pasteMsg\":\"Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e prima <STRONG>OK</STRONG>.\",\"securityMsg\":\"Devido ás definições de segurança do teu browser, o editor não pode aceder ao clipboard diretamente. É necessário que voltes a colar as informações nesta janela.\",\"title\":\"Colar\"},\"contextmenu\":{\"options\":\"Menu de opções de contexto\"},\"button\":{\"selectedLabel\":\"%1 (Selecionado)\"},\"toolbar\":{\"toolbarCollapse\":\"Ocultar barra de ferramentas\",\"toolbarExpand\":\"Expandir barra de ferramentas\",\"toolbarGroups\":{\"document\":\"Documento\",\"clipboard\":\"Área de transferência/Anular\",\"editing\":\"Edição\",\"forms\":\"Formulários\",\"basicstyles\":\"Estilos Básicos\",\"paragraph\":\"Parágrafo\",\"links\":\"Hiperligações\",\"insert\":\"Inserir\",\"styles\":\"Estilos\",\"colors\":\"Cores\",\"tools\":\"Ferramentas\"},\"toolbars\":\"Editor de Barras de Ferramentas\"},\"elementspath\":{\"eleLabel\":\"Caminho dos elementos\",\"eleTitle\":\"Elemento %1\"},\"format\":{\"label\":\"Formatar\",\"panelTitle\":\"Formatar Parágrafo\",\"tag_address\":\"Endereço\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Título 1\",\"tag_h2\":\"Título 2\",\"tag_h3\":\"Título 3\",\"tag_h4\":\"Título 4\",\"tag_h5\":\"Título 5\",\"tag_h6\":\"Título 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatado\"},\"horizontalrule\":{\"toolbar\":\"Inserir Linha Horizontal\"},\"image\":{\"alt\":\"Texto Alternativo\",\"border\":\"Limite\",\"btnUpload\":\"Enviar para o servidor\",\"button2Img\":\"Deseja transformar o botão com imagem selecionado em uma imagem?\",\"hSpace\":\"Esp.Horiz\",\"img2Button\":\"Deseja transformar a imagem selecionada em um botão com imagem?\",\"infoTab\":\"Informação da Imagem\",\"linkTab\":\"Hiperligação\",\"lockRatio\":\"Proporcional\",\"menu\":\"Propriedades da Imagem\",\"resetSize\":\"Tamanho Original\",\"title\":\"Propriedades da Imagem\",\"titleButton\":\"Propriedades do Botão de imagens\",\"upload\":\"Carregar\",\"urlMissing\":\"O URL da fonte da imagem está em falta.\",\"vSpace\":\"Esp.Vert\",\"validateBorder\":\"A borda tem de ser um numero.\",\"validateHSpace\":\"HSpace tem de ser um numero.\",\"validateVSpace\":\"VSpace tem de ser um numero.\"},\"indent\":{\"indent\":\"Aumentar Avanço\",\"outdent\":\"Diminuir Avanço\"},\"fakeobjects\":{\"anchor\":\" Inserir/Editar Âncora\",\"flash\":\"Animação Flash\",\"hiddenfield\":\"Campo oculto\",\"iframe\":\"IFrame\",\"unknown\":\"Objeto Desconhecido\"},\"link\":{\"acccessKey\":\"Chave de Acesso\",\"advanced\":\"Avançado\",\"advisoryContentType\":\"Tipo de Conteúdo\",\"advisoryTitle\":\"Título\",\"anchor\":{\"toolbar\":\" Inserir/Editar Âncora\",\"menu\":\"Propriedades da Âncora\",\"title\":\"Propriedades da Âncora\",\"name\":\"Nome da Âncora\",\"errorName\":\"Por favor, introduza o nome da âncora\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"Por ID de elemento\",\"anchorName\":\"Por Nome de Referência\",\"charset\":\"Fonte de caracteres vinculado\",\"cssClasses\":\"Classes de Estilo de Folhas Classes\",\"emailAddress\":\"Endereço de E-Mail\",\"emailBody\":\"Corpo da Mensagem\",\"emailSubject\":\"Título de Mensagem\",\"id\":\"ID\",\"info\":\"Informação de Hiperligação\",\"langCode\":\"Orientação de idioma\",\"langDir\":\"Orientação de idioma\",\"langDirLTR\":\"Esquerda à Direita (LTR)\",\"langDirRTL\":\"Direita a Esquerda (RTL)\",\"menu\":\"Editar Hiperligação\",\"name\":\"Nome\",\"noAnchors\":\"(Não há referências disponíveis no documento)\",\"noEmail\":\"Por favor introduza o endereço de e-mail\",\"noUrl\":\"Por favor introduza a hiperligação URL\",\"other\":\"<outro>\",\"popupDependent\":\"Dependente (Netscape)\",\"popupFeatures\":\"Características de Janela de Popup\",\"popupFullScreen\":\"Janela Completa (IE)\",\"popupLeft\":\"Posição Esquerda\",\"popupLocationBar\":\"Barra de localização\",\"popupMenuBar\":\"Barra de Menu\",\"popupResizable\":\"Redimensionável\",\"popupScrollBars\":\"Barras de deslocamento\",\"popupStatusBar\":\"Barra de Estado\",\"popupToolbar\":\"Barra de ferramentas\",\"popupTop\":\"Posição Direita\",\"rel\":\"Relação\",\"selectAnchor\":\"Seleccionar una referência\",\"styles\":\"Estilo\",\"tabIndex\":\"Índice de tabulação\",\"target\":\"Alvo\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Nome do Frame Destino\",\"targetPopup\":\"<janela de popup>\",\"targetPopupName\":\"Nome da Janela de Popup\",\"title\":\"Hiperligação\",\"toAnchor\":\"Referência a esta página\",\"toEmail\":\"Email\",\"toUrl\":\"URL\",\"toolbar\":\"Inserir/Editar Hiperligação\",\"type\":\"Tipo de Hiperligação\",\"unlink\":\"Eliminar Hiperligação\",\"upload\":\"Carregar\"},\"list\":{\"bulletedlist\":\"Marcas\",\"numberedlist\":\"Numeração\"},\"magicline\":{\"title\":\"Insira aqui o parágrafo\"},\"maximize\":{\"maximize\":\"Maximizar\",\"minimize\":\"Minimizar\"},\"pastetext\":{\"button\":\"Colar como Texto Simples\",\"title\":\"Colar como Texto Simples\"},\"pastefromword\":{\"confirmCleanup\":\"O texto que pretende colar parece ter sido copiado do Word. Deseja limpá-lo antes de colar?\",\"error\":\"Não foi possivel limpar a informação colada decido a um erro interno.\",\"title\":\"Colar do Word\",\"toolbar\":\"Colar do Word\"},\"removeformat\":{\"toolbar\":\"Eliminar Formato\"},\"sourcearea\":{\"toolbar\":\"Fonte\"},\"specialchar\":{\"options\":\"Opções de caracteres especiais\",\"title\":\"Selecione um caracter especial\",\"toolbar\":\"Inserir carácter especial\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Estilos\",\"panelTitle\":\"Estilos de Formatação\",\"panelTitle1\":\"Estilos de bloco\",\"panelTitle2\":\"Estilos de Linha\",\"panelTitle3\":\"Estilos de Objeto\"},\"table\":{\"border\":\"Tamanho do contorno\",\"caption\":\"Legenda\",\"cell\":{\"menu\":\"Célula\",\"insertBefore\":\"Inserir célula antes\",\"insertAfter\":\"Inserir célula depois\",\"deleteCell\":\"Apagar Células\",\"merge\":\"Unir Células\",\"mergeRight\":\"Unir à Direita\",\"mergeDown\":\"Fundir abaixo\",\"splitHorizontal\":\"Dividir célula horizontalmente\",\"splitVertical\":\"Dividir célula verticalmente\",\"title\":\"Propriedades da célula\",\"cellType\":\"Tipo de célula\",\"rowSpan\":\"Filas na Célula\",\"colSpan\":\"Colunas na Célula\",\"wordWrap\":\"Moldar texto\",\"hAlign\":\"Alinhamento Horizontal\",\"vAlign\":\"Alinhamento Vertical\",\"alignBaseline\":\"Base\",\"bgColor\":\"Cor de Fundo\",\"borderColor\":\"Cor da Margem\",\"data\":\"Dados\",\"header\":\"Cabeçalho\",\"yes\":\"Sim\",\"no\":\"Não\",\"invalidWidth\":\"A largura da célula deve ser um número.\",\"invalidHeight\":\"A altura da célula deve ser um número.\",\"invalidRowSpan\":\"As filas da célula deve ter um número inteiro.\",\"invalidColSpan\":\"As colunas da célula deve ter um número inteiro.\",\"chooseColor\":\"Escolher\"},\"cellPad\":\"Espaço interior\",\"cellSpace\":\"Espaçamento de célula\",\"column\":{\"menu\":\"Coluna\",\"insertBefore\":\"Inserir Coluna Antes\",\"insertAfter\":\"Inserir coluna depois\",\"deleteColumn\":\"Apagar colunas\"},\"columns\":\"Colunas\",\"deleteTable\":\"Apagar tabela\",\"headers\":\"Cabeçalhos\",\"headersBoth\":\"Ambos\",\"headersColumn\":\"Primeira coluna\",\"headersNone\":\"Nenhum\",\"headersRow\":\"Primeira linha\",\"invalidBorder\":\"O tamanho da margem tem de ser um número.\",\"invalidCellPadding\":\"A criação do espaço na célula deve ser um número positivo.\",\"invalidCellSpacing\":\"O espaçamento da célula deve ser um número positivo.\",\"invalidCols\":\"O número de colunas tem de ser um número maior que 0.\",\"invalidHeight\":\"A altura da tabela tem de ser um número.\",\"invalidRows\":\"O número de linhas tem de ser maior que 0.\",\"invalidWidth\":\"A largura da tabela tem de ser um número.\",\"menu\":\"Propriedades da Tabela\",\"row\":{\"menu\":\"Linha\",\"insertBefore\":\"Inserir linha antes\",\"insertAfter\":\"Inserir linha depois\",\"deleteRow\":\"Apagar linhas\"},\"rows\":\"Linhas\",\"summary\":\"Sumário\",\"title\":\"Propriedades da Tabela\",\"toolbar\":\"Tabela\",\"widthPc\":\"percentagem\",\"widthPx\":\"pontos\",\"widthUnit\":\"unidade da largura\"},\"undo\":{\"redo\":\"Refazer\",\"undo\":\"Anular\"},\"wsc\":{\"btnIgnore\":\"Ignorar\",\"btnIgnoreAll\":\"Ignorar Tudo\",\"btnReplace\":\"Substituir\",\"btnReplaceAll\":\"Substituir Tudo\",\"btnUndo\":\"Anular\",\"changeTo\":\"Mudar para\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\" Verificação ortográfica não instalada. Quer descarregar agora?\",\"manyChanges\":\"Verificação ortográfica completa: %1 palavras alteradas\",\"noChanges\":\"Verificação ortográfica completa: não houve alteração de palavras\",\"noMispell\":\"Verificação ortográfica completa: não foram encontrados erros\",\"noSuggestions\":\"- Sem sugestões -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Não está num directório\",\"oneChange\":\"Verificação ortográfica completa: uma palavra alterada\",\"progress\":\"Verificação ortográfica em progresso…\",\"title\":\"Spell Checker\",\"toolbar\":\"Verificação Ortográfica\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/ro.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['ro']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Apasă ALT 0 pentru ajutor\",\"browseServer\":\"Răsfoieşte server\",\"url\":\"URL\",\"protocol\":\"Protocol\",\"upload\":\"Încarcă\",\"uploadSubmit\":\"Trimite la server\",\"image\":\"Imagine\",\"flash\":\"Flash\",\"form\":\"Formular (Form)\",\"checkbox\":\"Bifă (Checkbox)\",\"radio\":\"Buton radio (RadioButton)\",\"textField\":\"Câmp text (TextField)\",\"textarea\":\"Suprafaţă text (Textarea)\",\"hiddenField\":\"Câmp ascuns (HiddenField)\",\"button\":\"Buton\",\"select\":\"Câmp selecţie (SelectionField)\",\"imageButton\":\"Buton imagine (ImageButton)\",\"notSet\":\"<nesetat>\",\"id\":\"Id\",\"name\":\"Nume\",\"langDir\":\"Direcţia cuvintelor\",\"langDirLtr\":\"stânga-dreapta (LTR)\",\"langDirRtl\":\"dreapta-stânga (RTL)\",\"langCode\":\"Codul limbii\",\"longDescr\":\"Descrierea lungă URL\",\"cssClass\":\"Clasele cu stilul paginii (CSS)\",\"advisoryTitle\":\"Titlul consultativ\",\"cssStyle\":\"Stil\",\"ok\":\"OK\",\"cancel\":\"Anulare\",\"close\":\"Închide\",\"preview\":\"Previzualizare\",\"resize\":\"Trage pentru a redimensiona\",\"generalTab\":\"General\",\"advancedTab\":\"Avansat\",\"validateNumberFailed\":\"Această valoare nu este un număr.\",\"confirmNewPage\":\"Orice modificări nesalvate ale acestui conținut, vor fi pierdute. Sigur doriți încărcarea unei noi pagini?\",\"confirmCancel\":\"Câteva opțiuni au fost schimbate. Sigur doriți să închideți dialogul?\",\"options\":\"Opțiuni\",\"target\":\"Țintă\",\"targetNew\":\"Fereastră nouă (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"În aceeași fereastră (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"Stânga spre Dreapta (LTR)\",\"langDirRTL\":\"Dreapta spre Stânga (RTL)\",\"styles\":\"Stil\",\"cssClasses\":\"Stylesheet Classes\",\"width\":\"Lăţime\",\"height\":\"Înălţime\",\"align\":\"Aliniere\",\"alignLeft\":\"Mărește Bara\",\"alignRight\":\"Dreapta\",\"alignCenter\":\"Centru\",\"alignJustify\":\"Aliniere în bloc (Block Justify)\",\"alignTop\":\"Sus\",\"alignMiddle\":\"Mijloc\",\"alignBottom\":\"Jos\",\"alignNone\":\"None\",\"invalidValue\":\"Valoare invalidă\",\"invalidHeight\":\"Înălțimea trebuie să fie un număr.\",\"invalidWidth\":\"Lățimea trebuie să fie un număr.\",\"invalidCssLength\":\"Valoarea specificată pentru câmpul \\\"%1\\\" trebuie să fie un număr pozitiv cu sau fără o unitate de măsură CSS (px, %, in, cm, mm, em, ex, pt, sau pc).\",\"invalidHtmlLength\":\"Valoarea specificată pentru câmpul \\\"%1\\\" trebuie să fie un număr pozitiv cu sau fără o unitate de măsură HTML (px sau %).\",\"invalidInlineStyle\":\"Valoarea specificată pentru stil trebuie să conțină una sau mai multe construcții de tipul \\\"name : value\\\", separate prin punct și virgulă.\",\"cssLengthTooltip\":\"Introduceți un număr în pixeli sau un număr cu o unitate de măsură CSS (px, %, in, cm, mm, em, ex, pt, sau pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, nu este disponibil</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Toate drepturile rezervate.\",\"dlgTitle\":\"Despre CKEeditor\",\"help\":\"Citește  $1 pentru ajutor.\",\"moreInfo\":\"Pentru informații despre licență, vă rugăm vizitați web site-ul nostru:\",\"title\":\"Despre CKEditor\",\"userGuide\":\"CKEditor Ghid Utilizator\"},\"basicstyles\":{\"bold\":\"Îngroşat (bold)\",\"italic\":\"Înclinat (italic)\",\"strike\":\"Tăiat (strike through)\",\"subscript\":\"Indice (subscript)\",\"superscript\":\"Putere (superscript)\",\"underline\":\"Subliniat (underline)\"},\"blockquote\":{\"toolbar\":\"Citat\"},\"clipboard\":{\"copy\":\"Copiază\",\"copyError\":\"Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+C).\",\"cut\":\"Taie\",\"cutError\":\"Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+X).\",\"paste\":\"Adaugă\",\"pasteArea\":\"Suprafața de adăugare\",\"pasteMsg\":\"Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<strong>Ctrl/Cmd+V</strong>) şi apăsaţi OK\",\"securityMsg\":\"Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.\",\"title\":\"Adaugă\"},\"contextmenu\":{\"options\":\"Opțiuni Meniu Contextual\"},\"button\":{\"selectedLabel\":\"%1 (Selectat)\"},\"toolbar\":{\"toolbarCollapse\":\"Micșorează Bara\",\"toolbarExpand\":\"Mărește Bara\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"Editează bara de unelte\"},\"elementspath\":{\"eleLabel\":\"Calea elementelor\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Formatare\",\"panelTitle\":\"Formatare\",\"tag_address\":\"Adresă\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Heading 1\",\"tag_h2\":\"Heading 2\",\"tag_h3\":\"Heading 3\",\"tag_h4\":\"Heading 4\",\"tag_h5\":\"Heading 5\",\"tag_h6\":\"Heading 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatat\"},\"horizontalrule\":{\"toolbar\":\"Inserează linie orizontală\"},\"image\":{\"alt\":\"Text alternativ\",\"border\":\"Margine\",\"btnUpload\":\"Trimite la server\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"Informaţii despre imagine\",\"linkTab\":\"Link (Legătură web)\",\"lockRatio\":\"Păstrează proporţiile\",\"menu\":\"Proprietăţile imaginii\",\"resetSize\":\"Resetează mărimea\",\"title\":\"Proprietăţile imaginii\",\"titleButton\":\"Proprietăţi buton imagine (Image Button)\",\"upload\":\"Încarcă\",\"urlMissing\":\"Sursa URL a imaginii lipsește.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"Bordura trebuie să fie un număr întreg.\",\"validateHSpace\":\"Hspace trebuie să fie un număr întreg.\",\"validateVSpace\":\"Vspace trebuie să fie un număr întreg.\"},\"indent\":{\"indent\":\"Creşte indentarea\",\"outdent\":\"Scade indentarea\"},\"fakeobjects\":{\"anchor\":\"Inserează/Editează ancoră\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"Câmp ascuns (HiddenField)\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"Tasta de acces\",\"advanced\":\"Avansat\",\"advisoryContentType\":\"Tipul consultativ al titlului\",\"advisoryTitle\":\"Titlul consultativ\",\"anchor\":{\"toolbar\":\"Inserează/Editează ancoră\",\"menu\":\"Proprietăţi ancoră\",\"title\":\"Proprietăţi ancoră\",\"name\":\"Numele ancorei\",\"errorName\":\"Vă rugăm scrieţi numele ancorei\",\"remove\":\"Elimină ancora\"},\"anchorId\":\"după Id-ul elementului\",\"anchorName\":\"după numele ancorei\",\"charset\":\"Setul de caractere al resursei legate\",\"cssClasses\":\"Clasele cu stilul paginii (CSS)\",\"emailAddress\":\"Adresă de e-mail\",\"emailBody\":\"Opțiuni Meniu Contextual\",\"emailSubject\":\"Subiectul mesajului\",\"id\":\"Id\",\"info\":\"Informaţii despre link (Legătură web)\",\"langCode\":\"Direcţia cuvintelor\",\"langDir\":\"Direcţia cuvintelor\",\"langDirLTR\":\"stânga-dreapta (LTR)\",\"langDirRTL\":\"dreapta-stânga (RTL)\",\"menu\":\"Editează Link\",\"name\":\"Nume\",\"noAnchors\":\"(Nicio ancoră disponibilă în document)\",\"noEmail\":\"Vă rugăm să scrieţi adresa de e-mail\",\"noUrl\":\"Vă rugăm să scrieţi URL-ul\",\"other\":\"<alt>\",\"popupDependent\":\"Dependent (Netscape)\",\"popupFeatures\":\"Proprietăţile ferestrei popup\",\"popupFullScreen\":\"Tot ecranul (Full Screen)(IE)\",\"popupLeft\":\"Poziţia la stânga\",\"popupLocationBar\":\"Bara de locaţie\",\"popupMenuBar\":\"Bara de meniu\",\"popupResizable\":\"Redimensionabil\",\"popupScrollBars\":\"Bare de derulare\",\"popupStatusBar\":\"Bara de status\",\"popupToolbar\":\"Bara de opţiuni\",\"popupTop\":\"Poziţia la dreapta\",\"rel\":\"Relație\",\"selectAnchor\":\"Selectaţi o ancoră\",\"styles\":\"Stil\",\"tabIndex\":\"Indexul tabului\",\"target\":\"Ţintă (Target)\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Numele frameului ţintă\",\"targetPopup\":\"<fereastra popup>\",\"targetPopupName\":\"Numele ferestrei popup\",\"title\":\"Link (Legătură web)\",\"toAnchor\":\"Ancoră în această pagină\",\"toEmail\":\"E-Mail\",\"toUrl\":\"URL\",\"toolbar\":\"Inserează/Editează link (legătură web)\",\"type\":\"Tipul link-ului (al legăturii web)\",\"unlink\":\"Înlătură link (legătură web)\",\"upload\":\"Încarcă\"},\"list\":{\"bulletedlist\":\"Inserează / Elimină Listă cu puncte\",\"numberedlist\":\"Inserează / Elimină Listă numerotată\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Mărește\",\"minimize\":\"Micșorează\"},\"pastetext\":{\"button\":\"Adaugă ca text simplu (Plain Text)\",\"title\":\"Adaugă ca text simplu (Plain Text)\"},\"pastefromword\":{\"confirmCleanup\":\"Textul pe care doriți să-l lipiți este din Word. Doriți curățarea textului înante de a-l adăuga?\",\"error\":\"Nu a fost posibilă curățarea datelor adăugate datorită unei erori interne\",\"title\":\"Adaugă din Word\",\"toolbar\":\"Adaugă din Word\"},\"removeformat\":{\"toolbar\":\"Înlătură formatarea\"},\"sourcearea\":{\"toolbar\":\"Sursa\"},\"specialchar\":{\"options\":\"Opțiuni caractere speciale\",\"title\":\"Selectează caracter special\",\"toolbar\":\"Inserează caracter special\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Stil\",\"panelTitle\":\"Formatarea stilurilor\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"Mărimea marginii\",\"caption\":\"Titlu (Caption)\",\"cell\":{\"menu\":\"Celulă\",\"insertBefore\":\"Inserează celulă înainte\",\"insertAfter\":\"Inserează celulă după\",\"deleteCell\":\"Şterge celule\",\"merge\":\"Uneşte celule\",\"mergeRight\":\"Uneşte la dreapta\",\"mergeDown\":\"Uneşte jos\",\"splitHorizontal\":\"Împarte celula pe orizontală\",\"splitVertical\":\"Împarte celula pe verticală\",\"title\":\"Proprietăți celulă\",\"cellType\":\"Tipul celulei\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Aliniament orizontal\",\"vAlign\":\"Aliniament vertical\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Culoare fundal\",\"borderColor\":\"Culoare bordură\",\"data\":\"Data\",\"header\":\"Antet\",\"yes\":\"Da\",\"no\":\"Nu\",\"invalidWidth\":\"Lățimea celulei trebuie să fie un număr.\",\"invalidHeight\":\"Înălțimea celulei trebuie să fie un număr.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Alege\"},\"cellPad\":\"Spaţiu în cadrul celulei\",\"cellSpace\":\"Spaţiu între celule\",\"column\":{\"menu\":\"Coloană\",\"insertBefore\":\"Inserează coloană înainte\",\"insertAfter\":\"Inserează coloană după\",\"deleteColumn\":\"Şterge celule\"},\"columns\":\"Coloane\",\"deleteTable\":\"Şterge tabel\",\"headers\":\"Antente\",\"headersBoth\":\"Ambele\",\"headersColumn\":\"Prima coloană\",\"headersNone\":\"Nimic\",\"headersRow\":\"Primul rând\",\"invalidBorder\":\"Dimensiunea bordurii trebuie să aibe un număr.\",\"invalidCellPadding\":\"Spațierea celulei trebuie sa fie un număr pozitiv\",\"invalidCellSpacing\":\"Spațierea celului trebuie să fie un număr pozitiv.\",\"invalidCols\":\"Numărul coloanelor trebuie să fie mai mare decât 0.\",\"invalidHeight\":\"Inaltimea celulei trebuie sa fie un numar.\",\"invalidRows\":\"Numărul rândurilor trebuie să fie mai mare decât 0.\",\"invalidWidth\":\"Lățimea tabelului trebuie să fie un număr.\",\"menu\":\"Proprietăţile tabelului\",\"row\":{\"menu\":\"Rând\",\"insertBefore\":\"Inserează rând înainte\",\"insertAfter\":\"Inserează rând după\",\"deleteRow\":\"Şterge rânduri\"},\"rows\":\"Rânduri\",\"summary\":\"Rezumat\",\"title\":\"Proprietăţile tabelului\",\"toolbar\":\"Tabel\",\"widthPc\":\"procente\",\"widthPx\":\"pixeli\",\"widthUnit\":\"unitate lățime\"},\"undo\":{\"redo\":\"Starea ulterioară (redo)\",\"undo\":\"Starea anterioară (undo)\"},\"wsc\":{\"btnIgnore\":\"Ignoră\",\"btnIgnoreAll\":\"Ignoră toate\",\"btnReplace\":\"Înlocuieşte\",\"btnReplaceAll\":\"Înlocuieşte tot\",\"btnUndo\":\"Starea anterioară (undo)\",\"changeTo\":\"Schimbă în\",\"errorLoading\":\"Eroare în lansarea aplicației service host %s.\",\"ieSpellDownload\":\"Unealta pentru verificat textul (Spell checker) neinstalată. Doriţi să o descărcaţi acum?\",\"manyChanges\":\"Verificarea textului terminată: 1% cuvinte modificate\",\"noChanges\":\"Verificarea textului terminată: Niciun cuvânt modificat\",\"noMispell\":\"Verificarea textului terminată: Nicio greşeală găsită\",\"noSuggestions\":\"- Fără sugestii -\",\"notAvailable\":\"Scuzați, dar serviciul nu este disponibil momentan.\",\"notInDic\":\"Nu e în dicţionar\",\"oneChange\":\"Verificarea textului terminată: Un cuvânt modificat\",\"progress\":\"Verificarea textului în desfăşurare...\",\"title\":\"Spell Checker\",\"toolbar\":\"Verifică scrierea textului\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/ru.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['ru']={\"editor\":\"Визуальный текстовый редактор\",\"editorPanel\":\"Визуальный редактор текста\",\"common\":{\"editorHelp\":\"Нажмите ALT-0 для открытия справки\",\"browseServer\":\"Выбор на сервере\",\"url\":\"Ссылка\",\"protocol\":\"Протокол\",\"upload\":\"Загрузка файла\",\"uploadSubmit\":\"Загрузить на сервер\",\"image\":\"Изображение\",\"flash\":\"Flash\",\"form\":\"Форма\",\"checkbox\":\"Чекбокс\",\"radio\":\"Радиокнопка\",\"textField\":\"Текстовое поле\",\"textarea\":\"Многострочное текстовое поле\",\"hiddenField\":\"Скрытое поле\",\"button\":\"Кнопка\",\"select\":\"Выпадающий список\",\"imageButton\":\"Кнопка-изображение\",\"notSet\":\"<не указано>\",\"id\":\"Идентификатор\",\"name\":\"Имя\",\"langDir\":\"Направление текста\",\"langDirLtr\":\"Слева направо (LTR)\",\"langDirRtl\":\"Справа налево (RTL)\",\"langCode\":\"Код языка\",\"longDescr\":\"Длинное описание ссылки\",\"cssClass\":\"Класс CSS\",\"advisoryTitle\":\"Заголовок\",\"cssStyle\":\"Стиль\",\"ok\":\"ОК\",\"cancel\":\"Отмена\",\"close\":\"Закрыть\",\"preview\":\"Предпросмотр\",\"resize\":\"Перетащите для изменения размера\",\"generalTab\":\"Основное\",\"advancedTab\":\"Дополнительно\",\"validateNumberFailed\":\"Это значение не является числом.\",\"confirmNewPage\":\"Несохранённые изменения будут потеряны! Вы действительно желаете перейти на другую страницу?\",\"confirmCancel\":\"Некоторые параметры были изменены. Вы уверены, что желаете закрыть без сохранения?\",\"options\":\"Параметры\",\"target\":\"Цель\",\"targetNew\":\"Новое окно (_blank)\",\"targetTop\":\"Главное окно (_top)\",\"targetSelf\":\"Текущее окно (_self)\",\"targetParent\":\"Родительское окно (_parent)\",\"langDirLTR\":\"Слева направо (LTR)\",\"langDirRTL\":\"Справа налево (RTL)\",\"styles\":\"Стиль\",\"cssClasses\":\"CSS классы\",\"width\":\"Ширина\",\"height\":\"Высота\",\"align\":\"Выравнивание\",\"alignLeft\":\"По левому краю\",\"alignRight\":\"По правому краю\",\"alignCenter\":\"По центру\",\"alignJustify\":\"По ширине\",\"alignTop\":\"Поверху\",\"alignMiddle\":\"Посередине\",\"alignBottom\":\"Понизу\",\"alignNone\":\"Нет\",\"invalidValue\":\"Недопустимое значение.\",\"invalidHeight\":\"Высота задается числом.\",\"invalidWidth\":\"Ширина задается числом.\",\"invalidCssLength\":\"Значение, указанное в поле \\\"%1\\\", должно быть положительным целым числом. Допускается указание единиц меры CSS (px, %, in, cm, mm, em, ex, pt или pc).\",\"invalidHtmlLength\":\"Значение, указанное в поле \\\"%1\\\", должно быть положительным целым числом. Допускается указание единиц меры HTML (px или %).\",\"invalidInlineStyle\":\"Значение, указанное для стиля элемента, должно состоять из одной или нескольких пар данных в формате \\\"параметр : значение\\\", разделённых точкой с запятой.\",\"cssLengthTooltip\":\"Введите значение в пикселях, либо число с корректной единицей меры CSS (px, %, in, cm, mm, em, ex, pt или pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, недоступно</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Все права защищены.\",\"dlgTitle\":\"О CKEditor\",\"help\":\"$1 содержит подробную справку по использованию.\",\"moreInfo\":\"Для получения информации о лицензии, пожалуйста, перейдите на наш сайт:\",\"title\":\"О CKEditor\",\"userGuide\":\"Руководство пользователя CKEditor\"},\"basicstyles\":{\"bold\":\"Полужирный\",\"italic\":\"Курсив\",\"strike\":\"Зачеркнутый\",\"subscript\":\"Подстрочный индекс\",\"superscript\":\"Надстрочный индекс\",\"underline\":\"Подчеркнутый\"},\"blockquote\":{\"toolbar\":\"Цитата\"},\"clipboard\":{\"copy\":\"Копировать\",\"copyError\":\"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по копированию текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+C).\",\"cut\":\"Вырезать\",\"cutError\":\"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по вырезке текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+X).\",\"paste\":\"Вставить\",\"pasteArea\":\"Зона для вставки\",\"pasteMsg\":\"Пожалуйста, вставьте текст в зону ниже, используя клавиатуру (<strong>Ctrl/Cmd+V</strong>) и нажмите кнопку \\\"OK\\\".\",\"securityMsg\":\"Настройки безопасности вашего браузера не разрешают редактору напрямую обращаться к буферу обмена. Вы должны вставить текст снова в это окно.\",\"title\":\"Вставить\"},\"contextmenu\":{\"options\":\"Параметры контекстного меню\"},\"button\":{\"selectedLabel\":\"%1 (Выбрано)\"},\"toolbar\":{\"toolbarCollapse\":\"Свернуть панель инструментов\",\"toolbarExpand\":\"Развернуть панель инструментов\",\"toolbarGroups\":{\"document\":\"Документ\",\"clipboard\":\"Буфер обмена / Отмена действий\",\"editing\":\"Корректировка\",\"forms\":\"Формы\",\"basicstyles\":\"Простые стили\",\"paragraph\":\"Абзац\",\"links\":\"Ссылки\",\"insert\":\"Вставка\",\"styles\":\"Стили\",\"colors\":\"Цвета\",\"tools\":\"Инструменты\"},\"toolbars\":\"Панели инструментов редактора\"},\"elementspath\":{\"eleLabel\":\"Путь элементов\",\"eleTitle\":\"Элемент %1\"},\"format\":{\"label\":\"Форматирование\",\"panelTitle\":\"Форматирование\",\"tag_address\":\"Адрес\",\"tag_div\":\"Обычное (div)\",\"tag_h1\":\"Заголовок 1\",\"tag_h2\":\"Заголовок 2\",\"tag_h3\":\"Заголовок 3\",\"tag_h4\":\"Заголовок 4\",\"tag_h5\":\"Заголовок 5\",\"tag_h6\":\"Заголовок 6\",\"tag_p\":\"Обычное\",\"tag_pre\":\"Моноширинное\"},\"horizontalrule\":{\"toolbar\":\"Вставить горизонтальную линию\"},\"image\":{\"alt\":\"Альтернативный текст\",\"border\":\"Граница\",\"btnUpload\":\"Загрузить на сервер\",\"button2Img\":\"Вы желаете преобразовать это изображение-кнопку в обычное изображение?\",\"hSpace\":\"Гориз. отступ\",\"img2Button\":\"Вы желаете преобразовать это обычное изображение в изображение-кнопку?\",\"infoTab\":\"Данные об изображении\",\"linkTab\":\"Ссылка\",\"lockRatio\":\"Сохранять пропорции\",\"menu\":\"Свойства изображения\",\"resetSize\":\"Вернуть обычные размеры\",\"title\":\"Свойства изображения\",\"titleButton\":\"Свойства изображения-кнопки\",\"upload\":\"Загрузить\",\"urlMissing\":\"Не указана ссылка на изображение.\",\"vSpace\":\"Вертик. отступ\",\"validateBorder\":\"Размер границ должен быть задан числом.\",\"validateHSpace\":\"Горизонтальный отступ должен быть задан числом.\",\"validateVSpace\":\"Вертикальный отступ должен быть задан числом.\"},\"indent\":{\"indent\":\"Увеличить отступ\",\"outdent\":\"Уменьшить отступ\"},\"fakeobjects\":{\"anchor\":\"Якорь\",\"flash\":\"Flash анимация\",\"hiddenfield\":\"Скрытое поле\",\"iframe\":\"iFrame\",\"unknown\":\"Неизвестный объект\"},\"link\":{\"acccessKey\":\"Клавиша доступа\",\"advanced\":\"Дополнительно\",\"advisoryContentType\":\"Тип содержимого\",\"advisoryTitle\":\"Заголовок\",\"anchor\":{\"toolbar\":\"Вставить / редактировать якорь\",\"menu\":\"Изменить якорь\",\"title\":\"Свойства якоря\",\"name\":\"Имя якоря\",\"errorName\":\"Пожалуйста, введите имя якоря\",\"remove\":\"Удалить якорь\"},\"anchorId\":\"По идентификатору\",\"anchorName\":\"По имени\",\"charset\":\"Кодировка ресурса\",\"cssClasses\":\"Классы CSS\",\"emailAddress\":\"Email адрес\",\"emailBody\":\"Текст сообщения\",\"emailSubject\":\"Тема сообщения\",\"id\":\"Идентификатор\",\"info\":\"Информация о ссылке\",\"langCode\":\"Код языка\",\"langDir\":\"Направление текста\",\"langDirLTR\":\"Слева направо (LTR)\",\"langDirRTL\":\"Справа налево (RTL)\",\"menu\":\"Редактировать ссылку\",\"name\":\"Имя\",\"noAnchors\":\"(В документе нет ни одного якоря)\",\"noEmail\":\"Пожалуйста, введите email адрес\",\"noUrl\":\"Пожалуйста, введите ссылку\",\"other\":\"<другой>\",\"popupDependent\":\"Зависимое (Netscape)\",\"popupFeatures\":\"Параметры всплывающего окна\",\"popupFullScreen\":\"Полноэкранное (IE)\",\"popupLeft\":\"Отступ слева\",\"popupLocationBar\":\"Панель адреса\",\"popupMenuBar\":\"Панель меню\",\"popupResizable\":\"Изменяемый размер\",\"popupScrollBars\":\"Полосы прокрутки\",\"popupStatusBar\":\"Строка состояния\",\"popupToolbar\":\"Панель инструментов\",\"popupTop\":\"Отступ сверху\",\"rel\":\"Отношение\",\"selectAnchor\":\"Выберите якорь\",\"styles\":\"Стиль\",\"tabIndex\":\"Последовательность перехода\",\"target\":\"Цель\",\"targetFrame\":\"<фрейм>\",\"targetFrameName\":\"Имя целевого фрейма\",\"targetPopup\":\"<всплывающее окно>\",\"targetPopupName\":\"Имя всплывающего окна\",\"title\":\"Ссылка\",\"toAnchor\":\"Ссылка на якорь в тексте\",\"toEmail\":\"Email\",\"toUrl\":\"Ссылка\",\"toolbar\":\"Вставить/Редактировать ссылку\",\"type\":\"Тип ссылки\",\"unlink\":\"Убрать ссылку\",\"upload\":\"Загрузка\"},\"list\":{\"bulletedlist\":\"Вставить / удалить маркированный список\",\"numberedlist\":\"Вставить / удалить нумерованный список\"},\"magicline\":{\"title\":\"Вставить здесь параграф\"},\"maximize\":{\"maximize\":\"Развернуть\",\"minimize\":\"Свернуть\"},\"pastetext\":{\"button\":\"Вставить только текст\",\"title\":\"Вставить только текст\"},\"pastefromword\":{\"confirmCleanup\":\"Текст, который вы желаете вставить, по всей видимости, был скопирован из Word. Следует ли очистить его перед вставкой?\",\"error\":\"Невозможно очистить вставленные данные из-за внутренней ошибки\",\"title\":\"Вставить из Word\",\"toolbar\":\"Вставить из Word\"},\"removeformat\":{\"toolbar\":\"Убрать форматирование\"},\"sourcearea\":{\"toolbar\":\"Источник\"},\"specialchar\":{\"options\":\"Выбор специального символа\",\"title\":\"Выберите специальный символ\",\"toolbar\":\"Вставить специальный символ\"},\"scayt\":{\"btn_about\":\"О SCAYT\",\"btn_dictionaries\":\"Словари\",\"btn_disable\":\"Отключить SCAYT\",\"btn_enable\":\"Включить SCAYT\",\"btn_langs\":\"Языки\",\"btn_options\":\"Настройки\",\"text_title\":\"Проверка орфографии по мере ввода (SCAYT)\"},\"stylescombo\":{\"label\":\"Стили\",\"panelTitle\":\"Стили форматирования\",\"panelTitle1\":\"Стили блока\",\"panelTitle2\":\"Стили элемента\",\"panelTitle3\":\"Стили объекта\"},\"table\":{\"border\":\"Размер границ\",\"caption\":\"Заголовок\",\"cell\":{\"menu\":\"Ячейка\",\"insertBefore\":\"Вставить ячейку слева\",\"insertAfter\":\"Вставить ячейку справа\",\"deleteCell\":\"Удалить ячейки\",\"merge\":\"Объединить ячейки\",\"mergeRight\":\"Объединить с правой\",\"mergeDown\":\"Объединить с нижней\",\"splitHorizontal\":\"Разделить ячейку по горизонтали\",\"splitVertical\":\"Разделить ячейку по вертикали\",\"title\":\"Свойства ячейки\",\"cellType\":\"Тип ячейки\",\"rowSpan\":\"Объединяет строк\",\"colSpan\":\"Объединяет колонок\",\"wordWrap\":\"Перенос по словам\",\"hAlign\":\"Горизонтальное выравнивание\",\"vAlign\":\"Вертикальное выравнивание\",\"alignBaseline\":\"По базовой линии\",\"bgColor\":\"Цвет фона\",\"borderColor\":\"Цвет границ\",\"data\":\"Данные\",\"header\":\"Заголовок\",\"yes\":\"Да\",\"no\":\"Нет\",\"invalidWidth\":\"Ширина ячейки должна быть числом.\",\"invalidHeight\":\"Высота ячейки должна быть числом.\",\"invalidRowSpan\":\"Количество объединяемых строк должно быть задано числом.\",\"invalidColSpan\":\"Количество объединяемых колонок должно быть задано числом.\",\"chooseColor\":\"Выберите\"},\"cellPad\":\"Внутренний отступ ячеек\",\"cellSpace\":\"Внешний отступ ячеек\",\"column\":{\"menu\":\"Колонка\",\"insertBefore\":\"Вставить колонку слева\",\"insertAfter\":\"Вставить колонку справа\",\"deleteColumn\":\"Удалить колонки\"},\"columns\":\"Колонки\",\"deleteTable\":\"Удалить таблицу\",\"headers\":\"Заголовки\",\"headersBoth\":\"Сверху и слева\",\"headersColumn\":\"Левая колонка\",\"headersNone\":\"Без заголовков\",\"headersRow\":\"Верхняя строка\",\"invalidBorder\":\"Размер границ должен быть числом.\",\"invalidCellPadding\":\"Внутренний отступ ячеек (cellpadding) должен быть числом.\",\"invalidCellSpacing\":\"Внешний отступ ячеек (cellspacing) должен быть числом.\",\"invalidCols\":\"Количество столбцов должно быть больше 0.\",\"invalidHeight\":\"Высота таблицы должна быть числом.\",\"invalidRows\":\"Количество строк должно быть больше 0.\",\"invalidWidth\":\"Ширина таблицы должна быть числом.\",\"menu\":\"Свойства таблицы\",\"row\":{\"menu\":\"Строка\",\"insertBefore\":\"Вставить строку сверху\",\"insertAfter\":\"Вставить строку снизу\",\"deleteRow\":\"Удалить строки\"},\"rows\":\"Строки\",\"summary\":\"Итоги\",\"title\":\"Свойства таблицы\",\"toolbar\":\"Таблица\",\"widthPc\":\"процентов\",\"widthPx\":\"пикселей\",\"widthUnit\":\"единица измерения\"},\"undo\":{\"redo\":\"Повторить\",\"undo\":\"Отменить\"},\"wsc\":{\"btnIgnore\":\"Пропустить\",\"btnIgnoreAll\":\"Пропустить всё\",\"btnReplace\":\"Заменить\",\"btnReplaceAll\":\"Заменить всё\",\"btnUndo\":\"Отменить\",\"changeTo\":\"Изменить на\",\"errorLoading\":\"Произошла ошибка при подключении к серверу проверки орфографии: %s.\",\"ieSpellDownload\":\"Модуль проверки орфографии не установлен. Хотите скачать его?\",\"manyChanges\":\"Проверка орфографии завершена. Изменено слов: %1\",\"noChanges\":\"Проверка орфографии завершена. Не изменено ни одного слова\",\"noMispell\":\"Проверка орфографии завершена. Ошибок не найдено\",\"noSuggestions\":\"- Варианты отсутствуют -\",\"notAvailable\":\"Извините, но в данный момент сервис недоступен.\",\"notInDic\":\"Отсутствует в словаре\",\"oneChange\":\"Проверка орфографии завершена. Изменено одно слово\",\"progress\":\"Орфография проверяется...\",\"title\":\"Проверка орфографии\",\"toolbar\":\"Проверить орфографию\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/si.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['si']={\"editor\":\"පොහොසත් වචන සංස්කරණ\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"උදව් ලබා ගැනීමට  ALT බොත්තම ඔබන්න\",\"browseServer\":\"සෙවුම් සේවාදායකය\",\"url\":\"URL\",\"protocol\":\"මුලාපත්‍රය\",\"upload\":\"උඩුගතකිරීම\",\"uploadSubmit\":\"සේවාදායකය වෙත යොමුකිරිම\",\"image\":\"රුපය\",\"flash\":\"දීප්තිය\",\"form\":\"පෝරමය\",\"checkbox\":\"ලකුණුකිරීමේ කොටුව\",\"radio\":\"තේරීම් \",\"textField\":\"ලියන ප්‍රදේශය\",\"textarea\":\"අකුරු \",\"hiddenField\":\"සැඟවුණු ප්‍රදේශය\",\"button\":\"බොත්තම\",\"select\":\"තෝරන්න \",\"imageButton\":\"රුප \",\"notSet\":\"<යොදා >\",\"id\":\"අංකය\",\"name\":\"නම\",\"langDir\":\"භාෂා දිශාව\",\"langDirLtr\":\"වමේසිට දකුණුට\",\"langDirRtl\":\"දකුණේ සිට වමට\",\"langCode\":\"භාෂා කේතය\",\"longDescr\":\"සම්පුර්න පැහැදිලි කිරීම\",\"cssClass\":\"විලාශ පත්‍ර පන්තිය\",\"advisoryTitle\":\"උපදෙස් \",\"cssStyle\":\"විලාසය\",\"ok\":\"නිරදි\",\"cancel\":\"අවලංගු කිරීම\",\"close\":\"වැසීම\",\"preview\":\"නැවත \",\"resize\":\"විශාලත්වය නැවත වෙනස් කිරීම\",\"generalTab\":\"පොදු කරුණු.\",\"advancedTab\":\"දීය\",\"validateNumberFailed\":\"මෙම වටිනාකම අංකයක් නොවේ\",\"confirmNewPage\":\"ආරක්ෂා නොකළ සියලුම දත්තයන් මැකියනුලැබේ. ඔබට නව පිටුවක් ලබා ගැනීමට අවශ්‍යද?\",\"confirmCancel\":\"ඇතම් විකල්පයන් වෙනස් කර ඇත. ඔබට මින් නික්මීමට අවශ්‍යද?\",\"options\":\" විකල්ප\",\"target\":\"අරමුණ\",\"targetNew\":\"නව කව්ළුව\",\"targetTop\":\"වැදගත් කව්ළුව\",\"targetSelf\":\"එම කව්ළුව(_තම\\\\\\\\)\",\"targetParent\":\"මව් කව්ළුව(_)\",\"langDirLTR\":\"වමේසිට දකුණුට\",\"langDirRTL\":\"දකුණේ සිට වමට\",\"styles\":\"විලාසය\",\"cssClasses\":\"විලාසපත්‍ර පන්තිය\",\"width\":\"පළල\",\"height\":\"උස\",\"align\":\"ගැලපුම\",\"alignLeft\":\"වම\",\"alignRight\":\"දකුණ\",\"alignCenter\":\"මධ්‍ය\",\"alignJustify\":\"Justify\",\"alignTop\":\"ඉ\",\"alignMiddle\":\"මැද\",\"alignBottom\":\"පහල\",\"alignNone\":\"None\",\"invalidValue\":\"වැරදී වටිනාකමකි\",\"invalidHeight\":\"උස අංකයක් විය යුතුය\",\"invalidWidth\":\"පළල අංකයක් විය යුතුය\",\"invalidCssLength\":\"වටිනාකමක් නිරූපණය කිරීම \\\"%1\\\" ප්‍රදේශය ධන සංක්‍යාත්මක වටිනාකමක් හෝ  නිවරදි නොවන  CSS මිනුම් එකක(px, %, in, cm, mm, em, ex, pt, pc)\",\"invalidHtmlLength\":\"වටිනාකමක් නිරූපණය කිරීම \\\"%1\\\" ප්‍රදේශය ධන සංක්‍යාත්මක වටිනාකමක් හෝ  නිවරදි නොවන  HTML මිනුම් එකක (px හෝ %).\",\"invalidInlineStyle\":\"වටිනාකමක් නිරූපණය කිරීම  පේළි විලාසයයට ආකෘතිය  අනතර්ග විය යුතය  \\\"නම : වටිනාකම\\\", තිත් කොමාවකින් වෙන් වෙන ලද.\",\"cssLengthTooltip\":\"සංක්‍යා ඇතුලත් කිරීමේදී වටිනාකම තිත් ප්‍රමාණය නිවරදි CSS  ඒකක(තිත්, %, අඟල්,සෙමි, mm, em, ex, pt, pc)\",\"unavailable\":\"%1<span පන්තිය=\\\"ළඟා වියහැකි ද බලන්න\\\">, නොමැතිනම්</span>\"},\"about\":{\"copy\":\"පිටපත් අයිතිය සහ පිටපත් කිරීම;$1 .සියලුම හිමිකම් ඇවිරිණි.\",\"dlgTitle\":\"CKEditor ගැන විස්තර\",\"help\":\"උදව් සඳහා $1 \",\"moreInfo\":\"බලපත්‍ර තොරතුරු සදහා කරුණාකර අපගේ විද්‍යුත් ලිපිනයට පිවිසෙන්න:\",\"title\":\"CKEditor ගැන විස්තර\",\"userGuide\":\"CKEditor භාවිතා කිරීම පිළිබඳ \"},\"basicstyles\":{\"bold\":\"තද අකුරින් ලියනලද\",\"italic\":\"බැධීඅකුරින් ලියන ලද\",\"strike\":\"Strikethrough\",\"subscript\":\"Subscript\",\"superscript\":\"Superscript\",\"underline\":\"යටින් ඉරි අදින ලද\"},\"blockquote\":{\"toolbar\":\"උද්ධෘත කොටස\"},\"clipboard\":{\"copy\":\"පිටපත් කරන්න\",\"copyError\":\"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).\",\"cut\":\"කපාගන්න\",\"cutError\":\"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).\",\"paste\":\"අලවන්න\",\"pasteArea\":\"අලවන ප්‍රදේශ\",\"pasteMsg\":\"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK\",\"securityMsg\":\"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.\",\"title\":\"අලවන්න\"},\"contextmenu\":{\"options\":\"අනතර්ග ලේඛණ  විකල්ප\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"මෙවලම් තීරුව හැකුලුම.\",\"toolbarExpand\":\"මෙවලම් තීරුව දීගහැරුම\",\"toolbarGroups\":{\"document\":\"ලිපිය\",\"clipboard\":\"ඇමිණුම වෙනස් කිරීම\",\"editing\":\"සංස්කරණය\",\"forms\":\"පෝරමය\",\"basicstyles\":\"මුලික විලාසය\",\"paragraph\":\"චේදය\",\"links\":\"සබැඳිය\",\"insert\":\"ඇතුලත් කිරීම\",\"styles\":\"විලාසය\",\"colors\":\"වර්ණය\",\"tools\":\"මෙවලම්\"},\"toolbars\":\"සංස්කරණ මෙවලම් තීරුව\"},\"elementspath\":{\"eleLabel\":\"මුලද්‍රව්‍ය මාර්ගය\",\"eleTitle\":\"%1 මුල\"},\"format\":{\"label\":\"ආකෘතිය\",\"panelTitle\":\"චේදයේ \",\"tag_address\":\"ලිපිනය\",\"tag_div\":\"සාමාන්‍ය(DIV)\",\"tag_h1\":\"ශීර්ෂය 1\",\"tag_h2\":\"ශීර්ෂය 2\",\"tag_h3\":\"ශීර්ෂය 3\",\"tag_h4\":\"ශීර්ෂය 4\",\"tag_h5\":\"ශීර්ෂය 5\",\"tag_h6\":\"ශීර්ෂය 6\",\"tag_p\":\"සාමාන්‍ය\",\"tag_pre\":\"ආකෘතියන්\"},\"horizontalrule\":{\"toolbar\":\"තිරස් රේඛාවක් ඇතුලත් කරන්න\"},\"image\":{\"alt\":\"විකල්ප \",\"border\":\"සීමාවවල \",\"btnUpload\":\"සේවාදායකය වෙත යොමුකිරිම\",\"button2Img\":\"ඔබට තෝරන ලද රුපය පරිවර්තනය කිරීමට අවශ්‍යද?\",\"hSpace\":\"HSpace\",\"img2Button\":\"ඔබට තෝරන ලද රුපය පරිවර්තනය කිරීමට අවශ්‍යද?\",\"infoTab\":\"රුපයේ තොරතුරු\",\"linkTab\":\"සබැඳිය\",\"lockRatio\":\"නවතන අනුපාතය \",\"menu\":\"රුපයේ ගුණ\",\"resetSize\":\"නැවතත් විශාලත්වය වෙනස් කිරීම\",\"title\":\"රුපයේ \",\"titleButton\":\"රුප බොත්තමේ ගුණ\",\"upload\":\"උඩුගතකිරීම\",\"urlMissing\":\"රුප මුලාශ්‍ර URL නැත.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"මාඉම් සම්පුර්ණ සංක්‍යාවක් විය යුතුය.\",\"validateHSpace\":\"HSpace  සම්පුර්ණ සංක්‍යාවක් විය යුතුය\",\"validateVSpace\":\"VSpace සම්පුර්ණ සංක්‍යාවක් විය යුතුය.\"},\"indent\":{\"indent\":\"අතර පරතරය වැඩිකරන්න\",\"outdent\":\"අතර පරතරය අඩුකරන්න\"},\"fakeobjects\":{\"anchor\":\"ආධාරය\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"සැඟවුණු ප්‍රදේශය\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"ප්‍රවේශ  යතුර\",\"advanced\":\"දීය\",\"advisoryContentType\":\"උපදේශාත්මක අන්තර්ගත ආකාරය\",\"advisoryTitle\":\"උපදේශාත්මක නාමය\",\"anchor\":{\"toolbar\":\"ආධාරය\",\"menu\":\"ආධාරය වෙනස් කිරීම\",\"title\":\"ආධාරක \",\"name\":\"ආධාරකයේ නාමය\",\"errorName\":\"කරුණාකර ආධාරකයේ නාමය ඇතුල් කරන්න\",\"remove\":\"ආධාරකය ඉවත් කිරීම\"},\"anchorId\":\"By Element Id\",\"anchorName\":\"By Anchor Name\",\"charset\":\"Linked Resource Charset\",\"cssClasses\":\"විලාසපත්‍ර පන්තිය\",\"emailAddress\":\"E-Mail Address\",\"emailBody\":\"Message Body\",\"emailSubject\":\"Message Subject\",\"id\":\"අංකය\",\"info\":\"Link Info\",\"langCode\":\"භාෂා කේතය\",\"langDir\":\"භාෂා දිශාව\",\"langDirLTR\":\"වමේසිට දකුණුට\",\"langDirRTL\":\"දකුණේ සිට වමට\",\"menu\":\"Edit Link\",\"name\":\"නම\",\"noAnchors\":\"(No anchors available in the document)\",\"noEmail\":\"Please type the e-mail address\",\"noUrl\":\"Please type the link URL\",\"other\":\"<other>\",\"popupDependent\":\"Dependent (Netscape)\",\"popupFeatures\":\"Popup Window Features\",\"popupFullScreen\":\"Full Screen (IE)\",\"popupLeft\":\"Left Position\",\"popupLocationBar\":\"Location Bar\",\"popupMenuBar\":\"Menu Bar\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"Scroll Bars\",\"popupStatusBar\":\"Status Bar\",\"popupToolbar\":\"Toolbar\",\"popupTop\":\"Top Position\",\"rel\":\"Relationship\",\"selectAnchor\":\"Select an Anchor\",\"styles\":\"විලාසය\",\"tabIndex\":\"Tab Index\",\"target\":\"අරමුණ\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Target Frame Name\",\"targetPopup\":\"<popup window>\",\"targetPopupName\":\"Popup Window Name\",\"title\":\"සබැඳිය\",\"toAnchor\":\"Link to anchor in the text\",\"toEmail\":\"E-mail\",\"toUrl\":\"URL\",\"toolbar\":\"සබැඳිය\",\"type\":\"Link Type\",\"unlink\":\"Unlink\",\"upload\":\"උඩුගතකිරීම\"},\"list\":{\"bulletedlist\":\"ඇතුලත් / ඉවත් කිරීම ලඉස්තුව\",\"numberedlist\":\"ඇතුලත් / ඉවත් කිරීම අන්න්කිත ලඉස්තුව\"},\"magicline\":{\"title\":\"චේදය ඇතුලත් කරන්න\"},\"maximize\":{\"maximize\":\"විශාල කිරීම\",\"minimize\":\"කුඩා කිරීම\"},\"pastetext\":{\"button\":\"සාමාන්‍ය අක්ෂර ලෙස අලවන්න\",\"title\":\"සාමාන්‍ය අක්ෂර ලෙස අලවන්න\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"වචන වලින් අලවන්න\",\"toolbar\":\"වචන වලින් අලවන්න\"},\"removeformat\":{\"toolbar\":\"සැකසීම වෙනස් කරන්න\"},\"sourcearea\":{\"toolbar\":\"මුලාශ්‍රය\"},\"specialchar\":{\"options\":\"විශේෂ  ගුණාංග වීකල්ප\",\"title\":\"විශේෂ  ගුණාංග \",\"toolbar\":\"විශේෂ ගුණාංග ඇතුලත් \"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"විලාසය\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"සීමාවවල විශාලත්වය\",\"caption\":\"Caption\",\"cell\":{\"menu\":\"කොටුව\",\"insertBefore\":\"පෙර කොටුවක් ඇතුල්කිරිම\",\"insertAfter\":\"පසුව කොටුවක් ඇතුලත් \",\"deleteCell\":\"කොටුව මැකීම\",\"merge\":\"කොටු එකට යාකිරිම\",\"mergeRight\":\"දකුණට \",\"mergeDown\":\"පහලට \",\"splitHorizontal\":\"තිරස්ව කොටු පැතිරීම\",\"splitVertical\":\"සිරස්ව කොටු පැතිරීම\",\"title\":\"කොටු \",\"cellType\":\"කොටු වර්ගය\",\"rowSpan\":\"පේළි පළල\",\"colSpan\":\"සිරස් පළල\",\"wordWrap\":\"වචන ගැලපුම\",\"hAlign\":\"තිරස්ව \",\"vAlign\":\"සිරස්ව \",\"alignBaseline\":\"පාද රේඛාව\",\"bgColor\":\"පසුබිම් වර්ණය\",\"borderColor\":\"මායිම් \",\"data\":\"Data\",\"header\":\"ශීර්ෂක\",\"yes\":\"ඔව්\",\"no\":\"නැත\",\"invalidWidth\":\"කොටු පළල සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය\",\"invalidHeight\":\"කොටු උස සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"තෝරන්න\"},\"cellPad\":\"Cell padding\",\"cellSpace\":\"Cell spacing\",\"column\":{\"menu\":\"Column\",\"insertBefore\":\"Insert Column Before\",\"insertAfter\":\"Insert Column After\",\"deleteColumn\":\"Delete Columns\"},\"columns\":\"සිරස් \",\"deleteTable\":\"වගුව මකන්න\",\"headers\":\"ශීර්ෂක\",\"headersBoth\":\"දෙකම\",\"headersColumn\":\"පළමූ සිරස් තීරුව\",\"headersNone\":\"කිසිවක්ම නොවේ\",\"headersRow\":\"පළමූ පේළිය\",\"invalidBorder\":\"Border size must be a number.\",\"invalidCellPadding\":\"Cell padding must be a positive number.\",\"invalidCellSpacing\":\"Cell spacing must be a positive number.\",\"invalidCols\":\"Number of columns must be a number greater than 0.\",\"invalidHeight\":\"Table height must be a number.\",\"invalidRows\":\"Number of rows must be a number greater than 0.\",\"invalidWidth\":\"Table width must be a number.\",\"menu\":\"Table Properties\",\"row\":{\"menu\":\"Row\",\"insertBefore\":\"Insert Row Before\",\"insertAfter\":\"Insert Row After\",\"deleteRow\":\"Delete Rows\"},\"rows\":\"Rows\",\"summary\":\"Summary\",\"title\":\"Table Properties\",\"toolbar\":\"Table\",\"widthPc\":\"percent\",\"widthPx\":\"pixels\",\"widthUnit\":\"width unit\"},\"undo\":{\"redo\":\"නැවත කිරීම\",\"undo\":\"වෙනස් කිරීම\"},\"wsc\":{\"btnIgnore\":\"Ignore\",\"btnIgnoreAll\":\"Ignore All\",\"btnReplace\":\"Replace\",\"btnReplaceAll\":\"Replace All\",\"btnUndo\":\"Undo\",\"changeTo\":\"Change to\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Spell checker not installed. Do you want to download it now?\",\"manyChanges\":\"Spell check complete: %1 words changed\",\"noChanges\":\"Spell check complete: No words changed\",\"noMispell\":\"Spell check complete: No misspellings found\",\"noSuggestions\":\"- No suggestions -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Not in dictionary\",\"oneChange\":\"Spell check complete: One word changed\",\"progress\":\"Spell check in progress...\",\"title\":\"Spell Checker\",\"toolbar\":\"Check Spelling\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/sk.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['sk']={\"editor\":\"Editor formátovaného textu\",\"editorPanel\":\"Panel editora formátovaného textu\",\"common\":{\"editorHelp\":\"Stlačením ALT 0 spustiť pomocníka\",\"browseServer\":\"Prehliadať server\",\"url\":\"URL\",\"protocol\":\"Protokol\",\"upload\":\"Odoslať\",\"uploadSubmit\":\"Odoslať na server\",\"image\":\"Obrázok\",\"flash\":\"Flash\",\"form\":\"Formulár\",\"checkbox\":\"Zaškrtávacie pole\",\"radio\":\"Prepínač\",\"textField\":\"Textové pole\",\"textarea\":\"Textová oblasť\",\"hiddenField\":\"Skryté pole\",\"button\":\"Tlačidlo\",\"select\":\"Rozbaľovací zoznam\",\"imageButton\":\"Obrázkové tlačidlo\",\"notSet\":\"<nenastavené>\",\"id\":\"Id\",\"name\":\"Meno\",\"langDir\":\"Orientácia jazyka\",\"langDirLtr\":\"Zľava doprava (LTR)\",\"langDirRtl\":\"Sprava doľava (RTL)\",\"langCode\":\"Kód jazyka\",\"longDescr\":\"Dlhý popis URL\",\"cssClass\":\"Trieda štýlu\",\"advisoryTitle\":\"Pomocný titulok\",\"cssStyle\":\"Štýl\",\"ok\":\"OK\",\"cancel\":\"Zrušiť\",\"close\":\"Zatvorit\",\"preview\":\"Náhľad\",\"resize\":\"Zmeniť veľkosť\",\"generalTab\":\"Hlavné\",\"advancedTab\":\"Rozšírené\",\"validateNumberFailed\":\"Hodnota nie je číslo.\",\"confirmNewPage\":\"Prajete si načítat novú stránku? Všetky neuložené zmeny budú stratené. \",\"confirmCancel\":\"Niektore možnosti boli zmenené. Naozaj chcete zavrieť okno?\",\"options\":\"Možnosti\",\"target\":\"Cieľ\",\"targetNew\":\"Nové okno (_blank)\",\"targetTop\":\"Najvrchnejšie okno (_top)\",\"targetSelf\":\"To isté okno (_self)\",\"targetParent\":\"Rodičovské okno (_parent)\",\"langDirLTR\":\"Zľava doprava (LTR)\",\"langDirRTL\":\"Sprava doľava (RTL)\",\"styles\":\"Štýl\",\"cssClasses\":\"Triedy štýlu\",\"width\":\"Šírka\",\"height\":\"Výška\",\"align\":\"Zarovnanie\",\"alignLeft\":\"Vľavo\",\"alignRight\":\"Vpravo\",\"alignCenter\":\"Na stred\",\"alignJustify\":\"Zarovnať do bloku\",\"alignTop\":\"Nahor\",\"alignMiddle\":\"Na stred\",\"alignBottom\":\"Dole\",\"alignNone\":\"Žiadne\",\"invalidValue\":\"Neplatná hodnota.\",\"invalidHeight\":\"Výška musí byť číslo.\",\"invalidWidth\":\"Šírka musí byť číslo.\",\"invalidCssLength\":\"Špecifikovaná hodnota pre pole \\\"%1\\\" musí byť kladné číslo s alebo bez platnej CSS mernej jednotky (px, %, in, cm, mm, em, ex, pt alebo pc).\",\"invalidHtmlLength\":\"Špecifikovaná hodnota pre pole \\\"%1\\\" musí byť kladné číslo s alebo bez platnej HTML mernej jednotky (px alebo %).\",\"invalidInlineStyle\":\"Zadaná hodnota pre inline štýl musí pozostávať s jedného, alebo viac dvojíc formátu \\\"názov: hodnota\\\", oddelených bodkočiarkou.\",\"cssLengthTooltip\":\"Vložte číslo pre hodnotu v pixeloch alebo číslo so správnou CSS jednotou (px, %, in, cm, mm, em, ex, pt alebo pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, nedostupný</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Všetky práva vyhradené.\",\"dlgTitle\":\"O CKEditor-e\",\"help\":\"Zaškrtnite $1 pre pomoc.\",\"moreInfo\":\"Pre informácie o licenciách, prosíme, navštívte našu web stránku:\",\"title\":\"O CKEditor-e\",\"userGuide\":\"Používateľská príručka KCEditor-a\"},\"basicstyles\":{\"bold\":\"Tučné\",\"italic\":\"Kurzíva\",\"strike\":\"Prečiarknuté\",\"subscript\":\"Dolný index\",\"superscript\":\"Horný index\",\"underline\":\"Podčiarknuté\"},\"blockquote\":{\"toolbar\":\"Citácia\"},\"clipboard\":{\"copy\":\"Kopírovať\",\"copyError\":\"Bezpečnostné nastavenia vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu kopírovania. Použite na to klávesnicu (Ctrl/Cmd+C).\",\"cut\":\"Vystrihnúť\",\"cutError\":\"Bezpečnostné nastavenia vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu vystrihnutia. Použite na to klávesnicu (Ctrl/Cmd+X).\",\"paste\":\"Vložiť\",\"pasteArea\":\"Miesto na vloženie\",\"pasteMsg\":\"Použitím klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) vložte text do rámčeka a stlačte OK.\",\"securityMsg\":\"Kvôli bezpečnostným nastaveniam vášho prehliadača editor nemôže pristupovať k schránke na kopírovanie priamo. Vložte to preto do tohto okna.\",\"title\":\"Vložiť\"},\"contextmenu\":{\"options\":\"Možnosti kontextového menu\"},\"button\":{\"selectedLabel\":\"%1 (Vybrané)\"},\"toolbar\":{\"toolbarCollapse\":\"Zbaliť lištu nástrojov\",\"toolbarExpand\":\"Rozbaliť lištu nástrojov\",\"toolbarGroups\":{\"document\":\"Dokument\",\"clipboard\":\"Schránka pre kopírovanie/Späť\",\"editing\":\"Upravovanie\",\"forms\":\"Formuláre\",\"basicstyles\":\"Základné štýly\",\"paragraph\":\"Odsek\",\"links\":\"Odkazy\",\"insert\":\"Vložiť\",\"styles\":\"Štýly\",\"colors\":\"Farby\",\"tools\":\"Nástroje\"},\"toolbars\":\"Lišty nástrojov editora\"},\"elementspath\":{\"eleLabel\":\"Cesta prvkov\",\"eleTitle\":\"%1 prvok\"},\"format\":{\"label\":\"Formát\",\"panelTitle\":\"Odsek\",\"tag_address\":\"Adresa\",\"tag_div\":\"Normálny (DIV)\",\"tag_h1\":\"Nadpis 1\",\"tag_h2\":\"Nadpis 2\",\"tag_h3\":\"Nadpis 3\",\"tag_h4\":\"Nadpis 4\",\"tag_h5\":\"Nadpis 5\",\"tag_h6\":\"Nadpis 6\",\"tag_p\":\"Normálny\",\"tag_pre\":\"Formátovaný\"},\"horizontalrule\":{\"toolbar\":\"Vložiť vodorovnú čiaru\"},\"image\":{\"alt\":\"Alternatívny text\",\"border\":\"Rám (border)\",\"btnUpload\":\"Odoslať to na server\",\"button2Img\":\"Chcete zmeniť vybrané obrázkové tlačidlo na jednoduchý obrázok?\",\"hSpace\":\"H-medzera\",\"img2Button\":\"Chcete zmeniť vybraný obrázok na obrázkové tlačidlo?\",\"infoTab\":\"Informácie o obrázku\",\"linkTab\":\"Odkaz\",\"lockRatio\":\"Pomer zámky\",\"menu\":\"Vlastnosti obrázka\",\"resetSize\":\"Pôvodná veľkosť\",\"title\":\"Vlastnosti obrázka\",\"titleButton\":\"Vlastnosti obrázkového tlačidla\",\"upload\":\"Nahrať\",\"urlMissing\":\"Chýba URL zdroja obrázka.\",\"vSpace\":\"V-medzera\",\"validateBorder\":\"Rám (border) musí byť celé číslo.\",\"validateHSpace\":\"H-medzera musí byť celé číslo.\",\"validateVSpace\":\"V-medzera musí byť celé číslo.\"},\"indent\":{\"indent\":\"Zväčšiť odsadenie\",\"outdent\":\"Zmenšiť odsadenie\"},\"fakeobjects\":{\"anchor\":\"Kotva\",\"flash\":\"Flash animácia\",\"hiddenfield\":\"Skryté pole\",\"iframe\":\"IFrame\",\"unknown\":\"Neznámy objekt\"},\"link\":{\"acccessKey\":\"Prístupový kľúč\",\"advanced\":\"Rozšírené\",\"advisoryContentType\":\"Pomocný typ obsahu\",\"advisoryTitle\":\"Pomocný titulok\",\"anchor\":{\"toolbar\":\"Kotva\",\"menu\":\"Upraviť kotvu\",\"title\":\"Vlastnosti kotvy\",\"name\":\"Názov kotvy\",\"errorName\":\"Zadajte prosím názov kotvy\",\"remove\":\"Odstrániť kotvu\"},\"anchorId\":\"Podľa Id objektu\",\"anchorName\":\"Podľa mena kotvy\",\"charset\":\"Priradená znaková sada\",\"cssClasses\":\"Triedy štýlu\",\"emailAddress\":\"E-Mailová adresa\",\"emailBody\":\"Telo správy\",\"emailSubject\":\"Predmet správy\",\"id\":\"Id\",\"info\":\"Informácie o odkaze\",\"langCode\":\"Orientácia jazyka\",\"langDir\":\"Orientácia jazyka\",\"langDirLTR\":\"Zľava doprava (LTR)\",\"langDirRTL\":\"Sprava doľava (RTL)\",\"menu\":\"Upraviť odkaz\",\"name\":\"Názov\",\"noAnchors\":\"(V dokumente nie sú dostupné žiadne kotvy)\",\"noEmail\":\"Zadajte prosím e-mailovú adresu\",\"noUrl\":\"Zadajte prosím URL odkazu\",\"other\":\"<iný>\",\"popupDependent\":\"Závislosť (Netscape)\",\"popupFeatures\":\"Vlastnosti vyskakovacieho okna\",\"popupFullScreen\":\"Celá obrazovka (IE)\",\"popupLeft\":\"Ľavý okraj\",\"popupLocationBar\":\"Panel umiestnenia (location bar)\",\"popupMenuBar\":\"Panel ponuky (menu bar)\",\"popupResizable\":\"Meniteľná veľkosť (resizable)\",\"popupScrollBars\":\"Posuvníky (scroll bars)\",\"popupStatusBar\":\"Stavový riadok (status bar)\",\"popupToolbar\":\"Panel nástrojov (toolbar)\",\"popupTop\":\"Horný okraj\",\"rel\":\"Vzťah (rel)\",\"selectAnchor\":\"Vybrať kotvu\",\"styles\":\"Štýl\",\"tabIndex\":\"Poradie prvku (tab index)\",\"target\":\"Cieľ\",\"targetFrame\":\"<rámec>\",\"targetFrameName\":\"Názov rámu cieľa\",\"targetPopup\":\"<vyskakovacie okno>\",\"targetPopupName\":\"Názov vyskakovacieho okna\",\"title\":\"Odkaz\",\"toAnchor\":\"Odkaz na kotvu v texte\",\"toEmail\":\"E-mail\",\"toUrl\":\"URL\",\"toolbar\":\"Odkaz\",\"type\":\"Typ odkazu\",\"unlink\":\"Odstrániť odkaz\",\"upload\":\"Nahrať\"},\"list\":{\"bulletedlist\":\"Vložiť/odstrániť zoznam s odrážkami\",\"numberedlist\":\"Vložiť/odstrániť číslovaný zoznam\"},\"magicline\":{\"title\":\"Odsek vložiť sem\"},\"maximize\":{\"maximize\":\"Maximalizovať\",\"minimize\":\"Minimalizovať\"},\"pastetext\":{\"button\":\"Vložiť ako čistý text\",\"title\":\"Vložiť ako čistý text\"},\"pastefromword\":{\"confirmCleanup\":\"Zdá sa, že vkladaný text pochádza z programu MS Word. Chcete ho pred vkladaním automaticky vyčistiť?\",\"error\":\"Kvôli internej chybe nebolo možné vložené dáta vyčistiť\",\"title\":\"Vložiť z Wordu\",\"toolbar\":\"Vložiť z Wordu\"},\"removeformat\":{\"toolbar\":\"Odstrániť formátovanie\"},\"sourcearea\":{\"toolbar\":\"Zdroj\"},\"specialchar\":{\"options\":\"Možnosti špeciálneho znaku\",\"title\":\"Výber špeciálneho znaku\",\"toolbar\":\"Vložiť špeciálny znak\"},\"scayt\":{\"btn_about\":\"O KPPP (Kontrola pravopisu počas písania)\",\"btn_dictionaries\":\"Slovníky\",\"btn_disable\":\"Zakázať  KPPP (Kontrola pravopisu počas písania)\",\"btn_enable\":\"Povoliť KPPP (Kontrola pravopisu počas písania)\",\"btn_langs\":\"Jazyky\",\"btn_options\":\"Možnosti\",\"text_title\":\"Kontrola pravopisu počas písania\"},\"stylescombo\":{\"label\":\"Štýly\",\"panelTitle\":\"Formátovanie štýlov\",\"panelTitle1\":\"Štýly bloku\",\"panelTitle2\":\"Vnútroriadkové (inline) štýly\",\"panelTitle3\":\"Štýly objeku\"},\"table\":{\"border\":\"Šírka orámovania\",\"caption\":\"Popis\",\"cell\":{\"menu\":\"Bunka\",\"insertBefore\":\"Vložiť bunku pred\",\"insertAfter\":\"Vložiť bunku za\",\"deleteCell\":\"Vymazať bunky\",\"merge\":\"Zlúčiť bunky\",\"mergeRight\":\"Zlúčiť doprava\",\"mergeDown\":\"Zlúčiť dole\",\"splitHorizontal\":\"Rozdeliť bunky horizontálne\",\"splitVertical\":\"Rozdeliť bunky vertikálne\",\"title\":\"Vlastnosti bunky\",\"cellType\":\"Typ bunky\",\"rowSpan\":\"Rozsah riadkov\",\"colSpan\":\"Rozsah stĺpcov\",\"wordWrap\":\"Zalamovanie riadkov\",\"hAlign\":\"Horizontálne zarovnanie\",\"vAlign\":\"Vertikálne zarovnanie\",\"alignBaseline\":\"Základná čiara (baseline)\",\"bgColor\":\"Farba pozadia\",\"borderColor\":\"Farba orámovania\",\"data\":\"Dáta\",\"header\":\"Hlavička\",\"yes\":\"Áno\",\"no\":\"Nie\",\"invalidWidth\":\"Šírka bunky musí byť číslo.\",\"invalidHeight\":\"Výška bunky musí byť číslo.\",\"invalidRowSpan\":\"Rozsah riadkov musí byť celé číslo.\",\"invalidColSpan\":\"Rozsah stĺpcov musí byť celé číslo.\",\"chooseColor\":\"Vybrať\"},\"cellPad\":\"Odsadenie obsahu (cell padding)\",\"cellSpace\":\"Vzdialenosť buniek (cell spacing)\",\"column\":{\"menu\":\"Stĺpec\",\"insertBefore\":\"Vložiť stĺpec pred\",\"insertAfter\":\"Vložiť stĺpec po\",\"deleteColumn\":\"Zmazať stĺpce\"},\"columns\":\"Stĺpce\",\"deleteTable\":\"Vymazať tabuľku\",\"headers\":\"Hlavička\",\"headersBoth\":\"Obe\",\"headersColumn\":\"Prvý stĺpec\",\"headersNone\":\"Žiadne\",\"headersRow\":\"Prvý riadok\",\"invalidBorder\":\"Šírka orámovania musí byť číslo.\",\"invalidCellPadding\":\"Odsadenie v bunkách (cell padding) musí byť kladné číslo.\",\"invalidCellSpacing\":\"Medzera mädzi bunkami (cell spacing) musí byť kladné číslo.\",\"invalidCols\":\"Počet stĺpcov musí byť číslo väčšie ako 0.\",\"invalidHeight\":\"Výška tabuľky musí byť číslo.\",\"invalidRows\":\"Počet riadkov musí byť číslo väčšie ako 0.\",\"invalidWidth\":\"Širka tabuľky musí byť číslo.\",\"menu\":\"Vlastnosti tabuľky\",\"row\":{\"menu\":\"Riadok\",\"insertBefore\":\"Vložiť riadok pred\",\"insertAfter\":\"Vložiť riadok po\",\"deleteRow\":\"Vymazať riadky\"},\"rows\":\"Riadky\",\"summary\":\"Prehľad\",\"title\":\"Vlastnosti tabuľky\",\"toolbar\":\"Tabuľka\",\"widthPc\":\"percent\",\"widthPx\":\"pixelov\",\"widthUnit\":\"jednotka šírky\"},\"undo\":{\"redo\":\"Znovu\",\"undo\":\"Späť\"},\"wsc\":{\"btnIgnore\":\"Ignorovať\",\"btnIgnoreAll\":\"Ignorovať všetko\",\"btnReplace\":\"Prepísat\",\"btnReplaceAll\":\"Prepísat všetko\",\"btnUndo\":\"Späť\",\"changeTo\":\"Zmeniť na\",\"errorLoading\":\"Chyba pri načítaní slovníka z adresy: %s.\",\"ieSpellDownload\":\"Kontrola pravopisu nie je naištalovaná. Chcete ju teraz stiahnuť?\",\"manyChanges\":\"Kontrola pravopisu dokončená: Bolo zmenených %1 slov\",\"noChanges\":\"Kontrola pravopisu dokončená: Neboli zmenené žiadne slová\",\"noMispell\":\"Kontrola pravopisu dokončená: Neboli nájdené žiadne chyby pravopisu\",\"noSuggestions\":\"- Žiadny návrh -\",\"notAvailable\":\"Prepáčte, ale služba je momentálne nedostupná.\",\"notInDic\":\"Nie je v slovníku\",\"oneChange\":\"Kontrola pravopisu dokončená: Bolo zmenené jedno slovo\",\"progress\":\"Prebieha kontrola pravopisu...\",\"title\":\"Skontrolovať pravopis\",\"toolbar\":\"Kontrola pravopisu\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/sl.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['sl']={\"editor\":\"Bogat Urejevalnik Besedila\",\"editorPanel\":\"Rich Text Editor plošča\",\"common\":{\"editorHelp\":\"Pritisnite ALT 0 za pomoč\",\"browseServer\":\"Prebrskaj na strežniku\",\"url\":\"URL\",\"protocol\":\"Protokol\",\"upload\":\"Naloži\",\"uploadSubmit\":\"Pošlji na strežnik\",\"image\":\"Slika\",\"flash\":\"Flash\",\"form\":\"Obrazec\",\"checkbox\":\"Potrditveno polje\",\"radio\":\"Izbirno polje\",\"textField\":\"Vnosno polje\",\"textarea\":\"Vnosno območje\",\"hiddenField\":\"Skrito polje\",\"button\":\"Gumb\",\"select\":\"Spustno Polje\",\"imageButton\":\"Slikovni Gumb\",\"notSet\":\"<ni določen>\",\"id\":\"Id\",\"name\":\"Ime\",\"langDir\":\"Smer jezika\",\"langDirLtr\":\"Od leve proti desni (LTR)\",\"langDirRtl\":\"Od desne proti levi (RTL)\",\"langCode\":\"Koda Jezika\",\"longDescr\":\"Dolg opis URL-ja\",\"cssClass\":\"Razred stilne predloge\",\"advisoryTitle\":\"Predlagani naslov\",\"cssStyle\":\"Slog\",\"ok\":\"V redu\",\"cancel\":\"Prekliči\",\"close\":\"Zapri\",\"preview\":\"Predogled\",\"resize\":\"Potegni za spremembo velikosti\",\"generalTab\":\"Splošno\",\"advancedTab\":\"Napredno\",\"validateNumberFailed\":\"Ta vrednost ni število.\",\"confirmNewPage\":\"Vse neshranjene spremembe te vsebine bodo izgubljene. Ali res želite naložiti novo stran?\",\"confirmCancel\":\"Nekaj možnosti je bilo spremenjenih. Ali res želite zapreti okno?\",\"options\":\"Možnosti\",\"target\":\"Cilj\",\"targetNew\":\"Novo Okno (_blank)\",\"targetTop\":\"Vrhovno Okno (_top)\",\"targetSelf\":\"Enako Okno (_self)\",\"targetParent\":\"Matično Okno (_parent)\",\"langDirLTR\":\"Od leve proti desni (LTR)\",\"langDirRTL\":\"Od desne proti levi (RTL)\",\"styles\":\"Slog\",\"cssClasses\":\"Razred stilne predloge\",\"width\":\"Širina\",\"height\":\"Višina\",\"align\":\"Poravnava\",\"alignLeft\":\"Levo\",\"alignRight\":\"Desno\",\"alignCenter\":\"Sredinsko\",\"alignJustify\":\"Obojestranska poravnava\",\"alignTop\":\"Na vrh\",\"alignMiddle\":\"V sredino\",\"alignBottom\":\"Na dno\",\"alignNone\":\"Brez poravnave\",\"invalidValue\":\"Neveljavna vrednost.\",\"invalidHeight\":\"Višina mora biti število.\",\"invalidWidth\":\"Širina mora biti število.\",\"invalidCssLength\":\"Vrednost določena za \\\"%1\\\" polje mora biti pozitivna številka z ali brez veljavne CSS enote za merjenje (px, %, in, cm, mm, em, ex, pt, ali pc).\",\"invalidHtmlLength\":\"Vrednost določena za \\\"%1\\\" polje mora biti pozitivna številka z ali brez veljavne HTML enote za merjenje (px ali %).\",\"invalidInlineStyle\":\"Vrednost določena za inline slog mora biti sestavljena iz ene ali več tork (tuples) z obliko \\\"ime : vrednost\\\", ločenih z podpičji.\",\"cssLengthTooltip\":\"Vnesite številko za vrednost v slikovnih pikah (pixels) ali številko z veljavno CSS enoto (px, %, in, cm, mm, em, ex, pt, ali pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, nedosegljiv</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Vse pravice pridržane.\",\"dlgTitle\":\"O programu CKEditor\",\"help\":\"Preverite $1 za pomoč.\",\"moreInfo\":\"Za informacijo o licenci prosim obiščite našo spletno stran:\",\"title\":\"O programu CKEditor\",\"userGuide\":\"CKEditor Navodila za Uporabo\"},\"basicstyles\":{\"bold\":\"Krepko\",\"italic\":\"Ležeče\",\"strike\":\"Prečrtano\",\"subscript\":\"Podpisano\",\"superscript\":\"Nadpisano\",\"underline\":\"Podčrtano\"},\"blockquote\":{\"toolbar\":\"Citat\"},\"clipboard\":{\"copy\":\"Kopiraj\",\"copyError\":\"Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+C).\",\"cut\":\"Izreži\",\"cutError\":\"Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+X).\",\"paste\":\"Prilepi\",\"pasteArea\":\"Prilepi Prostor\",\"pasteMsg\":\"Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl/Cmd+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.\",\"securityMsg\":\"Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.\",\"title\":\"Prilepi\"},\"contextmenu\":{\"options\":\"Možnosti Kontekstnega Menija\"},\"button\":{\"selectedLabel\":\"%1 (Izbrano)\"},\"toolbar\":{\"toolbarCollapse\":\"Skrči Orodno Vrstico\",\"toolbarExpand\":\"Razširi Orodno Vrstico\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"Urejevalnik orodne vrstice\"},\"elementspath\":{\"eleLabel\":\"Pot elementov\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Oblika\",\"panelTitle\":\"Oblika\",\"tag_address\":\"Napis\",\"tag_div\":\"Navaden (DIV)\",\"tag_h1\":\"Naslov 1\",\"tag_h2\":\"Naslov 2\",\"tag_h3\":\"Naslov 3\",\"tag_h4\":\"Naslov 4\",\"tag_h5\":\"Naslov 5\",\"tag_h6\":\"Naslov 6\",\"tag_p\":\"Navaden\",\"tag_pre\":\"Oblikovan\"},\"horizontalrule\":{\"toolbar\":\"Vstavi vodoravno črto\"},\"image\":{\"alt\":\"Nadomestno besedilo\",\"border\":\"Obroba\",\"btnUpload\":\"Pošlji na strežnik\",\"button2Img\":\"Želiš pretvoriti izbrani gumb s sliko v preprosto sliko?\",\"hSpace\":\"Vodoravni razmik\",\"img2Button\":\"Želiš pretvoriti izbrano sliko v gumb s sliko?\",\"infoTab\":\"Podatki o sliki\",\"linkTab\":\"Povezava\",\"lockRatio\":\"Zakleni razmerje\",\"menu\":\"Lastnosti slike\",\"resetSize\":\"Ponastavi velikost\",\"title\":\"Lastnosti slike\",\"titleButton\":\"Lastnosti gumba s sliko\",\"upload\":\"Pošlji\",\"urlMissing\":\"Manjka vir (URL) slike.\",\"vSpace\":\"Navpični razmik\",\"validateBorder\":\"Meja mora biti celo število.\",\"validateHSpace\":\"HSpace mora biti celo število.\",\"validateVSpace\":\"VSpace mora biti celo število.\"},\"indent\":{\"indent\":\"Povečaj zamik\",\"outdent\":\"Zmanjšaj zamik\"},\"fakeobjects\":{\"anchor\":\"Sidro\",\"flash\":\"Flash animacija\",\"hiddenfield\":\"Skrito polje\",\"iframe\":\"IFrame\",\"unknown\":\"Neznan objekt\"},\"link\":{\"acccessKey\":\"Dostopno Geslo\",\"advanced\":\"Napredno\",\"advisoryContentType\":\"Predlagani tip vsebine (content-type)\",\"advisoryTitle\":\"Predlagani naslov\",\"anchor\":{\"toolbar\":\"Vstavi/uredi zaznamek\",\"menu\":\"Lastnosti zaznamka\",\"title\":\"Lastnosti zaznamka\",\"name\":\"Ime zaznamka\",\"errorName\":\"Prosim vnesite ime zaznamka\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"Po ID-ju elementa\",\"anchorName\":\"Po imenu zaznamka\",\"charset\":\"Kodna tabela povezanega vira\",\"cssClasses\":\"Razred stilne predloge\",\"emailAddress\":\"Elektronski naslov\",\"emailBody\":\"Vsebina sporočila\",\"emailSubject\":\"Predmet sporočila\",\"id\":\"Id\",\"info\":\"Podatki o povezavi\",\"langCode\":\"Smer jezika\",\"langDir\":\"Smer jezika\",\"langDirLTR\":\"Od leve proti desni (LTR)\",\"langDirRTL\":\"Od desne proti levi (RTL)\",\"menu\":\"Uredi povezavo\",\"name\":\"Ime\",\"noAnchors\":\"(V tem dokumentu ni zaznamkov)\",\"noEmail\":\"Vnesite elektronski naslov\",\"noUrl\":\"Vnesite URL povezave\",\"other\":\"<drug>\",\"popupDependent\":\"Podokno (Netscape)\",\"popupFeatures\":\"Značilnosti pojavnega okna\",\"popupFullScreen\":\"Celozaslonska slika (IE)\",\"popupLeft\":\"Lega levo\",\"popupLocationBar\":\"Naslovna vrstica\",\"popupMenuBar\":\"Menijska vrstica\",\"popupResizable\":\"Spremenljive velikosti\",\"popupScrollBars\":\"Drsniki\",\"popupStatusBar\":\"Vrstica stanja\",\"popupToolbar\":\"Orodna vrstica\",\"popupTop\":\"Lega na vrhu\",\"rel\":\"Odnos\",\"selectAnchor\":\"Izberi zaznamek\",\"styles\":\"Slog\",\"tabIndex\":\"Številka tabulatorja\",\"target\":\"Cilj\",\"targetFrame\":\"<okvir>\",\"targetFrameName\":\"Ime ciljnega okvirja\",\"targetPopup\":\"<pojavno okno>\",\"targetPopupName\":\"Ime pojavnega okna\",\"title\":\"Povezava\",\"toAnchor\":\"Zaznamek na tej strani\",\"toEmail\":\"Elektronski naslov\",\"toUrl\":\"URL\",\"toolbar\":\"Vstavi/uredi povezavo\",\"type\":\"Vrsta povezave\",\"unlink\":\"Odstrani povezavo\",\"upload\":\"Prenesi\"},\"list\":{\"bulletedlist\":\"Označen seznam\",\"numberedlist\":\"Oštevilčen seznam\"},\"magicline\":{\"title\":\"Vstavite odstavek tukaj\"},\"maximize\":{\"maximize\":\"Maksimiraj\",\"minimize\":\"Minimiraj\"},\"pastetext\":{\"button\":\"Prilepi kot golo besedilo\",\"title\":\"Prilepi kot golo besedilo\"},\"pastefromword\":{\"confirmCleanup\":\"Besedilo, ki ga želite prilepiti je kopirano iz Word-a. Ali ga želite očistiti, preden ga prilepite?\",\"error\":\"Ni bilo mogoče očistiti prilepljenih podatkov zaradi notranje napake\",\"title\":\"Prilepi iz Worda\",\"toolbar\":\"Prilepi iz Worda\"},\"removeformat\":{\"toolbar\":\"Odstrani oblikovanje\"},\"sourcearea\":{\"toolbar\":\"Izvorna koda\"},\"specialchar\":{\"options\":\"Možnosti Posebnega Znaka\",\"title\":\"Izberi Posebni Znak\",\"toolbar\":\"Vstavi posebni znak\"},\"scayt\":{\"btn_about\":\"O storitvi SCAYT\",\"btn_dictionaries\":\"Slovarji\",\"btn_disable\":\"Onemogoči SCAYT\",\"btn_enable\":\"Omogoči SCAYT\",\"btn_langs\":\"Jeziki\",\"btn_options\":\"Možnosti\",\"text_title\":\"Črkovanje med tipkanjem\"},\"stylescombo\":{\"label\":\"Slog\",\"panelTitle\":\"Oblikovalni Stili\",\"panelTitle1\":\"Slogi odstavkov\",\"panelTitle2\":\"Slogi besedila\",\"panelTitle3\":\"Slogi objektov\"},\"table\":{\"border\":\"Velikost obrobe\",\"caption\":\"Naslov\",\"cell\":{\"menu\":\"Celica\",\"insertBefore\":\"Vstavi celico pred\",\"insertAfter\":\"Vstavi celico za\",\"deleteCell\":\"Izbriši celice\",\"merge\":\"Združi celice\",\"mergeRight\":\"Združi desno\",\"mergeDown\":\"Druži navzdol\",\"splitHorizontal\":\"Razdeli celico vodoravno\",\"splitVertical\":\"Razdeli celico navpično\",\"title\":\"Lastnosti celice\",\"cellType\":\"Vrsta celice\",\"rowSpan\":\"Razpon vrstic\",\"colSpan\":\"Razpon stolpcev\",\"wordWrap\":\"Prelom besedila\",\"hAlign\":\"Vodoravna poravnava\",\"vAlign\":\"Navpična poravnava\",\"alignBaseline\":\"Osnovnica\",\"bgColor\":\"Barva ozadja\",\"borderColor\":\"Barva obrobe\",\"data\":\"Podatki\",\"header\":\"Glava\",\"yes\":\"Da\",\"no\":\"Ne\",\"invalidWidth\":\"Širina celice mora biti število.\",\"invalidHeight\":\"Višina celice mora biti število.\",\"invalidRowSpan\":\"Razpon vrstic mora biti celo število.\",\"invalidColSpan\":\"Razpon stolpcev mora biti celo število.\",\"chooseColor\":\"Izberi\"},\"cellPad\":\"Polnilo med celicami\",\"cellSpace\":\"Razmik med celicami\",\"column\":{\"menu\":\"Stolpec\",\"insertBefore\":\"Vstavi stolpec pred\",\"insertAfter\":\"Vstavi stolpec za\",\"deleteColumn\":\"Izbriši stolpce\"},\"columns\":\"Stolpci\",\"deleteTable\":\"Izbriši tabelo\",\"headers\":\"Glave\",\"headersBoth\":\"Oboje\",\"headersColumn\":\"Prvi stolpec\",\"headersNone\":\"Brez\",\"headersRow\":\"Prva vrstica\",\"invalidBorder\":\"Širina obrobe mora biti število.\",\"invalidCellPadding\":\"Zamik celic mora biti število\",\"invalidCellSpacing\":\"Razmik med celicami mora biti število.\",\"invalidCols\":\"Število stolpcev mora biti večje od 0.\",\"invalidHeight\":\"Višina tabele mora biti število.\",\"invalidRows\":\"Število vrstic mora biti večje od 0.\",\"invalidWidth\":\"Širina tabele mora biti število.\",\"menu\":\"Lastnosti tabele\",\"row\":{\"menu\":\"Vrstica\",\"insertBefore\":\"Vstavi vrstico pred\",\"insertAfter\":\"Vstavi vrstico za\",\"deleteRow\":\"Izbriši vrstice\"},\"rows\":\"Vrstice\",\"summary\":\"Povzetek\",\"title\":\"Lastnosti tabele\",\"toolbar\":\"Tabela\",\"widthPc\":\"procentov\",\"widthPx\":\"pik\",\"widthUnit\":\"enota širine\"},\"undo\":{\"redo\":\"Ponovi\",\"undo\":\"Razveljavi\"},\"wsc\":{\"btnIgnore\":\"Prezri\",\"btnIgnoreAll\":\"Prezri vse\",\"btnReplace\":\"Zamenjaj\",\"btnReplaceAll\":\"Zamenjaj vse\",\"btnUndo\":\"Razveljavi\",\"changeTo\":\"Spremeni v\",\"errorLoading\":\"Napaka pri nalaganju storitve programa na naslovu %s.\",\"ieSpellDownload\":\"Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?\",\"manyChanges\":\"Črkovanje je končano: Spremenjenih je bilo %1 besed\",\"noChanges\":\"Črkovanje je končano: Nobena beseda ni bila spremenjena\",\"noMispell\":\"Črkovanje je končano: Brez napak\",\"noSuggestions\":\"- Ni predlogov -\",\"notAvailable\":\"Oprostite, storitev trenutno ni dosegljiva.\",\"notInDic\":\"Ni v slovarju\",\"oneChange\":\"Črkovanje je končano: Spremenjena je bila ena beseda\",\"progress\":\"Preverjanje črkovanja se izvaja...\",\"title\":\"Črkovalnik\",\"toolbar\":\"Preveri črkovanje\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/sq.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['sq']={\"editor\":\"Redaktues i Pasur Teksti\",\"editorPanel\":\"Paneli i redaktuesit të tekstit të plotë\",\"common\":{\"editorHelp\":\"Shtyp ALT 0 për ndihmë\",\"browseServer\":\"Shfleto në Server\",\"url\":\"URL\",\"protocol\":\"Protokolli\",\"upload\":\"Ngarko\",\"uploadSubmit\":\"Dërgo në server\",\"image\":\"Imazh\",\"flash\":\"Objekt flash\",\"form\":\"Formular\",\"checkbox\":\"Checkbox\",\"radio\":\"Buton radio\",\"textField\":\"Fushë tekst\",\"textarea\":\"Hapësirë tekst\",\"hiddenField\":\"Fushë e fshehur\",\"button\":\"Buton\",\"select\":\"Menu zgjedhjeje\",\"imageButton\":\"Buton imazhi\",\"notSet\":\"<e pazgjedhur>\",\"id\":\"Id\",\"name\":\"Emër\",\"langDir\":\"Kod gjuhe\",\"langDirLtr\":\"Nga e majta në të djathtë (LTR)\",\"langDirRtl\":\"Nga e djathta në të majtë (RTL)\",\"langCode\":\"Kod gjuhe\",\"longDescr\":\"Përshkrim i hollësishëm\",\"cssClass\":\"Klasa stili CSS\",\"advisoryTitle\":\"Titull\",\"cssStyle\":\"Stil\",\"ok\":\"OK\",\"cancel\":\"Anulo\",\"close\":\"Mbyll\",\"preview\":\"Parashiko\",\"resize\":\"Ripërmaso\",\"generalTab\":\"Të përgjithshme\",\"advancedTab\":\"Të përparuara\",\"validateNumberFailed\":\"Vlera e futur nuk është një numër\",\"confirmNewPage\":\"Çdo ndryshim që nuk është ruajtur do humbasë. Je i sigurtë që dëshiron të krijosh një faqe të re?\",\"confirmCancel\":\"Disa opsione kanë ndryshuar. Je i sigurtë që dëshiron ta mbyllësh dritaren?\",\"options\":\"Opsione\",\"target\":\"Objektivi\",\"targetNew\":\"Dritare e re (_blank)\",\"targetTop\":\"Dritare në plan të parë (_top)\",\"targetSelf\":\"E njëjta dritare (_self)\",\"targetParent\":\"Dritarja prind (_parent)\",\"langDirLTR\":\"Nga e majta në të djathë (LTR)\",\"langDirRTL\":\"Nga e djathta në të majtë (RTL)\",\"styles\":\"Stil\",\"cssClasses\":\"Klasa Stili CSS\",\"width\":\"Gjerësi\",\"height\":\"Lartësi\",\"align\":\"Rreshtim\",\"alignLeft\":\"Majtas\",\"alignRight\":\"Djathtas\",\"alignCenter\":\"Qendër\",\"alignJustify\":\"Zgjero\",\"alignTop\":\"Lart\",\"alignMiddle\":\"Në mes\",\"alignBottom\":\"Poshtë\",\"alignNone\":\"Asnjë\",\"invalidValue\":\"Vlerë e pavlefshme\",\"invalidHeight\":\"Lartësia duhet të jetë një numër\",\"invalidWidth\":\"Gjerësia duhet të jetë një numër\",\"invalidCssLength\":\"Vlera e fushës \\\"%1\\\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme CSS (px, %, in, cm, mm, em, ex, pt ose pc).\",\"invalidHtmlLength\":\"Vlera e fushës \\\"%1\\\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme HTML (px ose %)\",\"invalidInlineStyle\":\"Stili inline duhet të jetë një apo disa vlera të formatit \\\"emër: vlerë\\\", ndarë nga pikëpresje.\",\"cssLengthTooltip\":\"Fut një numër për vlerën në pixel apo një numër me një njësi të vlefshme CSS (px, %, in, cm, mm, ex, pt, ose pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, i padisponueshëm</span>\"},\"about\":{\"copy\":\"Të drejtat  e kopjimit &copy; $1. Të gjitha të drejtat e rezervuara.\",\"dlgTitle\":\"Rreth CKEditor\",\"help\":\"Kontrollo $1 për ndihmë.\",\"moreInfo\":\"Për informacione rreth licencave shih faqen tonë:\",\"title\":\"Rreth CKEditor\",\"userGuide\":\"Udhëzuesi i Shfrytëzuesit të CKEditor\"},\"basicstyles\":{\"bold\":\"Trash\",\"italic\":\"Pjerrët\",\"strike\":\"Nëpërmes\",\"subscript\":\"Nën-skriptë\",\"superscript\":\"Super-skriptë\",\"underline\":\"Nënvijëzuar\"},\"blockquote\":{\"toolbar\":\"Citatet\"},\"clipboard\":{\"copy\":\"Kopjo\",\"copyError\":\"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e kopjimit. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+C).\",\"cut\":\"Preje\",\"cutError\":\"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e prerjes. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+X).\",\"paste\":\"Hidhe\",\"pasteArea\":\"Hapësira Hedhëse\",\"pasteMsg\":\"Ju lutemi hidhni brenda kutizës në vijim duke shfrytëzuar tastierën (<strong>Ctrl/Cmd+V</strong>) dhe shtypni Mirë.\",\"securityMsg\":\"Për shkak të dhënave të sigurisë së shfletuesit tuaj, redaktuesi nuk është në gjendje të i qaset drejtpërdrejtë të dhanve të tabelës suaj të punës. Ju duhet të hidhni atë përsëri në këtë dritare.\",\"title\":\"Hidhe\"},\"contextmenu\":{\"options\":\"Mundësitë e Menysë së Kontekstit\"},\"button\":{\"selectedLabel\":\"%1 (Përzgjedhur)\"},\"toolbar\":{\"toolbarCollapse\":\"Zvogëlo Shiritin\",\"toolbarExpand\":\"Zgjero Shiritin\",\"toolbarGroups\":{\"document\":\"Dokument\",\"clipboard\":\"Tabela Punës/Ribëje\",\"editing\":\"Duke Redaktuar\",\"forms\":\"Formular\",\"basicstyles\":\"Stili Bazë\",\"paragraph\":\"Paragraf\",\"links\":\"Nyjet\",\"insert\":\"Shto\",\"styles\":\"Stil\",\"colors\":\"Ngjyrat\",\"tools\":\"Mjetet\"},\"toolbars\":\"Shiritet e Redaktuesit\"},\"elementspath\":{\"eleLabel\":\"Rruga e elementeve\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Formati\",\"panelTitle\":\"Formati i Paragrafit\",\"tag_address\":\"Adresa\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Titulli 1\",\"tag_h2\":\"Titulli 2\",\"tag_h3\":\"Titulli 3\",\"tag_h4\":\"Titulli 4\",\"tag_h5\":\"Titulli 5\",\"tag_h6\":\"Titulli 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatuar\"},\"horizontalrule\":{\"toolbar\":\"Vendos Vijë Horizontale\"},\"image\":{\"alt\":\"Tekst Alternativ\",\"border\":\"Korniza\",\"btnUpload\":\"Dërgo në server\",\"button2Img\":\"Dëshironi të e ndërroni pullën e fotos së selektuar në një foto të thjeshtë?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Dëshironi të ndryshoni foton e përzgjedhur në pullë?\",\"infoTab\":\"Informacione mbi Fotografinë\",\"linkTab\":\"Nyja\",\"lockRatio\":\"Mbyll Racionin\",\"menu\":\"Karakteristikat e Fotografisë\",\"resetSize\":\"Rikthe Madhësinë\",\"title\":\"Karakteristikat e Fotografisë\",\"titleButton\":\"Karakteristikat e Pullës së Fotografisë\",\"upload\":\"Ngarko\",\"urlMissing\":\"Mungon URL e burimit të fotografisë.\",\"vSpace\":\"Hapësira Vertikale\",\"validateBorder\":\"Korniza duhet të jetë numër i plotë.\",\"validateHSpace\":\"Hapësira horizontale duhet të jetë numër i plotë.\",\"validateVSpace\":\"Hapësira vertikale duhet të jetë numër i plotë.\"},\"indent\":{\"indent\":\"Rrite Identin\",\"outdent\":\"Zvogëlo Identin\"},\"fakeobjects\":{\"anchor\":\"Spirancë\",\"flash\":\"Objekt flash\",\"hiddenfield\":\"Fushë e fshehur\",\"iframe\":\"IFrame\",\"unknown\":\"Objekt i Panjohur\"},\"link\":{\"acccessKey\":\"Sipas ID-së së Elementit\",\"advanced\":\"Të përparuara\",\"advisoryContentType\":\"Lloji i Përmbajtjes Këshillimore\",\"advisoryTitle\":\"Titull\",\"anchor\":{\"toolbar\":\"Spirancë\",\"menu\":\"Redakto Spirancën\",\"title\":\"Anchor Properties\",\"name\":\"Emri i Spirancës\",\"errorName\":\"Ju lutemi shkruani emrin e spirancës\",\"remove\":\"Largo Spirancën\"},\"anchorId\":\"Sipas ID-së së Elementit\",\"anchorName\":\"Sipas Emrit të Spirancës\",\"charset\":\"Seti i Karaktereve të Burimeve të Nëdlidhura\",\"cssClasses\":\"Klasa stili CSS\",\"emailAddress\":\"Posta Elektronike\",\"emailBody\":\"Trupi i Porosisë\",\"emailSubject\":\"Titulli i Porosisë\",\"id\":\"Id\",\"info\":\"Informacione të Nyjes\",\"langCode\":\"Kod gjuhe\",\"langDir\":\"Drejtim teksti\",\"langDirLTR\":\"Nga e majta në të djathë (LTR)\",\"langDirRTL\":\"Nga e djathta në të majtë (RTL)\",\"menu\":\"Redakto Nyjen\",\"name\":\"Emër\",\"noAnchors\":\"(Nuk ka asnjë spirancë në dokument)\",\"noEmail\":\"Ju lutemi shkruani postën elektronike\",\"noUrl\":\"Ju lutemi shkruani URL-në e nyjes\",\"other\":\"<tjetër>\",\"popupDependent\":\"E Varur (Netscape)\",\"popupFeatures\":\"Karakteristikat e Dritares së Dialogut\",\"popupFullScreen\":\"Ekran i Plotë  (IE)\",\"popupLeft\":\"Pozita Majtas\",\"popupLocationBar\":\"Shiriti i Lokacionit\",\"popupMenuBar\":\"Shiriti i Menysë\",\"popupResizable\":\"I ndryshueshëm\",\"popupScrollBars\":\"Shiritat zvarritës\",\"popupStatusBar\":\"Shiriti i Statutit\",\"popupToolbar\":\"Shiriti i Mejteve\",\"popupTop\":\"Top Pozita\",\"rel\":\"Marrëdhëniet\",\"selectAnchor\":\"Përzgjidh një Spirancë\",\"styles\":\"Stil\",\"tabIndex\":\"Indeksi i fletave\",\"target\":\"Objektivi\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Emri i Kornizës së Synuar\",\"targetPopup\":\"<popup window>\",\"targetPopupName\":\"Emri i Dritares së Dialogut\",\"title\":\"Nyja\",\"toAnchor\":\"Lidhu me spirancën në tekst\",\"toEmail\":\"Posta Elektronike\",\"toUrl\":\"URL\",\"toolbar\":\"Nyja\",\"type\":\"Lloji i Nyjes\",\"unlink\":\"Largo Nyjen\",\"upload\":\"Ngarko\"},\"list\":{\"bulletedlist\":\"Vendos/Largo Listën me Pika\",\"numberedlist\":\"Vendos/Largo Listën me Numra\"},\"magicline\":{\"title\":\"Vendos paragraf këtu\"},\"maximize\":{\"maximize\":\"Zmadho\",\"minimize\":\"Zvogëlo\"},\"pastetext\":{\"button\":\"Hidhe si tekst të thjeshtë\",\"title\":\"Hidhe si Tekst të Thjeshtë\"},\"pastefromword\":{\"confirmCleanup\":\"Teksti që dëshironi të e hidhni siç duket është kopjuar nga Word-i. Dëshironi të e pastroni para se të e hidhni?\",\"error\":\"Nuk ishte e mundur të fshiheshin të dhënat e hedhura për shkak të një gabimi të brendshëm\",\"title\":\"Hidhe nga Word-i\",\"toolbar\":\"Hidhe nga Word-i\"},\"removeformat\":{\"toolbar\":\"Largo Formatin\"},\"sourcearea\":{\"toolbar\":\"Burimi\"},\"specialchar\":{\"options\":\"Mundësitë për Karaktere Speciale\",\"title\":\"Përzgjidh Karakter Special\",\"toolbar\":\"Vendos Karakter Special\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Stil\",\"panelTitle\":\"Stilet e Formatimit\",\"panelTitle1\":\"Stilet e Bllokut\",\"panelTitle2\":\"Stili i Brendshëm\",\"panelTitle3\":\"Stilet e Objektit\"},\"table\":{\"border\":\"Madhësia e kornizave\",\"caption\":\"Titull\",\"cell\":{\"menu\":\"Qeli\",\"insertBefore\":\"Shto Qeli Para\",\"insertAfter\":\"Shto Qeli Prapa\",\"deleteCell\":\"Gris Qelitë\",\"merge\":\"Bashko Qelitë\",\"mergeRight\":\"Bashko Djathtas\",\"mergeDown\":\"Bashko Poshtë\",\"splitHorizontal\":\"Ndaj Qelinë Horizontalisht\",\"splitVertical\":\"Ndaj Qelinë Vertikalisht\",\"title\":\"Rekuizitat e Qelisë\",\"cellType\":\"Lloji i Qelisë\",\"rowSpan\":\"Bashko Rreshtat\",\"colSpan\":\"Bashko Kolonat\",\"wordWrap\":\"Fund i Fjalës\",\"hAlign\":\"Bashkimi Horizontal\",\"vAlign\":\"Bashkimi Vertikal\",\"alignBaseline\":\"Baza\",\"bgColor\":\"Ngjyra e Prapavijës\",\"borderColor\":\"Ngjyra e Kornizave\",\"data\":\"Të dhënat\",\"header\":\"Koka\",\"yes\":\"Po\",\"no\":\"Jo\",\"invalidWidth\":\"Gjerësia e qelisë duhet të jetë numër.\",\"invalidHeight\":\"Lartësia e qelisë duhet të jetë numër.\",\"invalidRowSpan\":\"Hapësira e rreshtave duhet të jetë numër i plotë.\",\"invalidColSpan\":\"Hapësira e kolonave duhet të jetë numër i plotë.\",\"chooseColor\":\"Përzgjidh\"},\"cellPad\":\"Mbushja e qelisë\",\"cellSpace\":\"Hapësira e qelisë\",\"column\":{\"menu\":\"Kolona\",\"insertBefore\":\"Vendos Kolonë Para\",\"insertAfter\":\"Vendos Kolonë Pas\",\"deleteColumn\":\"Gris Kolonat\"},\"columns\":\"Kolonat\",\"deleteTable\":\"Gris Tabelën\",\"headers\":\"Kokat\",\"headersBoth\":\"Së bashku\",\"headersColumn\":\"Kolona e parë\",\"headersNone\":\"Asnjë\",\"headersRow\":\"Rreshti i Parë\",\"invalidBorder\":\"Madhësia e kufinjve duhet të jetë numër.\",\"invalidCellPadding\":\"Mbushja e qelisë duhet të jetë numër pozitiv.\",\"invalidCellSpacing\":\"Hapësira e qelisë duhet të jetë numër pozitiv.\",\"invalidCols\":\"Numri i kolonave duhet të jetë numër më i madh se 0.\",\"invalidHeight\":\"Lartësia e tabelës duhet të jetë numër.\",\"invalidRows\":\"Numri i rreshtave duhet të jetë numër më i madh se 0.\",\"invalidWidth\":\"Gjerësia e tabelës duhet të jetë numër.\",\"menu\":\"Karakteristikat e Tabelës\",\"row\":{\"menu\":\"Rreshti\",\"insertBefore\":\"Shto Rresht Para\",\"insertAfter\":\"Shto Rresht Prapa\",\"deleteRow\":\"Gris Rreshtat\"},\"rows\":\"Rreshtat\",\"summary\":\"Përmbledhje\",\"title\":\"Karakteristikat e Tabelës\",\"toolbar\":\"Tabela\",\"widthPc\":\"përqind\",\"widthPx\":\"piksell\",\"widthUnit\":\"njësia e gjerësisë\"},\"undo\":{\"redo\":\"Ribëje\",\"undo\":\"Rizhbëje\"},\"wsc\":{\"btnIgnore\":\"Ignore\",\"btnIgnoreAll\":\"Ignore All\",\"btnReplace\":\"Replace\",\"btnReplaceAll\":\"Replace All\",\"btnUndo\":\"Undo\",\"changeTo\":\"Change to\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Spell checker not installed. Do you want to download it now?\",\"manyChanges\":\"Spell check complete: %1 words changed\",\"noChanges\":\"Spell check complete: No words changed\",\"noMispell\":\"Spell check complete: No misspellings found\",\"noSuggestions\":\"- No suggestions -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Not in dictionary\",\"oneChange\":\"Spell check complete: One word changed\",\"progress\":\"Spell check in progress...\",\"title\":\"Spell Checker\",\"toolbar\":\"Check Spelling\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/sr-latn.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['sr-latn']={\"editor\":\"Bogati uređivač teksta\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Press ALT 0 for help\",\"browseServer\":\"Pretraži server\",\"url\":\"URL\",\"protocol\":\"Protokol\",\"upload\":\"Pošalji\",\"uploadSubmit\":\"Pošalji na server\",\"image\":\"Slika\",\"flash\":\"Fleš\",\"form\":\"Forma\",\"checkbox\":\"Polje za potvrdu\",\"radio\":\"Radio-dugme\",\"textField\":\"Tekstualno polje\",\"textarea\":\"Zona teksta\",\"hiddenField\":\"Skriveno polje\",\"button\":\"Dugme\",\"select\":\"Izborno polje\",\"imageButton\":\"Dugme sa slikom\",\"notSet\":\"<nije postavljeno>\",\"id\":\"Id\",\"name\":\"Naziv\",\"langDir\":\"Smer jezika\",\"langDirLtr\":\"S leva na desno (LTR)\",\"langDirRtl\":\"S desna na levo (RTL)\",\"langCode\":\"Kôd jezika\",\"longDescr\":\"Pun opis URL\",\"cssClass\":\"Stylesheet klase\",\"advisoryTitle\":\"Advisory naslov\",\"cssStyle\":\"Stil\",\"ok\":\"OK\",\"cancel\":\"Otkaži\",\"close\":\"Zatvori\",\"preview\":\"Izgled stranice\",\"resize\":\"Resize\",\"generalTab\":\"Opšte\",\"advancedTab\":\"Napredni tagovi\",\"validateNumberFailed\":\"Ova vrednost nije broj.\",\"confirmNewPage\":\"Nesačuvane promene ovog sadržaja će biti izgubljene. Jeste li sigurni da želita da učitate novu stranu?\",\"confirmCancel\":\"You have changed some options. Are you sure you want to close the dialog window?\",\"options\":\"Opcije\",\"target\":\"Meta\",\"targetNew\":\"Novi prozor (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"Isti prozor (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"S leva na desno (LTR)\",\"langDirRTL\":\"S desna na levo (RTL)\",\"styles\":\"Stil\",\"cssClasses\":\"Stylesheet klase\",\"width\":\"Širina\",\"height\":\"Visina\",\"align\":\"Ravnanje\",\"alignLeft\":\"Levo\",\"alignRight\":\"Desno\",\"alignCenter\":\"Sredina\",\"alignJustify\":\"Obostrano ravnanje\",\"alignTop\":\"Vrh\",\"alignMiddle\":\"Sredina\",\"alignBottom\":\"Dole\",\"alignNone\":\"None\",\"invalidValue\":\"Invalid value.\",\"invalidHeight\":\"Visina mora biti broj.\",\"invalidWidth\":\"Širina mora biti broj.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"About CKEditor\",\"help\":\"Check $1 for help.\",\"moreInfo\":\"For licensing information please visit our web site:\",\"title\":\"About CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"Podebljano\",\"italic\":\"Kurziv\",\"strike\":\"Precrtano\",\"subscript\":\"Indeks\",\"superscript\":\"Stepen\",\"underline\":\"Podvučeno\"},\"blockquote\":{\"toolbar\":\"Block Quote\"},\"clipboard\":{\"copy\":\"Kopiraj\",\"copyError\":\"Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+C).\",\"cut\":\"Iseci\",\"cutError\":\"Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+X).\",\"paste\":\"Zalepi\",\"pasteArea\":\"Prostor za lepljenje\",\"pasteMsg\":\"Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl/Cmd+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.\",\"securityMsg\":\"Zbog sigurnosnih postavki vašeg pregledača, editor nije u mogućnosti da direktno pristupi podacima u klipbordu. Potrebno je da zalepite još jednom u ovom prozoru.\",\"title\":\"Zalepi\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Suzi alatnu traku\",\"toolbarExpand\":\"Proširi alatnu traku\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"Alatne trake\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Format\",\"panelTitle\":\"Format\",\"tag_address\":\"Adresa\",\"tag_div\":\"Normalno (DIV)\",\"tag_h1\":\"Naslov 1\",\"tag_h2\":\"Naslov 2\",\"tag_h3\":\"Naslov 3\",\"tag_h4\":\"Naslov 4\",\"tag_h5\":\"Naslov 5\",\"tag_h6\":\"Naslov 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatirano\"},\"horizontalrule\":{\"toolbar\":\"Unesi horizontalnu liniju\"},\"image\":{\"alt\":\"Alternativni tekst\",\"border\":\"Okvir\",\"btnUpload\":\"Pošalji na server\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"Info slike\",\"linkTab\":\"Link\",\"lockRatio\":\"Zaključaj odnos\",\"menu\":\"Osobine slika\",\"resetSize\":\"Resetuj veličinu\",\"title\":\"Osobine slika\",\"titleButton\":\"Osobine dugmeta sa slikom\",\"upload\":\"Pošalji\",\"urlMissing\":\"Image source URL is missing.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"Border must be a whole number.\",\"validateHSpace\":\"HSpace must be a whole number.\",\"validateVSpace\":\"VSpace must be a whole number.\"},\"indent\":{\"indent\":\"Uvećaj levu marginu\",\"outdent\":\"Smanji levu marginu\"},\"fakeobjects\":{\"anchor\":\"Unesi/izmeni sidro\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"Skriveno polje\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"Pristupni taster\",\"advanced\":\"Napredni tagovi\",\"advisoryContentType\":\"Advisory vrsta sadržaja\",\"advisoryTitle\":\"Advisory naslov\",\"anchor\":{\"toolbar\":\"Unesi/izmeni sidro\",\"menu\":\"Osobine sidra\",\"title\":\"Osobine sidra\",\"name\":\"Naziv sidra\",\"errorName\":\"Unesite naziv sidra\",\"remove\":\"Ukloni sidro\"},\"anchorId\":\"Po Id-u elementa\",\"anchorName\":\"Po nazivu sidra\",\"charset\":\"Linked Resource Charset\",\"cssClasses\":\"Stylesheet klase\",\"emailAddress\":\"E-Mail adresa\",\"emailBody\":\"Sadržaj poruke\",\"emailSubject\":\"Naslov\",\"id\":\"Id\",\"info\":\"Link Info\",\"langCode\":\"Smer jezika\",\"langDir\":\"Smer jezika\",\"langDirLTR\":\"S leva na desno (LTR)\",\"langDirRTL\":\"S desna na levo (RTL)\",\"menu\":\"Izmeni link\",\"name\":\"Naziv\",\"noAnchors\":\"(Nema dostupnih sidra)\",\"noEmail\":\"Otkucajte adresu elektronske pote\",\"noUrl\":\"Unesite URL linka\",\"other\":\"<остало>\",\"popupDependent\":\"Zavisno (Netscape)\",\"popupFeatures\":\"Mogućnosti popup prozora\",\"popupFullScreen\":\"Prikaz preko celog ekrana (IE)\",\"popupLeft\":\"Od leve ivice ekrana (px)\",\"popupLocationBar\":\"Lokacija\",\"popupMenuBar\":\"Kontekstni meni\",\"popupResizable\":\"Promenljive veličine\",\"popupScrollBars\":\"Scroll bar\",\"popupStatusBar\":\"Statusna linija\",\"popupToolbar\":\"Toolbar\",\"popupTop\":\"Od vrha ekrana (px)\",\"rel\":\"Odnos\",\"selectAnchor\":\"Odaberi sidro\",\"styles\":\"Stil\",\"tabIndex\":\"Tab indeks\",\"target\":\"Meta\",\"targetFrame\":\"<okvir>\",\"targetFrameName\":\"Naziv odredišnog frejma\",\"targetPopup\":\"<popup prozor>\",\"targetPopupName\":\"Naziv popup prozora\",\"title\":\"Link\",\"toAnchor\":\"Sidro na ovoj stranici\",\"toEmail\":\"E-Mail\",\"toUrl\":\"URL\",\"toolbar\":\"Unesi/izmeni link\",\"type\":\"Vrsta linka\",\"unlink\":\"Ukloni link\",\"upload\":\"Pošalji\"},\"list\":{\"bulletedlist\":\"Nenabrojiva lista\",\"numberedlist\":\"Nabrojiva lista\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Maximize\",\"minimize\":\"Minimize\"},\"pastetext\":{\"button\":\"Zalepi kao čist tekst\",\"title\":\"Zalepi kao čist tekst\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"Zalepi iz Worda\",\"toolbar\":\"Zalepi iz Worda\"},\"removeformat\":{\"toolbar\":\"Ukloni formatiranje\"},\"sourcearea\":{\"toolbar\":\"Kôd\"},\"specialchar\":{\"options\":\"Special Character Options\",\"title\":\"Odaberite specijalni karakter\",\"toolbar\":\"Unesi specijalni karakter\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Stil\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"Veličina okvira\",\"caption\":\"Naslov tabele\",\"cell\":{\"menu\":\"Cell\",\"insertBefore\":\"Insert Cell Before\",\"insertAfter\":\"Insert Cell After\",\"deleteCell\":\"Obriši ćelije\",\"merge\":\"Spoj celije\",\"mergeRight\":\"Merge Right\",\"mergeDown\":\"Merge Down\",\"splitHorizontal\":\"Split Cell Horizontally\",\"splitVertical\":\"Split Cell Vertically\",\"title\":\"Cell Properties\",\"cellType\":\"Cell Type\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Horizontal Alignment\",\"vAlign\":\"Vertical Alignment\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Background Color\",\"borderColor\":\"Border Color\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Yes\",\"no\":\"No\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Choose\"},\"cellPad\":\"Razmak ćelija\",\"cellSpace\":\"Ćelijski prostor\",\"column\":{\"menu\":\"Column\",\"insertBefore\":\"Insert Column Before\",\"insertAfter\":\"Insert Column After\",\"deleteColumn\":\"Obriši kolone\"},\"columns\":\"Kolona\",\"deleteTable\":\"Izbriši tabelu\",\"headers\":\"Zaglavlja\",\"headersBoth\":\"Oba\",\"headersColumn\":\"Prva kolona\",\"headersNone\":\"None\",\"headersRow\":\"Prvi red\",\"invalidBorder\":\"Veličina okvira mora biti broj.\",\"invalidCellPadding\":\"Padding polja mora biti pozitivan broj.\",\"invalidCellSpacing\":\"Razmak između ćelija mora biti pozitivan broj.\",\"invalidCols\":\"Broj kolona mora biti broj veći od 0.\",\"invalidHeight\":\"Visina tabele mora biti broj.\",\"invalidRows\":\"Broj redova mora biti veći od 0.\",\"invalidWidth\":\"Širina tabele mora biti broj.\",\"menu\":\"Osobine tabele\",\"row\":{\"menu\":\"Row\",\"insertBefore\":\"Insert Row Before\",\"insertAfter\":\"Insert Row After\",\"deleteRow\":\"Obriši redove\"},\"rows\":\"Redova\",\"summary\":\"Sažetak\",\"title\":\"Osobine tabele\",\"toolbar\":\"Tabela\",\"widthPc\":\"procenata\",\"widthPx\":\"piksela\",\"widthUnit\":\"jedinica za širinu\"},\"undo\":{\"redo\":\"Ponovi akciju\",\"undo\":\"Poni�ti akciju\"},\"wsc\":{\"btnIgnore\":\"Ignoriši\",\"btnIgnoreAll\":\"Ignoriši sve\",\"btnReplace\":\"Zameni\",\"btnReplaceAll\":\"Zameni sve\",\"btnUndo\":\"Vrati akciju\",\"changeTo\":\"Izmeni\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?\",\"manyChanges\":\"Provera spelovanja završena: %1 reč(i) je izmenjeno\",\"noChanges\":\"Provera spelovanja završena: Nije izmenjena nijedna rec\",\"noMispell\":\"Provera spelovanja završena: greške nisu pronadene\",\"noSuggestions\":\"- Bez sugestija -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Nije u rečniku\",\"oneChange\":\"Provera spelovanja završena: Izmenjena je jedna reč\",\"progress\":\"Provera spelovanja u toku...\",\"title\":\"Spell Checker\",\"toolbar\":\"Proveri spelovanje\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/sr.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['sr']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Press ALT 0 for help\",\"browseServer\":\"Претражи сервер\",\"url\":\"УРЛ\",\"protocol\":\"Протокол\",\"upload\":\"Пошаљи\",\"uploadSubmit\":\"Пошаљи на сервер\",\"image\":\"Слика\",\"flash\":\"Флеш елемент\",\"form\":\"Форма\",\"checkbox\":\"Поље за потврду\",\"radio\":\"Радио-дугме\",\"textField\":\"Текстуално поље\",\"textarea\":\"Зона текста\",\"hiddenField\":\"Скривено поље\",\"button\":\"Дугме\",\"select\":\"Изборно поље\",\"imageButton\":\"Дугме са сликом\",\"notSet\":\"<није постављено>\",\"id\":\"Ид\",\"name\":\"Назив\",\"langDir\":\"Смер језика\",\"langDirLtr\":\"С лева на десно (LTR)\",\"langDirRtl\":\"С десна на лево (RTL)\",\"langCode\":\"Kôд језика\",\"longDescr\":\"Пун опис УРЛ\",\"cssClass\":\"Stylesheet класе\",\"advisoryTitle\":\"Advisory наслов\",\"cssStyle\":\"Стил\",\"ok\":\"OK\",\"cancel\":\"Oткажи\",\"close\":\"Затвори\",\"preview\":\"Изглед странице\",\"resize\":\"Resize\",\"generalTab\":\"Опште\",\"advancedTab\":\"Напредни тагови\",\"validateNumberFailed\":\"Ова вредност није цигра.\",\"confirmNewPage\":\"Any unsaved changes to this content will be lost. Are you sure you want to load new page?\",\"confirmCancel\":\"You have changed some options. Are you sure you want to close the dialog window?\",\"options\":\"Опције\",\"target\":\"Meтa\",\"targetNew\":\"New Window (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"Same Window (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"С лева на десно (LTR)\",\"langDirRTL\":\"С десна на лево (RTL)\",\"styles\":\"Стил\",\"cssClasses\":\"Stylesheet класе\",\"width\":\"Ширина\",\"height\":\"Висина\",\"align\":\"Равнање\",\"alignLeft\":\"Лево\",\"alignRight\":\"Десно\",\"alignCenter\":\"Средина\",\"alignJustify\":\"Обострано равнање\",\"alignTop\":\"Врх\",\"alignMiddle\":\"Средина\",\"alignBottom\":\"Доле\",\"alignNone\":\"None\",\"invalidValue\":\"Invalid value.\",\"invalidHeight\":\"Height must be a number.\",\"invalidWidth\":\"Width must be a number.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"About CKEditor\",\"help\":\"Check $1 for help.\",\"moreInfo\":\"For licensing information please visit our web site:\",\"title\":\"About CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"Подебљано\",\"italic\":\"Курзив\",\"strike\":\"Прецртано\",\"subscript\":\"Индекс\",\"superscript\":\"Степен\",\"underline\":\"Подвучено\"},\"blockquote\":{\"toolbar\":\"Block Quote\"},\"clipboard\":{\"copy\":\"Копирај\",\"copyError\":\"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+C).\",\"cut\":\"Исеци\",\"cutError\":\"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+X).\",\"paste\":\"Залепи\",\"pasteArea\":\"Залепи зону\",\"pasteMsg\":\"Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl/Cmd+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.\",\"securityMsg\":\"Због сигурносних подешавања претраживача, едитор не може да приступи оставу. Требате да га поново залепите у овом прозору.\",\"title\":\"Залепи\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"Склопи алатну траку\",\"toolbarExpand\":\"Прошири алатну траку\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"Едитор алатне траке\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Формат\",\"panelTitle\":\"Формат\",\"tag_address\":\"Adresa\",\"tag_div\":\"Нормално (DIV)\",\"tag_h1\":\"Heading 1\",\"tag_h2\":\"Heading 2\",\"tag_h3\":\"Heading 3\",\"tag_h4\":\"Heading 4\",\"tag_h5\":\"Heading 5\",\"tag_h6\":\"Heading 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatirano\"},\"horizontalrule\":{\"toolbar\":\"Унеси хоризонталну линију\"},\"image\":{\"alt\":\"Алтернативни текст\",\"border\":\"Оквир\",\"btnUpload\":\"Пошаљи на сервер\",\"button2Img\":\"Да ли желите да промените одабрану слику дугмета као једноставну слику?\",\"hSpace\":\"HSpace\",\"img2Button\":\"Да ли желите да промените одабрану слику у слику дугмета?\",\"infoTab\":\"Инфо слике\",\"linkTab\":\"Линк\",\"lockRatio\":\"Закључај однос\",\"menu\":\"Особине слика\",\"resetSize\":\"Ресетуј величину\",\"title\":\"Особине слика\",\"titleButton\":\"Особине дугмета са сликом\",\"upload\":\"Пошаљи\",\"urlMissing\":\"Недостаје УРЛ слике.\",\"vSpace\":\"VSpace\",\"validateBorder\":\"Ивица треба да буде цифра.\",\"validateHSpace\":\"HSpace треба да буде цифра.\",\"validateVSpace\":\"VSpace треба да буде цифра.\"},\"indent\":{\"indent\":\"Увећај леву маргину\",\"outdent\":\"Смањи леву маргину\"},\"fakeobjects\":{\"anchor\":\"Anchor\",\"flash\":\"Flash Animation\",\"hiddenfield\":\"Hidden Field\",\"iframe\":\"IFrame\",\"unknown\":\"Unknown Object\"},\"link\":{\"acccessKey\":\"Приступни тастер\",\"advanced\":\"Напредни тагови\",\"advisoryContentType\":\"Advisory врста садржаја\",\"advisoryTitle\":\"Advisory наслов\",\"anchor\":{\"toolbar\":\"Унеси/измени сидро\",\"menu\":\"Особине сидра\",\"title\":\"Особине сидра\",\"name\":\"Име сидра\",\"errorName\":\"Молимо Вас да унесете име сидра\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"Пo Ид-jу елемента\",\"anchorName\":\"По називу сидра\",\"charset\":\"Linked Resource Charset\",\"cssClasses\":\"Stylesheet класе\",\"emailAddress\":\"Адреса електронске поште\",\"emailBody\":\"Садржај поруке\",\"emailSubject\":\"Наслов\",\"id\":\"Ид\",\"info\":\"Линк инфо\",\"langCode\":\"Смер језика\",\"langDir\":\"Смер језика\",\"langDirLTR\":\"С лева на десно (LTR)\",\"langDirRTL\":\"С десна на лево (RTL)\",\"menu\":\"Промени линк\",\"name\":\"Назив\",\"noAnchors\":\"(Нема доступних сидра)\",\"noEmail\":\"Откуцајте адресу електронске поште\",\"noUrl\":\"Унесите УРЛ линка\",\"other\":\"<друго>\",\"popupDependent\":\"Зависно (Netscape)\",\"popupFeatures\":\"Могућности искачућег прозора\",\"popupFullScreen\":\"Приказ преко целог екрана (ИE)\",\"popupLeft\":\"Од леве ивице екрана (пиксела)\",\"popupLocationBar\":\"Локација\",\"popupMenuBar\":\"Контекстни мени\",\"popupResizable\":\"Величина се мења\",\"popupScrollBars\":\"Скрол бар\",\"popupStatusBar\":\"Статусна линија\",\"popupToolbar\":\"Toolbar\",\"popupTop\":\"Од врха екрана (пиксела)\",\"rel\":\"Однос\",\"selectAnchor\":\"Одабери сидро\",\"styles\":\"Стил\",\"tabIndex\":\"Таб индекс\",\"target\":\"Meтa\",\"targetFrame\":\"<оквир>\",\"targetFrameName\":\"Назив одредишног фрејма\",\"targetPopup\":\"<искачући прозор>\",\"targetPopupName\":\"Назив искачућег прозора\",\"title\":\"Линк\",\"toAnchor\":\"Сидро на овој страници\",\"toEmail\":\"Eлектронска пошта\",\"toUrl\":\"УРЛ\",\"toolbar\":\"Унеси/измени линк\",\"type\":\"Врста линка\",\"unlink\":\"Уклони линк\",\"upload\":\"Пошаљи\"},\"list\":{\"bulletedlist\":\"Ненабројива листа\",\"numberedlist\":\"Набројиву листу\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"Maximize\",\"minimize\":\"Minimize\"},\"pastetext\":{\"button\":\"Залепи као чист текст\",\"title\":\"Залепи као чист текст\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"Залепи из Worda\",\"toolbar\":\"Залепи из Worda\"},\"removeformat\":{\"toolbar\":\"Уклони форматирање\"},\"sourcearea\":{\"toolbar\":\"Kôд\"},\"specialchar\":{\"options\":\"Опције специјалног карактера\",\"title\":\"Одаберите специјални карактер\",\"toolbar\":\"Унеси специјални карактер\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Стил\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"Величина оквира\",\"caption\":\"Наслов табеле\",\"cell\":{\"menu\":\"Cell\",\"insertBefore\":\"Insert Cell Before\",\"insertAfter\":\"Insert Cell After\",\"deleteCell\":\"Обриши ћелије\",\"merge\":\"Спој ћелије\",\"mergeRight\":\"Merge Right\",\"mergeDown\":\"Merge Down\",\"splitHorizontal\":\"Split Cell Horizontally\",\"splitVertical\":\"Split Cell Vertically\",\"title\":\"Cell Properties\",\"cellType\":\"Cell Type\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Horizontal Alignment\",\"vAlign\":\"Vertical Alignment\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Background Color\",\"borderColor\":\"Border Color\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Yes\",\"no\":\"No\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Choose\"},\"cellPad\":\"Размак ћелија\",\"cellSpace\":\"Ћелијски простор\",\"column\":{\"menu\":\"Column\",\"insertBefore\":\"Insert Column Before\",\"insertAfter\":\"Insert Column After\",\"deleteColumn\":\"Обриши колоне\"},\"columns\":\"Kолона\",\"deleteTable\":\"Обриши таблу\",\"headers\":\"Поглавља\",\"headersBoth\":\"Оба\",\"headersColumn\":\"Прва колона\",\"headersNone\":\"None\",\"headersRow\":\"Први ред\",\"invalidBorder\":\"Величина ивице треба да буде цифра.\",\"invalidCellPadding\":\"Пуњење ћелије треба да буде позитивна цифра.\",\"invalidCellSpacing\":\"Размак ћелије треба да буде позитивна цифра.\",\"invalidCols\":\"Број колона треба да буде цифра већа од 0.\",\"invalidHeight\":\"Висина табеле треба да буде цифра.\",\"invalidRows\":\"Број реда треба да буде цифра већа од 0.\",\"invalidWidth\":\"Ширина табеле треба да буде цифра.\",\"menu\":\"Особине табеле\",\"row\":{\"menu\":\"Row\",\"insertBefore\":\"Insert Row Before\",\"insertAfter\":\"Insert Row After\",\"deleteRow\":\"Обриши редове\"},\"rows\":\"Редова\",\"summary\":\"Резиме\",\"title\":\"Особине табеле\",\"toolbar\":\"Табела\",\"widthPc\":\"процената\",\"widthPx\":\"пиксела\",\"widthUnit\":\"јединица ширине\"},\"undo\":{\"redo\":\"Понови акцију\",\"undo\":\"Поништи акцију\"},\"wsc\":{\"btnIgnore\":\"Игнориши\",\"btnIgnoreAll\":\"Игнориши све\",\"btnReplace\":\"Замени\",\"btnReplaceAll\":\"Замени све\",\"btnUndo\":\"Врати акцију\",\"changeTo\":\"Измени\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Провера спеловања није инсталирана. Да ли желите да је скинете са Интернета?\",\"manyChanges\":\"Провера спеловања завршена:  %1 реч(и) је измењено\",\"noChanges\":\"Провера спеловања завршена: Није измењена ниједна реч\",\"noMispell\":\"Провера спеловања завршена: грешке нису пронађене\",\"noSuggestions\":\"- Без сугестија -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Није у речнику\",\"oneChange\":\"Провера спеловања завршена: Измењена је једна реч\",\"progress\":\"Провера спеловања у току...\",\"title\":\"Spell Checker\",\"toolbar\":\"Провери спеловање\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/sv.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['sv']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Tryck ALT 0 för hjälp\",\"browseServer\":\"Bläddra på server\",\"url\":\"URL\",\"protocol\":\"Protokoll\",\"upload\":\"Ladda upp\",\"uploadSubmit\":\"Skicka till server\",\"image\":\"Bild\",\"flash\":\"Flash\",\"form\":\"Formulär\",\"checkbox\":\"Kryssruta\",\"radio\":\"Alternativknapp\",\"textField\":\"Textfält\",\"textarea\":\"Textruta\",\"hiddenField\":\"Dolt fält\",\"button\":\"Knapp\",\"select\":\"Flervalslista\",\"imageButton\":\"Bildknapp\",\"notSet\":\"<ej angivet>\",\"id\":\"Id\",\"name\":\"Namn\",\"langDir\":\"Språkriktning\",\"langDirLtr\":\"Vänster till Höger (VTH)\",\"langDirRtl\":\"Höger till Vänster (HTV)\",\"langCode\":\"Språkkod\",\"longDescr\":\"URL-beskrivning\",\"cssClass\":\"Stilmall\",\"advisoryTitle\":\"Titel\",\"cssStyle\":\"Stilmall\",\"ok\":\"OK\",\"cancel\":\"Avbryt\",\"close\":\"Stäng\",\"preview\":\"Förhandsgranska\",\"resize\":\"Dra för att ändra storlek\",\"generalTab\":\"Allmänt\",\"advancedTab\":\"Avancerad\",\"validateNumberFailed\":\"Värdet är inte ett nummer.\",\"confirmNewPage\":\"Alla ändringar i innehållet kommer att förloras. Är du säker på att du vill ladda en ny sida?\",\"confirmCancel\":\"Några av alternativen har ändrats. Är du säker på att du vill stänga dialogrutan?\",\"options\":\"Alternativ\",\"target\":\"Mål\",\"targetNew\":\"Nytt fönster (_blank)\",\"targetTop\":\"Översta fönstret (_top)\",\"targetSelf\":\"Samma fönster (_self)\",\"targetParent\":\"Föregående fönster (_parent)\",\"langDirLTR\":\"Vänster till höger (LTR)\",\"langDirRTL\":\"Höger till vänster (RTL)\",\"styles\":\"Stil\",\"cssClasses\":\"Stilmallar\",\"width\":\"Bredd\",\"height\":\"Höjd\",\"align\":\"Justering\",\"alignLeft\":\"Vänster\",\"alignRight\":\"Höger\",\"alignCenter\":\"Centrerad\",\"alignJustify\":\"Justera till marginaler\",\"alignTop\":\"Överkant\",\"alignMiddle\":\"Mitten\",\"alignBottom\":\"Nederkant\",\"alignNone\":\"Ingen\",\"invalidValue\":\"Felaktigt värde.\",\"invalidHeight\":\"Höjd måste vara ett nummer.\",\"invalidWidth\":\"Bredd måste vara ett nummer.\",\"invalidCssLength\":\"Värdet för fältet \\\"%1\\\" måste vara ett positivt nummer med eller utan CSS-mätenheter (px, %, in, cm, mm, em, ex, pt, eller pc).\",\"invalidHtmlLength\":\"Värdet för fältet \\\"%1\\\" måste vara ett positivt nummer med eller utan godkända HTML-mätenheter (px eller %).\",\"invalidInlineStyle\":\"Det angivna värdet för style måste innehålla en eller flera tupler separerade med semikolon i följande format: \\\"name : value\\\"\",\"cssLengthTooltip\":\"Ange ett nummer i pixlar eller ett nummer men godkänd CSS-mätenhet (px, %, in, cm, mm, em, ex, pt, eller pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, Ej tillgänglig</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Alla rättigheter reserverade.\",\"dlgTitle\":\"Om CKEditor\",\"help\":\"Se $1 för hjälp.\",\"moreInfo\":\"För information av licensiering besök vår hemsida:\",\"title\":\"Om CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"Fet\",\"italic\":\"Kursiv\",\"strike\":\"Genomstruken\",\"subscript\":\"Nedsänkta tecken\",\"superscript\":\"Upphöjda tecken\",\"underline\":\"Understruken\"},\"blockquote\":{\"toolbar\":\"Blockcitat\"},\"clipboard\":{\"copy\":\"Kopiera\",\"copyError\":\"Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden kopiera. Använd (Ctrl/Cmd+C) istället.\",\"cut\":\"Klipp ut\",\"cutError\":\"Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden klipp ut. Använd (Ctrl/Cmd+X) istället.\",\"paste\":\"Klistra in\",\"pasteArea\":\"Paste Area\",\"pasteMsg\":\"Var god och klistra in Er text i rutan nedan genom att använda (<strong>Ctrl/Cmd+V</strong>) klicka sen på OK.\",\"securityMsg\":\"På grund av din webbläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.\",\"title\":\"Klistra in\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Vald)\"},\"toolbar\":{\"toolbarCollapse\":\"Dölj verktygsfält\",\"toolbarExpand\":\"Visa verktygsfält\",\"toolbarGroups\":{\"document\":\"Dokument\",\"clipboard\":\"Urklipp/ångra\",\"editing\":\"Redigering\",\"forms\":\"Formulär\",\"basicstyles\":\"Basstilar\",\"paragraph\":\"Paragraf\",\"links\":\"Länkar\",\"insert\":\"Infoga\",\"styles\":\"Stilar\",\"colors\":\"Färger\",\"tools\":\"Verktyg\"},\"toolbars\":\"Redigera verktygsfält\"},\"elementspath\":{\"eleLabel\":\"Elementets sökväg\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"Teckenformat\",\"panelTitle\":\"Teckenformat\",\"tag_address\":\"Adress\",\"tag_div\":\"Normal (DIV)\",\"tag_h1\":\"Rubrik 1\",\"tag_h2\":\"Rubrik 2\",\"tag_h3\":\"Rubrik 3\",\"tag_h4\":\"Rubrik 4\",\"tag_h5\":\"Rubrik 5\",\"tag_h6\":\"Rubrik 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formaterad\"},\"horizontalrule\":{\"toolbar\":\"Infoga horisontal linje\"},\"image\":{\"alt\":\"Alternativ text\",\"border\":\"Kant\",\"btnUpload\":\"Skicka till server\",\"button2Img\":\"Vill du omvandla den valda bildknappen på en enkel bild?\",\"hSpace\":\"Horis. marginal\",\"img2Button\":\"Vill du omvandla den valda bildknappen på en enkel bild?\",\"infoTab\":\"Bildinformation\",\"linkTab\":\"Länk\",\"lockRatio\":\"Lås höjd/bredd förhållanden\",\"menu\":\"Bildegenskaper\",\"resetSize\":\"Återställ storlek\",\"title\":\"Bildegenskaper\",\"titleButton\":\"Egenskaper för bildknapp\",\"upload\":\"Ladda upp\",\"urlMissing\":\"Bildkällans URL saknas.\",\"vSpace\":\"Vert. marginal\",\"validateBorder\":\"Kantlinje måste vara ett heltal.\",\"validateHSpace\":\"HSpace måste vara ett heltal.\",\"validateVSpace\":\"VSpace måste vara ett heltal.\"},\"indent\":{\"indent\":\"Öka indrag\",\"outdent\":\"Minska indrag\"},\"fakeobjects\":{\"anchor\":\"Ankare\",\"flash\":\"Flashanimation\",\"hiddenfield\":\"Gömt fält\",\"iframe\":\"iFrame\",\"unknown\":\"Okänt objekt\"},\"link\":{\"acccessKey\":\"Behörighetsnyckel\",\"advanced\":\"Avancerad\",\"advisoryContentType\":\"Innehållstyp\",\"advisoryTitle\":\"Titel\",\"anchor\":{\"toolbar\":\"Infoga/Redigera ankarlänk\",\"menu\":\"Egenskaper för ankarlänk\",\"title\":\"Egenskaper för ankarlänk\",\"name\":\"Ankarnamn\",\"errorName\":\"Var god ange ett ankarnamn\",\"remove\":\"Radera ankare\"},\"anchorId\":\"Efter element-id\",\"anchorName\":\"Efter ankarnamn\",\"charset\":\"Teckenuppställning\",\"cssClasses\":\"Stilmall\",\"emailAddress\":\"E-postadress\",\"emailBody\":\"Innehåll\",\"emailSubject\":\"Ämne\",\"id\":\"Id\",\"info\":\"Länkinformation\",\"langCode\":\"Språkkod\",\"langDir\":\"Språkriktning\",\"langDirLTR\":\"Vänster till höger (VTH)\",\"langDirRTL\":\"Höger till vänster (HTV)\",\"menu\":\"Redigera länk\",\"name\":\"Namn\",\"noAnchors\":\"(Inga ankare kunde hittas)\",\"noEmail\":\"Var god ange e-postadress\",\"noUrl\":\"Var god ange länkens URL\",\"other\":\"<annan>\",\"popupDependent\":\"Beroende (endast Netscape)\",\"popupFeatures\":\"Popup-fönstrets egenskaper\",\"popupFullScreen\":\"Helskärm (endast IE)\",\"popupLeft\":\"Position från vänster\",\"popupLocationBar\":\"Adressfält\",\"popupMenuBar\":\"Menyfält\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"Scrolllista\",\"popupStatusBar\":\"Statusfält\",\"popupToolbar\":\"Verktygsfält\",\"popupTop\":\"Position från sidans topp\",\"rel\":\"Förhållande\",\"selectAnchor\":\"Välj ett ankare\",\"styles\":\"Stilmall\",\"tabIndex\":\"Tabindex\",\"target\":\"Mål\",\"targetFrame\":\"<ram>\",\"targetFrameName\":\"Målets ramnamn\",\"targetPopup\":\"<popup-fönster>\",\"targetPopupName\":\"Popup-fönstrets namn\",\"title\":\"Länk\",\"toAnchor\":\"Länk till ankare i texten\",\"toEmail\":\"E-post\",\"toUrl\":\"URL\",\"toolbar\":\"Infoga/Redigera länk\",\"type\":\"Länktyp\",\"unlink\":\"Radera länk\",\"upload\":\"Ladda upp\"},\"list\":{\"bulletedlist\":\"Infoga/ta bort punktlista\",\"numberedlist\":\"Infoga/ta bort numrerad lista\"},\"magicline\":{\"title\":\"Infoga paragraf här\"},\"maximize\":{\"maximize\":\"Maximera\",\"minimize\":\"Minimera\"},\"pastetext\":{\"button\":\"Klistra in som vanlig text\",\"title\":\"Klistra in som vanlig text\"},\"pastefromword\":{\"confirmCleanup\":\"Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa den innan du klistrar in den?\",\"error\":\"Det var inte möjligt att städa upp den inklistrade data på grund av ett internt fel\",\"title\":\"Klistra in från Word\",\"toolbar\":\"Klistra in från Word\"},\"removeformat\":{\"toolbar\":\"Radera formatering\"},\"sourcearea\":{\"toolbar\":\"Källa\"},\"specialchar\":{\"options\":\"Alternativ för utökade tecken\",\"title\":\"Välj utökat tecken\",\"toolbar\":\"Klistra in utökat tecken\"},\"scayt\":{\"btn_about\":\"Om SCAYT\",\"btn_dictionaries\":\"Ordlistor\",\"btn_disable\":\"Inaktivera SCAYT\",\"btn_enable\":\"Aktivera SCAYT\",\"btn_langs\":\"Språk\",\"btn_options\":\"Inställningar\",\"text_title\":\"Stavningskontroll medan du skriver\"},\"stylescombo\":{\"label\":\"Anpassad stil\",\"panelTitle\":\"Formatmallar\",\"panelTitle1\":\"Blockstil\",\"panelTitle2\":\"Inbäddad stil\",\"panelTitle3\":\"Objektets stil\"},\"table\":{\"border\":\"Kantstorlek\",\"caption\":\"Rubrik\",\"cell\":{\"menu\":\"Cell\",\"insertBefore\":\"Lägg till cell före\",\"insertAfter\":\"Lägg till cell efter\",\"deleteCell\":\"Radera celler\",\"merge\":\"Sammanfoga celler\",\"mergeRight\":\"Sammanfoga höger\",\"mergeDown\":\"Sammanfoga ner\",\"splitHorizontal\":\"Dela cell horisontellt\",\"splitVertical\":\"Dela cell vertikalt\",\"title\":\"Egenskaper för cell\",\"cellType\":\"Celltyp\",\"rowSpan\":\"Rad spann\",\"colSpan\":\"Kolumnen spann\",\"wordWrap\":\"Radbrytning\",\"hAlign\":\"Horisontell justering\",\"vAlign\":\"Vertikal justering\",\"alignBaseline\":\"Baslinje\",\"bgColor\":\"Bakgrundsfärg\",\"borderColor\":\"Ramfärg\",\"data\":\"Data\",\"header\":\"Rubrik\",\"yes\":\"Ja\",\"no\":\"Nej\",\"invalidWidth\":\"Cellens bredd måste vara ett nummer.\",\"invalidHeight\":\"Cellens höjd måste vara ett nummer.\",\"invalidRowSpan\":\"Radutvidgning måste vara ett heltal.\",\"invalidColSpan\":\"Kolumn måste vara ett heltal.\",\"chooseColor\":\"Välj\"},\"cellPad\":\"Cellutfyllnad\",\"cellSpace\":\"Cellavstånd\",\"column\":{\"menu\":\"Kolumn\",\"insertBefore\":\"Lägg till kolumn före\",\"insertAfter\":\"Lägg till kolumn efter\",\"deleteColumn\":\"Radera kolumn\"},\"columns\":\"Kolumner\",\"deleteTable\":\"Radera tabell\",\"headers\":\"Rubriker\",\"headersBoth\":\"Båda\",\"headersColumn\":\"Första kolumnen\",\"headersNone\":\"Ingen\",\"headersRow\":\"Första raden\",\"invalidBorder\":\"Ram måste vara ett nummer.\",\"invalidCellPadding\":\"Luft i cell måste vara ett nummer.\",\"invalidCellSpacing\":\"Luft i cell måste vara ett nummer.\",\"invalidCols\":\"Antal kolumner måste vara ett nummer större än 0.\",\"invalidHeight\":\"Tabellens höjd måste vara ett nummer.\",\"invalidRows\":\"Antal rader måste vara större än 0.\",\"invalidWidth\":\"Tabell måste vara ett nummer.\",\"menu\":\"Tabellegenskaper\",\"row\":{\"menu\":\"Rad\",\"insertBefore\":\"Lägg till rad före\",\"insertAfter\":\"Lägg till rad efter\",\"deleteRow\":\"Radera rad\"},\"rows\":\"Rader\",\"summary\":\"Sammanfattning\",\"title\":\"Tabellegenskaper\",\"toolbar\":\"Tabell\",\"widthPc\":\"procent\",\"widthPx\":\"pixlar\",\"widthUnit\":\"enhet bredd\"},\"undo\":{\"redo\":\"Gör om\",\"undo\":\"Ångra\"},\"wsc\":{\"btnIgnore\":\"Ignorera\",\"btnIgnoreAll\":\"Ignorera alla\",\"btnReplace\":\"Ersätt\",\"btnReplaceAll\":\"Ersätt alla\",\"btnUndo\":\"Ångra\",\"changeTo\":\"Ändra till\",\"errorLoading\":\"Tjänsten är ej tillgänglig: %s.\",\"ieSpellDownload\":\"Stavningskontrollen är ej installerad. Vill du göra det nu?\",\"manyChanges\":\"Stavningskontroll slutförd: %1 ord rättades.\",\"noChanges\":\"Stavningskontroll slutförd: Inga ord rättades.\",\"noMispell\":\"Stavningskontroll slutförd: Inga stavfel påträffades.\",\"noSuggestions\":\"- Förslag saknas -\",\"notAvailable\":\"Tyvärr är tjänsten ej tillgänglig nu\",\"notInDic\":\"Saknas i ordlistan\",\"oneChange\":\"Stavningskontroll slutförd: Ett ord rättades.\",\"progress\":\"Stavningskontroll pågår...\",\"title\":\"Kontrollera stavning\",\"toolbar\":\"Stavningskontroll\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/th.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['th']={\"editor\":\"Rich Text Editor\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"กด ALT 0 หากต้องการความช่วยเหลือ\",\"browseServer\":\"เปิดหน้าต่างจัดการไฟล์อัพโหลด\",\"url\":\"ที่อยู่อ้างอิง URL\",\"protocol\":\"โปรโตคอล\",\"upload\":\"อัพโหลดไฟล์\",\"uploadSubmit\":\"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)\",\"image\":\"รูปภาพ\",\"flash\":\"ไฟล์ Flash\",\"form\":\"แบบฟอร์ม\",\"checkbox\":\"เช็คบ๊อก\",\"radio\":\"เรดิโอบัตตอน\",\"textField\":\"เท็กซ์ฟิลด์\",\"textarea\":\"เท็กซ์แอเรีย\",\"hiddenField\":\"ฮิดเดนฟิลด์\",\"button\":\"ปุ่ม\",\"select\":\"แถบตัวเลือก\",\"imageButton\":\"ปุ่มแบบรูปภาพ\",\"notSet\":\"<ไม่ระบุ>\",\"id\":\"ไอดี\",\"name\":\"ชื่อ\",\"langDir\":\"การเขียน-อ่านภาษา\",\"langDirLtr\":\"จากซ้ายไปขวา (LTR)\",\"langDirRtl\":\"จากขวามาซ้าย (RTL)\",\"langCode\":\"รหัสภาษา\",\"longDescr\":\"คำอธิบายประกอบ URL\",\"cssClass\":\"คลาสของไฟล์กำหนดลักษณะการแสดงผล\",\"advisoryTitle\":\"คำเกริ่นนำ\",\"cssStyle\":\"ลักษณะการแสดงผล\",\"ok\":\"ตกลง\",\"cancel\":\"ยกเลิก\",\"close\":\"ปิด\",\"preview\":\"ดูหน้าเอกสารตัวอย่าง\",\"resize\":\"ปรับขนาด\",\"generalTab\":\"ทั่วไป\",\"advancedTab\":\"ขั้นสูง\",\"validateNumberFailed\":\"ค่านี้ไม่ใช่ตัวเลข\",\"confirmNewPage\":\"การเปลี่ยนแปลงใดๆ ในเนื้อหานี้ ที่ไม่ได้ถูกบันทึกไว้ จะสูญหายทั้งหมด คุณแน่ใจว่าจะเรียกหน้าใหม่?\",\"confirmCancel\":\"ตัวเลือกบางตัวมีการเปลี่ยนแปลง คุณแน่ใจว่าจะปิดกล่องโต้ตอบนี้?\",\"options\":\"ตัวเลือก\",\"target\":\"การเปิดหน้าลิงค์\",\"targetNew\":\"หน้าต่างใหม่ (_blank)\",\"targetTop\":\"Topmost Window (_top)\",\"targetSelf\":\"หน้าต่างเดียวกัน (_self)\",\"targetParent\":\"Parent Window (_parent)\",\"langDirLTR\":\"จากซ้ายไปขวา (LTR)\",\"langDirRTL\":\"จากขวามาซ้าย (RTL)\",\"styles\":\"ลักษณะการแสดงผล\",\"cssClasses\":\"คลาสของไฟล์กำหนดลักษณะการแสดงผล\",\"width\":\"ความกว้าง\",\"height\":\"ความสูง\",\"align\":\"การจัดวาง\",\"alignLeft\":\"ชิดซ้าย\",\"alignRight\":\"ชิดขวา\",\"alignCenter\":\"กึ่งกลาง\",\"alignJustify\":\"நியாயப்படுத்தவும்\",\"alignTop\":\"บนสุด\",\"alignMiddle\":\"กึ่งกลางแนวตั้ง\",\"alignBottom\":\"ชิดด้านล่าง\",\"alignNone\":\"None\",\"invalidValue\":\"ค่าไม่ถูกต้อง\",\"invalidHeight\":\"ความสูงต้องเป็นตัวเลข\",\"invalidWidth\":\"ความกว้างต้องเป็นตัวเลข\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"About CKEditor\",\"help\":\"Check $1 for help.\",\"moreInfo\":\"For licensing information please visit our web site:\",\"title\":\"About CKEditor\",\"userGuide\":\"CKEditor User's Guide\"},\"basicstyles\":{\"bold\":\"ตัวหนา\",\"italic\":\"ตัวเอียง\",\"strike\":\"ตัวขีดเส้นทับ\",\"subscript\":\"ตัวห้อย\",\"superscript\":\"ตัวยก\",\"underline\":\"ตัวขีดเส้นใต้\"},\"blockquote\":{\"toolbar\":\"Block Quote\"},\"clipboard\":{\"copy\":\"สำเนา\",\"copyError\":\"ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว C พร้อมกัน).\",\"cut\":\"ตัด\",\"cutError\":\"ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว X พร้อมกัน).\",\"paste\":\"วาง\",\"pasteArea\":\"Paste Area\",\"pasteMsg\":\"กรุณาใช้คีย์บอร์ดเท่านั้น โดยกดปุ๋ม (<strong>Ctrl/Cmd และ V</strong>)พร้อมๆกัน และกด <strong>OK</strong>.\",\"securityMsg\":\"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.\",\"title\":\"วาง\"},\"contextmenu\":{\"options\":\"Context Menu Options\"},\"button\":{\"selectedLabel\":\"%1 (Selected)\"},\"toolbar\":{\"toolbarCollapse\":\"ซ่อนแถบเครื่องมือ\",\"toolbarExpand\":\"เปิดแถบเครื่องมือ\",\"toolbarGroups\":{\"document\":\"Document\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Editing\",\"forms\":\"Forms\",\"basicstyles\":\"Basic Styles\",\"paragraph\":\"Paragraph\",\"links\":\"Links\",\"insert\":\"Insert\",\"styles\":\"Styles\",\"colors\":\"Colors\",\"tools\":\"Tools\"},\"toolbars\":\"แถบเครื่องมือช่วยพิมพ์ข้อความ\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 element\"},\"format\":{\"label\":\"รูปแบบ\",\"panelTitle\":\"รูปแบบ\",\"tag_address\":\"Address\",\"tag_div\":\"Paragraph (DIV)\",\"tag_h1\":\"Heading 1\",\"tag_h2\":\"Heading 2\",\"tag_h3\":\"Heading 3\",\"tag_h4\":\"Heading 4\",\"tag_h5\":\"Heading 5\",\"tag_h6\":\"Heading 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Formatted\"},\"horizontalrule\":{\"toolbar\":\"แทรกเส้นคั่นบรรทัด\"},\"image\":{\"alt\":\"คำประกอบรูปภาพ\",\"border\":\"ขนาดขอบรูป\",\"btnUpload\":\"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"ระยะแนวนอน\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"ข้อมูลของรูปภาพ\",\"linkTab\":\"ลิ้งค์\",\"lockRatio\":\"กำหนดอัตราส่วน กว้าง-สูง แบบคงที่\",\"menu\":\"คุณสมบัติของ รูปภาพ\",\"resetSize\":\"กำหนดรูปเท่าขนาดจริง\",\"title\":\"คุณสมบัติของ รูปภาพ\",\"titleButton\":\"คุณสมบัติของ ปุ่มแบบรูปภาพ\",\"upload\":\"อัพโหลดไฟล์\",\"urlMissing\":\"Image source URL is missing.\",\"vSpace\":\"ระยะแนวตั้ง\",\"validateBorder\":\"Border must be a whole number.\",\"validateHSpace\":\"HSpace must be a whole number.\",\"validateVSpace\":\"VSpace must be a whole number.\"},\"indent\":{\"indent\":\"เพิ่มระยะย่อหน้า\",\"outdent\":\"ลดระยะย่อหน้า\"},\"fakeobjects\":{\"anchor\":\"แทรก/แก้ไข Anchor\",\"flash\":\"ภาพอนิเมชั่นแฟลช\",\"hiddenfield\":\"ฮิดเดนฟิลด์\",\"iframe\":\"IFrame\",\"unknown\":\"วัตถุไม่ทราบชนิด\"},\"link\":{\"acccessKey\":\"แอคเซส คีย์\",\"advanced\":\"ขั้นสูง\",\"advisoryContentType\":\"ชนิดของคำเกริ่นนำ\",\"advisoryTitle\":\"คำเกริ่นนำ\",\"anchor\":{\"toolbar\":\"แทรก/แก้ไข Anchor\",\"menu\":\"รายละเอียด Anchor\",\"title\":\"รายละเอียด Anchor\",\"name\":\"ชื่อ Anchor\",\"errorName\":\"กรุณาระบุชื่อของ Anchor\",\"remove\":\"Remove Anchor\"},\"anchorId\":\"ไอดี\",\"anchorName\":\"ชื่อ\",\"charset\":\"ลิงค์เชื่อมโยงไปยังชุดตัวอักษร\",\"cssClasses\":\"คลาสของไฟล์กำหนดลักษณะการแสดงผล\",\"emailAddress\":\"อีเมล์ (E-Mail)\",\"emailBody\":\"ข้อความ\",\"emailSubject\":\"หัวเรื่อง\",\"id\":\"ไอดี\",\"info\":\"รายละเอียด\",\"langCode\":\"การเขียน-อ่านภาษา\",\"langDir\":\"การเขียน-อ่านภาษา\",\"langDirLTR\":\"จากซ้ายไปขวา (LTR)\",\"langDirRTL\":\"จากขวามาซ้าย (RTL)\",\"menu\":\"แก้ไข ลิงค์\",\"name\":\"ชื่อ\",\"noAnchors\":\"(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)\",\"noEmail\":\"กรุณาระบุอีเมล์ (E-mail)\",\"noUrl\":\"กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)\",\"other\":\"<อื่น ๆ>\",\"popupDependent\":\"แสดงเต็มหน้าจอ (Netscape)\",\"popupFeatures\":\"คุณสมบัติของหน้าจอเล็ก (Pop-up)\",\"popupFullScreen\":\"แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)\",\"popupLeft\":\"พิกัดซ้าย (Left Position)\",\"popupLocationBar\":\"แสดงที่อยู่ของไฟล์\",\"popupMenuBar\":\"แสดงแถบเมนู\",\"popupResizable\":\"สามารถปรับขนาดได้\",\"popupScrollBars\":\"แสดงแถบเลื่อน\",\"popupStatusBar\":\"แสดงแถบสถานะ\",\"popupToolbar\":\"แสดงแถบเครื่องมือ\",\"popupTop\":\"พิกัดบน (Top Position)\",\"rel\":\"ความสัมพันธ์\",\"selectAnchor\":\"ระบุข้อมูลของจุดเชื่อมโยง (Anchor)\",\"styles\":\"ลักษณะการแสดงผล\",\"tabIndex\":\"ลำดับของ แท็บ\",\"target\":\"การเปิดหน้าลิงค์\",\"targetFrame\":\"<เปิดในเฟรม>\",\"targetFrameName\":\"ชื่อทาร์เก็ตเฟรม\",\"targetPopup\":\"<เปิดหน้าจอเล็ก (Pop-up)>\",\"targetPopupName\":\"ระบุชื่อหน้าจอเล็ก (Pop-up)\",\"title\":\"ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ\",\"toAnchor\":\"จุดเชื่อมโยง (Anchor)\",\"toEmail\":\"ส่งอีเมล์ (E-Mail)\",\"toUrl\":\"ที่อยู่อ้างอิง URL\",\"toolbar\":\"แทรก/แก้ไข ลิงค์\",\"type\":\"ประเภทของลิงค์\",\"unlink\":\"ลบ ลิงค์\",\"upload\":\"อัพโหลดไฟล์\"},\"list\":{\"bulletedlist\":\"ลำดับรายการแบบสัญลักษณ์\",\"numberedlist\":\"ลำดับรายการแบบตัวเลข\"},\"magicline\":{\"title\":\"Insert paragraph here\"},\"maximize\":{\"maximize\":\"ขยายใหญ่\",\"minimize\":\"ย่อขนาด\"},\"pastetext\":{\"button\":\"วางแบบตัวอักษรธรรมดา\",\"title\":\"วางแบบตัวอักษรธรรมดา\"},\"pastefromword\":{\"confirmCleanup\":\"ข้อความที่คุณต้องการวางลงไปเป็นข้อความที่คัดลอกมาจากโปรแกรมไมโครซอฟท์เวิร์ด คุณต้องการล้างค่าข้อความดังกล่าวก่อนวางลงไปหรือไม่?\",\"error\":\"ไม่สามารถล้างข้อมูลที่ต้องการวางได้เนื่องจากเกิดข้อผิดพลาดภายในระบบ\",\"title\":\"วางสำเนาจากตัวอักษรเวิร์ด\",\"toolbar\":\"วางสำเนาจากตัวอักษรเวิร์ด\"},\"removeformat\":{\"toolbar\":\"ล้างรูปแบบ\"},\"sourcearea\":{\"toolbar\":\"ดูรหัส HTML\"},\"specialchar\":{\"options\":\"Special Character Options\",\"title\":\"แทรกตัวอักษรพิเศษ\",\"toolbar\":\"แทรกตัวอักษรพิเศษ\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"ลักษณะ\",\"panelTitle\":\"Formatting Styles\",\"panelTitle1\":\"Block Styles\",\"panelTitle2\":\"Inline Styles\",\"panelTitle3\":\"Object Styles\"},\"table\":{\"border\":\"ขนาดเส้นขอบ\",\"caption\":\"หัวเรื่องของตาราง\",\"cell\":{\"menu\":\"ช่องตาราง\",\"insertBefore\":\"Insert Cell Before\",\"insertAfter\":\"Insert Cell After\",\"deleteCell\":\"ลบช่อง\",\"merge\":\"ผสานช่อง\",\"mergeRight\":\"Merge Right\",\"mergeDown\":\"Merge Down\",\"splitHorizontal\":\"Split Cell Horizontally\",\"splitVertical\":\"Split Cell Vertically\",\"title\":\"Cell Properties\",\"cellType\":\"Cell Type\",\"rowSpan\":\"Rows Span\",\"colSpan\":\"Columns Span\",\"wordWrap\":\"Word Wrap\",\"hAlign\":\"Horizontal Alignment\",\"vAlign\":\"Vertical Alignment\",\"alignBaseline\":\"Baseline\",\"bgColor\":\"Background Color\",\"borderColor\":\"Border Color\",\"data\":\"Data\",\"header\":\"Header\",\"yes\":\"Yes\",\"no\":\"No\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Choose\"},\"cellPad\":\"ระยะแนวตั้ง\",\"cellSpace\":\"ระยะแนวนอนน\",\"column\":{\"menu\":\"คอลัมน์\",\"insertBefore\":\"Insert Column Before\",\"insertAfter\":\"Insert Column After\",\"deleteColumn\":\"ลบสดมน์\"},\"columns\":\"สดมน์\",\"deleteTable\":\"ลบตาราง\",\"headers\":\"ส่วนหัว\",\"headersBoth\":\"ทั้งสองอย่าง\",\"headersColumn\":\"คอลัมน์แรก\",\"headersNone\":\"None\",\"headersRow\":\"แถวแรก\",\"invalidBorder\":\"ขนาดเส้นกรอบต้องเป็นจำนวนตัวเลข\",\"invalidCellPadding\":\"ช่องว่างภายในเซลล์ต้องเลขจำนวนบวก\",\"invalidCellSpacing\":\"ช่องว่างภายในเซลล์ต้องเป็นเลขจำนวนบวก\",\"invalidCols\":\"จำนวนคอลัมน์ต้องเป็นจำนวนมากกว่า 0\",\"invalidHeight\":\"ส่วนสูงของตารางต้องเป็นตัวเลข\",\"invalidRows\":\"จำนวนของแถวต้องเป็นจำนวนมากกว่า 0\",\"invalidWidth\":\"ความกว้างตารางต้องเป็นตัวเลข\",\"menu\":\"คุณสมบัติของ ตาราง\",\"row\":{\"menu\":\"แถว\",\"insertBefore\":\"Insert Row Before\",\"insertAfter\":\"Insert Row After\",\"deleteRow\":\"ลบแถว\"},\"rows\":\"แถว\",\"summary\":\"สรุปความ\",\"title\":\"คุณสมบัติของ ตาราง\",\"toolbar\":\"ตาราง\",\"widthPc\":\"เปอร์เซ็น\",\"widthPx\":\"จุดสี\",\"widthUnit\":\"หน่วยความกว้าง\"},\"undo\":{\"redo\":\"ทำซ้ำคำสั่ง\",\"undo\":\"ยกเลิกคำสั่ง\"},\"wsc\":{\"btnIgnore\":\"ยกเว้น\",\"btnIgnoreAll\":\"ยกเว้นทั้งหมด\",\"btnReplace\":\"แทนที่\",\"btnReplaceAll\":\"แทนที่ทั้งหมด\",\"btnUndo\":\"ยกเลิก\",\"changeTo\":\"แก้ไขเป็น\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"ไม่ได้ติดตั้งระบบตรวจสอบคำสะกด. ต้องการติดตั้งไหมครับ?\",\"manyChanges\":\"ตรวจสอบคำสะกดเสร็จสิ้น:: แก้ไข %1 คำ\",\"noChanges\":\"ตรวจสอบคำสะกดเสร็จสิ้น: ไม่มีการแก้คำใดๆ\",\"noMispell\":\"ตรวจสอบคำสะกดเสร็จสิ้น: ไม่พบคำสะกดผิด\",\"noSuggestions\":\"- ไม่มีคำแนะนำใดๆ -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"ไม่พบในดิกชันนารี\",\"oneChange\":\"ตรวจสอบคำสะกดเสร็จสิ้น: แก้ไข1คำ\",\"progress\":\"กำลังตรวจสอบคำสะกด...\",\"title\":\"Spell Checker\",\"toolbar\":\"ตรวจการสะกดคำ\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/tr.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['tr']={\"editor\":\"Zengin Metin Editörü\",\"editorPanel\":\"Zengin Metin Editör Paneli\",\"common\":{\"editorHelp\":\"Yardım için ALT 0 tuşlarına basın\",\"browseServer\":\"Sunucuya Gözat\",\"url\":\"URL\",\"protocol\":\"Protokol\",\"upload\":\"Karşıya Yükle\",\"uploadSubmit\":\"Sunucuya Gönder\",\"image\":\"Resim\",\"flash\":\"Flash\",\"form\":\"Form\",\"checkbox\":\"Onay Kutusu\",\"radio\":\"Seçenek Düğmesi\",\"textField\":\"Metin Kutusu\",\"textarea\":\"Metin Alanı\",\"hiddenField\":\"Gizli Alan\",\"button\":\"Düğme\",\"select\":\"Seçme Alanı\",\"imageButton\":\"Resim Düğmesi\",\"notSet\":\"<tanımlanmamış>\",\"id\":\"Kimlik\",\"name\":\"İsim\",\"langDir\":\"Dil Yönü\",\"langDirLtr\":\"Soldan Sağa (LTR)\",\"langDirRtl\":\"Sağdan Sola (RTL)\",\"langCode\":\"Dil Kodlaması\",\"longDescr\":\"Uzun Tanımlı URL\",\"cssClass\":\"Biçem Sayfası Sınıfları\",\"advisoryTitle\":\"Öneri Başlığı\",\"cssStyle\":\"Biçem\",\"ok\":\"Tamam\",\"cancel\":\"İptal\",\"close\":\"Kapat\",\"preview\":\"Önizleme\",\"resize\":\"Yeniden Boyutlandır\",\"generalTab\":\"Genel\",\"advancedTab\":\"Gelişmiş\",\"validateNumberFailed\":\"Bu değer bir sayı değildir.\",\"confirmNewPage\":\"Bu içerikle ilgili kaydedilmemiş tüm bilgiler kaybolacaktır. Yeni bir sayfa yüklemek istediğinizden emin misiniz?\",\"confirmCancel\":\"Bazı seçenekleri değiştirdiniz. İletişim penceresini kapatmak istediğinizden emin misiniz?\",\"options\":\"Seçenekler\",\"target\":\"Hedef\",\"targetNew\":\"Yeni Pencere (_blank)\",\"targetTop\":\"En Üstteki Pencere (_top)\",\"targetSelf\":\"Aynı Pencere (_self)\",\"targetParent\":\"Üst Pencere (_parent)\",\"langDirLTR\":\"Soldan Sağa (LTR)\",\"langDirRTL\":\"Sağdan Sola (RTL)\",\"styles\":\"Biçem\",\"cssClasses\":\"Biçem Sayfası Sınıfları\",\"width\":\"Genişlik\",\"height\":\"Yükseklik\",\"align\":\"Hizalama\",\"alignLeft\":\"Sol\",\"alignRight\":\"Sağ\",\"alignCenter\":\"Ortala\",\"alignJustify\":\"İki Kenara Yaslanmış\",\"alignTop\":\"Üst\",\"alignMiddle\":\"Orta\",\"alignBottom\":\"Alt\",\"alignNone\":\"Hiçbiri\",\"invalidValue\":\"Geçersiz değer.\",\"invalidHeight\":\"Yükseklik değeri bir sayı olmalıdır.\",\"invalidWidth\":\"Genişlik değeri bir sayı olmalıdır.\",\"invalidCssLength\":\"\\\"%1\\\" alanı için verilen değer, geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt, veya pc) içeren veya içermeyen pozitif bir sayı olmalıdır.\",\"invalidHtmlLength\":\"Belirttiğiniz sayı \\\"%1\\\" alanı için pozitif bir sayı HTML birim değeri olmalıdır (px veya %).\",\"invalidInlineStyle\":\"Satıriçi biçem için verilen değer, \\\"isim : değer\\\" biçiminde birbirinden noktalı virgüllerle ayrılan bir veya daha fazla değişkenler grubundan oluşmalıdır.\",\"cssLengthTooltip\":\"Piksel türünde bir sayı veya geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt veya pc) içeren bir sayı girin.\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, kullanılamaz</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Tüm hakları saklıdır.\",\"dlgTitle\":\"CKEditor Hakkında\",\"help\":\"Yardım için $1 kontrol edin.\",\"moreInfo\":\"Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:\",\"title\":\"CKEditor Hakkında\",\"userGuide\":\"CKEditor Kullanıcı Kılavuzu\"},\"basicstyles\":{\"bold\":\"Kalın\",\"italic\":\"İtalik\",\"strike\":\"Üstü Çizgili\",\"subscript\":\"Alt Simge\",\"superscript\":\"Üst Simge\",\"underline\":\"Altı Çizgili\"},\"blockquote\":{\"toolbar\":\"Blok Oluştur\"},\"clipboard\":{\"copy\":\"Kopyala\",\"copyError\":\"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl/Cmd+C) tuşlarını kullanın.\",\"cut\":\"Kes\",\"cutError\":\"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl/Cmd+X) tuşlarını kullanın.\",\"paste\":\"Yapıştır\",\"pasteArea\":\"Yapıştırma Alanı\",\"pasteMsg\":\"Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl/Cmd+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.\",\"securityMsg\":\"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya erişimine izin vermiyor. Bu pencere içine tekrar yapıştırmalısınız..\",\"title\":\"Yapıştır\"},\"contextmenu\":{\"options\":\"İçerik Menüsü Seçenekleri\"},\"button\":{\"selectedLabel\":\"%1 (Seçilmiş)\"},\"toolbar\":{\"toolbarCollapse\":\"Araç çubuklarını topla\",\"toolbarExpand\":\"Araç çubuklarını aç\",\"toolbarGroups\":{\"document\":\"Belge\",\"clipboard\":\"Pano/Geri al\",\"editing\":\"Düzenleme\",\"forms\":\"Formlar\",\"basicstyles\":\"Temel Stiller\",\"paragraph\":\"Paragraf\",\"links\":\"Bağlantılar\",\"insert\":\"Ekle\",\"styles\":\"Stiller\",\"colors\":\"Renkler\",\"tools\":\"Araçlar\"},\"toolbars\":\"Araç çubukları Editörü\"},\"elementspath\":{\"eleLabel\":\"Elementlerin yolu\",\"eleTitle\":\"%1 elementi\"},\"format\":{\"label\":\"Biçim\",\"panelTitle\":\"Biçim\",\"tag_address\":\"Adres\",\"tag_div\":\"Paragraf (DIV)\",\"tag_h1\":\"Başlık 1\",\"tag_h2\":\"Başlık 2\",\"tag_h3\":\"Başlık 3\",\"tag_h4\":\"Başlık 4\",\"tag_h5\":\"Başlık 5\",\"tag_h6\":\"Başlık 6\",\"tag_p\":\"Normal\",\"tag_pre\":\"Biçimli\"},\"horizontalrule\":{\"toolbar\":\"Yatay Satır Ekle\"},\"image\":{\"alt\":\"Alternatif Yazı\",\"border\":\"Kenar\",\"btnUpload\":\"Sunucuya Yolla\",\"button2Img\":\"Seçili resim butonunu basit resime çevirmek istermisiniz?\",\"hSpace\":\"Yatay Boşluk\",\"img2Button\":\"Seçili olan resimi, resimli butona çevirmek istermisiniz?\",\"infoTab\":\"Resim Bilgisi\",\"linkTab\":\"Köprü\",\"lockRatio\":\"Oranı Kilitle\",\"menu\":\"Resim Özellikleri\",\"resetSize\":\"Boyutu Başa Döndür\",\"title\":\"Resim Özellikleri\",\"titleButton\":\"Resimli Düğme Özellikleri\",\"upload\":\"Karşıya Yükle\",\"urlMissing\":\"Resmin URL kaynağı eksiktir.\",\"vSpace\":\"Dikey Boşluk\",\"validateBorder\":\"Çerçeve tam sayı olmalıdır.\",\"validateHSpace\":\"HSpace tam sayı olmalıdır.\",\"validateVSpace\":\"VSpace tam sayı olmalıdır.\"},\"indent\":{\"indent\":\"Sekme Arttır\",\"outdent\":\"Sekme Azalt\"},\"fakeobjects\":{\"anchor\":\"Bağlantı\",\"flash\":\"Flash Animasyonu\",\"hiddenfield\":\"Gizli Alan\",\"iframe\":\"IFrame\",\"unknown\":\"Bilinmeyen Nesne\"},\"link\":{\"acccessKey\":\"Erişim Tuşu\",\"advanced\":\"Gelişmiş\",\"advisoryContentType\":\"Danışma İçerik Türü\",\"advisoryTitle\":\"Danışma Başlığı\",\"anchor\":{\"toolbar\":\"Bağlantı Ekle/Düzenle\",\"menu\":\"Bağlantı Özellikleri\",\"title\":\"Bağlantı Özellikleri\",\"name\":\"Bağlantı Adı\",\"errorName\":\"Lütfen bağlantı için ad giriniz\",\"remove\":\"Bağlantıyı Kaldır\"},\"anchorId\":\"Eleman Kimlik Numarası ile\",\"anchorName\":\"Bağlantı Adı ile\",\"charset\":\"Bağlı Kaynak Karakter Gurubu\",\"cssClasses\":\"Biçem Sayfası Sınıfları\",\"emailAddress\":\"E-Posta Adresi\",\"emailBody\":\"İleti Gövdesi\",\"emailSubject\":\"İleti Konusu\",\"id\":\"Id\",\"info\":\"Link Bilgisi\",\"langCode\":\"Dil Yönü\",\"langDir\":\"Dil Yönü\",\"langDirLTR\":\"Soldan Sağa (LTR)\",\"langDirRTL\":\"Sağdan Sola (RTL)\",\"menu\":\"Link Düzenle\",\"name\":\"Ad\",\"noAnchors\":\"(Bu belgede hiç çapa yok)\",\"noEmail\":\"Lütfen E-posta adresini yazın\",\"noUrl\":\"Lütfen Link URL'sini yazın\",\"other\":\"<diğer>\",\"popupDependent\":\"Bağımlı (Netscape)\",\"popupFeatures\":\"Yeni Açılan Pencere Özellikleri\",\"popupFullScreen\":\"Tam Ekran (IE)\",\"popupLeft\":\"Sola Göre Konum\",\"popupLocationBar\":\"Yer Çubuğu\",\"popupMenuBar\":\"Menü Çubuğu\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"Kaydırma Çubukları\",\"popupStatusBar\":\"Durum Çubuğu\",\"popupToolbar\":\"Araç Çubuğu\",\"popupTop\":\"Yukarıya Göre Konum\",\"rel\":\"İlişki\",\"selectAnchor\":\"Bağlantı Seç\",\"styles\":\"Biçem\",\"tabIndex\":\"Sekme İndeksi\",\"target\":\"Hedef\",\"targetFrame\":\"<çerçeve>\",\"targetFrameName\":\"Hedef Çerçeve Adı\",\"targetPopup\":\"<yeni açılan pencere>\",\"targetPopupName\":\"Yeni Açılan Pencere Adı\",\"title\":\"Link\",\"toAnchor\":\"Bu sayfada çapa\",\"toEmail\":\"E-Posta\",\"toUrl\":\"URL\",\"toolbar\":\"Link Ekle/Düzenle\",\"type\":\"Link Türü\",\"unlink\":\"Köprü Kaldır\",\"upload\":\"Karşıya Yükle\"},\"list\":{\"bulletedlist\":\"Simgeli Liste\",\"numberedlist\":\"Numaralı Liste\"},\"magicline\":{\"title\":\"Parağrafı buraya ekle\"},\"maximize\":{\"maximize\":\"Büyült\",\"minimize\":\"Küçült\"},\"pastetext\":{\"button\":\"Düz Metin Olarak Yapıştır\",\"title\":\"Düz Metin Olarak Yapıştır\"},\"pastefromword\":{\"confirmCleanup\":\"Yapıştırmaya çalıştığınız metin Word'den kopyalanmıştır. Yapıştırmadan önce silmek istermisiniz?\",\"error\":\"Yapıştırmadaki veri bilgisi hata düzelene kadar silinmeyecektir\",\"title\":\"Word'den Yapıştır\",\"toolbar\":\"Word'den Yapıştır\"},\"removeformat\":{\"toolbar\":\"Biçimi Kaldır\"},\"sourcearea\":{\"toolbar\":\"Kaynak\"},\"specialchar\":{\"options\":\"Özel Karakter Seçenekleri\",\"title\":\"Özel Karakter Seç\",\"toolbar\":\"Özel Karakter Ekle\"},\"scayt\":{\"btn_about\":\"SCAYT'ı hakkında\",\"btn_dictionaries\":\"Sözlükler\",\"btn_disable\":\"SCAYT'ı pasifleştir\",\"btn_enable\":\"SCAYT'ı etkinleştir\",\"btn_langs\":\"Diller\",\"btn_options\":\"Seçenekler\",\"text_title\":\"Girmiş olduğunuz kelime denetimi\"},\"stylescombo\":{\"label\":\"Biçem\",\"panelTitle\":\"Stilleri Düzenliyor\",\"panelTitle1\":\"Blok Stilleri\",\"panelTitle2\":\"Inline Stilleri\",\"panelTitle3\":\"Nesne Stilleri\"},\"table\":{\"border\":\"Kenar Kalınlığı\",\"caption\":\"Başlık\",\"cell\":{\"menu\":\"Hücre\",\"insertBefore\":\"Hücre Ekle - Önce\",\"insertAfter\":\"Hücre Ekle - Sonra\",\"deleteCell\":\"Hücre Sil\",\"merge\":\"Hücreleri Birleştir\",\"mergeRight\":\"Birleştir - Sağdaki İle \",\"mergeDown\":\"Birleştir - Aşağıdaki İle \",\"splitHorizontal\":\"Hücreyi Yatay Böl\",\"splitVertical\":\"Hücreyi Dikey Böl\",\"title\":\"Hücre Özellikleri\",\"cellType\":\"Hücre Tipi\",\"rowSpan\":\"Satırlar Mesafesi (Span)\",\"colSpan\":\"Sütünlar Mesafesi (Span)\",\"wordWrap\":\"Kelime Kaydırma\",\"hAlign\":\"Düşey Hizalama\",\"vAlign\":\"Yataş Hizalama\",\"alignBaseline\":\"Tabana\",\"bgColor\":\"Arkaplan Rengi\",\"borderColor\":\"Çerçeve Rengi\",\"data\":\"Veri\",\"header\":\"Başlık\",\"yes\":\"Evet\",\"no\":\"Hayır\",\"invalidWidth\":\"Hücre genişliği sayı olmalıdır.\",\"invalidHeight\":\"Hücre yüksekliği sayı olmalıdır.\",\"invalidRowSpan\":\"Satırların mesafesi tam sayı olmalıdır.\",\"invalidColSpan\":\"Sütünların mesafesi tam sayı olmalıdır.\",\"chooseColor\":\"Seçiniz\"},\"cellPad\":\"Izgara yazı arası\",\"cellSpace\":\"Izgara kalınlığı\",\"column\":{\"menu\":\"Sütun\",\"insertBefore\":\"Kolon Ekle - Önce\",\"insertAfter\":\"Kolon Ekle - Sonra\",\"deleteColumn\":\"Sütun Sil\"},\"columns\":\"Sütunlar\",\"deleteTable\":\"Tabloyu Sil\",\"headers\":\"Başlıklar\",\"headersBoth\":\"Her İkisi\",\"headersColumn\":\"İlk Sütun\",\"headersNone\":\"Yok\",\"headersRow\":\"İlk Satır\",\"invalidBorder\":\"Çerceve büyüklüklüğü sayı olmalıdır.\",\"invalidCellPadding\":\"Hücre aralığı (padding) sayı olmalıdır.\",\"invalidCellSpacing\":\"Hücre boşluğu (spacing) sayı olmalıdır.\",\"invalidCols\":\"Sütün sayısı 0 sayısından büyük olmalıdır.\",\"invalidHeight\":\"Tablo yüksekliği sayı olmalıdır.\",\"invalidRows\":\"Satır sayısı 0 sayısından büyük olmalıdır.\",\"invalidWidth\":\"Tablo genişliği sayı olmalıdır.\",\"menu\":\"Tablo Özellikleri\",\"row\":{\"menu\":\"Satır\",\"insertBefore\":\"Satır Ekle - Önce\",\"insertAfter\":\"Satır Ekle - Sonra\",\"deleteRow\":\"Satır Sil\"},\"rows\":\"Satırlar\",\"summary\":\"Özet\",\"title\":\"Tablo Özellikleri\",\"toolbar\":\"Tablo\",\"widthPc\":\"yüzde\",\"widthPx\":\"piksel\",\"widthUnit\":\"genişlik birimi\"},\"undo\":{\"redo\":\"Tekrarla\",\"undo\":\"Geri Al\"},\"wsc\":{\"btnIgnore\":\"Yoksay\",\"btnIgnoreAll\":\"Tümünü Yoksay\",\"btnReplace\":\"Değiştir\",\"btnReplaceAll\":\"Tümünü Değiştir\",\"btnUndo\":\"Geri Al\",\"changeTo\":\"Şuna değiştir:\",\"errorLoading\":\"Uygulamada yüklerken hata oluştu: %s.\",\"ieSpellDownload\":\"Yazım denetimi yüklenmemiş. Şimdi yüklemek ister misiniz?\",\"manyChanges\":\"Yazım denetimi tamamlandı: %1 kelime değiştirildi\",\"noChanges\":\"Yazım denetimi tamamlandı: Hiçbir kelime değiştirilmedi\",\"noMispell\":\"Yazım denetimi tamamlandı: Yanlış yazıma rastlanmadı\",\"noSuggestions\":\"- Öneri Yok -\",\"notAvailable\":\"Üzügünüz, bu servis şuanda hizmet dışıdır.\",\"notInDic\":\"Sözlükte Yok\",\"oneChange\":\"Yazım denetimi tamamlandı: Bir kelime değiştirildi\",\"progress\":\"Yazım denetimi işlemde...\",\"title\":\"Yazımı Denetle\",\"toolbar\":\"Yazım Denetimi\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/tt.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['tt']={\"editor\":\"Форматлаулы текст өлкәсе\",\"editorPanel\":\"Rich Text Editor panel\",\"common\":{\"editorHelp\":\"Ярдәм өчен ALT 0 басыгыз\",\"browseServer\":\"Сервер карап чыгу\",\"url\":\"Сылталама\",\"protocol\":\"Протокол\",\"upload\":\"Йөкләү\",\"uploadSubmit\":\"Серверга җибәрү\",\"image\":\"Рәсем\",\"flash\":\"Флеш\",\"form\":\"Форма\",\"checkbox\":\"Чекбокс\",\"radio\":\"Радио төймә\",\"textField\":\"Текст кыры\",\"textarea\":\"Текст мәйданы\",\"hiddenField\":\"Яшерен кыр\",\"button\":\"Төймə\",\"select\":\"Сайлау кыры\",\"imageButton\":\"Рәсемле төймə\",\"notSet\":\"<билгеләнмәгән>\",\"id\":\"Id\",\"name\":\"Исем\",\"langDir\":\"Язылыш юнəлеше\",\"langDirLtr\":\"Сулдан уңга язылыш (LTR)\",\"langDirRtl\":\"Уңнан сулга язылыш (RTL)\",\"langCode\":\"Тел коды\",\"longDescr\":\"Җентекле тасвирламага сылталама\",\"cssClass\":\"Стильләр класслары\",\"advisoryTitle\":\"Киңәш исем\",\"cssStyle\":\"Стиль\",\"ok\":\"Тәмам\",\"cancel\":\"Баш тарту\",\"close\":\"Чыгу\",\"preview\":\"Карап алу\",\"resize\":\"Зурлыкны үзгәртү\",\"generalTab\":\"Төп\",\"advancedTab\":\"Киңәйтелгән көйләүләр\",\"validateNumberFailed\":\"Әлеге кыйммәт сан түгел.\",\"confirmNewPage\":\"Any unsaved changes to this content will be lost. Are you sure you want to load new page?\",\"confirmCancel\":\"You have changed some options. Are you sure you want to close the dialog window?\",\"options\":\"Үзлекләр\",\"target\":\"Максат\",\"targetNew\":\"Яңа тәрәзә (_blank)\",\"targetTop\":\"Өске тәрәзә (_top)\",\"targetSelf\":\"Шул үк тәрәзә (_self)\",\"targetParent\":\"Ана тәрәзә (_parent)\",\"langDirLTR\":\"Сулдан уңга язылыш (LTR)\",\"langDirRTL\":\"Уңнан сулга язылыш (RTL)\",\"styles\":\"Стиль\",\"cssClasses\":\"Стильләр класслары\",\"width\":\"Киңлек\",\"height\":\"Биеклек\",\"align\":\"Тигезләү\",\"alignLeft\":\"Сул якка\",\"alignRight\":\"Уң якка\",\"alignCenter\":\"Үзәккә\",\"alignJustify\":\"Киңлеккә карап тигезләү\",\"alignTop\":\"Өскә\",\"alignMiddle\":\"Уртага\",\"alignBottom\":\"Аска\",\"alignNone\":\"Һичбер\",\"invalidValue\":\"Дөрес булмаган кыйммәт.\",\"invalidHeight\":\"Биеклек сан булырга тиеш.\",\"invalidWidth\":\"Киңлек сан булырга тиеш.\",\"invalidCssLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"invalidHtmlLength\":\"Value specified for the \\\"%1\\\" field must be a positive number with or without a valid HTML measurement unit (px or %).\",\"invalidInlineStyle\":\"Value specified for the inline style must consist of one or more tuples with the format of \\\"name : value\\\", separated by semi-colons.\",\"cssLengthTooltip\":\"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, unavailable</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Бар хокуклар сакланган\",\"dlgTitle\":\"CKEditor турында\",\"help\":\"Ярдәм өчен $1 тикшереп карагыз.\",\"moreInfo\":\"For licensing information please visit our web site:\",\"title\":\"CKEditor турында\",\"userGuide\":\"CKEditor кулланмасы\"},\"basicstyles\":{\"bold\":\"Калын\",\"italic\":\"Курсив\",\"strike\":\"Сызылган\",\"subscript\":\"Аскы индекс\",\"superscript\":\"Өске индекс\",\"underline\":\"Астына сызылган\"},\"blockquote\":{\"toolbar\":\"Өземтә блогы\"},\"clipboard\":{\"copy\":\"Күчермәләү\",\"copyError\":\"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.\",\"cut\":\"Кисеп алу\",\"cutError\":\"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.\",\"paste\":\"Өстәү\",\"pasteArea\":\"Өстәү мәйданы\",\"pasteMsg\":\"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK\",\"securityMsg\":\"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.\",\"title\":\"Өстәү\"},\"contextmenu\":{\"options\":\"Контекст меню үзлекләре\"},\"button\":{\"selectedLabel\":\"%1 (Сайланган)\"},\"toolbar\":{\"toolbarCollapse\":\"Collapse Toolbar\",\"toolbarExpand\":\"Expand Toolbar\",\"toolbarGroups\":{\"document\":\"Документ\",\"clipboard\":\"Алмашу буферы/Кайтару\",\"editing\":\"Төзәтү\",\"forms\":\"Формалар\",\"basicstyles\":\"Төп стильләр\",\"paragraph\":\"Параграф\",\"links\":\"Сылталамалар\",\"insert\":\"Өстәү\",\"styles\":\"Стильләр\",\"colors\":\"Төсләр\",\"tools\":\"Кораллар\"},\"toolbars\":\"Editor toolbars\"},\"elementspath\":{\"eleLabel\":\"Elements path\",\"eleTitle\":\"%1 элемент\"},\"format\":{\"label\":\"Форматлау\",\"panelTitle\":\"Параграф форматлавы\",\"tag_address\":\"Адрес\",\"tag_div\":\"Гади (DIV)\",\"tag_h1\":\"Башлам 1\",\"tag_h2\":\"Башлам 2\",\"tag_h3\":\"Башлам 3\",\"tag_h4\":\"Башлам 4\",\"tag_h5\":\"Башлам 5\",\"tag_h6\":\"Башлам 6\",\"tag_p\":\"Гади\",\"tag_pre\":\"Форматлаулы\"},\"horizontalrule\":{\"toolbar\":\"Ятма сызык өстәү\"},\"image\":{\"alt\":\"Альтернатив текст\",\"border\":\"Чик\",\"btnUpload\":\"Серверга җибәрү\",\"button2Img\":\"Do you want to transform the selected image button on a simple image?\",\"hSpace\":\"Горизонталь ара\",\"img2Button\":\"Do you want to transform the selected image on a image button?\",\"infoTab\":\"Рәсем тасвирламасы\",\"linkTab\":\"Сылталама\",\"lockRatio\":\"Lock Ratio\",\"menu\":\"Рәсем үзлекләре\",\"resetSize\":\"Баштагы зурлык\",\"title\":\"Рәсем үзлекләре\",\"titleButton\":\"Рәсемле төймə үзлекләре\",\"upload\":\"Йөкләү\",\"urlMissing\":\"Image source URL is missing.\",\"vSpace\":\"Вертикаль ара\",\"validateBorder\":\"Чик киңлеге сан булырга тиеш.\",\"validateHSpace\":\"Горизонталь ара бөтен сан булырга тиеш.\",\"validateVSpace\":\"Вертикаль ара бөтен сан булырга тиеш.\"},\"indent\":{\"indent\":\"Отступны арттыру\",\"outdent\":\"Отступны кечерәйтү\"},\"fakeobjects\":{\"anchor\":\"Якорь\",\"flash\":\"Флеш анимациясы\",\"hiddenfield\":\"Яшерен кыр\",\"iframe\":\"IFrame\",\"unknown\":\"Танылмаган объект\"},\"link\":{\"acccessKey\":\"Access Key\",\"advanced\":\"Киңәйтелгән көйләүләр\",\"advisoryContentType\":\"Advisory Content Type\",\"advisoryTitle\":\"Киңәш исем\",\"anchor\":{\"toolbar\":\"Якорь\",\"menu\":\"Якорьне үзгәртү\",\"title\":\"Якорь үзлекләре\",\"name\":\"Якорь исеме\",\"errorName\":\"Якорьнең исемен языгыз\",\"remove\":\"Якорьне бетерү\"},\"anchorId\":\"Элемент идентификаторы буенча\",\"anchorName\":\"Якорь исеме буенча\",\"charset\":\"Linked Resource Charset\",\"cssClasses\":\"Стильләр класслары\",\"emailAddress\":\"Электрон почта адресы\",\"emailBody\":\"Хат эчтәлеге\",\"emailSubject\":\"Хат темасы\",\"id\":\"Идентификатор\",\"info\":\"Сылталама тасвирламасы\",\"langCode\":\"Тел коды\",\"langDir\":\"Язылыш юнəлеше\",\"langDirLTR\":\"Сулдан уңга язылыш (LTR)\",\"langDirRTL\":\"Уңнан сулга язылыш (RTL)\",\"menu\":\"Сылталамаyны үзгәртү\",\"name\":\"Исем\",\"noAnchors\":\"(Әлеге документта якорьләр табылмады)\",\"noEmail\":\"Электрон почта адресын языгыз\",\"noUrl\":\"Сылталаманы языгыз\",\"other\":\"<бүтән>\",\"popupDependent\":\"Бәйле (Netscape)\",\"popupFeatures\":\"Popup Window Features\",\"popupFullScreen\":\"Тулы экран (IE)\",\"popupLeft\":\"Left Position\",\"popupLocationBar\":\"Location Bar\",\"popupMenuBar\":\"Menu Bar\",\"popupResizable\":\"Resizable\",\"popupScrollBars\":\"Scroll Bars\",\"popupStatusBar\":\"Status Bar\",\"popupToolbar\":\"Toolbar\",\"popupTop\":\"Top Position\",\"rel\":\"Бәйләнеш\",\"selectAnchor\":\"Якорьне сайлау\",\"styles\":\"Стиль\",\"tabIndex\":\"Tab Index\",\"target\":\"Максат\",\"targetFrame\":\"<frame>\",\"targetFrameName\":\"Target Frame Name\",\"targetPopup\":\"<popup window>\",\"targetPopupName\":\"Попап тәрәзәсе исеме\",\"title\":\"Сылталама\",\"toAnchor\":\"Якорьне текст белән бәйләү\",\"toEmail\":\"Электрон почта\",\"toUrl\":\"Сылталама\",\"toolbar\":\"Сылталама\",\"type\":\"Сылталама төре\",\"unlink\":\"Сылталаманы бетерү\",\"upload\":\"Йөкләү\"},\"list\":{\"bulletedlist\":\"Маркерлы тезмә өстәү/бетерү\",\"numberedlist\":\" Номерланган тезмә өстәү/бетерү\"},\"magicline\":{\"title\":\"Бирегә параграф өстәү\"},\"maximize\":{\"maximize\":\"Зурайту\",\"minimize\":\"Кечерәйтү\"},\"pastetext\":{\"button\":\"Форматлаусыз текст өстәү\",\"title\":\"Форматлаусыз текст өстәү\"},\"pastefromword\":{\"confirmCleanup\":\"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?\",\"error\":\"It was not possible to clean up the pasted data due to an internal error\",\"title\":\"Word'тан өстәү\",\"toolbar\":\"Word'тан өстәү\"},\"removeformat\":{\"toolbar\":\"Форматлауны бетерү\"},\"sourcearea\":{\"toolbar\":\"Чыганак\"},\"specialchar\":{\"options\":\"Махсус символ үзлекләре\",\"title\":\"Махсус символ сайлау\",\"toolbar\":\"Махсус символ өстәү\"},\"scayt\":{\"btn_about\":\"About SCAYT\",\"btn_dictionaries\":\"Dictionaries\",\"btn_disable\":\"Disable SCAYT\",\"btn_enable\":\"Enable SCAYT\",\"btn_langs\":\"Languages\",\"btn_options\":\"Options\",\"text_title\":\"Spell Check As You Type\"},\"stylescombo\":{\"label\":\"Стильләр\",\"panelTitle\":\"Форматлау стильләре\",\"panelTitle1\":\"Блоклар стильләре\",\"panelTitle2\":\"Эчке стильләр\",\"panelTitle3\":\"Объектлар стильләре\"},\"table\":{\"border\":\"Чик калынлыгы\",\"caption\":\"Исем\",\"cell\":{\"menu\":\"Күзәнәк\",\"insertBefore\":\"Алдына күзәнәк өстәү\",\"insertAfter\":\"Артына күзәнәк өстәү\",\"deleteCell\":\"Күзәнәкләрне бетерү\",\"merge\":\"Күзәнәкләрне берләштерү\",\"mergeRight\":\"Уң яктагы белән берләштерү\",\"mergeDown\":\"Астагы белән берләштерү\",\"splitHorizontal\":\"Күзәнәкне юлларга бүлү\",\"splitVertical\":\"Күзәнәкне баганаларга бүлү\",\"title\":\"Күзәнәк үзлекләре\",\"cellType\":\"Күзәнәк төре\",\"rowSpan\":\"Юлларны берләштерү\",\"colSpan\":\"Баганаларны берләштерү\",\"wordWrap\":\"Текстны күчерү\",\"hAlign\":\"Ятма тигезләү\",\"vAlign\":\"Асма тигезләү\",\"alignBaseline\":\"Таяныч сызыгы\",\"bgColor\":\"Фон төсе\",\"borderColor\":\"Чик төсе\",\"data\":\"Мәгълүмат\",\"header\":\"Башлык\",\"yes\":\"Әйе\",\"no\":\"Юк\",\"invalidWidth\":\"Cell width must be a number.\",\"invalidHeight\":\"Cell height must be a number.\",\"invalidRowSpan\":\"Rows span must be a whole number.\",\"invalidColSpan\":\"Columns span must be a whole number.\",\"chooseColor\":\"Сайлау\"},\"cellPad\":\"Cell padding\",\"cellSpace\":\"Cell spacing\",\"column\":{\"menu\":\"Багана\",\"insertBefore\":\"Сулдан баганалар өстәү\",\"insertAfter\":\"Уңнан баганалар өстәү\",\"deleteColumn\":\"Баганаларны бетерү\"},\"columns\":\"Баганалар\",\"deleteTable\":\"Таблицаны бетерү\",\"headers\":\"Башлыклар\",\"headersBoth\":\"Икесе дә\",\"headersColumn\":\"Беренче багана\",\"headersNone\":\"Һичбер\",\"headersRow\":\"Беренче юл\",\"invalidBorder\":\"Чик киңлеге сан булырга тиеш.\",\"invalidCellPadding\":\"Cell padding must be a positive number.\",\"invalidCellSpacing\":\"Күзәнәкләр аралары уңай сан булырга тиеш.\",\"invalidCols\":\"Number of columns must be a number greater than 0.\",\"invalidHeight\":\"Таблица биеклеге сан булырга тиеш.\",\"invalidRows\":\"Number of rows must be a number greater than 0.\",\"invalidWidth\":\"Таблица киңлеге сан булырга тиеш\",\"menu\":\"Таблица үзлекләре\",\"row\":{\"menu\":\"Юл\",\"insertBefore\":\"Өстән юллар өстәү\",\"insertAfter\":\"Астан юллар өстәү\",\"deleteRow\":\"Юлларны бетерү\"},\"rows\":\"Юллар\",\"summary\":\"Йомгаклау\",\"title\":\"Таблица үзлекләре\",\"toolbar\":\"Таблица\",\"widthPc\":\"процент\",\"widthPx\":\"Нокталар\",\"widthUnit\":\"киңлек берәмлеге\"},\"undo\":{\"redo\":\"Кабатлау\",\"undo\":\"Кайтару\"},\"wsc\":{\"btnIgnore\":\"Ignore\",\"btnIgnoreAll\":\"Ignore All\",\"btnReplace\":\"Replace\",\"btnReplaceAll\":\"Replace All\",\"btnUndo\":\"Undo\",\"changeTo\":\"Change to\",\"errorLoading\":\"Error loading application service host: %s.\",\"ieSpellDownload\":\"Spell checker not installed. Do you want to download it now?\",\"manyChanges\":\"Spell check complete: %1 words changed\",\"noChanges\":\"Spell check complete: No words changed\",\"noMispell\":\"Spell check complete: No misspellings found\",\"noSuggestions\":\"- No suggestions -\",\"notAvailable\":\"Sorry, but service is unavailable now.\",\"notInDic\":\"Not in dictionary\",\"oneChange\":\"Spell check complete: One word changed\",\"progress\":\"Spell check in progress...\",\"title\":\"Spell Checker\",\"toolbar\":\"Check Spelling\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/ug.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['ug']={\"editor\":\"تەھرىرلىگۈچ\",\"editorPanel\":\"مول تېكست تەھرىرلىگۈچ تاختىسى\",\"common\":{\"editorHelp\":\"ALT+0 نى بېسىپ ياردەمنى كۆرۈڭ\",\"browseServer\":\"كۆرسىتىش مۇلازىمېتىر\",\"url\":\"ئەسلى ھۆججەت\",\"protocol\":\"كېلىشىم\",\"upload\":\"يۈكلە\",\"uploadSubmit\":\"مۇلازىمېتىرغا يۈكلە\",\"image\":\"سۈرەت\",\"flash\":\"Flash\",\"form\":\"جەدۋەل\",\"checkbox\":\"كۆپ تاللاش رامكىسى\",\"radio\":\"يەككە تاللاش توپچىسى\",\"textField\":\"يەككە قۇر تېكىست\",\"textarea\":\"كۆپ قۇر تېكىست\",\"hiddenField\":\"يوشۇرۇن دائىرە\",\"button\":\"توپچا\",\"select\":\"تىزىم/تىزىملىك\",\"imageButton\":\"سۈرەت دائىرە\",\"notSet\":\"‹تەڭشەلمىگەن›\",\"id\":\"ID\",\"name\":\"ئات\",\"langDir\":\"تىل يۆنىلىشى\",\"langDirLtr\":\"سولدىن ئوڭغا (LTR)\",\"langDirRtl\":\"ئوڭدىن سولغا (RTL)\",\"langCode\":\"تىل كودى\",\"longDescr\":\"تەپسىلىي چۈشەندۈرۈش ئادرېسى\",\"cssClass\":\"ئۇسلۇب خىلىنىڭ ئاتى\",\"advisoryTitle\":\"ماۋزۇ\",\"cssStyle\":\"قۇر ئىچىدىكى ئۇسلۇبى\",\"ok\":\"جەزملە\",\"cancel\":\"ۋاز كەچ\",\"close\":\"تاقا\",\"preview\":\"ئالدىن كۆزەت\",\"resize\":\"چوڭلۇقىنى ئۆزگەرت\",\"generalTab\":\"ئادەتتىكى\",\"advancedTab\":\"ئالىي\",\"validateNumberFailed\":\"سان پىچىمىدا كىرگۈزۈش زۆرۈر\",\"confirmNewPage\":\"نۆۋەتتىكى پۈتۈك مەزمۇنى ساقلانمىدى، يېڭى پۈتۈك قۇرامسىز؟\",\"confirmCancel\":\"قىسمەن ئۆزگەرتىش ساقلانمىدى، بۇ سۆزلەشكۈنى تاقامسىز؟\",\"options\":\"تاللانما\",\"target\":\"نىشان كۆزنەك\",\"targetNew\":\"يېڭى كۆزنەك (_blank)\",\"targetTop\":\"پۈتۈن بەت (_top)\",\"targetSelf\":\"مەزكۇر كۆزنەك (_self)\",\"targetParent\":\"ئاتا كۆزنەك (_parent)\",\"langDirLTR\":\"سولدىن ئوڭغا (LTR)\",\"langDirRTL\":\"ئوڭدىن سولغا (RTL)\",\"styles\":\"ئۇسلۇبلار\",\"cssClasses\":\"ئۇسلۇب خىللىرى\",\"width\":\"كەڭلىك\",\"height\":\"ئېگىزلىك\",\"align\":\"توغرىلىنىشى\",\"alignLeft\":\"سول\",\"alignRight\":\"ئوڭ\",\"alignCenter\":\"ئوتتۇرا\",\"alignJustify\":\"ئىككى تەرەپتىن توغرىلا\",\"alignTop\":\"ئۈستى\",\"alignMiddle\":\"ئوتتۇرا\",\"alignBottom\":\"ئاستى\",\"alignNone\":\"يوق\",\"invalidValue\":\"ئىناۋەتسىز قىممەت.\",\"invalidHeight\":\"ئېگىزلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر\",\"invalidWidth\":\"كەڭلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر\",\"invalidCssLength\":\"بۇ سۆز بۆلىكى چوقۇم مۇۋاپىق بولغان CSS ئۇزۇنلۇق قىممىتى بولۇشى زۆرۈر، بىرلىكى (px, %, in, cm, mm, em, ex, pt ياكى pc)\",\"invalidHtmlLength\":\"بۇ سۆز بۆلىكى چوقۇم بىرىكمە HTML ئۇزۇنلۇق قىممىتى بولۇشى كېرەك. ئۆز ئىچىگە ئالىدىغان بىرلىك (px ياكى %)\",\"invalidInlineStyle\":\"ئىچكى باغلانما ئۇسلۇبى چوقۇم چېكىتلىك پەش بىلەن ئايرىلغان بىر ياكى كۆپ «خاسلىق ئاتى:خاسلىق قىممىتى» پىچىمىدا بولۇشى لازىم\",\"cssLengthTooltip\":\"بۇ سۆز بۆلىكى بىرىكمە CSS ئۇزۇنلۇق قىممىتى بولۇشى كېرەك. ئۆز ئىچىگە ئالىدىغان بىرلىك (px, %, in, cm, mm, em, ex, pt ياكى pc)\",\"unavailable\":\"%1<span class=\\\\\\\\\\\"cke_accessibility\\\\\\\\\\\">، ئىشلەتكىلى بولمايدۇ</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. نەشر ھوقۇقىغا ئىگە\",\"dlgTitle\":\"CKEditor ھەققىدە\",\"help\":\"$1 نى زىيارەت قىلىپ ياردەمگە ئېرىشىڭ\",\"moreInfo\":\"تور تۇرايىمىزنى زىيارەت قىلىپ كېلىشىمگە ئائىت تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىڭ\",\"title\":\"CKEditor ھەققىدە\",\"userGuide\":\"CKEditor ئىشلەتكۈچى قوللانمىسى\"},\"basicstyles\":{\"bold\":\"توم\",\"italic\":\"يانتۇ\",\"strike\":\"ئۆچۈرۈش سىزىقى\",\"subscript\":\"تۆۋەن ئىندېكس\",\"superscript\":\"يۇقىرى ئىندېكس\",\"underline\":\"ئاستى سىزىق\"},\"blockquote\":{\"toolbar\":\"بۆلەك نەقىل\"},\"clipboard\":{\"copy\":\"كۆچۈر\",\"copyError\":\"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كۆچۈر مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+C) ئارقىلىق تاماملاڭ\",\"cut\":\"كەس\",\"cutError\":\"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كەس مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+X) ئارقىلىق تاماملاڭ\",\"paste\":\"چاپلا\",\"pasteArea\":\"چاپلاش دائىرىسى\",\"pasteMsg\":\"ھەرپتاختا تېز كۇنۇپكا (<STRONG>Ctrl/Cmd+V</STRONG>) نى ئىشلىتىپ مەزمۇننى تۆۋەندىكى رامكىغا كۆچۈرۈڭ، ئاندىن <STRONG>جەزملە</STRONG>نى بېسىڭ\",\"securityMsg\":\"توركۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى سەۋەبىدىن بۇ تەھرىرلىگۈچ چاپلاش تاختىسىدىكى مەزمۇننى بىۋاستە زىيارەت قىلالمايدۇ، بۇ كۆزنەكتە قايتا بىر قېتىم چاپلىشىڭىز كېرەك.\",\"title\":\"چاپلا\"},\"contextmenu\":{\"options\":\"قىسقا يول تىزىملىك تاللانمىسى\"},\"button\":{\"selectedLabel\":\"%1 (تاللاندى)\"},\"toolbar\":{\"toolbarCollapse\":\"قورال بالداقنى قاتلا\",\"toolbarExpand\":\"قورال بالداقنى ياي\",\"toolbarGroups\":{\"document\":\"پۈتۈك\",\"clipboard\":\"چاپلاش تاختىسى/يېنىۋال\",\"editing\":\"تەھرىر\",\"forms\":\"جەدۋەل\",\"basicstyles\":\"ئاساسىي ئۇسلۇب\",\"paragraph\":\"ئابزاس\",\"links\":\"ئۇلانما\",\"insert\":\"قىستۇر\",\"styles\":\"ئۇسلۇب\",\"colors\":\"رەڭ\",\"tools\":\"قورال\"},\"toolbars\":\"قورال بالداق\"},\"elementspath\":{\"eleLabel\":\"ئېلېمېنت يولى\",\"eleTitle\":\"%1 ئېلېمېنت\"},\"format\":{\"label\":\"پىچىم\",\"panelTitle\":\"پىچىم\",\"tag_address\":\"ئادرېس\",\"tag_div\":\"ئابزاس (DIV)\",\"tag_h1\":\"ماۋزۇ 1\",\"tag_h2\":\"ماۋزۇ 2\",\"tag_h3\":\"ماۋزۇ 3\",\"tag_h4\":\"ماۋزۇ 4\",\"tag_h5\":\"ماۋزۇ 5\",\"tag_h6\":\"ماۋزۇ 6\",\"tag_p\":\"ئادەتتىكى\",\"tag_pre\":\"تىزىلغان پىچىم\"},\"horizontalrule\":{\"toolbar\":\"توغرا سىزىق قىستۇر\"},\"image\":{\"alt\":\"تېكىست ئالماشتۇر\",\"border\":\"گىرۋەك چوڭلۇقى\",\"btnUpload\":\"مۇلازىمېتىرغا يۈكلە\",\"button2Img\":\"نۆۋەتتىكى توپچىنى سۈرەتكە ئۆزگەرتەمسىز؟\",\"hSpace\":\"توغرىسىغا ئارىلىقى\",\"img2Button\":\"نۆۋەتتىكى سۈرەتنى توپچىغا ئۆزگەرتەمسىز؟\",\"infoTab\":\"سۈرەت\",\"linkTab\":\"ئۇلانما\",\"lockRatio\":\"نىسبەتنى قۇلۇپلا\",\"menu\":\"سۈرەت خاسلىقى\",\"resetSize\":\"ئەسلى چوڭلۇق\",\"title\":\"سۈرەت خاسلىقى\",\"titleButton\":\"سۈرەت دائىرە خاسلىقى\",\"upload\":\"يۈكلە\",\"urlMissing\":\"سۈرەتنىڭ ئەسلى ھۆججەت ئادرېسى كەم\",\"vSpace\":\"بويىغا ئارىلىقى\",\"validateBorder\":\"گىرۋەك چوڭلۇقى چوقۇم سان بولىدۇ\",\"validateHSpace\":\"توغرىسىغا ئارىلىق چوقۇم پۈتۈن سان بولىدۇ\",\"validateVSpace\":\"بويىغا ئارىلىق چوقۇم پۈتۈن سان بولىدۇ\"},\"indent\":{\"indent\":\"تارايت\",\"outdent\":\"كەڭەيت\"},\"fakeobjects\":{\"anchor\":\"لەڭگەرلىك نۇقتا\",\"flash\":\"Flash جانلاندۇرۇم\",\"hiddenfield\":\"يوشۇرۇن دائىرە\",\"iframe\":\"IFrame\",\"unknown\":\"يوچۇن نەڭ\"},\"link\":{\"acccessKey\":\"زىيارەت كۇنۇپكا\",\"advanced\":\"ئالىي\",\"advisoryContentType\":\"مەزمۇن تىپى\",\"advisoryTitle\":\"ماۋزۇ\",\"anchor\":{\"toolbar\":\"لەڭگەرلىك نۇقتا ئۇلانمىسى قىستۇر/تەھرىرلە\",\"menu\":\"لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى\",\"title\":\"لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى\",\"name\":\"لەڭگەرلىك نۇقتا ئاتى\",\"errorName\":\"لەڭگەرلىك نۇقتا ئاتىنى كىرگۈزۈڭ\",\"remove\":\"لەڭگەرلىك نۇقتا ئۆچۈر\"},\"anchorId\":\"لەڭگەرلىك نۇقتا ID سى بويىچە\",\"anchorName\":\"لەڭگەرلىك نۇقتا ئاتى بويىچە\",\"charset\":\"ھەرپ كودلىنىشى\",\"cssClasses\":\"ئۇسلۇب خىلى ئاتى\",\"emailAddress\":\"ئادرېس\",\"emailBody\":\"مەزمۇن\",\"emailSubject\":\"ماۋزۇ\",\"id\":\"ID\",\"info\":\"ئۇلانما ئۇچۇرى\",\"langCode\":\"تىل كودى\",\"langDir\":\"تىل يۆنىلىشى\",\"langDirLTR\":\"سولدىن ئوڭغا (LTR)\",\"langDirRTL\":\"ئوڭدىن سولغا (RTL)\",\"menu\":\"ئۇلانما تەھرىر\",\"name\":\"ئات\",\"noAnchors\":\"(بۇ پۈتۈكتە ئىشلەتكىلى بولىدىغان لەڭگەرلىك نۇقتا يوق)\",\"noEmail\":\"ئېلخەت ئادرېسىنى كىرگۈزۈڭ\",\"noUrl\":\"ئۇلانما ئادرېسىنى كىرگۈزۈڭ\",\"other\":\"‹باشقا›\",\"popupDependent\":\"تەۋە (NS)\",\"popupFeatures\":\"قاڭقىش كۆزنەك خاسلىقى\",\"popupFullScreen\":\"پۈتۈن ئېكران (IE)\",\"popupLeft\":\"سول\",\"popupLocationBar\":\"ئادرېس بالداق\",\"popupMenuBar\":\"تىزىملىك بالداق\",\"popupResizable\":\"چوڭلۇقى ئۆزگەرتىشچان\",\"popupScrollBars\":\"دومىلىما سۈرگۈچ\",\"popupStatusBar\":\"ھالەت بالداق\",\"popupToolbar\":\"قورال بالداق\",\"popupTop\":\"ئوڭ\",\"rel\":\"باغلىنىش\",\"selectAnchor\":\"بىر لەڭگەرلىك نۇقتا تاللاڭ\",\"styles\":\"قۇر ئىچىدىكى ئۇسلۇبى\",\"tabIndex\":\"Tab تەرتىپى\",\"target\":\"نىشان\",\"targetFrame\":\"‹كاندۇك›\",\"targetFrameName\":\"نىشان كاندۇك ئاتى\",\"targetPopup\":\"‹قاڭقىش كۆزنەك›\",\"targetPopupName\":\"قاڭقىش كۆزنەك ئاتى\",\"title\":\"ئۇلانما\",\"toAnchor\":\"بەت ئىچىدىكى لەڭگەرلىك نۇقتا ئۇلانمىسى\",\"toEmail\":\"ئېلخەت\",\"toUrl\":\"ئادرېس\",\"toolbar\":\"ئۇلانما قىستۇر/تەھرىرلە\",\"type\":\"ئۇلانما تىپى\",\"unlink\":\"ئۇلانما بىكار قىل\",\"upload\":\"يۈكلە\"},\"list\":{\"bulletedlist\":\"تۈر بەلگە تىزىمى\",\"numberedlist\":\"تەرتىپ نومۇر تىزىمى\"},\"magicline\":{\"title\":\"بۇ جايغا ئابزاس قىستۇر\"},\"maximize\":{\"maximize\":\"چوڭايت\",\"minimize\":\"كىچىكلەت\"},\"pastetext\":{\"button\":\"پىچىمى يوق تېكىست سۈپىتىدە چاپلا\",\"title\":\"پىچىمى يوق تېكىست سۈپىتىدە چاپلا\"},\"pastefromword\":{\"confirmCleanup\":\"سىز چاپلىماقچى بولغان مەزمۇن MS Word تىن كەلگەندەك قىلىدۇ، MS Word پىچىمىنى تازىلىۋەتكەندىن كېيىن ئاندىن چاپلامدۇ؟\",\"error\":\"ئىچكى خاتالىق سەۋەبىدىن چاپلايدىغان سانلىق مەلۇماتنى تازىلىيالمايدۇ\",\"title\":\"MS Word تىن چاپلا\",\"toolbar\":\"MS Word تىن چاپلا\"},\"removeformat\":{\"toolbar\":\"پىچىمنى چىقىرىۋەت\"},\"sourcearea\":{\"toolbar\":\"مەنبە\"},\"specialchar\":{\"options\":\"ئالاھىدە ھەرپ تاللانمىسى\",\"title\":\"ئالاھىدە ھەرپ تاللاڭ\",\"toolbar\":\"ئالاھىدە ھەرپ قىستۇر\"},\"scayt\":{\"btn_about\":\"شۇئان ئىملا تەكشۈرۈش ھەققىدە\",\"btn_dictionaries\":\"لۇغەت\",\"btn_disable\":\"شۇئان ئىملا تەكشۈرۈشنى چەكلە\",\"btn_enable\":\"شۇئان ئىملا تەكشۈرۈشنى قوزغات\",\"btn_langs\":\"تىل\",\"btn_options\":\"تاللانما\",\"text_title\":\"شۇئان ئىملا تەكشۈر\"},\"stylescombo\":{\"label\":\"ئۇسلۇب\",\"panelTitle\":\"ئۇسلۇب\",\"panelTitle1\":\"بۆلەك دەرىجىسىدىكى ئېلېمېنت ئۇسلۇبى\",\"panelTitle2\":\"ئىچكى باغلانما ئېلېمېنت ئۇسلۇبى\",\"panelTitle3\":\"نەڭ (Object) ئېلېمېنت ئۇسلۇبى\"},\"table\":{\"border\":\"گىرۋەك\",\"caption\":\"ماۋزۇ\",\"cell\":{\"menu\":\"كاتەكچە\",\"insertBefore\":\"سولغا كاتەكچە قىستۇر\",\"insertAfter\":\"ئوڭغا كاتەكچە قىستۇر\",\"deleteCell\":\"كەتەكچە ئۆچۈر\",\"merge\":\"كاتەكچە بىرلەشتۈر\",\"mergeRight\":\"كاتەكچىنى ئوڭغا بىرلەشتۈر\",\"mergeDown\":\"كاتەكچىنى ئاستىغا بىرلەشتۈر\",\"splitHorizontal\":\"كاتەكچىنى توغرىسىغا بىرلەشتۈر\",\"splitVertical\":\"كاتەكچىنى بويىغا بىرلەشتۈر\",\"title\":\"كاتەكچە خاسلىقى\",\"cellType\":\"كاتەكچە تىپى\",\"rowSpan\":\"بويىغا چات ئارىسى قۇر سانى\",\"colSpan\":\"توغرىسىغا چات ئارىسى ئىستون سانى\",\"wordWrap\":\"ئۆزلۈكىدىن قۇر قاتلا\",\"hAlign\":\"توغرىسىغا توغرىلا\",\"vAlign\":\"بويىغا توغرىلا\",\"alignBaseline\":\"ئاساسىي سىزىق\",\"bgColor\":\"تەگلىك رەڭگى\",\"borderColor\":\"گىرۋەك رەڭگى\",\"data\":\"سانلىق مەلۇمات\",\"header\":\"جەدۋەل باشى\",\"yes\":\"ھەئە\",\"no\":\"ياق\",\"invalidWidth\":\"كاتەكچە كەڭلىكى چوقۇم سان بولىدۇ\",\"invalidHeight\":\"كاتەكچە ئېگىزلىكى چوقۇم سان بولىدۇ\",\"invalidRowSpan\":\"قۇر چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ \",\"invalidColSpan\":\"ئىستون چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ\",\"chooseColor\":\"تاللاڭ\"},\"cellPad\":\"يان ئارىلىق\",\"cellSpace\":\"ئارىلىق\",\"column\":{\"menu\":\"ئىستون\",\"insertBefore\":\"سولغا ئىستون قىستۇر\",\"insertAfter\":\"ئوڭغا ئىستون قىستۇر\",\"deleteColumn\":\"ئىستون ئۆچۈر\"},\"columns\":\"ئىستون سانى\",\"deleteTable\":\"جەدۋەل ئۆچۈر\",\"headers\":\"ماۋزۇ كاتەكچە\",\"headersBoth\":\"بىرىنچى ئىستون ۋە بىرىنچى قۇر\",\"headersColumn\":\"بىرىنچى ئىستون\",\"headersNone\":\"يوق\",\"headersRow\":\"بىرىنچى قۇر\",\"invalidBorder\":\"گىرۋەك توملۇقى چوقۇم سان بولىدۇ\",\"invalidCellPadding\":\"كاتەكچىگە چوقۇم سان تولدۇرۇلىدۇ\",\"invalidCellSpacing\":\"كاتەكچە ئارىلىقى چوقۇم سان بولىدۇ\",\"invalidCols\":\"بەلگىلەنگەن قۇر سانى چوقۇم نۆلدىن چوڭ بولىدۇ\",\"invalidHeight\":\"جەدۋەل ئېگىزلىكى چوقۇم سان بولىدۇ\",\"invalidRows\":\"بەلگىلەنگەن ئىستون سانى چوقۇم نۆلدىن چوڭ بولىدۇ\",\"invalidWidth\":\"جەدۋەل كەڭلىكى چوقۇم سان بولىدۇ\",\"menu\":\"جەدۋەل خاسلىقى\",\"row\":{\"menu\":\"قۇر\",\"insertBefore\":\"ئۈستىگە قۇر قىستۇر\",\"insertAfter\":\"ئاستىغا قۇر قىستۇر\",\"deleteRow\":\"قۇر ئۆچۈر\"},\"rows\":\"قۇر سانى\",\"summary\":\"ئۈزۈندە\",\"title\":\"جەدۋەل خاسلىقى\",\"toolbar\":\"جەدۋەل\",\"widthPc\":\"پىرسەنت\",\"widthPx\":\"پىكسېل\",\"widthUnit\":\"كەڭلىك بىرلىكى\"},\"undo\":{\"redo\":\"قايتىلا \",\"undo\":\"يېنىۋال\"},\"wsc\":{\"btnIgnore\":\"پەرۋا قىلما\",\"btnIgnoreAll\":\"ھەممىگە پەرۋا قىلما\",\"btnReplace\":\"ئالماشتۇر\",\"btnReplaceAll\":\"ھەممىنى ئالماشتۇر\",\"btnUndo\":\"يېنىۋال\",\"changeTo\":\"ئۆزگەرت\",\"errorLoading\":\"لازىملىق مۇلازىمېتىرنى يۈكلىگەندە خاتالىق كۆرۈلدى: %s.\",\"ieSpellDownload\":\"ئىملا تەكشۈرۈش قىستۇرمىسى تېخى ئورنىتىلمىغان، ھازىرلا چۈشۈرەمسىز؟\",\"manyChanges\":\"ئىملا تەكشۈرۈش تامام: %1  سۆزنى ئۆزگەرتتى\",\"noChanges\":\"ئىملا تەكشۈرۈش تامام: ھېچقانداق سۆزنى ئۆزگەرتمىدى\",\"noMispell\":\"ئىملا تەكشۈرۈش تامام: ئىملا خاتالىقى بايقالمىدى\",\"noSuggestions\":\"-تەكلىپ يوق-\",\"notAvailable\":\"كەچۈرۈڭ، مۇلازىمېتىرنى ۋاقتىنچە ئىشلەتكىلى بولمايدۇ\",\"notInDic\":\"لۇغەتتە يوق\",\"oneChange\":\"ئىملا تەكشۈرۈش تامام: بىر سۆزنى ئۆزگەرتتى\",\"progress\":\"ئىملا تەكشۈرۈۋاتىدۇ…\",\"title\":\"ئىملا تەكشۈر\",\"toolbar\":\"ئىملا تەكشۈر\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/uk.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['uk']={\"editor\":\"Текстовий редактор\",\"editorPanel\":\"Панель текстового редактора\",\"common\":{\"editorHelp\":\"натисніть ALT 0 для довідки\",\"browseServer\":\"Огляд Сервера\",\"url\":\"URL\",\"protocol\":\"Протокол\",\"upload\":\"Надіслати\",\"uploadSubmit\":\"Надіслати на сервер\",\"image\":\"Зображення\",\"flash\":\"Flash\",\"form\":\"Форма\",\"checkbox\":\"Галочка\",\"radio\":\"Кнопка вибору\",\"textField\":\"Текстове поле\",\"textarea\":\"Текстова область\",\"hiddenField\":\"Приховане поле\",\"button\":\"Кнопка\",\"select\":\"Список\",\"imageButton\":\"Кнопка із зображенням\",\"notSet\":\"<не визначено>\",\"id\":\"Ідентифікатор\",\"name\":\"Ім'я\",\"langDir\":\"Напрямок мови\",\"langDirLtr\":\"Зліва направо (LTR)\",\"langDirRtl\":\"Справа наліво (RTL)\",\"langCode\":\"Код мови\",\"longDescr\":\"Довгий опис URL\",\"cssClass\":\"Клас CSS\",\"advisoryTitle\":\"Заголовок\",\"cssStyle\":\"Стиль CSS\",\"ok\":\"ОК\",\"cancel\":\"Скасувати\",\"close\":\"Закрити\",\"preview\":\"Попередній перегляд\",\"resize\":\"Потягніть для зміни розмірів\",\"generalTab\":\"Основне\",\"advancedTab\":\"Додаткове\",\"validateNumberFailed\":\"Значення не є цілим числом.\",\"confirmNewPage\":\"Всі незбережені зміни будуть втрачені. Ви впевнені, що хочете завантажити нову сторінку?\",\"confirmCancel\":\"Деякі опції змінено. Закрити вікно без збереження змін?\",\"options\":\"Опції\",\"target\":\"Ціль\",\"targetNew\":\"Нове вікно (_blank)\",\"targetTop\":\"Поточне вікно (_top)\",\"targetSelf\":\"Поточний фрейм/вікно (_self)\",\"targetParent\":\"Батьківський фрейм/вікно (_parent)\",\"langDirLTR\":\"Зліва направо (LTR)\",\"langDirRTL\":\"Справа наліво (RTL)\",\"styles\":\"Стиль CSS\",\"cssClasses\":\"Клас CSS\",\"width\":\"Ширина\",\"height\":\"Висота\",\"align\":\"Вирівнювання\",\"alignLeft\":\"По лівому краю\",\"alignRight\":\"По правому краю\",\"alignCenter\":\"По центру\",\"alignJustify\":\"По ширині\",\"alignTop\":\"По верхньому краю\",\"alignMiddle\":\"По середині\",\"alignBottom\":\"По нижньому краю\",\"alignNone\":\"Нема\",\"invalidValue\":\"Невірне значення.\",\"invalidHeight\":\"Висота повинна бути цілим числом.\",\"invalidWidth\":\"Ширина повинна бути цілим числом.\",\"invalidCssLength\":\"Значення, вказане для \\\"%1\\\" в полі повинно бути позитивним числом або без дійсного виміру CSS блоку (px, %, in, cm, mm, em, ex, pt або pc).\",\"invalidHtmlLength\":\"Значення, вказане для \\\"%1\\\" в полі повинно бути позитивним числом або без дійсного виміру HTML блоку (px або %).\",\"invalidInlineStyle\":\"Значення, вказане для вбудованого стилю повинне складатися з одного чи кількох кортежів у форматі \\\"ім'я : значення\\\", розділених крапкою з комою.\",\"cssLengthTooltip\":\"Введіть номер значення в пікселях або число з дійсною одиниці CSS (px, %, in, cm, mm, em, ex, pt або pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, не доступне</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. Всі права застережено.\",\"dlgTitle\":\"Про CKEditor\",\"help\":\"Перевірте $1 для допомоги.\",\"moreInfo\":\"Щодо інформації з ліцензування завітайте на наш сайт:\",\"title\":\"Про CKEditor\",\"userGuide\":\"Інструкція Користувача для CKEditor\"},\"basicstyles\":{\"bold\":\"Жирний\",\"italic\":\"Курсив\",\"strike\":\"Закреслений\",\"subscript\":\"Нижній індекс\",\"superscript\":\"Верхній індекс\",\"underline\":\"Підкреслений\"},\"blockquote\":{\"toolbar\":\"Цитата\"},\"clipboard\":{\"copy\":\"Копіювати\",\"copyError\":\"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+C).\",\"cut\":\"Вирізати\",\"cutError\":\"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+X)\",\"paste\":\"Вставити\",\"pasteArea\":\"Область вставки\",\"pasteMsg\":\"Будь ласка, вставте інформацію з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl/Cmd+V</STRONG>), та натисніть <STRONG>OK</STRONG>.\",\"securityMsg\":\"Редактор не може отримати прямий доступ до буферу обміну у зв'язку з налаштуваннями Вашого браузера. Вам потрібно вставити інформацію в це вікно.\",\"title\":\"Вставити\"},\"contextmenu\":{\"options\":\"Опції контекстного меню\"},\"button\":{\"selectedLabel\":\"%1 (Вибрано)\"},\"toolbar\":{\"toolbarCollapse\":\"Згорнути панель інструментів\",\"toolbarExpand\":\"Розгорнути панель інструментів\",\"toolbarGroups\":{\"document\":\"Документ\",\"clipboard\":\"Буфер обміну / Скасувати\",\"editing\":\"Редагування\",\"forms\":\"Форми\",\"basicstyles\":\"Основний Стиль\",\"paragraph\":\"Параграф\",\"links\":\"Посилання\",\"insert\":\"Вставити\",\"styles\":\"Стилі\",\"colors\":\"Кольори\",\"tools\":\"Інструменти\"},\"toolbars\":\"Панель інструментів редактора\"},\"elementspath\":{\"eleLabel\":\"Шлях\",\"eleTitle\":\"%1 елемент\"},\"format\":{\"label\":\"Форматування\",\"panelTitle\":\"Форматування параграфа\",\"tag_address\":\"Адреса\",\"tag_div\":\"Нормальний (div)\",\"tag_h1\":\"Заголовок 1\",\"tag_h2\":\"Заголовок 2\",\"tag_h3\":\"Заголовок 3\",\"tag_h4\":\"Заголовок 4\",\"tag_h5\":\"Заголовок 5\",\"tag_h6\":\"Заголовок 6\",\"tag_p\":\"Нормальний\",\"tag_pre\":\"Форматований\"},\"horizontalrule\":{\"toolbar\":\"Горизонтальна лінія\"},\"image\":{\"alt\":\"Альтернативний текст\",\"border\":\"Рамка\",\"btnUpload\":\"Надіслати на сервер\",\"button2Img\":\"Бажаєте перетворити обрану кнопку-зображення на просте зображення?\",\"hSpace\":\"Гориз. відступ\",\"img2Button\":\"Бажаєте перетворити обране зображення на кнопку-зображення?\",\"infoTab\":\"Інформація про зображення\",\"linkTab\":\"Посилання\",\"lockRatio\":\"Зберегти пропорції\",\"menu\":\"Властивості зображення\",\"resetSize\":\"Очистити поля розмірів\",\"title\":\"Властивості зображення\",\"titleButton\":\"Властивості кнопки із зображенням\",\"upload\":\"Надіслати\",\"urlMissing\":\"Вкажіть URL зображення.\",\"vSpace\":\"Верт. відступ\",\"validateBorder\":\"Ширина рамки повинна бути цілим числом.\",\"validateHSpace\":\"Гориз. відступ повинен бути цілим числом.\",\"validateVSpace\":\"Верт. відступ повинен бути цілим числом.\"},\"indent\":{\"indent\":\"Збільшити відступ\",\"outdent\":\"Зменшити відступ\"},\"fakeobjects\":{\"anchor\":\"Якір\",\"flash\":\"Flash-анімація\",\"hiddenfield\":\"Приховані Поля\",\"iframe\":\"IFrame\",\"unknown\":\"Невідомий об'єкт\"},\"link\":{\"acccessKey\":\"Гаряча клавіша\",\"advanced\":\"Додаткове\",\"advisoryContentType\":\"Тип вмісту\",\"advisoryTitle\":\"Заголовок\",\"anchor\":{\"toolbar\":\"Вставити/Редагувати якір\",\"menu\":\"Властивості якоря\",\"title\":\"Властивості якоря\",\"name\":\"Ім'я якоря\",\"errorName\":\"Будь ласка, вкажіть ім'я якоря\",\"remove\":\"Прибрати якір\"},\"anchorId\":\"За ідентифікатором елементу\",\"anchorName\":\"За ім'ям елементу\",\"charset\":\"Кодування\",\"cssClasses\":\"Клас CSS\",\"emailAddress\":\"Адреса ел. пошти\",\"emailBody\":\"Тіло повідомлення\",\"emailSubject\":\"Тема листа\",\"id\":\"Ідентифікатор\",\"info\":\"Інформація посилання\",\"langCode\":\"Код мови\",\"langDir\":\"Напрямок мови\",\"langDirLTR\":\"Зліва направо (LTR)\",\"langDirRTL\":\"Справа наліво (RTL)\",\"menu\":\"Вставити посилання\",\"name\":\"Ім'я\",\"noAnchors\":\"(В цьому документі немає якорів)\",\"noEmail\":\"Будь ласка, вкажіть адрес ел. пошти\",\"noUrl\":\"Будь ласка, вкажіть URL посилання\",\"other\":\"<інший>\",\"popupDependent\":\"Залежний (Netscape)\",\"popupFeatures\":\"Властивості випливаючого вікна\",\"popupFullScreen\":\"Повний екран (IE)\",\"popupLeft\":\"Позиція зліва\",\"popupLocationBar\":\"Панель локації\",\"popupMenuBar\":\"Панель меню\",\"popupResizable\":\"Масштабоване\",\"popupScrollBars\":\"Стрічки прокрутки\",\"popupStatusBar\":\"Рядок статусу\",\"popupToolbar\":\"Панель інструментів\",\"popupTop\":\"Позиція зверху\",\"rel\":\"Зв'язок\",\"selectAnchor\":\"Оберіть якір\",\"styles\":\"Стиль CSS\",\"tabIndex\":\"Послідовність переходу\",\"target\":\"Ціль\",\"targetFrame\":\"<фрейм>\",\"targetFrameName\":\"Ім'я цільового фрейму\",\"targetPopup\":\"<випливаюче вікно>\",\"targetPopupName\":\"Ім'я випливаючого вікна\",\"title\":\"Посилання\",\"toAnchor\":\"Якір на цю сторінку\",\"toEmail\":\"Ел. пошта\",\"toUrl\":\"URL\",\"toolbar\":\"Вставити/Редагувати посилання\",\"type\":\"Тип посилання\",\"unlink\":\"Видалити посилання\",\"upload\":\"Надіслати\"},\"list\":{\"bulletedlist\":\"Маркірований список\",\"numberedlist\":\"Нумерований список\"},\"magicline\":{\"title\":\"Вставити абзац\"},\"maximize\":{\"maximize\":\"Максимізувати\",\"minimize\":\"Мінімізувати\"},\"pastetext\":{\"button\":\"Вставити тільки текст\",\"title\":\"Вставити тільки текст\"},\"pastefromword\":{\"confirmCleanup\":\"Текст, що Ви намагаєтесь вставити, схожий на скопійований з Word. Бажаєте очистити його форматування перед вставлянням?\",\"error\":\"Неможливо очистити форматування через внутрішню помилку.\",\"title\":\"Вставити з Word\",\"toolbar\":\"Вставити з Word\"},\"removeformat\":{\"toolbar\":\"Видалити форматування\"},\"sourcearea\":{\"toolbar\":\"Джерело\"},\"specialchar\":{\"options\":\"Опції\",\"title\":\"Оберіть спеціальний символ\",\"toolbar\":\"Спеціальний символ\"},\"scayt\":{\"btn_about\":\"Про SCAYT\",\"btn_dictionaries\":\"Словники\",\"btn_disable\":\"Вимкнути SCAYT\",\"btn_enable\":\"Ввімкнути SCAYT\",\"btn_langs\":\"Мови\",\"btn_options\":\"Опції\",\"text_title\":\"Перефірка орфографії по мірі набору\"},\"stylescombo\":{\"label\":\"Стиль\",\"panelTitle\":\"Стилі форматування\",\"panelTitle1\":\"Блочні стилі\",\"panelTitle2\":\"Рядкові стилі\",\"panelTitle3\":\"Об'єктні стилі\"},\"table\":{\"border\":\"Розмір рамки\",\"caption\":\"Заголовок таблиці\",\"cell\":{\"menu\":\"Комірки\",\"insertBefore\":\"Вставити комірку перед\",\"insertAfter\":\"Вставити комірку після\",\"deleteCell\":\"Видалити комірки\",\"merge\":\"Об'єднати комірки\",\"mergeRight\":\"Об'єднати справа\",\"mergeDown\":\"Об'єднати донизу\",\"splitHorizontal\":\"Розділити комірку по горизонталі\",\"splitVertical\":\"Розділити комірку по вертикалі\",\"title\":\"Властивості комірки\",\"cellType\":\"Тип комірки\",\"rowSpan\":\"Об'єднання рядків\",\"colSpan\":\"Об'єднання стовпців\",\"wordWrap\":\"Автоперенесення тексту\",\"hAlign\":\"Гориз. вирівнювання\",\"vAlign\":\"Верт. вирівнювання\",\"alignBaseline\":\"По базовій лінії\",\"bgColor\":\"Колір фону\",\"borderColor\":\"Колір рамки\",\"data\":\"Дані\",\"header\":\"Заголовок\",\"yes\":\"Так\",\"no\":\"Ні\",\"invalidWidth\":\"Ширина комірки повинна бути цілим числом.\",\"invalidHeight\":\"Висота комірки повинна бути цілим числом.\",\"invalidRowSpan\":\"Кількість об'єднуваних рядків повинна бути цілим числом.\",\"invalidColSpan\":\"Кількість об'єднуваних стовбців повинна бути цілим числом.\",\"chooseColor\":\"Обрати\"},\"cellPad\":\"Внутр. відступ\",\"cellSpace\":\"Проміжок\",\"column\":{\"menu\":\"Стовбці\",\"insertBefore\":\"Вставити стовбець перед\",\"insertAfter\":\"Вставити стовбець після\",\"deleteColumn\":\"Видалити стовбці\"},\"columns\":\"Стовбці\",\"deleteTable\":\"Видалити таблицю\",\"headers\":\"Заголовки стовбців/рядків\",\"headersBoth\":\"Стовбці і рядки\",\"headersColumn\":\"Стовбці\",\"headersNone\":\"Без заголовків\",\"headersRow\":\"Рядки\",\"invalidBorder\":\"Розмір рамки повинен бути цілим числом.\",\"invalidCellPadding\":\"Внутр. відступ комірки повинен бути цілим числом.\",\"invalidCellSpacing\":\"Проміжок між комірками повинен бути цілим числом.\",\"invalidCols\":\"Кількість стовбців повинна бути більшою 0.\",\"invalidHeight\":\"Висота таблиці повинна бути цілим числом.\",\"invalidRows\":\"Кількість рядків повинна бути більшою 0.\",\"invalidWidth\":\"Ширина таблиці повинна бути цілим числом.\",\"menu\":\"Властивості таблиці\",\"row\":{\"menu\":\"Рядки\",\"insertBefore\":\"Вставити рядок перед\",\"insertAfter\":\"Вставити рядок після\",\"deleteRow\":\"Видалити рядки\"},\"rows\":\"Рядки\",\"summary\":\"Детальний опис заголовку таблиці\",\"title\":\"Властивості таблиці\",\"toolbar\":\"Таблиця\",\"widthPc\":\"відсотків\",\"widthPx\":\"пікселів\",\"widthUnit\":\"Одиниці вимір.\"},\"undo\":{\"redo\":\"Повторити\",\"undo\":\"Повернути\"},\"wsc\":{\"btnIgnore\":\"Пропустити\",\"btnIgnoreAll\":\"Пропустити все\",\"btnReplace\":\"Замінити\",\"btnReplaceAll\":\"Замінити все\",\"btnUndo\":\"Назад\",\"changeTo\":\"Замінити на\",\"errorLoading\":\"Помилка завантаження : %s.\",\"ieSpellDownload\":\"Модуль перевірки орфографії не встановлено. Бажаєте завантажити його зараз?\",\"manyChanges\":\"Перевірку орфографії завершено: 1% слів(ова) змінено\",\"noChanges\":\"Перевірку орфографії завершено: жодне слово не змінено\",\"noMispell\":\"Перевірку орфографії завершено: помилок не знайдено\",\"noSuggestions\":\"- немає варіантів -\",\"notAvailable\":\"Вибачте, але сервіс наразі недоступний.\",\"notInDic\":\"Немає в словнику\",\"oneChange\":\"Перевірку орфографії завершено: змінено одне слово\",\"progress\":\"Виконується перевірка орфографії...\",\"title\":\"Перевірка орфографії\",\"toolbar\":\"Перевірити орфографію\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/vi.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['vi']={\"editor\":\"Bộ soạn thảo văn bản có định dạng\",\"editorPanel\":\"Bảng điều khiển Rich Text Editor\",\"common\":{\"editorHelp\":\"Nhấn ALT + 0 để được giúp đỡ\",\"browseServer\":\"Duyệt máy chủ\",\"url\":\"URL\",\"protocol\":\"Giao thức\",\"upload\":\"Tải lên\",\"uploadSubmit\":\"Tải lên máy chủ\",\"image\":\"Hình ảnh\",\"flash\":\"Flash\",\"form\":\"Biểu mẫu\",\"checkbox\":\"Nút kiểm\",\"radio\":\"Nút chọn\",\"textField\":\"Trường văn bản\",\"textarea\":\"Vùng văn bản\",\"hiddenField\":\"Trường ẩn\",\"button\":\"Nút\",\"select\":\"Ô chọn\",\"imageButton\":\"Nút hình ảnh\",\"notSet\":\"<không thiết lập>\",\"id\":\"Định danh\",\"name\":\"Tên\",\"langDir\":\"Hướng ngôn ngữ\",\"langDirLtr\":\"Trái sang phải (LTR)\",\"langDirRtl\":\"Phải sang trái (RTL)\",\"langCode\":\"Mã ngôn ngữ\",\"longDescr\":\"Mô tả URL\",\"cssClass\":\"Lớp Stylesheet\",\"advisoryTitle\":\"Nhan đề hướng dẫn\",\"cssStyle\":\"Kiểu \",\"ok\":\"Đồng ý\",\"cancel\":\"Bỏ qua\",\"close\":\"Đóng\",\"preview\":\"Xem trước\",\"resize\":\"Kéo rê để thay đổi kích cỡ\",\"generalTab\":\"Tab chung\",\"advancedTab\":\"Tab mở rộng\",\"validateNumberFailed\":\"Giá trị này không phải là số.\",\"confirmNewPage\":\"Mọi thay đổi không được lưu lại, nội dung này sẽ bị mất. Bạn có chắc chắn muốn tải một trang mới?\",\"confirmCancel\":\"Một vài tùy chọn đã bị thay đổi. Bạn có chắc chắn muốn đóng hộp thoại?\",\"options\":\"Tùy chọn\",\"target\":\"Đích đến\",\"targetNew\":\"Cửa sổ mới (_blank)\",\"targetTop\":\"Cửa sổ trên cùng (_top)\",\"targetSelf\":\"Tại trang (_self)\",\"targetParent\":\"Cửa sổ cha (_parent)\",\"langDirLTR\":\"Trái sang phải (LTR)\",\"langDirRTL\":\"Phải sang trái (RTL)\",\"styles\":\"Kiểu\",\"cssClasses\":\"Lớp CSS\",\"width\":\"Chiều rộng\",\"height\":\"Chiều cao\",\"align\":\"Vị trí\",\"alignLeft\":\"Trái\",\"alignRight\":\"Phải\",\"alignCenter\":\"Giữa\",\"alignJustify\":\"Sắp chữ\",\"alignTop\":\"Trên\",\"alignMiddle\":\"Giữa\",\"alignBottom\":\"Dưới\",\"alignNone\":\"Không\",\"invalidValue\":\"Giá trị không hợp lệ.\",\"invalidHeight\":\"Chiều cao phải là số nguyên.\",\"invalidWidth\":\"Chiều rộng phải là số nguyên.\",\"invalidCssLength\":\"Giá trị quy định cho trường \\\"%1\\\" phải là một số dương có hoặc không có một đơn vị đo CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).\",\"invalidHtmlLength\":\"Giá trị quy định cho trường \\\"%1\\\" phải là một số dương có hoặc không có một đơn vị đo HTML hợp lệ (px hoặc %).\",\"invalidInlineStyle\":\"Giá trị quy định cho kiểu nội tuyến phải bao gồm một hoặc nhiều dữ liệu với định dạng \\\"tên:giá trị\\\", cách nhau bằng dấu chấm phẩy.\",\"cssLengthTooltip\":\"Nhập một giá trị theo pixel hoặc một số với một đơn vị CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">, không có</span>\"},\"about\":{\"copy\":\"Bản quyền &copy; $1. Giữ toàn quyền.\",\"dlgTitle\":\"Thông tin về CKEditor\",\"help\":\"Kiểm tra $1 để được giúp đỡ.\",\"moreInfo\":\"Vui lòng ghé thăm trang web của chúng tôi để có thông tin về giấy phép:\",\"title\":\"Thông tin về CKEditor\",\"userGuide\":\"Hướng dẫn sử dụng CKEditor\"},\"basicstyles\":{\"bold\":\"Đậm\",\"italic\":\"Nghiêng\",\"strike\":\"Gạch xuyên ngang\",\"subscript\":\"Chỉ số dưới\",\"superscript\":\"Chỉ số trên\",\"underline\":\"Gạch chân\"},\"blockquote\":{\"toolbar\":\"Khối trích dẫn\"},\"clipboard\":{\"copy\":\"Sao chép\",\"copyError\":\"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+C).\",\"cut\":\"Cắt\",\"cutError\":\"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+X).\",\"paste\":\"Dán\",\"pasteArea\":\"Khu vực dán\",\"pasteMsg\":\"Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl/Cmd+V</STRONG>) và nhấn vào nút <STRONG>Đồng ý</STRONG>.\",\"securityMsg\":\"Do thiết lập bảo mật của trình duyệt nên trình biên tập không thể truy cập trực tiếp vào nội dung đã sao chép. Bạn cần phải dán lại nội dung vào cửa sổ này.\",\"title\":\"Dán\"},\"contextmenu\":{\"options\":\"Tùy chọn menu bổ xung\"},\"button\":{\"selectedLabel\":\"%1 (Đã chọn)\"},\"toolbar\":{\"toolbarCollapse\":\"Thu gọn thanh công cụ\",\"toolbarExpand\":\"Mở rộng thnah công cụ\",\"toolbarGroups\":{\"document\":\"Tài liệu\",\"clipboard\":\"Clipboard/Undo\",\"editing\":\"Chỉnh sửa\",\"forms\":\"Bảng biểu\",\"basicstyles\":\"Kiểu cơ bản\",\"paragraph\":\"Đoạn\",\"links\":\"Liên kết\",\"insert\":\"Chèn\",\"styles\":\"Kiểu\",\"colors\":\"Màu sắc\",\"tools\":\"Công cụ\"},\"toolbars\":\"Thanh công cụ\"},\"elementspath\":{\"eleLabel\":\"Nhãn thành phần\",\"eleTitle\":\"%1 thành phần\"},\"format\":{\"label\":\"Định dạng\",\"panelTitle\":\"Định dạng\",\"tag_address\":\"Address\",\"tag_div\":\"Bình thường (DIV)\",\"tag_h1\":\"Heading 1\",\"tag_h2\":\"Heading 2\",\"tag_h3\":\"Heading 3\",\"tag_h4\":\"Heading 4\",\"tag_h5\":\"Heading 5\",\"tag_h6\":\"Heading 6\",\"tag_p\":\"Bình thường (P)\",\"tag_pre\":\"Đã thiết lập\"},\"horizontalrule\":{\"toolbar\":\"Chèn đường phân cách ngang\"},\"image\":{\"alt\":\"Chú thích ảnh\",\"border\":\"Đường viền\",\"btnUpload\":\"Tải lên máy chủ\",\"button2Img\":\"Bạn có muốn chuyển nút bấm bằng ảnh được chọn thành ảnh?\",\"hSpace\":\"Khoảng đệm ngang\",\"img2Button\":\"Bạn có muốn chuyển đổi ảnh được chọn thành nút bấm bằng ảnh?\",\"infoTab\":\"Thông tin của ảnh\",\"linkTab\":\"Tab liên kết\",\"lockRatio\":\"Giữ nguyên tỷ lệ\",\"menu\":\"Thuộc tính của ảnh\",\"resetSize\":\"Kích thước gốc\",\"title\":\"Thuộc tính của ảnh\",\"titleButton\":\"Thuộc tính nút của ảnh\",\"upload\":\"Tải lên\",\"urlMissing\":\"Thiếu đường dẫn hình ảnh\",\"vSpace\":\"Khoảng đệm dọc\",\"validateBorder\":\"Chiều rộng của đường viền phải là một số nguyên dương\",\"validateHSpace\":\"Khoảng đệm ngang phải là một số nguyên dương\",\"validateVSpace\":\"Khoảng đệm dọc phải là một số nguyên dương\"},\"indent\":{\"indent\":\"Dịch vào trong\",\"outdent\":\"Dịch ra ngoài\"},\"fakeobjects\":{\"anchor\":\"Điểm neo\",\"flash\":\"Flash\",\"hiddenfield\":\"Trường ẩn\",\"iframe\":\"IFrame\",\"unknown\":\"Đối tượng không rõ ràng\"},\"link\":{\"acccessKey\":\"Phím hỗ trợ truy cập\",\"advanced\":\"Mở rộng\",\"advisoryContentType\":\"Nội dung hướng dẫn\",\"advisoryTitle\":\"Nhan đề hướng dẫn\",\"anchor\":{\"toolbar\":\"Chèn/Sửa điểm neo\",\"menu\":\"Thuộc tính điểm neo\",\"title\":\"Thuộc tính điểm neo\",\"name\":\"Tên của điểm neo\",\"errorName\":\"Hãy nhập vào tên của điểm neo\",\"remove\":\"Xóa neo\"},\"anchorId\":\"Theo định danh thành phần\",\"anchorName\":\"Theo tên điểm neo\",\"charset\":\"Bảng mã của tài nguyên được liên kết đến\",\"cssClasses\":\"Lớp Stylesheet\",\"emailAddress\":\"Thư điện tử\",\"emailBody\":\"Nội dung thông điệp\",\"emailSubject\":\"Tiêu đề thông điệp\",\"id\":\"Định danh\",\"info\":\"Thông tin liên kết\",\"langCode\":\"Mã ngôn ngữ\",\"langDir\":\"Hướng ngôn ngữ\",\"langDirLTR\":\"Trái sang phải (LTR)\",\"langDirRTL\":\"Phải sang trái (RTL)\",\"menu\":\"Sửa liên kết\",\"name\":\"Tên\",\"noAnchors\":\"(Không có điểm neo nào trong tài liệu)\",\"noEmail\":\"Hãy đưa vào địa chỉ thư điện tử\",\"noUrl\":\"Hãy đưa vào đường dẫn liên kết (URL)\",\"other\":\"<khác>\",\"popupDependent\":\"Phụ thuộc (Netscape)\",\"popupFeatures\":\"Đặc điểm của cửa sổ Popup\",\"popupFullScreen\":\"Toàn màn hình (IE)\",\"popupLeft\":\"Vị trí bên trái\",\"popupLocationBar\":\"Thanh vị trí\",\"popupMenuBar\":\"Thanh Menu\",\"popupResizable\":\"Có thể thay đổi kích cỡ\",\"popupScrollBars\":\"Thanh cuộn\",\"popupStatusBar\":\"Thanh trạng thái\",\"popupToolbar\":\"Thanh công cụ\",\"popupTop\":\"Vị trí phía trên\",\"rel\":\"Quan hệ\",\"selectAnchor\":\"Chọn một điểm neo\",\"styles\":\"Kiểu (style)\",\"tabIndex\":\"Chỉ số của Tab\",\"target\":\"Đích\",\"targetFrame\":\"<khung>\",\"targetFrameName\":\"Tên khung đích\",\"targetPopup\":\"<cửa sổ popup>\",\"targetPopupName\":\"Tên cửa sổ Popup\",\"title\":\"Liên kết\",\"toAnchor\":\"Neo trong trang này\",\"toEmail\":\"Thư điện tử\",\"toUrl\":\"URL\",\"toolbar\":\"Chèn/Sửa liên kết\",\"type\":\"Kiểu liên kết\",\"unlink\":\"Xoá liên kết\",\"upload\":\"Tải lên\"},\"list\":{\"bulletedlist\":\"Chèn/Xoá Danh sách không thứ tự\",\"numberedlist\":\"Chèn/Xoá Danh sách có thứ tự\"},\"magicline\":{\"title\":\"Chèn đoạn vào đây\"},\"maximize\":{\"maximize\":\"Phóng to tối đa\",\"minimize\":\"Thu nhỏ\"},\"pastetext\":{\"button\":\"Dán theo định dạng văn bản thuần\",\"title\":\"Dán theo định dạng văn bản thuần\"},\"pastefromword\":{\"confirmCleanup\":\"Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỏ định dạng Word trước khi dán?\",\"error\":\"Không thể để làm sạch các dữ liệu dán do một lỗi nội bộ\",\"title\":\"Dán với định dạng Word\",\"toolbar\":\"Dán với định dạng Word\"},\"removeformat\":{\"toolbar\":\"Xoá định dạng\"},\"sourcearea\":{\"toolbar\":\"Mã HTML\"},\"specialchar\":{\"options\":\"Tùy chọn các ký tự đặc biệt\",\"title\":\"Hãy chọn ký tự đặc biệt\",\"toolbar\":\"Chèn ký tự đặc biệt\"},\"scayt\":{\"btn_about\":\"Thông tin về SCAYT\",\"btn_dictionaries\":\"Từ điển\",\"btn_disable\":\"Tắt SCAYT\",\"btn_enable\":\"Bật SCAYT\",\"btn_langs\":\"Ngôn ngữ\",\"btn_options\":\"Tùy chọn\",\"text_title\":\"Kiểm tra chính tả ngay khi gõ chữ (SCAYT)\"},\"stylescombo\":{\"label\":\"Kiểu\",\"panelTitle\":\"Phong cách định dạng\",\"panelTitle1\":\"Kiểu khối\",\"panelTitle2\":\"Kiểu trực tiếp\",\"panelTitle3\":\"Kiểu đối tượng\"},\"table\":{\"border\":\"Kích thước đường viền\",\"caption\":\"Đầu đề\",\"cell\":{\"menu\":\"Ô\",\"insertBefore\":\"Chèn ô Phía trước\",\"insertAfter\":\"Chèn ô Phía sau\",\"deleteCell\":\"Xoá ô\",\"merge\":\"Kết hợp ô\",\"mergeRight\":\"Kết hợp sang phải\",\"mergeDown\":\"Kết hợp xuống dưới\",\"splitHorizontal\":\"Phân tách ô theo chiều ngang\",\"splitVertical\":\"Phân tách ô theo chiều dọc\",\"title\":\"Thuộc tính của ô\",\"cellType\":\"Kiểu của ô\",\"rowSpan\":\"Kết hợp hàng\",\"colSpan\":\"Kết hợp cột\",\"wordWrap\":\"Chữ liền hàng\",\"hAlign\":\"Canh lề ngang\",\"vAlign\":\"Canh lề dọc\",\"alignBaseline\":\"Đường cơ sở\",\"bgColor\":\"Màu nền\",\"borderColor\":\"Màu viền\",\"data\":\"Dữ liệu\",\"header\":\"Đầu đề\",\"yes\":\"Có\",\"no\":\"Không\",\"invalidWidth\":\"Chiều rộng của ô phải là một số nguyên.\",\"invalidHeight\":\"Chiều cao của ô phải là một số nguyên.\",\"invalidRowSpan\":\"Số hàng kết hợp phải là một số nguyên.\",\"invalidColSpan\":\"Số cột kết hợp phải là một số nguyên.\",\"chooseColor\":\"Chọn màu\"},\"cellPad\":\"Khoảng đệm giữ ô và nội dung\",\"cellSpace\":\"Khoảng cách giữa các ô\",\"column\":{\"menu\":\"Cột\",\"insertBefore\":\"Chèn cột phía trước\",\"insertAfter\":\"Chèn cột phía sau\",\"deleteColumn\":\"Xoá cột\"},\"columns\":\"Số cột\",\"deleteTable\":\"Xóa bảng\",\"headers\":\"Đầu đề\",\"headersBoth\":\"Cả hai\",\"headersColumn\":\"Cột đầu tiên\",\"headersNone\":\"Không có\",\"headersRow\":\"Hàng đầu tiên\",\"invalidBorder\":\"Kích cỡ của đường biên phải là một số nguyên.\",\"invalidCellPadding\":\"Khoảng đệm giữa ô và nội dung phải là một số nguyên.\",\"invalidCellSpacing\":\"Khoảng cách giữa các ô phải là một số nguyên.\",\"invalidCols\":\"Số lượng cột phải là một số lớn hơn 0.\",\"invalidHeight\":\"Chiều cao của bảng phải là một số nguyên.\",\"invalidRows\":\"Số lượng hàng phải là một số lớn hơn 0.\",\"invalidWidth\":\"Chiều rộng của bảng phải là một số nguyên.\",\"menu\":\"Thuộc tính bảng\",\"row\":{\"menu\":\"Hàng\",\"insertBefore\":\"Chèn hàng phía trước\",\"insertAfter\":\"Chèn hàng phía sau\",\"deleteRow\":\"Xoá hàng\"},\"rows\":\"Số hàng\",\"summary\":\"Tóm lược\",\"title\":\"Thuộc tính bảng\",\"toolbar\":\"Bảng\",\"widthPc\":\"Phần trăm (%)\",\"widthPx\":\"Điểm ảnh (px)\",\"widthUnit\":\"Đơn vị\"},\"undo\":{\"redo\":\"Làm lại thao tác\",\"undo\":\"Khôi phục thao tác\"},\"wsc\":{\"btnIgnore\":\"Bỏ qua\",\"btnIgnoreAll\":\"Bỏ qua tất cả\",\"btnReplace\":\"Thay thế\",\"btnReplaceAll\":\"Thay thế tất cả\",\"btnUndo\":\"Phục hồi lại\",\"changeTo\":\"Chuyển thành\",\"errorLoading\":\"Lỗi khi đang nạp dịch vụ ứng dụng: %s.\",\"ieSpellDownload\":\"Chức năng kiểm tra chính tả chưa được cài đặt. Bạn có muốn tải về ngay bây giờ?\",\"manyChanges\":\"Hoàn tất kiểm tra chính tả: %1 từ đã được thay đổi\",\"noChanges\":\"Hoàn tất kiểm tra chính tả: Không có từ nào được thay đổi\",\"noMispell\":\"Hoàn tất kiểm tra chính tả: Không có lỗi chính tả\",\"noSuggestions\":\"- Không đưa ra gợi ý về từ -\",\"notAvailable\":\"Xin lỗi, dịch vụ này hiện tại không có.\",\"notInDic\":\"Không có trong từ điển\",\"oneChange\":\"Hoàn tất kiểm tra chính tả: Một từ đã được thay đổi\",\"progress\":\"Đang tiến hành kiểm tra chính tả...\",\"title\":\"Kiểm tra chính tả\",\"toolbar\":\"Kiểm tra chính tả\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/zh-cn.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['zh-cn']={\"editor\":\"所见即所得编辑器\",\"editorPanel\":\"所见即所得编辑器面板\",\"common\":{\"editorHelp\":\"按 ALT+0 获得帮助\",\"browseServer\":\"浏览服务器\",\"url\":\"URL\",\"protocol\":\"协议\",\"upload\":\"上传\",\"uploadSubmit\":\"上传到服务器\",\"image\":\"图像\",\"flash\":\"Flash\",\"form\":\"表单\",\"checkbox\":\"复选框\",\"radio\":\"单选按钮\",\"textField\":\"单行文本\",\"textarea\":\"多行文本\",\"hiddenField\":\"隐藏域\",\"button\":\"按钮\",\"select\":\"列表/菜单\",\"imageButton\":\"图像按钮\",\"notSet\":\"<没有设置>\",\"id\":\"ID\",\"name\":\"名称\",\"langDir\":\"语言方向\",\"langDirLtr\":\"从左到右 (LTR)\",\"langDirRtl\":\"从右到左 (RTL)\",\"langCode\":\"语言代码\",\"longDescr\":\"详细说明 URL\",\"cssClass\":\"样式类名称\",\"advisoryTitle\":\"标题\",\"cssStyle\":\"行内样式\",\"ok\":\"确定\",\"cancel\":\"取消\",\"close\":\"关闭\",\"preview\":\"预览\",\"resize\":\"拖拽以改变大小\",\"generalTab\":\"常规\",\"advancedTab\":\"高级\",\"validateNumberFailed\":\"需要输入数字格式\",\"confirmNewPage\":\"当前文档内容未保存，是否确认新建文档？\",\"confirmCancel\":\"部分修改尚未保存，是否确认关闭对话框？\",\"options\":\"选项\",\"target\":\"目标窗口\",\"targetNew\":\"新窗口 (_blank)\",\"targetTop\":\"整页 (_top)\",\"targetSelf\":\"本窗口 (_self)\",\"targetParent\":\"父窗口 (_parent)\",\"langDirLTR\":\"从左到右 (LTR)\",\"langDirRTL\":\"从右到左 (RTL)\",\"styles\":\"样式\",\"cssClasses\":\"样式类\",\"width\":\"宽度\",\"height\":\"高度\",\"align\":\"对齐方式\",\"alignLeft\":\"左对齐\",\"alignRight\":\"右对齐\",\"alignCenter\":\"居中\",\"alignJustify\":\"两端对齐\",\"alignTop\":\"顶端\",\"alignMiddle\":\"居中\",\"alignBottom\":\"底部\",\"alignNone\":\"无\",\"invalidValue\":\"无效的值。\",\"invalidHeight\":\"高度必须为数字格式\",\"invalidWidth\":\"宽度必须为数字格式\",\"invalidCssLength\":\"此“%1”字段的值必须为正数，可以包含或不包含一个有效的 CSS 长度单位(px, %, in, cm, mm, em, ex, pt 或 pc)\",\"invalidHtmlLength\":\"此“%1”字段的值必须为正数，可以包含或不包含一个有效的 HTML 长度单位(px 或 %)\",\"invalidInlineStyle\":\"内联样式必须为格式是以分号分隔的一个或多个“属性名 : 属性值”。\",\"cssLengthTooltip\":\"输入一个表示像素值的数字，或加上一个有效的 CSS 长度单位(px, %, in, cm, mm, em, ex, pt 或 pc)。\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">，不可用</span>\"},\"about\":{\"copy\":\"版权所有 &copy; $1。<br />保留所有权利。\",\"dlgTitle\":\"关于 CKEditor\",\"help\":\"访问 $1 以获取帮助。\",\"moreInfo\":\"相关授权许可信息请访问我们的网站：\",\"title\":\"关于 CKEditor\",\"userGuide\":\"CKEditor 用户向导\"},\"basicstyles\":{\"bold\":\"加粗\",\"italic\":\"倾斜\",\"strike\":\"删除线\",\"subscript\":\"下标\",\"superscript\":\"上标\",\"underline\":\"下划线\"},\"blockquote\":{\"toolbar\":\"块引用\"},\"clipboard\":{\"copy\":\"复制\",\"copyError\":\"您的浏览器安全设置不允许编辑器自动执行复制操作，请使用键盘快捷键(Ctrl/Cmd+C)来完成。\",\"cut\":\"剪切\",\"cutError\":\"您的浏览器安全设置不允许编辑器自动执行剪切操作，请使用键盘快捷键(Ctrl/Cmd+X)来完成。\",\"paste\":\"粘贴\",\"pasteArea\":\"粘贴区域\",\"pasteMsg\":\"请使用键盘快捷键(<STRONG>Ctrl/Cmd+V</STRONG>)把内容粘贴到下面的方框里，再按 <STRONG>确定</STRONG>\",\"securityMsg\":\"因为您的浏览器的安全设置原因，本编辑器不能直接访问您的剪贴板内容，你需要在本窗口重新粘贴一次。\",\"title\":\"粘贴\"},\"contextmenu\":{\"options\":\"快捷菜单选项\"},\"button\":{\"selectedLabel\":\"已选中 %1 项\"},\"toolbar\":{\"toolbarCollapse\":\"折叠工具栏\",\"toolbarExpand\":\"展开工具栏\",\"toolbarGroups\":{\"document\":\"文档\",\"clipboard\":\"剪贴板/撤销\",\"editing\":\"编辑\",\"forms\":\"表单\",\"basicstyles\":\"基本格式\",\"paragraph\":\"段落\",\"links\":\"链接\",\"insert\":\"插入\",\"styles\":\"样式\",\"colors\":\"颜色\",\"tools\":\"工具\"},\"toolbars\":\"工具栏\"},\"elementspath\":{\"eleLabel\":\"元素路径\",\"eleTitle\":\"%1 元素\"},\"format\":{\"label\":\"格式\",\"panelTitle\":\"格式\",\"tag_address\":\"地址\",\"tag_div\":\"段落(DIV)\",\"tag_h1\":\"标题 1\",\"tag_h2\":\"标题 2\",\"tag_h3\":\"标题 3\",\"tag_h4\":\"标题 4\",\"tag_h5\":\"标题 5\",\"tag_h6\":\"标题 6\",\"tag_p\":\"普通\",\"tag_pre\":\"已编排格式\"},\"horizontalrule\":{\"toolbar\":\"插入水平线\"},\"image\":{\"alt\":\"替换文本\",\"border\":\"边框大小\",\"btnUpload\":\"上传到服务器\",\"button2Img\":\"确定要把当前图像按钮转换为普通图像吗？\",\"hSpace\":\"水平间距\",\"img2Button\":\"确定要把当前图像改变为图像按钮吗？\",\"infoTab\":\"图像信息\",\"linkTab\":\"链接\",\"lockRatio\":\"锁定比例\",\"menu\":\"图像属性\",\"resetSize\":\"原始尺寸\",\"title\":\"图像属性\",\"titleButton\":\"图像域属性\",\"upload\":\"上传\",\"urlMissing\":\"缺少图像源文件地址\",\"vSpace\":\"垂直间距\",\"validateBorder\":\"边框大小必须为整数格式\",\"validateHSpace\":\"水平间距必须为整数格式\",\"validateVSpace\":\"垂直间距必须为整数格式\"},\"indent\":{\"indent\":\"增加缩进量\",\"outdent\":\"减少缩进量\"},\"fakeobjects\":{\"anchor\":\"锚点\",\"flash\":\"Flash 动画\",\"hiddenfield\":\"隐藏域\",\"iframe\":\"IFrame\",\"unknown\":\"未知对象\"},\"link\":{\"acccessKey\":\"访问键\",\"advanced\":\"高级\",\"advisoryContentType\":\"内容类型\",\"advisoryTitle\":\"标题\",\"anchor\":{\"toolbar\":\"插入/编辑锚点链接\",\"menu\":\"锚点链接属性\",\"title\":\"锚点链接属性\",\"name\":\"锚点名称\",\"errorName\":\"请输入锚点名称\",\"remove\":\"删除锚点\"},\"anchorId\":\"按锚点 ID\",\"anchorName\":\"按锚点名称\",\"charset\":\"字符编码\",\"cssClasses\":\"样式类名称\",\"emailAddress\":\"地址\",\"emailBody\":\"内容\",\"emailSubject\":\"主题\",\"id\":\"ID\",\"info\":\"超链接信息\",\"langCode\":\"语言代码\",\"langDir\":\"语言方向\",\"langDirLTR\":\"从左到右 (LTR)\",\"langDirRTL\":\"从右到左 (RTL)\",\"menu\":\"编辑超链接\",\"name\":\"名称\",\"noAnchors\":\"(此文档没有可用的锚点)\",\"noEmail\":\"请输入电子邮件地址\",\"noUrl\":\"请输入超链接地址\",\"other\":\"<其他>\",\"popupDependent\":\"依附 (NS)\",\"popupFeatures\":\"弹出窗口属性\",\"popupFullScreen\":\"全屏 (IE)\",\"popupLeft\":\"左\",\"popupLocationBar\":\"地址栏\",\"popupMenuBar\":\"菜单栏\",\"popupResizable\":\"可缩放\",\"popupScrollBars\":\"滚动条\",\"popupStatusBar\":\"状态栏\",\"popupToolbar\":\"工具栏\",\"popupTop\":\"右\",\"rel\":\"关联\",\"selectAnchor\":\"选择一个锚点\",\"styles\":\"行内样式\",\"tabIndex\":\"Tab 键次序\",\"target\":\"目标\",\"targetFrame\":\"<框架>\",\"targetFrameName\":\"目标框架名称\",\"targetPopup\":\"<弹出窗口>\",\"targetPopupName\":\"弹出窗口名称\",\"title\":\"超链接\",\"toAnchor\":\"页内锚点链接\",\"toEmail\":\"电子邮件\",\"toUrl\":\"地址\",\"toolbar\":\"插入/编辑超链接\",\"type\":\"超链接类型\",\"unlink\":\"取消超链接\",\"upload\":\"上传\"},\"list\":{\"bulletedlist\":\"项目列表\",\"numberedlist\":\"编号列表\"},\"magicline\":{\"title\":\"在这插入段落\"},\"maximize\":{\"maximize\":\"全屏\",\"minimize\":\"最小化\"},\"pastetext\":{\"button\":\"粘贴为无格式文本\",\"title\":\"粘贴为无格式文本\"},\"pastefromword\":{\"confirmCleanup\":\"您要粘贴的内容好像是来自 MS Word，是否要清除 MS Word 格式后再粘贴？\",\"error\":\"由于内部错误无法清理要粘贴的数据\",\"title\":\"从 MS Word 粘贴\",\"toolbar\":\"从 MS Word 粘贴\"},\"removeformat\":{\"toolbar\":\"清除格式\"},\"sourcearea\":{\"toolbar\":\"源码\"},\"specialchar\":{\"options\":\"特殊符号选项\",\"title\":\"选择特殊符号\",\"toolbar\":\"插入特殊符号\"},\"scayt\":{\"btn_about\":\"关于即时拼写检查\",\"btn_dictionaries\":\"字典\",\"btn_disable\":\"禁用即时拼写检查\",\"btn_enable\":\"启用即时拼写检查\",\"btn_langs\":\"语言\",\"btn_options\":\"选项\",\"text_title\":\"即时拼写检查\"},\"stylescombo\":{\"label\":\"样式\",\"panelTitle\":\"样式\",\"panelTitle1\":\"块级元素样式\",\"panelTitle2\":\"内联元素样式\",\"panelTitle3\":\"对象元素样式\"},\"table\":{\"border\":\"边框\",\"caption\":\"标题\",\"cell\":{\"menu\":\"单元格\",\"insertBefore\":\"在左侧插入单元格\",\"insertAfter\":\"在右侧插入单元格\",\"deleteCell\":\"删除单元格\",\"merge\":\"合并单元格\",\"mergeRight\":\"向右合并单元格\",\"mergeDown\":\"向下合并单元格\",\"splitHorizontal\":\"水平拆分单元格\",\"splitVertical\":\"垂直拆分单元格\",\"title\":\"单元格属性\",\"cellType\":\"单元格类型\",\"rowSpan\":\"纵跨行数\",\"colSpan\":\"横跨列数\",\"wordWrap\":\"自动换行\",\"hAlign\":\"水平对齐\",\"vAlign\":\"垂直对齐\",\"alignBaseline\":\"基线\",\"bgColor\":\"背景颜色\",\"borderColor\":\"边框颜色\",\"data\":\"数据\",\"header\":\"表头\",\"yes\":\"是\",\"no\":\"否\",\"invalidWidth\":\"单元格宽度必须为数字格式\",\"invalidHeight\":\"单元格高度必须为数字格式\",\"invalidRowSpan\":\"行跨度必须为整数格式\",\"invalidColSpan\":\"列跨度必须为整数格式\",\"chooseColor\":\"选择\"},\"cellPad\":\"边距\",\"cellSpace\":\"间距\",\"column\":{\"menu\":\"列\",\"insertBefore\":\"在左侧插入列\",\"insertAfter\":\"在右侧插入列\",\"deleteColumn\":\"删除列\"},\"columns\":\"列数\",\"deleteTable\":\"删除表格\",\"headers\":\"标题单元格\",\"headersBoth\":\"第一列和第一行\",\"headersColumn\":\"第一列\",\"headersNone\":\"无\",\"headersRow\":\"第一行\",\"invalidBorder\":\"边框粗细必须为数字格式\",\"invalidCellPadding\":\"单元格填充必须为数字格式\",\"invalidCellSpacing\":\"单元格间距必须为数字格式\",\"invalidCols\":\"指定的行数必须大于零\",\"invalidHeight\":\"表格高度必须为数字格式\",\"invalidRows\":\"指定的列数必须大于零\",\"invalidWidth\":\"表格宽度必须为数字格式\",\"menu\":\"表格属性\",\"row\":{\"menu\":\"行\",\"insertBefore\":\"在上方插入行\",\"insertAfter\":\"在下方插入行\",\"deleteRow\":\"删除行\"},\"rows\":\"行数\",\"summary\":\"摘要\",\"title\":\"表格属性\",\"toolbar\":\"表格\",\"widthPc\":\"百分比\",\"widthPx\":\"像素\",\"widthUnit\":\"宽度单位\"},\"undo\":{\"redo\":\"重做\",\"undo\":\"撤消\"},\"wsc\":{\"btnIgnore\":\"忽略\",\"btnIgnoreAll\":\"全部忽略\",\"btnReplace\":\"替换\",\"btnReplaceAll\":\"全部替换\",\"btnUndo\":\"撤消\",\"changeTo\":\"更改为\",\"errorLoading\":\"加载应该服务主机时出错: %s.\",\"ieSpellDownload\":\"拼写检查插件还没安装, 您是否想现在就下载?\",\"manyChanges\":\"拼写检查完成: 更改了 %1 个单词\",\"noChanges\":\"拼写检查完成: 没有更改任何单词\",\"noMispell\":\"拼写检查完成: 没有发现拼写错误\",\"noSuggestions\":\"- 没有建议 -\",\"notAvailable\":\"抱歉, 服务目前暂不可用\",\"notInDic\":\"没有在字典里\",\"oneChange\":\"拼写检查完成: 更改了一个单词\",\"progress\":\"正在进行拼写检查...\",\"title\":\"拼写检查\",\"toolbar\":\"拼写检查\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/lang/zh.js",
    "content": "﻿/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.lang['zh']={\"editor\":\"RTF 編輯器\",\"editorPanel\":\"RTF 編輯器面板\",\"common\":{\"editorHelp\":\"按下 ALT 0 取得說明。\",\"browseServer\":\"瀏覽伺服器\",\"url\":\"URL\",\"protocol\":\"通訊協定\",\"upload\":\"上傳\",\"uploadSubmit\":\"傳送至伺服器\",\"image\":\"圖像\",\"flash\":\"Flash\",\"form\":\"表格\",\"checkbox\":\"核取方塊\",\"radio\":\"選項按鈕\",\"textField\":\"文字欄位\",\"textarea\":\"文字區域\",\"hiddenField\":\"隱藏欄位\",\"button\":\"按鈕\",\"select\":\"選取欄位\",\"imageButton\":\"影像按鈕\",\"notSet\":\"<未設定>\",\"id\":\"ID\",\"name\":\"名稱\",\"langDir\":\"語言方向\",\"langDirLtr\":\"由左至右 (LTR)\",\"langDirRtl\":\"由右至左 (RTL)\",\"langCode\":\"語言代碼\",\"longDescr\":\"完整描述 URL\",\"cssClass\":\"樣式表類別\",\"advisoryTitle\":\"標題\",\"cssStyle\":\"樣式\",\"ok\":\"確定\",\"cancel\":\"取消\",\"close\":\"關閉\",\"preview\":\"預覽\",\"resize\":\"調整大小\",\"generalTab\":\"一般\",\"advancedTab\":\"進階\",\"validateNumberFailed\":\"此值不是數值。\",\"confirmNewPage\":\"現存的修改尚未儲存，要開新檔案？\",\"confirmCancel\":\"部份選項尚未儲存，要關閉對話框？\",\"options\":\"選項\",\"target\":\"目標\",\"targetNew\":\"開新視窗 (_blank)\",\"targetTop\":\"最上層視窗 (_top)\",\"targetSelf\":\"相同視窗 (_self)\",\"targetParent\":\"父視窗 (_parent)\",\"langDirLTR\":\"由左至右 (LTR)\",\"langDirRTL\":\"由右至左 (RTL)\",\"styles\":\"樣式\",\"cssClasses\":\"樣式表類別\",\"width\":\"寬度\",\"height\":\"高度\",\"align\":\"對齊方式\",\"alignLeft\":\"靠左對齊\",\"alignRight\":\"靠右對齊\",\"alignCenter\":\"置中對齊\",\"alignJustify\":\"左右對齊\",\"alignTop\":\"頂端\",\"alignMiddle\":\"中間對齊\",\"alignBottom\":\"底端\",\"alignNone\":\"無\",\"invalidValue\":\"無效值。\",\"invalidHeight\":\"高度必須為數字。\",\"invalidWidth\":\"寬度必須為數字。\",\"invalidCssLength\":\"「%1」的值應為正數，並可包含有效的 CSS 單位 (px, %, in, cm, mm, em, ex, pt, 或 pc)。\",\"invalidHtmlLength\":\"「%1」的值應為正數，並可包含有效的 HTML 單位 (px 或 %)。\",\"invalidInlineStyle\":\"行內樣式的值應包含一個以上的變數值組，其格式如「名稱:值」，並以分號區隔之。\",\"cssLengthTooltip\":\"請輸入數值，單位是像素或有效的 CSS 單位 (px, %, in, cm, mm, em, ex, pt, 或 pc)。\",\"unavailable\":\"%1<span class=\\\"cke_accessibility\\\">，無法使用</span>\"},\"about\":{\"copy\":\"Copyright &copy; $1. All rights reserved.\",\"dlgTitle\":\"關於 CKEditor\",\"help\":\"檢閱 $1 尋求幫助。\",\"moreInfo\":\"關於授權資訊，請參閱我們的網站：\",\"title\":\"關於 CKEditor\",\"userGuide\":\"CKEditor 使用者手冊\"},\"basicstyles\":{\"bold\":\"粗體\",\"italic\":\"斜體\",\"strike\":\"刪除線\",\"subscript\":\"下標\",\"superscript\":\"上標\",\"underline\":\"底線\"},\"blockquote\":{\"toolbar\":\"引用段落\"},\"clipboard\":{\"copy\":\"複製\",\"copyError\":\"瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用鍵盤快捷鍵 (Ctrl/Cmd+C) 複製。\",\"cut\":\"剪下\",\"cutError\":\"瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用鏐盤快捷鍵 (Ctrl/Cmd+X) 剪下。\",\"paste\":\"貼上\",\"pasteArea\":\"貼上區\",\"pasteMsg\":\"請使用鍵盤快捷鍵 (<strong>Ctrl/Cmd+V</strong>) 貼到下方區域中並按下「確定」。\",\"securityMsg\":\"因為瀏覽器的安全性設定，本編輯器無法直接存取您的剪貼簿資料，請您自行在本視窗進行貼上動作。\",\"title\":\"貼上\"},\"contextmenu\":{\"options\":\"內容功能表選項\"},\"button\":{\"selectedLabel\":\"%1 (已選取)\"},\"toolbar\":{\"toolbarCollapse\":\"摺疊工具列\",\"toolbarExpand\":\"展開工具列\",\"toolbarGroups\":{\"document\":\"文件\",\"clipboard\":\"剪貼簿/復原\",\"editing\":\"編輯選項\",\"forms\":\"格式\",\"basicstyles\":\"基本樣式\",\"paragraph\":\"段落\",\"links\":\"連結\",\"insert\":\"插入\",\"styles\":\"樣式\",\"colors\":\"顏色\",\"tools\":\"工具\"},\"toolbars\":\"編輯器工具列\"},\"elementspath\":{\"eleLabel\":\"元件路徑\",\"eleTitle\":\"%1 個元件\"},\"format\":{\"label\":\"格式\",\"panelTitle\":\"段落格式\",\"tag_address\":\"地址\",\"tag_div\":\"標準 (DIV)\",\"tag_h1\":\"標題 1\",\"tag_h2\":\"標題 2\",\"tag_h3\":\"標題 3\",\"tag_h4\":\"標題 4\",\"tag_h5\":\"標題 5\",\"tag_h6\":\"標題 6\",\"tag_p\":\"標準\",\"tag_pre\":\"格式設定\"},\"horizontalrule\":{\"toolbar\":\"插入水平線\"},\"image\":{\"alt\":\"替代文字\",\"border\":\"框線\",\"btnUpload\":\"傳送到伺服器\",\"button2Img\":\"請問您確定要將「圖片按鈕」轉換成「圖片」嗎？\",\"hSpace\":\"HSpace\",\"img2Button\":\"請問您確定要將「圖片」轉換成「圖片按鈕」嗎？\",\"infoTab\":\"影像資訊\",\"linkTab\":\"連結\",\"lockRatio\":\"固定比例\",\"menu\":\"影像屬性\",\"resetSize\":\"重設大小\",\"title\":\"影像屬性\",\"titleButton\":\"影像按鈕屬性\",\"upload\":\"上傳\",\"urlMissing\":\"遺失圖片來源之 URL \",\"vSpace\":\"VSpace\",\"validateBorder\":\"框線必須是整數。\",\"validateHSpace\":\"HSpace 必須是整數。\",\"validateVSpace\":\"VSpace 必須是整數。\"},\"indent\":{\"indent\":\"增加縮排\",\"outdent\":\"減少縮排\"},\"fakeobjects\":{\"anchor\":\"錨點\",\"flash\":\"Flash 動畫\",\"hiddenfield\":\"隱藏欄位\",\"iframe\":\"IFrame\",\"unknown\":\"無法辨識的物件\"},\"link\":{\"acccessKey\":\"便捷鍵\",\"advanced\":\"進階\",\"advisoryContentType\":\"建議內容類型\",\"advisoryTitle\":\"標題\",\"anchor\":{\"toolbar\":\"錨點\",\"menu\":\"編輯錨點\",\"title\":\"錨點內容\",\"name\":\"錨點名稱\",\"errorName\":\"請輸入錨點名稱\",\"remove\":\"移除錨點\"},\"anchorId\":\"依元件編號\",\"anchorName\":\"依錨點名稱\",\"charset\":\"連結資源的字元集\",\"cssClasses\":\"樣式表類別\",\"emailAddress\":\"電子郵件地址\",\"emailBody\":\"郵件本文\",\"emailSubject\":\"郵件主旨\",\"id\":\"ID\",\"info\":\"連結資訊\",\"langCode\":\"語言碼\",\"langDir\":\"語言方向\",\"langDirLTR\":\"由左至右 (LTR)\",\"langDirRTL\":\"由右至左 (RTL)\",\"menu\":\"編輯連結\",\"name\":\"名稱\",\"noAnchors\":\"(本文件中無可用之錨點)\",\"noEmail\":\"請輸入電子郵件\",\"noUrl\":\"請輸入連結 URL\",\"other\":\"<其他>\",\"popupDependent\":\"獨立 (Netscape)\",\"popupFeatures\":\"快顯視窗功能\",\"popupFullScreen\":\"全螢幕 (IE)\",\"popupLeft\":\"左側位置\",\"popupLocationBar\":\"位置列\",\"popupMenuBar\":\"功能表列\",\"popupResizable\":\"可調大小\",\"popupScrollBars\":\"捲軸\",\"popupStatusBar\":\"狀態列\",\"popupToolbar\":\"工具列\",\"popupTop\":\"頂端位置\",\"rel\":\"關係\",\"selectAnchor\":\"選取一個錨點\",\"styles\":\"樣式\",\"tabIndex\":\"定位順序\",\"target\":\"目標\",\"targetFrame\":\"<框架>\",\"targetFrameName\":\"目標框架名稱\",\"targetPopup\":\"<快顯視窗>\",\"targetPopupName\":\"快顯視窗名稱\",\"title\":\"連結\",\"toAnchor\":\"文字中的錨點連結\",\"toEmail\":\"電子郵件\",\"toUrl\":\"網址\",\"toolbar\":\"連結\",\"type\":\"連結類型\",\"unlink\":\"取消連結\",\"upload\":\"上傳\"},\"list\":{\"bulletedlist\":\"插入/移除項目符號清單\",\"numberedlist\":\"插入/移除編號清單清單\"},\"magicline\":{\"title\":\"在此插入段落\"},\"maximize\":{\"maximize\":\"最大化\",\"minimize\":\"最小化\"},\"pastetext\":{\"button\":\"貼成純文字\",\"title\":\"貼成純文字\"},\"pastefromword\":{\"confirmCleanup\":\"您想貼上的文字似乎是自 Word 複製而來，請問您是否要先清除 Word 的格式後再行貼上？\",\"error\":\"由於發生內部錯誤，無法清除清除 Word 的格式。\",\"title\":\"自 Word 貼上\",\"toolbar\":\"自 Word 貼上\"},\"removeformat\":{\"toolbar\":\"移除格式\"},\"sourcearea\":{\"toolbar\":\"原始碼\"},\"specialchar\":{\"options\":\"特殊字元選項\",\"title\":\"選取特殊字元\",\"toolbar\":\"插入特殊字元\"},\"scayt\":{\"btn_about\":\"關於即時拼寫檢查\",\"btn_dictionaries\":\"字典\",\"btn_disable\":\"關閉即時拼寫檢查\",\"btn_enable\":\"啟用即時拼寫檢查\",\"btn_langs\":\"語言\",\"btn_options\":\"選項\",\"text_title\":\"即時拼寫檢查\"},\"stylescombo\":{\"label\":\"樣式\",\"panelTitle\":\"格式化樣式\",\"panelTitle1\":\"區塊樣式\",\"panelTitle2\":\"內嵌樣式\",\"panelTitle3\":\"物件樣式\"},\"table\":{\"border\":\"框線大小\",\"caption\":\"標題\",\"cell\":{\"menu\":\"儲存格\",\"insertBefore\":\"前方插入儲存格\",\"insertAfter\":\"後方插入儲存格\",\"deleteCell\":\"刪除儲存格\",\"merge\":\"合併儲存格\",\"mergeRight\":\"向右合併\",\"mergeDown\":\"向下合併\",\"splitHorizontal\":\"水平分割儲存格\",\"splitVertical\":\"垂直分割儲存格\",\"title\":\"儲存格屬性\",\"cellType\":\"儲存格類型\",\"rowSpan\":\"列全長\",\"colSpan\":\"行全長\",\"wordWrap\":\"自動斷行\",\"hAlign\":\"水平對齊\",\"vAlign\":\"垂直對齊\",\"alignBaseline\":\"基準線\",\"bgColor\":\"背景顏色\",\"borderColor\":\"框線顏色\",\"data\":\"資料\",\"header\":\"頁首\",\"yes\":\"是\",\"no\":\"否\",\"invalidWidth\":\"儲存格寬度必須為數字。\",\"invalidHeight\":\"儲存格高度必須為數字。\",\"invalidRowSpan\":\"列全長必須是整數。\",\"invalidColSpan\":\"行全長必須是整數。\",\"chooseColor\":\"選擇\"},\"cellPad\":\"儲存格邊距\",\"cellSpace\":\"儲存格間距\",\"column\":{\"menu\":\"行\",\"insertBefore\":\"左方插入行\",\"insertAfter\":\"右方插入行\",\"deleteColumn\":\"刪除行\"},\"columns\":\"行\",\"deleteTable\":\"刪除表格\",\"headers\":\"頁首\",\"headersBoth\":\"同時\",\"headersColumn\":\"第一行\",\"headersNone\":\"無\",\"headersRow\":\"第一列\",\"invalidBorder\":\"框線大小必須是整數。\",\"invalidCellPadding\":\"儲存格邊距必須為正數。\",\"invalidCellSpacing\":\"儲存格間距必須為正數。\",\"invalidCols\":\"行數須為大於 0 的正整數。\",\"invalidHeight\":\"表格高度必須為數字。\",\"invalidRows\":\"列數須為大於 0 的正整數。\",\"invalidWidth\":\"表格寬度必須為數字。\",\"menu\":\"表格屬性\",\"row\":{\"menu\":\"列\",\"insertBefore\":\"上方插入列\",\"insertAfter\":\"下方插入列\",\"deleteRow\":\"刪除列\"},\"rows\":\"列\",\"summary\":\"總結\",\"title\":\"表格屬性\",\"toolbar\":\"表格\",\"widthPc\":\"百分比\",\"widthPx\":\"像素\",\"widthUnit\":\"寬度單位\"},\"undo\":{\"redo\":\"取消復原\",\"undo\":\"復原\"},\"wsc\":{\"btnIgnore\":\"忽略\",\"btnIgnoreAll\":\"全部忽略\",\"btnReplace\":\"取代\",\"btnReplaceAll\":\"全部取代\",\"btnUndo\":\"復原\",\"changeTo\":\"更改為\",\"errorLoading\":\"無法聯系侍服器: %s.\",\"ieSpellDownload\":\"尚未安裝拼字檢查元件。您是否想要現在下載？\",\"manyChanges\":\"拼字檢查完成：更改了 %1 個單字\",\"noChanges\":\"拼字檢查完成：未更改任何單字\",\"noMispell\":\"拼字檢查完成：未發現拼字錯誤\",\"noSuggestions\":\"- 無建議值 -\",\"notAvailable\":\"抱歉，服務目前暫不可用\",\"notInDic\":\"不在字典中\",\"oneChange\":\"拼字檢查完成：更改了 1 個單字\",\"progress\":\"進行拼字檢查中…\",\"title\":\"拼字檢查\",\"toolbar\":\"拼字檢查\"}};"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.dialog.add(\"a11yHelp\",function(l){var a=l.lang.a11yhelp,n=CKEDITOR.tools.getNextId(),e={8:a.backspace,9:a.tab,13:a.enter,16:a.shift,17:a.ctrl,18:a.alt,19:a.pause,20:a.capslock,27:a.escape,33:a.pageUp,34:a.pageDown,35:a.end,36:a.home,37:a.leftArrow,38:a.upArrow,39:a.rightArrow,40:a.downArrow,45:a.insert,46:a[\"delete\"],91:a.leftWindowKey,92:a.rightWindowKey,93:a.selectKey,96:a.numpad0,97:a.numpad1,98:a.numpad2,99:a.numpad3,100:a.numpad4,101:a.numpad5,102:a.numpad6,103:a.numpad7,104:a.numpad8,\n105:a.numpad9,106:a.multiply,107:a.add,109:a.subtract,110:a.decimalPoint,111:a.divide,112:a.f1,113:a.f2,114:a.f3,115:a.f4,116:a.f5,117:a.f6,118:a.f7,119:a.f8,120:a.f9,121:a.f10,122:a.f11,123:a.f12,144:a.numLock,145:a.scrollLock,186:a.semiColon,187:a.equalSign,188:a.comma,189:a.dash,190:a.period,191:a.forwardSlash,192:a.graveAccent,219:a.openBracket,220:a.backSlash,221:a.closeBracket,222:a.singleQuote};e[CKEDITOR.ALT]=a.alt;e[CKEDITOR.SHIFT]=a.shift;e[CKEDITOR.CTRL]=a.ctrl;var f=[CKEDITOR.ALT,CKEDITOR.SHIFT,\nCKEDITOR.CTRL],p=/\\$\\{(.*?)\\}/g,t=function(){var a=l.keystrokeHandler.keystrokes,g={},c;for(c in a)g[a[c]]=c;return function(a,c){var b;if(g[c]){b=g[c];for(var h,k,m=[],d=0;d<f.length;d++)k=f[d],h=b/f[d],1<h&&2>=h&&(b-=k,m.push(e[k]));m.push(e[b]||String.fromCharCode(b));b=m.join(\"+\")}else b=a;return b}}();return{title:a.title,minWidth:600,minHeight:400,contents:[{id:\"info\",label:l.lang.common.generalTab,expand:!0,elements:[{type:\"html\",id:\"legends\",style:\"white-space:normal;\",focus:function(){this.getElement().focus()},\nhtml:function(){for(var e='\\x3cdiv class\\x3d\"cke_accessibility_legend\" role\\x3d\"document\" aria-labelledby\\x3d\"'+n+'_arialbl\" tabIndex\\x3d\"-1\"\\x3e%1\\x3c/div\\x3e\\x3cspan id\\x3d\"'+n+'_arialbl\" class\\x3d\"cke_voice_label\"\\x3e'+a.contents+\" \\x3c/span\\x3e\",g=[],c=a.legend,l=c.length,f=0;f<l;f++){for(var b=c[f],h=[],k=b.items,m=k.length,d=0;d<m;d++){var q=k[d],r=q.legend.replace(p,t);r.match(p)||h.push(\"\\x3cdt\\x3e%1\\x3c/dt\\x3e\\x3cdd\\x3e%2\\x3c/dd\\x3e\".replace(\"%1\",q.name).replace(\"%2\",r))}g.push(\"\\x3ch1\\x3e%1\\x3c/h1\\x3e\\x3cdl\\x3e%2\\x3c/dl\\x3e\".replace(\"%1\",\nb.name).replace(\"%2\",h.join(\"\")))}return e.replace(\"%1\",g.join(\"\"))}()+'\\x3cstyle type\\x3d\"text/css\"\\x3e.cke_accessibility_legend{width:600px;height:400px;padding-right:5px;overflow-y:auto;overflow-x:hidden;}.cke_browser_quirks .cke_accessibility_legend,{height:390px}.cke_accessibility_legend *{white-space:normal;}.cke_accessibility_legend h1{font-size: 20px;border-bottom: 1px solid #AAA;margin: 5px 0px 15px;}.cke_accessibility_legend dl{margin-left: 5px;}.cke_accessibility_legend dt{font-size: 13px;font-weight: bold;}.cke_accessibility_legend dd{margin:10px}\\x3c/style\\x3e'}]}],\nbuttons:[CKEDITOR.dialog.cancelButton]}});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt",
    "content": "Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n\ncs.js      Found: 30 Missing: 0\ncy.js      Found: 30 Missing: 0\nda.js      Found: 12 Missing: 18\nde.js      Found: 30 Missing: 0\nel.js      Found: 25 Missing: 5\neo.js      Found: 30 Missing: 0\nfa.js      Found: 30 Missing: 0\nfi.js      Found: 30 Missing: 0\nfr.js      Found: 30 Missing: 0\ngu.js      Found: 12 Missing: 18\nhe.js      Found: 30 Missing: 0\nit.js      Found: 30 Missing: 0\nmk.js      Found: 5 Missing: 25\nnb.js      Found: 30 Missing: 0\nnl.js      Found: 30 Missing: 0\nno.js      Found: 30 Missing: 0\npt-br.js   Found: 30 Missing: 0\nro.js      Found: 6 Missing: 24\ntr.js      Found: 30 Missing: 0\nug.js      Found: 27 Missing: 3\nvi.js      Found: 6 Missing: 24\nzh-cn.js   Found: 30 Missing: 0\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/af.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"af\",{title:\"Toeganglikheid instruksies\",contents:\"Hulp inhoud. Druk ESC om toe te maak.\",legend:[{name:\"Algemeen\",items:[{name:\"Bewerker balk\",legend:\"Druk ${toolbarFocus} om op die werkbalk te land. Beweeg na die volgende en voorige wekrbalkgroep met TAB and SHIFT+TAB. Beweeg na die volgende en voorige werkbalkknop met die regter of linker pyl. Druk SPASIE of ENTER om die knop te bevestig.\"},{name:\"Bewerker dialoog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Bewerkerinhoudmenu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Commands\",items:[{name:\" Undo command\",legend:\"Press ${undo}\"},{name:\" Redo command\",legend:\"Press ${redo}\"},{name:\" Bold command\",legend:\"Press ${bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",\nlegend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pouse\",capslock:\"Hoofletterslot\",escape:\"Ontsnap\",pageUp:\"Blaaiop\",pageDown:\"Blaaiaf\",end:\"Einde\",home:\"Tuis\",leftArrow:\"Linkspyl\",upArrow:\"Oppyl\",rightArrow:\"Regterpyl\",downArrow:\"Afpyl\",insert:\"Toevoeg\",\"delete\":\"Verwyder\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Nommerblok 0\",numpad1:\"Nommerblok 1\",\nnumpad2:\"Nommerblok 2\",numpad3:\"Nommerblok 3\",numpad4:\"Nommerblok 4\",numpad5:\"Nommerblok 5\",numpad6:\"Nommerblok 6\",numpad7:\"Nommerblok 7\",numpad8:\"Nommerblok 8\",numpad9:\"Nommerblok 9\",multiply:\"Maal\",add:\"Plus\",subtract:\"Minus\",decimalPoint:\"Desimaalepunt\",divide:\"Gedeeldeur\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Nommervergrendel\",scrollLock:\"Rolvergrendel\",semiColon:\"Kommapunt\",equalSign:\"Isgelykaan\",comma:\"Komma\",dash:\"Koppelteken\",\nperiod:\"Punt\",forwardSlash:\"Skuinsstreep\",graveAccent:\"Aksentteken\",openBracket:\"Oopblokhakkie\",backSlash:\"Trustreep\",closeBracket:\"Toeblokhakkie\",singleQuote:\"Enkelaanhaalingsteken\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"ar\",{title:\"Accessibility Instructions\",contents:\"Help Contents. To close this dialog press ESC.\",legend:[{name:\"عام\",items:[{name:\"Editor Toolbar\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Editor Dialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Commands\",items:[{name:\" Undo command\",legend:\"Press ${undo}\"},{name:\" Redo command\",legend:\"Press ${redo}\"},{name:\" Bold command\",legend:\"Press ${bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",\nlegend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"إضافة\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"تقسيم\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"فاصلة\",dash:\"Dash\",period:\"نقطة\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"bg\",{title:\"Accessibility Instructions\",contents:\"Help Contents. To close this dialog press ESC.\",legend:[{name:\"Общо\",items:[{name:\"Editor Toolbar\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Editor Dialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Commands\",items:[{name:\" Undo command\",legend:\"Press ${undo}\"},{name:\" Redo command\",legend:\"Press ${redo}\"},{name:\" Bold command\",legend:\"Press ${bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",\nlegend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"ca\",{title:\"Instruccions d'Accessibilitat\",contents:\"Continguts de l'Ajuda. Per tancar aquest quadre de diàleg premi ESC.\",legend:[{name:\"General\",items:[{name:\"Editor de barra d'eines\",legend:\"Premi ${toolbarFocus} per desplaçar-se per la barra d'eines. Vagi en el següent i anterior grup de barra d'eines amb TAB i SHIFT+TAB. Vagi en el següent i anterior botó de la barra d'eines amb RIGHT ARROW i LEFT ARROW. Premi SPACE o ENTER per activar el botó de la barra d'eines.\"},\n{name:\"Editor de quadre de diàleg\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Editor de menú contextual\",legend:\"Premi ${contextMenu} o APPLICATION KEY per obrir el menú contextual. Després desplacis a la següent opció del menú amb TAB o DOWN ARROW. Desplacis a l'anterior opció amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció del menú. Obri el submenú de l'actual opció utilitzant SPACE o ENTER o RIGHT ARROW. Pot tornar a l'opció del menú pare amb ESC o LEFT ARROW. Tanqui el menú contextual amb ESC.\"},\n{name:\"Editor de caixa de llista\",legend:\"Dins d'un quadre de llista, desplacis al següent element de la llista amb TAB o DOWN ARROW. Desplacis a l'anterior element de la llista amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció de la llista. Premi ESC per tancar el quadre de llista.\"},{name:\"Editor de barra de ruta de l'element\",legend:\"Premi ${elementsPathFocus} per anar als elements de la barra de ruta. Desplacis al botó de l'element següent amb TAB o RIGHT ARROW. Desplacis a l'anterior botó amb SHIFT+TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar l'element a l'editor.\"}]},\n{name:\"Ordres\",items:[{name:\"Desfer ordre\",legend:\"Premi ${undo}\"},{name:\"Refer ordre\",legend:\"Premi ${redo}\"},{name:\"Ordre negreta\",legend:\"Premi ${bold}\"},{name:\"Ordre cursiva\",legend:\"Premi ${italic}\"},{name:\"Ordre subratllat\",legend:\"Premi ${underline}\"},{name:\"Ordre enllaç\",legend:\"Premi ${link}\"},{name:\"Ordre amagar barra d'eines\",legend:\"Premi ${toolbarCollapse}\"},{name:\"Ordre per accedir a l'anterior espai enfocat\",legend:\"Premi ${accessPreviousSpace} per accedir a l'enfocament d'espai més proper inabastable abans del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants.\"},\n{name:\"Ordre per accedir al següent espai enfocat\",legend:\"Premi ${accessNextSpace} per accedir a l'enfocament d'espai més proper inabastable després del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants.\"},{name:\"Ajuda d'accessibilitat\",legend:\"Premi ${a11yHelp}\"}]}],backspace:\"Retrocés\",tab:\"Tabulació\",enter:\"Intro\",shift:\"Majúscules\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pausa\",capslock:\"Bloqueig de majúscules\",escape:\"Escape\",\npageUp:\"Pàgina Amunt\",pageDown:\"Pàgina Avall\",end:\"Fi\",home:\"Inici\",leftArrow:\"Fletxa Esquerra\",upArrow:\"Fletxa Amunt\",rightArrow:\"Fletxa Dreta\",downArrow:\"Fletxa Avall\",insert:\"Inserir\",\"delete\":\"Eliminar\",leftWindowKey:\"Tecla Windows Esquerra\",rightWindowKey:\"Tecla Windows Dreta\",selectKey:\"Tecla Seleccionar\",numpad0:\"Teclat Numèric 0\",numpad1:\"Teclat Numèric 1\",numpad2:\"Teclat Numèric 2\",numpad3:\"Teclat Numèric 3\",numpad4:\"Teclat Numèric 4\",numpad5:\"Teclat Numèric 5\",numpad6:\"Teclat Numèric 6\",\nnumpad7:\"Teclat Numèric 7\",numpad8:\"Teclat Numèric 8\",numpad9:\"Teclat Numèric 9\",multiply:\"Multiplicació\",add:\"Suma\",subtract:\"Resta\",decimalPoint:\"Punt Decimal\",divide:\"Divisió\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Bloqueig Teclat Numèric\",scrollLock:\"Bloqueig de Desplaçament\",semiColon:\"Punt i Coma\",equalSign:\"Símbol Igual\",comma:\"Coma\",dash:\"Guió\",period:\"Punt\",forwardSlash:\"Barra Diagonal\",graveAccent:\"Accent Obert\",openBracket:\"Claudàtor Obert\",\nbackSlash:\"Barra Invertida\",closeBracket:\"Claudàtor Tancat\",singleQuote:\"Cometa Simple\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"cs\",{title:\"Instrukce pro přístupnost\",contents:\"Obsah nápovědy. Pro uzavření tohoto dialogu stiskněte klávesu ESC.\",legend:[{name:\"Obecné\",items:[{name:\"Panel nástrojů editoru\",legend:\"Stiskněte${toolbarFocus} k procházení panelu nástrojů. Přejděte na další a předchozí skupiny pomocí TAB a SHIFT+TAB. Přechod na další a předchozí tlačítko panelu nástrojů je pomocí ŠIPKA VPRAVO nebo ŠIPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlačítko aktivujete.\"},{name:\"Dialogové okno editoru\",\nlegend:\"Uvnitř dialogového okna stiskněte TAB pro přesunutí na další prvek okna, stiskněte SHIFT+TAB pro přesun na předchozí prvek okna, stiskněte ENTER pro odeslání dialogu, stiskněte ESC pro jeho zrušení. Pro dialogová okna, která mají mnoho karet stiskněte ALT+F10 pro zaměření seznamu karet, nebo TAB, pro posun podle pořadí karet.Při zaměření seznamu karet se můžete jimi posouvat pomocí ŠIPKY VPRAVO a VLEVO.\"},{name:\"Kontextové menu editoru\",legend:\"Stiskněte ${contextMenu} nebo klávesu APPLICATION k otevření kontextového menu. Pak se přesuňte na další možnost menu pomocí TAB nebo ŠIPKY DOLŮ. Přesuňte se na předchozí možnost pomocí  SHIFT+TAB nebo ŠIPKY NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti menu. Podmenu současné možnosti otevřete pomocí MEZERNÍKU nebo ENTER či ŠIPKY DOLEVA. Kontextové menu uzavřete stiskem ESC.\"},\n{name:\"Rámeček seznamu editoru\",legend:\"Uvnitř rámečku seznamu se přesunete na další položku menu pomocí TAB nebo ŠIPKA DOLŮ. Na předchozí položku se přesunete SHIFT+TAB nebo ŠIPKA NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti seznamu. Stiskněte ESC pro uzavření seznamu.\"},{name:\"Lišta cesty prvku v editoru\",legend:\"Stiskněte ${elementsPathFocus} pro procházení lišty cesty prvku. Na další tlačítko prvku se přesunete pomocí TAB nebo ŠIPKA VPRAVO. Na předchozí tlačítko se přesunete pomocí SHIFT+TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání prvku v editoru.\"}]},\n{name:\"Příkazy\",items:[{name:\" Příkaz Zpět\",legend:\"Stiskněte ${undo}\"},{name:\" Příkaz Znovu\",legend:\"Stiskněte ${redo}\"},{name:\" Příkaz Tučné\",legend:\"Stiskněte ${bold}\"},{name:\" Příkaz Kurzíva\",legend:\"Stiskněte ${italic}\"},{name:\" Příkaz Podtržení\",legend:\"Stiskněte ${underline}\"},{name:\" Příkaz Odkaz\",legend:\"Stiskněte ${link}\"},{name:\" Příkaz Skrýt panel nástrojů\",legend:\"Stiskněte ${toolbarCollapse}\"},{name:\"Příkaz pro přístup k předchozímu prostoru zaměření\",legend:\"Stiskněte ${accessPreviousSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření před stříškou, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte.\"},\n{name:\"Příkaz pro přístup k dalšímu prostoru zaměření\",legend:\"Stiskněte ${accessNextSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření po stříšce, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte.\"},{name:\" Nápověda přístupnosti\",legend:\"Stiskněte ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tabulátor\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pauza\",capslock:\"Caps lock\",escape:\"Escape\",pageUp:\"Stránka nahoru\",\npageDown:\"Stránka dolů\",end:\"Konec\",home:\"Domů\",leftArrow:\"Šipka vlevo\",upArrow:\"Šipka nahoru\",rightArrow:\"Šipka vpravo\",downArrow:\"Šipka dolů\",insert:\"Vložit\",\"delete\":\"Smazat\",leftWindowKey:\"Levá klávesa Windows\",rightWindowKey:\"Pravá klávesa Windows\",selectKey:\"Vyberte klávesu\",numpad0:\"Numerická klávesa 0\",numpad1:\"Numerická klávesa 1\",numpad2:\"Numerická klávesa 2\",numpad3:\"Numerická klávesa 3\",numpad4:\"Numerická klávesa 4\",numpad5:\"Numerická klávesa 5\",numpad6:\"Numerická klávesa 6\",numpad7:\"Numerická klávesa 7\",\nnumpad8:\"Numerická klávesa 8\",numpad9:\"Numerická klávesa 9\",multiply:\"Numerická klávesa násobení\",add:\"Přidat\",subtract:\"Numerická klávesa odečítání\",decimalPoint:\"Desetinná tečka\",divide:\"Numerická klávesa dělení\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num lock\",scrollLock:\"Scroll lock\",semiColon:\"Středník\",equalSign:\"Rovnítko\",comma:\"Čárka\",dash:\"Pomlčka\",period:\"Tečka\",forwardSlash:\"Lomítko\",graveAccent:\"Přízvuk\",openBracket:\"Otevřená hranatá závorka\",\nbackSlash:\"Obrácené lomítko\",closeBracket:\"Uzavřená hranatá závorka\",singleQuote:\"Jednoduchá uvozovka\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"cy\",{title:\"Canllawiau Hygyrchedd\",contents:\"Cynnwys Cymorth. I gau y deialog hwn, pwyswch ESC.\",legend:[{name:\"Cyffredinol\",items:[{name:\"Bar Offer y Golygydd\",legend:\"Pwyswch $ {toolbarFocus} i fynd at y bar offer. Symudwch i'r grŵp bar offer nesaf a blaenorol gyda TAB a SHIFT+TAB. Symudwch i'r botwm bar offer nesaf a blaenorol gyda SAETH DDE neu SAETH CHWITH. Pwyswch SPACE neu ENTER i wneud botwm y bar offer yn weithredol.\"},{name:\"Deialog y Golygydd\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Dewislen Cyd-destun y Golygydd\",legend:\"Pwyswch $ {contextMenu} neu'r ALLWEDD 'APPLICATION' i agor y ddewislen cyd-destun. Yna symudwch i'r opsiwn ddewislen nesaf gyda'r TAB neu'r SAETH I LAWR. Symudwch i'r opsiwn blaenorol gyda SHIFT+TAB neu'r SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn ddewislen. Agorwch is-dewislen yr opsiwn cyfredol gyda SPACE neu ENTER neu SAETH DDE. Ewch yn ôl i'r eitem ar y ddewislen uwch gydag ESC neu SAETH CHWITH. Ceuwch y ddewislen cyd-destun gydag ESC.\"},\n{name:\"Blwch Rhestr y Golygydd\",legend:\"Tu mewn y blwch rhestr, ewch i'r eitem rhestr nesaf gyda TAB neu'r SAETH I LAWR. Symudwch i restr eitem flaenorol gyda SHIFT+TAB neu SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn o'r rhestr. Pwyswch ESC i gau'r rhestr.\"},{name:\"Bar Llwybr Elfen y Golygydd\",legend:\"Pwyswch ${elementsPathFocus} i fynd i'r bar llwybr elfennau. Symudwch i fotwm yr elfen nesaf gyda TAB neu SAETH DDE. Symudwch i fotwm blaenorol gyda SHIFT+TAB neu SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis yr elfen yn y golygydd.\"}]},\n{name:\"Gorchmynion\",items:[{name:\"Gorchymyn dadwneud\",legend:\"Pwyswch ${undo}\"},{name:\"Gorchymyn ailadrodd\",legend:\"Pwyswch ${redo}\"},{name:\"Gorchymyn Bras\",legend:\"Pwyswch ${bold}\"},{name:\"Gorchymyn italig\",legend:\"Pwyswch ${italig}\"},{name:\"Gorchymyn tanlinellu\",legend:\"Pwyso ${underline}\"},{name:\"Gorchymyn dolen\",legend:\"Pwyswch ${link}\"},{name:\"Gorchymyn Cwympo'r Dewislen\",legend:\"Pwyswch ${toolbarCollapse}\"},{name:\"Myned i orchymyn bwlch ffocws blaenorol\",legend:\"Pwyswch ${accessPreviousSpace} i fyned i'r \\\"blwch ffocws sydd methu ei gyrraedd\\\" cyn y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. AIladroddwch y cyfuniad allwedd i gyrraedd bylchau ffocws pell.\"},\n{name:\"Ewch i'r gorchymyn blwch ffocws nesaf\",legend:\"Pwyswch ${accessNextSpace} i fyned i'r blwch ffocws agosaf nad oes modd ei gyrraedd ar ôl y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. Ailadroddwch y cyfuniad allwedd i gyrraedd blychau ffocws pell.\"},{name:\"Cymorth Hygyrchedd\",legend:\"Pwyswch ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",\nend:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",numpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",\ndivide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",graveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/da.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"da\",{title:\"Tilgængelighedsinstrukser\",contents:\"Onlinehjælp. For at lukke dette vindue klik ESC\",legend:[{name:\"Generelt\",items:[{name:\"Editor værktøjslinje\",legend:\"Tryk ${toolbarFocus} for at navigere til værktøjslinjen. Flyt til næste eller forrige værktøjsline gruppe ved hjælp af TAB eller SHIFT+TAB. Flyt til næste eller forrige værktøjslinje knap med venstre- eller højre piltast. Tryk på SPACE eller ENTER for at aktivere værktøjslinje knappen.\"},{name:\"Editor dialogboks\",\nlegend:\"Inde i en dialogboks kan du, trykke på TAB for at navigere til næste element, trykke på SHIFT+TAB for at navigere til forrige element, trykke på ENTER for at afsende eller trykke på ESC for at lukke dialogboksen.\\r\\nNår en dialogboks har flere faner, fanelisten kan tilgås med ALT+F10 eller med TAB. Hvis fanelisten er i fokus kan du skifte til næste eller forrige tab, med højre- og venstre piltast.\"},{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},\n{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},\n{name:\"Kommandoer\",items:[{name:\"Fortryd kommando\",legend:\"Klik på ${undo}\"},{name:\"Gentag kommando\",legend:\"Klik ${redo}\"},{name:\"Fed kommando\",legend:\"Klik ${bold}\"},{name:\"Kursiv kommando\",legend:\"Klik ${italic}\"},{name:\"Understregnings kommando\",legend:\"Klik ${underline}\"},{name:\"Link kommando\",legend:\"Klik ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Klik ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\"Tilgængelighedshjælp\",legend:\"Kilk ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Venstre pil\",\nupArrow:\"Pil op\",rightArrow:\"Højre pil\",downArrow:\"Pil ned\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Venstre Windows tast\",rightWindowKey:\"Højre Windows tast\",selectKey:\"Select-knap\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",numpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Gange\",add:\"Plus\",subtract:\"Minus\",decimalPoint:\"Komma\",divide:\"Divider\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",\nf6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semikolon\",equalSign:\"Lighedstegn\",comma:\"Komma\",dash:\"Bindestreg\",period:\"Punktum\",forwardSlash:\"Skråstreg\",graveAccent:\"Accent grave\",openBracket:\"Start klamme\",backSlash:\"Omvendt skråstreg\",closeBracket:\"Slut klamme\",singleQuote:\"Enkelt citationstegn\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/de-ch.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"de-ch\",{title:\"Barrierefreiheitinformationen\",contents:\"Hilfeinhalt. Um den Dialog zu schliessen die Taste ESC drücken.\",legend:[{name:\"Allgemein\",items:[{name:\"Editorwerkzeugleiste\",legend:\"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT+TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren.\"},\n{name:\"Editordialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Editor-Kontextmenü\",legend:\"Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste.\"},\n{name:\"Editor-Listenbox\",legend:\"Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der SHIFT+TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs.\"},{name:\"Editor-Elementpfadleiste\",legend:\"Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT+TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen.\"}]},\n{name:\"Befehle\",items:[{name:\"Rückgängig-Befehl\",legend:\"Drücken Sie ${undo}\"},{name:\"Wiederherstellen-Befehl\",legend:\"Drücken Sie ${redo}\"},{name:\"Fettschrift-Befehl\",legend:\"Drücken Sie ${bold}\"},{name:\"Kursiv-Befehl\",legend:\"Drücken Sie ${italic}\"},{name:\"Unterstreichen-Befehl\",legend:\"Drücken Sie ${underline}\"},{name:\"Link-Befehl\",legend:\"Drücken Sie ${link}\"},{name:\"Werkzeugleiste einklappen-Befehl\",legend:\"Drücken Sie ${toolbarCollapse}\"},{name:\"Zugang bisheriger Fokussierung Raumbefehl \",legend:\"Drücken Sie ${accessPreviousSpace}  auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. \"},\n{name:\"Zugang nächster Schwerpunkt Raumbefehl \",legend:\"Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. \"},{name:\"Eingabehilfen\",legend:\"Drücken Sie ${a11yHelp}\"}]}],backspace:\"Rücktaste\",tab:\"Tab\",enter:\"Eingabe\",shift:\"Umschalt\",ctrl:\"Strg\",alt:\"Alt\",pause:\"Pause\",capslock:\"Feststell\",escape:\"Escape\",pageUp:\"Bild auf\",pageDown:\"Bild ab\",\nend:\"Ende\",home:\"Pos1\",leftArrow:\"Linke Pfeiltaste\",upArrow:\"Obere Pfeiltaste\",rightArrow:\"Rechte Pfeiltaste\",downArrow:\"Untere Pfeiltaste\",insert:\"Einfügen\",\"delete\":\"Entfernen\",leftWindowKey:\"Linke Windowstaste\",rightWindowKey:\"Rechte Windowstaste\",selectKey:\"Taste auswählen\",numpad0:\"Ziffernblock 0\",numpad1:\"Ziffernblock 1\",numpad2:\"Ziffernblock 2\",numpad3:\"Ziffernblock 3\",numpad4:\"Ziffernblock 4\",numpad5:\"Ziffernblock 5\",numpad6:\"Ziffernblock 6\",numpad7:\"Ziffernblock 7\",numpad8:\"Ziffernblock 8\",\nnumpad9:\"Ziffernblock 9\",multiply:\"Multiplizieren\",add:\"Addieren\",subtract:\"Subtrahieren\",decimalPoint:\"Punkt\",divide:\"Dividieren\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Ziffernblock feststellen\",scrollLock:\"Rollen\",semiColon:\"Semikolon\",equalSign:\"Gleichheitszeichen\",comma:\"Komma\",dash:\"Bindestrich\",period:\"Punkt\",forwardSlash:\"Schrägstrich\",graveAccent:\"Gravis\",openBracket:\"Öffnende eckige Klammer\",backSlash:\"Rückwärtsgewandter Schrägstrich\",\ncloseBracket:\"Schliessende eckige Klammer\",singleQuote:\"Einfaches Anführungszeichen\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/de.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"de\",{title:\"Barrierefreiheitinformationen\",contents:\"Hilfeinhalt. Um den Dialog zu schliessen die Taste ESC drücken.\",legend:[{name:\"Allgemein\",items:[{name:\"Editorwerkzeugleiste\",legend:\"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT+TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren.\"},\n{name:\"Editordialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Editor-Kontextmenü\",legend:\"Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste.\"},\n{name:\"Editor-Listenbox\",legend:\"Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der SHIFT+TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs.\"},{name:\"Editor-Elementpfadleiste\",legend:\"Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT+TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen.\"}]},\n{name:\"Befehle\",items:[{name:\"Rückgängig-Befehl\",legend:\"Drücken Sie ${undo}\"},{name:\"Wiederherstellen-Befehl\",legend:\"Drücken Sie ${redo}\"},{name:\"Fettschrift-Befehl\",legend:\"Drücken Sie ${bold}\"},{name:\"Kursiv-Befehl\",legend:\"Drücken Sie ${italic}\"},{name:\"Unterstreichen-Befehl\",legend:\"Drücken Sie ${underline}\"},{name:\"Link-Befehl\",legend:\"Drücken Sie ${link}\"},{name:\"Werkzeugleiste einklappen-Befehl\",legend:\"Drücken Sie ${toolbarCollapse}\"},{name:\"Zugang bisheriger Fokussierung Raumbefehl \",legend:\"Drücken Sie ${accessPreviousSpace}  auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. \"},\n{name:\"Zugang nächster Schwerpunkt Raumbefehl \",legend:\"Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. \"},{name:\"Eingabehilfen\",legend:\"Drücken Sie ${a11yHelp}\"}]}],backspace:\"Rücktaste\",tab:\"Tab\",enter:\"Eingabe\",shift:\"Umschalt\",ctrl:\"Strg\",alt:\"Alt\",pause:\"Pause\",capslock:\"Feststell\",escape:\"Escape\",pageUp:\"Bild auf\",pageDown:\"Bild ab\",\nend:\"Ende\",home:\"Pos1\",leftArrow:\"Linke Pfeiltaste\",upArrow:\"Obere Pfeiltaste\",rightArrow:\"Rechte Pfeiltaste\",downArrow:\"Untere Pfeiltaste\",insert:\"Einfügen\",\"delete\":\"Entfernen\",leftWindowKey:\"Linke Windowstaste\",rightWindowKey:\"Rechte Windowstaste\",selectKey:\"Taste auswählen\",numpad0:\"Ziffernblock 0\",numpad1:\"Ziffernblock 1\",numpad2:\"Ziffernblock 2\",numpad3:\"Ziffernblock 3\",numpad4:\"Ziffernblock 4\",numpad5:\"Ziffernblock 5\",numpad6:\"Ziffernblock 6\",numpad7:\"Ziffernblock 7\",numpad8:\"Ziffernblock 8\",\nnumpad9:\"Ziffernblock 9\",multiply:\"Multiplizieren\",add:\"Addieren\",subtract:\"Subtrahieren\",decimalPoint:\"Punkt\",divide:\"Dividieren\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Ziffernblock feststellen\",scrollLock:\"Rollen\",semiColon:\"Semikolon\",equalSign:\"Gleichheitszeichen\",comma:\"Komma\",dash:\"Bindestrich\",period:\"Punkt\",forwardSlash:\"Schrägstrich\",graveAccent:\"Gravis\",openBracket:\"Öffnende eckige Klammer\",backSlash:\"Rückwärtsgewandter Schrägstrich\",\ncloseBracket:\"Schließende eckige Klammer\",singleQuote:\"Einfaches Anführungszeichen\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/el.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"el\",{title:\"Οδηγίες Προσβασιμότητας\",contents:\"Περιεχόμενα Βοήθειας. Πατήστε ESC για κλείσιμο.\",legend:[{name:\"Γενικά\",items:[{name:\"Εργαλειοθήκη Επεξεργαστή\",legend:\"Πατήστε ${toolbarFocus} για να περιηγηθείτε στην γραμμή εργαλείων. Μετακινηθείτε ανάμεσα στις ομάδες της γραμμής εργαλείων με TAB και SHIFT+TAB. Μετακινηθείτε ανάμεσα στα κουμπιά εργαλείων με το ΔΕΞΙ ή ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να ενεργοποιήσετε το ενεργό κουμπί εργαλείου.\"},{name:\"Παράθυρο Διαλόγου Επεξεργαστή\",\nlegend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Αναδυόμενο Μενού Επεξεργαστή\",legend:\"Πατήστε ${contextMenu} ή APPLICATION KEY για να ανοίξετε το αναδυόμενο μενού. Μετά μετακινηθείτε στην επόμενη επιλογή του μενού με  TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στην προηγούμενη επιλογή με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξτε το τρέχων στοιχείο. Ανοίξτε το αναδυόμενο μενού της τρέχουσας επιλογής με ΔΙΑΣΤΗΜΑ ή ENTER ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μεταβείτε πίσω στο αρχικό στοιχείο μενού με το ESC ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Κλείστε το αναδυόμενο μενού με ESC.\"},\n{name:\"Κουτί Λίστας Επεξεργαστών\",legend:\"Μέσα σε ένα κουτί λίστας, μετακινηθείτε στο επόμενο στοιχείο με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στο προηγούμενο στοιχείο με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε ένα στοιχείο. Πατήστε ESC για να κλείσετε το κουτί της λίστας.\"},{name:\"Μπάρα Διαδρομών Στοιχείων Επεξεργαστή\",legend:\"Πατήστε ${elementsPathFocus} για να περιηγηθείτε στην μπάρα διαδρομών στοιχείων του επεξεργαστή. Μετακινηθείτε στο κουμπί του επόμενου στοιχείου με το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μετακινηθείτε στο κουμπί του προηγούμενου στοιχείου με το SHIFT+TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε το στοιχείο στον επεξεργαστή.\"}]},\n{name:\"Εντολές\",items:[{name:\"Εντολή αναίρεσης\",legend:\"Πατήστε ${undo}\"},{name:\"Εντολή επανάληψης\",legend:\"Πατήστε ${redo}\"},{name:\"Εντολή έντονης γραφής\",legend:\"Πατήστε ${bold}\"},{name:\"Εντολή πλάγιας γραφής\",legend:\"Πατήστε ${italic}\"},{name:\"Εντολή υπογράμμισης\",legend:\"Πατήστε ${underline}\"},{name:\"Εντολή συνδέσμου\",legend:\"Πατήστε ${link}\"},{name:\"Εντολή Σύμπτηξης Εργαλειοθήκης\",legend:\"Πατήστε ${toolbarCollapse}\"},{name:\"Πρόσβαση στην προηγούμενη εντολή του χώρου εστίασης \",legend:\"Πατήστε ${accessPreviousSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης πριν το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για να φθάσετε στους χώρους μακρινής εστίασης. \"},\n{name:\"Πρόσβαση στην επόμενη εντολή του χώρου εστίασης\",legend:\"Πατήστε ${accessNextSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης μετά το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για τους χώρους μακρινής εστίασης. \"},{name:\"Βοήθεια Προσβασιμότητας\",legend:\"Πατήστε ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",\nend:\"End\",home:\"Home\",leftArrow:\"Αριστερό Βέλος\",upArrow:\"Πάνω Βέλος\",rightArrow:\"Δεξί Βέλος\",downArrow:\"Κάτω Βέλος\",insert:\"Insert \",\"delete\":\"Delete\",leftWindowKey:\"Αριστερό Πλήκτρο Windows\",rightWindowKey:\"Δεξί Πλήκτρο Windows\",selectKey:\"Πλήκτρο Select\",numpad0:\"Αριθμητικό πληκτρολόγιο 0\",numpad1:\"Αριθμητικό Πληκτρολόγιο 1\",numpad2:\"Αριθμητικό πληκτρολόγιο 2\",numpad3:\"Αριθμητικό πληκτρολόγιο 3\",numpad4:\"Αριθμητικό πληκτρολόγιο 4\",numpad5:\"Αριθμητικό πληκτρολόγιο 5\",numpad6:\"Αριθμητικό πληκτρολόγιο 6\",\nnumpad7:\"Αριθμητικό πληκτρολόγιο 7\",numpad8:\"Αριθμητικό πληκτρολόγιο 8\",numpad9:\"Αριθμητικό πληκτρολόγιο 9\",multiply:\"Πολλαπλασιασμός\",add:\"Πρόσθεση\",subtract:\"Αφαίρεση\",decimalPoint:\"Υποδιαστολή\",divide:\"Διαίρεση\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"6\",f7:\"7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Ερωτηματικό\",equalSign:\"Σύμβολο Ισότητας\",comma:\"Κόμμα\",dash:\"Παύλα\",period:\"Τελεία\",forwardSlash:\"Κάθετος\",graveAccent:\"Βαρεία\",openBracket:\"Άνοιγμα Παρένθεσης\",\nbackSlash:\"Ανάστροφη Κάθετος\",closeBracket:\"Κλείσιμο Παρένθεσης\",singleQuote:\"Απόστροφος\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"en-gb\",{title:\"Accessibility Instructions\",contents:\"Help Contents. To close this dialog press ESC.\",legend:[{name:\"General\",items:[{name:\"Editor Toolbar\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Editor Dialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Commands\",items:[{name:\" Undo command\",legend:\"Press ${undo}\"},{name:\" Redo command\",legend:\"Press ${redo}\"},{name:\" Bold command\",legend:\"Press ${bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",\nlegend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/en.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"en\",{title:\"Accessibility Instructions\",contents:\"Help Contents. To close this dialog press ESC.\",legend:[{name:\"General\",items:[{name:\"Editor Toolbar\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Editor Dialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Commands\",items:[{name:\" Undo command\",legend:\"Press ${undo}\"},{name:\" Redo command\",legend:\"Press ${redo}\"},{name:\" Bold command\",legend:\"Press ${bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",\nlegend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"eo\",{title:\"Uzindikoj pri atingeblo\",contents:\"Helpilenhavo. Por fermi tiun dialogon, premu la ESKAPAN klavon.\",legend:[{name:\"Ĝeneralaĵoj\",items:[{name:\"Ilbreto de la redaktilo\",legend:\"Premu ${toolbarFocus} por atingi la ilbreton. Moviĝu al la sekva aŭ antaŭa grupoj de la ilbreto per la klavoj TABA kaj MAJUSKLIGA+TABA. Moviĝu al la sekva aŭ antaŭa butonoj de la ilbreto per la klavoj SAGO DEKSTREN kaj SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por aktivigi la ilbretbutonon.\"},\n{name:\"Redaktildialogo\",legend:\"En dialogo, premu la TABAN klavon por navigi al la sekva dialogelemento, premu la MAJUSKLIGAN+TABAN klavon por iri al la antaŭa dialogelemento, premu la ENEN klavon por sendi la dialogon, premu la ESKAPAN klavon por nuligi la dialogon. Kiam dialogo havas multajn langetojn, eblas atingi la langetliston aŭ per ALT+F10 aŭ per la TABA klavo kiel parton de la dialoga taba ordo. En langetlisto, moviĝu al la sekva kaj antaŭa langeto per la klavoj SAGO DEKSTREN KAJ MALDEKSTREN respektive.\"},\n{name:\"Kunteksta menuo de la redaktilo\",legend:\"Premu ${contextMenu} aŭ entajpu la KLAVKOMBINAĴON por malfermi la kuntekstan menuon. Poste moviĝu al la sekva opcio de la menuo per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa opcio per la klavoj MAJUSKLGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la menuopcion. Malfermu la submenuon de la kuranta opcio per la SPACETklavo aŭ la ENENklavo aŭ la SAGO DEKSTREN. Revenu al la elemento de la patra menuo per la klavoj ESKAPA aŭ SAGO MALDEKSTREN. Fermu la kuntekstan menuon per la ESKAPA klavo.\"},\n{name:\"Fallisto de la redaktilo\",legend:\"En fallisto, moviĝu al la sekva listelemento per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa listelemento per la klavoj MAJUSKLIGA+TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la opcion en la listo. Premu la ESKAPAN klavon por fermi la falmenuon.\"},{name:\"Breto indikanta la vojon al la redaktilelementoj\",legend:\"Premu ${elementsPathFocus} por navigi al la breto indikanta la vojon al la redaktilelementoj. Moviĝu al la butono de la sekva elemento per la klavoj TABA aŭ SAGO DEKSTREN. Moviĝu al la butono de la antaŭa elemento per la klavoj MAJUSKLIGA+TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ ENENklavon por selekti la elementon en la redaktilo.\"}]},\n{name:\"Komandoj\",items:[{name:\"Komando malfari\",legend:\"Premu ${undo}\"},{name:\"Komando refari\",legend:\"Premu ${redo}\"},{name:\"Komando grasa\",legend:\"Premu ${bold}\"},{name:\"Komando kursiva\",legend:\"Premu ${italic}\"},{name:\"Komando substreki\",legend:\"Premu ${underline}\"},{name:\"Komando ligilo\",legend:\"Premu ${link}\"},{name:\"Komando faldi la ilbreton\",legend:\"Premu ${toolbarCollapse}\"},{name:\"Komando por atingi la antaŭan fokusan spacon\",legend:\"Press ${accessPreviousSpace} por atingi la plej proksiman neatingeblan fokusan spacon antaŭ la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinaĵon por atingi malproksimajn fokusajn spacojn.\"},\n{name:\"Komando por atingi la sekvan fokusan spacon\",legend:\"Press ${accessNextSpace} por atingi la plej proksiman neatingeblan fokusan spacon post la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinajôn por atingi malproksimajn fokusajn spacojn\"},{name:\"Helpilo pri atingeblo\",legend:\"Premu ${a11yHelp}\"}]}],backspace:\"Retropaŝo\",tab:\"Tabo\",enter:\"Enigi\",shift:\"Registrumo\",ctrl:\"Stirklavo\",alt:\"Alt-klavo\",pause:\"Paŭzo\",capslock:\"Majuskla baskulo\",escape:\"Eskapa klavo\",pageUp:\"Antaŭa Paĝo\",\npageDown:\"Sekva Paĝo\",end:\"Fino\",home:\"Hejmo\",leftArrow:\"Sago Maldekstren\",upArrow:\"Sago Supren\",rightArrow:\"Sago Dekstren\",downArrow:\"Sago Suben\",insert:\"Enmeti\",\"delete\":\"Forigi\",leftWindowKey:\"Maldekstra Windows-klavo\",rightWindowKey:\"Dekstra Windows-klavo\",selectKey:\"Selektklavo\",numpad0:\"Nombra Klavaro 0\",numpad1:\"Nombra Klavaro 1\",numpad2:\"Nombra Klavaro 2\",numpad3:\"Nombra Klavaro 3\",numpad4:\"Nombra Klavaro 4\",numpad5:\"Nombra Klavaro 5\",numpad6:\"Nombra Klavaro 6\",numpad7:\"Nombra Klavaro 7\",\nnumpad8:\"Nombra Klavaro 8\",numpad9:\"Nombra Klavaro 9\",multiply:\"Obligi\",add:\"Almeti\",subtract:\"Subtrahi\",decimalPoint:\"Dekuma Punkto\",divide:\"Dividi\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Nombra Baskulo\",scrollLock:\"Ruluma Baskulo\",semiColon:\"Punktokomo\",equalSign:\"Egalsigno\",comma:\"Komo\",dash:\"Haltostreko\",period:\"Punkto\",forwardSlash:\"Oblikvo\",graveAccent:\"Malakuto\",openBracket:\"Malferma Krampo\",backSlash:\"Retroklino\",closeBracket:\"Ferma Krampo\",\nsingleQuote:\"Citilo\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/es.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"es\",{title:\"Instrucciones de accesibilidad\",contents:\"Ayuda. Para cerrar presione ESC.\",legend:[{name:\"General\",items:[{name:\"Barra de herramientas del editor\",legend:'Presiona ${toolbarFocus} para navegar por la barra de herramientas. Para moverse por los distintos grupos de herramientas usa las teclas TAB y MAY+TAB. Para moverse por las distintas herramientas usa FLECHA DERECHA o FECHA IZQUIERDA. Presiona \"espacio\" o \"intro\" para activar la herramienta.'},{name:\"Editor de diálogo\",\nlegend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Editor del menú contextual\",legend:\"Presiona ${contextMenu} o TECLA MENÚ para abrir el menú contextual. Entonces muévete a la siguiente opción del menú con TAB o FLECHA ABAJO. Muévete a la opción previa con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para seleccionar la opción del menú. Abre el submenú de la opción actual con ESPACIO o ENTER o FLECHA DERECHA. Regresa al elemento padre del menú con ESC o FLECHA IZQUIERDA. Cierra el menú contextual con ESC.\"},\n{name:\"Lista del Editor\",legend:\"Dentro de una lista, te mueves al siguiente elemento de la lista con TAB o FLECHA ABAJO. Te mueves al elemento previo de la lista con SHIFT+TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para elegir la opción de la lista. Presiona ESC para cerrar la lista.\"},{name:\"Barra de Ruta del Elemento en el Editor\",legend:\"Presiona ${elementsPathFocus} para navegar a los elementos de la barra de ruta. Te mueves al siguiente elemento botón con TAB o FLECHA DERECHA. Te mueves al botón previo con SHIFT+TAB o FLECHA IZQUIERDA. Presiona ESPACIO o ENTER para seleccionar el elemento en el editor.\"}]},\n{name:\"Comandos\",items:[{name:\"Comando deshacer\",legend:\"Presiona ${undo}\"},{name:\"Comando rehacer\",legend:\"Presiona ${redo}\"},{name:\"Comando negrita\",legend:\"Presiona ${bold}\"},{name:\"Comando itálica\",legend:\"Presiona ${italic}\"},{name:\"Comando subrayar\",legend:\"Presiona ${underline}\"},{name:\"Comando liga\",legend:\"Presiona ${liga}\"},{name:\"Comando colapsar barra de herramientas\",legend:\"Presiona ${toolbarCollapse}\"},{name:\"Comando accesar el anterior espacio de foco\",legend:\"Presiona ${accessPreviousSpace} para accesar el espacio de foco no disponible más cercano anterior al cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes.\"},\n{name:\"Comando accesar el siguiente spacio de foco\",legend:\"Presiona ${accessNextSpace} para accesar el espacio de foco no disponible más cercano después del cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes.\"},{name:\"Ayuda de Accesibilidad\",legend:\"Presiona ${a11yHelp}\"}]}],backspace:\"Retroceso\",tab:\"Tabulador\",enter:\"Ingresar\",shift:\"Mayús.\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pausa\",capslock:\"Bloq. Mayús.\",escape:\"Escape\",pageUp:\"Regresar Página\",\npageDown:\"Avanzar Página\",end:\"Fin\",home:\"Inicio\",leftArrow:\"Flecha Izquierda\",upArrow:\"Flecha Arriba\",rightArrow:\"Flecha Derecha\",downArrow:\"Flecha Abajo\",insert:\"Insertar\",\"delete\":\"Suprimir\",leftWindowKey:\"Tecla Windows Izquierda\",rightWindowKey:\"Tecla Windows Derecha\",selectKey:\"Tecla de Selección\",numpad0:\"Tecla 0 del teclado numérico\",numpad1:\"Tecla 1 del teclado numérico\",numpad2:\"Tecla 2 del teclado numérico\",numpad3:\"Tecla 3 del teclado numérico\",numpad4:\"Tecla 4 del teclado numérico\",numpad5:\"Tecla 5 del teclado numérico\",\nnumpad6:\"Tecla 6 del teclado numérico\",numpad7:\"Tecla 7 del teclado numérico\",numpad8:\"Tecla 8 del teclado numérico\",numpad9:\"Tecla 9 del teclado numérico\",multiply:\"Multiplicar\",add:\"Sumar\",subtract:\"Restar\",decimalPoint:\"Punto Decimal\",divide:\"Dividir\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Punto y coma\",equalSign:\"Signo de Igual\",comma:\"Coma\",dash:\"Guión\",period:\"Punto\",forwardSlash:\"Diagonal\",\ngraveAccent:\"Acento Grave\",openBracket:\"Abrir llave\",backSlash:\"Diagonal Invertida\",closeBracket:\"Cerrar llave\",singleQuote:\"Comillas simples\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/et.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"et\",{title:\"Accessibility Instructions\",contents:\"Abi sisu. Selle dialoogi sulgemiseks vajuta ESC klahvi.\",legend:[{name:\"Üldine\",items:[{name:\"Editor Toolbar\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Editor Dialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Commands\",items:[{name:\" Undo command\",legend:\"Press ${undo}\"},{name:\" Redo command\",legend:\"Press ${redo}\"},{name:\" Bold command\",legend:\"Press ${bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",\nlegend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/eu.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"eu\",{title:\"Erabilerraztasunaren argibideak\",contents:\"Laguntzaren edukiak. Elkarrizketa-koadro hau ixteko sakatu ESC.\",legend:[{name:\"Orokorra\",items:[{name:\"Editorearen tresna-barra\",legend:\"Sakatu ${toolbarFocus} tresna-barrara nabigatzeko. Tresna-barrako aurreko eta hurrengo taldera joateko erabili TAB eta MAIUS+TAB. Tresna-barrako aurreko eta hurrengo botoira joateko erabili ESKUIN-GEZIA eta EZKER-GEZIA. Sakatu ZURIUNEA edo SARTU tresna-barrako botoia aktibatzeko.\"},\n{name:\"Editorearen elkarrizketa-koadroa\",legend:\"Elkarrizketa-koadro baten barruan sakatu TAB hurrengo elementura nabigatzeko, sakatu MAIUS+TAB aurreko elementura joateko, sakatu SARTU elkarrizketa-koadroa bidaltzeko eta sakatu ESC uzteko. Elkarrizketa-koadro batek hainbat fitxa dituenean, ALT+F10 erabiliz irits daiteke fitxen zerrendara, edo TAB erabiliz. Fokoa fitxen zerrendak duenean, aurreko eta hurrengo fitxetara joateko erabili EZKER-GEZIA eta ESKUIN-GEZIA.\"},{name:\"Editorearen testuinguru-menua\",\nlegend:\"Sakatu ${contextMenu} edo APLIKAZIO TEKLA testuinguru-menua irekitzeko. Menuko hurrengo aukerara joateko erabili TAB edo BEHERA GEZIA. Aurreko aukerara nabigatzeko erabili MAIUS+TAB edo GORA GEZIA. Sakatu ZURIUNEA edo SARTU menuko aukera hautatzeko. Ireki uneko aukeraren azpi-menua ZURIUNEA edo SARTU edo ESKUIN-GEZIA erabiliz. Menuko aukera gurasora itzultzeko erabili ESC edo EZKER-GEZIA. Testuinguru-menua ixteko sakatu ESC.\"},{name:\"Editorearen zerrenda-koadroa\",legend:\"Zerrenda-koadro baten barruan, zerrendako hurrengo elementura joateko erabili TAB edo BEHERA GEZIA. Zerrendako aurreko elementura nabigatzeko MAIUS+TAB edo GORA GEZIA. Sakatu ZURIUNEA edo SARTU zerrendako aukera hautatzeko. Sakatu ESC zerrenda-koadroa ixteko.\"},\n{name:\"Editorearen elementuaren bide-barra\",legend:\"Sakatu ${elementsPathFocus} elementuaren bide-barrara nabigatzeko. Hurrengo elementuaren botoira joateko erabili TAB edo ESKUIN-GEZIA. Aurreko botoira joateko aldiz erabili MAIUS+TAB edo EZKER-GEZIA. Elementua editorean hautatzeko sakatu ZURIUNEA edo SARTU.\"}]},{name:\"Komandoak\",items:[{name:\"Desegin komandoa\",legend:\"Sakatu ${undo}\"},{name:\"Berregin komandoa\",legend:\"Sakatu ${redo}\"},{name:\"Lodia komandoa\",legend:\"Sakatu ${bold}\"},{name:\"Etzana komandoa\",\nlegend:\"Sakatu ${italic}\"},{name:\"Azpimarratu komandoa\",legend:\"Sakatu ${underline}\"},{name:\"Esteka komandoa\",legend:\"Sakatu ${link}\"},{name:\"Tolestu tresna-barra komandoa\",legend:\"Sakatu ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\"Erabilerraztasunaren laguntza\",legend:\"Sakatu ${a11yHelp}\"}]}],backspace:\"Atzera tekla\",tab:\"Tabuladorea\",enter:\"Sartu\",shift:\"Maius\",ctrl:\"Ktrl\",alt:\"Alt\",pause:\"Pausatu\",capslock:\"Blok Maius\",escape:\"Ihes\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"Buka\",home:\"Etxea\",leftArrow:\"Ezker-gezia\",upArrow:\"Gora gezia\",rightArrow:\"Eskuin-gezia\",downArrow:\"Behera gezia\",insert:\"Txertatu\",\"delete\":\"Ezabatu\",leftWindowKey:\"Ezkerreko Windows tekla\",rightWindowKey:\"Eskuineko Windows tekla\",selectKey:\"Hautatu tekla\",\nnumpad0:\"Zenbakizko teklatua 0\",numpad1:\"Zenbakizko teklatua 1\",numpad2:\"Zenbakizko teklatua 2\",numpad3:\"Zenbakizko teklatua 3\",numpad4:\"Zenbakizko teklatua 4\",numpad5:\"Zenbakizko teklatua 5\",numpad6:\"Zenbakizko teklatua 6\",numpad7:\"Zenbakizko teklatua 7\",numpad8:\"Zenbakizko teklatua 8\",numpad9:\"Zenbakizko teklatua 9\",multiply:\"Biderkatu\",add:\"Gehitu\",subtract:\"Kendu\",decimalPoint:\"Koma hamartarra\",divide:\"Zatitu\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",\nf12:\"F12\",numLock:\"Blok Zenb\",scrollLock:\"Blok Korr\",semiColon:\"Puntu eta koma\",equalSign:\"Berdin zeinua\",comma:\"Koma\",dash:\"Marratxoa\",period:\"Puntua\",forwardSlash:\"Barra\",graveAccent:\"Azentu kamutsa\",openBracket:\"Parentesia ireki\",backSlash:\"Alderantzizko barra\",closeBracket:\"Itxi parentesia\",singleQuote:\"Komatxo bakuna\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"fa\",{title:\"دستورالعمل‌های دسترسی\",contents:\"راهنمای فهرست مطالب. برای بستن این کادر محاوره‌ای ESC را فشار دهید.\",legend:[{name:\"عمومی\",items:[{name:\"نوار ابزار ویرایشگر\",legend:\"${toolbarFocus} را برای باز کردن نوار ابزار بفشارید. با کلید Tab و Shift+Tab در مجموعه نوار ابزار بعدی و قبلی حرکت کنید. برای حرکت در کلید نوار ابزار قبلی و بعدی با کلید جهت‌نمای راست و چپ جابجا شوید. کلید Space یا Enter را برای فعال کردن کلید نوار ابزار بفشارید.\"},{name:\"پنجره محاورهای ویرایشگر\",\nlegend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"منوی متنی ویرایشگر\",legend:\"${contextMenu} یا کلید برنامههای کاربردی را برای باز کردن منوی متن را بفشارید. سپس میتوانید برای حرکت به گزینه بعدی منو با کلید Tab و یا کلید جهتنمای پایین جابجا شوید. حرکت به گزینه قبلی با Shift+Tab یا کلید جهتنمای بالا. فشردن Space یا Enter برای انتخاب یک گزینه از منو. باز کردن زیر شاخه گزینه منو جاری با کلید Space یا Enter و یا کلید جهتنمای راست و چپ. بازگشت به منوی والد با کلید Esc یا کلید جهتنمای چپ. بستن منوی متن با Esc.\"},\n{name:\"جعبه فهرست ویرایشگر\",legend:\"در داخل جعبه لیست، قلم دوم از اقلام لیست بعدی را با TAB و یا Arrow Down حرکت دهید. انتقال به قلم دوم از اقلام لیست قبلی را با SHIFT + TAB یا UP ARROW. کلید Space یا ENTER را برای انتخاب گزینه لیست بفشارید. کلید ESC را برای بستن جعبه لیست بفشارید.\"},{name:\"ویرایشگر عنصر نوار راه\",legend:\"برای رفتن به مسیر عناصر ${elementsPathFocus} را بفشارید. حرکت به کلید عنصر بعدی با کلید Tab یا کلید جهت‌نمای راست. برگشت به کلید قبلی با Shift+Tab یا کلید جهت‌نمای چپ. فشردن Space یا Enter برای انتخاب یک عنصر در ویرایشگر.\"}]},\n{name:\"فرمان‌ها\",items:[{name:\"بازگشت به آخرین فرمان\",legend:\"فشردن ${undo}\"},{name:\"انجام مجدد فرمان\",legend:\"فشردن ${redo}\"},{name:\"فرمان درشت کردن متن\",legend:\"فشردن ${bold}\"},{name:\"فرمان کج کردن متن\",legend:\"فشردن ${italic}\"},{name:\"فرمان زیرخطدار کردن متن\",legend:\"فشردن ${underline}\"},{name:\"فرمان پیوند دادن\",legend:\"فشردن ${link}\"},{name:\"بستن نوار ابزار فرمان\",legend:\"فشردن ${toolbarCollapse}\"},{name:\"دسترسی به فرمان محل تمرکز قبلی\",legend:\"فشردن ${accessPreviousSpace} برای دسترسی به نزدیک‌ترین فضای قابل دسترسی تمرکز قبل از هشتک، برای مثال: دو عنصر مجاور HR -خط افقی-. تکرار کلید ترکیبی برای رسیدن به فضاهای تمرکز از راه دور.\"},\n{name:\"دسترسی به فضای دستور بعدی\",legend:\"برای دسترسی به نزدیک‌ترین فضای تمرکز غیر قابل دسترس، ${accessNextSpace} را پس از علامت هشتک بفشارید، برای مثال:  دو عنصر مجاور HR -خط افقی-. کلید ترکیبی را برای رسیدن به فضای تمرکز تکرار کنید.\"},{name:\"راهنمای دسترسی\",legend:\"فشردن ${a11yHelp}\"}]}],backspace:\"عقبگرد\",tab:\"برگه\",enter:\"ورود\",shift:\"تعویض\",ctrl:\"کنترل\",alt:\"دگرساز\",pause:\"توقف\",capslock:\"Caps Lock\",escape:\"گریز\",pageUp:\"صفحه به بالا\",pageDown:\"صفحه به پایین\",end:\"پایان\",home:\"خانه\",leftArrow:\"پیکان چپ\",\nupArrow:\"پیکان بالا\",rightArrow:\"پیکان راست\",downArrow:\"پیکان پایین\",insert:\"ورود\",\"delete\":\"حذف\",leftWindowKey:\"کلید چپ ویندوز\",rightWindowKey:\"کلید راست ویندوز\",selectKey:\"انتخاب کلید\",numpad0:\"کلید شماره 0\",numpad1:\"کلید شماره 1\",numpad2:\"کلید شماره 2\",numpad3:\"کلید شماره 3\",numpad4:\"کلید شماره 4\",numpad5:\"کلید شماره 5\",numpad6:\"کلید شماره 6\",numpad7:\"کلید شماره 7\",numpad8:\"کلید شماره 8\",numpad9:\"کلید شماره 9\",multiply:\"ضرب\",add:\"افزودن\",subtract:\"تفریق\",decimalPoint:\"نقطه‌ی اعشار\",divide:\"جدا کردن\",\nf1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"علامت تساوی\",comma:\"کاما\",dash:\"خط تیره\",period:\"دوره\",forwardSlash:\"Forward Slash\",graveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"fi\",{title:\"Saavutettavuus ohjeet\",contents:\"Ohjeen sisällöt. Sulkeaksesi tämän dialogin paina ESC.\",legend:[{name:\"Yleinen\",items:[{name:\"Editorin työkalupalkki\",legend:\"Paina ${toolbarFocus} siirtyäksesi työkalupalkkiin. Siirry seuraavaan ja edelliseen työkalupalkin ryhmään TAB ja SHIFT+TAB näppäimillä. Siirry seuraavaan ja edelliseen työkalupainikkeeseen käyttämällä NUOLI OIKEALLE tai NUOLI VASEMMALLE näppäimillä. Paina VÄLILYÖNTI tai ENTER näppäintä aktivoidaksesi työkalupainikkeen.\"},\n{name:\"Editorin dialogi\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Editorin oheisvalikko\",legend:\"Paina ${contextMenu} tai SOVELLUSPAINIKETTA avataksesi oheisvalikon. Liiku seuraavaan valikon vaihtoehtoon TAB tai NUOLI ALAS näppäimillä. Siirry edelliseen vaihtoehtoon SHIFT+TAB tai NUOLI YLÖS näppäimillä. Paina VÄLILYÖNTI tai ENTER valitaksesi valikon kohdan. Avataksesi nykyisen kohdan alivalikon paina VÄLILYÖNTI tai ENTER tai NUOLI OIKEALLE painiketta. Siirtyäksesi takaisin valikon ylemmälle tasolle paina ESC tai NUOLI vasemmalle. Oheisvalikko suljetaan ESC painikkeella.\"},\n{name:\"Editorin listalaatikko\",legend:\"Listalaatikon sisällä siirry seuraavaan listan kohtaan TAB tai NUOLI ALAS painikkeilla. Siirry edelliseen listan kohtaan SHIFT+TAB tai NUOLI YLÖS painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi listan vaihtoehdon. Paina ESC sulkeaksesi listalaatikon.\"},{name:\"Editorin elementtipolun palkki\",legend:\"Paina ${elementsPathFocus} siirtyäksesi elementtipolun palkkiin. Siirry seuraavaan elementtipainikkeeseen TAB tai NUOLI OIKEALLE painikkeilla. Siirry aiempaan painikkeeseen SHIFT+TAB tai NUOLI VASEMMALLE painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi elementin editorissa.\"}]},\n{name:\"Komennot\",items:[{name:\"Peruuta komento\",legend:\"Paina ${undo}\"},{name:\"Tee uudelleen komento\",legend:\"Paina ${redo}\"},{name:\"Lihavoi komento\",legend:\"Paina ${bold}\"},{name:\"Kursivoi komento\",legend:\"Paina ${italic}\"},{name:\"Alleviivaa komento\",legend:\"Paina ${underline}\"},{name:\"Linkki komento\",legend:\"Paina ${link}\"},{name:\"Pienennä työkalupalkki komento\",legend:\"Paina ${toolbarCollapse}\"},{name:\"Siirry aiempaan fokustilaan komento\",legend:\"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin edellä olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin.\"},\n{name:\"Siirry seuraavaan fokustilaan komento\",legend:\"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin jälkeen olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin.\"},{name:\"Saavutettavuus ohjeet\",legend:\"Paina ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",\nend:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numeronäppäimistö 0\",numpad1:\"Numeronäppäimistö 1\",numpad2:\"Numeronäppäimistö 2\",numpad3:\"Numeronäppäimistö 3\",numpad4:\"Numeronäppäimistö 4\",numpad5:\"Numeronäppäimistö 5\",numpad6:\"Numeronäppäimistö 6\",numpad7:\"Numeronäppäimistö 7\",numpad8:\"Numeronäppäimistö 8\",\nnumpad9:\"Numeronäppäimistö 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Puolipiste\",equalSign:\"Equal Sign\",comma:\"Pilkku\",dash:\"Dash\",period:\"Piste\",forwardSlash:\"Forward Slash\",graveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"fo\",{title:\"Accessibility Instructions\",contents:\"Help Contents. To close this dialog press ESC.\",legend:[{name:\"General\",items:[{name:\"Editor Toolbar\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Editor Dialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Commands\",items:[{name:\" Undo command\",legend:\"Press ${undo}\"},{name:\" Redo command\",legend:\"Press ${redo}\"},{name:\" Bold command\",legend:\"Press ${bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",\nlegend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Falda\",add:\"Pluss\",subtract:\"Frádráttar\",decimalPoint:\"Decimal Point\",divide:\"Býta\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semikolon\",equalSign:\"Javnatekn\",comma:\"Komma\",dash:\"Dash\",period:\"Punktum\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"fr-ca\",{title:\"Instructions d'accessibilité\",contents:\"Contenu de l'aide.  Pour fermer cette fenêtre, appuyez sur ESC.\",legend:[{name:\"Général\",items:[{name:\"Barre d'outil de l'éditeur\",legend:\"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT+TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils.\"},\n{name:\"Dialogue de l'éditeur\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Menu contextuel de l'éditeur\",legend:\"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches ESC ou FLECHE GAUCHE. Fermer le menu contextuel avec ESC.\"},\n{name:\"Menu déroulant de l'éditeur\",legend:\"A l'intérieur d'une liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches SHIFT+TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant.\"},{name:\"Barre d'emplacement des éléments de l'éditeur\",legend:\"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de léditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches SHIFT+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur.\"}]},\n{name:\"Commandes\",items:[{name:\"Annuler\",legend:\"Appuyer sur ${undo}\"},{name:\"Refaire\",legend:\"Appuyer sur ${redo}\"},{name:\"Gras\",legend:\"Appuyer sur ${bold}\"},{name:\"Italique\",legend:\"Appuyer sur ${italic}\"},{name:\"Souligné\",legend:\"Appuyer sur ${underline}\"},{name:\"Lien\",legend:\"Appuyer sur ${link}\"},{name:\"Enrouler la barre d'outils\",legend:\"Appuyer sur ${toolbarCollapse}\"},{name:\"Accéder à l'objet de focus précédent\",legend:\"Appuyer ${accessPreviousSpace} pour accéder au prochain espace disponible avant le curseur, par exemple: deux éléments HR adjacents.  Répéter la combinaison pour joindre les éléments d'espaces distantes.\"},\n{name:\"Accéder au prochain objet de focus\",legend:\"Appuyer ${accessNextSpace} pour accéder au prochain espace disponible après le curseur, par exemple: deux éléments HR adjacents.  Répéter la combinaison pour joindre les éléments d'espaces distantes.\"},{name:\"Aide d'accessibilité\",legend:\"Appuyer sur ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",\nleftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",numpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",\nf2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",graveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"fr\",{title:\"Instructions d'accessibilité\",contents:\"Contenu de l'aide. Pour fermer ce dialogue, appuyez sur la touche ÉCHAP (Echappement).\",legend:[{name:\"Général\",items:[{name:\"Barre d'outils de l'éditeur\",legend:\"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches MAJ et MAJ+TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLÈCHE DROITE et FLÈCHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRÉE pour activer le bouton de barre d'outils.\"},\n{name:\"Dialogue de l'éditeur\",legend:\"Dans un dialogue, appuyer sur TAB pour aller à l'élément suivant du dialogue, appuyer sur MAJ+TAB pour aller à l'élément précédent du dialogue, appuyer sur ECHAP pour annuler le dialogue. Quand un dialogue a de multiples onglets, on peut accéder à la liste des onglets avec ALT+F10 ou avec TAB. Dans la liste des onglets, se déplacer vers le suivant ou le précédent avec les FLECHES DROITE et GAUCHE respectivement.\"},{name:\"Menu contextuel de l'éditeur\",legend:\"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLÈCHE BAS. Se déplacer vers l'option précédente avec les touches  MAJ+TAB ou FLÈCHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTRÉE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTRÉE ou FLÈCHE DROITE. Revenir à l'élément de menu parent avec les touches ÉCHAP ou FLÈCHE GAUCHE. Fermer le menu contextuel avec ÉCHAP.\"},\n{name:\"Zone de liste de l'éditeur\",legend:\"Dans la liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLÈCHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches MAJ+TAB ou FLÈCHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTRÉE pour sélectionner l'option dans la liste. Appuyer sur ÉCHAP pour fermer le menu déroulant.\"},{name:\"Barre d'emplacement des éléments de l'éditeur\",legend:\"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de l'éditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLÈCHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches MAJ+TAB ou FLÈCHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTRÉE pour sélectionner l'élément dans l'éditeur.\"}]},\n{name:\"Commandes\",items:[{name:\" Annuler la commande\",legend:\"Appuyer sur ${undo}\"},{name:\"Refaire la commande\",legend:\"Appuyer sur ${redo}\"},{name:\" Commande gras\",legend:\"Appuyer sur ${bold}\"},{name:\" Commande italique\",legend:\"Appuyer sur ${italic}\"},{name:\" Commande souligné\",legend:\"Appuyer sur ${underline}\"},{name:\" Commande lien\",legend:\"Appuyer sur ${link}\"},{name:\" Commande enrouler la barre d'outils\",legend:\"Appuyer sur ${toolbarCollapse}\"},{name:\"Accéder à la précédente commande d'espace de mise au point\",\nlegend:\"Appuyez sur ${accessPreviousSpace} pour accéder à l'espace hors d'atteinte le plus proche avant le caret, par exemple: deux éléments HR adjacents. Répétez la combinaison de touches pour atteindre les espaces de mise au point distants.\"},{name:\"Accès à la prochaine commande de l'espace de mise au point\",legend:\"Appuyez sur ${accessNextSpace} pour accéder au plus proche espace de mise au point hors d'atteinte après le caret, par exemple: deux éléments HR adjacents. répétez la combinaison de touches pour atteindre les espace de mise au point distants.\"},\n{name:\" Aide Accessibilité\",legend:\"Appuyer sur ${a11yHelp}\"}]}],backspace:\"Retour arrière\",tab:\"Tabulation\",enter:\"Entrée\",shift:\"Majuscule\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Verr. Maj.\",escape:\"Échap\",pageUp:\"Page supérieure\",pageDown:\"Page inférieure\",end:\"Fin\",home:\"Retour\",leftArrow:\"Flèche gauche\",upArrow:\"Flèche haute\",rightArrow:\"Flèche droite\",downArrow:\"Flèche basse\",insert:\"Insertion\",\"delete\":\"Supprimer\",leftWindowKey:\"Touche Windows gauche\",rightWindowKey:\"Touche Windows droite\",\nselectKey:\"Touche menu\",numpad0:\"Pavé numérique 0\",numpad1:\"Pavé numérique 1\",numpad2:\"Pavé numérique 2\",numpad3:\"Pavé numérique 3\",numpad4:\"Pavé numérique 4\",numpad5:\"Pavé numérique 5\",numpad6:\"Pavé numérique 6\",numpad7:\"Pavé numérique 7\",numpad8:\"Pavé numérique 8\",numpad9:\"Pavé numérique 9\",multiply:\"Multiplier\",add:\"Addition\",subtract:\"Soustraire\",decimalPoint:\"Point décimal\",divide:\"Diviser\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",\nnumLock:\"Verrouillage numérique\",scrollLock:\"Arrêt défilement\",semiColon:\"Point virgule\",equalSign:\"Signe égal\",comma:\"Virgule\",dash:\"Tiret\",period:\"Point\",forwardSlash:\"Barre oblique\",graveAccent:\"Accent grave\",openBracket:\"Parenthèse ouvrante\",backSlash:\"Barre oblique inverse\",closeBracket:\"Parenthèse fermante\",singleQuote:\"Apostrophe\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"gl\",{title:\"Instrucións de accesibilidade\",contents:\"Axuda. Para pechar este diálogo prema ESC.\",legend:[{name:\"Xeral\",items:[{name:\"Barra de ferramentas do editor\",legend:\"Prema ${toolbarFocus} para navegar pola barra de ferramentas. Para moverse polos distintos grupos de ferramentas use as teclas TAB e MAIÚS+TAB. Para moverse polas distintas ferramentas use FRECHA DEREITA ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para activar o botón da barra de ferramentas.\"},\n{name:\"Editor de diálogo\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Editor do menú contextual\",legend:\"Prema ${contextMenu} ou a TECLA MENÚ para abrir o menú contextual. A seguir móvase á seguinte opción do menú con TAB ou FRECHA ABAIXO. Móvase á opción anterior con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para seleccionar a opción do menú. Abra o submenú da opción actual con ESPAZO ou INTRO ou FRECHA DEREITA. Regrese ao elemento principal do menú con ESC ou FRECHA ESQUERDA. Peche o menú contextual con ESC.\"},\n{name:\"Lista do editor\",legend:\"Dentro dunha lista, móvase ao seguinte elemento da lista con TAB ou FRECHA ABAIXO. Móvase ao elemento anterior da lista con MAIÚS+TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para escoller a opción da lista. Prema ESC para pechar a lista.\"},{name:\"Barra da ruta ao elemento no editor\",legend:\"Prema ${elementsPathFocus} para navegar ata os elementos da barra de ruta. Móvase ao seguinte elemento botón con TAB ou FRECHA DEREITA. Móvase ao botón anterior con MAIÚS+TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar o elemento no editor.\"}]},\n{name:\"Ordes\",items:[{name:\"Orde «desfacer»\",legend:\"Prema ${undo}\"},{name:\"Orde «refacer»\",legend:\"Prema ${redo}\"},{name:\"Orde «negra»\",legend:\"Prema ${bold}\"},{name:\"Orde «cursiva»\",legend:\"Prema ${italic}\"},{name:\"Orde «subliñar»\",legend:\"Prema ${underline}\"},{name:\"Orde «ligazón»\",legend:\"Prema ${link}\"},{name:\"Orde «contraer a barra de ferramentas»\",legend:\"Prema ${toolbarCollapse}\"},{name:\"Orde «acceder ao anterior espazo en foco»\",legend:\"Prema ${accessPreviousSpace} para acceder ao espazo máis próximo de foco inalcanzábel anterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes.\"},\n{name:\"Orde «acceder ao seguinte espazo en foco»\",legend:\"Prema ${accessNextSpace} para acceder ao espazo máis próximo de foco inalcanzábel posterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes.\"},{name:\"Axuda da accesibilidade\",legend:\"Prema ${a11yHelp}\"}]}],backspace:\"Ir atrás\",tab:\"Tabulador\",enter:\"Intro\",shift:\"Maiús\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pausa\",capslock:\"Bloq. Maiús\",escape:\"Escape\",pageUp:\"Páxina arriba\",\npageDown:\"Páxina abaixo\",end:\"Fin\",home:\"Inicio\",leftArrow:\"Frecha esquerda\",upArrow:\"Frecha arriba\",rightArrow:\"Frecha dereita\",downArrow:\"Frecha abaixo\",insert:\"Inserir\",\"delete\":\"Supr\",leftWindowKey:\"Tecla Windows esquerda\",rightWindowKey:\"Tecla Windows dereita\",selectKey:\"Escolla a tecla\",numpad0:\"Tec. numérico 0\",numpad1:\"Tec. numérico 1\",numpad2:\"Tec. numérico 2\",numpad3:\"Tec. numérico 3\",numpad4:\"Tec. numérico 4\",numpad5:\"Tec. numérico 5\",numpad6:\"Tec. numérico 6\",numpad7:\"Tec. numérico 7\",\nnumpad8:\"Tec. numérico 8\",numpad9:\"Tec. numérico 9\",multiply:\"Multiplicar\",add:\"Sumar\",subtract:\"Restar\",decimalPoint:\"Punto decimal\",divide:\"Dividir\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Bloq. num.\",scrollLock:\"Bloq. despraz.\",semiColon:\"Punto e coma\",equalSign:\"Signo igual\",comma:\"Coma\",dash:\"Guión\",period:\"Punto\",forwardSlash:\"Barra inclinada\",graveAccent:\"Acento grave\",openBracket:\"Abrir corchete\",backSlash:\"Barra invertida\",\ncloseBracket:\"Pechar corchete\",singleQuote:\"Comiña simple\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"gu\",{title:\"એક્ક્ષેબિલિટી ની વિગતો\",contents:\"હેલ્પ. આ બંધ કરવા ESC દબાવો.\",legend:[{name:\"જનરલ\",items:[{name:\"એડિટર ટૂલબાર\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"એડિટર ડાયલોગ\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"કમાંડસ\",items:[{name:\"અન્ડું કમાંડ\",legend:\"$ દબાવો {undo}\"},{name:\"ફરી કરો કમાંડ\",legend:\"$ દબાવો {redo}\"},{name:\"બોલ્દનો કમાંડ\",legend:\"$ દબાવો {bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",\nlegend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/he.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"he\",{title:\"הוראות נגישות\",contents:\"הוראות נגישות. לסגירה לחץ אסקייפ (ESC).\",legend:[{name:\"כללי\",items:[{name:\"סרגל הכלים\",legend:\"לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר.\"},{name:\"דיאלוגים (חלונות תשאול)\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"תפריט ההקשר (Context Menu)\",legend:\"לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. סגור את תפריט ההקשר עם אסקייפ (ESC).\"},{name:\"תפריטים צפים (List boxes)\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"עץ אלמנטים (Elements Path)\",legend:\"לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. עבור לפריט הבא עם טאב (TAB) או חץ ימני. עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך.\"}]},{name:\"פקודות\",items:[{name:\" ביטול צעד אחרון\",legend:\"לחץ ${undo}\"},{name:\" חזרה על צעד אחרון\",legend:\"לחץ ${redo}\"},{name:\" הדגשה\",legend:\"לחץ ${bold}\"},{name:\" הטייה\",legend:\"לחץ ${italic}\"},{name:\" הוספת קו תחתון\",legend:\"לחץ ${underline}\"},{name:\" הוספת לינק\",\nlegend:\"לחץ ${link}\"},{name:\" כיווץ סרגל הכלים\",legend:\"לחץ ${toolbarCollapse}\"},{name:\"גישה למיקום המיקוד הקודם\",legend:\"לחץ ${accessPreviousSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב לפני הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר.\"},{name:\"גישה למיקום המיקוד הבא\",legend:\"לחץ ${accessNextSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב אחרי הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר.\"},\n{name:\" הוראות נגישות\",legend:\"לחץ ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"חץ שמאלה\",upArrow:\"חץ למעלה\",rightArrow:\"חץ ימינה\",downArrow:\"חץ למטה\",insert:\"הכנס\",\"delete\":\"מחק\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"בחר מקש\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",numpad2:\"Numpad 2\",\nnumpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"הוסף\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"סלאש\",graveAccent:\"Grave Accent\",\nopenBracket:\"Open Bracket\",backSlash:\"סלאש הפוך\",closeBracket:\"Close Bracket\",singleQuote:\"ציטוט יחיד\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"hi\",{title:\"Accessibility Instructions\",contents:\"Help Contents. To close this dialog press ESC.\",legend:[{name:\"सामान्य\",items:[{name:\"Editor Toolbar\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Editor Dialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Commands\",items:[{name:\" Undo command\",legend:\"Press ${undo}\"},{name:\" Redo command\",legend:\"Press ${redo}\"},{name:\" Bold command\",legend:\"Press ${bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",\nlegend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"hr\",{title:\"Upute dostupnosti\",contents:\"Sadržaj pomoći. Za zatvaranje pritisnite ESC.\",legend:[{name:\"Općenito\",items:[{name:\"Alatna traka\",legend:\"Pritisni ${toolbarFocus} za navigaciju do alatne trake. Pomicanje do prethodne ili sljedeće alatne grupe vrši se pomoću SHIFT+TAB i TAB. Pomicanje do prethodnog ili sljedećeg gumba u alatnoj traci vrši se pomoću lijeve i desne strelice kursora. Pritisnite SPACE ili ENTER za aktivaciju alatne trake.\"},{name:\"Dijalog\",\nlegend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Kontekstni izbornik\",legend:\"Pritisnite ${contextMenu} ili APPLICATION tipku za otvaranje kontekstnog izbornika. Pomicanje se vrši TAB ili strelicom kursora prema dolje ili SHIFT+TAB ili strelica kursora prema gore. SPACE ili ENTER odabiru opciju izbornika. Otvorite podizbornik trenutne opcije sa  SPACE, ENTER ili desna strelica kursora. Povratak na prethodni izbornik vrši se sa ESC ili lijevom strelicom kursora. Zatvaranje se vrši pritiskom na tipku ESC.\"},\n{name:\"Lista\",legend:\"Unutar list-boxa, pomicanje na sljedeću stavku vrši se sa TAB ili strelica kursora prema dolje. Na prethodnu sa SHIFT+TAB ili strelica prema gore. Pritiskom na SPACE ili ENTER odabire se stavka ili ESC za zatvaranje.\"},{name:\"Traka putanje elemenata\",legend:\"Pritisnite ${elementsPathFocus} za navigaciju po putanji elemenata. Pritisnite TAB ili desnu strelicu kursora za pomicanje na sljedeći element ili SHIFT+TAB ili lijeva strelica kursora za pomicanje na prethodni element. Pritiskom na SPACE ili ENTER vrši se odabir elementa.\"}]},\n{name:\"Naredbe\",items:[{name:\"Vrati naredbu\",legend:\"Pritisni ${undo}\"},{name:\"Ponovi naredbu\",legend:\"Pritisni ${redo}\"},{name:\"Bold naredba\",legend:\"Pritisni ${bold}\"},{name:\"Italic naredba\",legend:\"Pritisni ${italic}\"},{name:\"Underline naredba\",legend:\"Pritisni ${underline}\"},{name:\"Link naredba\",legend:\"Pritisni ${link}\"},{name:\"Smanji alatnu traku naredba\",legend:\"Pritisni ${toolbarCollapse}\"},{name:\"Access previous focus space naredba\",legend:\"Pritisni ${accessPreviousSpace} za pristup najbližem nedostupnom razmaku prije kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak.\"},\n{name:\"Access next focus space naredba\",legend:\"Pritisni ${accessNextSpace} za pristup najbližem nedostupnom razmaku nakon kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak.\"},{name:\"Pomoć za dostupnost\",legend:\"Pritisni ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",\nupArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",numpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",\nf4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",graveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"hu\",{title:\"Kisegítő utasítások\",contents:\"Súgó tartalmak. A párbeszédablak bezárásához nyomjon ESC-et.\",legend:[{name:\"Általános\",items:[{name:\"Szerkesztő Eszköztár\",legend:\"Nyomjon ${toolbarFocus} hogy kijelölje az eszköztárat. A következő és előző eszköztár csoporthoz a TAB és SHIFT+TAB-al juthat el. A következő és előző eszköztár gombhoz a BAL NYÍL vagy JOBB NYÍL gombbal juthat el. Nyomjon SPACE-t vagy ENTER-t hogy aktiválja az eszköztár gombot.\"},{name:\"Szerkesző párbeszéd ablak\",\nlegend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Szerkesztő helyi menü\",legend:\"Nyomjon ${contextMenu}-t vagy ALKALMAZÁS BILLENTYŰT a helyi menü megnyitásához. Ezután a következő menüpontra léphet a TAB vagy LEFELÉ NYÍLLAL. Az előző opciót a SHIFT+TAB vagy FELFELÉ NYÍLLAL érheti el. Nyomjon SPACE-t vagy ENTER-t a menüpont kiválasztásához. A jelenlegi menüpont almenüjének megnyitásához nyomjon SPACE-t vagy ENTER-t, vagy JOBB NYILAT. A főmenühöz való visszatéréshez nyomjon ESC-et vagy BAL NYILAT. A helyi menü bezárása az ESC billentyűvel lehetséges.\"},\n{name:\"Szerkesztő lista\",legend:\"A listán belül a következő elemre a TAB vagy LEFELÉ NYÍLLAL mozoghat. Az előző elem kiválasztásához nyomjon SHIFT+TAB-ot vagy FELFELÉ NYILAT. Nyomjon SPACE-t vagy ENTER-t az elem kiválasztásához. Az ESC billentyű megnyomásával bezárhatja a listát.\"},{name:\"Szerkesztő elem utak sáv\",legend:\"Nyomj ${elementsPathFocus} hogy kijelöld a elemek út sávját. A következő elem gombhoz a TAB-al vagy a JOBB NYÍLLAL juthatsz el. Az előző gombhoz a SHIFT+TAB vagy BAL NYÍLLAL mehetsz. A SPACE vagy ENTER billentyűvel kiválaszthatod az elemet a szerkesztőben.\"}]},\n{name:\"Parancsok\",items:[{name:\"Parancs visszavonása\",legend:\"Nyomj ${undo}\"},{name:\"Parancs megismétlése\",legend:\"Nyomjon ${redo}\"},{name:\"Félkövér parancs\",legend:\"Nyomjon ${bold}\"},{name:\"Dőlt parancs\",legend:\"Nyomjon ${italic}\"},{name:\"Aláhúzott parancs\",legend:\"Nyomjon ${underline}\"},{name:\"Link parancs\",legend:\"Nyomjon ${link}\"},{name:\"Szerkesztősáv összecsukása parancs\",legend:\"Nyomjon ${toolbarCollapse}\"},{name:\"Hozzáférés az előző fókusz helyhez parancs\",legend:\"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel előtt, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket.\"},\n{name:\"Hozzáférés a következő fókusz helyhez parancs\",legend:\"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel után, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket.\"},{name:\"Kisegítő súgó\",legend:\"Nyomjon ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",\nend:\"End\",home:\"Home\",leftArrow:\"balra nyíl\",upArrow:\"felfelé nyíl\",rightArrow:\"jobbra nyíl\",downArrow:\"lefelé nyíl\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"bal Windows-billentyű\",rightWindowKey:\"jobb Windows-billentyű\",selectKey:\"Billentyű választása\",numpad0:\"Számbillentyűk 0\",numpad1:\"Számbillentyűk 1\",numpad2:\"Számbillentyűk 2\",numpad3:\"Számbillentyűk 3\",numpad4:\"Számbillentyűk 4\",numpad5:\"Számbillentyűk 5\",numpad6:\"Számbillentyűk 6\",numpad7:\"Számbillentyűk 7\",numpad8:\"Számbillentyűk 8\",\nnumpad9:\"Számbillentyűk 9\",multiply:\"Szorzás\",add:\"Hozzáadás\",subtract:\"Kivonás\",decimalPoint:\"Tizedespont\",divide:\"Osztás\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Pontosvessző\",equalSign:\"Egyenlőségjel\",comma:\"Vessző\",dash:\"Kötőjel\",period:\"Pont\",forwardSlash:\"Perjel\",graveAccent:\"Visszafelé dőlő ékezet\",openBracket:\"Nyitó szögletes zárójel\",backSlash:\"fordított perjel\",closeBracket:\"Záró szögletes zárójel\",\nsingleQuote:\"szimpla idézőjel\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/id.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"id\",{title:\"Accessibility Instructions\",contents:\"Bantuan. Tekan ESC untuk menutup dialog ini.\",legend:[{name:\"Umum\",items:[{name:\"Editor Toolbar\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Editor Dialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Commands\",items:[{name:\" Undo command\",legend:\"Press ${undo}\"},{name:\" Redo command\",legend:\"Press ${redo}\"},{name:\" Bold command\",legend:\"Press ${bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",\nlegend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/it.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"it\",{title:\"Istruzioni di Accessibilità\",contents:\"Contenuti di Aiuto. Per chiudere questa finestra premi ESC.\",legend:[{name:\"Generale\",items:[{name:\"Barra degli strumenti Editor\",legend:\"Premere ${toolbarFocus} per passare alla barra degli strumenti. Usare TAB per spostarsi al gruppo successivo, MAIUSC+TAB per spostarsi a quello precedente. Usare FRECCIA DESTRA per spostarsi al pulsante successivo, FRECCIA SINISTRA per spostarsi a quello precedente. Premere SPAZIO o INVIO per attivare il pulsante della barra degli strumenti.\"},\n{name:\"Finestra Editor\",legend:\"All'interno di una finestra di dialogo è possibile premere TAB per passare all'elemento successivo della finestra, MAIUSC+TAB per passare a quello precedente; premere INVIO per inviare i dati della finestra, oppure ESC per annullare l'operazione. Quando una finestra di dialogo ha più schede, è possibile passare all'elenco delle schede sia con ALT+F10 che con TAB, in base all'ordine delle tabulazioni della finestra. Quando l'elenco delle schede è attivo, premere la FRECCIA DESTRA o la FRECCIA SINISTRA per passare rispettivamente alla scheda successiva o a quella precedente.\"},\n{name:\"Menù contestuale Editor\",legend:\"Premi ${contextMenu} o TASTO APPLICAZIONE per aprire il menu contestuale. Dunque muoviti all'opzione successiva del menu con il tasto TAB o con la Freccia Sotto. Muoviti all'opzione precedente con  MAIUSC+TAB o con Freccia Sopra. Premi SPAZIO o INVIO per scegliere l'opzione di menu. Apri il sottomenu dell'opzione corrente con SPAZIO o INVIO oppure con la Freccia Destra. Torna indietro al menu superiore con ESC oppure Freccia Sinistra. Chiudi il menu contestuale con ESC.\"},\n{name:\"Box Lista Editor\",legend:\"All'interno di un elenco di opzioni, per spostarsi all'elemento successivo premere TAB oppure FRECCIA GIÙ. Per spostarsi all'elemento precedente usare SHIFT+TAB oppure FRECCIA SU. Premere SPAZIO o INVIO per selezionare l'elemento della lista. Premere ESC per chiudere l'elenco di opzioni.\"},{name:\"Barra percorso elementi editor\",legend:\"Premere ${elementsPathFocus} per passare agli elementi della barra del percorso. Usare TAB o FRECCIA DESTRA per passare al pulsante successivo. Per passare al pulsante precedente premere MAIUSC+TAB o FRECCIA SINISTRA. Premere SPAZIO o INVIO per selezionare l'elemento nell'editor.\"}]},\n{name:\"Comandi\",items:[{name:\" Annulla comando\",legend:\"Premi ${undo}\"},{name:\" Ripeti comando\",legend:\"Premi ${redo}\"},{name:\" Comando Grassetto\",legend:\"Premi ${bold}\"},{name:\" Comando Corsivo\",legend:\"Premi ${italic}\"},{name:\" Comando Sottolineato\",legend:\"Premi ${underline}\"},{name:\" Comando Link\",legend:\"Premi ${link}\"},{name:\" Comando riduci barra degli strumenti\",legend:\"Premi ${toolbarCollapse}\"},{name:\"Comando di accesso al precedente spazio di focus\",legend:\"Premi ${accessPreviousSpace} per accedere il più vicino spazio di focus non raggiungibile prima del simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti.\"},\n{name:\"Comando di accesso al prossimo spazio di focus\",legend:\"Premi ${accessNextSpace} per accedere il più vicino spazio di focus non raggiungibile dopo il simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti.\"},{name:\" Aiuto Accessibilità\",legend:\"Premi ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Invio\",shift:\"Maiusc\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pausa\",capslock:\"Bloc Maiusc\",escape:\"Esc\",pageUp:\"Pagina sù\",pageDown:\"Pagina giù\",\nend:\"Fine\",home:\"Inizio\",leftArrow:\"Freccia sinistra\",upArrow:\"Freccia su\",rightArrow:\"Freccia destra\",downArrow:\"Freccia giù\",insert:\"Ins\",\"delete\":\"Canc\",leftWindowKey:\"Tasto di Windows sinistro\",rightWindowKey:\"Tasto di Windows destro\",selectKey:\"Tasto di selezione\",numpad0:\"0 sul tastierino numerico\",numpad1:\"1 sul tastierino numerico\",numpad2:\"2 sul tastierino numerico\",numpad3:\"3 sul tastierino numerico\",numpad4:\"4 sul tastierino numerico\",numpad5:\"5 sul tastierino numerico\",numpad6:\"6 sul tastierino numerico\",\nnumpad7:\"7 sul tastierino numerico\",numpad8:\"8 sul tastierino numerico\",numpad9:\"9 sul tastierino numerico\",multiply:\"Moltiplicazione\",add:\"Più\",subtract:\"Sottrazione\",decimalPoint:\"Punto decimale\",divide:\"Divisione\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Bloc Num\",scrollLock:\"Bloc Scorr\",semiColon:\"Punto-e-virgola\",equalSign:\"Segno di uguale\",comma:\"Virgola\",dash:\"Trattino\",period:\"Punto\",forwardSlash:\"Barra\",graveAccent:\"Accento grave\",\nopenBracket:\"Parentesi quadra aperta\",backSlash:\"Barra rovesciata\",closeBracket:\"Parentesi quadra chiusa\",singleQuote:\"Apostrofo\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"ja\",{title:\"ユーザー補助の説明\",contents:\"ヘルプ　このダイアログを閉じるには ESCを押してください。\",legend:[{name:\"全般\",items:[{name:\"エディターツールバー\",legend:\"${toolbarFocus} を押すとツールバーのオン/オフ操作ができます。カーソルをツールバーのグループで移動させるにはTabかSHIFT+Tabを押します。グループ内でカーソルを移動させるには、右カーソルか左カーソルを押します。スペースキーやエンターを押すとボタンを有効/無効にすることができます。\"},{name:\"編集ダイアログ\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"エディターのメニュー\",legend:\"${contextMenu} キーかAPPLICATION KEYを押すとコンテキストメニューが開きます。Tabか下カーソルでメニューのオプション選択が下に移動します。戻るには、SHIFT+Tabか上カーソルです。スペースもしくはENTERキーでメニューオプションを決定できます。現在選んでいるオプションのサブメニューを開くには、スペース、もしくは右カーソルを押します。サブメニューから親メニューに戻るには、ESCか左カーソルを押してください。ESCでコンテキストメニュー自体をキャンセルできます。\"},{name:\"エディターリストボックス\",legend:\"リストボックス内で移動するには、Tabか下カーソルで次のアイテムへ移動します。SHIFT+Tabで前のアイテムに戻ります。リストのオプションを選択するには、スペースもしくは、ENTERを押してください。リストボックスを閉じるには、ESCを押してください。\"},{name:\"エディター要素パスバー\",legend:\"${elementsPathFocus} を押すとエレメントパスバーを操作出来ます。Tabか右カーソルで次のエレメントを選択できます。前のエレメントを選択するには、SHIFT+Tabか左カーソルです。スペースもしくは、ENTERでエディタ内の対象エレメントを選択出来ます。\"}]},\n{name:\"コマンド\",items:[{name:\"元に戻す\",legend:\"${undo} をクリック\"},{name:\"やり直し\",legend:\"${redo} をクリック\"},{name:\"太字\",legend:\"${bold} をクリック\"},{name:\"斜体 \",legend:\"${italic} をクリック\"},{name:\"下線\",legend:\"${underline} をクリック\"},{name:\"リンク\",legend:\"${link} をクリック\"},{name:\"ツールバーを縮める\",legend:\"${toolbarCollapse} をクリック\"},{name:\"前のカーソル移動のできないポイントへ\",legend:\"${accessPreviousSpace} を押すとカーソルより前にあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。\"},{name:\"次のカーソル移動のできないポイントへ\",legend:\"${accessNextSpace} を押すとカーソルより後ろにあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。\"},\n{name:\"ユーザー補助ヘルプ\",legend:\"${a11yHelp} をクリック\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"左矢印\",upArrow:\"上矢印\",rightArrow:\"右矢印\",downArrow:\"下矢印\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"左Windowキー\",rightWindowKey:\"右のWindowキー\",selectKey:\"Select\",numpad0:\"Num 0\",numpad1:\"Num 1\",numpad2:\"Num 2\",numpad3:\"Num 3\",numpad4:\"Num 4\",numpad5:\"Num 5\",\nnumpad6:\"Num 6\",numpad7:\"Num 7\",numpad8:\"Num 8\",numpad9:\"Num 9\",multiply:\"掛ける\",add:\"足す\",subtract:\"引く\",decimalPoint:\"小数点\",divide:\"割る\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"セミコロン\",equalSign:\"イコール記号\",comma:\"カンマ\",dash:\"ダッシュ\",period:\"ピリオド\",forwardSlash:\"フォワードスラッシュ\",graveAccent:\"グレイヴアクセント\",openBracket:\"開きカッコ\",backSlash:\"バックスラッシュ\",closeBracket:\"閉じカッコ\",singleQuote:\"シングルクォート\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/km.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"km\",{title:\"Accessibility Instructions\",contents:\"មាតិកា​ជំនួយ។ ដើម្បី​បិទ​ផ្ទាំង​នេះ សូម​ចុច ESC ។\",legend:[{name:\"ទូទៅ\",items:[{name:\"របារ​ឧបករណ៍​កម្មវិធី​និពន្ធ\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"ផ្ទាំង​កម្មវិធីនិពន្ធ\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"ម៉ីនុយបរិបទអ្នកកែសម្រួល\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"ប្រអប់បញ្ជីអ្នកកែសម្រួល\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"ពាក្យបញ្ជា\",items:[{name:\"ការ​បញ្ជា​មិនធ្វើវិញ\",legend:\"ចុច ${undo}\"},{name:\"ការបញ្ជា​ធ្វើវិញ\",legend:\"ចុច ${redo}\"},{name:\"ការបញ្ជា​អក្សរ​ដិត\",legend:\"ចុច ${bold}\"},{name:\"ការបញ្ជា​អក្សរ​ទ្រេត\",legend:\"ចុច ${italic}\"},{name:\"ពាក្យបញ្ជា​បន្ទាត់​ពីក្រោម\",\nlegend:\"ចុច ${underline}\"},{name:\"ពាក្យបញ្ជា​តំណ\",legend:\"ចុច ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\"ជំនួយ​ពី​ភាព​ងាយស្រួល\",legend:\"ជួយ ${a11yHelp}\"}]}],backspace:\"លុបថយក្រោយ\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"ផ្អាក\",capslock:\"Caps Lock\",escape:\"ចាកចេញ\",pageUp:\"ទំព័រ​លើ\",pageDown:\"ទំព័រ​ក្រោម\",end:\"ចុង\",home:\"ផ្ទះ\",leftArrow:\"ព្រួញ​ឆ្វេង\",upArrow:\"ព្រួញ​លើ\",rightArrow:\"ព្រួញ​ស្ដាំ\",downArrow:\"ព្រួញ​ក្រោម\",insert:\"បញ្ចូល\",\"delete\":\"លុប\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"ជ្រើស​គ្រាប់​ចុច\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"គុណ\",add:\"បន្ថែម\",subtract:\"ដក\",decimalPoint:\"ចំណុចទសភាគ\",divide:\"ចែក\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"បិទ​រំកិល\",semiColon:\"ចុច​ក្បៀស\",equalSign:\"សញ្ញា​អឺរ៉ូ\",comma:\"ក្បៀស\",dash:\"Dash\",period:\"ចុច\",forwardSlash:\"Forward Slash\",graveAccent:\"Grave Accent\",\nopenBracket:\"តង្កៀប​បើក\",backSlash:\"Backslash\",closeBracket:\"តង្កៀប​បិទ\",singleQuote:\"បន្តក់​មួយ\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"ko\",{title:\"접근성 설명\",contents:\"도움말. 이 창을 닫으시려면 ESC 를 누르세요.\",legend:[{name:\"일반\",items:[{name:\"편집기 툴바\",legend:\"툴바를 탐색하시려면 ${toolbarFocus} 를 투르세요. 이전/다음 툴바 그룹으로 이동하시려면 TAB 키 또는 SHIFT+TAB 키를 누르세요. 이전/다음 툴바 버튼으로 이동하시려면 오른쪽 화살표 키 또는 왼쪽 화살표 키를 누르세요. 툴바 버튼을 활성화 하려면 SPACE 키 또는 ENTER 키를 누르세요.\"},{name:\"편집기 다이얼로그\",legend:\"TAB 키를 누르면 다음 대화상자로 이동하고, SHIFT+TAB 키를 누르면 이전 대화상자로 이동합니다. 대화상자를 제출하려면 ENTER 키를 누르고, ESC 키를 누르면 대화상자를 취소합니다. 대화상자에 탭이 여러개 있을 때, ALT+F10 키 또는 TAB 키를 누르면 순서에 따라 탭 목록에 도달할 수 있습니다. 탭 목록에 초점이 맞을 때, 오른쪽과 왼쪽 화살표 키를 이용하면 각각 다음과 이전 탭으로 이동할 수 있습니다.\"},\n{name:\"편집기 환경 메뉴\",legend:\"${contextMenu} 또는 어플리케이션 키를 누르면 환경-메뉴를 열 수 있습니다. 환경-메뉴에서 TAB 키 또는 아래 화살표 키를 누르면 다음 메뉴 옵션으로 이동할 수 있습니다. 이전 옵션으로 이동은 SHIFT+TAB 키 또는 위 화살표 키를 눌러서 할 수 있습니다. 스페이스 키 또는 ENTER 키를 눌러서 메뉴 옵션을 선택할 수 있습니다. 스페이스 키 또는 ENTER 키 또는 오른쪽 화살표 키를 눌러서 하위 메뉴를 열 수 있습니다. 부모 메뉴 항목으로 돌아가려면 ESC 키 또는 왼쪽 화살표 키를 누릅니다. ESC 키를 눌러서 환경-메뉴를 닫습니다.\"},{name:\"편집기 목록 박스\",legend:\"리스트-박스 내에서, 목록의 다음 항목으로 이동하려면 TAB 키 또는 아래쪽 화살표 키를 누릅니다. 목록의 이전 항목으로 이동하려면 SHIFT+TAB 키 또는 위쪽 화살표 키를 누릅니다. 스페이스 키 또는 ENTER 키를 누르면 목록의 해당 옵션을 선택합니다. ESC 키를 눌러서 리스트-박스를 닫을 수 있습니다.\"},\n{name:\"편집기 요소 경로 막대\",legend:\"${elementsPathFocus}를 눌러서 요소 경로 막대를 탐색할 수 있습니다. 다음 요소로 이동하려면 TAB 키 또는 오른쪽 화살표 키를 누릅니다. SHIFT+TAB 키 또는 왼쪽 화살표 키를 누르면 이전 버튼으로 이동할 수 있습니다. 스페이스 키나 ENTER 키를 누르면 편집기의 해당 항목을 선택합니다.\"}]},{name:\"명령\",items:[{name:\" 명령 실행 취소\",legend:\"${undo} 누르시오\"},{name:\" 명령 다시 실행\",legend:\"${redo} 누르시오\"},{name:\" 굵게 명령\",legend:\"${bold} 누르시오\"},{name:\" 기울임 꼴 명령\",legend:\"${italic} 누르시오\"},{name:\" 밑줄 명령\",legend:\"${underline} 누르시오\"},{name:\" 링크 명령\",legend:\"${link} 누르시오\"},{name:\" 툴바 줄이기 명령\",legend:\"${toolbarCollapse} 누르시오\"},\n{name:\" 이전 포커스 공간 접근 명령\",legend:\"탈자 기호(^) 이전에 ${accessPreviousSpace} 를 누르면, 접근 불가능하면서 가장 가까운 포커스 영역에 접근합니다. 예를 들면, 두 인접한 HR 요소가 있습니다. 키 조합을 반복해서 멀리있는 포커스 영역들에 도달할 수 있습니다.\"},{name:\"다음 포커스 공간 접근 명령\",legend:\"탈자 기호(^) 다음에 ${accessNextSpace} 를 누르면, 접근 불가능하면서 가장 가까운 포커스 영역에 접근합니다. 예를 들면, 두 인접한 HR 요소가 있습니다. 키 조합을 반복해서 멀리있는 포커스 영역들에 도달할 수 있습니다. \"},{name:\" 접근성 도움말\",legend:\"${a11yHelp} 누르시오\"}]}],backspace:\"Backspace 키\",tab:\"탭 키\",enter:\"엔터 키\",shift:\"시프트 키\",ctrl:\"컨트롤 키\",alt:\"알트 키\",pause:\"일시정지 키\",capslock:\"캡스 록 키\",\nescape:\"이스케이프 키\",pageUp:\"페이지 업 키\",pageDown:\"페이지 다운 키\",end:\"엔드 키\",home:\"홈 키\",leftArrow:\"왼쪽 화살표 키\",upArrow:\"위쪽 화살표 키\",rightArrow:\"오른쪽 화살표 키\",downArrow:\"아래쪽 화살표 키\",insert:\"인서트 키\",\"delete\":\"삭제 키\",leftWindowKey:\"왼쪽 윈도우 키\",rightWindowKey:\"오른쪽 윈도우 키\",selectKey:\"셀렉트 키\",numpad0:\"숫자 패드 0 키\",numpad1:\"숫자 패드 1 키\",numpad2:\"숫자 패드 2 키\",numpad3:\"숫자 패드 3 키\",numpad4:\"숫자 패드 4 키\",numpad5:\"숫자 패드 5 키\",numpad6:\"숫자 패드 6 키\",numpad7:\"숫자 패드 7 키\",numpad8:\"숫자 패드 8 키\",numpad9:\"숫자 패드 9 키\",multiply:\"곱셈(*) 키\",add:\"덧셈(+) 키\",subtract:\"뺄셈(-) 키\",\ndecimalPoint:\"온점(.) 키\",divide:\"나눗셈(/) 키\",f1:\"F1 키\",f2:\"F2 키\",f3:\"F3 키\",f4:\"F4 키\",f5:\"F5 키\",f6:\"F6 키\",f7:\"F7 키\",f8:\"F8 키\",f9:\"F9 키\",f10:\"F10 키\",f11:\"F11 키\",f12:\"F12 키\",numLock:\"Num Lock 키\",scrollLock:\"Scroll Lock 키\",semiColon:\"세미콜론(;) 키\",equalSign:\"등호(\\x3d) 키\",comma:\"쉼표(,) 키\",dash:\"대시(-) 키\",period:\"온점(.) 키\",forwardSlash:\"슬래시(/) 키\",graveAccent:\"억음 악센트(`) 키\",openBracket:\"브라켓 열기([) 키\",backSlash:\"역슬래시(\\\\\\\\) 키\",closeBracket:\"브라켓 닫기(]) 키\",singleQuote:\"외 따옴표(') 키\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"ku\",{title:\"ڕێنمای لەبەردەستدابوون\",contents:\"پێکهاتەی یارمەتی. کلیك ESC بۆ داخستنی ئەم دیالۆگه.\",legend:[{name:\"گشتی\",items:[{name:\"تووڵامرازی دەستكاریكەر\",legend:\"کلیك ${toolbarFocus} بۆ ڕابەری تووڵامراز. بۆ گواستنەوەی پێشوو داهاتووی گرووپی تووڵامرازی داگرتنی کلیلی TAB لەگەڵ‌ SHIFT+TAB. بۆ گواستنەوەی پێشوو داهاتووی دووگمەی تووڵامرازی لەڕێی کلیلی تیری دەستی ڕاست یان کلیلی تیری دەستی چەپ. کلیکی کلیلی SPACE یان ENTER بۆ چالاککردنی دووگمەی تووڵامراز.\"},{name:\"دیالۆگی دەستكاریكەر\",\nlegend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"پێڕستی سەرنووسەر\",legend:\"کلیك ${contextMenu} یان دوگمەی لیسته‌(Menu) بۆ کردنەوەی لیستەی دەق. بۆ چوونە هەڵبژاردەیەکی تر له‌ لیسته‌ کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوارەوه‌ بۆ چوون بۆ هەڵبژاردەی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو له‌ سەرەوە. داگرتنی کلیلی SPACE یان ENTER بۆ هەڵبژاردنی هەڵبژاردەی لیسته‌. بۆ کردنەوەی لقی ژێر لیسته‌ لەهەڵبژاردەی لیستە کلیکی کلیلی SPACE یان ENTER یان کلیلی تیری دەستی ڕاست. بۆ گەڕانەوه بۆ سەرەوەی لیسته‌ کلیکی کلیلی ESC یان کلیلی تیری دەستی چەپ. بۆ داخستنی لیستە کلیكی کلیلی ESC بکە.\"},\n{name:\"لیستی سنووقی سەرنووسەر\",legend:\"لەناو سنوقی لیست, چۆن بۆ هەڵنبژاردەی لیستێکی تر کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوار. چوون بۆ هەڵبژاردەی لیستی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو لەسەرەوه‌. کلیکی کلیلی SPACE یان ENTER بۆ دیاریکردنی ‌هەڵبژاردەی لیست. کلیکی کلیلی ESC بۆ داخستنی سنوقی لیست.\"},{name:\"تووڵامرازی توخم\",legend:\"کلیك ${elementsPathFocus} بۆ ڕابەری تووڵامرازی توخمەکان. چوون بۆ دوگمەی توخمێکی تر کلیکی کلیلی TAB یان کلیلی تیری دەستی ڕاست. چوون بۆ دوگمەی توخمی پێشوو کلیلی SHIFT+TAB یان کلیکی کلیلی تیری دەستی چەپ. داگرتنی کلیلی SPACE یان ENTER بۆ دیاریکردنی توخمەکه‌ لەسەرنووسه.\"}]},\n{name:\"فەرمانەکان\",items:[{name:\"پووچکردنەوەی فەرمان\",legend:\"کلیك ${undo}\"},{name:\"هەڵگەڕانەوەی فەرمان\",legend:\"کلیك ${redo}\"},{name:\"فەرمانی دەقی قەڵەو\",legend:\"کلیك ${bold}\"},{name:\"فەرمانی دەقی لار\",legend:\"کلیك ${italic}\"},{name:\"فەرمانی ژێرهێڵ\",legend:\"کلیك ${underline}\"},{name:\"فەرمانی به‌ستەر\",legend:\"کلیك ${link}\"},{name:\"شاردەنەوەی تووڵامراز\",legend:\"کلیك ${toolbarCollapse}\"},{name:\"چوونەناو سەرنجدانی پێشوی فەرمانی بۆشایی\",legend:\"کلیک ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\"چوونەناو سەرنجدانی داهاتووی فەرمانی بۆشایی\",legend:\"کلیک ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\"دەستپێگەیشتنی یارمەتی\",legend:\"کلیك ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",\nupArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"پەنجەرەی چەپ\",rightWindowKey:\"پەنجەرەی ڕاست\",selectKey:\"Select\",numpad0:\"Numpad 0\",numpad1:\"1\",numpad2:\"2\",numpad3:\"3\",numpad4:\"4\",numpad5:\"5\",numpad6:\"6\",numpad7:\"7\",numpad8:\"8\",numpad9:\"9\",multiply:\"*\",add:\"+\",subtract:\"-\",decimalPoint:\".\",divide:\"/\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",\nsemiColon:\";\",equalSign:\"\\x3d\",comma:\",\",dash:\"-\",period:\".\",forwardSlash:\"/\",graveAccent:\"`\",openBracket:\"[\",backSlash:\"\\\\\\\\\",closeBracket:\"}\",singleQuote:\"'\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"lt\",{title:\"Accessibility Instructions\",contents:\"Help Contents. To close this dialog press ESC.\",legend:[{name:\"Bendros savybės\",items:[{name:\"Editor Toolbar\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Editor Dialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Commands\",items:[{name:\" Undo command\",legend:\"Press ${undo}\"},{name:\" Redo command\",legend:\"Press ${redo}\"},{name:\" Bold command\",legend:\"Press ${bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",\nlegend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"lv\",{title:\"Pieejamības instrukcija\",contents:\"Palīdzības saturs. Lai aizvērtu ciet šo dialogu nospiediet ESC.\",legend:[{name:\"Galvenais\",items:[{name:\"Redaktora rīkjosla\",legend:\"Nospiediet ${toolbarFocus} lai pārvietotos uz rīkjoslu. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas grupu izmantojiet pogu TAB un SHIFT+TAB. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas pogu izmantojiet Kreiso vai Labo bultiņu. Nospiediet Atstarpi vai ENTER lai aktivizētu rīkjosla pogu.\"},\n{name:\"Redaktora dialoga  logs\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Redaktora satura izvēle\",legend:\"Nospiediet ${contextMenu} vai APPLICATION KEY lai atvērtu satura izvēlni. Lai pārvietotos uz nākošo izvēlnes opciju izmantojiet pogu TAB vai pogu Bultiņu uz leju. Lai pārvietotos uz iepriekšējo opciju izmantojiet  SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvelētos izvēlnes opciju. Atveriet tekošajā opcija apakšizvēlni ar SAPCE vai ENTER ka ari to var izdarīt ar Labo bultiņu. Lai atgrieztos atpakaļ uz sakuma izvēlni nospiediet ESC vai Kreiso bultiņu. Lai aizvērtu ciet izvēlnes saturu nospiediet ESC.\"},\n{name:\"Redaktora saraksta lauks\",legend:\"Saraksta laukā, lai pārvietotos uz nākošo saraksta elementu nospiediet TAB vai pogu Bultiņa uz leju. Lai pārvietotos uz iepriekšējo saraksta elementu nospiediet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvēlētos saraksta opcijas. Nospiediet ESC lai aizvērtu saraksta lauku.\"},{name:\"Redaktora elementa ceļa josla\",legend:\"Nospiediet ${elementsPathFocus} lai pārvietotos uz elementa ceļa joslu. Lai pārvietotos uz nākošo elementa pogu izmantojiet TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo elementa pogu izmantojiet SHIFT+TAB vai Kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos elementu redaktorā.\"}]},\n{name:\"Komandas\",items:[{name:\"Komanda atcelt darbību\",legend:\"Nospiediet ${undo}\"},{name:\"Komanda atkārtot darbību\",legend:\"Nospiediet ${redo}\"},{name:\"Treknraksta komanda\",legend:\"Nospiediet ${bold}\"},{name:\"Kursīva komanda\",legend:\"Nospiediet ${italic}\"},{name:\"Apakšsvītras komanda \",legend:\"Nospiediet ${underline}\"},{name:\"Hipersaites komanda\",legend:\"Nospiediet ${link}\"},{name:\"Rīkjoslas aizvēršanas komanda\",legend:\"Nospiediet ${toolbarCollapse}\"},{name:\"Piekļūt iepriekšējai fokusa vietas komandai\",\nlegend:\"Nospiediet ${accessPreviousSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pirms kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām.\"},{name:\"Piekļūt nākošā fokusa apgabala komandai\",legend:\"Nospiediet ${accessNextSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pēc kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām.\"},\n{name:\"Pieejamības palīdzība\",legend:\"Nospiediet ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"mk\",{title:\"Инструкции за пристапност\",contents:\"Содржина на делот за помош. За да го затворите овој дијалог притиснете ESC.\",legend:[{name:\"Општо\",items:[{name:\"Мени за уредувачот\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Дијалот за едиторот\",\nlegend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Контекст-мени на уредувачот\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},\n{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},\n{name:\"Наредби\",items:[{name:\" Undo command\",legend:\"Press ${undo}\"},{name:\" Redo command\",legend:\"Press ${redo}\"},{name:\" Bold command\",legend:\"Press ${bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",legend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Пауза\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Up\",end:\"End\",home:\"Home\",leftArrow:\"Стрелка лево\",\nupArrow:\"Стрелка горе\",rightArrow:\"Стрелка десно\",downArrow:\"Стрелка доле\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Лево Windows копче\",rightWindowKey:\"Десно Windows копче\",selectKey:\"Select копче\",numpad0:\"Нум. таст. 0\",numpad1:\"Нум. таст. 1\",numpad2:\"Нум. таст. 2\",numpad3:\"Нум. таст. 3\",numpad4:\"Нум. таст. 4\",numpad5:\"Нум. таст. 5\",numpad6:\"Нум. таст. 6\",numpad7:\"Нум. таст. 7\",numpad8:\"Нум. таст. 8\",numpad9:\"Нум. таст. 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",\ndivide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",graveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"mn\",{title:\"Accessibility Instructions\",contents:\"Help Contents. To close this dialog press ESC.\",legend:[{name:\"Ерөнхий\",items:[{name:\"Editor Toolbar\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Editor Dialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Commands\",items:[{name:\" Undo command\",legend:\"Press ${undo}\"},{name:\" Redo command\",legend:\"Press ${redo}\"},{name:\" Bold command\",legend:\"Press ${bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",\nlegend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"nb\",{title:\"Instruksjoner for tilgjengelighet\",contents:\"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.\",legend:[{name:\"Generelt\",items:[{name:\"Verktøylinje for editor\",legend:\"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT+TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen.\"},{name:\"Dialog for editor\",\nlegend:\"Mens du er i en dialog, trykk TAB for å navigere til neste dialogelement, trykk SHIFT+TAB for å flytte til forrige dialogelement, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. Når en dialog har flere faner, kan fanelisten nås med enten ALT+F10 eller med TAB. Når fanelisten er fokusert, går man til neste og forrige fane med henholdsvis HØYRE og VENSTRE PILTAST.\"},{name:\"Kontekstmeny for editor\",legend:\"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC.\"},\n{name:\"Listeboks for editor\",legend:\"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen.\"},{name:\"Verktøylinje for elementsti\",legend:\"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren.\"}]},\n{name:\"Hurtigtaster\",items:[{name:\"Angre\",legend:\"Trykk ${undo}\"},{name:\"Gjør om\",legend:\"Trykk ${redo}\"},{name:\"Fet tekst\",legend:\"Trykk ${bold}\"},{name:\"Kursiv tekst\",legend:\"Trykk ${italic}\"},{name:\"Understreking\",legend:\"Trykk ${underline}\"},{name:\"Lenke\",legend:\"Trykk ${link}\"},{name:\"Skjul verktøylinje\",legend:\"Trykk ${toolbarCollapse}\"},{name:\"Gå til forrige fokusområde\",legend:\"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet.\"},\n{name:\"Gå til neste fokusområde\",legend:\"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet.\"},{name:\"Hjelp for tilgjengelighet\",legend:\"Trykk ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tabulator\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",\npageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Venstre piltast\",upArrow:\"Opp-piltast\",rightArrow:\"Høyre piltast\",downArrow:\"Ned-piltast\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Venstre Windows-tast\",rightWindowKey:\"Høyre Windows-tast\",selectKey:\"Velg nøkkel\",numpad0:\"Numerisk tastatur 0\",numpad1:\"Numerisk tastatur 1\",numpad2:\"Numerisk tastatur 2\",numpad3:\"Numerisk tastatur 3\",numpad4:\"Numerisk tastatur 4\",numpad5:\"Numerisk tastatur 5\",numpad6:\"Numerisk tastatur 6\",numpad7:\"Numerisk tastatur 7\",\nnumpad8:\"Numerisk tastatur 8\",numpad9:\"Numerisk tastatur 9\",multiply:\"Multipliser\",add:\"Legg til\",subtract:\"Trekk fra\",decimalPoint:\"Desimaltegn\",divide:\"Divider\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semikolon\",equalSign:\"Likhetstegn\",comma:\"Komma\",dash:\"Bindestrek\",period:\"Punktum\",forwardSlash:\"Forover skråstrek\",graveAccent:\"Grav aksent\",openBracket:\"Åpne parentes\",backSlash:\"Bakover skråstrek\",\ncloseBracket:\"Lukk parentes\",singleQuote:\"Enkelt sitattegn\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"nl\",{title:\"Toegankelijkheidsinstructies\",contents:\"Help-inhoud. Druk op ESC om dit dialoog te sluiten.\",legend:[{name:\"Algemeen\",items:[{name:\"Werkbalk tekstverwerker\",legend:\"Druk op ${toolbarFocus} om naar de werkbalk te navigeren. Om te schakelen naar de volgende en vorige werkbalkgroep, gebruik TAB en SHIFT+TAB. Om te schakelen naar de volgende en vorige werkbalkknop, gebruik de PIJL RECHTS en PIJL LINKS. Druk op SPATIE of ENTER om een werkbalkknop te activeren.\"},\n{name:\"Dialoog tekstverwerker\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Contextmenu tekstverwerker\",legend:\"Druk op ${contextMenu} of APPLICATION KEY om het contextmenu te openen. Schakel naar de volgende menuoptie met TAB of PIJL OMLAAG. Schakel naar de vorige menuoptie met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om een menuoptie te selecteren. Op een submenu van de huidige optie met SPATIE, ENTER of PIJL RECHTS. Ga terug naar de bovenliggende menuoptie met ESC of PIJL LINKS. Sluit het contextmenu met ESC.\"},\n{name:\"Keuzelijst tekstverwerker\",legend:\"In een keuzelijst, schakel naar het volgende item met TAB of PIJL OMLAAG. Schakel naar het vorige item met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om het item te selecteren. Druk op ESC om de keuzelijst te sluiten.\"},{name:\"Elementenpad werkbalk tekstverwerker\",legend:\"Druk op ${elementsPathFocus} om naar het elementenpad te navigeren. Om te schakelen naar het volgende element, gebruik TAB of PIJL RECHTS. Om te schakelen naar het vorige element, gebruik SHIFT+TAB or PIJL LINKS. Druk op SPATIE of ENTER om een element te selecteren in de tekstverwerker.\"}]},\n{name:\"Opdrachten\",items:[{name:\"Ongedaan maken opdracht\",legend:\"Druk op ${undo}\"},{name:\"Opnieuw uitvoeren opdracht\",legend:\"Druk op ${redo}\"},{name:\"Vetgedrukt opdracht\",legend:\"Druk op ${bold}\"},{name:\"Cursief opdracht\",legend:\"Druk op ${italic}\"},{name:\"Onderstrepen opdracht\",legend:\"Druk op ${underline}\"},{name:\"Link opdracht\",legend:\"Druk op ${link}\"},{name:\"Werkbalk inklappen opdracht\",legend:\"Druk op ${toolbarCollapse}\"},{name:\"Ga naar vorige focus spatie commando\",legend:\"Druk ${accessPreviousSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie voor de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken.\"},\n{name:\"Ga naar volgende focus spatie commando\",legend:\"Druk ${accessNextSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie na de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken.\"},{name:\"Toegankelijkheidshulp\",legend:\"Druk op ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",\nend:\"End\",home:\"Home\",leftArrow:\"Pijl naar links\",upArrow:\"Pijl omhoog\",rightArrow:\"Pijl naar rechts\",downArrow:\"Pijl naar beneden\",insert:\"Invoegen\",\"delete\":\"Verwijderen\",leftWindowKey:\"Linker Windows-toets\",rightWindowKey:\"Rechter Windows-toets\",selectKey:\"Selecteer toets\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",numpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Vermenigvuldigen\",add:\"Toevoegen\",\nsubtract:\"Aftrekken\",decimalPoint:\"Decimaalteken\",divide:\"Delen\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Puntkomma\",equalSign:\"Is gelijk-teken\",comma:\"Komma\",dash:\"Koppelteken\",period:\"Punt\",forwardSlash:\"Slash\",graveAccent:\"Accent grave\",openBracket:\"Vierkant haakje openen\",backSlash:\"Backslash\",closeBracket:\"Vierkant haakje sluiten\",singleQuote:\"Apostrof\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/no.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"no\",{title:\"Instruksjoner for tilgjengelighet\",contents:\"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.\",legend:[{name:\"Generelt\",items:[{name:\"Verktøylinje for editor\",legend:\"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT+TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen.\"},{name:\"Dialog for editor\",\nlegend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Kontekstmeny for editor\",legend:\"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC.\"},\n{name:\"Listeboks for editor\",legend:\"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen.\"},{name:\"Verktøylinje for elementsti\",legend:\"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren.\"}]},\n{name:\"Kommandoer\",items:[{name:\"Angre\",legend:\"Trykk ${undo}\"},{name:\"Gjør om\",legend:\"Trykk ${redo}\"},{name:\"Fet tekst\",legend:\"Trykk ${bold}\"},{name:\"Kursiv tekst\",legend:\"Trykk ${italic}\"},{name:\"Understreking\",legend:\"Trykk ${underline}\"},{name:\"Link\",legend:\"Trykk ${link}\"},{name:\"Skjul verktøylinje\",legend:\"Trykk ${toolbarCollapse}\"},{name:\"Gå til forrige fokusområde\",legend:\"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet.\"},\n{name:\"Gå til neste fokusområde\",legend:\"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet.\"},{name:\"Hjelp for tilgjengelighet\",legend:\"Trykk ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",\nend:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",numpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",\ndivide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",graveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"pl\",{title:\"Instrukcje dotyczące dostępności\",contents:\"Zawartość pomocy. Wciśnij ESC, aby zamknąć to okno.\",legend:[{name:\"Informacje ogólne\",items:[{name:\"Pasek narzędzi edytora\",legend:\"Naciśnij ${toolbarFocus}, by przejść do paska narzędzi. Przejdź do następnej i poprzedniej grupy narzędzi używając TAB oraz SHIFT+TAB. Przejdź do następnego i poprzedniego przycisku paska narzędzi za pomocą STRZAŁKI W PRAWO lub STRZAŁKI W LEWO. Naciśnij SPACJĘ lub ENTER by aktywować przycisk paska narzędzi.\"},\n{name:\"Okno dialogowe edytora\",legend:\"Wewnątrz okna dialogowego naciśnij TAB, by przejść do kolejnego elementu tego okna lub SHIFT+TAB, by przejść do poprzedniego elementu okna. Naciśnij ENTER w celu zatwierdzenia opcji okna dialogowego lub ESC w celu anulowania zmian. Jeśli okno dialogowe ma kilka zakładek, do listy zakładek można przejść za pomocą ALT+F10 lub TAB. Gdy lista zakładek jest aktywna, możesz przejść do kolejnej i poprzedniej zakładki za pomocą STRZAŁKI W PRAWO i STRZAŁKI W LEWO.\"},\n{name:\"Menu kontekstowe edytora\",legend:\"Wciśnij ${contextMenu} lub PRZYCISK APLIKACJI aby otworzyć menu kontekstowe. Przejdź do następnej pozycji menu wciskając TAB lub STRZAŁKĘ W DÓŁ. Przejdź do poprzedniej pozycji menu wciskając SHIFT + TAB lub STRZAŁKĘ W GÓRĘ. Wciśnij SPACJĘ lub ENTER aby wygrać pozycję menu. Otwórz pod-menu obecnej pozycji wciskając SPACJĘ lub ENTER lub STRZAŁKĘ W PRAWO. Wróć do pozycji nadrzędnego menu wciskając ESC lub STRZAŁKĘ W LEWO. Zamknij menu wciskając ESC.\"},{name:\"Lista w edytorze\",\nlegend:\"Wewnątrz listy przejdź do kolejnego elementu listy za pomocą przycisku TAB lub STRZAŁKI W DÓŁ. Przejdź do poprzedniego elementu listy za pomocą SHIFT+TAB lub STRZAŁKI W GÓRĘ. Naciśnij SPACJĘ lub ENTER w celu wybrania opcji z listy. Naciśnij ESC, by zamknąć listę.\"},{name:\"Pasek ścieżki elementów edytora\",legend:\"Naciśnij ${elementsPathFocus} w celu przejścia do paska ścieżki elementów edytora. W celu przejścia do kolejnego elementu naciśnij klawisz TAB lub STRZAŁKI W PRAWO. W celu przejścia do poprzedniego elementu naciśnij klawisze SHIFT+TAB lub STRZAŁKI W LEWO. By wybrać element w edytorze, użyj klawisza SPACJI lub ENTER.\"}]},\n{name:\"Polecenia\",items:[{name:\"Polecenie Cofnij\",legend:\"Naciśnij ${undo}\"},{name:\"Polecenie Ponów\",legend:\"Naciśnij ${redo}\"},{name:\"Polecenie Pogrubienie\",legend:\"Naciśnij ${bold}\"},{name:\"Polecenie Kursywa\",legend:\"Naciśnij ${italic}\"},{name:\"Polecenie Podkreślenie\",legend:\"Naciśnij ${underline}\"},{name:\"Polecenie Wstaw/ edytuj odnośnik\",legend:\"Naciśnij ${link}\"},{name:\"Polecenie schowaj pasek narzędzi\",legend:\"Naciśnij ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\"Pomoc dotycząca dostępności\",legend:\"Naciśnij ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Strzałka w lewo\",\nupArrow:\"Strzałka w górę\",rightArrow:\"Strzałka w prawo\",downArrow:\"Strzałka w dół\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Lewy klawisz Windows\",rightWindowKey:\"Prawy klawisz Windows\",selectKey:\"Klawisz wyboru\",numpad0:\"Klawisz 0 na klawiaturze numerycznej\",numpad1:\"Klawisz 1 na klawiaturze numerycznej\",numpad2:\"Klawisz 2 na klawiaturze numerycznej\",numpad3:\"Klawisz 3 na klawiaturze numerycznej\",numpad4:\"Klawisz 4 na klawiaturze numerycznej\",numpad5:\"Klawisz 5 na klawiaturze numerycznej\",\nnumpad6:\"Klawisz 6 na klawiaturze numerycznej\",numpad7:\"Klawisz 7 na klawiaturze numerycznej\",numpad8:\"Klawisz 8 na klawiaturze numerycznej\",numpad9:\"Klawisz 9 na klawiaturze numerycznej\",multiply:\"Przemnóż\",add:\"Plus\",subtract:\"Minus\",decimalPoint:\"Separator dziesiętny\",divide:\"Podziel\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Średnik\",equalSign:\"Znak równości\",comma:\"Przecinek\",dash:\"Pauza\",\nperiod:\"Kropka\",forwardSlash:\"Ukośnik prawy\",graveAccent:\"Akcent słaby\",openBracket:\"Nawias kwadratowy otwierający\",backSlash:\"Ukośnik lewy\",closeBracket:\"Nawias kwadratowy zamykający\",singleQuote:\"Apostrof\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"pt-br\",{title:\"Instruções de Acessibilidade\",contents:\"Conteúdo da Ajuda. Para fechar este diálogo pressione ESC.\",legend:[{name:\"Geral\",items:[{name:\"Barra de Ferramentas do Editor\",legend:\"Pressione ${toolbarFocus} para navegar para a barra de ferramentas. Mova para o anterior ou próximo grupo de ferramentas com TAB e SHIFT+TAB. Mova para o anterior ou próximo botão com SETA PARA DIREITA or SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas.\"},\n{name:\"Diálogo do Editor\",legend:\"Dentro de um diálogo, pressione TAB para navegar para o próximo elemento. Pressione SHIFT+TAB para mover para o elemento anterior. Pressione ENTER ara enviar o diálogo. pressione ESC para cancelar o diálogo. Quando um diálogo tem múltiplas abas, a lista de abas pode ser acessada com ALT+F10 ou TAB, como parte da ordem de tabulação do diálogo. Com a lista de abas em foco, mova para a próxima aba e para a aba anterior com a SETA DIREITA ou SETA ESQUERDA, respectivamente.\"},\n{name:\"Menu de Contexto do Editor\",legend:\"Pressione ${contextMenu} ou TECLA DE MENU para abrir o menu de contexto, então mova para a próxima opção com TAB ou SETA PARA BAIXO. Mova para a anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO ou ENTER ou SETA PARA DIREITA. Volte para o menu pai com ESC ou SETA PARA ESQUERDA. Feche o menu de contexto com ESC.\"},{name:\"Caixa de Lista do Editor\",legend:\"Dentro de uma caixa de lista, mova para o próximo item com TAB ou SETA PARA BAIXO. Mova para o item anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar uma opção na lista. Pressione ESC para fechar a caixa de lista.\"},\n{name:\"Barra de Caminho do Elementos do Editor\",legend:\"Pressione ${elementsPathFocus} para a barra de caminho dos elementos. Mova para o próximo botão de elemento com TAB ou SETA PARA DIREITA. Mova para o botão anterior com SHIFT+TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor.\"}]},{name:\"Comandos\",items:[{name:\" Comando Desfazer\",legend:\"Pressione ${undo}\"},{name:\" Comando Refazer\",legend:\"Pressione ${redo}\"},{name:\" Comando Negrito\",legend:\"Pressione ${bold}\"},\n{name:\" Comando Itálico\",legend:\"Pressione ${italic}\"},{name:\" Comando Sublinhado\",legend:\"Pressione ${underline}\"},{name:\" Comando Link\",legend:\"Pressione ${link}\"},{name:\" Comando Fechar Barra de Ferramentas\",legend:\"Pressione ${toolbarCollapse}\"},{name:\"Acessar o comando anterior de spaço de foco\",legend:\"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo antes do cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes.\"},\n{name:\"Acessar próximo fomando de spaço de foco\",legend:\"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo após o cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes.\"},{name:\" Ajuda de Acessibilidade\",legend:\"Pressione ${a11yHelp}\"}]}],backspace:\"Tecla Backspace\",tab:\"Tecla Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",\npageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Seta à Esquerda\",upArrow:\"Seta à Cima\",rightArrow:\"Seta à Direita\",downArrow:\"Seta à Baixo\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Tecla do Windows Esquerda\",rightWindowKey:\"Tecla do Windows Direita\",selectKey:\"Tecla Selecionar\",numpad0:\"0 do Teclado Numérico\",numpad1:\"1 do Teclado Numérico\",numpad2:\"2 do Teclado Numérico\",numpad3:\"3 do Teclado Numérico\",numpad4:\"4 do Teclado Numérico\",numpad5:\"5 do Teclado Numérico\",numpad6:\"6 do Teclado Numérico\",\nnumpad7:\"7 do Teclado Numérico\",numpad8:\"8 do Teclado Numérico\",numpad9:\"9 do Teclado Numérico\",multiply:\"Multiplicar\",add:\"Mais\",subtract:\"Subtrair\",decimalPoint:\"Ponto\",divide:\"Dividir\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Ponto-e-vírgula\",equalSign:\"Igual\",comma:\"Vírgula\",dash:\"Hífen\",period:\"Ponto\",forwardSlash:\"Barra\",graveAccent:\"Acento Grave\",openBracket:\"Abrir Conchetes\",\nbackSlash:\"Contra-barra\",closeBracket:\"Fechar Colchetes\",singleQuote:\"Aspas Simples\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"pt\",{title:\"Instruções de acessibilidade\",contents:\"Conteúdo de ajuda. Use a tecla ESC para fechar esta janela.\",legend:[{name:\"Geral\",items:[{name:\"Barra de ferramentas do editor\",legend:\"Clique em ${toolbarFocus} para navegar para a barra de ferramentas. Vá para o grupo da barra de ferramentas anterior e seguinte com TAB e SHIFT+TAB. Vá para o botão da barra de ferramentas anterior com a SETA DIREITA ou ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas.\"},\n{name:\"Janela do Editor\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Menu de Contexto do Editor\",legend:\"Clique em ${contextMenu} ou TECLA APLICAÇÃO para abrir o menu de contexto. Depois vá para a opção do menu seguinte com TAB ou SETA PARA BAIXO. Vá para a opção anterior com  SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu.  Abra o submenu da opção atual com ESPAÇO, ENTER ou SETA DIREITA. GVá para o item do menu parente  com ESC ou SETA ESQUERDA. Feche o menu de contexto com ESC.\"},\n{name:\"Editor de caixa em lista\",legend:\"Dentro da caixa da lista, vá para o itemda lista seguinte com TAB ou SETA PARA BAIXO. Move Vá parao item da lista anterior com SHIFT+TAB ou SETA PARA BAIXO. Pressione ESPAÇO ou ENTER para selecionar a opção da lista. Pressione ESC para fechar a caisa da lista.\"},{name:\"Caminho Barra Elemento Editor\",legend:\"Clique em ${elementsPathFocus} para navegar para a barra do caminho dos elementos. Vá para o botão do elemento seguinte com TAB ou SETA DIREITA. Vá para o botão anterior com SHIFT+TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor.\"}]},\n{name:\"Comandos\",items:[{name:\"Comando de Anular\",legend:\"Carregar ${undo}\"},{name:\"Comando de Refazer\",legend:\"Pressione ${redo}\"},{name:\"Comando de Negrito\",legend:\"Pressione ${bold}\"},{name:\"Comando de Itálico\",legend:\"Pressione ${italic}\"},{name:\"Comando de Sublinhado\",legend:\"Pressione ${underline}\"},{name:\"Comando de Hiperligação\",legend:\"Pressione ${link}\"},{name:\"Comando de Ocultar Barra de Ferramentas\",legend:\"Pressione ${toolbarCollapse}\"},{name:\"Acesso comando do espaço focus anterior\",\nlegend:\"Clique em ${accessPreviousSpace} para aceder ao espaço do focos inalcançável mais perto antes do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes.\"},{name:\"Acesso comando do espaço focus seguinte\",legend:\"Pressione ${accessNextSpace} para aceder ao espaço do focos inalcançável mais perto depois do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes.\"},\n{name:\"Ajuda a acessibilidade\",legend:\"Pressione ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pausa\",capslock:\"Maiúsculas\",escape:\"Esc\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"Fim\",home:\"Entrada\",leftArrow:\"Seta esquerda\",upArrow:\"Seta para cima\",rightArrow:\"Seta direita\",downArrow:\"Seta para baixo\",insert:\"Inserir\",\"delete\":\"Eliminar\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",\nnumpad1:\"Numpad 1\",numpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiplicar\",add:\"Adicionar\",subtract:\"Subtrair\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Vírgula\",dash:\"Dash\",period:\"Period\",\nforwardSlash:\"Forward Slash\",graveAccent:\"Acento grave\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"ro\",{title:\"Instrucțiuni de accesibilitate\",contents:\"Cuprins. Pentru a închide acest dialog, apăsați tasta ESC.\",legend:[{name:\"General\",items:[{name:\"Editează bara instrumente.\",legend:\"Apasă ${toolbarFocus} pentru a naviga prin bara de instrumente. Pentru a te mișca prin grupurile de instrumente folosește tastele TAB și SHIFT+TAB. Pentru a te mișca intre diverse instrumente folosește tastele SĂGEATĂ DREAPTA sau SĂGEATĂ STÂNGA. Apasă butonul SPAȚIU sau ENTER pentru activarea instrumentului.\"},\n{name:\"Dialog editor\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Editor meniu contextual\",legend:\"Apasă ${contextMenu} sau TASTA MENIU pentru a deschide meniul contextual. Treci la următoarea opțiune din meniu cu TAB sau SĂGEATĂ JOS. Treci la opțiunea anterioară cu  SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din meniu. Deschide sub-meniul opțiunii curente cu SPAȚIU sau ENTER sau SĂGEATĂ DREAPTA. Revino la elementul din meniul părinte cu ESC sau SĂGEATĂ STÂNGA. Închide meniul de context cu ESC.\"},\n{name:\"Editor Casetă Listă\",legend:\"În interiorul unei liste, treci la următorull element cu TAB sau SĂGEATĂ JOS. Treci la elementul anterior din listă cu SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din listă. Apasă ESC pentru a închide lista.\"},{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},\n{name:\"Comenzi\",items:[{name:\" Undo command\",legend:\"Apasă ${undo}\"},{name:\"Comanda precedentă\",legend:\"Apasă ${redo}\"},{name:\"Comanda Îngroșat\",legend:\"Apasă ${bold}\"},{name:\"Comanda Inclinat\",legend:\"Apasă ${italic}\"},{name:\"Comanda Subliniere\",legend:\"Apasă ${underline}\"},{name:\"Comanda Legatură\",legend:\"Apasă ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",\nupArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",numpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",\nf4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",graveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"ru\",{title:\"Горячие клавиши\",contents:\"Помощь. Для закрытия этого окна нажмите ESC.\",legend:[{name:\"Основное\",items:[{name:\"Панель инструментов\",legend:\"Нажмите ${toolbarFocus} для перехода к панели инструментов. Для перемещения между группами панели инструментов используйте TAB и SHIFT+TAB. Для перемещения между кнопками панели иструментов используйте кнопки ВПРАВО или ВЛЕВО. Нажмите ПРОБЕЛ или ENTER для запуска кнопки панели инструментов.\"},{name:\"Диалоги\",legend:'Внутри диалога, нажмите TAB чтобы перейти к следующему элементу диалога, нажмите SHIFT+TAB чтобы перейти к предыдущему элементу диалога, нажмите ENTER чтобы отправить диалог, нажмите ESC чтобы отменить диалог. Когда диалоговое окно имеет несколько вкладок, получить доступ к панели вкладок как части диалога можно нажатием или сочетания ALT+F10 или TAB, при этом активные элементы диалога будут перебираться с учетом порядка табуляции. При активной панели вкладок, переход к следующей или предыдущей вкладке осуществляется нажатием стрелки \"ВПРАВО\" или стрелки \"ВЛЕВО\" соответственно.'},\n{name:\"Контекстное меню\",legend:'Нажмите ${contextMenu} или клавишу APPLICATION, чтобы открыть контекстное меню. Затем перейдите к следующему пункту меню с помощью TAB или стрелкой \"ВНИЗ\". Переход к предыдущей опции - SHIFT+TAB или стрелкой \"ВВЕРХ\". Нажмите SPACE, или ENTER, чтобы задействовать опцию меню. Открыть подменю текущей опции - SPACE или ENTER или стрелкой \"ВПРАВО\". Возврат к родительскому пункту меню - ESC или стрелкой \"ВЛЕВО\". Закрытие контекстного меню - ESC.'},{name:\"Редактор списка\",\nlegend:'Внутри окна списка, переход к следующему пункту списка - TAB или стрелкой \"ВНИЗ\". Переход к предыдущему пункту списка - SHIFT+TAB или стрелкой \"ВВЕРХ\". Нажмите SPACE, или ENTER, чтобы задействовать опцию списка. Нажмите ESC, чтобы закрыть окно списка.'},{name:\"Путь к элементу\",legend:'Нажмите ${elementsPathFocus}, чтобы перейти к панели пути элементов. Переход к следующей кнопке элемента - TAB или стрелкой \"ВПРАВО\". Переход к предыдущей кнопку - SHIFT+TAB или стрелкой \"ВЛЕВО\". Нажмите SPACE, или ENTER, чтобы выбрать элемент в редакторе.'}]},\n{name:\"Команды\",items:[{name:\"Отменить\",legend:\"Нажмите ${undo}\"},{name:\"Повторить\",legend:\"Нажмите ${redo}\"},{name:\"Полужирный\",legend:\"Нажмите ${bold}\"},{name:\"Курсив\",legend:\"Нажмите ${italic}\"},{name:\"Подчеркнутый\",legend:\"Нажмите ${underline}\"},{name:\"Гиперссылка\",legend:\"Нажмите ${link}\"},{name:\"Свернуть панель инструментов\",legend:\"Нажмите ${toolbarCollapse}\"},{name:\"Команды доступа к предыдущему фокусному пространству\",legend:'Нажмите ${accessPreviousSpace}, чтобы обратиться к ближайшему недостижимому фокусному пространству перед символом \"^\", например: два смежных HR элемента. Повторите комбинацию клавиш, чтобы достичь отдаленных фокусных пространств.'},\n{name:\"Команды доступа к следующему фокусному пространству\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\"Справка по горячим клавишам\",legend:\"Нажмите ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Esc\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",\nhome:\"Home\",leftArrow:\"Стрелка влево\",upArrow:\"Стрелка вверх\",rightArrow:\"Стрелка вправо\",downArrow:\"Стрелка вниз\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Левая клавиша Windows\",rightWindowKey:\"Правая клавиша Windows\",selectKey:\"Выбрать\",numpad0:\"Цифра 0\",numpad1:\"Цифра 1\",numpad2:\"Цифра 2\",numpad3:\"Цифра 3\",numpad4:\"Цифра 4\",numpad5:\"Цифра 5\",numpad6:\"Цифра 6\",numpad7:\"Цифра 7\",numpad8:\"Цифра 8\",numpad9:\"Цифра 9\",multiply:\"Умножить\",add:\"Плюс\",subtract:\"Вычесть\",decimalPoint:\"Десятичная точка\",\ndivide:\"Делить\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Точка с запятой\",equalSign:\"Равно\",comma:\"Запятая\",dash:\"Тире\",period:\"Точка\",forwardSlash:\"Наклонная черта\",graveAccent:\"Апостроф\",openBracket:\"Открыть скобку\",backSlash:\"Обратная наклонная черта\",closeBracket:\"Закрыть скобку\",singleQuote:\"Одинарная кавычка\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/si.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"si\",{title:\"ළඟා වියහැකි \",contents:\"උදව් සඳහා අන්තර්ගතය.නික්මයෙමට ESC බොත්තම ඔබන්න\",legend:[{name:\"පොදු කරුණු\",items:[{name:\"සංස්කරණ මෙවලම් \",legend:\"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT+TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න.\"},{name:\"සංස්කරණ \",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"සංස්කරණ අඩංගුවට \",legend:\"ඔබන්න ${අන්තර්ගත මෙනුව} හෝ  APPLICATION KEY  අන්තර්ගත-මෙනුව විවුරතකිරීමට. ඊළඟ මෙනුව-ව්කල්පයන්ට යෑමට TAB හෝ DOWN ARROW බොත්තම ද, පෙර විකල්පයන්ටයෑමට SHIFT+TAB හෝ  UP ARROW බොත්තම ද, මෙනුව-ව්කල්පයන් තේරීමට SPACE හෝ ENTER බොත්තම ද,  දැනට විවුර්තව ඇති උප-මෙනුවක වීකල්ප තේරීමට SPACE හෝ ENTER හෝ RIGHT ARROW ද, නැවත පෙර ප්‍රධාන මෙනුවට යෑමට  ESC හෝ LEFT ARROW බොත්තම ද.  අන්තර්ගත-මෙනුව වැසීමට  ESC බොත්තම ද ඔබන්න.\"},{name:\"සංස්කරණ තේරුම් \",legend:\"තේරුම් කොටුව තුළ , ඊළඟ අයිතමයට යෑමට TAB හෝ DOWN ARROW , පෙර අයිතමයට යෑමට SHIFT+TAB හෝ UP ARROW . අයිතම විකල්පයන් තේරීමට SPACE හෝ ENTER ,තේරුම් කොටුව වැසීමට ESC බොත්තම් ද ඔබන්න.\"},\n{name:\"සංස්කරණ අංග සහිත \",legend:\"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT+TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න.\"}]},{name:\"විධාන\",items:[{name:\"විධානය වෙනස් \",legend:\"ඔබන්න ${වෙනස් කිරීම}\"},{name:\"විධාන නැවත් පෙර පරිදිම වෙනස්කර ගැනීම.\",legend:\"ඔබන්න ${නැවත් පෙර පරිදිම වෙනස්කර ගැනීම}\"},{name:\"තද අකුරින් විධාන\",legend:\"ඔබන්න ${තද }\"},\n{name:\"බැධී අකුරු විධාන\",legend:\"ඔබන්න ${බැධී අකුරු }\"},{name:\"යටින් ඉරි ඇද ඇති විධාන.\",legend:\"ඔබන්න ${යටින් ඉරි ඇද ඇති}\"},{name:\"සම්බන්ධිත විධාන\",legend:\"ඔබන්න ${සම්බන්ධ }\"},{name:\"මෙවලම් තීරු හැකුලුම් විධාන\",legend:\"ඔබන්න ${මෙවලම් තීරු හැකුලුම් }\"},{name:\"යොමුවීමට පෙර  වැදගත්  විධාන\",legend:\"ඔබන්න ${යොමුවීමට ඊළඟ }\"},{name:\"යොමුවීමට ඊළග වැදගත්  විධාන\",legend:\"ඔබන්න ${යොමුවීමට ඊළඟ }\"},{name:\"ප්‍රවේශ \",legend:\"ඔබන්න  ${a11y }\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",\nalt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",numpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",\nnumpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",graveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"sk\",{title:\"Inštrukcie prístupnosti\",contents:\"Pomocný obsah. Pre zatvorenie tohto okna, stlačte ESC.\",legend:[{name:\"Všeobecne\",items:[{name:\"Lišta nástrojov editora\",legend:\"Stlačte ${toolbarFocus} pre navigáciu na lištu nástrojov. Medzi ďalšou a predchádzajúcou lištou nástrojov sa pohybujete s TAB a SHIFT+TAB. Medzi ďalším a predchádzajúcim tlačidlom na lište nástrojov sa pohybujete s pravou šípkou a ľavou šípkou. Stlačte medzerník alebo ENTER pre aktiváciu tlačidla lišty nástrojov.\"},\n{name:\"Editorový dialóg\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Editorové kontextové menu\",legend:\"Stlačte ${contextMenu} alebo APPLICATION KEY pre otvorenie kontextového menu. Potom sa presúvajte na ďalšie možnosti menu s TAB alebo dolnou šípkou. Presunte sa k predchádzajúcej možnosti s SHIFT+TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti menu. Otvorte pod-menu danej možnosti s medzerníkom, alebo ENTER, alebo pravou šípkou. Vráťte sa späť do položky rodičovského menu s ESC alebo ľavou šípkou. Zatvorte kontextové menu s ESC.\"},\n{name:\"Editorov box zoznamu\",legend:\"V boxe zoznamu, presuňte sa na ďalšiu položku v zozname s TAB alebo dolnou šípkou. Presuňte sa k predchádzajúcej položke v zozname so SHIFT+TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti zoznamu. Stlačte ESC pre zatvorenie boxu zoznamu.\"},{name:\"Editorove pásmo cesty prvku\",legend:\"Stlačte ${elementsPathFocus} pre navigovanie na pásmo cesty elementu. Presuňte sa na tlačidlo ďalšieho prvku s TAB alebo pravou šípkou. Presuňte sa k predchádzajúcemu tlačidlu s SHIFT+TAB alebo ľavou šípkou. Stlačte medzerník alebo ENTER pre výber prvku v editore.\"}]},\n{name:\"Príkazy\",items:[{name:\"Vrátiť príkazy\",legend:\"Stlačte ${undo}\"},{name:\"Nanovo vrátiť príkaz\",legend:\"Stlačte ${redo}\"},{name:\"Príkaz na stučnenie\",legend:\"Stlačte ${bold}\"},{name:\"Príkaz na kurzívu\",legend:\"Stlačte ${italic}\"},{name:\"Príkaz na podčiarknutie\",legend:\"Stlačte ${underline}\"},{name:\"Príkaz na odkaz\",legend:\"Stlačte ${link}\"},{name:\"Príkaz na zbalenie lišty nástrojov\",legend:\"Stlačte ${toolbarCollapse}\"},{name:\"Prejsť na predchádzajúcu zamerateľnú medzeru príkazu\",legend:\"Stlačte ${accessPreviousSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery pred vsuvkuo. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier.\"},\n{name:\"Prejsť na ďalší \",legend:\"Stlačte ${accessNextSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery po vsuvke. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier.\"},{name:\"Pomoc prístupnosti\",legend:\"Stlačte ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Stránka hore\",pageDown:\"Stránka dole\",\nend:\"End\",home:\"Home\",leftArrow:\"Šípka naľavo\",upArrow:\"Šípka hore\",rightArrow:\"Šípka napravo\",downArrow:\"Šípka dole\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Ľavé Windows tlačidlo\",rightWindowKey:\"Pravé Windows tlačidlo\",selectKey:\"Tlačidlo Select\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",numpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Násobenie\",add:\"Sčítanie\",subtract:\"Odčítanie\",\ndecimalPoint:\"Desatinná čiarka\",divide:\"Delenie\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Bodkočiarka\",equalSign:\"Rovná sa\",comma:\"Čiarka\",dash:\"Pomĺčka\",period:\"Bodka\",forwardSlash:\"Lomítko\",graveAccent:\"Zdôrazňovanie prízvuku\",openBracket:\"Hranatá zátvorka otváracia\",backSlash:\"Backslash\",closeBracket:\"Hranatá zátvorka zatváracia\",singleQuote:\"Jednoduché úvodzovky\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"sl\",{title:\"Navodila Dostopnosti\",contents:\"Vsebina Pomoči. Če želite zapreti to pogovorno okno pritisnite ESC.\",legend:[{name:\"Splošno\",items:[{name:\"Urejevalna Orodna Vrstica\",legend:\"Pritisnite ${toolbarFocus} za pomik v orodno vrstico. Z TAB in SHIFT+TAB se pomikate na naslednjo in prejšnjo skupino orodne vrstice. Z DESNO PUŠČICO ali LEVO PUŠČICO se pomikate na naslednji in prejšnji gumb orodne vrstice. Pritisnite SPACE ali ENTER, da aktivirate gumb orodne vrstice.\"},\n{name:\"Urejevalno Pogovorno Okno\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},{name:\"Urejevalni Kontekstni Meni\",legend:\"Pritisnite ${contextMenu} ali APPLICATION KEY, da odprete kontekstni meni. Nato se premaknite na naslednjo možnost menija s tipko TAB ali PUŠČICA DOL. Premakniti se na prejšnjo možnost z SHIFT + TAB ali PUŠČICA GOR. Pritisnite SPACE ali ENTER za izbiro možnosti menija. Odprite podmeni trenutne možnosti menija s tipko SPACE ali ENTER ali DESNA PUŠČICA. Vrnite se na matični element menija s tipko ESC ali LEVA PUŠČICA. Zaprite kontekstni meni z ESC.\"},\n{name:\"Urejevalno Seznamsko Polje\",legend:\"Znotraj seznama, se premaknete na naslednji element seznama s tipko TAB ali PUŠČICO DOL. Z SHIFT+TAB ali PUŠČICO GOR se premaknete na prejšnji element seznama. Pritisnite tipko SPACE ali ENTER za izbiro elementa. Pritisnite tipko ESC, da zaprete seznam.\"},{name:\"Urejevalna vrstica poti elementa\",legend:\"Pritisnite ${elementsPathFocus} za pomikanje po vrstici elementnih poti. S TAB ali DESNA PUŠČICA se premaknete na naslednji gumb elementa. Z SHIFT+TAB ali LEVO PUŠČICO se premaknete na prejšnji gumb elementa. Pritisnite SPACE ali ENTER za izbiro elementa v urejevalniku.\"}]},\n{name:\"Ukazi\",items:[{name:\"Razveljavi ukaz\",legend:\"Pritisnite ${undo}\"},{name:\"Ponovi ukaz\",legend:\"Pritisnite ${redo}\"},{name:\"Krepki ukaz\",legend:\"Pritisnite ${bold}\"},{name:\"Ležeči ukaz\",legend:\"Pritisnite ${italic}\"},{name:\"Poudarni ukaz\",legend:\"Pritisnite ${underline}\"},{name:\"Ukaz povezave\",legend:\"Pritisnite ${link}\"},{name:\"Skrči Orodno Vrstico Ukaz\",legend:\"Pritisnite ${toolbarCollapse}\"},{name:\"Dostop do prejšnjega ukaza ostrenja\",legend:\"Pritisnite ${accessPreviousSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora pred strešico, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore.\"},\n{name:\"Dostop do naslednjega ukaza ostrenja\",legend:\"Pritisnite ${accessNextSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora po strešici, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore.\"},{name:\"Pomoč Dostopnosti\",legend:\"Pritisnite ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",\nhome:\"Home\",leftArrow:\"Levo puščica\",upArrow:\"Gor puščica\",rightArrow:\"Desno puščica\",downArrow:\"Dol puščica\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Leva Windows tipka\",rightWindowKey:\"Desna Windows tipka\",selectKey:\"Select tipka\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",numpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Zmnoži\",add:\"Dodaj\",subtract:\"Odštej\",decimalPoint:\"Decimalna vejica\",\ndivide:\"Deli\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Podpičje\",equalSign:\"enačaj\",comma:\"Vejica\",dash:\"Vezaj\",period:\"Pika\",forwardSlash:\"Desna poševnica\",graveAccent:\"Krativec\",openBracket:\"Oklepaj\",backSlash:\"Leva poševnica\",closeBracket:\"Oklepaj\",singleQuote:\"Opuščaj\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"sq\",{title:\"Udhëzimet e Qasjes\",contents:\"Përmbajtja ndihmëse. Për ta mbyllur dialogun shtyp ESC.\",legend:[{name:\"Të përgjithshme\",items:[{name:\"Shiriti i Redaktuesit\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Dialogu i Redaktuesit\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Komandat\",items:[{name:\"Rikthe komandën\",legend:\"Shtyp ${undo}\"},{name:\"Ribëj komandën\",legend:\"Shtyp ${redo}\"},{name:\"Komanda e trashjes së tekstit\",legend:\"Shtyp ${bold}\"},{name:\"Komanda kursive\",legend:\"Shtyp ${italic}\"},\n{name:\"Komanda e nënvijëzimit\",legend:\"Shtyp ${underline}\"},{name:\"Komanda e Nyjes\",legend:\"Shtyp ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Shtyp ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\"Ndihmë Qasjeje\",legend:\"Shtyp ${a11yHelp}\"}]}],backspace:\"Prapa\",tab:\"Fletë\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Shenja majtas\",upArrow:\"Shenja sipër\",rightArrow:\"Shenja djathtas\",downArrow:\"Shenja poshtë\",insert:\"Shto\",\"delete\":\"Grise\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Shto\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Presje\",dash:\"vizë\",period:\"Pikë\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Hape kllapën\",backSlash:\"Backslash\",closeBracket:\"Mbylle kllapën\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"sr-latn\",{title:\"Accessibility Instructions\",contents:\"Help Contents. To close this dialog press ESC.\",legend:[{name:\"Opšte\",items:[{name:\"Editor Toolbar\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Editor Dialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Commands\",items:[{name:\" Undo command\",legend:\"Press ${undo}\"},{name:\" Redo command\",legend:\"Press ${redo}\"},{name:\" Bold command\",legend:\"Press ${bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",\nlegend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"sr\",{title:\"Accessibility Instructions\",contents:\"Help Contents. To close this dialog press ESC.\",legend:[{name:\"Опште\",items:[{name:\"Editor Toolbar\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Editor Dialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Commands\",items:[{name:\" Undo command\",legend:\"Press ${undo}\"},{name:\" Redo command\",legend:\"Press ${redo}\"},{name:\" Bold command\",legend:\"Press ${bold}\"},{name:\" Italic command\",legend:\"Press ${italic}\"},{name:\" Underline command\",\nlegend:\"Press ${underline}\"},{name:\" Link command\",legend:\"Press ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"sv\",{title:\"Hjälpmedelsinstruktioner\",contents:\"Hjälpinnehåll. För att stänga denna dialogruta trycker du på ESC.\",legend:[{name:\"Allmänt\",items:[{name:\"Editor verktygsfält\",legend:\"Tryck på ${toolbarFocus} för att navigera till verktygsfältet. Flytta till nästa och föregående verktygsfältsgrupp med TAB och SHIFT+TAB. Flytta till nästa och föregående knapp i verktygsfältet med HÖGERPIL eller VÄNSTERPIL. Tryck SPACE eller ENTER för att aktivera knappen i verktygsfältet.\"},\n{name:\"Dialogeditor\",legend:\"Inuti en dialogruta, tryck TAB för att navigera till nästa fält i dialogrutan, tryck SKIFT+TAB för att flytta till föregående fält, tryck ENTER för att skicka. Du avbryter och stänger dialogen med ESC. För dialogrutor som har flera flikar, tryck ALT+F10 eller TAB för att navigera till fliklistan. med fliklistan vald flytta till nästa och föregående flik med HÖGER- eller VÄNSTERPIL.\"},{name:\"Editor för innehållsmeny\",legend:\"Tryck på $ {contextMenu} eller PROGRAMTANGENTEN för att öppna snabbmenyn. Flytta sedan till nästa menyalternativ med TAB eller NEDPIL. Flytta till föregående alternativ med SHIFT + TABB eller UPPIL. Tryck Space eller ENTER för att välja menyalternativ. Öppna undermeny av nuvarande alternativ med SPACE eller ENTER eller HÖGERPIL. Gå tillbaka till överordnade menyalternativ med ESC eller VÄNSTERPIL. Stäng snabbmenyn med ESC.\"},\n{name:\"Editor för list-box\",legend:\"Inuti en list-box, gå till nästa listobjekt med TAB eller NEDPIL. Flytta till föregående listobjekt med SHIFT+TAB eller UPPIL. Tryck SPACE eller ENTER för att välja listan alternativet. Tryck ESC för att stänga list-boxen.\"},{name:\"Editor för elementens sökväg\",legend:\"Tryck på ${elementsPathFocus} för att navigera till verktygsfältet för elementens sökvägar. Flytta till nästa elementknapp med TAB eller HÖGERPIL. Flytta till föregående knapp med SKIFT+TAB eller VÄNSTERPIL. Tryck SPACE eller ENTER för att välja element i redigeraren.\"}]},\n{name:\"Kommandon\",items:[{name:\"Ångra kommando\",legend:\"Tryck på ${undo}\"},{name:\"Gör om kommando\",legend:\"Tryck på ${redo}\"},{name:\"Kommandot fet stil\",legend:\"Tryck på ${bold}\"},{name:\"Kommandot kursiv\",legend:\"Tryck på ${italic}\"},{name:\"Kommandot understruken\",legend:\"Tryck på ${underline}\"},{name:\"Kommandot länk\",legend:\"Tryck på ${link}\"},{name:\"Verktygsfält Dölj kommandot\",legend:\"Tryck på ${toolbarCollapse}\"},{name:\"Gå till föregående fokus plats\",legend:\"Tryck på ${accessPreviousSpace} för att gå till närmast onåbara utrymme före markören, exempel: två intilliggande HR element. Repetera tangentkombinationen för att gå till nästa.\"},\n{name:\"Tillgå nästa fokuskommandots utrymme\",legend:\"Tryck ${accessNextSpace} på för att komma åt den närmaste onåbar fokus utrymme efter cirkumflex, till exempel: två intilliggande HR element. Upprepa tangentkombinationen för att nå avlägsna fokus utrymmen.\"},{name:\"Hjälp om tillgänglighet\",legend:\"Tryck ${a11yHelp}\"}]}],backspace:\"Backsteg\",tab:\"Tab\",enter:\"Retur\",shift:\"Skift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Paus\",capslock:\"Caps lock\",escape:\"Escape\",pageUp:\"Sida Up\",pageDown:\"Sida Ned\",end:\"Slut\",\nhome:\"Hem\",leftArrow:\"Vänsterpil\",upArrow:\"Uppil\",rightArrow:\"Högerpil\",downArrow:\"Nedåtpil\",insert:\"Infoga\",\"delete\":\"Radera\",leftWindowKey:\"Vänster Windowstangent\",rightWindowKey:\"Höger Windowstangent\",selectKey:\"Välj tangent\",numpad0:\"Nummer 0\",numpad1:\"Nummer 1\",numpad2:\"Nummer 2\",numpad3:\"Nummer 3\",numpad4:\"Nummer 4\",numpad5:\"Nummer 5\",numpad6:\"Nummer 6\",numpad7:\"Nummer 7\",numpad8:\"Nummer 8\",numpad9:\"Nummer 9\",multiply:\"Multiplicera\",add:\"Addera\",subtract:\"Minus\",decimalPoint:\"Decimalpunkt\",\ndivide:\"Dividera\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semikolon\",equalSign:\"Lika med tecken\",comma:\"Komma\",dash:\"Minus\",period:\"Punkt\",forwardSlash:\"Snedstreck framåt\",graveAccent:\"Accent\",openBracket:\"Öppningsparentes\",backSlash:\"Snedstreck bakåt\",closeBracket:\"Slutparentes\",singleQuote:\"Enkelt Citattecken\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/th.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"th\",{title:\"Accessibility Instructions\",contents:\"Help Contents. To close this dialog press ESC.\",legend:[{name:\"ทั่วไป\",items:[{name:\"แถบเครื่องมือสำหรับเครื่องมือช่วยพิมพ์\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Editor Dialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"คำสั่ง\",items:[{name:\"เลิกทำคำสั่ง\",legend:\"วาง ${undo}\"},{name:\"คำสั่งสำหรับทำซ้ำ\",legend:\"วาง ${redo}\"},{name:\"คำสั่งสำหรับตัวหนา\",legend:\"วาง ${bold}\"},{name:\"คำสั่งสำหรับตัวเอียง\",legend:\"วาง ${italic}\"},{name:\"คำสั่งสำหรับขีดเส้นใต้\",\nlegend:\"วาง ${underline}\"},{name:\"คำสั่งสำหรับลิงก์\",legend:\"วาง ${link}\"},{name:\" Toolbar Collapse command\",legend:\"Press ${toolbarCollapse}\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"Press ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Left Arrow\",upArrow:\"Up Arrow\",rightArrow:\"Right Arrow\",downArrow:\"Down Arrow\",insert:\"Insert\",\"delete\":\"Delete\",leftWindowKey:\"Left Windows key\",rightWindowKey:\"Right Windows key\",selectKey:\"Select key\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Multiply\",add:\"Add\",subtract:\"Subtract\",decimalPoint:\"Decimal Point\",divide:\"Divide\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Semicolon\",equalSign:\"Equal Sign\",comma:\"Comma\",dash:\"Dash\",period:\"Period\",forwardSlash:\"Forward Slash\",\ngraveAccent:\"Grave Accent\",openBracket:\"Open Bracket\",backSlash:\"Backslash\",closeBracket:\"Close Bracket\",singleQuote:\"Single Quote\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"tr\",{title:\"Erişilebilirlik Talimatları\",contents:\"Yardım içeriği. Bu pencereyi kapatmak için ESC tuşuna basın.\",legend:[{name:\"Genel\",items:[{name:\"Düzenleyici Araç Çubuğu\",legend:\"Araç çubuğunda gezinmek için ${toolbarFocus} basın. TAB ve SHIFT+TAB ile önceki ve sonraki araç çubuğu grubuna taşıyın. SAĞ OK veya SOL OK ile önceki ve sonraki bir araç çubuğu düğmesini hareket ettirin. SPACE tuşuna basın veya araç çubuğu düğmesini etkinleştirmek için ENTER tuşna basın.\"},\n{name:\"Diyalog Düzenleyici\",legend:\"Dialog penceresi içinde, sonraki iletişim alanına gitmek için SEKME tuşuna basın, önceki alana geçmek için SHIFT + TAB tuşuna basın, pencereyi göndermek için ENTER tuşuna basın, dialog penceresini iptal etmek için ESC tuşuna basın. Birden çok sekme sayfaları olan diyalogların, sekme listesine gitmek için ALT + F10 tuşlarına basın. Sonra TAB veya SAĞ OK sonraki sekmeye taşıyın. SHIFT + TAB veya SOL OK ile önceki sekmeye geçin. Sekme sayfayı seçmek için SPACE veya ENTER tuşuna basın.\"},\n{name:\"İçerik Menü Editörü\",legend:\"İçerik menüsünü açmak için ${contextMenu} veya UYGULAMA TUŞU'na basın. Daha sonra SEKME veya AŞAĞI OK ile bir sonraki menü seçeneği taşıyın. SHIFT + TAB veya YUKARI OK ile önceki seçeneğe gider. Menü seçeneğini seçmek için SPACE veya ENTER tuşuna basın. Seçili seçeneğin alt menüsünü SPACE ya da ENTER veya SAĞ OK açın. Üst menü öğesini geçmek için ESC veya SOL OK ile geri dönün. ESC ile bağlam menüsünü kapatın.\"},{name:\"Liste Kutusu Editörü\",legend:\"Liste kutusu içinde, bir sonraki liste öğesine SEKME VEYA AŞAĞI OK ile taşıyın. SHIFT+TAB veya YUKARI önceki liste öğesi taşıyın. Liste seçeneği seçmek için SPACE veya ENTER tuşuna basın. Liste kutusunu kapatmak için ESC tuşuna basın.\"},\n{name:\"Element Yol Çubuğu Editörü\",legend:\"Elementlerin yol çubuğunda gezinmek için ${ElementsPathFocus} basın. SEKME veya SAĞ OK ile sonraki element düğmesine taşıyın. SHIFT+TAB veya SOL OK önceki düğmeye hareket ettirin. Editör içindeki elementi seçmek için ENTER veya SPACE tuşuna basın.\"}]},{name:\"Komutlar\",items:[{name:\"Komutu geri al\",legend:\"$(undo)'ya basın\"},{name:\"Komutu geri al\",legend:\"${redo} basın\"},{name:\" Kalın komut\",legend:\"${bold} basın\"},{name:\" İtalik komutu\",legend:\"${italic} basın\"},\n{name:\" Alttan çizgi komutu\",legend:\"${underline} basın\"},{name:\" Bağlantı komutu\",legend:\"${link} basın\"},{name:\" Araç çubuğu Toplama komutu\",legend:\"${toolbarCollapse} basın\"},{name:\"Önceki komut alanına odaklan\",legend:\"Düzeltme imleçinden önce, en yakın uzaktaki alana erişmek için ${accessPreviousSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın.\"},{name:\"Sonraki komut alanına odaklan\",legend:\"Düzeltme imleçinden sonra, en yakın uzaktaki alana erişmek için ${accessNextSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın.\"},\n{name:\"Erişilebilirlik Yardımı\",legend:\"${a11yHelp}'e basın\"}]}],backspace:\"Silme\",tab:\"Sekme tuşu\",enter:\"Gir tuşu\",shift:'\"Shift\" Kaydırma tuşu',ctrl:'\"Ctrl\" Kontrol tuşu',alt:'\"Alt\" Anahtar tuşu',pause:\"Durdurma tuşu\",capslock:\"Büyük harf tuşu\",escape:\"Vazgeç tuşu\",pageUp:\"Sayfa Yukarı\",pageDown:\"Sayfa Aşağı\",end:\"Sona\",home:\"En başa\",leftArrow:\"Sol ok\",upArrow:\"Yukarı ok\",rightArrow:\"Sağ ok\",downArrow:\"Aşağı ok\",insert:\"Araya gir\",\"delete\":\"Silme\",leftWindowKey:\"Sol windows tuşu\",rightWindowKey:\"Sağ windows tuşu\",\nselectKey:\"Seçme tuşu\",numpad0:\"Nümerik 0\",numpad1:\"Nümerik 1\",numpad2:\"Nümerik 2\",numpad3:\"Nümerik 3\",numpad4:\"Nümerik 4\",numpad5:\"Nümerik 5\",numpad6:\"Nümerik 6\",numpad7:\"Nümerik 7\",numpad8:\"Nümerik 8\",numpad9:\"Nümerik 9\",multiply:\"Çarpma\",add:\"Toplama\",subtract:\"Çıkarma\",decimalPoint:\"Ondalık işareti\",divide:\"Bölme\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lk\",scrollLock:\"Scr Lk\",semiColon:\"Noktalı virgül\",equalSign:\"Eşittir\",\ncomma:\"Virgül\",dash:\"Eksi\",period:\"Nokta\",forwardSlash:\"İleri eğik çizgi\",graveAccent:\"Üst tırnak\",openBracket:\"Parantez aç\",backSlash:\"Ters eğik çizgi\",closeBracket:\"Parantez kapa\",singleQuote:\"Tek tırnak\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"tt\",{title:\"Accessibility Instructions\",contents:\"Help Contents. To close this dialog press ESC.\",legend:[{name:\"Гомуми\",items:[{name:\"Editor Toolbar\",legend:\"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.\"},{name:\"Editor Dialog\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Editor Context Menu\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.\"},{name:\"Editor List Box\",legend:\"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.\"},\n{name:\"Editor Element Path Bar\",legend:\"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.\"}]},{name:\"Командалар\",items:[{name:\"Кайтару\",legend:\"${undo} басыгыз\"},{name:\"Кабатлау\",legend:\"${redo} басыгыз\"},{name:\"Калын\",legend:\"${bold} басыгыз\"},{name:\"Курсив\",legend:\"${italic} басыгыз\"},{name:\"Астына сызылган\",legend:\"${underline} басыгыз\"},\n{name:\"Сылталама\",legend:\"${link} басыгыз\"},{name:\" Toolbar Collapse command\",legend:\"${toolbarCollapse} басыгыз\"},{name:\" Access previous focus space command\",legend:\"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},{name:\" Access next focus space command\",legend:\"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.\"},\n{name:\" Accessibility Help\",legend:\"${a11yHelp} басыгыз\"}]}],backspace:\"Кайтару\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Тыныш\",capslock:\"Caps Lock\",escape:\"Escape\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Сул якка ук\",upArrow:\"Өскә таба ук\",rightArrow:\"Уң якка ук\",downArrow:\"Аска таба ук\",insert:\"Өстәү\",\"delete\":\"Бетерү\",leftWindowKey:\"Сул Windows төймəсе\",rightWindowKey:\"Уң Windows төймəсе\",selectKey:\"Select төймəсе\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",\nnumpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Тапкырлау\",add:\"Кушу\",subtract:\"Алу\",decimalPoint:\"Унарлы нокта\",divide:\"Бүлү\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Нокталы өтер\",equalSign:\"Тигезлек билгесе\",comma:\"Өтер\",dash:\"Сызык\",period:\"Дәрәҗә\",forwardSlash:\"Кыек сызык\",\ngraveAccent:\"Гравис\",openBracket:\"Җәя ачу\",backSlash:\"Кире кыек сызык\",closeBracket:\"Җәя ябу\",singleQuote:\"Бер иңле куштырнаклар\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"ug\",{title:\"قوشۇمچە چۈشەندۈرۈش\",contents:\"ياردەم مەزمۇنى. بۇ سۆزلەشكۈنى ياپماقچى بولسىڭىز ESC نى بېسىڭ.\",legend:[{name:\"ئادەتتىكى\",items:[{name:\"قورال بالداق تەھرىر\",legend:\"${toolbarFocus} بېسىلسا قورال بالداققا يېتەكلەيدۇ، TAB ياكى SHIFT+TAB ئارقىلىق قورال بالداق گۇرۇپپىسى تاللىنىدۇ، ئوڭ سول يا ئوقتا توپچا تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تاللانغان توپچىنى قوللىنىدۇ.\"},{name:\"تەھرىرلىگۈچ سۆزلەشكۈسى\",legend:\"سۆزلەشكۈدە TAB كۇنۇپكىسىدا كېيىنكى سۆز بۆلىكىگە يۆتكىلىدۇ، SHIFT+TAB بىرىكمە كۇنۇپكىسىدا ئالدىنقى سۆز بۆلىكىگە يۆتكىلىدۇ، ENTER كۇنۇپكىسىدا سۆزلەشكۈنى تاپشۇرىدۇ، ESC كۇنۇپكىسى سۆزلەشكۈدىن ۋاز كېچىدۇ. كۆپ بەتكۈچلۈك سۆزلەشكۈگە نىسبەتەن، ALT+F10 دا بەتكۈچ تىزىمىغا يۆتكەيدۇ. ئاندىن TAB كۇنۇپكىسى ياكى ئوڭ يا ئوق كۇنۇپكىسى كېيىنكى بەتكۈچكە يۆتكەيدۇ؛SHIFT+ TAB كۇنۇپكىسى ياكى سول يا ئوق كۇنۇپكىسى ئالدىنقى بەتكۈچكە يۆتكەيدۇ. بوشلۇق كۇنۇپكىسى ياكى ENTER كۇنۇپكىسى بەتكۈچنى تاللايدۇ.\"},\n{name:\"تەھرىرلىگۈچ تىل مۇھىت تىزىملىكى\",legend:\"${contextMenu} ياكى ئەپ كۇنۇپكىسىدا تىل مۇھىت تىزىملىكىنى ئاچىدۇ. ئاندىن TAB ياكى ئاستى يا ئوق كۇنۇپكىسىدا كېيىنكى تىزىملىك تۈرىگە يۆتكەيدۇ؛ SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسىدا ئالدىنقى تىزىملىك تۈرىگە يۆتكەيدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىملىك تۈرىنى تاللايدۇ. بوشلۇق، ENTER ياكى ئوڭ يا ئوق كۇنۇپكىسىدا تارماق تىزىملىكنى ئاچىدۇ. قايتىش تىزىملىكىگە ESC ياكى سول يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ESC كۇنۇپكىسىدا تىل مۇھىت تىزىملىكى تاقىلىدۇ.\"},{name:\"تەھرىرلىگۈچ تىزىمى\",\nlegend:\"تىزىم قۇتىسىدا، كېيىنكى تىزىم تۈرىگە يۆتكەشتە TAB ياكى ئاستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ئالدىنقى تىزىم تۈرىگە يۆتكەشتە SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىم تۈرىنى تاللايدۇ.ESC كۇنۇپكىسىدا تىزىم قۇتىسىنى يىغىدۇ.\"},{name:\"تەھرىرلىگۈچ ئېلېمېنت يول بالداق\",legend:\"${elementsPathFocus} بېسىلسا ئېلېمېنت يول بالداققا يېتەكلەيدۇ، TAB ياكى ئوڭ يا ئوقتا كېيىنكى ئېلېمېنت تاللىنىدۇ، SHIFT+TAB ياكى سول يا ئوقتا ئالدىنقى ئېلېمېنت تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تەھرىرلىگۈچتىكى ئېلېمېنت تاللىنىدۇ.\"}]},\n{name:\"بۇيرۇق\",items:[{name:\"بۇيرۇقتىن يېنىۋال\",legend:\"${undo} نى بېسىڭ\"},{name:\"قايتىلاش بۇيرۇقى\",legend:\"${redo} نى بېسىڭ\"},{name:\"توملىتىش بۇيرۇقى\",legend:\"${bold} نى بېسىڭ\"},{name:\"يانتۇ بۇيرۇقى\",legend:\"${italic} نى بېسىڭ\"},{name:\"ئاستى سىزىق بۇيرۇقى\",legend:\"${underline} نى بېسىڭ\"},{name:\"ئۇلانما بۇيرۇقى\",legend:\"${link} نى بېسىڭ\"},{name:\"قورال بالداق قاتلاش بۇيرۇقى\",legend:\"${toolbarCollapse} نى بېسىڭ\"},{name:\"ئالدىنقى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق\",legend:\"${accessPreviousSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ ئالدىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ.\"},\n{name:\"كېيىنكى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق\",legend:\"${accessNextSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ كەينىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ.\"},{name:\"توسالغۇسىز لايىھە چۈشەندۈرۈشى\",legend:\"${a11yHelp} نى بېسىڭ\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Escape\",\npageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"سول يا ئوق\",upArrow:\"ئۈستى يا ئوق\",rightArrow:\"ئوڭ يا ئوق\",downArrow:\"ئاستى يا ئوق\",insert:\"قىستۇر\",\"delete\":\"ئۆچۈر\",leftWindowKey:\"سول Windows كۇنۇپكىسى\",rightWindowKey:\"ئوڭ Windows كۇنۇپكىسى\",selectKey:\"تاللاش كۇنۇپكىسى\",numpad0:\"سان تاختا 0\",numpad1:\"سان تاختا 1\",numpad2:\"سان تاختا 2\",numpad3:\"سان تاختا 3\",numpad4:\"سان تاختا 4\",numpad5:\"سان تاختا 5\",numpad6:\"سان تاختا 6\",numpad7:\"سان تاختا 7\",numpad8:\"سان تاختا 8\",numpad9:\"سان تاختا 9\",\nmultiply:\"يۇلتۇز كۇنۇپكىسى\",add:\"قوشۇش\",subtract:\"ئېلىش\",decimalPoint:\"كەسىر چېكىت\",divide:\"بۆلۈش\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"سان قۇلۇپ كۇنۇپكىسى\",scrollLock:\"سۈرگۈچ قۇلۇپ كۇنۇپكىسى\",semiColon:\"چېكىتلىك پەش\",equalSign:\"تەڭلىك بەلگىسى\",comma:\"پەش\",dash:\"سىزىقچە\",period:\"چېكىت\",forwardSlash:\"سولغا يانتۇ سىزىق\",graveAccent:\"ئۇرغۇ بەلگىسى\",openBracket:\"ئېچىلغان تىرناق\",backSlash:\"ئوڭغا يانتۇ سىزىق\",closeBracket:\"يېپىلغان تىرناق\",\nsingleQuote:\"يالاڭ پەش\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"uk\",{title:\"Спеціальні Інструкції\",contents:\"Довідка. Натисніть ESC і вона зникне.\",legend:[{name:\"Основне\",items:[{name:\"Панель Редактора\",legend:\"Натисніть ${toolbarFocus} для переходу до панелі інструментів. Для переміщення між групами панелі інструментів використовуйте TAB і SHIFT+TAB. Для переміщення між кнопками панелі іструментів використовуйте кнопки СТРІЛКА ВПРАВО або ВЛІВО. Натисніть ПРОПУСК або ENTER для запуску кнопки панелі інструментів.\"},{name:\"Діалог Редактора\",\nlegend:'Усередині діалогу, натисніть TAB щоб перейти до наступного елементу діалогу, натисніть SHIFT+TAB щоб перейти до попереднього елемента діалогу, натисніть ENTER щоб відправити діалог, натисніть ESC щоб скасувати діалог. Коли діалогове вікно має декілька вкладок, отримати доступ до панелі вкладок як частині діалогу можна натисканням або поєднання ALT+F10 або TAB, при цьому активні елементи діалогу будуть перебиратися з урахуванням порядку табуляції. При активній панелі вкладок, перехід до наступної або попередньої вкладці здійснюється натисканням стрілки \"ВПРАВО\" або стрілки \"ВЛЕВО\" відповідно.'},\n{name:\"Контекстне Меню Редактора\",legend:\"Press ${contextMenu} or APPLICATION KEY to open context-menu. Потім перейдіть до наступного пункту меню за допомогою TAB або СТРІЛКИ ВНИЗ. Натисніть ПРОПУСК або ENTER для вибору параметру меню. Відкрийте підменю поточного параметру, натиснувши ПРОПУСК або ENTER або СТРІЛКУ ВПРАВО. Перейдіть до батьківського елемента меню, натиснувши ESC або СТРІЛКУ ВЛІВО. Закрийте контекстне меню, натиснувши ESC.\"},{name:\"Скринька Списків Редактора\",legend:\"Усередині списку, перехід до наступного пункту списку виконується клавішею TAB або СТРІЛКА ВНИЗ. Перехід до попереднього елемента списку клавішею SHIFT+TAB або СТРІЛКА ВГОРУ. Натисніть ПРОПУСК або ENTER, щоб вибрати параметр списку. Натисніть клавішу ESC, щоб закрити список.\"},\n{name:\"Шлях до елемента редактора\",legend:\"Натисніть ${elementsPathFocus} для навігації між елементами панелі. Перейдіть до наступного елемента кнопкою TAB або СТРІЛКА ВПРАВО. Перейдіть до попереднього елемента кнопкою SHIFT+TAB або СТРІЛКА ВЛІВО. Натисніть ПРОПУСК або ENTER для вибору елемента в редакторі.\"}]},{name:\"Команди\",items:[{name:\"Відмінити команду\",legend:\"Натисніть ${undo}\"},{name:\"Повторити\",legend:\"Натисніть ${redo}\"},{name:\"Жирний\",legend:\"Натисніть ${bold}\"},{name:\"Курсив\",legend:\"Натисніть ${italic}\"},\n{name:\"Підкреслений\",legend:\"Натисніть ${underline}\"},{name:\"Посилання\",legend:\"Натисніть ${link}\"},{name:\"Згорнути панель інструментів\",legend:\"Натисніть ${toolbarCollapse}\"},{name:\"Доступ до попереднього місця фокусування\",legend:\"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування перед кареткою, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування.\"},{name:\"Доступ до наступного місця фокусування\",legend:\"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування після каретки, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування.\"},\n{name:\"Допомога з доступності\",legend:\"Натисніть ${a11yHelp}\"}]}],backspace:\"Backspace\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Esc\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",leftArrow:\"Ліва стрілка\",upArrow:\"Стрілка вгору\",rightArrow:\"Права стрілка\",downArrow:\"Стрілка вниз\",insert:\"Вставити\",\"delete\":\"Видалити\",leftWindowKey:\"Ліва клавіша Windows\",rightWindowKey:\"Права клавіша Windows\",selectKey:\"Виберіть клавішу\",numpad0:\"Numpad 0\",\nnumpad1:\"Numpad 1\",numpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"Множення\",add:\"Додати\",subtract:\"Віднімання\",decimalPoint:\"Десяткова кома\",divide:\"Ділення\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Крапка з комою\",equalSign:\"Знак рівності\",comma:\"Кома\",dash:\"Тире\",period:\"Період\",\nforwardSlash:\"Коса риска\",graveAccent:\"Гравіс\",openBracket:\"Відкрити дужку\",backSlash:\"Зворотна коса риска\",closeBracket:\"Закрити дужку\",singleQuote:\"Одинарні лапки\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"vi\",{title:\"Hướng dẫn trợ năng\",contents:\"Nội dung Hỗ trợ. Nhấn ESC để đóng hộp thoại.\",legend:[{name:\"Chung\",items:[{name:\"Thanh công cụ soạn thảo\",legend:\"Nhấn ${toolbarFocus} để điều hướng đến thanh công cụ. Nhấn TAB và SHIFT+TAB để chuyển đến nhóm thanh công cụ khác. Nhấn MŨI TÊN PHẢI hoặc MŨI TÊN TRÁI để chuyển sang nút khác trên thanh công cụ. Nhấn PHÍM CÁCH hoặc ENTER để kích hoạt nút trên thanh công cụ.\"},{name:\"Hộp thoại Biên t\",legend:\"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.\"},\n{name:\"Trình đơn Ngữ cảnh cBộ soạn thảo\",legend:\"Nhấn ${contextMenu} hoặc PHÍM ỨNG DỤNG để mở thực đơn ngữ cảnh. Sau đó nhấn TAB hoặc MŨI TÊN XUỐNG để di chuyển đến tuỳ chọn tiếp theo của thực đơn. Nhấn SHIFT+TAB hoặc MŨI TÊN LÊN để quay lại tuỳ chọn trước. Nhấn DẤU CÁCH hoặc ENTER để chọn tuỳ chọn của thực đơn. Nhấn DẤU CÁCH hoặc ENTER hoặc MŨI TÊN SANG PHẢI để mở thực đơn con của tuỳ chọn hiện tại. Nhấn ESC hoặc MŨI TÊN SANG TRÁI để quay trở lại thực đơn gốc. Nhấn ESC để đóng thực đơn ngữ cảnh.\"},\n{name:\"Hộp danh sách trình biên tập\",legend:\"Trong một danh sách chọn, di chuyển đối tượng tiếp theo với phím TAB hoặc phím mũi tên hướng xuống. Di chuyển đến đối tượng trước đó bằng cách nhấn tổ hợp phím SHIFT+TAB hoặc mũi tên hướng lên. Phím khoảng cách hoặc phím ENTER để chọn các tùy chọn trong danh sách. Nhấn phím ESC để đóng lại danh sách chọn.\"},{name:\"Thanh đường dẫn các đối tượng\",legend:\"Nhấn ${elementsPathFocus} để điều hướng các đối tượng trong thanh đường dẫn. Di chuyển đến đối tượng tiếp theo bằng phím TAB hoặc phím mũi tên bên phải. Di chuyển đến đối tượng trước đó bằng tổ hợp phím SHIFT+TAB hoặc phím mũi tên bên trái. Nhấn phím khoảng cách hoặc ENTER để chọn đối tượng trong trình soạn thảo.\"}]},\n{name:\"Lệnh\",items:[{name:\"Làm lại lện\",legend:\"Ấn ${undo}\"},{name:\"Làm lại lệnh\",legend:\"Ấn ${redo}\"},{name:\"Lệnh in đậm\",legend:\"Ấn ${bold}\"},{name:\"Lệnh in nghiêng\",legend:\"Ấn ${italic}\"},{name:\"Lệnh gạch dưới\",legend:\"Ấn ${underline}\"},{name:\"Lệnh liên kết\",legend:\"Nhấn ${link}\"},{name:\"Lệnh hiển thị thanh công cụ\",legend:\"Nhấn${toolbarCollapse}\"},{name:\"Truy cập đến lệnh tập trung vào khoảng cách trước đó\",legend:\"Ấn ${accessPreviousSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách.\"},\n{name:\"Truy cập phần đối tượng lệnh khoảng trống\",legend:\"Ấn ${accessNextSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách.\"},{name:\"Trợ giúp liên quan\",legend:\"Nhấn ${a11yHelp}\"}]}],backspace:\"Phím Backspace\",tab:\"Phím Tab\",enter:\"Phím Tab\",shift:\"Phím Shift\",ctrl:\"Phím Ctrl\",alt:\"Phím Alt\",pause:\"Phím Pause\",capslock:\"Phím Caps Lock\",\nescape:\"Phím Escape\",pageUp:\"Phím Page Up\",pageDown:\"Phím Page Down\",end:\"Phím End\",home:\"Phím Home\",leftArrow:\"Phím Left Arrow\",upArrow:\"Phím Up Arrow\",rightArrow:\"Phím Right Arrow\",downArrow:\"Phím Down Arrow\",insert:\"Chèn\",\"delete\":\"Xóa\",leftWindowKey:\"Phím Left Windows\",rightWindowKey:\"Phím Right Windows \",selectKey:\"Chọn phím\",numpad0:\"Phím 0\",numpad1:\"Phím 1\",numpad2:\"Phím 2\",numpad3:\"Phím 3\",numpad4:\"Phím 4\",numpad5:\"Phím 5\",numpad6:\"Phím 6\",numpad7:\"Phím 7\",numpad8:\"Phím 8\",numpad9:\"Phím 9\",\nmultiply:\"Nhân\",add:\"Thêm\",subtract:\"Trừ\",decimalPoint:\"Điểm số thập phân\",divide:\"Chia\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",f11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"Dấu chấm phẩy\",equalSign:\"Đăng nhập bằng\",comma:\"Dấu phẩy\",dash:\"Dấu gạch ngang\",period:\"Phím .\",forwardSlash:\"Phím /\",graveAccent:\"Phím `\",openBracket:\"Open Bracket\",backSlash:\"Dấu gạch chéo ngược\",closeBracket:\"Gần giá đỡ\",singleQuote:\"Trích dẫn\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"zh-cn\",{title:\"辅助功能说明\",contents:\"帮助内容。要关闭此对话框请按 ESC 键。\",legend:[{name:\"常规\",items:[{name:\"编辑器工具栏\",legend:\"按 ${toolbarFocus} 切换到工具栏，使用 TAB 键和 SHIFT+TAB 组合键移动到上一个和下一个工具栏组。使用左右箭头键移动到上一个或下一个工具栏按钮。按空格键或回车键以选中工具栏按钮。\"},{name:\"编辑器对话框\",legend:\"在对话框内，按 TAB 键移动到下一个字段，按 SHIFT + TAB 组合键移动到上一个字段，按 ENTER 键提交对话框，按 ESC 键取消对话框。对于有多选项卡的对话框，可以按 ALT + F10 直接切换到或者按 TAB 键逐步移到选项卡列表，当焦点移到选项卡列表时可以用左右箭头键来移动到前后的选项卡。\"},{name:\"编辑器上下文菜单\",legend:\"用 ${contextMenu} 或者“应用程序键”打开上下文菜单。然后用 TAB 键或者下箭头键来移动到下一个菜单项；SHIFT + TAB 组合键或者上箭头键移动到上一个菜单项。用 SPACE 键或者 ENTER 键选择菜单项。用 SPACE 键，ENTER 键或者右箭头键打开子菜单。返回菜单用 ESC 键或者左箭头键。用 ESC 键关闭上下文菜单。\"},\n{name:\"编辑器列表框\",legend:\"在列表框中，移到下一列表项用 TAB 键或者下箭头键。移到上一列表项用SHIFT+TAB 组合键或者上箭头键，用 SPACE 键或者 ENTER 键选择列表项。用 ESC 键收起列表框。\"},{name:\"编辑器元素路径栏\",legend:\"按 ${elementsPathFocus} 以导航到元素路径栏，使用 TAB 键或右箭头键选择下一个元素，使用 SHIFT+TAB 组合键或左箭头键选择上一个元素，按空格键或回车键以选定编辑器里的元素。\"}]},{name:\"命令\",items:[{name:\" 撤消命令\",legend:\"按 ${undo}\"},{name:\" 重做命令\",legend:\"按 ${redo}\"},{name:\" 加粗命令\",legend:\"按 ${bold}\"},{name:\" 倾斜命令\",legend:\"按 ${italic}\"},{name:\" 下划线命令\",legend:\"按 ${underline}\"},{name:\" 链接命令\",legend:\"按 ${link}\"},{name:\" 工具栏折叠命令\",legend:\"按 ${toolbarCollapse}\"},\n{name:\"访问前一个焦点区域的命令\",legend:\"按 ${accessPreviousSpace} 访问^符号前最近的不可访问的焦点区域，例如：两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。\"},{name:\"访问下一个焦点区域命令\",legend:\"按 ${accessNextSpace} 以访问^符号后最近的不可访问的焦点区域。例如：两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。\"},{name:\"辅助功能帮助\",legend:\"按 ${a11yHelp}\"}]}],backspace:\"退格键\",tab:\"Tab 键\",enter:\"回车键\",shift:\"Shift 键\",ctrl:\"Ctrl 键\",alt:\"Alt 键\",pause:\"暂停键\",capslock:\"大写锁定键\",escape:\"Esc 键\",pageUp:\"上翻页键\",pageDown:\"下翻页键\",end:\"行尾键\",home:\"行首键\",leftArrow:\"向左箭头键\",upArrow:\"向上箭头键\",rightArrow:\"向右箭头键\",downArrow:\"向下箭头键\",\ninsert:\"插入键\",\"delete\":\"删除键\",leftWindowKey:\"左 WIN 键\",rightWindowKey:\"右 WIN 键\",selectKey:\"选择键\",numpad0:\"小键盘 0 键\",numpad1:\"小键盘 1 键\",numpad2:\"小键盘 2 键\",numpad3:\"小键盘 3 键\",numpad4:\"小键盘 4 键\",numpad5:\"小键盘 5 键\",numpad6:\"小键盘 6 键\",numpad7:\"小键盘 7 键\",numpad8:\"小键盘 8 键\",numpad9:\"小键盘 9 键\",multiply:\"星号键\",add:\"加号键\",subtract:\"减号键\",decimalPoint:\"小数点键\",divide:\"除号键\",f1:\"F1 键\",f2:\"F2 键\",f3:\"F3 键\",f4:\"F4 键\",f5:\"F5 键\",f6:\"F6 键\",f7:\"F7 键\",f8:\"F8 键\",f9:\"F9 键\",f10:\"F10 键\",f11:\"F11 键\",f12:\"F12 键\",numLock:\"数字锁定键\",scrollLock:\"滚动锁定键\",\nsemiColon:\"分号键\",equalSign:\"等号键\",comma:\"逗号键\",dash:\"短划线键\",period:\"句号键\",forwardSlash:\"斜杠键\",graveAccent:\"重音符键\",openBracket:\"左中括号键\",backSlash:\"反斜杠键\",closeBracket:\"右中括号键\",singleQuote:\"单引号键\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"a11yhelp\",\"zh\",{title:\"輔助工具指南\",contents:\"說明內容。若要關閉此對話框請按「ESC」。\",legend:[{name:\"一般\",items:[{name:\"編輯器工具列\",legend:\"請按 ${toolbarFocus} 以導覽到工具列。利用 TAB 或 SHIFT+TAB 以便移動到下一個及前一個工具列群組。利用右方向鍵或左方向鍵以便移動到下一個及上一個工具列按鈕。按下空白鍵或 ENTER 鍵啟用工具列按鈕。\"},{name:\"編輯器對話方塊\",legend:\"在對話框中，按下 TAB 鍵以導覽到下一個對話框元素，按下 SHIFT+TAB 以移動到上一個對話框元素，按下 ENTER 以遞交對話框，按下 ESC 以取消對話框。當對話框有多個分頁時，可以使用 ALT+F10 或是在對話框分頁順序中的一部份按下 TAB 以使用分頁列表。焦點在分頁列表上時，分別使用右方向鍵及左方向鍵移動到下一個及上一個分頁。\"},{name:\"編輯器內容功能表\",legend:\"請按下「${contextMenu}」或是「應用程式鍵」以開啟內容選單。以「TAB」或是「↓」鍵移動到下一個選單選項。以「SHIFT + TAB」或是「↑」鍵移動到上一個選單選項。按下「空白鍵」或是「ENTER」鍵以選取選單選項。以「空白鍵」或「ENTER」或「→」開啟目前選項之子選單。以「ESC」或「←」回到父選單。以「ESC」鍵關閉內容選單」。\"},\n{name:\"編輯器清單方塊\",legend:\"在清單方塊中，使用 TAB 或下方向鍵移動到下一個列表項目。使用 SHIFT+TAB 或上方向鍵移動到上一個列表項目。按下空白鍵或 ENTER 以選取列表選項。按下 ESC 以關閉清單方塊。\"},{name:\"編輯器元件路徑工具列\",legend:\"請按 ${elementsPathFocus} 以瀏覽元素路徑列。利用 TAB 或右方向鍵以便移動到下一個元素按鈕。利用 SHIFT 或左方向鍵以便移動到上一個按鈕。按下空白鍵或 ENTER 鍵來選取在編輯器中的元素。\"}]},{name:\"命令\",items:[{name:\"復原命令\",legend:\"請按下「${undo}」\"},{name:\"重複命令\",legend:\"請按下「 ${redo}」\"},{name:\"粗體命令\",legend:\"請按下「${bold}」\"},{name:\"斜體\",legend:\"請按下「${italic}」\"},{name:\"底線命令\",legend:\"請按下「${underline}」\"},{name:\"連結\",legend:\"請按下「${link}」\"},\n{name:\"隱藏工具列\",legend:\"請按下「${toolbarCollapse}」\"},{name:\"存取前一個焦點空間命令\",legend:\"請按下 ${accessPreviousSpace} 以存取最近但無法靠近之插字符號前的焦點空間。舉例：二個相鄰的 HR 元素。\\r\\n重複按鍵以存取較遠的焦點空間。\"},{name:\"存取下一個焦點空間命令\",legend:\"請按下 ${accessNextSpace} 以存取最近但無法靠近之插字符號後的焦點空間。舉例：二個相鄰的 HR 元素。\\r\\n重複按鍵以存取較遠的焦點空間。\"},{name:\"協助工具說明\",legend:\"請按下「${a11yHelp}」\"}]}],backspace:\"退格鍵\",tab:\"Tab\",enter:\"Enter\",shift:\"Shift\",ctrl:\"Ctrl\",alt:\"Alt\",pause:\"Pause\",capslock:\"Caps Lock\",escape:\"Esc\",pageUp:\"Page Up\",pageDown:\"Page Down\",end:\"End\",home:\"Home\",\nleftArrow:\"向左箭號\",upArrow:\"向上鍵號\",rightArrow:\"向右鍵號\",downArrow:\"向下鍵號\",insert:\"插入\",\"delete\":\"刪除\",leftWindowKey:\"左方 Windows 鍵\",rightWindowKey:\"右方 Windows 鍵\",selectKey:\"選擇鍵\",numpad0:\"Numpad 0\",numpad1:\"Numpad 1\",numpad2:\"Numpad 2\",numpad3:\"Numpad 3\",numpad4:\"Numpad 4\",numpad5:\"Numpad 5\",numpad6:\"Numpad 6\",numpad7:\"Numpad 7\",numpad8:\"Numpad 8\",numpad9:\"Numpad 9\",multiply:\"乘號\",add:\"新增\",subtract:\"減號\",decimalPoint:\"小數點\",divide:\"除號\",f1:\"F1\",f2:\"F2\",f3:\"F3\",f4:\"F4\",f5:\"F5\",f6:\"F6\",f7:\"F7\",f8:\"F8\",f9:\"F9\",f10:\"F10\",\nf11:\"F11\",f12:\"F12\",numLock:\"Num Lock\",scrollLock:\"Scroll Lock\",semiColon:\"分號\",equalSign:\"等號\",comma:\"逗號\",dash:\"虛線\",period:\"句點\",forwardSlash:\"斜線\",graveAccent:\"抑音符號\",openBracket:\"左方括號\",backSlash:\"反斜線\",closeBracket:\"右方括號\",singleQuote:\"單引號\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/about/dialogs/about.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.dialog.add(\"about\",function(a){a=a.lang.about;var b=CKEDITOR.getUrl(CKEDITOR.plugins.get(\"about\").path+\"dialogs/\"+(CKEDITOR.env.hidpi?\"hidpi/\":\"\")+\"logo_ckeditor.png\");return{title:CKEDITOR.env.ie?a.dlgTitle:a.title,minWidth:390,minHeight:230,contents:[{id:\"tab1\",label:\"\",title:\"\",expand:!0,padding:0,elements:[{type:\"html\",html:'\\x3cstyle type\\x3d\"text/css\"\\x3e.cke_about_container{color:#000 !important;padding:10px 10px 0;margin-top:5px}.cke_about_container p{margin: 0 0 10px;}.cke_about_container .cke_about_logo{height:81px;background-color:#fff;background-image:url('+\nb+\");\"+(CKEDITOR.env.hidpi?\"background-size:163px 58px;\":\"\")+'background-position:center; background-repeat:no-repeat;margin-bottom:10px;}.cke_about_container a{cursor:pointer !important;color:#00B2CE !important;text-decoration:underline !important;}\\x3c/style\\x3e\\x3cdiv class\\x3d\"cke_about_container\"\\x3e\\x3cdiv class\\x3d\"cke_about_logo\"\\x3e\\x3c/div\\x3e\\x3cp\\x3eCKEditor '+CKEDITOR.version+\" (revision \"+CKEDITOR.revision+')\\x3cbr\\x3e\\x3ca target\\x3d\"_blank\" href\\x3d\"http://ckeditor.com/\"\\x3ehttp://ckeditor.com\\x3c/a\\x3e\\x3c/p\\x3e\\x3cp\\x3e'+\na.help.replace(\"$1\",'\\x3ca target\\x3d\"_blank\" href\\x3d\"http://docs.ckeditor.com/user\"\\x3e'+a.userGuide+\"\\x3c/a\\x3e\")+\"\\x3c/p\\x3e\\x3cp\\x3e\"+a.moreInfo+'\\x3cbr\\x3e\\x3ca target\\x3d\"_blank\" href\\x3d\"http://ckeditor.com/about/license\"\\x3ehttp://ckeditor.com/about/license\\x3c/a\\x3e\\x3c/p\\x3e\\x3cp\\x3e'+a.copy.replace(\"$1\",'\\x3ca target\\x3d\"_blank\" href\\x3d\"http://cksource.com/\"\\x3eCKSource\\x3c/a\\x3e - Frederico Knabben')+\"\\x3c/p\\x3e\\x3c/div\\x3e\"}]}],buttons:[CKEDITOR.dialog.cancelButton]}});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/clipboard/dialogs/paste.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.dialog.add(\"paste\",function(c){function k(a){var b=new CKEDITOR.dom.document(a.document),g=b.getBody(),d=b.getById(\"cke_actscrpt\");d&&d.remove();g.setAttribute(\"contenteditable\",!0);g.on(e.mainPasteEvent,function(a){a=e.initPasteDataTransfer(a);f?a!=f&&(f=e.initPasteDataTransfer()):f=a});if(CKEDITOR.env.ie&&8>CKEDITOR.env.version)b.getWindow().on(\"blur\",function(){b.$.selection.empty()});b.on(\"keydown\",function(a){a=a.data;var b;switch(a.getKeystroke()){case 27:this.hide();b=1;break;case 9:case CKEDITOR.SHIFT+\n9:this.changeFocus(1),b=1}b&&a.preventDefault()},this);c.fire(\"ariaWidget\",new CKEDITOR.dom.element(a.frameElement));b.getWindow().getFrame().removeCustomData(\"pendingFocus\")&&g.focus()}var h=c.lang.clipboard,e=CKEDITOR.plugins.clipboard,f;c.on(\"pasteDialogCommit\",function(a){a.data&&c.fire(\"paste\",{type:\"auto\",dataValue:a.data.dataValue,method:\"paste\",dataTransfer:a.data.dataTransfer||e.initPasteDataTransfer()})},null,null,1E3);return{title:h.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:\n350,minHeight:CKEDITOR.env.quirks?250:245,onShow:function(){this.parts.dialog.$.offsetHeight;this.setupContent();this.parts.title.setHtml(this.customTitle||h.title);this.customTitle=null},onLoad:function(){(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&\"rtl\"==c.lang.dir&&this.parts.contents.setStyle(\"overflow\",\"hidden\")},onOk:function(){this.commitContent()},contents:[{id:\"general\",label:c.lang.common.generalTab,elements:[{type:\"html\",id:\"securityMsg\",html:'\\x3cdiv style\\x3d\"white-space:normal;width:340px\"\\x3e'+\nh.securityMsg+\"\\x3c/div\\x3e\"},{type:\"html\",id:\"pasteMsg\",html:'\\x3cdiv style\\x3d\"white-space:normal;width:340px\"\\x3e'+h.pasteMsg+\"\\x3c/div\\x3e\"},{type:\"html\",id:\"editing_area\",style:\"width:100%;height:100%\",html:\"\",focus:function(){var a=this.getInputElement(),b=a.getFrameDocument().getBody();!b||b.isReadOnly()?a.setCustomData(\"pendingFocus\",1):b.focus()},setup:function(){var a=this.getDialog(),b='\\x3chtml dir\\x3d\"'+c.config.contentsLangDirection+'\" lang\\x3d\"'+(c.config.contentsLanguage||c.langCode)+\n'\"\\x3e\\x3chead\\x3e\\x3cstyle\\x3ebody{margin:3px;height:95%;word-break:break-all;}\\x3c/style\\x3e\\x3c/head\\x3e\\x3cbody\\x3e\\x3cscript id\\x3d\"cke_actscrpt\" type\\x3d\"text/javascript\"\\x3ewindow.parent.CKEDITOR.tools.callFunction('+CKEDITOR.tools.addFunction(k,a)+\",this);\\x3c/script\\x3e\\x3c/body\\x3e\\x3c/html\\x3e\",g=CKEDITOR.env.air?\"javascript:void(0)\":CKEDITOR.env.ie&&!CKEDITOR.env.edge?\"javascript:void((function(){\"+encodeURIComponent(\"document.open();(\"+CKEDITOR.tools.fixDomain+\")();document.close();\")+\n'})())\"':\"\",d=CKEDITOR.dom.element.createFromHtml('\\x3ciframe class\\x3d\"cke_pasteframe\" frameborder\\x3d\"0\"  allowTransparency\\x3d\"true\" src\\x3d\"'+g+'\" aria-label\\x3d\"'+h.pasteArea+'\" aria-describedby\\x3d\"'+a.getContentElement(\"general\",\"pasteMsg\").domId+'\"\\x3e\\x3c/iframe\\x3e');f=null;d.on(\"load\",function(a){a.removeListener();a=d.getFrameDocument();a.write(b);c.focusManager.add(a.getBody());CKEDITOR.env.air&&k.call(this,a.getWindow().$)},a);d.setCustomData(\"dialog\",a);a=this.getElement();a.setHtml(\"\");\na.append(d);if(CKEDITOR.env.ie&&!CKEDITOR.env.edge){var e=CKEDITOR.dom.element.createFromHtml('\\x3cspan tabindex\\x3d\"-1\" style\\x3d\"position:absolute\" role\\x3d\"presentation\"\\x3e\\x3c/span\\x3e');e.on(\"focus\",function(){setTimeout(function(){d.$.contentWindow.focus()})});a.append(e);this.focus=function(){e.focus();this.fire(\"focus\")}}this.getInputElement=function(){return d};CKEDITOR.env.ie&&(a.setStyle(\"display\",\"block\"),a.setStyle(\"height\",d.$.offsetHeight+2+\"px\"))},commit:function(){var a=this.getDialog().getParentEditor(),\nb=this.getInputElement().getFrameDocument().getBody(),c=b.getBogus(),d;c&&c.remove();d=b.getHtml();setTimeout(function(){a.fire(\"pasteDialogCommit\",{dataValue:d,dataTransfer:f||e.initPasteDataTransfer()})},0)}}]}]}});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/dialog/dialogDefinition.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/image/dialogs/image.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n(function(){var v=function(d,l){function v(){var a=arguments,b=this.getContentElement(\"advanced\",\"txtdlgGenStyle\");b&&b.commit.apply(b,a);this.foreach(function(b){b.commit&&\"txtdlgGenStyle\"!=b.id&&b.commit.apply(b,a)})}function k(a){if(!w){w=1;var b=this.getDialog(),c=b.imageElement;if(c){this.commit(1,c);a=[].concat(a);for(var d=a.length,f,g=0;g<d;g++)(f=b.getContentElement.apply(b,a[g].split(\":\")))&&f.setup(1,c)}w=0}}var m=/^\\s*(\\d+)((px)|\\%)?\\s*$/i,z=/(^\\s*(\\d+)((px)|\\%)?\\s*$)|^$/i,r=/^\\d+px$/,\nA=function(){var a=this.getValue(),b=this.getDialog(),c=a.match(m);c&&(\"%\"==c[2]&&n(b,!1),a=c[1]);b.lockRatio&&(c=b.originalElement,\"true\"==c.getCustomData(\"isReady\")&&(\"txtHeight\"==this.id?(a&&\"0\"!=a&&(a=Math.round(a/c.$.height*c.$.width)),isNaN(a)||b.setValueOf(\"info\",\"txtWidth\",a)):(a&&\"0\"!=a&&(a=Math.round(a/c.$.width*c.$.height)),isNaN(a)||b.setValueOf(\"info\",\"txtHeight\",a))));e(b)},e=function(a){if(!a.originalElement||!a.preview)return 1;a.commitContent(4,a.preview);return 0},w,n=function(a,\nb){if(!a.getContentElement(\"info\",\"ratioLock\"))return null;var c=a.originalElement;if(!c)return null;if(\"check\"==b){if(!a.userlockRatio&&\"true\"==c.getCustomData(\"isReady\")){var d=a.getValueOf(\"info\",\"txtWidth\"),f=a.getValueOf(\"info\",\"txtHeight\"),c=1E3*c.$.width/c.$.height,g=1E3*d/f;a.lockRatio=!1;d||f?isNaN(c)||isNaN(g)||Math.round(c)!=Math.round(g)||(a.lockRatio=!0):a.lockRatio=!0}}else void 0!==b?a.lockRatio=b:(a.userlockRatio=1,a.lockRatio=!a.lockRatio);d=CKEDITOR.document.getById(t);a.lockRatio?\nd.removeClass(\"cke_btn_unlocked\"):d.addClass(\"cke_btn_unlocked\");d.setAttribute(\"aria-checked\",a.lockRatio);CKEDITOR.env.hc&&d.getChild(0).setHtml(a.lockRatio?CKEDITOR.env.ie?\"■\":\"▣\":CKEDITOR.env.ie?\"□\":\"▢\");return a.lockRatio},B=function(a,b){var c=a.originalElement;if(\"true\"==c.getCustomData(\"isReady\")){var d=a.getContentElement(\"info\",\"txtWidth\"),f=a.getContentElement(\"info\",\"txtHeight\"),g;b?c=g=0:(g=c.$.width,c=c.$.height);d&&d.setValue(g);f&&f.setValue(c)}e(a)},C=function(a,b){function c(a,b){var c=\na.match(m);return c?(\"%\"==c[2]&&(c[1]+=\"%\",n(d,!1)),c[1]):b}if(1==a){var d=this.getDialog(),f=\"\",g=\"txtWidth\"==this.id?\"width\":\"height\",e=b.getAttribute(g);e&&(f=c(e,f));f=c(b.getStyle(g),f);this.setValue(f)}},x,u=function(){var a=this.originalElement,b=CKEDITOR.document.getById(p);a.setCustomData(\"isReady\",\"true\");a.removeListener(\"load\",u);a.removeListener(\"error\",h);a.removeListener(\"abort\",h);b&&b.setStyle(\"display\",\"none\");this.dontResetSize||B(this,!1===d.config.image_prefillDimensions);this.firstLoad&&\nCKEDITOR.tools.setTimeout(function(){n(this,\"check\")},0,this);this.dontResetSize=this.firstLoad=!1;e(this)},h=function(){var a=this.originalElement,b=CKEDITOR.document.getById(p);a.removeListener(\"load\",u);a.removeListener(\"error\",h);a.removeListener(\"abort\",h);a=CKEDITOR.getUrl(CKEDITOR.plugins.get(\"image\").path+\"images/noimage.png\");this.preview&&this.preview.setAttribute(\"src\",a);b&&b.setStyle(\"display\",\"none\");n(this,!1)},q=function(a){return CKEDITOR.tools.getNextId()+\"_\"+a},t=q(\"btnLockSizes\"),\ny=q(\"btnResetSize\"),p=q(\"ImagePreviewLoader\"),E=q(\"previewLink\"),D=q(\"previewImage\");return{title:d.lang.image[\"image\"==l?\"title\":\"titleButton\"],minWidth:420,minHeight:360,onShow:function(){this.linkEditMode=this.imageEditMode=this.linkElement=this.imageElement=!1;this.lockRatio=!0;this.userlockRatio=0;this.dontResetSize=!1;this.firstLoad=!0;this.addLink=!1;var a=this.getParentEditor(),b=a.getSelection(),c=(b=b&&b.getSelectedElement())&&a.elementPath(b).contains(\"a\",1),d=CKEDITOR.document.getById(p);\nd&&d.setStyle(\"display\",\"none\");x=new CKEDITOR.dom.element(\"img\",a.document);this.preview=CKEDITOR.document.getById(D);this.originalElement=a.document.createElement(\"img\");this.originalElement.setAttribute(\"alt\",\"\");this.originalElement.setCustomData(\"isReady\",\"false\");c&&(this.linkElement=c,this.addLink=this.linkEditMode=!0,a=c.getChildren(),1==a.count()&&(d=a.getItem(0),d.type==CKEDITOR.NODE_ELEMENT&&(d.is(\"img\")||d.is(\"input\"))&&(this.imageElement=a.getItem(0),this.imageElement.is(\"img\")?this.imageEditMode=\n\"img\":this.imageElement.is(\"input\")&&(this.imageEditMode=\"input\"))),\"image\"==l&&this.setupContent(2,c));if(this.customImageElement)this.imageEditMode=\"img\",this.imageElement=this.customImageElement,delete this.customImageElement;else if(b&&\"img\"==b.getName()&&!b.data(\"cke-realelement\")||b&&\"input\"==b.getName()&&\"image\"==b.getAttribute(\"type\"))this.imageEditMode=b.getName(),this.imageElement=b;this.imageEditMode&&(this.cleanImageElement=this.imageElement,this.imageElement=this.cleanImageElement.clone(!0,\n!0),this.setupContent(1,this.imageElement));n(this,!0);CKEDITOR.tools.trim(this.getValueOf(\"info\",\"txtUrl\"))||(this.preview.removeAttribute(\"src\"),this.preview.setStyle(\"display\",\"none\"))},onOk:function(){if(this.imageEditMode){var a=this.imageEditMode;\"image\"==l&&\"input\"==a&&confirm(d.lang.image.button2Img)?(this.imageElement=d.document.createElement(\"img\"),this.imageElement.setAttribute(\"alt\",\"\"),d.insertElement(this.imageElement)):\"image\"!=l&&\"img\"==a&&confirm(d.lang.image.img2Button)?(this.imageElement=\nd.document.createElement(\"input\"),this.imageElement.setAttributes({type:\"image\",alt:\"\"}),d.insertElement(this.imageElement)):(this.imageElement=this.cleanImageElement,delete this.cleanImageElement)}else\"image\"==l?this.imageElement=d.document.createElement(\"img\"):(this.imageElement=d.document.createElement(\"input\"),this.imageElement.setAttribute(\"type\",\"image\")),this.imageElement.setAttribute(\"alt\",\"\");this.linkEditMode||(this.linkElement=d.document.createElement(\"a\"));this.commitContent(1,this.imageElement);\nthis.commitContent(2,this.linkElement);this.imageElement.getAttribute(\"style\")||this.imageElement.removeAttribute(\"style\");this.imageEditMode?!this.linkEditMode&&this.addLink?(d.insertElement(this.linkElement),this.imageElement.appendTo(this.linkElement)):this.linkEditMode&&!this.addLink&&(d.getSelection().selectElement(this.linkElement),d.insertElement(this.imageElement)):this.addLink?this.linkEditMode?this.linkElement.equals(d.getSelection().getSelectedElement())?(this.linkElement.setHtml(\"\"),this.linkElement.append(this.imageElement,\n!1)):d.insertElement(this.imageElement):(d.insertElement(this.linkElement),this.linkElement.append(this.imageElement,!1)):d.insertElement(this.imageElement)},onLoad:function(){\"image\"!=l&&this.hidePage(\"Link\");var a=this._.element.getDocument();this.getContentElement(\"info\",\"ratioLock\")&&(this.addFocusable(a.getById(y),5),this.addFocusable(a.getById(t),5));this.commitContent=v},onHide:function(){this.preview&&this.commitContent(8,this.preview);this.originalElement&&(this.originalElement.removeListener(\"load\",\nu),this.originalElement.removeListener(\"error\",h),this.originalElement.removeListener(\"abort\",h),this.originalElement.remove(),this.originalElement=!1);delete this.imageElement},contents:[{id:\"info\",label:d.lang.image.infoTab,accessKey:\"I\",elements:[{type:\"vbox\",padding:0,children:[{type:\"hbox\",widths:[\"280px\",\"110px\"],align:\"right\",children:[{id:\"txtUrl\",type:\"text\",label:d.lang.common.url,required:!0,onChange:function(){var a=this.getDialog(),b=this.getValue();if(0<b.length){var a=this.getDialog(),\nc=a.originalElement;a.preview&&a.preview.removeStyle(\"display\");c.setCustomData(\"isReady\",\"false\");var d=CKEDITOR.document.getById(p);d&&d.setStyle(\"display\",\"\");c.on(\"load\",u,a);c.on(\"error\",h,a);c.on(\"abort\",h,a);c.setAttribute(\"src\",b);a.preview&&(x.setAttribute(\"src\",b),a.preview.setAttribute(\"src\",x.$.src),e(a))}else a.preview&&(a.preview.removeAttribute(\"src\"),a.preview.setStyle(\"display\",\"none\"))},setup:function(a,b){if(1==a){var c=b.data(\"cke-saved-src\")||b.getAttribute(\"src\");this.getDialog().dontResetSize=\n!0;this.setValue(c);this.setInitValue()}},commit:function(a,b){1==a&&(this.getValue()||this.isChanged())?(b.data(\"cke-saved-src\",this.getValue()),b.setAttribute(\"src\",this.getValue())):8==a&&(b.setAttribute(\"src\",\"\"),b.removeAttribute(\"src\"))},validate:CKEDITOR.dialog.validate.notEmpty(d.lang.image.urlMissing)},{type:\"button\",id:\"browse\",style:\"display:inline-block;margin-top:14px;\",align:\"center\",label:d.lang.common.browseServer,hidden:!0,filebrowser:\"info:txtUrl\"}]}]},{id:\"txtAlt\",type:\"text\",label:d.lang.image.alt,\naccessKey:\"T\",\"default\":\"\",onChange:function(){e(this.getDialog())},setup:function(a,b){1==a&&this.setValue(b.getAttribute(\"alt\"))},commit:function(a,b){1==a?(this.getValue()||this.isChanged())&&b.setAttribute(\"alt\",this.getValue()):4==a?b.setAttribute(\"alt\",this.getValue()):8==a&&b.removeAttribute(\"alt\")}},{type:\"hbox\",children:[{id:\"basic\",type:\"vbox\",children:[{type:\"hbox\",requiredContent:\"img{width,height}\",widths:[\"50%\",\"50%\"],children:[{type:\"vbox\",padding:1,children:[{type:\"text\",width:\"45px\",\nid:\"txtWidth\",label:d.lang.common.width,onKeyUp:A,onChange:function(){k.call(this,\"advanced:txtdlgGenStyle\")},validate:function(){var a=this.getValue().match(z);(a=!(!a||0===parseInt(a[1],10)))||alert(d.lang.common.invalidWidth);return a},setup:C,commit:function(a,b){var c=this.getValue();1==a?(c&&d.activeFilter.check(\"img{width,height}\")?b.setStyle(\"width\",CKEDITOR.tools.cssLength(c)):b.removeStyle(\"width\"),b.removeAttribute(\"width\")):4==a?c.match(m)?b.setStyle(\"width\",CKEDITOR.tools.cssLength(c)):\n(c=this.getDialog().originalElement,\"true\"==c.getCustomData(\"isReady\")&&b.setStyle(\"width\",c.$.width+\"px\")):8==a&&(b.removeAttribute(\"width\"),b.removeStyle(\"width\"))}},{type:\"text\",id:\"txtHeight\",width:\"45px\",label:d.lang.common.height,onKeyUp:A,onChange:function(){k.call(this,\"advanced:txtdlgGenStyle\")},validate:function(){var a=this.getValue().match(z);(a=!(!a||0===parseInt(a[1],10)))||alert(d.lang.common.invalidHeight);return a},setup:C,commit:function(a,b){var c=this.getValue();1==a?(c&&d.activeFilter.check(\"img{width,height}\")?\nb.setStyle(\"height\",CKEDITOR.tools.cssLength(c)):b.removeStyle(\"height\"),b.removeAttribute(\"height\")):4==a?c.match(m)?b.setStyle(\"height\",CKEDITOR.tools.cssLength(c)):(c=this.getDialog().originalElement,\"true\"==c.getCustomData(\"isReady\")&&b.setStyle(\"height\",c.$.height+\"px\")):8==a&&(b.removeAttribute(\"height\"),b.removeStyle(\"height\"))}}]},{id:\"ratioLock\",type:\"html\",style:\"margin-top:30px;width:40px;height:40px;\",onLoad:function(){var a=CKEDITOR.document.getById(y),b=CKEDITOR.document.getById(t);\na&&(a.on(\"click\",function(a){B(this);a.data&&a.data.preventDefault()},this.getDialog()),a.on(\"mouseover\",function(){this.addClass(\"cke_btn_over\")},a),a.on(\"mouseout\",function(){this.removeClass(\"cke_btn_over\")},a));b&&(b.on(\"click\",function(a){n(this);var b=this.originalElement,d=this.getValueOf(\"info\",\"txtWidth\");\"true\"==b.getCustomData(\"isReady\")&&d&&(b=b.$.height/b.$.width*d,isNaN(b)||(this.setValueOf(\"info\",\"txtHeight\",Math.round(b)),e(this)));a.data&&a.data.preventDefault()},this.getDialog()),\nb.on(\"mouseover\",function(){this.addClass(\"cke_btn_over\")},b),b.on(\"mouseout\",function(){this.removeClass(\"cke_btn_over\")},b))},html:'\\x3cdiv\\x3e\\x3ca href\\x3d\"javascript:void(0)\" tabindex\\x3d\"-1\" title\\x3d\"'+d.lang.image.lockRatio+'\" class\\x3d\"cke_btn_locked\" id\\x3d\"'+t+'\" role\\x3d\"checkbox\"\\x3e\\x3cspan class\\x3d\"cke_icon\"\\x3e\\x3c/span\\x3e\\x3cspan class\\x3d\"cke_label\"\\x3e'+d.lang.image.lockRatio+'\\x3c/span\\x3e\\x3c/a\\x3e\\x3ca href\\x3d\"javascript:void(0)\" tabindex\\x3d\"-1\" title\\x3d\"'+d.lang.image.resetSize+\n'\" class\\x3d\"cke_btn_reset\" id\\x3d\"'+y+'\" role\\x3d\"button\"\\x3e\\x3cspan class\\x3d\"cke_label\"\\x3e'+d.lang.image.resetSize+\"\\x3c/span\\x3e\\x3c/a\\x3e\\x3c/div\\x3e\"}]},{type:\"vbox\",padding:1,children:[{type:\"text\",id:\"txtBorder\",requiredContent:\"img{border-width}\",width:\"60px\",label:d.lang.image.border,\"default\":\"\",onKeyUp:function(){e(this.getDialog())},onChange:function(){k.call(this,\"advanced:txtdlgGenStyle\")},validate:CKEDITOR.dialog.validate.integer(d.lang.image.validateBorder),setup:function(a,b){if(1==\na){var c;c=(c=(c=b.getStyle(\"border-width\"))&&c.match(/^(\\d+px)(?: \\1 \\1 \\1)?$/))&&parseInt(c[1],10);isNaN(parseInt(c,10))&&(c=b.getAttribute(\"border\"));this.setValue(c)}},commit:function(a,b){var c=parseInt(this.getValue(),10);1==a||4==a?(isNaN(c)?!c&&this.isChanged()&&b.removeStyle(\"border\"):(b.setStyle(\"border-width\",CKEDITOR.tools.cssLength(c)),b.setStyle(\"border-style\",\"solid\")),1==a&&b.removeAttribute(\"border\")):8==a&&(b.removeAttribute(\"border\"),b.removeStyle(\"border-width\"),b.removeStyle(\"border-style\"),\nb.removeStyle(\"border-color\"))}},{type:\"text\",id:\"txtHSpace\",requiredContent:\"img{margin-left,margin-right}\",width:\"60px\",label:d.lang.image.hSpace,\"default\":\"\",onKeyUp:function(){e(this.getDialog())},onChange:function(){k.call(this,\"advanced:txtdlgGenStyle\")},validate:CKEDITOR.dialog.validate.integer(d.lang.image.validateHSpace),setup:function(a,b){if(1==a){var c,d;c=b.getStyle(\"margin-left\");d=b.getStyle(\"margin-right\");c=c&&c.match(r);d=d&&d.match(r);c=parseInt(c,10);d=parseInt(d,10);c=c==d&&c;\nisNaN(parseInt(c,10))&&(c=b.getAttribute(\"hspace\"));this.setValue(c)}},commit:function(a,b){var c=parseInt(this.getValue(),10);1==a||4==a?(isNaN(c)?!c&&this.isChanged()&&(b.removeStyle(\"margin-left\"),b.removeStyle(\"margin-right\")):(b.setStyle(\"margin-left\",CKEDITOR.tools.cssLength(c)),b.setStyle(\"margin-right\",CKEDITOR.tools.cssLength(c))),1==a&&b.removeAttribute(\"hspace\")):8==a&&(b.removeAttribute(\"hspace\"),b.removeStyle(\"margin-left\"),b.removeStyle(\"margin-right\"))}},{type:\"text\",id:\"txtVSpace\",\nrequiredContent:\"img{margin-top,margin-bottom}\",width:\"60px\",label:d.lang.image.vSpace,\"default\":\"\",onKeyUp:function(){e(this.getDialog())},onChange:function(){k.call(this,\"advanced:txtdlgGenStyle\")},validate:CKEDITOR.dialog.validate.integer(d.lang.image.validateVSpace),setup:function(a,b){if(1==a){var c,d;c=b.getStyle(\"margin-top\");d=b.getStyle(\"margin-bottom\");c=c&&c.match(r);d=d&&d.match(r);c=parseInt(c,10);d=parseInt(d,10);c=c==d&&c;isNaN(parseInt(c,10))&&(c=b.getAttribute(\"vspace\"));this.setValue(c)}},\ncommit:function(a,b){var c=parseInt(this.getValue(),10);1==a||4==a?(isNaN(c)?!c&&this.isChanged()&&(b.removeStyle(\"margin-top\"),b.removeStyle(\"margin-bottom\")):(b.setStyle(\"margin-top\",CKEDITOR.tools.cssLength(c)),b.setStyle(\"margin-bottom\",CKEDITOR.tools.cssLength(c))),1==a&&b.removeAttribute(\"vspace\")):8==a&&(b.removeAttribute(\"vspace\"),b.removeStyle(\"margin-top\"),b.removeStyle(\"margin-bottom\"))}},{id:\"cmbAlign\",requiredContent:\"img{float}\",type:\"select\",widths:[\"35%\",\"65%\"],style:\"width:90px\",\nlabel:d.lang.common.align,\"default\":\"\",items:[[d.lang.common.notSet,\"\"],[d.lang.common.alignLeft,\"left\"],[d.lang.common.alignRight,\"right\"]],onChange:function(){e(this.getDialog());k.call(this,\"advanced:txtdlgGenStyle\")},setup:function(a,b){if(1==a){var c=b.getStyle(\"float\");switch(c){case \"inherit\":case \"none\":c=\"\"}!c&&(c=(b.getAttribute(\"align\")||\"\").toLowerCase());this.setValue(c)}},commit:function(a,b){var c=this.getValue();if(1==a||4==a){if(c?b.setStyle(\"float\",c):b.removeStyle(\"float\"),1==a)switch(c=\n(b.getAttribute(\"align\")||\"\").toLowerCase(),c){case \"left\":case \"right\":b.removeAttribute(\"align\")}}else 8==a&&b.removeStyle(\"float\")}}]}]},{type:\"vbox\",height:\"250px\",children:[{type:\"html\",id:\"htmlPreview\",style:\"width:95%;\",html:\"\\x3cdiv\\x3e\"+CKEDITOR.tools.htmlEncode(d.lang.common.preview)+'\\x3cbr\\x3e\\x3cdiv id\\x3d\"'+p+'\" class\\x3d\"ImagePreviewLoader\" style\\x3d\"display:none\"\\x3e\\x3cdiv class\\x3d\"loading\"\\x3e\\x26nbsp;\\x3c/div\\x3e\\x3c/div\\x3e\\x3cdiv class\\x3d\"ImagePreviewBox\"\\x3e\\x3ctable\\x3e\\x3ctr\\x3e\\x3ctd\\x3e\\x3ca href\\x3d\"javascript:void(0)\" target\\x3d\"_blank\" onclick\\x3d\"return false;\" id\\x3d\"'+\nE+'\"\\x3e\\x3cimg id\\x3d\"'+D+'\" alt\\x3d\"\" /\\x3e\\x3c/a\\x3e'+(d.config.image_previewText||\"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.\")+\n\"\\x3c/td\\x3e\\x3c/tr\\x3e\\x3c/table\\x3e\\x3c/div\\x3e\\x3c/div\\x3e\"}]}]}]},{id:\"Link\",requiredContent:\"a[href]\",label:d.lang.image.linkTab,padding:0,elements:[{id:\"txtUrl\",type:\"text\",label:d.lang.common.url,style:\"width: 100%\",\"default\":\"\",setup:function(a,b){if(2==a){var c=b.data(\"cke-saved-href\");c||(c=b.getAttribute(\"href\"));this.setValue(c)}},commit:function(a,b){if(2==a&&(this.getValue()||this.isChanged())){var c=this.getValue();b.data(\"cke-saved-href\",c);b.setAttribute(\"href\",c);this.getValue()||\n!d.config.image_removeLinkByEmptyURL?this.getDialog().addLink=!0:this.getDialog().addLink=!1}}},{type:\"button\",id:\"browse\",filebrowser:{action:\"Browse\",target:\"Link:txtUrl\",url:d.config.filebrowserImageBrowseLinkUrl},style:\"float:right\",hidden:!0,label:d.lang.common.browseServer},{id:\"cmbTarget\",type:\"select\",requiredContent:\"a[target]\",label:d.lang.common.target,\"default\":\"\",items:[[d.lang.common.notSet,\"\"],[d.lang.common.targetNew,\"_blank\"],[d.lang.common.targetTop,\"_top\"],[d.lang.common.targetSelf,\n\"_self\"],[d.lang.common.targetParent,\"_parent\"]],setup:function(a,b){2==a&&this.setValue(b.getAttribute(\"target\")||\"\")},commit:function(a,b){2==a&&(this.getValue()||this.isChanged())&&b.setAttribute(\"target\",this.getValue())}}]},{id:\"Upload\",hidden:!0,filebrowser:\"uploadButton\",label:d.lang.image.upload,elements:[{type:\"file\",id:\"upload\",label:d.lang.image.btnUpload,style:\"height:40px\",size:38},{type:\"fileButton\",id:\"uploadButton\",filebrowser:\"info:txtUrl\",label:d.lang.image.btnUpload,\"for\":[\"Upload\",\n\"upload\"]}]},{id:\"advanced\",label:d.lang.common.advancedTab,elements:[{type:\"hbox\",widths:[\"50%\",\"25%\",\"25%\"],children:[{type:\"text\",id:\"linkId\",requiredContent:\"img[id]\",label:d.lang.common.id,setup:function(a,b){1==a&&this.setValue(b.getAttribute(\"id\"))},commit:function(a,b){1==a&&(this.getValue()||this.isChanged())&&b.setAttribute(\"id\",this.getValue())}},{id:\"cmbLangDir\",type:\"select\",requiredContent:\"img[dir]\",style:\"width : 100px;\",label:d.lang.common.langDir,\"default\":\"\",items:[[d.lang.common.notSet,\n\"\"],[d.lang.common.langDirLtr,\"ltr\"],[d.lang.common.langDirRtl,\"rtl\"]],setup:function(a,b){1==a&&this.setValue(b.getAttribute(\"dir\"))},commit:function(a,b){1==a&&(this.getValue()||this.isChanged())&&b.setAttribute(\"dir\",this.getValue())}},{type:\"text\",id:\"txtLangCode\",requiredContent:\"img[lang]\",label:d.lang.common.langCode,\"default\":\"\",setup:function(a,b){1==a&&this.setValue(b.getAttribute(\"lang\"))},commit:function(a,b){1==a&&(this.getValue()||this.isChanged())&&b.setAttribute(\"lang\",this.getValue())}}]},\n{type:\"text\",id:\"txtGenLongDescr\",requiredContent:\"img[longdesc]\",label:d.lang.common.longDescr,setup:function(a,b){1==a&&this.setValue(b.getAttribute(\"longDesc\"))},commit:function(a,b){1==a&&(this.getValue()||this.isChanged())&&b.setAttribute(\"longDesc\",this.getValue())}},{type:\"hbox\",widths:[\"50%\",\"50%\"],children:[{type:\"text\",id:\"txtGenClass\",requiredContent:\"img(cke-xyz)\",label:d.lang.common.cssClass,\"default\":\"\",setup:function(a,b){1==a&&this.setValue(b.getAttribute(\"class\"))},commit:function(a,\nb){1==a&&(this.getValue()||this.isChanged())&&b.setAttribute(\"class\",this.getValue())}},{type:\"text\",id:\"txtGenTitle\",requiredContent:\"img[title]\",label:d.lang.common.advisoryTitle,\"default\":\"\",onChange:function(){e(this.getDialog())},setup:function(a,b){1==a&&this.setValue(b.getAttribute(\"title\"))},commit:function(a,b){1==a?(this.getValue()||this.isChanged())&&b.setAttribute(\"title\",this.getValue()):4==a?b.setAttribute(\"title\",this.getValue()):8==a&&b.removeAttribute(\"title\")}}]},{type:\"text\",id:\"txtdlgGenStyle\",\nrequiredContent:\"img{cke-xyz}\",label:d.lang.common.cssStyle,validate:CKEDITOR.dialog.validate.inlineStyle(d.lang.common.invalidInlineStyle),\"default\":\"\",setup:function(a,b){if(1==a){var c=b.getAttribute(\"style\");!c&&b.$.style.cssText&&(c=b.$.style.cssText);this.setValue(c);var d=b.$.style.height,c=b.$.style.width,d=(d?d:\"\").match(m),c=(c?c:\"\").match(m);this.attributesInStyle={height:!!d,width:!!c}}},onChange:function(){k.call(this,\"info:cmbFloat info:cmbAlign info:txtVSpace info:txtHSpace info:txtBorder info:txtWidth info:txtHeight\".split(\" \"));\ne(this)},commit:function(a,b){1==a&&(this.getValue()||this.isChanged())&&b.setAttribute(\"style\",this.getValue())}}]}]}};CKEDITOR.dialog.add(\"image\",function(d){return v(d,\"image\")});CKEDITOR.dialog.add(\"imagebutton\",function(d){return v(d,\"imagebutton\")})})();"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/link/dialogs/anchor.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.dialog.add(\"anchor\",function(c){function d(a,b){return a.createFakeElement(a.document.createElement(\"a\",{attributes:b}),\"cke_anchor\",\"anchor\")}return{title:c.lang.link.anchor.title,minWidth:300,minHeight:60,onOk:function(){var a=CKEDITOR.tools.trim(this.getValueOf(\"info\",\"txtName\")),a={id:a,name:a,\"data-cke-saved-name\":a};if(this._.selectedElement)this._.selectedElement.data(\"cke-realelement\")?(a=d(c,a),a.replace(this._.selectedElement),CKEDITOR.env.ie&&c.getSelection().selectElement(a)):\nthis._.selectedElement.setAttributes(a);else{var b=c.getSelection(),b=b&&b.getRanges()[0];b.collapsed?(a=d(c,a),b.insertNode(a)):(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(a[\"class\"]=\"cke_anchor\"),a=new CKEDITOR.style({element:\"a\",attributes:a}),a.type=CKEDITOR.STYLE_INLINE,c.applyStyle(a))}},onHide:function(){delete this._.selectedElement},onShow:function(){var a=c.getSelection(),b=a.getSelectedElement(),d=b&&b.data(\"cke-realelement\"),e=d?CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b):CKEDITOR.plugins.link.getSelectedLink(c);\nif(e){this._.selectedElement=e;var f=e.data(\"cke-saved-name\");this.setValueOf(\"info\",\"txtName\",f||\"\");!d&&a.selectElement(e);b&&(this._.selectedElement=b)}this.getContentElement(\"info\",\"txtName\").focus()},contents:[{id:\"info\",label:c.lang.link.anchor.title,accessKey:\"I\",elements:[{type:\"text\",id:\"txtName\",label:c.lang.link.anchor.name,required:!0,validate:function(){return this.getValue()?!0:(alert(c.lang.link.anchor.errorName),!1)}}]}]}});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/link/dialogs/link.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n(function(){CKEDITOR.dialog.add(\"link\",function(g){var n=CKEDITOR.plugins.link,p=function(){var a=this.getDialog(),b=a.getContentElement(\"target\",\"popupFeatures\"),a=a.getContentElement(\"target\",\"linkTargetName\"),m=this.getValue();if(b&&a)switch(b=b.getElement(),b.hide(),a.setValue(\"\"),m){case \"frame\":a.setLabel(g.lang.link.targetFrameName);a.getElement().show();break;case \"popup\":b.show();a.setLabel(g.lang.link.targetPopupName);a.getElement().show();break;default:a.setValue(m),a.getElement().hide()}},\nf=function(a){a.target&&this.setValue(a.target[this.id]||\"\")},h=function(a){a.advanced&&this.setValue(a.advanced[this.id]||\"\")},k=function(a){a.target||(a.target={});a.target[this.id]=this.getValue()||\"\"},l=function(a){a.advanced||(a.advanced={});a.advanced[this.id]=this.getValue()||\"\"},c=g.lang.common,b=g.lang.link,d;return{title:b.title,minWidth:350,minHeight:230,contents:[{id:\"info\",label:b.info,title:b.info,elements:[{id:\"linkType\",type:\"select\",label:b.type,\"default\":\"url\",items:[[b.toUrl,\"url\"],\n[b.toAnchor,\"anchor\"],[b.toEmail,\"email\"]],onChange:function(){var a=this.getDialog(),b=[\"urlOptions\",\"anchorOptions\",\"emailOptions\"],m=this.getValue(),e=a.definition.getContents(\"upload\"),e=e&&e.hidden;\"url\"==m?(g.config.linkShowTargetTab&&a.showPage(\"target\"),e||a.showPage(\"upload\")):(a.hidePage(\"target\"),e||a.hidePage(\"upload\"));for(e=0;e<b.length;e++){var c=a.getContentElement(\"info\",b[e]);c&&(c=c.getElement().getParent().getParent(),b[e]==m+\"Options\"?c.show():c.hide())}a.layout()},setup:function(a){this.setValue(a.type||\n\"url\")},commit:function(a){a.type=this.getValue()}},{type:\"vbox\",id:\"urlOptions\",children:[{type:\"hbox\",widths:[\"25%\",\"75%\"],children:[{id:\"protocol\",type:\"select\",label:c.protocol,\"default\":\"http://\",items:[[\"http://‎\",\"http://\"],[\"https://‎\",\"https://\"],[\"ftp://‎\",\"ftp://\"],[\"news://‎\",\"news://\"],[b.other,\"\"]],setup:function(a){a.url&&this.setValue(a.url.protocol||\"\")},commit:function(a){a.url||(a.url={});a.url.protocol=this.getValue()}},{type:\"text\",id:\"url\",label:c.url,required:!0,onLoad:function(){this.allowOnChange=\n!0},onKeyUp:function(){this.allowOnChange=!1;var a=this.getDialog().getContentElement(\"info\",\"protocol\"),b=this.getValue(),m=/^((javascript:)|[#\\/\\.\\?])/i,c=/^(http|https|ftp|news):\\/\\/(?=.)/i.exec(b);c?(this.setValue(b.substr(c[0].length)),a.setValue(c[0].toLowerCase())):m.test(b)&&a.setValue(\"\");this.allowOnChange=!0},onChange:function(){if(this.allowOnChange)this.onKeyUp()},validate:function(){var a=this.getDialog();return a.getContentElement(\"info\",\"linkType\")&&\"url\"!=a.getValueOf(\"info\",\"linkType\")?\n!0:!g.config.linkJavaScriptLinksAllowed&&/javascript\\:/.test(this.getValue())?(alert(c.invalidValue),!1):this.getDialog().fakeObj?!0:CKEDITOR.dialog.validate.notEmpty(b.noUrl).apply(this)},setup:function(a){this.allowOnChange=!1;a.url&&this.setValue(a.url.url);this.allowOnChange=!0},commit:function(a){this.onChange();a.url||(a.url={});a.url.url=this.getValue();this.allowOnChange=!1}}],setup:function(){this.getDialog().getContentElement(\"info\",\"linkType\")||this.getElement().show()}},{type:\"button\",\nid:\"browse\",hidden:\"true\",filebrowser:\"info:url\",label:c.browseServer}]},{type:\"vbox\",id:\"anchorOptions\",width:260,align:\"center\",padding:0,children:[{type:\"fieldset\",id:\"selectAnchorText\",label:b.selectAnchor,setup:function(){d=n.getEditorAnchors(g);this.getElement()[d&&d.length?\"show\":\"hide\"]()},children:[{type:\"hbox\",id:\"selectAnchor\",children:[{type:\"select\",id:\"anchorName\",\"default\":\"\",label:b.anchorName,style:\"width: 100%;\",items:[[\"\"]],setup:function(a){this.clear();this.add(\"\");if(d)for(var b=\n0;b<d.length;b++)d[b].name&&this.add(d[b].name);a.anchor&&this.setValue(a.anchor.name);(a=this.getDialog().getContentElement(\"info\",\"linkType\"))&&\"email\"==a.getValue()&&this.focus()},commit:function(a){a.anchor||(a.anchor={});a.anchor.name=this.getValue()}},{type:\"select\",id:\"anchorId\",\"default\":\"\",label:b.anchorId,style:\"width: 100%;\",items:[[\"\"]],setup:function(a){this.clear();this.add(\"\");if(d)for(var b=0;b<d.length;b++)d[b].id&&this.add(d[b].id);a.anchor&&this.setValue(a.anchor.id)},commit:function(a){a.anchor||\n(a.anchor={});a.anchor.id=this.getValue()}}],setup:function(){this.getElement()[d&&d.length?\"show\":\"hide\"]()}}]},{type:\"html\",id:\"noAnchors\",style:\"text-align: center;\",html:'\\x3cdiv role\\x3d\"note\" tabIndex\\x3d\"-1\"\\x3e'+CKEDITOR.tools.htmlEncode(b.noAnchors)+\"\\x3c/div\\x3e\",focus:!0,setup:function(){this.getElement()[d&&d.length?\"hide\":\"show\"]()}}],setup:function(){this.getDialog().getContentElement(\"info\",\"linkType\")||this.getElement().hide()}},{type:\"vbox\",id:\"emailOptions\",padding:1,children:[{type:\"text\",\nid:\"emailAddress\",label:b.emailAddress,required:!0,validate:function(){var a=this.getDialog();return a.getContentElement(\"info\",\"linkType\")&&\"email\"==a.getValueOf(\"info\",\"linkType\")?CKEDITOR.dialog.validate.notEmpty(b.noEmail).apply(this):!0},setup:function(a){a.email&&this.setValue(a.email.address);(a=this.getDialog().getContentElement(\"info\",\"linkType\"))&&\"email\"==a.getValue()&&this.select()},commit:function(a){a.email||(a.email={});a.email.address=this.getValue()}},{type:\"text\",id:\"emailSubject\",\nlabel:b.emailSubject,setup:function(a){a.email&&this.setValue(a.email.subject)},commit:function(a){a.email||(a.email={});a.email.subject=this.getValue()}},{type:\"textarea\",id:\"emailBody\",label:b.emailBody,rows:3,\"default\":\"\",setup:function(a){a.email&&this.setValue(a.email.body)},commit:function(a){a.email||(a.email={});a.email.body=this.getValue()}}],setup:function(){this.getDialog().getContentElement(\"info\",\"linkType\")||this.getElement().hide()}}]},{id:\"target\",requiredContent:\"a[target]\",label:b.target,\ntitle:b.target,elements:[{type:\"hbox\",widths:[\"50%\",\"50%\"],children:[{type:\"select\",id:\"linkTargetType\",label:c.target,\"default\":\"notSet\",style:\"width : 100%;\",items:[[c.notSet,\"notSet\"],[b.targetFrame,\"frame\"],[b.targetPopup,\"popup\"],[c.targetNew,\"_blank\"],[c.targetTop,\"_top\"],[c.targetSelf,\"_self\"],[c.targetParent,\"_parent\"]],onChange:p,setup:function(a){a.target&&this.setValue(a.target.type||\"notSet\");p.call(this)},commit:function(a){a.target||(a.target={});a.target.type=this.getValue()}},{type:\"text\",\nid:\"linkTargetName\",label:b.targetFrameName,\"default\":\"\",setup:function(a){a.target&&this.setValue(a.target.name)},commit:function(a){a.target||(a.target={});a.target.name=this.getValue().replace(/([^\\x00-\\x7F]|\\s)/gi,\"\")}}]},{type:\"vbox\",width:\"100%\",align:\"center\",padding:2,id:\"popupFeatures\",children:[{type:\"fieldset\",label:b.popupFeatures,children:[{type:\"hbox\",children:[{type:\"checkbox\",id:\"resizable\",label:b.popupResizable,setup:f,commit:k},{type:\"checkbox\",id:\"status\",label:b.popupStatusBar,\nsetup:f,commit:k}]},{type:\"hbox\",children:[{type:\"checkbox\",id:\"location\",label:b.popupLocationBar,setup:f,commit:k},{type:\"checkbox\",id:\"toolbar\",label:b.popupToolbar,setup:f,commit:k}]},{type:\"hbox\",children:[{type:\"checkbox\",id:\"menubar\",label:b.popupMenuBar,setup:f,commit:k},{type:\"checkbox\",id:\"fullscreen\",label:b.popupFullScreen,setup:f,commit:k}]},{type:\"hbox\",children:[{type:\"checkbox\",id:\"scrollbars\",label:b.popupScrollBars,setup:f,commit:k},{type:\"checkbox\",id:\"dependent\",label:b.popupDependent,\nsetup:f,commit:k}]},{type:\"hbox\",children:[{type:\"text\",widths:[\"50%\",\"50%\"],labelLayout:\"horizontal\",label:c.width,id:\"width\",setup:f,commit:k},{type:\"text\",labelLayout:\"horizontal\",widths:[\"50%\",\"50%\"],label:b.popupLeft,id:\"left\",setup:f,commit:k}]},{type:\"hbox\",children:[{type:\"text\",labelLayout:\"horizontal\",widths:[\"50%\",\"50%\"],label:c.height,id:\"height\",setup:f,commit:k},{type:\"text\",labelLayout:\"horizontal\",label:b.popupTop,widths:[\"50%\",\"50%\"],id:\"top\",setup:f,commit:k}]}]}]}]},{id:\"upload\",\nlabel:b.upload,title:b.upload,hidden:!0,filebrowser:\"uploadButton\",elements:[{type:\"file\",id:\"upload\",label:c.upload,style:\"height:40px\",size:29},{type:\"fileButton\",id:\"uploadButton\",label:c.uploadSubmit,filebrowser:\"info:url\",\"for\":[\"upload\",\"upload\"]}]},{id:\"advanced\",label:b.advanced,title:b.advanced,elements:[{type:\"vbox\",padding:1,children:[{type:\"hbox\",widths:[\"45%\",\"35%\",\"20%\"],children:[{type:\"text\",id:\"advId\",requiredContent:\"a[id]\",label:b.id,setup:h,commit:l},{type:\"select\",id:\"advLangDir\",\nrequiredContent:\"a[dir]\",label:b.langDir,\"default\":\"\",style:\"width:110px\",items:[[c.notSet,\"\"],[b.langDirLTR,\"ltr\"],[b.langDirRTL,\"rtl\"]],setup:h,commit:l},{type:\"text\",id:\"advAccessKey\",requiredContent:\"a[accesskey]\",width:\"80px\",label:b.acccessKey,maxLength:1,setup:h,commit:l}]},{type:\"hbox\",widths:[\"45%\",\"35%\",\"20%\"],children:[{type:\"text\",label:b.name,id:\"advName\",requiredContent:\"a[name]\",setup:h,commit:l},{type:\"text\",label:b.langCode,id:\"advLangCode\",requiredContent:\"a[lang]\",width:\"110px\",\n\"default\":\"\",setup:h,commit:l},{type:\"text\",label:b.tabIndex,id:\"advTabIndex\",requiredContent:\"a[tabindex]\",width:\"80px\",maxLength:5,setup:h,commit:l}]}]},{type:\"vbox\",padding:1,children:[{type:\"hbox\",widths:[\"45%\",\"55%\"],children:[{type:\"text\",label:b.advisoryTitle,requiredContent:\"a[title]\",\"default\":\"\",id:\"advTitle\",setup:h,commit:l},{type:\"text\",label:b.advisoryContentType,requiredContent:\"a[type]\",\"default\":\"\",id:\"advContentType\",setup:h,commit:l}]},{type:\"hbox\",widths:[\"45%\",\"55%\"],children:[{type:\"text\",\nlabel:b.cssClasses,requiredContent:\"a(cke-xyz)\",\"default\":\"\",id:\"advCSSClasses\",setup:h,commit:l},{type:\"text\",label:b.charset,requiredContent:\"a[charset]\",\"default\":\"\",id:\"advCharset\",setup:h,commit:l}]},{type:\"hbox\",widths:[\"45%\",\"55%\"],children:[{type:\"text\",label:b.rel,requiredContent:\"a[rel]\",\"default\":\"\",id:\"advRel\",setup:h,commit:l},{type:\"text\",label:b.styles,requiredContent:\"a{cke-xyz}\",\"default\":\"\",id:\"advStyles\",validate:CKEDITOR.dialog.validate.inlineStyle(g.lang.common.invalidInlineStyle),\nsetup:h,commit:l}]}]}]}],onShow:function(){var a=this.getParentEditor(),b=a.getSelection(),c=null;(c=n.getSelectedLink(a))&&c.hasAttribute(\"href\")?b.getSelectedElement()||b.selectElement(c):c=null;a=n.parseLinkAttributes(a,c);this._.selectedElement=c;this.setupContent(a)},onOk:function(){var a={};this.commitContent(a);var b=g.getSelection(),c=n.getLinkAttributes(g,a);if(this._.selectedElement){var e=this._.selectedElement,d=e.data(\"cke-saved-href\"),f=e.getHtml();e.setAttributes(c.set);e.removeAttributes(c.removed);\nif(d==f||\"email\"==a.type&&-1!=f.indexOf(\"@\"))e.setHtml(\"email\"==a.type?a.email.address:c.set[\"data-cke-saved-href\"]),b.selectElement(e);delete this._.selectedElement}else b=b.getRanges()[0],b.collapsed&&(a=new CKEDITOR.dom.text(\"email\"==a.type?a.email.address:c.set[\"data-cke-saved-href\"],g.document),b.insertNode(a),b.selectNodeContents(a)),c=new CKEDITOR.style({element:\"a\",attributes:c.set}),c.type=CKEDITOR.STYLE_INLINE,c.applyToRange(b,g),b.select()},onLoad:function(){g.config.linkShowAdvancedTab||\nthis.hidePage(\"advanced\");g.config.linkShowTargetTab||this.hidePage(\"target\")},onFocus:function(){var a=this.getContentElement(\"info\",\"linkType\");a&&\"url\"==a.getValue()&&(a=this.getContentElement(\"info\",\"url\"),a.select())}}})})();"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/pastefromword/filter/default.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n(function(){function C(a){a=a.toUpperCase();for(var c=D.length,b=0,f=0;f<c;++f)for(var d=D[f],e=d[1].length;a.substr(0,e)==d[1];a=a.substr(e))b+=d[0];return b}function E(a){a=a.toUpperCase();for(var c=1,b=1;0<a.length;b*=26)c+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".indexOf(a.charAt(a.length-1))*b,a=a.substr(0,a.length-1);return c}var F=CKEDITOR.htmlParser.fragment.prototype,r=CKEDITOR.htmlParser.element.prototype;F.onlyChild=r.onlyChild=function(){var a=this.children;return 1==a.length&&a[0]||null};r.removeAnyChildWithName=\nfunction(a){for(var c=this.children,b=[],f,d=0;d<c.length;d++)f=c[d],f.name&&(f.name==a&&(b.push(f),c.splice(d--,1)),b=b.concat(f.removeAnyChildWithName(a)));return b};r.getAncestor=function(a){for(var c=this.parent;c&&(!c.name||!c.name.match(a));)c=c.parent;return c};F.firstChild=r.firstChild=function(a){for(var c,b=0;b<this.children.length;b++)if(c=this.children[b],a(c)||c.name&&(c=c.firstChild(a)))return c;return null};r.addStyle=function(a,c,b){var f=\"\";if(\"string\"==typeof c)f+=a+\":\"+c+\";\";else{if(\"object\"==\ntypeof a)for(var d in a)a.hasOwnProperty(d)&&(f+=d+\":\"+a[d]+\";\");else f+=a;b=c}this.attributes||(this.attributes={});a=this.attributes.style||\"\";a=(b?[f,a]:[a,f]).join(\";\");this.attributes.style=a.replace(/^;+|;(?=;)/g,\"\")};r.getStyle=function(a){var c=this.attributes.style;if(c)return c=CKEDITOR.tools.parseCssText(c,1),c[a]};CKEDITOR.dtd.parentOf=function(a){var c={},b;for(b in this)-1==b.indexOf(\"$\")&&this[b][a]&&(c[b]=1);return c};var G=/^(?:\\b0[^\\s]*\\s*){1,4}$/,B={ol:{decimal:/\\d+/,\"lower-roman\":/^m{0,4}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$/,\n\"upper-roman\":/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,\"lower-alpha\":/^[a-z]+$/,\"upper-alpha\":/^[A-Z]+$/},ul:{disc:/[l\\u00B7\\u2002]/,circle:/[\\u006F\\u00D8]/,square:/[\\u006E\\u25C6]/}},D=[[1E3,\"M\"],[900,\"CM\"],[500,\"D\"],[400,\"CD\"],[100,\"C\"],[90,\"XC\"],[50,\"L\"],[40,\"XL\"],[10,\"X\"],[9,\"IX\"],[5,\"V\"],[4,\"IV\"],[1,\"I\"]],w=0,x=null,A,H=CKEDITOR.plugins.pastefromword={utils:{createListBulletMarker:function(a,c){var b=new CKEDITOR.htmlParser.element(\"cke:listbullet\");b.attributes={\"cke:listsymbol\":a[0]};\nb.add(new CKEDITOR.htmlParser.text(c));return b},isListBulletIndicator:function(a){if(/mso-list\\s*:\\s*Ignore/i.test(a.attributes&&a.attributes.style))return!0},isContainingOnlySpaces:function(a){var c;return(c=a.onlyChild())&&/^(:?\\s|&nbsp;)+$/.test(c.value)},resolveList:function(a){var c=a.attributes,b;if((b=a.removeAnyChildWithName(\"cke:listbullet\"))&&b.length&&(b=b[0]))return a.name=\"cke:li\",c.style&&(c.style=H.filters.stylesFilter([[\"text-indent\"],[\"line-height\"],[/^margin(:?-left)?$/,null,function(a){a=\na.split(\" \");a=CKEDITOR.tools.convertToPx(a[3]||a[1]||a[0]);!w&&null!==x&&a>x&&(w=a-x);x=a;c[\"cke:indent\"]=w&&Math.ceil(a/w)+1||1}],[/^mso-list$/,null,function(a){a=a.split(\" \");if(!(2>a.length)){var b=Number(a[0].match(/\\d+/));a=Number(a[1].match(/\\d+/));1==a&&(b!==A&&(c[\"cke:reset\"]=1),A=b);c[\"cke:indent\"]=a}}]])(c.style,a)||\"\"),c[\"cke:indent\"]||(x=0,c[\"cke:indent\"]=1),CKEDITOR.tools.extend(c,b.attributes),!0;A=x=w=null;return!1},getStyleComponents:function(){var a=CKEDITOR.dom.element.createFromHtml('\\x3cdiv style\\x3d\"position:absolute;left:-9999px;top:-9999px;\"\\x3e\\x3c/div\\x3e',\nCKEDITOR.document);CKEDITOR.document.getBody().append(a);return function(c,b,f){a.setStyle(c,b);c={};b=f.length;for(var d=0;d<b;d++)c[f[d]]=a.getStyle(f[d]);return c}}(),listDtdParents:CKEDITOR.dtd.parentOf(\"ol\")},filters:{flattenList:function(a,c){c=\"number\"==typeof c?c:1;var b=a.attributes,f;switch(b.type){case \"a\":f=\"lower-alpha\";break;case \"1\":f=\"decimal\"}for(var d=a.children,e,k=0;k<d.length;k++)if(e=d[k],e.name in CKEDITOR.dtd.$listItem){var l=e.attributes,g=e.children,n=g[0],h=g[g.length-1];\nn.attributes&&n.attributes.style&&-1<n.attributes.style.indexOf(\"mso-list\")&&(e.attributes.style=n.attributes.style,n.replaceWithChildren());h.name in CKEDITOR.dtd.$list&&(a.add(h,k+1),--g.length||d.splice(k--,1));e.name=\"cke:li\";b.start&&!k&&(l.value=b.start);H.filters.stylesFilter([[\"tab-stops\",null,function(a){(a=a.match(/0$|\\d+\\.?\\d*\\w+/))&&(x=CKEDITOR.tools.convertToPx(a[0]))}],1==c?[\"mso-list\",null,function(a){a=a.split(\" \");a=Number(a[0].match(/\\d+/));a!==A&&(l[\"cke:reset\"]=1);A=a}]:null])(l.style);\nl[\"cke:indent\"]=c;l[\"cke:listtype\"]=a.name;l[\"cke:list-style-type\"]=f}else if(e.name in CKEDITOR.dtd.$list){arguments.callee.apply(this,[e,c+1]);d=d.slice(0,k).concat(e.children).concat(d.slice(k+1));a.children=[];e=0;for(g=d.length;e<g;e++)a.add(d[e]);d=a.children}delete a.name;b[\"cke:list\"]=1},assembleList:function(a){var c=a.children,b,f,d,e,k,l;a=[];for(var g,n,h,p,m,t,q=0;q<c.length;q++)if(b=c[q],\"cke:li\"==b.name)if(b.name=\"li\",f=b.attributes,h=(h=f[\"cke:listsymbol\"])&&h.match(/^(?:[(]?)([^\\s]+?)([.)]?)$/),\np=m=t=null,f[\"cke:ignored\"])c.splice(q--,1);else{f[\"cke:reset\"]&&(l=e=k=null);d=Number(f[\"cke:indent\"]);d!=e&&(n=g=null);if(h){if(n&&B[n][g].test(h[1]))p=n,m=g;else for(var u in B)for(var y in B[u])if(B[u][y].test(h[1]))if(\"ol\"==u&&/alpha|roman/.test(y)){if(g=/roman/.test(y)?C(h[1]):E(h[1]),!t||g<t)t=g,p=u,m=y}else{p=u;m=y;break}!p&&(p=h[2]?\"ol\":\"ul\")}else p=f[\"cke:listtype\"]||\"ol\",m=f[\"cke:list-style-type\"];n=p;g=m||(\"ol\"==p?\"decimal\":\"disc\");m&&m!=(\"ol\"==p?\"decimal\":\"disc\")&&b.addStyle(\"list-style-type\",\nm);if(\"ol\"==p&&h){switch(m){case \"decimal\":t=Number(h[1]);break;case \"lower-roman\":case \"upper-roman\":t=C(h[1]);break;case \"lower-alpha\":case \"upper-alpha\":t=E(h[1])}b.attributes.value=t}if(l){if(d>e)a.push(l=new CKEDITOR.htmlParser.element(p)),l.add(b),k.add(l);else{if(d<e){e-=d;for(var v;e--&&(v=l.parent);)l=v.parent}l.add(b)}c.splice(q--,1)}else a.push(l=new CKEDITOR.htmlParser.element(p)),l.add(b),c[q]=l;k=b;e=d}else l&&(l=e=k=null);for(q=0;q<a.length;q++)if(l=a[q],u=l.children,g=g=void 0,y=l.children.length,\nv=g=void 0,c=/list-style-type:(.*?)(?:;|$)/,e=CKEDITOR.plugins.pastefromword.filters.stylesFilter,g=l.attributes,!c.exec(g.style)){for(k=0;k<y;k++)if(g=u[k],g.attributes.value&&Number(g.attributes.value)==k+1&&delete g.attributes.value,g=c.exec(g.attributes.style))if(g[1]!=v&&v){v=null;break}else v=g[1];if(v){for(k=0;k<y;k++)g=u[k].attributes,g.style&&(g.style=e([[\"list-style-type\"]])(g.style)||\"\");l.addStyle(\"list-style-type\",v)}}A=x=w=null},falsyFilter:function(){return!1},stylesFilter:function(a,\nc){return function(b,f){var d=[];(b||\"\").replace(/&quot;/g,'\"').replace(/\\s*([^ :;]+)\\s*:\\s*([^;]+)\\s*(?=;|$)/g,function(b,e,g){e=e.toLowerCase();\"font-family\"==e&&(g=g.replace(/[\"']/g,\"\"));for(var n,h,p,m=0;m<a.length;m++)if(a[m]&&(b=a[m][0],n=a[m][1],h=a[m][2],p=a[m][3],e.match(b)&&(!n||g.match(n)))){e=p||e;c&&(h=h||g);\"function\"==typeof h&&(h=h(g,f,e));h&&h.push&&(e=h[0],h=h[1]);\"string\"==typeof h&&d.push([e,h]);return}!c&&d.push([e,g])});for(var e=0;e<d.length;e++)d[e]=d[e].join(\":\");return d.length?\nd.join(\";\")+\";\":!1}},elementMigrateFilter:function(a,c){return a?function(b){var f=c?(new CKEDITOR.style(a,c))._.definition:a;b.name=f.element;CKEDITOR.tools.extend(b.attributes,CKEDITOR.tools.clone(f.attributes));b.addStyle(CKEDITOR.style.getStyleText(f));f.attributes&&f.attributes[\"class\"]&&(b.classWhiteList=\" \"+f.attributes[\"class\"]+\" \")}:function(){}},styleMigrateFilter:function(a,c){var b=this.elementMigrateFilter;return a?function(f,d){var e=new CKEDITOR.htmlParser.element(null),k={};k[c]=f;\nb(a,k)(e);e.children=d.children;d.children=[e];e.filter=function(){};e.parent=d}:function(){}},bogusAttrFilter:function(a,c){if(-1==c.name.indexOf(\"cke:\"))return!1},applyStyleFilter:null},getRules:function(a,c){var b=CKEDITOR.dtd,f=CKEDITOR.tools.extend({},b.$block,b.$listItem,b.$tableContent),d=a.config,e=this.filters,k=e.falsyFilter,l=e.stylesFilter,g=e.elementMigrateFilter,n=CKEDITOR.tools.bind(this.filters.styleMigrateFilter,this.filters),h=this.utils.createListBulletMarker,p=e.flattenList,m=\ne.assembleList,t=this.utils.isListBulletIndicator,q=this.utils.isContainingOnlySpaces,u=this.utils.resolveList,y=function(a){a=CKEDITOR.tools.convertToPx(a);return isNaN(a)?a:a+\"px\"},v=this.utils.getStyleComponents,x=this.utils.listDtdParents,r=!1!==d.pasteFromWordRemoveFontStyles,w=!1!==d.pasteFromWordRemoveStyles;return{elementNames:[[/meta|link|script/,\"\"]],root:function(a){a.filterChildren(c);m(a)},elements:{\"^\":function(a){var c;CKEDITOR.env.gecko&&(c=e.applyStyleFilter)&&c(a)},$:function(a){var z=\na.name||\"\",e=a.attributes;z in f&&e.style&&(e.style=l([[/^(:?width|height)$/,null,y]])(e.style)||\"\");if(z.match(/h\\d/)){a.filterChildren(c);if(u(a))return;g(d[\"format_\"+z])(a)}else if(z in b.$inline)a.filterChildren(c),q(a)&&delete a.name;else if(-1!=z.indexOf(\":\")&&-1==z.indexOf(\"cke\")){a.filterChildren(c);if(\"v:imagedata\"==z){if(z=a.attributes[\"o:href\"])a.attributes.src=z;a.name=\"img\";return}delete a.name}z in x&&(a.filterChildren(c),m(a))},style:function(a){if(CKEDITOR.env.gecko){a=(a=a.onlyChild().value.match(/\\/\\* Style Definitions \\*\\/([\\s\\S]*?)\\/\\*/))&&\na[1];var c={};a&&(a.replace(/[\\n\\r]/g,\"\").replace(/(.+?)\\{(.+?)\\}/g,function(a,b,I){b=b.split(\",\");a=b.length;for(var d=0;d<a;d++)CKEDITOR.tools.trim(b[d]).replace(/^(\\w+)(\\.[\\w-]+)?$/g,function(a,b,d){b=b||\"*\";d=d.substring(1,d.length);d.match(/MsoNormal/)||(c[b]||(c[b]={}),d?c[b][d]=I:c[b]=I)})}),e.applyStyleFilter=function(a){var b=c[\"*\"]?\"*\":a.name,d=a.attributes&&a.attributes[\"class\"];b in c&&(b=c[b],\"object\"==typeof b&&(b=b[d]),b&&a.addStyle(b,!0))})}return!1},p:function(a){if(/MsoListParagraph/i.exec(a.attributes[\"class\"])||\na.getStyle(\"mso-list\")&&!a.getStyle(\"mso-list\").match(/^(none|skip)$/i)){var b=a.firstChild(function(a){return a.type==CKEDITOR.NODE_TEXT&&!q(a.parent)});(b=b&&b.parent)&&b.addStyle(\"mso-list\",\"Ignore\")}a.filterChildren(c);u(a)||(d.enterMode==CKEDITOR.ENTER_BR?(delete a.name,a.add(new CKEDITOR.htmlParser.element(\"br\"))):g(d[\"format_\"+(d.enterMode==CKEDITOR.ENTER_P?\"p\":\"div\")])(a))},div:function(a){var c=a.onlyChild();if(c&&\"table\"==c.name){var b=a.attributes;c.attributes=CKEDITOR.tools.extend(c.attributes,\nb);b.style&&c.addStyle(b.style);c=new CKEDITOR.htmlParser.element(\"div\");c.addStyle(\"clear\",\"both\");a.add(c);delete a.name}},td:function(a){a.getAncestor(\"thead\")&&(a.name=\"th\")},ol:p,ul:p,dl:p,font:function(a){if(t(a.parent))delete a.name;else{a.filterChildren(c);var b=a.attributes,d=b.style,e=a.parent;\"font\"==e.name?(CKEDITOR.tools.extend(e.attributes,a.attributes),d&&e.addStyle(d),delete a.name):(d=(d||\"\").split(\";\"),b.color&&(\"#000000\"!=b.color&&d.push(\"color:\"+b.color),delete b.color),b.face&&\n(d.push(\"font-family:\"+b.face),delete b.face),b.size&&(d.push(\"font-size:\"+(3<b.size?\"large\":3>b.size?\"small\":\"medium\")),delete b.size),a.name=\"span\",a.addStyle(d.join(\";\")))}},span:function(a){if(t(a.parent))return!1;a.filterChildren(c);if(q(a))return delete a.name,null;if(t(a)){var b=a.firstChild(function(a){return a.value||\"img\"==a.name}),e=(b=b&&(b.value||\"l.\"))&&b.match(/^(?:[(]?)([^\\s]+?)([.)]?)$/);if(e)return b=h(e,b),(a=a.getAncestor(\"span\"))&&/ mso-hide:\\s*all|display:\\s*none /.test(a.attributes.style)&&\n(b.attributes[\"cke:ignored\"]=1),b}if(e=(b=a.attributes)&&b.style)b.style=l([[\"line-height\"],[/^font-family$/,null,r?null:n(d.font_style,\"family\")],[/^font-size$/,null,r?null:n(d.fontSize_style,\"size\")],[/^color$/,null,r?null:n(d.colorButton_foreStyle,\"color\")],[/^background-color$/,null,r?null:n(d.colorButton_backStyle,\"color\")]])(e,a)||\"\";b.style||delete b.style;CKEDITOR.tools.isEmpty(b)&&delete a.name;return null},b:g(d.coreStyles_bold),i:g(d.coreStyles_italic),u:g(d.coreStyles_underline),s:g(d.coreStyles_strike),\nsup:g(d.coreStyles_superscript),sub:g(d.coreStyles_subscript),a:function(a){var b=a.attributes;b.name&&b.name.match(/ole_link\\d+/i)?delete a.name:b.href&&b.href.match(/^file:\\/\\/\\/[\\S]+#/i)&&(b.href=b.href.replace(/^file:\\/\\/\\/[^#]+/i,\"\"))},\"cke:listbullet\":function(a){a.getAncestor(/h\\d/)&&!d.pasteFromWordNumberedHeadingToList&&delete a.name}},attributeNames:[[/^onmouse(:?out|over)/,\"\"],[/^onload$/,\"\"],[/(?:v|o):\\w+/,\"\"],[/^lang/,\"\"]],attributes:{style:l(w?[[/^list-style-type$/,null],[/^margin$|^margin-(?!bottom|top)/,\nnull,function(a,b,c){if(b.name in{p:1,div:1}){b=\"ltr\"==d.contentsLangDirection?\"margin-left\":\"margin-right\";if(\"margin\"==c)a=v(c,a,[b])[b];else if(c!=b)return null;if(a&&!G.test(a))return[b,a]}return null}],[/^clear$/],[/^border.*|margin.*|vertical-align|float$/,null,function(a,b){if(\"img\"==b.name)return a}],[/^width|height$/,null,function(a,b){if(b.name in{table:1,td:1,th:1,img:1})return a}]]:[[/^mso-/],[/-color$/,null,function(a){if(\"transparent\"==a)return!1;if(CKEDITOR.env.gecko)return a.replace(/-moz-use-text-color/g,\n\"transparent\")}],[/^margin$/,G],[\"text-indent\",\"0cm\"],[\"page-break-before\"],[\"tab-stops\"],[\"display\",\"none\"],r?[/font-?/]:null],w),width:function(a,c){if(c.name in b.$tableContent)return!1},border:function(a,c){if(c.name in b.$tableContent)return!1},\"class\":function(a,b){return b.classWhiteList&&-1!=b.classWhiteList.indexOf(\" \"+a+\" \")?a:!1},bgcolor:k,valign:w?k:function(a,b){b.addStyle(\"vertical-align\",a);return!1}},comment:CKEDITOR.env.ie?k:function(a,b){var c=a.match(/<img.*?>/),d=a.match(/^\\[if !supportLists\\]([\\s\\S]*?)\\[endif\\]$/);\nreturn d?(d=(c=d[1]||c&&\"l.\")&&c.match(/>(?:[(]?)([^\\s]+?)([.)]?)</),h(d,c)):CKEDITOR.env.gecko&&c?(c=CKEDITOR.htmlParser.fragment.fromHtml(c[0]).children[0],(d=(d=(d=b.previous)&&d.value.match(/<v:imagedata[^>]*o:href=['\"](.*?)['\"]/))&&d[1])&&(c.attributes.src=d),c):!1}}}},J=function(){this.dataFilter=new CKEDITOR.htmlParser.filter};J.prototype={toHtml:function(a){a=CKEDITOR.htmlParser.fragment.fromHtml(a);var c=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(c,this.dataFilter);return c.getHtml(!0)}};\nCKEDITOR.cleanWord=function(a,c){a=a.replace(/<!\\[([^\\]]*?)\\]>/g,\"\\x3c!--[$1]--\\x3e\");CKEDITOR.env.gecko&&(a=a.replace(/(\\x3c!--\\[if[^<]*?\\])--\\x3e([\\S\\s]*?)\\x3c!--(\\[endif\\]--\\x3e)/gi,\"$1$2$3\"));CKEDITOR.env.webkit&&(a=a.replace(/(class=\"MsoListParagraph[^>]+>\\x3c!--\\[if !supportLists\\]--\\x3e)([^<]+<span[^<]+<\\/span>)(\\x3c!--\\[endif\\]--\\x3e)/gi,\"$1\\x3cspan\\x3e$2\\x3c/span\\x3e$3\"));var b=new J,f=b.dataFilter;f.addRules(CKEDITOR.plugins.pastefromword.getRules(c,f));c.fire(\"beforeCleanWord\",{filter:f});\ntry{a=b.toHtml(a)}catch(d){c.showNotification(c.lang.pastefromword.error)}a=a.replace(/cke:.*?\".*?\"/g,\"\");a=a.replace(/style=\"\"/g,\"\");return a=a.replace(/<span>/g,\"\")}})();"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/scayt/CHANGELOG.md",
    "content": "SCAYT plugin for CKEditor 4 Changelog\n====================\n### CKEditor 4.5.6\n\nNew Features:\n* CKEditor [language addon](http://ckeditor.com/addon/language) support\n* CKEditor [placeholder addon](http://ckeditor.com/addon/placeholder) support\n* Drag and Drop support\n* *Experimental* GRAYT functionality http://www.webspellchecker.net/samples/scayt-ckeditor-plugin.html#25\n\nFixed issues:\n* [#98](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/98) SCAYT Affects Dialog Double Click. Fixed in SCAYT Core.\n* [#102](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/102) SCAYT Core performance enhancements\n* [#104](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/104) SCAYT's spans leak into the clipboard and after pasting\n* [#105](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/105) Javascript error fired in case of multiple instances of CKEditor in one page\n* [#107](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/107) SCAYT should not check non-editable parts of content\n* [#108](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/108) Latest SCAYT copies id of editor element to the iframe\n* SCAYT stops working when CKEditor Undo plug-in not enabled\n* Issue with pasting SCAYT markup in CKEditor\n* [#32](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/32) SCAYT stops working after pressing Cancel button in WSC dialog\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/scayt/LICENSE.md",
    "content": "Software License Agreement\n==========================\n\n**CKEditor SCAYT Plugin**\nCopyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved.\n\nLicensed under the terms of any of the following licenses at your choice:\n\n*   GNU General Public License Version 2 or later (the \"GPL\"):\n    http://www.gnu.org/licenses/gpl.html\n\n*   GNU Lesser General Public License Version 2.1 or later (the \"LGPL\"):\n    http://www.gnu.org/licenses/lgpl.html\n\n*   Mozilla Public License Version 1.1 or later (the \"MPL\"):\n    http://www.mozilla.org/MPL/MPL-1.1.html\n\nYou are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled \"legal.txt\" in your version of this software, indicating your license choice.\n\nSources of Intellectual Property Included in this plugin\n--------------------------------------------------------\n\nWhere not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission.\n\nTrademarks\n----------\n\nCKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/scayt/README.md",
    "content": "CKEditor SCAYT Plugin\n=====================\n\nThis plugin brings Spell Check As You Type (SCAYT) into up to CKEditor 4+.\n\nSCAYT is a \"installation-less\", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution.\n\nInstallation\n------------\n\n1. Clone/copy this repository contents in a new \"plugins/scayt\" folder in your CKEditor installation.\n2. Enable the \"scayt\" plugin in the CKEditor configuration file (config.js):\n\n        config.extraPlugins = 'scayt';\n\nThat's all. SCAYT will appear on the editor toolbar and will be ready to use.\n\nLicense\n-------\n\nLicensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).\n\nSee LICENSE.md for more information.\n\nDeveloped in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/).\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/scayt/dialogs/options.js",
    "content": "﻿CKEDITOR.dialog.add(\"scaytDialog\",function(c){var f=c.scayt,q='\\x3cp\\x3e\\x3cimg src\\x3d\"'+f.getLogo()+'\" /\\x3e\\x3c/p\\x3e\\x3cp\\x3e'+f.getLocal(\"version\")+f.getVersion()+\"\\x3c/p\\x3e\\x3cp\\x3e\"+f.getLocal(\"text_copyrights\")+\"\\x3c/p\\x3e\",r=CKEDITOR.document,n={isChanged:function(){return null===this.newLang||this.currentLang===this.newLang?!1:!0},currentLang:f.getLang(),newLang:null,reset:function(){this.currentLang=f.getLang();this.newLang=null},id:\"lang\"},q=[{id:\"options\",label:f.getLocal(\"tab_options\"),\nonShow:function(){},elements:[{type:\"vbox\",id:\"scaytOptions\",children:function(){var a=f.getApplicationConfig(),b=[],g={\"ignore-all-caps-words\":\"label_allCaps\",\"ignore-domain-names\":\"label_ignoreDomainNames\",\"ignore-words-with-mixed-cases\":\"label_mixedCase\",\"ignore-words-with-numbers\":\"label_mixedWithDigits\"},e;for(e in a)a={type:\"checkbox\"},a.id=e,a.label=f.getLocal(g[e]),b.push(a);return b}(),onShow:function(){this.getChild();for(var a=c.scayt,b=0;b<this.getChild().length;b++)this.getChild()[b].setValue(a.getApplicationConfig()[this.getChild()[b].id])}}]},\n{id:\"langs\",label:f.getLocal(\"tab_languages\"),elements:[{id:\"leftLangColumn\",type:\"vbox\",align:\"left\",widths:[\"100\"],children:[{type:\"html\",id:\"langBox\",style:\"overflow: hidden; white-space: normal;margin-bottom:15px;\",html:'\\x3cdiv\\x3e\\x3cdiv style\\x3d\"float:left;width:45%;margin-left:5px;\" id\\x3d\"left-col-'+c.name+'\"\\x3e\\x3c/div\\x3e\\x3cdiv style\\x3d\"float:left;width:45%;margin-left:15px;\" id\\x3d\"right-col-'+c.name+'\"\\x3e\\x3c/div\\x3e\\x3c/div\\x3e',onShow:function(){var a=c.scayt.getLang();r.getById(\"scaytLang_\"+\nc.name+\"_\"+a).$.checked=!0}},{type:\"html\",id:\"graytLanguagesHint\",html:'\\x3cdiv style\\x3d\"margin:5px auto; width:95%;white-space:normal;\" id\\x3d\"'+c.name+'graytLanguagesHint\"\\x3e\\x3cspan style\\x3d\"width:10px;height:10px;display: inline-block; background:#02b620;vertical-align:top;margin-top:2px;\"\\x3e\\x3c/span\\x3e - This languages are supported by Grammar As You Type(GRAYT).\\x3c/div\\x3e',onShow:function(){var a=r.getById(c.name+\"graytLanguagesHint\");c.config.grayt_autoStartup||(a.$.style.display=\"none\")}}]}]},\n{id:\"dictionaries\",label:f.getLocal(\"tab_dictionaries\"),elements:[{type:\"vbox\",id:\"rightCol_col__left\",children:[{type:\"html\",id:\"dictionaryNote\",html:\"\"},{type:\"text\",id:\"dictionaryName\",label:f.getLocal(\"label_fieldNameDic\")||\"Dictionary name\",onShow:function(a){var b=a.sender,g=c.scayt;setTimeout(function(){b.getContentElement(\"dictionaries\",\"dictionaryNote\").getElement().setText(\"\");null!=g.getUserDictionaryName()&&\"\"!=g.getUserDictionaryName()&&b.getContentElement(\"dictionaries\",\"dictionaryName\").setValue(g.getUserDictionaryName())},\n0)}},{type:\"hbox\",id:\"notExistDic\",align:\"left\",style:\"width:auto;\",widths:[\"50%\",\"50%\"],children:[{type:\"button\",id:\"createDic\",label:f.getLocal(\"btn_createDic\"),title:f.getLocal(\"btn_createDic\"),onClick:function(){var a=this.getDialog(),b=p,g=c.scayt,e=a.getContentElement(\"dictionaries\",\"dictionaryName\").getValue();g.createUserDictionary(e,function(d){d.error||b.toggleDictionaryButtons.call(a,!0);d.dialog=a;d.command=\"create\";d.name=e;c.fire(\"scaytUserDictionaryAction\",d)},function(d){d.dialog=\na;d.command=\"create\";d.name=e;c.fire(\"scaytUserDictionaryActionError\",d)})}},{type:\"button\",id:\"restoreDic\",label:f.getLocal(\"btn_restoreDic\"),title:f.getLocal(\"btn_restoreDic\"),onClick:function(){var a=this.getDialog(),b=c.scayt,g=p,e=a.getContentElement(\"dictionaries\",\"dictionaryName\").getValue();b.restoreUserDictionary(e,function(d){d.dialog=a;d.error||g.toggleDictionaryButtons.call(a,!0);d.command=\"restore\";d.name=e;c.fire(\"scaytUserDictionaryAction\",d)},function(d){d.dialog=a;d.command=\"restore\";\nd.name=e;c.fire(\"scaytUserDictionaryActionError\",d)})}}]},{type:\"hbox\",id:\"existDic\",align:\"left\",style:\"width:auto;\",widths:[\"50%\",\"50%\"],children:[{type:\"button\",id:\"removeDic\",label:f.getLocal(\"btn_deleteDic\"),title:f.getLocal(\"btn_deleteDic\"),onClick:function(){var a=this.getDialog(),b=c.scayt,g=p,e=a.getContentElement(\"dictionaries\",\"dictionaryName\"),d=e.getValue();b.removeUserDictionary(d,function(b){e.setValue(\"\");b.error||g.toggleDictionaryButtons.call(a,!1);b.dialog=a;b.command=\"remove\";\nb.name=d;c.fire(\"scaytUserDictionaryAction\",b)},function(b){b.dialog=a;b.command=\"remove\";b.name=d;c.fire(\"scaytUserDictionaryActionError\",b)})}},{type:\"button\",id:\"renameDic\",label:f.getLocal(\"btn_renameDic\"),title:f.getLocal(\"btn_renameDic\"),onClick:function(){var a=this.getDialog(),b=c.scayt,g=a.getContentElement(\"dictionaries\",\"dictionaryName\").getValue();b.renameUserDictionary(g,function(b){b.dialog=a;b.command=\"rename\";b.name=g;c.fire(\"scaytUserDictionaryAction\",b)},function(b){b.dialog=a;b.command=\n\"rename\";b.name=g;c.fire(\"scaytUserDictionaryActionError\",b)})}}]},{type:\"html\",id:\"dicInfo\",html:'\\x3cdiv id\\x3d\"dic_info_editor1\" style\\x3d\"margin:5px auto; width:95%;white-space:normal;\"\\x3e'+f.getLocal(\"text_descriptionDic\")+\"\\x3c/div\\x3e\"}]}]},{id:\"about\",label:f.getLocal(\"tab_about\"),elements:[{type:\"html\",id:\"about\",style:\"margin: 5px 5px;\",html:'\\x3cdiv\\x3e\\x3cdiv id\\x3d\"scayt_about_\"\\x3e'+q+\"\\x3c/div\\x3e\\x3c/div\\x3e\"}]}];c.on(\"scaytUserDictionaryAction\",function(a){var b=SCAYT.prototype.UILib,\ng=a.data.dialog,e=g.getContentElement(\"dictionaries\",\"dictionaryNote\").getElement(),d=a.editor.scayt,c;void 0===a.data.error?(c=d.getLocal(\"message_success_\"+a.data.command+\"Dic\"),c=c.replace(\"%s\",a.data.name),e.setText(c),b.css(e.$,{color:\"blue\"})):(\"\"===a.data.name?e.setText(d.getLocal(\"message_info_emptyDic\")):(c=d.getLocal(\"message_error_\"+a.data.command+\"Dic\"),c=c.replace(\"%s\",a.data.name),e.setText(c)),b.css(e.$,{color:\"red\"}),null!=d.getUserDictionaryName()&&\"\"!=d.getUserDictionaryName()?g.getContentElement(\"dictionaries\",\n\"dictionaryName\").setValue(d.getUserDictionaryName()):g.getContentElement(\"dictionaries\",\"dictionaryName\").setValue(\"\"))});c.on(\"scaytUserDictionaryActionError\",function(a){var b=SCAYT.prototype.UILib,c=a.data.dialog,e=c.getContentElement(\"dictionaries\",\"dictionaryNote\").getElement(),d=a.editor.scayt,f;\"\"===a.data.name?e.setText(d.getLocal(\"message_info_emptyDic\")):(f=d.getLocal(\"message_error_\"+a.data.command+\"Dic\"),f=f.replace(\"%s\",a.data.name),e.setText(f));b.css(e.$,{color:\"red\"});null!=d.getUserDictionaryName()&&\n\"\"!=d.getUserDictionaryName()?c.getContentElement(\"dictionaries\",\"dictionaryName\").setValue(d.getUserDictionaryName()):c.getContentElement(\"dictionaries\",\"dictionaryName\").setValue(\"\")});var p={title:f.getLocal(\"text_title\"),resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:340,minHeight:260,onLoad:function(){if(0!=c.config.scayt_uiTabs[1]){var a=p,b=a.getLangBoxes.call(this);b.getParent().setStyle(\"white-space\",\"normal\");a.renderLangList(b);this.definition.minWidth=this.getSize().width;this.resize(this.definition.minWidth,\nthis.definition.minHeight)}},onCancel:function(){n.reset()},onHide:function(){c.unlockSelection()},onShow:function(){c.fire(\"scaytDialogShown\",this);if(0!=c.config.scayt_uiTabs[2]){var a=c.scayt,b=this.getContentElement(\"dictionaries\",\"dictionaryName\"),g=this.getContentElement(\"dictionaries\",\"existDic\").getElement().getParent(),e=this.getContentElement(\"dictionaries\",\"notExistDic\").getElement().getParent();g.hide();e.hide();null!=a.getUserDictionaryName()&&\"\"!=a.getUserDictionaryName()?(this.getContentElement(\"dictionaries\",\n\"dictionaryName\").setValue(a.getUserDictionaryName()),g.show()):(b.setValue(\"\"),e.show())}},onOk:function(){var a=p,b=c.scayt;this.getContentElement(\"options\",\"scaytOptions\");a=a.getChangedOption.call(this);b.commitOption({changedOptions:a})},toggleDictionaryButtons:function(a){var b=this.getContentElement(\"dictionaries\",\"existDic\").getElement().getParent(),c=this.getContentElement(\"dictionaries\",\"notExistDic\").getElement().getParent();a?(b.show(),c.hide()):(b.hide(),c.show())},getChangedOption:function(){var a=\n{};if(1==c.config.scayt_uiTabs[0])for(var b=this.getContentElement(\"options\",\"scaytOptions\").getChild(),g=0;g<b.length;g++)b[g].isChanged()&&(a[b[g].id]=b[g].getValue());n.isChanged()&&(a[n.id]=c.config.scayt_sLang=n.currentLang=n.newLang);return a},buildRadioInputs:function(a,b,g){var e=new CKEDITOR.dom.element(\"div\"),d=\"scaytLang_\"+c.name+\"_\"+b,f=CKEDITOR.dom.element.createFromHtml('\\x3cinput id\\x3d\"'+d+'\" type\\x3d\"radio\"  value\\x3d\"'+b+'\" name\\x3d\"scayt_lang\" /\\x3e'),m=new CKEDITOR.dom.element(\"label\"),\nk=c.scayt;e.setStyles({\"white-space\":\"normal\",position:\"relative\",\"padding-bottom\":\"2px\"});f.on(\"click\",function(a){n.newLang=a.sender.getValue()});m.appendText(a);m.setAttribute(\"for\",d);g&&c.config.grayt_autoStartup&&m.setStyles({color:\"#02b620\"});e.append(f);e.append(m);b===k.getLang()&&(f.setAttribute(\"checked\",!0),f.setAttribute(\"defaultChecked\",\"defaultChecked\"));return e},renderLangList:function(a){var b=a.find(\"#left-col-\"+c.name).getItem(0);a=a.find(\"#right-col-\"+c.name).getItem(0);var g=\nf.getScaytLangList(),e=f.getGraytLangList(),d={},l=[],m=0,k=!1,h;for(h in g.ltr)d[h]=g.ltr[h];for(h in g.rtl)d[h]=g.rtl[h];for(h in d)l.push([h,d[h]]);l.sort(function(a,b){var c=0;a[1]>b[1]?c=1:a[1]<b[1]&&(c=-1);return c});d={};for(k=0;k<l.length;k++)d[l[k][0]]=l[k][1];l=Math.round(l.length/2);for(h in d)m++,k=h in e.ltr||h in e.rtl,this.buildRadioInputs(d[h],h,k).appendTo(m<=l?b:a)},getLangBoxes:function(){return this.getContentElement(\"langs\",\"langBox\").getElement()},contents:function(a,b){var c=\n[],e=b.config.scayt_uiTabs;if(e){for(var d in e)1==e[d]&&c.push(a[d]);c.push(a[a.length-1])}else return a;return c}(q,c)};return p});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/scayt/dialogs/toolbar.css",
    "content": "a\n{\n\ttext-decoration:none;\n\tpadding: 2px 4px 4px 6px;\n\tdisplay : block;\n\tborder-width: 1px;\n\tborder-style: solid;\n\tmargin : 0px;\n}\n\na.cke_scayt_toogle:hover,\na.cke_scayt_toogle:focus,\na.cke_scayt_toogle:active\n{\n\tborder-color: #316ac5;\n\tbackground-color: #dff1ff;\n\tcolor : #000;\n\tcursor: pointer;\n\tmargin : 0px;\n}\na.cke_scayt_toogle {\n\tcolor : #316ac5;\n\tborder-color: #fff;\n}\n.scayt_enabled a.cke_scayt_item {\n\tcolor : #316ac5;\n\tborder-color: #fff;\n\tmargin : 0px;\n}\n.scayt_disabled a.cke_scayt_item {\n\tcolor : gray;\n\tborder-color : #fff;\n}\n.scayt_enabled a.cke_scayt_item:hover,\n.scayt_enabled a.cke_scayt_item:focus,\n.scayt_enabled a.cke_scayt_item:active\n{\n\tborder-color: #316ac5;\n\tbackground-color: #dff1ff;\n\tcolor : #000;\n\tcursor: pointer;\n}\n.scayt_disabled a.cke_scayt_item:hover,\n.scayt_disabled a.cke_scayt_item:focus,\n.scayt_disabled a.cke_scayt_item:active\n{\n\tborder-color: gray;\n\tbackground-color: #dff1ff;\n\tcolor : gray;\n\tcursor: no-drop;\n}\n.cke_scayt_set_on, .cke_scayt_set_off\n{\n\tdisplay: none;\n}\n.scayt_enabled .cke_scayt_set_on\n{\n\tdisplay: none;\n}\n.scayt_disabled .cke_scayt_set_on\n{\n\tdisplay: inline;\n}\n.scayt_disabled .cke_scayt_set_off\n{\n\tdisplay: none;\n}\n.scayt_enabled  .cke_scayt_set_off\n{\n\tdisplay: inline;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt",
    "content": "Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n\ncs.js      Found: 118 Missing: 0\ncy.js      Found: 118 Missing: 0\nde.js      Found: 118 Missing: 0\nel.js      Found: 16 Missing: 102\neo.js      Found: 118 Missing: 0\net.js      Found: 31 Missing: 87\nfa.js      Found: 24 Missing: 94\nfi.js      Found: 23 Missing: 95\nfr.js      Found: 118 Missing: 0\nhr.js      Found: 23 Missing: 95\nit.js      Found: 118 Missing: 0\nnb.js      Found: 118 Missing: 0\nnl.js      Found: 118 Missing: 0\nno.js      Found: 118 Missing: 0\ntr.js      Found: 118 Missing: 0\nug.js      Found: 39 Missing: 79\nzh-cn.js   Found: 118 Missing: 0\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/af.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"af\",{euro:\"Euroteken\",lsquo:\"Linker enkelkwotasie\",rsquo:\"Regter enkelkwotasie\",ldquo:\"Linker dubbelkwotasie\",rdquo:\"Regter dubbelkwotasie\",ndash:\"Kortkoppelteken\",mdash:\"Langkoppelteken\",iexcl:\"Omgekeerdeuitroepteken\",cent:\"Centteken\",pound:\"Pondteken\",curren:\"Geldeenheidteken\",yen:\"Yenteken\",brvbar:\"Gebreekte balk\",sect:\"Afdeelingsteken\",uml:\"Deelteken\",copy:\"Kopieregteken\",ordf:\"Vroulikekenteken\",laquo:\"Linkgeoorienteerde aanhaalingsteken\",not:\"Verbodeteken\",\nreg:\"Regestrasieteken\",macr:\"Lengteteken\",deg:\"Gradeteken\",sup2:\"Kwadraatteken\",sup3:\"Kubiekteken\",acute:\"Akuutaksentteken\",micro:\"Mikroteken\",para:\"Pilcrow sign\",middot:\"Middle dot\",cedil:\"Cedilla\",sup1:\"Superscript one\",ordm:\"Masculine ordinal indicator\",raquo:\"Right-pointing double angle quotation mark\",frac14:\"Vulgar fraction one quarter\",frac12:\"Vulgar fraction one half\",frac34:\"Vulgar fraction three quarters\",iquest:\"Inverted question mark\",Agrave:\"Latin capital letter A with grave accent\",\nAacute:\"Latin capital letter A with acute accent\",Acirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",\nIacute:\"Latin capital letter I with acute accent\",Icirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"Latin capital letter O with grave accent\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"Multiplication sign\",Oslash:\"Latin capital letter O with stroke\",\nUgrave:\"Latin capital letter U with grave accent\",Uacute:\"Latin capital letter U with acute accent\",Ucirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Latin small letter sharp s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",\naring:\"Latin small letter a with ring above\",aelig:\"Latin small letter æ\",ccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",\nntilde:\"Latin small letter n with tilde\",ograve:\"Latin small letter o with grave accent\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"Division sign\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",\nyacute:\"Latin small letter y with acute accent\",thorn:\"Latin small letter thorn\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",\ntrade:\"Trade mark sign\",9658:\"Black right-pointing pointer\",bull:\"Bullet\",rarr:\"Rightwards arrow\",rArr:\"Rightwards double arrow\",hArr:\"Left right double arrow\",diams:\"Black diamond suit\",asymp:\"Almost equal to\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/ar.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"ar\",{euro:\"رمز اليورو\",lsquo:\"علامة تنصيص فردية علي اليسار\",rsquo:\"علامة تنصيص فردية علي اليمين\",ldquo:\"علامة تنصيص مزدوجة علي اليسار\",rdquo:\"علامة تنصيص مزدوجة علي اليمين\",ndash:\"En dash\",mdash:\"Em dash\",iexcl:\"علامة تعجب مقلوبة\",cent:\"رمز السنت\",pound:\"رمز الاسترليني\",curren:\"رمز العملة\",yen:\"رمز الين\",brvbar:\"شريط مقطوع\",sect:\"رمز القسم\",uml:\"Diaeresis\",copy:\"علامة حقوق الطبع\",ordf:\"Feminine ordinal indicator\",laquo:\"Left-pointing double angle quotation mark\",\nnot:\"ليست علامة\",reg:\"علامة مسجّلة\",macr:\"Macron\",deg:\"Degree sign\",sup2:\"Superscript two\",sup3:\"Superscript three\",acute:\"Acute accent\",micro:\"Micro sign\",para:\"Pilcrow sign\",middot:\"Middle dot\",cedil:\"Cedilla\",sup1:\"Superscript one\",ordm:\"Masculine ordinal indicator\",raquo:\"Right-pointing double angle quotation mark\",frac14:\"Vulgar fraction one quarter\",frac12:\"Vulgar fraction one half\",frac34:\"Vulgar fraction three quarters\",iquest:\"علامة الإستفهام غير صحيحة\",Agrave:\"Latin capital letter A with grave accent\",\nAacute:\"Latin capital letter A with acute accent\",Acirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",\nIacute:\"Latin capital letter I with acute accent\",Icirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"Latin capital letter O with grave accent\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"Multiplication sign\",Oslash:\"Latin capital letter O with stroke\",\nUgrave:\"Latin capital letter U with grave accent\",Uacute:\"Latin capital letter U with acute accent\",Ucirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Latin small letter sharp s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",\naring:\"Latin small letter a with ring above\",aelig:\"Latin small letter æ\",ccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",\nntilde:\"Latin small letter n with tilde\",ograve:\"Latin small letter o with grave accent\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"Division sign\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",\nyacute:\"Latin small letter y with acute accent\",thorn:\"Latin small letter thorn\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",\ntrade:\"Trade mark sign\",9658:\"Black right-pointing pointer\",bull:\"Bullet\",rarr:\"Rightwards arrow\",rArr:\"Rightwards double arrow\",hArr:\"Left right double arrow\",diams:\"Black diamond suit\",asymp:\"Almost equal to\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/bg.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"bg\",{euro:\"Евро знак\",lsquo:\"Лява маркировка за цитат\",rsquo:\"Дясна маркировка за цитат\",ldquo:\"Лява двойна кавичка за цитат\",rdquo:\"Дясна двойна кавичка за цитат\",ndash:\"\\\\\\\\\",mdash:\"/\",iexcl:\"Обърната питанка\",cent:\"Знак за цент\",pound:\"Знак за паунд\",curren:\"Валутен знак\",yen:\"Знак за йена\",brvbar:\"Прекъсната линия\",sect:\"Знак за секция\",uml:\"Diaeresis\",copy:\"Знак за Copyright\",ordf:\"Feminine ordinal indicator\",laquo:\"Left-pointing double angle quotation mark\",\nnot:\"Not sign\",reg:\"Registered sign\",macr:\"Macron\",deg:\"Degree sign\",sup2:\"Superscript two\",sup3:\"Superscript three\",acute:\"Acute accent\",micro:\"Micro sign\",para:\"Pilcrow sign\",middot:\"Middle dot\",cedil:\"Cedilla\",sup1:\"Superscript one\",ordm:\"Masculine ordinal indicator\",raquo:\"Right-pointing double angle quotation mark\",frac14:\"Vulgar fraction one quarter\",frac12:\"Vulgar fraction one half\",frac34:\"Vulgar fraction three quarters\",iquest:\"Inverted question mark\",Agrave:\"Latin capital letter A with grave accent\",\nAacute:\"Latin capital letter A with acute accent\",Acirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",\nIacute:\"Latin capital letter I with acute accent\",Icirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"Latin capital letter O with grave accent\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"Multiplication sign\",Oslash:\"Latin capital letter O with stroke\",\nUgrave:\"Latin capital letter U with grave accent\",Uacute:\"Latin capital letter U with acute accent\",Ucirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Latin small letter sharp s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",\naring:\"Latin small letter a with ring above\",aelig:\"Latin small letter æ\",ccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",\nntilde:\"Latin small letter n with tilde\",ograve:\"Latin small letter o with grave accent\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"Division sign\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",\nyacute:\"Latin small letter y with acute accent\",thorn:\"Latin small letter thorn\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",\ntrade:\"Trade mark sign\",9658:\"Black right-pointing pointer\",bull:\"Bullet\",rarr:\"Rightwards arrow\",rArr:\"Rightwards double arrow\",hArr:\"Left right double arrow\",diams:\"Black diamond suit\",asymp:\"Almost equal to\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/ca.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"ca\",{euro:\"Símbol d'euro\",lsquo:\"Signe de cometa simple esquerra\",rsquo:\"Signe de cometa simple dreta\",ldquo:\"Signe de cometa doble esquerra\",rdquo:\"Signe de cometa doble dreta\",ndash:\"Guió\",mdash:\"Guió baix\",iexcl:\"Signe d'exclamació inversa\",cent:\"Símbol de percentatge\",pound:\"Símbol de lliura\",curren:\"Símbol de moneda\",yen:\"Símbol de Yen\",brvbar:\"Barra trencada\",sect:\"Símbol de secció\",uml:\"Dièresi\",copy:\"Símbol de Copyright\",ordf:\"Indicador ordinal femení\",\nlaquo:\"Signe de cometes angulars esquerra\",not:\"Símbol de negació\",reg:\"Símbol registrat\",macr:\"Macron\",deg:\"Símbol de grau\",sup2:\"Superíndex dos\",sup3:\"Superíndex tres\",acute:\"Accent agut\",micro:\"Símbol de micro\",para:\"Símbol de calderó\",middot:\"Punt volat\",cedil:\"Ce trencada\",sup1:\"Superíndex u\",ordm:\"Indicador ordinal masculí\",raquo:\"Signe de cometes angulars dreta\",frac14:\"Fracció vulgar un quart\",frac12:\"Fracció vulgar una meitat\",frac34:\"Fracció vulgar tres quarts\",iquest:\"Símbol d'interrogació invertit\",\nAgrave:\"Lletra majúscula llatina A amb accent greu\",Aacute:\"Lletra majúscula llatina A amb accent agut\",Acirc:\"Lletra majúscula llatina A amb circumflex\",Atilde:\"Lletra majúscula llatina A amb titlla\",Auml:\"Lletra majúscula llatina A amb dièresi\",Aring:\"Lletra majúscula llatina A amb anell superior\",AElig:\"Lletra majúscula llatina Æ\",Ccedil:\"Lletra majúscula llatina C amb ce trencada\",Egrave:\"Lletra majúscula llatina E amb accent greu\",Eacute:\"Lletra majúscula llatina E amb accent agut\",Ecirc:\"Lletra majúscula llatina E amb circumflex\",\nEuml:\"Lletra majúscula llatina E amb dièresi\",Igrave:\"Lletra majúscula llatina I amb accent greu\",Iacute:\"Lletra majúscula llatina I amb accent agut\",Icirc:\"Lletra majúscula llatina I amb circumflex\",Iuml:\"Lletra majúscula llatina I amb dièresi\",ETH:\"Lletra majúscula llatina Eth\",Ntilde:\"Lletra majúscula llatina N amb titlla\",Ograve:\"Lletra majúscula llatina O amb accent greu\",Oacute:\"Lletra majúscula llatina O amb accent agut\",Ocirc:\"Lletra majúscula llatina O amb circumflex\",Otilde:\"Lletra majúscula llatina O amb titlla\",\nOuml:\"Lletra majúscula llatina O amb dièresi\",times:\"Símbol de multiplicació\",Oslash:\"Lletra majúscula llatina O amb barra\",Ugrave:\"Lletra majúscula llatina U amb accent greu\",Uacute:\"Lletra majúscula llatina U amb accent agut\",Ucirc:\"Lletra majúscula llatina U amb circumflex\",Uuml:\"Lletra majúscula llatina U amb dièresi\",Yacute:\"Lletra majúscula llatina Y amb accent agut\",THORN:\"Lletra majúscula llatina Thorn\",szlig:\"Lletra minúscula llatina sharp s\",agrave:\"Lletra minúscula llatina a amb accent greu\",\naacute:\"Lletra minúscula llatina a amb accent agut\",acirc:\"Lletra minúscula llatina a amb circumflex\",atilde:\"Lletra minúscula llatina a amb titlla\",auml:\"Lletra minúscula llatina a amb dièresi\",aring:\"Lletra minúscula llatina a amb anell superior\",aelig:\"Lletra minúscula llatina æ\",ccedil:\"Lletra minúscula llatina c amb ce trencada\",egrave:\"Lletra minúscula llatina e amb accent greu\",eacute:\"Lletra minúscula llatina e amb accent agut\",ecirc:\"Lletra minúscula llatina e amb circumflex\",euml:\"Lletra minúscula llatina e amb dièresi\",\nigrave:\"Lletra minúscula llatina i amb accent greu\",iacute:\"Lletra minúscula llatina i amb accent agut\",icirc:\"Lletra minúscula llatina i amb circumflex\",iuml:\"Lletra minúscula llatina i amb dièresi\",eth:\"Lletra minúscula llatina eth\",ntilde:\"Lletra minúscula llatina n amb titlla\",ograve:\"Lletra minúscula llatina o amb accent greu\",oacute:\"Lletra minúscula llatina o amb accent agut\",ocirc:\"Lletra minúscula llatina o amb circumflex\",otilde:\"Lletra minúscula llatina o amb titlla\",ouml:\"Lletra minúscula llatina o amb dièresi\",\ndivide:\"Símbol de divisió\",oslash:\"Lletra minúscula llatina o amb barra\",ugrave:\"Lletra minúscula llatina u amb accent greu\",uacute:\"Lletra minúscula llatina u amb accent agut\",ucirc:\"Lletra minúscula llatina u amb circumflex\",uuml:\"Lletra minúscula llatina u amb dièresi\",yacute:\"Lletra minúscula llatina y amb accent agut\",thorn:\"Lletra minúscula llatina thorn\",yuml:\"Lletra minúscula llatina y amb dièresi\",OElig:\"Lligadura majúscula llatina OE\",oelig:\"Lligadura minúscula llatina oe\",372:\"Lletra majúscula llatina W amb circumflex\",\n374:\"Lletra majúscula llatina Y amb circumflex\",373:\"Lletra minúscula llatina w amb circumflex\",375:\"Lletra minúscula llatina y amb circumflex\",sbquo:\"Signe de cita simple baixa-9\",8219:\"Signe de cita simple alta-invertida-9\",bdquo:\"Signe de cita doble baixa-9\",hellip:\"Punts suspensius\",trade:\"Símbol de marca registrada\",9658:\"Punter negre apuntant cap a la dreta\",bull:\"Vinyeta\",rarr:\"Fletxa cap a la dreta\",rArr:\"Doble fletxa cap a la dreta\",hArr:\"Doble fletxa esquerra dreta\",diams:\"Vestit negre diamant\",\nasymp:\"Gairebé igual a\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/cs.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"cs\",{euro:\"Znak eura\",lsquo:\"Počáteční uvozovka jednoduchá\",rsquo:\"Koncová uvozovka jednoduchá\",ldquo:\"Počáteční uvozovka dvojitá\",rdquo:\"Koncová uvozovka dvojitá\",ndash:\"En pomlčka\",mdash:\"Em pomlčka\",iexcl:\"Obrácený vykřičník\",cent:\"Znak centu\",pound:\"Znak libry\",curren:\"Znak měny\",yen:\"Znak jenu\",brvbar:\"Přerušená svislá čára\",sect:\"Znak oddílu\",uml:\"Přehláska\",copy:\"Znak copyrightu\",ordf:\"Ženský indikátor rodu\",laquo:\"Znak dvojitých lomených uvozovek vlevo\",\nnot:\"Logistický zápor\",reg:\"Znak registrace\",macr:\"Pomlčka nad\",deg:\"Znak stupně\",sup2:\"Dvojka jako horní index\",sup3:\"Trojka jako horní index\",acute:\"Čárka nad vpravo\",micro:\"Znak mikro\",para:\"Znak odstavce\",middot:\"Tečka uprostřed\",cedil:\"Ocásek vlevo\",sup1:\"Jednička jako horní index\",ordm:\"Mužský indikátor rodu\",raquo:\"Znak dvojitých lomených uvozovek vpravo\",frac14:\"Obyčejný zlomek jedna čtvrtina\",frac12:\"Obyčejný zlomek jedna polovina\",frac34:\"Obyčejný zlomek tři čtvrtiny\",iquest:\"Znak obráceného otazníku\",\nAgrave:\"Velké písmeno latinky A s čárkou nad vlevo\",Aacute:\"Velké písmeno latinky A s čárkou nad vpravo\",Acirc:\"Velké písmeno latinky A s vokáněm\",Atilde:\"Velké písmeno latinky A s tildou\",Auml:\"Velké písmeno latinky A s dvěma tečkami\",Aring:\"Velké písmeno latinky A s kroužkem nad\",AElig:\"Velké písmeno latinky Ae\",Ccedil:\"Velké písmeno latinky C s ocáskem vlevo\",Egrave:\"Velké písmeno latinky E s čárkou nad vlevo\",Eacute:\"Velké písmeno latinky E s čárkou nad vpravo\",Ecirc:\"Velké písmeno latinky E s vokáněm\",\nEuml:\"Velké písmeno latinky E s dvěma tečkami\",Igrave:\"Velké písmeno latinky I s čárkou nad vlevo\",Iacute:\"Velké písmeno latinky I s čárkou nad vpravo\",Icirc:\"Velké písmeno latinky I s vokáněm\",Iuml:\"Velké písmeno latinky I s dvěma tečkami\",ETH:\"Velké písmeno latinky Eth\",Ntilde:\"Velké písmeno latinky N s tildou\",Ograve:\"Velké písmeno latinky O s čárkou nad vlevo\",Oacute:\"Velké písmeno latinky O s čárkou nad vpravo\",Ocirc:\"Velké písmeno latinky O s vokáněm\",Otilde:\"Velké písmeno latinky O s tildou\",\nOuml:\"Velké písmeno latinky O s dvěma tečkami\",times:\"Znak násobení\",Oslash:\"Velké písmeno latinky O přeškrtnuté\",Ugrave:\"Velké písmeno latinky U s čárkou nad vlevo\",Uacute:\"Velké písmeno latinky U s čárkou nad vpravo\",Ucirc:\"Velké písmeno latinky U s vokáněm\",Uuml:\"Velké písmeno latinky U s dvěma tečkami\",Yacute:\"Velké písmeno latinky Y s čárkou nad vpravo\",THORN:\"Velké písmeno latinky Thorn\",szlig:\"Malé písmeno latinky ostré s\",agrave:\"Malé písmeno latinky a s čárkou nad vlevo\",aacute:\"Malé písmeno latinky a s čárkou nad vpravo\",\nacirc:\"Malé písmeno latinky a s vokáněm\",atilde:\"Malé písmeno latinky a s tildou\",auml:\"Malé písmeno latinky a s dvěma tečkami\",aring:\"Malé písmeno latinky a s kroužkem nad\",aelig:\"Malé písmeno latinky ae\",ccedil:\"Malé písmeno latinky c s ocáskem vlevo\",egrave:\"Malé písmeno latinky e s čárkou nad vlevo\",eacute:\"Malé písmeno latinky e s čárkou nad vpravo\",ecirc:\"Malé písmeno latinky e s vokáněm\",euml:\"Malé písmeno latinky e s dvěma tečkami\",igrave:\"Malé písmeno latinky i s čárkou nad vlevo\",iacute:\"Malé písmeno latinky i s čárkou nad vpravo\",\nicirc:\"Malé písmeno latinky i s vokáněm\",iuml:\"Malé písmeno latinky i s dvěma tečkami\",eth:\"Malé písmeno latinky eth\",ntilde:\"Malé písmeno latinky n s tildou\",ograve:\"Malé písmeno latinky o s čárkou nad vlevo\",oacute:\"Malé písmeno latinky o s čárkou nad vpravo\",ocirc:\"Malé písmeno latinky o s vokáněm\",otilde:\"Malé písmeno latinky o s tildou\",ouml:\"Malé písmeno latinky o s dvěma tečkami\",divide:\"Znak dělení\",oslash:\"Malé písmeno latinky o přeškrtnuté\",ugrave:\"Malé písmeno latinky u s čárkou nad vlevo\",\nuacute:\"Malé písmeno latinky u s čárkou nad vpravo\",ucirc:\"Malé písmeno latinky u s vokáněm\",uuml:\"Malé písmeno latinky u s dvěma tečkami\",yacute:\"Malé písmeno latinky y s čárkou nad vpravo\",thorn:\"Malé písmeno latinky thorn\",yuml:\"Malé písmeno latinky y s dvěma tečkami\",OElig:\"Velká ligatura latinky OE\",oelig:\"Malá ligatura latinky OE\",372:\"Velké písmeno latinky W s vokáněm\",374:\"Velké písmeno latinky Y s vokáněm\",373:\"Malé písmeno latinky w s vokáněm\",375:\"Malé písmeno latinky y s vokáněm\",sbquo:\"Dolní 9 uvozovka jednoduchá\",\n8219:\"Horní obrácená 9 uvozovka jednoduchá\",bdquo:\"Dolní 9 uvozovka dvojitá\",hellip:\"Trojtečkový úvod\",trade:\"Obchodní značka\",9658:\"Černý ukazatel směřující vpravo\",bull:\"Kolečko\",rarr:\"Šipka vpravo\",rArr:\"Dvojitá šipka vpravo\",hArr:\"Dvojitá šipka vlevo a vpravo\",diams:\"Černé piky\",asymp:\"Téměř se rovná\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/cy.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"cy\",{euro:\"Arwydd yr Ewro\",lsquo:\"Dyfynnod chwith unigol\",rsquo:\"Dyfynnod dde unigol\",ldquo:\"Dyfynnod chwith dwbl\",rdquo:\"Dyfynnod dde dwbl\",ndash:\"Cysylltnod en\",mdash:\"Cysylltnod em\",iexcl:\"Ebychnod gwrthdro\",cent:\"Arwydd sent\",pound:\"Arwydd punt\",curren:\"Arwydd arian cyfred\",yen:\"Arwydd yen\",brvbar:\"Bar toriedig\",sect:\"Arwydd adran\",uml:\"Didolnod\",copy:\"Arwydd hawlfraint\",ordf:\"Dangosydd benywaidd\",laquo:\"Dyfynnod dwbl ar ongl i'r chwith\",not:\"Arwydd Nid\",\nreg:\"Arwydd cofrestredig\",macr:\"Macron\",deg:\"Arwydd gradd\",sup2:\"Dau uwchsgript\",sup3:\"Tri uwchsgript\",acute:\"Acen ddyrchafedig\",micro:\"Arwydd micro\",para:\"Arwydd pilcrow\",middot:\"Dot canol\",cedil:\"Sedila\",sup1:\"Un uwchsgript\",ordm:\"Dangosydd gwrywaidd\",raquo:\"Dyfynnod dwbl ar ongl i'r dde\",frac14:\"Ffracsiwn cyffredin un cwarter\",frac12:\"Ffracsiwn cyffredin un hanner\",frac34:\"Ffracsiwn cyffredin tri chwarter\",iquest:\"Marc cwestiwn gwrthdroëdig\",Agrave:\"Priflythyren A Lladinaidd gydag acen ddisgynedig\",\nAacute:\"Priflythyren A Lladinaidd gydag acen ddyrchafedig\",Acirc:\"Priflythyren A Lladinaidd gydag acen grom\",Atilde:\"Priflythyren A Lladinaidd gyda thild\",Auml:\"Priflythyren A Lladinaidd gyda didolnod\",Aring:\"Priflythyren A Lladinaidd gyda chylch uwchben\",AElig:\"Priflythyren Æ Lladinaidd\",Ccedil:\"Priflythyren C Lladinaidd gyda sedila\",Egrave:\"Priflythyren E Lladinaidd gydag acen ddisgynedig\",Eacute:\"Priflythyren E Lladinaidd gydag acen ddyrchafedig\",Ecirc:\"Priflythyren E Lladinaidd gydag acen grom\",\nEuml:\"Priflythyren E Lladinaidd gyda didolnod\",Igrave:\"Priflythyren I Lladinaidd gydag acen ddisgynedig\",Iacute:\"Priflythyren I Lladinaidd gydag acen ddyrchafedig\",Icirc:\"Priflythyren I Lladinaidd gydag acen grom\",Iuml:\"Priflythyren I Lladinaidd gyda didolnod\",ETH:\"Priflythyren Eth\",Ntilde:\"Priflythyren N Lladinaidd gyda thild\",Ograve:\"Priflythyren O Lladinaidd gydag acen ddisgynedig\",Oacute:\"Priflythyren O Lladinaidd gydag acen ddyrchafedig\",Ocirc:\"Priflythyren O Lladinaidd gydag acen grom\",Otilde:\"Priflythyren O Lladinaidd gyda thild\",\nOuml:\"Priflythyren O Lladinaidd gyda didolnod\",times:\"Arwydd lluosi\",Oslash:\"Priflythyren O Lladinaidd gyda strôc\",Ugrave:\"Priflythyren U Lladinaidd gydag acen ddisgynedig\",Uacute:\"Priflythyren U Lladinaidd gydag acen ddyrchafedig\",Ucirc:\"Priflythyren U Lladinaidd gydag acen grom\",Uuml:\"Priflythyren U Lladinaidd gyda didolnod\",Yacute:\"Priflythyren Y Lladinaidd gydag acen ddyrchafedig\",THORN:\"Priflythyren Thorn\",szlig:\"Llythyren s fach Lladinaidd siarp \",agrave:\"Llythyren a fach Lladinaidd gydag acen ddisgynedig\",\naacute:\"Llythyren a fach Lladinaidd gydag acen ddyrchafedig\",acirc:\"Llythyren a fach Lladinaidd gydag acen grom\",atilde:\"Llythyren a fach Lladinaidd gyda thild\",auml:\"Llythyren a fach Lladinaidd gyda didolnod\",aring:\"Llythyren a fach Lladinaidd gyda chylch uwchben\",aelig:\"Llythyren æ fach Lladinaidd\",ccedil:\"Llythyren c fach Lladinaidd gyda sedila\",egrave:\"Llythyren e fach Lladinaidd gydag acen ddisgynedig\",eacute:\"Llythyren e fach Lladinaidd gydag acen ddyrchafedig\",ecirc:\"Llythyren e fach Lladinaidd gydag acen grom\",\neuml:\"Llythyren e fach Lladinaidd gyda didolnod\",igrave:\"Llythyren i fach Lladinaidd gydag acen ddisgynedig\",iacute:\"Llythyren i fach Lladinaidd gydag acen ddyrchafedig\",icirc:\"Llythyren i fach Lladinaidd gydag acen grom\",iuml:\"Llythyren i fach Lladinaidd gyda didolnod\",eth:\"Llythyren eth fach\",ntilde:\"Llythyren n fach Lladinaidd gyda thild\",ograve:\"Llythyren o fach Lladinaidd gydag acen ddisgynedig\",oacute:\"Llythyren o fach Lladinaidd gydag acen ddyrchafedig\",ocirc:\"Llythyren o fach Lladinaidd gydag acen grom\",\notilde:\"Llythyren o fach Lladinaidd gyda thild\",ouml:\"Llythyren o fach Lladinaidd gyda didolnod\",divide:\"Arwydd rhannu\",oslash:\"Llythyren o fach Lladinaidd gyda strôc\",ugrave:\"Llythyren u fach Lladinaidd gydag acen ddisgynedig\",uacute:\"Llythyren u fach Lladinaidd gydag acen ddyrchafedig\",ucirc:\"Llythyren u fach Lladinaidd gydag acen grom\",uuml:\"Llythyren u fach Lladinaidd gyda didolnod\",yacute:\"Llythyren y fach Lladinaidd gydag acen ddisgynedig\",thorn:\"Llythyren o fach Lladinaidd gyda strôc\",yuml:\"Llythyren y fach Lladinaidd gyda didolnod\",\nOElig:\"Priflythyren cwlwm OE Lladinaidd \",oelig:\"Priflythyren cwlwm oe Lladinaidd \",372:\"Priflythyren W gydag acen grom\",374:\"Priflythyren Y gydag acen grom\",373:\"Llythyren w fach gydag acen grom\",375:\"Llythyren y fach gydag acen grom\",sbquo:\"Dyfynnod sengl 9-isel\",8219:\"Dyfynnod sengl 9-uchel cildro\",bdquo:\"Dyfynnod dwbl 9-isel\",hellip:\"Coll geiriau llorweddol\",trade:\"Arwydd marc masnachol\",9658:\"Pwyntydd du i'r dde\",bull:\"Bwled\",rarr:\"Saeth i'r dde\",rArr:\"Saeth ddwbl i'r dde\",hArr:\"Saeth ddwbl i'r chwith\",\ndiams:\"Siwt diemwnt du\",asymp:\"Bron yn hafal iddo\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/da.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"da\",{euro:\"Euro-tegn\",lsquo:\"Venstre enkelt anførselstegn\",rsquo:\"Højre enkelt anførselstegn\",ldquo:\"Venstre dobbelt anførselstegn\",rdquo:\"Højre dobbelt anførselstegn\",ndash:\"Bindestreg\",mdash:\"Tankestreg\",iexcl:\"Omvendt udråbstegn\",cent:\"Cent-tegn\",pound:\"Pund-tegn\",curren:\"Kurs-tegn\",yen:\"Yen-tegn\",brvbar:\"Brudt streg\",sect:\"Paragraftegn\",uml:\"Umlaut\",copy:\"Copyright-tegn\",ordf:\"Feminin ordinal indikator\",laquo:\"Venstre dobbel citations-vinkel\",not:\"Negation\",\nreg:\"Registreret varemærke tegn\",macr:\"Macron\",deg:\"Grad-tegn\",sup2:\"Superscript to\",sup3:\"Superscript tre\",acute:\"Prim-tegn\",micro:\"Mikro-tegn\",para:\"Pilcrow-tegn\",middot:\"Punkt-tegn\",cedil:\"Cedille\",sup1:\"Superscript et\",ordm:\"Maskulin ordinal indikator\",raquo:\"Højre dobbel citations-vinkel\",frac14:\"En fjerdedel\",frac12:\"En halv\",frac34:\"En tredjedel\",iquest:\"Omvendt udråbstegn\",Agrave:\"Stort A med accent grave\",Aacute:\"Stort A med accent aigu\",Acirc:\"Stort A med cirkumfleks\",Atilde:\"Stort A med tilde\",\nAuml:\"Stort A med umlaut\",Aring:\"Stort Å\",AElig:\"Stort Æ\",Ccedil:\"Stort C med cedille\",Egrave:\"Stort E med accent grave\",Eacute:\"Stort E med accent aigu\",Ecirc:\"Stort E med cirkumfleks\",Euml:\"Stort E med umlaut\",Igrave:\"Stort I med accent grave\",Iacute:\"Stort I med accent aigu\",Icirc:\"Stort I med cirkumfleks\",Iuml:\"Stort I med umlaut\",ETH:\"Stort Ð (edd)\",Ntilde:\"Stort N med tilde\",Ograve:\"Stort O med accent grave\",Oacute:\"Stort O med accent aigu\",Ocirc:\"Stort O med cirkumfleks\",Otilde:\"Stort O med tilde\",\nOuml:\"Stort O med umlaut\",times:\"Gange-tegn\",Oslash:\"Stort Ø\",Ugrave:\"Stort U med accent grave\",Uacute:\"Stort U med accent aigu\",Ucirc:\"Stort U med cirkumfleks\",Uuml:\"Stort U med umlaut\",Yacute:\"Stort Y med accent aigu\",THORN:\"Stort Thorn\",szlig:\"Lille eszett\",agrave:\"Lille a med accent grave\",aacute:\"Lille a med accent aigu\",acirc:\"Lille a med cirkumfleks\",atilde:\"Lille a med tilde\",auml:\"Lille a med umlaut\",aring:\"Lilla å\",aelig:\"Lille æ\",ccedil:\"Lille c med cedille\",egrave:\"Lille e med accent grave\",\neacute:\"Lille e med accent aigu\",ecirc:\"Lille e med cirkumfleks\",euml:\"Lille e med umlaut\",igrave:\"Lille i med accent grave\",iacute:\"Lille i med accent aigu\",icirc:\"Lille i med cirkumfleks\",iuml:\"Lille i med umlaut\",eth:\"Lille ð (edd)\",ntilde:\"Lille n med tilde\",ograve:\"Lille o med accent grave\",oacute:\"Lille o med accent aigu\",ocirc:\"Lille o med cirkumfleks\",otilde:\"Lille o med tilde\",ouml:\"Lille o med umlaut\",divide:\"Divisions-tegn\",oslash:\"Lille ø\",ugrave:\"Lille u med accent grave\",uacute:\"Lille u med accent aigu\",\nucirc:\"Lille u med cirkumfleks\",uuml:\"Lille u med umlaut\",yacute:\"Lille y med accent aigu\",thorn:\"Lille thorn\",yuml:\"Lille y med umlaut\",OElig:\"Stort Æ\",oelig:\"Lille æ\",372:\"Stort W med cirkumfleks\",374:\"Stort Y med cirkumfleks\",373:\"Lille w med cirkumfleks\",375:\"Lille y med cirkumfleks\",sbquo:\"Lavt enkelt 9-komma citationstegn\",8219:\"Højt enkelt 9-komma citationstegn\",bdquo:\"Dobbelt 9-komma citationstegn\",hellip:\"Tre horizontale prikker\",trade:\"Varemærke-tegn\",9658:\"Sort højre pil\",bull:\"Punkt\",\nrarr:\"Højre pil\",rArr:\"Højre dobbelt pil\",hArr:\"Venstre højre dobbelt pil\",diams:\"Sort diamant\",asymp:\"Næsten lig med\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/de-ch.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"de-ch\",{euro:\"Euro Zeichen\",lsquo:\"Hochkomma links\",rsquo:\"Hochkomma rechts\",ldquo:\"Anführungszeichen links\",rdquo:\"Anführungszeichen rechts\",ndash:\"Kleiner Strich\",mdash:\"Mittlerer Strich\",iexcl:\"Invertiertes Ausrufezeichen\",cent:\"Cent-Zeichen\",pound:\"Pfund-Zeichen\",curren:\"Währungszeichen\",yen:\"Yen\",brvbar:\"Gestrichelte Linie\",sect:\"Paragrafenzeichen\",uml:\"Diäresis\",copy:\"Copyright-Zeichen\",ordf:\"Feminine ordinal Anzeige\",laquo:\"Nach links zeigenden Doppel-Winkel Anführungszeichen\",\nnot:\"Not-Zeichen\",reg:\"Registriert-Zeichen\",macr:\"Längezeichen\",deg:\"Grad-Zeichen\",sup2:\"Hoch 2\",sup3:\"Hoch 3\",acute:\"Akzentzeichen \",micro:\"Mikro-Zeichen\",para:\"Pilcrow-Zeichen\",middot:\"Mittelpunkt\",cedil:\"Cedilla\",sup1:\"Hoch 1\",ordm:\"Männliche Ordnungszahl Anzeige\",raquo:\"Nach rechts zeigenden Doppel-Winkel Anführungszeichen\",frac14:\"ein Viertel\",frac12:\"Hälfte\",frac34:\"Dreiviertel\",iquest:\"Umgekehrtes Fragezeichen\",Agrave:\"Lateinischer Buchstabe A mit AkzentGrave\",Aacute:\"Lateinischer Buchstabe A mit Akutakzent\",\nAcirc:\"Lateinischer Buchstabe A mit Zirkumflex\",Atilde:\"Lateinischer Buchstabe A mit Tilde\",Auml:\"Lateinischer Buchstabe A mit Trema\",Aring:\"Lateinischer Buchstabe A mit Ring oben\",AElig:\"Lateinischer Buchstabe Æ\",Ccedil:\"Lateinischer Buchstabe C mit Cedille\",Egrave:\"Lateinischer Buchstabe E mit AkzentGrave\",Eacute:\"Lateinischer Buchstabe E mit Akutakzent\",Ecirc:\"Lateinischer Buchstabe E mit Zirkumflex\",Euml:\"Lateinischer Buchstabe E Trema\",Igrave:\"Lateinischer Buchstabe I mit AkzentGrave\",Iacute:\"Lateinischer Buchstabe I mit Akutakzent\",\nIcirc:\"Lateinischer Buchstabe I mit Zirkumflex\",Iuml:\"Lateinischer Buchstabe I mit Trema\",ETH:\"Lateinischer Buchstabe Eth\",Ntilde:\"Lateinischer Buchstabe N mit Tilde\",Ograve:\"Lateinischer Buchstabe O mit AkzentGrave\",Oacute:\"Lateinischer Buchstabe O mit Akutakzent\",Ocirc:\"Lateinischer Buchstabe O mit Zirkumflex\",Otilde:\"Lateinischer Buchstabe O mit Tilde\",Ouml:\"Lateinischer Buchstabe O mit Trema\",times:\"Multiplikation\",Oslash:\"Lateinischer Buchstabe O durchgestrichen\",Ugrave:\"Lateinischer Buchstabe U mit Akzentgrave\",\nUacute:\"Lateinischer Buchstabe U mit Akutakzent\",Ucirc:\"Lateinischer Buchstabe U mit Zirkumflex\",Uuml:\"Lateinischer Buchstabe a mit Trema\",Yacute:\"Lateinischer Buchstabe a mit Akzent\",THORN:\"Lateinischer Buchstabe mit Dorn\",szlig:\"Kleiner lateinischer Buchstabe scharfe s\",agrave:\"Kleiner lateinischer Buchstabe a mit Accent grave\",aacute:\"Kleiner lateinischer Buchstabe a mit Akut\",acirc:\"Lateinischer Buchstabe a mit Zirkumflex\",atilde:\"Lateinischer Buchstabe a mit Tilde\",auml:\"Kleiner lateinischer Buchstabe a mit Trema\",\naring:\"Kleiner lateinischer Buchstabe a mit Ring oben\",aelig:\"Lateinischer Buchstabe æ\",ccedil:\"Kleiner lateinischer Buchstabe c mit Cedille\",egrave:\"Kleiner lateinischer Buchstabe e mit Accent grave\",eacute:\"Kleiner lateinischer Buchstabe e mit Akut\",ecirc:\"Kleiner lateinischer Buchstabe e mit Zirkumflex\",euml:\"Kleiner lateinischer Buchstabe e mit Trema\",igrave:\"Kleiner lateinischer Buchstabe i mit AkzentGrave\",iacute:\"Kleiner lateinischer Buchstabe i mit Akzent\",icirc:\"Kleiner lateinischer Buchstabe i mit Zirkumflex\",\niuml:\"Kleiner lateinischer Buchstabe i mit Trema\",eth:\"Kleiner lateinischer Buchstabe eth\",ntilde:\"Kleiner lateinischer Buchstabe n mit Tilde\",ograve:\"Kleiner lateinischer Buchstabe o mit Accent grave\",oacute:\"Kleiner lateinischer Buchstabe o mit Akzent\",ocirc:\"Kleiner lateinischer Buchstabe o mit Zirkumflex\",otilde:\"Lateinischer Buchstabe i mit Tilde\",ouml:\"Kleiner lateinischer Buchstabe o mit Trema\",divide:\"Divisionszeichen\",oslash:\"Kleiner lateinischer Buchstabe o durchgestrichen\",ugrave:\"Kleiner lateinischer Buchstabe u mit Accent grave\",\nuacute:\"Kleiner lateinischer Buchstabe u mit Akut\",ucirc:\"Kleiner lateinischer Buchstabe u mit Zirkumflex\",uuml:\"Kleiner lateinischer Buchstabe u mit Trema\",yacute:\"Kleiner lateinischer Buchstabe y mit Akut\",thorn:\"Kleiner lateinischer Buchstabe Dorn\",yuml:\"Kleiner lateinischer Buchstabe y mit Trema\",OElig:\"Lateinischer Buchstabe Ligatur OE\",oelig:\"Kleiner lateinischer Buchstabe Ligatur OE\",372:\"Lateinischer Buchstabe W mit Zirkumflex\",374:\"Lateinischer Buchstabe Y mit Zirkumflex\",373:\"Kleiner lateinischer Buchstabe w mit Zirkumflex\",\n375:\"Kleiner lateinischer Buchstabe y mit Zirkumflex\",sbquo:\"Tiefergestelltes Komma\",8219:\"Rumgedrehtes Komma\",bdquo:\"Doppeltes Anführungszeichen unten\",hellip:\"horizontale Auslassungspunkte\",trade:\"Handelszeichen\",9658:\"Dreickspfeil rechts\",bull:\"Bullet\",rarr:\"Pfeil rechts\",rArr:\"Doppelpfeil rechts\",hArr:\"Doppelpfeil links\",diams:\"Karo\",asymp:\"Ungefähr\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/de.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"de\",{euro:\"Euro Zeichen\",lsquo:\"Hochkomma links\",rsquo:\"Hochkomma rechts\",ldquo:\"Anführungszeichen links\",rdquo:\"Anführungszeichen rechts\",ndash:\"Kleiner Strich\",mdash:\"Mittlerer Strich\",iexcl:\"Invertiertes Ausrufezeichen\",cent:\"Cent-Zeichen\",pound:\"Pfund-Zeichen\",curren:\"Währungszeichen\",yen:\"Yen\",brvbar:\"Gestrichelte Linie\",sect:\"Paragrafenzeichen\",uml:\"Diäresis\",copy:\"Copyright-Zeichen\",ordf:\"Feminine ordinal Anzeige\",laquo:\"Nach links zeigenden Doppel-Winkel Anführungszeichen\",\nnot:\"Not-Zeichen\",reg:\"Registriert-Zeichen\",macr:\"Längezeichen\",deg:\"Grad-Zeichen\",sup2:\"Hoch 2\",sup3:\"Hoch 3\",acute:\"Akzentzeichen \",micro:\"Mikro-Zeichen\",para:\"Pilcrow-Zeichen\",middot:\"Mittelpunkt\",cedil:\"Cedilla\",sup1:\"Hoch 1\",ordm:\"Männliche Ordnungszahl Anzeige\",raquo:\"Nach rechts zeigenden Doppel-Winkel Anführungszeichen\",frac14:\"ein Viertel\",frac12:\"Hälfte\",frac34:\"Dreiviertel\",iquest:\"Umgekehrtes Fragezeichen\",Agrave:\"Lateinischer Buchstabe A mit AkzentGrave\",Aacute:\"Lateinischer Buchstabe A mit Akutakzent\",\nAcirc:\"Lateinischer Buchstabe A mit Zirkumflex\",Atilde:\"Lateinischer Buchstabe A mit Tilde\",Auml:\"Lateinischer Buchstabe A mit Trema\",Aring:\"Lateinischer Buchstabe A mit Ring oben\",AElig:\"Lateinischer Buchstabe Æ\",Ccedil:\"Lateinischer Buchstabe C mit Cedille\",Egrave:\"Lateinischer Buchstabe E mit AkzentGrave\",Eacute:\"Lateinischer Buchstabe E mit Akutakzent\",Ecirc:\"Lateinischer Buchstabe E mit Zirkumflex\",Euml:\"Lateinischer Buchstabe E Trema\",Igrave:\"Lateinischer Buchstabe I mit AkzentGrave\",Iacute:\"Lateinischer Buchstabe I mit Akutakzent\",\nIcirc:\"Lateinischer Buchstabe I mit Zirkumflex\",Iuml:\"Lateinischer Buchstabe I mit Trema\",ETH:\"Lateinischer Buchstabe Eth\",Ntilde:\"Lateinischer Buchstabe N mit Tilde\",Ograve:\"Lateinischer Buchstabe O mit AkzentGrave\",Oacute:\"Lateinischer Buchstabe O mit Akutakzent\",Ocirc:\"Lateinischer Buchstabe O mit Zirkumflex\",Otilde:\"Lateinischer Buchstabe O mit Tilde\",Ouml:\"Lateinischer Buchstabe O mit Trema\",times:\"Multiplikation\",Oslash:\"Lateinischer Buchstabe O durchgestrichen\",Ugrave:\"Lateinischer Buchstabe U mit Akzentgrave\",\nUacute:\"Lateinischer Buchstabe U mit Akutakzent\",Ucirc:\"Lateinischer Buchstabe U mit Zirkumflex\",Uuml:\"Lateinischer Buchstabe a mit Trema\",Yacute:\"Lateinischer Buchstabe a mit Akzent\",THORN:\"Lateinischer Buchstabe mit Dorn\",szlig:\"Kleiner lateinischer Buchstabe scharfe s\",agrave:\"Kleiner lateinischer Buchstabe a mit Accent grave\",aacute:\"Kleiner lateinischer Buchstabe a mit Akut\",acirc:\"Lateinischer Buchstabe a mit Zirkumflex\",atilde:\"Lateinischer Buchstabe a mit Tilde\",auml:\"Kleiner lateinischer Buchstabe a mit Trema\",\naring:\"Kleiner lateinischer Buchstabe a mit Ring oben\",aelig:\"Lateinischer Buchstabe æ\",ccedil:\"Kleiner lateinischer Buchstabe c mit Cedille\",egrave:\"Kleiner lateinischer Buchstabe e mit Accent grave\",eacute:\"Kleiner lateinischer Buchstabe e mit Akut\",ecirc:\"Kleiner lateinischer Buchstabe e mit Zirkumflex\",euml:\"Kleiner lateinischer Buchstabe e mit Trema\",igrave:\"Kleiner lateinischer Buchstabe i mit AkzentGrave\",iacute:\"Kleiner lateinischer Buchstabe i mit Akzent\",icirc:\"Kleiner lateinischer Buchstabe i mit Zirkumflex\",\niuml:\"Kleiner lateinischer Buchstabe i mit Trema\",eth:\"Kleiner lateinischer Buchstabe eth\",ntilde:\"Kleiner lateinischer Buchstabe n mit Tilde\",ograve:\"Kleiner lateinischer Buchstabe o mit Accent grave\",oacute:\"Kleiner lateinischer Buchstabe o mit Akzent\",ocirc:\"Kleiner lateinischer Buchstabe o mit Zirkumflex\",otilde:\"Lateinischer Buchstabe i mit Tilde\",ouml:\"Kleiner lateinischer Buchstabe o mit Trema\",divide:\"Divisionszeichen\",oslash:\"Kleiner lateinischer Buchstabe o durchgestrichen\",ugrave:\"Kleiner lateinischer Buchstabe u mit Accent grave\",\nuacute:\"Kleiner lateinischer Buchstabe u mit Akut\",ucirc:\"Kleiner lateinischer Buchstabe u mit Zirkumflex\",uuml:\"Kleiner lateinischer Buchstabe u mit Trema\",yacute:\"Kleiner lateinischer Buchstabe y mit Akut\",thorn:\"Kleiner lateinischer Buchstabe Dorn\",yuml:\"Kleiner lateinischer Buchstabe y mit Trema\",OElig:\"Lateinischer Buchstabe Ligatur OE\",oelig:\"Kleiner lateinischer Buchstabe Ligatur OE\",372:\"Lateinischer Buchstabe W mit Zirkumflex\",374:\"Lateinischer Buchstabe Y mit Zirkumflex\",373:\"Kleiner lateinischer Buchstabe w mit Zirkumflex\",\n375:\"Kleiner lateinischer Buchstabe y mit Zirkumflex\",sbquo:\"Tiefergestelltes Komma\",8219:\"Rumgedrehtes Komma\",bdquo:\"Doppeltes Anführungszeichen unten\",hellip:\"horizontale Auslassungspunkte\",trade:\"Handelszeichen\",9658:\"Dreickspfeil rechts\",bull:\"Bullet\",rarr:\"Pfeil rechts\",rArr:\"Doppelpfeil rechts\",hArr:\"Doppelpfeil links\",diams:\"Karo\",asymp:\"Ungefähr\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/el.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"el\",{euro:\"Σύμβολο Ευρώ\",lsquo:\"Αριστερός χαρακτήρας μονού εισαγωγικού\",rsquo:\"Δεξιός χαρακτήρας μονού εισαγωγικού\",ldquo:\"Αριστερός χαρακτήρας ευθύγραμμων εισαγωγικών\",rdquo:\"Δεξιός χαρακτήρας ευθύγραμμων εισαγωγικών\",ndash:\"Παύλα en\",mdash:\"Παύλα em\",iexcl:\"Ανάποδο θαυμαστικό\",cent:\"Σύμβολο σεντ\",pound:\"Σύμβολο λίρας\",curren:\"Σύμβολο συναλλαγματικής μονάδας\",yen:\"Σύμβολο Γιεν\",brvbar:\"Σπασμένη μπάρα\",sect:\"Σύμβολο τμήματος\",uml:\"Διαίρεση\",copy:\"Σύμβολο πνευματικών δικαιωμάτων\",\nordf:\"Θηλυκός τακτικός δείκτης\",laquo:\"Γωνιώδη εισαγωγικά αριστερής κατάδειξης\",not:\"Σύμβολο άρνησης\",reg:\"Σύμβολο σημάτων κατατεθέν\",macr:\"Μακρόν\",deg:\"Σύμβολο βαθμού\",sup2:\"Εκτεθειμένο δύο\",sup3:\"Εκτεθειμένο τρία\",acute:\"Οξεία\",micro:\"Σύμβολο μικρού\",para:\"Σύμβολο παραγράφου\",middot:\"Μέση τελεία\",cedil:\"Υπογεγραμμένη\",sup1:\"Εκτεθειμένο ένα\",ordm:\"Αρσενικός τακτικός δείκτης\",raquo:\"Γωνιώδη εισαγωγικά δεξιάς κατάδειξης\",frac14:\"Γνήσιο κλάσμα ενός τετάρτου\",frac12:\"Γνήσιο κλάσμα ενός δεύτερου\",frac34:\"Γνήσιο κλάσμα τριών τετάρτων\",\niquest:\"Ανάποδο θαυμαστικό\",Agrave:\"Λατινικό κεφαλαίο γράμμα A με βαρεία\",Aacute:\"Λατινικό κεφαλαίο γράμμα A με οξεία\",Acirc:\"Λατινικό κεφαλαίο γράμμα A με περισπωμένη\",Atilde:\"Λατινικό κεφαλαίο γράμμα A με περισπωμένη\",Auml:\"Λατινικό κεφαλαίο γράμμα A με διαλυτικά\",Aring:\"Λατινικό κεφαλαίο γράμμα A με δακτύλιο επάνω\",AElig:\"Λατινικό κεφαλαίο γράμμα Æ\",Ccedil:\"Λατινικό κεφαλαίο γράμμα C με υπογεγραμμένη\",Egrave:\"Λατινικό κεφαλαίο γράμμα E με βαρεία\",Eacute:\"Λατινικό κεφαλαίο γράμμα E με οξεία\",Ecirc:\"Λατινικό κεφαλαίο γράμμα Ε με περισπωμένη \",\nEuml:\"Λατινικό κεφαλαίο γράμμα Ε με διαλυτικά\",Igrave:\"Λατινικό κεφαλαίο γράμμα I με βαρεία\",Iacute:\"Λατινικό κεφαλαίο γράμμα I με οξεία\",Icirc:\"Λατινικό κεφαλαίο γράμμα I  με περισπωμένη\",Iuml:\"Λατινικό κεφαλαίο γράμμα I με διαλυτικά \",ETH:\"Λατινικό κεφαλαίο γράμμα Eth\",Ntilde:\"Λατινικό κεφαλαίο γράμμα N με περισπωμένη\",Ograve:\"Λατινικό κεφαλαίο γράμμα O με βαρεία\",Oacute:\"Λατινικό κεφαλαίο γράμμα O με οξεία\",Ocirc:\"Λατινικό κεφαλαίο γράμμα O με περισπωμένη \",Otilde:\"Λατινικό κεφαλαίο γράμμα O με περισπωμένη\",\nOuml:\"Λατινικό κεφαλαίο γράμμα O με διαλυτικά\",times:\"Σύμβολο πολλαπλασιασμού\",Oslash:\"Λατινικό κεφαλαίο γράμμα O με μολυβιά\",Ugrave:\"Λατινικό κεφαλαίο γράμμα U με βαρεία\",Uacute:\"Λατινικό κεφαλαίο γράμμα U με οξεία\",Ucirc:\"Λατινικό κεφαλαίο γράμμα U με περισπωμένη\",Uuml:\"Λατινικό κεφαλαίο γράμμα U με διαλυτικά\",Yacute:\"Λατινικό κεφαλαίο γράμμα Y με οξεία\",THORN:\"Λατινικό κεφαλαίο γράμμα Thorn\",szlig:\"Λατινικό μικρό γράμμα απότομο s\",agrave:\"Λατινικό μικρό γράμμα a με βαρεία\",aacute:\"Λατινικό μικρό γράμμα a με οξεία\",\nacirc:\"Λατινικό μικρό γράμμα a με περισπωμένη\",atilde:\"Λατινικό μικρό γράμμα a με περισπωμένη\",auml:\"Λατινικό μικρό γράμμα a με διαλυτικά\",aring:\"Λατινικό μικρό γράμμα a με δακτύλιο πάνω\",aelig:\"Λατινικό μικρό γράμμα æ\",ccedil:\"Λατινικό μικρό γράμμα c με υπογεγραμμένη\",egrave:\"Λατινικό μικρό γράμμα ε με βαρεία\",eacute:\"Λατινικό μικρό γράμμα e με οξεία\",ecirc:\"Λατινικό μικρό γράμμα e με περισπωμένη\",euml:\"Λατινικό μικρό γράμμα e με διαλυτικά\",igrave:\"Λατινικό μικρό γράμμα i με βαρεία\",iacute:\"Λατινικό μικρό γράμμα i με οξεία\",\nicirc:\"Λατινικό μικρό γράμμα i με περισπωμένη\",iuml:\"Λατινικό μικρό γράμμα i με διαλυτικά\",eth:\"Λατινικό μικρό γράμμα eth\",ntilde:\"Λατινικό μικρό γράμμα n με περισπωμένη\",ograve:\"Λατινικό μικρό γράμμα o με βαρεία\",oacute:\"Λατινικό μικρό γράμμα o με οξεία \",ocirc:\"Λατινικό πεζό γράμμα o με περισπωμένη\",otilde:\"Λατινικό μικρό γράμμα o με περισπωμένη \",ouml:\"Λατινικό μικρό γράμμα o με διαλυτικά\",divide:\"Σύμβολο διαίρεσης\",oslash:\"Λατινικό μικρό γράμμα o με περισπωμένη\",ugrave:\"Λατινικό μικρό γράμμα u με βαρεία\",\nuacute:\"Λατινικό μικρό γράμμα u με οξεία\",ucirc:\"Λατινικό μικρό γράμμα u με περισπωμένη\",uuml:\"Λατινικό μικρό γράμμα u με διαλυτικά\",yacute:\"Λατινικό μικρό γράμμα y με οξεία\",thorn:\"Λατινικό μικρό γράμμα thorn\",yuml:\"Λατινικό μικρό γράμμα y με διαλυτικά\",OElig:\"Λατινικό κεφαλαίο σύμπλεγμα ΟΕ\",oelig:\"Λατινικό μικρό σύμπλεγμα oe\",372:\"Λατινικό κεφαλαίο γράμμα W με περισπωμένη\",374:\"Λατινικό κεφαλαίο γράμμα Y με περισπωμένη\",373:\"Λατινικό μικρό γράμμα w με περισπωμένη\",375:\"Λατινικό μικρό γράμμα y με περισπωμένη\",\nsbquo:\"Ενιαίο χαμηλο -9 εισαγωγικό \",8219:\"Ενιαίο υψηλο ανεστραμμένο-9 εισαγωγικό \",bdquo:\"Διπλό χαμηλό-9 εισαγωγικό \",hellip:\"Οριζόντια αποσιωπητικά\",trade:\"Σύμβολο εμπορικού κατατεθέν\",9658:\"Μαύρος δείκτης που δείχνει προς τα δεξιά\",bull:\"Κουκκίδα\",rarr:\"Δεξί βελάκι\",rArr:\"Διπλό δεξί βελάκι\",hArr:\"Διπλό βελάκι αριστερά-δεξιά\",diams:\"Μαύρο διαμάντι\",asymp:\"Σχεδόν ίσο με\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"en-gb\",{euro:\"Euro sign\",lsquo:\"Left single quotation mark\",rsquo:\"Right single quotation mark\",ldquo:\"Left double quotation mark\",rdquo:\"Right double quotation mark\",ndash:\"En dash\",mdash:\"Em dash\",iexcl:\"Inverted exclamation mark\",cent:\"Cent sign\",pound:\"Pound sign\",curren:\"Currency sign\",yen:\"Yen sign\",brvbar:\"Broken bar\",sect:\"Section sign\",uml:\"Diaeresis\",copy:\"Copyright sign\",ordf:\"Feminine ordinal indicator\",laquo:\"Left-pointing double angle quotation mark\",\nnot:\"Not sign\",reg:\"Registered sign\",macr:\"Macron\",deg:\"Degree sign\",sup2:\"Superscript two\",sup3:\"Superscript three\",acute:\"Acute accent\",micro:\"Micro sign\",para:\"Pilcrow sign\",middot:\"Middle dot\",cedil:\"Cedilla\",sup1:\"Superscript one\",ordm:\"Masculine ordinal indicator\",raquo:\"Right-pointing double angle quotation mark\",frac14:\"Vulgar fraction one quarter\",frac12:\"Vulgar fraction one half\",frac34:\"Vulgar fraction three quarters\",iquest:\"Inverted question mark\",Agrave:\"Latin capital letter A with grave accent\",\nAacute:\"Latin capital letter A with acute accent\",Acirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",\nIacute:\"Latin capital letter I with acute accent\",Icirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"Latin capital letter O with grave accent\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"Multiplication sign\",Oslash:\"Latin capital letter O with stroke\",\nUgrave:\"Latin capital letter U with grave accent\",Uacute:\"Latin capital letter U with acute accent\",Ucirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Latin small letter sharp s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",\naring:\"Latin small letter a with ring above\",aelig:\"Latin small letter æ\",ccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",\nntilde:\"Latin small letter n with tilde\",ograve:\"Latin small letter o with grave accent\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"Division sign\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",\nyacute:\"Latin small letter y with acute accent\",thorn:\"Latin small letter thorn\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",\ntrade:\"Trade mark sign\",9658:\"Black right-pointing pointer\",bull:\"Bullet\",rarr:\"Rightwards arrow\",rArr:\"Rightwards double arrow\",hArr:\"Left right double arrow\",diams:\"Black diamond suit\",asymp:\"Almost equal to\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/en.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"en\",{euro:\"Euro sign\",lsquo:\"Left single quotation mark\",rsquo:\"Right single quotation mark\",ldquo:\"Left double quotation mark\",rdquo:\"Right double quotation mark\",ndash:\"En dash\",mdash:\"Em dash\",iexcl:\"Inverted exclamation mark\",cent:\"Cent sign\",pound:\"Pound sign\",curren:\"Currency sign\",yen:\"Yen sign\",brvbar:\"Broken bar\",sect:\"Section sign\",uml:\"Diaeresis\",copy:\"Copyright sign\",ordf:\"Feminine ordinal indicator\",laquo:\"Left-pointing double angle quotation mark\",\nnot:\"Not sign\",reg:\"Registered sign\",macr:\"Macron\",deg:\"Degree sign\",sup2:\"Superscript two\",sup3:\"Superscript three\",acute:\"Acute accent\",micro:\"Micro sign\",para:\"Pilcrow sign\",middot:\"Middle dot\",cedil:\"Cedilla\",sup1:\"Superscript one\",ordm:\"Masculine ordinal indicator\",raquo:\"Right-pointing double angle quotation mark\",frac14:\"Vulgar fraction one quarter\",frac12:\"Vulgar fraction one half\",frac34:\"Vulgar fraction three quarters\",iquest:\"Inverted question mark\",Agrave:\"Latin capital letter A with grave accent\",\nAacute:\"Latin capital letter A with acute accent\",Acirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",\nIacute:\"Latin capital letter I with acute accent\",Icirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"Latin capital letter O with grave accent\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"Multiplication sign\",Oslash:\"Latin capital letter O with stroke\",\nUgrave:\"Latin capital letter U with grave accent\",Uacute:\"Latin capital letter U with acute accent\",Ucirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Latin small letter sharp s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",\naring:\"Latin small letter a with ring above\",aelig:\"Latin small letter æ\",ccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",\nntilde:\"Latin small letter n with tilde\",ograve:\"Latin small letter o with grave accent\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"Division sign\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",\nyacute:\"Latin small letter y with acute accent\",thorn:\"Latin small letter thorn\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",\ntrade:\"Trade mark sign\",9658:\"Black right-pointing pointer\",bull:\"Bullet\",rarr:\"Rightwards arrow\",rArr:\"Rightwards double arrow\",hArr:\"Left right double arrow\",diams:\"Black diamond suit\",asymp:\"Almost equal to\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/eo.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"eo\",{euro:\"Eŭrosigno\",lsquo:\"Supra 6-citilo\",rsquo:\"Supra 9-citilo\",ldquo:\"Supra 66-citilo\",rdquo:\"Supra 99-citilo\",ndash:\"Streketo\",mdash:\"Substreko\",iexcl:\"Renversita krisigno\",cent:\"Cendosigno\",pound:\"Pundosigno\",curren:\"Monersigno\",yen:\"Enosigno\",brvbar:\"Rompita vertikala streko\",sect:\"Kurba paragrafo\",uml:\"Tremao\",copy:\"Kopirajtosigno\",ordf:\"Adjektiva numerfinaĵo\",laquo:\"Duobla malplio-citilo\",not:\"Negohoko\",reg:\"Registrita marko\",macr:\"Superstreko\",deg:\"Gradosigno\",\nsup2:\"Supra indico 2\",sup3:\"Supra indico 3\",acute:\"Dekstra korno\",micro:\"Mikrosigno\",para:\"Rekta paragrafo\",middot:\"Meza punkto\",cedil:\"Zoeto\",sup1:\"Supra indico 1\",ordm:\"Substantiva numerfinaĵo\",raquo:\"Duobla plio-citilo\",frac14:\"Kvaronosigno\",frac12:\"Duonosigno\",frac34:\"Trikvaronosigno\",iquest:\"renversita demandosigno\",Agrave:\"Latina ĉeflitero A kun liva korno\",Aacute:\"Latina ĉeflitero A kun dekstra korno\",Acirc:\"Latina ĉeflitero A kun ĉapelo\",Atilde:\"Latina ĉeflitero A kun tildo\",Auml:\"Latina ĉeflitero A kun tremao\",\nAring:\"Latina ĉeflitero A kun superringo\",AElig:\"Latina ĉeflitera ligaturo Æ\",Ccedil:\"Latina ĉeflitero C kun zoeto\",Egrave:\"Latina ĉeflitero E kun liva korno\",Eacute:\"Latina ĉeflitero E kun dekstra korno\",Ecirc:\"Latina ĉeflitero E kun ĉapelo\",Euml:\"Latina ĉeflitero E kun tremao\",Igrave:\"Latina ĉeflitero I kun liva korno\",Iacute:\"Latina ĉeflitero I kun dekstra korno\",Icirc:\"Latina ĉeflitero I kun ĉapelo\",Iuml:\"Latina ĉeflitero I kun tremao\",ETH:\"Latina ĉeflitero islanda edo\",Ntilde:\"Latina ĉeflitero N kun tildo\",\nOgrave:\"Latina ĉeflitero O kun liva korno\",Oacute:\"Latina ĉeflitero O kun dekstra korno\",Ocirc:\"Latina ĉeflitero O kun ĉapelo\",Otilde:\"Latina ĉeflitero O kun tildo\",Ouml:\"Latina ĉeflitero O kun tremao\",times:\"Multipliko\",Oslash:\"Latina ĉeflitero O trastrekita\",Ugrave:\"Latina ĉeflitero U kun liva korno\",Uacute:\"Latina ĉeflitero U kun dekstra korno\",Ucirc:\"Latina ĉeflitero U kun ĉapelo\",Uuml:\"Latina ĉeflitero U kun tremao\",Yacute:\"Latina ĉeflitero Y kun dekstra korno\",THORN:\"Latina ĉeflitero islanda dorno\",\nszlig:\"Latina etlitero germana sozo (akra s)\",agrave:\"Latina etlitero a kun liva korno\",aacute:\"Latina etlitero a kun dekstra korno\",acirc:\"Latina etlitero a kun ĉapelo\",atilde:\"Latina etlitero a kun tildo\",auml:\"Latina etlitero a kun tremao\",aring:\"Latina etlitero a kun superringo\",aelig:\"Latina etlitera ligaturo æ\",ccedil:\"Latina etlitero c kun zoeto\",egrave:\"Latina etlitero e kun liva korno\",eacute:\"Latina etlitero e kun dekstra korno\",ecirc:\"Latina etlitero e kun ĉapelo\",euml:\"Latina etlitero e kun tremao\",\nigrave:\"Latina etlitero i kun liva korno\",iacute:\"Latina etlitero i kun dekstra korno\",icirc:\"Latina etlitero i kun ĉapelo\",iuml:\"Latina etlitero i kun tremao\",eth:\"Latina etlitero islanda edo\",ntilde:\"Latina etlitero n kun tildo\",ograve:\"Latina etlitero o kun liva korno\",oacute:\"Latina etlitero o kun dekstra korno\",ocirc:\"Latina etlitero o kun ĉapelo\",otilde:\"Latina etlitero o kun tildo\",ouml:\"Latina etlitero o kun tremao\",divide:\"Dividosigno\",oslash:\"Latina etlitero o trastrekita\",ugrave:\"Latina etlitero u kun liva korno\",\nuacute:\"Latina etlitero u kun dekstra korno\",ucirc:\"Latina etlitero u kun ĉapelo\",uuml:\"Latina etlitero u kun tremao\",yacute:\"Latina etlitero y kun dekstra korno\",thorn:\"Latina etlitero islanda dorno\",yuml:\"Latina etlitero y kun tremao\",OElig:\"Latina ĉeflitera ligaturo Œ\",oelig:\"Latina etlitera ligaturo œ\",372:\"Latina ĉeflitero W kun ĉapelo\",374:\"Latina ĉeflitero Y kun ĉapelo\",373:\"Latina etlitero w kun ĉapelo\",375:\"Latina etlitero y kun ĉapelo\",sbquo:\"Suba 9-citilo\",8219:\"Supra renversita 9-citilo\",\nbdquo:\"Suba 99-citilo\",hellip:\"Tripunkto\",trade:\"Varmarka signo\",9658:\"Nigra sago dekstren\",bull:\"Bulmarko\",rarr:\"Sago dekstren\",rArr:\"Duobla sago dekstren\",hArr:\"Duobla sago maldekstren\",diams:\"Nigra kvadrato\",asymp:\"Preskaŭ egala\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/es.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"es\",{euro:\"Símbolo de euro\",lsquo:\"Comilla simple izquierda\",rsquo:\"Comilla simple derecha\",ldquo:\"Comilla doble izquierda\",rdquo:\"Comilla doble derecha\",ndash:\"Guión corto\",mdash:\"Guión medio largo\",iexcl:\"Signo de admiración invertido\",cent:\"Símbolo centavo\",pound:\"Símbolo libra\",curren:\"Símbolo moneda\",yen:\"Símbolo yen\",brvbar:\"Barra vertical rota\",sect:\"Símbolo sección\",uml:\"Diéresis\",copy:\"Signo de derechos de autor\",ordf:\"Indicador ordinal femenino\",laquo:\"Abre comillas angulares\",\nnot:\"Signo negación\",reg:\"Signo de marca registrada\",macr:\"Guión alto\",deg:\"Signo de grado\",sup2:\"Superíndice dos\",sup3:\"Superíndice tres\",acute:\"Acento agudo\",micro:\"Signo micro\",para:\"Signo de pi\",middot:\"Punto medio\",cedil:\"Cedilla\",sup1:\"Superíndice uno\",ordm:\"Indicador orginal masculino\",raquo:\"Cierra comillas angulares\",frac14:\"Fracción ordinaria de un quarto\",frac12:\"Fracción ordinaria de una mitad\",frac34:\"Fracción ordinaria de tres cuartos\",iquest:\"Signo de interrogación invertido\",Agrave:\"Letra A latina mayúscula con acento grave\",\nAacute:\"Letra A latina  mayúscula con acento agudo\",Acirc:\"Letra A latina mayúscula con acento circunflejo\",Atilde:\"Letra A latina mayúscula con tilde\",Auml:\"Letra A latina mayúscula con diéresis\",Aring:\"Letra A latina mayúscula con aro arriba\",AElig:\"Letra Æ latina mayúscula\",Ccedil:\"Letra C latina mayúscula con cedilla\",Egrave:\"Letra E latina mayúscula con acento grave\",Eacute:\"Letra E latina mayúscula con acento agudo\",Ecirc:\"Letra E latina mayúscula con acento circunflejo\",Euml:\"Letra E latina mayúscula con diéresis\",\nIgrave:\"Letra I latina mayúscula con acento grave\",Iacute:\"Letra I latina mayúscula con acento agudo\",Icirc:\"Letra I latina mayúscula con acento circunflejo\",Iuml:\"Letra I latina mayúscula con diéresis\",ETH:\"Letra Eth latina mayúscula\",Ntilde:\"Letra N latina mayúscula con tilde\",Ograve:\"Letra O latina mayúscula con acento grave\",Oacute:\"Letra O latina mayúscula con acento agudo\",Ocirc:\"Letra O latina mayúscula con acento circunflejo\",Otilde:\"Letra O latina mayúscula con tilde\",Ouml:\"Letra O latina mayúscula con diéresis\",\ntimes:\"Signo de multiplicación\",Oslash:\"Letra O latina mayúscula con barra inclinada\",Ugrave:\"Letra U latina mayúscula con acento grave\",Uacute:\"Letra U latina mayúscula con acento agudo\",Ucirc:\"Letra U latina mayúscula con acento circunflejo\",Uuml:\"Letra U latina mayúscula con diéresis\",Yacute:\"Letra Y latina mayúscula con acento agudo\",THORN:\"Letra Thorn latina mayúscula\",szlig:\"Letra s latina fuerte pequeña\",agrave:\"Letra a latina pequeña con acento grave\",aacute:\"Letra a latina pequeña con acento agudo\",\nacirc:\"Letra a latina pequeña con acento circunflejo\",atilde:\"Letra a latina pequeña con tilde\",auml:\"Letra a latina pequeña con diéresis\",aring:\"Letra a latina pequeña con aro arriba\",aelig:\"Letra æ latina pequeña\",ccedil:\"Letra c latina pequeña con cedilla\",egrave:\"Letra e latina pequeña con acento grave\",eacute:\"Letra e latina pequeña con acento agudo\",ecirc:\"Letra e latina pequeña con acento circunflejo\",euml:\"Letra e latina pequeña con diéresis\",igrave:\"Letra i latina pequeña con acento grave\",\niacute:\"Letra i latina pequeña con acento agudo\",icirc:\"Letra i latina pequeña con acento circunflejo\",iuml:\"Letra i latina pequeña con diéresis\",eth:\"Letra eth latina pequeña\",ntilde:\"Letra n latina pequeña con tilde\",ograve:\"Letra o latina pequeña con acento grave\",oacute:\"Letra o latina pequeña con acento agudo\",ocirc:\"Letra o latina pequeña con acento circunflejo\",otilde:\"Letra o latina pequeña con tilde\",ouml:\"Letra o latina pequeña con diéresis\",divide:\"Signo de división\",oslash:\"Letra o latina minúscula con barra inclinada\",\nugrave:\"Letra u latina pequeña con acento grave\",uacute:\"Letra u latina pequeña con acento agudo\",ucirc:\"Letra u latina pequeña con acento circunflejo\",uuml:\"Letra u latina pequeña con diéresis\",yacute:\"Letra u latina pequeña con acento agudo\",thorn:\"Letra thorn latina minúscula\",yuml:\"Letra y latina pequeña con diéresis\",OElig:\"Diptongo OE latino en mayúscula\",oelig:\"Diptongo oe latino en minúscula\",372:\"Letra W latina mayúscula con acento circunflejo\",374:\"Letra Y latina mayúscula con acento circunflejo\",\n373:\"Letra w latina pequeña con acento circunflejo\",375:\"Letra y latina pequeña con acento circunflejo\",sbquo:\"Comilla simple baja-9\",8219:\"Comilla simple alta invertida-9\",bdquo:\"Comillas dobles bajas-9\",hellip:\"Puntos suspensivos horizontales\",trade:\"Signo de marca registrada\",9658:\"Apuntador negro apuntando a la derecha\",bull:\"Viñeta\",rarr:\"Flecha a la derecha\",rArr:\"Flecha doble a la derecha\",hArr:\"Flecha izquierda derecha doble\",diams:\"Diamante negro\",asymp:\"Casi igual a\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/et.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"et\",{euro:\"Euromärk\",lsquo:\"Alustav ühekordne jutumärk\",rsquo:\"Lõpetav ühekordne jutumärk\",ldquo:\"Alustav kahekordne jutumärk\",rdquo:\"Lõpetav kahekordne jutumärk\",ndash:\"Enn-kriips\",mdash:\"Emm-kriips\",iexcl:\"Pööratud hüüumärk\",cent:\"Sendimärk\",pound:\"Naela märk\",curren:\"Valuutamärk\",yen:\"Jeeni märk\",brvbar:\"Katkestatud kriips\",sect:\"Lõigu märk\",uml:\"Täpid\",copy:\"Autoriõiguse märk\",ordf:\"Feminine ordinal indicator\",laquo:\"Left-pointing double angle quotation mark\",\nnot:\"Ei-märk\",reg:\"Registered sign\",macr:\"Macron\",deg:\"Kraadimärk\",sup2:\"Ülaindeks kaks\",sup3:\"Ülaindeks kolm\",acute:\"Acute accent\",micro:\"Mikro-märk\",para:\"Pilcrow sign\",middot:\"Keskpunkt\",cedil:\"Cedilla\",sup1:\"Ülaindeks üks\",ordm:\"Masculine ordinal indicator\",raquo:\"Right-pointing double angle quotation mark\",frac14:\"Vulgar fraction one quarter\",frac12:\"Vulgar fraction one half\",frac34:\"Vulgar fraction three quarters\",iquest:\"Inverted question mark\",Agrave:\"Latin capital letter A with grave accent\",\nAacute:\"Latin capital letter A with acute accent\",Acirc:\"Latin capital letter A with circumflex\",Atilde:\"Ladina suur A tildega\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",\nIacute:\"Latin capital letter I with acute accent\",Icirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"Latin capital letter O with grave accent\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Täppidega ladina suur O\",times:\"Multiplication sign\",Oslash:\"Latin capital letter O with stroke\",\nUgrave:\"Latin capital letter U with grave accent\",Uacute:\"Latin capital letter U with acute accent\",Ucirc:\"Kandilise katusega suur ladina U\",Uuml:\"Täppidega ladina suur U\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Ladina väike terav s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Kandilise katusega ladina väike a\",atilde:\"Tildega ladina väike a\",auml:\"Täppidega ladina väike a\",aring:\"Latin small letter a with ring above\",\naelig:\"Latin small letter æ\",ccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",ntilde:\"Latin small letter n with tilde\",\nograve:\"Latin small letter o with grave accent\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"Jagamismärk\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",yacute:\"Latin small letter y with acute accent\",\nthorn:\"Latin small letter thorn\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",trade:\"Kaubamärgi märk\",9658:\"Black right-pointing pointer\",\nbull:\"Kuul\",rarr:\"Nool paremale\",rArr:\"Topeltnool paremale\",hArr:\"Topeltnool vasakule\",diams:\"Black diamond suit\",asymp:\"Ligikaudu võrdne\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/eu.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"eu\",{euro:\"Euro zeinua\",lsquo:\"Left single quotation mark\",rsquo:\"Right single quotation mark\",ldquo:\"Left double quotation mark\",rdquo:\"Right double quotation mark\",ndash:\"En dash\",mdash:\"Em dash\",iexcl:\"Inverted exclamation mark\",cent:\"Cent sign\",pound:\"Pound sign\",curren:\"Currency sign\",yen:\"Yen sign\",brvbar:\"Broken bar\",sect:\"Section sign\",uml:\"Diaeresis\",copy:\"Copyright sign\",ordf:\"Feminine ordinal indicator\",laquo:\"Left-pointing double angle quotation mark\",\nnot:\"Ez zeinua\",reg:\"Registered sign\",macr:\"Macron\",deg:\"Degree sign\",sup2:\"Superscript two\",sup3:\"Superscript three\",acute:\"Acute accent\",micro:\"Micro sign\",para:\"Pilcrow sign\",middot:\"Middle dot\",cedil:\"Cedilla\",sup1:\"Superscript one\",ordm:\"Masculine ordinal indicator\",raquo:\"Right-pointing double angle quotation mark\",frac14:\"Vulgar fraction one quarter\",frac12:\"Vulgar fraction one half\",frac34:\"Vulgar fraction three quarters\",iquest:\"Inverted question mark\",Agrave:\"Latin capital letter A with grave accent\",\nAacute:\"Latin capital letter A with acute accent\",Acirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",\nIacute:\"Latin capital letter I with acute accent\",Icirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"Latin capital letter O with grave accent\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"Multiplication sign\",Oslash:\"Latin capital letter O with stroke\",\nUgrave:\"Latin capital letter U with grave accent\",Uacute:\"Latin capital letter U with acute accent\",Ucirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Latin small letter sharp s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",\naring:\"Latin small letter a with ring above\",aelig:\"Latin small letter æ\",ccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",\nntilde:\"Latin small letter n with tilde\",ograve:\"Latin small letter o with grave accent\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"Division sign\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",\nyacute:\"Latin small letter y with acute accent\",thorn:\"Latin small letter thorn\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",\ntrade:\"Trade mark sign\",9658:\"Black right-pointing pointer\",bull:\"Bullet\",rarr:\"Rightwards arrow\",rArr:\"Rightwards double arrow\",hArr:\"Left right double arrow\",diams:\"Black diamond suit\",asymp:\"Almost equal to\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/fa.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"fa\",{euro:\"نشان یورو\",lsquo:\"علامت نقل قول تکی چپ\",rsquo:\"علامت نقل قول تکی راست\",ldquo:\"علامت نقل قول دوتایی چپ\",rdquo:\"علامت نقل قول دوتایی راست\",ndash:\"خط تیره En\",mdash:\"خط تیره Em\",iexcl:\"علامت تعجب وارونه\",cent:\"نشان سنت\",pound:\"نشان پوند\",curren:\"نشان ارز\",yen:\"نشان ین\",brvbar:\"نوار شکسته\",sect:\"نشان بخش\",uml:\"نشان سواگیری\",copy:\"نشان کپی رایت\",ordf:\"شاخص ترتیبی مونث\",laquo:\"اشاره چپ مکرر برای زاویه علامت نقل قول\",not:\"نشان ثبت نشده\",reg:\"نشان ثبت شده\",\nmacr:\"نشان خط بالای حرف\",deg:\"نشان درجه\",sup2:\"بالانویس دو\",sup3:\"بالانویس سه\",acute:\"لهجه غلیظ\",micro:\"نشان مایکرو\",para:\"نشان محل بند\",middot:\"نقطه میانی\",cedil:\"سدیل\",sup1:\"بالانویس 1\",ordm:\"شاخص ترتیبی مذکر\",raquo:\"نشان زاویه‌دار دوتایی نقل قول راست چین\",frac14:\"واحد عامیانه 1/4\",frac12:\"واحد عامینه نصف\",frac34:\"واحد عامیانه 3/4\",iquest:\"علامت سوال معکوس\",Agrave:\"حرف A بزرگ لاتین با تلفظ غلیظ\",Aacute:\"حرف A بزرگ لاتین با تلفظ شدید\",Acirc:\"حرف A بزرگ لاتین با دور\",Atilde:\"حرف A بزرگ لاتین با صدای کامی\",\nAuml:\"حرف A بزرگ لاتین با نشان سواگیری\",Aring:\"حرف A بزرگ لاتین با حلقه بالا\",AElig:\"حرف Æ بزرگ لاتین\",Ccedil:\"حرف C بزرگ لاتین با نشان سواگیری\",Egrave:\"حرف E بزرگ لاتین با تلفظ درشت\",Eacute:\"حرف E بزرگ لاتین با تلفظ زیر\",Ecirc:\"حرف E بزرگ لاتین با خمان\",Euml:\"حرف E بزرگ لاتین با نشان سواگیری\",Igrave:\"حرف I بزرگ لاتین با تلفظ درشت\",Iacute:\"حرف I بزرگ لاتین با تلفظ ریز\",Icirc:\"حرف I بزرگ لاتین با خمان\",Iuml:\"حرف I بزرگ لاتین با نشان سواگیری\",ETH:\"حرف لاتین بزرگ واکه ترتیبی\",Ntilde:\"حرف N بزرگ لاتین با مد\",\nOgrave:\"حرف O بزرگ لاتین با تلفظ درشت\",Oacute:\"حرف O بزرگ لاتین با تلفظ ریز\",Ocirc:\"حرف O بزرگ لاتین با خمان\",Otilde:\"حرف O بزرگ لاتین با مد\",Ouml:\"حرف O بزرگ لاتین با نشان سواگیری\",times:\"نشان ضربدر\",Oslash:\"حرف O بزرگ لاتین با میان خط\",Ugrave:\"حرف U بزرگ لاتین با تلفظ درشت\",Uacute:\"حرف U بزرگ لاتین با تلفظ ریز\",Ucirc:\"حرف U بزرگ لاتین با خمان\",Uuml:\"حرف U بزرگ لاتین با نشان سواگیری\",Yacute:\"حرف Y بزرگ لاتین با تلفظ ریز\",THORN:\"حرف بزرگ لاتین خاردار\",szlig:\"حرف کوچک لاتین شارپ s\",agrave:\"حرف a کوچک لاتین با تلفظ درشت\",\naacute:\"حرف a کوچک لاتین با تلفظ ریز\",acirc:\"حرف a کوچک لاتین با خمان\",atilde:\"حرف a کوچک لاتین با صدای کامی\",auml:\"حرف a کوچک لاتین با نشان سواگیری\",aring:\"حرف a کوچک لاتین گوشواره دار\",aelig:\"حرف کوچک لاتین æ\",ccedil:\"حرف c کوچک لاتین با نشان سدیل\",egrave:\"حرف e کوچک لاتین با تلفظ درشت\",eacute:\"حرف e کوچک لاتین با تلفظ ریز\",ecirc:\"حرف e کوچک لاتین با خمان\",euml:\"حرف e کوچک لاتین با نشان سواگیری\",igrave:\"حرف i کوچک لاتین با تلفظ درشت\",iacute:\"حرف i کوچک لاتین با تلفظ ریز\",icirc:\"حرف i کوچک لاتین با خمان\",\niuml:\"حرف i کوچک لاتین با نشان سواگیری\",eth:\"حرف کوچک لاتین eth\",ntilde:\"حرف n کوچک لاتین با صدای کامی\",ograve:\"حرف o کوچک لاتین با تلفظ درشت\",oacute:\"حرف o کوچک لاتین با تلفظ زیر\",ocirc:\"حرف o کوچک لاتین با خمان\",otilde:\"حرف o کوچک لاتین با صدای کامی\",ouml:\"حرف o کوچک لاتین با نشان سواگیری\",divide:\"نشان بخش\",oslash:\"حرف o کوچک لاتین با میان خط\",ugrave:\"حرف u کوچک لاتین با تلفظ درشت\",uacute:\"حرف u کوچک لاتین با تلفظ ریز\",ucirc:\"حرف u کوچک لاتین با خمان\",uuml:\"حرف u کوچک لاتین با نشان سواگیری\",yacute:\"حرف y کوچک لاتین با تلفظ ریز\",\nthorn:\"حرف کوچک لاتین خاردار\",yuml:\"حرف y کوچک لاتین با نشان سواگیری\",OElig:\"بند بزرگ لاتین OE\",oelig:\"بند کوچک لاتین oe\",372:\"حرف W بزرگ لاتین با خمان\",374:\"حرف Y بزرگ لاتین با خمان\",373:\"حرف w کوچک لاتین با خمان\",375:\"حرف y کوچک لاتین با خمان\",sbquo:\"نشان نقل قول تکی زیر-9\",8219:\"نشان نقل قول تکی high-reversed-9\",bdquo:\"نقل قول دوتایی پایین-9\",hellip:\"حذف افقی\",trade:\"نشان تجاری\",9658:\"نشانگر سیاه جهت راست\",bull:\"گلوله\",rarr:\"فلش راست\",rArr:\"فلش دوتایی راست\",hArr:\"فلش دوتایی چپ راست\",diams:\"نشان الماس سیاه\",\nasymp:\"تقریبا برابر با\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/fi.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"fi\",{euro:\"Euron merkki\",lsquo:\"Vasen yksittäinen lainausmerkki\",rsquo:\"Oikea yksittäinen lainausmerkki\",ldquo:\"Vasen kaksoislainausmerkki\",rdquo:\"Oikea kaksoislainausmerkki\",ndash:\"En dash\",mdash:\"Em dash\",iexcl:\"Inverted exclamation mark\",cent:\"Sentin merkki\",pound:\"Punnan merkki\",curren:\"Valuuttamerkki\",yen:\"Yenin merkki\",brvbar:\"Broken bar\",sect:\"Section sign\",uml:\"Diaeresis\",copy:\"Copyright sign\",ordf:\"Feminine ordinal indicator\",laquo:\"Left-pointing double angle quotation mark\",\nnot:\"Not sign\",reg:\"Rekisteröity merkki\",macr:\"Macron\",deg:\"Asteen merkki\",sup2:\"Yläindeksi kaksi\",sup3:\"Yläindeksi kolme\",acute:\"Acute accent\",micro:\"Mikron merkki\",para:\"Pilcrow sign\",middot:\"Middle dot\",cedil:\"Cedilla\",sup1:\"Yläindeksi yksi\",ordm:\"Masculine ordinal indicator\",raquo:\"Right-pointing double angle quotation mark\",frac14:\"Vulgar fraction one quarter\",frac12:\"Vulgar fraction one half\",frac34:\"Vulgar fraction three quarters\",iquest:\"Ylösalaisin oleva kysymysmerkki\",Agrave:\"Latin capital letter A with grave accent\",\nAacute:\"Latin capital letter A with acute accent\",Acirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",\nIacute:\"Latin capital letter I with acute accent\",Icirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"Latin capital letter O with grave accent\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"Kertomerkki\",Oslash:\"Latin capital letter O with stroke\",\nUgrave:\"Latin capital letter U with grave accent\",Uacute:\"Latin capital letter U with acute accent\",Ucirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Latin small letter sharp s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",\naring:\"Latin small letter a with ring above\",aelig:\"Latin small letter æ\",ccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",\nntilde:\"Latin small letter n with tilde\",ograve:\"Latin small letter o with grave accent\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"Jakomerkki\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",\nyacute:\"Latin small letter y with acute accent\",thorn:\"Latin small letter thorn\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",\ntrade:\"Tavaramerkki merkki\",9658:\"Black right-pointing pointer\",bull:\"Bullet\",rarr:\"Nuoli oikealle\",rArr:\"Kaksoisnuoli oikealle\",hArr:\"Kaksoisnuoli oikealle ja vasemmalle\",diams:\"Black diamond suit\",asymp:\"Noin\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"fr-ca\",{euro:\"Symbole Euro\",lsquo:\"Guillemet simple ouvrant\",rsquo:\"Guillemet simple fermant\",ldquo:\"Guillemet double ouvrant\",rdquo:\"Guillemet double fermant\",ndash:\"Tiret haut\",mdash:\"Tiret\",iexcl:\"Point d'exclamation inversé\",cent:\"Symbole de cent\",pound:\"Symbole de Livre Sterling\",curren:\"Symbole monétaire\",yen:\"Symbole du Yen\",brvbar:\"Barre scindée\",sect:\"Symbole de section\",uml:\"Tréma\",copy:\"Symbole de copyright\",ordf:\"Indicateur ordinal féminin\",laquo:\"Guillemet français ouvrant\",\nnot:\"Indicateur de négation\",reg:\"Symbole de marque déposée\",macr:\"Macron\",deg:\"Degré\",sup2:\"Exposant 2\",sup3:\"Exposant 3\",acute:\"Accent aigüe\",micro:\"Symbole micro\",para:\"Paragraphe\",middot:\"Point médian\",cedil:\"Cédille\",sup1:\"Exposant 1\",ordm:\"Indicateur ordinal masculin\",raquo:\"Guillemet français fermant\",frac14:\"Un quart\",frac12:\"Une demi\",frac34:\"Trois quart\",iquest:\"Point d'interrogation inversé\",Agrave:\"A accent grave\",Aacute:\"A accent aigüe\",Acirc:\"A circonflexe\",Atilde:\"A tilde\",Auml:\"A tréma\",\nAring:\"A avec un rond au dessus\",AElig:\"Æ majuscule\",Ccedil:\"C cédille\",Egrave:\"E accent grave\",Eacute:\"E accent aigüe\",Ecirc:\"E accent circonflexe\",Euml:\"E tréma\",Igrave:\"I accent grave\",Iacute:\"I accent aigüe\",Icirc:\"I accent circonflexe\",Iuml:\"I tréma\",ETH:\"Lettre majuscule islandaise ED\",Ntilde:\"N tilde\",Ograve:\"O accent grave\",Oacute:\"O accent aigüe\",Ocirc:\"O accent circonflexe\",Otilde:\"O tilde\",Ouml:\"O tréma\",times:\"Symbole de multiplication\",Oslash:\"O barré\",Ugrave:\"U accent grave\",Uacute:\"U accent aigüe\",\nUcirc:\"U accent circonflexe\",Uuml:\"U tréma\",Yacute:\"Y accent aigüe\",THORN:\"Lettre islandaise Thorn majuscule\",szlig:\"Lettre minuscule allemande s dur\",agrave:\"a accent grave\",aacute:\"a accent aigüe\",acirc:\"a accent circonflexe\",atilde:\"a tilde\",auml:\"a tréma\",aring:\"a avec un cercle au dessus\",aelig:\"æ\",ccedil:\"c cédille\",egrave:\"e accent grave\",eacute:\"e accent aigüe\",ecirc:\"e accent circonflexe\",euml:\"e tréma\",igrave:\"i accent grave\",iacute:\"i accent aigüe\",icirc:\"i accent circonflexe\",iuml:\"i tréma\",\neth:\"Lettre minuscule islandaise ED\",ntilde:\"n tilde\",ograve:\"o accent grave\",oacute:\"o accent aigüe\",ocirc:\"O accent circonflexe\",otilde:\"O tilde\",ouml:\"O tréma\",divide:\"Symbole de division\",oslash:\"o barré\",ugrave:\"u accent grave\",uacute:\"u accent aigüe\",ucirc:\"u accent circonflexe\",uuml:\"u tréma\",yacute:\"y accent aigüe\",thorn:\"Lettre islandaise thorn minuscule\",yuml:\"y tréma\",OElig:\"ligature majuscule latine Œ\",oelig:\"ligature minuscule latine œ\",372:\"W accent circonflexe\",374:\"Y accent circonflexe\",\n373:\"w accent circonflexe\",375:\"y accent circonflexe\",sbquo:\"Guillemet simple fermant\",8219:\"Guillemet-virgule supérieur culbuté\",bdquo:\"Guillemet-virgule double inférieur\",hellip:\"Points de suspension\",trade:\"Symbole de marque déposée\",9658:\"Flèche noire pointant vers la droite\",bull:\"Puce\",rarr:\"Flèche vers la droite\",rArr:\"Flèche double vers la droite\",hArr:\"Flèche double vers la gauche\",diams:\"Carreau\",asymp:\"Presque égal\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/fr.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"fr\",{euro:\"Symbole Euro\",lsquo:\"Guillemet simple ouvrant\",rsquo:\"Guillemet simple fermant\",ldquo:\"Guillemet double ouvrant\",rdquo:\"Guillemet double fermant\",ndash:\"Tiret haut\",mdash:\"Tiret cadratin\",iexcl:\"Point d'exclamation inversé\",cent:\"Symbole Cent\",pound:\"Symbole Livre Sterling\",curren:\"Symbole monétaire\",yen:\"Symbole Yen\",brvbar:\"Barre verticale scindée\",sect:\"Section\",uml:\"Tréma\",copy:\"Symbole Copyright\",ordf:\"Indicateur ordinal féminin\",laquo:\"Guillemet français ouvrant\",\nnot:\"Crochet de négation\",reg:\"Marque déposée\",macr:\"Macron\",deg:\"Degré\",sup2:\"Exposant 2\",sup3:\"Exposant 3\",acute:\"Accent aigu\",micro:\"Omicron\",para:\"Paragraphe\",middot:\"Point médian\",cedil:\"Cédille\",sup1:\"Exposant 1\",ordm:\"Indicateur ordinal masculin\",raquo:\"Guillemet français fermant\",frac14:\"Un quart\",frac12:\"Un demi\",frac34:\"Trois quarts\",iquest:\"Point d'interrogation inversé\",Agrave:\"A majuscule accent grave\",Aacute:\"A majuscule accent aigu\",Acirc:\"A majuscule accent circonflexe\",Atilde:\"A majuscule avec caron\",\nAuml:\"A majuscule tréma\",Aring:\"A majuscule avec un rond au-dessus\",AElig:\"Æ majuscule ligaturés\",Ccedil:\"C majuscule cédille\",Egrave:\"E majuscule accent grave\",Eacute:\"E majuscule accent aigu\",Ecirc:\"E majuscule accent circonflexe\",Euml:\"E majuscule tréma\",Igrave:\"I majuscule accent grave\",Iacute:\"I majuscule accent aigu\",Icirc:\"I majuscule accent circonflexe\",Iuml:\"I majuscule tréma\",ETH:\"Lettre majuscule islandaise ED\",Ntilde:\"N majuscule avec caron\",Ograve:\"O majuscule accent grave\",Oacute:\"O majuscule accent aigu\",\nOcirc:\"O majuscule accent circonflexe\",Otilde:\"O majuscule avec caron\",Ouml:\"O majuscule tréma\",times:\"Multiplication\",Oslash:\"O majuscule barré\",Ugrave:\"U majuscule accent grave\",Uacute:\"U majuscule accent aigu\",Ucirc:\"U majuscule accent circonflexe\",Uuml:\"U majuscule tréma\",Yacute:\"Y majuscule accent aigu\",THORN:\"Lettre islandaise Thorn majuscule\",szlig:\"Lettre minuscule allemande s dur\",agrave:\"a minuscule accent grave\",aacute:\"a minuscule accent aigu\",acirc:\"a minuscule accent circonflexe\",atilde:\"a minuscule avec caron\",\nauml:\"a minuscule tréma\",aring:\"a minuscule avec un rond au-dessus\",aelig:\"æ minuscule ligaturés\",ccedil:\"c minuscule cédille\",egrave:\"e minuscule accent grave\",eacute:\"e minuscule accent aigu\",ecirc:\"e minuscule accent circonflexe\",euml:\"e minuscule tréma\",igrave:\"i minuscule accent grave\",iacute:\"i minuscule accent aigu\",icirc:\"i minuscule accent circonflexe\",iuml:\"i minuscule tréma\",eth:\"Lettre minuscule islandaise ED\",ntilde:\"n minuscule avec caron\",ograve:\"o minuscule accent grave\",oacute:\"o minuscule accent aigu\",\nocirc:\"o minuscule accent circonflexe\",otilde:\"o minuscule avec caron\",ouml:\"o minuscule tréma\",divide:\"Division\",oslash:\"o minuscule barré\",ugrave:\"u minuscule accent grave\",uacute:\"u minuscule accent aigu\",ucirc:\"u minuscule accent circonflexe\",uuml:\"u minuscule tréma\",yacute:\"y minuscule accent aigu\",thorn:\"Lettre islandaise thorn minuscule\",yuml:\"y minuscule tréma\",OElig:\"ligature majuscule latine Œ\",oelig:\"ligature minuscule latine œ\",372:\"W majuscule accent circonflexe\",374:\"Y majuscule accent circonflexe\",\n373:\"w minuscule accent circonflexe\",375:\"y minuscule accent circonflexe\",sbquo:\"Guillemet simple fermant (anglais)\",8219:\"Guillemet-virgule supérieur culbuté\",bdquo:\"Guillemet-virgule double inférieur\",hellip:\"Points de suspension\",trade:\"Marque commerciale (trade mark)\",9658:\"Flèche noire pointant vers la droite\",bull:\"Gros point médian\",rarr:\"Flèche vers la droite\",rArr:\"Double flèche vers la droite\",hArr:\"Double flèche vers la gauche\",diams:\"Carreau noir\",asymp:\"Presque égal\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/gl.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"gl\",{euro:\"Símbolo do euro\",lsquo:\"Comiña simple esquerda\",rsquo:\"Comiña simple dereita\",ldquo:\"Comiñas dobres esquerda\",rdquo:\"Comiñas dobres dereita\",ndash:\"Guión\",mdash:\"Raia\",iexcl:\"Signo de admiración invertido\",cent:\"Símbolo do centavo\",pound:\"Símbolo da libra\",curren:\"Símbolo de moeda\",yen:\"Símbolo do yen\",brvbar:\"Barra vertical rota\",sect:\"Símbolo de sección\",uml:\"Diérese\",copy:\"Símbolo de dereitos de autoría\",ordf:\"Indicador ordinal feminino\",laquo:\"Comiñas latinas, apertura\",\nnot:\"Signo negación\",reg:\"Símbolo de marca rexistrada\",macr:\"Guión alto\",deg:\"Signo de grao\",sup2:\"Superíndice dous\",sup3:\"Superíndice tres\",acute:\"Acento agudo\",micro:\"Signo de micro\",para:\"Signo de pi\",middot:\"Punto medio\",cedil:\"Cedilla\",sup1:\"Superíndice un\",ordm:\"Indicador ordinal masculino\",raquo:\"Comiñas latinas, peche\",frac14:\"Fracción ordinaria de un cuarto\",frac12:\"Fracción ordinaria de un medio\",frac34:\"Fracción ordinaria de tres cuartos\",iquest:\"Signo de interrogación invertido\",Agrave:\"Letra A latina maiúscula con acento grave\",\nAacute:\"Letra A latina maiúscula con acento agudo\",Acirc:\"Letra A latina maiúscula con acento circunflexo\",Atilde:\"Letra A latina maiúscula con til\",Auml:\"Letra A latina maiúscula con diérese\",Aring:\"Letra A latina maiúscula con aro enriba\",AElig:\"Letra Æ latina maiúscula\",Ccedil:\"Letra C latina maiúscula con cedilla\",Egrave:\"Letra E latina maiúscula con acento grave\",Eacute:\"Letra E latina maiúscula con acento agudo\",Ecirc:\"Letra E latina maiúscula con acento circunflexo\",Euml:\"Letra E latina maiúscula con diérese\",\nIgrave:\"Letra I latina maiúscula con acento grave\",Iacute:\"Letra I latina maiúscula con acento agudo\",Icirc:\"Letra I latina maiúscula con acento circunflexo\",Iuml:\"Letra I latina maiúscula con diérese\",ETH:\"Letra Ed latina maiúscula\",Ntilde:\"Letra N latina maiúscula con til\",Ograve:\"Letra O latina maiúscula con acento grave\",Oacute:\"Letra O latina maiúscula con acento agudo\",Ocirc:\"Letra O latina maiúscula con acento circunflexo\",Otilde:\"Letra O latina maiúscula con til\",Ouml:\"Letra O latina maiúscula con diérese\",\ntimes:\"Signo de multiplicación\",Oslash:\"Letra O latina maiúscula con barra transversal\",Ugrave:\"Letra U latina maiúscula con acento grave\",Uacute:\"Letra U latina maiúscula con acento agudo\",Ucirc:\"Letra U latina maiúscula con acento circunflexo\",Uuml:\"Letra U latina maiúscula con diérese\",Yacute:\"Letra Y latina maiúscula con acento agudo\",THORN:\"Letra Thorn latina maiúscula\",szlig:\"Letra s latina forte minúscula\",agrave:\"Letra a latina minúscula con acento grave\",aacute:\"Letra a latina minúscula con acento agudo\",\nacirc:\"Letra a latina minúscula con acento circunflexo\",atilde:\"Letra a latina minúscula con til\",auml:\"Letra a latina minúscula con diérese\",aring:\"Letra a latina minúscula con aro enriba\",aelig:\"Letra æ latina minúscula\",ccedil:\"Letra c latina minúscula con cedilla\",egrave:\"Letra e latina minúscula con acento grave\",eacute:\"Letra e latina minúscula con acento agudo\",ecirc:\"Letra e latina minúscula con acento circunflexo\",euml:\"Letra e latina minúscula con diérese\",igrave:\"Letra i latina minúscula con acento grave\",\niacute:\"Letra i latina minúscula con acento agudo\",icirc:\"Letra i latina minúscula con acento circunflexo\",iuml:\"Letra i latina minúscula con diérese\",eth:\"Letra ed latina minúscula\",ntilde:\"Letra n latina minúscula con til\",ograve:\"Letra o latina minúscula con acento grave\",oacute:\"Letra o latina minúscula con acento agudo\",ocirc:\"Letra o latina minúscula con acento circunflexo\",otilde:\"Letra o latina minúscula con til\",ouml:\"Letra o latina minúscula con diérese\",divide:\"Signo de división\",oslash:\"Letra o latina minúscula con barra transversal\",\nugrave:\"Letra u latina minúscula con acento grave\",uacute:\"Letra u latina minúscula con acento agudo\",ucirc:\"Letra u latina minúscula con acento circunflexo\",uuml:\"Letra u latina minúscula con diérese\",yacute:\"Letra y latina minúscula con acento agudo\",thorn:\"Letra Thorn latina minúscula\",yuml:\"Letra y latina minúscula con diérese\",OElig:\"Ligadura OE latina maiúscula\",oelig:\"Ligadura oe latina minúscula\",372:\"Letra W latina maiúscula con acento circunflexo\",374:\"Letra Y latina maiúscula con acento circunflexo\",\n373:\"Letra w latina minúscula con acento circunflexo\",375:\"Letra y latina minúscula con acento circunflexo\",sbquo:\"Comiña simple baixa, de apertura\",8219:\"Comiña simple alta, de peche\",bdquo:\"Comiñas dobres baixas, de apertura\",hellip:\"Elipse, puntos suspensivos\",trade:\"Signo de marca rexistrada\",9658:\"Apuntador negro apuntando á dereita\",bull:\"Viñeta\",rarr:\"Frecha á dereita\",rArr:\"Frecha dobre á dereita\",hArr:\"Frecha dobre da esquerda á dereita\",diams:\"Diamante negro\",asymp:\"Case igual a\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/he.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"he\",{euro:\"יורו\",lsquo:\"סימן ציטוט יחיד שמאלי\",rsquo:\"סימן ציטוט יחיד ימני\",ldquo:\"סימן ציטוט כפול שמאלי\",rdquo:\"סימן ציטוט כפול ימני\",ndash:\"קו מפריד קצר\",mdash:\"קו מפריד ארוך\",iexcl:\"סימן קריאה הפוך\",cent:\"סנט\",pound:\"פאונד\",curren:\"מטבע\",yen:\"ין\",brvbar:\"קו שבור\",sect:\"סימן מקטע\",uml:\"שתי נקודות אופקיות (Diaeresis)\",copy:\"סימן זכויות יוצרים (Copyright)\",ordf:\"סימן אורדינאלי נקבי\",laquo:\"סימן ציטוט זווית כפולה לשמאל\",not:\"סימן שלילה מתמטי\",reg:\"סימן רשום\",\nmacr:\"מקרון (הגיה ארוכה)\",deg:\"מעלות\",sup2:\"2 בכתיב עילי\",sup3:\"3 בכתיב עילי\",acute:\"סימן דגוש (Acute)\",micro:\"מיקרו\",para:\"סימון פסקה\",middot:\"נקודה אמצעית\",cedil:\"סדיליה\",sup1:\"1 בכתיב עילי\",ordm:\"סימן אורדינאלי זכרי\",raquo:\"סימן ציטוט זווית כפולה לימין\",frac14:\"רבע בשבר פשוט\",frac12:\"חצי בשבר פשוט\",frac34:\"שלושה רבעים בשבר פשוט\",iquest:\"סימן שאלה הפוך\",Agrave:\"אות לטינית A עם גרש (Grave)\",Aacute:\"Latin capital letter A with acute accent\",Acirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",\nAuml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"אות לטינית Æ גדולה\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"אות לטינית E עם גרש (Grave)\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"אות לטינית I עם גרש (Grave)\",Iacute:\"Latin capital letter I with acute accent\",Icirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",\nETH:\"אות לטינית Eth גדולה\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"אות לטינית O עם גרש (Grave)\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"סימן כפל\",Oslash:\"Latin capital letter O with stroke\",Ugrave:\"אות לטינית U עם גרש (Grave)\",Uacute:\"Latin capital letter U with acute accent\",Ucirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",\nYacute:\"Latin capital letter Y with acute accent\",THORN:\"אות לטינית Thorn גדולה\",szlig:\"אות לטינית s חדה קטנה\",agrave:\"אות לטינית a עם גרש (Grave)\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",aring:\"Latin small letter a with ring above\",aelig:\"אות לטינית æ קטנה\",ccedil:\"Latin small letter c with cedilla\",egrave:\"אות לטינית e עם גרש (Grave)\",eacute:\"Latin small letter e with acute accent\",\necirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"אות לטינית i עם גרש (Grave)\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"אות לטינית eth קטנה\",ntilde:\"Latin small letter n with tilde\",ograve:\"אות לטינית o עם גרש (Grave)\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",\ndivide:\"סימן חלוקה\",oslash:\"Latin small letter o with stroke\",ugrave:\"אות לטינית u עם גרש (Grave)\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",yacute:\"Latin small letter y with acute accent\",thorn:\"אות לטינית thorn קטנה\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",\n373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"סימן ציטוט נמוך יחיד\",8219:\"סימן ציטוט\",bdquo:\"סימן ציטוט נמוך כפול\",hellip:\"שלוש נקודות\",trade:\"סימן טריידמארק\",9658:\"סמן שחור לצד ימין\",bull:\"תבליט (רשימה)\",rarr:\"חץ לימין\",rArr:\"חץ כפול לימין\",hArr:\"חץ כפול לימין ושמאל\",diams:\"יהלום מלא\",asymp:\"כמעט שווה\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/hr.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"hr\",{euro:\"Euro znak\",lsquo:\"Lijevi jednostruki navodnik\",rsquo:\"Desni jednostruki navodnik\",ldquo:\"Lijevi dvostruki navodnik\",rdquo:\"Desni dvostruki navodnik\",ndash:\"En crtica\",mdash:\"Em crtica\",iexcl:\"Naopaki uskličnik\",cent:\"Cent znak\",pound:\"Funta znak\",curren:\"Znak valute\",yen:\"Yen znak\",brvbar:\"Potrgana prečka\",sect:\"Znak odjeljka\",uml:\"Prijeglasi\",copy:\"Copyright znak\",ordf:\"Feminine ordinal indicator\",laquo:\"Lijevi dvostruki uglati navodnik\",not:\"Not znak\",\nreg:\"Registered znak\",macr:\"Macron\",deg:\"Stupanj znak\",sup2:\"Superscript two\",sup3:\"Superscript three\",acute:\"Acute accent\",micro:\"Mikro znak\",para:\"Pilcrow sign\",middot:\"Srednja točka\",cedil:\"Cedilla\",sup1:\"Superscript one\",ordm:\"Masculine ordinal indicator\",raquo:\"Desni dvostruku uglati navodnik\",frac14:\"Vulgar fraction one quarter\",frac12:\"Vulgar fraction one half\",frac34:\"Vulgar fraction three quarters\",iquest:\"Naopaki upitnik\",Agrave:\"Veliko latinsko slovo A s akcentom\",Aacute:\"Latinično veliko slovo A sa oštrim naglaskom\",\nAcirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",Iacute:\"Latin capital letter I with acute accent\",\nIcirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"Latin capital letter O with grave accent\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"Multiplication sign\",Oslash:\"Latin capital letter O with stroke\",Ugrave:\"Latin capital letter U with grave accent\",\nUacute:\"Latin capital letter U with acute accent\",Ucirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Latin small letter sharp s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",aring:\"Latin small letter a with ring above\",\naelig:\"Latin small letter æ\",ccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",ntilde:\"Latin small letter n with tilde\",\nograve:\"Latin small letter o with grave accent\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"Division sign\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",yacute:\"Latin small letter y with acute accent\",\nthorn:\"Latin small letter thorn\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",trade:\"Trade mark sign\",9658:\"Black right-pointing pointer\",\nbull:\"Bullet\",rarr:\"Rightwards arrow\",rArr:\"Rightwards double arrow\",hArr:\"Left right double arrow\",diams:\"Black diamond suit\",asymp:\"Almost equal to\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/hu.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"hu\",{euro:\"Euró jel\",lsquo:\"Bal szimpla idézőjel\",rsquo:\"Jobb szimpla idézőjel\",ldquo:\"Bal dupla idézőjel\",rdquo:\"Jobb dupla idézőjel\",ndash:\"Rövid gondolatjel\",mdash:\"Hosszú gondolatjel\",iexcl:\"Fordított felkiáltójel\",cent:\"Cent jel\",pound:\"Font jel\",curren:\"Valuta jel\",yen:\"Yen jel\",brvbar:\"Hosszú kettőspont\",sect:\"Paragrafus jel\",uml:\"Kettős hangzó jel\",copy:\"Szerzői jog jel\",ordf:\"Női sorrend mutatója\",laquo:\"Balra mutató duplanyíl\",not:\"Feltételes kötőjel\",\nreg:\"Bejegyzett védjegy jele\",macr:\"Hosszúsági jel\",deg:\"Fok jel\",sup2:\"Négyzeten jel\",sup3:\"Köbön jel\",acute:\"Éles ékezet\",micro:\"Mikro-jel\",para:\"Bekezdés jel\",middot:\"Közép pont\",cedil:\"Cédille\",sup1:\"Elsőn jel\",ordm:\"Férfi sorrend mutatója\",raquo:\"Jobbra mutató duplanyíl\",frac14:\"Egy negyed jel\",frac12:\"Egy ketted jel\",frac34:\"Három negyed jel\",iquest:\"Fordított kérdőjel\",Agrave:\"Latin nagy A fordított ékezettel\",Aacute:\"Latin nagy A normál ékezettel\",Acirc:\"Latin nagy A hajtott ékezettel\",Atilde:\"Latin nagy A hullámjellel\",\nAuml:\"Latin nagy A kettőspont ékezettel\",Aring:\"Latin nagy A gyűrű ékezettel\",AElig:\"Latin nagy Æ betű\",Ccedil:\"Latin nagy C cedillával\",Egrave:\"Latin nagy E fordított ékezettel\",Eacute:\"Latin nagy E normál ékezettel\",Ecirc:\"Latin nagy E hajtott ékezettel\",Euml:\"Latin nagy E dupla kettőspont ékezettel\",Igrave:\"Latin nagy I fordított ékezettel\",Iacute:\"Latin nagy I normál ékezettel\",Icirc:\"Latin nagy I hajtott ékezettel\",Iuml:\"Latin nagy I kettőspont ékezettel\",ETH:\"Latin nagy Eth betű\",Ntilde:\"Latin nagy N hullámjellel\",\nOgrave:\"Latin nagy O fordított ékezettel\",Oacute:\"Latin nagy O normál ékezettel\",Ocirc:\"Latin nagy O hajtott ékezettel\",Otilde:\"Latin nagy O hullámjellel\",Ouml:\"Latin nagy O kettőspont ékezettel\",times:\"Szorzás jel\",Oslash:\"Latin O betű áthúzással\",Ugrave:\"Latin nagy U fordított ékezettel\",Uacute:\"Latin nagy U normál ékezettel\",Ucirc:\"Latin nagy U hajtott ékezettel\",Uuml:\"Latin nagy U kettőspont ékezettel\",Yacute:\"Latin nagy Y normál ékezettel\",THORN:\"Latin nagy Thorn betű\",szlig:\"Latin kis s betű\",\nagrave:\"Latin kis a fordított ékezettel\",aacute:\"Latin kis a normál ékezettel\",acirc:\"Latin kis a hajtott ékezettel\",atilde:\"Latin kis a hullámjellel\",auml:\"Latin kis a kettőspont ékezettel\",aring:\"Latin kis a gyűrű ékezettel\",aelig:\"Latin kis æ betű\",ccedil:\"Latin kis c cedillával\",egrave:\"Latin kis e fordított ékezettel\",eacute:\"Latin kis e normál ékezettel\",ecirc:\"Latin kis e hajtott ékezettel\",euml:\"Latin kis e dupla kettőspont ékezettel\",igrave:\"Latin kis i fordított ékezettel\",iacute:\"Latin kis i normál ékezettel\",\nicirc:\"Latin kis i hajtott ékezettel\",iuml:\"Latin kis i kettőspont ékezettel\",eth:\"Latin kis eth betű\",ntilde:\"Latin kis n hullámjellel\",ograve:\"Latin kis o fordított ékezettel\",oacute:\"Latin kis o normál ékezettel\",ocirc:\"Latin kis o hajtott ékezettel\",otilde:\"Latin kis o hullámjellel\",ouml:\"Latin kis o kettőspont ékezettel\",divide:\"Osztásjel\",oslash:\"Latin kis o betű áthúzással\",ugrave:\"Latin kis u fordított ékezettel\",uacute:\"Latin kis u normál ékezettel\",ucirc:\"Latin kis u hajtott ékezettel\",\nuuml:\"Latin kis u kettőspont ékezettel\",yacute:\"Latin kis y normál ékezettel\",thorn:\"Latin kis thorn jel\",yuml:\"Latin kis y kettőspont ékezettel\",OElig:\"Latin nagy OE-jel\",oelig:\"Latin kis oe-jel\",372:\"Latin nagy W hajtott ékezettel\",374:\"Latin nagy Y hajtott ékezettel\",373:\"Latin kis w hajtott ékezettel\",375:\"Latin kis y hajtott ékezettel\",sbquo:\"Nyitó nyomdai szimpla idézőjel\",8219:\"Záró nyomdai záró idézőjel\",bdquo:\"Nyitó nyomdai dupla idézőjel\",hellip:\"Három pont\",trade:\"Kereskedelmi védjegy jele\",\n9658:\"Jobbra mutató fekete mutató\",bull:\"Golyó\",rarr:\"Jobbra mutató nyíl\",rArr:\"Jobbra mutató duplanyíl\",hArr:\"Bal-jobb duplanyíl\",diams:\"Fekete gyémánt jel\",asymp:\"Majdnem egyenlő jel\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/id.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"id\",{euro:\"Tanda Euro\",lsquo:\"Left single quotation mark\",rsquo:\"Right single quotation mark\",ldquo:\"Left double quotation mark\",rdquo:\"Right double quotation mark\",ndash:\"En dash\",mdash:\"Em dash\",iexcl:\"Inverted exclamation mark\",cent:\"Cent sign\",pound:\"Pound sign\",curren:\"Currency sign\",yen:\"Tanda Yen\",brvbar:\"Broken bar\",sect:\"Section sign\",uml:\"Diaeresis\",copy:\"Tanda Hak Cipta\",ordf:\"Feminine ordinal indicator\",laquo:\"Left-pointing double angle quotation mark\",\nnot:\"Not sign\",reg:\"Tanda Telah Terdaftar\",macr:\"Macron\",deg:\"Degree sign\",sup2:\"Superscript two\",sup3:\"Superscript three\",acute:\"Acute accent\",micro:\"Micro sign\",para:\"Pilcrow sign\",middot:\"Middle dot\",cedil:\"Cedilla\",sup1:\"Superscript one\",ordm:\"Masculine ordinal indicator\",raquo:\"Right-pointing double angle quotation mark\",frac14:\"Vulgar fraction one quarter\",frac12:\"Vulgar fraction one half\",frac34:\"Vulgar fraction three quarters\",iquest:\"Inverted question mark\",Agrave:\"Latin capital letter A with grave accent\",\nAacute:\"Latin capital letter A with acute accent\",Acirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",\nIacute:\"Latin capital letter I with acute accent\",Icirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"Latin capital letter O with grave accent\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"Multiplication sign\",Oslash:\"Latin capital letter O with stroke\",\nUgrave:\"Latin capital letter U with grave accent\",Uacute:\"Latin capital letter U with acute accent\",Ucirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Latin small letter sharp s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",\naring:\"Latin small letter a with ring above\",aelig:\"Latin small letter æ\",ccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",\nntilde:\"Latin small letter n with tilde\",ograve:\"Latin small letter o with grave accent\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"Division sign\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",\nyacute:\"Latin small letter y with acute accent\",thorn:\"Latin small letter thorn\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",\ntrade:\"Trade mark sign\",9658:\"Black right-pointing pointer\",bull:\"Bullet\",rarr:\"Rightwards arrow\",rArr:\"Rightwards double arrow\",hArr:\"Left right double arrow\",diams:\"Black diamond suit\",asymp:\"Almost equal to\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/it.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"it\",{euro:\"Simbolo Euro\",lsquo:\"Virgoletta singola sinistra\",rsquo:\"Virgoletta singola destra\",ldquo:\"Virgolette aperte\",rdquo:\"Virgolette chiuse\",ndash:\"Trattino\",mdash:\"Trattino lungo\",iexcl:\"Punto esclavamativo invertito\",cent:\"Simbolo Cent\",pound:\"Simbolo Sterlina\",curren:\"Simbolo Moneta\",yen:\"Simbolo Yen\",brvbar:\"Barra interrotta\",sect:\"Simbolo di sezione\",uml:\"Dieresi\",copy:\"Simbolo Copyright\",ordf:\"Indicatore ordinale femminile\",laquo:\"Virgolette basse aperte\",\nnot:\"Nessun segno\",reg:\"Simbolo Registrato\",macr:\"Macron\",deg:\"Simbolo Grado\",sup2:\"Apice Due\",sup3:\"Apice Tre\",acute:\"Accento acuto\",micro:\"Simbolo Micro\",para:\"Simbolo Paragrafo\",middot:\"Punto centrale\",cedil:\"Cediglia\",sup1:\"Apice Uno\",ordm:\"Indicatore ordinale maschile\",raquo:\"Virgolette basse chiuse\",frac14:\"Frazione volgare un quarto\",frac12:\"Frazione volgare un mezzo\",frac34:\"Frazione volgare tre quarti\",iquest:\"Punto interrogativo invertito\",Agrave:\"Lettera maiuscola latina A con accento grave\",\nAacute:\"Lettera maiuscola latina A con accento acuto\",Acirc:\"Lettera maiuscola latina A con accento circonflesso\",Atilde:\"Lettera maiuscola latina A con tilde\",Auml:\"Lettera maiuscola latina A con dieresi\",Aring:\"Lettera maiuscola latina A con anello sopra\",AElig:\"Lettera maiuscola latina AE\",Ccedil:\"Lettera maiuscola latina C con cediglia\",Egrave:\"Lettera maiuscola latina E con accento grave\",Eacute:\"Lettera maiuscola latina E con accento acuto\",Ecirc:\"Lettera maiuscola latina E con accento circonflesso\",\nEuml:\"Lettera maiuscola latina E con dieresi\",Igrave:\"Lettera maiuscola latina I con accento grave\",Iacute:\"Lettera maiuscola latina I con accento acuto\",Icirc:\"Lettera maiuscola latina I con accento circonflesso\",Iuml:\"Lettera maiuscola latina I con dieresi\",ETH:\"Lettera maiuscola latina Eth\",Ntilde:\"Lettera maiuscola latina N con tilde\",Ograve:\"Lettera maiuscola latina O con accento grave\",Oacute:\"Lettera maiuscola latina O con accento acuto\",Ocirc:\"Lettera maiuscola latina O con accento circonflesso\",\nOtilde:\"Lettera maiuscola latina O con tilde\",Ouml:\"Lettera maiuscola latina O con dieresi\",times:\"Simbolo di moltiplicazione\",Oslash:\"Lettera maiuscola latina O barrata\",Ugrave:\"Lettera maiuscola latina U con accento grave\",Uacute:\"Lettera maiuscola latina U con accento acuto\",Ucirc:\"Lettera maiuscola latina U con accento circonflesso\",Uuml:\"Lettera maiuscola latina U con accento circonflesso\",Yacute:\"Lettera maiuscola latina Y con accento acuto\",THORN:\"Lettera maiuscola latina Thorn\",szlig:\"Lettera latina minuscola doppia S\",\nagrave:\"Lettera minuscola latina a con accento grave\",aacute:\"Lettera minuscola latina a con accento acuto\",acirc:\"Lettera minuscola latina a con accento circonflesso\",atilde:\"Lettera minuscola latina a con tilde\",auml:\"Lettera minuscola latina a con dieresi\",aring:\"Lettera minuscola latina a con anello superiore\",aelig:\"Lettera minuscola latina ae\",ccedil:\"Lettera minuscola latina c con cediglia\",egrave:\"Lettera minuscola latina e con accento grave\",eacute:\"Lettera minuscola latina e con accento acuto\",\necirc:\"Lettera minuscola latina e con accento circonflesso\",euml:\"Lettera minuscola latina e con dieresi\",igrave:\"Lettera minuscola latina i con accento grave\",iacute:\"Lettera minuscola latina i con accento acuto\",icirc:\"Lettera minuscola latina i con accento circonflesso\",iuml:\"Lettera minuscola latina i con dieresi\",eth:\"Lettera minuscola latina eth\",ntilde:\"Lettera minuscola latina n con tilde\",ograve:\"Lettera minuscola latina o con accento grave\",oacute:\"Lettera minuscola latina o con accento acuto\",\nocirc:\"Lettera minuscola latina o con accento circonflesso\",otilde:\"Lettera minuscola latina o con tilde\",ouml:\"Lettera minuscola latina o con dieresi\",divide:\"Simbolo di divisione\",oslash:\"Lettera minuscola latina o barrata\",ugrave:\"Lettera minuscola latina u con accento grave\",uacute:\"Lettera minuscola latina u con accento acuto\",ucirc:\"Lettera minuscola latina u con accento circonflesso\",uuml:\"Lettera minuscola latina u con dieresi\",yacute:\"Lettera minuscola latina y con accento acuto\",thorn:\"Lettera minuscola latina thorn\",\nyuml:\"Lettera minuscola latina y con dieresi\",OElig:\"Legatura maiuscola latina OE\",oelig:\"Legatura minuscola latina oe\",372:\"Lettera maiuscola latina W con accento circonflesso\",374:\"Lettera maiuscola latina Y con accento circonflesso\",373:\"Lettera minuscola latina w con accento circonflesso\",375:\"Lettera minuscola latina y con accento circonflesso\",sbquo:\"Singola virgoletta bassa low-9\",8219:\"Singola virgoletta bassa low-9 inversa\",bdquo:\"Doppia virgoletta bassa low-9\",hellip:\"Ellissi orizzontale\",\ntrade:\"Simbolo TM\",9658:\"Puntatore nero rivolto verso destra\",bull:\"Punto\",rarr:\"Freccia verso destra\",rArr:\"Doppia freccia verso destra\",hArr:\"Doppia freccia sinistra destra\",diams:\"Simbolo nero diamante\",asymp:\"Quasi uguale a\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/ja.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"ja\",{euro:\"ユーロ記号\",lsquo:\"左シングル引用符\",rsquo:\"右シングル引用符\",ldquo:\"左ダブル引用符\",rdquo:\"右ダブル引用符\",ndash:\"半角ダッシュ\",mdash:\"全角ダッシュ\",iexcl:\"逆さ感嘆符\",cent:\"セント記号\",pound:\"ポンド記号\",curren:\"通貨記号\",yen:\"円記号\",brvbar:\"上下に分かれた縦棒\",sect:\"節記号\",uml:\"分音記号(ウムラウト)\",copy:\"著作権表示記号\",ordf:\"女性序数標識\",laquo:\" 始め二重山括弧引用記号\",not:\"論理否定記号\",reg:\"登録商標記号\",macr:\"長音符\",deg:\"度記号\",sup2:\"上つき2, 2乗\",sup3:\"上つき3, 3乗\",acute:\"揚音符\",micro:\"ミクロン記号\",para:\"段落記号\",middot:\"中黒\",cedil:\"セディラ\",sup1:\"上つき1\",ordm:\"男性序数標識\",raquo:\"終わり二重山括弧引用記号\",\nfrac14:\"四分の一\",frac12:\"二分の一\",frac34:\"四分の三\",iquest:\"逆疑問符\",Agrave:\"抑音符つき大文字A\",Aacute:\"揚音符つき大文字A\",Acirc:\"曲折アクセントつき大文字A\",Atilde:\"チルダつき大文字A\",Auml:\"分音記号つき大文字A\",Aring:\"リングつき大文字A\",AElig:\"AとEの合字\",Ccedil:\"セディラつき大文字C\",Egrave:\"抑音符つき大文字E\",Eacute:\"揚音符つき大文字E\",Ecirc:\"曲折アクセントつき大文字E\",Euml:\"分音記号つき大文字E\",Igrave:\"抑音符つき大文字I\",Iacute:\"揚音符つき大文字I\",Icirc:\"曲折アクセントつき大文字I\",Iuml:\"分音記号つき大文字I\",ETH:\"[アイスランド語]大文字ETH\",Ntilde:\"チルダつき大文字N\",Ograve:\"抑音符つき大文字O\",Oacute:\"揚音符つき大文字O\",Ocirc:\"曲折アクセントつき大文字O\",Otilde:\"チルダつき大文字O\",Ouml:\" 分音記号つき大文字O\",\ntimes:\"乗算記号\",Oslash:\"打ち消し線つき大文字O\",Ugrave:\"抑音符つき大文字U\",Uacute:\"揚音符つき大文字U\",Ucirc:\"曲折アクセントつき大文字U\",Uuml:\"分音記号つき大文字U\",Yacute:\"揚音符つき大文字Y\",THORN:\"[アイスランド語]大文字THORN\",szlig:\"ドイツ語エスツェット\",agrave:\"抑音符つき小文字a\",aacute:\"揚音符つき小文字a\",acirc:\"曲折アクセントつき小文字a\",atilde:\"チルダつき小文字a\",auml:\"分音記号つき小文字a\",aring:\"リングつき小文字a\",aelig:\"aとeの合字\",ccedil:\"セディラつき小文字c\",egrave:\"抑音符つき小文字e\",eacute:\"揚音符つき小文字e\",ecirc:\"曲折アクセントつき小文字e\",euml:\"分音記号つき小文字e\",igrave:\"抑音符つき小文字i\",iacute:\"揚音符つき小文字i\",icirc:\"曲折アクセントつき小文字i\",iuml:\"分音記号つき小文字i\",eth:\"アイスランド語小文字eth\",\nntilde:\"チルダつき小文字n\",ograve:\"抑音符つき小文字o\",oacute:\"揚音符つき小文字o\",ocirc:\"曲折アクセントつき小文字o\",otilde:\"チルダつき小文字o\",ouml:\"分音記号つき小文字o\",divide:\"除算記号\",oslash:\"打ち消し線つき小文字o\",ugrave:\"抑音符つき小文字u\",uacute:\"揚音符つき小文字u\",ucirc:\"曲折アクセントつき小文字u\",uuml:\"分音記号つき小文字u\",yacute:\"揚音符つき小文字y\",thorn:\"アイスランド語小文字thorn\",yuml:\"分音記号つき小文字y\",OElig:\"OとEの合字\",oelig:\"oとeの合字\",372:\"曲折アクセントつき大文字W\",374:\"曲折アクセントつき大文字Y\",373:\"曲折アクセントつき小文字w\",375:\"曲折アクセントつき小文字y\",sbquo:\"シングル下引用符\",8219:\"左右逆の左引用符\",bdquo:\"ダブル下引用符\",hellip:\"三点リーダ\",trade:\"商標記号\",9658:\"右黒三角ポインタ\",bull:\"黒丸\",\nrarr:\"右矢印\",rArr:\"右二重矢印\",hArr:\"左右二重矢印\",diams:\"ダイヤ\",asymp:\"漸近\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/km.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"km\",{euro:\"សញ្ញា​អឺរ៉ូ\",lsquo:\"Left single quotation mark\",rsquo:\"Right single quotation mark\",ldquo:\"Left double quotation mark\",rdquo:\"Right double quotation mark\",ndash:\"En dash\",mdash:\"Em dash\",iexcl:\"Inverted exclamation mark\",cent:\"សញ្ញា​សេន\",pound:\"សញ្ញា​ផោន\",curren:\"សញ្ញា​រូបិយបណ្ណ\",yen:\"សញ្ញា​យ៉េន\",brvbar:\"Broken bar\",sect:\"Section sign\",uml:\"Diaeresis\",copy:\"សញ្ញា​រក្សា​សិទ្ធិ\",ordf:\"Feminine ordinal indicator\",laquo:\"Left-pointing double angle quotation mark\",\nnot:\"Not sign\",reg:\"Registered sign\",macr:\"Macron\",deg:\"សញ្ញា​ដឺក្រេ\",sup2:\"Superscript two\",sup3:\"Superscript three\",acute:\"Acute accent\",micro:\"សញ្ញា​មីក្រូ\",para:\"Pilcrow sign\",middot:\"Middle dot\",cedil:\"Cedilla\",sup1:\"Superscript one\",ordm:\"Masculine ordinal indicator\",raquo:\"Right-pointing double angle quotation mark\",frac14:\"Vulgar fraction one quarter\",frac12:\"Vulgar fraction one half\",frac34:\"Vulgar fraction three quarters\",iquest:\"Inverted question mark\",Agrave:\"Latin capital letter A with grave accent\",\nAacute:\"Latin capital letter A with acute accent\",Acirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",\nIacute:\"Latin capital letter I with acute accent\",Icirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"Latin capital letter O with grave accent\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"Multiplication sign\",Oslash:\"Latin capital letter O with stroke\",\nUgrave:\"Latin capital letter U with grave accent\",Uacute:\"Latin capital letter U with acute accent\",Ucirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Latin small letter sharp s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",\naring:\"Latin small letter a with ring above\",aelig:\"Latin small letter æ\",ccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",\nntilde:\"Latin small letter n with tilde\",ograve:\"Latin small letter o with grave accent\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"Division sign\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",\nyacute:\"Latin small letter y with acute accent\",thorn:\"Latin small letter thorn\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",\ntrade:\"Trade mark sign\",9658:\"Black right-pointing pointer\",bull:\"Bullet\",rarr:\"Rightwards arrow\",rArr:\"Rightwards double arrow\",hArr:\"Left right double arrow\",diams:\"Black diamond suit\",asymp:\"Almost equal to\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/ko.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"ko\",{euro:\"유로화 기호\",lsquo:\"왼쪽 외 따옴표\",rsquo:\"오른쪽 외 따옴표\",ldquo:\"왼쪽 쌍 따옴표\",rdquo:\"오른쪽 쌍 따옴표\",ndash:\"반각 대시\",mdash:\"전각 대시\",iexcl:\"반전된 느낌표\",cent:\"센트 기호\",pound:\"파운드화 기호\",curren:\"커런시 기호\",yen:\"위안화 기호\",brvbar:\"Broken bar\",sect:\"섹션 기호\",uml:\"분음 부호\",copy:\"저작권 기호\",ordf:\"Feminine ordinal indicator\",laquo:\"왼쪽 쌍꺽쇠 인용 부호\",not:\"금지 기호\",reg:\"등록 기호\",macr:\"장음 기호\",deg:\"도 기호\",sup2:\"위첨자 2\",sup3:\"위첨자 3\",acute:\"양음 악센트 부호\",micro:\"마이크로 기호\",para:\"단락 기호\",middot:\"가운데 점\",cedil:\"세디유\",sup1:\"위첨자 1\",\nordm:\"Masculine ordinal indicator\",raquo:\"오른쪽 쌍꺽쇠 인용 부호\",frac14:\"분수 사분의 일\",frac12:\"분수 이분의 일\",frac34:\"분수 사분의 삼\",iquest:\"뒤집힌 물음표\",Agrave:\"억음 부호가 있는 라틴 대문자 A\",Aacute:\"양음 악센트 부호가 있는 라틴 대문자 A\",Acirc:\"곡절 악센트 부호가 있는 라틴 대문자 A\",Atilde:\"틸데가 있는 라틴 대문자 A\",Auml:\"분음 기호가 있는 라틴 대문자 A\",Aring:\"윗고리가 있는 라틴 대문자 A\",AElig:\"라틴 대문자 Æ\",Ccedil:\"세디유가 있는 라틴 대문자 C\",Egrave:\"억음 부호가 있는 라틴 대문자 E\",Eacute:\"양음 악센트 부호가 있는 라틴 대문자 E\",Ecirc:\"곡절 악센트 부호가 있는 라틴 대문자 E\",Euml:\"분음 기호가 있는 라틴 대문자 E\",Igrave:\"억음 부호가 있는 라틴 대문자 I\",Iacute:\"양음 악센트 부호가 있는 라틴 대문자 I\",\nIcirc:\"곡절 악센트 부호가 있는 라틴 대문자 I\",Iuml:\"분음 기호가 있는 라틴 대문자 I\",ETH:\"라틴 대문자 Eth\",Ntilde:\"틸데가 있는 라틴 대문자 N\",Ograve:\"억음 부호가 있는 라틴 대문자 O\",Oacute:\"양음 부호가 있는 라틴 대문자 O\",Ocirc:\"곡절 악센트 부호가 있는 라틴 대문자 O\",Otilde:\"틸데가 있는 라틴 대문자 O\",Ouml:\"분음 기호가 있는 라틴 대문자 O\",times:\"곱하기 기호\",Oslash:\"사선이 있는 라틴 대문자 O\",Ugrave:\"억음 부호가 있는 라틴 대문자 U\",Uacute:\"양음 부호가 있는 라틴 대문자 U\",Ucirc:\"곡절 악센트 부호가 있는 라틴 대문자 U\",Uuml:\"분음 기호가 있는 라틴 대문자 U\",Yacute:\"양음 부호가 있는 라틴 대문자 Y\",THORN:\"라틴 대문자 Thorn\",szlig:\"라틴 소문자 sharp s\",agrave:\"억음 부호가 있는 라틴 소문자 a\",aacute:\"양음 부호가 있는 라틴 소문자 a\",\nacirc:\"곡절 악센트 부호가 있는 라틴 소문자 a\",atilde:\"틸데가 있는 라틴 소문자 a\",auml:\"분음 기호가 있는 라틴 소문자 a\",aring:\"윗고리가 있는 라틴 소문자 a\",aelig:\"라틴 소문자 æ\",ccedil:\"세디유가 있는 라틴 소문자 c\",egrave:\"억음 부호가 있는 라틴 소문자 e\",eacute:\"양음 부호가 있는 라틴 소문자 e\",ecirc:\"곡절 악센트 부호가 있는 라틴 소문자 e\",euml:\"분음 기호가 있는 라틴 소문자 e\",igrave:\"억음 부호가 있는 라틴 소문자 i\",iacute:\"양음 부호가 있는 라틴 소문자 i\",icirc:\"곡절 악센트 부호가 있는 라틴 소문자 i\",iuml:\"분음 기호가 있는 라틴 소문자 i\",eth:\"라틴 소문자 eth\",ntilde:\"틸데가 있는 라틴 소문자 n\",ograve:\"억음 부호가 있는 라틴 소문자 o\",oacute:\"양음 부호가 있는 라틴 소문자 o\",ocirc:\"곡절 악센트 부호가 있는 라틴 소문자 o\",\notilde:\"틸데가 있는 라틴 소문자 o\",ouml:\"분음 기호가 있는 라틴 소문자 o\",divide:\"나누기 기호\",oslash:\"사선이 있는 라틴 소문자 o\",ugrave:\"억음 부호가 있는 라틴 소문자 u\",uacute:\"양음 부호가 있는 라틴 소문자 u\",ucirc:\"곡절 악센트 부호가 있는 라틴 소문자 u\",uuml:\"분음 기호가 있는 라틴 소문자 u\",yacute:\"양음 부호가 있는 라틴 소문자 y\",thorn:\"라틴 소문자 thorn\",yuml:\"분음 기호가 있는 라틴 소문자 y\",OElig:\"라틴 대문합자 OE\",oelig:\"라틴 소문합자 oe\",372:\"곡절 악센트 부호가 있는 라틴 대문자 W\",374:\"곡절 악센트 부호가 있는 라틴 대문자 Y\",373:\"곡절 악센트 부호가 있는 라틴 소문자 w\",375:\"곡절 악센트 부호가 있는 라틴 소문자 y\",sbquo:\"외 아래-9 인용 부호\",8219:\"외 위쪽-뒤집힌-9 인용 부호\",bdquo:\"쌍 아래-9 인용 부호\",hellip:\"수평 생략 부호\",\ntrade:\"상표 기호\",9658:\"검정 오른쪽 포인터\",bull:\"큰 점\",rarr:\"오른쪽 화살표\",rArr:\"오른쪽 두 줄 화살표\",hArr:\"양쪽 두 줄 화살표\",diams:\"검정 다이아몬드\",asymp:\"근사\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/ku.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"ku\",{euro:\"نیشانەی یۆرۆ\",lsquo:\"نیشانەی فاریزەی سەرووژێری تاکی چەپ\",rsquo:\"نیشانەی فاریزەی سەرووژێری تاکی ڕاست\",ldquo:\"نیشانەی فاریزەی سەرووژێری دووهێندەی چه‌پ\",rdquo:\"نیشانەی فاریزەی سەرووژێری دووهێندەی ڕاست\",ndash:\"تەقەڵی کورت\",mdash:\"تەقەڵی درێژ\",iexcl:\"نیشانەی هەڵەوگێڕی سەرسوڕهێنەر\",cent:\"نیشانەی سەنت\",pound:\"نیشانەی پاوەند\",curren:\"نیشانەی دراو\",yen:\"نیشانەی یەنی ژاپۆنی\",brvbar:\"شریتی ئەستوونی پچڕاو\",sect:\"نیشانەی دوو s لەسەریەک\",uml:\"خاڵ\",copy:\"نیشانەی مافی چاپ\",\nordf:\"هێڵ لەسەر پیتی a\",laquo:\"دوو تیری بەدووایەکی چەپ\",not:\"نیشانەی نەخێر\",reg:\"نیشانەی R لەناو بازنەدا\",macr:\"ماکڕۆن\",deg:\"نیشانەی پلە\",sup2:\"سەرنووسی دوو\",sup3:\"سەرنووسی سێ\",acute:\"لاری تیژ\",micro:\"نیشانەی u لق درێژی چەپی خواروو\",para:\"نیشانەی پەڕەگراف\",middot:\"ناوەڕاستی خاڵ\",cedil:\"نیشانەی c ژێر چووکرە\",sup1:\"سەرنووسی یەک\",ordm:\"هێڵ لەژێر پیتی o\",raquo:\"دوو تیری بەدووایەکی ڕاست\",frac14:\"یەک لەسەر چووار\",frac12:\"یەک لەسەر دوو\",frac34:\"سێ لەسەر چووار\",iquest:\"هێمای هەڵەوگێری پرسیار\",Agrave:\"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری لار\",\nAacute:\"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری تیژ\",Acirc:\"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری\",Atilde:\"پیتی لاتینی A-ی گەورە لەگەڵ زەڕە\",Auml:\"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری\",Aring:\"پیتی لاتینی گەورەی Å\",AElig:\"پیتی لاتینی گەورەی Æ\",Ccedil:\"پیتی لاتینی C-ی گەورە لەگەڵ ژێر چووکرە\",Egrave:\"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری لار\",Eacute:\"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری تیژ\",Ecirc:\"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری\",Euml:\"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری\",\nIgrave:\"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری لار\",Iacute:\"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری تیژ\",Icirc:\"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری\",Iuml:\"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری\",ETH:\"پیتی لاتینی E-ی گەورەی\",Ntilde:\"پیتی لاتینی N-ی گەورە لەگەڵ زەڕە\",Ograve:\"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری لار\",Oacute:\"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری تیژ\",Ocirc:\"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری\",Otilde:\"پیتی لاتینی O-ی گەورە لەگەڵ زەڕە\",Ouml:\"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری\",\ntimes:\"نیشانەی لێکدان\",Oslash:\"پیتی لاتینی گەورەی Ø لەگەڵ هێمای دڵ وەستان\",Ugrave:\"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری لار\",Uacute:\"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری تیژ\",Ucirc:\"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری\",Uuml:\"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری\",Yacute:\"پیتی لاتینی Y-ی گەورە لەگەڵ ڕوومەتداری تیژ\",THORN:\"پیتی لاتینی دڕکی گەورە\",szlig:\"پیتی لاتنی نووک تیژی s\",agrave:\"پیتی لاتینی a-ی بچووک لەگەڵ ڕوومەتداری لار\",aacute:\"پیتی لاتینی a-ی بچووك لەگەڵ ڕوومەتداری تیژ\",acirc:\"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری\",\natilde:\"پیتی لاتینی a-ی بچووك لەگەڵ زەڕە\",auml:\"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری\",aring:\"پیتی لاتینی å-ی بچووك\",aelig:\"پیتی لاتینی æ-ی بچووك\",ccedil:\"پیتی لاتینی c-ی بچووك لەگەڵ ژێر چووکرە\",egrave:\"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری لار\",eacute:\"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری تیژ\",ecirc:\"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری\",euml:\"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری\",igrave:\"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری لار\",iacute:\"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری تیژ\",\nicirc:\"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری\",iuml:\"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری\",eth:\"پیتی لاتینی e-ی بچووك\",ntilde:\"پیتی لاتینی n-ی بچووك لەگەڵ زەڕە\",ograve:\"پیتی لاتینی o-ی بچووك لەگەڵ ڕوومەتداری لار\",oacute:\"پیتی لاتینی o-ی بچووك له‌گەڵ ڕوومەتداری تیژ\",ocirc:\"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری\",otilde:\"پیتی لاتینی o-ی بچووك لەگەڵ زەڕە\",ouml:\"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری\",divide:\"نیشانەی دابەش\",oslash:\"پیتی لاتینی گەورەی ø لەگەڵ هێمای دڵ وەستان\",ugrave:\"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری لار\",\nuacute:\"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری تیژ\",ucirc:\"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری\",uuml:\"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری\",yacute:\"پیتی لاتینی y-ی بچووك لەگەڵ ڕوومەتداری تیژ\",thorn:\"پیتی لاتینی دڕکی بچووك\",yuml:\"پیتی لاتینی y-ی بچووك لەگەڵ نیشانە لەسەری\",OElig:\"پیتی لاتینی گەورەی پێکەوەنووسراوی OE\",oelig:\"پیتی لاتینی بچووکی پێکەوەنووسراوی oe\",372:\"پیتی لاتینی W-ی گەورە لەگەڵ نیشانە لەسەری\",374:\"پیتی لاتینی Y-ی گەورە لەگەڵ نیشانە لەسەری\",373:\"پیتی لاتینی w-ی بچووکی لەگەڵ نیشانە لەسەری\",\n375:\"پیتی لاتینی y-ی بچووکی لەگەڵ نیشانە لەسەری\",sbquo:\"نیشانەی فاریزەی نزم\",8219:\"نیشانەی فاریزەی بەرزی پێچەوانە\",bdquo:\"دوو فاریزەی تەنیش یەك\",hellip:\"ئاسۆیی بازنە\",trade:\"نیشانەی بازرگانی\",9658:\"ئاراستەی ڕەشی دەستی ڕاست\",bull:\"فیشەك\",rarr:\"تیری دەستی ڕاست\",rArr:\"دووتیری دەستی ڕاست\",hArr:\"دوو تیری ڕاست و چەپ\",diams:\"ڕەشی پاقڵاوەیی\",asymp:\"نیشانەی یەکسانە\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/lt.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"lt\",{euro:\"Euro ženklas\",lsquo:\"Left single quotation mark\",rsquo:\"Right single quotation mark\",ldquo:\"Left double quotation mark\",rdquo:\"Right double quotation mark\",ndash:\"En dash\",mdash:\"Em dash\",iexcl:\"Inverted exclamation mark\",cent:\"Cento ženklas\",pound:\"Svaro ženklas\",curren:\"Valiutos ženklas\",yen:\"Jenos ženklas\",brvbar:\"Broken bar\",sect:\"Section sign\",uml:\"Diaeresis\",copy:\"Copyright sign\",ordf:\"Feminine ordinal indicator\",laquo:\"Left-pointing double angle quotation mark\",\nnot:\"Ne ženklas\",reg:\"Registered sign\",macr:\"Makronas\",deg:\"Laipsnio ženklas\",sup2:\"Superscript two\",sup3:\"Superscript three\",acute:\"Acute accent\",micro:\"Mikro ženklas\",para:\"Pilcrow sign\",middot:\"Vidurinis taškas\",cedil:\"Cedilla\",sup1:\"Superscript one\",ordm:\"Masculine ordinal indicator\",raquo:\"Right-pointing double angle quotation mark\",frac14:\"Vulgar fraction one quarter\",frac12:\"Vulgar fraction one half\",frac34:\"Vulgar fraction three quarters\",iquest:\"Inverted question mark\",Agrave:\"Latin capital letter A with grave accent\",\nAacute:\"Latin capital letter A with acute accent\",Acirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",\nIacute:\"Latin capital letter I with acute accent\",Icirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"Latin capital letter O with grave accent\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"Multiplication sign\",Oslash:\"Latin capital letter O with stroke\",\nUgrave:\"Latin capital letter U with grave accent\",Uacute:\"Latin capital letter U with acute accent\",Ucirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Latin small letter sharp s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",\naring:\"Latin small letter a with ring above\",aelig:\"Latin small letter æ\",ccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",\nntilde:\"Latin small letter n with tilde\",ograve:\"Latin small letter o with grave accent\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"Division sign\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",\nyacute:\"Latin small letter y with acute accent\",thorn:\"Latin small letter thorn\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",\ntrade:\"Trade mark sign\",9658:\"Black right-pointing pointer\",bull:\"Bullet\",rarr:\"Rightwards arrow\",rArr:\"Rightwards double arrow\",hArr:\"Left right double arrow\",diams:\"Black diamond suit\",asymp:\"Almost equal to\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/lv.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"lv\",{euro:\"Euro zīme\",lsquo:\"Kreisā  vienkārtīga pēdiņa\",rsquo:\"Labā  vienkārtīga pēdiņa\",ldquo:\"Kreisā  dubult pēdiņa\",rdquo:\"Labā dubult pēdiņa\",ndash:\"En svītra\",mdash:\"Em svītra\",iexcl:\"Apgriezta izsaukuma zīme\",cent:\"Centu naudas zīme\",pound:\"Sterliņu mārciņu naudas zīme\",curren:\"Valūtas zīme\",yen:\"Jenu naudas zīme\",brvbar:\"Vertikāla pārrauta līnija\",sect:\"Paragrāfa zīme\",uml:\"Diakritiska zīme\",copy:\"Autortiesību zīme\",ordf:\"Sievišķas kārtas rādītājs\",\nlaquo:\"Kreisā dubult stūra pēdiņu zīme\",not:\"Neparakstīts\",reg:\"Reģistrēta zīme\",macr:\"Garumzīme\",deg:\"Grādu zīme\",sup2:\"Augšraksts divi\",sup3:\"Augšraksts trīs\",acute:\"Akūta uzsvara zīme\",micro:\"Mikro zīme\",para:\"Rindkopas zīme \",middot:\"Vidējs punkts\",cedil:\"Āķītis zem burta\",sup1:\"Augšraksts viens\",ordm:\"Vīrišķīgas kārtas rādītājs\",raquo:\"Labā dubult stūra pēdiņu zīme\",frac14:\"Vulgāra frakcija 1/4\",frac12:\"Vulgāra frakcija 1/2\",frac34:\"Vulgāra frakcija 3/4\",iquest:\"Apgriezta jautājuma zīme\",Agrave:\"Lielais latīņu burts A ar uzsvara zīmi\",\nAacute:\"Lielais  latīņu burts A ar akūtu uzsvara zīmi\",Acirc:\"Lielais latīņu burts A ar diakritisku zīmi\",Atilde:\"Lielais latīņu burts A ar tildi \",Auml:\"Lielais latīņu burts A ar diakritisko zīmi\",Aring:\"Lielais latīņu burts A ar aplīti augšā\",AElig:\"Lielais latīņu burts Æ\",Ccedil:\"Lielais latīņu burts C ar āķīti zem burta\",Egrave:\"Lielais latīņu burts E ar apostrofu\",Eacute:\"Lielais latīņu burts E ar akūtu uzsvara zīmi\",Ecirc:\"Lielais latīņu burts E ar diakritisko zīmi\",Euml:\"Lielais latīņu burts E ar diakritisko zīmi\",\nIgrave:\"Lielais latīņu burts I ar uzsvaras  zīmi\",Iacute:\"Lielais latīņu burts I ar akūtu uzsvara zīmi\",Icirc:\"Lielais latīņu burts I ar diakritisko zīmi\",Iuml:\"Lielais latīņu burts I ar diakritisko zīmi\",ETH:\"Lielais latīņu burts Eth\",Ntilde:\"Lielais latīņu burts N ar tildi\",Ograve:\"Lielais latīņu burts O ar uzsvara zīmi\",Oacute:\"Lielais latīņu burts O ar akūto uzsvara zīmi\",Ocirc:\"Lielais latīņu burts O ar diakritisko zīmi\",Otilde:\"Lielais latīņu burts O ar tildi\",Ouml:\"Lielais latīņu burts O ar diakritisko zīmi\",\ntimes:\"Reizināšanas zīme \",Oslash:\"Lielais latīņu burts O ar iesvītrojumu\",Ugrave:\"Lielais latīņu burts U ar uzsvaras zīmi\",Uacute:\"Lielais latīņu burts U ar akūto uzsvars zīmi\",Ucirc:\"Lielais latīņu burts U ar diakritisko zīmi\",Uuml:\"Lielais latīņu burts U ar diakritisko zīmi\",Yacute:\"Lielais latīņu burts Y ar akūto uzsvaras zīmi\",THORN:\"Lielais latīņu burts torn\",szlig:\"Mazs latīņu burts ar ligatūru\",agrave:\"Mazs latīņu burts a ar uzsvara zīmi\",aacute:\"Mazs latīņu burts a ar akūto uzsvara zīmi\",\nacirc:\"Mazs latīņu burts a ar diakritisko zīmi\",atilde:\"Mazs latīņu burts a ar tildi\",auml:\"Mazs latīņu burts a ar diakritisko zīmi\",aring:\"Mazs latīņu burts a ar aplīti augšā\",aelig:\"Mazs latīņu burts æ\",ccedil:\"Mazs latīņu burts c ar āķīti zem burta\",egrave:\"Mazs latīņu burts e ar uzsvara zīmi \",eacute:\"Mazs latīņu burts e ar akūtu uzsvara zīmi\",ecirc:\"Mazs latīņu burts e ar diakritisko zīmi\",euml:\"Mazs latīņu burts e ar diakritisko zīmi\",igrave:\"Mazs latīņu burts i ar uzsvara zīmi \",iacute:\"Mazs latīņu burts i ar akūtu uzsvara zīmi\",\nicirc:\"Mazs latīņu burts i ar diakritisko zīmi\",iuml:\"Mazs latīņu burts i ar diakritisko zīmi\",eth:\"Mazs latīņu burts eth\",ntilde:\"Mazs latīņu burts n ar tildi\",ograve:\"Mazs latīņu burts o ar uzsvara zīmi \",oacute:\"Mazs latīņu burts o ar akūtu uzsvara zīmi\",ocirc:\"Mazs latīņu burts o ar diakritisko zīmi\",otilde:\"Mazs latīņu burts o ar tildi\",ouml:\"Mazs latīņu burts o ar diakritisko zīmi\",divide:\"Dalīšanas zīme\",oslash:\"Mazs latīņu burts o ar iesvītrojumu\",ugrave:\"Mazs latīņu burts u ar uzsvara zīmi \",\nuacute:\"Mazs latīņu burts u ar  akūtu uzsvara zīmi\",ucirc:\"Mazs latīņu burts u ar diakritisko zīmi\",uuml:\"Mazs latīņu burts u ar diakritisko zīmi\",yacute:\"Mazs latīņu burts y ar  akūtu uzsvaras zīmi\",thorn:\"Mazs latīņu burts torns\",yuml:\"Mazs latīņu burts y ar diakritisko zīmi\",OElig:\"Liela latīņu ligatūra OE\",oelig:\"Maza latīņu ligatūra oe\",372:\"Liels latīņu burts W ar diakritisko zīmi \",374:\"Liels latīņu burts Y ar diakritisko zīmi \",373:\"Mazs latīņu burts w ar diakritisko zīmi \",375:\"Mazs latīņu burts y ar diakritisko zīmi \",\nsbquo:\"Mazas-9 vienkārtīgas pēdiņas\",8219:\"Lielas-9 vienkārtīgas apgrieztas pēdiņas\",bdquo:\"Mazas-9 dubultas pēdiņas\",hellip:\"Horizontāli daudzpunkti\",trade:\"Preču zīmes zīme\",9658:\"Melns pa labi pagriezts radītājs\",bull:\"Lode\",rarr:\"Bulta pa labi\",rArr:\"Dubulta Bulta pa labi\",hArr:\"Bulta pa kreisi\",diams:\"Dubulta Bulta pa kreisi\",asymp:\"Gandrīz vienāds ar\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/nb.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"nb\",{euro:\"Eurosymbol\",lsquo:\"Venstre enkelt anførselstegn\",rsquo:\"Høyre enkelt anførselstegn\",ldquo:\"Venstre dobbelt anførselstegn\",rdquo:\"Høyre anførsesltegn\",ndash:\"Kort tankestrek\",mdash:\"Lang tankestrek\",iexcl:\"Omvendt utropstegn\",cent:\"Centsymbol\",pound:\"Pundsymbol\",curren:\"Valutategn\",yen:\"Yensymbol\",brvbar:\"Brutt loddrett strek\",sect:\"Paragraftegn\",uml:\"Tøddel\",copy:\"Copyrighttegn\",ordf:\"Feminin ordensindikator\",laquo:\"Venstre anførselstegn\",not:\"Negasjonstegn\",\nreg:\"Registrert varemerke-tegn\",macr:\"Makron\",deg:\"Gradsymbol\",sup2:\"Hevet totall\",sup3:\"Hevet tretall\",acute:\"Akutt aksent\",micro:\"Mikrosymbol\",para:\"Avsnittstegn\",middot:\"Midtstilt prikk\",cedil:\"Cedille\",sup1:\"Hevet ettall\",ordm:\"Maskulin ordensindikator\",raquo:\"Høyre anførselstegn\",frac14:\"Fjerdedelsbrøk\",frac12:\"Halvbrøk\",frac34:\"Tre fjerdedelers brøk\",iquest:\"Omvendt spørsmålstegn\",Agrave:\"Stor A med grav aksent\",Aacute:\"Stor A med akutt aksent\",Acirc:\"Stor A med cirkumfleks\",Atilde:\"Stor A med tilde\",\nAuml:\"Stor A med tøddel\",Aring:\"Stor Å\",AElig:\"Stor Æ\",Ccedil:\"Stor C med cedille\",Egrave:\"Stor E med grav aksent\",Eacute:\"Stor E med akutt aksent\",Ecirc:\"Stor E med cirkumfleks\",Euml:\"Stor E med tøddel\",Igrave:\"Stor I med grav aksent\",Iacute:\"Stor I med akutt aksent\",Icirc:\"Stor I med cirkumfleks\",Iuml:\"Stor I med tøddel\",ETH:\"Stor Edd/stungen D\",Ntilde:\"Stor N med tilde\",Ograve:\"Stor O med grav aksent\",Oacute:\"Stor O med akutt aksent\",Ocirc:\"Stor O med cirkumfleks\",Otilde:\"Stor O med tilde\",Ouml:\"Stor O med tøddel\",\ntimes:\"Multiplikasjonstegn\",Oslash:\"Stor Ø\",Ugrave:\"Stor U med grav aksent\",Uacute:\"Stor U med akutt aksent\",Ucirc:\"Stor U med cirkumfleks\",Uuml:\"Stor U med tøddel\",Yacute:\"Stor Y med akutt aksent\",THORN:\"Stor Thorn\",szlig:\"Liten dobbelt-s/Eszett\",agrave:\"Liten a med grav aksent\",aacute:\"Liten a med akutt aksent\",acirc:\"Liten a med cirkumfleks\",atilde:\"Liten a med tilde\",auml:\"Liten a med tøddel\",aring:\"Liten å\",aelig:\"Liten æ\",ccedil:\"Liten c med cedille\",egrave:\"Liten e med grav aksent\",eacute:\"Liten e med akutt aksent\",\necirc:\"Liten e med cirkumfleks\",euml:\"Liten e med tøddel\",igrave:\"Liten i med grav aksent\",iacute:\"Liten i med akutt aksent\",icirc:\"Liten i med cirkumfleks\",iuml:\"Liten i med tøddel\",eth:\"Liten edd/stungen d\",ntilde:\"Liten n med tilde\",ograve:\"Liten o med grav aksent\",oacute:\"Liten o med akutt aksent\",ocirc:\"Liten o med cirkumfleks\",otilde:\"Liten o med tilde\",ouml:\"Liten o med tøddel\",divide:\"Divisjonstegn\",oslash:\"Liten ø\",ugrave:\"Liten u med grav aksent\",uacute:\"Liten u med akutt aksent\",ucirc:\"Liten u med cirkumfleks\",\nuuml:\"Liten u med tøddel\",yacute:\"Liten y med akutt aksent\",thorn:\"Liten thorn\",yuml:\"Liten y med tøddel\",OElig:\"Stor ligatur av O og E\",oelig:\"Liten ligatur av o og e\",372:\"Stor W med cirkumfleks\",374:\"Stor Y med cirkumfleks\",373:\"Liten w med cirkumfleks\",375:\"Liten y med cirkumfleks\",sbquo:\"Enkelt lavt 9-anførselstegn\",8219:\"Enkelt høyt reversert 9-anførselstegn\",bdquo:\"Dobbelt lavt 9-anførselstegn\",hellip:\"Ellipse\",trade:\"Varemerkesymbol\",9658:\"Svart høyrevendt peker\",bull:\"Tykk interpunkt\",rarr:\"Høyrevendt pil\",\nrArr:\"Dobbel høyrevendt pil\",hArr:\"Dobbel venstrevendt pil\",diams:\"Svart ruter\",asymp:\"Omtrent likhetstegn\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/nl.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"nl\",{euro:\"Euro-teken\",lsquo:\"Linker enkel aanhalingsteken\",rsquo:\"Rechter enkel aanhalingsteken\",ldquo:\"Linker dubbel aanhalingsteken\",rdquo:\"Rechter dubbel aanhalingsteken\",ndash:\"En dash\",mdash:\"Em dash\",iexcl:\"Omgekeerd uitroepteken\",cent:\"Cent-teken\",pound:\"Pond-teken\",curren:\"Valuta-teken\",yen:\"Yen-teken\",brvbar:\"Gebroken streep\",sect:\"Paragraaf-teken\",uml:\"Trema\",copy:\"Copyright-teken\",ordf:\"Vrouwelijk ordinaal\",laquo:\"Linker guillemet\",not:\"Ongelijk-teken\",\nreg:\"Geregistreerd handelsmerk-teken\",macr:\"Macron\",deg:\"Graden-teken\",sup2:\"Superscript twee\",sup3:\"Superscript drie\",acute:\"Accent aigu\",micro:\"Micro-teken\",para:\"Alinea-teken\",middot:\"Halfhoge punt\",cedil:\"Cedille\",sup1:\"Superscript een\",ordm:\"Mannelijk ordinaal\",raquo:\"Rechter guillemet\",frac14:\"Breuk kwart\",frac12:\"Breuk half\",frac34:\"Breuk driekwart\",iquest:\"Omgekeerd vraagteken\",Agrave:\"Latijnse hoofdletter A met een accent grave\",Aacute:\"Latijnse hoofdletter A met een accent aigu\",Acirc:\"Latijnse hoofdletter A met een circonflexe\",\nAtilde:\"Latijnse hoofdletter A met een tilde\",Auml:\"Latijnse hoofdletter A met een trema\",Aring:\"Latijnse hoofdletter A met een corona\",AElig:\"Latijnse hoofdletter Æ\",Ccedil:\"Latijnse hoofdletter C met een cedille\",Egrave:\"Latijnse hoofdletter E met een accent grave\",Eacute:\"Latijnse hoofdletter E met een accent aigu\",Ecirc:\"Latijnse hoofdletter E met een circonflexe\",Euml:\"Latijnse hoofdletter E met een trema\",Igrave:\"Latijnse hoofdletter I met een accent grave\",Iacute:\"Latijnse hoofdletter I met een accent aigu\",\nIcirc:\"Latijnse hoofdletter I met een circonflexe\",Iuml:\"Latijnse hoofdletter I met een trema\",ETH:\"Latijnse hoofdletter Eth\",Ntilde:\"Latijnse hoofdletter N met een tilde\",Ograve:\"Latijnse hoofdletter O met een accent grave\",Oacute:\"Latijnse hoofdletter O met een accent aigu\",Ocirc:\"Latijnse hoofdletter O met een circonflexe\",Otilde:\"Latijnse hoofdletter O met een tilde\",Ouml:\"Latijnse hoofdletter O met een trema\",times:\"Maal-teken\",Oslash:\"Latijnse hoofdletter O met een schuine streep\",Ugrave:\"Latijnse hoofdletter U met een accent grave\",\nUacute:\"Latijnse hoofdletter U met een accent aigu\",Ucirc:\"Latijnse hoofdletter U met een circonflexe\",Uuml:\"Latijnse hoofdletter U met een trema\",Yacute:\"Latijnse hoofdletter Y met een accent aigu\",THORN:\"Latijnse hoofdletter Thorn\",szlig:\"Latijnse kleine ringel-s\",agrave:\"Latijnse kleine letter a met een accent grave\",aacute:\"Latijnse kleine letter a met een accent aigu\",acirc:\"Latijnse kleine letter a met een circonflexe\",atilde:\"Latijnse kleine letter a met een tilde\",auml:\"Latijnse kleine letter a met een trema\",\naring:\"Latijnse kleine letter a met een corona\",aelig:\"Latijnse kleine letter æ\",ccedil:\"Latijnse kleine letter c met een cedille\",egrave:\"Latijnse kleine letter e met een accent grave\",eacute:\"Latijnse kleine letter e met een accent aigu\",ecirc:\"Latijnse kleine letter e met een circonflexe\",euml:\"Latijnse kleine letter e met een trema\",igrave:\"Latijnse kleine letter i met een accent grave\",iacute:\"Latijnse kleine letter i met een accent aigu\",icirc:\"Latijnse kleine letter i met een circonflexe\",\niuml:\"Latijnse kleine letter i met een trema\",eth:\"Latijnse kleine letter eth\",ntilde:\"Latijnse kleine letter n met een tilde\",ograve:\"Latijnse kleine letter o met een accent grave\",oacute:\"Latijnse kleine letter o met een accent aigu\",ocirc:\"Latijnse kleine letter o met een circonflexe\",otilde:\"Latijnse kleine letter o met een tilde\",ouml:\"Latijnse kleine letter o met een trema\",divide:\"Deel-teken\",oslash:\"Latijnse kleine letter o met een schuine streep\",ugrave:\"Latijnse kleine letter u met een accent grave\",\nuacute:\"Latijnse kleine letter u met een accent aigu\",ucirc:\"Latijnse kleine letter u met een circonflexe\",uuml:\"Latijnse kleine letter u met een trema\",yacute:\"Latijnse kleine letter y met een accent aigu\",thorn:\"Latijnse kleine letter thorn\",yuml:\"Latijnse kleine letter y met een trema\",OElig:\"Latijnse hoofdletter Œ\",oelig:\"Latijnse kleine letter œ\",372:\"Latijnse hoofdletter W met een circonflexe\",374:\"Latijnse hoofdletter Y met een circonflexe\",373:\"Latijnse kleine letter w met een circonflexe\",\n375:\"Latijnse kleine letter y met een circonflexe\",sbquo:\"Lage enkele aanhalingsteken\",8219:\"Hoge omgekeerde enkele aanhalingsteken\",bdquo:\"Lage dubbele aanhalingsteken\",hellip:\"Beletselteken\",trade:\"Trademark-teken\",9658:\"Zwarte driehoek naar rechts\",bull:\"Bullet\",rarr:\"Pijl naar rechts\",rArr:\"Dubbele pijl naar rechts\",hArr:\"Dubbele pijl naar links\",diams:\"Zwart ruitje\",asymp:\"Benaderingsteken\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/no.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"no\",{euro:\"Eurosymbol\",lsquo:\"Venstre enkelt anførselstegn\",rsquo:\"Høyre enkelt anførselstegn\",ldquo:\"Venstre dobbelt anførselstegn\",rdquo:\"Høyre anførsesltegn\",ndash:\"Kort tankestrek\",mdash:\"Lang tankestrek\",iexcl:\"Omvendt utropstegn\",cent:\"Centsymbol\",pound:\"Pundsymbol\",curren:\"Valutategn\",yen:\"Yensymbol\",brvbar:\"Brutt loddrett strek\",sect:\"Paragraftegn\",uml:\"Tøddel\",copy:\"Copyrighttegn\",ordf:\"Feminin ordensindikator\",laquo:\"Venstre anførselstegn\",not:\"Negasjonstegn\",\nreg:\"Registrert varemerke-tegn\",macr:\"Makron\",deg:\"Gradsymbol\",sup2:\"Hevet totall\",sup3:\"Hevet tretall\",acute:\"Akutt aksent\",micro:\"Mikrosymbol\",para:\"Avsnittstegn\",middot:\"Midtstilt prikk\",cedil:\"Cedille\",sup1:\"Hevet ettall\",ordm:\"Maskulin ordensindikator\",raquo:\"Høyre anførselstegn\",frac14:\"Fjerdedelsbrøk\",frac12:\"Halvbrøk\",frac34:\"Tre fjerdedelers brøk\",iquest:\"Omvendt spørsmålstegn\",Agrave:\"Stor A med grav aksent\",Aacute:\"Stor A med akutt aksent\",Acirc:\"Stor A med cirkumfleks\",Atilde:\"Stor A med tilde\",\nAuml:\"Stor A med tøddel\",Aring:\"Stor Å\",AElig:\"Stor Æ\",Ccedil:\"Stor C med cedille\",Egrave:\"Stor E med grav aksent\",Eacute:\"Stor E med akutt aksent\",Ecirc:\"Stor E med cirkumfleks\",Euml:\"Stor E med tøddel\",Igrave:\"Stor I med grav aksent\",Iacute:\"Stor I med akutt aksent\",Icirc:\"Stor I med cirkumfleks\",Iuml:\"Stor I med tøddel\",ETH:\"Stor Edd/stungen D\",Ntilde:\"Stor N med tilde\",Ograve:\"Stor O med grav aksent\",Oacute:\"Stor O med akutt aksent\",Ocirc:\"Stor O med cirkumfleks\",Otilde:\"Stor O med tilde\",Ouml:\"Stor O med tøddel\",\ntimes:\"Multiplikasjonstegn\",Oslash:\"Stor Ø\",Ugrave:\"Stor U med grav aksent\",Uacute:\"Stor U med akutt aksent\",Ucirc:\"Stor U med cirkumfleks\",Uuml:\"Stor U med tøddel\",Yacute:\"Stor Y med akutt aksent\",THORN:\"Stor Thorn\",szlig:\"Liten dobbelt-s/Eszett\",agrave:\"Liten a med grav aksent\",aacute:\"Liten a med akutt aksent\",acirc:\"Liten a med cirkumfleks\",atilde:\"Liten a med tilde\",auml:\"Liten a med tøddel\",aring:\"Liten å\",aelig:\"Liten æ\",ccedil:\"Liten c med cedille\",egrave:\"Liten e med grav aksent\",eacute:\"Liten e med akutt aksent\",\necirc:\"Liten e med cirkumfleks\",euml:\"Liten e med tøddel\",igrave:\"Liten i med grav aksent\",iacute:\"Liten i med akutt aksent\",icirc:\"Liten i med cirkumfleks\",iuml:\"Liten i med tøddel\",eth:\"Liten edd/stungen d\",ntilde:\"Liten n med tilde\",ograve:\"Liten o med grav aksent\",oacute:\"Liten o med akutt aksent\",ocirc:\"Liten o med cirkumfleks\",otilde:\"Liten o med tilde\",ouml:\"Liten o med tøddel\",divide:\"Divisjonstegn\",oslash:\"Liten ø\",ugrave:\"Liten u med grav aksent\",uacute:\"Liten u med akutt aksent\",ucirc:\"Liten u med cirkumfleks\",\nuuml:\"Liten u med tøddel\",yacute:\"Liten y med akutt aksent\",thorn:\"Liten thorn\",yuml:\"Liten y med tøddel\",OElig:\"Stor ligatur av O og E\",oelig:\"Liten ligatur av o og e\",372:\"Stor W med cirkumfleks\",374:\"Stor Y med cirkumfleks\",373:\"Liten w med cirkumfleks\",375:\"Liten y med cirkumfleks\",sbquo:\"Enkelt lavt 9-anførselstegn\",8219:\"Enkelt høyt reversert 9-anførselstegn\",bdquo:\"Dobbelt lavt 9-anførselstegn\",hellip:\"Ellipse\",trade:\"Varemerkesymbol\",9658:\"Svart høyrevendt peker\",bull:\"Tykk interpunkt\",rarr:\"Høyrevendt pil\",\nrArr:\"Dobbel høyrevendt pil\",hArr:\"Dobbel venstrevendt pil\",diams:\"Svart ruter\",asymp:\"Omtrent likhetstegn\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/pl.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"pl\",{euro:\"Znak euro\",lsquo:\"Cudzysłów pojedynczy otwierający\",rsquo:\"Cudzysłów pojedynczy zamykający\",ldquo:\"Cudzysłów apostrofowy otwierający\",rdquo:\"Cudzysłów apostrofowy zamykający\",ndash:\"Półpauza\",mdash:\"Pauza\",iexcl:\"Odwrócony wykrzyknik\",cent:\"Znak centa\",pound:\"Znak funta\",curren:\"Znak waluty\",yen:\"Znak jena\",brvbar:\"Przerwana pionowa kreska\",sect:\"Paragraf\",uml:\"Diereza\",copy:\"Znak praw autorskich\",ordf:\"Wskaźnik rodzaju żeńskiego liczebnika porządkowego\",\nlaquo:\"Lewy cudzysłów ostrokątny\",not:\"Znak negacji\",reg:\"Zastrzeżony znak towarowy\",macr:\"Makron\",deg:\"Znak stopnia\",sup2:\"Druga potęga\",sup3:\"Trzecia potęga\",acute:\"Akcent ostry\",micro:\"Znak mikro\",para:\"Znak akapitu\",middot:\"Kropka środkowa\",cedil:\"Cedylla\",sup1:\"Pierwsza potęga\",ordm:\"Wskaźnik rodzaju męskiego liczebnika porządkowego\",raquo:\"Prawy cudzysłów ostrokątny\",frac14:\"Ułamek zwykły jedna czwarta\",frac12:\"Ułamek zwykły jedna druga\",frac34:\"Ułamek zwykły trzy czwarte\",iquest:\"Odwrócony znak zapytania\",\nAgrave:\"Wielka litera A z akcentem ciężkim\",Aacute:\"Wielka litera A z akcentem ostrym\",Acirc:\"Wielka litera A z akcentem przeciągłym\",Atilde:\"Wielka litera A z tyldą\",Auml:\"Wielka litera A z dierezą\",Aring:\"Wielka litera A z kółkiem\",AElig:\"Wielka ligatura Æ\",Ccedil:\"Wielka litera C z cedyllą\",Egrave:\"Wielka litera E z akcentem ciężkim\",Eacute:\"Wielka litera E z akcentem ostrym\",Ecirc:\"Wielka litera E z akcentem przeciągłym\",Euml:\"Wielka litera E z dierezą\",Igrave:\"Wielka litera I z akcentem ciężkim\",\nIacute:\"Wielka litera I z akcentem ostrym\",Icirc:\"Wielka litera I z akcentem przeciągłym\",Iuml:\"Wielka litera I z dierezą\",ETH:\"Wielka litera Eth\",Ntilde:\"Wielka litera N z tyldą\",Ograve:\"Wielka litera O z akcentem ciężkim\",Oacute:\"Wielka litera O z akcentem ostrym\",Ocirc:\"Wielka litera O z akcentem przeciągłym\",Otilde:\"Wielka litera O z tyldą\",Ouml:\"Wielka litera O z dierezą\",times:\"Znak mnożenia wektorowego\",Oslash:\"Wielka litera O z przekreśleniem\",Ugrave:\"Wielka litera U z akcentem ciężkim\",Uacute:\"Wielka litera U z akcentem ostrym\",\nUcirc:\"Wielka litera U z akcentem przeciągłym\",Uuml:\"Wielka litera U z dierezą\",Yacute:\"Wielka litera Y z akcentem ostrym\",THORN:\"Wielka litera Thorn\",szlig:\"Mała litera ostre s (eszet)\",agrave:\"Mała litera a z akcentem ciężkim\",aacute:\"Mała litera a z akcentem ostrym\",acirc:\"Mała litera a z akcentem przeciągłym\",atilde:\"Mała litera a z tyldą\",auml:\"Mała litera a z dierezą\",aring:\"Mała litera a z kółkiem\",aelig:\"Mała ligatura æ\",ccedil:\"Mała litera c z cedyllą\",egrave:\"Mała litera e z akcentem ciężkim\",\neacute:\"Mała litera e z akcentem ostrym\",ecirc:\"Mała litera e z akcentem przeciągłym\",euml:\"Mała litera e z dierezą\",igrave:\"Mała litera i z akcentem ciężkim\",iacute:\"Mała litera i z akcentem ostrym\",icirc:\"Mała litera i z akcentem przeciągłym\",iuml:\"Mała litera i z dierezą\",eth:\"Mała litera eth\",ntilde:\"Mała litera n z tyldą\",ograve:\"Mała litera o z akcentem ciężkim\",oacute:\"Mała litera o z akcentem ostrym\",ocirc:\"Mała litera o z akcentem przeciągłym\",otilde:\"Mała litera o z tyldą\",ouml:\"Mała litera o z dierezą\",\ndivide:\"Anglosaski znak dzielenia\",oslash:\"Mała litera o z przekreśleniem\",ugrave:\"Mała litera u z akcentem ciężkim\",uacute:\"Mała litera u z akcentem ostrym\",ucirc:\"Mała litera u z akcentem przeciągłym\",uuml:\"Mała litera u z dierezą\",yacute:\"Mała litera y z akcentem ostrym\",thorn:\"Mała litera thorn\",yuml:\"Mała litera y z dierezą\",OElig:\"Wielka ligatura OE\",oelig:\"Mała ligatura oe\",372:\"Wielka litera W z akcentem przeciągłym\",374:\"Wielka litera Y z akcentem przeciągłym\",373:\"Mała litera w z akcentem przeciągłym\",\n375:\"Mała litera y z akcentem przeciągłym\",sbquo:\"Pojedynczy apostrof dolny\",8219:\"Pojedynczy apostrof górny\",bdquo:\"Podwójny apostrof dolny\",hellip:\"Wielokropek\",trade:\"Znak towarowy\",9658:\"Czarny wskaźnik wskazujący w prawo\",bull:\"Punktor\",rarr:\"Strzałka w prawo\",rArr:\"Podwójna strzałka w prawo\",hArr:\"Podwójna strzałka obustronna\",diams:\"Czarny znak karo\",asymp:\"Znak prawie równe\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"pt-br\",{euro:\"Euro\",lsquo:\"Aspas simples esquerda\",rsquo:\"Aspas simples direita\",ldquo:\"Aspas duplas esquerda\",rdquo:\"Aspas duplas direita\",ndash:\"Traço\",mdash:\"Travessão\",iexcl:\"Ponto de exclamação invertido\",cent:\"Cent\",pound:\"Cerquilha\",curren:\"Dinheiro\",yen:\"Yen\",brvbar:\"Bara interrompida\",sect:\"Símbolo de Parágrafo\",uml:\"Trema\",copy:\"Direito de Cópia\",ordf:\"Indicador ordinal feminino\",laquo:\"Aspas duplas angulares esquerda\",not:\"Negação\",reg:\"Marca Registrada\",\nmacr:\"Mácron\",deg:\"Grau\",sup2:\"2 Superscrito\",sup3:\"3 Superscrito\",acute:\"Acento agudo\",micro:\"Micro\",para:\"Pé de mosca\",middot:\"Ponto mediano\",cedil:\"Cedilha\",sup1:\"1 Superscrito\",ordm:\"Indicador ordinal masculino\",raquo:\"Aspas duplas angulares direita\",frac14:\"Um quarto\",frac12:\"Um meio\",frac34:\"Três quartos\",iquest:\"Interrogação invertida\",Agrave:\"A maiúsculo com acento grave\",Aacute:\"A maiúsculo com acento agudo\",Acirc:\"A maiúsculo com acento circunflexo\",Atilde:\"A maiúsculo com til\",Auml:\"A maiúsculo com trema\",\nAring:\"A maiúsculo com anel acima\",AElig:\"Æ maiúsculo\",Ccedil:\"Ç maiúlculo\",Egrave:\"E maiúsculo com acento grave\",Eacute:\"E maiúsculo com acento agudo\",Ecirc:\"E maiúsculo com acento circumflexo\",Euml:\"E maiúsculo com trema\",Igrave:\"I maiúsculo com acento grave\",Iacute:\"I maiúsculo com acento agudo\",Icirc:\"I maiúsculo com acento circunflexo\",Iuml:\"I maiúsculo com crase\",ETH:\"Eth maiúsculo\",Ntilde:\"N maiúsculo com til\",Ograve:\"O maiúsculo com acento grave\",Oacute:\"O maiúsculo com acento agudo\",Ocirc:\"O maiúsculo com acento circunflexo\",\nOtilde:\"O maiúsculo com til\",Ouml:\"O maiúsculo com trema\",times:\"Multiplicação\",Oslash:\"Diâmetro\",Ugrave:\"U maiúsculo com acento grave\",Uacute:\"U maiúsculo com acento agudo\",Ucirc:\"U maiúsculo com acento circunflexo\",Uuml:\"U maiúsculo com trema\",Yacute:\"Y maiúsculo com acento agudo\",THORN:\"Thorn maiúsculo\",szlig:\"Eszett minúsculo\",agrave:\"a minúsculo com acento grave\",aacute:\"a minúsculo com acento agudo\",acirc:\"a minúsculo com acento circunflexo\",atilde:\"a minúsculo com til\",auml:\"a minúsculo com trema\",\naring:\"a minúsculo com anel acima\",aelig:\"æ minúsculo\",ccedil:\"ç minúsculo\",egrave:\"e minúsculo com acento grave\",eacute:\"e minúsculo com acento agudo\",ecirc:\"e minúsculo com acento circunflexo\",euml:\"e minúsculo com trema\",igrave:\"i minúsculo com acento grave\",iacute:\"i minúsculo com acento agudo\",icirc:\"i minúsculo com acento circunflexo\",iuml:\"i minúsculo com trema\",eth:\"eth minúsculo\",ntilde:\"n minúsculo com til\",ograve:\"o minúsculo com acento grave\",oacute:\"o minúsculo com acento agudo\",ocirc:\"o minúsculo com acento circunflexo\",\notilde:\"o minúsculo com til\",ouml:\"o minúsculo com trema\",divide:\"Divisão\",oslash:\"o minúsculo com cortado ou diâmetro\",ugrave:\"u minúsculo com acento grave\",uacute:\"u minúsculo com acento agudo\",ucirc:\"u minúsculo com acento circunflexo\",uuml:\"u minúsculo com trema\",yacute:\"y minúsculo com acento agudo\",thorn:\"thorn minúsculo\",yuml:\"y minúsculo com trema\",OElig:\"Ligação tipográfica OE maiúscula\",oelig:\"Ligação tipográfica oe minúscula\",372:\"W maiúsculo com acento circunflexo\",374:\"Y maiúsculo com acento circunflexo\",\n373:\"w minúsculo com acento circunflexo\",375:\"y minúsculo com acento circunflexo\",sbquo:\"Aspas simples inferior direita\",8219:\"Aspas simples superior esquerda\",bdquo:\"Aspas duplas inferior direita\",hellip:\"Reticências\",trade:\"Trade mark\",9658:\"Ponta de seta preta para direita\",bull:\"Ponto lista\",rarr:\"Seta para direita\",rArr:\"Seta dupla para direita\",hArr:\"Seta dupla direita e esquerda\",diams:\"Ouros\",asymp:\"Aproximadamente\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/pt.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"pt\",{euro:\"Símbolo do Euro\",lsquo:\"Aspa esquerda simples\",rsquo:\"Aspa direita simples\",ldquo:\"Aspa esquerda dupla\",rdquo:\"Aspa direita dupla\",ndash:\"Travessão Simples\",mdash:\"Travessão Longo\",iexcl:\"Ponto de exclamação invertido\",cent:\"Símbolo do Cêntimo\",pound:\"Símbolo da Libra\",curren:\"Símbolo de Moeda\",yen:\"Símbolo do Iene\",brvbar:\"Barra quebrada\",sect:\"Símbolo de Secção\",uml:\"Trema\",copy:\"Símbolo dos Direitos de Autor\",ordf:\"Indicador ordinal feminino\",\nlaquo:\"Aspa esquerda ângulo duplo\",not:\"Não Símbolo\",reg:\"Símbolo de Registado\",macr:\"Mácron\",deg:\"Símbolo de Grau\",sup2:\"Expoente 2\",sup3:\"Expoente 3\",acute:\"Acento agudo\",micro:\"Símbolo de Micro\",para:\"Símbolo de Parágrafo\",middot:\"Ponto do Meio\",cedil:\"Cedilha\",sup1:\"Expoente 1\",ordm:\"Indicador ordinal masculino\",raquo:\"Aspas ângulo duplo pra Direita\",frac14:\"Fração vulgar 1/4\",frac12:\"Fração vulgar 1/2\",frac34:\"Fração vulgar 3/4\",iquest:\"Ponto de interrogação invertido\",Agrave:\"Letra maiúscula latina A com acento grave\",\nAacute:\"Letra maiúscula latina A com acento agudo\",Acirc:\"Letra maiúscula latina A com circunflexo\",Atilde:\"Letra maiúscula latina A com til\",Auml:\"Letra maiúscula latina A com trema\",Aring:\"Letra maiúscula latina A com sinal diacrítico\",AElig:\"Letra maiúscula latina Æ\",Ccedil:\"Letra maiúscula latina C com cedilha\",Egrave:\"Letra maiúscula latina E com acento grave\",Eacute:\"Letra maiúscula latina E com acento agudo\",Ecirc:\"Letra maiúscula latina E com circunflexo\",Euml:\"Letra maiúscula latina E com trema\",\nIgrave:\"Letra maiúscula latina I com acento grave\",Iacute:\"Letra maiúscula latina I com acento agudo\",Icirc:\"Letra maiúscula latina I com cincunflexo\",Iuml:\"Letra maiúscula latina I com trema\",ETH:\"Letra maiúscula latina Eth (Ðð)\",Ntilde:\"Letra maiúscula latina N com til\",Ograve:\"Letra maiúscula latina O com acento grave\",Oacute:\"Letra maiúscula latina O com acento agudo\",Ocirc:\"Letra maiúscula latina I com circunflexo\",Otilde:\"Letra maiúscula latina O com til\",Ouml:\"Letra maiúscula latina O com trema\",\ntimes:\"Símbolo de multiplicação\",Oslash:\"Letra maiúscula O com barra\",Ugrave:\"Letra maiúscula latina U com acento grave\",Uacute:\"Letra maiúscula latina U com acento agudo\",Ucirc:\"Letra maiúscula latina U com circunflexo\",Uuml:\"Letra maiúscula latina E com trema\",Yacute:\"Letra maiúscula latina Y com acento agudo\",THORN:\"Letra maiúscula latina Rúnico\",szlig:\"Letra minúscula latina s forte\",agrave:\"Letra minúscula latina a com acento grave\",aacute:\"Letra minúscula latina a com acento agudo\",acirc:\"Letra minúscula latina a com circunflexo\",\natilde:\"Letra minúscula latina a com til\",auml:\"Letra minúscula latina a com trema\",aring:\"Letra minúscula latina a com sinal diacrítico\",aelig:\"Letra minúscula latina æ\",ccedil:\"Letra minúscula latina c com cedilha\",egrave:\"Letra minúscula latina e com acento grave\",eacute:\"Letra minúscula latina e com acento agudo\",ecirc:\"Letra minúscula latina e com circunflexo\",euml:\"Letra minúscula latina e com trema\",igrave:\"Letra minúscula latina i com acento grave\",iacute:\"Letra minúscula latina i com acento agudo\",\nicirc:\"Letra minúscula latina i com circunflexo\",iuml:\"Letra pequena latina i com trema\",eth:\"Letra minúscula latina eth\",ntilde:\"Letra minúscula latina n com til\",ograve:\"Letra minúscula latina o com acento grave\",oacute:\"Letra minúscula latina o com acento agudo\",ocirc:\"Letra minúscula latina o com circunflexo\",otilde:\"Letra minúscula latina o com til\",ouml:\"Letra minúscula latina o com trema\",divide:\"Símbolo de divisão\",oslash:\"Letra minúscula latina o com barra\",ugrave:\"Letra minúscula latina u com acento grave\",\nuacute:\"Letra minúscula latina u com acento agudo\",ucirc:\"Letra minúscula latina u com circunflexo\",uuml:\"Letra minúscula latina u com trema\",yacute:\"Letra minúscula latina y com acento agudo\",thorn:\"Letra minúscula latina Rúnico\",yuml:\"Letra minúscula latina y com trema\",OElig:\"Ligadura maiúscula latina OE\",oelig:\"Ligadura minúscula latina oe\",372:\"Letra maiúscula latina W com circunflexo\",374:\"Letra maiúscula latina Y com circunflexo\",373:\"Letra minúscula latina w com circunflexo\",375:\"Letra minúscula latina y com circunflexo\",\nsbquo:\"Aspa Simples inferior-9\",8219:\"Aspa Simples superior invertida-9\",bdquo:\"Aspa duplas inferior-9\",hellip:\"Elipse Horizontal \",trade:\"Símbolo de Marca Registada\",9658:\"Ponteiro preto direito\",bull:\"Marca\",rarr:\"Seta para a direita\",rArr:\"Seta dupla para a direita\",hArr:\"Seta dupla direita esquerda\",diams:\"Naipe diamante preto\",asymp:\"Quase igual a \"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/ru.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"ru\",{euro:\"Знак евро\",lsquo:\"Левая одинарная кавычка\",rsquo:\"Правая одинарная кавычка\",ldquo:\"Левая двойная кавычка\",rdquo:\"Левая двойная кавычка\",ndash:\"Среднее тире\",mdash:\"Длинное тире\",iexcl:\"перевёрнутый восклицательный знак\",cent:\"Цент\",pound:\"Фунт\",curren:\"Знак валюты\",yen:\"Йена\",brvbar:\"Вертикальная черта с разрывом\",sect:\"Знак параграфа\",uml:\"Умлаут\",copy:\"Знак охраны авторского права\",ordf:\"Указатель окончания женского рода ...ая\",laquo:\"Левая кавычка-«ёлочка»\",\nnot:\"Отрицание\",reg:\"Знак охраны смежных прав\\\\t\",macr:\"Макрон\",deg:\"Градус\",sup2:\"Надстрочное два\",sup3:\"Надстрочное три\",acute:\"Акут\",micro:\"Микро\",para:\"Абзац\",middot:\"Интерпункт\",cedil:\"Седиль\",sup1:\"Надстрочная единица\",ordm:\"Порядковое числительное\",raquo:\"Правая кавычка-«ёлочка»\",frac14:\"Одна четвертая\",frac12:\"Одна вторая\",frac34:\"Три четвёртых\",iquest:\"Перевёрнутый вопросительный знак\",Agrave:\"Латинская заглавная буква А с апострофом\",Aacute:\"Латинская заглавная буква A с ударением\",Acirc:\"Латинская заглавная буква А с циркумфлексом\",\nAtilde:\"Латинская заглавная буква А с тильдой\",Auml:\"Латинская заглавная буква А с тремой\",Aring:\"Латинская заглавная буква А с кольцом над ней\",AElig:\"Латинская большая буква Æ\",Ccedil:\"Латинская заглавная буква C с седилью\",Egrave:\"Латинская заглавная буква Е с апострофом\",Eacute:\"Латинская заглавная буква Е с ударением\",Ecirc:\"Латинская заглавная буква Е с циркумфлексом\",Euml:\"Латинская заглавная буква Е с тремой\",Igrave:\"Латинская заглавная буква I с апострофом\",Iacute:\"Латинская заглавная буква I с ударением\",\nIcirc:\"Латинская заглавная буква I с циркумфлексом\",Iuml:\"Латинская заглавная буква I с тремой\",ETH:\"Латинская большая буква Eth\",Ntilde:\"Латинская заглавная буква N с тильдой\",Ograve:\"Латинская заглавная буква O с апострофом\",Oacute:\"Латинская заглавная буква O с ударением\",Ocirc:\"Латинская заглавная буква O с циркумфлексом\",Otilde:\"Латинская заглавная буква O с тильдой\",Ouml:\"Латинская заглавная буква O с тремой\",times:\"Знак умножения\",Oslash:\"Латинская большая перечеркнутая O\",Ugrave:\"Латинская заглавная буква U с апострофом\",\nUacute:\"Латинская заглавная буква U с ударением\",Ucirc:\"Латинская заглавная буква U с циркумфлексом\",Uuml:\"Латинская заглавная буква U с тремой\",Yacute:\"Латинская заглавная буква Y с ударением\",THORN:\"Латинская заглавная буква Thorn\",szlig:\"Знак диеза\",agrave:\"Латинская маленькая буква a с апострофом\",aacute:\"Латинская маленькая буква a с ударением\",acirc:\"Латинская маленькая буква a с циркумфлексом\",atilde:\"Латинская маленькая буква a с тильдой\",auml:\"Латинская маленькая буква a с тремой\",aring:\"Латинская маленькая буква a с кольцом\",\naelig:\"Латинская маленькая буква æ\",ccedil:\"Латинская маленькая буква с с седилью\",egrave:\"Латинская маленькая буква е с апострофом\",eacute:\"Латинская маленькая буква е с ударением\",ecirc:\"Латинская маленькая буква е с циркумфлексом\",euml:\"Латинская маленькая буква е с тремой\",igrave:\"Латинская маленькая буква i с апострофом\",iacute:\"Латинская маленькая буква i с ударением\",icirc:\"Латинская маленькая буква i с циркумфлексом\",iuml:\"Латинская маленькая буква i с тремой\",eth:\"Латинская маленькая буква eth\",\nntilde:\"Латинская маленькая буква n с тильдой\",ograve:\"Латинская маленькая буква o с апострофом\",oacute:\"Латинская маленькая буква o с ударением\",ocirc:\"Латинская маленькая буква o с циркумфлексом\",otilde:\"Латинская маленькая буква o с тильдой\",ouml:\"Латинская маленькая буква o с тремой\",divide:\"Знак деления\",oslash:\"Латинская строчная перечеркнутая o\",ugrave:\"Латинская маленькая буква u с апострофом\",uacute:\"Латинская маленькая буква u с ударением\",ucirc:\"Латинская маленькая буква u с циркумфлексом\",\nuuml:\"Латинская маленькая буква u с тремой\",yacute:\"Латинская маленькая буква y с ударением\",thorn:\"Латинская маленькая буква thorn\",yuml:\"Латинская маленькая буква y с тремой\",OElig:\"Латинская прописная лигатура OE\",oelig:\"Латинская строчная лигатура oe\",372:\"Латинская заглавная буква W с циркумфлексом\",374:\"Латинская заглавная буква Y с циркумфлексом\",373:\"Латинская маленькая буква w с циркумфлексом\",375:\"Латинская маленькая буква y с циркумфлексом\",sbquo:\"Нижняя одинарная кавычка\",8219:\"Правая одинарная кавычка\",\nbdquo:\"Левая двойная кавычка\",hellip:\"Горизонтальное многоточие\",trade:\"Товарный знак\",9658:\"Черный указатель вправо\",bull:\"Маркер списка\",rarr:\"Стрелка вправо\",rArr:\"Двойная стрелка вправо\",hArr:\"Двойная стрелка влево-вправо\",diams:\"Черный ромб\",asymp:\"Примерно равно\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/si.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"si\",{euro:\"යුරෝ සලකුණ\",lsquo:\"වමේ තනි උපුටා දක්වීම \",rsquo:\"දකුණේ තනි උපුටා දක්වීම \",ldquo:\"වමේ දිත්ව  උපුටා දක්වීම \",rdquo:\"දකුණේ දිත්ව  උපුටා දක්වීම \",ndash:\"En dash\",mdash:\"Em dash\",iexcl:\"යටිකුරු හර්ෂදී \",cent:\"Cent sign\",pound:\"Pound sign\",curren:\"මුල්‍යමය \",yen:\"යෙන් \",brvbar:\"Broken bar\",sect:\"තෙරේම් \",uml:\"Diaeresis\",copy:\"පිටපත් අයිතිය \",ordf:\"දර්ශකය\",laquo:\"Left-pointing double angle quotation mark\",not:\"සලකුණක් නොවේ\",reg:\"සලකුණක් ලියාපදිංචි කිරීම\",\nmacr:\"මුද්‍රිත \",deg:\"සලකුණේ \",sup2:\"උඩු ලකුණු දෙක\",sup3:\"Superscript three\",acute:\"Acute accent\",micro:\"Micro sign\",para:\"Pilcrow sign\",middot:\"Middle dot\",cedil:\"Cedilla\",sup1:\"Superscript one\",ordm:\"Masculine ordinal indicator\",raquo:\"Right-pointing double angle quotation mark\",frac14:\"Vulgar fraction one quarter\",frac12:\"Vulgar fraction one half\",frac34:\"Vulgar fraction three quarters\",iquest:\"Inverted question mark\",Agrave:\"Latin capital letter A with grave accent\",Aacute:\"Latin capital letter A with acute accent\",\nAcirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",Iacute:\"Latin capital letter I with acute accent\",\nIcirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"Latin capital letter O with grave accent\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"Multiplication sign\",Oslash:\"Latin capital letter O with stroke\",Ugrave:\"Latin capital letter U with grave accent\",\nUacute:\"Latin capital letter U with acute accent\",Ucirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Latin small letter sharp s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",aring:\"Latin small letter a with ring above\",\naelig:\"Latin small letter æ\",ccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",ntilde:\"Latin small letter n with tilde\",\nograve:\"Latin small letter o with grave accent\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"Division sign\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",yacute:\"Latin small letter y with acute accent\",\nthorn:\"Latin small letter thorn\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",trade:\"Trade mark sign\",9658:\"Black right-pointing pointer\",\nbull:\"Bullet\",rarr:\"Rightwards arrow\",rArr:\"Rightwards double arrow\",hArr:\"Left right double arrow\",diams:\"Black diamond suit\",asymp:\"Almost equal to\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/sk.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"sk\",{euro:\"Znak eura\",lsquo:\"Ľavá jednoduchá úvodzovka\",rsquo:\"Pravá jednoduchá úvodzovka\",ldquo:\"Pravá dvojitá úvodzovka\",rdquo:\"Pravá dvojitá úvodzovka\",ndash:\"En pomlčka\",mdash:\"Em pomlčka\",iexcl:\"Obrátený výkričník\",cent:\"Znak centu\",pound:\"Znak libry\",curren:\"Znak meny\",yen:\"Znak jenu\",brvbar:\"Prerušená zvislá čiara\",sect:\"Znak odseku\",uml:\"Prehláska\",copy:\"Znak copyrightu\",ordf:\"Ženský indikátor rodu\",laquo:\"Znak dvojitých lomených úvodzoviek vľavo\",not:\"Logistický zápor\",\nreg:\"Znak registrácie\",macr:\"Pomlčka nad\",deg:\"Znak stupňa\",sup2:\"Dvojka ako horný index\",sup3:\"Trojka ako horný index\",acute:\"Dĺžeň\",micro:\"Znak mikro\",para:\"Znak odstavca\",middot:\"Bodka uprostred\",cedil:\"Chvost vľavo\",sup1:\"Jednotka ako horný index\",ordm:\"Mužský indikátor rodu\",raquo:\"Znak dvojitých lomených úvodzoviek vpravo\",frac14:\"Obyčajný zlomok jedna štvrtina\",frac12:\"Obyčajný zlomok jedna polovica\",frac34:\"Obyčajný zlomok tri štvrtiny\",iquest:\"Otočený otáznik\",Agrave:\"Veľké písmeno latinky A s accentom\",\nAacute:\"Veľké písmeno latinky A s dĺžňom\",Acirc:\"Veľké písmeno latinky A s mäkčeňom\",Atilde:\"Veľké písmeno latinky A s tildou\",Auml:\"Veľké písmeno latinky A s dvoma bodkami\",Aring:\"Veľké písmeno latinky A s krúžkom nad\",AElig:\"Veľké písmeno latinky Æ\",Ccedil:\"Veľké písmeno latinky C s chvostom vľavo\",Egrave:\"Veľké písmeno latinky E s accentom\",Eacute:\"Veľké písmeno latinky E s dĺžňom\",Ecirc:\"Veľké písmeno latinky E s mäkčeňom\",Euml:\"Veľké písmeno latinky E s dvoma bodkami\",Igrave:\"Veľké písmeno latinky I s accentom\",\nIacute:\"Veľké písmeno latinky I s dĺžňom\",Icirc:\"Veľké písmeno latinky I s mäkčeňom\",Iuml:\"Veľké písmeno latinky I s dvoma bodkami\",ETH:\"Veľké písmeno latinky Eth\",Ntilde:\"Veľké písmeno latinky N s tildou\",Ograve:\"Veľké písmeno latinky O s accentom\",Oacute:\"Veľké písmeno latinky O s dĺžňom\",Ocirc:\"Veľké písmeno latinky O s mäkčeňom\",Otilde:\"Veľké písmeno latinky O s tildou\",Ouml:\"Veľké písmeno latinky O s dvoma bodkami\",times:\"Znak násobenia\",Oslash:\"Veľké písmeno latinky O preškrtnuté\",Ugrave:\"Veľké písmeno latinky U s accentom\",\nUacute:\"Veľké písmeno latinky U s dĺžňom\",Ucirc:\"Veľké písmeno latinky U s mäkčeňom\",Uuml:\"Veľké písmeno latinky U s dvoma bodkami\",Yacute:\"Veľké písmeno latinky Y s dĺžňom\",THORN:\"Veľké písmeno latinky Thorn\",szlig:\"Malé písmeno latinky ostré s\",agrave:\"Malé písmeno latinky a s accentom\",aacute:\"Malé písmeno latinky a s dĺžňom\",acirc:\"Malé písmeno latinky a s mäkčeňom\",atilde:\"Malé písmeno latinky a s tildou\",auml:\"Malé písmeno latinky a s dvoma bodkami\",aring:\"Malé písmeno latinky a s krúžkom nad\",\naelig:\"Malé písmeno latinky æ\",ccedil:\"Malé písmeno latinky c s chvostom vľavo\",egrave:\"Malé písmeno latinky e s accentom\",eacute:\"Malé písmeno latinky e s dĺžňom\",ecirc:\"Malé písmeno latinky e s mäkčeňom\",euml:\"Malé písmeno latinky e s dvoma bodkami\",igrave:\"Malé písmeno latinky i s accentom\",iacute:\"Malé písmeno latinky i s dĺžňom\",icirc:\"Malé písmeno latinky i s mäkčeňom\",iuml:\"Malé písmeno latinky i s dvoma bodkami\",eth:\"Malé písmeno latinky eth\",ntilde:\"Malé písmeno latinky n s tildou\",ograve:\"Malé písmeno latinky o s accentom\",\noacute:\"Malé písmeno latinky o s dĺžňom\",ocirc:\"Malé písmeno latinky o s mäkčeňom\",otilde:\"Malé písmeno latinky o s tildou\",ouml:\"Malé písmeno latinky o s dvoma bodkami\",divide:\"Znak delenia\",oslash:\"Malé písmeno latinky o preškrtnuté\",ugrave:\"Malé písmeno latinky u s accentom\",uacute:\"Malé písmeno latinky u s dĺžňom\",ucirc:\"Malé písmeno latinky u s mäkčeňom\",uuml:\"Malé písmeno latinky u s dvoma bodkami\",yacute:\"Malé písmeno latinky y s dĺžňom\",thorn:\"Malé písmeno latinky thorn\",yuml:\"Malé písmeno latinky y s dvoma bodkami\",\nOElig:\"Veľká ligatúra latinky OE\",oelig:\"Malá ligatúra latinky OE\",372:\"Veľké písmeno latinky W s mäkčeňom\",374:\"Veľké písmeno latinky Y s mäkčeňom\",373:\"Malé písmeno latinky w s mäkčeňom\",375:\"Malé písmeno latinky y s mäkčeňom\",sbquo:\"Dolná jednoduchá 9-úvodzovka\",8219:\"Horná jednoduchá otočená 9-úvodzovka\",bdquo:\"Dolná dvojitá 9-úvodzovka\",hellip:\"Trojbodkový úvod\",trade:\"Znak ibchodnej značky\",9658:\"Čierny ukazovateľ smerujúci vpravo\",bull:\"Kruh\",rarr:\"Šípka vpravo\",rArr:\"Dvojitá šipka vpravo\",\nhArr:\"Dvojitá šipka vľavo a vpravo\",diams:\"Čierne piky\",asymp:\"Skoro sa rovná\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/sl.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"sl\",{euro:\"Evro znak\",lsquo:\"Levi enojni narekovaj\",rsquo:\"Desni enojni narekovaj\",ldquo:\"Levi dvojni narekovaj\",rdquo:\"Desni dvojni narekovaj\",ndash:\"En pomišljaj\",mdash:\"Em pomišljaj\",iexcl:\"Obrnjen klicaj\",cent:\"Cent znak\",pound:\"Funt znak\",curren:\"Znak valute\",yen:\"Jen znak\",brvbar:\"Zlomljena črta\",sect:\"Znak oddelka\",uml:\"Diaeresis\",copy:\"Znak avtorskih pravic\",ordf:\"Ženski zaporedni kazalnik\",laquo:\"Levi obrnjen dvojni kotni narekovaj\",not:\"Ne znak\",reg:\"Registrirani znak\",\nmacr:\"Macron\",deg:\"Znak stopinj\",sup2:\"Nadpisano dva\",sup3:\"Nadpisano tri\",acute:\"Ostrivec\",micro:\"Mikro znak\",para:\"Pilcrow znak\",middot:\"Sredinska pika\",cedil:\"Cedilla\",sup1:\"Nadpisano ena\",ordm:\"Moški zaporedni kazalnik\",raquo:\"Desno obrnjen dvojni kotni narekovaj\",frac14:\"Ena četrtina\",frac12:\"Ena polovica\",frac34:\"Tri četrtine\",iquest:\"Obrnjen vprašaj\",Agrave:\"Velika latinska črka A s krativcem\",Aacute:\"Velika latinska črka A z ostrivcem\",Acirc:\"Velika latinska črka A s strešico\",Atilde:\"Velika latinska črka A z tildo\",\nAuml:\"Velika latinska črka A z diaeresis-om\",Aring:\"Velika latinska črka A z obročem\",AElig:\"Velika latinska črka Æ\",Ccedil:\"Velika latinska črka C s cedillo\",Egrave:\"Velika latinska črka E s krativcem\",Eacute:\"Velika latinska črka E z ostrivcem\",Ecirc:\"Velika latinska črka E s strešico\",Euml:\"Velika latinska črka E z diaeresis-om\",Igrave:\"Velika latinska črka I s krativcem\",Iacute:\"Velika latinska črka I z ostrivcem\",Icirc:\"Velika latinska črka I s strešico\",Iuml:\"Velika latinska črka I z diaeresis-om\",\nETH:\"Velika latinska črka Eth\",Ntilde:\"Velika latinska črka N s tildo\",Ograve:\"Velika latinska črka O s krativcem\",Oacute:\"Velika latinska črka O z ostrivcem\",Ocirc:\"Velika latinska črka O s strešico\",Otilde:\"Velika latinska črka O s tildo\",Ouml:\"Velika latinska črka O z diaeresis-om\",times:\"Znak za množenje\",Oslash:\"Velika prečrtana latinska črka O\",Ugrave:\"Velika latinska črka U s krativcem\",Uacute:\"Velika latinska črka U z ostrivcem\",Ucirc:\"Velika latinska črka U s strešico\",Uuml:\"Velika latinska črka U z diaeresis-om\",\nYacute:\"Velika latinska črka Y z ostrivcem\",THORN:\"Velika latinska črka Thorn\",szlig:\"Mala ostra latinska črka s\",agrave:\"Mala latinska črka a s krativcem\",aacute:\"Mala latinska črka a z ostrivcem\",acirc:\"Mala latinska črka a s strešico\",atilde:\"Mala latinska črka a s tildo\",auml:\"Mala latinska črka a z diaeresis-om\",aring:\"Mala latinska črka a z obročem\",aelig:\"Mala latinska črka æ\",ccedil:\"Mala latinska črka c s cedillo\",egrave:\"Mala latinska črka e s krativcem\",eacute:\"Mala latinska črka e z ostrivcem\",\necirc:\"Mala latinska črka e s strešico\",euml:\"Mala latinska črka e z diaeresis-om\",igrave:\"Mala latinska črka i s krativcem\",iacute:\"Mala latinska črka i z ostrivcem\",icirc:\"Mala latinska črka i s strešico\",iuml:\"Mala latinska črka i z diaeresis-om\",eth:\"Mala latinska črka eth\",ntilde:\"Mala latinska črka n s tildo\",ograve:\"Mala latinska črka o s krativcem\",oacute:\"Mala latinska črka o z ostrivcem\",ocirc:\"Mala latinska črka o s strešico\",otilde:\"Mala latinska črka o s tildo\",ouml:\"Mala latinska črka o z diaeresis-om\",\ndivide:\"Znak za deljenje\",oslash:\"Mala prečrtana latinska črka o\",ugrave:\"Mala latinska črka u s krativcem\",uacute:\"Mala latinska črka u z ostrivcem\",ucirc:\"Mala latinska črka u s strešico\",uuml:\"Mala latinska črka u z diaeresis-om\",yacute:\"Mala latinska črka y z ostrivcem\",thorn:\"Mala latinska črka thorn\",yuml:\"Mala latinska črka y z diaeresis-om\",OElig:\"Velika latinska ligatura OE\",oelig:\"Mala latinska ligatura oe\",372:\"Velika latinska črka W s strešico\",374:\"Velika latinska črka Y s strešico\",\n373:\"Mala latinska črka w s strešico\",375:\"Mala latinska črka y s strešico\",sbquo:\"Enojni nizki-9 narekovaj\",8219:\"Enojni visoki-obrnjen-9 narekovaj\",bdquo:\"Dvojni nizki-9 narekovaj\",hellip:\"Horizontalni izpust\",trade:\"Znak blagovne znamke\",9658:\"Črni desno-usmerjen kazalec\",bull:\"Krogla\",rarr:\"Desno-usmerjena puščica\",rArr:\"Desno-usmerjena dvojna puščica\",hArr:\"Leva in desna dvojna puščica\",diams:\"Črna kara\",asymp:\"Skoraj enako\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/sq.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"sq\",{euro:\"Shenja e Euros\",lsquo:\"Thonjëza majtas me një vi\",rsquo:\"Thonjëza djathtas me një vi\",ldquo:\"Thonjëza majtas\",rdquo:\"Thonjëza djathtas\",ndash:\"En viza lidhëse\",mdash:\"Em viza lidhëse\",iexcl:\"Pikëçuditëse e përmbysur\",cent:\"Shenja e Centit\",pound:\"Shejna e Funtit\",curren:\"Shenja e valutës\",yen:\"Shenja e Jenit\",brvbar:\"Viza e këputur\",sect:\"Shenja e pjesës\",uml:\"Diaeresis\",copy:\"Shenja e të drejtave të kopjimit\",ordf:\"Feminine ordinal indicator\",laquo:\"Left-pointing double angle quotation mark\",\nnot:\"Nuk ka shenjë\",reg:\"Shenja e të regjistruarit\",macr:\"Macron\",deg:\"Shenja e shkallës\",sup2:\"Super-skripta dy\",sup3:\"Super-skripta tre\",acute:\"Theks i mprehtë\",micro:\"Shjenja e Mikros\",para:\"Pilcrow sign\",middot:\"Pika e Mesme\",cedil:\"Hark nën shkronja\",sup1:\"Super-skripta një\",ordm:\"Masculine ordinal indicator\",raquo:\"Right-pointing double angle quotation mark\",frac14:\"Thyesa një të katrat\",frac12:\"Thyesa një të dytat\",frac34:\"Thyesa tre të katrat\",iquest:\"Pikëpyetje e përmbysur\",Agrave:\"Shkronja e madhe latine A me theks të rëndë\",\nAacute:\"Shkronja e madhe latine A me theks akute\",Acirc:\"Shkronja e madhe latine A me theks lakor\",Atilde:\"Shkronja e madhe latine A me tildë\",Auml:\"Shkronja e madhe latine A me dy pika\",Aring:\"Shkronja e madhe latine A me unazë mbi\",AElig:\"Shkronja e madhe latine Æ\",Ccedil:\"Shkronja e madhe latine C me hark poshtë\",Egrave:\"Shkronja e madhe latine E me theks të rëndë\",Eacute:\"Shkronja e madhe latine E me theks akute\",Ecirc:\"Shkronja e madhe latine E me theks lakor\",Euml:\"Shkronja e madhe latine E me dy pika\",\nIgrave:\"Shkronja e madhe latine I me theks të rëndë\",Iacute:\"Shkronja e madhe latine I me theks akute\",Icirc:\"Shkronja e madhe latine I me theks lakor\",Iuml:\"Shkronja e madhe latine I me dy pika\",ETH:\"Shkronja e madhe latine Eth\",Ntilde:\"Shkronja e madhe latine N me tildë\",Ograve:\"Shkronja e madhe latine O me theks të rëndë\",Oacute:\"Shkronja e madhe latine O me theks akute\",Ocirc:\"Shkronja e madhe latine O me theks lakor\",Otilde:\"Shkronja e madhe latine O me tildë\",Ouml:\"Shkronja e madhe latine O me dy pika\",\ntimes:\"Shenja e shumëzimit\",Oslash:\"Shkronja e madhe latine O me vizë në mes\",Ugrave:\"Shkronja e madhe latine U me theks të rëndë\",Uacute:\"Shkronja e madhe latine U me theks akute\",Ucirc:\"Shkronja e madhe latine U me theks lakor\",Uuml:\"Shkronja e madhe latine U me dy pika\",Yacute:\"Shkronja e madhe latine Y me theks akute\",THORN:\"Shkronja e madhe latine Thorn\",szlig:\"Shkronja e vogë latine s e mprehtë\",agrave:\"Shkronja e vogë latine a me theks të rëndë\",aacute:\"Shkronja e vogë latine a me theks të mprehtë\",\nacirc:\"Shkronja e vogël latine a me theks lakor\",atilde:\"Shkronja e vogël latine a me tildë\",auml:\"Shkronja e vogël latine a me dy pika\",aring:\"Shkronja e vogë latine a me unazë mbi\",aelig:\"Shkronja e vogë latine æ\",ccedil:\"Shkronja e vogël latine c me hark poshtë\",egrave:\"Shkronja e vogë latine e me theks të rëndë\",eacute:\"Shkronja e vogë latine e me theks të mprehtë\",ecirc:\"Shkronja e vogël latine e me theks lakor\",euml:\"Shkronja e vogël latine e me dy pika\",igrave:\"Shkronja e vogë latine i me theks të rëndë\",\niacute:\"Shkronja e vogë latine i me theks të mprehtë\",icirc:\"Shkronja e vogël latine i me theks lakor\",iuml:\"Shkronja e vogël latine i me dy pika\",eth:\"Shkronja e vogë latine eth\",ntilde:\"Shkronja e vogël latine n me tildë\",ograve:\"Shkronja e vogë latine o me theks të rëndë\",oacute:\"Shkronja e vogë latine o me theks të mprehtë\",ocirc:\"Shkronja e vogël latine o me theks lakor\",otilde:\"Shkronja e vogël latine o me tildë\",ouml:\"Shkronja e vogël latine o me dy pika\",divide:\"Shenja ndarëse\",oslash:\"Shkronja e vogël latine o me vizë në mes\",\nugrave:\"Shkronja e vogë latine u me theks të rëndë\",uacute:\"Shkronja e vogë latine u me theks të mprehtë\",ucirc:\"Shkronja e vogël latine u me theks lakor\",uuml:\"Shkronja e vogël latine u me dy pika\",yacute:\"Shkronja e vogë latine y me theks të mprehtë\",thorn:\"Shkronja e vogël latine thorn\",yuml:\"Shkronja e vogël latine y me dy pika\",OElig:\"Shkronja e madhe e bashkuar latine OE\",oelig:\"Shkronja e vogël e bashkuar latine oe\",372:\"Shkronja e madhe latine W me theks lakor\",374:\"Shkronja e madhe latine Y me theks lakor\",\n373:\"Shkronja e vogël latine w me theks lakor\",375:\"Shkronja e vogël latine y me theks lakor\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",trade:\"Shenja e Simbolit Tregtarë\",9658:\"Black right-pointing pointer\",bull:\"Pulla\",rarr:\"Shigjeta djathtas\",rArr:\"Shenja të dyfishta djathtas\",hArr:\"Shigjeta e dyfishë majtas-djathtas\",diams:\"Black diamond suit\",asymp:\"Gati e barabar me\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/sv.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"sv\",{euro:\"Eurotecken\",lsquo:\"Enkelt vänster citattecken\",rsquo:\"Enkelt höger citattecken\",ldquo:\"Dubbelt vänster citattecken\",rdquo:\"Dubbelt höger citattecken\",ndash:\"Snedstreck\",mdash:\"Långt tankstreck\",iexcl:\"Inverterad utropstecken\",cent:\"Centtecken\",pound:\"Pundtecken\",curren:\"Valutatecken\",yen:\"Yentecken\",brvbar:\"Brutet lodrätt streck\",sect:\"Paragraftecken\",uml:\"Diaeresis\",copy:\"Upphovsrättstecken\",ordf:\"Feminit ordningstalsindikator\",laquo:\"Vänsterställt dubbelt vinkelcitationstecken\",\nnot:\"Icke-tecken\",reg:\"Registrerad\",macr:\"Macron\",deg:\"Grader\",sup2:\"Upphöjt två\",sup3:\"Upphöjt tre\",acute:\"Akut accent\",micro:\"Mikrotecken\",para:\"Alinea\",middot:\"Centrerad prick\",cedil:\"Cedilj\",sup1:\"Upphöjt en\",ordm:\"Maskulina ordningsändelsen\",raquo:\"Högerställt dubbelt vinkelcitationstecken\",frac14:\"Bråktal - en kvart\",frac12:\"Bråktal - en halv\",frac34:\"Bråktal - tre fjärdedelar\",iquest:\"Inverterat frågetecken\",Agrave:\"Stort A med grav accent\",Aacute:\"Stort A med akutaccent\",Acirc:\"Stort A med circumflex\",\nAtilde:\"Stort A med tilde\",Auml:\"Stort A med diaresis\",Aring:\"Stort A med ring ovan\",AElig:\"Stort Æ\",Ccedil:\"Stort C med cedilj\",Egrave:\"Stort E med grav accent\",Eacute:\"Stort E med aktuaccent\",Ecirc:\"Stort E med circumflex\",Euml:\"Stort E med diaeresis\",Igrave:\"Stort I med grav accent\",Iacute:\"Stort I med akutaccent\",Icirc:\"Stort I med circumflex\",Iuml:\"Stort I med diaeresis\",ETH:\"Stort Eth\",Ntilde:\"Stort N med tilde\",Ograve:\"Stort O med grav accent\",Oacute:\"Stort O med aktuaccent\",Ocirc:\"Stort O med circumflex\",\nOtilde:\"Stort O med tilde\",Ouml:\"Stort O med diaeresis\",times:\"Multiplicera\",Oslash:\"Stor Ø\",Ugrave:\"Stort U med grav accent\",Uacute:\"Stort U med akutaccent\",Ucirc:\"Stort U med circumflex\",Uuml:\"Stort U med diaeresis\",Yacute:\"Stort Y med akutaccent\",THORN:\"Stort Thorn\",szlig:\"Litet dubbel-s/Eszett\",agrave:\"Litet a med grav accent\",aacute:\"Litet a med akutaccent\",acirc:\"Litet a med circumflex\",atilde:\"Litet a med tilde\",auml:\"Litet a med diaeresis\",aring:\"Litet a med ring ovan\",aelig:\"Bokstaven æ\",\nccedil:\"Litet c med cedilj\",egrave:\"Litet e med grav accent\",eacute:\"Litet e med akutaccent\",ecirc:\"Litet e med circumflex\",euml:\"Litet e med diaeresis\",igrave:\"Litet i med grav accent\",iacute:\"Litet i med akutaccent\",icirc:\"LItet i med circumflex\",iuml:\"Litet i med didaeresis\",eth:\"Litet eth\",ntilde:\"Litet n med tilde\",ograve:\"LItet o med grav accent\",oacute:\"LItet o med akutaccent\",ocirc:\"Litet o med circumflex\",otilde:\"LItet o med tilde\",ouml:\"Litet o med diaeresis\",divide:\"Division\",oslash:\"ø\",\nugrave:\"Litet u med grav accent\",uacute:\"Litet u med akutaccent\",ucirc:\"LItet u med circumflex\",uuml:\"Litet u med diaeresis\",yacute:\"Litet y med akutaccent\",thorn:\"Litet thorn\",yuml:\"Litet y med diaeresis\",OElig:\"Stor ligatur av OE\",oelig:\"Liten ligatur av oe\",372:\"Stort W med circumflex\",374:\"Stort Y med circumflex\",373:\"Litet w med circumflex\",375:\"Litet y med circumflex\",sbquo:\"Enkelt lågt 9-citationstecken\",8219:\"Enkelt högt bakvänt 9-citationstecken\",bdquo:\"Dubbelt lågt 9-citationstecken\",hellip:\"Horisontellt uteslutningstecken\",\ntrade:\"Varumärke\",9658:\"Svart högervänd pekare\",bull:\"Listpunkt\",rarr:\"Högerpil\",rArr:\"Dubbel högerpil\",hArr:\"Dubbel vänsterpil\",diams:\"Svart ruter\",asymp:\"Ungefär lika med\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/th.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"th\",{euro:\"Euro sign\",lsquo:\"Left single quotation mark\",rsquo:\"Right single quotation mark\",ldquo:\"Left double quotation mark\",rdquo:\"Right double quotation mark\",ndash:\"En dash\",mdash:\"Em dash\",iexcl:\"Inverted exclamation mark\",cent:\"Cent sign\",pound:\"Pound sign\",curren:\"สัญลักษณ์สกุลเงิน\",yen:\"สัญลักษณ์เงินเยน\",brvbar:\"Broken bar\",sect:\"Section sign\",uml:\"Diaeresis\",copy:\"Copyright sign\",ordf:\"Feminine ordinal indicator\",laquo:\"Left-pointing double angle quotation mark\",\nnot:\"Not sign\",reg:\"Registered sign\",macr:\"Macron\",deg:\"Degree sign\",sup2:\"Superscript two\",sup3:\"Superscript three\",acute:\"Acute accent\",micro:\"Micro sign\",para:\"Pilcrow sign\",middot:\"Middle dot\",cedil:\"Cedilla\",sup1:\"Superscript one\",ordm:\"Masculine ordinal indicator\",raquo:\"Right-pointing double angle quotation mark\",frac14:\"Vulgar fraction one quarter\",frac12:\"Vulgar fraction one half\",frac34:\"Vulgar fraction three quarters\",iquest:\"Inverted question mark\",Agrave:\"Latin capital letter A with grave accent\",\nAacute:\"Latin capital letter A with acute accent\",Acirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",\nIacute:\"Latin capital letter I with acute accent\",Icirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"Latin capital letter O with grave accent\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"Multiplication sign\",Oslash:\"Latin capital letter O with stroke\",\nUgrave:\"Latin capital letter U with grave accent\",Uacute:\"Latin capital letter U with acute accent\",Ucirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Latin small letter sharp s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",\naring:\"Latin small letter a with ring above\",aelig:\"Latin small letter æ\",ccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",\nntilde:\"Latin small letter n with tilde\",ograve:\"Latin small letter o with grave accent\",oacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"Division sign\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",\nyacute:\"Latin small letter y with acute accent\",thorn:\"Latin small letter thorn\",yuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",\ntrade:\"Trade mark sign\",9658:\"Black right-pointing pointer\",bull:\"สัญลักษณ์หัวข้อย่อย\",rarr:\"Rightwards arrow\",rArr:\"Rightwards double arrow\",hArr:\"Left right double arrow\",diams:\"Black diamond suit\",asymp:\"Almost equal to\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/tr.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"tr\",{euro:\"Euro işareti\",lsquo:\"Sol tek tırnak işareti\",rsquo:\"Sağ tek tırnak işareti\",ldquo:\"Sol çift tırnak işareti\",rdquo:\"Sağ çift tırnak işareti\",ndash:\"En tire\",mdash:\"Em tire\",iexcl:\"Ters ünlem işareti\",cent:\"Cent işareti\",pound:\"Pound işareti\",curren:\"Para birimi işareti\",yen:\"Yen işareti\",brvbar:\"Kırık bar\",sect:\"Bölüm işareti\",uml:\"İki sesli harfin ayrılması\",copy:\"Telif hakkı işareti\",ordf:\"Dişil sıralı gösterge\",laquo:\"Sol-işaret çift açı tırnak işareti\",\nnot:\"Not işareti\",reg:\"Kayıtlı işareti\",macr:\"Makron\",deg:\"Derece işareti\",sup2:\"İkili üstsimge\",sup3:\"Üçlü üstsimge\",acute:\"Aksan işareti\",micro:\"Mikro işareti\",para:\"Pilcrow işareti\",middot:\"Orta nokta\",cedil:\"Kedilla\",sup1:\"Üstsimge\",ordm:\"Eril sıralı gösterge\",raquo:\"Sağ işaret çift açı tırnak işareti\",frac14:\"Bayağı kesrin dörtte biri\",frac12:\"Bayağı kesrin bir yarım\",frac34:\"Bayağı kesrin dörtte üç\",iquest:\"Ters soru işareti\",Agrave:\"Aksanlı latin harfi\",Aacute:\"Aşırı aksanıyla Latin harfi\",\nAcirc:\"Çarpık Latin harfi\",Atilde:\"Tilde latin harfi\",Auml:\"Sesli harf ayrılımlıı latin harfi\",Aring:\"Halkalı latin büyük A harfi\",AElig:\"Latin büyük Æ harfi\",Ccedil:\"Latin büyük C harfi ile kedilla\",Egrave:\"Aksanlı latin büyük E harfi\",Eacute:\"Aşırı vurgulu latin büyük E harfi\",Ecirc:\"Çarpık latin büyük E harfi\",Euml:\"Sesli harf ayrılımlıı latin büyük E harfi\",Igrave:\"Aksanlı latin büyük I harfi\",Iacute:\"Aşırı aksanlı latin büyük I harfi\",Icirc:\"Çarpık latin büyük I harfi\",Iuml:\"Sesli harf ayrılımlıı latin büyük I harfi\",\nETH:\"Latin büyük Eth harfi\",Ntilde:\"Tildeli latin büyük N harfi\",Ograve:\"Aksanlı latin büyük O harfi\",Oacute:\"Aşırı aksanlı latin büyük O harfi\",Ocirc:\"Çarpık latin büyük O harfi\",Otilde:\"Tildeli latin büyük O harfi\",Ouml:\"Sesli harf ayrılımlı latin büyük O harfi\",times:\"Çarpma işareti\",Oslash:\"Vurgulu latin büyük O harfi\",Ugrave:\"Aksanlı latin büyük U harfi\",Uacute:\"Aşırı aksanlı latin büyük U harfi\",Ucirc:\"Çarpık latin büyük U harfi\",Uuml:\"Sesli harf ayrılımlı latin büyük U harfi\",Yacute:\"Aşırı aksanlı latin büyük Y harfi\",\nTHORN:\"Latin büyük Thorn harfi\",szlig:\"Latin küçük keskin s harfi\",agrave:\"Aksanlı latin küçük a harfi\",aacute:\"Aşırı aksanlı latin küçük a harfi\",acirc:\"Çarpık latin küçük a harfi\",atilde:\"Tildeli latin küçük a harfi\",auml:\"Sesli harf ayrılımlı latin küçük a harfi\",aring:\"Halkalı latin küçük a harfi\",aelig:\"Latin büyük æ harfi\",ccedil:\"Kedillalı latin küçük c harfi\",egrave:\"Aksanlı latin küçük e harfi\",eacute:\"Aşırı aksanlı latin küçük e harfi\",ecirc:\"Çarpık latin küçük e harfi\",euml:\"Sesli harf ayrılımlı latin küçük e harfi\",\nigrave:\"Aksanlı latin küçük i harfi\",iacute:\"Aşırı aksanlı latin küçük i harfi\",icirc:\"Çarpık latin küçük i harfi\",iuml:\"Sesli harf ayrılımlı latin küçük i harfi\",eth:\"Latin küçük eth harfi\",ntilde:\"Tildeli latin küçük n harfi\",ograve:\"Aksanlı latin küçük o harfi\",oacute:\"Aşırı aksanlı latin küçük o harfi\",ocirc:\"Çarpık latin küçük o harfi\",otilde:\"Tildeli latin küçük o harfi\",ouml:\"Sesli harf ayrılımlı latin küçük o harfi\",divide:\"Bölme işareti\",oslash:\"Vurgulu latin küçük o harfi\",ugrave:\"Aksanlı latin küçük u harfi\",\nuacute:\"Aşırı aksanlı latin küçük u harfi\",ucirc:\"Çarpık latin küçük u harfi\",uuml:\"Sesli harf ayrılımlı latin küçük u harfi\",yacute:\"Aşırı aksanlı latin küçük y harfi\",thorn:\"Latin küçük thorn harfi\",yuml:\"Sesli harf ayrılımlı latin küçük y harfi\",OElig:\"Latin büyük bağlı OE harfi\",oelig:\"Latin küçük bağlı oe harfi\",372:\"Çarpık latin büyük W harfi\",374:\"Çarpık latin büyük Y harfi\",373:\"Çarpık latin küçük w harfi\",375:\"Çarpık latin küçük y harfi\",sbquo:\"Tek düşük-9 tırnak işareti\",8219:\"Tek yüksek-ters-9 tırnak işareti\",\nbdquo:\"Çift düşük-9 tırnak işareti\",hellip:\"Yatay elips\",trade:\"Marka tescili işareti\",9658:\"Siyah sağ işaret işaretçisi\",bull:\"Koyu nokta\",rarr:\"Sağa doğru ok\",rArr:\"Sağa doğru çift ok\",hArr:\"Sol, sağ çift ok\",diams:\"Siyah elmas takımı\",asymp:\"Hemen hemen eşit\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/tt.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"tt\",{euro:\"Евро тамгасы\",lsquo:\"Сул бер иңле куштырнаклар\",rsquo:\"Уң бер иңле куштырнаклар\",ldquo:\"Сул ике иңле куштырнаклар\",rdquo:\"Уң ике иңле куштырнаклар\",ndash:\"Кыска сызык\",mdash:\"Озын сызык\",iexcl:\"Әйләндерелгән өндәү билгесе\",cent:\"Цент тамгасы\",pound:\"Фунт тамгасы\",curren:\"Акча берәмлеге тамгасы\",yen:\"Иена тамгасы\",brvbar:\"Broken bar\",sect:\"Параграф билгесе\",uml:\"Диерезис\",copy:\"Хокук иясе булу билгесе\",ordf:\"Feminine ordinal indicator\",laquo:\"Ачылучы чыршысыман җәя\",\nnot:\"Юклык ишарəсе\",reg:\"Теркәләнгән булу билгесе\",macr:\"Макрон\",deg:\"Градус билгесе\",sup2:\"Икенче өске индекс\",sup3:\"Өченче өске индекс\",acute:\"Басым билгесе\",micro:\"Микро билгесе\",para:\"Параграф билгесе\",middot:\"Уртадагы нокта\",cedil:\"Седиль\",sup1:\"Беренче өске индекс\",ordm:\"Masculine ordinal indicator\",raquo:\"Ябылучы чыршысыман җәя\",frac14:\"Гади дүрттән бер билгесе\",frac12:\"Гади икедән бер билгесе\",frac34:\"Гади дүрттән өч билгесе\",iquest:\"Әйләндерелгән өндәү билгесе\",Agrave:\"Гравис белән латин A баш хәрефе\",\nAacute:\"Басым билгесе белән латин A баш хәрефе\",Acirc:\"Циркумфлекс белән латин A баш хәрефе\",Atilde:\"Тильда белән латин A баш хәрефе\",Auml:\"Диерезис белән латин A баш хәрефе\",Aring:\"Өстендә боҗра булган латин A баш хәрефе\",AElig:\"Латин Æ баш хәрефе\",Ccedil:\"Седиль белән латин C баш хәрефе\",Egrave:\"Гравис белән латин E баш хәрефе\",Eacute:\"Басым билгесе белән латин E баш хәрефе\",Ecirc:\"Циркумфлекс белән латин E баш хәрефе\",Euml:\"Диерезис белән латин E баш хәрефе\",Igrave:\"Гравис белән латин I баш хәрефе\",\nIacute:\"Басым билгесе белән латин I баш хәрефе\",Icirc:\"Циркумфлекс белән латин I баш хәрефе\",Iuml:\"Диерезис белән латин I баш хәрефе\",ETH:\"Латин Eth баш хәрефе\",Ntilde:\"Тильда белән латин N баш хәрефе\",Ograve:\"Гравис белән латин O баш хәрефе\",Oacute:\"Басым билгесе белән латин O баш хәрефе\",Ocirc:\"Циркумфлекс белән латин O баш хәрефе\",Otilde:\"Тильда белән латин O баш хәрефе\",Ouml:\"Диерезис белән латин O баш хәрефе\",times:\"Тапкырлау билгесе\",Oslash:\"Сызык белән латин O баш хәрефе\",Ugrave:\"Гравис белән латин U баш хәрефе\",\nUacute:\"Басым билгесе белән латин U баш хәрефе\",Ucirc:\"Циркумфлекс белән латин U баш хәрефе\",Uuml:\"Диерезис белән латин U баш хәрефе\",Yacute:\"Басым билгесе белән латин Y баш хәрефе\",THORN:\"Латин Thorn баш хәрефе\",szlig:\"Латин beta юл хәрефе\",agrave:\"Гравис белән латин a юл хәрефе\",aacute:\"Басым билгесе белән латин a юл хәрефе\",acirc:\"Циркумфлекс белән латин a юл хәрефе\",atilde:\"Тильда белән латин a юл хәрефе\",auml:\"Диерезис белән латин a юл хәрефе\",aring:\"Өстендә боҗра булган латин a юл хәрефе\",aelig:\"Латин æ юл хәрефе\",\nccedil:\"Седиль белән латин c юл хәрефе\",egrave:\"Гравис белән латин e юл хәрефе\",eacute:\"Басым билгесе белән латин e юл хәрефе\",ecirc:\"Циркумфлекс белән латин e юл хәрефе\",euml:\"Диерезис белән латин e юл хәрефе\",igrave:\"Гравис белән латин i юл хәрефе\",iacute:\"Басым билгесе белән латин i юл хәрефе\",icirc:\"Циркумфлекс белән латин i юл хәрефе\",iuml:\"Диерезис белән латин i юл хәрефе\",eth:\"Латин eth юл хәрефе\",ntilde:\"Тильда белән латин n юл хәрефе\",ograve:\"Гравис белән латин o юл хәрефе\",oacute:\"Басым билгесе белән латин o юл хәрефе\",\nocirc:\"Циркумфлекс белән латин o юл хәрефе\",otilde:\"Тильда белән латин o юл хәрефе\",ouml:\"Диерезис белән латин o юл хәрефе\",divide:\"Бүлү билгесе\",oslash:\"Сызык белән латин o юл хәрефе\",ugrave:\"Гравис белән латин u юл хәрефе\",uacute:\"Басым билгесе белән латин u юл хәрефе\",ucirc:\"Циркумфлекс белән латин u юл хәрефе\",uuml:\"Диерезис белән латин u юл хәрефе\",yacute:\"Басым билгесе белән латин y юл хәрефе\",thorn:\"Латин thorn юл хәрефе\",yuml:\"Диерезис белән латин y юл хәрефе\",OElig:\"Латин лигатура OE баш хәрефе\",\noelig:\"Латин лигатура oe юл хәрефе\",372:\"Циркумфлекс белән латин W баш хәрефе\",374:\"Циркумфлекс белән латин Y баш хәрефе\",373:\"Циркумфлекс белән латин w юл хәрефе\",375:\"Циркумфлекс белән латин y юл хәрефе\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Ятма эллипс\",trade:\"Сәүдә маркасы билгесе\",9658:\"Black right-pointing pointer\",bull:\"Маркер\",rarr:\"Уң якка ук\",rArr:\"Уң якка икеләтә ук\",hArr:\"Ике якка икеләтә ук\",diams:\"Black diamond suit\",\nasymp:\"якынча\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/ug.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"ug\",{euro:\"ياۋرو بەلگىسى\",lsquo:\"يالاڭ پەش سول\",rsquo:\"يالاڭ پەش ئوڭ\",ldquo:\"قوش پەش سول\",rdquo:\"قوش پەش ئوڭ\",ndash:\"سىزىقچە\",mdash:\"سىزىق\",iexcl:\"ئۈندەش\",cent:\"تىيىن بەلگىسى\",pound:\"فوند ستېرلىڭ\",curren:\"پۇل بەلگىسى\",yen:\"ياپونىيە يىنى\",brvbar:\"ئۈزۈك بالداق\",sect:\"پاراگراف بەلگىسى\",uml:\"تاۋۇش ئايرىش بەلگىسى\",copy:\"نەشر ھوقۇقى بەلگىسى\",ordf:\"Feminine ordinal indicator\",laquo:\"قوش تىرناق سول\",not:\"غەيرى بەلگە\",reg:\"خەتلەتكەن تاۋار ماركىسى\",macr:\"سوزۇش بەلگىسى\",\ndeg:\"گىرادۇس بەلگىسى\",sup2:\"يۇقىرى ئىندېكىس 2\",sup3:\"يۇقىرى ئىندېكىس 3\",acute:\"ئۇرغۇ بەلگىسى\",micro:\"Micro sign\",para:\"ئابزاس بەلگىسى\",middot:\"ئوتتۇرا چېكىت\",cedil:\"ئاستىغا قوشۇلىدىغان بەلگە\",sup1:\"يۇقىرى ئىندېكىس 1\",ordm:\"Masculine ordinal indicator\",raquo:\"قوش تىرناق ئوڭ\",frac14:\"ئاددىي كەسىر تۆتتىن بىر\",frac12:\"ئاددىي كەسىر ئىككىدىن بىر\",frac34:\"ئاددىي كەسىر ئۈچتىن تۆرت\",iquest:\"Inverted question mark\",Agrave:\"Latin capital letter A with grave accent\",Aacute:\"Latin capital letter A with acute accent\",\nAcirc:\"Latin capital letter A with circumflex\",Atilde:\"Latin capital letter A with tilde\",Auml:\"Latin capital letter A with diaeresis\",Aring:\"Latin capital letter A with ring above\",AElig:\"Latin Capital letter Æ\",Ccedil:\"Latin capital letter C with cedilla\",Egrave:\"Latin capital letter E with grave accent\",Eacute:\"Latin capital letter E with acute accent\",Ecirc:\"Latin capital letter E with circumflex\",Euml:\"Latin capital letter E with diaeresis\",Igrave:\"Latin capital letter I with grave accent\",Iacute:\"Latin capital letter I with acute accent\",\nIcirc:\"Latin capital letter I with circumflex\",Iuml:\"Latin capital letter I with diaeresis\",ETH:\"Latin capital letter Eth\",Ntilde:\"Latin capital letter N with tilde\",Ograve:\"قوش پەش ئوڭ\",Oacute:\"Latin capital letter O with acute accent\",Ocirc:\"Latin capital letter O with circumflex\",Otilde:\"Latin capital letter O with tilde\",Ouml:\"Latin capital letter O with diaeresis\",times:\"Multiplication sign\",Oslash:\"Latin capital letter O with stroke\",Ugrave:\"Latin capital letter U with grave accent\",Uacute:\"Latin capital letter U with acute accent\",\nUcirc:\"Latin capital letter U with circumflex\",Uuml:\"Latin capital letter U with diaeresis\",Yacute:\"Latin capital letter Y with acute accent\",THORN:\"Latin capital letter Thorn\",szlig:\"Latin small letter sharp s\",agrave:\"Latin small letter a with grave accent\",aacute:\"Latin small letter a with acute accent\",acirc:\"Latin small letter a with circumflex\",atilde:\"Latin small letter a with tilde\",auml:\"Latin small letter a with diaeresis\",aring:\"Latin small letter a with ring above\",aelig:\"Latin small letter æ\",\nccedil:\"Latin small letter c with cedilla\",egrave:\"Latin small letter e with grave accent\",eacute:\"Latin small letter e with acute accent\",ecirc:\"Latin small letter e with circumflex\",euml:\"Latin small letter e with diaeresis\",igrave:\"Latin small letter i with grave accent\",iacute:\"Latin small letter i with acute accent\",icirc:\"Latin small letter i with circumflex\",iuml:\"Latin small letter i with diaeresis\",eth:\"Latin small letter eth\",ntilde:\"تىك موللاق سوئال بەلگىسى\",ograve:\"Latin small letter o with grave accent\",\noacute:\"Latin small letter o with acute accent\",ocirc:\"Latin small letter o with circumflex\",otilde:\"Latin small letter o with tilde\",ouml:\"Latin small letter o with diaeresis\",divide:\"بۆلۈش بەلگىسى\",oslash:\"Latin small letter o with stroke\",ugrave:\"Latin small letter u with grave accent\",uacute:\"Latin small letter u with acute accent\",ucirc:\"Latin small letter u with circumflex\",uuml:\"Latin small letter u with diaeresis\",yacute:\"Latin small letter y with acute accent\",thorn:\"Latin small letter thorn\",\nyuml:\"Latin small letter y with diaeresis\",OElig:\"Latin capital ligature OE\",oelig:\"Latin small ligature oe\",372:\"Latin capital letter W with circumflex\",374:\"Latin capital letter Y with circumflex\",373:\"Latin small letter w with circumflex\",375:\"Latin small letter y with circumflex\",sbquo:\"Single low-9 quotation mark\",8219:\"Single high-reversed-9 quotation mark\",bdquo:\"Double low-9 quotation mark\",hellip:\"Horizontal ellipsis\",trade:\"خەتلەتكەن تاۋار ماركىسى بەلگىسى\",9658:\"Black right-pointing pointer\",\nbull:\"Bullet\",rarr:\"ئوڭ يا ئوق\",rArr:\"ئوڭ قوش سىزىق يا ئوق\",hArr:\"ئوڭ سول قوش سىزىق يا ئوق\",diams:\"ئۇيۇل غىچ\",asymp:\"تەخمىنەن تەڭ\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/uk.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"uk\",{euro:\"Знак євро\",lsquo:\"Ліві одинарні лапки\",rsquo:\"Праві одинарні лапки\",ldquo:\"Ліві подвійні лапки\",rdquo:\"Праві подвійні лапки\",ndash:\"Середнє тире\",mdash:\"Довге тире\",iexcl:\"Перевернутий знак оклику\",cent:\"Знак цента\",pound:\"Знак фунта\",curren:\"Знак валюти\",yen:\"Знак єни\",brvbar:\"Переривчаста вертикальна лінія\",sect:\"Знак параграфу\",uml:\"Умлаут\",copy:\"Знак авторських прав\",ordf:\"Жіночий порядковий вказівник\",laquo:\"ліві вказівні подвійні кутові дужки\",\nnot:\"Заперечення\",reg:\"Знак охорони суміжних прав\",macr:\"Макрон\",deg:\"Знак градуса\",sup2:\"два у верхньому індексі\",sup3:\"три у верхньому індексі\",acute:\"Знак акута\",micro:\"Знак мікро\",para:\"Знак абзацу\",middot:\"Інтерпункт\",cedil:\"Седиль\",sup1:\"Один у верхньому індексі\",ordm:\"Чоловічий порядковий вказівник\",raquo:\"праві вказівні подвійні кутові дужки\",frac14:\"Одна четвертина\",frac12:\"Одна друга\",frac34:\"три четвертих\",iquest:\"Перевернутий знак питання\",Agrave:\"Велика латинська A з гравісом\",Aacute:\"Велика латинська А з акутом\",\nAcirc:\"Велика латинська А з циркумфлексом\",Atilde:\"Велика латинська А з тильдою\",Auml:\"Велике латинське А з умлаутом\",Aring:\"Велика латинська A з кільцем згори\",AElig:\"Велика латинська Æ\",Ccedil:\"Велика латинська C з седиллю\",Egrave:\"Велика латинська E з гравісом\",Eacute:\"Велика латинська E з акутом\",Ecirc:\"Велика латинська E з циркумфлексом\",Euml:\"Велика латинська А з умлаутом\",Igrave:\"Велика латинська I з гравісом\",Iacute:\"Велика латинська I з акутом\",Icirc:\"Велика латинська I з циркумфлексом\",\nIuml:\"Велика латинська І з умлаутом\",ETH:\"Велика латинська Eth\",Ntilde:\"Велика латинська N з тильдою\",Ograve:\"Велика латинська O з гравісом\",Oacute:\"Велика латинська O з акутом\",Ocirc:\"Велика латинська O з циркумфлексом\",Otilde:\"Велика латинська O з тильдою\",Ouml:\"Велика латинська О з умлаутом\",times:\"Знак множення\",Oslash:\"Велика латинська перекреслена O \",Ugrave:\"Велика латинська U з гравісом\",Uacute:\"Велика латинська U з акутом\",Ucirc:\"Велика латинська U з циркумфлексом\",Uuml:\"Велика латинська U з умлаутом\",\nYacute:\"Велика латинська Y з акутом\",THORN:\"Велика латинська Торн\",szlig:\"Мала латинська есцет\",agrave:\"Мала латинська a з гравісом\",aacute:\"Мала латинська a з акутом\",acirc:\"Мала латинська a з циркумфлексом\",atilde:\"Мала латинська a з тильдою\",auml:\"Мала латинська a з умлаутом\",aring:\"Мала латинська a з кільцем згори\",aelig:\"Мала латинська æ\",ccedil:\"Мала латинська C з седиллю\",egrave:\"Мала латинська e з гравісом\",eacute:\"Мала латинська e з акутом\",ecirc:\"Мала латинська e з циркумфлексом\",euml:\"Мала латинська e з умлаутом\",\nigrave:\"Мала латинська i з гравісом\",iacute:\"Мала латинська i з акутом\",icirc:\"Мала латинська i з циркумфлексом\",iuml:\"Мала латинська i з умлаутом\",eth:\"Мала латинська Eth\",ntilde:\"Мала латинська n з тильдою\",ograve:\"Мала латинська o з гравісом\",oacute:\"Мала латинська o з акутом\",ocirc:\"Мала латинська o з циркумфлексом\",otilde:\"Мала латинська o з тильдою\",ouml:\"Мала латинська o з умлаутом\",divide:\"Знак ділення\",oslash:\"Мала латинська перекреслена o\",ugrave:\"Мала латинська u з гравісом\",uacute:\"Мала латинська u з акутом\",\nucirc:\"Мала латинська u з циркумфлексом\",uuml:\"Мала латинська u з умлаутом\",yacute:\"Мала латинська y з акутом\",thorn:\"Мала латинська торн\",yuml:\"Мала латинська y з умлаутом\",OElig:\"Велика латинська лігатура OE\",oelig:\"Мала латинська лігатура oe\",372:\"Велика латинська W з циркумфлексом\",374:\"Велика латинська Y з циркумфлексом\",373:\"Мала латинська w з циркумфлексом\",375:\"Мала латинська y з циркумфлексом\",sbquo:\"Одиничні нижні лабки\",8219:\"Верхні одиничні обернені лабки\",bdquo:\"Подвійні нижні лабки\",\nhellip:\"Три крапки\",trade:\"Знак торгової марки\",9658:\"Чорний правий вказівник\",bull:\"Маркер списку\",rarr:\"Стрілка вправо\",rArr:\"Подвійна стрілка вправо\",hArr:\"Подвійна стрілка вліво-вправо\",diams:\"Чорний діамонт\",asymp:\"Наближено дорівнює\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/vi.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"vi\",{euro:\"Ký hiệu Euro\",lsquo:\"Dấu ngoặc đơn trái\",rsquo:\"Dấu ngoặc đơn phải\",ldquo:\"Dấu ngoặc đôi trái\",rdquo:\"Dấu ngoặc đôi phải\",ndash:\"Gạch ngang tiếng anh\",mdash:\"Gạch ngang Em\",iexcl:\"Chuyển đổi dấu chấm than\",cent:\"Ký tự tiền Mỹ\",pound:\"Ký tự tiền Anh\",curren:\"Ký tự tiền tệ\",yen:\"Ký tự tiền Yên Nhật\",brvbar:\"Thanh hỏng\",sect:\"Ký tự khu vực\",uml:\"Dấu tách đôi\",copy:\"Ký tự bản quyền\",ordf:\"Phần chỉ thị giống cái\",laquo:\"Chọn dấu ngoặc đôi trái\",not:\"Không có ký tự\",\nreg:\"Ký tự đăng ký\",macr:\"Dấu nguyên âm dài\",deg:\"Ký tự độ\",sup2:\"Chữ trồi lên trên dạng 2\",sup3:\"Chữ trồi lên trên dạng 3\",acute:\"Dấu trọng âm\",micro:\"Ký tự micro\",para:\"Ký tự đoạn văn\",middot:\"Dấu chấm tròn\",cedil:\"Dấu móc lưới\",sup1:\"Ký tự trồi lên cấp 1\",ordm:\"Ký tự biểu hiện giống đực\",raquo:\"Chọn dấu ngoặc đôi phải\",frac14:\"Tỉ lệ một phần tư\",frac12:\"Tỉ lệ một nửa\",frac34:\"Tỉ lệ ba phần tư\",iquest:\"Chuyển đổi dấu chấm hỏi\",Agrave:\"Ký tự la-tinh viết hoa A với dấu huyền\",Aacute:\"Ký tự la-tinh viết hoa A với dấu sắc\",\nAcirc:\"Ký tự la-tinh viết hoa A với dấu mũ\",Atilde:\"Ký tự la-tinh viết hoa A với dấu ngã\",Auml:\"Ký tự la-tinh viết hoa A với dấu hai chấm trên đầu\",Aring:\"Ký tự la-tinh viết hoa A với biểu tượng vòng tròn trên đầu\",AElig:\"Ký tự la-tinh viết hoa của Æ\",Ccedil:\"Ký tự la-tinh viết hoa C với dấu móc bên dưới\",Egrave:\"Ký tự la-tinh viết hoa E với dấu huyền\",Eacute:\"Ký tự la-tinh viết hoa E với dấu sắc\",Ecirc:\"Ký tự la-tinh viết hoa E với dấu mũ\",Euml:\"Ký tự la-tinh viết hoa E với dấu hai chấm trên đầu\",\nIgrave:\"Ký tự la-tinh viết hoa I với dấu huyền\",Iacute:\"Ký tự la-tinh viết hoa I với dấu sắc\",Icirc:\"Ký tự la-tinh viết hoa I với dấu mũ\",Iuml:\"Ký tự la-tinh viết hoa I với dấu hai chấm trên đầu\",ETH:\"Viết hoa của ký tự Eth\",Ntilde:\"Ký tự la-tinh viết hoa N với dấu ngã\",Ograve:\"Ký tự la-tinh viết hoa O với dấu huyền\",Oacute:\"Ký tự la-tinh viết hoa O với dấu sắc\",Ocirc:\"Ký tự la-tinh viết hoa O với dấu mũ\",Otilde:\"Ký tự la-tinh viết hoa O với dấu ngã\",Ouml:\"Ký tự la-tinh viết hoa O với dấu hai chấm trên đầu\",\ntimes:\"Ký tự phép toán nhân\",Oslash:\"Ký tự la-tinh viết hoa A với dấu ngã xuống\",Ugrave:\"Ký tự la-tinh viết hoa U với dấu huyền\",Uacute:\"Ký tự la-tinh viết hoa U với dấu sắc\",Ucirc:\"Ký tự la-tinh viết hoa U với dấu mũ\",Uuml:\"Ký tự la-tinh viết hoa U với dấu hai chấm trên đầu\",Yacute:\"Ký tự la-tinh viết hoa Y với dấu sắc\",THORN:\"Phần viết hoa của ký tự Thorn\",szlig:\"Ký tự viết nhỏ la-tinh của chữ s\",agrave:\"Ký tự la-tinh thường với dấu huyền\",aacute:\"Ký tự la-tinh thường với dấu sắc\",acirc:\"Ký tự la-tinh thường với dấu mũ\",\natilde:\"Ký tự la-tinh thường với dấu ngã\",auml:\"Ký tự la-tinh thường với dấu hai chấm trên đầu\",aring:\"Ký tự la-tinh viết thường với biểu tượng vòng tròn trên đầu\",aelig:\"Ký tự la-tinh viết thường của æ\",ccedil:\"Ký tự la-tinh viết thường của c với dấu móc bên dưới\",egrave:\"Ký tự la-tinh viết thường e với dấu huyền\",eacute:\"Ký tự la-tinh viết thường e với dấu sắc\",ecirc:\"Ký tự la-tinh viết thường e với dấu mũ\",euml:\"Ký tự la-tinh viết thường e với dấu hai chấm trên đầu\",igrave:\"Ký tự la-tinh viết thường i với dấu huyền\",\niacute:\"Ký tự la-tinh viết thường i với dấu sắc\",icirc:\"Ký tự la-tinh viết thường i với dấu mũ\",iuml:\"Ký tự la-tinh viết thường i với dấu hai chấm trên đầu\",eth:\"Ký tự la-tinh viết thường của eth\",ntilde:\"Ký tự la-tinh viết thường n với dấu ngã\",ograve:\"Ký tự la-tinh viết thường o với dấu huyền\",oacute:\"Ký tự la-tinh viết thường o với dấu sắc\",ocirc:\"Ký tự la-tinh viết thường o với dấu mũ\",otilde:\"Ký tự la-tinh viết thường o với dấu ngã\",ouml:\"Ký tự la-tinh viết thường o với dấu hai chấm trên đầu\",\ndivide:\"Ký hiệu phép tính chia\",oslash:\"Ký tự la-tinh viết thường o với dấu ngã\",ugrave:\"Ký tự la-tinh viết thường u với dấu huyền\",uacute:\"Ký tự la-tinh viết thường u với dấu sắc\",ucirc:\"Ký tự la-tinh viết thường u với dấu mũ\",uuml:\"Ký tự la-tinh viết thường u với dấu hai chấm trên đầu\",yacute:\"Ký tự la-tinh viết thường y với dấu sắc\",thorn:\"Ký tự la-tinh viết thường của chữ thorn\",yuml:\"Ký tự la-tinh viết thường y với dấu hai chấm trên đầu\",OElig:\"Ký tự la-tinh viết hoa gạch nối OE\",oelig:\"Ký tự la-tinh viết thường gạch nối OE\",\n372:\"Ký tự la-tinh viết hoa W với dấu mũ\",374:\"Ký tự la-tinh viết hoa Y với dấu mũ\",373:\"Ký tự la-tinh viết thường w với dấu mũ\",375:\"Ký tự la-tinh viết thường y với dấu mũ\",sbquo:\"Dấu ngoặc đơn thấp số-9\",8219:\"Dấu ngoặc đơn đảo ngược số-9\",bdquo:\"Gấp đôi dấu ngoặc đơn số-9\",hellip:\"Tĩnh dược chiều ngang\",trade:\"Ký tự thương hiệu\",9658:\"Ký tự trỏ về hướng bên phải màu đen\",bull:\"Ký hiệu\",rarr:\"Mũi tên hướng bên phải\",rArr:\"Mũi tên hướng bên phải dạng đôi\",hArr:\"Mũi tên hướng bên trái dạng đôi\",diams:\"Ký hiệu hình thoi\",\nasymp:\"Gần bằng với\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"zh-cn\",{euro:\"欧元符号\",lsquo:\"左单引号\",rsquo:\"右单引号\",ldquo:\"左双引号\",rdquo:\"右双引号\",ndash:\"短划线\",mdash:\"长划线\",iexcl:\"竖翻叹号\",cent:\"分币符号\",pound:\"英镑符号\",curren:\"货币符号\",yen:\"日元符号\",brvbar:\"间断条\",sect:\"节标记\",uml:\"分音符\",copy:\"版权所有标记\",ordf:\"阴性顺序指示符\",laquo:\"左指双尖引号\",not:\"非标记\",reg:\"注册标记\",macr:\"长音符\",deg:\"度标记\",sup2:\"上标二\",sup3:\"上标三\",acute:\"锐音符\",micro:\"微符\",para:\"段落标记\",middot:\"中间点\",cedil:\"下加符\",sup1:\"上标一\",ordm:\"阳性顺序指示符\",raquo:\"右指双尖引号\",frac14:\"普通分数四分之一\",frac12:\"普通分数二分之一\",frac34:\"普通分数四分之三\",iquest:\"竖翻问号\",\nAgrave:\"带抑音符的拉丁文大写字母 A\",Aacute:\"带锐音符的拉丁文大写字母 A\",Acirc:\"带扬抑符的拉丁文大写字母 A\",Atilde:\"带颚化符的拉丁文大写字母 A\",Auml:\"带分音符的拉丁文大写字母 A\",Aring:\"带上圆圈的拉丁文大写字母 A\",AElig:\"拉丁文大写字母 Ae\",Ccedil:\"带下加符的拉丁文大写字母 C\",Egrave:\"带抑音符的拉丁文大写字母 E\",Eacute:\"带锐音符的拉丁文大写字母 E\",Ecirc:\"带扬抑符的拉丁文大写字母 E\",Euml:\"带分音符的拉丁文大写字母 E\",Igrave:\"带抑音符的拉丁文大写字母 I\",Iacute:\"带锐音符的拉丁文大写字母 I\",Icirc:\"带扬抑符的拉丁文大写字母 I\",Iuml:\"带分音符的拉丁文大写字母 I\",ETH:\"拉丁文大写字母 Eth\",Ntilde:\"带颚化符的拉丁文大写字母 N\",Ograve:\"带抑音符的拉丁文大写字母 O\",Oacute:\"带锐音符的拉丁文大写字母 O\",Ocirc:\"带扬抑符的拉丁文大写字母 O\",Otilde:\"带颚化符的拉丁文大写字母 O\",\nOuml:\"带分音符的拉丁文大写字母 O\",times:\"乘号\",Oslash:\"带粗线的拉丁文大写字母 O\",Ugrave:\"带抑音符的拉丁文大写字母 U\",Uacute:\"带锐音符的拉丁文大写字母 U\",Ucirc:\"带扬抑符的拉丁文大写字母 U\",Uuml:\"带分音符的拉丁文大写字母 U\",Yacute:\"带抑音符的拉丁文大写字母 Y\",THORN:\"拉丁文大写字母 Thorn\",szlig:\"拉丁文小写字母清音 S\",agrave:\"带抑音符的拉丁文小写字母 A\",aacute:\"带锐音符的拉丁文小写字母 A\",acirc:\"带扬抑符的拉丁文小写字母 A\",atilde:\"带颚化符的拉丁文小写字母 A\",auml:\"带分音符的拉丁文小写字母 A\",aring:\"带上圆圈的拉丁文小写字母 A\",aelig:\"拉丁文小写字母 Ae\",ccedil:\"带下加符的拉丁文小写字母 C\",egrave:\"带抑音符的拉丁文小写字母 E\",eacute:\"带锐音符的拉丁文小写字母 E\",ecirc:\"带扬抑符的拉丁文小写字母 E\",euml:\"带分音符的拉丁文小写字母 E\",igrave:\"带抑音符的拉丁文小写字母 I\",\niacute:\"带锐音符的拉丁文小写字母 I\",icirc:\"带扬抑符的拉丁文小写字母 I\",iuml:\"带分音符的拉丁文小写字母 I\",eth:\"拉丁文小写字母 Eth\",ntilde:\"带颚化符的拉丁文小写字母 N\",ograve:\"带抑音符的拉丁文小写字母 O\",oacute:\"带锐音符的拉丁文小写字母 O\",ocirc:\"带扬抑符的拉丁文小写字母 O\",otilde:\"带颚化符的拉丁文小写字母 O\",ouml:\"带分音符的拉丁文小写字母 O\",divide:\"除号\",oslash:\"带粗线的拉丁文小写字母 O\",ugrave:\"带抑音符的拉丁文小写字母 U\",uacute:\"带锐音符的拉丁文小写字母 U\",ucirc:\"带扬抑符的拉丁文小写字母 U\",uuml:\"带分音符的拉丁文小写字母 U\",yacute:\"带抑音符的拉丁文小写字母 Y\",thorn:\"拉丁文小写字母 Thorn\",yuml:\"带分音符的拉丁文小写字母 Y\",OElig:\"拉丁文大写连字 Oe\",oelig:\"拉丁文小写连字 Oe\",372:\"带扬抑符的拉丁文大写字母 W\",374:\"带扬抑符的拉丁文大写字母 Y\",\n373:\"带扬抑符的拉丁文小写字母 W\",375:\"带扬抑符的拉丁文小写字母 Y\",sbquo:\"单下 9 形引号\",8219:\"单高横翻 9 形引号\",bdquo:\"双下 9 形引号\",hellip:\"水平省略号\",trade:\"商标标志\",9658:\"实心右指指针\",bull:\"加重号\",rarr:\"向右箭头\",rArr:\"向右双线箭头\",hArr:\"左右双线箭头\",diams:\"实心方块纸牌\",asymp:\"约等于\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/lang/zh.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.plugins.setLang(\"specialchar\",\"zh\",{euro:\"歐元符號\",lsquo:\"左單引號\",rsquo:\"右單引號\",ldquo:\"左雙引號\",rdquo:\"右雙引號\",ndash:\"短破折號\",mdash:\"長破折號\",iexcl:\"倒置的驚嘆號\",cent:\"美分符號\",pound:\"英鎊符號\",curren:\"貨幣符號\",yen:\"日圓符號\",brvbar:\"破折號\",sect:\"章節符號\",uml:\"分音符號\",copy:\"版權符號\",ordf:\"雌性符號\",laquo:\"左雙角括號\",not:\"Not 符號\",reg:\"註冊商標符號\",macr:\"長音符號\",deg:\"度數符號\",sup2:\"上標字 2\",sup3:\"上標字 3\",acute:\"尖音符號\",micro:\"微\",para:\"段落符號\",middot:\"中間點\",cedil:\"字母 C 下面的尾型符號 \",sup1:\"上標\",ordm:\"雄性符號\",raquo:\"右雙角括號\",frac14:\"四分之一符號\",frac12:\"二分之一符號\",frac34:\"四分之三符號\",\niquest:\"倒置的問號\",Agrave:\"拉丁大寫字母 A 帶抑音符號\",Aacute:\"拉丁大寫字母 A 帶尖音符號\",Acirc:\"拉丁大寫字母 A 帶揚抑符\",Atilde:\"拉丁大寫字母 A 帶波浪號\",Auml:\"拉丁大寫字母 A 帶分音符號\",Aring:\"拉丁大寫字母 A 帶上圓圈\",AElig:\"拉丁大寫字母 Æ\",Ccedil:\"拉丁大寫字母 C 帶下尾符號\",Egrave:\"拉丁大寫字母 E 帶抑音符號\",Eacute:\"拉丁大寫字母 E 帶尖音符號\",Ecirc:\"拉丁大寫字母 E 帶揚抑符\",Euml:\"拉丁大寫字母 E 帶分音符號\",Igrave:\"拉丁大寫字母 I 帶抑音符號\",Iacute:\"拉丁大寫字母 I 帶尖音符號\",Icirc:\"拉丁大寫字母 I 帶揚抑符\",Iuml:\"拉丁大寫字母 I 帶分音符號\",ETH:\"拉丁大寫字母 Eth\",Ntilde:\"拉丁大寫字母 N 帶波浪號\",Ograve:\"拉丁大寫字母 O 帶抑音符號\",Oacute:\"拉丁大寫字母 O 帶尖音符號\",Ocirc:\"拉丁大寫字母 O 帶揚抑符\",Otilde:\"拉丁大寫字母 O 帶波浪號\",\nOuml:\"拉丁大寫字母 O 帶分音符號\",times:\"乘號\",Oslash:\"拉丁大寫字母 O 帶粗線符號\",Ugrave:\"拉丁大寫字母 U 帶抑音符號\",Uacute:\"拉丁大寫字母 U 帶尖音符號\",Ucirc:\"拉丁大寫字母 U 帶揚抑符\",Uuml:\"拉丁大寫字母 U 帶分音符號\",Yacute:\"拉丁大寫字母 Y 帶尖音符號\",THORN:\"拉丁大寫字母 Thorn\",szlig:\"拉丁小寫字母 s\",agrave:\"拉丁小寫字母 a 帶抑音符號\",aacute:\"拉丁小寫字母 a 帶尖音符號\",acirc:\"拉丁小寫字母 a 帶揚抑符\",atilde:\"拉丁小寫字母 a 帶波浪號\",auml:\"拉丁小寫字母 a 帶分音符號\",aring:\"拉丁小寫字母 a 帶上圓圈\",aelig:\"拉丁小寫字母 æ\",ccedil:\"拉丁小寫字母 c 帶下尾符號\",egrave:\"拉丁小寫字母 e 帶抑音符號\",eacute:\"拉丁小寫字母 e 帶尖音符號\",ecirc:\"拉丁小寫字母 e 帶揚抑符\",euml:\"拉丁小寫字母 e 帶分音符號\",igrave:\"拉丁小寫字母 i 帶抑音符號\",\niacute:\"拉丁小寫字母 i 帶尖音符號\",icirc:\"拉丁小寫字母 i 帶揚抑符\",iuml:\"拉丁小寫字母 i 帶分音符號\",eth:\"拉丁小寫字母 eth\",ntilde:\"拉丁小寫字母 n 帶波浪號\",ograve:\"拉丁小寫字母 o 帶抑音符號\",oacute:\"拉丁小寫字母 o 帶尖音符號\",ocirc:\"拉丁小寫字母 o 帶揚抑符\",otilde:\"拉丁小寫字母 o 帶波浪號\",ouml:\"拉丁小寫字母 o 帶分音符號\",divide:\"除號\",oslash:\"拉丁小寫字母 o 帶粗線符號\",ugrave:\"拉丁小寫字母 u 帶抑音符號\",uacute:\"拉丁小寫字母 u 帶尖音符號\",ucirc:\"拉丁小寫字母 u 帶揚抑符\",uuml:\"拉丁小寫字母 u 帶分音符號\",yacute:\"拉丁小寫字母 y 帶尖音符號\",thorn:\"拉丁小寫字母 thorn\",yuml:\"拉丁小寫字母 y 帶分音符號\",OElig:\"拉丁大寫字母 OE\",oelig:\"拉丁小寫字母 oe\",372:\"拉丁大寫字母 W 帶揚抑符\",374:\"拉丁大寫字母 Y 帶揚抑符\",373:\"拉丁小寫字母 w 帶揚抑符\",\n375:\"拉丁小寫字母 y 帶揚抑符\",sbquo:\"低 9 單引號\",8219:\"高 9 反轉單引號\",bdquo:\"低 9 雙引號\",hellip:\"水平刪節號\",trade:\"商標符號\",9658:\"黑色向右指箭號\",bull:\"項目符號\",rarr:\"向右箭號\",rArr:\"向右雙箭號\",hArr:\"左右雙箭號\",diams:\"黑鑽套裝\",asymp:\"約等於\"});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/specialchar/dialogs/specialchar.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.dialog.add(\"specialchar\",function(k){var e,n=k.lang.specialchar,m=function(c){var b;c=c.data?c.data.getTarget():new CKEDITOR.dom.element(c);\"a\"==c.getName()&&(b=c.getChild(0).getHtml())&&(c.removeClass(\"cke_light_background\"),e.hide(),c=k.document.createElement(\"span\"),c.setHtml(b),k.insertText(c.getText()))},p=CKEDITOR.tools.addFunction(m),l,g=function(c,b){var a;b=b||c.data.getTarget();\"span\"==b.getName()&&(b=b.getParent());if(\"a\"==b.getName()&&(a=b.getChild(0).getHtml())){l&&d(null,l);\nvar f=e.getContentElement(\"info\",\"htmlPreview\").getElement();e.getContentElement(\"info\",\"charPreview\").getElement().setHtml(a);f.setHtml(CKEDITOR.tools.htmlEncode(a));b.getParent().addClass(\"cke_light_background\");l=b}},d=function(c,b){b=b||c.data.getTarget();\"span\"==b.getName()&&(b=b.getParent());\"a\"==b.getName()&&(e.getContentElement(\"info\",\"charPreview\").getElement().setHtml(\"\\x26nbsp;\"),e.getContentElement(\"info\",\"htmlPreview\").getElement().setHtml(\"\\x26nbsp;\"),b.getParent().removeClass(\"cke_light_background\"),\nl=void 0)},q=CKEDITOR.tools.addFunction(function(c){c=new CKEDITOR.dom.event(c);var b=c.getTarget(),a;a=c.getKeystroke();var f=\"rtl\"==k.lang.dir;switch(a){case 38:if(a=b.getParent().getParent().getPrevious())a=a.getChild([b.getParent().getIndex(),0]),a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 40:(a=b.getParent().getParent().getNext())&&(a=a.getChild([b.getParent().getIndex(),0]))&&1==a.type&&(a.focus(),d(null,b),g(null,a));c.preventDefault();break;case 32:m({data:c});c.preventDefault();\nbreak;case f?37:39:if(a=b.getParent().getNext())a=a.getChild(0),1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);else if(a=b.getParent().getParent().getNext())(a=a.getChild([0,0]))&&1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);break;case f?39:37:(a=b.getParent().getPrevious())?(a=a.getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):(a=b.getParent().getParent().getPrevious())?(a=a.getLast().getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):\nd(null,b)}});return{title:n.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){for(var c=this.definition.charColumns,b=k.config.specialChars,a=CKEDITOR.tools.getNextId()+\"_specialchar_table_label\",f=['\\x3ctable role\\x3d\"listbox\" aria-labelledby\\x3d\"'+a+'\" style\\x3d\"width: 320px; height: 100%; border-collapse: separate;\" align\\x3d\"center\" cellspacing\\x3d\"2\" cellpadding\\x3d\"2\" border\\x3d\"0\"\\x3e'],d=0,g=b.length,h,e;d<g;){f.push('\\x3ctr role\\x3d\"presentation\"\\x3e');\nfor(var l=0;l<c;l++,d++){if(h=b[d]){h instanceof Array?(e=h[1],h=h[0]):(e=h.replace(\"\\x26\",\"\").replace(\";\",\"\").replace(\"#\",\"\"),e=n[e]||h);var m=\"cke_specialchar_label_\"+d+\"_\"+CKEDITOR.tools.getNextNumber();f.push('\\x3ctd class\\x3d\"cke_dark_background\" style\\x3d\"cursor: default\" role\\x3d\"presentation\"\\x3e\\x3ca href\\x3d\"javascript: void(0);\" role\\x3d\"option\" aria-posinset\\x3d\"'+(d+1)+'\"',' aria-setsize\\x3d\"'+g+'\"',' aria-labelledby\\x3d\"'+m+'\"',' class\\x3d\"cke_specialchar\" title\\x3d\"',CKEDITOR.tools.htmlEncode(e),\n'\" onkeydown\\x3d\"CKEDITOR.tools.callFunction( '+q+', event, this )\" onclick\\x3d\"CKEDITOR.tools.callFunction('+p+', this); return false;\" tabindex\\x3d\"-1\"\\x3e\\x3cspan style\\x3d\"margin: 0 auto;cursor: inherit\"\\x3e'+h+'\\x3c/span\\x3e\\x3cspan class\\x3d\"cke_voice_label\" id\\x3d\"'+m+'\"\\x3e'+e+\"\\x3c/span\\x3e\\x3c/a\\x3e\")}else f.push('\\x3ctd class\\x3d\"cke_dark_background\"\\x3e\\x26nbsp;');f.push(\"\\x3c/td\\x3e\")}f.push(\"\\x3c/tr\\x3e\")}f.push(\"\\x3c/tbody\\x3e\\x3c/table\\x3e\",'\\x3cspan id\\x3d\"'+a+'\" class\\x3d\"cke_voice_label\"\\x3e'+\nn.options+\"\\x3c/span\\x3e\");this.getContentElement(\"info\",\"charContainer\").getElement().setHtml(f.join(\"\"))},contents:[{id:\"info\",label:k.lang.common.generalTab,title:k.lang.common.generalTab,padding:0,align:\"top\",elements:[{type:\"hbox\",align:\"top\",widths:[\"320px\",\"90px\"],children:[{type:\"html\",id:\"charContainer\",html:\"\",onMouseover:g,onMouseout:d,focus:function(){var c=this.getElement().getElementsByTag(\"a\").getItem(0);setTimeout(function(){c.focus();g(null,c)},0)},onShow:function(){var c=this.getElement().getChild([0,\n0,0,0,0]);setTimeout(function(){c.focus();g(null,c)},0)},onLoad:function(c){e=c.sender}},{type:\"hbox\",align:\"top\",widths:[\"100%\"],children:[{type:\"vbox\",align:\"top\",children:[{type:\"html\",html:\"\\x3cdiv\\x3e\\x3c/div\\x3e\"},{type:\"html\",id:\"charPreview\",className:\"cke_dark_background\",style:\"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;\",html:\"\\x3cdiv\\x3e\\x26nbsp;\\x3c/div\\x3e\"},{type:\"html\",\nid:\"htmlPreview\",className:\"cke_dark_background\",style:\"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;\",html:\"\\x3cdiv\\x3e\\x26nbsp;\\x3c/div\\x3e\"}]}]}]}]}]}});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/table/dialogs/table.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n(function(){function v(a){for(var f=0,n=0,m=0,p,e=a.$.rows.length;m<e;m++){p=a.$.rows[m];for(var d=f=0,c,b=p.cells.length;d<b;d++)c=p.cells[d],f+=c.colSpan;f>n&&(n=f)}return n}function r(a){return function(){var f=this.getValue(),f=!!(CKEDITOR.dialog.validate.integer()(f)&&0<f);f||(alert(a),this.select());return f}}function q(a,f){var n=function(e){return new CKEDITOR.dom.element(e,a.document)},q=a.editable(),p=a.plugins.dialogadvtab;return{title:a.lang.table.title,minWidth:310,minHeight:CKEDITOR.env.ie?\n310:280,onLoad:function(){var e=this,a=e.getContentElement(\"advanced\",\"advStyles\");if(a)a.on(\"change\",function(){var a=this.getStyle(\"width\",\"\"),b=e.getContentElement(\"info\",\"txtWidth\");b&&b.setValue(a,!0);a=this.getStyle(\"height\",\"\");(b=e.getContentElement(\"info\",\"txtHeight\"))&&b.setValue(a,!0)})},onShow:function(){var e=a.getSelection(),d=e.getRanges(),c,b=this.getContentElement(\"info\",\"txtRows\"),h=this.getContentElement(\"info\",\"txtCols\"),t=this.getContentElement(\"info\",\"txtWidth\"),g=this.getContentElement(\"info\",\n\"txtHeight\");\"tableProperties\"==f&&((e=e.getSelectedElement())&&e.is(\"table\")?c=e:0<d.length&&(CKEDITOR.env.webkit&&d[0].shrink(CKEDITOR.NODE_ELEMENT),c=a.elementPath(d[0].getCommonAncestor(!0)).contains(\"table\",1)),this._.selectedElement=c);c?(this.setupContent(c),b&&b.disable(),h&&h.disable()):(b&&b.enable(),h&&h.enable());t&&t.onChange();g&&g.onChange()},onOk:function(){var e=a.getSelection(),d=this._.selectedElement&&e.createBookmarks(),c=this._.selectedElement||n(\"table\"),b={};this.commitContent(b,\nc);if(b.info){b=b.info;if(!this._.selectedElement)for(var h=c.append(n(\"tbody\")),f=parseInt(b.txtRows,10)||0,g=parseInt(b.txtCols,10)||0,k=0;k<f;k++)for(var l=h.append(n(\"tr\")),m=0;m<g;m++)l.append(n(\"td\")).appendBogus();f=b.selHeaders;if(!c.$.tHead&&(\"row\"==f||\"both\"==f)){l=new CKEDITOR.dom.element(c.$.createTHead());h=c.getElementsByTag(\"tbody\").getItem(0);h=h.getElementsByTag(\"tr\").getItem(0);for(k=0;k<h.getChildCount();k++)g=h.getChild(k),g.type!=CKEDITOR.NODE_ELEMENT||g.data(\"cke-bookmark\")||\n(g.renameNode(\"th\"),g.setAttribute(\"scope\",\"col\"));l.append(h.remove())}if(null!==c.$.tHead&&\"row\"!=f&&\"both\"!=f){l=new CKEDITOR.dom.element(c.$.tHead);h=c.getElementsByTag(\"tbody\").getItem(0);for(m=h.getFirst();0<l.getChildCount();){h=l.getFirst();for(k=0;k<h.getChildCount();k++)g=h.getChild(k),g.type==CKEDITOR.NODE_ELEMENT&&(g.renameNode(\"td\"),g.removeAttribute(\"scope\"));h.insertBefore(m)}l.remove()}if(!this.hasColumnHeaders&&(\"col\"==f||\"both\"==f))for(l=0;l<c.$.rows.length;l++)g=new CKEDITOR.dom.element(c.$.rows[l].cells[0]),\ng.renameNode(\"th\"),g.setAttribute(\"scope\",\"row\");if(this.hasColumnHeaders&&\"col\"!=f&&\"both\"!=f)for(k=0;k<c.$.rows.length;k++)l=new CKEDITOR.dom.element(c.$.rows[k]),\"tbody\"==l.getParent().getName()&&(g=new CKEDITOR.dom.element(l.$.cells[0]),g.renameNode(\"td\"),g.removeAttribute(\"scope\"));b.txtHeight?c.setStyle(\"height\",b.txtHeight):c.removeStyle(\"height\");b.txtWidth?c.setStyle(\"width\",b.txtWidth):c.removeStyle(\"width\");c.getAttribute(\"style\")||c.removeAttribute(\"style\")}if(this._.selectedElement)try{e.selectBookmarks(d)}catch(p){}else a.insertElement(c),\nsetTimeout(function(){var e=new CKEDITOR.dom.element(c.$.rows[0].cells[0]),b=a.createRange();b.moveToPosition(e,CKEDITOR.POSITION_AFTER_START);b.select()},0)},contents:[{id:\"info\",label:a.lang.table.title,elements:[{type:\"hbox\",widths:[null,null],styles:[\"vertical-align:top\"],children:[{type:\"vbox\",padding:0,children:[{type:\"text\",id:\"txtRows\",\"default\":3,label:a.lang.table.rows,required:!0,controlStyle:\"width:5em\",validate:r(a.lang.table.invalidRows),setup:function(e){this.setValue(e.$.rows.length)},\ncommit:m},{type:\"text\",id:\"txtCols\",\"default\":2,label:a.lang.table.columns,required:!0,controlStyle:\"width:5em\",validate:r(a.lang.table.invalidCols),setup:function(e){this.setValue(v(e))},commit:m},{type:\"html\",html:\"\\x26nbsp;\"},{type:\"select\",id:\"selHeaders\",requiredContent:\"th\",\"default\":\"\",label:a.lang.table.headers,items:[[a.lang.table.headersNone,\"\"],[a.lang.table.headersRow,\"row\"],[a.lang.table.headersColumn,\"col\"],[a.lang.table.headersBoth,\"both\"]],setup:function(e){var a=this.getDialog();\na.hasColumnHeaders=!0;for(var c=0;c<e.$.rows.length;c++){var b=e.$.rows[c].cells[0];if(b&&\"th\"!=b.nodeName.toLowerCase()){a.hasColumnHeaders=!1;break}}null!==e.$.tHead?this.setValue(a.hasColumnHeaders?\"both\":\"row\"):this.setValue(a.hasColumnHeaders?\"col\":\"\")},commit:m},{type:\"text\",id:\"txtBorder\",requiredContent:\"table[border]\",\"default\":a.filter.check(\"table[border]\")?1:0,label:a.lang.table.border,controlStyle:\"width:3em\",validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidBorder),setup:function(a){this.setValue(a.getAttribute(\"border\")||\n\"\")},commit:function(a,d){this.getValue()?d.setAttribute(\"border\",this.getValue()):d.removeAttribute(\"border\")}},{id:\"cmbAlign\",type:\"select\",requiredContent:\"table[align]\",\"default\":\"\",label:a.lang.common.align,items:[[a.lang.common.notSet,\"\"],[a.lang.common.alignLeft,\"left\"],[a.lang.common.alignCenter,\"center\"],[a.lang.common.alignRight,\"right\"]],setup:function(a){this.setValue(a.getAttribute(\"align\")||\"\")},commit:function(a,d){this.getValue()?d.setAttribute(\"align\",this.getValue()):d.removeAttribute(\"align\")}}]},\n{type:\"vbox\",padding:0,children:[{type:\"hbox\",widths:[\"5em\"],children:[{type:\"text\",id:\"txtWidth\",requiredContent:\"table{width}\",controlStyle:\"width:5em\",label:a.lang.common.width,title:a.lang.common.cssLengthTooltip,\"default\":a.filter.check(\"table{width}\")?500>q.getSize(\"width\")?\"100%\":500:0,getValue:u,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace(\"%1\",a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement(\"advanced\",\"advStyles\");a&&\na.updateStyle(\"width\",this.getValue())},setup:function(a){a=a.getStyle(\"width\");this.setValue(a)},commit:m}]},{type:\"hbox\",widths:[\"5em\"],children:[{type:\"text\",id:\"txtHeight\",requiredContent:\"table{height}\",controlStyle:\"width:5em\",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,\"default\":\"\",getValue:u,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace(\"%1\",a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement(\"advanced\",\n\"advStyles\");a&&a.updateStyle(\"height\",this.getValue())},setup:function(a){(a=a.getStyle(\"height\"))&&this.setValue(a)},commit:m}]},{type:\"html\",html:\"\\x26nbsp;\"},{type:\"text\",id:\"txtCellSpace\",requiredContent:\"table[cellspacing]\",controlStyle:\"width:3em\",label:a.lang.table.cellSpace,\"default\":a.filter.check(\"table[cellspacing]\")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),setup:function(a){this.setValue(a.getAttribute(\"cellSpacing\")||\"\")},commit:function(a,d){this.getValue()?\nd.setAttribute(\"cellSpacing\",this.getValue()):d.removeAttribute(\"cellSpacing\")}},{type:\"text\",id:\"txtCellPad\",requiredContent:\"table[cellpadding]\",controlStyle:\"width:3em\",label:a.lang.table.cellPad,\"default\":a.filter.check(\"table[cellpadding]\")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute(\"cellPadding\")||\"\")},commit:function(a,d){this.getValue()?d.setAttribute(\"cellPadding\",this.getValue()):d.removeAttribute(\"cellPadding\")}}]}]},\n{type:\"html\",align:\"right\",html:\"\"},{type:\"vbox\",padding:0,children:[{type:\"text\",id:\"txtCaption\",requiredContent:\"caption\",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag(\"caption\");if(0<a.count()){a=a.getItem(0);var d=a.getFirst(CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT));d&&!d.equals(a.getBogus())?(this.disable(),this.setValue(a.getText())):(a=CKEDITOR.tools.trim(a.getText()),this.setValue(a))}},commit:function(e,d){if(this.isEnabled()){var c=this.getValue(),\nb=d.getElementsByTag(\"caption\");if(c)0<b.count()?(b=b.getItem(0),b.setHtml(\"\")):(b=new CKEDITOR.dom.element(\"caption\",a.document),d.getChildCount()?b.insertBefore(d.getFirst()):b.appendTo(d)),b.append(new CKEDITOR.dom.text(c,a.document));else if(0<b.count())for(c=b.count()-1;0<=c;c--)b.getItem(c).remove()}}},{type:\"text\",id:\"txtSummary\",bidi:!0,requiredContent:\"table[summary]\",label:a.lang.table.summary,setup:function(a){this.setValue(a.getAttribute(\"summary\")||\"\")},commit:function(a,d){this.getValue()?\nd.setAttribute(\"summary\",this.getValue()):d.removeAttribute(\"summary\")}}]}]},p&&p.createAdvancedTab(a,null,\"table\")]}}var u=CKEDITOR.tools.cssLength,m=function(a){var f=this.id;a.info||(a.info={});a.info[f]=this.getValue()};CKEDITOR.dialog.add(\"table\",function(a){return q(a,\"table\")});CKEDITOR.dialog.add(\"tableProperties\",function(a){return q(a,\"tableProperties\")})})();"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/tabletools/dialogs/tableCell.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nCKEDITOR.dialog.add(\"cellProperties\",function(g){function d(a){return function(b){for(var c=a(b[0]),d=1;d<b.length;d++)if(a(b[d])!==c){c=null;break}\"undefined\"!=typeof c&&(this.setValue(c),CKEDITOR.env.gecko&&\"select\"==this.type&&!c&&(this.getInputElement().$.selectedIndex=-1))}}function l(a){if(a=n.exec(a.getStyle(\"width\")||a.getAttribute(\"width\")))return a[2]}var h=g.lang.table,c=h.cell,e=g.lang.common,k=CKEDITOR.dialog.validate,n=/^(\\d+(?:\\.\\d+)?)(px|%)$/,f={type:\"html\",html:\"\\x26nbsp;\"},p=\"rtl\"==\ng.lang.dir,m=g.plugins.colordialog;return{title:c.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?450:410,minHeight:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?230:220,contents:[{id:\"info\",label:c.title,accessKey:\"I\",elements:[{type:\"hbox\",widths:[\"40%\",\"5%\",\"40%\"],children:[{type:\"vbox\",padding:0,children:[{type:\"hbox\",widths:[\"70%\",\"30%\"],children:[{type:\"text\",id:\"width\",width:\"100px\",label:e.width,validate:k.number(c.invalidWidth),onLoad:function(){var a=this.getDialog().getContentElement(\"info\",\n\"widthType\").getElement(),b=this.getInputElement(),c=b.getAttribute(\"aria-labelledby\");b.setAttribute(\"aria-labelledby\",[c,a.$.id].join(\" \"))},setup:d(function(a){var b=parseInt(a.getAttribute(\"width\"),10);a=parseInt(a.getStyle(\"width\"),10);return isNaN(a)?isNaN(b)?\"\":b:a}),commit:function(a){var b=parseInt(this.getValue(),10),c=this.getDialog().getValueOf(\"info\",\"widthType\")||l(a);isNaN(b)?a.removeStyle(\"width\"):a.setStyle(\"width\",b+c);a.removeAttribute(\"width\")},\"default\":\"\"},{type:\"select\",id:\"widthType\",\nlabel:g.lang.table.widthUnit,labelStyle:\"visibility:hidden\",\"default\":\"px\",items:[[h.widthPx,\"px\"],[h.widthPc,\"%\"]],setup:d(l)}]},{type:\"hbox\",widths:[\"70%\",\"30%\"],children:[{type:\"text\",id:\"height\",label:e.height,width:\"100px\",\"default\":\"\",validate:k.number(c.invalidHeight),onLoad:function(){var a=this.getDialog().getContentElement(\"info\",\"htmlHeightType\").getElement(),b=this.getInputElement(),c=b.getAttribute(\"aria-labelledby\");b.setAttribute(\"aria-labelledby\",[c,a.$.id].join(\" \"))},setup:d(function(a){var b=\nparseInt(a.getAttribute(\"height\"),10);a=parseInt(a.getStyle(\"height\"),10);return isNaN(a)?isNaN(b)?\"\":b:a}),commit:function(a){var b=parseInt(this.getValue(),10);isNaN(b)?a.removeStyle(\"height\"):a.setStyle(\"height\",CKEDITOR.tools.cssLength(b));a.removeAttribute(\"height\")}},{id:\"htmlHeightType\",type:\"html\",html:\"\\x3cbr /\\x3e\"+h.widthPx}]},f,{type:\"select\",id:\"wordWrap\",label:c.wordWrap,\"default\":\"yes\",items:[[c.yes,\"yes\"],[c.no,\"no\"]],setup:d(function(a){var b=a.getAttribute(\"noWrap\");if(\"nowrap\"==\na.getStyle(\"white-space\")||b)return\"no\"}),commit:function(a){\"no\"==this.getValue()?a.setStyle(\"white-space\",\"nowrap\"):a.removeStyle(\"white-space\");a.removeAttribute(\"noWrap\")}},f,{type:\"select\",id:\"hAlign\",label:c.hAlign,\"default\":\"\",items:[[e.notSet,\"\"],[e.alignLeft,\"left\"],[e.alignCenter,\"center\"],[e.alignRight,\"right\"],[e.alignJustify,\"justify\"]],setup:d(function(a){var b=a.getAttribute(\"align\");return a.getStyle(\"text-align\")||b||\"\"}),commit:function(a){var b=this.getValue();b?a.setStyle(\"text-align\",\nb):a.removeStyle(\"text-align\");a.removeAttribute(\"align\")}},{type:\"select\",id:\"vAlign\",label:c.vAlign,\"default\":\"\",items:[[e.notSet,\"\"],[e.alignTop,\"top\"],[e.alignMiddle,\"middle\"],[e.alignBottom,\"bottom\"],[c.alignBaseline,\"baseline\"]],setup:d(function(a){var b=a.getAttribute(\"vAlign\");a=a.getStyle(\"vertical-align\");switch(a){case \"top\":case \"middle\":case \"bottom\":case \"baseline\":break;default:a=\"\"}return a||b||\"\"}),commit:function(a){var b=this.getValue();b?a.setStyle(\"vertical-align\",b):a.removeStyle(\"vertical-align\");\na.removeAttribute(\"vAlign\")}}]},f,{type:\"vbox\",padding:0,children:[{type:\"select\",id:\"cellType\",label:c.cellType,\"default\":\"td\",items:[[c.data,\"td\"],[c.header,\"th\"]],setup:d(function(a){return a.getName()}),commit:function(a){a.renameNode(this.getValue())}},f,{type:\"text\",id:\"rowSpan\",label:c.rowSpan,\"default\":\"\",validate:k.integer(c.invalidRowSpan),setup:d(function(a){if((a=parseInt(a.getAttribute(\"rowSpan\"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute(\"rowSpan\",\nthis.getValue()):a.removeAttribute(\"rowSpan\")}},{type:\"text\",id:\"colSpan\",label:c.colSpan,\"default\":\"\",validate:k.integer(c.invalidColSpan),setup:d(function(a){if((a=parseInt(a.getAttribute(\"colSpan\"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute(\"colSpan\",this.getValue()):a.removeAttribute(\"colSpan\")}},f,{type:\"hbox\",padding:0,widths:[\"60%\",\"40%\"],children:[{type:\"text\",id:\"bgColor\",label:c.bgColor,\"default\":\"\",setup:d(function(a){var b=a.getAttribute(\"bgColor\");\nreturn a.getStyle(\"background-color\")||b}),commit:function(a){this.getValue()?a.setStyle(\"background-color\",this.getValue()):a.removeStyle(\"background-color\");a.removeAttribute(\"bgColor\")}},m?{type:\"button\",id:\"bgColorChoose\",\"class\":\"colorChooser\",label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle(\"vertical-align\",\"bottom\")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement(\"info\",\"bgColor\").setValue(a);this.focus()},this)}}:f]},f,\n{type:\"hbox\",padding:0,widths:[\"60%\",\"40%\"],children:[{type:\"text\",id:\"borderColor\",label:c.borderColor,\"default\":\"\",setup:d(function(a){var b=a.getAttribute(\"borderColor\");return a.getStyle(\"border-color\")||b}),commit:function(a){this.getValue()?a.setStyle(\"border-color\",this.getValue()):a.removeStyle(\"border-color\");a.removeAttribute(\"borderColor\")}},m?{type:\"button\",id:\"borderColorChoose\",\"class\":\"colorChooser\",label:c.chooseColor,style:(p?\"margin-right\":\"margin-left\")+\": 10px\",onLoad:function(){this.getElement().getParent().setStyle(\"vertical-align\",\n\"bottom\")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement(\"info\",\"borderColor\").setValue(a);this.focus()},this)}}:f]}]}]}]}],onShow:function(){this.cells=CKEDITOR.plugins.tabletools.getSelectedCells(this._.editor.getSelection());this.setupContent(this.cells)},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),c=this.cells,d=0;d<c.length;d++)this.commitContent(c[d]);this._.editor.forceNextSelectionCheck();a.selectBookmarks(b);this._.editor.selectionChange()},\nonLoad:function(){var a={};this.foreach(function(b){b.setup&&b.commit&&(b.setup=CKEDITOR.tools.override(b.setup,function(c){return function(){c.apply(this,arguments);a[b.id]=b.getValue()}}),b.commit=CKEDITOR.tools.override(b.commit,function(c){return function(){a[b.id]!==b.getValue()&&c.apply(this,arguments)}}))})}}});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/wsc/LICENSE.md",
    "content": "Software License Agreement\n==========================\n\n**CKEditor WSC Plugin**\nCopyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved.\n\nLicensed under the terms of any of the following licenses at your choice:\n\n*   GNU General Public License Version 2 or later (the \"GPL\"):\n    http://www.gnu.org/licenses/gpl.html\n\n*   GNU Lesser General Public License Version 2.1 or later (the \"LGPL\"):\n    http://www.gnu.org/licenses/lgpl.html\n\n*   Mozilla Public License Version 1.1 or later (the \"MPL\"):\n    http://www.mozilla.org/MPL/MPL-1.1.html\n\nYou are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled \"legal.txt\" in your version of this software, indicating your license choice.\n\nSources of Intellectual Property Included in this plugin\n--------------------------------------------------------\n\nWhere not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission.\n\nTrademarks\n----------\n\nCKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/wsc/README.md",
    "content": "CKEditor WebSpellChecker Plugin\n===============================\n\nThis plugin brings Web Spell Checker (WSC) into CKEditor.\n\nWSC is \"installation-less\", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution.\n\nInstallation\n------------\n\n1. Clone/copy this repository contents in a new \"plugins/wsc\" folder in your CKEditor installation.\n2. Enable the \"wsc\" plugin in the CKEditor configuration file (config.js):\n\n        config.extraPlugins = 'wsc';\n\nThat's all. WSC will appear on the editor toolbar and will be ready to use.\n\nLicense\n-------\n\nLicensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).\n\nSee LICENSE.md for more information.\n\nDeveloped in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/).\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/wsc/dialogs/ciframe.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<!--\nCopyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.html or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<title></title>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<script type=\"text/javascript\">\n\nfunction gup( name )\n{\n\tname = name.replace( /[\\[]/, '\\\\\\[' ).replace( /[\\]]/, '\\\\\\]' ) ;\n\tvar regexS = '[\\\\?&]' + name + '=([^&#]*)' ;\n\tvar regex = new RegExp( regexS ) ;\n\tvar results = regex.exec( window.location.href ) ;\n\n\tif ( results )\n\t\treturn results[ 1 ] ;\n\telse\n\t\treturn '' ;\n}\n\nvar interval;\n\nfunction sendData2Master()\n{\n\tvar destination = window.parent.parent ;\n\ttry\n\t{\n\t\tif ( destination.XDTMaster )\n\t\t{\n\t\t\tvar t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ;\n\t\t\twindow.clearInterval( interval ) ;\n\t\t}\n\t}\n\tcatch (e) {}\n}\n\nfunction OnMessage (event) {\n\t        var message = event.data;\n\t        var destination = window.parent.parent;\n\t        destination.XDTMaster.read( [ 'end', message, 'fpm' ] ) ;\n}\n\nfunction listenPostMessage() {\n    if (window.addEventListener) { // all browsers except IE before version 9\n            window.addEventListener (\"message\", OnMessage, false);\n    }else {\n            if (window.attachEvent) { // IE before version 9\n                        window.attachEvent(\"onmessage\", OnMessage);\n                }\n        }\n}\n\nfunction onLoad()\n{\n\tinterval = window.setInterval( sendData2Master, 100 );\n\tlistenPostMessage();\n}\n\n</script>\n</head>\n<body onload=\"onLoad()\"><p></p></body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/wsc/dialogs/tmpFrameset.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">\n<!--\nCopyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.html or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<title></title>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<script type=\"text/javascript\">\n\nfunction doLoadScript( url )\n{\n\tif ( !url )\n\t\treturn false ;\n\n\tvar s = document.createElement( \"script\" ) ;\n\ts.type = \"text/javascript\" ;\n\ts.src = url ;\n\tdocument.getElementsByTagName( \"head\" )[ 0 ].appendChild( s ) ;\n\n\treturn true ;\n}\n\nvar opener;\nfunction tryLoad()\n{\n\topener = window.parent;\n\n\t// get access to global parameters\n\tvar oParams = window.opener.oldFramesetPageParams;\n\n\t// make frameset rows string prepare\n\tvar sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + \",*,\" + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ;\n\tdocument.getElementById( 'itFrameset' ).rows = sFramesetRows ;\n\n\t// dynamic including init frames and crossdomain transport code\n\t// from config sproxy_js_frameset url\n\tvar addScriptUrl = oParams.sproxy_js_frameset ;\n\tdoLoadScript( addScriptUrl ) ;\n}\n\n\t</script>\n</head>\n\n<frameset id=\"itFrameset\" onload=\"tryLoad();\" border=\"0\" rows=\"30,*,*,0\">\n    <frame scrolling=\"no\" framespacing=\"0\" frameborder=\"0\" noresize=\"noresize\" marginheight=\"0\" marginwidth=\"2\" src=\"\" name=\"navbar\"></frame>\n    <frame scrolling=\"auto\" framespacing=\"0\" frameborder=\"0\" noresize=\"noresize\" marginheight=\"0\" marginwidth=\"0\" src=\"\" name=\"mid\"></frame>\n    <frame scrolling=\"no\" framespacing=\"0\" frameborder=\"0\" noresize=\"noresize\" marginheight=\"1\" marginwidth=\"1\" src=\"\" name=\"bot\"></frame>\n    <frame scrolling=\"no\" framespacing=\"0\" frameborder=\"0\" noresize=\"noresize\" marginheight=\"1\" marginwidth=\"1\" src=\"\" name=\"spellsuggestall\"></frame>\n</frameset>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/wsc/dialogs/wsc.css",
    "content": "/*\nCopyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.html or http://ckeditor.com/license\n*/\n\nhtml, body\n{\n\tbackground-color: transparent;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\nbody\n{\n\tpadding: 10px;\n}\n\nbody, td, input, select, textarea\n{\n\tfont-size: 11px;\n\tfont-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;\n}\n\n.midtext\n{\n\tpadding:0px;\n\tmargin:10px;\n}\n\n.midtext p\n{\n\tpadding:0px;\n\tmargin:10px;\n}\n\n.Button\n{\n\tborder: #737357 1px solid;\n\tcolor: #3b3b1f;\n\tbackground-color: #c7c78f;\n}\n\n.PopupTabArea\n{\n\tcolor: #737357;\n\tbackground-color: #e3e3c7;\n}\n\n.PopupTitleBorder\n{\n\tborder-bottom: #d5d59d 1px solid;\n}\n.PopupTabEmptyArea\n{\n\tpadding-left: 10px;\n\tborder-bottom: #d5d59d 1px solid;\n}\n\n.PopupTab, .PopupTabSelected\n{\n\tborder-right: #d5d59d 1px solid;\n\tborder-top: #d5d59d 1px solid;\n\tborder-left: #d5d59d 1px solid;\n\tpadding: 3px 5px 3px 5px;\n\tcolor: #737357;\n}\n\n.PopupTab\n{\n\tmargin-top: 1px;\n\tborder-bottom: #d5d59d 1px solid;\n\tcursor: pointer;\n}\n\n.PopupTabSelected\n{\n\tfont-weight: bold;\n\tcursor: default;\n\tpadding-top: 4px;\n\tborder-bottom: #f1f1e3 1px solid;\n\tbackground-color: #f1f1e3;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/wsc/dialogs/wsc.js",
    "content": "﻿/*\n Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.html or http://ckeditor.com/license\n*/\n(function(){function z(a){return a&&a.domId&&a.getInputElement().$?a.getInputElement():a&&a.$?a:!1}function I(a){if(!a)throw\"Languages-by-groups list are required for construct selectbox\";var c=[],e=\"\",d;for(d in a)for(var f in a[d]){var h=a[d][f];\"en_US\"==h?e=h:c.push(h)}c.sort();e&&c.unshift(e);return{getCurrentLangGroup:function(c){a:{for(var d in a)for(var e in a[d])if(e.toUpperCase()===c.toUpperCase()){c=d;break a}c=\"\"}return c},setLangList:function(){var c={},d;for(d in a)for(var e in a[d])c[a[d][e]]=\ne;return c}()}}var g=function(){var a=function(a,b,d){d=d||{};var f=d.expires;if(\"number\"==typeof f&&f){var h=new Date;h.setTime(h.getTime()+1E3*f);f=d.expires=h}f&&f.toUTCString&&(d.expires=f.toUTCString());b=encodeURIComponent(b);a=a+\"\\x3d\"+b;for(var k in d)b=d[k],a+=\"; \"+k,!0!==b&&(a+=\"\\x3d\"+b);document.cookie=a};return{postMessage:{init:function(a){window.addEventListener?window.addEventListener(\"message\",a,!1):window.attachEvent(\"onmessage\",a)},send:function(a){var b=Object.prototype.toString,\nd=a.fn||null,f=a.id||\"\",h=a.target||window,k=a.message||{id:f};a.message&&\"[object Object]\"==b.call(a.message)&&(a.message.id?a.message.id:a.message.id=f,k=a.message);a=window.JSON.stringify(k,d);h.postMessage(a,\"*\")},unbindHandler:function(a){window.removeEventListener?window.removeEventListener(\"message\",a,!1):window.detachEvent(\"onmessage\",a)}},hash:{create:function(){},parse:function(){}},cookie:{set:a,get:function(a){return(a=document.cookie.match(new RegExp(\"(?:^|; )\"+a.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g,\n\"\\\\$1\")+\"\\x3d([^;]*)\")))?decodeURIComponent(a[1]):void 0},remove:function(c){a(c,\"\",{expires:-1})}},misc:{findFocusable:function(a){var b=null;a&&(b=a.find(\"a[href], area[href], input, select, textarea, button, *[tabindex], *[contenteditable]\"));return b},isVisible:function(a){var b;(b=0===a.offsetWidth||0==a.offsetHeight)||(b=\"none\"===(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(a,null).display:a.currentStyle?a.currentStyle.display:a.style.display));\nreturn!b},hasClass:function(a,b){return!(!a.className||!a.className.match(new RegExp(\"(\\\\s|^)\"+b+\"(\\\\s|$)\")))}}}}(),a=a||{};a.TextAreaNumber=null;a.load=!0;a.cmd={SpellTab:\"spell\",Thesaurus:\"thes\",GrammTab:\"grammar\"};a.dialog=null;a.optionNode=null;a.selectNode=null;a.grammerSuggest=null;a.textNode={};a.iframeMain=null;a.dataTemp=\"\";a.div_overlay=null;a.textNodeInfo={};a.selectNode={};a.selectNodeResponce={};a.langList=null;a.langSelectbox=null;a.banner=\"\";a.show_grammar=null;a.div_overlay_no_check=\nnull;a.targetFromFrame={};a.onLoadOverlay=null;a.LocalizationComing={};a.OverlayPlace=null;a.sessionid=\"\";a.LocalizationButton={ChangeTo_button:{instance:null,text:\"Change to\",localizationID:\"ChangeTo\"},ChangeAll:{instance:null,text:\"Change All\"},IgnoreWord:{instance:null,text:\"Ignore word\"},IgnoreAllWords:{instance:null,text:\"Ignore all words\"},Options:{instance:null,text:\"Options\",optionsDialog:{instance:null}},AddWord:{instance:null,text:\"Add word\"},FinishChecking_button:{instance:null,text:\"Finish Checking\",\nlocalizationID:\"FinishChecking\"},FinishChecking_button_block:{instance:null,text:\"Finish Checking\",localizationID:\"FinishChecking\"}};a.LocalizationLabel={ChangeTo_label:{instance:null,text:\"Change to\",localizationID:\"ChangeTo\"},Suggestions:{instance:null,text:\"Suggestions\"},Categories:{instance:null,text:\"Categories\"},Synonyms:{instance:null,text:\"Synonyms\"}};var J=function(b){var c,e,d;for(d in b)c=(c=a.dialog.getContentElement(a.dialog._.currentTabId,d))?c.getElement():b[d].instance.getElement().getFirst()||\nb[d].instance.getElement(),e=b[d].localizationID||d,c.setText(a.LocalizationComing[e])},K=function(b){var c,e,d;for(d in b)c=a.dialog.getContentElement(a.dialog._.currentTabId,d),c||(c=b[d].instance),c.setLabel&&(e=b[d].localizationID||d,c.setLabel(a.LocalizationComing[e]+\":\"))},r,A;a.framesetHtml=function(b){return\"\\x3ciframe id\\x3d\"+a.iframeNumber+\"_\"+b+' frameborder\\x3d\"0\" allowtransparency\\x3d\"1\" style\\x3d\"width:100%;border: 1px solid #AEB3B9;overflow: auto;background:#fff; border-radius: 3px;\"\\x3e\\x3c/iframe\\x3e'};\na.setIframe=function(b,c){var e;e=a.framesetHtml(c);var d=a.iframeNumber+\"_\"+c;b.getElement().setHtml(e);e=document.getElementById(d);e=e.contentWindow?e.contentWindow:e.contentDocument.document?e.contentDocument.document:e.contentDocument;e.document.open();e.document.write('\\x3c!DOCTYPE html\\x3e\\x3chtml\\x3e\\x3chead\\x3e\\x3cmeta charset\\x3d\"UTF-8\"\\x3e\\x3ctitle\\x3eiframe\\x3c/title\\x3e\\x3cstyle\\x3ehtml,body{margin: 0;height: 100%;font: 13px/1.555 \"Trebuchet MS\", sans-serif;}a{color: #888;font-weight: bold;text-decoration: none;border-bottom: 1px solid #888;}.main-box {color:#252525;padding: 3px 5px;text-align: justify;}.main-box p{margin: 0 0 14px;}.main-box .cerr{color: #f00000;border-bottom-color: #f00000;}\\x3c/style\\x3e\\x3c/head\\x3e\\x3cbody\\x3e\\x3cdiv id\\x3d\"content\" class\\x3d\"main-box\"\\x3e\\x3c/div\\x3e\\x3ciframe src\\x3d\"\" frameborder\\x3d\"0\" id\\x3d\"spelltext\" name\\x3d\"spelltext\" style\\x3d\"display:none; width: 100%\" \\x3e\\x3c/iframe\\x3e\\x3ciframe src\\x3d\"\" frameborder\\x3d\"0\" id\\x3d\"loadsuggestfirst\" name\\x3d\"loadsuggestfirst\" style\\x3d\"display:none; width: 100%\" \\x3e\\x3c/iframe\\x3e\\x3ciframe src\\x3d\"\" frameborder\\x3d\"0\" id\\x3d\"loadspellsuggestall\" name\\x3d\"loadspellsuggestall\" style\\x3d\"display:none; width: 100%\" \\x3e\\x3c/iframe\\x3e\\x3ciframe src\\x3d\"\" frameborder\\x3d\"0\" id\\x3d\"loadOptionsForm\" name\\x3d\"loadOptionsForm\" style\\x3d\"display:none; width: 100%\" \\x3e\\x3c/iframe\\x3e\\x3cscript\\x3e(function(window) {var ManagerPostMessage \\x3d function() {var _init \\x3d function(handler) {if (document.addEventListener) {window.addEventListener(\"message\", handler, false);} else {window.attachEvent(\"onmessage\", handler);};};var _sendCmd \\x3d function(o) {var str,type \\x3d Object.prototype.toString,fn \\x3d o.fn || null,id \\x3d o.id || \"\",target \\x3d o.target || window,message \\x3d o.message || { \"id\": id };if (o.message \\x26\\x26 type.call(o.message) \\x3d\\x3d \"[object Object]\") {(o.message[\"id\"]) ? o.message[\"id\"] : o.message[\"id\"] \\x3d id;message \\x3d o.message;};str \\x3d JSON.stringify(message, fn);target.postMessage(str, \"*\");};return {init: _init,send: _sendCmd};};var manageMessageTmp \\x3d new ManagerPostMessage;var appString \\x3d (function(){var spell \\x3d parent.CKEDITOR.config.wsc.DefaultParams.scriptPath;var serverUrl \\x3d parent.CKEDITOR.config.wsc.DefaultParams.serviceHost;return serverUrl + spell;})();function loadScript(src, callback) {var scriptTag \\x3d document.createElement(\"script\");scriptTag.type \\x3d \"text/javascript\";callback ? callback : callback \\x3d function() {};if(scriptTag.readyState) {scriptTag.onreadystatechange \\x3d function() {if (scriptTag.readyState \\x3d\\x3d \"loaded\" ||scriptTag.readyState \\x3d\\x3d \"complete\") {scriptTag.onreadystatechange \\x3d null;setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);callback();}};}else{scriptTag.onload \\x3d function() {setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);callback();};};scriptTag.src \\x3d src;document.getElementsByTagName(\"head\")[0].appendChild(scriptTag);};window.onload \\x3d function(){loadScript(appString, function(){manageMessageTmp.send({\"id\": \"iframeOnload\",\"target\": window.parent});});}})(this);\\x3c/script\\x3e\\x3c/body\\x3e\\x3c/html\\x3e');\ne.document.close()};a.setCurrentIframe=function(b){a.setIframe(a.dialog._.contents[b].Content,b)};a.setHeightBannerFrame=function(){var b=a.dialog.getContentElement(\"SpellTab\",\"banner\").getElement(),c=a.dialog.getContentElement(\"GrammTab\",\"banner\").getElement(),e=a.dialog.getContentElement(\"Thesaurus\",\"banner\").getElement();b.setStyle(\"height\",\"90px\");c.setStyle(\"height\",\"90px\");e.setStyle(\"height\",\"90px\")};a.setHeightFrame=function(){document.getElementById(a.iframeNumber+\"_\"+a.dialog._.currentTabId).style.height=\n\"240px\"};a.sendData=function(b){var c=b._.currentTabId,e=b._.contents[c].Content,d,f;a.previousTab=c;a.setIframe(e,c);var h=function(h){c=b._.currentTabId;h=h||window.event;h.data.getTarget().is(\"a\")&&c!==a.previousTab&&(a.previousTab=c,e=b._.contents[c].Content,d=a.iframeNumber+\"_\"+c,a.div_overlay.setEnable(),e.getElement().getChildCount()?E(a.targetFromFrame[d],a.cmd[c]):(a.setIframe(e,c),f=document.getElementById(d),a.targetFromFrame[d]=f.contentWindow))};b.parts.tabs.removeListener(\"click\",h);\nb.parts.tabs.on(\"click\",h)};a.buildSelectLang=function(a){var c=new CKEDITOR.dom.element(\"div\"),e=new CKEDITOR.dom.element(\"select\");a=\"wscLang\"+a;c.addClass(\"cke_dialog_ui_input_select\");c.setAttribute(\"role\",\"presentation\");c.setStyles({height:\"auto\",position:\"absolute\",right:\"0\",top:\"-1px\",width:\"160px\",\"white-space\":\"normal\"});e.setAttribute(\"id\",a);e.addClass(\"cke_dialog_ui_input_select\");e.setStyles({width:\"160px\"});c.append(e);return c};a.buildOptionLang=function(b,c){var e=document.getElementById(\"wscLang\"+\nc),d=document.createDocumentFragment(),f,h,k=[];if(0===e.options.length){for(f in b)k.push([f,b[f]]);k.sort();for(var p=0;p<k.length;p++)f=document.createElement(\"option\"),f.setAttribute(\"value\",k[p][1]),h=document.createTextNode(k[p][0]),f.appendChild(h),d.appendChild(f);e.appendChild(d)}for(d=0;d<e.options.length;d++)e.options[d].value==a.selectingLang&&(e.options[d].selected=\"selected\")};a.buildOptionSynonyms=function(b){b=a.selectNodeResponce[b];var c=z(a.selectNode.Synonyms);a.selectNode.Synonyms.clear();\nfor(var e=0;e<b.length;e++){var d=document.createElement(\"option\");d.text=b[e];d.value=b[e];c.$.add(d,e)}a.selectNode.Synonyms.getInputElement().$.firstChild.selected=!0;a.textNode.Thesaurus.setValue(a.selectNode.Synonyms.getInputElement().getValue())};var B=function(a){var c=document,e=a.target||c.body,d=a.id||\"overlayBlock\",f=a.opacity||\"0.9\";a=a.background||\"#f1f1f1\";var h=c.getElementById(d),k=h||c.createElement(\"div\");k.style.cssText=\"position: absolute;top:30px;bottom:41px;left:1px;right:1px;z-index: 10020;padding:0;margin:0;background:\"+\na+\";opacity: \"+f+\";filter: alpha(opacity\\x3d\"+100*f+\");display: none;\";k.id=d;h||e.appendChild(k);return{setDisable:function(){k.style.display=\"none\"},setEnable:function(){k.style.display=\"block\"}}},L=function(b,c,e){var d=new CKEDITOR.dom.element(\"div\"),f=new CKEDITOR.dom.element(\"input\"),h=new CKEDITOR.dom.element(\"label\"),k=\"wscGrammerSuggest\"+b+\"_\"+c;d.addClass(\"cke_dialog_ui_input_radio\");d.setAttribute(\"role\",\"presentation\");d.setStyles({width:\"97%\",padding:\"5px\",\"white-space\":\"normal\"});f.setAttributes({type:\"radio\",\nvalue:c,name:\"wscGrammerSuggest\",id:k});f.setStyles({\"float\":\"left\"});f.on(\"click\",function(b){a.textNode.GrammTab.setValue(b.sender.getValue())});e?f.setAttribute(\"checked\",!0):!1;f.addClass(\"cke_dialog_ui_radio_input\");h.appendText(b);h.setAttribute(\"for\",k);h.setStyles({display:\"block\",\"line-height\":\"16px\",\"margin-left\":\"18px\",\"white-space\":\"normal\"});d.append(f);d.append(h);return d},F=function(a){a=a||\"true\";null!==a&&\"false\"==a&&t()},w=function(b){var c=new I(b);b=\"wscLang\"+a.dialog.getParentEditor().name;\nb=document.getElementById(b);var e=a.iframeNumber+\"_\"+a.dialog._.currentTabId;a.buildOptionLang(c.setLangList,a.dialog.getParentEditor().name);u[c.getCurrentLangGroup(a.selectingLang)].onShow();F(a.show_grammar);b.onchange=function(b){b=c.getCurrentLangGroup(this.value);var f=a.dialog._.currentTabId;u[b].onShow();F(a.show_grammar);a.div_overlay.setEnable();a.selectingLang=this.value;f=a.cmd[f];b&&u[b]&&u[b].allowedTabCommands[f]||(f=u[b].defaultTabCommand);for(var h in a.cmd)if(a.cmd[h]==f){a.previousTab=\nh;break}g.postMessage.send({message:{changeLang:a.selectingLang,text:a.dataTemp,cmd:f},target:a.targetFromFrame[e],id:\"selectionLang_outer__page\"})}},M=function(b){var c,e=function(b){b=a.dialog.getContentElement(a.dialog._.currentTabId,b)||a.LocalizationButton[b].instance;b.getElement().hasClass(\"cke_disabled\")?b.getElement().setStyle(\"color\",\"#a0a0a0\"):b.disable()};c=function(b){b=a.dialog.getContentElement(a.dialog._.currentTabId,b)||a.LocalizationButton[b].instance;b.enable();b.getElement().setStyle(\"color\",\n\"#333\")};\"no_any_suggestions\"==b?(b=\"No suggestions\",c=a.dialog.getContentElement(a.dialog._.currentTabId,\"ChangeTo_button\")||a.LocalizationButton.ChangeTo_button.instance,c.disable(),c=a.dialog.getContentElement(a.dialog._.currentTabId,\"ChangeAll\")||a.LocalizationButton.ChangeAll.instance,c.disable(),e(\"ChangeTo_button\"),e(\"ChangeAll\")):(c(\"ChangeTo_button\"),c(\"ChangeAll\"));return b},O={iframeOnload:function(b){a.div_overlay.setEnable();b=a.dialog._.currentTabId;E(a.targetFromFrame[a.iframeNumber+\n\"_\"+b],a.cmd[b])},suggestlist:function(b){delete b.id;a.div_overlay_no_check.setDisable();C();w(a.langList);var c=M(b.word),e=\"\";c instanceof Array&&(c=b.word[0]);e=c=c.split(\",\");a.textNode.SpellTab.setValue(e[0]);b=z(A);A.clear();for(c=0;c<e.length;c++){var d=document.createElement(\"option\");d.text=e[c];d.value=e[c];b.$.add(d,c)}v();a.div_overlay.setDisable()},grammerSuggest:function(b){delete b.id;delete b.mocklangs;C();w(a.langList);var c=b.grammSuggest[0];a.grammerSuggest.getElement().setHtml(\"\");\na.textNode.GrammTab.reset();a.textNode.GrammTab.setValue(c);a.textNodeInfo.GrammTab.getElement().setHtml(\"\");a.textNodeInfo.GrammTab.getElement().setText(b.info);b=b.grammSuggest;for(var c=b.length,e=!0,d=0;d<c;d++)a.grammerSuggest.getElement().append(L(b[d],b[d],e)),e=!1;v();a.div_overlay.setDisable()},thesaurusSuggest:function(b){delete b.id;delete b.mocklangs;C();w(a.langList);a.selectNodeResponce=b;a.textNode.Thesaurus.reset();var c=z(a.selectNode.Categories),e=0;a.selectNode.Categories.clear();\nfor(var d in b)b=document.createElement(\"option\"),b.text=d,b.value=d,c.$.add(b,e),e++;c=a.selectNode.Categories.getInputElement().getChildren().$[0].value;a.selectNode.Categories.getInputElement().getChildren().$[0].selected=!0;a.buildOptionSynonyms(c);v();a.div_overlay.setDisable()},finish:function(b){delete b.id;N();b=a.dialog.getContentElement(a.dialog._.currentTabId,\"BlockFinishChecking\").getElement();b.removeStyle(\"display\");b.removeStyle(\"position\");b.removeStyle(\"left\");b.show();a.div_overlay.setDisable()},\nsettext:function(b){delete b.id;a.dialog.getParentEditor().getCommand(\"checkspell\");var c=a.dialog.getParentEditor();if(c.scayt&&c.wsc.isSsrvSame){var e=c.wsc.udn;e?c.wsc.DataStorage.setData(\"scayt_user_dictionary_name\",e):c.wsc.DataStorage.setData(\"scayt_user_dictionary_name\",\"\")}try{c.focus()}catch(d){}c.setData(b.text,function(){a.dataTemp=\"\";c.unlockSelection();c.fire(\"saveSnapshot\");a.dialog.hide()})},ReplaceText:function(b){delete b.id;a.div_overlay.setEnable();a.dataTemp=b.text;a.selectingLang=\nb.currentLang;(b.cmd=\"0\"!==b.len&&b.len)?a.div_overlay.setDisable():window.setTimeout(function(){try{a.div_overlay.setDisable()}catch(b){}},500);J(a.LocalizationButton);K(a.LocalizationLabel)},options_checkbox_send:function(b){delete b.id;b={osp:g.cookie.get(\"osp\"),udn:g.cookie.get(\"udn\"),cust_dic_ids:a.cust_dic_ids};g.postMessage.send({message:b,target:a.targetFromFrame[a.iframeNumber+\"_\"+a.dialog._.currentTabId],id:\"options_outer__page\"})},getOptions:function(b){var c=b.DefOptions.udn;a.LocalizationComing=\nb.DefOptions.localizationButtonsAndText;a.show_grammar=b.show_grammar;a.langList=b.lang;a.bnr=b.bannerId;a.sessionid=b.sessionid;if(b.bannerId){a.setHeightBannerFrame();var e=b.banner;a.dialog.getContentElement(a.dialog._.currentTabId,\"banner\").getElement().setHtml(e)}else a.setHeightFrame();\"undefined\"==c&&(a.userDictionaryName?(c=a.userDictionaryName,e={osp:g.cookie.get(\"osp\"),udn:a.userDictionaryName,cust_dic_ids:a.cust_dic_ids,id:\"options_dic_send\",udnCmd:\"create\"},g.postMessage.send({message:e,\ntarget:a.targetFromFrame[void 0]})):c=\"\");g.cookie.set(\"osp\",b.DefOptions.osp);g.cookie.set(\"udn\",c);g.cookie.set(\"cust_dic_ids\",b.DefOptions.cust_dic_ids);g.postMessage.send({id:\"giveOptions\"})},options_dic_send:function(b){b={osp:g.cookie.get(\"osp\"),udn:g.cookie.get(\"udn\"),cust_dic_ids:a.cust_dic_ids,id:\"options_dic_send\",udnCmd:g.cookie.get(\"udnCmd\")};g.postMessage.send({message:b,target:a.targetFromFrame[a.iframeNumber+\"_\"+a.dialog._.currentTabId]})},data:function(a){delete a.id},giveOptions:function(){},\nsetOptionsConfirmF:function(){},setOptionsConfirmT:function(){r.setValue(\"\")},clickBusy:function(){a.div_overlay.setEnable()},suggestAllCame:function(){a.div_overlay.setDisable();a.div_overlay_no_check.setDisable()},TextCorrect:function(){w(a.langList)}},G=function(a){a=a||window.event;if((a=window.JSON.parse(a.data))&&a.id)O[a.id](a)},E=function(b,c,e,d){c=c||CKEDITOR.config.wsc_cmd;e=e||a.dataTemp;g.postMessage.send({message:{customerId:a.wsc_customerId,text:e,txt_ctrl:a.TextAreaNumber,cmd:c,cust_dic_ids:a.cust_dic_ids,\nudn:a.userDictionaryName,slang:a.selectingLang,reset_suggest:d||!1,sessionid:a.sessionid},target:b,id:\"data_outer__page\"});a.div_overlay.setEnable()},u={superset:{onShow:function(){a.dialog.showPage(\"Thesaurus\");a.dialog.showPage(\"GrammTab\");l()},allowedTabCommands:{spell:!0,grammar:!0,thes:!0},defaultTabCommand:\"spell\"},usual:{onShow:function(){x();t();l()},allowedTabCommands:{spell:!0},defaultTabCommand:\"spell\"},rtl:{onShow:function(){x();t();l()},allowedTabCommands:{spell:!0},defaultTabCommand:\"spell\"},\nspellgrammar:{onShow:function(){x();a.dialog.showPage(\"GrammTab\");l()},allowedTabCommands:{spell:!0,grammar:!0},defaultTabCommand:\"spell\"},spellthes:{onShow:function(){a.dialog.showPage(\"Thesaurus\");t();l()},allowedTabCommands:{spell:!0,thes:!0},defaultTabCommand:\"spell\"}},H=function(b){var c=(new function(a){var b={};return{getCmdByTab:function(c){for(var h in a)b[a[h]]=h;return b[c]}}}(a.cmd)).getCmdByTab(CKEDITOR.config.wsc_cmd);b.selectPage(c);a.sendData(b)},x=function(){a.dialog.hidePage(\"Thesaurus\")},\nt=function(){a.dialog.hidePage(\"GrammTab\")},l=function(){a.dialog.showPage(\"SpellTab\")},v=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,\"bottomGroup\").getElement();b.removeStyle(\"display\");b.removeStyle(\"position\");b.removeStyle(\"left\");b.show()},N=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,\"bottomGroup\").getElement(),c=document.activeElement,e;b.setStyles({display:\"block\",position:\"absolute\",left:\"-9999px\"});setTimeout(function(){b.removeStyle(\"display\");\nb.removeStyle(\"position\");b.removeStyle(\"left\");b.hide();a.dialog._.editor.focusManager.currentActive.focusNext();e=g.misc.findFocusable(a.dialog.parts.contents);if(g.misc.hasClass(c,\"cke_dialog_tab\")||g.misc.hasClass(c,\"cke_dialog_contents_body\")||!g.misc.isVisible(c))for(var d=0,f;d<e.count();d++){if(f=e.getItem(d),g.misc.isVisible(f.$)){try{f.$.focus()}catch(h){}break}}else try{c.focus()}catch(k){}},0)},C=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,\"BlockFinishChecking\").getElement(),\nc=document.activeElement,e;b.setStyles({display:\"block\",position:\"absolute\",left:\"-9999px\"});setTimeout(function(){b.removeStyle(\"display\");b.removeStyle(\"position\");b.removeStyle(\"left\");b.hide();a.dialog._.editor.focusManager.currentActive.focusNext();e=g.misc.findFocusable(a.dialog.parts.contents);if(g.misc.hasClass(c,\"cke_dialog_tab\")||g.misc.hasClass(c,\"cke_dialog_contents_body\")||!g.misc.isVisible(c))for(var d=0,f;d<e.count();d++){if(f=e.getItem(d),g.misc.isVisible(f.$)){try{f.$.focus()}catch(h){}break}}else try{c.focus()}catch(k){}},\n0)};CKEDITOR.dialog.add(\"checkspell\",function(b){function c(a){var c=parseInt(b.config.wsc_left,10),d=parseInt(b.config.wsc_top,10),e=parseInt(b.config.wsc_width,10),g=parseInt(b.config.wsc_height,10),m=CKEDITOR.document.getWindow().getViewPaneSize();a.getPosition();var n=a.getSize(),q=0;if(!a._.resized){var q=n.height-a.parts.contents.getSize(\"height\",!(CKEDITOR.env.gecko||CKEDITOR.env.opera||CKEDITOR.env.ie&&CKEDITOR.env.quirks)),D=n.width-a.parts.contents.getSize(\"width\",1);if(e<f.minWidth||isNaN(e))e=\nf.minWidth;e>m.width-D&&(e=m.width-D);if(g<f.minHeight||isNaN(g))g=f.minHeight;g>m.height-q&&(g=m.height-q);n.width=e+D;n.height=g+q;a._.fromResizeEvent=!1;a.resize(e,g);setTimeout(function(){a._.fromResizeEvent=!1;CKEDITOR.dialog.fire(\"resize\",{dialog:a,width:e,height:g},b)},300)}a._.moved||(q=isNaN(c)&&isNaN(d)?0:1,isNaN(c)&&(c=(m.width-n.width)/2),0>c&&(c=0),c>m.width-n.width&&(c=m.width-n.width),isNaN(d)&&(d=(m.height-n.height)/2),0>d&&(d=0),d>m.height-n.height&&(d=m.height-n.height),a.move(c,\nd,q))}function e(){b.wsc={};(function(a){var b={separator:\"\\x3c$\\x3e\",getDataType:function(a){return\"undefined\"===typeof a?\"undefined\":null===a?\"null\":Object.prototype.toString.call(a).slice(8,-1)},convertDataToString:function(a){return this.getDataType(a).toLowerCase()+this.separator+a},restoreDataFromString:function(a){var b=a,c;a=this.backCompatibility(a);if(\"string\"===typeof a)switch(b=a.indexOf(this.separator),c=a.substring(0,b),b=a.substring(b+this.separator.length),c){case \"boolean\":b=\"true\"===\nb;break;case \"number\":b=parseFloat(b);break;case \"array\":b=\"\"===b?[]:b.split(\",\");break;case \"null\":b=null;break;case \"undefined\":b=void 0}return b},backCompatibility:function(a){var b=a,c;\"string\"===typeof a&&(c=a.indexOf(this.separator),0>c&&(b=parseFloat(a),isNaN(b)&&(\"[\"===a[0]&&\"]\"===a[a.length-1]?(a=a.replace(\"[\",\"\"),a=a.replace(\"]\",\"\"),b=\"\"===a?[]:a.split(\",\")):b=\"true\"===a||\"false\"===a?\"true\"===a:a),b=this.convertDataToString(b)));return b}},c={get:function(a){return b.restoreDataFromString(window.localStorage.getItem(a))},\nset:function(a,c){var d=b.convertDataToString(c);window.localStorage.setItem(a,d)},del:function(a){window.localStorage.removeItem(a)},clear:function(){window.localStorage.clear()}},d={expiration:31622400,get:function(a){return b.restoreDataFromString(this.getCookie(a))},set:function(a,c){var d=b.convertDataToString(c);this.setCookie(a,d,{expires:this.expiration})},del:function(a){this.deleteCookie(a)},getCookie:function(a){return(a=document.cookie.match(new RegExp(\"(?:^|; )\"+a.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g,\n\"\\\\$1\")+\"\\x3d([^;]*)\")))?decodeURIComponent(a[1]):void 0},setCookie:function(a,b,c){c=c||{};var d=c.expires;if(\"number\"===typeof d&&d){var e=new Date;e.setTime(e.getTime()+1E3*d);d=c.expires=e}d&&d.toUTCString&&(c.expires=d.toUTCString());b=encodeURIComponent(b);a=a+\"\\x3d\"+b;for(var h in c)b=c[h],a+=\"; \"+h,!0!==b&&(a+=\"\\x3d\"+b);document.cookie=a},deleteCookie:function(a){this.setCookie(a,null,{expires:-1})},clear:function(){for(var a=document.cookie.split(\";\"),b=0;b<a.length;b++){var c=a[b],d=c.indexOf(\"\\x3d\"),\nc=-1<d?c.substr(0,d):c;this.deleteCookie(c)}}},e=window.localStorage?c:d;a.DataStorage={getData:function(a){return e.get(a)},setData:function(a,b){e.set(a,b)},deleteData:function(a){e.del(a)},clear:function(){e.clear()}}})(b.wsc);b.wsc.operationWithUDN=function(b,c){g.postMessage.send({message:{udn:c,id:\"operationWithUDN\",udnCmd:b},target:a.targetFromFrame[a.iframeNumber+\"_\"+a.dialog._.currentTabId]})};b.wsc.getLocalStorageUDN=function(){var a=b.wsc.DataStorage.getData(\"scayt_user_dictionary_name\");\nif(a)return a};b.wsc.getLocalStorageUD=function(){var a=b.wsc.DataStorage.getData(\"scayt_user_dictionary\");if(a)return a};b.wsc.addWords=function(a,c){var d=b.config.wsc.DefaultParams.serviceHost+b.config.wsc.DefaultParams.ssrvHost+\"?cmd\\x3ddictionary\\x26format\\x3djson\\x26customerid\\x3d1%3AncttD3-fIoSf2-huzwE4-Y5muI2-mD0Tt-kG9Wz-UEDFC-tYu243-1Uq474-d9Z2l3\\x26action\\x3daddword\\x26word\\x3d\"+a+\"\\x26callback\\x3dtoString\\x26synchronization\\x3dtrue\",e=document.createElement(\"script\");e.type=\"text/javascript\";\ne.src=d;document.getElementsByTagName(\"head\")[0].appendChild(e);e.onload=c;e.onreadystatechange=function(){\"loaded\"===this.readyState&&c()}};b.wsc.cgiOrigin=function(){var a=b.config.wsc.DefaultParams.serviceHost.split(\"/\");return a[0]+\"//\"+a[2]};b.wsc.isSsrvSame=!1}var d=function(c){this.getElement().focus();a.div_overlay.setEnable();c=a.dialog._.currentTabId;var d=a.iframeNumber+\"_\"+c,e=a.textNode[c].getValue(),f=this.getElement().getAttribute(\"title-cmd\");g.postMessage.send({message:{cmd:f,tabId:c,\nnew_word:e},target:a.targetFromFrame[d],id:\"cmd_outer__page\"});\"ChangeTo\"!=f&&\"ChangeAll\"!=f||b.fire(\"saveSnapshot\");\"FinishChecking\"==f&&b.config.wsc_onFinish.call(CKEDITOR.document.getWindow().getFrame())},f={minWidth:560,minHeight:444};return{title:b.config.wsc_dialogTitle||b.lang.wsc.title,minWidth:f.minWidth,minHeight:f.minHeight,buttons:[CKEDITOR.dialog.cancelButton],onLoad:function(){a.dialog=this;x();t();l();b.plugins.scayt&&e()},onShow:function(){a.dialog=this;b.lockSelection(b.getSelection());\na.TextAreaNumber=\"cke_textarea_\"+b.name;g.postMessage.init(G);a.dataTemp=b.getData();a.OverlayPlace=a.dialog.parts.tabs.getParent().$;if(CKEDITOR&&CKEDITOR.config){a.wsc_customerId=b.config.wsc_customerId;a.cust_dic_ids=b.config.wsc_customDictionaryIds;a.userDictionaryName=b.config.wsc_userDictionaryName;a.defaultLanguage=CKEDITOR.config.defaultLanguage;var d=\"file:\"==document.location.protocol?\"http:\":document.location.protocol,d=b.config.wsc_customLoaderScript||d+\"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin\\x3dfck2\\x26customerid\\x3d\"+\na.wsc_customerId+\"\\x26cmd\\x3dscript\\x26doc\\x3dwsc\\x26schema\\x3d22\";c(this);CKEDITOR.scriptLoader.load(d,function(c){CKEDITOR.config&&CKEDITOR.config.wsc&&CKEDITOR.config.wsc.DefaultParams?(a.serverLocationHash=CKEDITOR.config.wsc.DefaultParams.serviceHost,a.logotype=CKEDITOR.config.wsc.DefaultParams.logoPath,a.loadIcon=CKEDITOR.config.wsc.DefaultParams.iconPath,a.loadIconEmptyEditor=CKEDITOR.config.wsc.DefaultParams.iconPathEmptyEditor,a.LangComparer=new CKEDITOR.config.wsc.DefaultParams._SP_FCK_LangCompare):\n(a.serverLocationHash=DefaultParams.serviceHost,a.logotype=DefaultParams.logoPath,a.loadIcon=DefaultParams.iconPath,a.loadIconEmptyEditor=DefaultParams.iconPathEmptyEditor,a.LangComparer=new _SP_FCK_LangCompare);a.pluginPath=CKEDITOR.getUrl(b.plugins.wsc.path);a.iframeNumber=a.TextAreaNumber;a.templatePath=a.pluginPath+\"dialogs/tmp.html\";a.LangComparer.setDefaulLangCode(a.defaultLanguage);a.currentLang=b.config.wsc_lang||a.LangComparer.getSPLangCode(b.langCode)||\"en_US\";a.selectingLang=a.currentLang;\na.div_overlay=new B({opacity:\"1\",background:\"#fff url(\"+a.loadIcon+\") no-repeat 50% 50%\",target:a.OverlayPlace});var d=a.dialog.parts.tabs.getId(),d=CKEDITOR.document.getById(d);d.setStyle(\"width\",\"97%\");d.getElementsByTag(\"DIV\").count()||d.append(a.buildSelectLang(a.dialog.getParentEditor().name));a.div_overlay_no_check=new B({opacity:\"1\",id:\"no_check_over\",background:\"#fff url(\"+a.loadIconEmptyEditor+\") no-repeat 50% 50%\",target:a.OverlayPlace});c&&(H(a.dialog),a.dialog.setupContent(a.dialog));\nb.plugins.scayt&&(b.wsc.isSsrvSame=function(){var a=CKEDITOR.config.wsc.DefaultParams.serviceHost.replace(\"lf/22/js/../../../\",\"\").split(\"//\")[1],c=CKEDITOR.config.wsc.DefaultParams.ssrvHost,d=b.config.scayt_srcUrl,e,h,f,g,p;window.SCAYT&&window.SCAYT.CKSCAYT&&(f=SCAYT.CKSCAYT.prototype.basePath,f.split(\"//\"),g=f.split(\"//\")[1].split(\"/\")[0],p=f.split(g+\"/\")[1].replace(\"/lf/scayt3/ckscayt/\",\"\")+\"/script/ssrv.cgi\");!d||f||b.config.scayt_servicePath||(d.split(\"//\"),e=d.split(\"//\")[1].split(\"/\")[0],\nh=d.split(e+\"/\")[1].replace(\"/lf/scayt3/ckscayt/ckscayt.js\",\"\")+\"/script/ssrv.cgi\");return\"//\"+a+c===\"//\"+(b.config.scayt_serviceHost||g||e)+\"/\"+(b.config.scayt_servicePath||p||h)}());if(window.SCAYT&&b.wsc&&b.wsc.isSsrvSame){var e=b.wsc.cgiOrigin();b.wsc.syncIsDone=!1;c=function(a){a.origin===e&&(a=JSON.parse(a.data),a.ud&&\"undefined\"!==a.ud?b.wsc.ud=a.ud:\"undefined\"===a.ud&&(b.wsc.ud=void 0),a.udn&&\"undefined\"!==a.udn?b.wsc.udn=a.udn:\"undefined\"===a.udn&&(b.wsc.udn=void 0),b.wsc.syncIsDone||(h(b.wsc.ud),\nb.wsc.syncIsDone=!0))};var h=function(c){c=b.wsc.getLocalStorageUD();var d;c instanceof Array&&(d=c.toString());void 0!==d&&\"\"!==d&&setTimeout(function(){b.wsc.addWords(d,function(){H(a.dialog);a.dialog.setupContent(a.dialog)})},400)};window.addEventListener?addEventListener(\"message\",c,!1):window.attachEvent(\"onmessage\",c);setTimeout(function(){var a=b.wsc.getLocalStorageUDN();void 0!==a&&b.wsc.operationWithUDN(\"restore\",a)},500)}})}else a.dialog.hide()},onHide:function(){var c=CKEDITOR.plugins.scayt,\nd=b.scayt;b.unlockSelection();c&&d&&c.state[b.name]&&d.setMarkupPaused(!1);a.dataTemp=\"\";a.sessionid=\"\";g.postMessage.unbindHandler(G);if(b.plugins.scayt&&b.wsc&&b.wsc.isSsrvSame){var c=b.wsc.udn,e=b.wsc.ud,f,l;b.scayt?(c?(b.wsc.DataStorage.setData(\"scayt_user_dictionary_name\",c),b.scayt.restoreUserDictionary(c)):(b.wsc.DataStorage.setData(\"scayt_user_dictionary_name\",\"\"),b.scayt.removeUserDictionary()),e&&setTimeout(function(){f=e.split(\",\");for(l=0;l<f.length;l+=1)b.scayt.addWordToUserDictionary(f[l])},\n200),e||b.wsc.DataStorage.setData(\"scayt_user_dictionary\",[])):(c?b.wsc.DataStorage.setData(\"scayt_user_dictionary_name\",c):b.wsc.DataStorage.setData(\"scayt_user_dictionary_name\",\"\"),e&&(f=e.split(\",\"),b.wsc.DataStorage.setData(\"scayt_user_dictionary\",f)))}},contents:[{id:\"SpellTab\",label:\"SpellChecker\",accessKey:\"S\",elements:[{type:\"html\",id:\"banner\",label:\"banner\",style:\"\",html:\"\\x3cdiv\\x3e\\x3c/div\\x3e\"},{type:\"html\",id:\"Content\",label:\"spellContent\",html:\"\",setup:function(b){b=a.iframeNumber+\"_\"+\nb._.currentTabId;var c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:\"hbox\",id:\"bottomGroup\",style:\"width:560px; margin: 0 auto;\",widths:[\"50%\",\"50%\"],children:[{type:\"hbox\",id:\"leftCol\",align:\"left\",width:\"50%\",children:[{type:\"vbox\",id:\"rightCol1\",widths:[\"50%\",\"50%\"],children:[{type:\"text\",id:\"ChangeTo_label\",label:a.LocalizationLabel.ChangeTo_label.text+\":\",labelLayout:\"horizontal\",labelStyle:\"font: 12px/25px arial, sans-serif;\",width:\"140px\",\"default\":\"\",onShow:function(){a.textNode.SpellTab=\nthis;a.LocalizationLabel.ChangeTo_label.instance=this},onHide:function(){this.reset()}},{type:\"hbox\",id:\"rightCol\",align:\"right\",width:\"30%\",children:[{type:\"vbox\",id:\"rightCol_col__left\",children:[{type:\"text\",id:\"labelSuggestions\",label:a.LocalizationLabel.Suggestions.text+\":\",onShow:function(){a.LocalizationLabel.Suggestions.instance=this;this.getInputElement().setStyles({display:\"none\"})}},{type:\"html\",id:\"logo\",html:'\\x3cimg width\\x3d\"99\" height\\x3d\"68\" border\\x3d\"0\" src\\x3d\"\" title\\x3d\"WebSpellChecker.net\" alt\\x3d\"WebSpellChecker.net\" style\\x3d\"display: inline-block;\"\\x3e',\nsetup:function(b){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({\"text-align\":\"left\"})}}]},{type:\"select\",id:\"list_of_suggestions\",labelStyle:\"font: 12px/25px arial, sans-serif;\",size:\"6\",inputStyle:\"width: 140px; height: auto;\",items:[[\"loading...\"]],onShow:function(){A=this},onChange:function(){a.textNode.SpellTab.setValue(this.getValue())}}]}]}]},{type:\"hbox\",id:\"rightCol\",align:\"right\",width:\"50%\",children:[{type:\"vbox\",id:\"rightCol_col__left\",widths:[\"50%\",\"50%\",\n\"50%\",\"50%\"],children:[{type:\"button\",id:\"ChangeTo_button\",label:a.LocalizationButton.ChangeTo_button.text,title:\"Change to\",style:\"width: 100%;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",\"ChangeTo\");a.LocalizationButton.ChangeTo_button.instance=this},onClick:d},{type:\"button\",id:\"ChangeAll\",label:a.LocalizationButton.ChangeAll.text,title:\"Change All\",style:\"width: 100%;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",this.id);a.LocalizationButton.ChangeAll.instance=\nthis},onClick:d},{type:\"button\",id:\"AddWord\",label:a.LocalizationButton.AddWord.text,title:\"Add word\",style:\"width: 100%;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",this.id);a.LocalizationButton.AddWord.instance=this},onClick:d},{type:\"button\",id:\"FinishChecking_button\",label:a.LocalizationButton.FinishChecking_button.text,title:\"Finish Checking\",style:\"width: 100%;margin-top: 9px;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",\"FinishChecking\");a.LocalizationButton.FinishChecking_button.instance=\nthis},onClick:d}]},{type:\"vbox\",id:\"rightCol_col__right\",widths:[\"50%\",\"50%\",\"50%\"],children:[{type:\"button\",id:\"IgnoreWord\",label:a.LocalizationButton.IgnoreWord.text,title:\"Ignore word\",style:\"width: 100%;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",this.id);a.LocalizationButton.IgnoreWord.instance=this},onClick:d},{type:\"button\",id:\"IgnoreAllWords\",label:a.LocalizationButton.IgnoreAllWords.text,title:\"Ignore all words\",style:\"width: 100%;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",\nthis.id);a.LocalizationButton.IgnoreAllWords.instance=this},onClick:d},{type:\"button\",id:\"Options\",label:a.LocalizationButton.Options.text,title:\"Option\",style:\"width: 100%;\",onLoad:function(){a.LocalizationButton.Options.instance=this;\"file:\"==document.location.protocol&&this.disable()},onClick:function(){this.getElement().focus();\"file:\"==document.location.protocol?alert(\"WSC: Options functionality is disabled when runing from file system\"):(y=document.activeElement,b.openDialog(\"options\"))}}]}]}]},\n{type:\"hbox\",id:\"BlockFinishChecking\",style:\"width:560px; margin: 0 auto;\",widths:[\"70%\",\"30%\"],onShow:function(){this.getElement().setStyles({display:\"block\",position:\"absolute\",left:\"-9999px\"})},onHide:v,children:[{type:\"hbox\",id:\"leftCol\",align:\"left\",width:\"70%\",children:[{type:\"vbox\",id:\"rightCol1\",setup:function(){this.getChild()[0].getElement().$.src=a.logotype;this.getChild()[0].getElement().getParent().setStyles({\"text-align\":\"center\"})},children:[{type:\"html\",id:\"logo\",html:'\\x3cimg width\\x3d\"99\" height\\x3d\"68\" border\\x3d\"0\" src\\x3d\"\" title\\x3d\"WebSpellChecker.net\" alt\\x3d\"WebSpellChecker.net\" style\\x3d\"display: inline-block;\"\\x3e'}]}]},\n{type:\"hbox\",id:\"rightCol\",align:\"right\",width:\"30%\",children:[{type:\"vbox\",id:\"rightCol_col__left\",children:[{type:\"button\",id:\"Option_button\",label:a.LocalizationButton.Options.text,title:\"Option\",style:\"width: 100%;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",this.id);\"file:\"==document.location.protocol&&this.disable()},onClick:function(){this.getElement().focus();\"file:\"==document.location.protocol?alert(\"WSC: Options functionality is disabled when runing from file system\"):\n(y=document.activeElement,b.openDialog(\"options\"))}},{type:\"button\",id:\"FinishChecking_button_block\",label:a.LocalizationButton.FinishChecking_button_block.text,title:\"Finish Checking\",style:\"width: 100%;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",\"FinishChecking\")},onClick:d}]}]}]}]},{id:\"GrammTab\",label:\"Grammar\",accessKey:\"G\",elements:[{type:\"html\",id:\"banner\",label:\"banner\",style:\"\",html:\"\\x3cdiv\\x3e\\x3c/div\\x3e\"},{type:\"html\",id:\"Content\",label:\"GrammarContent\",html:\"\",setup:function(){var b=\na.iframeNumber+\"_\"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:\"vbox\",id:\"bottomGroup\",style:\"width:560px; margin: 0 auto;\",children:[{type:\"hbox\",id:\"leftCol\",widths:[\"66%\",\"34%\"],children:[{type:\"vbox\",children:[{type:\"text\",id:\"text\",label:\"Change to:\",labelLayout:\"horizontal\",labelStyle:\"font: 12px/25px arial, sans-serif;\",inputStyle:\"float: right; width: 200px;\",\"default\":\"\",onShow:function(){a.textNode.GrammTab=this},onHide:function(){this.reset()}},\n{type:\"html\",id:\"html_text\",html:\"\\x3cdiv style\\x3d'min-height: 17px; line-height: 17px; padding: 5px; text-align: left;background: #F1F1F1;color: #595959; white-space: normal!important;'\\x3e\\x3c/div\\x3e\",onShow:function(b){a.textNodeInfo.GrammTab=this}},{type:\"html\",id:\"radio\",html:\"\",onShow:function(){a.grammerSuggest=this}}]},{type:\"vbox\",children:[{type:\"button\",id:\"ChangeTo_button\",label:\"Change to\",title:\"Change to\",style:\"width: 133px; float: right;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",\n\"ChangeTo\")},onClick:d},{type:\"button\",id:\"IgnoreWord\",label:\"Ignore word\",title:\"Ignore word\",style:\"width: 133px; float: right;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",this.id)},onClick:d},{type:\"button\",id:\"IgnoreAllWords\",label:\"Ignore Problem\",title:\"Ignore Problem\",style:\"width: 133px; float: right;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",this.id)},onClick:d},{type:\"button\",id:\"FinishChecking_button\",label:a.LocalizationButton.FinishChecking_button.text,\ntitle:\"Finish Checking\",style:\"width: 133px; float: right; margin-top: 9px;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",\"FinishChecking\")},onClick:d}]}]}]},{type:\"hbox\",id:\"BlockFinishChecking\",style:\"width:560px; margin: 0 auto;\",widths:[\"70%\",\"30%\"],onShow:function(){this.getElement().setStyles({display:\"block\",position:\"absolute\",left:\"-9999px\"})},onHide:v,children:[{type:\"hbox\",id:\"leftCol\",align:\"left\",width:\"70%\",children:[{type:\"vbox\",id:\"rightCol1\",children:[{type:\"html\",\nid:\"logo\",html:'\\x3cimg width\\x3d\"99\" height\\x3d\"68\" border\\x3d\"0\" src\\x3d\"\" title\\x3d\"WebSpellChecker.net\" alt\\x3d\"WebSpellChecker.net\" style\\x3d\"display: inline-block;\"\\x3e',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({\"text-align\":\"center\"})}}]}]},{type:\"hbox\",id:\"rightCol\",align:\"right\",width:\"30%\",children:[{type:\"vbox\",id:\"rightCol_col__left\",children:[{type:\"button\",id:\"FinishChecking_button_block\",label:a.LocalizationButton.FinishChecking_button_block.text,\ntitle:\"Finish Checking\",style:\"width: 100%;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",\"FinishChecking\")},onClick:d}]}]}]}]},{id:\"Thesaurus\",label:\"Thesaurus\",accessKey:\"T\",elements:[{type:\"html\",id:\"banner\",label:\"banner\",style:\"\",html:\"\\x3cdiv\\x3e\\x3c/div\\x3e\"},{type:\"html\",id:\"Content\",label:\"spellContent\",html:\"\",setup:function(){var b=a.iframeNumber+\"_\"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:\"vbox\",id:\"bottomGroup\",\nstyle:\"width:560px; margin: -10px auto; overflow: hidden;\",children:[{type:\"hbox\",widths:[\"75%\",\"25%\"],children:[{type:\"vbox\",children:[{type:\"hbox\",widths:[\"65%\",\"35%\"],children:[{type:\"text\",id:\"ChangeTo_label\",label:a.LocalizationLabel.ChangeTo_label.text+\":\",labelLayout:\"horizontal\",inputStyle:\"width: 160px;\",labelStyle:\"font: 12px/25px arial, sans-serif;\",\"default\":\"\",onShow:function(b){a.textNode.Thesaurus=this;a.LocalizationLabel.ChangeTo_label.instance=this},onHide:function(){this.reset()}},\n{type:\"button\",id:\"ChangeTo_button\",label:a.LocalizationButton.ChangeTo_button.text,title:\"Change to\",style:\"width: 121px; margin-top: 1px;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",\"ChangeTo\");a.LocalizationButton.ChangeTo_button.instance=this},onClick:d}]},{type:\"hbox\",children:[{type:\"select\",id:\"Categories\",label:a.LocalizationLabel.Categories.text+\":\",labelStyle:\"font: 12px/25px arial, sans-serif;\",size:\"5\",inputStyle:\"width: 180px; height: auto;\",items:[],onShow:function(){a.selectNode.Categories=\nthis;a.LocalizationLabel.Categories.instance=this},onChange:function(){a.buildOptionSynonyms(this.getValue())}},{type:\"select\",id:\"Synonyms\",label:a.LocalizationLabel.Synonyms.text+\":\",labelStyle:\"font: 12px/25px arial, sans-serif;\",size:\"5\",inputStyle:\"width: 180px; height: auto;\",items:[],onShow:function(){a.selectNode.Synonyms=this;a.textNode.Thesaurus.setValue(this.getValue());a.LocalizationLabel.Synonyms.instance=this},onChange:function(b){a.textNode.Thesaurus.setValue(this.getValue())}}]}]},\n{type:\"vbox\",width:\"120px\",style:\"margin-top:46px;\",children:[{type:\"html\",id:\"logotype\",label:\"WebSpellChecker.net\",html:'\\x3cimg width\\x3d\"99\" height\\x3d\"68\" border\\x3d\"0\" src\\x3d\"\" title\\x3d\"WebSpellChecker.net\" alt\\x3d\"WebSpellChecker.net\" style\\x3d\"display: inline-block;\"\\x3e',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({\"text-align\":\"center\"})}},{type:\"button\",id:\"FinishChecking_button\",label:a.LocalizationButton.FinishChecking_button.text,title:\"Finish Checking\",\nstyle:\"width: 100%; float: right; margin-top: 9px;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",\"FinishChecking\")},onClick:d}]}]}]},{type:\"hbox\",id:\"BlockFinishChecking\",style:\"width:560px; margin: 0 auto;\",widths:[\"70%\",\"30%\"],onShow:function(){this.getElement().setStyles({display:\"block\",position:\"absolute\",left:\"-9999px\"})},children:[{type:\"hbox\",id:\"leftCol\",align:\"left\",width:\"70%\",children:[{type:\"vbox\",id:\"rightCol1\",children:[{type:\"html\",id:\"logo\",html:'\\x3cimg width\\x3d\"99\" height\\x3d\"68\" border\\x3d\"0\" src\\x3d\"\" title\\x3d\"WebSpellChecker.net\" alt\\x3d\"WebSpellChecker.net\" style\\x3d\"display: inline-block;\"\\x3e',\nsetup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({\"text-align\":\"center\"})}}]}]},{type:\"hbox\",id:\"rightCol\",align:\"right\",width:\"30%\",children:[{type:\"vbox\",id:\"rightCol_col__left\",children:[{type:\"button\",id:\"FinishChecking_button_block\",label:a.LocalizationButton.FinishChecking_button_block.text,title:\"Finish Checking\",style:\"width: 100%;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",\"FinishChecking\")},onClick:d}]}]}]}]}]}});var y=null;CKEDITOR.dialog.add(\"options\",\nfunction(b){var c=null,e={},d={},f=null,h=null;g.cookie.get(\"udn\");g.cookie.get(\"osp\");b=function(a){h=this.getElement().getAttribute(\"title-cmd\");a=[];a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,\"\");g.cookie.set(\"osp\",a);g.cookie.set(\"udnCmd\",h?h:\"ignore\");\"delete\"!=h&&(a=\"\",\"\"!==r.getValue()&&(a=r.getValue()),g.cookie.set(\"udn\",a));g.postMessage.send({id:\"options_dic_send\"})};var k=function(){f.getElement().setHtml(a.LocalizationComing.error);\nf.getElement().show()};return{title:a.LocalizationComing.Options,minWidth:430,minHeight:130,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:\"OptionsTab\",label:\"Options\",accessKey:\"O\",elements:[{type:\"hbox\",id:\"options_error\",children:[{type:\"html\",style:\"display: block;text-align: center;white-space: normal!important; font-size: 12px;color:red\",html:\"\\x3cdiv\\x3e\\x3c/div\\x3e\",onShow:function(){f=this}}]},{type:\"vbox\",id:\"Options_content\",children:[{type:\"hbox\",id:\"Options_manager\",widths:[\"52%\",\n\"48%\"],children:[{type:\"fieldset\",label:\"Spell Checking Options\",style:\"border: none;margin-top: 13px;padding: 10px 0 10px 10px\",onShow:function(){this.getInputElement().$.children[0].innerHTML=a.LocalizationComing.SpellCheckingOptions},children:[{type:\"vbox\",id:\"Options_checkbox\",children:[{type:\"checkbox\",id:\"IgnoreAllCapsWords\",label:\"Ignore All-Caps Words\",labelStyle:\"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;\",style:\"float:left; min-height: 16px;\",\n\"default\":\"\",onClick:function(){d[this.id]=this.getValue()?1:0}},{type:\"checkbox\",id:\"IgnoreWordsNumbers\",label:\"Ignore Words with Numbers\",labelStyle:\"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;\",style:\"float:left; min-height: 16px;\",\"default\":\"\",onClick:function(){d[this.id]=this.getValue()?1:0}},{type:\"checkbox\",id:\"IgnoreMixedCaseWords\",label:\"Ignore Mixed-Case Words\",labelStyle:\"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;\",\nstyle:\"float:left; min-height: 16px;\",\"default\":\"\",onClick:function(){d[this.id]=this.getValue()?1:0}},{type:\"checkbox\",id:\"IgnoreDomainNames\",label:\"Ignore Domain Names\",labelStyle:\"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;\",style:\"float:left; min-height: 16px;\",\"default\":\"\",onClick:function(){d[this.id]=this.getValue()?1:0}}]}]},{type:\"vbox\",id:\"Options_DictionaryName\",children:[{type:\"text\",id:\"DictionaryName\",style:\"margin-bottom: 10px\",label:\"Dictionary Name:\",\nlabelLayout:\"vertical\",labelStyle:\"font: 12px/25px arial, sans-serif;\",\"default\":\"\",onLoad:function(){r=this;var b=a.userDictionaryName?a.userDictionaryName:(g.cookie.get(\"udn\"),this.getValue());this.setValue(b)},onShow:function(){r=this;var b=g.cookie.get(\"udn\")?g.cookie.get(\"udn\"):this.getValue();this.setValue(b);this.setLabel(a.LocalizationComing.DictionaryName)},onHide:function(){this.reset()}},{type:\"hbox\",id:\"Options_buttons\",children:[{type:\"vbox\",id:\"Options_leftCol_col\",widths:[\"50%\",\"50%\"],\nchildren:[{type:\"button\",id:\"create\",label:\"Create\",title:\"Create\",style:\"width: 100%;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Create)},onClick:b},{type:\"button\",id:\"restore\",label:\"Restore\",title:\"Restore\",style:\"width: 100%;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Restore)},\nonClick:b}]},{type:\"vbox\",id:\"Options_rightCol_col\",widths:[\"50%\",\"50%\"],children:[{type:\"button\",id:\"rename\",label:\"Rename\",title:\"Rename\",style:\"width: 100%;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Rename)},onClick:b},{type:\"button\",id:\"delete\",label:\"Remove\",title:\"Remove\",style:\"width: 100%;\",onLoad:function(){this.getElement().setAttribute(\"title-cmd\",this.id)},onShow:function(){(this.getElement().getFirst()||\nthis.getElement()).setText(a.LocalizationComing.Remove)},onClick:b}]}]}]}]},{type:\"hbox\",id:\"Options_text\",children:[{type:\"html\",style:\"text-align: justify;margin-top: 15px;white-space: normal!important; font-size: 12px;color:#777;\",html:\"\\x3cdiv\\x3e\"+a.LocalizationComing.OptionsTextIntro+\"\\x3c/div\\x3e\",onShow:function(){this.getElement().setText(a.LocalizationComing.OptionsTextIntro)}}]}]}]}],buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton],onOk:function(){var a=[];a[0]=d.IgnoreAllCapsWords;\na[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,\"\");g.cookie.set(\"osp\",a);g.postMessage.send({id:\"options_checkbox_send\"});f.getElement().hide();f.getElement().setHtml(\" \")},onLoad:function(){c=this;e.IgnoreAllCapsWords=c.getContentElement(\"OptionsTab\",\"IgnoreAllCapsWords\");e.IgnoreWordsNumbers=c.getContentElement(\"OptionsTab\",\"IgnoreWordsNumbers\");e.IgnoreMixedCaseWords=c.getContentElement(\"OptionsTab\",\"IgnoreMixedCaseWords\");e.IgnoreDomainNames=\nc.getContentElement(\"OptionsTab\",\"IgnoreDomainNames\")},onShow:function(){g.postMessage.init(k);var b=g.cookie.get(\"osp\").split(\"\");d.IgnoreAllCapsWords=b[0];d.IgnoreWordsNumbers=b[1];d.IgnoreMixedCaseWords=b[2];d.IgnoreDomainNames=b[3];parseInt(d.IgnoreAllCapsWords,10)?e.IgnoreAllCapsWords.setValue(\"checked\",!1):e.IgnoreAllCapsWords.setValue(\"\",!1);parseInt(d.IgnoreWordsNumbers,10)?e.IgnoreWordsNumbers.setValue(\"checked\",!1):e.IgnoreWordsNumbers.setValue(\"\",!1);parseInt(d.IgnoreMixedCaseWords,10)?\ne.IgnoreMixedCaseWords.setValue(\"checked\",!1):e.IgnoreMixedCaseWords.setValue(\"\",!1);parseInt(d.IgnoreDomainNames,10)?e.IgnoreDomainNames.setValue(\"checked\",!1):e.IgnoreDomainNames.setValue(\"\",!1);d.IgnoreAllCapsWords=e.IgnoreAllCapsWords.getValue()?1:0;d.IgnoreWordsNumbers=e.IgnoreWordsNumbers.getValue()?1:0;d.IgnoreMixedCaseWords=e.IgnoreMixedCaseWords.getValue()?1:0;d.IgnoreDomainNames=e.IgnoreDomainNames.getValue()?1:0;e.IgnoreAllCapsWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreAllCapsWords;\ne.IgnoreWordsNumbers.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreWordsWithNumbers;e.IgnoreMixedCaseWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreMixedCaseWords;e.IgnoreDomainNames.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreDomainNames},onHide:function(){g.postMessage.unbindHandler(k);if(y)try{y.focus()}catch(a){}}}});CKEDITOR.dialog.on(\"resize\",function(b){b=b.data;var c=b.dialog,e=CKEDITOR.document.getById(a.iframeNumber+\"_\"+c._.currentTabId);\n\"checkspell\"==c._.name&&(a.bnr?e&&e.setSize(\"height\",b.height-310):e&&e.setSize(\"height\",b.height-220),c._.fromResizeEvent&&!c._.resized&&(c._.resized=!0),c._.fromResizeEvent=!0)});CKEDITOR.on(\"dialogDefinition\",function(b){if(\"checkspell\"===b.data.name){var c=b.data.definition;a.onLoadOverlay=new B({opacity:\"1\",background:\"#fff\",target:c.dialog.parts.tabs.getParent().$});a.onLoadOverlay.setEnable();c.dialog.on(\"cancel\",function(b){c.dialog.getParentEditor().config.wsc_onClose.call(this.document.getWindow().getFrame());\na.div_overlay.setDisable();a.onLoadOverlay.setDisable();return!1},this,null,-1)}})})();"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/plugins/wsc/dialogs/wsc_ie.js",
    "content": "﻿/*\n Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.html or http://ckeditor.com/license\n*/\nCKEDITOR.dialog.add(\"checkspell\",function(a){function c(a,c){var d=0;return function(){\"function\"==typeof window.doSpell?(\"undefined\"!=typeof e&&window.clearInterval(e),l(a)):180==d++&&window._cancelOnError(c)}}function l(c){var f=new window._SP_FCK_LangCompare,b=CKEDITOR.getUrl(a.plugins.wsc.path+\"dialogs/\"),e=b+\"tmpFrameset.html\";window.gFCKPluginName=\"wsc\";f.setDefaulLangCode(a.config.defaultLanguage);window.doSpell({ctrl:g,lang:a.config.wsc_lang||f.getSPLangCode(a.langCode),intLang:a.config.wsc_uiLang||\nf.getSPLangCode(a.langCode),winType:d,onCancel:function(){c.hide()},onFinish:function(b){a.focus();c.getParentEditor().setData(b.value);c.hide()},staticFrame:e,framesetPath:e,iframePath:b+\"ciframe.html\",schemaURI:b+\"wsc.css\",userDictionaryName:a.config.wsc_userDictionaryName,customDictionaryName:a.config.wsc_customDictionaryIds&&a.config.wsc_customDictionaryIds.split(\",\"),domainName:a.config.wsc_domainName});CKEDITOR.document.getById(h).setStyle(\"display\",\"none\");CKEDITOR.document.getById(d).setStyle(\"display\",\n\"block\")}var b=CKEDITOR.tools.getNextNumber(),d=\"cke_frame_\"+b,g=\"cke_data_\"+b,h=\"cke_error_\"+b,e,b=document.location.protocol||\"http:\",k=a.lang.wsc.notAvailable,m='\\x3ctextarea style\\x3d\"display: none\" id\\x3d\"'+g+'\" rows\\x3d\"10\" cols\\x3d\"40\"\\x3e \\x3c/textarea\\x3e\\x3cdiv id\\x3d\"'+h+'\" style\\x3d\"display:none;color:red;font-size:16px;font-weight:bold;padding-top:160px;text-align:center;z-index:11;\"\\x3e\\x3c/div\\x3e\\x3ciframe src\\x3d\"\" style\\x3d\"width:100%;background-color:#f1f1e3;\" frameborder\\x3d\"0\" name\\x3d\"'+\nd+'\" id\\x3d\"'+d+'\" allowtransparency\\x3d\"1\"\\x3e\\x3c/iframe\\x3e',n=a.config.wsc_customLoaderScript||b+\"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin\\x3dfck2\\x26customerid\\x3d\"+a.config.wsc_customerId+\"\\x26cmd\\x3dscript\\x26doc\\x3dwsc\\x26schema\\x3d22\";a.config.wsc_customLoaderScript&&(k+='\\x3cp style\\x3d\"color:#000;font-size:11px;font-weight: normal;text-align:center;padding-top:10px\"\\x3e'+a.lang.wsc.errorLoading.replace(/%s/g,a.config.wsc_customLoaderScript)+\"\\x3c/p\\x3e\");window._cancelOnError=\nfunction(c){if(\"undefined\"==typeof window.WSC_Error){CKEDITOR.document.getById(d).setStyle(\"display\",\"none\");var b=CKEDITOR.document.getById(h);b.setStyle(\"display\",\"block\");b.setHtml(c||a.lang.wsc.notAvailable)}};return{title:a.config.wsc_dialogTitle||a.lang.wsc.title,minWidth:485,minHeight:380,buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var b=this.getContentElement(\"general\",\"content\").getElement();b.setHtml(m);b.getChild(2).setStyle(\"height\",this._.contentSize.height+\"px\");\"function\"!=\ntypeof window.doSpell&&CKEDITOR.document.getHead().append(CKEDITOR.document.createElement(\"script\",{attributes:{type:\"text/javascript\",src:n}}));b=a.getData();CKEDITOR.document.getById(g).setValue(b);e=window.setInterval(c(this,k),250)},onHide:function(){window.ooo=void 0;window.int_framsetLoaded=void 0;window.framesetLoaded=void 0;window.is_window_opened=!1},contents:[{id:\"general\",label:a.config.wsc_dialogTitle||a.lang.wsc.title,padding:0,elements:[{type:\"html\",id:\"content\",html:\"\"}]}]}});\nCKEDITOR.dialog.on(\"resize\",function(a){a=a.data;var c=a.dialog;\"checkspell\"==c._.name&&((c=(c=c.getContentElement(\"general\",\"content\").getElement())&&c.getChild(2))&&c.setSize(\"height\",a.height),c&&c.setSize(\"width\",a.width))});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/css/samples.css",
    "content": "/**\n * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n@media (max-width: 900px) {\n  .global-is-mobile-hidden {\n    display: none !important;\n  }\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection {\n  display: block;\n}\nbody,\nhtml {\n  margin: 0;\n  padding: 0;\n  font: 16px / 1.8 Arial, 'Helvetica Neue', Helvetica, sans-serif;\n  font-weight: 300;\n  color: #575757;\n}\n.grid-width-10 {\n  width: 10%;\n}\n.grid-width-20 {\n  width: 20%;\n}\n.grid-width-30 {\n  width: 30%;\n}\n.grid-width-40 {\n  width: 40%;\n}\n.grid-width-50 {\n  width: 50%;\n}\n.grid-width-60 {\n  width: 60%;\n}\n.grid-width-70 {\n  width: 70%;\n}\n.grid-width-80 {\n  width: 80%;\n}\n.grid-width-90 {\n  width: 90%;\n}\n.grid-width-100 {\n  width: 100%;\n}\n@media (max-width: 900px) {\n  .grid-width-10,\n  .grid-width-20,\n  .grid-width-30,\n  .grid-width-40,\n  .grid-width-50,\n  .grid-width-60,\n  .grid-width-70,\n  .grid-width-80,\n  .grid-width-90,\n  .grid-width-100 {\n    width: 100%;\n  }\n}\n*[class*=\"grid-width\"] {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  padding-left: 4%;\n  padding-right: 4%;\n  float: left;\n}\n*[class*=\"grid-width\"]:after,\n.grid-container:after,\n*[class*=\"grid-width\"]:before,\n.grid-container:before {\n  content: '';\n  display: block;\n  overflow: hidden;\n  visibility: hidden;\n  font-size: 0;\n  line-height: 0;\n  width: 0;\n  height: 0;\n}\n*[class*=\"grid-width\"]:after,\n.grid-container:after {\n  clear: both;\n}\n.grid-container {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  margin-left: auto;\n  margin-right: auto;\n}\n.grid-container-nested *[class*=\"grid-width\"]:first-child {\n  padding-left: 0;\n}\n.grid-container-nested *[class*=\"grid-width\"]:last-child {\n  padding-right: 0;\n}\n@media (max-width: 900px) {\n  .grid-container-nested *[class*=\"grid-width\"]:first-child {\n    padding-left: 4%;\n  }\n  .grid-container-nested *[class*=\"grid-width\"]:last-child {\n    padding-right: 4%;\n  }\n}\n.header-a {\n  min-height: 140px;\n  overflow: hidden;\n}\n.header-a .header-a-logo {\n  margin: 40px 0 0;\n}\n@media (max-width: 900px) {\n  .header-a .header-a-logo {\n    text-align: center;\n  }\n}\n.header-a .header-a-logo img {\n  border: transparent;\n}\n.navigation-a {\n  height: 30px;\n  background: #3d3d3d;\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  padding: 0;\n  overflow: hidden;\n}\n@media (max-width: 900px) {\n  .navigation-a {\n    text-align: center;\n  }\n}\n.navigation-a ul {\n  list-style: none;\n  margin: 0;\n  overflow: hidden;\n}\n.navigation-a ul li,\n.navigation-a ul li a {\n  display: inline-block;\n}\n@media (max-width: 900px) {\n  .navigation-a ul {\n    width: auto;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    display: inline-block;\n    float: none;\n  }\n  .navigation-a ul:before,\n  .navigation-a ul:after {\n    display: none;\n  }\n}\n.navigation-a ul.navigation-a-left {\n  text-align: left;\n}\n@media (max-width: 900px) {\n  .navigation-a ul.navigation-a-left {\n    padding-right: 0;\n  }\n}\n.navigation-a ul.navigation-a-right {\n  text-align: right;\n}\n@media (max-width: 900px) {\n  .navigation-a ul.navigation-a-right {\n    padding-left: 23px;\n  }\n}\n.navigation-a ul li + li {\n  margin-left: 23px;\n}\n.navigation-a ul li a {\n  font-size: 10px;\n  font-size: 0.625rem;\n  line-height: 18px;\n  line-height: 1.13rem;\n  line-height: 30px;\n  float: left;\n  color: #dddddd;\n  font-weight: bold;\n  text-decoration: none;\n  text-transform: uppercase;\n}\n.navigation-a ul li a:hover {\n  cursor: pointer;\n  color: #ffffff;\n}\n.icon-navigation-a-github:before,\n.icon-navigation-a-github:after {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAAXNSR0IArs4c6QAAAa9JREFUOBGNlM8rRGEUht0pDGosjKYZpUSIkuwsiCaxUEqK2VOUBcrWv2BjxUJho6wsLLDzY2fhD5iR5NeOcJvIjOfM3O927m3mmlPPnPec835nZprvjlVVJvL5fCOjMWiDCLzCLVxZlpUj/x8saYV9+IZS8UJzFWoCt2GYgk+oJG4wJUouZDANv5VsUZ47dNSzkEYHfIDEHixDWgoiB/rTHlPPwBNInPmXHRb7hdeUDFG10AN1Th1Fd5mD6BMwMVnoUyVA3t3EkjkQlDFfmwPkc7NsQTXf0bGgJWaGb16dk18+EmLYawzkC+6Q3KdK4kiZqtGdskx/kmdlCJS86RuGrDLFZJmtGi1KB0q+VhOGsDLZsiyjGsOY4qoOkrO+YUauwCDoOKWo9xk9JfM+MPdSzqZdA8UlyDO3AvKLPsIG9LsmBHUKduEHdCy6PrpJZyKXdwKMOemaissOHJ9O9xTeh57GluMYIsehWy8STW/d8ZhkI0b9PjFasA1fsAOb0KCN1PLXYyKLGNdzj2YYArnZDyDRrA3Ua4UuDzd5QM/KaoxhmAO5Om5Qt8OI2/CJP6MVa1dvltQ5AAAAAElFTkSuQmCC\");\n}\n.navigation-b {\n  text-align: right;\n  margin: 52px 0 0;\n  overflow: visible;\n}\n@media (max-width: 900px) {\n  .navigation-b {\n    text-align: center;\n    margin-top: 20px;\n    padding: 0;\n  }\n}\n.navigation-b ul {\n  padding: 0;\n  list-style: none;\n  margin: 0;\n  overflow: visible;\n}\n.navigation-b ul li,\n.navigation-b ul li a {\n  display: inline-block;\n}\n@media (max-width: 900px) {\n  .navigation-b ul {\n    display: table;\n    width: 100%;\n    padding-bottom: 1.5em;\n  }\n}\n@media (max-width: 900px) {\n  .navigation-b ul li {\n    display: table-row;\n  }\n}\n.navigation-b ul li + li {\n  margin-left: 20px;\n}\n@media (max-width: 900px) {\n  .navigation-b ul li + li {\n    margin-left: 0;\n  }\n}\n.navigation-b ul li a {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  text-transform: uppercase;\n  text-decoration: none;\n  outline: none;\n}\n@media (max-width: 900px) {\n  .navigation-b ul li a {\n    width: 100%;\n    -webkit-border-radius: 0;\n    -webkit-background-clip: padding-box;\n    -moz-border-radius: 0;\n    -moz-background-clip: padding;\n    border-radius: 0;\n    background-clip: padding-box;\n  }\n}\n.footer-a {\n  font-size: 13px;\n  font-size: 0.8125rem;\n  line-height: 23.4px;\n  line-height: 1.46rem;\n  padding-top: 2.25em;\n  padding-bottom: 2.25em;\n  overflow: hidden;\n  color: #8a8a8a;\n}\n.footer-a a {\n  color: #27c0d8;\n  text-decoration: none;\n  border-bottom: 1px dotted #27c0d8;\n}\n.footer-a a:hover {\n  color: #23adc2;\n}\n.footer-a p {\n  margin: 0;\n  display: inline-block;\n  text-align: center;\n}\n.content {\n  font-size: 14px;\n  font-size: 0.875rem;\n  line-height: 25.2px;\n  line-height: 1.57rem;\n  overflow: hidden;\n  padding-top: 1.5em;\n  padding-bottom: 1.5em;\n}\n.content p {\n  margin: 0.75em 0;\n}\n.content ul,\n.content ol,\n.content pre,\n.content blockquote,\n.content textarea:not([class^=\"cke\"]),\n.content .cke {\n  margin: 1.875em 0;\n}\n.content code,\n.content kbd {\n  -webkit-border-radius: 3px;\n  -webkit-background-clip: padding-box;\n  -moz-border-radius: 3px;\n  -moz-background-clip: padding;\n  border-radius: 3px;\n  background-clip: padding-box;\n  padding: 3px 4px;\n}\n.content pre,\n.content code,\n.content kbd,\n.content blockquote {\n  background: #f5f5f5;\n}\n.content blockquote,\n.content pre {\n  background: none;\n  border-left: 4px solid #27c0d8;\n  padding: 1.5em 2.25em;\n}\n.content p a,\n.content ul a,\n.content ol a,\n.content blockquote a,\n.content h1 a,\n.content h2 a,\n.content h3 a,\n.content h4 a,\n.content h5 a {\n  color: #27c0d8;\n  text-decoration: none;\n  border-bottom: 1px dotted #27c0d8;\n}\n.content p a:hover,\n.content ul a:hover,\n.content ol a:hover,\n.content blockquote a:hover,\n.content h1 a:hover,\n.content h2 a:hover,\n.content h3 a:hover,\n.content h4 a:hover,\n.content h5 a:hover {\n  color: #23adc2;\n}\n.content h1,\n.content h2,\n.content h3,\n.content h4,\n.content h5 {\n  color: #000;\n  font-weight: 100;\n}\n.content h1 code,\n.content h2 code,\n.content h3 code,\n.content h4 code,\n.content h5 code,\n.content h1 kbd,\n.content h2 kbd,\n.content h3 kbd,\n.content h4 kbd,\n.content h5 kbd {\n  font-size: inherit;\n}\n.content h1 a.content-heading-anchor,\n.content h2 a.content-heading-anchor,\n.content h3 a.content-heading-anchor,\n.content h4 a.content-heading-anchor,\n.content h5 a.content-heading-anchor {\n  font-weight: 100;\n  vertical-align: middle;\n  opacity: 0;\n  border: 0;\n}\n.content h1:hover a.content-heading-anchor,\n.content h2:hover a.content-heading-anchor,\n.content h3:hover a.content-heading-anchor,\n.content h4:hover a.content-heading-anchor,\n.content h5:hover a.content-heading-anchor {\n  opacity: 1;\n}\n.content h1:target a,\n.content h2:target a,\n.content h3:target a,\n.content h4:target a,\n.content h5:target a {\n  -webkit-animation: targetLinkOpacity 0.5s linear alternate;\n  -moz-animation: targetLinkOpacity 0.5s linear alternate;\n  -o-animation: targetLinkOpacity 0.5s linear alternate;\n  animation: targetLinkOpacity 0.5s linear alternate;\n  opacity: 1;\n}\n.content input,\n.content select,\n.content textarea:not([class^=\"cke\"]) {\n  -webkit-border-radius: 3px;\n  -webkit-background-clip: padding-box;\n  -moz-border-radius: 3px;\n  -moz-background-clip: padding;\n  border-radius: 3px;\n  background-clip: padding-box;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08);\n  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08);\n  font: inherit;\n  color: inherit;\n  border: 1px solid #d9d9d9;\n  padding: .2em .5em;\n}\n.content input:focus,\n.content select:focus,\n.content textarea:not([class^=\"cke\"]):focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08), 0 0 8px #93c6ef;\n  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08), 0 0 8px #93c6ef;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08), 0 0 8px #93c6ef;\n}\n.content abbr {\n  border-bottom: 1px dotted #666;\n  cursor: pointer;\n}\n.content blockquote {\n  font-style: italic;\n  font-family: Georgia, Times, \"Times New Roman\", serif;\n  font-size: 16px;\n  font-size: 1rem;\n  line-height: 28.8px;\n  line-height: 1.8rem;\n}\n.content em {\n  font-style: italic;\n}\n.content h1 {\n  font-size: 36px;\n  font-size: 2.25rem;\n  line-height: 64.8px;\n  line-height: 4.05rem;\n  margin: 1.125em 0 0;\n}\n.content h2 {\n  font-size: 27.2px;\n  font-size: 1.7rem;\n  line-height: 48.96px;\n  line-height: 3.06rem;\n  margin: 0.9em 0 0;\n}\n.content h3 {\n  font-size: 24px;\n  font-size: 1.5rem;\n  line-height: 43.2px;\n  line-height: 2.7rem;\n  font-weight: 500;\n  margin: 0.75em 0 0;\n}\n.content h4 {\n  font-size: 19.2px;\n  font-size: 1.2rem;\n  line-height: 34.56px;\n  line-height: 2.16rem;\n  font-weight: 500;\n  margin: 0.75em 0 0;\n}\n.content h5 {\n  font-size: 17.6px;\n  font-size: 1.1rem;\n  line-height: 31.68px;\n  line-height: 1.98rem;\n  font-weight: 500;\n  margin: 0.75em 0 0;\n}\n.content hr {\n  border: 0;\n  border-top: 4px solid #d9d9d9;\n  margin: 1.5em 0;\n}\n.content input[type=\"text\"] {\n  height: 1.8em;\n  line-height: 1.8em;\n}\n.content input[type=\"button\"] {\n  -webkit-appearance: button;\n  -moz-appearance: button;\n  appearance: button;\n}\n.content kbd {\n  font-size: 12px;\n  font-size: 0.75rem;\n  line-height: 21.6px;\n  line-height: 1.35rem;\n  font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;\n  padding: 2px 6px;\n  -webkit-box-shadow: 0 0 4px #ffffff inset, 0 2px 0 #d9d9d9;\n  -moz-box-shadow: 0 0 4px #ffffff inset, 0 2px 0 #d9d9d9;\n  box-shadow: 0 0 4px #ffffff inset, 0 2px 0 #d9d9d9;\n}\n.content p img {\n  vertical-align: middle;\n}\n.content p pre {\n  padding: 1.5em;\n}\n.content pre {\n  padding: 0;\n  border: 0;\n  tab-size: 4;\n  -o-tab-size: 4;\n  -moz-tab-size: 4;\n}\n.content pre,\n.content code {\n  font-size: 11.89px;\n  font-size: 0.743rem;\n  line-height: 21.4px;\n  line-height: 1.34rem;\n  font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;\n}\n.content pre a,\n.content code a {\n  border: 0;\n}\n.content pre code {\n  padding: 0.75em;\n  display: block;\n}\n.content strong {\n  color: #000;\n}\n.content ul ul,\n.content ol ul,\n.content ul ol,\n.content ol ol {\n  margin: 0.75em 0;\n}\n.content ul li,\n.content ol li {\n  font-size: 14px;\n  font-size: 0.875rem;\n  line-height: 30.24px;\n  line-height: 1.89rem;\n}\n.content textarea:not([class^=\"cke\"]) {\n  width: 100%;\n}\n.content div.todo {\n  border: 2px dotted #444;\n  padding: 10px;\n  margin: 60px 0 10px 0;\n  /* Remove me some day */\n}\n.content div.todo:before {\n  content: \"TODO\";\n  font-weight: bold;\n}\nbody a.button-a,\nbody button.button-a,\nbody input.button-a {\n  -webkit-border-radius: 3px;\n  -webkit-background-clip: padding-box;\n  -moz-border-radius: 3px;\n  -moz-background-clip: padding;\n  border-radius: 3px;\n  background-clip: padding-box;\n  font-size: 14px;\n  font-size: 0.875rem;\n  line-height: 25.2px;\n  line-height: 1.57rem;\n  height: 36px;\n  line-height: 36px;\n  padding: 0 1.1em;\n  font-weight: 700;\n  color: #3e3e3e;\n  white-space: nowrap;\n  text-decoration: none;\n  display: inline-block;\n  cursor: pointer;\n  border: 0;\n  vertical-align: middle;\n  margin: 1px 0;\n  background: transparent;\n}\nbody a.button-a.icon-pos-left,\nbody button.button-a.icon-pos-left,\nbody input.button-a.icon-pos-left {\n  padding-left: .8em;\n}\nbody a.button-a.icon-pos-right,\nbody button.button-a.icon-pos-right,\nbody input.button-a.icon-pos-right {\n  padding-right: .8em;\n}\nbody a.button-a.button-a-no-text,\nbody button.button-a.button-a-no-text,\nbody input.button-a.button-a-no-text {\n  -webkit-border-radius: 100px;\n  -webkit-background-clip: padding-box;\n  -moz-border-radius: 100px;\n  -moz-background-clip: padding;\n  border-radius: 100px;\n  background-clip: padding-box;\n  width: 36px;\n  padding: 0;\n  text-indent: -999px;\n  overflow: hidden;\n  position: relative;\n  text-align: center;\n}\nbody a.button-a.button-a-no-text:before,\nbody button.button-a.button-a-no-text:before,\nbody input.button-a.button-a-no-text:before {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  margin: -9px 0 0 -9px;\n}\n@media (max-width: 900px) {\n  body a.button-a.button-a-mobile-collapsed,\n  body button.button-a.button-a-mobile-collapsed,\n  body input.button-a.button-a-mobile-collapsed {\n    -webkit-border-radius: 100px;\n    -webkit-background-clip: padding-box;\n    -moz-border-radius: 100px;\n    -moz-background-clip: padding;\n    border-radius: 100px;\n    background-clip: padding-box;\n    width: 36px;\n    padding: 0;\n    text-indent: -999px;\n    overflow: hidden;\n    position: relative;\n    text-align: center;\n  }\n  body a.button-a.button-a-mobile-collapsed:before,\n  body button.button-a.button-a-mobile-collapsed:before,\n  body input.button-a.button-a-mobile-collapsed:before {\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    margin: -9px 0 0 -9px;\n  }\n  body a.button-a.button-a-mobile-collapsed:before,\n  body button.button-a.button-a-mobile-collapsed:before,\n  body input.button-a.button-a-mobile-collapsed:before {\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    margin: -9px 0 0 -9px;\n  }\n}\nbody a.button-a:active,\nbody button.button-a:active,\nbody input.button-a:active,\nbody a.button-a:hover,\nbody button.button-a:hover,\nbody input.button-a:hover {\n  color: #fff;\n  background: #23adc2;\n}\nbody a.button-a:focus,\nbody button.button-a:focus,\nbody input.button-a:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px #93c6ef;\n  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px #93c6ef;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px #93c6ef;\n}\nbody a.button-a-soft,\nbody button.button-a-soft,\nbody input.button-a-soft {\n  background: #e7e7e7;\n}\nbody a.button-a-soft:active,\nbody button.button-a-soft:active,\nbody input.button-a-soft:active,\nbody a.button-a-soft:hover,\nbody button.button-a-soft:hover,\nbody input.button-a-soft:hover {\n  color: #3e3e3e;\n  background: #cecece;\n}\nbody a.button-a-background,\nbody button.button-a-background,\nbody input.button-a-background,\nbody a.navigation-b ul li a:hover,\nbody button.navigation-b ul li a:hover,\nbody input.navigation-b ul li a:hover {\n  color: #fff;\n  background: #27c0d8;\n}\nbody a.button-a-background:active,\nbody button.button-a-background:active,\nbody input.button-a-background:active,\nbody a.button-a-background:hover,\nbody button.button-a-background:hover,\nbody input.button-a-background:hover,\nbody a.navigation-b ul li a:hover:active,\nbody button.navigation-b ul li a:hover:active,\nbody input.navigation-b ul li a:hover:active,\nbody a.navigation-b ul li a:hover:hover,\nbody button.navigation-b ul li a:hover:hover,\nbody input.navigation-b ul li a:hover:hover {\n  color: #fff;\n  background: #23adc2;\n}\n.balloon-a {\n  font-size: 12px;\n  font-size: 0.75rem;\n  line-height: 21.6px;\n  line-height: 1.35rem;\n  -webkit-border-radius: 3px;\n  -webkit-background-clip: padding-box;\n  -moz-border-radius: 3px;\n  -moz-background-clip: padding;\n  border-radius: 3px;\n  background-clip: padding-box;\n  border-bottom: 3px solid #d4d4d4;\n  background: #ebebeb;\n  display: inline-block;\n  white-space: nowrap;\n  padding: .4em 1.2em .2em;\n  font-weight: 700;\n  position: relative;\n  z-index: 1000;\n  text-transform: none;\n  color: #575757;\n}\n.balloon-a:hover {\n  color: #575757;\n}\n.balloon-a:before {\n  content: '';\n  width: 0;\n  height: 0;\n  border-style: solid;\n  position: absolute;\n}\n.balloon-a-ne:before,\n.balloon-a-nw:before {\n  top: -13px;\n  border-width: 0 9px 15.6px 9px;\n  border-color: transparent transparent #ebebeb transparent;\n}\n.balloon-a-se:before,\n.balloon-a-sw:before {\n  bottom: -13px;\n  border-width: 15.6px 9px 0 9px;\n  border-color: #ebebeb transparent transparent transparent;\n}\n.balloon-a-nw:before,\n.balloon-a-sw:before {\n  left: 20px;\n}\n.balloon-a-ne:before,\n.balloon-a-se:before {\n  right: 20px;\n}\n.icon-pos-left:before,\n.icon-pos-right:after {\n  content: '';\n  display: inline-block;\n  width: 18px;\n  height: 18px;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n}\n.icon-pos-left:before {\n  margin-right: 10px;\n}\n.icon-pos-right:after {\n  margin-left: 10px;\n}\n.icon-download:before,\n.icon-download:after {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAQFJREFUOBGtVDESgjAQBGfobHwE/AIa/AN/8EEWfMWGZ+gDaG2ws8BdyY13SRgGcGducre3WQ5NSJIIxnGsES3ijhhcMCdXR7ZYCqIc0SGWQE1ud7sKjRLxXHJQfWpLYwaCk6wxET/u+U2GIngd8yRViINau28bBH/YAGqvSQPhRNQHqBqj3FY0NKq27TW7qhSTDaCOhkaRAj7Hmm8S4V+c6C+gUa+crsizuWmoc70MKbWCnqPy2GvcUJxE4a/sIajRaGkU+/sf4IuISQGePR/T/QMbHEhwPLVnMWPuOCwGnWg41dwVeaN3ccHch70idIRi/6WV0WC2/zMiZm661R+2DxyEdjTuST3mAAAAAElFTkSuQmCC\");\n}\n.icon-question-mark:before,\n.icon-question-mark:after {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAUhJREFUOBGllLFOAkEQhjk0WthT2JFA7Czsqc7OxFLewEeAZ/AVbO0tTLTSBKhstTBUNkYLEoVAbD2//zILe5e9uwCT/JnZmX/+m83ebq0WsCRJYnANxmBhUKxcHGjJpiC1wQBUmTjtbLetKHTAT5WCVxe3kxEjoUmKRL6pvYEZyJt6VpOxCG3nmfyx+yJxBM7BFPg2SDlkTv2sxZqi4YnUvfgswI9FuHAkzz9EUTTRmqYeTifXsvoj/s9i57oi6ljz9kviFdyBCbgHe+rCn4C8jVXQ18rshuKOiTSIXwLkRZWQTurARJrE7wERpea7kD7BkcgB+yB3CFGlPmgqCNiXhEagSGif2qU1Ln8FW/tupK3pXhXZrWNDuCoikY/rHPMT5KFr2MAPTSM90rIrUjJIeq1WV0RTwN7+0rrtILb9M+LEbLq1H7Z/Ea3+RvBddl0AAAAASUVORK5CYII=\");\n}\n.icon-close:before,\n.icon-close:after {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAUlJREFUOBGllDFuwzAMRe3Cd+jYKUCzd/XkDtm9dsoVOuUqBnqBoodwgBwiW8ZsXTIWqPu+Iia0LMAoTOBbJEV+UZTkosjIMAwN6MARXCKky9dkUsYuglagB3OimNU4O1pM1OB7jsHNK7YekeFQJZ5kj/0LcnLA+RMnlHOvDMNv5wO7BFuQkn3hq0ALjKwPVeF4BSaqpLRy0T1ZIHFz75bE2BR8dBImqmBrwRplg09QmR/9GZyBSadAHauXCZkRROKURLlHEemepJIlIyhHotzLg1/N6erTxtmmvqA8muHGIbc1rTBqrEuwnqWnGbbmmz0hwaHtvM2QhWbrXZnosvnTWWPrdCY9w7cDJtf3h9VHjy5Zq9UZ08beyJh7Aicg6W/VYvgnIjJdNn9PMIOITJWcgnV9VvcnEitY/mitNFZZ/hsxsljdv39sfybRQ4R/kU0MAAAAAElFTkSuQmCC\");\n}\n.ie8 .switch > * {\n  vertical-align: middle;\n}\n.ie8 .switch input[type=\"radio\"] {\n  margin: 0 0.25em;\n  display: inline-block;\n}\n.ie8 .switch label {\n  margin-left: 0 !important;\n  margin-right: 0 !important;\n}\n.ie8 .switch label[data-for=\"1\"] {\n  float: left;\n}\n.ie8 .switch label[data-for=\"2\"] {\n  float: right;\n}\n.ie8 .switch .switch-inner {\n  display: none;\n}\n.switch {\n  font-size: 14px;\n  font-size: 0.875rem;\n  line-height: 25.2px;\n  line-height: 1.57rem;\n  font-weight: bold;\n  background-color: #27c0d8;\n  overflow: hidden;\n  display: inline-block;\n  padding: 0.75em 0.25em;\n  color: #fff;\n  -webkit-border-radius: 3px;\n  -webkit-background-clip: padding-box;\n  -moz-border-radius: 3px;\n  -moz-background-clip: padding;\n  border-radius: 3px;\n  background-clip: padding-box;\n  position: relative;\n}\n.switch input[type=\"radio\"] {\n  display: none;\n}\n.switch label {\n  position: relative;\n  z-index: 2;\n  float: left;\n  cursor: pointer;\n  padding: 0 0.75em;\n}\n.switch label:hover {\n  text-decoration: underline;\n}\n.switch .switch-inner {\n  float: left;\n  background-color: #FFF;\n  height: 1.5em;\n  width: 4.125em;\n  padding: 2px;\n  margin: 0 0.25em;\n  -webkit-border-radius: 5.5px;\n  -webkit-background-clip: padding-box;\n  -moz-border-radius: 5.5px;\n  -moz-background-clip: padding;\n  border-radius: 5.5px;\n  background-clip: padding-box;\n}\n.switch .switch-inner .handler {\n  overflow: hidden;\n  position: relative;\n  display: block;\n  height: 1.5em;\n  width: 1.5em;\n  background: #25b4cb;\n  -webkit-border-radius: 4.5px;\n  -webkit-background-clip: padding-box;\n  -moz-border-radius: 4.5px;\n  -moz-background-clip: padding;\n  border-radius: 4.5px;\n  background-clip: padding-box;\n}\n.switch .switch-inner .handler:before {\n  content: '';\n  display: block;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 3px;\n  left: 0;\n  background-color: #34c4da;\n  -webkit-border-bottom-left-radius: 4.5px;\n  -moz-border-radius-bottomleft: 4.5px;\n  border-bottom-left-radius: 4.5px;\n  -webkit-border-bottom-right-radius: 4.5px;\n  -webkit-background-clip: padding-box;\n  -moz-border-radius-bottomright: 4.5px;\n  -moz-background-clip: padding;\n  border-bottom-right-radius: 4.5px;\n  background-clip: padding-box;\n}\n.switch:hover .switch-inner .handler:before {\n  background: #45c9dd;\n}\n.switch input[data-num=\"2\"]:checked ~ .switch-inner > .handler {\n  margin-left: auto;\n}\n.switch input[data-num=\"2\"]:checked ~ label[data-for=\"1\"] {\n  padding-right: 5.125em;\n  margin-right: -4.375em;\n}\n.switch input[data-num=\"1\"]:checked ~ label[data-for=\"2\"] {\n  padding-left: 5.125em;\n  margin-left: -4.375em;\n}\n.toggler {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.toggler label {\n  cursor: pointer;\n}\n.toggler [data-collapse] {\n  display: inherit;\n}\n.toggler [data-expand] {\n  display: none;\n}\n.toggler.collapsed [data-collapse] {\n  display: none;\n}\n.toggler.collapsed [data-expand] {\n  display: inherit;\n}\n.toggler-container {\n  overflow: hidden;\n}\n.toggler-container.collapsed {\n  height: 0;\n}\n.icon-toggler-expanded:before,\n.icon-toggler-collapsed:before,\n.icon-toggler-expanded:after,\n.icon-toggler-collapsed:after {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAByCAYAAABeOoENAAAAAXNSR0IArs4c6QAAAbxJREFUaAXtmT1KBEEQhRdFQdBEMfQEBoaGopl3MfECXsFERLyBh/AUIuwJDEUQM//eB11Dz1A1uzotGFTBY2rr58306+kNpmazP7Z98V8Kj8JrAT4xcgttXRVXwofwFYAcNdS6RuJegOBTuBUOhc0CfGLkqKHWJeMuFDwJJ0Jk5Kihlp6esW4embuNkVgTNdTS09MMEbkDj76sUUsPvZ2xIwTRATsQuBuxGsTIYdSSo7cztpggwprdyKlJ8ImZUUuM3s48ol1lXwQjwydm5hINl2bF53KMCL82d2mR2GvqnBfg1+aKPbb9p+oGtYXbT1GTFxKiZkfEyHgy7x0y0clR454zSGpDMzaA3fzV30hNln4qkAqkAqlAKpAKpAKpQCqQCqQCqUAqkAqkAqlAKpAKpAKpQCrw3xWY/GGcz++TP9U3Gx40GWdEAxabXA33NBywRCOfdzFcCztDJv12Rz7REMpmIc9qPBNWK0J3COWNxegxIrs+KHZcyHpjsZUSXPaypcLtseJFS3tT84WwUZG4S4vEZkl3wl5FYK4rdrT9R9Y1uIbbT12TFxKiZkfEyCYfWojMJv+NGNGPr99GI9DP7P9TCgAAAABJRU5ErkJggg==\");\n}\n.icon-toggler-expanded.icon-light:before,\n.icon-toggler-collapsed.icon-light:before,\n.icon-toggler-expanded.icon-light:after,\n.icon-toggler-collapsed.icon-light:after {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAByCAYAAABeOoENAAAAAXNSR0IArs4c6QAAAcVJREFUaAXtmT9KA1EQxhMlASE2SkpPkCJlStHOu3gGwRPYBAm5gYfwFBKwtrARRAh26vr7ljfx7TrLChtBcAa+zOSbPy/7vcTC6fV+04qimIArsALrBMXiJq1nUzQEc/AOmkw51QzdgUqAWyD7AEswA6MExeKUk6n2+zBInSJ7BKfuaZDKpRpcMa/UQUgTfWSd1jjEmlSTatXzpRlvJKJsacVtXrVlB72bWgjdiGwmEj8FOq1u4qapRprJVvkgXbFsZCTxomSqL4ssr0uQrY3TJ/AGjeFfVJlM8diaiCuDdlLiIfmNcP1+/wnu0hoVJ84oq7XeUhNXbE4dgPuEgU2Qh3PFbrx+Gs6E2hD/+tMJ3b+QadB2fiLZsG4/2poG3f6M5MMiDgVCgVAgFAgFQoFQIBQIBUKBUCAUCAVCgVAgFAgFQoFQIBQIBf66AiwLuv1jnAH/Zb/Go5abq/qdwvsLFhJNK583ctfg0Bnmrnwq+zVrYoDZM8E52M1yP9uvqcGmZP6O+CTl3LWYHdTm9yk4aCzilLZHe6XmAuzZEGL30ZrEpr64AUc2wDycK7a7X6P42BpzD+9fv4pIxn4tWznnwm0r/gQpiG1tFshTowAAAABJRU5ErkJggg==\");\n}\n.icon-toggler-expanded:before,\n.icon-toggler-expanded:after {\n  background-position: top left;\n}\n.icon-toggler-collapsed:before,\n.icon-toggler-collapsed:after {\n  background-position: bottom left;\n}\n.modal {\n  padding: 20px;\n  border-radius: 3px;\n  background-color: white;\n  max-width: 700px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  width: 80% !important;\n  top: 50% !important;\n  -webkit-transform: translate(-50%, -50%) !important;\n  -moz-transform: translate(-50%, -50%) !important;\n  -o-transform: translate(-50%, -50%) !important;\n  -ms-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n.modal-close {\n  -webkit-border-radius: 100px;\n  -webkit-background-clip: padding-box;\n  -moz-border-radius: 100px;\n  -moz-background-clip: padding;\n  border-radius: 100px;\n  background-clip: padding-box;\n  cursor: pointer;\n  height: 18px;\n  width: 18px;\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  font-size: 17px;\n  text-align: center;\n  line-height: 19px;\n  background: #cccccc;\n}\nmain .grid-container,\nheader .grid-container,\n.navigation-a > div,\nfooter > div {\n  max-width: 968px;\n}\n.header-a {\n  margin-top: 30px;\n}\n.footer-a {\n  border-top: 1px solid #d9d9d9;\n}\n.adjoined-top {\n  background-color: #27c0d8;\n  color: #fff;\n}\n.adjoined-top .content h1,\n.adjoined-top .content h2,\n.adjoined-top .content h3,\n.adjoined-top .content h4,\n.adjoined-top .content h5 {\n  color: #fff;\n}\n.adjoined-top .content p {\n  font-size: 18px;\n  font-size: 1.125rem;\n  line-height: 32.4px;\n  line-height: 2.02rem;\n  font-weight: 100;\n}\n.adjoined-top .content p a {\n  text-decoration: none;\n  border-bottom: 1px dotted #fff;\n  color: inherit;\n}\n.adjoined-top .content p a:hover {\n  color: #e6e6e6;\n}\n.adjoined-top .content button {\n  color: #fff;\n}\n.adjoined-top .content strong {\n  color: #fff;\n}\n.adjoined-top .content code {\n  font-size: inherit;\n  color: #27c0d8;\n}\n.adjoined-bottom {\n  position: relative;\n}\n.adjoined-bottom:before {\n  z-index: -1;\n  content: '';\n  background: #27c0d8;\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: 50%;\n}\nmain .grid-container,\nheader .grid-container,\n.navigation-a > div,\nfooter > div {\n  max-width: 1052px;\n}\nmain .grid-container.freed-width {\n  max-width: none;\n}\n.switch {\n  background: #25b4cb;\n  float: right;\n  overflow: visible;\n}\n.switch .balloon-a {\n  position: absolute;\n  top: -40px;\n  right: 50%;\n  margin-right: -15px;\n  background: #FFEFC1;\n  border-bottom-color: #DCDCA4;\n}\n.switch .balloon-a:before {\n  border-color: #FFEFC1 transparent transparent transparent;\n}\n#toolbar .editors-container {\n  overflow: hidden;\n  height: 0;\n  transition: height 200ms;\n}\n#toolbar .editors-container.active {\n  height: auto;\n}\n#main #editor {\n  background: #FFF;\n  padding: 2% 4%;\n  border: dashed 5px #27c0d8;\n}\ndiv.cke a.cke_button,\ndiv.cke .cke_combo_button {\n  border-bottom: none;\n}\ndiv.cke a.cke_button.cke_combo_button,\ndiv.cke .cke_combo_button.cke_combo_button {\n  border-bottom: 1px solid #a6a6a6;\n}\n#main .adjoined-top:before {\n  height: 335px;\n}\n#toolbar .adjoined-top:before {\n  height: 219px;\n}\n#toolbar .adjoined-top .grid-container-nested {\n  height: 147px;\n}\n.content .grid-switch-magic {\n  margin: 3.5em 0 0;\n}\n#info-box {\n  padding-bottom: 0;\n}\n#info-box > div {\n  width: 100%;\n  text-align: right;\n}\n#info-box > div .toggler {\n  padding-right: 0;\n}\n#info-box > div .toggler:hover {\n  background: transparent;\n  color: #000;\n}\n#info-box > div .toggler:hover > label {\n  text-decoration: underline;\n}\n#info-box > div h2 {\n  float: left;\n  margin-top: 0;\n}\n#info-box > div#instructions-container {\n  text-align: left;\n}\n#toolbarModifierWrapper {\n  overflow: hidden;\n  height: 0;\n  opacity: 0;\n  transition: height 200ms;\n}\n#toolbarModifierWrapper.active {\n  height: auto;\n  opacity: 1;\n}\nheader {\n  overflow: visible;\n}\nheader div.grid-container {\n  overflow: visible;\n}\nheader .navigation-b {\n  overflow: visible;\n}\nheader .navigation-b ul {\n  overflow: visible;\n}\nheader .navigation-b a {\n  position: relative;\n}\nheader .balloon-a {\n  position: absolute;\n  top: 48px;\n  left: 50%;\n  margin-left: -35px;\n}\n@media (max-width: 1140px) {\n  header .balloon-a {\n    left: auto;\n    margin-left: auto;\n    right: 50%;\n    margin-right: -35px;\n  }\n  header .balloon-a:before {\n    left: auto;\n    right: 22px;\n  }\n}\n@media (max-width: 900px) {\n  header .balloon-a {\n    display: none;\n  }\n}\n#toolbar .cke_toolbar {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  cursor: default;\n}\n.some-toolbar-active .cke_toolbar {\n  zoom: 1;\n  filter: alpha(opacity=50);\n  -webkit-opacity: 0.5;\n  -moz-opacity: 0.5;\n  opacity: 0.5;\n}\n.cke_toolbar.active {\n  position: relative;\n  zoom: 1;\n  filter: alpha(opacity=100);\n  -webkit-opacity: 1;\n  -moz-opacity: 1;\n  opacity: 1;\n}\n.cke_toolbar.active:after {\n  content: '';\n  display: block;\n  position: absolute;\n  top: 0;\n  right: 6px;\n  bottom: 5px;\n  left: 0;\n  -webkit-border-radius: 5px;\n  -webkit-background-clip: padding-box;\n  -moz-border-radius: 5px;\n  -moz-background-clip: padding;\n  border-radius: 5px;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0px 0px 15px 3px #fff4b0;\n  -moz-box-shadow: 0px 0px 15px 3px #fff4b0;\n  box-shadow: 0px 0px 15px 3px #fff4b0;\n}\n.cke_toolbar.active .cke_toolgroup {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  border-color: #e3c300;\n}\n.cke_toolbar.active .cke_combo,\n.cke_toolbar.active .cke_toolgroup {\n  position: relative;\n  z-index: 2;\n}\n.cke_toolbar.active .cke_combo_button {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n.unselectable {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.toolbar {\n  padding: 5px 0;\n  margin-bottom: 2.4em;\n  overflow: hidden;\n  background: #fff;\n}\n.toolbar button.button-a.cke_button {\n  cursor: pointer;\n  display: inline-block;\n  padding: 4px 6px;\n  outline: 0;\n  border: 1px solid #a6a6a6;\n}\n.toolbar button.button-a.hidden {\n  display: none;\n}\n.toolbar button.button-a.left {\n  float: left;\n  margin-right: 8px;\n}\n.toolbar button.button-a.right {\n  float: right;\n  margin-left: 8px;\n}\n.toolbar button.button-a .highlight {\n  color: #ffefc1;\n}\n.configContainer.hidden,\n.toolbarModifier.hidden,\n.toolbarModifier-hints.hidden {\n  display: none;\n}\n.toolbarModifier :focus,\n.toolbar button:focus,\n.configContainer textarea.configCode:focus {\n  outline: none;\n}\ndiv.toolbarModifier {\n  padding: 0;\n  overflow: hidden;\n  width: 100%;\n  position: relative;\n  display: table;\n  border-collapse: collapse;\n}\ndiv.toolbarModifier ::-moz-focus-inner {\n  border: 0;\n}\ndiv.toolbarModifier .empty {\n  display: none;\n}\ndiv.toolbarModifier.empty-visible .empty {\n  display: table-row;\n  zoom: 1;\n  filter: alpha(opacity=60);\n  -webkit-opacity: 0.6;\n  -moz-opacity: 0.6;\n  opacity: 0.6;\n}\ndiv.toolbarModifier .empty > p {\n  line-height: 31px;\n}\ndiv.toolbarModifier > ul {\n  padding: 0;\n  margin: 0;\n  border-top: 1px solid #cccccc;\n  width: 100%;\n}\ndiv.toolbarModifier > ul[data-type=\"table-header\"] {\n  display: table-header-group;\n}\ndiv.toolbarModifier > ul[data-type=\"table-body\"] {\n  display: table-row-group;\n}\ndiv.toolbarModifier > ul p {\n  padding: 0;\n  margin: 0;\n}\ndiv.toolbarModifier > ul > li {\n  display: table-row;\n}\ndiv.toolbarModifier > ul > li[data-type=\"header\"] {\n  font-weight: bold;\n  user-select: none;\n  cursor: default;\n}\ndiv.toolbarModifier > ul > li[data-type=\"group\"],\ndiv.toolbarModifier > ul > li[data-type=\"separator\"] {\n  border-bottom: 1px solid #cccccc;\n}\ndiv.toolbarModifier > ul > li[data-type=\"subgroup\"] {\n  border-top: 1px solid #eee;\n}\ndiv.toolbarModifier > ul > li[data-type=\"subgroup\"]:first-child {\n  border-top: none;\n}\ndiv.toolbarModifier > ul > li[data-type=\"group\"].active,\ndiv.toolbarModifier > ul > li[data-type=\"group\"]:hover,\ndiv.toolbarModifier > ul > li[data-type=\"separator\"].active,\ndiv.toolbarModifier > ul > li[data-type=\"separator\"]:hover {\n  overflow: hidden;\n  z-index: 2;\n}\ndiv.toolbarModifier > ul > li[data-type=\"group\"].active,\ndiv.toolbarModifier > ul > li[data-type=\"separator\"].active,\ndiv.toolbarModifier > ul > li[data-type=\"group\"].active:hover,\ndiv.toolbarModifier > ul > li[data-type=\"separator\"].active:hover {\n  background: #f0fafb;\n}\ndiv.toolbarModifier > ul > li[data-type=\"group\"]:hover,\ndiv.toolbarModifier > ul > li[data-type=\"separator\"]:hover {\n  background: #fffbe3;\n}\ndiv.toolbarModifier > ul > li[data-type=\"separator\"] {\n  background: #f5f5f5;\n}\ndiv.toolbarModifier > ul > li[data-type=\"separator\"]:after {\n  content: '';\n  width: 100%;\n}\ndiv.toolbarModifier > ul > li[data-type=\"separator\"] > p {\n  padding: 2px 5px;\n}\ndiv.toolbarModifier > ul > li > p,\ndiv.toolbarModifier > ul > li > ul {\n  display: table-cell;\n  vertical-align: middle;\n}\ndiv.toolbarModifier > ul > li p {\n  padding-left: 5px;\n  min-width: 200px;\n}\ndiv.toolbarModifier > ul > li p span {\n  white-space: nowrap;\n  cursor: default;\n}\ndiv.toolbarModifier > ul > li p span button {\n  font-size: 12.666px;\n  margin-right: 5px;\n  cursor: pointer;\n  background: #fff;\n  -webkit-border-radius: 5px;\n  -webkit-background-clip: padding-box;\n  -moz-border-radius: 5px;\n  -moz-background-clip: padding;\n  border-radius: 5px;\n  background-clip: padding-box;\n  border: 1px solid #bbb;\n  padding: 0 7px;\n  line-height: 12px;\n  height: 20px;\n}\ndiv.toolbarModifier > ul > li p span button:not(.disabled):hover,\ndiv.toolbarModifier > ul > li p span button:not(.disabled):focus {\n  color: #fff;\n  background-color: #454545;\n  border-color: transparent;\n}\ndiv.toolbarModifier > ul > li p span button.move.disabled {\n  cursor: default;\n  zoom: 1;\n  filter: alpha(opacity=20);\n  -webkit-opacity: 0.2;\n  -moz-opacity: 0.2;\n  opacity: 0.2;\n}\ndiv.toolbarModifier > ul > li ul {\n  border-collapse: collapse;\n  padding: 0;\n  width: 100%;\n}\ndiv.toolbarModifier > ul > li ul li {\n  display: table-row;\n  list-style-type: none;\n  line-height: 1;\n}\ndiv.toolbarModifier > ul > li ul li[data-type=\"subgroup\"] {\n  border-top: 1px solid #dddddd;\n}\ndiv.toolbarModifier > ul > li ul li[data-type=\"subgroup\"]:first-child {\n  border-top: 0;\n}\ndiv.toolbarModifier > ul > li ul li[data-type=\"subgroup\"] [data-type=\"button\"] {\n  -webkit-border-radius: 3px;\n  -webkit-background-clip: padding-box;\n  -moz-border-radius: 3px;\n  -moz-background-clip: padding;\n  border-radius: 3px;\n  background-clip: padding-box;\n  padding: 0 2px;\n}\ndiv.toolbarModifier > ul > li ul li[data-type=\"subgroup\"] [data-type=\"button\"]:focus {\n  background: rgba(0, 0, 0, 0.04);\n}\ndiv.toolbarModifier > ul > li ul li[data-type=\"subgroup\"] [data-type=\"button\"] input {\n  vertical-align: middle;\n}\ndiv.toolbarModifier > ul > li ul li > p,\ndiv.toolbarModifier > ul > li ul li > ul {\n  display: table-cell;\n  vertical-align: middle;\n}\ndiv.toolbarModifier > ul > li ul li ul {\n  padding: 0;\n}\ndiv.toolbarModifier > ul > li ul li ul li {\n  padding: 0;\n  display: inline-block;\n  cursor: pointer;\n  margin: 2px 5px 2px 0;\n}\ndiv.toolbarModifier > ul > li ul li ul li .cke_combo_text {\n  cursor: pointer;\n  white-space: nowrap;\n}\ndiv.toolbarModifier > ul > li ul li ul li .cke_toolgroup,\ndiv.toolbarModifier > ul > li ul li ul li .cke_combo_button {\n  cursor: pointer;\n  margin: 0;\n  vertical-align: middle;\n  border: 1px solid #ddd;\n  font-size: 11.41px;\n  font-size: 0.713rem;\n  line-height: 20.54px;\n  line-height: 1.28rem;\n}\ndiv.toolbarModifier > .codemirror-wrapper {\n  overflow-y: auto;\n}\ndiv.toolbarModifier-hints {\n  float: right;\n  width: 350px;\n  min-width: 150px;\n  overflow-y: auto;\n  margin-left: 1.5em;\n}\ndiv.toolbarModifier-hints h3 {\n  font-size: 18.08px;\n  font-size: 1.13rem;\n  line-height: 32.54px;\n  line-height: 2.03rem;\n  padding: 0.36em 1.5em;\n  background: #f5f5f5;\n  border-bottom: 1px solid #dddddd;\n  margin-top: 0;\n  margin-bottom: 1.2em;\n}\ndiv.toolbarModifier-hints dl {\n  margin-bottom: 1.2em;\n  overflow: hidden;\n}\ndiv.toolbarModifier-hints dl .list-header {\n  font-weight: bold;\n  border: 0;\n  padding-bottom: 0.6em;\n}\ndiv.toolbarModifier-hints dl > p {\n  text-align: center;\n}\ndiv.toolbarModifier-hints dl dt {\n  float: left;\n  width: 9em;\n  clear: both;\n  text-align: right;\n  border-top: 1px solid #dddddd;\n  padding-left: 1.5em;\n  padding-right: .1em;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\ndiv.toolbarModifier-hints dl dt code {\n  background: none;\n  border: none;\n  vertical-align: middle;\n}\ndiv.toolbarModifier-hints dl dd {\n  margin-left: 10em;\n  clear: right;\n  padding-right: 1.5em;\n}\ndiv.toolbarModifier-hints dl dd code {\n  line-height: 2.2em;\n}\ndiv.toolbarModifier-hints dl dd:after {\n  content: '\\00a0';\n  display: block;\n  clear: left;\n  float: right;\n  height: 0;\n  width: 0;\n}\n.toolbarModifier-hints,\n.configContainer textarea.configCode,\n.CodeMirror {\n  -webkit-border-radius: 3px;\n  -webkit-background-clip: padding-box;\n  -moz-border-radius: 3px;\n  -moz-background-clip: padding;\n  border-radius: 3px;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  font-size: 13.01px;\n  font-size: 0.813rem;\n  line-height: 23.42px;\n  line-height: 1.46rem;\n}\n.configContainer textarea.configCode,\n.CodeMirror pre,\n.CodeMirror-linenumber {\n  font-size: 13.01px;\n  font-size: 0.813rem;\n  line-height: 23.42px;\n  line-height: 1.46rem;\n  font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;\n}\n.CodeMirror pre {\n  border: none;\n  padding: 0;\n  margin: 0;\n}\n.configContainer textarea.configCode {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  color: #575757;\n  padding: 10px;\n  width: 100%;\n  min-height: 500px;\n  margin: 0;\n  resize: none;\n  outline: none;\n  -moz-tab-size: 4;\n  tab-size: 4;\n  white-space: pre;\n  word-wrap: normal;\n  overflow: auto;\n}\n.CodeMirror-hints.toolbar-modifier {\n  padding: 0;\n  color: #575757;\n  font-size: 14px;\n  font-size: 0.875rem;\n  line-height: 25.2px;\n  line-height: 1.57rem;\n  font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;\n}\n.CodeMirror-hints.toolbar-modifier .CodeMirror-hint-active {\n  color: #575757;\n  background: #f0fafb;\n}\n.CodeMirror-hints.toolbar-modifier > li:hover {\n  background: #fffbe3;\n}\n/* Text modifier */\n#toolbarModifierWrapper {\n  margin-bottom: 1.2em;\n}\n#toolbarModifierWrapper .invalid .CodeMirror {\n  background: #fff8f8;\n  border-color: red;\n}\n#toolbarModifierWrapper .CodeMirror {\n  height: auto;\n  padding: 0 0.6em;\n}\n.staticContainer {\n  position: fixed;\n  top: 0;\n  width: 100%;\n  z-index: 10;\n}\n.staticContainer > .grid-container {\n  max-width: 1052px;\n}\n.staticContainer > .grid-container .inner {\n  background: #fff;\n}\n.staticContainer > .grid-container .inner .toolbar {\n  margin-bottom: 0;\n}\n#help {\n  position: relative;\n  top: -15px;\n  left: -5px;\n}\n#help-content {\n  display: none;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2dsb2JhbC9nbG9iYWwubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2NvcmUvY29yZS5sZXNzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nrc291cmNlLXNhbXBsZXMtZnJhbWV3b3JrL2NvbXBvbmVudHMvZ3JpZC9ncmlkLmxlc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2tzb3VyY2Utc2FtcGxlcy1mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xlc3NoYXQvYnVpbGQvbGVzc2hhdC5sZXNzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nrc291cmNlLXNhbXBsZXMtZnJhbWV3b3JrL2NvbXBvbmVudHMvaGVhZGVyLWEvaGVhZGVyLWEubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL25hdmlnYXRpb24tYS9uYXZpZ2F0aW9uLWEubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL25hdmlnYXRpb24tYi9uYXZpZ2F0aW9uLWIubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2Zvb3Rlci1hL2Zvb3Rlci1hLmxlc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2tzb3VyY2Utc2FtcGxlcy1mcmFtZXdvcmsvY29tcG9uZW50cy9jb250ZW50L2NvbnRlbnQubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2J1dHRvbi1hL2J1dHRvbi1hLmxlc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2tzb3VyY2Utc2FtcGxlcy1mcmFtZXdvcmsvY29tcG9uZW50cy9iYWxsb29uLWEvYmFsbG9vbi1hLmxlc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2tzb3VyY2Utc2FtcGxlcy1mcmFtZXdvcmsvY29tcG9uZW50cy9pY29uL2ljb24ubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL3N3aXRjaC9zd2l0Y2gubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL3RvZ2dsZXIvdG9nZ2xlci5sZXNzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nrc291cmNlLXNhbXBsZXMtZnJhbWV3b3JrL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2Jhc2ljc2FtcGxlL2NvcmUubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2Jhc2ljc2FtcGxlL2Fkam9pbmVkLmxlc3MiLCIuLi8uLi9zYW1wbGVzL2xlc3MvY3VzdG9tLmxlc3MiLCIuLi8uLi9zYW1wbGVzL3Rvb2xiYXJjb25maWd1cmF0b3IvbGVzcy90b29sYmFybW9kaWZpZXIubGVzcyIsIi4uLy4uL3NhbXBsZXMvdG9vbGJhcmNvbmZpZ3VyYXRvci9sZXNzL2Jhc2UubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBc0RBLFFBSGlDO0VBeUNoQztJQUNDLHdCQUFBOzs7QUMxRkY7QUFBUztBQUFPO0FBQVM7QUFBWTtBQUFRO0FBQVE7QUFBUTtBQUFRO0FBQU07QUFBTTtBQUFLO0VBQ3JGLGNBQUE7O0FBR0Q7QUFBTTtFQUNMLFNBQUE7RUFDQSxVQUFBO0VBQ0Esd0JETitCLHVDQ00vQjtFQUNBLGdCQUFBO0VBQ0EsY0FBQTs7QUNIQSxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsV0FBQTs7QUY0Q0YsUUFIaUM7RUVqQ2hDO0VBS0MsWUFBWTtFQUFaLFlBQVk7RUFBWixZQUFZO0VBQVosWUFBWTtFQUFaLFlBQVk7RUFBWixZQUFZO0VBQVosWUFBWTtFQUFaLFlBQVk7RUFBWixZQUFZO0lBSlosV0FBQTs7O0FBYUYsQ0FBQztFQ3FSQyw4QkFBQTtFQUNBLDJCQUFBO0VBQ0Esc0JBQUE7RURyUkQsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLFdBQUE7O0FBSUEsQ0FEQSxxQkFDQztBQUFELGVBQUM7QUFBUSxDQURULHFCQUNVO0FBQUQsZUFBQztFQUNULFNBQVMsRUFBVDtFQUNBLGNBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLGNBQUE7RUFDQSxRQUFBO0VBQ0EsU0FBQTs7QUFLRCxDQURBLHFCQUNDO0FBQUQsZUFBQztFQUNBLFdBQUE7O0FBSUY7RUMyUEUsOEJBQUE7RUFDQSwyQkFBQTtFQUNBLHNCQUFBO0VEM1BELGlCQUFBO0VBQ0Esa0JBQUE7O0FBS0Msc0JBREQsRUFBQyxxQkFDQztFQUNBLGVBQUE7O0FBR0Qsc0JBTEQsRUFBQyxxQkFLQztFQUNBLGdCQUFBOztBRmpCSCxRQUhpQztFRTBCOUIsc0JBREQsRUFBQyxxQkFDQztJQUNBLGdCQUFBOztFQUdELHNCQUxELEVBQUMscUJBS0M7SUFDQSxpQkFBQTs7O0FFN0VKO0VBQ0MsaUJBQUE7RUFHQSxnQkFBQTs7QUFKRCxTQU1DO0VBQ0MsZ0JBQUE7O0FKMENGLFFBSGlDO0VBR2pDLFNJM0NDO0lBSUUsa0JBQUE7OztBQVZILFNBTUMsZUFPQztFQUNDLG1CQUFBOztBQ1ZIO0VBQ0MsWUFBQTtFQUNBLG1CQUFBO0VBQ0Esa0JBQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLE1BQUE7RUFDQSxVQUFBO0VBQ0EsZ0JBQUE7O0FMcUNELFFBSGlDO0VBR2pDO0lLbENFLGtCQUFBOzs7QUFYRixhQWNDO0VBQ0MsZ0JBQUE7RUFDQSxTQUFBO0VBQ0EsZ0JBQUE7O0FBakJGLGFBY0MsR0FLQztBQW5CRixhQWNDLEdBS0ssR0FBRztFQUNOLHFCQUFBOztBTHlCSCxRQUhpQztFQUdqQyxhSy9CQztJQVVFLFdBQUE7SUFDQSx1QkFBQTtJQUNBLG1CQUFBO0lBQ0EscUJBQUE7SUFDQSxXQUFBOztFQUVBLGFBaEJGLEdBZ0JHO0VBQVMsYUFoQlosR0FnQmE7SUFDVixhQUFBOzs7QUFLRCxhQXRCRixHQXFCRSxhQUNDO0VBQ0EsZ0JBQUE7O0FMUUosUUFIaUM7RUFHakMsYUsvQkMsR0FxQkUsYUFDQztJQUlDLGdCQUFBOzs7QUFJRixhQTlCRixHQXFCRSxhQVNDO0VBQ0EsaUJBQUE7O0FMQUosUUFIaUM7RUFHakMsYUsvQkMsR0FxQkUsYUFTQztJQUlDLGtCQUFBOzs7QUFNRixhQXhDRixHQXVDQyxHQUNHO0VBQ0QsaUJBQUE7O0FBdkRKLGFBY0MsR0F1Q0MsR0FLQztFTHhDRixlQUFBO0VBQ0EsbUJBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VLdUNHLGlCQUFBO0VBQ0EsV0FBQTtFQUNBLGNBQUE7RUFDQSxpQkFBQTtFQUNBLHFCQUFBO0VBQ0EseUJBQUE7O0FBRUEsYUFyREgsR0F1Q0MsR0FLQyxFQVNFO0VBQ0EsZUFBQTtFQUNBLGNBQUE7O0FBUUoseUJBQUM7QUFBUyx5QkFBQztFQUNWLHNCQUFrQixxckJBQWxCOztBQ3BGRjtFQUNDLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTs7QU5nREQsUUFIaUM7RUFHakM7SU03Q0Usa0JBQUE7SUFDQSxnQkFBQTtJQUdBLFVBQUE7OztBQVZGLGFBYUM7RUFDQyxVQUFBO0VBQ0EsZ0JBQUE7RUFDQSxTQUFBO0VBQ0EsaUJBQUE7O0FBakJGLGFBYUMsR0FNQztBQW5CRixhQWFDLEdBTUssR0FBRztFQUNOLHFCQUFBOztBTitCSCxRQUhpQztFQUdqQyxhTXRDQztJQVdFLGNBQUE7SUFDQSxXQUFBO0lBQ0EscUJBQUE7OztBTnlCSCxRQUhpQztFQUdqQyxhTXRDQyxHQWdCQztJQUVFLGtCQUFBOzs7QUFHRCxhQXJCRixHQWdCQyxHQUtHO0VBQ0QsaUJBQUE7O0FOZ0JKLFFBSGlDO0VBR2pDLGFNdENDLEdBZ0JDLEdBS0c7SUFJQSxjQUFBOzs7QUF0Q0wsYUFhQyxHQWdCQyxHQWFDO0VId1FELDhCQUFBO0VBQ0EsMkJBQUE7RUFDQSxzQkFBQTtFR3hRRSx5QkFBQTtFQUNBLHFCQUFBO0VBQ0EsYUFBQTs7QU5LSixRQUhpQztFQUdqQyxhTXRDQyxHQWdCQyxHQWFDO0lBT0UsV0FBQTtJSHFPSCx3QkFBQTtJQUFpQyxvQ0FBQTtJQUNqQyxxQkFBQTtJQUE4Qiw2QkFBQTtJQUM5QixnQkFBQTtJQUF5Qiw0QkFBQTs7O0FJeFIzQjtFUHdCQyxlQUFBO0VBQ0Esb0JBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VPeEJBLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7O0FBTkQsU1A0RUM7RUFDQyxjQUFBO0VBQ0EscUJBQUE7RUFFQSxpQ0FBQTs7QUFFQSxTQU5ELEVBTUU7RUFDQSxjQUFBOztBT25GSCxTQVFDO0VBQ0MsU0FBQTtFQUNBLHFCQUFBO0VBQ0Esa0JBQUE7O0FDWEY7RVJ3QkMsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFUXpCQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EscUJBQUE7O0FBSkQsUUFTQztFQUNDLGdCQUFBOztBQVZGLFFBYUM7QUFiRCxRQWFLO0FBYkwsUUFhUztBQWJULFFBYWM7QUFiZCxRQWEwQixTQUFRLElBQUk7QUFidEMsUUFhd0Q7RUFDdEQsaUJBQUE7O0FBZEYsUUFpQkM7QUFqQkQsUUFpQk87RUxxUUwsMEJBQUE7RUFBaUMsb0NBQUE7RUFDakMsdUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsa0JBQUE7RUFBeUIsNEJBQUE7RUtyUXpCLGdCQUFBOztBQW5CRixRQXNCQztBQXRCRCxRQXNCTTtBQXRCTixRQXNCWTtBQXRCWixRQXNCaUI7RUFDZixtQkFBQTs7QUF2QkYsUUEwQkM7QUExQkQsUUEwQmE7RUFDWCxnQkFBQTtFQUNBLDhCQUFBO0VBQ0EscUJBQUE7O0FBN0JGLFFBb0NDLEVSd0NBO0FRNUVELFFBb0NJLEdSd0NIO0FRNUVELFFBb0NRLEdSd0NQO0FRNUVELFFBb0NZLFdSd0NYO0FRNUVELFFBb0N3QixHUndDdkI7QVE1RUQsUUFvQzRCLEdSd0MzQjtBUTVFRCxRQW9DZ0MsR1J3Qy9CO0FRNUVELFFBb0NvQyxHUndDbkM7QVE1RUQsUUFvQ3dDLEdSd0N2QztFQUNDLGNBQUE7RUFDQSxxQkFBQTtFQUVBLGlDQUFBOztBQUVBLFFROUNELEVSd0NBLEVBTUU7QUFBRCxRUTlDRSxHUndDSCxFQU1FO0FBQUQsUVE5Q00sR1J3Q1AsRUFNRTtBQUFELFFROUNVLFdSd0NYLEVBTUU7QUFBRCxRUTlDc0IsR1J3Q3ZCLEVBTUU7QUFBRCxRUTlDMEIsR1J3QzNCLEVBTUU7QUFBRCxRUTlDOEIsR1J3Qy9CLEVBTUU7QUFBRCxRUTlDa0MsR1J3Q25DLEVBTUU7QUFBRCxRUTlDc0MsR1J3Q3ZDLEVBTUU7RUFDQSxjQUFBOztBUW5GSCxRQXdDQztBQXhDRCxRQXdDSztBQXhDTCxRQXdDUztBQXhDVCxRQXdDYTtBQXhDYixRQXdDaUI7RUFDZixXQUFBO0VBQ0EsZ0JBQUE7O0FBMUNGLFFBd0NDLEdBS0M7QUE3Q0YsUUF3Q0ssR0FLSDtBQTdDRixRQXdDUyxHQUtQO0FBN0NGLFFBd0NhLEdBS1g7QUE3Q0YsUUF3Q2lCLEdBS2Y7QUE3Q0YsUUF3Q0MsR0FLTztBQTdDUixRQXdDSyxHQUtHO0FBN0NSLFFBd0NTLEdBS0Q7QUE3Q1IsUUF3Q2EsR0FLTDtBQTdDUixRQXdDaUIsR0FLVDtFQUNMLGtCQUFBOztBQTlDSCxRQXdDQyxHQVVDLEVBQUM7QUFsREgsUUF3Q0ssR0FVSCxFQUFDO0FBbERILFFBd0NTLEdBVVAsRUFBQztBQWxESCxRQXdDYSxHQVVYLEVBQUM7QUFsREgsUUF3Q2lCLEdBVWYsRUFBQztFQUNBLGdCQUFBO0VBQ0Esc0JBQUE7RUFDQSxVQUFBO0VBQ0EsU0FBQTs7QUFHRCxRQWpCRCxHQWlCRSxNQUNBLEVBQUM7QUFERixRQWpCRyxHQWlCRixNQUNBLEVBQUM7QUFERixRQWpCTyxHQWlCTixNQUNBLEVBQUM7QUFERixRQWpCVyxHQWlCVixNQUNBLEVBQUM7QUFERixRQWpCZSxHQWlCZCxNQUNBLEVBQUM7RUFDQSxVQUFBOztBQUlGLFFBdkJELEdBdUJFLE9BQ0E7QUFERCxRQXZCRyxHQXVCRixPQUNBO0FBREQsUUF2Qk8sR0F1Qk4sT0FDQTtBQURELFFBdkJXLEdBdUJWLE9BQ0E7QUFERCxRQXZCZSxHQXVCZCxPQUNBO0VMOERELDBEQUFBO0VBQ0EsdURBQUE7RUFDQSxxREFBQTtFQUNBLGtEQUFBO0VLL0RFLFVBQUE7O0FBbEVKLFFBdUVDO0FBdkVELFFBdUVRO0FBdkVSLFFBdUVnQixTQUFRLElBQUk7RUwrTTFCLDBCQUFBO0VBQWlDLG9DQUFBO0VBQ2pDLHVCQUFBO0VBQThCLDZCQUFBO0VBQzlCLGtCQUFBO0VBQXlCLDRCQUFBO0VBbUJ6Qix1REFBQTtFQUNBLG9EQUFBO0VBQ0EsK0NBQUE7RUtsT0EsYUFBQTtFQUNBLGNBQUE7RUFFQSx5QkFBQTtFQUNBLGtCQUFBOztBQUVBLFFBVkQsTUFVRTtBQUFELFFBVk0sT0FVTDtBQUFELFFBVmMsU0FBUSxJQUFJLGdCQVV6QjtFQUNBLHFCQUFBO0VBQ0EsVUFBQTtFTHdORCx3RUFBQTtFQUNBLHFFQUFBO0VBQ0EsZ0VBQUE7O0FLN1NGLFFBOEZDO0VBQ0MsOEJBQUE7RUFDQSxlQUFBOztBQWhHRixRQW1HQztFQUNDLGtCQUFBO0VBQ0EsNkJSbkcyQyx3QlFtRzNDO0VSN0VELGVBQUE7RUFDQSxlQUFBO0VBQ0EsbUJBQUE7RUFDQSxtQkFBQTs7QVEzQkQsUUF5R0M7RUFDQyxrQkFBQTs7QUExR0YsUUE2R0M7RVJyRkEsZUFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFUW9GQyxtQkFBQTs7QUEvR0YsUUFrSEM7RVIxRkEsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0Esb0JBQUE7RVF5RkMsaUJBQUE7O0FBcEhGLFFBdUhDO0VSL0ZBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0VBQ0EsbUJBQUE7RVE4RkMsZ0JBQUE7RUFDQSxrQkFBQTs7QUExSEYsUUE2SEM7RVJyR0EsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0Esb0JBQUE7RVFvR0MsZ0JBQUE7RUFDQSxrQkFBQTs7QUFoSUYsUUFtSUM7RVIzR0EsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0Esb0JBQUE7RVEwR0MsZ0JBQUE7RUFDQSxrQkFBQTs7QUF0SUYsUUF5SUM7RUFDQyxTQUFBO0VBQ0EsNkJBQUE7RUFDQSxlQUFBOztBQUlBLFFBREQsTUFDRTtFQUNBLGFBQUE7RUFDQSxrQkFBQTs7QUFHRCxRQU5ELE1BTUU7RUxpREQsMEJBQUE7RUFDQSx1QkFBQTtFQUNBLGtCQUFBOztBS3hNRixRQTRKQztFUnBJQSxlQUFBO0VBQ0Esa0JBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VRbUlDLG9CUjdKOEIsdUNRNko5QjtFQUNBLGdCQUFBO0VMNElBLDBEQUFBO0VBQ0EsdURBQUE7RUFDQSxrREFBQTs7QUs3U0YsUUF1S0MsRUFDQztFQUNDLHNCQUFBOztBQXpLSCxRQXVLQyxFQUtDO0VBQ0MsY0FBQTs7QUE3S0gsUUFpTEM7RUFDQyxVQUFBO0VBQ0EsU0FBQTtFQUVBLFdBQUE7RUFDQSxjQUFBO0VBQ0EsZ0JBQUE7O0FBdkxGLFFBMExDO0FBMUxELFFBMExNO0VSbEtMLGtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VRa0tDLGdKQUFBOztBQTdMRixRQTBMQyxJQUtDO0FBL0xGLFFBMExNLEtBS0o7RUFDQyxTQUFBOztBQWhNSCxRQXFNQyxJQUFJO0VBQ0gsZUFBQTtFQUNBLGNBQUE7O0FBdk1GLFFBME1DO0VBQ0MsV0FBQTs7QUEzTUYsUUE4TUMsR0FFQztBQWhORixRQThNSyxHQUVIO0FBaE5GLFFBOE1DLEdBRUs7QUFoTk4sUUE4TUssR0FFQztFQUNILGdCQUFBOztBQWpOSCxRQThNQyxHQU1DO0FBcE5GLFFBOE1LLEdBTUg7RVI1TEQsZUFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTs7QVEzQkQsUUEwTkMsU0FBUSxJQUFJO0VBQ1gsV0FBQTs7QUEzTkYsUUE4TkMsSUFBRztFQUNGLHVCQUFBO0VBQ0EsYUFBQTtFQUNBLHFCQUFBOzs7QUFHQSxRQU5ELElBQUcsS0FNRDtFQUNBLFNBQVMsTUFBVDtFQUNBLGlCQUFBOztBQ2pPRCxJQURELEVBQ0U7QUFBRCxJQURFLE9BQ0Q7QUFBRCxJQURVLE1BQ1Q7RU5pUkQsMEJBQUE7RUFBaUMsb0NBQUE7RUFDakMsdUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsa0JBQUE7RUFBeUIsNEJBQUE7RUhoUTFCLGVBQUE7RUFDQSxtQkFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RVNuQkUsWUFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxtQkFBQTtFQUNBLHFCQUFBO0VBQ0EscUJBQUE7RUFDQSxlQUFBO0VBQ0EsU0FBQTtFQUNBLHNCQUFBO0VBSUEsYUFBQTtFQUdBLHVCQUFBOztBQUVBLElBdkJGLEVBQ0UsU0FzQkM7QUFBRCxJQXZCQyxPQUNELFNBc0JDO0FBQUQsSUF2QlMsTUFDVCxTQXNCQztFQUNBLGtCQUFBOztBQUdELElBM0JGLEVBQ0UsU0EwQkM7QUFBRCxJQTNCQyxPQUNELFNBMEJDO0FBQUQsSUEzQlMsTUFDVCxTQTBCQztFQUNBLG1CQUFBOztBQW9CRCxJQWhERixFQUNFLFNBK0NDO0FBQUQsSUFoREMsT0FDRCxTQStDQztBQUFELElBaERTLE1BQ1QsU0ErQ0M7RU5rT0YsNEJBQUE7RUFBaUMsb0NBQUE7RUFDakMseUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsb0JBQUE7RUFBeUIsNEJBQUE7RU1uUHZCLFdBQUE7RUFDQSxVQUFBO0VBQ0EsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7O0FBRUEsSUF4Q0gsRUFDRSxTQStDQyxpQkFSQztBQUFELElBeENBLE9BQ0QsU0ErQ0MsaUJBUkM7QUFBRCxJQXhDUSxNQUNULFNBK0NDLGlCQVJDO0VBQ0Esa0JBQUE7RUFDQSxTQUFBO0VBQ0EsUUFBQTtFQUNBLHFCQUFBOztBVEdMLFFBSGlDO0VBR2pDLElTL0NDLEVBQ0UsU0FtREM7RVRMSixJUy9DSSxPQUNELFNBbURDO0VUTEosSVMvQ1ksTUFDVCxTQW1EQztJTjhORiw0QkFBQTtJQUFpQyxvQ0FBQTtJQUNqQyx5QkFBQTtJQUE4Qiw2QkFBQTtJQUM5QixvQkFBQTtJQUF5Qiw0QkFBQTtJTW5QdkIsV0FBQTtJQUNBLFVBQUE7SUFDQSxtQkFBQTtJQUNBLGdCQUFBO0lBQ0Esa0JBQUE7SUFDQSxrQkFBQTs7RUFFQSxJQXhDSCxFQUNFLFNBbURDLDBCQVpDO0VBQUQsSUF4Q0EsT0FDRCxTQW1EQywwQkFaQztFQUFELElBeENRLE1BQ1QsU0FtREMsMEJBWkM7SUFDQSxrQkFBQTtJQUNBLFNBQUE7SUFDQSxRQUFBO0lBQ0EscUJBQUE7O0VBSkQsSUF4Q0gsRUFDRSxTQW1EQywwQkFaQztFQUFELElBeENBLE9BQ0QsU0FtREMsMEJBWkM7RUFBRCxJQXhDUSxNQUNULFNBbURDLDBCQVpDO0lBQ0Esa0JBQUE7SUFDQSxTQUFBO0lBQ0EsUUFBQTtJQUNBLHFCQUFBOzs7QUFjRixJQTFERixFQUNFLFNBeURDO0FBQUQsSUExREMsT0FDRCxTQXlEQztBQUFELElBMURTLE1BQ1QsU0F5REM7QUFDRCxJQTNERixFQUNFLFNBMERDO0FBQUQsSUEzREMsT0FDRCxTQTBEQztBQUFELElBM0RTLE1BQ1QsU0EwREM7RUFDQSxXQUFBO0VBQ0EsbUJBQUE7O0FBR0QsSUFoRUYsRUFDRSxTQStEQztBQUFELElBaEVDLE9BQ0QsU0ErREM7QUFBRCxJQWhFUyxNQUNULFNBK0RDO0VBQ0EscUJBQUE7RUFDQSxVQUFBO0VOcU9GLHlFQUFBO0VBQ0Esc0VBQUE7RUFDQSxpRUFBQTs7QU01TkEsSUE3RUQsRUE2RUU7QUFBRCxJQTdFRSxPQTZFRDtBQUFELElBN0VVLE1BNkVUO0VBQ0EsbUJBQUE7O0FBRUEsSUFoRkYsRUE2RUUsY0FHQztBQUFELElBaEZDLE9BNkVELGNBR0M7QUFBRCxJQWhGUyxNQTZFVCxjQUdDO0FBQ0QsSUFqRkYsRUE2RUUsY0FJQztBQUFELElBakZDLE9BNkVELGNBSUM7QUFBRCxJQWpGUyxNQTZFVCxjQUlDO0VBQ0EsY0FBQTtFQUNBLG1CQUFBOztBQUlGLElBdkZELEVBdUZFO0FBQUQsSUF2RkUsT0F1RkQ7QUFBRCxJQXZGVSxNQXVGVDtBQUFELElBdkZELEVIaURHLGFBeENILEdBZ0JDLEdBYUMsRUFXRTtBR3NDSCxJQXZGRSxPSGlEQSxhQXhDSCxHQWdCQyxHQWFDLEVBV0U7QUdzQ0gsSUF2RlUsTUhpRFIsYUF4Q0gsR0FnQkMsR0FhQyxFQVdFO0VHdUNGLFdBQUE7RUFDQSxtQkFBQTs7QUFFQSxJQTNGRixFQXVGRSxvQkFJQztBQUFELElBM0ZDLE9BdUZELG9CQUlDO0FBQUQsSUEzRlMsTUF1RlQsb0JBSUM7QUFDRCxJQTVGRixFQXVGRSxvQkFLQztBQUFELElBNUZDLE9BdUZELG9CQUtDO0FBQUQsSUE1RlMsTUF1RlQsb0JBS0M7QUFERCxJQTNGRixFSGlERyxhQXhDSCxHQWdCQyxHQWFDLEVBV0UsTUcwQ0Q7QUFBRCxJQTNGQyxPSGlEQSxhQXhDSCxHQWdCQyxHQWFDLEVBV0UsTUcwQ0Q7QUFBRCxJQTNGUyxNSGlEUixhQXhDSCxHQWdCQyxHQWFDLEVBV0UsTUcwQ0Q7QUFDRCxJQTVGRixFSGlERyxhQXhDSCxHQWdCQyxHQWFDLEVBV0UsTUcyQ0Q7QUFBRCxJQTVGQyxPSGlEQSxhQXhDSCxHQWdCQyxHQWFDLEVBV0UsTUcyQ0Q7QUFBRCxJQTVGUyxNSGlEUixhQXhDSCxHQWdCQyxHQWFDLEVBV0UsTUcyQ0Q7RUFDQSxXQUFBO0VBQ0EsbUJBQUE7O0FDaEdKO0VWc0JDLGVBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RUcyUEMsMEJBQUE7RUFBaUMsb0NBQUE7RUFDakMsdUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsa0JBQUE7RUFBeUIsNEJBQUE7RU9uUjFCLGdDQUFBO0VBRUEsbUJBQUE7RUFDQSxxQkFBQTtFQUNBLG1CQUFBO0VBQ0Esd0JBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsYUFBQTtFQUNBLG9CQUFBO0VBQ0EsY0FBQTs7QUFFQSxVQUFDO0VBQ0EsY0FBQTs7QUFHRCxVQUFDO0VBQ0EsU0FBUyxFQUFUO0VBQ0EsUUFBQTtFQUNBLFNBQUE7RUFDQSxtQkFBQTtFQUNBLGtCQUFBOztBQU1ELGFBQUM7QUFBRCxhQUFDO0VBQ0EsVUFBQTtFQUNBLDhCQUFBO0VBQ0EseURBQUE7O0FBTUQsYUFBQztBQUFELGFBQUM7RUFDQSxhQUFBO0VBQ0EsOEJBQUE7RUFDQSx5REFBQTs7QUFNRCxhQUFDO0FBQUQsYUFBQztFQUNBLFVBQUE7O0FBTUQsYUFBQztBQUFELGFBQUM7RUFDQSxXQUFBOztBQ3ZERixjQUFjO0FBQ2QsZUFBZTtFQUNkLFNBQVMsRUFBVDtFQUNBLHFCQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSxzQkFBQTtFQUNBLDRCQUFBOztBQUdELGNBQWM7RUFDYixrQkFBQTs7QUFHRCxlQUFlO0VBQ2QsaUJBQUE7O0FBSUEsY0FBQztBQUFTLGNBQUM7RUFDVixzQkFBa0IsNmNBQWxCOztBQUtELG1CQUFDO0FBQVMsbUJBQUM7RUFDVixzQkFBa0IsNmlCQUFsQjs7QUFLRCxXQUFDO0FBQVMsV0FBQztFQUNWLHNCQUFrQiw2aUJBQWxCOztBQzVCRixJQUFLLFFBRUo7RUFDQyxzQkFBQTs7QUFIRixJQUFLLFFBTUosTUFBSztFQUNKLGdCQUFBO0VBQ0EscUJBQUE7O0FBUkYsSUFBSyxRQVdKO0VBQ0MseUJBQUE7RUFDQSwwQkFBQTs7QUFFQSxJQWZHLFFBV0osTUFJRTtFQUNBLFdBQUE7O0FBR0QsSUFuQkcsUUFXSixNQVFFO0VBQ0EsWUFBQTs7QUFwQkgsSUFBSyxRQXdCSjtFQUNDLGFBQUE7O0FBSUY7RVpaQyxlQUFBO0VBQ0EsbUJBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VZV0EsaUJBQUE7RUFDQSx5QkFBQTtFQUNBLGdCQUFBO0VBQ0EscUJBQUE7RUFDQSxzQkFBQTtFQUNBLFdBQUE7RVQyT0MsMEJBQUE7RUFBaUMsb0NBQUE7RUFDakMsdUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsa0JBQUE7RUFBeUIsNEJBQUE7RVMzTzFCLGtCQUFBOztBQVRELE9BV0MsTUFBSztFQUNKLGFBQUE7O0FBWkYsT0FlQztFQUNDLGtCQUFBO0VBQ0EsVUFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7O0FBRUEsT0FQRCxNQU9FO0VBQ0EsMEJBQUE7O0FBdkJILE9BMkJDO0VBQ0MsV0FBQTtFQUNBLHNCQUFBO0VBQ0EsYUFBQTtFQUNBLGNBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RVRpTkEsNEJBQUE7RUFBaUMsb0NBQUE7RUFDakMseUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsb0JBQUE7RUFBeUIsNEJBQUE7O0FTcFAzQixPQTJCQyxjQVNDO0VBQ0MsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLGNBQUE7RUFDQSxhQUFBO0VBQ0EsWUFBQTtFQUNBLG1CQUFBO0VUd01ELDRCQUFBO0VBQWlDLG9DQUFBO0VBQ2pDLHlCQUFBO0VBQThCLDZCQUFBO0VBQzlCLG9CQUFBO0VBQXlCLDRCQUFBOztBU3ZNeEIsT0FsQkYsY0FTQyxTQVNFO0VBQ0EsU0FBUyxFQUFUO0VBQ0EsY0FBQTtFQUNBLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLFFBQUE7RUFDQSxXQUFBO0VBQ0EsT0FBQTtFQUVBLHlCQUFBO0VUc0tGLHdDQUFBO0VBQ0Esb0NBQUE7RUFDQSxnQ0FBQTtFQUtBLHlDQUFBO0VBQThDLG9DQUFBO0VBQzlDLHFDQUFBO0VBQTBDLDZCQUFBO0VBQzFDLGlDQUFBO0VBQXNDLDRCQUFBOztBU3ZLdkMsT0FBQyxNQUNBLGNBQWMsU0FBUTtFQUNyQixtQkFBQTs7QUFoRUgsT0FvRUMsTUFBSyxjQUFnQixRQUVwQixnQkFBZ0I7RUFDZixpQkFBQTs7QUF2RUgsT0FvRUMsTUFBSyxjQUFnQixRQVNwQixRQUFPO0VBQ04sc0JBQUE7RUFDQSxzQkFBQTs7QUEvRUgsT0FtRkMsTUFBSyxjQUFnQixRQUFTLFFBQU87RUFDcEMscUJBQUE7RUFDQSxxQkFBQTs7QUN6SEY7RVZrM0JFLHlCQUFBO0VBQ0Esc0JBQUE7RUFDQSxxQkFBQTtFQUNBLGlCQUFBOztBVXIzQkYsUUFHQztFQUNDLGVBQUE7O0FBSkYsUUFNQztFQUNDLGdCQUFBOztBQVBGLFFBVUM7RUFDQyxhQUFBOztBQUdELFFBQUMsVUFDQTtFQUNDLGFBQUE7O0FBRkYsUUFBQyxVQUtBO0VBQ0MsZ0JBQUE7O0FBS0g7RUFDQyxnQkFBQTs7QUFFQSxrQkFBQztFQUNBLFNBQUE7O0FBTUQsc0JBQUM7QUFBRCx1QkFBQztBQUFTLHNCQUFDO0FBQUQsdUJBQUM7RUFDVixzQkFBa0IseXNCQUFsQjs7QUFJQSxzQkFEQSxXQUNDO0FBQUQsdUJBREEsV0FDQztBQUFTLHNCQURWLFdBQ1c7QUFBRCx1QkFEVixXQUNXO0VBQ1Ysc0JBQWtCLHF0QkFBbEI7O0FBTUYsc0JBQUM7QUFDRCxzQkFBQztFQUNBLDZCQUFBOztBQUtELHVCQUFDO0FBQ0QsdUJBQUM7RUFDQSxnQ0FBQTs7QUN0REY7RUFDQyxhQUFBO0VBQ0Esa0JBQUE7RUFDQSx1QkFBQTtFQUNBLGdCQUFBO0VYNFNDLDhCQUFBO0VBQ0EsMkJBQUE7RUFDQSxzQkFBQTtFV3pTRCxxQkFBQTtFQUNBLG1CQUFBO0VYZ3ZCQyx3Q0FBQTtFQUNBLHFDQUFBO0VBQ0EsbUNBQUE7RUFDQSxvQ0FBQTtFQUNBLGdDQUFBOztBV2p2QkQsTUFBQztFWHVRQSw0QkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx5QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixvQkFBQTtFQUF5Qiw0QkFBQTtFV3ZRekIsZUFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxTQUFBO0VBQ0EsV0FBQTtFQUNBLGVBQUE7RUFDQSxrQkFBQTtFQUNBLGlCQUFBO0VBQ0EsbUJBQUE7O0FDekJGLElBQUs7QUFDTCxNQUFPO0FBQ1AsYUFBYztBQUNkLE1BQU87RUFDTixnQkFBQTs7QUFJRDtFQUNDLGdCQUFBOztBQUdEO0VBQ0MsNkJBQUE7O0FDWEEsU0FBQztFQUNBLHlCQUFBO0VBQ0EsV0FBQTs7QUFGRCxTQUFDLElBSUEsU0FDQztBQUxGLFNBQUMsSUFJQSxTQUNLO0FBTE4sU0FBQyxJQUlBLFNBQ1M7QUFMVixTQUFDLElBSUEsU0FDYTtBQUxkLFNBQUMsSUFJQSxTQUNpQjtFQUNmLFdBQUE7O0FBTkgsU0FBQyxJQUlBLFNBS0M7RWhCWUYsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFZ0JiRyxnQkFBQTs7QUFYSCxTQUFDLElBSUEsU0FLQyxFQUlDO0VBQ0MscUJBQUE7RUFDQSw4QkFBQTtFQUNBLGNBQUE7O0FBRUEsU0FsQkgsSUFJQSxTQUtDLEVBSUMsRUFLRTtFQUNBLGNBQUE7O0FBbkJMLFNBQUMsSUFJQSxTQW9CQztFQUNDLFdBQUE7O0FBekJILFNBQUMsSUFJQSxTQXdCQztFQUNDLFdBQUE7O0FBN0JILFNBQUMsSUFJQSxTQTRCQztFQUNDLGtCQUFBO0VBQ0EsY0FBQTs7QUFLSCxTQUFDO0VBQ0Esa0JBQUE7O0FBRUEsU0FIQSxPQUdDO0VBQ0EsV0FBQTtFQUNBLFNBQVMsRUFBVDtFQUNBLG1CQUFBO0VBQ0Esa0JBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtFQUNBLFFBQUE7RUFDQSxXQUFBOztBQ3hESCxJQUFLO0FBQ0wsTUFBTztBQUNQLGFBQWM7QUFDZCxNQUFPO0VBQ04saUJBQUE7O0FBR0QsSUFBSyxnQkFBZTtFQUNuQixlQUFBOztBQUdEO0VBQ0MsbUJBQUE7RUFDQSxZQUFBO0VBQ0EsaUJBQUE7O0FBSEQsT0FNQztFQUVDLGtCQUFBO0VBQ0EsVUFBQTtFQUNBLFVBQUE7RUFDQSxtQkFBQTtFQUdBLG1CQUFBO0VBQ0EsNEJBQUE7O0FBRUEsT0FYRCxXQVdFO0VBQ0EseURBQUE7O0FBS0gsUUFBUztFQUNSLGdCQUFBO0VBQ0EsU0FBQTtFQUNBLHdCQUFBOztBQUVBLFFBTFEsbUJBS1A7RUFDQSxZQUFBOztBQUtGLEtBQU07RUFDTCxnQkFBQTtFQUNBLGNBQUE7RUFDQSwwQkFBQTs7QUFJRCxHQUFHLElBQUssRUFBQztBQUNULEdBQUcsSUFBSztFQUNQLG1CQUFBOztBQUVBLEdBSkUsSUFBSyxFQUFDLFdBSVA7QUFBRCxHQUhFLElBQUssa0JBR047RUFDQSxnQ0FBQTs7QUFJRixLQUFNLGNBQWE7RUFDbEIsYUFBQTs7QUFJQSxRQURRLGNBQ1A7RUFDQSxhQUFBOztBQUZGLFFBQVMsY0FLUjtFQUNDLGFBQUE7O0FBSUYsUUFDQztFQUNDLGlCQUFBOztBQUlGO0VBQ0MsaUJBQUE7O0FBREQsU0FHQztFQUNDLFdBQUE7RUFDQSxpQkFBQTs7QUFMRixTQUdDLE1BSUM7RUFDQyxnQkFBQTs7QUFFQSxTQVBGLE1BSUMsU0FHRTtFQUNBLHVCQUFBO0VBQ0EsV0FBQTs7QUFGRCxTQVBGLE1BSUMsU0FHRSxNQUlBO0VBQ0MsMEJBQUE7O0FBZkwsU0FHQyxNQWlCQztFQUNDLFdBQUE7RUFDQSxhQUFBOztBQUdELFNBdEJELE1Bc0JFO0VBQ0EsZ0JBQUE7O0FBS0g7RUFDQyxnQkFBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0Esd0JBQUE7O0FBRUEsdUJBQUM7RUFDQSxZQUFBO0VBQ0EsVUFBQTs7QUFLRjtFQUNDLGlCQUFBOztBQURELE1BR0MsSUFBRztFQUNGLGlCQUFBOztBQUpGLE1BT0M7RUFDQyxpQkFBQTs7QUFSRixNQU9DLGNBR0M7RUFDQyxpQkFBQTs7QUFYSCxNQU9DLGNBT0M7RUFFQyxrQkFBQTs7QUFoQkgsTUFvQkM7RUFDQyxrQkFBQTtFQUNBLFNBQUE7RUFFQSxTQUFBO0VBQ0Esa0JBQUE7O0FqQmhHRixRQUhpQztFQUdqQyxNaUIyRkM7SUFVRSxVQUFBO0lBQ0EsaUJBQUE7SUFFQSxVQUFBO0lBQ0EsbUJBQUE7O0VBRUEsTUFoQkYsV0FnQkc7SUFDQSxVQUFBO0lBQ0EsV0FBQTs7O0FqQjdHSixRQUhpQztFQUdqQyxNaUIyRkM7SUF3QkUsYUFBQTs7O0FDeEpILFFBQVM7RUFDUixvQkFBQTtFZm0yQkMseUJBQUE7RUFDQSxzQkFBQTtFQUNBLHFCQUFBO0VBQ0EsaUJBQUE7RWVwMkJELGVBQUE7O0FBSUQsb0JBQXFCO0VmNmVsQixPQUFBO0VBQVMseUJBQUE7RUFDVixvQkFBQTtFQUNBLGlCQUFBO0VBQ0EsWUFBQTs7QWU1ZUYsWUFBWTtFQUNYLGtCQUFBO0Vmd2VFLE9BQUE7RUFBUywwQkFBQTtFQUNWLGtCQUFBO0VBQ0EsZUFBQTtFQUNBLFVBQUE7O0FldGVELFlBTlcsT0FNVjtFQUNBLFNBQVMsRUFBVDtFQUNBLGNBQUE7RUFDQSxrQkFBQTtFQUNBLE1BQUE7RUFDQSxVQUFBO0VBQ0EsV0FBQTtFQUNBLE9BQUE7RWZnUEEsMEJBQUE7RUFBaUMsb0NBQUE7RUFDakMsdUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsa0JBQUE7RUFBeUIsNEJBQUE7RUFtQnpCLDRDQUFBO0VBQ0EseUNBQUE7RUFDQSxvQ0FBQTs7QWVwUkYsWUFBWSxPQWtCWDtFZmdRQyx3QkFBQTtFQUNBLHFCQUFBO0VBQ0EsZ0JBQUE7RWVoUUEscUJBQUE7O0FBcEJGLFlBQVksT0F1Qlg7QUF2QkQsWUFBWSxPQXdCWDtFQUNDLGtCQUFBO0VBQ0EsVUFBQTs7QUExQkYsWUFBWSxPQTZCWDtFZnFQQyx3QkFBQTtFQUNBLHFCQUFBO0VBQ0EsZ0JBQUE7O0FlbFBGO0VmdXpCRSx5QkFBQTtFQUNBLHNCQUFBO0VBQ0EscUJBQUE7RUFDQSxpQkFBQTs7QWV2ekJGO0VBQ0MsY0FBQTtFQUNBLG9CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTs7QUFHQyxRQURELE9BQU0sU0FDSjtFQUNBLGVBQUE7RUFFQSxxQkFBQTtFQUNBLGdCQUFBO0VBQ0EsVUFBQTtFQUNBLHlCQUFBOztBQUdELFFBVkQsT0FBTSxTQVVKO0VBQ0EsYUFBQTs7QUFHRCxRQWRELE9BQU0sU0FjSjtFQUNBLFdBQUE7RUFDQSxpQkFBQTs7QUFHRCxRQW5CRCxPQUFNLFNBbUJKO0VBQ0EsWUFBQTtFQUNBLGdCQUFBOztBQTNCSCxRQU1DLE9BQU0sU0F3Qkw7RUFDQyxjQUFBOztBQU1ILGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsc0JBQXNCO0VBQ3JCLGFBQUE7O0FBR0QsZ0JBQWlCO0FBQ2pCLFFBQVMsT0FBTTtBQUNmLGdCQUFpQixTQUFRLFdBQVc7RUFDbkMsYUFBQTs7QUFHRCxHQUFHO0VBQ0YsVUFBQTtFQUNBLGdCQUFBO0VBQ0EsV0FBQTtFQUNBLGtCQUFBO0VBQ0EsY0FBQTtFQUNBLHlCQUFBOztBQU5ELEdBQUcsZ0JBUUY7RUFDQyxTQUFBOztBQVRGLEdBQUcsZ0JBWUY7RUFDQyxhQUFBOztBQUdELEdBaEJFLGdCQWdCRCxjQUFlO0VBQ2Ysa0JBQUE7RWZrWUMsT0FBQTtFQUFTLHlCQUFBO0VBQ1Ysb0JBQUE7RUFDQSxpQkFBQTtFQUNBLFlBQUE7O0FldFpGLEdBQUcsZ0JBdUJGLE9BQU87RUFDTixpQkFBQTs7QUFJRCxHQTVCRSxnQkE0QkE7RUFDRCxVQUFBO0VBQ0EsU0FBQTtFQUNBLDZCQUFBO0VBQ0EsV0FBQTs7QUFFQSxHQWxDQyxnQkE0QkEsS0FNQTtFQUNBLDJCQUFBOztBQUdELEdBdENDLGdCQTRCQSxLQVVBO0VBQ0Esd0JBQUE7O0FBWEYsR0E1QkUsZ0JBNEJBLEtBZUQ7RUFDQyxVQUFBO0VBQ0EsU0FBQTs7QUFJRCxHQWpEQyxnQkE0QkEsS0FxQkM7RUFDRCxrQkFBQTs7QUFFQSxHQXBEQSxnQkE0QkEsS0FxQkMsS0FHQTtFQUNBLGlCQUFBO0VBQ0EsaUJBQUE7RUFDQSxlQUFBOztBQUdELEdBMURBLGdCQTRCQSxLQXFCQyxLQVNBO0FBQ0QsR0EzREEsZ0JBNEJBLEtBcUJDLEtBVUE7RUFDQSxnQ0FBQTs7QUFHRCxHQS9EQSxnQkE0QkEsS0FxQkMsS0FjQTtFQUNBLDBCQUFBOztBQUVBLEdBbEVELGdCQTRCQSxLQXFCQyxLQWNBLHNCQUdDO0VBQ0EsZ0JBQUE7O0FBSUYsR0F2RUEsZ0JBNEJBLEtBcUJDLEtBc0JBLG1CQUFtQjtBQUNwQixHQXhFQSxnQkE0QkEsS0FxQkMsS0F1QkEsbUJBQW1CO0FBQ3BCLEdBekVBLGdCQTRCQSxLQXFCQyxLQXdCQSx1QkFBdUI7QUFDeEIsR0ExRUEsZ0JBNEJBLEtBcUJDLEtBeUJBLHVCQUF1QjtFQUN2QixnQkFBQTtFQUNBLFVBQUE7O0FBR0QsR0EvRUEsZ0JBNEJBLEtBcUJDLEtBOEJBLG1CQUFtQjtBQUNwQixHQWhGQSxnQkE0QkEsS0FxQkMsS0ErQkEsdUJBQXVCO0FBQ3hCLEdBakZBLGdCQTRCQSxLQXFCQyxLQWdDQSxtQkFBbUIsT0FBTztBQUMzQixHQWxGQSxnQkE0QkEsS0FxQkMsS0FpQ0EsdUJBQXVCLE9BQU87RUFDOUIsbUJBQUE7O0FBR0QsR0F0RkEsZ0JBNEJBLEtBcUJDLEtBcUNBLG1CQUFtQjtBQUNwQixHQXZGQSxnQkE0QkEsS0FxQkMsS0FzQ0EsdUJBQXVCO0VBQ3ZCLG1CQUFBOztBQUdELEdBM0ZBLGdCQTRCQSxLQXFCQyxLQTBDQTtFQU1BLG1CQUFBOztBQUxBLEdBNUZELGdCQTRCQSxLQXFCQyxLQTBDQSx1QkFDQztFQUNBLFNBQVMsRUFBVDtFQUNBLFdBQUE7O0FBS0QsR0FuR0QsZ0JBNEJBLEtBcUJDLEtBMENBLHVCQVFFO0VBQ0QsZ0JBQUE7O0FBSUYsR0F4R0EsZ0JBNEJBLEtBcUJDLEtBdURDO0FBQUssR0F4R1AsZ0JBNEJBLEtBcUJDLEtBdURRO0VBQ1IsbUJBQUE7RUFDQSxzQkFBQTs7QUF6REYsR0FqREMsZ0JBNEJBLEtBcUJDLEtBNkREO0VBQ0MsaUJBQUE7RUFDQSxnQkFBQTs7QUEvREYsR0FqREMsZ0JBNEJBLEtBcUJDLEtBNkRELEVBSUM7RUFDQyxtQkFBQTtFQUNBLGVBQUE7O0FBbkVILEdBakRDLGdCQTRCQSxLQXFCQyxLQTZERCxFQUlDLEtBSUM7RUFDQyxtQkFBQTtFQUNBLGlCQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VmNkNKLDBCQUFBO0VBQWlDLG9DQUFBO0VBQ2pDLHVCQUFBO0VBQThCLDZCQUFBO0VBQzlCLGtCQUFBO0VBQXlCLDRCQUFBO0VlN0NyQixzQkFBQTtFQUNBLGNBQUE7RUFDQSxpQkFBQTtFQUNBLFlBQUE7O0FBR0MsR0FsSUosZ0JBNEJBLEtBcUJDLEtBNkRELEVBSUMsS0FJQyxPQVdFLElBQUksV0FDSDtBQUNELEdBbklKLGdCQTRCQSxLQXFCQyxLQTZERCxFQUlDLEtBSUMsT0FXRSxJQUFJLFdBRUg7RUFDQSxXQUFBO0VBQ0EseUJBQUE7RUFDQSx5QkFBQTs7QUFJRixHQTFJSCxnQkE0QkEsS0FxQkMsS0E2REQsRUFJQyxLQUlDLE9Bb0JFLEtBQUs7RUFDTCxlQUFBO0Vmd1FKLE9BQUE7RUFBUyx5QkFBQTtFQUNWLG9CQUFBO0VBQ0EsaUJBQUE7RUFDQSxZQUFBOztBZXJXQSxHQWpEQyxnQkE0QkEsS0FxQkMsS0FrR0Q7RUFDQyx5QkFBQTtFQUNBLFVBQUE7RUFDQSxXQUFBOztBQXJHRixHQWpEQyxnQkE0QkEsS0FxQkMsS0FrR0QsR0FNQztFQUNDLGtCQUFBO0VBQ0EscUJBQUE7RUFHQSxjQUFBOztBQUVBLEdBaEtGLGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DLEdBT0U7RUFDQSw2QkFBQTs7QUFFQSxHQW5LSCxnQkE0QkEsS0FxQkMsS0FrR0QsR0FNQyxHQU9FLHNCQUdDO0VBQ0EsYUFBQTs7QUFKRixHQWhLRixnQkE0QkEsS0FxQkMsS0FrR0QsR0FNQyxHQU9FLHNCQU9BO0VmQUosMEJBQUE7RUFBaUMsb0NBQUE7RUFDakMsdUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsa0JBQUE7RUFBeUIsNEJBQUE7RWVBcEIsY0FBQTs7QUFFQSxHQTNLSixnQkE0QkEsS0FxQkMsS0FrR0QsR0FNQyxHQU9FLHNCQU9BLHFCQUlFO0VBQ0EsK0JBQUE7O0FBWkgsR0FoS0YsZ0JBNEJBLEtBcUJDLEtBa0dELEdBTUMsR0FPRSxzQkFPQSxxQkFRQztFQUNDLHNCQUFBOztBQUtILEdBckxGLGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DLEdBNEJHO0FBQUssR0FyTFQsZ0JBNEJBLEtBcUJDLEtBa0dELEdBTUMsR0E0QlU7RUFDUixtQkFBQTtFQUNBLHNCQUFBOztBQXRJSixHQWpEQyxnQkE0QkEsS0FxQkMsS0FrR0QsR0FNQyxHQWtDQztFQUNDLFVBQUE7O0FBM0lKLEdBakRDLGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DLEdBa0NDLEdBSUM7RUFDQyxVQUFBO0VBQ0EscUJBQUE7RUFDQSxlQUFBO0VBQ0EscUJBQUE7O0FBbEpMLEdBakRDLGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DLEdBa0NDLEdBSUMsR0FPQztFQUNDLGVBQUE7RUFDQSxtQkFBQTs7QUF2Sk4sR0FqREMsZ0JBNEJBLEtBcUJDLEtBa0dELEdBTUMsR0FrQ0MsR0FJQyxHQVlDO0FBMUpMLEdBakRDLGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DLEdBa0NDLEdBSUMsR0FhQztFQUNDLGVBQUE7RUFDQSxTQUFBO0VBQ0Esc0JBQUE7RUFDQSxzQkFBQTtFQ2xTUCxrQkFBQTtFQUNBLG1CQUFBO0VBRUEsb0JBQUE7RUFDQSxvQkFBQTs7QUR3U0EsR0ExTkUsZ0JBME5BO0VBQ0QsZ0JBQUE7O0FBSUQsR0EvTkUsZ0JBK05EO0VBQ0EsWUFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7O0FBTEQsR0EvTkUsZ0JBK05ELE1BT0E7RUN4VEQsa0JBQUE7RUFDQSxrQkFBQTtFQUVBLG9CQUFBO0VBQ0Esb0JBQUE7RURzVEUscUJBQUE7RUFDQSxtQkFBQTtFQUNBLGdDQUFBO0VBQ0EsYUFBQTtFQUNBLG9CQUFBOztBQWJGLEdBL05FLGdCQStORCxNQWdCQTtFQUVDLG9CQUFBO0VBQ0EsZ0JBQUE7O0FBbkJGLEdBL05FLGdCQStORCxNQWdCQSxHQUtDO0VBQ0MsaUJBQUE7RUFDQSxTQUFBO0VBQ0EscUJBQUE7O0FBR0QsR0ExUEEsZ0JBK05ELE1BZ0JBLEdBV0c7RUFDRCxrQkFBQTs7QUE1QkgsR0EvTkUsZ0JBK05ELE1BZ0JBLEdBZUM7RUFDQyxXQUFBO0VBQ0EsVUFBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtFQUNBLDZCQUFBO0VBQ0EsbUJBQUE7RUFDQSxtQkFBQTtFZmxFRiw4QkFBQTtFQUNBLDJCQUFBO0VBQ0Esc0JBQUE7O0FlMEJELEdBL05FLGdCQStORCxNQWdCQSxHQWVDLEdBVUM7RUFDQyxnQkFBQTtFQUNBLFlBQUE7RUFDQSxzQkFBQTs7QUE1Q0osR0EvTkUsZ0JBK05ELE1BZ0JBLEdBZ0NDO0VBQ0MsaUJBQUE7RUFDQSxZQUFBO0VBQ0Esb0JBQUE7O0FBbkRILEdBL05FLGdCQStORCxNQWdCQSxHQWdDQyxHQUtDO0VBQ0Msa0JBQUE7O0FBR0QsR0F4UkQsZ0JBK05ELE1BZ0JBLEdBZ0NDLEdBU0U7RUFDQSxTQUFTLE9BQVQ7RUFDQSxjQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSxTQUFBO0VBQ0EsUUFBQTs7QUFPTDtBQUNBLGdCQUFpQixTQUFRO0FBQ3pCO0VmaElFLDBCQUFBO0VBQWlDLG9DQUFBO0VBQ2pDLHVCQUFBO0VBQThCLDZCQUFBO0VBQzlCLGtCQUFBO0VBQXlCLDRCQUFBO0VlZ0kxQixzQkFBQTtFQzNYQSxrQkFBQTtFQUNBLG1CQUFBO0VBRUEsb0JBQUE7RUFDQSxvQkFBQTs7QUQyWEQsZ0JBQWlCLFNBQVE7QUFDekIsV0FBWTtBQUNaO0VDallDLGtCQUFBO0VBQ0EsbUJBQUE7RUFFQSxvQkFBQTtFQUNBLG9CQUFBO0VEK1hBLGdKQUFBOztBQUdELFdBQVk7RUFDWCxZQUFBO0VBQ0EsVUFBQTtFQUNBLFNBQUE7O0FBR0QsZ0JBQWlCLFNBQVE7RWZ2SHZCLDhCQUFBO0VBQ0EsMkJBQUE7RUFDQSxzQkFBQTtFZXVIRCxjQUFBO0VBQ0EsYUFBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtFQUNBLFNBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGdCQUFBO0VBQ0EsV0FBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxjQUFBOztBQUdELGlCQUFpQjtFQUNoQixVQUFBO0VBQ0EsY0FBQTtFQzlaQSxlQUFBO0VBQ0EsbUJBQUE7RUFFQSxtQkFBQTtFQUNBLG9CQUFBO0VEa2FBLGdKQUFBOztBQVZELGlCQUFpQixpQkFJaEI7RUFDQyxjQUFBO0VBQ0EsbUJBQUE7O0FBTUQsaUJBWmdCLGlCQVlkLEtBQUk7RUFDTCxtQkFBQTs7O0FBS0Y7RUFDQyxvQkFBQTs7QUFERCx1QkFHQyxTQUFTO0VBQ1IsbUJBQUE7RUFDQSxpQkFBQTs7QUFMRix1QkFRQztFQUVDLFlBQUE7RUFHQSxnQkFBQTs7QUFJRjtFQUNDLGVBQUE7RUFDQSxNQUFBO0VBQ0EsV0FBQTtFQUNBLFdBQUE7O0FBSkQsZ0JBTUM7RUFDQyxpQkFBQTs7QUFQRixnQkFNQyxrQkFHQztFQUNDLGdCQUFBOztBQVZILGdCQU1DLGtCQUdDLE9BR0M7RUFDQyxnQkFBQTs7QUFPSjtFQUNDLGtCQUFBO0VBQ0EsVUFBQTtFQUNBLFVBQUE7O0FBRUEsS0FBQztFQUNBLGFBQUEifQ== */\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/index.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>CKEditor Sample</title>\n\t<script src=\"../ckeditor.js\"></script>\n\t<script src=\"js/sample.js\"></script>\n\t<link rel=\"stylesheet\" href=\"css/samples.css\">\n\t<link rel=\"stylesheet\" href=\"toolbarconfigurator/lib/codemirror/neo.css\">\n</head>\n<body id=\"main\">\n\n<nav class=\"navigation-a\">\n\t<div class=\"grid-container\">\n\t\t<ul class=\"navigation-a-left grid-width-70\">\n\t\t\t<li><a href=\"http://ckeditor.com\">Project Homepage</a></li>\n\t\t\t<li><a href=\"http://dev.ckeditor.com/\">I found a bug</a></li>\n\t\t\t<li><a href=\"http://github.com/ckeditor/ckeditor-dev\" class=\"icon-pos-right icon-navigation-a-github\">Fork CKEditor on GitHub</a></li>\n\t\t</ul>\n\t\t<ul class=\"navigation-a-right grid-width-30\">\n\t\t\t<li><a href=\"http://ckeditor.com/blog-list\">CKEditor Blog</a></li>\n\t\t</ul>\n\t</div>\n</nav>\n\n<header class=\"header-a\">\n\t<div class=\"grid-container\">\n\t\t<h1 class=\"header-a-logo grid-width-30\">\n\t\t\t<a href=\"index.html\"><img src=\"img/logo.png\" alt=\"CKEditor Sample\"></a>\n\t\t</h1>\n\n\t\t<nav class=\"navigation-b grid-width-70\">\n\t\t\t<ul>\n\t\t\t\t<li><a href=\"index.html\" class=\"button-a button-a-background\">Start</a></li>\n\t\t\t\t<li><a href=\"toolbarconfigurator/index.html\" class=\"button-a\">Toolbar configurator <span class=\"balloon-a balloon-a-nw\">Edit your toolbar now!</span></a></li>\n\t\t\t</ul>\n\t\t</nav>\n\t</div>\n</header>\n\n<main>\n\t<div class=\"adjoined-top\">\n\t\t<div class=\"grid-container\">\n\t\t\t<div class=\"content grid-width-100\">\n\t\t\t\t<h1>Congratulations!</h1>\n\t\t\t\t<p>\n\t\t\t\t\tIf you can see CKEditor below, it means that the installation succeeded.\n\t\t\t\t\tYou can now try out your new editor version, see its features, and when you are ready to move on, check some of the <a href=\"#sample-customize\">most useful resources</a> recommended below.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"adjoined-bottom\">\n\t\t<div class=\"grid-container\">\n\t\t\t<div class=\"grid-width-100\">\n\t\t\t\t<div id=\"editor\">\n\t\t\t\t\t<h1>Hello world!</h1>\n\t\t\t\t\t<p>I'm an instance of <a href=\"http://ckeditor.com\">CKEditor</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"grid-container\">\n\t\t<div class=\"content grid-width-100\">\n\t\t\t<section id=\"sample-customize\">\n\t\t\t\t<h2>Customize Your Editor</h2>\n\t\t\t\t<p>Modular build and <a href=\"http://docs.ckeditor.com/#!/guide/dev_configuration\">numerous configuration options</a> give you nearly endless possibilities to customize CKEditor. Replace the content of your <code><a href=\"../config.js\">config.js</a></code> file with the following code and refresh this page (<strong>remember to clear the browser cache</strong>)!</p>\n\t\t<pre class=\"cm-s-neo CodeMirror\"><code><span style=\"padding-right: 0.1px;\"><span class=\"cm-variable\">CKEDITOR</span>.<span class=\"cm-property\">editorConfig</span> <span class=\"cm-operator\">=</span> <span class=\"cm-keyword\">function</span>( <span class=\"cm-def\">config</span> ) {</span>\n<span style=\"padding-right: 0.1px;\"><span class=\"cm-tab\">\t</span><span class=\"cm-variable-2\">config</span>.<span class=\"cm-property\">language</span> <span class=\"cm-operator\">=</span> <span class=\"cm-string\">'es'</span>;</span>\n<span style=\"padding-right: 0.1px;\"><span class=\"cm-tab\">\t</span><span class=\"cm-variable-2\">config</span>.<span class=\"cm-property\">uiColor</span> <span class=\"cm-operator\">=</span> <span class=\"cm-string\">'#F7B42C'</span>;</span>\n<span style=\"padding-right: 0.1px;\"><span class=\"cm-tab\">\t</span><span class=\"cm-variable-2\">config</span>.<span class=\"cm-property\">height</span> <span class=\"cm-operator\">=</span> <span class=\"cm-number\">300</span>;</span>\n<span style=\"padding-right: 0.1px;\"><span class=\"cm-tab\">\t</span><span class=\"cm-variable-2\">config</span>.<span class=\"cm-property\">toolbarCanCollapse</span> <span class=\"cm-operator\">=</span> <span class=\"cm-atom\">true</span>;</span>\n<span style=\"padding-right: 0.1px;\">};</span></code></pre>\n\t\t\t</section>\n\n\t\t\t<section>\n\t\t\t\t<h2>Toolbar Configuration</h2>\n\t\t\t\t<p>If you want to reorder toolbar buttons or remove some of them, check <a href=\"toolbarconfigurator/index.html\">this handy tool</a>!</p>\n\t\t\t</section>\n\n\t\t\t<section>\n\t\t\t\t<h2>More Samples!</h2>\n\t\t\t\t<p>Visit the <a href=\"http://sdk.ckeditor.com\">CKEditor SDK</a> for a huge collection of samples showcasing editor features, with source code readily available to copy and use in your own implementation.</p>\n\t\t\t</section>\n\n\t\t\t<section>\n\t\t\t\t<h2>Developer's Guide</h2>\n\t\t\t\t<p>The most important resource for all developers working with CKEditor, integrating it with their websites and applications, and customizing to their needs. You can start from here:</p>\n\t\t\t\t<ul>\n\t\t\t\t\t<li><a href=\"http://docs.ckeditor.com/#!/guide/dev_installation\">Getting Started</a> &ndash; Explains most crucial editor concepts and practices as well as the installation process and integration with your website.</li>\n\t\t\t\t\t<li><a href=\"http://docs.ckeditor.com/#!/guide/dev_advanced_installation\">Advanced Installation Concepts</a> &ndash; Describes how to upgrade, install additional components (plugins, skins), or create a custom build.</li>\n\t\t\t\t</ul>\n\t\t\t\t\t<p>When you have the basics sorted out, feel free to browse some more advanced sections like:</p>\n\t\t\t\t<ul>\n\t\t\t\t\t<li><a href=\"http://docs.ckeditor.com/#!/guide/dev_features\">Functionality Overview</a> &ndash; Descriptions and samples of various editor features.</li>\n\t\t\t\t\t<li><a href=\"http://docs.ckeditor.com/#!/guide/plugin_sdk_intro\">Plugin SDK</a>, <a href=\"http://docs.ckeditor.com/#!/guide/widget_sdk_intro\">Widget SDK</a>, and <a href=\"http://docs.ckeditor.com/#!/guide/skin_sdk_intro\">Skin SDK</a> &ndash; Useful when you want to create your own editor components.</li>\n\t\t\t\t</ul>\n\t\t\t</section>\n\n\t\t\t<section>\n\t\t\t\t<h2>CKEditor JavaScript API</h2>\n\t\t\t\t<p>CKEditor boasts a rich <a href=\"http://docs.ckeditor.com/#!/api\">JavaScript API</a> that you can use to adjust the editor to your needs and integrate it with your website or application.</p>\n\t\t\t</section>\n\t\t</div>\n\t</div>\n</main>\n\n<footer class=\"footer-a grid-container\">\n\t<div class=\"grid-container\">\n\t\t<p class=\"grid-width-100\">\n\t\t\tCKEditor &ndash; The text editor for the Internet &ndash; <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p class=\"grid-width-100\" id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> &ndash; Frederico Knabben. All rights reserved.\n\t\t</p>\n\t</div>\n</footer>\n<script>\n\tinitSample();\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/js/sample.js",
    "content": "﻿/**\n * Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/* exported initSample */\n\nif ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 )\n\tCKEDITOR.tools.enableHtml5Elements( document );\n\n// The trick to keep the editor in the sample quite small\n// unless user specified own height.\nCKEDITOR.config.height = 150;\nCKEDITOR.config.width = 'auto';\n\nvar initSample = ( function() {\n\tvar wysiwygareaAvailable = isWysiwygareaAvailable(),\n\t\tisBBCodeBuiltIn = !!CKEDITOR.plugins.get( 'bbcode' );\n\n\treturn function() {\n\t\tvar editorElement = CKEDITOR.document.getById( 'editor' );\n\n\t\t// :(((\n\t\tif ( isBBCodeBuiltIn ) {\n\t\t\teditorElement.setHtml(\n\t\t\t\t'Hello world!\\n\\n' +\n\t\t\t\t'I\\'m an instance of [url=http://ckeditor.com]CKEditor[/url].'\n\t\t\t);\n\t\t}\n\n\t\t// Depending on the wysiwygare plugin availability initialize classic or inline editor.\n\t\tif ( wysiwygareaAvailable ) {\n\t\t\tCKEDITOR.replace( 'editor' );\n\t\t} else {\n\t\t\teditorElement.setAttribute( 'contenteditable', 'true' );\n\t\t\tCKEDITOR.inline( 'editor' );\n\n\t\t\t// TODO we can consider displaying some info box that\n\t\t\t// without wysiwygarea the classic editor may not work.\n\t\t}\n\t};\n\n\tfunction isWysiwygareaAvailable() {\n\t\t// If in development mode, then the wysiwygarea must be available.\n\t\t// Split REV into two strings so builder does not replace it :D.\n\t\tif ( CKEDITOR.revision == ( '%RE' + 'V%' ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn !!CKEDITOR.plugins.get( 'wysiwygarea' );\n\t}\n} )();\n\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/js/sf.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nvar SF=function(){function d(a){return(a=a.attributes?a.attributes.getNamedItem(\"class\"):null)?a.value.split(\" \"):[]}function c(a){var e=document.createAttribute(\"class\");e.value=a.join(\" \");return e}var b={attachListener:function(a,e,b){if(a.addEventListener)a.addEventListener(e,b,!1);else if(a.attachEvent)a.attachEvent(\"on\"+e,function(){b.apply(a,arguments)});else throw Error(\"Could not attach event.\");}};b.indexOf=function(){var a=Array.prototype.indexOf;return\"function\"===a?function(e,b){return a.call(e,\nb)}:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]===b)return d;return-1}}();b.accept=function(a,e){var c;a.children?(c=a.children,e(a)):\"number\"===typeof a.length&&(c=a);for(var d=c?c.length||0:0;d--;)b.accept(c[d],e)};b.getByClass=function(){var a=document.getElementsByClassName;return\"function\"===typeof a?function(e,b){\"string\"===typeof e&&(b=e,e=document);return a.call(e,b)}:function(a,c){\"string\"===typeof a&&(c=a,a=document.getElementsByTagName(\"html\")[0]);var d=[];b.accept(a,function(a){b.classList.contains(a,\nc)&&d.push(a)});return d}}();b.classList={};b.classList.add=function(a,b){var f=d(a);f.push(b);a.attributes.setNamedItem(c(f))};b.classList.remove=function(a,e){var f=d(a,e),n=b.indexOf(f,e);-1!==n&&(f.splice(n,1),a.attributes.setNamedItem(c(f)))};b.classList.contains=function(a,c){return-1!==b.indexOf(d(a),c)};b.classList.toggle=function(a,b){this.contains(a,b)?this.remove(a,b):this.add(a,b)};return b}();\"use strict\";\n(function(){function d(c){for(var b in c)delete c[b]}SF.modal=function(c){function b(a){27==a.keyCode&&f.close()}c.modalClass=\"modal content\";c.closeClass=\"modal-close\";c.modalStyles=d;c.closeStyles=d;var a=c.afterCreate,e=c.afterClose;c.afterCreate=function(c){a&&a(c);window.addEventListener(\"keydown\",b)};c.afterClose=function(a){e&&e(a);window.removeEventListener(\"keydown\",b)};var f=(new picoModal(c)).afterCreate(c.afterCreate).afterClose(c.afterClose);return f}})();\"use strict\";\n(function(){for(var d=SF.getByClass(\"toggler\"),c=d.length;c--;)SF.attachListener(d[c],\"click\",function(){var b=SF.classList.contains(this,\"icon-toggler-expanded\")||SF.classList.contains(this,\"icon-toggler-collapsed\"),a=document.getElementById(this.getAttribute(\"data-for\"));SF.classList.toggle(this,\"collapsed\");SF.classList.contains(this,\"collapsed\")?(SF.classList.add(a,\"collapsed\"),b&&(SF.classList.remove(this,\"icon-toggler-expanded\"),SF.classList.add(this,\"icon-toggler-collapsed\"))):(SF.classList.remove(a,\n\"collapsed\"),b&&(SF.classList.remove(this,\"icon-toggler-collapsed\"),SF.classList.add(this,\"icon-toggler-expanded\")))})})();\"use strict\";(function(){for(var d=SF.getByClass(\"tree-a\"),c=d.length;c--;)SF.attachListener(d[c],\"click\",function(b){b=b.target||b.srcElement;\"H2\"!==b.nodeName||SF.classList.contains(b,\"tree-a-no-sub\")||SF.classList.toggle(b,\"tree-a-active\")})})();\n(function(d,c){function b(a){return\"object\"===typeof Node?a instanceof Node:a&&\"object\"===typeof a&&\"number\"===typeof a.nodeType}function a(){var a=[];return{watch:a.push.bind(a),trigger:function(b){for(var c=!0,d={preventDefault:function(){c=!1}},e=0;e<a.length;e++)a[e](b,d);return c}}}function e(a){this.elem=a}function f(a,b){return e.div().clazz(\"pico-overlay\").clazz(a(\"overlayClass\",\"\")).stylize({display:\"block\",position:\"fixed\",top:\"0px\",left:\"0px\",height:\"100%\",width:\"100%\",zIndex:1E4}).stylize(a(\"overlayStyles\",\n{opacity:.5,background:\"#000\"})).onClick(function(){a(\"overlayClose\",!0)&&b()})}function n(a,b){var c=a(\"width\",\"auto\");\"number\"===typeof c&&(c=\"\"+c+\"px\");return e.div().clazz(\"pico-content\").clazz(a(\"modalClass\",\"\")).stylize({display:\"block\",position:\"fixed\",zIndex:10001,left:\"50%\",top:\"50px\",width:c,\"-ms-transform\":\"translateX(-50%)\",\"-moz-transform\":\"translateX(-50%)\",\"-webkit-transform\":\"translateX(-50%)\",\"-o-transform\":\"translateX(-50%)\",transform:\"translateX(-50%)\"}).stylize(a(\"modalStyles\",\n{backgroundColor:\"white\",padding:\"20px\",borderRadius:\"5px\"})).html(a(\"content\")).attr(\"role\",\"dialog\").onClick(function(a){(new e(a.target)).anyAncestor(function(a){return/\\bpico-close\\b/.test(a.elem.className)})&&b()})}function p(a){return function(){return a().elem}}function k(c){function e(a,b){var d=c[a];\"function\"===typeof d&&(d=d(b));return void 0===d?b:d}function k(){l().hide();m().hide();v.trigger(h)}function q(){w.trigger(h)&&k()}function g(a){return function(){a.apply(this,arguments);return h}}\nfunction r(a){if(!t){var c=n(e,q),b=f(e,q),d;d=e(\"closeButton\",!0)?c.child().html(e(\"closeHtml\",\"\\x26#xD7;\")).clazz(\"pico-close\").clazz(e(\"closeClass\")).stylize(e(\"closeStyles\",{borderRadius:\"2px\",cursor:\"pointer\",height:\"15px\",width:\"15px\",position:\"absolute\",top:\"5px\",right:\"5px\",fontSize:\"16px\",textAlign:\"center\",lineHeight:\"15px\",background:\"#CCC\"})):void 0;t={modal:c,overlay:b,close:d};x.trigger(h)}return t[a]}if(\"string\"===typeof c||b(c))c={content:c};var x=a(),y=a(),z=a(),w=a(),v=a(),t,m=r.bind(d,\n\"modal\"),l=r.bind(d,\"overlay\"),u=r.bind(d,\"close\"),h={modalElem:p(m),closeElem:p(u),overlayElem:p(l),show:function(){y.trigger(h)&&(l().show(),u(),m().show(),z.trigger(h));return this},close:g(q),forceClose:g(k),destroy:function(){m=m().destroy();l=l().destroy();u=void 0},options:function(a){c=a},afterCreate:g(x.watch),beforeShow:g(y.watch),afterShow:g(z.watch),beforeClose:g(w.watch),afterClose:g(v.watch)};return h}e.div=function(a){var b=c.createElement(\"div\");(a||c.body).appendChild(b);return new e(b)};\ne.prototype={child:function(){return e.div(this.elem)},stylize:function(a){a=a||{};\"undefined\"!==typeof a.opacity&&(a.filter=\"alpha(opacity\\x3d\"+100*a.opacity+\")\");for(var b in a)a.hasOwnProperty(b)&&(this.elem.style[b]=a[b]);return this},clazz:function(a){this.elem.className+=\" \"+a;return this},html:function(a){b(a)?this.elem.appendChild(a):this.elem.innerHTML=a;return this},onClick:function(a){this.elem.addEventListener(\"click\",a);return this},destroy:function(){c.body.removeChild(this.elem)},hide:function(){this.elem.style.display=\n\"none\"},show:function(){this.elem.style.display=\"block\"},attr:function(a,b){this.elem.setAttribute(a,b);return this},anyAncestor:function(a){for(var b=this.elem;b;){if(a(new e(b)))return!0;b=b.parentNode}return!1}};\"function\"===typeof d.define&&d.define.amd?d.define(function(){return k}):d.picoModal=k})(window,document);"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/ajax.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Ajax &mdash; CKEditor Sample</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<link rel=\"stylesheet\" href=\"sample.css\">\n\t<script>\n\n\t\tvar editor, html = '';\n\n\t\tfunction createEditor() {\n\t\t\tif ( editor )\n\t\t\t\treturn;\n\n\t\t\t// Create a new editor inside the <div id=\"editor\">, setting its value to html\n\t\t\tvar config = {};\n\t\t\teditor = CKEDITOR.appendTo( 'editor', config, html );\n\t\t}\n\n\t\tfunction removeEditor() {\n\t\t\tif ( !editor )\n\t\t\t\treturn;\n\n\t\t\t// Retrieve the editor contents. In an Ajax application, this data would be\n\t\t\t// sent to the server or used in any other way.\n\t\t\tdocument.getElementById( 'editorcontents' ).innerHTML = html = editor.getData();\n\t\t\tdocument.getElementById( 'contents' ).style.display = '';\n\n\t\t\t// Destroy the editor.\n\t\t\teditor.destroy();\n\t\t\teditor = null;\n\t\t}\n\n\t</script>\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\">CKEditor Samples</a> &raquo; Create and Destroy Editor Instances for Ajax Applications\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/saveajax.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows how to create and destroy CKEditor instances on the fly. After the removal of CKEditor the content created inside the editing\n\t\t\tarea will be displayed in a <code>&lt;div&gt;</code> element.\n\t\t</p>\n\t\t<p>\n\t\t\tFor details of how to create this setup check the source code of this sample page\n\t\t\tfor JavaScript code responsible for the creation and destruction of a CKEditor instance.\n\t\t</p>\n\t</div>\n\t<p>Click the buttons to create and remove a CKEditor instance.</p>\n\t<p>\n\t\t<input onclick=\"createEditor();\" type=\"button\" value=\"Create Editor\">\n\t\t<input onclick=\"removeEditor();\" type=\"button\" value=\"Remove Editor\">\n\t</p>\n\t<!-- This div will hold the editor. -->\n\t<div id=\"editor\">\n\t</div>\n\t<div id=\"contents\" style=\"display: none\">\n\t\t<p>\n\t\t\tEdited Contents:\n\t\t</p>\n\t\t<!-- This div will be used to display the editor contents. -->\n\t\t<div id=\"editorcontents\">\n\t\t</div>\n\t</div>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/api.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>API Usage &mdash; CKEditor Sample</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<link href=\"sample.css\" rel=\"stylesheet\">\n\t<script>\n\n// The instanceReady event is fired, when an instance of CKEditor has finished\n// its initialization.\nCKEDITOR.on( 'instanceReady', function( ev ) {\n\t// Show the editor name and description in the browser status bar.\n\tdocument.getElementById( 'eMessage' ).innerHTML = 'Instance <code>' + ev.editor.name + '<\\/code> loaded.';\n\n\t// Show this sample buttons.\n\tdocument.getElementById( 'eButtons' ).style.display = 'block';\n});\n\nfunction InsertHTML() {\n\t// Get the editor instance that we want to interact with.\n\tvar editor = CKEDITOR.instances.editor1;\n\tvar value = document.getElementById( 'htmlArea' ).value;\n\n\t// Check the active editing mode.\n\tif ( editor.mode == 'wysiwyg' )\n\t{\n\t\t// Insert HTML code.\n\t\t// http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertHtml\n\t\teditor.insertHtml( value );\n\t}\n\telse\n\t\talert( 'You must be in WYSIWYG mode!' );\n}\n\nfunction InsertText() {\n\t// Get the editor instance that we want to interact with.\n\tvar editor = CKEDITOR.instances.editor1;\n\tvar value = document.getElementById( 'txtArea' ).value;\n\n\t// Check the active editing mode.\n\tif ( editor.mode == 'wysiwyg' )\n\t{\n\t\t// Insert as plain text.\n\t\t// http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText\n\t\teditor.insertText( value );\n\t}\n\telse\n\t\talert( 'You must be in WYSIWYG mode!' );\n}\n\nfunction SetContents() {\n\t// Get the editor instance that we want to interact with.\n\tvar editor = CKEDITOR.instances.editor1;\n\tvar value = document.getElementById( 'htmlArea' ).value;\n\n\t// Set editor contents (replace current contents).\n\t// http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData\n\teditor.setData( value );\n}\n\nfunction GetContents() {\n\t// Get the editor instance that you want to interact with.\n\tvar editor = CKEDITOR.instances.editor1;\n\n\t// Get editor contents\n\t// http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData\n\talert( editor.getData() );\n}\n\nfunction ExecuteCommand( commandName ) {\n\t// Get the editor instance that we want to interact with.\n\tvar editor = CKEDITOR.instances.editor1;\n\n\t// Check the active editing mode.\n\tif ( editor.mode == 'wysiwyg' )\n\t{\n\t\t// Execute the command.\n\t\t// http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand\n\t\teditor.execCommand( commandName );\n\t}\n\telse\n\t\talert( 'You must be in WYSIWYG mode!' );\n}\n\nfunction CheckDirty() {\n\t// Get the editor instance that we want to interact with.\n\tvar editor = CKEDITOR.instances.editor1;\n\t// Checks whether the current editor contents present changes when compared\n\t// to the contents loaded into the editor at startup\n\t// http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty\n\talert( editor.checkDirty() );\n}\n\nfunction ResetDirty() {\n\t// Get the editor instance that we want to interact with.\n\tvar editor = CKEDITOR.instances.editor1;\n\t// Resets the \"dirty state\" of the editor (see CheckDirty())\n\t// http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-resetDirty\n\teditor.resetDirty();\n\talert( 'The \"IsDirty\" status has been reset' );\n}\n\nfunction Focus() {\n\tCKEDITOR.instances.editor1.focus();\n}\n\nfunction onFocus() {\n\tdocument.getElementById( 'eMessage' ).innerHTML = '<b>' + this.name + ' is focused </b>';\n}\n\nfunction onBlur() {\n\tdocument.getElementById( 'eMessage' ).innerHTML = this.name + ' lost focus';\n}\n\n\t</script>\n\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\">CKEditor Samples</a> &raquo; Using CKEditor JavaScript API\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/api.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t<p>\n\t\tThis sample shows how to use the\n\t\t<a class=\"samples\" href=\"http://docs.ckeditor.com/#!/api/CKEDITOR.editor\">CKEditor JavaScript API</a>\n\t\tto interact with the editor at runtime.\n\t</p>\n\t<p>\n\t\tFor details on how to create this setup check the source code of this sample page.\n\t</p>\n\t</div>\n\n\t<!-- This <div> holds alert messages to be display in the sample page. -->\n\t<div id=\"alerts\">\n\t\t<noscript>\n\t\t\t<p>\n\t\t\t\t<strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript\n\t\t\t\tsupport, like yours, you should still see the contents (HTML data) and you should\n\t\t\t\tbe able to edit it normally, without a rich editor interface.\n\t\t\t</p>\n\t\t</noscript>\n\t</div>\n\t<form action=\"../../../samples/sample_posteddata.php\" method=\"post\">\n\t\t<textarea cols=\"100\" id=\"editor1\" name=\"editor1\" rows=\"10\">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href=\"http://ckeditor.com/\"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\n\n\t\t<script>\n\t\t\t// Replace the <textarea id=\"editor1\"> with an CKEditor instance.\n\t\t\tCKEDITOR.replace( 'editor1', {\n\t\t\t\ton: {\n\t\t\t\t\tfocus: onFocus,\n\t\t\t\t\tblur: onBlur,\n\n\t\t\t\t\t// Check for availability of corresponding plugins.\n\t\t\t\t\tpluginsLoaded: function( evt ) {\n\t\t\t\t\t\tvar doc = CKEDITOR.document, ed = evt.editor;\n\t\t\t\t\t\tif ( !ed.getCommand( 'bold' ) )\n\t\t\t\t\t\t\tdoc.getById( 'exec-bold' ).hide();\n\t\t\t\t\t\tif ( !ed.getCommand( 'link' ) )\n\t\t\t\t\t\t\tdoc.getById( 'exec-link' ).hide();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t</script>\n\n\t\t<p id=\"eMessage\">\n\t\t</p>\n\n\t\t<div id=\"eButtons\" style=\"display: none\">\n\t\t\t<input id=\"exec-bold\" onclick=\"ExecuteCommand('bold');\" type=\"button\" value=\"Execute &quot;bold&quot; Command\">\n\t\t\t<input id=\"exec-link\" onclick=\"ExecuteCommand('link');\" type=\"button\" value=\"Execute &quot;link&quot; Command\">\n\t\t\t<input onclick=\"Focus();\" type=\"button\" value=\"Focus\">\n\t\t\t<br><br>\n\t\t\t<input onclick=\"InsertHTML();\" type=\"button\" value=\"Insert HTML\">\n\t\t\t<input onclick=\"SetContents();\" type=\"button\" value=\"Set Editor Contents\">\n\t\t\t<input onclick=\"GetContents();\" type=\"button\" value=\"Get Editor Contents (HTML)\">\n\t\t\t<br>\n\t\t\t<textarea cols=\"100\" id=\"htmlArea\" rows=\"3\">&lt;h2&gt;Test&lt;/h2&gt;&lt;p&gt;This is some &lt;a href=\"/Test1.html\"&gt;sample&lt;/a&gt; HTML code.&lt;/p&gt;</textarea>\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t<input onclick=\"InsertText();\" type=\"button\" value=\"Insert Text\">\n\t\t\t<br>\n\t\t\t<textarea cols=\"100\" id=\"txtArea\" rows=\"3\">   First line with some leading whitespaces.\n\nSecond line of text preceded by two line breaks.</textarea>\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t<input onclick=\"CheckDirty();\" type=\"button\" value=\"checkDirty()\">\n\t\t\t<input onclick=\"ResetDirty();\" type=\"button\" value=\"resetDirty()\">\n\t\t</div>\n\t</form>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/appendto.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Append To Page Element Using JavaScript Code &mdash; CKEditor Sample</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<link rel=\"stylesheet\" href=\"sample.css\">\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\">CKEditor Samples</a> &raquo; Append To Page Element Using JavaScript Code\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out the <a href=\"http://sdk.ckeditor.com/\">brand new samples in CKEditor SDK</a>.\n\t</div>\n\t<div id=\"section1\">\n\t\t<div class=\"description\">\n\t\t\t<p>\n\t\t\t\tThe <code><a class=\"samples\" href=\"http://docs.ckeditor.com/#!/api/CKEDITOR-method-appendTo\">CKEDITOR.appendTo()</a></code> method serves to to place editors inside existing DOM elements. Unlike <code><a class=\"samples\" href=\"http://docs.ckeditor.com/#!/api/CKEDITOR-method-replace\">CKEDITOR.replace()</a></code>,\n\t\t\t\ta target container to be replaced is no longer necessary. A new editor\n\t\t\t\tinstance is inserted directly wherever it is desired.\n\t\t\t</p>\n<pre class=\"samples\">CKEDITOR.appendTo( '<em>container_id</em>',\n\t{ /* Configuration options to be used. */ }\n\t'Editor content to be used.'\n);</pre>\n\t\t</div>\n\t\t<script>\n\n\t\t\t// This call can be placed at any point after the\n\t\t\t// DOM element to append CKEditor to or inside the <head><script>\n\t\t\t// in a window.onload event handler.\n\n\t\t\t// Append a CKEditor instance using the default configuration and the\n\t\t\t// provided content to the <div> element of ID \"section1\".\n\t\t\tCKEDITOR.appendTo( 'section1',\n\t\t\t\tnull,\n\t\t\t\t'<p>This is some <strong>sample text</strong>. You are using <a href=\"http://ckeditor.com/\">CKEditor</a>.</p>'\n\t\t\t);\n\n\t\t</script>\n\t</div>\n\t<br>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/assets/outputxhtml/outputxhtml.css",
    "content": "/*\n * Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n *\n * Styles used by the XHTML 1.1 sample page (xhtml.html).\n */\n\n/**\n * Basic definitions for the editing area.\n */\nbody\n{\n\tfont-family: Arial, Verdana, sans-serif;\n\tfont-size: 80%;\n\tcolor: #000000;\n\tbackground-color: #ffffff;\n\tpadding: 5px;\n\tmargin: 0px;\n}\n\n/**\n * Core styles.\n */\n\n.Bold\n{\n\tfont-weight: bold;\n}\n\n.Italic\n{\n\tfont-style: italic;\n}\n\n.Underline\n{\n\ttext-decoration: underline;\n}\n\n.StrikeThrough\n{\n\ttext-decoration: line-through;\n}\n\n.Subscript\n{\n\tvertical-align: sub;\n\tfont-size: smaller;\n}\n\n.Superscript\n{\n\tvertical-align: super;\n\tfont-size: smaller;\n}\n\n/**\n * Font faces.\n */\n\n.FontComic\n{\n\tfont-family: 'Comic Sans MS';\n}\n\n.FontCourier\n{\n\tfont-family: 'Courier New';\n}\n\n.FontTimes\n{\n\tfont-family: 'Times New Roman';\n}\n\n/**\n * Font sizes.\n */\n\n.FontSmaller\n{\n\tfont-size: smaller;\n}\n\n.FontLarger\n{\n\tfont-size: larger;\n}\n\n.FontSmall\n{\n\tfont-size: 8pt;\n}\n\n.FontBig\n{\n\tfont-size: 14pt;\n}\n\n.FontDouble\n{\n\tfont-size: 200%;\n}\n\n/**\n * Font colors.\n */\n.FontColor1\n{\n\tcolor: #ff9900;\n}\n\n.FontColor2\n{\n\tcolor: #0066cc;\n}\n\n.FontColor3\n{\n\tcolor: #ff0000;\n}\n\n.FontColor1BG\n{\n\tbackground-color: #ff9900;\n}\n\n.FontColor2BG\n{\n\tbackground-color: #0066cc;\n}\n\n.FontColor3BG\n{\n\tbackground-color: #ff0000;\n}\n\n/**\n * Indentation.\n */\n\n.Indent1\n{\n\tmargin-left: 40px;\n}\n\n.Indent2\n{\n\tmargin-left: 80px;\n}\n\n.Indent3\n{\n\tmargin-left: 120px;\n}\n\n/**\n * Alignment.\n */\n\n.JustifyLeft\n{\n\ttext-align: left;\n}\n\n.JustifyRight\n{\n\ttext-align: right;\n}\n\n.JustifyCenter\n{\n\ttext-align: center;\n}\n\n.JustifyFull\n{\n\ttext-align: justify;\n}\n\n/**\n * Other.\n */\n\ncode\n{\n\tfont-family: courier, monospace;\n\tbackground-color: #eeeeee;\n\tpadding-left: 1px;\n\tpadding-right: 1px;\n\tborder: #c0c0c0 1px solid;\n}\n\nkbd\n{\n\tpadding: 0px 1px 0px 1px;\n\tborder-width: 1px 2px 2px 1px;\n\tborder-style: solid;\n}\n\nblockquote\n{\n\tcolor: #808080;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/assets/posteddata.php",
    "content": "<!DOCTYPE html>\n<?php\n/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n?>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Sample &mdash; CKEditor</title>\n\t<link rel=\"stylesheet\" href=\"sample.css\">\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\tCKEditor &mdash; Posted Data\n\t</h1>\n\t<table border=\"1\" cellspacing=\"0\" id=\"outputSample\">\n\t\t<colgroup><col width=\"120\"></colgroup>\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th>Field&nbsp;Name</th>\n\t\t\t\t<th>Value</th>\n\t\t\t</tr>\n\t\t</thead>\n<?php\n\nif (!empty($_POST))\n{\n\tforeach ( $_POST as $key => $value )\n\t{\n\t\tif ( ( !is_string($value) && !is_numeric($value) ) || !is_string($key) )\n\t\t\tcontinue;\n\n\t\tif ( get_magic_quotes_gpc() )\n\t\t\t$value = htmlspecialchars( stripslashes((string)$value) );\n\t\telse\n\t\t\t$value = htmlspecialchars( (string)$value );\n?>\n\t\t<tr>\n\t\t\t<th style=\"vertical-align: top\"><?php echo htmlspecialchars( (string)$key ); ?></th>\n\t\t\t<td><pre class=\"samples\"><?php echo $value; ?></pre></td>\n\t\t</tr>\n\t<?php\n\t}\n}\n?>\n\t</table>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico Knabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/assets/uilanguages/languages.js",
    "content": "﻿/*\n Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n For licensing, see LICENSE.md or http://ckeditor.com/license\n*/\nvar CKEDITOR_LANGS=function(){var c={af:\"Afrikaans\",ar:\"Arabic\",bg:\"Bulgarian\",bn:\"Bengali/Bangla\",bs:\"Bosnian\",ca:\"Catalan\",cs:\"Czech\",cy:\"Welsh\",da:\"Danish\",de:\"German\",\"de-ch\":\"German (Switzerland)\",el:\"Greek\",en:\"English\",\"en-au\":\"English (Australia)\",\"en-ca\":\"English (Canadian)\",\"en-gb\":\"English (United Kingdom)\",eo:\"Esperanto\",es:\"Spanish\",et:\"Estonian\",eu:\"Basque\",fa:\"Persian\",fi:\"Finnish\",fo:\"Faroese\",fr:\"French\",\"fr-ca\":\"French (Canada)\",gl:\"Galician\",gu:\"Gujarati\",he:\"Hebrew\",hi:\"Hindi\",\nhr:\"Croatian\",hu:\"Hungarian\",id:\"Indonesian\",is:\"Icelandic\",it:\"Italian\",ja:\"Japanese\",ka:\"Georgian\",km:\"Khmer\",ko:\"Korean\",ku:\"Kurdish\",lt:\"Lithuanian\",lv:\"Latvian\",mk:\"Macedonian\",mn:\"Mongolian\",ms:\"Malay\",nb:\"Norwegian Bokmal\",nl:\"Dutch\",no:\"Norwegian\",pl:\"Polish\",pt:\"Portuguese (Portugal)\",\"pt-br\":\"Portuguese (Brazil)\",ro:\"Romanian\",ru:\"Russian\",si:\"Sinhala\",sk:\"Slovak\",sq:\"Albanian\",sl:\"Slovenian\",sr:\"Serbian (Cyrillic)\",\"sr-latn\":\"Serbian (Latin)\",sv:\"Swedish\",th:\"Thai\",tr:\"Turkish\",tt:\"Tatar\",\nug:\"Uighur\",uk:\"Ukrainian\",vi:\"Vietnamese\",zh:\"Chinese Traditional\",\"zh-cn\":\"Chinese Simplified\"},b=[],a;for(a in CKEDITOR.lang.languages)b.push({code:a,name:c[a]||a});b.sort(function(a,b){return a.name<b.name?-1:1});return b}();"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/datafiltering.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Data Filtering &mdash; CKEditor Sample</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<link rel=\"stylesheet\" href=\"sample.css\">\n\t<script>\n\t\t// Remove advanced tabs for all editors.\n\t\tCKEDITOR.config.removeDialogTabs = 'image:advanced;link:advanced;flash:advanced;creatediv:advanced;editdiv:advanced';\n\t</script>\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\">CKEditor Samples</a> &raquo; Data Filtering and Features Activation\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/acf.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample page demonstrates the idea of Advanced Content Filter\n\t\t\t(<abbr title=\"Advanced Content Filter\">ACF</abbr>), a sophisticated\n\t\t\ttool that takes control over what kind of data is accepted by the editor and what\n\t\t\tkind of output is produced.\n\t\t</p>\n\t\t<h2>When and what is being filtered?</h2>\n\t\t<p>\n\t\t\t<abbr title=\"Advanced Content Filter\">ACF</abbr> controls\n\t\t\t<strong>every single source of data</strong> that comes to the editor.\n\t\t\tIt process both HTML that is inserted manually (i.e. pasted by the user)\n\t\t\tand programmatically like:\n\t\t</p>\n<pre class=\"samples\">\neditor.setData( '&lt;p&gt;Hello world!&lt;/p&gt;' );\n</pre>\n\t\t<p>\n\t\t\t<abbr title=\"Advanced Content Filter\">ACF</abbr> discards invalid,\n\t\t\tuseless HTML tags and attributes so the editor remains \"clean\" during\n\t\t\truntime. <abbr title=\"Advanced Content Filter\">ACF</abbr> behaviour\n\t\t\tcan be configured and adjusted for a particular case to prevent the\n\t\t\toutput HTML (i.e. in CMS systems) from being polluted.\n\n\t\t\tThis kind of filtering is a first, client-side line of defense\n\t\t\tagainst \"<a href=\"http://en.wikipedia.org/wiki/Tag_soup\">tag soups</a>\",\n\t\t\tthe tool that precisely restricts which tags, attributes and styles\n\t\t\tare allowed (desired). When properly configured, <abbr title=\"Advanced Content Filter\">ACF</abbr>\n\t\t\tis an easy and fast way to produce a high-quality, intentionally filtered HTML.\n\t\t</p>\n\n\t\t<h3>How to configure or disable ACF?</h3>\n\t\t<p>\n\t\t\tAdvanced Content Filter is enabled by default, working in \"automatic mode\", yet\n\t\t\tit provides a set of easy rules that allow adjusting filtering rules\n\t\t\tand disabling the entire feature when necessary. The config property\n\t\t\tresponsible for this feature is <code><a class=\"samples\"\n\t\t\thref=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent\">config.allowedContent</a></code>.\n\t\t</p>\n\t\t<p>\n\t\t\tBy \"automatic mode\" is meant that loaded plugins decide which kind\n\t\t\tof content is enabled and which is not. For example, if the link\n\t\t\tplugin is loaded it implies that <code>&lt;a&gt;</code> tag is\n\t\t\tautomatically allowed. Each plugin is given a set\n\t\t\tof predefined <abbr title=\"Advanced Content Filter\">ACF</abbr> rules\n\t\t\tthat control the editor until <code><a class=\"samples\"\n\t\t\thref=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent\">\n\t\t\tconfig.allowedContent</a></code>\n\t\t\tis defined manually.\n\t\t</p>\n\t\t<p>\n\t\t\tLet's assume our intention is to restrict the editor to accept (produce) <strong>paragraphs\n\t\t\tonly: no attributes, no styles, no other tags</strong>.\n\t\t\tWith <abbr title=\"Advanced Content Filter\">ACF</abbr>\n\t\t\tthis is very simple. Basically set <code><a class=\"samples\"\n\t\t\thref=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent\">\n\t\t\tconfig.allowedContent</a></code> to <code>'p'</code>:\n\t\t</p>\n<pre class=\"samples\">\nvar editor = CKEDITOR.replace( <em>textarea_id</em>, {\n\t<strong>allowedContent: 'p'</strong>\n} );\n</pre>\n\t\t<p>\n\t\t\tNow try to play with allowed content:\n\t\t</p>\n<pre class=\"samples\">\n// Trying to insert disallowed tag and attribute.\neditor.setData( '&lt;p <strong>style=\"color: red\"</strong>&gt;Hello <strong>&lt;em&gt;world&lt;/em&gt;</strong>!&lt;/p&gt;' );\nalert( editor.getData() );\n\n// Filtered data is returned.\n\"&lt;p&gt;Hello world!&lt;/p&gt;\"\n</pre>\n\t\t<p>\n\t\t\tWhat happened? Since <code>config.allowedContent: 'p'</code> is set the editor assumes\n\t\t\tthat only plain <code>&lt;p&gt;</code> are accepted. Nothing more. This is why\n\t\t\t<code>style</code> attribute and <code>&lt;em&gt;</code> tag are gone. The same\n\t\t\tfiltering would happen if we pasted disallowed HTML into this editor.\n\t\t</p>\n\t\t<p>\n\t\t\tThis is just a small sample of what <abbr title=\"Advanced Content Filter\">ACF</abbr>\n\t\t\tcan do. To know more, please refer to the sample section below and\n\t\t\t<a href=\"http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter\">the official Advanced Content Filter guide</a>.\n\t\t</p>\n\t\t<p>\n\t\t\tYou may, of course, want CKEditor to avoid filtering of any kind.\n\t\t\tTo get rid of <abbr title=\"Advanced Content Filter\">ACF</abbr>,\n\t\t\tbasically set <code><a class=\"samples\"\n\t\t\thref=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent\">\n\t\t\tconfig.allowedContent</a></code> to <code>true</code> like this:\n\t\t</p>\n<pre class=\"samples\">\nCKEDITOR.replace( <em>textarea_id</em>, {\n\t<strong>allowedContent: true</strong>\n} );\n</pre>\n\n\t\t<h2>Beyond data flow: Features activation</h2>\n\t\t<p>\n\t\t\t<abbr title=\"Advanced Content Filter\">ACF</abbr> is far more than\n\t\t\t<abbr title=\"Input/Output\">I/O</abbr> control: the entire\n\t\t\t<abbr title=\"User Interface\">UI</abbr> of the editor is adjusted to what\n\t\t\tfilters restrict. For example: if <code>&lt;a&gt;</code> tag is\n\t\t\t<strong>disallowed</strong>\n\t\t\tby <abbr title=\"Advanced Content Filter\">ACF</abbr>,\n\t\t\tthen accordingly <code>link</code> command, toolbar button and link dialog\n\t\t\tare also disabled. Editor is smart: it knows which features must be\n\t\t\tremoved from the interface to match filtering rules.\n\t\t</p>\n\t\t<p>\n\t\t\tCKEditor can be far more specific. If <code>&lt;a&gt;</code> tag is\n\t\t\t<strong>allowed</strong> by filtering rules to be used but it is restricted\n\t\t\tto have only one attribute (<code>href</code>)\n\t\t\t<code>config.allowedContent = 'a[!href]'</code>, then\n\t\t\t\"Target\" tab of the link dialog is automatically disabled as <code>target</code>\n\t\t\tattribute isn't included in <abbr title=\"Advanced Content Filter\">ACF</abbr> rules\n\t\t\tfor <code>&lt;a&gt;</code>. This behaviour applies to dialog fields, context\n\t\t\tmenus and toolbar buttons.\n\t\t</p>\n\n\t\t<h2>Sample configurations</h2>\n\t\t<p>\n\t\t\tThere are several editor instances below that present different\n\t\t\t<abbr title=\"Advanced Content Filter\">ACF</abbr> setups. <strong>All of them,\n\t\t\texcept the inline instance, share the same HTML content</strong> to visualize\n\t\t\thow different filtering rules affect the same input data.\n\t\t</p>\n\t</div>\n\n\t<div>\n\t\t<label for=\"editor1\">\n\t\t\tEditor 1:\n\t\t</label>\n\t\t<div class=\"description\">\n\t\t\t<p>\n\t\t\t\tThis editor is using default configuration (\"automatic mode\"). It means that\n\t\t\t\t<code><a class=\"samples\"\n\t\t\t\thref=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent\">\n\t\t\t\tconfig.allowedContent</a></code> is defined by loaded plugins.\n\t\t\t\tEach plugin extends filtering rules to make it's own associated content\n\t\t\t\tavailable for the user.\n\t\t\t</p>\n\t\t</div>\n\t\t<textarea cols=\"80\" id=\"editor1\" name=\"editor1\" rows=\"10\">\n\t\t\t&lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;\n\t\t</textarea>\n\n\t\t<script>\n\n\t\t\tCKEDITOR.replace( 'editor1' );\n\n\t\t</script>\n\t</div>\n\n\t<br>\n\n\t<div>\n\t\t<label for=\"editor2\">\n\t\t\tEditor 2:\n\t\t</label>\n\t\t<div class=\"description\">\n\t\t\t<p>\n\t\t\t\tThis editor is using a custom configuration for\n\t\t\t\t<abbr title=\"Advanced Content Filter\">ACF</abbr>:\n\t\t\t</p>\n<pre class=\"samples\">\nCKEDITOR.replace( 'editor2', {\n\tallowedContent:\n\t\t'h1 h2 h3 p blockquote strong em;' +\n\t\t'a[!href];' +\n\t\t'img(left,right)[!src,alt,width,height];' +\n\t\t'table tr th td caption;' +\n\t\t'span{!font-family};' +'\n\t\t'span{!color};' +\n\t\t'span(!marker);' +\n\t\t'del ins'\n} );\n</pre>\n\t\t\t<p>\n\t\t\t\tThe following rules may require additional explanation:\n\t\t\t</p>\n\t\t\t<ul>\n\t\t\t\t<li>\n\t\t\t\t\t<code>h1 h2 h3 p blockquote strong em</code> - These tags\n\t\t\t\t\tare accepted by the editor. Any tag attributes will be discarded.\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<code>a[!href]</code> - <code>href</code> attribute is obligatory\n\t\t\t\t\tfor <code>&lt;a&gt;</code> tag. Tags without this attribute\n\t\t\t\t\tare disarded. No other attribute will be accepted.\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<code>img(left,right)[!src,alt,width,height]</code> - <code>src</code>\n\t\t\t\t\tattribute is obligatory for <code>&lt;img&gt;</code> tag.\n\t\t\t\t\t<code>alt</code>, <code>width</code>, <code>height</code>\n\t\t\t\t\tand <code>class</code> attributes are accepted but\n\t\t\t\t\t<code>class</code> must be either <code>class=\"left\"</code>\n\t\t\t\t\tor <code>class=\"right\"</code>\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<code>table tr th td caption</code> - These tags\n\t\t\t\t\tare accepted by the editor. Any tag attributes will be discarded.\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<code>span{!font-family}</code>, <code>span{!color}</code>,\n\t\t\t\t\t<code>span(!marker)</code> - <code>&lt;span&gt;</code> tags\n\t\t\t\t\twill be accepted if either <code>font-family</code> or\n\t\t\t\t\t<code>color</code> style is set or <code>class=\"marker\"</code>\n\t\t\t\t\tis present.\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<code>del ins</code> - These tags\n\t\t\t\t\tare accepted by the editor. Any tag attributes will be discarded.\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<p>\n\t\t\t\tPlease note that <strong><abbr title=\"User Interface\">UI</abbr> of the\n\t\t\t\teditor is different</strong>. It's a response to what happened to the filters.\n\t\t\t\tSince <code>text-align</code> isn't allowed, the align toolbar is gone.\n\t\t\t\tThe same thing happened to subscript/superscript, strike, underline\n\t\t\t\t(<code>&lt;u&gt;</code>, <code>&lt;sub&gt;</code>, <code>&lt;sup&gt;</code>\n\t\t\t\tare disallowed by <code><a class=\"samples\"\n\t\t\t\thref=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent\">\n\t\t\t\tconfig.allowedContent</a></code>) and many other buttons.\n\t\t\t</p>\n\t\t</div>\n\t\t<textarea cols=\"80\" id=\"editor2\" name=\"editor2\" rows=\"10\">\n\t\t\t&lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;\n\t\t</textarea>\n\t\t<script>\n\n\t\t\tCKEDITOR.replace( 'editor2', {\n\t\t\t\tallowedContent:\n\t\t\t\t\t'h1 h2 h3 p blockquote strong em;' +\n\t\t\t\t\t'a[!href];' +\n\t\t\t\t\t'img(left,right)[!src,alt,width,height];' +\n\t\t\t\t\t'table tr th td caption;' +\n\t\t\t\t\t'span{!font-family};' +\n\t\t\t\t\t'span{!color};' +\n\t\t\t\t\t'span(!marker);' +\n\t\t\t\t\t'del ins'\n\t\t\t} );\n\n\t\t</script>\n\t</div>\n\n\t<br>\n\n\t<div>\n\t\t<label for=\"editor3\">\n\t\t\tEditor 3:\n\t\t</label>\n\t\t<div class=\"description\">\n\t\t\t<p>\n\t\t\t\tThis editor is using a custom configuration for\n\t\t\t\t<abbr title=\"Advanced Content Filter\">ACF</abbr>.\n\t\t\t\tNote that filters can be configured as an object literal\n\t\t\t\tas an alternative to a string-based definition.\n\t\t\t</p>\n<pre class=\"samples\">\nCKEDITOR.replace( 'editor3', {\n\tallowedContent: {\n\t\t'b i ul ol big small': true,\n\t\t'h1 h2 h3 p blockquote li': {\n\t\t\tstyles: 'text-align'\n\t\t},\n\t\ta: { attributes: '!href,target' },\n\t\timg: {\n\t\t\tattributes: '!src,alt',\n\t\t\tstyles: 'width,height',\n\t\t\tclasses: 'left,right'\n\t\t}\n\t}\n} );\n</pre>\n\t\t</div>\n\t\t<textarea cols=\"80\" id=\"editor3\" name=\"editor3\" rows=\"10\">\n\t\t\t&lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;\n\t\t</textarea>\n\t\t<script>\n\n\t\t\tCKEDITOR.replace( 'editor3', {\n\t\t\t\tallowedContent: {\n\t\t\t\t\t'b i ul ol big small': true,\n\t\t\t\t\t'h1 h2 h3 p blockquote li': {\n\t\t\t\t\t\tstyles: 'text-align'\n\t\t\t\t\t},\n\t\t\t\t\ta: { attributes: '!href,target' },\n\t\t\t\t\timg: {\n\t\t\t\t\t\tattributes: '!src,alt',\n\t\t\t\t\t\tstyles: 'width,height',\n\t\t\t\t\t\tclasses: 'left,right'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t</script>\n\t</div>\n\n\t<br>\n\n\t<div>\n\t\t<label for=\"editor4\">\n\t\t\tEditor 4:\n\t\t</label>\n\t\t<div class=\"description\">\n\t\t\t<p>\n\t\t\t\tThis editor is using a custom set of plugins and buttons.\n\t\t\t</p>\n<pre class=\"samples\">\nCKEDITOR.replace( 'editor4', {\n\tremovePlugins: 'bidi,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley',\n\tremoveButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image',\n\tformat_tags: 'p;h1;h2;h3;pre;address'\n} );\n</pre>\n\t\t\t<p>\n\t\t\t\tAs you can see, removing plugins and buttons implies filtering.\n\t\t\t\tSeveral tags are not allowed in the editor because there's no\n\t\t\t\tplugin/button that is responsible for creating and editing this\n\t\t\t\tkind of content (for example: the image is missing because\n\t\t\t\tof <code>removeButtons: 'Image'</code>). The conclusion is that\n\t\t\t\t<abbr title=\"Advanced Content Filter\">ACF</abbr> works \"backwards\"\n\t\t\t\tas well: <strong>modifying <abbr title=\"User Interface\">UI</abbr>\n\t\t\t\telements is changing allowed content rules</strong>.\n\t\t\t</p>\n\t\t</div>\n\t\t<textarea cols=\"80\" id=\"editor4\" name=\"editor4\" rows=\"10\">\n\t\t\t&lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;\n\t\t</textarea>\n\t\t<script>\n\n\t\t\tCKEDITOR.replace( 'editor4', {\n\t\t\t\tremovePlugins: 'bidi,div,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley',\n\t\t\t\tremoveButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image',\n\t\t\t\tformat_tags: 'p;h1;h2;h3;pre;address'\n\t\t\t} );\n\n\t\t</script>\n\t</div>\n\n\t<br>\n\n\t<div>\n\t\t<label for=\"editor5\">\n\t\t\tEditor 5:\n\t\t</label>\n\t\t<div class=\"description\">\n\t\t\t<p>\n\t\t\t\tThis editor is built on editable <code>&lt;h1&gt;</code> element.\n\t\t\t\t<abbr title=\"Advanced Content Filter\">ACF</abbr> takes care of\n\t\t\t\twhat can be included in <code>&lt;h1&gt;</code>. Note that there\n\t\t\t\tare no block styles in Styles combo. Also why lists, indentation,\n\t\t\t\tblockquote, div, form and other buttons are missing.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<abbr title=\"Advanced Content Filter\">ACF</abbr> makes sure that\n\t\t\t\tno disallowed tags will come to <code>&lt;h1&gt;</code> so the final\n\t\t\t\tmarkup is valid. If the user tried to paste some invalid HTML\n\t\t\t\tinto this editor (let's say a list), it would be automatically\n\t\t\t\tconverted into plain text.\n\t\t\t</p>\n\t\t</div>\n\t\t<h1 id=\"editor5\" contenteditable=\"true\">\n\t\t\t<em>Apollo 11</em> was the spaceflight that landed the first humans, Americans <a href=\"http://en.wikipedia.org/wiki/Neil_Armstrong\" title=\"Neil Armstrong\">Neil Armstrong</a> and <a href=\"http://en.wikipedia.org/wiki/Buzz_Aldrin\" title=\"Buzz Aldrin\">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC.\n\t\t</h1>\n\t</div>\n\n\t<br>\n\n\t<div>\n\t\t<label for=\"editor3\">\n\t\t\tEditor 6:\n\t\t</label>\n\t\t<div class=\"description\">\n\t\t\t<p>\n\t\t\t\tThis editor is using a custom configuration for <abbr title=\"Advanced Content Filter\">ACF</abbr>.\n\t\t\t\tIt's using the <a href=\"http://docs.ckeditor.com/#!/guide/dev_disallowed_content\" target=\"_blank\">\n\t\t\t\tDisallowed Content</a> property of the filter to eliminate all <code>title</code> attributes.\n\t\t\t</p>\n\n<pre class=\"samples\">\nCKEDITOR.replace( 'editor6', {\n\tallowedContent: {\n\t\t'b i ul ol big small': true,\n\t\t'h1 h2 h3 p blockquote li': {\n\t\t\tstyles: 'text-align'\n\t\t},\n\t\ta: {attributes: '!href,target'},\n\t\timg: {\n\t\t\tattributes: '!src,alt',\n\t\t\tstyles: 'width,height',\n\t\t\tclasses: 'left,right'\n\t\t}\n\t},\n\tdisallowedContent: '*{title*}'\n} );\n</pre>\n\t\t</div>\n\t\t<textarea cols=\"80\" id=\"editor6\" name=\"editor6\" rows=\"10\">\n\t\t\t&lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;\n\t\t</textarea>\n\t\t<script>\n\n\t\t\tCKEDITOR.replace( 'editor6', {\n\t\t\t\tallowedContent: {\n\t\t\t\t\t'b i ul ol big small': true,\n\t\t\t\t\t'h1 h2 h3 p blockquote li': {\n\t\t\t\t\t\tstyles: 'text-align'\n\t\t\t\t\t},\n\t\t\t\t\ta: {attributes: '!href,target'},\n\t\t\t\t\timg: {\n\t\t\t\t\t\tattributes: '!src,alt',\n\t\t\t\t\t\tstyles: 'width,height',\n\t\t\t\t\t\tclasses: 'left,right'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisallowedContent: '*{title*}'\n\t\t\t} );\n\n\t\t</script>\n\t</div>\n\n\t<br>\n\n\t<div>\n\t\t<label for=\"editor7\">\n\t\t\tEditor 7:\n\t\t</label>\n\t\t<div class=\"description\">\n\t\t\t<p>\n\t\t\t\tThis editor is using a custom configuration for <abbr title=\"Advanced Content Filter\">ACF</abbr>.\n\t\t\t\tIt's using the <a href=\"http://docs.ckeditor.com/#!/guide/dev_disallowed_content\" target=\"_blank\">\n\t\t\t\tDisallowed Content</a> property of the filter to eliminate all <code>a</code> and <code>img</code> tags,\n\t\t\t\twhile allowing all other tags.\n\t\t\t</p>\n<pre class=\"samples\">\nCKEDITOR.replace( 'editor7', {\n\tallowedContent: {\n\t\t// Allow all content.\n\t\t$1: {\n\t\t\telements: CKEDITOR.dtd,\n\t\t\tattributes: true,\n\t\t\tstyles: true,\n\t\t\tclasses: true\n\t\t}\n\t},\n\tdisallowedContent: 'img a'\n} );\n</pre>\n\t\t</div>\n\t\t<textarea cols=\"80\" id=\"editor7\" name=\"editor7\" rows=\"10\">\n\t\t\t&lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;\n\t\t</textarea>\n\t\t<script>\n\n\t\t\tCKEDITOR.replace( 'editor7', {\n\t\t\t\tallowedContent: {\n\t\t\t\t\t// allow all content\n\t\t\t\t\t$1: {\n\t\t\t\t\t\telements: CKEDITOR.dtd,\n\t\t\t\t\t\tattributes: true,\n\t\t\t\t\t\tstyles: true,\n\t\t\t\t\t\tclasses: true\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisallowedContent: 'img a'\n\t\t\t} );\n\n\t\t</script>\n\t</div>\n\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/dialog/assets/my_dialog.js",
    "content": "﻿/**\n * Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.dialog.add( 'myDialog', function() {\n\treturn {\n\t\ttitle: 'My Dialog',\n\t\tminWidth: 400,\n\t\tminHeight: 200,\n\t\tcontents: [\n\t\t\t{\n\t\t\t\tid: 'tab1',\n\t\t\t\tlabel: 'First Tab',\n\t\t\t\ttitle: 'First Tab',\n\t\t\t\telements: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: 'input1',\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\tlabel: 'Text Field'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: 'select1',\n\t\t\t\t\t\ttype: 'select',\n\t\t\t\t\t\tlabel: 'Select Field',\n\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t[ 'option1', 'value1' ],\n\t\t\t\t\t\t\t[ 'option2', 'value2' ]\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'tab2',\n\t\t\t\tlabel: 'Second Tab',\n\t\t\t\ttitle: 'Second Tab',\n\t\t\t\telements: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: 'button1',\n\t\t\t\t\t\ttype: 'button',\n\t\t\t\t\t\tlabel: 'Button Field'\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t};\n} );\n\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/dialog/dialog.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Using API to Customize Dialog Windows &mdash; CKEditor Sample</title>\n\t<script src=\"../../../ckeditor.js\"></script>\n\t<link rel=\"stylesheet\" href=\"../../../samples/old/sample.css\">\n\t<meta name=\"ckeditor-sample-name\" content=\"Using the JavaScript API to customize dialog windows\">\n\t<meta name=\"ckeditor-sample-group\" content=\"Advanced Samples\">\n\t<meta name=\"ckeditor-sample-description\" content=\"Using the dialog windows API to customize dialog windows without changing the original editor code.\">\n\t<style>\n\n\t\t.cke_button__mybutton_icon\n\t\t{\n\t\t\tdisplay: none !important;\n\t\t}\n\n\t\t.cke_button__mybutton_label\n\t\t{\n\t\t\tdisplay: inline !important;\n\t\t}\n\n\t</style>\n\t<script>\n\n\t\tCKEDITOR.on( 'instanceCreated', function( ev ){\n\t\t\tvar editor = ev.editor;\n\n\t\t\t// Listen for the \"pluginsLoaded\" event, so we are sure that the\n\t\t\t// \"dialog\" plugin has been loaded and we are able to do our\n\t\t\t// customizations.\n\t\t\teditor.on( 'pluginsLoaded', function() {\n\n\t\t\t\t// If our custom dialog has not been registered, do that now.\n\t\t\t\tif ( !CKEDITOR.dialog.exists( 'myDialog' ) ) {\n\t\t\t\t\t// We need to do the following trick to find out the dialog\n\t\t\t\t\t// definition file URL path. In the real world, you would simply\n\t\t\t\t\t// point to an absolute path directly, like \"/mydir/mydialog.js\".\n\t\t\t\t\tvar href = document.location.href.split( '/' );\n\t\t\t\t\thref.pop();\n\t\t\t\t\thref.push( 'assets/my_dialog.js' );\n\t\t\t\t\thref = href.join( '/' );\n\n\t\t\t\t\t// Finally, register the dialog.\n\t\t\t\t\tCKEDITOR.dialog.add( 'myDialog', href );\n\t\t\t\t}\n\n\t\t\t\t// Register the command used to open the dialog.\n\t\t\t\teditor.addCommand( 'myDialogCmd', new CKEDITOR.dialogCommand( 'myDialog' ) );\n\n\t\t\t\t// Add the a custom toolbar buttons, which fires the above\n\t\t\t\t// command..\n\t\t\t\teditor.ui.add( 'MyButton', CKEDITOR.UI_BUTTON, {\n\t\t\t\t\tlabel: 'My Dialog',\n\t\t\t\t\tcommand: 'myDialogCmd'\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\t// When opening a dialog, its \"definition\" is created for it, for\n\t\t// each editor instance. The \"dialogDefinition\" event is then\n\t\t// fired. We should use this event to make customizations to the\n\t\t// definition of existing dialogs.\n\t\tCKEDITOR.on( 'dialogDefinition', function( ev ) {\n\t\t\t// Take the dialog name and its definition from the event data.\n\t\t\tvar dialogName = ev.data.name;\n\t\t\tvar dialogDefinition = ev.data.definition;\n\n\t\t\t// Check if the definition is from the dialog we're\n\t\t\t// interested on (the \"Link\" dialog).\n\t\t\tif ( dialogName == 'myDialog' && ev.editor.name == 'editor2' ) {\n\t\t\t\t// Get a reference to the \"Link Info\" tab.\n\t\t\t\tvar infoTab = dialogDefinition.getContents( 'tab1' );\n\n\t\t\t\t// Add a new text field to the \"tab1\" tab page.\n\t\t\t\tinfoTab.add( {\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tlabel: 'My Custom Field',\n\t\t\t\t\tid: 'customField',\n\t\t\t\t\t'default': 'Sample!',\n\t\t\t\t\tvalidate: function() {\n\t\t\t\t\t\tif ( ( /\\d/ ).test( this.getValue() ) )\n\t\t\t\t\t\t\treturn 'My Custom Field must not contain digits';\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Remove the \"select1\" field from the \"tab1\" tab.\n\t\t\t\tinfoTab.remove( 'select1' );\n\n\t\t\t\t// Set the default value for \"input1\" field.\n\t\t\t\tvar input1 = infoTab.get( 'input1' );\n\t\t\t\tinput1[ 'default' ] = 'www.example.com';\n\n\t\t\t\t// Remove the \"tab2\" tab page.\n\t\t\t\tdialogDefinition.removeContents( 'tab2' );\n\n\t\t\t\t// Add a new tab to the \"Link\" dialog.\n\t\t\t\tdialogDefinition.addContents( {\n\t\t\t\t\tid: 'customTab',\n\t\t\t\t\tlabel: 'My Tab',\n\t\t\t\t\taccessKey: 'M',\n\t\t\t\t\telements: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'myField1',\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\tlabel: 'My Text Field'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'myField2',\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\tlabel: 'Another Text Field'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t});\n\n\t\t\t\t// Provide the focus handler to start initial focus in \"customField\" field.\n\t\t\t\tdialogDefinition.onFocus = function() {\n\t\t\t\t\tvar urlField = this.getContentElement( 'tab1', 'customField' );\n\t\t\t\t\turlField.select();\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\n\t\tvar config = {\n\t\t\textraPlugins: 'dialog',\n\t\t\ttoolbar: [ [ 'MyButton' ] ]\n\t\t};\n\n\t</script>\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"../../../samples/old/index.html\">CKEditor Samples</a> &raquo; Using CKEditor Dialog API\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out the <a href=\"http://sdk.ckeditor.com/\">brand new samples in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows how to use the\n\t\t\t<a class=\"samples\" href=\"http://docs.ckeditor.com/#!/api/CKEDITOR.dialog\">CKEditor Dialog API</a>\n\t\t\tto customize CKEditor dialog windows without changing the original editor code.\n\t\t\tThe following customizations are being done in the example below:\n\t\t</p>\n\t\t<p>\n\t\t\tFor details on how to create this setup check the source code of this sample page.\n\t\t</p>\n\t</div>\n\t<p>A custom dialog is added to the editors using the <code>pluginsLoaded</code> event, from an external <a target=\"_blank\" href=\"assets/my_dialog.js\">dialog definition file</a>:</p>\n\t<ol>\n\t\t<li><strong>Creating a custom dialog window</strong> &ndash; \"My Dialog\" dialog window opened with the \"My Dialog\" toolbar button.</li>\n\t\t<li><strong>Creating a custom button</strong> &ndash; Add button to open the dialog with \"My Dialog\" toolbar button.</li>\n\t</ol>\n\t<textarea cols=\"80\" id=\"editor1\" name=\"editor1\" rows=\"10\">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href=\"http://ckeditor.com/\"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\n\t<script>\n\t\t// Replace the <textarea id=\"editor1\"> with an CKEditor instance.\n\t\tCKEDITOR.replace( 'editor1', config );\n\t</script>\n\t<p>The below editor modify the dialog definition of the above added dialog using the <code>dialogDefinition</code> event:</p>\n\t<ol>\n\t\t<li><strong>Adding dialog tab</strong> &ndash; Add new tab \"My Tab\" to dialog window.</li>\n\t\t<li><strong>Removing a dialog window tab</strong> &ndash; Remove \"Second Tab\" page from the dialog window.</li>\n\t\t<li><strong>Adding dialog window fields</strong> &ndash; Add \"My Custom Field\" to the dialog window.</li>\n\t\t<li><strong>Removing dialog window field</strong> &ndash; Remove \"Select Field\" selection field from the dialog window.</li>\n\t\t<li><strong>Setting default values for dialog window fields</strong> &ndash; Set default value of \"Text Field\" text field. </li>\n\t\t<li><strong>Setup initial focus for dialog window</strong> &ndash; Put initial focus on \"My Custom Field\" text field. </li>\n\t</ol>\n\t<textarea cols=\"80\" id=\"editor2\" name=\"editor2\" rows=\"10\">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href=\"http://ckeditor.com/\"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\n\t<script>\n\n\t\t// Replace the <textarea id=\"editor1\"> with an CKEditor instance.\n\t\tCKEDITOR.replace( 'editor2', config );\n\n\t</script>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/divreplace.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Replace DIV &mdash; CKEditor Sample</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<link href=\"sample.css\" rel=\"stylesheet\">\n\t<style>\n\n\t\tdiv.editable\n\t\t{\n\t\t\tborder: solid 2px transparent;\n\t\t\tpadding-left: 15px;\n\t\t\tpadding-right: 15px;\n\t\t}\n\n\t\tdiv.editable:hover\n\t\t{\n\t\t\tborder-color: black;\n\t\t}\n\n\t</style>\n\t<script>\n\n\t\t// Uncomment the following code to test the \"Timeout Loading Method\".\n\t\t// CKEDITOR.loadFullCoreTimeout = 5;\n\n\t\twindow.onload = function() {\n\t\t\t// Listen to the double click event.\n\t\t\tif ( window.addEventListener )\n\t\t\t\tdocument.body.addEventListener( 'dblclick', onDoubleClick, false );\n\t\t\telse if ( window.attachEvent )\n\t\t\t\tdocument.body.attachEvent( 'ondblclick', onDoubleClick );\n\n\t\t};\n\n\t\tfunction onDoubleClick( ev ) {\n\t\t\t// Get the element which fired the event. This is not necessarily the\n\t\t\t// element to which the event has been attached.\n\t\t\tvar element = ev.target || ev.srcElement;\n\n\t\t\t// Find out the div that holds this element.\n\t\t\tvar name;\n\n\t\t\tdo {\n\t\t\t\telement = element.parentNode;\n\t\t\t}\n\t\t\twhile ( element && ( name = element.nodeName.toLowerCase() ) &&\n\t\t\t\t( name != 'div' || element.className.indexOf( 'editable' ) == -1 ) && name != 'body' );\n\n\t\t\tif ( name == 'div' && element.className.indexOf( 'editable' ) != -1 )\n\t\t\t\treplaceDiv( element );\n\t\t}\n\n\t\tvar editor;\n\n\t\tfunction replaceDiv( div ) {\n\t\t\tif ( editor )\n\t\t\t\teditor.destroy();\n\n\t\t\teditor = CKEDITOR.replace( div );\n\t\t}\n\n\t</script>\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\">CKEditor Samples</a> &raquo; Replace DIV with CKEditor on the Fly\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out the <a href=\"http://sdk.ckeditor.com/\">brand new samples in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows how to automatically replace <code>&lt;div&gt;</code> elements\n\t\t\twith a CKEditor instance on the fly, following user's doubleclick. The content\n\t\t\tthat was previously placed inside the <code>&lt;div&gt;</code> element will now\n\t\t\tbe moved into CKEditor editing area.\n\t\t</p>\n\t\t<p>\n\t\t\tFor details on how to create this setup check the source code of this sample page.\n\t\t</p>\n\t</div>\n\t<p>\n\t\tDouble-click any of the following <code>&lt;div&gt;</code> elements to transform them into\n\t\teditor instances.\n\t</p>\n\t<div class=\"editable\">\n\t\t<h3>\n\t\t\tPart 1\n\t\t</h3>\n\t\t<p>\n\t\t\tLorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi\n\t\t\tsemper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna\n\t\t\trutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla\n\t\t\tnec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce\n\t\t\teu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.\n\t\t</p>\n\t</div>\n\t<div class=\"editable\">\n\t\t<h3>\n\t\t\tPart 2\n\t\t</h3>\n\t\t<p>\n\t\t\tLorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi\n\t\t\tsemper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna\n\t\t\trutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla\n\t\t\tnec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce\n\t\t\teu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.\n\t\t</p>\n\t\t<p>\n\t\t\tDonec velit. Mauris massa. Vestibulum non nulla. Nam suscipit arcu nec elit. Phasellus\n\t\t\tsollicitudin iaculis ante. Ut non mauris et sapien tincidunt adipiscing. Vestibulum\n\t\t\tvitae leo. Suspendisse nec mi tristique nulla laoreet vulputate.\n\t\t</p>\n\t</div>\n\t<div class=\"editable\">\n\t\t<h3>\n\t\t\tPart 3\n\t\t</h3>\n\t\t<p>\n\t\t\tLorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi\n\t\t\tsemper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna\n\t\t\trutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla\n\t\t\tnec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce\n\t\t\teu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.\n\t\t</p>\n\t</div>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/enterkey/enterkey.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>ENTER Key Configuration &mdash; CKEditor Sample</title>\n\t<script src=\"../../../ckeditor.js\"></script>\n\t<link href=\"../../../samples/old/sample.css\" rel=\"stylesheet\">\n\t<meta name=\"ckeditor-sample-name\" content=\"Using the &quot;Enter&quot; key in CKEditor\">\n\t<meta name=\"ckeditor-sample-group\" content=\"Advanced Samples\">\n\t<meta name=\"ckeditor-sample-description\" content=\"Configuring the behavior of &lt;em&gt;Enter&lt;/em&gt; and &lt;em&gt;Shift+Enter&lt;/em&gt; keys.\">\n\t<script>\n\n\t\tvar editor;\n\n\t\tfunction changeEnter() {\n\t\t\t// If we already have an editor, let's destroy it first.\n\t\t\tif ( editor )\n\t\t\t\teditor.destroy( true );\n\n\t\t\t// Create the editor again, with the appropriate settings.\n\t\t\teditor = CKEDITOR.replace( 'editor1', {\n\t\t\t\textraPlugins: 'enterkey',\n\t\t\t\tenterMode: Number( document.getElementById( 'xEnter' ).value ),\n\t\t\t\tshiftEnterMode: Number( document.getElementById( 'xShiftEnter' ).value )\n\t\t\t});\n\t\t}\n\n\t\twindow.onload = changeEnter;\n\n\t</script>\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"../../../samples/old/index.html\">CKEditor Samples</a> &raquo; ENTER Key Configuration\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/enterkey.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows how to configure the <em>Enter</em> and <em>Shift+Enter</em> keys\n\t\t\tto perform actions specified in the\n\t\t\t<a class=\"samples\" href=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode\"><code>enterMode</code></a>\n\t\t\tand <a class=\"samples\" href=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode\"><code>shiftEnterMode</code></a>\n\t\t\tparameters, respectively.\n\t \t\tYou can choose from the following options:\n\t\t</p>\n\t\t<ul class=\"samples\">\n\t\t\t<li><strong><code>ENTER_P</code></strong> &ndash; new <code>&lt;p&gt;</code> paragraphs are created;</li>\n\t\t\t<li><strong><code>ENTER_BR</code></strong> &ndash; lines are broken with <code>&lt;br&gt;</code> elements;</li>\n\t\t\t<li><strong><code>ENTER_DIV</code></strong> &ndash; new <code>&lt;div&gt;</code> blocks are created.</li>\n\t\t</ul>\n\t\t<p>\n\t\t\tThe sample code below shows how to configure CKEditor to create a <code>&lt;div&gt;</code> block when <em>Enter</em> key is pressed.\n\t\t</p>\n<pre class=\"samples\">\nCKEDITOR.replace( '<em>textarea_id</em>', {\n\t<strong>enterMode: CKEDITOR.ENTER_DIV</strong>\n});</pre>\n\t\t<p>\n\t\t\tNote that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of\n\t\t\tthe <code>&lt;textarea&gt;</code> element to be replaced.\n\t\t</p>\n\t</div>\n\t<div style=\"float: left; margin-right: 20px\">\n\t\tWhen <em>Enter</em> is pressed:<br>\n\t\t<select id=\"xEnter\" onchange=\"changeEnter();\">\n\t\t\t<option selected=\"selected\" value=\"1\">Create a new &lt;P&gt; (recommended)</option>\n\t\t\t<option value=\"3\">Create a new &lt;DIV&gt;</option>\n\t\t\t<option value=\"2\">Break the line with a &lt;BR&gt;</option>\n\t\t</select>\n\t</div>\n\t<div style=\"float: left\">\n\t\tWhen <em>Shift+Enter</em> is pressed:<br>\n\t\t<select id=\"xShiftEnter\" onchange=\"changeEnter();\">\n\t\t\t<option value=\"1\">Create a new &lt;P&gt;</option>\n\t\t\t<option value=\"3\">Create a new &lt;DIV&gt;</option>\n\t\t\t<option selected=\"selected\" value=\"2\">Break the line with a &lt;BR&gt; (recommended)</option>\n\t\t</select>\n\t</div>\n\t<br style=\"clear: both\">\n\t<form action=\"../../../samples/sample_posteddata.php\" method=\"post\">\n\t\t<p>\n\t\t\t<br>\n\t\t\t<textarea cols=\"80\" id=\"editor1\" name=\"editor1\" rows=\"10\">This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href=\"http://ckeditor.com/\"&gt;CKEditor&lt;/a&gt;.</textarea>\n\t\t</p>\n\t\t<p>\n\t\t\t<input type=\"submit\" value=\"Submit\">\n\t\t</p>\n\t</form>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/htmlwriter/assets/outputforflash/swfobject.js",
    "content": "﻿var swfobject=function(){function w(){if(!u){try{var a=d.getElementsByTagName(\"body\")[0].appendChild(d.createElement(\"span\"));a.parentNode.removeChild(a)}catch(b){return}u=!0;for(var a=z.length,c=0;c<a;c++)z[c]()}}function M(a){u?a():z[z.length]=a}function N(a){if(\"undefined\"!=typeof n.addEventListener)n.addEventListener(\"load\",a,!1);else if(\"undefined\"!=typeof d.addEventListener)d.addEventListener(\"load\",a,!1);else if(\"undefined\"!=typeof n.attachEvent)U(n,\"onload\",a);else if(\"function\"==typeof n.onload){var b=\nn.onload;n.onload=function(){b();a()}}else n.onload=a}function V(){var a=d.getElementsByTagName(\"body\")[0],b=d.createElement(\"object\");b.setAttribute(\"type\",\"application/x-shockwave-flash\");var c=a.appendChild(b);if(c){var f=0;(function(){if(\"undefined\"!=typeof c.GetVariable){var g=c.GetVariable(\"$version\");g&&(g=g.split(\" \")[1].split(\",\"),e.pv=[parseInt(g[0],10),parseInt(g[1],10),parseInt(g[2],10)])}else if(10>f){f++;setTimeout(arguments.callee,10);return}a.removeChild(b);c=null;E()})()}else E()}\nfunction E(){var a=r.length;if(0<a)for(var b=0;b<a;b++){var c=r[b].id,f=r[b].callbackFn,g={success:!1,id:c};if(0<e.pv[0]){var d=p(c);if(d)if(!A(r[b].swfVersion)||e.wk&&312>e.wk)if(r[b].expressInstall&&F()){g={};g.data=r[b].expressInstall;g.width=d.getAttribute(\"width\")||\"0\";g.height=d.getAttribute(\"height\")||\"0\";d.getAttribute(\"class\")&&(g.styleclass=d.getAttribute(\"class\"));d.getAttribute(\"align\")&&(g.align=d.getAttribute(\"align\"));for(var h={},d=d.getElementsByTagName(\"param\"),k=d.length,l=0;l<\nk;l++)\"movie\"!=d[l].getAttribute(\"name\").toLowerCase()&&(h[d[l].getAttribute(\"name\")]=d[l].getAttribute(\"value\"));G(g,h,c,f)}else W(d),f&&f(g);else v(c,!0),f&&(g.success=!0,g.ref=H(c),f(g))}else v(c,!0),f&&((c=H(c))&&\"undefined\"!=typeof c.SetVariable&&(g.success=!0,g.ref=c),f(g))}}function H(a){var b=null;(a=p(a))&&\"OBJECT\"==a.nodeName&&(\"undefined\"!=typeof a.SetVariable?b=a:(a=a.getElementsByTagName(\"object\")[0])&&(b=a));return b}function F(){return!B&&A(\"6.0.65\")&&(e.win||e.mac)&&!(e.wk&&312>e.wk)}\nfunction G(a,b,c,f){B=!0;I=f||null;O={success:!1,id:c};var g=p(c);if(g){\"OBJECT\"==g.nodeName?(y=J(g),C=null):(y=g,C=c);a.id=\"SWFObjectExprInst\";if(\"undefined\"==typeof a.width||!/%$/.test(a.width)&&310>parseInt(a.width,10))a.width=\"310\";if(\"undefined\"==typeof a.height||!/%$/.test(a.height)&&137>parseInt(a.height,10))a.height=\"137\";d.title=d.title.slice(0,47)+\" - Flash Player Installation\";f=e.ie&&e.win?\"ActiveX\":\"PlugIn\";f=\"MMredirectURL\\x3d\"+n.location.toString().replace(/&/g,\"%26\")+\"\\x26MMplayerType\\x3d\"+\nf+\"\\x26MMdoctitle\\x3d\"+d.title;b.flashvars=\"undefined\"!=typeof b.flashvars?b.flashvars+(\"\\x26\"+f):f;e.ie&&e.win&&4!=g.readyState&&(f=d.createElement(\"div\"),c+=\"SWFObjectNew\",f.setAttribute(\"id\",c),g.parentNode.insertBefore(f,g),g.style.display=\"none\",function(){4==g.readyState?g.parentNode.removeChild(g):setTimeout(arguments.callee,10)}());K(a,b,c)}}function W(a){if(e.ie&&e.win&&4!=a.readyState){var b=d.createElement(\"div\");a.parentNode.insertBefore(b,a);b.parentNode.replaceChild(J(a),b);a.style.display=\n\"none\";(function(){4==a.readyState?a.parentNode.removeChild(a):setTimeout(arguments.callee,10)})()}else a.parentNode.replaceChild(J(a),a)}function J(a){var b=d.createElement(\"div\");if(e.win&&e.ie)b.innerHTML=a.innerHTML;else if(a=a.getElementsByTagName(\"object\")[0])if(a=a.childNodes)for(var c=a.length,f=0;f<c;f++)1==a[f].nodeType&&\"PARAM\"==a[f].nodeName||8==a[f].nodeType||b.appendChild(a[f].cloneNode(!0));return b}function K(a,b,c){var f,g=p(c);if(e.wk&&312>e.wk)return f;if(g)if(\"undefined\"==typeof a.id&&\n(a.id=c),e.ie&&e.win){var q=\"\",h;for(h in a)a[h]!=Object.prototype[h]&&(\"data\"==h.toLowerCase()?b.movie=a[h]:\"styleclass\"==h.toLowerCase()?q+=' class\\x3d\"'+a[h]+'\"':\"classid\"!=h.toLowerCase()&&(q+=\" \"+h+'\\x3d\"'+a[h]+'\"'));h=\"\";for(var k in b)b[k]!=Object.prototype[k]&&(h+='\\x3cparam name\\x3d\"'+k+'\" value\\x3d\"'+b[k]+'\" /\\x3e');g.outerHTML='\\x3cobject classid\\x3d\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"'+q+\"\\x3e\"+h+\"\\x3c/object\\x3e\";D[D.length]=a.id;f=p(a.id)}else{k=d.createElement(\"object\");k.setAttribute(\"type\",\n\"application/x-shockwave-flash\");for(var l in a)a[l]!=Object.prototype[l]&&(\"styleclass\"==l.toLowerCase()?k.setAttribute(\"class\",a[l]):\"classid\"!=l.toLowerCase()&&k.setAttribute(l,a[l]));for(q in b)b[q]!=Object.prototype[q]&&\"movie\"!=q.toLowerCase()&&(a=k,h=q,l=b[q],c=d.createElement(\"param\"),c.setAttribute(\"name\",h),c.setAttribute(\"value\",l),a.appendChild(c));g.parentNode.replaceChild(k,g);f=k}return f}function P(a){var b=p(a);b&&\"OBJECT\"==b.nodeName&&(e.ie&&e.win?(b.style.display=\"none\",function(){if(4==\nb.readyState){var c=p(a);if(c){for(var f in c)\"function\"==typeof c[f]&&(c[f]=null);c.parentNode.removeChild(c)}}else setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function p(a){var b=null;try{b=d.getElementById(a)}catch(c){}return b}function U(a,b,c){a.attachEvent(b,c);x[x.length]=[a,b,c]}function A(a){var b=e.pv;a=a.split(\".\");a[0]=parseInt(a[0],10);a[1]=parseInt(a[1],10)||0;a[2]=parseInt(a[2],10)||0;return b[0]>a[0]||b[0]==a[0]&&b[1]>a[1]||b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]?!0:\n!1}function Q(a,b,c,f){if(!e.ie||!e.mac){var g=d.getElementsByTagName(\"head\")[0];g&&(c=c&&\"string\"==typeof c?c:\"screen\",f&&(L=m=null),m&&L==c||(f=d.createElement(\"style\"),f.setAttribute(\"type\",\"text/css\"),f.setAttribute(\"media\",c),m=g.appendChild(f),e.ie&&e.win&&\"undefined\"!=typeof d.styleSheets&&0<d.styleSheets.length&&(m=d.styleSheets[d.styleSheets.length-1]),L=c),e.ie&&e.win?m&&\"object\"==typeof m.addRule&&m.addRule(a,b):m&&\"undefined\"!=typeof d.createTextNode&&m.appendChild(d.createTextNode(a+\n\" {\"+b+\"}\")))}}function v(a,b){if(R){var c=b?\"visible\":\"hidden\";u&&p(a)?p(a).style.visibility=c:Q(\"#\"+a,\"visibility:\"+c)}}function S(a){return null!=/[\\\\\\\"<>\\.;]/.exec(a)&&\"undefined\"!=typeof encodeURIComponent?encodeURIComponent(a):a}var n=window,d=document,t=navigator,T=!1,z=[function(){T?V():E()}],r=[],D=[],x=[],y,C,I,O,u=!1,B=!1,m,L,R=!0,e=function(){var a=\"undefined\"!=typeof d.getElementById&&\"undefined\"!=typeof d.getElementsByTagName&&\"undefined\"!=typeof d.createElement,b=t.userAgent.toLowerCase(),\nc=t.platform.toLowerCase(),f=c?/win/.test(c):/win/.test(b),c=c?/mac/.test(c):/mac/.test(b),b=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\\/(\\d+(\\.\\d+)?).*$/,\"$1\")):!1,g=!+\"\\v1\",e=[0,0,0],h=null;if(\"undefined\"!=typeof t.plugins&&\"object\"==typeof t.plugins[\"Shockwave Flash\"])!(h=t.plugins[\"Shockwave Flash\"].description)||\"undefined\"!=typeof t.mimeTypes&&t.mimeTypes[\"application/x-shockwave-flash\"]&&!t.mimeTypes[\"application/x-shockwave-flash\"].enabledPlugin||(T=!0,g=!1,h=h.replace(/^.*\\s+(\\S+\\s+\\S+$)/,\n\"$1\"),e[0]=parseInt(h.replace(/^(.*)\\..*$/,\"$1\"),10),e[1]=parseInt(h.replace(/^.*\\.(.*)\\s.*$/,\"$1\"),10),e[2]=/[a-zA-Z]/.test(h)?parseInt(h.replace(/^.*[a-zA-Z]+(.*)$/,\"$1\"),10):0);else if(\"undefined\"!=typeof n.ActiveXObject)try{var k=new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\");k&&(h=k.GetVariable(\"$version\"))&&(g=!0,h=h.split(\" \")[1].split(\",\"),e=[parseInt(h[0],10),parseInt(h[1],10),parseInt(h[2],10)])}catch(l){}return{w3:a,pv:e,wk:b,ie:g,win:f,mac:c}}();(function(){e.w3&&((\"undefined\"!=typeof d.readyState&&\n\"complete\"==d.readyState||\"undefined\"==typeof d.readyState&&(d.getElementsByTagName(\"body\")[0]||d.body))&&w(),u||(\"undefined\"!=typeof d.addEventListener&&d.addEventListener(\"DOMContentLoaded\",w,!1),e.ie&&e.win&&(d.attachEvent(\"onreadystatechange\",function(){\"complete\"==d.readyState&&(d.detachEvent(\"onreadystatechange\",arguments.callee),w())}),n==top&&function(){if(!u){try{d.documentElement.doScroll(\"left\")}catch(a){setTimeout(arguments.callee,0);return}w()}}()),e.wk&&function(){u||(/loaded|complete/.test(d.readyState)?\nw():setTimeout(arguments.callee,0))}(),N(w)))})();(function(){e.ie&&e.win&&window.attachEvent(\"onunload\",function(){for(var a=x.length,b=0;b<a;b++)x[b][0].detachEvent(x[b][1],x[b][2]);a=D.length;for(b=0;b<a;b++)P(D[b]);for(var c in e)e[c]=null;e=null;for(var f in swfobject)swfobject[f]=null;swfobject=null})})();return{registerObject:function(a,b,c,f){if(e.w3&&a&&b){var d={};d.id=a;d.swfVersion=b;d.expressInstall=c;d.callbackFn=f;r[r.length]=d;v(a,!1)}else f&&f({success:!1,id:a})},getObjectById:function(a){if(e.w3)return H(a)},\nembedSWF:function(a,b,c,d,g,q,h,k,l,n){var p={success:!1,id:b};e.w3&&!(e.wk&&312>e.wk)&&a&&b&&c&&d&&g?(v(b,!1),M(function(){c+=\"\";d+=\"\";var e={};if(l&&\"object\"===typeof l)for(var m in l)e[m]=l[m];e.data=a;e.width=c;e.height=d;m={};if(k&&\"object\"===typeof k)for(var r in k)m[r]=k[r];if(h&&\"object\"===typeof h)for(var t in h)m.flashvars=\"undefined\"!=typeof m.flashvars?m.flashvars+(\"\\x26\"+t+\"\\x3d\"+h[t]):t+\"\\x3d\"+h[t];if(A(g))r=K(e,m,b),e.id==b&&v(b,!0),p.success=!0,p.ref=r;else{if(q&&F()){e.data=q;G(e,\nm,b,n);return}v(b,!0)}n&&n(p)})):n&&n(p)},switchOffAutoHideShow:function(){R=!1},ua:e,getFlashPlayerVersion:function(){return{major:e.pv[0],minor:e.pv[1],release:e.pv[2]}},hasFlashPlayerVersion:A,createSWF:function(a,b,c){if(e.w3)return K(a,b,c)},showExpressInstall:function(a,b,c,d){e.w3&&F()&&G(a,b,c,d)},removeSWF:function(a){e.w3&&P(a)},createCSS:function(a,b,c,d){e.w3&&Q(a,b,c,d)},addDomLoadEvent:M,addLoadEvent:N,getQueryParamValue:function(a){var b=d.location.search||d.location.hash;if(b){/\\?/.test(b)&&\n(b=b.split(\"?\")[1]);if(null==a)return S(b);for(var b=b.split(\"\\x26\"),c=0;c<b.length;c++)if(b[c].substring(0,b[c].indexOf(\"\\x3d\"))==a)return S(b[c].substring(b[c].indexOf(\"\\x3d\")+1))}return\"\"},expressInstallCallback:function(){if(B){var a=p(\"SWFObjectExprInst\");a&&y&&(a.parentNode.replaceChild(y,a),C&&(v(C,!0),e.ie&&e.win&&(y.style.display=\"block\")),I&&I(O));B=!1}}}}();"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/htmlwriter/outputforflash.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Output for Flash &mdash; CKEditor Sample</title>\n\t<script src=\"../../../ckeditor.js\"></script>\n\t<script src=\"../../../samples/old/sample.js\"></script>\n\t<script src=\"assets/outputforflash/swfobject.js\"></script>\n\t<link href=\"../../../samples/old/sample.css\" rel=\"stylesheet\">\n\t<meta name=\"ckeditor-sample-required-plugins\" content=\"sourcearea\">\n\t<meta name=\"ckeditor-sample-name\" content=\"Output for Flash\">\n\t<meta name=\"ckeditor-sample-group\" content=\"Advanced Samples\">\n\t<meta name=\"ckeditor-sample-description\" content=\"Configuring CKEditor to produce HTML code that can be used with Adobe Flash.\">\n\t<style>\n\n\t\t.alert\n\t\t{\n\t\t\tbackground: #ffa84c;\n\t\t\tpadding: 10px 15px;\n\t\t\tfont-weight: bold;\n\t\t\tdisplay: block;\n\t\t\tmargin-bottom: 20px;\n\t\t}\n\n\t</style>\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"../../../samples/old/index.html\">CKEditor Samples</a> &raquo; Producing Flash Compliant HTML Output\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out the <a href=\"http://sdk.ckeditor.com/\">brand new samples in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows how to configure CKEditor to output\n\t\t\tHTML code that can be used with\n\t\t\t<a class=\"samples\" href=\"http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00000922.html\">\n\t\t\tAdobe Flash</a>.\n\t\t\tThe code will contain a subset of standard HTML elements like <code>&lt;b&gt;</code>,\n\t\t\t<code>&lt;i&gt;</code>, and <code>&lt;p&gt;</code> as well as HTML attributes.\n\t\t</p>\n\t\t<p>\n\t\t\tTo add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard\n\t\t\tJavaScript call, and define CKEditor features to use HTML elements and attributes.\n\t\t</p>\n\t\t<p>\n\t\t\tFor details on how to create this setup check the source code of this sample page.\n\t\t</p>\n\t</div>\n\t<p>\n\t\tTo see how it works, create some content in the editing area of CKEditor on the left\n\t\tand send it to the Flash object on the right side of the page by using the\n\t\t<strong>Send to Flash</strong> button.\n\t</p>\n\t<table style=\"width: 100%; border-spacing: 0; border-collapse:collapse;\">\n\t\t<tr>\n\t\t\t<td style=\"width: 100%\">\n\t\t\t\t<textarea cols=\"80\" id=\"editor1\" name=\"editor1\" rows=\"10\">&lt;p&gt;&lt;b&gt;&lt;font size=&quot;18&quot; style=&quot;font-size:18px;&quot;&gt;Flash and HTML&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;It is possible to have &lt;a href=&quot;http://ckeditor.com&quot;&gt;CKEditor&lt;/a&gt; creating content that will be later loaded inside &lt;b&gt;Flash&lt;/b&gt; objects and animations.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Flash has a few limitations when dealing with HTML:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;It has limited support on tags.&lt;/li&gt;&lt;li&gt;There is no margin between block elements, like paragraphs.&lt;/li&gt;&lt;/ul&gt;</textarea>\n\t\t\t\t<script>\n\n\t\t\t\t\tif ( document.location.protocol == 'file:' )\n\t\t\t\t\t\talert( 'Warning: This samples does not work when loaded from local filesystem' +\n\t\t\t\t\t\t\t'due to security restrictions implemented in Flash.' +\n\t\t\t\t\t\t\t'\\n\\nPlease load the sample from a web server instead.' );\n\n\t\t\t\t\tvar editor = CKEDITOR.replace( 'editor1', {\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Ensure that htmlwriter plugin, which is required for this sample, is loaded.\n\t\t\t\t\t\t */\n\t\t\t\t\t\textraPlugins: 'htmlwriter',\n\n\t\t\t\t\t\theight: 290,\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\ttoolbar: [\n\t\t\t\t\t\t\t[ 'Source', '-', 'Bold', 'Italic', 'Underline', '-', 'BulletedList', '-', 'Link', 'Unlink' ],\n\t\t\t\t\t\t\t[ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock' ],\n\t\t\t\t\t\t\t'/',\n\t\t\t\t\t\t\t[ 'Font', 'FontSize' ],\n\t\t\t\t\t\t\t[ 'TextColor', '-', 'About' ]\n\t\t\t\t\t\t],\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Style sheet for the contents\n\t\t\t\t\t\t */\n\t\t\t\t\t\tcontentsCss: 'body {color:#000; background-color#FFF; font-family: Arial; font-size:80%;} p, ol, ul {margin-top: 0px; margin-bottom: 0px;}',\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Quirks doctype\n\t\t\t\t\t\t */\n\t\t\t\t\t\tdocType: '<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">',\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Core styles.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tcoreStyles_bold: { element: 'b' },\n\t\t\t\t\t\tcoreStyles_italic: { element: 'i' },\n\t\t\t\t\t\tcoreStyles_underline: { element: 'u' },\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Font face.\n\t\t\t\t\t\t */\n\n\t\t\t\t\t\t// Define the way font elements will be applied to the document. The \"font\"\n\t\t\t\t\t\t// element will be used.\n\t\t\t\t\t\tfont_style: {\n\t\t\t\t\t\t\telement: 'font',\n\t\t\t\t\t\t\tattributes: { 'face': '#(family)' }\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Font sizes.\n\t\t\t\t\t\t */\n\n\t\t\t\t\t\t// The CSS part of the font sizes isn't used by Flash, it is there to get the\n\t\t\t\t\t\t// font rendered correctly in CKEditor.\n\t\t\t\t\t\tfontSize_sizes: '8px/8;9px/9;10px/10;11px/11;12px/12;14px/14;16px/16;18px/18;20px/20;22px/22;24px/24;26px/26;28px/28;36px/36;48px/48;72px/72',\n\t\t\t\t\t\tfontSize_style: {\n\t\t\t\t\t\t\telement: 'font',\n\t\t\t\t\t\t\tattributes: { 'size': '#(size)' },\n\t\t\t\t\t\t\tstyles: { 'font-size': '#(size)px' }\n\t\t\t\t\t\t} ,\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Font colors.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tcolorButton_enableMore: true,\n\n\t\t\t\t\t\tcolorButton_foreStyle: {\n\t\t\t\t\t\t\telement: 'font',\n\t\t\t\t\t\t\tattributes: { 'color': '#(color)' }\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tcolorButton_backStyle: {\n\t\t\t\t\t\t\telement: 'font',\n\t\t\t\t\t\t\tstyles: { 'background-color': '#(color)' }\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\ton: { 'instanceReady': configureFlashOutput }\n\t\t\t\t\t});\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Adjust the behavior of the dataProcessor to match the\n\t\t\t\t\t * requirements of Flash\n\t\t\t\t\t */\n\t\t\t\t\tfunction configureFlashOutput( ev ) {\n\t\t\t\t\t\tvar editor = ev.editor,\n\t\t\t\t\t\t\tdataProcessor = editor.dataProcessor,\n\t\t\t\t\t\t\thtmlFilter = dataProcessor && dataProcessor.htmlFilter;\n\n\t\t\t\t\t\t// Out self closing tags the HTML4 way, like <br>.\n\t\t\t\t\t\tdataProcessor.writer.selfClosingEnd = '>';\n\n\t\t\t\t\t\t// Make output formatting match Flash expectations\n\t\t\t\t\t\tvar dtd = CKEDITOR.dtd;\n\t\t\t\t\t\tfor ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) {\n\t\t\t\t\t\t\tdataProcessor.writer.setRules( e, {\n\t\t\t\t\t\t\t\tindent: false,\n\t\t\t\t\t\t\t\tbreakBeforeOpen: false,\n\t\t\t\t\t\t\t\tbreakAfterOpen: false,\n\t\t\t\t\t\t\t\tbreakBeforeClose: false,\n\t\t\t\t\t\t\t\tbreakAfterClose: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataProcessor.writer.setRules( 'br', {\n\t\t\t\t\t\t\tindent: false,\n\t\t\t\t\t\t\tbreakBeforeOpen: false,\n\t\t\t\t\t\t\tbreakAfterOpen: false,\n\t\t\t\t\t\t\tbreakBeforeClose: false,\n\t\t\t\t\t\t\tbreakAfterClose: false\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Output properties as attributes, not styles.\n\t\t\t\t\t\thtmlFilter.addRules( {\n\t\t\t\t\t\t\telements: {\n\t\t\t\t\t\t\t\t$: function( element ) {\n\t\t\t\t\t\t\t\t\tvar style, match, width, height, align;\n\n\t\t\t\t\t\t\t\t\t// Output dimensions of images as width and height\n\t\t\t\t\t\t\t\t\tif ( element.name == 'img' ) {\n\t\t\t\t\t\t\t\t\t\tstyle = element.attributes.style;\n\n\t\t\t\t\t\t\t\t\t\tif ( style ) {\n\t\t\t\t\t\t\t\t\t\t\t// Get the width from the style.\n\t\t\t\t\t\t\t\t\t\t\tmatch = ( /(?:^|\\s)width\\s*:\\s*(\\d+)px/i ).exec( style );\n\t\t\t\t\t\t\t\t\t\t\twidth = match && match[1];\n\n\t\t\t\t\t\t\t\t\t\t\t// Get the height from the style.\n\t\t\t\t\t\t\t\t\t\t\tmatch = ( /(?:^|\\s)height\\s*:\\s*(\\d+)px/i ).exec( style );\n\t\t\t\t\t\t\t\t\t\t\theight = match && match[1];\n\n\t\t\t\t\t\t\t\t\t\t\tif ( width ) {\n\t\t\t\t\t\t\t\t\t\t\t\telement.attributes.style = element.attributes.style.replace( /(?:^|\\s)width\\s*:\\s*(\\d+)px;?/i , '' );\n\t\t\t\t\t\t\t\t\t\t\t\telement.attributes.width = width;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tif ( height ) {\n\t\t\t\t\t\t\t\t\t\t\t\telement.attributes.style = element.attributes.style.replace( /(?:^|\\s)height\\s*:\\s*(\\d+)px;?/i , '' );\n\t\t\t\t\t\t\t\t\t\t\t\telement.attributes.height = height;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Output alignment of paragraphs using align\n\t\t\t\t\t\t\t\t\tif ( element.name == 'p' ) {\n\t\t\t\t\t\t\t\t\t\tstyle = element.attributes.style;\n\n\t\t\t\t\t\t\t\t\t\tif ( style ) {\n\t\t\t\t\t\t\t\t\t\t\t// Get the align from the style.\n\t\t\t\t\t\t\t\t\t\t\tmatch = ( /(?:^|\\s)text-align\\s*:\\s*(\\w*);?/i ).exec( style );\n\t\t\t\t\t\t\t\t\t\t\talign = match && match[1];\n\n\t\t\t\t\t\t\t\t\t\t\tif ( align ) {\n\t\t\t\t\t\t\t\t\t\t\t\telement.attributes.style = element.attributes.style.replace( /(?:^|\\s)text-align\\s*:\\s*(\\w*);?/i , '' );\n\t\t\t\t\t\t\t\t\t\t\t\telement.attributes.align = align;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( element.attributes.style === '' )\n\t\t\t\t\t\t\t\t\t\tdelete element.attributes.style;\n\n\t\t\t\t\t\t\t\t\treturn element;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction sendToFlash() {\n\t\t\t\t\t\tvar html = CKEDITOR.instances.editor1.getData() ;\n\n\t\t\t\t\t\t// Quick fix for link color.\n\t\t\t\t\t\thtml = html.replace( /<a /g, '<font color=\"#0000FF\"><u><a ' )\n\t\t\t\t\t\thtml = html.replace( /<\\/a>/g, '</a></u></font>' )\n\n\t\t\t\t\t\tvar flash = document.getElementById( 'ckFlashContainer' ) ;\n\t\t\t\t\t\tflash.setData( html ) ;\n\t\t\t\t\t}\n\n\t\t\t\t\tCKEDITOR.domReady( function() {\n\t\t\t\t\t\tif ( !swfobject.hasFlashPlayerVersion( '8' ) ) {\n\t\t\t\t\t\t\tCKEDITOR.dom.element.createFromHtml( '<span class=\"alert\">' +\n\t\t\t\t\t\t\t\t\t'At least Adobe Flash Player 8 is required to run this sample. ' +\n\t\t\t\t\t\t\t\t\t'You can download it from <a href=\"http://get.adobe.com/flashplayer\">Adobe\\'s website</a>.' +\n\t\t\t\t\t\t\t\t'</span>' ).insertBefore( editor.element );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tswfobject.embedSWF(\n\t\t\t\t\t\t\t'assets/outputforflash/outputforflash.swf',\n\t\t\t\t\t\t\t'ckFlashContainer',\n\t\t\t\t\t\t\t'550',\n\t\t\t\t\t\t\t'400',\n\t\t\t\t\t\t\t'8',\n\t\t\t\t\t\t\t{ wmode: 'transparent' }\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\n\t\t\t\t</script>\n\t\t\t\t<p>\n\t\t\t\t\t<input type=\"button\" value=\"Send to Flash\" onclick=\"sendToFlash();\">\n\t\t\t\t</p>\n\t\t\t</td>\n\t\t\t<td style=\"vertical-align: top; padding-left: 20px\">\n\t\t\t\t<div id=\"ckFlashContainer\"></div>\n\t\t\t</td>\n\t\t</tr>\n\t</table>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/htmlwriter/outputhtml.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>HTML Compliant Output &mdash; CKEditor Sample</title>\n\t<script src=\"../../../ckeditor.js\"></script>\n\t<script src=\"../../../samples/old/sample.js\"></script>\n\t<link href=\"../../../samples/old/sample.css\" rel=\"stylesheet\">\n\t<meta name=\"ckeditor-sample-required-plugins\" content=\"sourcearea\">\n\t<meta name=\"ckeditor-sample-name\" content=\"Output HTML\">\n\t<meta name=\"ckeditor-sample-group\" content=\"Advanced Samples\">\n\t<meta name=\"ckeditor-sample-description\" content=\"Configuring CKEditor to produce legacy HTML 4 code.\">\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"../../../samples/old/index.html\">CKEditor Samples</a> &raquo; Producing HTML Compliant Output\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out the <a href=\"http://sdk.ckeditor.com/\">brand new samples in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows how to configure CKEditor to output valid\n\t\t\t<a class=\"samples\" href=\"http://www.w3.org/TR/html401/\">HTML 4.01</a> code.\n\t\t\tTraditional HTML elements like <code>&lt;b&gt;</code>,\n\t\t\t<code>&lt;i&gt;</code>, and <code>&lt;font&gt;</code> are used in place of\n\t\t\t<code>&lt;strong&gt;</code>, <code>&lt;em&gt;</code>, and CSS styles.\n\t\t</p>\n\t\t<p>\n\t\t\tTo add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard\n\t\t\tJavaScript call, and define CKEditor features to use the HTML compliant elements and attributes.\n\t\t</p>\n\t\t<p>\n\t\t\tA snippet of the configuration code can be seen below; check the source of this page for\n\t\t\tfull definition:\n\t\t</p>\n<pre class=\"samples\">\nCKEDITOR.replace( '<em>textarea_id</em>', {\n\tcoreStyles_bold: { element: 'b' },\n\tcoreStyles_italic: { element: 'i' },\n\n\tfontSize_style: {\n\t\telement: 'font',\n\t\tattributes: { 'size': '#(size)' }\n\t}\n\n\t...\n});</pre>\n\t</div>\n\t<form action=\"../../../samples/sample_posteddata.php\" method=\"post\">\n\t\t<p>\n\t\t\t<label for=\"editor1\">\n\t\t\t\tEditor 1:\n\t\t\t</label>\n\t\t\t<textarea cols=\"80\" id=\"editor1\" name=\"editor1\" rows=\"10\">&lt;p&gt;This is some &lt;b&gt;sample text&lt;/b&gt;. You are using &lt;a href=\"http://ckeditor.com/\"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\n\t\t\t<script>\n\n\t\t\t\tCKEDITOR.replace( 'editor1', {\n\t\t\t\t\t/*\n\t\t\t\t\t * Ensure that htmlwriter plugin, which is required for this sample, is loaded.\n\t\t\t\t\t */\n\t\t\t\t\textraPlugins: 'htmlwriter',\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Style sheet for the contents\n\t\t\t\t\t */\n\t\t\t\t\tcontentsCss: 'body {color:#000; background-color#:FFF;}',\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Simple HTML5 doctype\n\t\t\t\t\t */\n\t\t\t\t\tdocType: '<!DOCTYPE HTML>',\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Allowed content rules which beside limiting allowed HTML\n\t\t\t\t\t * will also take care of transforming styles to attributes\n\t\t\t\t\t * (currently only for img - see transformation rules defined below).\n\t\t\t\t\t *\n\t\t\t\t\t * Read more: http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter\n\t\t\t\t\t */\n\t\t\t\t\tallowedContent:\n\t\t\t\t\t\t'h1 h2 h3 p pre[align]; ' +\n\t\t\t\t\t\t'blockquote code kbd samp var del ins cite q b i u strike ul ol li hr table tbody tr td th caption; ' +\n\t\t\t\t\t\t'img[!src,alt,align,width,height]; font[!face]; font[!family]; font[!color]; font[!size]; font{!background-color}; a[!href]; a[!name]',\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Core styles.\n\t\t\t\t\t */\n\t\t\t\t\tcoreStyles_bold: { element: 'b' },\n\t\t\t\t\tcoreStyles_italic: { element: 'i' },\n\t\t\t\t\tcoreStyles_underline: { element: 'u' },\n\t\t\t\t\tcoreStyles_strike: { element: 'strike' },\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Font face.\n\t\t\t\t\t */\n\n\t\t\t\t\t// Define the way font elements will be applied to the document.\n\t\t\t\t\t// The \"font\" element will be used.\n\t\t\t\t\tfont_style: {\n\t\t\t\t\t\telement: 'font',\n\t\t\t\t\t\tattributes: { 'face': '#(family)' }\n\t\t\t\t\t},\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Font sizes.\n\t\t\t\t\t */\n\t\t\t\t\tfontSize_sizes: 'xx-small/1;x-small/2;small/3;medium/4;large/5;x-large/6;xx-large/7',\n\t\t\t\t\tfontSize_style: {\n\t\t\t\t\t\telement: 'font',\n\t\t\t\t\t\tattributes: { 'size': '#(size)' }\n\t\t\t\t\t},\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Font colors.\n\t\t\t\t\t */\n\n\t\t\t\t\tcolorButton_foreStyle: {\n\t\t\t\t\t\telement: 'font',\n\t\t\t\t\t\tattributes: { 'color': '#(color)' }\n\t\t\t\t\t},\n\n\t\t\t\t\tcolorButton_backStyle: {\n\t\t\t\t\t\telement: 'font',\n\t\t\t\t\t\tstyles: { 'background-color': '#(color)' }\n\t\t\t\t\t},\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Styles combo.\n\t\t\t\t\t */\n\t\t\t\t\tstylesSet: [\n\t\t\t\t\t\t{ name: 'Computer Code', element: 'code' },\n\t\t\t\t\t\t{ name: 'Keyboard Phrase', element: 'kbd' },\n\t\t\t\t\t\t{ name: 'Sample Text', element: 'samp' },\n\t\t\t\t\t\t{ name: 'Variable', element: 'var' },\n\t\t\t\t\t\t{ name: 'Deleted Text', element: 'del' },\n\t\t\t\t\t\t{ name: 'Inserted Text', element: 'ins' },\n\t\t\t\t\t\t{ name: 'Cited Work', element: 'cite' },\n\t\t\t\t\t\t{ name: 'Inline Quotation', element: 'q' }\n\t\t\t\t\t],\n\n\t\t\t\t\ton: {\n\t\t\t\t\t\tpluginsLoaded: configureTransformations,\n\t\t\t\t\t\tloaded: configureHtmlWriter\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t/*\n\t\t\t\t * Add missing content transformations.\n\t\t\t\t */\n\t\t\t\tfunction configureTransformations( evt ) {\n\t\t\t\t\tvar editor = evt.editor;\n\n\t\t\t\t\teditor.dataProcessor.htmlFilter.addRules( {\n\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\tstyle: function( value, element ) {\n\t\t\t\t\t\t\t\t// Return #RGB for background and border colors\n\t\t\t\t\t\t\t\treturn CKEDITOR.tools.convertRgbToHex( value );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Default automatic content transformations do not yet take care of\n\t\t\t\t\t// align attributes on blocks, so we need to add our own transformation rules.\n\t\t\t\t\tfunction alignToAttribute( element ) {\n\t\t\t\t\t\tif ( element.styles[ 'text-align' ] ) {\n\t\t\t\t\t\t\telement.attributes.align = element.styles[ 'text-align' ];\n\t\t\t\t\t\t\tdelete element.styles[ 'text-align' ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\teditor.filter.addTransformations( [\n\t\t\t\t\t\t[ { element: 'p',\tright: alignToAttribute } ],\n\t\t\t\t\t\t[ { element: 'h1',\tright: alignToAttribute } ],\n\t\t\t\t\t\t[ { element: 'h2',\tright: alignToAttribute } ],\n\t\t\t\t\t\t[ { element: 'h3',\tright: alignToAttribute } ],\n\t\t\t\t\t\t[ { element: 'pre',\tright: alignToAttribute } ]\n\t\t\t\t\t] );\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * Adjust the behavior of htmlWriter to make it output HTML like FCKeditor.\n\t\t\t\t */\n\t\t\t\tfunction configureHtmlWriter( evt ) {\n\t\t\t\t\tvar editor = evt.editor,\n\t\t\t\t\t\tdataProcessor = editor.dataProcessor;\n\n\t\t\t\t\t// Out self closing tags the HTML4 way, like <br>.\n\t\t\t\t\tdataProcessor.writer.selfClosingEnd = '>';\n\n\t\t\t\t\t// Make output formatting behave similar to FCKeditor.\n\t\t\t\t\tvar dtd = CKEDITOR.dtd;\n\t\t\t\t\tfor ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) {\n\t\t\t\t\t\tdataProcessor.writer.setRules( e, {\n\t\t\t\t\t\t\tindent: true,\n\t\t\t\t\t\t\tbreakBeforeOpen: true,\n\t\t\t\t\t\t\tbreakAfterOpen: false,\n\t\t\t\t\t\t\tbreakBeforeClose: !dtd[ e ][ '#' ],\n\t\t\t\t\t\t\tbreakAfterClose: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t</script>\n\t\t</p>\n\t\t<p>\n\t\t\t<input type=\"submit\" value=\"Submit\">\n\t\t</p>\n\t</form>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/index.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>CKEditor Samples</title>\n\t<link rel=\"stylesheet\" href=\"sample.css\">\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\tCKEditor Samples\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThese samples are not maintained anymore. Check out the <a href=\"http://sdk.ckeditor.com/\">brand new samples in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"twoColumns\">\n\t\t<div class=\"twoColumnsLeft\">\n\t\t\t<h2 class=\"samples\">\n\t\t\t\tBasic Samples\n\t\t\t</h2>\n\t\t\t<dl class=\"samples\">\n\t\t\t\t<dt><a class=\"samples\" href=\"replacebyclass.html\">Replace textarea elements by class name</a></dt>\n\t\t\t\t<dd>Automatic replacement of all textarea elements of a given class with a CKEditor instance.</dd>\n\n\t\t\t\t<dt><a class=\"samples\" href=\"replacebycode.html\">Replace textarea elements by code</a></dt>\n\t\t\t\t<dd>Replacement of textarea elements with CKEditor instances by using a JavaScript call.</dd>\n\n\t\t\t\t<dt><a class=\"samples\" href=\"jquery.html\">Create editors with jQuery</a></dt>\n\t\t\t\t<dd>Creating standard and inline CKEditor instances with jQuery adapter.</dd>\n\t\t\t</dl>\n\n\t\t\t<h2 class=\"samples\">\n\t\t\t\tBasic Customization\n\t\t\t</h2>\n\t\t\t<dl class=\"samples\">\n\t\t\t\t<dt><a class=\"samples\" href=\"uicolor.html\">User Interface color</a></dt>\n\t\t\t\t<dd>Changing CKEditor User Interface color and adding a toolbar button that lets the user set the UI color.</dd>\n\n\t\t\t\t<dt><a class=\"samples\" href=\"uilanguages.html\">User Interface languages</a></dt>\n\t\t\t\t<dd>Changing CKEditor User Interface language and adding a drop-down list that lets the user choose the UI language.</dd>\n\t\t\t</dl>\n\n\n\t\t\t<h2 class=\"samples\">Plugins</h2>\n<dl class=\"samples\">\n<dt><a class=\"samples\" href=\"magicline/magicline.html\">Magicline plugin</a></dt>\n<dd>Using the Magicline plugin to access difficult focus spaces.</dd>\n\n<dt><a class=\"samples\" href=\"wysiwygarea/fullpage.html\">Full page support</a></dt>\n<dd>CKEditor inserted with a JavaScript call and used to edit the whole page from &lt;html&gt; to &lt;/html&gt;.</dd>\n</dl>\n\t\t</div>\n\t\t<div class=\"twoColumnsRight\">\n\t\t\t<h2 class=\"samples\">\n\t\t\t\tInline Editing\n\t\t\t</h2>\n\t\t\t<dl class=\"samples\">\n\t\t\t\t<dt><a class=\"samples\" href=\"inlineall.html\">Massive inline editor creation</a></dt>\n\t\t\t\t<dd>Turn all elements with <code>contentEditable = true</code> attribute into inline editors.</dd>\n\n\t\t\t\t<dt><a class=\"samples\" href=\"inlinebycode.html\">Convert element into an inline editor by code</a></dt>\n\t\t\t\t<dd>Conversion of DOM elements into inline CKEditor instances by using a JavaScript call.</dd>\n\n\t\t\t\t<dt><a class=\"samples\" href=\"inlinetextarea.html\">Replace textarea with inline editor</a> <span class=\"new\">New!</span></dt>\n\t\t\t\t<dd>A form with a textarea that is replaced by an inline editor at runtime.</dd>\n\n\t\t\t\t\n\t\t\t</dl>\n\n\t\t\t<h2 class=\"samples\">\n\t\t\t\tAdvanced Samples\n\t\t\t</h2>\n\t\t\t<dl class=\"samples\">\n\t\t\t\t<dt><a class=\"samples\" href=\"datafiltering.html\">Data filtering and features activation</a> <span class=\"new\">New!</span></dt>\n\t\t\t\t<dd>Data filtering and automatic features activation basing on configuration.</dd>\n\n\t\t\t\t<dt><a class=\"samples\" href=\"divreplace.html\">Replace DIV elements on the fly</a></dt>\n\t\t\t\t<dd>Transforming a <code>div</code> element into an instance of CKEditor with a mouse click.</dd>\n\n\t\t\t\t<dt><a class=\"samples\" href=\"appendto.html\">Append editor instances</a></dt>\n\t\t\t\t<dd>Appending editor instances to existing DOM elements.</dd>\n\n\t\t\t\t<dt><a class=\"samples\" href=\"ajax.html\">Create and destroy editor instances for Ajax applications</a></dt>\n\t\t\t\t<dd>Creating and destroying CKEditor instances on the fly and saving the contents entered into the editor window.</dd>\n\n\t\t\t\t<dt><a class=\"samples\" href=\"api.html\">Basic usage of the API</a></dt>\n\t\t\t\t<dd>Using the CKEditor JavaScript API to interact with the editor at runtime.</dd>\n\n\t\t\t\t<dt><a class=\"samples\" href=\"xhtmlstyle.html\">XHTML-compliant style</a></dt>\n\t\t\t\t<dd>Configuring CKEditor to produce XHTML 1.1 compliant attributes and styles.</dd>\n\n\t\t\t\t<dt><a class=\"samples\" href=\"readonly.html\">Read-only mode</a></dt>\n\t\t\t\t<dd>Using the readOnly API to block introducing changes to the editor contents.</dd>\n\n\t\t\t\t<dt><a class=\"samples\" href=\"tabindex.html\">\"Tab\" key-based navigation</a></dt>\n\t\t\t\t<dd>Navigating among editor instances with tab key.</dd>\n\n\n\t\t\t\t\n<dt><a class=\"samples\" href=\"dialog/dialog.html\">Using the JavaScript API to customize dialog windows</a></dt>\n<dd>Using the dialog windows API to customize dialog windows without changing the original editor code.</dd>\n\n<dt><a class=\"samples\" href=\"enterkey/enterkey.html\">Using the &quot;Enter&quot; key in CKEditor</a></dt>\n<dd>Configuring the behavior of <em>Enter</em> and <em>Shift+Enter</em> keys.</dd>\n\n<dt><a class=\"samples\" href=\"htmlwriter/outputforflash.html\">Output for Flash</a></dt>\n<dd>Configuring CKEditor to produce HTML code that can be used with Adobe Flash.</dd>\n\n<dt><a class=\"samples\" href=\"htmlwriter/outputhtml.html\">Output HTML</a></dt>\n<dd>Configuring CKEditor to produce legacy HTML 4 code.</dd>\n\n<dt><a class=\"samples\" href=\"toolbar/toolbar.html\">Toolbar Configurations</a></dt>\n<dd>Configuring CKEditor to display full or custom toolbar layout.</dd>\n\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico Knabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/inlineall.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Massive inline editing &mdash; CKEditor Sample</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<script>\n\n\t\t// This code is generally not necessary, but it is here to demonstrate\n\t\t// how to customize specific editor instances on the fly. This fits well\n\t\t// this demo because we have editable elements (like headers) that\n\t\t// require less features.\n\n\t\t// The \"instanceCreated\" event is fired for every editor instance created.\n\t\tCKEDITOR.on( 'instanceCreated', function( event ) {\n\t\t\tvar editor = event.editor,\n\t\t\t\telement = editor.element;\n\n\t\t\t// Customize editors for headers and tag list.\n\t\t\t// These editors don't need features like smileys, templates, iframes etc.\n\t\t\tif ( element.is( 'h1', 'h2', 'h3' ) || element.getAttribute( 'id' ) == 'taglist' ) {\n\t\t\t\t// Customize the editor configurations on \"configLoaded\" event,\n\t\t\t\t// which is fired after the configuration file loading and\n\t\t\t\t// execution. This makes it possible to change the\n\t\t\t\t// configurations before the editor initialization takes place.\n\t\t\t\teditor.on( 'configLoaded', function() {\n\n\t\t\t\t\t// Remove unnecessary plugins to make the editor simpler.\n\t\t\t\t\teditor.config.removePlugins = 'colorbutton,find,flash,font,' +\n\t\t\t\t\t\t'forms,iframe,image,newpage,removeformat,' +\n\t\t\t\t\t\t'smiley,specialchar,stylescombo,templates';\n\n\t\t\t\t\t// Rearrange the layout of the toolbar.\n\t\t\t\t\teditor.config.toolbarGroups = [\n\t\t\t\t\t\t{ name: 'editing',\t\tgroups: [ 'basicstyles', 'links' ] },\n\t\t\t\t\t\t{ name: 'undo' },\n\t\t\t\t\t\t{ name: 'clipboard',\tgroups: [ 'selection', 'clipboard' ] },\n\t\t\t\t\t\t{ name: 'about' }\n\t\t\t\t\t];\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t</script>\n\t<link href=\"sample.css\" rel=\"stylesheet\">\n\t<style>\n\n\t\t/* The following styles are just to make the page look nice. */\n\n\t\t/* Workaround to show Arial Black in Firefox. */\n\t\t@font-face\n\t\t{\n\t\t\tfont-family: 'arial-black';\n\t\t\tsrc: local('Arial Black');\n\t\t}\n\n\t\t*[contenteditable=\"true\"]\n\t\t{\n\t\t\tpadding: 10px;\n\t\t}\n\n\t\t#container\n\t\t{\n\t\t\twidth: 960px;\n\t\t\tmargin: 30px auto 0;\n\t\t}\n\n\t\t#header\n\t\t{\n\t\t\toverflow: hidden;\n\t\t\tpadding: 0 0 30px;\n\t\t\tborder-bottom: 5px solid #05B2D2;\n\t\t\tposition: relative;\n\t\t}\n\n\t\t#headerLeft,\n\t\t#headerRight\n\t\t{\n\t\t\twidth: 49%;\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\t#headerLeft\n\t\t{\n\t\t\tfloat: left;\n\t\t\tpadding: 10px 1px 1px;\n\t\t}\n\n\t\t#headerLeft h2,\n\t\t#headerLeft h3\n\t\t{\n\t\t\ttext-align: right;\n\t\t\tmargin: 0;\n\t\t\toverflow: hidden;\n\t\t\tfont-weight: normal;\n\t\t}\n\n\t\t#headerLeft h2\n\t\t{\n\t\t\tfont-family: \"Arial Black\",arial-black;\n\t\t\tfont-size: 4.6em;\n\t\t\tline-height: 1.1;\n\t\t\ttext-transform: uppercase;\n\t\t}\n\n\t\t#headerLeft h3\n\t\t{\n\t\t\tfont-size: 2.3em;\n\t\t\tline-height: 1.1;\n\t\t\tmargin: .2em 0 0;\n\t\t\tcolor: #666;\n\t\t}\n\n\t\t#headerRight\n\t\t{\n\t\t\tfloat: right;\n\t\t\tpadding: 1px;\n\t\t}\n\n\t\t#headerRight p\n\t\t{\n\t\t\tline-height: 1.8;\n\t\t\ttext-align: justify;\n\t\t\tmargin: 0;\n\t\t}\n\n\t\t#headerRight p + p\n\t\t{\n\t\t\tmargin-top: 20px;\n\t\t}\n\n\t\t#headerRight > div\n\t\t{\n\t\t\tpadding: 20px;\n\t\t\tmargin: 0 0 0 30px;\n\t\t\tfont-size: 1.4em;\n\t\t\tcolor: #666;\n\t\t}\n\n\t\t#columns\n\t\t{\n\t\t\tcolor: #333;\n\t\t\toverflow: hidden;\n\t\t\tpadding: 20px 0;\n\t\t}\n\n\t\t#columns > div\n\t\t{\n\t\t\tfloat: left;\n\t\t\twidth: 33.3%;\n\t\t}\n\n\t\t#columns #column1 > div\n\t\t{\n\t\t\tmargin-left: 1px;\n\t\t}\n\n\t\t#columns #column3 > div\n\t\t{\n\t\t\tmargin-right: 1px;\n\t\t}\n\n\t\t#columns > div > div\n\t\t{\n\t\t\tmargin: 0px 10px;\n\t\t\tpadding: 10px 20px;\n\t\t}\n\n\t\t#columns blockquote\n\t\t{\n\t\t\tmargin-left: 15px;\n\t\t}\n\n\t\t#tagLine\n\t\t{\n\t\t\tborder-top: 5px solid #05B2D2;\n\t\t\tpadding-top: 20px;\n\t\t}\n\n\t\t#taglist {\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-left: 20px;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: 0 0 0 20px;\n\t\t}\n\n\t</style>\n</head>\n<body>\n<div>\n\t<h1 class=\"samples\"><a href=\"index.html\">CKEditor Samples</a> &raquo; Massive inline editing</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/inline.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>This sample page demonstrates the inline editing feature - CKEditor instances will be created automatically from page elements with <strong>contentEditable</strong> attribute set to value <strong>true</strong>:</p>\n\t\t<pre class=\"samples\">&lt;div <strong>contenteditable=\"true</strong>\" &gt; ... &lt;/div&gt;</pre>\n\t\t<p>Click inside of any element below to start editing.</p>\n\t</div>\n</div>\n<div id=\"container\">\n\t<div id=\"header\">\n\t\t<div id=\"headerLeft\">\n\t\t\t<h2 id=\"sampleTitle\" contenteditable=\"true\">\n\t\t\t\tCKEditor<br> Goes Inline!\n\t\t\t</h2>\n\t\t\t<h3 contenteditable=\"true\">\n\t\t\t\tLorem ipsum dolor sit amet dolor duis blandit vestibulum faucibus a, tortor.\n\t\t\t</h3>\n\t\t</div>\n\t\t<div id=\"headerRight\">\n\t\t\t<div contenteditable=\"true\">\n\t\t\t\t<p>\n\t\t\t\t\tLorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies.\n\t\t\t\t</p>\n\t\t\t\t<p>\n\t\t\t\t\tCurabitur et ligula. Ut molestie a, ultricies porta urna. Vestibulum commodo volutpat a, convallis ac, laoreet enim. Phasellus fermentum in, dolor. Pellentesque facilisis. Nulla imperdiet sit amet magna. Vestibulum dapibus, mauris nec malesuada fames ac.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div id=\"columns\">\n\t\t<div id=\"column1\">\n\t\t\t<div contenteditable=\"true\">\n\t\t\t\t<h3>\n\t\t\t\t\tFusce vitae porttitor\n\t\t\t\t</h3>\n\t\t\t\t<p>\n\t\t\t\t\t<strong>\n\t\t\t\t\t\tLorem ipsum dolor sit amet dolor. Duis blandit vestibulum faucibus a, tortor.\n\t\t\t\t\t</strong>\n\t\t\t\t</p>\n\t\t\t\t<p>\n\t\t\t\t\tProin nunc justo felis mollis tincidunt, risus risus pede, posuere cubilia Curae, Nullam euismod, enim. Etiam nibh ultricies dolor ac dignissim erat volutpat. Vivamus fermentum <a href=\"http://ckeditor.com/\">nisl nulla sem in</a> metus. Maecenas wisi. Donec nec erat volutpat.\n\t\t\t\t</p>\n\t\t\t\t<blockquote>\n\t\t\t\t\t<p>\n\t\t\t\t\t\tFusce vitae porttitor a, euismod convallis nisl, blandit risus tortor, pretium.\n\t\t\t\t\t\tVehicula vitae, imperdiet vel, ornare enim vel sodales rutrum\n\t\t\t\t\t</p>\n\t\t\t\t</blockquote>\n\t\t\t\t<blockquote>\n\t\t\t\t\t<p>\n\t\t\t\t\t\tLibero nunc, rhoncus ante ipsum non ipsum. Nunc eleifend pede turpis id sollicitudin fringilla. Phasellus ultrices, velit ac arcu.\n\t\t\t\t\t</p>\n\t\t\t\t</blockquote>\n\t\t\t\t<p>Pellentesque nunc. Donec suscipit erat. Pellentesque habitant morbi tristique ullamcorper.</p>\n\t\t\t\t<p><s>Mauris mattis feugiat lectus nec mauris. Nullam vitae ante.</s></p>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"column2\">\n\t\t\t<div contenteditable=\"true\">\n\t\t\t\t<h3>\n\t\t\t\t\tInteger condimentum sit amet\n\t\t\t\t</h3>\n\t\t\t\t<p>\n\t\t\t\t\t<strong>Aenean nonummy a, mattis varius. Cras aliquet.</strong>\n\t\t\t\t\tPraesent <a href=\"http://ckeditor.com/\">magna non mattis ac, rhoncus nunc</a>, rhoncus eget, cursus pulvinar mollis.</p>\n\t\t\t\t<p>Proin id nibh. Sed eu libero posuere sed, lectus. Phasellus dui gravida gravida feugiat mattis ac, felis.</p>\n\t\t\t\t<p>Integer condimentum sit amet, tempor elit odio, a dolor non ante at sapien. Sed ac lectus. Nulla ligula quis eleifend mi, id leo velit pede cursus arcu id nulla ac lectus. Phasellus vestibulum. Nunc viverra enim quis diam.</p>\n\t\t\t</div>\n\t\t\t<div contenteditable=\"true\">\n\t\t\t\t<h3>\n\t\t\t\t\tPraesent wisi accumsan sit amet nibh\n\t\t\t\t</h3>\n\t\t\t\t<p>Donec ullamcorper, risus tortor, pretium porttitor. Morbi quam quis lectus non leo.</p>\n\t\t\t\t<p style=\"margin-left: 40px; \">Integer faucibus scelerisque. Proin faucibus at, aliquet vulputate, odio at eros. Fusce <a href=\"http://ckeditor.com/\">gravida, erat vitae augue</a>. Fusce urna fringilla gravida.</p>\n\t\t\t\t<p>In hac habitasse platea dictumst. Praesent wisi accumsan sit amet nibh. Maecenas orci luctus a, lacinia quam sem, posuere commodo, odio condimentum tempor, pede semper risus. Suspendisse pede. In hac habitasse platea dictumst. Nam sed laoreet sit amet erat. Integer.</p>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"column3\">\n\t\t\t<div contenteditable=\"true\">\n\t\t\t\t<p>\n\t\t\t\t\t<img src=\"assets/inlineall/logo.png\" alt=\"CKEditor logo\" style=\"float:left\">\n\t\t\t\t</p>\n\t\t\t\t<p>Quisque justo neque, mattis sed, fermentum ultrices <strong>posuere cubilia Curae</strong>, Vestibulum elit metus, quis placerat ut, lectus. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi.</p>\n\t\t\t\t<h3>\n\t\t\t\t\tNullam laoreet vel consectetuer tellus suscipit\n\t\t\t\t</h3>\n\t\t\t\t<ul>\n\t\t\t\t\t<li>Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis.</li>\n\t\t\t\t\t<li>Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi.</li>\n\t\t\t\t\t<li>Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.</li>\n\t\t\t\t</ul>\n\t\t\t\t<p>Quisque justo neque, mattis sed, <a href=\"http://ckeditor.com/\">fermentum ultrices posuere cubilia</a> Curae, Vestibulum elit metus, quis placerat ut, lectus.</p>\n\t\t\t\t<p>Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis.</p>\n\t\t\t\t<p>Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi. Sed in nonummy faucibus turpis. Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.</p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div id=\"tagLine\">\n\t\tTags of this article:\n\t\t<p id=\"taglist\" contenteditable=\"true\">\n\t\t\tinline, editing, floating, CKEditor\n\t\t</p>\n\t</div>\n</div>\n<div id=\"footer\">\n\t<hr>\n\t<p>\n\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">\n\t\t\thttp://ckeditor.com</a>\n\t</p>\n\t<p id=\"copy\">\n\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a>\n\t\t- Frederico Knabben. All rights reserved.\n\t</p>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/inlinebycode.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Inline Editing by Code &mdash; CKEditor Sample</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<link href=\"sample.css\" rel=\"stylesheet\">\n\t<style>\n\n\t\t#editable\n\t\t{\n\t\t\tpadding: 10px;\n\t\t\tfloat: left;\n\t\t}\n\n\t</style>\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\">CKEditor Samples</a> &raquo; Inline Editing by Code\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/inline.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows how to create an inline editor instance of CKEditor. It is created\n\t\t\twith a JavaScript call using the following code:\n\t\t</p>\n<pre class=\"samples\">\n// This property tells CKEditor to not activate every element with contenteditable=true element.\nCKEDITOR.disableAutoInline = true;\n\nvar editor = CKEDITOR.inline( document.getElementById( 'editable' ) );\n</pre>\n\t\t<p>\n\t\t\tNote that <code>editable</code> in the code above is the <code>id</code>\n\t\t\tattribute of the <code>&lt;div&gt;</code> element to be converted into an inline instance.\n\t\t</p>\n\t</div>\n\t<div id=\"editable\" contenteditable=\"true\">\n\t\t<h1><img alt=\"Saturn V carrying Apollo 11\" class=\"right\" src=\"assets/sample.jpg\" /> Apollo 11</h1>\n\n\t\t<p><b>Apollo 11</b> was the spaceflight that landed the first humans, Americans <a href=\"http://en.wikipedia.org/wiki/Neil_Armstrong\" title=\"Neil Armstrong\">Neil Armstrong</a> and <a href=\"http://en.wikipedia.org/wiki/Buzz_Aldrin\" title=\"Buzz Aldrin\">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p>\n\n\t\t<p>Armstrong spent about <s>three and a half</s> two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&nbsp;kg) of lunar material for return to Earth. A third member of the mission, <a href=\"http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)\" title=\"Michael Collins (astronaut)\">Michael Collins</a>, piloted the <a href=\"http://en.wikipedia.org/wiki/Apollo_Command/Service_Module\" title=\"Apollo Command/Service Module\">command</a> spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.</p>\n\n\t\t<h2>Broadcasting and <em>quotes</em> <a id=\"quotes\" name=\"quotes\"></a></h2>\n\n\t\t<p>Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:</p>\n\n\t\t<blockquote>\n\t\t\t<p>One small step for [a] man, one giant leap for mankind.</p>\n\t\t</blockquote>\n\n\t\t<p>Apollo 11 effectively ended the <a href=\"http://en.wikipedia.org/wiki/Space_Race\" title=\"Space Race\">Space Race</a> and fulfilled a national goal proposed in 1961 by the late U.S. President <a href=\"http://en.wikipedia.org/wiki/John_F._Kennedy\" title=\"John F. Kennedy\">John F. Kennedy</a> in a speech before the United States Congress:</p>\n\n\t\t<blockquote>\n\t\t\t<p>[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.</p>\n\t\t</blockquote>\n\n\t\t<h2>Technical details <a id=\"tech-details\" name=\"tech-details\"></a></h2>\n\n\t\t<table align=\"right\" border=\"1\" bordercolor=\"#ccc\" cellpadding=\"5\" cellspacing=\"0\" style=\"border-collapse:collapse;margin:10px 0 10px 15px;\">\n\t\t\t<caption><strong>Mission crew</strong></caption>\n\t\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th scope=\"col\">Position</th>\n\t\t\t\t<th scope=\"col\">Astronaut</th>\n\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td>Commander</td>\n\t\t\t\t<td>Neil A. Armstrong</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>Command Module Pilot</td>\n\t\t\t\t<td>Michael Collins</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>Lunar Module Pilot</td>\n\t\t\t\t<td>Edwin &quot;Buzz&quot; E. Aldrin, Jr.</td>\n\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\n\t\t<p>Launched by a <strong>Saturn V</strong> rocket from <a href=\"http://en.wikipedia.org/wiki/Kennedy_Space_Center\" title=\"Kennedy Space Center\">Kennedy Space Center</a> in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of <a href=\"http://en.wikipedia.org/wiki/NASA\" title=\"NASA\">NASA</a>&#39;s Apollo program. The Apollo spacecraft had three parts:</p>\n\n\t\t<ol>\n\t\t\t<li><strong>Command Module</strong> with a cabin for the three astronauts which was the only part which landed back on Earth</li>\n\t\t\t<li><strong>Service Module</strong> which supported the Command Module with propulsion, electrical power, oxygen and water</li>\n\t\t\t<li><strong>Lunar Module</strong> for landing on the Moon.</li>\n\t\t</ol>\n\n\t\t<p>After being sent to the Moon by the Saturn V&#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the <a href=\"http://en.wikipedia.org/wiki/Mare_Tranquillitatis\" title=\"Mare Tranquillitatis\">Sea of Tranquility</a>. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the <a href=\"http://en.wikipedia.org/wiki/Pacific_Ocean\" title=\"Pacific Ocean\">Pacific Ocean</a> on July 24.</p>\n\n\t\t<hr />\n\t\t<p style=\"text-align: right;\"><small>Source: <a href=\"http://en.wikipedia.org/wiki/Apollo_11\">Wikipedia.org</a></small></p>\n\t</div>\n\n\t<script>\n\t\t// We need to turn off the automatic editor creation first.\n\t\tCKEDITOR.disableAutoInline = true;\n\n\t\tvar editor = CKEDITOR.inline( 'editable' );\n\t</script>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p contenteditable=\"true\">\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">\n\t\t\t\thttp://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a>\n\t\t\t- Frederico Knabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/inlinetextarea.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Replace Textarea with Inline Editor &mdash; CKEditor Sample</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<link href=\"sample.css\" rel=\"stylesheet\">\n\t<style>\n\n\t\t/* Style the CKEditor element to look like a textfield */\n\t\t.cke_textarea_inline\n\t\t{\n\t\t\tpadding: 10px;\n\t\t\theight: 200px;\n\t\t\toverflow: auto;\n\n\t\t\tborder: 1px solid gray;\n\t\t\t-webkit-appearance: textfield;\n\t\t}\n\n\t</style>\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\">CKEditor Samples</a> &raquo; Replace Textarea with Inline Editor\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/inline.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tYou can also create an inline editor from a <code>textarea</code>\n\t\t\telement. In this case the <code>textarea</code> will be replaced\n\t\t\tby a <code>div</code> element with inline editing enabled.\n\t\t</p>\n<pre class=\"samples\">\n// \"article-body\" is the name of a textarea element.\nvar editor = CKEDITOR.inline( 'article-body' );\n</pre>\n\t</div>\n\t<form action=\"sample_posteddata.php\" method=\"post\">\n\t\t<h2>This is a sample form with some fields</h2>\n\t\t<p>\n\t\t\tTitle:<br>\n\t\t\t<input type=\"text\" name=\"title\" value=\"Sample Form\"></p>\n\t\t<p>\n\t\t\tArticle Body (Textarea converted to CKEditor):<br>\n\t\t\t<textarea name=\"article-body\" style=\"height: 200px\">\n\t\t\t\t&lt;h2&gt;Technical details &lt;a id=\"tech-details\" name=\"tech-details\"&gt;&lt;/a&gt;&lt;/h2&gt;\n\n\t\t\t\t&lt;table align=\"right\" border=\"1\" bordercolor=\"#ccc\" cellpadding=\"5\" cellspacing=\"0\" style=\"border-collapse:collapse;margin:10px 0 10px 15px;\"&gt;\n\t\t\t\t\t&lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt;\n\t\t\t\t\t&lt;thead&gt;\n\t\t\t\t\t&lt;tr&gt;\n\t\t\t\t\t\t&lt;th scope=\"col\"&gt;Position&lt;/th&gt;\n\t\t\t\t\t\t&lt;th scope=\"col\"&gt;Astronaut&lt;/th&gt;\n\t\t\t\t\t&lt;/tr&gt;\n\t\t\t\t\t&lt;/thead&gt;\n\t\t\t\t\t&lt;tbody&gt;\n\t\t\t\t\t&lt;tr&gt;\n\t\t\t\t\t\t&lt;td&gt;Commander&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;Neil A. Armstrong&lt;/td&gt;\n\t\t\t\t\t&lt;/tr&gt;\n\t\t\t\t\t&lt;tr&gt;\n\t\t\t\t\t\t&lt;td&gt;Command Module Pilot&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;Michael Collins&lt;/td&gt;\n\t\t\t\t\t&lt;/tr&gt;\n\t\t\t\t\t&lt;tr&gt;\n\t\t\t\t\t\t&lt;td&gt;Lunar Module Pilot&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;Edwin &quot;Buzz&quot; E. Aldrin, Jr.&lt;/td&gt;\n\t\t\t\t\t&lt;/tr&gt;\n\t\t\t\t\t&lt;/tbody&gt;\n\t\t\t\t&lt;/table&gt;\n\n\t\t\t\t&lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=\"http://en.wikipedia.org/wiki/Kennedy_Space_Center\" title=\"Kennedy Space Center\"&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=\"http://en.wikipedia.org/wiki/NASA\" title=\"NASA\"&gt;NASA&lt;/a&gt;&#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt;\n\n\t\t\t\t&lt;ol&gt;\n\t\t\t\t\t&lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt;\n\t\t\t\t\t&lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt;\n\t\t\t\t\t&lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt;\n\t\t\t\t&lt;/ol&gt;\n\n\t\t\t\t&lt;p&gt;After being sent to the Moon by the Saturn V&#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=\"http://en.wikipedia.org/wiki/Mare_Tranquillitatis\" title=\"Mare Tranquillitatis\"&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=\"http://en.wikipedia.org/wiki/Pacific_Ocean\" title=\"Pacific Ocean\"&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt;\n\n\t\t\t\t&lt;hr /&gt;\n\t\t\t\t&lt;p style=\"text-align: right;\"&gt;&lt;small&gt;Source: &lt;a href=\"http://en.wikipedia.org/wiki/Apollo_11\"&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;\n\t\t\t</textarea>\n\t\t</p>\n\t\t<p>\n\t\t\t<input type=\"submit\" value=\"Submit\">\n\t\t</p>\n\t</form>\n\n\t<script>\n\t\tCKEDITOR.inline( 'article-body' );\n\t</script>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">\n\t\t\t\thttp://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a>\n\t\t\t- Frederico Knabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/jquery.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>jQuery Adapter &mdash; CKEditor Sample</title>\n\t<script src=\"http://code.jquery.com/jquery-1.11.0.min.js\"></script>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<script src=\"../../adapters/jquery.js\"></script>\n\t<link href=\"sample.css\" rel=\"stylesheet\">\n\t<style>\n\n\t\t#editable\n\t\t{\n\t\t\tpadding: 10px;\n\t\t\tfloat: left;\n\t\t}\n\n\t</style>\n\t<script>\n\n\t\tCKEDITOR.disableAutoInline = true;\n\n\t\t$( document ).ready( function() {\n\t\t\t$( '#editor1' ).ckeditor(); // Use CKEDITOR.replace() if element is <textarea>.\n\t\t\t$( '#editable' ).ckeditor(); // Use CKEDITOR.inline().\n\t\t} );\n\n\t\tfunction setValue() {\n\t\t\t$( '#editor1' ).val( $( 'input#val' ).val() );\n\t\t}\n\n\t</script>\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\" id=\"a-test\">CKEditor Samples</a> &raquo; Create Editors with jQuery\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out the <a href=\"http://sdk.ckeditor.com/\">brand new samples in CKEditor SDK</a>.\n\t</div>\n\t<form action=\"sample_posteddata.php\" method=\"post\">\n\t\t<div class=\"description\">\n\t\t\t<p>\n\t\t\t\tThis sample shows how to use the <a href=\"http://docs.ckeditor.com/#!/guide/dev_jquery\">jQuery adapter</a>.\n\t\t\t\tNote that you have to include both CKEditor and jQuery scripts before including the adapter.\n\t\t\t</p>\n\n<pre class=\"samples\">\n&lt;script src=\"//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js\"&gt;&lt;/script&gt;\n&lt;script src=\"/ckedit../../ckeditor.js\"&gt;&lt;/script&gt;\n&lt;script src=\"/ckeditor/adapters/jquery.js\"&gt;&lt;/script&gt;\n</pre>\n\n\t\t\t<p>Then you can replace HTML elements with a CKEditor instance using the <code>ckeditor()</code> method.</p>\n\n<pre class=\"samples\">\n$( document ).ready( function() {\n\t$( 'textarea#editor1' ).ckeditor();\n} );\n</pre>\n\t\t</div>\n\n\t\t<h2 class=\"samples\">Inline Example</h2>\n\n\t\t<div id=\"editable\" contenteditable=\"true\">\n\t\t\t<p><img alt=\"Saturn V carrying Apollo 11\" class=\"right\" src=\"assets/sample.jpg\"/><b>Apollo 11</b> was the spaceflight that landed the first humans, Americans <a href=\"http://en.wikipedia.org/wiki/Neil_Armstrong\" title=\"Neil Armstrong\">Neil Armstrong</a> and <a href=\"http://en.wikipedia.org/wiki/Buzz_Aldrin\" title=\"Buzz Aldrin\">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p>\n\t\t\t<p>Armstrong spent about <s>three and a half</s> two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&nbsp;kg) of lunar material for return to Earth. A third member of the mission, <a href=\"http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)\" title=\"Michael Collins (astronaut)\">Michael Collins</a>, piloted the <a href=\"http://en.wikipedia.org/wiki/Apollo_Command/Service_Module\" title=\"Apollo Command/Service Module\">command</a> spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.\n\t\t\t<p>Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:</p>\n\t\t\t<blockquote><p>One small step for [a] man, one giant leap for mankind.</p></blockquote> <p>Apollo 11 effectively ended the <a href=\"http://en.wikipedia.org/wiki/Space_Race\" title=\"Space Race\">Space Race</a> and fulfilled a national goal proposed in 1961 by the late U.S. President <a href=\"http://en.wikipedia.org/wiki/John_F._Kennedy\" title=\"John F. Kennedy\">John F. Kennedy</a> in a speech before the United States Congress:</p> <blockquote><p>[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.</p></blockquote>\n\t\t</div>\n\n\t\t<br style=\"clear: both\">\n\n\t\t<h2 class=\"samples\">Classic (iframe-based) Example</h2>\n\n\t\t<textarea cols=\"80\" id=\"editor1\" name=\"editor1\" rows=\"10\">\n\t\t\t&lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;\n\t\t</textarea>\n\n\t\t<p style=\"overflow: hidden\">\n\t\t\t<input style=\"float: left\" type=\"submit\" value=\"Submit\">\n\t\t\t<span style=\"float: right\">\n\t\t\t\t<input type=\"text\" id=\"val\" value=\"I'm using jQuery val()!\" size=\"30\">\n\t\t\t\t<input onclick=\"setValue();\" type=\"button\" value=\"Set value\">\n\t\t\t</span>\n\t\t</p>\n\t</form>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/magicline/magicline.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Using Magicline plugin &mdash; CKEditor Sample</title>\n\t<script src=\"../../../ckeditor.js\"></script>\n\t<link rel=\"stylesheet\" href=\"../../../samples/old/sample.css\">\n\t<meta name=\"ckeditor-sample-name\" content=\"Magicline plugin\">\n\t<meta name=\"ckeditor-sample-group\" content=\"Plugins\">\n\t<meta name=\"ckeditor-sample-description\" content=\"Using the Magicline plugin to access difficult focus spaces.\">\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"../../../samples/old/index.html\">CKEditor Samples</a> &raquo; Using Magicline plugin\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/magicline.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows the advantages of <strong>Magicline</strong> plugin\n\t\t\twhich is to enhance the editing process. Thanks to this plugin,\n\t\t\ta number of difficult focus spaces which are inaccessible due to\n\t\t\tbrowser issues can now be focused.\n\t\t</p>\n\t\t<p>\n\t\t\t<strong>Magicline</strong> plugin shows a red line with a handler\n\t\t\twhich, when clicked, inserts a paragraph and allows typing. To see this,\n\t\t\tfocus an editor and move your mouse above the focus space you want\n\t\t\tto access. The plugin is enabled by default so no additional\n\t\t\tconfiguration is necessary.\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<label for=\"editor1\">\n\t\t\tEditor 1:\n\t\t</label>\n\t\t<div class=\"description\">\n\t\t\t<p>\n\t\t\t\tThis editor uses a default <strong>Magicline</strong> setup.\n\t\t\t</p>\n\t\t</div>\n\t\t<textarea cols=\"80\" id=\"editor1\" name=\"editor1\" rows=\"10\">\n\t\t\t&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt;\n\t\t\t\t&lt;tbody&gt;\n\t\t\t\t\t&lt;tr&gt;\n\t\t\t\t\t\t&lt;td&gt;This table&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;is the&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;very first&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;element of the document.&lt;/td&gt;\n\t\t\t\t\t&lt;/tr&gt;\n\t\t\t\t\t&lt;tr&gt;\n\t\t\t\t\t\t&lt;td&gt;We are still&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;able to acces&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;the space before it.&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;\n\t\t\t\t\t\t&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt;\n\t\t\t\t\t\t\t&lt;tbody&gt;\n\t\t\t\t\t\t\t\t&lt;tr&gt;\n\t\t\t\t\t\t\t\t\t&lt;td&gt;This table is inside of a cell of another table.&lt;/td&gt;\n\t\t\t\t\t\t\t\t&lt;/tr&gt;\n\t\t\t\t\t\t\t\t&lt;tr&gt;\n\t\t\t\t\t\t\t\t\t&lt;td&gt;We can type&amp;nbsp;either before or after it though.&lt;/td&gt;\n\t\t\t\t\t\t\t\t&lt;/tr&gt;\n\t\t\t\t\t\t\t&lt;/tbody&gt;\n\t\t\t\t\t\t&lt;/table&gt;\n\t\t\t\t\t\t&lt;/td&gt;\n\t\t\t\t\t&lt;/tr&gt;\n\t\t\t\t&lt;/tbody&gt;\n\t\t\t&lt;/table&gt;\n\n\t\t\t&lt;p&gt;Two succesive horizontal lines (&lt;tt&gt;HR&lt;/tt&gt; tags). We can access the space in between:&lt;/p&gt;\n\n\t\t\t&lt;hr /&gt;\n\t\t\t&lt;hr /&gt;\n\t\t\t&lt;ol&gt;\n\t\t\t\t&lt;li&gt;This numbered list...&lt;/li&gt;\n\t\t\t\t&lt;li&gt;...is a neighbour of a horizontal line...&lt;/li&gt;\n\t\t\t\t&lt;li&gt;...and another list.&lt;/li&gt;\n\t\t\t&lt;/ol&gt;\n\n\t\t\t&lt;ul&gt;\n\t\t\t\t&lt;li&gt;We can type between the lists...&lt;/li&gt;\n\t\t\t\t&lt;li&gt;...thanks to &lt;strong&gt;Magicline&lt;/strong&gt;.&lt;/li&gt;\n\t\t\t&lt;/ul&gt;\n\n\t\t\t&lt;p&gt;Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.&lt;/p&gt;\n\n\t\t\t&lt;p&gt;Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.&lt;/p&gt;\n\n\t\t\t&lt;p&gt;Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.&lt;/p&gt;\n\n\t\t\t&lt;div style=&quot;border: 2px dashed green; background: #ddd; text-align: center;&quot;&gt;\n\t\t\t&lt;p&gt;This text is wrapped in a&amp;nbsp;&lt;tt&gt;DIV&lt;/tt&gt;&amp;nbsp;element. We can type after this element though.&lt;/p&gt;\n\t\t\t&lt;/div&gt;\n\t\t</textarea>\n\t\t<script>\n\n\t\t\t// This call can be placed at any point after the\n\t\t\t// <textarea>, or inside a <head><script> in a\n\t\t\t// window.onload event handler.\n\n\t\t\tCKEDITOR.replace( 'editor1', {\n\t\t\t\textraPlugins: 'magicline',\t// Ensure that magicline plugin, which is required for this sample, is loaded.\n\t\t\t\tallowedContent: true\t\t// Switch off the ACF, so very complex content created to\n\t\t\t\t\t\t\t\t\t\t\t// show magicline's power isn't filtered.\n\t\t\t} );\n\n\t\t</script>\n\t</div>\n\t<br>\n\t<div>\n\t\t<label for=\"editor2\">\n\t\t\tEditor 2:\n\t\t</label>\n\t\t<div class=\"description\">\n\t\t\t<p>\n\t\t\t\tThis editor is using a blue line.\n\t\t\t</p>\n<pre class=\"samples\">\nCKEDITOR.replace( 'editor2', {\n\tmagicline_color: 'blue'\n});</pre>\n\t\t</div>\n\t\t<textarea cols=\"80\" id=\"editor2\" name=\"editor2\" rows=\"10\">\n\t\t\t&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt;\n\t\t\t\t&lt;tbody&gt;\n\t\t\t\t\t&lt;tr&gt;\n\t\t\t\t\t\t&lt;td&gt;This table&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;is the&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;very first&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;element of the document.&lt;/td&gt;\n\t\t\t\t\t&lt;/tr&gt;\n\t\t\t\t\t&lt;tr&gt;\n\t\t\t\t\t\t&lt;td&gt;We are still&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;able to acces&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;the space before it.&lt;/td&gt;\n\t\t\t\t\t\t&lt;td&gt;\n\t\t\t\t\t\t&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt;\n\t\t\t\t\t\t\t&lt;tbody&gt;\n\t\t\t\t\t\t\t\t&lt;tr&gt;\n\t\t\t\t\t\t\t\t\t&lt;td&gt;This table is inside of a cell of another table.&lt;/td&gt;\n\t\t\t\t\t\t\t\t&lt;/tr&gt;\n\t\t\t\t\t\t\t\t&lt;tr&gt;\n\t\t\t\t\t\t\t\t\t&lt;td&gt;We can type&amp;nbsp;either before or after it though.&lt;/td&gt;\n\t\t\t\t\t\t\t\t&lt;/tr&gt;\n\t\t\t\t\t\t\t&lt;/tbody&gt;\n\t\t\t\t\t\t&lt;/table&gt;\n\t\t\t\t\t\t&lt;/td&gt;\n\t\t\t\t\t&lt;/tr&gt;\n\t\t\t\t&lt;/tbody&gt;\n\t\t\t&lt;/table&gt;\n\n\t\t\t&lt;p&gt;Two succesive horizontal lines (&lt;tt&gt;HR&lt;/tt&gt; tags). We can access the space in between:&lt;/p&gt;\n\n\t\t\t&lt;hr /&gt;\n\t\t\t&lt;hr /&gt;\n\t\t\t&lt;ol&gt;\n\t\t\t\t&lt;li&gt;This numbered list...&lt;/li&gt;\n\t\t\t\t&lt;li&gt;...is a neighbour of a horizontal line...&lt;/li&gt;\n\t\t\t\t&lt;li&gt;...and another list.&lt;/li&gt;\n\t\t\t&lt;/ol&gt;\n\n\t\t\t&lt;ul&gt;\n\t\t\t\t&lt;li&gt;We can type between the lists...&lt;/li&gt;\n\t\t\t\t&lt;li&gt;...thanks to &lt;strong&gt;Magicline&lt;/strong&gt;.&lt;/li&gt;\n\t\t\t&lt;/ul&gt;\n\n\t\t\t&lt;p&gt;Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.&lt;/p&gt;\n\n\t\t\t&lt;p&gt;Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.&lt;/p&gt;\n\n\t\t\t&lt;p&gt;Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.&lt;/p&gt;\n\n\t\t\t&lt;div style=&quot;border: 2px dashed green; background: #ddd; text-align: center;&quot;&gt;\n\t\t\t&lt;p&gt;This text is wrapped in a&amp;nbsp;&lt;tt&gt;DIV&lt;/tt&gt;&amp;nbsp;element. We can type after this element though.&lt;/p&gt;\n\t\t\t&lt;/div&gt;\n\t\t</textarea>\n\t\t<script>\n\n\t\t\t// This call can be placed at any point after the\n\t\t\t// <textarea>, or inside a <head><script> in a\n\t\t\t// window.onload event handler.\n\n\t\t\tCKEDITOR.replace( 'editor2', {\n\t\t\t\textraPlugins: 'magicline',\t// Ensure that magicline plugin, which is required for this sample, is loaded.\n\t\t\t\tmagicline_color: 'blue',\t// Blue line\n\t\t\t\tallowedContent: true\t\t// Switch off the ACF, so very complex content created to\n\t\t\t\t\t\t\t\t\t\t\t// show magicline's power isn't filtered.\n\t\t\t});\n\n\t\t</script>\n\t</div>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/readonly.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Using the CKEditor Read-Only API &mdash; CKEditor Sample</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<link rel=\"stylesheet\" href=\"sample.css\">\n\t<script>\n\n\t\tvar editor;\n\n\t\t// The instanceReady event is fired, when an instance of CKEditor has finished\n\t\t// its initialization.\n\t\tCKEDITOR.on( 'instanceReady', function( ev ) {\n\t\t\teditor = ev.editor;\n\n\t\t\t// Show this \"on\" button.\n\t\t\tdocument.getElementById( 'readOnlyOn' ).style.display = '';\n\n\t\t\t// Event fired when the readOnly property changes.\n\t\t\teditor.on( 'readOnly', function() {\n\t\t\t\tdocument.getElementById( 'readOnlyOn' ).style.display = this.readOnly ? 'none' : '';\n\t\t\t\tdocument.getElementById( 'readOnlyOff' ).style.display = this.readOnly ? '' : 'none';\n\t\t\t});\n\t\t});\n\n\t\tfunction toggleReadOnly( isReadOnly ) {\n\t\t\t// Change the read-only state of the editor.\n\t\t\t// http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly\n\t\t\teditor.setReadOnly( isReadOnly );\n\t\t}\n\n\t</script>\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\">CKEditor Samples</a> &raquo; Using the CKEditor Read-Only API\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/readonly.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows how to use the\n\t\t\t<code><a class=\"samples\" href=\"http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly\">setReadOnly</a></code>\n\t\t\tAPI to put editor into the read-only state that makes it impossible for users to change the editor contents.\n\t\t</p>\n\t\t<p>\n\t\t\tFor details on how to create this setup check the source code of this sample page.\n\t\t</p>\n\t</div>\n\t<form action=\"sample_posteddata.php\" method=\"post\">\n\t\t<p>\n\t\t\t<textarea class=\"ckeditor\" id=\"editor1\" name=\"editor1\" cols=\"100\" rows=\"10\">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href=\"http://ckeditor.com/\"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\n\t\t</p>\n\t\t<p>\n\t\t\t<input id=\"readOnlyOn\" onclick=\"toggleReadOnly();\" type=\"button\" value=\"Make it read-only\" style=\"display:none\">\n\t\t\t<input id=\"readOnlyOff\" onclick=\"toggleReadOnly( false );\" type=\"button\" value=\"Make it editable again\" style=\"display:none\">\n\t\t</p>\n\t</form>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/replacebyclass.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Replace Textareas by Class Name &mdash; CKEditor Sample</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<link rel=\"stylesheet\" href=\"sample.css\">\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\">CKEditor Samples</a> &raquo; Replace Textarea Elements by Class Name\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out the <a href=\"http://sdk.ckeditor.com/\">brand new samples in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows how to automatically replace all <code>&lt;textarea&gt;</code> elements\n\t\t\tof a given class with a CKEditor instance.\n\t\t</p>\n\t\t<p>\n\t\t\tTo replace a <code>&lt;textarea&gt;</code> element, simply assign it the <code>ckeditor</code>\n\t\t\tclass, as in the code below:\n\t\t</p>\n<pre class=\"samples\">\n&lt;textarea <strong>class=\"ckeditor</strong>\" name=\"editor1\"&gt;&lt;/textarea&gt;\n</pre>\n\t\t<p>\n\t\t\tNote that other <code>&lt;textarea&gt;</code> attributes (like <code>id</code> or <code>name</code>) need to be adjusted to your document.\n\t\t</p>\n\t</div>\n\t<form action=\"sample_posteddata.php\" method=\"post\">\n\t\t<p>\n\t\t\t<label for=\"editor1\">\n\t\t\t\tEditor 1:\n\t\t\t</label>\n\t\t\t<textarea class=\"ckeditor\" cols=\"80\" id=\"editor1\" name=\"editor1\" rows=\"10\">\n\t\t\t\t&lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;\n\t\t\t</textarea>\n\t\t</p>\n\t\t<p>\n\t\t\t<input type=\"submit\" value=\"Submit\">\n\t\t</p>\n\t</form>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/replacebycode.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Replace Textarea by Code &mdash; CKEditor Sample</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<link href=\"sample.css\" rel=\"stylesheet\">\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\">CKEditor Samples</a> &raquo; Replace Textarea Elements Using JavaScript Code\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/classic.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<form action=\"sample_posteddata.php\" method=\"post\">\n\t\t<div class=\"description\">\n\t\t\t<p>\n\t\t\t\tThis editor is using an <code>&lt;iframe&gt;</code> element-based editing area, provided by the <strong>Wysiwygarea</strong> plugin.\n\t\t\t</p>\n<pre class=\"samples\">\nCKEDITOR.replace( '<em>textarea_id</em>' )\n</pre>\n\t\t</div>\n\t\t<textarea cols=\"80\" id=\"editor1\" name=\"editor1\" rows=\"10\">\n\t\t\t&lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;\n\t\t</textarea>\n\t\t<script>\n\n\t\t\t// This call can be placed at any point after the\n\t\t\t// <textarea>, or inside a <head><script> in a\n\t\t\t// window.onload event handler.\n\n\t\t\t// Replace the <textarea id=\"editor\"> with an CKEditor\n\t\t\t// instance, using default configurations.\n\n\t\t\tCKEDITOR.replace( 'editor1' );\n\n\t\t</script>\n\t\t<p>\n\t\t\t<input type=\"submit\" value=\"Submit\">\n\t\t</p>\n\t</form>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/sample.css",
    "content": "/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n\nhtml, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre\n{\n\tline-height: 1.5;\n}\n\nbody\n{\n\tpadding: 10px 30px;\n}\n\ninput, textarea, select, option, optgroup, button, td, th\n{\n\tfont-size: 100%;\n}\n\npre\n{\n\t-moz-tab-size: 4;\n\ttab-size: 4;\n}\n\npre, code, kbd, samp, tt\n{\n\tfont-family: monospace,monospace;\n\tfont-size: 1em;\n}\n\nbody {\n\twidth: 960px;\n\tmargin: 0 auto;\n}\n\ncode\n{\n\tbackground: #f3f3f3;\n\tborder: 1px solid #ddd;\n\tpadding: 1px 4px;\n\tborder-radius: 3px;\n}\n\nabbr\n{\n\tborder-bottom: 1px dotted #555;\n\tcursor: pointer;\n}\n\n.new, .beta\n{\n\ttext-transform: uppercase;\n\tfont-size: 10px;\n\tfont-weight: bold;\n\tpadding: 1px 4px;\n\tmargin: 0 0 0 5px;\n\tcolor: #fff;\n\tfloat: right;\n\tborder-radius: 3px;\n}\n\n.new\n{\n\tbackground: #FF7E00;\n\tborder: 1px solid #DA8028;\n\ttext-shadow: 0 1px 0 #C97626;\n\n\tbox-shadow: 0 2px 3px 0 #FFA54E inset;\n}\n\n.beta\n{\n\tbackground: #18C0DF;\n\tborder: 1px solid #19AAD8;\n\ttext-shadow: 0 1px 0 #048CAD;\n\tfont-style: italic;\n\n\tbox-shadow: 0 2px 3px 0 #50D4FD inset;\n}\n\nh1.samples\n{\n\tcolor: #0782C1;\n\tfont-size: 200%;\n\tfont-weight: normal;\n\tmargin: 0;\n\tpadding: 0;\n}\n\nh1.samples a\n{\n\tcolor: #0782C1;\n\ttext-decoration: none;\n\tborder-bottom: 1px dotted #0782C1;\n}\n\n.samples a:hover\n{\n\tborder-bottom: 1px dotted #0782C1;\n}\n\nh2.samples\n{\n\tcolor: #000000;\n\tfont-size: 130%;\n\tmargin: 15px 0 0 0;\n\tpadding: 0;\n}\n\np, blockquote, address, form, pre, dl, h1.samples, h2.samples\n{\n\tmargin-bottom: 15px;\n}\n\nul.samples\n{\n\tmargin-bottom: 15px;\n}\n\n.clear\n{\n\tclear: both;\n}\n\nfieldset\n{\n\tmargin: 0;\n\tpadding: 10px;\n}\n\nbody, input, textarea\n{\n\tcolor: #333333;\n\tfont-family: Arial, Helvetica, sans-serif;\n}\n\nbody\n{\n\tfont-size: 75%;\n}\n\na.samples\n{\n\tcolor: #189DE1;\n\ttext-decoration: none;\n}\n\nform\n{\n\tmargin: 0;\n\tpadding: 0;\n}\n\npre.samples\n{\n\tbackground-color: #F7F7F7;\n\tborder: 1px solid #D7D7D7;\n\toverflow: auto;\n\tpadding: 0.25em;\n\twhite-space: pre-wrap; /* CSS 2.1 */\n\tword-wrap: break-word; /* IE7 */\n}\n\n#footer\n{\n\tclear: both;\n\tpadding-top: 10px;\n}\n\n#footer hr\n{\n\tmargin: 10px 0 15px 0;\n\theight: 1px;\n\tborder: solid 1px gray;\n\tborder-bottom: none;\n}\n\n#footer p\n{\n\tmargin: 0 10px 10px 10px;\n\tfloat: left;\n}\n\n#footer #copy\n{\n\tfloat: right;\n}\n\n#outputSample\n{\n\twidth: 100%;\n\ttable-layout: fixed;\n}\n\n#outputSample thead th\n{\n\tcolor: #dddddd;\n\tbackground-color: #999999;\n\tpadding: 4px;\n\twhite-space: nowrap;\n}\n\n#outputSample tbody th\n{\n\tvertical-align: top;\n\ttext-align: left;\n}\n\n#outputSample pre\n{\n\tmargin: 0;\n\tpadding: 0;\n}\n\n.description\n{\n\tborder: 1px dotted #B7B7B7;\n\tmargin-bottom: 10px;\n\tpadding: 10px 10px 0;\n\toverflow: hidden;\n}\n\nlabel\n{\n\tdisplay: block;\n\tmargin-bottom: 6px;\n}\n\n/**\n *\tCKEditor editables are automatically set with the \"cke_editable\" class\n *\tplus cke_editable_(inline|themed) depending on the editor type.\n */\n\n/* Style a bit the inline editables. */\n.cke_editable.cke_editable_inline\n{\n\tcursor: pointer;\n}\n\n/* Once an editable element gets focused, the \"cke_focus\" class is\n   added to it, so we can style it differently. */\n.cke_editable.cke_editable_inline.cke_focus\n{\n\tbox-shadow: inset 0px 0px 20px 3px #ddd, inset 0 0 1px #000;\n\toutline: none;\n\tbackground: #eee;\n\tcursor: text;\n}\n\n/* Avoid pre-formatted overflows inline editable. */\n.cke_editable_inline pre\n{\n\twhite-space: pre-wrap;\n\tword-wrap: break-word;\n}\n\n/**\n *\tSamples index styles.\n */\n\n.twoColumns,\n.twoColumnsLeft,\n.twoColumnsRight\n{\n\toverflow: hidden;\n}\n\n.twoColumnsLeft,\n.twoColumnsRight\n{\n\twidth: 45%;\n}\n\n.twoColumnsLeft\n{\n\tfloat: left;\n}\n\n.twoColumnsRight\n{\n\tfloat: right;\n}\n\ndl.samples\n{\n\tpadding: 0 0 0 40px;\n}\ndl.samples > dt\n{\n\tdisplay: list-item;\n\tlist-style-type: disc;\n\tlist-style-position: outside;\n\tmargin: 0 0 3px;\n}\ndl.samples > dd\n{\n\tmargin: 0 0 3px;\n}\n.warning\n{\n\tcolor: #ff0000;\n\tbackground-color: #FFCCBA;\n\tborder: 2px dotted #ff0000;\n\tpadding: 15px 10px;\n\tmargin: 10px 0;\n}\n\n.warning.deprecated {\n\tfont-size: 1.3em;\n}\n\n/* Used on inline samples */\n\nblockquote\n{\n\tfont-style: italic;\n\tfont-family: Georgia, Times, \"Times New Roman\", serif;\n\tpadding: 2px 0;\n\tborder-style: solid;\n\tborder-color: #ccc;\n\tborder-width: 0;\n}\n\n.cke_contents_ltr blockquote\n{\n\tpadding-left: 20px;\n\tpadding-right: 8px;\n\tborder-left-width: 5px;\n}\n\n.cke_contents_rtl blockquote\n{\n\tpadding-left: 8px;\n\tpadding-right: 20px;\n\tborder-right-width: 5px;\n}\n\nimg.right {\n\tborder: 1px solid #ccc;\n\tfloat: right;\n\tmargin-left: 15px;\n\tpadding: 5px;\n}\n\nimg.left {\n\tborder: 1px solid #ccc;\n\tfloat: left;\n\tmargin-right: 15px;\n\tpadding: 5px;\n}\n\n.marker\n{\n\tbackground-color: Yellow;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/sample.js",
    "content": "﻿/**\n * Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n// Tool scripts for the sample pages.\n// This file can be ignored and is not required to make use of CKEditor.\n\n( function() {\n\tCKEDITOR.on( 'instanceReady', function( ev ) {\n\t\t// Check for sample compliance.\n\t\tvar editor = ev.editor,\n\t\t\tmeta = CKEDITOR.document.$.getElementsByName( 'ckeditor-sample-required-plugins' ),\n\t\t\trequires = meta.length ? CKEDITOR.dom.element.get( meta[ 0 ] ).getAttribute( 'content' ).split( ',' ) : [],\n\t\t\tmissing = [],\n\t\t\ti;\n\n\t\tif ( requires.length ) {\n\t\t\tfor ( i = 0; i < requires.length; i++ ) {\n\t\t\t\tif ( !editor.plugins[ requires[ i ] ] )\n\t\t\t\t\tmissing.push( '<code>' + requires[ i ] + '</code>' );\n\t\t\t}\n\n\t\t\tif ( missing.length ) {\n\t\t\t\tvar warn = CKEDITOR.dom.element.createFromHtml(\n\t\t\t\t\t'<div class=\"warning\">' +\n\t\t\t\t\t\t'<span>To fully experience this demo, the ' + missing.join( ', ' ) + ' plugin' + ( missing.length > 1 ? 's are' : ' is' ) + ' required.</span>' +\n\t\t\t\t\t'</div>'\n\t\t\t\t);\n\t\t\t\twarn.insertBefore( editor.container );\n\t\t\t}\n\t\t}\n\n\t\t// Set icons.\n\t\tvar doc = new CKEDITOR.dom.document( document ),\n\t\t\ticons = doc.find( '.button_icon' );\n\n\t\tfor ( i = 0; i < icons.count(); i++ ) {\n\t\t\tvar icon = icons.getItem( i ),\n\t\t\t\tname = icon.getAttribute( 'data-icon' ),\n\t\t\t\tstyle = CKEDITOR.skin.getIconStyle( name, ( CKEDITOR.lang.dir == 'rtl' ) );\n\n\t\t\ticon.addClass( 'cke_button_icon' );\n\t\t\ticon.addClass( 'cke_button__' + name + '_icon' );\n\t\t\ticon.setAttribute( 'style', style );\n\t\t\ticon.setStyle( 'float', 'none' );\n\n\t\t}\n\t} );\n} )();\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/sample_posteddata.php",
    "content": "<?php /* <body><pre>\n\n-------------------------------------------------------------------------------------------\n  CKEditor - Posted Data\n\n  We are sorry, but your Web server does not support the PHP language used in this script.\n\n  Please note that CKEditor can be used with any other server-side language than just PHP.\n  To save the content created with CKEditor you need to read the POST data on the server\n  side and write it to a file or the database.\n\n  Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n  For licensing, see LICENSE.md or http://ckeditor.com/license\n-------------------------------------------------------------------------------------------\n\n</pre><div style=\"display:none\"></body> */ include \"assets/posteddata.php\"; ?>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/tabindex.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>TAB Key-Based Navigation &mdash; CKEditor Sample</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<link href=\"sample.css\" rel=\"stylesheet\">\n\t<style>\n\n\t\t.cke_focused,\n\t\t.cke_editable.cke_focused\n\t\t{\n\t\t\toutline: 3px dotted blue !important;\n\t\t\t*border: 3px dotted blue !important;\t/* For IE7 */\n\t\t}\n\n\t</style>\n\t<script>\n\n\t\tCKEDITOR.on( 'instanceReady', function( evt ) {\n\t\t\tvar editor = evt.editor;\n\t\t\teditor.setData( 'This editor has it\\'s tabIndex set to <strong>' + editor.tabIndex + '</strong>' );\n\n\t\t\t// Apply focus class name.\n\t\t\teditor.on( 'focus', function() {\n\t\t\t\teditor.container.addClass( 'cke_focused' );\n\t\t\t});\n\t\t\teditor.on( 'blur', function() {\n\t\t\t\teditor.container.removeClass( 'cke_focused' );\n\t\t\t});\n\n\t\t\t// Put startup focus on the first editor in tab order.\n\t\t\tif ( editor.tabIndex == 1 )\n\t\t\t\teditor.focus();\n\t\t});\n\n\t</script>\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\">CKEditor Samples</a> &raquo; TAB Key-Based Navigation\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/tabindex.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows how tab key navigation among editor instances is\n\t\t\taffected by the <code>tabIndex</code> attribute from\n\t\t\tthe original page element. Use TAB key to move between the editors.\n\t\t</p>\n\t</div>\n\t<p>\n\t\t<textarea class=\"ckeditor\" cols=\"80\" id=\"editor4\" rows=\"10\" tabindex=\"1\"></textarea>\n\t</p>\n\t<div class=\"ckeditor\" contenteditable=\"true\" id=\"editor1\" tabindex=\"4\"></div>\n\t<p>\n\t\t<textarea class=\"ckeditor\" cols=\"80\" id=\"editor2\" rows=\"10\" tabindex=\"2\"></textarea>\n\t</p>\n\t<p>\n\t\t<textarea class=\"ckeditor\" cols=\"80\" id=\"editor3\" rows=\"10\" tabindex=\"3\"></textarea>\n\t</p>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/toolbar/toolbar.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Toolbar Configuration &mdash; CKEditor Sample</title>\n\t<meta name=\"ckeditor-sample-name\" content=\"Toolbar Configurations\">\n\t<meta name=\"ckeditor-sample-group\" content=\"Advanced Samples\">\n\t<meta name=\"ckeditor-sample-description\" content=\"Configuring CKEditor to display full or custom toolbar layout.\">\n\t<script src=\"../../../ckeditor.js\"></script>\n\t<link href=\"../../../samples/old/sample.css\" rel=\"stylesheet\">\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"../../../samples/old/index.html\">CKEditor Samples</a> &raquo; Toolbar Configuration\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out the <a href=\"../../../samples/toolbarconfigurator/index.html#basic\">brand new CKEditor Toolbar Configurator</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample page demonstrates editor with loaded <a href=\"#fullToolbar\">full toolbar</a> (all registered buttons) and, if\n\t\t\tcurrent editor's configuration modifies default settings, also editor with <a href=\"#currentToolbar\">modified toolbar</a>.\n\t\t</p>\n\n\t\t<p>Since CKEditor 4 there are two ways to configure toolbar buttons.</p>\n\n\t\t<h2 class=\"samples\">By <a href=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbar\">config.toolbar</a></h2>\n\n\t\t<p>\n\t\t\tYou can explicitly define which buttons are displayed in which groups and in which order.\n\t\t\tThis is the more precise setting, but less flexible. If newly added plugin adds its\n\t\t\town button you'll have to add it manually to your <code>config.toolbar</code> setting as well.\n\t\t</p>\n\n\t\t<p>To add a CKEditor instance with custom toolbar setting, insert the following JavaScript call to your code:</p>\n\n\t\t<pre class=\"samples\">\nCKEDITOR.replace( <em>'textarea_id'</em>, {\n\t<strong>toolbar:</strong> [\n\t\t{ name: 'document', items: [ 'Source', '-', 'NewPage', 'Preview', '-', 'Templates' ] },\t// Defines toolbar group with name (used to create voice label) and items in 3 subgroups.\n\t\t[ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ],\t\t\t// Defines toolbar group without name.\n\t\t'/',\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Line break - next group will be placed in new line.\n\t\t{ name: 'basicstyles', items: [ 'Bold', 'Italic' ] }\n\t]\n});</pre>\n\n\t\t<h2 class=\"samples\">By <a href=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbarGroups\">config.toolbarGroups</a></h2>\n\n\t\t<p>\n\t\t\tYou can define which groups of buttons (like e.g. <code>basicstyles</code>, <code>clipboard</code>\n\t\t\tand <code>forms</code>) are displayed and in which order. Registered buttons are associated\n\t\t\twith toolbar groups by <code>toolbar</code> property in their definition.\n\t\t\tThis setting's advantage is that you don't have to modify toolbar configuration\n\t\t\twhen adding/removing plugins which register their own buttons.\n\t\t</p>\n\n\t\t<p>To add a CKEditor instance with custom toolbar groups setting, insert the following JavaScript call to your code:</p>\n\n\t\t<pre class=\"samples\">\nCKEDITOR.replace( <em>'textarea_id'</em>, {\n\t<strong>toolbarGroups:</strong> [\n\t\t{ name: 'document',\t   groups: [ 'mode', 'document' ] },\t\t\t// Displays document group with its two subgroups.\n \t\t{ name: 'clipboard',   groups: [ 'clipboard', 'undo' ] },\t\t\t// Group's name will be used to create voice label.\n \t\t'/',\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Line break - next group will be placed in new line.\n \t\t{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },\n \t\t{ name: 'links' }\n\t]\n\n\t// NOTE: Remember to leave 'toolbar' property with the default value (null).\n});</pre>\n\t</div>\n\n\t<div id=\"currentToolbar\" style=\"display: none\">\n\t\t<h2 class=\"samples\">Current toolbar configuration</h2>\n\t\t<p>Below you can see editor with current toolbar definition.</p>\n\t\t<textarea cols=\"80\" id=\"editorCurrent\" name=\"editorCurrent\" rows=\"10\">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href=\"http://ckeditor.com/\"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\n\t\t<pre id=\"editorCurrentCfg\" class=\"samples\"></pre>\n\t</div>\n\n\t<div id=\"fullToolbar\">\n\t\t<h2 class=\"samples\">Full toolbar configuration</h2>\n\t\t<p>Below you can see editor with full toolbar, generated automatically by the editor.</p>\n\t\t<p>\n\t\t\t<strong>Note</strong>: To create editor instance with full toolbar you don't have to set anything.\n\t\t\tJust leave <code>toolbar</code> and <code>toolbarGroups</code> with the default, <code>null</code> values.\n\t\t</p>\n\t\t<textarea cols=\"80\" id=\"editorFull\" name=\"editorFull\" rows=\"10\">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href=\"http://ckeditor.com/\"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\n\t\t<pre id=\"editorFullCfg\" class=\"samples\"></pre>\n\t</div>\n\n\t<script>\n\n(function() {\n\t'use strict';\n\n\tvar buttonsNames;\n\n\tCKEDITOR.config.extraPlugins = 'toolbar';\n\n\tCKEDITOR.on( 'instanceReady', function( evt ) {\n\t\tvar editor = evt.editor,\n\t\t\teditorCurrent = editor.name == 'editorCurrent',\n\t\t\tdefaultToolbar = !( editor.config.toolbar || editor.config.toolbarGroups || editor.config.removeButtons ),\n\t\t\tpre = CKEDITOR.document.getById( editor.name + 'Cfg' ),\n\t\t\toutput = '';\n\n\t\tif ( editorCurrent ) {\n\t\t\t// If default toolbar configuration has been modified, show \"current toolbar\" section.\n\t\t\tif ( !defaultToolbar )\n\t\t\t\tCKEDITOR.document.getById( 'currentToolbar' ).show();\n\t\t\telse\n\t\t\t\treturn;\n\t\t}\n\n\t\tif ( !buttonsNames )\n\t\t\tbuttonsNames = createButtonsNamesHash( editor.ui.items );\n\n\t\t// Toolbar isn't set explicitly, so it was created automatically from toolbarGroups.\n\t\tif ( !editor.config.toolbar ) {\n\t\t\toutput +=\n\t\t\t\t'// Toolbar configuration generated automatically by the editor based on config.toolbarGroups.\\n' +\n\t\t\t\tdumpToolbarConfiguration( editor ) +\n\t\t\t\t'\\n\\n' +\n\t\t\t\t'// Toolbar groups configuration.\\n' +\n\t\t\t\tdumpToolbarConfiguration( editor, true )\n\t\t}\n\t\t// Toolbar groups doesn't count in this case - print only toolbar.\n\t\telse {\n\t\t\toutput += '// Toolbar configuration.\\n' +\n\t\t\t\tdumpToolbarConfiguration( editor );\n\t\t}\n\n\t\t// Recreate to avoid old IE from loosing whitespaces on filling <pre> content.\n\t\tvar preOutput = pre.getOuterHtml().replace( /(?=<\\/)/, output );\n\t\tCKEDITOR.dom.element.createFromHtml( preOutput ).replace( pre );\n\t} );\n\n\tCKEDITOR.replace( 'editorCurrent', { height: 100 } );\n\tCKEDITOR.replace( 'editorFull', {\n\t\t// Reset toolbar settings, so full toolbar will be generated automatically.\n\t\ttoolbar: null,\n\t\ttoolbarGroups: null,\n\t\tremoveButtons: null,\n\t\theight: 100\n\t} );\n\n\tfunction dumpToolbarConfiguration( editor, printGroups ) {\n\t\tvar output = [],\n\t\t\ttoolbar = editor.toolbar;\n\n\t\tfor ( var i = 0; i < toolbar.length; ++i ) {\n\t\t\tvar group = dumpToolbarGroup( toolbar[ i ], printGroups );\n\t\t\tif ( group )\n\t\t\t\toutput.push( group );\n\t\t}\n\n\t\treturn 'config.toolbar' + ( printGroups ? 'Groups' : '' ) + ' = [\\n\\t' + output.join( ',\\n\\t' ) + '\\n];';\n\t}\n\n\tfunction dumpToolbarGroup( group, printGroups ) {\n\t\tvar output = [];\n\n\t\tif ( typeof group == 'string' )\n\t\t\treturn '\\'' + group + '\\'';\n\t\tif ( CKEDITOR.tools.isArray( group ) )\n\t\t\treturn dumpToolbarItems( group );\n\t\t// Skip group when printing entire toolbar configuration and there are no items in this group.\n\t\tif ( !printGroups && !group.items )\n\t\t\treturn;\n\n\t\tif ( group.name )\n\t\t\toutput.push( 'name: \\'' + group.name + '\\'' );\n\n\t\tif ( group.groups )\n\t\t\toutput.push( 'groups: ' + dumpToolbarItems( group.groups ) );\n\n\t\tif ( !printGroups )\n\t\t\toutput.push( 'items: ' + dumpToolbarItems( group.items ) );\n\n\t\treturn '{ ' + output.join( ', ' ) + ' }';\n\t}\n\n\tfunction dumpToolbarItems( items ) {\n\t\tif ( typeof items == 'string' )\n\t\t\treturn '\\'' + items + '\\'';\n\n\t\tvar names = [],\n\t\t\ti, item;\n\n\t\tfor ( var i = 0; i < items.length; ++i ) {\n\t\t\titem = items[ i ];\n\t\t\tif ( typeof item == 'string' )\n\t\t\t\tnames.push( item );\n\t\t\telse {\n\t\t\t\tif ( item.type == CKEDITOR.UI_SEPARATOR )\n\t\t\t\t\tnames.push( '-' );\n\t\t\t\telse\n\t\t\t\t\tnames.push( buttonsNames[ item.name ] );\n\t\t\t}\n\t\t}\n\n\t\treturn '[ \\'' + names.join( '\\', \\'' ) + '\\' ]';\n\t}\n\n\t// Creates { 'lowercased': 'LowerCased' } buttons names hash.\n\tfunction createButtonsNamesHash( items ) {\n\t\tvar hash = {},\n\t\t\tname;\n\n\t\tfor ( name in items ) {\n\t\t\thash[ items[ name ].name ] = name;\n\t\t}\n\n\t\treturn hash;\n\t}\n\n})();\n\t</script>\n\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/uicolor.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>UI Color Picker &mdash; CKEditor Sample</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<link rel=\"stylesheet\" href=\"sample.css\">\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\">CKEditor Samples</a> &raquo; UI Color\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/uicolor.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows how to automatically replace <code>&lt;textarea&gt;</code> elements\n\t\t\twith a CKEditor instance with an option to change the color of its user interface.<br>\n\t\t\t<strong>Note:</strong>The UI skin color feature depends on the CKEditor skin\n\t\t\tcompatibility. The Moono and Kama skins are examples of skins that work with it.\n\t\t</p>\n\t</div>\n\t<form action=\"sample_posteddata.php\" method=\"post\">\n\t<p>\n\t\tThis editor instance has a UI color value defined in configuration to change the skin color,\n\t\tTo specify the color of the user interface, set the <code>uiColor</code> property:\n\t</p>\n\t<pre class=\"samples\">\nCKEDITOR.replace( '<em>textarea_id</em>', {\n\t<strong>uiColor: '#14B8C4'</strong>\n});</pre>\n\t<p>\n\t\tNote that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of\n\t\tthe <code>&lt;textarea&gt;</code> element to be replaced.\n\t</p>\n\t<p>\n\t\t<textarea cols=\"80\" id=\"editor1\" name=\"editor1\" rows=\"10\">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href=\"http://ckeditor.com/\"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\n\t\t<script>\n\n\t\t\t// Replace the <textarea id=\"editor\"> with an CKEditor\n\t\t\t// instance, using default configurations.\n\t\t\tCKEDITOR.replace( 'editor1', {\n\t\t\t\tuiColor: '#14B8C4',\n\t\t\t\ttoolbar: [\n\t\t\t\t\t[ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ],\n\t\t\t\t\t[ 'FontSize', 'TextColor', 'BGColor' ]\n\t\t\t\t]\n\t\t\t});\n\n\t\t</script>\n\t</p>\n\t<p>\n\t\t<input type=\"submit\" value=\"Submit\">\n\t</p>\n\t</form>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/uilanguages.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>User Interface Globalization &mdash; CKEditor Sample</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<script src=\"assets/uilanguages/languages.js\"></script>\n\t<link rel=\"stylesheet\" href=\"sample.css\">\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\">CKEditor Samples</a> &raquo; User Interface Languages\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/uilanguages.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows how to automatically replace <code>&lt;textarea&gt;</code> elements\n\t\t\twith a CKEditor instance with an option to change the language of its user interface.\n\t\t</p>\n\t\t<p>\n\t\t\tIt pulls the language list from CKEditor <code>_languages.js</code> file that contains the list of supported languages and creates\n\t\t\ta drop-down list that lets the user change the UI language.\n\t\t</p>\n\t\t<p>\n\t\t\tBy default, CKEditor automatically localizes the editor to the language of the user.\n\t\t\tThe UI language can be controlled with two configuration options:\n\t\t\t<code><a class=\"samples\" href=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-language\">language</a></code> and\n\t\t\t<code><a class=\"samples\" href=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-defaultLanguage\">\n\t\t\tdefaultLanguage</a></code>. The <code>defaultLanguage</code> setting specifies the\n\t\t\tdefault CKEditor language to be used when a localization suitable for user's settings is not available.\n\t\t</p>\n\t\t<p>\n\t\t\tTo specify the user interface language that will be used no matter what language is\n\t\t\tspecified in user's browser or operating system, set the <code>language</code> property:\n\t\t</p>\n<pre class=\"samples\">\nCKEDITOR.replace( '<em>textarea_id</em>', {\n\t// Load the German interface.\n\t<strong>language: 'de'</strong>\n});</pre>\n\t\t<p>\n\t\t\tNote that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of\n\t\t\tthe <code>&lt;textarea&gt;</code> element to be replaced.\n\t\t</p>\n\t</div>\n\t<form action=\"sample_posteddata.php\" method=\"post\">\n\t\t<p>\n\t\t\tAvailable languages (<span id=\"count\"> </span> languages!):<br>\n\t\t\t<script>\n\n\t\t\t\tdocument.write( '<select disabled=\"disabled\" id=\"languages\" onchange=\"createEditor( this.value );\">' );\n\n\t\t\t\t// Get the language list from the _languages.js file.\n\t\t\t\tfor ( var i = 0 ; i < window.CKEDITOR_LANGS.length ; i++ ) {\n\t\t\t\t\tdocument.write(\n\t\t\t\t\t\t'<option value=\"' + window.CKEDITOR_LANGS[i].code + '\">' +\n\t\t\t\t\t\t\twindow.CKEDITOR_LANGS[i].name +\n\t\t\t\t\t\t'</option>' );\n\t\t\t\t}\n\n\t\t\t\tdocument.write( '</select>' );\n\n\t\t\t</script>\n\t\t\t<br>\n\t\t\t<span style=\"color: #888888\">\n\t\t\t\t(You may see strange characters if your system does not support the selected language)\n\t\t\t</span>\n\t\t</p>\n\t\t<p>\n\t\t\t<textarea cols=\"80\" id=\"editor1\" name=\"editor1\" rows=\"10\">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href=\"http://ckeditor.com/\"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\n\t\t\t<script>\n\n\t\t\t\t// Set the number of languages.\n\t\t\t\tdocument.getElementById( 'count' ).innerHTML = window.CKEDITOR_LANGS.length;\n\n\t\t\t\tvar editor;\n\n\t\t\t\tfunction createEditor( languageCode ) {\n\t\t\t\t\tif ( editor )\n\t\t\t\t\t\teditor.destroy();\n\n\t\t\t\t\t// Replace the <textarea id=\"editor\"> with an CKEditor\n\t\t\t\t\t// instance, using default configurations.\n\t\t\t\t\teditor = CKEDITOR.replace( 'editor1', {\n\t\t\t\t\t\tlanguage: languageCode,\n\n\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\tinstanceReady: function() {\n\t\t\t\t\t\t\t\t// Wait for the editor to be ready to set\n\t\t\t\t\t\t\t\t// the language combo.\n\t\t\t\t\t\t\t\tvar languages = document.getElementById( 'languages' );\n\t\t\t\t\t\t\t\tlanguages.value = this.langCode;\n\t\t\t\t\t\t\t\tlanguages.disabled = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// At page startup, load the default language:\n\t\t\t\tcreateEditor( '' );\n\n\t\t\t</script>\n\t\t</p>\n\t</form>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/wysiwygarea/fullpage.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Full Page Editing &mdash; CKEditor Sample</title>\n\t<script src=\"../../../ckeditor.js\"></script>\n\t<script src=\"../../../samples/old/sample.js\"></script>\n\t<link rel=\"stylesheet\" href=\"../../../samples/old/sample.css\">\n\t<meta name=\"ckeditor-sample-required-plugins\" content=\"sourcearea\">\n\t<meta name=\"ckeditor-sample-name\" content=\"Full page support\">\n\t<meta name=\"ckeditor-sample-group\" content=\"Plugins\">\n\t<meta name=\"ckeditor-sample-description\" content=\"CKEditor inserted with a JavaScript call and used to edit the whole page from &lt;html&gt; to &lt;/html&gt;.\">\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"../../../samples/old/index.html\">CKEditor Samples</a> &raquo; Full Page Editing\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/fullpage.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows how to configure CKEditor to edit entire HTML pages, from the\n\t\t\t<code>&lt;html&gt;</code> tag to the <code>&lt;/html&gt;</code> tag.\n\t\t</p>\n\t\t<p>\n\t\t\tThe CKEditor instance below is inserted with a JavaScript call using the following code:\n\t\t</p>\n<pre class=\"samples\">\nCKEDITOR.replace( '<em>textarea_id</em>', {\n\t<strong>fullPage: true</strong>,\n\t<strong>allowedContent: true</strong>\n});\n</pre>\n\t\t<p>\n\t\t\tNote that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of\n\t\t\tthe <code>&lt;textarea&gt;</code> element to be replaced.\n\t\t</p>\n\t\t<p>\n\t\t\tThe <code><em>allowedContent</em></code> in the code above is set to <code>true</code> to disable content filtering.\n\t\t\tSetting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations.\n\t\t</p>\n\t</div>\n\t<form action=\"../../../samples/sample_posteddata.php\" method=\"post\">\n\t\t<label for=\"editor1\">\n\t\t\tCKEditor output the entire page including content outside of\n\t\t\t<code>&lt;body&gt;</code> element, so content like meta and title can be changed:\n\t\t</label>\n\t\t<textarea cols=\"80\" id=\"editor1\" name=\"editor1\" rows=\"10\">\n\t\t\t&lt;h1&gt;&lt;img align=&quot;right&quot; alt=&quot;Saturn V carrying Apollo 11&quot; src=&quot;../../../samples/old/assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;\n\t\t</textarea>\n\t\t<script>\n\n\t\t\tCKEDITOR.replace( 'editor1', {\n\t\t\t\tfullPage: true,\n\t\t\t\tallowedContent: true,\n\t\t\t\textraPlugins: 'wysiwygarea'\n\t\t\t});\n\n\t\t</script>\n\t\t<p>\n\t\t\t<input type=\"submit\" value=\"Submit\">\n\t\t</p>\n\t</form>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/old/xhtmlstyle.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>XHTML Compliant Output &mdash; CKEditor Sample</title>\n\t<meta name=\"ckeditor-sample-required-plugins\" content=\"sourcearea\">\n\t<script src=\"../../ckeditor.js\"></script>\n\t<script src=\"sample.js\"></script>\n\t<link href=\"sample.css\" rel=\"stylesheet\">\n</head>\n<body>\n\t<h1 class=\"samples\">\n\t\t<a href=\"index.html\">CKEditor Samples</a> &raquo; Producing XHTML Compliant Output\n\t</h1>\n\t<div class=\"warning deprecated\">\n\t\tThis sample is not maintained anymore. Check out its <a href=\"http://sdk.ckeditor.com/samples/basicstyles.html\">brand new version in CKEditor SDK</a>.\n\t</div>\n\t<div class=\"description\">\n\t\t<p>\n\t\t\tThis sample shows how to configure CKEditor to output valid\n\t\t\t<a class=\"samples\" href=\"http://www.w3.org/TR/xhtml11/\">XHTML 1.1</a> code.\n\t\t\tDeprecated elements (<code>&lt;font&gt;</code>, <code>&lt;u&gt;</code>) or attributes\n\t\t\t(<code>size</code>, <code>face</code>) will be replaced with XHTML compliant code.\n\t\t</p>\n\t\t<p>\n\t\t\tTo add a CKEditor instance outputting valid XHTML code, load the editor using a standard\n\t\t\tJavaScript call and define CKEditor features to use the XHTML compliant elements and styles.\n\t\t</p>\n\t\t<p>\n\t\t\tA snippet of the configuration code can be seen below; check the source of this page for\n\t\t\tfull definition:\n\t\t</p>\n<pre class=\"samples\">\nCKEDITOR.replace( '<em>textarea_id</em>', {\n\tcontentsCss: 'assets/outputxhtml.css',\n\n\tcoreStyles_bold: {\n\t\telement: 'span',\n\t\tattributes: { 'class': 'Bold' }\n\t},\n\tcoreStyles_italic: {\n\t\telement: 'span',\n\t\tattributes: { 'class': 'Italic' }\n\t},\n\n\t...\n});</pre>\n\t</div>\n\t<form action=\"sample_posteddata.php\" method=\"post\">\n\t\t<p>\n\t\t\t<label for=\"editor1\">\n\t\t\t\tEditor 1:\n\t\t\t</label>\n\t\t\t<textarea cols=\"80\" id=\"editor1\" name=\"editor1\" rows=\"10\">&lt;p&gt;This is some &lt;span class=\"Bold\"&gt;sample text&lt;/span&gt;. You are using &lt;a href=\"http://ckeditor.com/\"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\n\t\t\t<script>\n\n\t\t\t\tCKEDITOR.replace( 'editor1', {\n\t\t\t\t\t/*\n\t\t\t\t\t * Style sheet for the contents\n\t\t\t\t\t */\n\t\t\t\t\tcontentsCss: 'assets/outputxhtml/outputxhtml.css',\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Special allowed content rules for spans used by\n\t\t\t\t\t * font face, size, and color buttons.\n\t\t\t\t\t *\n\t\t\t\t\t * Note: all rules have been written separately so\n\t\t\t\t\t * it was possible to specify required classes.\n\t\t\t\t\t */\n\t\t\t\t\textraAllowedContent: 'span(!FontColor1);span(!FontColor2);span(!FontColor3);' +\n\t\t\t\t\t\t'span(!FontColor1BG);span(!FontColor2BG);span(!FontColor3BG);' +\n\t\t\t\t\t\t'span(!FontComic);span(!FontCourier);span(!FontTimes);' +\n\t\t\t\t\t\t'span(!FontSmaller);span(!FontLarger);span(!FontSmall);span(!FontBig);span(!FontDouble)',\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Core styles.\n\t\t\t\t\t */\n\t\t\t\t\tcoreStyles_bold: {\n\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\tattributes: { 'class': 'Bold' }\n\t\t\t\t\t},\n\t\t\t\t\tcoreStyles_italic: {\n\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\tattributes: { 'class': 'Italic' }\n\t\t\t\t\t},\n\t\t\t\t\tcoreStyles_underline: {\n\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\tattributes: { 'class': 'Underline' }\n\t\t\t\t\t},\n\t\t\t\t\tcoreStyles_strike: {\n\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\tattributes: { 'class': 'StrikeThrough' },\n\t\t\t\t\t\toverrides: 'strike'\n\t\t\t\t\t},\n\t\t\t\t\tcoreStyles_subscript: {\n\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\tattributes: { 'class': 'Subscript' },\n\t\t\t\t\t\toverrides: 'sub'\n\t\t\t\t\t},\n\t\t\t\t\tcoreStyles_superscript: {\n\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\tattributes: { 'class': 'Superscript' },\n\t\t\t\t\t\toverrides: 'sup'\n\t\t\t\t\t},\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Font face.\n\t\t\t\t\t */\n\n\t\t\t\t\t// List of fonts available in the toolbar combo. Each font definition is\n\t\t\t\t\t// separated by a semi-colon (;). We are using class names here, so each font\n\t\t\t\t\t// is defined by {Combo Label}/{Class Name}.\n\t\t\t\t\tfont_names: 'Comic Sans MS/FontComic;Courier New/FontCourier;Times New Roman/FontTimes',\n\n\t\t\t\t\t// Define the way font elements will be applied to the document. The \"span\"\n\t\t\t\t\t// element will be used. When a font is selected, the font name defined in the\n\t\t\t\t\t// above list is passed to this definition with the name \"Font\", being it\n\t\t\t\t\t// injected in the \"class\" attribute.\n\t\t\t\t\t// We must also instruct the editor to replace span elements that are used to\n\t\t\t\t\t// set the font (Overrides).\n\t\t\t\t\tfont_style: {\n\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\tattributes: { 'class': '#(family)' },\n\t\t\t\t\t\toverrides: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t\t'class': /^Font(?:Comic|Courier|Times)$/\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Font sizes.\n\t\t\t\t\t */\n\t\t\t\t\tfontSize_sizes: 'Smaller/FontSmaller;Larger/FontLarger;8pt/FontSmall;14pt/FontBig;Double Size/FontDouble',\n\t\t\t\t\tfontSize_style: {\n\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\tattributes: { 'class': '#(size)' },\n\t\t\t\t\t\toverrides: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t\t'class': /^Font(?:Smaller|Larger|Small|Big|Double)$/\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t} ,\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Font colors.\n\t\t\t\t\t */\n\t\t\t\t\tcolorButton_enableMore: false,\n\n\t\t\t\t\tcolorButton_colors: 'FontColor1/FF9900,FontColor2/0066CC,FontColor3/F00',\n\t\t\t\t\tcolorButton_foreStyle: {\n\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\tattributes: { 'class': '#(color)' },\n\t\t\t\t\t\toverrides: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t\t'class': /^FontColor(?:1|2|3)$/\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\n\t\t\t\t\tcolorButton_backStyle: {\n\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\tattributes: { 'class': '#(color)BG' },\n\t\t\t\t\t\toverrides: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t\t'class': /^FontColor(?:1|2|3)BG$/\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Indentation.\n\t\t\t\t\t */\n\t\t\t\t\tindentClasses: [ 'Indent1', 'Indent2', 'Indent3' ],\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Paragraph justification.\n\t\t\t\t\t */\n\t\t\t\t\tjustifyClasses: [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyFull' ],\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Styles combo.\n\t\t\t\t\t */\n\t\t\t\t\tstylesSet: [\n\t\t\t\t\t\t{ name: 'Strong Emphasis', element: 'strong' },\n\t\t\t\t\t\t{ name: 'Emphasis', element: 'em' },\n\n\t\t\t\t\t\t{ name: 'Computer Code', element: 'code' },\n\t\t\t\t\t\t{ name: 'Keyboard Phrase', element: 'kbd' },\n\t\t\t\t\t\t{ name: 'Sample Text', element: 'samp' },\n\t\t\t\t\t\t{ name: 'Variable', element: 'var' },\n\n\t\t\t\t\t\t{ name: 'Deleted Text', element: 'del' },\n\t\t\t\t\t\t{ name: 'Inserted Text', element: 'ins' },\n\n\t\t\t\t\t\t{ name: 'Cited Work', element: 'cite' },\n\t\t\t\t\t\t{ name: 'Inline Quotation', element: 'q' }\n\t\t\t\t\t]\n\t\t\t\t});\n\n\t\t\t</script>\n\t\t</p>\n\t\t<p>\n\t\t\t<input type=\"submit\" value=\"Submit\">\n\t\t</p>\n\t</form>\n\t<div id=\"footer\">\n\t\t<hr>\n\t\t<p>\n\t\t\tCKEditor - The text editor for the Internet - <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t\t</p>\n\t\t<p id=\"copy\">\n\t\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> - Frederico\n\t\t\tKnabben. All rights reserved.\n\t\t</p>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/css/fontello.css",
    "content": "@font-face {\n  font-family: 'fontello';\n  src: url('../font/fontello.eot?89024372');\n  src: url('../font/fontello.eot?89024372#iefix') format('embedded-opentype'),\n       url('../font/fontello.woff?89024372') format('woff'),\n       url('../font/fontello.ttf?89024372') format('truetype'),\n       url('../font/fontello.svg?89024372#fontello') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */\n/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */\n/*\n@media screen and (-webkit-min-device-pixel-ratio:0) {\n  @font-face {\n    font-family: 'fontello';\n    src: url('../font/fontello.svg?89024372#fontello') format('svg');\n  }\n}\n*/\n\n [class^=\"icon-\"]:before, [class*=\" icon-\"]:before {\n  font-family: \"fontello\";\n  font-style: normal;\n  font-weight: normal;\n  speak: none;\n\n  display: inline-block;\n  text-decoration: inherit;\n  width: 1em;\n  margin-right: .2em;\n  text-align: center;\n  /* opacity: .8; */\n\n  /* For safety - reset parent styles, that can break glyph codes*/\n  font-variant: normal;\n  text-transform: none;\n\n  /* fix buttons height, for twitter bootstrap */\n  line-height: 1em;\n\n  /* Animation center compensation - margins should be symmetric */\n  /* remove if not needed */\n  margin-left: .2em;\n\n  /* you can be more comfortable with increased icons size */\n  /* font-size: 120%; */\n\n  /* Uncomment for 3D effect */\n  /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */\n}\n\n.icon-trash:before { content: '\\e802'; } /* '' */\n.icon-down-big:before { content: '\\e800'; } /* '' */\n.icon-up-big:before { content: '\\e801'; } /* '' */\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/font/LICENSE.txt",
    "content": "Font license info\n\n\n## Font Awesome\n\n   Copyright (C) 2012 by Dave Gandy\n\n   Author:    Dave Gandy\n   License:   SIL ()\n   Homepage:  http://fortawesome.github.com/Font-Awesome/\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/font/config.json",
    "content": "{\n  \"name\": \"\",\n  \"css_prefix_text\": \"icon-\",\n  \"css_use_suffix\": false,\n  \"hinting\": true,\n  \"units_per_em\": 1000,\n  \"ascent\": 850,\n  \"glyphs\": [\n    {\n      \"uid\": \"f48ae54adfb27d8ada53d0fd9e34ee10\",\n      \"css\": \"trash-empty\",\n      \"code\": 59392,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"1c4068ed75209e21af36017df8871802\",\n      \"css\": \"down-big\",\n      \"code\": 59393,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"95376bf082bfec6ce06ea1cda7bd7ead\",\n      \"css\": \"up-big\",\n      \"code\": 59394,\n      \"src\": \"fontawesome\"\n    }\n  ]\n}"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/index.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n-->\n<!--[if IE 8]><html class=\"ie8\"><![endif]-->\n<!--[if gt IE 8]><html><![endif]-->\n<!--[if !IE]><!--><html><!--<![endif]-->\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Toolbar Configurator</title>\n\t<script src=\"../../ckeditor.js\"></script>\n\t<script>\n\t\tif ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 )\n\t\t\tCKEDITOR.tools.enableHtml5Elements( document );\n\t</script>\n\t<link rel=\"stylesheet\" href=\"lib/codemirror/codemirror.css\">\n\t<link rel=\"stylesheet\" href=\"lib/codemirror/show-hint.css\">\n\t<link rel=\"stylesheet\" href=\"lib/codemirror/neo.css\">\n\t<link rel=\"stylesheet\" href=\"css/fontello.css\">\n\t<link rel=\"stylesheet\" href=\"../css/samples.css\">\n</head>\n<body id=\"toolbar\">\n\n<nav class=\"navigation-a\">\n\t<div class=\"grid-container\">\n\t\t<ul class=\"navigation-a-left grid-width-70\">\n\t\t\t<li><a href=\"http://ckeditor.com\">Project Homepage</a></li>\n\t\t\t<li><a href=\"http://dev.ckeditor.com/\">I found a bug</a></li>\n\t\t\t<li><a href=\"http://github.com/ckeditor/ckeditor-dev\" class=\"icon-pos-right icon-navigation-a-github\">Fork CKEditor on GitHub</a></li>\n\t\t</ul>\n\t\t<ul class=\"navigation-a-right grid-width-30\">\n\t\t\t<li><a href=\"http://ckeditor.com/blog-list\">CKEditor Blog</a></li>\n\t\t</ul>\n\t</div>\n</nav>\n\n<header class=\"header-a\">\n\t<div class=\"grid-container\">\n\t\t<h1 class=\"header-a-logo grid-width-30\">\n\t\t\t<a href=\"../index.html\"><img src=\"../img/logo.png\" alt=\"CKEditor Logo\"></a>\n\t\t</h1>\n\t\t<nav class=\"navigation-b grid-width-70\">\n\t\t\t<ul>\n\t\t\t\t<li><a href=\"../index.html\"  class=\"button-a\">Start</a></li>\n\t\t\t\t<li><a href=\"index.html\"  class=\"button-a button-a-background\">Toolbar configurator</a></li>\n\t\t\t</ul>\n\t\t</nav>\n\t</div>\n</header>\n\n<main>\n\t<div class=\"adjoined-top\">\n\t\t<div class=\"grid-container\">\n\t\t\t<div class=\"content grid-width-100\">\n\t\t\t\t<div class=\"grid-container-nested\">\n\t\t\t\t\t<h1 class=\"grid-width-60\">\n\t\t\t\t\t\tToolbar Configurator\n\t\t\t\t\t\t<a href=\"#help-content\" type=\"button\" title=\"Configurator help\" id=\"help\" class=\"button-a button-a-background button-a-no-text icon-pos-left icon-question-mark\">Help</a>\n\t\t\t\t\t</h1>\n\n\t\t\t\t\t<div class=\"grid-width-40 grid-switch-magic\">\n\t\t\t\t\t\t<div class=\"switch\">\n\t\t\t\t\t\t\t<span class=\"balloon-a balloon-a-se\">Select configurator type</span>\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"radio\" data-num=\"1\" id=\"radio-basic\" />\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"radio\" data-num=\"2\" id=\"radio-advanced\" />\n\t\t\t\t\t\t\t<label data-for=\"1\" for=\"radio-basic\">Basic</label>\n\t\t\t\t\t\t\t<span class=\"switch-inner\">\n\t\t\t\t\t\t\t\t<span class=\"handler\"></span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<label data-for=\"2\" for=\"radio-advanced\">Advanced</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"adjoined-bottom\">\n\t\t<div class=\"grid-container\">\n\t\t\t<div class=\"grid-width-100\">\n\t\t\t\t<div class=\"editors-container\">\n\t\t\t\t\t<div id=\"editor-basic\"></div>\n\t\t\t\t\t<div id=\"editor-advanced\"></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"grid-container configurator\">\n\t\t<div class=\"content grid-width-100\">\n\t\t\t<div class=\"configurator\">\n\t\t\t\t<div>\n\t\t\t\t\t<div id=\"toolbarModifierWrapper\"></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div id=\"help-content\">\n\t\t<div class=\"grid-container\">\n\t\t\t<div class=\"grid-width-100\">\n\t\t\t\t<h2>What Am I Doing Here?</h2>\n\n\t\t\t\t<div class=\"grid-container grid-container-nested\">\n\t\t\t\t\t<div class=\"basic\">\n\t\t\t\t\t\t<div class=\"grid-width-50\">\n\t\t\t\t\t\t\t<p>Arrange <a href=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbarGroups\">toolbar groups</a>, toggle <a href=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-removeButtons\">button visibility</a> according to your needs and get your toolbar configuration.</p>\n\t\t\t\t\t\t\t<p>You can replace the content of the <a href=\"../../config.js\"><code>config.js</code></a> file with the generated configuration. If you already set some configuration options you will need to merge both configurations.</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"grid-width-50\">\n\t\t\t\t\t\t\t<p>Read more about different ways of <a href=\"http://docs.ckeditor.com/#!/guide/dev_configuration\">setting configuration</a> and do not forget about <strong>clearing browser cache</strong>.</p>\n\t\t\t\t\t\t\t<p>Arranging toolbar groups is the recommended way of configuring the toolbar, but if you need more freedom you can use the <a href=\"#advanced\">advanced configurator</a>.</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"advanced\" style=\"display: none;\">\n\t\t\t\t\t\t<div class=\"grid-width-50\">\n\t\t\t\t\t\t\t<p>With this code editor you can edit your <a href=\"http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbar\">toolbar configuration</a> live.</p>\n\t\t\t\t\t\t\t<p>You can replace the content of the <a href=\"../../config.js\"><code>config.js</code></a> file with the generated configuration. If you already set some configuration options you will need to merge both configurations.</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"grid-width-50\">\n\t\t\t\t\t\t\t<p>Read more about different ways of <a href=\"http://docs.ckeditor.com/#!/guide/dev_configuration\">setting configuration</a> and do not forget about <strong>clearing browser cache</strong>.</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<p class=\"grid-container grid-container-nested\">\n\t\t\t\t\t<button type=\"button\" class=\"help-content-close grid-width-100 button-a button-a-background\">Got it. Let's play!</button>\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</main>\n\n<footer class=\"footer-a grid-container\">\n\t<p class=\"grid-width-100\">\n\t\tCKEditor &ndash; The text editor for the Internet &ndash; <a class=\"samples\" href=\"http://ckeditor.com/\">http://ckeditor.com</a>\n\t</p>\n\t<p class=\"grid-width-100\" id=\"copy\">\n\t\tCopyright &copy; 2003-2016, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> &ndash; Frederico Knabben. All rights reserved.\n\t</p>\n</footer>\n\n<script src=\"lib/codemirror/codemirror.js\"></script>\n<script src=\"lib/codemirror/javascript.js\"></script>\n<script src=\"lib/codemirror/show-hint.js\"></script>\n\n<script src=\"js/fulltoolbareditor.js\"></script>\n<script src=\"js/abstracttoolbarmodifier.js\"></script>\n<script src=\"js/toolbarmodifier.js\"></script>\n<script src=\"js/toolbartextmodifier.js\"></script>\n<script src=\"../js/sf.js\"></script>\n\n<script>\n\t( function() {\n\t\t'use strict';\n\n\t\tvar mode = ( window.location.hash.substr( 1 ) === 'advanced' ) ? 'advanced' : 'basic',\n\t\t\tconfiguratorSection = CKEDITOR.document.findOne( 'main > .grid-container.configurator' ),\n\t\t\tbasicInstruction = CKEDITOR.document.findOne( '#help-content .basic' ),\n\t\t\tadvancedInstruction = CKEDITOR.document.findOne( '#help-content .advanced' ),\n\n\t\t\t// Configurator mode switcher.\n\t\t\tmodeSwitchBasic = CKEDITOR.document.getById( 'radio-basic' ),\n\t\t\tmodeSwitchAdvanced = CKEDITOR.document.getById( 'radio-advanced' );\n\n\t\t// Initial setup\n\t\tfunction updateSwitcher() {\n\t\t\tif ( mode === 'advanced' ) {\n\t\t\t\tmodeSwitchAdvanced.$.checked = true;\n\t\t\t} else {\n\t\t\t\tmodeSwitchBasic.$.checked = true;\n\t\t\t}\n\t\t}\n\n\t\tupdateSwitcher();\n\n\t\tCKEDITOR.document.getWindow().on( 'hashchange', function( e ) {\n\t\t\tvar hash = window.location.hash.substr( 1 );\n\t\t\tif ( !( hash === 'advanced' || hash === 'basic' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmode = hash;\n\t\t\tonToolbarsDone( mode );\n\t\t} );\n\n\t\tCKEDITOR.document.getWindow().on( 'resize', function() {\n\t\t\tupdateToolbar( ( mode === 'basic' ? toolbarModifier : toolbarTextModifier )[ 'editorInstance' ] );\n\t\t} );\n\n\t\tfunction onRefresh( modifier ) {\n\t\t\tmodifier = modifier || this;\n\n\t\t\tif ( mode === 'basic' && modifier instanceof ToolbarConfigurator.ToolbarTextModifier ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// CodeMirror container becomes visible, so we need to refresh and to avoid rendering problems.\n\t\t\tif ( mode === 'advanced' && modifier instanceof ToolbarConfigurator.ToolbarTextModifier ) {\n\t\t\t\tmodifier.codeContainer.refresh();\n\t\t\t}\n\n\t\t\tupdateToolbar( modifier.editorInstance );\n\t\t}\n\n\t\tfunction updateToolbar( editor ) {\n\t\t\tvar editorContainer = editor.container;\n\n\t\t\t// Not always editor is loaded.\n\t\t\tif ( !editorContainer ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar displayStyle = editorContainer.getStyle( 'display' );\n\n\t\t\teditorContainer.setStyle( 'display', 'block' );\n\n\t\t\tvar newHeight = editorContainer.getSize( 'height' );\n\n\t\t\tvar newMarginTop = parseInt( editorContainer.getComputedStyle( 'margin-top' ), 10 );\n\t\t\tnewMarginTop = ( isNaN( newMarginTop ) ? 0 : Number( newMarginTop ) );\n\n\t\t\tvar newMarginBottom = parseInt( editorContainer.getComputedStyle( 'margin-bottom' ), 10 );\n\t\t\tnewMarginBottom = ( isNaN( newMarginBottom ) ? 0 : Number( newMarginBottom ) );\n\n\t\t\tvar result = newHeight + newMarginTop + newMarginBottom;\n\n\t\t\teditorContainer.setStyle( 'display', displayStyle );\n\n\t\t\teditor.container.getAscendant( 'div' ).setStyle( 'height', result + 'px' );\n\t\t}\n\n\t\tvar toolbarModifier = new ToolbarConfigurator.ToolbarModifier( 'editor-basic' );\n\n\t\tvar done = 0;\n\t\ttoolbarModifier.init( onToolbarInit );\n\t\ttoolbarModifier.onRefresh = onRefresh;\n\n\t\tCKEDITOR.document.getById( 'toolbarModifierWrapper' ).append( toolbarModifier.mainContainer );\n\n\t\tvar toolbarTextModifier = new ToolbarConfigurator.ToolbarTextModifier( 'editor-advanced' );\n\t\ttoolbarTextModifier.init( onToolbarInit );\n\t\ttoolbarTextModifier.onRefresh = onRefresh;\n\n\t\tfunction onToolbarInit() {\n\t\t\tif ( ++done === 2 ) {\n\t\t\t\tonToolbarsDone();\n\n\t\t\t\tpositionSticky.watch( CKEDITOR.document.findOne( '.toolbar' ), function() {\n\t\t\t\t\treturn mode === 'advanced';\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tfunction onToolbarsDone() {\n\t\t\tif ( mode === 'basic' ) {\n\t\t\t\ttoggleModeBasic( false );\n\t\t\t} else {\n\t\t\t\ttoggleModeAdvanced( false );\n\t\t\t}\n\n\t\t\tupdateSwitcher();\n\n\t\t\tsetTimeout( function() {\n\t\t\t\tCKEDITOR.document.findOne( '.editors-container' ).addClass( 'active' );\n\t\t\t\tCKEDITOR.document.findOne( '#toolbarModifierWrapper' ).addClass( 'active' );\n\t\t\t}, 200 );\n\t\t}\n\n\t\tCKEDITOR.document.getById( 'toolbarModifierWrapper' ).append( toolbarTextModifier.mainContainer );\n\n\t\tfunction toogleModeSwitch( onElement, offElement, onModifier, offModifier ) {\n\t\t\tonElement.addClass( 'fancy-button-active' );\n\t\t\toffElement.removeClass( 'fancy-button-active' );\n\n\t\t\tonModifier.showUI();\n\t\t\toffModifier.hideUI();\n\t\t}\n\n\t\tfunction toggleModeBasic( callOnRefresh ) {\n\t\t\tcallOnRefresh = ( callOnRefresh !== false );\n\t\t\tmode = 'basic';\n\t\t\twindow.location.hash = '#basic';\n\t\t\ttoogleModeSwitch( modeSwitchBasic, modeSwitchAdvanced, toolbarModifier, toolbarTextModifier );\n\n\t\t\tconfiguratorSection.removeClass( 'freed-width' );\n\t\t\tbasicInstruction.show();\n\t\t\tadvancedInstruction.hide();\n\n\t\t\tcallOnRefresh && onRefresh( toolbarModifier );\n\t\t}\n\n\t\tfunction toggleModeAdvanced( callOnRefresh ) {\n\t\t\tcallOnRefresh = ( callOnRefresh !== false );\n\t\t\tmode = 'advanced';\n\t\t\twindow.location.hash = '#advanced';\n\t\t\ttoogleModeSwitch( modeSwitchAdvanced, modeSwitchBasic, toolbarTextModifier, toolbarModifier );\n\n\t\t\tconfiguratorSection.addClass( 'freed-width' );\n\t\t\tadvancedInstruction.show();\n\t\t\tbasicInstruction.hide();\n\n\t\t\tcallOnRefresh && onRefresh( toolbarTextModifier );\n\t\t}\n\n\t\tmodeSwitchBasic.on( 'click', toggleModeBasic );\n\t\tmodeSwitchAdvanced.on( 'click', toggleModeAdvanced );\n\n\t\t//\n\t\t// Position:sticky for the toolbar.\n\t\t//\n\n\t\t// Will make elements behave like they were styled with position:sticky.\n\t\tvar positionSticky = {\n\t\t\t// Store object: {\n\t\t\t// \t\telement: CKEDITOR.dom.element, // Element which will float.\n\t\t\t// \t\tplaceholder: CKEDITOR.dom.element, // Placeholder which is place to prevent page bounce.\n\t\t\t// \t\tisFixed: boolean // Whether element float now.\n\t\t\t// }\n\t\t\twatched: [],\n\n\t\t\tactive: [],\n\n\t\t\tstaticContainer: null,\n\n\t\t\tinit: function() {\n\t\t\t\tvar element = CKEDITOR.dom.element.createFromHtml(\n\t\t\t\t\t'<div class=\"staticContainer\">' +\n\t\t\t\t\t\t'<div class=\"grid-container\" >' +\n\t\t\t\t\t\t\t'<div class=\"grid-width-100\">' +\n\t\t\t\t\t\t\t\t'<div class=\"inner\"></div>' +\n\t\t\t\t\t\t\t'</div>' +\n\t\t\t\t\t\t'</div>' +\n\t\t\t\t\t'</div>' );\n\n\t\t\t\tthis.staticContainer = element.findOne( '.inner' );\n\n\t\t\t\tCKEDITOR.document.getBody().append( element );\n\t\t\t},\n\n\t\t\twatch: function( element, preventFunc ) {\n\t\t\t\tthis.watched.push( {\n\t\t\t\t\telement: element,\n\t\t\t\t\tplaceholder: new CKEDITOR.dom.element( 'div' ),\n\t\t\t\t\tisFixed: false,\n\t\t\t\t\tpreventFunc: preventFunc\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\tcheckAll: function() {\n\t\t\t\tfor ( var i = 0; i < this.watched.length; i++ ) {\n\t\t\t\t\tthis.check( this.watched[ i ] );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcheck: function( element ) {\n\t\t\t\tvar isFixed = element.isFixed;\n\t\t\t\tvar shouldBeFixed = this.shouldBeFixed( element );\n\n\t\t\t\t// Nothing to be done.\n\t\t\t\tif ( isFixed === shouldBeFixed ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar placeholder = element.placeholder;\n\n\t\t\t\tif ( isFixed ) {\n\t\t\t\t\t// Unfixing.\n\n\t\t\t\t\telement.element.insertBefore( placeholder );\n\t\t\t\t\tplaceholder.remove();\n\n\t\t\t\t\telement.element.removeStyle( 'margin' );\n\n\t\t\t\t\tthis.active.splice( CKEDITOR.tools.indexOf( this.active, element ), 1 );\n\n\t\t\t\t} else {\n\t\t\t\t\t// Fixing.\n\t\t\t\t\tplaceholder.setStyle( 'width', element.element.getSize( 'width' ) + 'px' );\n\t\t\t\t\tplaceholder.setStyle( 'height', element.element.getSize( 'height' ) + 'px' );\n\t\t\t\t\tplaceholder.setStyle( 'margin-bottom', element.element.getComputedStyle( 'margin-bottom' ) );\n\t\t\t\t\tplaceholder.setStyle( 'display', element.element.getComputedStyle( 'display' ) );\n\t\t\t\t\tplaceholder.insertAfter( element.element );\n\n\t\t\t\t\tthis.staticContainer.append( element.element );\n\n\t\t\t\t\tthis.active.push( element );\n\t\t\t\t}\n\n\t\t\t\telement.isFixed = !element.isFixed;\n\t\t\t},\n\n\t\t\tshouldBeFixed: function( element ) {\n\t\t\t\tif ( element.preventFunc && element.preventFunc() ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// If element is already fixed we are checking it's placeholder.\n\t\t\t\tvar related = ( element.isFixed ? element.placeholder : element.element ),\n\t\t\t\t\tclientRect = related.$.getBoundingClientRect(),\n\t\t\t\t\tstaticHeight = this.staticContainer.getSize('height' ),\n\t\t\t\t\telemHeight = element.element.getSize( 'height' );\n\n\t\t\t\tif ( element.isFixed ) {\n\t\t\t\t\treturn ( clientRect.top + elemHeight < staticHeight );\n\t\t\t\t} else {\n\t\t\t\t\treturn ( clientRect.top < staticHeight );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tpositionSticky.init();\n\n\t\tCKEDITOR.document.getWindow().on( 'scroll',\n\t\t\tnew CKEDITOR.tools.eventsBuffer( 100, positionSticky.checkAll, positionSticky ).input\n\t\t);\n\n\t\t// Make the toolbar sticky.\n\t\tpositionSticky.watch( CKEDITOR.document.findOne( '.editors-container' ) );\n\n\t\t// Help button and help-content.\n\t\t( function() {\n\t\t\tvar helpButton = CKEDITOR.document.getById( 'help' ),\n\t\t\t\thelpContent = CKEDITOR.document.getById( 'help-content' );\n\n\t\t\t// Don't show help button on IE8 because it's unsupported by Pico Modal.\n\t\t\tif ( CKEDITOR.env.ie && CKEDITOR.env.version == 8 ) {\n\t\t\t\thelpButton.hide();\n\t\t\t} else {\n\t\t\t\t// Display help modal when the button is clicked.\n\t\t\t\thelpButton.on( 'click', function( evt ) {\n\t\t\t\t\tSF.modal( {\n\t\t\t\t\t\t// Clone modal content from DOM.\n\t\t\t\t\t\tcontent: helpContent.getHtml(),\n\n\t\t\t\t\t\tafterCreate: function( modal ) {\n\t\t\t\t\t\t\t// Enable modal content button to close the modal.\n\t\t\t\t\t\t\tnew CKEDITOR.dom.element( modal.modalElem() ).findOne( '.help-content-close' ).once( 'click', modal.close );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ).show();\n\t\t\t\t} );\n\t\t\t}\n\t\t} )();\n\t} )();\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/js/abstracttoolbarmodifier.js",
    "content": "﻿\"function\"!=typeof Object.create&&function(){var a=function(){};Object.create=function(b){if(1<arguments.length)throw Error(\"Second argument not supported\");if(null===b)throw Error(\"Cannot set a null [[Prototype]]\");if(\"object\"!=typeof b)throw TypeError(\"Argument must be an object\");a.prototype=b;return new a}}();\nCKEDITOR.plugins.add(\"toolbarconfiguratorarea\",{afterInit:function(a){a.addMode(\"wysiwyg\",function(b){var c=CKEDITOR.dom.element.createFromHtml('\\x3cdiv class\\x3d\"cke_wysiwyg_div cke_reset\" hidefocus\\x3d\"true\"\\x3e\\x3c/div\\x3e');a.ui.space(\"contents\").append(c);c=a.editable(c);c.detach=CKEDITOR.tools.override(c.detach,function(b){return function(){b.apply(this,arguments);this.remove()}});a.setData(a.getData(1),b);a.fire(\"contentDom\")});a.dataProcessor.toHtml=function(b){return b};a.dataProcessor.toDataFormat=\nfunction(b){return b}}});Object.keys||(Object.keys=function(){var a=Object.prototype.hasOwnProperty,b=!{toString:null}.propertyIsEnumerable(\"toString\"),c=\"toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor\".split(\" \"),e=c.length;return function(d){if(\"object\"!==typeof d&&(\"function\"!==typeof d||null===d))throw new TypeError(\"Object.keys called on non-object\");var g=[],f;for(f in d)a.call(d,f)&&g.push(f);if(b)for(f=0;f<e;f++)a.call(d,c[f])&&g.push(c[f]);return g}}());\n(function(){function a(b,c){this.cfg=c||{};this.hidden=!1;this.editorId=b;this.fullToolbarEditor=new ToolbarConfigurator.FullToolbarEditor;this.actualConfig=this.originalConfig=this.mainContainer=null;this.isEditableVisible=this.waitForReady=!1;this.toolbarContainer=null;this.toolbarButtons=[]}ToolbarConfigurator.AbstractToolbarModifier=a;a.prototype.setConfig=function(b){this._onInit(void 0,b,!0)};a.prototype.init=function(b){var c=this;this.mainContainer=new CKEDITOR.dom.element(\"div\");if(null!==\nthis.fullToolbarEditor.editorInstance)throw\"Only one instance of ToolbarModifier is allowed\";this.editorInstance||this._createEditor(!1);this.editorInstance.once(\"loaded\",function(){c.fullToolbarEditor.init(function(){c._onInit(b);if(\"function\"==typeof c.onRefresh)c.onRefresh()},c.editorInstance.config)});return this.mainContainer};a.prototype._onInit=function(b,c){this.originalConfig=this.editorInstance.config;this.actualConfig=c?JSON.parse(c):JSON.parse(JSON.stringify(this.originalConfig));if(!this.actualConfig.toolbarGroups&&\n!this.actualConfig.toolbar){for(var a=this.actualConfig,d=this.editorInstance.toolbar,g=[],f=d.length,k=0;k<f;k++){var h=d[k];\"string\"==typeof h?g.push(h):g.push({name:h.name,groups:h.groups?h.groups.slice():[]})}a.toolbarGroups=g}\"function\"===typeof b&&b(this.mainContainer)};a.prototype._createModifier=function(){this.mainContainer.addClass(\"unselectable\");this.modifyContainer&&this.modifyContainer.remove();this.modifyContainer=new CKEDITOR.dom.element(\"div\");this.modifyContainer.addClass(\"toolbarModifier\");\nthis.mainContainer.append(this.modifyContainer);return this.mainContainer};a.prototype.getEditableArea=function(){return this.editorInstance.container.findOne(\"#\"+this.editorInstance.id+\"_contents\")};a.prototype._hideEditable=function(){var b=this.getEditableArea();this.isEditableVisible=!1;this.lastEditableAreaHeight=b.getStyle(\"height\");b.setStyle(\"height\",\"0\")};a.prototype._showEditable=function(){this.isEditableVisible=!0;this.getEditableArea().setStyle(\"height\",this.lastEditableAreaHeight||\"auto\")};\na.prototype._toggleEditable=function(){this.isEditableVisible?this._hideEditable():this._showEditable()};a.prototype._refreshEditor=function(){function b(){c.editorInstance.destroy();c._createEditor(!0,c.getActualConfig());c.waitForReady=!1}var c=this,a=this.editorInstance.status;this.waitForReady||(\"unloaded\"==a||\"loaded\"==a?(this.waitForReady=!0,this.editorInstance.once(\"instanceReady\",function(){b()},this)):b())};a.prototype._createEditor=function(b,c){function e(){}var d=this;this.editorInstance=\nCKEDITOR.replace(this.editorId);this.editorInstance.on(\"configLoaded\",function(){var b=d.editorInstance.config;c&&CKEDITOR.tools.extend(b,c,!0);a.extendPluginsConfig(b)});this.editorInstance.on(\"uiSpace\",function(b){\"top\"!=b.data.space&&b.stop()},null,null,-999);this.editorInstance.once(\"loaded\",function(){var c=d.editorInstance.ui.instances,a;for(a in c)c[a]&&(c[a].click=e,c[a].onClick=e);d.isEditableVisible||d._hideEditable();d.currentActive&&d.currentActive.name&&d._highlightGroup(d.currentActive.name);\nd.hidden?d.hideUI():d.showUI();if(b&&\"function\"===typeof d.onRefresh)d.onRefresh()})};a.prototype.getActualConfig=function(){return JSON.parse(JSON.stringify(this.actualConfig))};a.prototype._createToolbar=function(){if(this.toolbarButtons.length){this.toolbarContainer=new CKEDITOR.dom.element(\"div\");this.toolbarContainer.addClass(\"toolbar\");for(var b=this.toolbarButtons.length,c=0;c<b;c+=1)this._createToolbarBtn(this.toolbarButtons[c])}};a.prototype._createToolbarBtn=function(b){var c=ToolbarConfigurator.FullToolbarEditor.createButton(\"string\"===\ntypeof b.text?b.text:b.text.inactive,b.cssClass);this.toolbarContainer.append(c);c.data(\"group\",b.group);c.addClass(b.position);c.on(\"click\",function(){b.clickCallback.call(this,c,b)},this);return c};a.prototype._fixGroups=function(b){b=b.toolbarGroups||[];for(var c=b.length,a=0;a<c;a+=1){var d=b[a];\"/\"==d?(d=b[a]={},d.type=\"separator\",d.name=\"separator\"+CKEDITOR.tools.getNextNumber()):(d.groups=d.groups||[],-1==CKEDITOR.tools.indexOf(d.groups,d.name)&&(this.editorInstance.ui.addToolbarGroup(d.name,\nd.groups[d.groups.length-1],d.name),d.groups.push(d.name)),this._fixSubgroups(d))}};a.prototype._fixSubgroups=function(b){b=b.groups;for(var c=b.length,a=0;a<c;a+=1){var d=b[a];b[a]={name:d,totalBtns:ToolbarConfigurator.ToolbarModifier.getTotalSubGroupButtonsNumber(d,this.fullToolbarEditor)}}};a.stringifyJSONintoOneLine=function(b,a){a=a||{};var e=JSON.stringify(b,null,\"\"),e=e.replace(/\\n/g,\"\");a.addSpaces&&(e=e.replace(/(\\{|:|,|\\[|\\])/g,function(a){return a+\" \"}),e=e.replace(/(\\])/g,function(a){return\" \"+\na}));a.noQuotesOnKey&&(e=e.replace(/\"(\\w*)\":/g,function(a,b){return b+\":\"}));a.singleQuotes&&(e=e.replace(/\\\"/g,\"'\"));return e};a.prototype.hideUI=function(){this.hidden=!0;this.mainContainer.hide();this.editorInstance.container&&this.editorInstance.container.hide()};a.prototype.showUI=function(){this.hidden=!1;this.mainContainer.show();this.editorInstance.container&&this.editorInstance.container.show()};a.extendPluginsConfig=function(a){var c=a.extraPlugins;a.extraPlugins=(c?c+\",\":\"\")+\"toolbarconfiguratorarea\"}})();"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/js/fulltoolbareditor.js",
    "content": "﻿window.ToolbarConfigurator={};\n(function(){function e(){this.instanceid=\"fte\"+CKEDITOR.tools.getNextId();this.textarea=new CKEDITOR.dom.element(\"textarea\");this.textarea.setAttributes({id:this.instanceid,name:this.instanceid,contentEditable:!0});this.editorInstance=this.buttons=null}ToolbarConfigurator.FullToolbarEditor=e;e.prototype.init=function(b){var a=this;document.body.appendChild(this.textarea.$);CKEDITOR.replace(this.instanceid);this.editorInstance=CKEDITOR.instances[this.instanceid];this.editorInstance.once(\"configLoaded\",function(d){var c=\nd.editor.config;delete c.removeButtons;delete c.toolbarGroups;delete c.toolbar;ToolbarConfigurator.AbstractToolbarModifier.extendPluginsConfig(c);d.editor.once(\"loaded\",function(){a.buttons=e.toolbarToButtons(a.editorInstance.toolbar);a.buttonsByGroup=e.groupButtons(a.buttons);a.buttonNamesByGroup=a.groupButtonNamesByGroup(a.buttons);d.editor.container.hide();\"function\"===typeof b&&b(a.buttons)})})};e.prototype.groupButtonNamesByGroup=function(b){var a=this;b=e.groupButtons(b);for(var d in b)b[d]=\ne.map(b[d],function(b){return a.getCamelCasedButtonName(b.name)});return b};e.prototype.getGroupByName=function(b){for(var a=this.editorInstance.config.toolbarGroups||this.getFullToolbarGroupsConfig(),d=a.length,c=0;c<d;c+=1)if(a[c].name===b)return a[c];return null};e.prototype.getCamelCasedButtonName=function(b){var a=this.editorInstance.ui.items,d;for(d in a)if(a[d].name==b)return d;return null};e.prototype.getFullToolbarGroupsConfig=function(b){b=!0===b?!0:!1;for(var a=[],d=this.editorInstance.toolbar,\nc=d.length,f=0;f<c;f+=1){var e=d[f],g={};\"string\"!=typeof e.name?b&&a.push(\"/\"):(g.name=e.name,e.groups&&(g.groups=Array.prototype.slice.call(e.groups)),a.push(g))}return a};e.filter=function(b,a){for(var d=b&&b.length?b.length:0,c=[],f=0;f<d;f+=1)a(b[f])&&c.push(b[f]);return c};e.map=function(b,a){var d;if(CKEDITOR.tools.isArray(b)){d=[];for(var c=b.length,f=0;f<c;f+=1)d.push(a(b[f]))}else for(c in d={},b)d[c]=a(b[c]);return d};e.groupButtons=function(b){for(var a={},d=b.length,c=0;c<d;c+=1){var f=\nb[c],e=f.toolbar.split(\",\")[0];a[e]=a[e]||[];a[e].push(f)}return a};e.toolbarToButtons=function(b){for(var a=[],d=b.length,c=0;c<d;c+=1)\"object\"==typeof b[c]&&(a=a.concat(e.groupToButtons(b[c])));return a};e.createToolbarButton=function(b){var a=new CKEDITOR.dom.element(\"a\"),d=e.createIcon(b.name,b.icon,b.command);a.setStyle(\"float\",\"none\");a.addClass(\"cke_\"+(\"rtl\"==CKEDITOR.lang.dir?\"rtl\":\"ltr\"));if(b instanceof CKEDITOR.ui.button)a.addClass(\"cke_button\"),a.addClass(\"cke_toolgroup\"),a.append(d);\nelse if(CKEDITOR.ui.richCombo&&b instanceof CKEDITOR.ui.richCombo){var d=new CKEDITOR.dom.element(\"span\"),c=new CKEDITOR.dom.element(\"span\"),f=new CKEDITOR.dom.element(\"span\");a.addClass(\"cke_combo_button\");d.addClass(\"cke_combo_text\");d.addClass(\"cke_combo_inlinelabel\");d.setText(b.label);c.addClass(\"cke_combo_open\");f.addClass(\"cke_combo_arrow\");c.append(f);a.append(d);a.append(c)}return a};e.createIcon=function(b,a,d){var c=CKEDITOR.skin.getIconStyle(b,\"rtl\"==CKEDITOR.lang.dir),c=(c=c||CKEDITOR.skin.getIconStyle(a,\n\"rtl\"==CKEDITOR.lang.dir))||CKEDITOR.skin.getIconStyle(d,\"rtl\"==CKEDITOR.lang.dir);a=new CKEDITOR.dom.element(\"span\");a.addClass(\"cke_button_icon\");a.addClass(\"cke_button__\"+b+\"_icon\");a.setAttribute(\"style\",c);a.setStyle(\"float\",\"none\");return a};e.createButton=function(b,a){var d=new CKEDITOR.dom.element(\"button\");d.addClass(\"button-a\");d.setAttribute(\"type\",\"button\");if(\"string\"==typeof a){a=a.split(\" \");for(var c=a.length;c--;)d.addClass(a[c])}d.setHtml(b);return d};e.groupToButtons=function(b){for(var a=\n[],d=(b=b.items)?b.length:0,c=0;c<d;c+=1){var f=b[c];if(f instanceof CKEDITOR.ui.button||CKEDITOR.ui.richCombo&&f instanceof CKEDITOR.ui.richCombo)f.$=e.createToolbarButton(f),a.push(f)}return a}})();"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/js/toolbarmodifier.js",
    "content": "﻿(function(){function d(a,b){l.call(this,a,b);this.actualConfig=this.originalConfig=this.removedButtons=null;this.emptyVisible=!1;this.state=\"edit\";this.toolbarButtons=[{text:{active:\"Hide empty toolbar groups\",inactive:\"Show empty toolbar groups\"},group:\"edit\",position:\"left\",cssClass:\"button-a-soft\",clickCallback:function(a,b){a[a.hasClass(\"button-a-background\")?\"removeClass\":\"addClass\"](\"button-a-background\");this._toggleVisibilityEmptyElements();this.emptyVisible?a.setText(b.text.active):a.setText(b.text.inactive)}},\n{text:\"Add row separator\",group:\"edit\",position:\"left\",cssClass:\"button-a-soft\",clickCallback:function(){this._addSeparator()}},{text:\"Select config\",group:\"config\",position:\"left\",cssClass:\"button-a-soft\",clickCallback:function(){this.configContainer.findOne(\"textarea\").$.select()}},{text:\"Back to configurator\",group:\"config\",position:\"right\",cssClass:\"button-a-background\",clickCallback:function(){if(\"paste\"===this.state){var a=this.configContainer.findOne(\"textarea\").getValue();(a=d.evaluateToolbarGroupsConfig(a))?\nthis.setConfig(a):alert(\"Your pasted config is wrong.\")}this.state=\"edit\";this._showConfigurationTool();this.showToolbarBtnsByGroupName(this.state)}},{text:'Get toolbar \\x3cspan class\\x3d\"highlight\"\\x3econfig\\x3c/span\\x3e',group:\"edit\",position:\"right\",cssClass:\"button-a-background icon-pos-left icon-download\",clickCallback:function(){this.state=\"config\";this._showConfig();this.showToolbarBtnsByGroupName(this.state)}}];this.cachedActiveElement=null}var l=ToolbarConfigurator.AbstractToolbarModifier;\nToolbarConfigurator.ToolbarModifier=d;d.prototype=Object.create(ToolbarConfigurator.AbstractToolbarModifier.prototype);d.prototype.getActualConfig=function(){var a=l.prototype.getActualConfig.call(this);if(a.toolbarGroups)for(var b=a.toolbarGroups.length,c=0;c<b;c+=1)a.toolbarGroups[c]=d.parseGroupToConfigValue(a.toolbarGroups[c]);return a};d.prototype._onInit=function(a,b,c){c=!0===c;l.prototype._onInit.call(this,void 0,b);this.removedButtons=[];c?this.removedButtons=this.actualConfig.removeButtons?\nthis.actualConfig.removeButtons.split(\",\"):[]:\"removeButtons\"in this.originalConfig?this.removedButtons=this.originalConfig.removeButtons?this.originalConfig.removeButtons.split(\",\"):[]:(this.originalConfig.removeButtons=\"\",this.removedButtons=[]);this.actualConfig.toolbarGroups||(this.actualConfig.toolbarGroups=this.fullToolbarEditor.getFullToolbarGroupsConfig());this._fixGroups(this.actualConfig);this._calculateTotalBtns();this._createModifier();this._refreshMoveBtnsAvalibility();this._refreshBtnTabIndexes();\n\"function\"===typeof a&&a(this.mainContainer)};d.prototype._showConfigurationTool=function(){this.configContainer.addClass(\"hidden\");this.modifyContainer.removeClass(\"hidden\")};d.prototype._showConfig=function(){var a=this.getActualConfig(),b,c;if(a.toolbarGroups){b=a.toolbarGroups;for(var e=this.cfg.trimEmptyGroups,f=[],g=b.length,m=0;m<g;m++){var h=b[m];if(\"/\"===h)f.push(\"'/'\");else{if(e)for(var k=h.groups.length;k--;)0===d.getTotalSubGroupButtonsNumber(h.groups[k],this.fullToolbarEditor)&&h.groups.splice(k,\n1);e&&0===h.groups.length||f.push(l.stringifyJSONintoOneLine(h,{addSpaces:!0,noQuotesOnKey:!0,singleQuotes:!0}))}}b=\"\\n\\t\\t\"+f.join(\",\\n\\t\\t\")}a.removeButtons&&(c=a.removeButtons);a=['\\x3ctextarea class\\x3d\"configCode\" readonly\\x3eCKEDITOR.editorConfig \\x3d function( config ) {\\n',b?\"\\tconfig.toolbarGroups \\x3d [\"+b+\"\\n\\t];\":\"\",c?\"\\n\\n\":\"\",c?\"\\tconfig.removeButtons \\x3d '\"+c+\"';\":\"\",\"\\n};\\x3c/textarea\\x3e\"].join(\"\");this.modifyContainer.addClass(\"hidden\");this.configContainer.removeClass(\"hidden\");\nthis.configContainer.setHtml(a)};d.prototype._toggleVisibilityEmptyElements=function(){this.modifyContainer.hasClass(\"empty-visible\")?(this.modifyContainer.removeClass(\"empty-visible\"),this.emptyVisible=!1):(this.modifyContainer.addClass(\"empty-visible\"),this.emptyVisible=!0);this._refreshMoveBtnsAvalibility()};d.prototype._createModifier=function(){function a(){b._highlightGroup(this.data(\"name\"))}var b=this;l.prototype._createModifier.call(this);this.modifyContainer.setHtml(this._toolbarConfigToListString());\nvar c=this.modifyContainer.find('li[data-type\\x3d\"group\"]');this.modifyContainer.on(\"mouseleave\",function(){this._dehighlightActiveToolGroup()},this);for(var e=c.count(),f=0;f<e;f+=1)c.getItem(f).on(\"mouseenter\",a);CKEDITOR.document.on(\"keypress\",function(a){a=a.data.$.keyCode;a=32===a||13===a;var c=new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);c.getAscendant(function(a){return a.$===b.mainContainer.$})&&a&&\"button\"===c.data(\"type\")&&c.findOne(\"input\").$.click()});this.modifyContainer.on(\"click\",\nfunction(a){var c=a.data.$,e=new CKEDITOR.dom.element(c.target||c.srcElement);if(a=d.getGroupOrSeparatorLiAncestor(e)){b.cachedActiveElement=document.activeElement;if(e.$ instanceof HTMLInputElement)b._handleCheckboxClicked(e);else if(e.$ instanceof HTMLButtonElement&&(c.preventDefault?c.preventDefault():c.returnValue=!1,(c=b._handleAnchorClicked(e.$))&&\"remove\"==c.action))return;c=a.data(\"type\");a=a.data(\"name\");b._setActiveElement(c,a);b.cachedActiveElement&&b.cachedActiveElement.focus()}});this.toolbarContainer||\n(this._createToolbar(),this.toolbarContainer.insertBefore(this.mainContainer.getChildren().getItem(0)));this.showToolbarBtnsByGroupName(\"edit\");this.configContainer||(this.configContainer=new CKEDITOR.dom.element(\"div\"),this.configContainer.addClass(\"configContainer\"),this.configContainer.addClass(\"hidden\"),this.mainContainer.append(this.configContainer));return this.mainContainer};d.prototype.showToolbarBtnsByGroupName=function(a){if(this.toolbarContainer)for(var b=this.toolbarContainer.find(\"button\"),\nc=b.count(),e=0;e<c;e+=1){var d=b.getItem(e);d.data(\"group\")==a?d.removeClass(\"hidden\"):d.addClass(\"hidden\")}};d.parseGroupToConfigValue=function(a){if(\"separator\"==a.type)return\"/\";var b=a.groups,c=b.length;delete a.totalBtns;for(var e=0;e<c;e+=1)b[e]=b[e].name;return a};d.getGroupOrSeparatorLiAncestor=function(a){return a.$ instanceof HTMLLIElement&&\"group\"==a.data(\"type\")?a:d.getFirstAncestor(a,function(a){a=a.data(\"type\");return\"group\"==a||\"separator\"==a})};d.prototype._setActiveElement=function(a,\nb){this.currentActive&&this.currentActive.elem.removeClass(\"active\");if(null===a)this._dehighlightActiveToolGroup(),this.currentActive=null;else{var c=this.mainContainer.findOne('ul[data-type\\x3dtable-body] li[data-type\\x3d\"'+a+'\"][data-name\\x3d\"'+b+'\"]');c.addClass(\"active\");this.currentActive={type:a,name:b,elem:c};\"group\"==a&&this._highlightGroup(b);\"separator\"==a&&this._dehighlightActiveToolGroup()}};d.prototype.getActiveToolGroup=function(){return this.editorInstance.container?this.editorInstance.container.findOne(\".cke_toolgroup.active, .cke_toolbar.active\"):\nnull};d.prototype._dehighlightActiveToolGroup=function(){var a=this.getActiveToolGroup();a&&a.removeClass(\"active\");this.editorInstance.container&&this.editorInstance.container.removeClass(\"some-toolbar-active\")};d.prototype._highlightGroup=function(a){this.editorInstance.container&&(a=this.getFirstEnabledButtonInGroup(a),a=this.editorInstance.container.findOne(\".cke_button__\"+a+\", .cke_combo__\"+a),this._dehighlightActiveToolGroup(),this.editorInstance.container&&this.editorInstance.container.addClass(\"some-toolbar-active\"),\na&&(a=d.getFirstAncestor(a,function(a){return a.hasClass(\"cke_toolbar\")}))&&a.addClass(\"active\"))};d.prototype.getFirstEnabledButtonInGroup=function(a){var b=this.actualConfig.toolbarGroups;a=this.getGroupIndex(a);b=b[a];if(-1===a)return null;a=b.groups?b.groups.length:0;for(var c=0;c<a;c+=1){var e=this.getFirstEnabledButtonInSubgroup(b.groups[c].name);if(e)return e}return null};d.prototype.getFirstEnabledButtonInSubgroup=function(a){for(var b=(a=this.fullToolbarEditor.buttonsByGroup[a])?a.length:\n0,c=0;c<b;c+=1){var e=a[c].name;if(!this.isButtonRemoved(e))return e}return null};d.prototype._handleCheckboxClicked=function(a){var b=a.getAscendant(\"li\").data(\"name\");a.$.checked?this._removeButtonFromRemoved(b):this._addButtonToRemoved(b)};d.prototype._handleAnchorClicked=function(a){a=new CKEDITOR.dom.element(a);var b=a.getAscendant(\"li\"),c=b.getAscendant(\"ul\"),e=b.data(\"type\"),d=b.data(\"name\"),g=a.data(\"direction\"),m=\"up\"===g?b.getPrevious():b.getNext(),h;if(a.hasClass(\"disabled\"))return null;\nif(a.hasClass(\"remove\"))return b.remove(),this._removeSeparator(b.data(\"name\")),this._setActiveElement(null),{action:\"remove\"};if(!a.hasClass(\"move\")||!m)return{action:null};if(\"group\"===e||\"separator\"===e)h=this._moveGroup(g,d);\"subgroup\"===e&&(h=b.getAscendant(\"li\").data(\"name\"),h=this._moveSubgroup(g,h,d));\"up\"===g&&b.insertBefore(c.getChild(h));\"down\"===g&&b.insertAfter(c.getChild(h));for(var k;b=\"up\"===g?b.getPrevious():b.getNext();)if(this.emptyVisible||!b.hasClass(\"empty\")){k=b;break}k||(k=\n'[data-direction\\x3d\"'+(\"up\"===g?\"down\":\"up\")+'\"]',this.cachedActiveElement=a.getParent().findOne(k));this._refreshMoveBtnsAvalibility();this._refreshBtnTabIndexes();return{action:\"move\"}};d.prototype._refreshMoveBtnsAvalibility=function(){function a(a){var c=a.count();for(d=0;d<c;d+=1)b._disableElementsInList(a.getItem(d))}for(var b=this,c=this.mainContainer.find(\"ul[data-type\\x3dtable-body] li \\x3e p \\x3e span \\x3e button.move.disabled\"),e=c.count(),d=0;d<e;d+=1)c.getItem(d).removeClass(\"disabled\");\na(this.mainContainer.find(\"ul[data-type\\x3dtable-body]\"));a(this.mainContainer.find(\"ul[data-type\\x3dtable-body] \\x3e li \\x3e ul\"))};d.prototype._refreshBtnTabIndexes=function(){for(var a=this.mainContainer.find('[data-tab\\x3d\"true\"]'),b=a.count(),c=0;c<b;c++){var e=a.getItem(c),d=e.hasClass(\"disabled\");e.setAttribute(\"tabindex\",d?-1:c)}};d.prototype._disableElementsInList=function(a){function b(a){return!a.hasClass(\"empty\")}if(a.getChildren().count()){var c;this.emptyVisible?(c=a.getFirst(),a=a.getLast()):\n(c=a.getFirst(b),a=a.getLast(b));if(c)var e=c.findOne('p button[data-direction\\x3d\"up\"]');if(a)var d=a.findOne('p button[data-direction\\x3d\"down\"]');e&&(e.addClass(\"disabled\"),e.setAttribute(\"tabindex\",\"-1\"));d&&(d.addClass(\"disabled\"),d.setAttribute(\"tabindex\",\"-1\"))}};d.prototype.getGroupIndex=function(a){for(var b=this.actualConfig.toolbarGroups,c=b.length,d=0;d<c;d+=1)if(b[d].name===a)return d;return-1};d.prototype._addSeparator=function(){var a=this._determineSeparatorToAddIndex(),b=d.createSeparatorLiteral(),\nc=CKEDITOR.dom.element.createFromHtml(d.getToolbarSeparatorString(b));this.actualConfig.toolbarGroups.splice(a,0,b);c.insertBefore(this.modifyContainer.findOne(\"ul[data-type\\x3dtable-body]\").getChild(a));this._setActiveElement(\"separator\",b.name);this._refreshMoveBtnsAvalibility();this._refreshBtnTabIndexes();this._refreshEditor()};d.prototype._removeSeparator=function(a){var b=CKEDITOR.tools.indexOf(this.actualConfig.toolbarGroups,function(b){return\"separator\"==b.type&&b.name==a});this.actualConfig.toolbarGroups.splice(b,\n1);this._refreshMoveBtnsAvalibility();this._refreshBtnTabIndexes();this._refreshEditor()};d.prototype._determineSeparatorToAddIndex=function(){return this.currentActive?(\"group\"==this.currentActive.elem.data(\"type\")||\"separator\"==this.currentActive.elem.data(\"type\")?this.currentActive.elem:this.currentActive.elem.getAscendant(\"li\")).getIndex():0};d.prototype._moveElement=function(a,b,c){function e(a){return a.totalBtns||\"separator\"==a.type}c=this.emptyVisible?\"down\"==c?b+1:b-1:d.getFirstElementIndexWith(a,\nb,c,e);return d.moveTo(c-b,a,b)};d.prototype._moveGroup=function(a,b){var c=this.getGroupIndex(b),c=this._moveElement(this.actualConfig.toolbarGroups,c,a);this._refreshMoveBtnsAvalibility();this._refreshBtnTabIndexes();this._refreshEditor();return c};d.prototype._moveSubgroup=function(a,b,c){b=this.getGroupIndex(b);b=this.actualConfig.toolbarGroups[b];var d=CKEDITOR.tools.indexOf(b.groups,function(a){return a.name==c});a=this._moveElement(b.groups,d,a);this._refreshEditor();return a};d.prototype._calculateTotalBtns=\nfunction(){for(var a=this.actualConfig.toolbarGroups,b=a.length;b--;){var c=a[b],e=d.getTotalGroupButtonsNumber(c,this.fullToolbarEditor);\"separator\"!=c.type&&(c.totalBtns=e)}};d.prototype._addButtonToRemoved=function(a){if(-1!=CKEDITOR.tools.indexOf(this.removedButtons,a))throw\"Button already added to removed\";this.removedButtons.push(a);this.actualConfig.removeButtons=this.removedButtons.join(\",\");this._refreshEditor()};d.prototype._removeButtonFromRemoved=function(a){a=CKEDITOR.tools.indexOf(this.removedButtons,\na);if(-1===a)throw\"Trying to remove button from removed, but not found\";this.removedButtons.splice(a,1);this.actualConfig.removeButtons=this.removedButtons.join(\",\");this._refreshEditor()};d.parseGroupToConfigValue=function(a){if(\"separator\"==a.type)return\"/\";var b=a.groups,c=b.length;delete a.totalBtns;for(var d=0;d<c;d+=1)b[d]=b[d].name;return a};d.getGroupOrSeparatorLiAncestor=function(a){return a.$ instanceof HTMLLIElement&&\"group\"==a.data(\"type\")?a:d.getFirstAncestor(a,function(a){a=a.data(\"type\");\nreturn\"group\"==a||\"separator\"==a})};d.createSeparatorLiteral=function(){return{type:\"separator\",name:\"separator\"+CKEDITOR.tools.getNextNumber()}};d.prototype._toolbarConfigToListString=function(){for(var a=this.actualConfig.toolbarGroups||[],b='\\x3cul data-type\\x3d\"table-body\"\\x3e',c=a.length,e=0;e<c;e+=1)var f=a[e],b=\"separator\"===f.type?b+d.getToolbarSeparatorString(f):b+this._getToolbarGroupString(f);b+=\"\\x3c/ul\\x3e\";return d.getToolbarHeaderString()+b};d.prototype._getToolbarGroupString=function(a){var b=\na.groups,c;c=\"\"+['\\x3cli data-type\\x3d\"group\" data-name\\x3d\"',a.name,'\" ',a.totalBtns?\"\":'class\\x3d\"empty\"',\"\\x3e\"].join(\"\");c+=d.getToolbarElementPreString(a)+\"\\x3cul\\x3e\";a=b.length;for(var e=0;e<a;e+=1){var f=b[e];c+=this._getToolbarSubgroupString(f,this.fullToolbarEditor.buttonsByGroup[f.name])}return c+\"\\x3c/ul\\x3e\\x3c/li\\x3e\"};d.getToolbarSeparatorString=function(a){return['\\x3cli data-type\\x3d\"',a.type,'\" data-name\\x3d\"',a.name,'\"\\x3e',d.getToolbarElementPreString(\"row separator\"),\"\\x3c/li\\x3e\"].join(\"\")};\nd.getToolbarHeaderString=function(){return'\\x3cul data-type\\x3d\"table-header\"\\x3e\\x3cli data-type\\x3d\"header\"\\x3e\\x3cp\\x3eToolbars\\x3c/p\\x3e\\x3cul\\x3e\\x3cli\\x3e\\x3cp\\x3eToolbar groups\\x3c/p\\x3e\\x3cp\\x3eToolbar group items\\x3c/p\\x3e\\x3c/li\\x3e\\x3c/ul\\x3e\\x3c/li\\x3e\\x3c/ul\\x3e'};d.getFirstAncestor=function(a,b){for(var c=a.getParents(),d=c.length;d--;)if(b(c[d]))return c[d];return null};d.getFirstElementIndexWith=function(a,b,c,d){for(;\"up\"===c?b--:++b<a.length;)if(d(a[b]))return b;return-1};d.moveTo=\nfunction(a,b,c){var d;-1!==c&&(d=b.splice(c,1)[0]);a=c+a;b.splice(a,0,d);return a};d.getTotalSubGroupButtonsNumber=function(a,b){var c=b.buttonsByGroup[\"string\"==typeof a?a:a.name];return c?c.length:0};d.getTotalGroupButtonsNumber=function(a,b){for(var c=0,e=a.groups,f=e?e.length:0,g=0;g<f;g+=1)c+=d.getTotalSubGroupButtonsNumber(e[g],b);return c};d.prototype._getToolbarSubgroupString=function(a,b){var c;c=\"\"+['\\x3cli data-type\\x3d\"subgroup\" data-name\\x3d\"',a.name,'\" ',a.totalBtns?\"\":'class\\x3d\"empty\" ',\n\"\\x3e\"].join(\"\");c+=d.getToolbarElementPreString(a.name);c+=\"\\x3cul\\x3e\";for(var e=b?b.length:0,f=0;f<e;f+=1)c+=this.getButtonString(b[f]);return c+=\"\\x3c/ul\\x3e\\x3c/li\\x3e\"};d.prototype._getConfigButtonName=function(a){var b=this.fullToolbarEditor.editorInstance.ui.items,c;for(c in b)if(b[c].name==a)return c;return null};d.prototype.isButtonRemoved=function(a){return-1!=CKEDITOR.tools.indexOf(this.removedButtons,this._getConfigButtonName(a))};d.prototype.getButtonString=function(a){var b=this.isButtonRemoved(a.name)?\n\"\":'checked\\x3d\"checked\"';return['\\x3cli data-tab\\x3d\"true\" data-type\\x3d\"button\" data-name\\x3d\"',this._getConfigButtonName(a.name),'\"\\x3e\\x3clabel title\\x3d\"',a.label,'\" \\x3e\\x3cinput tabindex\\x3d\"-1\"type\\x3d\"checkbox\"',b,\"/\\x3e\",a.$.getOuterHtml(),\"\\x3c/label\\x3e\\x3c/li\\x3e\"].join(\"\")};d.getToolbarElementPreString=function(a){a=a.name?a.name:a;return['\\x3cp\\x3e\\x3cspan\\x3e\\x3cbutton title\\x3d\"Move element upward\" data-tab\\x3d\"true\" data-direction\\x3d\"up\" class\\x3d\"move icon-up-big\"\\x3e\\x3c/button\\x3e\\x3cbutton title\\x3d\"Move element downward\" data-tab\\x3d\"true\" data-direction\\x3d\"down\" class\\x3d\"move icon-down-big\"\\x3e\\x3c/button\\x3e',\n\"row separator\"==a?'\\x3cbutton title\\x3d\"Remove element\" data-tab\\x3d\"true\" class\\x3d\"remove icon-trash\"\\x3e\\x3c/button\\x3e':\"\",a,\"\\x3c/span\\x3e\\x3c/p\\x3e\"].join(\"\")};d.evaluateToolbarGroupsConfig=function(a){return a=function(a){var c={},d;try{d=eval(\"(\"+a+\")\")}catch(f){try{d=eval(a)}catch(g){return null}}return c.toolbarGroups&&\"number\"===typeof c.toolbarGroups.length?JSON.stringify(c):d&&\"number\"===typeof d.length?JSON.stringify({toolbarGroups:d}):d&&d.toolbarGroups?JSON.stringify(d):null}(a)};\nreturn d})();"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/js/toolbartextmodifier.js",
    "content": "﻿(function(){function e(a){l.call(this,a);this.hintContainer=this.codeContainer=null}var l=ToolbarConfigurator.AbstractToolbarModifier,g=ToolbarConfigurator.FullToolbarEditor;ToolbarConfigurator.ToolbarTextModifier=e;e.prototype=Object.create(l.prototype);e.prototype._onInit=function(a,d){l.prototype._onInit.call(this,void 0,d);this._createModifier(d?this.actualConfig:void 0);\"function\"===typeof a&&a(this.mainContainer)};e.prototype._createModifier=function(a){function d(a){var b=c(a);if(null!==b.charsBetween){var d=\nk.getUnusedButtonsArray(k.actualConfig.toolbar,!0,b.charsBetween),e=a.getCursor(),b=CodeMirror.Pos(e.line,e.ch-b.charsBetween.length),h=a.getTokenAt(e);\"{\"===a.getTokenAt({line:e.line,ch:h.start}).string&&(d=[\"name\"]);if(0!==d.length)return new f(b,e,d)}}function f(a,c,b){this.from=a;this.to=c;this.list=b;this._handlers=[]}function c(a,c){var b={};b.cur=a.getCursor();b.tok=a.getTokenAt(b.cur);b[\"char\"]=c||b.tok.string.charAt(b.tok.string.length-1);var d=a.getRange(CodeMirror.Pos(b.cur.line,0),b.cur).split(\"\").reverse().join(\"\"),\nd=d.replace(/(['|\"]\\w*['|\"])/g,\"\");b.charsBetween=d.match(/(^\\w*)(['|\"])/);b.charsBetween&&(b.endChar=b.charsBetween[2],b.charsBetween=b.charsBetween[1].split(\"\").reverse().join(\"\"));return b}function b(a){setTimeout(function(){a.state.completionActive||CodeMirror.showHint(a,d,{hintsClass:\"toolbar-modifier\",completeSingle:!1})},100);return CodeMirror.Pass}var k=this;this._createToolbar();this.toolbarContainer&&this.mainContainer.append(this.toolbarContainer);l.prototype._createModifier.call(this);\nthis._setupActualConfig(a);a=this.actualConfig.toolbar;a=CKEDITOR.tools.isArray(a)?\"\\tconfig.toolbar \\x3d \"+(\"[\\n\\t\\t\"+g.map(a,function(a){return l.stringifyJSONintoOneLine(a,{addSpaces:!0,noQuotesOnKey:!0,singleQuotes:!0})}).join(\",\\n\\t\\t\")+\"\\n\\t]\")+\";\":\"config.toolbar \\x3d [];\";a=[\"CKEDITOR.editorConfig \\x3d function( config ) {\\n\",a,\"\\n};\"].join(\"\");var e=new CKEDITOR.dom.element(\"div\");e.addClass(\"codemirror-wrapper\");this.modifyContainer.append(e);this.codeContainer=CodeMirror(e.$,{mode:{name:\"javascript\",\njson:!0},lineNumbers:!1,lineWrapping:!0,viewportMargin:Infinity,value:a,smartIndent:!1,indentWithTabs:!0,indentUnit:4,tabSize:4,theme:\"neo\",extraKeys:{Left:b,Right:b,\"'''\":b,\"'\\\"'\":b,Backspace:b,Delete:b,\"Shift-Tab\":\"indentLess\"}});this.codeContainer.on(\"endCompletion\",function(a,b){var d=c(a);void 0!==b&&a.replaceSelection(d.endChar)});this.codeContainer.on(\"change\",function(){var a=k.codeContainer.getValue(),a=k._evaluateValue(a);null!==a?(k.actualConfig.toolbar=a.toolbar?a.toolbar:k.actualConfig.toolbar,\nk._fillHintByUnusedElements(),k._refreshEditor(),k.mainContainer.removeClass(\"invalid\")):k.mainContainer.addClass(\"invalid\")});this.hintContainer=new CKEDITOR.dom.element(\"div\");this.hintContainer.addClass(\"toolbarModifier-hints\");this._fillHintByUnusedElements();this.hintContainer.insertBefore(e)};e.prototype._fillHintByUnusedElements=function(){var a=this.getUnusedButtonsArray(this.actualConfig.toolbar,!0),a=this.groupButtonNamesByGroup(a),d=g.map(a,function(a){var b=g.map(a.buttons,function(a){return\"\\x3ccode\\x3e\"+\na+\"\\x3c/code\\x3e \"}).join(\"\");return[\"\\x3cdt\\x3e\\x3ccode\\x3e\",a.name,\"\\x3c/code\\x3e\\x3c/dt\\x3e\\x3cdd\\x3e\",b,\"\\x3c/dd\\x3e\"].join(\"\")}).join(\" \"),f='\\x3cdt class\\x3d\"list-header\"\\x3eToolbar group\\x3c/dt\\x3e\\x3cdd class\\x3d\"list-header\"\\x3eUnused items\\x3c/dd\\x3e';a.length||(f=\"\\x3cp\\x3eAll items are in use.\\x3c/p\\x3e\");this.codeContainer.refresh();this.hintContainer.setHtml(\"\\x3ch3\\x3eUnused toolbar items\\x3c/h3\\x3e\\x3cdl\\x3e\"+f+d+\"\\x3c/dl\\x3e\")};e.prototype.getToolbarGroupByButtonName=function(a){var d=\nthis.fullToolbarEditor.buttonNamesByGroup,f;for(f in d)for(var c=d[f],b=c.length;b--;)if(a===c[b])return f;return null};e.prototype.getUnusedButtonsArray=function(a,d,f){d=!0===d?!0:!1;var c=e.mapToolbarCfgToElementsList(a);a=Object.keys(this.fullToolbarEditor.editorInstance.ui.items);a=g.filter(a,function(a){var d=\"-\"===a;a=void 0===f||0===a.toLowerCase().indexOf(f.toLowerCase());return!d&&a});a=g.filter(a,function(a){return-1==CKEDITOR.tools.indexOf(c,a)});d&&a.sort();return a};e.prototype.groupButtonNamesByGroup=\nfunction(a){var d=[],f=JSON.parse(JSON.stringify(this.fullToolbarEditor.buttonNamesByGroup)),c;for(c in f){var b=f[c],b=g.filter(b,function(b){return-1!==CKEDITOR.tools.indexOf(a,b)});b.length&&d.push({name:c,buttons:b})}return d};e.mapToolbarCfgToElementsList=function(a){function d(a){return\"-\"!==a}for(var f=[],c=a.length,b=0;b<c;b+=1)a[b]&&\"string\"!==typeof a[b]&&(f=f.concat(g.filter(a[b].items,d)));return f};e.prototype._setupActualConfig=function(a){a=a||this.editorInstance.config;CKEDITOR.tools.isArray(a.toolbar)||\n(a.toolbarGroups||(a.toolbarGroups=this.fullToolbarEditor.getFullToolbarGroupsConfig(!0)),this._fixGroups(a),a.toolbar=this._mapToolbarGroupsToToolbar(a.toolbarGroups,this.actualConfig.removeButtons),this.actualConfig.toolbar=a.toolbar,this.actualConfig.removeButtons=\"\")};e.prototype._mapToolbarGroupsToToolbar=function(a,d){d=d||this.editorInstance.config.removedBtns;d=\"string\"==typeof d?d.split(\",\"):[];for(var f=a.length;f--;){var c=this._mapToolbarSubgroup(a[f],d);\"separator\"===a[f].type?a[f]=\"/\":\nCKEDITOR.tools.isArray(c)&&0===c.length?a.splice(f,1):a[f]=\"string\"==typeof c?c:{name:a[f].name,items:c}}return a};e.prototype._mapToolbarSubgroup=function(a,d){if(\"string\"==typeof a)return a;for(var f=a.groups?a.groups.length:0,c=[],b=0;b<f;b+=1){var e=a.groups[b],e=this.fullToolbarEditor.buttonsByGroup[\"string\"===typeof e?e:e.name]||[],e=this._mapButtonsToButtonsNames(e,d),g=e.length,c=c.concat(e);g&&c.push(\"-\")}\"-\"==c[c.length-1]&&c.pop();return c};e.prototype._mapButtonsToButtonsNames=function(a,\nd){for(var f=a.length;f--;){var c=a[f],c=\"string\"===typeof c?c:this.fullToolbarEditor.getCamelCasedButtonName(c.name);-1!==CKEDITOR.tools.indexOf(d,c)?a.splice(f,1):a[f]=c}return a};e.prototype._evaluateValue=function(a){var d;try{var f={};Function(\"var CKEDITOR \\x3d {}; \"+a+\"; return CKEDITOR;\")().editorConfig(f);d=f;for(var c=d.toolbar.length;c--;)d.toolbar[c]||d.toolbar.splice(c,1)}catch(b){d=null}return d};e.prototype.mapToolbarToToolbarGroups=function(a){function d(a,b){a=a.slice();for(var d=\nb.length;d--;){var c=a.indexOf(b[d]);-1!==c&&a.splice(c,1)}return a}for(var f={},c=[],b=[],c=a.length,e=0;e<c;e++)if(\"/\"===a[e])b.push(\"/\");else{var g=a[e].items,m={};m.name=a[e].name;m.groups=[];for(var l=g.length,p=0;p<l;p++){var n=g[p];if(\"-\"!==n){var h=this.getToolbarGroupByButtonName(n);-1===m.groups.indexOf(h)&&m.groups.push(h);f[h]=f[h]||{};h=f[h].buttons=f[h].buttons||{};h[n]=h[n]||{used:0,origin:m.name};h[n].used++}}b.push(m)}c=function(a,b){var c=[],e;for(e in a)var f=a[e],g=b[e].slice(),\nc=c.concat(d(g,Object.keys(f.buttons)));return c}(f,this.fullToolbarEditor.buttonNamesByGroup);return{toolbarGroups:b,removeButtons:c.join(\",\")}};return e})();"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/lib/codemirror/LICENSE",
    "content": "Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/lib/codemirror/codemirror.css",
    "content": "/* BASICS */\n\n.CodeMirror {\n  /* Set height, width, borders, and global font properties here */\n  font-family: monospace;\n  height: 300px;\n  color: black;\n}\n\n/* PADDING */\n\n.CodeMirror-lines {\n  padding: 4px 0; /* Vertical padding around content */\n}\n.CodeMirror pre {\n  padding: 0 4px; /* Horizontal padding of content */\n}\n\n.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  background-color: white; /* The little square between H and V scrollbars */\n}\n\n/* GUTTER */\n\n.CodeMirror-gutters {\n  border-right: 1px solid #ddd;\n  background-color: #f7f7f7;\n  white-space: nowrap;\n}\n.CodeMirror-linenumbers {}\n.CodeMirror-linenumber {\n  padding: 0 3px 0 5px;\n  min-width: 20px;\n  text-align: right;\n  color: #999;\n  white-space: nowrap;\n}\n\n.CodeMirror-guttermarker { color: black; }\n.CodeMirror-guttermarker-subtle { color: #999; }\n\n/* CURSOR */\n\n.CodeMirror div.CodeMirror-cursor {\n  border-left: 1px solid black;\n}\n/* Shown when moving in bi-directional text */\n.CodeMirror div.CodeMirror-secondarycursor {\n  border-left: 1px solid silver;\n}\n.CodeMirror.cm-fat-cursor div.CodeMirror-cursor {\n  width: auto;\n  border: 0;\n  background: #7e7;\n}\n.CodeMirror.cm-fat-cursor div.CodeMirror-cursors {\n  z-index: 1;\n}\n\n.cm-animate-fat-cursor {\n  width: auto;\n  border: 0;\n  -webkit-animation: blink 1.06s steps(1) infinite;\n  -moz-animation: blink 1.06s steps(1) infinite;\n  animation: blink 1.06s steps(1) infinite;\n}\n@-moz-keyframes blink {\n  0% { background: #7e7; }\n  50% { background: none; }\n  100% { background: #7e7; }\n}\n@-webkit-keyframes blink {\n  0% { background: #7e7; }\n  50% { background: none; }\n  100% { background: #7e7; }\n}\n@keyframes blink {\n  0% { background: #7e7; }\n  50% { background: none; }\n  100% { background: #7e7; }\n}\n\n/* Can style cursor different in overwrite (non-insert) mode */\ndiv.CodeMirror-overwrite div.CodeMirror-cursor {}\n\n.cm-tab { display: inline-block; text-decoration: inherit; }\n\n.CodeMirror-ruler {\n  border-left: 1px solid #ccc;\n  position: absolute;\n}\n\n/* DEFAULT THEME */\n\n.cm-s-default .cm-keyword {color: #708;}\n.cm-s-default .cm-atom {color: #219;}\n.cm-s-default .cm-number {color: #164;}\n.cm-s-default .cm-def {color: #00f;}\n.cm-s-default .cm-variable,\n.cm-s-default .cm-punctuation,\n.cm-s-default .cm-property,\n.cm-s-default .cm-operator {}\n.cm-s-default .cm-variable-2 {color: #05a;}\n.cm-s-default .cm-variable-3 {color: #085;}\n.cm-s-default .cm-comment {color: #a50;}\n.cm-s-default .cm-string {color: #a11;}\n.cm-s-default .cm-string-2 {color: #f50;}\n.cm-s-default .cm-meta {color: #555;}\n.cm-s-default .cm-qualifier {color: #555;}\n.cm-s-default .cm-builtin {color: #30a;}\n.cm-s-default .cm-bracket {color: #997;}\n.cm-s-default .cm-tag {color: #170;}\n.cm-s-default .cm-attribute {color: #00c;}\n.cm-s-default .cm-header {color: blue;}\n.cm-s-default .cm-quote {color: #090;}\n.cm-s-default .cm-hr {color: #999;}\n.cm-s-default .cm-link {color: #00c;}\n\n.cm-negative {color: #d44;}\n.cm-positive {color: #292;}\n.cm-header, .cm-strong {font-weight: bold;}\n.cm-em {font-style: italic;}\n.cm-link {text-decoration: underline;}\n.cm-strikethrough {text-decoration: line-through;}\n\n.cm-s-default .cm-error {color: #f00;}\n.cm-invalidchar {color: #f00;}\n\n.CodeMirror-composing { border-bottom: 2px solid; }\n\n/* Default styles for common addons */\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}\n.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }\n.CodeMirror-activeline-background {background: #e8f2ff;}\n\n/* STOP */\n\n/* The rest of this file contains styles related to the mechanics of\n   the editor. You probably shouldn't touch them. */\n\n.CodeMirror {\n  position: relative;\n  overflow: hidden;\n  background: white;\n}\n\n.CodeMirror-scroll {\n  overflow: scroll !important; /* Things will break if this is overridden */\n  /* 30px is the magic margin used to hide the element's real scrollbars */\n  /* See overflow: hidden in .CodeMirror */\n  margin-bottom: -30px; margin-right: -30px;\n  padding-bottom: 30px;\n  height: 100%;\n  outline: none; /* Prevent dragging from highlighting the element */\n  position: relative;\n}\n.CodeMirror-sizer {\n  position: relative;\n  border-right: 30px solid transparent;\n}\n\n/* The fake, visible scrollbars. Used to force redraw during scrolling\n   before actuall scrolling happens, thus preventing shaking and\n   flickering artifacts. */\n.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  position: absolute;\n  z-index: 6;\n  display: none;\n}\n.CodeMirror-vscrollbar {\n  right: 0; top: 0;\n  overflow-x: hidden;\n  overflow-y: scroll;\n}\n.CodeMirror-hscrollbar {\n  bottom: 0; left: 0;\n  overflow-y: hidden;\n  overflow-x: scroll;\n}\n.CodeMirror-scrollbar-filler {\n  right: 0; bottom: 0;\n}\n.CodeMirror-gutter-filler {\n  left: 0; bottom: 0;\n}\n\n.CodeMirror-gutters {\n  position: absolute; left: 0; top: 0;\n  z-index: 3;\n}\n.CodeMirror-gutter {\n  white-space: normal;\n  height: 100%;\n  display: inline-block;\n  margin-bottom: -30px;\n  /* Hack to make IE7 behave */\n  *zoom:1;\n  *display:inline;\n}\n.CodeMirror-gutter-wrapper {\n  position: absolute;\n  z-index: 4;\n  height: 100%;\n}\n.CodeMirror-gutter-elt {\n  position: absolute;\n  cursor: default;\n  z-index: 4;\n}\n.CodeMirror-gutter-wrapper {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.CodeMirror-lines {\n  cursor: text;\n  min-height: 1px; /* prevents collapsing before first draw */\n}\n.CodeMirror pre {\n  /* Reset some styles that the rest of the page might have set */\n  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;\n  border-width: 0;\n  background: transparent;\n  font-family: inherit;\n  font-size: inherit;\n  margin: 0;\n  white-space: pre;\n  word-wrap: normal;\n  line-height: inherit;\n  color: inherit;\n  z-index: 2;\n  position: relative;\n  overflow: visible;\n  -webkit-tap-highlight-color: transparent;\n}\n.CodeMirror-wrap pre {\n  word-wrap: break-word;\n  white-space: pre-wrap;\n  word-break: normal;\n}\n\n.CodeMirror-linebackground {\n  position: absolute;\n  left: 0; right: 0; top: 0; bottom: 0;\n  z-index: 0;\n}\n\n.CodeMirror-linewidget {\n  position: relative;\n  z-index: 2;\n  overflow: auto;\n}\n\n.CodeMirror-widget {}\n\n.CodeMirror-code {\n  outline: none;\n}\n\n/* Force content-box sizing for the elements where we expect it */\n.CodeMirror-scroll,\n.CodeMirror-sizer,\n.CodeMirror-gutter,\n.CodeMirror-gutters,\n.CodeMirror-linenumber {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n\n.CodeMirror-measure {\n  position: absolute;\n  width: 100%;\n  height: 0;\n  overflow: hidden;\n  visibility: hidden;\n}\n.CodeMirror-measure pre { position: static; }\n\n.CodeMirror div.CodeMirror-cursor {\n  position: absolute;\n  border-right: none;\n  width: 0;\n}\n\ndiv.CodeMirror-cursors {\n  visibility: hidden;\n  position: relative;\n  z-index: 3;\n}\n.CodeMirror-focused div.CodeMirror-cursors {\n  visibility: visible;\n}\n\n.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n.CodeMirror-crosshair { cursor: crosshair; }\n.CodeMirror ::selection { background: #d7d4f0; }\n.CodeMirror ::-moz-selection { background: #d7d4f0; }\n\n.cm-searching {\n  background: #ffa;\n  background: rgba(255, 255, 0, .4);\n}\n\n/* IE7 hack to prevent it from returning funny offsetTops on the spans */\n.CodeMirror span { *vertical-align: text-bottom; }\n\n/* Used to force a border model for a node */\n.cm-force-border { padding-right: .1px; }\n\n@media print {\n  /* Hide the cursor when printing */\n  .CodeMirror div.CodeMirror-cursors {\n    visibility: hidden;\n  }\n}\n\n/* See issue #2901 */\n.cm-tab-wrap-hack:after { content: ''; }\n\n/* Help users use markselection to safely style text background */\nspan.CodeMirror-selectedtext { background: none; }\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/lib/codemirror/codemirror.js",
    "content": "﻿(function(q){if(\"object\"==typeof exports&&\"object\"==typeof module)module.exports=q();else{if(\"function\"==typeof define&&define.amd)return define([],q);this.CodeMirror=q()}})(function(){function q(a,b){if(!(this instanceof q))return new q(a,b);this.options=b=b?V(b):{};V(qf,b,!1);wc(b);var c=b.value;\"string\"==typeof c&&(c=new P(c,b.mode));this.doc=c;var d=new q.inputStyles[b.inputStyle](this),d=this.display=new rf(a,c,d);d.wrapper.CodeMirror=this;Ad(this);Bd(this);b.lineWrapping&&(this.display.wrapper.className+=\n\" CodeMirror-wrap\");b.autofocus&&!ab&&d.input.focus();Cd(this);this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,draggingText:!1,highlight:new bb,keySeq:null,specialChars:null};var e=this;B&&11>C&&setTimeout(function(){e.display.input.reset(!0)},20);sf(this);Dd||(tf(),Dd=!0);Ja(this);this.curOp.forceUpdate=!0;Ed(this,c);b.autofocus&&!ab||e.hasFocus()?setTimeout(cb(xc,this),20):db(this);for(var f in Ka)if(Ka.hasOwnProperty(f))Ka[f](this,\nb[f],Fd);Gd(this);b.finishInit&&b.finishInit(this);for(c=0;c<yc.length;++c)yc[c](this);La(this);J&&b.lineWrapping&&\"optimizelegibility\"==getComputedStyle(d.lineDiv).textRendering&&(d.lineDiv.style.textRendering=\"auto\")}function rf(a,b,c){this.input=c;this.scrollbarFiller=t(\"div\",null,\"CodeMirror-scrollbar-filler\");this.scrollbarFiller.setAttribute(\"cm-not-content\",\"true\");this.gutterFiller=t(\"div\",null,\"CodeMirror-gutter-filler\");this.gutterFiller.setAttribute(\"cm-not-content\",\"true\");this.lineDiv=\nt(\"div\",null,\"CodeMirror-code\");this.selectionDiv=t(\"div\",null,null,\"position: relative; z-index: 1\");this.cursorDiv=t(\"div\",null,\"CodeMirror-cursors\");this.measure=t(\"div\",null,\"CodeMirror-measure\");this.lineMeasure=t(\"div\",null,\"CodeMirror-measure\");this.lineSpace=t(\"div\",[this.measure,this.lineMeasure,this.selectionDiv,this.cursorDiv,this.lineDiv],null,\"position: relative; outline: none\");this.mover=t(\"div\",[t(\"div\",[this.lineSpace],\"CodeMirror-lines\")],null,\"position: relative\");this.sizer=t(\"div\",\n[this.mover],\"CodeMirror-sizer\");this.sizerWidth=null;this.heightForcer=t(\"div\",null,null,\"position: absolute; height: \"+Hd+\"px; width: 1px;\");this.gutters=t(\"div\",null,\"CodeMirror-gutters\");this.lineGutter=null;this.scroller=t(\"div\",[this.sizer,this.heightForcer,this.gutters],\"CodeMirror-scroll\");this.scroller.setAttribute(\"tabIndex\",\"-1\");this.wrapper=t(\"div\",[this.scrollbarFiller,this.gutterFiller,this.scroller],\"CodeMirror\");B&&8>C&&(this.gutters.style.zIndex=-1,this.scroller.style.paddingRight=\n0);J||wa&&ab||(this.scroller.draggable=!0);a&&(a.appendChild?a.appendChild(this.wrapper):a(this.wrapper));this.reportedViewFrom=this.reportedViewTo=this.viewFrom=this.viewTo=b.first;this.view=[];this.externalMeasured=this.renderedView=null;this.lastWrapHeight=this.lastWrapWidth=this.viewOffset=0;this.updateLineNumbers=null;this.nativeBarWidth=this.barHeight=this.barWidth=0;this.scrollbarsClipped=!1;this.lineNumWidth=this.lineNumInnerWidth=this.lineNumChars=null;this.alignWidgets=!1;this.maxLine=this.cachedCharWidth=\nthis.cachedTextHeight=this.cachedPaddingH=null;this.maxLineLength=0;this.maxLineChanged=!1;this.wheelDX=this.wheelDY=this.wheelStartX=this.wheelStartY=null;this.shift=!1;this.activeTouch=this.selForContextMenu=null;c.init(this)}function zc(a){a.doc.mode=q.getMode(a.options,a.doc.modeOption);eb(a)}function eb(a){a.doc.iter(function(a){a.stateAfter&&(a.stateAfter=null);a.styles&&(a.styles=null)});a.doc.frontier=a.doc.first;fb(a,100);a.state.modeGen++;a.curOp&&Q(a)}function Id(a){var b=xa(a.display),\nc=a.options.lineWrapping,d=c&&Math.max(5,a.display.scroller.clientWidth/gb(a.display)-3);return function(e){if(ya(a.doc,e))return 0;var f=0;if(e.widgets)for(var g=0;g<e.widgets.length;g++)e.widgets[g].height&&(f+=e.widgets[g].height);return c?f+(Math.ceil(e.text.length/d)||1)*b:f+b}}function Ac(a){var b=a.doc,c=Id(a);b.iter(function(a){var b=c(a);b!=a.height&&ca(a,b)})}function Bd(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\\s*cm-s-\\S+/g,\"\")+a.options.theme.replace(/(^|\\s)\\s*/g,\n\" cm-s-\");hb(a)}function ib(a){Ad(a);Q(a);setTimeout(function(){Bc(a)},20)}function Ad(a){var b=a.display.gutters,c=a.options.gutters;za(b);for(var d=0;d<c.length;++d){var e=c[d],f=b.appendChild(t(\"div\",null,\"CodeMirror-gutter \"+e));\"CodeMirror-linenumbers\"==e&&(a.display.lineGutter=f,f.style.width=(a.display.lineNumWidth||1)+\"px\")}b.style.display=d?\"\":\"none\";Cc(a)}function Cc(a){a.display.sizer.style.marginLeft=a.display.gutters.offsetWidth+\"px\"}function Kb(a){if(0==a.height)return 0;for(var b=a.text.length,\nc,d=a;c=Aa(d,!0);)c=c.find(0,!0),d=c.from.line,b+=c.from.ch-c.to.ch;for(d=a;c=Aa(d,!1);)c=c.find(0,!0),b-=d.text.length-c.from.ch,d=c.to.line,b+=d.text.length-c.to.ch;return b}function Dc(a){var b=a.display;a=a.doc;b.maxLine=u(a,a.first);b.maxLineLength=Kb(b.maxLine);b.maxLineChanged=!0;a.iter(function(a){var d=Kb(a);d>b.maxLineLength&&(b.maxLineLength=d,b.maxLine=a)})}function wc(a){var b=D(a.gutters,\"CodeMirror-linenumbers\");-1==b&&a.lineNumbers?a.gutters=a.gutters.concat([\"CodeMirror-linenumbers\"]):\n-1<b&&!a.lineNumbers&&(a.gutters=a.gutters.slice(0),a.gutters.splice(b,1))}function jb(a){var b=a.display,c=b.gutters.offsetWidth,d=Math.round(a.doc.height+Ec(a.display));return{clientHeight:b.scroller.clientHeight,viewHeight:b.wrapper.clientHeight,scrollWidth:b.scroller.scrollWidth,clientWidth:b.scroller.clientWidth,viewWidth:b.wrapper.clientWidth,barLeft:a.options.fixedGutter?c:0,docHeight:d,scrollHeight:d+da(a)+b.barHeight,nativeBarWidth:b.nativeBarWidth,gutterWidth:c}}function Fc(a,b,c){this.cm=\nc;var d=this.vert=t(\"div\",[t(\"div\",null,null,\"min-width: 1px\")],\"CodeMirror-vscrollbar\"),e=this.horiz=t(\"div\",[t(\"div\",null,null,\"height: 100%; min-height: 1px\")],\"CodeMirror-hscrollbar\");a(d);a(e);v(d,\"scroll\",function(){d.clientHeight&&b(d.scrollTop,\"vertical\")});v(e,\"scroll\",function(){e.clientWidth&&b(e.scrollLeft,\"horizontal\")});this.checkedOverlay=!1;B&&8>C&&(this.horiz.style.minHeight=this.vert.style.minWidth=\"18px\")}function Gc(){}function Cd(a){a.display.scrollbars&&(a.display.scrollbars.clear(),\na.display.scrollbars.addClass&&kb(a.display.wrapper,a.display.scrollbars.addClass));a.display.scrollbars=new q.scrollbarModel[a.options.scrollbarStyle](function(b){a.display.wrapper.insertBefore(b,a.display.scrollbarFiller);v(b,\"mousedown\",function(){a.state.focused&&setTimeout(function(){a.display.input.focus()},0)});b.setAttribute(\"cm-not-content\",\"true\")},function(b,c){\"horizontal\"==c?Ma(a,b):lb(a,b)},a);a.display.scrollbars.addClass&&mb(a.display.wrapper,a.display.scrollbars.addClass)}function Na(a,\nb){b||(b=jb(a));var c=a.display.barWidth,d=a.display.barHeight;Jd(a,b);for(var e=0;4>e&&c!=a.display.barWidth||d!=a.display.barHeight;e++)c!=a.display.barWidth&&a.options.lineWrapping&&Lb(a),Jd(a,jb(a)),c=a.display.barWidth,d=a.display.barHeight}function Jd(a,b){var c=a.display,d=c.scrollbars.update(b);c.sizer.style.paddingRight=(c.barWidth=d.right)+\"px\";c.sizer.style.paddingBottom=(c.barHeight=d.bottom)+\"px\";d.right&&d.bottom?(c.scrollbarFiller.style.display=\"block\",c.scrollbarFiller.style.height=\nd.bottom+\"px\",c.scrollbarFiller.style.width=d.right+\"px\"):c.scrollbarFiller.style.display=\"\";d.bottom&&a.options.coverGutterNextToScrollbar&&a.options.fixedGutter?(c.gutterFiller.style.display=\"block\",c.gutterFiller.style.height=d.bottom+\"px\",c.gutterFiller.style.width=b.gutterWidth+\"px\"):c.gutterFiller.style.display=\"\"}function Hc(a,b,c){var d=c&&null!=c.top?Math.max(0,c.top):a.scroller.scrollTop,d=Math.floor(d-a.lineSpace.offsetTop),e=c&&null!=c.bottom?c.bottom:d+a.wrapper.clientHeight,d=Ba(b,d),\ne=Ba(b,e);if(c&&c.ensure){var f=c.ensure.from.line;c=c.ensure.to.line;f<d?(d=f,e=Ba(b,ea(u(b,f))+a.wrapper.clientHeight)):Math.min(c,b.lastLine())>=e&&(d=Ba(b,ea(u(b,c))-a.wrapper.clientHeight),e=c)}return{from:d,to:Math.max(e,d+1)}}function Bc(a){var b=a.display,c=b.view;if(b.alignWidgets||b.gutters.firstChild&&a.options.fixedGutter){for(var d=Ic(b)-b.scroller.scrollLeft+a.doc.scrollLeft,e=b.gutters.offsetWidth,f=d+\"px\",g=0;g<c.length;g++)if(!c[g].hidden){a.options.fixedGutter&&c[g].gutter&&(c[g].gutter.style.left=\nf);var h=c[g].alignable;if(h)for(var k=0;k<h.length;k++)h[k].style.left=f}a.options.fixedGutter&&(b.gutters.style.left=d+e+\"px\")}}function Gd(a){if(!a.options.lineNumbers)return!1;var b=a.doc,b=Jc(a.options,b.first+b.size-1),c=a.display;if(b.length!=c.lineNumChars){var d=c.measure.appendChild(t(\"div\",[t(\"div\",b)],\"CodeMirror-linenumber CodeMirror-gutter-elt\")),e=d.firstChild.offsetWidth,d=d.offsetWidth-e;c.lineGutter.style.width=\"\";c.lineNumInnerWidth=Math.max(e,c.lineGutter.offsetWidth-d)+1;c.lineNumWidth=\nc.lineNumInnerWidth+d;c.lineNumChars=c.lineNumInnerWidth?b.length:-1;c.lineGutter.style.width=c.lineNumWidth+\"px\";Cc(a);return!0}return!1}function Jc(a,b){return String(a.lineNumberFormatter(b+a.firstLineNumber))}function Ic(a){return a.scroller.getBoundingClientRect().left-a.sizer.getBoundingClientRect().left}function Mb(a,b,c){var d=a.display;this.viewport=b;this.visible=Hc(d,a.doc,b);this.editorIsHidden=!d.wrapper.offsetWidth;this.wrapperHeight=d.wrapper.clientHeight;this.wrapperWidth=d.wrapper.clientWidth;\nthis.oldDisplayWidth=pa(a);this.force=c;this.dims=Kc(a);this.events=[]}function Lc(a,b){var c=a.display,d=a.doc;if(b.editorIsHidden)return qa(a),!1;if(!b.force&&b.visible.from>=c.viewFrom&&b.visible.to<=c.viewTo&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo)&&c.renderedView==c.view&&0==Kd(a))return!1;Gd(a)&&(qa(a),b.dims=Kc(a));var e=d.first+d.size,f=Math.max(b.visible.from-a.options.viewportMargin,d.first),g=Math.min(e,b.visible.to+a.options.viewportMargin);c.viewFrom<f&&20>f-c.viewFrom&&\n(f=Math.max(d.first,c.viewFrom));c.viewTo>g&&20>c.viewTo-g&&(g=Math.min(e,c.viewTo));ra&&(f=Mc(a.doc,f),g=Ld(a.doc,g));d=f!=c.viewFrom||g!=c.viewTo||c.lastWrapHeight!=b.wrapperHeight||c.lastWrapWidth!=b.wrapperWidth;e=a.display;0==e.view.length||f>=e.viewTo||g<=e.viewFrom?(e.view=Nb(a,f,g),e.viewFrom=f):(e.viewFrom>f?e.view=Nb(a,f,e.viewFrom).concat(e.view):e.viewFrom<f&&(e.view=e.view.slice(Ca(a,f))),e.viewFrom=f,e.viewTo<g?e.view=e.view.concat(Nb(a,e.viewTo,g)):e.viewTo>g&&(e.view=e.view.slice(0,\nCa(a,g))));e.viewTo=g;c.viewOffset=ea(u(a.doc,c.viewFrom));a.display.mover.style.top=c.viewOffset+\"px\";g=Kd(a);if(!d&&0==g&&!b.force&&c.renderedView==c.view&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo))return!1;f=fa();4<g&&(c.lineDiv.style.display=\"none\");uf(a,c.updateLineNumbers,b.dims);4<g&&(c.lineDiv.style.display=\"\");c.renderedView=c.view;f&&fa()!=f&&f.offsetHeight&&f.focus();za(c.cursorDiv);za(c.selectionDiv);c.gutters.style.height=0;d&&(c.lastWrapHeight=b.wrapperHeight,c.lastWrapWidth=\nb.wrapperWidth,fb(a,400));c.updateLineNumbers=null;return!0}function Md(a,b){for(var c=b.viewport,d=!0;;d=!1){if(!d||!a.options.lineWrapping||b.oldDisplayWidth==pa(a))if(c&&null!=c.top&&(c={top:Math.min(a.doc.height+Ec(a.display)-Nc(a),c.top)}),b.visible=Hc(a.display,a.doc,c),b.visible.from>=a.display.viewFrom&&b.visible.to<=a.display.viewTo)break;if(!Lc(a,b))break;Lb(a);d=jb(a);nb(a);Oc(a,d);Na(a,d)}b.signal(a,\"update\",a);if(a.display.viewFrom!=a.display.reportedViewFrom||a.display.viewTo!=a.display.reportedViewTo)b.signal(a,\n\"viewportChange\",a,a.display.viewFrom,a.display.viewTo),a.display.reportedViewFrom=a.display.viewFrom,a.display.reportedViewTo=a.display.viewTo}function Pc(a,b){var c=new Mb(a,b);if(Lc(a,c)){Lb(a);Md(a,c);var d=jb(a);nb(a);Oc(a,d);Na(a,d);c.finish()}}function Oc(a,b){a.display.sizer.style.minHeight=b.docHeight+\"px\";var c=b.docHeight+a.display.barHeight;a.display.heightForcer.style.top=c+\"px\";a.display.gutters.style.height=Math.max(c+da(a),b.clientHeight)+\"px\"}function Lb(a){a=a.display;for(var b=\na.lineDiv.offsetTop,c=0;c<a.view.length;c++){var d=a.view[c],e;if(!d.hidden){if(B&&8>C){var f=d.node.offsetTop+d.node.offsetHeight;e=f-b;b=f}else e=d.node.getBoundingClientRect(),e=e.bottom-e.top;f=d.line.height-e;2>e&&(e=xa(a));if(.001<f||-.001>f)if(ca(d.line,e),Nd(d.line),d.rest)for(e=0;e<d.rest.length;e++)Nd(d.rest[e])}}}function Nd(a){if(a.widgets)for(var b=0;b<a.widgets.length;++b)a.widgets[b].height=a.widgets[b].node.offsetHeight}function Kc(a){for(var b=a.display,c={},d={},e=b.gutters.clientLeft,\nf=b.gutters.firstChild,g=0;f;f=f.nextSibling,++g)c[a.options.gutters[g]]=f.offsetLeft+f.clientLeft+e,d[a.options.gutters[g]]=f.clientWidth;return{fixedPos:Ic(b),gutterTotalWidth:b.gutters.offsetWidth,gutterLeft:c,gutterWidth:d,wrapperWidth:b.wrapper.clientWidth}}function uf(a,b,c){function d(b){var c=b.nextSibling;J&&W&&a.display.currentWheelTarget==b?b.style.display=\"none\":b.parentNode.removeChild(b);return c}for(var e=a.display,f=a.options.lineNumbers,g=e.lineDiv,h=g.firstChild,k=e.view,e=e.viewFrom,\nl=0;l<k.length;l++){var m=k[l];if(!m.hidden)if(m.node&&m.node.parentNode==g){for(;h!=m.node;)h=d(h);h=f&&null!=b&&b<=e&&m.lineNumber;m.changes&&(-1<D(m.changes,\"gutter\")&&(h=!1),Od(a,m,e,c));h&&(za(m.lineNumber),m.lineNumber.appendChild(document.createTextNode(Jc(a.options,e))));h=m.node.nextSibling}else{var p=vf(a,m,e,c);g.insertBefore(p,h)}e+=m.size}for(;h;)h=d(h)}function Od(a,b,c,d){for(var e=0;e<b.changes.length;e++){var f=b.changes[e];if(\"text\"==f){var f=b,g=f.text.className,h=Pd(a,f);f.text==\nf.node&&(f.node=h.pre);f.text.parentNode.replaceChild(h.pre,f.text);f.text=h.pre;h.bgClass!=f.bgClass||h.textClass!=f.textClass?(f.bgClass=h.bgClass,f.textClass=h.textClass,Qc(f)):g&&(f.text.className=g)}else if(\"gutter\"==f)Qd(a,b,c,d);else if(\"class\"==f)Qc(b);else if(\"widget\"==f){f=a;g=b;h=d;g.alignable&&(g.alignable=null);for(var k=g.node.firstChild,l=void 0;k;k=l)l=k.nextSibling,\"CodeMirror-linewidget\"==k.className&&g.node.removeChild(k);Rd(f,g,h)}}b.changes=null}function Ob(a){a.node==a.text&&\n(a.node=t(\"div\",null,null,\"position: relative\"),a.text.parentNode&&a.text.parentNode.replaceChild(a.node,a.text),a.node.appendChild(a.text),B&&8>C&&(a.node.style.zIndex=2));return a.node}function Pd(a,b){var c=a.display.externalMeasured;return c&&c.line==b.line?(a.display.externalMeasured=null,b.measure=c.measure,c.built):Sd(a,b)}function Qc(a){var b=a.bgClass?a.bgClass+\" \"+(a.line.bgClass||\"\"):a.line.bgClass;b&&(b+=\" CodeMirror-linebackground\");if(a.background)b?a.background.className=b:(a.background.parentNode.removeChild(a.background),\na.background=null);else if(b){var c=Ob(a);a.background=c.insertBefore(t(\"div\",null,b),c.firstChild)}a.line.wrapClass?Ob(a).className=a.line.wrapClass:a.node!=a.text&&(a.node.className=\"\");a.text.className=(a.textClass?a.textClass+\" \"+(a.line.textClass||\"\"):a.line.textClass)||\"\"}function Qd(a,b,c,d){b.gutter&&(b.node.removeChild(b.gutter),b.gutter=null);var e=b.line.gutterMarkers;if(a.options.lineNumbers||e){var f=Ob(b),g=b.gutter=t(\"div\",null,\"CodeMirror-gutter-wrapper\",\"left: \"+(a.options.fixedGutter?\nd.fixedPos:-d.gutterTotalWidth)+\"px; width: \"+d.gutterTotalWidth+\"px\");a.display.input.setUneditable(g);f.insertBefore(g,b.text);b.line.gutterClass&&(g.className+=\" \"+b.line.gutterClass);!a.options.lineNumbers||e&&e[\"CodeMirror-linenumbers\"]||(b.lineNumber=g.appendChild(t(\"div\",Jc(a.options,c),\"CodeMirror-linenumber CodeMirror-gutter-elt\",\"left: \"+d.gutterLeft[\"CodeMirror-linenumbers\"]+\"px; width: \"+a.display.lineNumInnerWidth+\"px\")));if(e)for(b=0;b<a.options.gutters.length;++b)c=a.options.gutters[b],\n(f=e.hasOwnProperty(c)&&e[c])&&g.appendChild(t(\"div\",[f],\"CodeMirror-gutter-elt\",\"left: \"+d.gutterLeft[c]+\"px; width: \"+d.gutterWidth[c]+\"px\"))}}function vf(a,b,c,d){var e=Pd(a,b);b.text=b.node=e.pre;e.bgClass&&(b.bgClass=e.bgClass);e.textClass&&(b.textClass=e.textClass);Qc(b);Qd(a,b,c,d);Rd(a,b,d);return b.node}function Rd(a,b,c){Td(a,b.line,b,c,!0);if(b.rest)for(var d=0;d<b.rest.length;d++)Td(a,b.rest[d],b,c,!1)}function Td(a,b,c,d,e){if(b.widgets){var f=Ob(c),g=0;for(b=b.widgets;g<b.length;++g){var h=\nb[g],k=t(\"div\",[h.node],\"CodeMirror-linewidget\");h.handleMouseEvents||k.setAttribute(\"cm-ignore-events\",\"true\");var l=h,m=k,p=d;if(l.noHScroll){(c.alignable||(c.alignable=[])).push(m);var n=p.wrapperWidth;m.style.left=p.fixedPos+\"px\";l.coverGutter||(n-=p.gutterTotalWidth,m.style.paddingLeft=p.gutterTotalWidth+\"px\");m.style.width=n+\"px\"}l.coverGutter&&(m.style.zIndex=5,m.style.position=\"relative\",l.noHScroll||(m.style.marginLeft=-p.gutterTotalWidth+\"px\"));a.display.input.setUneditable(k);e&&h.above?\nf.insertBefore(k,c.gutter||c.text):f.appendChild(k);L(h,\"redraw\")}}}function Rc(a){return r(a.line,a.ch)}function Pb(a,b){return 0>y(a,b)?b:a}function Qb(a,b){return 0>y(a,b)?a:b}function Ud(a){a.state.focused||(a.display.input.focus(),xc(a))}function Rb(a){return a.options.readOnly||a.doc.cantEdit}function Sc(a,b,c,d,e){var f=a.doc;a.display.shift=!1;d||(d=f.sel);var g=sa(b),h=null;a.state.pasteIncoming&&1<d.ranges.length&&(X&&X.join(\"\\n\")==b?h=0==d.ranges.length%X.length&&ob(X,sa):g.length==d.ranges.length&&\n(h=ob(g,function(a){return[a]})));for(var k=d.ranges.length-1;0<=k;k--){var l=d.ranges[k],m=l.from(),p=l.to();l.empty()&&(c&&0<c?m=r(m.line,m.ch-c):a.state.overwrite&&!a.state.pasteIncoming&&(p=r(p.line,Math.min(u(f,p.line).text.length,p.ch+A(g).length))));var n=a.curOp.updateInput,m={from:m,to:p,text:h?h[k%h.length]:g,origin:e||(a.state.pasteIncoming?\"paste\":a.state.cutIncoming?\"cut\":\"+input\")};Oa(a.doc,m);L(a,\"inputRead\",a,m);if(b&&!a.state.pasteIncoming&&a.options.electricChars&&a.options.smartIndent&&\n100>l.head.ch&&(!k||d.ranges[k-1].head.line!=l.head.line)){l=a.getModeAt(l.head);m=ta(m);p=!1;if(l.electricChars)for(var E=0;E<l.electricChars.length;E++){if(-1<b.indexOf(l.electricChars.charAt(E))){p=pb(a,m.line,\"smart\");break}}else l.electricInput&&l.electricInput.test(u(f,m.line).text.slice(0,m.ch))&&(p=pb(a,m.line,\"smart\"));p&&L(a,\"electricInput\",a,m.line)}}Pa(a);a.curOp.updateInput=n;a.curOp.typing=!0;a.state.pasteIncoming=a.state.cutIncoming=!1}function Vd(a){for(var b=[],c=[],d=0;d<a.doc.sel.ranges.length;d++){var e=\na.doc.sel.ranges[d].head.line,e={anchor:r(e,0),head:r(e+1,0)};c.push(e);b.push(a.getRange(e.anchor,e.head))}return{text:b,ranges:c}}function Wd(a){a.setAttribute(\"autocorrect\",\"off\");a.setAttribute(\"autocapitalize\",\"off\");a.setAttribute(\"spellcheck\",\"false\")}function Tc(a){this.cm=a;this.prevInput=\"\";this.pollingFast=!1;this.polling=new bb;this.hasSelection=this.inaccurateSelection=!1;this.composing=null}function Xd(){var a=t(\"textarea\",null,null,\"position: absolute; padding: 0; width: 1px; height: 1em; outline: none\"),\nb=t(\"div\",[a],null,\"overflow: hidden; position: relative; width: 3px; height: 0px;\");J?a.style.width=\"1000px\":a.setAttribute(\"wrap\",\"off\");Qa&&(a.style.border=\"1px solid black\");Wd(a);return b}function Uc(a){this.cm=a;this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null;this.polling=new bb;this.gracePeriod=!1}function Yd(a,b){var c=Vc(a,b.line);if(!c||c.hidden)return null;var d=u(a.doc,b.line),c=Zd(c,d,b.line);(d=Y(d))&&Sb(d,b.ch);d=$d(c.map,b.ch,\"left\");d.offset=\n\"right\"==d.collapse?d.end:d.start;return d}function Ra(a,b){b&&(a.bad=!0);return a}function Tb(a,b,c){var d;if(b==a.display.lineDiv){d=a.display.lineDiv.childNodes[c];if(!d)return Ra(a.clipPos(r(a.display.viewTo-1)),!0);b=null;c=0}else for(d=b;;d=d.parentNode){if(!d||d==a.display.lineDiv)return null;if(d.parentNode&&d.parentNode==a.display.lineDiv)break}for(var e=0;e<a.display.view.length;e++){var f=a.display.view[e];if(f.node==d)return wf(f,b,c)}}function wf(a,b,c){function d(b,c,d){for(var e=-1;e<\n(l?l.length:0);e++)for(var f=0>e?k.map:l[e],g=0;g<f.length;g+=3){var h=f[g+2];if(h==b||h==c){c=F(0>e?a.line:a.rest[e]);e=f[g]+d;if(0>d||h!=b)e=f[g+(d?1:0)];return r(c,e)}}}var e=a.text.firstChild,f=!1;if(!b||!Wc(e,b))return Ra(r(F(a.line),0),!0);if(b==e&&(f=!0,b=e.childNodes[c],c=0,!b))return c=a.rest?A(a.rest):a.line,Ra(r(F(c),c.text.length),f);var g=3==b.nodeType?b:null,h=b;g||1!=b.childNodes.length||3!=b.firstChild.nodeType||(g=b.firstChild,c&&(c=g.nodeValue.length));for(;h.parentNode!=e;)h=h.parentNode;\nvar k=a.measure,l=k.maps;if(b=d(g,h,c))return Ra(b,f);e=h.nextSibling;for(g=g?g.nodeValue.length-c:0;e;e=e.nextSibling){if(b=d(e,e.firstChild,0))return Ra(r(b.line,b.ch-g),f);g+=e.textContent.length}h=h.previousSibling;for(g=c;h;h=h.previousSibling){if(b=d(h,h.firstChild,-1))return Ra(r(b.line,b.ch+g),f);g+=e.textContent.length}}function xf(a,b,c,d,e){function f(a){return function(b){return b.id==a}}function g(b){if(1==b.nodeType){var c=b.getAttribute(\"cm-text\");if(null!=c)\"\"==c&&(c=b.textContent.replace(/\\u200b/g,\n\"\")),h+=c;else{var c=b.getAttribute(\"cm-marker\"),p;if(c)b=a.findMarks(r(d,0),r(e+1,0),f(+c)),b.length&&(p=b[0].find())&&(h+=Da(a.doc,p.from,p.to).join(\"\\n\"));else if(\"false\"!=b.getAttribute(\"contenteditable\")){for(p=0;p<b.childNodes.length;p++)g(b.childNodes[p]);/^(pre|div|p)$/i.test(b.nodeName)&&(k=!0)}}}else 3==b.nodeType&&(b=b.nodeValue)&&(k&&(h+=\"\\n\",k=!1),h+=b)}for(var h=\"\",k=!1;;){g(b);if(b==c)break;b=b.nextSibling}return h}function la(a,b){this.ranges=a;this.primIndex=b}function z(a,b){this.anchor=\na;this.head=b}function Z(a,b){var c=a[b];a.sort(function(a,b){return y(a.from(),b.from())});b=D(a,c);for(c=1;c<a.length;c++){var d=a[c],e=a[c-1];if(0<=y(e.to(),d.from())){var f=Qb(e.from(),d.from()),g=Pb(e.to(),d.to()),d=e.empty()?d.from()==d.head:e.from()==e.head;c<=b&&--b;a.splice(--c,2,new z(d?g:f,d?f:g))}}return new la(a,b)}function ga(a,b){return new la([new z(a,b||a)],0)}function w(a,b){if(b.line<a.first)return r(a.first,0);var c=a.first+a.size-1;if(b.line>c)return r(c,u(a,c).text.length);var c=\nu(a,b.line).text.length,d=b.ch,c=null==d||d>c?r(b.line,c):0>d?r(b.line,0):b;return c}function qb(a,b){return b>=a.first&&b<a.first+a.size}function rb(a,b,c,d){return a.cm&&a.cm.display.shift||a.extend?(a=b.anchor,d&&(b=0>y(c,a),b!=0>y(d,a)?(a=c,c=d):b!=0>y(c,d)&&(c=d)),new z(a,c)):new z(d||c,c)}function Ub(a,b,c,d){H(a,new la([rb(a,a.sel.primary(),b,c)],0),d)}function ae(a,b,c){for(var d=[],e=0;e<a.sel.ranges.length;e++)d[e]=rb(a,a.sel.ranges[e],b[e],null);b=Z(d,a.sel.primIndex);H(a,b,c)}function Xc(a,\nb,c,d){var e=a.sel.ranges.slice(0);e[b]=c;H(a,Z(e,a.sel.primIndex),d)}function yf(a,b){var c={ranges:b.ranges,update:function(b){this.ranges=[];for(var c=0;c<b.length;c++)this.ranges[c]=new z(w(a,b[c].anchor),w(a,b[c].head))}};K(a,\"beforeSelectionChange\",a,c);a.cm&&K(a.cm,\"beforeSelectionChange\",a.cm,c);return c.ranges!=b.ranges?Z(c.ranges,c.ranges.length-1):b}function be(a,b,c){var d=a.history.done,e=A(d);e&&e.ranges?(d[d.length-1]=b,Vb(a,b,c)):H(a,b,c)}function H(a,b,c){Vb(a,b,c);b=a.sel;var d=\na.cm?a.cm.curOp.id:NaN,e=a.history,f=c&&c.origin,g;if(!(g=d==e.lastSelOp)&&(g=f&&e.lastSelOrigin==f)&&!(g=e.lastModTime==e.lastSelTime&&e.lastOrigin==f)){g=A(e.done);var h=f.charAt(0);g=\"*\"==h||\"+\"==h&&g.ranges.length==b.ranges.length&&g.somethingSelected()==b.somethingSelected()&&new Date-a.history.lastSelTime<=(a.cm?a.cm.options.historyEventDelay:500)}g?e.done[e.done.length-1]=b:Wb(b,e.done);e.lastSelTime=+new Date;e.lastSelOrigin=f;e.lastSelOp=d;c&&!1!==c.clearRedo&&ce(e.undone)}function Vb(a,\nb,c){if(S(a,\"beforeSelectionChange\")||a.cm&&S(a.cm,\"beforeSelectionChange\"))b=yf(a,b);var d=c&&c.bias||(0>y(b.primary().head,a.sel.primary().head)?-1:1);de(a,ee(a,b,d,!0));c&&!1===c.scroll||!a.cm||Pa(a.cm)}function de(a,b){b.equals(a.sel)||(a.sel=b,a.cm&&(a.cm.curOp.updateInput=a.cm.curOp.selectionChanged=!0,fe(a.cm)),L(a,\"cursorActivity\",a))}function ge(a){de(a,ee(a,a.sel,null,!1),ha)}function ee(a,b,c,d){for(var e,f=0;f<b.ranges.length;f++){var g=b.ranges[f],h=Xb(a,g.anchor,c,d),k=Xb(a,g.head,c,\nd);if(e||h!=g.anchor||k!=g.head)e||(e=b.ranges.slice(0,f)),e[f]=new z(h,k)}return e?Z(e,b.primIndex):b}function Xb(a,b,c,d){var e=!1,f=b,g=c||1;a.cantEdit=!1;a:for(;;){var h=u(a,f.line);if(h.markedSpans)for(var k=0;k<h.markedSpans.length;++k){var l=h.markedSpans[k],m=l.marker;if((null==l.from||(m.inclusiveLeft?l.from<=f.ch:l.from<f.ch))&&(null==l.to||(m.inclusiveRight?l.to>=f.ch:l.to>f.ch))){if(d&&(K(m,\"beforeCursorEnter\"),m.explicitlyCleared))if(h.markedSpans){--k;continue}else break;if(m.atomic){k=\nm.find(0>g?-1:1);if(0==y(k,f)&&(k.ch+=g,0>k.ch?k=k.line>a.first?w(a,r(k.line-1)):null:k.ch>h.text.length&&(k=k.line<a.first+a.size-1?r(k.line+1,0):null),!k)){if(e){if(!d)return Xb(a,b,c,!0);a.cantEdit=!0;return r(a.first,0)}e=!0;k=b;g=-g}f=k;continue a}}}return f}}function nb(a){a.display.input.showSelection(a.display.input.prepareSelection())}function he(a,b){for(var c=a.doc,d={},e=d.cursors=document.createDocumentFragment(),f=d.selection=document.createDocumentFragment(),g=0;g<c.sel.ranges.length;g++)if(!1!==\nb||g!=c.sel.primIndex){var h=c.sel.ranges[g],k=h.empty();if(k||a.options.showCursorWhenSelecting){var l=a,m=e,p=ma(l,h.head,\"div\",null,null,!l.options.singleCursorHeightPerLine),n=m.appendChild(t(\"div\",\" \",\"CodeMirror-cursor\"));n.style.left=p.left+\"px\";n.style.top=p.top+\"px\";n.style.height=Math.max(0,p.bottom-p.top)*l.options.cursorHeight+\"px\";p.other&&(l=m.appendChild(t(\"div\",\" \",\"CodeMirror-cursor CodeMirror-secondarycursor\")),l.style.display=\"\",l.style.left=p.other.left+\"px\",l.style.top=p.other.top+\n\"px\",l.style.height=.85*(p.other.bottom-p.other.top)+\"px\")}k||zf(a,h,f)}return d}function zf(a,b,c){function d(a,b,c,d){0>b&&(b=0);b=Math.round(b);d=Math.round(d);h.appendChild(t(\"div\",null,\"CodeMirror-selected\",\"position: absolute; left: \"+a+\"px; top: \"+b+\"px; width: \"+(null==c?m-a:c)+\"px; height: \"+(d-b)+\"px\"))}function e(b,c,e){var f=u(g,b),h=f.text.length,k,p;Af(Y(f),c||0,null==e?h:e,function(g,q,t){var u=Yb(a,r(b,g),\"div\",f,\"left\"),v,w;g==q?(v=u,t=w=u.left):(v=Yb(a,r(b,q-1),\"div\",f,\"right\"),\n\"rtl\"==t&&(t=u,u=v,v=t),t=u.left,w=v.right);null==c&&0==g&&(t=l);3<v.top-u.top&&(d(t,u.top,null,u.bottom),t=l,u.bottom<v.top&&d(t,u.bottom,null,v.top));null==e&&q==h&&(w=m);if(!k||u.top<k.top||u.top==k.top&&u.left<k.left)k=u;if(!p||v.bottom>p.bottom||v.bottom==p.bottom&&v.right>p.right)p=v;t<l+1&&(t=l);d(t,v.top,w-t,v.bottom)});return{start:k,end:p}}var f=a.display,g=a.doc,h=document.createDocumentFragment(),k=ie(a.display),l=k.left,m=Math.max(f.sizerWidth,pa(a)-f.sizer.offsetLeft)-k.right,f=b.from();\nb=b.to();if(f.line==b.line)e(f.line,f.ch,b.ch);else{var p=u(g,f.line),k=u(g,b.line),k=ia(p)==ia(k),f=e(f.line,f.ch,k?p.text.length+1:null).end;b=e(b.line,k?0:null,b.ch).start;k&&(f.top<b.top-2?(d(f.right,f.top,null,f.bottom),d(l,b.top,b.left,b.bottom)):d(f.right,f.top,b.left-f.right,f.bottom));f.bottom<b.top&&d(l,f.bottom,null,b.top)}c.appendChild(h)}function Yc(a){if(a.state.focused){var b=a.display;clearInterval(b.blinker);var c=!0;b.cursorDiv.style.visibility=\"\";0<a.options.cursorBlinkRate?b.blinker=\nsetInterval(function(){b.cursorDiv.style.visibility=(c=!c)?\"\":\"hidden\"},a.options.cursorBlinkRate):0>a.options.cursorBlinkRate&&(b.cursorDiv.style.visibility=\"hidden\")}}function fb(a,b){a.doc.mode.startState&&a.doc.frontier<a.display.viewTo&&a.state.highlight.set(b,cb(Bf,a))}function Bf(a){var b=a.doc;b.frontier<b.first&&(b.frontier=b.first);if(!(b.frontier>=a.display.viewTo)){var c=+new Date+a.options.workTime,d=Sa(b.mode,sb(a,b.frontier)),e=[];b.iter(b.frontier,Math.min(b.first+b.size,a.display.viewTo+\n500),function(f){if(b.frontier>=a.display.viewFrom){var g=f.styles,h=je(a,f,d,!0);f.styles=h.styles;var k=f.styleClasses;(h=h.classes)?f.styleClasses=h:k&&(f.styleClasses=null);k=!g||g.length!=f.styles.length||k!=h&&(!k||!h||k.bgClass!=h.bgClass||k.textClass!=h.textClass);for(h=0;!k&&h<g.length;++h)k=g[h]!=f.styles[h];k&&e.push(b.frontier);f.stateAfter=Sa(b.mode,d)}else Zc(a,f.text,d),f.stateAfter=0==b.frontier%5?Sa(b.mode,d):null;++b.frontier;if(+new Date>c)return fb(a,a.options.workDelay),!0});\ne.length&&T(a,function(){for(var b=0;b<e.length;b++)na(a,e[b],\"text\")})}}function Cf(a,b,c){for(var d,e,f=a.doc,g=c?-1:b-(a.doc.mode.innerMode?1E3:100);b>g;--b){if(b<=f.first)return f.first;var h=u(f,b-1);if(h.stateAfter&&(!c||b<=f.frontier))return b;h=aa(h.text,null,a.options.tabSize);if(null==e||d>h)e=b-1,d=h}return e}function sb(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!0;var f=Cf(a,b,c),g=f>d.first&&u(d,f-1).stateAfter,g=g?Sa(d.mode,g):Df(d.mode);d.iter(f,b,function(c){Zc(a,\nc.text,g);c.stateAfter=f==b-1||0==f%5||f>=e.viewFrom&&f<e.viewTo?Sa(d.mode,g):null;++f});c&&(d.frontier=f);return g}function Ec(a){return a.mover.offsetHeight-a.lineSpace.offsetHeight}function ie(a){if(a.cachedPaddingH)return a.cachedPaddingH;var b=U(a.measure,t(\"pre\",\"x\")),b=window.getComputedStyle?window.getComputedStyle(b):b.currentStyle,b={left:parseInt(b.paddingLeft),right:parseInt(b.paddingRight)};isNaN(b.left)||isNaN(b.right)||(a.cachedPaddingH=b);return b}function da(a){return Hd-a.display.nativeBarWidth}\nfunction pa(a){return a.display.scroller.clientWidth-da(a)-a.display.barWidth}function Nc(a){return a.display.scroller.clientHeight-da(a)-a.display.barHeight}function Zd(a,b,c){if(a.line==b)return{map:a.measure.map,cache:a.measure.cache};for(var d=0;d<a.rest.length;d++)if(a.rest[d]==b)return{map:a.measure.maps[d],cache:a.measure.caches[d]};for(d=0;d<a.rest.length;d++)if(F(a.rest[d])>c)return{map:a.measure.maps[d],cache:a.measure.caches[d],before:!0}}function Vc(a,b){if(b>=a.display.viewFrom&&b<a.display.viewTo)return a.display.view[Ca(a,\nb)];var c=a.display.externalMeasured;if(c&&b>=c.lineN&&b<c.lineN+c.size)return c}function Zb(a,b){var c=F(b),d=Vc(a,c);d&&!d.text?d=null:d&&d.changes&&Od(a,d,c,Kc(a));if(!d){var e;e=ia(b);d=F(e);e=a.display.externalMeasured=new ke(a.doc,e,d);e.lineN=d;d=e.built=Sd(a,e);e.text=d.pre;U(a.display.lineMeasure,d.pre);d=e}c=Zd(d,b,c);return{line:b,view:d,rect:null,map:c.map,cache:c.cache,before:c.before,hasHeights:!1}}function $c(a,b,c,d,e){b.before&&(c=-1);var f=c+(d||\"\");if(b.cache.hasOwnProperty(f))a=\nb.cache[f];else{b.rect||(b.rect=b.view.text.getBoundingClientRect());if(!b.hasHeights){var g=b.view,h=b.rect,k=a.options.lineWrapping,l=k&&pa(a);if(!g.measure.heights||k&&g.measure.width!=l){var m=g.measure.heights=[];if(k)for(g.measure.width=l,g=g.text.firstChild.getClientRects(),k=0;k<g.length-1;k++){var l=g[k],p=g[k+1];2<Math.abs(l.bottom-p.bottom)&&m.push((l.bottom+p.top)/2-h.top)}m.push(h.bottom-h.top)}b.hasHeights=!0}g=d;k=$d(b.map,c,g);d=k.node;h=k.start;l=k.end;c=k.collapse;var n;if(3==d.nodeType){for(m=\n0;4>m;m++){for(;h&&tb(b.line.text.charAt(k.coverStart+h));)--h;for(;k.coverStart+l<k.coverEnd&&tb(b.line.text.charAt(k.coverStart+l));)++l;if(B&&9>C&&0==h&&l==k.coverEnd-k.coverStart)n=d.parentNode.getBoundingClientRect();else if(B&&a.options.lineWrapping){var E=Ea(d,h,l).getClientRects();n=E.length?E[\"right\"==g?E.length-1:0]:ad}else n=Ea(d,h,l).getBoundingClientRect()||ad;if(n.left||n.right||0==h)break;l=h;--h;c=\"right\"}B&&11>C&&((E=!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI)||\n(null!=bd?E=bd:(m=U(a.display.measure,t(\"span\",\"x\")),E=m.getBoundingClientRect(),m=Ea(m,0,1).getBoundingClientRect(),E=bd=1<Math.abs(E.left-m.left)),E=!E),E||(E=screen.logicalXDPI/screen.deviceXDPI,m=screen.logicalYDPI/screen.deviceYDPI,n={left:n.left*E,right:n.right*E,top:n.top*m,bottom:n.bottom*m}))}else 0<h&&(c=g=\"right\"),n=a.options.lineWrapping&&1<(E=d.getClientRects()).length?E[\"right\"==g?E.length-1:0]:d.getBoundingClientRect();!(B&&9>C)||h||n&&(n.left||n.right)||(n=(n=d.parentNode.getClientRects()[0])?\n{left:n.left,right:n.left+gb(a.display),top:n.top,bottom:n.bottom}:ad);E=n.top-b.rect.top;d=n.bottom-b.rect.top;h=(E+d)/2;g=b.view.measure.heights;for(m=0;m<g.length-1&&!(h<g[m]);m++);c={left:(\"right\"==c?n.right:n.left)-b.rect.left,right:(\"left\"==c?n.left:n.right)-b.rect.left,top:m?g[m-1]:0,bottom:g[m]};n.left||n.right||(c.bogus=!0);a.options.singleCursorHeightPerLine||(c.rtop=E,c.rbottom=d);a=c;a.bogus||(b.cache[f]=a)}return{left:a.left,right:a.right,top:e?a.rtop:a.top,bottom:e?a.rbottom:a.bottom}}\nfunction $d(a,b,c){for(var d,e,f,g,h=0;h<a.length;h+=3){var k=a[h],l=a[h+1];if(b<k)e=0,f=1,g=\"left\";else if(b<l)e=b-k,f=e+1;else if(h==a.length-3||b==l&&a[h+3]>b)f=l-k,e=f-1,b>=l&&(g=\"right\");if(null!=e){d=a[h+2];k==l&&c==(d.insertLeft?\"left\":\"right\")&&(g=c);if(\"left\"==c&&0==e)for(;h&&a[h-2]==a[h-3]&&a[h-1].insertLeft;)d=a[(h-=3)+2],g=\"left\";if(\"right\"==c&&e==l-k)for(;h<a.length-3&&a[h+3]==a[h+4]&&!a[h+5].insertLeft;)d=a[(h+=3)+2],g=\"right\";break}}return{node:d,start:e,end:f,collapse:g,coverStart:k,\ncoverEnd:l}}function le(a){if(a.measure&&(a.measure.cache={},a.measure.heights=null,a.rest))for(var b=0;b<a.rest.length;b++)a.measure.caches[b]={}}function me(a){a.display.externalMeasure=null;za(a.display.lineMeasure);for(var b=0;b<a.display.view.length;b++)le(a.display.view[b])}function hb(a){me(a);a.display.cachedCharWidth=a.display.cachedTextHeight=a.display.cachedPaddingH=null;a.options.lineWrapping||(a.display.maxLineChanged=!0);a.display.lineNumChars=null}function cd(a,b,c,d){if(b.widgets)for(var e=\n0;e<b.widgets.length;++e)if(b.widgets[e].above){var f=ub(b.widgets[e]);c.top+=f;c.bottom+=f}if(\"line\"==d)return c;d||(d=\"local\");b=ea(b);b=\"local\"==d?b+a.display.lineSpace.offsetTop:b-a.display.viewOffset;if(\"page\"==d||\"window\"==d)a=a.display.lineSpace.getBoundingClientRect(),b+=a.top+(\"window\"==d?0:window.pageYOffset||(document.documentElement||document.body).scrollTop),d=a.left+(\"window\"==d?0:window.pageXOffset||(document.documentElement||document.body).scrollLeft),c.left+=d,c.right+=d;c.top+=b;\nc.bottom+=b;return c}function ne(a,b,c){if(\"div\"==c)return b;var d=b.left;b=b.top;\"page\"==c?(d-=window.pageXOffset||(document.documentElement||document.body).scrollLeft,b-=window.pageYOffset||(document.documentElement||document.body).scrollTop):\"local\"!=c&&c||(c=a.display.sizer.getBoundingClientRect(),d+=c.left,b+=c.top);a=a.display.lineSpace.getBoundingClientRect();return{left:d-a.left,top:b-a.top}}function Yb(a,b,c,d,e){d||(d=u(a.doc,b.line));var f=d;b=b.ch;d=$c(a,Zb(a,d),b,e);return cd(a,f,d,c)}\nfunction ma(a,b,c,d,e,f){function g(b,g){var h=$c(a,e,b,g?\"right\":\"left\",f);g?h.left=h.right:h.right=h.left;return cd(a,d,h,c)}function h(a,b){var c=k[b],d=c.level%2;a==dd(c)&&b&&c.level<k[b-1].level?(c=k[--b],a=ed(c)-(c.level%2?0:1),d=!0):a==ed(c)&&b<k.length-1&&c.level<k[b+1].level&&(c=k[++b],a=dd(c)-c.level%2,d=!1);return d&&a==c.to&&a>c.from?g(a-1):g(a,d)}d=d||u(a.doc,b.line);e||(e=Zb(a,d));var k=Y(d);b=b.ch;if(!k)return g(b);var l=Sb(k,b),l=h(b,l);null!=vb&&(l.other=h(b,vb));return l}function oe(a,\nb){var c=0;b=w(a.doc,b);a.options.lineWrapping||(c=gb(a.display)*b.ch);var d=u(a.doc,b.line),e=ea(d)+a.display.lineSpace.offsetTop;return{left:c,right:c,top:e,bottom:e+d.height}}function $b(a,b,c,d){a=r(a,b);a.xRel=d;c&&(a.outside=!0);return a}function fd(a,b,c){var d=a.doc;c+=a.display.viewOffset;if(0>c)return $b(d.first,0,!0,-1);var e=Ba(d,c),f=d.first+d.size-1;if(e>f)return $b(d.first+d.size-1,u(d,f).text.length,!0,1);0>b&&(b=0);for(d=u(d,e);;)if(e=Ef(a,d,e,b,c),f=(d=Aa(d,!1))&&d.find(0,!0),d&&\n(e.ch>f.from.ch||e.ch==f.from.ch&&0<e.xRel))e=F(d=f.to.line);else return e}function Ef(a,b,c,d,e){function f(d){d=ma(a,r(c,d),\"line\",b,l);h=!0;if(g>d.bottom)return d.left-k;if(g<d.top)return d.left+k;h=!1;return d.left}var g=e-ea(b),h=!1,k=2*a.display.wrapper.clientWidth,l=Zb(a,b),m=Y(b),p=b.text.length;e=ac(b);var n=bc(b),E=f(e),q=h,t=f(n),u=h;if(d>t)return $b(c,n,u,1);for(;;){if(m?n==e||n==gd(b,e,1):1>=n-e){m=d<E||d-E<=t-d?e:n;for(d-=m==e?E:t;tb(b.text.charAt(m));)++m;return $b(c,m,m==e?q:u,-1>\nd?-1:1<d?1:0)}var v=Math.ceil(p/2),w=e+v;if(m)for(var w=e,x=0;x<v;++x)w=gd(b,w,1);x=f(w);if(x>d){n=w;t=x;if(u=h)t+=1E3;p=v}else e=w,E=x,q=h,p-=v}}function xa(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(null==Fa){Fa=t(\"pre\");for(var b=0;49>b;++b)Fa.appendChild(document.createTextNode(\"x\")),Fa.appendChild(t(\"br\"));Fa.appendChild(document.createTextNode(\"x\"))}U(a.measure,Fa);b=Fa.offsetHeight/50;3<b&&(a.cachedTextHeight=b);za(a.measure);return b||1}function gb(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;\nvar b=t(\"span\",\"xxxxxxxxxx\"),c=t(\"pre\",[b]);U(a.measure,c);b=b.getBoundingClientRect();b=(b.right-b.left)/10;2<b&&(a.cachedCharWidth=b);return b||10}function Ja(a){a.curOp={cm:a,viewChanged:!1,startHeight:a.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ff};Ta?Ta.ops.push(a.curOp):a.curOp.ownsGroup=Ta={ops:[a.curOp],delayedCallbacks:[]}}\nfunction La(a){if(a=a.curOp.ownsGroup)try{var b=a.delayedCallbacks,c=0;do{for(;c<b.length;c++)b[c]();for(var d=0;d<a.ops.length;d++){var e=a.ops[d];if(e.cursorActivityHandlers)for(;e.cursorActivityCalled<e.cursorActivityHandlers.length;)e.cursorActivityHandlers[e.cursorActivityCalled++](e.cm)}}while(c<b.length)}finally{Ta=null;for(b=0;b<a.ops.length;b++)a.ops[b].cm.curOp=null;a=a.ops;for(b=0;b<a.length;b++){var e=a[b],c=e.cm,f=d=c.display;!f.scrollbarsClipped&&f.scroller.offsetWidth&&(f.nativeBarWidth=\nf.scroller.offsetWidth-f.scroller.clientWidth,f.heightForcer.style.height=da(c)+\"px\",f.sizer.style.marginBottom=-f.nativeBarWidth+\"px\",f.sizer.style.borderRightWidth=da(c)+\"px\",f.scrollbarsClipped=!0);e.updateMaxLine&&Dc(c);e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<d.viewFrom||e.scrollToPos.to.line>=d.viewTo)||d.maxLineChanged&&c.options.lineWrapping;e.update=e.mustUpdate&&new Mb(c,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}for(b=\n0;b<a.length;b++)e=a[b],e.updatedDisplay=e.mustUpdate&&Lc(e.cm,e.update);for(b=0;b<a.length;b++)if(e=a[b],c=e.cm,d=c.display,e.updatedDisplay&&Lb(c),e.barMeasure=jb(c),d.maxLineChanged&&!c.options.lineWrapping&&(f=void 0,f=d.maxLine.text.length,f=$c(c,Zb(c,d.maxLine),f,void 0),e.adjustWidthTo=f.left+3,c.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(d.scroller.clientWidth,d.sizer.offsetLeft+e.adjustWidthTo+da(c)+c.display.barWidth),e.maxScrollLeft=Math.max(0,d.sizer.offsetLeft+\ne.adjustWidthTo-pa(c))),e.updatedDisplay||e.selectionChanged)e.preparedSelection=d.input.prepareSelection();for(b=0;b<a.length;b++)e=a[b],c=e.cm,null!=e.adjustWidthTo&&(c.display.sizer.style.minWidth=e.adjustWidthTo+\"px\",e.maxScrollLeft<c.doc.scrollLeft&&Ma(c,Math.min(c.display.scroller.scrollLeft,e.maxScrollLeft),!0),c.display.maxLineChanged=!1),e.preparedSelection&&c.display.input.showSelection(e.preparedSelection),e.updatedDisplay&&Oc(c,e.barMeasure),(e.updatedDisplay||e.startHeight!=c.doc.height)&&\nNa(c,e.barMeasure),e.selectionChanged&&Yc(c),c.state.focused&&e.updateInput&&c.display.input.reset(e.typing),e.focus&&e.focus==fa()&&Ud(e.cm);for(b=0;b<a.length;b++){e=a[b];c=e.cm;d=c.display;f=c.doc;e.updatedDisplay&&Md(c,e.update);null==d.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(d.wheelStartX=d.wheelStartY=null);null==e.scrollTop||d.scroller.scrollTop==e.scrollTop&&!e.forceScroll||(f.scrollTop=Math.max(0,Math.min(d.scroller.scrollHeight-d.scroller.clientHeight,e.scrollTop)),\nd.scrollbars.setScrollTop(f.scrollTop),d.scroller.scrollTop=f.scrollTop);null==e.scrollLeft||d.scroller.scrollLeft==e.scrollLeft&&!e.forceScroll||(f.scrollLeft=Math.max(0,Math.min(d.scroller.scrollWidth-pa(c),e.scrollLeft)),d.scrollbars.setScrollLeft(f.scrollLeft),d.scroller.scrollLeft=f.scrollLeft,Bc(c));if(e.scrollToPos){var g=void 0,h=w(f,e.scrollToPos.from),g=w(f,e.scrollToPos.to),k=e.scrollToPos.margin;null==k&&(k=0);for(var l=0;5>l;l++){var m=!1,p=ma(c,h),n=g&&g!=h?ma(c,g):p,n=cc(c,Math.min(p.left,\nn.left),Math.min(p.top,n.top)-k,Math.max(p.left,n.left),Math.max(p.bottom,n.bottom)+k),q=c.doc.scrollTop,r=c.doc.scrollLeft;null!=n.scrollTop&&(lb(c,n.scrollTop),1<Math.abs(c.doc.scrollTop-q)&&(m=!0));null!=n.scrollLeft&&(Ma(c,n.scrollLeft),1<Math.abs(c.doc.scrollLeft-r)&&(m=!0));if(!m)break}g=p;e.scrollToPos.isCursor&&c.state.focused&&(ja(c,\"scrollCursorIntoView\")||(k=c.display,l=k.sizer.getBoundingClientRect(),h=null,0>g.top+l.top?h=!0:g.bottom+l.top>(window.innerHeight||document.documentElement.clientHeight)&&\n(h=!1),null==h||Gf||(g=t(\"div\",\"​\",null,\"position: absolute; top: \"+(g.top-k.viewOffset-c.display.lineSpace.offsetTop)+\"px; height: \"+(g.bottom-g.top+da(c)+k.barHeight)+\"px; left: \"+g.left+\"px; width: 2px;\"),c.display.lineSpace.appendChild(g),g.scrollIntoView(h),c.display.lineSpace.removeChild(g))))}h=e.maybeHiddenMarkers;g=e.maybeUnhiddenMarkers;if(h)for(k=0;k<h.length;++k)h[k].lines.length||K(h[k],\"hide\");if(g)for(k=0;k<g.length;++k)g[k].lines.length&&K(g[k],\"unhide\");d.wrapper.offsetHeight&&(f.scrollTop=\nc.display.scroller.scrollTop);e.changeObjs&&K(c,\"changes\",c,e.changeObjs);e.update&&e.update.finish()}}}function T(a,b){if(a.curOp)return b();Ja(a);try{return b()}finally{La(a)}}function G(a,b){return function(){if(a.curOp)return b.apply(a,arguments);Ja(a);try{return b.apply(a,arguments)}finally{La(a)}}}function M(a){return function(){if(this.curOp)return a.apply(this,arguments);Ja(this);try{return a.apply(this,arguments)}finally{La(this)}}}function N(a){return function(){var b=this.cm;if(!b||b.curOp)return a.apply(this,\narguments);Ja(b);try{return a.apply(this,arguments)}finally{La(b)}}}function ke(a,b,c){for(var d=this.line=b,e;d=Aa(d,!1);)d=d.find(1,!0).line,(e||(e=[])).push(d);this.size=(this.rest=e)?F(A(this.rest))-c+1:1;this.node=this.text=null;this.hidden=ya(a,b)}function Nb(a,b,c){var d=[],e;for(e=b;e<c;)b=new ke(a.doc,u(a.doc,e),e),e+=b.size,d.push(b);return d}function Q(a,b,c,d){null==b&&(b=a.doc.first);null==c&&(c=a.doc.first+a.doc.size);d||(d=0);var e=a.display;d&&c<e.viewTo&&(null==e.updateLineNumbers||\ne.updateLineNumbers>b)&&(e.updateLineNumbers=b);a.curOp.viewChanged=!0;if(b>=e.viewTo)ra&&Mc(a.doc,b)<e.viewTo&&qa(a);else if(c<=e.viewFrom)ra&&Ld(a.doc,c+d)>e.viewFrom?qa(a):(e.viewFrom+=d,e.viewTo+=d);else if(b<=e.viewFrom&&c>=e.viewTo)qa(a);else if(b<=e.viewFrom){var f=dc(a,c,c+d,1);f?(e.view=e.view.slice(f.index),e.viewFrom=f.lineN,e.viewTo+=d):qa(a)}else if(c>=e.viewTo)(f=dc(a,b,b,-1))?(e.view=e.view.slice(0,f.index),e.viewTo=f.lineN):qa(a);else{var f=dc(a,b,b,-1),g=dc(a,c,c+d,1);f&&g?(e.view=\ne.view.slice(0,f.index).concat(Nb(a,f.lineN,g.lineN)).concat(e.view.slice(g.index)),e.viewTo+=d):qa(a)}if(a=e.externalMeasured)c<a.lineN?a.lineN+=d:b<a.lineN+a.size&&(e.externalMeasured=null)}function na(a,b,c){a.curOp.viewChanged=!0;var d=a.display,e=a.display.externalMeasured;e&&b>=e.lineN&&b<e.lineN+e.size&&(d.externalMeasured=null);b<d.viewFrom||b>=d.viewTo||(a=d.view[Ca(a,b)],null!=a.node&&(a=a.changes||(a.changes=[]),-1==D(a,c)&&a.push(c)))}function qa(a){a.display.viewFrom=a.display.viewTo=\na.doc.first;a.display.view=[];a.display.viewOffset=0}function Ca(a,b){if(b>=a.display.viewTo)return null;b-=a.display.viewFrom;if(0>b)return null;for(var c=a.display.view,d=0;d<c.length;d++)if(b-=c[d].size,0>b)return d}function dc(a,b,c,d){var e=Ca(a,b),f=a.display.view;if(!ra||c==a.doc.first+a.doc.size)return{index:e,lineN:c};for(var g=0,h=a.display.viewFrom;g<e;g++)h+=f[g].size;if(h!=b){if(0<d){if(e==f.length-1)return null;b=h+f[e].size-b;e++}else b=h-b;c+=b}for(;Mc(a.doc,c)!=c;){if(e==(0>d?0:f.length-\n1))return null;c+=d*f[e-(0>d?1:0)].size;e+=d}return{index:e,lineN:c}}function Kd(a){a=a.display.view;for(var b=0,c=0;c<a.length;c++){var d=a[c];d.hidden||d.node&&!d.changes||++b}return b}function sf(a){function b(){d.activeTouch&&(e=setTimeout(function(){d.activeTouch=null},1E3),f=d.activeTouch,f.end=+new Date)}function c(a,b){if(null==b.left)return!0;var c=b.left-a.left,d=b.top-a.top;return 400<c*c+d*d}var d=a.display;v(d.scroller,\"mousedown\",G(a,pe));B&&11>C?v(d.scroller,\"dblclick\",G(a,function(b){if(!ja(a,\nb)){var c=Ua(a,b);!c||hd(a,b,\"gutterClick\",!0,L)||oa(a.display,b)||(O(b),b=a.findWordAt(c),Ub(a.doc,b.anchor,b.head))}})):v(d.scroller,\"dblclick\",function(b){ja(a,b)||O(b)});id||v(d.scroller,\"contextmenu\",function(b){qe(a,b)});var e,f={end:0};v(d.scroller,\"touchstart\",function(a){var b;1!=a.touches.length?b=!1:(b=a.touches[0],b=1>=b.radiusX&&1>=b.radiusY);b||(clearTimeout(e),b=+new Date,d.activeTouch={start:b,moved:!1,prev:300>=b-f.end?f:null},1==a.touches.length&&(d.activeTouch.left=a.touches[0].pageX,\nd.activeTouch.top=a.touches[0].pageY))});v(d.scroller,\"touchmove\",function(){d.activeTouch&&(d.activeTouch.moved=!0)});v(d.scroller,\"touchend\",function(e){var f=d.activeTouch;if(f&&!oa(d,e)&&null!=f.left&&!f.moved&&300>new Date-f.start){var g=a.coordsChar(d.activeTouch,\"page\"),f=!f.prev||c(f,f.prev)?new z(g,g):!f.prev.prev||c(f,f.prev.prev)?a.findWordAt(g):new z(r(g.line,0),w(a.doc,r(g.line+1,0)));a.setSelection(f.anchor,f.head);a.focus();O(e)}b()});v(d.scroller,\"touchcancel\",b);v(d.scroller,\"scroll\",\nfunction(){d.scroller.clientHeight&&(lb(a,d.scroller.scrollTop),Ma(a,d.scroller.scrollLeft,!0),K(a,\"scroll\",a))});v(d.scroller,\"mousewheel\",function(b){re(a,b)});v(d.scroller,\"DOMMouseScroll\",function(b){re(a,b)});v(d.wrapper,\"scroll\",function(){d.wrapper.scrollTop=d.wrapper.scrollLeft=0});d.dragFunctions={simple:function(b){ja(a,b)||jd(b)},start:function(b){if(B&&(!a.state.draggingText||100>+new Date-se))jd(b);else if(!ja(a,b)&&!oa(a.display,b)&&(b.dataTransfer.setData(\"Text\",a.getSelection()),b.dataTransfer.setDragImage&&\n!te)){var c=t(\"img\",null,null,\"position: fixed; left: 0; top: 0;\");c.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw\\x3d\\x3d\";ba&&(c.width=c.height=1,a.display.wrapper.appendChild(c),c._top=c.offsetTop);b.dataTransfer.setDragImage(c,0,0);ba&&c.parentNode.removeChild(c)}},drop:G(a,Hf)};var g=d.input.getField();v(g,\"keyup\",function(b){ue.call(a,b)});v(g,\"keydown\",G(a,ve));v(g,\"keypress\",G(a,we));v(g,\"focus\",cb(xc,a));v(g,\"blur\",cb(db,a))}function If(a){var b=a.display;\nif(b.lastWrapHeight!=b.wrapper.clientHeight||b.lastWrapWidth!=b.wrapper.clientWidth)b.cachedCharWidth=b.cachedTextHeight=b.cachedPaddingH=null,b.scrollbarsClipped=!1,a.setSize()}function oa(a,b){for(var c=b.target||b.srcElement;c!=a.wrapper;c=c.parentNode)if(!c||1==c.nodeType&&\"true\"==c.getAttribute(\"cm-ignore-events\")||c.parentNode==a.sizer&&c!=a.mover)return!0}function Ua(a,b,c,d){var e=a.display;if(!c&&\"true\"==(b.target||b.srcElement).getAttribute(\"cm-not-content\"))return null;var f,g;c=e.lineSpace.getBoundingClientRect();\ntry{f=b.clientX-c.left,g=b.clientY-c.top}catch(h){return null}b=fd(a,f,g);var k;d&&1==b.xRel&&(k=u(a.doc,b.line).text).length==b.ch&&(d=aa(k,k.length,a.options.tabSize)-k.length,b=r(b.line,Math.max(0,Math.round((f-ie(a.display).left)/gb(a.display))-d)));return b}function pe(a){var b=this.display;if(!(b.activeTouch&&b.input.supportsTouch()||ja(this,a)))if(b.shift=a.shiftKey,oa(b,a))J||(b.scroller.draggable=!1,setTimeout(function(){b.scroller.draggable=!0},100));else if(!hd(this,a,\"gutterClick\",!0,\nL)){var c=Ua(this,a);window.focus();switch(xe(a)){case 1:c?Jf(this,a,c):(a.target||a.srcElement)==b.scroller&&O(a);break;case 2:J&&(this.state.lastMiddleDown=+new Date);c&&Ub(this.doc,c);setTimeout(function(){b.input.focus()},20);O(a);break;case 3:id?qe(this,a):Kf(this)}}}function Jf(a,b,c){B?setTimeout(cb(Ud,a),0):a.curOp.focus=fa();var d=+new Date,e;ec&&ec.time>d-400&&0==y(ec.pos,c)?e=\"triple\":fc&&fc.time>d-400&&0==y(fc.pos,c)?(e=\"double\",ec={time:d,pos:c}):(e=\"single\",fc={time:d,pos:c});var d=\na.doc.sel,f=W?b.metaKey:b.ctrlKey,g;a.options.dragDrop&&Lf&&!Rb(a)&&\"single\"==e&&-1<(g=d.contains(c))&&!d.ranges[g].empty()?Mf(a,b,c,f):Nf(a,b,c,e,f)}function Mf(a,b,c,d){var e=a.display,f=+new Date,g=G(a,function(h){J&&(e.scroller.draggable=!1);a.state.draggingText=!1;ka(document,\"mouseup\",g);ka(e.scroller,\"drop\",g);10>Math.abs(b.clientX-h.clientX)+Math.abs(b.clientY-h.clientY)&&(O(h),!d&&+new Date-200<f&&Ub(a.doc,c),J||B&&9==C?setTimeout(function(){document.body.focus();e.input.focus()},20):e.input.focus())});\nJ&&(e.scroller.draggable=!0);a.state.draggingText=g;e.scroller.dragDrop&&e.scroller.dragDrop();v(document,\"mouseup\",g);v(e.scroller,\"drop\",g)}function Nf(a,b,c,d,e){function f(b){if(0!=y(x,b))if(x=b,\"rect\"==d){for(var e=[],f=a.options.tabSize,g=aa(u(l,c.line).text,c.ch,f),h=aa(u(l,b.line).text,b.ch,f),k=Math.min(g,h),g=Math.max(g,h),h=Math.min(c.line,b.line),q=Math.min(a.lastLine(),Math.max(c.line,b.line));h<=q;h++){var E=u(l,h).text,t=ye(E,k,f);k==g?e.push(new z(r(h,t),r(h,t))):E.length>t&&e.push(new z(r(h,\nt),r(h,ye(E,g,f))))}e.length||e.push(new z(c,c));H(l,Z(n.ranges.slice(0,p).concat(e),p),{origin:\"*mouse\",scroll:!1});a.scrollIntoView(b)}else e=m,f=e.anchor,k=b,\"single\"!=d&&(b=\"double\"==d?a.findWordAt(b):new z(r(b.line,0),w(l,r(b.line+1,0))),0<y(b.anchor,f)?(k=b.head,f=Qb(e.from(),b.anchor)):(k=b.anchor,f=Pb(e.to(),b.head))),e=n.ranges.slice(0),e[p]=new z(w(l,f),k),H(l,Z(e,p),kd)}function g(b){var c=++A,e=Ua(a,b,!0,\"rect\"==d);if(e)if(0!=y(e,x)){a.curOp.focus=fa();f(e);var h=Hc(k,l);(e.line>=h.to||\ne.line<h.from)&&setTimeout(G(a,function(){A==c&&g(b)}),150)}else{var m=b.clientY<B.top?-20:b.clientY>B.bottom?20:0;m&&setTimeout(G(a,function(){A==c&&(k.scroller.scrollTop+=m,g(b))}),50)}}function h(a){A=Infinity;O(a);k.input.focus();ka(document,\"mousemove\",F);ka(document,\"mouseup\",C);l.history.lastSelOrigin=null}var k=a.display,l=a.doc;O(b);var m,p,n=l.sel,q=n.ranges;e&&!b.shiftKey?(p=l.sel.contains(c),m=-1<p?q[p]:new z(c,c)):(m=l.sel.primary(),p=l.sel.primIndex);if(b.altKey)d=\"rect\",e||(m=new z(c,\nc)),c=Ua(a,b,!0,!0),p=-1;else if(\"double\"==d){var t=a.findWordAt(c);m=a.display.shift||l.extend?rb(l,m,t.anchor,t.head):t}else\"triple\"==d?(t=new z(r(c.line,0),w(l,r(c.line+1,0))),m=a.display.shift||l.extend?rb(l,m,t.anchor,t.head):t):m=rb(l,m,c);e?-1==p?(p=q.length,H(l,Z(q.concat([m]),p),{scroll:!1,origin:\"*mouse\"})):1<q.length&&q[p].empty()&&\"single\"==d&&!b.shiftKey?(H(l,Z(q.slice(0,p).concat(q.slice(p+1)),0)),n=l.sel):Xc(l,p,m,kd):(p=0,H(l,new la([m],0),kd),n=l.sel);var x=c,B=k.wrapper.getBoundingClientRect(),\nA=0,F=G(a,function(a){xe(a)?g(a):h(a)}),C=G(a,h);v(document,\"mousemove\",F);v(document,\"mouseup\",C)}function hd(a,b,c,d,e){try{var f=b.clientX,g=b.clientY}catch(h){return!1}if(f>=Math.floor(a.display.gutters.getBoundingClientRect().right))return!1;d&&O(b);d=a.display;var k=d.lineDiv.getBoundingClientRect();if(g>k.bottom||!S(a,c))return ld(b);g-=k.top-d.viewOffset;for(k=0;k<a.options.gutters.length;++k){var l=d.gutters.childNodes[k];if(l&&l.getBoundingClientRect().right>=f)return f=Ba(a.doc,g),e(a,\nc,a,f,a.options.gutters[k],b),ld(b)}}function Hf(a){var b=this;if(!ja(b,a)&&!oa(b.display,a)){O(a);B&&(se=+new Date);var c=Ua(b,a,!0),d=a.dataTransfer.files;if(c&&!Rb(b))if(d&&d.length&&window.FileReader&&window.File){var e=d.length,f=Array(e),g=0;a=function(a,d){var h=new FileReader;h.onload=G(b,function(){f[d]=h.result;if(++g==e){c=w(b.doc,c);var a={from:c,to:c,text:sa(f.join(\"\\n\")),origin:\"paste\"};Oa(b.doc,a);be(b.doc,ga(c,ta(a)))}});h.readAsText(a)};for(var h=0;h<e;++h)a(d[h],h)}else if(b.state.draggingText&&\n-1<b.doc.sel.contains(c))b.state.draggingText(a),setTimeout(function(){b.display.input.focus()},20);else try{if(f=a.dataTransfer.getData(\"Text\")){if(b.state.draggingText&&(W?!a.altKey:!a.ctrlKey))var k=b.listSelections();Vb(b.doc,ga(c,c));if(k)for(h=0;h<k.length;++h)wb(b.doc,\"\",k[h].anchor,k[h].head,\"drag\");b.replaceSelection(f,\"around\",\"paste\");b.display.input.focus()}}catch(l){}}}function lb(a,b){2>Math.abs(a.doc.scrollTop-b)||(a.doc.scrollTop=b,wa||Pc(a,{top:b}),a.display.scroller.scrollTop!=b&&\n(a.display.scroller.scrollTop=b),a.display.scrollbars.setScrollTop(b),wa&&Pc(a),fb(a,100))}function Ma(a,b,c){(c?b==a.doc.scrollLeft:2>Math.abs(a.doc.scrollLeft-b))||(b=Math.min(b,a.display.scroller.scrollWidth-a.display.scroller.clientWidth),a.doc.scrollLeft=b,Bc(a),a.display.scroller.scrollLeft!=b&&(a.display.scroller.scrollLeft=b),a.display.scrollbars.setScrollLeft(b))}function re(a,b){var c=ze(b),d=c.x,c=c.y,e=a.display,f=e.scroller;if(d&&f.scrollWidth>f.clientWidth||c&&f.scrollHeight>f.clientHeight){if(c&&\nW&&J){var g=b.target,h=e.view;a:for(;g!=f;g=g.parentNode)for(var k=0;k<h.length;k++)if(h[k].node==g){a.display.currentWheelTarget=g;break a}}!d||wa||ba||null==R?(c&&null!=R&&(g=c*R,h=a.doc.scrollTop,k=h+e.wrapper.clientHeight,0>g?h=Math.max(0,h+g-50):k=Math.min(a.doc.height,k+g+50),Pc(a,{top:h,bottom:k})),20>gc&&(null==e.wheelStartX?(e.wheelStartX=f.scrollLeft,e.wheelStartY=f.scrollTop,e.wheelDX=d,e.wheelDY=c,setTimeout(function(){if(null!=e.wheelStartX){var a=f.scrollLeft-e.wheelStartX,b=f.scrollTop-\ne.wheelStartY,a=b&&e.wheelDY&&b/e.wheelDY||a&&e.wheelDX&&a/e.wheelDX;e.wheelStartX=e.wheelStartY=null;a&&(R=(R*gc+a)/(gc+1),++gc)}},200)):(e.wheelDX+=d,e.wheelDY+=c))):(c&&lb(a,Math.max(0,Math.min(f.scrollTop+c*R,f.scrollHeight-f.clientHeight))),Ma(a,Math.max(0,Math.min(f.scrollLeft+d*R,f.scrollWidth-f.clientWidth))),O(b),e.wheelStartX=null)}}function hc(a,b,c){if(\"string\"==typeof b&&(b=ic[b],!b))return!1;a.display.input.ensurePolled();var d=a.display.shift,e=!1;try{Rb(a)&&(a.state.suppressEdits=\n!0),c&&(a.display.shift=!1),e=b(a)!=Ae}finally{a.display.shift=d,a.state.suppressEdits=!1}return e}function Of(a,b,c){for(var d=0;d<a.state.keyMaps.length;d++){var e=xb(b,a.state.keyMaps[d],c,a);if(e)return e}return a.options.extraKeys&&xb(b,a.options.extraKeys,c,a)||xb(b,a.options.keyMap,c,a)}function jc(a,b,c,d){var e=a.state.keySeq;if(e){if(Pf(b))return\"handled\";Qf.set(50,function(){a.state.keySeq==e&&(a.state.keySeq=null,a.display.input.reset())});b=e+\" \"+b}d=Of(a,b,d);\"multi\"==d&&(a.state.keySeq=\nb);\"handled\"==d&&L(a,\"keyHandled\",a,b,c);if(\"handled\"==d||\"multi\"==d)O(c),Yc(a);return e&&!d&&/\\'$/.test(b)?(O(c),!0):!!d}function Be(a,b){var c=Rf(b,!0);return c?b.shiftKey&&!a.state.keySeq?jc(a,\"Shift-\"+c,b,function(b){return hc(a,b,!0)})||jc(a,c,b,function(b){if(\"string\"==typeof b?/^go[A-Z]/.test(b):b.motion)return hc(a,b)}):jc(a,c,b,function(b){return hc(a,b)}):!1}function Sf(a,b,c){return jc(a,\"'\"+c+\"'\",b,function(b){return hc(a,b,!0)})}function ve(a){this.curOp.focus=fa();if(!ja(this,a)){B&&\n11>C&&27==a.keyCode&&(a.returnValue=!1);var b=a.keyCode;this.display.shift=16==b||a.shiftKey;var c=Be(this,a);ba&&(md=c?b:null,!c&&88==b&&!Ce&&(W?a.metaKey:a.ctrlKey)&&this.replaceSelection(\"\",null,\"cut\"));18!=b||/\\bCodeMirror-crosshair\\b/.test(this.display.lineDiv.className)||Tf(this)}}function Tf(a){function b(a){18!=a.keyCode&&a.altKey||(kb(c,\"CodeMirror-crosshair\"),ka(document,\"keyup\",b),ka(document,\"mouseover\",b))}var c=a.display.lineDiv;mb(c,\"CodeMirror-crosshair\");v(document,\"keyup\",b);v(document,\n\"mouseover\",b)}function ue(a){16==a.keyCode&&(this.doc.sel.shift=!1);ja(this,a)}function we(a){if(!(oa(this.display,a)||ja(this,a)||a.ctrlKey&&!a.altKey||W&&a.metaKey)){var b=a.keyCode,c=a.charCode;if(ba&&b==md)md=null,O(a);else if(!ba||a.which&&!(10>a.which)||!Be(this,a))if(b=String.fromCharCode(null==c?b:c),!Sf(this,a,b))this.display.input.onKeyPress(a)}}function Kf(a){a.state.delayingBlurEvent=!0;setTimeout(function(){a.state.delayingBlurEvent&&(a.state.delayingBlurEvent=!1,db(a))},100)}function xc(a){a.state.delayingBlurEvent&&\n(a.state.delayingBlurEvent=!1);\"nocursor\"!=a.options.readOnly&&(a.state.focused||(K(a,\"focus\",a),a.state.focused=!0,mb(a.display.wrapper,\"CodeMirror-focused\"),a.curOp||a.display.selForContextMenu==a.doc.sel||(a.display.input.reset(),J&&setTimeout(function(){a.display.input.reset(!0)},20)),a.display.input.receivedFocus()),Yc(a))}function db(a){a.state.delayingBlurEvent||(a.state.focused&&(K(a,\"blur\",a),a.state.focused=!1,kb(a.display.wrapper,\"CodeMirror-focused\")),clearInterval(a.display.blinker),\nsetTimeout(function(){a.state.focused||(a.display.shift=!1)},150))}function qe(a,b){var c;(c=oa(a.display,b))||(c=S(a,\"gutterContextMenu\")?hd(a,b,\"gutterContextMenu\",!1,K):!1);if(!c)a.display.input.onContextMenu(b)}function De(a,b){if(0>y(a,b.from))return a;if(0>=y(a,b.to))return ta(b);var c=a.line+b.text.length-(b.to.line-b.from.line)-1,d=a.ch;a.line==b.to.line&&(d+=ta(b).ch-b.to.ch);return r(c,d)}function nd(a,b){for(var c=[],d=0;d<a.sel.ranges.length;d++){var e=a.sel.ranges[d];c.push(new z(De(e.anchor,\nb),De(e.head,b)))}return Z(c,a.sel.primIndex)}function Ee(a,b,c){return a.line==b.line?r(c.line,a.ch-b.ch+c.ch):r(c.line+(a.line-b.line),a.ch)}function Fe(a,b,c){b={canceled:!1,from:b.from,to:b.to,text:b.text,origin:b.origin,cancel:function(){this.canceled=!0}};c&&(b.update=function(b,c,f,g){b&&(this.from=w(a,b));c&&(this.to=w(a,c));f&&(this.text=f);void 0!==g&&(this.origin=g)});K(a,\"beforeChange\",a,b);a.cm&&K(a.cm,\"beforeChange\",a.cm,b);return b.canceled?null:{from:b.from,to:b.to,text:b.text,origin:b.origin}}\nfunction Oa(a,b,c){if(a.cm){if(!a.cm.curOp)return G(a.cm,Oa)(a,b,c);if(a.cm.state.suppressEdits)return}if(S(a,\"beforeChange\")||a.cm&&S(a.cm,\"beforeChange\"))if(b=Fe(a,b,!0),!b)return;if(c=Ge&&!c&&Uf(a,b.from,b.to))for(var d=c.length-1;0<=d;--d)He(a,{from:c[d].from,to:c[d].to,text:d?[\"\"]:b.text});else He(a,b)}function He(a,b){if(1!=b.text.length||\"\"!=b.text[0]||0!=y(b.from,b.to)){var c=nd(a,b);Ie(a,b,c,a.cm?a.cm.curOp.id:NaN);yb(a,b,c,od(a,b));var d=[];Ga(a,function(a,c){c||-1!=D(d,a.history)||(Je(a.history,\nb),d.push(a.history));yb(a,b,null,od(a,b))})}}function kc(a,b,c){if(!a.cm||!a.cm.state.suppressEdits){for(var d=a.history,e,f=a.sel,g=\"undo\"==b?d.done:d.undone,h=\"undo\"==b?d.undone:d.done,k=0;k<g.length&&(e=g[k],c?!e.ranges||e.equals(a.sel):e.ranges);k++);if(k!=g.length){for(d.lastOrigin=d.lastSelOrigin=null;;)if(e=g.pop(),e.ranges){Wb(e,h);if(c&&!e.equals(a.sel)){H(a,e,{clearRedo:!1});return}f=e}else break;c=[];Wb(f,h);h.push({changes:c,generation:d.generation});d.generation=e.generation||++d.maxGeneration;\nd=S(a,\"beforeChange\")||a.cm&&S(a.cm,\"beforeChange\");for(k=e.changes.length-1;0<=k;--k){var l=e.changes[k];l.origin=b;if(d&&!Fe(a,l,!1)){g.length=0;break}c.push(pd(a,l));f=k?nd(a,l):A(g);yb(a,l,f,Ke(a,l));!k&&a.cm&&a.cm.scrollIntoView({from:l.from,to:ta(l)});var m=[];Ga(a,function(a,b){b||-1!=D(m,a.history)||(Je(a.history,l),m.push(a.history));yb(a,l,null,Ke(a,l))})}}}}function Le(a,b){if(0!=b&&(a.first+=b,a.sel=new la(ob(a.sel.ranges,function(a){return new z(r(a.anchor.line+b,a.anchor.ch),r(a.head.line+\nb,a.head.ch))}),a.sel.primIndex),a.cm)){Q(a.cm,a.first,a.first-b,b);for(var c=a.cm.display,d=c.viewFrom;d<c.viewTo;d++)na(a.cm,d,\"gutter\")}}function yb(a,b,c,d){if(a.cm&&!a.cm.curOp)return G(a.cm,yb)(a,b,c,d);if(b.to.line<a.first)Le(a,b.text.length-1-(b.to.line-b.from.line));else if(!(b.from.line>a.lastLine())){if(b.from.line<a.first){var e=b.text.length-1-(a.first-b.from.line);Le(a,e);b={from:r(a.first,0),to:r(b.to.line+e,b.to.ch),text:[A(b.text)],origin:b.origin}}e=a.lastLine();b.to.line>e&&(b=\n{from:b.from,to:r(e,u(a,e).text.length),text:[b.text[0]],origin:b.origin});b.removed=Da(a,b.from,b.to);c||(c=nd(a,b));a.cm?Vf(a.cm,b,d):qd(a,b,d);Vb(a,c,ha)}}function Vf(a,b,c){var d=a.doc,e=a.display,f=b.from,g=b.to,h=!1,k=f.line;a.options.lineWrapping||(k=F(ia(u(d,f.line))),d.iter(k,g.line+1,function(a){if(a==e.maxLine)return h=!0}));-1<d.sel.contains(b.from,b.to)&&fe(a);qd(d,b,c,Id(a));a.options.lineWrapping||(d.iter(k,f.line+b.text.length,function(a){var b=Kb(a);b>e.maxLineLength&&(e.maxLine=\na,e.maxLineLength=b,e.maxLineChanged=!0,h=!1)}),h&&(a.curOp.updateMaxLine=!0));d.frontier=Math.min(d.frontier,f.line);fb(a,400);c=b.text.length-(g.line-f.line)-1;b.full?Q(a):f.line!=g.line||1!=b.text.length||Me(a.doc,b)?Q(a,f.line,g.line+1,c):na(a,f.line,\"text\");c=S(a,\"changes\");if((d=S(a,\"change\"))||c)b={from:f,to:g,text:b.text,removed:b.removed,origin:b.origin},d&&L(a,\"change\",a,b),c&&(a.curOp.changeObjs||(a.curOp.changeObjs=[])).push(b);a.display.selForContextMenu=null}function wb(a,b,c,d,e){d||\n(d=c);if(0>y(d,c)){var f=d;d=c;c=f}\"string\"==typeof b&&(b=sa(b));Oa(a,{from:c,to:d,text:b,origin:e})}function cc(a,b,c,d,e){var f=a.display,g=xa(a.display);0>c&&(c=0);var h=a.curOp&&null!=a.curOp.scrollTop?a.curOp.scrollTop:f.scroller.scrollTop,k=Nc(a),l={};e-c>k&&(e=c+k);var m=a.doc.height+Ec(f),p=c<g,g=e>m-g;c<h?l.scrollTop=p?0:c:e>h+k&&(c=Math.min(c,(g?m:e)-k),c!=h&&(l.scrollTop=c));h=a.curOp&&null!=a.curOp.scrollLeft?a.curOp.scrollLeft:f.scroller.scrollLeft;a=pa(a)-(a.options.fixedGutter?f.gutters.offsetWidth:\n0);(f=d-b>a)&&(d=b+a);10>b?l.scrollLeft=0:b<h?l.scrollLeft=Math.max(0,b-(f?0:10)):d>a+h-3&&(l.scrollLeft=d+(f?0:10)-a);return l}function lc(a,b,c){null==b&&null==c||mc(a);null!=b&&(a.curOp.scrollLeft=(null==a.curOp.scrollLeft?a.doc.scrollLeft:a.curOp.scrollLeft)+b);null!=c&&(a.curOp.scrollTop=(null==a.curOp.scrollTop?a.doc.scrollTop:a.curOp.scrollTop)+c)}function Pa(a){mc(a);var b=a.getCursor(),c=b,d=b;a.options.lineWrapping||(c=b.ch?r(b.line,b.ch-1):b,d=r(b.line,b.ch+1));a.curOp.scrollToPos={from:c,\nto:d,margin:a.options.cursorScrollMargin,isCursor:!0}}function mc(a){var b=a.curOp.scrollToPos;if(b){a.curOp.scrollToPos=null;var c=oe(a,b.from),d=oe(a,b.to),b=cc(a,Math.min(c.left,d.left),Math.min(c.top,d.top)-b.margin,Math.max(c.right,d.right),Math.max(c.bottom,d.bottom)+b.margin);a.scrollTo(b.scrollLeft,b.scrollTop)}}function pb(a,b,c,d){var e=a.doc,f;null==c&&(c=\"add\");\"smart\"==c&&(e.mode.indent?f=sb(a,b):c=\"prev\");var g=a.options.tabSize,h=u(e,b),k=aa(h.text,null,g);h.stateAfter&&(h.stateAfter=\nnull);var l=h.text.match(/^\\s*/)[0],m;if(!d&&!/\\S/.test(h.text))m=0,c=\"not\";else if(\"smart\"==c&&(m=e.mode.indent(f,h.text.slice(l.length),h.text),m==Ae||150<m)){if(!d)return;c=\"prev\"}\"prev\"==c?m=b>e.first?aa(u(e,b-1).text,null,g):0:\"add\"==c?m=k+a.options.indentUnit:\"subtract\"==c?m=k-a.options.indentUnit:\"number\"==typeof c&&(m=k+c);m=Math.max(0,m);c=\"\";d=0;if(a.options.indentWithTabs)for(a=Math.floor(m/g);a;--a)d+=g,c+=\"\\t\";d<m&&(c+=Ne(m-d));if(c!=l)return wb(e,c,r(b,0),r(b,l.length),\"+input\"),h.stateAfter=\nnull,!0;for(a=0;a<e.sel.ranges.length;a++)if(g=e.sel.ranges[a],g.head.line==b&&g.head.ch<l.length){d=r(b,l.length);Xc(e,a,new z(d,d));break}}function nc(a,b,c,d){var e=b,f=b;\"number\"==typeof b?f=u(a,Math.max(a.first,Math.min(b,a.first+a.size-1))):e=F(b);if(null==e)return null;d(f,e)&&a.cm&&na(a.cm,e,c);return f}function Va(a,b){for(var c=a.doc.sel.ranges,d=[],e=0;e<c.length;e++){for(var f=b(c[e]);d.length&&0>=y(f.from,A(d).to);){var g=d.pop();if(0>y(g.from,f.from)){f.from=g.from;break}}d.push(f)}T(a,\nfunction(){for(var b=d.length-1;0<=b;b--)wb(a.doc,\"\",d[b].from,d[b].to,\"+delete\");Pa(a)})}function rd(a,b,c,d,e){function f(b){var d=(e?gd:Oe)(l,h,c,!0);if(null==d){if(b=!b)b=g+c,b<a.first||b>=a.first+a.size?b=m=!1:(g=b,b=l=u(a,b));if(b)h=e?(0>c?bc:ac)(l):0>c?l.text.length:0;else return m=!1}else h=d;return!0}var g=b.line,h=b.ch,k=c,l=u(a,g),m=!0;if(\"char\"==d)f();else if(\"column\"==d)f(!0);else if(\"word\"==d||\"group\"==d){var p=null;d=\"group\"==d;b=a.cm&&a.cm.getHelper(b,\"wordChars\");for(var n=!0;!(0>\nc)||f(!n);n=!1){var q=l.text.charAt(h)||\"\\n\",q=oc(q,b)?\"w\":d&&\"\\n\"==q?\"n\":!d||/\\s/.test(q)?null:\"p\";!d||n||q||(q=\"s\");if(p&&p!=q){0>c&&(c=1,f());break}q&&(p=q);if(0<c&&!f(!n))break}}k=Xb(a,r(g,h),k,!0);m||(k.hitSide=!0);return k}function Pe(a,b,c,d){var e=a.doc,f=b.left,g;\"page\"==d?(g=Math.min(a.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),g=b.top+c*(g-(0>c?1.5:.5)*xa(a.display))):\"line\"==d&&(g=0<c?b.bottom+3:b.top-3);for(;;){b=fd(a,f,g);if(!b.outside)break;\nif(0>c?0>=g:g>=e.height){b.hitSide=!0;break}g+=5*c}return b}function x(a,b,c,d){q.defaults[a]=b;c&&(Ka[a]=d?function(a,b,d){d!=Fd&&c(a,b,d)}:c)}function Wf(a){var b=a.split(/-(?!$)/);a=b[b.length-1];for(var c,d,e,f,g=0;g<b.length-1;g++){var h=b[g];if(/^(cmd|meta|m)$/i.test(h))f=!0;else if(/^a(lt)?$/i.test(h))c=!0;else if(/^(c|ctrl|control)$/i.test(h))d=!0;else if(/^s(hift)$/i.test(h))e=!0;else throw Error(\"Unrecognized modifier name: \"+h);}c&&(a=\"Alt-\"+a);d&&(a=\"Ctrl-\"+a);f&&(a=\"Cmd-\"+a);e&&(a=\"Shift-\"+\na);return a}function pc(a){return\"string\"==typeof a?ua[a]:a}function Wa(a,b,c,d,e){if(d&&d.shared)return Xf(a,b,c,d,e);if(a.cm&&!a.cm.curOp)return G(a.cm,Wa)(a,b,c,d,e);var f=new Ha(a,e);e=y(b,c);d&&V(d,f,!1);if(0<e||0==e&&!1!==f.clearWhenEmpty)return f;f.replacedWith&&(f.collapsed=!0,f.widgetNode=t(\"span\",[f.replacedWith],\"CodeMirror-widget\"),d.handleMouseEvents||f.widgetNode.setAttribute(\"cm-ignore-events\",\"true\"),d.insertLeft&&(f.widgetNode.insertLeft=!0));if(f.collapsed){if(Qe(a,b.line,b,c,f)||\nb.line!=c.line&&Qe(a,c.line,b,c,f))throw Error(\"Inserting collapsed marker partially overlapping an existing one\");ra=!0}f.addToHistory&&Ie(a,{from:b,to:c,origin:\"markText\"},a.sel,NaN);var g=b.line,h=a.cm,k;a.iter(g,c.line+1,function(a){h&&f.collapsed&&!h.options.lineWrapping&&ia(a)==h.display.maxLine&&(k=!0);f.collapsed&&g!=b.line&&ca(a,0);var d=new qc(f,g==b.line?b.ch:null,g==c.line?c.ch:null);a.markedSpans=a.markedSpans?a.markedSpans.concat([d]):[d];d.marker.attachLine(a);++g});f.collapsed&&a.iter(b.line,\nc.line+1,function(b){ya(a,b)&&ca(b,0)});f.clearOnEnter&&v(f,\"beforeCursorEnter\",function(){f.clear()});f.readOnly&&(Ge=!0,(a.history.done.length||a.history.undone.length)&&a.clearHistory());f.collapsed&&(f.id=++sd,f.atomic=!0);if(h){k&&(h.curOp.updateMaxLine=!0);if(f.collapsed)Q(h,b.line,c.line+1);else if(f.className||f.title||f.startStyle||f.endStyle||f.css)for(d=b.line;d<=c.line;d++)na(h,d,\"text\");f.atomic&&ge(h.doc);L(h,\"markerAdded\",h,f)}return f}function Xf(a,b,c,d,e){d=V(d);d.shared=!1;var f=\n[Wa(a,b,c,d,e)],g=f[0],h=d.widgetNode;Ga(a,function(a){h&&(d.widgetNode=h.cloneNode(!0));f.push(Wa(a,w(a,b),w(a,c),d,e));for(var l=0;l<a.linked.length;++l)if(a.linked[l].isParent)return;g=A(f)});return new rc(f,g)}function Re(a){return a.findMarks(r(a.first,0),a.clipPos(r(a.lastLine())),function(a){return a.parent})}function Yf(a){for(var b=0;b<a.length;b++){var c=a[b],d=[c.primary.doc];Ga(c.primary.doc,function(a){d.push(a)});for(var e=0;e<c.markers.length;e++){var f=c.markers[e];-1==D(d,f.doc)&&\n(f.parent=null,c.markers.splice(e--,1))}}}function qc(a,b,c){this.marker=a;this.from=b;this.to=c}function zb(a,b){if(a)for(var c=0;c<a.length;++c){var d=a[c];if(d.marker==b)return d}}function od(a,b){if(b.full)return null;var c=qb(a,b.from.line)&&u(a,b.from.line).markedSpans,d=qb(a,b.to.line)&&u(a,b.to.line).markedSpans;if(!c&&!d)return null;var e=b.from.ch,f=b.to.ch,g=0==y(b.from,b.to);if(c)for(var h=0,k;h<c.length;++h){var l=c[h],m=l.marker;if(null==l.from||(m.inclusiveLeft?l.from<=e:l.from<e)||\n!(l.from!=e||\"bookmark\"!=m.type||g&&l.marker.insertLeft)){var p=null==l.to||(m.inclusiveRight?l.to>=e:l.to>e);(k||(k=[])).push(new qc(m,l.from,p?null:l.to))}}c=k;if(d)for(var h=0,n;h<d.length;++h)if(k=d[h],l=k.marker,null==k.to||(l.inclusiveRight?k.to>=f:k.to>f)||k.from==f&&\"bookmark\"==l.type&&(!g||k.marker.insertLeft))m=null==k.from||(l.inclusiveLeft?k.from<=f:k.from<f),(n||(n=[])).push(new qc(l,m?null:k.from-f,null==k.to?null:k.to-f));d=n;g=1==b.text.length;n=A(b.text).length+(g?e:0);if(c)for(f=\n0;f<c.length;++f)if(h=c[f],null==h.to)(k=zb(d,h.marker),k)?g&&(h.to=null==k.to?null:k.to+n):h.to=e;if(d)for(f=0;f<d.length;++f)h=d[f],null!=h.to&&(h.to+=n),null==h.from?(k=zb(c,h.marker),k||(h.from=n,g&&(c||(c=[])).push(h))):(h.from+=n,g&&(c||(c=[])).push(h));c&&(c=Se(c));d&&d!=c&&(d=Se(d));e=[c];if(!g){var g=b.text.length-2,q;if(0<g&&c)for(f=0;f<c.length;++f)null==c[f].to&&(q||(q=[])).push(new qc(c[f].marker,null,null));for(f=0;f<g;++f)e.push(q);e.push(d)}return e}function Se(a){for(var b=0;b<a.length;++b){var c=\na[b];null!=c.from&&c.from==c.to&&!1!==c.marker.clearWhenEmpty&&a.splice(b--,1)}return a.length?a:null}function Ke(a,b){var c;if(c=b[\"spans_\"+a.id]){for(var d=0,e=[];d<b.text.length;++d)e.push(Zf(c[d]));c=e}else c=null;d=od(a,b);if(!c)return d;if(!d)return c;for(e=0;e<c.length;++e){var f=c[e],g=d[e];if(f&&g){var h=0;a:for(;h<g.length;++h){for(var k=g[h],l=0;l<f.length;++l)if(f[l].marker==k.marker)continue a;f.push(k)}}else g&&(c[e]=g)}return c}function Uf(a,b,c){var d=null;a.iter(b.line,c.line+1,function(a){if(a.markedSpans)for(var b=\n0;b<a.markedSpans.length;++b){var c=a.markedSpans[b].marker;!c.readOnly||d&&-1!=D(d,c)||(d||(d=[])).push(c)}});if(!d)return null;a=[{from:b,to:c}];for(b=0;b<d.length;++b){c=d[b];for(var e=c.find(0),f=0;f<a.length;++f){var g=a[f];if(!(0>y(g.to,e.from)||0<y(g.from,e.to))){var h=[f,1],k=y(g.from,e.from),l=y(g.to,e.to);(0>k||!c.inclusiveLeft&&!k)&&h.push({from:g.from,to:e.from});(0<l||!c.inclusiveRight&&!l)&&h.push({from:e.to,to:g.to});a.splice.apply(a,h);f+=h.length-1}}}return a}function Te(a){var b=\na.markedSpans;if(b){for(var c=0;c<b.length;++c)b[c].marker.detachLine(a);a.markedSpans=null}}function Ue(a,b){if(b){for(var c=0;c<b.length;++c)b[c].marker.attachLine(a);a.markedSpans=b}}function Ve(a,b){var c=a.lines.length-b.lines.length;if(0!=c)return c;var c=a.find(),d=b.find(),e=y(c.from,d.from)||(a.inclusiveLeft?-1:0)-(b.inclusiveLeft?-1:0);return e?-e:(c=y(c.to,d.to)||(a.inclusiveRight?1:0)-(b.inclusiveRight?1:0))?c:b.id-a.id}function Aa(a,b){var c=ra&&a.markedSpans,d;if(c)for(var e,f=0;f<c.length;++f)e=\nc[f],e.marker.collapsed&&null==(b?e.from:e.to)&&(!d||0>Ve(d,e.marker))&&(d=e.marker);return d}function Qe(a,b,c,d,e){a=u(a,b);if(a=ra&&a.markedSpans)for(b=0;b<a.length;++b){var f=a[b];if(f.marker.collapsed){var g=f.marker.find(0),h=y(g.from,c)||(f.marker.inclusiveLeft?-1:0)-(e.inclusiveLeft?-1:0),k=y(g.to,d)||(f.marker.inclusiveRight?1:0)-(e.inclusiveRight?1:0);if(!(0<=h&&0>=k||0>=h&&0<=k)&&(0>=h&&(0<y(g.to,c)||f.marker.inclusiveRight&&e.inclusiveLeft)||0<=h&&(0>y(g.from,d)||f.marker.inclusiveLeft&&\ne.inclusiveRight)))return!0}}}function ia(a){for(var b;b=Aa(a,!0);)a=b.find(-1,!0).line;return a}function Mc(a,b){var c=u(a,b),d=ia(c);return c==d?b:F(d)}function Ld(a,b){if(b>a.lastLine())return b;var c=u(a,b),d;if(!ya(a,c))return b;for(;d=Aa(c,!1);)c=d.find(1,!0).line;return F(c)+1}function ya(a,b){var c=ra&&b.markedSpans;if(c)for(var d,e=0;e<c.length;++e)if(d=c[e],d.marker.collapsed&&(null==d.from||!d.marker.widgetNode&&0==d.from&&d.marker.inclusiveLeft&&td(a,b,d)))return!0}function td(a,b,c){if(null==\nc.to)return b=c.marker.find(1,!0),td(a,b.line,zb(b.line.markedSpans,c.marker));if(c.marker.inclusiveRight&&c.to==b.text.length)return!0;for(var d,e=0;e<b.markedSpans.length;++e)if(d=b.markedSpans[e],d.marker.collapsed&&!d.marker.widgetNode&&d.from==c.to&&(null==d.to||d.to!=c.from)&&(d.marker.inclusiveLeft||c.marker.inclusiveRight)&&td(a,b,d))return!0}function ub(a){if(null!=a.height)return a.height;var b=a.doc.cm;if(!b)return 0;if(!Wc(document.body,a.node)){var c=\"position: relative;\";a.coverGutter&&\n(c+=\"margin-left: -\"+b.display.gutters.offsetWidth+\"px;\");a.noHScroll&&(c+=\"width: \"+b.display.wrapper.clientWidth+\"px;\");U(b.display.measure,t(\"div\",[a.node],null,c))}return a.height=a.node.offsetHeight}function $f(a,b,c,d){var e=new sc(a,c,d),f=a.cm;f&&e.noHScroll&&(f.display.alignWidgets=!0);nc(a,b,\"widget\",function(b){var c=b.widgets||(b.widgets=[]);null==e.insertAt?c.push(e):c.splice(Math.min(c.length-1,Math.max(0,e.insertAt)),0,e);e.line=b;f&&!ya(a,b)&&(c=ea(b)<a.scrollTop,ca(b,b.height+ub(e)),\nc&&lc(f,null,e.height),f.curOp.forceUpdate=!0);return!0});return e}function We(a,b){if(a)for(;;){var c=a.match(/(?:^|\\s+)line-(background-)?(\\S+)/);if(!c)break;a=a.slice(0,c.index)+a.slice(c.index+c[0].length);var d=c[1]?\"bgClass\":\"textClass\";null==b[d]?b[d]=c[2]:(new RegExp(\"(?:^|s)\"+c[2]+\"(?:$|s)\")).test(b[d])||(b[d]+=\" \"+c[2])}return a}function Xe(a,b){if(a.blankLine)return a.blankLine(b);if(a.innerMode){var c=q.innerMode(a,b);if(c.mode.blankLine)return c.mode.blankLine(c.state)}}function ud(a,\nb,c,d){for(var e=0;10>e;e++){d&&(d[0]=q.innerMode(a,c).mode);var f=a.token(b,c);if(b.pos>b.start)return f}throw Error(\"Mode \"+a.name+\" failed to advance stream.\");}function Ye(a,b,c,d){function e(a){return{start:m.start,end:m.pos,string:m.current(),type:h||null,state:a?Sa(f.mode,l):l}}var f=a.doc,g=f.mode,h;b=w(f,b);var k=u(f,b.line),l=sb(a,b.line,c),m=new tc(k.text,a.options.tabSize),p;for(d&&(p=[]);(d||m.pos<b.ch)&&!m.eol();)m.start=m.pos,h=ud(g,m,l),d&&p.push(e(!0));return d?p:e()}function Ze(a,\nb,c,d,e,f,g){var h=c.flattenSpans;null==h&&(h=a.options.flattenSpans);var k=0,l=null,m=new tc(b,a.options.tabSize),p,n=a.options.addModeClass&&[null];for(\"\"==b&&We(Xe(c,d),f);!m.eol();){m.pos>a.options.maxHighlightLength?(h=!1,g&&Zc(a,b,d,m.pos),m.pos=b.length,p=null):p=We(ud(c,m,d,n),f);if(n){var q=n[0].name;q&&(p=\"m-\"+(p?q+\" \"+p:q))}if(!h||l!=p){for(;k<m.start;)k=Math.min(m.start,k+5E4),e(k,l);l=p}m.start=m.pos}for(;k<m.pos;)a=Math.min(m.pos,k+5E4),e(a,l),k=a}function je(a,b,c,d){var e=[a.state.modeGen],\nf={};Ze(a,b.text,a.doc.mode,c,function(a,b){e.push(a,b)},f,d);for(c=0;c<a.state.overlays.length;++c){var g=a.state.overlays[c],h=1,k=0;Ze(a,b.text,g.mode,!0,function(a,b){for(var c=h;k<a;){var d=e[h];d>a&&e.splice(h,1,a,e[h+1],d);h+=2;k=Math.min(a,d)}if(b)if(g.opaque)e.splice(c,h-c,a,\"cm-overlay \"+b),h=c+2;else for(;c<h;c+=2)d=e[c+1],e[c+1]=(d?d+\" \":\"\")+\"cm-overlay \"+b},f)}return{styles:e,classes:f.bgClass||f.textClass?f:null}}function $e(a,b,c){if(!b.styles||b.styles[0]!=a.state.modeGen){var d=je(a,\nb,b.stateAfter=sb(a,F(b)));b.styles=d.styles;d.classes?b.styleClasses=d.classes:b.styleClasses&&(b.styleClasses=null);c===a.doc.frontier&&a.doc.frontier++}return b.styles}function Zc(a,b,c,d){var e=a.doc.mode,f=new tc(b,a.options.tabSize);f.start=f.pos=d||0;for(\"\"==b&&Xe(e,c);!f.eol()&&f.pos<=a.options.maxHighlightLength;)ud(e,f,c),f.start=f.pos}function af(a,b){if(!a||/^\\s*$/.test(a))return null;var c=b.addModeClass?ag:bg;return c[a]||(c[a]=a.replace(/\\S+/g,\"cm-$\\x26\"))}function Sd(a,b){var c=t(\"span\",\nnull,null,J?\"padding-right: .1px\":null),c={pre:t(\"pre\",[c]),content:c,col:0,pos:0,cm:a,splitSpaces:(B||J)&&a.getOption(\"lineWrapping\")};b.measure={};for(var d=0;d<=(b.rest?b.rest.length:0);d++){var e=d?b.rest[d-1]:b.line,f;c.pos=0;c.addToken=cg;var g;if(null!=vd)g=vd;else{g=U(a.display.measure,document.createTextNode(\"AخA\"));var h=Ea(g,0,1).getBoundingClientRect();g=h&&h.left!=h.right?vd=3>Ea(g,1,2).getBoundingClientRect().right-h.right:!1}g&&(f=Y(e))&&(c.addToken=dg(c.addToken,f));c.map=[];h=b!=\na.display.externalMeasured&&F(e);a:{g=c;var h=$e(a,e,h),k=e.markedSpans,l=e.text,m=0;if(k)for(var p=l.length,n=0,q=1,r=\"\",u=void 0,v=void 0,w=0,x=void 0,y=void 0,A=void 0,C=void 0,z=void 0;;){if(w==n){for(var x=y=A=C=v=\"\",z=null,w=Infinity,G=[],H=0;H<k.length;++H){var I=k[H],D=I.marker;\"bookmark\"==D.type&&I.from==n&&D.widgetNode?G.push(D):I.from<=n&&(null==I.to||I.to>n||D.collapsed&&I.to==n&&I.from==n)?(null!=I.to&&I.to!=n&&w>I.to&&(w=I.to,y=\"\"),D.className&&(x+=\" \"+D.className),D.css&&(v=D.css),\nD.startStyle&&I.from==n&&(A+=\" \"+D.startStyle),D.endStyle&&I.to==w&&(y+=\" \"+D.endStyle),D.title&&!C&&(C=D.title),D.collapsed&&(!z||0>Ve(z.marker,D))&&(z=I)):I.from>n&&w>I.from&&(w=I.from)}if(z&&(z.from||0)==n){bf(g,(null==z.to?p+1:z.to)-n,z.marker,null==z.from);if(null==z.to)break a;z.to==n&&(z=!1)}if(!z&&G.length)for(H=0;H<G.length;++H)bf(g,0,G[H])}if(n>=p)break;for(G=Math.min(p,w);;){if(r){H=n+r.length;z||(I=H>G?r.slice(0,G-n):r,g.addToken(g,I,u?u+x:x,A,n+I.length==w?y:\"\",C,v));if(H>=G){r=r.slice(G-\nn);n=G;break}n=H;A=\"\"}r=l.slice(m,m=h[q++]);u=af(h[q++],g.cm.options)}}else for(var q=1;q<h.length;q+=2)g.addToken(g,l.slice(m,m=h[q]),af(h[q+1],g.cm.options))}e.styleClasses&&(e.styleClasses.bgClass&&(c.bgClass=wd(e.styleClasses.bgClass,c.bgClass||\"\")),e.styleClasses.textClass&&(c.textClass=wd(e.styleClasses.textClass,c.textClass||\"\")));0==c.map.length&&c.map.push(0,0,c.content.appendChild(eg(a.display.measure)));0==d?(b.measure.map=c.map,b.measure.cache={}):((b.measure.maps||(b.measure.maps=[])).push(c.map),\n(b.measure.caches||(b.measure.caches=[])).push({}))}J&&/\\bcm-tab\\b/.test(c.content.lastChild.className)&&(c.content.className=\"cm-tab-wrap-hack\");K(a,\"renderLine\",a,b.line,c.pre);c.pre.className&&(c.textClass=wd(c.pre.className,c.textClass||\"\"));return c}function cg(a,b,c,d,e,f,g){if(b){var h=a.splitSpaces?b.replace(/ {3,}/g,fg):b,k=a.cm.state.specialChars,l=!1;if(k.test(b))for(var m=document.createDocumentFragment(),p=0;;){k.lastIndex=p;var n=k.exec(b),q=n?n.index-p:b.length-p;if(q){var r=document.createTextNode(h.slice(p,\np+q));B&&9>C?m.appendChild(t(\"span\",[r])):m.appendChild(r);a.map.push(a.pos,a.pos+q,r);a.col+=q;a.pos+=q}if(!n)break;p+=q+1;\"\\t\"==n[0]?(r=a.cm.options.tabSize,n=r-a.col%r,r=m.appendChild(t(\"span\",Ne(n),\"cm-tab\")),r.setAttribute(\"role\",\"presentation\"),r.setAttribute(\"cm-text\",\"\\t\"),a.col+=n):(r=a.cm.options.specialCharPlaceholder(n[0]),r.setAttribute(\"cm-text\",n[0]),B&&9>C?m.appendChild(t(\"span\",[r])):m.appendChild(r),a.col+=1);a.map.push(a.pos,a.pos+1,r);a.pos++}else{a.col+=b.length;var m=document.createTextNode(h);\na.map.push(a.pos,a.pos+b.length,m);B&&9>C&&(l=!0);a.pos+=b.length}if(c||d||e||l||g)return b=c||\"\",d&&(b+=d),e&&(b+=e),d=t(\"span\",[m],b,g),f&&(d.title=f),a.content.appendChild(d);a.content.appendChild(m)}}function fg(a){for(var b=\" \",c=0;c<a.length-2;++c)b+=c%2?\" \":\" \";return b+\" \"}function dg(a,b){return function(c,d,e,f,g,h,k){e=e?e+\" cm-force-border\":\"cm-force-border\";for(var l=c.pos,m=l+d.length;;){for(var p=0;p<b.length;p++){var n=b[p];if(n.to>l&&n.from<=l)break}if(n.to>=m)return a(c,d,e,f,g,\nh,k);a(c,d.slice(0,n.to-l),e,f,null,h,k);f=null;d=d.slice(n.to-l);l=n.to}}}function bf(a,b,c,d){var e=!d&&c.widgetNode;e&&a.map.push(a.pos,a.pos+b,e);!d&&a.cm.display.input.needsContentAttribute&&(e||(e=a.content.appendChild(document.createElement(\"span\"))),e.setAttribute(\"cm-marker\",c.id));e&&(a.cm.display.input.setUneditable(e),a.content.appendChild(e));a.pos+=b}function Me(a,b){return 0==b.from.ch&&0==b.to.ch&&\"\"==A(b.text)&&(!a.cm||a.cm.options.wholeLineUpdateBefore)}function qd(a,b,c,d){function e(a,\nc,e){a.text=c;a.stateAfter&&(a.stateAfter=null);a.styles&&(a.styles=null);null!=a.order&&(a.order=null);Te(a);Ue(a,e);c=d?d(a):1;c!=a.height&&ca(a,c);L(a,\"change\",a,b)}function f(a,b){for(var e=a,f=[];e<b;++e)f.push(new Ab(k[e],c?c[e]:null,d));return f}var g=b.from,h=b.to,k=b.text,l=u(a,g.line),m=u(a,h.line),p=A(k),n=c?c[k.length-1]:null,q=h.line-g.line;if(b.full)a.insert(0,f(0,k.length)),a.remove(k.length,a.size-k.length);else if(Me(a,b)){var r=f(0,k.length-1);e(m,m.text,n);q&&a.remove(g.line,q);\nr.length&&a.insert(g.line,r)}else l==m?1==k.length?e(l,l.text.slice(0,g.ch)+p+l.text.slice(h.ch),n):(r=f(1,k.length-1),r.push(new Ab(p+l.text.slice(h.ch),n,d)),e(l,l.text.slice(0,g.ch)+k[0],c?c[0]:null),a.insert(g.line+1,r)):1==k.length?(e(l,l.text.slice(0,g.ch)+k[0]+m.text.slice(h.ch),c?c[0]:null),a.remove(g.line+1,q)):(e(l,l.text.slice(0,g.ch)+k[0],c?c[0]:null),e(m,p+m.text.slice(h.ch),n),r=f(1,k.length-1),1<q&&a.remove(g.line+1,q-1),a.insert(g.line+1,r));L(a,\"change\",a,b)}function Bb(a){this.lines=\na;this.parent=null;for(var b=0,c=0;b<a.length;++b)a[b].parent=this,c+=a[b].height;this.height=c}function Cb(a){this.children=a;for(var b=0,c=0,d=0;d<a.length;++d){var e=a[d],b=b+e.chunkSize(),c=c+e.height;e.parent=this}this.size=b;this.height=c;this.parent=null}function Ga(a,b,c){function d(a,f,g){if(a.linked)for(var h=0;h<a.linked.length;++h){var k=a.linked[h];if(k.doc!=f){var l=g&&k.sharedHist;if(!c||l)b(k.doc,l),d(k.doc,a,l)}}}d(a,null,!0)}function Ed(a,b){if(b.cm)throw Error(\"This document is already in use.\");\na.doc=b;b.cm=a;Ac(a);zc(a);a.options.lineWrapping||Dc(a);a.options.mode=b.modeOption;Q(a)}function u(a,b){b-=a.first;if(0>b||b>=a.size)throw Error(\"There is no line \"+(b+a.first)+\" in the document.\");for(var c=a;!c.lines;)for(var d=0;;++d){var e=c.children[d],f=e.chunkSize();if(b<f){c=e;break}b-=f}return c.lines[b]}function Da(a,b,c){var d=[],e=b.line;a.iter(b.line,c.line+1,function(a){a=a.text;e==c.line&&(a=a.slice(0,c.ch));e==b.line&&(a=a.slice(b.ch));d.push(a);++e});return d}function xd(a,b,c){var d=\n[];a.iter(b,c,function(a){d.push(a.text)});return d}function ca(a,b){var c=b-a.height;if(c)for(var d=a;d;d=d.parent)d.height+=c}function F(a){if(null==a.parent)return null;var b=a.parent;a=D(b.lines,a);for(var c=b.parent;c;b=c,c=c.parent)for(var d=0;c.children[d]!=b;++d)a+=c.children[d].chunkSize();return a+b.first}function Ba(a,b){var c=a.first;a:do{for(var d=0;d<a.children.length;++d){var e=a.children[d],f=e.height;if(b<f){a=e;continue a}b-=f;c+=e.chunkSize()}return c}while(!a.lines);for(d=0;d<\na.lines.length;++d){e=a.lines[d].height;if(b<e)break;b-=e}return c+d}function ea(a){a=ia(a);for(var b=0,c=a.parent,d=0;d<c.lines.length;++d){var e=c.lines[d];if(e==a)break;else b+=e.height}for(a=c.parent;a;c=a,a=c.parent)for(d=0;d<a.children.length&&(e=a.children[d],e!=c);++d)b+=e.height;return b}function Y(a){var b=a.order;null==b&&(b=a.order=gg(a.text));return b}function uc(a){this.done=[];this.undone=[];this.undoDepth=Infinity;this.lastModTime=this.lastSelTime=0;this.lastOrigin=this.lastSelOrigin=\nthis.lastOp=this.lastSelOp=null;this.generation=this.maxGeneration=a||1}function pd(a,b){var c={from:Rc(b.from),to:ta(b),text:Da(a,b.from,b.to)};cf(a,c,b.from.line,b.to.line+1);Ga(a,function(a){cf(a,c,b.from.line,b.to.line+1)},!0);return c}function ce(a){for(;a.length;)if(A(a).ranges)a.pop();else break}function Ie(a,b,c,d){var e=a.history;e.undone.length=0;var f=+new Date,g,h;if(h=e.lastOp==d||e.lastOrigin==b.origin&&b.origin&&(\"+\"==b.origin.charAt(0)&&a.cm&&e.lastModTime>f-a.cm.options.historyEventDelay||\n\"*\"==b.origin.charAt(0)))e.lastOp==d?(ce(e.done),g=A(e.done)):e.done.length&&!A(e.done).ranges?g=A(e.done):1<e.done.length&&!e.done[e.done.length-2].ranges?(e.done.pop(),g=A(e.done)):g=void 0,h=g;if(h){var k=A(g.changes);0==y(b.from,b.to)&&0==y(b.from,k.to)?k.to=ta(b):g.changes.push(pd(a,b))}else for((g=A(e.done))&&g.ranges||Wb(a.sel,e.done),g={changes:[pd(a,b)],generation:e.generation},e.done.push(g);e.done.length>e.undoDepth;)e.done.shift(),e.done[0].ranges||e.done.shift();e.done.push(c);e.generation=\n++e.maxGeneration;e.lastModTime=e.lastSelTime=f;e.lastOp=e.lastSelOp=d;e.lastOrigin=e.lastSelOrigin=b.origin;k||K(a,\"historyAdded\")}function Wb(a,b){var c=A(b);c&&c.ranges&&c.equals(a)||b.push(a)}function cf(a,b,c,d){var e=b[\"spans_\"+a.id],f=0;a.iter(Math.max(a.first,c),Math.min(a.first+a.size,d),function(c){c.markedSpans&&((e||(e=b[\"spans_\"+a.id]={}))[f]=c.markedSpans);++f})}function Zf(a){if(!a)return null;for(var b=0,c;b<a.length;++b)a[b].marker.explicitlyCleared?c||(c=a.slice(0,b)):c&&c.push(a[b]);\nreturn c?c.length?c:null:a}function Xa(a,b,c){for(var d=0,e=[];d<a.length;++d){var f=a[d];if(f.ranges)e.push(c?la.prototype.deepCopy.call(f):f);else{var f=f.changes,g=[];e.push({changes:g});for(var h=0;h<f.length;++h){var k=f[h],l;g.push({from:k.from,to:k.to,text:k.text});if(b)for(var m in k)(l=m.match(/^spans_(\\d+)$/))&&-1<D(b,Number(l[1]))&&(A(g)[m]=k[m],delete k[m])}}}return e}function df(a,b,c,d){c<a.line?a.line+=d:b<a.line&&(a.line=b,a.ch=0)}function ef(a,b,c,d){for(var e=0;e<a.length;++e){var f=\na[e],g=!0;if(f.ranges){f.copied||(f=a[e]=f.deepCopy(),f.copied=!0);for(var h=0;h<f.ranges.length;h++)df(f.ranges[h].anchor,b,c,d),df(f.ranges[h].head,b,c,d)}else{for(h=0;h<f.changes.length;++h){var k=f.changes[h];if(c<k.from.line)k.from=r(k.from.line+d,k.from.ch),k.to=r(k.to.line+d,k.to.ch);else if(b<=k.to.line){g=!1;break}}g||(a.splice(0,e+1),e=0)}}}function Je(a,b){var c=b.from.line,d=b.to.line,e=b.text.length-(d-c)-1;ef(a.done,c,d,e);ef(a.undone,c,d,e)}function ld(a){return null!=a.defaultPrevented?\na.defaultPrevented:0==a.returnValue}function xe(a){var b=a.which;null==b&&(a.button&1?b=1:a.button&2?b=3:a.button&4&&(b=2));W&&a.ctrlKey&&1==b&&(b=3);return b}function L(a,b){function c(a){return function(){a.apply(null,e)}}var d=a._handlers&&a._handlers[b];if(d){var e=Array.prototype.slice.call(arguments,2),f;Ta?f=Ta.delayedCallbacks:Db?f=Db:(f=Db=[],setTimeout(hg,0));for(var g=0;g<d.length;++g)f.push(c(d[g]))}}function hg(){var a=Db;Db=null;for(var b=0;b<a.length;++b)a[b]()}function ja(a,b,c){\"string\"==\ntypeof b&&(b={type:b,preventDefault:function(){this.defaultPrevented=!0}});K(a,c||b.type,a,b);return ld(b)||b.codemirrorIgnore}function fe(a){var b=a._handlers&&a._handlers.cursorActivity;if(b){a=a.curOp.cursorActivityHandlers||(a.curOp.cursorActivityHandlers=[]);for(var c=0;c<b.length;++c)-1==D(a,b[c])&&a.push(b[c])}}function S(a,b){var c=a._handlers&&a._handlers[b];return c&&0<c.length}function Ya(a){a.prototype.on=function(a,c){v(this,a,c)};a.prototype.off=function(a,c){ka(this,a,c)}}function bb(){this.id=\nnull}function ye(a,b,c){for(var d=0,e=0;;){var f=a.indexOf(\"\\t\",d);-1==f&&(f=a.length);var g=f-d;if(f==a.length||e+g>=b)return d+Math.min(g,b-e);e+=f-d;e+=c-e%c;d=f+1;if(e>=b)return d}}function Ne(a){for(;vc.length<=a;)vc.push(A(vc)+\" \");return vc[a]}function A(a){return a[a.length-1]}function D(a,b){for(var c=0;c<a.length;++c)if(a[c]==b)return c;return-1}function ob(a,b){for(var c=[],d=0;d<a.length;d++)c[d]=b(a[d],d);return c}function Eb(){}function ff(a,b){var c;Object.create?c=Object.create(a):\n(Eb.prototype=a,c=new Eb);b&&V(b,c);return c}function V(a,b,c){b||(b={});for(var d in a)!a.hasOwnProperty(d)||!1===c&&b.hasOwnProperty(d)||(b[d]=a[d]);return b}function cb(a){var b=Array.prototype.slice.call(arguments,1);return function(){return a.apply(null,b)}}function oc(a,b){return b?-1<b.source.indexOf(\"\\\\w\")&&gf(a)?!0:b.test(a):gf(a)}function hf(a){for(var b in a)if(a.hasOwnProperty(b)&&a[b])return!1;return!0}function tb(a){return 768<=a.charCodeAt(0)&&ig.test(a)}function t(a,b,c,d){a=document.createElement(a);\nc&&(a.className=c);d&&(a.style.cssText=d);if(\"string\"==typeof b)a.appendChild(document.createTextNode(b));else if(b)for(c=0;c<b.length;++c)a.appendChild(b[c]);return a}function za(a){for(var b=a.childNodes.length;0<b;--b)a.removeChild(a.firstChild);return a}function U(a,b){return za(a).appendChild(b)}function fa(){return document.activeElement}function Fb(a){return new RegExp(\"(^|\\\\s)\"+a+\"(?:$|\\\\s)\\\\s*\")}function wd(a,b){for(var c=a.split(\" \"),d=0;d<c.length;d++)c[d]&&!Fb(c[d]).test(b)&&(b+=\" \"+c[d]);\nreturn b}function jf(a){if(document.body.getElementsByClassName)for(var b=document.body.getElementsByClassName(\"CodeMirror\"),c=0;c<b.length;c++){var d=b[c].CodeMirror;d&&a(d)}}function tf(){var a;v(window,\"resize\",function(){null==a&&(a=setTimeout(function(){a=null;jf(If)},100))});v(window,\"blur\",function(){jf(db)})}function eg(a){if(null==yd){var b=t(\"span\",\"​\");U(a,t(\"span\",[b,document.createTextNode(\"x\")]));0!=a.firstChild.offsetHeight&&(yd=1>=b.offsetWidth&&2<b.offsetHeight&&!(B&&8>C))}a=yd?t(\"span\",\n\"​\"):t(\"span\",\" \",null,\"display: inline-block; width: 1px; margin-right: -1px\");a.setAttribute(\"cm-text\",\"\");return a}function Af(a,b,c,d){if(!a)return d(b,c,\"ltr\");for(var e=!1,f=0;f<a.length;++f){var g=a[f];if(g.from<c&&g.to>b||b==c&&g.to==b)d(Math.max(g.from,b),Math.min(g.to,c),1==g.level?\"rtl\":\"ltr\"),e=!0}e||d(b,c,\"ltr\")}function dd(a){return a.level%2?a.to:a.from}function ed(a){return a.level%2?a.from:a.to}function ac(a){return(a=Y(a))?dd(a[0]):0}function bc(a){var b=Y(a);return b?ed(A(b)):a.text.length}\nfunction kf(a,b){var c=u(a.doc,b),d=ia(c);d!=c&&(b=F(d));d=(c=Y(d))?c[0].level%2?bc(d):ac(d):0;return r(b,d)}function lf(a,b){var c=kf(a,b.line),d=u(a.doc,c.line),e=Y(d);return e&&0!=e[0].level?c:(d=Math.max(0,d.text.search(/\\S/)),r(c.line,b.line==c.line&&b.ch<=d&&b.ch?0:d))}function Sb(a,b){vb=null;for(var c=0,d;c<a.length;++c){var e=a[c];if(e.from<b&&e.to>b)return c;if(e.from==b||e.to==b)if(null==d)d=c;else{var f;f=e.level;var g=a[d].level,h=a[0].level;f=f==h?!0:g==h?!1:f<g;if(f)return e.from!=\ne.to&&(vb=d),c;e.from!=e.to&&(vb=c);break}}return d}function zd(a,b,c,d){if(!d)return b+c;do b+=c;while(0<b&&tb(a.text.charAt(b)));return b}function gd(a,b,c,d){var e=Y(a);if(!e)return Oe(a,b,c,d);var f=Sb(e,b),g=e[f];for(b=zd(a,b,g.level%2?-c:c,d);;){if(b>g.from&&b<g.to)return b;if(b==g.from||b==g.to){if(Sb(e,b)==f)return b;g=e[f+c];return 0<c==g.level%2?g.to:g.from}g=e[f+=c];if(!g)return null;b=0<c==g.level%2?zd(a,g.to,-1,d):zd(a,g.from,1,d)}}function Oe(a,b,c,d){b+=c;if(d)for(;0<b&&tb(a.text.charAt(b));)b+=\nc;return 0>b||b>a.text.length?null:b}var wa=/gecko\\/\\d/i.test(navigator.userAgent),mf=/MSIE \\d/.test(navigator.userAgent),nf=/Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent),B=mf||nf,C=B&&(mf?document.documentMode||6:nf[1]),J=/WebKit\\//.test(navigator.userAgent),jg=J&&/Qt\\/\\d+\\.\\d+/.test(navigator.userAgent),kg=/Chrome\\//.test(navigator.userAgent),ba=/Opera\\//.test(navigator.userAgent),te=/Apple Computer/.test(navigator.vendor),lg=/Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(navigator.userAgent),\nGf=/PhantomJS/.test(navigator.userAgent),Qa=/AppleWebKit/.test(navigator.userAgent)&&/Mobile\\/\\w+/.test(navigator.userAgent),ab=Qa||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent),W=Qa||/Mac/.test(navigator.platform),mg=/win/i.test(navigator.platform),Ia=ba&&navigator.userAgent.match(/Version\\/(\\d*\\.\\d*)/);Ia&&(Ia=Number(Ia[1]));Ia&&15<=Ia&&(ba=!1,J=!0);var of=W&&(jg||ba&&(null==Ia||12.11>Ia)),id=wa||B&&9<=C,Ge=!1,ra=!1;Fc.prototype=V({update:function(a){var b=\na.scrollWidth>a.clientWidth+1,c=a.scrollHeight>a.clientHeight+1,d=a.nativeBarWidth;c?(this.vert.style.display=\"block\",this.vert.style.bottom=b?d+\"px\":\"0\",this.vert.firstChild.style.height=Math.max(0,a.scrollHeight-a.clientHeight+(a.viewHeight-(b?d:0)))+\"px\"):(this.vert.style.display=\"\",this.vert.firstChild.style.height=\"0\");b?(this.horiz.style.display=\"block\",this.horiz.style.right=c?d+\"px\":\"0\",this.horiz.style.left=a.barLeft+\"px\",this.horiz.firstChild.style.width=a.scrollWidth-a.clientWidth+(a.viewWidth-\na.barLeft-(c?d:0))+\"px\"):(this.horiz.style.display=\"\",this.horiz.firstChild.style.width=\"0\");!this.checkedOverlay&&0<a.clientHeight&&(0==d&&this.overlayHack(),this.checkedOverlay=!0);return{right:c?d:0,bottom:b?d:0}},setScrollLeft:function(a){this.horiz.scrollLeft!=a&&(this.horiz.scrollLeft=a)},setScrollTop:function(a){this.vert.scrollTop!=a&&(this.vert.scrollTop=a)},overlayHack:function(){this.horiz.style.minHeight=this.vert.style.minWidth=W&&!lg?\"12px\":\"18px\";var a=this,b=function(b){(b.target||\nb.srcElement)!=a.vert&&(b.target||b.srcElement)!=a.horiz&&G(a.cm,pe)(b)};v(this.vert,\"mousedown\",b);v(this.horiz,\"mousedown\",b)},clear:function(){var a=this.horiz.parentNode;a.removeChild(this.horiz);a.removeChild(this.vert)}},Fc.prototype);Gc.prototype=V({update:function(){return{bottom:0,right:0}},setScrollLeft:function(){},setScrollTop:function(){},clear:function(){}},Gc.prototype);q.scrollbarModel={\"native\":Fc,\"null\":Gc};Mb.prototype.signal=function(a,b){S(a,b)&&this.events.push(arguments)};Mb.prototype.finish=\nfunction(){for(var a=0;a<this.events.length;a++)K.apply(null,this.events[a])};var r=q.Pos=function(a,b){if(!(this instanceof r))return new r(a,b);this.line=a;this.ch=b},y=q.cmpPos=function(a,b){return a.line-b.line||a.ch-b.ch},X=null;Tc.prototype=V({init:function(a){function b(a){if(d.somethingSelected())X=d.getSelections(),c.inaccurateSelection&&(c.prevInput=\"\",c.inaccurateSelection=!1,f.value=X.join(\"\\n\"),Za(f));else if(d.options.lineWiseCopyCut){var b=Vd(d);X=b.text;\"cut\"==a.type?d.setSelections(b.ranges,\nnull,ha):(c.prevInput=\"\",f.value=b.text.join(\"\\n\"),Za(f))}else return;\"cut\"==a.type&&(d.state.cutIncoming=!0)}var c=this,d=this.cm,e=this.wrapper=Xd(),f=this.textarea=e.firstChild;a.wrapper.insertBefore(e,a.wrapper.firstChild);Qa&&(f.style.width=\"0px\");v(f,\"input\",function(){B&&9<=C&&c.hasSelection&&(c.hasSelection=null);c.poll()});v(f,\"paste\",function(){if(J&&!d.state.fakedLastChar&&!(200>new Date-d.state.lastMiddleDown)){var a=f.selectionStart,b=f.selectionEnd;f.value+=\"$\";f.selectionEnd=b;f.selectionStart=\na;d.state.fakedLastChar=!0}d.state.pasteIncoming=!0;c.fastPoll()});v(f,\"cut\",b);v(f,\"copy\",b);v(a.scroller,\"paste\",function(b){oa(a,b)||(d.state.pasteIncoming=!0,c.focus())});v(a.lineSpace,\"selectstart\",function(b){oa(a,b)||O(b)});v(f,\"compositionstart\",function(){var a=d.getCursor(\"from\");c.composing={start:a,range:d.markText(a,d.getCursor(\"to\"),{className:\"CodeMirror-composing\"})}});v(f,\"compositionend\",function(){c.composing&&(c.poll(),c.composing.range.clear(),c.composing=null)})},prepareSelection:function(){var a=\nthis.cm,b=a.display,c=a.doc,d=he(a);if(a.options.moveInputWithCursor){var a=ma(a,c.sel.primary().head,\"div\"),c=b.wrapper.getBoundingClientRect(),e=b.lineDiv.getBoundingClientRect();d.teTop=Math.max(0,Math.min(b.wrapper.clientHeight-10,a.top+e.top-c.top));d.teLeft=Math.max(0,Math.min(b.wrapper.clientWidth-10,a.left+e.left-c.left))}return d},showSelection:function(a){var b=this.cm.display;U(b.cursorDiv,a.cursors);U(b.selectionDiv,a.selection);null!=a.teTop&&(this.wrapper.style.top=a.teTop+\"px\",this.wrapper.style.left=\na.teLeft+\"px\")},reset:function(a){if(!this.contextMenuPending){var b,c,d=this.cm,e=d.doc;d.somethingSelected()?(this.prevInput=\"\",b=e.sel.primary(),c=(b=Ce&&(100<b.to().line-b.from().line||1E3<(c=d.getSelection()).length))?\"-\":c||d.getSelection(),this.textarea.value=c,d.state.focused&&Za(this.textarea),B&&9<=C&&(this.hasSelection=c)):a||(this.prevInput=this.textarea.value=\"\",B&&9<=C&&(this.hasSelection=null));this.inaccurateSelection=b}},getField:function(){return this.textarea},supportsTouch:function(){return!1},\nfocus:function(){if(\"nocursor\"!=this.cm.options.readOnly&&(!ab||fa()!=this.textarea))try{this.textarea.focus()}catch(a){}},blur:function(){this.textarea.blur()},resetPosition:function(){this.wrapper.style.top=this.wrapper.style.left=0},receivedFocus:function(){this.slowPoll()},slowPoll:function(){var a=this;a.pollingFast||a.polling.set(this.cm.options.pollInterval,function(){a.poll();a.cm.state.focused&&a.slowPoll()})},fastPoll:function(){function a(){c.poll()||b?(c.pollingFast=!1,c.slowPoll()):(b=\n!0,c.polling.set(60,a))}var b=!1,c=this;c.pollingFast=!0;c.polling.set(20,a)},poll:function(){var a=this.cm,b=this.textarea,c=this.prevInput;if(!a.state.focused||ng(b)&&!c||Rb(a)||a.options.disableInput||a.state.keySeq)return!1;a.state.pasteIncoming&&a.state.fakedLastChar&&(b.value=b.value.substring(0,b.value.length-1),a.state.fakedLastChar=!1);var d=b.value;if(d==c&&!a.somethingSelected())return!1;if(B&&9<=C&&this.hasSelection===d||W&&/[\\uf700-\\uf7ff]/.test(d))return a.display.input.reset(),!1;if(a.doc.sel==\na.display.selForContextMenu){var e=d.charCodeAt(0);8203!=e||c||(c=\"​\");if(8666==e)return this.reset(),this.cm.execCommand(\"undo\")}for(var f=0,e=Math.min(c.length,d.length);f<e&&c.charCodeAt(f)==d.charCodeAt(f);)++f;var g=this;T(a,function(){Sc(a,d.slice(f),c.length-f,null,g.composing?\"*compose\":null);1E3<d.length||-1<d.indexOf(\"\\n\")?b.value=g.prevInput=\"\":g.prevInput=d;g.composing&&(g.composing.range.clear(),g.composing.range=a.markText(g.composing.start,a.getCursor(\"to\"),{className:\"CodeMirror-composing\"}))});\nreturn!0},ensurePolled:function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},onKeyPress:function(){B&&9<=C&&(this.hasSelection=null);this.fastPoll()},onContextMenu:function(a){function b(){if(null!=g.selectionStart){var a=e.somethingSelected(),b=\"​\"+(a?g.value:\"\");g.value=\"⇚\";g.value=b;d.prevInput=a?\"\":\"​\";g.selectionStart=1;g.selectionEnd=b.length;f.selForContextMenu=e.doc.sel}}function c(){d.contextMenuPending=!1;d.wrapper.style.position=\"relative\";g.style.cssText=l;B&&9>C&&f.scrollbars.setScrollTop(f.scroller.scrollTop=\nk);if(null!=g.selectionStart){(!B||B&&9>C)&&b();var a=0,c=function(){f.selForContextMenu==e.doc.sel&&0==g.selectionStart&&0<g.selectionEnd&&\"​\"==d.prevInput?G(e,ic.selectAll)(e):10>a++?f.detectingSelectAll=setTimeout(c,500):f.input.reset()};f.detectingSelectAll=setTimeout(c,200)}}var d=this,e=d.cm,f=e.display,g=d.textarea,h=Ua(e,a),k=f.scroller.scrollTop;if(h&&!ba){e.options.resetSelectionOnContextMenu&&-1==e.doc.sel.contains(h)&&G(e,H)(e.doc,ga(h),ha);var l=g.style.cssText;d.wrapper.style.position=\n\"absolute\";g.style.cssText=\"position: fixed; width: 30px; height: 30px; top: \"+(a.clientY-5)+\"px; left: \"+(a.clientX-5)+\"px; z-index: 1000; background: \"+(B?\"rgba(255, 255, 255, .05)\":\"transparent\")+\"; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity\\x3d5);\";if(J)var m=window.scrollY;f.input.focus();J&&window.scrollTo(null,m);f.input.reset();e.somethingSelected()||(g.value=d.prevInput=\" \");d.contextMenuPending=!0;f.selForContextMenu=e.doc.sel;clearTimeout(f.detectingSelectAll);\nB&&9<=C&&b();if(id){jd(a);var p=function(){ka(window,\"mouseup\",p);setTimeout(c,20)};v(window,\"mouseup\",p)}else setTimeout(c,50)}},setUneditable:Eb,needsContentAttribute:!1},Tc.prototype);Uc.prototype=V({init:function(a){function b(a){if(d.somethingSelected())X=d.getSelections(),\"cut\"==a.type&&d.replaceSelection(\"\",null,\"cut\");else if(d.options.lineWiseCopyCut){var b=Vd(d);X=b.text;\"cut\"==a.type&&d.operation(function(){d.setSelections(b.ranges,0,ha);d.replaceSelection(\"\",null,\"cut\")})}else return;\nif(a.clipboardData&&!Qa)a.preventDefault(),a.clipboardData.clearData(),a.clipboardData.setData(\"text/plain\",X.join(\"\\n\"));else{var c=Xd();a=c.firstChild;d.display.lineSpace.insertBefore(c,d.display.lineSpace.firstChild);a.value=X.join(\"\\n\");var h=document.activeElement;Za(a);setTimeout(function(){d.display.lineSpace.removeChild(c);h.focus()},50)}}var c=this,d=c.cm;a=c.div=a.lineDiv;a.contentEditable=\"true\";Wd(a);v(a,\"paste\",function(a){var b=a.clipboardData&&a.clipboardData.getData(\"text/plain\");\nb&&(a.preventDefault(),d.replaceSelection(b,null,\"paste\"))});v(a,\"compositionstart\",function(a){a=a.data;c.composing={sel:d.doc.sel,data:a,startData:a};if(a){var b=d.doc.sel.primary(),g=d.getLine(b.head.line).indexOf(a,Math.max(0,b.head.ch-a.length));-1<g&&g<=b.head.ch&&(c.composing.sel=ga(r(b.head.line,g),r(b.head.line,g+a.length)))}});v(a,\"compositionupdate\",function(a){c.composing.data=a.data});v(a,\"compositionend\",function(a){var b=c.composing;b&&(a.data==b.startData||/\\u200b/.test(a.data)||(b.data=\na.data),setTimeout(function(){b.handled||c.applyComposition(b);c.composing==b&&(c.composing=null)},50))});v(a,\"touchstart\",function(){c.forceCompositionEnd()});v(a,\"input\",function(){c.composing||c.pollContent()||T(c.cm,function(){Q(d)})});v(a,\"copy\",b);v(a,\"cut\",b)},prepareSelection:function(){var a=he(this.cm,!1);a.focus=this.cm.state.focused;return a},showSelection:function(a){a&&this.cm.display.view.length&&(a.focus&&this.showPrimarySelection(),this.showMultipleSelections(a))},showPrimarySelection:function(){var a=\nwindow.getSelection(),b=this.cm.doc.sel.primary(),c=Tb(this.cm,a.anchorNode,a.anchorOffset),d=Tb(this.cm,a.focusNode,a.focusOffset);if(!c||c.bad||!d||d.bad||0!=y(Qb(c,d),b.from())||0!=y(Pb(c,d),b.to()))if(c=Yd(this.cm,b.from()),d=Yd(this.cm,b.to()),c||d){var e=this.cm.display.view,b=a.rangeCount&&a.getRangeAt(0);c?d||(d=e[e.length-1].measure,d=d.maps?d.maps[d.maps.length-1]:d.map,d={node:d[d.length-1],offset:d[d.length-2]-d[d.length-3]}):c={node:e[0].measure.map[2],offset:0};try{var f=Ea(c.node,c.offset,\nd.offset,d.node)}catch(g){}f&&(a.removeAllRanges(),a.addRange(f),b&&null==a.anchorNode?a.addRange(b):wa&&this.startGracePeriod());this.rememberSelection()}},startGracePeriod:function(){var a=this;clearTimeout(this.gracePeriod);this.gracePeriod=setTimeout(function(){a.gracePeriod=!1;a.selectionChanged()&&a.cm.operation(function(){a.cm.curOp.selectionChanged=!0})},20)},showMultipleSelections:function(a){U(this.cm.display.cursorDiv,a.cursors);U(this.cm.display.selectionDiv,a.selection)},rememberSelection:function(){var a=\nwindow.getSelection();this.lastAnchorNode=a.anchorNode;this.lastAnchorOffset=a.anchorOffset;this.lastFocusNode=a.focusNode;this.lastFocusOffset=a.focusOffset},selectionInEditor:function(){var a=window.getSelection();if(!a.rangeCount)return!1;a=a.getRangeAt(0).commonAncestorContainer;return Wc(this.div,a)},focus:function(){\"nocursor\"!=this.cm.options.readOnly&&this.div.focus()},blur:function(){this.div.blur()},getField:function(){return this.div},supportsTouch:function(){return!0},receivedFocus:function(){function a(){b.cm.state.focused&&\n(b.pollSelection(),b.polling.set(b.cm.options.pollInterval,a))}var b=this;this.selectionInEditor()?this.pollSelection():T(this.cm,function(){b.cm.curOp.selectionChanged=!0});this.polling.set(this.cm.options.pollInterval,a)},selectionChanged:function(){var a=window.getSelection();return a.anchorNode!=this.lastAnchorNode||a.anchorOffset!=this.lastAnchorOffset||a.focusNode!=this.lastFocusNode||a.focusOffset!=this.lastFocusOffset},pollSelection:function(){if(!this.composing&&!this.gracePeriod&&this.selectionChanged()){var a=\nwindow.getSelection(),b=this.cm;this.rememberSelection();var c=Tb(b,a.anchorNode,a.anchorOffset),d=Tb(b,a.focusNode,a.focusOffset);c&&d&&T(b,function(){H(b.doc,ga(c,d),ha);if(c.bad||d.bad)b.curOp.selectionChanged=!0})}},pollContent:function(){var a=this.cm,b=a.display,c=a.doc.sel.primary(),d=c.from(),c=c.to();if(d.line<b.viewFrom||c.line>b.viewTo-1)return!1;var e;d.line==b.viewFrom||0==(e=Ca(a,d.line))?(d=F(b.view[0].line),e=b.view[0].node):(d=F(b.view[e].line),e=b.view[e-1].node.nextSibling);var f=\nCa(a,c.line);f==b.view.length-1?(c=b.viewTo-1,b=b.view[f].node):(c=F(b.view[f+1].line)-1,b=b.view[f+1].node.previousSibling);b=sa(xf(a,e,b,d,c));for(e=Da(a.doc,r(d,0),r(c,u(a.doc,c).text.length));1<b.length&&1<e.length;)if(A(b)==A(e))b.pop(),e.pop(),c--;else if(b[0]==e[0])b.shift(),e.shift(),d++;else break;for(var g=0,f=0,h=b[0],k=e[0],l=Math.min(h.length,k.length);g<l&&h.charCodeAt(g)==k.charCodeAt(g);)++g;h=A(b);k=A(e);for(l=Math.min(h.length-(1==b.length?g:0),k.length-(1==e.length?g:0));f<l&&h.charCodeAt(h.length-\nf-1)==k.charCodeAt(k.length-f-1);)++f;b[b.length-1]=h.slice(0,h.length-f);b[0]=b[0].slice(g);d=r(d,g);c=r(c,e.length?A(e).length-f:0);if(1<b.length||b[0]||y(d,c))return wb(a.doc,b,d,c,\"+input\"),!0},ensurePolled:function(){this.forceCompositionEnd()},reset:function(){this.forceCompositionEnd()},forceCompositionEnd:function(){this.composing&&!this.composing.handled&&(this.applyComposition(this.composing),this.composing.handled=!0,this.div.blur(),this.div.focus())},applyComposition:function(a){a.data&&\na.data!=a.startData&&G(this.cm,Sc)(this.cm,a.data,0,a.sel)},setUneditable:function(a){a.setAttribute(\"contenteditable\",\"false\")},onKeyPress:function(a){a.preventDefault();G(this.cm,Sc)(this.cm,String.fromCharCode(null==a.charCode?a.keyCode:a.charCode),0)},onContextMenu:Eb,resetPosition:Eb,needsContentAttribute:!0},Uc.prototype);q.inputStyles={textarea:Tc,contenteditable:Uc};la.prototype={primary:function(){return this.ranges[this.primIndex]},equals:function(a){if(a==this)return!0;if(a.primIndex!=\nthis.primIndex||a.ranges.length!=this.ranges.length)return!1;for(var b=0;b<this.ranges.length;b++){var c=this.ranges[b],d=a.ranges[b];if(0!=y(c.anchor,d.anchor)||0!=y(c.head,d.head))return!1}return!0},deepCopy:function(){for(var a=[],b=0;b<this.ranges.length;b++)a[b]=new z(Rc(this.ranges[b].anchor),Rc(this.ranges[b].head));return new la(a,this.primIndex)},somethingSelected:function(){for(var a=0;a<this.ranges.length;a++)if(!this.ranges[a].empty())return!0;return!1},contains:function(a,b){b||(b=a);\nfor(var c=0;c<this.ranges.length;c++){var d=this.ranges[c];if(0<=y(b,d.from())&&0>=y(a,d.to()))return c}return-1}};z.prototype={from:function(){return Qb(this.anchor,this.head)},to:function(){return Pb(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}};var ad={left:0,right:0,top:0,bottom:0},Fa,Ta=null,Ff=0,fc,ec,se=0,gc=0,R=null;B?R=-.53:wa?R=15:kg?R=-.7:te&&(R=-1/3);var ze=function(a){var b=a.wheelDeltaX,c=a.wheelDeltaY;null==b&&a.detail&&\na.axis==a.HORIZONTAL_AXIS&&(b=a.detail);null==c&&a.detail&&a.axis==a.VERTICAL_AXIS?c=a.detail:null==c&&(c=a.wheelDelta);return{x:b,y:c}};q.wheelEventPixels=function(a){a=ze(a);a.x*=R;a.y*=R;return a};var Qf=new bb,md=null,ta=q.changeEnd=function(a){return a.text?r(a.from.line+a.text.length-1,A(a.text).length+(1==a.text.length?a.from.ch:0)):a.to};q.prototype={constructor:q,focus:function(){window.focus();this.display.input.focus()},setOption:function(a,b){var c=this.options,d=c[a];if(c[a]!=b||\"mode\"==\na)c[a]=b,Ka.hasOwnProperty(a)&&G(this,Ka[a])(this,b,d)},getOption:function(a){return this.options[a]},getDoc:function(){return this.doc},addKeyMap:function(a,b){this.state.keyMaps[b?\"push\":\"unshift\"](pc(a))},removeKeyMap:function(a){for(var b=this.state.keyMaps,c=0;c<b.length;++c)if(b[c]==a||b[c].name==a)return b.splice(c,1),!0},addOverlay:M(function(a,b){var c=a.token?a:q.getMode(this.options,a);if(c.startState)throw Error(\"Overlays may not be stateful.\");this.state.overlays.push({mode:c,modeSpec:a,\nopaque:b&&b.opaque});this.state.modeGen++;Q(this)}),removeOverlay:M(function(a){for(var b=this.state.overlays,c=0;c<b.length;++c){var d=b[c].modeSpec;if(d==a||\"string\"==typeof a&&d.name==a){b.splice(c,1);this.state.modeGen++;Q(this);break}}}),indentLine:M(function(a,b,c){\"string\"!=typeof b&&\"number\"!=typeof b&&(b=null==b?this.options.smartIndent?\"smart\":\"prev\":b?\"add\":\"subtract\");qb(this.doc,a)&&pb(this,a,b,c)}),indentSelection:M(function(a){for(var b=this.doc.sel.ranges,c=-1,d=0;d<b.length;d++){var e=\nb[d];if(e.empty())e.head.line>c&&(pb(this,e.head.line,a,!0),c=e.head.line,d==this.doc.sel.primIndex&&Pa(this));else{for(var f=e.from(),e=e.to(),g=Math.max(c,f.line),c=Math.min(this.lastLine(),e.line-(e.ch?0:1))+1,e=g;e<c;++e)pb(this,e,a);e=this.doc.sel.ranges;0==f.ch&&b.length==e.length&&0<e[d].from().ch&&Xc(this.doc,d,new z(f,e[d].to()),ha)}}}),getTokenAt:function(a,b){return Ye(this,a,b)},getLineTokens:function(a,b){return Ye(this,r(a),b,!0)},getTokenTypeAt:function(a){a=w(this.doc,a);var b=$e(this,\nu(this.doc,a.line)),c=0,d=(b.length-1)/2;a=a.ch;if(0==a)b=b[2];else for(;;){var e=c+d>>1;if((e?b[2*e-1]:0)>=a)d=e;else if(b[2*e+1]<a)c=e+1;else{b=b[2*e+2];break}}c=b?b.indexOf(\"cm-overlay \"):-1;return 0>c?b:0==c?null:b.slice(0,c-1)},getModeAt:function(a){var b=this.doc.mode;return b.innerMode?q.innerMode(b,this.getTokenAt(a).state).mode:b},getHelper:function(a,b){return this.getHelpers(a,b)[0]},getHelpers:function(a,b){var c=[];if(!$a.hasOwnProperty(b))return c;var d=$a[b],e=this.getModeAt(a);if(\"string\"==\ntypeof e[b])d[e[b]]&&c.push(d[e[b]]);else if(e[b])for(var f=0;f<e[b].length;f++){var g=d[e[b][f]];g&&c.push(g)}else e.helperType&&d[e.helperType]?c.push(d[e.helperType]):d[e.name]&&c.push(d[e.name]);for(f=0;f<d._global.length;f++)g=d._global[f],g.pred(e,this)&&-1==D(c,g.val)&&c.push(g.val);return c},getStateAfter:function(a,b){var c=this.doc;a=Math.max(c.first,Math.min(null==a?c.first+c.size-1:a,c.first+c.size-1));return sb(this,a+1,b)},cursorCoords:function(a,b){var c;c=this.doc.sel.primary();c=\nnull==a?c.head:\"object\"==typeof a?w(this.doc,a):a?c.from():c.to();return ma(this,c,b||\"page\")},charCoords:function(a,b){return Yb(this,w(this.doc,a),b||\"page\")},coordsChar:function(a,b){a=ne(this,a,b||\"page\");return fd(this,a.left,a.top)},lineAtHeight:function(a,b){a=ne(this,{top:a,left:0},b||\"page\").top;return Ba(this.doc,a+this.display.viewOffset)},heightAtLine:function(a,b){var c=!1,d;\"number\"==typeof a?(d=this.doc.first+this.doc.size-1,a<this.doc.first?a=this.doc.first:a>d&&(a=d,c=!0),d=u(this.doc,\na)):d=a;return cd(this,d,{top:0,left:0},b||\"page\").top+(c?this.doc.height-ea(d):0)},defaultTextHeight:function(){return xa(this.display)},defaultCharWidth:function(){return gb(this.display)},setGutterMarker:M(function(a,b,c){return nc(this.doc,a,\"gutter\",function(a){var e=a.gutterMarkers||(a.gutterMarkers={});e[b]=c;!c&&hf(e)&&(a.gutterMarkers=null);return!0})}),clearGutter:M(function(a){var b=this,c=b.doc,d=c.first;c.iter(function(c){c.gutterMarkers&&c.gutterMarkers[a]&&(c.gutterMarkers[a]=null,\nna(b,d,\"gutter\"),hf(c.gutterMarkers)&&(c.gutterMarkers=null));++d})}),lineInfo:function(a){if(\"number\"==typeof a){if(!qb(this.doc,a))return null;var b=a;a=u(this.doc,a);if(!a)return null}else if(b=F(a),null==b)return null;return{line:b,handle:a,text:a.text,gutterMarkers:a.gutterMarkers,textClass:a.textClass,bgClass:a.bgClass,wrapClass:a.wrapClass,widgets:a.widgets}},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(a,b,c,d,e){var f=this.display;a=\nma(this,w(this.doc,a));var g=a.bottom,h=a.left;b.style.position=\"absolute\";b.setAttribute(\"cm-ignore-events\",\"true\");this.display.input.setUneditable(b);f.sizer.appendChild(b);if(\"over\"==d)g=a.top;else if(\"above\"==d||\"near\"==d){var k=Math.max(f.wrapper.clientHeight,this.doc.height),l=Math.max(f.sizer.clientWidth,f.lineSpace.clientWidth);(\"above\"==d||a.bottom+b.offsetHeight>k)&&a.top>b.offsetHeight?g=a.top-b.offsetHeight:a.bottom+b.offsetHeight<=k&&(g=a.bottom);h+b.offsetWidth>l&&(h=l-b.offsetWidth)}b.style.top=\ng+\"px\";b.style.left=b.style.right=\"\";\"right\"==e?(h=f.sizer.clientWidth-b.offsetWidth,b.style.right=\"0px\"):(\"left\"==e?h=0:\"middle\"==e&&(h=(f.sizer.clientWidth-b.offsetWidth)/2),b.style.left=h+\"px\");c&&(a=cc(this,h,g,h+b.offsetWidth,g+b.offsetHeight),null!=a.scrollTop&&lb(this,a.scrollTop),null!=a.scrollLeft&&Ma(this,a.scrollLeft))},triggerOnKeyDown:M(ve),triggerOnKeyPress:M(we),triggerOnKeyUp:ue,execCommand:function(a){if(ic.hasOwnProperty(a))return ic[a](this)},findPosH:function(a,b,c,d){var e=1;\n0>b&&(e=-1,b=-b);var f=0;for(a=w(this.doc,a);f<b&&(a=rd(this.doc,a,e,c,d),!a.hitSide);++f);return a},moveH:M(function(a,b){var c=this;c.extendSelectionsBy(function(d){return c.display.shift||c.doc.extend||d.empty()?rd(c.doc,d.head,a,b,c.options.rtlMoveVisually):0>a?d.from():d.to()},Gb)}),deleteH:M(function(a,b){var c=this.doc;this.doc.sel.somethingSelected()?c.replaceSelection(\"\",null,\"+delete\"):Va(this,function(d){var e=rd(c,d.head,a,b,!1);return 0>a?{from:e,to:d.head}:{from:d.head,to:e}})}),findPosV:function(a,\nb,c,d){var e=1;0>b&&(e=-1,b=-b);var f=0;for(a=w(this.doc,a);f<b&&(a=ma(this,a,\"div\"),null==d?d=a.left:a.left=d,a=Pe(this,a,e,c),!a.hitSide);++f);return a},moveV:M(function(a,b){var c=this,d=this.doc,e=[],f=!c.display.shift&&!d.extend&&d.sel.somethingSelected();d.extendSelectionsBy(function(g){if(f)return 0>a?g.from():g.to();var k=ma(c,g.head,\"div\");null!=g.goalColumn&&(k.left=g.goalColumn);e.push(k.left);var l=Pe(c,k,a,b);\"page\"==b&&g==d.sel.primary()&&lc(c,null,Yb(c,l,\"div\").top-k.top);return l},\nGb);if(e.length)for(var g=0;g<d.sel.ranges.length;g++)d.sel.ranges[g].goalColumn=e[g]}),findWordAt:function(a){var b=u(this.doc,a.line).text,c=a.ch,d=a.ch;if(b){var e=this.getHelper(a,\"wordChars\");(0>a.xRel||d==b.length)&&c?--c:++d;for(var f=b.charAt(c),f=oc(f,e)?function(a){return oc(a,e)}:/\\s/.test(f)?function(a){return/\\s/.test(a)}:function(a){return!/\\s/.test(a)&&!oc(a)};0<c&&f(b.charAt(c-1));)--c;for(;d<b.length&&f(b.charAt(d));)++d}return new z(r(a.line,c),r(a.line,d))},toggleOverwrite:function(a){if(null==\na||a!=this.state.overwrite)(this.state.overwrite=!this.state.overwrite)?mb(this.display.cursorDiv,\"CodeMirror-overwrite\"):kb(this.display.cursorDiv,\"CodeMirror-overwrite\"),K(this,\"overwriteToggle\",this,this.state.overwrite)},hasFocus:function(){return this.display.input.getField()==fa()},scrollTo:M(function(a,b){null==a&&null==b||mc(this);null!=a&&(this.curOp.scrollLeft=a);null!=b&&(this.curOp.scrollTop=b)}),getScrollInfo:function(){var a=this.display.scroller;return{left:a.scrollLeft,top:a.scrollTop,\nheight:a.scrollHeight-da(this)-this.display.barHeight,width:a.scrollWidth-da(this)-this.display.barWidth,clientHeight:Nc(this),clientWidth:pa(this)}},scrollIntoView:M(function(a,b){null==a?(a={from:this.doc.sel.primary().head,to:null},null==b&&(b=this.options.cursorScrollMargin)):\"number\"==typeof a?a={from:r(a,0),to:null}:null==a.from&&(a={from:a,to:null});a.to||(a.to=a.from);a.margin=b||0;if(null!=a.from.line)mc(this),this.curOp.scrollToPos=a;else{var c=cc(this,Math.min(a.from.left,a.to.left),Math.min(a.from.top,\na.to.top)-a.margin,Math.max(a.from.right,a.to.right),Math.max(a.from.bottom,a.to.bottom)+a.margin);this.scrollTo(c.scrollLeft,c.scrollTop)}}),setSize:M(function(a,b){function c(a){return\"number\"==typeof a||/^\\d+$/.test(String(a))?a+\"px\":a}var d=this;null!=a&&(d.display.wrapper.style.width=c(a));null!=b&&(d.display.wrapper.style.height=c(b));d.options.lineWrapping&&me(this);var e=d.display.viewFrom;d.doc.iter(e,d.display.viewTo,function(a){if(a.widgets)for(var b=0;b<a.widgets.length;b++)if(a.widgets[b].noHScroll){na(d,\ne,\"widget\");break}++e});d.curOp.forceUpdate=!0;K(d,\"refresh\",this)}),operation:function(a){return T(this,a)},refresh:M(function(){var a=this.display.cachedTextHeight;Q(this);this.curOp.forceUpdate=!0;hb(this);this.scrollTo(this.doc.scrollLeft,this.doc.scrollTop);Cc(this);(null==a||.5<Math.abs(a-xa(this.display)))&&Ac(this);K(this,\"refresh\",this)}),swapDoc:M(function(a){var b=this.doc;b.cm=null;Ed(this,a);hb(this);this.display.input.reset();this.scrollTo(a.scrollLeft,a.scrollTop);this.curOp.forceScroll=\n!0;L(this,\"swapDoc\",this,b);return b}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}};Ya(q);var qf=q.defaults={},Ka=q.optionHandlers={},Fd=q.Init={toString:function(){return\"CodeMirror.Init\"}};x(\"value\",\"\",function(a,b){a.setValue(b)},!0);x(\"mode\",null,function(a,b){a.doc.modeOption=b;zc(a)},!0);x(\"indentUnit\",\n2,zc,!0);x(\"indentWithTabs\",!1);x(\"smartIndent\",!0);x(\"tabSize\",4,function(a){eb(a);hb(a);Q(a)},!0);x(\"specialChars\",/[\\t\\u0000-\\u0019\\u00ad\\u200b-\\u200f\\u2028\\u2029\\ufeff]/g,function(a,b,c){a.state.specialChars=new RegExp(b.source+(b.test(\"\\t\")?\"\":\"|\\t\"),\"g\");c!=q.Init&&a.refresh()});x(\"specialCharPlaceholder\",function(a){var b=t(\"span\",\"•\",\"cm-invalidchar\");b.title=\"\\\\u\"+a.charCodeAt(0).toString(16);b.setAttribute(\"aria-label\",b.title);return b},function(a){a.refresh()},!0);x(\"electricChars\",!0);\nx(\"inputStyle\",ab?\"contenteditable\":\"textarea\",function(){throw Error(\"inputStyle can not (yet) be changed in a running editor\");},!0);x(\"rtlMoveVisually\",!mg);x(\"wholeLineUpdateBefore\",!0);x(\"theme\",\"default\",function(a){Bd(a);ib(a)},!0);x(\"keyMap\",\"default\",function(a,b,c){b=pc(b);(c=c!=q.Init&&pc(c))&&c.detach&&c.detach(a,b);b.attach&&b.attach(a,c||null)});x(\"extraKeys\",null);x(\"lineWrapping\",!1,function(a){a.options.lineWrapping?(mb(a.display.wrapper,\"CodeMirror-wrap\"),a.display.sizer.style.minWidth=\n\"\",a.display.sizerWidth=null):(kb(a.display.wrapper,\"CodeMirror-wrap\"),Dc(a));Ac(a);Q(a);hb(a);setTimeout(function(){Na(a)},100)},!0);x(\"gutters\",[],function(a){wc(a.options);ib(a)},!0);x(\"fixedGutter\",!0,function(a,b){a.display.gutters.style.left=b?Ic(a.display)+\"px\":\"0\";a.refresh()},!0);x(\"coverGutterNextToScrollbar\",!1,function(a){Na(a)},!0);x(\"scrollbarStyle\",\"native\",function(a){Cd(a);Na(a);a.display.scrollbars.setScrollTop(a.doc.scrollTop);a.display.scrollbars.setScrollLeft(a.doc.scrollLeft)},\n!0);x(\"lineNumbers\",!1,function(a){wc(a.options);ib(a)},!0);x(\"firstLineNumber\",1,ib,!0);x(\"lineNumberFormatter\",function(a){return a},ib,!0);x(\"showCursorWhenSelecting\",!1,nb,!0);x(\"resetSelectionOnContextMenu\",!0);x(\"lineWiseCopyCut\",!0);x(\"readOnly\",!1,function(a,b){\"nocursor\"==b?(db(a),a.display.input.blur(),a.display.disabled=!0):(a.display.disabled=!1,b||a.display.input.reset())});x(\"disableInput\",!1,function(a,b){b||a.display.input.reset()},!0);x(\"dragDrop\",!0,function(a,b,c){!b!=!(c&&c!=q.Init)&&\n(c=a.display.dragFunctions,b=b?v:ka,b(a.display.scroller,\"dragstart\",c.start),b(a.display.scroller,\"dragenter\",c.simple),b(a.display.scroller,\"dragover\",c.simple),b(a.display.scroller,\"drop\",c.drop))});x(\"cursorBlinkRate\",530);x(\"cursorScrollMargin\",0);x(\"cursorHeight\",1,nb,!0);x(\"singleCursorHeightPerLine\",!0,nb,!0);x(\"workTime\",100);x(\"workDelay\",100);x(\"flattenSpans\",!0,eb,!0);x(\"addModeClass\",!1,eb,!0);x(\"pollInterval\",100);x(\"undoDepth\",200,function(a,b){a.doc.history.undoDepth=b});x(\"historyEventDelay\",\n1250);x(\"viewportMargin\",10,function(a){a.refresh()},!0);x(\"maxHighlightLength\",1E4,eb,!0);x(\"moveInputWithCursor\",!0,function(a,b){b||a.display.input.resetPosition()});x(\"tabindex\",null,function(a,b){a.display.input.getField().tabIndex=b||\"\"});x(\"autofocus\",null);var pf=q.modes={},Hb=q.mimeModes={};q.defineMode=function(a,b){q.defaults.mode||\"null\"==a||(q.defaults.mode=a);2<arguments.length&&(b.dependencies=Array.prototype.slice.call(arguments,2));pf[a]=b};q.defineMIME=function(a,b){Hb[a]=b};q.resolveMode=\nfunction(a){if(\"string\"==typeof a&&Hb.hasOwnProperty(a))a=Hb[a];else if(a&&\"string\"==typeof a.name&&Hb.hasOwnProperty(a.name)){var b=Hb[a.name];\"string\"==typeof b&&(b={name:b});a=ff(b,a);a.name=b.name}else if(\"string\"==typeof a&&/^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(a))return q.resolveMode(\"application/xml\");return\"string\"==typeof a?{name:a}:a||{name:\"null\"}};q.getMode=function(a,b){b=q.resolveMode(b);var c=pf[b.name];if(!c)return q.getMode(a,\"text/plain\");c=c(a,b);if(Ib.hasOwnProperty(b.name)){var d=Ib[b.name],\ne;for(e in d)d.hasOwnProperty(e)&&(c.hasOwnProperty(e)&&(c[\"_\"+e]=c[e]),c[e]=d[e])}c.name=b.name;b.helperType&&(c.helperType=b.helperType);if(b.modeProps)for(e in b.modeProps)c[e]=b.modeProps[e];return c};q.defineMode(\"null\",function(){return{token:function(a){a.skipToEnd()}}});q.defineMIME(\"text/plain\",\"null\");var Ib=q.modeExtensions={};q.extendMode=function(a,b){var c=Ib.hasOwnProperty(a)?Ib[a]:Ib[a]={};V(b,c)};q.defineExtension=function(a,b){q.prototype[a]=b};q.defineDocExtension=function(a,b){P.prototype[a]=\nb};q.defineOption=x;var yc=[];q.defineInitHook=function(a){yc.push(a)};var $a=q.helpers={};q.registerHelper=function(a,b,c){$a.hasOwnProperty(a)||($a[a]=q[a]={_global:[]});$a[a][b]=c};q.registerGlobalHelper=function(a,b,c,d){q.registerHelper(a,b,d);$a[a]._global.push({pred:c,val:d})};var Sa=q.copyState=function(a,b){if(!0===b)return b;if(a.copyState)return a.copyState(b);var c={},d;for(d in b){var e=b[d];e instanceof Array&&(e=e.concat([]));c[d]=e}return c},Df=q.startState=function(a,b,c){return a.startState?\na.startState(b,c):!0};q.innerMode=function(a,b){for(;a.innerMode;){var c=a.innerMode(b);if(!c||c.mode==a)break;b=c.state;a=c.mode}return c||{mode:a,state:b}};var ic=q.commands={selectAll:function(a){a.setSelection(r(a.firstLine(),0),r(a.lastLine()),ha)},singleSelection:function(a){a.setSelection(a.getCursor(\"anchor\"),a.getCursor(\"head\"),ha)},killLine:function(a){Va(a,function(b){if(b.empty()){var c=u(a.doc,b.head.line).text.length;return b.head.ch==c&&b.head.line<a.lastLine()?{from:b.head,to:r(b.head.line+\n1,0)}:{from:b.head,to:r(b.head.line,c)}}return{from:b.from(),to:b.to()}})},deleteLine:function(a){Va(a,function(b){return{from:r(b.from().line,0),to:w(a.doc,r(b.to().line+1,0))}})},delLineLeft:function(a){Va(a,function(a){return{from:r(a.from().line,0),to:a.from()}})},delWrappedLineLeft:function(a){Va(a,function(b){var c=a.charCoords(b.head,\"div\").top+5;return{from:a.coordsChar({left:0,top:c},\"div\"),to:b.from()}})},delWrappedLineRight:function(a){Va(a,function(b){var c=a.charCoords(b.head,\"div\").top+\n5,c=a.coordsChar({left:a.display.lineDiv.offsetWidth+100,top:c},\"div\");return{from:b.from(),to:c}})},undo:function(a){a.undo()},redo:function(a){a.redo()},undoSelection:function(a){a.undoSelection()},redoSelection:function(a){a.redoSelection()},goDocStart:function(a){a.extendSelection(r(a.firstLine(),0))},goDocEnd:function(a){a.extendSelection(r(a.lastLine()))},goLineStart:function(a){a.extendSelectionsBy(function(b){return kf(a,b.head.line)},{origin:\"+move\",bias:1})},goLineStartSmart:function(a){a.extendSelectionsBy(function(b){return lf(a,\nb.head)},{origin:\"+move\",bias:1})},goLineEnd:function(a){a.extendSelectionsBy(function(b){b=b.head.line;for(var c,d=u(a.doc,b);c=Aa(d,!1);)d=c.find(1,!0).line,b=null;c=(c=Y(d))?c[0].level%2?ac(d):bc(d):d.text.length;return r(null==b?F(d):b,c)},{origin:\"+move\",bias:-1})},goLineRight:function(a){a.extendSelectionsBy(function(b){b=a.charCoords(b.head,\"div\").top+5;return a.coordsChar({left:a.display.lineDiv.offsetWidth+100,top:b},\"div\")},Gb)},goLineLeft:function(a){a.extendSelectionsBy(function(b){b=\na.charCoords(b.head,\"div\").top+5;return a.coordsChar({left:0,top:b},\"div\")},Gb)},goLineLeftSmart:function(a){a.extendSelectionsBy(function(b){var c=a.charCoords(b.head,\"div\").top+5,c=a.coordsChar({left:0,top:c},\"div\");return c.ch<a.getLine(c.line).search(/\\S/)?lf(a,b.head):c},Gb)},goLineUp:function(a){a.moveV(-1,\"line\")},goLineDown:function(a){a.moveV(1,\"line\")},goPageUp:function(a){a.moveV(-1,\"page\")},goPageDown:function(a){a.moveV(1,\"page\")},goCharLeft:function(a){a.moveH(-1,\"char\")},goCharRight:function(a){a.moveH(1,\n\"char\")},goColumnLeft:function(a){a.moveH(-1,\"column\")},goColumnRight:function(a){a.moveH(1,\"column\")},goWordLeft:function(a){a.moveH(-1,\"word\")},goGroupRight:function(a){a.moveH(1,\"group\")},goGroupLeft:function(a){a.moveH(-1,\"group\")},goWordRight:function(a){a.moveH(1,\"word\")},delCharBefore:function(a){a.deleteH(-1,\"char\")},delCharAfter:function(a){a.deleteH(1,\"char\")},delWordBefore:function(a){a.deleteH(-1,\"word\")},delWordAfter:function(a){a.deleteH(1,\"word\")},delGroupBefore:function(a){a.deleteH(-1,\n\"group\")},delGroupAfter:function(a){a.deleteH(1,\"group\")},indentAuto:function(a){a.indentSelection(\"smart\")},indentMore:function(a){a.indentSelection(\"add\")},indentLess:function(a){a.indentSelection(\"subtract\")},insertTab:function(a){a.replaceSelection(\"\\t\")},insertSoftTab:function(a){for(var b=[],c=a.listSelections(),d=a.options.tabSize,e=0;e<c.length;e++){var f=c[e].from(),f=aa(a.getLine(f.line),f.ch,d);b.push(Array(d-f%d+1).join(\" \"))}a.replaceSelections(b)},defaultTab:function(a){a.somethingSelected()?\na.indentSelection(\"add\"):a.execCommand(\"insertTab\")},transposeChars:function(a){T(a,function(){for(var b=a.listSelections(),c=[],d=0;d<b.length;d++){var e=b[d].head,f=u(a.doc,e.line).text;if(f)if(e.ch==f.length&&(e=new r(e.line,e.ch-1)),0<e.ch)e=new r(e.line,e.ch+1),a.replaceRange(f.charAt(e.ch-1)+f.charAt(e.ch-2),r(e.line,e.ch-2),e,\"+transpose\");else if(e.line>a.doc.first){var g=u(a.doc,e.line-1).text;g&&a.replaceRange(f.charAt(0)+\"\\n\"+g.charAt(g.length-1),r(e.line-1,g.length-1),r(e.line,1),\"+transpose\")}c.push(new z(e,\ne))}a.setSelections(c)})},newlineAndIndent:function(a){T(a,function(){for(var b=a.listSelections().length,c=0;c<b;c++){var d=a.listSelections()[c];a.replaceRange(\"\\n\",d.anchor,d.head,\"+input\");a.indentLine(d.from().line+1,null,!0);Pa(a)}})},toggleOverwrite:function(a){a.toggleOverwrite()}},ua=q.keyMap={};ua.basic={Left:\"goCharLeft\",Right:\"goCharRight\",Up:\"goLineUp\",Down:\"goLineDown\",End:\"goLineEnd\",Home:\"goLineStartSmart\",PageUp:\"goPageUp\",PageDown:\"goPageDown\",Delete:\"delCharAfter\",Backspace:\"delCharBefore\",\n\"Shift-Backspace\":\"delCharBefore\",Tab:\"defaultTab\",\"Shift-Tab\":\"indentAuto\",Enter:\"newlineAndIndent\",Insert:\"toggleOverwrite\",Esc:\"singleSelection\"};ua.pcDefault={\"Ctrl-A\":\"selectAll\",\"Ctrl-D\":\"deleteLine\",\"Ctrl-Z\":\"undo\",\"Shift-Ctrl-Z\":\"redo\",\"Ctrl-Y\":\"redo\",\"Ctrl-Home\":\"goDocStart\",\"Ctrl-End\":\"goDocEnd\",\"Ctrl-Up\":\"goLineUp\",\"Ctrl-Down\":\"goLineDown\",\"Ctrl-Left\":\"goGroupLeft\",\"Ctrl-Right\":\"goGroupRight\",\"Alt-Left\":\"goLineStart\",\"Alt-Right\":\"goLineEnd\",\"Ctrl-Backspace\":\"delGroupBefore\",\"Ctrl-Delete\":\"delGroupAfter\",\n\"Ctrl-S\":\"save\",\"Ctrl-F\":\"find\",\"Ctrl-G\":\"findNext\",\"Shift-Ctrl-G\":\"findPrev\",\"Shift-Ctrl-F\":\"replace\",\"Shift-Ctrl-R\":\"replaceAll\",\"Ctrl-[\":\"indentLess\",\"Ctrl-]\":\"indentMore\",\"Ctrl-U\":\"undoSelection\",\"Shift-Ctrl-U\":\"redoSelection\",\"Alt-U\":\"redoSelection\",fallthrough:\"basic\"};ua.emacsy={\"Ctrl-F\":\"goCharRight\",\"Ctrl-B\":\"goCharLeft\",\"Ctrl-P\":\"goLineUp\",\"Ctrl-N\":\"goLineDown\",\"Alt-F\":\"goWordRight\",\"Alt-B\":\"goWordLeft\",\"Ctrl-A\":\"goLineStart\",\"Ctrl-E\":\"goLineEnd\",\"Ctrl-V\":\"goPageDown\",\"Shift-Ctrl-V\":\"goPageUp\",\n\"Ctrl-D\":\"delCharAfter\",\"Ctrl-H\":\"delCharBefore\",\"Alt-D\":\"delWordAfter\",\"Alt-Backspace\":\"delWordBefore\",\"Ctrl-K\":\"killLine\",\"Ctrl-T\":\"transposeChars\"};ua.macDefault={\"Cmd-A\":\"selectAll\",\"Cmd-D\":\"deleteLine\",\"Cmd-Z\":\"undo\",\"Shift-Cmd-Z\":\"redo\",\"Cmd-Y\":\"redo\",\"Cmd-Home\":\"goDocStart\",\"Cmd-Up\":\"goDocStart\",\"Cmd-End\":\"goDocEnd\",\"Cmd-Down\":\"goDocEnd\",\"Alt-Left\":\"goGroupLeft\",\"Alt-Right\":\"goGroupRight\",\"Cmd-Left\":\"goLineLeft\",\"Cmd-Right\":\"goLineRight\",\"Alt-Backspace\":\"delGroupBefore\",\"Ctrl-Alt-Backspace\":\"delGroupAfter\",\n\"Alt-Delete\":\"delGroupAfter\",\"Cmd-S\":\"save\",\"Cmd-F\":\"find\",\"Cmd-G\":\"findNext\",\"Shift-Cmd-G\":\"findPrev\",\"Cmd-Alt-F\":\"replace\",\"Shift-Cmd-Alt-F\":\"replaceAll\",\"Cmd-[\":\"indentLess\",\"Cmd-]\":\"indentMore\",\"Cmd-Backspace\":\"delWrappedLineLeft\",\"Cmd-Delete\":\"delWrappedLineRight\",\"Cmd-U\":\"undoSelection\",\"Shift-Cmd-U\":\"redoSelection\",\"Ctrl-Up\":\"goDocStart\",\"Ctrl-Down\":\"goDocEnd\",fallthrough:[\"basic\",\"emacsy\"]};ua[\"default\"]=W?ua.macDefault:ua.pcDefault;q.normalizeKeyMap=function(a){var b={},c;for(c in a)if(a.hasOwnProperty(c)){var d=\na[c];if(!/^(name|fallthrough|(de|at)tach)$/.test(c)){if(\"...\"!=d)for(var e=ob(c.split(\" \"),Wf),f=0;f<e.length;f++){var g,h;f==e.length-1?(h=c,g=d):(h=e.slice(0,f+1).join(\" \"),g=\"...\");var k=b[h];if(!k)b[h]=g;else if(k!=g)throw Error(\"Inconsistent bindings for \"+h);}delete a[c]}}for(var l in b)a[l]=b[l];return a};var xb=q.lookupKey=function(a,b,c,d){b=pc(b);var e=b.call?b.call(a,d):b[a];if(!1===e)return\"nothing\";if(\"...\"===e)return\"multi\";if(null!=e&&c(e))return\"handled\";if(b.fallthrough){if(\"[object Array]\"!=\nObject.prototype.toString.call(b.fallthrough))return xb(a,b.fallthrough,c,d);for(e=0;e<b.fallthrough.length;e++){var f=xb(a,b.fallthrough[e],c,d);if(f)return f}}},Pf=q.isModifierKey=function(a){a=\"string\"==typeof a?a:va[a.keyCode];return\"Ctrl\"==a||\"Alt\"==a||\"Shift\"==a||\"Mod\"==a},Rf=q.keyName=function(a,b){if(ba&&34==a.keyCode&&a[\"char\"])return!1;var c=va[a.keyCode],d=c;if(null==d||a.altGraphKey)return!1;a.altKey&&\"Alt\"!=c&&(d=\"Alt-\"+d);(of?a.metaKey:a.ctrlKey)&&\"Ctrl\"!=c&&(d=\"Ctrl-\"+d);(of?a.ctrlKey:\na.metaKey)&&\"Cmd\"!=c&&(d=\"Cmd-\"+d);!b&&a.shiftKey&&\"Shift\"!=c&&(d=\"Shift-\"+d);return d};q.fromTextArea=function(a,b){function c(){a.value=k.getValue()}b=b?V(b):{};b.value=a.value;!b.tabindex&&a.tabIndex&&(b.tabindex=a.tabIndex);!b.placeholder&&a.placeholder&&(b.placeholder=a.placeholder);if(null==b.autofocus){var d=fa();b.autofocus=d==a||null!=a.getAttribute(\"autofocus\")&&d==document.body}if(a.form&&(v(a.form,\"submit\",c),!b.leaveSubmitMethodAlone)){var e=a.form,f=e.submit;try{var g=e.submit=function(){c();\ne.submit=f;e.submit();e.submit=g}}catch(h){}}b.finishInit=function(b){b.save=c;b.getTextArea=function(){return a};b.toTextArea=function(){b.toTextArea=isNaN;c();a.parentNode.removeChild(b.getWrapperElement());a.style.display=\"\";a.form&&(ka(a.form,\"submit\",c),\"function\"==typeof a.form.submit&&(a.form.submit=f))}};a.style.display=\"none\";var k=q(function(b){a.parentNode.insertBefore(b,a.nextSibling)},b);return k};var tc=q.StringStream=function(a,b){this.pos=this.start=0;this.string=a;this.tabSize=b||\n8;this.lineStart=this.lastColumnPos=this.lastColumnValue=0};tc.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},eat:function(a){var b=this.string.charAt(this.pos);if(\"string\"==typeof a?b==a:b&&(a.test?a.test(b):a(b)))return++this.pos,b},eatWhile:function(a){for(var b=this.pos;this.eat(a););return this.pos>\nb},eatSpace:function(){for(var a=this.pos;/[\\s\\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){a=this.string.indexOf(a,this.pos);if(-1<a)return this.pos=a,!0},backUp:function(a){this.pos-=a},column:function(){this.lastColumnPos<this.start&&(this.lastColumnValue=aa(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start);return this.lastColumnValue-(this.lineStart?\naa(this.string,this.lineStart,this.tabSize):0)},indentation:function(){return aa(this.string,null,this.tabSize)-(this.lineStart?aa(this.string,this.lineStart,this.tabSize):0)},match:function(a,b,c){if(\"string\"==typeof a){var d=function(a){return c?a.toLowerCase():a},e=this.string.substr(this.pos,a.length);if(d(e)==d(a))return!1!==b&&(this.pos+=a.length),!0}else{if((a=this.string.slice(this.pos).match(a))&&0<a.index)return null;a&&!1!==b&&(this.pos+=a[0].length);return a}},current:function(){return this.string.slice(this.start,\nthis.pos)},hideFirstChars:function(a,b){this.lineStart+=a;try{return b()}finally{this.lineStart-=a}}};var sd=0,Ha=q.TextMarker=function(a,b){this.lines=[];this.type=b;this.doc=a;this.id=++sd};Ya(Ha);Ha.prototype.clear=function(){if(!this.explicitlyCleared){var a=this.doc.cm,b=a&&!a.curOp;b&&Ja(a);if(S(this,\"clear\")){var c=this.find();c&&L(this,\"clear\",c.from,c.to)}for(var d=c=null,e=0;e<this.lines.length;++e){var f=this.lines[e],g=zb(f.markedSpans,this);a&&!this.collapsed?na(a,F(f),\"text\"):a&&(null!=\ng.to&&(d=F(f)),null!=g.from&&(c=F(f)));for(var h=f,k=f.markedSpans,l=g,m=void 0,p=0;p<k.length;++p)k[p]!=l&&(m||(m=[])).push(k[p]);h.markedSpans=m;null==g.from&&this.collapsed&&!ya(this.doc,f)&&a&&ca(f,xa(a.display))}if(a&&this.collapsed&&!a.options.lineWrapping)for(e=0;e<this.lines.length;++e)f=ia(this.lines[e]),g=Kb(f),g>a.display.maxLineLength&&(a.display.maxLine=f,a.display.maxLineLength=g,a.display.maxLineChanged=!0);null!=c&&a&&this.collapsed&&Q(a,c,d+1);this.lines.length=0;this.explicitlyCleared=\n!0;this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,a&&ge(a.doc));a&&L(a,\"markerCleared\",a,this);b&&La(a);this.parent&&this.parent.clear()}};Ha.prototype.find=function(a,b){null==a&&\"bookmark\"==this.type&&(a=1);for(var c,d,e=0;e<this.lines.length;++e){var f=this.lines[e],g=zb(f.markedSpans,this);if(null!=g.from&&(c=r(b?f:F(f),g.from),-1==a))return c;if(null!=g.to&&(d=r(b?f:F(f),g.to),1==a))return d}return c&&{from:c,to:d}};Ha.prototype.changed=function(){var a=this.find(-1,!0),b=this,c=this.doc.cm;\na&&c&&T(c,function(){var d=a.line,e=F(a.line);if(e=Vc(c,e))le(e),c.curOp.selectionChanged=c.curOp.forceUpdate=!0;c.curOp.updateMaxLine=!0;ya(b.doc,d)||null==b.height||(e=b.height,b.height=null,(e=ub(b)-e)&&ca(d,d.height+e))})};Ha.prototype.attachLine=function(a){if(!this.lines.length&&this.doc.cm){var b=this.doc.cm.curOp;b.maybeHiddenMarkers&&-1!=D(b.maybeHiddenMarkers,this)||(b.maybeUnhiddenMarkers||(b.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(a)};Ha.prototype.detachLine=function(a){this.lines.splice(D(this.lines,\na),1);!this.lines.length&&this.doc.cm&&(a=this.doc.cm.curOp,(a.maybeHiddenMarkers||(a.maybeHiddenMarkers=[])).push(this))};var sd=0,rc=q.SharedTextMarker=function(a,b){this.markers=a;this.primary=b;for(var c=0;c<a.length;++c)a[c].parent=this};Ya(rc);rc.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var a=0;a<this.markers.length;++a)this.markers[a].clear();L(this,\"clear\")}};rc.prototype.find=function(a,b){return this.primary.find(a,b)};var sc=q.LineWidget=function(a,\nb,c){if(c)for(var d in c)c.hasOwnProperty(d)&&(this[d]=c[d]);this.doc=a;this.node=b};Ya(sc);sc.prototype.clear=function(){var a=this.doc.cm,b=this.line.widgets,c=this.line,d=F(c);if(null!=d&&b){for(var e=0;e<b.length;++e)b[e]==this&&b.splice(e--,1);b.length||(c.widgets=null);var f=ub(this);ca(c,Math.max(0,c.height-f));a&&T(a,function(){var b=-f;ea(c)<(a.curOp&&a.curOp.scrollTop||a.doc.scrollTop)&&lc(a,null,b);na(a,d,\"widget\")})}};sc.prototype.changed=function(){var a=this.height,b=this.doc.cm,c=this.line;\nthis.height=null;var d=ub(this)-a;d&&(ca(c,c.height+d),b&&T(b,function(){b.curOp.forceUpdate=!0;ea(c)<(b.curOp&&b.curOp.scrollTop||b.doc.scrollTop)&&lc(b,null,d)}))};var Ab=q.Line=function(a,b,c){this.text=a;Ue(this,b);this.height=c?c(this):1};Ya(Ab);Ab.prototype.lineNo=function(){return F(this)};var bg={},ag={};Bb.prototype={chunkSize:function(){return this.lines.length},removeInner:function(a,b){for(var c=a,d=a+b;c<d;++c){var e=this.lines[c];this.height-=e.height;var f=e;f.parent=null;Te(f);L(e,\n\"delete\")}this.lines.splice(a,b)},collapse:function(a){a.push.apply(a,this.lines)},insertInner:function(a,b,c){this.height+=c;this.lines=this.lines.slice(0,a).concat(b).concat(this.lines.slice(a));for(a=0;a<b.length;++a)b[a].parent=this},iterN:function(a,b,c){for(b=a+b;a<b;++a)if(c(this.lines[a]))return!0}};Cb.prototype={chunkSize:function(){return this.size},removeInner:function(a,b){this.size-=b;for(var c=0;c<this.children.length;++c){var d=this.children[c],e=d.chunkSize();if(a<e){var f=Math.min(b,\ne-a),g=d.height;d.removeInner(a,f);this.height-=g-d.height;e==f&&(this.children.splice(c--,1),d.parent=null);if(0==(b-=f))break;a=0}else a-=e}25>this.size-b&&(1<this.children.length||!(this.children[0]instanceof Bb))&&(c=[],this.collapse(c),this.children=[new Bb(c)],this.children[0].parent=this)},collapse:function(a){for(var b=0;b<this.children.length;++b)this.children[b].collapse(a)},insertInner:function(a,b,c){this.size+=b.length;this.height+=c;for(var d=0;d<this.children.length;++d){var e=this.children[d],\nf=e.chunkSize();if(a<=f){e.insertInner(a,b,c);if(e.lines&&50<e.lines.length){for(;50<e.lines.length;)a=e.lines.splice(e.lines.length-25,25),a=new Bb(a),e.height-=a.height,this.children.splice(d+1,0,a),a.parent=this;this.maybeSpill()}break}a-=f}},maybeSpill:function(){if(!(10>=this.children.length)){var a=this;do{var b=a.children.splice(a.children.length-5,5),b=new Cb(b);if(a.parent){a.size-=b.size;a.height-=b.height;var c=D(a.parent.children,a);a.parent.children.splice(c+1,0,b)}else c=new Cb(a.children),\nc.parent=a,a.children=[c,b],a=c;b.parent=a.parent}while(10<a.children.length);a.parent.maybeSpill()}},iterN:function(a,b,c){for(var d=0;d<this.children.length;++d){var e=this.children[d],f=e.chunkSize();if(a<f){f=Math.min(b,f-a);if(e.iterN(a,f,c))return!0;if(0==(b-=f))break;a=0}else a-=f}}};var og=0,P=q.Doc=function(a,b,c){if(!(this instanceof P))return new P(a,b,c);null==c&&(c=0);Cb.call(this,[new Bb([new Ab(\"\",null)])]);this.first=c;this.scrollTop=this.scrollLeft=0;this.cantEdit=!1;this.cleanGeneration=\n1;this.frontier=c;c=r(c,0);this.sel=ga(c);this.history=new uc(null);this.id=++og;this.modeOption=b;\"string\"==typeof a&&(a=sa(a));qd(this,{from:c,to:c,text:a});H(this,ga(c),ha)};P.prototype=ff(Cb.prototype,{constructor:P,iter:function(a,b,c){c?this.iterN(a-this.first,b-a,c):this.iterN(this.first,this.first+this.size,a)},insert:function(a,b){for(var c=0,d=0;d<b.length;++d)c+=b[d].height;this.insertInner(a-this.first,b,c)},remove:function(a,b){this.removeInner(a-this.first,b)},getValue:function(a){var b=\nxd(this,this.first,this.first+this.size);return!1===a?b:b.join(a||\"\\n\")},setValue:N(function(a){var b=r(this.first,0),c=this.first+this.size-1;Oa(this,{from:b,to:r(c,u(this,c).text.length),text:sa(a),origin:\"setValue\",full:!0},!0);H(this,ga(b))}),replaceRange:function(a,b,c,d){b=w(this,b);c=c?w(this,c):b;wb(this,a,b,c,d)},getRange:function(a,b,c){a=Da(this,w(this,a),w(this,b));return!1===c?a:a.join(c||\"\\n\")},getLine:function(a){return(a=this.getLineHandle(a))&&a.text},getLineHandle:function(a){if(qb(this,\na))return u(this,a)},getLineNumber:function(a){return F(a)},getLineHandleVisualStart:function(a){\"number\"==typeof a&&(a=u(this,a));return ia(a)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(a){return w(this,a)},getCursor:function(a){var b=this.sel.primary();return null==a||\"head\"==a?b.head:\"anchor\"==a?b.anchor:\"end\"==a||\"to\"==a||!1===a?b.to():b.from()},listSelections:function(){return this.sel.ranges},\nsomethingSelected:function(){return this.sel.somethingSelected()},setCursor:N(function(a,b,c){a=w(this,\"number\"==typeof a?r(a,b||0):a);H(this,ga(a,null),c)}),setSelection:N(function(a,b,c){var d=w(this,a);a=w(this,b||a);H(this,ga(d,a),c)}),extendSelection:N(function(a,b,c){Ub(this,w(this,a),b&&w(this,b),c)}),extendSelections:N(function(a,b){for(var c=[],d=0;d<a.length;d++)c[d]=w(this,a[d]);ae(this,c)}),extendSelectionsBy:N(function(a,b){ae(this,ob(this.sel.ranges,a),b)}),setSelections:N(function(a,\nb,c){if(a.length){for(var d=0,e=[];d<a.length;d++)e[d]=new z(w(this,a[d].anchor),w(this,a[d].head));null==b&&(b=Math.min(a.length-1,this.sel.primIndex));H(this,Z(e,b),c)}}),addSelection:N(function(a,b,c){var d=this.sel.ranges.slice(0);d.push(new z(w(this,a),w(this,b||a)));H(this,Z(d,d.length-1),c)}),getSelection:function(a){for(var b=this.sel.ranges,c,d=0;d<b.length;d++){var e=Da(this,b[d].from(),b[d].to());c=c?c.concat(e):e}return!1===a?c:c.join(a||\"\\n\")},getSelections:function(a){for(var b=[],c=\nthis.sel.ranges,d=0;d<c.length;d++){var e=Da(this,c[d].from(),c[d].to());!1!==a&&(e=e.join(a||\"\\n\"));b[d]=e}return b},replaceSelection:function(a,b,c){for(var d=[],e=0;e<this.sel.ranges.length;e++)d[e]=a;this.replaceSelections(d,b,c||\"+input\")},replaceSelections:N(function(a,b,c){for(var d=[],e=this.sel,f=0;f<e.ranges.length;f++){var g=e.ranges[f];d[f]={from:g.from(),to:g.to(),text:sa(a[f]),origin:c}}if(f=b&&\"end\"!=b){f=[];c=a=r(this.first,0);for(e=0;e<d.length;e++){var h=d[e],g=Ee(h.from,a,c),k=\nEe(ta(h),a,c);a=h.to;c=k;\"around\"==b?(h=this.sel.ranges[e],h=0>y(h.head,h.anchor),f[e]=new z(h?k:g,h?g:k)):f[e]=new z(g,g)}f=new la(f,this.sel.primIndex)}b=f;for(f=d.length-1;0<=f;f--)Oa(this,d[f]);b?be(this,b):this.cm&&Pa(this.cm)}),undo:N(function(){kc(this,\"undo\")}),redo:N(function(){kc(this,\"redo\")}),undoSelection:N(function(){kc(this,\"undo\",!0)}),redoSelection:N(function(){kc(this,\"redo\",!0)}),setExtending:function(a){this.extend=a},getExtending:function(){return this.extend},historySize:function(){for(var a=\nthis.history,b=0,c=0,d=0;d<a.done.length;d++)a.done[d].ranges||++b;for(d=0;d<a.undone.length;d++)a.undone[d].ranges||++c;return{undo:b,redo:c}},clearHistory:function(){this.history=new uc(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(a){a&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null);return this.history.generation},isClean:function(a){return this.history.generation==(a||this.cleanGeneration)},\ngetHistory:function(){return{done:Xa(this.history.done),undone:Xa(this.history.undone)}},setHistory:function(a){var b=this.history=new uc(this.history.maxGeneration);b.done=Xa(a.done.slice(0),null,!0);b.undone=Xa(a.undone.slice(0),null,!0)},addLineClass:N(function(a,b,c){return nc(this,a,\"gutter\"==b?\"gutter\":\"class\",function(a){var e=\"text\"==b?\"textClass\":\"background\"==b?\"bgClass\":\"gutter\"==b?\"gutterClass\":\"wrapClass\";if(a[e]){if(Fb(c).test(a[e]))return!1;a[e]+=\" \"+c}else a[e]=c;return!0})}),removeLineClass:N(function(a,\nb,c){return nc(this,a,\"gutter\"==b?\"gutter\":\"class\",function(a){var e=\"text\"==b?\"textClass\":\"background\"==b?\"bgClass\":\"gutter\"==b?\"gutterClass\":\"wrapClass\",f=a[e];if(f)if(null==c)a[e]=null;else{var g=f.match(Fb(c));if(!g)return!1;var h=g.index+g[0].length;a[e]=f.slice(0,g.index)+(g.index&&h!=f.length?\" \":\"\")+f.slice(h)||null}else return!1;return!0})}),addLineWidget:N(function(a,b,c){return $f(this,a,b,c)}),removeLineWidget:function(a){a.clear()},markText:function(a,b,c){return Wa(this,w(this,a),w(this,\nb),c,\"range\")},setBookmark:function(a,b){var c={replacedWith:b&&(null==b.nodeType?b.widget:b),insertLeft:b&&b.insertLeft,clearWhenEmpty:!1,shared:b&&b.shared,handleMouseEvents:b&&b.handleMouseEvents};a=w(this,a);return Wa(this,a,a,c,\"bookmark\")},findMarksAt:function(a){a=w(this,a);var b=[],c=u(this,a.line).markedSpans;if(c)for(var d=0;d<c.length;++d){var e=c[d];(null==e.from||e.from<=a.ch)&&(null==e.to||e.to>=a.ch)&&b.push(e.marker.parent||e.marker)}return b},findMarks:function(a,b,c){a=w(this,a);\nb=w(this,b);var d=[],e=a.line;this.iter(a.line,b.line+1,function(f){if(f=f.markedSpans)for(var g=0;g<f.length;g++){var h=f[g];e==a.line&&a.ch>h.to||null==h.from&&e!=a.line||e==b.line&&h.from>b.ch||c&&!c(h.marker)||d.push(h.marker.parent||h.marker)}++e});return d},getAllMarks:function(){var a=[];this.iter(function(b){if(b=b.markedSpans)for(var c=0;c<b.length;++c)null!=b[c].from&&a.push(b[c].marker)});return a},posFromIndex:function(a){var b,c=this.first;this.iter(function(d){d=d.text.length+1;if(d>\na)return b=a,!0;a-=d;++c});return w(this,r(c,b))},indexFromPos:function(a){a=w(this,a);var b=a.ch;if(a.line<this.first||0>a.ch)return 0;this.iter(this.first,a.line,function(a){b+=a.text.length+1});return b},copy:function(a){var b=new P(xd(this,this.first,this.first+this.size),this.modeOption,this.first);b.scrollTop=this.scrollTop;b.scrollLeft=this.scrollLeft;b.sel=this.sel;b.extend=!1;a&&(b.history.undoDepth=this.history.undoDepth,b.setHistory(this.getHistory()));return b},linkedDoc:function(a){a||\n(a={});var b=this.first,c=this.first+this.size;null!=a.from&&a.from>b&&(b=a.from);null!=a.to&&a.to<c&&(c=a.to);b=new P(xd(this,b,c),a.mode||this.modeOption,b);a.sharedHist&&(b.history=this.history);(this.linked||(this.linked=[])).push({doc:b,sharedHist:a.sharedHist});b.linked=[{doc:this,isParent:!0,sharedHist:a.sharedHist}];a=Re(this);for(c=0;c<a.length;c++){var d=a[c],e=d.find(),f=b.clipPos(e.from),e=b.clipPos(e.to);y(f,e)&&(f=Wa(b,f,e,d.primary,d.primary.type),d.markers.push(f),f.parent=d)}return b},\nunlinkDoc:function(a){a instanceof q&&(a=a.doc);if(this.linked)for(var b=0;b<this.linked.length;++b)if(this.linked[b].doc==a){this.linked.splice(b,1);a.unlinkDoc(this);Yf(Re(this));break}if(a.history==this.history){var c=[a.id];Ga(a,function(a){c.push(a.id)},!0);a.history=new uc(null);a.history.done=Xa(this.history.done,c);a.history.undone=Xa(this.history.undone,c)}},iterLinkedDocs:function(a){Ga(this,a)},getMode:function(){return this.mode},getEditor:function(){return this.cm}});P.prototype.eachLine=\nP.prototype.iter;var pg=[\"iter\",\"insert\",\"remove\",\"copy\",\"getEditor\"],Jb;for(Jb in P.prototype)P.prototype.hasOwnProperty(Jb)&&0>D(pg,Jb)&&(q.prototype[Jb]=function(a){return function(){return a.apply(this.doc,arguments)}}(P.prototype[Jb]));Ya(P);var O=q.e_preventDefault=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},qg=q.e_stopPropagation=function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},jd=q.e_stop=function(a){O(a);qg(a)},v=q.on=function(a,b,c){a.addEventListener?\na.addEventListener(b,c,!1):a.attachEvent?a.attachEvent(\"on\"+b,c):(a=a._handlers||(a._handlers={}),(a[b]||(a[b]=[])).push(c))},ka=q.off=function(a,b,c){if(a.removeEventListener)a.removeEventListener(b,c,!1);else if(a.detachEvent)a.detachEvent(\"on\"+b,c);else if(a=a._handlers&&a._handlers[b])for(b=0;b<a.length;++b)if(a[b]==c){a.splice(b,1);break}},K=q.signal=function(a,b){var c=a._handlers&&a._handlers[b];if(c)for(var d=Array.prototype.slice.call(arguments,2),e=0;e<c.length;++e)c[e].apply(null,d)},Db=\nnull,Hd=30,Ae=q.Pass={toString:function(){return\"CodeMirror.Pass\"}},ha={scroll:!1},kd={origin:\"*mouse\"},Gb={origin:\"+move\"};bb.prototype.set=function(a,b){clearTimeout(this.id);this.id=setTimeout(b,a)};var aa=q.countColumn=function(a,b,c,d,e){null==b&&(b=a.search(/[^\\s\\u00a0]/),-1==b&&(b=a.length));d=d||0;for(e=e||0;;){var f=a.indexOf(\"\\t\",d);if(0>f||f>=b)return e+(b-d);e+=f-d;e+=c-e%c;d=f+1}},vc=[\"\"],Za=function(a){a.select()};Qa?Za=function(a){a.selectionStart=0;a.selectionEnd=a.value.length}:B&&\n(Za=function(a){try{a.select()}catch(b){}});var rg=/[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/,gf=q.isWordChar=function(a){return/\\w/.test(a)||\"\"<a&&(a.toUpperCase()!=a.toLowerCase()||rg.test(a))},ig=/[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/,\nEa;Ea=document.createRange?function(a,b,c,d){var e=document.createRange();e.setEnd(d||a,c);e.setStart(a,b);return e}:function(a,b,c){var d=document.body.createTextRange();try{d.moveToElementText(a.parentNode)}catch(e){return d}d.collapse(!0);d.moveEnd(\"character\",c);d.moveStart(\"character\",b);return d};var Wc=q.contains=function(a,b){3==b.nodeType&&(b=b.parentNode);if(a.contains)return a.contains(b);do if(11==b.nodeType&&(b=b.host),b==a)return!0;while(b=b.parentNode)};B&&11>C&&(fa=function(){try{return document.activeElement}catch(a){return document.body}});\nvar kb=q.rmClass=function(a,b){var c=a.className,d=Fb(b).exec(c);if(d){var e=c.slice(d.index+d[0].length);a.className=c.slice(0,d.index)+(e?d[1]+e:\"\")}},mb=q.addClass=function(a,b){var c=a.className;Fb(b).test(c)||(a.className+=(c?\" \":\"\")+b)},Dd=!1,Lf=function(){if(B&&9>C)return!1;var a=t(\"div\");return\"draggable\"in a||\"dragDrop\"in a}(),yd,vd,sa=q.splitLines=3!=\"\\n\\nb\".split(/\\n/).length?function(a){for(var b=0,c=[],d=a.length;b<=d;){var e=a.indexOf(\"\\n\",b);-1==e&&(e=a.length);var f=a.slice(b,\"\\r\"==\na.charAt(e-1)?e-1:e),g=f.indexOf(\"\\r\");-1!=g?(c.push(f.slice(0,g)),b+=g+1):(c.push(f),b=e+1)}return c}:function(a){return a.split(/\\r\\n?|\\n/)},ng=window.getSelection?function(a){try{return a.selectionStart!=a.selectionEnd}catch(b){return!1}}:function(a){try{var b=a.ownerDocument.selection.createRange()}catch(c){}return b&&b.parentElement()==a?0!=b.compareEndPoints(\"StartToEnd\",b):!1},Ce=function(){var a=t(\"div\");if(\"oncopy\"in a)return!0;a.setAttribute(\"oncopy\",\"return;\");return\"function\"==typeof a.oncopy}(),\nbd=null,va={3:\"Enter\",8:\"Backspace\",9:\"Tab\",13:\"Enter\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"PrintScrn\",45:\"Insert\",46:\"Delete\",59:\";\",61:\"\\x3d\",91:\"Mod\",92:\"Mod\",93:\"Mod\",107:\"\\x3d\",109:\"-\",127:\"Delete\",173:\"-\",186:\";\",187:\"\\x3d\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",63232:\"Up\",63233:\"Down\",63234:\"Left\",63235:\"Right\",63272:\"Delete\",63273:\"Home\",\n63275:\"End\",63276:\"PageUp\",63277:\"PageDown\",63302:\"Insert\"};q.keyNames=va;(function(){for(var a=0;10>a;a++)va[a+48]=va[a+96]=String(a);for(a=65;90>=a;a++)va[a]=String.fromCharCode(a);for(a=1;12>=a;a++)va[a+111]=va[a+63235]=\"F\"+a})();var vb,gg=function(){function a(a){return 247>=a?\"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\".charAt(a):\n1424<=a&&1524>=a?\"R\":1536<=a&&1773>=a?\"rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm\".charAt(a-1536):1774<=a&&2220>=a?\"r\":8192<=a&&8203>=a?\"w\":8204==a?\"b\":\"L\"}function b(a,b,c){this.level=a;this.from=b;this.to=c}var c=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/,d=/[stwN]/,e=/[LRr]/,f=/[Lb1n]/,g=/[1n]/;return function(h){if(!c.test(h))return!1;\nfor(var k=h.length,l=[],m=0,p;m<k;++m)l.push(a(h.charCodeAt(m)));for(var m=0,n=\"L\";m<k;++m)p=l[m],\"m\"==p?l[m]=n:n=p;m=0;for(n=\"L\";m<k;++m)p=l[m],\"1\"==p&&\"r\"==n?l[m]=\"n\":e.test(p)&&(n=p,\"r\"==p&&(l[m]=\"R\"));m=1;for(n=l[0];m<k-1;++m)p=l[m],\"+\"==p&&\"1\"==n&&\"1\"==l[m+1]?l[m]=\"1\":\",\"!=p||n!=l[m+1]||\"1\"!=n&&\"n\"!=n||(l[m]=n),n=p;for(m=0;m<k;++m)if(p=l[m],\",\"==p)l[m]=\"N\";else if(\"%\"==p){for(n=m+1;n<k&&\"%\"==l[n];++n);var q=m&&\"!\"==l[m-1]||n<k&&\"1\"==l[n]?\"1\":\"N\";for(p=m;p<n;++p)l[p]=q;m=n-1}m=0;for(n=\"L\";m<k;++m)p=\nl[m],\"L\"==n&&\"1\"==p?l[m]=\"L\":e.test(p)&&(n=p);for(m=0;m<k;++m)if(d.test(l[m])){for(n=m+1;n<k&&d.test(l[n]);++n);p=\"L\"==(n<k?l[n]:\"L\");q=\"L\"==(m?l[m-1]:\"L\")||p?\"L\":\"R\";for(p=m;p<n;++p)l[p]=q;m=n-1}for(var n=[],r,m=0;m<k;)if(f.test(l[m])){p=m;for(++m;m<k&&f.test(l[m]);++m);n.push(new b(0,p,m))}else{var t=m,q=n.length;for(++m;m<k&&\"L\"!=l[m];++m);for(p=t;p<m;)if(g.test(l[p])){t<p&&n.splice(q,0,new b(1,t,p));t=p;for(++p;p<m&&g.test(l[p]);++p);n.splice(q,0,new b(2,t,p));t=p}else++p;t<m&&n.splice(q,0,new b(1,\nt,m))}1==n[0].level&&(r=h.match(/^\\s+/))&&(n[0].from=r[0].length,n.unshift(new b(0,0,r[0].length)));1==A(n).level&&(r=h.match(/\\s+$/))&&(A(n).to-=r[0].length,n.push(new b(0,k-r[0].length,k)));2==n[0].level&&n.unshift(new b(1,n[0].to,n[0].to));n[0].level!=A(n).level&&n.push(new b(n[0].level,k,k));return n}}();q.version=\"5.2.0\";return q});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/lib/codemirror/javascript.js",
    "content": "﻿(function(p){\"object\"==typeof exports&&\"object\"==typeof module?p(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],p):p(CodeMirror)})(function(p){p.defineMode(\"javascript\",function(oa,t){function q(a,c,e){E=a;I=e;return c}function w(a,c){var e=a.next();if('\"'==e||\"'\"==e)return c.tokenize=pa(e),c.tokenize(a,c);if(\".\"==e&&a.match(/^\\d+(?:[eE][+\\-]?\\d+)?/))return q(\"number\",\"number\");if(\".\"==e&&a.match(\"..\"))return q(\"spread\",\"meta\");if(/[\\[\\]{}\\(\\),;\\:\\.]/.test(e))return q(e);\nif(\"\\x3d\"==e&&a.eat(\"\\x3e\"))return q(\"\\x3d\\x3e\",\"operator\");if(\"0\"==e&&a.eat(/x/i))return a.eatWhile(/[\\da-f]/i),q(\"number\",\"number\");if(/\\d/.test(e))return a.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/),q(\"number\",\"number\");if(\"/\"==e){if(a.eat(\"*\"))return c.tokenize=J,J(a,c);if(a.eat(\"/\"))return a.skipToEnd(),q(\"comment\",\"comment\");if(\"operator\"==c.lastType||\"keyword c\"==c.lastType||\"sof\"==c.lastType||/^[\\[{}\\(,;:]$/.test(c.lastType)){a:for(var e=!1,d,b=!1;null!=(d=a.next());){if(!e){if(\"/\"==d&&!b)break a;\n\"[\"==d?b=!0:b&&\"]\"==d&&(b=!1)}e=!e&&\"\\\\\"==d}a.match(/^\\b(([gimyu])(?![gimyu]*\\2))+\\b/);return q(\"regexp\",\"string-2\")}a.eatWhile(K);return q(\"operator\",\"operator\",a.current())}if(\"`\"==e)return c.tokenize=Q,Q(a,c);if(\"#\"==e)return a.skipToEnd(),q(\"error\",\"error\");if(K.test(e))return a.eatWhile(K),q(\"operator\",\"operator\",a.current());if(R.test(e))return a.eatWhile(R),e=a.current(),(d=ba.propertyIsEnumerable(e)&&ba[e])&&\".\"!=c.lastType?q(d.type,d.style,e):q(\"variable\",\"variable\",e)}function pa(a){return function(c,\ne){var d=!1,b;if(L&&\"@\"==c.peek()&&c.match(qa))return e.tokenize=w,q(\"jsonld-keyword\",\"meta\");for(;null!=(b=c.next())&&(b!=a||d);)d=!d&&\"\\\\\"==b;d||(e.tokenize=w);return q(\"string\",\"string\")}}function J(a,c){for(var e=!1,d;d=a.next();){if(\"/\"==d&&e){c.tokenize=w;break}e=\"*\"==d}return q(\"comment\",\"comment\")}function Q(a,c){for(var e=!1,d;null!=(d=a.next());){if(!e&&(\"`\"==d||\"$\"==d&&a.eat(\"{\"))){c.tokenize=w;break}e=!e&&\"\\\\\"==d}return q(\"quasi\",\"string-2\",a.current())}function S(a,c){c.fatArrowAt&&(c.fatArrowAt=\nnull);var e=a.string.indexOf(\"\\x3d\\x3e\",a.start);if(!(0>e)){for(var d=0,b=!1,e=e-1;0<=e;--e){var f=a.string.charAt(e),g=\"([{}])\".indexOf(f);if(0<=g&&3>g){if(!d){++e;break}if(0==--d)break}else if(3<=g&&6>g)++d;else if(R.test(f))b=!0;else{if(/[\"'\\/]/.test(f))return;if(b&&!d){++e;break}}}b&&!d&&(c.fatArrowAt=e)}}function ca(a,c,b,d,f,h){this.indented=a;this.column=c;this.type=b;this.prev=f;this.info=h;null!=d&&(this.align=d)}function g(){for(var a=arguments.length-1;0<=a;a--)f.cc.push(arguments[a])}\nfunction b(){g.apply(null,arguments);return!0}function x(a){function c(c){for(;c;c=c.next)if(c.name==a)return!0;return!1}var b=f.state;b.context?(f.marked=\"def\",c(b.localVars)||(b.localVars={name:a,next:b.localVars})):!c(b.globalVars)&&t.globalVars&&(b.globalVars={name:a,next:b.globalVars})}function y(){f.state.context={prev:f.state.context,vars:f.state.localVars};f.state.localVars=ra}function z(){f.state.localVars=f.state.context.vars;f.state.context=f.state.context.prev}function l(a,c){var b=function(){var b=\nf.state,e=b.indented;if(\"stat\"==b.lexical.type)e=b.lexical.indented;else for(var h=b.lexical;h&&\")\"==h.type&&h.align;h=h.prev)e=h.indented;b.lexical=new ca(e,f.stream.column(),a,null,b.lexical,c)};b.lex=!0;return b}function k(){var a=f.state;a.lexical.prev&&(\")\"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function m(a){function c(e){return e==a?b():\";\"==a?g():b(c)}return c}function r(a,c){return\"var\"==a?b(l(\"vardef\",c.length),T,m(\";\"),k):\"keyword a\"==a?b(l(\"form\"),n,\nr,k):\"keyword b\"==a?b(l(\"form\"),r,k):\"{\"==a?b(l(\"}\"),U,k):\";\"==a?b():\"if\"==a?(\"else\"==f.state.lexical.info&&f.state.cc[f.state.cc.length-1]==k&&f.state.cc.pop()(),b(l(\"form\"),n,r,k,da)):\"function\"==a?b(v):\"for\"==a?b(l(\"form\"),ea,r,k):\"variable\"==a?b(l(\"stat\"),sa):\"switch\"==a?b(l(\"form\"),n,l(\"}\",\"switch\"),m(\"{\"),U,k,k):\"case\"==a?b(n,m(\":\")):\"default\"==a?b(m(\":\")):\"catch\"==a?b(l(\"form\"),y,m(\"(\"),V,m(\")\"),r,k,z):\"module\"==a?b(l(\"form\"),y,ta,z,k):\"class\"==a?b(l(\"form\"),ua,k):\"export\"==a?b(l(\"form\"),va,\nk):\"import\"==a?b(l(\"form\"),wa,k):g(l(\"stat\"),n,m(\";\"),k)}function n(a){return fa(a,!1)}function u(a){return fa(a,!0)}function fa(a,c){if(f.state.fatArrowAt==f.stream.start){var e=c?ga:ha;if(\"(\"==a)return b(y,l(\")\"),F(A,\")\"),k,m(\"\\x3d\\x3e\"),e,z);if(\"variable\"==a)return g(y,A,m(\"\\x3d\\x3e\"),e,z)}e=c?W:M;return xa.hasOwnProperty(a)?b(e):\"function\"==a?b(v,e):\"keyword c\"==a?b(c?ia:X):\"(\"==a?b(l(\")\"),X,N,m(\")\"),k,e):\"operator\"==a||\"spread\"==a?b(c?u:n):\"[\"==a?b(l(\"]\"),ya,k,e):\"{\"==a?G(za,\"}\",null,e):\"quasi\"==\na?g(O,e):b()}function X(a){return a.match(/[;\\}\\)\\],]/)?g():g(n)}function ia(a){return a.match(/[;\\}\\)\\],]/)?g():g(u)}function M(a,c){return\",\"==a?b(n):W(a,c,!1)}function W(a,c,e){var d=0==e?M:W,f=0==e?n:u;if(\"\\x3d\\x3e\"==a)return b(y,e?ga:ha,z);if(\"operator\"==a)return/\\+\\+|--/.test(c)?b(d):\"?\"==c?b(n,m(\":\"),f):b(f);if(\"quasi\"==a)return g(O,d);if(\";\"!=a){if(\"(\"==a)return G(u,\")\",\"call\",d);if(\".\"==a)return b(Aa,d);if(\"[\"==a)return b(l(\"]\"),X,m(\"]\"),k,d)}}function O(a,c){return\"quasi\"!=a?g():\"${\"!=c.slice(c.length-\n2)?b(O):b(n,Ba)}function Ba(a){if(\"}\"==a)return f.marked=\"string-2\",f.state.tokenize=Q,b(O)}function ha(a){S(f.stream,f.state);return g(\"{\"==a?r:n)}function ga(a){S(f.stream,f.state);return g(\"{\"==a?r:u)}function sa(a){return\":\"==a?b(k,r):g(M,m(\";\"),k)}function Aa(a){if(\"variable\"==a)return f.marked=\"property\",b()}function za(a,c){if(\"variable\"==a||\"keyword\"==f.style)return f.marked=\"property\",\"get\"==c||\"set\"==c?b(Ca):b(H);if(\"number\"==a||\"string\"==a)return f.marked=L?\"property\":f.style+\" property\",\nb(H);if(\"jsonld-keyword\"==a)return b(H);if(\"[\"==a)return b(n,m(\"]\"),H)}function Ca(a){if(\"variable\"!=a)return g(H);f.marked=\"property\";return b(v)}function H(a){if(\":\"==a)return b(u);if(\"(\"==a)return g(v)}function F(a,c){function e(d){return\",\"==d?(d=f.state.lexical,\"call\"==d.info&&(d.pos=(d.pos||0)+1),b(a,e)):d==c?b():b(m(c))}return function(d){return d==c?b():g(a,e)}}function G(a,c,e){for(var d=3;d<arguments.length;d++)f.cc.push(arguments[d]);return b(l(c,e),F(a,c),k)}function U(a){return\"}\"==a?\nb():g(r,U)}function ja(a){if(ka&&\":\"==a)return b(Da)}function Da(a){if(\"variable\"==a)return f.marked=\"variable-3\",b()}function T(){return g(A,ja,Y,Ea)}function A(a,c){if(\"variable\"==a)return x(c),b();if(\"[\"==a)return G(A,\"]\");if(\"{\"==a)return G(Fa,\"}\")}function Fa(a,c){if(\"variable\"==a&&!f.stream.match(/^\\s*:/,!1))return x(c),b(Y);\"variable\"==a&&(f.marked=\"property\");return b(m(\":\"),A,Y)}function Y(a,c){if(\"\\x3d\"==c)return b(u)}function Ea(a){if(\",\"==a)return b(T)}function da(a,c){if(\"keyword b\"==\na&&\"else\"==c)return b(l(\"form\",\"else\"),r,k)}function ea(a){if(\"(\"==a)return b(l(\")\"),Ga,m(\")\"),k)}function Ga(a){return\"var\"==a?b(T,m(\";\"),P):\";\"==a?b(P):\"variable\"==a?b(Ha):g(n,m(\";\"),P)}function Ha(a,c){return\"in\"==c||\"of\"==c?(f.marked=\"keyword\",b(n)):b(M,P)}function P(a,c){return\";\"==a?b(la):\"in\"==c||\"of\"==c?(f.marked=\"keyword\",b(n)):g(n,m(\";\"),la)}function la(a){\")\"!=a&&b(n)}function v(a,c){if(\"*\"==c)return f.marked=\"keyword\",b(v);if(\"variable\"==a)return x(c),b(v);if(\"(\"==a)return b(y,l(\")\"),\nF(V,\")\"),k,r,z)}function V(a){return\"spread\"==a?b(V):g(A,ja)}function ua(a,c){if(\"variable\"==a)return x(c),b(ma)}function ma(a,c){if(\"extends\"==c)return b(n,ma);if(\"{\"==a)return b(l(\"}\"),B,k)}function B(a,c){if(\"variable\"==a||\"keyword\"==f.style){if(\"static\"==c)return f.marked=\"keyword\",b(B);f.marked=\"property\";return\"get\"==c||\"set\"==c?b(Ia,v,B):b(v,B)}if(\"*\"==c)return f.marked=\"keyword\",b(B);if(\";\"==a)return b(B);if(\"}\"==a)return b()}function Ia(a){if(\"variable\"!=a)return g();f.marked=\"property\";\nreturn b()}function ta(a,c){if(\"string\"==a)return b(r);if(\"variable\"==a)return x(c),b(Z)}function va(a,c){return\"*\"==c?(f.marked=\"keyword\",b(Z,m(\";\"))):\"default\"==c?(f.marked=\"keyword\",b(n,m(\";\"))):g(r)}function wa(a){return\"string\"==a?b():g(aa,Z)}function aa(a,c){if(\"{\"==a)return G(aa,\"}\");\"variable\"==a&&x(c);\"*\"==c&&(f.marked=\"keyword\");return b(Ja)}function Ja(a,c){if(\"as\"==c)return f.marked=\"keyword\",b(aa)}function Z(a,c){if(\"from\"==c)return f.marked=\"keyword\",b(n)}function ya(a){return\"]\"==a?\nb():g(u,Ka)}function Ka(a){return\"for\"==a?g(N,m(\"]\")):\",\"==a?b(F(ia,\"]\")):g(F(u,\"]\"))}function N(a){if(\"for\"==a)return b(ea,N);if(\"if\"==a)return b(n,N)}var C=oa.indentUnit,na=t.statementIndent,L=t.jsonld,D=t.json||L,ka=t.typescript,R=t.wordCharacters||/[\\w$\\xa1-\\uffff]/,ba=function(){function a(a){return{type:a,style:\"keyword\"}}var c=a(\"keyword a\"),b=a(\"keyword b\"),d=a(\"keyword c\"),f=a(\"operator\"),h={type:\"atom\",style:\"atom\"},c={\"if\":a(\"if\"),\"while\":c,\"with\":c,\"else\":b,\"do\":b,\"try\":b,\"finally\":b,\n\"return\":d,\"break\":d,\"continue\":d,\"new\":d,\"delete\":d,\"throw\":d,\"debugger\":d,\"var\":a(\"var\"),\"const\":a(\"var\"),let:a(\"var\"),\"function\":a(\"function\"),\"catch\":a(\"catch\"),\"for\":a(\"for\"),\"switch\":a(\"switch\"),\"case\":a(\"case\"),\"default\":a(\"default\"),\"in\":f,\"typeof\":f,\"instanceof\":f,\"true\":h,\"false\":h,\"null\":h,undefined:h,NaN:h,Infinity:h,\"this\":a(\"this\"),module:a(\"module\"),\"class\":a(\"class\"),\"super\":a(\"atom\"),yield:d,\"export\":a(\"export\"),\"import\":a(\"import\"),\"extends\":d};if(ka){var b={type:\"variable\",style:\"variable-3\"},\nb={\"interface\":a(\"interface\"),\"extends\":a(\"extends\"),constructor:a(\"constructor\"),\"public\":a(\"public\"),\"private\":a(\"private\"),\"protected\":a(\"protected\"),\"static\":a(\"static\"),string:b,number:b,bool:b,any:b},g;for(g in b)c[g]=b[g]}return c}(),K=/[+\\-*&%=<>!?|~^]/,qa=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/,E,I,xa={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,\"this\":!0,\"jsonld-keyword\":!0},f={state:null,column:null,marked:null,cc:null},ra={name:\"this\",\nnext:{name:\"arguments\"}};k.lex=!0;return{startState:function(a){a={tokenize:w,lastType:\"sof\",cc:[],lexical:new ca((a||0)-C,0,\"block\",!1),localVars:t.localVars,context:t.localVars&&{vars:t.localVars},indented:0};t.globalVars&&\"object\"==typeof t.globalVars&&(a.globalVars=t.globalVars);return a},token:function(a,b){a.sol()&&(b.lexical.hasOwnProperty(\"align\")||(b.lexical.align=!1),b.indented=a.indentation(),S(a,b));if(b.tokenize!=J&&a.eatSpace())return null;var e=b.tokenize(a,b);if(\"comment\"==E)return e;\nb.lastType=\"operator\"!=E||\"++\"!=I&&\"--\"!=I?E:\"incdec\";a:{var d=E,g=I,h=b.cc;f.state=b;f.stream=a;f.marked=null;f.cc=h;f.style=e;b.lexical.hasOwnProperty(\"align\")||(b.lexical.align=!0);for(;;)if((h.length?h.pop():D?n:r)(d,g)){for(;h.length&&h[h.length-1].lex;)h.pop()();if(f.marked){e=f.marked;break a}if(d=\"variable\"==d)b:{for(d=b.localVars;d;d=d.next)if(d.name==g){d=!0;break b}for(h=b.context;h;h=h.prev)for(d=h.vars;d;d=d.next)if(d.name==g){d=!0;break b}d=void 0}if(d){e=\"variable-2\";break a}break a}}return e},\nindent:function(a,b){if(a.tokenize==J)return p.Pass;if(a.tokenize!=w)return 0;var e=b&&b.charAt(0),d=a.lexical;if(!/^\\s*else\\b/.test(b))for(var f=a.cc.length-1;0<=f;--f){var g=a.cc[f];if(g==k)d=d.prev;else if(g!=da)break}\"stat\"==d.type&&\"}\"==e&&(d=d.prev);na&&\")\"==d.type&&\"stat\"==d.prev.type&&(d=d.prev);f=d.type;g=e==f;return\"vardef\"==f?d.indented+(\"operator\"==a.lastType||\",\"==a.lastType?d.info+1:0):\"form\"==f&&\"{\"==e?d.indented:\"form\"==f?d.indented+C:\"stat\"==f?(e=d.indented,d=\"operator\"==a.lastType||\n\",\"==a.lastType||K.test(b.charAt(0))||/[,.]/.test(b.charAt(0)),e+(d?na||C:0)):\"switch\"!=d.info||g||0==t.doubleIndentSwitch?d.align?d.column+(g?0:1):d.indented+(g?0:C):d.indented+(/^(?:case|default)\\b/.test(b)?C:2*C)},electricInput:/^\\s*(?:case .*?:|default:|\\{|\\})$/,blockCommentStart:D?null:\"/*\",blockCommentEnd:D?null:\"*/\",lineComment:D?null:\"//\",fold:\"brace\",closeBrackets:\"()[]{}''\\\"\\\"``\",helperType:D?\"json\":\"javascript\",jsonldMode:L,jsonMode:D}});p.registerHelper(\"wordChars\",\"javascript\",/[\\w$]/);\np.defineMIME(\"text/javascript\",\"javascript\");p.defineMIME(\"text/ecmascript\",\"javascript\");p.defineMIME(\"application/javascript\",\"javascript\");p.defineMIME(\"application/x-javascript\",\"javascript\");p.defineMIME(\"application/ecmascript\",\"javascript\");p.defineMIME(\"application/json\",{name:\"javascript\",json:!0});p.defineMIME(\"application/x-json\",{name:\"javascript\",json:!0});p.defineMIME(\"application/ld+json\",{name:\"javascript\",jsonld:!0});p.defineMIME(\"text/typescript\",{name:\"javascript\",typescript:!0});\np.defineMIME(\"application/typescript\",{name:\"javascript\",typescript:!0})});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/lib/codemirror/neo.css",
    "content": "/* neo theme for codemirror */\n\n/* Color scheme */\n\n.cm-s-neo.CodeMirror {\n  background-color:#ffffff;\n  color:#2e383c;\n  line-height:1.4375;\n}\n.cm-s-neo .cm-comment {color:#75787b}\n.cm-s-neo .cm-keyword, .cm-s-neo .cm-property {color:#1d75b3}\n.cm-s-neo .cm-atom,.cm-s-neo .cm-number {color:#75438a}\n.cm-s-neo .cm-node,.cm-s-neo .cm-tag {color:#9c3328}\n.cm-s-neo .cm-string {color:#b35e14}\n.cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier {color:#047d65}\n\n\n/* Editor styling */\n\n.cm-s-neo pre {\n  padding:0;\n}\n\n.cm-s-neo .CodeMirror-gutters {\n  border:none;\n  border-right:10px solid transparent;\n  background-color:transparent;\n}\n\n.cm-s-neo .CodeMirror-linenumber {\n  padding:0;\n  color:#e0e2e5;\n}\n\n.cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; }\n.cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; }\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/lib/codemirror/show-hint.css",
    "content": ".CodeMirror-hints {\n  position: absolute;\n  z-index: 10;\n  overflow: hidden;\n  list-style: none;\n\n  margin: 0;\n  padding: 2px;\n\n  -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n  -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n  box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n  border-radius: 3px;\n  border: 1px solid silver;\n\n  background: white;\n  font-size: 90%;\n  font-family: monospace;\n\n  max-height: 20em;\n  overflow-y: auto;\n}\n\n.CodeMirror-hint {\n  margin: 0;\n  padding: 0 4px;\n  border-radius: 2px;\n  max-width: 19em;\n  overflow: hidden;\n  white-space: pre;\n  color: black;\n  cursor: pointer;\n}\n\nli.CodeMirror-hint-active {\n  background: #08f;\n  color: white;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/samples/toolbarconfigurator/lib/codemirror/show-hint.js",
    "content": "﻿(function(f){\"object\"==typeof exports&&\"object\"==typeof module?f(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],f):f(CodeMirror)})(function(f){function p(a,b){this.cm=a;this.options=this.buildOptions(b);this.widget=null;this.tick=this.debounce=0;this.startPos=this.cm.getCursor();this.startLen=this.cm.getLine(this.startPos.line).length;var c=this;a.on(\"cursorActivity\",this.activityFunc=function(){c.cursorActivity()})}function w(a,b){function c(a,\nc){var d;d=\"string\"!=typeof c?function(a){return c(a,b)}:e.hasOwnProperty(c)?e[c]:c;f[a]=d}var e={Up:function(){b.moveFocus(-1)},Down:function(){b.moveFocus(1)},PageUp:function(){b.moveFocus(-b.menuSize()+1,!0)},PageDown:function(){b.moveFocus(b.menuSize()-1,!0)},Home:function(){b.setFocus(0)},End:function(){b.setFocus(b.length-1)},Enter:b.pick,Tab:b.pick,Esc:b.close},d=a.options.customKeys,f=d?{}:e;if(d)for(var g in d)d.hasOwnProperty(g)&&c(g,d[g]);if(d=a.options.extraKeys)for(g in d)d.hasOwnProperty(g)&&\nc(g,d[g]);return f}function v(a,b){for(;b&&b!=a;){if(\"LI\"===b.nodeName.toUpperCase()&&b.parentNode==a)return b;b=b.parentNode}}function n(a,b){this.completion=a;this.data=b;this.picked=!1;var c=this,e=a.cm,d=this.hints=document.createElement(\"ul\");d.className=\"CodeMirror-hints\";this.selectedHint=b.selectedHint||0;for(var m=b.list,g=0;g<m.length;++g){var l=d.appendChild(document.createElement(\"li\")),h=m[g],k=\"CodeMirror-hint\"+(g!=this.selectedHint?\"\":\" CodeMirror-hint-active\");null!=h.className&&(k=\nh.className+\" \"+k);l.className=k;h.render?h.render(l,b,h):l.appendChild(document.createTextNode(h.displayText||(\"string\"==typeof h?h:h.text)));l.hintId=g}var g=e.cursorCoords(a.options.alignWithWord?b.from:null),r=g.left,t=g.bottom,n=!0;d.style.left=r+\"px\";d.style.top=t+\"px\";l=window.innerWidth||Math.max(document.body.offsetWidth,document.documentElement.offsetWidth);k=window.innerHeight||Math.max(document.body.offsetHeight,document.documentElement.offsetHeight);(a.options.container||document.body).appendChild(d);\nh=d.getBoundingClientRect();if(0<h.bottom-k){var u=h.bottom-h.top;0<g.top-(g.bottom-h.top)-u?(d.style.top=(t=g.top-u)+\"px\",n=!1):u>k&&(d.style.height=k-5+\"px\",d.style.top=(t=g.bottom-h.top)+\"px\",k=e.getCursor(),b.from.ch!=k.ch&&(g=e.cursorCoords(k),d.style.left=(r=g.left)+\"px\",h=d.getBoundingClientRect()))}k=h.right-l;0<k&&(h.right-h.left>l&&(d.style.width=l-5+\"px\",k-=h.right-h.left-l),d.style.left=(r=g.left-k)+\"px\");e.addKeyMap(this.keyMap=w(a,{moveFocus:function(a,b){c.changeActive(c.selectedHint+\na,b)},setFocus:function(a){c.changeActive(a)},menuSize:function(){return c.screenAmount()},length:m.length,close:function(){a.close()},pick:function(){c.pick()},data:b}));if(a.options.closeOnUnfocus){var p;e.on(\"blur\",this.onBlur=function(){p=setTimeout(function(){a.close()},100)});e.on(\"focus\",this.onFocus=function(){clearTimeout(p)})}var q=e.getScrollInfo();e.on(\"scroll\",this.onScroll=function(){var c=e.getScrollInfo(),b=e.getWrapperElement().getBoundingClientRect(),f=t+q.top-c.top,g=f-(window.pageYOffset||\n(document.documentElement||document.body).scrollTop);n||(g+=d.offsetHeight);if(g<=b.top||g>=b.bottom)return a.close();d.style.top=f+\"px\";d.style.left=r+q.left-c.left+\"px\"});f.on(d,\"dblclick\",function(a){(a=v(d,a.target||a.srcElement))&&null!=a.hintId&&(c.changeActive(a.hintId),c.pick())});f.on(d,\"click\",function(b){(b=v(d,b.target||b.srcElement))&&null!=b.hintId&&(c.changeActive(b.hintId),a.options.completeOnSingleClick&&c.pick())});f.on(d,\"mousedown\",function(){setTimeout(function(){e.focus()},20)});\nf.signal(b,\"select\",m[0],d.firstChild);return!0}f.showHint=function(a,b,c){if(!b)return a.showHint(c);c&&c.async&&(b.async=!0);b={hint:b};if(c)for(var e in c)b[e]=c[e];return a.showHint(b)};f.defineExtension(\"showHint\",function(a){1<this.listSelections().length||this.somethingSelected()||(this.state.completionActive&&this.state.completionActive.close(),a=this.state.completionActive=new p(this,a),a.options.hint&&(f.signal(this,\"startCompletion\",this),a.update()))});var x=window.requestAnimationFrame||\nfunction(a){return setTimeout(a,1E3/60)},y=window.cancelAnimationFrame||clearTimeout;p.prototype={close:function(){this.active()&&(this.tick=this.cm.state.completionActive=null,this.cm.off(\"cursorActivity\",this.activityFunc),this.widget&&this.widget.close(),f.signal(this.cm,\"endCompletion\",this.cm))},active:function(){return this.cm.state.completionActive==this},pick:function(a,b){var c=a.list[b];c.hint?c.hint(this.cm,a,c):this.cm.replaceRange(\"string\"==typeof c?c:c.text,c.from||a.from,c.to||a.to,\n\"complete\");f.signal(a,\"pick\",c);this.close()},showHints:function(a){if(!a||!a.list.length||!this.active())return this.close();this.options.completeSingle&&1==a.list.length?this.pick(a,0):this.showWidget(a)},cursorActivity:function(){this.debounce&&(y(this.debounce),this.debounce=0);var a=this.cm.getCursor(),b=this.cm.getLine(a.line);if(a.line!=this.startPos.line||b.length-a.ch!=this.startLen-this.startPos.ch||a.ch<this.startPos.ch||this.cm.somethingSelected()||a.ch&&this.options.closeCharacters.test(b.charAt(a.ch-\n1)))this.close();else{var c=this;this.debounce=x(function(){c.update()});this.widget&&this.widget.disable()}},update:function(){if(null!=this.tick)if(this.data&&f.signal(this.data,\"update\"),this.options.hint.async){var a=++this.tick,b=this;this.options.hint(this.cm,function(c){b.tick==a&&b.finishUpdate(c)},this.options)}else this.finishUpdate(this.options.hint(this.cm,this.options),a)},finishUpdate:function(a){this.data=a;var b=this.widget&&this.widget.picked;this.widget&&this.widget.close();a&&a.list.length&&\n(b&&1==a.list.length?this.pick(a,0):this.widget=new n(this,a))},showWidget:function(a){this.data=a;this.widget=new n(this,a);f.signal(a,\"shown\")},buildOptions:function(a){var b=this.cm.options.hintOptions,c={},e;for(e in q)c[e]=q[e];if(b)for(e in b)void 0!==b[e]&&(c[e]=b[e]);if(a)for(e in a)void 0!==a[e]&&(c[e]=a[e]);return c}};n.prototype={close:function(){if(this.completion.widget==this){this.completion.widget=null;this.hints.parentNode.removeChild(this.hints);this.completion.cm.removeKeyMap(this.keyMap);\nvar a=this.completion.cm;this.completion.options.closeOnUnfocus&&(a.off(\"blur\",this.onBlur),a.off(\"focus\",this.onFocus));a.off(\"scroll\",this.onScroll)}},disable:function(){this.completion.cm.removeKeyMap(this.keyMap);var a=this;this.keyMap={Enter:function(){a.picked=!0}};this.completion.cm.addKeyMap(this.keyMap)},pick:function(){this.completion.pick(this.data,this.selectedHint)},changeActive:function(a,b){a>=this.data.list.length?a=b?this.data.list.length-1:0:0>a&&(a=b?0:this.data.list.length-1);\nif(this.selectedHint!=a){var c=this.hints.childNodes[this.selectedHint];c.className=c.className.replace(\" CodeMirror-hint-active\",\"\");c=this.hints.childNodes[this.selectedHint=a];c.className+=\" CodeMirror-hint-active\";c.offsetTop<this.hints.scrollTop?this.hints.scrollTop=c.offsetTop-3:c.offsetTop+c.offsetHeight>this.hints.scrollTop+this.hints.clientHeight&&(this.hints.scrollTop=c.offsetTop+c.offsetHeight-this.hints.clientHeight+3);f.signal(this.data,\"select\",this.data.list[this.selectedHint],c)}},\nscreenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1}};f.registerHelper(\"hint\",\"auto\",function(a,b){var c=a.getHelpers(a.getCursor(),\"hint\");if(c.length)for(var e=0;e<c.length;e++){var d=c[e](a,b);if(d&&d.list.length)return d}else if(c=a.getHelper(a.getCursor(),\"hintWords\")){if(c)return f.hint.fromList(a,{words:c})}else if(f.hint.anyword)return f.hint.anyword(a,b)});f.registerHelper(\"hint\",\"fromList\",function(a,b){for(var c=a.getCursor(),e=a.getTokenAt(c),\nd=[],m=0;m<b.words.length;m++){var g=b.words[m];g.slice(0,e.string.length)==e.string&&d.push(g)}if(d.length)return{list:d,from:f.Pos(c.line,e.start),to:f.Pos(c.line,e.end)}});f.commands.autocomplete=f.showHint;var q={hint:f.hint.auto,completeSingle:!0,alignWithWord:!0,closeCharacters:/[\\s()\\[\\]{};:>,]/,closeOnUnfocus:!0,completeOnSingleClick:!1,container:null,customKeys:null,extraKeys:null};f.defineOption(\"hintOptions\",null)});"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/skins/moono/dialog.css",
    "content": "/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus,{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/skins/moono/dialog_ie.css",
    "content": "/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus,{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/skins/moono/dialog_ie7.css",
    "content": "/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus,{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important}"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/skins/moono/dialog_ie8.css",
    "content": "/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus,{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block}"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/skins/moono/dialog_iequirks.css",
    "content": "/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus,{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:\"\"}"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/skins/moono/editor.css",
    "content": "/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type=\"text\"],.cke_reset_all input[type=\"password\"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type=\"text\"][disabled],.cke_reset_all input[type=\"password\"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/skins/moono/editor_gecko.css",
    "content": "/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type=\"text\"],.cke_reset_all input[type=\"password\"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type=\"text\"][disabled],.cke_reset_all input[type=\"password\"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/skins/moono/editor_ie.css",
    "content": "/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type=\"text\"],.cke_reset_all input[type=\"password\"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type=\"text\"][disabled],.cke_reset_all input[type=\"password\"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/skins/moono/editor_ie7.css",
    "content": "/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type=\"text\"],.cke_reset_all input[type=\"password\"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type=\"text\"][disabled],.cke_reset_all input[type=\"password\"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/skins/moono/editor_ie8.css",
    "content": "/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type=\"text\"],.cke_reset_all input[type=\"password\"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type=\"text\"][disabled],.cke_reset_all input[type=\"password\"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/skins/moono/editor_iequirks.css",
    "content": "/*\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type=\"text\"],.cke_reset_all input[type=\"password\"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type=\"text\"][disabled],.cke_reset_all input[type=\"password\"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/skins/moono/readme.md",
    "content": "\"Moono\" Skin\n====================\n\nThis skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor\n[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by\nthe CKEditor team. \"Moono\" is maintained by the core developers.\n\nFor more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK)\ndocumentation.\n\nFeatures\n-------------------\n\"Moono\" is a monochromatic skin, which offers a modern look coupled with gradients and transparency.\nIt comes with the following features:\n\n- Chameleon feature with brightness,\n- high-contrast compatibility,\n- graphics source provided in SVG.\n\nDirectory Structure\n-------------------\n\nCSS parts:\n- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance,\n- **mainui.css**: the file contains styles of entire editor outline structures,\n- **toolbar.css**: the file contains styles of the editor toolbar space (top),\n- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar,\n- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded\nuntil the first panel open up,\n- **elementspath.css**: the file contains styles of the editor elements path bar (bottom),\n- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down,\nit's not loaded until the first menu open up,\n- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open,\n- **reset.css**: the file defines the basis of style resets among all editor UI spaces,\n- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference,\n- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks.\n\nOther parts:\n- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature,\n- **icons/**: contains all skin defined icons,\n- **images/**: contains a fill general used images,\n- **dev/**: contains SVG source of the skin icons.\n\nLicense\n-------\n\nCopyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n\nFor licensing, see LICENSE.md or [http://ckeditor.com/license](http://ckeditor.com/license)\n"
  },
  {
    "path": "public/adminlte/plugins/ckeditor/styles.js",
    "content": "﻿/**\n * Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n// This file contains style definitions that can be used by CKEditor plugins.\n//\n// The most common use for it is the \"stylescombo\" plugin, which shows a combo\n// in the editor toolbar, containing all styles. Other plugins instead, like\n// the div plugin, use a subset of the styles on their feature.\n//\n// If you don't have plugins that depend on this file, you can simply ignore it.\n// Otherwise it is strongly recommended to customize this file to match your\n// website requirements and design properly.\n\nCKEDITOR.stylesSet.add( 'default', [\n\t/* Block Styles */\n\n\t// These styles are already available in the \"Format\" combo (\"format\" plugin),\n\t// so they are not needed here by default. You may enable them to avoid\n\t// placing the \"Format\" combo in the toolbar, maintaining the same features.\n\t/*\n\t{ name: 'Paragraph',\t\telement: 'p' },\n\t{ name: 'Heading 1',\t\telement: 'h1' },\n\t{ name: 'Heading 2',\t\telement: 'h2' },\n\t{ name: 'Heading 3',\t\telement: 'h3' },\n\t{ name: 'Heading 4',\t\telement: 'h4' },\n\t{ name: 'Heading 5',\t\telement: 'h5' },\n\t{ name: 'Heading 6',\t\telement: 'h6' },\n\t{ name: 'Preformatted Text',element: 'pre' },\n\t{ name: 'Address',\t\t\telement: 'address' },\n\t*/\n\n\t{ name: 'Italic Title',\t\telement: 'h2', styles: { 'font-style': 'italic' } },\n\t{ name: 'Subtitle',\t\t\telement: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } },\n\t{\n\t\tname: 'Special Container',\n\t\telement: 'div',\n\t\tstyles: {\n\t\t\tpadding: '5px 10px',\n\t\t\tbackground: '#eee',\n\t\t\tborder: '1px solid #ccc'\n\t\t}\n\t},\n\n\t/* Inline Styles */\n\n\t// These are core styles available as toolbar buttons. You may opt enabling\n\t// some of them in the Styles combo, removing them from the toolbar.\n\t// (This requires the \"stylescombo\" plugin)\n\t/*\n\t{ name: 'Strong',\t\t\telement: 'strong', overrides: 'b' },\n\t{ name: 'Emphasis',\t\t\telement: 'em'\t, overrides: 'i' },\n\t{ name: 'Underline',\t\telement: 'u' },\n\t{ name: 'Strikethrough',\telement: 'strike' },\n\t{ name: 'Subscript',\t\telement: 'sub' },\n\t{ name: 'Superscript',\t\telement: 'sup' },\n\t*/\n\n\t{ name: 'Marker',\t\t\telement: 'span', attributes: { 'class': 'marker' } },\n\n\t{ name: 'Big',\t\t\t\telement: 'big' },\n\t{ name: 'Small',\t\t\telement: 'small' },\n\t{ name: 'Typewriter',\t\telement: 'tt' },\n\n\t{ name: 'Computer Code',\telement: 'code' },\n\t{ name: 'Keyboard Phrase',\telement: 'kbd' },\n\t{ name: 'Sample Text',\t\telement: 'samp' },\n\t{ name: 'Variable',\t\t\telement: 'var' },\n\n\t{ name: 'Deleted Text',\t\telement: 'del' },\n\t{ name: 'Inserted Text',\telement: 'ins' },\n\n\t{ name: 'Cited Work',\t\telement: 'cite' },\n\t{ name: 'Inline Quotation',\telement: 'q' },\n\n\t{ name: 'Language: RTL',\telement: 'span', attributes: { 'dir': 'rtl' } },\n\t{ name: 'Language: LTR',\telement: 'span', attributes: { 'dir': 'ltr' } },\n\n\t/* Object Styles */\n\n\t{\n\t\tname: 'Styled image (left)',\n\t\telement: 'img',\n\t\tattributes: { 'class': 'left' }\n\t},\n\n\t{\n\t\tname: 'Styled image (right)',\n\t\telement: 'img',\n\t\tattributes: { 'class': 'right' }\n\t},\n\n\t{\n\t\tname: 'Compact table',\n\t\telement: 'table',\n\t\tattributes: {\n\t\t\tcellpadding: '5',\n\t\t\tcellspacing: '0',\n\t\t\tborder: '1',\n\t\t\tbordercolor: '#ccc'\n\t\t},\n\t\tstyles: {\n\t\t\t'border-collapse': 'collapse'\n\t\t}\n\t},\n\n\t{ name: 'Borderless Table',\t\telement: 'table',\tstyles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } },\n\t{ name: 'Square Bulleted List',\telement: 'ul',\t\tstyles: { 'list-style-type': 'square' } }\n] );\n\n"
  },
  {
    "path": "public/adminlte/plugins/colorpicker/bootstrap-colorpicker.css",
    "content": "/*!\n * Bootstrap Colorpicker\n * http://mjolnic.github.io/bootstrap-colorpicker/\n *\n * Originally written by (c) 2012 Stefan Petre\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0.txt\n *\n */\n\n.colorpicker-saturation {\n  float: left;\n  width: 100px;\n  height: 100px;\n  cursor: crosshair;\n  background-image: url(\"img/saturation.png\");\n}\n\n.colorpicker-saturation i {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 5px;\n  height: 5px;\n  margin: -4px 0 0 -4px;\n  border: 1px solid #000;\n  -webkit-border-radius: 5px;\n     -moz-border-radius: 5px;\n          border-radius: 5px;\n}\n\n.colorpicker-saturation i b {\n  display: block;\n  width: 5px;\n  height: 5px;\n  border: 1px solid #fff;\n  -webkit-border-radius: 5px;\n     -moz-border-radius: 5px;\n          border-radius: 5px;\n}\n\n.colorpicker-hue,\n.colorpicker-alpha {\n  float: left;\n  width: 15px;\n  height: 100px;\n  margin-bottom: 4px;\n  margin-left: 4px;\n  cursor: row-resize;\n}\n\n.colorpicker-hue i,\n.colorpicker-alpha i {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 100%;\n  height: 1px;\n  margin-top: -1px;\n  background: #000;\n  border-top: 1px solid #fff;\n}\n\n.colorpicker-hue {\n  background-image: url(\"img/hue.png\");\n}\n\n.colorpicker-alpha {\n  display: none;\n  background-image: url(\"img/alpha.png\");\n}\n\n.colorpicker-saturation,\n.colorpicker-hue,\n.colorpicker-alpha {\n  background-size: contain;\n}\n\n.colorpicker {\n  top: 0;\n  left: 0;\n  z-index: 2500;\n  min-width: 130px;\n  padding: 4px;\n  margin-top: 1px;\n  -webkit-border-radius: 4px;\n     -moz-border-radius: 4px;\n          border-radius: 4px;\n  *zoom: 1;\n}\n\n.colorpicker:before,\n.colorpicker:after {\n  display: table;\n  line-height: 0;\n  content: \"\";\n}\n\n.colorpicker:after {\n  clear: both;\n}\n\n.colorpicker:before {\n  position: absolute;\n  top: -7px;\n  left: 6px;\n  display: inline-block;\n  border-right: 7px solid transparent;\n  border-bottom: 7px solid #ccc;\n  border-left: 7px solid transparent;\n  border-bottom-color: rgba(0, 0, 0, 0.2);\n  content: '';\n}\n\n.colorpicker:after {\n  position: absolute;\n  top: -6px;\n  left: 7px;\n  display: inline-block;\n  border-right: 6px solid transparent;\n  border-bottom: 6px solid #ffffff;\n  border-left: 6px solid transparent;\n  content: '';\n}\n\n.colorpicker div {\n  position: relative;\n}\n\n.colorpicker.colorpicker-with-alpha {\n  min-width: 140px;\n}\n\n.colorpicker.colorpicker-with-alpha .colorpicker-alpha {\n  display: block;\n}\n\n.colorpicker-color {\n  height: 10px;\n  margin-top: 5px;\n  clear: both;\n  background-image: url(\"img/alpha.png\");\n  background-position: 0 100%;\n}\n\n.colorpicker-color div {\n  height: 10px;\n}\n\n.colorpicker-selectors {\n  display: none;\n  height: 10px;\n  margin-top: 5px;\n  clear: both;\n}\n\n.colorpicker-selectors i {\n  float: left;\n  width: 10px;\n  height: 10px;\n  cursor: pointer;\n}\n\n.colorpicker-selectors i + i {\n  margin-left: 3px;\n}\n\n.colorpicker-element .input-group-addon i,\n.colorpicker-element .add-on i {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: text-top;\n  cursor: pointer;\n}\n\n.colorpicker.colorpicker-inline {\n  position: relative;\n  z-index: auto;\n  display: inline-block;\n  float: none;\n}\n\n.colorpicker.colorpicker-horizontal {\n  width: 110px;\n  height: auto;\n  min-width: 110px;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-saturation {\n  margin-bottom: 4px;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-color {\n  width: 100px;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue,\n.colorpicker.colorpicker-horizontal .colorpicker-alpha {\n  float: left;\n  width: 100px;\n  height: 15px;\n  margin-bottom: 4px;\n  margin-left: 0;\n  cursor: col-resize;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue i,\n.colorpicker.colorpicker-horizontal .colorpicker-alpha i {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 1px;\n  height: 15px;\n  margin-top: 0;\n  background: #ffffff;\n  border: none;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue {\n  background-image: url(\"img/hue-horizontal.png\");\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-alpha {\n  background-image: url(\"img/alpha-horizontal.png\");\n}\n\n.colorpicker.colorpicker-hidden {\n  display: none;\n}\n\n.colorpicker.colorpicker-visible {\n  display: block;\n}\n\n.colorpicker-inline.colorpicker-visible {\n  display: inline-block;\n}\n\n.colorpicker-right:before {\n  right: 6px;\n  left: auto;\n}\n\n.colorpicker-right:after {\n  right: 7px;\n  left: auto;\n}"
  },
  {
    "path": "public/adminlte/plugins/colorpicker/bootstrap-colorpicker.js",
    "content": "/*!\n * Bootstrap Colorpicker\n * http://mjolnic.github.io/bootstrap-colorpicker/\n *\n * Originally written by (c) 2012 Stefan Petre\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0.txt\n *\n * @todo Update DOCS\n */\n\n(function(factory) {\n    \"use strict\";\n    if (typeof exports === 'object') {\n      module.exports = factory(window.jQuery);\n    } else if (typeof define === 'function' && define.amd) {\n      define(['jquery'], factory);\n    } else if (window.jQuery && !window.jQuery.fn.colorpicker) {\n      factory(window.jQuery);\n    }\n  }\n  (function($) {\n    'use strict';\n\n    // Color object\n    var Color = function(val, customColors) {\n      this.value = {\n        h: 0,\n        s: 0,\n        b: 0,\n        a: 1\n      };\n      this.origFormat = null; // original string format\n      if (customColors) {\n        $.extend(this.colors, customColors);\n      }\n      if (val) {\n        if (val.toLowerCase !== undefined) {\n          // cast to string\n          val = val + '';\n          this.setColor(val);\n        } else if (val.h !== undefined) {\n          this.value = val;\n        }\n      }\n    };\n\n    Color.prototype = {\n      constructor: Color,\n      // 140 predefined colors from the HTML Colors spec\n      colors: {\n        \"aliceblue\": \"#f0f8ff\",\n        \"antiquewhite\": \"#faebd7\",\n        \"aqua\": \"#00ffff\",\n        \"aquamarine\": \"#7fffd4\",\n        \"azure\": \"#f0ffff\",\n        \"beige\": \"#f5f5dc\",\n        \"bisque\": \"#ffe4c4\",\n        \"black\": \"#000000\",\n        \"blanchedalmond\": \"#ffebcd\",\n        \"blue\": \"#0000ff\",\n        \"blueviolet\": \"#8a2be2\",\n        \"brown\": \"#a52a2a\",\n        \"burlywood\": \"#deb887\",\n        \"cadetblue\": \"#5f9ea0\",\n        \"chartreuse\": \"#7fff00\",\n        \"chocolate\": \"#d2691e\",\n        \"coral\": \"#ff7f50\",\n        \"cornflowerblue\": \"#6495ed\",\n        \"cornsilk\": \"#fff8dc\",\n        \"crimson\": \"#dc143c\",\n        \"cyan\": \"#00ffff\",\n        \"darkblue\": \"#00008b\",\n        \"darkcyan\": \"#008b8b\",\n        \"darkgoldenrod\": \"#b8860b\",\n        \"darkgray\": \"#a9a9a9\",\n        \"darkgreen\": \"#006400\",\n        \"darkkhaki\": \"#bdb76b\",\n        \"darkmagenta\": \"#8b008b\",\n        \"darkolivegreen\": \"#556b2f\",\n        \"darkorange\": \"#ff8c00\",\n        \"darkorchid\": \"#9932cc\",\n        \"darkred\": \"#8b0000\",\n        \"darksalmon\": \"#e9967a\",\n        \"darkseagreen\": \"#8fbc8f\",\n        \"darkslateblue\": \"#483d8b\",\n        \"darkslategray\": \"#2f4f4f\",\n        \"darkturquoise\": \"#00ced1\",\n        \"darkviolet\": \"#9400d3\",\n        \"deeppink\": \"#ff1493\",\n        \"deepskyblue\": \"#00bfff\",\n        \"dimgray\": \"#696969\",\n        \"dodgerblue\": \"#1e90ff\",\n        \"firebrick\": \"#b22222\",\n        \"floralwhite\": \"#fffaf0\",\n        \"forestgreen\": \"#228b22\",\n        \"fuchsia\": \"#ff00ff\",\n        \"gainsboro\": \"#dcdcdc\",\n        \"ghostwhite\": \"#f8f8ff\",\n        \"gold\": \"#ffd700\",\n        \"goldenrod\": \"#daa520\",\n        \"gray\": \"#808080\",\n        \"green\": \"#008000\",\n        \"greenyellow\": \"#adff2f\",\n        \"honeydew\": \"#f0fff0\",\n        \"hotpink\": \"#ff69b4\",\n        \"indianred\": \"#cd5c5c\",\n        \"indigo\": \"#4b0082\",\n        \"ivory\": \"#fffff0\",\n        \"khaki\": \"#f0e68c\",\n        \"lavender\": \"#e6e6fa\",\n        \"lavenderblush\": \"#fff0f5\",\n        \"lawngreen\": \"#7cfc00\",\n        \"lemonchiffon\": \"#fffacd\",\n        \"lightblue\": \"#add8e6\",\n        \"lightcoral\": \"#f08080\",\n        \"lightcyan\": \"#e0ffff\",\n        \"lightgoldenrodyellow\": \"#fafad2\",\n        \"lightgrey\": \"#d3d3d3\",\n        \"lightgreen\": \"#90ee90\",\n        \"lightpink\": \"#ffb6c1\",\n        \"lightsalmon\": \"#ffa07a\",\n        \"lightseagreen\": \"#20b2aa\",\n        \"lightskyblue\": \"#87cefa\",\n        \"lightslategray\": \"#778899\",\n        \"lightsteelblue\": \"#b0c4de\",\n        \"lightyellow\": \"#ffffe0\",\n        \"lime\": \"#00ff00\",\n        \"limegreen\": \"#32cd32\",\n        \"linen\": \"#faf0e6\",\n        \"magenta\": \"#ff00ff\",\n        \"maroon\": \"#800000\",\n        \"mediumaquamarine\": \"#66cdaa\",\n        \"mediumblue\": \"#0000cd\",\n        \"mediumorchid\": \"#ba55d3\",\n        \"mediumpurple\": \"#9370d8\",\n        \"mediumseagreen\": \"#3cb371\",\n        \"mediumslateblue\": \"#7b68ee\",\n        \"mediumspringgreen\": \"#00fa9a\",\n        \"mediumturquoise\": \"#48d1cc\",\n        \"mediumvioletred\": \"#c71585\",\n        \"midnightblue\": \"#191970\",\n        \"mintcream\": \"#f5fffa\",\n        \"mistyrose\": \"#ffe4e1\",\n        \"moccasin\": \"#ffe4b5\",\n        \"navajowhite\": \"#ffdead\",\n        \"navy\": \"#000080\",\n        \"oldlace\": \"#fdf5e6\",\n        \"olive\": \"#808000\",\n        \"olivedrab\": \"#6b8e23\",\n        \"orange\": \"#ffa500\",\n        \"orangered\": \"#ff4500\",\n        \"orchid\": \"#da70d6\",\n        \"palegoldenrod\": \"#eee8aa\",\n        \"palegreen\": \"#98fb98\",\n        \"paleturquoise\": \"#afeeee\",\n        \"palevioletred\": \"#d87093\",\n        \"papayawhip\": \"#ffefd5\",\n        \"peachpuff\": \"#ffdab9\",\n        \"peru\": \"#cd853f\",\n        \"pink\": \"#ffc0cb\",\n        \"plum\": \"#dda0dd\",\n        \"powderblue\": \"#b0e0e6\",\n        \"purple\": \"#800080\",\n        \"red\": \"#ff0000\",\n        \"rosybrown\": \"#bc8f8f\",\n        \"royalblue\": \"#4169e1\",\n        \"saddlebrown\": \"#8b4513\",\n        \"salmon\": \"#fa8072\",\n        \"sandybrown\": \"#f4a460\",\n        \"seagreen\": \"#2e8b57\",\n        \"seashell\": \"#fff5ee\",\n        \"sienna\": \"#a0522d\",\n        \"silver\": \"#c0c0c0\",\n        \"skyblue\": \"#87ceeb\",\n        \"slateblue\": \"#6a5acd\",\n        \"slategray\": \"#708090\",\n        \"snow\": \"#fffafa\",\n        \"springgreen\": \"#00ff7f\",\n        \"steelblue\": \"#4682b4\",\n        \"tan\": \"#d2b48c\",\n        \"teal\": \"#008080\",\n        \"thistle\": \"#d8bfd8\",\n        \"tomato\": \"#ff6347\",\n        \"turquoise\": \"#40e0d0\",\n        \"violet\": \"#ee82ee\",\n        \"wheat\": \"#f5deb3\",\n        \"white\": \"#ffffff\",\n        \"whitesmoke\": \"#f5f5f5\",\n        \"yellow\": \"#ffff00\",\n        \"yellowgreen\": \"#9acd32\",\n        \"transparent\": \"transparent\"\n      },\n      _sanitizeNumber: function(val) {\n        if (typeof val === 'number') {\n          return val;\n        }\n        if (isNaN(val) || (val === null) || (val === '') || (val === undefined)) {\n          return 1;\n        }\n        if (val.toLowerCase !== undefined) {\n          return parseFloat(val);\n        }\n        return 1;\n      },\n      isTransparent: function(strVal) {\n        if (!strVal) {\n          return false;\n        }\n        strVal = strVal.toLowerCase().trim();\n        return (strVal === 'transparent') || (strVal.match(/#?00000000/)) || (strVal.match(/(rgba|hsla)\\(0,0,0,0?\\.?0\\)/));\n      },\n      rgbaIsTransparent: function(rgba) {\n        return ((rgba.r === 0) && (rgba.g === 0) && (rgba.b === 0) && (rgba.a === 0));\n      },\n      //parse a string to HSB\n      setColor: function(strVal) {\n        strVal = strVal.toLowerCase().trim();\n        if (strVal) {\n          if (this.isTransparent(strVal)) {\n            this.value = {\n              h: 0,\n              s: 0,\n              b: 0,\n              a: 0\n            };\n          } else {\n            this.value = this.stringToHSB(strVal) || {\n              h: 0,\n              s: 0,\n              b: 0,\n              a: 1\n            }; // if parser fails, defaults to black\n          }\n        }\n      },\n      stringToHSB: function(strVal) {\n        strVal = strVal.toLowerCase();\n        var alias;\n        if (typeof this.colors[strVal] !== 'undefined') {\n          strVal = this.colors[strVal];\n          alias = 'alias';\n        }\n        var that = this,\n          result = false;\n        $.each(this.stringParsers, function(i, parser) {\n          var match = parser.re.exec(strVal),\n            values = match && parser.parse.apply(that, [match]),\n            format = alias || parser.format || 'rgba';\n          if (values) {\n            if (format.match(/hsla?/)) {\n              result = that.RGBtoHSB.apply(that, that.HSLtoRGB.apply(that, values));\n            } else {\n              result = that.RGBtoHSB.apply(that, values);\n            }\n            that.origFormat = format;\n            return false;\n          }\n          return true;\n        });\n        return result;\n      },\n      setHue: function(h) {\n        this.value.h = 1 - h;\n      },\n      setSaturation: function(s) {\n        this.value.s = s;\n      },\n      setBrightness: function(b) {\n        this.value.b = 1 - b;\n      },\n      setAlpha: function(a) {\n        this.value.a = parseInt((1 - a) * 100, 10) / 100;\n      },\n      toRGB: function(h, s, b, a) {\n        if (!h) {\n          h = this.value.h;\n          s = this.value.s;\n          b = this.value.b;\n        }\n        h *= 360;\n        var R, G, B, X, C;\n        h = (h % 360) / 60;\n        C = b * s;\n        X = C * (1 - Math.abs(h % 2 - 1));\n        R = G = B = b - C;\n\n        h = ~~h;\n        R += [C, X, 0, 0, X, C][h];\n        G += [X, C, C, X, 0, 0][h];\n        B += [0, 0, X, C, C, X][h];\n        return {\n          r: Math.round(R * 255),\n          g: Math.round(G * 255),\n          b: Math.round(B * 255),\n          a: a || this.value.a\n        };\n      },\n      toHex: function(h, s, b, a) {\n        var rgb = this.toRGB(h, s, b, a);\n        if (this.rgbaIsTransparent(rgb)) {\n          return 'transparent';\n        }\n        return '#' + ((1 << 24) | (parseInt(rgb.r) << 16) | (parseInt(rgb.g) << 8) | parseInt(rgb.b)).toString(16).substr(1);\n      },\n      toHSL: function(h, s, b, a) {\n        h = h || this.value.h;\n        s = s || this.value.s;\n        b = b || this.value.b;\n        a = a || this.value.a;\n\n        var H = h,\n          L = (2 - s) * b,\n          S = s * b;\n        if (L > 0 && L <= 1) {\n          S /= L;\n        } else {\n          S /= 2 - L;\n        }\n        L /= 2;\n        if (S > 1) {\n          S = 1;\n        }\n        return {\n          h: isNaN(H) ? 0 : H,\n          s: isNaN(S) ? 0 : S,\n          l: isNaN(L) ? 0 : L,\n          a: isNaN(a) ? 0 : a\n        };\n      },\n      toAlias: function(r, g, b, a) {\n        var rgb = this.toHex(r, g, b, a);\n        for (var alias in this.colors) {\n          if (this.colors[alias] === rgb) {\n            return alias;\n          }\n        }\n        return false;\n      },\n      RGBtoHSB: function(r, g, b, a) {\n        r /= 255;\n        g /= 255;\n        b /= 255;\n\n        var H, S, V, C;\n        V = Math.max(r, g, b);\n        C = V - Math.min(r, g, b);\n        H = (C === 0 ? null :\n          V === r ? (g - b) / C :\n          V === g ? (b - r) / C + 2 :\n          (r - g) / C + 4\n        );\n        H = ((H + 360) % 6) * 60 / 360;\n        S = C === 0 ? 0 : C / V;\n        return {\n          h: this._sanitizeNumber(H),\n          s: S,\n          b: V,\n          a: this._sanitizeNumber(a)\n        };\n      },\n      HueToRGB: function(p, q, h) {\n        if (h < 0) {\n          h += 1;\n        } else if (h > 1) {\n          h -= 1;\n        }\n        if ((h * 6) < 1) {\n          return p + (q - p) * h * 6;\n        } else if ((h * 2) < 1) {\n          return q;\n        } else if ((h * 3) < 2) {\n          return p + (q - p) * ((2 / 3) - h) * 6;\n        } else {\n          return p;\n        }\n      },\n      HSLtoRGB: function(h, s, l, a) {\n        if (s < 0) {\n          s = 0;\n        }\n        var q;\n        if (l <= 0.5) {\n          q = l * (1 + s);\n        } else {\n          q = l + s - (l * s);\n        }\n\n        var p = 2 * l - q;\n\n        var tr = h + (1 / 3);\n        var tg = h;\n        var tb = h - (1 / 3);\n\n        var r = Math.round(this.HueToRGB(p, q, tr) * 255);\n        var g = Math.round(this.HueToRGB(p, q, tg) * 255);\n        var b = Math.round(this.HueToRGB(p, q, tb) * 255);\n        return [r, g, b, this._sanitizeNumber(a)];\n      },\n      toString: function(format) {\n        format = format || 'rgba';\n        var c = false;\n        switch (format) {\n          case 'rgb':\n            {\n              c = this.toRGB();\n              if (this.rgbaIsTransparent(c)) {\n                return 'transparent';\n              }\n              return 'rgb(' + c.r + ',' + c.g + ',' + c.b + ')';\n            }\n            break;\n          case 'rgba':\n            {\n              c = this.toRGB();\n              return 'rgba(' + c.r + ',' + c.g + ',' + c.b + ',' + c.a + ')';\n            }\n            break;\n          case 'hsl':\n            {\n              c = this.toHSL();\n              return 'hsl(' + Math.round(c.h * 360) + ',' + Math.round(c.s * 100) + '%,' + Math.round(c.l * 100) + '%)';\n            }\n            break;\n          case 'hsla':\n            {\n              c = this.toHSL();\n              return 'hsla(' + Math.round(c.h * 360) + ',' + Math.round(c.s * 100) + '%,' + Math.round(c.l * 100) + '%,' + c.a + ')';\n            }\n            break;\n          case 'hex':\n            {\n              return this.toHex();\n            }\n            break;\n          case 'alias':\n            return this.toAlias() || this.toHex();\n          default:\n            {\n              return c;\n            }\n            break;\n        }\n      },\n      // a set of RE's that can match strings and generate color tuples.\n      // from John Resig color plugin\n      // https://github.com/jquery/jquery-color/\n      stringParsers: [{\n        re: /rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*?\\)/,\n        format: 'rgb',\n        parse: function(execResult) {\n          return [\n            execResult[1],\n            execResult[2],\n            execResult[3],\n            1\n          ];\n        }\n      }, {\n        re: /rgb\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*?\\)/,\n        format: 'rgb',\n        parse: function(execResult) {\n          return [\n            2.55 * execResult[1],\n            2.55 * execResult[2],\n            2.55 * execResult[3],\n            1\n          ];\n        }\n      }, {\n        re: /rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n        format: 'rgba',\n        parse: function(execResult) {\n          return [\n            execResult[1],\n            execResult[2],\n            execResult[3],\n            execResult[4]\n          ];\n        }\n      }, {\n        re: /rgba\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n        format: 'rgba',\n        parse: function(execResult) {\n          return [\n            2.55 * execResult[1],\n            2.55 * execResult[2],\n            2.55 * execResult[3],\n            execResult[4]\n          ];\n        }\n      }, {\n        re: /hsl\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*?\\)/,\n        format: 'hsl',\n        parse: function(execResult) {\n          return [\n            execResult[1] / 360,\n            execResult[2] / 100,\n            execResult[3] / 100,\n            execResult[4]\n          ];\n        }\n      }, {\n        re: /hsla\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n        format: 'hsla',\n        parse: function(execResult) {\n          return [\n            execResult[1] / 360,\n            execResult[2] / 100,\n            execResult[3] / 100,\n            execResult[4]\n          ];\n        }\n      }, {\n        re: /#?([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,\n        format: 'hex',\n        parse: function(execResult) {\n          return [\n            parseInt(execResult[1], 16),\n            parseInt(execResult[2], 16),\n            parseInt(execResult[3], 16),\n            1\n          ];\n        }\n      }, {\n        re: /#?([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,\n        format: 'hex',\n        parse: function(execResult) {\n          return [\n            parseInt(execResult[1] + execResult[1], 16),\n            parseInt(execResult[2] + execResult[2], 16),\n            parseInt(execResult[3] + execResult[3], 16),\n            1\n          ];\n        }\n      }],\n      colorNameToHex: function(name) {\n        if (typeof this.colors[name.toLowerCase()] !== 'undefined') {\n          return this.colors[name.toLowerCase()];\n        }\n        return false;\n      }\n    };\n\n\n    var defaults = {\n      horizontal: false, // horizontal mode layout ?\n      inline: false, //forces to show the colorpicker as an inline element\n      color: false, //forces a color\n      format: false, //forces a format\n      input: 'input', // children input selector\n      container: false, // container selector\n      component: '.add-on, .input-group-addon', // children component selector\n      sliders: {\n        saturation: {\n          maxLeft: 100,\n          maxTop: 100,\n          callLeft: 'setSaturation',\n          callTop: 'setBrightness'\n        },\n        hue: {\n          maxLeft: 0,\n          maxTop: 100,\n          callLeft: false,\n          callTop: 'setHue'\n        },\n        alpha: {\n          maxLeft: 0,\n          maxTop: 100,\n          callLeft: false,\n          callTop: 'setAlpha'\n        }\n      },\n      slidersHorz: {\n        saturation: {\n          maxLeft: 100,\n          maxTop: 100,\n          callLeft: 'setSaturation',\n          callTop: 'setBrightness'\n        },\n        hue: {\n          maxLeft: 100,\n          maxTop: 0,\n          callLeft: 'setHue',\n          callTop: false\n        },\n        alpha: {\n          maxLeft: 100,\n          maxTop: 0,\n          callLeft: 'setAlpha',\n          callTop: false\n        }\n      },\n      template: '<div class=\"colorpicker dropdown-menu\">' +\n        '<div class=\"colorpicker-saturation\"><i><b></b></i></div>' +\n        '<div class=\"colorpicker-hue\"><i></i></div>' +\n        '<div class=\"colorpicker-alpha\"><i></i></div>' +\n        '<div class=\"colorpicker-color\"><div /></div>' +\n        '<div class=\"colorpicker-selectors\"></div>' +\n        '</div>',\n      align: 'right',\n      customClass: null,\n      colorSelectors: null\n    };\n\n    var Colorpicker = function(element, options) {\n      this.element = $(element).addClass('colorpicker-element');\n      this.options = $.extend(true, {}, defaults, this.element.data(), options);\n      this.component = this.options.component;\n      this.component = (this.component !== false) ? this.element.find(this.component) : false;\n      if (this.component && (this.component.length === 0)) {\n        this.component = false;\n      }\n      this.container = (this.options.container === true) ? this.element : this.options.container;\n      this.container = (this.container !== false) ? $(this.container) : false;\n\n      // Is the element an input? Should we search inside for any input?\n      this.input = this.element.is('input') ? this.element : (this.options.input ?\n        this.element.find(this.options.input) : false);\n      if (this.input && (this.input.length === 0)) {\n        this.input = false;\n      }\n      // Set HSB color\n      this.color = new Color(this.options.color !== false ? this.options.color : this.getValue(), this.options.colorSelectors);\n      this.format = this.options.format !== false ? this.options.format : this.color.origFormat;\n\n      // Setup picker\n      this.picker = $(this.options.template);\n      if (this.options.customClass) {\n        this.picker.addClass(this.options.customClass);\n      }\n      if (this.options.inline) {\n        this.picker.addClass('colorpicker-inline colorpicker-visible');\n      } else {\n        this.picker.addClass('colorpicker-hidden');\n      }\n      if (this.options.horizontal) {\n        this.picker.addClass('colorpicker-horizontal');\n      }\n      if (this.format === 'rgba' || this.format === 'hsla' || this.options.format === false) {\n        this.picker.addClass('colorpicker-with-alpha');\n      }\n      if (this.options.align === 'right') {\n        this.picker.addClass('colorpicker-right');\n      }\n      if (this.options.colorSelectors) {\n        var colorpicker = this;\n        $.each(this.options.colorSelectors, function(name, color) {\n          var $btn = $('<i />').css('background-color', color).data('class', name);\n          $btn.click(function() {\n            colorpicker.setValue($(this).css('background-color'));\n          });\n          colorpicker.picker.find('.colorpicker-selectors').append($btn);\n        });\n        this.picker.find('.colorpicker-selectors').show();\n      }\n      this.picker.on('mousedown.colorpicker touchstart.colorpicker', $.proxy(this.mousedown, this));\n      this.picker.appendTo(this.container ? this.container : $('body'));\n\n      // Bind events\n      if (this.input !== false) {\n        this.input.on({\n          'keyup.colorpicker': $.proxy(this.keyup, this)\n        });\n        this.input.on({\n          'change.colorpicker': $.proxy(this.change, this)\n        });\n        if (this.component === false) {\n          this.element.on({\n            'focus.colorpicker': $.proxy(this.show, this)\n          });\n        }\n        if (this.options.inline === false) {\n          this.element.on({\n            'focusout.colorpicker': $.proxy(this.hide, this)\n          });\n        }\n      }\n\n      if (this.component !== false) {\n        this.component.on({\n          'click.colorpicker': $.proxy(this.show, this)\n        });\n      }\n\n      if ((this.input === false) && (this.component === false)) {\n        this.element.on({\n          'click.colorpicker': $.proxy(this.show, this)\n        });\n      }\n\n      // for HTML5 input[type='color']\n      if ((this.input !== false) && (this.component !== false) && (this.input.attr('type') === 'color')) {\n\n        this.input.on({\n          'click.colorpicker': $.proxy(this.show, this),\n          'focus.colorpicker': $.proxy(this.show, this)\n        });\n      }\n      this.update();\n\n      $($.proxy(function() {\n        this.element.trigger('create');\n      }, this));\n    };\n\n    Colorpicker.Color = Color;\n\n    Colorpicker.prototype = {\n      constructor: Colorpicker,\n      destroy: function() {\n        this.picker.remove();\n        this.element.removeData('colorpicker').off('.colorpicker');\n        if (this.input !== false) {\n          this.input.off('.colorpicker');\n        }\n        if (this.component !== false) {\n          this.component.off('.colorpicker');\n        }\n        this.element.removeClass('colorpicker-element');\n        this.element.trigger({\n          type: 'destroy'\n        });\n      },\n      reposition: function() {\n        if (this.options.inline !== false || this.options.container) {\n          return false;\n        }\n        var type = this.container && this.container[0] !== document.body ? 'position' : 'offset';\n        var element = this.component || this.element;\n        var offset = element[type]();\n        if (this.options.align === 'right') {\n          offset.left -= this.picker.outerWidth() - element.outerWidth();\n        }\n        this.picker.css({\n          top: offset.top + element.outerHeight(),\n          left: offset.left\n        });\n      },\n      show: function(e) {\n        if (this.isDisabled()) {\n          return false;\n        }\n        this.picker.addClass('colorpicker-visible').removeClass('colorpicker-hidden');\n        this.reposition();\n        $(window).on('resize.colorpicker', $.proxy(this.reposition, this));\n        if (e && (!this.hasInput() || this.input.attr('type') === 'color')) {\n          if (e.stopPropagation && e.preventDefault) {\n            e.stopPropagation();\n            e.preventDefault();\n          }\n        }\n        if (this.options.inline === false) {\n          $(window.document).on({\n            'mousedown.colorpicker': $.proxy(this.hide, this)\n          });\n        }\n        this.element.trigger({\n          type: 'showPicker',\n          color: this.color\n        });\n      },\n      hide: function() {\n        this.picker.addClass('colorpicker-hidden').removeClass('colorpicker-visible');\n        $(window).off('resize.colorpicker', this.reposition);\n        $(document).off({\n          'mousedown.colorpicker': this.hide\n        });\n        this.update();\n        this.element.trigger({\n          type: 'hidePicker',\n          color: this.color\n        });\n      },\n      updateData: function(val) {\n        val = val || this.color.toString(this.format);\n        this.element.data('color', val);\n        return val;\n      },\n      updateInput: function(val) {\n        val = val || this.color.toString(this.format);\n        if (this.input !== false) {\n          if (this.options.colorSelectors) {\n            var color = new Color(val, this.options.colorSelectors);\n            var alias = color.toAlias();\n            if (typeof this.options.colorSelectors[alias] !== 'undefined') {\n              val = alias;\n            }\n          }\n          this.input.prop('value', val);\n        }\n        return val;\n      },\n      updatePicker: function(val) {\n        if (val !== undefined) {\n          this.color = new Color(val, this.options.colorSelectors);\n        }\n        var sl = (this.options.horizontal === false) ? this.options.sliders : this.options.slidersHorz;\n        var icns = this.picker.find('i');\n        if (icns.length === 0) {\n          return;\n        }\n        if (this.options.horizontal === false) {\n          sl = this.options.sliders;\n          icns.eq(1).css('top', sl.hue.maxTop * (1 - this.color.value.h)).end()\n            .eq(2).css('top', sl.alpha.maxTop * (1 - this.color.value.a));\n        } else {\n          sl = this.options.slidersHorz;\n          icns.eq(1).css('left', sl.hue.maxLeft * (1 - this.color.value.h)).end()\n            .eq(2).css('left', sl.alpha.maxLeft * (1 - this.color.value.a));\n        }\n        icns.eq(0).css({\n          'top': sl.saturation.maxTop - this.color.value.b * sl.saturation.maxTop,\n          'left': this.color.value.s * sl.saturation.maxLeft\n        });\n        this.picker.find('.colorpicker-saturation').css('backgroundColor', this.color.toHex(this.color.value.h, 1, 1, 1));\n        this.picker.find('.colorpicker-alpha').css('backgroundColor', this.color.toHex());\n        this.picker.find('.colorpicker-color, .colorpicker-color div').css('backgroundColor', this.color.toString(this.format));\n        return val;\n      },\n      updateComponent: function(val) {\n        val = val || this.color.toString(this.format);\n        if (this.component !== false) {\n          var icn = this.component.find('i').eq(0);\n          if (icn.length > 0) {\n            icn.css({\n              'backgroundColor': val\n            });\n          } else {\n            this.component.css({\n              'backgroundColor': val\n            });\n          }\n        }\n        return val;\n      },\n      update: function(force) {\n        var val;\n        if ((this.getValue(false) !== false) || (force === true)) {\n          // Update input/data only if the current value is not empty\n          val = this.updateComponent();\n          this.updateInput(val);\n          this.updateData(val);\n          this.updatePicker(); // only update picker if value is not empty\n        }\n        return val;\n\n      },\n      setValue: function(val) { // set color manually\n        this.color = new Color(val, this.options.colorSelectors);\n        this.update(true);\n        this.element.trigger({\n          type: 'changeColor',\n          color: this.color,\n          value: val\n        });\n      },\n      getValue: function(defaultValue) {\n        defaultValue = (defaultValue === undefined) ? '#000000' : defaultValue;\n        var val;\n        if (this.hasInput()) {\n          val = this.input.val();\n        } else {\n          val = this.element.data('color');\n        }\n        if ((val === undefined) || (val === '') || (val === null)) {\n          // if not defined or empty, return default\n          val = defaultValue;\n        }\n        return val;\n      },\n      hasInput: function() {\n        return (this.input !== false);\n      },\n      isDisabled: function() {\n        if (this.hasInput()) {\n          return (this.input.prop('disabled') === true);\n        }\n        return false;\n      },\n      disable: function() {\n        if (this.hasInput()) {\n          this.input.prop('disabled', true);\n          this.element.trigger({\n            type: 'disable',\n            color: this.color,\n            value: this.getValue()\n          });\n          return true;\n        }\n        return false;\n      },\n      enable: function() {\n        if (this.hasInput()) {\n          this.input.prop('disabled', false);\n          this.element.trigger({\n            type: 'enable',\n            color: this.color,\n            value: this.getValue()\n          });\n          return true;\n        }\n        return false;\n      },\n      currentSlider: null,\n      mousePointer: {\n        left: 0,\n        top: 0\n      },\n      mousedown: function(e) {\n        if (!e.pageX && !e.pageY && e.originalEvent) {\n          e.pageX = e.originalEvent.touches[0].pageX;\n          e.pageY = e.originalEvent.touches[0].pageY;\n        }\n        e.stopPropagation();\n        e.preventDefault();\n\n        var target = $(e.target);\n\n        //detect the slider and set the limits and callbacks\n        var zone = target.closest('div');\n        var sl = this.options.horizontal ? this.options.slidersHorz : this.options.sliders;\n        if (!zone.is('.colorpicker')) {\n          if (zone.is('.colorpicker-saturation')) {\n            this.currentSlider = $.extend({}, sl.saturation);\n          } else if (zone.is('.colorpicker-hue')) {\n            this.currentSlider = $.extend({}, sl.hue);\n          } else if (zone.is('.colorpicker-alpha')) {\n            this.currentSlider = $.extend({}, sl.alpha);\n          } else {\n            return false;\n          }\n          var offset = zone.offset();\n          //reference to guide's style\n          this.currentSlider.guide = zone.find('i')[0].style;\n          this.currentSlider.left = e.pageX - offset.left;\n          this.currentSlider.top = e.pageY - offset.top;\n          this.mousePointer = {\n            left: e.pageX,\n            top: e.pageY\n          };\n          //trigger mousemove to move the guide to the current position\n          $(document).on({\n            'mousemove.colorpicker': $.proxy(this.mousemove, this),\n            'touchmove.colorpicker': $.proxy(this.mousemove, this),\n            'mouseup.colorpicker': $.proxy(this.mouseup, this),\n            'touchend.colorpicker': $.proxy(this.mouseup, this)\n          }).trigger('mousemove');\n        }\n        return false;\n      },\n      mousemove: function(e) {\n        if (!e.pageX && !e.pageY && e.originalEvent) {\n          e.pageX = e.originalEvent.touches[0].pageX;\n          e.pageY = e.originalEvent.touches[0].pageY;\n        }\n        e.stopPropagation();\n        e.preventDefault();\n        var left = Math.max(\n          0,\n          Math.min(\n            this.currentSlider.maxLeft,\n            this.currentSlider.left + ((e.pageX || this.mousePointer.left) - this.mousePointer.left)\n          )\n        );\n        var top = Math.max(\n          0,\n          Math.min(\n            this.currentSlider.maxTop,\n            this.currentSlider.top + ((e.pageY || this.mousePointer.top) - this.mousePointer.top)\n          )\n        );\n        this.currentSlider.guide.left = left + 'px';\n        this.currentSlider.guide.top = top + 'px';\n        if (this.currentSlider.callLeft) {\n          this.color[this.currentSlider.callLeft].call(this.color, left / this.currentSlider.maxLeft);\n        }\n        if (this.currentSlider.callTop) {\n          this.color[this.currentSlider.callTop].call(this.color, top / this.currentSlider.maxTop);\n        }\n        // Change format dynamically\n        // Only occurs if user choose the dynamic format by\n        // setting option format to false\n        if (this.currentSlider.callTop === 'setAlpha' && this.options.format === false) {\n\n          // Converting from hex / rgb to rgba\n          if (this.color.value.a !== 1) {\n            this.format = 'rgba';\n            this.color.origFormat = 'rgba';\n          }\n\n          // Converting from rgba to hex\n          else {\n            this.format = 'hex';\n            this.color.origFormat = 'hex';\n          }\n        }\n        this.update(true);\n\n        this.element.trigger({\n          type: 'changeColor',\n          color: this.color\n        });\n        return false;\n      },\n      mouseup: function(e) {\n        e.stopPropagation();\n        e.preventDefault();\n        $(document).off({\n          'mousemove.colorpicker': this.mousemove,\n          'touchmove.colorpicker': this.mousemove,\n          'mouseup.colorpicker': this.mouseup,\n          'touchend.colorpicker': this.mouseup\n        });\n        return false;\n      },\n      change: function(e) {\n        this.keyup(e);\n      },\n      keyup: function(e) {\n        if ((e.keyCode === 38)) {\n          if (this.color.value.a < 1) {\n            this.color.value.a = Math.round((this.color.value.a + 0.01) * 100) / 100;\n          }\n          this.update(true);\n        } else if ((e.keyCode === 40)) {\n          if (this.color.value.a > 0) {\n            this.color.value.a = Math.round((this.color.value.a - 0.01) * 100) / 100;\n          }\n          this.update(true);\n        } else {\n          this.color = new Color(this.input.val(), this.options.colorSelectors);\n          // Change format dynamically\n          // Only occurs if user choose the dynamic format by\n          // setting option format to false\n          if (this.color.origFormat && this.options.format === false) {\n            this.format = this.color.origFormat;\n          }\n          if (this.getValue(false) !== false) {\n            this.updateData();\n            this.updateComponent();\n            this.updatePicker();\n          }\n        }\n        this.element.trigger({\n          type: 'changeColor',\n          color: this.color,\n          value: this.input.val()\n        });\n      }\n    };\n\n    $.colorpicker = Colorpicker;\n\n    $.fn.colorpicker = function(option) {\n      var pickerArgs = arguments,\n        rv;\n\n      var $returnValue = this.each(function() {\n        var $this = $(this),\n          inst = $this.data('colorpicker'),\n          options = ((typeof option === 'object') ? option : {});\n        if ((!inst) && (typeof option !== 'string')) {\n          $this.data('colorpicker', new Colorpicker(this, options));\n        } else {\n          if (typeof option === 'string') {\n            rv = inst[option].apply(inst, Array.prototype.slice.call(pickerArgs, 1));\n          }\n        }\n      });\n      if (option === 'getValue') {\n        return rv;\n      }\n      return $returnValue;\n    };\n\n    $.fn.colorpicker.constructor = Colorpicker;\n\n  }));\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/dataTables.bootstrap.css",
    "content": "div.dataTables_length label {\n\tfont-weight: normal;\n\ttext-align: left;\n\twhite-space: nowrap;\n}\n\ndiv.dataTables_length select {\n\twidth: 75px;\n\tdisplay: inline-block;\n}\n\ndiv.dataTables_filter {\n\ttext-align: right;\n}\n\ndiv.dataTables_filter label {\n\tfont-weight: normal;\n\twhite-space: nowrap;\n\ttext-align: left;\n}\n\ndiv.dataTables_filter input {\n\tmargin-left: 0.5em;\n\tdisplay: inline-block;\n\twidth: auto;\n}\n\ndiv.dataTables_info {\n\tpadding-top: 8px;\n\twhite-space: nowrap;\n}\n\ndiv.dataTables_paginate {\n\tmargin: 0;\n\twhite-space: nowrap;\n\ttext-align: right;\n}\n\ndiv.dataTables_paginate ul.pagination {\n\tmargin: 2px 0;\n\twhite-space: nowrap;\n}\n\n@media screen and (max-width: 767px) {\n\tdiv.dataTables_wrapper > div.row > div,\n\tdiv.dataTables_length,\n\tdiv.dataTables_filter,\n\tdiv.dataTables_info,\n\tdiv.dataTables_paginate {\n\t\ttext-align: center;\n\t}\n\n\tdiv.DTTT {\n\t\tmargin-bottom: 0.5em;\n\t}\n}\n\n\ntable.dataTable td,\ntable.dataTable th {\n\t-webkit-box-sizing: content-box;\n\t-moz-box-sizing: content-box;\n\tbox-sizing: content-box;\n}\n\n\ntable.dataTable {\n\tclear: both;\n\tmargin-top: 6px !important;\n\tmargin-bottom: 6px !important;\n\tmax-width: none !important;\n}\n\ntable.dataTable thead .sorting,\ntable.dataTable thead .sorting_asc,\ntable.dataTable thead .sorting_desc,\ntable.dataTable thead .sorting_asc_disabled,\ntable.dataTable thead .sorting_desc_disabled {\n\tcursor: pointer;\n\tposition: relative;\n}\n\ntable.dataTable thead .sorting:after,\ntable.dataTable thead .sorting_asc:after,\ntable.dataTable thead .sorting_desc:after {\n\tposition: absolute;\n\ttop: 8px;\n\tright: 8px;\n\tdisplay: block;\n\tfont-family: 'Glyphicons Halflings';\n\topacity: 0.5;\n}\ntable.dataTable thead .sorting:after {\n\topacity: 0.2;\n\tcontent: \"\\e150\"; /* sort */\n}\ntable.dataTable thead .sorting_asc:after {\n\tcontent: \"\\e155\"; /* sort-by-attributes */\n}\ntable.dataTable thead .sorting_desc:after {\n\tcontent: \"\\e156\"; /* sort-by-attributes-alt */\n}\ndiv.dataTables_scrollBody table.dataTable thead .sorting:after,\ndiv.dataTables_scrollBody table.dataTable thead .sorting_asc:after,\ndiv.dataTables_scrollBody table.dataTable thead .sorting_desc:after {\n\tdisplay: none;\n}\n\ntable.dataTable thead .sorting_asc_disabled:after,\ntable.dataTable thead .sorting_desc_disabled:after {\n\tcolor: #eee;\n}\n\ntable.dataTable thead > tr > th {\n\tpadding-right: 30px;\n}\n\ntable.dataTable th:active {\n\toutline: none;\n}\n\n\n/* Condensed */\ntable.dataTable.table-condensed thead > tr > th {\n\tpadding-right: 20px;\n}\n\ntable.dataTable.table-condensed thead .sorting:after,\ntable.dataTable.table-condensed thead .sorting_asc:after,\ntable.dataTable.table-condensed thead .sorting_desc:after {\n\ttop: 6px;\n\tright: 6px;\n}\n\n/* Scrolling */\ndiv.dataTables_scrollHead table {\n\tmargin-bottom: 0 !important;\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\ndiv.dataTables_scrollHead table thead tr:last-child th:first-child,\ndiv.dataTables_scrollHead table thead tr:last-child td:first-child {\n\tborder-bottom-left-radius: 0 !important;\n\tborder-bottom-right-radius: 0 !important;\n}\n\ndiv.dataTables_scrollBody table {\n\tborder-top: none;\n\tmargin-top: 0 !important;\n\tmargin-bottom: 0 !important;\n}\n\ndiv.dataTables_scrollBody tbody tr:first-child th,\ndiv.dataTables_scrollBody tbody tr:first-child td {\n\tborder-top: none;\n}\n\ndiv.dataTables_scrollFoot table {\n\tmargin-top: 0 !important;\n\tborder-top: none;\n}\n\n/* Frustratingly the border-collapse:collapse used by Bootstrap makes the column\n   width calculations when using scrolling impossible to align columns. We have\n   to use separate\n */\ntable.table-bordered.dataTable {\n\tborder-collapse: separate !important;\n}\ntable.table-bordered thead th,\ntable.table-bordered thead td {\n\tborder-left-width: 0;\n\tborder-top-width: 0;\n}\ntable.table-bordered tbody th,\ntable.table-bordered tbody td {\n\tborder-left-width: 0;\n\tborder-bottom-width: 0;\n}\ntable.table-bordered tfoot th,\ntable.table-bordered tfoot td {\n    border-left-width: 0;\n    border-bottom-width: 0;\n}\ntable.table-bordered th:last-child,\ntable.table-bordered td:last-child {\n\tborder-right-width: 0;\n}\ndiv.dataTables_scrollHead table.table-bordered {\n\tborder-bottom-width: 0;\n}\n\n\n\n\n/*\n * TableTools styles\n */\n.table.dataTable tbody tr.active td,\n.table.dataTable tbody tr.active th {\n\tbackground-color: #08C;\n\tcolor: white;\n}\n\n.table.dataTable tbody tr.active:hover td,\n.table.dataTable tbody tr.active:hover th {\n\tbackground-color: #0075b0 !important;\n}\n\n.table.dataTable tbody tr.active th > a,\n.table.dataTable tbody tr.active td > a {\n\tcolor: white;\n}\n\n.table-striped.dataTable tbody tr.active:nth-child(odd) td,\n.table-striped.dataTable tbody tr.active:nth-child(odd) th {\n\tbackground-color: #017ebc;\n}\n\ntable.DTTT_selectable tbody tr {\n\tcursor: pointer;\n}\n\ndiv.DTTT .btn:hover {\n\ttext-decoration: none !important;\n}\n\nul.DTTT_dropdown.dropdown-menu {\n  z-index: 2003;\n}\n\nul.DTTT_dropdown.dropdown-menu a {\n\tcolor: #333 !important; /* needed only when demo_page.css is included */\n}\n\nul.DTTT_dropdown.dropdown-menu li {\n\tposition: relative;\n}\n\nul.DTTT_dropdown.dropdown-menu li:hover a {\n\tbackground-color: #0088cc;\n\tcolor: white !important;\n}\n\ndiv.DTTT_collection_background {\n\tz-index: 2002;\t\n}\n\n/* TableTools information display */\ndiv.DTTT_print_info {\n\tposition: fixed;\n\ttop: 50%;\n\tleft: 50%;\n\twidth: 400px;\n\theight: 150px;\n\tmargin-left: -200px;\n\tmargin-top: -75px;\n\ttext-align: center;\n\tcolor: #333;\n\tpadding: 10px 30px;\n\topacity: 0.95;\n\n\tbackground-color: white;\n\tborder: 1px solid rgba(0, 0, 0, 0.2);\n\tborder-radius: 6px;\n\t\n\t-webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);\n\t        box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);\n}\n\ndiv.DTTT_print_info h6 {\n\tfont-weight: normal;\n\tfont-size: 28px;\n\tline-height: 28px;\n\tmargin: 1em;\n}\n\ndiv.DTTT_print_info p {\n\tfont-size: 14px;\n\tline-height: 20px;\n}\n\ndiv.dataTables_processing {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    width: 100%;\n    height: 60px;\n    margin-left: -50%;\n    margin-top: -25px;\n    padding-top: 20px;\n    padding-bottom: 20px;\n    text-align: center;\n    font-size: 1.2em;\n    background-color: white;\n    background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));\n    background: -webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);\n    background: -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);\n    background: -ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);\n    background: -o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);\n    background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);\n}\n\n\n\n/*\n * FixedColumns styles\n */\ndiv.DTFC_LeftHeadWrapper table,\ndiv.DTFC_LeftFootWrapper table,\ndiv.DTFC_RightHeadWrapper table,\ndiv.DTFC_RightFootWrapper table,\ntable.DTFC_Cloned tr.even {\n    background-color: white;\n    margin-bottom: 0;\n}\n \ndiv.DTFC_RightHeadWrapper table ,\ndiv.DTFC_LeftHeadWrapper table {\n\tborder-bottom: none !important;\n    margin-bottom: 0 !important;\n    border-top-right-radius: 0 !important;\n    border-bottom-left-radius: 0 !important;\n    border-bottom-right-radius: 0 !important;\n}\n \ndiv.DTFC_RightHeadWrapper table thead tr:last-child th:first-child,\ndiv.DTFC_RightHeadWrapper table thead tr:last-child td:first-child,\ndiv.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child,\ndiv.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child {\n    border-bottom-left-radius: 0 !important;\n    border-bottom-right-radius: 0 !important;\n}\n \ndiv.DTFC_RightBodyWrapper table,\ndiv.DTFC_LeftBodyWrapper table {\n    border-top: none;\n    margin: 0 !important;\n}\n \ndiv.DTFC_RightBodyWrapper tbody tr:first-child th,\ndiv.DTFC_RightBodyWrapper tbody tr:first-child td,\ndiv.DTFC_LeftBodyWrapper tbody tr:first-child th,\ndiv.DTFC_LeftBodyWrapper tbody tr:first-child td {\n    border-top: none;\n}\n \ndiv.DTFC_RightFootWrapper table,\ndiv.DTFC_LeftFootWrapper table {\n    border-top: none;\n    margin-top: 0 !important;\n}\n\n\ndiv.DTFC_LeftBodyWrapper table.dataTable thead .sorting:after,\ndiv.DTFC_LeftBodyWrapper table.dataTable thead .sorting_asc:after,\ndiv.DTFC_LeftBodyWrapper table.dataTable thead .sorting_desc:after,\ndiv.DTFC_RightBodyWrapper table.dataTable thead .sorting:after,\ndiv.DTFC_RightBodyWrapper table.dataTable thead .sorting_asc:after,\ndiv.DTFC_RightBodyWrapper table.dataTable thead .sorting_desc:after {\n\tdisplay: none;\n}\n\n\n/*\n * FixedHeader styles\n */\ndiv.FixedHeader_Cloned table {\n\tmargin: 0 !important\n}\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/dataTables.bootstrap.js",
    "content": "/*! DataTables Bootstrap 3 integration\n * ©2011-2014 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and\n * DataTables 1.10 or newer.\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap\n * for further information.\n */\n(function(window, document, undefined){\n\nvar factory = function( $, DataTable ) {\n\"use strict\";\n\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t\"<'row'<'col-sm-6'l><'col-sm-6'f>>\" +\n\t\t\"<'row'<'col-sm-12'tr>>\" +\n\t\t\"<'row'<'col-sm-5'i><'col-sm-7'p>>\",\n\trenderer: 'bootstrap'\n} );\n\n\n/* Default class modification */\n$.extend( DataTable.ext.classes, {\n\tsWrapper:      \"dataTables_wrapper form-inline dt-bootstrap\",\n\tsFilterInput:  \"form-control input-sm\",\n\tsLengthSelect: \"form-control input-sm\"\n} );\n\n\n/* Bootstrap paging button renderer */\nDataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {\n\tvar api     = new DataTable.Api( settings );\n\tvar classes = settings.oClasses;\n\tvar lang    = settings.oLanguage.oPaginate;\n\tvar btnDisplay, btnClass, counter=0;\n\n\tvar attach = function( container, buttons ) {\n\t\tvar i, ien, node, button;\n\t\tvar clickHandler = function ( e ) {\n\t\t\te.preventDefault();\n\t\t\tif ( !$(e.currentTarget).hasClass('disabled') ) {\n\t\t\t\tapi.page( e.data.action ).draw( false );\n\t\t\t}\n\t\t};\n\n\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif ( $.isArray( button ) ) {\n\t\t\t\tattach( container, button );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtnDisplay = '';\n\t\t\t\tbtnClass = '';\n\n\t\t\t\tswitch ( button ) {\n\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\tbtnDisplay = '&hellip;';\n\t\t\t\t\t\tbtnClass = 'disabled';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'first':\n\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'next':\n\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'last':\n\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t'active' : '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\tnode = $('<li>', {\n\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append( $('<a>', {\n\t\t\t\t\t\t\t\t'href': '#',\n\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t'data-dt-idx': counter,\n\t\t\t\t\t\t\t\t'tabindex': settings.iTabIndex\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\tsettings.oApi._fnBindAction(\n\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t);\n\n\t\t\t\t\tcounter++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t// inside an iframe or frame. \n\tvar activeEl;\n\n\ttry {\n\t\t// Because this approach is destroying and recreating the paging\n\t\t// elements, focus is lost on the select button which is bad for\n\t\t// accessibility. So we want to restore focus once the draw has\n\t\t// completed\n\t\tactiveEl = $(document.activeElement).data('dt-idx');\n\t}\n\tcatch (e) {}\n\n\tattach(\n\t\t$(host).empty().html('<ul class=\"pagination\"/>').children('ul'),\n\t\tbuttons\n\t);\n\n\tif ( activeEl ) {\n\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).focus();\n\t}\n};\n\n\n/*\n * TableTools Bootstrap compatibility\n * Required TableTools 2.1+\n */\nif ( DataTable.TableTools ) {\n\t// Set the classes that TableTools uses to something suitable for Bootstrap\n\t$.extend( true, DataTable.TableTools.classes, {\n\t\t\"container\": \"DTTT btn-group\",\n\t\t\"buttons\": {\n\t\t\t\"normal\": \"btn btn-default\",\n\t\t\t\"disabled\": \"disabled\"\n\t\t},\n\t\t\"collection\": {\n\t\t\t\"container\": \"DTTT_dropdown dropdown-menu\",\n\t\t\t\"buttons\": {\n\t\t\t\t\"normal\": \"\",\n\t\t\t\t\"disabled\": \"disabled\"\n\t\t\t}\n\t\t},\n\t\t\"print\": {\n\t\t\t\"info\": \"DTTT_print_info\"\n\t\t},\n\t\t\"select\": {\n\t\t\t\"row\": \"active\"\n\t\t}\n\t} );\n\n\t// Have the collection use a bootstrap compatible drop down\n\t$.extend( true, DataTable.TableTools.DEFAULTS.oTags, {\n\t\t\"collection\": {\n\t\t\t\"container\": \"ul\",\n\t\t\t\"button\": \"li\",\n\t\t\t\"liner\": \"a\"\n\t\t}\n\t} );\n}\n\n}; // /factory\n\n\n// Define as an AMD module if possible\nif ( typeof define === 'function' && define.amd ) {\n\tdefine( ['jquery', 'datatables'], factory );\n}\nelse if ( typeof exports === 'object' ) {\n    // Node/CommonJS\n    factory( require('jquery'), require('datatables') );\n}\nelse if ( jQuery ) {\n\t// Otherwise simply initialise as normal, stopping multiple evaluation\n\tfactory( jQuery, jQuery.fn.dataTable );\n}\n\n\n})(window, document);\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/AutoFill/Readme.txt",
    "content": "# AutoFill\n\nAutoFill gives an Excel like option to a DataTable to click and drag over multiple cells, filling in information over the selected cells and incrementing numbers as needed. Key features include:\n\n* Click and drag cell content insertion\n* Automatic incrementing of numeric information\n* Enable and disable on any column\n* Detailed callback functions for customisation\n* Support for both DataTables and browser window scrolling\n\n\n# Installation\n\nTo use AutoFill, first download DataTables ( http://datatables.net/download ) and place the unzipped AutoFill package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser.\n\n\n# Basic usage\n\nAutoFill is initialised using the `$.fn.dataTable.AutoFill` constructor. For example:\n\n```js\n$(document).ready( function () {\n    var table = $('#example').dataTable();\n    new $.fn.dataTable.AutoFill( table );\n} );\n```\n\n\n# Documentation / support\n\n* Documentation: http://datatables.net/extensions/autofill/\n* DataTables support forums: http://datatables.net/forums\n\n\n# GitHub\n\nIf you fancy getting involved with the development of AutoFill and help make it better, please refer to its GitHub repo: https://github.com/DataTables/AutoFill\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/AutoFill/css/dataTables.autoFill.css",
    "content": "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * AutoFill styles\n */\n\ndiv.AutoFill_filler {\n\tdisplay: none;\n\tposition: absolute;\n\theight: 14px;\n\twidth: 14px;\n\tbackground: url(../images/filler.png) no-repeat center center;\n\tz-index: 1002;\n}\n\ndiv.AutoFill_border {\n\tdisplay: none;\n\tposition: absolute;\n\tbackground-color: #0063dc;\n\tz-index: 1001;\n\t\n\tbox-shadow: 0px 0px 5px #76b4ff;\n\t-moz-box-shadow: 0px 0px 5px #76b4ff;\n\t-webkit-box-shadow: 0px 0px 5px #76b4ff;\n}\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/AutoFill/examples/columns.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>AutoFill example - Column options</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.autoFill.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.autoFill.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').dataTable();\n\n\tnew $.fn.dataTable.AutoFill( table, {\n\t\t\"columnDefs\": [\n\t\t\t{ enable:    false, targets: [-1, -2] },\n\t\t\t{ increment: false, targets: 3 }\n\t\t]\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>AutoFill example <span>Column options</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Columns can be enabled (which they are by default) and disabled from providing the end user with\n\t\t\t\tAutoFill abilities by using either <code>columns</code> or <code>columnDefs</code> and the\n\t\t\t\t<code>enable</code> option. These two arrays work in exactly the same way <a href=\n\t\t\t\t\"http://datatables.net/ref/columns\">as in DataTables</a>.</p>\n\n\t\t\t\t<p>This example shows how disabling columns counting from the right hand side of the table can be\n\t\t\t\tachieved. In this case, the last three columns.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\tvar table = $('#example').dataTable();\n\n\tnew $.fn.dataTable.AutoFill( table, {\n\t\t&quot;columnDefs&quot;: [\n\t\t\t{ enable:    false, targets: [-1, -2] },\n\t\t\t{ increment: false, targets: 3 }\n\t\t]\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.autoFill.js\">../js/dataTables.autoFill.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.autoFill.css\">../css/dataTables.autoFill.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./columns.html\">Column options</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling DataTable</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fill-both.html\">Horizontal and vertical fill</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fill-horizontal.html\">Horizontal fill</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./complete-callback.html\">Complete callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./step-callback.html\">Step callback</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/AutoFill/examples/complete-callback.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>AutoFill example - Complete callback</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.autoFill.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.autoFill.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').dataTable();\n\n\tnew $.fn.dataTable.AutoFill( table, {\n\t\tcomplete: function ( altered ) {\n\t\t\tvar last = altered[ altered.length-1 ];\n\t\t\talert( \n\t\t\t\taltered.length+' cells were altered in this auto-fill. The '+\n\t\t\t\t'value of the last cell altered was: '+last.oldValue+' and is '+\n\t\t\t\t'now '+last.newValue\n\t\t\t);\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>AutoFill example <span>Complete callback</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>AutoFill provides a number of customisable callback functions so you can tailor it's actions to\n\t\t\t\texactly what you need. This example shows the use of the <code>complete</code> callback function which\n\t\t\t\tis executed at the end of an auto-fill drag, providing information about the cells that were\n\t\t\t\taltered.</p>\n\n\t\t\t\t<p>For a complete description of the <code>complete</code> callback, please refer to the <a href=\n\t\t\t\t\"//datatables.net/extras/autofill/options\">AutoFill documentation</a>.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\tvar table = $('#example').dataTable();\n\n\tnew $.fn.dataTable.AutoFill( table, {\n\t\tcomplete: function ( altered ) {\n\t\t\tvar last = altered[ altered.length-1 ];\n\t\t\talert( \n\t\t\t\taltered.length+' cells were altered in this auto-fill. The '+\n\t\t\t\t'value of the last cell altered was: '+last.oldValue+' and is '+\n\t\t\t\t'now '+last.newValue\n\t\t\t);\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.autoFill.js\">../js/dataTables.autoFill.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.autoFill.css\">../css/dataTables.autoFill.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./columns.html\">Column options</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling DataTable</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fill-both.html\">Horizontal and vertical fill</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fill-horizontal.html\">Horizontal fill</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./complete-callback.html\">Complete callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./step-callback.html\">Step callback</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/AutoFill/examples/fill-both.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>AutoFill example - Horizontal and vertical fill</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.autoFill.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.autoFill.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.AutoFill( table, {\n\t\tmode: 'both'\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>AutoFill example <span>Horizontal and vertical fill</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>By default AutoFill will allow the fill to operate only on a single column at a time (i.e.\n\t\t\t\tvertically). However, it has the ability to provide the fill either horizontally, over both axis or\n\t\t\t\tlimited to just one axis depending on the direction of the drag. This option is provided by the\n\t\t\t\t<code>mode</code> sanitisation option.</p>\n\n\t\t\t\t<p>In this case it is set to <code>both</code> (i.e. both horizontal and vertical axis) to provide the\n\t\t\t\tfiller along a row, rather than a column.</p>\n\n\t\t\t\t<p>For the full range of options and syntax for <code>mode</code> please refer to the <a href=\n\t\t\t\t\"//datatables.net/extras/autofill/options\">AutoFill documentation</a>.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.AutoFill( table, {\n\t\tmode: 'both'\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.autoFill.js\">../js/dataTables.autoFill.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.autoFill.css\">../css/dataTables.autoFill.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./columns.html\">Column options</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling DataTable</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./fill-both.html\">Horizontal and vertical fill</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fill-horizontal.html\">Horizontal fill</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./complete-callback.html\">Complete callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./step-callback.html\">Step callback</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/AutoFill/examples/fill-horizontal.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>AutoFill example - Horizontal fill</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.autoFill.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.autoFill.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.AutoFill( table, {\n\t\tmode: 'x'\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>AutoFill example <span>Horizontal fill</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>By default AutoFill will allow the fill to operate only on a single column at a time (i.e.\n\t\t\t\tvertically). However, it has the ability to provide the fill either horizontally, over both axis or\n\t\t\t\tlimited to just one axis depending on the direction of the drag. This option is provided by the\n\t\t\t\t<code>mode</code> sanitisation option.</p>\n\n\t\t\t\t<p>In this case it is set to <code>x</code> (i.e. horizontal axis) to provide the filler along a row,\n\t\t\t\trather than a column.</p>\n\n\t\t\t\t<p>For the full range of options and syntax for <code>mode</code> please refer to the <a href=\n\t\t\t\t\"//datatables.net/extras/autofill/options\">AutoFill documentation</a>.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.AutoFill( table, {\n\t\tmode: 'x'\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.autoFill.js\">../js/dataTables.autoFill.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.autoFill.css\">../css/dataTables.autoFill.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./columns.html\">Column options</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling DataTable</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fill-both.html\">Horizontal and vertical fill</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./fill-horizontal.html\">Horizontal fill</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./complete-callback.html\">Complete callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./step-callback.html\">Step callback</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/AutoFill/examples/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\n\t<title>AutoFill examples - AutoFill examples</title>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>AutoFill example <span>AutoFill examples</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>AutoFill gives an Excel like option to a DataTable to click and drag over multiple cells, filling in\n\t\t\t\tinformation over the selected cells and incrementing numbers as needed.</p>\n\n\t\t\t\t<p>Thanks to <a href=\"http://www.phoniax.no/\">Phoniax AS</a> for their sponsorship of this plug-in for\n\t\t\t\tDataTables.</p>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./columns.html\">Column options</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling DataTable</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fill-both.html\">Horizontal and vertical fill</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fill-horizontal.html\">Horizontal fill</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./complete-callback.html\">Complete callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./step-callback.html\">Step callback</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/AutoFill/examples/scrolling.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>AutoFill example - Scrolling DataTable</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.autoFill.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.autoFill.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').dataTable( {\n\t\tscrollY: 200,\n\t\tscrollCollapse: false,\n\t\tpaginate: false\n\t} );\n\n\tnew $.fn.dataTable.AutoFill( table );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>AutoFill example <span>Scrolling DataTable</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>When dragging an AutoFill handle, the table (if DataTables scrolling is enabled) or the window will\n\t\t\t\tbe automatically scrolled, as you approach the edge of the scrolling component. The example below shows\n\t\t\t\tthe effect with DataTables scrolling (and also window if needed).</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\tvar table = $('#example').dataTable( {\n\t\tscrollY: 200,\n\t\tscrollCollapse: false,\n\t\tpaginate: false\n\t} );\n\n\tnew $.fn.dataTable.AutoFill( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.autoFill.js\">../js/dataTables.autoFill.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.autoFill.css\">../css/dataTables.autoFill.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./columns.html\">Column options</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./scrolling.html\">Scrolling DataTable</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fill-both.html\">Horizontal and vertical fill</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fill-horizontal.html\">Horizontal fill</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./complete-callback.html\">Complete callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./step-callback.html\">Step callback</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/AutoFill/examples/simple.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>AutoFill example - Basic initialisation</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.autoFill.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.autoFill.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\tnew $.fn.dataTable.AutoFill( table );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>AutoFill example <span>Basic initialisation</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>AutoFill gives an Excel like option to a DataTable to click and drag over multiple cells, filling in\n\t\t\t\tinformation over the selected cells and incrementing numbers as needed.</p>\n\n\t\t\t\t<p>AutoFill is initialised using the <code>$.fn.dataTable.AutoFill</code> function as shown in the\n\t\t\t\texample below. It requires one parameter, the DataTable instance that AutoFill is to operate on, and\n\t\t\t\toptionally a second configuration parameter, which is shown in the other AutoFill examples.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\tnew $.fn.dataTable.AutoFill( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.autoFill.js\">../js/dataTables.autoFill.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.autoFill.css\">../css/dataTables.autoFill.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./columns.html\">Column options</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling DataTable</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fill-both.html\">Horizontal and vertical fill</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fill-horizontal.html\">Horizontal fill</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./complete-callback.html\">Complete callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./step-callback.html\">Step callback</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/AutoFill/examples/step-callback.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>AutoFill example - Step callback</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.autoFill.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.autoFill.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').dataTable();\n\n\tnew $.fn.dataTable.AutoFill( table, {\n\t\tcolumnDefs: [ {\n\t\t\ttargets: -1,\n\t\t\tstep: function ( cell, read, last, i, x, y ) {\n\t\t\t\tvar val = parseInt( (last || read).replace(/[$,]/g, ''), 10 );\n\t\t\t\tval += (x<0 || y<0 ? -100 : 100); // - if going back up, + if going down\n\n\t\t\t\t// Format for the currency column\n\t\t\t\treturn '$'+val.toString().replace( /\\B(?=(\\d{3})+(?!\\d))/g, ',' );\n\t\t\t}\n\t\t} ]\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>AutoFill example <span>Step callback</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>By default, AutoFill will increment cells that contain numbers by a single digit for each cell that\n\t\t\t\tis iterated over (try the <em>Age</em> column below for example). This behaviour can be disabled\n\t\t\t\tcompletely using the <code>increment</code> column option, but it can also be modified to suit your\n\t\t\t\trequirements through use of the <code>step</code> column callback function.</p>\n\n\t\t\t\t<p>The <code>step</code> callback is executed for each cell in the auto-fill set and gives complete\n\t\t\t\tcontrol over how data is incremented. The example below shows the step function being used on the\n\t\t\t\t<em>Salary</em> column to increment by 100, rather than 1 for each cell.</p>\n\n\t\t\t\t<p>For a complete description of the <code>step</code> callback, please refer to the <a href=\n\t\t\t\t\"//datatables.net/extras/autofill/options\">AutoFill documentation</a>.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\tvar table = $('#example').dataTable();\n\n\tnew $.fn.dataTable.AutoFill( table, {\n\t\tcolumnDefs: [ {\n\t\t\ttargets: -1,\n\t\t\tstep: function ( cell, read, last, i, x, y ) {\n\t\t\t\tvar val = parseInt( (last || read).replace(/[$,]/g, ''), 10 );\n\t\t\t\tval += (x&lt;0 || y&lt;0 ? -100 : 100); // - if going back up, + if going down\n\n\t\t\t\t// Format for the currency column\n\t\t\t\treturn '$'+val.toString().replace( /\\B(?=(\\d{3})+(?!\\d))/g, ',' );\n\t\t\t}\n\t\t} ]\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.autoFill.js\">../js/dataTables.autoFill.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.autoFill.css\">../css/dataTables.autoFill.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./columns.html\">Column options</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling DataTable</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fill-both.html\">Horizontal and vertical fill</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fill-horizontal.html\">Horizontal fill</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./complete-callback.html\">Complete callback</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./step-callback.html\">Step callback</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/AutoFill/js/dataTables.autoFill.js",
    "content": "/*! AutoFill 1.2.1\n * ©2008-2014 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     AutoFill\n * @description Add Excel like click and drag auto-fill options to DataTables\n * @version     1.2.1\n * @file        dataTables.autoFill.js\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     www.sprymedia.co.uk/contact\n * @copyright   Copyright 2010-2014 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n(function( window, document, undefined ) {\n\nvar factory = function( $, DataTable ) {\n\"use strict\";\n\n/** \n * AutoFill provides Excel like auto-fill features for a DataTable\n *\n * @class AutoFill\n * @constructor\n * @param {object} oTD DataTables settings object\n * @param {object} oConfig Configuration object for AutoFill\n */\nvar AutoFill = function( oDT, oConfig )\n{\n\t/* Sanity check that we are a new instance */\n\tif ( ! (this instanceof AutoFill) ) {\n\t\tthrow( \"Warning: AutoFill must be initialised with the keyword 'new'\" );\n\t}\n\n\tif ( ! $.fn.dataTableExt.fnVersionCheck('1.7.0') ) {\n\t\tthrow( \"Warning: AutoFill requires DataTables 1.7 or greater\");\n\t}\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public class variables\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\tthis.c = {};\n\n\t/**\n\t * @namespace Settings object which contains customisable information for AutoFill instance\n\t */\n\tthis.s = {\n\t\t/**\n\t\t * @namespace Cached information about the little dragging icon (the filler)\n\t\t */\n\t\t\"filler\": {\n\t\t\t\"height\": 0,\n\t\t\t\"width\": 0\n\t\t},\n\n\t\t/**\n\t\t * @namespace Cached information about the border display\n\t\t */\n\t\t\"border\": {\n\t\t\t\"width\": 2\n\t\t},\n\n\t\t/**\n\t\t * @namespace Store for live information for the current drag\n\t\t */\n\t\t\"drag\": {\n\t\t\t\"startX\": -1,\n\t\t\t\"startY\": -1,\n\t\t\t\"startTd\": null,\n\t\t\t\"endTd\": null,\n\t\t\t\"dragging\": false\n\t\t},\n\n\t\t/**\n\t\t * @namespace Data cache for information that we need for scrolling the screen when we near\n\t\t *   the edges\n\t\t */\n\t\t\"screen\": {\n\t\t\t\"interval\": null,\n\t\t\t\"y\": 0,\n\t\t\t\"height\": 0,\n\t\t\t\"scrollTop\": 0\n\t\t},\n\n\t\t/**\n\t\t * @namespace Data cache for the position of the DataTables scrolling element (when scrolling\n\t\t *   is enabled)\n\t\t */\n\t\t\"scroller\": {\n\t\t\t\"top\": 0,\n\t\t\t\"bottom\": 0\n\t\t},\n\n\t\t/**\n\t\t * @namespace Information stored for each column. An array of objects\n\t\t */\n\t\t\"columns\": []\n\t};\n\n\n\t/**\n\t * @namespace Common and useful DOM elements for the class instance\n\t */\n\tthis.dom = {\n\t\t\"table\": null,\n\t\t\"filler\": null,\n\t\t\"borderTop\": null,\n\t\t\"borderRight\": null,\n\t\t\"borderBottom\": null,\n\t\t\"borderLeft\": null,\n\t\t\"currentTarget\": null\n\t};\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public class methods\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Retreieve the settings object from an instance\n\t *  @method fnSettings\n\t *  @returns {object} AutoFill settings object\n\t */\n\tthis.fnSettings = function () {\n\t\treturn this.s;\n\t};\n\n\n\t/* Constructor logic */\n\tthis._fnInit( oDT, oConfig );\n\treturn this;\n};\n\n\n\nAutoFill.prototype = {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods (they are of course public in JS, but recommended as private)\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Initialisation\n\t *  @method _fnInit\n\t *  @param {object} dt DataTables settings object\n\t *  @param {object} config Configuration object for AutoFill\n\t *  @returns void\n\t */\n\t\"_fnInit\": function ( dt, config )\n\t{\n\t\tvar\n\t\t\tthat = this,\n\t\t\ti, iLen;\n\n\t\t// Use DataTables API to get the settings allowing selectors, instances\n\t\t// etc to be used, or for backwards compatibility get from the old\n\t\t// fnSettings method\n\t\tthis.s.dt = DataTable.Api ?\n\t\t\tnew DataTable.Api( dt ).settings()[0] :\n\t\t\tdt.fnSettings();\n\t\tthis.s.init = config || {};\n\t\tthis.dom.table = this.s.dt.nTable;\n\n\t\t$.extend( true, this.c, AutoFill.defaults, config );\n\n\t\t/* Add and configure the columns */\n\t\tthis._initColumns();\n\n\t\t/* Auto Fill click and drag icon */\n\t\tvar filler = $('<div/>', {\n\t\t\t\t'class': 'AutoFill_filler'\n\t\t\t} )\n\t\t\t.appendTo( 'body' );\n\t\tthis.dom.filler = filler[0];\n\n\t\t// Get the height / width of the click element\n\t\tthis.s.filler.height = filler.height();\n\t\tthis.s.filler.width = filler.width();\n\t\tfiller[0].style.display = \"none\";\n\n\t\t/* Border display - one div for each side. We can't just use a single\n\t\t * one with a border, as we want the events to effectively pass through\n\t\t * the transparent bit of the box\n\t\t */\n\t\tvar border;\n\t\tvar appender = document.body;\n\t\tif ( that.s.dt.oScroll.sY !== \"\" ) {\n\t\t\tthat.s.dt.nTable.parentNode.style.position = \"relative\";\n\t\t\tappender = that.s.dt.nTable.parentNode;\n\t\t}\n\n\t\tborder = $('<div/>', {\n\t\t\t\"class\": \"AutoFill_border\"\n\t\t} );\n\t\tthis.dom.borderTop    = border.clone().appendTo( appender )[0];\n\t\tthis.dom.borderRight  = border.clone().appendTo( appender )[0];\n\t\tthis.dom.borderBottom = border.clone().appendTo( appender )[0];\n\t\tthis.dom.borderLeft   = border.clone().appendTo( appender )[0];\n\n\t\t/* Events */\n\t\tfiller.on( 'mousedown.DTAF', function (e) {\n\t\t\tthis.onselectstart = function() { return false; };\n\t\t\tthat._fnFillerDragStart.call( that, e );\n\t\t\treturn false;\n\t\t} );\n\n\t\t$('tbody', this.dom.table).on(\n\t\t\t'mouseover.DTAF mouseout.DTAF',\n\t\t\t'>tr>td, >tr>th',\n\t\t\tfunction (e) {\n\t\t\t\tthat._fnFillerDisplay.call( that, e );\n\t\t\t}\n\t\t);\n\n\t\t$(this.dom.table).on( 'destroy.dt.DTAF', function () {\n\t\t\tfiller.off( 'mousedown.DTAF' ).remove();\n\t\t\t$('tbody', this.dom.table).off( 'mouseover.DTAF mouseout.DTAF' );\n\t\t} );\n\t},\n\n\n\t_initColumns: function ( )\n\t{\n\t\tvar that = this;\n\t\tvar i, ien;\n\t\tvar dt = this.s.dt;\n\t\tvar config = this.s.init;\n\n\t\tfor ( i=0, ien=dt.aoColumns.length ; i<ien ; i++ ) {\n\t\t\tthis.s.columns[i] = $.extend( true, {}, AutoFill.defaults.column );\n\t\t}\n\n\t\tdt.oApi._fnApplyColumnDefs(\n\t\t\tdt,\n\t\t\tconfig.aoColumnDefs || config.columnDefs,\n\t\t\tconfig.aoColumns || config.columns,\n\t\t\tfunction (colIdx, def) {\n\t\t\t\tthat._fnColumnOptions( colIdx, def );\n\t\t\t}\n\t\t);\n\n\t\t// For columns which don't have read, write, step functions defined,\n\t\t// use the default ones\n\t\tfor ( i=0, ien=dt.aoColumns.length ; i<ien ; i++ ) {\n\t\t\tvar column = this.s.columns[i];\n\n\t\t\tif ( ! column.read ) {\n\t\t\t\tcolumn.read = this._fnReadCell;\n\t\t\t}\n\t\t\tif ( ! column.write ) {\n\t\t\t\tcolumn.read = this._fnWriteCell;\n\t\t\t}\n\t\t\tif ( ! column.step ) {\n\t\t\t\tcolumn.read = this._fnStep;\n\t\t\t}\n\t\t}\n\t},\n\n\n\t\"_fnColumnOptions\": function ( i, opts )\n\t{\n\t\tvar column = this.s.columns[ i ];\n\t\tvar set = function ( outProp, inProp ) {\n\t\t\tif ( opts[ inProp[0] ] !== undefined ) {\n\t\t\t\tcolumn[ outProp ] = opts[ inProp[0] ];\n\t\t\t}\n\t\t\tif ( opts[ inProp[1] ] !== undefined ) {\n\t\t\t\tcolumn[ outProp ] = opts[ inProp[1] ];\n\t\t\t}\n\t\t};\n\n\t\t// Compatibility with the old Hungarian style of notation\n\t\tset( 'enable',    ['bEnable',     'enable'] );\n\t\tset( 'read',      ['fnRead',      'read'] );\n\t\tset( 'write',     ['fnWrite',     'write'] );\n\t\tset( 'step',      ['fnStep',      'step'] );\n\t\tset( 'increment', ['bIncrement',  'increment'] );\n\t},\n\n\n\t/**\n\t * Find out the coordinates of a given TD cell in a table\n\t *  @method  _fnTargetCoords\n\t *  @param   {Node} nTd\n\t *  @returns {Object} x and y properties, for the position of the cell in the tables DOM\n\t */\n\t\"_fnTargetCoords\": function ( nTd )\n\t{\n\t\tvar nTr = $(nTd).parents('tr')[0];\n\t\tvar position = this.s.dt.oInstance.fnGetPosition( nTd );\n\n\t\treturn {\n\t\t\t\"x\":      $('td', nTr).index(nTd),\n\t\t\t\"y\":      $('tr', nTr.parentNode).index(nTr),\n\t\t\t\"row\":    position[0],\n\t\t\t\"column\": position[2]\n\t\t};\n\t},\n\n\n\t/**\n\t * Display the border around one or more cells (from start to end)\n\t *  @method  _fnUpdateBorder\n\t *  @param   {Node} nStart Starting cell\n\t *  @param   {Node} nEnd Ending cell\n\t *  @returns void\n\t */\n\t\"_fnUpdateBorder\": function ( nStart, nEnd )\n\t{\n\t\tvar\n\t\t\tborder = this.s.border.width,\n\t\t\toffsetStart = $(nStart).offset(),\n\t\t\toffsetEnd = $(nEnd).offset(),\n\t\t\tx1 = offsetStart.left - border,\n\t\t\tx2 = offsetEnd.left + $(nEnd).outerWidth(),\n\t\t\ty1 = offsetStart.top - border,\n\t\t\ty2 = offsetEnd.top + $(nEnd).outerHeight(),\n\t\t\twidth = offsetEnd.left + $(nEnd).outerWidth() - offsetStart.left + (2*border),\n\t\t\theight = offsetEnd.top + $(nEnd).outerHeight() - offsetStart.top + (2*border),\n\t\t\toStyle;\n\n\t\t// Recalculate start and end (when dragging \"backwards\")  \n\t\tif( offsetStart.left > offsetEnd.left) {\n\t\t\tx1 = offsetEnd.left - border;\n\t\t\tx2 = offsetStart.left + $(nStart).outerWidth();\n\t\t\twidth = offsetStart.left + $(nStart).outerWidth() - offsetEnd.left + (2*border);\n\t\t}\n\n\t\tif ( this.s.dt.oScroll.sY !== \"\" )\n\t\t{\n\t\t\t/* The border elements are inside the DT scroller - so position relative to that */\n\t\t\tvar\n\t\t\t\toffsetScroll = $(this.s.dt.nTable.parentNode).offset(),\n\t\t\t\tscrollTop = $(this.s.dt.nTable.parentNode).scrollTop(),\n\t\t\t\tscrollLeft = $(this.s.dt.nTable.parentNode).scrollLeft();\n\n\t\t\tx1 -= offsetScroll.left - scrollLeft;\n\t\t\tx2 -= offsetScroll.left - scrollLeft;\n\t\t\ty1 -= offsetScroll.top - scrollTop;\n\t\t\ty2 -= offsetScroll.top - scrollTop;\n\t\t}\n\n\t\t/* Top */\n\t\toStyle = this.dom.borderTop.style;\n\t\toStyle.top = y1+\"px\";\n\t\toStyle.left = x1+\"px\";\n\t\toStyle.height = this.s.border.width+\"px\";\n\t\toStyle.width = width+\"px\";\n\n\t\t/* Bottom */\n\t\toStyle = this.dom.borderBottom.style;\n\t\toStyle.top = y2+\"px\";\n\t\toStyle.left = x1+\"px\";\n\t\toStyle.height = this.s.border.width+\"px\";\n\t\toStyle.width = width+\"px\";\n\n\t\t/* Left */\n\t\toStyle = this.dom.borderLeft.style;\n\t\toStyle.top = y1+\"px\";\n\t\toStyle.left = x1+\"px\";\n\t\toStyle.height = height+\"px\";\n\t\toStyle.width = this.s.border.width+\"px\";\n\n\t\t/* Right */\n\t\toStyle = this.dom.borderRight.style;\n\t\toStyle.top = y1+\"px\";\n\t\toStyle.left = x2+\"px\";\n\t\toStyle.height = height+\"px\";\n\t\toStyle.width = this.s.border.width+\"px\";\n\t},\n\n\n\t/**\n\t * Mouse down event handler for starting a drag\n\t *  @method  _fnFillerDragStart\n\t *  @param   {Object} e Event object\n\t *  @returns void\n\t */\n\t\"_fnFillerDragStart\": function (e)\n\t{\n\t\tvar that = this;\n\t\tvar startingTd = this.dom.currentTarget;\n\n\t\tthis.s.drag.dragging = true;\n\n\t\tthat.dom.borderTop.style.display = \"block\";\n\t\tthat.dom.borderRight.style.display = \"block\";\n\t\tthat.dom.borderBottom.style.display = \"block\";\n\t\tthat.dom.borderLeft.style.display = \"block\";\n\n\t\tvar coords = this._fnTargetCoords( startingTd );\n\t\tthis.s.drag.startX = coords.x;\n\t\tthis.s.drag.startY = coords.y;\n\n\t\tthis.s.drag.startTd = startingTd;\n\t\tthis.s.drag.endTd = startingTd;\n\n\t\tthis._fnUpdateBorder( startingTd, startingTd );\n\n\t\t$(document).bind('mousemove.AutoFill', function (e) {\n\t\t\tthat._fnFillerDragMove.call( that, e );\n\t\t} );\n\n\t\t$(document).bind('mouseup.AutoFill', function (e) {\n\t\t\tthat._fnFillerFinish.call( that, e );\n\t\t} );\n\n\t\t/* Scrolling information cache */\n\t\tthis.s.screen.y = e.pageY;\n\t\tthis.s.screen.height = $(window).height();\n\t\tthis.s.screen.scrollTop = $(document).scrollTop();\n\n\t\tif ( this.s.dt.oScroll.sY !== \"\" )\n\t\t{\n\t\t\tthis.s.scroller.top = $(this.s.dt.nTable.parentNode).offset().top;\n\t\t\tthis.s.scroller.bottom = this.s.scroller.top + $(this.s.dt.nTable.parentNode).height();\n\t\t}\n\n\t\t/* Scrolling handler - we set an interval (which is cancelled on mouse up) which will fire\n\t\t * regularly and see if we need to do any scrolling\n\t\t */\n\t\tthis.s.screen.interval = setInterval( function () {\n\t\t\tvar iScrollTop = $(document).scrollTop();\n\t\t\tvar iScrollDelta = iScrollTop - that.s.screen.scrollTop;\n\t\t\tthat.s.screen.y += iScrollDelta;\n\n\t\t\tif ( that.s.screen.height - that.s.screen.y + iScrollTop < 50 )\n\t\t\t{\n\t\t\t\t$('html, body').animate( {\n\t\t\t\t\t\"scrollTop\": iScrollTop + 50\n\t\t\t\t}, 240, 'linear' );\n\t\t\t}\n\t\t\telse if ( that.s.screen.y - iScrollTop < 50 )\n\t\t\t{\n\t\t\t\t$('html, body').animate( {\n\t\t\t\t\t\"scrollTop\": iScrollTop - 50\n\t\t\t\t}, 240, 'linear' );\n\t\t\t}\n\n\t\t\tif ( that.s.dt.oScroll.sY !== \"\" )\n\t\t\t{\n\t\t\t\tif ( that.s.screen.y > that.s.scroller.bottom - 50 )\n\t\t\t\t{\n\t\t\t\t\t$(that.s.dt.nTable.parentNode).animate( {\n\t\t\t\t\t\t\"scrollTop\": $(that.s.dt.nTable.parentNode).scrollTop() + 50\n\t\t\t\t\t}, 240, 'linear' );\n\t\t\t\t}\n\t\t\t\telse if ( that.s.screen.y < that.s.scroller.top + 50 )\n\t\t\t\t{\n\t\t\t\t\t$(that.s.dt.nTable.parentNode).animate( {\n\t\t\t\t\t\t\"scrollTop\": $(that.s.dt.nTable.parentNode).scrollTop() - 50\n\t\t\t\t\t}, 240, 'linear' );\n\t\t\t\t}\n\t\t\t}\n\t\t}, 250 );\n\t},\n\n\n\t/**\n\t * Mouse move event handler for during a move. See if we want to update the display based on the\n\t * new cursor position\n\t *  @method  _fnFillerDragMove\n\t *  @param   {Object} e Event object\n\t *  @returns void\n\t */\n\t\"_fnFillerDragMove\": function (e)\n\t{\n\t\tif ( e.target && e.target.nodeName.toUpperCase() == \"TD\" &&\n\t\t\t e.target != this.s.drag.endTd )\n\t\t{\n\t\t\tvar coords = this._fnTargetCoords( e.target );\n\n\t\t\tif ( this.c.mode == \"y\" && coords.x != this.s.drag.startX )\n\t\t\t{\n\t\t\t\te.target = $('tbody>tr:eq('+coords.y+')>td:eq('+this.s.drag.startX+')', this.dom.table)[0];\n\t\t\t}\n\t\t\tif ( this.c.mode == \"x\" && coords.y != this.s.drag.startY )\n\t\t\t{\n\t\t\t\te.target = $('tbody>tr:eq('+this.s.drag.startY+')>td:eq('+coords.x+')', this.dom.table)[0];\n\t\t\t}\n\n\t\t\tif ( this.c.mode == \"either\")\n\t\t\t{\n\t\t\t\tif(coords.x != this.s.drag.startX )\n\t\t\t\t{\n\t\t\t\t\te.target = $('tbody>tr:eq('+this.s.drag.startY+')>td:eq('+coords.x+')', this.dom.table)[0];\n\t\t\t\t}\n\t\t\t\telse if ( coords.y != this.s.drag.startY ) {\n\t\t\t\t\te.target = $('tbody>tr:eq('+coords.y+')>td:eq('+this.s.drag.startX+')', this.dom.table)[0];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// update coords\n\t\t\tif ( this.c.mode !== \"both\" ) {\n\t\t\t\tcoords = this._fnTargetCoords( e.target );\n\t\t\t}\n\n\t\t\tvar drag = this.s.drag;\n\t\t\tdrag.endTd = e.target;\n\n\t\t\tif ( coords.y >= this.s.drag.startY ) {\n\t\t\t\tthis._fnUpdateBorder( drag.startTd, drag.endTd );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._fnUpdateBorder( drag.endTd, drag.startTd );\n\t\t\t}\n\t\t\tthis._fnFillerPosition( e.target );\n\t\t}\n\n\t\t/* Update the screen information so we can perform scrolling */\n\t\tthis.s.screen.y = e.pageY;\n\t\tthis.s.screen.scrollTop = $(document).scrollTop();\n\n\t\tif ( this.s.dt.oScroll.sY !== \"\" )\n\t\t{\n\t\t\tthis.s.scroller.scrollTop = $(this.s.dt.nTable.parentNode).scrollTop();\n\t\t\tthis.s.scroller.top = $(this.s.dt.nTable.parentNode).offset().top;\n\t\t\tthis.s.scroller.bottom = this.s.scroller.top + $(this.s.dt.nTable.parentNode).height();\n\t\t}\n\t},\n\n\n\t/**\n\t * Mouse release handler - end the drag and take action to update the cells with the needed values\n\t *  @method  _fnFillerFinish\n\t *  @param   {Object} e Event object\n\t *  @returns void\n\t */\n\t\"_fnFillerFinish\": function (e)\n\t{\n\t\tvar that = this, i, iLen, j;\n\n\t\t$(document).unbind('mousemove.AutoFill mouseup.AutoFill');\n\n\t\tthis.dom.borderTop.style.display = \"none\";\n\t\tthis.dom.borderRight.style.display = \"none\";\n\t\tthis.dom.borderBottom.style.display = \"none\";\n\t\tthis.dom.borderLeft.style.display = \"none\";\n\n\t\tthis.s.drag.dragging = false;\n\n\t\tclearInterval( this.s.screen.interval );\n\n\t\tvar cells = [];\n\t\tvar table = this.dom.table;\n\t\tvar coordsStart = this._fnTargetCoords( this.s.drag.startTd );\n\t\tvar coordsEnd = this._fnTargetCoords( this.s.drag.endTd );\n\t\tvar columnIndex = function ( visIdx ) {\n\t\t\treturn that.s.dt.oApi._fnVisibleToColumnIndex( that.s.dt, visIdx );\n\t\t};\n\n\t\t// xxx - urgh - there must be a way of reducing this...\n\t\tif ( coordsStart.y <= coordsEnd.y ) {\n\t\t\tfor ( i=coordsStart.y ; i<=coordsEnd.y ; i++ ) {\n\t\t\t\tif ( coordsStart.x <= coordsEnd.x ) {\n\t\t\t\t\tfor ( j=coordsStart.x ; j<=coordsEnd.x ; j++ ) {\n\t\t\t\t\t\tcells.push( {\n\t\t\t\t\t\t\tnode:   $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0],\n\t\t\t\t\t\t\tx:      j - coordsStart.x,\n\t\t\t\t\t\t\ty:      i - coordsStart.y,\n\t\t\t\t\t\t\tcolIdx: columnIndex( j )\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor ( j=coordsStart.x ; j>=coordsEnd.x ; j-- ) {\n\t\t\t\t\t\tcells.push( {\n\t\t\t\t\t\t\tnode:   $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0],\n\t\t\t\t\t\t\tx:      j - coordsStart.x,\n\t\t\t\t\t\t\ty:      i - coordsStart.y,\n\t\t\t\t\t\t\tcolIdx: columnIndex( j )\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( i=coordsStart.y ; i>=coordsEnd.y ; i-- ) {\n\t\t\t\tif ( coordsStart.x <= coordsEnd.x ) {\n\t\t\t\t\tfor ( j=coordsStart.x ; j<=coordsEnd.x ; j++ ) {\n\t\t\t\t\t\tcells.push( {\n\t\t\t\t\t\t\tnode:   $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0],\n\t\t\t\t\t\t\tx:      j - coordsStart.x,\n\t\t\t\t\t\t\ty:      i - coordsStart.y,\n\t\t\t\t\t\t\tcolIdx: columnIndex( j )\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor ( j=coordsStart.x ; j>=coordsEnd.x ; j-- ) {\n\t\t\t\t\t\tcells.push( {\n\t\t\t\t\t\t\tnode:   $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0],\n\t\t\t\t\t\t\tx:      coordsStart.x - j,\n\t\t\t\t\t\t\ty:      coordsStart.y - i,\n\t\t\t\t\t\t\tcolIdx: columnIndex( j )\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// An auto-fill requires 2 or more cells\n\t\tif ( cells.length <= 1 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar edited = [];\n\t\tvar previous;\n\n\t\tfor ( i=0, iLen=cells.length ; i<iLen ; i++ ) {\n\t\t\tvar cell      = cells[i];\n\t\t\tvar column    = this.s.columns[ cell.colIdx ];\n\t\t\tvar read      = column.read.call( column, cell.node );\n\t\t\tvar stepValue = column.step.call( column, cell.node, read, previous, i, cell.x, cell.y );\n\n\t\t\tcolumn.write.call( column, cell.node, stepValue );\n\n\t\t\tprevious = stepValue;\n\t\t\tedited.push( {\n\t\t\t\tcell:     cell,\n\t\t\t\tcolIdx:   cell.colIdx,\n\t\t\t\tnewValue: stepValue,\n\t\t\t\toldValue: read\n\t\t\t} );\n\t\t}\n\n\t\tif ( this.c.complete !== null ) {\n\t\t\tthis.c.complete.call( this, edited );\n\t\t}\n\n\t\t// In 1.10 we can do a static draw\n\t\tif ( DataTable.Api ) {\n\t\t\tnew DataTable.Api( this.s.dt ).draw( false );\n\t\t}\n\t\telse {\n\t\t\tthis.s.dt.oInstance.fnDraw();\n\t\t}\n\t},\n\n\n\t/**\n\t * Display the drag handle on mouse over cell\n\t *  @method  _fnFillerDisplay\n\t *  @param   {Object} e Event object\n\t *  @returns void\n\t */\n\t\"_fnFillerDisplay\": function (e)\n\t{\n\t\tvar filler = this.dom.filler;\n\n\t\t/* Don't display automatically when dragging */\n\t\tif ( this.s.drag.dragging)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t/* Check that we are allowed to AutoFill this column or not */\n\t\tvar nTd = (e.target.nodeName.toLowerCase() == 'td') ? e.target : $(e.target).parents('td')[0];\n\t\tvar iX = this._fnTargetCoords(nTd).column;\n\t\tif ( !this.s.columns[iX].enable )\n\t\t{\n\t\t\tfiller.style.display = \"none\";\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.type == 'mouseover')\n\t\t{\n\t\t\tthis.dom.currentTarget = nTd;\n\t\t\tthis._fnFillerPosition( nTd );\n\n\t\t\tfiller.style.display = \"block\";\n\t\t}\n\t\telse if ( !e.relatedTarget || !e.relatedTarget.className.match(/AutoFill/) )\n\t\t{\n\t\t\tfiller.style.display = \"none\";\n\t\t}\n\t},\n\n\n\t/**\n\t * Position the filler icon over a cell\n\t *  @method  _fnFillerPosition\n\t *  @param   {Node} nTd Cell to position filler icon over\n\t *  @returns void\n\t */\n\t\"_fnFillerPosition\": function ( nTd )\n\t{\n\t\tvar offset = $(nTd).offset();\n\t\tvar filler = this.dom.filler;\n\t\tfiller.style.top = (offset.top - (this.s.filler.height / 2)-1 + $(nTd).outerHeight())+\"px\";\n\t\tfiller.style.left = (offset.left - (this.s.filler.width / 2)-1 + $(nTd).outerWidth())+\"px\";\n\t}\n};\n\n\n// Alias for access\nDataTable.AutoFill = AutoFill;\nDataTable.AutoFill = AutoFill;\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Constants\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * AutoFill version\n *  @constant  version\n *  @type      String\n *  @default   See code\n */\nAutoFill.version = \"1.2.1\";\n\n\n/**\n * AutoFill defaults\n *  @namespace\n */\nAutoFill.defaults = {\n\t/**\n\t * Mode for dragging (restrict to y-axis only, x-axis only, either one or none):\n\t *\n\t *  * `y`      - y-axis only (default)\n\t *  * `x`      - x-axis only\n\t *  * `either` - either one, but not both axis at the same time\n\t *  * `both`   - multiple cells allowed\n\t *\n\t * @type {string}\n\t * @default `y`\n\t */\n\tmode: 'y',\n\n\tcomplete: null,\n\n\t/**\n\t * Column definition defaults\n\t *  @namespace\n\t */\n\tcolumn: {\n\t\t/**\n\t\t * If AutoFill should be enabled on this column\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tenable: true,\n\n\t\t/**\n\t\t * Allow automatic increment / decrement on this column if a number\n\t\t * is found.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tincrement: true,\n\n\t\t/**\n\t\t * Cell read function\n\t\t *\n\t\t * Default function will simply read the value from the HTML of the\n\t\t * cell.\n\t\t *\n\t\t * @type   {function}\n\t\t * @param  {node} cell `th` / `td` element to read the value from\n\t\t * @return {string}    Data that has been read\n\t\t */\n\t\tread: function ( cell ) {\n\t\t\treturn $(cell).html();\n\t\t},\n\n\t\t/**\n\t\t * Cell write function\n\t\t *\n\t\t * Default function will simply write to the HTML and tell the DataTable\n\t\t * to update.\n\t\t *\n\t\t * @type   {function}\n\t\t * @param  {node} cell `th` / `td` element to write the value to\n\t\t * @return {string}    Data two write\n\t\t */\n\t\twrite: function ( cell, val ) {\n\t\t\tvar table = $(cell).parents('table');\n\t\t\tif ( DataTable.Api ) {\n\t\t\t\t// 1.10\n\t\t\t\ttable.DataTable().cell( cell ).data( val );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// 1.9\n\t\t\t\tvar dt = table.dataTable();\n\t\t\t\tvar pos = dt.fnGetPosition( cell );\n\t\t\t\tdt.fnUpdate( val, pos[0], pos[2], false );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Step function. This provides the ability to customise how the values\n\t\t * are incremented.\n\t\t *\n\t\t * @param  {node} cell `th` / `td` element that is being operated upon\n\t\t * @param  {string} read Cell value from `read` function\n\t\t * @param  {string} last Value of the previous cell\n\t\t * @param  {integer} i Loop counter\n\t\t * @param  {integer} x Cell x-position in the current auto-fill. The\n\t\t *   starting cell is coordinate 0 regardless of its physical position\n\t\t *   in the DataTable.\n\t\t * @param  {integer} y Cell y-position in the current auto-fill. The\n\t\t *   starting cell is coordinate 0 regardless of its physical position\n\t\t *   in the DataTable.\n\t\t * @return {string} Value to write\n\t\t */\n\t\tstep: function ( cell, read, last, i, x, y ) {\n\t\t\t// Increment a number if it is found\n\t\t\tvar re = /(\\-?\\d+)/;\n\t\t\tvar match = this.increment && last ? last.match(re) : null;\n\t\t\tif ( match ) {\n\t\t\t\treturn last.replace( re, parseInt(match[1],10) + (x<0 || y<0 ? -1 : 1) );\n\t\t\t}\n\t\t\treturn last === undefined ?\n\t\t\t\tread :\n\t\t\t\tlast;\n\t\t}\n\t}\n};\n\nreturn AutoFill;\n};\n\n\n// Define as an AMD module if possible\nif ( typeof define === 'function' && define.amd ) {\n\tdefine( ['jquery', 'datatables'], factory );\n}\nelse if ( typeof exports === 'object' ) {\n    // Node/CommonJS\n    factory( require('jquery'), require('datatables') );\n}\nelse if ( jQuery && !jQuery.fn.dataTable.AutoFill ) {\n\t// Otherwise simply initialise as normal, stopping multiple evaluation\n\tfactory( jQuery, jQuery.fn.dataTable );\n}\n\n\n}(window, document));\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/License.txt",
    "content": "Copyright (c) 2010-2015 SpryMedia Limited\nhttp://datatables.net\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/Readme.md",
    "content": "# ColReorder\n\nColReorder adds the ability for the end user to click and drag column headers to reorder a table as they see fit, to DataTables. Key features include:\n\n* Very easy integration with DataTables\n* Tight integration with all other DataTables plug-ins\n* The ability to exclude the first (or more) column from being movable\n* Predefine a column order\n* Save staving integration with DataTables\n\n\n# Installation\n\nTo use ColReorder, first download DataTables ( http://datatables.net/download ) and place the unzipped ColReorder package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser.\n\n\n# Basic usage\n\nColReorder is initialised using the `$.fn.dataTable.ColReorder` constructor. For example:\n\n```js\n$(document).ready( function () {\n    $('#example').DataTable();\n\n    new $.fn.dataTable.ColReorder( table );\n} );\n```\n\n\n# Documentation / support\n\n* Documentation: http://datatables.net/extensions/colreorder/\n* DataTables support forums: http://datatables.net/forums\n\n\n# GitHub\n\nIf you fancy getting involved with the development of ColReorder and help make it better, please refer to its GitHub repo: https://github.com/DataTables/ColReorder\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/css/dataTables.colReorder.css",
    "content": "/*\n * Namespace DTCR - \"DataTables ColReorder\" plug-in\n */\n\ntable.DTCR_clonedTable {\n\tbackground-color: rgba(255, 255, 255, 0.7);\n\tz-index: 202;\n}\n\ndiv.DTCR_pointer {\n\twidth: 1px;\n\tbackground-color: #0259C4;\n\tz-index: 201;\n}"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/alt_insert.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColReorder example - Alternative insert styling</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colReorder.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\ndiv.DTCR_pointer {\n\tmargin-top: -15px;\n\tmargin-left: -9px;\n\twidth: 18px;\n\tbackground: url('../images/insert.png') no-repeat top left;\n}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colReorder.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'Rlfrtip'\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>Alternative insert styling</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Using CSS it is easy to modify the insert bar to suit your web-site. This example shows how an arrow can be used to show the insert point rather than the\n\t\t\t\tstraight bar used in the other examples by simply adding an extra CSS rule to include the image.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'Rlfrtip'\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colReorder.js\">../js/dataTables.colReorder.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">div.DTCR_pointer {\n\tmargin-top: -15px;\n\tmargin-left: -9px;\n\twidth: 18px;\n\tbackground: url('../images/insert.png') no-repeat top left;\n}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colReorder.css\">../css/dataTables.colReorder.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/col_filter.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColReorder example - Individual column filtering</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colReorder.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colReorder.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n    // Setup - add a text input to each footer cell\n    $('#example tfoot th').each( function () {\n        var title = $('#example thead th').eq( $(this).index() ).text();\n        $(this).html( '<input type=\"text\" placeholder=\"Search '+title+'\" />' );\n    } );\n \n    // DataTable\n    var table = $('#example').DataTable( {\n\t\tdom: 'Rlfrtip'\n\t} );\n     \n    // Apply the filter\n    $(\"#example tfoot input\").on( 'keyup change', function () {\n        table\n            .column( $(this).parent().index()+':visible' )\n            .search( this.value )\n            .draw();\n    } );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>Individual column filtering</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example of how to use ColReorder shows how it can with with DataTables' ability to do individual column filtering. The basic example is exactly the same as\n\t\t\t\tthe DataTables column filtering example, but with ColReorder also added to the table (through the <code>R</code> option for <a href=\n\t\t\t\t\"//datatables.net/reference/option/dom\"><code class=\"option\" title=\"DataTables initialisation option\">dom<span>DT</span></code></a>).</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n    // Setup - add a text input to each footer cell\n    $('#example tfoot th').each( function () {\n        var title = $('#example thead th').eq( $(this).index() ).text();\n        $(this).html( '&lt;input type=&quot;text&quot; placeholder=&quot;Search '+title+'&quot; /&gt;' );\n    } );\n \n    // DataTable\n    var table = $('#example').DataTable( {\n\t\tdom: 'Rlfrtip'\n\t} );\n     \n    // Apply the filter\n    $(&quot;#example tfoot input&quot;).on( 'keyup change', function () {\n        table\n            .column( $(this).parent().index()+':visible' )\n            .search( this.value )\n            .draw();\n    } );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colReorder.js\">../js/dataTables.colReorder.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colReorder.css\">../css/dataTables.colReorder.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/colvis.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColReorder example - ColVis integration</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colReorder.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../ColVis/css/dataTables.colVis.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colReorder.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../ColVis/js/dataTables.colVis.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n    var table = $('#example').DataTable( {\n        dom: 'RC<\"clear\">lfrtip',\n        columnDefs: [\n            { visible: false, targets: 1 }\n        ]\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>ColVis integration</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>ColReorder interfaces with the <a href=\"//datatables.net/extensions/colvis\">ColVis extension</a> for DataTables by updating the order of the list of columns\n\t\t\t\twhenever a reorder is done. This is shown in the example below, where one column has been initially hidden to add extra emphasis to ColVis.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n    var table = $('#example').DataTable( {\n        dom: 'RC&lt;&quot;clear&quot;&gt;lfrtip',\n        columnDefs: [\n            { visible: false, targets: 1 }\n        ]\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colReorder.js\">../js/dataTables.colReorder.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../ColVis/js/dataTables.colVis.js\">../../ColVis/js/dataTables.colVis.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colReorder.css\">../css/dataTables.colReorder.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../ColVis/css/dataTables.colVis.css\">../../ColVis/css/dataTables.colVis.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/fixedcolumns.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColReorder example - FixedColumns integration</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colReorder.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../FixedColumns/css/dataTables.fixedColumns.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colReorder.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../FixedColumns/js/dataTables.fixedColumns.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\twindow.table = $('#example').DataTable( {\n\t\tdom: 'Rlfrtip',\n\t\tscrollX: true,\n\t\tscrollCollapse: true,\n\t\tcolumnDefs: [\n\t\t\t{ orderable: false, targets: 0 },\n\t\t\t{ orderable: false, targets: -1 }\n\t\t],\n\t\tordering: [[ 1, 'asc' ]],\n\t\tcolReorder: {\n\t\t\tfixedColumnsLeft: 1,\n\t\t\tfixedColumnsRight: 1\n\t\t}\n\t} );\n\n\twindow.fc = new $.fn.dataTable.FixedColumns( table, {\n\t\tleftColumns: 1,\n\t\trightColumns: 1\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>FixedColumns integration</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>While ColReorder works with the built-in scrolling options in DataTables (<a href=\"//datatables.net/reference/option/scrollY\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">scrollY<span>DT</span></code></a> and <a href=\"//datatables.net/reference/option/scrollX\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">scrollX<span>DT</span></code></a>) and also the <a href=\"//datatables.net/extensions/fixedcolumns\">FixedColumns\n\t\t\t\textension</a>.</p>\n\n\t\t\t\t<p>ColReorder provides the <code>fixedColumnsLeft</code> and <code>fixedColumnsRight</code> options which allows you disallow reordering of the fixed columns\n\t\t\t\t(which is required).</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\twindow.table = $('#example').DataTable( {\n\t\tdom: 'Rlfrtip',\n\t\tscrollX: true,\n\t\tscrollCollapse: true,\n\t\tcolumnDefs: [\n\t\t\t{ orderable: false, targets: 0 },\n\t\t\t{ orderable: false, targets: -1 }\n\t\t],\n\t\tordering: [[ 1, 'asc' ]],\n\t\tcolReorder: {\n\t\t\tfixedColumnsLeft: 1,\n\t\t\tfixedColumnsRight: 1\n\t\t}\n\t} );\n\n\twindow.fc = new $.fn.dataTable.FixedColumns( table, {\n\t\tleftColumns: 1,\n\t\trightColumns: 1\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colReorder.js\">../js/dataTables.colReorder.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../FixedColumns/js/dataTables.fixedColumns.js\">../../FixedColumns/js/dataTables.fixedColumns.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colReorder.css\">../css/dataTables.colReorder.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../FixedColumns/css/dataTables.fixedColumns.css\">../../FixedColumns/css/dataTables.fixedColumns.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/fixedheader.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColReorder example - FixedHeader integration</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colReorder.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../FixedHeader/css/dataTables.fixedHeader.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colReorder.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../FixedHeader/js/dataTables.fixedHeader.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\tvar table = $('#example').dataTable( {\n\t\tdom: 'Rlfrtip'\n\t} );\n\n\tnew $.fn.dataTable.fixedHeader( table );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>FixedHeader integration</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>FixedHeader is a particularly useful plug-in for DataTables, allowing a table header to float at the top of a scrolling window. ColReorder works well with\n\t\t\t\tFixedHeader, allowing you to reorder columns even using the floating header, as shown in the example below.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').dataTable( {\n\t\tdom: 'Rlfrtip'\n\t} );\n\n\tnew $.fn.dataTable.fixedHeader( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colReorder.js\">../js/dataTables.colReorder.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../FixedHeader/js/dataTables.fixedHeader.js\">../../FixedHeader/js/dataTables.fixedHeader.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colReorder.css\">../css/dataTables.colReorder.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../FixedHeader/css/dataTables.fixedHeader.css\">../../FixedHeader/css/dataTables.fixedHeader.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\n\t<title>ColReorder examples - ColReorder examples</title>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>ColReorder examples</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>ColReorder adds the ability for the end user to click and drag column headers to reorder a table as they see fit, to DataTables. Key features include:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li>Very easy integration with DataTables</li>\n\t\t\t\t\t<li>Tight integration with all other DataTables plug-ins</li>\n\t\t\t\t\t<li>The ability to exclude the first (or more) column from being movable</li>\n\t\t\t\t\t<li>Predefine a column order</li>\n\t\t\t\t\t<li>Save staving integration with DataTables</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/jqueryui.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColReorder example - jQuery UI styling</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../Plugins/integration/jqueryui/dataTables.jqueryui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colReorder.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../Plugins/integration/jqueryui/dataTables.jqueryui.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colReorder.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\tvar table = $('#example').dataTable();\n\n\tnew $.fn.dataTable.ColReorder( table );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>jQuery UI styling</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows how the jQuery UI ThemeRoller option in DataTables can be used with ColReorder.</p>\n\n\t\t\t\t<p>The important thing to note here is that it is easier to use <code>new $.fn.dataTable.ColReorder()</code> to add ColReorder to the table rather than <a href=\n\t\t\t\t\"//datatables.net/reference/option/dom\"><code class=\"option\" title=\"DataTables initialisation option\">dom<span>DT</span></code></a> as the jQuery UI integration\n\t\t\t\tuses a complex expression for <a href=\"//datatables.net/reference/option/dom\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">dom<span>DT</span></code></a>.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').dataTable();\n\n\tnew $.fn.dataTable.ColReorder( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../Plugins/integration/jqueryui/dataTables.jqueryui.js\">../../Plugins/integration/jqueryui/dataTables.jqueryui.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colReorder.js\">../js/dataTables.colReorder.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css\">//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../Plugins/integration/jqueryui/dataTables.jqueryui.css\">../../Plugins/integration/jqueryui/dataTables.jqueryui.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colReorder.css\">../css/dataTables.colReorder.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/new_init.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColReorder example - Initialisation using `new`</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colReorder.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colReorder.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.ColReorder( table );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>Initialisation using `new`</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>As well as providing the option to be initialised through the <code>R</code> option of <a href=\"//datatables.net/reference/option/dom\"><code class=\"option\"\n\t\t\t\ttitle=\"DataTables initialisation option\">dom<span>DT</span></code></a>, ColReorder can also be added to a DataTable using direct initialisation - <code>new\n\t\t\t\t$.fn.dataTable.ColReorder();</code> as shown in this example.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.ColReorder( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colReorder.js\">../js/dataTables.colReorder.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colReorder.css\">../css/dataTables.colReorder.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/predefined.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColReorder example - Predefined column ordering</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colReorder.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colReorder.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').dataTable( {\n\t\tdom: 'Rlfrtip',\n\t\tcolReorder: {\n\t\t\torder: [ 4, 3, 2, 1, 0, 5 ]\n\t\t}\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>Predefined column ordering</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>ColReorder provides the ability to specify a column ordering which is not that of the HTML (which typically you will want) through the parameter\n\t\t\t\t<code>colReorder.order</code>. This is an array of integers with the column ordering you want.</p>\n\n\t\t\t\t<p>For full information about the ColReorder options, please refer to the <a href=\"//datatables.net/extensions/colreorder/options\">ColReorder options\n\t\t\t\tdocumentation</a>.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').dataTable( {\n\t\tdom: 'Rlfrtip',\n\t\tcolReorder: {\n\t\t\torder: [ 4, 3, 2, 1, 0, 5 ]\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colReorder.js\">../js/dataTables.colReorder.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colReorder.css\">../css/dataTables.colReorder.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/realtime.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColReorder example - Realtime updating</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colReorder.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colReorder.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').dataTable( {\n\t\tdom: 'Rlfrtip',\n\t\tcolReorder: {\n\t\t\trealtime: true\n\t\t}\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>Realtime updating</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>While the ColReorder insertion point indicator can be styled, another option to show the end user what the column will look like when the table has been\n\t\t\t\treordered is to actually do the reordering while the mouse is still dragging the column header. This is shown in this example and is controlled by the\n\t\t\t\t<code>realtime</code> parameter.</p>\n\n\t\t\t\t<p>For full information about the ColReorder options, please refer to the <a href=\"//datatables.net/extensions/colreorder/options\">ColReorder options\n\t\t\t\tdocumentation</a>.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').dataTable( {\n\t\tdom: 'Rlfrtip',\n\t\tcolReorder: {\n\t\t\trealtime: true\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colReorder.js\">../js/dataTables.colReorder.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colReorder.css\">../css/dataTables.colReorder.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/reset.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColReorder example - Reset ordering API</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colReorder.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colReorder.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tdom: 'Rlfrtip',\n\t\tcolReorder: {\n\t\t\torder: [ 4, 3, 2, 1, 0 ]\n\t\t}\n\t} );\n\t\n\t$('#reset').click( function (e) {\n\t\te.preventDefault();\n\t\t\n\t\ttable.colReorder.reset();\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>Reset ordering API</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>One useful control option to present the end user when using ColReorder is the ability to reset the column ordering to that which was found in the HTML. This\n\t\t\t\tcan be done by calling the <code>reset</code> API function. While ColReorder does not provide a visual element for this itself (in order to provide maximum\n\t\t\t\tflexibility) it is easy to hook to an event handler, as shown in this example.</p>\n\n\t\t\t\t<p>For full information about the ColReorder API, please refer to the <a href=\"//datatables.net/extensions/colreorder/api\">ColReorder API documentation</a>.</p>\n\t\t\t</div><button id=\"reset\">Reset to original HTML order</button><br>\n\t\t\t<br>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tdom: 'Rlfrtip',\n\t\tcolReorder: {\n\t\t\torder: [ 4, 3, 2, 1, 0 ]\n\t\t}\n\t} );\n\t\n\t$('#reset').click( function (e) {\n\t\te.preventDefault();\n\t\t\n\t\ttable.colReorder.reset();\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colReorder.js\">../js/dataTables.colReorder.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colReorder.css\">../css/dataTables.colReorder.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/scrolling.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColReorder example - Scrolling table</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colReorder.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colReorder.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').dataTable( {\n\t\tdom:     'Rlfrtip',\n\t\tscrollY: '200px',\n\t\tpaging:  false\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>Scrolling table</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This is a simple example to show ColReorder working with DataTables scrolling (<a href=\"//datatables.net/reference/option/scrollY\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">scrollY<span>DT</span></code></a> and <a href=\"//datatables.net/reference/option/scrollX\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">scrollX<span>DT</span></code></a>).</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').dataTable( {\n\t\tdom:     'Rlfrtip',\n\t\tscrollY: '200px',\n\t\tpaging:  false\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colReorder.js\">../js/dataTables.colReorder.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colReorder.css\">../css/dataTables.colReorder.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/server_side.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColReorder example - Server-side processing</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colReorder.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colReorder.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').dataTable( {\n\t\tdom: 'Rlfrtip',\n\t\tprocessing: true,\n\t\tserverSide: true,\n\t\tajax: \"../../../examples/server_side/scripts/objects.php\",\n\t\tcolumns: [\n\t\t\t{ data: \"first_name\" },\n\t\t\t{ data: \"last_name\" },\n\t\t\t{ data: \"position\" },\n\t\t\t{ data: \"office\" },\n\t\t\t{ data: \"start_date\" },\n\t\t\t{ data: \"salary\" }\n\t\t]\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>Server-side processing</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Server-side processing can be exceptionally useful in DataTables when dealing with massive data sets, and ColReorder works with this as would be expected.</p>\n\n\t\t\t\t<p>It is recommend that you use object based data with server-side processing and ColReorder, as this provides easily understandable mapping between the the\n\t\t\t\tcolumns and the data relation on the server, otherwise you need to work out array indexes on each call!</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').dataTable( {\n\t\tdom: 'Rlfrtip',\n\t\tprocessing: true,\n\t\tserverSide: true,\n\t\tajax: &quot;../../../examples/server_side/scripts/objects.php&quot;,\n\t\tcolumns: [\n\t\t\t{ data: &quot;first_name&quot; },\n\t\t\t{ data: &quot;last_name&quot; },\n\t\t\t{ data: &quot;position&quot; },\n\t\t\t{ data: &quot;office&quot; },\n\t\t\t{ data: &quot;start_date&quot; },\n\t\t\t{ data: &quot;salary&quot; }\n\t\t]\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colReorder.js\">../js/dataTables.colReorder.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colReorder.css\">../css/dataTables.colReorder.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/simple.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColReorder example - Basic initialisation</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colReorder.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colReorder.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'Rlfrtip'\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>Basic initialisation</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows the basic use case of the ColReorder plug-in. With ColReorder enabled for a table, the user has the ability to click and drag any table\n\t\t\t\theader cell, and drop it where they wish the column to be inserted. The insert point is shown visually, and the column reordering is done as soon as the mouse\n\t\t\t\tbutton is released.</p>\n\n\t\t\t\t<p>ColReorder is added to a DataTable through the <code>R</code> character that it adds to DataTables feature plug-ins. This means that you simply add the\n\t\t\t\tcharacter <code>R</code> to the <a href=\"//datatables.net/reference/option/dom\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">dom<span>DT</span></code></a> parameter for your table to add ColReorder - as shown in the example below.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'Rlfrtip'\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colReorder.js\">../js/dataTables.colReorder.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colReorder.css\">../css/dataTables.colReorder.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/examples/state_save.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColReorder example - State saving</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colReorder.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colReorder.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').dataTable( {\n\t\tdom: 'Rlfrtip',\n\t\tstateSave: true\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColReorder example <span>State saving</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>A useful interaction pattern to use in DataTables is state saving, so when the end user reloads or revisits a page its previous state is retained. ColReorder\n\t\t\t\tworks seamlessly with state saving in DataTables (<a href=\"//datatables.net/reference/option/stateSave\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">stateSave<span>DT</span></code></a>), remembering and restoring the column positions, as well as everything else such as sorting\n\t\t\t\tand filtering.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').dataTable( {\n\t\tdom: 'Rlfrtip',\n\t\tstateSave: true\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colReorder.js\">../js/dataTables.colReorder.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colReorder.css\">../css/dataTables.colReorder.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation using `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alt_insert.html\">Alternative insert styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./realtime.html\">Realtime updating</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./state_save.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./predefined.html\">Predefined column ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./reset.html\">Reset ordering API</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedcolumns.html\">FixedColumns integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedheader.html\">FixedHeader integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server_side.html\">Server-side processing</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColReorder/js/dataTables.colReorder.js",
    "content": "/*! ColReorder 1.1.3\n * ©2010-2014 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     ColReorder\n * @description Provide the ability to reorder columns in a DataTable\n * @version     1.1.3\n * @file        dataTables.colReorder.js\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     www.sprymedia.co.uk/contact\n * @copyright   Copyright 2010-2014 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n(function(window, document, undefined) {\n\n\n/**\n * Switch the key value pairing of an index array to be value key (i.e. the old value is now the\n * key). For example consider [ 2, 0, 1 ] this would be returned as [ 1, 2, 0 ].\n *  @method  fnInvertKeyValues\n *  @param   array aIn Array to switch around\n *  @returns array\n */\nfunction fnInvertKeyValues( aIn )\n{\n\tvar aRet=[];\n\tfor ( var i=0, iLen=aIn.length ; i<iLen ; i++ )\n\t{\n\t\taRet[ aIn[i] ] = i;\n\t}\n\treturn aRet;\n}\n\n\n/**\n * Modify an array by switching the position of two elements\n *  @method  fnArraySwitch\n *  @param   array aArray Array to consider, will be modified by reference (i.e. no return)\n *  @param   int iFrom From point\n *  @param   int iTo Insert point\n *  @returns void\n */\nfunction fnArraySwitch( aArray, iFrom, iTo )\n{\n\tvar mStore = aArray.splice( iFrom, 1 )[0];\n\taArray.splice( iTo, 0, mStore );\n}\n\n\n/**\n * Switch the positions of nodes in a parent node (note this is specifically designed for\n * table rows). Note this function considers all element nodes under the parent!\n *  @method  fnDomSwitch\n *  @param   string sTag Tag to consider\n *  @param   int iFrom Element to move\n *  @param   int Point to element the element to (before this point), can be null for append\n *  @returns void\n */\nfunction fnDomSwitch( nParent, iFrom, iTo )\n{\n\tvar anTags = [];\n\tfor ( var i=0, iLen=nParent.childNodes.length ; i<iLen ; i++ )\n\t{\n\t\tif ( nParent.childNodes[i].nodeType == 1 )\n\t\t{\n\t\t\tanTags.push( nParent.childNodes[i] );\n\t\t}\n\t}\n\tvar nStore = anTags[ iFrom ];\n\n\tif ( iTo !== null )\n\t{\n\t\tnParent.insertBefore( nStore, anTags[iTo] );\n\t}\n\telse\n\t{\n\t\tnParent.appendChild( nStore );\n\t}\n}\n\n\n\nvar factory = function( $, DataTable ) {\n\"use strict\";\n\n/**\n * Plug-in for DataTables which will reorder the internal column structure by taking the column\n * from one position (iFrom) and insert it into a given point (iTo).\n *  @method  $.fn.dataTableExt.oApi.fnColReorder\n *  @param   object oSettings DataTables settings object - automatically added by DataTables!\n *  @param   int iFrom Take the column to be repositioned from this point\n *  @param   int iTo and insert it into this point\n *  @returns void\n */\n$.fn.dataTableExt.oApi.fnColReorder = function ( oSettings, iFrom, iTo )\n{\n\tvar v110 = $.fn.dataTable.Api ? true : false;\n\tvar i, iLen, j, jLen, iCols=oSettings.aoColumns.length, nTrs, oCol;\n\tvar attrMap = function ( obj, prop, mapping ) {\n\t\tif ( ! obj[ prop ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar a = obj[ prop ].split('.');\n\t\tvar num = a.shift();\n\n\t\tif ( isNaN( num*1 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tobj[ prop ] = mapping[ num*1 ]+'.'+a.join('.');\n\t};\n\n\t/* Sanity check in the input */\n\tif ( iFrom == iTo )\n\t{\n\t\t/* Pointless reorder */\n\t\treturn;\n\t}\n\n\tif ( iFrom < 0 || iFrom >= iCols )\n\t{\n\t\tthis.oApi._fnLog( oSettings, 1, \"ColReorder 'from' index is out of bounds: \"+iFrom );\n\t\treturn;\n\t}\n\n\tif ( iTo < 0 || iTo >= iCols )\n\t{\n\t\tthis.oApi._fnLog( oSettings, 1, \"ColReorder 'to' index is out of bounds: \"+iTo );\n\t\treturn;\n\t}\n\n\t/*\n\t * Calculate the new column array index, so we have a mapping between the old and new\n\t */\n\tvar aiMapping = [];\n\tfor ( i=0, iLen=iCols ; i<iLen ; i++ )\n\t{\n\t\taiMapping[i] = i;\n\t}\n\tfnArraySwitch( aiMapping, iFrom, iTo );\n\tvar aiInvertMapping = fnInvertKeyValues( aiMapping );\n\n\n\t/*\n\t * Convert all internal indexing to the new column order indexes\n\t */\n\t/* Sorting */\n\tfor ( i=0, iLen=oSettings.aaSorting.length ; i<iLen ; i++ )\n\t{\n\t\toSettings.aaSorting[i][0] = aiInvertMapping[ oSettings.aaSorting[i][0] ];\n\t}\n\n\t/* Fixed sorting */\n\tif ( oSettings.aaSortingFixed !== null )\n\t{\n\t\tfor ( i=0, iLen=oSettings.aaSortingFixed.length ; i<iLen ; i++ )\n\t\t{\n\t\t\toSettings.aaSortingFixed[i][0] = aiInvertMapping[ oSettings.aaSortingFixed[i][0] ];\n\t\t}\n\t}\n\n\t/* Data column sorting (the column which the sort for a given column should take place on) */\n\tfor ( i=0, iLen=iCols ; i<iLen ; i++ )\n\t{\n\t\toCol = oSettings.aoColumns[i];\n\t\tfor ( j=0, jLen=oCol.aDataSort.length ; j<jLen ; j++ )\n\t\t{\n\t\t\toCol.aDataSort[j] = aiInvertMapping[ oCol.aDataSort[j] ];\n\t\t}\n\n\t\t// Update the column indexes\n\t\tif ( v110 ) {\n\t\t\toCol.idx = aiInvertMapping[ oCol.idx ];\n\t\t}\n\t}\n\n\tif ( v110 ) {\n\t\t// Update 1.10 optimised sort class removal variable\n\t\t$.each( oSettings.aLastSort, function (i, val) {\n\t\t\toSettings.aLastSort[i].src = aiInvertMapping[ val.src ];\n\t\t} );\n\t}\n\n\t/* Update the Get and Set functions for each column */\n\tfor ( i=0, iLen=iCols ; i<iLen ; i++ )\n\t{\n\t\toCol = oSettings.aoColumns[i];\n\n\t\tif ( typeof oCol.mData == 'number' ) {\n\t\t\toCol.mData = aiInvertMapping[ oCol.mData ];\n\n\t\t\t// regenerate the get / set functions\n\t\t\toSettings.oApi._fnColumnOptions( oSettings, i, {} );\n\t\t}\n\t\telse if ( $.isPlainObject( oCol.mData ) ) {\n\t\t\t// HTML5 data sourced\n\t\t\tattrMap( oCol.mData, '_',      aiInvertMapping );\n\t\t\tattrMap( oCol.mData, 'filter', aiInvertMapping );\n\t\t\tattrMap( oCol.mData, 'sort',   aiInvertMapping );\n\t\t\tattrMap( oCol.mData, 'type',   aiInvertMapping );\n\n\t\t\t// regenerate the get / set functions\n\t\t\toSettings.oApi._fnColumnOptions( oSettings, i, {} );\n\t\t}\n\t}\n\n\n\t/*\n\t * Move the DOM elements\n\t */\n\tif ( oSettings.aoColumns[iFrom].bVisible )\n\t{\n\t\t/* Calculate the current visible index and the point to insert the node before. The insert\n\t\t * before needs to take into account that there might not be an element to insert before,\n\t\t * in which case it will be null, and an appendChild should be used\n\t\t */\n\t\tvar iVisibleIndex = this.oApi._fnColumnIndexToVisible( oSettings, iFrom );\n\t\tvar iInsertBeforeIndex = null;\n\n\t\ti = iTo < iFrom ? iTo : iTo + 1;\n\t\twhile ( iInsertBeforeIndex === null && i < iCols )\n\t\t{\n\t\t\tiInsertBeforeIndex = this.oApi._fnColumnIndexToVisible( oSettings, i );\n\t\t\ti++;\n\t\t}\n\n\t\t/* Header */\n\t\tnTrs = oSettings.nTHead.getElementsByTagName('tr');\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfnDomSwitch( nTrs[i], iVisibleIndex, iInsertBeforeIndex );\n\t\t}\n\n\t\t/* Footer */\n\t\tif ( oSettings.nTFoot !== null )\n\t\t{\n\t\t\tnTrs = oSettings.nTFoot.getElementsByTagName('tr');\n\t\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tfnDomSwitch( nTrs[i], iVisibleIndex, iInsertBeforeIndex );\n\t\t\t}\n\t\t}\n\n\t\t/* Body */\n\t\tfor ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( oSettings.aoData[i].nTr !== null )\n\t\t\t{\n\t\t\t\tfnDomSwitch( oSettings.aoData[i].nTr, iVisibleIndex, iInsertBeforeIndex );\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Move the internal array elements\n\t */\n\t/* Columns */\n\tfnArraySwitch( oSettings.aoColumns, iFrom, iTo );\n\n\t/* Search columns */\n\tfnArraySwitch( oSettings.aoPreSearchCols, iFrom, iTo );\n\n\t/* Array array - internal data anodes cache */\n\tfor ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )\n\t{\n\t\tvar data = oSettings.aoData[i];\n\n\t\tif ( v110 ) {\n\t\t\t// DataTables 1.10+\n\t\t\tif ( data.anCells ) {\n\t\t\t\tfnArraySwitch( data.anCells, iFrom, iTo );\n\t\t\t}\n\n\t\t\t// For DOM sourced data, the invalidate will reread the cell into\n\t\t\t// the data array, but for data sources as an array, they need to\n\t\t\t// be flipped\n\t\t\tif ( data.src !== 'dom' && $.isArray( data._aData ) ) {\n\t\t\t\tfnArraySwitch( data._aData, iFrom, iTo );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// DataTables 1.9-\n\t\t\tif ( $.isArray( data._aData ) ) {\n\t\t\t\tfnArraySwitch( data._aData, iFrom, iTo );\n\t\t\t}\n\t\t\tfnArraySwitch( data._anHidden, iFrom, iTo );\n\t\t}\n\t}\n\n\t/* Reposition the header elements in the header layout array */\n\tfor ( i=0, iLen=oSettings.aoHeader.length ; i<iLen ; i++ )\n\t{\n\t\tfnArraySwitch( oSettings.aoHeader[i], iFrom, iTo );\n\t}\n\n\tif ( oSettings.aoFooter !== null )\n\t{\n\t\tfor ( i=0, iLen=oSettings.aoFooter.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfnArraySwitch( oSettings.aoFooter[i], iFrom, iTo );\n\t\t}\n\t}\n\n\t// In 1.10 we need to invalidate row cached data for sorting, filtering etc\n\tif ( v110 ) {\n\t\tvar api = new $.fn.dataTable.Api( oSettings );\n\t\tapi.rows().invalidate();\n\t}\n\n\t/*\n\t * Update DataTables' event handlers\n\t */\n\n\t/* Sort listener */\n\tfor ( i=0, iLen=iCols ; i<iLen ; i++ )\n\t{\n\t\t$(oSettings.aoColumns[i].nTh).off('click.DT');\n\t\tthis.oApi._fnSortAttachListener( oSettings, oSettings.aoColumns[i].nTh, i );\n\t}\n\n\n\t/* Fire an event so other plug-ins can update */\n\t$(oSettings.oInstance).trigger( 'column-reorder', [ oSettings, {\n\t\t\"iFrom\": iFrom,\n\t\t\"iTo\": iTo,\n\t\t\"aiInvertMapping\": aiInvertMapping\n\t} ] );\n};\n\n\n/**\n * ColReorder provides column visibility control for DataTables\n * @class ColReorder\n * @constructor\n * @param {object} dt DataTables settings object\n * @param {object} opts ColReorder options\n */\nvar ColReorder = function( dt, opts )\n{\n\tvar oDTSettings;\n\n\tif ( $.fn.dataTable.Api ) {\n\t\toDTSettings = new $.fn.dataTable.Api( dt ).settings()[0];\n\t}\n\t// 1.9 compatibility\n\telse if ( dt.fnSettings ) {\n\t\t// DataTables object, convert to the settings object\n\t\toDTSettings = dt.fnSettings();\n\t}\n\telse if ( typeof dt === 'string' ) {\n\t\t// jQuery selector\n\t\tif ( $.fn.dataTable.fnIsDataTable( $(dt)[0] ) ) {\n\t\t\toDTSettings = $(dt).eq(0).dataTable().fnSettings();\n\t\t}\n\t}\n\telse if ( dt.nodeName && dt.nodeName.toLowerCase() === 'table' ) {\n\t\t// Table node\n\t\tif ( $.fn.dataTable.fnIsDataTable( dt.nodeName ) ) {\n\t\t\toDTSettings = $(dt.nodeName).dataTable().fnSettings();\n\t\t}\n\t}\n\telse if ( dt instanceof jQuery ) {\n\t\t// jQuery object\n\t\tif ( $.fn.dataTable.fnIsDataTable( dt[0] ) ) {\n\t\t\toDTSettings = dt.eq(0).dataTable().fnSettings();\n\t\t}\n\t}\n\telse {\n\t\t// DataTables settings object\n\t\toDTSettings = dt;\n\t}\n\n\t// Ensure that we can't initialise on the same table twice\n\tif ( oDTSettings._colReorder ) {\n\t\tthrow \"ColReorder already initialised on table #\"+oDTSettings.nTable.id;\n\t}\n\n\t// Convert from camelCase to Hungarian, just as DataTables does\n\tvar camelToHungarian = $.fn.dataTable.camelToHungarian;\n\tif ( camelToHungarian ) {\n\t\tcamelToHungarian( ColReorder.defaults, ColReorder.defaults, true );\n\t\tcamelToHungarian( ColReorder.defaults, opts || {} );\n\t}\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public class variables\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * @namespace Settings object which contains customisable information for ColReorder instance\n\t */\n\tthis.s = {\n\t\t/**\n\t\t * DataTables settings object\n\t\t *  @property dt\n\t\t *  @type     Object\n\t\t *  @default  null\n\t\t */\n\t\t\"dt\": null,\n\n\t\t/**\n\t\t * Initialisation object used for this instance\n\t\t *  @property init\n\t\t *  @type     object\n\t\t *  @default  {}\n\t\t */\n\t\t\"init\": $.extend( true, {}, ColReorder.defaults, opts ),\n\n\t\t/**\n\t\t * Number of columns to fix (not allow to be reordered)\n\t\t *  @property fixed\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\t\"fixed\": 0,\n\n\t\t/**\n\t\t * Number of columns to fix counting from right (not allow to be reordered)\n\t\t *  @property fixedRight\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\t\"fixedRight\": 0,\n\n\t\t/**\n\t\t * Callback function for once the reorder has been done\n\t\t *  @property reorderCallback\n\t\t *  @type     function\n\t\t *  @default  null\n\t\t */\n\t\t\"reorderCallback\": null,\n\n\t\t/**\n\t\t * @namespace Information used for the mouse drag\n\t\t */\n\t\t\"mouse\": {\n\t\t\t\"startX\": -1,\n\t\t\t\"startY\": -1,\n\t\t\t\"offsetX\": -1,\n\t\t\t\"offsetY\": -1,\n\t\t\t\"target\": -1,\n\t\t\t\"targetIndex\": -1,\n\t\t\t\"fromIndex\": -1\n\t\t},\n\n\t\t/**\n\t\t * Information which is used for positioning the insert cusor and knowing where to do the\n\t\t * insert. Array of objects with the properties:\n\t\t *   x: x-axis position\n\t\t *   to: insert point\n\t\t *  @property aoTargets\n\t\t *  @type     array\n\t\t *  @default  []\n\t\t */\n\t\t\"aoTargets\": []\n\t};\n\n\n\t/**\n\t * @namespace Common and useful DOM elements for the class instance\n\t */\n\tthis.dom = {\n\t\t/**\n\t\t * Dragging element (the one the mouse is moving)\n\t\t *  @property drag\n\t\t *  @type     element\n\t\t *  @default  null\n\t\t */\n\t\t\"drag\": null,\n\n\t\t/**\n\t\t * The insert cursor\n\t\t *  @property pointer\n\t\t *  @type     element\n\t\t *  @default  null\n\t\t */\n\t\t\"pointer\": null\n\t};\n\n\n\t/* Constructor logic */\n\tthis.s.dt = oDTSettings;\n\tthis.s.dt._colReorder = this;\n\tthis._fnConstruct();\n\n\t/* Add destroy callback */\n\toDTSettings.oApi._fnCallbackReg(oDTSettings, 'aoDestroyCallback', $.proxy(this._fnDestroy, this), 'ColReorder');\n\n\treturn this;\n};\n\n\n\nColReorder.prototype = {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Reset the column ordering to the original ordering that was detected on\n\t * start up.\n\t *  @return {this} Returns `this` for chaining.\n\t *\n\t *  @example\n\t *    // DataTables initialisation with ColReorder\n\t *    var table = $('#example').dataTable( {\n\t *        \"sDom\": 'Rlfrtip'\n\t *    } );\n\t *\n\t *    // Add click event to a button to reset the ordering\n\t *    $('#resetOrdering').click( function (e) {\n\t *        e.preventDefault();\n\t *        $.fn.dataTable.ColReorder( table ).fnReset();\n\t *    } );\n\t */\n\t\"fnReset\": function ()\n\t{\n\t\tvar a = [];\n\t\tfor ( var i=0, iLen=this.s.dt.aoColumns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\ta.push( this.s.dt.aoColumns[i]._ColReorder_iOrigCol );\n\t\t}\n\n\t\tthis._fnOrderColumns( a );\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * `Deprecated` - Get the current order of the columns, as an array.\n\t *  @return {array} Array of column identifiers\n\t *  @deprecated `fnOrder` should be used in preference to this method.\n\t *      `fnOrder` acts as a getter/setter.\n\t */\n\t\"fnGetCurrentOrder\": function ()\n\t{\n\t\treturn this.fnOrder();\n\t},\n\n\t/**\n\t * Get the current order of the columns, as an array. Note that the values\n\t * given in the array are unique identifiers for each column. Currently\n\t * these are the original ordering of the columns that was detected on\n\t * start up, but this could potentially change in future.\n\t *  @return {array} Array of column identifiers\n\t *\n\t *  @example\n\t *    // Get column ordering for the table\n\t *    var order = $.fn.dataTable.ColReorder( dataTable ).fnOrder();\n\t *//**\n\t * Set the order of the columns, from the positions identified in the\n\t * ordering array given. Note that ColReorder takes a brute force approach\n\t * to reordering, so it is possible multiple reordering events will occur\n\t * before the final order is settled upon.\n\t *  @param {array} [set] Array of column identifiers in the new order. Note\n\t *    that every column must be included, uniquely, in this array.\n\t *  @return {this} Returns `this` for chaining.\n\t *\n\t *  @example\n\t *    // Swap the first and second columns\n\t *    $.fn.dataTable.ColReorder( dataTable ).fnOrder( [1, 0, 2, 3, 4] );\n\t *\n\t *  @example\n\t *    // Move the first column to the end for the table `#example`\n\t *    var curr = $.fn.dataTable.ColReorder( '#example' ).fnOrder();\n\t *    var first = curr.shift();\n\t *    curr.push( first );\n\t *    $.fn.dataTable.ColReorder( '#example' ).fnOrder( curr );\n\t *\n\t *  @example\n\t *    // Reverse the table's order\n\t *    $.fn.dataTable.ColReorder( '#example' ).fnOrder(\n\t *      $.fn.dataTable.ColReorder( '#example' ).fnOrder().reverse()\n\t *    );\n\t */\n\t\"fnOrder\": function ( set )\n\t{\n\t\tif ( set === undefined )\n\t\t{\n\t\t\tvar a = [];\n\t\t\tfor ( var i=0, iLen=this.s.dt.aoColumns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\ta.push( this.s.dt.aoColumns[i]._ColReorder_iOrigCol );\n\t\t\t}\n\t\t\treturn a;\n\t\t}\n\n\t\tthis._fnOrderColumns( fnInvertKeyValues( set ) );\n\n\t\treturn this;\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods (they are of course public in JS, but recommended as private)\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Constructor logic\n\t *  @method  _fnConstruct\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnConstruct\": function ()\n\t{\n\t\tvar that = this;\n\t\tvar iLen = this.s.dt.aoColumns.length;\n\t\tvar i;\n\n\t\t/* Columns discounted from reordering - counting left to right */\n\t\tif ( this.s.init.iFixedColumns )\n\t\t{\n\t\t\tthis.s.fixed = this.s.init.iFixedColumns;\n\t\t}\n\n\t\t/* Columns discounted from reordering - counting right to left */\n\t\tthis.s.fixedRight = this.s.init.iFixedColumnsRight ?\n\t\t\tthis.s.init.iFixedColumnsRight :\n\t\t\t0;\n\n\t\t/* Drop callback initialisation option */\n\t\tif ( this.s.init.fnReorderCallback )\n\t\t{\n\t\t\tthis.s.reorderCallback = this.s.init.fnReorderCallback;\n\t\t}\n\n\t\t/* Add event handlers for the drag and drop, and also mark the original column order */\n\t\tfor ( i = 0; i < iLen; i++ )\n\t\t{\n\t\t\tif ( i > this.s.fixed-1 && i < iLen - this.s.fixedRight )\n\t\t\t{\n\t\t\t\tthis._fnMouseListener( i, this.s.dt.aoColumns[i].nTh );\n\t\t\t}\n\n\t\t\t/* Mark the original column order for later reference */\n\t\t\tthis.s.dt.aoColumns[i]._ColReorder_iOrigCol = i;\n\t\t}\n\n\t\t/* State saving */\n\t\tthis.s.dt.oApi._fnCallbackReg( this.s.dt, 'aoStateSaveParams', function (oS, oData) {\n\t\t\tthat._fnStateSave.call( that, oData );\n\t\t}, \"ColReorder_State\" );\n\n\t\t/* An initial column order has been specified */\n\t\tvar aiOrder = null;\n\t\tif ( this.s.init.aiOrder )\n\t\t{\n\t\t\taiOrder = this.s.init.aiOrder.slice();\n\t\t}\n\n\t\t/* State loading, overrides the column order given */\n\t\tif ( this.s.dt.oLoadedState && typeof this.s.dt.oLoadedState.ColReorder != 'undefined' &&\n\t\t  this.s.dt.oLoadedState.ColReorder.length == this.s.dt.aoColumns.length )\n\t\t{\n\t\t\taiOrder = this.s.dt.oLoadedState.ColReorder;\n\t\t}\n\n\t\t/* If we have an order to apply - do so */\n\t\tif ( aiOrder )\n\t\t{\n\t\t\t/* We might be called during or after the DataTables initialisation. If before, then we need\n\t\t\t * to wait until the draw is done, if after, then do what we need to do right away\n\t\t\t */\n\t\t\tif ( !that.s.dt._bInitComplete )\n\t\t\t{\n\t\t\t\tvar bDone = false;\n\t\t\t\tthis.s.dt.aoDrawCallback.push( {\n\t\t\t\t\t\"fn\": function () {\n\t\t\t\t\t\tif ( !that.s.dt._bInitComplete && !bDone )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbDone = true;\n\t\t\t\t\t\t\tvar resort = fnInvertKeyValues( aiOrder );\n\t\t\t\t\t\t\tthat._fnOrderColumns.call( that, resort );\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"sName\": \"ColReorder_Pre\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar resort = fnInvertKeyValues( aiOrder );\n\t\t\t\tthat._fnOrderColumns.call( that, resort );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis._fnSetColumnIndexes();\n\t\t}\n\t},\n\n\n\t/**\n\t * Set the column order from an array\n\t *  @method  _fnOrderColumns\n\t *  @param   array a An array of integers which dictate the column order that should be applied\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnOrderColumns\": function ( a )\n\t{\n\t\tif ( a.length != this.s.dt.aoColumns.length )\n\t\t{\n\t\t\tthis.s.dt.oInstance.oApi._fnLog( this.s.dt, 1, \"ColReorder - array reorder does not \"+\n\t\t\t\t\"match known number of columns. Skipping.\" );\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar currIndex = $.inArray( i, a );\n\t\t\tif ( i != currIndex )\n\t\t\t{\n\t\t\t\t/* Reorder our switching array */\n\t\t\t\tfnArraySwitch( a, currIndex, i );\n\n\t\t\t\t/* Do the column reorder in the table */\n\t\t\t\tthis.s.dt.oInstance.fnColReorder( currIndex, i );\n\t\t\t}\n\t\t}\n\n\t\t/* When scrolling we need to recalculate the column sizes to allow for the shift */\n\t\tif ( this.s.dt.oScroll.sX !== \"\" || this.s.dt.oScroll.sY !== \"\" )\n\t\t{\n\t\t\tthis.s.dt.oInstance.fnAdjustColumnSizing( false );\n\t\t}\n\n\t\t/* Save the state */\n\t\tthis.s.dt.oInstance.oApi._fnSaveState( this.s.dt );\n\n\t\tthis._fnSetColumnIndexes();\n\t\t\n\t\tif ( this.s.reorderCallback !== null )\n\t\t{\n\t\t\tthis.s.reorderCallback.call( this );\n\t\t}\n\t},\n\n\n\t/**\n\t * Because we change the indexes of columns in the table, relative to their starting point\n\t * we need to reorder the state columns to what they are at the starting point so we can\n\t * then rearrange them again on state load!\n\t *  @method  _fnStateSave\n\t *  @param   object oState DataTables state\n\t *  @returns string JSON encoded cookie string for DataTables\n\t *  @private\n\t */\n\t\"_fnStateSave\": function ( oState )\n\t{\n\t\tvar i, iLen, aCopy, iOrigColumn;\n\t\tvar oSettings = this.s.dt;\n\t\tvar columns = oSettings.aoColumns;\n\n\t\toState.ColReorder = [];\n\n\t\t/* Sorting */\n\t\tif ( oState.aaSorting ) {\n\t\t\t// 1.10.0-\n\t\t\tfor ( i=0 ; i<oState.aaSorting.length ; i++ ) {\n\t\t\t\toState.aaSorting[i][0] = columns[ oState.aaSorting[i][0] ]._ColReorder_iOrigCol;\n\t\t\t}\n\n\t\t\tvar aSearchCopy = $.extend( true, [], oState.aoSearchCols );\n\n\t\t\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tiOrigColumn = columns[i]._ColReorder_iOrigCol;\n\n\t\t\t\t/* Column filter */\n\t\t\t\toState.aoSearchCols[ iOrigColumn ] = aSearchCopy[i];\n\n\t\t\t\t/* Visibility */\n\t\t\t\toState.abVisCols[ iOrigColumn ] = columns[i].bVisible;\n\n\t\t\t\t/* Column reordering */\n\t\t\t\toState.ColReorder.push( iOrigColumn );\n\t\t\t}\n\t\t}\n\t\telse if ( oState.order ) {\n\t\t\t// 1.10.1+\n\t\t\tfor ( i=0 ; i<oState.order.length ; i++ ) {\n\t\t\t\toState.order[i][0] = columns[ oState.order[i][0] ]._ColReorder_iOrigCol;\n\t\t\t}\n\n\t\t\tvar stateColumnsCopy = $.extend( true, [], oState.columns );\n\n\t\t\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tiOrigColumn = columns[i]._ColReorder_iOrigCol;\n\n\t\t\t\t/* Columns */\n\t\t\t\toState.columns[ iOrigColumn ] = stateColumnsCopy[i];\n\n\t\t\t\t/* Column reordering */\n\t\t\t\toState.ColReorder.push( iOrigColumn );\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Mouse drop and drag\n\t */\n\n\t/**\n\t * Add a mouse down listener to a particluar TH element\n\t *  @method  _fnMouseListener\n\t *  @param   int i Column index\n\t *  @param   element nTh TH element clicked on\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnMouseListener\": function ( i, nTh )\n\t{\n\t\tvar that = this;\n\t\t$(nTh).on( 'mousedown.ColReorder', function (e) {\n\t\t\te.preventDefault();\n\t\t\tthat._fnMouseDown.call( that, e, nTh );\n\t\t} );\n\t},\n\n\n\t/**\n\t * Mouse down on a TH element in the table header\n\t *  @method  _fnMouseDown\n\t *  @param   event e Mouse event\n\t *  @param   element nTh TH element to be dragged\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnMouseDown\": function ( e, nTh )\n\t{\n\t\tvar that = this;\n\n\t\t/* Store information about the mouse position */\n\t\tvar target = $(e.target).closest('th, td');\n\t\tvar offset = target.offset();\n\t\tvar idx = parseInt( $(nTh).attr('data-column-index'), 10 );\n\n\t\tif ( idx === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.s.mouse.startX = e.pageX;\n\t\tthis.s.mouse.startY = e.pageY;\n\t\tthis.s.mouse.offsetX = e.pageX - offset.left;\n\t\tthis.s.mouse.offsetY = e.pageY - offset.top;\n\t\tthis.s.mouse.target = this.s.dt.aoColumns[ idx ].nTh;//target[0];\n\t\tthis.s.mouse.targetIndex = idx;\n\t\tthis.s.mouse.fromIndex = idx;\n\n\t\tthis._fnRegions();\n\n\t\t/* Add event handlers to the document */\n\t\t$(document)\n\t\t\t.on( 'mousemove.ColReorder', function (e) {\n\t\t\t\tthat._fnMouseMove.call( that, e );\n\t\t\t} )\n\t\t\t.on( 'mouseup.ColReorder', function (e) {\n\t\t\t\tthat._fnMouseUp.call( that, e );\n\t\t\t} );\n\t},\n\n\n\t/**\n\t * Deal with a mouse move event while dragging a node\n\t *  @method  _fnMouseMove\n\t *  @param   event e Mouse event\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnMouseMove\": function ( e )\n\t{\n\t\tvar that = this;\n\n\t\tif ( this.dom.drag === null )\n\t\t{\n\t\t\t/* Only create the drag element if the mouse has moved a specific distance from the start\n\t\t\t * point - this allows the user to make small mouse movements when sorting and not have a\n\t\t\t * possibly confusing drag element showing up\n\t\t\t */\n\t\t\tif ( Math.pow(\n\t\t\t\tMath.pow(e.pageX - this.s.mouse.startX, 2) +\n\t\t\t\tMath.pow(e.pageY - this.s.mouse.startY, 2), 0.5 ) < 5 )\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._fnCreateDragNode();\n\t\t}\n\n\t\t/* Position the element - we respect where in the element the click occured */\n\t\tthis.dom.drag.css( {\n\t\t\tleft: e.pageX - this.s.mouse.offsetX,\n\t\t\ttop: e.pageY - this.s.mouse.offsetY\n\t\t} );\n\n\t\t/* Based on the current mouse position, calculate where the insert should go */\n\t\tvar bSet = false;\n\t\tvar lastToIndex = this.s.mouse.toIndex;\n\n\t\tfor ( var i=1, iLen=this.s.aoTargets.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( e.pageX < this.s.aoTargets[i-1].x + ((this.s.aoTargets[i].x-this.s.aoTargets[i-1].x)/2) )\n\t\t\t{\n\t\t\t\tthis.dom.pointer.css( 'left', this.s.aoTargets[i-1].x );\n\t\t\t\tthis.s.mouse.toIndex = this.s.aoTargets[i-1].to;\n\t\t\t\tbSet = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// The insert element wasn't positioned in the array (less than\n\t\t// operator), so we put it at the end\n\t\tif ( !bSet )\n\t\t{\n\t\t\tthis.dom.pointer.css( 'left', this.s.aoTargets[this.s.aoTargets.length-1].x );\n\t\t\tthis.s.mouse.toIndex = this.s.aoTargets[this.s.aoTargets.length-1].to;\n\t\t}\n\n\t\t// Perform reordering if realtime updating is on and the column has moved\n\t\tif ( this.s.init.bRealtime && lastToIndex !== this.s.mouse.toIndex ) {\n\t\t\tthis.s.dt.oInstance.fnColReorder( this.s.mouse.fromIndex, this.s.mouse.toIndex );\n\t\t\tthis.s.mouse.fromIndex = this.s.mouse.toIndex;\n\t\t\tthis._fnRegions();\n\t\t}\n\t},\n\n\n\t/**\n\t * Finish off the mouse drag and insert the column where needed\n\t *  @method  _fnMouseUp\n\t *  @param   event e Mouse event\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnMouseUp\": function ( e )\n\t{\n\t\tvar that = this;\n\n\t\t$(document).off( 'mousemove.ColReorder mouseup.ColReorder' );\n\n\t\tif ( this.dom.drag !== null )\n\t\t{\n\t\t\t/* Remove the guide elements */\n\t\t\tthis.dom.drag.remove();\n\t\t\tthis.dom.pointer.remove();\n\t\t\tthis.dom.drag = null;\n\t\t\tthis.dom.pointer = null;\n\n\t\t\t/* Actually do the reorder */\n\t\t\tthis.s.dt.oInstance.fnColReorder( this.s.mouse.fromIndex, this.s.mouse.toIndex );\n\t\t\tthis._fnSetColumnIndexes();\n\n\t\t\t/* When scrolling we need to recalculate the column sizes to allow for the shift */\n\t\t\tif ( this.s.dt.oScroll.sX !== \"\" || this.s.dt.oScroll.sY !== \"\" )\n\t\t\t{\n\t\t\t\tthis.s.dt.oInstance.fnAdjustColumnSizing( false );\n\t\t\t}\n\n\t\t\t/* Save the state */\n\t\t\tthis.s.dt.oInstance.oApi._fnSaveState( this.s.dt );\n\n\t\t\tif ( this.s.reorderCallback !== null )\n\t\t\t{\n\t\t\t\tthis.s.reorderCallback.call( this );\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/**\n\t * Calculate a cached array with the points of the column inserts, and the\n\t * 'to' points\n\t *  @method  _fnRegions\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnRegions\": function ()\n\t{\n\t\tvar aoColumns = this.s.dt.aoColumns;\n\n\t\tthis.s.aoTargets.splice( 0, this.s.aoTargets.length );\n\n\t\tthis.s.aoTargets.push( {\n\t\t\t\"x\":  $(this.s.dt.nTable).offset().left,\n\t\t\t\"to\": 0\n\t\t} );\n\n\t\tvar iToPoint = 0;\n\t\tfor ( var i=0, iLen=aoColumns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\t/* For the column / header in question, we want it's position to remain the same if the\n\t\t\t * position is just to it's immediate left or right, so we only incremement the counter for\n\t\t\t * other columns\n\t\t\t */\n\t\t\tif ( i != this.s.mouse.fromIndex )\n\t\t\t{\n\t\t\t\tiToPoint++;\n\t\t\t}\n\n\t\t\tif ( aoColumns[i].bVisible )\n\t\t\t{\n\t\t\t\tthis.s.aoTargets.push( {\n\t\t\t\t\t\"x\":  $(aoColumns[i].nTh).offset().left + $(aoColumns[i].nTh).outerWidth(),\n\t\t\t\t\t\"to\": iToPoint\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\t/* Disallow columns for being reordered by drag and drop, counting right to left */\n\t\tif ( this.s.fixedRight !== 0 )\n\t\t{\n\t\t\tthis.s.aoTargets.splice( this.s.aoTargets.length - this.s.fixedRight );\n\t\t}\n\n\t\t/* Disallow columns for being reordered by drag and drop, counting left to right */\n\t\tif ( this.s.fixed !== 0 )\n\t\t{\n\t\t\tthis.s.aoTargets.splice( 0, this.s.fixed );\n\t\t}\n\t},\n\n\n\t/**\n\t * Copy the TH element that is being drags so the user has the idea that they are actually\n\t * moving it around the page.\n\t *  @method  _fnCreateDragNode\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnCreateDragNode\": function ()\n\t{\n\t\tvar scrolling = this.s.dt.oScroll.sX !== \"\" || this.s.dt.oScroll.sY !== \"\";\n\n\t\tvar origCell = this.s.dt.aoColumns[ this.s.mouse.targetIndex ].nTh;\n\t\tvar origTr = origCell.parentNode;\n\t\tvar origThead = origTr.parentNode;\n\t\tvar origTable = origThead.parentNode;\n\t\tvar cloneCell = $(origCell).clone();\n\n\t\t// This is a slightly odd combination of jQuery and DOM, but it is the\n\t\t// fastest and least resource intensive way I could think of cloning\n\t\t// the table with just a single header cell in it.\n\t\tthis.dom.drag = $(origTable.cloneNode(false))\n\t\t\t.addClass( 'DTCR_clonedTable' )\n\t\t\t.append(\n\t\t\t\t$(origThead.cloneNode(false)).append(\n\t\t\t\t\t$(origTr.cloneNode(false)).append(\n\t\t\t\t\t\tcloneCell[0]\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.css( {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: $(origCell).outerWidth(),\n\t\t\t\theight: $(origCell).outerHeight()\n\t\t\t} )\n\t\t\t.appendTo( 'body' );\n\n\t\tthis.dom.pointer = $('<div></div>')\n\t\t\t.addClass( 'DTCR_pointer' )\n\t\t\t.css( {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: scrolling ?\n\t\t\t\t\t$('div.dataTables_scroll', this.s.dt.nTableWrapper).offset().top :\n\t\t\t\t\t$(this.s.dt.nTable).offset().top,\n\t\t\t\theight : scrolling ?\n\t\t\t\t\t$('div.dataTables_scroll', this.s.dt.nTableWrapper).height() :\n\t\t\t\t\t$(this.s.dt.nTable).height()\n\t\t\t} )\n\t\t\t.appendTo( 'body' );\n\t},\n\n\t/**\n\t * Clean up ColReorder memory references and event handlers\n\t *  @method  _fnDestroy\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnDestroy\": function ()\n\t{\n\t\tvar i, iLen;\n\n\t\tfor ( i=0, iLen=this.s.dt.aoDrawCallback.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( this.s.dt.aoDrawCallback[i].sName === 'ColReorder_Pre' )\n\t\t\t{\n\t\t\t\tthis.s.dt.aoDrawCallback.splice( i, 1 );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t$(this.s.dt.nTHead).find( '*' ).off( '.ColReorder' );\n\n\t\t$.each( this.s.dt.aoColumns, function (i, column) {\n\t\t\t$(column.nTh).removeAttr('data-column-index');\n\t\t} );\n\n\t\tthis.s.dt._colReorder = null;\n\t\tthis.s = null;\n\t},\n\n\n\t/**\n\t * Add a data attribute to the column headers, so we know the index of\n\t * the row to be reordered. This allows fast detection of the index, and\n\t * for this plug-in to work with FixedHeader which clones the nodes.\n\t *  @private\n\t */\n\t\"_fnSetColumnIndexes\": function ()\n\t{\n\t\t$.each( this.s.dt.aoColumns, function (i, column) {\n\t\t\t$(column.nTh).attr('data-column-index', i);\n\t\t} );\n\t}\n};\n\n\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Static parameters\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\n/**\n * ColReorder default settings for initialisation\n *  @namespace\n *  @static\n */\nColReorder.defaults = {\n\t/**\n\t * Predefined ordering for the columns that will be applied automatically\n\t * on initialisation. If not specified then the order that the columns are\n\t * found to be in the HTML is the order used.\n\t *  @type array\n\t *  @default null\n\t *  @static\n\t *  @example\n\t *      // Using the `oColReorder` option in the DataTables options object\n\t *      $('#example').dataTable( {\n\t *          \"sDom\": 'Rlfrtip',\n\t *          \"oColReorder\": {\n\t *              \"aiOrder\": [ 4, 3, 2, 1, 0 ]\n\t *          }\n\t *      } );\n\t *\n\t *  @example\n\t *      // Using `new` constructor\n\t *      $('#example').dataTable()\n\t *\n\t *      new $.fn.dataTable.ColReorder( '#example', {\n\t *          \"aiOrder\": [ 4, 3, 2, 1, 0 ]\n\t *      } );\n\t */\n\taiOrder: null,\n\n\t/**\n\t * Redraw the table's column ordering as the end user draws the column\n\t * (`true`) or wait until the mouse is released (`false` - default). Note\n\t * that this will perform a redraw on each reordering, which involves an\n\t * Ajax request each time if you are using server-side processing in\n\t * DataTables.\n\t *  @type boolean\n\t *  @default false\n\t *  @static\n\t *  @example\n\t *      // Using the `oColReorder` option in the DataTables options object\n\t *      $('#example').dataTable( {\n\t *          \"sDom\": 'Rlfrtip',\n\t *          \"oColReorder\": {\n\t *              \"bRealtime\": true\n\t *          }\n\t *      } );\n\t *\n\t *  @example\n\t *      // Using `new` constructor\n\t *      $('#example').dataTable()\n\t *\n\t *      new $.fn.dataTable.ColReorder( '#example', {\n\t *          \"bRealtime\": true\n\t *      } );\n\t */\n\tbRealtime: false,\n\n\t/**\n\t * Indicate how many columns should be fixed in position (counting from the\n\t * left). This will typically be 1 if used, but can be as high as you like.\n\t *  @type int\n\t *  @default 0\n\t *  @static\n\t *  @example\n\t *      // Using the `oColReorder` option in the DataTables options object\n\t *      $('#example').dataTable( {\n\t *          \"sDom\": 'Rlfrtip',\n\t *          \"oColReorder\": {\n\t *              \"iFixedColumns\": 1\n\t *          }\n\t *      } );\n\t *\n\t *  @example\n\t *      // Using `new` constructor\n\t *      $('#example').dataTable()\n\t *\n\t *      new $.fn.dataTable.ColReorder( '#example', {\n\t *          \"iFixedColumns\": 1\n\t *      } );\n\t */\n\tiFixedColumns: 0,\n\n\t/**\n\t * As `iFixedColumnsRight` but counting from the right.\n\t *  @type int\n\t *  @default 0\n\t *  @static\n\t *  @example\n\t *      // Using the `oColReorder` option in the DataTables options object\n\t *      $('#example').dataTable( {\n\t *          \"sDom\": 'Rlfrtip',\n\t *          \"oColReorder\": {\n\t *              \"iFixedColumnsRight\": 1\n\t *          }\n\t *      } );\n\t *\n\t *  @example\n\t *      // Using `new` constructor\n\t *      $('#example').dataTable()\n\t *\n\t *      new $.fn.dataTable.ColReorder( '#example', {\n\t *          \"iFixedColumnsRight\": 1\n\t *      } );\n\t */\n\tiFixedColumnsRight: 0,\n\n\t/**\n\t * Callback function that is fired when columns are reordered\n\t *  @type function():void\n\t *  @default null\n\t *  @static\n\t *  @example\n\t *      // Using the `oColReorder` option in the DataTables options object\n\t *      $('#example').dataTable( {\n\t *          \"sDom\": 'Rlfrtip',\n\t *          \"oColReorder\": {\n\t *              \"fnReorderCallback\": function () {\n\t *                  alert( 'Columns reordered' );\n\t *              }\n\t *          }\n\t *      } );\n\t *\n\t *  @example\n\t *      // Using `new` constructor\n\t *      $('#example').dataTable()\n\t *\n\t *      new $.fn.dataTable.ColReorder( '#example', {\n\t *          \"fnReorderCallback\": function () {\n\t *              alert( 'Columns reordered' );\n\t *          }\n\t *      } );\n\t */\n\tfnReorderCallback: null\n};\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Constants\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * ColReorder version\n *  @constant  version\n *  @type      String\n *  @default   As code\n */\nColReorder.version = \"1.1.3\";\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables interfaces\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n// Expose\n$.fn.dataTable.ColReorder = ColReorder;\n$.fn.DataTable.ColReorder = ColReorder;\n\n\n// Register a new feature with DataTables\nif ( typeof $.fn.dataTable == \"function\" &&\n     typeof $.fn.dataTableExt.fnVersionCheck == \"function\" &&\n     $.fn.dataTableExt.fnVersionCheck('1.9.3') )\n{\n\t$.fn.dataTableExt.aoFeatures.push( {\n\t\t\"fnInit\": function( settings ) {\n\t\t\tvar table = settings.oInstance;\n\n\t\t\tif ( ! settings._colReorder ) {\n\t\t\t\tvar dtInit = settings.oInit;\n\t\t\t\tvar opts = dtInit.colReorder || dtInit.oColReorder || {};\n\n\t\t\t\tnew ColReorder( settings, opts );\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttable.oApi._fnLog( settings, 1, \"ColReorder attempted to initialise twice. Ignoring second\" );\n\t\t\t}\n\n\t\t\treturn null; /* No node for DataTables to insert */\n\t\t},\n\t\t\"cFeature\": \"R\",\n\t\t\"sFeature\": \"ColReorder\"\n\t} );\n}\nelse {\n\talert( \"Warning: ColReorder requires DataTables 1.9.3 or greater - www.datatables.net/download\");\n}\n\n\n// API augmentation\nif ( $.fn.dataTable.Api ) {\n\t$.fn.dataTable.Api.register( 'colReorder.reset()', function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\tctx._colReorder.fnReset();\n\t\t} );\n\t} );\n\n\t$.fn.dataTable.Api.register( 'colReorder.order()', function ( set ) {\n\t\tif ( set ) {\n\t\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\t\tctx._colReorder.fnOrder( set );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.context.length ?\n\t\t\tthis.context[0]._colReorder.fnOrder() :\n\t\t\tnull;\n\t} );\n}\n\nreturn ColReorder;\n}; // /factory\n\n\n// Define as an AMD module if possible\nif ( typeof define === 'function' && define.amd ) {\n\tdefine( ['jquery', 'datatables'], factory );\n}\nelse if ( typeof exports === 'object' ) {\n    // Node/CommonJS\n    factory( require('jquery'), require('datatables') );\n}\nelse if ( jQuery && !jQuery.fn.dataTable.ColReorder ) {\n\t// Otherwise simply initialise as normal, stopping multiple evaluation\n\tfactory( jQuery, jQuery.fn.dataTable );\n}\n\n\n})(window, document);\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/License.txt",
    "content": "Copyright (c) 2010-2015 SpryMedia Limited\nhttp://datatables.net\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/Readme.md",
    "content": "# ColVis\n\nColVis adds a button to the toolbars around DataTables which gives the end user of the table the ability to dynamically change the visibility of the columns in the table:\n\n* Dynamically show and hide columns in a table\n* Very easy integration with DataTables\n* Ability to exclude columns from being either hidden or shown\n* Save saving integration with DataTables\n\n\n# Installation\n\nTo use ColVis, first download DataTables ( http://datatables.net/download ) and place the unzipped ColVis package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser.\n\n\n# Basic usage\n\nColVis is initialised using the `C` option that it adds to DataTables' `dom` option. For example:\n\n```js\n$(document).ready( function () {\n    $('#example').dataTable( {\n        \"dom\": 'C<\"clear\">lfrtip'\n    } );\n} );\n```\n\n\n# Documentation / support\n\n* Documentation: http://datatables.net/extensions/colvis/\n* DataTables support forums: http://datatables.net/forums\n\n\n# GitHub\n\nIf you fancy getting involved with the development of ColVis and help make it better, please refer to its GitHub repo: https://github.com/DataTables/ColVis\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/css/dataTables.colVis.css",
    "content": "\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * ColVis styles\n */\ndiv.ColVis {\n\tfloat: right;\n\tmargin-bottom: 1em;\n}\n\nbutton.ColVis_Button,\nul.ColVis_collection li {\n\tposition: relative;\n\tfloat: left;\n\tmargin-right: 3px;\n\tpadding: 5px 8px;\n\tborder: 1px solid #999;\n\tcursor: pointer;\n\t*cursor: hand;\n\tfont-size: 0.88em;\n\tcolor: black !important;\n\twhite-space: nowrap;\n\n\t-webkit-border-radius: 2px;\n\t   -moz-border-radius: 2px;\n\t    -ms-border-radius: 2px;\n\t     -o-border-radius: 2px;\n\t        border-radius: 2px;\n\n\t-webkit-box-shadow: 1px 1px 3px #ccc;\n\t   -moz-box-shadow: 1px 1px 3px #ccc;\n\t    -ms-box-shadow: 1px 1px 3px #ccc;\n\t     -o-box-shadow: 1px 1px 3px #ccc;\n\t        box-shadow: 1px 1px 3px #ccc;\n\n\t/* Generated by http://www.colorzilla.com/gradient-editor/ */\n\tbackground: #ffffff; /* Old browsers */\n\tbackground: -webkit-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Chrome10+,Safari5.1+ */\n\tbackground:    -moz-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* FF3.6+ */\n\tbackground:     -ms-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* IE10+ */\n\tbackground:      -o-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Opera 11.10+ */\n\tbackground:         linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* W3C */\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#f9f9f9',GradientType=0 ); /* IE6-9 */\n}\n\n.ColVis_Button:hover,\nul.ColVis_collection li:hover {\n\tborder: 1px solid #666;\n\ttext-decoration: none !important;\n\n\t-webkit-box-shadow: 1px 1px 3px #999;\n\t   -moz-box-shadow: 1px 1px 3px #999;\n\t    -ms-box-shadow: 1px 1px 3px #999;\n\t     -o-box-shadow: 1px 1px 3px #999;\n\t        box-shadow: 1px 1px 3px #999;\n\n\tbackground: #f3f3f3; /* Old browsers */\n\tbackground: -webkit-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* Chrome10+,Safari5.1+ */\n\tbackground:    -moz-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* FF3.6+ */\n\tbackground:     -ms-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* IE10+ */\n\tbackground:      -o-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* Opera 11.10+ */\n\tbackground:         linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* W3C */\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f3f3f3', endColorstr='#f4f4f4',GradientType=0 ); /* IE6-9 */\n}\n\nbutton.ColVis_Button {\n\theight: 30px;\n\tpadding: 3px 8px;\n}\n\nbutton.ColVis_Button::-moz-focus-inner { \n\tborder: none !important;\n\tpadding: 0;\n}\n\nbutton.ColVis_Button:active { \n\toutline: none;\n}\n\n\ndiv.ColVis_collectionBackground {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\theight: 100%;\n\twidth: 100%;\n\tbackground-color: black;\n\tz-index: 1100;\n}\n\nul.ColVis_collection {\n\tlist-style: none;\n\twidth: 150px;\n\tpadding: 8px 8px 4px 8px;\n\tmargin: 0;\n\tborder: 1px solid #ccc;\n\tborder: 1px solid rgba( 0, 0, 0, 0.4 );\n\tbackground-color: #f3f3f3;\n\tbackground-color: rgba( 255, 255, 255, 0.3 );\n\toverflow: hidden;\n\tz-index: 2002;\n\n\t-webkit-border-radius: 5px;\n\t   -moz-border-radius: 5px;\n\t    -ms-border-radius: 5px;\n\t     -o-border-radius: 5px;\n\t        border-radius: 5px;\n\t\n\t-webkit-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);\n\t   -moz-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);\n\t    -ms-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);\n\t     -o-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);\n\t        box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);\n}\n\nul.ColVis_collection li {\n\tposition: relative;\n\theight: auto;\n\tleft: 0;\n\tright: 0;\n\tpadding: 0.5em;\n\n\tdisplay: block;\n\tfloat: none;\n\tmargin-bottom: 4px;\n\t\n\t-webkit-box-shadow: 1px 1px 3px #999;\n\t   -moz-box-shadow: 1px 1px 3px #999;\n\t    -ms-box-shadow: 1px 1px 3px #999;\n\t     -o-box-shadow: 1px 1px 3px #999;\n\t        box-shadow: 1px 1px 3px #999;\n}\n\nul.ColVis_collection li {\n\ttext-align: left;\n}\n\nul.ColVis_collection li.ColVis_Button:hover {\n\tborder: 1px solid #999;\n\tbackground-color: #f0f0f0;\n}\n\nul.ColVis_collection li span {\n\tdisplay: inline-block;\n\tpadding-left: 0.5em;\n\tcursor: pointer;\n}\n\n\nul.ColVis_collection li.ColVis_Special {\n\tborder-color: #555;\n\tbackground: rgb(237,237,237); /* Old browsers */\n\tbackground: -webkit-linear-gradient(top, rgba(237,237,237,1) 0%,rgba(214,214,214,1) 77%,rgba(232,232,232,1) 100%); /* Chrome10+,Safari5.1+ */\n\tbackground:    -moz-linear-gradient(top, rgba(237,237,237,1) 0%, rgba(214,214,214,1) 77%, rgba(232,232,232,1) 100%); /* FF3.6+ */\n\tbackground:     -ms-linear-gradient(top, rgba(237,237,237,1) 0%,rgba(214,214,214,1) 77%,rgba(232,232,232,1) 100%); /* IE10+ */\n\tbackground:      -o-linear-gradient(top, rgba(237,237,237,1) 0%,rgba(214,214,214,1) 77%,rgba(232,232,232,1) 100%); /* Opera 11.10+ */\n\tbackground:         linear-gradient(to bottom, rgba(237,237,237,1) 0%,rgba(214,214,214,1) 77%,rgba(232,232,232,1) 100%); /* W3C */\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ededed', endColorstr='#e8e8e8',GradientType=0 ); /* IE6-9 */\n}\n\nul.ColVis_collection li.ColVis_Special:hover {\n\tbackground: #e2e2e2; /* Old browsers */\n\tbackground: -webkit-linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* Chrome10+,Safari5.1+ */\n\tbackground:    -moz-linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* FF3.6+ */\n\tbackground:     -ms-linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* IE10+ */\n\tbackground:      -o-linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* Opera 11.10+ */\n\tbackground:         linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* W3C */\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f3f3f3', endColorstr='#e2e2e2',GradientType=0 ); /* IE6-9 */\n}\n\n\nspan.ColVis_radio {\n\tdisplay: inline-block;\n\twidth: 20px;\n}\n\ndiv.ColVis_catcher {\n\tposition: absolute;\n\tz-index: 1101;\n}\n\n.disabled {\n\tcolor: #999;\n}\n\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/css/dataTables.colvis.jqueryui.css",
    "content": "\nbutton.ColVis_Button,\nul.ColVis_collection li {\n\tpadding: 0.5em;\n}\n\nul.ColVis_collection {\n\tmargin: 0;\n\tpadding: 0;\n\toverflow: hidden;\n\tz-index: 2002;\n}\n\nul.ColVis_collection li {\n\tclear: both;\n\tdisplay: block;\n\ttext-align: left;\n\tmargin: -1px 0 0 0;\n}\n\nul.ColVis_collection li span {\n\tdisplay: inline-block;\n\tpadding-left: 0.5em;\n\tcursor: pointer;\n}\n\ndiv.ColVis_collectionBackground {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\theight: 100%;\n\twidth: 100%;\n\tbackground-color: black;\n\tz-index: 1100;\n}\n\n\ndiv.ColVis_catcher {\n\tposition: absolute;\n\tz-index: 1101;\n}"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/examples/button_order.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColVis example - Button ordering</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colVis.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colVis.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'C<\"clear\">lfrtip',\n\t\tcolVis: {\n\t\t\torder: 'alpha'\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColVis example <span>Button ordering</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>The list of columns that ColVis displays has two options for the order in which they are displayed. The default mode of operation is to show the buttons in the\n\t\t\t\tsame order as they appear in the HTML table, but the second mode of operation is to show the buttons in alphabetical order. This is done by specifying the\n\t\t\t\t<code>order</code> option, set to <code>alpha</code>. Alphabetical button ordering is shown in this example.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'C&lt;&quot;clear&quot;&gt;lfrtip',\n\t\tcolVis: {\n\t\t\torder: 'alpha'\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colVis.js\">../js/dataTables.colVis.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colVis.css\">../css/dataTables.colVis.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">`new` initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./exclude_columns.html\">Exclude columns from list</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./title_callback.html\">Column button callback</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./button_order.html\">Button ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./mouseover.html\">Mouseover activation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./group_columns.html\">Group columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Two tables with individual controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables_identical.html\">Two tables with shared controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./restore.html\">Restore / show all</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/examples/exclude_columns.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColVis example - Exclude columns from list</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colVis.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colVis.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'C<\"clear\">lfrtip',\n\t\tcolVis: {\n\t\t\texclude: [ 0 ]\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColVis example <span>Exclude columns from list</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>It can at times be useful to exclude columns from being in the 'show / hide' list (for example if you have hidden information that the end user shouldn't be\n\t\t\t\table to make visible. This can be done by the <code>exclude</code> ColVis configuration parameter when creating the DataTable. This is simply an array of integers,\n\t\t\t\tindicating which columns should be excluded. This example shows the first column being excluded.</p>\n\n\t\t\t\t<p>For full information about the ColVis options, please refer to the <a href=\"//datatables.net/extensions/colvis/options\">ColVis options documentation</a>.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'C&lt;&quot;clear&quot;&gt;lfrtip',\n\t\tcolVis: {\n\t\t\texclude: [ 0 ]\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colVis.js\">../js/dataTables.colVis.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colVis.css\">../css/dataTables.colVis.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">`new` initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./exclude_columns.html\">Exclude columns from list</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./title_callback.html\">Column button callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_order.html\">Button ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./mouseover.html\">Mouseover activation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./group_columns.html\">Group columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Two tables with individual controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables_identical.html\">Two tables with shared controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./restore.html\">Restore / show all</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/examples/group_columns.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColVis example - Group columns</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colVis.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colVis.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'C<\"clear\">lfrtip',\n\t\tcolVis: {\n\t\t\texclude: [],\n\t\t\tgroups: [\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Engine\",\n\t\t\t\t\tcolumns: [ 0, 3 ]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Client\",\n\t\t\t\t\tcolumns: [ 1, 2 ]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColVis example <span>Group columns</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>It can be useful at times to show and hide multiple columns together - i.e. grouping them together. Groupings are defined by the <code>groups</code> array.\n\t\t\t\tCreate a group button by naming it (using the <code>title</code> option) and specifying by index which columns belong to it (using the <code>columns</code>\n\t\t\t\toption).</p>\n\n\t\t\t\t<p>Note also that this ability to create groups can be used in combination <code>exclude</code> to remove individual columns from the list (should you wish them to\n\t\t\t\tonly be used in the groups), or set <code>exclude = [ 'all' ]</code> to show only the grouping buttons (i.e. individual column control buttons will not be\n\t\t\t\tshown).</p>\n\n\t\t\t\t<p>For full information about the ColVis options, please refer to the <a href=\"//datatables.net/extensions/colvis/options\">ColVis options documentation</a>.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'C&lt;&quot;clear&quot;&gt;lfrtip',\n\t\tcolVis: {\n\t\t\texclude: [],\n\t\t\tgroups: [\n\t\t\t\t{\n\t\t\t\t\ttitle: &quot;Engine&quot;,\n\t\t\t\t\tcolumns: [ 0, 3 ]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: &quot;Client&quot;,\n\t\t\t\t\tcolumns: [ 1, 2 ]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colVis.js\">../js/dataTables.colVis.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colVis.css\">../css/dataTables.colVis.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">`new` initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./exclude_columns.html\">Exclude columns from list</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./title_callback.html\">Column button callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_order.html\">Button ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./mouseover.html\">Mouseover activation</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./group_columns.html\">Group columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Two tables with individual controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables_identical.html\">Two tables with shared controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./restore.html\">Restore / show all</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/examples/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\n\t<title>ColVis examples - ColVis examples</title>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColVis example <span>ColVis examples</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>ColVis adds a button to the toolbars around DataTables which gives the end user of the table the ability to dynamically change the visibility of the columns in\n\t\t\t\tthe table:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li>Dynamically show and hide columns in a table</li>\n\t\t\t\t\t<li>Very easy integration with DataTables</li>\n\t\t\t\t\t<li>Ability to exclude columns from being either hidden or shown</li>\n\t\t\t\t\t<li>Save saving integration with DataTables</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">`new` initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./exclude_columns.html\">Exclude columns from list</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./title_callback.html\">Column button callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_order.html\">Button ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./mouseover.html\">Mouseover activation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./group_columns.html\">Group columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Two tables with individual controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables_identical.html\">Two tables with shared controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./restore.html\">Restore / show all</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/examples/jqueryui.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColVis example - jQuery UI styling</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../Plugins/integration/jqueryui/dataTables.jqueryui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colvis.jqueryui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../Plugins/integration/jqueryui/dataTables.jqueryui.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colVis.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tjQueryUI: true\n\t} );\n\tvar colvis = new $.fn.dataTable.ColVis( table );\n\n\t$( colvis.button() ).insertBefore('div.dataTables_length');\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColVis example <span>jQuery UI styling</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows how the jQuery UI ThemeRoller option in DataTables can be used with ColVis.</p>\n\n\t\t\t\t<p>The important thing to note here is that it is easier to use <code>new $.fn.dataTable.ColVis()</code> to add ColVis to the table rather than <a href=\n\t\t\t\t\"//datatables.net/reference/option/dom\"><code class=\"option\" title=\"DataTables initialisation option\">dom<span>DT</span></code></a> as the jQuery UI integration\n\t\t\t\tuses a complex expression for <a href=\"//datatables.net/reference/option/dom\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">dom<span>DT</span></code></a>.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tjQueryUI: true\n\t} );\n\tvar colvis = new $.fn.dataTable.ColVis( table );\n\n\t$( colvis.button() ).insertBefore('div.dataTables_length');\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../Plugins/integration/jqueryui/dataTables.jqueryui.js\">../../Plugins/integration/jqueryui/dataTables.jqueryui.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colVis.js\">../js/dataTables.colVis.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css\">//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../Plugins/integration/jqueryui/dataTables.jqueryui.css\">../../Plugins/integration/jqueryui/dataTables.jqueryui.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colvis.jqueryui.css\">../css/dataTables.colvis.jqueryui.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">`new` initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./exclude_columns.html\">Exclude columns from list</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./title_callback.html\">Column button callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_order.html\">Button ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./mouseover.html\">Mouseover activation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./group_columns.html\">Group columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Two tables with individual controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables_identical.html\">Two tables with shared controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./restore.html\">Restore / show all</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/examples/mouseover.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColVis example - Mouseover activation</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colVis.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colVis.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'C<\"clear\">lfrtip',\n\t\tcolVis: {\n\t\t\tactivate: \"mouseover\"\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColVis example <span>Mouseover activation</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>The default activation (showing the columns list) for ColVis is for the user to click the button. This can be altered to a <code>mouseover</code> activation by\n\t\t\t\tmaking use of the <code>activate</code> initialisation option and setting it to <code class=\"string\" title=\"String\">mouseover</code>. This is shown in the example\n\t\t\t\tbelow.</p>\n\n\t\t\t\t<p>For full information about the ColVis options, please refer to the <a href=\"//datatables.net/extensions/colvis/options\">ColVis options documentation</a>.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'C&lt;&quot;clear&quot;&gt;lfrtip',\n\t\tcolVis: {\n\t\t\tactivate: &quot;mouseover&quot;\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colVis.js\">../js/dataTables.colVis.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colVis.css\">../css/dataTables.colVis.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">`new` initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./exclude_columns.html\">Exclude columns from list</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./title_callback.html\">Column button callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_order.html\">Button ordering</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./mouseover.html\">Mouseover activation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./group_columns.html\">Group columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Two tables with individual controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables_identical.html\">Two tables with shared controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./restore.html\">Restore / show all</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/examples/new_init.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColVis example - `new` initialisation</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colVis.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colVis.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\tvar colvis = new $.fn.dataTable.ColVis( table );\n\n\t$( colvis.button() ).insertAfter('div.info');\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColVis example <span>`new` initialisation</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>As well as providing the option to be initialised through the <code>C</code> option of <a href=\"//datatables.net/reference/option/dom\"><code class=\"option\"\n\t\t\t\ttitle=\"DataTables initialisation option\">dom<span>DT</span></code></a>, ColVis can also be added to a DataTable using direct initialisation - <code>new\n\t\t\t\t$.fn.dataTable.ColVis();</code> as shown in this example. The ColVis control button it available through its <code>button()</code> method, which can then be used\n\t\t\t\tto attach to the document where you need.</p>\n\n\t\t\t\t<p>For full information about the ColVis API, please refer to the <a href=\"//datatables.net/extensions/colvis/api\">ColVis API documentation</a>.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\tvar colvis = new $.fn.dataTable.ColVis( table );\n\n\t$( colvis.button() ).insertAfter('div.info');\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colVis.js\">../js/dataTables.colVis.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colVis.css\">../css/dataTables.colVis.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./new_init.html\">`new` initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./exclude_columns.html\">Exclude columns from list</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./title_callback.html\">Column button callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_order.html\">Button ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./mouseover.html\">Mouseover activation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./group_columns.html\">Group columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Two tables with individual controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables_identical.html\">Two tables with shared controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./restore.html\">Restore / show all</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/examples/restore.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColVis example - Restore / show all</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colVis.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colVis.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'C<\"clear\">lfrtip',\n\t\tcolumnDefs: [\n\t\t\t{ visible: false, targets: 2 }\n\t\t],\n\t\tcolVis: {\n\t\t\trestore: \"Restore\",\n\t\t\tshowAll: \"Show all\",\n\t\t\tshowNone: \"Show none\"\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColVis example <span>Restore / show all</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This demo of ColVis shows its ability to add \"Restore\", \"Show all\" and \"Show none\" buttons to the list of column visibility options. This is done with the\n\t\t\t\t<code>restore</code>, <code>showAll</code> and <code>showNone</code> options which can be enabled individually if needed.</p>\n\n\t\t\t\t<p>For full information about the ColVis options, please refer to the <a href=\"//datatables.net/extensions/colvis/options\">ColVis options documentation</a>.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'C&lt;&quot;clear&quot;&gt;lfrtip',\n\t\tcolumnDefs: [\n\t\t\t{ visible: false, targets: 2 }\n\t\t],\n\t\tcolVis: {\n\t\t\trestore: &quot;Restore&quot;,\n\t\t\tshowAll: &quot;Show all&quot;,\n\t\t\tshowNone: &quot;Show none&quot;\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colVis.js\">../js/dataTables.colVis.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colVis.css\">../css/dataTables.colVis.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">`new` initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./exclude_columns.html\">Exclude columns from list</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./title_callback.html\">Column button callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_order.html\">Button ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./mouseover.html\">Mouseover activation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./group_columns.html\">Group columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Two tables with individual controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables_identical.html\">Two tables with shared controls</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./restore.html\">Restore / show all</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/examples/simple.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColVis example - Basic initialisation</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colVis.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colVis.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'C<\"clear\">lfrtip'\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColVis example <span>Basic initialisation</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>ColVis is a plug-in for DataTables which presents a list of all columns to a user and allows them to select which ones they wish to be visible. Click the 'Show\n\t\t\t\t/ hide columns' button to be presented with a list of columns in the table, and click the buttons to show and hide them as you wish.</p>\n\n\t\t\t\t<p>ColVis is added to a DataTable by specifying the <code>C</code> option for <a href=\"//datatables.net/reference/option/dom\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">dom<span>DT</span></code></a>. The example below shows the ColVis button added to the table with a clearing element after\n\t\t\t\tit.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'C&lt;&quot;clear&quot;&gt;lfrtip'\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colVis.js\">../js/dataTables.colVis.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colVis.css\">../css/dataTables.colVis.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">`new` initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./exclude_columns.html\">Exclude columns from list</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./title_callback.html\">Column button callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_order.html\">Button ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./mouseover.html\">Mouseover activation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./group_columns.html\">Group columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Two tables with individual controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables_identical.html\">Two tables with shared controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./restore.html\">Restore / show all</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/examples/text.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColVis example - Custom button text</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colVis.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colVis.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\t\"dom\": 'C<\"clear\">lfrtip',\n\t\t\"colVis\": {\n\t\t\t\"buttonText\": \"Change columns\"\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColVis example <span>Custom button text</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>You may wish to use your own text in the ColVis button - this is done by making use of the <code>buttonText</code> initialisation option, as shown in this\n\t\t\t\texample.</p>\n\n\t\t\t\t<p>For full information about the ColVis options, please refer to the <a href=\"//datatables.net/extensions/colvis/options\">ColVis options documentation</a>.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\t&quot;dom&quot;: 'C&lt;&quot;clear&quot;&gt;lfrtip',\n\t\t&quot;colVis&quot;: {\n\t\t\t&quot;buttonText&quot;: &quot;Change columns&quot;\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colVis.js\">../js/dataTables.colVis.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colVis.css\">../css/dataTables.colVis.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">`new` initialisation</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./exclude_columns.html\">Exclude columns from list</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./title_callback.html\">Column button callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_order.html\">Button ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./mouseover.html\">Mouseover activation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./group_columns.html\">Group columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Two tables with individual controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables_identical.html\">Two tables with shared controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./restore.html\">Restore / show all</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/examples/title_callback.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColVis example - Column button callback</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colVis.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colVis.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\t\"dom\": 'C<\"clear\">lfrtip',\n\t\t\"colVis\": {\n\t\t\t\"label\": function ( index, title, th ) {\n\t\t\t\treturn (index+1) +'. '+ title;\n\t\t\t}\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColVis example <span>Column button callback</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>By default ColVis will use the information in the <code class=\"tag\" title=\"HTML tag\">th</code> cell for each column as the button name to use in ColVis, which\n\t\t\t\tmight not always be what you want (for example you might has HTML in the cell that you don't want in the button). The <code>label</code> callback provides the\n\t\t\t\tability to customise the label used for the button.</p>\n\n\t\t\t\t<p>In this example the column index is prefixed to the column title.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\t&quot;dom&quot;: 'C&lt;&quot;clear&quot;&gt;lfrtip',\n\t\t&quot;colVis&quot;: {\n\t\t\t&quot;label&quot;: function ( index, title, th ) {\n\t\t\t\treturn (index+1) +'. '+ title;\n\t\t\t}\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colVis.js\">../js/dataTables.colVis.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colVis.css\">../css/dataTables.colVis.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">`new` initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./exclude_columns.html\">Exclude columns from list</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./title_callback.html\">Column button callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_order.html\">Button ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./mouseover.html\">Mouseover activation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./group_columns.html\">Group columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Two tables with individual controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables_identical.html\">Two tables with shared controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./restore.html\">Restore / show all</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/examples/two_tables.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColVis example - Two tables with individual controls</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colVis.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colVis.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('table.display').DataTable( {\n\t\tdom: 'C<\"clear\">lfrtip',\n\t\tdisplayLength: 5\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColVis example <span>Two tables with individual controls</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>It can be useful to have DataTables initialise more than one table with a single call can for them to each have individual ColVis controllers. All this requires\n\t\t\t\tis a suitable jQuery selector to be used, and DataTables and ColVis will take care of the rest - as shown in this example.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<table id=\"\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('table.display').DataTable( {\n\t\tdom: 'C&lt;&quot;clear&quot;&gt;lfrtip',\n\t\tdisplayLength: 5\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colVis.js\">../js/dataTables.colVis.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colVis.css\">../css/dataTables.colVis.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">`new` initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./exclude_columns.html\">Exclude columns from list</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./title_callback.html\">Column button callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_order.html\">Button ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./mouseover.html\">Mouseover activation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./group_columns.html\">Group columns</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./two_tables.html\">Two tables with individual controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables_identical.html\">Two tables with shared controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./restore.html\">Restore / show all</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/examples/two_tables_identical.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>ColVis example - Two tables with shared controls</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.colVis.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.colVis.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar tables = $('table.display').DataTable( {\n\t\tdisplayLength: 5\n\t} );\n\n\t// When the column visibility changes on the firs table, also change it on\n\t// the others\n\ttables.table(0).on('column-visibility', function ( e, settings, colIdx, visibility ) {\n\t\ttables.tables(':gt(0)').column( colIdx ).visible( visibility );\n\t} );\n\n\t// Create ColVis on the first table only\n\tvar colvis = new $.fn.dataTable.ColVis( tables.table(0) );\n\t$( colvis.button() ).insertAfter('div.info');\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>ColVis example <span>Two tables with shared controls</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows how the DataTables API can be used with ColVis to use a single ColVis control to effect other tables. This is done by applying ColVis to the\n\t\t\t\tfirst table and then listening for the <a href=\"//datatables.net/reference/event/column-visibility\"><code class=\"event\" title=\n\t\t\t\t\"DataTables event\">column-visibility<span>DT</span></code></a> event and updating all other tables when triggered.</p>\n\n\t\t\t\t<p>This example makes use of the <a href=\"//datatables.net/reference/api/tables()\"><code class=\"api\" title=\n\t\t\t\t\"DataTables API method\">tables()<span>DT</span></code></a> and <a href=\"//datatables.net/reference/api/table()\"><code class=\"api\" title=\n\t\t\t\t\"DataTables API method\">table()<span>DT</span></code></a> methods for working with multiple tables, and also initialised ColVis using the <code>new\n\t\t\t\t$.fn.dataTable.ColVis();</code> operator.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<table id=\"\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar tables = $('table.display').DataTable( {\n\t\tdisplayLength: 5\n\t} );\n\n\t// When the column visibility changes on the firs table, also change it on\n\t// the others\n\ttables.table(0).on('column-visibility', function ( e, settings, colIdx, visibility ) {\n\t\ttables.tables(':gt(0)').column( colIdx ).visible( visibility );\n\t} );\n\n\t// Create ColVis on the first table only\n\tvar colvis = new $.fn.dataTable.ColVis( tables.table(0) );\n\t$( colvis.button() ).insertAfter('div.info');\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.colVis.js\">../js/dataTables.colVis.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.colVis.css\">../css/dataTables.colVis.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">`new` initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./exclude_columns.html\">Exclude columns from list</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./title_callback.html\">Column button callback</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_order.html\">Button ordering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./mouseover.html\">Mouseover activation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./group_columns.html\">Group columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Two tables with individual controls</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./two_tables_identical.html\">Two tables with shared controls</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./restore.html\">Restore / show all</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/ColVis/js/dataTables.colVis.js",
    "content": "/*! ColVis 1.1.2\n * ©2010-2015 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     ColVis\n * @description Controls for column visibility in DataTables\n * @version     1.1.2\n * @file        dataTables.colReorder.js\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     www.sprymedia.co.uk/contact\n * @copyright   Copyright 2010-2015 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n(function(window, document, undefined) {\n\n\nvar factory = function( $, DataTable ) {\n\"use strict\";\n\n/**\n * ColVis provides column visibility control for DataTables\n *\n * @class ColVis\n * @constructor\n * @param {object} DataTables settings object. With DataTables 1.10 this can\n *   also be and API instance, table node, jQuery collection or jQuery selector.\n * @param {object} ColVis configuration options\n */\nvar ColVis = function( oDTSettings, oInit )\n{\n\t/* Santiy check that we are a new instance */\n\tif ( !this.CLASS || this.CLASS != \"ColVis\" )\n\t{\n\t\talert( \"Warning: ColVis must be initialised with the keyword 'new'\" );\n\t}\n\n\tif ( typeof oInit == 'undefined' )\n\t{\n\t\toInit = {};\n\t}\n\n\tvar camelToHungarian = $.fn.dataTable.camelToHungarian;\n\tif ( camelToHungarian ) {\n\t\tcamelToHungarian( ColVis.defaults, ColVis.defaults, true );\n\t\tcamelToHungarian( ColVis.defaults, oInit );\n\t}\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public class variables\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * @namespace Settings object which contains customisable information for\n\t *     ColVis instance. Augmented by ColVis.defaults\n\t */\n\tthis.s = {\n\t\t/**\n\t\t * DataTables settings object\n\t\t *  @property dt\n\t\t *  @type     Object\n\t\t *  @default  null\n\t\t */\n\t\t\"dt\": null,\n\n\t\t/**\n\t\t * Customisation object\n\t\t *  @property oInit\n\t\t *  @type     Object\n\t\t *  @default  passed in\n\t\t */\n\t\t\"oInit\": oInit,\n\n\t\t/**\n\t\t * Flag to say if the collection is hidden\n\t\t *  @property hidden\n\t\t *  @type     boolean\n\t\t *  @default  true\n\t\t */\n\t\t\"hidden\": true,\n\n\t\t/**\n\t\t * Store the original visibility settings so they could be restored\n\t\t *  @property abOriginal\n\t\t *  @type     Array\n\t\t *  @default  []\n\t\t */\n\t\t\"abOriginal\": []\n\t};\n\n\n\t/**\n\t * @namespace Common and useful DOM elements for the class instance\n\t */\n\tthis.dom = {\n\t\t/**\n\t\t * Wrapper for the button - given back to DataTables as the node to insert\n\t\t *  @property wrapper\n\t\t *  @type     Node\n\t\t *  @default  null\n\t\t */\n\t\t\"wrapper\": null,\n\n\t\t/**\n\t\t * Activation button\n\t\t *  @property button\n\t\t *  @type     Node\n\t\t *  @default  null\n\t\t */\n\t\t\"button\": null,\n\n\t\t/**\n\t\t * Collection list node\n\t\t *  @property collection\n\t\t *  @type     Node\n\t\t *  @default  null\n\t\t */\n\t\t\"collection\": null,\n\n\t\t/**\n\t\t * Background node used for shading the display and event capturing\n\t\t *  @property background\n\t\t *  @type     Node\n\t\t *  @default  null\n\t\t */\n\t\t\"background\": null,\n\n\t\t/**\n\t\t * Element to position over the activation button to catch mouse events when using mouseover\n\t\t *  @property catcher\n\t\t *  @type     Node\n\t\t *  @default  null\n\t\t */\n\t\t\"catcher\": null,\n\n\t\t/**\n\t\t * List of button elements\n\t\t *  @property buttons\n\t\t *  @type     Array\n\t\t *  @default  []\n\t\t */\n\t\t\"buttons\": [],\n\n\t\t/**\n\t\t * List of group button elements\n\t\t *  @property groupButtons\n\t\t *  @type     Array\n\t\t *  @default  []\n\t\t */\n\t\t\"groupButtons\": [],\n\n\t\t/**\n\t\t * Restore button\n\t\t *  @property restore\n\t\t *  @type     Node\n\t\t *  @default  null\n\t\t */\n\t\t\"restore\": null\n\t};\n\n\t/* Store global reference */\n\tColVis.aInstances.push( this );\n\n\t/* Constructor logic */\n\tthis.s.dt = $.fn.dataTable.Api ?\n\t\tnew $.fn.dataTable.Api( oDTSettings ).settings()[0] :\n\t\toDTSettings;\n\n\tthis._fnConstruct( oInit );\n\treturn this;\n};\n\n\n\nColVis.prototype = {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Get the ColVis instance's control button so it can be injected into the\n\t * DOM\n\t *  @method  button\n\t *  @returns {node} ColVis button\n\t */\n\tbutton: function ()\n\t{\n\t\treturn this.dom.wrapper;\n\t},\n\n\t/**\n\t * Alias of `rebuild` for backwards compatibility\n\t *  @method  fnRebuild\n\t */\n\t\"fnRebuild\": function ()\n\t{\n\t\tthis.rebuild();\n\t},\n\n\t/**\n\t * Rebuild the list of buttons for this instance (i.e. if there is a column\n\t * header update)\n\t *  @method  fnRebuild\n\t */\n\trebuild: function ()\n\t{\n\t\t/* Remove the old buttons */\n\t\tfor ( var i=this.dom.buttons.length-1 ; i>=0 ; i-- ) {\n\t\t\tthis.dom.collection.removeChild( this.dom.buttons[i] );\n\t\t}\n\t\tthis.dom.buttons.splice( 0, this.dom.buttons.length );\n\t\tthis.dom.groupButtons.splice(0, this.dom.groupButtons.length);\n\n\t\tif ( this.dom.restore ) {\n\t\t\tthis.dom.restore.parentNode( this.dom.restore );\n\t\t}\n\n\t\t/* Re-add them (this is not the optimal way of doing this, it is fast and effective) */\n\t\tthis._fnAddGroups();\n\t\tthis._fnAddButtons();\n\n\t\t/* Update the checkboxes */\n\t\tthis._fnDrawCallback();\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods (they are of course public in JS, but recommended as private)\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Constructor logic\n\t *  @method  _fnConstruct\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnConstruct\": function ( init )\n\t{\n\t\tthis._fnApplyCustomisation( init );\n\n\t\tvar that = this;\n\t\tvar i, iLen;\n\t\tthis.dom.wrapper = document.createElement('div');\n\t\tthis.dom.wrapper.className = \"ColVis\";\n\n\t\tthis.dom.button = $( '<button />', {\n\t\t\t\t'class': !this.s.dt.bJUI ?\n\t\t\t\t\t\"ColVis_Button ColVis_MasterButton\" :\n\t\t\t\t\t\"ColVis_Button ColVis_MasterButton ui-button ui-state-default\"\n\t\t\t} )\n\t\t\t.append( '<span>'+this.s.buttonText+'</span>' )\n\t\t\t.bind( this.s.activate==\"mouseover\" ? \"mouseover\" : \"click\", function (e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthat._fnCollectionShow();\n\t\t\t} )\n\t\t\t.appendTo( this.dom.wrapper )[0];\n\n\t\tthis.dom.catcher = this._fnDomCatcher();\n\t\tthis.dom.collection = this._fnDomCollection();\n\t\tthis.dom.background = this._fnDomBackground();\n\n\t\tthis._fnAddGroups();\n\t\tthis._fnAddButtons();\n\n\t\t/* Store the original visibility information */\n\t\tfor ( i=0, iLen=this.s.dt.aoColumns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tthis.s.abOriginal.push( this.s.dt.aoColumns[i].bVisible );\n\t\t}\n\n\t\t/* Update on each draw */\n\t\tthis.s.dt.aoDrawCallback.push( {\n\t\t\t\"fn\": function () {\n\t\t\t\tthat._fnDrawCallback.call( that );\n\t\t\t},\n\t\t\t\"sName\": \"ColVis\"\n\t\t} );\n\n\t\t/* If columns are reordered, then we need to update our exclude list and\n\t\t * rebuild the displayed list\n\t\t */\n\t\t$(this.s.dt.oInstance).bind( 'column-reorder.dt', function ( e, oSettings, oReorder ) {\n\t\t\tfor ( i=0, iLen=that.s.aiExclude.length ; i<iLen ; i++ ) {\n\t\t\t\tthat.s.aiExclude[i] = oReorder.aiInvertMapping[ that.s.aiExclude[i] ];\n\t\t\t}\n\n\t\t\tvar mStore = that.s.abOriginal.splice( oReorder.iFrom, 1 )[0];\n\t\t\tthat.s.abOriginal.splice( oReorder.iTo, 0, mStore );\n\n\t\t\tthat.fnRebuild();\n\t\t} );\n\n\t\t$(this.s.dt.oInstance).bind( 'destroy.dt', function () {\n\t\t\t$(that.dom.wrapper).remove();\n\t\t} );\n\n\t\t// Set the initial state\n\t\tthis._fnDrawCallback();\n\t},\n\n\n\t/**\n\t * Apply any customisation to the settings from the DataTables initialisation\n\t *  @method  _fnApplyCustomisation\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnApplyCustomisation\": function ( init )\n\t{\n\t\t$.extend( true, this.s, ColVis.defaults, init );\n\n\t\t// Slightly messy overlap for the camelCase notation\n\t\tif ( ! this.s.showAll && this.s.bShowAll ) {\n\t\t\tthis.s.showAll = this.s.sShowAll;\n\t\t}\n\n\t\tif ( ! this.s.restore && this.s.bRestore ) {\n\t\t\tthis.s.restore = this.s.sRestore;\n\t\t}\n\n\t\t// CamelCase to Hungarian for the column groups \n\t\tvar groups = this.s.groups;\n\t\tvar hungarianGroups = this.s.aoGroups;\n\t\tif ( groups ) {\n\t\t\tfor ( var i=0, ien=groups.length ; i<ien ; i++ ) {\n\t\t\t\tif ( groups[i].title ) {\n\t\t\t\t\thungarianGroups[i].sTitle = groups[i].title;\n\t\t\t\t}\n\t\t\t\tif ( groups[i].columns ) {\n\t\t\t\t\thungarianGroups[i].aiColumns = groups[i].columns;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/**\n\t * On each table draw, check the visibility checkboxes as needed. This allows any process to\n\t * update the table's column visibility and ColVis will still be accurate.\n\t *  @method  _fnDrawCallback\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnDrawCallback\": function ()\n\t{\n\t\tvar columns = this.s.dt.aoColumns;\n\t\tvar buttons = this.dom.buttons;\n\t\tvar groups = this.s.aoGroups;\n\t\tvar button;\n\n\t\tfor ( var i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif ( button.__columnIdx !== undefined ) {\n\t\t\t\t$('input', button).prop( 'checked', columns[ button.__columnIdx ].bVisible );\n\t\t\t}\n\t\t}\n\n\t\tvar allVisible = function ( columnIndeces ) {\n\t\t\tfor ( var k=0, kLen=columnIndeces.length ; k<kLen ; k++ )\n\t\t\t{\n\t\t\t\tif (  columns[columnIndeces[k]].bVisible === false ) { return false; }\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\tvar allHidden = function ( columnIndeces ) {\n\t\t\tfor ( var m=0 , mLen=columnIndeces.length ; m<mLen ; m++ )\n\t\t\t{\n\t\t\t\tif ( columns[columnIndeces[m]].bVisible === true ) { return false; }\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tfor ( var j=0, jLen=groups.length ; j<jLen ; j++ )\n\t\t{\n\t\t\tif ( allVisible(groups[j].aiColumns) )\n\t\t\t{\n\t\t\t\t$('input', this.dom.groupButtons[j]).prop('checked', true);\n\t\t\t\t$('input', this.dom.groupButtons[j]).prop('indeterminate', false);\n\t\t\t}\n\t\t\telse if ( allHidden(groups[j].aiColumns) )\n\t\t\t{\n\t\t\t\t$('input', this.dom.groupButtons[j]).prop('checked', false);\n\t\t\t\t$('input', this.dom.groupButtons[j]).prop('indeterminate', false);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t$('input', this.dom.groupButtons[j]).prop('indeterminate', true);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/**\n\t * Loop through the groups (provided in the settings) and create a button for each.\n\t *  @method  _fnAddgroups\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnAddGroups\": function ()\n\t{\n\t\tvar nButton;\n\n\t\tif ( typeof this.s.aoGroups != 'undefined' )\n\t\t{\n\t\t\tfor ( var i=0, iLen=this.s.aoGroups.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tnButton = this._fnDomGroupButton( i );\n\t\t\t\tthis.dom.groupButtons.push( nButton );\n\t\t\t\tthis.dom.buttons.push( nButton );\n\t\t\t\tthis.dom.collection.appendChild( nButton );\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/**\n\t * Loop through the columns in the table and as a new button for each one.\n\t *  @method  _fnAddButtons\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnAddButtons\": function ()\n\t{\n\t\tvar\n\t\t\tnButton,\n\t\t\tcolumns = this.s.dt.aoColumns;\n\n\t\tif ( $.inArray( 'all', this.s.aiExclude ) === -1 ) {\n\t\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tif ( $.inArray( i, this.s.aiExclude ) === -1 )\n\t\t\t\t{\n\t\t\t\t\tnButton = this._fnDomColumnButton( i );\n\t\t\t\t\tnButton.__columnIdx = i;\n\t\t\t\t\tthis.dom.buttons.push( nButton );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( this.s.order === 'alpha' ) {\n\t\t\tthis.dom.buttons.sort( function ( a, b ) {\n\t\t\t\tvar titleA = columns[ a.__columnIdx ].sTitle;\n\t\t\t\tvar titleB = columns[ b.__columnIdx ].sTitle;\n\n\t\t\t\treturn titleA === titleB ?\n\t\t\t\t\t0 :\n\t\t\t\t\ttitleA < titleB ?\n\t\t\t\t\t\t-1 :\n\t\t\t\t\t\t1;\n\t\t\t} );\n\t\t}\n\n\t\tif ( this.s.restore )\n\t\t{\n\t\t\tnButton = this._fnDomRestoreButton();\n\t\t\tnButton.className += \" ColVis_Restore\";\n\t\t\tthis.dom.buttons.push( nButton );\n\t\t}\n\n\t\tif ( this.s.showAll )\n\t\t{\n\t\t\tnButton = this._fnDomShowXButton( this.s.showAll, true );\n\t\t\tnButton.className += \" ColVis_ShowAll\";\n\t\t\tthis.dom.buttons.push( nButton );\n\t\t}\n\n\t\tif ( this.s.showNone )\n\t\t{\n\t\t\tnButton = this._fnDomShowXButton( this.s.showNone, false );\n\t\t\tnButton.className += \" ColVis_ShowNone\";\n\t\t\tthis.dom.buttons.push( nButton );\n\t\t}\n\n\t\t$(this.dom.collection).append( this.dom.buttons );\n\t},\n\n\n\t/**\n\t * Create a button which allows a \"restore\" action\n\t *  @method  _fnDomRestoreButton\n\t *  @returns {Node} Created button\n\t *  @private\n\t */\n\t\"_fnDomRestoreButton\": function ()\n\t{\n\t\tvar\n\t\t\tthat = this,\n\t\t\tdt = this.s.dt;\n\n\t\treturn $(\n\t\t\t\t'<li class=\"ColVis_Special '+(dt.bJUI ? 'ui-button ui-state-default' : '')+'\">'+\n\t\t\t\t\tthis.s.restore+\n\t\t\t\t'</li>'\n\t\t\t)\n\t\t\t.click( function (e) {\n\t\t\t\tfor ( var i=0, iLen=that.s.abOriginal.length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\tthat.s.dt.oInstance.fnSetColumnVis( i, that.s.abOriginal[i], false );\n\t\t\t\t}\n\t\t\t\tthat._fnAdjustOpenRows();\n\t\t\t\tthat.s.dt.oInstance.fnAdjustColumnSizing( false );\n\t\t\t\tthat.s.dt.oInstance.fnDraw( false );\n\t\t\t} )[0];\n\t},\n\n\n\t/**\n\t * Create a button which allows show all and show node actions\n\t *  @method  _fnDomShowXButton\n\t *  @returns {Node} Created button\n\t *  @private\n\t */\n\t\"_fnDomShowXButton\": function ( str, action )\n\t{\n\t\tvar\n\t\t\tthat = this,\n\t\t\tdt = this.s.dt;\n\n\t\treturn $(\n\t\t\t\t'<li class=\"ColVis_Special '+(dt.bJUI ? 'ui-button ui-state-default' : '')+'\">'+\n\t\t\t\t\tstr+\n\t\t\t\t'</li>'\n\t\t\t)\n\t\t\t.click( function (e) {\n\t\t\t\tfor ( var i=0, iLen=that.s.abOriginal.length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\tif (that.s.aiExclude.indexOf(i) === -1)\n\t\t\t\t\t{\n\t\t\t\t\t\tthat.s.dt.oInstance.fnSetColumnVis( i, action, false );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthat._fnAdjustOpenRows();\n\t\t\t\tthat.s.dt.oInstance.fnAdjustColumnSizing( false );\n\t\t\t\tthat.s.dt.oInstance.fnDraw( false );\n\t\t\t} )[0];\n\t},\n\n\n\t/**\n\t * Create the DOM for a show / hide group button\n\t *  @method  _fnDomGroupButton\n\t *  @param {int} i Group in question, order based on that provided in settings\n\t *  @returns {Node} Created button\n\t *  @private\n\t */\n\t\"_fnDomGroupButton\": function ( i )\n\t{\n\t\tvar\n\t\t\tthat = this,\n\t\t\tdt = this.s.dt,\n\t\t\toGroup = this.s.aoGroups[i];\n\n\t\treturn $(\n\t\t\t\t'<li class=\"ColVis_Special '+(dt.bJUI ? 'ui-button ui-state-default' : '')+'\">'+\n\t\t\t\t\t'<label>'+\n\t\t\t\t\t\t'<input type=\"checkbox\" />'+\n\t\t\t\t\t\t'<span>'+oGroup.sTitle+'</span>'+\n\t\t\t\t\t'</label>'+\n\t\t\t\t'</li>'\n\t\t\t)\n\t\t\t.click( function (e) {\n\t\t\t\tvar showHide = !$('input', this).is(\":checked\");\n\t\t\t\tif (  e.target.nodeName.toLowerCase() !== \"li\" )\n\t\t\t\t{\n\t\t\t\t\tshowHide = ! showHide;\n\t\t\t\t}\n\n\t\t\t\tfor ( var j=0 ; j < oGroup.aiColumns.length ; j++ )\n\t\t\t\t{\n\t\t\t\t\tthat.s.dt.oInstance.fnSetColumnVis( oGroup.aiColumns[j], showHide );\n\t\t\t\t}\n\t\t\t} )[0];\n\t},\n\n\n\t/**\n\t * Create the DOM for a show / hide button\n\t *  @method  _fnDomColumnButton\n\t *  @param {int} i Column in question\n\t *  @returns {Node} Created button\n\t *  @private\n\t */\n\t\"_fnDomColumnButton\": function ( i )\n\t{\n\t\tvar\n\t\t\tthat = this,\n\t\t\tcolumn = this.s.dt.aoColumns[i],\n\t\t\tdt = this.s.dt;\n\n\t\tvar title = this.s.fnLabel===null ?\n\t\t\tcolumn.sTitle :\n\t\t\tthis.s.fnLabel( i, column.sTitle, column.nTh );\n\n\t\treturn $(\n\t\t\t\t'<li '+(dt.bJUI ? 'class=\"ui-button ui-state-default\"' : '')+'>'+\n\t\t\t\t\t'<label>'+\n\t\t\t\t\t\t'<input type=\"checkbox\" />'+\n\t\t\t\t\t\t'<span>'+title+'</span>'+\n\t\t\t\t\t'</label>'+\n\t\t\t\t'</li>'\n\t\t\t)\n\t\t\t.click( function (e) {\n\t\t\t\tvar showHide = !$('input', this).is(\":checked\");\n\t\t\t\tif (  e.target.nodeName.toLowerCase() !== \"li\" )\n\t\t\t\t{\n\t\t\t\t\tif ( e.target.nodeName.toLowerCase() == \"input\" || that.s.fnStateChange === null )\n\t\t\t\t\t{\n\t\t\t\t\t\tshowHide = ! showHide;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* Need to consider the case where the initialiser created more than one table - change the\n\t\t\t\t * API index that DataTables is using\n\t\t\t\t */\n\t\t\t\tvar oldIndex = $.fn.dataTableExt.iApiIndex;\n\t\t\t\t$.fn.dataTableExt.iApiIndex = that._fnDataTablesApiIndex.call(that);\n\n\t\t\t\t// Optimisation for server-side processing when scrolling - don't do a full redraw\n\t\t\t\tif ( dt.oFeatures.bServerSide )\n\t\t\t\t{\n\t\t\t\t\tthat.s.dt.oInstance.fnSetColumnVis( i, showHide, false );\n\t\t\t\t\tthat.s.dt.oInstance.fnAdjustColumnSizing( false );\n\t\t\t\t\tif (dt.oScroll.sX !== \"\" || dt.oScroll.sY !== \"\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tthat.s.dt.oInstance.oApi._fnScrollDraw( that.s.dt );\n\t\t\t\t\t}\n\t\t\t\t\tthat._fnDrawCallback();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthat.s.dt.oInstance.fnSetColumnVis( i, showHide );\n\t\t\t\t}\n\n\t\t\t\t$.fn.dataTableExt.iApiIndex = oldIndex; /* Restore */\n\n\t\t\t\tif ( that.s.fnStateChange !== null )\n\t\t\t\t{\n\t\t\t\t\tif ( e.target.nodeName.toLowerCase() == \"span\" )\n\t\t\t\t\t{\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tthat.s.fnStateChange.call( that, i, showHide );\n\t\t\t\t}\n\t\t\t} )[0];\n\t},\n\n\n\t/**\n\t * Get the position in the DataTables instance array of the table for this\n\t * instance of ColVis\n\t *  @method  _fnDataTablesApiIndex\n\t *  @returns {int} Index\n\t *  @private\n\t */\n\t\"_fnDataTablesApiIndex\": function ()\n\t{\n\t\tfor ( var i=0, iLen=this.s.dt.oInstance.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( this.s.dt.oInstance[i] == this.s.dt.nTable )\n\t\t\t{\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t},\n\n\n\t/**\n\t * Create the element used to contain list the columns (it is shown and\n\t * hidden as needed)\n\t *  @method  _fnDomCollection\n\t *  @returns {Node} div container for the collection\n\t *  @private\n\t */\n\t\"_fnDomCollection\": function ()\n\t{\n\t\treturn $('<ul />', {\n\t\t\t\t'class': !this.s.dt.bJUI ?\n\t\t\t\t\t\"ColVis_collection\" :\n\t\t\t\t\t\"ColVis_collection ui-buttonset ui-buttonset-multi\"\n\t\t\t} )\n\t\t.css( {\n\t\t\t'display': 'none',\n\t\t\t'opacity': 0,\n\t\t\t'position': ! this.s.bCssPosition ?\n\t\t\t\t'absolute' :\n\t\t\t\t''\n\t\t} )[0];\n\t},\n\n\n\t/**\n\t * An element to be placed on top of the activate button to catch events\n\t *  @method  _fnDomCatcher\n\t *  @returns {Node} div container for the collection\n\t *  @private\n\t */\n\t\"_fnDomCatcher\": function ()\n\t{\n\t\tvar\n\t\t\tthat = this,\n\t\t\tnCatcher = document.createElement('div');\n\t\tnCatcher.className = \"ColVis_catcher\";\n\n\t\t$(nCatcher).click( function () {\n\t\t\tthat._fnCollectionHide.call( that, null, null );\n\t\t} );\n\n\t\treturn nCatcher;\n\t},\n\n\n\t/**\n\t * Create the element used to shade the background, and capture hide events (it is shown and\n\t * hidden as needed)\n\t *  @method  _fnDomBackground\n\t *  @returns {Node} div container for the background\n\t *  @private\n\t */\n\t\"_fnDomBackground\": function ()\n\t{\n\t\tvar that = this;\n\n\t\tvar background = $('<div></div>')\n\t\t\t.addClass( 'ColVis_collectionBackground' )\n\t\t\t.css( 'opacity', 0 )\n\t\t\t.click( function () {\n\t\t\t\tthat._fnCollectionHide.call( that, null, null );\n\t\t\t} );\n\n\t\t/* When considering a mouse over action for the activation, we also consider a mouse out\n\t\t * which is the same as a mouse over the background - without all the messing around of\n\t\t * bubbling events. Use the catcher element to avoid messing around with bubbling\n\t\t */\n\t\tif ( this.s.activate == \"mouseover\" )\n\t\t{\n\t\t\tbackground.mouseover( function () {\n\t\t\t\tthat.s.overcollection = false;\n\t\t\t\tthat._fnCollectionHide.call( that, null, null );\n\t\t\t} );\n\t\t}\n\n\t\treturn background[0];\n\t},\n\n\n\t/**\n\t * Show the show / hide list and the background\n\t *  @method  _fnCollectionShow\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnCollectionShow\": function ()\n\t{\n\t\tvar that = this, i, iLen, iLeft;\n\t\tvar oPos = $(this.dom.button).offset();\n\t\tvar nHidden = this.dom.collection;\n\t\tvar nBackground = this.dom.background;\n\t\tvar iDivX = parseInt(oPos.left, 10);\n\t\tvar iDivY = parseInt(oPos.top + $(this.dom.button).outerHeight(), 10);\n\n\t\tif ( ! this.s.bCssPosition )\n\t\t{\n\t\t\tnHidden.style.top = iDivY+\"px\";\n\t\t\tnHidden.style.left = iDivX+\"px\";\n\t\t}\n\n\t\t$(nHidden).css( {\n\t\t\t'display': 'block',\n\t\t\t'opacity': 0\n\t\t} );\n\n\t\tnBackground.style.bottom ='0px';\n\t\tnBackground.style.right = '0px';\n\n\t\tvar oStyle = this.dom.catcher.style;\n\t\toStyle.height = $(this.dom.button).outerHeight()+\"px\";\n\t\toStyle.width = $(this.dom.button).outerWidth()+\"px\";\n\t\toStyle.top = oPos.top+\"px\";\n\t\toStyle.left = iDivX+\"px\";\n\n\t\tdocument.body.appendChild( nBackground );\n\t\tdocument.body.appendChild( nHidden );\n\t\tdocument.body.appendChild( this.dom.catcher );\n\n\t\t/* This results in a very small delay for the end user but it allows the animation to be\n\t\t * much smoother. If you don't want the animation, then the setTimeout can be removed\n\t\t */\n\t\t$(nHidden).animate({\"opacity\": 1}, that.s.iOverlayFade);\n\t\t$(nBackground).animate({\"opacity\": 0.1}, that.s.iOverlayFade, 'linear', function () {\n\t\t\t/* In IE6 if you set the checked attribute of a hidden checkbox, then this is not visually\n\t\t\t * reflected. As such, we need to do it here, once it is visible. Unbelievable.\n\t\t\t */\n\t\t\tif ( $.browser && $.browser.msie && $.browser.version == \"6.0\" )\n\t\t\t{\n\t\t\t\tthat._fnDrawCallback();\n\t\t\t}\n\t\t});\n\n\t\t/* Visual corrections to try and keep the collection visible */\n\t\tif ( !this.s.bCssPosition )\n\t\t{\n\t\t\tiLeft = ( this.s.sAlign==\"left\" ) ?\n\t\t\t\tiDivX :\n\t\t\t\tiDivX - $(nHidden).outerWidth() + $(this.dom.button).outerWidth();\n\n\t\t\tnHidden.style.left = iLeft+\"px\";\n\n\t\t\tvar iDivWidth = $(nHidden).outerWidth();\n\t\t\tvar iDivHeight = $(nHidden).outerHeight();\n\t\t\tvar iDocWidth = $(document).width();\n\n\t\t\tif ( iLeft + iDivWidth > iDocWidth )\n\t\t\t{\n\t\t\t\tnHidden.style.left = (iDocWidth-iDivWidth)+\"px\";\n\t\t\t}\n\t\t}\n\n\t\tthis.s.hidden = false;\n\t},\n\n\n\t/**\n\t * Hide the show / hide list and the background\n\t *  @method  _fnCollectionHide\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnCollectionHide\": function (  )\n\t{\n\t\tvar that = this;\n\n\t\tif ( !this.s.hidden && this.dom.collection !== null )\n\t\t{\n\t\t\tthis.s.hidden = true;\n\n\t\t\t$(this.dom.collection).animate({\"opacity\": 0}, that.s.iOverlayFade, function (e) {\n\t\t\t\tthis.style.display = \"none\";\n\t\t\t} );\n\n\t\t\t$(this.dom.background).animate({\"opacity\": 0}, that.s.iOverlayFade, function (e) {\n\t\t\t\tdocument.body.removeChild( that.dom.background );\n\t\t\t\tdocument.body.removeChild( that.dom.catcher );\n\t\t\t} );\n\t\t}\n\t},\n\n\n\t/**\n\t * Alter the colspan on any fnOpen rows\n\t */\n\t\"_fnAdjustOpenRows\": function ()\n\t{\n\t\tvar aoOpen = this.s.dt.aoOpenRows;\n\t\tvar iVisible = this.s.dt.oApi._fnVisbleColumns( this.s.dt );\n\n\t\tfor ( var i=0, iLen=aoOpen.length ; i<iLen ; i++ ) {\n\t\t\taoOpen[i].nTr.getElementsByTagName('td')[0].colSpan = iVisible;\n\t\t}\n\t}\n};\n\n\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Static object methods\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Rebuild the collection for a given table, or all tables if no parameter given\n *  @method  ColVis.fnRebuild\n *  @static\n *  @param   object oTable DataTable instance to consider - optional\n *  @returns void\n */\nColVis.fnRebuild = function ( oTable )\n{\n\tvar nTable = null;\n\tif ( typeof oTable != 'undefined' )\n\t{\n\t\tnTable = $.fn.dataTable.Api ?\n\t\t\tnew $.fn.dataTable.Api( oTable ).table().node() :\n\t\t\toTable.fnSettings().nTable;\n\t}\n\n\tfor ( var i=0, iLen=ColVis.aInstances.length ; i<iLen ; i++ )\n\t{\n\t\tif ( typeof oTable == 'undefined' || nTable == ColVis.aInstances[i].s.dt.nTable )\n\t\t{\n\t\t\tColVis.aInstances[i].fnRebuild();\n\t\t}\n\t}\n};\n\n\nColVis.defaults = {\n\t/**\n\t * Mode of activation. Can be 'click' or 'mouseover'\n\t *  @property activate\n\t *  @type     string\n\t *  @default  click\n\t */\n\tactive: 'click',\n\n\t/**\n\t * Text used for the button\n\t *  @property buttonText\n\t *  @type     string\n\t *  @default  Show / hide columns\n\t */\n\tbuttonText: 'Show / hide columns',\n\n\t/**\n\t * List of columns (integers) which should be excluded from the list\n\t *  @property aiExclude\n\t *  @type     array\n\t *  @default  []\n\t */\n\taiExclude: [],\n\n\t/**\n\t * Show restore button\n\t *  @property bRestore\n\t *  @type     boolean\n\t *  @default  false\n\t */\n\tbRestore: false,\n\n\t/**\n\t * Restore button text\n\t *  @property sRestore\n\t *  @type     string\n\t *  @default  Restore original\n\t */\n\tsRestore: 'Restore original',\n\n\t/**\n\t * Show Show-All button\n\t *  @property bShowAll\n\t *  @type     boolean\n\t *  @default  false\n\t */\n\tbShowAll: false,\n\n\t/**\n\t * Show All button text\n\t *  @property sShowAll\n\t *  @type     string\n\t *  @default  Restore original\n\t */\n\tsShowAll: 'Show All',\n\n\t/**\n\t * Position of the collection menu when shown - align \"left\" or \"right\"\n\t *  @property sAlign\n\t *  @type     string\n\t *  @default  left\n\t */\n\tsAlign: 'left',\n\n\t/**\n\t * Callback function to tell the user when the state has changed\n\t *  @property fnStateChange\n\t *  @type     function\n\t *  @default  null\n\t */\n\tfnStateChange: null,\n\n\t/**\n\t * Overlay animation duration in mS\n\t *  @property iOverlayFade\n\t *  @type     integer|false\n\t *  @default  500\n\t */\n\tiOverlayFade: 500,\n\n\t/**\n\t * Label callback for column names. Takes three parameters: 1. the\n\t * column index, 2. the column title detected by DataTables and 3. the\n\t * TH node for the column\n\t *  @property fnLabel\n\t *  @type     function\n\t *  @default  null\n\t */\n\tfnLabel: null,\n\n\t/**\n\t * Indicate if the column list should be positioned by Javascript,\n\t * visually below the button or allow CSS to do the positioning\n\t *  @property bCssPosition\n\t *  @type     boolean\n\t *  @default  false\n\t */\n\tbCssPosition: false,\n\n\t/**\n\t * Group buttons\n\t *  @property aoGroups\n\t *  @type     array\n\t *  @default  []\n\t */\n\taoGroups: [],\n\n\t/**\n\t * Button ordering - 'alpha' (alphabetical) or 'column' (table column\n\t * order)\n\t *  @property order\n\t *  @type     string\n\t *  @default  column\n\t */\n\torder: 'column'\n};\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Static object properties\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Collection of all ColVis instances\n *  @property ColVis.aInstances\n *  @static\n *  @type     Array\n *  @default  []\n */\nColVis.aInstances = [];\n\n\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Constants\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Name of this class\n *  @constant CLASS\n *  @type     String\n *  @default  ColVis\n */\nColVis.prototype.CLASS = \"ColVis\";\n\n\n/**\n * ColVis version\n *  @constant  VERSION\n *  @type      String\n *  @default   See code\n */\nColVis.VERSION = \"1.1.2\";\nColVis.prototype.VERSION = ColVis.VERSION;\n\n\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Initialisation\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/*\n * Register a new feature with DataTables\n */\nif ( typeof $.fn.dataTable == \"function\" &&\n     typeof $.fn.dataTableExt.fnVersionCheck == \"function\" &&\n     $.fn.dataTableExt.fnVersionCheck('1.7.0') )\n{\n\t$.fn.dataTableExt.aoFeatures.push( {\n\t\t\"fnInit\": function( oDTSettings ) {\n\t\t\tvar init = oDTSettings.oInit;\n\t\t\tvar colvis = new ColVis( oDTSettings, init.colVis || init.oColVis || {} );\n\t\t\treturn colvis.button();\n\t\t},\n\t\t\"cFeature\": \"C\",\n\t\t\"sFeature\": \"ColVis\"\n\t} );\n}\nelse\n{\n\talert( \"Warning: ColVis requires DataTables 1.7 or greater - www.datatables.net/download\");\n}\n\n\n// Make ColVis accessible from the DataTables instance\n$.fn.dataTable.ColVis = ColVis;\n$.fn.DataTable.ColVis = ColVis;\n\n\nreturn ColVis;\n}; // /factory\n\n\n// Define as an AMD module if possible\nif ( typeof define === 'function' && define.amd ) {\n\tdefine( ['jquery', 'datatables'], factory );\n}\nelse if ( typeof exports === 'object' ) {\n    // Node/CommonJS\n    factory( require('jquery'), require('datatables') );\n}\nelse if ( jQuery && !jQuery.fn.dataTable.ColVis ) {\n\t// Otherwise simply initialise as normal, stopping multiple evaluation\n\tfactory( jQuery, jQuery.fn.dataTable );\n}\n\n\n})(window, document);\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/License.txt",
    "content": "Copyright (c) 2010-2015 SpryMedia Limited\nhttp://datatables.net\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/Readme.md",
    "content": "# FixedColumns\n\nWhen making use of DataTables' x-axis scrolling feature (`scrollX`), you may wish to fix the left or right most columns in place. This plug-in for DataTables provides exactly this option (for non-scrolling tables, please use the FixedHeader plug-in, which can fix headers, footers and columns). Key features include:\n\n* Freezes the left most column to the side of the table\n* Option to freeze two or more columns\n* Full integration with DataTables' scrolling options\n\n\n# Installation\n\nTo use FixedColumns, first download DataTables ( http://datatables.net/download ) and place the unzipped FixedColumns package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser.\n\n\n# Basic usage\n\nFixedColumns is initialised using the `$.fn.dataTable.FixedColumns()` constructor. For example:\n\n```js\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        \"300px\",\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\n\tnew $.fn.dataTable.FixedColumns( table );\n} );\n```\n\n\n# Documentation / support\n\n* Documentation: http://datatables.net/extensions/FixedColumns/\n* DataTables support forums: http://datatables.net/forums\n\n\n# GitHub\n\nIf you fancy getting involved with the development of FixedColumns and help make it better, please refer to its GitHub repo: https://github.com/DataTables/FixedColumns\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/css/dataTables.fixedColumns.css",
    "content": "\n\n/* Block out what is behind the fixed column's header and footer */\ntable.DTFC_Cloned thead,\ntable.DTFC_Cloned tfoot {\n\tbackground-color: white;\n}\n\n/* Block out the gap above the scrollbar on the right, when there is a fixed\n * right column\n */\ndiv.DTFC_Blocker {\n\tbackground-color: white;\n}\n\ndiv.DTFC_LeftWrapper table.dataTable,\ndiv.DTFC_RightWrapper table.dataTable {\n\tmargin-bottom: 0;\n\tz-index: 2;\n}\n\ndiv.DTFC_LeftWrapper table.dataTable.no-footer,\ndiv.DTFC_RightWrapper table.dataTable.no-footer {\n\tborder-bottom: none;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/examples/bootstrap.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedColumns example - Bootstrap</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../Plugins/integration/bootstrap/3/dataTables.bootstrap.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\tbody { font-size: 140%; }\n\n\t/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedColumns.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../Plugins/integration/bootstrap/3/dataTables.bootstrap.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        \"300px\",\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\tnew $.fn.dataTable.FixedColumns( table );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedColumns example <span>Bootstrap</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>When displaying a table which scrolls along the x-axis, it can sometimes be useful to the end user for the left most column to be fixed in place, if it shows\n\t\t\t\tgrouping, index or similar information. This is basically the same idea as 'freeze columns' in Excel. This can be achieved with the FixedColumns plug-in for\n\t\t\t\tDataTables, as shown below.</p>\n\n\t\t\t\t<p>Note that FixedColumns is suitable only for use with the scrolling features in <a href=\"http://datatables.net\">DataTables</a>. If you want to achieve a similar\n\t\t\t\teffect without scrolling enabled, please checkout <a href=\"http://datatables.net/plug-ins\">FixedHeader</a>, also for DataTables.</p>\n\n\t\t\t\t<p>FixedColumns is initialised using the constructor <code>new $.fn.dataTable.FixedColumns();</code> - shown below.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"table table-striped table-bordered\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        &quot;300px&quot;,\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\tnew $.fn.dataTable.FixedColumns( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedColumns.js\">../js/dataTables.fixedColumns.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../Plugins/integration/bootstrap/3/dataTables.bootstrap.js\">../../Plugins/integration/bootstrap/3/dataTables.bootstrap.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">body { font-size: 140%; }\n\n\t/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css\">//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../Plugins/integration/bootstrap/3/dataTables.bootstrap.css\">../../Plugins/integration/bootstrap/3/dataTables.bootstrap.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./left_right_columns.html\">Left and right fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_columns.html\">Multiple fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right_column.html\">Right column only</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./rowspan.html\">Complex headers</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side-processing.html\">Server-side processing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./css_size.html\">CSS row sizing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fixed.html\">Assigned column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fluid.html\">Fluid column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./bootstrap.html\">Bootstrap</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./index_column.html\">Index column</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/examples/col_filter.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedColumns example - Individual column filtering</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedColumns.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedColumns.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t// Setup - add a text input to each footer cell\n\t$('#example tfoot th').each( function () {\n\t\tvar title = $('#example thead th').eq( $(this).index() ).text();\n\t\t$(this).html( '<input type=\"text\" placeholder=\"Search '+title+'\" />' );\n\t} );\n \n\t// DataTable\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        \"300px\",\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\t \n\t// Apply the filter\n\ttable.columns().indexes().each( function (idx) {\n\t\t$( 'input', table.column( idx ).footer() ).on( 'keyup change', function () {\n\t\t\ttable\n\t\t\t\t.column( idx )\n\t\t\t\t.search( this.value )\n\t\t\t\t.draw();\n\t\t} );\n\t} );\n\n\tnew $.fn.dataTable.FixedColumns( table );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedColumns example <span>Individual column filtering</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows FixedColumns being configured with individual column filtering abilities. Note that the event handler for the filtering is applied to the\n\t\t\t\t<code class=\"tag\" title=\"HTML tag\">input</code> elements before FixedColumns is initialised, so when FixedColumns clones nodes it also copies the event.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"stripe row-border order-column\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t// Setup - add a text input to each footer cell\n\t$('#example tfoot th').each( function () {\n\t\tvar title = $('#example thead th').eq( $(this).index() ).text();\n\t\t$(this).html( '&lt;input type=&quot;text&quot; placeholder=&quot;Search '+title+'&quot; /&gt;' );\n\t} );\n \n\t// DataTable\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        &quot;300px&quot;,\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\t \n\t// Apply the filter\n\ttable.columns().indexes().each( function (idx) {\n\t\t$( 'input', table.column( idx ).footer() ).on( 'keyup change', function () {\n\t\t\ttable\n\t\t\t\t.column( idx )\n\t\t\t\t.search( this.value )\n\t\t\t\t.draw();\n\t\t} );\n\t} );\n\n\tnew $.fn.dataTable.FixedColumns( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedColumns.js\">../js/dataTables.fixedColumns.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedColumns.css\">../css/dataTables.fixedColumns.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./left_right_columns.html\">Left and right fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_columns.html\">Multiple fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right_column.html\">Right column only</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./rowspan.html\">Complex headers</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side-processing.html\">Server-side processing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./css_size.html\">CSS row sizing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fixed.html\">Assigned column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fluid.html\">Fluid column width</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./index_column.html\">Index column</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/examples/colvis.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedColumns example - ColVis integration</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../ColVis/css/dataTables.colVis.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedColumns.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}\n\n\tdiv.ColVis {\n\t\tfloat: left;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../ColVis/js/dataTables.colVis.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedColumns.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tdom:            \"Cfrtip\",\n\t\tscrollY:        \"300px\",\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\n\tnew $.fn.dataTable.FixedColumns( table, {\n\t\tleftColumns: 2\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedColumns example <span>ColVis integration</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>FixedColumns operates with DataTables' built-in column visibility options (<a href=\"//datatables.net/reference/option/columns.visible\"><code class=\"option\"\n\t\t\t\ttitle=\"DataTables initialisation option\">columns.visible<span>DT</span></code></a> and <a href=\"//datatables.net/reference/api/column().visible()\"><code class=\n\t\t\t\t\"api\" title=\"DataTables API method\">column().visible()<span>DT</span></code></a>), which columns that are hidden not being shown in the fixed columns. This\n\t\t\t\tintegration also means that FixedColumns works well with <a href=\"http://datatables.net/extensions/colvis\">ColVis</a>, with columns that are dynamically shown and\n\t\t\t\thidden updated immediately in the fixed columns.</p>\n\n\t\t\t\t<p>The example below shows ColVis and FixedColumns working together. Two columns have been fixed on the left hand side of the table to show FixedColumns ability to\n\t\t\t\twork effortlessly with column visibility.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"stripe row-border order-column\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tdom:            &quot;Cfrtip&quot;,\n\t\tscrollY:        &quot;300px&quot;,\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\n\tnew $.fn.dataTable.FixedColumns( table, {\n\t\tleftColumns: 2\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../ColVis/js/dataTables.colVis.js\">../../ColVis/js/dataTables.colVis.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedColumns.js\">../js/dataTables.fixedColumns.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}\n\n\tdiv.ColVis {\n\t\tfloat: left;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../ColVis/css/dataTables.colVis.css\">../../ColVis/css/dataTables.colVis.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedColumns.css\">../css/dataTables.fixedColumns.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./left_right_columns.html\">Left and right fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_columns.html\">Multiple fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right_column.html\">Right column only</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./rowspan.html\">Complex headers</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side-processing.html\">Server-side processing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./css_size.html\">CSS row sizing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fixed.html\">Assigned column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fluid.html\">Fluid column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./index_column.html\">Index column</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/examples/css_size.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedColumns example - CSS row sizing</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedColumns.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}\n\n\ttr { height: 50px; }\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedColumns.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        \"300px\",\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\n\tnew $.fn.dataTable.FixedColumns( table, {\n\t\theightMatch: 'none'\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedColumns example <span>CSS row sizing</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Because of the method FixedColumns uses to display the fixed columns, an important consideration is the alignment of the rows due to different heights in the\n\t\t\t\tindividual rows of the table. There are two different algorithms in FixedColumns which can be used, or you can switch off automatic row sizing all together. This\n\t\t\t\tis controlled through the <code>heightMatch</code> parameter. If can take the following values:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li><code class=\"string\" title=\"String\">none</code> - no automatic row height matching is performed. CSS can be used in this case and is useful when speed is\n\t\t\t\t\tof primary importance.</li>\n\t\t\t\t\t<li><code class=\"string\" title=\"String\">semiauto</code> (default) - the height calculation will be performed once, and the result cached to be used again\n\t\t\t\t\t(<code>fnRecalculateHeight</code> can be used to force recalculation)</li>\n\t\t\t\t\t<li><code class=\"string\" title=\"String\">auto</code> - height matching is performed on every draw (slowest but must accurate)</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<p>This example shows row height matching switched off but there is a CSS statement of <code>tr { height: 50px }</code> to force all rows to the same height.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"stripe row-border order-column\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        &quot;300px&quot;,\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\n\tnew $.fn.dataTable.FixedColumns( table, {\n\t\theightMatch: 'none'\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedColumns.js\">../js/dataTables.fixedColumns.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}\n\n\ttr { height: 50px; }</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedColumns.css\">../css/dataTables.fixedColumns.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./left_right_columns.html\">Left and right fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_columns.html\">Multiple fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right_column.html\">Right column only</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./rowspan.html\">Complex headers</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side-processing.html\">Server-side processing</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./css_size.html\">CSS row sizing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fixed.html\">Assigned column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fluid.html\">Fluid column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./index_column.html\">Index column</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/examples/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\n\t<title>FixedColumns examples - FixedColumns examples</title>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedColumns example <span>FixedColumns examples</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>When making use of DataTables' x-axis scrolling feature (<a href=\"//datatables.net/reference/option/scrollX\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">scrollX<span>DT</span></code></a>), you may wish to fix the left or right most columns in place. This extension for DataTables\n\t\t\t\tprovides exactly this option (for non-scrolling tables, please use the <a href=\"//datatables.net/extensions/fixedheader\">FixedHeader extension</a>, which can fix\n\t\t\t\theaders, footers and columns). Key features include:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li>Freezes the left most column to the side of the table</li>\n\t\t\t\t\t<li>Option to freeze two or more columns</li>\n\t\t\t\t\t<li>Full integration with DataTables' scrolling options</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./left_right_columns.html\">Left and right fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_columns.html\">Multiple fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right_column.html\">Right column only</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./rowspan.html\">Complex headers</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side-processing.html\">Server-side processing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./css_size.html\">CSS row sizing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fixed.html\">Assigned column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fluid.html\">Fluid column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./index_column.html\">Index column</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/examples/index_column.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedColumns example - Index column</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedColumns.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}\n\n\t/* Styling for the index columns */\n\tth.index,\n\ttd.index {\n\t\tbackground-color: white !important;\n\t\tborder-top: 1px solid white !important;\n\t\tborder-bottom: none !important;\n\t}\n\tdiv.DTFC_LeftHeadWrapper table {\n\t\tborder-bottom: 1px solid white !important;\n\t}\n\tdiv.DTFC_LeftHeadWrapper th {\n\t\tborder-bottom: 1px solid white !important;\n\t}\n\tdiv.DTFC_LeftBodyWrapper {\n\t\tborder-right: 1px solid black;\n\t}\n\tdiv.DTFC_LeftFootWrapper th {\n\t\tborder-top: 1px solid white !important;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedColumns.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        \"300px\",\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false,\n\t\tcolumnDefs: [ {\n\t\t\tsortable: false,\n\t\t\t\"class\": \"index\",\n\t\t\ttargets: 0\n\t\t} ],\n\t\torder: [[ 1, 'asc' ]]\n\t} );\n\n\ttable.on( 'order.dt search.dt', function () {\n\t\ttable.column(0, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {\n\t\t\tcell.innerHTML = i+1;\n\t\t} );\n\t} ).draw();\n\n\tnew $.fn.dataTable.FixedColumns( table );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedColumns example <span>Index column</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>A typical interaction to want to perform with a fixed column, is an index column. A method for how this can be achieved with FixedColumns is shown in this\n\t\t\t\texample, building on the <a href=\"http://datatables.net/examples/api/counter_column\">index column</a> example for DataTables. Also shown in this example is how the\n\t\t\t\tfixed column can be styled with CSS to show it more prominently.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"stripe row-border order-column\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        &quot;300px&quot;,\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false,\n\t\tcolumnDefs: [ {\n\t\t\tsortable: false,\n\t\t\t&quot;class&quot;: &quot;index&quot;,\n\t\t\ttargets: 0\n\t\t} ],\n\t\torder: [[ 1, 'asc' ]]\n\t} );\n\n\ttable.on( 'order.dt search.dt', function () {\n\t\ttable.column(0, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {\n\t\t\tcell.innerHTML = i+1;\n\t\t} );\n\t} ).draw();\n\n\tnew $.fn.dataTable.FixedColumns( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedColumns.js\">../js/dataTables.fixedColumns.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}\n\n\t/* Styling for the index columns */\n\tth.index,\n\ttd.index {\n\t\tbackground-color: white !important;\n\t\tborder-top: 1px solid white !important;\n\t\tborder-bottom: none !important;\n\t}\n\tdiv.DTFC_LeftHeadWrapper table {\n\t\tborder-bottom: 1px solid white !important;\n\t}\n\tdiv.DTFC_LeftHeadWrapper th {\n\t\tborder-bottom: 1px solid white !important;\n\t}\n\tdiv.DTFC_LeftBodyWrapper {\n\t\tborder-right: 1px solid black;\n\t}\n\tdiv.DTFC_LeftFootWrapper th {\n\t\tborder-top: 1px solid white !important;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedColumns.css\">../css/dataTables.fixedColumns.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./left_right_columns.html\">Left and right fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_columns.html\">Multiple fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right_column.html\">Right column only</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./rowspan.html\">Complex headers</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side-processing.html\">Server-side processing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./css_size.html\">CSS row sizing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fixed.html\">Assigned column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fluid.html\">Fluid column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./index_column.html\">Index column</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/examples/left_right_columns.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedColumns example - Left and right fixed columns</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedColumns.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedColumns.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        \"300px\",\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\n\tnew $.fn.dataTable.FixedColumns( table, {\n\t\tleftColumns: 1,\n\t\trightColumns: 1\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedColumns example <span>Left and right fixed columns</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>FixedColumns allows columns to be fixed from both the left and right hand sides of the table. Fixing right hand-side columns is done by using the\n\t\t\t\t<code>rightColumns</code> initialisation parameter, which works just the same as <code>leftColumns</code> does for the left side of the table. This example shows\n\t\t\t\tboth the left and right columns being fixed in place.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"stripe row-border order-column\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        &quot;300px&quot;,\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\n\tnew $.fn.dataTable.FixedColumns( table, {\n\t\tleftColumns: 1,\n\t\trightColumns: 1\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedColumns.js\">../js/dataTables.fixedColumns.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedColumns.css\">../css/dataTables.fixedColumns.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./left_right_columns.html\">Left and right fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_columns.html\">Multiple fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right_column.html\">Right column only</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./rowspan.html\">Complex headers</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side-processing.html\">Server-side processing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./css_size.html\">CSS row sizing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fixed.html\">Assigned column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fluid.html\">Fluid column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./index_column.html\">Index column</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/examples/right_column.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedColumns example - Right column only</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedColumns.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedColumns.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        \"300px\",\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\n\tnew $.fn.dataTable.FixedColumns( table, {\n\t\tleftColumns: 0,\n\t\trightColumns: 1\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedColumns example <span>Right column only</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>FixedColumns has the ability to freeze columns on both the left and right hand sides of the table. By default it will fix the first column on the left, but\n\t\t\t\tusing the initialisation parameters <code>leftColumns</code> and <code>rightColumns</code> you can alter this to fix the columns on the right as well. This example\n\t\t\t\tshows a single column fixed in place, in this case the right most column.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"stripe row-border order-column\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        &quot;300px&quot;,\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\n\tnew $.fn.dataTable.FixedColumns( table, {\n\t\tleftColumns: 0,\n\t\trightColumns: 1\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedColumns.js\">../js/dataTables.fixedColumns.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedColumns.css\">../css/dataTables.fixedColumns.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./left_right_columns.html\">Left and right fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_columns.html\">Multiple fixed columns</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./right_column.html\">Right column only</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./rowspan.html\">Complex headers</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side-processing.html\">Server-side processing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./css_size.html\">CSS row sizing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fixed.html\">Assigned column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fluid.html\">Fluid column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./index_column.html\">Index column</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/examples/rowspan.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedColumns example - Complex headers</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedColumns.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t/* Ensure that the demo table scrolls */\n\tth, td {\n\t\twhite-space: nowrap;\n\t\tpadding-left: 40px !important;\n\t\tpadding-right: 40px !important;\n\t}\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedColumns.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        \"300px\",\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\tnew $.fn.dataTable.FixedColumns( table );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedColumns example <span>Complex headers</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>If you are using multiple rows in the table header, it can be useful to have a rowspanning cell on the column(s) you have fixed in place - equally at other\n\t\t\t\ttimes it can be useful to not and make use of the two or more cells per column. FixedColumns builds on the complex header support in DataTables to make this\n\t\t\t\ttrivial to use in FixedColumns. Just initialise your FixedColumns instance as you normally would!</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"stripe row-border order-column\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th rowspan=\"2\">Name</th>\n\t\t\t\t\t\t<th colspan=\"2\">HR Information</th>\n\t\t\t\t\t\t<th colspan=\"3\">Contact</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        &quot;300px&quot;,\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\tnew $.fn.dataTable.FixedColumns( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedColumns.js\">../js/dataTables.fixedColumns.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">/* Ensure that the demo table scrolls */\n\tth, td {\n\t\twhite-space: nowrap;\n\t\tpadding-left: 40px !important;\n\t\tpadding-right: 40px !important;\n\t}\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedColumns.css\">../css/dataTables.fixedColumns.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./left_right_columns.html\">Left and right fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_columns.html\">Multiple fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right_column.html\">Right column only</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./rowspan.html\">Complex headers</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side-processing.html\">Server-side processing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./css_size.html\">CSS row sizing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fixed.html\">Assigned column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fluid.html\">Fluid column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./index_column.html\">Index column</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/examples/server-side-processing.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedColumns example - Server-side processing</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedColumns.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 600px;\n\t\tmargin: 0 auto;\n\t}\n\n\t/* Lots of padding for the cells as SSP has limited data in the demo */\n\tth,\n\ttd {\n\t\tpadding-left: 40px !important;\n\t\tpadding-right: 40px !important;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedColumns.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        \"300px\",\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tajax: \"../../../examples/server_side/scripts/server_processing.php\",\n\t\tserverSide: true\n\t} );\n\tnew $.fn.dataTable.FixedColumns( table );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedColumns example <span>Server-side processing</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows how FixedColumns can be used with server-side processing in DataTables to cope with very large tables. No special considerations are\n\t\t\t\trequired, just initialise FixedColumns as you normally would!</p>\n\n\t\t\t\t<p>Note that the table width is constrained in this example to allow scrolling to occur as the server-side processing data set has a limited number of columns in\n\t\t\t\tthis demo!</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"stripe row-border order-column\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        &quot;300px&quot;,\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tajax: &quot;../../../examples/server_side/scripts/server_processing.php&quot;,\n\t\tserverSide: true\n\t} );\n\tnew $.fn.dataTable.FixedColumns( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedColumns.js\">../js/dataTables.fixedColumns.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 600px;\n\t\tmargin: 0 auto;\n\t}\n\n\t/* Lots of padding for the cells as SSP has limited data in the demo */\n\tth,\n\ttd {\n\t\tpadding-left: 40px !important;\n\t\tpadding-right: 40px !important;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedColumns.css\">../css/dataTables.fixedColumns.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./left_right_columns.html\">Left and right fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_columns.html\">Multiple fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right_column.html\">Right column only</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./rowspan.html\">Complex headers</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./server-side-processing.html\">Server-side processing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./css_size.html\">CSS row sizing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fixed.html\">Assigned column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fluid.html\">Fluid column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./index_column.html\">Index column</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/examples/simple.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedColumns example - Basic initialisation</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedColumns.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedColumns.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        \"300px\",\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\tnew $.fn.dataTable.FixedColumns( table );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedColumns example <span>Basic initialisation</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>When displaying a table which scrolls along the x-axis, it can sometimes be useful to the end user for the left most column to be fixed in place, if it shows\n\t\t\t\tgrouping, index or similar information. This is basically the same idea as 'freeze columns' in Excel. This can be achieved with the FixedColumns plug-in for\n\t\t\t\tDataTables, as shown below.</p>\n\n\t\t\t\t<p>Note that FixedColumns is suitable only for use with the scrolling features in <a href=\"http://datatables.net\">DataTables</a>. If you want to achieve a similar\n\t\t\t\teffect without scrolling enabled, please checkout <a href=\"http://datatables.net/plug-ins\">FixedHeader</a>, also for DataTables.</p>\n\n\t\t\t\t<p>FixedColumns is initialised using the constructor <code>new $.fn.dataTable.FixedColumns();</code> - shown below.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"stripe row-border order-column\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        &quot;300px&quot;,\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\tnew $.fn.dataTable.FixedColumns( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedColumns.js\">../js/dataTables.fixedColumns.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedColumns.css\">../css/dataTables.fixedColumns.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./left_right_columns.html\">Left and right fixed columns</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_columns.html\">Multiple fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right_column.html\">Right column only</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./rowspan.html\">Complex headers</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side-processing.html\">Server-side processing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./css_size.html\">CSS row sizing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fixed.html\">Assigned column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fluid.html\">Fluid column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./index_column.html\">Index column</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/examples/size_fixed.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedColumns example - Assigned column width</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedColumns.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\tmargin: 0 auto;\n\t}\n\n\tdiv.container {\n\t\twidth: 80%;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedColumns.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').removeAttr('width').DataTable( {\n\t\tscrollY:        \"300px\",\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false,\n\t\tcolumnDefs: [\n\t\t\t{ width: 200, targets: 0 }\n\t\t]\n\t} );\n\tnew $.fn.dataTable.FixedColumns( table );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedColumns example <span>Assigned column width</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>The columns that are fixed in place by FixedColumns take their width from the parent DataTable. As such, the width of the column can be controlled using the\n\t\t\t\t<a href=\"//datatables.net/reference/option/columns.width\"><code class=\"option\" title=\"DataTables initialisation option\">columns.width<span>DT</span></code></a>\n\t\t\t\toption.</p>\n\n\t\t\t\t<p>This example shows the first column being set to <code>width: 200px</code> (note that this is not pixel perfect in a table, the browser will make some\n\t\t\t\tadjustments!), a width that is reflected in the fixed column. Resize the browser window horizontally and you will be able to see that the fixed column retains its\n\t\t\t\twidth while the scrolling viewport and the table resize.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"stripe row-border order-column\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').removeAttr('width').DataTable( {\n\t\tscrollY:        &quot;300px&quot;,\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false,\n\t\tcolumnDefs: [\n\t\t\t{ width: 200, targets: 0 }\n\t\t]\n\t} );\n\tnew $.fn.dataTable.FixedColumns( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedColumns.js\">../js/dataTables.fixedColumns.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\tmargin: 0 auto;\n\t}\n\n\tdiv.container {\n\t\twidth: 80%;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedColumns.css\">../css/dataTables.fixedColumns.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./left_right_columns.html\">Left and right fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_columns.html\">Multiple fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right_column.html\">Right column only</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./rowspan.html\">Complex headers</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side-processing.html\">Server-side processing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./css_size.html\">CSS row sizing</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./size_fixed.html\">Assigned column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fluid.html\">Fluid column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./index_column.html\">Index column</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/examples/size_fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedColumns example - Fluid column width</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedColumns.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\tmargin: 0 auto;\n\t}\n\n\tdiv.container {\n\t\twidth: 80%;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedColumns.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        \"300px\",\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false,\n\t\tcolumnDefs: [\n\t\t\t{ width: '20%', targets: 0 }\n\t\t]\n\t} );\n\tnew $.fn.dataTable.FixedColumns( table );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedColumns example <span>Fluid column width</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>The columns that are fixed in place by FixedColumns take their width from the parent DataTable. As such, the width of the column can be controlled using the\n\t\t\t\t<a href=\"//datatables.net/reference/option/columns.width\"><code class=\"option\" title=\"DataTables initialisation option\">columns.width<span>DT</span></code></a>\n\t\t\t\toption.</p>\n\n\t\t\t\t<p>This example shows the first column being set to <code>width: 20%</code> (note that this is not pixel perfect in a table, the browser will make some\n\t\t\t\tadjustments!), a width that is reflected in the fixed column. Resize the browser window horizontally and you will be able to see that the fixed column retains its\n\t\t\t\tproportional width (again with a small margin dictated by the browser) in the resizing table.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"stripe row-border order-column\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        &quot;300px&quot;,\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false,\n\t\tcolumnDefs: [\n\t\t\t{ width: '20%', targets: 0 }\n\t\t]\n\t} );\n\tnew $.fn.dataTable.FixedColumns( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedColumns.js\">../js/dataTables.fixedColumns.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\tmargin: 0 auto;\n\t}\n\n\tdiv.container {\n\t\twidth: 80%;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedColumns.css\">../css/dataTables.fixedColumns.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./left_right_columns.html\">Left and right fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_columns.html\">Multiple fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right_column.html\">Right column only</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./rowspan.html\">Complex headers</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side-processing.html\">Server-side processing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./css_size.html\">CSS row sizing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fixed.html\">Assigned column width</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./size_fluid.html\">Fluid column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./index_column.html\">Index column</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/examples/two_columns.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedColumns example - Multiple fixed columns</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedColumns.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedColumns.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        \"300px\",\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\tnew $.fn.dataTable.FixedColumns( table, {\n\t\tleftColumns: 2\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedColumns example <span>Multiple fixed columns</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>FixedColumns allows more than one column to be frozen into place using the <code>leftColumns</code> parameter. The example below shows two columns fixed.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"stripe row-border order-column\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY:        &quot;300px&quot;,\n\t\tscrollX:        true,\n\t\tscrollCollapse: true,\n\t\tpaging:         false\n\t} );\n\tnew $.fn.dataTable.FixedColumns( table, {\n\t\tleftColumns: 2\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedColumns.js\">../js/dataTables.fixedColumns.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">/* Ensure that the demo table scrolls */\n\tth, td { white-space: nowrap; }\n\tdiv.dataTables_wrapper {\n\t\twidth: 800px;\n\t\tmargin: 0 auto;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedColumns.css\">../css/dataTables.fixedColumns.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./left_right_columns.html\">Left and right fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./two_columns.html\">Multiple fixed columns</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right_column.html\">Right column only</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./rowspan.html\">Complex headers</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./colvis.html\">ColVis integration</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side-processing.html\">Server-side processing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./css_size.html\">CSS row sizing</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fixed.html\">Assigned column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./size_fluid.html\">Fluid column width</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./col_filter.html\">Individual column filtering</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./index_column.html\">Index column</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedColumns/js/dataTables.fixedColumns.js",
    "content": "/*! FixedColumns 3.0.4\n * ©2010-2014 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     FixedColumns\n * @description Freeze columns in place on a scrolling DataTable\n * @version     3.0.4\n * @file        dataTables.fixedColumns.js\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     www.sprymedia.co.uk/contact\n * @copyright   Copyright 2010-2014 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n\n(function(window, document, undefined) {\n\n\nvar factory = function( $, DataTable ) {\n\"use strict\";\n\n/**\n * When making use of DataTables' x-axis scrolling feature, you may wish to\n * fix the left most column in place. This plug-in for DataTables provides\n * exactly this option (note for non-scrolling tables, please use the\n * FixedHeader plug-in, which can fix headers, footers and columns). Key\n * features include:\n *\n * * Freezes the left or right most columns to the side of the table\n * * Option to freeze two or more columns\n * * Full integration with DataTables' scrolling options\n * * Speed - FixedColumns is fast in its operation\n *\n *  @class\n *  @constructor\n *  @global\n *  @param {object} dt DataTables instance. With DataTables 1.10 this can also\n *    be a jQuery collection, a jQuery selector, DataTables API instance or\n *    settings object.\n *  @param {object} [init={}] Configuration object for FixedColumns. Options are\n *    defined by {@link FixedColumns.defaults}\n *\n *  @requires jQuery 1.7+\n *  @requires DataTables 1.8.0+\n *\n *  @example\n *      var table = $('#example').dataTable( {\n *        \"scrollX\": \"100%\"\n *      } );\n *      new $.fn.dataTable.fixedColumns( table );\n */\nvar FixedColumns = function ( dt, init ) {\n\tvar that = this;\n\n\t/* Sanity check - you just know it will happen */\n\tif ( ! ( this instanceof FixedColumns ) )\n\t{\n\t\talert( \"FixedColumns warning: FixedColumns must be initialised with the 'new' keyword.\" );\n\t\treturn;\n\t}\n\n\tif ( typeof init == 'undefined' )\n\t{\n\t\tinit = {};\n\t}\n\n\t// Use the DataTables Hungarian notation mapping method, if it exists to\n\t// provide forwards compatibility for camel case variables\n\tvar camelToHungarian = $.fn.dataTable.camelToHungarian;\n\tif ( camelToHungarian ) {\n\t\tcamelToHungarian( FixedColumns.defaults, FixedColumns.defaults, true );\n\t\tcamelToHungarian( FixedColumns.defaults, init );\n\t}\n\n\t// v1.10 allows the settings object to be got form a number of sources\n\tvar dtSettings = $.fn.dataTable.Api ?\n\t\tnew $.fn.dataTable.Api( dt ).settings()[0] :\n\t\tdt.fnSettings();\n\n\t/**\n\t * Settings object which contains customisable information for FixedColumns instance\n\t * @namespace\n\t * @extends FixedColumns.defaults\n\t * @private\n\t */\n\tthis.s = {\n\t\t/**\n\t\t * DataTables settings objects\n\t\t *  @type     object\n\t\t *  @default  Obtained from DataTables instance\n\t\t */\n\t\t\"dt\": dtSettings,\n\n\t\t/**\n\t\t * Number of columns in the DataTable - stored for quick access\n\t\t *  @type     int\n\t\t *  @default  Obtained from DataTables instance\n\t\t */\n\t\t\"iTableColumns\": dtSettings.aoColumns.length,\n\n\t\t/**\n\t\t * Original outer widths of the columns as rendered by DataTables - used to calculate\n\t\t * the FixedColumns grid bounding box\n\t\t *  @type     array.<int>\n\t\t *  @default  []\n\t\t */\n\t\t\"aiOuterWidths\": [],\n\n\t\t/**\n\t\t * Original inner widths of the columns as rendered by DataTables - used to apply widths\n\t\t * to the columns\n\t\t *  @type     array.<int>\n\t\t *  @default  []\n\t\t */\n\t\t\"aiInnerWidths\": []\n\t};\n\n\n\t/**\n\t * DOM elements used by the class instance\n\t * @namespace\n\t * @private\n\t *\n\t */\n\tthis.dom = {\n\t\t/**\n\t\t * DataTables scrolling element\n\t\t *  @type     node\n\t\t *  @default  null\n\t\t */\n\t\t\"scroller\": null,\n\n\t\t/**\n\t\t * DataTables header table\n\t\t *  @type     node\n\t\t *  @default  null\n\t\t */\n\t\t\"header\": null,\n\n\t\t/**\n\t\t * DataTables body table\n\t\t *  @type     node\n\t\t *  @default  null\n\t\t */\n\t\t\"body\": null,\n\n\t\t/**\n\t\t * DataTables footer table\n\t\t *  @type     node\n\t\t *  @default  null\n\t\t */\n\t\t\"footer\": null,\n\n\t\t/**\n\t\t * Display grid elements\n\t\t * @namespace\n\t\t */\n\t\t\"grid\": {\n\t\t\t/**\n\t\t\t * Grid wrapper. This is the container element for the 3x3 grid\n\t\t\t *  @type     node\n\t\t\t *  @default  null\n\t\t\t */\n\t\t\t\"wrapper\": null,\n\n\t\t\t/**\n\t\t\t * DataTables scrolling element. This element is the DataTables\n\t\t\t * component in the display grid (making up the main table - i.e.\n\t\t\t * not the fixed columns).\n\t\t\t *  @type     node\n\t\t\t *  @default  null\n\t\t\t */\n\t\t\t\"dt\": null,\n\n\t\t\t/**\n\t\t\t * Left fixed column grid components\n\t\t\t * @namespace\n\t\t\t */\n\t\t\t\"left\": {\n\t\t\t\t\"wrapper\": null,\n\t\t\t\t\"head\": null,\n\t\t\t\t\"body\": null,\n\t\t\t\t\"foot\": null\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Right fixed column grid components\n\t\t\t * @namespace\n\t\t\t */\n\t\t\t\"right\": {\n\t\t\t\t\"wrapper\": null,\n\t\t\t\t\"head\": null,\n\t\t\t\t\"body\": null,\n\t\t\t\t\"foot\": null\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Cloned table nodes\n\t\t * @namespace\n\t\t */\n\t\t\"clone\": {\n\t\t\t/**\n\t\t\t * Left column cloned table nodes\n\t\t\t * @namespace\n\t\t\t */\n\t\t\t\"left\": {\n\t\t\t\t/**\n\t\t\t\t * Cloned header table\n\t\t\t\t *  @type     node\n\t\t\t\t *  @default  null\n\t\t\t\t */\n\t\t\t\t\"header\": null,\n\n\t\t\t\t/**\n\t\t\t\t * Cloned body table\n\t\t\t\t *  @type     node\n\t\t\t\t *  @default  null\n\t\t\t\t */\n\t\t\t\t\"body\": null,\n\n\t\t\t\t/**\n\t\t\t\t * Cloned footer table\n\t\t\t\t *  @type     node\n\t\t\t\t *  @default  null\n\t\t\t\t */\n\t\t\t\t\"footer\": null\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Right column cloned table nodes\n\t\t\t * @namespace\n\t\t\t */\n\t\t\t\"right\": {\n\t\t\t\t/**\n\t\t\t\t * Cloned header table\n\t\t\t\t *  @type     node\n\t\t\t\t *  @default  null\n\t\t\t\t */\n\t\t\t\t\"header\": null,\n\n\t\t\t\t/**\n\t\t\t\t * Cloned body table\n\t\t\t\t *  @type     node\n\t\t\t\t *  @default  null\n\t\t\t\t */\n\t\t\t\t\"body\": null,\n\n\t\t\t\t/**\n\t\t\t\t * Cloned footer table\n\t\t\t\t *  @type     node\n\t\t\t\t *  @default  null\n\t\t\t\t */\n\t\t\t\t\"footer\": null\n\t\t\t}\n\t\t}\n\t};\n\n\t/* Attach the instance to the DataTables instance so it can be accessed easily */\n\tdtSettings._oFixedColumns = this;\n\n\t/* Let's do it */\n\tif ( ! dtSettings._bInitComplete )\n\t{\n\t\tdtSettings.oApi._fnCallbackReg( dtSettings, 'aoInitComplete', function () {\n\t\t\tthat._fnConstruct( init );\n\t\t}, 'FixedColumns' );\n\t}\n\telse\n\t{\n\t\tthis._fnConstruct( init );\n\t}\n};\n\n\n\nFixedColumns.prototype = /** @lends FixedColumns.prototype */{\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Update the fixed columns - including headers and footers. Note that FixedColumns will\n\t * automatically update the display whenever the host DataTable redraws.\n\t *  @returns {void}\n\t *  @example\n\t *      var table = $('#example').dataTable( {\n\t *          \"scrollX\": \"100%\"\n\t *      } );\n\t *      var fc = new $.fn.dataTable.fixedColumns( table );\n\t *\n\t *      // at some later point when the table has been manipulated....\n\t *      fc.fnUpdate();\n\t */\n\t\"fnUpdate\": function ()\n\t{\n\t\tthis._fnDraw( true );\n\t},\n\n\n\t/**\n\t * Recalculate the resizes of the 3x3 grid that FixedColumns uses for display of the table.\n\t * This is useful if you update the width of the table container. Note that FixedColumns will\n\t * perform this function automatically when the window.resize event is fired.\n\t *  @returns {void}\n\t *  @example\n\t *      var table = $('#example').dataTable( {\n\t *          \"scrollX\": \"100%\"\n\t *      } );\n\t *      var fc = new $.fn.dataTable.fixedColumns( table );\n\t *\n\t *      // Resize the table container and then have FixedColumns adjust its layout....\n\t *      $('#content').width( 1200 );\n\t *      fc.fnRedrawLayout();\n\t */\n\t\"fnRedrawLayout\": function ()\n\t{\n\t\tthis._fnColCalc();\n\t\tthis._fnGridLayout();\n\t\tthis.fnUpdate();\n\t},\n\n\n\t/**\n\t * Mark a row such that it's height should be recalculated when using 'semiauto' row\n\t * height matching. This function will have no effect when 'none' or 'auto' row height\n\t * matching is used.\n\t *  @param   {Node} nTr TR element that should have it's height recalculated\n\t *  @returns {void}\n\t *  @example\n\t *      var table = $('#example').dataTable( {\n\t *          \"scrollX\": \"100%\"\n\t *      } );\n\t *      var fc = new $.fn.dataTable.fixedColumns( table );\n\t *\n\t *      // manipulate the table - mark the row as needing an update then update the table\n\t *      // this allows the redraw performed by DataTables fnUpdate to recalculate the row\n\t *      // height\n\t *      fc.fnRecalculateHeight();\n\t *      table.fnUpdate( $('#example tbody tr:eq(0)')[0], [\"insert date\", 1, 2, 3 ... ]);\n\t */\n\t\"fnRecalculateHeight\": function ( nTr )\n\t{\n\t\tdelete nTr._DTTC_iHeight;\n\t\tnTr.style.height = 'auto';\n\t},\n\n\n\t/**\n\t * Set the height of a given row - provides cross browser compatibility\n\t *  @param   {Node} nTarget TR element that should have it's height recalculated\n\t *  @param   {int} iHeight Height in pixels to set\n\t *  @returns {void}\n\t *  @example\n\t *      var table = $('#example').dataTable( {\n\t *          \"scrollX\": \"100%\"\n\t *      } );\n\t *      var fc = new $.fn.dataTable.fixedColumns( table );\n\t *\n\t *      // You may want to do this after manipulating a row in the fixed column\n\t *      fc.fnSetRowHeight( $('#example tbody tr:eq(0)')[0], 50 );\n\t */\n\t\"fnSetRowHeight\": function ( nTarget, iHeight )\n\t{\n\t\tnTarget.style.height = iHeight+\"px\";\n\t},\n\n\n\t/**\n\t * Get data index information about a row or cell in the table body.\n\t * This function is functionally identical to fnGetPosition in DataTables,\n\t * taking the same parameter (TH, TD or TR node) and returning exactly the\n\t * the same information (data index information). THe difference between\n\t * the two is that this method takes into account the fixed columns in the\n\t * table, so you can pass in nodes from the master table, or the cloned\n\t * tables and get the index position for the data in the main table.\n\t *  @param {node} node TR, TH or TD element to get the information about\n\t *  @returns {int} If nNode is given as a TR, then a single index is \n\t *    returned, or if given as a cell, an array of [row index, column index\n\t *    (visible), column index (all)] is given.\n\t */\n\t\"fnGetPosition\": function ( node )\n\t{\n\t\tvar idx;\n\t\tvar inst = this.s.dt.oInstance;\n\n\t\tif ( ! $(node).parents('.DTFC_Cloned').length )\n\t\t{\n\t\t\t// Not in a cloned table\n\t\t\treturn inst.fnGetPosition( node );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Its in the cloned table, so need to look up position\n\t\t\tif ( node.nodeName.toLowerCase() === 'tr' ) {\n\t\t\t\tidx = $(node).index();\n\t\t\t\treturn inst.fnGetPosition( $('tr', this.s.dt.nTBody)[ idx ] );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar colIdx = $(node).index();\n\t\t\t\tidx = $(node.parentNode).index();\n\t\t\t\tvar row = inst.fnGetPosition( $('tr', this.s.dt.nTBody)[ idx ] );\n\n\t\t\t\treturn [\n\t\t\t\t\trow,\n\t\t\t\t\tcolIdx,\n\t\t\t\t\tinst.oApi._fnVisibleToColumnIndex( this.s.dt, colIdx )\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\t},\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods (they are of course public in JS, but recommended as private)\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Initialisation for FixedColumns\n\t *  @param   {Object} oInit User settings for initialisation\n\t *  @returns {void}\n\t *  @private\n\t */\n\t\"_fnConstruct\": function ( oInit )\n\t{\n\t\tvar i, iLen, iWidth,\n\t\t\tthat = this;\n\n\t\t/* Sanity checking */\n\t\tif ( typeof this.s.dt.oInstance.fnVersionCheck != 'function' ||\n\t\t     this.s.dt.oInstance.fnVersionCheck( '1.8.0' ) !== true )\n\t\t{\n\t\t\talert( \"FixedColumns \"+FixedColumns.VERSION+\" required DataTables 1.8.0 or later. \"+\n\t\t\t\t\"Please upgrade your DataTables installation\" );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.s.dt.oScroll.sX === \"\" )\n\t\t{\n\t\t\tthis.s.dt.oInstance.oApi._fnLog( this.s.dt, 1, \"FixedColumns is not needed (no \"+\n\t\t\t\t\"x-scrolling in DataTables enabled), so no action will be taken. Use 'FixedHeader' for \"+\n\t\t\t\t\"column fixing when scrolling is not enabled\" );\n\t\t\treturn;\n\t\t}\n\n\t\t/* Apply the settings from the user / defaults */\n\t\tthis.s = $.extend( true, this.s, FixedColumns.defaults, oInit );\n\n\t\t/* Set up the DOM as we need it and cache nodes */\n\t\tvar classes = this.s.dt.oClasses;\n\t\tthis.dom.grid.dt = $(this.s.dt.nTable).parents('div.'+classes.sScrollWrapper)[0];\n\t\tthis.dom.scroller = $('div.'+classes.sScrollBody, this.dom.grid.dt )[0];\n\n\t\t/* Set up the DOM that we want for the fixed column layout grid */\n\t\tthis._fnColCalc();\n\t\tthis._fnGridSetup();\n\n\t\t/* Event handlers */\n\t\tvar mouseController;\n\n\t\t// When the body is scrolled - scroll the left and right columns\n\t\t$(this.dom.scroller)\n\t\t\t.on( 'mouseover.DTFC touchstart.DTFC', function () {\n\t\t\t\tmouseController = 'main';\n\t\t\t} )\n\t\t\t.on( 'scroll.DTFC', function () {\n\t\t\t\tif ( mouseController === 'main' ) {\n\t\t\t\t\tif ( that.s.iLeftColumns > 0 ) {\n\t\t\t\t\t\tthat.dom.grid.left.liner.scrollTop = that.dom.scroller.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t\tif ( that.s.iRightColumns > 0 ) {\n\t\t\t\t\t\tthat.dom.grid.right.liner.scrollTop = that.dom.scroller.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\tvar wheelType = 'onwheel' in document.createElement('div') ?\n\t\t\t'wheel.DTFC' :\n\t\t\t'mousewheel.DTFC';\n\n\t\tif ( that.s.iLeftColumns > 0 ) {\n\t\t\t// When scrolling the left column, scroll the body and right column\n\t\t\t$(that.dom.grid.left.liner)\n\t\t\t\t.on( 'mouseover.DTFC touchstart.DTFC', function () {\n\t\t\t\t\tmouseController = 'left';\n\t\t\t\t} )\n\t\t\t\t.on( 'scroll.DTFC', function () {\n\t\t\t\t\tif ( mouseController === 'left' ) {\n\t\t\t\t\t\tthat.dom.scroller.scrollTop = that.dom.grid.left.liner.scrollTop;\n\t\t\t\t\t\tif ( that.s.iRightColumns > 0 ) {\n\t\t\t\t\t\t\tthat.dom.grid.right.liner.scrollTop = that.dom.grid.left.liner.scrollTop;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t.on( wheelType, function(e) { // xxx update the destroy as well\n\t\t\t\t\t// Pass horizontal scrolling through\n\t\t\t\t\tvar xDelta = e.type === 'wheel' ?\n\t\t\t\t\t\t-e.originalEvent.deltaX :\n\t\t\t\t\t\te.originalEvent.wheelDeltaX;\n\t\t\t\t\tthat.dom.scroller.scrollLeft -= xDelta;\n\t\t\t\t} );\n\t\t}\n\n\t\tif ( that.s.iRightColumns > 0 ) {\n\t\t\t// When scrolling the right column, scroll the body and the left column\n\t\t\t$(that.dom.grid.right.liner)\n\t\t\t\t.on( 'mouseover.DTFC touchstart.DTFC', function () {\n\t\t\t\t\tmouseController = 'right';\n\t\t\t\t} )\n\t\t\t\t.on( 'scroll.DTFC', function () {\n\t\t\t\t\tif ( mouseController === 'right' ) {\n\t\t\t\t\t\tthat.dom.scroller.scrollTop = that.dom.grid.right.liner.scrollTop;\n\t\t\t\t\t\tif ( that.s.iLeftColumns > 0 ) {\n\t\t\t\t\t\t\tthat.dom.grid.left.liner.scrollTop = that.dom.grid.right.liner.scrollTop;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t.on( wheelType, function(e) {\n\t\t\t\t\t// Pass horizontal scrolling through\n\t\t\t\t\tvar xDelta = e.type === 'wheel' ?\n\t\t\t\t\t\t-e.originalEvent.deltaX :\n\t\t\t\t\t\te.originalEvent.wheelDeltaX;\n\t\t\t\t\tthat.dom.scroller.scrollLeft -= xDelta;\n\t\t\t\t} );\n\t\t}\n\n\t\t$(window).on( 'resize.DTFC', function () {\n\t\t\tthat._fnGridLayout.call( that );\n\t\t} );\n\n\t\tvar bFirstDraw = true;\n\t\tvar jqTable = $(this.s.dt.nTable);\n\n\t\tjqTable\n\t\t\t.on( 'draw.dt.DTFC', function () {\n\t\t\t\tthat._fnDraw.call( that, bFirstDraw );\n\t\t\t\tbFirstDraw = false;\n\t\t\t} )\n\t\t\t.on( 'column-sizing.dt.DTFC', function () {\n\t\t\t\tthat._fnColCalc();\n\t\t\t\tthat._fnGridLayout( that );\n\t\t\t} )\n\t\t\t.on( 'column-visibility.dt.DTFC', function () {\n\t\t\t\tthat._fnColCalc();\n\t\t\t\tthat._fnGridLayout( that );\n\t\t\t\tthat._fnDraw( true );\n\t\t\t} )\n\t\t\t.on( 'destroy.dt.DTFC', function () {\n\t\t\t\tjqTable.off( 'column-sizing.dt.DTFC destroy.dt.DTFC draw.dt.DTFC' );\n\n\t\t\t\t$(that.dom.scroller).off( 'scroll.DTFC mouseover.DTFC' );\n\t\t\t\t$(window).off( 'resize.DTFC' );\n\n\t\t\t\t$(that.dom.grid.left.liner).off( 'scroll.DTFC mouseover.DTFC '+wheelType );\n\t\t\t\t$(that.dom.grid.left.wrapper).remove();\n\n\t\t\t\t$(that.dom.grid.right.liner).off( 'scroll.DTFC mouseover.DTFC '+wheelType );\n\t\t\t\t$(that.dom.grid.right.wrapper).remove();\n\t\t\t} );\n\n\t\t/* Get things right to start with - note that due to adjusting the columns, there must be\n\t\t * another redraw of the main table. It doesn't need to be a full redraw however.\n\t\t */\n\t\tthis._fnGridLayout();\n\t\tthis.s.dt.oInstance.fnDraw(false);\n\t},\n\n\n\t/**\n\t * Calculate the column widths for the grid layout\n\t *  @returns {void}\n\t *  @private\n\t */\n\t\"_fnColCalc\": function ()\n\t{\n\t\tvar that = this;\n\t\tvar iLeftWidth = 0;\n\t\tvar iRightWidth = 0;\n\n\t\tthis.s.aiInnerWidths = [];\n\t\tthis.s.aiOuterWidths = [];\n\n\t\t$.each( this.s.dt.aoColumns, function (i, col) {\n\t\t\tvar th = $(col.nTh);\n\t\t\tvar border;\n\n\t\t\tif ( ! th.filter(':visible').length ) {\n\t\t\t\tthat.s.aiInnerWidths.push( 0 );\n\t\t\t\tthat.s.aiOuterWidths.push( 0 );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Inner width is used to assign widths to cells\n\t\t\t\t// Outer width is used to calculate the container\n\t\t\t\tvar iWidth = th.outerWidth();\n\n\t\t\t\t// When working with the left most-cell, need to add on the\n\t\t\t\t// table's border to the outerWidth, since we need to take\n\t\t\t\t// account of it, but it isn't in any cell\n\t\t\t\tif ( that.s.aiOuterWidths.length === 0 ) {\n\t\t\t\t\tborder = $(that.s.dt.nTable).css('border-left-width');\n\t\t\t\t\tiWidth += typeof border === 'string' ? 1 : parseInt( border, 10 );\n\t\t\t\t}\n\n\t\t\t\t// Likewise with the final column on the right\n\t\t\t\tif ( that.s.aiOuterWidths.length === that.s.dt.aoColumns.length-1 ) {\n\t\t\t\t\tborder = $(that.s.dt.nTable).css('border-right-width');\n\t\t\t\t\tiWidth += typeof border === 'string' ? 1 : parseInt( border, 10 );\n\t\t\t\t}\n\n\t\t\t\tthat.s.aiOuterWidths.push( iWidth );\n\t\t\t\tthat.s.aiInnerWidths.push( th.width() );\n\n\t\t\t\tif ( i < that.s.iLeftColumns )\n\t\t\t\t{\n\t\t\t\t\tiLeftWidth += iWidth;\n\t\t\t\t}\n\n\t\t\t\tif ( that.s.iTableColumns-that.s.iRightColumns <= i )\n\t\t\t\t{\n\t\t\t\t\tiRightWidth += iWidth;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tthis.s.iLeftWidth = iLeftWidth;\n\t\tthis.s.iRightWidth = iRightWidth;\n\t},\n\n\n\t/**\n\t * Set up the DOM for the fixed column. The way the layout works is to create a 1x3 grid\n\t * for the left column, the DataTable (for which we just reuse the scrolling element DataTable\n\t * puts into the DOM) and the right column. In each of he two fixed column elements there is a\n\t * grouping wrapper element and then a head, body and footer wrapper. In each of these we then\n\t * place the cloned header, body or footer tables. This effectively gives as 3x3 grid structure.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t\"_fnGridSetup\": function ()\n\t{\n\t\tvar that = this;\n\t\tvar oOverflow = this._fnDTOverflow();\n\t\tvar block;\n\n\t\tthis.dom.body = this.s.dt.nTable;\n\t\tthis.dom.header = this.s.dt.nTHead.parentNode;\n\t\tthis.dom.header.parentNode.parentNode.style.position = \"relative\";\n\n\t\tvar nSWrapper =\n\t\t\t$('<div class=\"DTFC_ScrollWrapper\" style=\"position:relative; clear:both;\">'+\n\t\t\t\t'<div class=\"DTFC_LeftWrapper\" style=\"position:absolute; top:0; left:0;\">'+\n\t\t\t\t\t'<div class=\"DTFC_LeftHeadWrapper\" style=\"position:relative; top:0; left:0; overflow:hidden;\"></div>'+\n\t\t\t\t\t'<div class=\"DTFC_LeftBodyWrapper\" style=\"position:relative; top:0; left:0; overflow:hidden;\">'+\n\t\t\t\t\t\t'<div class=\"DTFC_LeftBodyLiner\" style=\"position:relative; top:0; left:0; overflow-y:scroll;\"></div>'+\n\t\t\t\t\t'</div>'+\n\t\t\t\t\t'<div class=\"DTFC_LeftFootWrapper\" style=\"position:relative; top:0; left:0; overflow:hidden;\"></div>'+\n\t\t\t\t'</div>'+\n\t\t\t\t'<div class=\"DTFC_RightWrapper\" style=\"position:absolute; top:0; left:0;\">'+\n\t\t\t\t\t'<div class=\"DTFC_RightHeadWrapper\" style=\"position:relative; top:0; left:0;\">'+\n\t\t\t\t\t\t'<div class=\"DTFC_RightHeadBlocker DTFC_Blocker\" style=\"position:absolute; top:0; bottom:0;\"></div>'+\n\t\t\t\t\t'</div>'+\n\t\t\t\t\t'<div class=\"DTFC_RightBodyWrapper\" style=\"position:relative; top:0; left:0; overflow:hidden;\">'+\n\t\t\t\t\t\t'<div class=\"DTFC_RightBodyLiner\" style=\"position:relative; top:0; left:0; overflow-y:scroll;\"></div>'+\n\t\t\t\t\t'</div>'+\n\t\t\t\t\t'<div class=\"DTFC_RightFootWrapper\" style=\"position:relative; top:0; left:0;\">'+\n\t\t\t\t\t\t'<div class=\"DTFC_RightFootBlocker DTFC_Blocker\" style=\"position:absolute; top:0; bottom:0;\"></div>'+\n\t\t\t\t\t'</div>'+\n\t\t\t\t'</div>'+\n\t\t\t'</div>')[0];\n\t\tvar nLeft = nSWrapper.childNodes[0];\n\t\tvar nRight = nSWrapper.childNodes[1];\n\n\t\tthis.dom.grid.dt.parentNode.insertBefore( nSWrapper, this.dom.grid.dt );\n\t\tnSWrapper.appendChild( this.dom.grid.dt );\n\n\t\tthis.dom.grid.wrapper = nSWrapper;\n\n\t\tif ( this.s.iLeftColumns > 0 )\n\t\t{\n\t\t\tthis.dom.grid.left.wrapper = nLeft;\n\t\t\tthis.dom.grid.left.head = nLeft.childNodes[0];\n\t\t\tthis.dom.grid.left.body = nLeft.childNodes[1];\n\t\t\tthis.dom.grid.left.liner = $('div.DTFC_LeftBodyLiner', nSWrapper)[0];\n\n\t\t\tnSWrapper.appendChild( nLeft );\n\t\t}\n\n\t\tif ( this.s.iRightColumns > 0 )\n\t\t{\n\t\t\tthis.dom.grid.right.wrapper = nRight;\n\t\t\tthis.dom.grid.right.head = nRight.childNodes[0];\n\t\t\tthis.dom.grid.right.body = nRight.childNodes[1];\n\t\t\tthis.dom.grid.right.liner = $('div.DTFC_RightBodyLiner', nSWrapper)[0];\n\n\t\t\tblock = $('div.DTFC_RightHeadBlocker', nSWrapper)[0];\n\t\t\tblock.style.width = oOverflow.bar+\"px\";\n\t\t\tblock.style.right = -oOverflow.bar+\"px\";\n\t\t\tthis.dom.grid.right.headBlock = block;\n\n\t\t\tblock = $('div.DTFC_RightFootBlocker', nSWrapper)[0];\n\t\t\tblock.style.width = oOverflow.bar+\"px\";\n\t\t\tblock.style.right = -oOverflow.bar+\"px\";\n\t\t\tthis.dom.grid.right.footBlock = block;\n\n\t\t\tnSWrapper.appendChild( nRight );\n\t\t}\n\n\t\tif ( this.s.dt.nTFoot )\n\t\t{\n\t\t\tthis.dom.footer = this.s.dt.nTFoot.parentNode;\n\t\t\tif ( this.s.iLeftColumns > 0 )\n\t\t\t{\n\t\t\t\tthis.dom.grid.left.foot = nLeft.childNodes[2];\n\t\t\t}\n\t\t\tif ( this.s.iRightColumns > 0 )\n\t\t\t{\n\t\t\t\tthis.dom.grid.right.foot = nRight.childNodes[2];\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/**\n\t * Style and position the grid used for the FixedColumns layout\n\t *  @returns {void}\n\t *  @private\n\t */\n\t\"_fnGridLayout\": function ()\n\t{\n\t\tvar oGrid = this.dom.grid;\n\t\tvar iWidth = $(oGrid.wrapper).width();\n\t\tvar iBodyHeight = $(this.s.dt.nTable.parentNode).outerHeight();\n\t\tvar iFullHeight = $(this.s.dt.nTable.parentNode.parentNode).outerHeight();\n\t\tvar oOverflow = this._fnDTOverflow();\n\t\tvar\n\t\t\tiLeftWidth = this.s.iLeftWidth,\n\t\t\tiRightWidth = this.s.iRightWidth,\n\t\t\tiRight;\n\t\tvar scrollbarAdjust = function ( node, width ) {\n\t\t\tif ( ! oOverflow.bar ) {\n\t\t\t\t// If there is no scrollbar (Macs) we need to hide the auto scrollbar\n\t\t\t\tnode.style.width = (width+20)+\"px\";\n\t\t\t\tnode.style.paddingRight = \"20px\";\n\t\t\t\tnode.style.boxSizing = \"border-box\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Otherwise just overflow by the scrollbar\n\t\t\t\tnode.style.width = (width+oOverflow.bar)+\"px\";\n\t\t\t}\n\t\t};\n\n\t\t// When x scrolling - don't paint the fixed columns over the x scrollbar\n\t\tif ( oOverflow.x )\n\t\t{\n\t\t\tiBodyHeight -= oOverflow.bar;\n\t\t}\n\n\t\toGrid.wrapper.style.height = iFullHeight+\"px\";\n\n\t\tif ( this.s.iLeftColumns > 0 )\n\t\t{\n\t\t\toGrid.left.wrapper.style.width = iLeftWidth+\"px\";\n\t\t\toGrid.left.wrapper.style.height = \"1px\";\n\t\t\toGrid.left.body.style.height = iBodyHeight+\"px\";\n\t\t\tif ( oGrid.left.foot ) {\n\t\t\t\toGrid.left.foot.style.top = (oOverflow.x ? oOverflow.bar : 0)+\"px\"; // shift footer for scrollbar\n\t\t\t}\n\n\t\t\tscrollbarAdjust( oGrid.left.liner, iLeftWidth );\n\t\t\toGrid.left.liner.style.height = iBodyHeight+\"px\";\n\t\t}\n\n\t\tif ( this.s.iRightColumns > 0 )\n\t\t{\n\t\t\tiRight = iWidth - iRightWidth;\n\t\t\tif ( oOverflow.y )\n\t\t\t{\n\t\t\t\tiRight -= oOverflow.bar;\n\t\t\t}\n\n\t\t\toGrid.right.wrapper.style.width = iRightWidth+\"px\";\n\t\t\toGrid.right.wrapper.style.left = iRight+\"px\";\n\t\t\toGrid.right.wrapper.style.height = \"1px\";\n\t\t\toGrid.right.body.style.height = iBodyHeight+\"px\";\n\t\t\tif ( oGrid.right.foot ) {\n\t\t\t\toGrid.right.foot.style.top = (oOverflow.x ? oOverflow.bar : 0)+\"px\";\n\t\t\t}\n\n\t\t\tscrollbarAdjust( oGrid.right.liner, iRightWidth );\n\t\t\toGrid.right.liner.style.height = iBodyHeight+\"px\";\n\n\t\t\toGrid.right.headBlock.style.display = oOverflow.y ? 'block' : 'none';\n\t\t\toGrid.right.footBlock.style.display = oOverflow.y ? 'block' : 'none';\n\t\t}\n\t},\n\n\n\t/**\n\t * Get information about the DataTable's scrolling state - specifically if the table is scrolling\n\t * on either the x or y axis, and also the scrollbar width.\n\t *  @returns {object} Information about the DataTables scrolling state with the properties:\n\t *    'x', 'y' and 'bar'\n\t *  @private\n\t */\n\t\"_fnDTOverflow\": function ()\n\t{\n\t\tvar nTable = this.s.dt.nTable;\n\t\tvar nTableScrollBody = nTable.parentNode;\n\t\tvar out = {\n\t\t\t\"x\": false,\n\t\t\t\"y\": false,\n\t\t\t\"bar\": this.s.dt.oScroll.iBarWidth\n\t\t};\n\n\t\tif ( nTable.offsetWidth > nTableScrollBody.clientWidth )\n\t\t{\n\t\t\tout.x = true;\n\t\t}\n\n\t\tif ( nTable.offsetHeight > nTableScrollBody.clientHeight )\n\t\t{\n\t\t\tout.y = true;\n\t\t}\n\n\t\treturn out;\n\t},\n\n\n\t/**\n\t * Clone and position the fixed columns\n\t *  @returns {void}\n\t *  @param   {Boolean} bAll Indicate if the header and footer should be updated as well (true)\n\t *  @private\n\t */\n\t\"_fnDraw\": function ( bAll )\n\t{\n\t\tthis._fnGridLayout();\n\t\tthis._fnCloneLeft( bAll );\n\t\tthis._fnCloneRight( bAll );\n\n\t\t/* Draw callback function */\n\t\tif ( this.s.fnDrawCallback !== null )\n\t\t{\n\t\t\tthis.s.fnDrawCallback.call( this, this.dom.clone.left, this.dom.clone.right );\n\t\t}\n\n\t\t/* Event triggering */\n\t\t$(this).trigger( 'draw.dtfc', {\n\t\t\t\"leftClone\": this.dom.clone.left,\n\t\t\t\"rightClone\": this.dom.clone.right\n\t\t} );\n\t},\n\n\n\t/**\n\t * Clone the right columns\n\t *  @returns {void}\n\t *  @param   {Boolean} bAll Indicate if the header and footer should be updated as well (true)\n\t *  @private\n\t */\n\t\"_fnCloneRight\": function ( bAll )\n\t{\n\t\tif ( this.s.iRightColumns <= 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar that = this,\n\t\t\ti, jq,\n\t\t\taiColumns = [];\n\n\t\tfor ( i=this.s.iTableColumns-this.s.iRightColumns ; i<this.s.iTableColumns ; i++ ) {\n\t\t\tif ( this.s.dt.aoColumns[i].bVisible ) {\n\t\t\t\taiColumns.push( i );\n\t\t\t}\n\t\t}\n\n\t\tthis._fnClone( this.dom.clone.right, this.dom.grid.right, aiColumns, bAll );\n\t},\n\n\n\t/**\n\t * Clone the left columns\n\t *  @returns {void}\n\t *  @param   {Boolean} bAll Indicate if the header and footer should be updated as well (true)\n\t *  @private\n\t */\n\t\"_fnCloneLeft\": function ( bAll )\n\t{\n\t\tif ( this.s.iLeftColumns <= 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar that = this,\n\t\t\ti, jq,\n\t\t\taiColumns = [];\n\n\t\tfor ( i=0 ; i<this.s.iLeftColumns ; i++ ) {\n\t\t\tif ( this.s.dt.aoColumns[i].bVisible ) {\n\t\t\t\taiColumns.push( i );\n\t\t\t}\n\t\t}\n\n\t\tthis._fnClone( this.dom.clone.left, this.dom.grid.left, aiColumns, bAll );\n\t},\n\n\n\t/**\n\t * Make a copy of the layout object for a header or footer element from DataTables. Note that\n\t * this method will clone the nodes in the layout object.\n\t *  @returns {Array} Copy of the layout array\n\t *  @param   {Object} aoOriginal Layout array from DataTables (aoHeader or aoFooter)\n\t *  @param   {Object} aiColumns Columns to copy\n\t *  @private\n\t */\n\t\"_fnCopyLayout\": function ( aoOriginal, aiColumns )\n\t{\n\t\tvar aReturn = [];\n\t\tvar aClones = [];\n\t\tvar aCloned = [];\n\n\t\tfor ( var i=0, iLen=aoOriginal.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar aRow = [];\n\t\t\taRow.nTr = $(aoOriginal[i].nTr).clone(true, true)[0];\n\n\t\t\tfor ( var j=0, jLen=this.s.iTableColumns ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tif ( $.inArray( j, aiColumns ) === -1 )\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar iCloned = $.inArray( aoOriginal[i][j].cell, aCloned );\n\t\t\t\tif ( iCloned === -1 )\n\t\t\t\t{\n\t\t\t\t\tvar nClone = $(aoOriginal[i][j].cell).clone(true, true)[0];\n\t\t\t\t\taClones.push( nClone );\n\t\t\t\t\taCloned.push( aoOriginal[i][j].cell );\n\n\t\t\t\t\taRow.push( {\n\t\t\t\t\t\t\"cell\": nClone,\n\t\t\t\t\t\t\"unique\": aoOriginal[i][j].unique\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\taRow.push( {\n\t\t\t\t\t\t\"cell\": aClones[ iCloned ],\n\t\t\t\t\t\t\"unique\": aoOriginal[i][j].unique\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\taReturn.push( aRow );\n\t\t}\n\n\t\treturn aReturn;\n\t},\n\n\n\t/**\n\t * Clone the DataTable nodes and place them in the DOM (sized correctly)\n\t *  @returns {void}\n\t *  @param   {Object} oClone Object containing the header, footer and body cloned DOM elements\n\t *  @param   {Object} oGrid Grid object containing the display grid elements for the cloned\n\t *                    column (left or right)\n\t *  @param   {Array} aiColumns Column indexes which should be operated on from the DataTable\n\t *  @param   {Boolean} bAll Indicate if the header and footer should be updated as well (true)\n\t *  @private\n\t */\n\t\"_fnClone\": function ( oClone, oGrid, aiColumns, bAll )\n\t{\n\t\tvar that = this,\n\t\t\ti, iLen, j, jLen, jq, nTarget, iColumn, nClone, iIndex, aoCloneLayout,\n\t\t\tjqCloneThead, aoFixedHeader,\n\t\t\tdt = this.s.dt;\n\n\t\t/*\n\t\t * Header\n\t\t */\n\t\tif ( bAll )\n\t\t{\n\t\t\tif ( oClone.header !== null )\n\t\t\t{\n\t\t\t\toClone.header.parentNode.removeChild( oClone.header );\n\t\t\t}\n\t\t\toClone.header = $(this.dom.header).clone(true, true)[0];\n\t\t\toClone.header.className += \" DTFC_Cloned\";\n\t\t\toClone.header.style.width = \"100%\";\n\t\t\toGrid.head.appendChild( oClone.header );\n\n\t\t\t/* Copy the DataTables layout cache for the header for our floating column */\n\t\t\taoCloneLayout = this._fnCopyLayout( dt.aoHeader, aiColumns );\n\t\t\tjqCloneThead = $('>thead', oClone.header);\n\t\t\tjqCloneThead.empty();\n\n\t\t\t/* Add the created cloned TR elements to the table */\n\t\t\tfor ( i=0, iLen=aoCloneLayout.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tjqCloneThead[0].appendChild( aoCloneLayout[i].nTr );\n\t\t\t}\n\n\t\t\t/* Use the handy _fnDrawHead function in DataTables to do the rowspan/colspan\n\t\t\t * calculations for us\n\t\t\t */\n\t\t\tdt.oApi._fnDrawHead( dt, aoCloneLayout, true );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* To ensure that we copy cell classes exactly, regardless of colspan, multiple rows\n\t\t\t * etc, we make a copy of the header from the DataTable again, but don't insert the\n\t\t\t * cloned cells, just copy the classes across. To get the matching layout for the\n\t\t\t * fixed component, we use the DataTables _fnDetectHeader method, allowing 1:1 mapping\n\t\t\t */\n\t\t\taoCloneLayout = this._fnCopyLayout( dt.aoHeader, aiColumns );\n\t\t\taoFixedHeader=[];\n\n\t\t\tdt.oApi._fnDetectHeader( aoFixedHeader, $('>thead', oClone.header)[0] );\n\n\t\t\tfor ( i=0, iLen=aoCloneLayout.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tfor ( j=0, jLen=aoCloneLayout[i].length ; j<jLen ; j++ )\n\t\t\t\t{\n\t\t\t\t\taoFixedHeader[i][j].cell.className = aoCloneLayout[i][j].cell.className;\n\n\t\t\t\t\t// If jQuery UI theming is used we need to copy those elements as well\n\t\t\t\t\t$('span.DataTables_sort_icon', aoFixedHeader[i][j].cell).each( function () {\n\t\t\t\t\t\tthis.className = $('span.DataTables_sort_icon', aoCloneLayout[i][j].cell)[0].className;\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._fnEqualiseHeights( 'thead', this.dom.header, oClone.header );\n\n\t\t/*\n\t\t * Body\n\t\t */\n\t\tif ( this.s.sHeightMatch == 'auto' )\n\t\t{\n\t\t\t/* Remove any heights which have been applied already and let the browser figure it out */\n\t\t\t$('>tbody>tr', that.dom.body).css('height', 'auto');\n\t\t}\n\n\t\tif ( oClone.body !== null )\n\t\t{\n\t\t\toClone.body.parentNode.removeChild( oClone.body );\n\t\t\toClone.body = null;\n\t\t}\n\n\t\toClone.body = $(this.dom.body).clone(true)[0];\n\t\toClone.body.className += \" DTFC_Cloned\";\n\t\toClone.body.style.paddingBottom = dt.oScroll.iBarWidth+\"px\";\n\t\toClone.body.style.marginBottom = (dt.oScroll.iBarWidth*2)+\"px\"; /* For IE */\n\t\tif ( oClone.body.getAttribute('id') !== null )\n\t\t{\n\t\t\toClone.body.removeAttribute('id');\n\t\t}\n\n\t\t$('>thead>tr', oClone.body).empty();\n\t\t$('>tfoot', oClone.body).remove();\n\n\t\tvar nBody = $('tbody', oClone.body)[0];\n\t\t$(nBody).empty();\n\t\tif ( dt.aiDisplay.length > 0 )\n\t\t{\n\t\t\t/* Copy the DataTables' header elements to force the column width in exactly the\n\t\t\t * same way that DataTables does it - have the header element, apply the width and\n\t\t\t * colapse it down\n\t\t\t */\n\t\t\tvar nInnerThead = $('>thead>tr', oClone.body)[0];\n\t\t\tfor ( iIndex=0 ; iIndex<aiColumns.length ; iIndex++ )\n\t\t\t{\n\t\t\t\tiColumn = aiColumns[iIndex];\n\n\t\t\t\tnClone = $(dt.aoColumns[iColumn].nTh).clone(true)[0];\n\t\t\t\tnClone.innerHTML = \"\";\n\n\t\t\t\tvar oStyle = nClone.style;\n\t\t\t\toStyle.paddingTop = \"0\";\n\t\t\t\toStyle.paddingBottom = \"0\";\n\t\t\t\toStyle.borderTopWidth = \"0\";\n\t\t\t\toStyle.borderBottomWidth = \"0\";\n\t\t\t\toStyle.height = 0;\n\t\t\t\toStyle.width = that.s.aiInnerWidths[iColumn]+\"px\";\n\n\t\t\t\tnInnerThead.appendChild( nClone );\n\t\t\t}\n\n\t\t\t/* Add in the tbody elements, cloning form the master table */\n\t\t\t$('>tbody>tr', that.dom.body).each( function (z) {\n\t\t\t\tvar n = this.cloneNode(false);\n\t\t\t\tn.removeAttribute('id');\n\t\t\t\tvar i = that.s.dt.oFeatures.bServerSide===false ?\n\t\t\t\t\tthat.s.dt.aiDisplay[ that.s.dt._iDisplayStart+z ] : z;\n\t\t\t\tvar aTds = that.s.dt.aoData[ i ].anCells || $(this).children('td, th');\n\n\t\t\t\tfor ( iIndex=0 ; iIndex<aiColumns.length ; iIndex++ )\n\t\t\t\t{\n\t\t\t\t\tiColumn = aiColumns[iIndex];\n\n\t\t\t\t\tif ( aTds.length > 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\tnClone = $( aTds[iColumn] ).clone(true, true)[0];\n\t\t\t\t\t\tn.appendChild( nClone );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnBody.appendChild( n );\n\t\t\t} );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t$('>tbody>tr', that.dom.body).each( function (z) {\n\t\t\t\tnClone = this.cloneNode(true);\n\t\t\t\tnClone.className += ' DTFC_NoData';\n\t\t\t\t$('td', nClone).html('');\n\t\t\t\tnBody.appendChild( nClone );\n\t\t\t} );\n\t\t}\n\n\t\toClone.body.style.width = \"100%\";\n\t\toClone.body.style.margin = \"0\";\n\t\toClone.body.style.padding = \"0\";\n\n\t\t// Interop with Scroller - need to use a height forcing element in the\n\t\t// scrolling area in the same way that Scroller does in the body scroll.\n\t\tif ( dt.oScroller !== undefined )\n\t\t{\n\t\t\tvar scrollerForcer = dt.oScroller.dom.force;\n\n\t\t\tif ( ! oGrid.forcer ) {\n\t\t\t\toGrid.forcer = scrollerForcer.cloneNode( true );\n\t\t\t\toGrid.liner.appendChild( oGrid.forcer );\n\t\t\t}\n\t\t\telse {\n\t\t\t\toGrid.forcer.style.height = scrollerForcer.style.height;\n\t\t\t}\n\t\t}\n\n\t\toGrid.liner.appendChild( oClone.body );\n\n\t\tthis._fnEqualiseHeights( 'tbody', that.dom.body, oClone.body );\n\n\t\t/*\n\t\t * Footer\n\t\t */\n\t\tif ( dt.nTFoot !== null )\n\t\t{\n\t\t\tif ( bAll )\n\t\t\t{\n\t\t\t\tif ( oClone.footer !== null )\n\t\t\t\t{\n\t\t\t\t\toClone.footer.parentNode.removeChild( oClone.footer );\n\t\t\t\t}\n\t\t\t\toClone.footer = $(this.dom.footer).clone(true, true)[0];\n\t\t\t\toClone.footer.className += \" DTFC_Cloned\";\n\t\t\t\toClone.footer.style.width = \"100%\";\n\t\t\t\toGrid.foot.appendChild( oClone.footer );\n\n\t\t\t\t/* Copy the footer just like we do for the header */\n\t\t\t\taoCloneLayout = this._fnCopyLayout( dt.aoFooter, aiColumns );\n\t\t\t\tvar jqCloneTfoot = $('>tfoot', oClone.footer);\n\t\t\t\tjqCloneTfoot.empty();\n\n\t\t\t\tfor ( i=0, iLen=aoCloneLayout.length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\tjqCloneTfoot[0].appendChild( aoCloneLayout[i].nTr );\n\t\t\t\t}\n\t\t\t\tdt.oApi._fnDrawHead( dt, aoCloneLayout, true );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\taoCloneLayout = this._fnCopyLayout( dt.aoFooter, aiColumns );\n\t\t\t\tvar aoCurrFooter=[];\n\n\t\t\t\tdt.oApi._fnDetectHeader( aoCurrFooter, $('>tfoot', oClone.footer)[0] );\n\n\t\t\t\tfor ( i=0, iLen=aoCloneLayout.length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\tfor ( j=0, jLen=aoCloneLayout[i].length ; j<jLen ; j++ )\n\t\t\t\t\t{\n\t\t\t\t\t\taoCurrFooter[i][j].cell.className = aoCloneLayout[i][j].cell.className;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._fnEqualiseHeights( 'tfoot', this.dom.footer, oClone.footer );\n\t\t}\n\n\t\t/* Equalise the column widths between the header footer and body - body get's priority */\n\t\tvar anUnique = dt.oApi._fnGetUniqueThs( dt, $('>thead', oClone.header)[0] );\n\t\t$(anUnique).each( function (i) {\n\t\t\tiColumn = aiColumns[i];\n\t\t\tthis.style.width = that.s.aiInnerWidths[iColumn]+\"px\";\n\t\t} );\n\n\t\tif ( that.s.dt.nTFoot !== null )\n\t\t{\n\t\t\tanUnique = dt.oApi._fnGetUniqueThs( dt, $('>tfoot', oClone.footer)[0] );\n\t\t\t$(anUnique).each( function (i) {\n\t\t\t\tiColumn = aiColumns[i];\n\t\t\t\tthis.style.width = that.s.aiInnerWidths[iColumn]+\"px\";\n\t\t\t} );\n\t\t}\n\t},\n\n\n\t/**\n\t * From a given table node (THEAD etc), get a list of TR direct child elements\n\t *  @param   {Node} nIn Table element to search for TR elements (THEAD, TBODY or TFOOT element)\n\t *  @returns {Array} List of TR elements found\n\t *  @private\n\t */\n\t\"_fnGetTrNodes\": function ( nIn )\n\t{\n\t\tvar aOut = [];\n\t\tfor ( var i=0, iLen=nIn.childNodes.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( nIn.childNodes[i].nodeName.toUpperCase() == \"TR\" )\n\t\t\t{\n\t\t\t\taOut.push( nIn.childNodes[i] );\n\t\t\t}\n\t\t}\n\t\treturn aOut;\n\t},\n\n\n\t/**\n\t * Equalise the heights of the rows in a given table node in a cross browser way\n\t *  @returns {void}\n\t *  @param   {String} nodeName Node type - thead, tbody or tfoot\n\t *  @param   {Node} original Original node to take the heights from\n\t *  @param   {Node} clone Copy the heights to\n\t *  @private\n\t */\n\t\"_fnEqualiseHeights\": function ( nodeName, original, clone )\n\t{\n\t\tif ( this.s.sHeightMatch == 'none' && nodeName !== 'thead' && nodeName !== 'tfoot' )\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar that = this,\n\t\t\ti, iLen, iHeight, iHeight2, iHeightOriginal, iHeightClone,\n\t\t\trootOriginal = original.getElementsByTagName(nodeName)[0],\n\t\t\trootClone    = clone.getElementsByTagName(nodeName)[0],\n\t\t\tjqBoxHack    = $('>'+nodeName+'>tr:eq(0)', original).children(':first'),\n\t\t\tiBoxHack     = jqBoxHack.outerHeight() - jqBoxHack.height(),\n\t\t\tanOriginal   = this._fnGetTrNodes( rootOriginal ),\n\t\t\tanClone      = this._fnGetTrNodes( rootClone ),\n\t\t\theights      = [];\n\n\t\tfor ( i=0, iLen=anClone.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tiHeightOriginal = anOriginal[i].offsetHeight;\n\t\t\tiHeightClone = anClone[i].offsetHeight;\n\t\t\tiHeight = iHeightClone > iHeightOriginal ? iHeightClone : iHeightOriginal;\n\n\t\t\tif ( this.s.sHeightMatch == 'semiauto' )\n\t\t\t{\n\t\t\t\tanOriginal[i]._DTTC_iHeight = iHeight;\n\t\t\t}\n\n\t\t\theights.push( iHeight );\n\t\t}\n\n\t\tfor ( i=0, iLen=anClone.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tanClone[i].style.height = heights[i]+\"px\";\n\t\t\tanOriginal[i].style.height = heights[i]+\"px\";\n\t\t}\n\t}\n};\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Statics\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * FixedColumns default settings for initialisation\n *  @name FixedColumns.defaults\n *  @namespace\n *  @static\n */\nFixedColumns.defaults = /** @lends FixedColumns.defaults */{\n\t/**\n\t * Number of left hand columns to fix in position\n\t *  @type     int\n\t *  @default  1\n\t *  @static\n\t *  @example\n\t *      var  = $('#example').dataTable( {\n\t *          \"scrollX\": \"100%\"\n\t *      } );\n\t *      new $.fn.dataTable.fixedColumns( table, {\n\t *          \"leftColumns\": 2\n\t *      } );\n\t */\n\t\"iLeftColumns\": 1,\n\n\t/**\n\t * Number of right hand columns to fix in position\n\t *  @type     int\n\t *  @default  0\n\t *  @static\n\t *  @example\n\t *      var table = $('#example').dataTable( {\n\t *          \"scrollX\": \"100%\"\n\t *      } );\n\t *      new $.fn.dataTable.fixedColumns( table, {\n\t *          \"rightColumns\": 1\n\t *      } );\n\t */\n\t\"iRightColumns\": 0,\n\n\t/**\n\t * Draw callback function which is called when FixedColumns has redrawn the fixed assets\n\t *  @type     function(object, object):void\n\t *  @default  null\n\t *  @static\n\t *  @example\n\t *      var table = $('#example').dataTable( {\n\t *          \"scrollX\": \"100%\"\n\t *      } );\n\t *      new $.fn.dataTable.fixedColumns( table, {\n\t *          \"drawCallback\": function () {\n\t *\t            alert( \"FixedColumns redraw\" );\n\t *\t        }\n\t *      } );\n\t */\n\t\"fnDrawCallback\": null,\n\n\t/**\n\t * Height matching algorthim to use. This can be \"none\" which will result in no height\n\t * matching being applied by FixedColumns (height matching could be forced by CSS in this\n\t * case), \"semiauto\" whereby the height calculation will be performed once, and the result\n\t * cached to be used again (fnRecalculateHeight can be used to force recalculation), or\n\t * \"auto\" when height matching is performed on every draw (slowest but must accurate)\n\t *  @type     string\n\t *  @default  semiauto\n\t *  @static\n\t *  @example\n\t *      var table = $('#example').dataTable( {\n\t *          \"scrollX\": \"100%\"\n\t *      } );\n\t *      new $.fn.dataTable.fixedColumns( table, {\n\t *          \"heightMatch\": \"auto\"\n\t *      } );\n\t */\n\t\"sHeightMatch\": \"semiauto\"\n};\n\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Constants\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * FixedColumns version\n *  @name      FixedColumns.version\n *  @type      String\n *  @default   See code\n *  @static\n */\nFixedColumns.version = \"3.0.4\";\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Fired events (for documentation)\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\n/**\n * Event fired whenever FixedColumns redraws the fixed columns (i.e. clones the table elements from the main DataTable). This will occur whenever the DataTable that the FixedColumns instance is attached does its own draw.\n * @name FixedColumns#draw.dtfc\n * @event\n * @param {event} e jQuery event object\n * @param {object} o Event parameters from FixedColumns\n * @param {object} o.leftClone Instance's object dom.clone.left for easy reference. This object contains references to the left fixed clumn column's nodes\n * @param {object} o.rightClone Instance's object dom.clone.right for easy reference. This object contains references to the right fixed clumn column's nodes\n */\n\n\n// Make FixedColumns accessible from the DataTables instance\n$.fn.dataTable.FixedColumns = FixedColumns;\n$.fn.DataTable.FixedColumns = FixedColumns;\n\n\nreturn FixedColumns;\n}; // /factory\n\n\n// Define as an AMD module if possible\nif ( typeof define === 'function' && define.amd ) {\n\tdefine( ['jquery', 'datatables'], factory );\n}\nelse if ( typeof exports === 'object' ) {\n    // Node/CommonJS\n    factory( require('jquery'), require('datatables') );\n}\nelse if ( jQuery && !jQuery.fn.dataTable.FixedColumns ) {\n\t// Otherwise simply initialise as normal, stopping multiple evaluation\n\tfactory( jQuery, jQuery.fn.dataTable );\n}\n\n\n})(window, document);\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedHeader/Readme.txt",
    "content": "# FixedHeader\n\nAt times it can be useful to ensure that column titles will remain always visible on a table, even when a user scrolls down a table. The FixedHeader plug-in for DataTables will float the 'thead' element above the table at all times to help address this issue. The column titles also remain click-able to perform sorting. Key features include:\n\n* Fix the header to the top of the window\n* Ability to fix the footer and left / right columns as well\n* z-Index ordering options\n\n\n# Installation\n\nTo use FixedHeader, first download DataTables ( http://datatables.net/download ) and place the unzipped FixedHeader package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser.\n\n\n# Basic usage\n\nFixedHeader is initialised using the `$.fn.dataTable.FixedHeader()` object. For example:\n\n```js\n$(document).ready( function () {\n    var table = $('#example').dataTable();\n    new $.fn.dataTable.FixedHeader( table );\n} );\n```\n\n\n# Documentation / support\n\n* Documentation: http://datatables.net/extensions/FixedHeader/\n* DataTables support forums: http://datatables.net/forums\n\n\n# GitHub\n\nIf you fancy getting involved with the development of FixedHeader and help make it better, please refer to its GitHub repo: https://github.com/DataTables/FixedHeader\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedHeader/css/dataTables.fixedHeader.css",
    "content": "\n\ndiv.FixedHeader_Cloned th,\ndiv.FixedHeader_Cloned td {\n\tbackground-color: white !important;\n}\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedHeader/examples/header_footer.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedHeader example - Header and footer fixed</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedHeader.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedHeader.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.FixedHeader( table, {\n\t\tbottom: true\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedHeader example <span>Header and footer fixed</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>FixedHeader provides the ability to fix in place the header, footer, left and right columns of the\n\t\t\t\ttable. These are controlled by the options:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li><code>top</code> - default true</li>\n\t\t\t\t\t<li><code>bottom</code> - default false</li>\n\t\t\t\t\t<li><code>left</code> - default false</li>\n\t\t\t\t\t<li><code>right</code> - default false</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<p>This example shows the header and footer of the table fixed by enabling the <code>bottom</code>\n\t\t\t\toption.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.FixedHeader( table, {\n\t\tbottom: true\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedHeader.js\">../js/dataTables.fixedHeader.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedHeader.css\">../css/dataTables.fixedHeader.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./header_footer.html\">Header and footer fixed</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./top_left_right.html\">Header, left and right all fixed</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./zIndexes.html\">z-index order control</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedHeader/examples/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\n\t<title>FixedHeader examples - FixedHeader examples</title>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedHeader example <span>FixedHeader examples</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>At times it can be useful to ensure that column titles will remain always visible on a table, even\n\t\t\t\twhen a user scrolls down a table. The FixedHeader plug-in for DataTables will float the <code class=\n\t\t\t\t\"tag\" title=\"HTML tag\">thead</code> element above the table at all times to help address this issue.\n\t\t\t\tThe column titles also remain click-able to perform sorting. Key features include:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li>Fix the header to the top of the window</li>\n\t\t\t\t\t<li>Ability to fix the footer and left / right columns as well</li>\n\t\t\t\t\t<li>z-Index ordering options</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./header_footer.html\">Header and footer fixed</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./top_left_right.html\">Header, left and right all fixed</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./zIndexes.html\">z-index order control</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedHeader/examples/simple.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedHeader example - Basic initialisation</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedHeader.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedHeader.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.FixedHeader( table );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedHeader example <span>Basic initialisation</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>When displaying large amounts of data in a table, it can often be useful for the end user to have\n\t\t\t\tthe column titles (the <code class=\"tag\" title=\"HTML tag\">thead</code> element as a whole in fact)\n\t\t\t\talways visible. This is particularly true if using DataTables with pagination disabled, or the display\n\t\t\t\tlength is set to a high value.</p>\n\n\t\t\t\t<p>The FixedHeader extension for DataTables will ensure that your column titles will scroll with the\n\t\t\t\tpage, showing at the top of the table at all times. Try the demo shown below - you might want to try\n\t\t\t\tresizing the window for full effect! Note also that the column titles remain clickable to perform\n\t\t\t\tsorting on the table.</p>\n\n\t\t\t\t<p>FixedHeader is initialised using the constructor <code>new $.fn.dataTable.FixedHeader();</code> -\n\t\t\t\tshown below.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.FixedHeader( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedHeader.js\">../js/dataTables.fixedHeader.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedHeader.css\">../css/dataTables.fixedHeader.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./header_footer.html\">Header and footer fixed</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./top_left_right.html\">Header, left and right all fixed</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./zIndexes.html\">z-index order control</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedHeader/examples/top_left_right.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedHeader example - Header, left and right all fixed</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedHeader.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\tdiv.dataTables_wrapper {\n\t\twidth: 150%;\n\t}\n\n\tdiv.FixedHeader_Cloned.fixedLeft tbody td {\n\t\tborder-right: 1px solid black;\n\t}\n\n\tdiv.FixedHeader_Cloned.fixedRight tbody td {\n\t\tborder-left: 1px solid black;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedHeader.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\t\"order\": [ 1, 'asc' ],\n\t\t\"ajax\": \"../../../examples/ajax/data/objects.txt\",\n\t\t\"columns\": [\n\t\t\t{ title: '',           data: null, defaultContent: \"\" },\n\t\t\t{ title: 'Name',       data: \"name\" },\n\t\t\t{ title: 'Position',   data: \"position\" },\n\t\t\t{ title: 'Office',     data: \"office\" },\n\t\t\t{ title: 'Extn.',      data: \"extn\" },\n\t\t\t{ title: 'Start date', data: \"start_date\" },\n\t\t\t{ title: 'Salary',     data: \"salary\" },\n\t\t\t{ title: '',           data: null, defaultContent: \"\" }\n\t\t],\n\t\tinitComplete: function () {\n\t\t\tnew $.fn.dataTable.FixedHeader( table, {\n\t\t\t\tleft:   true,\n\t\t\t\tright:  true\n\t\t\t} );\n\t\t}\n\t} );\n\n\ttable.on( 'order.dt search.dt', function () {\n\t\ttable.column(0, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {\n\t\t\tcell.innerHTML = i+1;\n\t\t} );\n\n\t\ttable.column(-1, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {\n\t\t\tcell.innerHTML = i+1;\n\t\t} );\n\t} ).draw();\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedHeader example <span>Header, left and right all fixed</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>FixedHeader provides the ability to fix in place the header, footer, left and right columns of the\n\t\t\t\ttable. These are controlled by the options:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li><code>top</code> - default true</li>\n\t\t\t\t\t<li><code>bottom</code> - default false</li>\n\t\t\t\t\t<li><code>left</code> - default false</li>\n\t\t\t\t\t<li><code>right</code> - default false</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<p>This example shows top, left and right enabled with index columns on the left and right.</p>\n\n\t\t\t\t<p>Note that in such a situation as this, the <a href=\n\t\t\t\t\"//datatables.net/extensions/fixedcolumns\">FixedColumns extension</a> might be more useful,\n\t\t\t\tparticularly if you want to use the scrolling options built into DataTables.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\"></table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\t&quot;order&quot;: [ 1, 'asc' ],\n\t\t&quot;ajax&quot;: &quot;../../../examples/ajax/data/objects.txt&quot;,\n\t\t&quot;columns&quot;: [\n\t\t\t{ title: '',           data: null, defaultContent: &quot;&quot; },\n\t\t\t{ title: 'Name',       data: &quot;name&quot; },\n\t\t\t{ title: 'Position',   data: &quot;position&quot; },\n\t\t\t{ title: 'Office',     data: &quot;office&quot; },\n\t\t\t{ title: 'Extn.',      data: &quot;extn&quot; },\n\t\t\t{ title: 'Start date', data: &quot;start_date&quot; },\n\t\t\t{ title: 'Salary',     data: &quot;salary&quot; },\n\t\t\t{ title: '',           data: null, defaultContent: &quot;&quot; }\n\t\t],\n\t\tinitComplete: function () {\n\t\t\tnew $.fn.dataTable.FixedHeader( table, {\n\t\t\t\tleft:   true,\n\t\t\t\tright:  true\n\t\t\t} );\n\t\t}\n\t} );\n\n\ttable.on( 'order.dt search.dt', function () {\n\t\ttable.column(0, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {\n\t\t\tcell.innerHTML = i+1;\n\t\t} );\n\n\t\ttable.column(-1, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {\n\t\t\tcell.innerHTML = i+1;\n\t\t} );\n\t} ).draw();\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedHeader.js\">../js/dataTables.fixedHeader.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\">div.dataTables_wrapper {\n\t\twidth: 150%;\n\t}\n\n\tdiv.FixedHeader_Cloned.fixedLeft tbody td {\n\t\tborder-right: 1px solid black;\n\t}\n\n\tdiv.FixedHeader_Cloned.fixedRight tbody td {\n\t\tborder-left: 1px solid black;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedHeader.css\">../css/dataTables.fixedHeader.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./header_footer.html\">Header and footer fixed</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./top_left_right.html\">Header, left and right all\n\t\t\t\t\t\t\tfixed</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./zIndexes.html\">z-index order control</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedHeader/examples/two_tables.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedHeader example - Multiple tables</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedHeader.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedHeader.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar t1 = $('table.display').eq(0).DataTable();\n\tnew $.fn.dataTable.FixedHeader( t1, {\n\t\tbottom: true\n\t} );\n\n\tvar t2 = $('table.display').eq(1).DataTable();\n\tnew $.fn.dataTable.FixedHeader( t2, {\n\t\tbottom: true\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedHeader example <span>Multiple tables</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>The following example shows two DataTables enhanced tables both with FixedHeader enabled on them.\n\t\t\t\tThis is done simply by initialising FixedHeader on each table. This example also shows the footer being\n\t\t\t\tfixed in place for the two tables.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<table id=\"\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\tvar t1 = $('table.display').eq(0).DataTable();\n\tnew $.fn.dataTable.FixedHeader( t1, {\n\t\tbottom: true\n\t} );\n\n\tvar t2 = $('table.display').eq(1).DataTable();\n\tnew $.fn.dataTable.FixedHeader( t2, {\n\t\tbottom: true\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedHeader.js\">../js/dataTables.fixedHeader.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedHeader.css\">../css/dataTables.fixedHeader.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./header_footer.html\">Header and footer fixed</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./top_left_right.html\">Header, left and right all fixed</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./two_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./zIndexes.html\">z-index order control</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedHeader/examples/zIndexes.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>FixedHeader example - z-index order control</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.fixedHeader.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\tdiv.dataTables_wrapper {\n\t\twidth: 1500px;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.fixedHeader.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.FixedHeader( table, {\n\t\tleft: true,\n\t\tzLeft: 105\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>FixedHeader example <span>z-index order control</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>When you have two or more columns fixed on a table, there might be occasions when you which to have\n\t\t\t\tone column floating on top of another. This example shows how you can do that with the initialisation\n\t\t\t\tparameters <code>zTop</code>, <code>zBottom</code>, <code>zLeft</code> and <code>zRight</code>. In this\n\t\t\t\texample the left column is set to float on top of the header. The difference is subtle, but can be\n\t\t\t\teffective.</p>\n\n\t\t\t\t<p>The default zIndexes are:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li><code>zTop</code>: 104</li>\n\t\t\t\t\t<li><code>zBottom</code>: 103</li>\n\t\t\t\t\t<li><code>zLeft</code>: 102</li>\n\t\t\t\t\t<li><code>zRight</code>: 101</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<p>This example shows the left column being floated on top of the header.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"stripe row-border order-column\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.FixedHeader( table, {\n\t\tleft: true,\n\t\tzLeft: 105\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.fixedHeader.js\">../js/dataTables.fixedHeader.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\">div.dataTables_wrapper {\n\t\twidth: 1500px;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.fixedHeader.css\">../css/dataTables.fixedHeader.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./header_footer.html\">Header and footer fixed</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./top_left_right.html\">Header, left and right all fixed</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./two_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./zIndexes.html\">z-index order control</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/FixedHeader/js/dataTables.fixedHeader.js",
    "content": "/*! FixedHeader 2.1.2\n * ©2010-2014 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     FixedHeader\n * @description Fix a table's header or footer, so it is always visible while\n *              Scrolling\n * @version     2.1.2\n * @file        dataTables.fixedHeader.js\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     www.sprymedia.co.uk/contact\n * @copyright   Copyright 2009-2014 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/* Global scope for FixedColumns for backwards compatibility - will be removed\n * in future. Not documented in 1.1.x.\n */\n\n/* Global scope for FixedColumns */\nvar FixedHeader;\n\n(function(window, document, undefined) {\n\n\nvar factory = function( $, DataTable ) {\n\"use strict\";\n\n/*\n * Function: FixedHeader\n * Purpose:  Provide 'fixed' header, footer and columns for a DataTable\n * Returns:  object:FixedHeader - must be called with 'new'\n * Inputs:   mixed:mTable - target table\n *  @param {object} dt DataTables instance or HTML table node. With DataTables\n *    1.10 this can also be a jQuery collection (with just a single table in its\n *    result set), a jQuery selector, DataTables API instance or settings\n *    object.\n *  @param {object} [oInit] initialisation settings, with the following\n *    properties (each optional)\n *    * bool:top -    fix the header (default true)\n *    * bool:bottom - fix the footer (default false)\n *    * int:left -    fix the left column(s) (default 0)\n *    * int:right -   fix the right column(s) (default 0)\n *    * int:zTop -    fixed header zIndex\n *    * int:zBottom - fixed footer zIndex\n *    * int:zLeft -   fixed left zIndex\n *    * int:zRight -  fixed right zIndex\n */\nFixedHeader = function ( mTable, oInit ) {\n\t/* Sanity check - you just know it will happen */\n\tif ( ! this instanceof FixedHeader )\n\t{\n\t\talert( \"FixedHeader warning: FixedHeader must be initialised with the 'new' keyword.\" );\n\t\treturn;\n\t}\n\n\tvar that = this;\n\tvar oSettings = {\n\t\t\"aoCache\": [],\n\t\t\"oSides\": {\n\t\t\t\"top\": true,\n\t\t\t\"bottom\": false,\n\t\t\t\"left\": 0,\n\t\t\t\"right\": 0\n\t\t},\n\t\t\"oZIndexes\": {\n\t\t\t\"top\": 104,\n\t\t\t\"bottom\": 103,\n\t\t\t\"left\": 102,\n\t\t\t\"right\": 101\n\t\t},\n\t\t\"oCloneOnDraw\": {\n\t\t\t\"top\": false,\n\t\t\t\"bottom\": false,\n\t\t\t\"left\": true,\n\t\t\t\"right\": true\n\t\t},\n\t\t\"oMes\": {\n\t\t\t\"iTableWidth\": 0,\n\t\t\t\"iTableHeight\": 0,\n\t\t\t\"iTableLeft\": 0,\n\t\t\t\"iTableRight\": 0, /* note this is left+width, not actually \"right\" */\n\t\t\t\"iTableTop\": 0,\n\t\t\t\"iTableBottom\": 0 /* note this is top+height, not actually \"bottom\" */\n\t\t},\n\t\t\"oOffset\": {\n\t\t\t\"top\": 0\n\t\t},\n\t\t\"nTable\": null,\n\t\t\"bFooter\": false,\n\t\t\"bInitComplete\": false\n\t};\n\n\t/*\n\t * Function: fnGetSettings\n\t * Purpose:  Get the settings for this object\n\t * Returns:  object: - settings object\n\t * Inputs:   -\n\t */\n\tthis.fnGetSettings = function () {\n\t\treturn oSettings;\n\t};\n\n\t/*\n\t * Function: fnUpdate\n\t * Purpose:  Update the positioning and copies of the fixed elements\n\t * Returns:  -\n\t * Inputs:   -\n\t */\n\tthis.fnUpdate = function () {\n\t\tthis._fnUpdateClones();\n\t\tthis._fnUpdatePositions();\n\t};\n\n\t/*\n\t * Function: fnPosition\n\t * Purpose:  Update the positioning of the fixed elements\n\t * Returns:  -\n\t * Inputs:   -\n\t */\n\tthis.fnPosition = function () {\n\t\tthis._fnUpdatePositions();\n\t};\n\n\n\tvar dt = $.fn.dataTable.Api ?\n\t\tnew $.fn.dataTable.Api( mTable ).settings()[0] :\n\t\tmTable.fnSettings();\n\n\tdt._oPluginFixedHeader = this;\n\n\t/* Let's do it */\n\tthis.fnInit( dt, oInit );\n\n};\n\n\n/*\n * Variable: FixedHeader\n * Purpose:  Prototype for FixedHeader\n * Scope:    global\n */\nFixedHeader.prototype = {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Initialisation\n\t */\n\n\t/*\n\t * Function: fnInit\n\t * Purpose:  The \"constructor\"\n\t * Returns:  -\n\t * Inputs:   {as FixedHeader function}\n\t */\n\tfnInit: function ( oDtSettings, oInit )\n\t{\n\t\tvar s = this.fnGetSettings();\n\t\tvar that = this;\n\n\t\t/* Record the user definable settings */\n\t\tthis.fnInitSettings( s, oInit );\n\n\t\tif ( oDtSettings.oScroll.sX !== \"\" || oDtSettings.oScroll.sY !== \"\" )\n\t\t{\n\t\t\talert( \"FixedHeader 2 is not supported with DataTables' scrolling mode at this time\" );\n\t\t\treturn;\n\t\t}\n\n\t\ts.nTable = oDtSettings.nTable;\n\t\toDtSettings.aoDrawCallback.unshift( {\n\t\t\t\"fn\": function () {\n\t\t\t\tFixedHeader.fnMeasure();\n\t\t\t\tthat._fnUpdateClones.call(that);\n\t\t\t\tthat._fnUpdatePositions.call(that);\n\t\t\t},\n\t\t\t\"sName\": \"FixedHeader\"\n\t\t} );\n\n\t\ts.bFooter = ($('>tfoot', s.nTable).length > 0) ? true : false;\n\n\t\t/* Add the 'sides' that are fixed */\n\t\tif ( s.oSides.top )\n\t\t{\n\t\t\ts.aoCache.push( that._fnCloneTable( \"fixedHeader\", \"FixedHeader_Header\", that._fnCloneThead ) );\n\t\t}\n\t\tif ( s.oSides.bottom )\n\t\t{\n\t\t\ts.aoCache.push( that._fnCloneTable( \"fixedFooter\", \"FixedHeader_Footer\", that._fnCloneTfoot ) );\n\t\t}\n\t\tif ( s.oSides.left )\n\t\t{\n\t\t\ts.aoCache.push( that._fnCloneTable( \"fixedLeft\", \"FixedHeader_Left\", that._fnCloneTLeft, s.oSides.left ) );\n\t\t}\n\t\tif ( s.oSides.right )\n\t\t{\n\t\t\ts.aoCache.push( that._fnCloneTable( \"fixedRight\", \"FixedHeader_Right\", that._fnCloneTRight, s.oSides.right ) );\n\t\t}\n\n\t\t/* Event listeners for window movement */\n\t\tFixedHeader.afnScroll.push( function () {\n\t\t\tthat._fnUpdatePositions.call(that);\n\t\t} );\n\n\t\t$(window).resize( function () {\n\t\t\tFixedHeader.fnMeasure();\n\t\t\tthat._fnUpdateClones.call(that);\n\t\t\tthat._fnUpdatePositions.call(that);\n\t\t} );\n\n\t\t$(s.nTable)\n\t\t\t.on('column-reorder.dt', function () {\n\t\t\t\tFixedHeader.fnMeasure();\n\t\t\t\tthat._fnUpdateClones( true );\n\t\t\t\tthat._fnUpdatePositions();\n\t\t\t} )\n\t\t\t.on('column-visibility.dt', function () {\n\t\t\t\tFixedHeader.fnMeasure();\n\t\t\t\tthat._fnUpdateClones( true );\n\t\t\t\tthat._fnUpdatePositions();\n\t\t\t} );\n\n\t\t/* Get things right to start with */\n\t\tFixedHeader.fnMeasure();\n\t\tthat._fnUpdateClones();\n\t\tthat._fnUpdatePositions();\n\n\t\ts.bInitComplete = true;\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Support functions\n\t */\n\n\t/*\n\t * Function: fnInitSettings\n\t * Purpose:  Take the user's settings and copy them to our local store\n\t * Returns:  -\n\t * Inputs:   object:s - the local settings object\n\t *           object:oInit - the user's settings object\n\t */\n\tfnInitSettings: function ( s, oInit )\n\t{\n\t\tif ( oInit !== undefined )\n\t\t{\n\t\t\tif ( oInit.top !== undefined ) {\n\t\t\t\ts.oSides.top = oInit.top;\n\t\t\t}\n\t\t\tif ( oInit.bottom !== undefined ) {\n\t\t\t\ts.oSides.bottom = oInit.bottom;\n\t\t\t}\n\t\t\tif ( typeof oInit.left == 'boolean' ) {\n\t\t\t\ts.oSides.left = oInit.left ? 1 : 0;\n\t\t\t}\n\t\t\telse if ( oInit.left !== undefined ) {\n\t\t\t\ts.oSides.left = oInit.left;\n\t\t\t}\n\t\t\tif ( typeof oInit.right == 'boolean' ) {\n\t\t\t\ts.oSides.right = oInit.right ? 1 : 0;\n\t\t\t}\n\t\t\telse if ( oInit.right !== undefined ) {\n\t\t\t\ts.oSides.right = oInit.right;\n\t\t\t}\n\n\t\t\tif ( oInit.zTop !== undefined ) {\n\t\t\t\ts.oZIndexes.top = oInit.zTop;\n\t\t\t}\n\t\t\tif ( oInit.zBottom !== undefined ) {\n\t\t\t\ts.oZIndexes.bottom = oInit.zBottom;\n\t\t\t}\n\t\t\tif ( oInit.zLeft !== undefined ) {\n\t\t\t\ts.oZIndexes.left = oInit.zLeft;\n\t\t\t}\n\t\t\tif ( oInit.zRight !== undefined ) {\n\t\t\t\ts.oZIndexes.right = oInit.zRight;\n\t\t\t}\n\n\t\t\tif ( oInit.offsetTop !== undefined ) {\n\t\t\t\ts.oOffset.top = oInit.offsetTop;\n\t\t\t}\n\t\t\tif ( oInit.alwaysCloneTop !== undefined ) {\n\t\t\t\ts.oCloneOnDraw.top = oInit.alwaysCloneTop;\n\t\t\t}\n\t\t\tif ( oInit.alwaysCloneBottom !== undefined ) {\n\t\t\t\ts.oCloneOnDraw.bottom = oInit.alwaysCloneBottom;\n\t\t\t}\n\t\t\tif ( oInit.alwaysCloneLeft !== undefined ) {\n\t\t\t\ts.oCloneOnDraw.left = oInit.alwaysCloneLeft;\n\t\t\t}\n\t\t\tif ( oInit.alwaysCloneRight !== undefined ) {\n\t\t\t\ts.oCloneOnDraw.right = oInit.alwaysCloneRight;\n\t\t\t}\n\t\t}\n\t},\n\n\t/*\n\t * Function: _fnCloneTable\n\t * Purpose:  Clone the table node and do basic initialisation\n\t * Returns:  -\n\t * Inputs:   -\n\t */\n\t_fnCloneTable: function ( sType, sClass, fnClone, iCells )\n\t{\n\t\tvar s = this.fnGetSettings();\n\t\tvar nCTable;\n\n\t\t/* We know that the table _MUST_ has a DIV wrapped around it, because this is simply how\n\t\t * DataTables works. Therefore, we can set this to be relatively position (if it is not\n\t\t * alreadu absolute, and use this as the base point for the cloned header\n\t\t */\n\t\tif ( $(s.nTable.parentNode).css('position') != \"absolute\" )\n\t\t{\n\t\t\ts.nTable.parentNode.style.position = \"relative\";\n\t\t}\n\n\t\t/* Just a shallow clone will do - we only want the table node */\n\t\tnCTable = s.nTable.cloneNode( false );\n\t\tnCTable.removeAttribute( 'id' );\n\n\t\tvar nDiv = document.createElement( 'div' );\n\t\tnDiv.style.position = \"absolute\";\n\t\tnDiv.style.top = \"0px\";\n\t\tnDiv.style.left = \"0px\";\n\t\tnDiv.className += \" FixedHeader_Cloned \"+sType+\" \"+sClass;\n\n\t\t/* Set the zIndexes */\n\t\tif ( sType == \"fixedHeader\" )\n\t\t{\n\t\t\tnDiv.style.zIndex = s.oZIndexes.top;\n\t\t}\n\t\tif ( sType == \"fixedFooter\" )\n\t\t{\n\t\t\tnDiv.style.zIndex = s.oZIndexes.bottom;\n\t\t}\n\t\tif ( sType == \"fixedLeft\" )\n\t\t{\n\t\t\tnDiv.style.zIndex = s.oZIndexes.left;\n\t\t}\n\t\telse if ( sType == \"fixedRight\" )\n\t\t{\n\t\t\tnDiv.style.zIndex = s.oZIndexes.right;\n\t\t}\n\n\t\t/* remove margins since we are going to position it absolutely */\n\t\tnCTable.style.margin = \"0\";\n\n\t\t/* Insert the newly cloned table into the DOM, on top of the \"real\" header */\n\t\tnDiv.appendChild( nCTable );\n\t\tdocument.body.appendChild( nDiv );\n\n\t\treturn {\n\t\t\t\"nNode\": nCTable,\n\t\t\t\"nWrapper\": nDiv,\n\t\t\t\"sType\": sType,\n\t\t\t\"sPosition\": \"\",\n\t\t\t\"sTop\": \"\",\n\t\t\t\"sLeft\": \"\",\n\t\t\t\"fnClone\": fnClone,\n\t\t\t\"iCells\": iCells\n\t\t};\n\t},\n\n\t/*\n\t * Function: _fnMeasure\n\t * Purpose:  Get the current positioning of the table in the DOM\n\t * Returns:  -\n\t * Inputs:   -\n\t */\n\t_fnMeasure: function ()\n\t{\n\t\tvar\n\t\t\ts = this.fnGetSettings(),\n\t\t\tm = s.oMes,\n\t\t\tjqTable = $(s.nTable),\n\t\t\toOffset = jqTable.offset(),\n\t\t\tiParentScrollTop = this._fnSumScroll( s.nTable.parentNode, 'scrollTop' ),\n\t\t\tiParentScrollLeft = this._fnSumScroll( s.nTable.parentNode, 'scrollLeft' );\n\n\t\tm.iTableWidth = jqTable.outerWidth();\n\t\tm.iTableHeight = jqTable.outerHeight();\n\t\tm.iTableLeft = oOffset.left + s.nTable.parentNode.scrollLeft;\n\t\tm.iTableTop = oOffset.top + iParentScrollTop;\n\t\tm.iTableRight = m.iTableLeft + m.iTableWidth;\n\t\tm.iTableRight = FixedHeader.oDoc.iWidth - m.iTableLeft - m.iTableWidth;\n\t\tm.iTableBottom = FixedHeader.oDoc.iHeight - m.iTableTop - m.iTableHeight;\n\t},\n\n\t/*\n\t * Function: _fnSumScroll\n\t * Purpose:  Sum node parameters all the way to the top\n\t * Returns:  int: sum\n\t * Inputs:   node:n - node to consider\n\t *           string:side - scrollTop or scrollLeft\n\t */\n\t_fnSumScroll: function ( n, side )\n\t{\n\t\tvar i = n[side];\n\t\twhile ( n = n.parentNode )\n\t\t{\n\t\t\tif ( n.nodeName == 'HTML' || n.nodeName == 'BODY' )\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ti = n[side];\n\t\t}\n\t\treturn i;\n\t},\n\n\t/*\n\t * Function: _fnUpdatePositions\n\t * Purpose:  Loop over the fixed elements for this table and update their positions\n\t * Returns:  -\n\t * Inputs:   -\n\t */\n\t_fnUpdatePositions: function ()\n\t{\n\t\tvar s = this.fnGetSettings();\n\t\tthis._fnMeasure();\n\n\t\tfor ( var i=0, iLen=s.aoCache.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( s.aoCache[i].sType == \"fixedHeader\" )\n\t\t\t{\n\t\t\t\tthis._fnScrollFixedHeader( s.aoCache[i] );\n\t\t\t}\n\t\t\telse if ( s.aoCache[i].sType == \"fixedFooter\" )\n\t\t\t{\n\t\t\t\tthis._fnScrollFixedFooter( s.aoCache[i] );\n\t\t\t}\n\t\t\telse if ( s.aoCache[i].sType == \"fixedLeft\" )\n\t\t\t{\n\t\t\t\tthis._fnScrollHorizontalLeft( s.aoCache[i] );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis._fnScrollHorizontalRight( s.aoCache[i] );\n\t\t\t}\n\t\t}\n\t},\n\n\t/*\n\t * Function: _fnUpdateClones\n\t * Purpose:  Loop over the fixed elements for this table and call their cloning functions\n\t * Returns:  -\n\t * Inputs:   -\n\t */\n\t_fnUpdateClones: function ( full )\n\t{\n\t\tvar s = this.fnGetSettings();\n\n\t\tif ( full ) {\n\t\t\t// This is a little bit of a hack to force a full clone draw. When\n\t\t\t// `full` is set to true, we want to reclone the source elements,\n\t\t\t// regardless of the clone-on-draw settings\n\t\t\ts.bInitComplete = false;\n\t\t}\n\n\t\tfor ( var i=0, iLen=s.aoCache.length ; i<iLen ; i++ )\n\t\t{\n\t\t\ts.aoCache[i].fnClone.call( this, s.aoCache[i] );\n\t\t}\n\n\t\tif ( full ) {\n\t\t\ts.bInitComplete = true;\n\t\t}\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Scrolling functions\n\t */\n\n\t/*\n\t * Function: _fnScrollHorizontalLeft\n\t * Purpose:  Update the positioning of the scrolling elements\n\t * Returns:  -\n\t * Inputs:   object:oCache - the cached values for this fixed element\n\t */\n\t_fnScrollHorizontalRight: function ( oCache )\n\t{\n\t\tvar\n\t\t\ts = this.fnGetSettings(),\n\t\t\toMes = s.oMes,\n\t\t\toWin = FixedHeader.oWin,\n\t\t\toDoc = FixedHeader.oDoc,\n\t\t\tnTable = oCache.nWrapper,\n\t\t\tiFixedWidth = $(nTable).outerWidth();\n\n\t\tif ( oWin.iScrollRight < oMes.iTableRight )\n\t\t{\n\t\t\t/* Fully right aligned */\n\t\t\tthis._fnUpdateCache( oCache, 'sPosition', 'absolute', 'position', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sTop', oMes.iTableTop+\"px\", 'top', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sLeft', (oMes.iTableLeft+oMes.iTableWidth-iFixedWidth)+\"px\", 'left', nTable.style );\n\t\t}\n\t\telse if ( oMes.iTableLeft < oDoc.iWidth-oWin.iScrollRight-iFixedWidth )\n\t\t{\n\t\t\t/* Middle */\n\t\t\tthis._fnUpdateCache( oCache, 'sPosition', 'fixed', 'position', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sTop', (oMes.iTableTop-oWin.iScrollTop)+\"px\", 'top', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sLeft', (oWin.iWidth-iFixedWidth)+\"px\", 'left', nTable.style );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Fully left aligned */\n\t\t\tthis._fnUpdateCache( oCache, 'sPosition', 'absolute', 'position', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sTop', oMes.iTableTop+\"px\", 'top', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sLeft', oMes.iTableLeft+\"px\", 'left', nTable.style );\n\t\t}\n\t},\n\n\t/*\n\t * Function: _fnScrollHorizontalLeft\n\t * Purpose:  Update the positioning of the scrolling elements\n\t * Returns:  -\n\t * Inputs:   object:oCache - the cached values for this fixed element\n\t */\n\t_fnScrollHorizontalLeft: function ( oCache )\n\t{\n\t\tvar\n\t\t\ts = this.fnGetSettings(),\n\t\t\toMes = s.oMes,\n\t\t\toWin = FixedHeader.oWin,\n\t\t\toDoc = FixedHeader.oDoc,\n\t\t\tnTable = oCache.nWrapper,\n\t\t\tiCellWidth = $(nTable).outerWidth();\n\n\t\tif ( oWin.iScrollLeft < oMes.iTableLeft )\n\t\t{\n\t\t\t/* Fully left align */\n\t\t\tthis._fnUpdateCache( oCache, 'sPosition', 'absolute', 'position', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sTop', oMes.iTableTop+\"px\", 'top', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sLeft', oMes.iTableLeft+\"px\", 'left', nTable.style );\n\t\t}\n\t\telse if ( oWin.iScrollLeft < oMes.iTableLeft+oMes.iTableWidth-iCellWidth )\n\t\t{\n\t\t\tthis._fnUpdateCache( oCache, 'sPosition', 'fixed', 'position', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sTop', (oMes.iTableTop-oWin.iScrollTop)+\"px\", 'top', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sLeft', \"0px\", 'left', nTable.style );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Fully right align */\n\t\t\tthis._fnUpdateCache( oCache, 'sPosition', 'absolute', 'position', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sTop', oMes.iTableTop+\"px\", 'top', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sLeft', (oMes.iTableLeft+oMes.iTableWidth-iCellWidth)+\"px\", 'left', nTable.style );\n\t\t}\n\t},\n\n\t/*\n\t * Function: _fnScrollFixedFooter\n\t * Purpose:  Update the positioning of the scrolling elements\n\t * Returns:  -\n\t * Inputs:   object:oCache - the cached values for this fixed element\n\t */\n\t_fnScrollFixedFooter: function ( oCache )\n\t{\n\t\tvar\n\t\t\ts = this.fnGetSettings(),\n\t\t\toMes = s.oMes,\n\t\t\toWin = FixedHeader.oWin,\n\t\t\toDoc = FixedHeader.oDoc,\n\t\t\tnTable = oCache.nWrapper,\n\t\t\tiTheadHeight = $(\"thead\", s.nTable).outerHeight(),\n\t\t\tiCellHeight = $(nTable).outerHeight();\n\n\t\tif ( oWin.iScrollBottom < oMes.iTableBottom )\n\t\t{\n\t\t\t/* Below */\n\t\t\tthis._fnUpdateCache( oCache, 'sPosition', 'absolute', 'position', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sTop', (oMes.iTableTop+oMes.iTableHeight-iCellHeight)+\"px\", 'top', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sLeft', oMes.iTableLeft+\"px\", 'left', nTable.style );\n\t\t}\n\t\telse if ( oWin.iScrollBottom < oMes.iTableBottom+oMes.iTableHeight-iCellHeight-iTheadHeight )\n\t\t{\n\t\t\tthis._fnUpdateCache( oCache, 'sPosition', 'fixed', 'position', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sTop', (oWin.iHeight-iCellHeight)+\"px\", 'top', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sLeft', (oMes.iTableLeft-oWin.iScrollLeft)+\"px\", 'left', nTable.style );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Above */\n\t\t\tthis._fnUpdateCache( oCache, 'sPosition', 'absolute', 'position', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sTop', (oMes.iTableTop+iCellHeight)+\"px\", 'top', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sLeft', oMes.iTableLeft+\"px\", 'left', nTable.style );\n\t\t}\n\t},\n\n\t/*\n\t * Function: _fnScrollFixedHeader\n\t * Purpose:  Update the positioning of the scrolling elements\n\t * Returns:  -\n\t * Inputs:   object:oCache - the cached values for this fixed element\n\t */\n\t_fnScrollFixedHeader: function ( oCache )\n\t{\n\t\tvar\n\t\t\ts = this.fnGetSettings(),\n\t\t\toMes = s.oMes,\n\t\t\toWin = FixedHeader.oWin,\n\t\t\toDoc = FixedHeader.oDoc,\n\t\t\tnTable = oCache.nWrapper,\n\t\t\tiTbodyHeight = 0,\n\t\t\tanTbodies = s.nTable.getElementsByTagName('tbody');\n\n\t\tfor (var i = 0; i < anTbodies.length; ++i) {\n\t\t\tiTbodyHeight += anTbodies[i].offsetHeight;\n\t\t}\n\n\t\tif ( oMes.iTableTop > oWin.iScrollTop + s.oOffset.top )\n\t\t{\n\t\t\t/* Above the table */\n\t\t\tthis._fnUpdateCache( oCache, 'sPosition', \"absolute\", 'position', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sTop', oMes.iTableTop+\"px\", 'top', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sLeft', oMes.iTableLeft+\"px\", 'left', nTable.style );\n\t\t}\n\t\telse if ( oWin.iScrollTop + s.oOffset.top > oMes.iTableTop+iTbodyHeight )\n\t\t{\n\t\t\t/* At the bottom of the table */\n\t\t\tthis._fnUpdateCache( oCache, 'sPosition', \"absolute\", 'position', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sTop', (oMes.iTableTop+iTbodyHeight)+\"px\", 'top', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sLeft', oMes.iTableLeft+\"px\", 'left', nTable.style );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* In the middle of the table */\n\t\t\tthis._fnUpdateCache( oCache, 'sPosition', 'fixed', 'position', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sTop', s.oOffset.top+\"px\", 'top', nTable.style );\n\t\t\tthis._fnUpdateCache( oCache, 'sLeft', (oMes.iTableLeft-oWin.iScrollLeft)+\"px\", 'left', nTable.style );\n\t\t}\n\t},\n\n\t/*\n\t * Function: _fnUpdateCache\n\t * Purpose:  Check the cache and update cache and value if needed\n\t * Returns:  -\n\t * Inputs:   object:oCache - local cache object\n\t *           string:sCache - cache property\n\t *           string:sSet - value to set\n\t *           string:sProperty - object property to set\n\t *           object:oObj - object to update\n\t */\n\t_fnUpdateCache: function ( oCache, sCache, sSet, sProperty, oObj )\n\t{\n\t\tif ( oCache[sCache] != sSet )\n\t\t{\n\t\t\toObj[sProperty] = sSet;\n\t\t\toCache[sCache] = sSet;\n\t\t}\n\t},\n\n\n\n\t/**\n\t * Copy the classes of all child nodes from one element to another. This implies\n\t * that the two have identical structure - no error checking is performed to that\n\t * fact.\n\t *  @param {element} source Node to copy classes from\n\t *  @param {element} dest Node to copy classes too\n\t */\n\t_fnClassUpdate: function ( source, dest )\n\t{\n\t\tvar that = this;\n\n\t\tif ( source.nodeName.toUpperCase() === \"TR\" || source.nodeName.toUpperCase() === \"TH\" ||\n\t\t\t source.nodeName.toUpperCase() === \"TD\" || source.nodeName.toUpperCase() === \"SPAN\" )\n\t\t{\n\t\t\tdest.className = source.className;\n\t\t}\n\n\t\t$(source).children().each( function (i) {\n\t\t\tthat._fnClassUpdate( $(source).children()[i], $(dest).children()[i] );\n\t\t} );\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Cloning functions\n\t */\n\n\t/*\n\t * Function: _fnCloneThead\n\t * Purpose:  Clone the thead element\n\t * Returns:  -\n\t * Inputs:   object:oCache - the cached values for this fixed element\n\t */\n\t_fnCloneThead: function ( oCache )\n\t{\n\t\tvar s = this.fnGetSettings();\n\t\tvar nTable = oCache.nNode;\n\n\t\tif ( s.bInitComplete && !s.oCloneOnDraw.top )\n\t\t{\n\t\t\tthis._fnClassUpdate( $('thead', s.nTable)[0], $('thead', nTable)[0] );\n\t\t\treturn;\n\t\t}\n\n\t\t/* Set the wrapper width to match that of the cloned table */\n\t\tvar iDtWidth = $(s.nTable).outerWidth();\n\t\toCache.nWrapper.style.width = iDtWidth+\"px\";\n\t\tnTable.style.width = iDtWidth+\"px\";\n\n\t\t/* Remove any children the cloned table has */\n\t\twhile ( nTable.childNodes.length > 0 )\n\t\t{\n\t\t\t$('thead th', nTable).unbind( 'click' );\n\t\t\tnTable.removeChild( nTable.childNodes[0] );\n\t\t}\n\n\t\t/* Clone the DataTables header */\n\t\tvar nThead = $('thead', s.nTable).clone(true)[0];\n\t\tnTable.appendChild( nThead );\n\n\t\t/* Copy the widths across - apparently a clone isn't good enough for this */\n\t\tvar a = [];\n\t\tvar b = [];\n\n\t\t$(\"thead>tr th\", s.nTable).each( function (i) {\n\t\t\ta.push( $(this).width() );\n\t\t} );\n\n\t\t$(\"thead>tr td\", s.nTable).each( function (i) {\n\t\t\tb.push( $(this).width() );\n\t\t} );\n\n\t\t$(\"thead>tr th\", s.nTable).each( function (i) {\n\t\t\t$(\"thead>tr th:eq(\"+i+\")\", nTable).width( a[i] );\n\t\t\t$(this).width( a[i] );\n\t\t} );\n\n\t\t$(\"thead>tr td\", s.nTable).each( function (i) {\n\t\t\t$(\"thead>tr td:eq(\"+i+\")\", nTable).width( b[i] );\n\t\t\t$(this).width( b[i] );\n\t\t} );\n\n\t\t// Stop DataTables 1.9 from putting a focus ring on the headers when\n\t\t// clicked to sort\n\t\t$('th.sorting, th.sorting_desc, th.sorting_asc', nTable).bind( 'click', function () {\n\t\t\tthis.blur();\n\t\t} );\n\t},\n\n\t/*\n\t * Function: _fnCloneTfoot\n\t * Purpose:  Clone the tfoot element\n\t * Returns:  -\n\t * Inputs:   object:oCache - the cached values for this fixed element\n\t */\n\t_fnCloneTfoot: function ( oCache )\n\t{\n\t\tvar s = this.fnGetSettings();\n\t\tvar nTable = oCache.nNode;\n\n\t\t/* Set the wrapper width to match that of the cloned table */\n\t\toCache.nWrapper.style.width = $(s.nTable).outerWidth()+\"px\";\n\n\t\t/* Remove any children the cloned table has */\n\t\twhile ( nTable.childNodes.length > 0 )\n\t\t{\n\t\t\tnTable.removeChild( nTable.childNodes[0] );\n\t\t}\n\n\t\t/* Clone the DataTables footer */\n\t\tvar nTfoot = $('tfoot', s.nTable).clone(true)[0];\n\t\tnTable.appendChild( nTfoot );\n\n\t\t/* Copy the widths across - apparently a clone isn't good enough for this */\n\t\t$(\"tfoot:eq(0)>tr th\", s.nTable).each( function (i) {\n\t\t\t$(\"tfoot:eq(0)>tr th:eq(\"+i+\")\", nTable).width( $(this).width() );\n\t\t} );\n\n\t\t$(\"tfoot:eq(0)>tr td\", s.nTable).each( function (i) {\n\t\t\t$(\"tfoot:eq(0)>tr td:eq(\"+i+\")\", nTable).width( $(this).width() );\n\t\t} );\n\t},\n\n\t/*\n\t * Function: _fnCloneTLeft\n\t * Purpose:  Clone the left column(s)\n\t * Returns:  -\n\t * Inputs:   object:oCache - the cached values for this fixed element\n\t */\n\t_fnCloneTLeft: function ( oCache )\n\t{\n\t\tvar s = this.fnGetSettings();\n\t\tvar nTable = oCache.nNode;\n\t\tvar nBody = $('tbody', s.nTable)[0];\n\n\t\t/* Remove any children the cloned table has */\n\t\twhile ( nTable.childNodes.length > 0 )\n\t\t{\n\t\t\tnTable.removeChild( nTable.childNodes[0] );\n\t\t}\n\n\t\t/* Is this the most efficient way to do this - it looks horrible... */\n\t\tnTable.appendChild( $(\"thead\", s.nTable).clone(true)[0] );\n\t\tnTable.appendChild( $(\"tbody\", s.nTable).clone(true)[0] );\n\t\tif ( s.bFooter )\n\t\t{\n\t\t\tnTable.appendChild( $(\"tfoot\", s.nTable).clone(true)[0] );\n\t\t}\n\n\t\t/* Remove unneeded cells */\n\t\tvar sSelector = 'gt(' + (oCache.iCells - 1) + ')';\n\t\t$('thead tr', nTable).each( function (k) {\n\t\t\t$('th:' + sSelector, this).remove();\n\t\t} );\n\n\t\t$('tfoot tr', nTable).each( function (k) {\n\t\t\t$('th:' + sSelector, this).remove();\n\t\t} );\n\n\t\t$('tbody tr', nTable).each( function (k) {\n\t\t\t$('td:' + sSelector, this).remove();\n\t\t} );\n\n\t\tthis.fnEqualiseHeights( 'thead', nBody.parentNode, nTable );\n\t\tthis.fnEqualiseHeights( 'tbody', nBody.parentNode, nTable );\n\t\tthis.fnEqualiseHeights( 'tfoot', nBody.parentNode, nTable );\n\n\t\tvar iWidth = 0;\n\t\tfor (var i = 0; i < oCache.iCells; i++) {\n\t\t\tiWidth += $('thead tr th:eq(' + i + ')', s.nTable).outerWidth();\n\t\t}\n\t\tnTable.style.width = iWidth+\"px\";\n\t\toCache.nWrapper.style.width = iWidth+\"px\";\n\t},\n\n\t/*\n\t * Function: _fnCloneTRight\n\t * Purpose:  Clone the right most column(s)\n\t * Returns:  -\n\t * Inputs:   object:oCache - the cached values for this fixed element\n\t */\n\t_fnCloneTRight: function ( oCache )\n\t{\n\t\tvar s = this.fnGetSettings();\n\t\tvar nBody = $('tbody', s.nTable)[0];\n\t\tvar nTable = oCache.nNode;\n\t\tvar iCols = $('tbody tr:eq(0) td', s.nTable).length;\n\n\t\t/* Remove any children the cloned table has */\n\t\twhile ( nTable.childNodes.length > 0 )\n\t\t{\n\t\t\tnTable.removeChild( nTable.childNodes[0] );\n\t\t}\n\n\t\t/* Is this the most efficient way to do this - it looks horrible... */\n\t\tnTable.appendChild( $(\"thead\", s.nTable).clone(true)[0] );\n\t\tnTable.appendChild( $(\"tbody\", s.nTable).clone(true)[0] );\n\t\tif ( s.bFooter )\n\t\t{\n\t\t\tnTable.appendChild( $(\"tfoot\", s.nTable).clone(true)[0] );\n\t\t}\n\t\t$('thead tr th:lt('+(iCols-oCache.iCells)+')', nTable).remove();\n\t\t$('tfoot tr th:lt('+(iCols-oCache.iCells)+')', nTable).remove();\n\n\t\t/* Remove unneeded cells */\n\t\t$('tbody tr', nTable).each( function (k) {\n\t\t\t$('td:lt('+(iCols-oCache.iCells)+')', this).remove();\n\t\t} );\n\n\t\tthis.fnEqualiseHeights( 'thead', nBody.parentNode, nTable );\n\t\tthis.fnEqualiseHeights( 'tbody', nBody.parentNode, nTable );\n\t\tthis.fnEqualiseHeights( 'tfoot', nBody.parentNode, nTable );\n\n\t\tvar iWidth = 0;\n\t\tfor (var i = 0; i < oCache.iCells; i++) {\n\t\t\tiWidth += $('thead tr th:eq('+(iCols-1-i)+')', s.nTable).outerWidth();\n\t\t}\n\t\tnTable.style.width = iWidth+\"px\";\n\t\toCache.nWrapper.style.width = iWidth+\"px\";\n\t},\n\n\n\t/**\n\t * Equalise the heights of the rows in a given table node in a cross browser way. Note that this\n\t * is more or less lifted as is from FixedColumns\n\t *  @method  fnEqualiseHeights\n\t *  @returns void\n\t *  @param   {string} parent Node type - thead, tbody or tfoot\n\t *  @param   {element} original Original node to take the heights from\n\t *  @param   {element} clone Copy the heights to\n\t *  @private\n\t */\n\t\"fnEqualiseHeights\": function ( parent, original, clone )\n\t{\n\t\tvar that = this;\n\t\tvar originals = $(parent +' tr', original);\n\t\tvar height;\n\n\t\t$(parent+' tr', clone).each( function (k) {\n\t\t\theight = originals.eq( k ).css('height');\n\n\t\t\t// This is nasty :-(. IE has a sub-pixel error even when setting\n\t\t\t// the height below (the Firefox fix) which causes the fixed column\n\t\t\t// to go out of alignment. Need to add a pixel before the assignment\n\t\t\t// Can this be feature detected? Not sure how...\n\t\t\tif ( navigator.appName == 'Microsoft Internet Explorer' ) {\n\t\t\t\theight = parseInt( height, 10 ) + 1;\n\t\t\t}\n\n\t\t\t$(this).css( 'height', height );\n\n\t\t\t// For Firefox to work, we need to also set the height of the\n\t\t\t// original row, to the value that we read from it! Otherwise there\n\t\t\t// is a sub-pixel rounding error\n\t\t\toriginals.eq( k ).css( 'height', height );\n\t\t} );\n\t}\n};\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Static properties and methods\n *   We use these for speed! This information is common to all instances of FixedHeader, so no\n * point if having them calculated and stored for each different instance.\n */\n\n/*\n * Variable: oWin\n * Purpose:  Store information about the window positioning\n * Scope:    FixedHeader\n */\nFixedHeader.oWin = {\n\t\"iScrollTop\": 0,\n\t\"iScrollRight\": 0,\n\t\"iScrollBottom\": 0,\n\t\"iScrollLeft\": 0,\n\t\"iHeight\": 0,\n\t\"iWidth\": 0\n};\n\n/*\n * Variable: oDoc\n * Purpose:  Store information about the document size\n * Scope:    FixedHeader\n */\nFixedHeader.oDoc = {\n\t\"iHeight\": 0,\n\t\"iWidth\": 0\n};\n\n/*\n * Variable: afnScroll\n * Purpose:  Array of functions that are to be used for the scrolling components\n * Scope:    FixedHeader\n */\nFixedHeader.afnScroll = [];\n\n/*\n * Function: fnMeasure\n * Purpose:  Update the measurements for the window and document\n * Returns:  -\n * Inputs:   -\n */\nFixedHeader.fnMeasure = function ()\n{\n\tvar\n\t\tjqWin = $(window),\n\t\tjqDoc = $(document),\n\t\toWin = FixedHeader.oWin,\n\t\toDoc = FixedHeader.oDoc;\n\n\toDoc.iHeight = jqDoc.height();\n\toDoc.iWidth = jqDoc.width();\n\n\toWin.iHeight = jqWin.height();\n\toWin.iWidth = jqWin.width();\n\toWin.iScrollTop = jqWin.scrollTop();\n\toWin.iScrollLeft = jqWin.scrollLeft();\n\toWin.iScrollRight = oDoc.iWidth - oWin.iScrollLeft - oWin.iWidth;\n\toWin.iScrollBottom = oDoc.iHeight - oWin.iScrollTop - oWin.iHeight;\n};\n\n\nFixedHeader.version = \"2.1.2\";\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Global processing\n */\n\n/*\n * Just one 'scroll' event handler in FixedHeader, which calls the required components. This is\n * done as an optimisation, to reduce calculation and proagation time\n */\n$(window).scroll( function () {\n\tFixedHeader.fnMeasure();\n\n\tfor ( var i=0, iLen=FixedHeader.afnScroll.length ; i<iLen ; i++ ) {\n\t\tFixedHeader.afnScroll[i]();\n\t}\n} );\n\n\n$.fn.dataTable.FixedHeader = FixedHeader;\n$.fn.DataTable.FixedHeader = FixedHeader;\n\n\nreturn FixedHeader;\n}; // /factory\n\n\n// Define as an AMD module if possible\nif ( typeof define === 'function' && define.amd ) {\n\tdefine( ['jquery', 'datatables'], factory );\n}\nelse if ( typeof exports === 'object' ) {\n    // Node/CommonJS\n    factory( require('jquery'), require('datatables') );\n}\nelse if ( jQuery && !jQuery.fn.dataTable.FixedHeader ) {\n\t// Otherwise simply initialise as normal, stopping multiple evaluation\n\tfactory( jQuery, jQuery.fn.dataTable );\n}\n\n\n})(window, document);\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/KeyTable/Readme.txt",
    "content": "# KeyTable\n\nKeyTable provides enhanced accessibility and navigation options for DataTables enhanced tables, by allowing Excel like cell navigation on any table. Events (focus, blur, action etc) can be assigned to individual cells, columns, rows or all cells to allow advanced interaction options.. Key features include:\n\n* Easy to use spreadsheet like interaction\n* Fully integrated with DataTables\n* Wide range of supported events\n\n\n# Installation\n\nTo use KeyTable, first download DataTables ( http://datatables.net/download ) and place the unzipped KeyTable package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser.\n\n\n# Basic usage\n\nKeyTable is initialised using the `C` option that it adds to DataTables' `dom` option. For example:\n\n```js\n$(document).ready( function () {\n\tvar table = $('#example').DataTable();\n\tnew $.fn.dataTable.KeyTable( table );\n} );\n```\n\n\n# Documentation / support\n\n* Documentation: http://datatables.net/extensions/keytable/\n* DataTables support forums: http://datatables.net/forums\n\n\n# GitHub\n\nIf you fancy getting involved with the development of KeyTable and help make it better, please refer to its GitHub repo: https://github.com/DataTables/KeyTable\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/KeyTable/css/dataTables.keyTable.css",
    "content": "\n\ntable.KeyTable th.focus,\ntable.KeyTable td.focus {\n\toutline: 3px solid #3366FF;\n\toutline-offset: -3px;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/KeyTable/examples/events.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>KeyTable example - Events</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.keyTable.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.keyTable.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\nfunction eventMsg ( msg ) {\n\tvar n = document.getElementById('info');\n\tn.innerHTML += msg+\"<br>\";\n\tn.scrollTop = n.scrollHeight;\n}\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\tvar keys = new $.fn.dataTable.KeyTable( table );\n\n\t/* Focus handler for all cells in last column */\n\tkeys.event.focus( 4, null, function( node, x, y ) {\n\t\teventMsg( \"Cell \"+x+\",\"+y+\" focused ('live' event - column)\" );\n\t} );\n\t\n\t/* Focus handler for all cells in 8th row */\n\tkeys.event.focus( null, 7, function( node, x, y ) {\n\t\teventMsg( \"Cell \"+x+\",\"+y+\" focused ('live' event - row)\" );\n\t} );\n\t\n\t/* Focus using coords. */\n\tkeys.event.focus( 1, 0, function( node ) {\n\t\tkeys.event.remove.focus( node );\n\t\teventMsg( \"Cell 1,0 focus - this event has now been removed\" );\n\t} );\n\t\n\tkeys.event.focus( 1, 3, function() {\n\t\teventMsg( \"Cell 1,3 focus\" );\n\t} );\n\t\n\t/* focus with a node */\n\tkeys.event.focus( $('#example tbody tr:eq(2) td:eq(0)')[0], function() {\n\t\teventMsg( \"Cell 0,2 focus\" );\n\t} );\n\t\n\t/* Blur using a node */\n\tkeys.event.blur( $('#example tbody tr:eq(1) td:eq(2)')[0], function() {\n\t\teventMsg( \"Cell 1,2 blur\" );\n\t} );\n\t\n\t/* Blur using coords */\n\tkeys.event.blur( 2, 4, function() {\n\t\teventMsg( \"Cell 2,4 blur\" );\n\t} );\n\t\n\t/* Action */\n\tkeys.event.action( 2, 2, function( node ) {\n\t\teventMsg( \"Cell 2,2 action\" );\n\t\tif ( node.style.fontWeight == \"\" || node.style.fontWeight == \"normal\" ) {\n\t\t\tnode.style.fontWeight = \"bold\";\n\t\t}\n\t\telse {\n\t\t\tnode.style.fontWeight = \"normal\";\n\t\t}\n\t} );\n\t\n\tkeys.event.action( 2, 5, function( node ) {\n\t\teventMsg( \"Cell 2,5 action\" );\n\t\tif ( node.style.fontStyle == \"\" ) {\n\t\t\tnode.style.fontStyle = \"italic\";\n\t\t}\n\t\telse {\n\t\t\tnode.style.fontStyle = \"\";\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>KeyTable example <span>Events</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>KeyTable provides the ability to listen for events such as <code>focus</code>, <code>blur</code>,\n\t\t\t\t<code>esc</code> (the escape key) and 'return' (the return key) can be assigned event handling\n\t\t\t\tfunctions through KeyTable's the API. This gives you the ability to take an action on a cell.</p>\n\n\t\t\t\t<p>The example shown below has a few cells (selected at random, but near the top) with blur and focus\n\t\t\t\tevents assigned to them. You can also see the navigation around the table using arrow keys.</p>\n\t\t\t</div>\n\n\t\t\t<div id=\"info\" class=\"box\">\n\t\t\t\tEvent information:<br>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">function eventMsg ( msg ) {\n\tvar n = document.getElementById('info');\n\tn.innerHTML += msg+&quot;&lt;br&gt;&quot;;\n\tn.scrollTop = n.scrollHeight;\n}\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\tvar keys = new $.fn.dataTable.KeyTable( table );\n\n\t/* Focus handler for all cells in last column */\n\tkeys.event.focus( 4, null, function( node, x, y ) {\n\t\teventMsg( &quot;Cell &quot;+x+&quot;,&quot;+y+&quot; focused ('live' event - column)&quot; );\n\t} );\n\t\n\t/* Focus handler for all cells in 8th row */\n\tkeys.event.focus( null, 7, function( node, x, y ) {\n\t\teventMsg( &quot;Cell &quot;+x+&quot;,&quot;+y+&quot; focused ('live' event - row)&quot; );\n\t} );\n\t\n\t/* Focus using coords. */\n\tkeys.event.focus( 1, 0, function( node ) {\n\t\tkeys.event.remove.focus( node );\n\t\teventMsg( &quot;Cell 1,0 focus - this event has now been removed&quot; );\n\t} );\n\t\n\tkeys.event.focus( 1, 3, function() {\n\t\teventMsg( &quot;Cell 1,3 focus&quot; );\n\t} );\n\t\n\t/* focus with a node */\n\tkeys.event.focus( $('#example tbody tr:eq(2) td:eq(0)')[0], function() {\n\t\teventMsg( &quot;Cell 0,2 focus&quot; );\n\t} );\n\t\n\t/* Blur using a node */\n\tkeys.event.blur( $('#example tbody tr:eq(1) td:eq(2)')[0], function() {\n\t\teventMsg( &quot;Cell 1,2 blur&quot; );\n\t} );\n\t\n\t/* Blur using coords */\n\tkeys.event.blur( 2, 4, function() {\n\t\teventMsg( &quot;Cell 2,4 blur&quot; );\n\t} );\n\t\n\t/* Action */\n\tkeys.event.action( 2, 2, function( node ) {\n\t\teventMsg( &quot;Cell 2,2 action&quot; );\n\t\tif ( node.style.fontWeight == &quot;&quot; || node.style.fontWeight == &quot;normal&quot; ) {\n\t\t\tnode.style.fontWeight = &quot;bold&quot;;\n\t\t}\n\t\telse {\n\t\t\tnode.style.fontWeight = &quot;normal&quot;;\n\t\t}\n\t} );\n\t\n\tkeys.event.action( 2, 5, function( node ) {\n\t\teventMsg( &quot;Cell 2,5 action&quot; );\n\t\tif ( node.style.fontStyle == &quot;&quot; ) {\n\t\t\tnode.style.fontStyle = &quot;italic&quot;;\n\t\t}\n\t\telse {\n\t\t\tnode.style.fontStyle = &quot;&quot;;\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.keyTable.js\">../js/dataTables.keyTable.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.keyTable.css\">../css/dataTables.keyTable.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./events.html\">Events</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./html.html\">Plain HTML table</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/KeyTable/examples/html.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>KeyTable example - Plain HTML table</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.keyTable.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.keyTable.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').addClass('KeyTable');\n\tnew $.fn.dataTable.KeyTable();\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>KeyTable example <span>Plain HTML table</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>As well as being usable with DataTables, KeyTable can also be used with a plain HTML table. Please\n\t\t\t\tnote that this ability is deprecated and will be removed in KeyTable 1.3.</p>\n\n\t\t\t\t<p>This example shows KeyTable being initialised without any parameter, which instructs it to search\n\t\t\t\tfor any table with the class <code>KeyTable</code> which will be used.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\t$('#example').addClass('KeyTable');\n\tnew $.fn.dataTable.KeyTable();\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.keyTable.js\">../js/dataTables.keyTable.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.keyTable.css\">../css/dataTables.keyTable.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./events.html\">Events</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./html.html\">Plain HTML table</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/KeyTable/examples/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\n\t<title>KeyTable examples - KeyTable examples</title>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>KeyTable example <span>KeyTable examples</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>KeyTable provides enhanced accessibility and navigation options for DataTables enhanced tables, by\n\t\t\t\tallowing Excel like cell navigation on any table. Events (focus, blur, action etc) can be assigned to\n\t\t\t\tindividual cells, columns, rows or all cells to allow advanced interaction options.. Key features\n\t\t\t\tinclude:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li>Easy to use spreadsheet like interaction</li>\n\t\t\t\t\t<li>Fully integrated with DataTables</li>\n\t\t\t\t\t<li>Wide range of supported events</li>\n\t\t\t\t\t<li>Works without DataTables if you just want a plain table</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./events.html\">Events</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./html.html\">Plain HTML table</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/KeyTable/examples/scrolling.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>KeyTable example - Scrolling table</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.keyTable.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.keyTable.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY: 300,\n\t\tpaging: false\n\t} );\n\n\tnew $.fn.dataTable.KeyTable( table );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>KeyTable example <span>Scrolling table</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>KeyTable supports DataTables' scrolling options (<a href=\n\t\t\t\t\"//datatables.net/reference/option/scrollX\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">scrollX<span>DT</span></code></a> and <a href=\n\t\t\t\t\"//datatables.net/reference/option/scrollY\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">scrollY<span>DT</span></code></a>) without required any additional\n\t\t\t\tconfiguration. As the navigation keys are used to alter the focus of the KeyTable, the DataTables\n\t\t\t\tscrolling position is altered to show the focused cell.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY: 300,\n\t\tpaging: false\n\t} );\n\n\tnew $.fn.dataTable.KeyTable( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.keyTable.js\">../js/dataTables.keyTable.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.keyTable.css\">../css/dataTables.keyTable.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./events.html\">Events</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./html.html\">Plain HTML table</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/KeyTable/examples/simple.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>KeyTable example - Basic initialisation</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.keyTable.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.keyTable.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.KeyTable( table );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>KeyTable example <span>Basic initialisation</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>KeyTable allows you to use keyboard navigation on a DataTables enhanced table, like an Excel\n\t\t\t\tspreadsheet. The focused cell is shown through the CSS class ('focus') which in the case below is\n\t\t\t\tsimply a blue border. Use your keyboard's arrow keys and click the cells in the table to navigate.</p>\n\n\t\t\t\t<p>This example simply shows key table being initialised on a DataTable, but <a href=\n\t\t\t\t\"events.html\">events</a> can be listened for through the KeyTable API which provide interaction\n\t\t\t\toptions.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.KeyTable( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.keyTable.js\">../js/dataTables.keyTable.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.keyTable.css\">../css/dataTables.keyTable.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./events.html\">Events</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Scrolling table</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./html.html\">Plain HTML table</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/KeyTable/js/dataTables.keyTable.js",
    "content": "/*! KeyTable 1.2.1\n * ©2010-2014 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     KeyTable\n * @description Spreadsheet like keyboard navigation for DataTables\n * @version     1.2.1\n * @file        dataTables.keyTable.js\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     www.sprymedia.co.uk/contact\n * @copyright   Copyright 2009-2014 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n// Global scope for KeyTable for backwards compatibility. Will be removed in 1.3\nvar KeyTable;\n\n\n(function(window, document, undefined) {\n\n\nvar factory = function( $, DataTable ) {\n\"use strict\";\n\nKeyTable = function ( oInit )\n{\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * API parameters\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/*\n\t * Variable: block\n\t * Purpose:  Flag whether or not KeyTable events should be processed\n\t * Scope:    KeyTable - public\n\t */\n\tthis.block = false;\n\n\t/*\n\t * Variable: event\n\t * Purpose:  Container for all event application methods\n\t * Scope:    KeyTable - public\n\t * Notes:    This object contains all the public methods for adding and removing events - these\n\t *           are dynamically added later on\n\t */\n\tthis.event = {\n\t\t\"remove\": {}\n\t};\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * API methods\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/*\n\t * Function: fnGetCurrentPosition\n\t * Purpose:  Get the currently focused cell's position\n\t * Returns:  array int: [ x, y ]\n\t * Inputs:   void\n\t */\n\tthis.fnGetCurrentPosition = function ()\n\t{\n\t\treturn [ _iOldX, _iOldY ];\n\t};\n\n\n\t/*\n\t * Function: fnGetCurrentData\n\t * Purpose:  Get the currently focused cell's data (innerHTML)\n\t * Returns:  string: - data requested\n\t * Inputs:   void\n\t */\n\tthis.fnGetCurrentData = function ()\n\t{\n\t\treturn _nOldFocus.innerHTML;\n\t};\n\n\n\t/*\n\t * Function: fnGetCurrentTD\n\t * Purpose:  Get the currently focused cell\n\t * Returns:  node: - focused element\n\t * Inputs:   void\n\t */\n\tthis.fnGetCurrentTD = function ()\n\t{\n\t\treturn _nOldFocus;\n\t};\n\n\n\t/*\n\t * Function: fnSetPosition\n\t * Purpose:  Set the position of the focused cell\n\t * Returns:  -\n\t * Inputs:   int:x - x coordinate\n\t *           int:y - y coordinate\n\t * Notes:    Thanks to Rohan Daxini for the basis of this function\n\t */\n\tthis.fnSetPosition = function( x, y )\n\t{\n\t\tif ( typeof x == 'object' && x.nodeName )\n\t\t{\n\t\t\t_fnSetFocus( x );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_fnSetFocus( _fnCellFromCoords(x, y) );\n\t\t}\n\t};\n\n\n\t/*\n\t * Function: fnBlur\n\t * Purpose:  Blur the current focus\n\t * Returns:  -\n\t * Inputs:   -\n\t */\n\tthis.fnBlur = function()\n\t{\n\t\t_fnBlur();\n\t};\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private parameters\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/*\n\t * Variable: _nBody\n\t * Purpose:  Body node of the table - cached for renference\n\t * Scope:    KeyTable - private\n\t */\n\tvar _nBody = null;\n\n\t/*\n\t * Variable: \n\t * Purpose:  \n\t * Scope:    KeyTable - private\n\t */\n\tvar _nOldFocus = null;\n\n\t/*\n\t * Variable: _iOldX and _iOldY\n\t * Purpose:  X and Y coords of the old elemet that was focused on\n\t * Scope:    KeyTable - private\n\t */\n\tvar _iOldX = null;\n\tvar _iOldY = null;\n\n\t/*\n\t * Variable: _that\n\t * Purpose:  Scope saving for 'this' after a jQuery event\n\t * Scope:    KeyTable - private\n\t */\n\tvar _that = null;\n\n\t/*\n\t * Variable: sFocusClass\n\t * Purpose:  Class that should be used for focusing on a cell\n\t * Scope:    KeyTable - private\n\t */\n\tvar _sFocusClass = \"focus\";\n\n\t/*\n\t * Variable: _bKeyCapture\n\t * Purpose:  Flag for should KeyTable capture key events or not\n\t * Scope:    KeyTable - private\n\t */\n\tvar _bKeyCapture = false;\n\n\t/*\n\t * Variable: _oaoEvents\n\t * Purpose:  Event cache object, one array for each supported event for speed of searching\n\t * Scope:    KeyTable - private\n\t */\n\tvar _oaoEvents = {\n\t\t\"action\": [],\n\t\t\"esc\": [],\n\t\t\"focus\": [],\n\t\t\"blur\": []\n\t};\n\n\t/*\n\t * Variable: _oDatatable\n\t * Purpose:  DataTables settings object for if we are actually using a \n\t *           DataTables table\n\t * Scope:    KeyTable - private\n\t */\n\tvar _oDatatable = null;\n\n\tvar _bForm;\n\tvar _nInput;\n\tvar _bInputFocused = false;\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Key table events\n\t */\n\n\t/*\n\t * Function: _fnEventAddTemplate\n\t * Purpose:  Create a function (with closure for sKey) event addition API\n\t * Returns:  function: - template function\n\t * Inputs:   string:sKey - type of event to detect\n\t */\n\tfunction _fnEventAddTemplate( sKey )\n\t{\n\t\t/*\n\t\t * Function: -\n\t\t * Purpose:  API function for adding event to cache\n\t\t * Returns:  -\n\t\t * Inputs:   1. node:x - target node to add event for\n\t\t *           2. function:y - callback function to apply\n\t\t *         or\n\t\t *           1. int:x - x coord. of target cell (can be null for live events)\n\t\t *           2. int:y - y coord. of target cell (can be null for live events)\n\t\t *           3. function:z - callback function to apply\n\t\t * Notes:    This function is (interally) overloaded (in as much as javascript allows for\n\t\t *           that) - the target cell can be given by either node or coords.\n\t\t */\n\t\treturn function ( x, y, z ) {\n\t\t\tif ( (x===null || typeof x == \"number\") &&\n\t\t\t\t (y===null || typeof y == \"number\") &&\n\t\t\t\t typeof z == \"function\" )\n\t\t\t{\n\t\t\t\t_fnEventAdd( sKey, x, y, z );\n\t\t\t}\n\t\t\telse if ( typeof x == \"object\" && typeof y == \"function\" )\n\t\t\t{\n\t\t\t\tvar aCoords = _fnCoordsFromCell( x );\n\t\t\t\t_fnEventAdd( sKey, aCoords[0], aCoords[1], y );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\talert( \"Unhandable event type was added: x\" +x+ \"  y:\" +y+ \"  z:\" +z );\n\t\t\t}\n\t\t};\n\t}\n\n\n\t/*\n\t * Function: _fnEventRemoveTemplate\n\t * Purpose:  Create a function (with closure for sKey) event removal API\n\t * Returns:  function: - template function\n\t * Inputs:   string:sKey - type of event to detect\n\t */\n\tfunction _fnEventRemoveTemplate( sKey )\n\t{\n\t\t/*\n\t\t * Function: -\n\t\t * Purpose:  API function for removing event from cache\n\t\t * Returns:  int: - number of events removed\n\t\t * Inputs:   1. node:x - target node to remove event from\n\t\t *           2. function:y - callback function to apply\n\t\t *         or\n\t\t *           1. int:x - x coord. of target cell (can be null for live events)\n\t\t *           2. int:y - y coord. of target cell (can be null for live events)\n\t\t *           3. function:z - callback function to remove - optional\n\t\t * Notes:    This function is (interally) overloaded (in as much as javascript allows for\n\t\t *           that) - the target cell can be given by either node or coords and the function\n\t\t *           to remove is optional\n\t\t */\n\t\treturn function ( x, y, z ) {\n\t\t\tif ( (x===null || typeof arguments[0] == \"number\") &&\n\t\t\t\t (y===null || typeof arguments[1] == \"number\" ) )\n\t\t\t{\n\t\t\t\tif ( typeof arguments[2] == \"function\" )\n\t\t\t\t{\n\t\t\t\t\t_fnEventRemove( sKey, x, y, z );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_fnEventRemove( sKey, x, y );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( typeof arguments[0] == \"object\" )\n\t\t\t{\n\t\t\t\tvar aCoords = _fnCoordsFromCell( x );\n\t\t\t\tif ( typeof arguments[1] == \"function\" )\n\t\t\t\t{\n\t\t\t\t\t_fnEventRemove( sKey, aCoords[0], aCoords[1], y );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_fnEventRemove( sKey, aCoords[0], aCoords[1] );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\talert( \"Unhandable event type was removed: x\" +x+ \"  y:\" +y+ \"  z:\" +z );\n\t\t\t}\n\t\t};\n\t}\n\n\t/* Use the template functions to add the event API functions */\n\tfor ( var sKey in _oaoEvents )\n\t{\n\t\tif ( sKey )\n\t\t{\n\t\t\tthis.event[sKey] = _fnEventAddTemplate( sKey );\n\t\t\tthis.event.remove[sKey] = _fnEventRemoveTemplate( sKey );\n\t\t}\n\t}\n\n\n\t/*\n\t * Function: _fnEventAdd\n\t * Purpose:  Add an event to the internal cache\n\t * Returns:  -\n\t * Inputs:   string:sType - type of event to add, given by the available elements in _oaoEvents\n\t *           int:x - x-coords to add event to - can be null for \"blanket\" event\n\t *           int:y - y-coords to add event to - can be null for \"blanket\" event\n\t *           function:fn - callback function for when triggered\n\t */\n\tfunction _fnEventAdd( sType, x, y, fn )\n\t{\n\t\t_oaoEvents[sType].push( {\n\t\t\t\"x\": x,\n\t\t\t\"y\": y,\n\t\t\t\"fn\": fn\n\t\t} );\n\t}\n\n\n\t/*\n\t * Function: _fnEventRemove\n\t * Purpose:  Remove an event from the event cache\n\t * Returns:  int: - number of matching events removed\n\t * Inputs:   string:sType - type of event to look for\n\t *           node:nTarget - target table cell\n\t *           function:fn - optional - remove this function. If not given all handlers of this\n\t *             type will be removed\n\t */\n\tfunction _fnEventRemove( sType, x, y, fn )\n\t{\n\t\tvar iCorrector = 0;\n\n\t\tfor ( var i=0, iLen=_oaoEvents[sType].length ; i<iLen-iCorrector ; i++ )\n\t\t{\n\t\t\tif ( typeof fn != 'undefined' )\n\t\t\t{\n\t\t\t\tif ( _oaoEvents[sType][i-iCorrector].x == x &&\n\t\t\t\t\t _oaoEvents[sType][i-iCorrector].y == y &&\n\t\t\t\t\t   _oaoEvents[sType][i-iCorrector].fn == fn )\n\t\t\t\t{\n\t\t\t\t\t_oaoEvents[sType].splice( i-iCorrector, 1 );\n\t\t\t\t\tiCorrector++;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif ( _oaoEvents[sType][i-iCorrector].x == x &&\n\t\t\t\t\t _oaoEvents[sType][i-iCorrector].y == y )\n\t\t\t\t{\n\t\t\t\t\t_oaoEvents[sType].splice( i, 1 );\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn iCorrector;\n\t}\n\n\n\t/*\n\t * Function: _fnEventFire\n\t * Purpose:  Look thought the events cache and fire off the event of interest\n\t * Returns:  int:iFired - number of events fired\n\t * Inputs:   string:sType - type of event to look for\n\t *           int:x - x coord of cell\n\t *           int:y - y coord of  ell\n\t * Notes:    It might be more efficient to return after the first event has been tirggered,\n\t *           but that would mean that only one function of a particular type can be\n\t *           subscribed to a particular node.\n\t */\n\tfunction _fnEventFire ( sType, x, y )\n\t{\n\t\tvar iFired = 0;\n\t\tvar aEvents = _oaoEvents[sType];\n\t\tfor ( var i=0 ; i<aEvents.length ; i++ )\n\t\t{\n\t\t\tif ( (aEvents[i].x == x     && aEvents[i].y == y    ) ||\n\t\t\t\t (aEvents[i].x === null && aEvents[i].y == y    ) ||\n\t\t\t\t (aEvents[i].x == x     && aEvents[i].y === null ) ||\n\t\t\t\t (aEvents[i].x === null && aEvents[i].y === null )\n\t\t\t)\n\t\t\t{\n\t\t\t\taEvents[i].fn( _fnCellFromCoords(x,y), x, y );\n\t\t\t\tiFired++;\n\t\t\t}\n\t\t}\n\t\treturn iFired;\n\t}\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Focus functions\n\t */\n\n\t/*\n\t * Function: _fnSetFocus\n\t * Purpose:  Set focus on a node, and remove from an old node if needed\n\t * Returns:  -\n\t * Inputs:   node:nTarget - node we want to focus on\n\t *           bool:bAutoScroll - optional - should we scroll the view port to the display\n\t */\n\tfunction _fnSetFocus( nTarget, bAutoScroll )\n\t{\n\t\t/* If node already has focus, just ignore this call */\n\t\tif ( _nOldFocus == nTarget )\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif ( typeof bAutoScroll == 'undefined' )\n\t\t{\n\t\t\tbAutoScroll = true;\n\t\t}\n\n\t\t/* Remove old focus (with blur event if needed) */\n\t\tif ( _nOldFocus !== null )\n\t\t{\n\t\t\t_fnRemoveFocus( _nOldFocus );\n\t\t}\n\n\t\t/* Add the new class to highlight the focused cell */\n\t\t$(nTarget).addClass( _sFocusClass );\n\t\t$(nTarget).parent().addClass( _sFocusClass );\n\n\t\t/* If it's a DataTable then we need to jump the paging to the relevant page */\n\t\tvar oSettings;\n\t\tif ( _oDatatable )\n\t\t{\n\t\t\toSettings = _oDatatable;\n\t\t\tvar iRow = _fnFindDtCell( nTarget )[1];\n\t\t\tvar bKeyCaptureCache = _bKeyCapture;\n\n\t\t\t/* Page forwards */\n\t\t\twhile ( iRow >= oSettings.fnDisplayEnd() )\n\t\t\t{\n\t\t\t\tif ( oSettings._iDisplayLength >= 0 )\n\t\t\t\t{\n\t\t\t\t\t/* Make sure we are not over running the display array */\n\t\t\t\t\tif ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() )\n\t\t\t\t\t{\n\t\t\t\t\t\toSettings._iDisplayStart += oSettings._iDisplayLength;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\toSettings._iDisplayStart = 0;\n\t\t\t\t}\n\t\t\t\t_oDatatable.oApi._fnCalculateEnd( oSettings );\n\t\t\t}\n\n\t\t\t/* Page backwards */\n\t\t\twhile ( iRow < oSettings._iDisplayStart )\n\t\t\t{\n\t\t\t\toSettings._iDisplayStart = oSettings._iDisplayLength>=0 ?\n\t\t\t\t\toSettings._iDisplayStart - oSettings._iDisplayLength :\n\t\t\t\t\t0;\n\n\t\t\t\tif ( oSettings._iDisplayStart < 0 )\n\t\t\t\t{\n\t\t\t\t  oSettings._iDisplayStart = 0;\n\t\t\t\t}\n\t\t\t\t_oDatatable.oApi._fnCalculateEnd( oSettings );\n\t\t\t}\n\n\t\t\t/* Re-draw the table */\n\t\t\t_oDatatable.oApi._fnDraw( oSettings );\n\n\t\t\t/* Restore the key capture */\n\t\t\t_bKeyCapture = bKeyCaptureCache;\n\t\t}\n\n\t\t/* Cache the information that we are interested in */\n\t\tvar aNewPos = _fnCoordsFromCell( nTarget );\n\t\t_nOldFocus = nTarget;\n\t\t_iOldX = aNewPos[0];\n\t\t_iOldY = aNewPos[1];\n\n\t\tvar iViewportHeight, iViewportWidth, iScrollTop, iScrollLeft, iHeight, iWidth, aiPos;\n\t\tif ( bAutoScroll )\n\t\t{\n\t\t\t/* Scroll the viewport such that the new cell is fully visible in the rendered window */\n\t\t\tiViewportHeight = $(window).height();\n\t\t\tiViewportWidth = $(window).width();\n\t\t\tiScrollTop = $(document).scrollTop();\n\t\t\tiScrollLeft = $(document).scrollLeft();\n\t\t\tiHeight = nTarget.offsetHeight;\n\t\t\tiWidth = nTarget.offsetWidth;\n\t\t\taiPos = _fnGetPos( nTarget );\n\n\t\t\t/* Take account of scrolling in DataTables 1.7 - remove scrolling since that would add to\n\t\t\t * the positioning calculation\n\t\t\t */\n\t\t\tif ( _oDatatable && typeof oSettings.oScroll != 'undefined' &&\n\t\t\t  (oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\") )\n\t\t\t{\n\t\t\t\taiPos[1] -= $(oSettings.nTable.parentNode).scrollTop();\n\t\t\t\taiPos[0] -= $(oSettings.nTable.parentNode).scrollLeft();\n\t\t\t}\n\n\t\t\t/* Correct viewport positioning for vertical scrolling */\n\t\t\tif ( aiPos[1]+iHeight > iScrollTop+iViewportHeight )\n\t\t\t{\n\t\t\t\t/* Displayed element if off the bottom of the viewport */\n\t\t\t\t_fnSetScrollTop( aiPos[1]+iHeight - iViewportHeight );\n\t\t\t}\n\t\t\telse if ( aiPos[1] < iScrollTop )\n\t\t\t{\n\t\t\t\t/* Displayed element if off the top of the viewport */\n\t\t\t\t_fnSetScrollTop( aiPos[1] );\n\t\t\t}\n\n\t\t\t/* Correct viewport positioning for horizontal scrolling */\n\t\t\tif ( aiPos[0]+iWidth > iScrollLeft+iViewportWidth )\n\t\t\t{\n\t\t\t\t/* Displayed element is off the bottom of the viewport */\n\t\t\t\t_fnSetScrollLeft( aiPos[0]+iWidth - iViewportWidth );\n\t\t\t}\n\t\t\telse if ( aiPos[0] < iScrollLeft )\n\t\t\t{\n\t\t\t\t/* Displayed element if off the Left of the viewport */\n\t\t\t\t_fnSetScrollLeft( aiPos[0] );\n\t\t\t}\n\t\t}\n\n\t\t/* Take account of scrolling in DataTables 1.7 */\n\t\tif ( _oDatatable && typeof oSettings.oScroll != 'undefined' &&\n\t\t  (oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\") )\n\t\t{\n\t\t\tvar dtScrollBody = oSettings.nTable.parentNode;\n\t\t\tiViewportHeight = dtScrollBody.clientHeight;\n\t\t\tiViewportWidth = dtScrollBody.clientWidth;\n\t\t\tiScrollTop = dtScrollBody.scrollTop;\n\t\t\tiScrollLeft = dtScrollBody.scrollLeft;\n\t\t\tiHeight = nTarget.offsetHeight;\n\t\t\tiWidth = nTarget.offsetWidth;\n\n\t\t\t/* Correct for vertical scrolling */\n\t\t\tif ( nTarget.offsetTop + iHeight > iViewportHeight+iScrollTop )\n\t\t\t{\n\t\t\t\tdtScrollBody.scrollTop = (nTarget.offsetTop + iHeight) - iViewportHeight;\n\t\t\t}\n\t\t\telse if ( nTarget.offsetTop < iScrollTop )\n\t\t\t{\n\t\t\t\tdtScrollBody.scrollTop = nTarget.offsetTop;\n\t\t\t}\n\n\t\t\t/* Correct for horizontal scrolling */\n\t\t\tif ( nTarget.offsetLeft + iWidth > iViewportWidth+iScrollLeft )\n\t\t\t{\n\t\t\t\tdtScrollBody.scrollLeft = (nTarget.offsetLeft + iWidth) - iViewportWidth;\n\t\t\t}\n\t\t\telse if ( nTarget.offsetLeft < iScrollLeft )\n\t\t\t{\n\t\t\t\tdtScrollBody.scrollLeft = nTarget.offsetLeft;\n\t\t\t}\n\t\t}\n\n\t\t/* Focused - so we want to capture the keys */\n\t\t_fnCaptureKeys();\n\n\t\t/* Fire of the focus event if there is one */\n\t\t_fnEventFire( \"focus\", _iOldX, _iOldY );\n\t}\n\n\n\t/*\n\t * Function: _fnBlur\n\t * Purpose:  Blur focus from the whole table\n\t * Returns:  -\n\t * Inputs:   -\n\t */\n\tfunction _fnBlur()\n\t{\n\t\t_fnRemoveFocus( _nOldFocus );\n\t\t_iOldX = null;\n\t\t_iOldY = null;\n\t\t_nOldFocus = null;\n\t\t_fnReleaseKeys();\n\t}\n\n\n\t/*\n\t * Function: _fnRemoveFocus\n\t * Purpose:  Remove focus from a cell and fire any blur events which are attached\n\t * Returns:  -\n\t * Inputs:   node:nTarget - cell of interest\n\t */\n\tfunction _fnRemoveFocus( nTarget )\n\t{\n\t\t$(nTarget).removeClass( _sFocusClass );\n\t\t$(nTarget).parent().removeClass( _sFocusClass );\n\t\t_fnEventFire( \"blur\", _iOldX, _iOldY );\n\t}\n\n\n\t/*\n\t * Function: _fnClick\n\t * Purpose:  Focus on the element that has been clicked on by the user\n\t * Returns:  -\n\t * Inputs:   event:e - click event\n\t */\n\tfunction _fnClick ( e )\n\t{\n\t\tvar nTarget = this;\n\t\twhile ( nTarget.nodeName != \"TD\" )\n\t\t{\n\t\t\tnTarget = nTarget.parentNode;\n\t\t}\n\n\t\t_fnSetFocus( nTarget );\n\t\t_fnCaptureKeys();\n\t}\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Key events\n\t */\n\n\t/*\n\t * Function: _fnKey\n\t * Purpose:  Deal with a key events, be it moving the focus or return etc.\n\t * Returns:  bool: - allow browser default action\n\t * Inputs:   event:e - key event\n\t */\n\tfunction _fnKey ( e )\n\t{\n\t\t/* If user or system has blocked KeyTable from doing anything, just ignore this event */\n\t\tif ( _that.block || !_bKeyCapture )\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\t/* If a modifier key is pressed (exapct shift), ignore the event */\n\t\tif ( e.metaKey || e.altKey || e.ctrlKey )\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tvar\n\t\t\tx, y,\n\t\t\tiTableWidth = _nBody.getElementsByTagName('tr')[0].getElementsByTagName('td').length,\n\t\t\tiTableHeight;\n\n\t\t/* Get table height and width - done here so as to be dynamic (if table is updated) */\n\t\tif ( _oDatatable )\n\t\t{\n\t\t\t/* \n\t\t\t * Locate the current node in the DataTable overriding the old positions - the reason for\n\t\t\t * is is that there might have been some DataTables interaction between the last focus and\n\t\t\t * now\n\t\t\t */\n\t\t\tiTableHeight = _oDatatable.aiDisplay.length;\n\n\t\t\tvar aDtPos = _fnFindDtCell( _nOldFocus );\n\t\t\tif ( aDtPos === null )\n\t\t\t{\n\t\t\t\t/* If the table has been updated such that the focused cell can't be seen - do nothing */\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_iOldX = aDtPos[ 0 ];\n\t\t\t_iOldY = aDtPos[ 1 ];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tiTableHeight = _nBody.getElementsByTagName('tr').length;\n\t\t}\n\n\t\t/* Capture shift+tab to match the left arrow key */\n\t\tvar iKey = (e.keyCode == 9 && e.shiftKey) ? -1 : e.keyCode;\n\n\t\tswitch( iKey )\n\t\t{\n\t\t\tcase 13: /* return */\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\t_fnEventFire( \"action\", _iOldX, _iOldY );\n\t\t\t\treturn true;\n\n\t\t\tcase 27: /* esc */\n\t\t\t\tif ( !_fnEventFire( \"esc\", _iOldX, _iOldY ) )\n\t\t\t\t{\n\t\t\t\t\t/* Only lose focus if there isn't an escape handler on the cell */\n\t\t\t\t\t_fnBlur();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tx = _iOldX;\n\t\t\t\ty = _iOldY;\n\t\t\t\tbreak;\n\n\t\t\tcase -1:\n\t\t\tcase 37: /* left arrow */\n\t\t\t\tif ( _iOldX > 0 ) {\n\t\t\t\t\tx = _iOldX - 1;\n\t\t\t\t\ty = _iOldY;\n\t\t\t\t} else if ( _iOldY > 0 ) {\n\t\t\t\t\tx = iTableWidth-1;\n\t\t\t\t\ty = _iOldY - 1;\n\t\t\t\t} else {\n\t\t\t\t\t/* at start of table */\n\t\t\t\t\tif ( iKey == -1 && _bForm )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* If we are in a form, return focus to the 'input' element such that tabbing will\n\t\t\t\t\t\t * follow correctly in the browser\n\t\t\t\t\t\t */\n\t\t\t\t\t\t_bInputFocused = true;\n\t\t\t\t\t\t_nInput.focus();\n\n\t\t\t\t\t\t/* This timeout is a little nasty - but IE appears to have some asyhnc behaviour for \n\t\t\t\t\t\t * focus\n\t\t\t\t\t\t */\n\t\t\t\t\t\tsetTimeout( function(){ _bInputFocused = false; }, 0 );\n\t\t\t\t\t\t_bKeyCapture = false;\n\t\t\t\t\t\t_fnBlur();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 38: /* up arrow */\n\t\t\t\tif ( _iOldY > 0 ) {\n\t\t\t\t\tx = _iOldX;\n\t\t\t\t\ty = _iOldY - 1;\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 36: /* home */\n\t\t\t\tx = _iOldX;\n\t\t\t\ty = 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 33: /* page up */\n\t\t\t\tx = _iOldX;\n\t\t\t\ty = _iOldY - 10;\n\t\t\t\tif (y < 0) {\n\t\t\t\t\ty = 0;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 9: /* tab */\n\t\t\tcase 39: /* right arrow */\n\t\t\t\tif ( _iOldX < iTableWidth-1 ) {\n\t\t\t\t\tx = _iOldX + 1;\n\t\t\t\t\ty = _iOldY;\n\t\t\t\t} else if ( _iOldY < iTableHeight-1 ) {\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = _iOldY + 1;\n\t\t\t\t} else {\n\t\t\t\t\t/* at end of table */\n\t\t\t\t\tif ( iKey == 9 && _bForm )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* If we are in a form, return focus to the 'input' element such that tabbing will\n\t\t\t\t\t\t * follow correctly in the browser\n\t\t\t\t\t\t */\n\t\t\t\t\t\t_bInputFocused = true;\n\t\t\t\t\t\t_nInput.focus();\n\n\t\t\t\t\t\t/* This timeout is a little nasty - but IE appears to have some asyhnc behaviour for \n\t\t\t\t\t\t * focus\n\t\t\t\t\t\t */\n\t\t\t\t\t\tsetTimeout( function(){ _bInputFocused = false; }, 0 );\n\t\t\t\t\t\t_bKeyCapture = false;\n\t\t\t\t\t\t_fnBlur();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 40: /* down arrow */\n\t\t\t\tif ( _iOldY < iTableHeight-1 ) {\n\t\t\t\t\tx = _iOldX;\n\t\t\t\t\ty = _iOldY + 1;\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 35: /* end */\n\t\t\t\tx = _iOldX;\n\t\t\t\ty = iTableHeight-1;\n\t\t\t\tbreak;\n\n\t\t\tcase 34: /* page down */\n\t\t\t\tx = _iOldX;\n\t\t\t\ty = _iOldY+10;\n\t\t\t\tif (y > iTableHeight-1) {\n\t\t\t\t\ty = iTableHeight-1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault: /* Nothing we are interested in */\n\t\t\t\treturn true;\n\t\t}\n\n\t\t_fnSetFocus( _fnCellFromCoords(x, y) );\n\t\treturn false;\n\t}\n\n\n\t/*\n\t * Function: _fnCaptureKeys\n\t * Purpose:  Start capturing key events for this table\n\t * Returns:  -\n\t * Inputs:   -\n\t */\n\tfunction _fnCaptureKeys( )\n\t{\n\t\tif ( !_bKeyCapture )\n\t\t{\n\t\t\t_bKeyCapture = true;\n\t\t}\n\t}\n\n\n\t/*\n\t * Function: _fnReleaseKeys\n\t * Purpose:  Stop capturing key events for this table\n\t * Returns:  -\n\t * Inputs:   -\n\t */\n\tfunction _fnReleaseKeys( )\n\t{\n\t\t_bKeyCapture = false;\n\t}\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Support functions\n\t */\n\n\t/*\n\t * Function: _fnCellFromCoords\n\t * Purpose:  Calulate the target TD cell from x and y coordinates\n\t * Returns:  node: - TD target\n\t * Inputs:   int:x - x coordinate\n\t *           int:y - y coordinate\n\t */\n\tfunction _fnCellFromCoords( x, y )\n\t{\n\t\tif ( _oDatatable )\n\t\t{\n\t\t\tif ( typeof _oDatatable.aoData[ _oDatatable.aiDisplay[ y ] ] != 'undefined' )\n\t\t\t{\n\t\t\t\treturn _oDatatable.aoData[ _oDatatable.aiDisplay[ y ] ].nTr.getElementsByTagName('td')[x];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn $('tr:eq('+y+')>td:eq('+x+')', _nBody )[0];\n\t\t}\n\t}\n\n\n\t/*\n\t * Function: _fnCoordsFromCell\n\t * Purpose:  Calculate the x and y position in a table from a TD cell\n\t * Returns:  array[2] int: [x, y]\n\t * Inputs:   node:n - TD cell of interest\n\t * Notes:    Not actually interested in this for DataTables since it might go out of date\n\t */\n\tfunction _fnCoordsFromCell( n )\n\t{\n\t\tif ( _oDatatable )\n\t\t{\n\t\t\treturn [\n\t\t\t\t$('td', n.parentNode).index(n),\n\t\t\t\t$('tr', n.parentNode.parentNode).index(n.parentNode) + _oDatatable._iDisplayStart\n\t\t\t];\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn [\n\t\t\t\t$('td', n.parentNode).index(n),\n\t\t\t\t$('tr', n.parentNode.parentNode).index(n.parentNode)\n\t\t\t];\n\t\t}\n\t}\n\n\n\t/*\n\t * Function: _fnSetScrollTop\n\t * Purpose:  Set the vertical scrolling position\n\t * Returns:  -\n\t * Inputs:   int:iPos - scrolltop\n\t * Notes:    This is so nasty, but without browser detection you can't tell which you should set\n\t *           So on browsers that support both, the scroll top will be set twice. I can live with\n\t *           that :-)\n\t */\n\tfunction _fnSetScrollTop( iPos )\n\t{\n\t\tdocument.documentElement.scrollTop = iPos;\n\t\tdocument.body.scrollTop = iPos;\n\t}\n\n\n\t/*\n\t * Function: _fnSetScrollLeft\n\t * Purpose:  Set the horizontal scrolling position\n\t * Returns:  -\n\t * Inputs:   int:iPos - scrollleft\n\t */\n\tfunction _fnSetScrollLeft( iPos )\n\t{\n\t\tdocument.documentElement.scrollLeft = iPos;\n\t\tdocument.body.scrollLeft = iPos;\n\t}\n\n\n\t/*\n\t * Function: _fnGetPos\n\t * Purpose:  Get the position of an object on the rendered page\n\t * Returns:  array[2] int: [left, right]\n\t * Inputs:   node:obj - element of interest\n\t */\n\tfunction _fnGetPos ( obj )\n\t{\n\t\tvar iLeft = 0;\n\t\tvar iTop = 0;\n\n\t\tif (obj.offsetParent)\n\t\t{\n\t\t\tiLeft = obj.offsetLeft;\n\t\t\tiTop = obj.offsetTop;\n\t\t\tobj = obj.offsetParent;\n\t\t\twhile (obj)\n\t\t\t{\n\t\t\t\tiLeft += obj.offsetLeft;\n\t\t\t\tiTop += obj.offsetTop;\n\t\t\t\tobj = obj.offsetParent;\n\t\t\t}\n\t\t}\n\t\treturn [iLeft,iTop];\n\t}\n\n\n\t/*\n\t * Function: _fnFindDtCell\n\t * Purpose:  Get the coords. of a cell from the DataTables internal information\n\t * Returns:  array[2] int: [x, y] coords. or null if not found\n\t * Inputs:   node:nTarget - the node of interest\n\t */\n\tfunction _fnFindDtCell( nTarget )\n\t{\n\t\tfor ( var i=0, iLen=_oDatatable.aiDisplay.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar nTr = _oDatatable.aoData[ _oDatatable.aiDisplay[i] ].nTr;\n\t\t\tvar nTds = nTr.getElementsByTagName('td');\n\t\t\tfor ( var j=0, jLen=nTds.length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tif ( nTds[j] == nTarget )\n\t\t\t\t{\n\t\t\t\t\treturn [ j, i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Initialisation\n\t */\n\n\t/*\n\t * Function: _fnInit\n\t * Purpose:  Initialise the KeyTable\n\t * Returns:  -\n\t * Inputs:   object:oInit - optional - Initalisation object with the following parameters:\n\t *   array[2] int:focus - x and y coordinates of the initial target\n\t *     or\n\t *     node:focus - the node to set initial focus on\n\t *   node:table - the table to use, if not given, first table with class 'KeyTable' will be used\n\t *   string:focusClass - focusing class to give to table elements\n\t *           object:that - focus\n\t *   bool:initScroll - scroll the view port on load, default true\n\t *   int:tabIndex - the tab index to give the hidden input element\n\t */\n\tfunction _fnInit( table, datatable, oInit, that )\n\t{\n\t\t/* Save scope */\n\t\t_that = that;\n\n\t\t/* Capture undefined initialisation and apply the defaults */\n\t\tif ( typeof oInit == 'undefined' ) {\n\t\t\toInit = {};\n\t\t}\n\n\t\tif ( typeof oInit.focus == 'undefined' ) {\n\t\t\toInit.focus = [0,0];\n\t\t}\n\n\t\toInit.table = table;\n\t\t$(oInit.table).addClass('KeyTable');\n\n\t\tif ( typeof oInit.focusClass != 'undefined' ) {\n\t\t\t_sFocusClass = oInit.focusClass;\n\t\t}\n\n\t\tif ( typeof datatable != 'undefined' ) {\n\t\t\t_oDatatable = datatable;\n\t\t}\n\n\t\tif ( typeof oInit.initScroll == 'undefined' ) {\n\t\t\toInit.initScroll = true;\n\t\t}\n\n\t\tif ( typeof oInit.form == 'undefined' ) {\n\t\t\toInit.form = false;\n\t\t}\n\t\t_bForm = oInit.form;\n\n\t\t/* Cache the tbody node of interest */\n\t\t_nBody = oInit.table.getElementsByTagName('tbody')[0];\n\n\t\t/* If the table is inside a form, then we need a hidden input box which can be used by the\n\t\t * browser to catch the browser tabbing for our table\n\t\t */\n\t\tif ( _bForm )\n\t\t{\n\t\t\tvar nDiv = document.createElement('div');\n\t\t\t_nInput = document.createElement('input');\n\t\t\tnDiv.style.height = \"1px\"; /* Opera requires a little something */\n\t\t\tnDiv.style.width = \"0px\";\n\t\t\tnDiv.style.overflow = \"hidden\";\n\t\t\tif ( typeof oInit.tabIndex != 'undefined' )\n\t\t\t{\n\t\t\t\t_nInput.tabIndex = oInit.tabIndex;\n\t\t\t}\n\t\t\tnDiv.appendChild(_nInput);\n\t\t\toInit.table.parentNode.insertBefore( nDiv, oInit.table.nextSibling );\n\n\t\t\t$(_nInput).focus( function () {\n\t\t\t\t/* See if we want to 'tab into' the table or out */\n\t\t\t\tif ( !_bInputFocused )\n\t\t\t\t{\n\t\t\t\t\t_bKeyCapture = true;\n\t\t\t\t\t_bInputFocused = false;\n\t\t\t\t\tif ( typeof oInit.focus.nodeName != \"undefined\" )\n\t\t\t\t\t{\n\t\t\t\t\t\t_fnSetFocus( oInit.focus, oInit.initScroll );\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_fnSetFocus( _fnCellFromCoords( oInit.focus[0], oInit.focus[1]), oInit.initScroll );\n\t\t\t\t\t}\n\n\t\t\t\t\t/* Need to interup the thread for this to work */\n\t\t\t\t\tsetTimeout( function() { _nInput.blur(); }, 0 );\n\t\t\t\t}\n\t\t\t} );\n\t\t\t_bKeyCapture = false;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Set the initial focus on the table */\n\t\t\tif ( typeof oInit.focus.nodeName != \"undefined\" )\n\t\t\t{\n\t\t\t\t_fnSetFocus( oInit.focus, oInit.initScroll );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_fnSetFocus( _fnCellFromCoords( oInit.focus[0], oInit.focus[1]), oInit.initScroll );\n\t\t\t}\n\t\t\t_fnCaptureKeys();\n\t\t}\n\n\t\t/* Add event listeners */\n\t\t$(document).bind( \"keydown\", _fnKey );\n\n\t\tif ( _oDatatable )\n\t\t{\n\t\t\t$(_oDatatable.nTable).on( 'click', 'td', _fnClick );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t$(_nBody).on( 'click', 'td', _fnClick );\n\t\t}\n\n\t\t/* Loose table focus when click outside the table */\n\t\t$(document).click( function(e) {\n\t\t\tvar nTarget = e.target;\n\t\t\tvar bTableClick = false;\n\t\t\twhile ( nTarget )\n\t\t\t{\n\t\t\t\tif ( nTarget == oInit.table )\n\t\t\t\t{\n\t\t\t\t\tbTableClick = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tnTarget = nTarget.parentNode;\n\t\t\t}\n\t\t\tif ( !bTableClick )\n\t\t\t{\n\t\t\t\t_fnBlur();\n\t\t\t}\n\t\t} );\n\t}\n\n\tvar table, datatable;\n\n\tif ( oInit === undefined ) {\n\t\ttable = $('table.KeyTable')[0];\n\t\tdatatable = null;\n\t}\n\telse if ( $.isPlainObject( oInit ) ) {\n\t\ttable = oInit.table;\n\t\tdatatable = oInit.datatable;\n\t}\n\telse {\n\t\tdatatable = new $.fn.dataTable.Api( oInit ).settings()[0];\n\t\ttable = datatable.nTable;\n\t}\n\t/* Initialise our new object */\n\t_fnInit( table, datatable, oInit, this );\n};\n\n\nKeyTable.version = \"1.2.1\";\n\n\n$.fn.dataTable.KeyTable = KeyTable;\n$.fn.DataTable.KeyTable = KeyTable;\n\n\nreturn KeyTable;\n}; // /factory\n\n\n// Define as an AMD module if possible\nif ( typeof define === 'function' && define.amd ) {\n\tdefine( ['jquery', 'datatables'], factory );\n}\nelse if ( typeof exports === 'object' ) {\n    // Node/CommonJS\n    factory( require('jquery'), require('datatables') );\n}\nelse if ( jQuery && !jQuery.fn.dataTable.KeyTable ) {\n\t// Otherwise simply initialise as normal, stopping multiple evaluation\n\tfactory( jQuery, jQuery.fn.dataTable );\n}\n\n\n})(window, document);\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/License.txt",
    "content": "Copyright (c) 2014-2015 SpryMedia Limited\nhttp://datatables.net\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/Readme.md",
    "content": ""
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/css/dataTables.responsive.css",
    "content": "table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child {\n  position: relative;\n  padding-left: 30px;\n  cursor: pointer;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child:before {\n  top: 8px;\n  left: 4px;\n  height: 16px;\n  width: 16px;\n  display: block;\n  position: absolute;\n  color: white;\n  border: 2px solid white;\n  border-radius: 16px;\n  text-align: center;\n  line-height: 14px;\n  box-shadow: 0 0 3px #444;\n  box-sizing: content-box;\n  content: '+';\n  background-color: #31b131;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child.dataTables_empty:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child.dataTables_empty:before {\n  display: none;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > td:first-child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > th:first-child:before {\n  content: '-';\n  background-color: #d33333;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr.child td:before {\n  display: none;\n}\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child,\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child {\n  padding-left: 27px;\n}\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child:before,\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child:before {\n  top: 5px;\n  left: 4px;\n  height: 14px;\n  width: 14px;\n  border-radius: 14px;\n  line-height: 12px;\n}\ntable.dataTable.dtr-column > tbody > tr > td.control,\ntable.dataTable.dtr-column > tbody > tr > th.control {\n  position: relative;\n  cursor: pointer;\n}\ntable.dataTable.dtr-column > tbody > tr > td.control:before,\ntable.dataTable.dtr-column > tbody > tr > th.control:before {\n  top: 50%;\n  left: 50%;\n  height: 16px;\n  width: 16px;\n  margin-top: -10px;\n  margin-left: -10px;\n  display: block;\n  position: absolute;\n  color: white;\n  border: 2px solid white;\n  border-radius: 16px;\n  text-align: center;\n  line-height: 14px;\n  box-shadow: 0 0 3px #444;\n  box-sizing: content-box;\n  content: '+';\n  background-color: #31b131;\n}\ntable.dataTable.dtr-column > tbody > tr.parent td.control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.control:before {\n  content: '-';\n  background-color: #d33333;\n}\ntable.dataTable > tbody > tr.child {\n  padding: 0.5em 1em;\n}\ntable.dataTable > tbody > tr.child:hover {\n  background: transparent !important;\n}\ntable.dataTable > tbody > tr.child ul {\n  display: inline-block;\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\ntable.dataTable > tbody > tr.child ul li {\n  border-bottom: 1px solid #efefef;\n  padding: 0.5em 0;\n}\ntable.dataTable > tbody > tr.child ul li:first-child {\n  padding-top: 0;\n}\ntable.dataTable > tbody > tr.child ul li:last-child {\n  border-bottom: none;\n}\ntable.dataTable > tbody > tr.child span.dtr-title {\n  display: inline-block;\n  min-width: 75px;\n  font-weight: bold;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/css/dataTables.responsive.scss",
    "content": "\n//\n// Mixins\n//\n@mixin control() {\n\tdisplay: block;\n\tposition: absolute;\n\tcolor: white;\n\tborder: 2px solid white;\n\tborder-radius: 16px;\n\ttext-align: center;\n\tline-height: 14px;\n\tbox-shadow: 0 0 3px #444;\n\tbox-sizing: content-box;\n}\n\n@mixin control-open() {\n\tcontent: '+';\n\tbackground-color: #31b131;\n}\n\n@mixin control-close() {\n\tcontent: '-';\n\tbackground-color: #d33333;\n}\n\n\n//\n// Table styles\n//\ntable.dataTable {\n\t// Styling for the `inline` type\n\t&.dtr-inline.collapsed > tbody {\n\t\t> tr > td:first-child,\n\t\t> tr > th:first-child {\n\t\t\tposition: relative;\n\t\t\tpadding-left: 30px;\n\t\t\tcursor: pointer;\n\n\t\t\t&:before {\n\t\t\t\ttop: 8px;\n\t\t\t\tleft: 4px;\n\t\t\t\theight: 16px;\n\t\t\t\twidth: 16px;\n\t\t\t\t@include control;\n\t\t\t\t@include control-open;\n\t\t\t}\n\n\t\t\t&.dataTables_empty:before {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t\t> tr.parent {\n\t\t\t> td:first-child:before,\n\t\t\t> th:first-child:before {\n\t\t\t\t@include control-close;\n\t\t\t}\n\t\t}\n\n\t\t> tr.child td:before {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t// DataTables' `compact` styling\n\t&.dtr-inline.collapsed.compact > tbody {\n\t\t> tr > td:first-child,\n\t\t> tr > th:first-child {\n\t\t\tpadding-left: 27px;\n\n\t\t\t&:before {\n\t\t\t\ttop: 5px;\n\t\t\t\tleft: 4px;\n\t\t\t\theight: 14px;\n\t\t\t\twidth: 14px;\n\t\t\t\tborder-radius: 14px;\n\t\t\t\tline-height: 12px;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// Styling for the `column` type\n\t&.dtr-column > tbody {\n\t\t> tr > td.control,\n\t\t> tr > th.control {\n\t\t\tposition: relative;\n\t\t\tcursor: pointer;\n\n\t\t\t&:before {\n\t\t\t\ttop: 50%;\n\t\t\t\tleft: 50%;\n\t\t\t\theight: 16px;\n\t\t\t\twidth: 16px;\n\t\t\t\tmargin-top: -10px;\n\t\t\t\tmargin-left: -10px;\n\t\t\t\t@include control;\n\t\t\t\t@include control-open;\n\t\t\t}\n\t\t}\n\n\t\t> tr.parent {\n\t\t\ttd.control:before,\n\t\t\tth.control:before {\n\t\t\t\t@include control-close;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// Child row styling\n\t> tbody > tr.child {\n\t\tpadding: 0.5em 1em;\n\n\t\t&:hover {\n\t\t\tbackground: transparent !important;\n\t\t}\n\n\t\tul {\n\t\t\tdisplay: inline-block;\n\t\t\tlist-style-type: none;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\n\t\t\tli {\n\t\t\t\tborder-bottom: 1px solid #efefef;\n\t\t\t\tpadding: 0.5em 0;\n\n\t\t\t\t&:first-child {\n\t\t\t\t\tpadding-top: 0;\n\t\t\t\t}\n\n\t\t\t\t&:last-child {\n\t\t\t\t\tborder-bottom: none;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tspan.dtr-title {\n\t\t\tdisplay: inline-block;\n\t\t\tmin-width: 75px;\n\t\t\tfont-weight: bold;\n\t\t}\n\n\t\tspan.dtr-data {}\n\t}\n}\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/child-rows/column-control.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Column controlled child rows</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tresponsive: {\n\t\t\tdetails: {\n\t\t\t\ttype: 'column'\n\t\t\t}\n\t\t},\n\t\tcolumnDefs: [ {\n\t\t\tclassName: 'control',\n\t\t\torderable: false,\n\t\t\ttargets:   0\n\t\t} ],\n\t\torder: [ 1, 'asc' ]\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Column controlled child rows</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Responsive has two built in methods for displaying the controlling element of the child rows; <code>inline</code> which is the default option and shows the\n\t\t\t\tcontrol in the first column, and <code>column</code> which set a <em>control column</em> as the control. The control column is shown only when there is some other\n\t\t\t\tcolumn hidden, and is dedicated only to the show / hide control for the rows.</p>\n\n\t\t\t\t<p>This example shows the <a href=\"//datatables.net/extensions/responsive/reference/option/responsive.details.type\"><code class=\"option\" title=\n\t\t\t\t\"Responsive initialisation option\">responsive.details.type<span>R</span></code></a> option set to <code>column</code> to activate the control column. Note that by\n\t\t\t\tdefault the first column is used as the control, so additionally in the initialisation the <a href=\"//datatables.net/reference/option/order\"><code class=\"option\"\n\t\t\t\ttitle=\"DataTables initialisation option\">order<span>DT</span></code></a> and <a href=\"//datatables.net/reference/option/columns.orderable\"><code class=\"option\"\n\t\t\t\ttitle=\"DataTables initialisation option\">columns.orderable<span>DT</span></code></a> options are used to disable sorting on this column.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tresponsive: {\n\t\t\tdetails: {\n\t\t\t\ttype: 'column'\n\t\t\t}\n\t\t},\n\t\tcolumnDefs: [ {\n\t\t\tclassName: 'control',\n\t\t\torderable: false,\n\t\t\ttargets:   0\n\t\t} ],\n\t\torder: [ 1, 'asc' ]\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/child-rows/custom-renderer.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Custom child row renderer</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tresponsive: {\n\t\t\tdetails: {\n\t\t\t\trenderer: function ( api, rowIdx ) {\n\t\t\t\t\t// Select hidden columns for the given row\n\t\t\t\t\tvar data = api.cells( rowIdx, ':hidden' ).eq(0).map( function ( cell ) {\n\t\t\t\t\t\tvar header = $( api.column( cell.column ).header() );\n\n\t\t\t\t\t\treturn '<tr>'+\n\t\t\t\t\t\t\t\t'<td>'+\n\t\t\t\t\t\t\t\t\theader.text()+':'+\n\t\t\t\t\t\t\t\t'</td> '+\n\t\t\t\t\t\t\t\t'<td>'+\n\t\t\t\t\t\t\t\t\tapi.cell( cell ).data()+\n\t\t\t\t\t\t\t\t'</td>'+\n\t\t\t\t\t\t\t'</tr>';\n\t\t\t\t\t} ).toArray().join('');\n\n\t\t\t\t\treturn data ?\n\t\t\t\t\t\t$('<table/>').append( data ) :\n\t\t\t\t\t\tfalse;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Custom child row renderer</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>The child row's for a collapsed table in Responsive, by default, show a <code class=\"tag\" title=\"HTML tag\">ul/li</code> list of the data from the hidden\n\t\t\t\tcolumns. The <a href=\"//datatables.net/extensions/responsive/reference/option/responsive.details.renderer\"><code class=\"option\" title=\n\t\t\t\t\"Responsive initialisation option\">responsive.details.renderer<span>R</span></code></a> option provide the ability to create your own custom renderer. It is given\n\t\t\t\ttwo parameters: the DataTables API instance for the table and the row index to use.</p>\n\n\t\t\t\t<p>This example shows the <a href=\"//datatables.net/reference/api/cells()\"><code class=\"api\" title=\"DataTables API method\">cells()<span>DT</span></code></a> method\n\t\t\t\tbeing used to select the hidden columns and constructing a table of the data. You could refine the selector to select only certain columns, or show all columns,\n\t\t\t\tetc.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tresponsive: {\n\t\t\tdetails: {\n\t\t\t\trenderer: function ( api, rowIdx ) {\n\t\t\t\t\t// Select hidden columns for the given row\n\t\t\t\t\tvar data = api.cells( rowIdx, ':hidden' ).eq(0).map( function ( cell ) {\n\t\t\t\t\t\tvar header = $( api.column( cell.column ).header() );\n\n\t\t\t\t\t\treturn '&lt;tr&gt;'+\n\t\t\t\t\t\t\t\t'&lt;td&gt;'+\n\t\t\t\t\t\t\t\t\theader.text()+':'+\n\t\t\t\t\t\t\t\t'&lt;/td&gt; '+\n\t\t\t\t\t\t\t\t'&lt;td&gt;'+\n\t\t\t\t\t\t\t\t\tapi.cell( cell ).data()+\n\t\t\t\t\t\t\t\t'&lt;/td&gt;'+\n\t\t\t\t\t\t\t'&lt;/tr&gt;';\n\t\t\t\t\t} ).toArray().join('');\n\n\t\t\t\t\treturn data ?\n\t\t\t\t\t\t$('&lt;table/&gt;').append( data ) :\n\t\t\t\t\t\tfalse;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/child-rows/disable-child-rows.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Disable child rows</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tresponsive: {\n\t\t\tdetails: false\n\t\t}\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Disable child rows</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>By default, when Responsive collapses a table, it will show an option for the end user to expand the row, showing the details of the hidden columns in a child\n\t\t\t\trow. This can be disabled using the <a href=\"//datatables.net/extensions/responsive/reference/option/responsive.details\"><code class=\"option\" title=\n\t\t\t\t\"Responsive initialisation option\">responsive.details<span>R</span></code></a> option and setting it to <code>false</code>, as shown in the example below. In this\n\t\t\t\tcase the hidden data is not directly accessible to the end user.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tresponsive: {\n\t\t\tdetails: false\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/child-rows/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\n\t<title>Responsive examples - Child row control</title>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Child row control</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>When a column is removed from display by Responsive, the data is still available in the table and can be displayed in a DataTables <em>child row</em> (see\n\t\t\t\t<a href=\"//datatables.net/reference/api/row().child()\"><code class=\"api\" title=\"DataTables API method\">row().child()<span>DT</span></code></a>). By default\n\t\t\t\tResponsive will show child row controls in the first column when the table has been collapsed, allowing the end user to show / hide the information from the hidden\n\t\t\t\tcolumns.</p>\n\n\t\t\t\t<p>Responsive has a number of options for display of the child rows:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li>If child row display is enabled: <a href=\"//datatables.net/extensions/responsive/reference/option/responsive.details\"><code class=\"option\" title=\n\t\t\t\t\t\"Responsive initialisation option\">responsive.details<span>R</span></code></a></li>\n\t\t\t\t\t<li>How the show / hide control is displayed: <a href=\"//datatables.net/extensions/responsive/reference/option/responsive.details.type\"><code class=\"option\"\n\t\t\t\t\ttitle=\"Responsive initialisation option\">responsive.details.type<span>R</span></code></a></li>\n\t\t\t\t\t<li>How the child row is rendered: <a href=\"//datatables.net/extensions/responsive/reference/option/responsive.details.renderer\"><code class=\"option\" title=\n\t\t\t\t\t\"Responsive initialisation option\">responsive.details.renderer<span>R</span></code></a></li>\n\t\t\t\t</ul>\n\n\t\t\t\t<p>This section shows examples of these options being used.</p>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/child-rows/right-column.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Column control - right</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tresponsive: {\n\t\t\tdetails: {\n\t\t\t\ttype: 'column',\n\t\t\t\ttarget: -1\n\t\t\t}\n\t\t},\n\t\tcolumnDefs: [ {\n\t\t\tclassName: 'control',\n\t\t\torderable: false,\n\t\t\ttargets:   -1\n\t\t} ]\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Column control - right</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>When using the <code>column</code> child row control type, Responsive has the ability to use any column or element as the show / hide control for the row\n\t\t\t\tdetails. This is provided through the <a href=\"//datatables.net/extensions/responsive/reference/option/responsive.details.target\"><code class=\"option\" title=\n\t\t\t\t\"Responsive initialisation option\">responsive.details.target<span>R</span></code></a> option, which can be either a column index, or a jQuery selector.</p>\n\n\t\t\t\t<p>This example shows the last column in the table being used as the control column.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tresponsive: {\n\t\t\tdetails: {\n\t\t\t\ttype: 'column',\n\t\t\t\ttarget: -1\n\t\t\t}\n\t\t},\n\t\tcolumnDefs: [ {\n\t\t\tclassName: 'control',\n\t\t\torderable: false,\n\t\t\ttargets:   -1\n\t\t} ]\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/child-rows/whole-row-control.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Whole row child row control</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tresponsive: {\n\t\t\tdetails: {\n\t\t\t\ttype: 'column',\n\t\t\t\ttarget: 'tr'\n\t\t\t}\n\t\t},\n\t\tcolumnDefs: [ {\n\t\t\tclassName: 'control',\n\t\t\torderable: false,\n\t\t\ttargets:   0\n\t\t} ],\n\t\torder: [ 1, 'asc' ]\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Whole row child row control</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>When using the <code>column</code> details type in Responsive the <a href=\n\t\t\t\t\"//datatables.net/extensions/responsive/reference/option/responsive.details.target\"><code class=\"option\" title=\n\t\t\t\t\"Responsive initialisation option\">responsive.details.target<span>R</span></code></a> option provides the ability to control what element is used to show / hide\n\t\t\t\tthe child rows when the table is collapsed.</p>\n\n\t\t\t\t<p>This example uses the <code>tr</code> selector to have the whole row act as the control.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tresponsive: {\n\t\t\tdetails: {\n\t\t\t\ttype: 'column',\n\t\t\t\ttarget: 'tr'\n\t\t\t}\n\t\t},\n\t\tcolumnDefs: [ {\n\t\t\tclassName: 'control',\n\t\t\torderable: false,\n\t\t\ttargets:   0\n\t\t} ],\n\t\torder: [ 1, 'asc' ]\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/display-control/auto.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Automatic column hiding</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable();\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Automatic column hiding</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Responsive will automatically detect which columns have breakpoint class names assigned to them for visibility control. If no breakpoint class is found for a\n\t\t\t\tcolumn, Responsive will determine automatically if the column should be shown or not at any particular viewport width. This is done by removing columns which cause\n\t\t\t\tthe table to overflow the viewport, with the columns being removed from the right.</p>\n\n\t\t\t\t<p>This example shows that simple case. On a desktop browser resize the window horizontally to see columns added and removed on-the-fly. On a tablet or mobile\n\t\t\t\tbrowser, change the screen's orientation.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display responsive nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable();\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/display-control/classes.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Class control</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\t\"ajax\": \"../../../../examples/ajax/data/objects.txt\",\n\t\t\"columns\": [\n\t\t\t{ \"data\": \"name\" },\n\t\t\t{ \"data\": \"position\" },\n\t\t\t{ \"data\": \"office\" },\n\t\t\t{ \"data\": \"age\" },\n\t\t\t{ \"data\": \"start_date\" },\n\t\t\t{ \"data\": \"salary\" },\n\t\t\t{ \"data\": \"extn\" }\n\t\t]\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Class control</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>You can tell Responsive what columns to want to be visible on different devices through the use of class names on the columns. The breakpoints are horizontal\n\t\t\t\tscreen resolutions and the defaults are set for common devices:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li><code>desktop</code> x &gt;= 1024px</li>\n\t\t\t\t\t<li><code>tablet-l</code> (landscape) 768 &lt;= x &lt; 1024</li>\n\t\t\t\t\t<li><code>tablet-p</code> (portrait) 480 &lt;= x &lt; 768</li>\n\t\t\t\t\t<li><code>mobile-l</code> (landscape) 320 &lt;= x &lt; 480</li>\n\t\t\t\t\t<li><code>mobile-p</code> (portrait) x &lt; 320</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<p>You may leave the <code>-[lp]</code> option from the end if you wish to just target all tablet or mobile devices. Additionally to may add <code>min-</code>,\n\t\t\t\t<code>max-</code> or <code>not-</code> as a prefix to the class name to perform logic operations. For example <code>not-mobile</code> would cause a column to\n\t\t\t\tappear as visible on desktop and tablet devices, while <code>min-tablet-l</code> would require at least a horizontal width of 768 for the browser window to be\n\t\t\t\tshown, and be shown at all sizes larger.</p>\n\n\t\t\t\t<p>Additionally, there are three special class names:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li><code>all</code> - Always display</li>\n\t\t\t\t\t<li><code>none</code> - Don't display as a column, but show in the child row</li>\n\t\t\t\t\t<li><code>never</code> - Never display</li>\n\t\t\t\t\t<li><code>control</code> - Used for the <code>column</code> <a href=\n\t\t\t\t\t\"//datatables.net/extensions/responsive/reference/option/responsive.details.type\"><code class=\"option\" title=\n\t\t\t\t\t\"Responsive initialisation option\">responsive.details.type<span>R</span></code></a> option.</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<p>Please <a href=\"//datatables.net/extensions/responsive/\">refer to the Responsive manual</a> for further details of these options.</p>\n\n\t\t\t\t<p>This example shows the <code>salary</code> column visible on a desktop only - <code>office</code> and <code>age</code> require a tablet, while the\n\t\t\t\t<code>position</code> column requires a phone in landscape or larger. The <code>name</code> column is always visible and the <code>start date</code> is never\n\t\t\t\tvisible.</p>\n\n\t\t\t\t<p>This can be useful if you wish to change the format of the data shown on different devices, for example using a combination of <code>mobile</code> and\n\t\t\t\t<code>not-mobile</code> on two different columns would allow information to be formatted suitable for each device type.</p>\n\t\t\t</div>\n\n\t\t\t<div id=\"breakpoint\"></div>\n\n\t\t\t<table id=\"example\" class=\"display responsive\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th class=\"all\">Name</th>\n\t\t\t\t\t\t<th class=\"min-phone-l\">Position</th>\n\t\t\t\t\t\t<th class=\"min-tablet\">Office</th>\n\t\t\t\t\t\t<th class=\"min-tablet\">Age</th>\n\t\t\t\t\t\t<th class=\"never\">Start date</th>\n\t\t\t\t\t\t<th class=\"desktop\">Salary</th>\n\t\t\t\t\t\t<th class=\"none\">Extn.</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\t&quot;ajax&quot;: &quot;../../../../examples/ajax/data/objects.txt&quot;,\n\t\t&quot;columns&quot;: [\n\t\t\t{ &quot;data&quot;: &quot;name&quot; },\n\t\t\t{ &quot;data&quot;: &quot;position&quot; },\n\t\t\t{ &quot;data&quot;: &quot;office&quot; },\n\t\t\t{ &quot;data&quot;: &quot;age&quot; },\n\t\t\t{ &quot;data&quot;: &quot;start_date&quot; },\n\t\t\t{ &quot;data&quot;: &quot;salary&quot; },\n\t\t\t{ &quot;data&quot;: &quot;extn&quot; }\n\t\t]\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/display-control/complexHeader.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Complex headers (rowspan / colspan)</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\tth {\n\t\tposition: relative;\n\t\tmin-height: 41px;\n\t} \n\tspan {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t// jQuery update a column title from the demo table to contain a long description\n\t// You would not need to do this in your own code.\n\t$('#example thead tr:eq(0) th:eq(2)').html(\"This is a really long column title!\");\n\t\n\t// Wrap the colspan'ing header cells with a span so they can be positioned\n\t// absolutely - filling the available space, and no more.\n\t$('#example thead th[colspan]').wrapInner( '<span/>' ).append( '&nbsp;' );\n\n\t// Standard initialisation\n\t$('#example').DataTable( {\n\t\tresponsive: true,\n\t\tpaging: false\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Complex headers (rowspan / colspan)</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows how Responsive can be used with <em>complex headers</em> (i.e. headers that contain <code>colspan</code> attributes for one or more cells).\n\t\t\t\tAs Responsive will removed columns one at a time the cell with the <code>colspan</code> attribute can end up forcing the width of a column, disrupting the flow.\n\t\t\t\tRather than removing all columns under the <code>colspan</code> cell, we want to reduce the amount of text that is visible in that cell. This example shows how\n\t\t\t\tthat can be achieved thought a little bit of jQuery and CSS.</p>\n\n\t\t\t\t<p>We use jQuery to find the header cells which have a <code>colspan</code> attribute and wrap their contents in a <code class=\"tag\" title=\"HTML tag\">span</code>\n\t\t\t\ttag. That <code class=\"tag\" title=\"HTML tag\">span</code> is then set to <code>position: absolute;</code> using <code>text-overflow: ellipsis</code>. The result is\n\t\t\t\tthat the text of the <code>colspan</code> cell will reduce automatically to fit the available area based on the contents of the column cells below it.</p>\n\n\t\t\t\t<p>This functionality is not currently built into Responsive. It likely will be for v1.1.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th rowspan=\"2\">Name</th>\n\t\t\t\t\t\t<th colspan=\"2\">HR Information</th>\n\t\t\t\t\t\t<th colspan=\"3\">Contact</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t// jQuery update a column title from the demo table to contain a long description\n\t// You would not need to do this in your own code.\n\t$('#example thead tr:eq(0) th:eq(2)').html(&quot;This is a really long column title!&quot;);\n\t\n\t// Wrap the colspan'ing header cells with a span so they can be positioned\n\t// absolutely - filling the available space, and no more.\n\t$('#example thead th[colspan]').wrapInner( '&lt;span/&gt;' ).append( '&amp;nbsp;' );\n\n\t// Standard initialisation\n\t$('#example').DataTable( {\n\t\tresponsive: true,\n\t\tpaging: false\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">th {\n\t\tposition: relative;\n\t\tmin-height: 41px;\n\t} \n\tspan {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/display-control/fixedHeader.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - With FixedHeader</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../FixedHeader/css/dataTables.fixedHeader.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\tdiv.container { max-width: 1200px }\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../FixedHeader/js/dataTables.fixedHeader.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tresponsive: true,\n\t\tpaging: false\n\t} );\n\n\tnew $.fn.dataTable.FixedHeader( table );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>With FixedHeader</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows Responsive being used with the DataTables <a href=\"http://datatables.net/extensions/fixedheader\">FixedHeader</a> extension. FixedHeader will\n\t\t\t\tlock a table's header to the top of the table, ensuring that the user always knows what each column relates to.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tresponsive: true,\n\t\tpaging: false\n\t} );\n\n\tnew $.fn.dataTable.FixedHeader( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../FixedHeader/js/dataTables.fixedHeader.js\">../../../FixedHeader/js/dataTables.fixedHeader.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">div.container { max-width: 1200px }</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../FixedHeader/css/dataTables.fixedHeader.css\">../../../FixedHeader/css/dataTables.fixedHeader.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/display-control/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\n\t<title>Responsive examples - Display control</title>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Display control</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Responsive has two basic modes of operation for controlling the visibility of columns at different display sizes. These two modes can be using either separately\n\t\t\t\tor together:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li>Manually assigned class names for breakpoints - Assign a column a class name to tell Responsive which breakpoint(s) to show it in.</li>\n\t\t\t\t\t<li>Automatically - for columns without a breakpoint class name, it will be automatically removed if there is no room available on screen to show it. Columns\n\t\t\t\t\tare removed from the right, moving left.</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<p>This section explores these two options.</p>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/display-control/init-classes.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Assigned class control</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\t\"ajax\": \"../../../../examples/ajax/data/objects.txt\",\n\t\t\"columns\": [\n\t\t\t{ \"data\": \"name\",       className: \"all\" },\n\t\t\t{ \"data\": \"position\",   className: \"min-phone-l\" },\n\t\t\t{ \"data\": \"office\",     className: \"min-tablet\" },\n\t\t\t{ \"data\": \"age\",        className: \"min-tablet\" },\n\t\t\t{ \"data\": \"start_date\", className: \"never\" },\n\t\t\t{ \"data\": \"salary\",     className: \"desktop\" },\n\t\t\t{ \"data\": \"extn\",       className: \"none\" }\n\t\t]\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Assigned class control</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example exactly matches the functionality of the <a href=\"classes.xml\">class control example</a> but in this case the classes are assigned using the\n\t\t\t\t<a href=\"//datatables.net/reference/option/columns.className\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">columns.className<span>DT</span></code></a> option.</p>\n\t\t\t</div>\n\n\t\t\t<div id=\"breakpoint\"></div>\n\n\t\t\t<table id=\"example\" class=\"display responsive\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\t&quot;ajax&quot;: &quot;../../../../examples/ajax/data/objects.txt&quot;,\n\t\t&quot;columns&quot;: [\n\t\t\t{ &quot;data&quot;: &quot;name&quot;,       className: &quot;all&quot; },\n\t\t\t{ &quot;data&quot;: &quot;position&quot;,   className: &quot;min-phone-l&quot; },\n\t\t\t{ &quot;data&quot;: &quot;office&quot;,     className: &quot;min-tablet&quot; },\n\t\t\t{ &quot;data&quot;: &quot;age&quot;,        className: &quot;min-tablet&quot; },\n\t\t\t{ &quot;data&quot;: &quot;start_date&quot;, className: &quot;never&quot; },\n\t\t\t{ &quot;data&quot;: &quot;salary&quot;,     className: &quot;desktop&quot; },\n\t\t\t{ &quot;data&quot;: &quot;extn&quot;,       className: &quot;none&quot; }\n\t\t]\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\n\t<title>Responsive examples - Responsive DataTables</title>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Responsive DataTables</span></h1>\n\n\t\t\t<div class=\"info\"></div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/initialisation/ajax.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Ajax data</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\tdiv.container { max-width: 1200px }\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\t\"ajax\": \"../../../../examples/ajax/data/objects.txt\",\n\t\t\"columns\": [\n\t\t\t{ \"data\": \"name\" },\n\t\t\t{ \"data\": \"position\" },\n\t\t\t{ \"data\": \"office\" },\n\t\t\t{ \"data\": \"extn\" },\n\t\t\t{ \"data\": \"start_date\" },\n\t\t\t{ \"data\": \"salary\" }\n\t\t]\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Ajax data</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows the Responsive extension working with <a href=\"//datatables.net/manual/data\">Ajax sourced data</a> in the DataTable. Note that no special\n\t\t\t\tinitialisation is required. Responsive is enabled by adding the <code class=\"string\" title=\"String\">responsive</code> class to the <code class=\"tag\" title=\n\t\t\t\t\"HTML tag\">table</code> element.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display responsive nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\t&quot;ajax&quot;: &quot;../../../../examples/ajax/data/objects.txt&quot;,\n\t\t&quot;columns&quot;: [\n\t\t\t{ &quot;data&quot;: &quot;name&quot; },\n\t\t\t{ &quot;data&quot;: &quot;position&quot; },\n\t\t\t{ &quot;data&quot;: &quot;office&quot; },\n\t\t\t{ &quot;data&quot;: &quot;extn&quot; },\n\t\t\t{ &quot;data&quot;: &quot;start_date&quot; },\n\t\t\t{ &quot;data&quot;: &quot;salary&quot; }\n\t\t]\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">div.container { max-width: 1200px }</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/initialisation/className.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Class name</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable();\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Class name</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>The easiest way to initialise the Responsive extension for DataTables is simply to add the class <code class=\"string\" title=\"String\">responsive</code> to the\n\t\t\t\ttable's class name. When the DataTable is initialised the Responsive extension will automatically enable itself on these tables.</p>\n\n\t\t\t\t<p>The may also use the class <code>dt-responsive</code> to perform the same action, since <code>responsive</code> may be used in your stylesheet, or may have some\n\t\t\t\tother meaning in a CSS framework being used (for example Bootstrap).</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display responsive nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable();\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/initialisation/default.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Default initialisation</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$.extend( $.fn.dataTable.defaults, {\n    responsive: true\n} );\n\n$(document).ready(function() {\n\t$('#example').DataTable();\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Default initialisation</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>It can often be useful to be able to set a default value for DataTables' initialisation options, providing a common starting point for initialisation when\n\t\t\t\tworking with multiple tables over many pages or even just on a single page. DataTables provides that ability through the <code>$.fn.dataTable.defaults</code>\n\t\t\t\tobject which can have any of the <a href=\"//datatables.net/reference/option\">initialisation options</a> set.</p>\n\n\t\t\t\t<p>Extending that ability, Responsive can also be set to initialise by default, as shown in this example thorugh the\n\t\t\t\t<code>$.fn.dataTable.defaults.responsive</code> property. Extending that, <a href=\"//datatables.net/extensions/responsive/reference/option/\">all of the Responsive\n\t\t\t\toptions</a> can also be set using this configuration option (i.e. use <code>responsive</code> as an object).</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$.extend( $.fn.dataTable.defaults, {\n    responsive: true\n} );\n\n$(document).ready(function() {\n\t$('#example').DataTable();\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/initialisation/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\n\t<title>Responsive examples - Initialisation</title>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Initialisation</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Responsive can be run on a DataTable in a number of different ways:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li>By adding the class <code>responsive</code> or <code>dt-responsive</code> to the <code class=\"tag\" title=\"HTML tag\">table</code></li>\n\t\t\t\t\t<li>Using the <a href=\"//datatables.net/extensions/responsive/reference/option/responsive\"><code class=\"option\" title=\n\t\t\t\t\t\"Responsive initialisation option\">responsive<span>R</span></code></a> option in the DataTables initialisation</li>\n\t\t\t\t\t<li>Use the <code>$.fn.dataTable.Responsive</code> constructor.</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<p>This set of examples demonstrates these initialisation options.</p>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/initialisation/new.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - `new` constructor</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\tdiv.container { max-width: 1200px }\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.Responsive( table );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>`new` constructor</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Responsive will automatically detect new DataTable instances being created on a page and initialise itself if it find the <a href=\n\t\t\t\t\"//datatables.net/extensions/responsive/reference/option/responsive\"><code class=\"option\" title=\n\t\t\t\t\"Responsive initialisation option\">responsive<span>R</span></code></a> option or <code>responsive</code> class name on the table, as shown in the other\n\t\t\t\texamples.</p>\n\n\t\t\t\t<p>The third way of initialising Responsive is manually creating a new instance using the <code>$.fn.dataTable.Responsive</code> class, as shown in this example\n\t\t\t\t(the other two methods are provided using this constructor in a <a href=\"//datatables.net/reference/event/init\"><code class=\"event\" title=\n\t\t\t\t\"DataTables event\">init<span>DT</span></code></a> event handler!).</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.Responsive( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">div.container { max-width: 1200px }</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/initialisation/option.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Configuration option</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\tdiv.container { max-width: 1200px }\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tresponsive: true\n\t} );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Configuration option</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>The Responsive extension for DataTables can be applied to a DataTable in one of two ways; with a specific class name on the table, or using the DataTables\n\t\t\t\tinitialisation options. This method shows the latter, with the <a href=\"//datatables.net/extensions/responsive/reference/option/responsive\"><code class=\"option\"\n\t\t\t\ttitle=\"Responsive initialisation option\">responsive<span>R</span></code></a> option being set to the boolean value <code>true</code>.</p>\n\n\t\t\t\t<p>The <a href=\"//datatables.net/extensions/responsive/reference/option/responsive\"><code class=\"option\" title=\n\t\t\t\t\"Responsive initialisation option\">responsive<span>R</span></code></a> option can be given as a boolean value, or as an object with configuration options. If as a\n\t\t\t\tboolean, as in this case, the default options are used.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tresponsive: true\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">div.container { max-width: 1200px }</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../styling/index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../styling/bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../styling/compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/styling/bootstrap.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Bootstrap styling</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../Plugins/integration/bootstrap/3/dataTables.bootstrap.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\tbody { font-size: 140% }\n\n\ttable.dataTable th,\n\ttable.dataTable td {\n\t\twhite-space: nowrap;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../Plugins/integration/bootstrap/3/dataTables.bootstrap.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable();\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Bootstrap styling</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows DataTables and the Responsive extension being used with the <a href=\"http://getbootstrap.com\">Bootstrap</a> framework providing the styling.\n\t\t\t\tThe <a href=\"//datatables.net/manual/styling/bootstrap\">DataTables / Bootstrap integration files</a> prove seamless integration for DataTables to be used in a\n\t\t\t\tBootstrap page.</p>\n\n\t\t\t\t<p>Note that the <code>dt-responsive</code> class is used to indicate to the extension that it should be enabled on this page, as <code>responsive</code> <a href=\n\t\t\t\t\"http://getbootstrap.com/css/#tables-responsive\">has special meaning in Bootstrap</a>. The <a href=\n\t\t\t\t\"//datatables.net/extensions/responsive/reference/option/responsive\"><code class=\"option\" title=\n\t\t\t\t\"Responsive initialisation option\">responsive<span>R</span></code></a> option could also be used if required.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"table table-striped table-hover dt-responsive\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable();\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../Plugins/integration/bootstrap/3/dataTables.bootstrap.js\">../../../Plugins/integration/bootstrap/3/dataTables.bootstrap.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">body { font-size: 140% }\n\n\ttable.dataTable th,\n\ttable.dataTable td {\n\t\twhite-space: nowrap;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css\">//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../Plugins/integration/bootstrap/3/dataTables.bootstrap.css\">../../../Plugins/integration/bootstrap/3/dataTables.bootstrap.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/styling/compact.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Compact styling</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\tdiv.container { max-width: 1200px }\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.Responsive( table );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Compact styling</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>DataTables' <a href=\"http://datatables.net/manual/styling/classes\">default stylesheet</a> has a number number of features available that can be enabled by\n\t\t\t\tincluding a class name on the DataTable. One of those options is <code>compact</code> which displays the DataTable with less whitespace padding that might other be\n\t\t\t\tused to increase the information density of the table. Responsive's own style has support for this <code>compact</code> styling as showing in this example.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display compact nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\n\tnew $.fn.dataTable.Responsive( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">div.container { max-width: 1200px }</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/styling/foundation.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Foundation styling</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"//cdn.jsdelivr.net/foundation/5.5.1/css/foundation.min.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../Plugins/integration/foundation/dataTables.foundation.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\ttable.dataTable th,\n\ttable.dataTable td {\n\t\twhite-space: nowrap;\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../Plugins/integration/foundation/dataTables.foundation.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable();\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Foundation styling</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows DataTables and the Responsive extension being used with the <a href=\"http://foundation.zurb.com\">Foundation</a> framework providing the\n\t\t\t\tstyling. The <a href=\"//datatables.net/manual/styling/foundation\">DataTables / Foundation integration files</a> prove seamless integration for DataTables to be\n\t\t\t\tused in a Foundation page.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"tdisplay responsive\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable();\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../Plugins/integration/foundation/dataTables.foundation.js\">../../../Plugins/integration/foundation/dataTables.foundation.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">table.dataTable th,\n\ttable.dataTable td {\n\t\twhite-space: nowrap;\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"//cdn.jsdelivr.net/foundation/5.5.1/css/foundation.min.css\">//cdn.jsdelivr.net/foundation/5.5.1/css/foundation.min.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../Plugins/integration/foundation/dataTables.foundation.css\">../../../Plugins/integration/foundation/dataTables.foundation.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/styling/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\n\t<title>Responsive examples - Styling</title>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Styling</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Responsive requires very little styling information of its own, with styling needed only for the child row display when the table has been collapsed. As such,\n\t\t\t\tintegrating Responsive with your application should be as simple as including the Javascript and base stylesheet! This section shows Responsive being styling using\n\t\t\t\texternal CSS frameworks.</p>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/examples/styling/scrolling.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Responsive example - Vertical scrolling</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/dataTables.responsive.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\tdiv.container { max-width: 1200px }\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../js/dataTables.responsive.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY: 300,\n\t\tpaging: false\n\t} );\n\n\tnew $.fn.dataTable.Responsive( table );\n} );\n\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Responsive example <span>Vertical scrolling</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows Responsive in use with the <a href=\"//datatables.net/reference/option/scrollY\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">scrollY<span>DT</span></code></a> option to present a scrolling table (instead of using paging as the other Responsive examples\n\t\t\t\tdo). Responsive will automatically work with the table in such a configuration.</p>\n\n\t\t\t\t<p>Responsive can be used with <a href=\"//datatables.net/reference/option/scrollX\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">scrollX<span>DT</span></code></a>, however it is relatively pointless as Responsive will remove columns to ensure that there is\n\t\t\t\tno horizontal scrolling!</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display nowrap\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>E-mail</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger</td>\n\t\t\t\t\t\t<td>Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t\t<td>5421</td>\n\t\t\t\t\t\t<td>t.nixon@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett</td>\n\t\t\t\t\t\t<td>Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t\t<td>8422</td>\n\t\t\t\t\t\t<td>g.winters@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton</td>\n\t\t\t\t\t\t<td>Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t\t<td>1562</td>\n\t\t\t\t\t\t<td>a.cox@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric</td>\n\t\t\t\t\t\t<td>Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t\t<td>6224</td>\n\t\t\t\t\t\t<td>c.kelly@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi</td>\n\t\t\t\t\t\t<td>Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t\t<td>5407</td>\n\t\t\t\t\t\t<td>a.satou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle</td>\n\t\t\t\t\t\t<td>Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t\t<td>4804</td>\n\t\t\t\t\t\t<td>b.williamson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod</td>\n\t\t\t\t\t\t<td>Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t\t<td>9608</td>\n\t\t\t\t\t\t<td>h.chandler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona</td>\n\t\t\t\t\t\t<td>Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t\t<td>6200</td>\n\t\t\t\t\t\t<td>r.davidson@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen</td>\n\t\t\t\t\t\t<td>Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t\t<td>2360</td>\n\t\t\t\t\t\t<td>c.hurst@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya</td>\n\t\t\t\t\t\t<td>Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t\t<td>1667</td>\n\t\t\t\t\t\t<td>s.frost@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena</td>\n\t\t\t\t\t\t<td>Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t\t<td>3814</td>\n\t\t\t\t\t\t<td>j.gaines@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn</td>\n\t\t\t\t\t\t<td>Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t\t<td>9497</td>\n\t\t\t\t\t\t<td>q.flynn@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde</td>\n\t\t\t\t\t\t<td>Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t\t<td>6741</td>\n\t\t\t\t\t\t<td>c.marshall@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley</td>\n\t\t\t\t\t\t<td>Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t\t<td>3597</td>\n\t\t\t\t\t\t<td>h.kennedy@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana</td>\n\t\t\t\t\t\t<td>Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t\t<td>1965</td>\n\t\t\t\t\t\t<td>t.fitzpatrick@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t\t<td>1581</td>\n\t\t\t\t\t\t<td>m.silva@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul</td>\n\t\t\t\t\t\t<td>Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t\t<td>3059</td>\n\t\t\t\t\t\t<td>p.byrd@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria</td>\n\t\t\t\t\t\t<td>Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t\t<td>1721</td>\n\t\t\t\t\t\t<td>g.little@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t\t<td>2558</td>\n\t\t\t\t\t\t<td>b.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai</td>\n\t\t\t\t\t\t<td>Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t\t<td>2290</td>\n\t\t\t\t\t\t<td>d.rios@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette</td>\n\t\t\t\t\t\t<td>Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t\t<td>1937</td>\n\t\t\t\t\t\t<td>j.caldwell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri</td>\n\t\t\t\t\t\t<td>Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t\t<td>6154</td>\n\t\t\t\t\t\t<td>y.berry@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar</td>\n\t\t\t\t\t\t<td>Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t\t<td>8330</td>\n\t\t\t\t\t\t<td>c.vance@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris</td>\n\t\t\t\t\t\t<td>Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t\t<td>3023</td>\n\t\t\t\t\t\t<td>d.wilder@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica</td>\n\t\t\t\t\t\t<td>Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t\t<td>5797</td>\n\t\t\t\t\t\t<td>a.ramos@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t\t<td>8822</td>\n\t\t\t\t\t\t<td>g.joyce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t\t<td>9239</td>\n\t\t\t\t\t\t<td>j.chang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden</td>\n\t\t\t\t\t\t<td>Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t\t<td>1314</td>\n\t\t\t\t\t\t<td>b.wagner@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona</td>\n\t\t\t\t\t\t<td>Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t\t<td>2947</td>\n\t\t\t\t\t\t<td>f.green@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou</td>\n\t\t\t\t\t\t<td>Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t\t<td>8899</td>\n\t\t\t\t\t\t<td>s.itou@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle</td>\n\t\t\t\t\t\t<td>House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t\t<td>2769</td>\n\t\t\t\t\t\t<td>m.house@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki</td>\n\t\t\t\t\t\t<td>Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t\t<td>6832</td>\n\t\t\t\t\t\t<td>s.burks@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott</td>\n\t\t\t\t\t\t<td>Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t\t<td>3606</td>\n\t\t\t\t\t\t<td>p.bartlett@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin</td>\n\t\t\t\t\t\t<td>Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t\t<td>2860</td>\n\t\t\t\t\t\t<td>g.cortez@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena</td>\n\t\t\t\t\t\t<td>Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t\t<td>8240</td>\n\t\t\t\t\t\t<td>m.mccray@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>u.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard</td>\n\t\t\t\t\t\t<td>Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t\t<td>7031</td>\n\t\t\t\t\t\t<td>h.hatfield@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope</td>\n\t\t\t\t\t\t<td>Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t\t<td>6318</td>\n\t\t\t\t\t\t<td>h.fuentes@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian</td>\n\t\t\t\t\t\t<td>Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t\t<td>9422</td>\n\t\t\t\t\t\t<td>v.harrell@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy</td>\n\t\t\t\t\t\t<td>Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t\t<td>7580</td>\n\t\t\t\t\t\t<td>t.mooney@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson</td>\n\t\t\t\t\t\t<td>Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t\t<td>1042</td>\n\t\t\t\t\t\t<td>j.bradshaw@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia</td>\n\t\t\t\t\t\t<td>Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t\t<td>2120</td>\n\t\t\t\t\t\t<td>o.liang@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno</td>\n\t\t\t\t\t\t<td>Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t\t<td>6222</td>\n\t\t\t\t\t\t<td>b.nash@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura</td>\n\t\t\t\t\t\t<td>Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t\t<td>9383</td>\n\t\t\t\t\t\t<td>s.yamamoto@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor</td>\n\t\t\t\t\t\t<td>Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t\t<td>8327</td>\n\t\t\t\t\t\t<td>t.walton@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn</td>\n\t\t\t\t\t\t<td>Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t\t<td>2927</td>\n\t\t\t\t\t\t<td>f.camacho@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge</td>\n\t\t\t\t\t\t<td>Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t\t<td>8352</td>\n\t\t\t\t\t\t<td>s.baldwin@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida</td>\n\t\t\t\t\t\t<td>Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t\t<td>7439</td>\n\t\t\t\t\t\t<td>z.frank@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita</td>\n\t\t\t\t\t\t<td>Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t\t<td>4389</td>\n\t\t\t\t\t\t<td>z.serrano@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer</td>\n\t\t\t\t\t\t<td>Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t\t<td>3431</td>\n\t\t\t\t\t\t<td>j.acosta@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara</td>\n\t\t\t\t\t\t<td>Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t\t<td>3990</td>\n\t\t\t\t\t\t<td>c.stevens@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione</td>\n\t\t\t\t\t\t<td>Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t\t<td>1016</td>\n\t\t\t\t\t\t<td>h.butler@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael</td>\n\t\t\t\t\t\t<td>Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t\t<td>6733</td>\n\t\t\t\t\t\t<td>l.greer@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas</td>\n\t\t\t\t\t\t<td>Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t\t<td>8196</td>\n\t\t\t\t\t\t<td>j.alexander@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad</td>\n\t\t\t\t\t\t<td>Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>6373</td>\n\t\t\t\t\t\t<td>s.decker@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael</td>\n\t\t\t\t\t\t<td>Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t\t<td>5384</td>\n\t\t\t\t\t\t<td>m.bruce@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna</td>\n\t\t\t\t\t\t<td>Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t\t<td>4226</td>\n\t\t\t\t\t\t<td>d.snider@datatables.net</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tscrollY: 300,\n\t\tpaging: false\n\t} );\n\n\tnew $.fn.dataTable.Responsive( table );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.js\">../../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../../media/js/jquery.dataTables.js\">../../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../js/dataTables.responsive.js\">../../js/dataTables.responsive.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">div.container { max-width: 1200px }</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../../media/css/jquery.dataTables.css\">../../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../css/dataTables.responsive.css\">../../css/dataTables.responsive.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../initialisation/index.html\">Basic initialisation</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/className.html\">Class name</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/option.html\">Configuration option</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/new.html\">`new` constructor</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/ajax.html\">Ajax data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../initialisation/default.html\">Default initialisation</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Styling</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./foundation.html\">Foundation styling</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./scrolling.html\">Vertical scrolling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./compact.html\">Compact styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../display-control/index.html\">Display control</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../display-control/auto.html\">Automatic column hiding</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/classes.html\">Class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/init-classes.html\">Assigned class control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/fixedHeader.html\">With FixedHeader</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../display-control/complexHeader.html\">Complex headers (rowspan / colspan)</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"../child-rows/index.html\">Child rows</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/disable-child-rows.html\">Disable child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/column-control.html\">Column controlled child rows</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/right-column.html\">Column control - right</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/whole-row-control.html\">Whole row child row control</a></li>\n\t\t\t\t\t\t\t<li><a href=\"../child-rows/custom-renderer.html\">Custom child row renderer</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Responsive/js/dataTables.responsive.js",
    "content": "/*! Responsive 1.0.6\n * 2014-2015 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     Responsive\n * @description Responsive tables plug-in for DataTables\n * @version     1.0.6\n * @file        dataTables.responsive.js\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     www.sprymedia.co.uk/contact\n * @copyright   Copyright 2014-2015 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n(function(window, document, undefined) {\n\n\nvar factory = function( $, DataTable ) {\n\"use strict\";\n\n/**\n * Responsive is a plug-in for the DataTables library that makes use of\n * DataTables' ability to change the visibility of columns, changing the\n * visibility of columns so the displayed columns fit into the table container.\n * The end result is that complex tables will be dynamically adjusted to fit\n * into the viewport, be it on a desktop, tablet or mobile browser.\n *\n * Responsive for DataTables has two modes of operation, which can used\n * individually or combined:\n *\n * * Class name based control - columns assigned class names that match the\n *   breakpoint logic can be shown / hidden as required for each breakpoint.\n * * Automatic control - columns are automatically hidden when there is no\n *   room left to display them. Columns removed from the right.\n *\n * In additional to column visibility control, Responsive also has built into\n * options to use DataTables' child row display to show / hide the information\n * from the table that has been hidden. There are also two modes of operation\n * for this child row display:\n *\n * * Inline - when the control element that the user can use to show / hide\n *   child rows is displayed inside the first column of the table.\n * * Column - where a whole column is dedicated to be the show / hide control.\n *\n * Initialisation of Responsive is performed by:\n *\n * * Adding the class `responsive` or `dt-responsive` to the table. In this case\n *   Responsive will automatically be initialised with the default configuration\n *   options when the DataTable is created.\n * * Using the `responsive` option in the DataTables configuration options. This\n *   can also be used to specify the configuration options, or simply set to\n *   `true` to use the defaults.\n *\n *  @class\n *  @param {object} settings DataTables settings object for the host table\n *  @param {object} [opts] Configuration options\n *  @requires jQuery 1.7+\n *  @requires DataTables 1.10.1+\n *\n *  @example\n *      $('#example').DataTable( {\n *        responsive: true\n *      } );\n *    } );\n */\nvar Responsive = function ( settings, opts ) {\n\t// Sanity check that we are using DataTables 1.10 or newer\n\tif ( ! DataTable.versionCheck || ! DataTable.versionCheck( '1.10.1' ) ) {\n\t\tthrow 'DataTables Responsive requires DataTables 1.10.1 or newer';\n\t}\n\n\tthis.s = {\n\t\tdt: new DataTable.Api( settings ),\n\t\tcolumns: []\n\t};\n\n\t// Check if responsive has already been initialised on this table\n\tif ( this.s.dt.settings()[0].responsive ) {\n\t\treturn;\n\t}\n\n\t// details is an object, but for simplicity the user can give it as a string\n\tif ( opts && typeof opts.details === 'string' ) {\n\t\topts.details = { type: opts.details };\n\t}\n\n\tthis.c = $.extend( true, {}, Responsive.defaults, DataTable.defaults.responsive, opts );\n\tsettings.responsive = this;\n\tthis._constructor();\n};\n\nResponsive.prototype = {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialise the Responsive instance\n\t *\n\t * @private\n\t */\n\t_constructor: function ()\n\t{\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\n\t\tdt.settings()[0]._responsive = this;\n\n\t\t// Use DataTables' private throttle function to avoid processor thrashing\n\t\t$(window).on( 'resize.dtr orientationchange.dtr', dt.settings()[0].oApi._fnThrottle( function () {\n\t\t\tthat._resize();\n\t\t} ) );\n\n\t\t// Destroy event handler\n\t\tdt.on( 'destroy.dtr', function () {\n\t\t\t$(window).off( 'resize.dtr orientationchange.dtr draw.dtr' );\n\t\t} );\n\n\t\t// Reorder the breakpoints array here in case they have been added out\n\t\t// of order\n\t\tthis.c.breakpoints.sort( function (a, b) {\n\t\t\treturn a.width < b.width ? 1 :\n\t\t\t\ta.width > b.width ? -1 : 0;\n\t\t} );\n\n\t\t// Determine which columns are already hidden, and should therefore\n\t\t// remain hidden. todo - should this be done? See thread 22677\n\t\t//\n\t\t// this.s.alwaysHidden = dt.columns(':hidden').indexes();\n\n\t\tthis._classLogic();\n\t\tthis._resizeAuto();\n\n\t\t// Details handler\n\t\tvar details = this.c.details;\n\t\tif ( details.type ) {\n\t\t\tthat._detailsInit();\n\t\t\tthis._detailsVis();\n\n\t\t\tdt.on( 'column-visibility.dtr', function () {\n\t\t\t\tthat._detailsVis();\n\t\t\t} );\n\n\t\t\t// Redraw the details box on each draw. This is used until\n\t\t\t// DataTables implements a native `updated` event for rows\n\t\t\tdt.on( 'draw.dtr', function () {\n\t\t\t\tdt.rows( {page: 'current'} ).iterator( 'row', function ( settings, idx ) {\n\t\t\t\t\tvar row = dt.row( idx );\n\n\t\t\t\t\tif ( row.child.isShown() ) {\n\t\t\t\t\t\tvar info = that.c.details.renderer( dt, idx );\n\t\t\t\t\t\trow.child( info, 'child' ).show();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\t$(dt.table().node()).addClass( 'dtr-'+details.type );\n\t\t}\n\n\t\t// First pass - draw the table for the current viewport size\n\t\tthis._resize();\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Calculate the visibility for the columns in a table for a given\n\t * breakpoint. The result is pre-determined based on the class logic if\n\t * class names are used to control all columns, but the width of the table\n\t * is also used if there are columns which are to be automatically shown\n\t * and hidden.\n\t *\n\t * @param  {string} breakpoint Breakpoint name to use for the calculation\n\t * @return {array} Array of boolean values initiating the visibility of each\n\t *   column.\n\t *  @private\n\t */\n\t_columnsVisiblity: function ( breakpoint )\n\t{\n\t\tvar dt = this.s.dt;\n\t\tvar columns = this.s.columns;\n\t\tvar i, ien;\n\n\t\t// Class logic - determine which columns are in this breakpoint based\n\t\t// on the classes. If no class control (i.e. `auto`) then `-` is used\n\t\t// to indicate this to the rest of the function\n\t\tvar display = $.map( columns, function ( col ) {\n\t\t\treturn col.auto && col.minWidth === null ?\n\t\t\t\tfalse :\n\t\t\t\tcol.auto === true ?\n\t\t\t\t\t'-' :\n\t\t\t\t\t$.inArray( breakpoint, col.includeIn ) !== -1;\n\t\t} );\n\n\t\t// Auto column control - first pass: how much width is taken by the\n\t\t// ones that must be included from the non-auto columns\n\t\tvar requiredWidth = 0;\n\t\tfor ( i=0, ien=display.length ; i<ien ; i++ ) {\n\t\t\tif ( display[i] === true ) {\n\t\t\t\trequiredWidth += columns[i].minWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Second pass, use up any remaining width for other columns. For\n\t\t// scrolling tables we need to subtract the width of the scrollbar. It\n\t\t// may not be requires which makes this sub-optimal, but it would\n\t\t// require another full redraw to make complete use of those extra few\n\t\t// pixels\n\t\tvar scrolling = dt.settings()[0].oScroll;\n\t\tvar bar = scrolling.sY || scrolling.sX ? scrolling.iBarWidth : 0;\n\t\tvar widthAvailable = dt.table().container().offsetWidth - bar;\n\t\tvar usedWidth = widthAvailable - requiredWidth;\n\n\t\t// Control column needs to always be included. This makes it sub-\n\t\t// optimal in terms of using the available with, but to stop layout\n\t\t// thrashing or overflow. Also we need to account for the control column\n\t\t// width first so we know how much width is available for the other\n\t\t// columns, since the control column might not be the first one shown\n\t\tfor ( i=0, ien=display.length ; i<ien ; i++ ) {\n\t\t\tif ( columns[i].control ) {\n\t\t\t\tusedWidth -= columns[i].minWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Allow columns to be shown (counting from the left) until we run out\n\t\t// of room\n\t\tvar empty = false;\n\t\tfor ( i=0, ien=display.length ; i<ien ; i++ ) {\n\t\t\tif ( display[i] === '-' && ! columns[i].control ) {\n\t\t\t\t// Once we've found a column that won't fit we don't let any\n\t\t\t\t// others display either, or columns might disappear in the\n\t\t\t\t// middle of the table\n\t\t\t\tif ( empty || usedWidth - columns[i].minWidth < 0 ) {\n\t\t\t\t\tempty = true;\n\t\t\t\t\tdisplay[i] = false;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdisplay[i] = true;\n\t\t\t\t}\n\n\t\t\t\tusedWidth -= columns[i].minWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Determine if the 'control' column should be shown (if there is one).\n\t\t// This is the case when there is a hidden column (that is not the\n\t\t// control column). The two loops look inefficient here, but they are\n\t\t// trivial and will fly through. We need to know the outcome from the\n\t\t// first , before the action in the second can be taken\n\t\tvar showControl = false;\n\n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tif ( ! columns[i].control && ! columns[i].never && ! display[i] ) {\n\t\t\t\tshowControl = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tif ( columns[i].control ) {\n\t\t\t\tdisplay[i] = showControl;\n\t\t\t}\n\t\t}\n\n\t\t// Finally we need to make sure that there is at least one column that\n\t\t// is visible\n\t\tif ( $.inArray( true, display ) === -1 ) {\n\t\t\tdisplay[0] = true;\n\t\t}\n\n\t\treturn display;\n\t},\n\n\n\t/**\n\t * Create the internal `columns` array with information about the columns\n\t * for the table. This includes determining which breakpoints the column\n\t * will appear in, based upon class names in the column, which makes up the\n\t * vast majority of this method.\n\t *\n\t * @private\n\t */\n\t_classLogic: function ()\n\t{\n\t\tvar that = this;\n\t\tvar calc = {};\n\t\tvar breakpoints = this.c.breakpoints;\n\t\tvar columns = this.s.dt.columns().eq(0).map( function (i) {\n\t\t\tvar className = this.column(i).header().className;\n\n\t\t\treturn {\n\t\t\t\tclassName: className,\n\t\t\t\tincludeIn: [],\n\t\t\t\tauto:      false,\n\t\t\t\tcontrol:   false,\n\t\t\t\tnever:     className.match(/\\bnever\\b/) ? true : false\n\t\t\t};\n\t\t} );\n\n\t\t// Simply add a breakpoint to `includeIn` array, ensuring that there are\n\t\t// no duplicates\n\t\tvar add = function ( colIdx, name ) {\n\t\t\tvar includeIn = columns[ colIdx ].includeIn;\n\n\t\t\tif ( $.inArray( name, includeIn ) === -1 ) {\n\t\t\t\tincludeIn.push( name );\n\t\t\t}\n\t\t};\n\n\t\tvar column = function ( colIdx, name, operator, matched ) {\n\t\t\tvar size, i, ien;\n\n\t\t\tif ( ! operator ) {\n\t\t\t\tcolumns[ colIdx ].includeIn.push( name );\n\t\t\t}\n\t\t\telse if ( operator === 'max-' ) {\n\t\t\t\t// Add this breakpoint and all smaller\n\t\t\t\tsize = that._find( name ).width;\n\n\t\t\t\tfor ( i=0, ien=breakpoints.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( breakpoints[i].width <= size ) {\n\t\t\t\t\t\tadd( colIdx, breakpoints[i].name );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( operator === 'min-' ) {\n\t\t\t\t// Add this breakpoint and all larger\n\t\t\t\tsize = that._find( name ).width;\n\n\t\t\t\tfor ( i=0, ien=breakpoints.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( breakpoints[i].width >= size ) {\n\t\t\t\t\t\tadd( colIdx, breakpoints[i].name );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( operator === 'not-' ) {\n\t\t\t\t// Add all but this breakpoint (xxx need extra information)\n\n\t\t\t\tfor ( i=0, ien=breakpoints.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( breakpoints[i].name.indexOf( matched ) === -1 ) {\n\t\t\t\t\t\tadd( colIdx, breakpoints[i].name );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Loop over each column and determine if it has a responsive control\n\t\t// class\n\t\tcolumns.each( function ( col, i ) {\n\t\t\tvar classNames = col.className.split(' ');\n\t\t\tvar hasClass = false;\n\n\t\t\t// Split the class name up so multiple rules can be applied if needed\n\t\t\tfor ( var k=0, ken=classNames.length ; k<ken ; k++ ) {\n\t\t\t\tvar className = $.trim( classNames[k] );\n\n\t\t\t\tif ( className === 'all' ) {\n\t\t\t\t\t// Include in all\n\t\t\t\t\thasClass = true;\n\t\t\t\t\tcol.includeIn = $.map( breakpoints, function (a) {\n\t\t\t\t\t\treturn a.name;\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if ( className === 'none' || className === 'never' ) {\n\t\t\t\t\t// Include in none (default) and no auto\n\t\t\t\t\thasClass = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if ( className === 'control' ) {\n\t\t\t\t\t// Special column that is only visible, when one of the other\n\t\t\t\t\t// columns is hidden. This is used for the details control\n\t\t\t\t\thasClass = true;\n\t\t\t\t\tcol.control = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t$.each( breakpoints, function ( j, breakpoint ) {\n\t\t\t\t\t// Does this column have a class that matches this breakpoint?\n\t\t\t\t\tvar brokenPoint = breakpoint.name.split('-');\n\t\t\t\t\tvar re = new RegExp( '(min\\\\-|max\\\\-|not\\\\-)?('+brokenPoint[0]+')(\\\\-[_a-zA-Z0-9])?' );\n\t\t\t\t\tvar match = className.match( re );\n\n\t\t\t\t\tif ( match ) {\n\t\t\t\t\t\thasClass = true;\n\n\t\t\t\t\t\tif ( match[2] === brokenPoint[0] && match[3] === '-'+brokenPoint[1] ) {\n\t\t\t\t\t\t\t// Class name matches breakpoint name fully\n\t\t\t\t\t\t\tcolumn( i, breakpoint.name, match[1], match[2]+match[3] );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( match[2] === brokenPoint[0] && ! match[3] ) {\n\t\t\t\t\t\t\t// Class name matched primary breakpoint name with no qualifier\n\t\t\t\t\t\t\tcolumn( i, breakpoint.name, match[1], match[2] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// If there was no control class, then automatic sizing is used\n\t\t\tif ( ! hasClass ) {\n\t\t\t\tcol.auto = true;\n\t\t\t}\n\t\t} );\n\n\t\tthis.s.columns = columns;\n\t},\n\n\n\t/**\n\t * Initialisation for the details handler\n\t *\n\t * @private\n\t */\n\t_detailsInit: function ()\n\t{\n\t\tvar that    = this;\n\t\tvar dt      = this.s.dt;\n\t\tvar details = this.c.details;\n\n\t\t// The inline type always uses the first child as the target\n\t\tif ( details.type === 'inline' ) {\n\t\t\tdetails.target = 'td:first-child';\n\t\t}\n\n\t\t// type.target can be a string jQuery selector or a column index\n\t\tvar target   = details.target;\n\t\tvar selector = typeof target === 'string' ? target : 'td';\n\n\t\t// Click handler to show / hide the details rows when they are available\n\t\t$( dt.table().body() ).on( 'click', selector, function (e) {\n\t\t\t// If the table is not collapsed (i.e. there is no hidden columns)\n\t\t\t// then take no action\n\t\t\tif ( ! $(dt.table().node()).hasClass('collapsed' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check that the row is actually a DataTable's controlled node\n\t\t\tif ( ! dt.row( $(this).closest('tr') ).length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For column index, we determine if we should act or not in the\n\t\t\t// handler - otherwise it is already okay\n\t\t\tif ( typeof target === 'number' ) {\n\t\t\t\tvar targetIdx = target < 0 ?\n\t\t\t\t\tdt.columns().eq(0).length + target :\n\t\t\t\t\ttarget;\n\n\t\t\t\tif ( dt.cell( this ).index().column !== targetIdx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// $().closest() includes itself in its check\n\t\t\tvar row = dt.row( $(this).closest('tr') );\n\n\t\t\tif ( row.child.isShown() ) {\n\t\t\t\trow.child( false );\n\t\t\t\t$( row.node() ).removeClass( 'parent' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar info = that.c.details.renderer( dt, row[0] );\n\t\t\t\trow.child( info, 'child' ).show();\n\t\t\t\t$( row.node() ).addClass( 'parent' );\n\t\t\t}\n\t\t} );\n\t},\n\n\n\t/**\n\t * Update the child rows in the table whenever the column visibility changes\n\t *\n\t * @private\n\t */\n\t_detailsVis: function ()\n\t{\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\n\t\t// Find how many columns are hidden\n\t\tvar hiddenColumns = dt.columns().indexes().filter( function ( idx ) {\n\t\t\tvar col = dt.column( idx );\n\n\t\t\tif ( col.visible() ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Only counts as hidden if it doesn't have the `never` class\n\t\t\treturn $( col.header() ).hasClass( 'never' ) ? null : idx;\n\t\t} );\n\t\tvar haveHidden = true;\n\n\t\tif ( hiddenColumns.length === 0 || ( hiddenColumns.length === 1 && this.s.columns[ hiddenColumns[0] ].control ) ) {\n\t\t\thaveHidden = false;\n\t\t}\n\n\t\tif ( haveHidden ) {\n\t\t\t// Show all existing child rows\n\t\t\tdt.rows( { page: 'current' } ).eq(0).each( function (idx) {\n\t\t\t\tvar row = dt.row( idx );\n\n\t\t\t\tif ( row.child() ) {\n\t\t\t\t\tvar info = that.c.details.renderer( dt, row[0] );\n\n\t\t\t\t\t// The renderer can return false to have no child row\n\t\t\t\t\tif ( info === false ) {\n\t\t\t\t\t\trow.child.hide();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\trow.child( info, 'child' ).show();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\telse {\n\t\t\t// Hide all existing child rows\n\t\t\tdt.rows( { page: 'current' } ).eq(0).each( function (idx) {\n\t\t\t\tdt.row( idx ).child.hide();\n\t\t\t} );\n\t\t}\n\t},\n\n\n\t/**\n\t * Find a breakpoint object from a name\n\t * @param  {string} name Breakpoint name to find\n\t * @return {object}      Breakpoint description object\n\t */\n\t_find: function ( name )\n\t{\n\t\tvar breakpoints = this.c.breakpoints;\n\n\t\tfor ( var i=0, ien=breakpoints.length ; i<ien ; i++ ) {\n\t\t\tif ( breakpoints[i].name === name ) {\n\t\t\t\treturn breakpoints[i];\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/**\n\t * Alter the table display for a resized viewport. This involves first\n\t * determining what breakpoint the window currently is in, getting the\n\t * column visibilities to apply and then setting them.\n\t *\n\t * @private\n\t */\n\t_resize: function ()\n\t{\n\t\tvar dt = this.s.dt;\n\t\tvar width = $(window).width();\n\t\tvar breakpoints = this.c.breakpoints;\n\t\tvar breakpoint = breakpoints[0].name;\n\t\tvar columns = this.s.columns;\n\t\tvar i, ien;\n\n\t\t// Determine what breakpoint we are currently at\n\t\tfor ( i=breakpoints.length-1 ; i>=0 ; i-- ) {\n\t\t\tif ( width <= breakpoints[i].width ) {\n\t\t\t\tbreakpoint = breakpoints[i].name;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Show the columns for that break point\n\t\tvar columnsVis = this._columnsVisiblity( breakpoint );\n\n\t\t// Set the class before the column visibility is changed so event\n\t\t// listeners know what the state is. Need to determine if there are\n\t\t// any columns that are not visible but can be shown\n\t\tvar collapsedClass = false;\n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tif ( columnsVis[i] === false && ! columns[i].never ) {\n\t\t\t\tcollapsedClass = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t$( dt.table().node() ).toggleClass('collapsed', collapsedClass );\n\n\t\tdt.columns().eq(0).each( function ( colIdx, i ) {\n\t\t\tdt.column( colIdx ).visible( columnsVis[i] );\n\t\t} );\n\t},\n\n\n\t/**\n\t * Determine the width of each column in the table so the auto column hiding\n\t * has that information to work with. This method is never going to be 100%\n\t * perfect since column widths can change slightly per page, but without\n\t * seriously compromising performance this is quite effective.\n\t *\n\t * @private\n\t */\n\t_resizeAuto: function ()\n\t{\n\t\tvar dt = this.s.dt;\n\t\tvar columns = this.s.columns;\n\n\t\t// Are we allowed to do auto sizing?\n\t\tif ( ! this.c.auto ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Are there any columns that actually need auto-sizing, or do they all\n\t\t// have classes defined\n\t\tif ( $.inArray( true, $.map( columns, function (c) { return c.auto; } ) ) === -1 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clone the table with the current data in it\n\t\tvar tableWidth   = dt.table().node().offsetWidth;\n\t\tvar columnWidths = dt.columns;\n\t\tvar clonedTable  = dt.table().node().cloneNode( false );\n\t\tvar clonedHeader = $( dt.table().header().cloneNode( false ) ).appendTo( clonedTable );\n\t\tvar clonedBody   = $( dt.table().body().cloneNode( false ) ).appendTo( clonedTable );\n\n\t\t$( dt.table().footer() ).clone( false ).appendTo( clonedTable );\n\n\t\t// This is a bit slow, but we need to get a clone of each row that\n\t\t// includes all columns. As such, try to do this as little as possible.\n\t\tdt.rows( { page: 'current' } ).indexes().flatten().each( function ( idx ) {\n\t\t\tvar clone = dt.row( idx ).node().cloneNode( true );\n\t\t\t\n\t\t\tif ( dt.columns( ':hidden' ).flatten().length ) {\n\t\t\t\t$(clone).append( dt.cells( idx, ':hidden' ).nodes().to$().clone() );\n\t\t\t}\n\n\t\t\t$(clone).appendTo( clonedBody );\n\t\t} );\n\n\t\tvar cells = dt.columns().header().to$().clone( false );\n\t\t$('<tr/>')\n\t\t\t.append( cells )\n\t\t\t.appendTo( clonedHeader );\n\n\t\t// In the inline case extra padding is applied to the first column to\n\t\t// give space for the show / hide icon. We need to use this in the\n\t\t// calculation\n\t\tif ( this.c.details.type === 'inline' ) {\n\t\t\t$(clonedTable).addClass( 'dtr-inline collapsed' );\n\t\t}\n\n\t\tvar inserted = $('<div/>')\n\t\t\t.css( {\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1,\n\t\t\t\toverflow: 'hidden'\n\t\t\t} )\n\t\t\t.append( clonedTable );\n\n\t\t// Remove columns which are not to be included\n\t\tinserted.find('th.never, td.never').remove();\n\n\t\tinserted.insertBefore( dt.table().node() );\n\n\t\t// The cloned header now contains the smallest that each column can be\n\t\tdt.columns().eq(0).each( function ( idx ) {\n\t\t\tcolumns[idx].minWidth = cells[ idx ].offsetWidth || 0;\n\t\t} );\n\n\t\tinserted.remove();\n\t}\n};\n\n\n/**\n * List of default breakpoints. Each item in the array is an object with two\n * properties:\n *\n * * `name` - the breakpoint name.\n * * `width` - the breakpoint width\n *\n * @name Responsive.breakpoints\n * @static\n */\nResponsive.breakpoints = [\n\t{ name: 'desktop',  width: Infinity },\n\t{ name: 'tablet-l', width: 1024 },\n\t{ name: 'tablet-p', width: 768 },\n\t{ name: 'mobile-l', width: 480 },\n\t{ name: 'mobile-p', width: 320 }\n];\n\n\n/**\n * Responsive default settings for initialisation\n *\n * @namespace\n * @name Responsive.defaults\n * @static\n */\nResponsive.defaults = {\n\t/**\n\t * List of breakpoints for the instance. Note that this means that each\n\t * instance can have its own breakpoints. Additionally, the breakpoints\n\t * cannot be changed once an instance has been creased.\n\t *\n\t * @type {Array}\n\t * @default Takes the value of `Responsive.breakpoints`\n\t */\n\tbreakpoints: Responsive.breakpoints,\n\n\t/**\n\t * Enable / disable auto hiding calculations. It can help to increase\n\t * performance slightly if you disable this option, but all columns would\n\t * need to have breakpoint classes assigned to them\n\t *\n\t * @type {Boolean}\n\t * @default  `true`\n\t */\n\tauto: true,\n\n\t/**\n\t * Details control. If given as a string value, the `type` property of the\n\t * default object is set to that value, and the defaults used for the rest\n\t * of the object - this is for ease of implementation.\n\t *\n\t * The object consists of the following properties:\n\t *\n\t * * `renderer` - function that is called for display of the child row data.\n\t *   The default function will show the data from the hidden columns\n\t * * `target` - Used as the selector for what objects to attach the child\n\t *   open / close to\n\t * * `type` - `false` to disable the details display, `inline` or `column`\n\t *   for the two control types\n\t *\n\t * @type {Object|string}\n\t */\n\tdetails: {\n\t\trenderer: function ( api, rowIdx ) {\n\t\t\tvar data = api.cells( rowIdx, ':hidden' ).eq(0).map( function ( cell ) {\n\t\t\t\tvar header = $( api.column( cell.column ).header() );\n\t\t\t\tvar idx = api.cell( cell ).index();\n\n\t\t\t\tif ( header.hasClass( 'control' ) || header.hasClass( 'never' ) ) {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\n\t\t\t\t// Use a non-public DT API method to render the data for display\n\t\t\t\t// This needs to be updated when DT adds a suitable method for\n\t\t\t\t// this type of data retrieval\n\t\t\t\tvar dtPrivate = api.settings()[0];\n\t\t\t\tvar cellData = dtPrivate.oApi._fnGetCellData(\n\t\t\t\t\tdtPrivate, idx.row, idx.column, 'display'\n\t\t\t\t);\n\t\t\t\tvar title = header.text();\n\t\t\t\tif ( title ) {\n\t\t\t\t\ttitle = title + ':';\n\t\t\t\t}\n\n\t\t\t\treturn '<li data-dtr-index=\"'+idx.column+'\">'+\n\t\t\t\t\t\t'<span class=\"dtr-title\">'+\n\t\t\t\t\t\t\ttitle+\n\t\t\t\t\t\t'</span> '+\n\t\t\t\t\t\t'<span class=\"dtr-data\">'+\n\t\t\t\t\t\t\tcellData+\n\t\t\t\t\t\t'</span>'+\n\t\t\t\t\t'</li>';\n\t\t\t} ).toArray().join('');\n\n\t\t\treturn data ?\n\t\t\t\t$('<ul data-dtr-index=\"'+rowIdx+'\"/>').append( data ) :\n\t\t\t\tfalse;\n\t\t},\n\n\t\ttarget: 0,\n\n\t\ttype: 'inline'\n\t}\n};\n\n\n/*\n * API\n */\nvar Api = $.fn.dataTable.Api;\n\n// Doesn't do anything - work around for a bug in DT... Not documented\nApi.register( 'responsive()', function () {\n\treturn this;\n} );\n\nApi.register( 'responsive.index()', function ( li ) {\n\tli = $(li);\n\n\treturn {\n\t\tcolumn: li.data('dtr-index'),\n\t\trow:    li.parent().data('dtr-index')\n\t};\n} );\n\nApi.register( 'responsive.rebuild()', function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\tif ( ctx._responsive ) {\n\t\t\tctx._responsive._classLogic();\n\t\t}\n\t} );\n} );\n\nApi.register( 'responsive.recalc()', function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\tif ( ctx._responsive ) {\n\t\t\tctx._responsive._resizeAuto();\n\t\t\tctx._responsive._resize();\n\t\t}\n\t} );\n} );\n\n\n/**\n * Version information\n *\n * @name Responsive.version\n * @static\n */\nResponsive.version = '1.0.6';\n\n\n$.fn.dataTable.Responsive = Responsive;\n$.fn.DataTable.Responsive = Responsive;\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on( 'init.dt.dtr', function (e, settings, json) {\n\tif ( e.namespace !== 'dt' ) {\n\t\treturn;\n\t}\n\n\tif ( $(settings.nTable).hasClass( 'responsive' ) ||\n\t\t $(settings.nTable).hasClass( 'dt-responsive' ) ||\n\t\t settings.oInit.responsive ||\n\t\t DataTable.defaults.responsive\n\t) {\n\t\tvar init = settings.oInit.responsive;\n\n\t\tif ( init !== false ) {\n\t\t\tnew Responsive( settings, $.isPlainObject( init ) ? init : {}  );\n\t\t}\n\t}\n} );\n\nreturn Responsive;\n}; // /factory\n\n\n// Define as an AMD module if possible\nif ( typeof define === 'function' && define.amd ) {\n\tdefine( ['jquery', 'datatables'], factory );\n}\nelse if ( typeof exports === 'object' ) {\n    // Node/CommonJS\n    factory( require('jquery'), require('datatables') );\n}\nelse if ( jQuery && !jQuery.fn.dataTable.Responsive ) {\n\t// Otherwise simply initialise as normal, stopping multiple evaluation\n\tfactory( jQuery, jQuery.fn.dataTable );\n}\n\n\n})(window, document);\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Scroller/Readme.txt",
    "content": "# Scroller\n\nScroller is a virtual rendering plug-in for DataTables which allows large datasets to be drawn on screen every quickly. What the virtual rendering means is that only the visible portion of the table (and a bit to either side to make the scrolling smooth) is drawn, while the scrolling container gives the visual impression that the whole table is visible. This is done by making use of the pagination abilities of DataTables and moving the table around in the scrolling container DataTables adds to the page. The scrolling container is forced to the height it would be for the full table display using an extra element.\n\nKey features include:\n\n* Speed! The aim of Scroller for DataTables is to make rendering large data sets fast\n* Full compatibility with DataTables' deferred rendering for maximum speed\n* Integration with state saving in DataTables (scrolling position is saved)\n* Support for scrolling with millions of rows\n* Easy to use\n\n\n# Installation\n\nTo use Scroller, first download DataTables ( http://datatables.net/download ) and place the unzipped Scroller package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser.\n\n\n# Basic usage\n\nScroller is initialised by simply including the letter `dt-string S` in the `dt-init dom` for the table you want to have this feature enabled on. Note that the `dt-string S` must come after the `dt-string t` parameter in `dom`. For example:\n\n```js\n$(document).ready( function () {\n\t$('#example').DataTable( {\n\t\tdom: 'lfrtipS'\n\t} );\n} );\n```\n\nNote that rows in the table must all be the same height. Information in a cell which expands on to multiple lines will cause some odd behaviour in the scrolling. Additionally, the table's `cellspacing` parameter must be set to 0, again to ensure the information display is correct.\n\n\n# Documentation / support\n\n* Documentation: http://datatables.net/extensions/scroller/\n* DataTables support forums: http://datatables.net/forums\n\n\n# GitHub\n\nIf you fancy getting involved with the development of Scroller and help make it better, please refer to its GitHub repo: https://github.com/DataTables/Scroller\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Scroller/css/dataTables.scroller.css",
    "content": "\n/*\n * Namespace: DTS (DataTables Scroller)\n */\n\ndiv.DTS tbody th,\ndiv.DTS tbody td {\n\twhite-space: nowrap;\n}\n\ndiv.DTS tbody tr.even {\n\tbackground-color: white;\n}\n\ndiv.DTS div.DTS_Loading {\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\twidth: 200px;\n\theight: 20px;\n\tmargin-top: -20px;\n\tmargin-left: -100px;\n\tz-index: 1;\n\n\tborder: 1px solid #999;\n\tpadding: 20px 0;\n\ttext-align: center;\n\tbackground-color: white;\n\tbackground-color: rgba(255, 255, 255, 0.5);\n}\n\ndiv.DTS div.dataTables_scrollHead,\ndiv.DTS div.dataTables_scrollFoot {\n\tbackground-color: white;\n}\n\ndiv.DTS div.dataTables_scrollBody {\n\tz-index: 2;\n}\n\ndiv.DTS div.dataTables_scroll {\n\tbackground: url('../images/loading-background.png') repeat 0 0;\n}\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Scroller/examples/api_scrolling.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Scroller example - API</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.scroller.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.scroller.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tajax:        \"data/2500.txt\",\n\t\tdeferRender: true,\n\t\tdom:         \"frtiS\",\n\t\tscrollY:     200,\n\t\tscrollCollapse: true,\n\t\tinitComplete: function () {\n\t\t\tvar api = this.api();\n\t\t\tapi.scroller().scrollToRow( 1000 );\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Scroller example <span>API</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows a trivial use of the API methods that Scroller adds to the DataTables API to\n\t\t\t\tscroll to a row once the table's data has been loaded. In this case\n\t\t\t\t<code>scroller().scrollToRow()</code> is used to jump to row 1000.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>ID</th>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>ZIP / Post code</th>\n\t\t\t\t\t\t<th>Country</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tajax:        &quot;data/2500.txt&quot;,\n\t\tdeferRender: true,\n\t\tdom:         &quot;frtiS&quot;,\n\t\tscrollY:     200,\n\t\tscrollCollapse: true,\n\t\tinitComplete: function () {\n\t\t\tvar api = this.api();\n\t\t\tapi.scroller().scrollToRow( 1000 );\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.scroller.js\">../js/dataTables.scroller.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.scroller.css\">../css/dataTables.scroller.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_saving.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./large_js_source.html\">Client-side data source (50,000 rows)</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side_processing.html\">Server-side processing (5,000,000\n\t\t\t\t\t\t\trows)</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./api_scrolling.html\">API</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Scroller/examples/data/2500.txt",
    "content": "{ \"aaData\": [\n\t[ \"1\", \"Armand\", \"Warren\", \"56045\", \"Taiwan, Province of China\" ],\n\t[ \"2\", \"Xenos\", \"Salas\", \"71090\", \"Liberia\" ],\n\t[ \"3\", \"Virginia\", \"Whitaker\", \"62723\", \"Nicaragua\" ],\n\t[ \"4\", \"Kato\", \"Patrick\", \"97662\", \"Palau\" ],\n\t[ \"5\", \"Penelope\", \"Hensley\", \"76634\", \"Greenland\" ],\n\t[ \"6\", \"Georgia\", \"Erickson\", \"81358\", \"Bolivia\" ],\n\t[ \"7\", \"Shad\", \"Pena\", \"20600\", \"Palestinian Territory, Occupied\" ],\n\t[ \"8\", \"Tanisha\", \"Humphrey\", \"93371\", \"Kenya\" ],\n\t[ \"9\", \"Claire\", \"Espinoza\", \"I8S 2S8\", \"Panama\" ],\n\t[ \"10\", \"Raya\", \"Tucker\", \"O8D 8W7\", \"Botswana\" ],\n\t[ \"11\", \"Otto\", \"Briggs\", \"57590\", \"Anguilla\" ],\n\t[ \"12\", \"Logan\", \"Burt\", \"53041\", \"Venezuela\" ],\n\t[ \"13\", \"Cooper\", \"Pennington\", \"36994\", \"France\" ],\n\t[ \"14\", \"Kristen\", \"Peterson\", \"52917\", \"Sao Tome and Principe\" ],\n\t[ \"15\", \"Jordan\", \"Velasquez\", \"08884\", \"Switzerland\" ],\n\t[ \"16\", \"Zelda\", \"Freeman\", \"F9H 1J9\", \"Holy See (Vatican City State)\" ],\n\t[ \"17\", \"Mary\", \"Pacheco\", \"A7Y 6X9\", \"Niger\" ],\n\t[ \"18\", \"Tiger\", \"Robles\", \"44533\", \"Malaysia\" ],\n\t[ \"19\", \"Zelenia\", \"Buckner\", \"Q8N 6E5\", \"Malawi\" ],\n\t[ \"20\", \"Coby\", \"Johnston\", \"N6I 2O9\", \"Rwanda\" ],\n\t[ \"21\", \"Gillian\", \"Strickland\", \"12258\", \"Cook Islands\" ],\n\t[ \"22\", \"Alfreda\", \"Mcbride\", \"K5A 3B6\", \"Nigeria\" ],\n\t[ \"23\", \"Laith\", \"Ford\", \"19072\", \"Czech Republic\" ],\n\t[ \"24\", \"Autumn\", \"Barton\", \"U9D 9F4\", \"Angola\" ],\n\t[ \"25\", \"Nadine\", \"Britt\", \"G4U 8L0\", \"Liechtenstein\" ],\n\t[ \"26\", \"Xaviera\", \"Hart\", \"T1N 7D2\", \"Mali\" ],\n\t[ \"27\", \"Neil\", \"Page\", \"T3E 9F4\", \"Korea\" ],\n\t[ \"28\", \"Rose\", \"French\", \"B7T 8M2\", \"French Polynesia\" ],\n\t[ \"29\", \"Alyssa\", \"Poole\", \"S1L 2T5\", \"Yemen\" ],\n\t[ \"30\", \"Chantale\", \"Lynch\", \"97316\", \"United States\" ],\n\t[ \"31\", \"Jermaine\", \"Dawson\", \"A3H 7A1\", \"American Samoa\" ],\n\t[ \"32\", \"Ann\", \"Giles\", \"54258\", \"Korea\" ],\n\t[ \"33\", \"Jerry\", \"Carr\", \"04901\", \"South Georgia and The South Sandwich Islands\" ],\n\t[ \"34\", \"Lionel\", \"Hooper\", \"67970\", \"Bahrain\" ],\n\t[ \"35\", \"Alyssa\", \"Hewitt\", \"R3K 2V8\", \"Paraguay\" ],\n\t[ \"36\", \"Lisandra\", \"Sheppard\", \"71886\", \"Seychelles\" ],\n\t[ \"37\", \"Kylan\", \"Harrison\", \"96763\", \"Italy\" ],\n\t[ \"38\", \"Kaitlin\", \"Montgomery\", \"V5K 5U8\", \"Niger\" ],\n\t[ \"39\", \"Heidi\", \"Boyd\", \"B3C 8M9\", \"Papua New Guinea\" ],\n\t[ \"40\", \"Rinah\", \"Case\", \"W7M 5K1\", \"Mali\" ],\n\t[ \"41\", \"Thaddeus\", \"Maynard\", \"E4V 6W6\", \"Egypt\" ],\n\t[ \"42\", \"Lacota\", \"Ray\", \"T3J 8D8\", \"United Kingdom\" ],\n\t[ \"43\", \"Olympia\", \"Cortez\", \"F8C 7I5\", \"Palau\" ],\n\t[ \"44\", \"Wendy\", \"Rojas\", \"N8T 4K6\", \"Cook Islands\" ],\n\t[ \"45\", \"Arden\", \"Kelley\", \"V9N 2T6\", \"India\" ],\n\t[ \"46\", \"Colorado\", \"Lindsey\", \"96703\", \"Chad\" ],\n\t[ \"47\", \"Alika\", \"Weaver\", \"F6V 1I1\", \"Bulgaria\" ],\n\t[ \"48\", \"Phoebe\", \"Mack\", \"E4B 1X2\", \"El Salvador\" ],\n\t[ \"49\", \"Sybill\", \"Bridges\", \"Z2G 6A2\", \"Somalia\" ],\n\t[ \"50\", \"Trevor\", \"Larsen\", \"K1R 3B9\", \"United Arab Emirates\" ],\n\t[ \"51\", \"Maya\", \"Battle\", \"70881\", \"Australia\" ],\n\t[ \"52\", \"Charity\", \"Walton\", \"I4I 5R9\", \"Swaziland\" ],\n\t[ \"53\", \"Lane\", \"Sloan\", \"79076\", \"Nauru\" ],\n\t[ \"54\", \"Christopher\", \"Watson\", \"35116\", \"Suriname\" ],\n\t[ \"55\", \"Clementine\", \"Shelton\", \"98232\", \"Venezuela\" ],\n\t[ \"56\", \"Basil\", \"Hood\", \"J9I 1R2\", \"Tonga\" ],\n\t[ \"57\", \"Meghan\", \"Pacheco\", \"H5Z 6B1\", \"Dominican Republic\" ],\n\t[ \"58\", \"Brennan\", \"Potts\", \"51743\", \"Turkey\" ],\n\t[ \"59\", \"Lawrence\", \"Duran\", \"63266\", \"Uruguay\" ],\n\t[ \"60\", \"Ina\", \"Head\", \"S8P 9J5\", \"Romania\" ],\n\t[ \"61\", \"Castor\", \"Jacobson\", \"C9F 6C9\", \"Albania\" ],\n\t[ \"62\", \"Daquan\", \"Holden\", \"38571\", \"Ireland\" ],\n\t[ \"63\", \"Donna\", \"Valencia\", \"J7B 3I0\", \"Portugal\" ],\n\t[ \"64\", \"Kessie\", \"Phelps\", \"61063\", \"Georgia\" ],\n\t[ \"65\", \"Dillon\", \"Garcia\", \"13652\", \"Holy See (Vatican City State)\" ],\n\t[ \"66\", \"Russell\", \"Sweeney\", \"T8P 2O6\", \"Saint Kitts and Nevis\" ],\n\t[ \"67\", \"Zelda\", \"Berg\", \"84946\", \"Afghanistan\" ],\n\t[ \"68\", \"Dexter\", \"Mann\", \"73596\", \"Thailand\" ],\n\t[ \"69\", \"Maisie\", \"Miller\", \"X3M 6C1\", \"Seychelles\" ],\n\t[ \"70\", \"Lynn\", \"Mitchell\", \"N5B 3Z9\", \"Wallis and Futuna\" ],\n\t[ \"71\", \"Gay\", \"Medina\", \"66692\", \"Germany\" ],\n\t[ \"72\", \"Olga\", \"Clark\", \"M6B 7B6\", \"Kuwait\" ],\n\t[ \"73\", \"Brianna\", \"Obrien\", \"Z6Z 5R3\", \"Bahrain\" ],\n\t[ \"74\", \"Daria\", \"Byers\", \"R9T 4N7\", \"Ghana\" ],\n\t[ \"75\", \"Chiquita\", \"Barker\", \"28435\", \"Ireland\" ],\n\t[ \"76\", \"Gray\", \"Salazar\", \"58618\", \"Chile\" ],\n\t[ \"77\", \"Delilah\", \"Kirby\", \"42811\", \"Oman\" ],\n\t[ \"78\", \"Xanthus\", \"Holland\", \"B8Q 9C4\", \"Antigua and Barbuda\" ],\n\t[ \"79\", \"Reuben\", \"Brennan\", \"44693\", \"Czech Republic\" ],\n\t[ \"80\", \"Alden\", \"Long\", \"94236\", \"Slovakia\" ],\n\t[ \"81\", \"Blythe\", \"Bender\", \"04812\", \"Guam\" ],\n\t[ \"82\", \"Aileen\", \"Burgess\", \"47942\", \"Djibouti\" ],\n\t[ \"83\", \"Zeus\", \"Craig\", \"43002\", \"Nicaragua\" ],\n\t[ \"84\", \"Jade\", \"Garza\", \"F2X 8F3\", \"New Zealand\" ],\n\t[ \"85\", \"Noah\", \"Barrera\", \"K9C 8U0\", \"Malawi\" ],\n\t[ \"86\", \"Quyn\", \"Robertson\", \"H3X 6J9\", \"Bosnia and Herzegovina\" ],\n\t[ \"87\", \"Serena\", \"Cabrera\", \"83671\", \"Slovenia\" ],\n\t[ \"88\", \"Charity\", \"Chase\", \"T9Q 7C4\", \"Solomon Islands\" ],\n\t[ \"89\", \"Athena\", \"Grimes\", \"62801\", \"Aruba\" ],\n\t[ \"90\", \"Mallory\", \"Middleton\", \"D2V 1M5\", \"Italy\" ],\n\t[ \"91\", \"Xenos\", \"Jones\", \"46642\", \"Singapore\" ],\n\t[ \"92\", \"Tate\", \"Gregory\", \"66538\", \"Zimbabwe\" ],\n\t[ \"93\", \"Blaze\", \"Taylor\", \"70282\", \"Paraguay\" ],\n\t[ \"94\", \"Jena\", \"Duncan\", \"63057\", \"Cambodia\" ],\n\t[ \"95\", \"Thaddeus\", \"Chase\", \"66762\", \"Netherlands Antilles\" ],\n\t[ \"96\", \"Guinevere\", \"Mcgee\", \"O9G 4S2\", \"Lebanon\" ],\n\t[ \"97\", \"Kermit\", \"Ramsey\", \"41214\", \"Dominican Republic\" ],\n\t[ \"98\", \"Josephine\", \"Gallagher\", \"04960\", \"French Southern Territories\" ],\n\t[ \"99\", \"Amela\", \"Morales\", \"M9I 1X5\", \"Sudan\" ],\n\t[ \"100\", \"Rina\", \"Yates\", \"G3T 7M9\", \"Dominica\" ],\n\t[ \"101\", \"Orson\", \"Norris\", \"21660\", \"Sierra Leone\" ],\n\t[ \"102\", \"Graiden\", \"Silva\", \"98191\", \"Saint Lucia\" ],\n\t[ \"103\", \"Amaya\", \"Hood\", \"45779\", \"India\" ],\n\t[ \"104\", \"Fatima\", \"Fitzpatrick\", \"I4R 9Q8\", \"Viet Nam\" ],\n\t[ \"105\", \"Judith\", \"Stokes\", \"97596\", \"Sudan\" ],\n\t[ \"106\", \"Jared\", \"Vaughn\", \"75521\", \"Benin\" ],\n\t[ \"107\", \"Mira\", \"Morgan\", \"35169\", \"Martinique\" ],\n\t[ \"108\", \"Walter\", \"Perkins\", \"28618\", \"San Marino\" ],\n\t[ \"109\", \"Megan\", \"Maxwell\", \"K6X 3J4\", \"Oman\" ],\n\t[ \"110\", \"Christine\", \"Christensen\", \"M7S 8G8\", \"Netherlands Antilles\" ],\n\t[ \"111\", \"Tanner\", \"Guerra\", \"S3K 6Y5\", \"Finland\" ],\n\t[ \"112\", \"Meghan\", \"Rowland\", \"K7U 3A1\", \"Rwanda\" ],\n\t[ \"113\", \"Patrick\", \"Mitchell\", \"V3F 5C4\", \"Oman\" ],\n\t[ \"114\", \"Jackson\", \"Sanders\", \"83229\", \"Greenland\" ],\n\t[ \"115\", \"Omar\", \"Savage\", \"14082\", \"Korea\" ],\n\t[ \"116\", \"Ulla\", \"Larsen\", \"Q2P 4L8\", \"French Southern Territories\" ],\n\t[ \"117\", \"Hop\", \"Gates\", \"D9G 9J4\", \"Poland\" ],\n\t[ \"118\", \"Astra\", \"Mendoza\", \"R3D 2H9\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"119\", \"Denise\", \"Cardenas\", \"73138\", \"Sao Tome and Principe\" ],\n\t[ \"120\", \"Melodie\", \"Roberts\", \"L1G 4H2\", \"India\" ],\n\t[ \"121\", \"Cedric\", \"Joseph\", \"M4V 8O9\", \"Korea, Republic of\" ],\n\t[ \"122\", \"Linda\", \"Horn\", \"24465\", \"Bosnia and Herzegovina\" ],\n\t[ \"123\", \"Mary\", \"Lyons\", \"22324\", \"Norfolk Island\" ],\n\t[ \"124\", \"Ciara\", \"Mcknight\", \"30784\", \"Anguilla\" ],\n\t[ \"125\", \"Vaughan\", \"Santiago\", \"65037\", \"Guyana\" ],\n\t[ \"126\", \"Lamar\", \"Shepherd\", \"58040\", \"France\" ],\n\t[ \"127\", \"Xavier\", \"Webster\", \"68321\", \"Afghanistan\" ],\n\t[ \"128\", \"Ainsley\", \"Banks\", \"46902\", \"Pakistan\" ],\n\t[ \"129\", \"Alika\", \"Love\", \"L5O 4B3\", \"Iran, Islamic Republic of\" ],\n\t[ \"130\", \"Maite\", \"Dickson\", \"37405\", \"Saint Kitts and Nevis\" ],\n\t[ \"131\", \"Kimberley\", \"Morrow\", \"F7C 7J0\", \"Lebanon\" ],\n\t[ \"132\", \"Eugenia\", \"Stafford\", \"36282\", \"Nicaragua\" ],\n\t[ \"133\", \"Mira\", \"Gill\", \"K1T 8U1\", \"Uruguay\" ],\n\t[ \"134\", \"Herman\", \"Francis\", \"C2G 8G9\", \"Northern Mariana Islands\" ],\n\t[ \"135\", \"Veronica\", \"Peters\", \"74146\", \"Cook Islands\" ],\n\t[ \"136\", \"Axel\", \"Cochran\", \"32240\", \"Central African Republic\" ],\n\t[ \"137\", \"Edan\", \"Howe\", \"51862\", \"Mali\" ],\n\t[ \"138\", \"Ignacia\", \"Bruce\", \"Q8T 5Q1\", \"Sao Tome and Principe\" ],\n\t[ \"139\", \"Jana\", \"Mcguire\", \"89412\", \"Czech Republic\" ],\n\t[ \"140\", \"Alice\", \"Underwood\", \"74535\", \"Slovakia\" ],\n\t[ \"141\", \"Tobias\", \"Kent\", \"33601\", \"South Georgia and The South Sandwich Islands\" ],\n\t[ \"142\", \"Nasim\", \"Coleman\", \"19377\", \"United States Minor Outlying Islands\" ],\n\t[ \"143\", \"Geoffrey\", \"Byers\", \"85753\", \"Netherlands Antilles\" ],\n\t[ \"144\", \"Odette\", \"Sawyer\", \"55418\", \"Tunisia\" ],\n\t[ \"145\", \"Chaney\", \"Flowers\", \"F4W 7O7\", \"Maldives\" ],\n\t[ \"146\", \"Shelly\", \"Glover\", \"M5Y 4A6\", \"Taiwan, Province of China\" ],\n\t[ \"147\", \"Uriel\", \"Thornton\", \"Z6Q 5B7\", \"Myanmar\" ],\n\t[ \"148\", \"Clio\", \"Nicholson\", \"Y8S 7P2\", \"Martinique\" ],\n\t[ \"149\", \"Jana\", \"Foley\", \"B1O 9J5\", \"United Arab Emirates\" ],\n\t[ \"150\", \"Fulton\", \"Rasmussen\", \"39194\", \"Solomon Islands\" ],\n\t[ \"151\", \"Lisandra\", \"Boyd\", \"J2Z 2V7\", \"French Guiana\" ],\n\t[ \"152\", \"Brennan\", \"Lopez\", \"Q4M 7Y4\", \"Burkina Faso\" ],\n\t[ \"153\", \"Martha\", \"Washington\", \"M7S 4U6\", \"Iran, Islamic Republic of\" ],\n\t[ \"154\", \"Dara\", \"Ramos\", \"07799\", \"Portugal\" ],\n\t[ \"155\", \"Virginia\", \"Harris\", \"01246\", \"Bermuda\" ],\n\t[ \"156\", \"Maryam\", \"Patrick\", \"Y3J 4Y0\", \"Rwanda\" ],\n\t[ \"157\", \"Shana\", \"Mullen\", \"61169\", \"Togo\" ],\n\t[ \"158\", \"Rowan\", \"Hahn\", \"K6D 5T4\", \"Guinea-bissau\" ],\n\t[ \"159\", \"Hermione\", \"Shepherd\", \"M4F 7T6\", \"Ireland\" ],\n\t[ \"160\", \"Jada\", \"Bright\", \"P1Z 7E6\", \"French Southern Territories\" ],\n\t[ \"161\", \"Scarlet\", \"Bray\", \"57161\", \"Austria\" ],\n\t[ \"162\", \"Haviva\", \"Conner\", \"M4T 8O4\", \"Bermuda\" ],\n\t[ \"163\", \"Myra\", \"Briggs\", \"Q4B 6L7\", \"Kenya\" ],\n\t[ \"164\", \"Hall\", \"Floyd\", \"40411\", \"Bangladesh\" ],\n\t[ \"165\", \"Kyle\", \"Marquez\", \"J4T 7C6\", \"Djibouti\" ],\n\t[ \"166\", \"Claudia\", \"Long\", \"R7B 1T6\", \"Macedonia\" ],\n\t[ \"167\", \"Hasad\", \"Clemons\", \"94009\", \"Bosnia and Herzegovina\" ],\n\t[ \"168\", \"Kameko\", \"Reeves\", \"G4V 6D5\", \"Singapore\" ],\n\t[ \"169\", \"Angelica\", \"Bailey\", \"Z3Y 7I0\", \"Micronesia\" ],\n\t[ \"170\", \"Shelley\", \"Jennings\", \"O3A 9H0\", \"Christmas Island\" ],\n\t[ \"171\", \"Rafael\", \"Randolph\", \"Y4L 8B5\", \"Germany\" ],\n\t[ \"172\", \"Winter\", \"Kinney\", \"A3K 9A7\", \"Saint Lucia\" ],\n\t[ \"173\", \"Brian\", \"Larsen\", \"53752\", \"Comoros\" ],\n\t[ \"174\", \"Melvin\", \"Cooper\", \"72416\", \"Czech Republic\" ],\n\t[ \"175\", \"Gil\", \"Valencia\", \"95798\", \"Uganda\" ],\n\t[ \"176\", \"Uma\", \"Cummings\", \"84649\", \"Jordan\" ],\n\t[ \"177\", \"Micah\", \"Shannon\", \"H9L 8R6\", \"Ghana\" ],\n\t[ \"178\", \"Ahmed\", \"Weiss\", \"05291\", \"American Samoa\" ],\n\t[ \"179\", \"Hop\", \"Foster\", \"W9C 7J7\", \"Panama\" ],\n\t[ \"180\", \"Todd\", \"Barnett\", \"T9R 7J4\", \"Seychelles\" ],\n\t[ \"181\", \"Byron\", \"Meyers\", \"J4G 9P2\", \"Congo\" ],\n\t[ \"182\", \"Hadassah\", \"Barnett\", \"U1A 8V3\", \"Paraguay\" ],\n\t[ \"183\", \"Hermione\", \"Luna\", \"L4G 2E5\", \"New Zealand\" ],\n\t[ \"184\", \"Marsden\", \"Alvarado\", \"U1V 1Y4\", \"Aruba\" ],\n\t[ \"185\", \"Britanni\", \"Gregory\", \"C8O 2T4\", \"Kazakhstan\" ],\n\t[ \"186\", \"Brenda\", \"Oneil\", \"R9Q 9B7\", \"Gibraltar\" ],\n\t[ \"187\", \"Reuben\", \"Hopkins\", \"C2D 9D0\", \"Bhutan\" ],\n\t[ \"188\", \"Sonia\", \"Sandoval\", \"Y2G 5I0\", \"Guatemala\" ],\n\t[ \"189\", \"Yasir\", \"Holcomb\", \"A1H 6Y3\", \"Angola\" ],\n\t[ \"190\", \"Aristotle\", \"Rosa\", \"51870\", \"Indonesia\" ],\n\t[ \"191\", \"Uriah\", \"Blair\", \"X8K 1B9\", \"Suriname\" ],\n\t[ \"192\", \"Vaughan\", \"Sharp\", \"L2F 5N8\", \"Faroe Islands\" ],\n\t[ \"193\", \"Cooper\", \"Beard\", \"80399\", \"United States Minor Outlying Islands\" ],\n\t[ \"194\", \"Riley\", \"Greene\", \"44728\", \"Russian Federation\" ],\n\t[ \"195\", \"Rashad\", \"Flowers\", \"L6N 8U7\", \"Mongolia\" ],\n\t[ \"196\", \"Yvonne\", \"Wilson\", \"18599\", \"Svalbard and Jan Mayen\" ],\n\t[ \"197\", \"Martena\", \"Ayers\", \"A8Z 5F7\", \"Oman\" ],\n\t[ \"198\", \"Eagan\", \"Cline\", \"T9P 4L4\", \"Solomon Islands\" ],\n\t[ \"199\", \"Dawn\", \"Carrillo\", \"T6O 6E5\", \"Malawi\" ],\n\t[ \"200\", \"Ali\", \"Singleton\", \"G6F 3B4\", \"Italy\" ],\n\t[ \"201\", \"Christopher\", \"Beach\", \"01655\", \"Palau\" ],\n\t[ \"202\", \"Emma\", \"Cummings\", \"W1B 4R6\", \"Dominica\" ],\n\t[ \"203\", \"Ishmael\", \"Gray\", \"76928\", \"Egypt\" ],\n\t[ \"204\", \"Megan\", \"Hines\", \"F7X 2X5\", \"New Zealand\" ],\n\t[ \"205\", \"Emmanuel\", \"Steele\", \"09729\", \"Netherlands\" ],\n\t[ \"206\", \"Alea\", \"Burris\", \"08485\", \"Guatemala\" ],\n\t[ \"207\", \"Martina\", \"Todd\", \"46863\", \"Christmas Island\" ],\n\t[ \"208\", \"Len\", \"Valentine\", \"S6Z 5S8\", \"Slovenia\" ],\n\t[ \"209\", \"Jorden\", \"Salazar\", \"U4D 8H6\", \"Austria\" ],\n\t[ \"210\", \"Yvette\", \"Bradford\", \"17275\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"211\", \"Elvis\", \"Mcmahon\", \"27586\", \"Marshall Islands\" ],\n\t[ \"212\", \"Gray\", \"Bonner\", \"N4V 3U9\", \"Moldova\" ],\n\t[ \"213\", \"Yoshi\", \"Singleton\", \"86603\", \"United Kingdom\" ],\n\t[ \"214\", \"Amena\", \"Burks\", \"93820\", \"Reunion\" ],\n\t[ \"215\", \"Ocean\", \"Maldonado\", \"72026\", \"Ireland\" ],\n\t[ \"216\", \"Allen\", \"Foley\", \"75363\", \"Kiribati\" ],\n\t[ \"217\", \"Duncan\", \"Jimenez\", \"H3H 3G6\", \"Oman\" ],\n\t[ \"218\", \"Ira\", \"Maxwell\", \"53136\", \"French Polynesia\" ],\n\t[ \"219\", \"Astra\", \"Moon\", \"D7W 8G2\", \"Dominican Republic\" ],\n\t[ \"220\", \"Orson\", \"Myers\", \"06049\", \"Mali\" ],\n\t[ \"221\", \"Brandon\", \"Estes\", \"D2B 7P2\", \"Kenya\" ],\n\t[ \"222\", \"Halee\", \"Luna\", \"54733\", \"Moldova\" ],\n\t[ \"223\", \"Jillian\", \"Gonzalez\", \"E8W 3L9\", \"Ecuador\" ],\n\t[ \"224\", \"Julie\", \"Acosta\", \"X7M 1T2\", \"Equatorial Guinea\" ],\n\t[ \"225\", \"Quemby\", \"Foster\", \"48596\", \"Eritrea\" ],\n\t[ \"226\", \"Erich\", \"Chavez\", \"W4P 7G8\", \"Mayotte\" ],\n\t[ \"227\", \"Roary\", \"Mcknight\", \"K9K 2K4\", \"Chile\" ],\n\t[ \"228\", \"Mufutau\", \"Henderson\", \"81377\", \"Mayotte\" ],\n\t[ \"229\", \"Herman\", \"Ferguson\", \"69405\", \"Japan\" ],\n\t[ \"230\", \"Abdul\", \"Franks\", \"L1V 8X2\", \"Portugal\" ],\n\t[ \"231\", \"Dominic\", \"Logan\", \"98770\", \"Saint Lucia\" ],\n\t[ \"232\", \"Isadora\", \"Solis\", \"Y3A 6H5\", \"Portugal\" ],\n\t[ \"233\", \"Lester\", \"Davis\", \"30339\", \"British Indian Ocean Territory\" ],\n\t[ \"234\", \"Joel\", \"Rojas\", \"N8E 5T9\", \"Bahrain\" ],\n\t[ \"235\", \"Quinlan\", \"Carroll\", \"55785\", \"Australia\" ],\n\t[ \"236\", \"Guinevere\", \"Pickett\", \"A7Y 3V3\", \"Netherlands Antilles\" ],\n\t[ \"237\", \"Nita\", \"Hopkins\", \"88370\", \"Albania\" ],\n\t[ \"238\", \"Hayley\", \"Buckley\", \"F1V 7P5\", \"Togo\" ],\n\t[ \"239\", \"Colorado\", \"Reyes\", \"18798\", \"Congo\" ],\n\t[ \"240\", \"Tashya\", \"Bartlett\", \"48537\", \"Sierra Leone\" ],\n\t[ \"241\", \"Isabella\", \"Keith\", \"48878\", \"Kiribati\" ],\n\t[ \"242\", \"Jessica\", \"Noble\", \"D6C 9T9\", \"Svalbard and Jan Mayen\" ],\n\t[ \"243\", \"Cairo\", \"Edwards\", \"40598\", \"Nepal\" ],\n\t[ \"244\", \"Camille\", \"Bradley\", \"I4U 8F6\", \"Fiji\" ],\n\t[ \"245\", \"Quin\", \"Mcgee\", \"O5D 2P0\", \"Poland\" ],\n\t[ \"246\", \"Rina\", \"Guzman\", \"44940\", \"Bahrain\" ],\n\t[ \"247\", \"Glenna\", \"Kirkland\", \"Z1L 4W2\", \"San Marino\" ],\n\t[ \"248\", \"Tarik\", \"Todd\", \"77228\", \"Turks and Caicos Islands\" ],\n\t[ \"249\", \"Yardley\", \"Burris\", \"M6U 9D7\", \"New Caledonia\" ],\n\t[ \"250\", \"Hashim\", \"Casey\", \"17722\", \"Lesotho\" ],\n\t[ \"251\", \"Maggie\", \"Raymond\", \"62540\", \"Uganda\" ],\n\t[ \"252\", \"Christian\", \"Mcdonald\", \"R8K 2M1\", \"United Arab Emirates\" ],\n\t[ \"253\", \"Colt\", \"Cobb\", \"75393\", \"Moldova\" ],\n\t[ \"254\", \"Aline\", \"Graves\", \"I1C 9I6\", \"Holy See (Vatican City State)\" ],\n\t[ \"255\", \"Farrah\", \"Cannon\", \"H5W 2Y0\", \"Bhutan\" ],\n\t[ \"256\", \"Wynne\", \"Ayers\", \"B6X 6Y8\", \"Western Sahara\" ],\n\t[ \"257\", \"Teegan\", \"Avery\", \"33643\", \"San Marino\" ],\n\t[ \"258\", \"Shana\", \"Sloan\", \"K9P 9V7\", \"Gabon\" ],\n\t[ \"259\", \"Britanney\", \"Cook\", \"Y5D 6K7\", \"Romania\" ],\n\t[ \"260\", \"Kuame\", \"Schroeder\", \"12859\", \"Syrian Arab Republic\" ],\n\t[ \"261\", \"Valentine\", \"Joseph\", \"P2S 6T6\", \"Mayotte\" ],\n\t[ \"262\", \"Joelle\", \"Keller\", \"U6F 3T7\", \"Fiji\" ],\n\t[ \"263\", \"Elaine\", \"Hickman\", \"28056\", \"Tuvalu\" ],\n\t[ \"264\", \"Ivor\", \"Malone\", \"H2Z 5X5\", \"Virgin Islands, British\" ],\n\t[ \"265\", \"Maris\", \"Jefferson\", \"12474\", \"Czech Republic\" ],\n\t[ \"266\", \"Josephine\", \"Zimmerman\", \"Z5J 2I4\", \"Angola\" ],\n\t[ \"267\", \"Baker\", \"Wooten\", \"X4K 2L8\", \"Austria\" ],\n\t[ \"268\", \"Alyssa\", \"Mitchell\", \"97712\", \"Antarctica\" ],\n\t[ \"269\", \"Carlos\", \"Pearson\", \"85838\", \"Gambia\" ],\n\t[ \"270\", \"Luke\", \"Richardson\", \"73867\", \"Christmas Island\" ],\n\t[ \"271\", \"Davis\", \"Gardner\", \"U2E 4D9\", \"Chile\" ],\n\t[ \"272\", \"Thomas\", \"Conner\", \"92487\", \"Mozambique\" ],\n\t[ \"273\", \"Kieran\", \"Baird\", \"X9G 6G1\", \"Iceland\" ],\n\t[ \"274\", \"Cheyenne\", \"Morris\", \"F5V 4S2\", \"Greece\" ],\n\t[ \"275\", \"Hillary\", \"Reeves\", \"89804\", \"Slovakia\" ],\n\t[ \"276\", \"Ryder\", \"Long\", \"32725\", \"New Caledonia\" ],\n\t[ \"277\", \"Ariel\", \"Colon\", \"50675\", \"Estonia\" ],\n\t[ \"278\", \"Vanna\", \"Hess\", \"79057\", \"Saudi Arabia\" ],\n\t[ \"279\", \"Hayley\", \"Cherry\", \"B5E 9X4\", \"United States Minor Outlying Islands\" ],\n\t[ \"280\", \"Knox\", \"Blair\", \"75626\", \"Central African Republic\" ],\n\t[ \"281\", \"Astra\", \"Mcdaniel\", \"24493\", \"Bermuda\" ],\n\t[ \"282\", \"Teegan\", \"Ford\", \"A8U 1K9\", \"Iran, Islamic Republic of\" ],\n\t[ \"283\", \"Harrison\", \"Jackson\", \"43519\", \"Marshall Islands\" ],\n\t[ \"284\", \"Melyssa\", \"Lawson\", \"O7E 8E6\", \"Belize\" ],\n\t[ \"285\", \"Shaine\", \"Francis\", \"Q5K 5I4\", \"India\" ],\n\t[ \"286\", \"August\", \"Reed\", \"S9R 1O8\", \"Ghana\" ],\n\t[ \"287\", \"Aphrodite\", \"Zimmerman\", \"28336\", \"Lesotho\" ],\n\t[ \"288\", \"Declan\", \"Walters\", \"08662\", \"Rwanda\" ],\n\t[ \"289\", \"Brody\", \"Pate\", \"G2G 9D9\", \"Serbia and Montenegro\" ],\n\t[ \"290\", \"Bradley\", \"Odom\", \"L2R 6Z9\", \"Jordan\" ],\n\t[ \"291\", \"Phillip\", \"Cleveland\", \"E4D 1B7\", \"Paraguay\" ],\n\t[ \"292\", \"Silas\", \"Wiggins\", \"F9F 5X3\", \"Bahrain\" ],\n\t[ \"293\", \"Keely\", \"Donaldson\", \"B5H 7F2\", \"Vanuatu\" ],\n\t[ \"294\", \"Hammett\", \"Lancaster\", \"H2P 4E6\", \"Svalbard and Jan Mayen\" ],\n\t[ \"295\", \"Kiara\", \"Clarke\", \"50885\", \"Thailand\" ],\n\t[ \"296\", \"Ayanna\", \"Wiley\", \"20773\", \"Morocco\" ],\n\t[ \"297\", \"Tashya\", \"Stanley\", \"F5J 5R9\", \"New Caledonia\" ],\n\t[ \"298\", \"Margaret\", \"Barker\", \"J5A 9N8\", \"Marshall Islands\" ],\n\t[ \"299\", \"Xandra\", \"English\", \"92299\", \"Korea, Republic of\" ],\n\t[ \"300\", \"Jane\", \"Brock\", \"86140\", \"Yemen\" ],\n\t[ \"301\", \"Lunea\", \"Garrett\", \"96730\", \"New Caledonia\" ],\n\t[ \"302\", \"Slade\", \"Everett\", \"16105\", \"Malawi\" ],\n\t[ \"303\", \"Scott\", \"Booker\", \"G8V 2R4\", \"Macedonia\" ],\n\t[ \"304\", \"Candice\", \"Decker\", \"E5R 2D4\", \"China\" ],\n\t[ \"305\", \"Armando\", \"Bridges\", \"87959\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"306\", \"Clayton\", \"Whitley\", \"Q6O 4M7\", \"British Indian Ocean Territory\" ],\n\t[ \"307\", \"Driscoll\", \"Duncan\", \"M2J 9V5\", \"Argentina\" ],\n\t[ \"308\", \"Devin\", \"Stafford\", \"L8F 2V7\", \"Svalbard and Jan Mayen\" ],\n\t[ \"309\", \"Bell\", \"York\", \"E5B 7X5\", \"Lebanon\" ],\n\t[ \"310\", \"Haley\", \"Becker\", \"19759\", \"Bhutan\" ],\n\t[ \"311\", \"Chava\", \"Santiago\", \"04396\", \"Israel\" ],\n\t[ \"312\", \"David\", \"Mccall\", \"62087\", \"Norfolk Island\" ],\n\t[ \"313\", \"Clinton\", \"Jacobson\", \"06168\", \"Guam\" ],\n\t[ \"314\", \"Melvin\", \"Kaufman\", \"C4E 9N6\", \"Gambia\" ],\n\t[ \"315\", \"Dai\", \"Shepherd\", \"37490\", \"Saudi Arabia\" ],\n\t[ \"316\", \"Zahir\", \"Chase\", \"44340\", \"Turkey\" ],\n\t[ \"317\", \"Leilani\", \"Parrish\", \"62576\", \"Cocos (Keeling) Islands\" ],\n\t[ \"318\", \"Oleg\", \"Wilkins\", \"Z7S 8Z4\", \"Latvia\" ],\n\t[ \"319\", \"Pearl\", \"Pena\", \"82526\", \"Saudi Arabia\" ],\n\t[ \"320\", \"Kelly\", \"Moody\", \"W7U 5Y3\", \"Burundi\" ],\n\t[ \"321\", \"Marcia\", \"Kennedy\", \"85952\", \"Panama\" ],\n\t[ \"322\", \"Cailin\", \"Burnett\", \"M2Z 3L5\", \"Guyana\" ],\n\t[ \"323\", \"Ciara\", \"Small\", \"X6C 6M6\", \"Tanzania, United Republic of\" ],\n\t[ \"324\", \"Lillian\", \"Massey\", \"Z8A 5U5\", \"Algeria\" ],\n\t[ \"325\", \"Garrett\", \"Elliott\", \"R5P 6T0\", \"Canada\" ],\n\t[ \"326\", \"Inga\", \"Daniels\", \"40156\", \"Cocos (Keeling) Islands\" ],\n\t[ \"327\", \"Barry\", \"Pena\", \"03593\", \"Tonga\" ],\n\t[ \"328\", \"Penelope\", \"Mcintyre\", \"29293\", \"Burkina Faso\" ],\n\t[ \"329\", \"Dante\", \"Kirk\", \"74038\", \"Lesotho\" ],\n\t[ \"330\", \"Owen\", \"Cole\", \"17968\", \"Rwanda\" ],\n\t[ \"331\", \"Brittany\", \"Edwards\", \"24507\", \"Paraguay\" ],\n\t[ \"332\", \"Zeph\", \"Bentley\", \"12000\", \"Guam\" ],\n\t[ \"333\", \"Ruth\", \"Palmer\", \"E8V 9A5\", \"Ghana\" ],\n\t[ \"334\", \"Driscoll\", \"Ellis\", \"X1X 2N5\", \"Angola\" ],\n\t[ \"335\", \"Mohammad\", \"Guerra\", \"Y9N 3Y5\", \"Mongolia\" ],\n\t[ \"336\", \"Clio\", \"Baldwin\", \"67557\", \"Morocco\" ],\n\t[ \"337\", \"Virginia\", \"Duncan\", \"J8D 4T2\", \"Haiti\" ],\n\t[ \"338\", \"Dieter\", \"Sanchez\", \"H7E 2H4\", \"Romania\" ],\n\t[ \"339\", \"Quinn\", \"Hurst\", \"K4E 2X6\", \"Reunion\" ],\n\t[ \"340\", \"Coby\", \"Kelly\", \"S1H 8N0\", \"Equatorial Guinea\" ],\n\t[ \"341\", \"Raja\", \"Solis\", \"S5G 9T5\", \"Grenada\" ],\n\t[ \"342\", \"Jordan\", \"Riddle\", \"J7M 5X3\", \"Svalbard and Jan Mayen\" ],\n\t[ \"343\", \"Dora\", \"Knox\", \"25054\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"344\", \"Brendan\", \"Reilly\", \"U9U 3F7\", \"Armenia\" ],\n\t[ \"345\", \"Melyssa\", \"Reyes\", \"11285\", \"Viet Nam\" ],\n\t[ \"346\", \"Knox\", \"Rivera\", \"N8Z 7J0\", \"Nepal\" ],\n\t[ \"347\", \"Quynn\", \"Irwin\", \"26524\", \"Chile\" ],\n\t[ \"348\", \"Colin\", \"Coleman\", \"22833\", \"United Arab Emirates\" ],\n\t[ \"349\", \"Sybil\", \"Delgado\", \"99947\", \"Belize\" ],\n\t[ \"350\", \"Macaulay\", \"Salinas\", \"48521\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"351\", \"Garrison\", \"Hogan\", \"68950\", \"India\" ],\n\t[ \"352\", \"Ronan\", \"Guerra\", \"55445\", \"Angola\" ],\n\t[ \"353\", \"Regina\", \"Andrews\", \"H3E 3T0\", \"Central African Republic\" ],\n\t[ \"354\", \"Colorado\", \"Joyce\", \"V6X 5K8\", \"Anguilla\" ],\n\t[ \"355\", \"Basia\", \"Banks\", \"85049\", \"Grenada\" ],\n\t[ \"356\", \"Adena\", \"Berg\", \"04135\", \"New Caledonia\" ],\n\t[ \"357\", \"Wade\", \"Richardson\", \"C8M 9J3\", \"Dominican Republic\" ],\n\t[ \"358\", \"Cody\", \"Montoya\", \"22018\", \"Solomon Islands\" ],\n\t[ \"359\", \"Faith\", \"Barnett\", \"61475\", \"China\" ],\n\t[ \"360\", \"Cody\", \"Witt\", \"C8I 2Q8\", \"Congo\" ],\n\t[ \"361\", \"Brenden\", \"Carlson\", \"74007\", \"Marshall Islands\" ],\n\t[ \"362\", \"Gil\", \"Brooks\", \"U4S 5N1\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"363\", \"Kirestin\", \"Watts\", \"H8I 1D5\", \"Myanmar\" ],\n\t[ \"364\", \"Amelia\", \"Gilliam\", \"11461\", \"Chile\" ],\n\t[ \"365\", \"Noelani\", \"Rhodes\", \"83320\", \"Cuba\" ],\n\t[ \"366\", \"Len\", \"Trevino\", \"W9F 2U5\", \"Armenia\" ],\n\t[ \"367\", \"Galvin\", \"Middleton\", \"86707\", \"Thailand\" ],\n\t[ \"368\", \"Germaine\", \"Bridges\", \"90283\", \"Japan\" ],\n\t[ \"369\", \"Rose\", \"Hines\", \"W7L 7Q6\", \"Congo\" ],\n\t[ \"370\", \"Hop\", \"Mueller\", \"I3E 2X8\", \"Angola\" ],\n\t[ \"371\", \"Iliana\", \"Williamson\", \"56758\", \"Lebanon\" ],\n\t[ \"372\", \"Raja\", \"Price\", \"49603\", \"Armenia\" ],\n\t[ \"373\", \"Jeanette\", \"Hatfield\", \"E3K 5N5\", \"India\" ],\n\t[ \"374\", \"Brittany\", \"Christensen\", \"04750\", \"Uruguay\" ],\n\t[ \"375\", \"Inga\", \"Prince\", \"D4X 6J5\", \"Switzerland\" ],\n\t[ \"376\", \"Cherokee\", \"Ballard\", \"U1O 1M0\", \"Rwanda\" ],\n\t[ \"377\", \"Deirdre\", \"Watson\", \"46983\", \"Sri Lanka\" ],\n\t[ \"378\", \"Amanda\", \"Parrish\", \"99838\", \"Hong Kong\" ],\n\t[ \"379\", \"Leo\", \"Shannon\", \"L3N 3J0\", \"Brunei Darussalam\" ],\n\t[ \"380\", \"Kimberly\", \"Clemons\", \"88734\", \"South Africa\" ],\n\t[ \"381\", \"Seth\", \"Langley\", \"D6A 1Q9\", \"Guyana\" ],\n\t[ \"382\", \"Carol\", \"Blankenship\", \"X5N 2A7\", \"Angola\" ],\n\t[ \"383\", \"Dora\", \"Flores\", \"F8F 1O5\", \"Poland\" ],\n\t[ \"384\", \"Chava\", \"Dickson\", \"P8B 6W6\", \"Comoros\" ],\n\t[ \"385\", \"Trevor\", \"Mcdowell\", \"31382\", \"Solomon Islands\" ],\n\t[ \"386\", \"Alec\", \"Valentine\", \"P2R 4K7\", \"Greenland\" ],\n\t[ \"387\", \"Philip\", \"Jenkins\", \"Q7X 5U5\", \"Aruba\" ],\n\t[ \"388\", \"Kim\", \"Bowen\", \"69873\", \"Saint Kitts and Nevis\" ],\n\t[ \"389\", \"Allegra\", \"Oconnor\", \"X3Y 1X3\", \"Holy See (Vatican City State)\" ],\n\t[ \"390\", \"Daria\", \"Briggs\", \"A7Z 7P4\", \"Serbia and Montenegro\" ],\n\t[ \"391\", \"Amelia\", \"Wiley\", \"D4S 1G5\", \"Montserrat\" ],\n\t[ \"392\", \"Erica\", \"Aguirre\", \"H5L 2O3\", \"Andorra\" ],\n\t[ \"393\", \"Kibo\", \"Sawyer\", \"30638\", \"Guyana\" ],\n\t[ \"394\", \"Jackson\", \"Meyers\", \"P4N 9D6\", \"Bangladesh\" ],\n\t[ \"395\", \"Kirk\", \"Baxter\", \"F3M 7S6\", \"Estonia\" ],\n\t[ \"396\", \"Sybil\", \"Christian\", \"B3Q 2X0\", \"South Georgia and The South Sandwich Islands\" ],\n\t[ \"397\", \"Ina\", \"Mercer\", \"N4S 1K8\", \"Korea\" ],\n\t[ \"398\", \"Kiara\", \"Whitehead\", \"86023\", \"Nicaragua\" ],\n\t[ \"399\", \"Vielka\", \"Hays\", \"29845\", \"Malta\" ],\n\t[ \"400\", \"Stacey\", \"Carlson\", \"53218\", \"Cook Islands\" ],\n\t[ \"401\", \"Selma\", \"Lloyd\", \"78256\", \"Turkey\" ],\n\t[ \"402\", \"Rhoda\", \"Mcintosh\", \"G8X 1C8\", \"Guatemala\" ],\n\t[ \"403\", \"Teagan\", \"Ochoa\", \"99752\", \"Barbados\" ],\n\t[ \"404\", \"Rebecca\", \"Carver\", \"82661\", \"Saint Kitts and Nevis\" ],\n\t[ \"405\", \"Yael\", \"Woodward\", \"66095\", \"Niger\" ],\n\t[ \"406\", \"Calvin\", \"Huffman\", \"82172\", \"Somalia\" ],\n\t[ \"407\", \"Sopoline\", \"Walters\", \"K5L 3I7\", \"Spain\" ],\n\t[ \"408\", \"Hollee\", \"Powell\", \"05572\", \"Samoa\" ],\n\t[ \"409\", \"Fiona\", \"Frank\", \"74456\", \"Timor-leste\" ],\n\t[ \"410\", \"Alana\", \"Hubbard\", \"76011\", \"Lithuania\" ],\n\t[ \"411\", \"Lillian\", \"Garcia\", \"J5Z 2O5\", \"Sierra Leone\" ],\n\t[ \"412\", \"Tad\", \"Mcleod\", \"B6A 8Z4\", \"Australia\" ],\n\t[ \"413\", \"Hadassah\", \"Hall\", \"47417\", \"China\" ],\n\t[ \"414\", \"Regan\", \"Summers\", \"X4L 4I6\", \"Honduras\" ],\n\t[ \"415\", \"Herrod\", \"Erickson\", \"R8G 3V0\", \"Israel\" ],\n\t[ \"416\", \"Autumn\", \"Rojas\", \"31205\", \"Cocos (Keeling) Islands\" ],\n\t[ \"417\", \"Castor\", \"Mooney\", \"92737\", \"Grenada\" ],\n\t[ \"418\", \"Wesley\", \"Holman\", \"57125\", \"Greenland\" ],\n\t[ \"419\", \"Kitra\", \"Wooten\", \"Q6X 4Y0\", \"Mongolia\" ],\n\t[ \"420\", \"Buckminster\", \"Rice\", \"U8B 7B8\", \"Tokelau\" ],\n\t[ \"421\", \"Xavier\", \"Hardin\", \"18280\", \"Iran, Islamic Republic of\" ],\n\t[ \"422\", \"Sopoline\", \"Fleming\", \"78437\", \"Singapore\" ],\n\t[ \"423\", \"Sydney\", \"Salinas\", \"23801\", \"Cook Islands\" ],\n\t[ \"424\", \"Bethany\", \"Rosales\", \"89650\", \"United States\" ],\n\t[ \"425\", \"Deirdre\", \"Hensley\", \"F3X 1B7\", \"Micronesia\" ],\n\t[ \"426\", \"Bernard\", \"Vargas\", \"S4D 9T0\", \"Uzbekistan\" ],\n\t[ \"427\", \"Merrill\", \"Compton\", \"17713\", \"Suriname\" ],\n\t[ \"428\", \"Carly\", \"Baird\", \"D3H 5G3\", \"United States Minor Outlying Islands\" ],\n\t[ \"429\", \"Grace\", \"Phelps\", \"64695\", \"Nauru\" ],\n\t[ \"430\", \"Kareem\", \"Stone\", \"65572\", \"Netherlands\" ],\n\t[ \"431\", \"Susan\", \"Newton\", \"04627\", \"Anguilla\" ],\n\t[ \"432\", \"Laura\", \"Miranda\", \"E1G 2R7\", \"Finland\" ],\n\t[ \"433\", \"Madaline\", \"Pugh\", \"J9A 9M5\", \"Senegal\" ],\n\t[ \"434\", \"Sophia\", \"Mendez\", \"33789\", \"Timor-leste\" ],\n\t[ \"435\", \"Roary\", \"Greene\", \"61774\", \"Canada\" ],\n\t[ \"436\", \"Amos\", \"Gilliam\", \"94933\", \"Sri Lanka\" ],\n\t[ \"437\", \"Ivory\", \"Joyner\", \"15379\", \"San Marino\" ],\n\t[ \"438\", \"Jorden\", \"Robbins\", \"43400\", \"Russian Federation\" ],\n\t[ \"439\", \"Merritt\", \"Holcomb\", \"R1I 3C7\", \"Brazil\" ],\n\t[ \"440\", \"Iliana\", \"Johnston\", \"U9W 8N2\", \"Trinidad and Tobago\" ],\n\t[ \"441\", \"Ivana\", \"Patterson\", \"G5O 6A5\", \"Georgia\" ],\n\t[ \"442\", \"Sydney\", \"Mccullough\", \"W9M 2H5\", \"American Samoa\" ],\n\t[ \"443\", \"Alvin\", \"Fulton\", \"X8A 8R5\", \"Antigua and Barbuda\" ],\n\t[ \"444\", \"Alfreda\", \"Lopez\", \"42499\", \"Montserrat\" ],\n\t[ \"445\", \"Ethan\", \"Bird\", \"W9A 8M1\", \"British Indian Ocean Territory\" ],\n\t[ \"446\", \"Zeus\", \"Logan\", \"01682\", \"San Marino\" ],\n\t[ \"447\", \"Nehru\", \"Andrews\", \"W8J 3C8\", \"Dominican Republic\" ],\n\t[ \"448\", \"Donna\", \"Booth\", \"64754\", \"Nepal\" ],\n\t[ \"449\", \"Cruz\", \"Bruce\", \"17429\", \"Burundi\" ],\n\t[ \"450\", \"Ronan\", \"Saunders\", \"69957\", \"South Africa\" ],\n\t[ \"451\", \"Jordan\", \"Barnes\", \"D8K 9L8\", \"Dominica\" ],\n\t[ \"452\", \"Carly\", \"Love\", \"D8Z 3P4\", \"Mauritania\" ],\n\t[ \"453\", \"Mari\", \"George\", \"60260\", \"Japan\" ],\n\t[ \"454\", \"Karly\", \"Hodges\", \"15790\", \"South Georgia and The South Sandwich Islands\" ],\n\t[ \"455\", \"Rana\", \"Logan\", \"M1R 6Y6\", \"Bosnia and Herzegovina\" ],\n\t[ \"456\", \"Theodore\", \"Sims\", \"C7A 8T2\", \"Barbados\" ],\n\t[ \"457\", \"Quin\", \"Thompson\", \"26884\", \"Bouvet Island\" ],\n\t[ \"458\", \"Kimberley\", \"Sloan\", \"S5T 8E3\", \"Costa Rica\" ],\n\t[ \"459\", \"Upton\", \"Valenzuela\", \"Z6J 6Q1\", \"Macao\" ],\n\t[ \"460\", \"Clinton\", \"Williams\", \"Z3O 7C4\", \"Germany\" ],\n\t[ \"461\", \"Samson\", \"Mathis\", \"G1T 1V9\", \"Senegal\" ],\n\t[ \"462\", \"Michelle\", \"Frost\", \"87113\", \"Serbia and Montenegro\" ],\n\t[ \"463\", \"Tyrone\", \"Coffey\", \"80705\", \"Albania\" ],\n\t[ \"464\", \"Alea\", \"Delaney\", \"E4S 4K4\", \"Guyana\" ],\n\t[ \"465\", \"Dominique\", \"Schwartz\", \"81368\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"466\", \"Benedict\", \"Norton\", \"D1C 9C8\", \"Cyprus\" ],\n\t[ \"467\", \"Vaughan\", \"Stein\", \"R7K 1L8\", \"Egypt\" ],\n\t[ \"468\", \"Charles\", \"Foley\", \"20434\", \"Anguilla\" ],\n\t[ \"469\", \"Arden\", \"Ramos\", \"54065\", \"Gibraltar\" ],\n\t[ \"470\", \"Dillon\", \"Patel\", \"L6H 1H6\", \"Liberia\" ],\n\t[ \"471\", \"Gretchen\", \"Davenport\", \"57188\", \"Equatorial Guinea\" ],\n\t[ \"472\", \"Ivy\", \"Randall\", \"52617\", \"Costa Rica\" ],\n\t[ \"473\", \"Brett\", \"Baird\", \"45791\", \"Hungary\" ],\n\t[ \"474\", \"Wyoming\", \"Sparks\", \"11266\", \"Luxembourg\" ],\n\t[ \"475\", \"Rashad\", \"Roy\", \"47012\", \"Guam\" ],\n\t[ \"476\", \"Sopoline\", \"Le\", \"M1G 2P8\", \"United Arab Emirates\" ],\n\t[ \"477\", \"Ursa\", \"Haynes\", \"53774\", \"British Indian Ocean Territory\" ],\n\t[ \"478\", \"Maia\", \"Vincent\", \"26773\", \"New Caledonia\" ],\n\t[ \"479\", \"Salvador\", \"Pace\", \"S9E 2C4\", \"Egypt\" ],\n\t[ \"480\", \"Bethany\", \"Wilcox\", \"F2H 7N0\", \"Uzbekistan\" ],\n\t[ \"481\", \"Sara\", \"Brooks\", \"08176\", \"Holy See (Vatican City State)\" ],\n\t[ \"482\", \"Lillith\", \"Sampson\", \"75576\", \"British Indian Ocean Territory\" ],\n\t[ \"483\", \"Brynne\", \"Browning\", \"N4K 7P6\", \"Peru\" ],\n\t[ \"484\", \"Beck\", \"Tran\", \"06815\", \"Cambodia\" ],\n\t[ \"485\", \"Peter\", \"Hurley\", \"05770\", \"Rwanda\" ],\n\t[ \"486\", \"Buffy\", \"Sharpe\", \"H8F 8G6\", \"Georgia\" ],\n\t[ \"487\", \"Harrison\", \"Cross\", \"Y1A 1R8\", \"United Kingdom\" ],\n\t[ \"488\", \"Ursa\", \"Wolf\", \"J8C 9Q8\", \"French Polynesia\" ],\n\t[ \"489\", \"Nayda\", \"Vasquez\", \"05523\", \"Taiwan, Province of China\" ],\n\t[ \"490\", \"Gretchen\", \"Walters\", \"28628\", \"Seychelles\" ],\n\t[ \"491\", \"Adrian\", \"Hickman\", \"17956\", \"El Salvador\" ],\n\t[ \"492\", \"Laura\", \"Moon\", \"32103\", \"Myanmar\" ],\n\t[ \"493\", \"Kellie\", \"Barnett\", \"L5Z 2U8\", \"Saint Helena\" ],\n\t[ \"494\", \"Illana\", \"Stanton\", \"Z5D 2G0\", \"Australia\" ],\n\t[ \"495\", \"Jescie\", \"Santiago\", \"D9L 4B5\", \"Cambodia\" ],\n\t[ \"496\", \"Laura\", \"Hopkins\", \"X6V 9S5\", \"Netherlands Antilles\" ],\n\t[ \"497\", \"Vielka\", \"Harding\", \"U6A 9T2\", \"Cambodia\" ],\n\t[ \"498\", \"Walter\", \"Gentry\", \"L3X 9Q9\", \"Slovenia\" ],\n\t[ \"499\", \"Sara\", \"Atkinson\", \"67146\", \"Guinea\" ],\n\t[ \"500\", \"Yolanda\", \"Chambers\", \"Q8D 3W0\", \"Zimbabwe\" ],\n\t[ \"501\", \"Josiah\", \"Villarreal\", \"I1V 6Y7\", \"Burkina Faso\" ],\n\t[ \"502\", \"Hayfa\", \"Bowman\", \"77148\", \"Saudi Arabia\" ],\n\t[ \"503\", \"Colette\", \"Conley\", \"41232\", \"Estonia\" ],\n\t[ \"504\", \"Lana\", \"Doyle\", \"32962\", \"Cuba\" ],\n\t[ \"505\", \"Keegan\", \"Goodwin\", \"M2P 1X3\", \"Cocos (Keeling) Islands\" ],\n\t[ \"506\", \"Nina\", \"Cross\", \"49580\", \"Germany\" ],\n\t[ \"507\", \"Xenos\", \"Cervantes\", \"K6X 7W8\", \"Mauritius\" ],\n\t[ \"508\", \"Jared\", \"Hester\", \"30156\", \"Uzbekistan\" ],\n\t[ \"509\", \"Damon\", \"Curry\", \"U2J 2D8\", \"Pitcairn\" ],\n\t[ \"510\", \"Amery\", \"Savage\", \"O1S 2Z4\", \"Turkmenistan\" ],\n\t[ \"511\", \"Brian\", \"Wilkinson\", \"J6O 4T0\", \"Luxembourg\" ],\n\t[ \"512\", \"Ivory\", \"Mckinney\", \"L3E 8M2\", \"Lithuania\" ],\n\t[ \"513\", \"Eric\", \"Dalton\", \"Y1L 6F4\", \"Ethiopia\" ],\n\t[ \"514\", \"Brandon\", \"Callahan\", \"K6Q 9B4\", \"Haiti\" ],\n\t[ \"515\", \"Phillip\", \"Mclean\", \"18836\", \"Ethiopia\" ],\n\t[ \"516\", \"Carly\", \"Greer\", \"16811\", \"Mayotte\" ],\n\t[ \"517\", \"Stone\", \"Ware\", \"58795\", \"Moldova\" ],\n\t[ \"518\", \"Xena\", \"Hayden\", \"97158\", \"Chad\" ],\n\t[ \"519\", \"Catherine\", \"Leonard\", \"77868\", \"Azerbaijan\" ],\n\t[ \"520\", \"Bernard\", \"Horton\", \"04270\", \"Yemen\" ],\n\t[ \"521\", \"Olga\", \"Richmond\", \"89169\", \"Lebanon\" ],\n\t[ \"522\", \"Iris\", \"Cummings\", \"78836\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"523\", \"Beau\", \"Mccall\", \"78638\", \"Monaco\" ],\n\t[ \"524\", \"Michael\", \"Humphrey\", \"Q1A 2W9\", \"Tokelau\" ],\n\t[ \"525\", \"Oren\", \"Stevens\", \"F4V 9G7\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"526\", \"Ima\", \"Shelton\", \"19295\", \"Mozambique\" ],\n\t[ \"527\", \"Merritt\", \"Morrison\", \"K6W 5R0\", \"Georgia\" ],\n\t[ \"528\", \"Vera\", \"Cherry\", \"54993\", \"Angola\" ],\n\t[ \"529\", \"Grant\", \"Turner\", \"B4V 2J0\", \"Saint Helena\" ],\n\t[ \"530\", \"Odette\", \"Snyder\", \"N9L 2V8\", \"Chad\" ],\n\t[ \"531\", \"Uma\", \"Stewart\", \"E9A 6X9\", \"Bhutan\" ],\n\t[ \"532\", \"Kylee\", \"Best\", \"11393\", \"Malaysia\" ],\n\t[ \"533\", \"Nicholas\", \"Mercado\", \"85179\", \"Switzerland\" ],\n\t[ \"534\", \"Nathaniel\", \"Stuart\", \"M1Q 6Z6\", \"Mongolia\" ],\n\t[ \"535\", \"Ruth\", \"Conrad\", \"T7G 9V6\", \"Guadeloupe\" ],\n\t[ \"536\", \"Deanna\", \"Dudley\", \"79721\", \"Kiribati\" ],\n\t[ \"537\", \"David\", \"Thornton\", \"C6R 2G3\", \"Netherlands Antilles\" ],\n\t[ \"538\", \"Jane\", \"Ashley\", \"48711\", \"Rwanda\" ],\n\t[ \"539\", \"Nero\", \"Curry\", \"20590\", \"Denmark\" ],\n\t[ \"540\", \"Kellie\", \"Poole\", \"46053\", \"Martinique\" ],\n\t[ \"541\", \"Freya\", \"Burch\", \"W5R 8Y5\", \"Northern Mariana Islands\" ],\n\t[ \"542\", \"Maxwell\", \"Mcbride\", \"D4W 4M3\", \"Paraguay\" ],\n\t[ \"543\", \"Dawn\", \"Sargent\", \"85956\", \"Gibraltar\" ],\n\t[ \"544\", \"Lilah\", \"Matthews\", \"J4D 8A9\", \"Montserrat\" ],\n\t[ \"545\", \"Salvador\", \"Burns\", \"28067\", \"Bhutan\" ],\n\t[ \"546\", \"Ezekiel\", \"Ayala\", \"67153\", \"Wallis and Futuna\" ],\n\t[ \"547\", \"Evan\", \"Barker\", \"83026\", \"Puerto Rico\" ],\n\t[ \"548\", \"Jemima\", \"Case\", \"U3S 7N6\", \"Georgia\" ],\n\t[ \"549\", \"Belle\", \"Mcconnell\", \"H4S 9F8\", \"Angola\" ],\n\t[ \"550\", \"Doris\", \"Mays\", \"57387\", \"Tonga\" ],\n\t[ \"551\", \"Carson\", \"Buchanan\", \"20457\", \"Guatemala\" ],\n\t[ \"552\", \"Calista\", \"Lamb\", \"26851\", \"Gibraltar\" ],\n\t[ \"553\", \"Remedios\", \"Haley\", \"A9K 5M1\", \"Tokelau\" ],\n\t[ \"554\", \"Odette\", \"Mccarty\", \"Y8B 3V4\", \"Marshall Islands\" ],\n\t[ \"555\", \"Libby\", \"Pugh\", \"93261\", \"Netherlands\" ],\n\t[ \"556\", \"Bo\", \"Maldonado\", \"C1H 1K7\", \"Oman\" ],\n\t[ \"557\", \"Cameron\", \"Beasley\", \"41821\", \"Northern Mariana Islands\" ],\n\t[ \"558\", \"Chadwick\", \"Crosby\", \"62855\", \"New Caledonia\" ],\n\t[ \"559\", \"Steven\", \"Barrett\", \"92102\", \"Pakistan\" ],\n\t[ \"560\", \"Jonas\", \"Valdez\", \"N3V 4R9\", \"Bulgaria\" ],\n\t[ \"561\", \"Harlan\", \"Larsen\", \"Z8F 6A0\", \"Cayman Islands\" ],\n\t[ \"562\", \"Iola\", \"Joyner\", \"D1J 4C3\", \"Italy\" ],\n\t[ \"563\", \"Abra\", \"Medina\", \"Q9O 5J2\", \"Cambodia\" ],\n\t[ \"564\", \"Solomon\", \"Davidson\", \"91317\", \"Turkmenistan\" ],\n\t[ \"565\", \"Alisa\", \"Kim\", \"33036\", \"Austria\" ],\n\t[ \"566\", \"Deacon\", \"Silva\", \"Z5L 6M0\", \"Djibouti\" ],\n\t[ \"567\", \"Bree\", \"Landry\", \"43135\", \"Czech Republic\" ],\n\t[ \"568\", \"Molly\", \"Leach\", \"71714\", \"Botswana\" ],\n\t[ \"569\", \"Idona\", \"Cain\", \"A2J 1R8\", \"South Georgia and The South Sandwich Islands\" ],\n\t[ \"570\", \"Aileen\", \"Salinas\", \"90344\", \"Uzbekistan\" ],\n\t[ \"571\", \"Dominique\", \"Cooper\", \"31803\", \"Sao Tome and Principe\" ],\n\t[ \"572\", \"Lunea\", \"Pollard\", \"S9R 7B0\", \"Sweden\" ],\n\t[ \"573\", \"Leo\", \"Combs\", \"W7E 8T4\", \"Ukraine\" ],\n\t[ \"574\", \"Illiana\", \"Donovan\", \"D8K 3R4\", \"Palau\" ],\n\t[ \"575\", \"Orlando\", \"Vaughan\", \"Q4I 3E3\", \"Bosnia and Herzegovina\" ],\n\t[ \"576\", \"Yuri\", \"Blake\", \"I9W 5U5\", \"Seychelles\" ],\n\t[ \"577\", \"Amanda\", \"Baldwin\", \"19752\", \"Turkmenistan\" ],\n\t[ \"578\", \"Hanna\", \"Emerson\", \"73316\", \"Antigua and Barbuda\" ],\n\t[ \"579\", \"Xyla\", \"Atkins\", \"11151\", \"Uganda\" ],\n\t[ \"580\", \"Nathaniel\", \"Patterson\", \"00391\", \"Portugal\" ],\n\t[ \"581\", \"Naida\", \"Cote\", \"17484\", \"Mauritius\" ],\n\t[ \"582\", \"Scarlett\", \"Little\", \"V8N 8A6\", \"Sao Tome and Principe\" ],\n\t[ \"583\", \"Odessa\", \"Kerr\", \"56456\", \"Sweden\" ],\n\t[ \"584\", \"Kamal\", \"Richardson\", \"F6S 4I1\", \"Algeria\" ],\n\t[ \"585\", \"Griffith\", \"Morton\", \"I5H 2Z0\", \"Vanuatu\" ],\n\t[ \"586\", \"Orli\", \"Santana\", \"48213\", \"Burundi\" ],\n\t[ \"587\", \"Courtney\", \"Cook\", \"R3O 3A9\", \"Cape Verde\" ],\n\t[ \"588\", \"Jolene\", \"Wallace\", \"F6Q 7W8\", \"Zambia\" ],\n\t[ \"589\", \"Bert\", \"Sharp\", \"X7T 7Z8\", \"Paraguay\" ],\n\t[ \"590\", \"Ila\", \"Carver\", \"E4M 7P4\", \"Paraguay\" ],\n\t[ \"591\", \"Merrill\", \"Wall\", \"49416\", \"Fiji\" ],\n\t[ \"592\", \"Hanae\", \"Espinoza\", \"Y6D 6K8\", \"Turkey\" ],\n\t[ \"593\", \"Stephanie\", \"Bond\", \"Z1Q 3P3\", \"Algeria\" ],\n\t[ \"594\", \"Lionel\", \"Leonard\", \"U8O 7G6\", \"Nauru\" ],\n\t[ \"595\", \"Faith\", \"Ramirez\", \"75181\", \"Slovakia\" ],\n\t[ \"596\", \"Fritz\", \"Glass\", \"62878\", \"El Salvador\" ],\n\t[ \"597\", \"Raya\", \"Gardner\", \"L3E 2C7\", \"India\" ],\n\t[ \"598\", \"Brynne\", \"Price\", \"W1S 6O9\", \"Lithuania\" ],\n\t[ \"599\", \"Karen\", \"Gray\", \"O4X 8F6\", \"Albania\" ],\n\t[ \"600\", \"Perry\", \"Goodwin\", \"44266\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"601\", \"Dylan\", \"Glover\", \"76573\", \"Estonia\" ],\n\t[ \"602\", \"Melinda\", \"Holloway\", \"07861\", \"Grenada\" ],\n\t[ \"603\", \"Rahim\", \"Robinson\", \"D7M 1E8\", \"Madagascar\" ],\n\t[ \"604\", \"Ori\", \"Oconnor\", \"10386\", \"Antarctica\" ],\n\t[ \"605\", \"Candace\", \"Preston\", \"03610\", \"Denmark\" ],\n\t[ \"606\", \"Wing\", \"Howe\", \"E6U 3H2\", \"Burundi\" ],\n\t[ \"607\", \"Lucy\", \"Eaton\", \"26436\", \"Guinea\" ],\n\t[ \"608\", \"Ignatius\", \"Blevins\", \"93597\", \"Serbia and Montenegro\" ],\n\t[ \"609\", \"Nadine\", \"Franco\", \"80096\", \"Tonga\" ],\n\t[ \"610\", \"Shoshana\", \"Walters\", \"S4F 5O8\", \"Micronesia\" ],\n\t[ \"611\", \"Remedios\", \"Buckner\", \"29213\", \"Antigua and Barbuda\" ],\n\t[ \"612\", \"Adam\", \"Horne\", \"F8V 1V8\", \"Oman\" ],\n\t[ \"613\", \"Kieran\", \"Saunders\", \"I7A 7Y5\", \"Japan\" ],\n\t[ \"614\", \"Isabelle\", \"Fletcher\", \"K2K 3K5\", \"Norway\" ],\n\t[ \"615\", \"Ryder\", \"Ballard\", \"38518\", \"Tanzania, United Republic of\" ],\n\t[ \"616\", \"Nina\", \"Guerrero\", \"61142\", \"Saint Kitts and Nevis\" ],\n\t[ \"617\", \"Sheila\", \"Poole\", \"E2H 6I6\", \"Denmark\" ],\n\t[ \"618\", \"Melyssa\", \"Mcdaniel\", \"08247\", \"Netherlands Antilles\" ],\n\t[ \"619\", \"Leila\", \"Vang\", \"Q5Z 3S1\", \"United States Minor Outlying Islands\" ],\n\t[ \"620\", \"Grady\", \"Aguilar\", \"R1I 8I8\", \"Slovenia\" ],\n\t[ \"621\", \"Plato\", \"Terrell\", \"23916\", \"Kuwait\" ],\n\t[ \"622\", \"Rama\", \"Perkins\", \"56506\", \"Russian Federation\" ],\n\t[ \"623\", \"Boris\", \"Chaney\", \"66737\", \"Antigua and Barbuda\" ],\n\t[ \"624\", \"Edward\", \"Clarke\", \"30722\", \"Iraq\" ],\n\t[ \"625\", \"Skyler\", \"Wise\", \"53248\", \"Taiwan, Province of China\" ],\n\t[ \"626\", \"Uta\", \"Cox\", \"85242\", \"Malawi\" ],\n\t[ \"627\", \"Lesley\", \"Watkins\", \"26710\", \"Estonia\" ],\n\t[ \"628\", \"Gray\", \"Harrison\", \"C5L 9Y7\", \"Nepal\" ],\n\t[ \"629\", \"Joan\", \"Flores\", \"J5Q 2B9\", \"Tajikistan\" ],\n\t[ \"630\", \"Reece\", \"Lott\", \"85152\", \"Algeria\" ],\n\t[ \"631\", \"Jerome\", \"Faulkner\", \"V1K 3N2\", \"Kiribati\" ],\n\t[ \"632\", \"Jackson\", \"Hudson\", \"85932\", \"Botswana\" ],\n\t[ \"633\", \"Uma\", \"Booker\", \"79755\", \"Senegal\" ],\n\t[ \"634\", \"Katelyn\", \"Gillespie\", \"Q8P 4V9\", \"Eritrea\" ],\n\t[ \"635\", \"Clio\", \"Tillman\", \"67552\", \"Liberia\" ],\n\t[ \"636\", \"Anjolie\", \"Nixon\", \"36615\", \"Botswana\" ],\n\t[ \"637\", \"Nell\", \"Lee\", \"T9S 4R3\", \"French Southern Territories\" ],\n\t[ \"638\", \"Anthony\", \"Aguirre\", \"85443\", \"Morocco\" ],\n\t[ \"639\", \"Aaron\", \"Green\", \"90326\", \"Faroe Islands\" ],\n\t[ \"640\", \"Galvin\", \"Yang\", \"A4X 8H6\", \"Ukraine\" ],\n\t[ \"641\", \"Yoshi\", \"Strickland\", \"52538\", \"Brazil\" ],\n\t[ \"642\", \"Brenden\", \"Kirkland\", \"X7P 8V9\", \"Turks and Caicos Islands\" ],\n\t[ \"643\", \"Bree\", \"Stone\", \"U4L 2H2\", \"Hong Kong\" ],\n\t[ \"644\", \"Quin\", \"Tanner\", \"U4A 1X4\", \"Faroe Islands\" ],\n\t[ \"645\", \"Camilla\", \"Heath\", \"91749\", \"Andorra\" ],\n\t[ \"646\", \"Xaviera\", \"Bullock\", \"I4U 7W0\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"647\", \"Kay\", \"Rowe\", \"59689\", \"Iceland\" ],\n\t[ \"648\", \"Lance\", \"Bond\", \"66558\", \"Spain\" ],\n\t[ \"649\", \"Fredericka\", \"Langley\", \"48782\", \"Cayman Islands\" ],\n\t[ \"650\", \"Charles\", \"Avila\", \"42037\", \"Papua New Guinea\" ],\n\t[ \"651\", \"Ramona\", \"Rios\", \"T5M 3E1\", \"Argentina\" ],\n\t[ \"652\", \"Ezekiel\", \"Young\", \"W8X 4S7\", \"French Polynesia\" ],\n\t[ \"653\", \"Celeste\", \"Dodson\", \"19140\", \"Benin\" ],\n\t[ \"654\", \"Frances\", \"Mcintosh\", \"91246\", \"Swaziland\" ],\n\t[ \"655\", \"Deanna\", \"Hyde\", \"J8P 3T5\", \"Croatia\" ],\n\t[ \"656\", \"Dahlia\", \"Blair\", \"45364\", \"Kazakhstan\" ],\n\t[ \"657\", \"Jade\", \"Hayes\", \"I5Q 3S9\", \"Malawi\" ],\n\t[ \"658\", \"Robin\", \"Bullock\", \"G9Q 2P8\", \"Ireland\" ],\n\t[ \"659\", \"Nasim\", \"Bond\", \"I2V 8N4\", \"Macedonia\" ],\n\t[ \"660\", \"Axel\", \"Pickett\", \"18370\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"661\", \"Pearl\", \"Lee\", \"G1R 3R8\", \"Poland\" ],\n\t[ \"662\", \"Garth\", \"Meyers\", \"90308\", \"Georgia\" ],\n\t[ \"663\", \"Ivory\", \"Rios\", \"S8F 8R5\", \"Mexico\" ],\n\t[ \"664\", \"Jerome\", \"Lambert\", \"N1Q 6R8\", \"Saint Lucia\" ],\n\t[ \"665\", \"Meredith\", \"Clark\", \"27720\", \"Cocos (Keeling) Islands\" ],\n\t[ \"666\", \"Armando\", \"Holcomb\", \"M6D 4X0\", \"Oman\" ],\n\t[ \"667\", \"Rowan\", \"Page\", \"00307\", \"Nauru\" ],\n\t[ \"668\", \"Kyla\", \"Brown\", \"F4W 4C5\", \"Holy See (Vatican City State)\" ],\n\t[ \"669\", \"Leigh\", \"Sosa\", \"28499\", \"Uruguay\" ],\n\t[ \"670\", \"Shafira\", \"Forbes\", \"26526\", \"Honduras\" ],\n\t[ \"671\", \"Maxine\", \"Mueller\", \"90923\", \"Kazakhstan\" ],\n\t[ \"672\", \"Joy\", \"Sargent\", \"K6T 3W5\", \"Malawi\" ],\n\t[ \"673\", \"Lamar\", \"Roberts\", \"R5F 9C8\", \"Poland\" ],\n\t[ \"674\", \"Madonna\", \"Love\", \"15514\", \"Cyprus\" ],\n\t[ \"675\", \"Uriel\", \"Ware\", \"Z6V 5J1\", \"Singapore\" ],\n\t[ \"676\", \"Bevis\", \"Erickson\", \"M3X 9M8\", \"Brunei Darussalam\" ],\n\t[ \"677\", \"Grant\", \"Velasquez\", \"96942\", \"Antarctica\" ],\n\t[ \"678\", \"Lars\", \"Bullock\", \"14772\", \"Guyana\" ],\n\t[ \"679\", \"Maryam\", \"Jones\", \"01854\", \"Togo\" ],\n\t[ \"680\", \"Blythe\", \"Goodwin\", \"51731\", \"New Caledonia\" ],\n\t[ \"681\", \"Kane\", \"Wiggins\", \"55727\", \"Kiribati\" ],\n\t[ \"682\", \"Brian\", \"Rosales\", \"25896\", \"Cape Verde\" ],\n\t[ \"683\", \"Blaze\", \"Leach\", \"P6J 3E5\", \"Northern Mariana Islands\" ],\n\t[ \"684\", \"Cameron\", \"Neal\", \"82248\", \"Marshall Islands\" ],\n\t[ \"685\", \"Lydia\", \"Cunningham\", \"Q1V 8P7\", \"San Marino\" ],\n\t[ \"686\", \"Troy\", \"Cook\", \"32106\", \"British Indian Ocean Territory\" ],\n\t[ \"687\", \"Alexander\", \"Valenzuela\", \"S8Z 6B2\", \"Guadeloupe\" ],\n\t[ \"688\", \"Garth\", \"Beck\", \"46344\", \"Cook Islands\" ],\n\t[ \"689\", \"Hillary\", \"Nunez\", \"29462\", \"Sri Lanka\" ],\n\t[ \"690\", \"Hunter\", \"Sawyer\", \"W9M 6T4\", \"Saint Lucia\" ],\n\t[ \"691\", \"Jaquelyn\", \"Everett\", \"T1X 2U2\", \"Guinea-bissau\" ],\n\t[ \"692\", \"Indira\", \"Ortega\", \"43047\", \"Italy\" ],\n\t[ \"693\", \"Josiah\", \"Hinton\", \"N5F 5Y8\", \"Andorra\" ],\n\t[ \"694\", \"Bruno\", \"Gay\", \"E3U 3D9\", \"Palau\" ],\n\t[ \"695\", \"Melissa\", \"Blackburn\", \"S4V 1K2\", \"Virgin Islands, U.S.\" ],\n\t[ \"696\", \"Zeus\", \"Dawson\", \"K5S 6Z6\", \"Belgium\" ],\n\t[ \"697\", \"Castor\", \"Mcmahon\", \"H3R 1O8\", \"Cambodia\" ],\n\t[ \"698\", \"Elizabeth\", \"Beasley\", \"98178\", \"Northern Mariana Islands\" ],\n\t[ \"699\", \"Jescie\", \"Lee\", \"08056\", \"Eritrea\" ],\n\t[ \"700\", \"Dennis\", \"Chapman\", \"T4O 1Q2\", \"Bangladesh\" ],\n\t[ \"701\", \"Basia\", \"Wallace\", \"U3Y 7C1\", \"Pitcairn\" ],\n\t[ \"702\", \"Dante\", \"Brewer\", \"53544\", \"Bosnia and Herzegovina\" ],\n\t[ \"703\", \"Adrienne\", \"Glenn\", \"32378\", \"Austria\" ],\n\t[ \"704\", \"Kellie\", \"Acevedo\", \"51723\", \"Italy\" ],\n\t[ \"705\", \"Scarlet\", \"Mclaughlin\", \"43509\", \"Kiribati\" ],\n\t[ \"706\", \"Lillith\", \"Mullins\", \"S6L 4Y6\", \"Kyrgyzstan\" ],\n\t[ \"707\", \"Maxine\", \"Atkins\", \"Z5T 5R5\", \"Denmark\" ],\n\t[ \"708\", \"Nicholas\", \"Rose\", \"40286\", \"Macedonia\" ],\n\t[ \"709\", \"Zenia\", \"Pugh\", \"28682\", \"Venezuela\" ],\n\t[ \"710\", \"Keely\", \"Turner\", \"34939\", \"New Zealand\" ],\n\t[ \"711\", \"Maisie\", \"Walton\", \"S6M 5C5\", \"Cameroon\" ],\n\t[ \"712\", \"Michelle\", \"Salinas\", \"T7A 9N6\", \"Nicaragua\" ],\n\t[ \"713\", \"Reece\", \"Clements\", \"73923\", \"Austria\" ],\n\t[ \"714\", \"Eliana\", \"Fox\", \"V3Y 5T4\", \"Denmark\" ],\n\t[ \"715\", \"Kennedy\", \"Mullins\", \"43213\", \"Virgin Islands, British\" ],\n\t[ \"716\", \"Alea\", \"Glover\", \"M6P 3Z5\", \"Turkmenistan\" ],\n\t[ \"717\", \"Scarlett\", \"Hunt\", \"41461\", \"Montserrat\" ],\n\t[ \"718\", \"Rooney\", \"Kane\", \"T8A 3E2\", \"Madagascar\" ],\n\t[ \"719\", \"Cairo\", \"Ray\", \"L6M 1E7\", \"Canada\" ],\n\t[ \"720\", \"Wendy\", \"Burks\", \"R8V 8F5\", \"Virgin Islands, U.S.\" ],\n\t[ \"721\", \"Christine\", \"Suarez\", \"67369\", \"Georgia\" ],\n\t[ \"722\", \"Graiden\", \"Le\", \"K4M 9V5\", \"New Caledonia\" ],\n\t[ \"723\", \"Zane\", \"Nunez\", \"60548\", \"Haiti\" ],\n\t[ \"724\", \"Ali\", \"Bell\", \"U4Y 4C3\", \"Togo\" ],\n\t[ \"725\", \"Marsden\", \"Leon\", \"39374\", \"Venezuela\" ],\n\t[ \"726\", \"Holmes\", \"Kidd\", \"B6K 7Q9\", \"Iraq\" ],\n\t[ \"727\", \"Cameron\", \"Gardner\", \"88627\", \"Brazil\" ],\n\t[ \"728\", \"Ava\", \"George\", \"K1Z 7Y2\", \"Monaco\" ],\n\t[ \"729\", \"Chantale\", \"Holland\", \"H1B 9L8\", \"Afghanistan\" ],\n\t[ \"730\", \"Alika\", \"Middleton\", \"W8X 7O1\", \"Korea\" ],\n\t[ \"731\", \"Cameran\", \"Zimmerman\", \"78576\", \"Benin\" ],\n\t[ \"732\", \"Barrett\", \"Blair\", \"51161\", \"Virgin Islands, U.S.\" ],\n\t[ \"733\", \"Brielle\", \"Ballard\", \"59538\", \"Iceland\" ],\n\t[ \"734\", \"Teagan\", \"Morales\", \"40107\", \"Kenya\" ],\n\t[ \"735\", \"Lunea\", \"Cantu\", \"14690\", \"Oman\" ],\n\t[ \"736\", \"Robin\", \"Gilmore\", \"17972\", \"Nauru\" ],\n\t[ \"737\", \"Hall\", \"Mccarty\", \"86141\", \"China\" ],\n\t[ \"738\", \"Olga\", \"Rasmussen\", \"58309\", \"Virgin Islands, British\" ],\n\t[ \"739\", \"Mark\", \"Griffin\", \"51542\", \"Argentina\" ],\n\t[ \"740\", \"Medge\", \"Carrillo\", \"23192\", \"Pitcairn\" ],\n\t[ \"741\", \"Susan\", \"Mosley\", \"32128\", \"Turkmenistan\" ],\n\t[ \"742\", \"Zelda\", \"Valdez\", \"46831\", \"New Caledonia\" ],\n\t[ \"743\", \"Ruth\", \"Donaldson\", \"F9I 7G7\", \"Ukraine\" ],\n\t[ \"744\", \"Kirby\", \"Workman\", \"36679\", \"Rwanda\" ],\n\t[ \"745\", \"Alexa\", \"King\", \"66513\", \"Liberia\" ],\n\t[ \"746\", \"Ronan\", \"Gross\", \"K2S 6D0\", \"Saint Lucia\" ],\n\t[ \"747\", \"Kylee\", \"Dillon\", \"P7Y 1I5\", \"Faroe Islands\" ],\n\t[ \"748\", \"Brenda\", \"Weaver\", \"99365\", \"Uzbekistan\" ],\n\t[ \"749\", \"Aristotle\", \"Orr\", \"43451\", \"Canada\" ],\n\t[ \"750\", \"Jaquelyn\", \"Tyler\", \"B9Q 7P5\", \"Brunei Darussalam\" ],\n\t[ \"751\", \"Madeline\", \"Stewart\", \"D4D 2J4\", \"Zimbabwe\" ],\n\t[ \"752\", \"Lacota\", \"Glass\", \"89124\", \"Israel\" ],\n\t[ \"753\", \"Adrian\", \"Ashley\", \"N8M 4L1\", \"Sri Lanka\" ],\n\t[ \"754\", \"Ignatius\", \"Waller\", \"12053\", \"Thailand\" ],\n\t[ \"755\", \"Raven\", \"Stevens\", \"88768\", \"Estonia\" ],\n\t[ \"756\", \"Carly\", \"Camacho\", \"27075\", \"Vanuatu\" ],\n\t[ \"757\", \"Lee\", \"Calderon\", \"19501\", \"Pitcairn\" ],\n\t[ \"758\", \"Amos\", \"Briggs\", \"I6A 3L8\", \"Saint Kitts and Nevis\" ],\n\t[ \"759\", \"Cheryl\", \"Valencia\", \"90517\", \"Denmark\" ],\n\t[ \"760\", \"Kenyon\", \"Franco\", \"B2S 2E2\", \"Western Sahara\" ],\n\t[ \"761\", \"Damian\", \"Acosta\", \"A2S 6D0\", \"Bahamas\" ],\n\t[ \"762\", \"Brenda\", \"Zamora\", \"T9E 7L3\", \"Finland\" ],\n\t[ \"763\", \"Connor\", \"Atkinson\", \"03975\", \"Sierra Leone\" ],\n\t[ \"764\", \"Kaseem\", \"Waters\", \"A2K 2X0\", \"China\" ],\n\t[ \"765\", \"Zephania\", \"Whitfield\", \"A4Z 9P7\", \"Eritrea\" ],\n\t[ \"766\", \"Emmanuel\", \"Ballard\", \"G1M 6Y2\", \"Finland\" ],\n\t[ \"767\", \"Amos\", \"Walters\", \"43184\", \"Oman\" ],\n\t[ \"768\", \"Urielle\", \"Browning\", \"19959\", \"Panama\" ],\n\t[ \"769\", \"TaShya\", \"Summers\", \"B9V 3Y3\", \"Micronesia\" ],\n\t[ \"770\", \"Jermaine\", \"Mcgee\", \"X8A 4E1\", \"Cape Verde\" ],\n\t[ \"771\", \"Chaney\", \"Berry\", \"G2H 2C8\", \"Uganda\" ],\n\t[ \"772\", \"Jaime\", \"May\", \"49723\", \"Eritrea\" ],\n\t[ \"773\", \"Olga\", \"Cohen\", \"13403\", \"Macao\" ],\n\t[ \"774\", \"Jacob\", \"Vaughn\", \"U7G 1V5\", \"Greece\" ],\n\t[ \"775\", \"Kelly\", \"Mcdonald\", \"Z3B 5G7\", \"Kiribati\" ],\n\t[ \"776\", \"Emi\", \"Gilbert\", \"W1L 2M4\", \"Nicaragua\" ],\n\t[ \"777\", \"Francis\", \"Nunez\", \"K4U 6M5\", \"Lithuania\" ],\n\t[ \"778\", \"Noel\", \"Nelson\", \"Z5T 1Y0\", \"Nauru\" ],\n\t[ \"779\", \"Ora\", \"Ellison\", \"Y5I 4R8\", \"Burundi\" ],\n\t[ \"780\", \"Kirby\", \"Glass\", \"J5X 2E3\", \"Argentina\" ],\n\t[ \"781\", \"Hayley\", \"Tate\", \"V1T 6B6\", \"Greece\" ],\n\t[ \"782\", \"Mohammad\", \"Leblanc\", \"E3S 5R3\", \"Oman\" ],\n\t[ \"783\", \"Lionel\", \"Todd\", \"A1Z 9E1\", \"Macedonia\" ],\n\t[ \"784\", \"Courtney\", \"Mckay\", \"D4I 8Z3\", \"Fiji\" ],\n\t[ \"785\", \"Reagan\", \"West\", \"84159\", \"Equatorial Guinea\" ],\n\t[ \"786\", \"Noel\", \"Strickland\", \"Q7K 6S3\", \"Mozambique\" ],\n\t[ \"787\", \"Lara\", \"Porter\", \"49872\", \"Nigeria\" ],\n\t[ \"788\", \"Kyra\", \"Haley\", \"I9E 2K3\", \"Dominican Republic\" ],\n\t[ \"789\", \"Wynter\", \"Beasley\", \"66330\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"790\", \"Vladimir\", \"Briggs\", \"99538\", \"Burkina Faso\" ],\n\t[ \"791\", \"Rafael\", \"Campbell\", \"V8L 2S6\", \"Algeria\" ],\n\t[ \"792\", \"Buffy\", \"Wilder\", \"N3U 2X0\", \"Bahrain\" ],\n\t[ \"793\", \"Nyssa\", \"Dawson\", \"38434\", \"Spain\" ],\n\t[ \"794\", \"Sylvia\", \"Swanson\", \"39714\", \"Azerbaijan\" ],\n\t[ \"795\", \"Jolie\", \"Diaz\", \"A1J 5I1\", \"Cuba\" ],\n\t[ \"796\", \"Rosalyn\", \"Mcdaniel\", \"F3T 6E2\", \"Benin\" ],\n\t[ \"797\", \"Nelle\", \"Prince\", \"K1M 4U6\", \"Maldives\" ],\n\t[ \"798\", \"Luke\", \"Knight\", \"05930\", \"Seychelles\" ],\n\t[ \"799\", \"Macaulay\", \"Conway\", \"79707\", \"American Samoa\" ],\n\t[ \"800\", \"Freya\", \"Webb\", \"U2H 2D7\", \"Ireland\" ],\n\t[ \"801\", \"Clinton\", \"Meyers\", \"S9I 7N2\", \"Malta\" ],\n\t[ \"802\", \"Rudyard\", \"Chandler\", \"40347\", \"Bahrain\" ],\n\t[ \"803\", \"Courtney\", \"Hoover\", \"12325\", \"French Polynesia\" ],\n\t[ \"804\", \"Melissa\", \"Davenport\", \"K7P 1S8\", \"Canada\" ],\n\t[ \"805\", \"Noelle\", \"Nieves\", \"87427\", \"Martinique\" ],\n\t[ \"806\", \"Myles\", \"Hart\", \"V6T 1W0\", \"Niue\" ],\n\t[ \"807\", \"Jasper\", \"Campos\", \"78143\", \"Faroe Islands\" ],\n\t[ \"808\", \"Ariana\", \"Valentine\", \"J4X 2D4\", \"Ecuador\" ],\n\t[ \"809\", \"Vanna\", \"Fletcher\", \"M4Z 1F9\", \"Faroe Islands\" ],\n\t[ \"810\", \"Elijah\", \"Harper\", \"Y1B 7E4\", \"New Zealand\" ],\n\t[ \"811\", \"Leilani\", \"Nunez\", \"K9W 4F0\", \"United Arab Emirates\" ],\n\t[ \"812\", \"Maia\", \"Huber\", \"V4L 8M6\", \"United Kingdom\" ],\n\t[ \"813\", \"Richard\", \"Riddle\", \"U8C 8Q2\", \"Niue\" ],\n\t[ \"814\", \"Harper\", \"Blanchard\", \"10904\", \"Cameroon\" ],\n\t[ \"815\", \"Aurelia\", \"Trujillo\", \"01646\", \"Dominican Republic\" ],\n\t[ \"816\", \"Anthony\", \"Owen\", \"J2I 2B4\", \"Palestinian Territory, Occupied\" ],\n\t[ \"817\", \"Kelsie\", \"Roy\", \"M3J 6K3\", \"Maldives\" ],\n\t[ \"818\", \"James\", \"Pearson\", \"94810\", \"Mexico\" ],\n\t[ \"819\", \"Igor\", \"Marshall\", \"Y8M 2D6\", \"Palau\" ],\n\t[ \"820\", \"Aquila\", \"Willis\", \"20354\", \"Samoa\" ],\n\t[ \"821\", \"Randall\", \"Sheppard\", \"73577\", \"Sierra Leone\" ],\n\t[ \"822\", \"Gray\", \"Myers\", \"53651\", \"Gibraltar\" ],\n\t[ \"823\", \"Dana\", \"Camacho\", \"89571\", \"Reunion\" ],\n\t[ \"824\", \"Berk\", \"Hopper\", \"17794\", \"Cook Islands\" ],\n\t[ \"825\", \"Shannon\", \"Barry\", \"70536\", \"Bouvet Island\" ],\n\t[ \"826\", \"Dahlia\", \"Herman\", \"F8L 1Q3\", \"Lesotho\" ],\n\t[ \"827\", \"Gillian\", \"Hayes\", \"O2C 7X8\", \"Tajikistan\" ],\n\t[ \"828\", \"Leo\", \"Bolton\", \"P6V 6E1\", \"Dominica\" ],\n\t[ \"829\", \"Vivien\", \"Best\", \"E5E 6N8\", \"Cuba\" ],\n\t[ \"830\", \"Clayton\", \"Bradley\", \"E7R 3M5\", \"Zimbabwe\" ],\n\t[ \"831\", \"Lesley\", \"Collins\", \"16592\", \"Mali\" ],\n\t[ \"832\", \"Holly\", \"Hensley\", \"49080\", \"Tunisia\" ],\n\t[ \"833\", \"Larissa\", \"Velazquez\", \"41068\", \"Haiti\" ],\n\t[ \"834\", \"Delilah\", \"Mejia\", \"A5I 9Q9\", \"Croatia\" ],\n\t[ \"835\", \"Drew\", \"Roberson\", \"U7E 3R1\", \"Somalia\" ],\n\t[ \"836\", \"Jenette\", \"Patel\", \"64084\", \"Denmark\" ],\n\t[ \"837\", \"Gillian\", \"Cleveland\", \"05659\", \"Syrian Arab Republic\" ],\n\t[ \"838\", \"Noelle\", \"Lara\", \"U1N 6V6\", \"Sri Lanka\" ],\n\t[ \"839\", \"Celeste\", \"Rollins\", \"26590\", \"Mayotte\" ],\n\t[ \"840\", \"Elvis\", \"Fletcher\", \"M8V 6J4\", \"Bahamas\" ],\n\t[ \"841\", \"Caesar\", \"Hays\", \"E3D 3T7\", \"Malta\" ],\n\t[ \"842\", \"Rama\", \"Weber\", \"25880\", \"Malta\" ],\n\t[ \"843\", \"Lael\", \"Page\", \"57135\", \"Anguilla\" ],\n\t[ \"844\", \"Omar\", \"Hammond\", \"90213\", \"Belarus\" ],\n\t[ \"845\", \"Simone\", \"Mcintosh\", \"L5P 1S0\", \"Bhutan\" ],\n\t[ \"846\", \"Gay\", \"Harper\", \"56404\", \"Virgin Islands, U.S.\" ],\n\t[ \"847\", \"Joel\", \"Holman\", \"C1F 1C4\", \"Saint Lucia\" ],\n\t[ \"848\", \"Clayton\", \"Pennington\", \"57003\", \"Kazakhstan\" ],\n\t[ \"849\", \"Susan\", \"Mckee\", \"I5U 8F2\", \"Taiwan, Province of China\" ],\n\t[ \"850\", \"Jenna\", \"Stein\", \"P2K 6L4\", \"Reunion\" ],\n\t[ \"851\", \"Madonna\", \"Joyner\", \"Q4Q 4K6\", \"Guadeloupe\" ],\n\t[ \"852\", \"Deirdre\", \"Ingram\", \"N7U 3N9\", \"Monaco\" ],\n\t[ \"853\", \"Juliet\", \"Hodges\", \"U2Q 2T0\", \"Uzbekistan\" ],\n\t[ \"854\", \"Naomi\", \"Rice\", \"O6T 2Z1\", \"Nicaragua\" ],\n\t[ \"855\", \"Leila\", \"Alvarado\", \"Z2V 7L3\", \"Suriname\" ],\n\t[ \"856\", \"George\", \"Leon\", \"L6M 1V2\", \"Norway\" ],\n\t[ \"857\", \"Rama\", \"Cruz\", \"Y2S 7K6\", \"Kenya\" ],\n\t[ \"858\", \"Clarke\", \"Mckinney\", \"34622\", \"Viet Nam\" ],\n\t[ \"859\", \"Savannah\", \"Bailey\", \"L3O 1U6\", \"Solomon Islands\" ],\n\t[ \"860\", \"Maxwell\", \"Gibson\", \"R9K 9Q1\", \"Virgin Islands, British\" ],\n\t[ \"861\", \"Devin\", \"Humphrey\", \"74821\", \"Costa Rica\" ],\n\t[ \"862\", \"Kadeem\", \"Larsen\", \"43178\", \"Luxembourg\" ],\n\t[ \"863\", \"Elvis\", \"Todd\", \"O3O 3G9\", \"Azerbaijan\" ],\n\t[ \"864\", \"Levi\", \"Montoya\", \"G1Y 1N8\", \"Venezuela\" ],\n\t[ \"865\", \"Risa\", \"Barnes\", \"86118\", \"Benin\" ],\n\t[ \"866\", \"Dillon\", \"Riggs\", \"O3Y 8V2\", \"Greenland\" ],\n\t[ \"867\", \"Stewart\", \"Marshall\", \"V8G 8S2\", \"Mexico\" ],\n\t[ \"868\", \"Camden\", \"Goff\", \"N3W 2L0\", \"Bahrain\" ],\n\t[ \"869\", \"Sheila\", \"Meadows\", \"T6K 7M2\", \"Yemen\" ],\n\t[ \"870\", \"Hop\", \"Berger\", \"Q8B 9R7\", \"Germany\" ],\n\t[ \"871\", \"Charissa\", \"Wilkerson\", \"08090\", \"Burundi\" ],\n\t[ \"872\", \"Raphael\", \"Carey\", \"03667\", \"United Kingdom\" ],\n\t[ \"873\", \"Micah\", \"Hood\", \"T9N 4T5\", \"Georgia\" ],\n\t[ \"874\", \"Cathleen\", \"Mccall\", \"N6H 6N3\", \"Tanzania, United Republic of\" ],\n\t[ \"875\", \"Lisandra\", \"Poole\", \"S7O 1J1\", \"Greece\" ],\n\t[ \"876\", \"Stone\", \"Blackwell\", \"90654\", \"Serbia and Montenegro\" ],\n\t[ \"877\", \"Serena\", \"Mann\", \"32305\", \"Trinidad and Tobago\" ],\n\t[ \"878\", \"Scarlet\", \"Turner\", \"D7Y 8N4\", \"Oman\" ],\n\t[ \"879\", \"Zenaida\", \"Carrillo\", \"60361\", \"Montserrat\" ],\n\t[ \"880\", \"Jaime\", \"Dalton\", \"F4E 6R5\", \"Iraq\" ],\n\t[ \"881\", \"Wesley\", \"Drake\", \"D8J 9U2\", \"Bulgaria\" ],\n\t[ \"882\", \"Armand\", \"Chandler\", \"X8Z 9E6\", \"Saint Kitts and Nevis\" ],\n\t[ \"883\", \"Inez\", \"Dillard\", \"59975\", \"Eritrea\" ],\n\t[ \"884\", \"Roanna\", \"Floyd\", \"65958\", \"Bolivia\" ],\n\t[ \"885\", \"Timon\", \"Dalton\", \"O3Q 5B5\", \"Colombia\" ],\n\t[ \"886\", \"Ifeoma\", \"Lamb\", \"J9A 9X0\", \"Papua New Guinea\" ],\n\t[ \"887\", \"Brody\", \"Cash\", \"75525\", \"Kazakhstan\" ],\n\t[ \"888\", \"Dawn\", \"Wise\", \"G7X 5J3\", \"Samoa\" ],\n\t[ \"889\", \"Chaney\", \"Bartlett\", \"11112\", \"Ecuador\" ],\n\t[ \"890\", \"Galvin\", \"Merritt\", \"59635\", \"Bahrain\" ],\n\t[ \"891\", \"Cynthia\", \"Nash\", \"U5P 1H4\", \"Switzerland\" ],\n\t[ \"892\", \"Tara\", \"Austin\", \"Q6X 8U0\", \"Burundi\" ],\n\t[ \"893\", \"Roanna\", \"Petty\", \"28524\", \"Northern Mariana Islands\" ],\n\t[ \"894\", \"Palmer\", \"Mcdowell\", \"78234\", \"United States Minor Outlying Islands\" ],\n\t[ \"895\", \"Sade\", \"Patton\", \"28984\", \"Czech Republic\" ],\n\t[ \"896\", \"Yoko\", \"Compton\", \"62165\", \"Saint Kitts and Nevis\" ],\n\t[ \"897\", \"Regan\", \"Mccarthy\", \"C5D 6G0\", \"Lebanon\" ],\n\t[ \"898\", \"Norman\", \"Nixon\", \"E4C 4G0\", \"Virgin Islands, U.S.\" ],\n\t[ \"899\", \"Jocelyn\", \"Baldwin\", \"X9R 2B3\", \"Macedonia\" ],\n\t[ \"900\", \"Jaquelyn\", \"Berg\", \"N6X 6E1\", \"Saint Lucia\" ],\n\t[ \"901\", \"Zane\", \"Nelson\", \"G9P 4J8\", \"Macao\" ],\n\t[ \"902\", \"Judith\", \"Elliott\", \"R4I 4O3\", \"Iraq\" ],\n\t[ \"903\", \"Maia\", \"Ellis\", \"S9V 6P0\", \"Bahrain\" ],\n\t[ \"904\", \"Mechelle\", \"Stevens\", \"43406\", \"Bouvet Island\" ],\n\t[ \"905\", \"Sylvester\", \"Duran\", \"K5D 8W5\", \"Costa Rica\" ],\n\t[ \"906\", \"Unity\", \"Cooke\", \"64362\", \"Ecuador\" ],\n\t[ \"907\", \"Karly\", \"Velazquez\", \"43286\", \"Guam\" ],\n\t[ \"908\", \"Damian\", \"Yates\", \"84910\", \"Thailand\" ],\n\t[ \"909\", \"Linus\", \"Gross\", \"31808\", \"Israel\" ],\n\t[ \"910\", \"Cooper\", \"Franco\", \"36700\", \"Yemen\" ],\n\t[ \"911\", \"Gail\", \"Jones\", \"09157\", \"Turkey\" ],\n\t[ \"912\", \"Hayfa\", \"Bennett\", \"59422\", \"France\" ],\n\t[ \"913\", \"Hermione\", \"Barber\", \"I6W 8Z5\", \"Mozambique\" ],\n\t[ \"914\", \"Hedy\", \"Stevens\", \"35535\", \"Cuba\" ],\n\t[ \"915\", \"Galvin\", \"Frederick\", \"J2W 9A3\", \"Virgin Islands, British\" ],\n\t[ \"916\", \"Lamar\", \"Rush\", \"P4O 3H4\", \"Austria\" ],\n\t[ \"917\", \"Brenda\", \"Walter\", \"K8Q 9H9\", \"Tajikistan\" ],\n\t[ \"918\", \"Ria\", \"Guy\", \"12801\", \"Gibraltar\" ],\n\t[ \"919\", \"Bruno\", \"Lynch\", \"I6U 7D0\", \"Greenland\" ],\n\t[ \"920\", \"Kirk\", \"Pearson\", \"66242\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"921\", \"Owen\", \"Sosa\", \"61483\", \"Martinique\" ],\n\t[ \"922\", \"Rajah\", \"Mccarty\", \"G9K 6L2\", \"Faroe Islands\" ],\n\t[ \"923\", \"Erasmus\", \"Malone\", \"D6H 7H5\", \"Sierra Leone\" ],\n\t[ \"924\", \"Raja\", \"Hale\", \"85590\", \"Guadeloupe\" ],\n\t[ \"925\", \"Logan\", \"Christensen\", \"Y6L 8Z0\", \"Guatemala\" ],\n\t[ \"926\", \"Kirestin\", \"Griffith\", \"47900\", \"Micronesia\" ],\n\t[ \"927\", \"Kato\", \"Reeves\", \"93779\", \"Uruguay\" ],\n\t[ \"928\", \"Jonah\", \"Suarez\", \"13708\", \"Spain\" ],\n\t[ \"929\", \"Adam\", \"Lynn\", \"E1P 1L3\", \"Indonesia\" ],\n\t[ \"930\", \"Quinn\", \"Mckinney\", \"99683\", \"Faroe Islands\" ],\n\t[ \"931\", \"Whilemina\", \"Macias\", \"32145\", \"Iceland\" ],\n\t[ \"932\", \"Gillian\", \"Osborne\", \"L3L 6G0\", \"Italy\" ],\n\t[ \"933\", \"Venus\", \"Zamora\", \"28318\", \"Comoros\" ],\n\t[ \"934\", \"Allegra\", \"Eaton\", \"P5X 9S0\", \"Antarctica\" ],\n\t[ \"935\", \"Driscoll\", \"Preston\", \"R3L 9R0\", \"Niue\" ],\n\t[ \"936\", \"Joel\", \"Spencer\", \"12006\", \"Monaco\" ],\n\t[ \"937\", \"Lucius\", \"Sharp\", \"B8V 6U7\", \"Dominica\" ],\n\t[ \"938\", \"Curran\", \"Robinson\", \"82216\", \"Romania\" ],\n\t[ \"939\", \"Kerry\", \"Espinoza\", \"N4B 7Q1\", \"Guatemala\" ],\n\t[ \"940\", \"Isaac\", \"Kline\", \"85674\", \"Costa Rica\" ],\n\t[ \"941\", \"Neil\", \"Harrison\", \"I5A 2S2\", \"Greenland\" ],\n\t[ \"942\", \"Ezra\", \"Rodriguez\", \"D6P 5Q3\", \"Angola\" ],\n\t[ \"943\", \"Galvin\", \"Jefferson\", \"D6H 7G0\", \"Macedonia\" ],\n\t[ \"944\", \"Joseph\", \"Hahn\", \"Z8V 9B5\", \"Uganda\" ],\n\t[ \"945\", \"Naida\", \"Hammond\", \"40105\", \"Philippines\" ],\n\t[ \"946\", \"Brenna\", \"Everett\", \"41704\", \"Indonesia\" ],\n\t[ \"947\", \"Rae\", \"Parks\", \"79077\", \"Sweden\" ],\n\t[ \"948\", \"Jessica\", \"Richard\", \"Y3I 5R3\", \"Uganda\" ],\n\t[ \"949\", \"Rachel\", \"Marks\", \"16157\", \"Cameroon\" ],\n\t[ \"950\", \"Maxwell\", \"Ferguson\", \"V6A 6M0\", \"Ukraine\" ],\n\t[ \"951\", \"Alyssa\", \"Beard\", \"13936\", \"Antarctica\" ],\n\t[ \"952\", \"Camille\", \"Gill\", \"V9Q 9P7\", \"New Caledonia\" ],\n\t[ \"953\", \"Cora\", \"Bond\", \"M9X 1A4\", \"Seychelles\" ],\n\t[ \"954\", \"Peter\", \"Acosta\", \"07937\", \"Chile\" ],\n\t[ \"955\", \"Ella\", \"Poole\", \"A3F 9Z1\", \"Panama\" ],\n\t[ \"956\", \"Ashely\", \"Guerrero\", \"37436\", \"Central African Republic\" ],\n\t[ \"957\", \"Mikayla\", \"Johnston\", \"L9W 5T8\", \"Cameroon\" ],\n\t[ \"958\", \"Ora\", \"Weaver\", \"65897\", \"Turks and Caicos Islands\" ],\n\t[ \"959\", \"Timon\", \"Barnes\", \"R6J 1J7\", \"Djibouti\" ],\n\t[ \"960\", \"Jamalia\", \"Wade\", \"22211\", \"United States\" ],\n\t[ \"961\", \"Bradley\", \"Haney\", \"K1H 1Q1\", \"Western Sahara\" ],\n\t[ \"962\", \"Lance\", \"Le\", \"H4R 9T7\", \"Botswana\" ],\n\t[ \"963\", \"Ethan\", \"Rich\", \"T8N 1C6\", \"Netherlands\" ],\n\t[ \"964\", \"Jeanette\", \"Carver\", \"G1E 5C8\", \"Cook Islands\" ],\n\t[ \"965\", \"Ocean\", \"Marquez\", \"15084\", \"Pakistan\" ],\n\t[ \"966\", \"Ifeoma\", \"Cleveland\", \"R9D 6M1\", \"French Guiana\" ],\n\t[ \"967\", \"Sylvia\", \"Herring\", \"U4R 8P1\", \"Thailand\" ],\n\t[ \"968\", \"Clare\", \"Huffman\", \"Q5G 2Q0\", \"Niger\" ],\n\t[ \"969\", \"Colton\", \"Leach\", \"V3F 9W6\", \"Syrian Arab Republic\" ],\n\t[ \"970\", \"Maryam\", \"Hoover\", \"Y7U 6N3\", \"Slovakia\" ],\n\t[ \"971\", \"Nola\", \"Snider\", \"54275\", \"Bosnia and Herzegovina\" ],\n\t[ \"972\", \"Kameko\", \"Cote\", \"M3C 8N0\", \"Cambodia\" ],\n\t[ \"973\", \"Julian\", \"Pugh\", \"B6E 7J7\", \"Mauritania\" ],\n\t[ \"974\", \"Xena\", \"Lott\", \"52294\", \"Estonia\" ],\n\t[ \"975\", \"Fuller\", \"Kirk\", \"65396\", \"Qatar\" ],\n\t[ \"976\", \"Lance\", \"Knox\", \"78074\", \"Serbia and Montenegro\" ],\n\t[ \"977\", \"Hedwig\", \"Beck\", \"T5P 4C8\", \"Dominican Republic\" ],\n\t[ \"978\", \"Martena\", \"Diaz\", \"65420\", \"Saint Pierre and Miquelon\" ],\n\t[ \"979\", \"Shafira\", \"David\", \"74843\", \"Senegal\" ],\n\t[ \"980\", \"Shafira\", \"Clark\", \"T6F 5C7\", \"Mongolia\" ],\n\t[ \"981\", \"Georgia\", \"Booth\", \"28183\", \"Japan\" ],\n\t[ \"982\", \"Cameron\", \"Austin\", \"I2J 1R1\", \"Bahrain\" ],\n\t[ \"983\", \"Vanna\", \"Hyde\", \"82434\", \"Croatia\" ],\n\t[ \"984\", \"Deanna\", \"Park\", \"68486\", \"Zimbabwe\" ],\n\t[ \"985\", \"Grady\", \"Freeman\", \"U4O 1Q9\", \"Belarus\" ],\n\t[ \"986\", \"Sandra\", \"Knapp\", \"31413\", \"Sudan\" ],\n\t[ \"987\", \"Dorian\", \"Joseph\", \"90768\", \"Lithuania\" ],\n\t[ \"988\", \"Adria\", \"Bonner\", \"15899\", \"Mongolia\" ],\n\t[ \"989\", \"Sebastian\", \"Guzman\", \"G9L 9G5\", \"Yemen\" ],\n\t[ \"990\", \"Angelica\", \"Puckett\", \"W8D 8W8\", \"Virgin Islands, U.S.\" ],\n\t[ \"991\", \"Connor\", \"Parks\", \"26175\", \"Virgin Islands, U.S.\" ],\n\t[ \"992\", \"Yardley\", \"Griffith\", \"H3L 2U3\", \"Saint Pierre and Miquelon\" ],\n\t[ \"993\", \"Charissa\", \"Beck\", \"30611\", \"Zambia\" ],\n\t[ \"994\", \"Calvin\", \"Russo\", \"79906\", \"Chile\" ],\n\t[ \"995\", \"Yoshi\", \"Durham\", \"N2J 8M8\", \"China\" ],\n\t[ \"996\", \"Finn\", \"Buck\", \"Q9F 9Z8\", \"Iraq\" ],\n\t[ \"997\", \"Kessie\", \"Holden\", \"C4A 1J0\", \"Syrian Arab Republic\" ],\n\t[ \"998\", \"Chloe\", \"Richards\", \"63091\", \"Canada\" ],\n\t[ \"999\", \"Uriel\", \"Snyder\", \"95487\", \"Pakistan\" ],\n\t[ \"1000\", \"Maite\", \"Cash\", \"90705\", \"Syrian Arab Republic\" ],\n\t[ \"1001\", \"Cameron\", \"Schwartz\", \"82778\", \"Taiwan, Province of China\" ],\n\t[ \"1002\", \"Faith\", \"Jimenez\", \"J6K 2P9\", \"Saint Pierre and Miquelon\" ],\n\t[ \"1003\", \"Otto\", \"Hancock\", \"34535\", \"Andorra\" ],\n\t[ \"1004\", \"Harlan\", \"Blackwell\", \"N8Y 4E6\", \"Qatar\" ],\n\t[ \"1005\", \"Fitzgerald\", \"Gilliam\", \"Y9J 6J5\", \"Burkina Faso\" ],\n\t[ \"1006\", \"Lev\", \"Ballard\", \"01956\", \"American Samoa\" ],\n\t[ \"1007\", \"Freya\", \"Brown\", \"01190\", \"Portugal\" ],\n\t[ \"1008\", \"Harding\", \"Osborn\", \"14814\", \"San Marino\" ],\n\t[ \"1009\", \"Alexander\", \"Howard\", \"81842\", \"Reunion\" ],\n\t[ \"1010\", \"Ori\", \"Marsh\", \"77738\", \"Saint Helena\" ],\n\t[ \"1011\", \"Brennan\", \"Rich\", \"18690\", \"Cambodia\" ],\n\t[ \"1012\", \"Dawn\", \"Christensen\", \"Y8F 7R3\", \"Mali\" ],\n\t[ \"1013\", \"Ahmed\", \"Pearson\", \"62230\", \"Sudan\" ],\n\t[ \"1014\", \"Tanek\", \"Head\", \"25744\", \"Kiribati\" ],\n\t[ \"1015\", \"Meredith\", \"Cantu\", \"E6X 2L1\", \"Kenya\" ],\n\t[ \"1016\", \"Levi\", \"Fisher\", \"I9Y 9G2\", \"Djibouti\" ],\n\t[ \"1017\", \"Katell\", \"Cameron\", \"10278\", \"Denmark\" ],\n\t[ \"1018\", \"Ina\", \"Orr\", \"P7H 2O3\", \"Congo\" ],\n\t[ \"1019\", \"Beck\", \"Hayden\", \"15115\", \"Saint Lucia\" ],\n\t[ \"1020\", \"Cassady\", \"Wagner\", \"R9H 8C5\", \"Estonia\" ],\n\t[ \"1021\", \"Amena\", \"Herrera\", \"13286\", \"Bahrain\" ],\n\t[ \"1022\", \"Tarik\", \"Gross\", \"C3X 3W0\", \"Azerbaijan\" ],\n\t[ \"1023\", \"Marshall\", \"Collier\", \"13416\", \"Dominica\" ],\n\t[ \"1024\", \"Kirestin\", \"Callahan\", \"15429\", \"Micronesia\" ],\n\t[ \"1025\", \"Sasha\", \"Rice\", \"O6H 6X2\", \"Denmark\" ],\n\t[ \"1026\", \"Ross\", \"Gonzalez\", \"D3B 3R5\", \"Sudan\" ],\n\t[ \"1027\", \"Veda\", \"Arnold\", \"56611\", \"Swaziland\" ],\n\t[ \"1028\", \"Ferdinand\", \"Macias\", \"P1Q 3I2\", \"Colombia\" ],\n\t[ \"1029\", \"Mohammad\", \"Reed\", \"74005\", \"Bhutan\" ],\n\t[ \"1030\", \"Reagan\", \"Sandoval\", \"19275\", \"Pitcairn\" ],\n\t[ \"1031\", \"Debra\", \"Nelson\", \"85945\", \"Ukraine\" ],\n\t[ \"1032\", \"Cleo\", \"Robertson\", \"84072\", \"Guadeloupe\" ],\n\t[ \"1033\", \"Tanya\", \"Vance\", \"C1F 7F1\", \"Romania\" ],\n\t[ \"1034\", \"Desirae\", \"Wooten\", \"74659\", \"Mongolia\" ],\n\t[ \"1035\", \"Hiram\", \"Estes\", \"Q5Z 5A0\", \"Namibia\" ],\n\t[ \"1036\", \"Medge\", \"Weiss\", \"67079\", \"Azerbaijan\" ],\n\t[ \"1037\", \"Hu\", \"Chase\", \"87562\", \"Cuba\" ],\n\t[ \"1038\", \"Shafira\", \"Everett\", \"18983\", \"Georgia\" ],\n\t[ \"1039\", \"Mannix\", \"Lamb\", \"45542\", \"Venezuela\" ],\n\t[ \"1040\", \"Germaine\", \"Harvey\", \"I9G 1U0\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"1041\", \"Brenna\", \"Leonard\", \"55573\", \"New Zealand\" ],\n\t[ \"1042\", \"Kylie\", \"Rivas\", \"U9J 3O9\", \"Djibouti\" ],\n\t[ \"1043\", \"Alexandra\", \"Rich\", \"T4O 6S6\", \"Cuba\" ],\n\t[ \"1044\", \"Dorian\", \"Spears\", \"00456\", \"Brazil\" ],\n\t[ \"1045\", \"Laurel\", \"Abbott\", \"45449\", \"Switzerland\" ],\n\t[ \"1046\", \"Gabriel\", \"Drake\", \"U1S 5O2\", \"Trinidad and Tobago\" ],\n\t[ \"1047\", \"Priscilla\", \"Mercer\", \"01401\", \"Serbia and Montenegro\" ],\n\t[ \"1048\", \"Darius\", \"Hoffman\", \"49694\", \"Greece\" ],\n\t[ \"1049\", \"Caesar\", \"Patton\", \"42322\", \"Suriname\" ],\n\t[ \"1050\", \"Susan\", \"Clayton\", \"W1G 5C3\", \"Maldives\" ],\n\t[ \"1051\", \"Zane\", \"Dunlap\", \"73722\", \"Oman\" ],\n\t[ \"1052\", \"Leah\", \"Fuentes\", \"60412\", \"Luxembourg\" ],\n\t[ \"1053\", \"Yardley\", \"Hansen\", \"03194\", \"Mauritius\" ],\n\t[ \"1054\", \"Ingrid\", \"Talley\", \"37315\", \"Solomon Islands\" ],\n\t[ \"1055\", \"Demetria\", \"Evans\", \"30587\", \"Tajikistan\" ],\n\t[ \"1056\", \"Ignacia\", \"Alford\", \"01282\", \"Bouvet Island\" ],\n\t[ \"1057\", \"Destiny\", \"Wade\", \"L5R 3V3\", \"Uganda\" ],\n\t[ \"1058\", \"Alden\", \"Mason\", \"V7D 2V6\", \"Dominican Republic\" ],\n\t[ \"1059\", \"Pamela\", \"Wilcox\", \"L1I 6I1\", \"Canada\" ],\n\t[ \"1060\", \"Melvin\", \"Buckley\", \"05478\", \"Hungary\" ],\n\t[ \"1061\", \"Eve\", \"Holcomb\", \"B6B 8T1\", \"Cook Islands\" ],\n\t[ \"1062\", \"Arthur\", \"Weeks\", \"R5P 7U2\", \"Bangladesh\" ],\n\t[ \"1063\", \"Marah\", \"Levine\", \"10075\", \"Somalia\" ],\n\t[ \"1064\", \"Keiko\", \"Freeman\", \"90950\", \"Faroe Islands\" ],\n\t[ \"1065\", \"Dorian\", \"Rose\", \"T5M 4Z0\", \"Fiji\" ],\n\t[ \"1066\", \"Desirae\", \"Velez\", \"T4E 8K2\", \"Afghanistan\" ],\n\t[ \"1067\", \"Rebekah\", \"Lucas\", \"T9A 8V5\", \"Tunisia\" ],\n\t[ \"1068\", \"Sylvester\", \"Copeland\", \"W6R 3B6\", \"Jamaica\" ],\n\t[ \"1069\", \"Alea\", \"Preston\", \"31050\", \"Netherlands Antilles\" ],\n\t[ \"1070\", \"Aphrodite\", \"Gordon\", \"T7C 6T8\", \"Sao Tome and Principe\" ],\n\t[ \"1071\", \"Yael\", \"Delaney\", \"G9W 9P1\", \"Mexico\" ],\n\t[ \"1072\", \"Sierra\", \"Perez\", \"R3O 8H0\", \"Slovenia\" ],\n\t[ \"1073\", \"Avram\", \"Briggs\", \"05221\", \"Norfolk Island\" ],\n\t[ \"1074\", \"Troy\", \"Poole\", \"W7Q 8O5\", \"Malta\" ],\n\t[ \"1075\", \"Gavin\", \"Sandoval\", \"37352\", \"Greece\" ],\n\t[ \"1076\", \"Nerea\", \"Stokes\", \"N2Q 6S9\", \"United States\" ],\n\t[ \"1077\", \"Genevieve\", \"Ramirez\", \"53829\", \"Mali\" ],\n\t[ \"1078\", \"Oliver\", \"Boone\", \"M1Q 8V9\", \"Bolivia\" ],\n\t[ \"1079\", \"Lars\", \"Ramirez\", \"L2R 6V2\", \"Bosnia and Herzegovina\" ],\n\t[ \"1080\", \"Abbot\", \"Horton\", \"R1R 1V8\", \"Netherlands Antilles\" ],\n\t[ \"1081\", \"Abra\", \"Avila\", \"41608\", \"Congo\" ],\n\t[ \"1082\", \"Candice\", \"Christian\", \"13930\", \"Faroe Islands\" ],\n\t[ \"1083\", \"Flavia\", \"Miranda\", \"93964\", \"Estonia\" ],\n\t[ \"1084\", \"Medge\", \"Drake\", \"Q7C 2E2\", \"Belize\" ],\n\t[ \"1085\", \"Lee\", \"Montgomery\", \"H3T 4Q6\", \"Costa Rica\" ],\n\t[ \"1086\", \"Aline\", \"Ratliff\", \"99839\", \"Macao\" ],\n\t[ \"1087\", \"Shafira\", \"Fox\", \"A9S 7C8\", \"Palestinian Territory, Occupied\" ],\n\t[ \"1088\", \"Orson\", \"Greene\", \"K9L 7R8\", \"Myanmar\" ],\n\t[ \"1089\", \"Henry\", \"Joyner\", \"55853\", \"South Africa\" ],\n\t[ \"1090\", \"Keely\", \"Boyer\", \"08996\", \"Liberia\" ],\n\t[ \"1091\", \"Jerome\", \"Jones\", \"31770\", \"Saint Lucia\" ],\n\t[ \"1092\", \"Hermione\", \"Dunlap\", \"U2R 7R2\", \"Moldova\" ],\n\t[ \"1093\", \"Lenore\", \"Powers\", \"73772\", \"Tunisia\" ],\n\t[ \"1094\", \"Alden\", \"Newman\", \"V4C 3O8\", \"Bhutan\" ],\n\t[ \"1095\", \"Jasper\", \"Blevins\", \"K2H 5W0\", \"Paraguay\" ],\n\t[ \"1096\", \"Robert\", \"Bender\", \"R5F 1H9\", \"Philippines\" ],\n\t[ \"1097\", \"Bo\", \"Richard\", \"N5R 6T2\", \"Trinidad and Tobago\" ],\n\t[ \"1098\", \"Iliana\", \"Mcpherson\", \"23758\", \"Bangladesh\" ],\n\t[ \"1099\", \"Alfreda\", \"Camacho\", \"35387\", \"Saint Helena\" ],\n\t[ \"1100\", \"Kirsten\", \"Giles\", \"14079\", \"Romania\" ],\n\t[ \"1101\", \"Harlan\", \"Crawford\", \"84847\", \"French Polynesia\" ],\n\t[ \"1102\", \"Wynne\", \"Bauer\", \"W9D 6F6\", \"Kazakhstan\" ],\n\t[ \"1103\", \"Connor\", \"Melton\", \"E2F 4Q2\", \"Angola\" ],\n\t[ \"1104\", \"Evelyn\", \"Barry\", \"I9H 8W7\", \"Turkmenistan\" ],\n\t[ \"1105\", \"Barry\", \"Stephens\", \"07823\", \"Gibraltar\" ],\n\t[ \"1106\", \"Ferris\", \"Farrell\", \"I7H 5Z6\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"1107\", \"Ursa\", \"Carr\", \"31124\", \"Chad\" ],\n\t[ \"1108\", \"Laith\", \"Johnson\", \"10428\", \"Cyprus\" ],\n\t[ \"1109\", \"Harlan\", \"Frank\", \"J6K 7I6\", \"Gambia\" ],\n\t[ \"1110\", \"Gregory\", \"Ratliff\", \"P1C 8H2\", \"Chile\" ],\n\t[ \"1111\", \"Rina\", \"Holloway\", \"Y7N 1E7\", \"Estonia\" ],\n\t[ \"1112\", \"Maris\", \"Joyner\", \"T6R 2H9\", \"France\" ],\n\t[ \"1113\", \"Galvin\", \"Webster\", \"V8E 9U4\", \"Croatia\" ],\n\t[ \"1114\", \"Farrah\", \"Bean\", \"H2B 8E2\", \"Palestinian Territory, Occupied\" ],\n\t[ \"1115\", \"Martha\", \"Schroeder\", \"14485\", \"Georgia\" ],\n\t[ \"1116\", \"Mari\", \"Boone\", \"D4C 1Q0\", \"Comoros\" ],\n\t[ \"1117\", \"Nadine\", \"Mercado\", \"35046\", \"Syrian Arab Republic\" ],\n\t[ \"1118\", \"Isadora\", \"Keith\", \"R5H 8Y7\", \"Mayotte\" ],\n\t[ \"1119\", \"Quinn\", \"William\", \"V8Q 3Y6\", \"India\" ],\n\t[ \"1120\", \"Justina\", \"Gilbert\", \"11271\", \"Yemen\" ],\n\t[ \"1121\", \"Jordan\", \"Hull\", \"F4Z 7R8\", \"Lesotho\" ],\n\t[ \"1122\", \"Mechelle\", \"Davenport\", \"A9Z 8P2\", \"Bermuda\" ],\n\t[ \"1123\", \"Isabelle\", \"Webster\", \"60972\", \"Zimbabwe\" ],\n\t[ \"1124\", \"Armand\", \"Butler\", \"Y3F 4H9\", \"Nicaragua\" ],\n\t[ \"1125\", \"Herman\", \"Beach\", \"Q8N 6V3\", \"Cape Verde\" ],\n\t[ \"1126\", \"Brianna\", \"Love\", \"D9B 2W8\", \"Sierra Leone\" ],\n\t[ \"1127\", \"Joy\", \"Brown\", \"O7V 7C1\", \"Djibouti\" ],\n\t[ \"1128\", \"Amena\", \"Moss\", \"P8D 1L9\", \"Andorra\" ],\n\t[ \"1129\", \"Zeph\", \"Whitehead\", \"01513\", \"Tanzania, United Republic of\" ],\n\t[ \"1130\", \"Logan\", \"Matthews\", \"73541\", \"Finland\" ],\n\t[ \"1131\", \"Amela\", \"Gregory\", \"65323\", \"Swaziland\" ],\n\t[ \"1132\", \"Zoe\", \"Owen\", \"V5L 5O6\", \"Zambia\" ],\n\t[ \"1133\", \"September\", \"Hewitt\", \"R8K 4G9\", \"Congo\" ],\n\t[ \"1134\", \"Holly\", \"Walter\", \"S2E 3M4\", \"Serbia and Montenegro\" ],\n\t[ \"1135\", \"Zeph\", \"Beach\", \"J6Z 8B5\", \"Ecuador\" ],\n\t[ \"1136\", \"Morgan\", \"Decker\", \"M9H 8I5\", \"Uruguay\" ],\n\t[ \"1137\", \"Malcolm\", \"Maldonado\", \"S6F 8X6\", \"Netherlands\" ],\n\t[ \"1138\", \"Fay\", \"Day\", \"B9R 1U7\", \"Seychelles\" ],\n\t[ \"1139\", \"Charles\", \"Juarez\", \"62791\", \"Virgin Islands, U.S.\" ],\n\t[ \"1140\", \"Amery\", \"Stout\", \"L9A 1F8\", \"Central African Republic\" ],\n\t[ \"1141\", \"Irene\", \"Ferrell\", \"52649\", \"Norway\" ],\n\t[ \"1142\", \"Dean\", \"Stout\", \"N5C 2S8\", \"Uruguay\" ],\n\t[ \"1143\", \"Eric\", \"Baxter\", \"82082\", \"Chile\" ],\n\t[ \"1144\", \"Shelley\", \"Larsen\", \"Y4T 4P3\", \"Antarctica\" ],\n\t[ \"1145\", \"Rigel\", \"Ellis\", \"E3S 6K8\", \"Zimbabwe\" ],\n\t[ \"1146\", \"Maite\", \"Rosa\", \"F6C 5Q9\", \"Zambia\" ],\n\t[ \"1147\", \"Serena\", \"Blanchard\", \"99373\", \"Estonia\" ],\n\t[ \"1148\", \"Melanie\", \"Berger\", \"C5P 4E2\", \"Mozambique\" ],\n\t[ \"1149\", \"Noah\", \"Spence\", \"B8H 7X7\", \"Martinique\" ],\n\t[ \"1150\", \"Elliott\", \"Pierce\", \"W5B 8V7\", \"Swaziland\" ],\n\t[ \"1151\", \"Ahmed\", \"Chang\", \"E9X 7J0\", \"Bulgaria\" ],\n\t[ \"1152\", \"Ross\", \"Figueroa\", \"22458\", \"China\" ],\n\t[ \"1153\", \"Gary\", \"Calderon\", \"V3C 4J8\", \"Algeria\" ],\n\t[ \"1154\", \"Montana\", \"Franklin\", \"94093\", \"Haiti\" ],\n\t[ \"1155\", \"Rae\", \"Curry\", \"45477\", \"Morocco\" ],\n\t[ \"1156\", \"Jillian\", \"Hogan\", \"N8L 4B5\", \"Iceland\" ],\n\t[ \"1157\", \"Mia\", \"Kaufman\", \"54758\", \"Burkina Faso\" ],\n\t[ \"1158\", \"Remedios\", \"Wilkerson\", \"75420\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"1159\", \"Xanthus\", \"Baldwin\", \"13961\", \"Congo\" ],\n\t[ \"1160\", \"Madeline\", \"Gates\", \"76351\", \"Saint Helena\" ],\n\t[ \"1161\", \"Leroy\", \"Craig\", \"12770\", \"Finland\" ],\n\t[ \"1162\", \"Melanie\", \"Carpenter\", \"C3B 8L4\", \"Mayotte\" ],\n\t[ \"1163\", \"Ashely\", \"Mcneil\", \"E7E 9K5\", \"French Southern Territories\" ],\n\t[ \"1164\", \"Karina\", \"Mcneil\", \"39956\", \"United Arab Emirates\" ],\n\t[ \"1165\", \"Nina\", \"Mills\", \"92913\", \"Saint Kitts and Nevis\" ],\n\t[ \"1166\", \"Ashton\", \"Singleton\", \"73890\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"1167\", \"Meghan\", \"Black\", \"31814\", \"Armenia\" ],\n\t[ \"1168\", \"Jolene\", \"Pope\", \"U6K 7O6\", \"Venezuela\" ],\n\t[ \"1169\", \"Abel\", \"Boyd\", \"37110\", \"Botswana\" ],\n\t[ \"1170\", \"Tiger\", \"Coffey\", \"Y6P 3S4\", \"Faroe Islands\" ],\n\t[ \"1171\", \"Aileen\", \"Rowe\", \"F7G 8D9\", \"Netherlands Antilles\" ],\n\t[ \"1172\", \"Bryar\", \"Forbes\", \"T2N 5H6\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"1173\", \"Vera\", \"Hoffman\", \"36299\", \"Guadeloupe\" ],\n\t[ \"1174\", \"Hadassah\", \"Wright\", \"S8J 5B2\", \"Peru\" ],\n\t[ \"1175\", \"Bruce\", \"Blair\", \"Q8E 7K6\", \"Cape Verde\" ],\n\t[ \"1176\", \"Brianna\", \"Wolf\", \"V8S 5A6\", \"Bahamas\" ],\n\t[ \"1177\", \"Kimberley\", \"Reed\", \"17652\", \"Tajikistan\" ],\n\t[ \"1178\", \"Colin\", \"Phelps\", \"42334\", \"Brunei Darussalam\" ],\n\t[ \"1179\", \"Gil\", \"Britt\", \"U3N 6C2\", \"Swaziland\" ],\n\t[ \"1180\", \"Hasad\", \"Pena\", \"09526\", \"United States\" ],\n\t[ \"1181\", \"Violet\", \"Dixon\", \"48691\", \"Micronesia\" ],\n\t[ \"1182\", \"Uriel\", \"Bowen\", \"Z7F 7A7\", \"Uzbekistan\" ],\n\t[ \"1183\", \"Madeline\", \"Keller\", \"18227\", \"Iran, Islamic Republic of\" ],\n\t[ \"1184\", \"Buffy\", \"Mckee\", \"23861\", \"Ethiopia\" ],\n\t[ \"1185\", \"Doris\", \"Martin\", \"V8N 8O7\", \"Liberia\" ],\n\t[ \"1186\", \"Mia\", \"Burke\", \"64582\", \"Virgin Islands, British\" ],\n\t[ \"1187\", \"William\", \"Kemp\", \"63587\", \"Tuvalu\" ],\n\t[ \"1188\", \"Stacy\", \"Quinn\", \"01390\", \"Nauru\" ],\n\t[ \"1189\", \"Halla\", \"Solomon\", \"31138\", \"Pakistan\" ],\n\t[ \"1190\", \"Kasimir\", \"Rodriguez\", \"67823\", \"Costa Rica\" ],\n\t[ \"1191\", \"Davis\", \"Lawrence\", \"27918\", \"Rwanda\" ],\n\t[ \"1192\", \"Nigel\", \"Bryan\", \"L5U 2U9\", \"Seychelles\" ],\n\t[ \"1193\", \"Ivana\", \"Stone\", \"94862\", \"Niue\" ],\n\t[ \"1194\", \"Naomi\", \"Yang\", \"68985\", \"Haiti\" ],\n\t[ \"1195\", \"Roanna\", \"Brown\", \"51196\", \"India\" ],\n\t[ \"1196\", \"Colorado\", \"Chavez\", \"45634\", \"Brazil\" ],\n\t[ \"1197\", \"Illana\", \"Levy\", \"V1A 7R8\", \"Jordan\" ],\n\t[ \"1198\", \"Ali\", \"Lowe\", \"N8K 1Y5\", \"Hungary\" ],\n\t[ \"1199\", \"Virginia\", \"Witt\", \"Y3O 5W8\", \"Azerbaijan\" ],\n\t[ \"1200\", \"Howard\", \"Flores\", \"I9C 3Q7\", \"Fiji\" ],\n\t[ \"1201\", \"Walter\", \"Odom\", \"78418\", \"Thailand\" ],\n\t[ \"1202\", \"Thor\", \"Craig\", \"00935\", \"Jamaica\" ],\n\t[ \"1203\", \"Petra\", \"Barry\", \"E5L 5K5\", \"Finland\" ],\n\t[ \"1204\", \"Lev\", \"Ellison\", \"I6S 1K1\", \"Mongolia\" ],\n\t[ \"1205\", \"Roth\", \"Osborne\", \"15014\", \"Swaziland\" ],\n\t[ \"1206\", \"Lucius\", \"Baldwin\", \"12766\", \"China\" ],\n\t[ \"1207\", \"Candice\", \"Hyde\", \"B5E 4B8\", \"Bahamas\" ],\n\t[ \"1208\", \"Maggy\", \"Bailey\", \"76781\", \"Northern Mariana Islands\" ],\n\t[ \"1209\", \"Beatrice\", \"Gregory\", \"S5S 8S4\", \"Rwanda\" ],\n\t[ \"1210\", \"Adrian\", \"Bowman\", \"58500\", \"Vanuatu\" ],\n\t[ \"1211\", \"Brenden\", \"Chandler\", \"50326\", \"Thailand\" ],\n\t[ \"1212\", \"Jada\", \"Richmond\", \"15990\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"1213\", \"Sawyer\", \"Page\", \"G2W 7R7\", \"Somalia\" ],\n\t[ \"1214\", \"Haley\", \"Jordan\", \"U7X 4U2\", \"Equatorial Guinea\" ],\n\t[ \"1215\", \"Ruby\", \"Watson\", \"30990\", \"Romania\" ],\n\t[ \"1216\", \"Jocelyn\", \"Knowles\", \"78987\", \"Lebanon\" ],\n\t[ \"1217\", \"Preston\", \"Stevenson\", \"F3L 9B3\", \"Mali\" ],\n\t[ \"1218\", \"Kimberly\", \"Merritt\", \"38779\", \"Venezuela\" ],\n\t[ \"1219\", \"Herrod\", \"Burke\", \"56225\", \"French Guiana\" ],\n\t[ \"1220\", \"Solomon\", \"Shannon\", \"67980\", \"Cape Verde\" ],\n\t[ \"1221\", \"Bradley\", \"Stokes\", \"10213\", \"Botswana\" ],\n\t[ \"1222\", \"Grace\", \"Kinney\", \"67923\", \"Montserrat\" ],\n\t[ \"1223\", \"Celeste\", \"Clark\", \"S7M 6I2\", \"Guatemala\" ],\n\t[ \"1224\", \"Patricia\", \"Frank\", \"05615\", \"Venezuela\" ],\n\t[ \"1225\", \"Madonna\", \"Alford\", \"10878\", \"Brunei Darussalam\" ],\n\t[ \"1226\", \"May\", \"Rios\", \"N7O 2L0\", \"Georgia\" ],\n\t[ \"1227\", \"Driscoll\", \"Roach\", \"Y7F 9F8\", \"Palestinian Territory, Occupied\" ],\n\t[ \"1228\", \"Idona\", \"Cruz\", \"T6Q 8L4\", \"Iraq\" ],\n\t[ \"1229\", \"Sydney\", \"Delacruz\", \"69511\", \"United Arab Emirates\" ],\n\t[ \"1230\", \"Gillian\", \"Huff\", \"52624\", \"French Southern Territories\" ],\n\t[ \"1231\", \"Minerva\", \"Rosario\", \"29195\", \"Andorra\" ],\n\t[ \"1232\", \"Kerry\", \"Alvarado\", \"L3Q 2V5\", \"Portugal\" ],\n\t[ \"1233\", \"Amos\", \"Bass\", \"26389\", \"Holy See (Vatican City State)\" ],\n\t[ \"1234\", \"Deanna\", \"Parks\", \"57376\", \"Estonia\" ],\n\t[ \"1235\", \"Fitzgerald\", \"Green\", \"M3P 9N2\", \"Slovenia\" ],\n\t[ \"1236\", \"Sade\", \"Hinton\", \"35561\", \"Barbados\" ],\n\t[ \"1237\", \"Suki\", \"Parsons\", \"44591\", \"Syrian Arab Republic\" ],\n\t[ \"1238\", \"Orli\", \"Weeks\", \"K2W 9L4\", \"Peru\" ],\n\t[ \"1239\", \"Nicholas\", \"Copeland\", \"I5W 7A4\", \"French Guiana\" ],\n\t[ \"1240\", \"Guy\", \"Vang\", \"22277\", \"Pitcairn\" ],\n\t[ \"1241\", \"Hunter\", \"Goodman\", \"72290\", \"Malaysia\" ],\n\t[ \"1242\", \"Noble\", \"Rich\", \"I3B 6T9\", \"Gibraltar\" ],\n\t[ \"1243\", \"Delilah\", \"Zamora\", \"96328\", \"New Zealand\" ],\n\t[ \"1244\", \"Sybil\", \"Mercer\", \"93665\", \"Namibia\" ],\n\t[ \"1245\", \"Scarlett\", \"Brock\", \"Z2E 3J2\", \"Central African Republic\" ],\n\t[ \"1246\", \"Channing\", \"Alexander\", \"W5V 8D2\", \"San Marino\" ],\n\t[ \"1247\", \"Carolyn\", \"Boyle\", \"Q5Z 9E6\", \"Gabon\" ],\n\t[ \"1248\", \"Irene\", \"Jennings\", \"F3H 4O6\", \"Saint Helena\" ],\n\t[ \"1249\", \"Bianca\", \"Pratt\", \"66354\", \"Malaysia\" ],\n\t[ \"1250\", \"Dexter\", \"Cole\", \"56106\", \"French Southern Territories\" ],\n\t[ \"1251\", \"Berk\", \"Velez\", \"26759\", \"Lesotho\" ],\n\t[ \"1252\", \"Barrett\", \"Richardson\", \"59446\", \"Cocos (Keeling) Islands\" ],\n\t[ \"1253\", \"Scarlet\", \"Jacobs\", \"G9A 7L6\", \"Dominica\" ],\n\t[ \"1254\", \"Aiko\", \"Brooks\", \"R6R 9E4\", \"Liberia\" ],\n\t[ \"1255\", \"Jacob\", \"Moore\", \"P2Y 6P3\", \"Cambodia\" ],\n\t[ \"1256\", \"Madeline\", \"Bishop\", \"D4I 2E7\", \"Dominican Republic\" ],\n\t[ \"1257\", \"Jarrod\", \"Evans\", \"C9O 7V7\", \"Taiwan, Province of China\" ],\n\t[ \"1258\", \"Beverly\", \"Witt\", \"64850\", \"Denmark\" ],\n\t[ \"1259\", \"Karyn\", \"Rhodes\", \"D6G 5Z3\", \"Cape Verde\" ],\n\t[ \"1260\", \"Imani\", \"Quinn\", \"01897\", \"Macao\" ],\n\t[ \"1261\", \"Athena\", \"Eaton\", \"03568\", \"Syrian Arab Republic\" ],\n\t[ \"1262\", \"Raymond\", \"Valdez\", \"21037\", \"Romania\" ],\n\t[ \"1263\", \"Christopher\", \"Ferguson\", \"64945\", \"Indonesia\" ],\n\t[ \"1264\", \"Latifah\", \"Harris\", \"91381\", \"Suriname\" ],\n\t[ \"1265\", \"Dacey\", \"Wagner\", \"81483\", \"Qatar\" ],\n\t[ \"1266\", \"Summer\", \"Myers\", \"H6A 1G5\", \"Angola\" ],\n\t[ \"1267\", \"Jasmine\", \"Rivera\", \"Y4W 8P2\", \"Virgin Islands, British\" ],\n\t[ \"1268\", \"Cairo\", \"Massey\", \"Q6Y 7A7\", \"Poland\" ],\n\t[ \"1269\", \"Jena\", \"Hill\", \"89480\", \"United States Minor Outlying Islands\" ],\n\t[ \"1270\", \"Ava\", \"Benson\", \"L9H 8V1\", \"Sri Lanka\" ],\n\t[ \"1271\", \"Gillian\", \"Mercado\", \"A9W 6V5\", \"Norway\" ],\n\t[ \"1272\", \"Peter\", \"Marquez\", \"I5B 3W9\", \"Guyana\" ],\n\t[ \"1273\", \"Price\", \"Coleman\", \"X8G 2S0\", \"Burkina Faso\" ],\n\t[ \"1274\", \"Shana\", \"Harper\", \"L2B 3U9\", \"Malaysia\" ],\n\t[ \"1275\", \"Serina\", \"Matthews\", \"58061\", \"Lithuania\" ],\n\t[ \"1276\", \"Aretha\", \"Bryant\", \"Y8J 7A5\", \"Tonga\" ],\n\t[ \"1277\", \"Wesley\", \"Craig\", \"20141\", \"Australia\" ],\n\t[ \"1278\", \"Martena\", \"Mercer\", \"P6X 2L9\", \"Sudan\" ],\n\t[ \"1279\", \"Tamara\", \"Dennis\", \"D3H 9R0\", \"Mali\" ],\n\t[ \"1280\", \"Phelan\", \"Pena\", \"D2H 2H7\", \"United States Minor Outlying Islands\" ],\n\t[ \"1281\", \"Rebecca\", \"Kinney\", \"B5Z 9S4\", \"Antarctica\" ],\n\t[ \"1282\", \"Josephine\", \"Delgado\", \"81010\", \"Algeria\" ],\n\t[ \"1283\", \"Kieran\", \"Estes\", \"70093\", \"Bermuda\" ],\n\t[ \"1284\", \"Tamara\", \"Williamson\", \"90905\", \"French Guiana\" ],\n\t[ \"1285\", \"Dora\", \"Serrano\", \"W8K 6R5\", \"Nauru\" ],\n\t[ \"1286\", \"Morgan\", \"Bass\", \"B6F 8R2\", \"Madagascar\" ],\n\t[ \"1287\", \"Margaret\", \"Austin\", \"D2C 2C1\", \"Belgium\" ],\n\t[ \"1288\", \"Nasim\", \"Berry\", \"J9X 7M5\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"1289\", \"Jelani\", \"Rutledge\", \"34552\", \"Bolivia\" ],\n\t[ \"1290\", \"Cassady\", \"Hardin\", \"I2K 4H6\", \"Hong Kong\" ],\n\t[ \"1291\", \"Jenette\", \"Thornton\", \"44943\", \"Uganda\" ],\n\t[ \"1292\", \"Alexandra\", \"Sims\", \"93937\", \"Australia\" ],\n\t[ \"1293\", \"Ross\", \"Higgins\", \"61993\", \"Nicaragua\" ],\n\t[ \"1294\", \"Penelope\", \"Henson\", \"90344\", \"Trinidad and Tobago\" ],\n\t[ \"1295\", \"Yoshi\", \"Blackwell\", \"C8D 1T4\", \"Costa Rica\" ],\n\t[ \"1296\", \"Daria\", \"Rodriquez\", \"X3C 6L0\", \"Iceland\" ],\n\t[ \"1297\", \"Wesley\", \"Waller\", \"43947\", \"Myanmar\" ],\n\t[ \"1298\", \"Adam\", \"Hayden\", \"88969\", \"Italy\" ],\n\t[ \"1299\", \"Charity\", \"William\", \"46439\", \"Greece\" ],\n\t[ \"1300\", \"Ronan\", \"Hopper\", \"51955\", \"Zambia\" ],\n\t[ \"1301\", \"Geraldine\", \"Hatfield\", \"W9S 7T5\", \"Luxembourg\" ],\n\t[ \"1302\", \"Barry\", \"Nicholson\", \"79625\", \"Liechtenstein\" ],\n\t[ \"1303\", \"Donovan\", \"Ortiz\", \"68119\", \"Macao\" ],\n\t[ \"1304\", \"Jeanette\", \"Cooper\", \"D5P 9L2\", \"Sri Lanka\" ],\n\t[ \"1305\", \"Isadora\", \"Stephenson\", \"P4X 4H5\", \"Mauritania\" ],\n\t[ \"1306\", \"Hall\", \"Hays\", \"J2Z 2H1\", \"Svalbard and Jan Mayen\" ],\n\t[ \"1307\", \"Idola\", \"Roberson\", \"89249\", \"Niue\" ],\n\t[ \"1308\", \"Olympia\", \"Dennis\", \"69498\", \"Guinea\" ],\n\t[ \"1309\", \"Naida\", \"Palmer\", \"19840\", \"Gambia\" ],\n\t[ \"1310\", \"Maxine\", \"Rollins\", \"87856\", \"Belize\" ],\n\t[ \"1311\", \"Rooney\", \"Phelps\", \"48424\", \"Italy\" ],\n\t[ \"1312\", \"Shelly\", \"Edwards\", \"O7O 1U4\", \"Mali\" ],\n\t[ \"1313\", \"Cassidy\", \"Holcomb\", \"98785\", \"Colombia\" ],\n\t[ \"1314\", \"Sybil\", \"Moran\", \"F3C 6E4\", \"Switzerland\" ],\n\t[ \"1315\", \"Mufutau\", \"Larson\", \"00276\", \"British Indian Ocean Territory\" ],\n\t[ \"1316\", \"Fiona\", \"Bryant\", \"U7Y 7N6\", \"Cocos (Keeling) Islands\" ],\n\t[ \"1317\", \"Lenore\", \"Boyle\", \"H5G 6P9\", \"Sudan\" ],\n\t[ \"1318\", \"Ignacia\", \"Avila\", \"Y5M 1S2\", \"Romania\" ],\n\t[ \"1319\", \"Wendy\", \"Stein\", \"25422\", \"Taiwan, Province of China\" ],\n\t[ \"1320\", \"Garrison\", \"Bass\", \"B9J 6D9\", \"Romania\" ],\n\t[ \"1321\", \"Curran\", \"Roy\", \"X2F 4P2\", \"Taiwan, Province of China\" ],\n\t[ \"1322\", \"Oliver\", \"Beach\", \"N6J 1C5\", \"Kazakhstan\" ],\n\t[ \"1323\", \"Bo\", \"Duran\", \"D5C 5C2\", \"Eritrea\" ],\n\t[ \"1324\", \"Tashya\", \"Morrow\", \"N2J 7O9\", \"Rwanda\" ],\n\t[ \"1325\", \"Cheryl\", \"Powell\", \"72413\", \"Niger\" ],\n\t[ \"1326\", \"Justin\", \"Roth\", \"18779\", \"Brunei Darussalam\" ],\n\t[ \"1327\", \"Nathaniel\", \"Foster\", \"04955\", \"Bermuda\" ],\n\t[ \"1328\", \"Candace\", \"Nunez\", \"G7Z 1N2\", \"Moldova\" ],\n\t[ \"1329\", \"Nero\", \"West\", \"K3Q 6B3\", \"Myanmar\" ],\n\t[ \"1330\", \"Brendan\", \"Mcintyre\", \"C4E 5H7\", \"Argentina\" ],\n\t[ \"1331\", \"Chaney\", \"Stafford\", \"V3X 8J4\", \"Benin\" ],\n\t[ \"1332\", \"Sylvia\", \"Velez\", \"95851\", \"Iraq\" ],\n\t[ \"1333\", \"Azalia\", \"Castro\", \"55986\", \"Israel\" ],\n\t[ \"1334\", \"Emily\", \"Hogan\", \"74667\", \"Botswana\" ],\n\t[ \"1335\", \"Buckminster\", \"Hurst\", \"N9C 2X6\", \"Reunion\" ],\n\t[ \"1336\", \"Rinah\", \"Rodriquez\", \"31896\", \"Guinea-bissau\" ],\n\t[ \"1337\", \"Nash\", \"Barnett\", \"Y8X 7H5\", \"China\" ],\n\t[ \"1338\", \"Xanthus\", \"Barker\", \"11212\", \"Trinidad and Tobago\" ],\n\t[ \"1339\", \"Minerva\", \"Huber\", \"M6M 9U3\", \"Equatorial Guinea\" ],\n\t[ \"1340\", \"Kaseem\", \"Tillman\", \"86565\", \"Bulgaria\" ],\n\t[ \"1341\", \"Cassidy\", \"Dejesus\", \"93205\", \"Sierra Leone\" ],\n\t[ \"1342\", \"Sheila\", \"Munoz\", \"26473\", \"Benin\" ],\n\t[ \"1343\", \"Florence\", \"Yates\", \"M5O 1J1\", \"Russian Federation\" ],\n\t[ \"1344\", \"Isadora\", \"Wagner\", \"88381\", \"Philippines\" ],\n\t[ \"1345\", \"Hilel\", \"Kramer\", \"E5D 4F5\", \"Lebanon\" ],\n\t[ \"1346\", \"Stewart\", \"Lawson\", \"67313\", \"Malaysia\" ],\n\t[ \"1347\", \"Ira\", \"Duffy\", \"52841\", \"Greece\" ],\n\t[ \"1348\", \"Ignatius\", \"Robinson\", \"10035\", \"Russian Federation\" ],\n\t[ \"1349\", \"Baxter\", \"Carroll\", \"92288\", \"Albania\" ],\n\t[ \"1350\", \"Palmer\", \"James\", \"N5X 5B1\", \"Germany\" ],\n\t[ \"1351\", \"Ava\", \"Eaton\", \"76497\", \"Egypt\" ],\n\t[ \"1352\", \"Kiona\", \"Smith\", \"09402\", \"Belize\" ],\n\t[ \"1353\", \"Brian\", \"Barlow\", \"00156\", \"Panama\" ],\n\t[ \"1354\", \"Nolan\", \"Rosa\", \"J2O 9W2\", \"Uruguay\" ],\n\t[ \"1355\", \"Teegan\", \"Burnett\", \"02401\", \"Italy\" ],\n\t[ \"1356\", \"Erin\", \"Knox\", \"95496\", \"Egypt\" ],\n\t[ \"1357\", \"Amela\", \"Sanford\", \"59890\", \"Virgin Islands, U.S.\" ],\n\t[ \"1358\", \"Quemby\", \"Hensley\", \"17698\", \"Tuvalu\" ],\n\t[ \"1359\", \"Ava\", \"York\", \"J1M 1A0\", \"Nigeria\" ],\n\t[ \"1360\", \"Vivien\", \"Ware\", \"N9S 1W6\", \"Bahamas\" ],\n\t[ \"1361\", \"Nyssa\", \"Lamb\", \"97964\", \"Estonia\" ],\n\t[ \"1362\", \"Brenna\", \"Slater\", \"L4P 5V6\", \"British Indian Ocean Territory\" ],\n\t[ \"1363\", \"Kennan\", \"Larsen\", \"M2A 4X0\", \"Angola\" ],\n\t[ \"1364\", \"Linda\", \"Luna\", \"P8C 4S8\", \"Gambia\" ],\n\t[ \"1365\", \"Boris\", \"Poole\", \"U7J 4G1\", \"Aruba\" ],\n\t[ \"1366\", \"Lyle\", \"Cote\", \"F5J 3Y2\", \"Somalia\" ],\n\t[ \"1367\", \"Oleg\", \"Knapp\", \"K4C 5T8\", \"Guinea\" ],\n\t[ \"1368\", \"Hanae\", \"Brown\", \"51395\", \"Nepal\" ],\n\t[ \"1369\", \"India\", \"Hyde\", \"E8P 7E8\", \"Belize\" ],\n\t[ \"1370\", \"Madeson\", \"Hodge\", \"23265\", \"Gambia\" ],\n\t[ \"1371\", \"Thaddeus\", \"Hester\", \"Y7S 5W1\", \"Saint Helena\" ],\n\t[ \"1372\", \"Aaron\", \"Kemp\", \"A1Q 8R3\", \"Albania\" ],\n\t[ \"1373\", \"Aurelia\", \"Thornton\", \"P8T 9D4\", \"Swaziland\" ],\n\t[ \"1374\", \"Preston\", \"Sharpe\", \"97472\", \"Niue\" ],\n\t[ \"1375\", \"Grace\", \"Gregory\", \"51767\", \"Burkina Faso\" ],\n\t[ \"1376\", \"Nicole\", \"Hicks\", \"81040\", \"Burkina Faso\" ],\n\t[ \"1377\", \"Hall\", \"Randall\", \"X1C 7A8\", \"Cambodia\" ],\n\t[ \"1378\", \"Burke\", \"Silva\", \"57219\", \"Romania\" ],\n\t[ \"1379\", \"Talon\", \"Kline\", \"28200\", \"Argentina\" ],\n\t[ \"1380\", \"Cassady\", \"Duncan\", \"Y2M 8F5\", \"Kenya\" ],\n\t[ \"1381\", \"Brielle\", \"Reed\", \"06254\", \"Greece\" ],\n\t[ \"1382\", \"Claire\", \"Stein\", \"50289\", \"Viet Nam\" ],\n\t[ \"1383\", \"Fleur\", \"Cabrera\", \"30131\", \"Indonesia\" ],\n\t[ \"1384\", \"Ella\", \"Ellison\", \"Q7Q 4R2\", \"Netherlands Antilles\" ],\n\t[ \"1385\", \"Zachery\", \"Wolf\", \"A9Q 6A8\", \"Jamaica\" ],\n\t[ \"1386\", \"Emerson\", \"Brewer\", \"Y4R 9M9\", \"Bosnia and Herzegovina\" ],\n\t[ \"1387\", \"Sarah\", \"Brooks\", \"27281\", \"Pitcairn\" ],\n\t[ \"1388\", \"Kylan\", \"Garrison\", \"S8E 7L8\", \"Djibouti\" ],\n\t[ \"1389\", \"Guinevere\", \"Mills\", \"75612\", \"Comoros\" ],\n\t[ \"1390\", \"Claudia\", \"Stevenson\", \"73390\", \"Colombia\" ],\n\t[ \"1391\", \"Valentine\", \"Burton\", \"Z9P 7R8\", \"Nauru\" ],\n\t[ \"1392\", \"Raymond\", \"Mclean\", \"L8W 2K5\", \"Brunei Darussalam\" ],\n\t[ \"1393\", \"Juliet\", \"Combs\", \"88712\", \"Samoa\" ],\n\t[ \"1394\", \"Lawrence\", \"Williamson\", \"32528\", \"Netherlands Antilles\" ],\n\t[ \"1395\", \"Inga\", \"Rivers\", \"12850\", \"Kuwait\" ],\n\t[ \"1396\", \"Mira\", \"Zimmerman\", \"D1I 1W2\", \"Ireland\" ],\n\t[ \"1397\", \"Hilda\", \"Stafford\", \"11054\", \"Cuba\" ],\n\t[ \"1398\", \"Tanek\", \"Kim\", \"88590\", \"Cayman Islands\" ],\n\t[ \"1399\", \"Bryar\", \"Mcintyre\", \"H6F 4S5\", \"Russian Federation\" ],\n\t[ \"1400\", \"Sean\", \"Reed\", \"P2V 8J9\", \"Malta\" ],\n\t[ \"1401\", \"Serena\", \"Henderson\", \"Z5C 8A0\", \"Madagascar\" ],\n\t[ \"1402\", \"Hedley\", \"Parks\", \"L8S 6F4\", \"Angola\" ],\n\t[ \"1403\", \"Alice\", \"Quinn\", \"06084\", \"Senegal\" ],\n\t[ \"1404\", \"Linda\", \"Burgess\", \"H1E 7C0\", \"Turkmenistan\" ],\n\t[ \"1405\", \"Hilda\", \"Burns\", \"Q9Q 4S2\", \"Kyrgyzstan\" ],\n\t[ \"1406\", \"Griffith\", \"Watts\", \"D4J 7N2\", \"United States Minor Outlying Islands\" ],\n\t[ \"1407\", \"Camden\", \"Glenn\", \"12939\", \"Russian Federation\" ],\n\t[ \"1408\", \"Tallulah\", \"Rush\", \"G9V 3N2\", \"Turkey\" ],\n\t[ \"1409\", \"Hasad\", \"Salinas\", \"H3F 7P9\", \"Cameroon\" ],\n\t[ \"1410\", \"Violet\", \"Chavez\", \"T2H 9C6\", \"Virgin Islands, U.S.\" ],\n\t[ \"1411\", \"Declan\", \"Hurley\", \"32614\", \"Iran, Islamic Republic of\" ],\n\t[ \"1412\", \"Robin\", \"Dean\", \"34266\", \"Northern Mariana Islands\" ],\n\t[ \"1413\", \"Mariko\", \"Avila\", \"B8F 8Y5\", \"Burundi\" ],\n\t[ \"1414\", \"Bradley\", \"Pugh\", \"11453\", \"Sri Lanka\" ],\n\t[ \"1415\", \"Herman\", \"Hernandez\", \"F3C 6S2\", \"Chile\" ],\n\t[ \"1416\", \"Montana\", \"Wynn\", \"B3M 8M2\", \"Aruba\" ],\n\t[ \"1417\", \"Erin\", \"Melton\", \"17022\", \"France\" ],\n\t[ \"1418\", \"Zachery\", \"Small\", \"L5O 7O1\", \"French Southern Territories\" ],\n\t[ \"1419\", \"Melanie\", \"Rivera\", \"07922\", \"Korea\" ],\n\t[ \"1420\", \"Blossom\", \"Chase\", \"75493\", \"Mauritius\" ],\n\t[ \"1421\", \"Stephanie\", \"Taylor\", \"U8K 3I9\", \"Bahamas\" ],\n\t[ \"1422\", \"Carter\", \"Fulton\", \"T4F 8D1\", \"Turks and Caicos Islands\" ],\n\t[ \"1423\", \"Celeste\", \"Medina\", \"75629\", \"Lebanon\" ],\n\t[ \"1424\", \"Katell\", \"Guzman\", \"15409\", \"United Arab Emirates\" ],\n\t[ \"1425\", \"Howard\", \"Rowland\", \"29003\", \"Liberia\" ],\n\t[ \"1426\", \"Reece\", \"Taylor\", \"W8G 7P7\", \"Samoa\" ],\n\t[ \"1427\", \"Bradley\", \"Peterson\", \"52568\", \"Singapore\" ],\n\t[ \"1428\", \"Ulric\", \"Hancock\", \"07437\", \"Bolivia\" ],\n\t[ \"1429\", \"Francis\", \"Rogers\", \"15904\", \"Albania\" ],\n\t[ \"1430\", \"Tatiana\", \"Mccray\", \"19604\", \"Belize\" ],\n\t[ \"1431\", \"Merrill\", \"Rowe\", \"68539\", \"Ethiopia\" ],\n\t[ \"1432\", \"Kiara\", \"Taylor\", \"F6D 8V7\", \"Burkina Faso\" ],\n\t[ \"1433\", \"Buffy\", \"Shannon\", \"61880\", \"Kiribati\" ],\n\t[ \"1434\", \"Amber\", \"Farmer\", \"K5F 1J7\", \"Barbados\" ],\n\t[ \"1435\", \"Blake\", \"Wilkins\", \"O1L 2G2\", \"Virgin Islands, U.S.\" ],\n\t[ \"1436\", \"Aimee\", \"Fulton\", \"18626\", \"Chad\" ],\n\t[ \"1437\", \"Kai\", \"Montgomery\", \"U6S 4W7\", \"Costa Rica\" ],\n\t[ \"1438\", \"Latifah\", \"Bell\", \"74589\", \"Chad\" ],\n\t[ \"1439\", \"Ronan\", \"Herring\", \"01710\", \"Palestinian Territory, Occupied\" ],\n\t[ \"1440\", \"Macy\", \"Skinner\", \"78054\", \"Gibraltar\" ],\n\t[ \"1441\", \"Ignatius\", \"Berg\", \"59756\", \"Liechtenstein\" ],\n\t[ \"1442\", \"Prescott\", \"Pratt\", \"V6H 6P4\", \"Kuwait\" ],\n\t[ \"1443\", \"Deborah\", \"Hebert\", \"11480\", \"Liberia\" ],\n\t[ \"1444\", \"Quentin\", \"Jones\", \"G8W 8U6\", \"Slovenia\" ],\n\t[ \"1445\", \"Duncan\", \"Parsons\", \"Z9F 5G8\", \"Cambodia\" ],\n\t[ \"1446\", \"Sheila\", \"George\", \"18033\", \"Trinidad and Tobago\" ],\n\t[ \"1447\", \"Alyssa\", \"Padilla\", \"V3O 6C3\", \"Qatar\" ],\n\t[ \"1448\", \"Amelia\", \"Orr\", \"51943\", \"Canada\" ],\n\t[ \"1449\", \"Bethany\", \"Thomas\", \"33451\", \"Liberia\" ],\n\t[ \"1450\", \"Kellie\", \"Pitts\", \"G4S 1Q3\", \"Panama\" ],\n\t[ \"1451\", \"Stone\", \"Stout\", \"L4C 9N0\", \"Latvia\" ],\n\t[ \"1452\", \"Brynne\", \"Bailey\", \"B1M 4O0\", \"Ukraine\" ],\n\t[ \"1453\", \"Aquila\", \"Hurley\", \"41312\", \"United Kingdom\" ],\n\t[ \"1454\", \"David\", \"Bradshaw\", \"11152\", \"Denmark\" ],\n\t[ \"1455\", \"Ryan\", \"Gates\", \"Z7O 1U0\", \"Austria\" ],\n\t[ \"1456\", \"Kyle\", \"Weber\", \"39871\", \"Guyana\" ],\n\t[ \"1457\", \"Declan\", \"Moore\", \"K3B 6L2\", \"Gibraltar\" ],\n\t[ \"1458\", \"Theodore\", \"Hickman\", \"W8E 6K1\", \"Mauritius\" ],\n\t[ \"1459\", \"Rebekah\", \"Merritt\", \"44042\", \"Mauritania\" ],\n\t[ \"1460\", \"Meredith\", \"Powell\", \"98238\", \"Bhutan\" ],\n\t[ \"1461\", \"Paki\", \"Simmons\", \"34122\", \"Norway\" ],\n\t[ \"1462\", \"Carissa\", \"Ballard\", \"20095\", \"Antarctica\" ],\n\t[ \"1463\", \"James\", \"Wilson\", \"96376\", \"Venezuela\" ],\n\t[ \"1464\", \"Pamela\", \"Gamble\", \"U7F 7B6\", \"Turkmenistan\" ],\n\t[ \"1465\", \"Rogan\", \"Davenport\", \"E6S 4R7\", \"French Polynesia\" ],\n\t[ \"1466\", \"Daphne\", \"Pearson\", \"G2H 9M0\", \"American Samoa\" ],\n\t[ \"1467\", \"Maxwell\", \"Nash\", \"87205\", \"Guadeloupe\" ],\n\t[ \"1468\", \"Hayes\", \"Salazar\", \"55712\", \"American Samoa\" ],\n\t[ \"1469\", \"Justin\", \"Conner\", \"03924\", \"United Kingdom\" ],\n\t[ \"1470\", \"Blythe\", \"Joyner\", \"T6H 3M0\", \"Montserrat\" ],\n\t[ \"1471\", \"Herrod\", \"Spears\", \"19474\", \"Philippines\" ],\n\t[ \"1472\", \"Yvette\", \"Joyce\", \"R7Y 7B8\", \"Botswana\" ],\n\t[ \"1473\", \"Chloe\", \"Reid\", \"K4Y 1R2\", \"Philippines\" ],\n\t[ \"1474\", \"MacKensie\", \"Branch\", \"J5E 3X8\", \"Saint Kitts and Nevis\" ],\n\t[ \"1475\", \"Nasim\", \"Buchanan\", \"M4E 4D2\", \"Portugal\" ],\n\t[ \"1476\", \"Aileen\", \"Rasmussen\", \"H2V 3F4\", \"Dominica\" ],\n\t[ \"1477\", \"Nicole\", \"Mullins\", \"U6Q 9X5\", \"New Caledonia\" ],\n\t[ \"1478\", \"David\", \"Luna\", \"11935\", \"Svalbard and Jan Mayen\" ],\n\t[ \"1479\", \"Germaine\", \"Massey\", \"G3N 4C7\", \"Colombia\" ],\n\t[ \"1480\", \"Matthew\", \"Knowles\", \"V4D 4Z0\", \"Turkey\" ],\n\t[ \"1481\", \"Timon\", \"Rowe\", \"14024\", \"Morocco\" ],\n\t[ \"1482\", \"Gail\", \"Young\", \"68293\", \"Bhutan\" ],\n\t[ \"1483\", \"Mariam\", \"Mejia\", \"O3P 4Q7\", \"Singapore\" ],\n\t[ \"1484\", \"Carla\", \"Norris\", \"D7A 3F1\", \"Liberia\" ],\n\t[ \"1485\", \"Ainsley\", \"Donaldson\", \"H4Z 1Q8\", \"Tanzania, United Republic of\" ],\n\t[ \"1486\", \"Avye\", \"Raymond\", \"44808\", \"Namibia\" ],\n\t[ \"1487\", \"Amanda\", \"Sargent\", \"O7F 3S4\", \"Afghanistan\" ],\n\t[ \"1488\", \"Tiger\", \"Chambers\", \"I3K 7H4\", \"United States\" ],\n\t[ \"1489\", \"Dylan\", \"Ford\", \"04043\", \"Solomon Islands\" ],\n\t[ \"1490\", \"Kaitlin\", \"Franklin\", \"99451\", \"Namibia\" ],\n\t[ \"1491\", \"Hayes\", \"Craft\", \"D6H 4Y6\", \"Christmas Island\" ],\n\t[ \"1492\", \"Nolan\", \"Sullivan\", \"31246\", \"United States Minor Outlying Islands\" ],\n\t[ \"1493\", \"Jennifer\", \"Romero\", \"E7I 1R7\", \"Latvia\" ],\n\t[ \"1494\", \"Deanna\", \"Wall\", \"36109\", \"Nepal\" ],\n\t[ \"1495\", \"Dara\", \"Valenzuela\", \"18359\", \"Martinique\" ],\n\t[ \"1496\", \"Iris\", \"Blanchard\", \"84392\", \"Turks and Caicos Islands\" ],\n\t[ \"1497\", \"Rhea\", \"Burgess\", \"T7Y 7C5\", \"Liberia\" ],\n\t[ \"1498\", \"Karina\", \"Small\", \"B2F 2X5\", \"Bermuda\" ],\n\t[ \"1499\", \"Victor\", \"Case\", \"49492\", \"Vanuatu\" ],\n\t[ \"1500\", \"Rose\", \"Terry\", \"B4G 8I0\", \"Timor-leste\" ],\n\t[ \"1501\", \"Wyatt\", \"Berg\", \"K3B 5N2\", \"Vanuatu\" ],\n\t[ \"1502\", \"Zephania\", \"Herrera\", \"E6R 2A5\", \"Romania\" ],\n\t[ \"1503\", \"Felix\", \"Johns\", \"X8U 2P1\", \"Angola\" ],\n\t[ \"1504\", \"Melyssa\", \"George\", \"M4J 5X8\", \"Uzbekistan\" ],\n\t[ \"1505\", \"Robert\", \"Spears\", \"61322\", \"Papua New Guinea\" ],\n\t[ \"1506\", \"Myra\", \"Wood\", \"50638\", \"Afghanistan\" ],\n\t[ \"1507\", \"Sean\", \"Kerr\", \"40094\", \"Guadeloupe\" ],\n\t[ \"1508\", \"Wesley\", \"Mcclain\", \"H7F 1H3\", \"Mongolia\" ],\n\t[ \"1509\", \"Ishmael\", \"Hoover\", \"42503\", \"Czech Republic\" ],\n\t[ \"1510\", \"Ocean\", \"Parker\", \"L3Z 8G0\", \"Guyana\" ],\n\t[ \"1511\", \"Berk\", \"Clay\", \"B6Q 7V7\", \"Botswana\" ],\n\t[ \"1512\", \"Daquan\", \"Harrison\", \"78004\", \"Niger\" ],\n\t[ \"1513\", \"Ramona\", \"Burris\", \"66986\", \"Palau\" ],\n\t[ \"1514\", \"Jaden\", \"Miranda\", \"80086\", \"Madagascar\" ],\n\t[ \"1515\", \"Solomon\", \"Kirk\", \"R7M 3M3\", \"Slovenia\" ],\n\t[ \"1516\", \"Tanek\", \"Rosales\", \"X5B 5D0\", \"Tonga\" ],\n\t[ \"1517\", \"Jack\", \"Cooke\", \"46356\", \"French Southern Territories\" ],\n\t[ \"1518\", \"Naomi\", \"Sykes\", \"76541\", \"Marshall Islands\" ],\n\t[ \"1519\", \"Moana\", \"Vinson\", \"K4R 3U7\", \"Saint Pierre and Miquelon\" ],\n\t[ \"1520\", \"Kaye\", \"Sweet\", \"S6S 2G0\", \"Dominican Republic\" ],\n\t[ \"1521\", \"Bruno\", \"Beard\", \"20686\", \"Israel\" ],\n\t[ \"1522\", \"Helen\", \"Richards\", \"66393\", \"Argentina\" ],\n\t[ \"1523\", \"Gisela\", \"Owens\", \"S8Q 4L3\", \"Haiti\" ],\n\t[ \"1524\", \"Ivy\", \"Garrett\", \"P6G 8S8\", \"United Arab Emirates\" ],\n\t[ \"1525\", \"Malik\", \"Osborne\", \"78332\", \"Tajikistan\" ],\n\t[ \"1526\", \"Whoopi\", \"Franco\", \"T3T 5Y1\", \"Serbia and Montenegro\" ],\n\t[ \"1527\", \"Basil\", \"Baker\", \"61233\", \"Cuba\" ],\n\t[ \"1528\", \"Linda\", \"King\", \"31410\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"1529\", \"Allegra\", \"Hobbs\", \"F2C 9M8\", \"Andorra\" ],\n\t[ \"1530\", \"Kirsten\", \"Elliott\", \"T8C 4X3\", \"Haiti\" ],\n\t[ \"1531\", \"Joseph\", \"Ortiz\", \"40165\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"1532\", \"Pearl\", \"Mccormick\", \"93914\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"1533\", \"Fritz\", \"Austin\", \"A3S 7C8\", \"Canada\" ],\n\t[ \"1534\", \"Lunea\", \"Hickman\", \"25676\", \"Cameroon\" ],\n\t[ \"1535\", \"Inga\", \"Cortez\", \"14707\", \"Comoros\" ],\n\t[ \"1536\", \"Claudia\", \"Long\", \"74877\", \"Tokelau\" ],\n\t[ \"1537\", \"Judah\", \"Williamson\", \"S9N 6F0\", \"Paraguay\" ],\n\t[ \"1538\", \"Eve\", \"Beasley\", \"K8Z 5H7\", \"Honduras\" ],\n\t[ \"1539\", \"Tad\", \"Lang\", \"29577\", \"Equatorial Guinea\" ],\n\t[ \"1540\", \"Jack\", \"Lawson\", \"46631\", \"Costa Rica\" ],\n\t[ \"1541\", \"Vaughan\", \"Barron\", \"N9L 9T4\", \"Chile\" ],\n\t[ \"1542\", \"Solomon\", \"Bowman\", \"05734\", \"Cocos (Keeling) Islands\" ],\n\t[ \"1543\", \"Nash\", \"Giles\", \"64600\", \"Denmark\" ],\n\t[ \"1544\", \"Xander\", \"Eaton\", \"84933\", \"Bosnia and Herzegovina\" ],\n\t[ \"1545\", \"Hanna\", \"Hull\", \"61062\", \"Namibia\" ],\n\t[ \"1546\", \"Lee\", \"Gaines\", \"V7H 6H7\", \"Suriname\" ],\n\t[ \"1547\", \"Brian\", \"Sutton\", \"60055\", \"Timor-leste\" ],\n\t[ \"1548\", \"Azalia\", \"Henson\", \"D9J 8E4\", \"Antarctica\" ],\n\t[ \"1549\", \"Russell\", \"Avila\", \"01774\", \"China\" ],\n\t[ \"1550\", \"Marsden\", \"Leblanc\", \"30201\", \"New Caledonia\" ],\n\t[ \"1551\", \"Tad\", \"Nichols\", \"K5V 6N1\", \"Monaco\" ],\n\t[ \"1552\", \"Eliana\", \"Savage\", \"06807\", \"Central African Republic\" ],\n\t[ \"1553\", \"Madeline\", \"Conway\", \"83513\", \"Latvia\" ],\n\t[ \"1554\", \"Kai\", \"Caldwell\", \"S1K 2Q2\", \"Indonesia\" ],\n\t[ \"1555\", \"Wynne\", \"Goodman\", \"U9Y 8P7\", \"Gibraltar\" ],\n\t[ \"1556\", \"Nora\", \"Dudley\", \"52688\", \"Netherlands Antilles\" ],\n\t[ \"1557\", \"Anastasia\", \"Gates\", \"T7T 8C8\", \"Morocco\" ],\n\t[ \"1558\", \"Lester\", \"Good\", \"76376\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"1559\", \"Craig\", \"Skinner\", \"S7B 3Z6\", \"Madagascar\" ],\n\t[ \"1560\", \"Kibo\", \"Craft\", \"M5C 2I9\", \"Hong Kong\" ],\n\t[ \"1561\", \"Carlos\", \"Buck\", \"89343\", \"Northern Mariana Islands\" ],\n\t[ \"1562\", \"Ivor\", \"Mooney\", \"M9D 2Y3\", \"Korea\" ],\n\t[ \"1563\", \"Armand\", \"Shields\", \"E8O 7X6\", \"Uzbekistan\" ],\n\t[ \"1564\", \"Grace\", \"Weeks\", \"G5B 3W5\", \"Nicaragua\" ],\n\t[ \"1565\", \"Reagan\", \"Mann\", \"J2E 5I1\", \"San Marino\" ],\n\t[ \"1566\", \"Quin\", \"Nolan\", \"Q9E 2Q0\", \"Turkey\" ],\n\t[ \"1567\", \"Kareem\", \"Jefferson\", \"91393\", \"Zambia\" ],\n\t[ \"1568\", \"Erica\", \"Mccoy\", \"C3P 3L0\", \"Viet Nam\" ],\n\t[ \"1569\", \"Sybill\", \"Larsen\", \"J3U 3L9\", \"Sierra Leone\" ],\n\t[ \"1570\", \"Angela\", \"Weber\", \"46559\", \"Croatia\" ],\n\t[ \"1571\", \"Mannix\", \"Noel\", \"94029\", \"Belgium\" ],\n\t[ \"1572\", \"Martina\", \"Travis\", \"20063\", \"Solomon Islands\" ],\n\t[ \"1573\", \"Dominic\", \"Whitehead\", \"83547\", \"Gibraltar\" ],\n\t[ \"1574\", \"Vladimir\", \"Hunter\", \"L3I 4G7\", \"Reunion\" ],\n\t[ \"1575\", \"Farrah\", \"Alexander\", \"18538\", \"Croatia\" ],\n\t[ \"1576\", \"Hop\", \"Burns\", \"X1C 7J6\", \"Saint Lucia\" ],\n\t[ \"1577\", \"Zelda\", \"Trevino\", \"L8P 7E9\", \"Guinea\" ],\n\t[ \"1578\", \"Nehru\", \"Decker\", \"Q1P 4Q9\", \"Western Sahara\" ],\n\t[ \"1579\", \"Shay\", \"Goff\", \"68576\", \"Sweden\" ],\n\t[ \"1580\", \"Dominic\", \"Martin\", \"C1M 9P2\", \"Denmark\" ],\n\t[ \"1581\", \"Heather\", \"Doyle\", \"Y7R 9H1\", \"Iran, Islamic Republic of\" ],\n\t[ \"1582\", \"Honorato\", \"Rojas\", \"29414\", \"India\" ],\n\t[ \"1583\", \"Florence\", \"England\", \"64669\", \"China\" ],\n\t[ \"1584\", \"Zane\", \"Reyes\", \"84771\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"1585\", \"Scarlett\", \"Poole\", \"36928\", \"Algeria\" ],\n\t[ \"1586\", \"Dieter\", \"Brennan\", \"Y8V 5L2\", \"Colombia\" ],\n\t[ \"1587\", \"Jamal\", \"Whitney\", \"33428\", \"Turkey\" ],\n\t[ \"1588\", \"Evan\", \"Guy\", \"72119\", \"Slovakia\" ],\n\t[ \"1589\", \"Candace\", \"Bauer\", \"C8L 1P2\", \"Macedonia\" ],\n\t[ \"1590\", \"Naomi\", \"Pennington\", \"17350\", \"Tonga\" ],\n\t[ \"1591\", \"Celeste\", \"Banks\", \"R8R 4C8\", \"Anguilla\" ],\n\t[ \"1592\", \"Basil\", \"Elliott\", \"80065\", \"Singapore\" ],\n\t[ \"1593\", \"Darryl\", \"Wise\", \"33140\", \"Brunei Darussalam\" ],\n\t[ \"1594\", \"Marny\", \"Walls\", \"S1K 4V1\", \"Western Sahara\" ],\n\t[ \"1595\", \"Anastasia\", \"Meyer\", \"Z1F 8C2\", \"El Salvador\" ],\n\t[ \"1596\", \"Brynne\", \"Rivera\", \"48070\", \"Mexico\" ],\n\t[ \"1597\", \"Macey\", \"Johnston\", \"X9E 9J5\", \"Guadeloupe\" ],\n\t[ \"1598\", \"Bethany\", \"Marks\", \"46648\", \"Bhutan\" ],\n\t[ \"1599\", \"Kiayada\", \"Glass\", \"13661\", \"Christmas Island\" ],\n\t[ \"1600\", \"Veda\", \"Bowers\", \"D7S 1S9\", \"Korea\" ],\n\t[ \"1601\", \"Dante\", \"Kirk\", \"58404\", \"Guinea\" ],\n\t[ \"1602\", \"Judah\", \"Sloan\", \"04528\", \"Andorra\" ],\n\t[ \"1603\", \"Serena\", \"Giles\", \"12139\", \"Papua New Guinea\" ],\n\t[ \"1604\", \"Chase\", \"Hull\", \"27203\", \"Guinea-bissau\" ],\n\t[ \"1605\", \"Wallace\", \"Poole\", \"58919\", \"Christmas Island\" ],\n\t[ \"1606\", \"Deacon\", \"Lynn\", \"Z1H 9G4\", \"Kenya\" ],\n\t[ \"1607\", \"Igor\", \"Duncan\", \"X2V 2X1\", \"Christmas Island\" ],\n\t[ \"1608\", \"Walker\", \"Hopkins\", \"67256\", \"Bosnia and Herzegovina\" ],\n\t[ \"1609\", \"Serena\", \"Burnett\", \"Q4C 7Q0\", \"Canada\" ],\n\t[ \"1610\", \"Hedwig\", \"Burgess\", \"O2J 7A5\", \"Rwanda\" ],\n\t[ \"1611\", \"Amal\", \"Richmond\", \"34506\", \"Australia\" ],\n\t[ \"1612\", \"Rhona\", \"Gomez\", \"W2C 3I7\", \"Oman\" ],\n\t[ \"1613\", \"Kai\", \"Acosta\", \"N2O 7M2\", \"Uganda\" ],\n\t[ \"1614\", \"Henry\", \"Roman\", \"78113\", \"Guadeloupe\" ],\n\t[ \"1615\", \"Chester\", \"Good\", \"88809\", \"Norway\" ],\n\t[ \"1616\", \"Cleo\", \"Tanner\", \"73924\", \"Uganda\" ],\n\t[ \"1617\", \"Emi\", \"Lloyd\", \"59746\", \"South Africa\" ],\n\t[ \"1618\", \"Christopher\", \"Lopez\", \"76264\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"1619\", \"Yvonne\", \"Mathews\", \"68655\", \"Saint Lucia\" ],\n\t[ \"1620\", \"Kimberly\", \"Mullen\", \"D6J 9G3\", \"Virgin Islands, British\" ],\n\t[ \"1621\", \"Hanna\", \"Slater\", \"F8F 9K5\", \"Montserrat\" ],\n\t[ \"1622\", \"Laura\", \"Dennis\", \"J6U 2G3\", \"Viet Nam\" ],\n\t[ \"1623\", \"Rogan\", \"Richards\", \"R1D 1B3\", \"Argentina\" ],\n\t[ \"1624\", \"Mira\", \"Rodriquez\", \"C3D 3E5\", \"Guinea\" ],\n\t[ \"1625\", \"Ezra\", \"Myers\", \"Y7Z 7X2\", \"Kuwait\" ],\n\t[ \"1626\", \"Jocelyn\", \"Martin\", \"E2F 3F2\", \"Algeria\" ],\n\t[ \"1627\", \"Denton\", \"Lee\", \"80903\", \"Congo\" ],\n\t[ \"1628\", \"Grace\", \"Leach\", \"86865\", \"Spain\" ],\n\t[ \"1629\", \"Clark\", \"Morrow\", \"12834\", \"Northern Mariana Islands\" ],\n\t[ \"1630\", \"Armando\", \"Calhoun\", \"I3I 1D4\", \"Spain\" ],\n\t[ \"1631\", \"George\", \"Decker\", \"R1B 6Q9\", \"Mali\" ],\n\t[ \"1632\", \"Jerome\", \"Salazar\", \"03831\", \"Faroe Islands\" ],\n\t[ \"1633\", \"Logan\", \"Santiago\", \"46269\", \"Hungary\" ],\n\t[ \"1634\", \"Gavin\", \"Tate\", \"Y3L 6G5\", \"Italy\" ],\n\t[ \"1635\", \"Chloe\", \"Jennings\", \"D9B 2H9\", \"Cambodia\" ],\n\t[ \"1636\", \"Rashad\", \"Knox\", \"T1V 4G5\", \"Germany\" ],\n\t[ \"1637\", \"Jin\", \"Roberts\", \"82928\", \"Azerbaijan\" ],\n\t[ \"1638\", \"Amity\", \"Guerrero\", \"F4G 2L4\", \"Viet Nam\" ],\n\t[ \"1639\", \"Carter\", \"Roberson\", \"53651\", \"Niue\" ],\n\t[ \"1640\", \"Slade\", \"Carson\", \"H9E 1G1\", \"Guyana\" ],\n\t[ \"1641\", \"Buckminster\", \"Christensen\", \"F5J 6T5\", \"Algeria\" ],\n\t[ \"1642\", \"Fallon\", \"Peters\", \"D9Y 5Q4\", \"Ethiopia\" ],\n\t[ \"1643\", \"Amy\", \"Barry\", \"D6F 3R4\", \"New Caledonia\" ],\n\t[ \"1644\", \"Calvin\", \"Buck\", \"18354\", \"Macedonia\" ],\n\t[ \"1645\", \"Kaye\", \"Haynes\", \"D9K 1X8\", \"Italy\" ],\n\t[ \"1646\", \"Shea\", \"Hammond\", \"R7P 3X8\", \"Guam\" ],\n\t[ \"1647\", \"Kiara\", \"Franks\", \"01185\", \"Mozambique\" ],\n\t[ \"1648\", \"Armando\", \"Oneil\", \"88972\", \"Bahrain\" ],\n\t[ \"1649\", \"Lesley\", \"Allen\", \"05171\", \"Belgium\" ],\n\t[ \"1650\", \"Ignatius\", \"Barrett\", \"94084\", \"Georgia\" ],\n\t[ \"1651\", \"Graham\", \"Maldonado\", \"76354\", \"Dominican Republic\" ],\n\t[ \"1652\", \"Briar\", \"Roman\", \"P9M 3A9\", \"Cayman Islands\" ],\n\t[ \"1653\", \"Germane\", \"Colon\", \"U3X 7S9\", \"Brazil\" ],\n\t[ \"1654\", \"Alvin\", \"Mcpherson\", \"58411\", \"Guinea\" ],\n\t[ \"1655\", \"Belle\", \"Sandoval\", \"87172\", \"Cyprus\" ],\n\t[ \"1656\", \"Eric\", \"Caldwell\", \"63246\", \"Guinea\" ],\n\t[ \"1657\", \"Nadine\", \"Dale\", \"T6E 4B0\", \"Denmark\" ],\n\t[ \"1658\", \"Dora\", \"Jimenez\", \"85463\", \"Nauru\" ],\n\t[ \"1659\", \"Mohammad\", \"Strickland\", \"H8B 9G2\", \"Japan\" ],\n\t[ \"1660\", \"Reagan\", \"Preston\", \"G5E 8S5\", \"Honduras\" ],\n\t[ \"1661\", \"Tamekah\", \"Daniel\", \"Z3X 6Q6\", \"Belarus\" ],\n\t[ \"1662\", \"Halee\", \"Mills\", \"23332\", \"Mayotte\" ],\n\t[ \"1663\", \"Courtney\", \"England\", \"09751\", \"Saint Kitts and Nevis\" ],\n\t[ \"1664\", \"Dai\", \"Arnold\", \"A2N 9J4\", \"Argentina\" ],\n\t[ \"1665\", \"Priscilla\", \"Reyes\", \"G2B 5M4\", \"Azerbaijan\" ],\n\t[ \"1666\", \"Brenda\", \"Stanley\", \"I6O 3I1\", \"Hungary\" ],\n\t[ \"1667\", \"Kasper\", \"Washington\", \"H4K 8K7\", \"Serbia and Montenegro\" ],\n\t[ \"1668\", \"Suki\", \"Hendricks\", \"L1K 5O9\", \"Norway\" ],\n\t[ \"1669\", \"Rebekah\", \"Mccormick\", \"89543\", \"Slovenia\" ],\n\t[ \"1670\", \"Oprah\", \"Rodriquez\", \"90034\", \"Costa Rica\" ],\n\t[ \"1671\", \"Ivory\", \"Matthews\", \"T9J 2A7\", \"Panama\" ],\n\t[ \"1672\", \"Ferris\", \"Garner\", \"93583\", \"Niue\" ],\n\t[ \"1673\", \"Melvin\", \"White\", \"X5U 9N8\", \"Nigeria\" ],\n\t[ \"1674\", \"Henry\", \"Swanson\", \"E7V 2C9\", \"Northern Mariana Islands\" ],\n\t[ \"1675\", \"Hadassah\", \"Eaton\", \"52798\", \"Albania\" ],\n\t[ \"1676\", \"Lisandra\", \"Sykes\", \"90838\", \"Namibia\" ],\n\t[ \"1677\", \"Honorato\", \"Bradshaw\", \"W3D 1Z9\", \"United States\" ],\n\t[ \"1678\", \"Aurelia\", \"Paul\", \"Z6E 6W9\", \"Malaysia\" ],\n\t[ \"1679\", \"Arthur\", \"Mann\", \"74673\", \"Bhutan\" ],\n\t[ \"1680\", \"Melissa\", \"Hernandez\", \"11742\", \"Dominican Republic\" ],\n\t[ \"1681\", \"Bert\", \"Mosley\", \"N2K 5U5\", \"Kuwait\" ],\n\t[ \"1682\", \"Sigourney\", \"Sharpe\", \"30204\", \"South Africa\" ],\n\t[ \"1683\", \"Ifeoma\", \"Woods\", \"39850\", \"Haiti\" ],\n\t[ \"1684\", \"Tyler\", \"Medina\", \"K6L 9V8\", \"Indonesia\" ],\n\t[ \"1685\", \"Karleigh\", \"Griffin\", \"G8Z 6W2\", \"Canada\" ],\n\t[ \"1686\", \"Brianna\", \"Collins\", \"11919\", \"New Caledonia\" ],\n\t[ \"1687\", \"Allistair\", \"Hampton\", \"O1X 2N7\", \"Cocos (Keeling) Islands\" ],\n\t[ \"1688\", \"Carla\", \"Manning\", \"76866\", \"Svalbard and Jan Mayen\" ],\n\t[ \"1689\", \"Jakeem\", \"Brewer\", \"Y1T 1D7\", \"Comoros\" ],\n\t[ \"1690\", \"Price\", \"Guerrero\", \"S7Z 8O1\", \"Christmas Island\" ],\n\t[ \"1691\", \"Harlan\", \"Sandoval\", \"58527\", \"Czech Republic\" ],\n\t[ \"1692\", \"Marcia\", \"Robinson\", \"64662\", \"Uganda\" ],\n\t[ \"1693\", \"Sylvester\", \"Hewitt\", \"81468\", \"Honduras\" ],\n\t[ \"1694\", \"Dawn\", \"Wood\", \"77743\", \"Malawi\" ],\n\t[ \"1695\", \"Farrah\", \"Nielsen\", \"E4N 9A9\", \"Christmas Island\" ],\n\t[ \"1696\", \"Tanisha\", \"Benjamin\", \"L2J 3G7\", \"Cape Verde\" ],\n\t[ \"1697\", \"Cherokee\", \"Atkins\", \"L7D 2L5\", \"Moldova\" ],\n\t[ \"1698\", \"Madaline\", \"Elliott\", \"H7K 8R4\", \"Barbados\" ],\n\t[ \"1699\", \"Odysseus\", \"Roy\", \"65008\", \"Slovakia\" ],\n\t[ \"1700\", \"Eaton\", \"Stein\", \"Z2V 7H0\", \"Moldova\" ],\n\t[ \"1701\", \"Rachel\", \"Hurley\", \"L6L 2B2\", \"Antigua and Barbuda\" ],\n\t[ \"1702\", \"Stacey\", \"Hardin\", \"O9U 1B7\", \"Montserrat\" ],\n\t[ \"1703\", \"Grady\", \"Montgomery\", \"75852\", \"Guinea-bissau\" ],\n\t[ \"1704\", \"Serena\", \"Douglas\", \"F5M 8Z6\", \"Mauritius\" ],\n\t[ \"1705\", \"Ralph\", \"Duke\", \"H7X 3M9\", \"Tunisia\" ],\n\t[ \"1706\", \"Charles\", \"Moody\", \"86445\", \"Pitcairn\" ],\n\t[ \"1707\", \"Mariam\", \"Lara\", \"07952\", \"United Kingdom\" ],\n\t[ \"1708\", \"Whitney\", \"Garza\", \"74001\", \"Norfolk Island\" ],\n\t[ \"1709\", \"Beverly\", \"Thornton\", \"69847\", \"Canada\" ],\n\t[ \"1710\", \"Helen\", \"Gentry\", \"Z8S 7U4\", \"Reunion\" ],\n\t[ \"1711\", \"Janna\", \"Gould\", \"W6C 6E1\", \"Burundi\" ],\n\t[ \"1712\", \"Jana\", \"Hooper\", \"A1R 9Y0\", \"Yemen\" ],\n\t[ \"1713\", \"Zachary\", \"Nicholson\", \"49616\", \"Gabon\" ],\n\t[ \"1714\", \"Julian\", \"Davis\", \"37608\", \"Anguilla\" ],\n\t[ \"1715\", \"Gay\", \"Knox\", \"51952\", \"Croatia\" ],\n\t[ \"1716\", \"Iola\", \"Moses\", \"16601\", \"French Polynesia\" ],\n\t[ \"1717\", \"Allegra\", \"Holder\", \"C9R 8J3\", \"Dominican Republic\" ],\n\t[ \"1718\", \"Cecilia\", \"Shannon\", \"62624\", \"Reunion\" ],\n\t[ \"1719\", \"Cora\", \"Peterson\", \"I9V 5P5\", \"Chad\" ],\n\t[ \"1720\", \"Stewart\", \"Mathews\", \"A5H 1E1\", \"Mexico\" ],\n\t[ \"1721\", \"Kathleen\", \"Lynn\", \"82408\", \"Honduras\" ],\n\t[ \"1722\", \"William\", \"Schneider\", \"25823\", \"Tajikistan\" ],\n\t[ \"1723\", \"Alice\", \"Mcconnell\", \"50155\", \"Russian Federation\" ],\n\t[ \"1724\", \"Timon\", \"Dillon\", \"93171\", \"Croatia\" ],\n\t[ \"1725\", \"Tanek\", \"Ellison\", \"Y7Q 5B1\", \"Malawi\" ],\n\t[ \"1726\", \"Tamekah\", \"Cummings\", \"03764\", \"Afghanistan\" ],\n\t[ \"1727\", \"Charlotte\", \"Chaney\", \"U7Y 7B0\", \"Kyrgyzstan\" ],\n\t[ \"1728\", \"Jason\", \"Conway\", \"37713\", \"Martinique\" ],\n\t[ \"1729\", \"Graiden\", \"Combs\", \"40454\", \"Turkmenistan\" ],\n\t[ \"1730\", \"Virginia\", \"Ortiz\", \"K9N 2Q4\", \"Malta\" ],\n\t[ \"1731\", \"Thomas\", \"Cannon\", \"W1H 3T9\", \"Cuba\" ],\n\t[ \"1732\", \"Galena\", \"Dominguez\", \"68072\", \"India\" ],\n\t[ \"1733\", \"Vaughan\", \"Petty\", \"15200\", \"Lesotho\" ],\n\t[ \"1734\", \"Buffy\", \"Saunders\", \"K1W 3B1\", \"Burkina Faso\" ],\n\t[ \"1735\", \"Chava\", \"Hill\", \"93461\", \"Iran, Islamic Republic of\" ],\n\t[ \"1736\", \"Sage\", \"Hampton\", \"R8Y 8J1\", \"Malta\" ],\n\t[ \"1737\", \"Nathaniel\", \"Whitney\", \"89097\", \"Ukraine\" ],\n\t[ \"1738\", \"Hector\", \"Hayden\", \"70774\", \"Netherlands\" ],\n\t[ \"1739\", \"Mercedes\", \"Freeman\", \"80848\", \"Croatia\" ],\n\t[ \"1740\", \"Vance\", \"Spencer\", \"25484\", \"Guyana\" ],\n\t[ \"1741\", \"Josephine\", \"Stevens\", \"E4D 9D1\", \"Netherlands Antilles\" ],\n\t[ \"1742\", \"Barbara\", \"Mcclure\", \"22602\", \"Cambodia\" ],\n\t[ \"1743\", \"Sydney\", \"Holder\", \"X4G 1Z7\", \"British Indian Ocean Territory\" ],\n\t[ \"1744\", \"Velma\", \"Evans\", \"83914\", \"New Zealand\" ],\n\t[ \"1745\", \"Francis\", \"Lane\", \"12545\", \"Serbia and Montenegro\" ],\n\t[ \"1746\", \"Garrison\", \"Brock\", \"19993\", \"Eritrea\" ],\n\t[ \"1747\", \"Quentin\", \"Santiago\", \"07085\", \"Norfolk Island\" ],\n\t[ \"1748\", \"Ivory\", \"Wilkerson\", \"79440\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"1749\", \"Karyn\", \"Buckner\", \"D1Y 7D8\", \"Cocos (Keeling) Islands\" ],\n\t[ \"1750\", \"Mari\", \"Bright\", \"24721\", \"Pakistan\" ],\n\t[ \"1751\", \"Dexter\", \"Garrison\", \"X3X 7G3\", \"Western Sahara\" ],\n\t[ \"1752\", \"Venus\", \"Acevedo\", \"V2F 8C0\", \"Poland\" ],\n\t[ \"1753\", \"Nayda\", \"Camacho\", \"F6H 6J5\", \"Northern Mariana Islands\" ],\n\t[ \"1754\", \"Avye\", \"Hartman\", \"G6V 2H0\", \"Hong Kong\" ],\n\t[ \"1755\", \"Kerry\", \"Baird\", \"M3Q 7B7\", \"Russian Federation\" ],\n\t[ \"1756\", \"Uma\", \"Herman\", \"C9A 4P3\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"1757\", \"Amaya\", \"Roman\", \"97179\", \"Iceland\" ],\n\t[ \"1758\", \"Bruce\", \"Joyce\", \"18344\", \"Denmark\" ],\n\t[ \"1759\", \"Jarrod\", \"Alvarez\", \"59269\", \"Liberia\" ],\n\t[ \"1760\", \"Olivia\", \"Reilly\", \"99058\", \"Malaysia\" ],\n\t[ \"1761\", \"Benedict\", \"Hensley\", \"23105\", \"Uganda\" ],\n\t[ \"1762\", \"Lavinia\", \"Hunter\", \"44729\", \"Maldives\" ],\n\t[ \"1763\", \"Bradley\", \"Gomez\", \"65125\", \"Belize\" ],\n\t[ \"1764\", \"Keely\", \"Burris\", \"18390\", \"Brunei Darussalam\" ],\n\t[ \"1765\", \"Autumn\", \"England\", \"E5D 7A5\", \"Kyrgyzstan\" ],\n\t[ \"1766\", \"Jane\", \"Blair\", \"S1W 4O0\", \"Bangladesh\" ],\n\t[ \"1767\", \"Chancellor\", \"Barrett\", \"E9F 1I1\", \"Fiji\" ],\n\t[ \"1768\", \"Whitney\", \"Morin\", \"G5T 4E7\", \"Aruba\" ],\n\t[ \"1769\", \"Madeline\", \"Sparks\", \"W7L 7E0\", \"Belize\" ],\n\t[ \"1770\", \"Dale\", \"Estes\", \"82712\", \"Guam\" ],\n\t[ \"1771\", \"Hakeem\", \"Buck\", \"O6K 1I8\", \"Singapore\" ],\n\t[ \"1772\", \"Alexandra\", \"Burns\", \"12697\", \"Portugal\" ],\n\t[ \"1773\", \"Winifred\", \"Gill\", \"Z8B 8B8\", \"Uruguay\" ],\n\t[ \"1774\", \"Gail\", \"Gomez\", \"S1V 3N8\", \"American Samoa\" ],\n\t[ \"1775\", \"Moana\", \"Brady\", \"18835\", \"Wallis and Futuna\" ],\n\t[ \"1776\", \"Martha\", \"Oliver\", \"81962\", \"Bolivia\" ],\n\t[ \"1777\", \"Nayda\", \"Wooten\", \"00071\", \"Palau\" ],\n\t[ \"1778\", \"Bryar\", \"Collier\", \"50631\", \"Mexico\" ],\n\t[ \"1779\", \"Penelope\", \"Bradshaw\", \"A6A 9M2\", \"Lebanon\" ],\n\t[ \"1780\", \"Wyatt\", \"Lara\", \"75486\", \"Slovenia\" ],\n\t[ \"1781\", \"Wang\", \"Odonnell\", \"N5X 1N5\", \"Bahamas\" ],\n\t[ \"1782\", \"Chiquita\", \"Harrell\", \"21691\", \"Guadeloupe\" ],\n\t[ \"1783\", \"Byron\", \"Blankenship\", \"M8A 3L4\", \"Syrian Arab Republic\" ],\n\t[ \"1784\", \"Holmes\", \"Stokes\", \"81039\", \"Mauritania\" ],\n\t[ \"1785\", \"Naomi\", \"Phillips\", \"56287\", \"Switzerland\" ],\n\t[ \"1786\", \"Quyn\", \"Johnson\", \"D2T 6B7\", \"Czech Republic\" ],\n\t[ \"1787\", \"Gillian\", \"Sanders\", \"50542\", \"Colombia\" ],\n\t[ \"1788\", \"Hope\", \"Benjamin\", \"67423\", \"Bolivia\" ],\n\t[ \"1789\", \"Bryar\", \"Dean\", \"U9V 9E5\", \"Guatemala\" ],\n\t[ \"1790\", \"Karyn\", \"Swanson\", \"S6H 3R8\", \"Israel\" ],\n\t[ \"1791\", \"Amena\", \"David\", \"02286\", \"French Polynesia\" ],\n\t[ \"1792\", \"Ira\", \"Joyner\", \"37335\", \"Cayman Islands\" ],\n\t[ \"1793\", \"Tanek\", \"Oneil\", \"75041\", \"Slovenia\" ],\n\t[ \"1794\", \"Dolan\", \"Miles\", \"K7Q 9U8\", \"Maldives\" ],\n\t[ \"1795\", \"Wang\", \"Keith\", \"88116\", \"Congo\" ],\n\t[ \"1796\", \"Wylie\", \"Bryant\", \"93369\", \"Andorra\" ],\n\t[ \"1797\", \"Heather\", \"Bryant\", \"78015\", \"French Polynesia\" ],\n\t[ \"1798\", \"Regina\", \"Wagner\", \"29087\", \"Virgin Islands, British\" ],\n\t[ \"1799\", \"Nathan\", \"Bush\", \"J5S 9L0\", \"Viet Nam\" ],\n\t[ \"1800\", \"Charity\", \"Dawson\", \"29508\", \"Greece\" ],\n\t[ \"1801\", \"Ulric\", \"Guzman\", \"I6R 6P6\", \"Micronesia\" ],\n\t[ \"1802\", \"Keefe\", \"Scott\", \"J1R 8T6\", \"Uzbekistan\" ],\n\t[ \"1803\", \"Florence\", \"Price\", \"U7P 8F6\", \"Taiwan, Province of China\" ],\n\t[ \"1804\", \"Griffith\", \"England\", \"92557\", \"China\" ],\n\t[ \"1805\", \"Kay\", \"Nielsen\", \"85991\", \"Suriname\" ],\n\t[ \"1806\", \"Tamekah\", \"Blackburn\", \"47324\", \"Panama\" ],\n\t[ \"1807\", \"Indira\", \"Crosby\", \"64463\", \"Trinidad and Tobago\" ],\n\t[ \"1808\", \"Pamela\", \"Vasquez\", \"K2Q 9A1\", \"Ghana\" ],\n\t[ \"1809\", \"Patricia\", \"Haley\", \"51509\", \"Jordan\" ],\n\t[ \"1810\", \"Nevada\", \"Prince\", \"41315\", \"Tokelau\" ],\n\t[ \"1811\", \"Martin\", \"Wilkerson\", \"Y8X 4Y5\", \"Palestinian Territory, Occupied\" ],\n\t[ \"1812\", \"Deirdre\", \"Castaneda\", \"X1S 5E2\", \"Bahrain\" ],\n\t[ \"1813\", \"Cara\", \"Flynn\", \"68372\", \"Azerbaijan\" ],\n\t[ \"1814\", \"Sylvia\", \"Alexander\", \"E5F 9M5\", \"Svalbard and Jan Mayen\" ],\n\t[ \"1815\", \"Macon\", \"Suarez\", \"69866\", \"Tunisia\" ],\n\t[ \"1816\", \"Hammett\", \"Haney\", \"09768\", \"Bangladesh\" ],\n\t[ \"1817\", \"Geoffrey\", \"Simmons\", \"61986\", \"Burundi\" ],\n\t[ \"1818\", \"Danielle\", \"Kelly\", \"71568\", \"Mali\" ],\n\t[ \"1819\", \"Wing\", \"Brown\", \"U4D 6L1\", \"Uzbekistan\" ],\n\t[ \"1820\", \"Len\", \"Barber\", \"40311\", \"Suriname\" ],\n\t[ \"1821\", \"Richard\", \"Wilson\", \"W9E 6D7\", \"Finland\" ],\n\t[ \"1822\", \"Keaton\", \"Hayes\", \"55696\", \"Slovakia\" ],\n\t[ \"1823\", \"Dora\", \"Chaney\", \"57297\", \"United States Minor Outlying Islands\" ],\n\t[ \"1824\", \"Alexandra\", \"Pruitt\", \"17207\", \"Turkmenistan\" ],\n\t[ \"1825\", \"Deanna\", \"Gomez\", \"C9M 9K0\", \"Paraguay\" ],\n\t[ \"1826\", \"Laura\", \"Downs\", \"74422\", \"Antigua and Barbuda\" ],\n\t[ \"1827\", \"Jolene\", \"Lucas\", \"K9E 6U4\", \"Tokelau\" ],\n\t[ \"1828\", \"Lucy\", \"Marquez\", \"L1N 4O4\", \"Argentina\" ],\n\t[ \"1829\", \"Abbot\", \"Bishop\", \"G8W 7I1\", \"Guinea-bissau\" ],\n\t[ \"1830\", \"Aaron\", \"Bowman\", \"K8A 5K7\", \"Greece\" ],\n\t[ \"1831\", \"Candace\", \"Lee\", \"58901\", \"Turks and Caicos Islands\" ],\n\t[ \"1832\", \"Larissa\", \"Allen\", \"O1I 4X0\", \"Belgium\" ],\n\t[ \"1833\", \"Linda\", \"Malone\", \"31211\", \"United Arab Emirates\" ],\n\t[ \"1834\", \"Grace\", \"Daugherty\", \"62610\", \"Cyprus\" ],\n\t[ \"1835\", \"Kyra\", \"Berry\", \"T2F 3E5\", \"Netherlands Antilles\" ],\n\t[ \"1836\", \"Hadassah\", \"Willis\", \"C7H 5V4\", \"El Salvador\" ],\n\t[ \"1837\", \"Kyle\", \"Fitzgerald\", \"X1V 2R9\", \"Croatia\" ],\n\t[ \"1838\", \"Graiden\", \"Atkinson\", \"L9Q 6H8\", \"Thailand\" ],\n\t[ \"1839\", \"Raymond\", \"Fletcher\", \"59574\", \"Argentina\" ],\n\t[ \"1840\", \"Keaton\", \"Barnett\", \"O2G 6B4\", \"Papua New Guinea\" ],\n\t[ \"1841\", \"Farrah\", \"Kramer\", \"21928\", \"Netherlands Antilles\" ],\n\t[ \"1842\", \"Christian\", \"Sellers\", \"55504\", \"Timor-leste\" ],\n\t[ \"1843\", \"Keith\", \"Cohen\", \"D9T 7D0\", \"Italy\" ],\n\t[ \"1844\", \"Karleigh\", \"Bruce\", \"F2A 5H9\", \"Montserrat\" ],\n\t[ \"1845\", \"Julie\", \"Avery\", \"T4T 3Y7\", \"Nepal\" ],\n\t[ \"1846\", \"Hollee\", \"Deleon\", \"47524\", \"Oman\" ],\n\t[ \"1847\", \"Charity\", \"Booker\", \"61071\", \"Cocos (Keeling) Islands\" ],\n\t[ \"1848\", \"Flynn\", \"Bond\", \"E8L 9D2\", \"Afghanistan\" ],\n\t[ \"1849\", \"Sybill\", \"Roth\", \"16453\", \"Saudi Arabia\" ],\n\t[ \"1850\", \"Alyssa\", \"Juarez\", \"04466\", \"Singapore\" ],\n\t[ \"1851\", \"Jennifer\", \"Odonnell\", \"59277\", \"Tuvalu\" ],\n\t[ \"1852\", \"Carissa\", \"Byrd\", \"80861\", \"Palau\" ],\n\t[ \"1853\", \"Coby\", \"Barrett\", \"04665\", \"Congo\" ],\n\t[ \"1854\", \"Bertha\", \"Paul\", \"46442\", \"Andorra\" ],\n\t[ \"1855\", \"Hayden\", \"Dennis\", \"K7E 3O1\", \"France\" ],\n\t[ \"1856\", \"Kadeem\", \"Berry\", \"39544\", \"Vanuatu\" ],\n\t[ \"1857\", \"Clayton\", \"Burns\", \"C2A 6W5\", \"Andorra\" ],\n\t[ \"1858\", \"Breanna\", \"Hardy\", \"12284\", \"Norway\" ],\n\t[ \"1859\", \"Yael\", \"Hester\", \"69399\", \"Hong Kong\" ],\n\t[ \"1860\", \"Hunter\", \"Harding\", \"M4O 6N5\", \"Bosnia and Herzegovina\" ],\n\t[ \"1861\", \"Breanna\", \"Sutton\", \"N2C 6K3\", \"Singapore\" ],\n\t[ \"1862\", \"Bo\", \"Huffman\", \"54558\", \"Taiwan, Province of China\" ],\n\t[ \"1863\", \"Zena\", \"Potts\", \"80326\", \"Czech Republic\" ],\n\t[ \"1864\", \"Lucian\", \"Sykes\", \"D4M 6M5\", \"Trinidad and Tobago\" ],\n\t[ \"1865\", \"Gabriel\", \"Shepherd\", \"77631\", \"Bahrain\" ],\n\t[ \"1866\", \"Vivian\", \"Gould\", \"29510\", \"Norway\" ],\n\t[ \"1867\", \"Ina\", \"Sherman\", \"08122\", \"Portugal\" ],\n\t[ \"1868\", \"Constance\", \"Parsons\", \"D6E 9J8\", \"Armenia\" ],\n\t[ \"1869\", \"Tallulah\", \"Woodard\", \"51380\", \"Bahamas\" ],\n\t[ \"1870\", \"Amos\", \"Morris\", \"37846\", \"Switzerland\" ],\n\t[ \"1871\", \"Charles\", \"Kinney\", \"45961\", \"Marshall Islands\" ],\n\t[ \"1872\", \"Colby\", \"Camacho\", \"02978\", \"Niger\" ],\n\t[ \"1873\", \"Ora\", \"Hays\", \"B6F 9Z9\", \"Martinique\" ],\n\t[ \"1874\", \"Ariel\", \"Cannon\", \"04559\", \"Burundi\" ],\n\t[ \"1875\", \"Beatrice\", \"Hull\", \"66569\", \"Saint Pierre and Miquelon\" ],\n\t[ \"1876\", \"Stacey\", \"Morrow\", \"53760\", \"Zimbabwe\" ],\n\t[ \"1877\", \"Naida\", \"Thomas\", \"43434\", \"Virgin Islands, U.S.\" ],\n\t[ \"1878\", \"Holly\", \"Holcomb\", \"31997\", \"Kazakhstan\" ],\n\t[ \"1879\", \"Lee\", \"Davenport\", \"99355\", \"Central African Republic\" ],\n\t[ \"1880\", \"Gary\", \"Higgins\", \"18703\", \"Norway\" ],\n\t[ \"1881\", \"Kay\", \"Wolf\", \"25509\", \"Switzerland\" ],\n\t[ \"1882\", \"Destiny\", \"Patel\", \"Q3X 2F8\", \"Ghana\" ],\n\t[ \"1883\", \"Clayton\", \"Middleton\", \"Y5C 1I8\", \"Antigua and Barbuda\" ],\n\t[ \"1884\", \"May\", \"Rivers\", \"26782\", \"Uzbekistan\" ],\n\t[ \"1885\", \"Hadassah\", \"Caldwell\", \"64493\", \"Chile\" ],\n\t[ \"1886\", \"Penelope\", \"Gentry\", \"V5N 7A6\", \"Kyrgyzstan\" ],\n\t[ \"1887\", \"James\", \"Boyle\", \"95421\", \"Indonesia\" ],\n\t[ \"1888\", \"Yuli\", \"Cardenas\", \"W4U 5U1\", \"Solomon Islands\" ],\n\t[ \"1889\", \"George\", \"Simpson\", \"30385\", \"Brazil\" ],\n\t[ \"1890\", \"Thaddeus\", \"Ferrell\", \"E6Z 2D4\", \"Norfolk Island\" ],\n\t[ \"1891\", \"Piper\", \"Morrow\", \"S6I 1L8\", \"Estonia\" ],\n\t[ \"1892\", \"Xaviera\", \"Heath\", \"L8I 5G1\", \"Afghanistan\" ],\n\t[ \"1893\", \"Odette\", \"Patton\", \"L2S 4I8\", \"Bosnia and Herzegovina\" ],\n\t[ \"1894\", \"Stewart\", \"Phillips\", \"E8E 5W6\", \"El Salvador\" ],\n\t[ \"1895\", \"Kellie\", \"Cooper\", \"77401\", \"Cape Verde\" ],\n\t[ \"1896\", \"Kathleen\", \"Salinas\", \"F3O 4Z9\", \"Sierra Leone\" ],\n\t[ \"1897\", \"Fallon\", \"Bennett\", \"X3P 7L1\", \"Macedonia\" ],\n\t[ \"1898\", \"Jesse\", \"Guerrero\", \"I2B 1Q0\", \"Finland\" ],\n\t[ \"1899\", \"Zenaida\", \"Mcguire\", \"M5R 1X6\", \"Kenya\" ],\n\t[ \"1900\", \"Carolyn\", \"Richards\", \"03060\", \"Paraguay\" ],\n\t[ \"1901\", \"Ulla\", \"Bruce\", \"20940\", \"Cambodia\" ],\n\t[ \"1902\", \"Adrian\", \"Shaffer\", \"M5O 9Y2\", \"Thailand\" ],\n\t[ \"1903\", \"Callum\", \"Russo\", \"L3U 5S8\", \"Holy See (Vatican City State)\" ],\n\t[ \"1904\", \"Echo\", \"Mathews\", \"49158\", \"Spain\" ],\n\t[ \"1905\", \"Driscoll\", \"Buckner\", \"70115\", \"Solomon Islands\" ],\n\t[ \"1906\", \"Nayda\", \"Phillips\", \"Y7D 4A9\", \"Singapore\" ],\n\t[ \"1907\", \"Piper\", \"Livingston\", \"51701\", \"Anguilla\" ],\n\t[ \"1908\", \"Zoe\", \"Hoover\", \"C8D 8W2\", \"Iraq\" ],\n\t[ \"1909\", \"Veronica\", \"Montoya\", \"G6B 9S4\", \"Egypt\" ],\n\t[ \"1910\", \"Kato\", \"Richmond\", \"41268\", \"Saint Helena\" ],\n\t[ \"1911\", \"Kevyn\", \"Lancaster\", \"71863\", \"Montserrat\" ],\n\t[ \"1912\", \"Rowan\", \"Carr\", \"90825\", \"Ethiopia\" ],\n\t[ \"1913\", \"Alec\", \"Wells\", \"C9P 8I7\", \"Netherlands\" ],\n\t[ \"1914\", \"Graham\", \"Shields\", \"S4B 5O9\", \"Norfolk Island\" ],\n\t[ \"1915\", \"Pearl\", \"Austin\", \"43642\", \"Bermuda\" ],\n\t[ \"1916\", \"Dana\", \"Pugh\", \"H4C 2A9\", \"Tuvalu\" ],\n\t[ \"1917\", \"Lucy\", \"Ellis\", \"31272\", \"Cameroon\" ],\n\t[ \"1918\", \"Logan\", \"Wright\", \"18651\", \"Honduras\" ],\n\t[ \"1919\", \"Chantale\", \"Velasquez\", \"A5D 3X2\", \"Burundi\" ],\n\t[ \"1920\", \"Linda\", \"Ingram\", \"R1P 1G8\", \"Myanmar\" ],\n\t[ \"1921\", \"Ginger\", \"Howell\", \"Q5D 4E6\", \"Pakistan\" ],\n\t[ \"1922\", \"Unity\", \"Lester\", \"P7M 7A4\", \"Gibraltar\" ],\n\t[ \"1923\", \"Brett\", \"Rutledge\", \"Q1E 2B4\", \"Thailand\" ],\n\t[ \"1924\", \"Stewart\", \"Morrow\", \"84299\", \"Mali\" ],\n\t[ \"1925\", \"Declan\", \"Aguilar\", \"35400\", \"Kenya\" ],\n\t[ \"1926\", \"Shad\", \"Simpson\", \"N8E 2U3\", \"Saint Pierre and Miquelon\" ],\n\t[ \"1927\", \"Alma\", \"Benton\", \"Q6C 5D2\", \"Pakistan\" ],\n\t[ \"1928\", \"Herman\", \"Bailey\", \"P5K 2X4\", \"Ireland\" ],\n\t[ \"1929\", \"Keegan\", \"Mendez\", \"19421\", \"Lesotho\" ],\n\t[ \"1930\", \"Erasmus\", \"Foreman\", \"J9T 1A2\", \"Panama\" ],\n\t[ \"1931\", \"Tarik\", \"Meyers\", \"Z8V 5F9\", \"Cape Verde\" ],\n\t[ \"1932\", \"Donovan\", \"Knox\", \"B8N 1G7\", \"Iceland\" ],\n\t[ \"1933\", \"Chloe\", \"Mccray\", \"67537\", \"United Arab Emirates\" ],\n\t[ \"1934\", \"Marvin\", \"Edwards\", \"21809\", \"Ukraine\" ],\n\t[ \"1935\", \"Freya\", \"Watkins\", \"80099\", \"Central African Republic\" ],\n\t[ \"1936\", \"Jerry\", \"Morgan\", \"C7U 7H5\", \"Guinea\" ],\n\t[ \"1937\", \"Yardley\", \"Marsh\", \"23654\", \"India\" ],\n\t[ \"1938\", \"Ava\", \"Mueller\", \"83374\", \"Greece\" ],\n\t[ \"1939\", \"Silas\", \"Joseph\", \"P5M 7F2\", \"Sweden\" ],\n\t[ \"1940\", \"Winifred\", \"Solis\", \"12335\", \"Viet Nam\" ],\n\t[ \"1941\", \"Virginia\", \"Cantu\", \"K4C 3S5\", \"Yemen\" ],\n\t[ \"1942\", \"Sade\", \"Cole\", \"40295\", \"Spain\" ],\n\t[ \"1943\", \"Ethan\", \"Hodges\", \"R7W 8X2\", \"Congo\" ],\n\t[ \"1944\", \"Barbara\", \"Day\", \"K6L 7S6\", \"Nigeria\" ],\n\t[ \"1945\", \"Conan\", \"Simon\", \"22124\", \"Guyana\" ],\n\t[ \"1946\", \"Lars\", \"Puckett\", \"R6Y 4N7\", \"Trinidad and Tobago\" ],\n\t[ \"1947\", \"Quin\", \"Ewing\", \"99053\", \"American Samoa\" ],\n\t[ \"1948\", \"Ali\", \"Haynes\", \"N6Z 7X0\", \"China\" ],\n\t[ \"1949\", \"Sara\", \"Wagner\", \"74544\", \"Chad\" ],\n\t[ \"1950\", \"Griffith\", \"Fuentes\", \"R1W 6Z9\", \"Slovenia\" ],\n\t[ \"1951\", \"Sharon\", \"Crane\", \"I2Z 9D6\", \"Philippines\" ],\n\t[ \"1952\", \"Marsden\", \"Acosta\", \"K6C 8C5\", \"Jordan\" ],\n\t[ \"1953\", \"Whoopi\", \"Villarreal\", \"E2O 1T5\", \"Svalbard and Jan Mayen\" ],\n\t[ \"1954\", \"Bruno\", \"Ball\", \"31931\", \"Barbados\" ],\n\t[ \"1955\", \"Ulric\", \"Young\", \"T4R 3M5\", \"Solomon Islands\" ],\n\t[ \"1956\", \"Noah\", \"Gonzalez\", \"L3O 6V5\", \"Mayotte\" ],\n\t[ \"1957\", \"Cheryl\", \"Gilliam\", \"F4Q 4H9\", \"Albania\" ],\n\t[ \"1958\", \"Bo\", \"Rowe\", \"67020\", \"Jamaica\" ],\n\t[ \"1959\", \"Kelly\", \"Alexander\", \"P8Y 9K5\", \"Somalia\" ],\n\t[ \"1960\", \"Hop\", \"Navarro\", \"O1G 9R6\", \"Cayman Islands\" ],\n\t[ \"1961\", \"Zachery\", \"Howard\", \"67147\", \"Fiji\" ],\n\t[ \"1962\", \"Elvis\", \"Daugherty\", \"X8V 7S7\", \"Jordan\" ],\n\t[ \"1963\", \"Mallory\", \"Hensley\", \"A5S 1U6\", \"Swaziland\" ],\n\t[ \"1964\", \"Fulton\", \"Williams\", \"P4C 4O5\", \"Viet Nam\" ],\n\t[ \"1965\", \"Madison\", \"Pittman\", \"F8G 1P9\", \"Chile\" ],\n\t[ \"1966\", \"Kermit\", \"Bradford\", \"W2T 6I5\", \"Uganda\" ],\n\t[ \"1967\", \"Gabriel\", \"Ballard\", \"N5M 6W0\", \"Andorra\" ],\n\t[ \"1968\", \"Jasmine\", \"Barber\", \"M2Z 7G5\", \"French Guiana\" ],\n\t[ \"1969\", \"Thane\", \"Koch\", \"21097\", \"Armenia\" ],\n\t[ \"1970\", \"Montana\", \"Oneal\", \"L2A 9Q6\", \"South Africa\" ],\n\t[ \"1971\", \"Brett\", \"Coleman\", \"79399\", \"Luxembourg\" ],\n\t[ \"1972\", \"Ivy\", \"Jimenez\", \"28549\", \"Senegal\" ],\n\t[ \"1973\", \"Shad\", \"Melton\", \"Z8N 4Z5\", \"Cook Islands\" ],\n\t[ \"1974\", \"Suki\", \"Vance\", \"H1A 1Z3\", \"Ireland\" ],\n\t[ \"1975\", \"Jin\", \"Hodges\", \"L2I 3T8\", \"France\" ],\n\t[ \"1976\", \"Diana\", \"Booth\", \"M3V 1S8\", \"Iran, Islamic Republic of\" ],\n\t[ \"1977\", \"Martha\", \"Nunez\", \"27837\", \"Northern Mariana Islands\" ],\n\t[ \"1978\", \"Silas\", \"Ayers\", \"17121\", \"United States\" ],\n\t[ \"1979\", \"Ainsley\", \"Whitaker\", \"42695\", \"Dominica\" ],\n\t[ \"1980\", \"Dillon\", \"Tucker\", \"N3R 3P3\", \"Botswana\" ],\n\t[ \"1981\", \"Lillian\", \"West\", \"57665\", \"Palau\" ],\n\t[ \"1982\", \"Talon\", \"Hart\", \"Z6T 4W3\", \"Serbia and Montenegro\" ],\n\t[ \"1983\", \"Desiree\", \"Booth\", \"Q1W 9S1\", \"Gambia\" ],\n\t[ \"1984\", \"Chastity\", \"Merrill\", \"F3B 9W7\", \"Puerto Rico\" ],\n\t[ \"1985\", \"Nichole\", \"Leon\", \"T7V 5D6\", \"Belize\" ],\n\t[ \"1986\", \"Rafael\", \"Washington\", \"87676\", \"Eritrea\" ],\n\t[ \"1987\", \"Samson\", \"Mathews\", \"G7Q 5V6\", \"Burkina Faso\" ],\n\t[ \"1988\", \"Jasper\", \"Campbell\", \"23791\", \"Thailand\" ],\n\t[ \"1989\", \"Mason\", \"Harrington\", \"R9R 5S3\", \"Nigeria\" ],\n\t[ \"1990\", \"Jameson\", \"Frederick\", \"R1N 4S0\", \"Guyana\" ],\n\t[ \"1991\", \"Cadman\", \"Woodard\", \"43080\", \"Gambia\" ],\n\t[ \"1992\", \"Catherine\", \"Gill\", \"W4W 8A4\", \"Philippines\" ],\n\t[ \"1993\", \"Yael\", \"Richards\", \"99504\", \"Kenya\" ],\n\t[ \"1994\", \"Porter\", \"Finley\", \"C8Z 5E0\", \"Brunei Darussalam\" ],\n\t[ \"1995\", \"Alden\", \"Merritt\", \"P4E 9F0\", \"Mali\" ],\n\t[ \"1996\", \"Kaye\", \"Andrews\", \"I5I 3A4\", \"Cayman Islands\" ],\n\t[ \"1997\", \"Luke\", \"Bryant\", \"F3Z 2U1\", \"Kuwait\" ],\n\t[ \"1998\", \"Heather\", \"Blackburn\", \"L1T 6B9\", \"Mongolia\" ],\n\t[ \"1999\", \"Gage\", \"Sykes\", \"L9Q 7E6\", \"Palestinian Territory, Occupied\" ],\n\t[ \"2000\", \"Kaseem\", \"Harris\", \"B9O 1C3\", \"Korea\" ],\n\t[ \"2001\", \"Quail\", \"Leonard\", \"88755\", \"Burkina Faso\" ],\n\t[ \"2002\", \"Dennis\", \"Craft\", \"13309\", \"Namibia\" ],\n\t[ \"2003\", \"Ivor\", \"Forbes\", \"C3P 2E1\", \"Malta\" ],\n\t[ \"2004\", \"Cade\", \"Herman\", \"R1E 5X9\", \"Sri Lanka\" ],\n\t[ \"2005\", \"Larissa\", \"Santiago\", \"57781\", \"Dominica\" ],\n\t[ \"2006\", \"Hyatt\", \"Tillman\", \"45071\", \"Ghana\" ],\n\t[ \"2007\", \"Timothy\", \"Rodgers\", \"F8W 9W0\", \"Andorra\" ],\n\t[ \"2008\", \"Hanae\", \"Powell\", \"F8B 7P7\", \"Luxembourg\" ],\n\t[ \"2009\", \"Ima\", \"Pennington\", \"Z5W 5N5\", \"Latvia\" ],\n\t[ \"2010\", \"Laurel\", \"Bell\", \"16805\", \"Venezuela\" ],\n\t[ \"2011\", \"Avye\", \"Long\", \"04794\", \"Dominica\" ],\n\t[ \"2012\", \"Lysandra\", \"Pierce\", \"H7O 3F4\", \"Zimbabwe\" ],\n\t[ \"2013\", \"Eve\", \"Pollard\", \"L5K 6E2\", \"Algeria\" ],\n\t[ \"2014\", \"Ina\", \"Mcdowell\", \"65712\", \"Saint Lucia\" ],\n\t[ \"2015\", \"Meredith\", \"Serrano\", \"V8M 6K7\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"2016\", \"Daphne\", \"Irwin\", \"89933\", \"Mongolia\" ],\n\t[ \"2017\", \"Adam\", \"Henson\", \"F6U 9D5\", \"Chile\" ],\n\t[ \"2018\", \"Amery\", \"Hoover\", \"13408\", \"Mongolia\" ],\n\t[ \"2019\", \"Quamar\", \"Hendricks\", \"20310\", \"Gambia\" ],\n\t[ \"2020\", \"Ori\", \"Wheeler\", \"89005\", \"Nigeria\" ],\n\t[ \"2021\", \"Zena\", \"Douglas\", \"Z1O 6F9\", \"Serbia and Montenegro\" ],\n\t[ \"2022\", \"Buckminster\", \"Huffman\", \"R4V 9L2\", \"Mali\" ],\n\t[ \"2023\", \"Harlan\", \"Gamble\", \"U4I 7M4\", \"Guyana\" ],\n\t[ \"2024\", \"Dalton\", \"Cline\", \"63829\", \"Tonga\" ],\n\t[ \"2025\", \"Martha\", \"Weber\", \"Z9B 4T0\", \"Bangladesh\" ],\n\t[ \"2026\", \"Vernon\", \"Francis\", \"M5A 9X7\", \"Tokelau\" ],\n\t[ \"2027\", \"Janna\", \"Velazquez\", \"67406\", \"Qatar\" ],\n\t[ \"2028\", \"Fuller\", \"Keller\", \"80871\", \"Burkina Faso\" ],\n\t[ \"2029\", \"Jamal\", \"Spears\", \"42197\", \"Norfolk Island\" ],\n\t[ \"2030\", \"Christen\", \"Holcomb\", \"29806\", \"Norway\" ],\n\t[ \"2031\", \"Mary\", \"Carter\", \"C6W 9K9\", \"Belgium\" ],\n\t[ \"2032\", \"Colorado\", \"Austin\", \"62904\", \"Cook Islands\" ],\n\t[ \"2033\", \"Fritz\", \"Hunt\", \"X8G 2V0\", \"Morocco\" ],\n\t[ \"2034\", \"Isabella\", \"Bush\", \"17676\", \"Monaco\" ],\n\t[ \"2035\", \"Adam\", \"Gilliam\", \"H7K 9X3\", \"Indonesia\" ],\n\t[ \"2036\", \"John\", \"Austin\", \"O7X 4Z0\", \"Czech Republic\" ],\n\t[ \"2037\", \"Cassady\", \"Yates\", \"68835\", \"Christmas Island\" ],\n\t[ \"2038\", \"Ori\", \"Cantrell\", \"56920\", \"Guinea\" ],\n\t[ \"2039\", \"May\", \"Horn\", \"47805\", \"Kuwait\" ],\n\t[ \"2040\", \"Skyler\", \"Clarke\", \"64131\", \"Lebanon\" ],\n\t[ \"2041\", \"Levi\", \"Foster\", \"S5Q 4B2\", \"Germany\" ],\n\t[ \"2042\", \"Veda\", \"Wilkinson\", \"L7Z 9M8\", \"Niger\" ],\n\t[ \"2043\", \"Brendan\", \"Levine\", \"L5B 9P4\", \"Nepal\" ],\n\t[ \"2044\", \"Carson\", \"Sullivan\", \"93066\", \"United Arab Emirates\" ],\n\t[ \"2045\", \"Steven\", \"Spencer\", \"F1V 9A7\", \"Pitcairn\" ],\n\t[ \"2046\", \"Halla\", \"Michael\", \"N1U 1E7\", \"Seychelles\" ],\n\t[ \"2047\", \"Jamal\", \"Hobbs\", \"G3D 6J7\", \"New Caledonia\" ],\n\t[ \"2048\", \"Steel\", \"Bush\", \"U8F 6T2\", \"Belize\" ],\n\t[ \"2049\", \"Ahmed\", \"Dennis\", \"M6E 3P3\", \"Afghanistan\" ],\n\t[ \"2050\", \"Aspen\", \"Estes\", \"32157\", \"American Samoa\" ],\n\t[ \"2051\", \"Peter\", \"Kelly\", \"91773\", \"Morocco\" ],\n\t[ \"2052\", \"Xandra\", \"Grimes\", \"66702\", \"Tokelau\" ],\n\t[ \"2053\", \"Michael\", \"Battle\", \"J2J 2N5\", \"Honduras\" ],\n\t[ \"2054\", \"Steel\", \"Wiggins\", \"34625\", \"United States Minor Outlying Islands\" ],\n\t[ \"2055\", \"Holmes\", \"Christian\", \"45402\", \"Liechtenstein\" ],\n\t[ \"2056\", \"Charles\", \"Barrett\", \"O4N 9N8\", \"Lebanon\" ],\n\t[ \"2057\", \"Hermione\", \"Soto\", \"C8E 4H8\", \"Congo\" ],\n\t[ \"2058\", \"Elton\", \"Maxwell\", \"89033\", \"Madagascar\" ],\n\t[ \"2059\", \"Zelda\", \"Burks\", \"B7W 5G7\", \"Sweden\" ],\n\t[ \"2060\", \"Lynn\", \"David\", \"P3D 5K5\", \"Chad\" ],\n\t[ \"2061\", \"Margaret\", \"Neal\", \"47438\", \"Western Sahara\" ],\n\t[ \"2062\", \"David\", \"Vaughan\", \"E3L 8D9\", \"Tokelau\" ],\n\t[ \"2063\", \"Vladimir\", \"Mcfarland\", \"U9V 1B3\", \"Belgium\" ],\n\t[ \"2064\", \"Uriah\", \"Harrington\", \"77051\", \"United Arab Emirates\" ],\n\t[ \"2065\", \"Noel\", \"Merritt\", \"J3G 7S1\", \"Dominican Republic\" ],\n\t[ \"2066\", \"Christine\", \"Key\", \"54543\", \"Niger\" ],\n\t[ \"2067\", \"Illana\", \"Hendricks\", \"07584\", \"Montserrat\" ],\n\t[ \"2068\", \"Pearl\", \"Lewis\", \"U5D 2V3\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"2069\", \"Victoria\", \"Bullock\", \"17462\", \"Mauritania\" ],\n\t[ \"2070\", \"Benedict\", \"Marsh\", \"61479\", \"Guyana\" ],\n\t[ \"2071\", \"Quemby\", \"Washington\", \"99774\", \"French Polynesia\" ],\n\t[ \"2072\", \"Shelley\", \"Noble\", \"U8S 5Z4\", \"Philippines\" ],\n\t[ \"2073\", \"Olivia\", \"Britt\", \"72344\", \"Holy See (Vatican City State)\" ],\n\t[ \"2074\", \"Oleg\", \"Hendrix\", \"67567\", \"Cuba\" ],\n\t[ \"2075\", \"Hermione\", \"Gutierrez\", \"J5K 2J1\", \"Mozambique\" ],\n\t[ \"2076\", \"Myra\", \"Dean\", \"03485\", \"Andorra\" ],\n\t[ \"2077\", \"Deacon\", \"Moore\", \"34501\", \"Tunisia\" ],\n\t[ \"2078\", \"Dai\", \"Baird\", \"B2P 4R0\", \"Cambodia\" ],\n\t[ \"2079\", \"Levi\", \"Melton\", \"K7T 4B1\", \"Zimbabwe\" ],\n\t[ \"2080\", \"Ocean\", \"Dalton\", \"66801\", \"Gabon\" ],\n\t[ \"2081\", \"Selma\", \"Harding\", \"D7N 3J9\", \"Kyrgyzstan\" ],\n\t[ \"2082\", \"Maisie\", \"Gill\", \"56324\", \"Morocco\" ],\n\t[ \"2083\", \"Hillary\", \"Horne\", \"Y6O 6G3\", \"Cyprus\" ],\n\t[ \"2084\", \"Joel\", \"Stokes\", \"77952\", \"Burundi\" ],\n\t[ \"2085\", \"Channing\", \"Patterson\", \"G6B 8H4\", \"China\" ],\n\t[ \"2086\", \"Elliott\", \"Cleveland\", \"H3J 9U9\", \"Namibia\" ],\n\t[ \"2087\", \"Petra\", \"Gay\", \"44314\", \"Palestinian Territory, Occupied\" ],\n\t[ \"2088\", \"May\", \"Hatfield\", \"48918\", \"Faroe Islands\" ],\n\t[ \"2089\", \"Jemima\", \"Francis\", \"14347\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"2090\", \"Kyla\", \"Hale\", \"46200\", \"Cocos (Keeling) Islands\" ],\n\t[ \"2091\", \"Veda\", \"Bruce\", \"F5W 9A6\", \"Mauritania\" ],\n\t[ \"2092\", \"Sybill\", \"Avila\", \"58663\", \"Angola\" ],\n\t[ \"2093\", \"Charissa\", \"Salazar\", \"35271\", \"Faroe Islands\" ],\n\t[ \"2094\", \"Steven\", \"Allison\", \"E5L 4A3\", \"Wallis and Futuna\" ],\n\t[ \"2095\", \"Kane\", \"Parks\", \"D5C 6K7\", \"Norfolk Island\" ],\n\t[ \"2096\", \"Alika\", \"Bishop\", \"S3P 3O3\", \"China\" ],\n\t[ \"2097\", \"James\", \"Bonner\", \"33277\", \"Canada\" ],\n\t[ \"2098\", \"Yoko\", \"Foster\", \"B5J 6P9\", \"Croatia\" ],\n\t[ \"2099\", \"Ivy\", \"Riggs\", \"94420\", \"Kiribati\" ],\n\t[ \"2100\", \"Urielle\", \"Rosa\", \"V6W 2A0\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"2101\", \"Armando\", \"Shepherd\", \"Y5C 5W6\", \"Panama\" ],\n\t[ \"2102\", \"Haley\", \"Ingram\", \"B4H 5U5\", \"Fiji\" ],\n\t[ \"2103\", \"Brielle\", \"Dyer\", \"P2S 4H7\", \"Malawi\" ],\n\t[ \"2104\", \"Francis\", \"Brady\", \"24239\", \"Uruguay\" ],\n\t[ \"2105\", \"Fiona\", \"Webster\", \"72015\", \"Belize\" ],\n\t[ \"2106\", \"Aiko\", \"Santos\", \"K4H 1N0\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"2107\", \"Amir\", \"Rivas\", \"02737\", \"Papua New Guinea\" ],\n\t[ \"2108\", \"Mira\", \"Kerr\", \"W6E 6Y2\", \"Sri Lanka\" ],\n\t[ \"2109\", \"Harrison\", \"Jensen\", \"50193\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"2110\", \"Merrill\", \"Randall\", \"21534\", \"Colombia\" ],\n\t[ \"2111\", \"Benjamin\", \"Howe\", \"N8M 4N6\", \"Turkmenistan\" ],\n\t[ \"2112\", \"Melyssa\", \"Kidd\", \"97657\", \"Cameroon\" ],\n\t[ \"2113\", \"Henry\", \"Moore\", \"95626\", \"Botswana\" ],\n\t[ \"2114\", \"Nash\", \"Peters\", \"K3V 9F3\", \"Wallis and Futuna\" ],\n\t[ \"2115\", \"Iliana\", \"Holt\", \"E9F 2Q8\", \"Netherlands Antilles\" ],\n\t[ \"2116\", \"Naomi\", \"Hood\", \"P6D 2G3\", \"Anguilla\" ],\n\t[ \"2117\", \"Ainsley\", \"Barron\", \"94273\", \"New Caledonia\" ],\n\t[ \"2118\", \"Daphne\", \"Acevedo\", \"A9I 9E4\", \"Bermuda\" ],\n\t[ \"2119\", \"Kiona\", \"Keith\", \"62523\", \"Saint Lucia\" ],\n\t[ \"2120\", \"Kirsten\", \"Mcgee\", \"97481\", \"Macedonia\" ],\n\t[ \"2121\", \"Emerald\", \"Franklin\", \"Q2I 6D6\", \"Botswana\" ],\n\t[ \"2122\", \"Hall\", \"Schroeder\", \"I2D 9L7\", \"Kenya\" ],\n\t[ \"2123\", \"Amaya\", \"Lynch\", \"50534\", \"Costa Rica\" ],\n\t[ \"2124\", \"Randall\", \"Hanson\", \"B4R 2S3\", \"United Arab Emirates\" ],\n\t[ \"2125\", \"Sasha\", \"Clarke\", \"50972\", \"United States Minor Outlying Islands\" ],\n\t[ \"2126\", \"Susan\", \"Sutton\", \"Z4T 6K3\", \"Solomon Islands\" ],\n\t[ \"2127\", \"Hiram\", \"Torres\", \"C8O 5O7\", \"Botswana\" ],\n\t[ \"2128\", \"Melanie\", \"Calhoun\", \"87097\", \"New Zealand\" ],\n\t[ \"2129\", \"Courtney\", \"Sutton\", \"07944\", \"Spain\" ],\n\t[ \"2130\", \"Reuben\", \"Beard\", \"U6Z 8N5\", \"Faroe Islands\" ],\n\t[ \"2131\", \"Jarrod\", \"Payne\", \"94171\", \"Turkey\" ],\n\t[ \"2132\", \"Vincent\", \"Potts\", \"V5Z 9G9\", \"Madagascar\" ],\n\t[ \"2133\", \"Kaye\", \"Kent\", \"O1B 2Z9\", \"Fiji\" ],\n\t[ \"2134\", \"Carol\", \"Green\", \"78719\", \"Comoros\" ],\n\t[ \"2135\", \"Cairo\", \"Combs\", \"G3C 8F0\", \"Indonesia\" ],\n\t[ \"2136\", \"Ebony\", \"Parker\", \"77377\", \"Portugal\" ],\n\t[ \"2137\", \"Gary\", \"Shaffer\", \"F1B 9W7\", \"French Guiana\" ],\n\t[ \"2138\", \"Gay\", \"Jimenez\", \"05726\", \"Nepal\" ],\n\t[ \"2139\", \"Patience\", \"Bryan\", \"60437\", \"Macao\" ],\n\t[ \"2140\", \"Zenaida\", \"Bowen\", \"V3S 1G7\", \"Mauritania\" ],\n\t[ \"2141\", \"Isaac\", \"Aguirre\", \"X8S 9K4\", \"Bermuda\" ],\n\t[ \"2142\", \"Lacy\", \"Harrell\", \"67362\", \"Bhutan\" ],\n\t[ \"2143\", \"Jael\", \"Grimes\", \"95612\", \"Anguilla\" ],\n\t[ \"2144\", \"Catherine\", \"Galloway\", \"45834\", \"Suriname\" ],\n\t[ \"2145\", \"Donna\", \"Burt\", \"N8C 2M8\", \"Burkina Faso\" ],\n\t[ \"2146\", \"Colleen\", \"Ball\", \"N3E 4U8\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"2147\", \"Lael\", \"Brady\", \"01369\", \"Macedonia\" ],\n\t[ \"2148\", \"Kermit\", \"Logan\", \"Y5P 8Q8\", \"Honduras\" ],\n\t[ \"2149\", \"Katelyn\", \"Orr\", \"R7X 9W3\", \"Switzerland\" ],\n\t[ \"2150\", \"Alisa\", \"Glenn\", \"17831\", \"Timor-leste\" ],\n\t[ \"2151\", \"Lee\", \"Bean\", \"89445\", \"Guam\" ],\n\t[ \"2152\", \"Maryam\", \"Cotton\", \"57924\", \"Gambia\" ],\n\t[ \"2153\", \"Amena\", \"Love\", \"X1Z 6F7\", \"Thailand\" ],\n\t[ \"2154\", \"Tallulah\", \"Case\", \"87477\", \"Ecuador\" ],\n\t[ \"2155\", \"Carlos\", \"Sanford\", \"F6S 8J6\", \"Iraq\" ],\n\t[ \"2156\", \"Quamar\", \"David\", \"D5F 2M8\", \"Gabon\" ],\n\t[ \"2157\", \"Cassady\", \"Mays\", \"12786\", \"Netherlands\" ],\n\t[ \"2158\", \"Jenna\", \"Rowland\", \"88845\", \"China\" ],\n\t[ \"2159\", \"Justin\", \"Tanner\", \"66071\", \"Nepal\" ],\n\t[ \"2160\", \"Riley\", \"Santiago\", \"F8K 2Y6\", \"Gabon\" ],\n\t[ \"2161\", \"Iris\", \"Gallegos\", \"K9C 3T9\", \"Niue\" ],\n\t[ \"2162\", \"Kato\", \"Osborn\", \"N4C 2L8\", \"Puerto Rico\" ],\n\t[ \"2163\", \"Imogene\", \"Schroeder\", \"79710\", \"United States Minor Outlying Islands\" ],\n\t[ \"2164\", \"Olympia\", \"Hebert\", \"D4W 1L0\", \"Saint Lucia\" ],\n\t[ \"2165\", \"Skyler\", \"Burnett\", \"B2R 5H7\", \"Antarctica\" ],\n\t[ \"2166\", \"Faith\", \"Sims\", \"88476\", \"Egypt\" ],\n\t[ \"2167\", \"Emily\", \"Odom\", \"U7O 2P6\", \"Kuwait\" ],\n\t[ \"2168\", \"Carly\", \"Washington\", \"46063\", \"Benin\" ],\n\t[ \"2169\", \"Jolene\", \"Meyer\", \"B2B 9A4\", \"Australia\" ],\n\t[ \"2170\", \"Ayanna\", \"Conrad\", \"84360\", \"Northern Mariana Islands\" ],\n\t[ \"2171\", \"Violet\", \"Blankenship\", \"W2B 3U1\", \"New Caledonia\" ],\n\t[ \"2172\", \"Rhona\", \"Gallegos\", \"10931\", \"Montserrat\" ],\n\t[ \"2173\", \"Alice\", \"Hodges\", \"96181\", \"Burkina Faso\" ],\n\t[ \"2174\", \"Brody\", \"Sandoval\", \"68959\", \"Pitcairn\" ],\n\t[ \"2175\", \"Isabella\", \"Dunlap\", \"U8U 7Y8\", \"Afghanistan\" ],\n\t[ \"2176\", \"Jordan\", \"Golden\", \"55152\", \"Guam\" ],\n\t[ \"2177\", \"Gillian\", \"Thomas\", \"75633\", \"Djibouti\" ],\n\t[ \"2178\", \"Hollee\", \"Clay\", \"79847\", \"Panama\" ],\n\t[ \"2179\", \"Dane\", \"Knapp\", \"89535\", \"Armenia\" ],\n\t[ \"2180\", \"Avram\", \"Martin\", \"T4S 4E2\", \"Madagascar\" ],\n\t[ \"2181\", \"Fuller\", \"Newman\", \"47317\", \"Jamaica\" ],\n\t[ \"2182\", \"Nina\", \"Berry\", \"81360\", \"Mongolia\" ],\n\t[ \"2183\", \"Akeem\", \"Pratt\", \"56230\", \"Colombia\" ],\n\t[ \"2184\", \"Lacy\", \"Hayes\", \"U7T 4F5\", \"Cyprus\" ],\n\t[ \"2185\", \"Alfonso\", \"Mcclure\", \"06797\", \"Swaziland\" ],\n\t[ \"2186\", \"Cedric\", \"Love\", \"64720\", \"Bermuda\" ],\n\t[ \"2187\", \"Astra\", \"Fernandez\", \"H3I 1B0\", \"Mongolia\" ],\n\t[ \"2188\", \"Iliana\", \"Durham\", \"R8C 7M8\", \"Spain\" ],\n\t[ \"2189\", \"Gwendolyn\", \"Livingston\", \"C7X 5L1\", \"Northern Mariana Islands\" ],\n\t[ \"2190\", \"Caldwell\", \"Anderson\", \"69099\", \"Kuwait\" ],\n\t[ \"2191\", \"Risa\", \"Mejia\", \"P7A 4U7\", \"Israel\" ],\n\t[ \"2192\", \"Dora\", \"Navarro\", \"L6G 2O8\", \"Ireland\" ],\n\t[ \"2193\", \"Kirk\", \"Dean\", \"I2T 3E6\", \"Pitcairn\" ],\n\t[ \"2194\", \"Jackson\", \"Harvey\", \"53467\", \"Myanmar\" ],\n\t[ \"2195\", \"Thane\", \"Ballard\", \"87240\", \"Solomon Islands\" ],\n\t[ \"2196\", \"Nadine\", \"Estes\", \"62003\", \"Malta\" ],\n\t[ \"2197\", \"Candace\", \"Nunez\", \"57223\", \"Virgin Islands, British\" ],\n\t[ \"2198\", \"Zelda\", \"Odom\", \"X4V 7F5\", \"Mongolia\" ],\n\t[ \"2199\", \"Wylie\", \"Ayala\", \"S4I 4Q4\", \"Djibouti\" ],\n\t[ \"2200\", \"Azalia\", \"Page\", \"57239\", \"Korea, Republic of\" ],\n\t[ \"2201\", \"Joshua\", \"Burch\", \"R7B 1N7\", \"Samoa\" ],\n\t[ \"2202\", \"Basil\", \"Ramos\", \"71614\", \"Tunisia\" ],\n\t[ \"2203\", \"Jessica\", \"Shields\", \"U2D 4X3\", \"Syrian Arab Republic\" ],\n\t[ \"2204\", \"Clio\", \"Singleton\", \"I1B 1B0\", \"Ghana\" ],\n\t[ \"2205\", \"Astra\", \"Dotson\", \"62378\", \"Turks and Caicos Islands\" ],\n\t[ \"2206\", \"Hamish\", \"Tucker\", \"E4Z 3N3\", \"Anguilla\" ],\n\t[ \"2207\", \"Rachel\", \"Matthews\", \"U4I 8M3\", \"Trinidad and Tobago\" ],\n\t[ \"2208\", \"Clayton\", \"Ball\", \"95319\", \"India\" ],\n\t[ \"2209\", \"Quinn\", \"Wilkinson\", \"Y6M 3Q7\", \"Virgin Islands, U.S.\" ],\n\t[ \"2210\", \"Phelan\", \"Talley\", \"00543\", \"Philippines\" ],\n\t[ \"2211\", \"Carol\", \"Brock\", \"M6X 4E2\", \"Gibraltar\" ],\n\t[ \"2212\", \"Nomlanga\", \"Robles\", \"56511\", \"Viet Nam\" ],\n\t[ \"2213\", \"Adrian\", \"Clay\", \"79479\", \"France\" ],\n\t[ \"2214\", \"Sara\", \"Riley\", \"B9N 5P4\", \"Peru\" ],\n\t[ \"2215\", \"Christine\", \"Sweeney\", \"W1Z 4S4\", \"French Polynesia\" ],\n\t[ \"2216\", \"Leilani\", \"Johnston\", \"W1C 8M8\", \"American Samoa\" ],\n\t[ \"2217\", \"Melyssa\", \"Lambert\", \"V1B 4P6\", \"Iraq\" ],\n\t[ \"2218\", \"Talon\", \"Delacruz\", \"Y3N 9R2\", \"Bulgaria\" ],\n\t[ \"2219\", \"Garth\", \"Jennings\", \"59667\", \"Malta\" ],\n\t[ \"2220\", \"Naida\", \"Coleman\", \"45456\", \"Finland\" ],\n\t[ \"2221\", \"Indigo\", \"Lopez\", \"77160\", \"Pitcairn\" ],\n\t[ \"2222\", \"Asher\", \"French\", \"99064\", \"British Indian Ocean Territory\" ],\n\t[ \"2223\", \"Vivian\", \"Mcgowan\", \"46310\", \"Oman\" ],\n\t[ \"2224\", \"Gwendolyn\", \"Cervantes\", \"48905\", \"Cocos (Keeling) Islands\" ],\n\t[ \"2225\", \"Logan\", \"Reid\", \"87376\", \"Ethiopia\" ],\n\t[ \"2226\", \"Bryar\", \"Wolfe\", \"75860\", \"Comoros\" ],\n\t[ \"2227\", \"Demetrius\", \"Hutchinson\", \"97252\", \"Dominican Republic\" ],\n\t[ \"2228\", \"Freya\", \"Becker\", \"04872\", \"United States\" ],\n\t[ \"2229\", \"Abel\", \"Brooks\", \"I7O 1M1\", \"Comoros\" ],\n\t[ \"2230\", \"Silas\", \"Mcguire\", \"04101\", \"Indonesia\" ],\n\t[ \"2231\", \"Quinn\", \"Fletcher\", \"B6E 2B0\", \"Niger\" ],\n\t[ \"2232\", \"Rooney\", \"Holden\", \"29294\", \"Micronesia\" ],\n\t[ \"2233\", \"Iris\", \"Hale\", \"N7W 6E9\", \"Greenland\" ],\n\t[ \"2234\", \"Candace\", \"Barry\", \"U8I 5A4\", \"Germany\" ],\n\t[ \"2235\", \"Yetta\", \"Ball\", \"62055\", \"Switzerland\" ],\n\t[ \"2236\", \"Dai\", \"Bentley\", \"P2Y 4C5\", \"Dominica\" ],\n\t[ \"2237\", \"Gannon\", \"Dunlap\", \"45728\", \"Fiji\" ],\n\t[ \"2238\", \"Chelsea\", \"Mays\", \"36498\", \"Guinea\" ],\n\t[ \"2239\", \"Ruth\", \"Mcguire\", \"62924\", \"Maldives\" ],\n\t[ \"2240\", \"Melissa\", \"Durham\", \"D6S 1A2\", \"Armenia\" ],\n\t[ \"2241\", \"Eaton\", \"Salinas\", \"53689\", \"Somalia\" ],\n\t[ \"2242\", \"Driscoll\", \"Cunningham\", \"31194\", \"Sweden\" ],\n\t[ \"2243\", \"Bevis\", \"Acosta\", \"V4M 9Z2\", \"Jamaica\" ],\n\t[ \"2244\", \"Anastasia\", \"Mcknight\", \"24878\", \"Sao Tome and Principe\" ],\n\t[ \"2245\", \"Anika\", \"Rowland\", \"45287\", \"Chile\" ],\n\t[ \"2246\", \"Dexter\", \"Rollins\", \"00684\", \"Iran, Islamic Republic of\" ],\n\t[ \"2247\", \"Brielle\", \"Irwin\", \"V4U 7R2\", \"Belgium\" ],\n\t[ \"2248\", \"Ocean\", \"Fields\", \"08544\", \"Croatia\" ],\n\t[ \"2249\", \"Sonia\", \"Solis\", \"C4X 1L5\", \"Niue\" ],\n\t[ \"2250\", \"Joseph\", \"Haney\", \"29567\", \"Argentina\" ],\n\t[ \"2251\", \"Lamar\", \"Heath\", \"81699\", \"Italy\" ],\n\t[ \"2252\", \"Raya\", \"Jordan\", \"R6K 7B3\", \"Spain\" ],\n\t[ \"2253\", \"Brody\", \"Frost\", \"34564\", \"Dominican Republic\" ],\n\t[ \"2254\", \"Ann\", \"Hawkins\", \"S3A 5K7\", \"Yemen\" ],\n\t[ \"2255\", \"Phillip\", \"Lindsay\", \"80544\", \"Sierra Leone\" ],\n\t[ \"2256\", \"Willa\", \"Maynard\", \"A6A 4C5\", \"Mexico\" ],\n\t[ \"2257\", \"Carolyn\", \"Mercer\", \"V8Z 1X5\", \"Zimbabwe\" ],\n\t[ \"2258\", \"Justin\", \"Cole\", \"68764\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"2259\", \"Emmanuel\", \"Parks\", \"99769\", \"Latvia\" ],\n\t[ \"2260\", \"Isaiah\", \"Salazar\", \"H1K 1X3\", \"Turks and Caicos Islands\" ],\n\t[ \"2261\", \"Vance\", \"Porter\", \"49607\", \"Costa Rica\" ],\n\t[ \"2262\", \"Igor\", \"Kim\", \"99489\", \"Turkmenistan\" ],\n\t[ \"2263\", \"Emi\", \"Graves\", \"F4M 5L8\", \"El Salvador\" ],\n\t[ \"2264\", \"Griffith\", \"Monroe\", \"11550\", \"Tanzania, United Republic of\" ],\n\t[ \"2265\", \"Iliana\", \"Coffey\", \"30220\", \"Albania\" ],\n\t[ \"2266\", \"Jemima\", \"Guthrie\", \"69283\", \"Saint Pierre and Miquelon\" ],\n\t[ \"2267\", \"Zenia\", \"Farrell\", \"91872\", \"Tanzania, United Republic of\" ],\n\t[ \"2268\", \"Lucas\", \"Chambers\", \"L5Z 1W0\", \"Bouvet Island\" ],\n\t[ \"2269\", \"Zenaida\", \"Valenzuela\", \"31700\", \"Guam\" ],\n\t[ \"2270\", \"Bradley\", \"Wynn\", \"21222\", \"Lithuania\" ],\n\t[ \"2271\", \"Maite\", \"Richard\", \"H4D 7X0\", \"Cameroon\" ],\n\t[ \"2272\", \"Moses\", \"House\", \"Y3Z 3K7\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"2273\", \"Erich\", \"Petersen\", \"U4N 9R7\", \"Rwanda\" ],\n\t[ \"2274\", \"Stephanie\", \"Zimmerman\", \"70097\", \"Malawi\" ],\n\t[ \"2275\", \"Rylee\", \"Schneider\", \"15645\", \"Gibraltar\" ],\n\t[ \"2276\", \"Zia\", \"Craig\", \"H1K 1N9\", \"Norway\" ],\n\t[ \"2277\", \"Fiona\", \"Chaney\", \"Y4U 7K8\", \"San Marino\" ],\n\t[ \"2278\", \"Gil\", \"Sherman\", \"64720\", \"Wallis and Futuna\" ],\n\t[ \"2279\", \"Raja\", \"Sandoval\", \"11225\", \"Lithuania\" ],\n\t[ \"2280\", \"Illana\", \"Wyatt\", \"A2M 9O2\", \"Brazil\" ],\n\t[ \"2281\", \"Declan\", \"Howell\", \"E9V 8J5\", \"San Marino\" ],\n\t[ \"2282\", \"Warren\", \"Cooper\", \"47160\", \"Guyana\" ],\n\t[ \"2283\", \"Alyssa\", \"Juarez\", \"S7G 8F2\", \"Sweden\" ],\n\t[ \"2284\", \"Quynn\", \"Long\", \"P1P 5Y4\", \"Mexico\" ],\n\t[ \"2285\", \"Dalton\", \"Booker\", \"I5T 1R3\", \"Mauritius\" ],\n\t[ \"2286\", \"Lunea\", \"Mclaughlin\", \"I3F 6D4\", \"Togo\" ],\n\t[ \"2287\", \"Irene\", \"Brock\", \"04760\", \"Tajikistan\" ],\n\t[ \"2288\", \"Raven\", \"Floyd\", \"R2N 2Y5\", \"Philippines\" ],\n\t[ \"2289\", \"Nichole\", \"Farmer\", \"81213\", \"Seychelles\" ],\n\t[ \"2290\", \"Sophia\", \"Mcdonald\", \"86291\", \"Chile\" ],\n\t[ \"2291\", \"Nehru\", \"Matthews\", \"60732\", \"Central African Republic\" ],\n\t[ \"2292\", \"Marah\", \"Nelson\", \"44533\", \"Kenya\" ],\n\t[ \"2293\", \"Marvin\", \"Lyons\", \"M7Y 1Q6\", \"Somalia\" ],\n\t[ \"2294\", \"Ian\", \"Fernandez\", \"D9U 8B6\", \"Turkey\" ],\n\t[ \"2295\", \"Gretchen\", \"Dotson\", \"48294\", \"China\" ],\n\t[ \"2296\", \"Brady\", \"Weaver\", \"S4U 4I8\", \"Burundi\" ],\n\t[ \"2297\", \"Ella\", \"Salas\", \"73771\", \"Sao Tome and Principe\" ],\n\t[ \"2298\", \"Martha\", \"Irwin\", \"06554\", \"Timor-leste\" ],\n\t[ \"2299\", \"Penelope\", \"Pratt\", \"S1R 4L4\", \"Gabon\" ],\n\t[ \"2300\", \"Kenyon\", \"Dale\", \"64548\", \"Zimbabwe\" ],\n\t[ \"2301\", \"Henry\", \"Myers\", \"07614\", \"United Arab Emirates\" ],\n\t[ \"2302\", \"Chaney\", \"Dunlap\", \"18388\", \"French Southern Territories\" ],\n\t[ \"2303\", \"Palmer\", \"Le\", \"10807\", \"Colombia\" ],\n\t[ \"2304\", \"Kaseem\", \"Madden\", \"U4E 6L9\", \"Guyana\" ],\n\t[ \"2305\", \"Grant\", \"Anthony\", \"F3K 4D8\", \"Trinidad and Tobago\" ],\n\t[ \"2306\", \"Denton\", \"Moore\", \"I5O 4I5\", \"Belize\" ],\n\t[ \"2307\", \"Regan\", \"Pittman\", \"U8T 9M1\", \"Romania\" ],\n\t[ \"2308\", \"Valentine\", \"Hunt\", \"E9O 6H6\", \"Poland\" ],\n\t[ \"2309\", \"Abraham\", \"Love\", \"X1T 4K0\", \"Philippines\" ],\n\t[ \"2310\", \"Maggie\", \"Gaines\", \"W5Z 6L4\", \"Chad\" ],\n\t[ \"2311\", \"Kylynn\", \"Sears\", \"53419\", \"Ghana\" ],\n\t[ \"2312\", \"Abel\", \"Hudson\", \"O6C 6K5\", \"Malaysia\" ],\n\t[ \"2313\", \"Aladdin\", \"Brady\", \"16465\", \"Antarctica\" ],\n\t[ \"2314\", \"Laurel\", \"Bush\", \"42295\", \"Kyrgyzstan\" ],\n\t[ \"2315\", \"Cameron\", \"Shepherd\", \"Y8R 5L7\", \"Finland\" ],\n\t[ \"2316\", \"Colin\", \"Barker\", \"H8Q 5L0\", \"Aruba\" ],\n\t[ \"2317\", \"Nichole\", \"Stephens\", \"B8P 3D5\", \"Qatar\" ],\n\t[ \"2318\", \"Mary\", \"Dorsey\", \"J7D 1E5\", \"Iceland\" ],\n\t[ \"2319\", \"Yetta\", \"Dillon\", \"I7X 9D3\", \"Hong Kong\" ],\n\t[ \"2320\", \"Hope\", \"May\", \"L5W 1T9\", \"Taiwan, Province of China\" ],\n\t[ \"2321\", \"Daphne\", \"Barr\", \"W2B 9G2\", \"Korea, Republic of\" ],\n\t[ \"2322\", \"Melissa\", \"Hartman\", \"17607\", \"Reunion\" ],\n\t[ \"2323\", \"Acton\", \"Merritt\", \"U7M 3Q5\", \"Cape Verde\" ],\n\t[ \"2324\", \"Alika\", \"Weeks\", \"45475\", \"Singapore\" ],\n\t[ \"2325\", \"Fitzgerald\", \"Rowe\", \"Z3Z 2B6\", \"Israel\" ],\n\t[ \"2326\", \"Frances\", \"Valentine\", \"54329\", \"Kyrgyzstan\" ],\n\t[ \"2327\", \"Hollee\", \"Poole\", \"56101\", \"Saint Kitts and Nevis\" ],\n\t[ \"2328\", \"Melissa\", \"Stafford\", \"R5C 7V0\", \"Philippines\" ],\n\t[ \"2329\", \"Patience\", \"Jones\", \"61516\", \"Mauritius\" ],\n\t[ \"2330\", \"Uta\", \"Sloan\", \"K1B 9R2\", \"Timor-leste\" ],\n\t[ \"2331\", \"Brent\", \"West\", \"69310\", \"Burundi\" ],\n\t[ \"2332\", \"Otto\", \"Olsen\", \"88849\", \"Monaco\" ],\n\t[ \"2333\", \"Blossom\", \"Soto\", \"E2Q 6E6\", \"Ukraine\" ],\n\t[ \"2334\", \"Anastasia\", \"Stanton\", \"S8D 3U5\", \"Mexico\" ],\n\t[ \"2335\", \"Nyssa\", \"Massey\", \"A4G 8G7\", \"Ireland\" ],\n\t[ \"2336\", \"Brian\", \"Moreno\", \"T6O 4D7\", \"Myanmar\" ],\n\t[ \"2337\", \"Fiona\", \"Price\", \"03826\", \"Benin\" ],\n\t[ \"2338\", \"Wyoming\", \"Knowles\", \"I5M 7T3\", \"Chad\" ],\n\t[ \"2339\", \"Iola\", \"Noble\", \"95251\", \"Tunisia\" ],\n\t[ \"2340\", \"Cameran\", \"Montgomery\", \"35748\", \"Korea\" ],\n\t[ \"2341\", \"Wesley\", \"Sims\", \"J6O 7C0\", \"Hungary\" ],\n\t[ \"2342\", \"Mona\", \"Gates\", \"J6Y 3E2\", \"Tokelau\" ],\n\t[ \"2343\", \"Dominique\", \"Sellers\", \"G6U 7I2\", \"Sudan\" ],\n\t[ \"2344\", \"Destiny\", \"Frazier\", \"Y2P 5X6\", \"Madagascar\" ],\n\t[ \"2345\", \"Kelsie\", \"Stokes\", \"78561\", \"Yemen\" ],\n\t[ \"2346\", \"Julie\", \"Jordan\", \"U5H 4H0\", \"Myanmar\" ],\n\t[ \"2347\", \"Xaviera\", \"Hodge\", \"36452\", \"Turkey\" ],\n\t[ \"2348\", \"Cain\", \"Boyd\", \"74543\", \"Lebanon\" ],\n\t[ \"2349\", \"Devin\", \"Burch\", \"94879\", \"Cyprus\" ],\n\t[ \"2350\", \"Michelle\", \"Manning\", \"V7T 4A3\", \"New Zealand\" ],\n\t[ \"2351\", \"Quintessa\", \"Chapman\", \"95379\", \"Faroe Islands\" ],\n\t[ \"2352\", \"Danielle\", \"Wells\", \"27722\", \"Colombia\" ],\n\t[ \"2353\", \"Faith\", \"Decker\", \"04881\", \"Canada\" ],\n\t[ \"2354\", \"Gannon\", \"Chapman\", \"07687\", \"Israel\" ],\n\t[ \"2355\", \"Jayme\", \"Black\", \"A6L 9W1\", \"Jordan\" ],\n\t[ \"2356\", \"Zenia\", \"Cooley\", \"A6X 1B7\", \"Greenland\" ],\n\t[ \"2357\", \"Maris\", \"Burton\", \"J4G 1Y0\", \"Ecuador\" ],\n\t[ \"2358\", \"Rina\", \"Vazquez\", \"G3V 7G6\", \"Russian Federation\" ],\n\t[ \"2359\", \"Nina\", \"Stanton\", \"E7Z 1W0\", \"Dominica\" ],\n\t[ \"2360\", \"Alexandra\", \"Jenkins\", \"C6N 4R4\", \"Morocco\" ],\n\t[ \"2361\", \"Jerome\", \"Chen\", \"68955\", \"Israel\" ],\n\t[ \"2362\", \"Clementine\", \"Robbins\", \"X7I 7T3\", \"Croatia\" ],\n\t[ \"2363\", \"Nigel\", \"Guthrie\", \"A4N 6X8\", \"French Southern Territories\" ],\n\t[ \"2364\", \"Xaviera\", \"Griffith\", \"90489\", \"Cuba\" ],\n\t[ \"2365\", \"Marsden\", \"Best\", \"U4B 5R7\", \"Estonia\" ],\n\t[ \"2366\", \"Ebony\", \"Benson\", \"H7C 7F7\", \"Anguilla\" ],\n\t[ \"2367\", \"Kylie\", \"Hansen\", \"38932\", \"Eritrea\" ],\n\t[ \"2368\", \"Iola\", \"Copeland\", \"P4X 9M4\", \"Rwanda\" ],\n\t[ \"2369\", \"Jorden\", \"Green\", \"48018\", \"Namibia\" ],\n\t[ \"2370\", \"Hamish\", \"Porter\", \"L6F 8L1\", \"Taiwan, Province of China\" ],\n\t[ \"2371\", \"Ezra\", \"Taylor\", \"09148\", \"French Southern Territories\" ],\n\t[ \"2372\", \"Dara\", \"Pratt\", \"00558\", \"Saint Kitts and Nevis\" ],\n\t[ \"2373\", \"Oliver\", \"Holt\", \"C4N 5Z7\", \"Thailand\" ],\n\t[ \"2374\", \"Kato\", \"Mcgee\", \"17017\", \"Micronesia\" ],\n\t[ \"2375\", \"Fuller\", \"Rogers\", \"M8F 6Y7\", \"French Polynesia\" ],\n\t[ \"2376\", \"Carol\", \"Stuart\", \"55980\", \"Sudan\" ],\n\t[ \"2377\", \"Wayne\", \"Nichols\", \"37344\", \"Chile\" ],\n\t[ \"2378\", \"Lars\", \"Gilbert\", \"27076\", \"Micronesia\" ],\n\t[ \"2379\", \"Todd\", \"Rollins\", \"M4I 4X8\", \"Virgin Islands, U.S.\" ],\n\t[ \"2380\", \"Colorado\", \"Justice\", \"68795\", \"Yemen\" ],\n\t[ \"2381\", \"Jordan\", \"Chang\", \"11149\", \"Mayotte\" ],\n\t[ \"2382\", \"Troy\", \"Haynes\", \"N2N 1N8\", \"Reunion\" ],\n\t[ \"2383\", \"Amity\", \"Snyder\", \"17785\", \"Argentina\" ],\n\t[ \"2384\", \"Kennan\", \"Turner\", \"30041\", \"Brazil\" ],\n\t[ \"2385\", \"Dorothy\", \"Gates\", \"B7Z 6V4\", \"Ghana\" ],\n\t[ \"2386\", \"Ariana\", \"Rojas\", \"70797\", \"Eritrea\" ],\n\t[ \"2387\", \"Desirae\", \"Joyner\", \"63493\", \"Maldives\" ],\n\t[ \"2388\", \"Marsden\", \"Barton\", \"36343\", \"Chile\" ],\n\t[ \"2389\", \"Graham\", \"Greer\", \"65152\", \"Cayman Islands\" ],\n\t[ \"2390\", \"Cameron\", \"Edwards\", \"89276\", \"Montserrat\" ],\n\t[ \"2391\", \"Bradley\", \"White\", \"80364\", \"United Kingdom\" ],\n\t[ \"2392\", \"Finn\", \"Cote\", \"G9P 1P0\", \"Ghana\" ],\n\t[ \"2393\", \"Geoffrey\", \"Becker\", \"O5G 4L4\", \"Wallis and Futuna\" ],\n\t[ \"2394\", \"Hayden\", \"Estes\", \"Q8G 7F9\", \"Togo\" ],\n\t[ \"2395\", \"Quinlan\", \"Garrett\", \"R2C 3E7\", \"Uganda\" ],\n\t[ \"2396\", \"Haviva\", \"Harrington\", \"64198\", \"Bahamas\" ],\n\t[ \"2397\", \"Brennan\", \"Hodge\", \"35327\", \"Paraguay\" ],\n\t[ \"2398\", \"Halee\", \"Sykes\", \"S6J 4S4\", \"Costa Rica\" ],\n\t[ \"2399\", \"Mikayla\", \"Ruiz\", \"21686\", \"Malaysia\" ],\n\t[ \"2400\", \"Macy\", \"Stanley\", \"F6D 6C4\", \"Luxembourg\" ],\n\t[ \"2401\", \"Petra\", \"Miles\", \"O7X 2D2\", \"Tokelau\" ],\n\t[ \"2402\", \"Oprah\", \"Mendez\", \"88994\", \"France\" ],\n\t[ \"2403\", \"Upton\", \"Silva\", \"17878\", \"French Southern Territories\" ],\n\t[ \"2404\", \"Wade\", \"Pennington\", \"S8J 3P2\", \"Malaysia\" ],\n\t[ \"2405\", \"Gannon\", \"Riddle\", \"I4A 2H9\", \"Somalia\" ],\n\t[ \"2406\", \"Jana\", \"Myers\", \"04982\", \"Philippines\" ],\n\t[ \"2407\", \"Brooke\", \"Hale\", \"98272\", \"Lithuania\" ],\n\t[ \"2408\", \"Hashim\", \"Mendez\", \"00144\", \"Saint Helena\" ],\n\t[ \"2409\", \"Blythe\", \"Hanson\", \"U5Z 6P4\", \"Saint Helena\" ],\n\t[ \"2410\", \"Michelle\", \"Madden\", \"B4R 1I9\", \"Ireland\" ],\n\t[ \"2411\", \"Deirdre\", \"Patton\", \"B4H 1N7\", \"Georgia\" ],\n\t[ \"2412\", \"Nathaniel\", \"Chandler\", \"W1V 8R4\", \"Sierra Leone\" ],\n\t[ \"2413\", \"Tamekah\", \"Murray\", \"I8M 1W8\", \"Guatemala\" ],\n\t[ \"2414\", \"Naida\", \"Boyle\", \"V4S 2N2\", \"United Arab Emirates\" ],\n\t[ \"2415\", \"Hiroko\", \"Winters\", \"K8G 3R9\", \"Barbados\" ],\n\t[ \"2416\", \"Palmer\", \"Guy\", \"A4H 5L1\", \"Saudi Arabia\" ],\n\t[ \"2417\", \"Hermione\", \"Nicholson\", \"76147\", \"Marshall Islands\" ],\n\t[ \"2418\", \"Russell\", \"Boyd\", \"66149\", \"Switzerland\" ],\n\t[ \"2419\", \"Gretchen\", \"Robles\", \"B9L 1J7\", \"Spain\" ],\n\t[ \"2420\", \"Leah\", \"Gibbs\", \"16682\", \"Vanuatu\" ],\n\t[ \"2421\", \"Amir\", \"Carlson\", \"A5C 6F2\", \"Myanmar\" ],\n\t[ \"2422\", \"Merrill\", \"Ratliff\", \"A6E 9B2\", \"Tonga\" ],\n\t[ \"2423\", \"Wyatt\", \"David\", \"P8G 2M1\", \"Kiribati\" ],\n\t[ \"2424\", \"Violet\", \"Boyle\", \"P5X 7B0\", \"Denmark\" ],\n\t[ \"2425\", \"Jared\", \"Myers\", \"22131\", \"Kyrgyzstan\" ],\n\t[ \"2426\", \"Lavinia\", \"Stephenson\", \"55537\", \"Turks and Caicos Islands\" ],\n\t[ \"2427\", \"Zachary\", \"Tyson\", \"C4O 7V4\", \"Macedonia\" ],\n\t[ \"2428\", \"Emma\", \"Clark\", \"A7Z 2Z1\", \"Guam\" ],\n\t[ \"2429\", \"Aaron\", \"Montoya\", \"Q3U 2X1\", \"Bahrain\" ],\n\t[ \"2430\", \"Dylan\", \"Roach\", \"81238\", \"French Guiana\" ],\n\t[ \"2431\", \"Baxter\", \"Rosario\", \"H7B 1R2\", \"Suriname\" ],\n\t[ \"2432\", \"Shad\", \"Bolton\", \"D1W 5X0\", \"Barbados\" ],\n\t[ \"2433\", \"Hasad\", \"Hines\", \"D9U 3H1\", \"Ukraine\" ],\n\t[ \"2434\", \"Maggy\", \"French\", \"M3E 5H8\", \"Nicaragua\" ],\n\t[ \"2435\", \"Evangeline\", \"Jenkins\", \"57732\", \"Nigeria\" ],\n\t[ \"2436\", \"Eaton\", \"Shannon\", \"56854\", \"Namibia\" ],\n\t[ \"2437\", \"Keaton\", \"Barber\", \"G5V 7T0\", \"Svalbard and Jan Mayen\" ],\n\t[ \"2438\", \"Lester\", \"Love\", \"J5Q 8H3\", \"United Kingdom\" ],\n\t[ \"2439\", \"Olivia\", \"Foley\", \"16284\", \"Mayotte\" ],\n\t[ \"2440\", \"Inez\", \"Craig\", \"98947\", \"Poland\" ],\n\t[ \"2441\", \"Desirae\", \"Jacobson\", \"25950\", \"French Polynesia\" ],\n\t[ \"2442\", \"Amethyst\", \"Robertson\", \"78840\", \"Timor-leste\" ],\n\t[ \"2443\", \"Rahim\", \"Day\", \"61420\", \"Maldives\" ],\n\t[ \"2444\", \"Kevyn\", \"Mccarty\", \"X7T 8Z3\", \"Guam\" ],\n\t[ \"2445\", \"Logan\", \"Malone\", \"B6F 8N0\", \"Madagascar\" ],\n\t[ \"2446\", \"Kathleen\", \"Cote\", \"L4R 6W9\", \"Congo\" ],\n\t[ \"2447\", \"Porter\", \"Mclean\", \"G1Z 1W9\", \"Mauritius\" ],\n\t[ \"2448\", \"Reagan\", \"Chapman\", \"86314\", \"Palestinian Territory, Occupied\" ],\n\t[ \"2449\", \"Veda\", \"Harrington\", \"R7W 1K4\", \"Congo\" ],\n\t[ \"2450\", \"Dominique\", \"Hewitt\", \"P5K 7L4\", \"San Marino\" ],\n\t[ \"2451\", \"Zelda\", \"Orr\", \"Z5B 6V1\", \"Greenland\" ],\n\t[ \"2452\", \"Natalie\", \"Kane\", \"10491\", \"Belgium\" ],\n\t[ \"2453\", \"Elizabeth\", \"Bright\", \"R3V 2R4\", \"Bangladesh\" ],\n\t[ \"2454\", \"Evan\", \"Knapp\", \"W3Z 3I5\", \"Mauritius\" ],\n\t[ \"2455\", \"Unity\", \"Armstrong\", \"82986\", \"Kiribati\" ],\n\t[ \"2456\", \"Arden\", \"Winters\", \"C7D 4M2\", \"Sweden\" ],\n\t[ \"2457\", \"Hayfa\", \"Henderson\", \"B8Z 3V3\", \"Latvia\" ],\n\t[ \"2458\", \"Ocean\", \"Delacruz\", \"Z3Z 2H8\", \"Tonga\" ],\n\t[ \"2459\", \"Carter\", \"Harding\", \"R1Z 8J4\", \"Ireland\" ],\n\t[ \"2460\", \"Harriet\", \"Simmons\", \"54757\", \"Indonesia\" ],\n\t[ \"2461\", \"Sopoline\", \"Hicks\", \"I5A 6O2\", \"Argentina\" ],\n\t[ \"2462\", \"Jenette\", \"Ramos\", \"I4V 3H6\", \"Portugal\" ],\n\t[ \"2463\", \"Abigail\", \"Berg\", \"E6P 6L0\", \"United States\" ],\n\t[ \"2464\", \"Sybill\", \"Fox\", \"02319\", \"Svalbard and Jan Mayen\" ],\n\t[ \"2465\", \"Wyoming\", \"Jarvis\", \"I1R 7V9\", \"Palestinian Territory, Occupied\" ],\n\t[ \"2466\", \"Cynthia\", \"English\", \"17983\", \"Israel\" ],\n\t[ \"2467\", \"Jerry\", \"Little\", \"33846\", \"Mauritius\" ],\n\t[ \"2468\", \"Quintessa\", \"Donaldson\", \"V4N 2K1\", \"China\" ],\n\t[ \"2469\", \"Anne\", \"Potter\", \"78596\", \"United States Minor Outlying Islands\" ],\n\t[ \"2470\", \"Madonna\", \"Hart\", \"A4A 4T8\", \"Bahrain\" ],\n\t[ \"2471\", \"Madeline\", \"Walls\", \"Y3D 4T3\", \"Comoros\" ],\n\t[ \"2472\", \"Fleur\", \"Blevins\", \"D1T 9P6\", \"Guinea-bissau\" ],\n\t[ \"2473\", \"Jaden\", \"Webb\", \"13917\", \"Lesotho\" ],\n\t[ \"2474\", \"Abdul\", \"Fleming\", \"A8A 3Y3\", \"Canada\" ],\n\t[ \"2475\", \"Blaze\", \"Carroll\", \"41059\", \"Marshall Islands\" ],\n\t[ \"2476\", \"David\", \"Hoover\", \"29132\", \"Algeria\" ],\n\t[ \"2477\", \"Renee\", \"Nieves\", \"35843\", \"Egypt\" ],\n\t[ \"2478\", \"Jaime\", \"Mcclure\", \"R5K 6B5\", \"Liechtenstein\" ],\n\t[ \"2479\", \"Deborah\", \"Fletcher\", \"70399\", \"Equatorial Guinea\" ],\n\t[ \"2480\", \"Otto\", \"Lopez\", \"72417\", \"Belarus\" ],\n\t[ \"2481\", \"Bo\", \"Walls\", \"F4M 8X8\", \"Latvia\" ],\n\t[ \"2482\", \"Jamal\", \"Adams\", \"N9X 3A2\", \"Spain\" ],\n\t[ \"2483\", \"Silas\", \"Gardner\", \"25259\", \"French Guiana\" ],\n\t[ \"2484\", \"Aladdin\", \"Morin\", \"45179\", \"Sweden\" ],\n\t[ \"2485\", \"Dawn\", \"Grant\", \"53613\", \"Grenada\" ],\n\t[ \"2486\", \"Forrest\", \"Gay\", \"53606\", \"Cayman Islands\" ],\n\t[ \"2487\", \"Lavinia\", \"Murphy\", \"S5L 6X9\", \"Turkey\" ],\n\t[ \"2488\", \"Sylvia\", \"Wolfe\", \"37280\", \"Indonesia\" ],\n\t[ \"2489\", \"Wynter\", \"Adkins\", \"37391\", \"Russian Federation\" ],\n\t[ \"2490\", \"Iola\", \"Frank\", \"I9H 1K7\", \"Nigeria\" ],\n\t[ \"2491\", \"Emmanuel\", \"Hester\", \"Z6E 3I4\", \"Guinea\" ],\n\t[ \"2492\", \"Karina\", \"Christian\", \"V8M 6F3\", \"Honduras\" ],\n\t[ \"2493\", \"Malcolm\", \"Holden\", \"I7J 6U7\", \"Austria\" ],\n\t[ \"2494\", \"Moana\", \"Holmes\", \"80402\", \"Israel\" ],\n\t[ \"2495\", \"Ramona\", \"Hewitt\", \"U6B 7A6\", \"Guadeloupe\" ],\n\t[ \"2496\", \"Nicholas\", \"Terry\", \"V8J 5D9\", \"Costa Rica\" ],\n\t[ \"2497\", \"Erica\", \"Dunlap\", \"91596\", \"Kazakhstan\" ],\n\t[ \"2498\", \"Logan\", \"Harper\", \"R7V 3T5\", \"Guinea-bissau\" ],\n\t[ \"2499\", \"Bert\", \"Ortega\", \"74557\", \"Paraguay\" ],\n\t[ \"2500\", \"Cameron\", \"Ortiz\", \"P9C 5B6\", \"Eritrea\" ]\n] }"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Scroller/examples/data/ssp.php",
    "content": "<?php\n\n/*\n * DataTables example server-side processing script.\n *\n * Please note that this script is intentionally extremely simply to show how\n * server-side processing can be implemented, and probably shouldn't be used as\n * the basis for a large complex system. It is suitable for simple use cases as\n * for learning.\n *\n * See http://datatables.net/usage/server-side for full details on the server-\n * side processing requirements of DataTables.\n *\n * @license MIT - http://datatables.net/license_mit\n */\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Easy set variables\n */\n\n// DB table to use\n$table = 'massive';\n\n// Table's primary key\n$primaryKey = 'id';\n\n// Array of database columns which should be read and sent back to DataTables.\n// The `db` parameter represents the column name in the database, while the `dt`\n// parameter represents the DataTables column identifier. In this case simple\n// indexes\n$columns = array(\n\tarray( 'db' => 'id',         'dt' => 0 ),\n\tarray( 'db' => 'firstname',  'dt' => 1 ),\n\tarray( 'db' => 'surname',    'dt' => 2 ),\n\tarray( 'db' => 'zip',        'dt' => 3 ),\n\tarray( 'db' => 'country',    'dt' => 4 )\n);\n\n// SQL server connection information\n$sql_details = array(\n\t'user' => '',\n\t'pass' => '',\n\t'db'   => '',\n\t'host' => ''\n);\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * If you just want to use the basic configuration for DataTables with PHP\n * server-side, there is no need to edit below this line.\n */\n\nrequire( '../../../../examples/server_side/scripts/ssp.class.php' );\n\necho json_encode(\n\tSSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )\n);\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Scroller/examples/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\n\t<title>Scroller examples - Scroller examples</title>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Scroller example <span>Scroller examples</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Scroller is a virtual rendering plug-in for DataTables which allows large datasets to be drawn on\n\t\t\t\tscreen every quickly. What the virtual rendering means is that only the visible portion of the table\n\t\t\t\t(and a bit to either side to make the scrolling smooth) is drawn, while the scrolling container gives\n\t\t\t\tthe visual impression that the whole table is visible. This is done by making use of the pagination\n\t\t\t\tabilities of DataTables and moving the table around in the scrolling container DataTables adds to the\n\t\t\t\tpage. The scrolling container is forced to the height it would be for the full table display using an\n\t\t\t\textra element.</p>\n\n\t\t\t\t<p>Scroller is initialised by simply including the letter <code>S</code> in the <a href=\n\t\t\t\t\"//datatables.net/reference/option/dom\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">dom<span>DT</span></code></a> for the table you want to have this\n\t\t\t\tfeature enabled on. Note that the <code>S</code> must come after the <code>t</code> parameter in\n\t\t\t\t<a href=\"//datatables.net/reference/option/dom\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">dom<span>DT</span></code></a>.</p>\n\n\t\t\t\t<p>Key features include:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li>Speed! The aim of Scroller for DataTables is to make rendering large data sets fast</li>\n\t\t\t\t\t<li>Full compatibility with DataTables' deferred rendering for maximum speed</li>\n\t\t\t\t\t<li>Integration with state saving in DataTables (scrolling position is saved)</li>\n\t\t\t\t\t<li>Easy to use</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_saving.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./large_js_source.html\">Client-side data source (50,000 rows)</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side_processing.html\">Server-side processing (5,000,000\n\t\t\t\t\t\t\trows)</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./api_scrolling.html\">API</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Scroller/examples/large_js_source.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Scroller example - Client-side data source (50,000 rows)</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.scroller.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.scroller.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\t$(document).ready(function() {\n\t\tvar data = [];\n\t\tfor ( var i=0 ; i<50000 ; i++ ) {\n\t\t\tdata.push( [ i, i, i, i, i ] );\n\t\t}\n\t\t\n\t\tvar oTable = $('#example').dataTable( {\n\t\t\tdata:           data,\n\t\t\tdeferRender:    true,\n\t\t\tdom:            \"frtiS\",\n\t\t\tscrollY:        200,\n\t\t\tscrollCollapse: true\n\t\t} );\n\t} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Scroller example <span>Client-side data source (50,000 rows)</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example is completely artificial in that the data generated is created on the client-side by\n\t\t\t\tjust looping around a Javascript array and then passing that to DataTables. However, it does show quite\n\t\t\t\tnicely that DataTables and Scroller can cope with large amounts of data on the client-side quite\n\t\t\t\tnicely. Typically data such as this would be Ajax sourced and server-side processing should be\n\t\t\t\tconsidered.</p>\n\n\t\t\t\t<p>Please be aware that the performance of this page will depend on your browser as the array of data\n\t\t\t\tis generated - for example IE6 will crawl!</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>ID</th>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>ZIP / Post code</th>\n\t\t\t\t\t\t<th>Country</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\t\tvar data = [];\n\t\tfor ( var i=0 ; i&lt;50000 ; i++ ) {\n\t\t\tdata.push( [ i, i, i, i, i ] );\n\t\t}\n\t\t\n\t\tvar oTable = $('#example').dataTable( {\n\t\t\tdata:           data,\n\t\t\tdeferRender:    true,\n\t\t\tdom:            &quot;frtiS&quot;,\n\t\t\tscrollY:        200,\n\t\t\tscrollCollapse: true\n\t\t} );\n\t} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.scroller.js\">../js/dataTables.scroller.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.scroller.css\">../css/dataTables.scroller.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_saving.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./large_js_source.html\">Client-side data source (50,000\n\t\t\t\t\t\t\trows)</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side_processing.html\">Server-side processing (5,000,000\n\t\t\t\t\t\t\trows)</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./api_scrolling.html\">API</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Scroller/examples/server-side_processing.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Scroller example - Server-side processing (5,000,000 rows)</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.scroller.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.scroller.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tserverSide: true,\n\t\tordering: false,\n\t\tsearching: false,\n\t\tajax: function ( data, callback, settings ) {\n\t\t\tvar out = [];\n\n\t\t\tfor ( var i=data.start, ien=data.start+data.length ; i<ien ; i++ ) {\n\t\t\t\tout.push( [ i+'-1', i+'-2', i+'-3', i+'-4', i+'-5' ] );\n\t\t\t}\n\n\t\t\tsetTimeout( function () {\n\t\t\t\tcallback( {\n\t\t\t\t\tdraw: data.draw,\n\t\t\t\t\tdata: out,\n\t\t\t\t\trecordsTotal: 5000000,\n\t\t\t\t\trecordsFiltered: 5000000\n\t\t\t\t} );\n\t\t\t}, 50 );\n\t\t},\n\t\tdom: \"rtiS\",\n\t\tscrollY: 200,\n\t\tscroller: {\n\t\t\tloadingIndicator: true\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Scroller example <span>Server-side processing (5,000,000 rows)</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>DataTables' server-side processing mode is a feature that naturally fits in with Scroller perfectly.\n\t\t\t\tServer-side processing can be used to show large data sets, with the server being used to do the data\n\t\t\t\tprocessing, and Scroller optimising the display of the data in a scrolling viewport.</p>\n\n\t\t\t\t<p>When using server-side processing, Scroller will wait a small amount of time to allow the scrolling\n\t\t\t\tto finish before requesting more data from the server (200mS by default). This prevents you from DoSing\n\t\t\t\tyour own server!</p>\n\n\t\t\t\t<p>This example shows Scroller using server-side processing mode and 5 million rows.\n\t\t\t\t<strong>Important</strong> This particular example uses <a href=\n\t\t\t\t\"//datatables.net/reference/option/ajax\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">ajax<span>DT</span></code></a> as a function to 'fake' the data to\n\t\t\t\tshow Scroller's ability to show large data sets. It does not have a real database behind it! You would\n\t\t\t\tnormally not use <a href=\"//datatables.net/reference/option/ajax\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">ajax<span>DT</span></code></a> as a function to generate data, but\n\t\t\t\trather as a url for where to fetch the real data!</p>\n\n\t\t\t\t<p>In this example we also enable the <code>loadingIndicator</code> option of Scroller to show the end\n\t\t\t\tuser what is happening when they scroll passed the currently loaded data.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>ID</th>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>ZIP / Post code</th>\n\t\t\t\t\t\t<th>Country</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tserverSide: true,\n\t\tordering: false,\n\t\tsearching: false,\n\t\tajax: function ( data, callback, settings ) {\n\t\t\tvar out = [];\n\n\t\t\tfor ( var i=data.start, ien=data.start+data.length ; i&lt;ien ; i++ ) {\n\t\t\t\tout.push( [ i+'-1', i+'-2', i+'-3', i+'-4', i+'-5' ] );\n\t\t\t}\n\n\t\t\tsetTimeout( function () {\n\t\t\t\tcallback( {\n\t\t\t\t\tdraw: data.draw,\n\t\t\t\t\tdata: out,\n\t\t\t\t\trecordsTotal: 5000000,\n\t\t\t\t\trecordsFiltered: 5000000\n\t\t\t\t} );\n\t\t\t}, 50 );\n\t\t},\n\t\tdom: &quot;rtiS&quot;,\n\t\tscrollY: 200,\n\t\tscroller: {\n\t\t\tloadingIndicator: true\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.scroller.js\">../js/dataTables.scroller.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.scroller.css\">../css/dataTables.scroller.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_saving.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./large_js_source.html\">Client-side data source (50,000 rows)</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./server-side_processing.html\">Server-side processing\n\t\t\t\t\t\t\t(5,000,000 rows)</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./api_scrolling.html\">API</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Scroller/examples/simple.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Scroller example - Basic initialisation</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.scroller.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.scroller.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tajax:           \"data/2500.txt\",\n\t\tdeferRender:    true,\n\t\tdom:            \"frtiS\",\n\t\tscrollY:        200,\n\t\tscrollCollapse: true\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Scroller example <span>Basic initialisation</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Scroller is a plug-in for DataTables which enhances DataTables' built-in scrolling features to allow\n\t\t\t\tlarge amounts of data to be rendered on page very quickly. This is done by Scroller through the use of\n\t\t\t\ta virtual rendering technique that will render only the part of the table that is actually required for\n\t\t\t\tthe current view.</p>\n\n\t\t\t\t<p>Note that Scroller assumes that all rows are of the same height (in order to preform the required\n\t\t\t\tcalculations. You can use <code>td { white-space: nowrap; }</code> in your CSS to ensure that text in\n\t\t\t\trows does not wrap.</p>\n\n\t\t\t\t<p>This example shows how Scroller for DataTables can be initialised by simply including the character\n\t\t\t\t<code>S</code> in sDom (note that the <code>S</code> must come after the <code>t</code> in sDom).\n\t\t\t\tDeferred rendering an and Ajax data source are also used in this example.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>ID</th>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>ZIP / Post code</th>\n\t\t\t\t\t\t<th>Country</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tajax:           &quot;data/2500.txt&quot;,\n\t\tdeferRender:    true,\n\t\tdom:            &quot;frtiS&quot;,\n\t\tscrollY:        200,\n\t\tscrollCollapse: true\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.scroller.js\">../js/dataTables.scroller.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.scroller.css\">../css/dataTables.scroller.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./state_saving.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./large_js_source.html\">Client-side data source (50,000 rows)</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side_processing.html\">Server-side processing (5,000,000\n\t\t\t\t\t\t\trows)</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./api_scrolling.html\">API</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Scroller/examples/state_saving.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>Scroller example - State saving</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.scroller.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.scroller.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tajax:           \"data/2500.txt\",\n\t\tdeferRender:    true,\n\t\tdom:            \"frtiS\",\n\t\tscrollY:        200,\n\t\tscrollCollapse: true,\n\t\tstateSave:      true\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>Scroller example <span>State saving</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Scroller will automatically integrate with DataTables in order to save the scrolling position of the\n\t\t\t\ttable, if state saving is enabled in the DataTable (<a href=\n\t\t\t\t\"//datatables.net/reference/option/stateSave\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">stateSave<span>DT</span></code></a>). This example shows that in\n\t\t\t\tpractice - to demonstrate, scroll the table and then reload the page.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>ID</th>\n\t\t\t\t\t\t<th>First name</th>\n\t\t\t\t\t\t<th>Last name</th>\n\t\t\t\t\t\t<th>ZIP / Post code</th>\n\t\t\t\t\t\t<th>Country</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this\n\t\t\t\t\texample:</p><code class=\"multiline brush: js;\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tajax:           &quot;data/2500.txt&quot;,\n\t\tdeferRender:    true,\n\t\tdom:            &quot;frtiS&quot;,\n\t\tscrollY:        200,\n\t\tscrollCollapse: true,\n\t\tstateSave:      true\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this\n\t\t\t\t\texample:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.scroller.js\">../js/dataTables.scroller.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by\n\t\t\t\t\tDataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library\n\t\t\t\t\t\tfiles (below), in order to correctly display the table. The additional CSS used is shown\n\t\t\t\t\t\tbelow:</p><code class=\"multiline brush: js;\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the\n\t\t\t\t\ttable:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.scroller.css\">../css/dataTables.scroller.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data\n\t\t\t\t\twill update automatically as any additional data is loaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note\n\t\t\t\t\tthat this is just an example script using PHP. Server-side processing scripts can be written in any\n\t\t\t\t\tlanguage, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the\n\t\t\t\t\tDataTables documentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./state_saving.html\">State saving</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./large_js_source.html\">Client-side data source (50,000 rows)</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./server-side_processing.html\">Server-side processing (5,000,000\n\t\t\t\t\t\t\trows)</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./api_scrolling.html\">API</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full\n\t\t\t\t\tinformation about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and\n\t\t\t\t\t<a href=\"http://www.datatables.net/plug-ins\">plug-ins</a> which extend the capabilities of\n\t\t\t\t\tDataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\n\t\t\t\t\t\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2014<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/Scroller/js/dataTables.scroller.js",
    "content": "/*! Scroller 1.2.2\n * ©2011-2014 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     Scroller\n * @description Virtual rendering for DataTables\n * @version     1.2.2\n * @file        dataTables.scroller.js\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     www.sprymedia.co.uk/contact\n * @copyright   Copyright 2011-2014 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n(function(window, document, undefined){\n\n\nvar factory = function( $, DataTable ) {\n\"use strict\";\n\n/**\n * Scroller is a virtual rendering plug-in for DataTables which allows large\n * datasets to be drawn on screen every quickly. What the virtual rendering means\n * is that only the visible portion of the table (and a bit to either side to make\n * the scrolling smooth) is drawn, while the scrolling container gives the\n * visual impression that the whole table is visible. This is done by making use\n * of the pagination abilities of DataTables and moving the table around in the\n * scrolling container DataTables adds to the page. The scrolling container is\n * forced to the height it would be for the full table display using an extra\n * element.\n *\n * Note that rows in the table MUST all be the same height. Information in a cell\n * which expands on to multiple lines will cause some odd behaviour in the scrolling.\n *\n * Scroller is initialised by simply including the letter 'S' in the sDom for the\n * table you want to have this feature enabled on. Note that the 'S' must come\n * AFTER the 't' parameter in `dom`.\n *\n * Key features include:\n *   <ul class=\"limit_length\">\n *     <li>Speed! The aim of Scroller for DataTables is to make rendering large data sets fast</li>\n *     <li>Full compatibility with deferred rendering in DataTables 1.9 for maximum speed</li>\n *     <li>Display millions of rows</li>\n *     <li>Integration with state saving in DataTables (scrolling position is saved)</li>\n *     <li>Easy to use</li>\n *   </ul>\n *\n *  @class\n *  @constructor\n *  @global\n *  @param {object} oDT DataTables settings object\n *  @param {object} [oOpts={}] Configuration object for FixedColumns. Options \n *    are defined by {@link Scroller.defaults}\n *\n *  @requires jQuery 1.7+\n *  @requires DataTables 1.9.0+\n *\n *  @example\n *    $(document).ready(function() {\n *        $('#example').dataTable( {\n *            \"sScrollY\": \"200px\",\n *            \"sAjaxSource\": \"media/dataset/large.txt\",\n *            \"sDom\": \"frtiS\",\n *            \"bDeferRender\": true\n *        } );\n *    } );\n */\nvar Scroller = function ( oDTSettings, oOpts ) {\n\t/* Sanity check - you just know it will happen */\n\tif ( ! this instanceof Scroller )\n\t{\n\t\talert( \"Scroller warning: Scroller must be initialised with the 'new' keyword.\" );\n\t\treturn;\n\t}\n\n\tif ( typeof oOpts == 'undefined' )\n\t{\n\t\toOpts = {};\n\t}\n\n\t/**\n\t * Settings object which contains customisable information for the Scroller instance\n\t * @namespace\n\t * @private\n\t * @extends Scroller.defaults\n\t */\n\tthis.s = {\n\t\t/**\n\t\t * DataTables settings object\n\t\t *  @type     object\n\t\t *  @default  Passed in as first parameter to constructor\n\t\t */\n\t\t\"dt\": oDTSettings,\n\n\t\t/**\n\t\t * Pixel location of the top of the drawn table in the viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\t\"tableTop\": 0,\n\n\t\t/**\n\t\t * Pixel location of the bottom of the drawn table in the viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\t\"tableBottom\": 0,\n\n\t\t/**\n\t\t * Pixel location of the boundary for when the next data set should be loaded and drawn\n\t\t * when scrolling up the way.\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t *  @private\n\t\t */\n\t\t\"redrawTop\": 0,\n\n\t\t/**\n\t\t * Pixel location of the boundary for when the next data set should be loaded and drawn\n\t\t * when scrolling down the way. Note that this is actually calculated as the offset from\n\t\t * the top.\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t *  @private\n\t\t */\n\t\t\"redrawBottom\": 0,\n\n\t\t/**\n\t\t * Auto row height or not indicator\n\t\t *  @type     bool\n\t\t *  @default  0\n\t\t */\n\t\t\"autoHeight\": true,\n\n\t\t/**\n\t\t * Number of rows calculated as visible in the visible viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\t\"viewportRows\": 0,\n\n\t\t/**\n\t\t * setTimeout reference for state saving, used when state saving is enabled in the DataTable\n\t\t * and when the user scrolls the viewport in order to stop the cookie set taking too much\n\t\t * CPU!\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\t\"stateTO\": null,\n\n\t\t/**\n\t\t * setTimeout reference for the redraw, used when server-side processing is enabled in the\n\t\t * DataTables in order to prevent DoSing the server\n\t\t *  @type     int\n\t\t *  @default  null\n\t\t */\n\t\t\"drawTO\": null,\n\n\t\theights: {\n\t\t\tjump: null,\n\t\t\tpage: null,\n\t\t\tvirtual: null,\n\t\t\tscroll: null,\n\n\t\t\t/**\n\t\t\t * Height of rows in the table\n\t\t\t *  @type     int\n\t\t\t *  @default  0\n\t\t\t */\n\t\t\trow: null,\n\n\t\t\t/**\n\t\t\t * Pixel height of the viewport\n\t\t\t *  @type     int\n\t\t\t *  @default  0\n\t\t\t */\n\t\t\tviewport: null\n\t\t},\n\n\t\ttopRowFloat: 0,\n\t\tscrollDrawDiff: null,\n\t\tloaderVisible: false\n\t};\n\n\t// @todo The defaults should extend a `c` property and the internal settings\n\t// only held in the `s` property. At the moment they are mixed\n\tthis.s = $.extend( this.s, Scroller.oDefaults, oOpts );\n\n\t// Workaround for row height being read from height object (see above comment)\n\tthis.s.heights.row = this.s.rowHeight;\n\n\t/**\n\t * DOM elements used by the class instance\n\t * @private\n\t * @namespace\n\t *\n\t */\n\tthis.dom = {\n\t\t\"force\":    document.createElement('div'),\n\t\t\"scroller\": null,\n\t\t\"table\":    null,\n\t\t\"loader\":   null\n\t};\n\n\t/* Attach the instance to the DataTables instance so it can be accessed */\n\tthis.s.dt.oScroller = this;\n\n\t/* Let's do it */\n\tthis._fnConstruct();\n};\n\n\n\nScroller.prototype = /** @lends Scroller.prototype */{\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Calculate the pixel position from the top of the scrolling container for\n\t * a given row\n\t *  @param {int} iRow Row number to calculate the position of\n\t *  @returns {int} Pixels\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      $('#example').dataTable( {\n\t *        \"sScrollY\": \"200px\",\n\t *        \"sAjaxSource\": \"media/dataset/large.txt\",\n\t *        \"sDom\": \"frtiS\",\n\t *        \"bDeferRender\": true,\n\t *        \"fnInitComplete\": function (o) {\n\t *          // Find where row 25 is\n\t *          alert( o.oScroller.fnRowToPixels( 25 ) );\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnRowToPixels\": function ( rowIdx, intParse, virtual )\n\t{\n\t\tvar pixels;\n\n\t\tif ( virtual ) {\n\t\t\tpixels = this._domain( 'virtualToPhysical', rowIdx * this.s.heights.row );\n\t\t}\n\t\telse {\n\t\t\tvar diff = rowIdx - this.s.baseRowTop;\n\t\t\tpixels = this.s.baseScrollTop + (diff * this.s.heights.row);\n\t\t}\n\n\t\treturn intParse || intParse === undefined ?\n\t\t\tparseInt( pixels, 10 ) :\n\t\t\tpixels;\n\t},\n\n\n\t/**\n\t * Calculate the row number that will be found at the given pixel position\n\t * (y-scroll).\n\t *\n\t * Please note that when the height of the full table exceeds 1 million\n\t * pixels, Scroller switches into a non-linear mode for the scrollbar to fit\n\t * all of the records into a finite area, but this function returns a linear\n\t * value (relative to the last non-linear positioning).\n\t *  @param {int} iPixels Offset from top to calculate the row number of\n\t *  @param {int} [intParse=true] If an integer value should be returned\n\t *  @param {int} [virtual=false] Perform the calculations in the virtual domain\n\t *  @returns {int} Row index\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      $('#example').dataTable( {\n\t *        \"sScrollY\": \"200px\",\n\t *        \"sAjaxSource\": \"media/dataset/large.txt\",\n\t *        \"sDom\": \"frtiS\",\n\t *        \"bDeferRender\": true,\n\t *        \"fnInitComplete\": function (o) {\n\t *          // Find what row number is at 500px\n\t *          alert( o.oScroller.fnPixelsToRow( 500 ) );\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnPixelsToRow\": function ( pixels, intParse, virtual )\n\t{\n\t\tvar diff = pixels - this.s.baseScrollTop;\n\t\tvar row = virtual ?\n\t\t\tthis._domain( 'physicalToVirtual', pixels ) / this.s.heights.row :\n\t\t\t( diff / this.s.heights.row ) + this.s.baseRowTop;\n\n\t\treturn intParse || intParse === undefined ?\n\t\t\tparseInt( row, 10 ) :\n\t\t\trow;\n\t},\n\n\n\t/**\n\t * Calculate the row number that will be found at the given pixel position (y-scroll)\n\t *  @param {int} iRow Row index to scroll to\n\t *  @param {bool} [bAnimate=true] Animate the transition or not\n\t *  @returns {void}\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      $('#example').dataTable( {\n\t *        \"sScrollY\": \"200px\",\n\t *        \"sAjaxSource\": \"media/dataset/large.txt\",\n\t *        \"sDom\": \"frtiS\",\n\t *        \"bDeferRender\": true,\n\t *        \"fnInitComplete\": function (o) {\n\t *          // Immediately scroll to row 1000\n\t *          o.oScroller.fnScrollToRow( 1000 );\n\t *        }\n\t *      } );\n\t *     \n\t *      // Sometime later on use the following to scroll to row 500...\n\t *          var oSettings = $('#example').dataTable().fnSettings();\n\t *      oSettings.oScroller.fnScrollToRow( 500 );\n\t *    } );\n\t */\n\t\"fnScrollToRow\": function ( iRow, bAnimate )\n\t{\n\t\tvar that = this;\n\t\tvar ani = false;\n\t\tvar px = this.fnRowToPixels( iRow );\n\n\t\t// We need to know if the table will redraw or not before doing the\n\t\t// scroll. If it will not redraw, then we need to use the currently\n\t\t// displayed table, and scroll with the physical pixels. Otherwise, we\n\t\t// need to calculate the table's new position from the virtual\n\t\t// transform.\n\t\tvar preRows = ((this.s.displayBuffer-1)/2) * this.s.viewportRows;\n\t\tvar drawRow = iRow - preRows;\n\t\tif ( drawRow < 0 ) {\n\t\t\tdrawRow = 0;\n\t\t}\n\n\t\tif ( (px > this.s.redrawBottom || px < this.s.redrawTop) && this.s.dt._iDisplayStart !== drawRow ) {\n\t\t\tani = true;\n\t\t\tpx = this.fnRowToPixels( iRow, false, true );\n\t\t}\n\n\t\tif ( typeof bAnimate == 'undefined' || bAnimate )\n\t\t{\n\t\t\tthis.s.ani = ani;\n\t\t\t$(this.dom.scroller).animate( {\n\t\t\t\t\"scrollTop\": px\n\t\t\t}, function () {\n\t\t\t\t// This needs to happen after the animation has completed and\n\t\t\t\t// the final scroll event fired\n\t\t\t\tsetTimeout( function () {\n\t\t\t\t\tthat.s.ani = false;\n\t\t\t\t}, 25 );\n\t\t\t} );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t$(this.dom.scroller).scrollTop( px );\n\t\t}\n\t},\n\n\n\t/**\n\t * Calculate and store information about how many rows are to be displayed\n\t * in the scrolling viewport, based on current dimensions in the browser's\n\t * rendering. This can be particularly useful if the table is initially\n\t * drawn in a hidden element - for example in a tab.\n\t *  @param {bool} [bRedraw=true] Redraw the table automatically after the recalculation, with\n\t *    the new dimensions forming the basis for the draw.\n\t *  @returns {void}\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      // Make the example container hidden to throw off the browser's sizing\n\t *      document.getElementById('container').style.display = \"none\";\n\t *      var oTable = $('#example').dataTable( {\n\t *        \"sScrollY\": \"200px\",\n\t *        \"sAjaxSource\": \"media/dataset/large.txt\",\n\t *        \"sDom\": \"frtiS\",\n\t *        \"bDeferRender\": true,\n\t *        \"fnInitComplete\": function (o) {\n\t *          // Immediately scroll to row 1000\n\t *          o.oScroller.fnScrollToRow( 1000 );\n\t *        }\n\t *      } );\n\t *     \n\t *      setTimeout( function () {\n\t *        // Make the example container visible and recalculate the scroller sizes\n\t *        document.getElementById('container').style.display = \"block\";\n\t *        oTable.fnSettings().oScroller.fnMeasure();\n\t *      }, 3000 );\n\t */\n\t\"fnMeasure\": function ( bRedraw )\n\t{\n\t\tif ( this.s.autoHeight )\n\t\t{\n\t\t\tthis._fnCalcRowHeight();\n\t\t}\n\n\t\tvar heights = this.s.heights;\n\n\t\theights.viewport = $(this.dom.scroller).height();\n\t\tthis.s.viewportRows = parseInt( heights.viewport / heights.row, 10 )+1;\n\t\tthis.s.dt._iDisplayLength = this.s.viewportRows * this.s.displayBuffer;\n\n\t\tif ( bRedraw === undefined || bRedraw )\n\t\t{\n\t\t\tthis.s.dt.oInstance.fnDraw();\n\t\t}\n\t},\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods (they are of course public in JS, but recommended as private)\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Initialisation for Scroller\n\t *  @returns {void}\n\t *  @private\n\t */\n\t\"_fnConstruct\": function ()\n\t{\n\t\tvar that = this;\n\n\t\t/* Sanity check */\n\t\tif ( !this.s.dt.oFeatures.bPaginate ) {\n\t\t\tthis.s.dt.oApi._fnLog( this.s.dt, 0, 'Pagination must be enabled for Scroller' );\n\t\t\treturn;\n\t\t}\n\n\t\t/* Insert a div element that we can use to force the DT scrolling container to\n\t\t * the height that would be required if the whole table was being displayed\n\t\t */\n\t\tthis.dom.force.style.position = \"absolute\";\n\t\tthis.dom.force.style.top = \"0px\";\n\t\tthis.dom.force.style.left = \"0px\";\n\t\tthis.dom.force.style.width = \"1px\";\n\n\t\tthis.dom.scroller = $('div.'+this.s.dt.oClasses.sScrollBody, this.s.dt.nTableWrapper)[0];\n\t\tthis.dom.scroller.appendChild( this.dom.force );\n\t\tthis.dom.scroller.style.position = \"relative\";\n\n\t\tthis.dom.table = $('>table', this.dom.scroller)[0];\n\t\tthis.dom.table.style.position = \"absolute\";\n\t\tthis.dom.table.style.top = \"0px\";\n\t\tthis.dom.table.style.left = \"0px\";\n\n\t\t// Add class to 'announce' that we are a Scroller table\n\t\t$(this.s.dt.nTableWrapper).addClass('DTS');\n\n\t\t// Add a 'loading' indicator\n\t\tif ( this.s.loadingIndicator )\n\t\t{\n\t\t\tthis.dom.loader = $('<div class=\"DTS_Loading\">'+this.s.dt.oLanguage.sLoadingRecords+'</div>')\n\t\t\t\t.css('display', 'none');\n\n\t\t\t$(this.dom.scroller.parentNode)\n\t\t\t\t.css('position', 'relative')\n\t\t\t\t.append( this.dom.loader );\n\t\t}\n\n\t\t/* Initial size calculations */\n\t\tif ( this.s.heights.row && this.s.heights.row != 'auto' )\n\t\t{\n\t\t\tthis.s.autoHeight = false;\n\t\t}\n\t\tthis.fnMeasure( false );\n\n\t\t/* Scrolling callback to see if a page change is needed - use a throttled\n\t\t * function for the save save callback so we aren't hitting it on every\n\t\t * scroll\n\t\t */\n\t\tthis.s.ingnoreScroll = true;\n\t\tthis.s.stateSaveThrottle = this.s.dt.oApi._fnThrottle( function () {\n\t\t\tthat.s.dt.oApi._fnSaveState( that.s.dt );\n\t\t}, 500 );\n\t\t$(this.dom.scroller).on( 'scroll.DTS', function (e) {\n\t\t\tthat._fnScroll.call( that );\n\t\t} );\n\n\t\t/* In iOS we catch the touchstart event in case the user tries to scroll\n\t\t * while the display is already scrolling\n\t\t */\n\t\t$(this.dom.scroller).on('touchstart.DTS', function () {\n\t\t\tthat._fnScroll.call( that );\n\t\t} );\n\n\t\t/* Update the scroller when the DataTable is redrawn */\n\t\tthis.s.dt.aoDrawCallback.push( {\n\t\t\t\"fn\": function () {\n\t\t\t\tif ( that.s.dt.bInitialised ) {\n\t\t\t\t\tthat._fnDrawCallback.call( that );\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"sName\": \"Scroller\"\n\t\t} );\n\n\t\t/* On resize, update the information element, since the number of rows shown might change */\n\t\t$(window).on( 'resize.DTS', function () {\n\t\t\tthat.fnMeasure( false );\n\t\t\tthat._fnInfo();\n\t\t} );\n\n\t\t/* Add a state saving parameter to the DT state saving so we can restore the exact\n\t\t * position of the scrolling\n\t\t */\n\t\tvar initialStateSave = true;\n\t\tthis.s.dt.oApi._fnCallbackReg( this.s.dt, 'aoStateSaveParams', function (oS, oData) {\n\t\t\t/* Set iScroller to saved scroll position on initialization.\n\t\t\t */\n\t\t\tif(initialStateSave && that.s.dt.oLoadedState){\n\t\t\t\toData.iScroller = that.s.dt.oLoadedState.iScroller;\n\t\t\t\toData.iScrollerTopRow = that.s.dt.oLoadedState.iScrollerTopRow;\n\t\t\t\tinitialStateSave = false;\n\t\t\t} else {\n\t\t\t\toData.iScroller = that.dom.scroller.scrollTop;\n\t\t\t\toData.iScrollerTopRow = that.s.topRowFloat;\n\t\t\t}\n\t\t}, \"Scroller_State\" );\n\n\t\tif ( this.s.dt.oLoadedState ) {\n\t\t\tthis.s.topRowFloat = this.s.dt.oLoadedState.iScrollerTopRow || 0;\n\t\t}\n\n\t\t/* Destructor */\n\t\tthis.s.dt.aoDestroyCallback.push( {\n\t\t\t\"sName\": \"Scroller\",\n\t\t\t\"fn\": function () {\n\t\t\t\t$(window).off( 'resize.DTS' );\n\t\t\t\t$(that.dom.scroller).off('touchstart.DTS scroll.DTS');\n\t\t\t\t$(that.s.dt.nTableWrapper).removeClass('DTS');\n\t\t\t\t$('div.DTS_Loading', that.dom.scroller.parentNode).remove();\n\n\t\t\t\tthat.dom.table.style.position = \"\";\n\t\t\t\tthat.dom.table.style.top = \"\";\n\t\t\t\tthat.dom.table.style.left = \"\";\n\t\t\t}\n\t\t} );\n\t},\n\n\n\t/**\n\t * Scrolling function - fired whenever the scrolling position is changed.\n\t * This method needs to use the stored values to see if the table should be\n\t * redrawn as we are moving towards the end of the information that is\n\t * currently drawn or not. If needed, then it will redraw the table based on\n\t * the new position.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t\"_fnScroll\": function ()\n\t{\n\t\tvar\n\t\t\tthat = this,\n\t\t\theights = this.s.heights,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTopRow;\n\n\t\tif ( this.s.skip ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.s.ingnoreScroll ) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* If the table has been sorted or filtered, then we use the redraw that\n\t\t * DataTables as done, rather than performing our own\n\t\t */\n\t\tif ( this.s.dt.bFiltered || this.s.dt.bSorted ) {\n\t\t\tthis.s.lastScrollTop = 0;\n\t\t\treturn;\n\t\t}\n\n\t\t/* Update the table's information display for what is now in the viewport */\n\t\tthis._fnInfo();\n\n\t\t/* We don't want to state save on every scroll event - that's heavy\n\t\t * handed, so use a timeout to update the state saving only when the\n\t\t * scrolling has finished\n\t\t */\n\t\tclearTimeout( this.s.stateTO );\n\t\tthis.s.stateTO = setTimeout( function () {\n\t\t\tthat.s.dt.oApi._fnSaveState( that.s.dt );\n\t\t}, 250 );\n\n\t\t/* Check if the scroll point is outside the trigger boundary which would required\n\t\t * a DataTables redraw\n\t\t */\n\t\tif ( iScrollTop < this.s.redrawTop || iScrollTop > this.s.redrawBottom ) {\n\t\t\tvar preRows = Math.ceil( ((this.s.displayBuffer-1)/2) * this.s.viewportRows );\n\n\t\t\tif ( Math.abs( iScrollTop - this.s.lastScrollTop ) > heights.viewport || this.s.ani ) {\n\t\t\t\tiTopRow = parseInt(this._domain( 'physicalToVirtual', iScrollTop ) / heights.row, 10) - preRows;\n\t\t\t\tthis.s.topRowFloat = (this._domain( 'physicalToVirtual', iScrollTop ) / heights.row);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tiTopRow = this.fnPixelsToRow( iScrollTop ) - preRows;\n\t\t\t\tthis.s.topRowFloat = this.fnPixelsToRow( iScrollTop, false );\n\t\t\t}\n\n\t\t\tif ( iTopRow <= 0 ) {\n\t\t\t\t/* At the start of the table */\n\t\t\t\tiTopRow = 0;\n\t\t\t}\n\t\t\telse if ( iTopRow + this.s.dt._iDisplayLength > this.s.dt.fnRecordsDisplay() ) {\n\t\t\t\t/* At the end of the table */\n\t\t\t\tiTopRow = this.s.dt.fnRecordsDisplay() - this.s.dt._iDisplayLength;\n\t\t\t\tif ( iTopRow < 0 ) {\n\t\t\t\t\tiTopRow = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( iTopRow % 2 !== 0 ) {\n\t\t\t\t// For the row-striping classes (odd/even) we want only to start\n\t\t\t\t// on evens otherwise the stripes will change between draws and\n\t\t\t\t// look rubbish\n\t\t\t\tiTopRow++;\n\t\t\t}\n\n\t\t\tif ( iTopRow != this.s.dt._iDisplayStart ) {\n\t\t\t\t/* Cache the new table position for quick lookups */\n\t\t\t\tthis.s.tableTop = $(this.s.dt.nTable).offset().top;\n\t\t\t\tthis.s.tableBottom = $(this.s.dt.nTable).height() + this.s.tableTop;\n\n\t\t\t\tvar draw =  function () {\n\t\t\t\t\tif ( that.s.scrollDrawReq === null ) {\n\t\t\t\t\t\tthat.s.scrollDrawReq = iScrollTop;\n\t\t\t\t\t}\n\n\t\t\t\t\tthat.s.dt._iDisplayStart = iTopRow;\n\t\t\t\t\tif ( that.s.dt.oApi._fnCalculateEnd ) { // Removed in 1.10\n\t\t\t\t\t\tthat.s.dt.oApi._fnCalculateEnd( that.s.dt );\n\t\t\t\t\t}\n\t\t\t\t\tthat.s.dt.oApi._fnDraw( that.s.dt );\n\t\t\t\t};\n\n\t\t\t\t/* Do the DataTables redraw based on the calculated start point - note that when\n\t\t\t\t * using server-side processing we introduce a small delay to not DoS the server...\n\t\t\t\t */\n\t\t\t\tif ( this.s.dt.oFeatures.bServerSide ) {\n\t\t\t\t\tclearTimeout( this.s.drawTO );\n\t\t\t\t\tthis.s.drawTO = setTimeout( draw, this.s.serverWait );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdraw();\n\t\t\t\t}\n\n\t\t\t\tif ( this.dom.loader && ! this.s.loaderVisible ) {\n\t\t\t\t\tthis.dom.loader.css( 'display', 'block' );\n\t\t\t\t\tthis.s.loaderVisible = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.s.lastScrollTop = iScrollTop;\n\t\tthis.s.stateSaveThrottle();\n\t},\n\n\n\t/**\n\t * Convert from one domain to another. The physical domain is the actual\n\t * pixel count on the screen, while the virtual is if we had browsers which\n\t * had scrolling containers of infinite height (i.e. the absolute value)\n\t *\n\t *  @param {string} dir Domain transform direction, `virtualToPhysical` or\n\t *    `physicalToVirtual` \n\t *  @returns {number} Calculated transform\n\t *  @private\n\t */\n\t_domain: function ( dir, val )\n\t{\n\t\tvar heights = this.s.heights;\n\t\tvar coeff;\n\n\t\t// If the virtual and physical height match, then we use a linear\n\t\t// transform between the two, allowing the scrollbar to be linear\n\t\tif ( heights.virtual === heights.scroll ) {\n\t\t\tcoeff = (heights.virtual-heights.viewport) / (heights.scroll-heights.viewport);\n\n\t\t\tif ( dir === 'virtualToPhysical' ) {\n\t\t\t\treturn val / coeff;\n\t\t\t}\n\t\t\telse if ( dir === 'physicalToVirtual' ) {\n\t\t\t\treturn val * coeff;\n\t\t\t}\n\t\t}\n\n\t\t// Otherwise, we want a non-linear scrollbar to take account of the\n\t\t// redrawing regions at the start and end of the table, otherwise these\n\t\t// can stutter badly - on large tables 30px (for example) scroll might\n\t\t// be hundreds of rows, so the table would be redrawing every few px at\n\t\t// the start and end. Use a simple quadratic to stop this. It does mean\n\t\t// the scrollbar is non-linear, but with such massive data sets, the\n\t\t// scrollbar is going to be a best guess anyway\n\t\tvar xMax = (heights.scroll - heights.viewport) / 2;\n\t\tvar yMax = (heights.virtual - heights.viewport) / 2;\n\n\t\tcoeff = yMax / ( xMax * xMax );\n\n\t\tif ( dir === 'virtualToPhysical' ) {\n\t\t\tif ( val < yMax ) {\n\t\t\t\treturn Math.pow(val / coeff, 0.5);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tval = (yMax*2) - val;\n\t\t\t\treturn val < 0 ?\n\t\t\t\t\theights.scroll :\n\t\t\t\t\t(xMax*2) - Math.pow(val / coeff, 0.5);\n\t\t\t}\n\t\t}\n\t\telse if ( dir === 'physicalToVirtual' ) {\n\t\t\tif ( val < xMax ) {\n\t\t\t\treturn val * val * coeff;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tval = (xMax*2) - val;\n\t\t\t\treturn val < 0 ?\n\t\t\t\t\theights.virtual :\n\t\t\t\t\t(yMax*2) - (val * val * coeff);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/**\n\t * Draw callback function which is fired when the DataTable is redrawn. The main function of\n\t * this method is to position the drawn table correctly the scrolling container for the rows\n\t * that is displays as a result of the scrolling position.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t\"_fnDrawCallback\": function ()\n\t{\n\t\tvar\n\t\t\tthat = this,\n\t\t\theights = this.s.heights,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiActualScrollTop = iScrollTop,\n\t\t\tiScrollBottom = iScrollTop + heights.viewport,\n\t\t\tiTableHeight = $(this.s.dt.nTable).height(),\n\t\t\tdisplayStart = this.s.dt._iDisplayStart,\n\t\t\tdisplayLen = this.s.dt._iDisplayLength,\n\t\t\tdisplayEnd = this.s.dt.fnRecordsDisplay();\n\n\t\t// Disable the scroll event listener while we are updating the DOM\n\t\tthis.s.skip = true;\n\n\t\t// Resize the scroll forcing element\n\t\tthis._fnScrollForce();\n\n\t\t// Reposition the scrolling for the updated virtual position if needed\n\t\tif ( displayStart === 0 ) {\n\t\t\t// Linear calculation at the top of the table\n\t\t\tiScrollTop = this.s.topRowFloat * heights.row;\n\t\t}\n\t\telse if ( displayStart + displayLen >= displayEnd ) {\n\t\t\t// Linear calculation that the bottom as well\n\t\t\tiScrollTop = heights.scroll - ((displayEnd - this.s.topRowFloat) * heights.row);\n\t\t}\n\t\telse {\n\t\t\t// Domain scaled in the middle\n\t\t\tiScrollTop = this._domain( 'virtualToPhysical', this.s.topRowFloat * heights.row );\n\t\t}\n\n\t\tthis.dom.scroller.scrollTop = iScrollTop;\n\n\t\t// Store positional information so positional calculations can be based\n\t\t// upon the current table draw position\n\t\tthis.s.baseScrollTop = iScrollTop;\n\t\tthis.s.baseRowTop = this.s.topRowFloat;\n\n\t\t// Position the table in the virtual scroller\n\t\tvar tableTop = iScrollTop - ((this.s.topRowFloat - displayStart) * heights.row);\n\t\tif ( displayStart === 0 ) {\n\t\t\ttableTop = 0;\n\t\t}\n\t\telse if ( displayStart + displayLen >= displayEnd ) {\n\t\t\ttableTop = heights.scroll - iTableHeight;\n\t\t}\n\n\t\tthis.dom.table.style.top = tableTop+'px';\n\n\t\t/* Cache some information for the scroller */\n\t\tthis.s.tableTop = tableTop;\n\t\tthis.s.tableBottom = iTableHeight + this.s.tableTop;\n\n\t\t// Calculate the boundaries for where a redraw will be triggered by the\n\t\t// scroll event listener\n\t\tvar boundaryPx = (iScrollTop - this.s.tableTop) * this.s.boundaryScale;\n\t\tthis.s.redrawTop = iScrollTop - boundaryPx;\n\t\tthis.s.redrawBottom = iScrollTop + boundaryPx;\n\n\t\tthis.s.skip = false;\n\n\t\t// Restore the scrolling position that was saved by DataTable's state\n\t\t// saving Note that this is done on the second draw when data is Ajax\n\t\t// sourced, and the first draw when DOM soured\n\t\tif ( this.s.dt.oFeatures.bStateSave && this.s.dt.oLoadedState !== null &&\n\t\t\t typeof this.s.dt.oLoadedState.iScroller != 'undefined' )\n\t\t{\n\t\t\t// A quirk of DataTables is that the draw callback will occur on an\n\t\t\t// empty set if Ajax sourced, but not if server-side processing.\n\t\t\tvar ajaxSourced = (this.s.dt.sAjaxSource || that.s.dt.ajax) && ! this.s.dt.oFeatures.bServerSide ?\n\t\t\t\ttrue :\n\t\t\t\tfalse;\n\n\t\t\tif ( ( ajaxSourced && this.s.dt.iDraw == 2) ||\n\t\t\t     (!ajaxSourced && this.s.dt.iDraw == 1) )\n\t\t\t{\n\t\t\t\tsetTimeout( function () {\n\t\t\t\t\t$(that.dom.scroller).scrollTop( that.s.dt.oLoadedState.iScroller );\n\t\t\t\t\tthat.s.redrawTop = that.s.dt.oLoadedState.iScroller - (heights.viewport/2);\n\n\t\t\t\t\t// In order to prevent layout thrashing we need another\n\t\t\t\t\t// small delay\n\t\t\t\t\tsetTimeout( function () {\n\t\t\t\t\t\tthat.s.ingnoreScroll = false;\n\t\t\t\t\t}, 0 );\n\t\t\t\t}, 0 );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthat.s.ingnoreScroll = false;\n\t\t}\n\n\t\t// Because of the order of the DT callbacks, the info update will\n\t\t// take precedence over the one we want here. So a 'thread' break is\n\t\t// needed\n\t\tsetTimeout( function () {\n\t\t\tthat._fnInfo.call( that );\n\t\t}, 0 );\n\n\t\t// Hide the loading indicator\n\t\tif ( this.dom.loader && this.s.loaderVisible ) {\n\t\t\tthis.dom.loader.css( 'display', 'none' );\n\t\t\tthis.s.loaderVisible = false;\n\t\t}\n\t},\n\n\n\t/**\n\t * Force the scrolling container to have height beyond that of just the\n\t * table that has been drawn so the user can scroll the whole data set.\n\t *\n\t * Note that if the calculated required scrolling height exceeds a maximum\n\t * value (1 million pixels - hard-coded) the forcing element will be set\n\t * only to that maximum value and virtual / physical domain transforms will\n\t * be used to allow Scroller to display tables of any number of records.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_fnScrollForce: function ()\n\t{\n\t\tvar heights = this.s.heights;\n\t\tvar max = 1000000;\n\n\t\theights.virtual = heights.row * this.s.dt.fnRecordsDisplay();\n\t\theights.scroll = heights.virtual;\n\n\t\tif ( heights.scroll > max ) {\n\t\t\theights.scroll = max;\n\t\t}\n\n\t\tthis.dom.force.style.height = heights.scroll+\"px\";\n\t},\n\n\n\t/**\n\t * Automatic calculation of table row height. This is just a little tricky here as using\n\t * initialisation DataTables has tale the table out of the document, so we need to create\n\t * a new table and insert it into the document, calculate the row height and then whip the\n\t * table out.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t\"_fnCalcRowHeight\": function ()\n\t{\n\t\tvar dt = this.s.dt;\n\t\tvar origTable = dt.nTable;\n\t\tvar nTable = origTable.cloneNode( false );\n\t\tvar tbody = $('<tbody/>').appendTo( nTable );\n\t\tvar container = $(\n\t\t\t'<div class=\"'+dt.oClasses.sWrapper+' DTS\">'+\n\t\t\t\t'<div class=\"'+dt.oClasses.sScrollWrapper+'\">'+\n\t\t\t\t\t'<div class=\"'+dt.oClasses.sScrollBody+'\"></div>'+\n\t\t\t\t'</div>'+\n\t\t\t'</div>'\n\t\t);\n\n\t\t// Want 3 rows in the sizing table so :first-child and :last-child\n\t\t// CSS styles don't come into play - take the size of the middle row\n\t\t$('tbody tr:lt(4)', origTable).clone().appendTo( tbody );\n\t\twhile( $('tr', tbody).length < 3 ) {\n\t\t\ttbody.append( '<tr><td>&nbsp;</td></tr>' );\n\t\t}\n\n\t\t$('div.'+dt.oClasses.sScrollBody, container).append( nTable );\n\n\t\tvar appendTo;\n\t\tif (dt._bInitComplete) {\n\t\t\tappendTo = origTable.parentNode;\n\t\t} else {\n\t\t\tif (!this.s.dt.nHolding) {\n\t\t\t\tthis.s.dt.nHolding = $( '<div></div>' ).insertBefore( this.s.dt.nTable );\n\t\t\t}\n\t\t\tappendTo = this.s.dt.nHolding;\n\t\t}\n\n\t\tcontainer.appendTo( appendTo );\n\t\tthis.s.heights.row = $('tr', tbody).eq(1).outerHeight();\n\t\tcontainer.remove();\n\t},\n\n\n\t/**\n\t * Update any information elements that are controlled by the DataTable based on the scrolling\n\t * viewport and what rows are visible in it. This function basically acts in the same way as\n\t * _fnUpdateInfo in DataTables, and effectively replaces that function.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t\"_fnInfo\": function ()\n\t{\n\t\tif ( !this.s.dt.oFeatures.bInfo )\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar\n\t\t\tdt = this.s.dt,\n\t\t\tlanguage = dt.oLanguage,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiStart = Math.floor( this.fnPixelsToRow(iScrollTop, false, this.s.ani)+1 ),\n\t\t\tiMax = dt.fnRecordsTotal(),\n\t\t\tiTotal = dt.fnRecordsDisplay(),\n\t\t\tiPossibleEnd = Math.ceil( this.fnPixelsToRow(iScrollTop+this.s.heights.viewport, false, this.s.ani) ),\n\t\t\tiEnd = iTotal < iPossibleEnd ? iTotal : iPossibleEnd,\n\t\t\tsStart = dt.fnFormatNumber( iStart ),\n\t\t\tsEnd = dt.fnFormatNumber( iEnd ),\n\t\t\tsMax = dt.fnFormatNumber( iMax ),\n\t\t\tsTotal = dt.fnFormatNumber( iTotal ),\n\t\t\tsOut;\n\n\t\tif ( dt.fnRecordsDisplay() === 0 &&\n\t\t\t   dt.fnRecordsDisplay() == dt.fnRecordsTotal() )\n\t\t{\n\t\t\t/* Empty record set */\n\t\t\tsOut = language.sInfoEmpty+ language.sInfoPostFix;\n\t\t}\n\t\telse if ( dt.fnRecordsDisplay() === 0 )\n\t\t{\n\t\t\t/* Empty record set after filtering */\n\t\t\tsOut = language.sInfoEmpty +' '+\n\t\t\t\tlanguage.sInfoFiltered.replace('_MAX_', sMax)+\n\t\t\t\t\tlanguage.sInfoPostFix;\n\t\t}\n\t\telse if ( dt.fnRecordsDisplay() == dt.fnRecordsTotal() )\n\t\t{\n\t\t\t/* Normal record set */\n\t\t\tsOut = language.sInfo.\n\t\t\t\t\treplace('_START_', sStart).\n\t\t\t\t\treplace('_END_',   sEnd).\n\t\t\t\t\treplace('_MAX_',   sMax).\n\t\t\t\t\treplace('_TOTAL_', sTotal)+\n\t\t\t\tlanguage.sInfoPostFix;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Record set after filtering */\n\t\t\tsOut = language.sInfo.\n\t\t\t\t\treplace('_START_', sStart).\n\t\t\t\t\treplace('_END_',   sEnd).\n\t\t\t\t\treplace('_MAX_',   sMax).\n\t\t\t\t\treplace('_TOTAL_', sTotal) +' '+\n\t\t\t\tlanguage.sInfoFiltered.replace(\n\t\t\t\t\t'_MAX_',\n\t\t\t\t\tdt.fnFormatNumber(dt.fnRecordsTotal())\n\t\t\t\t)+\n\t\t\t\tlanguage.sInfoPostFix;\n\t\t}\n\n\t\tvar callback = language.fnInfoCallback;\n\t\tif ( callback ) {\n\t\t\tsOut = callback.call( dt.oInstance,\n\t\t\t\tdt, iStart, iEnd, iMax, iTotal, sOut\n\t\t\t);\n\t\t}\n\n\t\tvar n = dt.aanFeatures.i;\n\t\tif ( typeof n != 'undefined' )\n\t\t{\n\t\t\tfor ( var i=0, iLen=n.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\t$(n[i]).html( sOut );\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Statics\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\n/**\n * Scroller default settings for initialisation\n *  @namespace\n *  @name Scroller.defaults\n *  @static\n */\nScroller.defaults = /** @lends Scroller.defaults */{\n\t/**\n\t * Indicate if Scroller show show trace information on the console or not. This can be\n\t * useful when debugging Scroller or if just curious as to what it is doing, but should\n\t * be turned off for production.\n\t *  @type     bool\n\t *  @default  false\n\t *  @static\n\t *  @example\n\t *    var oTable = $('#example').dataTable( {\n\t *        \"sScrollY\": \"200px\",\n\t *        \"sDom\": \"frtiS\",\n\t *        \"bDeferRender\": true,\n\t *        \"oScroller\": {\n\t *          \"trace\": true\n\t *        }\n\t *    } );\n\t */\n\t\"trace\": false,\n\n\t/**\n\t * Scroller will attempt to automatically calculate the height of rows for it's internal\n\t * calculations. However the height that is used can be overridden using this parameter.\n\t *  @type     int|string\n\t *  @default  auto\n\t *  @static\n\t *  @example\n\t *    var oTable = $('#example').dataTable( {\n\t *        \"sScrollY\": \"200px\",\n\t *        \"sDom\": \"frtiS\",\n\t *        \"bDeferRender\": true,\n\t *        \"oScroller\": {\n\t *          \"rowHeight\": 30\n\t *        }\n\t *    } );\n\t */\n\t\"rowHeight\": \"auto\",\n\n\t/**\n\t * When using server-side processing, Scroller will wait a small amount of time to allow\n\t * the scrolling to finish before requesting more data from the server. This prevents\n\t * you from DoSing your own server! The wait time can be configured by this parameter.\n\t *  @type     int\n\t *  @default  200\n\t *  @static\n\t *  @example\n\t *    var oTable = $('#example').dataTable( {\n\t *        \"sScrollY\": \"200px\",\n\t *        \"sDom\": \"frtiS\",\n\t *        \"bDeferRender\": true,\n\t *        \"oScroller\": {\n\t *          \"serverWait\": 100\n\t *        }\n\t *    } );\n\t */\n\t\"serverWait\": 200,\n\n\t/**\n\t * The display buffer is what Scroller uses to calculate how many rows it should pre-fetch\n\t * for scrolling. Scroller automatically adjusts DataTables' display length to pre-fetch\n\t * rows that will be shown in \"near scrolling\" (i.e. just beyond the current display area).\n\t * The value is based upon the number of rows that can be displayed in the viewport (i.e.\n\t * a value of 1), and will apply the display range to records before before and after the\n\t * current viewport - i.e. a factor of 3 will allow Scroller to pre-fetch 1 viewport's worth\n\t * of rows before the current viewport, the current viewport's rows and 1 viewport's worth\n\t * of rows after the current viewport. Adjusting this value can be useful for ensuring\n\t * smooth scrolling based on your data set.\n\t *  @type     int\n\t *  @default  7\n\t *  @static\n\t *  @example\n\t *    var oTable = $('#example').dataTable( {\n\t *        \"sScrollY\": \"200px\",\n\t *        \"sDom\": \"frtiS\",\n\t *        \"bDeferRender\": true,\n\t *        \"oScroller\": {\n\t *          \"displayBuffer\": 10\n\t *        }\n\t *    } );\n\t */\n\t\"displayBuffer\": 9,\n\n\t/**\n\t * Scroller uses the boundary scaling factor to decide when to redraw the table - which it\n\t * typically does before you reach the end of the currently loaded data set (in order to\n\t * allow the data to look continuous to a user scrolling through the data). If given as 0\n\t * then the table will be redrawn whenever the viewport is scrolled, while 1 would not\n\t * redraw the table until the currently loaded data has all been shown. You will want\n\t * something in the middle - the default factor of 0.5 is usually suitable.\n\t *  @type     float\n\t *  @default  0.5\n\t *  @static\n\t *  @example\n\t *    var oTable = $('#example').dataTable( {\n\t *        \"sScrollY\": \"200px\",\n\t *        \"sDom\": \"frtiS\",\n\t *        \"bDeferRender\": true,\n\t *        \"oScroller\": {\n\t *          \"boundaryScale\": 0.75\n\t *        }\n\t *    } );\n\t */\n\t\"boundaryScale\": 0.5,\n\n\t/**\n\t * Show (or not) the loading element in the background of the table. Note that you should\n\t * include the dataTables.scroller.css file for this to be displayed correctly.\n\t *  @type     boolean\n\t *  @default  false\n\t *  @static\n\t *  @example\n\t *    var oTable = $('#example').dataTable( {\n\t *        \"sScrollY\": \"200px\",\n\t *        \"sDom\": \"frtiS\",\n\t *        \"bDeferRender\": true,\n\t *        \"oScroller\": {\n\t *          \"loadingIndicator\": true\n\t *        }\n\t *    } );\n\t */\n\t\"loadingIndicator\": false\n};\n\nScroller.oDefaults = Scroller.defaults;\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Constants\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Scroller version\n *  @type      String\n *  @default   See code\n *  @name      Scroller.version\n *  @static\n */\nScroller.version = \"1.2.2\";\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Initialisation\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/*\n * Register a new feature with DataTables\n */\nif ( typeof $.fn.dataTable == \"function\" &&\n     typeof $.fn.dataTableExt.fnVersionCheck == \"function\" &&\n     $.fn.dataTableExt.fnVersionCheck('1.9.0') )\n{\n\t$.fn.dataTableExt.aoFeatures.push( {\n\t\t\"fnInit\": function( oDTSettings ) {\n\t\t\tvar init = oDTSettings.oInit;\n\t\t\tvar opts = init.scroller || init.oScroller || {};\n\t\t\tvar oScroller = new Scroller( oDTSettings, opts );\n\t\t\treturn oScroller.dom.wrapper;\n\t\t},\n\t\t\"cFeature\": \"S\",\n\t\t\"sFeature\": \"Scroller\"\n\t} );\n}\nelse\n{\n\talert( \"Warning: Scroller requires DataTables 1.9.0 or greater - www.datatables.net/download\");\n}\n\n\n// Attach Scroller to DataTables so it can be accessed as an 'extra'\n$.fn.dataTable.Scroller = Scroller;\n$.fn.DataTable.Scroller = Scroller;\n\n\n// DataTables 1.10 API method aliases\nif ( $.fn.dataTable.Api ) {\n\tvar Api = $.fn.dataTable.Api;\n\n\tApi.register( 'scroller()', function () {\n\t\treturn this;\n\t} );\n\n\tApi.register( 'scroller().rowToPixels()', function ( rowIdx, intParse, virtual ) {\n\t\tvar ctx = this.context;\n\n\t\tif ( ctx.length && ctx[0].oScroller ) {\n\t\t\treturn ctx[0].oScroller.fnRowToPixels( rowIdx, intParse, virtual );\n\t\t}\n\t\t// undefined\n\t} );\n\n\tApi.register( 'scroller().pixelsToRow()', function ( pixels, intParse, virtual ) {\n\t\tvar ctx = this.context;\n\n\t\tif ( ctx.length && ctx[0].oScroller ) {\n\t\t\treturn ctx[0].oScroller.fnPixelsToRow( pixels, intParse, virtual );\n\t\t}\n\t\t// undefined\n\t} );\n\n\tApi.register( 'scroller().scrollToRow()', function ( row, ani ) {\n\t\tthis.iterator( 'table', function ( ctx ) {\n\t\t\tif ( ctx.oScroller ) {\n\t\t\t\tctx.oScroller.fnScrollToRow( row, ani );\n\t\t\t}\n\t\t} );\n\n\t\treturn this;\n\t} );\n\n\tApi.register( 'scroller().measure()', function ( redraw ) {\n\t\tthis.iterator( 'table', function ( ctx ) {\n\t\t\tif ( ctx.oScroller ) {\n\t\t\t\tctx.oScroller.fnMeasure( redraw );\n\t\t\t}\n\t\t} );\n\n\t\treturn this;\n\t} );\n}\n\n\nreturn Scroller;\n}; // /factory\n\n\n// Define as an AMD module if possible\nif ( typeof define === 'function' && define.amd ) {\n\tdefine( ['jquery', 'datatables'], factory );\n}\nelse if ( typeof exports === 'object' ) {\n    // Node/CommonJS\n    factory( require('jquery'), require('datatables') );\n}\nelse if ( jQuery && !jQuery.fn.dataTable.Scroller ) {\n\t// Otherwise simply initialise as normal, stopping multiple evaluation\n\tfactory( jQuery, jQuery.fn.dataTable );\n}\n\n\n})(window, document);\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/Readme.md",
    "content": "# TableTools\n\nTableTools is a plug-in for the DataTables HTML table enhancer, which adds a highly customisable button toolbar to a DataTable. Key features include:\n\n* Copy to clipboard\n* Save table data as CSV, XLS or PDF files\n* Print view for clean printing\n* Row selection options\n* Easy use predefined buttons\n* Simple customisation of buttons\n* Well defined API for advanced control\n\n\n# Installation\n\nTo use TableTools, first download DataTables ( http://datatables.net/download ) and place the unzipped TableTools package into a `extensions` directory in the DataTables package (in DataTables 1.9- use the `extras` directory). This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser.\n\n\n# Basic usage\n\nTableTools is initialised using the `T` option that it adds to DataTables' `dom` option. For example:\n\n```js\n$(document).ready( function () {\n\t$('#example').DataTable( {\n\t\tdom: 'T<\"clear\">lfrtip'\n\t} );\n} );\n```\n\n\n# Documentation / support\n\n* Documentation: http://datatables.net/extensions/tabletools/\n* DataTables support forums: http://datatables.net/forums\n\n\n# GitHub\n\nIf you fancy getting involved with the development of TableTools and help make it better, please refer to its GitHub repo: https://github.com/DataTables/TableTools\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/css/dataTables.tableTools.css",
    "content": "/*\n * File:        TableTools.css\n * Description: Styles for TableTools 2\n * Author:      Allan Jardine (www.sprymedia.co.uk)\n * Language:    Javascript\n * License:     GPL v2 / 3 point BSD\n * Project:     DataTables\n * \n * Copyright 2009-2012 Allan Jardine, all rights reserved.\n *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n *\n * CSS name space:\n *   DTTT                  DataTables TableTools\n *\n * Style sheet provides:\n *   CONTAINER             TableTools container element and styles applying to all components\n *   BUTTON_STYLES         Action specific button styles\n *   SELECTING             Row selection styles\n *   COLLECTIONS           Drop down list (collection) styles\n *   PRINTING              Print display styles\n */\n\n\n/*\n * CONTAINER\n * TableTools container element and styles applying to all components\n */\ndiv.DTTT_container {\n\tposition: relative;\n\tfloat: right;\n\tmargin-bottom: 1em;\n}\n\n@media screen and (max-width: 640px) {\n\tdiv.DTTT_container {\n\t\tfloat: none !important;\n\t\ttext-align: center;\n\t}\n\n\tdiv.DTTT_container:after {\n\t\tvisibility: hidden;\n\t\tdisplay: block;\n\t\tcontent: \"\";\n\t\tclear: both;\n\t\theight: 0;\n\t}\n}\n\n\nbutton.DTTT_button,\ndiv.DTTT_button,\na.DTTT_button {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 3px;\n\tpadding: 5px 8px;\n\tborder: 1px solid #999;\n\tcursor: pointer;\n\t*cursor: hand;\n\tfont-size: 0.88em;\n\tcolor: black !important;\n\n\t-webkit-border-radius: 2px;\n\t   -moz-border-radius: 2px;\n\t    -ms-border-radius: 2px;\n\t     -o-border-radius: 2px;\n\t        border-radius: 2px;\n\n\t-webkit-box-shadow: 1px 1px 3px #ccc;\n\t   -moz-box-shadow: 1px 1px 3px #ccc;\n\t    -ms-box-shadow: 1px 1px 3px #ccc;\n\t     -o-box-shadow: 1px 1px 3px #ccc;\n\t        box-shadow: 1px 1px 3px #ccc;\n\n\t/* Generated by http://www.colorzilla.com/gradient-editor/ */\n\tbackground: #ffffff; /* Old browsers */\n\tbackground: -webkit-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Chrome10+,Safari5.1+ */\n\tbackground:    -moz-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* FF3.6+ */\n\tbackground:     -ms-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* IE10+ */\n\tbackground:      -o-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Opera 11.10+ */\n\tbackground:         linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* W3C */\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#f9f9f9',GradientType=0 ); /* IE6-9 */\n}\n\n\n/* Buttons are cunning border-box sizing - we can't just use that for A and DIV due to IE6/7 */\nbutton.DTTT_button {\n\theight: 30px;\n\tpadding: 3px 8px;\n}\n\n.DTTT_button embed { \n\toutline: none;\n}\n\nbutton.DTTT_button:hover:not(.DTTT_disabled),\ndiv.DTTT_button:hover:not(.DTTT_disabled),\na.DTTT_button:hover:not(.DTTT_disabled) {\n\tborder: 1px solid #666;\n\ttext-decoration: none !important;\n\n\t-webkit-box-shadow: 1px 1px 3px #999;\n\t   -moz-box-shadow: 1px 1px 3px #999;\n\t    -ms-box-shadow: 1px 1px 3px #999;\n\t     -o-box-shadow: 1px 1px 3px #999;\n\t        box-shadow: 1px 1px 3px #999;\n\n\tbackground: #f3f3f3; /* Old browsers */\n\tbackground: -webkit-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* Chrome10+,Safari5.1+ */\n\tbackground:    -moz-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* FF3.6+ */\n\tbackground:     -ms-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* IE10+ */\n\tbackground:      -o-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* Opera 11.10+ */\n\tbackground:         linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* W3C */\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f3f3f3', endColorstr='#f4f4f4',GradientType=0 ); /* IE6-9 */\n}\n\nbutton.DTTT_button:focus,\ndiv.DTTT_button:focus,\na.DTTT_button:focus {\n\tborder: 1px solid #426c9e;\n\ttext-shadow: 0 1px 0 #c4def1;\n\toutline: none;\n\n\tbackground-color: #a3d0ef 100%;\n\tbackground-image: -webkit-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);\n\tbackground-image:    -moz-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);\n\tbackground-image:     -ms-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);\n\tbackground-image:      -o-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);\n\tbackground-image:         linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#a3d0ef', EndColorStr='#a3d0ef');\n}\n\nbutton.DTTT_button:active:not(.DTTT_disabled),\ndiv.DTTT_button:active:not(.DTTT_disabled),\na.DTTT_button:active:not(.DTTT_disabled) {\n\t-webkit-box-shadow: inset 1px 1px 3px #999999;\n\t-moz-box-shadow: inset 1px 1px 3px #999999;\n\tbox-shadow: inset 1px 1px 3px #999999;\n}\n\nbutton.DTTT_disabled,\ndiv.DTTT_disabled,\na.DTTT_disabled {\n\tcolor: #999 !important;\n\tborder: 1px solid #d0d0d0;\n\tcursor: default;\n\tbackground: #ffffff; /* Old browsers */\n\tbackground: -webkit-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* Chrome10+,Safari5.1+ */\n\tbackground:    -moz-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* FF3.6+ */\n\tbackground:     -ms-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* IE10+ */\n\tbackground:      -o-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* Opera 11.10+ */\n\tbackground:         linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* W3C */\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#fafafa',GradientType=0 ); /* IE6-9 */\n}\n\n\n\n/*\n * BUTTON_STYLES\n * Action specific button styles\n * If you want images - comment this back in\n\na.DTTT_button_csv,\na.DTTT_button_xls,\na.DTTT_button_copy,\na.DTTT_button_pdf,\na.DTTT_button_print {\n\tpadding-right: 0px;\n}\n\na.DTTT_button_csv span,\na.DTTT_button_xls span,\na.DTTT_button_copy span,\na.DTTT_button_pdf span,\na.DTTT_button_print span {\n\tdisplay: inline-block;\n\theight: 24px;\n\tline-height: 24px;\n\tpadding-right: 30px;\n}\n\n\na.DTTT_button_csv span { background: url(../images/csv.png) no-repeat bottom right; }\na.DTTT_button_csv:hover span { background: url(../images/csv_hover.png) no-repeat center right; }\n\na.DTTT_button_xls span { background: url(../images/xls.png) no-repeat center right; }\na.DTTT_button_xls:hover span { background: #f0f0f0 url(../images/xls_hover.png) no-repeat center right; }\n\na.DTTT_button_copy span { background: url(../images/copy.png) no-repeat center right; }\na.DTTT_button_copy:hover span { background: #f0f0f0 url(../images/copy_hover.png) no-repeat center right; }\n\na.DTTT_button_pdf span { background: url(../images/pdf.png) no-repeat center right; }\na.DTTT_button_pdf:hover span { background: #f0f0f0 url(../images/pdf_hover.png) no-repeat center right; }\n\na.DTTT_button_print span { background: url(../images/print.png) no-repeat center right; }\na.DTTT_button_print:hover span { background: #f0f0f0 url(../images/print_hover.png) no-repeat center right; }\n\n */\n\nbutton.DTTT_button_collection span {\n\tpadding-right: 17px;\n\tbackground: url(../images/collection.png) no-repeat center right;\n}\n\nbutton.DTTT_button_collection:hover span {\n\tpadding-right: 17px;\n\tbackground: #f0f0f0 url(../images/collection_hover.png) no-repeat center right;\n}\n\n\n/*\n * SELECTING\n * Row selection styles\n */\ntable.DTTT_selectable tbody tr {\n\tcursor: pointer;\n\t*cursor: hand;\n}\n\ntable.dataTable tr.DTTT_selected.odd {\n\tbackground-color: #9FAFD1;\n}\n\ntable.dataTable tr.DTTT_selected.odd td.sorting_1 {\n\tbackground-color: #9FAFD1;\n}\n\ntable.dataTable tr.DTTT_selected.odd td.sorting_2 {\n\tbackground-color: #9FAFD1;\n}\n\ntable.dataTable tr.DTTT_selected.odd td.sorting_3 {\n\tbackground-color: #9FAFD1;\n}\n\n\ntable.dataTable tr.DTTT_selected.even {\n\tbackground-color: #B0BED9;\n}\n\ntable.dataTable tr.DTTT_selected.even td.sorting_1 {\n\tbackground-color: #B0BED9;\n}\n\ntable.dataTable tr.DTTT_selected.even td.sorting_2 {\n\tbackground-color: #B0BED9;\n}\n\ntable.dataTable tr.DTTT_selected.even td.sorting_3 {\n\tbackground-color: #B0BED9;\n}\n\n\n/*\n * COLLECTIONS\n * Drop down list (collection) styles\n */\n\ndiv.DTTT_collection {\n\twidth: 150px;\n\tpadding: 8px 8px 4px 8px;\n\tborder: 1px solid #ccc;\n\tborder: 1px solid rgba( 0, 0, 0, 0.4 );\n\tbackground-color: #f3f3f3;\n\tbackground-color: rgba( 255, 255, 255, 0.3 );\n\toverflow: hidden;\n\tz-index: 2002;\n\n\t-webkit-border-radius: 5px;\n\t   -moz-border-radius: 5px;\n\t    -ms-border-radius: 5px;\n\t     -o-border-radius: 5px;\n\t        border-radius: 5px;\n\t\n\t-webkit-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);\n\t   -moz-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);\n\t    -ms-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);\n\t     -o-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);\n\t        box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);\n}\n\ndiv.DTTT_collection_background {\n\tbackground: black;\n\tz-index: 2001;\n}\n\ndiv.DTTT_collection button.DTTT_button,\ndiv.DTTT_collection div.DTTT_button,\ndiv.DTTT_collection a.DTTT_button {\n\tposition: relative;\n\tleft: 0;\n\tright: 0;\n\n\tdisplay: block;\n\tfloat: none;\n\tmargin-bottom: 4px;\n\t\n\t-webkit-box-shadow: 1px 1px 3px #999;\n\t   -moz-box-shadow: 1px 1px 3px #999;\n\t    -ms-box-shadow: 1px 1px 3px #999;\n\t     -o-box-shadow: 1px 1px 3px #999;\n\t        box-shadow: 1px 1px 3px #999;\n}\n\n\n/*\n * PRINTING\n * Print display styles\n */\n\n.DTTT_print_info {\n\tposition: fixed;\n\ttop: 50%;\n\tleft: 50%;\n\twidth: 400px;\n\theight: 150px;\n\tmargin-left: -200px;\n\tmargin-top: -75px;\n\ttext-align: center;\n\tcolor: #333;\n\tpadding: 10px 30px;\n\n\tbackground: #ffffff; /* Old browsers */\n\tbackground: -webkit-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Chrome10+,Safari5.1+ */\n\tbackground:    -moz-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* FF3.6+ */\n\tbackground:     -ms-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* IE10+ */\n\tbackground:      -o-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Opera 11.10+ */\n\tbackground:         linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* W3C */\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#f9f9f9',GradientType=0 ); /* IE6-9 */\n\t\n\topacity: 0.95;\n\n\tborder: 1px solid black;\n\tborder: 1px solid rgba(0, 0, 0, 0.5);\n\t\n\t-webkit-border-radius: 6px;\n\t   -moz-border-radius: 6px;\n\t    -ms-border-radius: 6px;\n\t     -o-border-radius: 6px;\n\t        border-radius: 6px;\n\t\n\t-webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);\n\t   -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);\n\t    -ms-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);\n\t     -o-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);\n\t        box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);\n}\n\n.DTTT_print_info h6 {\n\tfont-weight: normal;\n\tfont-size: 28px;\n\tline-height: 28px;\n\tmargin: 1em;\n}\n\n.DTTT_print_info p {\n\tfont-size: 14px;\n\tline-height: 20px;\n}\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/ajax.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Ajax loaded data</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T<\"clear\">lfrtip',\n\t\t\"ajax\": \"../../../../examples/ajax/data/objects.txt\",\n\t\t\"columns\": [\n\t\t\t{ \"data\": \"name\" },\n\t\t\t{ \"data\": \"position\" },\n\t\t\t{ \"data\": \"office\" },\n\t\t\t{ \"data\": \"extn\" },\n\t\t\t{ \"data\": \"start_date\" },\n\t\t\t{ \"data\": \"salary\" }\n\t\t],\n\t\tdeferRender: true\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Ajax loaded data</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This TableTools example shows DataTables using its ability to <a href=\"//datatables.net/manual/data#Objects\">Ajax load object based data</a> and operate in\n\t\t\t\texactly the same manner as when the data is read directly from the document.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Extn.</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T&lt;&quot;clear&quot;&gt;lfrtip',\n\t\t&quot;ajax&quot;: &quot;../../../../examples/ajax/data/objects.txt&quot;,\n\t\t&quot;columns&quot;: [\n\t\t\t{ &quot;data&quot;: &quot;name&quot; },\n\t\t\t{ &quot;data&quot;: &quot;position&quot; },\n\t\t\t{ &quot;data&quot;: &quot;office&quot; },\n\t\t\t{ &quot;data&quot;: &quot;extn&quot; },\n\t\t\t{ &quot;data&quot;: &quot;start_date&quot; },\n\t\t\t{ &quot;data&quot;: &quot;salary&quot; }\n\t\t],\n\t\tdeferRender: true\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/alter_buttons.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Button arrangement</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T<\"clear\">lfrtip',\n\t\ttableTools: {\n\t\t\t\"aButtons\": [ \"copy\", \"print\" ]\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Button arrangement</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>TableTools makes it very simple to arrange the buttons in the toolbar as you see fit. Using the <code>aButtons</code> parameter you can use any of the <a href=\n\t\t\t\t\"http://datatables.net/extensions/tabletools/buttons\">predefined buttons</a> or <a href=\"http://datatables.net/extensions/tabletools/button_options\">customised\n\t\t\t\tbuttons</a>. The example below shows how TableTools can be initialised to provide only the 'copy-to-clipboard' and 'print view' options (i.e. no save to local file\n\t\t\t\toption is available).</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T&lt;&quot;clear&quot;&gt;lfrtip',\n\t\ttableTools: {\n\t\t\t&quot;aButtons&quot;: [ &quot;copy&quot;, &quot;print&quot; ]\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/bootstrap.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Bootstrap styling</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../Plugins/integration/bootstrap/3/dataTables.bootstrap.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\tbody { font-size: 140%; }\n\tdiv.DTTT { margin-bottom: 0.5em; float: right; }\n\tdiv.dataTables_wrapper { clear: both; }\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../Plugins/integration/bootstrap/3/dataTables.bootstrap.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\tvar tt = new $.fn.dataTable.TableTools( table );\n\n\t$( tt.fnContainer() ).insertBefore('div.dataTables_wrapper');\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Bootstrap styling</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p><a href=\"http://twitter.github.com/bootstrap/\">Twitter Bootstrap</a> is a very powerful design framework for allowing you to very quickly create applications\n\t\t\t\twith a unified look and feel. <a href=\"http://datatables.net/manual/styling/bootstrap\">DataTables integrates well</a> with Bootstrap, and so does TableTools.</p>\n\n\t\t\t\t<p>This example shows the default Bootstrap theme being used with a Bootstrap styled DataTable. The <a href=\"new_init.html\"><code>new</code></a> form of\n\t\t\t\tinitialising TableTools is used here, as the Bootstrap integration uses a complex <a href=\"//datatables.net/reference/option/dom\"><code class=\"option\" title=\n\t\t\t\t\"DataTables initialisation option\">dom<span>DT</span></code></a> option (it is possible to provide a custom <a href=\n\t\t\t\t\"//datatables.net/reference/option/dom\"><code class=\"option\" title=\"DataTables initialisation option\">dom<span>DT</span></code></a> option if you want to, this is\n\t\t\t\tjust for simplicity!).</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"table table-striped table-bordered\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\tvar tt = new $.fn.dataTable.TableTools( table );\n\n\t$( tt.fnContainer() ).insertBefore('div.dataTables_wrapper');\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../Plugins/integration/bootstrap/3/dataTables.bootstrap.js\">../../Plugins/integration/bootstrap/3/dataTables.bootstrap.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">body { font-size: 140%; }\n\tdiv.DTTT { margin-bottom: 0.5em; float: right; }\n\tdiv.dataTables_wrapper { clear: both; }</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css\">//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../Plugins/integration/bootstrap/3/dataTables.bootstrap.css\">../../Plugins/integration/bootstrap/3/dataTables.bootstrap.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/button_text.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Custom button text</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\t\"dom\": 'T<\"clear\">lfrtip',\n\t\t\"tableTools\": {\n\t\t\t\"aButtons\": [\n\t\t\t\t{\n\t\t\t\t\t\"sExtends\": \"copy\",\n\t\t\t\t\t\"sButtonText\": \"Copy to clipboard\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"sExtends\": \"csv\",\n\t\t\t\t\t\"sButtonText\": \"Save to CSV\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"sExtends\": \"xls\",\n\t\t\t\t\t\"oSelectorOpts\": {\n\t\t\t\t\t\tpage: 'current'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Custom button text</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>You may wish to set your own text for the buttons in the TableTools toolbar, rather than relying on the default built-in text. This is done by overriding the\n\t\t\t\t<code>sButtonText</code> parameter of whatever button you wish to alter. The way TableTools allows you to alter a predefined button is by 'extending' it (using the\n\t\t\t\t<code>sExtends</code> parameter) and then setting the overriding parameter.</p>\n\n\t\t\t\t<p>A full list of the parameters which can be used is <a href=\"http://datatables.net/extensions/tabletools/button_options\">available on the DataTables.net\n\t\t\t\tweb-site</a>. This example shows how to set the button text as required.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\t&quot;dom&quot;: 'T&lt;&quot;clear&quot;&gt;lfrtip',\n\t\t&quot;tableTools&quot;: {\n\t\t\t&quot;aButtons&quot;: [\n\t\t\t\t{\n\t\t\t\t\t&quot;sExtends&quot;: &quot;copy&quot;,\n\t\t\t\t\t&quot;sButtonText&quot;: &quot;Copy to clipboard&quot;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t&quot;sExtends&quot;: &quot;csv&quot;,\n\t\t\t\t\t&quot;sButtonText&quot;: &quot;Save to CSV&quot;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t&quot;sExtends&quot;: &quot;xls&quot;,\n\t\t\t\t\t&quot;oSelectorOpts&quot;: {\n\t\t\t\t\t\tpage: 'current'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/collection.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Button collections</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\t\"dom\": 'T<\"clear\">lfrtip',\n\t\t\"tableTools\": {\n\t\t\t\"aButtons\": [\n\t\t\t\t\"copy\",\n\t\t\t\t\"print\",\n\t\t\t\t{\n\t\t\t\t\t\"sExtends\":    \"collection\",\n\t\t\t\t\t\"sButtonText\": \"Save\",\n\t\t\t\t\t\"aButtons\":    [ \"csv\", \"xls\", \"pdf\" ]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Button collections</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>TableTools provides the ability to group buttons into a hidden drop down list, which is activated by clicking on a top-level button. This is achieved by\n\t\t\t\textending the 'collection' predefined button type and setting it's <code>aButtons</code> parameter with the same options as the top level buttons (note that you\n\t\t\t\tcannot currently use a collection within a collection).</p>\n\n\t\t\t\t<p>The example below shows the file save buttons grouped into a collection, while the copy and print buttons are left on the top level.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\t&quot;dom&quot;: 'T&lt;&quot;clear&quot;&gt;lfrtip',\n\t\t&quot;tableTools&quot;: {\n\t\t\t&quot;aButtons&quot;: [\n\t\t\t\t&quot;copy&quot;,\n\t\t\t\t&quot;print&quot;,\n\t\t\t\t{\n\t\t\t\t\t&quot;sExtends&quot;:    &quot;collection&quot;,\n\t\t\t\t\t&quot;sButtonText&quot;: &quot;Save&quot;,\n\t\t\t\t\t&quot;aButtons&quot;:    [ &quot;csv&quot;, &quot;xls&quot;, &quot;pdf&quot; ]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/defaults.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Defaults</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$.fn.dataTable.TableTools.defaults.aButtons = [ \"copy\", \"csv\", \"xls\" ];\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T<\"clear\">lfrtip'\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Defaults</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>TableTools provides the ability to override the default initialisation parameters that are used when creating a new instance. This this particularly useful if\n\t\t\t\tyou have multiple tables which you want to have the same TableTools behaviour - rather than declaring the structure multiple times, you can just set the defaults\n\t\t\t\tonce. This example shows how to alter the default buttons.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$.fn.dataTable.TableTools.defaults.aButtons = [ &quot;copy&quot;, &quot;csv&quot;, &quot;xls&quot; ];\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T&lt;&quot;clear&quot;&gt;lfrtip'\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\n\t<title>TableTools examples - TableTools examples</title>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>TableTools examples</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>TableTools is a plug-in for the DataTables HTML table enhancer, which adds a highly customisable button toolbar to a DataTable. Key features include:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li>Copy to clipboard</li>\n\t\t\t\t\t<li>Save table data as CSV, XLS or PDF files</li>\n\t\t\t\t\t<li>Print view for clean printing</li>\n\t\t\t\t\t<li>Row selection options</li>\n\t\t\t\t\t<li>Easy use predefined buttons</li>\n\t\t\t\t\t<li>Simple customisation of buttons</li>\n\t\t\t\t\t<li>Well defined API for advanced control</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/jqueryui.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - jQuery UI styling</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../Plugins/integration/jqueryui/dataTables.jqueryui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../Plugins/integration/jqueryui/dataTables.jqueryui.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tlengthChange: false\n\t} );\n\n\tvar tt = new $.fn.dataTable.TableTools( table );\n\t$( tt.fnContainer() ).insertBefore('div.dataTables_filter');\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>jQuery UI styling</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows the TableTools buttons being styled by jQuery UI ThemeRoller. This allows the TableTools buttons to have the same look-and-feel as other\n\t\t\t\tbuttons on your site if you are already using jQuery UI.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable( {\n\t\tlengthChange: false\n\t} );\n\n\tvar tt = new $.fn.dataTable.TableTools( table );\n\t$( tt.fnContainer() ).insertBefore('div.dataTables_filter');\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../Plugins/integration/jqueryui/dataTables.jqueryui.js\">../../Plugins/integration/jqueryui/dataTables.jqueryui.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css\">//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../../Plugins/integration/jqueryui/dataTables.jqueryui.css\">../../Plugins/integration/jqueryui/dataTables.jqueryui.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/multi_instance.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Multiple toolbars</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T<\"clear\">lfrtip<\"clear spacer\">T',\n\t\ttableTools: {\n\t\t\t\"aButtons\": [ \"copy\", \"print\" ]\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Multiple toolbars</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Like all DataTables control elements, TableTools can have multiple instances specified in the <a href=\"//datatables.net/reference/option/dom\"><code class=\n\t\t\t\t\"option\" title=\"DataTables initialisation option\">dom<span>DT</span></code></a> parameter of DataTables. This will create two TableTools toolbars next to the\n\t\t\t\ttable, providing the same functions.</p>\n\n\t\t\t\t<p>An example of when this might be useful is to show the toolbar both above and below the table - as is done in this example.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T&lt;&quot;clear&quot;&gt;lfrtip&lt;&quot;clear spacer&quot;&gt;T',\n\t\ttableTools: {\n\t\t\t&quot;aButtons&quot;: [ &quot;copy&quot;, &quot;print&quot; ]\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/multiple_tables.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Multiple tables</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T<\"clear\">lfrtip'\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Multiple tables</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows how multiple tables can be initialised with DataTables and TableTools in a single call to the <code>$().DataTable()</code> function.\n\t\t\t\tBasically it works as you would expect - no special considerations need be made!</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<table id=\"\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T&lt;&quot;clear&quot;&gt;lfrtip'\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/new_init.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Initialisation with `new`</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\tvar tt = new $.fn.dataTable.TableTools( table, {\n\t\tsRowSelect: 'single'\n\t} );\n\n\t$( tt.fnContainer() ).insertAfter('div.info');\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Initialisation with `new`</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>Typically when working with TableTools, the initialisation and insertion into the DOM will be done automatically by DataTables, through the use of the <a href=\n\t\t\t\t\"//datatables.net/reference/option/dom\"><code class=\"option\" title=\"DataTables initialisation option\">dom<span>DT</span></code></a> parameter. However, it is also\n\t\t\t\tpossible to initialise TableTools manually as shown in the example below using <code>new $.fn.dataTable.TableTools();</code>. The constructor for TableTools takes\n\t\t\t\ttwo parameters:</p>\n\n\t\t\t\t<ol class=\"markdown\">\n\t\t\t\t\t<li>The DataTable that the newly created TableTools instance should attach to</li>\n\t\t\t\t\t<li>Optionally - A list of options</li>\n\t\t\t\t</ol>\n\n\t\t\t\t<p>Once initialised you can insert the TableTools tool bar node anywhere you wish into the DOM using the <code>fnContainer()</code> API method to get the node.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\tvar table = $('#example').DataTable();\n\tvar tt = new $.fn.dataTable.TableTools( table, {\n\t\tsRowSelect: 'single'\n\t} );\n\n\t$( tt.fnContainer() ).insertAfter('div.info');\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/pdf_message.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - PDF message</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T<\"clear\">lfrtip',\n\t\ttableTools: {\n\t\t\t\"aButtons\": [\n\t\t\t\t\"copy\",\n\t\t\t\t\"csv\",\n\t\t\t\t\"xls\",\n\t\t\t\t{\n\t\t\t\t\t\"sExtends\": \"pdf\",\n\t\t\t\t\t\"sPdfOrientation\": \"landscape\",\n\t\t\t\t\t\"sPdfMessage\": \"Your custom message would go here.\"\n\t\t\t\t},\n\t\t\t\t\"print\"\n\t\t\t]\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>PDF message</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows how you can add a message to the saved PDF using the <code>sPdfMessage</code> parameter. It also shows that the orientation of the output PDF\n\t\t\t\tcan be changed to landscape which is useful if you have a lot of columns.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T&lt;&quot;clear&quot;&gt;lfrtip',\n\t\ttableTools: {\n\t\t\t&quot;aButtons&quot;: [\n\t\t\t\t&quot;copy&quot;,\n\t\t\t\t&quot;csv&quot;,\n\t\t\t\t&quot;xls&quot;,\n\t\t\t\t{\n\t\t\t\t\t&quot;sExtends&quot;: &quot;pdf&quot;,\n\t\t\t\t\t&quot;sPdfOrientation&quot;: &quot;landscape&quot;,\n\t\t\t\t\t&quot;sPdfMessage&quot;: &quot;Your custom message would go here.&quot;\n\t\t\t\t},\n\t\t\t\t&quot;print&quot;\n\t\t\t]\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/plug-in.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Plug-in button types</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$.fn.dataTable.TableTools.buttons.copy_to_div = $.extend(\n\ttrue,\n\t{},\n\t$.fn.dataTable.TableTools.buttonBase,\n\t{\n\t\t\"sNewLine\":    \"<br>\",\n\t\t\"sButtonText\": \"Copy to element\",\n\t\t\"target\":      \"\",\n\t\t\"fnClick\": function( button, conf ) {\n\t\t\t$(conf.target).html( this.fnGetTableData(conf) );\n\t\t}\n\t}\n);\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T<\"clear\">lfrtip',\n\t\ttableTools: {\n\t\t\t\"aButtons\": [ {\n\t\t\t\t\"sExtends\":    \"copy_to_div\",\n\t\t\t\t\"sButtonText\": \"Copy to HTML\",\n\t\t\t\t\"target\":      \"#copy\"\n\t\t\t} ]\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Plug-in button types</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows now a plug-in button type can be created for TableTools. Button types are attached to the <code>$.fn.dataTable.TableTools.buttons</code>\n\t\t\t\tobject and extend <code>$.fn.dataTable.TableTools.buttonBase</code>. All of the <a href=\"//datatables.net/extensions/tabletools/button_options\">button options\n\t\t\t\tdefined in the documentation</a> are available and can be overridden as required. Finally to use the button simply include its name in the <code>aButtons</code>\n\t\t\t\tarray or use it as a button extender (<code>sExtends</code>).</p>\n\n\t\t\t\t<p>This example shows a button which will simply get the data contents of a table and set that as the contents of another element.</p>\n\t\t\t</div>\n\n\t\t\t<div id=\"copy\" class=\"box\" style=\"height: 100px; overflow: auto\">\n\t\t\t\tCopy output will go here\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$.fn.dataTable.TableTools.buttons.copy_to_div = $.extend(\n\ttrue,\n\t{},\n\t$.fn.dataTable.TableTools.buttonBase,\n\t{\n\t\t&quot;sNewLine&quot;:    &quot;&lt;br&gt;&quot;,\n\t\t&quot;sButtonText&quot;: &quot;Copy to element&quot;,\n\t\t&quot;target&quot;:      &quot;&quot;,\n\t\t&quot;fnClick&quot;: function( button, conf ) {\n\t\t\t$(conf.target).html( this.fnGetTableData(conf) );\n\t\t}\n\t}\n);\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T&lt;&quot;clear&quot;&gt;lfrtip',\n\t\ttableTools: {\n\t\t\t&quot;aButtons&quot;: [ {\n\t\t\t\t&quot;sExtends&quot;:    &quot;copy_to_div&quot;,\n\t\t\t\t&quot;sButtonText&quot;: &quot;Copy to HTML&quot;,\n\t\t\t\t&quot;target&quot;:      &quot;#copy&quot;\n\t\t\t} ]\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/select_column.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Row selection - row selector on specific cells</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.0.3/css/font-awesome.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\ttr td:first-child {\n\t\ttext-align: center;\n\t}\n\n\ttr td:first-child:before {\n\t\tcontent: \"\\f096\"; /* fa-square-o */\n\t\tfont-family: FontAwesome;\n\t}\n\n\ttr.selected td:first-child:before {\n\t\tcontent: \"\\f046\"; /* fa-check-square-o */\n\t}\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tajax: \"../../../examples/ajax/data/objects.txt\",\n\t\tcolumns: [\n\t\t\t{ data: null, defaultContent: '', orderable: false },\n\t\t\t{ data: 'name' },\n\t\t\t{ data: 'position' },\n\t\t\t{ data: 'office' },\n\t\t\t{ data: 'extn' },\n\t\t\t{ data: 'start_date' },\n\t\t\t{ data: 'salary' }\n\t\t],\n\t\torder: [ 1, 'asc' ],\n\t\tdom: 'T<\"clear\">lfrtip',\n\t\ttableTools: {\n\t\t\tsRowSelect:   'os',\n\t\t\tsRowSelector: 'td:first-child',\n\t\t\taButtons:     [ 'select_all', 'select_none' ]\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Row selection - row selector on specific cells</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>By default, TableTools' row selector option will register a row selection click on any part of the row. Although this is often desirable, you might wish at\n\t\t\t\ttimes to limit the row selection to just a single column, or other elements in the row. This might be useful, for example, with <a href=\n\t\t\t\t\"//editor.datatables.net\">Editor's</a> inline editing, so you don't select the row on click of a cell that is to be edited.</p>\n\n\t\t\t\t<p>The <code>sRowSelector</code> method provides this ability, allowing a custom jQuery selector to be passed in. TableTools will use the parent row of any element\n\t\t\t\tthat is selected by the end user.</p>\n\n\t\t\t\t<p>In this case, the row selector is attached to the cells in the first column of the table, and <a href=\"http://fortawesome.github.io/Font-Awesome\">Font\n\t\t\t\tAwesome</a> is used to display a checkbox indicating the selection state of the row, in addition to the row background colouring.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>\n\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tajax: &quot;../../../examples/ajax/data/objects.txt&quot;,\n\t\tcolumns: [\n\t\t\t{ data: null, defaultContent: '', orderable: false },\n\t\t\t{ data: 'name' },\n\t\t\t{ data: 'position' },\n\t\t\t{ data: 'office' },\n\t\t\t{ data: 'extn' },\n\t\t\t{ data: 'start_date' },\n\t\t\t{ data: 'salary' }\n\t\t],\n\t\torder: [ 1, 'asc' ],\n\t\tdom: 'T&lt;&quot;clear&quot;&gt;lfrtip',\n\t\ttableTools: {\n\t\t\tsRowSelect:   'os',\n\t\t\tsRowSelector: 'td:first-child',\n\t\t\taButtons:     [ 'select_all', 'select_none' ]\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\">tr td:first-child {\n\t\ttext-align: center;\n\t}\n\n\ttr td:first-child:before {\n\t\tcontent: &quot;\\f096&quot;; /* fa-square-o */\n\t\tfont-family: FontAwesome;\n\t}\n\n\ttr.selected td:first-child:before {\n\t\tcontent: &quot;\\f046&quot;; /* fa-check-square-o */\n\t}</code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t\t<li><a href=\n\t\t\t\t\t\t\"//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.0.3/css/font-awesome.css\">//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.0.3/css/font-awesome.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/select_multi.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Row selection - multi-row select</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T<\"clear\">lfrtip',\n\t\ttableTools: {\n\t\t\t\"sRowSelect\": \"multi\",\n\t\t\t\"aButtons\": [ \"select_all\", \"select_none\" ]\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Row selection - multi-row select</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>As well as providing a button toolbar, TableTools provides everything needed to have selectable rows in the table. TableTools has four row selection modes of\n\t\t\t\toperation:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li><code>none</code> - Default, where no user row selection options are available</li>\n\t\t\t\t\t<li><code>single</code> - A single row can be selected</li>\n\t\t\t\t\t<li><code>multi</code> - Multiple rows can be selected simply by clicking on the rows</li>\n\t\t\t\t\t<li><code>os</code> - Operating System like selection where you can use the shift and ctrl / cmd keys on your keyboard to add / remove rows from the\n\t\t\t\t\tselection.</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<p>This example shows the <code>multi</code> select option. There are also a number of <a href=\"http://datatables.net/extras/tabletools/buttons\">pre-defined\n\t\t\t\tbuttons</a> to provide functions such as select-all and select-none, as shown in this example.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T&lt;&quot;clear&quot;&gt;lfrtip',\n\t\ttableTools: {\n\t\t\t&quot;sRowSelect&quot;: &quot;multi&quot;,\n\t\t\t&quot;aButtons&quot;: [ &quot;select_all&quot;, &quot;select_none&quot; ]\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/select_os.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Row selection - operating system style</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T<\"clear\">lfrtip',\n\t\ttableTools: {\n\t\t\t\"sRowSelect\": \"os\",\n\t\t\t\"aButtons\": [ \"select_all\", \"select_none\" ]\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Row selection - operating system style</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>As well as providing a button toolbar, TableTools provides everything needed to have selectable rows in the table. TableTools has four row selection modes of\n\t\t\t\toperation:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li><code>none</code> - Default, where no user row selection options are available</li>\n\t\t\t\t\t<li><code>single</code> - A single row can be selected</li>\n\t\t\t\t\t<li><code>multi</code> - Multiple rows can be selected simply by clicking on the rows</li>\n\t\t\t\t\t<li><code>os</code> - Operating System like selection where you can use the shift and ctrl / cmd keys on your keyboard to add / remove rows from the\n\t\t\t\t\tselection.</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<p>This example shows the <code>os</code> select option. Without keyboard interaction a single row can be selected at a time, but multiple rows can be selected in\n\t\t\t\ta range using the shift key, while rows can be added and removed from the selection using the ctrl / cmd key.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T&lt;&quot;clear&quot;&gt;lfrtip',\n\t\ttableTools: {\n\t\t\t&quot;sRowSelect&quot;: &quot;os&quot;,\n\t\t\t&quot;aButtons&quot;: [ &quot;select_all&quot;, &quot;select_none&quot; ]\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/select_single.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Row selection - single row select</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T<\"clear\">lfrtip',\n\t\ttableTools: {\n\t\t\t\"sRowSelect\": \"single\"\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Row selection - single row select</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>As well as providing a button toolbar, TableTools provides everything needed to have selectable rows in the table. TableTools has four row selection modes of\n\t\t\t\toperation:</p>\n\n\t\t\t\t<ul class=\"markdown\">\n\t\t\t\t\t<li><code>none</code> - Default, where no user row selection options are available</li>\n\t\t\t\t\t<li><code>single</code> - A single row can be selected</li>\n\t\t\t\t\t<li><code>multi</code> - Multiple rows can be selected simply by clicking on the rows</li>\n\t\t\t\t\t<li><code>os</code> - Operating System like selection where you can use the shift and ctrl / cmd keys on your keyboard to add / remove rows from the\n\t\t\t\t\tselection.</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<p>This example shows the <code>single</code> select option.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T&lt;&quot;clear&quot;&gt;lfrtip',\n\t\ttableTools: {\n\t\t\t&quot;sRowSelect&quot;: &quot;single&quot;\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/simple.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Basic initialisation</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T<\"clear\">lfrtip'\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Basic initialisation</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>This example shows the basic initialisation of TableTools by simply including the <code class=\"string\" title=\"String\">T</code> option in DataTables' <a href=\n\t\t\t\t\"//datatables.net/reference/option/dom\"><code class=\"option\" title=\"DataTables initialisation option\">dom<span>DT</span></code></a> parameter. This tell DataTables\n\t\t\t\tto insert the TableTools toolbar in that location. Remember to include the Javascript and CSS source files as well!</p>\n\n\t\t\t\t<p>It is worth noting that you might need to <a href=\"swf_path.html\">set the <code>sSwfPath</code> parameter</a> to tell TableTools where to find the SWF file for\n\t\t\t\tcopy and file save.</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T&lt;&quot;clear&quot;&gt;lfrtip'\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/examples/swf_path.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"http://www.datatables.net/favicon.ico\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=2.0\">\n\n\t<title>TableTools example - Setting the SWF path</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../media/css/jquery.dataTables.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/dataTables.tableTools.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/syntax/shCore.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../examples/resources/demo.css\">\n\t<style type=\"text/css\" class=\"init\">\n\n\t</style>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../media/js/jquery.dataTables.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../js/dataTables.tableTools.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/syntax/shCore.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" src=\"../../../examples/resources/demo.js\"></script>\n\t<script type=\"text/javascript\" language=\"javascript\" class=\"init\">\n\n\n$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T<\"clear\">lfrtip',\n\t\ttableTools: {\n\t\t\t\"sSwfPath\": \"../swf/copy_csv_xls_pdf.swf\"\n\t\t}\n\t} );\n} );\n\n\n\t</script>\n</head>\n\n<body class=\"dt-example\">\n\t<div class=\"container\">\n\t\t<section>\n\t\t\t<h1>TableTools example <span>Setting the SWF path</span></h1>\n\n\t\t\t<div class=\"info\">\n\t\t\t\t<p>TableTools uses a Flash SWF file to provide the ability to copy text to the system clipboard and save files locally. TableTools must be able to load the SWF\n\t\t\t\tfile in order to provide these facilities. If you aren't using the same directory structure as the TableTools package, you will need to set the\n\t\t\t\t<code>sSwfPath</code> TableTools parameter, as shown in this example.</p>\n\n\t\t\t\t<p>Note that TableTools ships with two different SWF files - the only difference between them is that one of them provides the ability to save PDF files while the\n\t\t\t\tother doesn't. The trade off is that the PDF capable file is significantly larger in size (56K v 2K).</p>\n\t\t\t</div>\n\n\t\t\t<table id=\"example\" class=\"display\" cellspacing=\"0\" width=\"100%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\n\t\t\t\t<tfoot>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Position</th>\n\t\t\t\t\t\t<th>Office</th>\n\t\t\t\t\t\t<th>Age</th>\n\t\t\t\t\t\t<th>Start date</th>\n\t\t\t\t\t\t<th>Salary</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</tfoot>\n\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tiger Nixon</td>\n\t\t\t\t\t\t<td>System Architect</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2011/04/25</td>\n\t\t\t\t\t\t<td>$320,800</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Garrett Winters</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2011/07/25</td>\n\t\t\t\t\t\t<td>$170,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Ashton Cox</td>\n\t\t\t\t\t\t<td>Junior Technical Author</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2009/01/12</td>\n\t\t\t\t\t\t<td>$86,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cedric Kelly</td>\n\t\t\t\t\t\t<td>Senior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2012/03/29</td>\n\t\t\t\t\t\t<td>$433,060</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Airi Satou</td>\n\t\t\t\t\t\t<td>Accountant</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>33</td>\n\t\t\t\t\t\t<td>2008/11/28</td>\n\t\t\t\t\t\t<td>$162,700</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brielle Williamson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2012/12/02</td>\n\t\t\t\t\t\t<td>$372,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Herrod Chandler</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2012/08/06</td>\n\t\t\t\t\t\t<td>$137,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Rhona Davidson</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t<td>2010/10/14</td>\n\t\t\t\t\t\t<td>$327,900</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Colleen Hurst</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>39</td>\n\t\t\t\t\t\t<td>2009/09/15</td>\n\t\t\t\t\t\t<td>$205,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sonya Frost</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2008/12/13</td>\n\t\t\t\t\t\t<td>$103,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jena Gaines</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2008/12/19</td>\n\t\t\t\t\t\t<td>$90,560</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Quinn Flynn</td>\n\t\t\t\t\t\t<td>Support Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2013/03/03</td>\n\t\t\t\t\t\t<td>$342,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Charde Marshall</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>36</td>\n\t\t\t\t\t\t<td>2008/10/16</td>\n\t\t\t\t\t\t<td>$470,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Haley Kennedy</td>\n\t\t\t\t\t\t<td>Senior Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2012/12/18</td>\n\t\t\t\t\t\t<td>$313,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Tatyana Fitzpatrick</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>19</td>\n\t\t\t\t\t\t<td>2010/03/17</td>\n\t\t\t\t\t\t<td>$385,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Silva</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>66</td>\n\t\t\t\t\t\t<td>2012/11/27</td>\n\t\t\t\t\t\t<td>$198,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Paul Byrd</td>\n\t\t\t\t\t\t<td>Chief Financial Officer (CFO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2010/06/09</td>\n\t\t\t\t\t\t<td>$725,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gloria Little</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>59</td>\n\t\t\t\t\t\t<td>2009/04/10</td>\n\t\t\t\t\t\t<td>$237,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bradley Greer</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2012/10/13</td>\n\t\t\t\t\t\t<td>$132,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Dai Rios</td>\n\t\t\t\t\t\t<td>Personnel Lead</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t<td>2012/09/26</td>\n\t\t\t\t\t\t<td>$217,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jenette Caldwell</td>\n\t\t\t\t\t\t<td>Development Lead</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2011/09/03</td>\n\t\t\t\t\t\t<td>$345,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Yuri Berry</td>\n\t\t\t\t\t\t<td>Chief Marketing Officer (CMO)</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t<td>2009/06/25</td>\n\t\t\t\t\t\t<td>$675,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Caesar Vance</td>\n\t\t\t\t\t\t<td>Pre-Sales Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2011/12/12</td>\n\t\t\t\t\t\t<td>$106,450</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Doris Wilder</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>23</td>\n\t\t\t\t\t\t<td>2010/09/20</td>\n\t\t\t\t\t\t<td>$85,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Angelica Ramos</td>\n\t\t\t\t\t\t<td>Chief Executive Officer (CEO)</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/10/09</td>\n\t\t\t\t\t\t<td>$1,200,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Joyce</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>42</td>\n\t\t\t\t\t\t<td>2010/12/22</td>\n\t\t\t\t\t\t<td>$92,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Chang</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2010/11/14</td>\n\t\t\t\t\t\t<td>$357,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Brenden Wagner</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>28</td>\n\t\t\t\t\t\t<td>2011/06/07</td>\n\t\t\t\t\t\t<td>$206,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Fiona Green</td>\n\t\t\t\t\t\t<td>Chief Operating Officer (COO)</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>48</td>\n\t\t\t\t\t\t<td>2010/03/11</td>\n\t\t\t\t\t\t<td>$850,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shou Itou</td>\n\t\t\t\t\t\t<td>Regional Marketing</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t<td>2011/08/14</td>\n\t\t\t\t\t\t<td>$163,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michelle House</td>\n\t\t\t\t\t\t<td>Integration Specialist</td>\n\t\t\t\t\t\t<td>Sidney</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2011/06/02</td>\n\t\t\t\t\t\t<td>$95,400</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Suki Burks</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>53</td>\n\t\t\t\t\t\t<td>2009/10/22</td>\n\t\t\t\t\t\t<td>$114,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Prescott Bartlett</td>\n\t\t\t\t\t\t<td>Technical Author</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/05/07</td>\n\t\t\t\t\t\t<td>$145,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Gavin Cortez</td>\n\t\t\t\t\t\t<td>Team Leader</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>22</td>\n\t\t\t\t\t\t<td>2008/10/26</td>\n\t\t\t\t\t\t<td>$235,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Martena Mccray</td>\n\t\t\t\t\t\t<td>Post-Sales support</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/03/09</td>\n\t\t\t\t\t\t<td>$324,050</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Unity Butler</td>\n\t\t\t\t\t\t<td>Marketing Designer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/12/09</td>\n\t\t\t\t\t\t<td>$85,675</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Howard Hatfield</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/12/16</td>\n\t\t\t\t\t\t<td>$164,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hope Fuentes</td>\n\t\t\t\t\t\t<td>Secretary</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>41</td>\n\t\t\t\t\t\t<td>2010/02/12</td>\n\t\t\t\t\t\t<td>$109,850</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Vivian Harrell</td>\n\t\t\t\t\t\t<td>Financial Controller</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>62</td>\n\t\t\t\t\t\t<td>2009/02/14</td>\n\t\t\t\t\t\t<td>$452,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Timothy Mooney</td>\n\t\t\t\t\t\t<td>Office Manager</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2008/12/11</td>\n\t\t\t\t\t\t<td>$136,200</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jackson Bradshaw</td>\n\t\t\t\t\t\t<td>Director</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>65</td>\n\t\t\t\t\t\t<td>2008/09/26</td>\n\t\t\t\t\t\t<td>$645,750</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Olivia Liang</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2011/02/03</td>\n\t\t\t\t\t\t<td>$234,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Bruno Nash</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>38</td>\n\t\t\t\t\t\t<td>2011/05/03</td>\n\t\t\t\t\t\t<td>$163,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Sakura Yamamoto</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>Tokyo</td>\n\t\t\t\t\t\t<td>37</td>\n\t\t\t\t\t\t<td>2009/08/19</td>\n\t\t\t\t\t\t<td>$139,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Thor Walton</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>61</td>\n\t\t\t\t\t\t<td>2013/08/11</td>\n\t\t\t\t\t\t<td>$98,540</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Finn Camacho</td>\n\t\t\t\t\t\t<td>Support Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2009/07/07</td>\n\t\t\t\t\t\t<td>$87,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Serge Baldwin</td>\n\t\t\t\t\t\t<td>Data Coordinator</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>64</td>\n\t\t\t\t\t\t<td>2012/04/09</td>\n\t\t\t\t\t\t<td>$138,575</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zenaida Frank</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>63</td>\n\t\t\t\t\t\t<td>2010/01/04</td>\n\t\t\t\t\t\t<td>$125,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Zorita Serrano</td>\n\t\t\t\t\t\t<td>Software Engineer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>56</td>\n\t\t\t\t\t\t<td>2012/06/01</td>\n\t\t\t\t\t\t<td>$115,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jennifer Acosta</td>\n\t\t\t\t\t\t<td>Junior Javascript Developer</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>43</td>\n\t\t\t\t\t\t<td>2013/02/01</td>\n\t\t\t\t\t\t<td>$75,650</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Cara Stevens</td>\n\t\t\t\t\t\t<td>Sales Assistant</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>46</td>\n\t\t\t\t\t\t<td>2011/12/06</td>\n\t\t\t\t\t\t<td>$145,600</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Hermione Butler</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>47</td>\n\t\t\t\t\t\t<td>2011/03/21</td>\n\t\t\t\t\t\t<td>$356,250</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Lael Greer</td>\n\t\t\t\t\t\t<td>Systems Administrator</td>\n\t\t\t\t\t\t<td>London</td>\n\t\t\t\t\t\t<td>21</td>\n\t\t\t\t\t\t<td>2009/02/27</td>\n\t\t\t\t\t\t<td>$103,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Jonas Alexander</td>\n\t\t\t\t\t\t<td>Developer</td>\n\t\t\t\t\t\t<td>San Francisco</td>\n\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t<td>2010/07/14</td>\n\t\t\t\t\t\t<td>$86,500</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Shad Decker</td>\n\t\t\t\t\t\t<td>Regional Director</td>\n\t\t\t\t\t\t<td>Edinburgh</td>\n\t\t\t\t\t\t<td>51</td>\n\t\t\t\t\t\t<td>2008/11/13</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Michael Bruce</td>\n\t\t\t\t\t\t<td>Javascript Developer</td>\n\t\t\t\t\t\t<td>Singapore</td>\n\t\t\t\t\t\t<td>29</td>\n\t\t\t\t\t\t<td>2011/06/27</td>\n\t\t\t\t\t\t<td>$183,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Donna Snider</td>\n\t\t\t\t\t\t<td>Customer Support</td>\n\t\t\t\t\t\t<td>New York</td>\n\t\t\t\t\t\t<td>27</td>\n\t\t\t\t\t\t<td>2011/01/25</td>\n\t\t\t\t\t\t<td>$112,000</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\n\t\t\t<ul class=\"tabs\">\n\t\t\t\t<li class=\"active\">Javascript</li>\n\t\t\t\t<li>HTML</li>\n\t\t\t\t<li>CSS</li>\n\t\t\t\t<li>Ajax</li>\n\t\t\t\t<li>Server-side script</li>\n\t\t\t</ul>\n\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"js\">\n\t\t\t\t\t<p>The Javascript shown below is used to initialise the table shown in this example:</p><code class=\"multiline language-js\">$(document).ready(function() {\n\t$('#example').DataTable( {\n\t\tdom: 'T&lt;&quot;clear&quot;&gt;lfrtip',\n\t\ttableTools: {\n\t\t\t&quot;sSwfPath&quot;: &quot;../swf/copy_csv_xls_pdf.swf&quot;\n\t\t}\n\t} );\n} );</code>\n\n\t\t\t\t\t<p>In addition to the above code, the following Javascript library files are loaded for use in this example:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.js\">../../../media/js/jquery.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../../../media/js/jquery.dataTables.js\">../../../media/js/jquery.dataTables.js</a></li>\n\t\t\t\t\t\t<li><a href=\"../js/dataTables.tableTools.js\">../js/dataTables.tableTools.js</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<p>The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"css\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The\n\t\t\t\t\t\tadditional CSS used is shown below:</p><code class=\"multiline language-css\"></code>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p>The following CSS library files are loaded for use in this example to provide the styling of the table:</p>\n\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"../../../media/css/jquery.dataTables.css\">../../../media/css/jquery.dataTables.css</a></li>\n\t\t\t\t\t\t<li><a href=\"../css/dataTables.tableTools.css\">../css/dataTables.tableTools.css</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"ajax\">\n\t\t\t\t\t<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is\n\t\t\t\t\tloaded.</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"php\">\n\t\t\t\t\t<p>The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side\n\t\t\t\t\tprocessing scripts can be written in any language, using <a href=\"//datatables.net/manual/server-side\">the protocol described in the DataTables\n\t\t\t\t\tdocumentation</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t<section>\n\t\t<div class=\"footer\">\n\t\t\t<div class=\"gradient\"></div>\n\n\t\t\t<div class=\"liner\">\n\t\t\t\t<h2>Other examples</h2>\n\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<div class=\"toc-group\">\n\t\t\t\t\t\t<h3><a href=\"./index.html\">Examples</a></h3>\n\t\t\t\t\t\t<ul class=\"toc active\">\n\t\t\t\t\t\t\t<li><a href=\"./simple.html\">Basic initialisation</a></li>\n\t\t\t\t\t\t\t<li class=\"active\"><a href=\"./swf_path.html\">Setting the SWF path</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./new_init.html\">Initialisation with `new`</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./defaults.html\">Defaults</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_single.html\">Row selection - single row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_multi.html\">Row selection - multi-row select</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_os.html\">Row selection - operating system style</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./select_column.html\">Row selection - row selector on specific cells</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multiple_tables.html\">Multiple tables</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./multi_instance.html\">Multiple toolbars</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./collection.html\">Button collections</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./plug-in.html\">Plug-in button types</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./button_text.html\">Custom button text</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./alter_buttons.html\">Button arrangement</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./ajax.html\">Ajax loaded data</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./pdf_message.html\">PDF message</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./bootstrap.html\">Bootstrap styling</a></li>\n\t\t\t\t\t\t\t<li><a href=\"./jqueryui.html\">jQuery UI styling</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"epilogue\">\n\t\t\t\t\t<p>Please refer to the <a href=\"http://www.datatables.net\">DataTables documentation</a> for full information about its API properties and methods.<br>\n\t\t\t\t\tAdditionally, there are a wide range of <a href=\"http://www.datatables.net/extras\">extras</a> and <a href=\"http://www.datatables.net/plug-ins\">plug-ins</a>\n\t\t\t\t\twhich extend the capabilities of DataTables.</p>\n\n\t\t\t\t\t<p class=\"copyright\">DataTables designed and created by <a href=\"http://www.sprymedia.co.uk\">SpryMedia Ltd</a> &#169; 2007-2015<br>\n\t\t\t\t\tDataTables is licensed under the <a href=\"http://www.datatables.net/mit\">MIT license</a>.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</body>\n</html>"
  },
  {
    "path": "public/adminlte/plugins/datatables/extensions/TableTools/js/dataTables.tableTools.js",
    "content": "/*! TableTools 2.2.4\n * 2009-2015 SpryMedia Ltd - datatables.net/license\n *\n * ZeroClipboard 1.0.4\n * Author: Joseph Huckaby - MIT licensed\n */\n\n/**\n * @summary     TableTools\n * @description Tools and buttons for DataTables\n * @version     2.2.4\n * @file        dataTables.tableTools.js\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     www.sprymedia.co.uk/contact\n * @copyright   Copyright 2009-2015 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n\n/* Global scope for TableTools for backwards compatibility.\n * Will be removed in 2.3\n */\nvar TableTools;\n\n(function(window, document, undefined) {\n\n\nvar factory = function( $, DataTable ) {\n\"use strict\";\n\n\n//include ZeroClipboard.js\n/* ZeroClipboard 1.0.4\n * Author: Joseph Huckaby\n */\n\nvar ZeroClipboard_TableTools = {\n\n\tversion: \"1.0.4-TableTools2\",\n\tclients: {}, // registered upload clients on page, indexed by id\n\tmoviePath: '', // URL to movie\n\tnextId: 1, // ID of next movie\n\n\t$: function(thingy) {\n\t\t// simple DOM lookup utility function\n\t\tif (typeof(thingy) == 'string') {\n\t\t\tthingy = document.getElementById(thingy);\n\t\t}\n\t\tif (!thingy.addClass) {\n\t\t\t// extend element with a few useful methods\n\t\t\tthingy.hide = function() { this.style.display = 'none'; };\n\t\t\tthingy.show = function() { this.style.display = ''; };\n\t\t\tthingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };\n\t\t\tthingy.removeClass = function(name) {\n\t\t\t\tthis.className = this.className.replace( new RegExp(\"\\\\s*\" + name + \"\\\\s*\"), \" \").replace(/^\\s+/, '').replace(/\\s+$/, '');\n\t\t\t};\n\t\t\tthingy.hasClass = function(name) {\n\t\t\t\treturn !!this.className.match( new RegExp(\"\\\\s*\" + name + \"\\\\s*\") );\n\t\t\t};\n\t\t}\n\t\treturn thingy;\n\t},\n\n\tsetMoviePath: function(path) {\n\t\t// set path to ZeroClipboard.swf\n\t\tthis.moviePath = path;\n\t},\n\n\tdispatch: function(id, eventName, args) {\n\t\t// receive event from flash movie, send to client\n\t\tvar client = this.clients[id];\n\t\tif (client) {\n\t\t\tclient.receiveEvent(eventName, args);\n\t\t}\n\t},\n\n\tregister: function(id, client) {\n\t\t// register new client to receive events\n\t\tthis.clients[id] = client;\n\t},\n\n\tgetDOMObjectPosition: function(obj) {\n\t\t// get absolute coordinates for dom element\n\t\tvar info = {\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\twidth: obj.width ? obj.width : obj.offsetWidth,\n\t\t\theight: obj.height ? obj.height : obj.offsetHeight\n\t\t};\n\n\t\tif ( obj.style.width !== \"\" ) {\n\t\t\tinfo.width = obj.style.width.replace(\"px\",\"\");\n\t\t}\n\n\t\tif ( obj.style.height !== \"\" ) {\n\t\t\tinfo.height = obj.style.height.replace(\"px\",\"\");\n\t\t}\n\n\t\twhile (obj) {\n\t\t\tinfo.left += obj.offsetLeft;\n\t\t\tinfo.top += obj.offsetTop;\n\t\t\tobj = obj.offsetParent;\n\t\t}\n\n\t\treturn info;\n\t},\n\n\tClient: function(elem) {\n\t\t// constructor for new simple upload client\n\t\tthis.handlers = {};\n\n\t\t// unique ID\n\t\tthis.id = ZeroClipboard_TableTools.nextId++;\n\t\tthis.movieId = 'ZeroClipboard_TableToolsMovie_' + this.id;\n\n\t\t// register client with singleton to receive flash events\n\t\tZeroClipboard_TableTools.register(this.id, this);\n\n\t\t// create movie\n\t\tif (elem) {\n\t\t\tthis.glue(elem);\n\t\t}\n\t}\n};\n\nZeroClipboard_TableTools.Client.prototype = {\n\n\tid: 0, // unique ID for us\n\tready: false, // whether movie is ready to receive events or not\n\tmovie: null, // reference to movie object\n\tclipText: '', // text to copy to clipboard\n\tfileName: '', // default file save name\n\taction: 'copy', // action to perform\n\thandCursorEnabled: true, // whether to show hand cursor, or default pointer cursor\n\tcssEffects: true, // enable CSS mouse effects on dom container\n\thandlers: null, // user event handlers\n\tsized: false,\n\n\tglue: function(elem, title) {\n\t\t// glue to DOM element\n\t\t// elem can be ID or actual DOM element object\n\t\tthis.domElement = ZeroClipboard_TableTools.$(elem);\n\n\t\t// float just above object, or zIndex 99 if dom element isn't set\n\t\tvar zIndex = 99;\n\t\tif (this.domElement.style.zIndex) {\n\t\t\tzIndex = parseInt(this.domElement.style.zIndex, 10) + 1;\n\t\t}\n\n\t\t// find X/Y position of domElement\n\t\tvar box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement);\n\n\t\t// create floating DIV above element\n\t\tthis.div = document.createElement('div');\n\t\tvar style = this.div.style;\n\t\tstyle.position = 'absolute';\n\t\tstyle.left = '0px';\n\t\tstyle.top = '0px';\n\t\tstyle.width = (box.width) + 'px';\n\t\tstyle.height = box.height + 'px';\n\t\tstyle.zIndex = zIndex;\n\n\t\tif ( typeof title != \"undefined\" && title !== \"\" ) {\n\t\t\tthis.div.title = title;\n\t\t}\n\t\tif ( box.width !== 0 && box.height !== 0 ) {\n\t\t\tthis.sized = true;\n\t\t}\n\n\t\t// style.backgroundColor = '#f00'; // debug\n\t\tif ( this.domElement ) {\n\t\t\tthis.domElement.appendChild(this.div);\n\t\t\tthis.div.innerHTML = this.getHTML( box.width, box.height ).replace(/&/g, '&amp;');\n\t\t}\n\t},\n\n\tpositionElement: function() {\n\t\tvar box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement);\n\t\tvar style = this.div.style;\n\n\t\tstyle.position = 'absolute';\n\t\t//style.left = (this.domElement.offsetLeft)+'px';\n\t\t//style.top = this.domElement.offsetTop+'px';\n\t\tstyle.width = box.width + 'px';\n\t\tstyle.height = box.height + 'px';\n\n\t\tif ( box.width !== 0 && box.height !== 0 ) {\n\t\t\tthis.sized = true;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\tvar flash = this.div.childNodes[0];\n\t\tflash.width = box.width;\n\t\tflash.height = box.height;\n\t},\n\n\tgetHTML: function(width, height) {\n\t\t// return HTML for movie\n\t\tvar html = '';\n\t\tvar flashvars = 'id=' + this.id +\n\t\t\t'&width=' + width +\n\t\t\t'&height=' + height;\n\n\t\tif (navigator.userAgent.match(/MSIE/)) {\n\t\t\t// IE gets an OBJECT tag\n\t\t\tvar protocol = location.href.match(/^https/i) ? 'https://' : 'http://';\n\t\t\thtml += '<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0\" width=\"'+width+'\" height=\"'+height+'\" id=\"'+this.movieId+'\" align=\"middle\"><param name=\"allowScriptAccess\" value=\"always\" /><param name=\"allowFullScreen\" value=\"false\" /><param name=\"movie\" value=\"'+ZeroClipboard_TableTools.moviePath+'\" /><param name=\"loop\" value=\"false\" /><param name=\"menu\" value=\"false\" /><param name=\"quality\" value=\"best\" /><param name=\"bgcolor\" value=\"#ffffff\" /><param name=\"flashvars\" value=\"'+flashvars+'\"/><param name=\"wmode\" value=\"transparent\"/></object>';\n\t\t}\n\t\telse {\n\t\t\t// all other browsers get an EMBED tag\n\t\t\thtml += '<embed id=\"'+this.movieId+'\" src=\"'+ZeroClipboard_TableTools.moviePath+'\" loop=\"false\" menu=\"false\" quality=\"best\" bgcolor=\"#ffffff\" width=\"'+width+'\" height=\"'+height+'\" name=\"'+this.movieId+'\" align=\"middle\" allowScriptAccess=\"always\" allowFullScreen=\"false\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" flashvars=\"'+flashvars+'\" wmode=\"transparent\" />';\n\t\t}\n\t\treturn html;\n\t},\n\n\thide: function() {\n\t\t// temporarily hide floater offscreen\n\t\tif (this.div) {\n\t\t\tthis.div.style.left = '-2000px';\n\t\t}\n\t},\n\n\tshow: function() {\n\t\t// show ourselves after a call to hide()\n\t\tthis.reposition();\n\t},\n\n\tdestroy: function() {\n\t\t// destroy control and floater\n\t\tif (this.domElement && this.div) {\n\t\t\tthis.hide();\n\t\t\tthis.div.innerHTML = '';\n\n\t\t\tvar body = document.getElementsByTagName('body')[0];\n\t\t\ttry { body.removeChild( this.div ); } catch(e) {}\n\n\t\t\tthis.domElement = null;\n\t\t\tthis.div = null;\n\t\t}\n\t},\n\n\treposition: function(elem) {\n\t\t// reposition our floating div, optionally to new container\n\t\t// warning: container CANNOT change size, only position\n\t\tif (elem) {\n\t\t\tthis.domElement = ZeroClipboard_TableTools.$(elem);\n\t\t\tif (!this.domElement) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t}\n\n\t\tif (this.domElement && this.div) {\n\t\t\tvar box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement);\n\t\t\tvar style = this.div.style;\n\t\t\tstyle.left = '' + box.left + 'px';\n\t\t\tstyle.top = '' + box.top + 'px';\n\t\t}\n\t},\n\n\tclearText: function() {\n\t\t// clear the text to be copy / saved\n\t\tthis.clipText = '';\n\t\tif (this.ready) {\n\t\t\tthis.movie.clearText();\n\t\t}\n\t},\n\n\tappendText: function(newText) {\n\t\t// append text to that which is to be copied / saved\n\t\tthis.clipText += newText;\n\t\tif (this.ready) { this.movie.appendText(newText) ;}\n\t},\n\n\tsetText: function(newText) {\n\t\t// set text to be copied to be copied / saved\n\t\tthis.clipText = newText;\n\t\tif (this.ready) { this.movie.setText(newText) ;}\n\t},\n\n\tsetCharSet: function(charSet) {\n\t\t// set the character set (UTF16LE or UTF8)\n\t\tthis.charSet = charSet;\n\t\tif (this.ready) { this.movie.setCharSet(charSet) ;}\n\t},\n\n\tsetBomInc: function(bomInc) {\n\t\t// set if the BOM should be included or not\n\t\tthis.incBom = bomInc;\n\t\tif (this.ready) { this.movie.setBomInc(bomInc) ;}\n\t},\n\n\tsetFileName: function(newText) {\n\t\t// set the file name\n\t\tthis.fileName = newText;\n\t\tif (this.ready) {\n\t\t\tthis.movie.setFileName(newText);\n\t\t}\n\t},\n\n\tsetAction: function(newText) {\n\t\t// set action (save or copy)\n\t\tthis.action = newText;\n\t\tif (this.ready) {\n\t\t\tthis.movie.setAction(newText);\n\t\t}\n\t},\n\n\taddEventListener: function(eventName, func) {\n\t\t// add user event listener for event\n\t\t// event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel\n\t\teventName = eventName.toString().toLowerCase().replace(/^on/, '');\n\t\tif (!this.handlers[eventName]) {\n\t\t\tthis.handlers[eventName] = [];\n\t\t}\n\t\tthis.handlers[eventName].push(func);\n\t},\n\n\tsetHandCursor: function(enabled) {\n\t\t// enable hand cursor (true), or default arrow cursor (false)\n\t\tthis.handCursorEnabled = enabled;\n\t\tif (this.ready) {\n\t\t\tthis.movie.setHandCursor(enabled);\n\t\t}\n\t},\n\n\tsetCSSEffects: function(enabled) {\n\t\t// enable or disable CSS effects on DOM container\n\t\tthis.cssEffects = !!enabled;\n\t},\n\n\treceiveEvent: function(eventName, args) {\n\t\tvar self;\n\n\t\t// receive event from flash\n\t\teventName = eventName.toString().toLowerCase().replace(/^on/, '');\n\n\t\t// special behavior for certain events\n\t\tswitch (eventName) {\n\t\t\tcase 'load':\n\t\t\t\t// movie claims it is ready, but in IE this isn't always the case...\n\t\t\t\t// bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function\n\t\t\t\tthis.movie = document.getElementById(this.movieId);\n\t\t\t\tif (!this.movie) {\n\t\t\t\t\tself = this;\n\t\t\t\t\tsetTimeout( function() { self.receiveEvent('load', null); }, 1 );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// firefox on pc needs a \"kick\" in order to set these in certain cases\n\t\t\t\tif (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {\n\t\t\t\t\tself = this;\n\t\t\t\t\tsetTimeout( function() { self.receiveEvent('load', null); }, 100 );\n\t\t\t\t\tthis.ready = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.ready = true;\n\t\t\t\tthis.movie.clearText();\n\t\t\t\tthis.movie.appendText( this.clipText );\n\t\t\t\tthis.movie.setFileName( this.fileName );\n\t\t\t\tthis.movie.setAction( this.action );\n\t\t\t\tthis.movie.setCharSet( this.charSet );\n\t\t\t\tthis.movie.setBomInc( this.incBom );\n\t\t\t\tthis.movie.setHandCursor( this.handCursorEnabled );\n\t\t\t\tbreak;\n\n\t\t\tcase 'mouseover':\n\t\t\t\tif (this.domElement && this.cssEffects) {\n\t\t\t\t\t//this.domElement.addClass('hover');\n\t\t\t\t\tif (this.recoverActive) {\n\t\t\t\t\t\tthis.domElement.addClass('active');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'mouseout':\n\t\t\t\tif (this.domElement && this.cssEffects) {\n\t\t\t\t\tthis.recoverActive = false;\n\t\t\t\t\tif (this.domElement.hasClass('active')) {\n\t\t\t\t\t\tthis.domElement.removeClass('active');\n\t\t\t\t\t\tthis.recoverActive = true;\n\t\t\t\t\t}\n\t\t\t\t\t//this.domElement.removeClass('hover');\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'mousedown':\n\t\t\t\tif (this.domElement && this.cssEffects) {\n\t\t\t\t\tthis.domElement.addClass('active');\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'mouseup':\n\t\t\t\tif (this.domElement && this.cssEffects) {\n\t\t\t\t\tthis.domElement.removeClass('active');\n\t\t\t\t\tthis.recoverActive = false;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t} // switch eventName\n\n\t\tif (this.handlers[eventName]) {\n\t\t\tfor (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {\n\t\t\t\tvar func = this.handlers[eventName][idx];\n\n\t\t\t\tif (typeof(func) == 'function') {\n\t\t\t\t\t// actual function reference\n\t\t\t\t\tfunc(this, args);\n\t\t\t\t}\n\t\t\t\telse if ((typeof(func) == 'object') && (func.length == 2)) {\n\t\t\t\t\t// PHP style object + method, i.e. [myObject, 'myMethod']\n\t\t\t\t\tfunc[0][ func[1] ](this, args);\n\t\t\t\t}\n\t\t\t\telse if (typeof(func) == 'string') {\n\t\t\t\t\t// name of function\n\t\t\t\t\twindow[func](this, args);\n\t\t\t\t}\n\t\t\t} // foreach event handler defined\n\t\t} // user defined handler for event\n\t}\n\n};\n\n// For the Flash binding to work, ZeroClipboard_TableTools must be on the global\n// object list\nwindow.ZeroClipboard_TableTools = ZeroClipboard_TableTools;\n//include TableTools.js\n/* TableTools\n * 2009-2015 SpryMedia Ltd - datatables.net/license\n */\n\n/*globals TableTools,ZeroClipboard_TableTools*/\n\n\n(function($, window, document) {\n\n/** \n * TableTools provides flexible buttons and other tools for a DataTables enhanced table\n * @class TableTools\n * @constructor\n * @param {Object} oDT DataTables instance. When using DataTables 1.10 this can\n *   also be a jQuery collection, jQuery selector, table node, DataTables API\n *   instance or DataTables settings object.\n * @param {Object} oOpts TableTools options\n * @param {String} oOpts.sSwfPath ZeroClipboard SWF path\n * @param {String} oOpts.sRowSelect Row selection options - 'none', 'single', 'multi' or 'os'\n * @param {Function} oOpts.fnPreRowSelect Callback function just prior to row selection\n * @param {Function} oOpts.fnRowSelected Callback function just after row selection\n * @param {Function} oOpts.fnRowDeselected Callback function when row is deselected\n * @param {Array} oOpts.aButtons List of buttons to be used\n */\nTableTools = function( oDT, oOpts )\n{\n\t/* Santiy check that we are a new instance */\n\tif ( ! this instanceof TableTools )\n\t{\n\t\talert( \"Warning: TableTools must be initialised with the keyword 'new'\" );\n\t}\n\n\t// In 1.10 we can use the API to get the settings object from a number of\n\t// sources\n\tvar dtSettings = $.fn.dataTable.Api ?\n\t\tnew $.fn.dataTable.Api( oDT ).settings()[0] :\n\t\toDT.fnSettings();\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public class variables\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * @namespace Settings object which contains customisable information for TableTools instance\n\t */\n\tthis.s = {\n\t\t/**\n\t\t * Store 'this' so the instance can be retrieved from the settings object\n\t\t * @property that\n\t\t * @type\t object\n\t\t * @default  this\n\t\t */\n\t\t\"that\": this,\n\n\t\t/** \n\t\t * DataTables settings objects\n\t\t * @property dt\n\t\t * @type\t object\n\t\t * @default  <i>From the oDT init option</i>\n\t\t */\n\t\t\"dt\": dtSettings,\n\n\t\t/**\n\t\t * @namespace Print specific information\n\t\t */\n\t\t\"print\": {\n\t\t\t/** \n\t\t\t * DataTables draw 'start' point before the printing display was shown\n\t\t\t *  @property saveStart\n\t\t\t *  @type\t int\n\t\t\t *  @default  -1\n\t\t\t */\n\t\t\t\"saveStart\": -1,\n\n\t\t\t/** \n\t\t\t * DataTables draw 'length' point before the printing display was shown\n\t\t\t *  @property saveLength\n\t\t\t *  @type\t int\n\t\t\t *  @default  -1\n\t\t\t */\n\t\t\t\"saveLength\": -1,\n\n\t\t\t/** \n\t\t\t * Page scrolling point before the printing display was shown so it can be restored\n\t\t\t *  @property saveScroll\n\t\t\t *  @type\t int\n\t\t\t *  @default  -1\n\t\t\t */\n\t\t\t\"saveScroll\": -1,\n\n\t\t\t/** \n\t\t\t * Wrapped function to end the print display (to maintain scope)\n\t\t\t *  @property funcEnd\n\t\t\t *  @type\t Function\n\t\t\t *  @default  function () {}\n\t\t\t */\n\t\t\t\"funcEnd\": function () {}\n\t\t},\n\n\t\t/**\n\t\t * A unique ID is assigned to each button in each instance\n\t\t * @property buttonCounter\n\t\t *  @type\t int\n\t\t * @default  0\n\t\t */\n\t\t\"buttonCounter\": 0,\n\n\t\t/**\n\t\t * @namespace Select rows specific information\n\t\t */\n\t\t\"select\": {\n\t\t\t/**\n\t\t\t * Select type - can be 'none', 'single' or 'multi'\n\t\t\t * @property type\n\t\t\t *  @type\t string\n\t\t\t * @default  \"\"\n\t\t\t */\n\t\t\t\"type\": \"\",\n\n\t\t\t/**\n\t\t\t * Array of nodes which are currently selected\n\t\t\t *  @property selected\n\t\t\t *  @type\t array\n\t\t\t *  @default  []\n\t\t\t */\n\t\t\t\"selected\": [],\n\n\t\t\t/**\n\t\t\t * Function to run before the selection can take place. Will cancel the select if the\n\t\t\t * function returns false\n\t\t\t *  @property preRowSelect\n\t\t\t *  @type\t Function\n\t\t\t *  @default  null\n\t\t\t */\n\t\t\t\"preRowSelect\": null,\n\n\t\t\t/**\n\t\t\t * Function to run when a row is selected\n\t\t\t *  @property postSelected\n\t\t\t *  @type\t Function\n\t\t\t *  @default  null\n\t\t\t */\n\t\t\t\"postSelected\": null,\n\n\t\t\t/**\n\t\t\t * Function to run when a row is deselected\n\t\t\t *  @property postDeselected\n\t\t\t *  @type\t Function\n\t\t\t *  @default  null\n\t\t\t */\n\t\t\t\"postDeselected\": null,\n\n\t\t\t/**\n\t\t\t * Indicate if all rows are selected (needed for server-side processing)\n\t\t\t *  @property all\n\t\t\t *  @type\t boolean\n\t\t\t *  @default  false\n\t\t\t */\n\t\t\t\"all\": false,\n\n\t\t\t/**\n\t\t\t * Class name to add to selected TR nodes\n\t\t\t *  @property selectedClass\n\t\t\t *  @type\t String\n\t\t\t *  @default  \"\"\n\t\t\t */\n\t\t\t\"selectedClass\": \"\"\n\t\t},\n\n\t\t/**\n\t\t * Store of the user input customisation object\n\t\t *  @property custom\n\t\t *  @type\t object\n\t\t *  @default  {}\n\t\t */\n\t\t\"custom\": {},\n\n\t\t/**\n\t\t * SWF movie path\n\t\t *  @property swfPath\n\t\t *  @type\t string\n\t\t *  @default  \"\"\n\t\t */\n\t\t\"swfPath\": \"\",\n\n\t\t/**\n\t\t * Default button set\n\t\t *  @property buttonSet\n\t\t *  @type\t array\n\t\t *  @default  []\n\t\t */\n\t\t\"buttonSet\": [],\n\n\t\t/**\n\t\t * When there is more than one TableTools instance for a DataTable, there must be a \n\t\t * master which controls events (row selection etc)\n\t\t *  @property master\n\t\t *  @type\t boolean\n\t\t *  @default  false\n\t\t */\n\t\t\"master\": false,\n\n\t\t/**\n\t\t * Tag names that are used for creating collections and buttons\n\t\t *  @namesapce\n\t\t */\n\t\t\"tags\": {}\n\t};\n\n\n\t/**\n\t * @namespace Common and useful DOM elements for the class instance\n\t */\n\tthis.dom = {\n\t\t/**\n\t\t * DIV element that is create and all TableTools buttons (and their children) put into\n\t\t *  @property container\n\t\t *  @type\t node\n\t\t *  @default  null\n\t\t */\n\t\t\"container\": null,\n\n\t\t/**\n\t\t * The table node to which TableTools will be applied\n\t\t *  @property table\n\t\t *  @type\t node\n\t\t *  @default  null\n\t\t */\n\t\t\"table\": null,\n\n\t\t/**\n\t\t * @namespace Nodes used for the print display\n\t\t */\n\t\t\"print\": {\n\t\t\t/**\n\t\t\t * Nodes which have been removed from the display by setting them to display none\n\t\t\t *  @property hidden\n\t\t\t *  @type\t array\n\t\t\t *  @default  []\n\t\t\t */\n\t\t\t\"hidden\": [],\n\n\t\t\t/**\n\t\t\t * The information display saying telling the user about the print display\n\t\t\t *  @property message\n\t\t\t *  @type\t node\n\t\t\t *  @default  null\n\t\t\t */\n\t\t\t\"message\": null\n\t  },\n\n\t\t/**\n\t\t * @namespace Nodes used for a collection display. This contains the currently used collection\n\t\t */\n\t\t\"collection\": {\n\t\t\t/**\n\t\t\t * The div wrapper containing the buttons in the collection (i.e. the menu)\n\t\t\t *  @property collection\n\t\t\t *  @type\t node\n\t\t\t *  @default  null\n\t\t\t */\n\t\t\t\"collection\": null,\n\n\t\t\t/**\n\t\t\t * Background display to provide focus and capture events\n\t\t\t *  @property background\n\t\t\t *  @type\t node\n\t\t\t *  @default  null\n\t\t\t */\n\t\t\t\"background\": null\n\t\t}\n\t};\n\n\t/**\n\t * @namespace Name space for the classes that this TableTools instance will use\n\t * @extends TableTools.classes\n\t */\n\tthis.classes = $.extend( true, {}, TableTools.classes );\n\tif ( this.s.dt.bJUI )\n\t{\n\t\t$.extend( true, this.classes, TableTools.classes_themeroller );\n\t}\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public class methods\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Retreieve the settings object from an instance\n\t *  @method fnSettings\n\t *  @returns {object} TableTools settings object\n\t */\n\tthis.fnSettings = function () {\n\t\treturn this.s;\n\t};\n\n\n\t/* Constructor logic */\n\tif ( typeof oOpts == 'undefined' )\n\t{\n\t\toOpts = {};\n\t}\n\n\n\tTableTools._aInstances.push( this );\n\tthis._fnConstruct( oOpts );\n\n\treturn this;\n};\n\n\n\nTableTools.prototype = {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Retreieve the settings object from an instance\n\t *  @returns {array} List of TR nodes which are currently selected\n\t *  @param {boolean} [filtered=false] Get only selected rows which are  \n\t *    available given the filtering applied to the table. By default\n\t *    this is false -  i.e. all rows, regardless of filtering are \n\t      selected.\n\t */\n\t\"fnGetSelected\": function ( filtered )\n\t{\n\t\tvar\n\t\t\tout = [],\n\t\t\tdata = this.s.dt.aoData,\n\t\t\tdisplayed = this.s.dt.aiDisplay,\n\t\t\ti, iLen;\n\n\t\tif ( filtered )\n\t\t{\n\t\t\t// Only consider filtered rows\n\t\t\tfor ( i=0, iLen=displayed.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tif ( data[ displayed[i] ]._DTTT_selected )\n\t\t\t\t{\n\t\t\t\t\tout.push( data[ displayed[i] ].nTr );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Use all rows\n\t\t\tfor ( i=0, iLen=data.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tif ( data[i]._DTTT_selected )\n\t\t\t\t{\n\t\t\t\t\tout.push( data[i].nTr );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t},\n\n\n\t/**\n\t * Get the data source objects/arrays from DataTables for the selected rows (same as\n\t * fnGetSelected followed by fnGetData on each row from the table)\n\t *  @returns {array} Data from the TR nodes which are currently selected\n\t */\n\t\"fnGetSelectedData\": function ()\n\t{\n\t\tvar out = [];\n\t\tvar data=this.s.dt.aoData;\n\t\tvar i, iLen;\n\n\t\tfor ( i=0, iLen=data.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( data[i]._DTTT_selected )\n\t\t\t{\n\t\t\t\tout.push( this.s.dt.oInstance.fnGetData(i) );\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t},\n\n\n\t/**\n\t * Get the indexes of the selected rows\n\t *  @returns {array} List of row indexes\n\t *  @param {boolean} [filtered=false] Get only selected rows which are  \n\t *    available given the filtering applied to the table. By default\n\t *    this is false -  i.e. all rows, regardless of filtering are \n\t      selected.\n\t */\n\t\"fnGetSelectedIndexes\": function ( filtered )\n\t{\n\t\tvar\n\t\t\tout = [],\n\t\t\tdata = this.s.dt.aoData,\n\t\t\tdisplayed = this.s.dt.aiDisplay,\n\t\t\ti, iLen;\n\n\t\tif ( filtered )\n\t\t{\n\t\t\t// Only consider filtered rows\n\t\t\tfor ( i=0, iLen=displayed.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tif ( data[ displayed[i] ]._DTTT_selected )\n\t\t\t\t{\n\t\t\t\t\tout.push( displayed[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Use all rows\n\t\t\tfor ( i=0, iLen=data.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tif ( data[i]._DTTT_selected )\n\t\t\t\t{\n\t\t\t\t\tout.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t},\n\n\n\t/**\n\t * Check to see if a current row is selected or not\n\t *  @param {Node} n TR node to check if it is currently selected or not\n\t *  @returns {Boolean} true if select, false otherwise\n\t */\n\t\"fnIsSelected\": function ( n )\n\t{\n\t\tvar pos = this.s.dt.oInstance.fnGetPosition( n );\n\t\treturn (this.s.dt.aoData[pos]._DTTT_selected===true) ? true : false;\n\t},\n\n\n\t/**\n\t * Select all rows in the table\n\t *  @param {boolean} [filtered=false] Select only rows which are available \n\t *    given the filtering applied to the table. By default this is false - \n\t *    i.e. all rows, regardless of filtering are selected.\n\t */\n\t\"fnSelectAll\": function ( filtered )\n\t{\n\t\tthis._fnRowSelect( filtered ?\n\t\t\tthis.s.dt.aiDisplay :\n\t\t\tthis.s.dt.aoData\n\t\t);\n\t},\n\n\n\t/**\n\t * Deselect all rows in the table\n\t *  @param {boolean} [filtered=false] Deselect only rows which are available \n\t *    given the filtering applied to the table. By default this is false - \n\t *    i.e. all rows, regardless of filtering are deselected.\n\t */\n\t\"fnSelectNone\": function ( filtered )\n\t{\n\t\tthis._fnRowDeselect( this.fnGetSelectedIndexes(filtered) );\n\t},\n\n\n\t/**\n\t * Select row(s)\n\t *  @param {node|object|array} n The row(s) to select. Can be a single DOM\n\t *    TR node, an array of TR nodes or a jQuery object.\n\t */\n\t\"fnSelect\": function ( n )\n\t{\n\t\tif ( this.s.select.type == \"single\" )\n\t\t{\n\t\t\tthis.fnSelectNone();\n\t\t\tthis._fnRowSelect( n );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._fnRowSelect( n );\n\t\t}\n\t},\n\n\n\t/**\n\t * Deselect row(s)\n\t *  @param {node|object|array} n The row(s) to deselect. Can be a single DOM\n\t *    TR node, an array of TR nodes or a jQuery object.\n\t */\n\t\"fnDeselect\": function ( n )\n\t{\n\t\tthis._fnRowDeselect( n );\n\t},\n\n\n\t/**\n\t * Get the title of the document - useful for file names. The title is retrieved from either\n\t * the configuration object's 'title' parameter, or the HTML document title\n\t *  @param   {Object} oConfig Button configuration object\n\t *  @returns {String} Button title\n\t */\n\t\"fnGetTitle\": function( oConfig )\n\t{\n\t\tvar sTitle = \"\";\n\t\tif ( typeof oConfig.sTitle != 'undefined' && oConfig.sTitle !== \"\" ) {\n\t\t\tsTitle = oConfig.sTitle;\n\t\t} else {\n\t\t\tvar anTitle = document.getElementsByTagName('title');\n\t\t\tif ( anTitle.length > 0 )\n\t\t\t{\n\t\t\t\tsTitle = anTitle[0].innerHTML;\n\t\t\t}\n\t\t}\n\n\t\t/* Strip characters which the OS will object to - checking for UTF8 support in the scripting\n\t\t * engine\n\t\t */\n\t\tif ( \"\\u00A1\".toString().length < 4 ) {\n\t\t\treturn sTitle.replace(/[^a-zA-Z0-9_\\u00A1-\\uFFFF\\.,\\-_ !\\(\\)]/g, \"\");\n\t\t} else {\n\t\t\treturn sTitle.replace(/[^a-zA-Z0-9_\\.,\\-_ !\\(\\)]/g, \"\");\n\t\t}\n\t},\n\n\n\t/**\n\t * Calculate a unity array with the column width by proportion for a set of columns to be\n\t * included for a button. This is particularly useful for PDF creation, where we can use the\n\t * column widths calculated by the browser to size the columns in the PDF.\n\t *  @param   {Object} oConfig Button configuration object\n\t *  @returns {Array} Unity array of column ratios\n\t */\n\t\"fnCalcColRatios\": function ( oConfig )\n\t{\n\t\tvar\n\t\t\taoCols = this.s.dt.aoColumns,\n\t\t\taColumnsInc = this._fnColumnTargets( oConfig.mColumns ),\n\t\t\taColWidths = [],\n\t\t\tiWidth = 0, iTotal = 0, i, iLen;\n\n\t\tfor ( i=0, iLen=aColumnsInc.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( aColumnsInc[i] )\n\t\t\t{\n\t\t\t\tiWidth = aoCols[i].nTh.offsetWidth;\n\t\t\t\tiTotal += iWidth;\n\t\t\t\taColWidths.push( iWidth );\n\t\t\t}\n\t\t}\n\n\t\tfor ( i=0, iLen=aColWidths.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taColWidths[i] = aColWidths[i] / iTotal;\n\t\t}\n\n\t\treturn aColWidths.join('\\t');\n\t},\n\n\n\t/**\n\t * Get the information contained in a table as a string\n\t *  @param   {Object} oConfig Button configuration object\n\t *  @returns {String} Table data as a string\n\t */\n\t\"fnGetTableData\": function ( oConfig )\n\t{\n\t\t/* In future this could be used to get data from a plain HTML source as well as DataTables */\n\t\tif ( this.s.dt )\n\t\t{\n\t\t\treturn this._fnGetDataTablesData( oConfig );\n\t\t}\n\t},\n\n\n\t/**\n\t * Pass text to a flash button instance, which will be used on the button's click handler\n\t *  @param   {Object} clip Flash button object\n\t *  @param   {String} text Text to set\n\t */\n\t\"fnSetText\": function ( clip, text )\n\t{\n\t\tthis._fnFlashSetText( clip, text );\n\t},\n\n\n\t/**\n\t * Resize the flash elements of the buttons attached to this TableTools instance - this is\n\t * useful for when initialising TableTools when it is hidden (display:none) since sizes can't\n\t * be calculated at that time.\n\t */\n\t\"fnResizeButtons\": function ()\n\t{\n\t\tfor ( var cli in ZeroClipboard_TableTools.clients )\n\t\t{\n\t\t\tif ( cli )\n\t\t\t{\n\t\t\t\tvar client = ZeroClipboard_TableTools.clients[cli];\n\t\t\t\tif ( typeof client.domElement != 'undefined' &&\n\t\t\t\t\t client.domElement.parentNode )\n\t\t\t\t{\n\t\t\t\t\tclient.positionElement();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/**\n\t * Check to see if any of the ZeroClipboard client's attached need to be resized\n\t */\n\t\"fnResizeRequired\": function ()\n\t{\n\t\tfor ( var cli in ZeroClipboard_TableTools.clients )\n\t\t{\n\t\t\tif ( cli )\n\t\t\t{\n\t\t\t\tvar client = ZeroClipboard_TableTools.clients[cli];\n\t\t\t\tif ( typeof client.domElement != 'undefined' &&\n\t\t\t\t\t client.domElement.parentNode == this.dom.container &&\n\t\t\t\t\t client.sized === false )\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\n\t/**\n\t * Programmatically enable or disable the print view\n\t *  @param {boolean} [bView=true] Show the print view if true or not given. If false, then\n\t *    terminate the print view and return to normal.\n\t *  @param {object} [oConfig={}] Configuration for the print view\n\t *  @param {boolean} [oConfig.bShowAll=false] Show all rows in the table if true\n\t *  @param {string} [oConfig.sInfo] Information message, displayed as an overlay to the\n\t *    user to let them know what the print view is.\n\t *  @param {string} [oConfig.sMessage] HTML string to show at the top of the document - will\n\t *    be included in the printed document.\n\t */\n\t\"fnPrint\": function ( bView, oConfig )\n\t{\n\t\tif ( oConfig === undefined )\n\t\t{\n\t\t\toConfig = {};\n\t\t}\n\n\t\tif ( bView === undefined || bView )\n\t\t{\n\t\t\tthis._fnPrintStart( oConfig );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._fnPrintEnd();\n\t\t}\n\t},\n\n\n\t/**\n\t * Show a message to the end user which is nicely styled\n\t *  @param {string} message The HTML string to show to the user\n\t *  @param {int} time The duration the message is to be shown on screen for (mS)\n\t */\n\t\"fnInfo\": function ( message, time ) {\n\t\tvar info = $('<div/>')\n\t\t\t.addClass( this.classes.print.info )\n\t\t\t.html( message )\n\t\t\t.appendTo( 'body' );\n\n\t\tsetTimeout( function() {\n\t\t\tinfo.fadeOut( \"normal\", function() {\n\t\t\t\tinfo.remove();\n\t\t\t} );\n\t\t}, time );\n\t},\n\n\n\n\t/**\n\t * Get the container element of the instance for attaching to the DOM\n\t *   @returns {node} DOM node\n\t */\n\t\"fnContainer\": function () {\n\t\treturn this.dom.container;\n\t},\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods (they are of course public in JS, but recommended as private)\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Constructor logic\n\t *  @method  _fnConstruct\n\t *  @param   {Object} oOpts Same as TableTools constructor\n\t *  @returns void\n\t *  @private \n\t */\n\t\"_fnConstruct\": function ( oOpts )\n\t{\n\t\tvar that = this;\n\n\t\tthis._fnCustomiseSettings( oOpts );\n\n\t\t/* Container element */\n\t\tthis.dom.container = document.createElement( this.s.tags.container );\n\t\tthis.dom.container.className = this.classes.container;\n\n\t\t/* Row selection config */\n\t\tif ( this.s.select.type != 'none' )\n\t\t{\n\t\t\tthis._fnRowSelectConfig();\n\t\t}\n\n\t\t/* Buttons */\n\t\tthis._fnButtonDefinations( this.s.buttonSet, this.dom.container );\n\n\t\t/* Destructor */\n\t\tthis.s.dt.aoDestroyCallback.push( {\n\t\t\t\"sName\": \"TableTools\",\n\t\t\t\"fn\": function () {\n\t\t\t\t$(that.s.dt.nTBody)\n\t\t\t\t\t.off( 'click.DTTT_Select', that.s.custom.sRowSelector )\n\t\t\t\t\t.off( 'mousedown.DTTT_Select', 'tr' )\n\t\t\t\t\t.off( 'mouseup.DTTT_Select', 'tr' );\n\n\t\t\t\t$(that.dom.container).empty();\n\n\t\t\t\t// Remove the instance\n\t\t\t\tvar idx = $.inArray( that, TableTools._aInstances );\n\t\t\t\tif ( idx !== -1 ) {\n\t\t\t\t\tTableTools._aInstances.splice( idx, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\n\t/**\n\t * Take the user defined settings and the default settings and combine them.\n\t *  @method  _fnCustomiseSettings\n\t *  @param   {Object} oOpts Same as TableTools constructor\n\t *  @returns void\n\t *  @private \n\t */\n\t\"_fnCustomiseSettings\": function ( oOpts )\n\t{\n\t\t/* Is this the master control instance or not? */\n\t\tif ( typeof this.s.dt._TableToolsInit == 'undefined' )\n\t\t{\n\t\t\tthis.s.master = true;\n\t\t\tthis.s.dt._TableToolsInit = true;\n\t\t}\n\n\t\t/* We can use the table node from comparisons to group controls */\n\t\tthis.dom.table = this.s.dt.nTable;\n\n\t\t/* Clone the defaults and then the user options */\n\t\tthis.s.custom = $.extend( {}, TableTools.DEFAULTS, oOpts );\n\n\t\t/* Flash file location */\n\t\tthis.s.swfPath = this.s.custom.sSwfPath;\n\t\tif ( typeof ZeroClipboard_TableTools != 'undefined' )\n\t\t{\n\t\t\tZeroClipboard_TableTools.moviePath = this.s.swfPath;\n\t\t}\n\n\t\t/* Table row selecting */\n\t\tthis.s.select.type = this.s.custom.sRowSelect;\n\t\tthis.s.select.preRowSelect = this.s.custom.fnPreRowSelect;\n\t\tthis.s.select.postSelected = this.s.custom.fnRowSelected;\n\t\tthis.s.select.postDeselected = this.s.custom.fnRowDeselected;\n\n\t\t// Backwards compatibility - allow the user to specify a custom class in the initialiser\n\t\tif ( this.s.custom.sSelectedClass )\n\t\t{\n\t\t\tthis.classes.select.row = this.s.custom.sSelectedClass;\n\t\t}\n\n\t\tthis.s.tags = this.s.custom.oTags;\n\n\t\t/* Button set */\n\t\tthis.s.buttonSet = this.s.custom.aButtons;\n\t},\n\n\n\t/**\n\t * Take the user input arrays and expand them to be fully defined, and then add them to a given\n\t * DOM element\n\t *  @method  _fnButtonDefinations\n\t *  @param {array} buttonSet Set of user defined buttons\n\t *  @param {node} wrapper Node to add the created buttons to\n\t *  @returns void\n\t *  @private \n\t */\n\t\"_fnButtonDefinations\": function ( buttonSet, wrapper )\n\t{\n\t\tvar buttonDef;\n\n\t\tfor ( var i=0, iLen=buttonSet.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( typeof buttonSet[i] == \"string\" )\n\t\t\t{\n\t\t\t\tif ( typeof TableTools.BUTTONS[ buttonSet[i] ] == 'undefined' )\n\t\t\t\t{\n\t\t\t\t\talert( \"TableTools: Warning - unknown button type: \"+buttonSet[i] );\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tbuttonDef = $.extend( {}, TableTools.BUTTONS[ buttonSet[i] ], true );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif ( typeof TableTools.BUTTONS[ buttonSet[i].sExtends ] == 'undefined' )\n\t\t\t\t{\n\t\t\t\t\talert( \"TableTools: Warning - unknown button type: \"+buttonSet[i].sExtends );\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvar o = $.extend( {}, TableTools.BUTTONS[ buttonSet[i].sExtends ], true );\n\t\t\t\tbuttonDef = $.extend( o, buttonSet[i], true );\n\t\t\t}\n\n\t\t\tvar button = this._fnCreateButton(\n\t\t\t\tbuttonDef,\n\t\t\t\t$(wrapper).hasClass(this.classes.collection.container)\n\t\t\t);\n\n\t\t\tif ( button ) {\n\t\t\t\twrapper.appendChild( button );\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/**\n\t * Create and configure a TableTools button\n\t *  @method  _fnCreateButton\n\t *  @param   {Object} oConfig Button configuration object\n\t *  @returns {Node} Button element\n\t *  @private \n\t */\n\t\"_fnCreateButton\": function ( oConfig, bCollectionButton )\n\t{\n\t  var nButton = this._fnButtonBase( oConfig, bCollectionButton );\n\n\t\tif ( oConfig.sAction.match(/flash/) )\n\t\t{\n\t\t\tif ( ! this._fnHasFlash() ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis._fnFlashConfig( nButton, oConfig );\n\t\t}\n\t\telse if ( oConfig.sAction == \"text\" )\n\t\t{\n\t\t\tthis._fnTextConfig( nButton, oConfig );\n\t\t}\n\t\telse if ( oConfig.sAction == \"div\" )\n\t\t{\n\t\t\tthis._fnTextConfig( nButton, oConfig );\n\t\t}\n\t\telse if ( oConfig.sAction == \"collection\" )\n\t\t{\n\t\t\tthis._fnTextConfig( nButton, oConfig );\n\t\t\tthis._fnCollectionConfig( nButton, oConfig );\n\t\t}\n\n\t\tif ( this.s.dt.iTabIndex !== -1 ) {\n\t\t\t$(nButton)\n\t\t\t\t.attr( 'tabindex', this.s.dt.iTabIndex )\n\t\t\t\t.attr( 'aria-controls', this.s.dt.sTableId )\n\t\t\t\t.on( 'keyup.DTTT', function (e) {\n\t\t\t\t\t// Trigger the click event on return key when focused.\n\t\t\t\t\t// Note that for Flash buttons this has no effect since we\n\t\t\t\t\t// can't programmatically trigger the Flash export\n\t\t\t\t\tif ( e.keyCode === 13 ) {\n\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t$(this).trigger( 'click' );\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t.on( 'mousedown.DTTT', function (e) {\n\t\t\t\t\t// On mousedown we want to stop the focus occurring on the\n\t\t\t\t\t// button, focus is used only for the keyboard navigation.\n\t\t\t\t\t// But using preventDefault for the flash buttons stops the\n\t\t\t\t\t// flash action. However, it is not the button that gets\n\t\t\t\t\t// focused but the flash element for flash buttons, so this\n\t\t\t\t\t// works\n\t\t\t\t\tif ( ! oConfig.sAction.match(/flash/) ) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\n\t\treturn nButton;\n\t},\n\n\n\t/**\n\t * Create the DOM needed for the button and apply some base properties. All buttons start here\n\t *  @method  _fnButtonBase\n\t *  @param   {o} oConfig Button configuration object\n\t *  @returns {Node} DIV element for the button\n\t *  @private\n\t */\n\t\"_fnButtonBase\": function ( o, bCollectionButton )\n\t{\n\t\tvar sTag, sLiner, sClass;\n\n\t\tif ( bCollectionButton )\n\t\t{\n\t\t\tsTag = o.sTag && o.sTag !== \"default\" ? o.sTag : this.s.tags.collection.button;\n\t\t\tsLiner = o.sLinerTag && o.sLinerTag !== \"default\" ? o.sLiner : this.s.tags.collection.liner;\n\t\t\tsClass = this.classes.collection.buttons.normal;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsTag = o.sTag && o.sTag !== \"default\" ? o.sTag : this.s.tags.button;\n\t\t\tsLiner = o.sLinerTag && o.sLinerTag !== \"default\" ? o.sLiner : this.s.tags.liner;\n\t\t\tsClass = this.classes.buttons.normal;\n\t\t}\n\n\t\tvar\n\t\t  nButton = document.createElement( sTag ),\n\t\t  nSpan = document.createElement( sLiner ),\n\t\t  masterS = this._fnGetMasterSettings();\n\n\t\tnButton.className = sClass+\" \"+o.sButtonClass;\n\t\tnButton.setAttribute('id', \"ToolTables_\"+this.s.dt.sInstance+\"_\"+masterS.buttonCounter );\n\t\tnButton.appendChild( nSpan );\n\t\tnSpan.innerHTML = o.sButtonText;\n\n\t\tmasterS.buttonCounter++;\n\n\t\treturn nButton;\n\t},\n\n\n\t/**\n\t * Get the settings object for the master instance. When more than one TableTools instance is\n\t * assigned to a DataTable, only one of them can be the 'master' (for the select rows). As such,\n\t * we will typically want to interact with that master for global properties.\n\t *  @method  _fnGetMasterSettings\n\t *  @returns {Object} TableTools settings object\n\t *  @private \n\t */\n\t\"_fnGetMasterSettings\": function ()\n\t{\n\t\tif ( this.s.master )\n\t\t{\n\t\t\treturn this.s;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Look for the master which has the same DT as this one */\n\t\t\tvar instances = TableTools._aInstances;\n\t\t\tfor ( var i=0, iLen=instances.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tif ( this.dom.table == instances[i].s.dt.nTable )\n\t\t\t\t{\n\t\t\t\t\treturn instances[i].s;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Button collection functions\n\t */\n\n\t/**\n\t * Create a collection button, when activated will present a drop down list of other buttons\n\t *  @param   {Node} nButton Button to use for the collection activation\n\t *  @param   {Object} oConfig Button configuration object\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnCollectionConfig\": function ( nButton, oConfig )\n\t{\n\t\tvar nHidden = document.createElement( this.s.tags.collection.container );\n\t\tnHidden.style.display = \"none\";\n\t\tnHidden.className = this.classes.collection.container;\n\t\toConfig._collection = nHidden;\n\t\tdocument.body.appendChild( nHidden );\n\n\t\tthis._fnButtonDefinations( oConfig.aButtons, nHidden );\n\t},\n\n\n\t/**\n\t * Show a button collection\n\t *  @param   {Node} nButton Button to use for the collection\n\t *  @param   {Object} oConfig Button configuration object\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnCollectionShow\": function ( nButton, oConfig )\n\t{\n\t\tvar\n\t\t\tthat = this,\n\t\t\toPos = $(nButton).offset(),\n\t\t\tnHidden = oConfig._collection,\n\t\t\tiDivX = oPos.left,\n\t\t\tiDivY = oPos.top + $(nButton).outerHeight(),\n\t\t\tiWinHeight = $(window).height(), iDocHeight = $(document).height(),\n\t\t\tiWinWidth = $(window).width(), iDocWidth = $(document).width();\n\n\t\tnHidden.style.position = \"absolute\";\n\t\tnHidden.style.left = iDivX+\"px\";\n\t\tnHidden.style.top = iDivY+\"px\";\n\t\tnHidden.style.display = \"block\";\n\t\t$(nHidden).css('opacity',0);\n\n\t\tvar nBackground = document.createElement('div');\n\t\tnBackground.style.position = \"absolute\";\n\t\tnBackground.style.left = \"0px\";\n\t\tnBackground.style.top = \"0px\";\n\t\tnBackground.style.height = ((iWinHeight>iDocHeight)? iWinHeight : iDocHeight) +\"px\";\n\t\tnBackground.style.width = ((iWinWidth>iDocWidth)? iWinWidth : iDocWidth) +\"px\";\n\t\tnBackground.className = this.classes.collection.background;\n\t\t$(nBackground).css('opacity',0);\n\n\t\tdocument.body.appendChild( nBackground );\n\t\tdocument.body.appendChild( nHidden );\n\n\t\t/* Visual corrections to try and keep the collection visible */\n\t\tvar iDivWidth = $(nHidden).outerWidth();\n\t\tvar iDivHeight = $(nHidden).outerHeight();\n\n\t\tif ( iDivX + iDivWidth > iDocWidth )\n\t\t{\n\t\t\tnHidden.style.left = (iDocWidth-iDivWidth)+\"px\";\n\t\t}\n\n\t\tif ( iDivY + iDivHeight > iDocHeight )\n\t\t{\n\t\t\tnHidden.style.top = (iDivY-iDivHeight-$(nButton).outerHeight())+\"px\";\n\t\t}\n\n\t\tthis.dom.collection.collection = nHidden;\n\t\tthis.dom.collection.background = nBackground;\n\n\t\t/* This results in a very small delay for the end user but it allows the animation to be\n\t\t * much smoother. If you don't want the animation, then the setTimeout can be removed\n\t\t */\n\t\tsetTimeout( function () {\n\t\t\t$(nHidden).animate({\"opacity\": 1}, 500);\n\t\t\t$(nBackground).animate({\"opacity\": 0.25}, 500);\n\t\t}, 10 );\n\n\t\t/* Resize the buttons to the Flash contents fit */\n\t\tthis.fnResizeButtons();\n\n\t\t/* Event handler to remove the collection display */\n\t\t$(nBackground).click( function () {\n\t\t\tthat._fnCollectionHide.call( that, null, null );\n\t\t} );\n\t},\n\n\n\t/**\n\t * Hide a button collection\n\t *  @param   {Node} nButton Button to use for the collection\n\t *  @param   {Object} oConfig Button configuration object\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnCollectionHide\": function ( nButton, oConfig )\n\t{\n\t\tif ( oConfig !== null && oConfig.sExtends == 'collection' )\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.dom.collection.collection !== null )\n\t\t{\n\t\t\t$(this.dom.collection.collection).animate({\"opacity\": 0}, 500, function (e) {\n\t\t\t\tthis.style.display = \"none\";\n\t\t\t} );\n\n\t\t\t$(this.dom.collection.background).animate({\"opacity\": 0}, 500, function (e) {\n\t\t\t\tthis.parentNode.removeChild( this );\n\t\t\t} );\n\n\t\t\tthis.dom.collection.collection = null;\n\t\t\tthis.dom.collection.background = null;\n\t\t}\n\t},\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Row selection functions\n\t */\n\n\t/**\n\t * Add event handlers to a table to allow for row selection\n\t *  @method  _fnRowSelectConfig\n\t *  @returns void\n\t *  @private \n\t */\n\t\"_fnRowSelectConfig\": function ()\n\t{\n\t\tif ( this.s.master )\n\t\t{\n\t\t\tvar\n\t\t\t\tthat = this,\n\t\t\t\ti, iLen,\n\t\t\t\tdt = this.s.dt,\n\t\t\t\taoOpenRows = this.s.dt.aoOpenRows;\n\n\t\t\t$(dt.nTable).addClass( this.classes.select.table );\n\n\t\t\t// When using OS style selection, we want to cancel the shift text\n\t\t\t// selection, but only when the shift key is used (so you can\n\t\t\t// actually still select text in the table)\n\t\t\tif ( this.s.select.type === 'os' ) {\n\t\t\t\t$(dt.nTBody).on( 'mousedown.DTTT_Select', 'tr', function(e) {\n\t\t\t\t\tif ( e.shiftKey ) {\n\n\t\t\t\t\t\t$(dt.nTBody)\n\t\t\t\t\t\t\t.css( '-moz-user-select', 'none' )\n\t\t\t\t\t\t\t.one('selectstart.DTTT_Select', 'tr', function () {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\t$(dt.nTBody).on( 'mouseup.DTTT_Select', 'tr', function(e) {\n\t\t\t\t\t$(dt.nTBody).css( '-moz-user-select', '' );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Row selection\n\t\t\t$(dt.nTBody).on( 'click.DTTT_Select', this.s.custom.sRowSelector, function(e) {\n\t\t\t\tvar row = this.nodeName.toLowerCase() === 'tr' ?\n\t\t\t\t\tthis :\n\t\t\t\t\t$(this).parents('tr')[0];\n\n\t\t\t\tvar select = that.s.select;\n\t\t\t\tvar pos = that.s.dt.oInstance.fnGetPosition( row );\n\n\t\t\t\t/* Sub-table must be ignored (odd that the selector won't do this with >) */\n\t\t\t\tif ( row.parentNode != dt.nTBody ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t/* Check that we are actually working with a DataTables controlled row */\n\t\t\t\tif ( dt.oInstance.fnGetData(row) === null ) {\n\t\t\t\t    return;\n\t\t\t\t}\n\n\t\t\t\t// Shift click, ctrl click and simple click handling to make\n\t\t\t\t// row selection a lot like a file system in desktop OSs\n\t\t\t\tif ( select.type == 'os' ) {\n\t\t\t\t\tif ( e.ctrlKey || e.metaKey ) {\n\t\t\t\t\t\t// Add or remove from the selection\n\t\t\t\t\t\tif ( that.fnIsSelected( row ) ) {\n\t\t\t\t\t\t\tthat._fnRowDeselect( row, e );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthat._fnRowSelect( row, e );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if ( e.shiftKey ) {\n\t\t\t\t\t\t// Add a range of rows, from the last selected row to\n\t\t\t\t\t\t// this one\n\t\t\t\t\t\tvar rowIdxs = that.s.dt.aiDisplay.slice(); // visible rows\n\t\t\t\t\t\tvar idx1 = $.inArray( select.lastRow, rowIdxs );\n\t\t\t\t\t\tvar idx2 = $.inArray( pos, rowIdxs );\n\n\t\t\t\t\t\tif ( that.fnGetSelected().length === 0 || idx1 === -1 ) {\n\t\t\t\t\t\t\t// select from top to here - slightly odd, but both\n\t\t\t\t\t\t\t// Windows and Mac OS do this\n\t\t\t\t\t\t\trowIdxs.splice( $.inArray( pos, rowIdxs )+1, rowIdxs.length );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// reverse so we can shift click 'up' as well as down\n\t\t\t\t\t\t\tif ( idx1 > idx2 ) {\n\t\t\t\t\t\t\t\tvar tmp = idx2;\n\t\t\t\t\t\t\t\tidx2 = idx1;\n\t\t\t\t\t\t\t\tidx1 = tmp;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\trowIdxs.splice( idx2+1, rowIdxs.length );\n\t\t\t\t\t\t\trowIdxs.splice( 0, idx1 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ! that.fnIsSelected( row ) ) {\n\t\t\t\t\t\t\t// Select range\n\t\t\t\t\t\t\tthat._fnRowSelect( rowIdxs, e );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Deselect range - need to keep the clicked on row selected\n\t\t\t\t\t\t\trowIdxs.splice( $.inArray( pos, rowIdxs ), 1 );\n\t\t\t\t\t\t\tthat._fnRowDeselect( rowIdxs, e );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// No cmd or shift click. Deselect current if selected,\n\t\t\t\t\t\t// or select this row only\n\t\t\t\t\t\tif ( that.fnIsSelected( row ) && that.fnGetSelected().length === 1 ) {\n\t\t\t\t\t\t\tthat._fnRowDeselect( row, e );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthat.fnSelectNone();\n\t\t\t\t\t\t\tthat._fnRowSelect( row, e );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( that.fnIsSelected( row ) ) {\n\t\t\t\t\tthat._fnRowDeselect( row, e );\n\t\t\t\t}\n\t\t\t\telse if ( select.type == \"single\" ) {\n\t\t\t\t\tthat.fnSelectNone();\n\t\t\t\t\tthat._fnRowSelect( row, e );\n\t\t\t\t}\n\t\t\t\telse if ( select.type == \"multi\" ) {\n\t\t\t\t\tthat._fnRowSelect( row, e );\n\t\t\t\t}\n\n\t\t\t\tselect.lastRow = pos;\n\t\t\t} );//.on('selectstart', function () { return false; } );\n\n\t\t\t// Bind a listener to the DataTable for when new rows are created.\n\t\t\t// This allows rows to be visually selected when they should be and\n\t\t\t// deferred rendering is used.\n\t\t\tdt.oApi._fnCallbackReg( dt, 'aoRowCreatedCallback', function (tr, data, index) {\n\t\t\t\tif ( dt.aoData[index]._DTTT_selected ) {\n\t\t\t\t\t$(tr).addClass( that.classes.select.row );\n\t\t\t\t}\n\t\t\t}, 'TableTools-SelectAll' );\n\t\t}\n\t},\n\n\t/**\n\t * Select rows\n\t *  @param   {*} src Rows to select - see _fnSelectData for a description of valid inputs\n\t *  @private \n\t */\n\t\"_fnRowSelect\": function ( src, e )\n\t{\n\t\tvar\n\t\t\tthat = this,\n\t\t\tdata = this._fnSelectData( src ),\n\t\t\tfirstTr = data.length===0 ? null : data[0].nTr,\n\t\t\tanSelected = [],\n\t\t\ti, len;\n\n\t\t// Get all the rows that will be selected\n\t\tfor ( i=0, len=data.length ; i<len ; i++ )\n\t\t{\n\t\t\tif ( data[i].nTr )\n\t\t\t{\n\t\t\t\tanSelected.push( data[i].nTr );\n\t\t\t}\n\t\t}\n\n\t\t// User defined pre-selection function\n\t\tif ( this.s.select.preRowSelect !== null && !this.s.select.preRowSelect.call(this, e, anSelected, true) )\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Mark them as selected\n\t\tfor ( i=0, len=data.length ; i<len ; i++ )\n\t\t{\n\t\t\tdata[i]._DTTT_selected = true;\n\n\t\t\tif ( data[i].nTr )\n\t\t\t{\n\t\t\t\t$(data[i].nTr).addClass( that.classes.select.row );\n\t\t\t}\n\t\t}\n\n\t\t// Post-selection function\n\t\tif ( this.s.select.postSelected !== null )\n\t\t{\n\t\t\tthis.s.select.postSelected.call( this, anSelected );\n\t\t}\n\n\t\tTableTools._fnEventDispatch( this, 'select', anSelected, true );\n\t},\n\n\t/**\n\t * Deselect rows\n\t *  @param   {*} src Rows to deselect - see _fnSelectData for a description of valid inputs\n\t *  @private \n\t */\n\t\"_fnRowDeselect\": function ( src, e )\n\t{\n\t\tvar\n\t\t\tthat = this,\n\t\t\tdata = this._fnSelectData( src ),\n\t\t\tfirstTr = data.length===0 ? null : data[0].nTr,\n\t\t\tanDeselectedTrs = [],\n\t\t\ti, len;\n\n\t\t// Get all the rows that will be deselected\n\t\tfor ( i=0, len=data.length ; i<len ; i++ )\n\t\t{\n\t\t\tif ( data[i].nTr )\n\t\t\t{\n\t\t\t\tanDeselectedTrs.push( data[i].nTr );\n\t\t\t}\n\t\t}\n\n\t\t// User defined pre-selection function\n\t\tif ( this.s.select.preRowSelect !== null && !this.s.select.preRowSelect.call(this, e, anDeselectedTrs, false) )\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Mark them as deselected\n\t\tfor ( i=0, len=data.length ; i<len ; i++ )\n\t\t{\n\t\t\tdata[i]._DTTT_selected = false;\n\n\t\t\tif ( data[i].nTr )\n\t\t\t{\n\t\t\t\t$(data[i].nTr).removeClass( that.classes.select.row );\n\t\t\t}\n\t\t}\n\n\t\t// Post-deselection function\n\t\tif ( this.s.select.postDeselected !== null )\n\t\t{\n\t\t\tthis.s.select.postDeselected.call( this, anDeselectedTrs );\n\t\t}\n\n\t\tTableTools._fnEventDispatch( this, 'select', anDeselectedTrs, false );\n\t},\n\n\t/**\n\t * Take a data source for row selection and convert it into aoData points for the DT\n\t *   @param {*} src Can be a single DOM TR node, an array of TR nodes (including a\n\t *     a jQuery object), a single aoData point from DataTables, an array of aoData\n\t *     points or an array of aoData indexes\n\t *   @returns {array} An array of aoData points\n\t */\n\t\"_fnSelectData\": function ( src )\n\t{\n\t\tvar out = [], pos, i, iLen;\n\n\t\tif ( src.nodeName )\n\t\t{\n\t\t\t// Single node\n\t\t\tpos = this.s.dt.oInstance.fnGetPosition( src );\n\t\t\tout.push( this.s.dt.aoData[pos] );\n\t\t}\n\t\telse if ( typeof src.length !== 'undefined' )\n\t\t{\n\t\t\t// jQuery object or an array of nodes, or aoData points\n\t\t\tfor ( i=0, iLen=src.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tif ( src[i].nodeName )\n\t\t\t\t{\n\t\t\t\t\tpos = this.s.dt.oInstance.fnGetPosition( src[i] );\n\t\t\t\t\tout.push( this.s.dt.aoData[pos] );\n\t\t\t\t}\n\t\t\t\telse if ( typeof src[i] === 'number' )\n\t\t\t\t{\n\t\t\t\t\tout.push( this.s.dt.aoData[ src[i] ] );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tout.push( src[i] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn out;\n\t\t}\n\t\telse if ( typeof src === 'number' )\n\t\t{\n\t\t\tout.push(this.s.dt.aoData[src]);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// A single aoData point\n\t\t\tout.push( src );\n\t\t}\n\n\t\treturn out;\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Text button functions\n\t */\n\n\t/**\n\t * Configure a text based button for interaction events\n\t *  @method  _fnTextConfig\n\t *  @param   {Node} nButton Button element which is being considered\n\t *  @param   {Object} oConfig Button configuration object\n\t *  @returns void\n\t *  @private \n\t */\n\t\"_fnTextConfig\": function ( nButton, oConfig )\n\t{\n\t\tvar that = this;\n\n\t\tif ( oConfig.fnInit !== null )\n\t\t{\n\t\t\toConfig.fnInit.call( this, nButton, oConfig );\n\t\t}\n\n\t\tif ( oConfig.sToolTip !== \"\" )\n\t\t{\n\t\t\tnButton.title = oConfig.sToolTip;\n\t\t}\n\n\t\t$(nButton).hover( function () {\n\t\t\tif ( oConfig.fnMouseover !== null )\n\t\t\t{\n\t\t\t\toConfig.fnMouseover.call( this, nButton, oConfig, null );\n\t\t\t}\n\t\t}, function () {\n\t\t\tif ( oConfig.fnMouseout !== null )\n\t\t\t{\n\t\t\t\toConfig.fnMouseout.call( this, nButton, oConfig, null );\n\t\t\t}\n\t\t} );\n\n\t\tif ( oConfig.fnSelect !== null )\n\t\t{\n\t\t\tTableTools._fnEventListen( this, 'select', function (n) {\n\t\t\t\toConfig.fnSelect.call( that, nButton, oConfig, n );\n\t\t\t} );\n\t\t}\n\n\t\t$(nButton).click( function (e) {\n\t\t\t//e.preventDefault();\n\n\t\t\tif ( oConfig.fnClick !== null )\n\t\t\t{\n\t\t\t\toConfig.fnClick.call( that, nButton, oConfig, null, e );\n\t\t\t}\n\n\t\t\t/* Provide a complete function to match the behaviour of the flash elements */\n\t\t\tif ( oConfig.fnComplete !== null )\n\t\t\t{\n\t\t\t\toConfig.fnComplete.call( that, nButton, oConfig, null, null );\n\t\t\t}\n\n\t\t\tthat._fnCollectionHide( nButton, oConfig );\n\t\t} );\n\t},\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Flash button functions\n\t */\n\t\n\t/**\n\t * Check if the Flash plug-in is available\n\t *  @method  _fnHasFlash\n\t *  @returns {boolean} `true` if Flash available, `false` otherwise\n\t *  @private \n\t */\n\t\"_fnHasFlash\": function ()\n\t{\n\t\ttry {\n\t\t\tvar fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');\n\t\t\tif (fo) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tcatch (e) {\n\t\t\tif (\n\t\t\t\tnavigator.mimeTypes &&\n\t\t\t\tnavigator.mimeTypes['application/x-shockwave-flash'] !== undefined &&\n\t\t\t\tnavigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\n\t/**\n\t * Configure a flash based button for interaction events\n\t *  @method  _fnFlashConfig\n\t *  @param   {Node} nButton Button element which is being considered\n\t *  @param   {o} oConfig Button configuration object\n\t *  @returns void\n\t *  @private \n\t */\n\t\"_fnFlashConfig\": function ( nButton, oConfig )\n\t{\n\t\tvar that = this;\n\t\tvar flash = new ZeroClipboard_TableTools.Client();\n\n\t\tif ( oConfig.fnInit !== null )\n\t\t{\n\t\t\toConfig.fnInit.call( this, nButton, oConfig );\n\t\t}\n\n\t\tflash.setHandCursor( true );\n\n\t\tif ( oConfig.sAction == \"flash_save\" )\n\t\t{\n\t\t\tflash.setAction( 'save' );\n\t\t\tflash.setCharSet( (oConfig.sCharSet==\"utf16le\") ? 'UTF16LE' : 'UTF8' );\n\t\t\tflash.setBomInc( oConfig.bBomInc );\n\t\t\tflash.setFileName( oConfig.sFileName.replace('*', this.fnGetTitle(oConfig)) );\n\t\t}\n\t\telse if ( oConfig.sAction == \"flash_pdf\" )\n\t\t{\n\t\t\tflash.setAction( 'pdf' );\n\t\t\tflash.setFileName( oConfig.sFileName.replace('*', this.fnGetTitle(oConfig)) );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tflash.setAction( 'copy' );\n\t\t}\n\n\t\tflash.addEventListener('mouseOver', function(client) {\n\t\t\tif ( oConfig.fnMouseover !== null )\n\t\t\t{\n\t\t\t\toConfig.fnMouseover.call( that, nButton, oConfig, flash );\n\t\t\t}\n\t\t} );\n\n\t\tflash.addEventListener('mouseOut', function(client) {\n\t\t\tif ( oConfig.fnMouseout !== null )\n\t\t\t{\n\t\t\t\toConfig.fnMouseout.call( that, nButton, oConfig, flash );\n\t\t\t}\n\t\t} );\n\n\t\tflash.addEventListener('mouseDown', function(client) {\n\t\t\tif ( oConfig.fnClick !== null )\n\t\t\t{\n\t\t\t\toConfig.fnClick.call( that, nButton, oConfig, flash );\n\t\t\t}\n\t\t} );\n\n\t\tflash.addEventListener('complete', function (client, text) {\n\t\t\tif ( oConfig.fnComplete !== null )\n\t\t\t{\n\t\t\t\toConfig.fnComplete.call( that, nButton, oConfig, flash, text );\n\t\t\t}\n\t\t\tthat._fnCollectionHide( nButton, oConfig );\n\t\t} );\n\n\t\tif ( oConfig.fnSelect !== null )\n\t\t{\n\t\t\tTableTools._fnEventListen( this, 'select', function (n) {\n\t\t\t\toConfig.fnSelect.call( that, nButton, oConfig, n );\n\t\t\t} );\n\t\t}\n\n\t\tthis._fnFlashGlue( flash, nButton, oConfig.sToolTip );\n\t},\n\n\n\t/**\n\t * Wait until the id is in the DOM before we \"glue\" the swf. Note that this function will call\n\t * itself (using setTimeout) until it completes successfully\n\t *  @method  _fnFlashGlue\n\t *  @param   {Object} clip Zero clipboard object\n\t *  @param   {Node} node node to glue swf to\n\t *  @param   {String} text title of the flash movie\n\t *  @returns void\n\t *  @private \n\t */\n\t\"_fnFlashGlue\": function ( flash, node, text )\n\t{\n\t\tvar that = this;\n\t\tvar id = node.getAttribute('id');\n\n\t\tif ( document.getElementById(id) )\n\t\t{\n\t\t\tflash.glue( node, text );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsetTimeout( function () {\n\t\t\t\tthat._fnFlashGlue( flash, node, text );\n\t\t\t}, 100 );\n\t\t}\n\t},\n\n\n\t/**\n\t * Set the text for the flash clip to deal with\n\t * \n\t * This function is required for large information sets. There is a limit on the \n\t * amount of data that can be transferred between Javascript and Flash in a single call, so\n\t * we use this method to build up the text in Flash by sending over chunks. It is estimated\n\t * that the data limit is around 64k, although it is undocumented, and appears to be different\n\t * between different flash versions. We chunk at 8KiB.\n\t *  @method  _fnFlashSetText\n\t *  @param   {Object} clip the ZeroClipboard object\n\t *  @param   {String} sData the data to be set\n\t *  @returns void\n\t *  @private \n\t */\n\t\"_fnFlashSetText\": function ( clip, sData )\n\t{\n\t\tvar asData = this._fnChunkData( sData, 8192 );\n\n\t\tclip.clearText();\n\t\tfor ( var i=0, iLen=asData.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tclip.appendText( asData[i] );\n\t\t}\n\t},\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Data retrieval functions\n\t */\n\n\t/**\n\t * Convert the mixed columns variable into a boolean array the same size as the columns, which\n\t * indicates which columns we want to include\n\t *  @method  _fnColumnTargets\n\t *  @param   {String|Array} mColumns The columns to be included in data retrieval. If a string\n\t *\t\t\t then it can take the value of \"visible\" or \"hidden\" (to include all visible or\n\t *\t\t\t hidden columns respectively). Or an array of column indexes\n\t *  @returns {Array} A boolean array the length of the columns of the table, which each value\n\t *\t\t\t indicating if the column is to be included or not\n\t *  @private \n\t */\n\t\"_fnColumnTargets\": function ( mColumns )\n\t{\n\t\tvar aColumns = [];\n\t\tvar dt = this.s.dt;\n\t\tvar i, iLen;\n\t\tvar columns = dt.aoColumns;\n\t\tvar columnCount = columns.length;\n\n\t\tif ( typeof mColumns == \"function\" )\n\t\t{\n\t\t\tvar a = mColumns.call( this, dt );\n\n\t\t\tfor ( i=0, iLen=columnCount ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\taColumns.push( $.inArray( i, a ) !== -1 ? true : false );\n\t\t\t}\n\t\t}\n\t\telse if ( typeof mColumns == \"object\" )\n\t\t{\n\t\t\tfor ( i=0, iLen=columnCount ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\taColumns.push( false );\n\t\t\t}\n\n\t\t\tfor ( i=0, iLen=mColumns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\taColumns[ mColumns[i] ] = true;\n\t\t\t}\n\t\t}\n\t\telse if ( mColumns == \"visible\" )\n\t\t{\n\t\t\tfor ( i=0, iLen=columnCount ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\taColumns.push( columns[i].bVisible ? true : false );\n\t\t\t}\n\t\t}\n\t\telse if ( mColumns == \"hidden\" )\n\t\t{\n\t\t\tfor ( i=0, iLen=columnCount ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\taColumns.push( columns[i].bVisible ? false : true );\n\t\t\t}\n\t\t}\n\t\telse if ( mColumns == \"sortable\" )\n\t\t{\n\t\t\tfor ( i=0, iLen=columnCount ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\taColumns.push( columns[i].bSortable ? true : false );\n\t\t\t}\n\t\t}\n\t\telse /* all */\n\t\t{\n\t\t\tfor ( i=0, iLen=columnCount ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\taColumns.push( true );\n\t\t\t}\n\t\t}\n\n\t\treturn aColumns;\n\t},\n\n\n\t/**\n\t * New line character(s) depend on the platforms\n\t *  @method  method\n\t *  @param   {Object} oConfig Button configuration object - only interested in oConfig.sNewLine\n\t *  @returns {String} Newline character\n\t */\n\t\"_fnNewline\": function ( oConfig )\n\t{\n\t\tif ( oConfig.sNewLine == \"auto\" )\n\t\t{\n\t\t\treturn navigator.userAgent.match(/Windows/) ? \"\\r\\n\" : \"\\n\";\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn oConfig.sNewLine;\n\t\t}\n\t},\n\n\n\t/**\n\t * Get data from DataTables' internals and format it for output\n\t *  @method  _fnGetDataTablesData\n\t *  @param   {Object} oConfig Button configuration object\n\t *  @param   {String} oConfig.sFieldBoundary Field boundary for the data cells in the string\n\t *  @param   {String} oConfig.sFieldSeperator Field separator for the data cells\n\t *  @param   {String} oConfig.sNewline New line options\n\t *  @param   {Mixed} oConfig.mColumns Which columns should be included in the output\n\t *  @param   {Boolean} oConfig.bHeader Include the header\n\t *  @param   {Boolean} oConfig.bFooter Include the footer\n\t *  @param   {Boolean} oConfig.bSelectedOnly Include only the selected rows in the output\n\t *  @returns {String} Concatenated string of data\n\t *  @private \n\t */\n\t\"_fnGetDataTablesData\": function ( oConfig )\n\t{\n\t\tvar i, iLen, j, jLen;\n\t\tvar aRow, aData=[], sLoopData='', arr;\n\t\tvar dt = this.s.dt, tr, child;\n\t\tvar regex = new RegExp(oConfig.sFieldBoundary, \"g\"); /* Do it here for speed */\n\t\tvar aColumnsInc = this._fnColumnTargets( oConfig.mColumns );\n\t\tvar bSelectedOnly = (typeof oConfig.bSelectedOnly != 'undefined') ? oConfig.bSelectedOnly : false;\n\n\t\t/*\n\t\t * Header\n\t\t */\n\t\tif ( oConfig.bHeader )\n\t\t{\n\t\t\taRow = [];\n\n\t\t\tfor ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tif ( aColumnsInc[i] )\n\t\t\t\t{\n\t\t\t\t\tsLoopData = dt.aoColumns[i].sTitle.replace(/\\n/g,\" \").replace( /<.*?>/g, \"\" ).replace(/^\\s+|\\s+$/g,\"\");\n\t\t\t\t\tsLoopData = this._fnHtmlDecode( sLoopData );\n\n\t\t\t\t\taRow.push( this._fnBoundData( sLoopData, oConfig.sFieldBoundary, regex ) );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\taData.push( aRow.join(oConfig.sFieldSeperator) );\n\t\t}\n\n\t\tbSelectedOnly = true;\n\n\t\t/*\n\t\t * Body\n\t\t */\n\t\tvar aDataIndex;\n\t\tvar aSelected = this.fnGetSelectedIndexes();\n\t\tbSelectedOnly = this.s.select.type !== \"none\" && bSelectedOnly && aSelected.length !== 0;\n\n\t\tif ( bSelectedOnly ) {\n\t\t\t// Use the selected indexes\n\t\t\taDataIndex = aSelected;\n\t\t}\n\t\telse if ( DataTable.Api ) {\n\t\t\t// 1.10+ style\n\t\t\taDataIndex = new DataTable.Api( dt )\n\t\t\t\t.rows( oConfig.oSelectorOpts )\n\t\t\t\t.indexes()\n\t\t\t\t.flatten()\n\t\t\t\t.toArray();\n\t\t}\n\t\telse {\n\t\t\t// 1.9- style\n\t\t\taDataIndex = dt.oInstance\n\t\t\t\t.$('tr', oConfig.oSelectorOpts)\n\t\t\t\t.map( function (id, row) {\n\t\t\t\t\treturn dt.oInstance.fnGetPosition( row );\n\t\t\t\t} )\n\t\t\t\t.get();\n\t\t}\n\n\t\tfor ( j=0, jLen=aDataIndex.length ; j<jLen ; j++ )\n\t\t{\n\t\t\ttr = dt.aoData[ aDataIndex[j] ].nTr;\n\t\t\taRow = [];\n\n\t\t\t/* Columns */\n\t\t\tfor ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tif ( aColumnsInc[i] )\n\t\t\t\t{\n\t\t\t\t\t/* Convert to strings (with small optimisation) */\n\t\t\t\t\tvar mTypeData = dt.oApi._fnGetCellData( dt, aDataIndex[j], i, 'display' );\n\t\t\t\t\tif ( oConfig.fnCellRender )\n\t\t\t\t\t{\n\t\t\t\t\t\tsLoopData = oConfig.fnCellRender( mTypeData, i, tr, aDataIndex[j] )+\"\";\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof mTypeData == \"string\" )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Strip newlines, replace img tags with alt attr. and finally strip html... */\n\t\t\t\t\t\tsLoopData = mTypeData.replace(/\\n/g,\" \");\n\t\t\t\t\t\tsLoopData =\n\t\t\t\t\t\t    sLoopData.replace(/<img.*?\\s+alt\\s*=\\s*(?:\"([^\"]+)\"|'([^']+)'|([^\\s>]+)).*?>/gi,\n\t\t\t\t\t\t        '$1$2$3');\n\t\t\t\t\t\tsLoopData = sLoopData.replace( /<.*?>/g, \"\" );\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tsLoopData = mTypeData+\"\";\n\t\t\t\t\t}\n\n\t\t\t\t\t/* Trim and clean the data */\n\t\t\t\t\tsLoopData = sLoopData.replace(/^\\s+/, '').replace(/\\s+$/, '');\n\t\t\t\t\tsLoopData = this._fnHtmlDecode( sLoopData );\n\n\t\t\t\t\t/* Bound it and add it to the total data */\n\t\t\t\t\taRow.push( this._fnBoundData( sLoopData, oConfig.sFieldBoundary, regex ) );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\taData.push( aRow.join(oConfig.sFieldSeperator) );\n\n\t\t\t/* Details rows from fnOpen */\n\t\t\tif ( oConfig.bOpenRows )\n\t\t\t{\n\t\t\t\tarr = $.grep(dt.aoOpenRows, function(o) { return o.nParent === tr; });\n\n\t\t\t\tif ( arr.length === 1 )\n\t\t\t\t{\n\t\t\t\t\tsLoopData = this._fnBoundData( $('td', arr[0].nTr).html(), oConfig.sFieldBoundary, regex );\n\t\t\t\t\taData.push( sLoopData );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/*\n\t\t * Footer\n\t\t */\n\t\tif ( oConfig.bFooter && dt.nTFoot !== null )\n\t\t{\n\t\t\taRow = [];\n\n\t\t\tfor ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tif ( aColumnsInc[i] && dt.aoColumns[i].nTf !== null )\n\t\t\t\t{\n\t\t\t\t\tsLoopData = dt.aoColumns[i].nTf.innerHTML.replace(/\\n/g,\" \").replace( /<.*?>/g, \"\" );\n\t\t\t\t\tsLoopData = this._fnHtmlDecode( sLoopData );\n\n\t\t\t\t\taRow.push( this._fnBoundData( sLoopData, oConfig.sFieldBoundary, regex ) );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\taData.push( aRow.join(oConfig.sFieldSeperator) );\n\t\t}\n\n\t\tvar _sLastData = aData.join( this._fnNewline(oConfig) );\n\t\treturn _sLastData;\n\t},\n\n\n\t/**\n\t * Wrap data up with a boundary string\n\t *  @method  _fnBoundData\n\t *  @param   {String} sData data to bound\n\t *  @param   {String} sBoundary bounding char(s)\n\t *  @param   {RegExp} regex search for the bounding chars - constructed outside for efficiency\n\t *\t\t\t in the loop\n\t *  @returns {String} bound data\n\t *  @private \n\t */\n\t\"_fnBoundData\": function ( sData, sBoundary, regex )\n\t{\n\t\tif ( sBoundary === \"\" )\n\t\t{\n\t\t\treturn sData;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn sBoundary + sData.replace(regex, sBoundary+sBoundary) + sBoundary;\n\t\t}\n\t},\n\n\n\t/**\n\t * Break a string up into an array of smaller strings\n\t *  @method  _fnChunkData\n\t *  @param   {String} sData data to be broken up\n\t *  @param   {Int} iSize chunk size\n\t *  @returns {Array} String array of broken up text\n\t *  @private \n\t */\n\t\"_fnChunkData\": function ( sData, iSize )\n\t{\n\t\tvar asReturn = [];\n\t\tvar iStrlen = sData.length;\n\n\t\tfor ( var i=0 ; i<iStrlen ; i+=iSize )\n\t\t{\n\t\t\tif ( i+iSize < iStrlen )\n\t\t\t{\n\t\t\t\tasReturn.push( sData.substring( i, i+iSize ) );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tasReturn.push( sData.substring( i, iStrlen ) );\n\t\t\t}\n\t\t}\n\n\t\treturn asReturn;\n\t},\n\n\n\t/**\n\t * Decode HTML entities\n\t *  @method  _fnHtmlDecode\n\t *  @param   {String} sData encoded string\n\t *  @returns {String} decoded string\n\t *  @private \n\t */\n\t\"_fnHtmlDecode\": function ( sData )\n\t{\n\t\tif ( sData.indexOf('&') === -1 )\n\t\t{\n\t\t\treturn sData;\n\t\t}\n\n\t\tvar n = document.createElement('div');\n\n\t\treturn sData.replace( /&([^\\s]*?);/g, function( match, match2 ) {\n\t\t\tif ( match.substr(1, 1) === '#' )\n\t\t\t{\n\t\t\t\treturn String.fromCharCode( Number(match2.substr(1)) );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tn.innerHTML = match;\n\t\t\t\treturn n.childNodes[0].nodeValue;\n\t\t\t}\n\t\t} );\n\t},\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Printing functions\n\t */\n\n\t/**\n\t * Show print display\n\t *  @method  _fnPrintStart\n\t *  @param   {Event} e Event object\n\t *  @param   {Object} oConfig Button configuration object\n\t *  @returns void\n\t *  @private \n\t */\n\t\"_fnPrintStart\": function ( oConfig )\n\t{\n\t  var that = this;\n\t  var oSetDT = this.s.dt;\n\n\t\t/* Parse through the DOM hiding everything that isn't needed for the table */\n\t\tthis._fnPrintHideNodes( oSetDT.nTable );\n\n\t\t/* Show the whole table */\n\t\tthis.s.print.saveStart = oSetDT._iDisplayStart;\n\t\tthis.s.print.saveLength = oSetDT._iDisplayLength;\n\n\t\tif ( oConfig.bShowAll )\n\t\t{\n\t\t\toSetDT._iDisplayStart = 0;\n\t\t\toSetDT._iDisplayLength = -1;\n\t\t\tif ( oSetDT.oApi._fnCalculateEnd ) {\n\t\t\t\toSetDT.oApi._fnCalculateEnd( oSetDT );\n\t\t\t}\n\t\t\toSetDT.oApi._fnDraw( oSetDT );\n\t\t}\n\n\t\t/* Adjust the display for scrolling which might be done by DataTables */\n\t\tif ( oSetDT.oScroll.sX !== \"\" || oSetDT.oScroll.sY !== \"\" )\n\t\t{\n\t\t\tthis._fnPrintScrollStart( oSetDT );\n\n\t\t\t// If the table redraws while in print view, the DataTables scrolling\n\t\t\t// setup would hide the header, so we need to readd it on draw\n\t\t\t$(this.s.dt.nTable).bind('draw.DTTT_Print', function () {\n\t\t\t\tthat._fnPrintScrollStart( oSetDT );\n\t\t\t} );\n\t\t}\n\n\t\t/* Remove the other DataTables feature nodes - but leave the table! and info div */\n\t\tvar anFeature = oSetDT.aanFeatures;\n\t\tfor ( var cFeature in anFeature )\n\t\t{\n\t\t\tif ( cFeature != 'i' && cFeature != 't' && cFeature.length == 1 )\n\t\t\t{\n\t\t\t\tfor ( var i=0, iLen=anFeature[cFeature].length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\tthis.dom.print.hidden.push( {\n\t\t\t\t\t\t\"node\": anFeature[cFeature][i],\n\t\t\t\t\t\t\"display\": \"block\"\n\t\t\t\t\t} );\n\t\t\t\t\tanFeature[cFeature][i].style.display = \"none\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/* Print class can be used for styling */\n\t\t$(document.body).addClass( this.classes.print.body );\n\n\t\t/* Show information message to let the user know what is happening */\n\t\tif ( oConfig.sInfo !== \"\" )\n\t\t{\n\t\t\tthis.fnInfo( oConfig.sInfo, 3000 );\n\t\t}\n\n\t\t/* Add a message at the top of the page */\n\t\tif ( oConfig.sMessage )\n\t\t{\n\t\t\t$('<div/>')\n\t\t\t\t.addClass( this.classes.print.message )\n\t\t\t\t.html( oConfig.sMessage )\n\t\t\t\t.prependTo( 'body' );\n\t\t}\n\n\t\t/* Cache the scrolling and the jump to the top of the page */\n\t\tthis.s.print.saveScroll = $(window).scrollTop();\n\t\twindow.scrollTo( 0, 0 );\n\n\t\t/* Bind a key event listener to the document for the escape key -\n\t\t * it is removed in the callback\n\t\t */\n\t\t$(document).bind( \"keydown.DTTT\", function(e) {\n\t\t\t/* Only interested in the escape key */\n\t\t\tif ( e.keyCode == 27 )\n\t\t\t{\n\t\t\t\te.preventDefault();\n\t\t\t\tthat._fnPrintEnd.call( that, e );\n\t\t\t}\n\t\t} );\n\t},\n\n\n\t/**\n\t * Printing is finished, resume normal display\n\t *  @method  _fnPrintEnd\n\t *  @param   {Event} e Event object\n\t *  @returns void\n\t *  @private \n\t */\n\t\"_fnPrintEnd\": function ( e )\n\t{\n\t\tvar that = this;\n\t\tvar oSetDT = this.s.dt;\n\t\tvar oSetPrint = this.s.print;\n\t\tvar oDomPrint = this.dom.print;\n\n\t\t/* Show all hidden nodes */\n\t\tthis._fnPrintShowNodes();\n\n\t\t/* Restore DataTables' scrolling */\n\t\tif ( oSetDT.oScroll.sX !== \"\" || oSetDT.oScroll.sY !== \"\" )\n\t\t{\n\t\t\t$(this.s.dt.nTable).unbind('draw.DTTT_Print');\n\n\t\t\tthis._fnPrintScrollEnd();\n\t\t}\n\n\t\t/* Restore the scroll */\n\t\twindow.scrollTo( 0, oSetPrint.saveScroll );\n\n\t\t/* Drop the print message */\n\t\t$('div.'+this.classes.print.message).remove();\n\n\t\t/* Styling class */\n\t\t$(document.body).removeClass( 'DTTT_Print' );\n\n\t\t/* Restore the table length */\n\t\toSetDT._iDisplayStart = oSetPrint.saveStart;\n\t\toSetDT._iDisplayLength = oSetPrint.saveLength;\n\t\tif ( oSetDT.oApi._fnCalculateEnd ) {\n\t\t\toSetDT.oApi._fnCalculateEnd( oSetDT );\n\t\t}\n\t\toSetDT.oApi._fnDraw( oSetDT );\n\n\t\t$(document).unbind( \"keydown.DTTT\" );\n\t},\n\n\n\t/**\n\t * Take account of scrolling in DataTables by showing the full table\n\t *  @returns void\n\t *  @private \n\t */\n\t\"_fnPrintScrollStart\": function ()\n\t{\n\t\tvar\n\t\t\toSetDT = this.s.dt,\n\t\t\tnScrollHeadInner = oSetDT.nScrollHead.getElementsByTagName('div')[0],\n\t\t\tnScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0],\n\t\t\tnScrollBody = oSetDT.nTable.parentNode,\n\t\t\tnTheadSize, nTfootSize;\n\n\t\t/* Copy the header in the thead in the body table, this way we show one single table when\n\t\t * in print view. Note that this section of code is more or less verbatim from DT 1.7.0\n\t\t */\n\t\tnTheadSize = oSetDT.nTable.getElementsByTagName('thead');\n\t\tif ( nTheadSize.length > 0 )\n\t\t{\n\t\t\toSetDT.nTable.removeChild( nTheadSize[0] );\n\t\t}\n\n\t\tif ( oSetDT.nTFoot !== null )\n\t\t{\n\t\t\tnTfootSize = oSetDT.nTable.getElementsByTagName('tfoot');\n\t\t\tif ( nTfootSize.length > 0 )\n\t\t\t{\n\t\t\t\toSetDT.nTable.removeChild( nTfootSize[0] );\n\t\t\t}\n\t\t}\n\n\t\tnTheadSize = oSetDT.nTHead.cloneNode(true);\n\t\toSetDT.nTable.insertBefore( nTheadSize, oSetDT.nTable.childNodes[0] );\n\n\t\tif ( oSetDT.nTFoot !== null )\n\t\t{\n\t\t\tnTfootSize = oSetDT.nTFoot.cloneNode(true);\n\t\t\toSetDT.nTable.insertBefore( nTfootSize, oSetDT.nTable.childNodes[1] );\n\t\t}\n\n\t\t/* Now adjust the table's viewport so we can actually see it */\n\t\tif ( oSetDT.oScroll.sX !== \"\" )\n\t\t{\n\t\t\toSetDT.nTable.style.width = $(oSetDT.nTable).outerWidth()+\"px\";\n\t\t\tnScrollBody.style.width = $(oSetDT.nTable).outerWidth()+\"px\";\n\t\t\tnScrollBody.style.overflow = \"visible\";\n\t\t}\n\n\t\tif ( oSetDT.oScroll.sY !== \"\" )\n\t\t{\n\t\t\tnScrollBody.style.height = $(oSetDT.nTable).outerHeight()+\"px\";\n\t\t\tnScrollBody.style.overflow = \"visible\";\n\t\t}\n\t},\n\n\n\t/**\n\t * Take account of scrolling in DataTables by showing the full table. Note that the redraw of\n\t * the DataTable that we do will actually deal with the majority of the hard work here\n\t *  @returns void\n\t *  @private \n\t */\n\t\"_fnPrintScrollEnd\": function ()\n\t{\n\t\tvar\n\t\t\toSetDT = this.s.dt,\n\t\t\tnScrollBody = oSetDT.nTable.parentNode;\n\n\t\tif ( oSetDT.oScroll.sX !== \"\" )\n\t\t{\n\t\t\tnScrollBody.style.width = oSetDT.oApi._fnStringToCss( oSetDT.oScroll.sX );\n\t\t\tnScrollBody.style.overflow = \"auto\";\n\t\t}\n\n\t\tif ( oSetDT.oScroll.sY !== \"\" )\n\t\t{\n\t\t\tnScrollBody.style.height = oSetDT.oApi._fnStringToCss( oSetDT.oScroll.sY );\n\t\t\tnScrollBody.style.overflow = \"auto\";\n\t\t}\n\t},\n\n\n\t/**\n\t * Resume the display of all TableTools hidden nodes\n\t *  @method  _fnPrintShowNodes\n\t *  @returns void\n\t *  @private \n\t */\n\t\"_fnPrintShowNodes\": function ( )\n\t{\n\t  var anHidden = this.dom.print.hidden;\n\n\t\tfor ( var i=0, iLen=anHidden.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tanHidden[i].node.style.display = anHidden[i].display;\n\t\t}\n\t\tanHidden.splice( 0, anHidden.length );\n\t},\n\n\n\t/**\n\t * Hide nodes which are not needed in order to display the table. Note that this function is\n\t * recursive\n\t *  @method  _fnPrintHideNodes\n\t *  @param   {Node} nNode Element which should be showing in a 'print' display\n\t *  @returns void\n\t *  @private \n\t */\n\t\"_fnPrintHideNodes\": function ( nNode )\n\t{\n\t\tvar anHidden = this.dom.print.hidden;\n\n\t\tvar nParent = nNode.parentNode;\n\t\tvar nChildren = nParent.childNodes;\n\t\tfor ( var i=0, iLen=nChildren.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( nChildren[i] != nNode && nChildren[i].nodeType == 1 )\n\t\t\t{\n\t\t\t\t/* If our node is shown (don't want to show nodes which were previously hidden) */\n\t\t\t\tvar sDisplay = $(nChildren[i]).css(\"display\");\n\t\t\t\tif ( sDisplay != \"none\" )\n\t\t\t\t{\n\t\t\t\t\t/* Cache the node and it's previous state so we can restore it */\n\t\t\t\t\tanHidden.push( {\n\t\t\t\t\t\t\"node\": nChildren[i],\n\t\t\t\t\t\t\"display\": sDisplay\n\t\t\t\t\t} );\n\t\t\t\t\tnChildren[i].style.display = \"none\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( nParent.nodeName.toUpperCase() != \"BODY\" )\n\t\t{\n\t\t\tthis._fnPrintHideNodes( nParent );\n\t\t}\n\t}\n};\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Static variables\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Store of all instances that have been created of TableTools, so one can look up other (when\n * there is need of a master)\n *  @property _aInstances\n *  @type\t Array\n *  @default  []\n *  @private\n */\nTableTools._aInstances = [];\n\n\n/**\n * Store of all listeners and their callback functions\n *  @property _aListeners\n *  @type\t Array\n *  @default  []\n */\nTableTools._aListeners = [];\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Static methods\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Get an array of all the master instances\n *  @method  fnGetMasters\n *  @returns {Array} List of master TableTools instances\n *  @static\n */\nTableTools.fnGetMasters = function ()\n{\n\tvar a = [];\n\tfor ( var i=0, iLen=TableTools._aInstances.length ; i<iLen ; i++ )\n\t{\n\t\tif ( TableTools._aInstances[i].s.master )\n\t\t{\n\t\t\ta.push( TableTools._aInstances[i] );\n\t\t}\n\t}\n\treturn a;\n};\n\n/**\n * Get the master instance for a table node (or id if a string is given)\n *  @method  fnGetInstance\n *  @returns {Object} ID of table OR table node, for which we want the TableTools instance\n *  @static\n */\nTableTools.fnGetInstance = function ( node )\n{\n\tif ( typeof node != 'object' )\n\t{\n\t\tnode = document.getElementById(node);\n\t}\n\n\tfor ( var i=0, iLen=TableTools._aInstances.length ; i<iLen ; i++ )\n\t{\n\t\tif ( TableTools._aInstances[i].s.master && TableTools._aInstances[i].dom.table == node )\n\t\t{\n\t\t\treturn TableTools._aInstances[i];\n\t\t}\n\t}\n\treturn null;\n};\n\n\n/**\n * Add a listener for a specific event\n *  @method  _fnEventListen\n *  @param   {Object} that Scope of the listening function (i.e. 'this' in the caller)\n *  @param   {String} type Event type\n *  @param   {Function} fn Function\n *  @returns void\n *  @private\n *  @static\n */\nTableTools._fnEventListen = function ( that, type, fn )\n{\n\tTableTools._aListeners.push( {\n\t\t\"that\": that,\n\t\t\"type\": type,\n\t\t\"fn\": fn\n\t} );\n};\n\n\n/**\n * An event has occurred - look up every listener and fire it off. We check that the event we are\n * going to fire is attached to the same table (using the table node as reference) before firing\n *  @method  _fnEventDispatch\n *  @param   {Object} that Scope of the listening function (i.e. 'this' in the caller)\n *  @param   {String} type Event type\n *  @param   {Node} node Element that the event occurred on (may be null)\n *  @param   {boolean} [selected] Indicate if the node was selected (true) or deselected (false)\n *  @returns void\n *  @private\n *  @static\n */\nTableTools._fnEventDispatch = function ( that, type, node, selected )\n{\n\tvar listeners = TableTools._aListeners;\n\tfor ( var i=0, iLen=listeners.length ; i<iLen ; i++ )\n\t{\n\t\tif ( that.dom.table == listeners[i].that.dom.table && listeners[i].type == type )\n\t\t{\n\t\t\tlisteners[i].fn( node, selected );\n\t\t}\n\t}\n};\n\n\n\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Constants\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\n\nTableTools.buttonBase = {\n\t// Button base\n\t\"sAction\": \"text\",\n\t\"sTag\": \"default\",\n\t\"sLinerTag\": \"default\",\n\t\"sButtonClass\": \"DTTT_button_text\",\n\t\"sButtonText\": \"Button text\",\n\t\"sTitle\": \"\",\n\t\"sToolTip\": \"\",\n\n\t// Common button specific options\n\t\"sCharSet\": \"utf8\",\n\t\"bBomInc\": false,\n\t\"sFileName\": \"*.csv\",\n\t\"sFieldBoundary\": \"\",\n\t\"sFieldSeperator\": \"\\t\",\n\t\"sNewLine\": \"auto\",\n\t\"mColumns\": \"all\", /* \"all\", \"visible\", \"hidden\" or array of column integers */\n\t\"bHeader\": true,\n\t\"bFooter\": true,\n\t\"bOpenRows\": false,\n\t\"bSelectedOnly\": false,\n\t\"oSelectorOpts\": undefined, // See http://datatables.net/docs/DataTables/1.9.4/#$ for full options\n\n\t// Callbacks\n\t\"fnMouseover\": null,\n\t\"fnMouseout\": null,\n\t\"fnClick\": null,\n\t\"fnSelect\": null,\n\t\"fnComplete\": null,\n\t\"fnInit\": null,\n\t\"fnCellRender\": null\n};\n\n\n/**\n * @namespace Default button configurations\n */\nTableTools.BUTTONS = {\n\t\"csv\": $.extend( {}, TableTools.buttonBase, {\n\t\t\"sAction\": \"flash_save\",\n\t\t\"sButtonClass\": \"DTTT_button_csv\",\n\t\t\"sButtonText\": \"CSV\",\n\t\t\"sFieldBoundary\": '\"',\n\t\t\"sFieldSeperator\": \",\",\n\t\t\"fnClick\": function( nButton, oConfig, flash ) {\n\t\t\tthis.fnSetText( flash, this.fnGetTableData(oConfig) );\n\t\t}\n\t} ),\n\n\t\"xls\": $.extend( {}, TableTools.buttonBase, {\n\t\t\"sAction\": \"flash_save\",\n\t\t\"sCharSet\": \"utf16le\",\n\t\t\"bBomInc\": true,\n\t\t\"sButtonClass\": \"DTTT_button_xls\",\n\t\t\"sButtonText\": \"Excel\",\n\t\t\"fnClick\": function( nButton, oConfig, flash ) {\n\t\t\tthis.fnSetText( flash, this.fnGetTableData(oConfig) );\n\t\t}\n\t} ),\n\n\t\"copy\": $.extend( {}, TableTools.buttonBase, {\n\t\t\"sAction\": \"flash_copy\",\n\t\t\"sButtonClass\": \"DTTT_button_copy\",\n\t\t\"sButtonText\": \"Copy\",\n\t\t\"fnClick\": function( nButton, oConfig, flash ) {\n\t\t\tthis.fnSetText( flash, this.fnGetTableData(oConfig) );\n\t\t},\n\t\t\"fnComplete\": function(nButton, oConfig, flash, text) {\n\t\t\tvar lines = text.split('\\n').length;\n            if (oConfig.bHeader) lines--;\n            if (this.s.dt.nTFoot !== null && oConfig.bFooter) lines--;\n\t\t\tvar plural = (lines==1) ? \"\" : \"s\";\n\t\t\tthis.fnInfo( '<h6>Table copied</h6>'+\n\t\t\t\t'<p>Copied '+lines+' row'+plural+' to the clipboard.</p>',\n\t\t\t\t1500\n\t\t\t);\n\t\t}\n\t} ),\n\n\t\"pdf\": $.extend( {}, TableTools.buttonBase, {\n\t\t\"sAction\": \"flash_pdf\",\n\t\t\"sNewLine\": \"\\n\",\n\t\t\"sFileName\": \"*.pdf\",\n\t\t\"sButtonClass\": \"DTTT_button_pdf\",\n\t\t\"sButtonText\": \"PDF\",\n\t\t\"sPdfOrientation\": \"portrait\",\n\t\t\"sPdfSize\": \"A4\",\n\t\t\"sPdfMessage\": \"\",\n\t\t\"fnClick\": function( nButton, oConfig, flash ) {\n\t\t\tthis.fnSetText( flash,\n\t\t\t\t\"title:\"+ this.fnGetTitle(oConfig) +\"\\n\"+\n\t\t\t\t\"message:\"+ oConfig.sPdfMessage +\"\\n\"+\n\t\t\t\t\"colWidth:\"+ this.fnCalcColRatios(oConfig) +\"\\n\"+\n\t\t\t\t\"orientation:\"+ oConfig.sPdfOrientation +\"\\n\"+\n\t\t\t\t\"size:\"+ oConfig.sPdfSize +\"\\n\"+\n\t\t\t\t\"--/TableToolsOpts--\\n\" +\n\t\t\t\tthis.fnGetTableData(oConfig)\n\t\t\t);\n\t\t}\n\t} ),\n\n\t\"print\": $.extend( {}, TableTools.buttonBase, {\n\t\t\"sInfo\": \"<h6>Print view</h6><p>Please use your browser's print function to \"+\n\t\t  \"print this table. Press escape when finished.</p>\",\n\t\t\"sMessage\": null,\n\t\t\"bShowAll\": true,\n\t\t\"sToolTip\": \"View print view\",\n\t\t\"sButtonClass\": \"DTTT_button_print\",\n\t\t\"sButtonText\": \"Print\",\n\t\t\"fnClick\": function ( nButton, oConfig ) {\n\t\t\tthis.fnPrint( true, oConfig );\n\t\t}\n\t} ),\n\n\t\"text\": $.extend( {}, TableTools.buttonBase ),\n\n\t\"select\": $.extend( {}, TableTools.buttonBase, {\n\t\t\"sButtonText\": \"Select button\",\n\t\t\"fnSelect\": function( nButton, oConfig ) {\n\t\t\tif ( this.fnGetSelected().length !== 0 ) {\n\t\t\t\t$(nButton).removeClass( this.classes.buttons.disabled );\n\t\t\t} else {\n\t\t\t\t$(nButton).addClass( this.classes.buttons.disabled );\n\t\t\t}\n\t\t},\n\t\t\"fnInit\": function( nButton, oConfig ) {\n\t\t\t$(nButton).addClass( this.classes.buttons.disabled );\n\t\t}\n\t} ),\n\n\t\"select_single\": $.extend( {}, TableTools.buttonBase, {\n\t\t\"sButtonText\": \"Select button\",\n\t\t\"fnSelect\": function( nButton, oConfig ) {\n\t\t\tvar iSelected = this.fnGetSelected().length;\n\t\t\tif ( iSelected == 1 ) {\n\t\t\t\t$(nButton).removeClass( this.classes.buttons.disabled );\n\t\t\t} else {\n\t\t\t\t$(nButton).addClass( this.classes.buttons.disabled );\n\t\t\t}\n\t\t},\n\t\t\"fnInit\": function( nButton, oConfig ) {\n\t\t\t$(nButton).addClass( this.classes.buttons.disabled );\n\t\t}\n\t} ),\n\n\t\"select_all\": $.extend( {}, TableTools.buttonBase, {\n\t\t\"sButtonText\": \"Select all\",\n\t\t\"fnClick\": function( nButton, oConfig ) {\n\t\t\tthis.fnSelectAll();\n\t\t},\n\t\t\"fnSelect\": function( nButton, oConfig ) {\n\t\t\tif ( this.fnGetSelected().length == this.s.dt.fnRecordsDisplay() ) {\n\t\t\t\t$(nButton).addClass( this.classes.buttons.disabled );\n\t\t\t} else {\n\t\t\t\t$(nButton).removeClass( this.classes.buttons.disabled );\n\t\t\t}\n\t\t}\n\t} ),\n\n\t\"select_none\": $.extend( {}, TableTools.buttonBase, {\n\t\t\"sButtonText\": \"Deselect all\",\n\t\t\"fnClick\": function( nButton, oConfig ) {\n\t\t\tthis.fnSelectNone();\n\t\t},\n\t\t\"fnSelect\": function( nButton, oConfig ) {\n\t\t\tif ( this.fnGetSelected().length !== 0 ) {\n\t\t\t\t$(nButton).removeClass( this.classes.buttons.disabled );\n\t\t\t} else {\n\t\t\t\t$(nButton).addClass( this.classes.buttons.disabled );\n\t\t\t}\n\t\t},\n\t\t\"fnInit\": function( nButton, oConfig ) {\n\t\t\t$(nButton).addClass( this.classes.buttons.disabled );\n\t\t}\n\t} ),\n\n\t\"ajax\": $.extend( {}, TableTools.buttonBase, {\n\t\t\"sAjaxUrl\": \"/xhr.php\",\n\t\t\"sButtonText\": \"Ajax button\",\n\t\t\"fnClick\": function( nButton, oConfig ) {\n\t\t\tvar sData = this.fnGetTableData(oConfig);\n\t\t\t$.ajax( {\n\t\t\t\t\"url\": oConfig.sAjaxUrl,\n\t\t\t\t\"data\": [\n\t\t\t\t\t{ \"name\": \"tableData\", \"value\": sData }\n\t\t\t\t],\n\t\t\t\t\"success\": oConfig.fnAjaxComplete,\n\t\t\t\t\"dataType\": \"json\",\n\t\t\t\t\"type\": \"POST\",\n\t\t\t\t\"cache\": false,\n\t\t\t\t\"error\": function () {\n\t\t\t\t\talert( \"Error detected when sending table data to server\" );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\t\t\"fnAjaxComplete\": function( json ) {\n\t\t\talert( 'Ajax complete' );\n\t\t}\n\t} ),\n\n\t\"div\": $.extend( {}, TableTools.buttonBase, {\n\t\t\"sAction\": \"div\",\n\t\t\"sTag\": \"div\",\n\t\t\"sButtonClass\": \"DTTT_nonbutton\",\n\t\t\"sButtonText\": \"Text button\"\n\t} ),\n\n\t\"collection\": $.extend( {}, TableTools.buttonBase, {\n\t\t\"sAction\": \"collection\",\n\t\t\"sButtonClass\": \"DTTT_button_collection\",\n\t\t\"sButtonText\": \"Collection\",\n\t\t\"fnClick\": function( nButton, oConfig ) {\n\t\t\tthis._fnCollectionShow(nButton, oConfig);\n\t\t}\n\t} )\n};\n/*\n *  on* callback parameters:\n *     1. node - button element\n *     2. object - configuration object for this button\n *     3. object - ZeroClipboard reference (flash button only)\n *     4. string - Returned string from Flash (flash button only - and only on 'complete')\n */\n\n// Alias to match the other plug-ins styling\nTableTools.buttons = TableTools.BUTTONS;\n\n\n/**\n * @namespace Classes used by TableTools - allows the styles to be override easily.\n *   Note that when TableTools initialises it will take a copy of the classes object\n *   and will use its internal copy for the remainder of its run time.\n */\nTableTools.classes = {\n\t\"container\": \"DTTT_container\",\n\t\"buttons\": {\n\t\t\"normal\": \"DTTT_button\",\n\t\t\"disabled\": \"DTTT_disabled\"\n\t},\n\t\"collection\": {\n\t\t\"container\": \"DTTT_collection\",\n\t\t\"background\": \"DTTT_collection_background\",\n\t\t\"buttons\": {\n\t\t\t\"normal\": \"DTTT_button\",\n\t\t\t\"disabled\": \"DTTT_disabled\"\n\t\t}\n\t},\n\t\"select\": {\n\t\t\"table\": \"DTTT_selectable\",\n\t\t\"row\": \"DTTT_selected selected\"\n\t},\n\t\"print\": {\n\t\t\"body\": \"DTTT_Print\",\n\t\t\"info\": \"DTTT_print_info\",\n\t\t\"message\": \"DTTT_PrintMessage\"\n\t}\n};\n\n\n/**\n * @namespace ThemeRoller classes - built in for compatibility with DataTables' \n *   bJQueryUI option.\n */\nTableTools.classes_themeroller = {\n\t\"container\": \"DTTT_container ui-buttonset ui-buttonset-multi\",\n\t\"buttons\": {\n\t\t\"normal\": \"DTTT_button ui-button ui-state-default\"\n\t},\n\t\"collection\": {\n\t\t\"container\": \"DTTT_collection ui-buttonset ui-buttonset-multi\"\n\t}\n};\n\n\n/**\n * @namespace TableTools default settings for initialisation\n */\nTableTools.DEFAULTS = {\n\t\"sSwfPath\":        \"../swf/copy_csv_xls_pdf.swf\",\n\t\"sRowSelect\":      \"none\",\n\t\"sRowSelector\":    \"tr\",\n\t\"sSelectedClass\":  null,\n\t\"fnPreRowSelect\":  null,\n\t\"fnRowSelected\":   null,\n\t\"fnRowDeselected\": null,\n\t\"aButtons\":        [ \"copy\", \"csv\", \"xls\", \"pdf\", \"print\" ],\n\t\"oTags\": {\n\t\t\"container\": \"div\",\n\t\t\"button\": \"a\", // We really want to use buttons here, but Firefox and IE ignore the\n\t\t                 // click on the Flash element in the button (but not mouse[in|out]).\n\t\t\"liner\": \"span\",\n\t\t\"collection\": {\n\t\t\t\"container\": \"div\",\n\t\t\t\"button\": \"a\",\n\t\t\t\"liner\": \"span\"\n\t\t}\n\t}\n};\n\n// Alias to match the other plug-ins\nTableTools.defaults = TableTools.DEFAULTS;\n\n\n/**\n * Name of this class\n *  @constant CLASS\n *  @type\t String\n *  @default  TableTools\n */\nTableTools.prototype.CLASS = \"TableTools\";\n\n\n/**\n * TableTools version\n *  @constant  VERSION\n *  @type\t  String\n *  @default   See code\n */\nTableTools.version = \"2.2.4\";\n\n\n\n// DataTables 1.10 API\n// \n// This will be extended in a big way in in TableTools 3 to provide API methods\n// such as rows().select() and rows.selected() etc, but for the moment the\n// tabletools() method simply returns the instance.\n\nif ( $.fn.dataTable.Api ) {\n\t$.fn.dataTable.Api.register( 'tabletools()', function () {\n\t\tvar tt = null;\n\n\t\tif ( this.context.length > 0 ) {\n\t\t\ttt = TableTools.fnGetInstance( this.context[0].nTable );\n\t\t}\n\n\t\treturn tt;\n\t} );\n}\n\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Initialisation\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/*\n * Register a new feature with DataTables\n */\nif ( typeof $.fn.dataTable == \"function\" &&\n\t typeof $.fn.dataTableExt.fnVersionCheck == \"function\" &&\n\t $.fn.dataTableExt.fnVersionCheck('1.9.0') )\n{\n\t$.fn.dataTableExt.aoFeatures.push( {\n\t\t\"fnInit\": function( oDTSettings ) {\n\t\t\tvar init = oDTSettings.oInit;\n\t\t\tvar opts = init ?\n\t\t\t\tinit.tableTools || init.oTableTools || {} :\n\t\t\t\t{};\n\n\t\t\treturn new TableTools( oDTSettings.oInstance, opts ).dom.container;\n\t\t},\n\t\t\"cFeature\": \"T\",\n\t\t\"sFeature\": \"TableTools\"\n\t} );\n}\nelse\n{\n\talert( \"Warning: TableTools requires DataTables 1.9.0 or newer - www.datatables.net/download\");\n}\n\n$.fn.DataTable.TableTools = TableTools;\n\n})(jQuery, window, document);\n\n/*\n * Register a new feature with DataTables\n */\nif ( typeof $.fn.dataTable == \"function\" &&\n\t typeof $.fn.dataTableExt.fnVersionCheck == \"function\" &&\n\t $.fn.dataTableExt.fnVersionCheck('1.9.0') )\n{\n\t$.fn.dataTableExt.aoFeatures.push( {\n\t\t\"fnInit\": function( oDTSettings ) {\n\t\t\tvar oOpts = typeof oDTSettings.oInit.oTableTools != 'undefined' ?\n\t\t\t\toDTSettings.oInit.oTableTools : {};\n\n\t\t\tvar oTT = new TableTools( oDTSettings.oInstance, oOpts );\n\t\t\tTableTools._aInstances.push( oTT );\n\n\t\t\treturn oTT.dom.container;\n\t\t},\n\t\t\"cFeature\": \"T\",\n\t\t\"sFeature\": \"TableTools\"\n\t} );\n}\nelse\n{\n\talert( \"Warning: TableTools 2 requires DataTables 1.9.0 or newer - www.datatables.net/download\");\n}\n\n\n$.fn.dataTable.TableTools = TableTools;\n$.fn.DataTable.TableTools = TableTools;\n\n\nreturn TableTools;\n}; // /factory\n\n\n// Define as an AMD module if possible\nif ( typeof define === 'function' && define.amd ) {\n\tdefine( ['jquery', 'datatables'], factory );\n}\nelse if ( typeof exports === 'object' ) {\n    // Node/CommonJS\n    factory( require('jquery'), require('datatables') );\n}\nelse if ( jQuery && !jQuery.fn.dataTable.TableTools ) {\n\t// Otherwise simply initialise as normal, stopping multiple evaluation\n\tfactory( jQuery, jQuery.fn.dataTable );\n}\n\n\n})(window, document);\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/jquery.dataTables.css",
    "content": "/*\n * Table styles\n */\ntable.dataTable {\n  width: 100%;\n  margin: 0 auto;\n  clear: both;\n  border-collapse: separate;\n  border-spacing: 0;\n  /*\n   * Header and footer styles\n   */\n  /*\n   * Body styles\n   */\n}\ntable.dataTable thead th,\ntable.dataTable tfoot th {\n  font-weight: bold;\n}\ntable.dataTable thead th,\ntable.dataTable thead td {\n  padding: 10px 18px;\n  border-bottom: 1px solid #111;\n}\ntable.dataTable thead th:active,\ntable.dataTable thead td:active {\n  outline: none;\n}\ntable.dataTable tfoot th,\ntable.dataTable tfoot td {\n  padding: 10px 18px 6px 18px;\n  border-top: 1px solid #111;\n}\ntable.dataTable thead .sorting,\ntable.dataTable thead .sorting_asc,\ntable.dataTable thead .sorting_desc {\n  cursor: pointer;\n  *cursor: hand;\n}\ntable.dataTable thead .sorting,\ntable.dataTable thead .sorting_asc,\ntable.dataTable thead .sorting_desc,\ntable.dataTable thead .sorting_asc_disabled,\ntable.dataTable thead .sorting_desc_disabled {\n  background-repeat: no-repeat;\n  background-position: center right;\n}\ntable.dataTable thead .sorting {\n  background-image: url(\"images/sort_both.png\");\n}\ntable.dataTable thead .sorting_asc {\n  background-image: url(\"images/sort_asc.png\");\n}\ntable.dataTable thead .sorting_desc {\n  background-image: url(\"images/sort_desc.png\");\n}\ntable.dataTable thead .sorting_asc_disabled {\n  background-image: url(\"images/sort_asc_disabled.png\");\n}\ntable.dataTable thead .sorting_desc_disabled {\n  background-image: url(\"images/sort_desc_disabled.png\");\n}\ntable.dataTable tbody tr {\n  background-color: #ffffff;\n}\ntable.dataTable tbody tr.selected {\n  background-color: #B0BED9;\n}\ntable.dataTable tbody th,\ntable.dataTable tbody td {\n  padding: 8px 10px;\n}\ntable.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {\n  border-top: 1px solid #ddd;\n}\ntable.dataTable.row-border tbody tr:first-child th,\ntable.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th,\ntable.dataTable.display tbody tr:first-child td {\n  border-top: none;\n}\ntable.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {\n  border-top: 1px solid #ddd;\n  border-right: 1px solid #ddd;\n}\ntable.dataTable.cell-border tbody tr th:first-child,\ntable.dataTable.cell-border tbody tr td:first-child {\n  border-left: 1px solid #ddd;\n}\ntable.dataTable.cell-border tbody tr:first-child th,\ntable.dataTable.cell-border tbody tr:first-child td {\n  border-top: none;\n}\ntable.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {\n  background-color: #f9f9f9;\n}\ntable.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {\n  background-color: #abb9d3;\n}\ntable.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover {\n  background-color: whitesmoke;\n}\ntable.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected {\n  background-color: #a9b7d1;\n}\ntable.dataTable.order-column tbody tr > .sorting_1,\ntable.dataTable.order-column tbody tr > .sorting_2,\ntable.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,\ntable.dataTable.display tbody tr > .sorting_2,\ntable.dataTable.display tbody tr > .sorting_3 {\n  background-color: #f9f9f9;\n}\ntable.dataTable.order-column tbody tr.selected > .sorting_1,\ntable.dataTable.order-column tbody tr.selected > .sorting_2,\ntable.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,\ntable.dataTable.display tbody tr.selected > .sorting_2,\ntable.dataTable.display tbody tr.selected > .sorting_3 {\n  background-color: #acbad4;\n}\ntable.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {\n  background-color: #f1f1f1;\n}\ntable.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {\n  background-color: #f3f3f3;\n}\ntable.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {\n  background-color: whitesmoke;\n}\ntable.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {\n  background-color: #a6b3cd;\n}\ntable.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {\n  background-color: #a7b5ce;\n}\ntable.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {\n  background-color: #a9b6d0;\n}\ntable.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {\n  background-color: #f9f9f9;\n}\ntable.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {\n  background-color: #fbfbfb;\n}\ntable.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {\n  background-color: #fdfdfd;\n}\ntable.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {\n  background-color: #acbad4;\n}\ntable.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {\n  background-color: #adbbd6;\n}\ntable.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {\n  background-color: #afbdd8;\n}\ntable.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {\n  background-color: #eaeaea;\n}\ntable.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {\n  background-color: #ebebeb;\n}\ntable.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {\n  background-color: #eeeeee;\n}\ntable.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {\n  background-color: #a1aec7;\n}\ntable.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {\n  background-color: #a2afc8;\n}\ntable.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {\n  background-color: #a4b2cb;\n}\ntable.dataTable.no-footer {\n  border-bottom: 1px solid #111;\n}\ntable.dataTable.nowrap th, table.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable.compact thead th,\ntable.dataTable.compact thead td {\n  padding: 4px 17px 4px 4px;\n}\ntable.dataTable.compact tfoot th,\ntable.dataTable.compact tfoot td {\n  padding: 4px;\n}\ntable.dataTable.compact tbody th,\ntable.dataTable.compact tbody td {\n  padding: 4px;\n}\ntable.dataTable th.dt-left,\ntable.dataTable td.dt-left {\n  text-align: left;\n}\ntable.dataTable th.dt-center,\ntable.dataTable td.dt-center,\ntable.dataTable td.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable th.dt-right,\ntable.dataTable td.dt-right {\n  text-align: right;\n}\ntable.dataTable th.dt-justify,\ntable.dataTable td.dt-justify {\n  text-align: justify;\n}\ntable.dataTable th.dt-nowrap,\ntable.dataTable td.dt-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable thead th.dt-head-left,\ntable.dataTable thead td.dt-head-left,\ntable.dataTable tfoot th.dt-head-left,\ntable.dataTable tfoot td.dt-head-left {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-center,\ntable.dataTable thead td.dt-head-center,\ntable.dataTable tfoot th.dt-head-center,\ntable.dataTable tfoot td.dt-head-center {\n  text-align: center;\n}\ntable.dataTable thead th.dt-head-right,\ntable.dataTable thead td.dt-head-right,\ntable.dataTable tfoot th.dt-head-right,\ntable.dataTable tfoot td.dt-head-right {\n  text-align: right;\n}\ntable.dataTable thead th.dt-head-justify,\ntable.dataTable thead td.dt-head-justify,\ntable.dataTable tfoot th.dt-head-justify,\ntable.dataTable tfoot td.dt-head-justify {\n  text-align: justify;\n}\ntable.dataTable thead th.dt-head-nowrap,\ntable.dataTable thead td.dt-head-nowrap,\ntable.dataTable tfoot th.dt-head-nowrap,\ntable.dataTable tfoot td.dt-head-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable tbody th.dt-body-left,\ntable.dataTable tbody td.dt-body-left {\n  text-align: left;\n}\ntable.dataTable tbody th.dt-body-center,\ntable.dataTable tbody td.dt-body-center {\n  text-align: center;\n}\ntable.dataTable tbody th.dt-body-right,\ntable.dataTable tbody td.dt-body-right {\n  text-align: right;\n}\ntable.dataTable tbody th.dt-body-justify,\ntable.dataTable tbody td.dt-body-justify {\n  text-align: justify;\n}\ntable.dataTable tbody th.dt-body-nowrap,\ntable.dataTable tbody td.dt-body-nowrap {\n  white-space: nowrap;\n}\n\ntable.dataTable,\ntable.dataTable th,\ntable.dataTable td {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n\n/*\n * Control feature layout\n */\n.dataTables_wrapper {\n  position: relative;\n  clear: both;\n  *zoom: 1;\n  zoom: 1;\n}\n.dataTables_wrapper .dataTables_length {\n  float: left;\n}\n.dataTables_wrapper .dataTables_filter {\n  float: right;\n  text-align: right;\n}\n.dataTables_wrapper .dataTables_filter input {\n  margin-left: 0.5em;\n}\n.dataTables_wrapper .dataTables_info {\n  clear: both;\n  float: left;\n  padding-top: 0.755em;\n}\n.dataTables_wrapper .dataTables_paginate {\n  float: right;\n  text-align: right;\n  padding-top: 0.25em;\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button {\n  box-sizing: border-box;\n  display: inline-block;\n  min-width: 1.5em;\n  padding: 0.5em 1em;\n  margin-left: 2px;\n  text-align: center;\n  text-decoration: none !important;\n  cursor: pointer;\n  *cursor: hand;\n  color: #333 !important;\n  border: 1px solid transparent;\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {\n  color: #333 !important;\n  border: 1px solid #cacaca;\n  background-color: white;\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc));\n  /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%);\n  /* Chrome10+,Safari5.1+ */\n  background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%);\n  /* FF3.6+ */\n  background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%);\n  /* IE10+ */\n  background: -o-linear-gradient(top, white 0%, #dcdcdc 100%);\n  /* Opera 11.10+ */\n  background: linear-gradient(to bottom, white 0%, #dcdcdc 100%);\n  /* W3C */\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {\n  cursor: default;\n  color: #666 !important;\n  border: 1px solid transparent;\n  background: transparent;\n  box-shadow: none;\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button:hover {\n  color: white !important;\n  border: 1px solid #111;\n  background-color: #585858;\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));\n  /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(top, #585858 0%, #111 100%);\n  /* Chrome10+,Safari5.1+ */\n  background: -moz-linear-gradient(top, #585858 0%, #111 100%);\n  /* FF3.6+ */\n  background: -ms-linear-gradient(top, #585858 0%, #111 100%);\n  /* IE10+ */\n  background: -o-linear-gradient(top, #585858 0%, #111 100%);\n  /* Opera 11.10+ */\n  background: linear-gradient(to bottom, #585858 0%, #111 100%);\n  /* W3C */\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button:active {\n  outline: none;\n  background-color: #2b2b2b;\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));\n  /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);\n  /* Chrome10+,Safari5.1+ */\n  background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);\n  /* FF3.6+ */\n  background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);\n  /* IE10+ */\n  background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);\n  /* Opera 11.10+ */\n  background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);\n  /* W3C */\n  box-shadow: inset 0 0 3px #111;\n}\n.dataTables_wrapper .dataTables_paginate .ellipsis {\n  padding: 0 1em;\n}\n.dataTables_wrapper .dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 100%;\n  height: 40px;\n  margin-left: -50%;\n  margin-top: -25px;\n  padding-top: 20px;\n  text-align: center;\n  font-size: 1.2em;\n  background-color: white;\n  background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));\n  /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);\n  /* Chrome10+,Safari5.1+ */\n  background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);\n  /* FF3.6+ */\n  background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);\n  /* IE10+ */\n  background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);\n  /* Opera 11.10+ */\n  background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);\n  /* W3C */\n}\n.dataTables_wrapper .dataTables_length,\n.dataTables_wrapper .dataTables_filter,\n.dataTables_wrapper .dataTables_info,\n.dataTables_wrapper .dataTables_processing,\n.dataTables_wrapper .dataTables_paginate {\n  color: #333;\n}\n.dataTables_wrapper .dataTables_scroll {\n  clear: both;\n}\n.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {\n  *margin-top: -1px;\n  -webkit-overflow-scrolling: touch;\n}\n.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing,\n.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing {\n  height: 0;\n  overflow: hidden;\n  margin: 0 !important;\n  padding: 0 !important;\n}\n.dataTables_wrapper.no-footer .dataTables_scrollBody {\n  border-bottom: 1px solid #111;\n}\n.dataTables_wrapper.no-footer div.dataTables_scrollHead table,\n.dataTables_wrapper.no-footer div.dataTables_scrollBody table {\n  border-bottom: none;\n}\n.dataTables_wrapper:after {\n  visibility: hidden;\n  display: block;\n  content: \"\";\n  clear: both;\n  height: 0;\n}\n\n@media screen and (max-width: 767px) {\n  .dataTables_wrapper .dataTables_info,\n  .dataTables_wrapper .dataTables_paginate {\n    float: none;\n    text-align: center;\n  }\n  .dataTables_wrapper .dataTables_paginate {\n    margin-top: 0.5em;\n  }\n}\n@media screen and (max-width: 640px) {\n  .dataTables_wrapper .dataTables_length,\n  .dataTables_wrapper .dataTables_filter {\n    float: none;\n    text-align: center;\n  }\n  .dataTables_wrapper .dataTables_filter {\n    margin-top: 0.5em;\n  }\n}\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/jquery.dataTables.js",
    "content": "/*! DataTables 1.10.7\n * ©2008-2014 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     DataTables\n * @description Paginate, search and order HTML tables\n * @version     1.10.7\n * @file        jquery.dataTables.js\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     www.sprymedia.co.uk/contact\n * @copyright   Copyright 2008-2014 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/*jslint evil: true, undef: true, browser: true */\n/*globals $,require,jQuery,define,_selector_run,_selector_opts,_selector_first,_selector_row_indexes,_ext,_Api,_api_register,_api_registerPlural,_re_new_lines,_re_html,_re_formatted_numeric,_re_escape_regex,_empty,_intVal,_numToDecimal,_isNumber,_isHtml,_htmlNumeric,_pluck,_pluck_order,_range,_stripHtml,_unique,_fnBuildAjax,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnAjaxDataSrc,_fnAddColumn,_fnColumnOptions,_fnAdjustColumnSizing,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnVisbleColumns,_fnGetColumns,_fnColumnTypes,_fnApplyColumnDefs,_fnHungarianMap,_fnCamelToHungarian,_fnLanguageCompat,_fnBrowserDetect,_fnAddData,_fnAddTr,_fnNodeToDataIndex,_fnNodeToColumnIndex,_fnGetCellData,_fnSetCellData,_fnSplitObjNotation,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnGetDataMaster,_fnClearTable,_fnDeleteIndex,_fnInvalidate,_fnGetRowElements,_fnCreateTr,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAddOptionsHtml,_fnDetectHeader,_fnGetUniqueThs,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnFilterCreateSearch,_fnEscapeRegex,_fnFilterData,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnInfoMacros,_fnInitialise,_fnInitComplete,_fnLengthChange,_fnFeatureHtmlLength,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnFeatureHtmlTable,_fnScrollDraw,_fnApplyToChildren,_fnCalculateColumnWidths,_fnThrottle,_fnConvertToWidth,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnScrollBarWidth,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/\n\n(/** @lends <global> */function( window, document, undefined ) {\n\n(function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// Define as an AMD module if possible\n\t\tdefine( 'datatables', ['jquery'], factory );\n\t}\n    else if ( typeof exports === 'object' ) {\n        // Node/CommonJS\n        module.exports = factory( require( 'jquery' ) );\n    }\n\telse if ( jQuery && !jQuery.fn.dataTable ) {\n\t\t// Define using browser globals otherwise\n\t\t// Prevent multiple instantiations if the script is loaded twice\n\t\tfactory( jQuery );\n\t}\n}\n(/** @lends <global> */function( $ ) {\n\t\"use strict\";\n\n\t/**\n\t * DataTables is a plug-in for the jQuery Javascript library. It is a highly\n\t * flexible tool, based upon the foundations of progressive enhancement,\n\t * which will add advanced interaction controls to any HTML table. For a\n\t * full list of features please refer to\n\t * [DataTables.net](href=\"http://datatables.net).\n\t *\n\t * Note that the `DataTable` object is not a global variable but is aliased\n\t * to `jQuery.fn.DataTable` and `jQuery.fn.dataTable` through which it may\n\t * be  accessed.\n\t *\n\t *  @class\n\t *  @param {object} [init={}] Configuration object for DataTables. Options\n\t *    are defined by {@link DataTable.defaults}\n\t *  @requires jQuery 1.7+\n\t *\n\t *  @example\n\t *    // Basic initialisation\n\t *    $(document).ready( function {\n\t *      $('#example').dataTable();\n\t *    } );\n\t *\n\t *  @example\n\t *    // Initialisation with configuration options - in this case, disable\n\t *    // pagination and sorting.\n\t *    $(document).ready( function {\n\t *      $('#example').dataTable( {\n\t *        \"paginate\": false,\n\t *        \"sort\": false\n\t *      } );\n\t *    } );\n\t */\n\tvar DataTable;\n\n\t\n\t/*\n\t * It is useful to have variables which are scoped locally so only the\n\t * DataTables functions can access them and they don't leak into global space.\n\t * At the same time these functions are often useful over multiple files in the\n\t * core and API, so we list, or at least document, all variables which are used\n\t * by DataTables as private variables here. This also ensures that there is no\n\t * clashing of variable names and that they can easily referenced for reuse.\n\t */\n\t\n\t\n\t// Defined else where\n\t//  _selector_run\n\t//  _selector_opts\n\t//  _selector_first\n\t//  _selector_row_indexes\n\t\n\tvar _ext; // DataTable.ext\n\tvar _Api; // DataTable.Api\n\tvar _api_register; // DataTable.Api.register\n\tvar _api_registerPlural; // DataTable.Api.registerPlural\n\t\n\tvar _re_dic = {};\n\tvar _re_new_lines = /[\\r\\n]/g;\n\tvar _re_html = /<.*?>/g;\n\tvar _re_date_start = /^[\\w\\+\\-]/;\n\tvar _re_date_end = /[\\w\\+\\-]$/;\n\t\n\t// Escape regular expression special characters\n\tvar _re_escape_regex = new RegExp( '(\\\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\', '$', '^', '-' ].join('|\\\\') + ')', 'g' );\n\t\n\t// http://en.wikipedia.org/wiki/Foreign_exchange_market\n\t// - \\u20BD - Russian ruble.\n\t// - \\u20a9 - South Korean Won\n\t// - \\u20BA - Turkish Lira\n\t// - \\u20B9 - Indian Rupee\n\t// - R - Brazil (R$) and South Africa\n\t// - fr - Swiss Franc\n\t// - kr - Swedish krona, Norwegian krone and Danish krone\n\t// - \\u2009 is thin space and \\u202F is narrow no-break space, both used in many\n\t//   standards as thousands separators.\n\tvar _re_formatted_numeric = /[',$£€¥%\\u2009\\u202F\\u20BD\\u20a9\\u20BArfk]/gi;\n\t\n\t\n\tvar _empty = function ( d ) {\n\t\treturn !d || d === true || d === '-' ? true : false;\n\t};\n\t\n\t\n\tvar _intVal = function ( s ) {\n\t\tvar integer = parseInt( s, 10 );\n\t\treturn !isNaN(integer) && isFinite(s) ? integer : null;\n\t};\n\t\n\t// Convert from a formatted number with characters other than `.` as the\n\t// decimal place, to a Javascript number\n\tvar _numToDecimal = function ( num, decimalPoint ) {\n\t\t// Cache created regular expressions for speed as this function is called often\n\t\tif ( ! _re_dic[ decimalPoint ] ) {\n\t\t\t_re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );\n\t\t}\n\t\treturn typeof num === 'string' && decimalPoint !== '.' ?\n\t\t\tnum.replace( /\\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :\n\t\t\tnum;\n\t};\n\t\n\t\n\tvar _isNumber = function ( d, decimalPoint, formatted ) {\n\t\tvar strType = typeof d === 'string';\n\t\n\t\t// If empty return immediately so there must be a number if it is a\n\t\t// formatted string (this stops the string \"k\", or \"kr\", etc being detected\n\t\t// as a formatted number for currency\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tif ( decimalPoint && strType ) {\n\t\t\td = _numToDecimal( d, decimalPoint );\n\t\t}\n\t\n\t\tif ( formatted && strType ) {\n\t\t\td = d.replace( _re_formatted_numeric, '' );\n\t\t}\n\t\n\t\treturn !isNaN( parseFloat(d) ) && isFinite( d );\n\t};\n\t\n\t\n\t// A string without HTML in it can be considered to be HTML still\n\tvar _isHtml = function ( d ) {\n\t\treturn _empty( d ) || typeof d === 'string';\n\t};\n\t\n\t\n\tvar _htmlNumeric = function ( d, decimalPoint, formatted ) {\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tvar html = _isHtml( d );\n\t\treturn ! html ?\n\t\t\tnull :\n\t\t\t_isNumber( _stripHtml( d ), decimalPoint, formatted ) ?\n\t\t\t\ttrue :\n\t\t\t\tnull;\n\t};\n\t\n\t\n\tvar _pluck = function ( a, prop, prop2 ) {\n\t\tvar out = [];\n\t\tvar i=0, ien=a.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[i] && a[i][ prop ] ) {\n\t\t\t\t\tout.push( a[i][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[i] ) {\n\t\t\t\t\tout.push( a[i][ prop ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\t// Basically the same as _pluck, but rather than looping over `a` we use `order`\n\t// as the indexes to pick from `a`\n\tvar _pluck_order = function ( a, order, prop, prop2 )\n\t{\n\t\tvar out = [];\n\t\tvar i=0, ien=order.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[ order[i] ][ prop ] ) {\n\t\t\t\t\tout.push( a[ order[i] ][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tout.push( a[ order[i] ][ prop ] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _range = function ( len, start )\n\t{\n\t\tvar out = [];\n\t\tvar end;\n\t\n\t\tif ( start === undefined ) {\n\t\t\tstart = 0;\n\t\t\tend = len;\n\t\t}\n\t\telse {\n\t\t\tend = start;\n\t\t\tstart = len;\n\t\t}\n\t\n\t\tfor ( var i=start ; i<end ; i++ ) {\n\t\t\tout.push( i );\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _removeEmpty = function ( a )\n\t{\n\t\tvar out = [];\n\t\n\t\tfor ( var i=0, ien=a.length ; i<ien ; i++ ) {\n\t\t\tif ( a[i] ) { // careful - will remove all falsy values!\n\t\t\t\tout.push( a[i] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _stripHtml = function ( d ) {\n\t\treturn d.replace( _re_html, '' );\n\t};\n\t\n\t\n\t/**\n\t * Find the unique elements in a source array.\n\t *\n\t * @param  {array} src Source array\n\t * @return {array} Array of unique items\n\t * @ignore\n\t */\n\tvar _unique = function ( src )\n\t{\n\t\t// A faster unique method is to use object keys to identify used values,\n\t\t// but this doesn't work with arrays or objects, which we must also\n\t\t// consider. See jsperf.com/compare-array-unique-versions/4 for more\n\t\t// information.\n\t\tvar\n\t\t\tout = [],\n\t\t\tval,\n\t\t\ti, ien=src.length,\n\t\t\tj, k=0;\n\t\n\t\tagain: for ( i=0 ; i<ien ; i++ ) {\n\t\t\tval = src[i];\n\t\n\t\t\tfor ( j=0 ; j<k ; j++ ) {\n\t\t\t\tif ( out[j] === val ) {\n\t\t\t\t\tcontinue again;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tout.push( val );\n\t\t\tk++;\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\t\n\t/**\n\t * Create a mapping object that allows camel case parameters to be looked up\n\t * for their Hungarian counterparts. The mapping is stored in a private\n\t * parameter called `_hungarianMap` which can be accessed on the source object.\n\t *  @param {object} o\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnHungarianMap ( o )\n\t{\n\t\tvar\n\t\t\thungarian = 'a aa ai ao as b fn i m o s ',\n\t\t\tmatch,\n\t\t\tnewKey,\n\t\t\tmap = {};\n\t\n\t\t$.each( o, function (key, val) {\n\t\t\tmatch = key.match(/^([^A-Z]+?)([A-Z])/);\n\t\n\t\t\tif ( match && hungarian.indexOf(match[1]+' ') !== -1 )\n\t\t\t{\n\t\t\t\tnewKey = key.replace( match[0], match[2].toLowerCase() );\n\t\t\t\tmap[ newKey ] = key;\n\t\n\t\t\t\tif ( match[1] === 'o' )\n\t\t\t\t{\n\t\t\t\t\t_fnHungarianMap( o[key] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t\n\t\to._hungarianMap = map;\n\t}\n\t\n\t\n\t/**\n\t * Convert from camel case parameters to Hungarian, based on a Hungarian map\n\t * created by _fnHungarianMap.\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCamelToHungarian ( src, user, force )\n\t{\n\t\tif ( ! src._hungarianMap ) {\n\t\t\t_fnHungarianMap( src );\n\t\t}\n\t\n\t\tvar hungarianKey;\n\t\n\t\t$.each( user, function (key, val) {\n\t\t\thungarianKey = src._hungarianMap[ key ];\n\t\n\t\t\tif ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )\n\t\t\t{\n\t\t\t\t// For objects, we need to buzz down into the object to copy parameters\n\t\t\t\tif ( hungarianKey.charAt(0) === 'o' )\n\t\t\t\t{\n\t\t\t\t\t// Copy the camelCase options over to the hungarian\n\t\t\t\t\tif ( ! user[ hungarianKey ] ) {\n\t\t\t\t\t\tuser[ hungarianKey ] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, user[hungarianKey], user[key] );\n\t\n\t\t\t\t\t_fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tuser[hungarianKey] = user[ key ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Language compatibility - when certain options are given, and others aren't, we\n\t * need to duplicate the values over, in order to provide backwards compatibility\n\t * with older language files.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLanguageCompat( lang )\n\t{\n\t\tvar defaults = DataTable.defaults.oLanguage;\n\t\tvar zeroRecords = lang.sZeroRecords;\n\t\n\t\t/* Backwards compatibility - if there is no sEmptyTable given, then use the same as\n\t\t * sZeroRecords - assuming that is given.\n\t\t */\n\t\tif ( ! lang.sEmptyTable && zeroRecords &&\n\t\t\tdefaults.sEmptyTable === \"No data available in table\" )\n\t\t{\n\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sEmptyTable' );\n\t\t}\n\t\n\t\t/* Likewise with loading records */\n\t\tif ( ! lang.sLoadingRecords && zeroRecords &&\n\t\t\tdefaults.sLoadingRecords === \"Loading...\" )\n\t\t{\n\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sLoadingRecords' );\n\t\t}\n\t\n\t\t// Old parameter name of the thousands separator mapped onto the new\n\t\tif ( lang.sInfoThousands ) {\n\t\t\tlang.sThousands = lang.sInfoThousands;\n\t\t}\n\t\n\t\tvar decimal = lang.sDecimal;\n\t\tif ( decimal ) {\n\t\t\t_addNumericSort( decimal );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Map one parameter onto another\n\t *  @param {object} o Object to map\n\t *  @param {*} knew The new parameter name\n\t *  @param {*} old The old parameter name\n\t */\n\tvar _fnCompatMap = function ( o, knew, old ) {\n\t\tif ( o[ knew ] !== undefined ) {\n\t\t\to[ old ] = o[ knew ];\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Provide backwards compatibility for the main DT options. Note that the new\n\t * options are mapped onto the old parameters, so this is an external interface\n\t * change only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatOpts ( init )\n\t{\n\t\t_fnCompatMap( init, 'ordering',      'bSort' );\n\t\t_fnCompatMap( init, 'orderMulti',    'bSortMulti' );\n\t\t_fnCompatMap( init, 'orderClasses',  'bSortClasses' );\n\t\t_fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );\n\t\t_fnCompatMap( init, 'order',         'aaSorting' );\n\t\t_fnCompatMap( init, 'orderFixed',    'aaSortingFixed' );\n\t\t_fnCompatMap( init, 'paging',        'bPaginate' );\n\t\t_fnCompatMap( init, 'pagingType',    'sPaginationType' );\n\t\t_fnCompatMap( init, 'pageLength',    'iDisplayLength' );\n\t\t_fnCompatMap( init, 'searching',     'bFilter' );\n\t\n\t\t// Column search objects are in an array, so it needs to be converted\n\t\t// element by element\n\t\tvar searchCols = init.aoSearchCols;\n\t\n\t\tif ( searchCols ) {\n\t\t\tfor ( var i=0, ien=searchCols.length ; i<ien ; i++ ) {\n\t\t\t\tif ( searchCols[i] ) {\n\t\t\t\t\t_fnCamelToHungarian( DataTable.models.oSearch, searchCols[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Provide backwards compatibility for column options. Note that the new options\n\t * are mapped onto the old parameters, so this is an external interface change\n\t * only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatCols ( init )\n\t{\n\t\t_fnCompatMap( init, 'orderable',     'bSortable' );\n\t\t_fnCompatMap( init, 'orderData',     'aDataSort' );\n\t\t_fnCompatMap( init, 'orderSequence', 'asSorting' );\n\t\t_fnCompatMap( init, 'orderDataType', 'sortDataType' );\n\t\n\t\t// orderData can be given as an integer\n\t\tvar dataSort = init.aDataSort;\n\t\tif ( dataSort && ! $.isArray( dataSort ) ) {\n\t\t\tinit.aDataSort = [ dataSort ];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Browser feature detection for capabilities, quirks\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBrowserDetect( settings )\n\t{\n\t\tvar browser = settings.oBrowser;\n\t\n\t\t// Scrolling feature / quirks detection\n\t\tvar n = $('<div/>')\n\t\t\t.css( {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\theight: 1,\n\t\t\t\twidth: 1,\n\t\t\t\toverflow: 'hidden'\n\t\t\t} )\n\t\t\t.append(\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 1,\n\t\t\t\t\t\tleft: 1,\n\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\toverflow: 'scroll'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$('<div class=\"test\"/>')\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\theight: 10\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.appendTo( 'body' );\n\t\n\t\tvar test = n.find('.test');\n\t\n\t\t// IE6/7 will oversize a width 100% element inside a scrolling element, to\n\t\t// include the width of the scrollbar, while other browsers ensure the inner\n\t\t// element is contained without forcing scrolling\n\t\tbrowser.bScrollOversize = test[0].offsetWidth === 100;\n\t\n\t\t// In rtl text layout, some browsers (most, but not all) will place the\n\t\t// scrollbar on the left, rather than the right.\n\t\tbrowser.bScrollbarLeft = Math.round( test.offset().left ) !== 1;\n\t\n\t\tn.remove();\n\t}\n\t\n\t\n\t/**\n\t * Array.prototype reduce[Right] method, used for browsers which don't support\n\t * JS 1.6. Done this way to reduce code size, since we iterate either way\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnReduce ( that, fn, init, start, end, inc )\n\t{\n\t\tvar\n\t\t\ti = start,\n\t\t\tvalue,\n\t\t\tisSet = false;\n\t\n\t\tif ( init !== undefined ) {\n\t\t\tvalue = init;\n\t\t\tisSet = true;\n\t\t}\n\t\n\t\twhile ( i !== end ) {\n\t\t\tif ( ! that.hasOwnProperty(i) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tvalue = isSet ?\n\t\t\t\tfn( value, that[i], i, that ) :\n\t\t\t\tthat[i];\n\t\n\t\t\tisSet = true;\n\t\t\ti += inc;\n\t\t}\n\t\n\t\treturn value;\n\t}\n\t\n\t/**\n\t * Add a column to the list used for the table with default values\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} nTh The th element for this column\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddColumn( oSettings, nTh )\n\t{\n\t\t// Add column to aoColumns array\n\t\tvar oDefaults = DataTable.defaults.column;\n\t\tvar iCol = oSettings.aoColumns.length;\n\t\tvar oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {\n\t\t\t\"nTh\": nTh ? nTh : document.createElement('th'),\n\t\t\t\"sTitle\":    oDefaults.sTitle    ? oDefaults.sTitle    : nTh ? nTh.innerHTML : '',\n\t\t\t\"aDataSort\": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],\n\t\t\t\"mData\": oDefaults.mData ? oDefaults.mData : iCol,\n\t\t\tidx: iCol\n\t\t} );\n\t\toSettings.aoColumns.push( oCol );\n\t\n\t\t// Add search object for column specific search. Note that the `searchCols[ iCol ]`\n\t\t// passed into extend can be undefined. This allows the user to give a default\n\t\t// with only some of the parameters defined, and also not give a default\n\t\tvar searchCols = oSettings.aoPreSearchCols;\n\t\tsearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );\n\t\n\t\t// Use the default column options function to initialise classes etc\n\t\t_fnColumnOptions( oSettings, iCol, $(nTh).data() );\n\t}\n\t\n\t\n\t/**\n\t * Apply options for a column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iCol column index to consider\n\t *  @param {object} oOptions object with sType, bVisible and bSearchable etc\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnOptions( oSettings, iCol, oOptions )\n\t{\n\t\tvar oCol = oSettings.aoColumns[ iCol ];\n\t\tvar oClasses = oSettings.oClasses;\n\t\tvar th = $(oCol.nTh);\n\t\n\t\t// Try to get width information from the DOM. We can't get it from CSS\n\t\t// as we'd need to parse the CSS stylesheet. `width` option can override\n\t\tif ( ! oCol.sWidthOrig ) {\n\t\t\t// Width attribute\n\t\t\toCol.sWidthOrig = th.attr('width') || null;\n\t\n\t\t\t// Style attribute\n\t\t\tvar t = (th.attr('style') || '').match(/width:\\s*(\\d+[pxem%]+)/);\n\t\t\tif ( t ) {\n\t\t\t\toCol.sWidthOrig = t[1];\n\t\t\t}\n\t\t}\n\t\n\t\t/* User specified column options */\n\t\tif ( oOptions !== undefined && oOptions !== null )\n\t\t{\n\t\t\t// Backwards compatibility\n\t\t\t_fnCompatCols( oOptions );\n\t\n\t\t\t// Map camel case parameters to their Hungarian counterparts\n\t\t\t_fnCamelToHungarian( DataTable.defaults.column, oOptions );\n\t\n\t\t\t/* Backwards compatibility for mDataProp */\n\t\t\tif ( oOptions.mDataProp !== undefined && !oOptions.mData )\n\t\t\t{\n\t\t\t\toOptions.mData = oOptions.mDataProp;\n\t\t\t}\n\t\n\t\t\tif ( oOptions.sType )\n\t\t\t{\n\t\t\t\toCol._sManualType = oOptions.sType;\n\t\t\t}\n\t\n\t\t\t// `class` is a reserved word in Javascript, so we need to provide\n\t\t\t// the ability to use a valid name for the camel case input\n\t\t\tif ( oOptions.className && ! oOptions.sClass )\n\t\t\t{\n\t\t\t\toOptions.sClass = oOptions.className;\n\t\t\t}\n\t\n\t\t\t$.extend( oCol, oOptions );\n\t\t\t_fnMap( oCol, oOptions, \"sWidth\", \"sWidthOrig\" );\n\t\n\t\t\t/* iDataSort to be applied (backwards compatibility), but aDataSort will take\n\t\t\t * priority if defined\n\t\t\t */\n\t\t\tif ( oOptions.iDataSort !== undefined )\n\t\t\t{\n\t\t\t\toCol.aDataSort = [ oOptions.iDataSort ];\n\t\t\t}\n\t\t\t_fnMap( oCol, oOptions, \"aDataSort\" );\n\t\t}\n\t\n\t\t/* Cache the data get and set functions for speed */\n\t\tvar mDataSrc = oCol.mData;\n\t\tvar mData = _fnGetObjectDataFn( mDataSrc );\n\t\tvar mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;\n\t\n\t\tvar attrTest = function( src ) {\n\t\t\treturn typeof src === 'string' && src.indexOf('@') !== -1;\n\t\t};\n\t\toCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (\n\t\t\tattrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)\n\t\t);\n\t\n\t\toCol.fnGetData = function (rowData, type, meta) {\n\t\t\tvar innerData = mData( rowData, type, undefined, meta );\n\t\n\t\t\treturn mRender && type ?\n\t\t\t\tmRender( innerData, type, rowData, meta ) :\n\t\t\t\tinnerData;\n\t\t};\n\t\toCol.fnSetData = function ( rowData, val, meta ) {\n\t\t\treturn _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );\n\t\t};\n\t\n\t\t// Indicate if DataTables should read DOM data as an object or array\n\t\t// Used in _fnGetRowElements\n\t\tif ( typeof mDataSrc !== 'number' ) {\n\t\t\toSettings._rowReadObject = true;\n\t\t}\n\t\n\t\t/* Feature sorting overrides column specific when off */\n\t\tif ( !oSettings.oFeatures.bSort )\n\t\t{\n\t\t\toCol.bSortable = false;\n\t\t\tth.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called\n\t\t}\n\t\n\t\t/* Check that the class assignment is correct for sorting */\n\t\tvar bAsc = $.inArray('asc', oCol.asSorting) !== -1;\n\t\tvar bDesc = $.inArray('desc', oCol.asSorting) !== -1;\n\t\tif ( !oCol.bSortable || (!bAsc && !bDesc) )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableNone;\n\t\t\toCol.sSortingClassJUI = \"\";\n\t\t}\n\t\telse if ( bAsc && !bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableAsc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;\n\t\t}\n\t\telse if ( !bAsc && bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableDesc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;\n\t\t}\n\t\telse\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortable;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUI;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Adjust the table column widths for new data. Note: you would probably want to\n\t * do a redraw after calling this function!\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAdjustColumnSizing ( settings )\n\t{\n\t\t/* Not interested in doing column width calculation if auto-width is disabled */\n\t\tif ( settings.oFeatures.bAutoWidth !== false )\n\t\t{\n\t\t\tvar columns = settings.aoColumns;\n\t\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t\tfor ( var i=0 , iLen=columns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tcolumns[i].nTh.style.width = columns[i].sWidth;\n\t\t\t}\n\t\t}\n\t\n\t\tvar scroll = settings.oScroll;\n\t\tif ( scroll.sY !== '' || scroll.sX !== '')\n\t\t{\n\t\t\t_fnScrollDraw( settings );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'column-sizing', [settings] );\n\t}\n\t\n\t\n\t/**\n\t * Covert the index of a visible column to the index in the data array (take account\n\t * of hidden columns)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iMatch Visible column index to lookup\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisibleToColumnIndex( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\n\t\treturn typeof aiVis[iMatch] === 'number' ?\n\t\t\taiVis[iMatch] :\n\t\t\tnull;\n\t}\n\t\n\t\n\t/**\n\t * Covert the index of an index in the data array and convert it to the visible\n\t *   column index (take account of hidden columns)\n\t *  @param {int} iMatch Column index to lookup\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnIndexToVisible( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\tvar iPos = $.inArray( iMatch, aiVis );\n\t\n\t\treturn iPos !== -1 ? iPos : null;\n\t}\n\t\n\t\n\t/**\n\t * Get the number of visible columns\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the number of visible columns\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisbleColumns( oSettings )\n\t{\n\t\treturn _fnGetColumns( oSettings, 'bVisible' ).length;\n\t}\n\t\n\t\n\t/**\n\t * Get an array of column indexes that match a given property\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sParam Parameter in aoColumns to look for - typically\n\t *    bVisible or bSearchable\n\t *  @returns {array} Array of indexes with matched properties\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetColumns( oSettings, sParam )\n\t{\n\t\tvar a = [];\n\t\n\t\t$.map( oSettings.aoColumns, function(val, i) {\n\t\t\tif ( val[sParam] ) {\n\t\t\t\ta.push( i );\n\t\t\t}\n\t\t} );\n\t\n\t\treturn a;\n\t}\n\t\n\t\n\t/**\n\t * Calculate the 'type' of a column\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnTypes ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar data = settings.aoData;\n\t\tvar types = DataTable.ext.type.detect;\n\t\tvar i, ien, j, jen, k, ken;\n\t\tvar col, cell, detectedType, cache;\n\t\n\t\t// For each column, spin over the \n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tcol = columns[i];\n\t\t\tcache = [];\n\t\n\t\t\tif ( ! col.sType && col._sManualType ) {\n\t\t\t\tcol.sType = col._sManualType;\n\t\t\t}\n\t\t\telse if ( ! col.sType ) {\n\t\t\t\tfor ( j=0, jen=types.length ; j<jen ; j++ ) {\n\t\t\t\t\tfor ( k=0, ken=data.length ; k<ken ; k++ ) {\n\t\t\t\t\t\t// Use a cache array so we only need to get the type data\n\t\t\t\t\t\t// from the formatter once (when using multiple detectors)\n\t\t\t\t\t\tif ( cache[k] === undefined ) {\n\t\t\t\t\t\t\tcache[k] = _fnGetCellData( settings, k, i, 'type' );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tdetectedType = types[j]( cache[k], settings );\n\t\n\t\t\t\t\t\t// If null, then this type can't apply to this column, so\n\t\t\t\t\t\t// rather than testing all cells, break out. There is an\n\t\t\t\t\t\t// exception for the last type which is `html`. We need to\n\t\t\t\t\t\t// scan all rows since it is possible to mix string and HTML\n\t\t\t\t\t\t// types\n\t\t\t\t\t\tif ( ! detectedType && j !== types.length-1 ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Only a single match is needed for html type since it is\n\t\t\t\t\t\t// bottom of the pile and very similar to string\n\t\t\t\t\t\tif ( detectedType === 'html' ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Type is valid for all data points in the column - use this\n\t\t\t\t\t// type\n\t\t\t\t\tif ( detectedType ) {\n\t\t\t\t\t\tcol.sType = detectedType;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Fall back - if no type was detected, always use string\n\t\t\t\tif ( ! col.sType ) {\n\t\t\t\t\tcol.sType = 'string';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Take the column definitions and static columns arrays and calculate how\n\t * they relate to column indexes. The callback function will then apply the\n\t * definition found for a column to a suitable configuration object.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aoColDefs The aoColumnDefs array that is to be applied\n\t *  @param {array} aoCols The aoColumns array that defines columns individually\n\t *  @param {function} fn Callback function - takes two parameters, the calculated\n\t *    column index and the definition for that column.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, def;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\t// Column definitions with aTargets\n\t\tif ( aoColDefs )\n\t\t{\n\t\t\t/* Loop over the definitions array - loop in reverse so first instance has priority */\n\t\t\tfor ( i=aoColDefs.length-1 ; i>=0 ; i-- )\n\t\t\t{\n\t\t\t\tdef = aoColDefs[i];\n\t\n\t\t\t\t/* Each definition can target multiple columns, as it is an array */\n\t\t\t\tvar aTargets = def.targets !== undefined ?\n\t\t\t\t\tdef.targets :\n\t\t\t\t\tdef.aTargets;\n\t\n\t\t\t\tif ( ! $.isArray( aTargets ) )\n\t\t\t\t{\n\t\t\t\t\taTargets = [ aTargets ];\n\t\t\t\t}\n\t\n\t\t\t\tfor ( j=0, jLen=aTargets.length ; j<jLen ; j++ )\n\t\t\t\t{\n\t\t\t\t\tif ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Add columns that we don't yet know about */\n\t\t\t\t\t\twhile( columns.length <= aTargets[j] )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t_fnAddColumn( oSettings );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t/* Integer, basic index */\n\t\t\t\t\t\tfn( aTargets[j], def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Negative integer, right to left column counting */\n\t\t\t\t\t\tfn( columns.length+aTargets[j], def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof aTargets[j] === 'string' )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Class name matching on TH element */\n\t\t\t\t\t\tfor ( k=0, kLen=columns.length ; k<kLen ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ( aTargets[j] == \"_all\" ||\n\t\t\t\t\t\t\t     $(columns[k].nTh).hasClass( aTargets[j] ) )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfn( k, def );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Statically defined columns array\n\t\tif ( aoCols )\n\t\t{\n\t\t\tfor ( i=0, iLen=aoCols.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tfn( i, aoCols[i] );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Add a data array to the table, creating DOM node etc. This is the parallel to\n\t * _fnGatherData, but for adding rows from a Javascript source, rather than a\n\t * DOM source.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aData data array to be added\n\t *  @param {node} [nTr] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddData ( oSettings, aDataIn, nTr, anTds )\n\t{\n\t\t/* Create the object for storing information about this new row */\n\t\tvar iRow = oSettings.aoData.length;\n\t\tvar oData = $.extend( true, {}, DataTable.models.oRow, {\n\t\t\tsrc: nTr ? 'dom' : 'data'\n\t\t} );\n\t\n\t\toData._aData = aDataIn;\n\t\toSettings.aoData.push( oData );\n\t\n\t\t/* Create the cells */\n\t\tvar nTd, sThisType;\n\t\tvar columns = oSettings.aoColumns;\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\t// When working with a row, the data source object must be populated. In\n\t\t\t// all other cases, the data source object is already populated, so we\n\t\t\t// don't overwrite it, which might break bindings etc\n\t\t\tif ( nTr ) {\n\t\t\t\t_fnSetCellData( oSettings, iRow, i, _fnGetCellData( oSettings, iRow, i ) );\n\t\t\t}\n\t\t\tcolumns[i].sType = null;\n\t\t}\n\t\n\t\t/* Add to the display array */\n\t\toSettings.aiDisplayMaster.push( iRow );\n\t\n\t\t/* Create the DOM information, or register it if already present */\n\t\tif ( nTr || ! oSettings.oFeatures.bDeferRender )\n\t\t{\n\t\t\t_fnCreateTr( oSettings, iRow, nTr, anTds );\n\t\t}\n\t\n\t\treturn iRow;\n\t}\n\t\n\t\n\t/**\n\t * Add one or more TR elements to the table. Generally we'd expect to\n\t * use this for reading data from a DOM sourced table, but it could be\n\t * used for an TR element. Note that if a TR is given, it is used (i.e.\n\t * it is not cloned).\n\t *  @param {object} settings dataTables settings object\n\t *  @param {array|node|jQuery} trs The TR element(s) to add to the table\n\t *  @returns {array} Array of indexes for the added rows\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddTr( settings, trs )\n\t{\n\t\tvar row;\n\t\n\t\t// Allow an individual node to be passed in\n\t\tif ( ! (trs instanceof $) ) {\n\t\t\ttrs = $(trs);\n\t\t}\n\t\n\t\treturn trs.map( function (i, el) {\n\t\t\trow = _fnGetRowElements( settings, el );\n\t\t\treturn _fnAddData( settings, row.data, el, row.cells );\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Take a TR element and convert it to an index in aoData\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} n the TR element to find\n\t *  @returns {int} index if the node is found, null if not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnNodeToDataIndex( oSettings, n )\n\t{\n\t\treturn (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;\n\t}\n\t\n\t\n\t/**\n\t * Take a TD element and convert it into a column data index (not the visible index)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow The row number the TD/TH can be found in\n\t *  @param {node} n The TD/TH element to find\n\t *  @returns {int} index if the node is found, -1 if not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnNodeToColumnIndex( oSettings, iRow, n )\n\t{\n\t\treturn $.inArray( n, oSettings.aoData[ iRow ].anCells );\n\t}\n\t\n\t\n\t/**\n\t * Get the data for a given cell from the internal cache, taking into account data mapping\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} rowIdx aoData row id\n\t *  @param {int} colIdx Column index\n\t *  @param {string} type data get type ('display', 'type' 'filter' 'sort')\n\t *  @returns {*} Cell data\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetCellData( settings, rowIdx, colIdx, type )\n\t{\n\t\tvar draw           = settings.iDraw;\n\t\tvar col            = settings.aoColumns[colIdx];\n\t\tvar rowData        = settings.aoData[rowIdx]._aData;\n\t\tvar defaultContent = col.sDefaultContent;\n\t\tvar cellData       = col.fnGetData( rowData, type, {\n\t\t\tsettings: settings,\n\t\t\trow:      rowIdx,\n\t\t\tcol:      colIdx\n\t\t} );\n\t\n\t\tif ( cellData === undefined ) {\n\t\t\tif ( settings.iDrawError != draw && defaultContent === null ) {\n\t\t\t\t_fnLog( settings, 0, \"Requested unknown parameter \"+\n\t\t\t\t\t(typeof col.mData=='function' ? '{function}' : \"'\"+col.mData+\"'\")+\n\t\t\t\t\t\" for row \"+rowIdx, 4 );\n\t\t\t\tsettings.iDrawError = draw;\n\t\t\t}\n\t\t\treturn defaultContent;\n\t\t}\n\t\n\t\t/* When the data source is null, we can use default column data */\n\t\tif ( (cellData === rowData || cellData === null) && defaultContent !== null ) {\n\t\t\tcellData = defaultContent;\n\t\t}\n\t\telse if ( typeof cellData === 'function' ) {\n\t\t\t// If the data source is a function, then we run it and use the return,\n\t\t\t// executing in the scope of the data object (for instances)\n\t\t\treturn cellData.call( rowData );\n\t\t}\n\t\n\t\tif ( cellData === null && type == 'display' ) {\n\t\t\treturn '';\n\t\t}\n\t\treturn cellData;\n\t}\n\t\n\t\n\t/**\n\t * Set the value for a specific cell, into the internal data cache\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} rowIdx aoData row id\n\t *  @param {int} colIdx Column index\n\t *  @param {*} val Value to set\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSetCellData( settings, rowIdx, colIdx, val )\n\t{\n\t\tvar col     = settings.aoColumns[colIdx];\n\t\tvar rowData = settings.aoData[rowIdx]._aData;\n\t\n\t\tcol.fnSetData( rowData, val, {\n\t\t\tsettings: settings,\n\t\t\trow:      rowIdx,\n\t\t\tcol:      colIdx\n\t\t}  );\n\t}\n\t\n\t\n\t// Private variable that is used to match action syntax in the data property object\n\tvar __reArray = /\\[.*?\\]$/;\n\tvar __reFn = /\\(\\)$/;\n\t\n\t/**\n\t * Split string on periods, taking into account escaped periods\n\t * @param  {string} str String to split\n\t * @return {array} Split string\n\t */\n\tfunction _fnSplitObjNotation( str )\n\t{\n\t\treturn $.map( str.match(/(\\\\.|[^\\.])+/g), function ( s ) {\n\t\t\treturn s.replace(/\\\\./g, '.');\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Return a function that can be used to get data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data get function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetObjectDataFn( mSource )\n\t{\n\t\tif ( $.isPlainObject( mSource ) )\n\t\t{\n\t\t\t/* Build an object of get functions, and wrap them in a single call */\n\t\t\tvar o = {};\n\t\t\t$.each( mSource, function (key, val) {\n\t\t\t\tif ( val ) {\n\t\t\t\t\to[key] = _fnGetObjectDataFn( val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn function (data, type, row, meta) {\n\t\t\t\tvar t = o[type] || o._;\n\t\t\t\treturn t !== undefined ?\n\t\t\t\t\tt(data, type, row, meta) :\n\t\t\t\t\tdata;\n\t\t\t};\n\t\t}\n\t\telse if ( mSource === null )\n\t\t{\n\t\t\t/* Give an empty string for rendering / sorting etc */\n\t\t\treturn function (data) { // type, row and meta also passed, but not used\n\t\t\t\treturn data;\n\t\t\t};\n\t\t}\n\t\telse if ( typeof mSource === 'function' )\n\t\t{\n\t\t\treturn function (data, type, row, meta) {\n\t\t\t\treturn mSource( data, type, row, meta );\n\t\t\t};\n\t\t}\n\t\telse if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 ||\n\t\t\t      mSource.indexOf('[') !== -1 || mSource.indexOf('(') !== -1) )\n\t\t{\n\t\t\t/* If there is a . in the source string then the data source is in a\n\t\t\t * nested object so we loop over the data for each level to get the next\n\t\t\t * level down. On each loop we test for undefined, and if found immediately\n\t\t\t * return. This allows entire objects to be missing and sDefaultContent to\n\t\t\t * be used if defined, rather than throwing an error\n\t\t\t */\n\t\t\tvar fetchData = function (data, type, src) {\n\t\t\t\tvar arrayNotation, funcNotation, out, innerSrc;\n\t\n\t\t\t\tif ( src !== \"\" )\n\t\t\t\t{\n\t\t\t\t\tvar a = _fnSplitObjNotation( src );\n\t\n\t\t\t\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t\t\t\t\t{\n\t\t\t\t\t\t// Check if we are dealing with special notation\n\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\n\t\t\t\t\t\tif ( arrayNotation )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Array notation\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\n\t\t\t\t\t\t\t// Condition allows simply [] to be passed in\n\t\t\t\t\t\t\tif ( a[i] !== \"\" ) {\n\t\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tout = [];\n\t\n\t\t\t\t\t\t\t// Get the remainder of the nested object to get\n\t\t\t\t\t\t\ta.splice( 0, i+1 );\n\t\t\t\t\t\t\tinnerSrc = a.join('.');\n\t\n\t\t\t\t\t\t\t// Traverse each entry in the array getting the properties requested\n\t\t\t\t\t\t\tfor ( var j=0, jLen=data.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\tout.push( fetchData( data[j], type, innerSrc ) );\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// If a string is given in between the array notation indicators, that\n\t\t\t\t\t\t\t// is used to join the strings together, otherwise an array is returned\n\t\t\t\t\t\t\tvar join = arrayNotation[0].substring(1, arrayNotation[0].length-1);\n\t\t\t\t\t\t\tdata = (join===\"\") ? out : out.join(join);\n\t\n\t\t\t\t\t\t\t// The inner call to fetchData has already traversed through the remainder\n\t\t\t\t\t\t\t// of the source requested, so we exit from the loop\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( funcNotation )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\tdata = data[ a[i] ]();\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( data === null || data[ a[i] ] === undefined )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn data;\n\t\t\t};\n\t\n\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\treturn fetchData( data, type, mSource );\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Array or flat object mapping */\n\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\treturn data[mSource];\n\t\t\t};\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Return a function that can be used to set data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data set function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSetObjectDataFn( mSource )\n\t{\n\t\tif ( $.isPlainObject( mSource ) )\n\t\t{\n\t\t\t/* Unlike get, only the underscore (global) option is used for for\n\t\t\t * setting data since we don't know the type here. This is why an object\n\t\t\t * option is not documented for `mData` (which is read/write), but it is\n\t\t\t * for `mRender` which is read only.\n\t\t\t */\n\t\t\treturn _fnSetObjectDataFn( mSource._ );\n\t\t}\n\t\telse if ( mSource === null )\n\t\t{\n\t\t\t/* Nothing to do when the data source is null */\n\t\t\treturn function () {};\n\t\t}\n\t\telse if ( typeof mSource === 'function' )\n\t\t{\n\t\t\treturn function (data, val, meta) {\n\t\t\t\tmSource( data, 'set', val, meta );\n\t\t\t};\n\t\t}\n\t\telse if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 ||\n\t\t\t      mSource.indexOf('[') !== -1 || mSource.indexOf('(') !== -1) )\n\t\t{\n\t\t\t/* Like the get, we need to get data from a nested object */\n\t\t\tvar setData = function (data, val, src) {\n\t\t\t\tvar a = _fnSplitObjNotation( src ), b;\n\t\t\t\tvar aLast = a[a.length-1];\n\t\t\t\tvar arrayNotation, funcNotation, o, innerSrc;\n\t\n\t\t\t\tfor ( var i=0, iLen=a.length-1 ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\t// Check if we are dealing with an array notation request\n\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\n\t\t\t\t\tif ( arrayNotation )\n\t\t\t\t\t{\n\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\t\t\t\tdata[ a[i] ] = [];\n\t\n\t\t\t\t\t\t// Get the remainder of the nested object to set so we can recurse\n\t\t\t\t\t\tb = a.slice();\n\t\t\t\t\t\tb.splice( 0, i+1 );\n\t\t\t\t\t\tinnerSrc = b.join('.');\n\t\n\t\t\t\t\t\t// Traverse each entry in the array setting the properties requested\n\t\t\t\t\t\tfor ( var j=0, jLen=val.length ; j<jLen ; j++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\to = {};\n\t\t\t\t\t\t\tsetData( o, val[j], innerSrc );\n\t\t\t\t\t\t\tdata[ a[i] ].push( o );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// The inner call to setData has already traversed through the remainder\n\t\t\t\t\t\t// of the source and has set the data, thus we can exit here\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( funcNotation )\n\t\t\t\t\t{\n\t\t\t\t\t\t// Function call\n\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\tdata = data[ a[i] ]( val );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If the nested object doesn't currently exist - since we are\n\t\t\t\t\t// trying to set the value - create it\n\t\t\t\t\tif ( data[ a[i] ] === null || data[ a[i] ] === undefined )\n\t\t\t\t\t{\n\t\t\t\t\t\tdata[ a[i] ] = {};\n\t\t\t\t\t}\n\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t}\n\t\n\t\t\t\t// Last item in the input - i.e, the actual set\n\t\t\t\tif ( aLast.match(__reFn ) )\n\t\t\t\t{\n\t\t\t\t\t// Function call\n\t\t\t\t\tdata = data[ aLast.replace(__reFn, '') ]( val );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// If array notation is used, we just want to strip it and use the property name\n\t\t\t\t\t// and assign the value. If it isn't used, then we get the result we want anyway\n\t\t\t\t\tdata[ aLast.replace(__reArray, '') ] = val;\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\treturn setData( data, val, mSource );\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Array or flat object mapping */\n\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\tdata[mSource] = val;\n\t\t\t};\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Return an array with the full table data\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns array {array} aData Master data array\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetDataMaster ( settings )\n\t{\n\t\treturn _pluck( settings.aoData, '_aData' );\n\t}\n\t\n\t\n\t/**\n\t * Nuke the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnClearTable( settings )\n\t{\n\t\tsettings.aoData.length = 0;\n\t\tsettings.aiDisplayMaster.length = 0;\n\t\tsettings.aiDisplay.length = 0;\n\t}\n\t\n\t\n\t /**\n\t * Take an array of integers (index array) and remove a target integer (value - not\n\t * the key!)\n\t *  @param {array} a Index array to target\n\t *  @param {int} iTarget value to find\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDeleteIndex( a, iTarget, splice )\n\t{\n\t\tvar iTargetIndex = -1;\n\t\n\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( a[i] == iTarget )\n\t\t\t{\n\t\t\t\tiTargetIndex = i;\n\t\t\t}\n\t\t\telse if ( a[i] > iTarget )\n\t\t\t{\n\t\t\t\ta[i]--;\n\t\t\t}\n\t\t}\n\t\n\t\tif ( iTargetIndex != -1 && splice === undefined )\n\t\t{\n\t\t\ta.splice( iTargetIndex, 1 );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Mark cached data as invalid such that a re-read of the data will occur when\n\t * the cached data is next requested. Also update from the data source object.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {int}    rowIdx   Row index to invalidate\n\t * @param {string} [src]    Source to invalidate from: undefined, 'auto', 'dom'\n\t *     or 'data'\n\t * @param {int}    [colIdx] Column index to invalidate. If undefined the whole\n\t *     row will be invalidated\n\t * @memberof DataTable#oApi\n\t *\n\t * @todo For the modularisation of v1.11 this will need to become a callback, so\n\t *   the sort and filter methods can subscribe to it. That will required\n\t *   initialisation options for sorting, which is why it is not already baked in\n\t */\n\tfunction _fnInvalidate( settings, rowIdx, src, colIdx )\n\t{\n\t\tvar row = settings.aoData[ rowIdx ];\n\t\tvar i, ien;\n\t\tvar cellWrite = function ( cell, col ) {\n\t\t\t// This is very frustrating, but in IE if you just write directly\n\t\t\t// to innerHTML, and elements that are overwritten are GC'ed,\n\t\t\t// even if there is a reference to them elsewhere\n\t\t\twhile ( cell.childNodes.length ) {\n\t\t\t\tcell.removeChild( cell.firstChild );\n\t\t\t}\n\t\n\t\t\tcell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );\n\t\t};\n\t\n\t\t// Are we reading last data from DOM or the data object?\n\t\tif ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {\n\t\t\t// Read the data from the DOM\n\t\t\trow._aData = _fnGetRowElements(\n\t\t\t\t\tsettings, row, colIdx, colIdx === undefined ? undefined : row._aData\n\t\t\t\t)\n\t\t\t\t.data;\n\t\t}\n\t\telse {\n\t\t\t// Reading from data object, update the DOM\n\t\t\tvar cells = row.anCells;\n\t\n\t\t\tif ( cells ) {\n\t\t\t\tif ( colIdx !== undefined ) {\n\t\t\t\t\tcellWrite( cells[colIdx], colIdx );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\t\t\tcellWrite( cells[i], i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// For both row and cell invalidation, the cached data for sorting and\n\t\t// filtering is nulled out\n\t\trow._aSortData = null;\n\t\trow._aFilterData = null;\n\t\n\t\t// Invalidate the type for a specific column (if given) or all columns since\n\t\t// the data might have changed\n\t\tvar cols = settings.aoColumns;\n\t\tif ( colIdx !== undefined ) {\n\t\t\tcols[ colIdx ].sType = null;\n\t\t}\n\t\telse {\n\t\t\tfor ( i=0, ien=cols.length ; i<ien ; i++ ) {\n\t\t\t\tcols[i].sType = null;\n\t\t\t}\n\t\n\t\t\t// Update DataTables special `DT_*` attributes for the row\n\t\t\t_fnRowAttributes( row );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Build a data source object from an HTML row, reading the contents of the\n\t * cells that are in the row.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {node|object} TR element from which to read data or existing row\n\t *   object from which to re-read the data from the cells\n\t * @param {int} [colIdx] Optional column index\n\t * @param {array|object} [d] Data source object. If `colIdx` is given then this\n\t *   parameter should also be given and will be used to write the data into.\n\t *   Only the column in question will be written\n\t * @returns {object} Object with two parameters: `data` the data read, in\n\t *   document order, and `cells` and array of nodes (they can be useful to the\n\t *   caller, so rather than needing a second traversal to get them, just return\n\t *   them from here).\n\t * @memberof DataTable#oApi\n\t */\n\tfunction _fnGetRowElements( settings, row, colIdx, d )\n\t{\n\t\tvar\n\t\t\ttds = [],\n\t\t\ttd = row.firstChild,\n\t\t\tname, col, o, i=0, contents,\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tobjectRead = settings._rowReadObject;\n\t\n\t\t// Allow the data object to be passed in, or construct\n\t\td = d || objectRead ? {} : [];\n\t\n\t\tvar attr = function ( str, td  ) {\n\t\t\tif ( typeof str === 'string' ) {\n\t\t\t\tvar idx = str.indexOf('@');\n\t\n\t\t\t\tif ( idx !== -1 ) {\n\t\t\t\t\tvar attr = str.substring( idx+1 );\n\t\t\t\t\tvar setter = _fnSetObjectDataFn( str );\n\t\t\t\t\tsetter( d, td.getAttribute( attr ) );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\t// Read data from a cell and store into the data object\n\t\tvar cellProcess = function ( cell ) {\n\t\t\tif ( colIdx === undefined || colIdx === i ) {\n\t\t\t\tcol = columns[i];\n\t\t\t\tcontents = $.trim(cell.innerHTML);\n\t\n\t\t\t\tif ( col && col._bAttrSrc ) {\n\t\t\t\t\tvar setter = _fnSetObjectDataFn( col.mData._ );\n\t\t\t\t\tsetter( d, contents );\n\t\n\t\t\t\t\tattr( col.mData.sort, cell );\n\t\t\t\t\tattr( col.mData.type, cell );\n\t\t\t\t\tattr( col.mData.filter, cell );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Depending on the `data` option for the columns the data can\n\t\t\t\t\t// be read to either an object or an array.\n\t\t\t\t\tif ( objectRead ) {\n\t\t\t\t\t\tif ( ! col._setter ) {\n\t\t\t\t\t\t\t// Cache the setter function\n\t\t\t\t\t\t\tcol._setter = _fnSetObjectDataFn( col.mData );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcol._setter( d, contents );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\td[i] = contents;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t};\n\t\n\t\tif ( td ) {\n\t\t\t// `tr` element was passed in\n\t\t\twhile ( td ) {\n\t\t\t\tname = td.nodeName.toUpperCase();\n\t\n\t\t\t\tif ( name == \"TD\" || name == \"TH\" ) {\n\t\t\t\t\tcellProcess( td );\n\t\t\t\t\ttds.push( td );\n\t\t\t\t}\n\t\n\t\t\t\ttd = td.nextSibling;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Existing row object passed in\n\t\t\ttds = row.anCells;\n\t\t\t\n\t\t\tfor ( var j=0, jen=tds.length ; j<jen ; j++ ) {\n\t\t\t\tcellProcess( tds[j] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn {\n\t\t\tdata: d,\n\t\t\tcells: tds\n\t\t};\n\t}\n\t/**\n\t * Create a new TR element (and it's TD children) for a row\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow Row to consider\n\t *  @param {node} [nTrIn] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCreateTr ( oSettings, iRow, nTrIn, anTds )\n\t{\n\t\tvar\n\t\t\trow = oSettings.aoData[iRow],\n\t\t\trowData = row._aData,\n\t\t\tcells = [],\n\t\t\tnTr, nTd, oCol,\n\t\t\ti, iLen;\n\t\n\t\tif ( row.nTr === null )\n\t\t{\n\t\t\tnTr = nTrIn || document.createElement('tr');\n\t\n\t\t\trow.nTr = nTr;\n\t\t\trow.anCells = cells;\n\t\n\t\t\t/* Use a private property on the node to allow reserve mapping from the node\n\t\t\t * to the aoData array for fast look up\n\t\t\t */\n\t\t\tnTr._DT_RowIndex = iRow;\n\t\n\t\t\t/* Special parameters can be given by the data source to be used on the row */\n\t\t\t_fnRowAttributes( row );\n\t\n\t\t\t/* Process each column */\n\t\t\tfor ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\toCol = oSettings.aoColumns[i];\n\t\n\t\t\t\tnTd = nTrIn ? anTds[i] : document.createElement( oCol.sCellType );\n\t\t\t\tcells.push( nTd );\n\t\n\t\t\t\t// Need to create the HTML if new, or if a rendering function is defined\n\t\t\t\tif ( !nTrIn || oCol.mRender || oCol.mData !== i )\n\t\t\t\t{\n\t\t\t\t\tnTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );\n\t\t\t\t}\n\t\n\t\t\t\t/* Add user defined class */\n\t\t\t\tif ( oCol.sClass )\n\t\t\t\t{\n\t\t\t\t\tnTd.className += ' '+oCol.sClass;\n\t\t\t\t}\n\t\n\t\t\t\t// Visibility - add or remove as required\n\t\t\t\tif ( oCol.bVisible && ! nTrIn )\n\t\t\t\t{\n\t\t\t\t\tnTr.appendChild( nTd );\n\t\t\t\t}\n\t\t\t\telse if ( ! oCol.bVisible && nTrIn )\n\t\t\t\t{\n\t\t\t\t\tnTd.parentNode.removeChild( nTd );\n\t\t\t\t}\n\t\n\t\t\t\tif ( oCol.fnCreatedCell )\n\t\t\t\t{\n\t\t\t\t\toCol.fnCreatedCell.call( oSettings.oInstance,\n\t\t\t\t\t\tnTd, _fnGetCellData( oSettings, iRow, i ), rowData, iRow, i\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow] );\n\t\t}\n\t\n\t\t// Remove once webkit bug 131819 and Chromium bug 365619 have been resolved\n\t\t// and deployed\n\t\trow.nTr.setAttribute( 'role', 'row' );\n\t}\n\t\n\t\n\t/**\n\t * Add attributes to a row based on the special `DT_*` parameters in a data\n\t * source object.\n\t *  @param {object} DataTables row object for the row to be modified\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnRowAttributes( row )\n\t{\n\t\tvar tr = row.nTr;\n\t\tvar data = row._aData;\n\t\n\t\tif ( tr ) {\n\t\t\tif ( data.DT_RowId ) {\n\t\t\t\ttr.id = data.DT_RowId;\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowClass ) {\n\t\t\t\t// Remove any classes added by DT_RowClass before\n\t\t\t\tvar a = data.DT_RowClass.split(' ');\n\t\t\t\trow.__rowc = row.__rowc ?\n\t\t\t\t\t_unique( row.__rowc.concat( a ) ) :\n\t\t\t\t\ta;\n\t\n\t\t\t\t$(tr)\n\t\t\t\t\t.removeClass( row.__rowc.join(' ') )\n\t\t\t\t\t.addClass( data.DT_RowClass );\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowAttr ) {\n\t\t\t\t$(tr).attr( data.DT_RowAttr );\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowData ) {\n\t\t\t\t$(tr).data( data.DT_RowData );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Create the HTML header for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBuildHead( oSettings )\n\t{\n\t\tvar i, ien, cell, row, column;\n\t\tvar thead = oSettings.nTHead;\n\t\tvar tfoot = oSettings.nTFoot;\n\t\tvar createHeader = $('th, td', thead).length === 0;\n\t\tvar classes = oSettings.oClasses;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\tif ( createHeader ) {\n\t\t\trow = $('<tr/>').appendTo( thead );\n\t\t}\n\t\n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\t\tcell = $( column.nTh ).addClass( column.sClass );\n\t\n\t\t\tif ( createHeader ) {\n\t\t\t\tcell.appendTo( row );\n\t\t\t}\n\t\n\t\t\t// 1.11 move into sorting\n\t\t\tif ( oSettings.oFeatures.bSort ) {\n\t\t\t\tcell.addClass( column.sSortingClass );\n\t\n\t\t\t\tif ( column.bSortable !== false ) {\n\t\t\t\t\tcell\n\t\t\t\t\t\t.attr( 'tabindex', oSettings.iTabIndex )\n\t\t\t\t\t\t.attr( 'aria-controls', oSettings.sTableId );\n\t\n\t\t\t\t\t_fnSortAttachListener( oSettings, column.nTh, i );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( column.sTitle != cell.html() ) {\n\t\t\t\tcell.html( column.sTitle );\n\t\t\t}\n\t\n\t\t\t_fnRenderer( oSettings, 'header' )(\n\t\t\t\toSettings, cell, column, classes\n\t\t\t);\n\t\t}\n\t\n\t\tif ( createHeader ) {\n\t\t\t_fnDetectHeader( oSettings.aoHeader, thead );\n\t\t}\n\t\t\n\t\t/* ARIA role for the rows */\n\t \t$(thead).find('>tr').attr('role', 'row');\n\t\n\t\t/* Deal with the footer - add classes if required */\n\t\t$(thead).find('>tr>th, >tr>td').addClass( classes.sHeaderTH );\n\t\t$(tfoot).find('>tr>th, >tr>td').addClass( classes.sFooterTH );\n\t\n\t\t// Cache the footer cells. Note that we only take the cells from the first\n\t\t// row in the footer. If there is more than one row the user wants to\n\t\t// interact with, they need to use the table().foot() method. Note also this\n\t\t// allows cells to be used for multiple columns using colspan\n\t\tif ( tfoot !== null ) {\n\t\t\tvar cells = oSettings.aoFooter[0];\n\t\n\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tcolumn = columns[i];\n\t\t\t\tcolumn.nTf = cells[i].cell;\n\t\n\t\t\t\tif ( column.sClass ) {\n\t\t\t\t\t$(column.nTf).addClass( column.sClass );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Draw the header (or footer) element based on the column visibility states. The\n\t * methodology here is to use the layout array from _fnDetectHeader, modified for\n\t * the instantaneous column visibility, to construct the new layout. The grid is\n\t * traversed over cell at a time in a rows x columns grid fashion, although each\n\t * cell insert can cover multiple elements in the grid - which is tracks using the\n\t * aApplied array. Cell inserts in the grid will only occur where there isn't\n\t * already a cell in that position.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param array {objects} aoSource Layout array from _fnDetectHeader\n\t *  @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDrawHead( oSettings, aoSource, bIncludeHidden )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, n, nLocalTr;\n\t\tvar aoLocal = [];\n\t\tvar aApplied = [];\n\t\tvar iColumns = oSettings.aoColumns.length;\n\t\tvar iRowspan, iColspan;\n\t\n\t\tif ( ! aoSource )\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\n\t\tif (  bIncludeHidden === undefined )\n\t\t{\n\t\t\tbIncludeHidden = false;\n\t\t}\n\t\n\t\t/* Make a copy of the master layout array, but without the visible columns in it */\n\t\tfor ( i=0, iLen=aoSource.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taoLocal[i] = aoSource[i].slice();\n\t\t\taoLocal[i].nTr = aoSource[i].nTr;\n\t\n\t\t\t/* Remove any columns which are currently hidden */\n\t\t\tfor ( j=iColumns-1 ; j>=0 ; j-- )\n\t\t\t{\n\t\t\t\tif ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )\n\t\t\t\t{\n\t\t\t\t\taoLocal[i].splice( j, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Prep the applied array - it needs an element for each row */\n\t\t\taApplied.push( [] );\n\t\t}\n\t\n\t\tfor ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tnLocalTr = aoLocal[i].nTr;\n\t\n\t\t\t/* All cells are going to be replaced, so empty out the row */\n\t\t\tif ( nLocalTr )\n\t\t\t{\n\t\t\t\twhile( (n = nLocalTr.firstChild) )\n\t\t\t\t{\n\t\t\t\t\tnLocalTr.removeChild( n );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tiRowspan = 1;\n\t\t\t\tiColspan = 1;\n\t\n\t\t\t\t/* Check to see if there is already a cell (row/colspan) covering our target\n\t\t\t\t * insert point. If there is, then there is nothing to do.\n\t\t\t\t */\n\t\t\t\tif ( aApplied[i][j] === undefined )\n\t\t\t\t{\n\t\t\t\t\tnLocalTr.appendChild( aoLocal[i][j].cell );\n\t\t\t\t\taApplied[i][j] = 1;\n\t\n\t\t\t\t\t/* Expand the cell to cover as many rows as needed */\n\t\t\t\t\twhile ( aoLocal[i+iRowspan] !== undefined &&\n\t\t\t\t\t        aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )\n\t\t\t\t\t{\n\t\t\t\t\t\taApplied[i+iRowspan][j] = 1;\n\t\t\t\t\t\tiRowspan++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Expand the cell to cover as many columns as needed */\n\t\t\t\t\twhile ( aoLocal[i][j+iColspan] !== undefined &&\n\t\t\t\t\t        aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Must update the applied array over the rows for the columns */\n\t\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taApplied[i+k][j+iColspan] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tiColspan++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Do the actual expansion in the DOM */\n\t\t\t\t\t$(aoLocal[i][j].cell)\n\t\t\t\t\t\t.attr('rowspan', iRowspan)\n\t\t\t\t\t\t.attr('colspan', iColspan);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Insert the required TR nodes into the table for display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDraw( oSettings )\n\t{\n\t\t/* Provide a pre-callback function which can be used to cancel the draw is false is returned */\n\t\tvar aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );\n\t\tif ( $.inArray( false, aPreDraw ) !== -1 )\n\t\t{\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar i, iLen, n;\n\t\tvar anRows = [];\n\t\tvar iRowCount = 0;\n\t\tvar asStripeClasses = oSettings.asStripeClasses;\n\t\tvar iStripes = asStripeClasses.length;\n\t\tvar iOpenRows = oSettings.aoOpenRows.length;\n\t\tvar oLang = oSettings.oLanguage;\n\t\tvar iInitDisplayStart = oSettings.iInitDisplayStart;\n\t\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\t\tvar aiDisplay = oSettings.aiDisplay;\n\t\n\t\toSettings.bDrawing = true;\n\t\n\t\t/* Check and see if we have an initial draw position from state saving */\n\t\tif ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )\n\t\t{\n\t\t\toSettings._iDisplayStart = bServerSide ?\n\t\t\t\tiInitDisplayStart :\n\t\t\t\tiInitDisplayStart >= oSettings.fnRecordsDisplay() ?\n\t\t\t\t\t0 :\n\t\t\t\t\tiInitDisplayStart;\n\t\n\t\t\toSettings.iInitDisplayStart = -1;\n\t\t}\n\t\n\t\tvar iDisplayStart = oSettings._iDisplayStart;\n\t\tvar iDisplayEnd = oSettings.fnDisplayEnd();\n\t\n\t\t/* Server-side processing draw intercept */\n\t\tif ( oSettings.bDeferLoading )\n\t\t{\n\t\t\toSettings.bDeferLoading = false;\n\t\t\toSettings.iDraw++;\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t}\n\t\telse if ( !bServerSide )\n\t\t{\n\t\t\toSettings.iDraw++;\n\t\t}\n\t\telse if ( !oSettings.bDestroying && !_fnAjaxUpdate( oSettings ) )\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( aiDisplay.length !== 0 )\n\t\t{\n\t\t\tvar iStart = bServerSide ? 0 : iDisplayStart;\n\t\t\tvar iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;\n\t\n\t\t\tfor ( var j=iStart ; j<iEnd ; j++ )\n\t\t\t{\n\t\t\t\tvar iDataIndex = aiDisplay[j];\n\t\t\t\tvar aoData = oSettings.aoData[ iDataIndex ];\n\t\t\t\tif ( aoData.nTr === null )\n\t\t\t\t{\n\t\t\t\t\t_fnCreateTr( oSettings, iDataIndex );\n\t\t\t\t}\n\t\n\t\t\t\tvar nRow = aoData.nTr;\n\t\n\t\t\t\t/* Remove the old striping classes and then add the new one */\n\t\t\t\tif ( iStripes !== 0 )\n\t\t\t\t{\n\t\t\t\t\tvar sStripe = asStripeClasses[ iRowCount % iStripes ];\n\t\t\t\t\tif ( aoData._sRowStripe != sStripe )\n\t\t\t\t\t{\n\t\t\t\t\t\t$(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );\n\t\t\t\t\t\taoData._sRowStripe = sStripe;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Row callback functions - might want to manipulate the row\n\t\t\t\t// iRowCount and j are not currently documented. Are they at all\n\t\t\t\t// useful?\n\t\t\t\t_fnCallbackFire( oSettings, 'aoRowCallback', null,\n\t\t\t\t\t[nRow, aoData._aData, iRowCount, j] );\n\t\n\t\t\t\tanRows.push( nRow );\n\t\t\t\tiRowCount++;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Table is empty - create a row with an empty message in it */\n\t\t\tvar sZero = oLang.sZeroRecords;\n\t\t\tif ( oSettings.iDraw == 1 &&  _fnDataSource( oSettings ) == 'ajax' )\n\t\t\t{\n\t\t\t\tsZero = oLang.sLoadingRecords;\n\t\t\t}\n\t\t\telse if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )\n\t\t\t{\n\t\t\t\tsZero = oLang.sEmptyTable;\n\t\t\t}\n\t\n\t\t\tanRows[ 0 ] = $( '<tr/>', { 'class': iStripes ? asStripeClasses[0] : '' } )\n\t\t\t\t.append( $('<td />', {\n\t\t\t\t\t'valign':  'top',\n\t\t\t\t\t'colSpan': _fnVisbleColumns( oSettings ),\n\t\t\t\t\t'class':   oSettings.oClasses.sRowEmpty\n\t\t\t\t} ).html( sZero ) )[0];\n\t\t}\n\t\n\t\t/* Header and footer callbacks */\n\t\t_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\t\n\t\t_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\t\n\t\tvar body = $(oSettings.nTBody);\n\t\n\t\tbody.children().detach();\n\t\tbody.append( $(anRows) );\n\t\n\t\t/* Call all required callback functions for the end of a draw */\n\t\t_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );\n\t\n\t\t/* Draw is complete, sorting and filtering must be as well */\n\t\toSettings.bSorted = false;\n\t\toSettings.bFiltered = false;\n\t\toSettings.bDrawing = false;\n\t}\n\t\n\t\n\t/**\n\t * Redraw the table - taking account of the various features which are enabled\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {boolean} [holdPosition] Keep the current paging position. By default\n\t *    the paging is reset to the first page\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnReDraw( settings, holdPosition )\n\t{\n\t\tvar\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tsort     = features.bSort,\n\t\t\tfilter   = features.bFilter;\n\t\n\t\tif ( sort ) {\n\t\t\t_fnSort( settings );\n\t\t}\n\t\n\t\tif ( filter ) {\n\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch );\n\t\t}\n\t\telse {\n\t\t\t// No filtering, so we want to just use the display master\n\t\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\t}\n\t\n\t\tif ( holdPosition !== true ) {\n\t\t\tsettings._iDisplayStart = 0;\n\t\t}\n\t\n\t\t// Let any modules know about the draw hold position state (used by\n\t\t// scrolling internally)\n\t\tsettings._drawHold = holdPosition;\n\t\n\t\t_fnDraw( settings );\n\t\n\t\tsettings._drawHold = false;\n\t}\n\t\n\t\n\t/**\n\t * Add the options to the page HTML for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddOptionsHtml ( oSettings )\n\t{\n\t\tvar classes = oSettings.oClasses;\n\t\tvar table = $(oSettings.nTable);\n\t\tvar holding = $('<div/>').insertBefore( table ); // Holding element for speed\n\t\tvar features = oSettings.oFeatures;\n\t\n\t\t// All DataTables are wrapped in a div\n\t\tvar insert = $('<div/>', {\n\t\t\tid:      oSettings.sTableId+'_wrapper',\n\t\t\t'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)\n\t\t} );\n\t\n\t\toSettings.nHolding = holding[0];\n\t\toSettings.nTableWrapper = insert[0];\n\t\toSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;\n\t\n\t\t/* Loop over the user set positioning and place the elements as needed */\n\t\tvar aDom = oSettings.sDom.split('');\n\t\tvar featureNode, cOption, nNewNode, cNext, sAttr, j;\n\t\tfor ( var i=0 ; i<aDom.length ; i++ )\n\t\t{\n\t\t\tfeatureNode = null;\n\t\t\tcOption = aDom[i];\n\t\n\t\t\tif ( cOption == '<' )\n\t\t\t{\n\t\t\t\t/* New container div */\n\t\t\t\tnNewNode = $('<div/>')[0];\n\t\n\t\t\t\t/* Check to see if we should append an id and/or a class name to the container */\n\t\t\t\tcNext = aDom[i+1];\n\t\t\t\tif ( cNext == \"'\" || cNext == '\"' )\n\t\t\t\t{\n\t\t\t\t\tsAttr = \"\";\n\t\t\t\t\tj = 2;\n\t\t\t\t\twhile ( aDom[i+j] != cNext )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr += aDom[i+j];\n\t\t\t\t\t\tj++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Replace jQuery UI constants @todo depreciated */\n\t\t\t\t\tif ( sAttr == \"H\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr = classes.sJUIHeader;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( sAttr == \"F\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr = classes.sJUIFooter;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* The attribute can be in the format of \"#id.class\", \"#id\" or \"class\" This logic\n\t\t\t\t\t * breaks the string into parts and applies them as needed\n\t\t\t\t\t */\n\t\t\t\t\tif ( sAttr.indexOf('.') != -1 )\n\t\t\t\t\t{\n\t\t\t\t\t\tvar aSplit = sAttr.split('.');\n\t\t\t\t\t\tnNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);\n\t\t\t\t\t\tnNewNode.className = aSplit[1];\n\t\t\t\t\t}\n\t\t\t\t\telse if ( sAttr.charAt(0) == \"#\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tnNewNode.id = sAttr.substr(1, sAttr.length-1);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tnNewNode.className = sAttr;\n\t\t\t\t\t}\n\t\n\t\t\t\t\ti += j; /* Move along the position array */\n\t\t\t\t}\n\t\n\t\t\t\tinsert.append( nNewNode );\n\t\t\t\tinsert = $(nNewNode);\n\t\t\t}\n\t\t\telse if ( cOption == '>' )\n\t\t\t{\n\t\t\t\t/* End container div */\n\t\t\t\tinsert = insert.parent();\n\t\t\t}\n\t\t\t// @todo Move options into their own plugins?\n\t\t\telse if ( cOption == 'l' && features.bPaginate && features.bLengthChange )\n\t\t\t{\n\t\t\t\t/* Length */\n\t\t\t\tfeatureNode = _fnFeatureHtmlLength( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'f' && features.bFilter )\n\t\t\t{\n\t\t\t\t/* Filter */\n\t\t\t\tfeatureNode = _fnFeatureHtmlFilter( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'r' && features.bProcessing )\n\t\t\t{\n\t\t\t\t/* pRocessing */\n\t\t\t\tfeatureNode = _fnFeatureHtmlProcessing( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 't' )\n\t\t\t{\n\t\t\t\t/* Table */\n\t\t\t\tfeatureNode = _fnFeatureHtmlTable( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption ==  'i' && features.bInfo )\n\t\t\t{\n\t\t\t\t/* Info */\n\t\t\t\tfeatureNode = _fnFeatureHtmlInfo( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'p' && features.bPaginate )\n\t\t\t{\n\t\t\t\t/* Pagination */\n\t\t\t\tfeatureNode = _fnFeatureHtmlPaginate( oSettings );\n\t\t\t}\n\t\t\telse if ( DataTable.ext.feature.length !== 0 )\n\t\t\t{\n\t\t\t\t/* Plug-in features */\n\t\t\t\tvar aoFeatures = DataTable.ext.feature;\n\t\t\t\tfor ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )\n\t\t\t\t{\n\t\t\t\t\tif ( cOption == aoFeatures[k].cFeature )\n\t\t\t\t\t{\n\t\t\t\t\t\tfeatureNode = aoFeatures[k].fnInit( oSettings );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Add to the 2D features array */\n\t\t\tif ( featureNode )\n\t\t\t{\n\t\t\t\tvar aanFeatures = oSettings.aanFeatures;\n\t\n\t\t\t\tif ( ! aanFeatures[cOption] )\n\t\t\t\t{\n\t\t\t\t\taanFeatures[cOption] = [];\n\t\t\t\t}\n\t\n\t\t\t\taanFeatures[cOption].push( featureNode );\n\t\t\t\tinsert.append( featureNode );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Built our DOM structure - replace the holding div with what we want */\n\t\tholding.replaceWith( insert );\n\t}\n\t\n\t\n\t/**\n\t * Use the DOM source to create up an array of header cells. The idea here is to\n\t * create a layout grid (array) of rows x columns, which contains a reference\n\t * to the cell that that point in the grid (regardless of col/rowspan), such that\n\t * any column / row could be removed and the new grid constructed\n\t *  @param array {object} aLayout Array to store the calculated layout in\n\t *  @param {node} nThead The header/footer element for the table\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDetectHeader ( aLayout, nThead )\n\t{\n\t\tvar nTrs = $(nThead).children('tr');\n\t\tvar nTr, nCell;\n\t\tvar i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;\n\t\tvar bUnique;\n\t\tvar fnShiftCol = function ( a, i, j ) {\n\t\t\tvar k = a[i];\n\t                while ( k[j] ) {\n\t\t\t\tj++;\n\t\t\t}\n\t\t\treturn j;\n\t\t};\n\t\n\t\taLayout.splice( 0, aLayout.length );\n\t\n\t\t/* We know how many rows there are in the layout - so prep it */\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taLayout.push( [] );\n\t\t}\n\t\n\t\t/* Calculate a layout array */\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tnTr = nTrs[i];\n\t\t\tiColumn = 0;\n\t\n\t\t\t/* For every cell in the row... */\n\t\t\tnCell = nTr.firstChild;\n\t\t\twhile ( nCell ) {\n\t\t\t\tif ( nCell.nodeName.toUpperCase() == \"TD\" ||\n\t\t\t\t     nCell.nodeName.toUpperCase() == \"TH\" )\n\t\t\t\t{\n\t\t\t\t\t/* Get the col and rowspan attributes from the DOM and sanitise them */\n\t\t\t\t\tiColspan = nCell.getAttribute('colspan') * 1;\n\t\t\t\t\tiRowspan = nCell.getAttribute('rowspan') * 1;\n\t\t\t\t\tiColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;\n\t\t\t\t\tiRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;\n\t\n\t\t\t\t\t/* There might be colspan cells already in this row, so shift our target\n\t\t\t\t\t * accordingly\n\t\t\t\t\t */\n\t\t\t\t\tiColShifted = fnShiftCol( aLayout, i, iColumn );\n\t\n\t\t\t\t\t/* Cache calculation for unique columns */\n\t\t\t\t\tbUnique = iColspan === 1 ? true : false;\n\t\n\t\t\t\t\t/* If there is col / rowspan, copy the information into the layout grid */\n\t\t\t\t\tfor ( l=0 ; l<iColspan ; l++ )\n\t\t\t\t\t{\n\t\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taLayout[i+k][iColShifted+l] = {\n\t\t\t\t\t\t\t\t\"cell\": nCell,\n\t\t\t\t\t\t\t\t\"unique\": bUnique\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\taLayout[i+k].nTr = nTr;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCell = nCell.nextSibling;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Get an array of unique th elements, one for each column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} nHeader automatically detect the layout from this node - optional\n\t *  @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional\n\t *  @returns array {node} aReturn list of unique th's\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetUniqueThs ( oSettings, nHeader, aLayout )\n\t{\n\t\tvar aReturn = [];\n\t\tif ( !aLayout )\n\t\t{\n\t\t\taLayout = oSettings.aoHeader;\n\t\t\tif ( nHeader )\n\t\t\t{\n\t\t\t\taLayout = [];\n\t\t\t\t_fnDetectHeader( aLayout, nHeader );\n\t\t\t}\n\t\t}\n\t\n\t\tfor ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfor ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tif ( aLayout[i][j].unique &&\n\t\t\t\t\t (!aReturn[j] || !oSettings.bSortCellsTop) )\n\t\t\t\t{\n\t\t\t\t\taReturn[j] = aLayout[i][j].cell;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn aReturn;\n\t}\n\t\n\t/**\n\t * Create an Ajax call based on the table's settings, taking into account that\n\t * parameters can have multiple forms, and backwards compatibility.\n\t *\n\t * @param {object} oSettings dataTables settings object\n\t * @param {array} data Data to send to the server, required by\n\t *     DataTables - may be augmented by developer callbacks\n\t * @param {function} fn Callback function to run when data is obtained\n\t */\n\tfunction _fnBuildAjax( oSettings, data, fn )\n\t{\n\t\t// Compatibility with 1.9-, allow fnServerData and event to manipulate\n\t\t_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [data] );\n\t\n\t\t// Convert to object based for 1.10+ if using the old array scheme which can\n\t\t// come from server-side processing or serverParams\n\t\tif ( data && $.isArray(data) ) {\n\t\t\tvar tmp = {};\n\t\t\tvar rbracket = /(.*?)\\[\\]$/;\n\t\n\t\t\t$.each( data, function (key, val) {\n\t\t\t\tvar match = val.name.match(rbracket);\n\t\n\t\t\t\tif ( match ) {\n\t\t\t\t\t// Support for arrays\n\t\t\t\t\tvar name = match[0];\n\t\n\t\t\t\t\tif ( ! tmp[ name ] ) {\n\t\t\t\t\t\ttmp[ name ] = [];\n\t\t\t\t\t}\n\t\t\t\t\ttmp[ name ].push( val.value );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttmp[val.name] = val.value;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tdata = tmp;\n\t\t}\n\t\n\t\tvar ajaxData;\n\t\tvar ajax = oSettings.ajax;\n\t\tvar instance = oSettings.oInstance;\n\t\tvar callback = function ( json ) {\n\t\t\t_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR] );\n\t\t\tfn( json );\n\t\t};\n\t\n\t\tif ( $.isPlainObject( ajax ) && ajax.data )\n\t\t{\n\t\t\tajaxData = ajax.data;\n\t\n\t\t\tvar newData = $.isFunction( ajaxData ) ?\n\t\t\t\tajaxData( data, oSettings ) :  // fn can manipulate data or return\n\t\t\t\tajaxData;                      // an object object or array to merge\n\t\n\t\t\t// If the function returned something, use that alone\n\t\t\tdata = $.isFunction( ajaxData ) && newData ?\n\t\t\t\tnewData :\n\t\t\t\t$.extend( true, data, newData );\n\t\n\t\t\t// Remove the data property as we've resolved it already and don't want\n\t\t\t// jQuery to do it again (it is restored at the end of the function)\n\t\t\tdelete ajax.data;\n\t\t}\n\t\n\t\tvar baseAjax = {\n\t\t\t\"data\": data,\n\t\t\t\"success\": function (json) {\n\t\t\t\tvar error = json.error || json.sError;\n\t\t\t\tif ( error ) {\n\t\t\t\t\t_fnLog( oSettings, 0, error );\n\t\t\t\t}\n\t\n\t\t\t\toSettings.json = json;\n\t\t\t\tcallback( json );\n\t\t\t},\n\t\t\t\"dataType\": \"json\",\n\t\t\t\"cache\": false,\n\t\t\t\"type\": oSettings.sServerMethod,\n\t\t\t\"error\": function (xhr, error, thrown) {\n\t\t\t\tvar ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );\n\t\n\t\t\t\tif ( $.inArray( true, ret ) === -1 ) {\n\t\t\t\t\tif ( error == \"parsererror\" ) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Invalid JSON response', 1 );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Ajax error', 7 );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t\t}\n\t\t};\n\t\n\t\t// Store the data submitted for the API\n\t\toSettings.oAjaxData = data;\n\t\n\t\t// Allow plug-ins and external processes to modify the data\n\t\t_fnCallbackFire( oSettings, null, 'preXhr', [oSettings, data] );\n\t\n\t\tif ( oSettings.fnServerData )\n\t\t{\n\t\t\t// DataTables 1.9- compatibility\n\t\t\toSettings.fnServerData.call( instance,\n\t\t\t\toSettings.sAjaxSource,\n\t\t\t\t$.map( data, function (val, key) { // Need to convert back to 1.9 trad format\n\t\t\t\t\treturn { name: key, value: val };\n\t\t\t\t} ),\n\t\t\t\tcallback,\n\t\t\t\toSettings\n\t\t\t);\n\t\t}\n\t\telse if ( oSettings.sAjaxSource || typeof ajax === 'string' )\n\t\t{\n\t\t\t// DataTables 1.9- compatibility\n\t\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, {\n\t\t\t\turl: ajax || oSettings.sAjaxSource\n\t\t\t} ) );\n\t\t}\n\t\telse if ( $.isFunction( ajax ) )\n\t\t{\n\t\t\t// Is a function - let the caller define what needs to be done\n\t\t\toSettings.jqXHR = ajax.call( instance, data, callback, oSettings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Object to extend the base settings\n\t\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, ajax ) );\n\t\n\t\t\t// Restore for next time around\n\t\t\tajax.data = ajaxData;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Update the table using an Ajax call\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {boolean} Block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdate( settings )\n\t{\n\t\tif ( settings.bAjaxDataGet ) {\n\t\t\tsettings.iDraw++;\n\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t_fnBuildAjax(\n\t\t\t\tsettings,\n\t\t\t\t_fnAjaxParameters( settings ),\n\t\t\t\tfunction(json) {\n\t\t\t\t\t_fnAjaxUpdateDraw( settings, json );\n\t\t\t\t}\n\t\t\t);\n\t\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\t\n\t\n\t/**\n\t * Build up the parameters in an object needed for a server-side processing\n\t * request. Note that this is basically done twice, is different ways - a modern\n\t * method which is used by default in DataTables 1.10 which uses objects and\n\t * arrays, or the 1.9- method with is name / value pairs. 1.9 method is used if\n\t * the sAjaxSource option is used in the initialisation, or the legacyAjax\n\t * option is set.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {bool} block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxParameters( settings )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tcolumnCount = columns.length,\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tpreSearch = settings.oPreviousSearch,\n\t\t\tpreColSearch = settings.aoPreSearchCols,\n\t\t\ti, data = [], dataProp, column, columnSearch,\n\t\t\tsort = _fnSortFlatten( settings ),\n\t\t\tdisplayStart = settings._iDisplayStart,\n\t\t\tdisplayLength = features.bPaginate !== false ?\n\t\t\t\tsettings._iDisplayLength :\n\t\t\t\t-1;\n\t\n\t\tvar param = function ( name, value ) {\n\t\t\tdata.push( { 'name': name, 'value': value } );\n\t\t};\n\t\n\t\t// DataTables 1.9- compatible method\n\t\tparam( 'sEcho',          settings.iDraw );\n\t\tparam( 'iColumns',       columnCount );\n\t\tparam( 'sColumns',       _pluck( columns, 'sName' ).join(',') );\n\t\tparam( 'iDisplayStart',  displayStart );\n\t\tparam( 'iDisplayLength', displayLength );\n\t\n\t\t// DataTables 1.10+ method\n\t\tvar d = {\n\t\t\tdraw:    settings.iDraw,\n\t\t\tcolumns: [],\n\t\t\torder:   [],\n\t\t\tstart:   displayStart,\n\t\t\tlength:  displayLength,\n\t\t\tsearch:  {\n\t\t\t\tvalue: preSearch.sSearch,\n\t\t\t\tregex: preSearch.bRegex\n\t\t\t}\n\t\t};\n\t\n\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\t\tcolumnSearch = preColSearch[i];\n\t\t\tdataProp = typeof column.mData==\"function\" ? 'function' : column.mData ;\n\t\n\t\t\td.columns.push( {\n\t\t\t\tdata:       dataProp,\n\t\t\t\tname:       column.sName,\n\t\t\t\tsearchable: column.bSearchable,\n\t\t\t\torderable:  column.bSortable,\n\t\t\t\tsearch:     {\n\t\t\t\t\tvalue: columnSearch.sSearch,\n\t\t\t\t\tregex: columnSearch.bRegex\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\tparam( \"mDataProp_\"+i, dataProp );\n\t\n\t\t\tif ( features.bFilter ) {\n\t\t\t\tparam( 'sSearch_'+i,     columnSearch.sSearch );\n\t\t\t\tparam( 'bRegex_'+i,      columnSearch.bRegex );\n\t\t\t\tparam( 'bSearchable_'+i, column.bSearchable );\n\t\t\t}\n\t\n\t\t\tif ( features.bSort ) {\n\t\t\t\tparam( 'bSortable_'+i, column.bSortable );\n\t\t\t}\n\t\t}\n\t\n\t\tif ( features.bFilter ) {\n\t\t\tparam( 'sSearch', preSearch.sSearch );\n\t\t\tparam( 'bRegex', preSearch.bRegex );\n\t\t}\n\t\n\t\tif ( features.bSort ) {\n\t\t\t$.each( sort, function ( i, val ) {\n\t\t\t\td.order.push( { column: val.col, dir: val.dir } );\n\t\n\t\t\t\tparam( 'iSortCol_'+i, val.col );\n\t\t\t\tparam( 'sSortDir_'+i, val.dir );\n\t\t\t} );\n\t\n\t\t\tparam( 'iSortingCols', sort.length );\n\t\t}\n\t\n\t\t// If the legacy.ajax parameter is null, then we automatically decide which\n\t\t// form to use, based on sAjaxSource\n\t\tvar legacy = DataTable.ext.legacy.ajax;\n\t\tif ( legacy === null ) {\n\t\t\treturn settings.sAjaxSource ? data : d;\n\t\t}\n\t\n\t\t// Otherwise, if legacy has been specified then we use that to decide on the\n\t\t// form\n\t\treturn legacy ? data : d;\n\t}\n\t\n\t\n\t/**\n\t * Data the data from the server (nuking the old) and redraw the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} json json data return from the server.\n\t *  @param {string} json.sEcho Tracking flag for DataTables to match requests\n\t *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering\n\t *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering\n\t *  @param {array} json.aaData The data to display on this page\n\t *  @param {string} [json.sColumns] Column ordering (sName, comma separated)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdateDraw ( settings, json )\n\t{\n\t\t// v1.10 uses camelCase variables, while 1.9 uses Hungarian notation.\n\t\t// Support both\n\t\tvar compat = function ( old, modern ) {\n\t\t\treturn json[old] !== undefined ? json[old] : json[modern];\n\t\t};\n\t\n\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\tvar draw            = compat( 'sEcho',                'draw' );\n\t\tvar recordsTotal    = compat( 'iTotalRecords',        'recordsTotal' );\n\t\tvar recordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );\n\t\n\t\tif ( draw ) {\n\t\t\t// Protect against out of sequence returns\n\t\t\tif ( draw*1 < settings.iDraw ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettings.iDraw = draw * 1;\n\t\t}\n\t\n\t\t_fnClearTable( settings );\n\t\tsettings._iRecordsTotal   = parseInt(recordsTotal, 10);\n\t\tsettings._iRecordsDisplay = parseInt(recordsFiltered, 10);\n\t\n\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t_fnAddData( settings, data[i] );\n\t\t}\n\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\n\t\tsettings.bAjaxDataGet = false;\n\t\t_fnDraw( settings );\n\t\n\t\tif ( ! settings._bInitComplete ) {\n\t\t\t_fnInitComplete( settings, json );\n\t\t}\n\t\n\t\tsettings.bAjaxDataGet = true;\n\t\t_fnProcessingDisplay( settings, false );\n\t}\n\t\n\t\n\t/**\n\t * Get the data from the JSON data source to use for drawing a table. Using\n\t * `_fnGetObjectDataFn` allows the data to be sourced from a property of the\n\t * source object, or from a processing function.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param  {object} json Data source object / array from the server\n\t *  @return {array} Array of data to use\n\t */\n\tfunction _fnAjaxDataSrc ( oSettings, json )\n\t{\n\t\tvar dataSrc = $.isPlainObject( oSettings.ajax ) && oSettings.ajax.dataSrc !== undefined ?\n\t\t\toSettings.ajax.dataSrc :\n\t\t\toSettings.sAjaxDataProp; // Compatibility with 1.9-.\n\t\n\t\t// Compatibility with 1.9-. In order to read from aaData, check if the\n\t\t// default has been changed, if not, check for aaData\n\t\tif ( dataSrc === 'data' ) {\n\t\t\treturn json.aaData || json[dataSrc];\n\t\t}\n\t\n\t\treturn dataSrc !== \"\" ?\n\t\t\t_fnGetObjectDataFn( dataSrc )( json ) :\n\t\t\tjson;\n\t}\n\t\n\t/**\n\t * Generate the node required for filtering text\n\t *  @returns {node} Filter control element\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlFilter ( settings )\n\t{\n\t\tvar classes = settings.oClasses;\n\t\tvar tableId = settings.sTableId;\n\t\tvar language = settings.oLanguage;\n\t\tvar previousSearch = settings.oPreviousSearch;\n\t\tvar features = settings.aanFeatures;\n\t\tvar input = '<input type=\"search\" class=\"'+classes.sFilterInput+'\"/>';\n\t\n\t\tvar str = language.sSearch;\n\t\tstr = str.match(/_INPUT_/) ?\n\t\t\tstr.replace('_INPUT_', input) :\n\t\t\tstr+input;\n\t\n\t\tvar filter = $('<div/>', {\n\t\t\t\t'id': ! features.f ? tableId+'_filter' : null,\n\t\t\t\t'class': classes.sFilter\n\t\t\t} )\n\t\t\t.append( $('<label/>' ).append( str ) );\n\t\n\t\tvar searchFn = function() {\n\t\t\t/* Update all other filter input elements for the new display */\n\t\t\tvar n = features.f;\n\t\t\tvar val = !this.value ? \"\" : this.value; // mental IE8 fix :-(\n\t\n\t\t\t/* Now do the filter */\n\t\t\tif ( val != previousSearch.sSearch ) {\n\t\t\t\t_fnFilterComplete( settings, {\n\t\t\t\t\t\"sSearch\": val,\n\t\t\t\t\t\"bRegex\": previousSearch.bRegex,\n\t\t\t\t\t\"bSmart\": previousSearch.bSmart ,\n\t\t\t\t\t\"bCaseInsensitive\": previousSearch.bCaseInsensitive\n\t\t\t\t} );\n\t\n\t\t\t\t// Need to redraw, without resorting\n\t\t\t\tsettings._iDisplayStart = 0;\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t};\n\t\n\t\tvar searchDelay = settings.searchDelay !== null ?\n\t\t\tsettings.searchDelay :\n\t\t\t_fnDataSource( settings ) === 'ssp' ?\n\t\t\t\t400 :\n\t\t\t\t0;\n\t\n\t\tvar jqFilter = $('input', filter)\n\t\t\t.val( previousSearch.sSearch )\n\t\t\t.attr( 'placeholder', language.sSearchPlaceholder )\n\t\t\t.bind(\n\t\t\t\t'keyup.DT search.DT input.DT paste.DT cut.DT',\n\t\t\t\tsearchDelay ?\n\t\t\t\t\t_fnThrottle( searchFn, searchDelay ) :\n\t\t\t\t\tsearchFn\n\t\t\t)\n\t\t\t.bind( 'keypress.DT', function(e) {\n\t\t\t\t/* Prevent form submission */\n\t\t\t\tif ( e.keyCode == 13 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.attr('aria-controls', tableId);\n\t\n\t\t// Update the input elements whenever the table is filtered\n\t\t$(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {\n\t\t\tif ( settings === s ) {\n\t\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t\t// inside an iframe or frame...\n\t\t\t\ttry {\n\t\t\t\t\tif ( jqFilter[0] !== document.activeElement ) {\n\t\t\t\t\t\tjqFilter.val( previousSearch.sSearch );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {}\n\t\t\t}\n\t\t} );\n\t\n\t\treturn filter[0];\n\t}\n\t\n\t\n\t/**\n\t * Filter the table using both the global filter and column based filtering\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oSearch search information\n\t *  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterComplete ( oSettings, oInput, iForce )\n\t{\n\t\tvar oPrevSearch = oSettings.oPreviousSearch;\n\t\tvar aoPrevSearch = oSettings.aoPreSearchCols;\n\t\tvar fnSaveFilter = function ( oFilter ) {\n\t\t\t/* Save the filtering values */\n\t\t\toPrevSearch.sSearch = oFilter.sSearch;\n\t\t\toPrevSearch.bRegex = oFilter.bRegex;\n\t\t\toPrevSearch.bSmart = oFilter.bSmart;\n\t\t\toPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;\n\t\t};\n\t\tvar fnRegex = function ( o ) {\n\t\t\t// Backwards compatibility with the bEscapeRegex option\n\t\t\treturn o.bEscapeRegex !== undefined ? !o.bEscapeRegex : o.bRegex;\n\t\t};\n\t\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t// @todo As per sort - can this be moved into an event handler?\n\t\t_fnColumnTypes( oSettings );\n\t\n\t\t/* In server-side processing all filtering is done by the server, so no point hanging around here */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' )\n\t\t{\n\t\t\t/* Global filter */\n\t\t\t_fnFilter( oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive );\n\t\t\tfnSaveFilter( oInput );\n\t\n\t\t\t/* Now do the individual column filter */\n\t\t\tfor ( var i=0 ; i<aoPrevSearch.length ; i++ )\n\t\t\t{\n\t\t\t\t_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, fnRegex(aoPrevSearch[i]),\n\t\t\t\t\taoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );\n\t\t\t}\n\t\n\t\t\t/* Custom filtering */\n\t\t\t_fnFilterCustom( oSettings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfnSaveFilter( oInput );\n\t\t}\n\t\n\t\t/* Tell the draw function we have been filtering */\n\t\toSettings.bFiltered = true;\n\t\t_fnCallbackFire( oSettings, null, 'search', [oSettings] );\n\t}\n\t\n\t\n\t/**\n\t * Apply custom filtering functions\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCustom( settings )\n\t{\n\t\tvar filters = DataTable.ext.search;\n\t\tvar displayRows = settings.aiDisplay;\n\t\tvar row, rowIdx;\n\t\n\t\tfor ( var i=0, ien=filters.length ; i<ien ; i++ ) {\n\t\t\tvar rows = [];\n\t\n\t\t\t// Loop over each row and see if it should be included\n\t\t\tfor ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {\n\t\t\t\trowIdx = displayRows[ j ];\n\t\t\t\trow = settings.aoData[ rowIdx ];\n\t\n\t\t\t\tif ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {\n\t\t\t\t\trows.push( rowIdx );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// So the array reference doesn't break set the results into the\n\t\t\t// existing array\n\t\t\tdisplayRows.length = 0;\n\t\t\tdisplayRows.push.apply( displayRows, rows );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Filter the table on a per-column basis\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sInput string to filter on\n\t *  @param {int} iColumn column to filter\n\t *  @param {bool} bRegex treat search string as a regular expression or not\n\t *  @param {bool} bSmart use smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case insenstive matching or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, caseInsensitive )\n\t{\n\t\tif ( searchStr === '' ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar data;\n\t\tvar display = settings.aiDisplay;\n\t\tvar rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );\n\t\n\t\tfor ( var i=display.length-1 ; i>=0 ; i-- ) {\n\t\t\tdata = settings.aoData[ display[i] ]._aFilterData[ colIdx ];\n\t\n\t\t\tif ( ! rpSearch.test( data ) ) {\n\t\t\t\tdisplay.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Filter the data table based on user input and draw the table\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} input string to filter on\n\t *  @param {int} force optional - force a research of the master array (1) or not (undefined or 0)\n\t *  @param {bool} regex treat as a regular expression or not\n\t *  @param {bool} smart perform smart filtering or not\n\t *  @param {bool} caseInsensitive Do case insenstive matching or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilter( settings, input, force, regex, smart, caseInsensitive )\n\t{\n\t\tvar rpSearch = _fnFilterCreateSearch( input, regex, smart, caseInsensitive );\n\t\tvar prevSearch = settings.oPreviousSearch.sSearch;\n\t\tvar displayMaster = settings.aiDisplayMaster;\n\t\tvar display, invalidated, i;\n\t\n\t\t// Need to take account of custom filtering functions - always filter\n\t\tif ( DataTable.ext.search.length !== 0 ) {\n\t\t\tforce = true;\n\t\t}\n\t\n\t\t// Check if any of the rows were invalidated\n\t\tinvalidated = _fnFilterData( settings );\n\t\n\t\t// If the input is blank - we just want the full data set\n\t\tif ( input.length <= 0 ) {\n\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t}\n\t\telse {\n\t\t\t// New search - start from the master array\n\t\t\tif ( invalidated ||\n\t\t\t\t force ||\n\t\t\t\t prevSearch.length > input.length ||\n\t\t\t\t input.indexOf(prevSearch) !== 0 ||\n\t\t\t\t settings.bSorted // On resort, the display master needs to be\n\t\t\t\t                  // re-filtered since indexes will have changed\n\t\t\t) {\n\t\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t\t}\n\t\n\t\t\t// Search the display array\n\t\t\tdisplay = settings.aiDisplay;\n\t\n\t\t\tfor ( i=display.length-1 ; i>=0 ; i-- ) {\n\t\t\t\tif ( ! rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {\n\t\t\t\t\tdisplay.splice( i, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Build a regular expression object suitable for searching a table\n\t *  @param {string} sSearch string to search for\n\t *  @param {bool} bRegex treat as a regular expression or not\n\t *  @param {bool} bSmart perform smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n\t *  @returns {RegExp} constructed object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCreateSearch( search, regex, smart, caseInsensitive )\n\t{\n\t\tsearch = regex ?\n\t\t\tsearch :\n\t\t\t_fnEscapeRegex( search );\n\t\t\n\t\tif ( smart ) {\n\t\t\t/* For smart filtering we want to allow the search to work regardless of\n\t\t\t * word order. We also want double quoted text to be preserved, so word\n\t\t\t * order is important - a la google. So this is what we want to\n\t\t\t * generate:\n\t\t\t * \n\t\t\t * ^(?=.*?\\bone\\b)(?=.*?\\btwo three\\b)(?=.*?\\bfour\\b).*$\n\t\t\t */\n\t\t\tvar a = $.map( search.match( /\"[^\"]+\"|[^ ]+/g ) || [''], function ( word ) {\n\t\t\t\tif ( word.charAt(0) === '\"' ) {\n\t\t\t\t\tvar m = word.match( /^\"(.*)\"$/ );\n\t\t\t\t\tword = m ? m[1] : word;\n\t\t\t\t}\n\t\n\t\t\t\treturn word.replace('\"', '');\n\t\t\t} );\n\t\n\t\t\tsearch = '^(?=.*?'+a.join( ')(?=.*?' )+').*$';\n\t\t}\n\t\n\t\treturn new RegExp( search, caseInsensitive ? 'i' : '' );\n\t}\n\t\n\t\n\t/**\n\t * Escape a string such that it can be used in a regular expression\n\t *  @param {string} sVal string to escape\n\t *  @returns {string} escaped string\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnEscapeRegex ( sVal )\n\t{\n\t\treturn sVal.replace( _re_escape_regex, '\\\\$1' );\n\t}\n\t\n\t\n\t\n\tvar __filter_div = $('<div>')[0];\n\tvar __filter_div_textContent = __filter_div.textContent !== undefined;\n\t\n\t// Update the filtering data for each row if needed (by invalidation or first run)\n\tfunction _fnFilterData ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar column;\n\t\tvar i, j, ien, jen, filterData, cellData, row;\n\t\tvar fomatters = DataTable.ext.type.search;\n\t\tvar wasInvalidated = false;\n\t\n\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\trow = settings.aoData[i];\n\t\n\t\t\tif ( ! row._aFilterData ) {\n\t\t\t\tfilterData = [];\n\t\n\t\t\t\tfor ( j=0, jen=columns.length ; j<jen ; j++ ) {\n\t\t\t\t\tcolumn = columns[j];\n\t\n\t\t\t\t\tif ( column.bSearchable ) {\n\t\t\t\t\t\tcellData = _fnGetCellData( settings, i, j, 'filter' );\n\t\n\t\t\t\t\t\tif ( fomatters[ column.sType ] ) {\n\t\t\t\t\t\t\tcellData = fomatters[ column.sType ]( cellData );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Search in DataTables 1.10 is string based. In 1.11 this\n\t\t\t\t\t\t// should be altered to also allow strict type checking.\n\t\t\t\t\t\tif ( cellData === null ) {\n\t\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( typeof cellData !== 'string' && cellData.toString ) {\n\t\t\t\t\t\t\tcellData = cellData.toString();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If it looks like there is an HTML entity in the string,\n\t\t\t\t\t// attempt to decode it so sorting works as expected. Note that\n\t\t\t\t\t// we could use a single line of jQuery to do this, but the DOM\n\t\t\t\t\t// method used here is much faster http://jsperf.com/html-decode\n\t\t\t\t\tif ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {\n\t\t\t\t\t\t__filter_div.innerHTML = cellData;\n\t\t\t\t\t\tcellData = __filter_div_textContent ?\n\t\t\t\t\t\t\t__filter_div.textContent :\n\t\t\t\t\t\t\t__filter_div.innerText;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif ( cellData.replace ) {\n\t\t\t\t\t\tcellData = cellData.replace(/[\\r\\n]/g, '');\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfilterData.push( cellData );\n\t\t\t\t}\n\t\n\t\t\t\trow._aFilterData = filterData;\n\t\t\t\trow._sFilterRow = filterData.join('  ');\n\t\t\t\twasInvalidated = true;\n\t\t\t}\n\t\t}\n\t\n\t\treturn wasInvalidated;\n\t}\n\t\n\t\n\t/**\n\t * Convert from the internal Hungarian notation to camelCase for external\n\t * interaction\n\t *  @param {object} obj Object to convert\n\t *  @returns {object} Inverted object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSearchToCamel ( obj )\n\t{\n\t\treturn {\n\t\t\tsearch:          obj.sSearch,\n\t\t\tsmart:           obj.bSmart,\n\t\t\tregex:           obj.bRegex,\n\t\t\tcaseInsensitive: obj.bCaseInsensitive\n\t\t};\n\t}\n\t\n\t\n\t\n\t/**\n\t * Convert from camelCase notation to the internal Hungarian. We could use the\n\t * Hungarian convert function here, but this is cleaner\n\t *  @param {object} obj Object to convert\n\t *  @returns {object} Inverted object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSearchToHung ( obj )\n\t{\n\t\treturn {\n\t\t\tsSearch:          obj.search,\n\t\t\tbSmart:           obj.smart,\n\t\t\tbRegex:           obj.regex,\n\t\t\tbCaseInsensitive: obj.caseInsensitive\n\t\t};\n\t}\n\t\n\t/**\n\t * Generate the node required for the info display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {node} Information element\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlInfo ( settings )\n\t{\n\t\tvar\n\t\t\ttid = settings.sTableId,\n\t\t\tnodes = settings.aanFeatures.i,\n\t\t\tn = $('<div/>', {\n\t\t\t\t'class': settings.oClasses.sInfo,\n\t\t\t\t'id': ! nodes ? tid+'_info' : null\n\t\t\t} );\n\t\n\t\tif ( ! nodes ) {\n\t\t\t// Update display on each draw\n\t\t\tsettings.aoDrawCallback.push( {\n\t\t\t\t\"fn\": _fnUpdateInfo,\n\t\t\t\t\"sName\": \"information\"\n\t\t\t} );\n\t\n\t\t\tn\n\t\t\t\t.attr( 'role', 'status' )\n\t\t\t\t.attr( 'aria-live', 'polite' );\n\t\n\t\t\t// Table is described by our info div\n\t\t\t$(settings.nTable).attr( 'aria-describedby', tid+'_info' );\n\t\t}\n\t\n\t\treturn n[0];\n\t}\n\t\n\t\n\t/**\n\t * Update the information elements in the display\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnUpdateInfo ( settings )\n\t{\n\t\t/* Show information about the table */\n\t\tvar nodes = settings.aanFeatures.i;\n\t\tif ( nodes.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\tlang  = settings.oLanguage,\n\t\t\tstart = settings._iDisplayStart+1,\n\t\t\tend   = settings.fnDisplayEnd(),\n\t\t\tmax   = settings.fnRecordsTotal(),\n\t\t\ttotal = settings.fnRecordsDisplay(),\n\t\t\tout   = total ?\n\t\t\t\tlang.sInfo :\n\t\t\t\tlang.sInfoEmpty;\n\t\n\t\tif ( total !== max ) {\n\t\t\t/* Record set after filtering */\n\t\t\tout += ' ' + lang.sInfoFiltered;\n\t\t}\n\t\n\t\t// Convert the macros\n\t\tout += lang.sInfoPostFix;\n\t\tout = _fnInfoMacros( settings, out );\n\t\n\t\tvar callback = lang.fnInfoCallback;\n\t\tif ( callback !== null ) {\n\t\t\tout = callback.call( settings.oInstance,\n\t\t\t\tsettings, start, end, max, total, out\n\t\t\t);\n\t\t}\n\t\n\t\t$(nodes).html( out );\n\t}\n\t\n\t\n\tfunction _fnInfoMacros ( settings, str )\n\t{\n\t\t// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only\n\t\t// internally\n\t\tvar\n\t\t\tformatter  = settings.fnFormatNumber,\n\t\t\tstart      = settings._iDisplayStart+1,\n\t\t\tlen        = settings._iDisplayLength,\n\t\t\tvis        = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\t\n\t\treturn str.\n\t\t\treplace(/_START_/g, formatter.call( settings, start ) ).\n\t\t\treplace(/_END_/g,   formatter.call( settings, settings.fnDisplayEnd() ) ).\n\t\t\treplace(/_MAX_/g,   formatter.call( settings, settings.fnRecordsTotal() ) ).\n\t\t\treplace(/_TOTAL_/g, formatter.call( settings, vis ) ).\n\t\t\treplace(/_PAGE_/g,  formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).\n\t\t\treplace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );\n\t}\n\t\n\t\n\t\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitialise ( settings )\n\t{\n\t\tvar i, iLen, iAjaxStart=settings.iInitDisplayStart;\n\t\tvar columns = settings.aoColumns, column;\n\t\tvar features = settings.oFeatures;\n\t\n\t\t/* Ensure that the table data is fully initialised */\n\t\tif ( ! settings.bInitialised ) {\n\t\t\tsetTimeout( function(){ _fnInitialise( settings ); }, 200 );\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Show the display HTML options */\n\t\t_fnAddOptionsHtml( settings );\n\t\n\t\t/* Build and draw the header / footer for the table */\n\t\t_fnBuildHead( settings );\n\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\n\t\t/* Okay to show that something is going on now */\n\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t/* Calculate sizes for columns */\n\t\tif ( features.bAutoWidth ) {\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t}\n\t\n\t\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\n\t\t\tif ( column.sWidth ) {\n\t\t\t\tcolumn.nTh.style.width = _fnStringToCss( column.sWidth );\n\t\t\t}\n\t\t}\n\t\n\t\t// If there is default sorting required - let's do it. The sort function\n\t\t// will do the drawing for us. Otherwise we draw the table regardless of the\n\t\t// Ajax source - this allows the table to look initialised for Ajax sourcing\n\t\t// data (show 'loading' message possibly)\n\t\t_fnReDraw( settings );\n\t\n\t\t// Server-side processing init complete is done by _fnAjaxUpdateDraw\n\t\tvar dataSrc = _fnDataSource( settings );\n\t\tif ( dataSrc != 'ssp' ) {\n\t\t\t// if there is an ajax source load the data\n\t\t\tif ( dataSrc == 'ajax' ) {\n\t\t\t\t_fnBuildAjax( settings, [], function(json) {\n\t\t\t\t\tvar aData = _fnAjaxDataSrc( settings, json );\n\t\n\t\t\t\t\t// Got the data - add it to the table\n\t\t\t\t\tfor ( i=0 ; i<aData.length ; i++ ) {\n\t\t\t\t\t\t_fnAddData( settings, aData[i] );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Reset the init display for cookie saving. We've already done\n\t\t\t\t\t// a filter, and therefore cleared it before. So we need to make\n\t\t\t\t\t// it appear 'fresh'\n\t\t\t\t\tsettings.iInitDisplayStart = iAjaxStart;\n\t\n\t\t\t\t\t_fnReDraw( settings );\n\t\n\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t_fnInitComplete( settings, json );\n\t\t\t\t}, settings );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t_fnInitComplete( settings );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} [json] JSON from the server that completed the table, if using Ajax source\n\t *    with client-side processing (optional)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitComplete ( settings, json )\n\t{\n\t\tsettings._bInitComplete = true;\n\t\n\t\t// On an Ajax load we now have data and therefore want to apply the column\n\t\t// sizing\n\t\tif ( json ) {\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );\n\t}\n\t\n\t\n\tfunction _fnLengthChange ( settings, val )\n\t{\n\t\tvar len = parseInt( val, 10 );\n\t\tsettings._iDisplayLength = len;\n\t\n\t\t_fnLengthOverflow( settings );\n\t\n\t\t// Fire length change event\n\t\t_fnCallbackFire( settings, null, 'length', [settings, len] );\n\t}\n\t\n\t\n\t/**\n\t * Generate the node required for user display length changing\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Display length feature node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlLength ( settings )\n\t{\n\t\tvar\n\t\t\tclasses  = settings.oClasses,\n\t\t\ttableId  = settings.sTableId,\n\t\t\tmenu     = settings.aLengthMenu,\n\t\t\td2       = $.isArray( menu[0] ),\n\t\t\tlengths  = d2 ? menu[0] : menu,\n\t\t\tlanguage = d2 ? menu[1] : menu;\n\t\n\t\tvar select = $('<select/>', {\n\t\t\t'name':          tableId+'_length',\n\t\t\t'aria-controls': tableId,\n\t\t\t'class':         classes.sLengthSelect\n\t\t} );\n\t\n\t\tfor ( var i=0, ien=lengths.length ; i<ien ; i++ ) {\n\t\t\tselect[0][ i ] = new Option( language[i], lengths[i] );\n\t\t}\n\t\n\t\tvar div = $('<div><label/></div>').addClass( classes.sLength );\n\t\tif ( ! settings.aanFeatures.l ) {\n\t\t\tdiv[0].id = tableId+'_length';\n\t\t}\n\t\n\t\tdiv.children().append(\n\t\t\tsettings.oLanguage.sLengthMenu.replace( '_MENU_', select[0].outerHTML )\n\t\t);\n\t\n\t\t// Can't use `select` variable as user might provide their own and the\n\t\t// reference is broken by the use of outerHTML\n\t\t$('select', div)\n\t\t\t.val( settings._iDisplayLength )\n\t\t\t.bind( 'change.DT', function(e) {\n\t\t\t\t_fnLengthChange( settings, $(this).val() );\n\t\t\t\t_fnDraw( settings );\n\t\t\t} );\n\t\n\t\t// Update node value whenever anything changes the table's length\n\t\t$(settings.nTable).bind( 'length.dt.DT', function (e, s, len) {\n\t\t\tif ( settings === s ) {\n\t\t\t\t$('select', div).val( len );\n\t\t\t}\n\t\t} );\n\t\n\t\treturn div[0];\n\t}\n\t\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Note that most of the paging logic is done in\n\t * DataTable.ext.pager\n\t */\n\t\n\t/**\n\t * Generate the node required for default pagination\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {node} Pagination feature node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlPaginate ( settings )\n\t{\n\t\tvar\n\t\t\ttype   = settings.sPaginationType,\n\t\t\tplugin = DataTable.ext.pager[ type ],\n\t\t\tmodern = typeof plugin === 'function',\n\t\t\tredraw = function( settings ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t},\n\t\t\tnode = $('<div/>').addClass( settings.oClasses.sPaging + type )[0],\n\t\t\tfeatures = settings.aanFeatures;\n\t\n\t\tif ( ! modern ) {\n\t\t\tplugin.fnInit( settings, node, redraw );\n\t\t}\n\t\n\t\t/* Add a draw callback for the pagination on first instance, to update the paging display */\n\t\tif ( ! features.p )\n\t\t{\n\t\t\tnode.id = settings.sTableId+'_paginate';\n\t\n\t\t\tsettings.aoDrawCallback.push( {\n\t\t\t\t\"fn\": function( settings ) {\n\t\t\t\t\tif ( modern ) {\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\tstart      = settings._iDisplayStart,\n\t\t\t\t\t\t\tlen        = settings._iDisplayLength,\n\t\t\t\t\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\t\t\t\t\tall        = len === -1,\n\t\t\t\t\t\t\tpage = all ? 0 : Math.ceil( start / len ),\n\t\t\t\t\t\t\tpages = all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\t\t\t\tbuttons = plugin(page, pages),\n\t\t\t\t\t\t\ti, ien;\n\t\n\t\t\t\t\t\tfor ( i=0, ien=features.p.length ; i<ien ; i++ ) {\n\t\t\t\t\t\t\t_fnRenderer( settings, 'pageButton' )(\n\t\t\t\t\t\t\t\tsettings, features.p[i], i, buttons, page, pages\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplugin.fnUpdate( settings, redraw );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"sName\": \"pagination\"\n\t\t\t} );\n\t\t}\n\t\n\t\treturn node;\n\t}\n\t\n\t\n\t/**\n\t * Alter the display settings to change the page\n\t *  @param {object} settings DataTables settings object\n\t *  @param {string|int} action Paging action to take: \"first\", \"previous\",\n\t *    \"next\" or \"last\" or page number to jump to (integer)\n\t *  @param [bool] redraw Automatically draw the update or not\n\t *  @returns {bool} true page has changed, false - no change\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnPageChange ( settings, action, redraw )\n\t{\n\t\tvar\n\t\t\tstart     = settings._iDisplayStart,\n\t\t\tlen       = settings._iDisplayLength,\n\t\t\trecords   = settings.fnRecordsDisplay();\n\t\n\t\tif ( records === 0 || len === -1 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( typeof action === \"number\" )\n\t\t{\n\t\t\tstart = action * len;\n\t\n\t\t\tif ( start > records )\n\t\t\t{\n\t\t\t\tstart = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"first\" )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( action == \"previous\" )\n\t\t{\n\t\t\tstart = len >= 0 ?\n\t\t\t\tstart - len :\n\t\t\t\t0;\n\t\n\t\t\tif ( start < 0 )\n\t\t\t{\n\t\t\t  start = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"next\" )\n\t\t{\n\t\t\tif ( start + len < records )\n\t\t\t{\n\t\t\t\tstart += len;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"last\" )\n\t\t{\n\t\t\tstart = Math.floor( (records-1) / len) * len;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_fnLog( settings, 0, \"Unknown paging action: \"+action, 5 );\n\t\t}\n\t\n\t\tvar changed = settings._iDisplayStart !== start;\n\t\tsettings._iDisplayStart = start;\n\t\n\t\tif ( changed ) {\n\t\t\t_fnCallbackFire( settings, null, 'page', [settings] );\n\t\n\t\t\tif ( redraw ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t}\n\t\n\t\treturn changed;\n\t}\n\t\n\t\n\t\n\t/**\n\t * Generate the node required for the processing node\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Processing element\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlProcessing ( settings )\n\t{\n\t\treturn $('<div/>', {\n\t\t\t\t'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,\n\t\t\t\t'class': settings.oClasses.sProcessing\n\t\t\t} )\n\t\t\t.html( settings.oLanguage.sProcessing )\n\t\t\t.insertBefore( settings.nTable )[0];\n\t}\n\t\n\t\n\t/**\n\t * Display or hide the processing indicator\n\t *  @param {object} settings dataTables settings object\n\t *  @param {bool} show Show the processing indicator (true) or not (false)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnProcessingDisplay ( settings, show )\n\t{\n\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t$(settings.aanFeatures.r).css( 'display', show ? 'block' : 'none' );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'processing', [settings, show] );\n\t}\n\t\n\t/**\n\t * Add any control elements for the table - specifically scrolling\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Node to add to the DOM\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlTable ( settings )\n\t{\n\t\tvar table = $(settings.nTable);\n\t\n\t\t// Add the ARIA grid role to the table\n\t\ttable.attr( 'role', 'grid' );\n\t\n\t\t// Scrolling from here on in\n\t\tvar scroll = settings.oScroll;\n\t\n\t\tif ( scroll.sX === '' && scroll.sY === '' ) {\n\t\t\treturn settings.nTable;\n\t\t}\n\t\n\t\tvar scrollX = scroll.sX;\n\t\tvar scrollY = scroll.sY;\n\t\tvar classes = settings.oClasses;\n\t\tvar caption = table.children('caption');\n\t\tvar captionSide = caption.length ? caption[0]._captionSide : null;\n\t\tvar headerClone = $( table[0].cloneNode(false) );\n\t\tvar footerClone = $( table[0].cloneNode(false) );\n\t\tvar footer = table.children('tfoot');\n\t\tvar _div = '<div/>';\n\t\tvar size = function ( s ) {\n\t\t\treturn !s ? null : _fnStringToCss( s );\n\t\t};\n\t\n\t\t// This is fairly messy, but with x scrolling enabled, if the table has a\n\t\t// width attribute, regardless of any width applied using the column width\n\t\t// options, the browser will shrink or grow the table as needed to fit into\n\t\t// that 100%. That would make the width options useless. So we remove it.\n\t\t// This is okay, under the assumption that width:100% is applied to the\n\t\t// table in CSS (it is in the default stylesheet) which will set the table\n\t\t// width as appropriate (the attribute and css behave differently...)\n\t\tif ( scroll.sX && table.attr('width') === '100%' ) {\n\t\t\ttable.removeAttr('width');\n\t\t}\n\t\n\t\tif ( ! footer.length ) {\n\t\t\tfooter = null;\n\t\t}\n\t\n\t\t/*\n\t\t * The HTML structure that we want to generate in this function is:\n\t\t *  div - scroller\n\t\t *    div - scroll head\n\t\t *      div - scroll head inner\n\t\t *        table - scroll head table\n\t\t *          thead - thead\n\t\t *    div - scroll body\n\t\t *      table - table (master table)\n\t\t *        thead - thead clone for sizing\n\t\t *        tbody - tbody\n\t\t *    div - scroll foot\n\t\t *      div - scroll foot inner\n\t\t *        table - scroll foot table\n\t\t *          tfoot - tfoot\n\t\t */\n\t\tvar scroller = $( _div, { 'class': classes.sScrollWrapper } )\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollHead } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.sScrollHeadInner } )\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\t'box-sizing': 'content-box',\n\t\t\t\t\t\t\t\twidth: scroll.sXInner || '100%'\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\theaderClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append( captionSide === 'top' ? caption : null )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('thead')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollBody } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\t\theight: size( scrollY ),\n\t\t\t\t\t\twidth: size( scrollX )\n\t\t\t\t\t} )\n\t\t\t\t\t.append( table )\n\t\t\t);\n\t\n\t\tif ( footer ) {\n\t\t\tscroller.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollFoot } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.sScrollFootInner } )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\tfooterClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append( captionSide === 'bottom' ? caption : null )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('tfoot')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\n\t\tvar children = scroller.children();\n\t\tvar scrollHead = children[0];\n\t\tvar scrollBody = children[1];\n\t\tvar scrollFoot = footer ? children[2] : null;\n\t\n\t\t// When the body is scrolled, then we also want to scroll the headers\n\t\tif ( scrollX ) {\n\t\t\t$(scrollBody).on( 'scroll.DT', function (e) {\n\t\t\t\tvar scrollLeft = this.scrollLeft;\n\t\n\t\t\t\tscrollHead.scrollLeft = scrollLeft;\n\t\n\t\t\t\tif ( footer ) {\n\t\t\t\t\tscrollFoot.scrollLeft = scrollLeft;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\n\t\tsettings.nScrollHead = scrollHead;\n\t\tsettings.nScrollBody = scrollBody;\n\t\tsettings.nScrollFoot = scrollFoot;\n\t\n\t\t// On redraw - align columns\n\t\tsettings.aoDrawCallback.push( {\n\t\t\t\"fn\": _fnScrollDraw,\n\t\t\t\"sName\": \"scrolling\"\n\t\t} );\n\t\n\t\treturn scroller[0];\n\t}\n\t\n\t\n\t\n\t/**\n\t * Update the header, footer and body tables for resizing - i.e. column\n\t * alignment.\n\t *\n\t * Welcome to the most horrible function DataTables. The process that this\n\t * function follows is basically:\n\t *   1. Re-create the table inside the scrolling div\n\t *   2. Take live measurements from the DOM\n\t *   3. Apply the measurements to align the columns\n\t *   4. Clean up\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnScrollDraw ( settings )\n\t{\n\t\t// Given that this is such a monster function, a lot of variables are use\n\t\t// to try and keep the minimised size as small as possible\n\t\tvar\n\t\t\tscroll         = settings.oScroll,\n\t\t\tscrollX        = scroll.sX,\n\t\t\tscrollXInner   = scroll.sXInner,\n\t\t\tscrollY        = scroll.sY,\n\t\t\tbarWidth       = scroll.iBarWidth,\n\t\t\tdivHeader      = $(settings.nScrollHead),\n\t\t\tdivHeaderStyle = divHeader[0].style,\n\t\t\tdivHeaderInner = divHeader.children('div'),\n\t\t\tdivHeaderInnerStyle = divHeaderInner[0].style,\n\t\t\tdivHeaderTable = divHeaderInner.children('table'),\n\t\t\tdivBodyEl      = settings.nScrollBody,\n\t\t\tdivBody        = $(divBodyEl),\n\t\t\tdivBodyStyle   = divBodyEl.style,\n\t\t\tdivFooter      = $(settings.nScrollFoot),\n\t\t\tdivFooterInner = divFooter.children('div'),\n\t\t\tdivFooterTable = divFooterInner.children('table'),\n\t\t\theader         = $(settings.nTHead),\n\t\t\ttable          = $(settings.nTable),\n\t\t\ttableEl        = table[0],\n\t\t\ttableStyle     = tableEl.style,\n\t\t\tfooter         = settings.nTFoot ? $(settings.nTFoot) : null,\n\t\t\tbrowser        = settings.oBrowser,\n\t\t\tie67           = browser.bScrollOversize,\n\t\t\theaderTrgEls, footerTrgEls,\n\t\t\theaderSrcEls, footerSrcEls,\n\t\t\theaderCopy, footerCopy,\n\t\t\theaderWidths=[], footerWidths=[],\n\t\t\theaderContent=[],\n\t\t\tidx, correction, sanityWidth,\n\t\t\tzeroOut = function(nSizer) {\n\t\t\t\tvar style = nSizer.style;\n\t\t\t\tstyle.paddingTop = \"0\";\n\t\t\t\tstyle.paddingBottom = \"0\";\n\t\t\t\tstyle.borderTopWidth = \"0\";\n\t\t\t\tstyle.borderBottomWidth = \"0\";\n\t\t\t\tstyle.height = 0;\n\t\t\t};\n\t\n\t\t/*\n\t\t * 1. Re-create the table inside the scrolling div\n\t\t */\n\t\n\t\t// Remove the old minimised thead and tfoot elements in the inner table\n\t\ttable.children('thead, tfoot').remove();\n\t\n\t\t// Clone the current header and footer elements and then place it into the inner table\n\t\theaderCopy = header.clone().prependTo( table );\n\t\theaderTrgEls = header.find('tr'); // original header is in its own table\n\t\theaderSrcEls = headerCopy.find('tr');\n\t\theaderCopy.find('th, td').removeAttr('tabindex');\n\t\n\t\tif ( footer ) {\n\t\t\tfooterCopy = footer.clone().prependTo( table );\n\t\t\tfooterTrgEls = footer.find('tr'); // the original tfoot is in its own table and must be sized\n\t\t\tfooterSrcEls = footerCopy.find('tr');\n\t\t}\n\t\n\t\n\t\t/*\n\t\t * 2. Take live measurements from the DOM - do not alter the DOM itself!\n\t\t */\n\t\n\t\t// Remove old sizing and apply the calculated column widths\n\t\t// Get the unique column headers in the newly created (cloned) header. We want to apply the\n\t\t// calculated sizes to this header\n\t\tif ( ! scrollX )\n\t\t{\n\t\t\tdivBodyStyle.width = '100%';\n\t\t\tdivHeader[0].style.width = '100%';\n\t\t}\n\t\n\t\t$.each( _fnGetUniqueThs( settings, headerCopy ), function ( i, el ) {\n\t\t\tidx = _fnVisibleToColumnIndex( settings, i );\n\t\t\tel.style.width = settings.aoColumns[idx].sWidth;\n\t\t} );\n\t\n\t\tif ( footer ) {\n\t\t\t_fnApplyToChildren( function(n) {\n\t\t\t\tn.style.width = \"\";\n\t\t\t}, footerSrcEls );\n\t\t}\n\t\n\t\t// If scroll collapse is enabled, when we put the headers back into the body for sizing, we\n\t\t// will end up forcing the scrollbar to appear, making our measurements wrong for when we\n\t\t// then hide it (end of this function), so add the header height to the body scroller.\n\t\tif ( scroll.bCollapse && scrollY !== \"\" ) {\n\t\t\tdivBodyStyle.height = (divBody[0].offsetHeight + header[0].offsetHeight)+\"px\";\n\t\t}\n\t\n\t\t// Size the table as a whole\n\t\tsanityWidth = table.outerWidth();\n\t\tif ( scrollX === \"\" ) {\n\t\t\t// No x scrolling\n\t\t\ttableStyle.width = \"100%\";\n\t\n\t\t\t// IE7 will make the width of the table when 100% include the scrollbar\n\t\t\t// - which is shouldn't. When there is a scrollbar we need to take this\n\t\t\t// into account.\n\t\t\tif ( ie67 && (table.find('tbody').height() > divBodyEl.offsetHeight ||\n\t\t\t\tdivBody.css('overflow-y') == \"scroll\")\n\t\t\t) {\n\t\t\t\ttableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// x scrolling\n\t\t\tif ( scrollXInner !== \"\" ) {\n\t\t\t\t// x scroll inner has been given - use it\n\t\t\t\ttableStyle.width = _fnStringToCss(scrollXInner);\n\t\t\t}\n\t\t\telse if ( sanityWidth == divBody.width() && divBody.height() < table.height() ) {\n\t\t\t\t// There is y-scrolling - try to take account of the y scroll bar\n\t\t\t\ttableStyle.width = _fnStringToCss( sanityWidth-barWidth );\n\t\t\t\tif ( table.outerWidth() > sanityWidth-barWidth ) {\n\t\t\t\t\t// Not possible to take account of it\n\t\t\t\t\ttableStyle.width = _fnStringToCss( sanityWidth );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// When all else fails\n\t\t\t\ttableStyle.width = _fnStringToCss( sanityWidth );\n\t\t\t}\n\t\t}\n\t\n\t\t// Recalculate the sanity width - now that we've applied the required width,\n\t\t// before it was a temporary variable. This is required because the column\n\t\t// width calculation is done before this table DOM is created.\n\t\tsanityWidth = table.outerWidth();\n\t\n\t\t// Hidden header should have zero height, so remove padding and borders. Then\n\t\t// set the width based on the real headers\n\t\n\t\t// Apply all styles in one pass\n\t\t_fnApplyToChildren( zeroOut, headerSrcEls );\n\t\n\t\t// Read all widths in next pass\n\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\theaderContent.push( nSizer.innerHTML );\n\t\t\theaderWidths.push( _fnStringToCss( $(nSizer).css('width') ) );\n\t\t}, headerSrcEls );\n\t\n\t\t// Apply all widths in final pass\n\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\tnToSize.style.width = headerWidths[i];\n\t\t}, headerTrgEls );\n\t\n\t\t$(headerSrcEls).height(0);\n\t\n\t\t/* Same again with the footer if we have one */\n\t\tif ( footer )\n\t\t{\n\t\t\t_fnApplyToChildren( zeroOut, footerSrcEls );\n\t\n\t\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\t\tfooterWidths.push( _fnStringToCss( $(nSizer).css('width') ) );\n\t\t\t}, footerSrcEls );\n\t\n\t\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\t\tnToSize.style.width = footerWidths[i];\n\t\t\t}, footerTrgEls );\n\t\n\t\t\t$(footerSrcEls).height(0);\n\t\t}\n\t\n\t\n\t\t/*\n\t\t * 3. Apply the measurements\n\t\t */\n\t\n\t\t// \"Hide\" the header and footer that we used for the sizing. We need to keep\n\t\t// the content of the cell so that the width applied to the header and body\n\t\t// both match, but we want to hide it completely. We want to also fix their\n\t\t// width to what they currently are\n\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\" style=\"height:0;overflow:hidden;\">'+headerContent[i]+'</div>';\n\t\t\tnSizer.style.width = headerWidths[i];\n\t\t}, headerSrcEls );\n\t\n\t\tif ( footer )\n\t\t{\n\t\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\t\tnSizer.innerHTML = \"\";\n\t\t\t\tnSizer.style.width = footerWidths[i];\n\t\t\t}, footerSrcEls );\n\t\t}\n\t\n\t\t// Sanity check that the table is of a sensible width. If not then we are going to get\n\t\t// misalignment - try to prevent this by not allowing the table to shrink below its min width\n\t\tif ( table.outerWidth() < sanityWidth )\n\t\t{\n\t\t\t// The min width depends upon if we have a vertical scrollbar visible or not */\n\t\t\tcorrection = ((divBodyEl.scrollHeight > divBodyEl.offsetHeight ||\n\t\t\t\tdivBody.css('overflow-y') == \"scroll\")) ?\n\t\t\t\t\tsanityWidth+barWidth :\n\t\t\t\t\tsanityWidth;\n\t\n\t\t\t// IE6/7 are a law unto themselves...\n\t\t\tif ( ie67 && (divBodyEl.scrollHeight >\n\t\t\t\tdivBodyEl.offsetHeight || divBody.css('overflow-y') == \"scroll\")\n\t\t\t) {\n\t\t\t\ttableStyle.width = _fnStringToCss( correction-barWidth );\n\t\t\t}\n\t\n\t\t\t// And give the user a warning that we've stopped the table getting too small\n\t\t\tif ( scrollX === \"\" || scrollXInner !== \"\" ) {\n\t\t\t\t_fnLog( settings, 1, 'Possible column misalignment', 6 );\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcorrection = '100%';\n\t\t}\n\t\n\t\t// Apply to the container elements\n\t\tdivBodyStyle.width = _fnStringToCss( correction );\n\t\tdivHeaderStyle.width = _fnStringToCss( correction );\n\t\n\t\tif ( footer ) {\n\t\t\tsettings.nScrollFoot.style.width = _fnStringToCss( correction );\n\t\t}\n\t\n\t\n\t\t/*\n\t\t * 4. Clean up\n\t\t */\n\t\tif ( ! scrollY ) {\n\t\t\t/* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting\n\t\t\t * the scrollbar height from the visible display, rather than adding it on. We need to\n\t\t\t * set the height in order to sort this. Don't want to do it in any other browsers.\n\t\t\t */\n\t\t\tif ( ie67 ) {\n\t\t\t\tdivBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+barWidth );\n\t\t\t}\n\t\t}\n\t\n\t\tif ( scrollY && scroll.bCollapse ) {\n\t\t\tdivBodyStyle.height = _fnStringToCss( scrollY );\n\t\n\t\t\tvar iExtra = (scrollX && tableEl.offsetWidth > divBodyEl.offsetWidth) ?\n\t\t\t\tbarWidth :\n\t\t\t\t0;\n\t\n\t\t\tif ( tableEl.offsetHeight < divBodyEl.offsetHeight ) {\n\t\t\t\tdivBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+iExtra );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Finally set the width's of the header and footer tables */\n\t\tvar iOuterWidth = table.outerWidth();\n\t\tdivHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\tdivHeaderInnerStyle.width = _fnStringToCss( iOuterWidth );\n\t\n\t\t// Figure out if there are scrollbar present - if so then we need a the header and footer to\n\t\t// provide a bit more space to allow \"overflow\" scrolling (i.e. past the scrollbar)\n\t\tvar bScrolling = table.height() > divBodyEl.clientHeight || divBody.css('overflow-y') == \"scroll\";\n\t\tvar padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );\n\t\tdivHeaderInnerStyle[ padding ] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t\n\t\tif ( footer ) {\n\t\t\tdivFooterTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\t\tdivFooterInner[0].style.width = _fnStringToCss( iOuterWidth );\n\t\t\tdivFooterInner[0].style[padding] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t\t}\n\t\n\t\t/* Adjust the position of the header in case we loose the y-scrollbar */\n\t\tdivBody.scroll();\n\t\n\t\t// If sorting or filtering has occurred, jump the scrolling back to the top\n\t\t// only if we aren't holding the position\n\t\tif ( (settings.bSorted || settings.bFiltered) && ! settings._drawHold ) {\n\t\t\tdivBodyEl.scrollTop = 0;\n\t\t}\n\t}\n\t\n\t\n\t\n\t/**\n\t * Apply a given function to the display child nodes of an element array (typically\n\t * TD children of TR rows\n\t *  @param {function} fn Method to apply to the objects\n\t *  @param array {nodes} an1 List of elements to look through for display children\n\t *  @param array {nodes} an2 Another list (identical structure to the first) - optional\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyToChildren( fn, an1, an2 )\n\t{\n\t\tvar index=0, i=0, iLen=an1.length;\n\t\tvar nNode1, nNode2;\n\t\n\t\twhile ( i < iLen ) {\n\t\t\tnNode1 = an1[i].firstChild;\n\t\t\tnNode2 = an2 ? an2[i].firstChild : null;\n\t\n\t\t\twhile ( nNode1 ) {\n\t\t\t\tif ( nNode1.nodeType === 1 ) {\n\t\t\t\t\tif ( an2 ) {\n\t\t\t\t\t\tfn( nNode1, nNode2, index );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfn( nNode1, index );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\t\n\t\t\t\tnNode1 = nNode1.nextSibling;\n\t\t\t\tnNode2 = an2 ? nNode2.nextSibling : null;\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t}\n\t}\n\t\n\t\n\t\n\tvar __re_html_remove = /<.*?>/g;\n\t\n\t\n\t/**\n\t * Calculate the width of columns for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCalculateColumnWidths ( oSettings )\n\t{\n\t\tvar\n\t\t\ttable = oSettings.nTable,\n\t\t\tcolumns = oSettings.aoColumns,\n\t\t\tscroll = oSettings.oScroll,\n\t\t\tscrollY = scroll.sY,\n\t\t\tscrollX = scroll.sX,\n\t\t\tscrollXInner = scroll.sXInner,\n\t\t\tcolumnCount = columns.length,\n\t\t\tvisibleColumns = _fnGetColumns( oSettings, 'bVisible' ),\n\t\t\theaderCells = $('th', oSettings.nTHead),\n\t\t\ttableWidthAttr = table.getAttribute('width'), // from DOM element\n\t\t\ttableContainer = table.parentNode,\n\t\t\tuserInputs = false,\n\t\t\ti, column, columnIdx, width, outerWidth;\n\t\n\t\tvar styleWidth = table.style.width;\n\t\tif ( styleWidth && styleWidth.indexOf('%') !== -1 ) {\n\t\t\ttableWidthAttr = styleWidth;\n\t\t}\n\t\n\t\t/* Convert any user input sizes into pixel sizes */\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\n\t\t\tif ( column.sWidth !== null ) {\n\t\t\t\tcolumn.sWidth = _fnConvertToWidth( column.sWidthOrig, tableContainer );\n\t\n\t\t\t\tuserInputs = true;\n\t\t\t}\n\t\t}\n\t\n\t\t/* If the number of columns in the DOM equals the number that we have to\n\t\t * process in DataTables, then we can use the offsets that are created by\n\t\t * the web- browser. No custom sizes can be set in order for this to happen,\n\t\t * nor scrolling used\n\t\t */\n\t\tif ( ! userInputs && ! scrollX && ! scrollY &&\n\t\t    columnCount == _fnVisbleColumns( oSettings ) &&\n\t\t\tcolumnCount == headerCells.length\n\t\t) {\n\t\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\t\tcolumns[i].sWidth = _fnStringToCss( headerCells.eq(i).width() );\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Otherwise construct a single row, worst case, table with the widest\n\t\t\t// node in the data, assign any user defined widths, then insert it into\n\t\t\t// the DOM and allow the browser to do all the hard work of calculating\n\t\t\t// table widths\n\t\t\tvar tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table\n\t\t\t\t.css( 'visibility', 'hidden' )\n\t\t\t\t.removeAttr( 'id' );\n\t\n\t\t\t// Clean up the table body\n\t\t\ttmpTable.find('tbody tr').remove();\n\t\t\tvar tr = $('<tr/>').appendTo( tmpTable.find('tbody') );\n\t\n\t\t\t// Remove any assigned widths from the footer (from scrolling)\n\t\t\ttmpTable.find('tfoot th, tfoot td').css('width', '');\n\t\n\t\t\t// Apply custom sizing to the cloned header\n\t\t\theaderCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );\n\t\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\n\t\t\t\theaderCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?\n\t\t\t\t\t_fnStringToCss( column.sWidthOrig ) :\n\t\t\t\t\t'';\n\t\t\t}\n\t\n\t\t\t// Find the widest cell for each column and put it into the table\n\t\t\tif ( oSettings.aoData.length ) {\n\t\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\t\tcolumnIdx = visibleColumns[i];\n\t\t\t\t\tcolumn = columns[ columnIdx ];\n\t\n\t\t\t\t\t$( _fnGetWidestNode( oSettings, columnIdx ) )\n\t\t\t\t\t\t.clone( false )\n\t\t\t\t\t\t.append( column.sContentPadding )\n\t\t\t\t\t\t.appendTo( tr );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Table has been built, attach to the document so we can work with it\n\t\t\ttmpTable.appendTo( tableContainer );\n\t\n\t\t\t// When scrolling (X or Y) we want to set the width of the table as \n\t\t\t// appropriate. However, when not scrolling leave the table width as it\n\t\t\t// is. This results in slightly different, but I think correct behaviour\n\t\t\tif ( scrollX && scrollXInner ) {\n\t\t\t\ttmpTable.width( scrollXInner );\n\t\t\t}\n\t\t\telse if ( scrollX ) {\n\t\t\t\ttmpTable.css( 'width', 'auto' );\n\t\n\t\t\t\tif ( tmpTable.width() < tableContainer.offsetWidth ) {\n\t\t\t\t\ttmpTable.width( tableContainer.offsetWidth );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( scrollY ) {\n\t\t\t\ttmpTable.width( tableContainer.offsetWidth );\n\t\t\t}\n\t\t\telse if ( tableWidthAttr ) {\n\t\t\t\ttmpTable.width( tableWidthAttr );\n\t\t\t}\n\t\n\t\t\t// Take into account the y scrollbar\n\t\t\t_fnScrollingWidthAdjust( oSettings, tmpTable[0] );\n\t\n\t\t\t// Browsers need a bit of a hand when a width is assigned to any columns\n\t\t\t// when x-scrolling as they tend to collapse the table to the min-width,\n\t\t\t// even if we sent the column widths. So we need to keep track of what\n\t\t\t// the table width should be by summing the user given values, and the\n\t\t\t// automatic values\n\t\t\tif ( scrollX )\n\t\t\t{\n\t\t\t\tvar total = 0;\n\t\n\t\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\t\t\t\touterWidth = $(headerCells[i]).outerWidth();\n\t\n\t\t\t\t\ttotal += column.sWidthOrig === null ?\n\t\t\t\t\t\touterWidth :\n\t\t\t\t\t\tparseInt( column.sWidth, 10 ) + outerWidth - $(headerCells[i]).width();\n\t\t\t\t}\n\t\n\t\t\t\ttmpTable.width( _fnStringToCss( total ) );\n\t\t\t\ttable.style.width = _fnStringToCss( total );\n\t\t\t}\n\t\n\t\t\t// Get the width of each column in the constructed table\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\t\t\twidth = $(headerCells[i]).width();\n\t\n\t\t\t\tif ( width ) {\n\t\t\t\t\tcolumn.sWidth = _fnStringToCss( width );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\ttable.style.width = _fnStringToCss( tmpTable.css('width') );\n\t\n\t\t\t// Finished with the table - ditch it\n\t\t\ttmpTable.remove();\n\t\t}\n\t\n\t\t// If there is a width attr, we want to attach an event listener which\n\t\t// allows the table sizing to automatically adjust when the window is\n\t\t// resized. Use the width attr rather than CSS, since we can't know if the\n\t\t// CSS is a relative value or absolute - DOM read is always px.\n\t\tif ( tableWidthAttr ) {\n\t\t\ttable.style.width = _fnStringToCss( tableWidthAttr );\n\t\t}\n\t\n\t\tif ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {\n\t\t\tvar bindResize = function () {\n\t\t\t\t$(window).bind('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {\n\t\t\t\t\t_fnAdjustColumnSizing( oSettings );\n\t\t\t\t} ) );\n\t\t\t};\n\t\n\t\t\t// IE6/7 will crash if we bind a resize event handler on page load.\n\t\t\t// To be removed in 1.11 which drops IE6/7 support\n\t\t\tif ( oSettings.oBrowser.bScrollOversize ) {\n\t\t\t\tsetTimeout( bindResize, 1000 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbindResize();\n\t\t\t}\n\t\n\t\t\toSettings._reszEvt = true;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Throttle the calls to a function. Arguments and context are maintained for\n\t * the throttled function\n\t *  @param {function} fn Function to be called\n\t *  @param {int} [freq=200] call frequency in mS\n\t *  @returns {function} wrapped function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnThrottle( fn, freq ) {\n\t\tvar\n\t\t\tfrequency = freq !== undefined ? freq : 200,\n\t\t\tlast,\n\t\t\ttimer;\n\t\n\t\treturn function () {\n\t\t\tvar\n\t\t\t\tthat = this,\n\t\t\t\tnow  = +new Date(),\n\t\t\t\targs = arguments;\n\t\n\t\t\tif ( last && now < last + frequency ) {\n\t\t\t\tclearTimeout( timer );\n\t\n\t\t\t\ttimer = setTimeout( function () {\n\t\t\t\t\tlast = undefined;\n\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t}, frequency );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlast = now;\n\t\t\t\tfn.apply( that, args );\n\t\t\t}\n\t\t};\n\t}\n\t\n\t\n\t/**\n\t * Convert a CSS unit width to pixels (e.g. 2em)\n\t *  @param {string} width width to be converted\n\t *  @param {node} parent parent to get the with for (required for relative widths) - optional\n\t *  @returns {int} width in pixels\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnConvertToWidth ( width, parent )\n\t{\n\t\tif ( ! width ) {\n\t\t\treturn 0;\n\t\t}\n\t\n\t\tvar n = $('<div/>')\n\t\t\t.css( 'width', _fnStringToCss( width ) )\n\t\t\t.appendTo( parent || document.body );\n\t\n\t\tvar val = n[0].offsetWidth;\n\t\tn.remove();\n\t\n\t\treturn val;\n\t}\n\t\n\t\n\t/**\n\t * Adjust a table's width to take account of vertical scroll bar\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} n table node\n\t *  @memberof DataTable#oApi\n\t */\n\t\n\tfunction _fnScrollingWidthAdjust ( settings, n )\n\t{\n\t\tvar scroll = settings.oScroll;\n\t\n\t\tif ( scroll.sX || scroll.sY ) {\n\t\t\t// When y-scrolling only, we want to remove the width of the scroll bar\n\t\t\t// so the table + scroll bar will fit into the area available, otherwise\n\t\t\t// we fix the table at its current size with no adjustment\n\t\t\tvar correction = ! scroll.sX ? scroll.iBarWidth : 0;\n\t\t\tn.style.width = _fnStringToCss( $(n).outerWidth() - correction );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Get the widest node\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {node} widest table node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetWidestNode( settings, colIdx )\n\t{\n\t\tvar idx = _fnGetMaxLenString( settings, colIdx );\n\t\tif ( idx < 0 ) {\n\t\t\treturn null;\n\t\t}\n\t\n\t\tvar data = settings.aoData[ idx ];\n\t\treturn ! data.nTr ? // Might not have been created when deferred rendering\n\t\t\t$('<td/>').html( _fnGetCellData( settings, idx, colIdx, 'display' ) )[0] :\n\t\t\tdata.anCells[ colIdx ];\n\t}\n\t\n\t\n\t/**\n\t * Get the maximum strlen for each data column\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {string} max string length for each column\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetMaxLenString( settings, colIdx )\n\t{\n\t\tvar s, max=-1, maxIdx = -1;\n\t\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\ts = _fnGetCellData( settings, i, colIdx, 'display' )+'';\n\t\t\ts = s.replace( __re_html_remove, '' );\n\t\n\t\t\tif ( s.length > max ) {\n\t\t\t\tmax = s.length;\n\t\t\t\tmaxIdx = i;\n\t\t\t}\n\t\t}\n\t\n\t\treturn maxIdx;\n\t}\n\t\n\t\n\t/**\n\t * Append a CSS unit (only if required) to a string\n\t *  @param {string} value to css-ify\n\t *  @returns {string} value with css unit\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnStringToCss( s )\n\t{\n\t\tif ( s === null ) {\n\t\t\treturn '0px';\n\t\t}\n\t\n\t\tif ( typeof s == 'number' ) {\n\t\t\treturn s < 0 ?\n\t\t\t\t'0px' :\n\t\t\t\ts+'px';\n\t\t}\n\t\n\t\t// Check it has a unit character already\n\t\treturn s.match(/\\d$/) ?\n\t\t\ts+'px' :\n\t\t\ts;\n\t}\n\t\n\t\n\t/**\n\t * Get the width of a scroll bar in this browser being used\n\t *  @returns {int} width in pixels\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnScrollBarWidth ()\n\t{\n\t\t// On first run a static variable is set, since this is only needed once.\n\t\t// Subsequent runs will just use the previously calculated value\n\t\tvar width = DataTable.__scrollbarWidth;\n\t\n\t\tif ( width === undefined ) {\n\t\t\tvar sizer = $('<p/>').css( {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\theight: 150,\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\toverflow: 'scroll',\n\t\t\t\t\tvisibility: 'hidden'\n\t\t\t\t} )\n\t\t\t\t.appendTo('body');\n\t\n\t\t\twidth = sizer[0].offsetWidth - sizer[0].clientWidth;\n\t\t\tDataTable.__scrollbarWidth = width;\n\t\n\t\t\tsizer.remove();\n\t\t}\n\t\n\t\treturn width;\n\t}\n\t\n\t\n\t\n\tfunction _fnSortFlatten ( settings )\n\t{\n\t\tvar\n\t\t\ti, iLen, k, kLen,\n\t\t\taSort = [],\n\t\t\taiOrig = [],\n\t\t\taoColumns = settings.aoColumns,\n\t\t\taDataSort, iCol, sType, srcCol,\n\t\t\tfixed = settings.aaSortingFixed,\n\t\t\tfixedObj = $.isPlainObject( fixed ),\n\t\t\tnestedSort = [],\n\t\t\tadd = function ( a ) {\n\t\t\t\tif ( a.length && ! $.isArray( a[0] ) ) {\n\t\t\t\t\t// 1D array\n\t\t\t\t\tnestedSort.push( a );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// 2D array\n\t\t\t\t\tnestedSort.push.apply( nestedSort, a );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t// Build the sort array, with pre-fix and post-fix options if they have been\n\t\t// specified\n\t\tif ( $.isArray( fixed ) ) {\n\t\t\tadd( fixed );\n\t\t}\n\t\n\t\tif ( fixedObj && fixed.pre ) {\n\t\t\tadd( fixed.pre );\n\t\t}\n\t\n\t\tadd( settings.aaSorting );\n\t\n\t\tif (fixedObj && fixed.post ) {\n\t\t\tadd( fixed.post );\n\t\t}\n\t\n\t\tfor ( i=0 ; i<nestedSort.length ; i++ )\n\t\t{\n\t\t\tsrcCol = nestedSort[i][0];\n\t\t\taDataSort = aoColumns[ srcCol ].aDataSort;\n\t\n\t\t\tfor ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )\n\t\t\t{\n\t\t\t\tiCol = aDataSort[k];\n\t\t\t\tsType = aoColumns[ iCol ].sType || 'string';\n\t\n\t\t\t\tif ( nestedSort[i]._idx === undefined ) {\n\t\t\t\t\tnestedSort[i]._idx = $.inArray( nestedSort[i][1], aoColumns[iCol].asSorting );\n\t\t\t\t}\n\t\n\t\t\t\taSort.push( {\n\t\t\t\t\tsrc:       srcCol,\n\t\t\t\t\tcol:       iCol,\n\t\t\t\t\tdir:       nestedSort[i][1],\n\t\t\t\t\tindex:     nestedSort[i]._idx,\n\t\t\t\t\ttype:      sType,\n\t\t\t\t\tformatter: DataTable.ext.type.order[ sType+\"-pre\" ]\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\n\t\treturn aSort;\n\t}\n\t\n\t/**\n\t * Change the order of the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t *  @todo This really needs split up!\n\t */\n\tfunction _fnSort ( oSettings )\n\t{\n\t\tvar\n\t\t\ti, ien, iLen, j, jLen, k, kLen,\n\t\t\tsDataType, nTh,\n\t\t\taiOrig = [],\n\t\t\toExtSort = DataTable.ext.type.order,\n\t\t\taoData = oSettings.aoData,\n\t\t\taoColumns = oSettings.aoColumns,\n\t\t\taDataSort, data, iCol, sType, oSort,\n\t\t\tformatters = 0,\n\t\t\tsortCol,\n\t\t\tdisplayMaster = oSettings.aiDisplayMaster,\n\t\t\taSort;\n\t\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t// @todo Can this be moved into a 'data-ready' handler which is called when\n\t\t//   data is going to be used in the table?\n\t\t_fnColumnTypes( oSettings );\n\t\n\t\taSort = _fnSortFlatten( oSettings );\n\t\n\t\tfor ( i=0, ien=aSort.length ; i<ien ; i++ ) {\n\t\t\tsortCol = aSort[i];\n\t\n\t\t\t// Track if we can use the fast sort algorithm\n\t\t\tif ( sortCol.formatter ) {\n\t\t\t\tformatters++;\n\t\t\t}\n\t\n\t\t\t// Load the data needed for the sort, for each cell\n\t\t\t_fnSortData( oSettings, sortCol.col );\n\t\t}\n\t\n\t\t/* No sorting required if server-side or no sorting array */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )\n\t\t{\n\t\t\t// Create a value - key array of the current row positions such that we can use their\n\t\t\t// current position during the sort, if values match, in order to perform stable sorting\n\t\t\tfor ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {\n\t\t\t\taiOrig[ displayMaster[i] ] = i;\n\t\t\t}\n\t\n\t\t\t/* Do the sort - here we want multi-column sorting based on a given data source (column)\n\t\t\t * and sorting function (from oSort) in a certain direction. It's reasonably complex to\n\t\t\t * follow on it's own, but this is what we want (example two column sorting):\n\t\t\t *  fnLocalSorting = function(a,b){\n\t\t\t *    var iTest;\n\t\t\t *    iTest = oSort['string-asc']('data11', 'data12');\n\t\t\t *      if (iTest !== 0)\n\t\t\t *        return iTest;\n\t\t\t *    iTest = oSort['numeric-desc']('data21', 'data22');\n\t\t\t *    if (iTest !== 0)\n\t\t\t *      return iTest;\n\t\t\t *    return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );\n\t\t\t *  }\n\t\t\t * Basically we have a test for each sorting column, if the data in that column is equal,\n\t\t\t * test the next column. If all columns match, then we use a numeric sort on the row\n\t\t\t * positions in the original data array to provide a stable sort.\n\t\t\t *\n\t\t\t * Note - I know it seems excessive to have two sorting methods, but the first is around\n\t\t\t * 15% faster, so the second is only maintained for backwards compatibility with sorting\n\t\t\t * methods which do not have a pre-sort formatting function.\n\t\t\t */\n\t\t\tif ( formatters === aSort.length ) {\n\t\t\t\t// All sort types have formatting functions\n\t\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tx, y, k, test, sort,\n\t\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\t\tdataB = aoData[b]._aSortData;\n\t\n\t\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\t\tsort = aSort[k];\n\t\n\t\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\t\ty = dataB[ sort.col ];\n\t\n\t\t\t\t\t\ttest = x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn sort.dir === 'asc' ? test : -test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tx = aiOrig[a];\n\t\t\t\t\ty = aiOrig[b];\n\t\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Depreciated - remove in 1.11 (providing a plug-in option)\n\t\t\t\t// Not all sort types have formatting methods, so we have to call their sorting\n\t\t\t\t// methods.\n\t\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tx, y, k, l, test, sort, fn,\n\t\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\t\tdataB = aoData[b]._aSortData;\n\t\n\t\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\t\tsort = aSort[k];\n\t\n\t\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\t\ty = dataB[ sort.col ];\n\t\n\t\t\t\t\t\tfn = oExtSort[ sort.type+\"-\"+sort.dir ] || oExtSort[ \"string-\"+sort.dir ];\n\t\t\t\t\t\ttest = fn( x, y );\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tx = aiOrig[a];\n\t\t\t\t\ty = aiOrig[b];\n\t\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Tell the draw function that we have sorted the data */\n\t\toSettings.bSorted = true;\n\t}\n\t\n\t\n\tfunction _fnSortAria ( settings )\n\t{\n\t\tvar label;\n\t\tvar nextSort;\n\t\tvar columns = settings.aoColumns;\n\t\tvar aSort = _fnSortFlatten( settings );\n\t\tvar oAria = settings.oLanguage.oAria;\n\t\n\t\t// ARIA attributes - need to loop all columns, to update all (removing old\n\t\t// attributes as needed)\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar col = columns[i];\n\t\t\tvar asSorting = col.asSorting;\n\t\t\tvar sTitle = col.sTitle.replace( /<.*?>/g, \"\" );\n\t\t\tvar th = col.nTh;\n\t\n\t\t\t// IE7 is throwing an error when setting these properties with jQuery's\n\t\t\t// attr() and removeAttr() methods...\n\t\t\tth.removeAttribute('aria-sort');\n\t\n\t\t\t/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */\n\t\t\tif ( col.bSortable ) {\n\t\t\t\tif ( aSort.length > 0 && aSort[0].col == i ) {\n\t\t\t\t\tth.setAttribute('aria-sort', aSort[0].dir==\"asc\" ? \"ascending\" : \"descending\" );\n\t\t\t\t\tnextSort = asSorting[ aSort[0].index+1 ] || asSorting[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnextSort = asSorting[0];\n\t\t\t\t}\n\t\n\t\t\t\tlabel = sTitle + ( nextSort === \"asc\" ?\n\t\t\t\t\toAria.sSortAscending :\n\t\t\t\t\toAria.sSortDescending\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlabel = sTitle;\n\t\t\t}\n\t\n\t\t\tth.setAttribute('aria-label', label);\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Function to run on user sort request\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {boolean} [append=false] Append the requested sort to the existing\n\t *    sort if true (i.e. multi-column sort)\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortListener ( settings, colIdx, append, callback )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\t\tvar sorting = settings.aaSorting;\n\t\tvar asSorting = col.asSorting;\n\t\tvar nextSortIdx;\n\t\tvar next = function ( a, overflow ) {\n\t\t\tvar idx = a._idx;\n\t\t\tif ( idx === undefined ) {\n\t\t\t\tidx = $.inArray( a[1], asSorting );\n\t\t\t}\n\t\n\t\t\treturn idx+1 < asSorting.length ?\n\t\t\t\tidx+1 :\n\t\t\t\toverflow ?\n\t\t\t\t\tnull :\n\t\t\t\t\t0;\n\t\t};\n\t\n\t\t// Convert to 2D array if needed\n\t\tif ( typeof sorting[0] === 'number' ) {\n\t\t\tsorting = settings.aaSorting = [ sorting ];\n\t\t}\n\t\n\t\t// If appending the sort then we are multi-column sorting\n\t\tif ( append && settings.oFeatures.bSortMulti ) {\n\t\t\t// Are we already doing some kind of sort on this column?\n\t\t\tvar sortIdx = $.inArray( colIdx, _pluck(sorting, '0') );\n\t\n\t\t\tif ( sortIdx !== -1 ) {\n\t\t\t\t// Yes, modify the sort\n\t\t\t\tnextSortIdx = next( sorting[sortIdx], true );\n\t\n\t\t\t\tif ( nextSortIdx === null && sorting.length === 1 ) {\n\t\t\t\t\tnextSortIdx = 0; // can't remove sorting completely\n\t\t\t\t}\n\t\n\t\t\t\tif ( nextSortIdx === null ) {\n\t\t\t\t\tsorting.splice( sortIdx, 1 );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsorting[sortIdx][1] = asSorting[ nextSortIdx ];\n\t\t\t\t\tsorting[sortIdx]._idx = nextSortIdx;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// No sort on this column yet\n\t\t\t\tsorting.push( [ colIdx, asSorting[0], 0 ] );\n\t\t\t\tsorting[sorting.length-1]._idx = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( sorting.length && sorting[0][0] == colIdx ) {\n\t\t\t// Single column - already sorting on this column, modify the sort\n\t\t\tnextSortIdx = next( sorting[0] );\n\t\n\t\t\tsorting.length = 1;\n\t\t\tsorting[0][1] = asSorting[ nextSortIdx ];\n\t\t\tsorting[0]._idx = nextSortIdx;\n\t\t}\n\t\telse {\n\t\t\t// Single column - sort only on this column\n\t\t\tsorting.length = 0;\n\t\t\tsorting.push( [ colIdx, asSorting[0] ] );\n\t\t\tsorting[0]._idx = 0;\n\t\t}\n\t\n\t\t// Run the sort by calling a full redraw\n\t\t_fnReDraw( settings );\n\t\n\t\t// callback used for async user interaction\n\t\tif ( typeof callback == 'function' ) {\n\t\t\tcallback( settings );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Attach a sort handler (click) to a node\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortAttachListener ( settings, attachTo, colIdx, callback )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\t\n\t\t_fnBindAction( attachTo, {}, function (e) {\n\t\t\t/* If the column is not sortable - don't to anything */\n\t\t\tif ( col.bSortable === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If processing is enabled use a timeout to allow the processing\n\t\t\t// display to be shown - otherwise to it synchronously\n\t\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\n\t\t\t\t\t// In server-side processing, the draw callback will remove the\n\t\t\t\t\t// processing display\n\t\t\t\t\tif ( _fnDataSource( settings ) !== 'ssp' ) {\n\t\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t}\n\t\t\t\t}, 0 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Set the sorting classes on table's body, Note: it is safe to call this function\n\t * when bSort and bSortClasses are false\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortingClasses( settings )\n\t{\n\t\tvar oldSort = settings.aLastSort;\n\t\tvar sortClass = settings.oClasses.sSortColumn;\n\t\tvar sort = _fnSortFlatten( settings );\n\t\tvar features = settings.oFeatures;\n\t\tvar i, ien, colIdx;\n\t\n\t\tif ( features.bSort && features.bSortClasses ) {\n\t\t\t// Remove old sorting classes\n\t\t\tfor ( i=0, ien=oldSort.length ; i<ien ; i++ ) {\n\t\t\t\tcolIdx = oldSort[i].src;\n\t\n\t\t\t\t// Remove column sorting\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.removeClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\n\t\t\t// Add new column sorting\n\t\t\tfor ( i=0, ien=sort.length ; i<ien ; i++ ) {\n\t\t\t\tcolIdx = sort[i].src;\n\t\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.addClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\t}\n\t\n\t\tsettings.aLastSort = sort;\n\t}\n\t\n\t\n\t// Get the data to sort a column, be it from cache, fresh (populating the\n\t// cache), or from a sort formatter\n\tfunction _fnSortData( settings, idx )\n\t{\n\t\t// Custom sorting function - provided by the sort data type\n\t\tvar column = settings.aoColumns[ idx ];\n\t\tvar customSort = DataTable.ext.order[ column.sSortDataType ];\n\t\tvar customData;\n\t\n\t\tif ( customSort ) {\n\t\t\tcustomData = customSort.call( settings.oInstance, settings, idx,\n\t\t\t\t_fnColumnIndexToVisible( settings, idx )\n\t\t\t);\n\t\t}\n\t\n\t\t// Use / populate cache\n\t\tvar row, cellData;\n\t\tvar formatter = DataTable.ext.type.order[ column.sType+\"-pre\" ];\n\t\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\trow = settings.aoData[i];\n\t\n\t\t\tif ( ! row._aSortData ) {\n\t\t\t\trow._aSortData = [];\n\t\t\t}\n\t\n\t\t\tif ( ! row._aSortData[idx] || customSort ) {\n\t\t\t\tcellData = customSort ?\n\t\t\t\t\tcustomData[i] : // If there was a custom sort function, use data from there\n\t\t\t\t\t_fnGetCellData( settings, i, idx, 'sort' );\n\t\n\t\t\t\trow._aSortData[ idx ] = formatter ?\n\t\t\t\t\tformatter( cellData ) :\n\t\t\t\t\tcellData;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t\n\t/**\n\t * Save the state of a table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSaveState ( settings )\n\t{\n\t\tif ( !settings.oFeatures.bStateSave || settings.bDestroying )\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Store the interesting variables */\n\t\tvar state = {\n\t\t\ttime:    +new Date(),\n\t\t\tstart:   settings._iDisplayStart,\n\t\t\tlength:  settings._iDisplayLength,\n\t\t\torder:   $.extend( true, [], settings.aaSorting ),\n\t\t\tsearch:  _fnSearchToCamel( settings.oPreviousSearch ),\n\t\t\tcolumns: $.map( settings.aoColumns, function ( col, i ) {\n\t\t\t\treturn {\n\t\t\t\t\tvisible: col.bVisible,\n\t\t\t\t\tsearch: _fnSearchToCamel( settings.aoPreSearchCols[i] )\n\t\t\t\t};\n\t\t\t} )\n\t\t};\n\t\n\t\t_fnCallbackFire( settings, \"aoStateSaveParams\", 'stateSaveParams', [settings, state] );\n\t\n\t\tsettings.oSavedState = state;\n\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, state );\n\t}\n\t\n\t\n\t/**\n\t * Attempt to load a saved table state\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oInit DataTables init object so we can override settings\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLoadState ( settings, oInit )\n\t{\n\t\tvar i, ien;\n\t\tvar columns = settings.aoColumns;\n\t\n\t\tif ( ! settings.oFeatures.bStateSave ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar state = settings.fnStateLoadCallback.call( settings.oInstance, settings );\n\t\tif ( ! state || ! state.time ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Allow custom and plug-in manipulation functions to alter the saved data set and\n\t\t * cancelling of loading by returning false\n\t\t */\n\t\tvar abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, state] );\n\t\tif ( $.inArray( false, abStateLoad ) !== -1 ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Reject old data */\n\t\tvar duration = settings.iStateDuration;\n\t\tif ( duration > 0 && state.time < +new Date() - (duration*1000) ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Number of columns have changed - all bets are off, no restore of settings\n\t\tif ( columns.length !== state.columns.length ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Store the saved state so it might be accessed at any time\n\t\tsettings.oLoadedState = $.extend( true, {}, state );\n\t\n\t\t// Restore key features - todo - for 1.11 this needs to be done by\n\t\t// subscribed events\n\t\tif ( state.start !== undefined ) {\n\t\t\tsettings._iDisplayStart    = state.start;\n\t\t\tsettings.iInitDisplayStart = state.start;\n\t\t}\n\t\tif ( state.length !== undefined ) {\n\t\t\tsettings._iDisplayLength   = state.length;\n\t\t}\n\t\n\t\t// Order\n\t\tif ( state.order !== undefined ) {\n\t\t\tsettings.aaSorting = [];\n\t\t\t$.each( state.order, function ( i, col ) {\n\t\t\t\tsettings.aaSorting.push( col[0] >= columns.length ?\n\t\t\t\t\t[ 0, col[1] ] :\n\t\t\t\t\tcol\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t\n\t\t// Search\n\t\tif ( state.search !== undefined ) {\n\t\t\t$.extend( settings.oPreviousSearch, _fnSearchToHung( state.search ) );\n\t\t}\n\t\n\t\t// Columns\n\t\tfor ( i=0, ien=state.columns.length ; i<ien ; i++ ) {\n\t\t\tvar col = state.columns[i];\n\t\n\t\t\t// Visibility\n\t\t\tif ( col.visible !== undefined ) {\n\t\t\t\tcolumns[i].bVisible = col.visible;\n\t\t\t}\n\t\n\t\t\t// Search\n\t\t\tif ( col.search !== undefined ) {\n\t\t\t\t$.extend( settings.aoPreSearchCols[i], _fnSearchToHung( col.search ) );\n\t\t\t}\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, state] );\n\t}\n\t\n\t\n\t/**\n\t * Return the settings object for a particular table\n\t *  @param {node} table table we are using as a dataTable\n\t *  @returns {object} Settings object - or null if not found\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSettingsFromNode ( table )\n\t{\n\t\tvar settings = DataTable.settings;\n\t\tvar idx = $.inArray( table, _pluck( settings, 'nTable' ) );\n\t\n\t\treturn idx !== -1 ?\n\t\t\tsettings[ idx ] :\n\t\t\tnull;\n\t}\n\t\n\t\n\t/**\n\t * Log an error message\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} level log error messages, or display them to the user\n\t *  @param {string} msg error message\n\t *  @param {int} tn Technical note id to get more information about the error.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLog( settings, level, msg, tn )\n\t{\n\t\tmsg = 'DataTables warning: '+\n\t\t\t(settings!==null ? 'table id='+settings.sTableId+' - ' : '')+msg;\n\t\n\t\tif ( tn ) {\n\t\t\tmsg += '. For more information about this error, please see '+\n\t\t\t'http://datatables.net/tn/'+tn;\n\t\t}\n\t\n\t\tif ( ! level  ) {\n\t\t\t// Backwards compatibility pre 1.10\n\t\t\tvar ext = DataTable.ext;\n\t\t\tvar type = ext.sErrMode || ext.errMode;\n\t\n\t\t\t_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );\n\t\n\t\t\tif ( type == 'alert' ) {\n\t\t\t\talert( msg );\n\t\t\t}\n\t\t\telse if ( type == 'throw' ) {\n\t\t\t\tthrow new Error(msg);\n\t\t\t}\n\t\t\telse if ( typeof type == 'function' ) {\n\t\t\t\ttype( settings, tn, msg );\n\t\t\t}\n\t\t}\n\t\telse if ( window.console && console.log ) {\n\t\t\tconsole.log( msg );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * See if a property is defined on one object, if so assign it to the other object\n\t *  @param {object} ret target object\n\t *  @param {object} src source object\n\t *  @param {string} name property\n\t *  @param {string} [mappedName] name to map too - optional, name used if not given\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnMap( ret, src, name, mappedName )\n\t{\n\t\tif ( $.isArray( name ) ) {\n\t\t\t$.each( name, function (i, val) {\n\t\t\t\tif ( $.isArray( val ) ) {\n\t\t\t\t\t_fnMap( ret, src, val[0], val[1] );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_fnMap( ret, src, val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( mappedName === undefined ) {\n\t\t\tmappedName = name;\n\t\t}\n\t\n\t\tif ( src[name] !== undefined ) {\n\t\t\tret[mappedName] = src[name];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Extend objects - very similar to jQuery.extend, but deep copy objects, and\n\t * shallow copy arrays. The reason we need to do this, is that we don't want to\n\t * deep copy array init values (such as aaSorting) since the dev wouldn't be\n\t * able to override them, but we do want to deep copy arrays.\n\t *  @param {object} out Object to extend\n\t *  @param {object} extender Object from which the properties will be applied to\n\t *      out\n\t *  @param {boolean} breakRefs If true, then arrays will be sliced to take an\n\t *      independent copy with the exception of the `data` or `aaData` parameters\n\t *      if they are present. This is so you can pass in a collection to\n\t *      DataTables and have that used as your data source without breaking the\n\t *      references\n\t *  @returns {object} out Reference, just for convenience - out === the return.\n\t *  @memberof DataTable#oApi\n\t *  @todo This doesn't take account of arrays inside the deep copied objects.\n\t */\n\tfunction _fnExtend( out, extender, breakRefs )\n\t{\n\t\tvar val;\n\t\n\t\tfor ( var prop in extender ) {\n\t\t\tif ( extender.hasOwnProperty(prop) ) {\n\t\t\t\tval = extender[prop];\n\t\n\t\t\t\tif ( $.isPlainObject( val ) ) {\n\t\t\t\t\tif ( ! $.isPlainObject( out[prop] ) ) {\n\t\t\t\t\t\tout[prop] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, out[prop], val );\n\t\t\t\t}\n\t\t\t\telse if ( breakRefs && prop !== 'data' && prop !== 'aaData' && $.isArray(val) ) {\n\t\t\t\t\tout[prop] = val.slice();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tout[prop] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t}\n\t\n\t\n\t/**\n\t * Bind an event handers to allow a click or return key to activate the callback.\n\t * This is good for accessibility since a return on the keyboard will have the\n\t * same effect as a click, if the element has focus.\n\t *  @param {element} n Element to bind the action to\n\t *  @param {object} oData Data object to pass to the triggered function\n\t *  @param {function} fn Callback function for when the event is triggered\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBindAction( n, oData, fn )\n\t{\n\t\t$(n)\n\t\t\t.bind( 'click.DT', oData, function (e) {\n\t\t\t\t\tn.blur(); // Remove focus outline for mouse users\n\t\t\t\t\tfn(e);\n\t\t\t\t} )\n\t\t\t.bind( 'keypress.DT', oData, function (e){\n\t\t\t\t\tif ( e.which === 13 ) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tfn(e);\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t.bind( 'selectstart.DT', function () {\n\t\t\t\t\t/* Take the brutal approach to cancelling text selection */\n\t\t\t\t\treturn false;\n\t\t\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Register a callback function. Easily allows a callback function to be added to\n\t * an array store of callback functions that can then all be called together.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sStore Name of the array storage for the callbacks in oSettings\n\t *  @param {function} fn Function to be called back\n\t *  @param {string} sName Identifying name for the callback (i.e. a label)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackReg( oSettings, sStore, fn, sName )\n\t{\n\t\tif ( fn )\n\t\t{\n\t\t\toSettings[sStore].push( {\n\t\t\t\t\"fn\": fn,\n\t\t\t\t\"sName\": sName\n\t\t\t} );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Fire callback functions and trigger events. Note that the loop over the\n\t * callback array store is done backwards! Further note that you do not want to\n\t * fire off triggers in time sensitive applications (for example cell creation)\n\t * as its slow.\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} callbackArr Name of the array storage for the callbacks in\n\t *      oSettings\n\t *  @param {string} eventName Name of the jQuery custom event to trigger. If\n\t *      null no trigger is fired\n\t *  @param {array} args Array of arguments to pass to the callback function /\n\t *      trigger\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackFire( settings, callbackArr, eventName, args )\n\t{\n\t\tvar ret = [];\n\t\n\t\tif ( callbackArr ) {\n\t\t\tret = $.map( settings[callbackArr].slice().reverse(), function (val, i) {\n\t\t\t\treturn val.fn.apply( settings.oInstance, args );\n\t\t\t} );\n\t\t}\n\t\n\t\tif ( eventName !== null ) {\n\t\t\tvar e = $.Event( eventName+'.dt' );\n\t\n\t\t\t$(settings.nTable).trigger( e, args );\n\t\n\t\t\tret.push( e.result );\n\t\t}\n\t\n\t\treturn ret;\n\t}\n\t\n\t\n\tfunction _fnLengthOverflow ( settings )\n\t{\n\t\tvar\n\t\t\tstart = settings._iDisplayStart,\n\t\t\tend = settings.fnDisplayEnd(),\n\t\t\tlen = settings._iDisplayLength;\n\t\n\t\t/* If we have space to show extra rows (backing up from the end point - then do so */\n\t\tif ( start >= end )\n\t\t{\n\t\t\tstart = end - len;\n\t\t}\n\t\n\t\t// Keep the start record on the current page\n\t\tstart -= (start % len);\n\t\n\t\tif ( len === -1 || start < 0 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\n\t\tsettings._iDisplayStart = start;\n\t}\n\t\n\t\n\tfunction _fnRenderer( settings, type )\n\t{\n\t\tvar renderer = settings.renderer;\n\t\tvar host = DataTable.ext.renderer[type];\n\t\n\t\tif ( $.isPlainObject( renderer ) && renderer[type] ) {\n\t\t\t// Specific renderer for this type. If available use it, otherwise use\n\t\t\t// the default.\n\t\t\treturn host[renderer[type]] || host._;\n\t\t}\n\t\telse if ( typeof renderer === 'string' ) {\n\t\t\t// Common renderer - if there is one available for this type use it,\n\t\t\t// otherwise use the default\n\t\t\treturn host[renderer] || host._;\n\t\t}\n\t\n\t\t// Use the default\n\t\treturn host._;\n\t}\n\t\n\t\n\t/**\n\t * Detect the data source being used for the table. Used to simplify the code\n\t * a little (ajax) and to make it compress a little smaller.\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {string} Data source\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDataSource ( settings )\n\t{\n\t\tif ( settings.oFeatures.bServerSide ) {\n\t\t\treturn 'ssp';\n\t\t}\n\t\telse if ( settings.ajax || settings.sAjaxSource ) {\n\t\t\treturn 'ajax';\n\t\t}\n\t\treturn 'dom';\n\t}\n\t\n\n\tDataTable = function( options )\n\t{\n\t\t/**\n\t\t * Perform a jQuery selector action on the table's TR elements (from the tbody) and\n\t\t * return the resulting jQuery object.\n\t\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t\t *  @param {string} [oOpts.filter=none] Select TR elements that meet the current filter\n\t\t *    criterion (\"applied\") or all TR elements (i.e. no filter).\n\t\t *  @param {string} [oOpts.order=current] Order of the TR elements in the processed array.\n\t\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t\t *    'original' whereby the original order the data was read into the table is used.\n\t\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t\t *  @returns {object} jQuery object, filtered by the given selector.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Highlight every second row\n\t\t *      oTable.$('tr:odd').css('backgroundColor', 'blue');\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Filter to rows with 'Webkit' in them, add a background colour and then\n\t\t *      // remove the filter, thus highlighting the 'Webkit' rows only.\n\t\t *      oTable.fnFilter('Webkit');\n\t\t *      oTable.$('tr', {\"search\": \"applied\"}).css('backgroundColor', 'blue');\n\t\t *      oTable.fnFilter('');\n\t\t *    } );\n\t\t */\n\t\tthis.$ = function ( sSelector, oOpts )\n\t\t{\n\t\t\treturn this.api(true).$( sSelector, oOpts );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Almost identical to $ in operation, but in this case returns the data for the matched\n\t\t * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes\n\t\t * rather than any descendants, so the data can be obtained for the row/cell. If matching\n\t\t * rows are found, the data returned is the original data array/object that was used to\n\t\t * create the row (or a generated array if from a DOM source).\n\t\t *\n\t\t * This method is often useful in-combination with $ where both functions are given the\n\t\t * same parameters and the array indexes will match identically.\n\t\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t\t *  @param {string} [oOpts.filter=none] Select elements that meet the current filter\n\t\t *    criterion (\"applied\") or all elements (i.e. no filter).\n\t\t *  @param {string} [oOpts.order=current] Order of the data in the processed array.\n\t\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t\t *    'original' whereby the original order the data was read into the table is used.\n\t\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t\t *  @returns {array} Data for the matched elements. If any elements, as a result of the\n\t\t *    selector, were not TR, TD or TH elements in the DataTable, they will have a null\n\t\t *    entry in the array.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Get the data from the first row in the table\n\t\t *      var data = oTable._('tr:first');\n\t\t *\n\t\t *      // Do something useful with the data\n\t\t *      alert( \"First cell is: \"+data[0] );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Filter to 'Webkit' and get all data for\n\t\t *      oTable.fnFilter('Webkit');\n\t\t *      var data = oTable._('tr', {\"search\": \"applied\"});\n\t\t *\n\t\t *      // Do something with the data\n\t\t *      alert( data.length+\" rows matched the search\" );\n\t\t *    } );\n\t\t */\n\t\tthis._ = function ( sSelector, oOpts )\n\t\t{\n\t\t\treturn this.api(true).rows( sSelector, oOpts ).data();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Create a DataTables Api instance, with the currently selected tables for\n\t\t * the Api's context.\n\t\t * @param {boolean} [traditional=false] Set the API instance's context to be\n\t\t *   only the table referred to by the `DataTable.ext.iApiIndex` option, as was\n\t\t *   used in the API presented by DataTables 1.9- (i.e. the traditional mode),\n\t\t *   or if all tables captured in the jQuery object should be used.\n\t\t * @return {DataTables.Api}\n\t\t */\n\t\tthis.api = function ( traditional )\n\t\t{\n\t\t\treturn traditional ?\n\t\t\t\tnew _Api(\n\t\t\t\t\t_fnSettingsFromNode( this[ _ext.iApiIndex ] )\n\t\t\t\t) :\n\t\t\t\tnew _Api( this );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Add a single new row or multiple rows of data to the table. Please note\n\t\t * that this is suitable for client-side processing only - if you are using\n\t\t * server-side processing (i.e. \"bServerSide\": true), then to add data, you\n\t\t * must add it to the data source, i.e. the server-side, through an Ajax call.\n\t\t *  @param {array|object} data The data to be added to the table. This can be:\n\t\t *    <ul>\n\t\t *      <li>1D array of data - add a single row with the data provided</li>\n\t\t *      <li>2D array of arrays - add multiple rows in a single call</li>\n\t\t *      <li>object - data object when using <i>mData</i></li>\n\t\t *      <li>array of objects - multiple data objects when using <i>mData</i></li>\n\t\t *    </ul>\n\t\t *  @param {bool} [redraw=true] redraw the table or not\n\t\t *  @returns {array} An array of integers, representing the list of indexes in\n\t\t *    <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to\n\t\t *    the table.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    // Global var for counter\n\t\t *    var giCount = 2;\n\t\t *\n\t\t *    $(document).ready(function() {\n\t\t *      $('#example').dataTable();\n\t\t *    } );\n\t\t *\n\t\t *    function fnClickAddRow() {\n\t\t *      $('#example').dataTable().fnAddData( [\n\t\t *        giCount+\".1\",\n\t\t *        giCount+\".2\",\n\t\t *        giCount+\".3\",\n\t\t *        giCount+\".4\" ]\n\t\t *      );\n\t\t *\n\t\t *      giCount++;\n\t\t *    }\n\t\t */\n\t\tthis.fnAddData = function( data, redraw )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\t/* Check if we want to add multiple rows or not */\n\t\t\tvar rows = $.isArray(data) && ( $.isArray(data[0]) || $.isPlainObject(data[0]) ) ?\n\t\t\t\tapi.rows.add( data ) :\n\t\t\t\tapi.row.add( data );\n\t\t\n\t\t\tif ( redraw === undefined || redraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\n\t\t\treturn rows.flatten().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * This function will make DataTables recalculate the column sizes, based on the data\n\t\t * contained in the table and the sizes applied to the columns (in the DOM, CSS or\n\t\t * through the sWidth parameter). This can be useful when the width of the table's\n\t\t * parent element changes (for example a window resize).\n\t\t *  @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable( {\n\t\t *        \"sScrollY\": \"200px\",\n\t\t *        \"bPaginate\": false\n\t\t *      } );\n\t\t *\n\t\t *      $(window).bind('resize', function () {\n\t\t *        oTable.fnAdjustColumnSizing();\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\tthis.fnAdjustColumnSizing = function ( bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).columns.adjust();\n\t\t\tvar settings = api.settings()[0];\n\t\t\tvar scroll = settings.oScroll;\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw( false );\n\t\t\t}\n\t\t\telse if ( scroll.sX !== \"\" || scroll.sY !== \"\" ) {\n\t\t\t\t/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */\n\t\t\t\t_fnScrollDraw( settings );\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Quickly and simply clear a table\n\t\t *  @param {bool} [bRedraw=true] redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)\n\t\t *      oTable.fnClearTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnClearTable = function( bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).clear();\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * The exact opposite of 'opening' a row, this function will close any rows which\n\t\t * are currently 'open'.\n\t\t *  @param {node} nTr the table row to 'close'\n\t\t *  @returns {int} 0 on success, or 1 if failed (can't find the row)\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnClose = function( nTr )\n\t\t{\n\t\t\tthis.api( true ).row( nTr ).child.hide();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Remove a row for the table\n\t\t *  @param {mixed} target The index of the row from aoData to be deleted, or\n\t\t *    the TR element you want to delete\n\t\t *  @param {function|null} [callBack] Callback function\n\t\t *  @param {bool} [redraw=true] Redraw the table or not\n\t\t *  @returns {array} The row that was deleted\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Immediately remove the first row\n\t\t *      oTable.fnDeleteRow( 0 );\n\t\t *    } );\n\t\t */\n\t\tthis.fnDeleteRow = function( target, callback, redraw )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\tvar rows = api.rows( target );\n\t\t\tvar settings = rows.settings()[0];\n\t\t\tvar data = settings.aoData[ rows[0][0] ];\n\t\t\n\t\t\trows.remove();\n\t\t\n\t\t\tif ( callback ) {\n\t\t\t\tcallback.call( this, settings, data );\n\t\t\t}\n\t\t\n\t\t\tif ( redraw === undefined || redraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\n\t\t\treturn data;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Restore the table to it's original state in the DOM by removing all of DataTables\n\t\t * enhancements, alterations to the DOM structure of the table and event listeners.\n\t\t *  @param {boolean} [remove=false] Completely remove the table from the DOM\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      // This example is fairly pointless in reality, but shows how fnDestroy can be used\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnDestroy();\n\t\t *    } );\n\t\t */\n\t\tthis.fnDestroy = function ( remove )\n\t\t{\n\t\t\tthis.api( true ).destroy( remove );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Redraw the table\n\t\t *  @param {bool} [complete=true] Re-filter and resort (if enabled) the table before the draw.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Re-draw the table - you wouldn't want to do it here, but it's an example :-)\n\t\t *      oTable.fnDraw();\n\t\t *    } );\n\t\t */\n\t\tthis.fnDraw = function( complete )\n\t\t{\n\t\t\t// Note that this isn't an exact match to the old call to _fnDraw - it takes\n\t\t\t// into account the new data, but can hold position.\n\t\t\tthis.api( true ).draw( complete );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Filter the input based on data\n\t\t *  @param {string} sInput String to filter the table on\n\t\t *  @param {int|null} [iColumn] Column to limit filtering to\n\t\t *  @param {bool} [bRegex=false] Treat as regular expression or not\n\t\t *  @param {bool} [bSmart=true] Perform smart filtering or not\n\t\t *  @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)\n\t\t *  @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sometime later - filter...\n\t\t *      oTable.fnFilter( 'test string' );\n\t\t *    } );\n\t\t */\n\t\tthis.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( iColumn === null || iColumn === undefined ) {\n\t\t\t\tapi.search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapi.column( iColumn ).search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t\t}\n\t\t\n\t\t\tapi.draw();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the data for the whole table, an individual row or an individual cell based on the\n\t\t * provided parameters.\n\t\t *  @param {int|node} [src] A TR row node, TD/TH cell node or an integer. If given as\n\t\t *    a TR node then the data source for the whole row will be returned. If given as a\n\t\t *    TD/TH cell node then iCol will be automatically calculated and the data for the\n\t\t *    cell returned. If given as an integer, then this is treated as the aoData internal\n\t\t *    data index for the row (see fnGetPosition) and the data for that row used.\n\t\t *  @param {int} [col] Optional column index that you want the data of.\n\t\t *  @returns {array|object|string} If mRow is undefined, then the data for all rows is\n\t\t *    returned. If mRow is defined, just data for that row, and is iCol is\n\t\t *    defined, only data for the designated cell is returned.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    // Row data\n\t\t *    $(document).ready(function() {\n\t\t *      oTable = $('#example').dataTable();\n\t\t *\n\t\t *      oTable.$('tr').click( function () {\n\t\t *        var data = oTable.fnGetData( this );\n\t\t *        // ... do something with the array / object of data for the row\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Individual cell data\n\t\t *    $(document).ready(function() {\n\t\t *      oTable = $('#example').dataTable();\n\t\t *\n\t\t *      oTable.$('td').click( function () {\n\t\t *        var sData = oTable.fnGetData( this );\n\t\t *        alert( 'The cell clicked on had the value of '+sData );\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetData = function( src, col )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( src !== undefined ) {\n\t\t\t\tvar type = src.nodeName ? src.nodeName.toLowerCase() : '';\n\t\t\n\t\t\t\treturn col !== undefined || type == 'td' || type == 'th' ?\n\t\t\t\t\tapi.cell( src, col ).data() :\n\t\t\t\t\tapi.row( src ).data() || null;\n\t\t\t}\n\t\t\n\t\t\treturn api.data().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get an array of the TR nodes that are used in the table's body. Note that you will\n\t\t * typically want to use the '$' API method in preference to this as it is more\n\t\t * flexible.\n\t\t *  @param {int} [iRow] Optional row index for the TR element you want\n\t\t *  @returns {array|node} If iRow is undefined, returns an array of all TR elements\n\t\t *    in the table's body, or iRow is defined, just the TR element requested.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Get the nodes from the table\n\t\t *      var nNodes = oTable.fnGetNodes( );\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetNodes = function( iRow )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\treturn iRow !== undefined ?\n\t\t\t\tapi.row( iRow ).node() :\n\t\t\t\tapi.rows().nodes().flatten().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the array indexes of a particular cell from it's DOM element\n\t\t * and column index including hidden columns\n\t\t *  @param {node} node this can either be a TR, TD or TH in the table's body\n\t\t *  @returns {int} If nNode is given as a TR, then a single index is returned, or\n\t\t *    if given as a cell, an array of [row index, column index (visible),\n\t\t *    column index (all)] is given.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      $('#example tbody td').click( function () {\n\t\t *        // Get the position of the current data from the node\n\t\t *        var aPos = oTable.fnGetPosition( this );\n\t\t *\n\t\t *        // Get the data array for this row\n\t\t *        var aData = oTable.fnGetData( aPos[0] );\n\t\t *\n\t\t *        // Update the data array and return the value\n\t\t *        aData[ aPos[1] ] = 'clicked';\n\t\t *        this.innerHTML = 'clicked';\n\t\t *      } );\n\t\t *\n\t\t *      // Init DataTables\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetPosition = function( node )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\tvar nodeName = node.nodeName.toUpperCase();\n\t\t\n\t\t\tif ( nodeName == 'TR' ) {\n\t\t\t\treturn api.row( node ).index();\n\t\t\t}\n\t\t\telse if ( nodeName == 'TD' || nodeName == 'TH' ) {\n\t\t\t\tvar cell = api.cell( node ).index();\n\t\t\n\t\t\t\treturn [\n\t\t\t\t\tcell.row,\n\t\t\t\t\tcell.columnVisible,\n\t\t\t\t\tcell.column\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Check to see if a row is 'open' or not.\n\t\t *  @param {node} nTr the table row to check\n\t\t *  @returns {boolean} true if the row is currently open, false otherwise\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnIsOpen = function( nTr )\n\t\t{\n\t\t\treturn this.api( true ).row( nTr ).child.isShown();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * This function will place a new row directly after a row which is currently\n\t\t * on display on the page, with the HTML contents that is passed into the\n\t\t * function. This can be used, for example, to ask for confirmation that a\n\t\t * particular record should be deleted.\n\t\t *  @param {node} nTr The table row to 'open'\n\t\t *  @param {string|node|jQuery} mHtml The HTML to put into the row\n\t\t *  @param {string} sClass Class to give the new TD cell\n\t\t *  @returns {node} The row opened. Note that if the table row passed in as the\n\t\t *    first parameter, is not found in the table, this method will silently\n\t\t *    return.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnOpen = function( nTr, mHtml, sClass )\n\t\t{\n\t\t\treturn this.api( true )\n\t\t\t\t.row( nTr )\n\t\t\t\t.child( mHtml, sClass )\n\t\t\t\t.show()\n\t\t\t\t.child()[0];\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Change the pagination - provides the internal logic for pagination in a simple API\n\t\t * function. With this function you can have a DataTables table go to the next,\n\t\t * previous, first or last pages.\n\t\t *  @param {string|int} mAction Paging action to take: \"first\", \"previous\", \"next\" or \"last\"\n\t\t *    or page number to jump to (integer), note that page 0 is the first page.\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnPageChange( 'next' );\n\t\t *    } );\n\t\t */\n\t\tthis.fnPageChange = function ( mAction, bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).page( mAction );\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw(false);\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Show a particular column\n\t\t *  @param {int} iCol The column whose display should be changed\n\t\t *  @param {bool} bShow Show (true) or hide (false) the column\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Hide the second column after initialisation\n\t\t *      oTable.fnSetColumnVis( 1, false );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSetColumnVis = function ( iCol, bShow, bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).column( iCol ).visible( bShow );\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.columns.adjust().draw();\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the settings for a particular table for external manipulation\n\t\t *  @returns {object} DataTables settings object. See\n\t\t *    {@link DataTable.models.oSettings}\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      var oSettings = oTable.fnSettings();\n\t\t *\n\t\t *      // Show an example parameter from the settings\n\t\t *      alert( oSettings._iDisplayStart );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSettings = function()\n\t\t{\n\t\t\treturn _fnSettingsFromNode( this[_ext.iApiIndex] );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Sort the table by a particular column\n\t\t *  @param {int} iCol the data index to sort on. Note that this will not match the\n\t\t *    'display index' if you have hidden data entries\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sort immediately with columns 0 and 1\n\t\t *      oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSort = function( aaSort )\n\t\t{\n\t\t\tthis.api( true ).order( aaSort ).draw();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Attach a sort listener to an element for a given column\n\t\t *  @param {node} nNode the element to attach the sort listener to\n\t\t *  @param {int} iColumn the column that a click on this node will sort on\n\t\t *  @param {function} [fnCallback] callback function when sort is run\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sort on column 1, when 'sorter' is clicked on\n\t\t *      oTable.fnSortListener( document.getElementById('sorter'), 1 );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSortListener = function( nNode, iColumn, fnCallback )\n\t\t{\n\t\t\tthis.api( true ).order.listener( nNode, iColumn, fnCallback );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Update a table cell or row - this method will accept either a single value to\n\t\t * update the cell with, an array of values with one element for each column or\n\t\t * an object in the same format as the original data source. The function is\n\t\t * self-referencing in order to make the multi column updates easier.\n\t\t *  @param {object|array|string} mData Data to update the cell/row with\n\t\t *  @param {node|int} mRow TR element you want to update or the aoData index\n\t\t *  @param {int} [iColumn] The column to update, give as null or undefined to\n\t\t *    update a whole row.\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @param {bool} [bAction=true] Perform pre-draw actions or not\n\t\t *  @returns {int} 0 on success, 1 on error\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell\n\t\t *      oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], $('tbody tr')[0] ); // Row\n\t\t *    } );\n\t\t */\n\t\tthis.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( iColumn === undefined || iColumn === null ) {\n\t\t\t\tapi.row( mRow ).data( mData );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapi.cell( mRow, iColumn ).data( mData );\n\t\t\t}\n\t\t\n\t\t\tif ( bAction === undefined || bAction ) {\n\t\t\t\tapi.columns.adjust();\n\t\t\t}\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\treturn 0;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Provide a common method for plug-ins to check the version of DataTables being used, in order\n\t\t * to ensure compatibility.\n\t\t *  @param {string} sVersion Version string to check for, in the format \"X.Y.Z\". Note that the\n\t\t *    formats \"X\" and \"X.Y\" are also acceptable.\n\t\t *  @returns {boolean} true if this version of DataTables is greater or equal to the required\n\t\t *    version, or false if this version of DataTales is not suitable\n\t\t *  @method\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      alert( oTable.fnVersionCheck( '1.9.0' ) );\n\t\t *    } );\n\t\t */\n\t\tthis.fnVersionCheck = _ext.fnVersionCheck;\n\t\t\n\n\t\tvar _that = this;\n\t\tvar emptyInit = options === undefined;\n\t\tvar len = this.length;\n\n\t\tif ( emptyInit ) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tthis.oApi = this.internal = _ext.internal;\n\n\t\t// Extend with old style plug-in API methods\n\t\tfor ( var fn in DataTable.ext.internal ) {\n\t\t\tif ( fn ) {\n\t\t\t\tthis[fn] = _fnExternApiFunc(fn);\n\t\t\t}\n\t\t}\n\n\t\tthis.each(function() {\n\t\t\t// For each initialisation we want to give it a clean initialisation\n\t\t\t// object that can be bashed around\n\t\t\tvar o = {};\n\t\t\tvar oInit = len > 1 ? // optimisation for single table case\n\t\t\t\t_fnExtend( o, options, true ) :\n\t\t\t\toptions;\n\n\t\t\t/*global oInit,_that,emptyInit*/\n\t\t\tvar i=0, iLen, j, jLen, k, kLen;\n\t\t\tvar sId = this.getAttribute( 'id' );\n\t\t\tvar bInitHandedOff = false;\n\t\t\tvar defaults = DataTable.defaults;\n\t\t\tvar $this = $(this);\n\t\t\t\n\t\t\t\n\t\t\t/* Sanity check */\n\t\t\tif ( this.nodeName.toLowerCase() != 'table' )\n\t\t\t{\n\t\t\t\t_fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\t/* Backwards compatibility for the defaults */\n\t\t\t_fnCompatOpts( defaults );\n\t\t\t_fnCompatCols( defaults.column );\n\t\t\t\n\t\t\t/* Convert the camel-case defaults to Hungarian */\n\t\t\t_fnCamelToHungarian( defaults, defaults, true );\n\t\t\t_fnCamelToHungarian( defaults.column, defaults.column, true );\n\t\t\t\n\t\t\t/* Setting up the initialisation object */\n\t\t\t_fnCamelToHungarian( defaults, $.extend( oInit, $this.data() ) );\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t/* Check to see if we are re-initialising a table */\n\t\t\tvar allSettings = DataTable.settings;\n\t\t\tfor ( i=0, iLen=allSettings.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tvar s = allSettings[i];\n\t\t\t\n\t\t\t\t/* Base check on table node */\n\t\t\t\tif ( s.nTable == this || s.nTHead.parentNode == this || (s.nTFoot && s.nTFoot.parentNode == this) )\n\t\t\t\t{\n\t\t\t\t\tvar bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;\n\t\t\t\t\tvar bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;\n\t\t\t\n\t\t\t\t\tif ( emptyInit || bRetrieve )\n\t\t\t\t\t{\n\t\t\t\t\t\treturn s.oInstance;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( bDestroy )\n\t\t\t\t\t{\n\t\t\t\t\t\ts.oInstance.fnDestroy();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* If the element we are initialising has the same ID as a table which was previously\n\t\t\t\t * initialised, but the table nodes don't match (from before) then we destroy the old\n\t\t\t\t * instance by simply deleting it. This is under the assumption that the table has been\n\t\t\t\t * destroyed by other methods. Anyone using non-id selectors will need to do this manually\n\t\t\t\t */\n\t\t\t\tif ( s.sTableId == this.id )\n\t\t\t\t{\n\t\t\t\t\tallSettings.splice( i, 1 );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* Ensure the table has an ID - required for accessibility */\n\t\t\tif ( sId === null || sId === \"\" )\n\t\t\t{\n\t\t\t\tsId = \"DataTables_Table_\"+(DataTable.ext._unique++);\n\t\t\t\tthis.id = sId;\n\t\t\t}\n\t\t\t\n\t\t\t/* Create the settings object for this table and set some of the default parameters */\n\t\t\tvar oSettings = $.extend( true, {}, DataTable.models.oSettings, {\n\t\t\t\t\"sDestroyWidth\": $this[0].style.width,\n\t\t\t\t\"sInstance\":     sId,\n\t\t\t\t\"sTableId\":      sId\n\t\t\t} );\n\t\t\toSettings.nTable = this;\n\t\t\toSettings.oApi   = _that.internal;\n\t\t\toSettings.oInit  = oInit;\n\t\t\t\n\t\t\tallSettings.push( oSettings );\n\t\t\t\n\t\t\t// Need to add the instance after the instance after the settings object has been added\n\t\t\t// to the settings array, so we can self reference the table instance if more than one\n\t\t\toSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();\n\t\t\t\n\t\t\t// Backwards compatibility, before we apply all the defaults\n\t\t\t_fnCompatOpts( oInit );\n\t\t\t\n\t\t\tif ( oInit.oLanguage )\n\t\t\t{\n\t\t\t\t_fnLanguageCompat( oInit.oLanguage );\n\t\t\t}\n\t\t\t\n\t\t\t// If the length menu is given, but the init display length is not, use the length menu\n\t\t\tif ( oInit.aLengthMenu && ! oInit.iDisplayLength )\n\t\t\t{\n\t\t\t\toInit.iDisplayLength = $.isArray( oInit.aLengthMenu[0] ) ?\n\t\t\t\t\toInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];\n\t\t\t}\n\t\t\t\n\t\t\t// Apply the defaults and init options to make a single init object will all\n\t\t\t// options defined from defaults and instance options.\n\t\t\toInit = _fnExtend( $.extend( true, {}, defaults ), oInit );\n\t\t\t\n\t\t\t\n\t\t\t// Map the initialisation options onto the settings object\n\t\t\t_fnMap( oSettings.oFeatures, oInit, [\n\t\t\t\t\"bPaginate\",\n\t\t\t\t\"bLengthChange\",\n\t\t\t\t\"bFilter\",\n\t\t\t\t\"bSort\",\n\t\t\t\t\"bSortMulti\",\n\t\t\t\t\"bInfo\",\n\t\t\t\t\"bProcessing\",\n\t\t\t\t\"bAutoWidth\",\n\t\t\t\t\"bSortClasses\",\n\t\t\t\t\"bServerSide\",\n\t\t\t\t\"bDeferRender\"\n\t\t\t] );\n\t\t\t_fnMap( oSettings, oInit, [\n\t\t\t\t\"asStripeClasses\",\n\t\t\t\t\"ajax\",\n\t\t\t\t\"fnServerData\",\n\t\t\t\t\"fnFormatNumber\",\n\t\t\t\t\"sServerMethod\",\n\t\t\t\t\"aaSorting\",\n\t\t\t\t\"aaSortingFixed\",\n\t\t\t\t\"aLengthMenu\",\n\t\t\t\t\"sPaginationType\",\n\t\t\t\t\"sAjaxSource\",\n\t\t\t\t\"sAjaxDataProp\",\n\t\t\t\t\"iStateDuration\",\n\t\t\t\t\"sDom\",\n\t\t\t\t\"bSortCellsTop\",\n\t\t\t\t\"iTabIndex\",\n\t\t\t\t\"fnStateLoadCallback\",\n\t\t\t\t\"fnStateSaveCallback\",\n\t\t\t\t\"renderer\",\n\t\t\t\t\"searchDelay\",\n\t\t\t\t[ \"iCookieDuration\", \"iStateDuration\" ], // backwards compat\n\t\t\t\t[ \"oSearch\", \"oPreviousSearch\" ],\n\t\t\t\t[ \"aoSearchCols\", \"aoPreSearchCols\" ],\n\t\t\t\t[ \"iDisplayLength\", \"_iDisplayLength\" ],\n\t\t\t\t[ \"bJQueryUI\", \"bJUI\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oScroll, oInit, [\n\t\t\t\t[ \"sScrollX\", \"sX\" ],\n\t\t\t\t[ \"sScrollXInner\", \"sXInner\" ],\n\t\t\t\t[ \"sScrollY\", \"sY\" ],\n\t\t\t\t[ \"bScrollCollapse\", \"bCollapse\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oLanguage, oInit, \"fnInfoCallback\" );\n\t\t\t\n\t\t\t/* Callback functions which are array driven */\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoServerParams',       oInit.fnServerParams,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams,   'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams,   'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded,       'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback,       'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow,        'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback,    'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback,    'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );\n\t\t\t\n\t\t\tvar oClasses = oSettings.oClasses;\n\t\t\t\n\t\t\t// @todo Remove in 1.11\n\t\t\tif ( oInit.bJQueryUI )\n\t\t\t{\n\t\t\t\t/* Use the JUI classes object for display. You could clone the oStdClasses object if\n\t\t\t\t * you want to have multiple tables with multiple independent classes\n\t\t\t\t */\n\t\t\t\t$.extend( oClasses, DataTable.ext.oJUIClasses, oInit.oClasses );\n\t\t\t\n\t\t\t\tif ( oInit.sDom === defaults.sDom && defaults.sDom === \"lfrtip\" )\n\t\t\t\t{\n\t\t\t\t\t/* Set the DOM to use a layout suitable for jQuery UI's theming */\n\t\t\t\t\toSettings.sDom = '<\"H\"lfr>t<\"F\"ip>';\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif ( ! oSettings.renderer ) {\n\t\t\t\t\toSettings.renderer = 'jqueryui';\n\t\t\t\t}\n\t\t\t\telse if ( $.isPlainObject( oSettings.renderer ) && ! oSettings.renderer.header ) {\n\t\t\t\t\toSettings.renderer.header = 'jqueryui';\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );\n\t\t\t}\n\t\t\t$this.addClass( oClasses.sTable );\n\t\t\t\n\t\t\t/* Calculate the scroll bar width and cache it for use later on */\n\t\t\tif ( oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\" )\n\t\t\t{\n\t\t\t\toSettings.oScroll.iBarWidth = _fnScrollBarWidth();\n\t\t\t}\n\t\t\tif ( oSettings.oScroll.sX === true ) { // Easy initialisation of x-scrolling\n\t\t\t\toSettings.oScroll.sX = '100%';\n\t\t\t}\n\t\t\t\n\t\t\tif ( oSettings.iInitDisplayStart === undefined )\n\t\t\t{\n\t\t\t\t/* Display start point, taking into account the save saving */\n\t\t\t\toSettings.iInitDisplayStart = oInit.iDisplayStart;\n\t\t\t\toSettings._iDisplayStart = oInit.iDisplayStart;\n\t\t\t}\n\t\t\t\n\t\t\tif ( oInit.iDeferLoading !== null )\n\t\t\t{\n\t\t\t\toSettings.bDeferLoading = true;\n\t\t\t\tvar tmp = $.isArray( oInit.iDeferLoading );\n\t\t\t\toSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;\n\t\t\t\toSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;\n\t\t\t}\n\t\t\t\n\t\t\t/* Language definitions */\n\t\t\tvar oLanguage = oSettings.oLanguage;\n\t\t\t$.extend( true, oLanguage, oInit.oLanguage );\n\t\t\t\n\t\t\tif ( oLanguage.sUrl !== \"\" )\n\t\t\t{\n\t\t\t\t/* Get the language definitions from a file - because this Ajax call makes the language\n\t\t\t\t * get async to the remainder of this function we use bInitHandedOff to indicate that\n\t\t\t\t * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor\n\t\t\t\t */\n\t\t\t\t$.ajax( {\n\t\t\t\t\tdataType: 'json',\n\t\t\t\t\turl: oLanguage.sUrl,\n\t\t\t\t\tsuccess: function ( json ) {\n\t\t\t\t\t\t_fnLanguageCompat( json );\n\t\t\t\t\t\t_fnCamelToHungarian( defaults.oLanguage, json );\n\t\t\t\t\t\t$.extend( true, oLanguage, json );\n\t\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t\t},\n\t\t\t\t\terror: function () {\n\t\t\t\t\t\t// Error occurred loading language file, continue on as best we can\n\t\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tbInitHandedOff = true;\n\t\t\t}\n\t\t\t\n\t\t\t/*\n\t\t\t * Stripes\n\t\t\t */\n\t\t\tif ( oInit.asStripeClasses === null )\n\t\t\t{\n\t\t\t\toSettings.asStripeClasses =[\n\t\t\t\t\toClasses.sStripeOdd,\n\t\t\t\t\toClasses.sStripeEven\n\t\t\t\t];\n\t\t\t}\n\t\t\t\n\t\t\t/* Remove row stripe classes if they are already on the table row */\n\t\t\tvar stripeClasses = oSettings.asStripeClasses;\n\t\t\tvar rowOne = $this.children('tbody').find('tr').eq(0);\n\t\t\tif ( $.inArray( true, $.map( stripeClasses, function(el, i) {\n\t\t\t\treturn rowOne.hasClass(el);\n\t\t\t} ) ) !== -1 ) {\n\t\t\t\t$('tbody tr', this).removeClass( stripeClasses.join(' ') );\n\t\t\t\toSettings.asDestroyStripes = stripeClasses.slice();\n\t\t\t}\n\t\t\t\n\t\t\t/*\n\t\t\t * Columns\n\t\t\t * See if we should load columns automatically or use defined ones\n\t\t\t */\n\t\t\tvar anThs = [];\n\t\t\tvar aoColumnsInit;\n\t\t\tvar nThead = this.getElementsByTagName('thead');\n\t\t\tif ( nThead.length !== 0 )\n\t\t\t{\n\t\t\t\t_fnDetectHeader( oSettings.aoHeader, nThead[0] );\n\t\t\t\tanThs = _fnGetUniqueThs( oSettings );\n\t\t\t}\n\t\t\t\n\t\t\t/* If not given a column array, generate one with nulls */\n\t\t\tif ( oInit.aoColumns === null )\n\t\t\t{\n\t\t\t\taoColumnsInit = [];\n\t\t\t\tfor ( i=0, iLen=anThs.length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\taoColumnsInit.push( null );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\taoColumnsInit = oInit.aoColumns;\n\t\t\t}\n\t\t\t\n\t\t\t/* Add the columns */\n\t\t\tfor ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\t_fnAddColumn( oSettings, anThs ? anThs[i] : null );\n\t\t\t}\n\t\t\t\n\t\t\t/* Apply the column definitions */\n\t\t\t_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {\n\t\t\t\t_fnColumnOptions( oSettings, iCol, oDef );\n\t\t\t} );\n\t\t\t\n\t\t\t/* HTML5 attribute detection - build an mData object automatically if the\n\t\t\t * attributes are found\n\t\t\t */\n\t\t\tif ( rowOne.length ) {\n\t\t\t\tvar a = function ( cell, name ) {\n\t\t\t\t\treturn cell.getAttribute( 'data-'+name ) !== null ? name : null;\n\t\t\t\t};\n\t\t\t\n\t\t\t\t$.each( _fnGetRowElements( oSettings, rowOne[0] ).cells, function (i, cell) {\n\t\t\t\t\tvar col = oSettings.aoColumns[i];\n\t\t\t\n\t\t\t\t\tif ( col.mData === i ) {\n\t\t\t\t\t\tvar sort = a( cell, 'sort' ) || a( cell, 'order' );\n\t\t\t\t\t\tvar filter = a( cell, 'filter' ) || a( cell, 'search' );\n\t\t\t\n\t\t\t\t\t\tif ( sort !== null || filter !== null ) {\n\t\t\t\t\t\t\tcol.mData = {\n\t\t\t\t\t\t\t\t_:      i+'.display',\n\t\t\t\t\t\t\t\tsort:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\ttype:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\tfilter: filter !== null ? i+'.@data-'+filter : undefined\n\t\t\t\t\t\t\t};\n\t\t\t\n\t\t\t\t\t\t\t_fnColumnOptions( oSettings, i );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\t\n\t\t\tvar features = oSettings.oFeatures;\n\t\t\t\n\t\t\t/* Must be done after everything which can be overridden by the state saving! */\n\t\t\tif ( oInit.bStateSave )\n\t\t\t{\n\t\t\t\tfeatures.bStateSave = true;\n\t\t\t\t_fnLoadState( oSettings, oInit );\n\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t/*\n\t\t\t * Sorting\n\t\t\t * @todo For modularisation (1.11) this needs to do into a sort start up handler\n\t\t\t */\n\t\t\t\n\t\t\t// If aaSorting is not defined, then we use the first indicator in asSorting\n\t\t\t// in case that has been altered, so the default sort reflects that option\n\t\t\tif ( oInit.aaSorting === undefined )\n\t\t\t{\n\t\t\t\tvar sorting = oSettings.aaSorting;\n\t\t\t\tfor ( i=0, iLen=sorting.length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\tsorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* Do a first pass on the sorting classes (allows any size changes to be taken into\n\t\t\t * account, and also will apply sorting disabled classes if disabled\n\t\t\t */\n\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\n\t\t\tif ( features.bSort )\n\t\t\t{\n\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\t\tif ( oSettings.bSorted ) {\n\t\t\t\t\t\tvar aSort = _fnSortFlatten( oSettings );\n\t\t\t\t\t\tvar sortedColumns = {};\n\t\t\t\n\t\t\t\t\t\t$.each( aSort, function (i, val) {\n\t\t\t\t\t\t\tsortedColumns[ val.src ] = val.dir;\n\t\t\t\t\t\t} );\n\t\t\t\n\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );\n\t\t\t\t\t\t_fnSortAria( oSettings );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\t\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\tif ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {\n\t\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\t}\n\t\t\t}, 'sc' );\n\t\t\t\n\t\t\t\n\t\t\t/*\n\t\t\t * Final init\n\t\t\t * Cache the header, body and footer as required, creating them if needed\n\t\t\t */\n\t\t\t\n\t\t\t/* Browser support detection */\n\t\t\t_fnBrowserDetect( oSettings );\n\t\t\t\n\t\t\t// Work around for Webkit bug 83867 - store the caption-side before removing from doc\n\t\t\tvar captions = $this.children('caption').each( function () {\n\t\t\t\tthis._captionSide = $this.css('caption-side');\n\t\t\t} );\n\t\t\t\n\t\t\tvar thead = $this.children('thead');\n\t\t\tif ( thead.length === 0 )\n\t\t\t{\n\t\t\t\tthead = $('<thead/>').appendTo(this);\n\t\t\t}\n\t\t\toSettings.nTHead = thead[0];\n\t\t\t\n\t\t\tvar tbody = $this.children('tbody');\n\t\t\tif ( tbody.length === 0 )\n\t\t\t{\n\t\t\t\ttbody = $('<tbody/>').appendTo(this);\n\t\t\t}\n\t\t\toSettings.nTBody = tbody[0];\n\t\t\t\n\t\t\tvar tfoot = $this.children('tfoot');\n\t\t\tif ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\") )\n\t\t\t{\n\t\t\t\t// If we are a scrolling table, and no footer has been given, then we need to create\n\t\t\t\t// a tfoot element for the caption element to be appended to\n\t\t\t\ttfoot = $('<tfoot/>').appendTo(this);\n\t\t\t}\n\t\t\t\n\t\t\tif ( tfoot.length === 0 || tfoot.children().length === 0 ) {\n\t\t\t\t$this.addClass( oClasses.sNoFooter );\n\t\t\t}\n\t\t\telse if ( tfoot.length > 0 ) {\n\t\t\t\toSettings.nTFoot = tfoot[0];\n\t\t\t\t_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );\n\t\t\t}\n\t\t\t\n\t\t\t/* Check if there is data passing into the constructor */\n\t\t\tif ( oInit.aaData )\n\t\t\t{\n\t\t\t\tfor ( i=0 ; i<oInit.aaData.length ; i++ )\n\t\t\t\t{\n\t\t\t\t\t_fnAddData( oSettings, oInit.aaData[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( oSettings.bDeferLoading || _fnDataSource( oSettings ) == 'dom' )\n\t\t\t{\n\t\t\t\t/* Grab the data from the page - only do this when deferred loading or no Ajax\n\t\t\t\t * source since there is no point in reading the DOM data if we are then going\n\t\t\t\t * to replace it with Ajax data\n\t\t\t\t */\n\t\t\t\t_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );\n\t\t\t}\n\t\t\t\n\t\t\t/* Copy the data index array */\n\t\t\toSettings.aiDisplay = oSettings.aiDisplayMaster.slice();\n\t\t\t\n\t\t\t/* Initialisation complete - table can be drawn */\n\t\t\toSettings.bInitialised = true;\n\t\t\t\n\t\t\t/* Check if we need to initialise the table (it might not have been handed off to the\n\t\t\t * language processor)\n\t\t\t */\n\t\t\tif ( bInitHandedOff === false )\n\t\t\t{\n\t\t\t\t_fnInitialise( oSettings );\n\t\t\t}\n\t\t} );\n\t\t_that = null;\n\t\treturn this;\n\t};\n\n\t\n\t\n\t/**\n\t * Computed structure of the DataTables API, defined by the options passed to\n\t * `DataTable.Api.register()` when building the API.\n\t *\n\t * The structure is built in order to speed creation and extension of the Api\n\t * objects since the extensions are effectively pre-parsed.\n\t *\n\t * The array is an array of objects with the following structure, where this\n\t * base array represents the Api prototype base:\n\t *\n\t *     [\n\t *       {\n\t *         name:      'data'                -- string   - Property name\n\t *         val:       function () {},       -- function - Api method (or undefined if just an object\n\t *         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t *         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t *       },\n\t *       {\n\t *         name:     'row'\n\t *         val:       {},\n\t *         methodExt: [ ... ],\n\t *         propExt:   [\n\t *           {\n\t *             name:      'data'\n\t *             val:       function () {},\n\t *             methodExt: [ ... ],\n\t *             propExt:   [ ... ]\n\t *           },\n\t *           ...\n\t *         ]\n\t *       }\n\t *     ]\n\t *\n\t * @type {Array}\n\t * @ignore\n\t */\n\tvar __apiStruct = [];\n\t\n\t\n\t/**\n\t * `Array.prototype` reference.\n\t *\n\t * @type object\n\t * @ignore\n\t */\n\tvar __arrayProto = Array.prototype;\n\t\n\t\n\t/**\n\t * Abstraction for `context` parameter of the `Api` constructor to allow it to\n\t * take several different forms for ease of use.\n\t *\n\t * Each of the input parameter types will be converted to a DataTables settings\n\t * object where possible.\n\t *\n\t * @param  {string|node|jQuery|object} mixed DataTable identifier. Can be one\n\t *   of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t *   * `DataTables.Api` - API instance\n\t * @return {array|null} Matching DataTables settings objects. `null` or\n\t *   `undefined` is returned if no matching DataTable is found.\n\t * @ignore\n\t */\n\tvar _toSettings = function ( mixed )\n\t{\n\t\tvar idx, jq;\n\t\tvar settings = DataTable.settings;\n\t\tvar tables = $.map( settings, function (el, i) {\n\t\t\treturn el.nTable;\n\t\t} );\n\t\n\t\tif ( ! mixed ) {\n\t\t\treturn [];\n\t\t}\n\t\telse if ( mixed.nTable && mixed.oApi ) {\n\t\t\t// DataTables settings object\n\t\t\treturn [ mixed ];\n\t\t}\n\t\telse if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {\n\t\t\t// Table node\n\t\t\tidx = $.inArray( mixed, tables );\n\t\t\treturn idx !== -1 ? [ settings[idx] ] : null;\n\t\t}\n\t\telse if ( mixed && typeof mixed.settings === 'function' ) {\n\t\t\treturn mixed.settings().toArray();\n\t\t}\n\t\telse if ( typeof mixed === 'string' ) {\n\t\t\t// jQuery selector\n\t\t\tjq = $(mixed);\n\t\t}\n\t\telse if ( mixed instanceof $ ) {\n\t\t\t// jQuery object (also DataTables instance)\n\t\t\tjq = mixed;\n\t\t}\n\t\n\t\tif ( jq ) {\n\t\t\treturn jq.map( function(i) {\n\t\t\t\tidx = $.inArray( this, tables );\n\t\t\t\treturn idx !== -1 ? settings[idx] : null;\n\t\t\t} ).toArray();\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * DataTables API class - used to control and interface with  one or more\n\t * DataTables enhanced tables.\n\t *\n\t * The API class is heavily based on jQuery, presenting a chainable interface\n\t * that you can use to interact with tables. Each instance of the API class has\n\t * a \"context\" - i.e. the tables that it will operate on. This could be a single\n\t * table, all tables on a page or a sub-set thereof.\n\t *\n\t * Additionally the API is designed to allow you to easily work with the data in\n\t * the tables, retrieving and manipulating it as required. This is done by\n\t * presenting the API class as an array like interface. The contents of the\n\t * array depend upon the actions requested by each method (for example\n\t * `rows().nodes()` will return an array of nodes, while `rows().data()` will\n\t * return an array of objects or arrays depending upon your table's\n\t * configuration). The API object has a number of array like methods (`push`,\n\t * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,\n\t * `unique` etc) to assist your working with the data held in a table.\n\t *\n\t * Most methods (those which return an Api instance) are chainable, which means\n\t * the return from a method call also has all of the methods available that the\n\t * top level object had. For example, these two calls are equivalent:\n\t *\n\t *     // Not chained\n\t *     api.row.add( {...} );\n\t *     api.draw();\n\t *\n\t *     // Chained\n\t *     api.row.add( {...} ).draw();\n\t *\n\t * @class DataTable.Api\n\t * @param {array|object|string|jQuery} context DataTable identifier. This is\n\t *   used to define which DataTables enhanced tables this API will operate on.\n\t *   Can be one of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t * @param {array} [data] Data to initialise the Api instance with.\n\t *\n\t * @example\n\t *   // Direct initialisation during DataTables construction\n\t *   var api = $('#example').DataTable();\n\t *\n\t * @example\n\t *   // Initialisation using a DataTables jQuery object\n\t *   var api = $('#example').dataTable().api();\n\t *\n\t * @example\n\t *   // Initialisation as a constructor\n\t *   var api = new $.fn.DataTable.Api( 'table.dataTable' );\n\t */\n\t_Api = function ( context, data )\n\t{\n\t\tif ( ! (this instanceof _Api) ) {\n\t\t\treturn new _Api( context, data );\n\t\t}\n\t\n\t\tvar settings = [];\n\t\tvar ctxSettings = function ( o ) {\n\t\t\tvar a = _toSettings( o );\n\t\t\tif ( a ) {\n\t\t\t\tsettings.push.apply( settings, a );\n\t\t\t}\n\t\t};\n\t\n\t\tif ( $.isArray( context ) ) {\n\t\t\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\t\tctxSettings( context[i] );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tctxSettings( context );\n\t\t}\n\t\n\t\t// Remove duplicates\n\t\tthis.context = _unique( settings );\n\t\n\t\t// Initial data\n\t\tif ( data ) {\n\t\t\tthis.push.apply( this, data.toArray ? data.toArray() : data );\n\t\t}\n\t\n\t\t// selector\n\t\tthis.selector = {\n\t\t\trows: null,\n\t\t\tcols: null,\n\t\t\topts: null\n\t\t};\n\t\n\t\t_Api.extend( this, this, __apiStruct );\n\t};\n\t\n\tDataTable.Api = _Api;\n\t\n\t_Api.prototype = /** @lends DataTables.Api */{\n\t\tany: function ()\n\t\t{\n\t\t\treturn this.flatten().length !== 0;\n\t\t},\n\t\n\t\n\t\tconcat:  __arrayProto.concat,\n\t\n\t\n\t\tcontext: [], // array of table settings objects\n\t\n\t\n\t\teach: function ( fn )\n\t\t{\n\t\t\tfor ( var i=0, ien=this.length ; i<ien; i++ ) {\n\t\t\t\tfn.call( this, this[i], i, this );\n\t\t\t}\n\t\n\t\t\treturn this;\n\t\t},\n\t\n\t\n\t\teq: function ( idx )\n\t\t{\n\t\t\tvar ctx = this.context;\n\t\n\t\t\treturn ctx.length > idx ?\n\t\t\t\tnew _Api( ctx[idx], this[idx] ) :\n\t\t\t\tnull;\n\t\t},\n\t\n\t\n\t\tfilter: function ( fn )\n\t\t{\n\t\t\tvar a = [];\n\t\n\t\t\tif ( __arrayProto.filter ) {\n\t\t\t\ta = __arrayProto.filter.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( fn.call( this, this[i], i, this ) ) {\n\t\t\t\t\t\ta.push( this[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\t\n\t\n\t\tflatten: function ()\n\t\t{\n\t\t\tvar a = [];\n\t\t\treturn new _Api( this.context, a.concat.apply( a, this.toArray() ) );\n\t\t},\n\t\n\t\n\t\tjoin:    __arrayProto.join,\n\t\n\t\n\t\tindexOf: __arrayProto.indexOf || function (obj, start)\n\t\t{\n\t\t\tfor ( var i=(start || 0), ien=this.length ; i<ien ; i++ ) {\n\t\t\t\tif ( this[i] === obj ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\t\n\t\titerator: function ( flatten, type, fn, alwaysNew ) {\n\t\t\tvar\n\t\t\t\ta = [], ret,\n\t\t\t\ti, ien, j, jen,\n\t\t\t\tcontext = this.context,\n\t\t\t\trows, items, item,\n\t\t\t\tselector = this.selector;\n\t\n\t\t\t// Argument shifting\n\t\t\tif ( typeof flatten === 'string' ) {\n\t\t\t\talwaysNew = fn;\n\t\t\t\tfn = type;\n\t\t\t\ttype = flatten;\n\t\t\t\tflatten = false;\n\t\t\t}\n\t\n\t\t\tfor ( i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\t\tvar apiInst = new _Api( context[i] );\n\t\n\t\t\t\tif ( type === 'table' ) {\n\t\t\t\t\tret = fn.call( apiInst, context[i], i );\n\t\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'columns' || type === 'rows' ) {\n\t\t\t\t\t// this has same length as context - one entry for each table\n\t\t\t\t\tret = fn.call( apiInst, context[i], this[i], i );\n\t\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {\n\t\t\t\t\t// columns and rows share the same structure.\n\t\t\t\t\t// 'this' is an array of column indexes for each context\n\t\t\t\t\titems = this[i];\n\t\n\t\t\t\t\tif ( type === 'column-rows' ) {\n\t\t\t\t\t\trows = _selector_row_indexes( context[i], selector.opts );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfor ( j=0, jen=items.length ; j<jen ; j++ ) {\n\t\t\t\t\t\titem = items[j];\n\t\n\t\t\t\t\t\tif ( type === 'cell' ) {\n\t\t\t\t\t\t\tret = fn.call( apiInst, context[i], item.row, item.column, i, j );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tret = fn.call( apiInst, context[i], item, i, j, rows );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( a.length || alwaysNew ) {\n\t\t\t\tvar api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );\n\t\t\t\tvar apiSelector = api.selector;\n\t\t\t\tapiSelector.rows = selector.rows;\n\t\t\t\tapiSelector.cols = selector.cols;\n\t\t\t\tapiSelector.opts = selector.opts;\n\t\t\t\treturn api;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\n\t\n\t\tlastIndexOf: __arrayProto.lastIndexOf || function (obj, start)\n\t\t{\n\t\t\t// Bit cheeky...\n\t\t\treturn this.indexOf.apply( this.toArray.reverse(), arguments );\n\t\t},\n\t\n\t\n\t\tlength:  0,\n\t\n\t\n\t\tmap: function ( fn )\n\t\t{\n\t\t\tvar a = [];\n\t\n\t\t\tif ( __arrayProto.map ) {\n\t\t\t\ta = __arrayProto.map.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\t\ta.push( fn.call( this, this[i], i ) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\t\n\t\n\t\tpluck: function ( prop )\n\t\t{\n\t\t\treturn this.map( function ( el ) {\n\t\t\t\treturn el[ prop ];\n\t\t\t} );\n\t\t},\n\t\n\t\tpop:     __arrayProto.pop,\n\t\n\t\n\t\tpush:    __arrayProto.push,\n\t\n\t\n\t\t// Does not return an API instance\n\t\treduce: __arrayProto.reduce || function ( fn, init )\n\t\t{\n\t\t\treturn _fnReduce( this, fn, init, 0, this.length, 1 );\n\t\t},\n\t\n\t\n\t\treduceRight: __arrayProto.reduceRight || function ( fn, init )\n\t\t{\n\t\t\treturn _fnReduce( this, fn, init, this.length-1, -1, -1 );\n\t\t},\n\t\n\t\n\t\treverse: __arrayProto.reverse,\n\t\n\t\n\t\t// Object with rows, columns and opts\n\t\tselector: null,\n\t\n\t\n\t\tshift:   __arrayProto.shift,\n\t\n\t\n\t\tsort:    __arrayProto.sort, // ? name - order?\n\t\n\t\n\t\tsplice:  __arrayProto.splice,\n\t\n\t\n\t\ttoArray: function ()\n\t\t{\n\t\t\treturn __arrayProto.slice.call( this );\n\t\t},\n\t\n\t\n\t\tto$: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\t\n\t\n\t\ttoJQuery: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\t\n\t\n\t\tunique: function ()\n\t\t{\n\t\t\treturn new _Api( this.context, _unique(this) );\n\t\t},\n\t\n\t\n\t\tunshift: __arrayProto.unshift\n\t};\n\t\n\t\n\t_Api.extend = function ( scope, obj, ext )\n\t{\n\t\t// Only extend API instances and static properties of the API\n\t\tif ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ti, ien,\n\t\t\tj, jen,\n\t\t\tstruct, inner,\n\t\t\tmethodScoping = function ( scope, fn, struc ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar ret = fn.apply( scope, arguments );\n\t\n\t\t\t\t\t// Method extension\n\t\t\t\t\t_Api.extend( ret, ret, struc.methodExt );\n\t\t\t\t\treturn ret;\n\t\t\t\t};\n\t\t\t};\n\t\n\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\tstruct = ext[i];\n\t\n\t\t\t// Value\n\t\t\tobj[ struct.name ] = typeof struct.val === 'function' ?\n\t\t\t\tmethodScoping( scope, struct.val, struct ) :\n\t\t\t\t$.isPlainObject( struct.val ) ?\n\t\t\t\t\t{} :\n\t\t\t\t\tstruct.val;\n\t\n\t\t\tobj[ struct.name ].__dt_wrapper = true;\n\t\n\t\t\t// Property extension\n\t\t\t_Api.extend( scope, obj[ struct.name ], struct.propExt );\n\t\t}\n\t};\n\t\n\t\n\t// @todo - Is there need for an augment function?\n\t// _Api.augment = function ( inst, name )\n\t// {\n\t// \t// Find src object in the structure from the name\n\t// \tvar parts = name.split('.');\n\t\n\t// \t_Api.extend( inst, obj );\n\t// };\n\t\n\t\n\t//     [\n\t//       {\n\t//         name:      'data'                -- string   - Property name\n\t//         val:       function () {},       -- function - Api method (or undefined if just an object\n\t//         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t//         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t//       },\n\t//       {\n\t//         name:     'row'\n\t//         val:       {},\n\t//         methodExt: [ ... ],\n\t//         propExt:   [\n\t//           {\n\t//             name:      'data'\n\t//             val:       function () {},\n\t//             methodExt: [ ... ],\n\t//             propExt:   [ ... ]\n\t//           },\n\t//           ...\n\t//         ]\n\t//       }\n\t//     ]\n\t\n\t_Api.register = _api_register = function ( name, val )\n\t{\n\t\tif ( $.isArray( name ) ) {\n\t\t\tfor ( var j=0, jen=name.length ; j<jen ; j++ ) {\n\t\t\t\t_Api.register( name[j], val );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ti, ien,\n\t\t\their = name.split('.'),\n\t\t\tstruct = __apiStruct,\n\t\t\tkey, method;\n\t\n\t\tvar find = function ( src, name ) {\n\t\t\tfor ( var i=0, ien=src.length ; i<ien ; i++ ) {\n\t\t\t\tif ( src[i].name === name ) {\n\t\t\t\t\treturn src[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\n\t\tfor ( i=0, ien=heir.length ; i<ien ; i++ ) {\n\t\t\tmethod = heir[i].indexOf('()') !== -1;\n\t\t\tkey = method ?\n\t\t\t\their[i].replace('()', '') :\n\t\t\t\their[i];\n\t\n\t\t\tvar src = find( struct, key );\n\t\t\tif ( ! src ) {\n\t\t\t\tsrc = {\n\t\t\t\t\tname:      key,\n\t\t\t\t\tval:       {},\n\t\t\t\t\tmethodExt: [],\n\t\t\t\t\tpropExt:   []\n\t\t\t\t};\n\t\t\t\tstruct.push( src );\n\t\t\t}\n\t\n\t\t\tif ( i === ien-1 ) {\n\t\t\t\tsrc.val = val;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstruct = method ?\n\t\t\t\t\tsrc.methodExt :\n\t\t\t\t\tsrc.propExt;\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\t_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {\n\t\t_Api.register( pluralName, val );\n\t\n\t\t_Api.register( singularName, function () {\n\t\t\tvar ret = val.apply( this, arguments );\n\t\n\t\t\tif ( ret === this ) {\n\t\t\t\t// Returned item is the API instance that was passed in, return it\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\telse if ( ret instanceof _Api ) {\n\t\t\t\t// New API instance returned, want the value from the first item\n\t\t\t\t// in the returned array for the singular result.\n\t\t\t\treturn ret.length ?\n\t\t\t\t\t$.isArray( ret[0] ) ?\n\t\t\t\t\t\tnew _Api( ret.context, ret[0] ) : // Array results are 'enhanced'\n\t\t\t\t\t\tret[0] :\n\t\t\t\t\tundefined;\n\t\t\t}\n\t\n\t\t\t// Non-API return - just fire it back\n\t\t\treturn ret;\n\t\t} );\n\t};\n\t\n\t\n\t/**\n\t * Selector for HTML tables. Apply the given selector to the give array of\n\t * DataTables settings objects.\n\t *\n\t * @param {string|integer} [selector] jQuery selector string or integer\n\t * @param  {array} Array of DataTables settings objects to be filtered\n\t * @return {array}\n\t * @ignore\n\t */\n\tvar __table_selector = function ( selector, a )\n\t{\n\t\t// Integer is used to pick out a table by index\n\t\tif ( typeof selector === 'number' ) {\n\t\t\treturn [ a[ selector ] ];\n\t\t}\n\t\n\t\t// Perform a jQuery selector on the table nodes\n\t\tvar nodes = $.map( a, function (el, i) {\n\t\t\treturn el.nTable;\n\t\t} );\n\t\n\t\treturn $(nodes)\n\t\t\t.filter( selector )\n\t\t\t.map( function (i) {\n\t\t\t\t// Need to translate back from the table node to the settings\n\t\t\t\tvar idx = $.inArray( this, nodes );\n\t\t\t\treturn a[ idx ];\n\t\t\t} )\n\t\t\t.toArray();\n\t};\n\t\n\t\n\t\n\t/**\n\t * Context selector for the API's context (i.e. the tables the API instance\n\t * refers to.\n\t *\n\t * @name    DataTable.Api#tables\n\t * @param {string|integer} [selector] Selector to pick which tables the iterator\n\t *   should operate on. If not given, all tables in the current context are\n\t *   used. This can be given as a jQuery selector (for example `':gt(0)'`) to\n\t *   select multiple tables or as an integer to select a single table.\n\t * @returns {DataTable.Api} Returns a new API instance if a selector is given.\n\t */\n\t_api_register( 'tables()', function ( selector ) {\n\t\t// A new instance is created if there was a selector specified\n\t\treturn selector ?\n\t\t\tnew _Api( __table_selector( selector, this.context ) ) :\n\t\t\tthis;\n\t} );\n\t\n\t\n\t_api_register( 'table()', function ( selector ) {\n\t\tvar tables = this.tables( selector );\n\t\tvar ctx = tables.context;\n\t\n\t\t// Truncate to the first matched table\n\t\treturn ctx.length ?\n\t\t\tnew _Api( ctx[0] ) :\n\t\t\ttables;\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().nodes()', 'table().node()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTable;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().body()', 'table().body()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTBody;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().header()', 'table().header()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTHead;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().footer()', 'table().footer()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTFoot;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().containers()', 'table().container()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTableWrapper;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Redraw the tables in the current context.\n\t *\n\t * @param {boolean} [reset=true] Reset (default) or hold the current paging\n\t *   position. A full re-sort and re-filter is performed when this method is\n\t *   called, which is why the pagination reset is the default action.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'draw()', function ( resetPaging ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnReDraw( settings, resetPaging===false );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Get the current page index.\n\t *\n\t * @return {integer} Current page index (zero based)\n\t *//**\n\t * Set the current page.\n\t *\n\t * Note that if you attempt to show a page which does not exist, DataTables will\n\t * not throw an error, but rather reset the paging.\n\t *\n\t * @param {integer|string} action The paging action to take. This can be one of:\n\t *  * `integer` - The page index to jump to\n\t *  * `string` - An action to take:\n\t *    * `first` - Jump to first page.\n\t *    * `next` - Jump to the next page\n\t *    * `previous` - Jump to previous page\n\t *    * `last` - Jump to the last page.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page()', function ( action ) {\n\t\tif ( action === undefined ) {\n\t\t\treturn this.page.info().page; // not an expensive call\n\t\t}\n\t\n\t\t// else, have an action to take on all tables\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnPageChange( settings, action );\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Paging information for the first table in the current context.\n\t *\n\t * If you require paging information for another table, use the `table()` method\n\t * with a suitable selector.\n\t *\n\t * @return {object} Object with the following properties set:\n\t *  * `page` - Current page index (zero based - i.e. the first page is `0`)\n\t *  * `pages` - Total number of pages\n\t *  * `start` - Display index for the first record shown on the current page\n\t *  * `end` - Display index for the last record shown on the current page\n\t *  * `length` - Display length (number of records). Note that generally `start\n\t *    + length = end`, but this is not always true, for example if there are\n\t *    only 2 records to show on the final page, with a length of 10.\n\t *  * `recordsTotal` - Full data set length\n\t *  * `recordsDisplay` - Data set length once the current filtering criterion\n\t *    are applied.\n\t */\n\t_api_register( 'page.info()', function ( action ) {\n\t\tif ( this.context.length === 0 ) {\n\t\t\treturn undefined;\n\t\t}\n\t\n\t\tvar\n\t\t\tsettings   = this.context[0],\n\t\t\tstart      = settings._iDisplayStart,\n\t\t\tlen        = settings._iDisplayLength,\n\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\t\n\t\treturn {\n\t\t\t\"page\":           all ? 0 : Math.floor( start / len ),\n\t\t\t\"pages\":          all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\"start\":          start,\n\t\t\t\"end\":            settings.fnDisplayEnd(),\n\t\t\t\"length\":         len,\n\t\t\t\"recordsTotal\":   settings.fnRecordsTotal(),\n\t\t\t\"recordsDisplay\": visRecords\n\t\t};\n\t} );\n\t\n\t\n\t/**\n\t * Get the current page length.\n\t *\n\t * @return {integer} Current page length. Note `-1` indicates that all records\n\t *   are to be shown.\n\t *//**\n\t * Set the current page length.\n\t *\n\t * @param {integer} Page length to set. Use `-1` to show all records.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page.len()', function ( len ) {\n\t\t// Note that we can't call this function 'length()' because `length`\n\t\t// is a Javascript property of functions which defines how many arguments\n\t\t// the function expects.\n\t\tif ( len === undefined ) {\n\t\t\treturn this.context.length !== 0 ?\n\t\t\t\tthis.context[0]._iDisplayLength :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// else, set the page length\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnLengthChange( settings, len );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\tvar __reload = function ( settings, holdPosition, callback ) {\n\t\t// Use the draw event to trigger a callback\n\t\tif ( callback ) {\n\t\t\tvar api = new _Api( settings );\n\t\n\t\t\tapi.one( 'draw', function () {\n\t\t\t\tcallback( api.ajax.json() );\n\t\t\t} );\n\t\t}\n\t\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t_fnReDraw( settings, holdPosition );\n\t\t}\n\t\telse {\n\t\t\t// Trigger xhr\n\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t_fnBuildAjax( settings, [], function( json ) {\n\t\t\t\t_fnClearTable( settings );\n\t\n\t\t\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\t_fnAddData( settings, data[i] );\n\t\t\t\t}\n\t\n\t\t\t\t_fnReDraw( settings, holdPosition );\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t} );\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Get the JSON response from the last Ajax request that DataTables made to the\n\t * server. Note that this returns the JSON from the first table in the current\n\t * context.\n\t *\n\t * @return {object} JSON received from the server.\n\t */\n\t_api_register( 'ajax.json()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].json;\n\t\t}\n\t\n\t\t// else return undefined;\n\t} );\n\t\n\t\n\t/**\n\t * Get the data submitted in the last Ajax request\n\t */\n\t_api_register( 'ajax.params()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].oAjaxData;\n\t\t}\n\t\n\t\t// else return undefined;\n\t} );\n\t\n\t\n\t/**\n\t * Reload tables from the Ajax data source. Note that this function will\n\t * automatically re-draw the table when the remote data has been loaded.\n\t *\n\t * @param {boolean} [reset=true] Reset (default) or hold the current paging\n\t *   position. A full re-sort and re-filter is performed when this method is\n\t *   called, which is why the pagination reset is the default action.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.reload()', function ( callback, resetPaging ) {\n\t\treturn this.iterator( 'table', function (settings) {\n\t\t\t__reload( settings, resetPaging===false, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Get the current Ajax URL. Note that this returns the URL from the first\n\t * table in the current context.\n\t *\n\t * @return {string} Current Ajax source URL\n\t *//**\n\t * Set the Ajax URL. Note that this will set the URL for all tables in the\n\t * current context.\n\t *\n\t * @param {string} url URL to set.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url()', function ( url ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( url === undefined ) {\n\t\t\t// get\n\t\t\tif ( ctx.length === 0 ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tctx = ctx[0];\n\t\n\t\t\treturn ctx.ajax ?\n\t\t\t\t$.isPlainObject( ctx.ajax ) ?\n\t\t\t\t\tctx.ajax.url :\n\t\t\t\t\tctx.ajax :\n\t\t\t\tctx.sAjaxSource;\n\t\t}\n\t\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( $.isPlainObject( settings.ajax ) ) {\n\t\t\t\tsettings.ajax.url = url;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsettings.ajax = url;\n\t\t\t}\n\t\t\t// No need to consider sAjaxSource here since DataTables gives priority\n\t\t\t// to `ajax` over `sAjaxSource`. So setting `ajax` here, renders any\n\t\t\t// value of `sAjaxSource` redundant.\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Load data from the newly set Ajax URL. Note that this method is only\n\t * available when `ajax.url()` is used to set a URL. Additionally, this method\n\t * has the same effect as calling `ajax.reload()` but is provided for\n\t * convenience when setting a new URL. Like `ajax.reload()` it will\n\t * automatically redraw the table once the remote data has been loaded.\n\t *\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url().load()', function ( callback, resetPaging ) {\n\t\t// Same as a reload, but makes sense to present it for easy access after a\n\t\t// url change\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\t__reload( ctx, resetPaging===false, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t\n\tvar _selector_run = function ( type, selector, selectFn, settings, opts )\n\t{\n\t\tvar\n\t\t\tout = [], res,\n\t\t\ta, i, ien, j, jen,\n\t\t\tselectorType = typeof selector;\n\t\n\t\t// Can't just check for isArray here, as an API or jQuery instance might be\n\t\t// given with their array like look\n\t\tif ( ! selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined ) {\n\t\t\tselector = [ selector ];\n\t\t}\n\t\n\t\tfor ( i=0, ien=selector.length ; i<ien ; i++ ) {\n\t\t\ta = selector[i] && selector[i].split ?\n\t\t\t\tselector[i].split(',') :\n\t\t\t\t[ selector[i] ];\n\t\n\t\t\tfor ( j=0, jen=a.length ; j<jen ; j++ ) {\n\t\t\t\tres = selectFn( typeof a[j] === 'string' ? $.trim(a[j]) : a[j] );\n\t\n\t\t\t\tif ( res && res.length ) {\n\t\t\t\t\tout.push.apply( out, res );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// selector extensions\n\t\tvar ext = _ext.selector[ type ];\n\t\tif ( ext.length ) {\n\t\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\t\tout = ext[i]( settings, opts, out );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _selector_opts = function ( opts )\n\t{\n\t\tif ( ! opts ) {\n\t\t\topts = {};\n\t\t}\n\t\n\t\t// Backwards compatibility for 1.9- which used the terminology filter rather\n\t\t// than search\n\t\tif ( opts.filter && opts.search === undefined ) {\n\t\t\topts.search = opts.filter;\n\t\t}\n\t\n\t\treturn $.extend( {\n\t\t\tsearch: 'none',\n\t\t\torder: 'current',\n\t\t\tpage: 'all'\n\t\t}, opts );\n\t};\n\t\n\t\n\tvar _selector_first = function ( inst )\n\t{\n\t\t// Reduce the API instance to the first item found\n\t\tfor ( var i=0, ien=inst.length ; i<ien ; i++ ) {\n\t\t\tif ( inst[i].length > 0 ) {\n\t\t\t\t// Assign the first element to the first item in the instance\n\t\t\t\t// and truncate the instance and context\n\t\t\t\tinst[0] = inst[i];\n\t\t\t\tinst[0].length = 1;\n\t\t\t\tinst.length = 1;\n\t\t\t\tinst.context = [ inst.context[i] ];\n\t\n\t\t\t\treturn inst;\n\t\t\t}\n\t\t}\n\t\n\t\t// Not found - return an empty instance\n\t\tinst.length = 0;\n\t\treturn inst;\n\t};\n\t\n\t\n\tvar _selector_row_indexes = function ( settings, opts )\n\t{\n\t\tvar\n\t\t\ti, ien, tmp, a=[],\n\t\t\tdisplayFiltered = settings.aiDisplay,\n\t\t\tdisplayMaster = settings.aiDisplayMaster;\n\t\n\t\tvar\n\t\t\tsearch = opts.search,  // none, applied, removed\n\t\t\torder  = opts.order,   // applied, current, index (original - compatibility with 1.9)\n\t\t\tpage   = opts.page;    // all, current\n\t\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t// In server-side processing mode, most options are irrelevant since\n\t\t\t// rows not shown don't exist and the index order is the applied order\n\t\t\t// Removed is a special case - for consistency just return an empty\n\t\t\t// array\n\t\t\treturn search === 'removed' ?\n\t\t\t\t[] :\n\t\t\t\t_range( 0, displayMaster.length );\n\t\t}\n\t\telse if ( page == 'current' ) {\n\t\t\t// Current page implies that order=current and fitler=applied, since it is\n\t\t\t// fairly senseless otherwise, regardless of what order and search actually\n\t\t\t// are\n\t\t\tfor ( i=settings._iDisplayStart, ien=settings.fnDisplayEnd() ; i<ien ; i++ ) {\n\t\t\t\ta.push( displayFiltered[i] );\n\t\t\t}\n\t\t}\n\t\telse if ( order == 'current' || order == 'applied' ) {\n\t\t\ta = search == 'none' ?\n\t\t\t\tdisplayMaster.slice() :                      // no search\n\t\t\t\tsearch == 'applied' ?\n\t\t\t\t\tdisplayFiltered.slice() :                // applied search\n\t\t\t\t\t$.map( displayMaster, function (el, i) { // removed search\n\t\t\t\t\t\treturn $.inArray( el, displayFiltered ) === -1 ? el : null;\n\t\t\t\t\t} );\n\t\t}\n\t\telse if ( order == 'index' || order == 'original' ) {\n\t\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\t\tif ( search == 'none' ) {\n\t\t\t\t\ta.push( i );\n\t\t\t\t}\n\t\t\t\telse { // applied | removed\n\t\t\t\t\ttmp = $.inArray( i, displayFiltered );\n\t\n\t\t\t\t\tif ((tmp === -1 && search == 'removed') ||\n\t\t\t\t\t\t(tmp >= 0   && search == 'applied') )\n\t\t\t\t\t{\n\t\t\t\t\t\ta.push( i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn a;\n\t};\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Rows\n\t *\n\t * {}          - no selector - use all available rows\n\t * {integer}   - row aoData index\n\t * {node}      - TR node\n\t * {string}    - jQuery selector to apply to the TR elements\n\t * {array}     - jQuery array of nodes, or simply an array of TR nodes\n\t *\n\t */\n\t\n\t\n\tvar __row_selector = function ( settings, selector, opts )\n\t{\n\t\tvar run = function ( sel ) {\n\t\t\tvar selInt = _intVal( sel );\n\t\t\tvar i, ien;\n\t\n\t\t\t// Short cut - selector is a number and no options provided (default is\n\t\t\t// all records, so no need to check if the index is in there, since it\n\t\t\t// must be - dev error if the index doesn't exist).\n\t\t\tif ( selInt !== null && ! opts ) {\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\n\t\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\n\t\t\tif ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {\n\t\t\t\t// Selector - integer\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\t\telse if ( ! sel ) {\n\t\t\t\t// Selector - none\n\t\t\t\treturn rows;\n\t\t\t}\n\t\n\t\t\t// Selector - function\n\t\t\tif ( typeof sel === 'function' ) {\n\t\t\t\treturn $.map( rows, function (idx) {\n\t\t\t\t\tvar row = settings.aoData[ idx ];\n\t\t\t\t\treturn sel( idx, row._aData, row.nTr ) ? idx : null;\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t// Get nodes in the order from the `rows` array with null values removed\n\t\t\tvar nodes = _removeEmpty(\n\t\t\t\t_pluck_order( settings.aoData, rows, 'nTr' )\n\t\t\t);\n\t\n\t\t\t// Selector - node\n\t\t\tif ( sel.nodeName ) {\n\t\t\t\tif ( $.inArray( sel, nodes ) !== -1 ) {\n\t\t\t\t\treturn [ sel._DT_RowIndex ]; // sel is a TR node that is in the table\n\t\t\t\t\t                             // and DataTables adds a prop for fast lookup\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Selector - jQuery selector string, array of nodes or jQuery object/\n\t\t\t// As jQuery's .filter() allows jQuery objects to be passed in filter,\n\t\t\t// it also allows arrays, so this will cope with all three options\n\t\t\treturn $(nodes)\n\t\t\t\t.filter( sel )\n\t\t\t\t.map( function () {\n\t\t\t\t\treturn this._DT_RowIndex;\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\t};\n\t\n\t\treturn _selector_run( 'row', selector, run, settings, opts );\n\t};\n\t\n\t\n\t_api_register( 'rows()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\t\n\t\topts = _selector_opts( opts );\n\t\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __row_selector( settings, selector, opts );\n\t\t}, 1 );\n\t\n\t\t// Want argument shifting here and in __row_selector?\n\t\tinst.selector.rows = selector;\n\t\tinst.selector.opts = opts;\n\t\n\t\treturn inst;\n\t} );\n\t\n\t_api_register( 'rows().nodes()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn settings.aoData[ row ].nTr || undefined;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'rows().data()', function () {\n\t\treturn this.iterator( true, 'rows', function ( settings, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, '_aData' );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\tvar r = settings.aoData[ row ];\n\t\t\treturn type === 'search' ? r._aFilterData : r._aSortData;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\t_fnInvalidate( settings, row, src );\n\t\t} );\n\t} );\n\t\n\t_api_registerPlural( 'rows().indexes()', 'row().index()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn row;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().remove()', 'row().remove()', function () {\n\t\tvar that = this;\n\t\n\t\treturn this.iterator( 'row', function ( settings, row, thatIdx ) {\n\t\t\tvar data = settings.aoData;\n\t\n\t\t\tdata.splice( row, 1 );\n\t\n\t\t\t// Update the _DT_RowIndex parameter on all rows in the table\n\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\tif ( data[i].nTr !== null ) {\n\t\t\t\t\tdata[i].nTr._DT_RowIndex = i;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Remove the target row from the search array\n\t\t\tvar displayIndex = $.inArray( row, settings.aiDisplay );\n\t\n\t\t\t// Delete from the display arrays\n\t\t\t_fnDeleteIndex( settings.aiDisplayMaster, row );\n\t\t\t_fnDeleteIndex( settings.aiDisplay, row );\n\t\t\t_fnDeleteIndex( that[ thatIdx ], row, false ); // maintain local indexes\n\t\n\t\t\t// Check for an 'overflow' they case for displaying the table\n\t\t\t_fnLengthOverflow( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'rows.add()', function ( rows ) {\n\t\tvar newRows = this.iterator( 'table', function ( settings ) {\n\t\t\t\tvar row, i, ien;\n\t\t\t\tvar out = [];\n\t\n\t\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\t\n\t\t\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\t\t\tout.push( _fnAddTr( settings, row )[0] );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tout.push( _fnAddData( settings, row ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn out;\n\t\t\t}, 1 );\n\t\n\t\t// Return an Api.rows() extended instance, so rows().nodes() etc can be used\n\t\tvar modRows = this.rows( -1 );\n\t\tmodRows.pop();\n\t\tmodRows.push.apply( modRows, newRows.toArray() );\n\t\n\t\treturn modRows;\n\t} );\n\t\n\t\n\t\n\t\n\t\n\t/**\n\t *\n\t */\n\t_api_register( 'row()', function ( selector, opts ) {\n\t\treturn _selector_first( this.rows( selector, opts ) );\n\t} );\n\t\n\t\n\t_api_register( 'row().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && this.length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._aData :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// Set\n\t\tctx[0].aoData[ this[0] ]._aData = data;\n\t\n\t\t// Automatically invalidate\n\t\t_fnInvalidate( ctx[0], this[0], 'data' );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( 'row().node()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\treturn ctx.length && this.length ?\n\t\t\tctx[0].aoData[ this[0] ].nTr || null :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'row.add()', function ( row ) {\n\t\t// Allow a jQuery object to be passed in - only a single row is added from\n\t\t// it though - the first element in the set\n\t\tif ( row instanceof $ && row.length ) {\n\t\t\trow = row[0];\n\t\t}\n\t\n\t\tvar rows = this.iterator( 'table', function ( settings ) {\n\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\treturn _fnAddTr( settings, row )[0];\n\t\t\t}\n\t\t\treturn _fnAddData( settings, row );\n\t\t} );\n\t\n\t\t// Return an Api.rows() extended instance, with the newly added row selected\n\t\treturn this.row( rows[0] );\n\t} );\n\t\n\t\n\t\n\tvar __details_add = function ( ctx, row, data, klass )\n\t{\n\t\t// Convert to array of TR elements\n\t\tvar rows = [];\n\t\tvar addRow = function ( r, k ) {\n\t\t\t// Recursion to allow for arrays of jQuery objects\n\t\t\tif ( $.isArray( r ) || r instanceof $ ) {\n\t\t\t\tfor ( var i=0, ien=r.length ; i<ien ; i++ ) {\n\t\t\t\t\taddRow( r[i], k );\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If we get a TR element, then just add it directly - up to the dev\n\t\t\t// to add the correct number of columns etc\n\t\t\tif ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {\n\t\t\t\trows.push( r );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Otherwise create a row with a wrapper\n\t\t\t\tvar created = $('<tr><td/></tr>').addClass( k );\n\t\t\t\t$('td', created)\n\t\t\t\t\t.addClass( k )\n\t\t\t\t\t.html( r )\n\t\t\t\t\t[0].colSpan = _fnVisbleColumns( ctx );\n\t\n\t\t\t\trows.push( created[0] );\n\t\t\t}\n\t\t};\n\t\n\t\taddRow( data, klass );\n\t\n\t\tif ( row._details ) {\n\t\t\trow._details.remove();\n\t\t}\n\t\n\t\trow._details = $(rows);\n\t\n\t\t// If the children were already shown, that state should be retained\n\t\tif ( row._detailsShow ) {\n\t\t\trow._details.insertAfter( row.nTr );\n\t\t}\n\t};\n\t\n\t\n\tvar __details_remove = function ( api, idx )\n\t{\n\t\tvar ctx = api.context;\n\t\n\t\tif ( ctx.length ) {\n\t\t\tvar row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];\n\t\n\t\t\tif ( row._details ) {\n\t\t\t\trow._details.remove();\n\t\n\t\t\t\trow._detailsShow = undefined;\n\t\t\t\trow._details = undefined;\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\tvar __details_display = function ( api, show ) {\n\t\tvar ctx = api.context;\n\t\n\t\tif ( ctx.length && api.length ) {\n\t\t\tvar row = ctx[0].aoData[ api[0] ];\n\t\n\t\t\tif ( row._details ) {\n\t\t\t\trow._detailsShow = show;\n\t\n\t\t\t\tif ( show ) {\n\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trow._details.detach();\n\t\t\t\t}\n\t\n\t\t\t\t__details_events( ctx[0] );\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\tvar __details_events = function ( settings )\n\t{\n\t\tvar api = new _Api( settings );\n\t\tvar namespace = '.dt.DT_details';\n\t\tvar drawEvent = 'draw'+namespace;\n\t\tvar colvisEvent = 'column-visibility'+namespace;\n\t\tvar destroyEvent = 'destroy'+namespace;\n\t\tvar data = settings.aoData;\n\t\n\t\tapi.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );\n\t\n\t\tif ( _pluck( data, '_details' ).length > 0 ) {\n\t\t\t// On each draw, insert the required elements into the document\n\t\t\tapi.on( drawEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tapi.rows( {page:'current'} ).eq(0).each( function (idx) {\n\t\t\t\t\t// Internal data grab\n\t\t\t\t\tvar row = data[ idx ];\n\t\n\t\t\t\t\tif ( row._detailsShow ) {\n\t\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\n\t\t\t// Column visibility change - update the colspan\n\t\t\tapi.on( colvisEvent, function ( e, ctx, idx, vis ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t// Update the colspan for the details rows (note, only if it already has\n\t\t\t\t// a colspan)\n\t\t\t\tvar row, visible = _fnVisbleColumns( ctx );\n\t\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = data[i];\n\t\n\t\t\t\t\tif ( row._details ) {\n\t\t\t\t\t\trow._details.children('td[colspan]').attr('colspan', visible );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\t// Table destroyed - nuke any child rows\n\t\t\tapi.on( destroyEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( data[i]._details ) {\n\t\t\t\t\t\t__details_remove( api, i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t};\n\t\n\t// Strings for the method names to help minification\n\tvar _emp = '';\n\tvar _child_obj = _emp+'row().child';\n\tvar _child_mth = _child_obj+'()';\n\t\n\t// data can be:\n\t//  tr\n\t//  string\n\t//  jQuery or array of any of the above\n\t_api_register( _child_mth, function ( data, klass ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length && this.length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._details :\n\t\t\t\tundefined;\n\t\t}\n\t\telse if ( data === true ) {\n\t\t\t// show\n\t\t\tthis.child.show();\n\t\t}\n\t\telse if ( data === false ) {\n\t\t\t// remove\n\t\t\t__details_remove( this );\n\t\t}\n\t\telse if ( ctx.length && this.length ) {\n\t\t\t// set\n\t\t\t__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );\n\t\t}\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.show()',\n\t\t_child_mth+'.show()' // only when `child()` was called with parameters (without\n\t], function ( show ) {   // it returns an object and this method is not executed)\n\t\t__details_display( this, true );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.hide()',\n\t\t_child_mth+'.hide()' // only when `child()` was called with parameters (without\n\t], function () {         // it returns an object and this method is not executed)\n\t\t__details_display( this, false );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.remove()',\n\t\t_child_mth+'.remove()' // only when `child()` was called with parameters (without\n\t], function () {           // it returns an object and this method is not executed)\n\t\t__details_remove( this );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( _child_obj+'.isShown()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length && this.length ) {\n\t\t\t// _detailsShown as false or undefined will fall through to return false\n\t\t\treturn ctx[0].aoData[ this[0] ]._detailsShow || false;\n\t\t}\n\t\treturn false;\n\t} );\n\t\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Columns\n\t *\n\t * {integer}           - column index (>=0 count from left, <0 count from right)\n\t * \"{integer}:visIdx\"  - visible column index (i.e. translate to column index)  (>=0 count from left, <0 count from right)\n\t * \"{integer}:visible\" - alias for {integer}:visIdx  (>=0 count from left, <0 count from right)\n\t * \"{string}:name\"     - column name\n\t * \"{string}\"          - jQuery selector on column header nodes\n\t *\n\t */\n\t\n\t// can be an array of these items, comma separated list, or an array of comma\n\t// separated lists\n\t\n\tvar __re_column_selector = /^(.+):(name|visIdx|visible)$/;\n\t\n\t\n\t// r1 and r2 are redundant - but it means that the parameters match for the\n\t// iterator callback in columns().data()\n\tvar __columnData = function ( settings, column, r1, r2, rows ) {\n\t\tvar a = [];\n\t\tfor ( var row=0, ien=rows.length ; row<ien ; row++ ) {\n\t\t\ta.push( _fnGetCellData( settings, rows[row], column ) );\n\t\t}\n\t\treturn a;\n\t};\n\t\n\t\n\tvar __column_selector = function ( settings, selector, opts )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tnames = _pluck( columns, 'sName' ),\n\t\t\tnodes = _pluck( columns, 'nTh' );\n\t\n\t\tvar run = function ( s ) {\n\t\t\tvar selInt = _intVal( s );\n\t\n\t\t\t// Selector - all\n\t\t\tif ( s === '' ) {\n\t\t\t\treturn _range( columns.length );\n\t\t\t}\n\t\t\t\n\t\t\t// Selector - index\n\t\t\tif ( selInt !== null ) {\n\t\t\t\treturn [ selInt >= 0 ?\n\t\t\t\t\tselInt : // Count from left\n\t\t\t\t\tcolumns.length + selInt // Count from right (+ because its a negative value)\n\t\t\t\t];\n\t\t\t}\n\t\t\t\n\t\t\t// Selector = function\n\t\t\tif ( typeof s === 'function' ) {\n\t\t\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\n\t\t\t\treturn $.map( columns, function (col, idx) {\n\t\t\t\t\treturn s(\n\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t__columnData( settings, idx, 0, 0, rows ),\n\t\t\t\t\t\t\tnodes[ idx ]\n\t\t\t\t\t\t) ? idx : null;\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t// jQuery or string selector\n\t\t\tvar match = typeof s === 'string' ?\n\t\t\t\ts.match( __re_column_selector ) :\n\t\t\t\t'';\n\t\n\t\t\tif ( match ) {\n\t\t\t\tswitch( match[2] ) {\n\t\t\t\t\tcase 'visIdx':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\t\tvar idx = parseInt( match[1], 10 );\n\t\t\t\t\t\t// Visible index given, convert to column index\n\t\t\t\t\t\tif ( idx < 0 ) {\n\t\t\t\t\t\t\t// Counting from the right\n\t\t\t\t\t\t\tvar visColumns = $.map( columns, function (col,i) {\n\t\t\t\t\t\t\t\treturn col.bVisible ? i : null;\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn [ visColumns[ visColumns.length + idx ] ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Counting from the left\n\t\t\t\t\t\treturn [ _fnVisibleToColumnIndex( settings, idx ) ];\n\t\n\t\t\t\t\tcase 'name':\n\t\t\t\t\t\t// match by name. `names` is column index complete and in order\n\t\t\t\t\t\treturn $.map( names, function (name, i) {\n\t\t\t\t\t\t\treturn name === match[1] ? i : null;\n\t\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// jQuery selector on the TH elements for the columns\n\t\t\t\treturn $( nodes )\n\t\t\t\t\t.filter( s )\n\t\t\t\t\t.map( function () {\n\t\t\t\t\t\treturn $.inArray( this, nodes ); // `nodes` is column index complete and in order\n\t\t\t\t\t} )\n\t\t\t\t\t.toArray();\n\t\t\t}\n\t\t};\n\t\n\t\treturn _selector_run( 'column', selector, run, settings, opts );\n\t};\n\t\n\t\n\tvar __setColumnVis = function ( settings, column, vis, recalc ) {\n\t\tvar\n\t\t\tcols = settings.aoColumns,\n\t\t\tcol  = cols[ column ],\n\t\t\tdata = settings.aoData,\n\t\t\trow, cells, i, ien, tr;\n\t\n\t\t// Get\n\t\tif ( vis === undefined ) {\n\t\t\treturn col.bVisible;\n\t\t}\n\t\n\t\t// Set\n\t\t// No change\n\t\tif ( col.bVisible === vis ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( vis ) {\n\t\t\t// Insert column\n\t\t\t// Need to decide if we should use appendChild or insertBefore\n\t\t\tvar insertBefore = $.inArray( true, _pluck(cols, 'bVisible'), column+1 );\n\t\n\t\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\ttr = data[i].nTr;\n\t\t\t\tcells = data[i].anCells;\n\t\n\t\t\t\tif ( tr ) {\n\t\t\t\t\t// insertBefore can act like appendChild if 2nd arg is null\n\t\t\t\t\ttr.insertBefore( cells[ column ], cells[ insertBefore ] || null );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Remove column\n\t\t\t$( _pluck( settings.aoData, 'anCells', column ) ).detach();\n\t\t}\n\t\n\t\t// Common actions\n\t\tcol.bVisible = vis;\n\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\n\t\tif ( recalc === undefined || recalc ) {\n\t\t\t// Automatically adjust column sizing\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\n\t\t\t// Realign columns for scrolling\n\t\t\tif ( settings.oScroll.sX || settings.oScroll.sY ) {\n\t\t\t\t_fnScrollDraw( settings );\n\t\t\t}\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis] );\n\t\n\t\t_fnSaveState( settings );\n\t};\n\t\n\t\n\t_api_register( 'columns()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\t\n\t\topts = _selector_opts( opts );\n\t\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __column_selector( settings, selector, opts );\n\t\t}, 1 );\n\t\n\t\t// Want argument shifting here and in _row_selector?\n\t\tinst.selector.cols = selector;\n\t\tinst.selector.opts = opts;\n\t\n\t\treturn inst;\n\t} );\n\t\n\t_api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].nTh;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].nTf;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().data()', 'column().data()', function () {\n\t\treturn this.iterator( 'column-rows', __columnData, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].mData;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows,\n\t\t\t\ttype === 'search' ? '_aFilterData' : '_aSortData', column\n\t\t\t);\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, 'anCells', column ) ;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\tif ( vis === undefined ) {\n\t\t\t\treturn settings.aoColumns[ column ].bVisible;\n\t\t\t} // else\n\t\t\t__setColumnVis( settings, column, vis, calc );\n\t\t} );\n\t} );\n\t\n\t_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn type === 'visible' ?\n\t\t\t\t_fnColumnIndexToVisible( settings, column ) :\n\t\t\t\tcolumn;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'columns.adjust()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'column.index()', function ( type, idx ) {\n\t\tif ( this.context.length !== 0 ) {\n\t\t\tvar ctx = this.context[0];\n\t\n\t\t\tif ( type === 'fromVisible' || type === 'toData' ) {\n\t\t\t\treturn _fnVisibleToColumnIndex( ctx, idx );\n\t\t\t}\n\t\t\telse if ( type === 'fromData' || type === 'toVisible' ) {\n\t\t\t\treturn _fnColumnIndexToVisible( ctx, idx );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t_api_register( 'column()', function ( selector, opts ) {\n\t\treturn _selector_first( this.columns( selector, opts ) );\n\t} );\n\t\n\t\n\t\n\t\n\tvar __cell_selector = function ( settings, selector, opts )\n\t{\n\t\tvar data = settings.aoData;\n\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\tvar cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );\n\t\tvar allCells = $( [].concat.apply([], cells) );\n\t\tvar row;\n\t\tvar columns = settings.aoColumns.length;\n\t\tvar a, i, ien, j, o, host;\n\t\n\t\tvar run = function ( s ) {\n\t\t\tvar fnSelector = typeof s === 'function';\n\t\n\t\t\tif ( s === null || s === undefined || fnSelector ) {\n\t\t\t\t// All cells and function selectors\n\t\t\t\ta = [];\n\t\n\t\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\t\n\t\t\t\t\tfor ( j=0 ; j<columns ; j++ ) {\n\t\t\t\t\t\to = {\n\t\t\t\t\t\t\trow: row,\n\t\t\t\t\t\t\tcolumn: j\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tif ( fnSelector ) {\n\t\t\t\t\t\t\t// Selector - function\n\t\t\t\t\t\t\thost = settings.aoData[ row ];\n\t\n\t\t\t\t\t\t\tif ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {\n\t\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Selector - all\n\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn a;\n\t\t\t}\n\t\t\t\n\t\t\t// Selector - index\n\t\t\tif ( $.isPlainObject( s ) ) {\n\t\t\t\treturn [s];\n\t\t\t}\n\t\n\t\t\t// Selector - jQuery filtered cells\n\t\t\treturn allCells\n\t\t\t\t.filter( s )\n\t\t\t\t.map( function (i, el) {\n\t\t\t\t\trow = el.parentNode._DT_RowIndex;\n\t\n\t\t\t\t\treturn {\n\t\t\t\t\t\trow: row,\n\t\t\t\t\t\tcolumn: $.inArray( el, data[ row ].anCells )\n\t\t\t\t\t};\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\t};\n\t\n\t\treturn _selector_run( 'cell', selector, run, settings, opts );\n\t};\n\t\n\t\n\t\n\t\n\t_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {\n\t\t// Argument shifting\n\t\tif ( $.isPlainObject( rowSelector ) ) {\n\t\t\t// Indexes\n\t\t\tif ( rowSelector.row === undefined ) {\n\t\t\t\t// Selector options in first parameter\n\t\t\t\topts = rowSelector;\n\t\t\t\trowSelector = null;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Cell index objects in first parameter\n\t\t\t\topts = columnSelector;\n\t\t\t\tcolumnSelector = null;\n\t\t\t}\n\t\t}\n\t\tif ( $.isPlainObject( columnSelector ) ) {\n\t\t\topts = columnSelector;\n\t\t\tcolumnSelector = null;\n\t\t}\n\t\n\t\t// Cell selector\n\t\tif ( columnSelector === null || columnSelector === undefined ) {\n\t\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t\treturn __cell_selector( settings, rowSelector, _selector_opts( opts ) );\n\t\t\t} );\n\t\t}\n\t\n\t\t// Row + column selector\n\t\tvar columns = this.columns( columnSelector, opts );\n\t\tvar rows = this.rows( rowSelector, opts );\n\t\tvar a, i, ien, j, jen;\n\t\n\t\tvar cells = this.iterator( 'table', function ( settings, idx ) {\n\t\t\ta = [];\n\t\n\t\t\tfor ( i=0, ien=rows[idx].length ; i<ien ; i++ ) {\n\t\t\t\tfor ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {\n\t\t\t\t\ta.push( {\n\t\t\t\t\t\trow:    rows[idx][i],\n\t\t\t\t\t\tcolumn: columns[idx][j]\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn a;\n\t\t}, 1 );\n\t\n\t\t$.extend( cells.selector, {\n\t\t\tcols: columnSelector,\n\t\t\trows: rowSelector,\n\t\t\topts: opts\n\t\t} );\n\t\n\t\treturn cells;\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\tvar cells = settings.aoData[ row ].anCells;\n\t\t\treturn cells ?\n\t\t\t\tcells[ column ] :\n\t\t\t\tundefined;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_register( 'cells().data()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column );\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {\n\t\ttype = type === 'search' ? '_aFilterData' : '_aSortData';\n\t\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn settings.aoData[ row ][ type ][ column ];\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column, type );\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn {\n\t\t\t\trow: row,\n\t\t\t\tcolumn: column,\n\t\t\t\tcolumnVisible: _fnColumnIndexToVisible( settings, column )\n\t\t\t};\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\t_fnInvalidate( settings, row, src, column );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {\n\t\treturn _selector_first( this.cells( rowSelector, columnSelector, opts ) );\n\t} );\n\t\n\t\n\t_api_register( 'cell().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\tvar cell = this[0];\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && cell.length ?\n\t\t\t\t_fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// Set\n\t\t_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );\n\t\t_fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Get current ordering (sorting) that has been applied to the table.\n\t *\n\t * @returns {array} 2D array containing the sorting information for the first\n\t *   table in the current context. Each element in the parent array represents\n\t *   a column being sorted upon (i.e. multi-sorting with two columns would have\n\t *   2 inner arrays). The inner arrays may have 2 or 3 elements. The first is\n\t *   the column index that the sorting condition applies to, the second is the\n\t *   direction of the sort (`desc` or `asc`) and, optionally, the third is the\n\t *   index of the sorting order from the `column.sorting` initialisation array.\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {integer} order Column index to sort upon.\n\t * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 1D array of sorting information to be applied.\n\t * @param {array} [...] Optional additional sorting conditions\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 2D array of sorting information to be applied.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order()', function ( order, dir ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( order === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].aaSorting :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// set\n\t\tif ( typeof order === 'number' ) {\n\t\t\t// Simple column / direction passed in\n\t\t\torder = [ [ order, dir ] ];\n\t\t}\n\t\telse if ( ! $.isArray( order[0] ) ) {\n\t\t\t// Arguments passed in (list of 1D arrays)\n\t\t\torder = Array.prototype.slice.call( arguments );\n\t\t}\n\t\t// otherwise a 2D array was passed in\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tsettings.aaSorting = order.slice();\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Attach a sort listener to an element for a given column\n\t *\n\t * @param {node|jQuery|string} node Identifier for the element(s) to attach the\n\t *   listener to. This can take the form of a single DOM node, a jQuery\n\t *   collection of nodes or a jQuery selector which will identify the node(s).\n\t * @param {integer} column the column that a click on this node will sort on\n\t * @param {function} [callback] callback function when sort is run\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order.listener()', function ( node, column, callback ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSortAttachListener( settings, node, column, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t// Order by the selected column(s)\n\t_api_register( [\n\t\t'columns().order()',\n\t\t'column().order()'\n\t], function ( dir ) {\n\t\tvar that = this;\n\t\n\t\treturn this.iterator( 'table', function ( settings, i ) {\n\t\t\tvar sort = [];\n\t\n\t\t\t$.each( that[i], function (j, col) {\n\t\t\t\tsort.push( [ col, dir ] );\n\t\t\t} );\n\t\n\t\t\tsettings.aaSorting = sort;\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t_api_register( 'search()', function ( input, regex, smart, caseInsen ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( input === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].oPreviousSearch.sSearch :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t_fnFilterComplete( settings, $.extend( {}, settings.oPreviousSearch, {\n\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t} ), 1 );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_registerPlural(\n\t\t'columns().search()',\n\t\t'column().search()',\n\t\tfunction ( input, regex, smart, caseInsen ) {\n\t\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\t\tvar preSearch = settings.aoPreSearchCols;\n\t\n\t\t\t\tif ( input === undefined ) {\n\t\t\t\t\t// get\n\t\t\t\t\treturn preSearch[ column ].sSearch;\n\t\t\t\t}\n\t\n\t\t\t\t// set\n\t\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t$.extend( preSearch[ column ], {\n\t\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t\t} );\n\t\n\t\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch, 1 );\n\t\t\t} );\n\t\t}\n\t);\n\t\n\t/*\n\t * State API methods\n\t */\n\t\n\t_api_register( 'state()', function () {\n\t\treturn this.context.length ?\n\t\t\tthis.context[0].oSavedState :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'state.clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t// Save an empty object\n\t\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, {} );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'state.loaded()', function () {\n\t\treturn this.context.length ?\n\t\t\tthis.context[0].oLoadedState :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'state.save()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSaveState( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Provide a common method for plug-ins to check the version of DataTables being\n\t * used, in order to ensure compatibility.\n\t *\n\t *  @param {string} version Version string to check for, in the format \"X.Y.Z\".\n\t *    Note that the formats \"X\" and \"X.Y\" are also acceptable.\n\t *  @returns {boolean} true if this version of DataTables is greater or equal to\n\t *    the required version, or false if this version of DataTales is not\n\t *    suitable\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    alert( $.fn.dataTable.versionCheck( '1.9.0' ) );\n\t */\n\tDataTable.versionCheck = DataTable.fnVersionCheck = function( version )\n\t{\n\t\tvar aThis = DataTable.version.split('.');\n\t\tvar aThat = version.split('.');\n\t\tvar iThis, iThat;\n\t\n\t\tfor ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {\n\t\t\tiThis = parseInt( aThis[i], 10 ) || 0;\n\t\t\tiThat = parseInt( aThat[i], 10 ) || 0;\n\t\n\t\t\t// Parts are the same, keep comparing\n\t\t\tif (iThis === iThat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// Parts are different, return immediately\n\t\t\treturn iThis > iThat;\n\t\t}\n\t\n\t\treturn true;\n\t};\n\t\n\t\n\t/**\n\t * Check if a `<table>` node is a DataTable table already or not.\n\t *\n\t *  @param {node|jquery|string} table Table node, jQuery object or jQuery\n\t *      selector for the table to test. Note that if more than more than one\n\t *      table is passed on, only the first will be checked\n\t *  @returns {boolean} true the table given is a DataTable, or false otherwise\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {\n\t *      $('#example').dataTable();\n\t *    }\n\t */\n\tDataTable.isDataTable = DataTable.fnIsDataTable = function ( table )\n\t{\n\t\tvar t = $(table).get(0);\n\t\tvar is = false;\n\t\n\t\t$.each( DataTable.settings, function (i, o) {\n\t\t\tvar head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;\n\t\t\tvar foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;\n\t\n\t\t\tif ( o.nTable === t || head === t || foot === t ) {\n\t\t\t\tis = true;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn is;\n\t};\n\t\n\t\n\t/**\n\t * Get all DataTable tables that have been initialised - optionally you can\n\t * select to get only currently visible tables.\n\t *\n\t *  @param {boolean} [visible=false] Flag to indicate if you want all (default)\n\t *    or visible tables only.\n\t *  @returns {array} Array of `table` nodes (not DataTable instances) which are\n\t *    DataTables\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    $.each( $.fn.dataTable.tables(true), function () {\n\t *      $(table).DataTable().columns.adjust();\n\t *    } );\n\t */\n\tDataTable.tables = DataTable.fnTables = function ( visible )\n\t{\n\t\treturn $.map( DataTable.settings, function (o) {\n\t\t\tif ( !visible || (visible && $(o.nTable).is(':visible')) ) {\n\t\t\t\treturn o.nTable;\n\t\t\t}\n\t\t} );\n\t};\n\t\n\t\n\t/**\n\t * DataTables utility methods\n\t * \n\t * This namespace provides helper methods that DataTables uses internally to\n\t * create a DataTable, but which are not exclusively used only for DataTables.\n\t * These methods can be used by extension authors to save the duplication of\n\t * code.\n\t *\n\t *  @namespace\n\t */\n\tDataTable.util = {\n\t\t/**\n\t\t * Throttle the calls to a function. Arguments and context are maintained\n\t\t * for the throttled function.\n\t\t *\n\t\t * @param {function} fn Function to be called\n\t\t * @param {integer} freq Call frequency in mS\n\t\t * @return {function} Wrapped function\n\t\t */\n\t\tthrottle: _fnThrottle,\n\t\n\t\n\t\t/**\n\t\t * Escape a string such that it can be used in a regular expression\n\t\t *\n\t\t *  @param {string} sVal string to escape\n\t\t *  @returns {string} escaped string\n\t\t */\n\t\tescapeRegex: _fnEscapeRegex\n\t};\n\t\n\t\n\t/**\n\t * Convert from camel case parameters to Hungarian notation. This is made public\n\t * for the extensions to provide the same ability as DataTables core to accept\n\t * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase\n\t * parameters.\n\t *\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t */\n\tDataTable.camelToHungarian = _fnCamelToHungarian;\n\t\n\t\n\t\n\t/**\n\t *\n\t */\n\t_api_register( '$()', function ( selector, opts ) {\n\t\tvar\n\t\t\trows   = this.rows( opts ).nodes(), // Get all rows\n\t\t\tjqRows = $(rows);\n\t\n\t\treturn $( [].concat(\n\t\t\tjqRows.filter( selector ).toArray(),\n\t\t\tjqRows.find( selector ).toArray()\n\t\t) );\n\t} );\n\t\n\t\n\t// jQuery functions to operate on the tables\n\t$.each( [ 'on', 'one', 'off' ], function (i, key) {\n\t\t_api_register( key+'()', function ( /* event, handler */ ) {\n\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\n\t\t\t// Add the `dt` namespace automatically if it isn't already present\n\t\t\tif ( ! args[0].match(/\\.dt\\b/) ) {\n\t\t\t\targs[0] += '.dt';\n\t\t\t}\n\t\n\t\t\tvar inst = $( this.tables().nodes() );\n\t\t\tinst[key].apply( inst, args );\n\t\t\treturn this;\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnClearTable( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'settings()', function () {\n\t\treturn new _Api( this.context, this.context );\n\t} );\n\t\n\t\n\t_api_register( 'init()', function () {\n\t\tvar ctx = this.context;\n\t\treturn ctx.length ? ctx[0].oInit : null;\n\t} );\n\t\n\t\n\t_api_register( 'data()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\treturn _pluck( settings.aoData, '_aData' );\n\t\t} ).flatten();\n\t} );\n\t\n\t\n\t_api_register( 'destroy()', function ( remove ) {\n\t\tremove = remove || false;\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tvar orig      = settings.nTableWrapper.parentNode;\n\t\t\tvar classes   = settings.oClasses;\n\t\t\tvar table     = settings.nTable;\n\t\t\tvar tbody     = settings.nTBody;\n\t\t\tvar thead     = settings.nTHead;\n\t\t\tvar tfoot     = settings.nTFoot;\n\t\t\tvar jqTable   = $(table);\n\t\t\tvar jqTbody   = $(tbody);\n\t\t\tvar jqWrapper = $(settings.nTableWrapper);\n\t\t\tvar rows      = $.map( settings.aoData, function (r) { return r.nTr; } );\n\t\t\tvar i, ien;\n\t\n\t\t\t// Flag to note that the table is currently being destroyed - no action\n\t\t\t// should be taken\n\t\t\tsettings.bDestroying = true;\n\t\n\t\t\t// Fire off the destroy callbacks for plug-ins etc\n\t\t\t_fnCallbackFire( settings, \"aoDestroyCallback\", \"destroy\", [settings] );\n\t\n\t\t\t// If not being removed from the document, make all columns visible\n\t\t\tif ( ! remove ) {\n\t\t\t\tnew _Api( settings ).columns().visible( true );\n\t\t\t}\n\t\n\t\t\t// Blitz all `DT` namespaced events (these are internal events, the\n\t\t\t// lowercase, `dt` events are user subscribed and they are responsible\n\t\t\t// for removing them\n\t\t\tjqWrapper.unbind('.DT').find(':not(tbody *)').unbind('.DT');\n\t\t\t$(window).unbind('.DT-'+settings.sInstance);\n\t\n\t\t\t// When scrolling we had to break the table up - restore it\n\t\t\tif ( table != thead.parentNode ) {\n\t\t\t\tjqTable.children('thead').detach();\n\t\t\t\tjqTable.append( thead );\n\t\t\t}\n\t\n\t\t\tif ( tfoot && table != tfoot.parentNode ) {\n\t\t\t\tjqTable.children('tfoot').detach();\n\t\t\t\tjqTable.append( tfoot );\n\t\t\t}\n\t\n\t\t\t// Remove the DataTables generated nodes, events and classes\n\t\t\tjqTable.detach();\n\t\t\tjqWrapper.detach();\n\t\n\t\t\tsettings.aaSorting = [];\n\t\t\tsettings.aaSortingFixed = [];\n\t\t\t_fnSortingClasses( settings );\n\t\n\t\t\t$( rows ).removeClass( settings.asStripeClasses.join(' ') );\n\t\n\t\t\t$('th, td', thead).removeClass( classes.sSortable+' '+\n\t\t\t\tclasses.sSortableAsc+' '+classes.sSortableDesc+' '+classes.sSortableNone\n\t\t\t);\n\t\n\t\t\tif ( settings.bJUI ) {\n\t\t\t\t$('th span.'+classes.sSortIcon+ ', td span.'+classes.sSortIcon, thead).detach();\n\t\t\t\t$('th, td', thead).each( function () {\n\t\t\t\t\tvar wrapper = $('div.'+classes.sSortJUIWrapper, this);\n\t\t\t\t\t$(this).append( wrapper.contents() );\n\t\t\t\t\twrapper.detach();\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\tif ( ! remove && orig ) {\n\t\t\t\t// insertBefore acts like appendChild if !arg[1]\n\t\t\t\torig.insertBefore( table, settings.nTableReinsertBefore );\n\t\t\t}\n\t\n\t\t\t// Add the TR elements back into the table in their original order\n\t\t\tjqTbody.children().detach();\n\t\t\tjqTbody.append( rows );\n\t\n\t\t\t// Restore the width of the original table - was read from the style property,\n\t\t\t// so we can restore directly to that\n\t\t\tjqTable\n\t\t\t\t.css( 'width', settings.sDestroyWidth )\n\t\t\t\t.removeClass( classes.sTable );\n\t\n\t\t\t// If the were originally stripe classes - then we add them back here.\n\t\t\t// Note this is not fool proof (for example if not all rows had stripe\n\t\t\t// classes - but it's a good effort without getting carried away\n\t\t\tien = settings.asDestroyStripes.length;\n\t\n\t\t\tif ( ien ) {\n\t\t\t\tjqTbody.children().each( function (i) {\n\t\t\t\t\t$(this).addClass( settings.asDestroyStripes[i % ien] );\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t/* Remove the settings object from the settings array */\n\t\t\tvar idx = $.inArray( settings, DataTable.settings );\n\t\t\tif ( idx !== -1 ) {\n\t\t\t\tDataTable.settings.splice( idx, 1 );\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t\n\t// Add the `every()` method for rows, columns and cells in a compact form\n\t$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {\n\t\t_api_register( type+'s().every()', function ( fn ) {\n\t\t\treturn this.iterator( type, function ( settings, idx, idx2 ) {\n\t\t\t\t// idx2 is undefined for rows and columns.\n\t\t\t\tfn.call( new _Api( settings )[ type ]( idx, idx2 ) );\n\t\t\t} );\n\t\t} );\n\t} );\n\t\n\t\n\t// i18n method for extensions to be able to use the language object from the\n\t// DataTable\n\t_api_register( 'i18n()', function ( token, def, plural ) {\n\t\tvar ctx = this.context[0];\n\t\tvar resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );\n\t\n\t\tif ( resolved === undefined ) {\n\t\t\tresolved = def;\n\t\t}\n\t\n\t\tif ( plural !== undefined && $.isPlainObject( resolved ) ) {\n\t\t\tresolved = resolved[ plural ] !== undefined ?\n\t\t\t\tresolved[ plural ] :\n\t\t\t\tresolved._;\n\t\t}\n\t\n\t\treturn resolved.replace( '%d', plural ); // nb: plural might be undefined,\n\t} );\n\n\t/**\n\t * Version string for plug-ins to check compatibility. Allowed format is\n\t * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used\n\t * only for non-release builds. See http://semver.org/ for more information.\n\t *  @member\n\t *  @type string\n\t *  @default Version number\n\t */\n\tDataTable.version = \"1.10.7\";\n\n\t/**\n\t * Private data store, containing all of the settings objects that are\n\t * created for the tables on a given page.\n\t *\n\t * Note that the `DataTable.settings` object is aliased to\n\t * `jQuery.fn.dataTableExt` through which it may be accessed and\n\t * manipulated, or `jQuery.fn.dataTable.settings`.\n\t *  @member\n\t *  @type array\n\t *  @default []\n\t *  @private\n\t */\n\tDataTable.settings = [];\n\n\t/**\n\t * Object models container, for the various models that DataTables has\n\t * available to it. These models define the objects that are used to hold\n\t * the active state and configuration of the table.\n\t *  @namespace\n\t */\n\tDataTable.models = {};\n\t\n\t\n\t\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * search information for the global filter and individual column filters.\n\t *  @namespace\n\t */\n\tDataTable.models.oSearch = {\n\t\t/**\n\t\t * Flag to indicate if the filtering should be case insensitive or not\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bCaseInsensitive\": true,\n\t\n\t\t/**\n\t\t * Applied search term\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t */\n\t\t\"sSearch\": \"\",\n\t\n\t\t/**\n\t\t * Flag to indicate if the search term should be interpreted as a\n\t\t * regular expression (true) or not (false) and therefore and special\n\t\t * regex characters escaped.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bRegex\": false,\n\t\n\t\t/**\n\t\t * Flag to indicate if DataTables is to use its smart filtering or not.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bSmart\": true\n\t};\n\t\n\t\n\t\n\t\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * each individual row. This is the object format used for the settings\n\t * aoData array.\n\t *  @namespace\n\t */\n\tDataTable.models.oRow = {\n\t\t/**\n\t\t * TR element for the row\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTr\": null,\n\t\n\t\t/**\n\t\t * Array of TD elements for each row. This is null until the row has been\n\t\t * created.\n\t\t *  @type array nodes\n\t\t *  @default []\n\t\t */\n\t\t\"anCells\": null,\n\t\n\t\t/**\n\t\t * Data object from the original data source for the row. This is either\n\t\t * an array if using the traditional form of DataTables, or an object if\n\t\t * using mData options. The exact type will depend on the passed in\n\t\t * data from the data source, or will be an array if using DOM a data\n\t\t * source.\n\t\t *  @type array|object\n\t\t *  @default []\n\t\t */\n\t\t\"_aData\": [],\n\t\n\t\t/**\n\t\t * Sorting data cache - this array is ostensibly the same length as the\n\t\t * number of columns (although each index is generated only as it is\n\t\t * needed), and holds the data that is used for sorting each column in the\n\t\t * row. We do this cache generation at the start of the sort in order that\n\t\t * the formatting of the sort data need be done only once for each cell\n\t\t * per sort. This array should not be read from or written to by anything\n\t\t * other than the master sorting methods.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_aSortData\": null,\n\t\n\t\t/**\n\t\t * Per cell filtering data cache. As per the sort data cache, used to\n\t\t * increase the performance of the filtering in DataTables\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_aFilterData\": null,\n\t\n\t\t/**\n\t\t * Filtering data cache. This is the same as the cell filtering cache, but\n\t\t * in this case a string rather than an array. This is easily computed with\n\t\t * a join on `_aFilterData`, but is provided as a cache so the join isn't\n\t\t * needed on every search (memory traded for performance)\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_sFilterRow\": null,\n\t\n\t\t/**\n\t\t * Cache of the class name that DataTables has applied to the row, so we\n\t\t * can quickly look at this variable rather than needing to do a DOM check\n\t\t * on className for the nTr property.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *  @private\n\t\t */\n\t\t\"_sRowStripe\": \"\",\n\t\n\t\t/**\n\t\t * Denote if the original data source was from the DOM, or the data source\n\t\t * object. This is used for invalidating data, so DataTables can\n\t\t * automatically read data from the original source, unless uninstructed\n\t\t * otherwise.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"src\": null\n\t};\n\t\n\t\n\t/**\n\t * Template object for the column information object in DataTables. This object\n\t * is held in the settings aoColumns array and contains all the information that\n\t * DataTables needs about each individual column.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults.column}\n\t * but this one is the internal data store for DataTables's cache of columns.\n\t * It should NOT be manipulated outside of DataTables. Any configuration should\n\t * be done through the initialisation options.\n\t *  @namespace\n\t */\n\tDataTable.models.oColumn = {\n\t\t/**\n\t\t * Column index. This could be worked out on-the-fly with $.inArray, but it\n\t\t * is faster to just hold it as a variable\n\t\t *  @type integer\n\t\t *  @default null\n\t\t */\n\t\t\"idx\": null,\n\t\n\t\t/**\n\t\t * A list of the columns that sorting should occur on when this column\n\t\t * is sorted. That this property is an array allows multi-column sorting\n\t\t * to be defined for a column (for example first name / last name columns\n\t\t * would benefit from this). The values are integers pointing to the\n\t\t * columns to be sorted on (typically it will be a single integer pointing\n\t\t * at itself, but that doesn't need to be the case).\n\t\t *  @type array\n\t\t */\n\t\t\"aDataSort\": null,\n\t\n\t\t/**\n\t\t * Define the sorting directions that are applied to the column, in sequence\n\t\t * as the column is repeatedly sorted upon - i.e. the first value is used\n\t\t * as the sorting direction when the column if first sorted (clicked on).\n\t\t * Sort it again (click again) and it will move on to the next index.\n\t\t * Repeat until loop.\n\t\t *  @type array\n\t\t */\n\t\t\"asSorting\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is searchable, and thus should be included\n\t\t * in the filtering or not.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSearchable\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is sortable or not.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortable\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is currently visible in the table or not\n\t\t *  @type boolean\n\t\t */\n\t\t\"bVisible\": null,\n\t\n\t\t/**\n\t\t * Store for manual type assignment using the `column.type` option. This\n\t\t * is held in store so we can manipulate the column's `sType` property.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_sManualType\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if HTML5 data attributes should be used as the data\n\t\t * source for filtering or sorting. True is either are.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @private\n\t\t */\n\t\t\"_bAttrSrc\": false,\n\t\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t *  @type function\n\t\t *  @param {element} nTd The TD node that has been created\n\t\t *  @param {*} sData The Data for the cell\n\t\t *  @param {array|object} oData The data for the whole row\n\t\t *  @param {int} iRow The row index for the aoData data store\n\t\t *  @default null\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\t\n\t\t/**\n\t\t * Function to get data from a cell in a column. You should <b>never</b>\n\t\t * access data directly through _aData internally in DataTables - always use\n\t\t * the method attached to this property. It allows mData to function as\n\t\t * required. This function is automatically assigned by the column\n\t\t * initialisation method\n\t\t *  @type function\n\t\t *  @param {array|object} oData The data array/object for the array\n\t\t *    (i.e. aoData[]._aData)\n\t\t *  @param {string} sSpecific The specific data type you want to get -\n\t\t *    'display', 'type' 'filter' 'sort'\n\t\t *  @returns {*} The data for the cell from the given row's data\n\t\t *  @default null\n\t\t */\n\t\t\"fnGetData\": null,\n\t\n\t\t/**\n\t\t * Function to set data for a cell in the column. You should <b>never</b>\n\t\t * set the data directly to _aData internally in DataTables - always use\n\t\t * this method. It allows mData to function as required. This function\n\t\t * is automatically assigned by the column initialisation method\n\t\t *  @type function\n\t\t *  @param {array|object} oData The data array/object for the array\n\t\t *    (i.e. aoData[]._aData)\n\t\t *  @param {*} sValue Value to set\n\t\t *  @default null\n\t\t */\n\t\t\"fnSetData\": null,\n\t\n\t\t/**\n\t\t * Property to read the value for the cells in the column from the data\n\t\t * source array / object. If null, then the default content is used, if a\n\t\t * function is given then the return from the function is used.\n\t\t *  @type function|int|string|null\n\t\t *  @default null\n\t\t */\n\t\t\"mData\": null,\n\t\n\t\t/**\n\t\t * Partner property to mData which is used (only when defined) to get\n\t\t * the data - i.e. it is basically the same as mData, but without the\n\t\t * 'set' option, and also the data fed to it is the result from mData.\n\t\t * This is the rendering method to match the data method of mData.\n\t\t *  @type function|int|string|null\n\t\t *  @default null\n\t\t */\n\t\t\"mRender\": null,\n\t\n\t\t/**\n\t\t * Unique header TH/TD element for this column - this is what the sorting\n\t\t * listener is attached to (if sorting is enabled.)\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTh\": null,\n\t\n\t\t/**\n\t\t * Unique footer TH/TD element for this column (if there is one). Not used\n\t\t * in DataTables as such, but can be used for plug-ins to reference the\n\t\t * footer for each column.\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTf\": null,\n\t\n\t\t/**\n\t\t * The class to apply to all TD elements in the table's TBODY for the column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sClass\": null,\n\t\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t *  @type string\n\t\t */\n\t\t\"sContentPadding\": null,\n\t\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because mData\n\t\t * is set to null, or because the data source itself is null).\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sDefaultContent\": null,\n\t\n\t\t/**\n\t\t * Name for the column, allowing reference to the column by name as well as\n\t\t * by index (needs a lookup to work by name).\n\t\t *  @type string\n\t\t */\n\t\t\"sName\": null,\n\t\n\t\t/**\n\t\t * Custom sorting data type - defines which of the available plug-ins in\n\t\t * afnSortData the custom sorting will use - if any is defined.\n\t\t *  @type string\n\t\t *  @default std\n\t\t */\n\t\t\"sSortDataType\": 'std',\n\t\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sSortingClass\": null,\n\t\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column -\n\t\t * when jQuery UI theming is used.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sSortingClassJUI\": null,\n\t\n\t\t/**\n\t\t * Title of the column - what is seen in the TH element (nTh).\n\t\t *  @type string\n\t\t */\n\t\t\"sTitle\": null,\n\t\n\t\t/**\n\t\t * Column sorting and filtering type\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sType\": null,\n\t\n\t\t/**\n\t\t * Width of the column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sWidth\": null,\n\t\n\t\t/**\n\t\t * Width of the column when it was first \"encountered\"\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sWidthOrig\": null\n\t};\n\t\n\t\n\t/*\n\t * Developer note: The properties of the object below are given in Hungarian\n\t * notation, that was used as the interface for DataTables prior to v1.10, however\n\t * from v1.10 onwards the primary interface is camel case. In order to avoid\n\t * breaking backwards compatibility utterly with this change, the Hungarian\n\t * version is still, internally the primary interface, but is is not documented\n\t * - hence the @name tags in each doc comment. This allows a Javascript function\n\t * to create a map from Hungarian notation to camel case (going the other direction\n\t * would require each property to be listed, which would at around 3K to the size\n\t * of DataTables, while this method is about a 0.5K hit.\n\t *\n\t * Ultimately this does pave the way for Hungarian notation to be dropped\n\t * completely, but that is a massive amount of work and will break current\n\t * installs (therefore is on-hold until v2).\n\t */\n\t\n\t/**\n\t * Initialisation options that can be given to DataTables at initialisation\n\t * time.\n\t *  @namespace\n\t */\n\tDataTable.defaults = {\n\t\t/**\n\t\t * An array of data to use for the table, passed in at initialisation which\n\t\t * will be used in preference to any data which is already in the DOM. This is\n\t\t * particularly useful for constructing tables purely in Javascript, for\n\t\t * example with a custom Ajax call.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.data\n\t\t *\n\t\t *  @example\n\t\t *    // Using a 2D array data source\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"data\": [\n\t\t *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],\n\t\t *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],\n\t\t *        ],\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"Engine\" },\n\t\t *          { \"title\": \"Browser\" },\n\t\t *          { \"title\": \"Platform\" },\n\t\t *          { \"title\": \"Version\" },\n\t\t *          { \"title\": \"Grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using an array of objects as a data source (`data`)\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"data\": [\n\t\t *          {\n\t\t *            \"engine\":   \"Trident\",\n\t\t *            \"browser\":  \"Internet Explorer 4.0\",\n\t\t *            \"platform\": \"Win 95+\",\n\t\t *            \"version\":  4,\n\t\t *            \"grade\":    \"X\"\n\t\t *          },\n\t\t *          {\n\t\t *            \"engine\":   \"Trident\",\n\t\t *            \"browser\":  \"Internet Explorer 5.0\",\n\t\t *            \"platform\": \"Win 95+\",\n\t\t *            \"version\":  5,\n\t\t *            \"grade\":    \"C\"\n\t\t *          }\n\t\t *        ],\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"Engine\",   \"data\": \"engine\" },\n\t\t *          { \"title\": \"Browser\",  \"data\": \"browser\" },\n\t\t *          { \"title\": \"Platform\", \"data\": \"platform\" },\n\t\t *          { \"title\": \"Version\",  \"data\": \"version\" },\n\t\t *          { \"title\": \"Grade\",    \"data\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aaData\": null,\n\t\n\t\n\t\t/**\n\t\t * If ordering is enabled, then DataTables will perform a first pass sort on\n\t\t * initialisation. You can define which column(s) the sort is performed\n\t\t * upon, and the sorting direction, with this variable. The `sorting` array\n\t\t * should contain an array for each column to be sorted initially containing\n\t\t * the column's index and a direction string ('asc' or 'desc').\n\t\t *  @type array\n\t\t *  @default [[0,'asc']]\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.order\n\t\t *\n\t\t *  @example\n\t\t *    // Sort by 3rd column first, and then 4th column\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"order\": [[2,'asc'], [3,'desc']]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *    // No initial sorting\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"order\": []\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aaSorting\": [[0,'asc']],\n\t\n\t\n\t\t/**\n\t\t * This parameter is basically identical to the `sorting` parameter, but\n\t\t * cannot be overridden by user interaction with the table. What this means\n\t\t * is that you could have a column (visible or hidden) which the sorting\n\t\t * will always be forced on first - any sorting after that (from the user)\n\t\t * will then be performed as required. This can be useful for grouping rows\n\t\t * together.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.orderFixed\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderFixed\": [[0,'asc']]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\t\n\t\n\t\t/**\n\t\t * DataTables can be instructed to load data to display in the table from a\n\t\t * Ajax source. This option defines how that Ajax call is made and where to.\n\t\t *\n\t\t * The `ajax` property has three different modes of operation, depending on\n\t\t * how it is defined. These are:\n\t\t *\n\t\t * * `string` - Set the URL from where the data should be loaded from.\n\t\t * * `object` - Define properties for `jQuery.ajax`.\n\t\t * * `function` - Custom data get function\n\t\t *\n\t\t * `string`\n\t\t * --------\n\t\t *\n\t\t * As a string, the `ajax` property simply defines the URL from which\n\t\t * DataTables will load data.\n\t\t *\n\t\t * `object`\n\t\t * --------\n\t\t *\n\t\t * As an object, the parameters in the object are passed to\n\t\t * [jQuery.ajax](http://api.jquery.com/jQuery.ajax/) allowing fine control\n\t\t * of the Ajax request. DataTables has a number of default parameters which\n\t\t * you can override using this option. Please refer to the jQuery\n\t\t * documentation for a full description of the options available, although\n\t\t * the following parameters provide additional options in DataTables or\n\t\t * require special consideration:\n\t\t *\n\t\t * * `data` - As with jQuery, `data` can be provided as an object, but it\n\t\t *   can also be used as a function to manipulate the data DataTables sends\n\t\t *   to the server. The function takes a single parameter, an object of\n\t\t *   parameters with the values that DataTables has readied for sending. An\n\t\t *   object may be returned which will be merged into the DataTables\n\t\t *   defaults, or you can add the items to the object that was passed in and\n\t\t *   not return anything from the function. This supersedes `fnServerParams`\n\t\t *   from DataTables 1.9-.\n\t\t *\n\t\t * * `dataSrc` - By default DataTables will look for the property `data` (or\n\t\t *   `aaData` for compatibility with DataTables 1.9-) when obtaining data\n\t\t *   from an Ajax source or for server-side processing - this parameter\n\t\t *   allows that property to be changed. You can use Javascript dotted\n\t\t *   object notation to get a data source for multiple levels of nesting, or\n\t\t *   it my be used as a function. As a function it takes a single parameter,\n\t\t *   the JSON returned from the server, which can be manipulated as\n\t\t *   required, with the returned value being that used by DataTables as the\n\t\t *   data source for the table. This supersedes `sAjaxDataProp` from\n\t\t *   DataTables 1.9-.\n\t\t *\n\t\t * * `success` - Should not be overridden it is used internally in\n\t\t *   DataTables. To manipulate / transform the data returned by the server\n\t\t *   use `ajax.dataSrc`, or use `ajax` as a function (see below).\n\t\t *\n\t\t * `function`\n\t\t * ----------\n\t\t *\n\t\t * As a function, making the Ajax call is left up to yourself allowing\n\t\t * complete control of the Ajax request. Indeed, if desired, a method other\n\t\t * than Ajax could be used to obtain the required data, such as Web storage\n\t\t * or an AIR database.\n\t\t *\n\t\t * The function is given four parameters and no return is required. The\n\t\t * parameters are:\n\t\t *\n\t\t * 1. _object_ - Data to send to the server\n\t\t * 2. _function_ - Callback function that must be executed when the required\n\t\t *    data has been obtained. That data should be passed into the callback\n\t\t *    as the only parameter\n\t\t * 3. _object_ - DataTables settings object for the table\n\t\t *\n\t\t * Note that this supersedes `fnServerData` from DataTables 1.9-.\n\t\t *\n\t\t *  @type string|object|function\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.ajax\n\t\t *  @since 1.10.0\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax.\n\t\t *   // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": \"data.json\"\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax, using `dataSrc` to change\n\t\t *   // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": \"tableData\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax, using `dataSrc` to read data\n\t\t *   // from a plain array rather than an array in an object\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": \"\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Manipulate the data returned from the server - add a link to data\n\t\t *   // (note this can, should, be done using `render` for the column - this\n\t\t *   // is just a simple example of how the data can be manipulated).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": function ( json ) {\n\t\t *         for ( var i=0, ien=json.length ; i<ien ; i++ ) {\n\t\t *           json[i][0] = '<a href=\"/message/'+json[i][0]+'>View message</a>';\n\t\t *         }\n\t\t *         return json;\n\t\t *       }\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Add data to the request\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"data\": function ( d ) {\n\t\t *         return {\n\t\t *           \"extra_search\": $('#extra').val()\n\t\t *         };\n\t\t *       }\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Send request as POST\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"type\": \"POST\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get the data from localStorage (could interface with a form for\n\t\t *   // adding, editing and removing rows).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": function (data, callback, settings) {\n\t\t *       callback(\n\t\t *         JSON.parse( localStorage.getItem('dataTablesData') )\n\t\t *       );\n\t\t *     }\n\t\t *   } );\n\t\t */\n\t\t\"ajax\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter allows you to readily specify the entries in the length drop\n\t\t * down menu that DataTables shows when pagination is enabled. It can be\n\t\t * either a 1D array of options which will be used for both the displayed\n\t\t * option and the value, or a 2D array which will use the array in the first\n\t\t * position as the value, and the array in the second position as the\n\t\t * displayed options (useful for language strings such as 'All').\n\t\t *\n\t\t * Note that the `pageLength` property will be automatically set to the\n\t\t * first value given in this array, unless `pageLength` is also provided.\n\t\t *  @type array\n\t\t *  @default [ 10, 25, 50, 100 ]\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.lengthMenu\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"lengthMenu\": [[10, 25, 50, -1], [10, 25, 50, \"All\"]]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aLengthMenu\": [ 10, 25, 50, 100 ],\n\t\n\t\n\t\t/**\n\t\t * The `columns` option in the initialisation parameter allows you to define\n\t\t * details about the way individual columns behave. For a full list of\n\t\t * column options that can be set, please see\n\t\t * {@link DataTable.defaults.column}. Note that if you use `columns` to\n\t\t * define your columns, you must have an entry in the array for every single\n\t\t * column that you have in your table (these can be null if you don't which\n\t\t * to specify any options).\n\t\t *  @member\n\t\t *\n\t\t *  @name DataTable.defaults.column\n\t\t */\n\t\t\"aoColumns\": null,\n\t\n\t\t/**\n\t\t * Very similar to `columns`, `columnDefs` allows you to target a specific\n\t\t * column, multiple columns, or all columns, using the `targets` property of\n\t\t * each object in the array. This allows great flexibility when creating\n\t\t * tables, as the `columnDefs` arrays can be of any length, targeting the\n\t\t * columns you specifically want. `columnDefs` may use any of the column\n\t\t * options available: {@link DataTable.defaults.column}, but it _must_\n\t\t * have `targets` defined in each object in the array. Values in the `targets`\n\t\t * array may be:\n\t\t *   <ul>\n\t\t *     <li>a string - class name will be matched on the TH for the column</li>\n\t\t *     <li>0 or a positive integer - column index counting from the left</li>\n\t\t *     <li>a negative integer - column index counting from the right</li>\n\t\t *     <li>the string \"_all\" - all columns (i.e. assign a default)</li>\n\t\t *   </ul>\n\t\t *  @member\n\t\t *\n\t\t *  @name DataTable.defaults.columnDefs\n\t\t */\n\t\t\"aoColumnDefs\": null,\n\t\n\t\n\t\t/**\n\t\t * Basically the same as `search`, this parameter defines the individual column\n\t\t * filtering state at initialisation time. The array must be of the same size\n\t\t * as the number of columns, and each element be an object with the parameters\n\t\t * `search` and `escapeRegex` (the latter is optional). 'null' is also\n\t\t * accepted and the default will be used.\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.searchCols\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searchCols\": [\n\t\t *          null,\n\t\t *          { \"search\": \"My filter\" },\n\t\t *          null,\n\t\t *          { \"search\": \"^[0-9]\", \"escapeRegex\": false }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"aoSearchCols\": [],\n\t\n\t\n\t\t/**\n\t\t * An array of CSS classes that should be applied to displayed rows. This\n\t\t * array may be of any length, and DataTables will apply each class\n\t\t * sequentially, looping when required.\n\t\t *  @type array\n\t\t *  @default null <i>Will take the values determined by the `oClasses.stripe*`\n\t\t *    options</i>\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.stripeClasses\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stripeClasses\": [ 'strip1', 'strip2', 'strip3' ]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"asStripeClasses\": null,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable automatic column width calculation. This can be disabled\n\t\t * as an optimisation (it takes some time to calculate the widths) if the\n\t\t * tables widths are passed in using `columns`.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.autoWidth\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"autoWidth\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bAutoWidth\": true,\n\t\n\t\n\t\t/**\n\t\t * Deferred rendering can provide DataTables with a huge speed boost when you\n\t\t * are using an Ajax or JS data source for the table. This option, when set to\n\t\t * true, will cause DataTables to defer the creation of the table elements for\n\t\t * each row until they are needed for a draw - saving a significant amount of\n\t\t * time.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.deferRender\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajax\": \"sources/arrays.txt\",\n\t\t *        \"deferRender\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bDeferRender\": false,\n\t\n\t\n\t\t/**\n\t\t * Replace a DataTable which matches the given selector and replace it with\n\t\t * one which has the properties of the new initialisation object passed. If no\n\t\t * table matches the selector, then the new DataTable will be constructed as\n\t\t * per normal.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.destroy\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"srollY\": \"200px\",\n\t\t *        \"paginate\": false\n\t\t *      } );\n\t\t *\n\t\t *      // Some time later....\n\t\t *      $('#example').dataTable( {\n\t\t *        \"filter\": false,\n\t\t *        \"destroy\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bDestroy\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable filtering of data. Filtering in DataTables is \"smart\" in\n\t\t * that it allows the end user to input multiple words (space separated) and\n\t\t * will match a row containing those words, even if not in the order that was\n\t\t * specified (this allow matching across multiple columns). Note that if you\n\t\t * wish to use filtering in DataTables this must remain 'true' - to remove the\n\t\t * default filtering input box and retain filtering abilities, please use\n\t\t * {@link DataTable.defaults.dom}.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.searching\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searching\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bFilter\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the table information display. This shows information\n\t\t * about the data that is currently visible on the page, including information\n\t\t * about filtered data if that action is being performed.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.info\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"info\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bInfo\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some\n\t\t * slightly different and additional mark-up from what DataTables has\n\t\t * traditionally used).\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.jQueryUI\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"jQueryUI\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bJQueryUI\": false,\n\t\n\t\n\t\t/**\n\t\t * Allows the end user to select the size of a formatted page from a select\n\t\t * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.lengthChange\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"lengthChange\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bLengthChange\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable pagination.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.paging\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"paging\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bPaginate\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the display of a 'processing' indicator when the table is\n\t\t * being processed (e.g. a sort). This is particularly useful for tables with\n\t\t * large amounts of data where it can take a noticeable amount of time to sort\n\t\t * the entries.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.processing\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"processing\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bProcessing\": false,\n\t\n\t\n\t\t/**\n\t\t * Retrieve the DataTables object for the given selector. Note that if the\n\t\t * table has already been initialised, this parameter will cause DataTables\n\t\t * to simply return the object that has already been set up - it will not take\n\t\t * account of any changes you might have made to the initialisation object\n\t\t * passed to DataTables (setting this parameter to true is an acknowledgement\n\t\t * that you understand this). `destroy` can be used to reinitialise a table if\n\t\t * you need.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.retrieve\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      initTable();\n\t\t *      tableActions();\n\t\t *    } );\n\t\t *\n\t\t *    function initTable ()\n\t\t *    {\n\t\t *      return $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200px\",\n\t\t *        \"paginate\": false,\n\t\t *        \"retrieve\": true\n\t\t *      } );\n\t\t *    }\n\t\t *\n\t\t *    function tableActions ()\n\t\t *    {\n\t\t *      var table = initTable();\n\t\t *      // perform API operations with oTable\n\t\t *    }\n\t\t */\n\t\t\"bRetrieve\": false,\n\t\n\t\n\t\t/**\n\t\t * When vertical (y) scrolling is enabled, DataTables will force the height of\n\t\t * the table's viewport to the given height at all times (useful for layout).\n\t\t * However, this can look odd when filtering data down to a small data set,\n\t\t * and the footer is left \"floating\" further down. This parameter (when\n\t\t * enabled) will cause DataTables to collapse the table's viewport down when\n\t\t * the result set will fit within the given Y height.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.scrollCollapse\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200\",\n\t\t *        \"scrollCollapse\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bScrollCollapse\": false,\n\t\n\t\n\t\t/**\n\t\t * Configure DataTables to use server-side processing. Note that the\n\t\t * `ajax` parameter must also be given in order to give DataTables a\n\t\t * source to obtain the required data for each draw.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverSide\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"xhr.php\"\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bServerSide\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable sorting of columns. Sorting of individual columns can be\n\t\t * disabled by the `sortable` option for each column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.ordering\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ordering\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSort\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or display DataTables' ability to sort multiple columns at the\n\t\t * same time (activated by shift-click by the user).\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.orderMulti\n\t\t *\n\t\t *  @example\n\t\t *    // Disable multiple column sorting ability\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderMulti\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortMulti\": true,\n\t\n\t\n\t\t/**\n\t\t * Allows control over whether DataTables should use the top (true) unique\n\t\t * cell that is found for a single column, or the bottom (false - default).\n\t\t * This is useful when using complex headers.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.orderCellsTop\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderCellsTop\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortCellsTop\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the addition of the classes `sorting\\_1`, `sorting\\_2` and\n\t\t * `sorting\\_3` to the columns which are currently being sorted on. This is\n\t\t * presented as a feature switch as it can increase processing time (while\n\t\t * classes are removed and added) so for large data sets you might want to\n\t\t * turn this off.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.orderClasses\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderClasses\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortClasses\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable state saving. When enabled HTML5 `localStorage` will be\n\t\t * used to save table display information such as pagination information,\n\t\t * display length, filtering and sorting. As such when the end user reloads\n\t\t * the page the display display will match what thy had previously set up.\n\t\t *\n\t\t * Due to the use of `localStorage` the default state saving is not supported\n\t\t * in IE6 or 7. If state saving is required in those browsers, use\n\t\t * `stateSaveCallback` to provide a storage solution such as cookies.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.stateSave\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bStateSave\": false,\n\t\n\t\n\t\t/**\n\t\t * This function is called when a TR element is created (and all TD child\n\t\t * elements have been inserted), or registered if using a DOM source, allowing\n\t\t * manipulation of the TR element (adding classes etc).\n\t\t *  @type function\n\t\t *  @param {node} row \"TR\" element for the current row\n\t\t *  @param {array} data Raw data array for this row\n\t\t *  @param {int} dataIndex The index of this row in the internal aoData array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.createdRow\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"createdRow\": function( row, data, dataIndex ) {\n\t\t *          // Bold the grade for all 'A' grade browsers\n\t\t *          if ( data[4] == \"A\" )\n\t\t *          {\n\t\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnCreatedRow\": null,\n\t\n\t\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify any aspect you want about the created DOM.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.drawCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"drawCallback\": function( settings ) {\n\t\t *          alert( 'DataTables has redrawn the table' );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnDrawCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Identical to fnHeaderCallback() but for the table footer this function\n\t\t * allows you to modify the table footer on every 'draw' event.\n\t\t *  @type function\n\t\t *  @param {node} foot \"TR\" element for the footer\n\t\t *  @param {array} data Full table data (as derived from the original HTML)\n\t\t *  @param {int} start Index for the current display starting point in the\n\t\t *    display array\n\t\t *  @param {int} end Index for the current display ending point in the\n\t\t *    display array\n\t\t *  @param {array int} display Index array to translate the visual position\n\t\t *    to the full data array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.footerCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"footerCallback\": function( tfoot, data, start, end, display ) {\n\t\t *          tfoot.getElementsByTagName('th')[0].innerHTML = \"Starting index is \"+start;\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnFooterCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * When rendering large numbers in the information element for the table\n\t\t * (i.e. \"Showing 1 to 10 of 57 entries\") DataTables will render large numbers\n\t\t * to have a comma separator for the 'thousands' units (e.g. 1 million is\n\t\t * rendered as \"1,000,000\") to help readability for the end user. This\n\t\t * function will override the default method DataTables uses.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {int} toFormat number to be formatted\n\t\t *  @returns {string} formatted string for DataTables to show the number\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.formatNumber\n\t\t *\n\t\t *  @example\n\t\t *    // Format a number using a single quote for the separator (note that\n\t\t *    // this can also be done with the language.thousands option)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"formatNumber\": function ( toFormat ) {\n\t\t *          return toFormat.toString().replace(\n\t\t *            /\\B(?=(\\d{3})+(?!\\d))/g, \"'\"\n\t\t *          );\n\t\t *        };\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnFormatNumber\": function ( toFormat ) {\n\t\t\treturn toFormat.toString().replace(\n\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g,\n\t\t\t\tthis.oLanguage.sThousands\n\t\t\t);\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify the header row. This can be used to calculate and\n\t\t * display useful information about the table.\n\t\t *  @type function\n\t\t *  @param {node} head \"TR\" element for the header\n\t\t *  @param {array} data Full table data (as derived from the original HTML)\n\t\t *  @param {int} start Index for the current display starting point in the\n\t\t *    display array\n\t\t *  @param {int} end Index for the current display ending point in the\n\t\t *    display array\n\t\t *  @param {array int} display Index array to translate the visual position\n\t\t *    to the full data array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.headerCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"fheaderCallback\": function( head, data, start, end, display ) {\n\t\t *          head.getElementsByTagName('th')[0].innerHTML = \"Displaying \"+(end-start)+\" records\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnHeaderCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * The information element can be used to convey information about the current\n\t\t * state of the table. Although the internationalisation options presented by\n\t\t * DataTables are quite capable of dealing with most customisations, there may\n\t\t * be times where you wish to customise the string further. This callback\n\t\t * allows you to do exactly that.\n\t\t *  @type function\n\t\t *  @param {object} oSettings DataTables settings object\n\t\t *  @param {int} start Starting position in data for the draw\n\t\t *  @param {int} end End position in data for the draw\n\t\t *  @param {int} max Total number of rows in the table (regardless of\n\t\t *    filtering)\n\t\t *  @param {int} total Total number of rows in the data set, after filtering\n\t\t *  @param {string} pre The string that DataTables has formatted using it's\n\t\t *    own rules\n\t\t *  @returns {string} The string to be displayed in the information element.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.infoCallback\n\t\t *\n\t\t *  @example\n\t\t *    $('#example').dataTable( {\n\t\t *      \"infoCallback\": function( settings, start, end, max, total, pre ) {\n\t\t *        return start +\" to \"+ end;\n\t\t *      }\n\t\t *    } );\n\t\t */\n\t\t\"fnInfoCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Called when the table has been initialised. Normally DataTables will\n\t\t * initialise sequentially and there will be no need for this function,\n\t\t * however, this does not hold true when using external language information\n\t\t * since that is obtained using an async XHR call.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} json The JSON object request from the server - only\n\t\t *    present if client-side Ajax sourced data is used\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.initComplete\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"initComplete\": function(settings, json) {\n\t\t *          alert( 'DataTables has finished its initialisation.' );\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnInitComplete\": null,\n\t\n\t\n\t\t/**\n\t\t * Called at the very start of each table draw and can be used to cancel the\n\t\t * draw by returning false, any other return (including undefined) results in\n\t\t * the full draw occurring).\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @returns {boolean} False will cancel the draw, anything else (including no\n\t\t *    return) will allow it to complete.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.preDrawCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"preDrawCallback\": function( settings ) {\n\t\t *          if ( $('#test').val() == 1 ) {\n\t\t *            return false;\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnPreDrawCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * This function allows you to 'post process' each row after it have been\n\t\t * generated for each table draw, but before it is rendered on screen. This\n\t\t * function might be used for setting the row class name etc.\n\t\t *  @type function\n\t\t *  @param {node} row \"TR\" element for the current row\n\t\t *  @param {array} data Raw data array for this row\n\t\t *  @param {int} displayIndex The display index for the current table draw\n\t\t *  @param {int} displayIndexFull The index of the data in the full list of\n\t\t *    rows (after filtering)\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.rowCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"rowCallback\": function( row, data, displayIndex, displayIndexFull ) {\n\t\t *          // Bold the grade for all 'A' grade browsers\n\t\t *          if ( data[4] == \"A\" ) {\n\t\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnRowCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * This parameter allows you to override the default function which obtains\n\t\t * the data from the server so something more suitable for your application.\n\t\t * For example you could use POST data, or pull information from a Gears or\n\t\t * AIR database.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {string} source HTTP source to obtain the data from (`ajax`)\n\t\t *  @param {array} data A key/value pair object containing the data to send\n\t\t *    to the server\n\t\t *  @param {function} callback to be called on completion of the data get\n\t\t *    process that will draw the data on the page.\n\t\t *  @param {object} settings DataTables settings object\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverData\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"fnServerData\": null,\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t *  It is often useful to send extra data to the server when making an Ajax\n\t\t * request - for example custom filtering information, and this callback\n\t\t * function makes it trivial to send extra information to the server. The\n\t\t * passed in parameter is the data set that has been constructed by\n\t\t * DataTables, and you can add to this or modify it as you require.\n\t\t *  @type function\n\t\t *  @param {array} data Data array (array of objects which are name/value\n\t\t *    pairs) that has been constructed by DataTables and will be sent to the\n\t\t *    server. In the case of Ajax sourced data with server-side processing\n\t\t *    this will be an empty array, for server-side processing there will be a\n\t\t *    significant number of parameters!\n\t\t *  @returns {undefined} Ensure that you modify the data array passed in,\n\t\t *    as this is passed by reference.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverParams\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"fnServerParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Load the table state. With this function you can define from where, and how, the\n\t\t * state of a table is loaded. By default DataTables will load from `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @return {object} The DataTables state object to be loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoadCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadCallback\": function (settings) {\n\t\t *          var o;\n\t\t *\n\t\t *          // Send an Ajax request to the server to get the data. Note that\n\t\t *          // this is a synchronous request.\n\t\t *          $.ajax( {\n\t\t *            \"url\": \"/state_load\",\n\t\t *            \"async\": false,\n\t\t *            \"dataType\": \"json\",\n\t\t *            \"success\": function (json) {\n\t\t *              o = json;\n\t\t *            }\n\t\t *          } );\n\t\t *\n\t\t *          return o;\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoadCallback\": function ( settings ) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(\n\t\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(\n\t\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} catch (e) {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Callback which allows modification of the saved state prior to loading that state.\n\t\t * This callback is called when the table is loading state from the stored data, but\n\t\t * prior to the settings object being modified by the saved state. Note that for\n\t\t * plug-in authors, you should use the `stateLoadParams` event to load parameters for\n\t\t * a plug-in.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object that is to be loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoadParams\n\t\t *\n\t\t *  @example\n\t\t *    // Remove a saved filter, so filtering is never loaded\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadParams\": function (settings, data) {\n\t\t *          data.oSearch.sSearch = \"\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Disallow state loading by returning false\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadParams\": function (settings, data) {\n\t\t *          return false;\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoadParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Callback that is called when the state has been loaded from the state saving method\n\t\t * and the DataTables settings object has been modified as a result of the loaded state.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object that was loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoaded\n\t\t *\n\t\t *  @example\n\t\t *    // Show an alert with the filtering value that was saved\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoaded\": function (settings, data) {\n\t\t *          alert( 'Saved filter was: '+data.oSearch.sSearch );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoaded\": null,\n\t\n\t\n\t\t/**\n\t\t * Save the table state. This function allows you to define where and how the state\n\t\t * information for the table is stored By default DataTables will use `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object to be saved\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateSaveCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateSaveCallback\": function (settings, data) {\n\t\t *          // Send an Ajax request to the server with the state object\n\t\t *          $.ajax( {\n\t\t *            \"url\": \"/state_save\",\n\t\t *            \"data\": data,\n\t\t *            \"dataType\": \"json\",\n\t\t *            \"method\": \"POST\"\n\t\t *            \"success\": function () {}\n\t\t *          } );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateSaveCallback\": function ( settings, data ) {\n\t\t\ttry {\n\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(\n\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname,\n\t\t\t\t\tJSON.stringify( data )\n\t\t\t\t);\n\t\t\t} catch (e) {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Callback which allows modification of the state to be saved. Called when the table\n\t\t * has changed state a new state save is required. This method allows modification of\n\t\t * the state saving object prior to actually doing the save, including addition or\n\t\t * other state properties or modification. Note that for plug-in authors, you should\n\t\t * use the `stateSaveParams` event to save parameters for a plug-in.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object to be saved\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateSaveParams\n\t\t *\n\t\t *  @example\n\t\t *    // Remove a saved filter, so filtering is never saved\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateSaveParams\": function (settings, data) {\n\t\t *          data.oSearch.sSearch = \"\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateSaveParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Duration for which the saved state information is considered valid. After this period\n\t\t * has elapsed the state will be returned to the default.\n\t\t * Value is given in seconds.\n\t\t *  @type int\n\t\t *  @default 7200 <i>(2 hours)</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.stateDuration\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateDuration\": 60*60*24; // 1 day\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iStateDuration\": 7200,\n\t\n\t\n\t\t/**\n\t\t * When enabled DataTables will not make a request to the server for the first\n\t\t * page draw - rather it will use the data already on the page (no sorting etc\n\t\t * will be applied to it), thus saving on an XHR at load time. `deferLoading`\n\t\t * is used to indicate that deferred loading is required, but it is also used\n\t\t * to tell DataTables how many records there are in the full table (allowing\n\t\t * the information element and pagination to be displayed correctly). In the case\n\t\t * where a filtering is applied to the table on initial load, this can be\n\t\t * indicated by giving the parameter as an array, where the first element is\n\t\t * the number of records available after filtering and the second element is the\n\t\t * number of records without filtering (allowing the table information element\n\t\t * to be shown correctly).\n\t\t *  @type int | array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.deferLoading\n\t\t *\n\t\t *  @example\n\t\t *    // 57 records available in the table, no filtering applied\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"scripts/server_processing.php\",\n\t\t *        \"deferLoading\": 57\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // 57 records after filtering, 100 without filtering (an initial filter applied)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"scripts/server_processing.php\",\n\t\t *        \"deferLoading\": [ 57, 100 ],\n\t\t *        \"search\": {\n\t\t *          \"search\": \"my_filter\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"iDeferLoading\": null,\n\t\n\t\n\t\t/**\n\t\t * Number of rows to display on a single page when using pagination. If\n\t\t * feature enabled (`lengthChange`) then the end user will be able to override\n\t\t * this to a custom setting using a pop-up menu.\n\t\t *  @type int\n\t\t *  @default 10\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.pageLength\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"pageLength\": 50\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iDisplayLength\": 10,\n\t\n\t\n\t\t/**\n\t\t * Define the starting point for data display when using DataTables with\n\t\t * pagination. Note that this parameter is the number of records, rather than\n\t\t * the page number, so if you have 10 records per page and want to start on\n\t\t * the third page, it should be \"20\".\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.displayStart\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"displayStart\": 20\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iDisplayStart\": 0,\n\t\n\t\n\t\t/**\n\t\t * By default DataTables allows keyboard navigation of the table (sorting, paging,\n\t\t * and filtering) by adding a `tabindex` attribute to the required elements. This\n\t\t * allows you to tab through the controls and press the enter key to activate them.\n\t\t * The tabindex is default 0, meaning that the tab follows the flow of the document.\n\t\t * You can overrule this using this parameter if you wish. Use a value of -1 to\n\t\t * disable built-in keyboard navigation.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.tabIndex\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"tabIndex\": 1\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"iTabIndex\": 0,\n\t\n\t\n\t\t/**\n\t\t * Classes that DataTables assigns to the various components and features\n\t\t * that it adds to the HTML table. This allows classes to be configured\n\t\t * during initialisation in addition to through the static\n\t\t * {@link DataTable.ext.oStdClasses} object).\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.classes\n\t\t */\n\t\t\"oClasses\": {},\n\t\n\t\n\t\t/**\n\t\t * All strings that DataTables uses in the user interface that it creates\n\t\t * are defined in this object, allowing you to modified them individually or\n\t\t * completely replace them all as required.\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.language\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Strings that are used for WAI-ARIA labels and controls only (these are not\n\t\t\t * actually visible on the page, but will be read by screenreaders, and thus\n\t\t\t * must be internationalised as well).\n\t\t\t *  @namespace\n\t\t\t *  @name DataTable.defaults.language.aria\n\t\t\t */\n\t\t\t\"oAria\": {\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t\t * sorted ascending by activing the column (click or return when focused).\n\t\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default : activate to sort column ascending\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.aria.sortAscending\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"aria\": {\n\t\t\t\t *            \"sortAscending\": \" - click/return to sort ascending\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sSortAscending\": \": activate to sort column ascending\",\n\t\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t\t * sorted descending by activing the column (click or return when focused).\n\t\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default : activate to sort column ascending\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.aria.sortDescending\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"aria\": {\n\t\t\t\t *            \"sortDescending\": \" - click/return to sort descending\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sSortDescending\": \": activate to sort column descending\"\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * Pagination string used by DataTables for the built-in pagination\n\t\t\t * control types.\n\t\t\t *  @namespace\n\t\t\t *  @name DataTable.defaults.language.paginate\n\t\t\t */\n\t\t\t\"oPaginate\": {\n\t\t\t\t/**\n\t\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t\t * button to take the user to the first page.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default First\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.first\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"first\": \"First page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sFirst\": \"First\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t\t * button to take the user to the last page.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Last\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.last\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"last\": \"Last page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sLast\": \"Last\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use for the 'next' pagination button (to take the user to the\n\t\t\t\t * next page).\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Next\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.next\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"next\": \"Next page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sNext\": \"Next\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use for the 'previous' pagination button (to take the user to\n\t\t\t\t * the previous page).\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Previous\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.previous\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"previous\": \"Previous page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sPrevious\": \"Previous\"\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * This string is shown in preference to `zeroRecords` when the table is\n\t\t\t * empty of data (regardless of filtering). Note that this is an optional\n\t\t\t * parameter - if it is not given, the value of `zeroRecords` will be used\n\t\t\t * instead (either the default or given value).\n\t\t\t *  @type string\n\t\t\t *  @default No data available in table\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.emptyTable\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"emptyTable\": \"No data available in table\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sEmptyTable\": \"No data available in table\",\n\t\n\t\n\t\t\t/**\n\t\t\t * This string gives information to the end user about the information\n\t\t\t * that is current on display on the page. The following tokens can be\n\t\t\t * used in the string and will be dynamically replaced as the table\n\t\t\t * display updates. This tokens can be placed anywhere in the string, or\n\t\t\t * removed as needed by the language requires:\n\t\t\t *\n\t\t\t * * `\\_START\\_` - Display index of the first record on the current page\n\t\t\t * * `\\_END\\_` - Display index of the last record on the current page\n\t\t\t * * `\\_TOTAL\\_` - Number of records in the table after filtering\n\t\t\t * * `\\_MAX\\_` - Number of records in the table without filtering\n\t\t\t * * `\\_PAGE\\_` - Current page number\n\t\t\t * * `\\_PAGES\\_` - Total number of pages of data in the table\n\t\t\t *\n\t\t\t *  @type string\n\t\t\t *  @default Showing _START_ to _END_ of _TOTAL_ entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.info\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"info\": \"Showing page _PAGE_ of _PAGES_\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfo\": \"Showing _START_ to _END_ of _TOTAL_ entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Display information string for when the table is empty. Typically the\n\t\t\t * format of this string should match `info`.\n\t\t\t *  @type string\n\t\t\t *  @default Showing 0 to 0 of 0 entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoEmpty\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoEmpty\": \"No entries to show\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoEmpty\": \"Showing 0 to 0 of 0 entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * When a user filters the information in a table, this string is appended\n\t\t\t * to the information (`info`) to give an idea of how strong the filtering\n\t\t\t * is. The variable _MAX_ is dynamically updated.\n\t\t\t *  @type string\n\t\t\t *  @default (filtered from _MAX_ total entries)\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoFiltered\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoFiltered\": \" - filtering from _MAX_ records\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoFiltered\": \"(filtered from _MAX_ total entries)\",\n\t\n\t\n\t\t\t/**\n\t\t\t * If can be useful to append extra information to the info string at times,\n\t\t\t * and this variable does exactly that. This information will be appended to\n\t\t\t * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are\n\t\t\t * being used) at all times.\n\t\t\t *  @type string\n\t\t\t *  @default <i>Empty string</i>\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoPostFix\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoPostFix\": \"All records shown are derived from real information.\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoPostFix\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * This decimal place operator is a little different from the other\n\t\t\t * language options since DataTables doesn't output floating point\n\t\t\t * numbers, so it won't ever use this for display of a number. Rather,\n\t\t\t * what this parameter does is modify the sort methods of the table so\n\t\t\t * that numbers which are in a format which has a character other than\n\t\t\t * a period (`.`) as a decimal place will be sorted numerically.\n\t\t\t *\n\t\t\t * Note that numbers with different decimal places cannot be shown in\n\t\t\t * the same table and still be sortable, the table must be consistent.\n\t\t\t * However, multiple different tables on the page can use different\n\t\t\t * decimal place characters.\n\t\t\t *  @type string\n\t\t\t *  @default \n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.decimal\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"decimal\": \",\"\n\t\t\t *          \"thousands\": \".\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sDecimal\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * DataTables has a build in number formatter (`formatNumber`) which is\n\t\t\t * used to format large numbers that are used in the table information.\n\t\t\t * By default a comma is used, but this can be trivially changed to any\n\t\t\t * character you wish with this parameter.\n\t\t\t *  @type string\n\t\t\t *  @default ,\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.thousands\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"thousands\": \"'\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sThousands\": \",\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Detail the action that will be taken when the drop down menu for the\n\t\t\t * pagination length option is changed. The '_MENU_' variable is replaced\n\t\t\t * with a default select list of 10, 25, 50 and 100, and can be replaced\n\t\t\t * with a custom select box if required.\n\t\t\t *  @type string\n\t\t\t *  @default Show _MENU_ entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.lengthMenu\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Language change only\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"lengthMenu\": \"Display _MENU_ records\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Language and options change\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"lengthMenu\": 'Display <select>'+\n\t\t\t *            '<option value=\"10\">10</option>'+\n\t\t\t *            '<option value=\"20\">20</option>'+\n\t\t\t *            '<option value=\"30\">30</option>'+\n\t\t\t *            '<option value=\"40\">40</option>'+\n\t\t\t *            '<option value=\"50\">50</option>'+\n\t\t\t *            '<option value=\"-1\">All</option>'+\n\t\t\t *            '</select> records'\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLengthMenu\": \"Show _MENU_ entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * When using Ajax sourced data and during the first draw when DataTables is\n\t\t\t * gathering the data, this message is shown in an empty row in the table to\n\t\t\t * indicate to the end user the the data is being loaded. Note that this\n\t\t\t * parameter is not used when loading data by server-side processing, just\n\t\t\t * Ajax sourced data with client-side processing.\n\t\t\t *  @type string\n\t\t\t *  @default Loading...\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.loadingRecords\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"loadingRecords\": \"Please wait - loading...\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLoadingRecords\": \"Loading...\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Text which is displayed when the table is processing a user action\n\t\t\t * (usually a sort command or similar).\n\t\t\t *  @type string\n\t\t\t *  @default Processing...\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.processing\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"processing\": \"DataTables is currently busy\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sProcessing\": \"Processing...\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Details the actions that will be taken when the user types into the\n\t\t\t * filtering input text box. The variable \"_INPUT_\", if used in the string,\n\t\t\t * is replaced with the HTML text box for the filtering input allowing\n\t\t\t * control over where it appears in the string. If \"_INPUT_\" is not given\n\t\t\t * then the input box is appended to the string automatically.\n\t\t\t *  @type string\n\t\t\t *  @default Search:\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.search\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Input text box will be appended at the end automatically\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"search\": \"Filter records:\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Specify where the filter should appear\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"search\": \"Apply filter _INPUT_ to table\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sSearch\": \"Search:\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Assign a `placeholder` attribute to the search `input` element\n\t\t\t *  @type string\n\t\t\t *  @default \n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.searchPlaceholder\n\t\t\t */\n\t\t\t\"sSearchPlaceholder\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * All of the language information can be stored in a file on the\n\t\t\t * server-side, which DataTables will look up if this parameter is passed.\n\t\t\t * It must store the URL of the language file, which is in a JSON format,\n\t\t\t * and the object has the same properties as the oLanguage object in the\n\t\t\t * initialiser object (i.e. the above parameters). Please refer to one of\n\t\t\t * the example language files to see how this works in action.\n\t\t\t *  @type string\n\t\t\t *  @default <i>Empty string - i.e. disabled</i>\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.url\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"url\": \"http://www.sprymedia.co.uk/dataTables/lang.txt\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sUrl\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Text shown inside the table records when the is no information to be\n\t\t\t * displayed after filtering. `emptyTable` is shown when there is simply no\n\t\t\t * information in the table at all (regardless of filtering).\n\t\t\t *  @type string\n\t\t\t *  @default No matching records found\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.zeroRecords\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"zeroRecords\": \"No records to display\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sZeroRecords\": \"No matching records found\"\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * This parameter allows you to have define the global filtering state at\n\t\t * initialisation time. As an object the `search` parameter must be\n\t\t * defined, but all other parameters are optional. When `regex` is true,\n\t\t * the search string will be treated as a regular expression, when false\n\t\t * (default) it will be treated as a straight string. When `smart`\n\t\t * DataTables will use it's smart filtering methods (to word match at\n\t\t * any point in the data), when false this will not be done.\n\t\t *  @namespace\n\t\t *  @extends DataTable.models.oSearch\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.search\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"search\": {\"search\": \"Initial search\"}\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"oSearch\": $.extend( {}, DataTable.models.oSearch ),\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * By default DataTables will look for the property `data` (or `aaData` for\n\t\t * compatibility with DataTables 1.9-) when obtaining data from an Ajax\n\t\t * source or for server-side processing - this parameter allows that\n\t\t * property to be changed. You can use Javascript dotted object notation to\n\t\t * get a data source for multiple levels of nesting.\n\t\t *  @type string\n\t\t *  @default data\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.ajaxDataProp\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sAjaxDataProp\": \"data\",\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * You can instruct DataTables to load data from an external\n\t\t * source using this parameter (use aData if you want to pass data in you\n\t\t * already have). Simply provide a url a JSON object can be obtained from.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.ajaxSource\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sAjaxSource\": null,\n\t\n\t\n\t\t/**\n\t\t * This initialisation variable allows you to specify exactly where in the\n\t\t * DOM you want DataTables to inject the various controls it adds to the page\n\t\t * (for example you might want the pagination controls at the top of the\n\t\t * table). DIV elements (with or without a custom class) can also be added to\n\t\t * aid styling. The follow syntax is used:\n\t\t *   <ul>\n\t\t *     <li>The following options are allowed:\n\t\t *       <ul>\n\t\t *         <li>'l' - Length changing</li>\n\t\t *         <li>'f' - Filtering input</li>\n\t\t *         <li>'t' - The table!</li>\n\t\t *         <li>'i' - Information</li>\n\t\t *         <li>'p' - Pagination</li>\n\t\t *         <li>'r' - pRocessing</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>The following constants are allowed:\n\t\t *       <ul>\n\t\t *         <li>'H' - jQueryUI theme \"header\" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>\n\t\t *         <li>'F' - jQueryUI theme \"footer\" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>The following syntax is expected:\n\t\t *       <ul>\n\t\t *         <li>'&lt;' and '&gt;' - div elements</li>\n\t\t *         <li>'&lt;\"class\" and '&gt;' - div with a class</li>\n\t\t *         <li>'&lt;\"#id\" and '&gt;' - div with an ID</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>Examples:\n\t\t *       <ul>\n\t\t *         <li>'&lt;\"wrapper\"flipt&gt;'</li>\n\t\t *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *   </ul>\n\t\t *  @type string\n\t\t *  @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>\n\t\t *    <\"H\"lfr>t<\"F\"ip> <i>(when `jQueryUI` is true)</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.dom\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"dom\": '&lt;\"top\"i&gt;rt&lt;\"bottom\"flp&gt;&lt;\"clear\"&gt;'\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDom\": \"lfrtip\",\n\t\n\t\n\t\t/**\n\t\t * Search delay option. This will throttle full table searches that use the\n\t\t * DataTables provided search input element (it does not effect calls to\n\t\t * `dt-api search()`, providing a delay before the search is made.\n\t\t *  @type integer\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.searchDelay\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searchDelay\": 200\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"searchDelay\": null,\n\t\n\t\n\t\t/**\n\t\t * DataTables features four different built-in options for the buttons to\n\t\t * display for pagination control:\n\t\t *\n\t\t * * `simple` - 'Previous' and 'Next' buttons only\n\t\t * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers\n\t\t * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons\n\t\t * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus\n\t\t *   page numbers\n\t\t *  \n\t\t * Further methods can be added using {@link DataTable.ext.oPagination}.\n\t\t *  @type string\n\t\t *  @default simple_numbers\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.pagingType\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"pagingType\": \"full_numbers\"\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"sPaginationType\": \"simple_numbers\",\n\t\n\t\n\t\t/**\n\t\t * Enable horizontal scrolling. When a table is too wide to fit into a\n\t\t * certain layout, or you have a large number of columns in the table, you\n\t\t * can enable x-scrolling to show the table in a viewport, which can be\n\t\t * scrolled. This property can be `true` which will allow the table to\n\t\t * scroll horizontally when needed, or any CSS unit, or a number (in which\n\t\t * case it will be treated as a pixel measurement). Setting as simply `true`\n\t\t * is recommended.\n\t\t *  @type boolean|string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.scrollX\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollX\": true,\n\t\t *        \"scrollCollapse\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollX\": \"\",\n\t\n\t\n\t\t/**\n\t\t * This property can be used to force a DataTable to use more width than it\n\t\t * might otherwise do when x-scrolling is enabled. For example if you have a\n\t\t * table which requires to be well spaced, this parameter is useful for\n\t\t * \"over-sizing\" the table, and thus forcing scrolling. This property can by\n\t\t * any CSS unit, or a number (in which case it will be treated as a pixel\n\t\t * measurement).\n\t\t *  @type string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.scrollXInner\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollX\": \"100%\",\n\t\t *        \"scrollXInner\": \"110%\"\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollXInner\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Enable vertical scrolling. Vertical scrolling will constrain the DataTable\n\t\t * to the given height, and enable scrolling for any data which overflows the\n\t\t * current viewport. This can be used as an alternative to paging to display\n\t\t * a lot of data in a small area (although paging and scrolling can both be\n\t\t * enabled at the same time). This property can be any CSS unit, or a number\n\t\t * (in which case it will be treated as a pixel measurement).\n\t\t *  @type string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.scrollY\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200px\",\n\t\t *        \"paginate\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollY\": \"\",\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * Set the HTTP method that is used to make the Ajax call for server-side\n\t\t * processing or Ajax sourced data.\n\t\t *  @type string\n\t\t *  @default GET\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverMethod\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sServerMethod\": \"GET\",\n\t\n\t\n\t\t/**\n\t\t * DataTables makes use of renderers when displaying HTML elements for\n\t\t * a table. These renderers can be added or modified by plug-ins to\n\t\t * generate suitable mark-up for a site. For example the Bootstrap\n\t\t * integration plug-in for DataTables uses a paging button renderer to\n\t\t * display pagination buttons in the mark-up required by Bootstrap.\n\t\t *\n\t\t * For further information about the renderers available see\n\t\t * DataTable.ext.renderer\n\t\t *  @type string|object\n\t\t *  @default null\n\t\t *\n\t\t *  @name DataTable.defaults.renderer\n\t\t *\n\t\t */\n\t\t\"renderer\": null\n\t};\n\t\n\t_fnHungarianMap( DataTable.defaults );\n\t\n\t\n\t\n\t/*\n\t * Developer note - See note in model.defaults.js about the use of Hungarian\n\t * notation and camel case.\n\t */\n\t\n\t/**\n\t * Column options that can be given to DataTables at initialisation time.\n\t *  @namespace\n\t */\n\tDataTable.defaults.column = {\n\t\t/**\n\t\t * Define which column(s) an order will occur on for this column. This\n\t\t * allows a column's ordering to take multiple columns into account when\n\t\t * doing a sort or use the data from a different column. For example first\n\t\t * name / last name columns make sense to do a multi-column sort over the\n\t\t * two columns.\n\t\t *  @type array|int\n\t\t *  @default null <i>Takes the value of the column index automatically</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderData\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderData\": [ 0, 1 ], \"targets\": [ 0 ] },\n\t\t *          { \"orderData\": [ 1, 0 ], \"targets\": [ 1 ] },\n\t\t *          { \"orderData\": 2, \"targets\": [ 2 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"orderData\": [ 0, 1 ] },\n\t\t *          { \"orderData\": [ 1, 0 ] },\n\t\t *          { \"orderData\": 2 },\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aDataSort\": null,\n\t\t\"iDataSort\": -1,\n\t\n\t\n\t\t/**\n\t\t * You can control the default ordering direction, and even alter the\n\t\t * behaviour of the sort handler (i.e. only allow ascending ordering etc)\n\t\t * using this parameter.\n\t\t *  @type array\n\t\t *  @default [ 'asc', 'desc' ]\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderSequence\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderSequence\": [ \"asc\" ], \"targets\": [ 1 ] },\n\t\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ], \"targets\": [ 2 ] },\n\t\t *          { \"orderSequence\": [ \"desc\" ], \"targets\": [ 3 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          { \"orderSequence\": [ \"asc\" ] },\n\t\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ] },\n\t\t *          { \"orderSequence\": [ \"desc\" ] },\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"asSorting\": [ 'asc', 'desc' ],\n\t\n\t\n\t\t/**\n\t\t * Enable or disable filtering on the data in this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.searchable\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"searchable\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"searchable\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bSearchable\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable ordering on this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderable\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderable\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"orderable\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortable\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the display of this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.visible\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"visible\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"visible\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bVisible\": true,\n\t\n\t\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t *  @type function\n\t\t *  @param {element} td The TD node that has been created\n\t\t *  @param {*} cellData The Data for the cell\n\t\t *  @param {array|object} rowData The data for the whole row\n\t\t *  @param {int} row The row index for the aoData data store\n\t\t *  @param {int} col The column index for aoColumns\n\t\t *\n\t\t *  @name DataTable.defaults.column.createdCell\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [3],\n\t\t *          \"createdCell\": function (td, cellData, rowData, row, col) {\n\t\t *            if ( cellData == \"1.7\" ) {\n\t\t *              $(td).css('color', 'blue')\n\t\t *            }\n\t\t *          }\n\t\t *        } ]\n\t\t *      });\n\t\t *    } );\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter has been replaced by `data` in DataTables to ensure naming\n\t\t * consistency. `dataProp` can still be used, as there is backwards\n\t\t * compatibility in DataTables for this option, but it is strongly\n\t\t * recommended that you use `data` in preference to `dataProp`.\n\t\t *  @name DataTable.defaults.column.dataProp\n\t\t */\n\t\n\t\n\t\t/**\n\t\t * This property can be used to read data from any data source property,\n\t\t * including deeply nested objects / properties. `data` can be given in a\n\t\t * number of different ways which effect its behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t\t *      Javascript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object. Note that\n\t\t *      function notation is recommended for use in `render` rather than\n\t\t *      `data` as it is much simpler to use as a renderer.\n\t\t * * `null` - use the original data source for the row rather than plucking\n\t\t *   data directly from it. This action has effects on two other\n\t\t *   initialisation options:\n\t\t *    * `defaultContent` - When null is given as the `data` option and\n\t\t *      `defaultContent` is specified for the column, the value defined by\n\t\t *      `defaultContent` will be used for the cell.\n\t\t *    * `render` - When null is used for the `data` option and the `render`\n\t\t *      option is specified for the column, the whole data source for the\n\t\t *      row is used for the renderer.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * `{array|object}` The data source for the row\n\t\t *      * `{string}` The type call data requested - this will be 'set' when\n\t\t *        setting data or 'filter', 'display', 'type', 'sort' or undefined\n\t\t *        when gathering data. Note that when `undefined` is given for the\n\t\t *        type DataTables expects to get the raw data for the object back<\n\t\t *      * `{*}` Data to set when the second parameter is 'set'.\n\t\t *    * Return:\n\t\t *      * The return value from the function is not required when 'set' is\n\t\t *        the type of call, but otherwise the return is what will be used\n\t\t *        for the data requested.\n\t\t *\n\t\t * Note that `data` is a getter and setter option. If you just require\n\t\t * formatting of data for output, you will likely want to use `render` which\n\t\t * is simply a getter and thus simpler to use.\n\t\t *\n\t\t * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The\n\t\t * name change reflects the flexibility of this property and is consistent\n\t\t * with the naming of mRender. If 'mDataProp' is given, then it will still\n\t\t * be used by DataTables, as it automatically maps the old name to the new\n\t\t * if required.\n\t\t *\n\t\t *  @type string|int|function|null\n\t\t *  @default null <i>Use automatically calculated column index</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.data\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Read table data from objects\n\t\t *    // JSON structure for each row:\n\t\t *    //   {\n\t\t *    //      \"engine\": {value},\n\t\t *    //      \"browser\": {value},\n\t\t *    //      \"platform\": {value},\n\t\t *    //      \"version\": {value},\n\t\t *    //      \"grade\": {value}\n\t\t *    //   }\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/objects.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          { \"data\": \"platform\" },\n\t\t *          { \"data\": \"version\" },\n\t\t *          { \"data\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Read information from deeply nested objects\n\t\t *    // JSON structure for each row:\n\t\t *    //   {\n\t\t *    //      \"engine\": {value},\n\t\t *    //      \"browser\": {value},\n\t\t *    //      \"platform\": {\n\t\t *    //         \"inner\": {value}\n\t\t *    //      },\n\t\t *    //      \"details\": [\n\t\t *    //         {value}, {value}\n\t\t *    //      ]\n\t\t *    //   }\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          { \"data\": \"platform.inner\" },\n\t\t *          { \"data\": \"platform.details.0\" },\n\t\t *          { \"data\": \"platform.details.1\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `data` as a function to provide different information for\n\t\t *    // sorting, filtering and display. In this case, currency (price)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": function ( source, type, val ) {\n\t\t *            if (type === 'set') {\n\t\t *              source.price = val;\n\t\t *              // Store the computed dislay and filter values for efficiency\n\t\t *              source.price_display = val==\"\" ? \"\" : \"$\"+numberFormat(val);\n\t\t *              source.price_filter  = val==\"\" ? \"\" : \"$\"+numberFormat(val)+\" \"+val;\n\t\t *              return;\n\t\t *            }\n\t\t *            else if (type === 'display') {\n\t\t *              return source.price_display;\n\t\t *            }\n\t\t *            else if (type === 'filter') {\n\t\t *              return source.price_filter;\n\t\t *            }\n\t\t *            // 'sort', 'type' and undefined all just use the integer\n\t\t *            return source.price;\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using default content\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null,\n\t\t *          \"defaultContent\": \"Click to edit\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using array notation - outputting a list from an array\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": \"name[, ]\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t */\n\t\t\"mData\": null,\n\t\n\t\n\t\t/**\n\t\t * This property is the rendering partner to `data` and it is suggested that\n\t\t * when you want to manipulate data for display (including filtering,\n\t\t * sorting etc) without altering the underlying data for the table, use this\n\t\t * property. `render` can be considered to be the the read only companion to\n\t\t * `data` which is read / write (then as such more complex). Like `data`\n\t\t * this option can be given in a number of different ways to effect its\n\t\t * behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t\t *      Javascript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object.\n\t\t * * `object` - use different data for the different data types requested by\n\t\t *   DataTables ('filter', 'display', 'type' or 'sort'). The property names\n\t\t *   of the object is the data type the property refers to and the value can\n\t\t *   defined using an integer, string or function using the same rules as\n\t\t *   `render` normally does. Note that an `_` option _must_ be specified.\n\t\t *   This is the default value to use if you haven't specified a value for\n\t\t *   the data type requested by DataTables.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * {array|object} The data source for the row (based on `data`)\n\t\t *      * {string} The type call data requested - this will be 'filter',\n\t\t *        'display', 'type' or 'sort'.\n\t\t *      * {array|object} The full data source for the row (not based on\n\t\t *        `data`)\n\t\t *    * Return:\n\t\t *      * The return value from the function is what will be used for the\n\t\t *        data requested.\n\t\t *\n\t\t *  @type string|int|function|object|null\n\t\t *  @default null Use the data source value.\n\t\t *\n\t\t *  @name DataTable.defaults.column.render\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Create a comma separated list from an array of objects\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          {\n\t\t *            \"data\": \"platform\",\n\t\t *            \"render\": \"[, ].name\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Execute a function to obtain data\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t\t *          \"render\": \"browserName()\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // As an object, extracting different data for the different types\n\t\t *    // This would be used with a data source such as:\n\t\t *    //   { \"phone\": 5552368, \"phone_filter\": \"5552368 555-2368\", \"phone_display\": \"555-2368\" }\n\t\t *    // Here the `phone` integer is used for sorting and type detection, while `phone_filter`\n\t\t *    // (which has both forms) is used for filtering for if a user inputs either format, while\n\t\t *    // the formatted phone number is the one that is shown in the table.\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t\t *          \"render\": {\n\t\t *            \"_\": \"phone\",\n\t\t *            \"filter\": \"phone_filter\",\n\t\t *            \"display\": \"phone_display\"\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Use as a function to create a link from the data source\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": \"download_link\",\n\t\t *          \"render\": function ( data, type, full ) {\n\t\t *            return '<a href=\"'+data+'\">Download</a>';\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"mRender\": null,\n\t\n\t\n\t\t/**\n\t\t * Change the cell type created for the column - either TD cells or TH cells. This\n\t\t * can be useful as TH cells have semantic meaning in the table body, allowing them\n\t\t * to act as a header for a row (you may wish to add scope='row' to the TH elements).\n\t\t *  @type string\n\t\t *  @default td\n\t\t *\n\t\t *  @name DataTable.defaults.column.cellType\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Make the first column use TH cells\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"cellType\": \"th\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sCellType\": \"td\",\n\t\n\t\n\t\t/**\n\t\t * Class to give to each cell in this column.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.class\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"class\": \"my_class\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"class\": \"my_class\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sClass\": \"\",\n\t\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t * Generally you shouldn't need this!\n\t\t *  @type string\n\t\t *  @default <i>Empty string<i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.contentPadding\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          {\n\t\t *            \"contentPadding\": \"mmm\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sContentPadding\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because `data`\n\t\t * is set to null, or because the data source itself is null).\n\t\t *  @type string\n\t\t *  @default null\n\t\t *\n\t\t *  @name DataTable.defaults.column.defaultContent\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          {\n\t\t *            \"data\": null,\n\t\t *            \"defaultContent\": \"Edit\",\n\t\t *            \"targets\": [ -1 ]\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          {\n\t\t *            \"data\": null,\n\t\t *            \"defaultContent\": \"Edit\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDefaultContent\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter is only used in DataTables' server-side processing. It can\n\t\t * be exceptionally useful to know what columns are being displayed on the\n\t\t * client side, and to map these to database fields. When defined, the names\n\t\t * also allow DataTables to reorder information from the server if it comes\n\t\t * back in an unexpected order (i.e. if you switch your columns around on the\n\t\t * client-side, your server-side code does not also need updating).\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.name\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"name\": \"engine\", \"targets\": [ 0 ] },\n\t\t *          { \"name\": \"browser\", \"targets\": [ 1 ] },\n\t\t *          { \"name\": \"platform\", \"targets\": [ 2 ] },\n\t\t *          { \"name\": \"version\", \"targets\": [ 3 ] },\n\t\t *          { \"name\": \"grade\", \"targets\": [ 4 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"name\": \"engine\" },\n\t\t *          { \"name\": \"browser\" },\n\t\t *          { \"name\": \"platform\" },\n\t\t *          { \"name\": \"version\" },\n\t\t *          { \"name\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sName\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Defines a data source type for the ordering which can be used to read\n\t\t * real-time information from the table (updating the internally cached\n\t\t * version) prior to ordering. This allows ordering to occur on user\n\t\t * editable elements such as form inputs.\n\t\t *  @type string\n\t\t *  @default std\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderDataType\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderDataType\": \"dom-text\", \"targets\": [ 2, 3 ] },\n\t\t *          { \"type\": \"numeric\", \"targets\": [ 3 ] },\n\t\t *          { \"orderDataType\": \"dom-select\", \"targets\": [ 4 ] },\n\t\t *          { \"orderDataType\": \"dom-checkbox\", \"targets\": [ 5 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          { \"orderDataType\": \"dom-text\" },\n\t\t *          { \"orderDataType\": \"dom-text\", \"type\": \"numeric\" },\n\t\t *          { \"orderDataType\": \"dom-select\" },\n\t\t *          { \"orderDataType\": \"dom-checkbox\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sSortDataType\": \"std\",\n\t\n\t\n\t\t/**\n\t\t * The title of this column.\n\t\t *  @type string\n\t\t *  @default null <i>Derived from the 'TH' value for this column in the\n\t\t *    original HTML table.</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.title\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"title\": \"My column title\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"My column title\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sTitle\": null,\n\t\n\t\n\t\t/**\n\t\t * The type allows you to specify how the data for this column will be\n\t\t * ordered. Four types (string, numeric, date and html (which will strip\n\t\t * HTML tags before ordering)) are currently available. Note that only date\n\t\t * formats understood by Javascript's Date() object will be accepted as type\n\t\t * date. For example: \"Mar 26, 2008 5:03 PM\". May take the values: 'string',\n\t\t * 'numeric', 'date' or 'html' (by default). Further types can be adding\n\t\t * through plug-ins.\n\t\t *  @type string\n\t\t *  @default null <i>Auto-detected from raw data</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.type\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"type\": \"html\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"type\": \"html\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sType\": null,\n\t\n\t\n\t\t/**\n\t\t * Defining the width of the column, this parameter may take any CSS value\n\t\t * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not\n\t\t * been given a specific width through this interface ensuring that the table\n\t\t * remains readable.\n\t\t *  @type string\n\t\t *  @default null <i>Automatic</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.width\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"width\": \"20%\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"width\": \"20%\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sWidth\": null\n\t};\n\t\n\t_fnHungarianMap( DataTable.defaults.column );\n\t\n\t\n\t\n\t/**\n\t * DataTables settings object - this holds all the information needed for a\n\t * given table, including configuration, data and current application of the\n\t * table options. DataTables does not have a single instance for each DataTable\n\t * with the settings attached to that instance, but rather instances of the\n\t * DataTable \"class\" are created on-the-fly as needed (typically by a\n\t * $().dataTable() call) and the settings object is then applied to that\n\t * instance.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults} but this\n\t * one is the internal data store for DataTables's cache of columns. It should\n\t * NOT be manipulated outside of DataTables. Any configuration should be done\n\t * through the initialisation options.\n\t *  @namespace\n\t *  @todo Really should attach the settings object to individual instances so we\n\t *    don't need to create new instances on each $().dataTable() call (if the\n\t *    table already exists). It would also save passing oSettings around and\n\t *    into every single function. However, this is a very significant\n\t *    architecture change for DataTables and will almost certainly break\n\t *    backwards compatibility with older installations. This is something that\n\t *    will be done in 2.0.\n\t */\n\tDataTable.models.oSettings = {\n\t\t/**\n\t\t * Primary features of DataTables and their enablement state.\n\t\t *  @namespace\n\t\t */\n\t\t\"oFeatures\": {\n\t\n\t\t\t/**\n\t\t\t * Flag to say if DataTables should automatically try to calculate the\n\t\t\t * optimum table and columns widths (true) or not (false).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bAutoWidth\": null,\n\t\n\t\t\t/**\n\t\t\t * Delay the creation of TR and TD elements until they are actually\n\t\t\t * needed by a driven page draw. This can give a significant speed\n\t\t\t * increase for Ajax source and Javascript source data, but makes no\n\t\t\t * difference at all fro DOM and server-side processing tables.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bDeferRender\": null,\n\t\n\t\t\t/**\n\t\t\t * Enable filtering on the table or not. Note that if this is disabled\n\t\t\t * then there is no filtering at all on the table, including fnFilter.\n\t\t\t * To just remove the filtering input use sDom and remove the 'f' option.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bFilter\": null,\n\t\n\t\t\t/**\n\t\t\t * Table information element (the 'Showing x of y records' div) enable\n\t\t\t * flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bInfo\": null,\n\t\n\t\t\t/**\n\t\t\t * Present a user control allowing the end user to change the page size\n\t\t\t * when pagination is enabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bLengthChange\": null,\n\t\n\t\t\t/**\n\t\t\t * Pagination enabled or not. Note that if this is disabled then length\n\t\t\t * changing must also be disabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bPaginate\": null,\n\t\n\t\t\t/**\n\t\t\t * Processing indicator enable flag whenever DataTables is enacting a\n\t\t\t * user request - typically an Ajax request for server-side processing.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bProcessing\": null,\n\t\n\t\t\t/**\n\t\t\t * Server-side processing enabled flag - when enabled DataTables will\n\t\t\t * get all data from the server for every draw - there is no filtering,\n\t\t\t * sorting or paging done on the client-side.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bServerSide\": null,\n\t\n\t\t\t/**\n\t\t\t * Sorting enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSort\": null,\n\t\n\t\t\t/**\n\t\t\t * Multi-column sorting\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSortMulti\": null,\n\t\n\t\t\t/**\n\t\t\t * Apply a class to the columns which are being sorted to provide a\n\t\t\t * visual highlight or not. This can slow things down when enabled since\n\t\t\t * there is a lot of DOM interaction.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSortClasses\": null,\n\t\n\t\t\t/**\n\t\t\t * State saving enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bStateSave\": null\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Scrolling settings for a table.\n\t\t *  @namespace\n\t\t */\n\t\t\"oScroll\": {\n\t\t\t/**\n\t\t\t * When the table is shorter in height than sScrollY, collapse the\n\t\t\t * table container down to the height of the table (when true).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bCollapse\": null,\n\t\n\t\t\t/**\n\t\t\t * Width of the scrollbar for the web-browser's platform. Calculated\n\t\t\t * during table initialisation.\n\t\t\t *  @type int\n\t\t\t *  @default 0\n\t\t\t */\n\t\t\t\"iBarWidth\": 0,\n\t\n\t\t\t/**\n\t\t\t * Viewport width for horizontal scrolling. Horizontal scrolling is\n\t\t\t * disabled if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t */\n\t\t\t\"sX\": null,\n\t\n\t\t\t/**\n\t\t\t * Width to expand the table to when using x-scrolling. Typically you\n\t\t\t * should not need to use this.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t *  @deprecated\n\t\t\t */\n\t\t\t\"sXInner\": null,\n\t\n\t\t\t/**\n\t\t\t * Viewport height for vertical scrolling. Vertical scrolling is disabled\n\t\t\t * if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t */\n\t\t\t\"sY\": null\n\t\t},\n\t\n\t\t/**\n\t\t * Language information for the table.\n\t\t *  @namespace\n\t\t *  @extends DataTable.defaults.oLanguage\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Information callback function. See\n\t\t\t * {@link DataTable.defaults.fnInfoCallback}\n\t\t\t *  @type function\n\t\t\t *  @default null\n\t\t\t */\n\t\t\t\"fnInfoCallback\": null\n\t\t},\n\t\n\t\t/**\n\t\t * Browser support parameters\n\t\t *  @namespace\n\t\t */\n\t\t\"oBrowser\": {\n\t\t\t/**\n\t\t\t * Indicate if the browser incorrectly calculates width:100% inside a\n\t\t\t * scrolling element (IE6/7)\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bScrollOversize\": false,\n\t\n\t\t\t/**\n\t\t\t * Determine if the vertical scrollbar is on the right or left of the\n\t\t\t * scrolling container - needed for rtl language layout, although not\n\t\t\t * all browsers move the scrollbar (Safari).\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bScrollbarLeft\": false\n\t\t},\n\t\n\t\n\t\t\"ajax\": null,\n\t\n\t\n\t\t/**\n\t\t * Array referencing the nodes which are used for the features. The\n\t\t * parameters of this object match what is allowed by sDom - i.e.\n\t\t *   <ul>\n\t\t *     <li>'l' - Length changing</li>\n\t\t *     <li>'f' - Filtering input</li>\n\t\t *     <li>'t' - The table!</li>\n\t\t *     <li>'i' - Information</li>\n\t\t *     <li>'p' - Pagination</li>\n\t\t *     <li>'r' - pRocessing</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aanFeatures\": [],\n\t\n\t\t/**\n\t\t * Store data information - see {@link DataTable.models.oRow} for detailed\n\t\t * information.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoData\": [],\n\t\n\t\t/**\n\t\t * Array of indexes which are in the current display (after filtering etc)\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aiDisplay\": [],\n\t\n\t\t/**\n\t\t * Array of indexes for display - no filtering\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aiDisplayMaster\": [],\n\t\n\t\t/**\n\t\t * Store information about each column that is in use\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoColumns\": [],\n\t\n\t\t/**\n\t\t * Store information about the table's header\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoHeader\": [],\n\t\n\t\t/**\n\t\t * Store information about the table's footer\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoFooter\": [],\n\t\n\t\t/**\n\t\t * Store the applied global search information in case we want to force a\n\t\t * research or compare the old search to a new one.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @namespace\n\t\t *  @extends DataTable.models.oSearch\n\t\t */\n\t\t\"oPreviousSearch\": {},\n\t\n\t\t/**\n\t\t * Store the applied search for each column - see\n\t\t * {@link DataTable.models.oSearch} for the format that is used for the\n\t\t * filtering information for each column.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoPreSearchCols\": [],\n\t\n\t\t/**\n\t\t * Sorting that is applied to the table. Note that the inner arrays are\n\t\t * used in the following manner:\n\t\t * <ul>\n\t\t *   <li>Index 0 - column number</li>\n\t\t *   <li>Index 1 - current sorting direction</li>\n\t\t * </ul>\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @todo These inner arrays should really be objects\n\t\t */\n\t\t\"aaSorting\": null,\n\t\n\t\t/**\n\t\t * Sorting that is always applied to the table (i.e. prefixed in front of\n\t\t * aaSorting).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\t\n\t\t/**\n\t\t * Classes to use for the striping of a table.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"asStripeClasses\": null,\n\t\n\t\t/**\n\t\t * If restoring a table - we should restore its striping classes as well\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"asDestroyStripes\": [],\n\t\n\t\t/**\n\t\t * If restoring a table - we should restore its width\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"sDestroyWidth\": 0,\n\t\n\t\t/**\n\t\t * Callback functions array for every time a row is inserted (i.e. on a draw).\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoRowCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for the header on each draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoHeaderCallback\": [],\n\t\n\t\t/**\n\t\t * Callback function for the footer on each draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoFooterCallback\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for draw callback functions\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoDrawCallback\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for row created function\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoRowCreatedCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for just before the table is redrawn. A return of\n\t\t * false will be used to cancel the draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoPreDrawCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for when the table has been initialised.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoInitComplete\": [],\n\t\n\t\n\t\t/**\n\t\t * Callbacks for modifying the settings to be stored for state saving, prior to\n\t\t * saving state.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateSaveParams\": [],\n\t\n\t\t/**\n\t\t * Callbacks for modifying the settings that have been stored for state saving\n\t\t * prior to using the stored values to restore the state.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoadParams\": [],\n\t\n\t\t/**\n\t\t * Callbacks for operating on the settings object once the saved state has been\n\t\t * loaded\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoaded\": [],\n\t\n\t\t/**\n\t\t * Cache the table ID for quick access\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t */\n\t\t\"sTableId\": \"\",\n\t\n\t\t/**\n\t\t * The TABLE node for the main table\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTable\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the thead element\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTHead\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the tfoot element - if it exists\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTFoot\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the tbody element\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTBody\": null,\n\t\n\t\t/**\n\t\t * Cache the wrapper node (contains all DataTables controlled elements)\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTableWrapper\": null,\n\t\n\t\t/**\n\t\t * Indicate if when using server-side processing the loading of data\n\t\t * should be deferred until the second draw.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bDeferLoading\": false,\n\t\n\t\t/**\n\t\t * Indicate if all required information has been read in\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bInitialised\": false,\n\t\n\t\t/**\n\t\t * Information about open rows. Each object in the array has the parameters\n\t\t * 'nTr' and 'nParent'\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoOpenRows\": [],\n\t\n\t\t/**\n\t\t * Dictate the positioning of DataTables' control elements - see\n\t\t * {@link DataTable.model.oInit.sDom}.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sDom\": null,\n\t\n\t\t/**\n\t\t * Search delay (in mS)\n\t\t *  @type integer\n\t\t *  @default null\n\t\t */\n\t\t\"searchDelay\": null,\n\t\n\t\t/**\n\t\t * Which type of pagination should be used.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default two_button\n\t\t */\n\t\t\"sPaginationType\": \"two_button\",\n\t\n\t\t/**\n\t\t * The state duration (for `stateSave`) in seconds.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iStateDuration\": 0,\n\t\n\t\t/**\n\t\t * Array of callback functions for state saving. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the JSON string to save that has been thus far created. Returns\n\t\t *       a JSON string to be inserted into a json object\n\t\t *       (i.e. '\"param\": [ 0, 1, 2]')</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateSave\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for state loading. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the object stored. May return false to cancel state loading</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoad\": [],\n\t\n\t\t/**\n\t\t * State that was saved. Useful for back reference\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oSavedState\": null,\n\t\n\t\t/**\n\t\t * State that was loaded. Useful for back reference\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oLoadedState\": null,\n\t\n\t\t/**\n\t\t * Source url for AJAX data for the table.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sAjaxSource\": null,\n\t\n\t\t/**\n\t\t * Property from a given object from which to read the table data from. This\n\t\t * can be an empty string (when not server-side processing), in which case\n\t\t * it is  assumed an an array is given directly.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sAjaxDataProp\": null,\n\t\n\t\t/**\n\t\t * Note if draw should be blocked while getting data\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bAjaxDataGet\": true,\n\t\n\t\t/**\n\t\t * The last jQuery XHR object that was used for server-side data gathering.\n\t\t * This can be used for working with the XHR information in one of the\n\t\t * callbacks\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"jqXHR\": null,\n\t\n\t\t/**\n\t\t * JSON returned from the server in the last Ajax request\n\t\t *  @type object\n\t\t *  @default undefined\n\t\t */\n\t\t\"json\": undefined,\n\t\n\t\t/**\n\t\t * Data submitted as part of the last Ajax request\n\t\t *  @type object\n\t\t *  @default undefined\n\t\t */\n\t\t\"oAjaxData\": undefined,\n\t\n\t\t/**\n\t\t * Function to get the server-side data.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type function\n\t\t */\n\t\t\"fnServerData\": null,\n\t\n\t\t/**\n\t\t * Functions which are called prior to sending an Ajax request so extra\n\t\t * parameters can easily be sent to the server\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoServerParams\": [],\n\t\n\t\t/**\n\t\t * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if\n\t\t * required).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sServerMethod\": null,\n\t\n\t\t/**\n\t\t * Format numbers for display.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type function\n\t\t */\n\t\t\"fnFormatNumber\": null,\n\t\n\t\t/**\n\t\t * List of options that can be used for the user selectable length menu.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aLengthMenu\": null,\n\t\n\t\t/**\n\t\t * Counter for the draws that the table does. Also used as a tracker for\n\t\t * server-side processing\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iDraw\": 0,\n\t\n\t\t/**\n\t\t * Indicate if a redraw is being done - useful for Ajax\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bDrawing\": false,\n\t\n\t\t/**\n\t\t * Draw index (iDraw) of the last error when parsing the returned data\n\t\t *  @type int\n\t\t *  @default -1\n\t\t */\n\t\t\"iDrawError\": -1,\n\t\n\t\t/**\n\t\t * Paging display length\n\t\t *  @type int\n\t\t *  @default 10\n\t\t */\n\t\t\"_iDisplayLength\": 10,\n\t\n\t\t/**\n\t\t * Paging start point - aiDisplay index\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"_iDisplayStart\": 0,\n\t\n\t\t/**\n\t\t * Server-side processing - number of records in the result set\n\t\t * (i.e. before filtering), Use fnRecordsTotal rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *  @private\n\t\t */\n\t\t\"_iRecordsTotal\": 0,\n\t\n\t\t/**\n\t\t * Server-side processing - number of records in the current display set\n\t\t * (i.e. after filtering). Use fnRecordsDisplay rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t *  @type boolean\n\t\t *  @default 0\n\t\t *  @private\n\t\t */\n\t\t\"_iRecordsDisplay\": 0,\n\t\n\t\t/**\n\t\t * Flag to indicate if jQuery UI marking and classes should be used.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bJUI\": null,\n\t\n\t\t/**\n\t\t * The classes to use for the table\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"oClasses\": {},\n\t\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if filtering has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @deprecated\n\t\t */\n\t\t\"bFiltered\": false,\n\t\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if sorting has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @deprecated\n\t\t */\n\t\t\"bSorted\": false,\n\t\n\t\t/**\n\t\t * Indicate that if multiple rows are in the header and there is more than\n\t\t * one unique cell per column, if the top one (true) or bottom one (false)\n\t\t * should be used for sorting / title by DataTables.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortCellsTop\": null,\n\t\n\t\t/**\n\t\t * Initialisation object that is used for the table\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oInit\": null,\n\t\n\t\t/**\n\t\t * Destroy callback functions - for plug-ins to attach themselves to the\n\t\t * destroy so they can clean up markup and events.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoDestroyCallback\": [],\n\t\n\t\n\t\t/**\n\t\t * Get the number of records in the current record set, before filtering\n\t\t *  @type function\n\t\t */\n\t\t\"fnRecordsTotal\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsTotal * 1 :\n\t\t\t\tthis.aiDisplayMaster.length;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the number of records in the current record set, after filtering\n\t\t *  @type function\n\t\t */\n\t\t\"fnRecordsDisplay\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsDisplay * 1 :\n\t\t\t\tthis.aiDisplay.length;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the display end point - aiDisplay index\n\t\t *  @type function\n\t\t */\n\t\t\"fnDisplayEnd\": function ()\n\t\t{\n\t\t\tvar\n\t\t\t\tlen      = this._iDisplayLength,\n\t\t\t\tstart    = this._iDisplayStart,\n\t\t\t\tcalc     = start + len,\n\t\t\t\trecords  = this.aiDisplay.length,\n\t\t\t\tfeatures = this.oFeatures,\n\t\t\t\tpaginate = features.bPaginate;\n\t\n\t\t\tif ( features.bServerSide ) {\n\t\t\t\treturn paginate === false || len === -1 ?\n\t\t\t\t\tstart + records :\n\t\t\t\t\tMath.min( start+len, this._iRecordsDisplay );\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn ! paginate || calc>records || len===-1 ?\n\t\t\t\t\trecords :\n\t\t\t\t\tcalc;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * The DataTables object for this table\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oInstance\": null,\n\t\n\t\t/**\n\t\t * Unique identifier for each instance of the DataTables object. If there\n\t\t * is an ID on the table node, then it takes that value, otherwise an\n\t\t * incrementing internal counter is used.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sInstance\": null,\n\t\n\t\t/**\n\t\t * tabindex attribute value that is added to DataTables control elements, allowing\n\t\t * keyboard navigation of the table and its controls.\n\t\t */\n\t\t\"iTabIndex\": 0,\n\t\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollHead\": null,\n\t\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollFoot\": null,\n\t\n\t\t/**\n\t\t * Last applied sort\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aLastSort\": [],\n\t\n\t\t/**\n\t\t * Stored plug-in instances\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"oPlugins\": {}\n\t};\n\n\t/**\n\t * Extension object for DataTables that is used to provide all extension\n\t * options.\n\t *\n\t * Note that the `DataTable.ext` object is available through\n\t * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is\n\t * also aliased to `jQuery.fn.dataTableExt` for historic reasons.\n\t *  @namespace\n\t *  @extends DataTable.models.ext\n\t */\n\t\n\t\n\t/**\n\t * DataTables extensions\n\t * \n\t * This namespace acts as a collection area for plug-ins that can be used to\n\t * extend DataTables capabilities. Indeed many of the build in methods\n\t * use this method to provide their own capabilities (sorting methods for\n\t * example).\n\t *\n\t * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy\n\t * reasons\n\t *\n\t *  @namespace\n\t */\n\tDataTable.ext = _ext = {\n\t\t/**\n\t\t * Buttons. For use with the Buttons extension for DataTables. This is\n\t\t * defined here so other extensions can define buttons regardless of load\n\t\t * order. It is _not_ used by DataTables core.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tbuttons: {},\n\t\n\t\n\t\t/**\n\t\t * Element class names\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tclasses: {},\n\t\n\t\n\t\t/**\n\t\t * Error reporting.\n\t\t * \n\t\t * How should DataTables report an error. Can take the value 'alert',\n\t\t * 'throw', 'none' or a function.\n\t\t *\n\t\t *  @type string|function\n\t\t *  @default alert\n\t\t */\n\t\terrMode: \"alert\",\n\t\n\t\n\t\t/**\n\t\t * Feature plug-ins.\n\t\t * \n\t\t * This is an array of objects which describe the feature plug-ins that are\n\t\t * available to DataTables. These feature plug-ins are then available for\n\t\t * use through the `dom` initialisation option.\n\t\t * \n\t\t * Each feature plug-in is described by an object which must have the\n\t\t * following properties:\n\t\t * \n\t\t * * `fnInit` - function that is used to initialise the plug-in,\n\t\t * * `cFeature` - a character so the feature can be enabled by the `dom`\n\t\t *   instillation option. This is case sensitive.\n\t\t *\n\t\t * The `fnInit` function has the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t *\n\t\t * And the following return is expected:\n\t\t * \n\t\t * * {node|null} The element which contains your feature. Note that the\n\t\t *   return may also be void if your plug-in does not require to inject any\n\t\t *   DOM elements into DataTables control (`dom`) - for example this might\n\t\t *   be useful when developing a plug-in which allows table control via\n\t\t *   keyboard entry\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    $.fn.dataTable.ext.features.push( {\n\t\t *      \"fnInit\": function( oSettings ) {\n\t\t *        return new TableTools( { \"oDTSettings\": oSettings } );\n\t\t *      },\n\t\t *      \"cFeature\": \"T\"\n\t\t *    } );\n\t\t */\n\t\tfeature: [],\n\t\n\t\n\t\t/**\n\t\t * Row searching.\n\t\t * \n\t\t * This method of searching is complimentary to the default type based\n\t\t * searching, and a lot more comprehensive as it allows you complete control\n\t\t * over the searching logic. Each element in this array is a function\n\t\t * (parameters described below) that is called for every row in the table,\n\t\t * and your logic decides if it should be included in the searching data set\n\t\t * or not.\n\t\t *\n\t\t * Searching functions have the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{array|object}` Data for the row to be processed (same as the\n\t\t *    original format that was passed in as the data source, or an array\n\t\t *    from a DOM data source\n\t\t * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which\n\t\t *    can be useful to retrieve the `TR` element if you need DOM interaction.\n\t\t *\n\t\t * And the following return is expected:\n\t\t *\n\t\t * * {boolean} Include the row in the searched result set (true) or not\n\t\t *   (false)\n\t\t *\n\t\t * Note that as with the main search ability in DataTables, technically this\n\t\t * is \"filtering\", since it is subtractive. However, for consistency in\n\t\t * naming we call it searching here.\n\t\t *\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @example\n\t\t *    // The following example shows custom search being applied to the\n\t\t *    // fourth column (i.e. the data[3] index) based on two input values\n\t\t *    // from the end-user, matching the data in a certain range.\n\t\t *    $.fn.dataTable.ext.search.push(\n\t\t *      function( settings, data, dataIndex ) {\n\t\t *        var min = document.getElementById('min').value * 1;\n\t\t *        var max = document.getElementById('max').value * 1;\n\t\t *        var version = data[3] == \"-\" ? 0 : data[3]*1;\n\t\t *\n\t\t *        if ( min == \"\" && max == \"\" ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min == \"\" && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && \"\" == max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        return false;\n\t\t *      }\n\t\t *    );\n\t\t */\n\t\tsearch: [],\n\t\n\t\n\t\t/**\n\t\t * Selector extensions\n\t\t *\n\t\t * The `selector` option can be used to extend the options available for the\n\t\t * selector modifier options (`selector-modifier` object data type) that\n\t\t * each of the three built in selector types offer (row, column and cell +\n\t\t * their plural counterparts). For example the Select extension uses this\n\t\t * mechanism to provide an option to select only rows, columns and cells\n\t\t * that have been marked as selected by the end user (`{selected: true}`),\n\t\t * which can be used in conjunction with the existing built in selector\n\t\t * options.\n\t\t *\n\t\t * Each property is an array to which functions can be pushed. The functions\n\t\t * take three attributes:\n\t\t *\n\t\t * * Settings object for the host table\n\t\t * * Options object (`selector-modifier` object type)\n\t\t * * Array of selected item indexes\n\t\t *\n\t\t * The return is an array of the resulting item indexes after the custom\n\t\t * selector has been applied.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tselector: {\n\t\t\tcell: [],\n\t\t\tcolumn: [],\n\t\t\trow: []\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Internal functions, exposed for used in plug-ins.\n\t\t * \n\t\t * Please note that you should not need to use the internal methods for\n\t\t * anything other than a plug-in (and even then, try to avoid if possible).\n\t\t * The internal function may change between releases.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tinternal: {},\n\t\n\t\n\t\t/**\n\t\t * Legacy configuration options. Enable and disable legacy options that\n\t\t * are available in DataTables.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tlegacy: {\n\t\t\t/**\n\t\t\t * Enable / disable DataTables 1.9 compatible server-side processing\n\t\t\t * requests\n\t\t\t *\n\t\t\t *  @type boolean\n\t\t\t *  @default null\n\t\t\t */\n\t\t\tajax: null\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Pagination plug-in methods.\n\t\t * \n\t\t * Each entry in this object is a function and defines which buttons should\n\t\t * be shown by the pagination rendering method that is used for the table:\n\t\t * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the\n\t\t * buttons are displayed in the document, while the functions here tell it\n\t\t * what buttons to display. This is done by returning an array of button\n\t\t * descriptions (what each button will do).\n\t\t *\n\t\t * Pagination types (the four built in options and any additional plug-in\n\t\t * options defined here) can be used through the `paginationType`\n\t\t * initialisation parameter.\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{int} page` The current page index\n\t\t * 2. `{int} pages` The number of pages in the table\n\t\t *\n\t\t * Each function is expected to return an array where each element of the\n\t\t * array can be one of:\n\t\t *\n\t\t * * `first` - Jump to first page when activated\n\t\t * * `last` - Jump to last page when activated\n\t\t * * `previous` - Show previous page when activated\n\t\t * * `next` - Show next page when activated\n\t\t * * `{int}` - Show page of the index given\n\t\t * * `{array}` - A nested array containing the above elements to add a\n\t\t *   containing 'DIV' element (might be useful for styling).\n\t\t *\n\t\t * Note that DataTables v1.9- used this object slightly differently whereby\n\t\t * an object with two functions would be defined for each plug-in. That\n\t\t * ability is still supported by DataTables 1.10+ to provide backwards\n\t\t * compatibility, but this option of use is now decremented and no longer\n\t\t * documented in DataTables 1.10+.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t *\n\t\t *  @example\n\t\t *    // Show previous, next and current page buttons only\n\t\t *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {\n\t\t *      return [ 'previous', page, 'next' ];\n\t\t *    };\n\t\t */\n\t\tpager: {},\n\t\n\t\n\t\trenderer: {\n\t\t\tpageButton: {},\n\t\t\theader: {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Ordering plug-ins - custom data source\n\t\t * \n\t\t * The extension options for ordering of data available here is complimentary\n\t\t * to the default type based ordering that DataTables typically uses. It\n\t\t * allows much greater control over the the data that is being used to\n\t\t * order a column, but is necessarily therefore more complex.\n\t\t * \n\t\t * This type of ordering is useful if you want to do ordering based on data\n\t\t * live from the DOM (for example the contents of an 'input' element) rather\n\t\t * than just the static string that DataTables knows of.\n\t\t * \n\t\t * The way these plug-ins work is that you create an array of the values you\n\t\t * wish to be ordering for the column in question and then return that\n\t\t * array. The data in the array much be in the index order of the rows in\n\t\t * the table (not the currently ordering order!). Which order data gathering\n\t\t * function is run here depends on the `dt-init columns.orderDataType`\n\t\t * parameter that is used for the column (if any).\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{int}` Target column index\n\t\t *\n\t\t * Each function is expected to return an array:\n\t\t *\n\t\t * * `{array}` Data for the column to be ordering upon\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    // Ordering using `input` node values\n\t\t *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )\n\t\t *    {\n\t\t *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {\n\t\t *        return $('input', td).val();\n\t\t *      } );\n\t\t *    }\n\t\t */\n\t\torder: {},\n\t\n\t\n\t\t/**\n\t\t * Type based plug-ins.\n\t\t *\n\t\t * Each column in DataTables has a type assigned to it, either by automatic\n\t\t * detection or by direct assignment using the `type` option for the column.\n\t\t * The type of a column will effect how it is ordering and search (plug-ins\n\t\t * can also make use of the column type if required).\n\t\t *\n\t\t * @namespace\n\t\t */\n\t\ttype: {\n\t\t\t/**\n\t\t\t * Type detection functions.\n\t\t\t *\n\t\t\t * The functions defined in this object are used to automatically detect\n\t\t\t * a column's type, making initialisation of DataTables super easy, even\n\t\t\t * when complex data is in the table.\n\t\t\t *\n\t\t\t * The functions defined take two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be analysed\n\t\t     *  2. `{settings}` DataTables settings object. This can be used to\n\t\t     *     perform context specific type detection - for example detection\n\t\t     *     based on language settings such as using a comma for a decimal\n\t\t     *     place. Generally speaking the options from the settings will not\n\t\t     *     be required\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Data type detected, or null if unknown (and thus\n\t\t\t *   pass it on to the other type detection functions.\n\t\t\t *\n\t\t\t *  @type array\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Currency type detection plug-in:\n\t\t\t *    $.fn.dataTable.ext.type.detect.push(\n\t\t\t *      function ( data, settings ) {\n\t\t\t *        // Check the numeric part\n\t\t\t *        if ( ! $.isNumeric( data.substring(1) ) ) {\n\t\t\t *          return null;\n\t\t\t *        }\n\t\t\t *\n\t\t\t *        // Check prefixed by currency\n\t\t\t *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {\n\t\t\t *          return 'currency';\n\t\t\t *        }\n\t\t\t *        return null;\n\t\t\t *      }\n\t\t\t *    );\n\t\t\t */\n\t\t\tdetect: [],\n\t\n\t\n\t\t\t/**\n\t\t\t * Type based search formatting.\n\t\t\t *\n\t\t\t * The type based searching functions can be used to pre-format the\n\t\t\t * data to be search on. For example, it can be used to strip HTML\n\t\t\t * tags or to de-format telephone numbers for numeric only searching.\n\t\t\t *\n\t\t\t * Note that is a search is not defined for a column of a given type,\n\t\t\t * no search formatting will be performed.\n\t\t\t * \n\t\t\t * Pre-processing of searching data plug-ins - When you assign the sType\n\t\t\t * for a column (or have it automatically detected for you by DataTables\n\t\t\t * or a type detection plug-in), you will typically be using this for\n\t\t\t * custom sorting, but it can also be used to provide custom searching\n\t\t\t * by allowing you to pre-processing the data and returning the data in\n\t\t\t * the format that should be searched upon. This is done by adding\n\t\t\t * functions this object with a parameter name which matches the sType\n\t\t\t * for that target column. This is the corollary of <i>afnSortData</i>\n\t\t\t * for searching data.\n\t\t\t *\n\t\t\t * The functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for searching\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Formatted string that will be used for the searching.\n\t\t\t *\n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {\n\t\t\t *      return d.replace(/\\n/g,\" \").replace( /<.*?>/g, \"\" );\n\t\t\t *    }\n\t\t\t */\n\t\t\tsearch: {},\n\t\n\t\n\t\t\t/**\n\t\t\t * Type based ordering.\n\t\t\t *\n\t\t\t * The column type tells DataTables what ordering to apply to the table\n\t\t\t * when a column is sorted upon. The order for each type that is defined,\n\t\t\t * is defined by the functions available in this object.\n\t\t\t *\n\t\t\t * Each ordering option can be described by three properties added to\n\t\t\t * this object:\n\t\t\t *\n\t\t\t * * `{type}-pre` - Pre-formatting function\n\t\t\t * * `{type}-asc` - Ascending order function\n\t\t\t * * `{type}-desc` - Descending order function\n\t\t\t *\n\t\t\t * All three can be used together, only `{type}-pre` or only\n\t\t\t * `{type}-asc` and `{type}-desc` together. It is generally recommended\n\t\t\t * that only `{type}-pre` is used, as this provides the optimal\n\t\t\t * implementation in terms of speed, although the others are provided\n\t\t\t * for compatibility with existing Javascript sort functions.\n\t\t\t *\n\t\t\t * `{type}-pre`: Functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for ordering\n\t\t\t *\n\t\t\t * And return:\n\t\t\t *\n\t\t\t * * `{*}` Data to be sorted upon\n\t\t\t *\n\t\t\t * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort\n\t\t\t * functions, taking two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data to compare to the second parameter\n\t\t     *  2. `{*}` Data to compare to the first parameter\n\t\t\t *\n\t\t\t * And returning:\n\t\t\t *\n\t\t\t * * `{*}` Ordering match: <0 if first parameter should be sorted lower\n\t\t\t *   than the second parameter, ===0 if the two parameters are equal and\n\t\t\t *   >0 if the first parameter should be sorted height than the second\n\t\t\t *   parameter.\n\t\t\t * \n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Numeric ordering of formatted numbers with a pre-formatter\n\t\t\t *    $.extend( $.fn.dataTable.ext.type.order, {\n\t\t\t *      \"string-pre\": function(x) {\n\t\t\t *        a = (a === \"-\" || a === \"\") ? 0 : a.replace( /[^\\d\\-\\.]/g, \"\" );\n\t\t\t *        return parseFloat( a );\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Case-sensitive string ordering, with no pre-formatting method\n\t\t\t *    $.extend( $.fn.dataTable.ext.order, {\n\t\t\t *      \"string-case-asc\": function(x,y) {\n\t\t\t *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t\t *      },\n\t\t\t *      \"string-case-desc\": function(x,y) {\n\t\t\t *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t */\n\t\t\torder: {}\n\t\t},\n\t\n\t\t/**\n\t\t * Unique DataTables instance counter\n\t\t *\n\t\t * @type int\n\t\t * @private\n\t\t */\n\t\t_unique: 0,\n\t\n\t\n\t\t//\n\t\t// Depreciated\n\t\t// The following properties are retained for backwards compatiblity only.\n\t\t// The should not be used in new projects and will be removed in a future\n\t\t// version\n\t\t//\n\t\n\t\t/**\n\t\t * Version check function.\n\t\t *  @type function\n\t\t *  @depreciated Since 1.10\n\t\t */\n\t\tfnVersionCheck: DataTable.fnVersionCheck,\n\t\n\t\n\t\t/**\n\t\t * Index for what 'this' index API functions should use\n\t\t *  @type int\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tiApiIndex: 0,\n\t\n\t\n\t\t/**\n\t\t * jQuery UI class container\n\t\t *  @type object\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\toJUIClasses: {},\n\t\n\t\n\t\t/**\n\t\t * Software version\n\t\t *  @type string\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tsVersion: DataTable.version\n\t};\n\t\n\t\n\t//\n\t// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts\n\t//\n\t$.extend( _ext, {\n\t\tafnFiltering: _ext.search,\n\t\taTypes:       _ext.type.detect,\n\t\tofnSearch:    _ext.type.search,\n\t\toSort:        _ext.type.order,\n\t\tafnSortData:  _ext.order,\n\t\taoFeatures:   _ext.feature,\n\t\toApi:         _ext.internal,\n\t\toStdClasses:  _ext.classes,\n\t\toPagination:  _ext.pager\n\t} );\n\t\n\t\n\t$.extend( DataTable.ext.classes, {\n\t\t\"sTable\": \"dataTable\",\n\t\t\"sNoFooter\": \"no-footer\",\n\t\n\t\t/* Paging buttons */\n\t\t\"sPageButton\": \"paginate_button\",\n\t\t\"sPageButtonActive\": \"current\",\n\t\t\"sPageButtonDisabled\": \"disabled\",\n\t\n\t\t/* Striping classes */\n\t\t\"sStripeOdd\": \"odd\",\n\t\t\"sStripeEven\": \"even\",\n\t\n\t\t/* Empty row */\n\t\t\"sRowEmpty\": \"dataTables_empty\",\n\t\n\t\t/* Features */\n\t\t\"sWrapper\": \"dataTables_wrapper\",\n\t\t\"sFilter\": \"dataTables_filter\",\n\t\t\"sInfo\": \"dataTables_info\",\n\t\t\"sPaging\": \"dataTables_paginate paging_\", /* Note that the type is postfixed */\n\t\t\"sLength\": \"dataTables_length\",\n\t\t\"sProcessing\": \"dataTables_processing\",\n\t\n\t\t/* Sorting */\n\t\t\"sSortAsc\": \"sorting_asc\",\n\t\t\"sSortDesc\": \"sorting_desc\",\n\t\t\"sSortable\": \"sorting\", /* Sortable in both directions */\n\t\t\"sSortableAsc\": \"sorting_asc_disabled\",\n\t\t\"sSortableDesc\": \"sorting_desc_disabled\",\n\t\t\"sSortableNone\": \"sorting_disabled\",\n\t\t\"sSortColumn\": \"sorting_\", /* Note that an int is postfixed for the sorting order */\n\t\n\t\t/* Filtering */\n\t\t\"sFilterInput\": \"\",\n\t\n\t\t/* Page length */\n\t\t\"sLengthSelect\": \"\",\n\t\n\t\t/* Scrolling */\n\t\t\"sScrollWrapper\": \"dataTables_scroll\",\n\t\t\"sScrollHead\": \"dataTables_scrollHead\",\n\t\t\"sScrollHeadInner\": \"dataTables_scrollHeadInner\",\n\t\t\"sScrollBody\": \"dataTables_scrollBody\",\n\t\t\"sScrollFoot\": \"dataTables_scrollFoot\",\n\t\t\"sScrollFootInner\": \"dataTables_scrollFootInner\",\n\t\n\t\t/* Misc */\n\t\t\"sHeaderTH\": \"\",\n\t\t\"sFooterTH\": \"\",\n\t\n\t\t// Deprecated\n\t\t\"sSortJUIAsc\": \"\",\n\t\t\"sSortJUIDesc\": \"\",\n\t\t\"sSortJUI\": \"\",\n\t\t\"sSortJUIAscAllowed\": \"\",\n\t\t\"sSortJUIDescAllowed\": \"\",\n\t\t\"sSortJUIWrapper\": \"\",\n\t\t\"sSortIcon\": \"\",\n\t\t\"sJUIHeader\": \"\",\n\t\t\"sJUIFooter\": \"\"\n\t} );\n\t\n\t\n\t(function() {\n\t\n\t// Reused strings for better compression. Closure compiler appears to have a\n\t// weird edge case where it is trying to expand strings rather than use the\n\t// variable version. This results in about 200 bytes being added, for very\n\t// little preference benefit since it this run on script load only.\n\tvar _empty = '';\n\t_empty = '';\n\t\n\tvar _stateDefault = _empty + 'ui-state-default';\n\tvar _sortIcon     = _empty + 'css_right ui-icon ui-icon-';\n\tvar _headerFooter = _empty + 'fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix';\n\t\n\t$.extend( DataTable.ext.oJUIClasses, DataTable.ext.classes, {\n\t\t/* Full numbers paging buttons */\n\t\t\"sPageButton\":         \"fg-button ui-button \"+_stateDefault,\n\t\t\"sPageButtonActive\":   \"ui-state-disabled\",\n\t\t\"sPageButtonDisabled\": \"ui-state-disabled\",\n\t\n\t\t/* Features */\n\t\t\"sPaging\": \"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi \"+\n\t\t\t\"ui-buttonset-multi paging_\", /* Note that the type is postfixed */\n\t\n\t\t/* Sorting */\n\t\t\"sSortAsc\":            _stateDefault+\" sorting_asc\",\n\t\t\"sSortDesc\":           _stateDefault+\" sorting_desc\",\n\t\t\"sSortable\":           _stateDefault+\" sorting\",\n\t\t\"sSortableAsc\":        _stateDefault+\" sorting_asc_disabled\",\n\t\t\"sSortableDesc\":       _stateDefault+\" sorting_desc_disabled\",\n\t\t\"sSortableNone\":       _stateDefault+\" sorting_disabled\",\n\t\t\"sSortJUIAsc\":         _sortIcon+\"triangle-1-n\",\n\t\t\"sSortJUIDesc\":        _sortIcon+\"triangle-1-s\",\n\t\t\"sSortJUI\":            _sortIcon+\"carat-2-n-s\",\n\t\t\"sSortJUIAscAllowed\":  _sortIcon+\"carat-1-n\",\n\t\t\"sSortJUIDescAllowed\": _sortIcon+\"carat-1-s\",\n\t\t\"sSortJUIWrapper\":     \"DataTables_sort_wrapper\",\n\t\t\"sSortIcon\":           \"DataTables_sort_icon\",\n\t\n\t\t/* Scrolling */\n\t\t\"sScrollHead\": \"dataTables_scrollHead \"+_stateDefault,\n\t\t\"sScrollFoot\": \"dataTables_scrollFoot \"+_stateDefault,\n\t\n\t\t/* Misc */\n\t\t\"sHeaderTH\":  _stateDefault,\n\t\t\"sFooterTH\":  _stateDefault,\n\t\t\"sJUIHeader\": _headerFooter+\" ui-corner-tl ui-corner-tr\",\n\t\t\"sJUIFooter\": _headerFooter+\" ui-corner-bl ui-corner-br\"\n\t} );\n\t\n\t}());\n\t\n\t\n\t\n\tvar extPagination = DataTable.ext.pager;\n\t\n\tfunction _numbers ( page, pages ) {\n\t\tvar\n\t\t\tnumbers = [],\n\t\t\tbuttons = extPagination.numbers_length,\n\t\t\thalf = Math.floor( buttons / 2 ),\n\t\t\ti = 1;\n\t\n\t\tif ( pages <= buttons ) {\n\t\t\tnumbers = _range( 0, pages );\n\t\t}\n\t\telse if ( page <= half ) {\n\t\t\tnumbers = _range( 0, buttons-2 );\n\t\t\tnumbers.push( 'ellipsis' );\n\t\t\tnumbers.push( pages-1 );\n\t\t}\n\t\telse if ( page >= pages - 1 - half ) {\n\t\t\tnumbers = _range( pages-(buttons-2), pages );\n\t\t\tnumbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6\n\t\t\tnumbers.splice( 0, 0, 0 );\n\t\t}\n\t\telse {\n\t\t\tnumbers = _range( page-half+2, page+half-1 );\n\t\t\tnumbers.push( 'ellipsis' );\n\t\t\tnumbers.push( pages-1 );\n\t\t\tnumbers.splice( 0, 0, 'ellipsis' );\n\t\t\tnumbers.splice( 0, 0, 0 );\n\t\t}\n\t\n\t\tnumbers.DT_el = 'span';\n\t\treturn numbers;\n\t}\n\t\n\t\n\t$.extend( extPagination, {\n\t\tsimple: function ( page, pages ) {\n\t\t\treturn [ 'previous', 'next' ];\n\t\t},\n\t\n\t\tfull: function ( page, pages ) {\n\t\t\treturn [  'first', 'previous', 'next', 'last' ];\n\t\t},\n\t\n\t\tsimple_numbers: function ( page, pages ) {\n\t\t\treturn [ 'previous', _numbers(page, pages), 'next' ];\n\t\t},\n\t\n\t\tfull_numbers: function ( page, pages ) {\n\t\t\treturn [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];\n\t\t},\n\t\n\t\t// For testing and plug-ins to use\n\t\t_numbers: _numbers,\n\t\n\t\t// Number of number buttons (including ellipsis) to show. _Must be odd!_\n\t\tnumbers_length: 7\n\t} );\n\t\n\t\n\t$.extend( true, DataTable.ext.renderer, {\n\t\tpageButton: {\n\t\t\t_: function ( settings, host, idx, buttons, page, pages ) {\n\t\t\t\tvar classes = settings.oClasses;\n\t\t\t\tvar lang = settings.oLanguage.oPaginate;\n\t\t\t\tvar btnDisplay, btnClass, counter=0;\n\t\n\t\t\t\tvar attach = function( container, buttons ) {\n\t\t\t\t\tvar i, ien, node, button;\n\t\t\t\t\tvar clickHandler = function ( e ) {\n\t\t\t\t\t\t_fnPageChange( settings, e.data.action, true );\n\t\t\t\t\t};\n\t\n\t\t\t\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\t\t\t\tbutton = buttons[i];\n\t\n\t\t\t\t\t\tif ( $.isArray( button ) ) {\n\t\t\t\t\t\t\tvar inner = $( '<'+(button.DT_el || 'div')+'/>' )\n\t\t\t\t\t\t\t\t.appendTo( container );\n\t\t\t\t\t\t\tattach( inner, button );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tbtnDisplay = '';\n\t\t\t\t\t\t\tbtnClass = '';\n\t\n\t\t\t\t\t\t\tswitch ( button ) {\n\t\t\t\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\t\t\t\tcontainer.append('<span class=\"ellipsis\">&#x2026;</span>');\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'first':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t\t\t\t'' : ' '+classes.sPageButtonDisabled);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t\t\t\t'' : ' '+classes.sPageButtonDisabled);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'next':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t\t\t\t'' : ' '+classes.sPageButtonDisabled);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'last':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t\t\t\t'' : ' '+classes.sPageButtonDisabled);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t\t\t\tclasses.sPageButtonActive : '';\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\t\t\t\tnode = $('<a>', {\n\t\t\t\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t\t\t'data-dt-idx': counter,\n\t\t\t\t\t\t\t\t\t\t'tabindex': settings.iTabIndex,\n\t\t\t\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t\t\t\t.appendTo( container );\n\t\n\t\t\t\t\t\t\t\t_fnBindAction(\n\t\t\t\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t\t\t\t);\n\t\n\t\t\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t\t// inside an iframe or frame. Try / catch the error. Not good for\n\t\t\t\t// accessibility, but neither are frames.\n\t\t\t\tvar activeEl;\n\t\n\t\t\t\ttry {\n\t\t\t\t\t// Because this approach is destroying and recreating the paging\n\t\t\t\t\t// elements, focus is lost on the select button which is bad for\n\t\t\t\t\t// accessibility. So we want to restore focus once the draw has\n\t\t\t\t\t// completed\n\t\t\t\t\tactiveEl = $(document.activeElement).data('dt-idx');\n\t\t\t\t}\n\t\t\t\tcatch (e) {}\n\t\n\t\t\t\tattach( $(host).empty(), buttons );\n\t\n\t\t\t\tif ( activeEl ) {\n\t\t\t\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).focus();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t\n\t\n\t// Built in type detection. See model.ext.aTypes for information about\n\t// what is required from this methods.\n\t$.extend( DataTable.ext.type.detect, [\n\t\t// Plain numbers - first since V8 detects some plain numbers as dates\n\t\t// e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal ) ? 'num'+decimal : null;\n\t\t},\n\t\n\t\t// Dates (only those recognised by the browser's Date.parse)\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\t// V8 will remove any unknown characters at the start and end of the\n\t\t\t// expression, leading to false matches such as `$245.12` or `10%` being\n\t\t\t// a valid date. See forum thread 18941 for detail.\n\t\t\tif ( d && !(d instanceof Date) && ( ! _re_date_start.test(d) || ! _re_date_end.test(d) ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar parsed = Date.parse(d);\n\t\t\treturn (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null;\n\t\t},\n\t\n\t\t// Formatted numbers\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal, true ) ? 'num-fmt'+decimal : null;\n\t\t},\n\t\n\t\t// HTML numeric\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal ) ? 'html-num'+decimal : null;\n\t\t},\n\t\n\t\t// HTML numeric, formatted\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal, true ) ? 'html-num-fmt'+decimal : null;\n\t\t},\n\t\n\t\t// HTML (this is strict checking - there must be html)\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\treturn _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1) ?\n\t\t\t\t'html' : null;\n\t\t}\n\t] );\n\t\n\t\n\t\n\t// Filter formatting functions. See model.ext.ofnSearch for information about\n\t// what is required from these methods.\n\t// \n\t// Note that additional search methods are added for the html numbers and\n\t// html formatted numbers by `_addNumericSort()` when we know what the decimal\n\t// place is\n\t\n\t\n\t$.extend( DataTable.ext.type.search, {\n\t\thtml: function ( data ) {\n\t\t\treturn _empty(data) ?\n\t\t\t\tdata :\n\t\t\t\ttypeof data === 'string' ?\n\t\t\t\t\tdata\n\t\t\t\t\t\t.replace( _re_new_lines, \" \" )\n\t\t\t\t\t\t.replace( _re_html, \"\" ) :\n\t\t\t\t\t'';\n\t\t},\n\t\n\t\tstring: function ( data ) {\n\t\t\treturn _empty(data) ?\n\t\t\t\tdata :\n\t\t\t\ttypeof data === 'string' ?\n\t\t\t\t\tdata.replace( _re_new_lines, \" \" ) :\n\t\t\t\t\tdata;\n\t\t}\n\t} );\n\t\n\t\n\t\n\tvar __numericReplace = function ( d, decimalPlace, re1, re2 ) {\n\t\tif ( d !== 0 && (!d || d === '-') ) {\n\t\t\treturn -Infinity;\n\t\t}\n\t\n\t\t// If a decimal place other than `.` is used, it needs to be given to the\n\t\t// function so we can detect it and replace with a `.` which is the only\n\t\t// decimal place Javascript recognises - it is not locale aware.\n\t\tif ( decimalPlace ) {\n\t\t\td = _numToDecimal( d, decimalPlace );\n\t\t}\n\t\n\t\tif ( d.replace ) {\n\t\t\tif ( re1 ) {\n\t\t\t\td = d.replace( re1, '' );\n\t\t\t}\n\t\n\t\t\tif ( re2 ) {\n\t\t\t\td = d.replace( re2, '' );\n\t\t\t}\n\t\t}\n\t\n\t\treturn d * 1;\n\t};\n\t\n\t\n\t// Add the numeric 'deformatting' functions for sorting and search. This is done\n\t// in a function to provide an easy ability for the language options to add\n\t// additional methods if a non-period decimal place is used.\n\tfunction _addNumericSort ( decimalPlace ) {\n\t\t$.each(\n\t\t\t{\n\t\t\t\t// Plain numbers\n\t\t\t\t\"num\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace );\n\t\t\t\t},\n\t\n\t\t\t\t// Formatted numbers\n\t\t\t\t\"num-fmt\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_formatted_numeric );\n\t\t\t\t},\n\t\n\t\t\t\t// HTML numeric\n\t\t\t\t\"html-num\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html );\n\t\t\t\t},\n\t\n\t\t\t\t// HTML numeric, formatted\n\t\t\t\t\"html-num-fmt\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html, _re_formatted_numeric );\n\t\t\t\t}\n\t\t\t},\n\t\t\tfunction ( key, fn ) {\n\t\t\t\t// Add the ordering method\n\t\t\t\t_ext.type.order[ key+decimalPlace+'-pre' ] = fn;\n\t\n\t\t\t\t// For HTML types add a search formatter that will strip the HTML\n\t\t\t\tif ( key.match(/^html\\-/) ) {\n\t\t\t\t\t_ext.type.search[ key+decimalPlace ] = _ext.type.search.html;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\t\n\t\n\t// Default sort methods\n\t$.extend( _ext.type.order, {\n\t\t// Dates\n\t\t\"date-pre\": function ( d ) {\n\t\t\treturn Date.parse( d ) || 0;\n\t\t},\n\t\n\t\t// html\n\t\t\"html-pre\": function ( a ) {\n\t\t\treturn _empty(a) ?\n\t\t\t\t'' :\n\t\t\t\ta.replace ?\n\t\t\t\t\ta.replace( /<.*?>/g, \"\" ).toLowerCase() :\n\t\t\t\t\ta+'';\n\t\t},\n\t\n\t\t// string\n\t\t\"string-pre\": function ( a ) {\n\t\t\t// This is a little complex, but faster than always calling toString,\n\t\t\t// http://jsperf.com/tostring-v-check\n\t\t\treturn _empty(a) ?\n\t\t\t\t'' :\n\t\t\t\ttypeof a === 'string' ?\n\t\t\t\t\ta.toLowerCase() :\n\t\t\t\t\t! a.toString ?\n\t\t\t\t\t\t'' :\n\t\t\t\t\t\ta.toString();\n\t\t},\n\t\n\t\t// string-asc and -desc are retained only for compatibility with the old\n\t\t// sort methods\n\t\t\"string-asc\": function ( x, y ) {\n\t\t\treturn ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t},\n\t\n\t\t\"string-desc\": function ( x, y ) {\n\t\t\treturn ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t}\n\t} );\n\t\n\t\n\t// Numeric sorting types - order doesn't matter here\n\t_addNumericSort( '' );\n\t\n\t\n\t$.extend( true, DataTable.ext.renderer, {\n\t\theader: {\n\t\t\t_: function ( settings, cell, column, classes ) {\n\t\t\t\t// No additional mark-up required\n\t\t\t\t// Attach a sort listener to update on sort - note that using the\n\t\t\t\t// `DT` namespace will allow the event to be removed automatically\n\t\t\t\t// on destroy, while the `dt` namespaced event is the one we are\n\t\t\t\t// listening for\n\t\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\t\tif ( settings !== ctx ) { // need to check this this is the host\n\t\t\t\t\t\treturn;               // table, not a nested one\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar colIdx = column.idx;\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\tcolumn.sSortingClass +' '+\n\t\t\t\t\t\t\tclasses.sSortAsc +' '+\n\t\t\t\t\t\t\tclasses.sSortDesc\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t},\n\t\n\t\t\tjqueryui: function ( settings, cell, column, classes ) {\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.addClass( classes.sSortJUIWrapper )\n\t\t\t\t\t.append( cell.contents() )\n\t\t\t\t\t.append( $('<span/>')\n\t\t\t\t\t\t.addClass( classes.sSortIcon+' '+column.sSortingClassJUI )\n\t\t\t\t\t)\n\t\t\t\t\t.appendTo( cell );\n\t\n\t\t\t\t// Attach a sort listener to update on sort\n\t\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar colIdx = column.idx;\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass( classes.sSortAsc +\" \"+classes.sSortDesc )\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t\t);\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.find( 'span.'+classes.sSortIcon )\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\tclasses.sSortJUIAsc +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIDesc +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUI +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIAscAllowed +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIDescAllowed\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortJUIAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortJUIDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClassJUI\n\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t/*\n\t * Public helper functions. These aren't used internally by DataTables, or\n\t * called by any of the options passed into DataTables, but they can be used\n\t * externally by developers working with DataTables. They are helper functions\n\t * to make working with DataTables a little bit easier.\n\t */\n\t\n\t/**\n\t * Helpers for `columns.render`.\n\t *\n\t * The options defined here can be used with the `columns.render` initialisation\n\t * option to provide a display renderer. The following functions are defined:\n\t *\n\t * * `number` - Will format numeric data (defined by `columns.data`) for\n\t *   display, retaining the original unformatted data for sorting and filtering.\n\t *   It takes 4 parameters:\n\t *   * `string` - Thousands grouping separator\n\t *   * `string` - Decimal point indicator\n\t *   * `integer` - Number of decimal points to show\n\t *   * `string` (optional) - Prefix.\n\t *\n\t * @example\n\t *   // Column definition using the number renderer\n\t *   {\n\t *     data: \"salary\",\n\t *     render: $.fn.dataTable.render.number( '\\'', '.', 0, '$' )\n\t *   }\n\t *\n\t * @namespace\n\t */\n\tDataTable.render = {\n\t\tnumber: function ( thousands, decimal, precision, prefix ) {\n\t\t\treturn {\n\t\t\t\tdisplay: function ( d ) {\n\t\t\t\t\tif ( typeof d !== 'number' && typeof d !== 'string' ) {\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar negative = d < 0 ? '-' : '';\n\t\t\t\t\td = Math.abs( parseFloat( d ) );\n\t\n\t\t\t\t\tvar intPart = parseInt( d, 10 );\n\t\t\t\t\tvar floatPart = precision ?\n\t\t\t\t\t\tdecimal+(d - intPart).toFixed( precision ).substring( 2 ):\n\t\t\t\t\t\t'';\n\t\n\t\t\t\t\treturn negative + (prefix||'') +\n\t\t\t\t\t\tintPart.toString().replace(\n\t\t\t\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g, thousands\n\t\t\t\t\t\t) +\n\t\t\t\t\t\tfloatPart;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n\t\n\t\n\t/*\n\t * This is really a good bit rubbish this method of exposing the internal methods\n\t * publicly... - To be fixed in 2.0 using methods on the prototype\n\t */\n\t\n\t\n\t/**\n\t * Create a wrapper function for exporting an internal functions to an external API.\n\t *  @param {string} fn API function name\n\t *  @returns {function} wrapped function\n\t *  @memberof DataTable#internal\n\t */\n\tfunction _fnExternApiFunc (fn)\n\t{\n\t\treturn function() {\n\t\t\tvar args = [_fnSettingsFromNode( this[DataTable.ext.iApiIndex] )].concat(\n\t\t\t\tArray.prototype.slice.call(arguments)\n\t\t\t);\n\t\t\treturn DataTable.ext.internal[fn].apply( this, args );\n\t\t};\n\t}\n\t\n\t\n\t/**\n\t * Reference to internal functions for use by plug-in developers. Note that\n\t * these methods are references to internal functions and are considered to be\n\t * private. If you use these methods, be aware that they are liable to change\n\t * between versions.\n\t *  @namespace\n\t */\n\t$.extend( DataTable.ext.internal, {\n\t\t_fnExternApiFunc: _fnExternApiFunc,\n\t\t_fnBuildAjax: _fnBuildAjax,\n\t\t_fnAjaxUpdate: _fnAjaxUpdate,\n\t\t_fnAjaxParameters: _fnAjaxParameters,\n\t\t_fnAjaxUpdateDraw: _fnAjaxUpdateDraw,\n\t\t_fnAjaxDataSrc: _fnAjaxDataSrc,\n\t\t_fnAddColumn: _fnAddColumn,\n\t\t_fnColumnOptions: _fnColumnOptions,\n\t\t_fnAdjustColumnSizing: _fnAdjustColumnSizing,\n\t\t_fnVisibleToColumnIndex: _fnVisibleToColumnIndex,\n\t\t_fnColumnIndexToVisible: _fnColumnIndexToVisible,\n\t\t_fnVisbleColumns: _fnVisbleColumns,\n\t\t_fnGetColumns: _fnGetColumns,\n\t\t_fnColumnTypes: _fnColumnTypes,\n\t\t_fnApplyColumnDefs: _fnApplyColumnDefs,\n\t\t_fnHungarianMap: _fnHungarianMap,\n\t\t_fnCamelToHungarian: _fnCamelToHungarian,\n\t\t_fnLanguageCompat: _fnLanguageCompat,\n\t\t_fnBrowserDetect: _fnBrowserDetect,\n\t\t_fnAddData: _fnAddData,\n\t\t_fnAddTr: _fnAddTr,\n\t\t_fnNodeToDataIndex: _fnNodeToDataIndex,\n\t\t_fnNodeToColumnIndex: _fnNodeToColumnIndex,\n\t\t_fnGetCellData: _fnGetCellData,\n\t\t_fnSetCellData: _fnSetCellData,\n\t\t_fnSplitObjNotation: _fnSplitObjNotation,\n\t\t_fnGetObjectDataFn: _fnGetObjectDataFn,\n\t\t_fnSetObjectDataFn: _fnSetObjectDataFn,\n\t\t_fnGetDataMaster: _fnGetDataMaster,\n\t\t_fnClearTable: _fnClearTable,\n\t\t_fnDeleteIndex: _fnDeleteIndex,\n\t\t_fnInvalidate: _fnInvalidate,\n\t\t_fnGetRowElements: _fnGetRowElements,\n\t\t_fnCreateTr: _fnCreateTr,\n\t\t_fnBuildHead: _fnBuildHead,\n\t\t_fnDrawHead: _fnDrawHead,\n\t\t_fnDraw: _fnDraw,\n\t\t_fnReDraw: _fnReDraw,\n\t\t_fnAddOptionsHtml: _fnAddOptionsHtml,\n\t\t_fnDetectHeader: _fnDetectHeader,\n\t\t_fnGetUniqueThs: _fnGetUniqueThs,\n\t\t_fnFeatureHtmlFilter: _fnFeatureHtmlFilter,\n\t\t_fnFilterComplete: _fnFilterComplete,\n\t\t_fnFilterCustom: _fnFilterCustom,\n\t\t_fnFilterColumn: _fnFilterColumn,\n\t\t_fnFilter: _fnFilter,\n\t\t_fnFilterCreateSearch: _fnFilterCreateSearch,\n\t\t_fnEscapeRegex: _fnEscapeRegex,\n\t\t_fnFilterData: _fnFilterData,\n\t\t_fnFeatureHtmlInfo: _fnFeatureHtmlInfo,\n\t\t_fnUpdateInfo: _fnUpdateInfo,\n\t\t_fnInfoMacros: _fnInfoMacros,\n\t\t_fnInitialise: _fnInitialise,\n\t\t_fnInitComplete: _fnInitComplete,\n\t\t_fnLengthChange: _fnLengthChange,\n\t\t_fnFeatureHtmlLength: _fnFeatureHtmlLength,\n\t\t_fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate,\n\t\t_fnPageChange: _fnPageChange,\n\t\t_fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing,\n\t\t_fnProcessingDisplay: _fnProcessingDisplay,\n\t\t_fnFeatureHtmlTable: _fnFeatureHtmlTable,\n\t\t_fnScrollDraw: _fnScrollDraw,\n\t\t_fnApplyToChildren: _fnApplyToChildren,\n\t\t_fnCalculateColumnWidths: _fnCalculateColumnWidths,\n\t\t_fnThrottle: _fnThrottle,\n\t\t_fnConvertToWidth: _fnConvertToWidth,\n\t\t_fnScrollingWidthAdjust: _fnScrollingWidthAdjust,\n\t\t_fnGetWidestNode: _fnGetWidestNode,\n\t\t_fnGetMaxLenString: _fnGetMaxLenString,\n\t\t_fnStringToCss: _fnStringToCss,\n\t\t_fnScrollBarWidth: _fnScrollBarWidth,\n\t\t_fnSortFlatten: _fnSortFlatten,\n\t\t_fnSort: _fnSort,\n\t\t_fnSortAria: _fnSortAria,\n\t\t_fnSortListener: _fnSortListener,\n\t\t_fnSortAttachListener: _fnSortAttachListener,\n\t\t_fnSortingClasses: _fnSortingClasses,\n\t\t_fnSortData: _fnSortData,\n\t\t_fnSaveState: _fnSaveState,\n\t\t_fnLoadState: _fnLoadState,\n\t\t_fnSettingsFromNode: _fnSettingsFromNode,\n\t\t_fnLog: _fnLog,\n\t\t_fnMap: _fnMap,\n\t\t_fnBindAction: _fnBindAction,\n\t\t_fnCallbackReg: _fnCallbackReg,\n\t\t_fnCallbackFire: _fnCallbackFire,\n\t\t_fnLengthOverflow: _fnLengthOverflow,\n\t\t_fnRenderer: _fnRenderer,\n\t\t_fnDataSource: _fnDataSource,\n\t\t_fnRowAttributes: _fnRowAttributes,\n\t\t_fnCalculateEnd: function () {} // Used by a lot of plug-ins, but redundant\n\t\t                                // in 1.10, so this dead-end function is\n\t\t                                // added to prevent errors\n\t} );\n\t\n\n\t// jQuery access\n\t$.fn.dataTable = DataTable;\n\n\t// Legacy aliases\n\t$.fn.dataTableSettings = DataTable.settings;\n\t$.fn.dataTableExt = DataTable.ext;\n\n\t// With a capital `D` we return a DataTables API instance rather than a\n\t// jQuery object\n\t$.fn.DataTable = function ( opts ) {\n\t\treturn $(this).dataTable( opts ).api();\n\t};\n\n\t// All properties that are available to $.fn.dataTable should also be\n\t// available on $.fn.DataTable\n\t$.each( DataTable, function ( prop, val ) {\n\t\t$.fn.DataTable[ prop ] = val;\n\t} );\n\n\n\t// Information about events fired by DataTables - for documentation.\n\t/**\n\t * Draw event, fired whenever the table is redrawn on the page, at the same\n\t * point as fnDrawCallback. This may be useful for binding events or\n\t * performing calculations when the table is altered at all.\n\t *  @name DataTable#draw.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Search event, fired when the searching applied to the table (using the\n\t * built-in global search, or column filters) is altered.\n\t *  @name DataTable#search.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Page change event, fired when the paging of the table is altered.\n\t *  @name DataTable#page.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Order event, fired when the ordering applied to the table is altered.\n\t *  @name DataTable#order.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * DataTables initialisation complete event, fired when the table is fully\n\t * drawn, including Ajax data loaded, if Ajax data is required.\n\t *  @name DataTable#init.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {object} json The JSON object request from the server - only\n\t *    present if client-side Ajax sourced data is used</li></ol>\n\t */\n\n\t/**\n\t * State save event, fired when the table has changed state a new state save\n\t * is required. This event allows modification of the state saving object\n\t * prior to actually doing the save, including addition or other state\n\t * properties (for plug-ins) or modification of a DataTables core property.\n\t *  @name DataTable#stateSaveParams.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {object} json The state information to be saved\n\t */\n\n\t/**\n\t * State load event, fired when the table is loading state from the stored\n\t * data, but prior to the settings object being modified by the saved state\n\t * - allowing modification of the saved state is required or loading of\n\t * state for a plug-in.\n\t *  @name DataTable#stateLoadParams.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {object} json The saved state information\n\t */\n\n\t/**\n\t * State loaded event, fired when state has been loaded from stored data and\n\t * the settings object has been modified by the loaded data.\n\t *  @name DataTable#stateLoaded.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {object} json The saved state information\n\t */\n\n\t/**\n\t * Processing event, fired when DataTables is doing some kind of processing\n\t * (be it, order, searcg or anything else). It can be used to indicate to\n\t * the end user that there is something happening, or that something has\n\t * finished.\n\t *  @name DataTable#processing.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {boolean} bShow Flag for if DataTables is doing processing or not\n\t */\n\n\t/**\n\t * Ajax (XHR) event, fired whenever an Ajax request is completed from a\n\t * request to made to the server for new data. This event is called before\n\t * DataTables processed the returned data, so it can also be used to pre-\n\t * process the data returned from the server, if needed.\n\t *\n\t * Note that this trigger is called in `fnServerData`, if you override\n\t * `fnServerData` and which to use this event, you need to trigger it in you\n\t * success function.\n\t *  @name DataTable#xhr.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t *  @param {object} json JSON returned from the server\n\t *\n\t *  @example\n\t *     // Use a custom property returned from the server in another DOM element\n\t *     $('#table').dataTable().on('xhr.dt', function (e, settings, json) {\n\t *       $('#status').html( json.status );\n\t *     } );\n\t *\n\t *  @example\n\t *     // Pre-process the data returned from the server\n\t *     $('#table').dataTable().on('xhr.dt', function (e, settings, json) {\n\t *       for ( var i=0, ien=json.aaData.length ; i<ien ; i++ ) {\n\t *         json.aaData[i].sum = json.aaData[i].one + json.aaData[i].two;\n\t *       }\n\t *       // Note no return - manipulate the data directly in the JSON object.\n\t *     } );\n\t */\n\n\t/**\n\t * Destroy event, fired when the DataTable is destroyed by calling fnDestroy\n\t * or passing the bDestroy:true parameter in the initialisation object. This\n\t * can be used to remove bound events, added DOM nodes, etc.\n\t *  @name DataTable#destroy.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Page length change event, fired when number of records to show on each\n\t * page (the length) is changed.\n\t *  @name DataTable#length.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t *  @param {integer} len New length\n\t */\n\n\t/**\n\t * Column sizing has changed.\n\t *  @name DataTable#column-sizing.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Column visibility has changed.\n\t *  @name DataTable#column-visibility.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t *  @param {int} column Column index\n\t *  @param {bool} vis `false` if column now hidden, or `true` if visible\n\t */\n\n\treturn $.fn.dataTable;\n}));\n\n}(window, document));\n\n"
  },
  {
    "path": "public/adminlte/plugins/datatables/jquery.dataTables_themeroller.css",
    "content": "/*\n * Table styles\n */\ntable.dataTable {\n  width: 100%;\n  margin: 0 auto;\n  clear: both;\n  border-collapse: separate;\n  border-spacing: 0;\n  /*\n   * Header and footer styles\n   */\n  /*\n   * Body styles\n   */\n}\ntable.dataTable thead th,\ntable.dataTable thead td,\ntable.dataTable tfoot th,\ntable.dataTable tfoot td {\n  padding: 4px 10px;\n}\ntable.dataTable thead th,\ntable.dataTable tfoot th {\n  font-weight: bold;\n}\ntable.dataTable thead th:active,\ntable.dataTable thead td:active {\n  outline: none;\n}\ntable.dataTable thead .sorting_asc,\ntable.dataTable thead .sorting_desc,\ntable.dataTable thead .sorting {\n  cursor: pointer;\n  *cursor: hand;\n}\ntable.dataTable thead th div.DataTables_sort_wrapper {\n  position: relative;\n  padding-right: 10px;\n}\ntable.dataTable thead th div.DataTables_sort_wrapper span {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  right: -5px;\n}\ntable.dataTable thead th.ui-state-default {\n  border-right-width: 0;\n}\ntable.dataTable thead th.ui-state-default:last-child {\n  border-right-width: 1px;\n}\ntable.dataTable tbody tr {\n  background-color: #ffffff;\n}\ntable.dataTable tbody tr.selected {\n  background-color: #B0BED9;\n}\ntable.dataTable tbody th,\ntable.dataTable tbody td {\n  padding: 8px 10px;\n}\ntable.dataTable th.center,\ntable.dataTable td.center,\ntable.dataTable td.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable th.right,\ntable.dataTable td.right {\n  text-align: right;\n}\ntable.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {\n  border-top: 1px solid #ddd;\n}\ntable.dataTable.row-border tbody tr:first-child th,\ntable.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th,\ntable.dataTable.display tbody tr:first-child td {\n  border-top: none;\n}\ntable.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {\n  border-top: 1px solid #ddd;\n  border-right: 1px solid #ddd;\n}\ntable.dataTable.cell-border tbody tr th:first-child,\ntable.dataTable.cell-border tbody tr td:first-child {\n  border-left: 1px solid #ddd;\n}\ntable.dataTable.cell-border tbody tr:first-child th,\ntable.dataTable.cell-border tbody tr:first-child td {\n  border-top: none;\n}\ntable.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {\n  background-color: #f9f9f9;\n}\ntable.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {\n  background-color: #abb9d3;\n}\ntable.dataTable.hover tbody tr:hover,\ntable.dataTable.hover tbody tr.odd:hover,\ntable.dataTable.hover tbody tr.even:hover, table.dataTable.display tbody tr:hover,\ntable.dataTable.display tbody tr.odd:hover,\ntable.dataTable.display tbody tr.even:hover {\n  background-color: whitesmoke;\n}\ntable.dataTable.hover tbody tr:hover.selected,\ntable.dataTable.hover tbody tr.odd:hover.selected,\ntable.dataTable.hover tbody tr.even:hover.selected, table.dataTable.display tbody tr:hover.selected,\ntable.dataTable.display tbody tr.odd:hover.selected,\ntable.dataTable.display tbody tr.even:hover.selected {\n  background-color: #a9b7d1;\n}\ntable.dataTable.order-column tbody tr > .sorting_1,\ntable.dataTable.order-column tbody tr > .sorting_2,\ntable.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,\ntable.dataTable.display tbody tr > .sorting_2,\ntable.dataTable.display tbody tr > .sorting_3 {\n  background-color: #f9f9f9;\n}\ntable.dataTable.order-column tbody tr.selected > .sorting_1,\ntable.dataTable.order-column tbody tr.selected > .sorting_2,\ntable.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,\ntable.dataTable.display tbody tr.selected > .sorting_2,\ntable.dataTable.display tbody tr.selected > .sorting_3 {\n  background-color: #acbad4;\n}\ntable.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {\n  background-color: #f1f1f1;\n}\ntable.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {\n  background-color: #f3f3f3;\n}\ntable.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {\n  background-color: whitesmoke;\n}\ntable.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {\n  background-color: #a6b3cd;\n}\ntable.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {\n  background-color: #a7b5ce;\n}\ntable.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {\n  background-color: #a9b6d0;\n}\ntable.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {\n  background-color: #f9f9f9;\n}\ntable.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {\n  background-color: #fbfbfb;\n}\ntable.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {\n  background-color: #fdfdfd;\n}\ntable.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {\n  background-color: #acbad4;\n}\ntable.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {\n  background-color: #adbbd6;\n}\ntable.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {\n  background-color: #afbdd8;\n}\ntable.dataTable.display tbody tr:hover > .sorting_1,\ntable.dataTable.display tbody tr.odd:hover > .sorting_1,\ntable.dataTable.display tbody tr.even:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1,\ntable.dataTable.order-column.hover tbody tr.odd:hover > .sorting_1,\ntable.dataTable.order-column.hover tbody tr.even:hover > .sorting_1 {\n  background-color: #eaeaea;\n}\ntable.dataTable.display tbody tr:hover > .sorting_2,\ntable.dataTable.display tbody tr.odd:hover > .sorting_2,\ntable.dataTable.display tbody tr.even:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2,\ntable.dataTable.order-column.hover tbody tr.odd:hover > .sorting_2,\ntable.dataTable.order-column.hover tbody tr.even:hover > .sorting_2 {\n  background-color: #ebebeb;\n}\ntable.dataTable.display tbody tr:hover > .sorting_3,\ntable.dataTable.display tbody tr.odd:hover > .sorting_3,\ntable.dataTable.display tbody tr.even:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3,\ntable.dataTable.order-column.hover tbody tr.odd:hover > .sorting_3,\ntable.dataTable.order-column.hover tbody tr.even:hover > .sorting_3 {\n  background-color: #eeeeee;\n}\ntable.dataTable.display tbody tr:hover.selected > .sorting_1,\ntable.dataTable.display tbody tr.odd:hover.selected > .sorting_1,\ntable.dataTable.display tbody tr.even:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1,\ntable.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_1,\ntable.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_1 {\n  background-color: #a1aec7;\n}\ntable.dataTable.display tbody tr:hover.selected > .sorting_2,\ntable.dataTable.display tbody tr.odd:hover.selected > .sorting_2,\ntable.dataTable.display tbody tr.even:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2,\ntable.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_2,\ntable.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_2 {\n  background-color: #a2afc8;\n}\ntable.dataTable.display tbody tr:hover.selected > .sorting_3,\ntable.dataTable.display tbody tr.odd:hover.selected > .sorting_3,\ntable.dataTable.display tbody tr.even:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3,\ntable.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_3,\ntable.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_3 {\n  background-color: #a4b2cb;\n}\ntable.dataTable.nowrap th, table.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable.compact thead th,\ntable.dataTable.compact thead td {\n  padding: 5px 9px;\n}\ntable.dataTable.compact tfoot th,\ntable.dataTable.compact tfoot td {\n  padding: 5px 9px 3px 9px;\n}\ntable.dataTable.compact tbody th,\ntable.dataTable.compact tbody td {\n  padding: 4px 5px;\n}\ntable.dataTable th.dt-left,\ntable.dataTable td.dt-left {\n  text-align: left;\n}\ntable.dataTable th.dt-center,\ntable.dataTable td.dt-center,\ntable.dataTable td.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable th.dt-right,\ntable.dataTable td.dt-right {\n  text-align: right;\n}\ntable.dataTable th.dt-justify,\ntable.dataTable td.dt-justify {\n  text-align: justify;\n}\ntable.dataTable th.dt-nowrap,\ntable.dataTable td.dt-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable thead th.dt-head-left,\ntable.dataTable thead td.dt-head-left,\ntable.dataTable tfoot th.dt-head-left,\ntable.dataTable tfoot td.dt-head-left {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-center,\ntable.dataTable thead td.dt-head-center,\ntable.dataTable tfoot th.dt-head-center,\ntable.dataTable tfoot td.dt-head-center {\n  text-align: center;\n}\ntable.dataTable thead th.dt-head-right,\ntable.dataTable thead td.dt-head-right,\ntable.dataTable tfoot th.dt-head-right,\ntable.dataTable tfoot td.dt-head-right {\n  text-align: right;\n}\ntable.dataTable thead th.dt-head-justify,\ntable.dataTable thead td.dt-head-justify,\ntable.dataTable tfoot th.dt-head-justify,\ntable.dataTable tfoot td.dt-head-justify {\n  text-align: justify;\n}\ntable.dataTable thead th.dt-head-nowrap,\ntable.dataTable thead td.dt-head-nowrap,\ntable.dataTable tfoot th.dt-head-nowrap,\ntable.dataTable tfoot td.dt-head-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable tbody th.dt-body-left,\ntable.dataTable tbody td.dt-body-left {\n  text-align: left;\n}\ntable.dataTable tbody th.dt-body-center,\ntable.dataTable tbody td.dt-body-center {\n  text-align: center;\n}\ntable.dataTable tbody th.dt-body-right,\ntable.dataTable tbody td.dt-body-right {\n  text-align: right;\n}\ntable.dataTable tbody th.dt-body-justify,\ntable.dataTable tbody td.dt-body-justify {\n  text-align: justify;\n}\ntable.dataTable tbody th.dt-body-nowrap,\ntable.dataTable tbody td.dt-body-nowrap {\n  white-space: nowrap;\n}\n\ntable.dataTable,\ntable.dataTable th,\ntable.dataTable td {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n\n/*\n * Control feature layout\n */\n.dataTables_wrapper {\n  position: relative;\n  clear: both;\n  *zoom: 1;\n  zoom: 1;\n}\n.dataTables_wrapper .dataTables_length {\n  float: left;\n}\n.dataTables_wrapper .dataTables_filter {\n  float: right;\n  text-align: right;\n}\n.dataTables_wrapper .dataTables_filter input {\n  margin-left: 0.5em;\n}\n.dataTables_wrapper .dataTables_info {\n  clear: both;\n  float: left;\n  padding-top: 0.55em;\n}\n.dataTables_wrapper .dataTables_paginate {\n  float: right;\n  text-align: right;\n}\n.dataTables_wrapper .dataTables_paginate .fg-button {\n  box-sizing: border-box;\n  display: inline-block;\n  min-width: 1.5em;\n  padding: 0.5em;\n  margin-left: 2px;\n  text-align: center;\n  text-decoration: none !important;\n  cursor: pointer;\n  *cursor: hand;\n  color: #333 !important;\n  border: 1px solid transparent;\n}\n.dataTables_wrapper .dataTables_paginate .fg-button:active {\n  outline: none;\n}\n.dataTables_wrapper .dataTables_paginate .fg-button:first-child {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.dataTables_wrapper .dataTables_paginate .fg-button:last-child {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.dataTables_wrapper .dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 100%;\n  height: 40px;\n  margin-left: -50%;\n  margin-top: -25px;\n  padding-top: 20px;\n  text-align: center;\n  font-size: 1.2em;\n  background-color: white;\n  background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));\n  /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);\n  /* Chrome10+,Safari5.1+ */\n  background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);\n  /* FF3.6+ */\n  background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);\n  /* IE10+ */\n  background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);\n  /* Opera 11.10+ */\n  background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);\n  /* W3C */\n}\n.dataTables_wrapper .dataTables_length,\n.dataTables_wrapper .dataTables_filter,\n.dataTables_wrapper .dataTables_info,\n.dataTables_wrapper .dataTables_processing,\n.dataTables_wrapper .dataTables_paginate {\n  color: #333;\n}\n.dataTables_wrapper .dataTables_scroll {\n  clear: both;\n}\n.dataTables_wrapper .dataTables_scrollBody {\n  *margin-top: -1px;\n  -webkit-overflow-scrolling: touch;\n}\n.dataTables_wrapper .ui-widget-header {\n  font-weight: normal;\n}\n.dataTables_wrapper .ui-toolbar {\n  padding: 8px;\n}\n.dataTables_wrapper:after {\n  visibility: hidden;\n  display: block;\n  content: \"\";\n  clear: both;\n  height: 0;\n}\n\n@media screen and (max-width: 767px) {\n  .dataTables_wrapper .dataTables_length,\n  .dataTables_wrapper .dataTables_filter,\n  .dataTables_wrapper .dataTables_info,\n  .dataTables_wrapper .dataTables_paginate {\n    float: none;\n    text-align: center;\n  }\n  .dataTables_wrapper .dataTables_filter,\n  .dataTables_wrapper .dataTables_paginate {\n    margin-top: 0.5em;\n  }\n}\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/bootstrap-datepicker.js",
    "content": "/* =========================================================\n * bootstrap-datepicker.js\n * Repo: https://github.com/eternicode/bootstrap-datepicker/\n * Demo: http://eternicode.github.io/bootstrap-datepicker/\n * Docs: http://bootstrap-datepicker.readthedocs.org/\n * Forked from http://www.eyecon.ro/bootstrap-datepicker\n * =========================================================\n * Started by Stefan Petre; improvements by Andrew Rowls + contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================= */\n\n(function($, undefined){\n\n\tvar $window = $(window);\n\n\tfunction UTCDate(){\n\t\treturn new Date(Date.UTC.apply(Date, arguments));\n\t}\n\tfunction UTCToday(){\n\t\tvar today = new Date();\n\t\treturn UTCDate(today.getFullYear(), today.getMonth(), today.getDate());\n\t}\n\tfunction alias(method){\n\t\treturn function(){\n\t\t\treturn this[method].apply(this, arguments);\n\t\t};\n\t}\n\n\tvar DateArray = (function(){\n\t\tvar extras = {\n\t\t\tget: function(i){\n\t\t\t\treturn this.slice(i)[0];\n\t\t\t},\n\t\t\tcontains: function(d){\n\t\t\t\t// Array.indexOf is not cross-browser;\n\t\t\t\t// $.inArray doesn't work with Dates\n\t\t\t\tvar val = d && d.valueOf();\n\t\t\t\tfor (var i=0, l=this.length; i < l; i++)\n\t\t\t\t\tif (this[i].valueOf() === val)\n\t\t\t\t\t\treturn i;\n\t\t\t\treturn -1;\n\t\t\t},\n\t\t\tremove: function(i){\n\t\t\t\tthis.splice(i,1);\n\t\t\t},\n\t\t\treplace: function(new_array){\n\t\t\t\tif (!new_array)\n\t\t\t\t\treturn;\n\t\t\t\tif (!$.isArray(new_array))\n\t\t\t\t\tnew_array = [new_array];\n\t\t\t\tthis.clear();\n\t\t\t\tthis.push.apply(this, new_array);\n\t\t\t},\n\t\t\tclear: function(){\n\t\t\t\tthis.splice(0);\n\t\t\t},\n\t\t\tcopy: function(){\n\t\t\t\tvar a = new DateArray();\n\t\t\t\ta.replace(this);\n\t\t\t\treturn a;\n\t\t\t}\n\t\t};\n\n\t\treturn function(){\n\t\t\tvar a = [];\n\t\t\ta.push.apply(a, arguments);\n\t\t\t$.extend(a, extras);\n\t\t\treturn a;\n\t\t};\n\t})();\n\n\n\t// Picker object\n\n\tvar Datepicker = function(element, options){\n\t\tthis.dates = new DateArray();\n\t\tthis.viewDate = UTCToday();\n\t\tthis.focusDate = null;\n\n\t\tthis._process_options(options);\n\n\t\tthis.element = $(element);\n\t\tthis.isInline = false;\n\t\tthis.isInput = this.element.is('input');\n\t\tthis.component = this.element.is('.date') ? this.element.find('.add-on, .input-group-addon, .btn') : false;\n\t\tthis.hasInput = this.component && this.element.find('input').length;\n\t\tif (this.component && this.component.length === 0)\n\t\t\tthis.component = false;\n\n\t\tthis.picker = $(DPGlobal.template);\n\t\tthis._buildEvents();\n\t\tthis._attachEvents();\n\n\t\tif (this.isInline){\n\t\t\tthis.picker.addClass('datepicker-inline').appendTo(this.element);\n\t\t}\n\t\telse {\n\t\t\tthis.picker.addClass('datepicker-dropdown dropdown-menu');\n\t\t}\n\n\t\tif (this.o.rtl){\n\t\t\tthis.picker.addClass('datepicker-rtl');\n\t\t}\n\n\t\tthis.viewMode = this.o.startView;\n\n\t\tif (this.o.calendarWeeks)\n\t\t\tthis.picker.find('tfoot th.today')\n\t\t\t\t\t\t.attr('colspan', function(i, val){\n\t\t\t\t\t\t\treturn parseInt(val) + 1;\n\t\t\t\t\t\t});\n\n\t\tthis._allow_update = false;\n\n\t\tthis.setStartDate(this._o.startDate);\n\t\tthis.setEndDate(this._o.endDate);\n\t\tthis.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled);\n\n\t\tthis.fillDow();\n\t\tthis.fillMonths();\n\n\t\tthis._allow_update = true;\n\n\t\tthis.update();\n\t\tthis.showMode();\n\n\t\tif (this.isInline){\n\t\t\tthis.show();\n\t\t}\n\t};\n\n\tDatepicker.prototype = {\n\t\tconstructor: Datepicker,\n\n\t\t_process_options: function(opts){\n\t\t\t// Store raw options for reference\n\t\t\tthis._o = $.extend({}, this._o, opts);\n\t\t\t// Processed options\n\t\t\tvar o = this.o = $.extend({}, this._o);\n\n\t\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t\t// fallback to 2 letter code eg \"de\"\n\t\t\tvar lang = o.language;\n\t\t\tif (!dates[lang]){\n\t\t\t\tlang = lang.split('-')[0];\n\t\t\t\tif (!dates[lang])\n\t\t\t\t\tlang = defaults.language;\n\t\t\t}\n\t\t\to.language = lang;\n\n\t\t\tswitch (o.startView){\n\t\t\t\tcase 2:\n\t\t\t\tcase 'decade':\n\t\t\t\t\to.startView = 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 1:\n\t\t\t\tcase 'year':\n\t\t\t\t\to.startView = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\to.startView = 0;\n\t\t\t}\n\n\t\t\tswitch (o.minViewMode){\n\t\t\t\tcase 1:\n\t\t\t\tcase 'months':\n\t\t\t\t\to.minViewMode = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\tcase 'years':\n\t\t\t\t\to.minViewMode = 2;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\to.minViewMode = 0;\n\t\t\t}\n\n\t\t\to.startView = Math.max(o.startView, o.minViewMode);\n\n\t\t\t// true, false, or Number > 0\n\t\t\tif (o.multidate !== true){\n\t\t\t\to.multidate = Number(o.multidate) || false;\n\t\t\t\tif (o.multidate !== false)\n\t\t\t\t\to.multidate = Math.max(0, o.multidate);\n\t\t\t\telse\n\t\t\t\t\to.multidate = 1;\n\t\t\t}\n\t\t\to.multidateSeparator = String(o.multidateSeparator);\n\n\t\t\to.weekStart %= 7;\n\t\t\to.weekEnd = ((o.weekStart + 6) % 7);\n\n\t\t\tvar format = DPGlobal.parseFormat(o.format);\n\t\t\tif (o.startDate !== -Infinity){\n\t\t\t\tif (!!o.startDate){\n\t\t\t\t\tif (o.startDate instanceof Date)\n\t\t\t\t\t\to.startDate = this._local_to_utc(this._zero_time(o.startDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.startDate = DPGlobal.parseDate(o.startDate, format, o.language);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.startDate = -Infinity;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (o.endDate !== Infinity){\n\t\t\t\tif (!!o.endDate){\n\t\t\t\t\tif (o.endDate instanceof Date)\n\t\t\t\t\t\to.endDate = this._local_to_utc(this._zero_time(o.endDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.endDate = DPGlobal.parseDate(o.endDate, format, o.language);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.endDate = Infinity;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\to.daysOfWeekDisabled = o.daysOfWeekDisabled||[];\n\t\t\tif (!$.isArray(o.daysOfWeekDisabled))\n\t\t\t\to.daysOfWeekDisabled = o.daysOfWeekDisabled.split(/[,\\s]*/);\n\t\t\to.daysOfWeekDisabled = $.map(o.daysOfWeekDisabled, function(d){\n\t\t\t\treturn parseInt(d, 10);\n\t\t\t});\n\n\t\t\tvar plc = String(o.orientation).toLowerCase().split(/\\s+/g),\n\t\t\t\t_plc = o.orientation.toLowerCase();\n\t\t\tplc = $.grep(plc, function(word){\n\t\t\t\treturn (/^auto|left|right|top|bottom$/).test(word);\n\t\t\t});\n\t\t\to.orientation = {x: 'auto', y: 'auto'};\n\t\t\tif (!_plc || _plc === 'auto')\n\t\t\t\t; // no action\n\t\t\telse if (plc.length === 1){\n\t\t\t\tswitch (plc[0]){\n\t\t\t\t\tcase 'top':\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\to.orientation.y = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'left':\n\t\t\t\t\tcase 'right':\n\t\t\t\t\t\to.orientation.x = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn (/^left|right$/).test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.x = _plc[0] || 'auto';\n\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn (/^top|bottom$/).test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.y = _plc[0] || 'auto';\n\t\t\t}\n\t\t},\n\t\t_events: [],\n\t\t_secondaryEvents: [],\n\t\t_applyEvents: function(evs){\n\t\t\tfor (var i=0, el, ch, ev; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t}\n\t\t\t\telse if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.on(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_unapplyEvents: function(evs){\n\t\t\tfor (var i=0, el, ev, ch; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t}\n\t\t\t\telse if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.off(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_buildEvents: function(){\n\t\t\tif (this.isInput){ // single input\n\t\t\t\tthis._events = [\n\t\t\t\t\t[this.element, {\n\t\t\t\t\t\tfocus: $.proxy(this.show, this),\n\t\t\t\t\t\tkeyup: $.proxy(function(e){\n\t\t\t\t\t\t\tif ($.inArray(e.keyCode, [27,37,39,38,40,32,13,9]) === -1)\n\t\t\t\t\t\t\t\tthis.update();\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\telse if (this.component && this.hasInput){ // component: input + button\n\t\t\t\tthis._events = [\n\t\t\t\t\t// For components that are not readonly, allow keyboard nav\n\t\t\t\t\t[this.element.find('input'), {\n\t\t\t\t\t\tfocus: $.proxy(this.show, this),\n\t\t\t\t\t\tkeyup: $.proxy(function(e){\n\t\t\t\t\t\t\tif ($.inArray(e.keyCode, [27,37,39,38,40,32,13,9]) === -1)\n\t\t\t\t\t\t\t\tthis.update();\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\n\t\t\t\t\t}],\n\t\t\t\t\t[this.component, {\n\t\t\t\t\t\tclick: $.proxy(this.show, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\telse if (this.element.is('div')){  // inline datepicker\n\t\t\t\tthis.isInline = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._events = [\n\t\t\t\t\t[this.element, {\n\t\t\t\t\t\tclick: $.proxy(this.show, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\tthis._events.push(\n\t\t\t\t// Component: listen for blur on element descendants\n\t\t\t\t[this.element, '*', {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}],\n\t\t\t\t// Input: listen for blur on element\n\t\t\t\t[this.element, {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t);\n\n\t\t\tthis._secondaryEvents = [\n\t\t\t\t[this.picker, {\n\t\t\t\t\tclick: $.proxy(this.click, this)\n\t\t\t\t}],\n\t\t\t\t[$(window), {\n\t\t\t\t\tresize: $.proxy(this.place, this)\n\t\t\t\t}],\n\t\t\t\t[$(document), {\n\t\t\t\t\t'mousedown touchstart': $.proxy(function(e){\n\t\t\t\t\t\t// Clicked outside the datepicker, hide it\n\t\t\t\t\t\tif (!(\n\t\t\t\t\t\t\tthis.element.is(e.target) ||\n\t\t\t\t\t\t\tthis.element.find(e.target).length ||\n\t\t\t\t\t\t\tthis.picker.is(e.target) ||\n\t\t\t\t\t\t\tthis.picker.find(e.target).length\n\t\t\t\t\t\t)){\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t];\n\t\t},\n\t\t_attachEvents: function(){\n\t\t\tthis._detachEvents();\n\t\t\tthis._applyEvents(this._events);\n\t\t},\n\t\t_detachEvents: function(){\n\t\t\tthis._unapplyEvents(this._events);\n\t\t},\n\t\t_attachSecondaryEvents: function(){\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis._applyEvents(this._secondaryEvents);\n\t\t},\n\t\t_detachSecondaryEvents: function(){\n\t\t\tthis._unapplyEvents(this._secondaryEvents);\n\t\t},\n\t\t_trigger: function(event, altdate){\n\t\t\tvar date = altdate || this.dates.get(-1),\n\t\t\t\tlocal_date = this._utc_to_local(date);\n\n\t\t\tthis.element.trigger({\n\t\t\t\ttype: event,\n\t\t\t\tdate: local_date,\n\t\t\t\tdates: $.map(this.dates, this._utc_to_local),\n\t\t\t\tformat: $.proxy(function(ix, format){\n\t\t\t\t\tif (arguments.length === 0){\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t\tformat = this.o.format;\n\t\t\t\t\t}\n\t\t\t\t\telse if (typeof ix === 'string'){\n\t\t\t\t\t\tformat = ix;\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t}\n\t\t\t\t\tformat = format || this.o.format;\n\t\t\t\t\tvar date = this.dates.get(ix);\n\t\t\t\t\treturn DPGlobal.formatDate(date, format, this.o.language);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t},\n\n\t\tshow: function(){\n\t\t\tif (!this.isInline)\n\t\t\t\tthis.picker.appendTo('body');\n\t\t\tthis.picker.show();\n\t\t\tthis.place();\n\t\t\tthis._attachSecondaryEvents();\n\t\t\tthis._trigger('show');\n\t\t},\n\n\t\thide: function(){\n\t\t\tif (this.isInline)\n\t\t\t\treturn;\n\t\t\tif (!this.picker.is(':visible'))\n\t\t\t\treturn;\n\t\t\tthis.focusDate = null;\n\t\t\tthis.picker.hide().detach();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.viewMode = this.o.startView;\n\t\t\tthis.showMode();\n\n\t\t\tif (\n\t\t\t\tthis.o.forceParse &&\n\t\t\t\t(\n\t\t\t\t\tthis.isInput && this.element.val() ||\n\t\t\t\t\tthis.hasInput && this.element.find('input').val()\n\t\t\t\t)\n\t\t\t)\n\t\t\t\tthis.setValue();\n\t\t\tthis._trigger('hide');\n\t\t},\n\n\t\tremove: function(){\n\t\t\tthis.hide();\n\t\t\tthis._detachEvents();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.picker.remove();\n\t\t\tdelete this.element.data().datepicker;\n\t\t\tif (!this.isInput){\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\t\t},\n\n\t\t_utc_to_local: function(utc){\n\t\t\treturn utc && new Date(utc.getTime() + (utc.getTimezoneOffset()*60000));\n\t\t},\n\t\t_local_to_utc: function(local){\n\t\t\treturn local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));\n\t\t},\n\t\t_zero_time: function(local){\n\t\t\treturn local && new Date(local.getFullYear(), local.getMonth(), local.getDate());\n\t\t},\n\t\t_zero_utc_time: function(utc){\n\t\t\treturn utc && new Date(Date.UTC(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate()));\n\t\t},\n\n\t\tgetDates: function(){\n\t\t\treturn $.map(this.dates, this._utc_to_local);\n\t\t},\n\n\t\tgetUTCDates: function(){\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn new Date(d);\n\t\t\t});\n\t\t},\n\n\t\tgetDate: function(){\n\t\t\treturn this._utc_to_local(this.getUTCDate());\n\t\t},\n\n\t\tgetUTCDate: function(){\n\t\t\treturn new Date(this.dates.get(-1));\n\t\t},\n\n\t\tsetDates: function(){\n\t\t\tvar args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.update.apply(this, args);\n\t\t\tthis._trigger('changeDate');\n\t\t\tthis.setValue();\n\t\t},\n\n\t\tsetUTCDates: function(){\n\t\t\tvar args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.update.apply(this, $.map(args, this._utc_to_local));\n\t\t\tthis._trigger('changeDate');\n\t\t\tthis.setValue();\n\t\t},\n\n\t\tsetDate: alias('setDates'),\n\t\tsetUTCDate: alias('setUTCDates'),\n\n\t\tsetValue: function(){\n\t\t\tvar formatted = this.getFormattedDate();\n\t\t\tif (!this.isInput){\n\t\t\t\tif (this.component){\n\t\t\t\t\tthis.element.find('input').val(formatted).change();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.element.val(formatted).change();\n\t\t\t}\n\t\t},\n\n\t\tgetFormattedDate: function(format){\n\t\t\tif (format === undefined)\n\t\t\t\tformat = this.o.format;\n\n\t\t\tvar lang = this.o.language;\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn DPGlobal.formatDate(d, format, lang);\n\t\t\t}).join(this.o.multidateSeparator);\n\t\t},\n\n\t\tsetStartDate: function(startDate){\n\t\t\tthis._process_options({startDate: startDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t},\n\n\t\tsetEndDate: function(endDate){\n\t\t\tthis._process_options({endDate: endDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t},\n\n\t\tsetDaysOfWeekDisabled: function(daysOfWeekDisabled){\n\t\t\tthis._process_options({daysOfWeekDisabled: daysOfWeekDisabled});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t},\n\n\t\tplace: function(){\n\t\t\tif (this.isInline)\n\t\t\t\treturn;\n\t\t\tvar calendarWidth = this.picker.outerWidth(),\n\t\t\t\tcalendarHeight = this.picker.outerHeight(),\n\t\t\t\tvisualPadding = 10,\n\t\t\t\twindowWidth = $window.width(),\n\t\t\t\twindowHeight = $window.height(),\n\t\t\t\tscrollTop = $window.scrollTop();\n\n\t\t\tvar zIndex = parseInt(this.element.parents().filter(function(){\n\t\t\t\t\treturn $(this).css('z-index') !== 'auto';\n\t\t\t\t}).first().css('z-index'))+10;\n\t\t\tvar offset = this.component ? this.component.parent().offset() : this.element.offset();\n\t\t\tvar height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);\n\t\t\tvar width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);\n\t\t\tvar left = offset.left,\n\t\t\t\ttop = offset.top;\n\n\t\t\tthis.picker.removeClass(\n\t\t\t\t'datepicker-orient-top datepicker-orient-bottom '+\n\t\t\t\t'datepicker-orient-right datepicker-orient-left'\n\t\t\t);\n\n\t\t\tif (this.o.orientation.x !== 'auto'){\n\t\t\t\tthis.picker.addClass('datepicker-orient-' + this.o.orientation.x);\n\t\t\t\tif (this.o.orientation.x === 'right')\n\t\t\t\t\tleft -= calendarWidth - width;\n\t\t\t}\n\t\t\t// auto x orientation is best-placement: if it crosses a window\n\t\t\t// edge, fudge it sideways\n\t\t\telse {\n\t\t\t\t// Default to left\n\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\tif (offset.left < 0)\n\t\t\t\t\tleft -= offset.left - visualPadding;\n\t\t\t\telse if (offset.left + calendarWidth > windowWidth)\n\t\t\t\t\tleft = windowWidth - calendarWidth - visualPadding;\n\t\t\t}\n\n\t\t\t// auto y orientation is best-situation: top or bottom, no fudging,\n\t\t\t// decision based on which shows more of the calendar\n\t\t\tvar yorient = this.o.orientation.y,\n\t\t\t\ttop_overflow, bottom_overflow;\n\t\t\tif (yorient === 'auto'){\n\t\t\t\ttop_overflow = -scrollTop + offset.top - calendarHeight;\n\t\t\t\tbottom_overflow = scrollTop + windowHeight - (offset.top + height + calendarHeight);\n\t\t\t\tif (Math.max(top_overflow, bottom_overflow) === bottom_overflow)\n\t\t\t\t\tyorient = 'top';\n\t\t\t\telse\n\t\t\t\t\tyorient = 'bottom';\n\t\t\t}\n\t\t\tthis.picker.addClass('datepicker-orient-' + yorient);\n\t\t\tif (yorient === 'top')\n\t\t\t\ttop += height;\n\t\t\telse\n\t\t\t\ttop -= calendarHeight + parseInt(this.picker.css('padding-top'));\n\n\t\t\tthis.picker.css({\n\t\t\t\ttop: top,\n\t\t\t\tleft: left,\n\t\t\t\tzIndex: zIndex\n\t\t\t});\n\t\t},\n\n\t\t_allow_update: true,\n\t\tupdate: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn;\n\n\t\t\tvar oldDates = this.dates.copy(),\n\t\t\t\tdates = [],\n\t\t\t\tfromArgs = false;\n\t\t\tif (arguments.length){\n\t\t\t\t$.each(arguments, $.proxy(function(i, date){\n\t\t\t\t\tif (date instanceof Date)\n\t\t\t\t\t\tdate = this._local_to_utc(date);\n\t\t\t\t\tdates.push(date);\n\t\t\t\t}, this));\n\t\t\t\tfromArgs = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdates = this.isInput\n\t\t\t\t\t\t? this.element.val()\n\t\t\t\t\t\t: this.element.data('date') || this.element.find('input').val();\n\t\t\t\tif (dates && this.o.multidate)\n\t\t\t\t\tdates = dates.split(this.o.multidateSeparator);\n\t\t\t\telse\n\t\t\t\t\tdates = [dates];\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\n\t\t\tdates = $.map(dates, $.proxy(function(date){\n\t\t\t\treturn DPGlobal.parseDate(date, this.o.format, this.o.language);\n\t\t\t}, this));\n\t\t\tdates = $.grep(dates, $.proxy(function(date){\n\t\t\t\treturn (\n\t\t\t\t\tdate < this.o.startDate ||\n\t\t\t\t\tdate > this.o.endDate ||\n\t\t\t\t\t!date\n\t\t\t\t);\n\t\t\t}, this), true);\n\t\t\tthis.dates.replace(dates);\n\n\t\t\tif (this.dates.length)\n\t\t\t\tthis.viewDate = new Date(this.dates.get(-1));\n\t\t\telse if (this.viewDate < this.o.startDate)\n\t\t\t\tthis.viewDate = new Date(this.o.startDate);\n\t\t\telse if (this.viewDate > this.o.endDate)\n\t\t\t\tthis.viewDate = new Date(this.o.endDate);\n\n\t\t\tif (fromArgs){\n\t\t\t\t// setting date by clicking\n\t\t\t\tthis.setValue();\n\t\t\t}\n\t\t\telse if (dates.length){\n\t\t\t\t// setting date by typing\n\t\t\t\tif (String(oldDates) !== String(this.dates))\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t}\n\t\t\tif (!this.dates.length && oldDates.length)\n\t\t\t\tthis._trigger('clearDate');\n\n\t\t\tthis.fill();\n\t\t},\n\n\t\tfillDow: function(){\n\t\t\tvar dowCnt = this.o.weekStart,\n\t\t\t\thtml = '<tr>';\n\t\t\tif (this.o.calendarWeeks){\n\t\t\t\tvar cell = '<th class=\"cw\">&nbsp;</th>';\n\t\t\t\thtml += cell;\n\t\t\t\tthis.picker.find('.datepicker-days thead tr:first-child').prepend(cell);\n\t\t\t}\n\t\t\twhile (dowCnt < this.o.weekStart + 7){\n\t\t\t\thtml += '<th class=\"dow\">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';\n\t\t\t}\n\t\t\thtml += '</tr>';\n\t\t\tthis.picker.find('.datepicker-days thead').append(html);\n\t\t},\n\n\t\tfillMonths: function(){\n\t\t\tvar html = '',\n\t\t\ti = 0;\n\t\t\twhile (i < 12){\n\t\t\t\thtml += '<span class=\"month\">'+dates[this.o.language].monthsShort[i++]+'</span>';\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-months td').html(html);\n\t\t},\n\n\t\tsetRange: function(range){\n\t\t\tif (!range || !range.length)\n\t\t\t\tdelete this.range;\n\t\t\telse\n\t\t\t\tthis.range = $.map(range, function(d){\n\t\t\t\t\treturn d.valueOf();\n\t\t\t\t});\n\t\t\tthis.fill();\n\t\t},\n\n\t\tgetClassNames: function(date){\n\t\t\tvar cls = [],\n\t\t\t\tyear = this.viewDate.getUTCFullYear(),\n\t\t\t\tmonth = this.viewDate.getUTCMonth(),\n\t\t\t\ttoday = new Date();\n\t\t\tif (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){\n\t\t\t\tcls.push('old');\n\t\t\t}\n\t\t\telse if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){\n\t\t\t\tcls.push('new');\n\t\t\t}\n\t\t\tif (this.focusDate && date.valueOf() === this.focusDate.valueOf())\n\t\t\t\tcls.push('focused');\n\t\t\t// Compare internal UTC date with local today, not UTC today\n\t\t\tif (this.o.todayHighlight &&\n\t\t\t\tdate.getUTCFullYear() === today.getFullYear() &&\n\t\t\t\tdate.getUTCMonth() === today.getMonth() &&\n\t\t\t\tdate.getUTCDate() === today.getDate()){\n\t\t\t\tcls.push('today');\n\t\t\t}\n\t\t\tif (this.dates.contains(date) !== -1)\n\t\t\t\tcls.push('active');\n\t\t\tif (date.valueOf() < this.o.startDate || date.valueOf() > this.o.endDate ||\n\t\t\t\t$.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1){\n\t\t\t\tcls.push('disabled');\n\t\t\t}\n\t\t\tif (this.range){\n\t\t\t\tif (date > this.range[0] && date < this.range[this.range.length-1]){\n\t\t\t\t\tcls.push('range');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(date.valueOf(), this.range) !== -1){\n\t\t\t\t\tcls.push('selected');\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cls;\n\t\t},\n\n\t\tfill: function(){\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\ttodaytxt = dates[this.o.language].today || dates['en'].today || '',\n\t\t\t\tcleartxt = dates[this.o.language].clear || dates['en'].clear || '',\n\t\t\t\ttooltip;\n\t\t\tthis.picker.find('.datepicker-days thead th.datepicker-switch')\n\t\t\t\t\t\t.text(dates[this.o.language].months[month]+' '+year);\n\t\t\tthis.picker.find('tfoot th.today')\n\t\t\t\t\t\t.text(todaytxt)\n\t\t\t\t\t\t.toggle(this.o.todayBtn !== false);\n\t\t\tthis.picker.find('tfoot th.clear')\n\t\t\t\t\t\t.text(cleartxt)\n\t\t\t\t\t\t.toggle(this.o.clearBtn !== false);\n\t\t\tthis.updateNavArrows();\n\t\t\tthis.fillMonths();\n\t\t\tvar prevMonth = UTCDate(year, month-1, 28),\n\t\t\t\tday = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());\n\t\t\tprevMonth.setUTCDate(day);\n\t\t\tprevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);\n\t\t\tvar nextMonth = new Date(prevMonth);\n\t\t\tnextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\n\t\t\tnextMonth = nextMonth.valueOf();\n\t\t\tvar html = [];\n\t\t\tvar clsName;\n\t\t\twhile (prevMonth.valueOf() < nextMonth){\n\t\t\t\tif (prevMonth.getUTCDay() === this.o.weekStart){\n\t\t\t\t\thtml.push('<tr>');\n\t\t\t\t\tif (this.o.calendarWeeks){\n\t\t\t\t\t\t// ISO 8601: First week contains first thursday.\n\t\t\t\t\t\t// ISO also states week starts on Monday, but we can be more abstract here.\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\t// Start of current week: based on weekstart/current date\n\t\t\t\t\t\t\tws = new Date(+prevMonth + (this.o.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5),\n\t\t\t\t\t\t\t// Thursday of this week\n\t\t\t\t\t\t\tth = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// First Thursday of year, year from thursday\n\t\t\t\t\t\t\tyth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay())%7*864e5),\n\t\t\t\t\t\t\t// Calendar week: ms between thursdays, div ms per day, div 7 days\n\t\t\t\t\t\t\tcalWeek =  (th - yth) / 864e5 / 7 + 1;\n\t\t\t\t\t\thtml.push('<td class=\"cw\">'+ calWeek +'</td>');\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclsName = this.getClassNames(prevMonth);\n\t\t\t\tclsName.push('day');\n\n\t\t\t\tif (this.o.beforeShowDay !== $.noop){\n\t\t\t\t\tvar before = this.o.beforeShowDay(this._utc_to_local(prevMonth));\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof(before) === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof(before) === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false)\n\t\t\t\t\t\tclsName.push('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t\tclsName = clsName.concat(before.classes.split(/\\s+/));\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t}\n\n\t\t\t\tclsName = $.unique(clsName);\n\t\t\t\thtml.push('<td class=\"'+clsName.join(' ')+'\"' + (tooltip ? ' title=\"'+tooltip+'\"' : '') + '>'+prevMonth.getUTCDate() + '</td>');\n\t\t\t\tif (prevMonth.getUTCDay() === this.o.weekEnd){\n\t\t\t\t\thtml.push('</tr>');\n\t\t\t\t}\n\t\t\t\tprevMonth.setUTCDate(prevMonth.getUTCDate()+1);\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-days tbody').empty().append(html.join(''));\n\n\t\t\tvar months = this.picker.find('.datepicker-months')\n\t\t\t\t\t\t.find('th:eq(1)')\n\t\t\t\t\t\t\t.text(year)\n\t\t\t\t\t\t\t.end()\n\t\t\t\t\t\t.find('span').removeClass('active');\n\n\t\t\t$.each(this.dates, function(i, d){\n\t\t\t\tif (d.getUTCFullYear() === year)\n\t\t\t\t\tmonths.eq(d.getUTCMonth()).addClass('active');\n\t\t\t});\n\n\t\t\tif (year < startYear || year > endYear){\n\t\t\t\tmonths.addClass('disabled');\n\t\t\t}\n\t\t\tif (year === startYear){\n\t\t\t\tmonths.slice(0, startMonth).addClass('disabled');\n\t\t\t}\n\t\t\tif (year === endYear){\n\t\t\t\tmonths.slice(endMonth+1).addClass('disabled');\n\t\t\t}\n\n\t\t\thtml = '';\n\t\t\tyear = parseInt(year/10, 10) * 10;\n\t\t\tvar yearCont = this.picker.find('.datepicker-years')\n\t\t\t\t\t\t\t\t.find('th:eq(1)')\n\t\t\t\t\t\t\t\t\t.text(year + '-' + (year + 9))\n\t\t\t\t\t\t\t\t\t.end()\n\t\t\t\t\t\t\t\t.find('td');\n\t\t\tyear -= 1;\n\t\t\tvar years = $.map(this.dates, function(d){\n\t\t\t\t\treturn d.getUTCFullYear();\n\t\t\t\t}),\n\t\t\t\tclasses;\n\t\t\tfor (var i = -1; i < 11; i++){\n\t\t\t\tclasses = ['year'];\n\t\t\t\tif (i === -1)\n\t\t\t\t\tclasses.push('old');\n\t\t\t\telse if (i === 10)\n\t\t\t\t\tclasses.push('new');\n\t\t\t\tif ($.inArray(year, years) !== -1)\n\t\t\t\t\tclasses.push('active');\n\t\t\t\tif (year < startYear || year > endYear)\n\t\t\t\t\tclasses.push('disabled');\n\t\t\t\thtml += '<span class=\"' + classes.join(' ') + '\">'+year+'</span>';\n\t\t\t\tyear += 1;\n\t\t\t}\n\t\t\tyearCont.html(html);\n\t\t},\n\n\t\tupdateNavArrows: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn;\n\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth();\n\t\t\tswitch (this.viewMode){\n\t\t\t\tcase 0:\n\t\t\t\t\tif (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() && month <= this.o.startDate.getUTCMonth()){\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'hidden'});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'visible'});\n\t\t\t\t\t}\n\t\t\t\t\tif (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() && month >= this.o.endDate.getUTCMonth()){\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'hidden'});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'visible'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 1:\n\t\t\t\tcase 2:\n\t\t\t\t\tif (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear()){\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'hidden'});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'visible'});\n\t\t\t\t\t}\n\t\t\t\t\tif (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear()){\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'hidden'});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'visible'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\n\t\tclick: function(e){\n\t\t\te.preventDefault();\n\t\t\tvar target = $(e.target).closest('span, td, th'),\n\t\t\t\tyear, month, day;\n\t\t\tif (target.length === 1){\n\t\t\t\tswitch (target[0].nodeName.toLowerCase()){\n\t\t\t\t\tcase 'th':\n\t\t\t\t\t\tswitch (target[0].className){\n\t\t\t\t\t\t\tcase 'datepicker-switch':\n\t\t\t\t\t\t\t\tthis.showMode(1);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'prev':\n\t\t\t\t\t\t\tcase 'next':\n\t\t\t\t\t\t\t\tvar dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1);\n\t\t\t\t\t\t\t\tswitch (this.viewMode){\n\t\t\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\t\t\tthis.viewDate = this.moveMonth(this.viewDate, dir);\n\t\t\t\t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t\t\tthis.viewDate = this.moveYear(this.viewDate, dir);\n\t\t\t\t\t\t\t\t\t\tif (this.viewMode === 1)\n\t\t\t\t\t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'today':\n\t\t\t\t\t\t\t\tvar date = new Date();\n\t\t\t\t\t\t\t\tdate = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n\n\t\t\t\t\t\t\t\tthis.showMode(-2);\n\t\t\t\t\t\t\t\tvar which = this.o.todayBtn === 'linked' ? null : 'view';\n\t\t\t\t\t\t\t\tthis._setDate(date, which);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'clear':\n\t\t\t\t\t\t\t\tvar element;\n\t\t\t\t\t\t\t\tif (this.isInput)\n\t\t\t\t\t\t\t\t\telement = this.element;\n\t\t\t\t\t\t\t\telse if (this.component)\n\t\t\t\t\t\t\t\t\telement = this.element.find('input');\n\t\t\t\t\t\t\t\tif (element)\n\t\t\t\t\t\t\t\t\telement.val(\"\").change();\n\t\t\t\t\t\t\t\tthis.update();\n\t\t\t\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\t\t\t\t\tif (this.o.autoclose)\n\t\t\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'span':\n\t\t\t\t\t\tif (!target.is('.disabled')){\n\t\t\t\t\t\t\tthis.viewDate.setUTCDate(1);\n\t\t\t\t\t\t\tif (target.is('.month')){\n\t\t\t\t\t\t\t\tday = 1;\n\t\t\t\t\t\t\t\tmonth = target.parent().find('span').index(target);\n\t\t\t\t\t\t\t\tyear = this.viewDate.getUTCFullYear();\n\t\t\t\t\t\t\t\tthis.viewDate.setUTCMonth(month);\n\t\t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t\t\t\t\tif (this.o.minViewMode === 1){\n\t\t\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tday = 1;\n\t\t\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\t\t\tyear = parseInt(target.text(), 10)||0;\n\t\t\t\t\t\t\t\tthis.viewDate.setUTCFullYear(year);\n\t\t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t\t\t\t\tif (this.o.minViewMode === 2){\n\t\t\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.showMode(-1);\n\t\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'td':\n\t\t\t\t\t\tif (target.is('.day') && !target.is('.disabled')){\n\t\t\t\t\t\t\tday = parseInt(target.text(), 10)||1;\n\t\t\t\t\t\t\tyear = this.viewDate.getUTCFullYear();\n\t\t\t\t\t\t\tmonth = this.viewDate.getUTCMonth();\n\t\t\t\t\t\t\tif (target.is('.old')){\n\t\t\t\t\t\t\t\tif (month === 0){\n\t\t\t\t\t\t\t\t\tmonth = 11;\n\t\t\t\t\t\t\t\t\tyear -= 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tmonth -= 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (target.is('.new')){\n\t\t\t\t\t\t\t\tif (month === 11){\n\t\t\t\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\t\t\t\tyear += 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tmonth += 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.picker.is(':visible') && this._focused_from){\n\t\t\t\t$(this._focused_from).focus();\n\t\t\t}\n\t\t\tdelete this._focused_from;\n\t\t},\n\n\t\t_toggle_multidate: function(date){\n\t\t\tvar ix = this.dates.contains(date);\n\t\t\tif (!date){\n\t\t\t\tthis.dates.clear();\n\t\t\t}\n\t\t\telse if (ix !== -1){\n\t\t\t\tthis.dates.remove(ix);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\t\t\tif (typeof this.o.multidate === 'number')\n\t\t\t\twhile (this.dates.length > this.o.multidate)\n\t\t\t\t\tthis.dates.remove(0);\n\t\t},\n\n\t\t_setDate: function(date, which){\n\t\t\tif (!which || which === 'date')\n\t\t\t\tthis._toggle_multidate(date && new Date(date));\n\t\t\tif (!which || which  === 'view')\n\t\t\t\tthis.viewDate = date && new Date(date);\n\n\t\t\tthis.fill();\n\t\t\tthis.setValue();\n\t\t\tthis._trigger('changeDate');\n\t\t\tvar element;\n\t\t\tif (this.isInput){\n\t\t\t\telement = this.element;\n\t\t\t}\n\t\t\telse if (this.component){\n\t\t\t\telement = this.element.find('input');\n\t\t\t}\n\t\t\tif (element){\n\t\t\t\telement.change();\n\t\t\t}\n\t\t\tif (this.o.autoclose && (!which || which === 'date')){\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tmoveMonth: function(date, dir){\n\t\t\tif (!date)\n\t\t\t\treturn undefined;\n\t\t\tif (!dir)\n\t\t\t\treturn date;\n\t\t\tvar new_date = new Date(date.valueOf()),\n\t\t\t\tday = new_date.getUTCDate(),\n\t\t\t\tmonth = new_date.getUTCMonth(),\n\t\t\t\tmag = Math.abs(dir),\n\t\t\t\tnew_month, test;\n\t\t\tdir = dir > 0 ? 1 : -1;\n\t\t\tif (mag === 1){\n\t\t\t\ttest = dir === -1\n\t\t\t\t\t// If going back one month, make sure month is not current month\n\t\t\t\t\t// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t? function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() === month;\n\t\t\t\t\t}\n\t\t\t\t\t// If going forward one month, make sure month is as expected\n\t\t\t\t\t// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t: function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() !== new_month;\n\t\t\t\t\t};\n\t\t\t\tnew_month = month + dir;\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t\t// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\n\t\t\t\tif (new_month < 0 || new_month > 11)\n\t\t\t\t\tnew_month = (new_month + 12) % 12;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// For magnitudes >1, move one month at a time...\n\t\t\t\tfor (var i=0; i < mag; i++)\n\t\t\t\t\t// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\n\t\t\t\t\tnew_date = this.moveMonth(new_date, dir);\n\t\t\t\t// ...then reset the day, keeping it in the new month\n\t\t\t\tnew_month = new_date.getUTCMonth();\n\t\t\t\tnew_date.setUTCDate(day);\n\t\t\t\ttest = function(){\n\t\t\t\t\treturn new_month !== new_date.getUTCMonth();\n\t\t\t\t};\n\t\t\t}\n\t\t\t// Common date-resetting loop -- if date is beyond end of month, make it\n\t\t\t// end of month\n\t\t\twhile (test()){\n\t\t\t\tnew_date.setUTCDate(--day);\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t}\n\t\t\treturn new_date;\n\t\t},\n\n\t\tmoveYear: function(date, dir){\n\t\t\treturn this.moveMonth(date, dir*12);\n\t\t},\n\n\t\tdateWithinRange: function(date){\n\t\t\treturn date >= this.o.startDate && date <= this.o.endDate;\n\t\t},\n\n\t\tkeydown: function(e){\n\t\t\tif (this.picker.is(':not(:visible)')){\n\t\t\t\tif (e.keyCode === 27) // allow escape to hide and re-show picker\n\t\t\t\t\tthis.show();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar dateChanged = false,\n\t\t\t\tdir, newDate, newViewDate,\n\t\t\t\tfocusDate = this.focusDate || this.viewDate;\n\t\t\tswitch (e.keyCode){\n\t\t\t\tcase 27: // escape\n\t\t\t\t\tif (this.focusDate){\n\t\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.hide();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37: // left\n\t\t\t\tcase 39: // right\n\t\t\t\t\tif (!this.o.keyboardNavigation)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdir = e.keyCode === 37 ? -1 : 1;\n\t\t\t\t\tif (e.ctrlKey){\n\t\t\t\t\t\tnewDate = this.moveYear(this.dates.get(-1) || UTCToday(), dir);\n\t\t\t\t\t\tnewViewDate = this.moveYear(focusDate, dir);\n\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t\t}\n\t\t\t\t\telse if (e.shiftKey){\n\t\t\t\t\t\tnewDate = this.moveMonth(this.dates.get(-1) || UTCToday(), dir);\n\t\t\t\t\t\tnewViewDate = this.moveMonth(focusDate, dir);\n\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tnewDate = new Date(this.dates.get(-1) || UTCToday());\n\t\t\t\t\t\tnewDate.setUTCDate(newDate.getUTCDate() + dir);\n\t\t\t\t\t\tnewViewDate = new Date(focusDate);\n\t\t\t\t\t\tnewViewDate.setUTCDate(focusDate.getUTCDate() + dir);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.dateWithinRange(newDate)){\n\t\t\t\t\t\tthis.focusDate = this.viewDate = newViewDate;\n\t\t\t\t\t\tthis.setValue();\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 38: // up\n\t\t\t\tcase 40: // down\n\t\t\t\t\tif (!this.o.keyboardNavigation)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdir = e.keyCode === 38 ? -1 : 1;\n\t\t\t\t\tif (e.ctrlKey){\n\t\t\t\t\t\tnewDate = this.moveYear(this.dates.get(-1) || UTCToday(), dir);\n\t\t\t\t\t\tnewViewDate = this.moveYear(focusDate, dir);\n\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t\t}\n\t\t\t\t\telse if (e.shiftKey){\n\t\t\t\t\t\tnewDate = this.moveMonth(this.dates.get(-1) || UTCToday(), dir);\n\t\t\t\t\t\tnewViewDate = this.moveMonth(focusDate, dir);\n\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tnewDate = new Date(this.dates.get(-1) || UTCToday());\n\t\t\t\t\t\tnewDate.setUTCDate(newDate.getUTCDate() + dir * 7);\n\t\t\t\t\t\tnewViewDate = new Date(focusDate);\n\t\t\t\t\t\tnewViewDate.setUTCDate(focusDate.getUTCDate() + dir * 7);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.dateWithinRange(newDate)){\n\t\t\t\t\t\tthis.focusDate = this.viewDate = newViewDate;\n\t\t\t\t\t\tthis.setValue();\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 32: // spacebar\n\t\t\t\t\t// Spacebar is used in manually typing dates in some formats.\n\t\t\t\t\t// As such, its behavior should not be hijacked.\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13: // enter\n\t\t\t\t\tfocusDate = this.focusDate || this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis._toggle_multidate(focusDate);\n\t\t\t\t\tdateChanged = true;\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.setValue();\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tif (this.picker.is(':visible')){\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tif (this.o.autoclose)\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9: // tab\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tthis.hide();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (dateChanged){\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\telse\n\t\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tvar element;\n\t\t\t\tif (this.isInput){\n\t\t\t\t\telement = this.element;\n\t\t\t\t}\n\t\t\t\telse if (this.component){\n\t\t\t\t\telement = this.element.find('input');\n\t\t\t\t}\n\t\t\t\tif (element){\n\t\t\t\t\telement.change();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tshowMode: function(dir){\n\t\t\tif (dir){\n\t\t\t\tthis.viewMode = Math.max(this.o.minViewMode, Math.min(2, this.viewMode + dir));\n\t\t\t}\n\t\t\tthis.picker\n\t\t\t\t.find('>div')\n\t\t\t\t.hide()\n\t\t\t\t.filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName)\n\t\t\t\t\t.css('display', 'block');\n\t\t\tthis.updateNavArrows();\n\t\t}\n\t};\n\n\tvar DateRangePicker = function(element, options){\n\t\tthis.element = $(element);\n\t\tthis.inputs = $.map(options.inputs, function(i){\n\t\t\treturn i.jquery ? i[0] : i;\n\t\t});\n\t\tdelete options.inputs;\n\n\t\t$(this.inputs)\n\t\t\t.datepicker(options)\n\t\t\t.bind('changeDate', $.proxy(this.dateUpdated, this));\n\n\t\tthis.pickers = $.map(this.inputs, function(i){\n\t\t\treturn $(i).data('datepicker');\n\t\t});\n\t\tthis.updateDates();\n\t};\n\tDateRangePicker.prototype = {\n\t\tupdateDates: function(){\n\t\t\tthis.dates = $.map(this.pickers, function(i){\n\t\t\t\treturn i.getUTCDate();\n\t\t\t});\n\t\t\tthis.updateRanges();\n\t\t},\n\t\tupdateRanges: function(){\n\t\t\tvar range = $.map(this.dates, function(d){\n\t\t\t\treturn d.valueOf();\n\t\t\t});\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.setRange(range);\n\t\t\t});\n\t\t},\n\t\tdateUpdated: function(e){\n\t\t\t// `this.updating` is a workaround for preventing infinite recursion\n\t\t\t// between `changeDate` triggering and `setUTCDate` calling.  Until\n\t\t\t// there is a better mechanism.\n\t\t\tif (this.updating)\n\t\t\t\treturn;\n\t\t\tthis.updating = true;\n\n\t\t\tvar dp = $(e.target).data('datepicker'),\n\t\t\t\tnew_date = dp.getUTCDate(),\n\t\t\t\ti = $.inArray(e.target, this.inputs),\n\t\t\t\tl = this.inputs.length;\n\t\t\tif (i === -1)\n\t\t\t\treturn;\n\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tif (!p.getUTCDate())\n\t\t\t\t\tp.setUTCDate(new_date);\n\t\t\t});\n\n\t\t\tif (new_date < this.dates[i]){\n\t\t\t\t// Date being moved earlier/left\n\t\t\t\twhile (i >= 0 && new_date < this.dates[i]){\n\t\t\t\t\tthis.pickers[i--].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (new_date > this.dates[i]){\n\t\t\t\t// Date being moved later/right\n\t\t\t\twhile (i < l && new_date > this.dates[i]){\n\t\t\t\t\tthis.pickers[i++].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updateDates();\n\n\t\t\tdelete this.updating;\n\t\t},\n\t\tremove: function(){\n\t\t\t$.map(this.pickers, function(p){ p.remove(); });\n\t\t\tdelete this.element.data().datepicker;\n\t\t}\n\t};\n\n\tfunction opts_from_el(el, prefix){\n\t\t// Derive options from element data-attrs\n\t\tvar data = $(el).data(),\n\t\t\tout = {}, inkey,\n\t\t\treplace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');\n\t\tprefix = new RegExp('^' + prefix.toLowerCase());\n\t\tfunction re_lower(_,a){\n\t\t\treturn a.toLowerCase();\n\t\t}\n\t\tfor (var key in data)\n\t\t\tif (prefix.test(key)){\n\t\t\t\tinkey = key.replace(replace, re_lower);\n\t\t\t\tout[inkey] = data[key];\n\t\t\t}\n\t\treturn out;\n\t}\n\n\tfunction opts_from_locale(lang){\n\t\t// Derive options from locale plugins\n\t\tvar out = {};\n\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t// fallback to 2 letter code eg \"de\"\n\t\tif (!dates[lang]){\n\t\t\tlang = lang.split('-')[0];\n\t\t\tif (!dates[lang])\n\t\t\t\treturn;\n\t\t}\n\t\tvar d = dates[lang];\n\t\t$.each(locale_opts, function(i,k){\n\t\t\tif (k in d)\n\t\t\t\tout[k] = d[k];\n\t\t});\n\t\treturn out;\n\t}\n\n\tvar old = $.fn.datepicker;\n\t$.fn.datepicker = function(option){\n\t\tvar args = Array.apply(null, arguments);\n\t\targs.shift();\n\t\tvar internal_return;\n\t\tthis.each(function(){\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('datepicker'),\n\t\t\t\toptions = typeof option === 'object' && option;\n\t\t\tif (!data){\n\t\t\t\tvar elopts = opts_from_el(this, 'date'),\n\t\t\t\t\t// Preliminary otions\n\t\t\t\t\txopts = $.extend({}, defaults, elopts, options),\n\t\t\t\t\tlocopts = opts_from_locale(xopts.language),\n\t\t\t\t\t// Options priority: js args, data-attrs, locales, defaults\n\t\t\t\t\topts = $.extend({}, defaults, locopts, elopts, options);\n\t\t\t\tif ($this.is('.input-daterange') || opts.inputs){\n\t\t\t\t\tvar ropts = {\n\t\t\t\t\t\tinputs: opts.inputs || $this.find('input').toArray()\n\t\t\t\t\t};\n\t\t\t\t\t$this.data('datepicker', (data = new DateRangePicker(this, $.extend(opts, ropts))));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t$this.data('datepicker', (data = new Datepicker(this, opts)));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof option === 'string' && typeof data[option] === 'function'){\n\t\t\t\tinternal_return = data[option].apply(data, args);\n\t\t\t\tif (internal_return !== undefined)\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif (internal_return !== undefined)\n\t\t\treturn internal_return;\n\t\telse\n\t\t\treturn this;\n\t};\n\n\tvar defaults = $.fn.datepicker.defaults = {\n\t\tautoclose: false,\n\t\tbeforeShowDay: $.noop,\n\t\tcalendarWeeks: false,\n\t\tclearBtn: false,\n\t\tdaysOfWeekDisabled: [],\n\t\tendDate: Infinity,\n\t\tforceParse: true,\n\t\tformat: 'mm/dd/yyyy',\n\t\tkeyboardNavigation: true,\n\t\tlanguage: 'en',\n\t\tminViewMode: 0,\n\t\tmultidate: false,\n\t\tmultidateSeparator: ',',\n\t\torientation: \"auto\",\n\t\trtl: false,\n\t\tstartDate: -Infinity,\n\t\tstartView: 0,\n\t\ttodayBtn: false,\n\t\ttodayHighlight: false,\n\t\tweekStart: 0\n\t};\n\tvar locale_opts = $.fn.datepicker.locale_opts = [\n\t\t'format',\n\t\t'rtl',\n\t\t'weekStart'\n\t];\n\t$.fn.datepicker.Constructor = Datepicker;\n\tvar dates = $.fn.datepicker.dates = {\n\t\ten: {\n\t\t\tdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"],\n\t\t\tdaysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"],\n\t\t\tdaysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"],\n\t\t\tmonths: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\t\ttoday: \"Today\",\n\t\t\tclear: \"Clear\"\n\t\t}\n\t};\n\n\tvar DPGlobal = {\n\t\tmodes: [\n\t\t\t{\n\t\t\t\tclsName: 'days',\n\t\t\t\tnavFnc: 'Month',\n\t\t\t\tnavStep: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tclsName: 'months',\n\t\t\t\tnavFnc: 'FullYear',\n\t\t\t\tnavStep: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tclsName: 'years',\n\t\t\t\tnavFnc: 'FullYear',\n\t\t\t\tnavStep: 10\n\t\t}],\n\t\tisLeapYear: function(year){\n\t\t\treturn (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));\n\t\t},\n\t\tgetDaysInMonth: function(year, month){\n\t\t\treturn [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t\t},\n\t\tvalidParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\n\t\tnonpunctuation: /[^ -\\/:-@\\[\\u3400-\\u9fff-`{-~\\t\\n\\r]+/g,\n\t\tparseFormat: function(format){\n\t\t\t// IE treats \\0 as a string end in inputs (truncating the value),\n\t\t\t// so it's a bad format delimiter, anyway\n\t\t\tvar separators = format.replace(this.validParts, '\\0').split('\\0'),\n\t\t\t\tparts = format.match(this.validParts);\n\t\t\tif (!separators || !separators.length || !parts || parts.length === 0){\n\t\t\t\tthrow new Error(\"Invalid date format.\");\n\t\t\t}\n\t\t\treturn {separators: separators, parts: parts};\n\t\t},\n\t\tparseDate: function(date, format, language){\n\t\t\tif (!date)\n\t\t\t\treturn undefined;\n\t\t\tif (date instanceof Date)\n\t\t\t\treturn date;\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tvar part_re = /([\\-+]\\d+)([dmwy])/,\n\t\t\t\tparts = date.match(/([\\-+]\\d+)([dmwy])/g),\n\t\t\t\tpart, dir, i;\n\t\t\tif (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/.test(date)){\n\t\t\t\tdate = new Date();\n\t\t\t\tfor (i=0; i < parts.length; i++){\n\t\t\t\t\tpart = part_re.exec(parts[i]);\n\t\t\t\t\tdir = parseInt(part[1]);\n\t\t\t\t\tswitch (part[2]){\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\tdate.setUTCDate(date.getUTCDate() + dir);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'm':\n\t\t\t\t\t\t\tdate = Datepicker.prototype.moveMonth.call(Datepicker.prototype, date, dir);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'w':\n\t\t\t\t\t\t\tdate.setUTCDate(date.getUTCDate() + dir * 7);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'y':\n\t\t\t\t\t\t\tdate = Datepicker.prototype.moveYear.call(Datepicker.prototype, date, dir);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0);\n\t\t\t}\n\t\t\tparts = date && date.match(this.nonpunctuation) || [];\n\t\t\tdate = new Date();\n\t\t\tvar parsed = {},\n\t\t\t\tsetters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\n\t\t\t\tsetters_map = {\n\t\t\t\t\tyyyy: function(d,v){\n\t\t\t\t\t\treturn d.setUTCFullYear(v);\n\t\t\t\t\t},\n\t\t\t\t\tyy: function(d,v){\n\t\t\t\t\t\treturn d.setUTCFullYear(2000+v);\n\t\t\t\t\t},\n\t\t\t\t\tm: function(d,v){\n\t\t\t\t\t\tif (isNaN(d))\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\tv -= 1;\n\t\t\t\t\t\twhile (v < 0) v += 12;\n\t\t\t\t\t\tv %= 12;\n\t\t\t\t\t\td.setUTCMonth(v);\n\t\t\t\t\t\twhile (d.getUTCMonth() !== v)\n\t\t\t\t\t\t\td.setUTCDate(d.getUTCDate()-1);\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t},\n\t\t\t\t\td: function(d,v){\n\t\t\t\t\t\treturn d.setUTCDate(v);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tval, filtered;\n\t\t\tsetters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\n\t\t\tsetters_map['dd'] = setters_map['d'];\n\t\t\tdate = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n\t\t\tvar fparts = format.parts.slice();\n\t\t\t// Remove noop parts\n\t\t\tif (parts.length !== fparts.length){\n\t\t\t\tfparts = $(fparts).filter(function(i,p){\n\t\t\t\t\treturn $.inArray(p, setters_order) !== -1;\n\t\t\t\t}).toArray();\n\t\t\t}\n\t\t\t// Process remainder\n\t\t\tfunction match_part(){\n\t\t\t\tvar m = this.slice(0, parts[i].length),\n\t\t\t\t\tp = parts[i].slice(0, m.length);\n\t\t\t\treturn m === p;\n\t\t\t}\n\t\t\tif (parts.length === fparts.length){\n\t\t\t\tvar cnt;\n\t\t\t\tfor (i=0, cnt = fparts.length; i < cnt; i++){\n\t\t\t\t\tval = parseInt(parts[i], 10);\n\t\t\t\t\tpart = fparts[i];\n\t\t\t\t\tif (isNaN(val)){\n\t\t\t\t\t\tswitch (part){\n\t\t\t\t\t\t\tcase 'MM':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].months).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].months) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'M':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].monthsShort).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].monthsShort) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tparsed[part] = val;\n\t\t\t\t}\n\t\t\t\tvar _date, s;\n\t\t\t\tfor (i=0; i < setters_order.length; i++){\n\t\t\t\t\ts = setters_order[i];\n\t\t\t\t\tif (s in parsed && !isNaN(parsed[s])){\n\t\t\t\t\t\t_date = new Date(date);\n\t\t\t\t\t\tsetters_map[s](_date, parsed[s]);\n\t\t\t\t\t\tif (!isNaN(_date))\n\t\t\t\t\t\t\tdate = _date;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn date;\n\t\t},\n\t\tformatDate: function(date, format, language){\n\t\t\tif (!date)\n\t\t\t\treturn '';\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tvar val = {\n\t\t\t\td: date.getUTCDate(),\n\t\t\t\tD: dates[language].daysShort[date.getUTCDay()],\n\t\t\t\tDD: dates[language].days[date.getUTCDay()],\n\t\t\t\tm: date.getUTCMonth() + 1,\n\t\t\t\tM: dates[language].monthsShort[date.getUTCMonth()],\n\t\t\t\tMM: dates[language].months[date.getUTCMonth()],\n\t\t\t\tyy: date.getUTCFullYear().toString().substring(2),\n\t\t\t\tyyyy: date.getUTCFullYear()\n\t\t\t};\n\t\t\tval.dd = (val.d < 10 ? '0' : '') + val.d;\n\t\t\tval.mm = (val.m < 10 ? '0' : '') + val.m;\n\t\t\tdate = [];\n\t\t\tvar seps = $.extend([], format.separators);\n\t\t\tfor (var i=0, cnt = format.parts.length; i <= cnt; i++){\n\t\t\t\tif (seps.length)\n\t\t\t\t\tdate.push(seps.shift());\n\t\t\t\tdate.push(val[format.parts[i]]);\n\t\t\t}\n\t\t\treturn date.join('');\n\t\t},\n\t\theadTemplate: '<thead>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th class=\"prev\">&laquo;</th>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"5\" class=\"datepicker-switch\"></th>'+\n\t\t\t\t\t\t\t\t'<th class=\"next\">&raquo;</th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</thead>',\n\t\tcontTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\n\t\tfootTemplate: '<tfoot>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"7\" class=\"today\"></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"7\" class=\"clear\"></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</tfoot>'\n\t};\n\tDPGlobal.template = '<div class=\"datepicker\">'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-days\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\t'<tbody></tbody>'+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-months\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-years\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t'</div>';\n\n\t$.fn.datepicker.DPGlobal = DPGlobal;\n\n\n\t/* DATEPICKER NO CONFLICT\n\t* =================== */\n\n\t$.fn.datepicker.noConflict = function(){\n\t\t$.fn.datepicker = old;\n\t\treturn this;\n\t};\n\n\n\t/* DATEPICKER DATA-API\n\t* ================== */\n\n\t$(document).on(\n\t\t'focus.datepicker.data-api click.datepicker.data-api',\n\t\t'[data-provide=\"datepicker\"]',\n\t\tfunction(e){\n\t\t\tvar $this = $(this);\n\t\t\tif ($this.data('datepicker'))\n\t\t\t\treturn;\n\t\t\te.preventDefault();\n\t\t\t// component click requires us to explicitly show it\n\t\t\t$this.datepicker('show');\n\t\t}\n\t);\n\t$(function(){\n\t\t$('[data-provide=\"datepicker-inline\"]').datepicker();\n\t});\n\n}(window.jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/datepicker3.css",
    "content": "/*!\n * Datepicker for Bootstrap\n *\n * Copyright 2012 Stefan Petre\n * Improvements by Andrew Rowls\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n */\n.datepicker {\n  padding: 4px;\n  border-radius: 4px;\n  direction: ltr;\n  /*.dow {\n\t\tborder-top: 1px solid #ddd !important;\n\t}*/\n}\n.datepicker-inline {\n  width: 100%;\n}\n.datepicker.datepicker-rtl {\n  direction: rtl;\n}\n.datepicker.datepicker-rtl table tr td span {\n  float: right;\n}\n.datepicker-dropdown {\n  top: 0;\n  left: 0;\n}\n.datepicker-dropdown:before {\n  content: '';\n  display: inline-block;\n  border-left: 7px solid transparent;\n  border-right: 7px solid transparent;\n  border-bottom: 7px solid #ccc;\n  border-top: 0;\n  border-bottom-color: rgba(0, 0, 0, 0.2);\n  position: absolute;\n}\n.datepicker-dropdown:after {\n  content: '';\n  display: inline-block;\n  border-left: 6px solid transparent;\n  border-right: 6px solid transparent;\n  border-bottom: 6px solid #fff;\n  border-top: 0;\n  position: absolute;\n}\n.datepicker-dropdown.datepicker-orient-left:before {\n  left: 6px;\n}\n.datepicker-dropdown.datepicker-orient-left:after {\n  left: 7px;\n}\n.datepicker-dropdown.datepicker-orient-right:before {\n  right: 6px;\n}\n.datepicker-dropdown.datepicker-orient-right:after {\n  right: 7px;\n}\n.datepicker-dropdown.datepicker-orient-top:before {\n  top: -7px;\n}\n.datepicker-dropdown.datepicker-orient-top:after {\n  top: -6px;\n}\n.datepicker-dropdown.datepicker-orient-bottom:before {\n  bottom: -7px;\n  border-bottom: 0;\n  border-top: 7px solid #999;\n}\n.datepicker-dropdown.datepicker-orient-bottom:after {\n  bottom: -6px;\n  border-bottom: 0;\n  border-top: 6px solid #fff;\n}\n.datepicker > div {\n  display: none;\n}\n.datepicker.days div.datepicker-days {\n  display: block;\n}\n.datepicker.months div.datepicker-months {\n  display: block;\n}\n.datepicker.years div.datepicker-years {\n  display: block;\n}\n.datepicker table {\n  margin: 0;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.datepicker table tr td,\n.datepicker table tr th {\n  text-align: center;\n  width: 30px;\n  height: 30px;\n  border-radius: 4px;\n  border: none;\n}\n.table-striped .datepicker table tr td,\n.table-striped .datepicker table tr th {\n  background-color: transparent;\n}\n.datepicker table tr td.day:hover,\n.datepicker table tr td.day.focused {\n  background: rgba(0,0,0,0.2);\n  cursor: pointer;\n}\n.datepicker table tr td.old,\n.datepicker table tr td.new {\n  color: #777;\n}\n.datepicker table tr td.disabled,\n.datepicker table tr td.disabled:hover {\n  background: none;\n  color: #444;\n  cursor: default;\n}\n.datepicker table tr td.today,\n.datepicker table tr td.today:hover,\n.datepicker table tr td.today.disabled,\n.datepicker table tr td.today.disabled:hover {\n  color: #000000;\n  background: rgba(0,0,0,0.2);\n  border-color: #ffb733;\n}\n.datepicker table tr td.today:hover,\n.datepicker table tr td.today:hover:hover,\n.datepicker table tr td.today.disabled:hover,\n.datepicker table tr td.today.disabled:hover:hover,\n.datepicker table tr td.today:focus,\n.datepicker table tr td.today:hover:focus,\n.datepicker table tr td.today.disabled:focus,\n.datepicker table tr td.today.disabled:hover:focus,\n.datepicker table tr td.today:active,\n.datepicker table tr td.today:hover:active,\n.datepicker table tr td.today.disabled:active,\n.datepicker table tr td.today.disabled:hover:active,\n.datepicker table tr td.today.active,\n.datepicker table tr td.today:hover.active,\n.datepicker table tr td.today.disabled.active,\n.datepicker table tr td.today.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.today,\n.open .dropdown-toggle.datepicker table tr td.today:hover,\n.open .dropdown-toggle.datepicker table tr td.today.disabled,\n.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {\n  color: #000000;\n  background: rgba(0,0,0,0.2);\n  border-color: #f59e00;\n}\n.datepicker table tr td.today:active,\n.datepicker table tr td.today:hover:active,\n.datepicker table tr td.today.disabled:active,\n.datepicker table tr td.today.disabled:hover:active,\n.datepicker table tr td.today.active,\n.datepicker table tr td.today:hover.active,\n.datepicker table tr td.today.disabled.active,\n.datepicker table tr td.today.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.today,\n.open .dropdown-toggle.datepicker table tr td.today:hover,\n.open .dropdown-toggle.datepicker table tr td.today.disabled,\n.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {\n  background-image: none;\n}\n.datepicker table tr td.today.disabled,\n.datepicker table tr td.today:hover.disabled,\n.datepicker table tr td.today.disabled.disabled,\n.datepicker table tr td.today.disabled:hover.disabled,\n.datepicker table tr td.today[disabled],\n.datepicker table tr td.today:hover[disabled],\n.datepicker table tr td.today.disabled[disabled],\n.datepicker table tr td.today.disabled:hover[disabled],\nfieldset[disabled] .datepicker table tr td.today,\nfieldset[disabled] .datepicker table tr td.today:hover,\nfieldset[disabled] .datepicker table tr td.today.disabled,\nfieldset[disabled] .datepicker table tr td.today.disabled:hover,\n.datepicker table tr td.today.disabled:hover,\n.datepicker table tr td.today:hover.disabled:hover,\n.datepicker table tr td.today.disabled.disabled:hover,\n.datepicker table tr td.today.disabled:hover.disabled:hover,\n.datepicker table tr td.today[disabled]:hover,\n.datepicker table tr td.today:hover[disabled]:hover,\n.datepicker table tr td.today.disabled[disabled]:hover,\n.datepicker table tr td.today.disabled:hover[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.today:hover,\nfieldset[disabled] .datepicker table tr td.today:hover:hover,\nfieldset[disabled] .datepicker table tr td.today.disabled:hover,\nfieldset[disabled] .datepicker table tr td.today.disabled:hover:hover,\n.datepicker table tr td.today.disabled:focus,\n.datepicker table tr td.today:hover.disabled:focus,\n.datepicker table tr td.today.disabled.disabled:focus,\n.datepicker table tr td.today.disabled:hover.disabled:focus,\n.datepicker table tr td.today[disabled]:focus,\n.datepicker table tr td.today:hover[disabled]:focus,\n.datepicker table tr td.today.disabled[disabled]:focus,\n.datepicker table tr td.today.disabled:hover[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.today:focus,\nfieldset[disabled] .datepicker table tr td.today:hover:focus,\nfieldset[disabled] .datepicker table tr td.today.disabled:focus,\nfieldset[disabled] .datepicker table tr td.today.disabled:hover:focus,\n.datepicker table tr td.today.disabled:active,\n.datepicker table tr td.today:hover.disabled:active,\n.datepicker table tr td.today.disabled.disabled:active,\n.datepicker table tr td.today.disabled:hover.disabled:active,\n.datepicker table tr td.today[disabled]:active,\n.datepicker table tr td.today:hover[disabled]:active,\n.datepicker table tr td.today.disabled[disabled]:active,\n.datepicker table tr td.today.disabled:hover[disabled]:active,\nfieldset[disabled] .datepicker table tr td.today:active,\nfieldset[disabled] .datepicker table tr td.today:hover:active,\nfieldset[disabled] .datepicker table tr td.today.disabled:active,\nfieldset[disabled] .datepicker table tr td.today.disabled:hover:active,\n.datepicker table tr td.today.disabled.active,\n.datepicker table tr td.today:hover.disabled.active,\n.datepicker table tr td.today.disabled.disabled.active,\n.datepicker table tr td.today.disabled:hover.disabled.active,\n.datepicker table tr td.today[disabled].active,\n.datepicker table tr td.today:hover[disabled].active,\n.datepicker table tr td.today.disabled[disabled].active,\n.datepicker table tr td.today.disabled:hover[disabled].active,\nfieldset[disabled] .datepicker table tr td.today.active,\nfieldset[disabled] .datepicker table tr td.today:hover.active,\nfieldset[disabled] .datepicker table tr td.today.disabled.active,\nfieldset[disabled] .datepicker table tr td.today.disabled:hover.active {\n  background: rgba(0,0,0,0.2);\n  border-color: #ffb733;\n}\n.datepicker table tr td.today:hover:hover {\n  color: #000;\n}\n.datepicker table tr td.today.active:hover {\n  color: #fff;\n}\n.datepicker table tr td.range,\n.datepicker table tr td.range:hover,\n.datepicker table tr td.range.disabled,\n.datepicker table tr td.range.disabled:hover {\n  background: rgba(0,0,0,0.2);\n  border-radius: 0;\n}\n.datepicker table tr td.range.today,\n.datepicker table tr td.range.today:hover,\n.datepicker table tr td.range.today.disabled,\n.datepicker table tr td.range.today.disabled:hover {\n  color: #000000;\n  background: rgba(0,0,0,0.2);\n  border-color: #f1a417;\n  border-radius: 0;\n}\n.datepicker table tr td.range.today:hover,\n.datepicker table tr td.range.today:hover:hover,\n.datepicker table tr td.range.today.disabled:hover,\n.datepicker table tr td.range.today.disabled:hover:hover,\n.datepicker table tr td.range.today:focus,\n.datepicker table tr td.range.today:hover:focus,\n.datepicker table tr td.range.today.disabled:focus,\n.datepicker table tr td.range.today.disabled:hover:focus,\n.datepicker table tr td.range.today:active,\n.datepicker table tr td.range.today:hover:active,\n.datepicker table tr td.range.today.disabled:active,\n.datepicker table tr td.range.today.disabled:hover:active,\n.datepicker table tr td.range.today.active,\n.datepicker table tr td.range.today:hover.active,\n.datepicker table tr td.range.today.disabled.active,\n.datepicker table tr td.range.today.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.range.today,\n.open .dropdown-toggle.datepicker table tr td.range.today:hover,\n.open .dropdown-toggle.datepicker table tr td.range.today.disabled,\n.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {\n  color: #000000;\n  background: rgba(0,0,0,0.2);\n  border-color: #bf800c;\n}\n.datepicker table tr td.range.today:active,\n.datepicker table tr td.range.today:hover:active,\n.datepicker table tr td.range.today.disabled:active,\n.datepicker table tr td.range.today.disabled:hover:active,\n.datepicker table tr td.range.today.active,\n.datepicker table tr td.range.today:hover.active,\n.datepicker table tr td.range.today.disabled.active,\n.datepicker table tr td.range.today.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.range.today,\n.open .dropdown-toggle.datepicker table tr td.range.today:hover,\n.open .dropdown-toggle.datepicker table tr td.range.today.disabled,\n.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {\n  background-image: none;\n}\n.datepicker table tr td.range.today.disabled,\n.datepicker table tr td.range.today:hover.disabled,\n.datepicker table tr td.range.today.disabled.disabled,\n.datepicker table tr td.range.today.disabled:hover.disabled,\n.datepicker table tr td.range.today[disabled],\n.datepicker table tr td.range.today:hover[disabled],\n.datepicker table tr td.range.today.disabled[disabled],\n.datepicker table tr td.range.today.disabled:hover[disabled],\nfieldset[disabled] .datepicker table tr td.range.today,\nfieldset[disabled] .datepicker table tr td.range.today:hover,\nfieldset[disabled] .datepicker table tr td.range.today.disabled,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:hover,\n.datepicker table tr td.range.today.disabled:hover,\n.datepicker table tr td.range.today:hover.disabled:hover,\n.datepicker table tr td.range.today.disabled.disabled:hover,\n.datepicker table tr td.range.today.disabled:hover.disabled:hover,\n.datepicker table tr td.range.today[disabled]:hover,\n.datepicker table tr td.range.today:hover[disabled]:hover,\n.datepicker table tr td.range.today.disabled[disabled]:hover,\n.datepicker table tr td.range.today.disabled:hover[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.range.today:hover,\nfieldset[disabled] .datepicker table tr td.range.today:hover:hover,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:hover,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:hover:hover,\n.datepicker table tr td.range.today.disabled:focus,\n.datepicker table tr td.range.today:hover.disabled:focus,\n.datepicker table tr td.range.today.disabled.disabled:focus,\n.datepicker table tr td.range.today.disabled:hover.disabled:focus,\n.datepicker table tr td.range.today[disabled]:focus,\n.datepicker table tr td.range.today:hover[disabled]:focus,\n.datepicker table tr td.range.today.disabled[disabled]:focus,\n.datepicker table tr td.range.today.disabled:hover[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.range.today:focus,\nfieldset[disabled] .datepicker table tr td.range.today:hover:focus,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:focus,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:hover:focus,\n.datepicker table tr td.range.today.disabled:active,\n.datepicker table tr td.range.today:hover.disabled:active,\n.datepicker table tr td.range.today.disabled.disabled:active,\n.datepicker table tr td.range.today.disabled:hover.disabled:active,\n.datepicker table tr td.range.today[disabled]:active,\n.datepicker table tr td.range.today:hover[disabled]:active,\n.datepicker table tr td.range.today.disabled[disabled]:active,\n.datepicker table tr td.range.today.disabled:hover[disabled]:active,\nfieldset[disabled] .datepicker table tr td.range.today:active,\nfieldset[disabled] .datepicker table tr td.range.today:hover:active,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:active,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:hover:active,\n.datepicker table tr td.range.today.disabled.active,\n.datepicker table tr td.range.today:hover.disabled.active,\n.datepicker table tr td.range.today.disabled.disabled.active,\n.datepicker table tr td.range.today.disabled:hover.disabled.active,\n.datepicker table tr td.range.today[disabled].active,\n.datepicker table tr td.range.today:hover[disabled].active,\n.datepicker table tr td.range.today.disabled[disabled].active,\n.datepicker table tr td.range.today.disabled:hover[disabled].active,\nfieldset[disabled] .datepicker table tr td.range.today.active,\nfieldset[disabled] .datepicker table tr td.range.today:hover.active,\nfieldset[disabled] .datepicker table tr td.range.today.disabled.active,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active {\n  background: rgba(0,0,0,0.2);\n  border-color: #f1a417;\n}\n.datepicker table tr td.selected,\n.datepicker table tr td.selected:hover,\n.datepicker table tr td.selected.disabled,\n.datepicker table tr td.selected.disabled:hover {\n  color: #ffffff;\n  background: rgba(0,0,0,0.2);\n  border-color: #555555;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.datepicker table tr td.selected:hover,\n.datepicker table tr td.selected:hover:hover,\n.datepicker table tr td.selected.disabled:hover,\n.datepicker table tr td.selected.disabled:hover:hover,\n.datepicker table tr td.selected:focus,\n.datepicker table tr td.selected:hover:focus,\n.datepicker table tr td.selected.disabled:focus,\n.datepicker table tr td.selected.disabled:hover:focus,\n.datepicker table tr td.selected:active,\n.datepicker table tr td.selected:hover:active,\n.datepicker table tr td.selected.disabled:active,\n.datepicker table tr td.selected.disabled:hover:active,\n.datepicker table tr td.selected.active,\n.datepicker table tr td.selected:hover.active,\n.datepicker table tr td.selected.disabled.active,\n.datepicker table tr td.selected.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.selected,\n.open .dropdown-toggle.datepicker table tr td.selected:hover,\n.open .dropdown-toggle.datepicker table tr td.selected.disabled,\n.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {\n  color: #ffffff;\n  background: rgba(0,0,0,0.2);\n  border-color: #373737;\n}\n.datepicker table tr td.selected:active,\n.datepicker table tr td.selected:hover:active,\n.datepicker table tr td.selected.disabled:active,\n.datepicker table tr td.selected.disabled:hover:active,\n.datepicker table tr td.selected.active,\n.datepicker table tr td.selected:hover.active,\n.datepicker table tr td.selected.disabled.active,\n.datepicker table tr td.selected.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.selected,\n.open .dropdown-toggle.datepicker table tr td.selected:hover,\n.open .dropdown-toggle.datepicker table tr td.selected.disabled,\n.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {\n  background-image: none;\n}\n.datepicker table tr td.selected.disabled,\n.datepicker table tr td.selected:hover.disabled,\n.datepicker table tr td.selected.disabled.disabled,\n.datepicker table tr td.selected.disabled:hover.disabled,\n.datepicker table tr td.selected[disabled],\n.datepicker table tr td.selected:hover[disabled],\n.datepicker table tr td.selected.disabled[disabled],\n.datepicker table tr td.selected.disabled:hover[disabled],\nfieldset[disabled] .datepicker table tr td.selected,\nfieldset[disabled] .datepicker table tr td.selected:hover,\nfieldset[disabled] .datepicker table tr td.selected.disabled,\nfieldset[disabled] .datepicker table tr td.selected.disabled:hover,\n.datepicker table tr td.selected.disabled:hover,\n.datepicker table tr td.selected:hover.disabled:hover,\n.datepicker table tr td.selected.disabled.disabled:hover,\n.datepicker table tr td.selected.disabled:hover.disabled:hover,\n.datepicker table tr td.selected[disabled]:hover,\n.datepicker table tr td.selected:hover[disabled]:hover,\n.datepicker table tr td.selected.disabled[disabled]:hover,\n.datepicker table tr td.selected.disabled:hover[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.selected:hover,\nfieldset[disabled] .datepicker table tr td.selected:hover:hover,\nfieldset[disabled] .datepicker table tr td.selected.disabled:hover,\nfieldset[disabled] .datepicker table tr td.selected.disabled:hover:hover,\n.datepicker table tr td.selected.disabled:focus,\n.datepicker table tr td.selected:hover.disabled:focus,\n.datepicker table tr td.selected.disabled.disabled:focus,\n.datepicker table tr td.selected.disabled:hover.disabled:focus,\n.datepicker table tr td.selected[disabled]:focus,\n.datepicker table tr td.selected:hover[disabled]:focus,\n.datepicker table tr td.selected.disabled[disabled]:focus,\n.datepicker table tr td.selected.disabled:hover[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.selected:focus,\nfieldset[disabled] .datepicker table tr td.selected:hover:focus,\nfieldset[disabled] .datepicker table tr td.selected.disabled:focus,\nfieldset[disabled] .datepicker table tr td.selected.disabled:hover:focus,\n.datepicker table tr td.selected.disabled:active,\n.datepicker table tr td.selected:hover.disabled:active,\n.datepicker table tr td.selected.disabled.disabled:active,\n.datepicker table tr td.selected.disabled:hover.disabled:active,\n.datepicker table tr td.selected[disabled]:active,\n.datepicker table tr td.selected:hover[disabled]:active,\n.datepicker table tr td.selected.disabled[disabled]:active,\n.datepicker table tr td.selected.disabled:hover[disabled]:active,\nfieldset[disabled] .datepicker table tr td.selected:active,\nfieldset[disabled] .datepicker table tr td.selected:hover:active,\nfieldset[disabled] .datepicker table tr td.selected.disabled:active,\nfieldset[disabled] .datepicker table tr td.selected.disabled:hover:active,\n.datepicker table tr td.selected.disabled.active,\n.datepicker table tr td.selected:hover.disabled.active,\n.datepicker table tr td.selected.disabled.disabled.active,\n.datepicker table tr td.selected.disabled:hover.disabled.active,\n.datepicker table tr td.selected[disabled].active,\n.datepicker table tr td.selected:hover[disabled].active,\n.datepicker table tr td.selected.disabled[disabled].active,\n.datepicker table tr td.selected.disabled:hover[disabled].active,\nfieldset[disabled] .datepicker table tr td.selected.active,\nfieldset[disabled] .datepicker table tr td.selected:hover.active,\nfieldset[disabled] .datepicker table tr td.selected.disabled.active,\nfieldset[disabled] .datepicker table tr td.selected.disabled:hover.active {\n  background: rgba(0,0,0,0.2);\n  border-color: #555555;\n}\n.datepicker table tr td.active,\n.datepicker table tr td.active:hover,\n.datepicker table tr td.active.disabled,\n.datepicker table tr td.active.disabled:hover {\n  color: #ffffff;\n  background: rgba(0,0,0,0.2);\n  border-color: #357ebd;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.datepicker table tr td.active:hover,\n.datepicker table tr td.active:hover:hover,\n.datepicker table tr td.active.disabled:hover,\n.datepicker table tr td.active.disabled:hover:hover,\n.datepicker table tr td.active:focus,\n.datepicker table tr td.active:hover:focus,\n.datepicker table tr td.active.disabled:focus,\n.datepicker table tr td.active.disabled:hover:focus,\n.datepicker table tr td.active:active,\n.datepicker table tr td.active:hover:active,\n.datepicker table tr td.active.disabled:active,\n.datepicker table tr td.active.disabled:hover:active,\n.datepicker table tr td.active.active,\n.datepicker table tr td.active:hover.active,\n.datepicker table tr td.active.disabled.active,\n.datepicker table tr td.active.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.active,\n.open .dropdown-toggle.datepicker table tr td.active:hover,\n.open .dropdown-toggle.datepicker table tr td.active.disabled,\n.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {\n  color: #ffffff;\n  background: rgba(0,0,0,0.5);\n  border-color: #285e8e;\n}\n.datepicker table tr td.active:active,\n.datepicker table tr td.active:hover:active,\n.datepicker table tr td.active.disabled:active,\n.datepicker table tr td.active.disabled:hover:active,\n.datepicker table tr td.active.active,\n.datepicker table tr td.active:hover.active,\n.datepicker table tr td.active.disabled.active,\n.datepicker table tr td.active.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.active,\n.open .dropdown-toggle.datepicker table tr td.active:hover,\n.open .dropdown-toggle.datepicker table tr td.active.disabled,\n.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {\n  background-image: none;\n}\n.datepicker table tr td.active.disabled,\n.datepicker table tr td.active:hover.disabled,\n.datepicker table tr td.active.disabled.disabled,\n.datepicker table tr td.active.disabled:hover.disabled,\n.datepicker table tr td.active[disabled],\n.datepicker table tr td.active:hover[disabled],\n.datepicker table tr td.active.disabled[disabled],\n.datepicker table tr td.active.disabled:hover[disabled],\nfieldset[disabled] .datepicker table tr td.active,\nfieldset[disabled] .datepicker table tr td.active:hover,\nfieldset[disabled] .datepicker table tr td.active.disabled,\nfieldset[disabled] .datepicker table tr td.active.disabled:hover,\n.datepicker table tr td.active.disabled:hover,\n.datepicker table tr td.active:hover.disabled:hover,\n.datepicker table tr td.active.disabled.disabled:hover,\n.datepicker table tr td.active.disabled:hover.disabled:hover,\n.datepicker table tr td.active[disabled]:hover,\n.datepicker table tr td.active:hover[disabled]:hover,\n.datepicker table tr td.active.disabled[disabled]:hover,\n.datepicker table tr td.active.disabled:hover[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.active:hover,\nfieldset[disabled] .datepicker table tr td.active:hover:hover,\nfieldset[disabled] .datepicker table tr td.active.disabled:hover,\nfieldset[disabled] .datepicker table tr td.active.disabled:hover:hover,\n.datepicker table tr td.active.disabled:focus,\n.datepicker table tr td.active:hover.disabled:focus,\n.datepicker table tr td.active.disabled.disabled:focus,\n.datepicker table tr td.active.disabled:hover.disabled:focus,\n.datepicker table tr td.active[disabled]:focus,\n.datepicker table tr td.active:hover[disabled]:focus,\n.datepicker table tr td.active.disabled[disabled]:focus,\n.datepicker table tr td.active.disabled:hover[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.active:focus,\nfieldset[disabled] .datepicker table tr td.active:hover:focus,\nfieldset[disabled] .datepicker table tr td.active.disabled:focus,\nfieldset[disabled] .datepicker table tr td.active.disabled:hover:focus,\n.datepicker table tr td.active.disabled:active,\n.datepicker table tr td.active:hover.disabled:active,\n.datepicker table tr td.active.disabled.disabled:active,\n.datepicker table tr td.active.disabled:hover.disabled:active,\n.datepicker table tr td.active[disabled]:active,\n.datepicker table tr td.active:hover[disabled]:active,\n.datepicker table tr td.active.disabled[disabled]:active,\n.datepicker table tr td.active.disabled:hover[disabled]:active,\nfieldset[disabled] .datepicker table tr td.active:active,\nfieldset[disabled] .datepicker table tr td.active:hover:active,\nfieldset[disabled] .datepicker table tr td.active.disabled:active,\nfieldset[disabled] .datepicker table tr td.active.disabled:hover:active,\n.datepicker table tr td.active.disabled.active,\n.datepicker table tr td.active:hover.disabled.active,\n.datepicker table tr td.active.disabled.disabled.active,\n.datepicker table tr td.active.disabled:hover.disabled.active,\n.datepicker table tr td.active[disabled].active,\n.datepicker table tr td.active:hover[disabled].active,\n.datepicker table tr td.active.disabled[disabled].active,\n.datepicker table tr td.active.disabled:hover[disabled].active,\nfieldset[disabled] .datepicker table tr td.active.active,\nfieldset[disabled] .datepicker table tr td.active:hover.active,\nfieldset[disabled] .datepicker table tr td.active.disabled.active,\nfieldset[disabled] .datepicker table tr td.active.disabled:hover.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.datepicker table tr td span {\n  display: block;\n  width: 23%;\n  height: 54px;\n  line-height: 54px;\n  float: left;\n  margin: 1%;\n  cursor: pointer;\n  border-radius: 4px;\n}\n.datepicker table tr td span:hover {\n  background: rgba(0,0,0,0.2);\n}\n.datepicker table tr td span.disabled,\n.datepicker table tr td span.disabled:hover {\n  background: none;\n  color: #444;\n  cursor: default;\n}\n.datepicker table tr td span.active,\n.datepicker table tr td span.active:hover,\n.datepicker table tr td span.active.disabled,\n.datepicker table tr td span.active.disabled:hover {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #357ebd;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.datepicker table tr td span.active:hover,\n.datepicker table tr td span.active:hover:hover,\n.datepicker table tr td span.active.disabled:hover,\n.datepicker table tr td span.active.disabled:hover:hover,\n.datepicker table tr td span.active:focus,\n.datepicker table tr td span.active:hover:focus,\n.datepicker table tr td span.active.disabled:focus,\n.datepicker table tr td span.active.disabled:hover:focus,\n.datepicker table tr td span.active:active,\n.datepicker table tr td span.active:hover:active,\n.datepicker table tr td span.active.disabled:active,\n.datepicker table tr td span.active.disabled:hover:active,\n.datepicker table tr td span.active.active,\n.datepicker table tr td span.active:hover.active,\n.datepicker table tr td span.active.disabled.active,\n.datepicker table tr td span.active.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td span.active,\n.open .dropdown-toggle.datepicker table tr td span.active:hover,\n.open .dropdown-toggle.datepicker table tr td span.active.disabled,\n.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {\n  color: #ffffff;\n  background-color: #3276b1;\n  border-color: #285e8e;\n}\n.datepicker table tr td span.active:active,\n.datepicker table tr td span.active:hover:active,\n.datepicker table tr td span.active.disabled:active,\n.datepicker table tr td span.active.disabled:hover:active,\n.datepicker table tr td span.active.active,\n.datepicker table tr td span.active:hover.active,\n.datepicker table tr td span.active.disabled.active,\n.datepicker table tr td span.active.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td span.active,\n.open .dropdown-toggle.datepicker table tr td span.active:hover,\n.open .dropdown-toggle.datepicker table tr td span.active.disabled,\n.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {\n  background-image: none;\n}\n.datepicker table tr td span.active.disabled,\n.datepicker table tr td span.active:hover.disabled,\n.datepicker table tr td span.active.disabled.disabled,\n.datepicker table tr td span.active.disabled:hover.disabled,\n.datepicker table tr td span.active[disabled],\n.datepicker table tr td span.active:hover[disabled],\n.datepicker table tr td span.active.disabled[disabled],\n.datepicker table tr td span.active.disabled:hover[disabled],\nfieldset[disabled] .datepicker table tr td span.active,\nfieldset[disabled] .datepicker table tr td span.active:hover,\nfieldset[disabled] .datepicker table tr td span.active.disabled,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover,\n.datepicker table tr td span.active.disabled:hover,\n.datepicker table tr td span.active:hover.disabled:hover,\n.datepicker table tr td span.active.disabled.disabled:hover,\n.datepicker table tr td span.active.disabled:hover.disabled:hover,\n.datepicker table tr td span.active[disabled]:hover,\n.datepicker table tr td span.active:hover[disabled]:hover,\n.datepicker table tr td span.active.disabled[disabled]:hover,\n.datepicker table tr td span.active.disabled:hover[disabled]:hover,\nfieldset[disabled] .datepicker table tr td span.active:hover,\nfieldset[disabled] .datepicker table tr td span.active:hover:hover,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,\n.datepicker table tr td span.active.disabled:focus,\n.datepicker table tr td span.active:hover.disabled:focus,\n.datepicker table tr td span.active.disabled.disabled:focus,\n.datepicker table tr td span.active.disabled:hover.disabled:focus,\n.datepicker table tr td span.active[disabled]:focus,\n.datepicker table tr td span.active:hover[disabled]:focus,\n.datepicker table tr td span.active.disabled[disabled]:focus,\n.datepicker table tr td span.active.disabled:hover[disabled]:focus,\nfieldset[disabled] .datepicker table tr td span.active:focus,\nfieldset[disabled] .datepicker table tr td span.active:hover:focus,\nfieldset[disabled] .datepicker table tr td span.active.disabled:focus,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,\n.datepicker table tr td span.active.disabled:active,\n.datepicker table tr td span.active:hover.disabled:active,\n.datepicker table tr td span.active.disabled.disabled:active,\n.datepicker table tr td span.active.disabled:hover.disabled:active,\n.datepicker table tr td span.active[disabled]:active,\n.datepicker table tr td span.active:hover[disabled]:active,\n.datepicker table tr td span.active.disabled[disabled]:active,\n.datepicker table tr td span.active.disabled:hover[disabled]:active,\nfieldset[disabled] .datepicker table tr td span.active:active,\nfieldset[disabled] .datepicker table tr td span.active:hover:active,\nfieldset[disabled] .datepicker table tr td span.active.disabled:active,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover:active,\n.datepicker table tr td span.active.disabled.active,\n.datepicker table tr td span.active:hover.disabled.active,\n.datepicker table tr td span.active.disabled.disabled.active,\n.datepicker table tr td span.active.disabled:hover.disabled.active,\n.datepicker table tr td span.active[disabled].active,\n.datepicker table tr td span.active:hover[disabled].active,\n.datepicker table tr td span.active.disabled[disabled].active,\n.datepicker table tr td span.active.disabled:hover[disabled].active,\nfieldset[disabled] .datepicker table tr td span.active.active,\nfieldset[disabled] .datepicker table tr td span.active:hover.active,\nfieldset[disabled] .datepicker table tr td span.active.disabled.active,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.datepicker table tr td span.old,\n.datepicker table tr td span.new {\n  color: #444;\n}\n.datepicker th.datepicker-switch {\n  width: 145px;\n}\n.datepicker thead tr:first-child th,\n.datepicker tfoot tr th {\n  cursor: pointer;\n}\n.datepicker thead tr:first-child th:hover,\n.datepicker tfoot tr th:hover {\n  background: rgba(0,0,0,0.2);\n}\n.datepicker .cw {\n  font-size: 10px;\n  width: 12px;\n  padding: 0 2px 0 5px;\n  vertical-align: middle;\n}\n.datepicker thead tr:first-child th.cw {\n  cursor: default;\n  background-color: transparent;\n}\n.input-group.date .input-group-addon i {\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n}\n.input-daterange input {\n  text-align: center;\n}\n.input-daterange input:first-child {\n  border-radius: 3px 0 0 3px;\n}\n.input-daterange input:last-child {\n  border-radius: 0 3px 3px 0;\n}\n.input-daterange .input-group-addon {\n  width: auto;\n  min-width: 16px;\n  padding: 4px 5px;\n  font-weight: normal;\n  line-height: 1.428571429;\n  text-align: center;\n  text-shadow: 0 1px 0 #fff;\n  vertical-align: middle;\n  background-color: #eeeeee;\n  border: solid #cccccc;\n  border-width: 1px 0;\n  margin-left: -5px;\n  margin-right: -5px;\n}\n.datepicker.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  float: left;\n  display: none;\n  min-width: 160px;\n  list-style: none;\n  background-color: #ffffff;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 5px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  -webkit-background-clip: padding-box;\n  -moz-background-clip: padding;\n  background-clip: padding-box;\n  *border-right-width: 2px;\n  *border-bottom-width: 2px;\n  color: #333333;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 13px;\n  line-height: 1.428571429;\n}\n.datepicker.dropdown-menu th,\n.datepicker.dropdown-menu td {\n  padding: 4px 5px;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.ar.js",
    "content": "/**\n * Arabic translation for bootstrap-datepicker\n * Mohammed Alshehri <alshehri866@gmail.com>\n */\n;(function($){\n    $.fn.datepicker.dates['ar'] = {\n        days: [\"الأحد\", \"الاثنين\", \"الثلاثاء\", \"الأربعاء\", \"الخميس\", \"الجمعة\", \"السبت\", \"الأحد\"],\n        daysShort: [\"أحد\", \"اثنين\", \"ثلاثاء\", \"أربعاء\", \"خميس\", \"جمعة\", \"سبت\", \"أحد\"],\n        daysMin: [\"ح\", \"ن\", \"ث\", \"ع\", \"خ\", \"ج\", \"س\", \"ح\"],\n        months: [\"يناير\", \"فبراير\", \"مارس\", \"أبريل\", \"مايو\", \"يونيو\", \"يوليو\", \"أغسطس\", \"سبتمبر\", \"أكتوبر\", \"نوفمبر\", \"ديسمبر\"],\n        monthsShort: [\"يناير\", \"فبراير\", \"مارس\", \"أبريل\", \"مايو\", \"يونيو\", \"يوليو\", \"أغسطس\", \"سبتمبر\", \"أكتوبر\", \"نوفمبر\", \"ديسمبر\"],\n        today: \"هذا اليوم\",\n        rtl: true\n    };\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.az.js",
    "content": "// Azerbaijani\n;(function($){\n    $.fn.datepicker.dates['az'] = {\n        days: [\"Bazar\", \"Bazar ertəsi\", \"Çərşənbə axşamı\", \"Çərşənbə\", \"Cümə axşamı\", \"Cümə\", \"Şənbə\", \"Bazar\"],\n        daysShort: [\"B.\", \"B.e\", \"Ç.a\", \"Ç.\", \"C.a\", \"C.\", \"Ş.\", \"B.\"],\n        daysMin: [\"B.\", \"B.e\", \"Ç.a\", \"Ç.\", \"C.a\", \"C.\", \"Ş.\", \"B.\"],\n        months: [\"Yanvar\", \"Fevral\", \"Mart\", \"Aprel\", \"May\", \"İyun\", \"İyul\", \"Avqust\", \"Sentyabr\", \"Oktyabr\", \"Noyabr\", \"Dekabr\"],\n        monthsShort: [\"Yan\", \"Fev\", \"Mar\", \"Apr\", \"May\", \"İyun\", \"İyul\", \"Avq\", \"Sen\", \"Okt\", \"Noy\", \"Dek\"],\n        today: \"Bu gün\",\n        weekStart: 1\n    };\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.bg.js",
    "content": "/**\n * Bulgarian translation for bootstrap-datepicker\n * Apostol Apostolov <apostol.s.apostolov@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['bg'] = {\n\t\tdays: [\"Неделя\", \"Понеделник\", \"Вторник\", \"Сряда\", \"Четвъртък\", \"Петък\", \"Събота\", \"Неделя\"],\n\t\tdaysShort: [\"Нед\", \"Пон\", \"Вто\", \"Сря\", \"Чет\", \"Пет\", \"Съб\", \"Нед\"],\n\t\tdaysMin: [\"Н\", \"П\", \"В\", \"С\", \"Ч\", \"П\", \"С\", \"Н\"],\n\t\tmonths: [\"Януари\", \"Февруари\", \"Март\", \"Април\", \"Май\", \"Юни\", \"Юли\", \"Август\", \"Септември\", \"Октомври\", \"Ноември\", \"Декември\"],\n\t\tmonthsShort: [\"Ян\", \"Фев\", \"Мар\", \"Апр\", \"Май\", \"Юни\", \"Юли\", \"Авг\", \"Сеп\", \"Окт\", \"Ное\", \"Дек\"],\n\t\ttoday: \"днес\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.ca.js",
    "content": "/**\n * Catalan translation for bootstrap-datepicker\n * J. Garcia <jogaco.en@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['ca'] = {\n\t\tdays: [\"Diumenge\", \"Dilluns\", \"Dimarts\", \"Dimecres\", \"Dijous\", \"Divendres\", \"Dissabte\", \"Diumenge\"],\n\t\tdaysShort: [\"Diu\",  \"Dil\", \"Dmt\", \"Dmc\", \"Dij\", \"Div\", \"Dis\", \"Diu\"],\n\t\tdaysMin: [\"dg\", \"dl\", \"dt\", \"dc\", \"dj\", \"dv\", \"ds\", \"dg\"],\n\t\tmonths: [\"Gener\", \"Febrer\", \"Març\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"],\n\t\tmonthsShort: [\"Gen\", \"Feb\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Oct\", \"Nov\", \"Des\"],\n\t\ttoday: \"Avui\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.cs.js",
    "content": "/**\n * Czech translation for bootstrap-datepicker\n * Matěj Koubík <matej@koubik.name>\n * Fixes by Michal Remiš <michal.remis@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['cs'] = {\n\t\tdays: [\"Neděle\", \"Pondělí\", \"Úterý\", \"Středa\", \"Čtvrtek\", \"Pátek\", \"Sobota\", \"Neděle\"],\n\t\tdaysShort: [\"Ned\", \"Pon\", \"Úte\", \"Stř\", \"Čtv\", \"Pát\", \"Sob\", \"Ned\"],\n\t\tdaysMin: [\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\", \"Ne\"],\n\t\tmonths: [\"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\", \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\"],\n\t\tmonthsShort: [\"Led\", \"Úno\", \"Bře\", \"Dub\", \"Kvě\", \"Čer\", \"Čnc\", \"Srp\", \"Zář\", \"Říj\", \"Lis\", \"Pro\"],\n\t\ttoday: \"Dnes\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.cy.js",
    "content": "/**\n * Welsh translation for bootstrap-datepicker\n * S. Morris <s.morris@bangor.ac.uk>\n */\n;(function($){\n\t$.fn.datepicker.dates['cy'] = {\n\t\tdays: [\"Sul\", \"Llun\", \"Mawrth\", \"Mercher\", \"Iau\", \"Gwener\", \"Sadwrn\", \"Sul\"],\n\t\tdaysShort: [\"Sul\", \"Llu\", \"Maw\", \"Mer\", \"Iau\", \"Gwe\", \"Sad\", \"Sul\"],\n\t\tdaysMin: [\"Su\", \"Ll\", \"Ma\", \"Me\", \"Ia\", \"Gwe\", \"Sa\", \"Su\"],\n\t\tmonths: [\"Ionawr\", \"Chewfror\", \"Mawrth\", \"Ebrill\", \"Mai\", \"Mehefin\", \"Gorfennaf\", \"Awst\", \"Medi\", \"Hydref\", \"Tachwedd\", \"Rhagfyr\"],\n\t\tmonthsShort: [\"Ion\", \"Chw\", \"Maw\", \"Ebr\", \"Mai\", \"Meh\", \"Gor\", \"Aws\", \"Med\", \"Hyd\", \"Tach\", \"Rha\"],\n\t\ttoday: \"Heddiw\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.da.js",
    "content": "/**\n * Danish translation for bootstrap-datepicker\n * Christian Pedersen <http://github.com/chripede>\n */\n;(function($){\n\t$.fn.datepicker.dates['da'] = {\n\t\tdays: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\", \"Søndag\"],\n\t\tdaysShort: [\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\", \"Søn\"],\n\t\tdaysMin: [\"Sø\", \"Ma\", \"Ti\", \"On\", \"To\", \"Fr\", \"Lø\", \"Sø\"],\n\t\tmonths: [\"Januar\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"I Dag\",\n\t\tclear: \"Nulstil\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.de.js",
    "content": "/**\n * German translation for bootstrap-datepicker\n * Sam Zurcher <sam@orelias.ch>\n */\n;(function($){\n\t$.fn.datepicker.dates['de'] = {\n\t\tdays: [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\", \"Sonntag\"],\n\t\tdaysShort: [\"Son\", \"Mon\", \"Die\", \"Mit\", \"Don\", \"Fre\", \"Sam\", \"Son\"],\n\t\tdaysMin: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\", \"So\"],\n\t\tmonths: [\"Januar\", \"Februar\", \"März\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mär\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dez\"],\n\t\ttoday: \"Heute\",\n\t\tclear: \"Löschen\",\n\t\tweekStart: 1,\n\t\tformat: \"dd.mm.yyyy\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.el.js",
    "content": "/**\n * Greek translation for bootstrap-datepicker\n */\n;(function($){\n  $.fn.datepicker.dates['el'] = {\n    days: [\"Κυριακή\", \"Δευτέρα\", \"Τρίτη\", \"Τετάρτη\", \"Πέμπτη\", \"Παρασκευή\", \"Σάββατο\", \"Κυριακή\"],\n    daysShort: [\"Κυρ\", \"Δευ\", \"Τρι\", \"Τετ\", \"Πεμ\", \"Παρ\", \"Σαβ\", \"Κυρ\"],\n    daysMin: [\"Κυ\", \"Δε\", \"Τρ\", \"Τε\", \"Πε\", \"Πα\", \"Σα\", \"Κυ\"],\n    months: [\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάιος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"],\n    monthsShort: [\"Ιαν\", \"Φεβ\", \"Μαρ\", \"Απρ\", \"Μάι\", \"Ιουν\", \"Ιουλ\", \"Αυγ\", \"Σεπ\", \"Οκτ\", \"Νοε\", \"Δεκ\"],\n    today: \"Σήμερα\"\n  };\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.es.js",
    "content": "/**\n * Spanish translation for bootstrap-datepicker\n * Bruno Bonamin <bruno.bonamin@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['es'] = {\n\t\tdays: [\"Domingo\", \"Lunes\", \"Martes\", \"Miércoles\", \"Jueves\", \"Viernes\", \"Sábado\", \"Domingo\"],\n\t\tdaysShort: [\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\", \"Dom\"],\n\t\tdaysMin: [\"Do\", \"Lu\", \"Ma\", \"Mi\", \"Ju\", \"Vi\", \"Sa\", \"Do\"],\n\t\tmonths: [\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"],\n\t\tmonthsShort: [\"Ene\", \"Feb\", \"Mar\", \"Abr\", \"May\", \"Jun\", \"Jul\", \"Ago\", \"Sep\", \"Oct\", \"Nov\", \"Dic\"],\n\t\ttoday: \"Hoy\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.et.js",
    "content": "/**\n * Estonian translation for bootstrap-datepicker\n * Ando Roots <https://github.com/anroots>\n * Fixes by Illimar Tambek <<https://github.com/ragulka>\n */\n;(function($){\n\t$.fn.datepicker.dates['et'] = {\n\t\tdays: [\"Pühapäev\", \"Esmaspäev\", \"Teisipäev\", \"Kolmapäev\", \"Neljapäev\", \"Reede\", \"Laupäev\", \"Pühapäev\"],\n\t\tdaysShort: [\"Pühap\", \"Esmasp\", \"Teisip\", \"Kolmap\", \"Neljap\", \"Reede\", \"Laup\", \"Pühap\"],\n\t\tdaysMin: [\"P\", \"E\", \"T\", \"K\", \"N\", \"R\", \"L\", \"P\"],\n\t\tmonths: [\"Jaanuar\", \"Veebruar\", \"Märts\", \"Aprill\", \"Mai\", \"Juuni\", \"Juuli\", \"August\", \"September\", \"Oktoober\", \"November\", \"Detsember\"],\n\t\tmonthsShort: [\"Jaan\", \"Veebr\", \"Märts\", \"Apr\", \"Mai\", \"Juuni\", \"Juuli\", \"Aug\", \"Sept\", \"Okt\", \"Nov\", \"Dets\"],\n\t\ttoday: \"Täna\",\n\t\tclear: \"Tühjenda\",\n\t\tweekStart: 1,\n\t\tformat: \"dd.mm.yyyy\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.fa.js",
    "content": "/**\n * Persian translation for bootstrap-datepicker\n * Mostafa Rokooie <mostafa.rokooie@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['fa'] = {\n\t\tdays: [\"یک‌شنبه\", \"دوشنبه\", \"سه‌شنبه\", \"چهارشنبه\", \"پنج‌شنبه\", \"جمعه\", \"شنبه\", \"یک‌شنبه\"],\n\t\tdaysShort: [\"یک\", \"دو\", \"سه\", \"چهار\", \"پنج\", \"جمعه\", \"شنبه\", \"یک\"],\n\t\tdaysMin: [\"ی\", \"د\", \"س\", \"چ\", \"پ\", \"ج\", \"ش\", \"ی\"],\n\t\tmonths: [\"ژانویه\", \"فوریه\", \"مارس\", \"آوریل\", \"مه\", \"ژوئن\", \"ژوئیه\", \"اوت\", \"سپتامبر\", \"اکتبر\", \"نوامبر\", \"دسامبر\"],\n\t\tmonthsShort: [\"ژان\", \"فور\", \"مار\", \"آور\", \"مه\", \"ژون\", \"ژوی\", \"اوت\", \"سپت\", \"اکت\", \"نوا\", \"دسا\"],\n\t\ttoday: \"امروز\",\n\t\tclear: \"پاک کن\",\n\t\tweekStart: 1,\n\t\tformat: \"yyyy/mm/dd\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.fi.js",
    "content": "/**\n * Finnish translation for bootstrap-datepicker\n * Jaakko Salonen <https://github.com/jsalonen>\n */\n;(function($){\n\t$.fn.datepicker.dates['fi'] = {\n\t\tdays: [\"sunnuntai\", \"maanantai\", \"tiistai\", \"keskiviikko\", \"torstai\", \"perjantai\", \"lauantai\", \"sunnuntai\"],\n\t\tdaysShort: [\"sun\", \"maa\", \"tii\", \"kes\", \"tor\", \"per\", \"lau\", \"sun\"],\n\t\tdaysMin: [\"su\", \"ma\", \"ti\", \"ke\", \"to\", \"pe\", \"la\", \"su\"],\n\t\tmonths: [\"tammikuu\", \"helmikuu\", \"maaliskuu\", \"huhtikuu\", \"toukokuu\", \"kesäkuu\", \"heinäkuu\", \"elokuu\", \"syyskuu\", \"lokakuu\", \"marraskuu\", \"joulukuu\"],\n\t\tmonthsShort: [\"tam\", \"hel\", \"maa\", \"huh\", \"tou\", \"kes\", \"hei\", \"elo\", \"syy\", \"lok\", \"mar\", \"jou\"],\n\t\ttoday: \"tänään\",\n\t\tweekStart: 1,\n\t\tformat: \"d.m.yyyy\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.fr.js",
    "content": "/**\n * French translation for bootstrap-datepicker\n * Nico Mollet <nico.mollet@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['fr'] = {\n\t\tdays: [\"Dimanche\", \"Lundi\", \"Mardi\", \"Mercredi\", \"Jeudi\", \"Vendredi\", \"Samedi\", \"Dimanche\"],\n\t\tdaysShort: [\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\", \"Dim\"],\n\t\tdaysMin: [\"D\", \"L\", \"Ma\", \"Me\", \"J\", \"V\", \"S\", \"D\"],\n\t\tmonths: [\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"],\n\t\tmonthsShort: [\"Jan\", \"Fév\", \"Mar\", \"Avr\", \"Mai\", \"Jui\", \"Jul\", \"Aou\", \"Sep\", \"Oct\", \"Nov\", \"Déc\"],\n\t\ttoday: \"Aujourd'hui\",\n\t\tclear: \"Effacer\",\n\t\tweekStart: 1,\n\t\tformat: \"dd/mm/yyyy\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.gl.js",
    "content": ";(function($){\n\t$.fn.datepicker.dates['gl'] = {\n\t\tdays: [\"Domingo\", \"Luns\", \"Martes\", \"Mércores\", \"Xoves\", \"Venres\", \"Sábado\", \"Domingo\"],\n\t\tdaysShort: [\"Dom\", \"Lun\", \"Mar\", \"Mér\", \"Xov\", \"Ven\", \"Sáb\", \"Dom\"],\n\t\tdaysMin: [\"Do\", \"Lu\", \"Ma\", \"Me\", \"Xo\", \"Ve\", \"Sa\", \"Do\"],\n\t\tmonths: [\"Xaneiro\", \"Febreiro\", \"Marzo\", \"Abril\", \"Maio\", \"Xuño\", \"Xullo\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Decembro\"],\n\t\tmonthsShort: [\"Xan\", \"Feb\", \"Mar\", \"Abr\", \"Mai\", \"Xun\", \"Xul\", \"Ago\", \"Sep\", \"Out\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Hoxe\",\n\t\tclear: \"Limpar\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.he.js",
    "content": "/**\n * Hebrew translation for bootstrap-datepicker\n * Sagie Maoz <sagie@maoz.info>\n */\n;(function($){\n  $.fn.datepicker.dates['he'] = {\n      days: [\"ראשון\", \"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\", \"ראשון\"],\n      daysShort: [\"א\", \"ב\", \"ג\", \"ד\", \"ה\", \"ו\", \"ש\", \"א\"],\n      daysMin: [\"א\", \"ב\", \"ג\", \"ד\", \"ה\", \"ו\", \"ש\", \"א\"],\n      months: [\"ינואר\", \"פברואר\", \"מרץ\", \"אפריל\", \"מאי\", \"יוני\", \"יולי\", \"אוגוסט\", \"ספטמבר\", \"אוקטובר\", \"נובמבר\", \"דצמבר\"],\n      monthsShort: [\"ינו\", \"פבר\", \"מרץ\", \"אפר\", \"מאי\", \"יונ\", \"יול\", \"אוג\", \"ספט\", \"אוק\", \"נוב\", \"דצמ\"],\n      today: \"היום\",\n      rtl: true\n  };\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.hr.js",
    "content": "/**\n * Croatian localisation\n */\n;(function($){\n\t$.fn.datepicker.dates['hr'] = {\n\t\tdays: [\"Nedjelja\", \"Ponedjeljak\", \"Utorak\", \"Srijeda\", \"Četvrtak\", \"Petak\", \"Subota\", \"Nedjelja\"],\n\t\tdaysShort: [\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\", \"Ned\"],\n\t\tdaysMin: [\"Ne\", \"Po\", \"Ut\", \"Sr\", \"Če\", \"Pe\", \"Su\", \"Ne\"],\n\t\tmonths: [\"Siječanj\", \"Veljača\", \"Ožujak\", \"Travanj\", \"Svibanj\", \"Lipanj\", \"Srpanj\", \"Kolovoz\", \"Rujan\", \"Listopad\", \"Studeni\", \"Prosinac\"],\n\t\tmonthsShort: [\"Sij\", \"Velj\", \"Ožu\", \"Tra\", \"Svi\", \"Lip\", \"Srp\", \"Kol\", \"Ruj\", \"Lis\", \"Stu\", \"Pro\"],\n\t\ttoday: \"Danas\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.hu.js",
    "content": "/**\n * Hungarian translation for bootstrap-datepicker\n * Sotus László <lacisan@gmail.com>\n */\n;(function($){\n  $.fn.datepicker.dates['hu'] = {\n\t\tdays: [\"Vasárnap\", \"Hétfő\", \"Kedd\", \"Szerda\", \"Csütörtök\", \"Péntek\", \"Szombat\", \"Vasárnap\"],\n\t\tdaysShort: [\"Vas\", \"Hét\", \"Ked\", \"Sze\", \"Csü\", \"Pén\", \"Szo\", \"Vas\"],\n\t\tdaysMin: [\"Va\", \"Hé\", \"Ke\", \"Sz\", \"Cs\", \"Pé\", \"Sz\", \"Va\"],\n\t\tmonths: [\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Már\", \"Ápr\", \"Máj\", \"Jún\", \"Júl\", \"Aug\", \"Sze\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Ma\",\n\t\tweekStart: 1,\n\t\tformat: \"yyyy.mm.dd\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.id.js",
    "content": "/**\n * Bahasa translation for bootstrap-datepicker\n * Azwar Akbar <azwar.akbar@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['id'] = {\n\t\tdays: [\"Minggu\", \"Senin\", \"Selasa\", \"Rabu\", \"Kamis\", \"Jumat\", \"Sabtu\", \"Minggu\"],\n\t\tdaysShort: [\"Mgu\", \"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\", \"Mgu\"],\n\t\tdaysMin: [\"Mg\", \"Sn\", \"Sl\", \"Ra\", \"Ka\", \"Ju\", \"Sa\", \"Mg\"],\n\t\tmonths: [\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Ags\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\n\t\ttoday: \"Hari Ini\",\n\t\tclear: \"Kosongkan\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.is.js",
    "content": "/**\n * Icelandic translation for bootstrap-datepicker\n * Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['is'] = {\n\t\tdays: [\"Sunnudagur\", \"Mánudagur\", \"Þriðjudagur\", \"Miðvikudagur\", \"Fimmtudagur\", \"Föstudagur\", \"Laugardagur\", \"Sunnudagur\"],\n\t\tdaysShort: [\"Sun\", \"Mán\", \"Þri\", \"Mið\", \"Fim\", \"Fös\", \"Lau\", \"Sun\"],\n\t\tdaysMin: [\"Su\", \"Má\", \"Þr\", \"Mi\", \"Fi\", \"Fö\", \"La\", \"Su\"],\n\t\tmonths: [\"Janúar\", \"Febrúar\", \"Mars\", \"Apríl\", \"Maí\", \"Júní\", \"Júlí\", \"Ágúst\", \"September\", \"Október\", \"Nóvember\", \"Desember\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maí\", \"Jún\", \"Júl\", \"Ágú\", \"Sep\", \"Okt\", \"Nóv\", \"Des\"],\n\t\ttoday: \"Í Dag\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.it.js",
    "content": "/**\n * Italian translation for bootstrap-datepicker\n * Enrico Rubboli <rubboli@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['it'] = {\n\t\tdays: [\"Domenica\", \"Lunedì\", \"Martedì\", \"Mercoledì\", \"Giovedì\", \"Venerdì\", \"Sabato\", \"Domenica\"],\n\t\tdaysShort: [\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\", \"Dom\"],\n\t\tdaysMin: [\"Do\", \"Lu\", \"Ma\", \"Me\", \"Gi\", \"Ve\", \"Sa\", \"Do\"],\n\t\tmonths: [\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"],\n\t\tmonthsShort: [\"Gen\", \"Feb\", \"Mar\", \"Apr\", \"Mag\", \"Giu\", \"Lug\", \"Ago\", \"Set\", \"Ott\", \"Nov\", \"Dic\"],\n\t\ttoday: \"Oggi\",\n\t\tclear: \"Cancella\",\n\t\tweekStart: 1,\n\t\tformat: \"dd/mm/yyyy\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.ja.js",
    "content": "/**\n * Japanese translation for bootstrap-datepicker\n * Norio Suzuki <https://github.com/suzuki/>\n */\n;(function($){\n\t$.fn.datepicker.dates['ja'] = {\n\t\tdays: [\"日曜\", \"月曜\", \"火曜\", \"水曜\", \"木曜\", \"金曜\", \"土曜\", \"日曜\"],\n\t\tdaysShort: [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\", \"日\"],\n\t\tdaysMin: [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\", \"日\"],\n\t\tmonths: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\n\t\tmonthsShort: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\n\t\ttoday: \"今日\",\n\t\tformat: \"yyyy/mm/dd\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.ka.js",
    "content": "/**\n * Georgian translation for bootstrap-datepicker\n * Levan Melikishvili <levani0101@yahoo.com>\n */\n;(function($){\n    $.fn.datepicker.dates['ka'] = {\n        days: [\"კვირა\", \"ორშაბათი\", \"სამშაბათი\", \"ოთხშაბათი\", \"ხუთშაბათი\", \"პარასკევი\", \"შაბათი\", \"კვირა\"],\n        daysShort: [\"კვი\", \"ორშ\", \"სამ\", \"ოთხ\", \"ხუთ\", \"პარ\", \"შაბ\", \"კვი\"],\n        daysMin: [\"კვ\", \"ორ\", \"სა\", \"ოთ\", \"ხუ\", \"პა\", \"შა\", \"კვ\"],\n        months: [\"იანვარი\", \"თებერვალი\", \"მარტი\", \"აპრილი\", \"მაისი\", \"ივნისი\", \"ივლისი\", \"აგვისტო\", \"სექტემბერი\", \"ოქტომები\", \"ნოემბერი\", \"დეკემბერი\"],\n        monthsShort: [\"იან\", \"თებ\", \"მარ\", \"აპრ\", \"მაი\", \"ივნ\", \"ივლ\", \"აგვ\", \"სექ\", \"ოქტ\", \"ნოე\", \"დეკ\"],\n        today: \"დღეს\",\n        clear: \"გასუფთავება\",\n        weekStart: 1,\n        format: \"dd.mm.yyyy\"\n    };\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.kk.js",
    "content": "/**\n * Kazakh translation for bootstrap-datepicker\n * Yerzhan Tolekov <era.tolekov@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['kk'] = {\n\t\tdays: [\"Жексенбі\", \"Дүйсенбі\", \"Сейсенбі\", \"Сәрсенбі\", \"Бейсенбі\", \"Жұма\", \"Сенбі\", \"Жексенбі\"],\n\t\tdaysShort: [\"Жек\", \"Дүй\", \"Сей\", \"Сәр\", \"Бей\", \"Жұм\", \"Сен\", \"Жек\"],\n\t\tdaysMin: [\"Жк\", \"Дс\", \"Сс\", \"Ср\", \"Бс\", \"Жм\", \"Сн\", \"Жк\"],\n\t\tmonths: [\"Қаңтар\", \"Ақпан\", \"Наурыз\", \"Сәуір\", \"Мамыр\", \"Маусым\", \"Шілде\", \"Тамыз\", \"Қыркүйек\", \"Қазан\", \"Қараша\", \"Желтоқсан\"],\n\t\tmonthsShort: [\"Қаң\", \"Ақп\", \"Нау\", \"Сәу\", \"Мамыр\", \"Мау\", \"Шлд\", \"Тмз\", \"Қыр\", \"Қзн\", \"Қар\", \"Жел\"],\n\t\ttoday: \"Бүгін\",\n\t\tweekStart: 1\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.kr.js",
    "content": "/**\n * Korean translation for bootstrap-datepicker\n * Gu Youn <http://github.com/guyoun>\n */\n;(function($){\n\t$.fn.datepicker.dates['kr'] = {\n\t\tdays: [\"일요일\", \"월요일\", \"화요일\", \"수요일\", \"목요일\", \"금요일\", \"토요일\", \"일요일\"],\n\t\tdaysShort: [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\", \"일\"],\n\t\tdaysMin: [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\", \"일\"],\n\t\tmonths: [\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"],\n\t\tmonthsShort: [\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"]\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.lt.js",
    "content": "/**\n * Lithuanian translation for bootstrap-datepicker\n * Šarūnas Gliebus <ssharunas@yahoo.co.uk>\n */\n\n;(function($){\n    $.fn.datepicker.dates['lt'] = {\n        days: [\"Sekmadienis\", \"Pirmadienis\", \"Antradienis\", \"Trečiadienis\", \"Ketvirtadienis\", \"Penktadienis\", \"Šeštadienis\", \"Sekmadienis\"],\n        daysShort: [\"S\", \"Pr\", \"A\", \"T\", \"K\", \"Pn\", \"Š\", \"S\"],\n        daysMin: [\"Sk\", \"Pr\", \"An\", \"Tr\", \"Ke\", \"Pn\", \"Št\", \"Sk\"],\n        months: [\"Sausis\", \"Vasaris\", \"Kovas\", \"Balandis\", \"Gegužė\", \"Birželis\", \"Liepa\", \"Rugpjūtis\", \"Rugsėjis\", \"Spalis\", \"Lapkritis\", \"Gruodis\"],\n        monthsShort: [\"Sau\", \"Vas\", \"Kov\", \"Bal\", \"Geg\", \"Bir\", \"Lie\", \"Rugp\", \"Rugs\", \"Spa\", \"Lap\", \"Gru\"],\n        today: \"Šiandien\",\n        weekStart: 1\n    };\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.lv.js",
    "content": "/**\n * Latvian translation for bootstrap-datepicker\n * Artis Avotins <artis@apit.lv>\n */\n\n;(function($){\n    $.fn.datepicker.dates['lv'] = {\n        days: [\"Svētdiena\", \"Pirmdiena\", \"Otrdiena\", \"Trešdiena\", \"Ceturtdiena\", \"Piektdiena\", \"Sestdiena\", \"Svētdiena\"],\n        daysShort: [\"Sv\", \"P\", \"O\", \"T\", \"C\", \"Pk\", \"S\", \"Sv\"],\n        daysMin: [\"Sv\", \"Pr\", \"Ot\", \"Tr\", \"Ce\", \"Pk\", \"Se\", \"Sv\"],\n        months: [\"Janvāris\", \"Februāris\", \"Marts\", \"Aprīlis\", \"Maijs\", \"Jūnijs\", \"Jūlijs\", \"Augusts\", \"Septembris\", \"Oktobris\", \"Novembris\", \"Decembris\"],\n        monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Jūn\", \"Jūl\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n        today: \"Šodien\",\n        weekStart: 1\n    };\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.mk.js",
    "content": "/**\n * Macedonian translation for bootstrap-datepicker\n * Marko Aleksic <psybaron@gmail.com>\n */\n;(function($){\n    $.fn.datepicker.dates['mk'] = {\n        days: [\"Недела\", \"Понеделник\", \"Вторник\", \"Среда\", \"Четврток\", \"Петок\", \"Сабота\", \"Недела\"],\n        daysShort: [\"Нед\", \"Пон\", \"Вто\", \"Сре\", \"Чет\", \"Пет\", \"Саб\", \"Нед\"],\n        daysMin: [\"Не\", \"По\", \"Вт\", \"Ср\", \"Че\", \"Пе\", \"Са\", \"Не\"],\n        months: [\"Јануари\", \"Февруари\", \"Март\", \"Април\", \"Мај\", \"Јуни\", \"Јули\", \"Август\", \"Септември\", \"Октомври\", \"Ноември\", \"Декември\"],\n        monthsShort: [\"Јан\", \"Фев\", \"Мар\", \"Апр\", \"Мај\", \"Јун\", \"Јул\", \"Авг\", \"Сеп\", \"Окт\", \"Ное\", \"Дек\"],\n        today: \"Денес\",\n        format: \"dd.mm.yyyy\"\n    };\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.ms.js",
    "content": "/**\n * Malay translation for bootstrap-datepicker\n * Ateman Faiz <noorulfaiz@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['ms'] = {\n\t\tdays: [\"Ahad\", \"Isnin\", \"Selasa\", \"Rabu\", \"Khamis\", \"Jumaat\", \"Sabtu\", \"Ahad\"],\n\t\tdaysShort: [\"Aha\", \"Isn\", \"Sel\", \"Rab\", \"Kha\", \"Jum\", \"Sab\", \"Aha\"],\n\t\tdaysMin: [\"Ah\", \"Is\", \"Se\", \"Ra\", \"Kh\", \"Ju\", \"Sa\", \"Ah\"],\n\t\tmonths: [\"Januari\", \"Februari\", \"Mac\", \"April\", \"Mei\", \"Jun\", \"Julai\", \"Ogos\", \"September\", \"Oktober\", \"November\", \"Disember\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Ogo\", \"Sep\", \"Okt\", \"Nov\", \"Dis\"],\n\t\ttoday: \"Hari Ini\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.nb.js",
    "content": "/**\n * Norwegian (bokmål) translation for bootstrap-datepicker\n * Fredrik Sundmyhr <http://github.com/fsundmyhr>\n */\n;(function($){\n\t$.fn.datepicker.dates['nb'] = {\n\t\tdays: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\", \"Søndag\"],\n\t\tdaysShort: [\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\", \"Søn\"],\n\t\tdaysMin: [\"Sø\", \"Ma\", \"Ti\", \"On\", \"To\", \"Fr\", \"Lø\", \"Sø\"],\n\t\tmonths: [\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\n\t\ttoday: \"I Dag\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.nl-BE.js",
    "content": "/**\n * Belgium-Dutch translation for bootstrap-datepicker\n * Julien Poulin <poulin_julien@hotmail.com>\n */\n;(function($){\n  $.fn.datepicker.dates['nl-BE'] = {\n    days: [\"Zondag\", \"Maandag\", \"Dinsdag\", \"Woensdag\", \"Donderdag\", \"Vrijdag\", \"Zaterdag\", \"Zondag\"],\n    daysShort: [\"Zo\", \"Ma\", \"Di\", \"Wo\", \"Do\", \"Vr\", \"Za\", \"Zo\"],\n    daysMin: [\"Zo\", \"Ma\", \"Di\", \"Wo\", \"Do\", \"Vr\", \"Za\", \"Zo\"],\n    months: [\"Januari\", \"Februari\", \"Maart\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Augustus\", \"September\", \"Oktober\", \"November\", \"December\"],\n    monthsShort: [\"Jan\", \"Feb\", \"Mrt\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n    today: \"Vandaag\",\n    clear: \"Leegmaken\",\n    weekStart: 1,\n    format: \"dd/mm/yyyy\"\n  };\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.nl.js",
    "content": "/**\n * Dutch translation for bootstrap-datepicker\n * Reinier Goltstein <mrgoltstein@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['nl'] = {\n\t\tdays: [\"Zondag\", \"Maandag\", \"Dinsdag\", \"Woensdag\", \"Donderdag\", \"Vrijdag\", \"Zaterdag\", \"Zondag\"],\n\t\tdaysShort: [\"Zo\", \"Ma\", \"Di\", \"Wo\", \"Do\", \"Vr\", \"Za\", \"Zo\"],\n\t\tdaysMin: [\"Zo\", \"Ma\", \"Di\", \"Wo\", \"Do\", \"Vr\", \"Za\", \"Zo\"],\n\t\tmonths: [\"Januari\", \"Februari\", \"Maart\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Augustus\", \"September\", \"Oktober\", \"November\", \"December\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mrt\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Vandaag\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.no.js",
    "content": "/**\n *  Norwegian translation for bootstrap-datepicker\n **/\n;(function($){\n  $.fn.datepicker.dates['no'] = {\n    days: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],\n    daysShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],\n    daysMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],\n    months: ['Januar','Februar','Mars','April','Mai','Juni','Juli','August','September','Oktober','November','Desember'],\n    monthsShort: ['Jan','Feb','Mar','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Des'],\n    today: 'I dag',\n    clear: 'Nullstill',\n    weekStart: 1,\n    format: 'dd.mm.yyyy'\n  };\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.pl.js",
    "content": "/**\n * Polish translation for bootstrap-datepicker\n * Robert <rtpm@gazeta.pl>\n */\n;(function($){\n        $.fn.datepicker.dates['pl'] = {\n                days: [\"Niedziela\", \"Poniedziałek\", \"Wtorek\", \"Środa\", \"Czwartek\", \"Piątek\", \"Sobota\", \"Niedziela\"],\n                daysShort: [\"Nie\", \"Pn\", \"Wt\", \"Śr\", \"Czw\", \"Pt\", \"So\", \"Nie\"],\n                daysMin: [\"N\", \"Pn\", \"Wt\", \"Śr\", \"Cz\", \"Pt\", \"So\", \"N\"],\n                months: [\"Styczeń\", \"Luty\", \"Marzec\", \"Kwiecień\", \"Maj\", \"Czerwiec\", \"Lipiec\", \"Sierpień\", \"Wrzesień\", \"Październik\", \"Listopad\", \"Grudzień\"],\n                monthsShort: [\"Sty\", \"Lu\", \"Mar\", \"Kw\", \"Maj\", \"Cze\", \"Lip\", \"Sie\", \"Wrz\", \"Pa\", \"Lis\", \"Gru\"],\n                today: \"Dzisiaj\",\n                weekStart: 1\n        };\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.pt-BR.js",
    "content": "/**\n * Brazilian translation for bootstrap-datepicker\n * Cauan Cabral <cauan@radig.com.br>\n */\n;(function($){\n\t$.fn.datepicker.dates['pt-BR'] = {\n\t\tdays: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\", \"Domingo\"],\n\t\tdaysShort: [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\", \"Dom\"],\n\t\tdaysMin: [\"Do\", \"Se\", \"Te\", \"Qu\", \"Qu\", \"Se\", \"Sa\", \"Do\"],\n\t\tmonths: [\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"],\n\t\tmonthsShort: [\"Jan\", \"Fev\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dez\"],\n\t\ttoday: \"Hoje\",\n\t\tclear: \"Limpar\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.pt.js",
    "content": "/**\n * Portuguese translation for bootstrap-datepicker\n * Original code: Cauan Cabral <cauan@radig.com.br>\n * Tiago Melo <tiago.blackcode@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['pt'] = {\n\t\tdays: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\", \"Domingo\"],\n\t\tdaysShort: [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\", \"Dom\"],\n\t\tdaysMin: [\"Do\", \"Se\", \"Te\", \"Qu\", \"Qu\", \"Se\", \"Sa\", \"Do\"],\n\t\tmonths: [\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"],\n\t\tmonthsShort: [\"Jan\", \"Fev\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dez\"],\n\t\ttoday: \"Hoje\",\n\t\tclear: \"Limpar\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.ro.js",
    "content": "/**\n * Romanian translation for bootstrap-datepicker\n * Cristian Vasile <cristi.mie@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['ro'] = {\n\t\tdays: [\"Duminică\", \"Luni\", \"Marţi\", \"Miercuri\", \"Joi\", \"Vineri\", \"Sâmbătă\", \"Duminică\"],\n\t\tdaysShort: [\"Dum\", \"Lun\", \"Mar\", \"Mie\", \"Joi\", \"Vin\", \"Sâm\", \"Dum\"],\n\t\tdaysMin: [\"Du\", \"Lu\", \"Ma\", \"Mi\", \"Jo\", \"Vi\", \"Sâ\", \"Du\"],\n\t\tmonths: [\"Ianuarie\", \"Februarie\", \"Martie\", \"Aprilie\", \"Mai\", \"Iunie\", \"Iulie\", \"August\", \"Septembrie\", \"Octombrie\", \"Noiembrie\", \"Decembrie\"],\n\t\tmonthsShort: [\"Ian\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Iun\", \"Iul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Astăzi\",\n\t\tclear: \"Șterge\",\n\t\tweekStart: 1\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.rs-latin.js",
    "content": "/**\n * Serbian latin translation for bootstrap-datepicker\n * Bojan Milosavlević <milboj@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['rs-latin'] = {\n\t\tdays: [\"Nedelja\",\"Ponedeljak\", \"Utorak\", \"Sreda\", \"Četvrtak\", \"Petak\", \"Subota\", \"Nedelja\"],\n\t\tdaysShort: [\"Ned\", \"Pon\", \"Uto\", \"Sre\", \"Čet\", \"Pet\", \"Sub\", \"Ned\"],\n\t\tdaysMin: [\"N\", \"Po\", \"U\", \"Sr\", \"Č\", \"Pe\", \"Su\", \"N\"],\n\t\tmonths: [\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Avg\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Danas\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.rs.js",
    "content": "/**\n * Serbian cyrillic translation for bootstrap-datepicker\n * Bojan Milosavlević <milboj@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['rs'] = {\n\t\tdays: [\"Недеља\",\"Понедељак\", \"Уторак\", \"Среда\", \"Четвртак\", \"Петак\", \"Субота\", \"Недеља\"],\n\t\tdaysShort: [\"Нед\", \"Пон\", \"Уто\", \"Сре\", \"Чет\", \"Пет\", \"Суб\", \"Нед\"],\n\t\tdaysMin: [\"Н\", \"По\", \"У\", \"Ср\", \"Ч\", \"Пе\", \"Су\", \"Н\"],\n\t\tmonths: [\"Јануар\", \"Фебруар\", \"Март\", \"Април\", \"Мај\", \"Јун\", \"Јул\", \"Август\", \"Септембар\", \"Октобар\", \"Новембар\", \"Децембар\"],\n\t\tmonthsShort: [\"Јан\", \"Феб\", \"Мар\", \"Апр\", \"Мај\", \"Јун\", \"Јул\", \"Авг\", \"Сеп\", \"Окт\", \"Нов\", \"Дец\"],\n\t\ttoday: \"Данас\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.ru.js",
    "content": "/**\n * Russian translation for bootstrap-datepicker\n * Victor Taranenko <darwin@snowdale.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['ru'] = {\n\t\tdays: [\"Воскресенье\", \"Понедельник\", \"Вторник\", \"Среда\", \"Четверг\", \"Пятница\", \"Суббота\", \"Воскресенье\"],\n\t\tdaysShort: [\"Вск\", \"Пнд\", \"Втр\", \"Срд\", \"Чтв\", \"Птн\", \"Суб\", \"Вск\"],\n\t\tdaysMin: [\"Вс\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\", \"Вс\"],\n\t\tmonths: [\"Январь\", \"Февраль\", \"Март\", \"Апрель\", \"Май\", \"Июнь\", \"Июль\", \"Август\", \"Сентябрь\", \"Октябрь\", \"Ноябрь\", \"Декабрь\"],\n\t\tmonthsShort: [\"Янв\", \"Фев\", \"Мар\", \"Апр\", \"Май\", \"Июн\", \"Июл\", \"Авг\", \"Сен\", \"Окт\", \"Ноя\", \"Дек\"],\n\t\ttoday: \"Сегодня\",\n\t\tweekStart: 1\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.sk.js",
    "content": "/**\n * Slovak translation for bootstrap-datepicker\n * Marek Lichtner <marek@licht.sk>\n * Fixes by Michal Remiš <michal.remis@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates[\"sk\"] = {\n\t\tdays: [\"Nedeľa\", \"Pondelok\", \"Utorok\", \"Streda\", \"Štvrtok\", \"Piatok\", \"Sobota\", \"Nedeľa\"],\n\t\tdaysShort: [\"Ned\", \"Pon\", \"Uto\", \"Str\", \"Štv\", \"Pia\", \"Sob\", \"Ned\"],\n\t\tdaysMin: [\"Ne\", \"Po\", \"Ut\", \"St\", \"Št\", \"Pia\", \"So\", \"Ne\"],\n\t\tmonths: [\"Január\", \"Február\", \"Marec\", \"Apríl\", \"Máj\", \"Jún\", \"Júl\", \"August\", \"September\", \"Október\", \"November\", \"December\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Máj\", \"Jún\", \"Júl\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Dnes\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.sl.js",
    "content": "/**\n * Slovene translation for bootstrap-datepicker\n * Gregor Rudolf <gregor.rudolf@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['sl'] = {\n\t\tdays: [\"Nedelja\", \"Ponedeljek\", \"Torek\", \"Sreda\", \"Četrtek\", \"Petek\", \"Sobota\", \"Nedelja\"],\n\t\tdaysShort: [\"Ned\", \"Pon\", \"Tor\", \"Sre\", \"Čet\", \"Pet\", \"Sob\", \"Ned\"],\n\t\tdaysMin: [\"Ne\", \"Po\", \"To\", \"Sr\", \"Če\", \"Pe\", \"So\", \"Ne\"],\n\t\tmonths: [\"Januar\", \"Februar\", \"Marec\", \"April\", \"Maj\", \"Junij\", \"Julij\", \"Avgust\", \"September\", \"Oktober\", \"November\", \"December\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Avg\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Danes\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.sq.js",
    "content": "/**\n * Albanian translation for bootstrap-datepicker\n * Tomor Pupovci <http://www.github.com/ttomor>\n */\n;(function($){\n\t$.fn.datepicker.dates['sq'] = {\n\t\tdays: [\"E Diel\", \"E Hënë\", \"E martē\", \"E mërkurë\", \"E Enjte\", \"E Premte\", \"E Shtunë\", \"E Diel\"],\n\t\tdaysShort: [\"Die\", \"Hën\", \"Mar\", \"Mër\", \"Enj\", \"Pre\", \"Shtu\", \"Die\"],\n\t\tdaysMin: [\"Di\", \"Hë\", \"Ma\", \"Më\", \"En\", \"Pr\", \"Sht\", \"Di\"],\n\t\tmonths: [\"Janar\", \"Shkurt\", \"Mars\", \"Prill\", \"Maj\", \"Qershor\", \"Korrik\", \"Gusht\", \"Shtator\", \"Tetor\", \"Nëntor\", \"Dhjetor\"],\n\t\tmonthsShort: [\"Jan\", \"Shk\", \"Mar\", \"Pri\", \"Maj\", \"Qer\", \"Korr\", \"Gu\", \"Sht\", \"Tet\", \"Nën\", \"Dhjet\"],\n\t\ttoday: \"Sot\"\n\t};\n}(jQuery));\n\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.sv.js",
    "content": "/**\n * Swedish translation for bootstrap-datepicker\n * Patrik Ragnarsson <patrik@starkast.net>\n */\n;(function($){\n\t$.fn.datepicker.dates['sv'] = {\n\t\tdays: [\"Söndag\", \"Måndag\", \"Tisdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lördag\", \"Söndag\"],\n\t\tdaysShort: [\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\", \"Sön\"],\n\t\tdaysMin: [\"Sö\", \"Må\", \"Ti\", \"On\", \"To\", \"Fr\", \"Lö\", \"Sö\"],\n\t\tmonths: [\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Idag\",\n\t\tformat: \"yyyy-mm-dd\",\n\t\tweekStart: 1\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.sw.js",
    "content": "/**\n * Swahili translation for bootstrap-datepicker\n * Edwin Mugendi <https://github.com/edwinmugendi>\n * Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku\n */\n;(function($){\n    $.fn.datepicker.dates['sw'] = {\n        days: [\"Jumapili\", \"Jumatatu\", \"Jumanne\", \"Jumatano\", \"Alhamisi\", \"Ijumaa\", \"Jumamosi\", \"Jumapili\"],\n        daysShort: [\"J2\", \"J3\", \"J4\", \"J5\", \"Alh\", \"Ij\", \"J1\", \"J2\"],\n        daysMin: [\"2\", \"3\", \"4\", \"5\", \"A\", \"I\", \"1\", \"2\"],\n        months: [\"Januari\", \"Februari\", \"Machi\", \"Aprili\", \"Mei\", \"Juni\", \"Julai\", \"Agosti\", \"Septemba\", \"Oktoba\", \"Novemba\", \"Desemba\"],\n        monthsShort: [\"Jan\", \"Feb\", \"Mac\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Ago\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\n        today: \"Leo\"\n    };\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.th.js",
    "content": "/**\n * Thai translation for bootstrap-datepicker\n * Suchau Jiraprapot <seroz24@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['th'] = {\n\t\tdays: [\"อาทิตย์\", \"จันทร์\", \"อังคาร\", \"พุธ\", \"พฤหัส\", \"ศุกร์\", \"เสาร์\", \"อาทิตย์\"],\n\t\tdaysShort: [\"อา\", \"จ\", \"อ\", \"พ\", \"พฤ\", \"ศ\", \"ส\", \"อา\"],\n\t\tdaysMin: [\"อา\", \"จ\", \"อ\", \"พ\", \"พฤ\", \"ศ\", \"ส\", \"อา\"],\n\t\tmonths: [\"มกราคม\", \"กุมภาพันธ์\", \"มีนาคม\", \"เมษายน\", \"พฤษภาคม\", \"มิถุนายน\", \"กรกฎาคม\", \"สิงหาคม\", \"กันยายน\", \"ตุลาคม\", \"พฤศจิกายน\", \"ธันวาคม\"],\n\t\tmonthsShort: [\"ม.ค.\", \"ก.พ.\", \"มี.ค.\", \"เม.ย.\", \"พ.ค.\", \"มิ.ย.\", \"ก.ค.\", \"ส.ค.\", \"ก.ย.\", \"ต.ค.\", \"พ.ย.\", \"ธ.ค.\"],\n\t\ttoday: \"วันนี้\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.tr.js",
    "content": "/**\n * Turkish translation for bootstrap-datepicker\n * Serkan Algur <kaisercrazy_2@hotmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['tr'] = {\n\t\tdays: [\"Pazar\", \"Pazartesi\", \"Salı\", \"Çarşamba\", \"Perşembe\", \"Cuma\", \"Cumartesi\", \"Pazar\"],\n\t\tdaysShort: [\"Pz\", \"Pzt\", \"Sal\", \"Çrş\", \"Prş\", \"Cu\", \"Cts\", \"Pz\"],\n\t\tdaysMin: [\"Pz\", \"Pzt\", \"Sa\", \"Çr\", \"Pr\", \"Cu\", \"Ct\", \"Pz\"],\n\t\tmonths: [\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"],\n\t\tmonthsShort: [\"Oca\", \"Şub\", \"Mar\", \"Nis\", \"May\", \"Haz\", \"Tem\", \"Ağu\", \"Eyl\", \"Eki\", \"Kas\", \"Ara\"],\n\t\ttoday: \"Bugün\",\n\t\tformat: \"dd.mm.yyyy\"\n\t};\n}(jQuery));\n\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.ua.js",
    "content": "/**\n * Ukrainian translation for bootstrap-datepicker\n * Igor Polynets\n */\n;(function($){\n\t$.fn.datepicker.dates['ua'] = {\n\t\tdays: [\"Неділя\", \"Понеділок\", \"Вівторок\", \"Середа\", \"Четвер\", \"П'ятница\", \"Субота\", \"Неділя\"],\n\t\tdaysShort: [\"Нед\", \"Пнд\", \"Втр\", \"Срд\", \"Чтв\", \"Птн\", \"Суб\", \"Нед\"],\n\t\tdaysMin: [\"Нд\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\", \"Нд\"],\n\t\tmonths: [\"Cічень\", \"Лютий\", \"Березень\", \"Квітень\", \"Травень\", \"Червень\", \"Липень\", \"Серпень\", \"Вересень\", \"Жовтень\", \"Листопад\", \"Грудень\"],\n\t\tmonthsShort: [\"Січ\", \"Лют\", \"Бер\", \"Кві\", \"Тра\", \"Чер\", \"Лип\", \"Сер\", \"Вер\", \"Жов\", \"Лис\", \"Гру\"],\n\t\ttoday: \"Сьогодні\",\n\t\tweekStart: 1\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.vi.js",
    "content": "/**\n * Vietnamese translation for bootstrap-datepicker\n * An Vo <https://github.com/anvoz/>\n */\n;(function($){\n\t$.fn.datepicker.dates['vi'] = {\n\t\tdays: [\"Chủ nhật\", \"Thứ hai\", \"Thứ ba\", \"Thứ tư\", \"Thứ năm\", \"Thứ sáu\", \"Thứ bảy\", \"Chủ nhật\"],\n\t\tdaysShort: [\"CN\", \"Thứ 2\", \"Thứ 3\", \"Thứ 4\", \"Thứ 5\", \"Thứ 6\", \"Thứ 7\", \"CN\"],\n\t\tdaysMin: [\"CN\", \"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\", \"CN\"],\n\t\tmonths: [\"Tháng 1\", \"Tháng 2\", \"Tháng 3\", \"Tháng 4\", \"Tháng 5\", \"Tháng 6\", \"Tháng 7\", \"Tháng 8\", \"Tháng 9\", \"Tháng 10\", \"Tháng 11\", \"Tháng 12\"],\n\t\tmonthsShort: [\"Th1\", \"Th2\", \"Th3\", \"Th4\", \"Th5\", \"Th6\", \"Th7\", \"Th8\", \"Th9\", \"Th10\", \"Th11\", \"Th12\"],\n\t\ttoday: \"Hôm nay\",\n\t\tclear: \"Xóa\",\n\t\tformat: \"dd/mm/yyyy\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.zh-CN.js",
    "content": "/**\n * Simplified Chinese translation for bootstrap-datepicker\n * Yuan Cheung <advanimal@gmail.com>\n */\n;(function($){\n\t$.fn.datepicker.dates['zh-CN'] = {\n\t\tdays: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\", \"星期日\"],\n\t\tdaysShort: [\"周日\", \"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\", \"周日\"],\n\t\tdaysMin:  [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"日\"],\n\t\tmonths: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\n\t\tmonthsShort: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\n\t\ttoday: \"今日\",\n\t\tformat: \"yyyy年mm月dd日\",\n\t\tweekStart: 1\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/datepicker/locales/bootstrap-datepicker.zh-TW.js",
    "content": "/**\n * Traditional Chinese translation for bootstrap-datepicker\n * Rung-Sheng Jang <daniel@i-trend.co.cc>\n * FrankWu  <frankwu100@gmail.com> Fix more appropriate use of Traditional Chinese habit\n */\n;(function($){\n\t$.fn.datepicker.dates['zh-TW'] = {\n\t\tdays: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\", \"星期日\"],\n\t\tdaysShort: [\"週日\", \"週一\", \"週二\", \"週三\", \"週四\", \"週五\", \"週六\", \"週日\"],\n\t\tdaysMin:  [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"日\"],\n\t\tmonths: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\n\t\tmonthsShort: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\n\t\ttoday: \"今天\",\n\t\tformat: \"yyyy年mm月dd日\",\n\t\tweekStart: 1\n\t};\n}(jQuery));\n"
  },
  {
    "path": "public/adminlte/plugins/daterangepicker/daterangepicker.css",
    "content": ".daterangepicker {\n  position: absolute;\n  color: inherit;\n  background: #fff;\n  border-radius: 4px;\n  width: 278px;\n  padding: 4px;\n  margin-top: 1px;\n  top: 100px;\n  left: 20px;\n  /* Calendars */ }\n  .daterangepicker:before, .daterangepicker:after {\n    position: absolute;\n    display: inline-block;\n    border-bottom-color: rgba(0, 0, 0, 0.2);\n    content: ''; }\n  .daterangepicker:before {\n    top: -7px;\n    border-right: 7px solid transparent;\n    border-left: 7px solid transparent;\n    border-bottom: 7px solid #ccc; }\n  .daterangepicker:after {\n    top: -6px;\n    border-right: 6px solid transparent;\n    border-bottom: 6px solid #fff;\n    border-left: 6px solid transparent; }\n  .daterangepicker.opensleft:before {\n    right: 9px; }\n  .daterangepicker.opensleft:after {\n    right: 10px; }\n  .daterangepicker.openscenter:before {\n    left: 0;\n    right: 0;\n    width: 0;\n    margin-left: auto;\n    margin-right: auto; }\n  .daterangepicker.openscenter:after {\n    left: 0;\n    right: 0;\n    width: 0;\n    margin-left: auto;\n    margin-right: auto; }\n  .daterangepicker.opensright:before {\n    left: 9px; }\n  .daterangepicker.opensright:after {\n    left: 10px; }\n  .daterangepicker.dropup {\n    margin-top: -5px; }\n    .daterangepicker.dropup:before {\n      top: initial;\n      bottom: -7px;\n      border-bottom: initial;\n      border-top: 7px solid #ccc; }\n    .daterangepicker.dropup:after {\n      top: initial;\n      bottom: -6px;\n      border-bottom: initial;\n      border-top: 6px solid #fff; }\n  .daterangepicker.dropdown-menu {\n    max-width: none;\n    z-index: 3001; }\n  .daterangepicker.single .ranges, .daterangepicker.single .calendar {\n    float: none; }\n  .daterangepicker.show-calendar .calendar {\n    display: block; }\n  .daterangepicker .calendar {\n    display: none;\n    max-width: 270px;\n    margin: 4px; }\n    .daterangepicker .calendar.single .calendar-table {\n      border: none; }\n    .daterangepicker .calendar th, .daterangepicker .calendar td {\n      white-space: nowrap;\n      text-align: center;\n      min-width: 32px; }\n  .daterangepicker .calendar-table {\n    border: 1px solid #fff;\n    padding: 4px;\n    border-radius: 4px;\n    background: #fff; }\n  .daterangepicker table {\n    width: 100%;\n    margin: 0; }\n  .daterangepicker td, .daterangepicker th {\n    text-align: center;\n    width: 20px;\n    height: 20px;\n    border-radius: 4px;\n    border: 1px solid transparent;\n    white-space: nowrap;\n    cursor: pointer; }\n    .daterangepicker td.available:hover, .daterangepicker th.available:hover {\n      background: #eee; }\n    .daterangepicker td.week, .daterangepicker th.week {\n      font-size: 80%;\n      color: #ccc; }\n  .daterangepicker td.off, .daterangepicker td.off.in-range, .daterangepicker td.off.start-date, .daterangepicker td.off.end-date {\n    background-color: #fff;\n    border-color: transparent;\n    color: #999; }\n  .daterangepicker td.in-range {\n    background-color: #ebf4f8;\n    border-color: transparent;\n    color: #000;\n    border-radius: 0; }\n  .daterangepicker td.start-date {\n    border-radius: 4px 0 0 4px; }\n  .daterangepicker td.end-date {\n    border-radius: 0 4px 4px 0; }\n  .daterangepicker td.start-date.end-date {\n    border-radius: 4px; }\n  .daterangepicker td.active, .daterangepicker td.active:hover {\n    background-color: #357ebd;\n    border-color: transparent;\n    color: #fff; }\n  .daterangepicker th.month {\n    width: auto; }\n  .daterangepicker td.disabled, .daterangepicker option.disabled {\n    color: #999;\n    cursor: not-allowed;\n    text-decoration: line-through; }\n  .daterangepicker select.monthselect, .daterangepicker select.yearselect {\n    font-size: 12px;\n    padding: 1px;\n    height: auto;\n    margin: 0;\n    cursor: default; }\n  .daterangepicker select.monthselect {\n    margin-right: 2%;\n    width: 56%; }\n  .daterangepicker select.yearselect {\n    width: 40%; }\n  .daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.secondselect, .daterangepicker select.ampmselect {\n    width: 50px;\n    margin-bottom: 0; }\n  .daterangepicker .input-mini {\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    color: #555;\n    height: 30px;\n    line-height: 30px;\n    display: block;\n    vertical-align: middle;\n    margin: 0 0 5px 0;\n    padding: 0 6px 0 28px;\n    width: 100%; }\n    .daterangepicker .input-mini.active {\n      border: 1px solid #08c;\n      border-radius: 4px; }\n  .daterangepicker .daterangepicker_input {\n    position: relative; }\n    .daterangepicker .daterangepicker_input i {\n      position: absolute;\n      left: 8px;\n      top: 8px; }\n  .daterangepicker .calendar-time {\n    text-align: center;\n    margin: 5px auto;\n    line-height: 30px;\n    position: relative;\n    padding-left: 28px; }\n    .daterangepicker .calendar-time select.disabled {\n      color: #ccc;\n      cursor: not-allowed; }\n\n.ranges {\n  font-size: 11px;\n  float: none;\n  margin: 4px;\n  text-align: left; }\n  .ranges ul {\n    list-style: none;\n    margin: 0 auto;\n    padding: 0;\n    width: 100%; }\n  .ranges li {\n    font-size: 13px;\n    background: #f5f5f5;\n    border: 1px solid #f5f5f5;\n    border-radius: 4px;\n    color: #08c;\n    padding: 3px 12px;\n    margin-bottom: 8px;\n    cursor: pointer; }\n    .ranges li:hover {\n      background: #08c;\n      border: 1px solid #08c;\n      color: #fff; }\n    .ranges li.active {\n      background: #08c;\n      border: 1px solid #08c;\n      color: #fff; }\n\n/*  Larger Screen Styling */\n@media (min-width: 564px) {\n  .daterangepicker {\n    width: auto; }\n    .daterangepicker .ranges ul {\n      width: 160px; }\n    .daterangepicker.single .ranges ul {\n      width: 100%; }\n    .daterangepicker.single .calendar.left {\n      clear: none; }\n    .daterangepicker.single .ranges, .daterangepicker.single .calendar {\n      float: left; }\n    .daterangepicker .calendar.left {\n      clear: left;\n      margin-right: 0; }\n      .daterangepicker .calendar.left .calendar-table {\n        border-right: none;\n        border-top-right-radius: 0;\n        border-bottom-right-radius: 0; }\n    .daterangepicker .calendar.right {\n      margin-left: 0; }\n      .daterangepicker .calendar.right .calendar-table {\n        border-left: none;\n        border-top-left-radius: 0;\n        border-bottom-left-radius: 0; }\n    .daterangepicker .left .daterangepicker_input {\n      padding-right: 12px; }\n    .daterangepicker .calendar.left .calendar-table {\n      padding-right: 12px; }\n    .daterangepicker .ranges, .daterangepicker .calendar {\n      float: left; } }\n\n@media (min-width: 730px) {\n  .daterangepicker .ranges {\n    width: auto;\n    float: left; }\n  .daterangepicker .calendar.left {\n    clear: none; } }\n\n"
  },
  {
    "path": "public/adminlte/plugins/daterangepicker/daterangepicker.js",
    "content": "/**\n* @version: 2.1.19\n* @author: Dan Grossman http://www.dangrossman.info/\n* @copyright: Copyright (c) 2012-2015 Dan Grossman. All rights reserved.\n* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php\n* @website: https://www.improvely.com/\n*/\n\n(function(root, factory) {\n\n  if (typeof define === 'function' && define.amd) {\n    define(['moment', 'jquery', 'exports'], function(momentjs, $, exports) {\n      root.daterangepicker = factory(root, exports, momentjs, $);\n    });\n\n  } else if (typeof exports !== 'undefined') {\n      var momentjs = require('moment');\n      var jQuery = (typeof window != 'undefined') ? window.jQuery : undefined;  //isomorphic issue\n      if (!jQuery) {\n          try {\n              jQuery = require('jquery');\n              if (!jQuery.fn) jQuery.fn = {}; //isomorphic issue\n          } catch (err) {\n              if (!jQuery) throw new Error('jQuery dependency not found');\n          }\n      }\n\n    factory(root, exports, momentjs, jQuery);\n\n  // Finally, as a browser global.\n  } else {\n    root.daterangepicker = factory(root, {}, root.moment || moment, (root.jQuery || root.Zepto || root.ender || root.$));\n  }\n\n}(this || {}, function(root, daterangepicker, moment, $) { // 'this' doesn't exist on a server\n\n    var DateRangePicker = function(element, options, cb) {\n\n        //default settings for options\n        this.parentEl = 'body';\n        this.element = $(element);\n        this.startDate = moment().startOf('day');\n        this.endDate = moment().endOf('day');\n        this.minDate = false;\n        this.maxDate = false;\n        this.dateLimit = false;\n        this.autoApply = false;\n        this.singleDatePicker = false;\n        this.showDropdowns = false;\n        this.showWeekNumbers = false;\n        this.showISOWeekNumbers = false;\n        this.timePicker = false;\n        this.timePicker24Hour = false;\n        this.timePickerIncrement = 1;\n        this.timePickerSeconds = false;\n        this.linkedCalendars = true;\n        this.autoUpdateInput = true;\n        this.alwaysShowCalendars = false;\n        this.ranges = {};\n\n        this.opens = 'right';\n        if (this.element.hasClass('pull-right'))\n            this.opens = 'left';\n\n        this.drops = 'down';\n        if (this.element.hasClass('dropup'))\n            this.drops = 'up';\n\n        this.buttonClasses = 'btn btn-sm';\n        this.applyClass = 'btn-success';\n        this.cancelClass = 'btn-default';\n\n        this.locale = {\n            format: 'MM/DD/YYYY',\n            separator: ' - ',\n            applyLabel: 'Apply',\n            cancelLabel: 'Cancel',\n            weekLabel: 'W',\n            customRangeLabel: 'Custom Range',\n            daysOfWeek: moment.weekdaysMin(),\n            monthNames: moment.monthsShort(),\n            firstDay: moment.localeData().firstDayOfWeek()\n        };\n\n        this.callback = function() { };\n\n        //some state information\n        this.isShowing = false;\n        this.leftCalendar = {};\n        this.rightCalendar = {};\n\n        //custom options from user\n        if (typeof options !== 'object' || options === null)\n            options = {};\n\n        //allow setting options with data attributes\n        //data-api options will be overwritten with custom javascript options\n        options = $.extend(this.element.data(), options);\n\n        //html template for the picker UI\n        if (typeof options.template !== 'string' && !(options.template instanceof $))\n            options.template = '<div class=\"daterangepicker dropdown-menu\">' +\n                '<div class=\"calendar left\">' +\n                    '<div class=\"daterangepicker_input\">' +\n                      '<input class=\"input-mini\" type=\"text\" name=\"daterangepicker_start\" value=\"\" />' +\n                      '<i class=\"fa fa-calendar glyphicon glyphicon-calendar\"></i>' +\n                      '<div class=\"calendar-time\">' +\n                        '<div></div>' +\n                        '<i class=\"fa fa-clock-o glyphicon glyphicon-time\"></i>' +\n                      '</div>' +\n                    '</div>' +\n                    '<div class=\"calendar-table\"></div>' +\n                '</div>' +\n                '<div class=\"calendar right\">' +\n                    '<div class=\"daterangepicker_input\">' +\n                      '<input class=\"input-mini\" type=\"text\" name=\"daterangepicker_end\" value=\"\" />' +\n                      '<i class=\"fa fa-calendar glyphicon glyphicon-calendar\"></i>' +\n                      '<div class=\"calendar-time\">' +\n                        '<div></div>' +\n                        '<i class=\"fa fa-clock-o glyphicon glyphicon-time\"></i>' +\n                      '</div>' +\n                    '</div>' +\n                    '<div class=\"calendar-table\"></div>' +\n                '</div>' +\n                '<div class=\"ranges\">' +\n                    '<div class=\"range_inputs\">' +\n                        '<button class=\"applyBtn\" disabled=\"disabled\" type=\"button\"></button> ' +\n                        '<button class=\"cancelBtn\" type=\"button\"></button>' +\n                    '</div>' +\n                '</div>' +\n            '</div>';\n\n        this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl);\n        this.container = $(options.template).appendTo(this.parentEl);\n\n        //\n        // handle all the possible options overriding defaults\n        //\n\n        if (typeof options.locale === 'object') {\n\n            if (typeof options.locale.format === 'string')\n                this.locale.format = options.locale.format;\n\n            if (typeof options.locale.separator === 'string')\n                this.locale.separator = options.locale.separator;\n\n            if (typeof options.locale.daysOfWeek === 'object')\n                this.locale.daysOfWeek = options.locale.daysOfWeek.slice();\n\n            if (typeof options.locale.monthNames === 'object')\n              this.locale.monthNames = options.locale.monthNames.slice();\n\n            if (typeof options.locale.firstDay === 'number')\n              this.locale.firstDay = options.locale.firstDay;\n\n            if (typeof options.locale.applyLabel === 'string')\n              this.locale.applyLabel = options.locale.applyLabel;\n\n            if (typeof options.locale.cancelLabel === 'string')\n              this.locale.cancelLabel = options.locale.cancelLabel;\n\n            if (typeof options.locale.weekLabel === 'string')\n              this.locale.weekLabel = options.locale.weekLabel;\n\n            if (typeof options.locale.customRangeLabel === 'string')\n              this.locale.customRangeLabel = options.locale.customRangeLabel;\n\n        }\n\n        if (typeof options.startDate === 'string')\n            this.startDate = moment(options.startDate, this.locale.format);\n\n        if (typeof options.endDate === 'string')\n            this.endDate = moment(options.endDate, this.locale.format);\n\n        if (typeof options.minDate === 'string')\n            this.minDate = moment(options.minDate, this.locale.format);\n\n        if (typeof options.maxDate === 'string')\n            this.maxDate = moment(options.maxDate, this.locale.format);\n\n        if (typeof options.startDate === 'object')\n            this.startDate = moment(options.startDate);\n\n        if (typeof options.endDate === 'object')\n            this.endDate = moment(options.endDate);\n\n        if (typeof options.minDate === 'object')\n            this.minDate = moment(options.minDate);\n\n        if (typeof options.maxDate === 'object')\n            this.maxDate = moment(options.maxDate);\n\n        // sanity check for bad options\n        if (this.minDate && this.startDate.isBefore(this.minDate))\n            this.startDate = this.minDate.clone();\n\n        // sanity check for bad options\n        if (this.maxDate && this.endDate.isAfter(this.maxDate))\n            this.endDate = this.maxDate.clone();\n\n        if (typeof options.applyClass === 'string')\n            this.applyClass = options.applyClass;\n\n        if (typeof options.cancelClass === 'string')\n            this.cancelClass = options.cancelClass;\n\n        if (typeof options.dateLimit === 'object')\n            this.dateLimit = options.dateLimit;\n\n        if (typeof options.opens === 'string')\n            this.opens = options.opens;\n\n        if (typeof options.drops === 'string')\n            this.drops = options.drops;\n\n        if (typeof options.showWeekNumbers === 'boolean')\n            this.showWeekNumbers = options.showWeekNumbers;\n\n        if (typeof options.showISOWeekNumbers === 'boolean')\n            this.showISOWeekNumbers = options.showISOWeekNumbers;\n\n        if (typeof options.buttonClasses === 'string')\n            this.buttonClasses = options.buttonClasses;\n\n        if (typeof options.buttonClasses === 'object')\n            this.buttonClasses = options.buttonClasses.join(' ');\n\n        if (typeof options.showDropdowns === 'boolean')\n            this.showDropdowns = options.showDropdowns;\n\n        if (typeof options.singleDatePicker === 'boolean') {\n            this.singleDatePicker = options.singleDatePicker;\n            if (this.singleDatePicker)\n                this.endDate = this.startDate.clone();\n        }\n\n        if (typeof options.timePicker === 'boolean')\n            this.timePicker = options.timePicker;\n\n        if (typeof options.timePickerSeconds === 'boolean')\n            this.timePickerSeconds = options.timePickerSeconds;\n\n        if (typeof options.timePickerIncrement === 'number')\n            this.timePickerIncrement = options.timePickerIncrement;\n\n        if (typeof options.timePicker24Hour === 'boolean')\n            this.timePicker24Hour = options.timePicker24Hour;\n\n        if (typeof options.autoApply === 'boolean')\n            this.autoApply = options.autoApply;\n\n        if (typeof options.autoUpdateInput === 'boolean')\n            this.autoUpdateInput = options.autoUpdateInput;\n\n        if (typeof options.linkedCalendars === 'boolean')\n            this.linkedCalendars = options.linkedCalendars;\n\n        if (typeof options.isInvalidDate === 'function')\n            this.isInvalidDate = options.isInvalidDate;\n\n        if (typeof options.alwaysShowCalendars === 'boolean')\n            this.alwaysShowCalendars = options.alwaysShowCalendars;\n\n        // update day names order to firstDay\n        if (this.locale.firstDay != 0) {\n            var iterator = this.locale.firstDay;\n            while (iterator > 0) {\n                this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift());\n                iterator--;\n            }\n        }\n\n        var start, end, range;\n\n        //if no start/end dates set, check if an input element contains initial values\n        if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') {\n            if ($(this.element).is('input[type=text]')) {\n                var val = $(this.element).val(),\n                    split = val.split(this.locale.separator);\n\n                start = end = null;\n\n                if (split.length == 2) {\n                    start = moment(split[0], this.locale.format);\n                    end = moment(split[1], this.locale.format);\n                } else if (this.singleDatePicker && val !== \"\") {\n                    start = moment(val, this.locale.format);\n                    end = moment(val, this.locale.format);\n                }\n                if (start !== null && end !== null) {\n                    this.setStartDate(start);\n                    this.setEndDate(end);\n                }\n            }\n        }\n\n        if (typeof options.ranges === 'object') {\n            for (range in options.ranges) {\n\n                if (typeof options.ranges[range][0] === 'string')\n                    start = moment(options.ranges[range][0], this.locale.format);\n                else\n                    start = moment(options.ranges[range][0]);\n\n                if (typeof options.ranges[range][1] === 'string')\n                    end = moment(options.ranges[range][1], this.locale.format);\n                else\n                    end = moment(options.ranges[range][1]);\n\n                // If the start or end date exceed those allowed by the minDate or dateLimit\n                // options, shorten the range to the allowable period.\n                if (this.minDate && start.isBefore(this.minDate))\n                    start = this.minDate.clone();\n\n                var maxDate = this.maxDate;\n                if (this.dateLimit && start.clone().add(this.dateLimit).isAfter(maxDate))\n                    maxDate = start.clone().add(this.dateLimit);\n                if (maxDate && end.isAfter(maxDate))\n                    end = maxDate.clone();\n\n                // If the end of the range is before the minimum or the start of the range is\n                // after the maximum, don't display this range option at all.\n                if ((this.minDate && end.isBefore(this.minDate)) || (maxDate && start.isAfter(maxDate)))\n                    continue;\n                \n                //Support unicode chars in the range names.\n                var elem = document.createElement('textarea');\n                elem.innerHTML = range;\n                var rangeHtml = elem.value;\n\n                this.ranges[rangeHtml] = [start, end];\n            }\n\n            var list = '<ul>';\n            for (range in this.ranges) {\n                list += '<li>' + range + '</li>';\n            }\n            list += '<li>' + this.locale.customRangeLabel + '</li>';\n            list += '</ul>';\n            this.container.find('.ranges').prepend(list);\n        }\n\n        if (typeof cb === 'function') {\n            this.callback = cb;\n        }\n\n        if (!this.timePicker) {\n            this.startDate = this.startDate.startOf('day');\n            this.endDate = this.endDate.endOf('day');\n            this.container.find('.calendar-time').hide();\n        }\n\n        //can't be used together for now\n        if (this.timePicker && this.autoApply)\n            this.autoApply = false;\n\n        if (this.autoApply && typeof options.ranges !== 'object') {\n            this.container.find('.ranges').hide();\n        } else if (this.autoApply) {\n            this.container.find('.applyBtn, .cancelBtn').addClass('hide');\n        }\n\n        if (this.singleDatePicker) {\n            this.container.addClass('single');\n            this.container.find('.calendar.left').addClass('single');\n            this.container.find('.calendar.left').show();\n            this.container.find('.calendar.right').hide();\n            this.container.find('.daterangepicker_input input, .daterangepicker_input i').hide();\n            if (!this.timePicker) {\n                this.container.find('.ranges').hide();\n            }\n        }\n\n        if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) {\n            this.container.addClass('show-calendar');\n        }\n\n        this.container.addClass('opens' + this.opens);\n\n        //swap the position of the predefined ranges if opens right\n        if (typeof options.ranges !== 'undefined' && this.opens == 'right') {\n            var ranges = this.container.find('.ranges');\n            var html = ranges.clone();\n            ranges.remove();\n            this.container.find('.calendar.left').parent().prepend(html);\n        }\n\n        //apply CSS classes and labels to buttons\n        this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses);\n        if (this.applyClass.length)\n            this.container.find('.applyBtn').addClass(this.applyClass);\n        if (this.cancelClass.length)\n            this.container.find('.cancelBtn').addClass(this.cancelClass);\n        this.container.find('.applyBtn').html(this.locale.applyLabel);\n        this.container.find('.cancelBtn').html(this.locale.cancelLabel);\n\n        //\n        // event listeners\n        //\n\n        this.container.find('.calendar')\n            .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this))\n            .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this))\n            .on('click.daterangepicker', 'td.available', $.proxy(this.clickDate, this))\n            .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this))\n            .on('mouseleave.daterangepicker', 'td.available', $.proxy(this.updateFormInputs, this))\n            .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this))\n            .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this))\n            .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this))\n            .on('click.daterangepicker', '.daterangepicker_input input', $.proxy(this.showCalendars, this))\n            //.on('keyup.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsChanged, this))\n            .on('change.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsChanged, this));\n\n        this.container.find('.ranges')\n            .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this))\n            .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this))\n            .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this))\n            .on('mouseenter.daterangepicker', 'li', $.proxy(this.hoverRange, this))\n            .on('mouseleave.daterangepicker', 'li', $.proxy(this.updateFormInputs, this));\n\n        if (this.element.is('input')) {\n            this.element.on({\n                'click.daterangepicker': $.proxy(this.show, this),\n                'focus.daterangepicker': $.proxy(this.show, this),\n                'keyup.daterangepicker': $.proxy(this.elementChanged, this),\n                'keydown.daterangepicker': $.proxy(this.keydown, this)\n            });\n        } else {\n            this.element.on('click.daterangepicker', $.proxy(this.toggle, this));\n        }\n\n        //\n        // if attached to a text input, set the initial value\n        //\n\n        if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) {\n            this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\n            this.element.trigger('change');\n        } else if (this.element.is('input') && this.autoUpdateInput) {\n            this.element.val(this.startDate.format(this.locale.format));\n            this.element.trigger('change');\n        }\n\n    };\n\n    DateRangePicker.prototype = {\n\n        constructor: DateRangePicker,\n\n        setStartDate: function(startDate) {\n            if (typeof startDate === 'string')\n                this.startDate = moment(startDate, this.locale.format);\n\n            if (typeof startDate === 'object')\n                this.startDate = moment(startDate);\n\n            if (!this.timePicker)\n                this.startDate = this.startDate.startOf('day');\n\n            if (this.timePicker && this.timePickerIncrement)\n                this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n\n            if (this.minDate && this.startDate.isBefore(this.minDate))\n                this.startDate = this.minDate;\n\n            if (this.maxDate && this.startDate.isAfter(this.maxDate))\n                this.startDate = this.maxDate;\n\n            if (!this.isShowing)\n                this.updateElement();\n\n            this.updateMonthsInView();\n        },\n\n        setEndDate: function(endDate) {\n            if (typeof endDate === 'string')\n                this.endDate = moment(endDate, this.locale.format);\n\n            if (typeof endDate === 'object')\n                this.endDate = moment(endDate);\n\n            if (!this.timePicker)\n                this.endDate = this.endDate.endOf('day');\n\n            if (this.timePicker && this.timePickerIncrement)\n                this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n\n            if (this.endDate.isBefore(this.startDate))\n                this.endDate = this.startDate.clone();\n\n            if (this.maxDate && this.endDate.isAfter(this.maxDate))\n                this.endDate = this.maxDate;\n\n            if (this.dateLimit && this.startDate.clone().add(this.dateLimit).isBefore(this.endDate))\n                this.endDate = this.startDate.clone().add(this.dateLimit);\n\n            this.previousRightTime = this.endDate.clone();\n\n            if (!this.isShowing)\n                this.updateElement();\n\n            this.updateMonthsInView();\n        },\n\n        isInvalidDate: function() {\n            return false;\n        },\n\n        updateView: function() {\n            if (this.timePicker) {\n                this.renderTimePicker('left');\n                this.renderTimePicker('right');\n                if (!this.endDate) {\n                    this.container.find('.right .calendar-time select').attr('disabled', 'disabled').addClass('disabled');\n                } else {\n                    this.container.find('.right .calendar-time select').removeAttr('disabled').removeClass('disabled');\n                }\n            }\n            if (this.endDate) {\n                this.container.find('input[name=\"daterangepicker_end\"]').removeClass('active');\n                this.container.find('input[name=\"daterangepicker_start\"]').addClass('active');\n            } else {\n                this.container.find('input[name=\"daterangepicker_end\"]').addClass('active');\n                this.container.find('input[name=\"daterangepicker_start\"]').removeClass('active');\n            }\n            this.updateMonthsInView();\n            this.updateCalendars();\n            this.updateFormInputs();\n        },\n\n        updateMonthsInView: function() {\n            if (this.endDate) {\n\n                //if both dates are visible already, do nothing\n                if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month &&\n                    (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))\n                    &&\n                    (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))\n                    ) {\n                    return;\n                }\n\n                this.leftCalendar.month = this.startDate.clone().date(2);\n                if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) {\n                    this.rightCalendar.month = this.endDate.clone().date(2);\n                } else {\n                    this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\n                }\n                \n            } else {\n                if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) {\n                    this.leftCalendar.month = this.startDate.clone().date(2);\n                    this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\n                }\n            }\n        },\n\n        updateCalendars: function() {\n\n            if (this.timePicker) {\n                var hour, minute, second;\n                if (this.endDate) {\n                    hour = parseInt(this.container.find('.left .hourselect').val(), 10);\n                    minute = parseInt(this.container.find('.left .minuteselect').val(), 10);\n                    second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;\n                    if (!this.timePicker24Hour) {\n                        var ampm = this.container.find('.left .ampmselect').val();\n                        if (ampm === 'PM' && hour < 12)\n                            hour += 12;\n                        if (ampm === 'AM' && hour === 12)\n                            hour = 0;\n                    }\n                } else {\n                    hour = parseInt(this.container.find('.right .hourselect').val(), 10);\n                    minute = parseInt(this.container.find('.right .minuteselect').val(), 10);\n                    second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;\n                    if (!this.timePicker24Hour) {\n                        var ampm = this.container.find('.right .ampmselect').val();\n                        if (ampm === 'PM' && hour < 12)\n                            hour += 12;\n                        if (ampm === 'AM' && hour === 12)\n                            hour = 0;\n                    }\n                }\n                this.leftCalendar.month.hour(hour).minute(minute).second(second);\n                this.rightCalendar.month.hour(hour).minute(minute).second(second);\n            }\n\n            this.renderCalendar('left');\n            this.renderCalendar('right');\n\n            //highlight any predefined range matching the current start and end dates\n            this.container.find('.ranges li').removeClass('active');\n            if (this.endDate == null) return;\n\n            this.calculateChosenLabel();\n        },\n\n        renderCalendar: function(side) {\n\n            //\n            // Build the matrix of dates that will populate the calendar\n            //\n\n            var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar;\n            var month = calendar.month.month();\n            var year = calendar.month.year();\n            var hour = calendar.month.hour();\n            var minute = calendar.month.minute();\n            var second = calendar.month.second();\n            var daysInMonth = moment([year, month]).daysInMonth();\n            var firstDay = moment([year, month, 1]);\n            var lastDay = moment([year, month, daysInMonth]);\n            var lastMonth = moment(firstDay).subtract(1, 'month').month();\n            var lastYear = moment(firstDay).subtract(1, 'month').year();\n            var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth();\n            var dayOfWeek = firstDay.day();\n\n            //initialize a 6 rows x 7 columns array for the calendar\n            var calendar = [];\n            calendar.firstDay = firstDay;\n            calendar.lastDay = lastDay;\n\n            for (var i = 0; i < 6; i++) {\n                calendar[i] = [];\n            }\n\n            //populate the calendar with date objects\n            var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;\n            if (startDay > daysInLastMonth)\n                startDay -= 7;\n\n            if (dayOfWeek == this.locale.firstDay)\n                startDay = daysInLastMonth - 6;\n\n            var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]);\n\n            var col, row;\n            for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) {\n                if (i > 0 && col % 7 === 0) {\n                    col = 0;\n                    row++;\n                }\n                calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second);\n                curDate.hour(12);\n\n                if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') {\n                    calendar[row][col] = this.minDate.clone();\n                }\n\n                if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') {\n                    calendar[row][col] = this.maxDate.clone();\n                }\n\n            }\n\n            //make the calendar object available to hoverDate/clickDate\n            if (side == 'left') {\n                this.leftCalendar.calendar = calendar;\n            } else {\n                this.rightCalendar.calendar = calendar;\n            }\n\n            //\n            // Display the calendar\n            //\n\n            var minDate = side == 'left' ? this.minDate : this.startDate;\n            var maxDate = this.maxDate;\n            var selected = side == 'left' ? this.startDate : this.endDate;\n\n            var html = '<table class=\"table-condensed\">';\n            html += '<thead>';\n            html += '<tr>';\n\n            // add empty cell for week number\n            if (this.showWeekNumbers || this.showISOWeekNumbers)\n                html += '<th></th>';\n\n            if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) {\n                html += '<th class=\"prev available\"><i class=\"fa fa-chevron-left glyphicon glyphicon-chevron-left\"></i></th>';\n            } else {\n                html += '<th></th>';\n            }\n\n            var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(\" YYYY\");\n\n            if (this.showDropdowns) {\n                var currentMonth = calendar[1][1].month();\n                var currentYear = calendar[1][1].year();\n                var maxYear = (maxDate && maxDate.year()) || (currentYear + 5);\n                var minYear = (minDate && minDate.year()) || (currentYear - 50);\n                var inMinYear = currentYear == minYear;\n                var inMaxYear = currentYear == maxYear;\n\n                var monthHtml = '<select class=\"monthselect\">';\n                for (var m = 0; m < 12; m++) {\n                    if ((!inMinYear || m >= minDate.month()) && (!inMaxYear || m <= maxDate.month())) {\n                        monthHtml += \"<option value='\" + m + \"'\" +\n                            (m === currentMonth ? \" selected='selected'\" : \"\") +\n                            \">\" + this.locale.monthNames[m] + \"</option>\";\n                    } else {\n                        monthHtml += \"<option value='\" + m + \"'\" +\n                            (m === currentMonth ? \" selected='selected'\" : \"\") +\n                            \" disabled='disabled'>\" + this.locale.monthNames[m] + \"</option>\";\n                    }\n                }\n                monthHtml += \"</select>\";\n\n                var yearHtml = '<select class=\"yearselect\">';\n                for (var y = minYear; y <= maxYear; y++) {\n                    yearHtml += '<option value=\"' + y + '\"' +\n                        (y === currentYear ? ' selected=\"selected\"' : '') +\n                        '>' + y + '</option>';\n                }\n                yearHtml += '</select>';\n\n                dateHtml = monthHtml + yearHtml;\n            }\n\n            html += '<th colspan=\"5\" class=\"month\">' + dateHtml + '</th>';\n            if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) {\n                html += '<th class=\"next available\"><i class=\"fa fa-chevron-right glyphicon glyphicon-chevron-right\"></i></th>';\n            } else {\n                html += '<th></th>';\n            }\n\n            html += '</tr>';\n            html += '<tr>';\n\n            // add week number label\n            if (this.showWeekNumbers || this.showISOWeekNumbers)\n                html += '<th class=\"week\">' + this.locale.weekLabel + '</th>';\n\n            $.each(this.locale.daysOfWeek, function(index, dayOfWeek) {\n                html += '<th>' + dayOfWeek + '</th>';\n            });\n\n            html += '</tr>';\n            html += '</thead>';\n            html += '<tbody>';\n\n            //adjust maxDate to reflect the dateLimit setting in order to\n            //grey out end dates beyond the dateLimit\n            if (this.endDate == null && this.dateLimit) {\n                var maxLimit = this.startDate.clone().add(this.dateLimit).endOf('day');\n                if (!maxDate || maxLimit.isBefore(maxDate)) {\n                    maxDate = maxLimit;\n                }\n            }\n\n            for (var row = 0; row < 6; row++) {\n                html += '<tr>';\n\n                // add week number\n                if (this.showWeekNumbers)\n                    html += '<td class=\"week\">' + calendar[row][0].week() + '</td>';\n                else if (this.showISOWeekNumbers)\n                    html += '<td class=\"week\">' + calendar[row][0].isoWeek() + '</td>';\n\n                for (var col = 0; col < 7; col++) {\n\n                    var classes = [];\n\n                    //highlight today's date\n                    if (calendar[row][col].isSame(new Date(), \"day\"))\n                        classes.push('today');\n\n                    //highlight weekends\n                    if (calendar[row][col].isoWeekday() > 5)\n                        classes.push('weekend');\n\n                    //grey out the dates in other months displayed at beginning and end of this calendar\n                    if (calendar[row][col].month() != calendar[1][1].month())\n                        classes.push('off');\n\n                    //don't allow selection of dates before the minimum date\n                    if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day'))\n                        classes.push('off', 'disabled');\n\n                    //don't allow selection of dates after the maximum date\n                    if (maxDate && calendar[row][col].isAfter(maxDate, 'day'))\n                        classes.push('off', 'disabled');\n\n                    //don't allow selection of date if a custom function decides it's invalid\n                    if (this.isInvalidDate(calendar[row][col]))\n                        classes.push('off', 'disabled');\n\n                    //highlight the currently selected start date\n                    if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD'))\n                        classes.push('active', 'start-date');\n\n                    //highlight the currently selected end date\n                    if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD'))\n                        classes.push('active', 'end-date');\n\n                    //highlight dates in-between the selected dates\n                    if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate)\n                        classes.push('in-range');\n\n                    var cname = '', disabled = false;\n                    for (var i = 0; i < classes.length; i++) {\n                        cname += classes[i] + ' ';\n                        if (classes[i] == 'disabled')\n                            disabled = true;\n                    }\n                    if (!disabled)\n                        cname += 'available';\n\n                    html += '<td class=\"' + cname.replace(/^\\s+|\\s+$/g, '') + '\" data-title=\"' + 'r' + row + 'c' + col + '\">' + calendar[row][col].date() + '</td>';\n\n                }\n                html += '</tr>';\n            }\n\n            html += '</tbody>';\n            html += '</table>';\n\n            this.container.find('.calendar.' + side + ' .calendar-table').html(html);\n\n        },\n\n        renderTimePicker: function(side) {\n\n            var html, selected, minDate, maxDate = this.maxDate;\n\n            if (this.dateLimit && (!this.maxDate || this.startDate.clone().add(this.dateLimit).isAfter(this.maxDate)))\n                maxDate = this.startDate.clone().add(this.dateLimit);\n\n            if (side == 'left') {\n                selected = this.startDate.clone();\n                minDate = this.minDate;\n            } else if (side == 'right') {\n                selected = this.endDate ? this.endDate.clone() : this.previousRightTime.clone();\n                minDate = this.startDate;\n\n                //Preserve the time already selected\n                var timeSelector = this.container.find('.calendar.right .calendar-time div');\n                if (timeSelector.html() != '') {\n\n                    selected.hour(timeSelector.find('.hourselect option:selected').val() || selected.hour());\n                    selected.minute(timeSelector.find('.minuteselect option:selected').val() || selected.minute());\n                    selected.second(timeSelector.find('.secondselect option:selected').val() || selected.second());\n\n                    if (!this.timePicker24Hour) {\n                        var ampm = timeSelector.find('.ampmselect option:selected').val();\n                        if (ampm === 'PM' && selected.hour() < 12)\n                            selected.hour(selected.hour() + 12);\n                        if (ampm === 'AM' && selected.hour() === 12)\n                            selected.hour(0);\n                    }\n\n                    if (selected.isBefore(this.startDate))\n                        selected = this.startDate.clone();\n\n                    if (selected.isAfter(maxDate))\n                        selected = maxDate.clone();\n\n                }\n            }\n\n            //\n            // hours\n            //\n\n            html = '<select class=\"hourselect\">';\n\n            var start = this.timePicker24Hour ? 0 : 1;\n            var end = this.timePicker24Hour ? 23 : 12;\n\n            for (var i = start; i <= end; i++) {\n                var i_in_24 = i;\n                if (!this.timePicker24Hour)\n                    i_in_24 = selected.hour() >= 12 ? (i == 12 ? 12 : i + 12) : (i == 12 ? 0 : i);\n\n                var time = selected.clone().hour(i_in_24);\n                var disabled = false;\n                if (minDate && time.minute(59).isBefore(minDate))\n                    disabled = true;\n                if (maxDate && time.minute(0).isAfter(maxDate))\n                    disabled = true;\n\n                if (i_in_24 == selected.hour() && !disabled) {\n                    html += '<option value=\"' + i + '\" selected=\"selected\">' + i + '</option>';\n                } else if (disabled) {\n                    html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + i + '</option>';\n                } else {\n                    html += '<option value=\"' + i + '\">' + i + '</option>';\n                }\n            }\n\n            html += '</select> ';\n\n            //\n            // minutes\n            //\n\n            html += ': <select class=\"minuteselect\">';\n\n            for (var i = 0; i < 60; i += this.timePickerIncrement) {\n                var padded = i < 10 ? '0' + i : i;\n                var time = selected.clone().minute(i);\n\n                var disabled = false;\n                if (minDate && time.second(59).isBefore(minDate))\n                    disabled = true;\n                if (maxDate && time.second(0).isAfter(maxDate))\n                    disabled = true;\n\n                if (selected.minute() == i && !disabled) {\n                    html += '<option value=\"' + i + '\" selected=\"selected\">' + padded + '</option>';\n                } else if (disabled) {\n                    html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + padded + '</option>';\n                } else {\n                    html += '<option value=\"' + i + '\">' + padded + '</option>';\n                }\n            }\n\n            html += '</select> ';\n\n            //\n            // seconds\n            //\n\n            if (this.timePickerSeconds) {\n                html += ': <select class=\"secondselect\">';\n\n                for (var i = 0; i < 60; i++) {\n                    var padded = i < 10 ? '0' + i : i;\n                    var time = selected.clone().second(i);\n\n                    var disabled = false;\n                    if (minDate && time.isBefore(minDate))\n                        disabled = true;\n                    if (maxDate && time.isAfter(maxDate))\n                        disabled = true;\n\n                    if (selected.second() == i && !disabled) {\n                        html += '<option value=\"' + i + '\" selected=\"selected\">' + padded + '</option>';\n                    } else if (disabled) {\n                        html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + padded + '</option>';\n                    } else {\n                        html += '<option value=\"' + i + '\">' + padded + '</option>';\n                    }\n                }\n\n                html += '</select> ';\n            }\n\n            //\n            // AM/PM\n            //\n\n            if (!this.timePicker24Hour) {\n                html += '<select class=\"ampmselect\">';\n\n                var am_html = '';\n                var pm_html = '';\n\n                if (minDate && selected.clone().hour(12).minute(0).second(0).isBefore(minDate))\n                    am_html = ' disabled=\"disabled\" class=\"disabled\"';\n\n                if (maxDate && selected.clone().hour(0).minute(0).second(0).isAfter(maxDate))\n                    pm_html = ' disabled=\"disabled\" class=\"disabled\"';\n\n                if (selected.hour() >= 12) {\n                    html += '<option value=\"AM\"' + am_html + '>AM</option><option value=\"PM\" selected=\"selected\"' + pm_html + '>PM</option>';\n                } else {\n                    html += '<option value=\"AM\" selected=\"selected\"' + am_html + '>AM</option><option value=\"PM\"' + pm_html + '>PM</option>';\n                }\n\n                html += '</select>';\n            }\n\n            this.container.find('.calendar.' + side + ' .calendar-time div').html(html);\n\n        },\n\n        updateFormInputs: function() {\n\n            //ignore mouse movements while an above-calendar text input has focus\n            if (this.container.find('input[name=daterangepicker_start]').is(\":focus\") || this.container.find('input[name=daterangepicker_end]').is(\":focus\"))\n                return;\n\n            this.container.find('input[name=daterangepicker_start]').val(this.startDate.format(this.locale.format));\n            if (this.endDate)\n                this.container.find('input[name=daterangepicker_end]').val(this.endDate.format(this.locale.format));\n\n            if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) {\n                this.container.find('button.applyBtn').removeAttr('disabled');\n            } else {\n                this.container.find('button.applyBtn').attr('disabled', 'disabled');\n            }\n\n        },\n\n        move: function() {\n            var parentOffset = { top: 0, left: 0 },\n                containerTop;\n            var parentRightEdge = $(window).width();\n            if (!this.parentEl.is('body')) {\n                parentOffset = {\n                    top: this.parentEl.offset().top - this.parentEl.scrollTop(),\n                    left: this.parentEl.offset().left - this.parentEl.scrollLeft()\n                };\n                parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left;\n            }\n\n            if (this.drops == 'up')\n                containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;\n            else\n                containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;\n            this.container[this.drops == 'up' ? 'addClass' : 'removeClass']('dropup');\n\n            if (this.opens == 'left') {\n                this.container.css({\n                    top: containerTop,\n                    right: parentRightEdge - this.element.offset().left - this.element.outerWidth(),\n                    left: 'auto'\n                });\n                if (this.container.offset().left < 0) {\n                    this.container.css({\n                        right: 'auto',\n                        left: 9\n                    });\n                }\n            } else if (this.opens == 'center') {\n                this.container.css({\n                    top: containerTop,\n                    left: this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2\n                            - this.container.outerWidth() / 2,\n                    right: 'auto'\n                });\n                if (this.container.offset().left < 0) {\n                    this.container.css({\n                        right: 'auto',\n                        left: 9\n                    });\n                }\n            } else {\n                this.container.css({\n                    top: containerTop,\n                    left: this.element.offset().left - parentOffset.left,\n                    right: 'auto'\n                });\n                if (this.container.offset().left + this.container.outerWidth() > $(window).width()) {\n                    this.container.css({\n                        left: 'auto',\n                        right: 0\n                    });\n                }\n            }\n        },\n\n        show: function(e) {\n            if (this.isShowing) return;\n\n            // Create a click proxy that is private to this instance of datepicker, for unbinding\n            this._outsideClickProxy = $.proxy(function(e) { this.outsideClick(e); }, this);\n\n            // Bind global datepicker mousedown for hiding and\n            $(document)\n              .on('mousedown.daterangepicker', this._outsideClickProxy)\n              // also support mobile devices\n              .on('touchend.daterangepicker', this._outsideClickProxy)\n              // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them\n              .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy)\n              // and also close when focus changes to outside the picker (eg. tabbing between controls)\n              .on('focusin.daterangepicker', this._outsideClickProxy);\n\n            // Reposition the picker if the window is resized while it's open\n            $(window).on('resize.daterangepicker', $.proxy(function(e) { this.move(e); }, this));\n\n            this.oldStartDate = this.startDate.clone();\n            this.oldEndDate = this.endDate.clone();\n            this.previousRightTime = this.endDate.clone();\n\n            this.updateView();\n            this.container.show();\n            this.move();\n            this.element.trigger('show.daterangepicker', this);\n            this.isShowing = true;\n        },\n\n        hide: function(e) {\n            if (!this.isShowing) return;\n\n            //incomplete date selection, revert to last values\n            if (!this.endDate) {\n                this.startDate = this.oldStartDate.clone();\n                this.endDate = this.oldEndDate.clone();\n            }\n\n            //if a new date range was selected, invoke the user callback function\n            if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate))\n                this.callback(this.startDate, this.endDate, this.chosenLabel);\n\n            //if picker is attached to a text input, update it\n            this.updateElement();\n\n            $(document).off('.daterangepicker');\n            $(window).off('.daterangepicker');\n            this.container.hide();\n            this.element.trigger('hide.daterangepicker', this);\n            this.isShowing = false;\n        },\n\n        toggle: function(e) {\n            if (this.isShowing) {\n                this.hide();\n            } else {\n                this.show();\n            }\n        },\n\n        outsideClick: function(e) {\n            var target = $(e.target);\n            // if the page is clicked anywhere except within the daterangerpicker/button\n            // itself then call this.hide()\n            if (\n                // ie modal dialog fix\n                e.type == \"focusin\" ||\n                target.closest(this.element).length ||\n                target.closest(this.container).length ||\n                target.closest('.calendar-table').length\n                ) return;\n            this.hide();\n        },\n\n        showCalendars: function() {\n            this.container.addClass('show-calendar');\n            this.move();\n            this.element.trigger('showCalendar.daterangepicker', this);\n        },\n\n        hideCalendars: function() {\n            this.container.removeClass('show-calendar');\n            this.element.trigger('hideCalendar.daterangepicker', this);\n        },\n\n        hoverRange: function(e) {\n\n            //ignore mouse movements while an above-calendar text input has focus\n            if (this.container.find('input[name=daterangepicker_start]').is(\":focus\") || this.container.find('input[name=daterangepicker_end]').is(\":focus\"))\n                return;\n\n            var label = e.target.innerHTML;\n            if (label == this.locale.customRangeLabel) {\n                this.updateView();\n            } else {\n                var dates = this.ranges[label];\n                this.container.find('input[name=daterangepicker_start]').val(dates[0].format(this.locale.format));\n                this.container.find('input[name=daterangepicker_end]').val(dates[1].format(this.locale.format));\n            }\n            \n        },\n\n        clickRange: function(e) {\n            var label = e.target.innerHTML;\n            this.chosenLabel = label;\n            if (label == this.locale.customRangeLabel) {\n                this.showCalendars();\n            } else {\n                var dates = this.ranges[label];\n                this.startDate = dates[0];\n                this.endDate = dates[1];\n\n                if (!this.timePicker) {\n                    this.startDate.startOf('day');\n                    this.endDate.endOf('day');\n                }\n\n                if (!this.alwaysShowCalendars)\n                    this.hideCalendars();\n                this.clickApply();\n            }\n        },\n\n        clickPrev: function(e) {\n            var cal = $(e.target).parents('.calendar');\n            if (cal.hasClass('left')) {\n                this.leftCalendar.month.subtract(1, 'month');\n                if (this.linkedCalendars)\n                    this.rightCalendar.month.subtract(1, 'month');\n            } else {\n                this.rightCalendar.month.subtract(1, 'month');\n            }\n            this.updateCalendars();\n        },\n\n        clickNext: function(e) {\n            var cal = $(e.target).parents('.calendar');\n            if (cal.hasClass('left')) {\n                this.leftCalendar.month.add(1, 'month');\n            } else {\n                this.rightCalendar.month.add(1, 'month');\n                if (this.linkedCalendars)\n                    this.leftCalendar.month.add(1, 'month');\n            }\n            this.updateCalendars();\n        },\n\n        hoverDate: function(e) {\n\n            //ignore mouse movements while an above-calendar text input has focus\n            if (this.container.find('input[name=daterangepicker_start]').is(\":focus\") || this.container.find('input[name=daterangepicker_end]').is(\":focus\"))\n                return;\n\n            //ignore dates that can't be selected\n            if (!$(e.target).hasClass('available')) return;\n\n            //have the text inputs above calendars reflect the date being hovered over\n            var title = $(e.target).attr('data-title');\n            var row = title.substr(1, 1);\n            var col = title.substr(3, 1);\n            var cal = $(e.target).parents('.calendar');\n            var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\n\n            if (this.endDate) {\n                this.container.find('input[name=daterangepicker_start]').val(date.format(this.locale.format));\n            } else {\n                this.container.find('input[name=daterangepicker_end]').val(date.format(this.locale.format));\n            }\n\n            //highlight the dates between the start date and the date being hovered as a potential end date\n            var leftCalendar = this.leftCalendar;\n            var rightCalendar = this.rightCalendar;\n            var startDate = this.startDate;\n            if (!this.endDate) {\n                this.container.find('.calendar td').each(function(index, el) {\n\n                    //skip week numbers, only look at dates\n                    if ($(el).hasClass('week')) return;\n\n                    var title = $(el).attr('data-title');\n                    var row = title.substr(1, 1);\n                    var col = title.substr(3, 1);\n                    var cal = $(el).parents('.calendar');\n                    var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col];\n\n                    if (dt.isAfter(startDate) && dt.isBefore(date)) {\n                        $(el).addClass('in-range');\n                    } else {\n                        $(el).removeClass('in-range');\n                    }\n\n                });\n            }\n\n        },\n\n        clickDate: function(e) {\n\n            if (!$(e.target).hasClass('available')) return;\n\n            var title = $(e.target).attr('data-title');\n            var row = title.substr(1, 1);\n            var col = title.substr(3, 1);\n            var cal = $(e.target).parents('.calendar');\n            var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\n\n            //\n            // this function needs to do a few things:\n            // * alternate between selecting a start and end date for the range,\n            // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date\n            // * if autoapply is enabled, and an end date was chosen, apply the selection\n            // * if single date picker mode, and time picker isn't enabled, apply the selection immediately\n            //\n\n            if (this.endDate || date.isBefore(this.startDate, 'day')) {\n                if (this.timePicker) {\n                    var hour = parseInt(this.container.find('.left .hourselect').val(), 10);\n                    if (!this.timePicker24Hour) {\n                        var ampm = this.container.find('.left .ampmselect').val();\n                        if (ampm === 'PM' && hour < 12)\n                            hour += 12;\n                        if (ampm === 'AM' && hour === 12)\n                            hour = 0;\n                    }\n                    var minute = parseInt(this.container.find('.left .minuteselect').val(), 10);\n                    var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;\n                    date = date.clone().hour(hour).minute(minute).second(second);\n                }\n                this.endDate = null;\n                this.setStartDate(date.clone());\n            } else if (!this.endDate && date.isBefore(this.startDate)) {\n                //special case: clicking the same date for start/end, \n                //but the time of the end date is before the start date\n                this.setEndDate(this.startDate.clone());\n            } else {\n                if (this.timePicker) {\n                    var hour = parseInt(this.container.find('.right .hourselect').val(), 10);\n                    if (!this.timePicker24Hour) {\n                        var ampm = this.container.find('.right .ampmselect').val();\n                        if (ampm === 'PM' && hour < 12)\n                            hour += 12;\n                        if (ampm === 'AM' && hour === 12)\n                            hour = 0;\n                    }\n                    var minute = parseInt(this.container.find('.right .minuteselect').val(), 10);\n                    var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;\n                    date = date.clone().hour(hour).minute(minute).second(second);\n                }\n                this.setEndDate(date.clone());\n                if (this.autoApply) {\n                  this.calculateChosenLabel();\n                  this.clickApply();\n                }\n            }\n\n            if (this.singleDatePicker) {\n                this.setEndDate(this.startDate);\n                if (!this.timePicker)\n                    this.clickApply();\n            }\n\n            this.updateView();\n\n        },\n\n        calculateChosenLabel: function() {\n          var customRange = true;\n          var i = 0;\n          for (var range in this.ranges) {\n              if (this.timePicker) {\n                  if (this.startDate.isSame(this.ranges[range][0]) && this.endDate.isSame(this.ranges[range][1])) {\n                      customRange = false;\n                      this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html();\n                      break;\n                  }\n              } else {\n                  //ignore times when comparing dates if time picker is not enabled\n                  if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) {\n                      customRange = false;\n                      this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html();\n                      break;\n                  }\n              }\n              i++;\n          }\n          if (customRange) {\n              this.chosenLabel = this.container.find('.ranges li:last').addClass('active').html();\n              this.showCalendars();\n          }\n        },\n\n        clickApply: function(e) {\n            this.hide();\n            this.element.trigger('apply.daterangepicker', this);\n        },\n\n        clickCancel: function(e) {\n            this.startDate = this.oldStartDate;\n            this.endDate = this.oldEndDate;\n            this.hide();\n            this.element.trigger('cancel.daterangepicker', this);\n        },\n\n        monthOrYearChanged: function(e) {\n            var isLeft = $(e.target).closest('.calendar').hasClass('left'),\n                leftOrRight = isLeft ? 'left' : 'right',\n                cal = this.container.find('.calendar.'+leftOrRight);\n\n            // Month must be Number for new moment versions\n            var month = parseInt(cal.find('.monthselect').val(), 10);\n            var year = cal.find('.yearselect').val();\n\n            if (!isLeft) {\n                if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) {\n                    month = this.startDate.month();\n                    year = this.startDate.year();\n                }\n            }\n\n            if (this.minDate) {\n                if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) {\n                    month = this.minDate.month();\n                    year = this.minDate.year();\n                }\n            }\n\n            if (this.maxDate) {\n                if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) {\n                    month = this.maxDate.month();\n                    year = this.maxDate.year();\n                }\n            }\n\n            if (isLeft) {\n                this.leftCalendar.month.month(month).year(year);\n                if (this.linkedCalendars)\n                    this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month');\n            } else {\n                this.rightCalendar.month.month(month).year(year);\n                if (this.linkedCalendars)\n                    this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month');\n            }\n            this.updateCalendars();\n        },\n\n        timeChanged: function(e) {\n\n            var cal = $(e.target).closest('.calendar'),\n                isLeft = cal.hasClass('left');\n\n            var hour = parseInt(cal.find('.hourselect').val(), 10);\n            var minute = parseInt(cal.find('.minuteselect').val(), 10);\n            var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0;\n\n            if (!this.timePicker24Hour) {\n                var ampm = cal.find('.ampmselect').val();\n                if (ampm === 'PM' && hour < 12)\n                    hour += 12;\n                if (ampm === 'AM' && hour === 12)\n                    hour = 0;\n            }\n\n            if (isLeft) {\n                var start = this.startDate.clone();\n                start.hour(hour);\n                start.minute(minute);\n                start.second(second);\n                this.setStartDate(start);\n                if (this.singleDatePicker) {\n                    this.endDate = this.startDate.clone();\n                } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) {\n                    this.setEndDate(start.clone());\n                }\n            } else if (this.endDate) {\n                var end = this.endDate.clone();\n                end.hour(hour);\n                end.minute(minute);\n                end.second(second);\n                this.setEndDate(end);\n            }\n\n            //update the calendars so all clickable dates reflect the new time component\n            this.updateCalendars();\n\n            //update the form inputs above the calendars with the new time\n            this.updateFormInputs();\n\n            //re-render the time pickers because changing one selection can affect what's enabled in another\n            this.renderTimePicker('left');\n            this.renderTimePicker('right');\n\n        },\n\n        formInputsChanged: function(e) {\n            var isRight = $(e.target).closest('.calendar').hasClass('right');\n            var start = moment(this.container.find('input[name=\"daterangepicker_start\"]').val(), this.locale.format);\n            var end = moment(this.container.find('input[name=\"daterangepicker_end\"]').val(), this.locale.format);\n\n            if (start.isValid() && end.isValid()) {\n\n                if (isRight && end.isBefore(start))\n                    start = end.clone();\n\n                this.setStartDate(start);\n                this.setEndDate(end);\n\n                if (isRight) {\n                    this.container.find('input[name=\"daterangepicker_start\"]').val(this.startDate.format(this.locale.format));\n                } else {\n                    this.container.find('input[name=\"daterangepicker_end\"]').val(this.endDate.format(this.locale.format));\n                }\n\n            }\n\n            this.updateCalendars();\n            if (this.timePicker) {\n                this.renderTimePicker('left');\n                this.renderTimePicker('right');\n            }\n        },\n\n        elementChanged: function() {\n            if (!this.element.is('input')) return;\n            if (!this.element.val().length) return;\n            if (this.element.val().length < this.locale.format.length) return;\n\n            var dateString = this.element.val().split(this.locale.separator),\n                start = null,\n                end = null;\n\n            if (dateString.length === 2) {\n                start = moment(dateString[0], this.locale.format);\n                end = moment(dateString[1], this.locale.format);\n            }\n\n            if (this.singleDatePicker || start === null || end === null) {\n                start = moment(this.element.val(), this.locale.format);\n                end = start;\n            }\n\n            if (!start.isValid() || !end.isValid()) return;\n\n            this.setStartDate(start);\n            this.setEndDate(end);\n            this.updateView();\n        },\n\n        keydown: function(e) {\n            //hide on tab or enter\n            if ((e.keyCode === 9) || (e.keyCode === 13)) {\n                this.hide();\n            }\n        },\n\n        updateElement: function() {\n            if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) {\n                this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\n                this.element.trigger('change');\n            } else if (this.element.is('input') && this.autoUpdateInput) {\n                this.element.val(this.startDate.format(this.locale.format));\n                this.element.trigger('change');\n            }\n        },\n\n        remove: function() {\n            this.container.remove();\n            this.element.off('.daterangepicker');\n            this.element.removeData();\n        }\n\n    };\n\n    $.fn.daterangepicker = function(options, callback) {\n        this.each(function() {\n            var el = $(this);\n            if (el.data('daterangepicker'))\n                el.data('daterangepicker').remove();\n            el.data('daterangepicker', new DateRangePicker(el, options, callback));\n        });\n        return this;\n    };\n    \n    return DateRangePicker;\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/daterangepicker/moment.js",
    "content": "//! moment.js\n//! version : 2.10.3\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, function () { 'use strict';\n\n    var hookCallback;\n\n    function utils_hooks__hooks () {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback (callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return Object.prototype.toString.call(input) === '[object Array]';\n    }\n\n    function isDate(input) {\n        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n    }\n\n    function map(arr, fn) {\n        var res = [], i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function create_utc__createUTC (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty           : false,\n            unusedTokens    : [],\n            unusedInput     : [],\n            overflow        : -2,\n            charsLeftOver   : 0,\n            nullInput       : false,\n            invalidMonth    : null,\n            invalidFormat   : false,\n            userInvalidated : false,\n            iso             : false\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    function valid__isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m);\n            m._isValid = !isNaN(m._d.getTime()) &&\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidMonth &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated;\n\n            if (m._strict) {\n                m._isValid = m._isValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n        }\n        return m._isValid;\n    }\n\n    function valid__createInvalid (flags) {\n        var m = create_utc__createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        }\n        else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    var momentProperties = utils_hooks__hooks.momentProperties = [];\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (typeof from._isAMomentObject !== 'undefined') {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (typeof from._i !== 'undefined') {\n            to._i = from._i;\n        }\n        if (typeof from._f !== 'undefined') {\n            to._f = from._f;\n        }\n        if (typeof from._l !== 'undefined') {\n            to._l = from._l;\n        }\n        if (typeof from._strict !== 'undefined') {\n            to._strict = from._strict;\n        }\n        if (typeof from._tzm !== 'undefined') {\n            to._tzm = from._tzm;\n        }\n        if (typeof from._isUTC !== 'undefined') {\n            to._isUTC = from._isUTC;\n        }\n        if (typeof from._offset !== 'undefined') {\n            to._offset = from._offset;\n        }\n        if (typeof from._pf !== 'undefined') {\n            to._pf = getParsingFlags(from);\n        }\n        if (typeof from._locale !== 'undefined') {\n            to._locale = from._locale;\n        }\n\n        if (momentProperties.length > 0) {\n            for (i in momentProperties) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (typeof val !== 'undefined') {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    var updateInProgress = false;\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(+config._d);\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            utils_hooks__hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment (obj) {\n        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            if (coercedNumber >= 0) {\n                value = Math.floor(coercedNumber);\n            } else {\n                value = Math.ceil(coercedNumber);\n            }\n        }\n\n        return value;\n    }\n\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if ((dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    function Locale() {\n    }\n\n    var locales = {};\n    var globalLocale;\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0, j, next, locale, split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return null;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (!locales[name] && typeof module !== 'undefined' &&\n                module && module.exports) {\n            try {\n                oldLocale = globalLocale._abbr;\n                require('./locale/' + name);\n                // because defineLocale currently also sets the global locale, we\n                // want to undo that for lazy loaded locales\n                locale_locales__getSetGlobalLocale(oldLocale);\n            } catch (e) { }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function locale_locales__getSetGlobalLocale (key, values) {\n        var data;\n        if (key) {\n            if (typeof values === 'undefined') {\n                data = locale_locales__getLocale(key);\n            }\n            else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale (name, values) {\n        if (values !== null) {\n            values.abbr = name;\n            if (!locales[name]) {\n                locales[name] = new Locale();\n            }\n            locales[name].set(values);\n\n            // backwards compat for now: also set the locale\n            locale_locales__getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    // returns locale data\n    function locale_locales__getLocale (key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias (unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    function makeGetSet (unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                get_set__set(this, unit, value);\n                utils_hooks__hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get_set__get(this, unit);\n            }\n        };\n    }\n\n    function get_set__get (mom, unit) {\n        return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]();\n    }\n\n    function get_set__set (mom, unit, value) {\n        return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n    }\n\n    // MOMENTS\n\n    function getSet (units, value) {\n        var unit;\n        if (typeof units === 'object') {\n            for (unit in units) {\n                this.set(unit, units[unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (typeof this[units] === 'function') {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var output = '' + Math.abs(number),\n            sign = number >= 0;\n\n        while (output.length < targetLength) {\n            output = '0' + output;\n        }\n        return (sign ? (forceSign ? '+' : '') : '-') + output;\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g;\n\n    var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n    var formatFunctions = {};\n\n    var formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken (token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(func.apply(this, arguments), token);\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens), i, length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '';\n            for (i = 0; i < length; i++) {\n                output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n\n        if (!formatFunctions[format]) {\n            formatFunctions[format] = makeFormatFunction(format);\n        }\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var match1         = /\\d/;            //       0 - 9\n    var match2         = /\\d\\d/;          //      00 - 99\n    var match3         = /\\d{3}/;         //     000 - 999\n    var match4         = /\\d{4}/;         //    0000 - 9999\n    var match6         = /[+-]?\\d{6}/;    // -999999 - 999999\n    var match1to2      = /\\d\\d?/;         //       0 - 99\n    var match1to3      = /\\d{1,3}/;       //       0 - 999\n    var match1to4      = /\\d{1,4}/;       //       0 - 9999\n    var match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\n    var matchUnsigned  = /\\d+/;           //       0 - inf\n    var matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\n    var matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n\n    var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n    // any word (or two) characters or numbers including two/three word month in arabic.\n    var matchWord = /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\n\n    var regexes = {};\n\n    function addRegexToken (token, regex, strictRegex) {\n        regexes[token] = typeof regex === 'function' ? regex : function (isStrict) {\n            return (isStrict && strictRegex) ? strictRegex : regex;\n        };\n    }\n\n    function getParseRegexForToken (token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n            return p1 || p2 || p3 || p4;\n        }).replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken (token, callback) {\n        var i, func = callback;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (typeof callback === 'number') {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        for (i = 0; i < token.length; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken (token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0;\n    var MONTH = 1;\n    var DATE = 2;\n    var HOUR = 3;\n    var MINUTE = 4;\n    var SECOND = 5;\n    var MILLISECOND = 6;\n\n    function daysInMonth(year, month) {\n        return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PARSING\n\n    addRegexToken('M',    match1to2);\n    addRegexToken('MM',   match1to2, match2);\n    addRegexToken('MMM',  matchWord);\n    addRegexToken('MMMM', matchWord);\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n    function localeMonths (m) {\n        return this._months[m.month()];\n    }\n\n    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n    function localeMonthsShort (m) {\n        return this._monthsShort[m.month()];\n    }\n\n    function localeMonthsParse (monthName, format, strict) {\n        var i, mom, regex;\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = create_utc__createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth (mom, value) {\n        var dayOfMonth;\n\n        // TODO: Move this out of here!\n        if (typeof value === 'string') {\n            value = mom.localeData().monthsParse(value);\n            // TODO: Another silent failure?\n            if (typeof value !== 'number') {\n                return mom;\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth (value) {\n        if (value != null) {\n            setMonth(this, value);\n            utils_hooks__hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get_set__get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth () {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function checkOverflow (m) {\n        var overflow;\n        var a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n                -1;\n\n            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n                overflow = DATE;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    function warn(msg) {\n        if (utils_hooks__hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true,\n            msgWithStack = msg + '\\n' + (new Error()).stack;\n\n        return extend(function () {\n            if (firstTime) {\n                warn(msgWithStack);\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    utils_hooks__hooks.suppressDeprecationWarnings = false;\n\n    var from_string__isoRegex = /^\\s*(?:[+-]\\d{6}|\\d{4})-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n    var isoDates = [\n        ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d{2}-\\d{2}/],\n        ['YYYY-MM-DD', /\\d{4}-\\d{2}-\\d{2}/],\n        ['GGGG-[W]WW-E', /\\d{4}-W\\d{2}-\\d/],\n        ['GGGG-[W]WW', /\\d{4}-W\\d{2}/],\n        ['YYYY-DDD', /\\d{4}-\\d{3}/]\n    ];\n\n    // iso time formats and regexes\n    var isoTimes = [\n        ['HH:mm:ss.SSSS', /(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n        ['HH:mm:ss', /(T| )\\d\\d:\\d\\d:\\d\\d/],\n        ['HH:mm', /(T| )\\d\\d:\\d\\d/],\n        ['HH', /(T| )\\d\\d/]\n    ];\n\n    var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n    // date from iso format\n    function configFromISO(config) {\n        var i, l,\n            string = config._i,\n            match = from_string__isoRegex.exec(string);\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDates.length; i < l; i++) {\n                if (isoDates[i][1].exec(string)) {\n                    // match[5] should be 'T' or undefined\n                    config._f = isoDates[i][0] + (match[6] || ' ');\n                    break;\n                }\n            }\n            for (i = 0, l = isoTimes.length; i < l; i++) {\n                if (isoTimes[i][1].exec(string)) {\n                    config._f += isoTimes[i][0];\n                    break;\n                }\n            }\n            if (string.match(matchOffset)) {\n                config._f += 'Z';\n            }\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from iso format or fallback\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n            utils_hooks__hooks.createFromInputFallback(config);\n        }\n    }\n\n    utils_hooks__hooks.createFromInputFallback = deprecate(\n        'moment construction falls back to js Date. This is ' +\n        'discouraged and will be removed in upcoming major ' +\n        'release. Please refer to ' +\n        'https://github.com/moment/moment/issues/1407 for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    function createDate (y, m, d, h, M, s, ms) {\n        //can't just apply() to create a date:\n        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply\n        var date = new Date(y, m, d, h, M, s, ms);\n\n        //the date constructor doesn't accept years < 1970\n        if (y < 1970) {\n            date.setFullYear(y);\n        }\n        return date;\n    }\n\n    function createUTCDate (y) {\n        var date = new Date(Date.UTC.apply(null, arguments));\n        if (y < 1970) {\n            date.setUTCFullYear(y);\n        }\n        return date;\n    }\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY',   4],       0, 'year');\n    addFormatToken(0, ['YYYYY',  5],       0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PARSING\n\n    addRegexToken('Y',      matchSigned);\n    addRegexToken('YY',     match1to2, match2);\n    addRegexToken('YYYY',   match1to4, match4);\n    addRegexToken('YYYYY',  match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYY', 'YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    // HOOKS\n\n    utils_hooks__hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', false);\n\n    function getIsLeapYear () {\n        return isLeapYear(this.year());\n    }\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PARSING\n\n    addRegexToken('w',  match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W',  match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n        week[token.substr(0, 1)] = toInt(input);\n    });\n\n    // HELPERS\n\n    // firstDayOfWeek       0 = sun, 6 = sat\n    //                      the day of the week that starts the week\n    //                      (usually sunday or monday)\n    // firstDayOfWeekOfYear 0 = sun, 6 = sat\n    //                      the first week is the week that contains the first\n    //                      of this day of the week\n    //                      (eg. ISO weeks use thursday (4))\n    function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) {\n        var end = firstDayOfWeekOfYear - firstDayOfWeek,\n            daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(),\n            adjustedMoment;\n\n\n        if (daysToDayOfWeek > end) {\n            daysToDayOfWeek -= 7;\n        }\n\n        if (daysToDayOfWeek < end - 7) {\n            daysToDayOfWeek += 7;\n        }\n\n        adjustedMoment = local__createLocal(mom).add(daysToDayOfWeek, 'd');\n        return {\n            week: Math.ceil(adjustedMoment.dayOfYear() / 7),\n            year: adjustedMoment.year()\n        };\n    }\n\n    // LOCALES\n\n    function localeWeek (mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek () {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear () {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek (input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek (input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PARSING\n\n    addRegexToken('DDD',  match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {\n        var d = createUTCDate(year, 0, 1).getUTCDay();\n        var daysToAdd;\n        var dayOfYear;\n\n        d = d === 0 ? 7 : d;\n        weekday = weekday != null ? weekday : firstDayOfWeek;\n        daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0);\n        dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1;\n\n        return {\n            year      : dayOfYear > 0 ? year      : year - 1,\n            dayOfYear : dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear\n        };\n    }\n\n    // MOMENTS\n\n    function getSetDayOfYear (input) {\n        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n    }\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        var now = new Date();\n        if (config._useUTC) {\n            return [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()];\n        }\n        return [now.getFullYear(), now.getMonth(), now.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray (config) {\n        var i, date, input = [], currentDate, yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (config._dayOfYear > daysInYear(yearToUse)) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (config._a[HOUR] === 24 &&\n                config._a[MINUTE] === 0 &&\n                config._a[SECOND] === 0 &&\n                config._a[MILLISECOND] === 0) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year);\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year);\n            week = defaults(w.w, 1);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < dow) {\n                    ++week;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from begining of week\n                weekday = w.e + dow;\n            } else {\n                // default to begining of week\n                weekday = dow;\n            }\n        }\n        temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow);\n\n        config._a[YEAR] = temp.year;\n        config._dayOfYear = temp.dayOfYear;\n    }\n\n    utils_hooks__hooks.ISO_8601 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === utils_hooks__hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i, parsedInput, tokens, token, skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0;\n\n        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                }\n                else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            }\n            else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (getParsingFlags(config).bigHour === true &&\n                config._a[HOUR] <= 12 &&\n                config._a[HOUR] > 0) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n\n    function meridiemFixWrap (locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n\n            scoreToBeat,\n            i,\n            currentScore;\n\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; i++) {\n            currentScore = 0;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (!valid__isValid(tempConfig)) {\n                continue;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (scoreToBeat == null || currentScore < scoreToBeat) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i);\n        config._a = [i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond];\n\n        configFromArray(config);\n    }\n\n    function createFromConfig (config) {\n        var input = config._i,\n            format = config._f,\n            res;\n\n        config._locale = config._locale || locale_locales__getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return valid__createInvalid({nullInput: true});\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else if (isDate(input)) {\n            config._d = input;\n        } else {\n            configFromInput(config);\n        }\n\n        res = new Moment(checkOverflow(config));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (input === undefined) {\n            config._d = new Date();\n        } else if (isDate(input)) {\n            config._d = new Date(+input);\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (typeof(input) === 'object') {\n            configFromObject(config);\n        } else if (typeof(input) === 'number') {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            utils_hooks__hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC (input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (typeof(locale) === 'boolean') {\n            strict = locale;\n            locale = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function local__createLocal (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n         'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548',\n         function () {\n             var other = local__createLocal.apply(null, arguments);\n             return other < this ? this : other;\n         }\n     );\n\n    var prototypeMax = deprecate(\n        'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548',\n        function () {\n            var other = local__createLocal.apply(null, arguments);\n            return other > this ? this : other;\n        }\n    );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return local__createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    function Duration (duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        // representation for dateAddRemove\n        this._milliseconds = +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 36e5; // 1000 * 60 * 60\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days +\n            weeks * 7;\n        // It is impossible translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months +\n            quarters * 3 +\n            years * 12;\n\n        this._data = {};\n\n        this._locale = locale_locales__getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration (obj) {\n        return obj instanceof Duration;\n    }\n\n    function offset (token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset();\n            var sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z',  matchOffset);\n    addRegexToken('ZZ', matchOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(string) {\n        var matches = ((string || '').match(matchOffset) || []);\n        var chunk   = matches[matches.length - 1] || [];\n        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff = (isMoment(input) || isDate(input) ? +input : +local__createLocal(input)) - (+res);\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(+res._d + diff);\n            utils_hooks__hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return local__createLocal(input).local();\n        }\n        return model._isUTC ? local__createLocal(input).zone(model._offset || 0) : local__createLocal(input).local();\n    }\n\n    function getDateOffset (m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    utils_hooks__hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset (input, keepLocalTime) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(input);\n            }\n            if (Math.abs(input) < 16) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false);\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    utils_hooks__hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone (input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC (keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal (keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset () {\n        if (this._tzm) {\n            this.utcOffset(this._tzm);\n        } else if (typeof this._i === 'string') {\n            this.utcOffset(offsetFromString(this._i));\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset (input) {\n        if (!input) {\n            input = 0;\n        }\n        else {\n            input = local__createLocal(input).utcOffset();\n        }\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime () {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted () {\n        if (this._a) {\n            var other = this._isUTC ? create_utc__createUTC(this._a) : local__createLocal(this._a);\n            return this.isValid() && compareArrays(this._a, other.toArray()) > 0;\n        }\n\n        return false;\n    }\n\n    function isLocal () {\n        return !this._isUTC;\n    }\n\n    function isUtcOffset () {\n        return this._isUTC;\n    }\n\n    function isUtc () {\n        return this._isUTC && this._offset === 0;\n    }\n\n    var aspNetRegex = /(\\-)?(?:(\\d*)\\.)?(\\d+)\\:(\\d+)(?:\\:(\\d+)\\.?(\\d{3})?)?/;\n\n    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n    var create__isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;\n\n    function create__createDuration (input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms : input._milliseconds,\n                d  : input._days,\n                M  : input._months\n            };\n        } else if (typeof input === 'number') {\n            duration = {};\n            if (key) {\n                duration[key] = input;\n            } else {\n                duration.milliseconds = input;\n            }\n        } else if (!!(match = aspNetRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y  : 0,\n                d  : toInt(match[DATE])        * sign,\n                h  : toInt(match[HOUR])        * sign,\n                m  : toInt(match[MINUTE])      * sign,\n                s  : toInt(match[SECOND])      * sign,\n                ms : toInt(match[MILLISECOND]) * sign\n            };\n        } else if (!!(match = create__isoRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y : parseIso(match[2], sign),\n                M : parseIso(match[3], sign),\n                d : parseIso(match[4], sign),\n                h : parseIso(match[5], sign),\n                m : parseIso(match[6], sign),\n                s : parseIso(match[7], sign),\n                w : parseIso(match[8], sign)\n            };\n        } else if (duration == null) {// checks for null or undefined\n            duration = {};\n        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n            diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to));\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        return ret;\n    }\n\n    create__createDuration.fn = Duration.prototype;\n\n    function parseIso (inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {milliseconds: 0, months: 0};\n\n        res.months = other.month() - base.month() +\n            (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period).');\n                tmp = val; val = period; period = tmp;\n            }\n\n            val = typeof val === 'string' ? +val : val;\n            dur = create__createDuration(val, period);\n            add_subtract__addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = duration._days,\n            months = duration._months;\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (milliseconds) {\n            mom._d.setTime(+mom._d + milliseconds * isAdding);\n        }\n        if (days) {\n            get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding);\n        }\n        if (months) {\n            setMonth(mom, get_set__get(mom, 'Month') + months * isAdding);\n        }\n        if (updateOffset) {\n            utils_hooks__hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add_subtract__add      = createAdder(1, 'add');\n    var add_subtract__subtract = createAdder(-1, 'subtract');\n\n    function moment_calendar__calendar (time) {\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || local__createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            diff = this.diff(sod, 'days', true),\n            format = diff < -6 ? 'sameElse' :\n                diff < -1 ? 'lastWeek' :\n                diff < 0 ? 'lastDay' :\n                diff < 1 ? 'sameDay' :\n                diff < 2 ? 'nextDay' :\n                diff < 7 ? 'nextWeek' : 'sameElse';\n        return this.format(this.localeData().calendar(format, this, local__createLocal(now)));\n    }\n\n    function clone () {\n        return new Moment(this);\n    }\n\n    function isAfter (input, units) {\n        var inputMs;\n        units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');\n        if (units === 'millisecond') {\n            input = isMoment(input) ? input : local__createLocal(input);\n            return +this > +input;\n        } else {\n            inputMs = isMoment(input) ? +input : +local__createLocal(input);\n            return inputMs < +this.clone().startOf(units);\n        }\n    }\n\n    function isBefore (input, units) {\n        var inputMs;\n        units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');\n        if (units === 'millisecond') {\n            input = isMoment(input) ? input : local__createLocal(input);\n            return +this < +input;\n        } else {\n            inputMs = isMoment(input) ? +input : +local__createLocal(input);\n            return +this.clone().endOf(units) < inputMs;\n        }\n    }\n\n    function isBetween (from, to, units) {\n        return this.isAfter(from, units) && this.isBefore(to, units);\n    }\n\n    function isSame (input, units) {\n        var inputMs;\n        units = normalizeUnits(units || 'millisecond');\n        if (units === 'millisecond') {\n            input = isMoment(input) ? input : local__createLocal(input);\n            return +this === +input;\n        } else {\n            inputMs = +local__createLocal(input);\n            return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units));\n        }\n    }\n\n    function absFloor (number) {\n        if (number < 0) {\n            return Math.ceil(number);\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function diff (input, units, asFloat) {\n        var that = cloneWithOffset(input, this),\n            zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4,\n            delta, output;\n\n        units = normalizeUnits(units);\n\n        if (units === 'year' || units === 'month' || units === 'quarter') {\n            output = monthDiff(this, that);\n            if (units === 'quarter') {\n                output = output / 3;\n            } else if (units === 'year') {\n                output = output / 12;\n            }\n        } else {\n            delta = this - that;\n            output = units === 'second' ? delta / 1e3 : // 1000\n                units === 'minute' ? delta / 6e4 : // 1000 * 60\n                units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60\n                units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst\n                units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst\n                delta;\n        }\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff (a, b) {\n        // difference in months\n        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2, adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        return -(wholeMonthDiff + adjust);\n    }\n\n    utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n\n    function toString () {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function moment_format__toISOString () {\n        var m = this.clone().utc();\n        if (0 < m.year() && m.year() <= 9999) {\n            if ('function' === typeof Date.prototype.toISOString) {\n                // native implementation is ~50x faster, use it when we can\n                return this.toDate().toISOString();\n            } else {\n                return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n            }\n        } else {\n            return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n        }\n    }\n\n    function format (inputString) {\n        var output = formatMoment(this, inputString || utils_hooks__hooks.defaultFormat);\n        return this.localeData().postformat(output);\n    }\n\n    function from (time, withoutSuffix) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n        return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n    }\n\n    function fromNow (withoutSuffix) {\n        return this.from(local__createLocal(), withoutSuffix);\n    }\n\n    function to (time, withoutSuffix) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n        return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n    }\n\n    function toNow (withoutSuffix) {\n        return this.to(local__createLocal(), withoutSuffix);\n    }\n\n    function locale (key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = locale_locales__getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData () {\n        return this._locale;\n    }\n\n    function startOf (units) {\n        units = normalizeUnits(units);\n        // the following switch intentionally omits break keywords\n        // to utilize falling through the cases.\n        switch (units) {\n        case 'year':\n            this.month(0);\n            /* falls through */\n        case 'quarter':\n        case 'month':\n            this.date(1);\n            /* falls through */\n        case 'week':\n        case 'isoWeek':\n        case 'day':\n            this.hours(0);\n            /* falls through */\n        case 'hour':\n            this.minutes(0);\n            /* falls through */\n        case 'minute':\n            this.seconds(0);\n            /* falls through */\n        case 'second':\n            this.milliseconds(0);\n        }\n\n        // weeks are a special case\n        if (units === 'week') {\n            this.weekday(0);\n        }\n        if (units === 'isoWeek') {\n            this.isoWeekday(1);\n        }\n\n        // quarters are also special\n        if (units === 'quarter') {\n            this.month(Math.floor(this.month() / 3) * 3);\n        }\n\n        return this;\n    }\n\n    function endOf (units) {\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond') {\n            return this;\n        }\n        return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n    }\n\n    function to_type__valueOf () {\n        return +this._d - ((this._offset || 0) * 60000);\n    }\n\n    function unix () {\n        return Math.floor(+this / 1000);\n    }\n\n    function toDate () {\n        return this._offset ? new Date(+this) : this._d;\n    }\n\n    function toArray () {\n        var m = this;\n        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n    }\n\n    function moment_valid__isValid () {\n        return valid__isValid(this);\n    }\n\n    function parsingFlags () {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt () {\n        return getParsingFlags(this).overflow;\n    }\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken (token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg',     'weekYear');\n    addWeekYearFormatToken('ggggg',    'weekYear');\n    addWeekYearFormatToken('GGGG',  'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PARSING\n\n    addRegexToken('G',      matchSigned);\n    addRegexToken('g',      matchSigned);\n    addRegexToken('GG',     match1to2, match2);\n    addRegexToken('gg',     match1to2, match2);\n    addRegexToken('GGGG',   match1to4, match4);\n    addRegexToken('gggg',   match1to4, match4);\n    addRegexToken('GGGGG',  match1to6, match6);\n    addRegexToken('ggggg',  match1to6, match6);\n\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = utils_hooks__hooks.parseTwoDigitYear(input);\n    });\n\n    // HELPERS\n\n    function weeksInYear(year, dow, doy) {\n        return weekOfYear(local__createLocal([year, 11, 31 + dow - doy]), dow, doy).week;\n    }\n\n    // MOMENTS\n\n    function getSetWeekYear (input) {\n        var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year;\n        return input == null ? year : this.add((input - year), 'y');\n    }\n\n    function getSetISOWeekYear (input) {\n        var year = weekOfYear(this, 1, 4).year;\n        return input == null ? year : this.add((input - year), 'y');\n    }\n\n    function getISOWeeksInYear () {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getWeeksInYear () {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    addFormatToken('Q', 0, 0, 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter (input) {\n        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n    }\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PARSING\n\n    addRegexToken('D',  match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        return isStrict ? locale._ordinalParse : locale._ordinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0], 10);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PARSING\n\n    addRegexToken('d',    match1to2);\n    addRegexToken('e',    match1to2);\n    addRegexToken('E',    match1to2);\n    addRegexToken('dd',   matchWord);\n    addRegexToken('ddd',  matchWord);\n    addRegexToken('dddd', matchWord);\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config) {\n        var weekday = config._locale.weekdaysParse(input);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input === 'string') {\n            if (!isNaN(input)) {\n                input = parseInt(input, 10);\n            }\n            else {\n                input = locale.weekdaysParse(input);\n                if (typeof input !== 'number') {\n                    return null;\n                }\n            }\n        }\n        return input;\n    }\n\n    // LOCALES\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n    function localeWeekdays (m) {\n        return this._weekdays[m.day()];\n    }\n\n    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n    function localeWeekdaysShort (m) {\n        return this._weekdaysShort[m.day()];\n    }\n\n    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n    function localeWeekdaysMin (m) {\n        return this._weekdaysMin[m.day()];\n    }\n\n    function localeWeekdaysParse (weekdayName) {\n        var i, mom, regex;\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            if (!this._weekdaysParse[i]) {\n                mom = local__createLocal([2000, 1]).day(i);\n                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek (input) {\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek (input) {\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek (input) {\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n        return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7);\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, function () {\n        return this.hours() % 12 || 12;\n    });\n\n    function meridiem (token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PARSING\n\n    function matchMeridiem (isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a',  matchMeridiem);\n    addRegexToken('A',  matchMeridiem);\n    addRegexToken('H',  match1to2);\n    addRegexToken('h',  match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n\n    // LOCALES\n\n    function localeIsPM (input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return ((input + '').toLowerCase().charAt(0) === 'p');\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n    function localeMeridiem (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n\n    // MOMENTS\n\n    // Setting the hour should keep the time, because the user explicitly\n    // specified which hour he wants. So trying to maintain the same hour (in\n    // a new timezone) makes sense. Adding/subtracting hours does not follow\n    // this rule.\n    var getSetHour = makeGetSet('Hours', true);\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PARSING\n\n    addRegexToken('m',  match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PARSING\n\n    addRegexToken('s',  match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    function millisecond__milliseconds (token) {\n        addFormatToken(0, [token, 3], 0, 'millisecond');\n    }\n\n    millisecond__milliseconds('SSS');\n    millisecond__milliseconds('SSSS');\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PARSING\n\n    addRegexToken('S',    match1to3, match1);\n    addRegexToken('SS',   match1to3, match2);\n    addRegexToken('SSS',  match1to3, match3);\n    addRegexToken('SSSS', matchUnsigned);\n    addParseToken(['S', 'SS', 'SSS', 'SSSS'], function (input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    });\n\n    // MOMENTS\n\n    var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    addFormatToken('z',  0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr () {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName () {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var momentPrototype__proto = Moment.prototype;\n\n    momentPrototype__proto.add          = add_subtract__add;\n    momentPrototype__proto.calendar     = moment_calendar__calendar;\n    momentPrototype__proto.clone        = clone;\n    momentPrototype__proto.diff         = diff;\n    momentPrototype__proto.endOf        = endOf;\n    momentPrototype__proto.format       = format;\n    momentPrototype__proto.from         = from;\n    momentPrototype__proto.fromNow      = fromNow;\n    momentPrototype__proto.to           = to;\n    momentPrototype__proto.toNow        = toNow;\n    momentPrototype__proto.get          = getSet;\n    momentPrototype__proto.invalidAt    = invalidAt;\n    momentPrototype__proto.isAfter      = isAfter;\n    momentPrototype__proto.isBefore     = isBefore;\n    momentPrototype__proto.isBetween    = isBetween;\n    momentPrototype__proto.isSame       = isSame;\n    momentPrototype__proto.isValid      = moment_valid__isValid;\n    momentPrototype__proto.lang         = lang;\n    momentPrototype__proto.locale       = locale;\n    momentPrototype__proto.localeData   = localeData;\n    momentPrototype__proto.max          = prototypeMax;\n    momentPrototype__proto.min          = prototypeMin;\n    momentPrototype__proto.parsingFlags = parsingFlags;\n    momentPrototype__proto.set          = getSet;\n    momentPrototype__proto.startOf      = startOf;\n    momentPrototype__proto.subtract     = add_subtract__subtract;\n    momentPrototype__proto.toArray      = toArray;\n    momentPrototype__proto.toDate       = toDate;\n    momentPrototype__proto.toISOString  = moment_format__toISOString;\n    momentPrototype__proto.toJSON       = moment_format__toISOString;\n    momentPrototype__proto.toString     = toString;\n    momentPrototype__proto.unix         = unix;\n    momentPrototype__proto.valueOf      = to_type__valueOf;\n\n    // Year\n    momentPrototype__proto.year       = getSetYear;\n    momentPrototype__proto.isLeapYear = getIsLeapYear;\n\n    // Week Year\n    momentPrototype__proto.weekYear    = getSetWeekYear;\n    momentPrototype__proto.isoWeekYear = getSetISOWeekYear;\n\n    // Quarter\n    momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter;\n\n    // Month\n    momentPrototype__proto.month       = getSetMonth;\n    momentPrototype__proto.daysInMonth = getDaysInMonth;\n\n    // Week\n    momentPrototype__proto.week           = momentPrototype__proto.weeks        = getSetWeek;\n    momentPrototype__proto.isoWeek        = momentPrototype__proto.isoWeeks     = getSetISOWeek;\n    momentPrototype__proto.weeksInYear    = getWeeksInYear;\n    momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear;\n\n    // Day\n    momentPrototype__proto.date       = getSetDayOfMonth;\n    momentPrototype__proto.day        = momentPrototype__proto.days             = getSetDayOfWeek;\n    momentPrototype__proto.weekday    = getSetLocaleDayOfWeek;\n    momentPrototype__proto.isoWeekday = getSetISODayOfWeek;\n    momentPrototype__proto.dayOfYear  = getSetDayOfYear;\n\n    // Hour\n    momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour;\n\n    // Minute\n    momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute;\n\n    // Second\n    momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond;\n\n    // Millisecond\n    momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond;\n\n    // Offset\n    momentPrototype__proto.utcOffset            = getSetOffset;\n    momentPrototype__proto.utc                  = setOffsetToUTC;\n    momentPrototype__proto.local                = setOffsetToLocal;\n    momentPrototype__proto.parseZone            = setOffsetToParsedOffset;\n    momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    momentPrototype__proto.isDST                = isDaylightSavingTime;\n    momentPrototype__proto.isDSTShifted         = isDaylightSavingTimeShifted;\n    momentPrototype__proto.isLocal              = isLocal;\n    momentPrototype__proto.isUtcOffset          = isUtcOffset;\n    momentPrototype__proto.isUtc                = isUtc;\n    momentPrototype__proto.isUTC                = isUtc;\n\n    // Timezone\n    momentPrototype__proto.zoneAbbr = getZoneAbbr;\n    momentPrototype__proto.zoneName = getZoneName;\n\n    // Deprecations\n    momentPrototype__proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n    momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n    momentPrototype__proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n    momentPrototype__proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone);\n\n    var momentPrototype = momentPrototype__proto;\n\n    function moment__createUnix (input) {\n        return local__createLocal(input * 1000);\n    }\n\n    function moment__createInZone () {\n        return local__createLocal.apply(null, arguments).parseZone();\n    }\n\n    var defaultCalendar = {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    };\n\n    function locale_calendar__calendar (key, mom, now) {\n        var output = this._calendar[key];\n        return typeof output === 'function' ? output.call(mom, now) : output;\n    }\n\n    var defaultLongDateFormat = {\n        LTS  : 'h:mm:ss A',\n        LT   : 'h:mm A',\n        L    : 'MM/DD/YYYY',\n        LL   : 'MMMM D, YYYY',\n        LLL  : 'MMMM D, YYYY LT',\n        LLLL : 'dddd, MMMM D, YYYY LT'\n    };\n\n    function longDateFormat (key) {\n        var output = this._longDateFormat[key];\n        if (!output && this._longDateFormat[key.toUpperCase()]) {\n            output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) {\n                return val.slice(1);\n            });\n            this._longDateFormat[key] = output;\n        }\n        return output;\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate () {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d';\n    var defaultOrdinalParse = /\\d{1,2}/;\n\n    function ordinal (number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    function preParsePostFormat (string) {\n        return string;\n    }\n\n    var defaultRelativeTime = {\n        future : 'in %s',\n        past   : '%s ago',\n        s  : 'a few seconds',\n        m  : 'a minute',\n        mm : '%d minutes',\n        h  : 'an hour',\n        hh : '%d hours',\n        d  : 'a day',\n        dd : '%d days',\n        M  : 'a month',\n        MM : '%d months',\n        y  : 'a year',\n        yy : '%d years'\n    };\n\n    function relative__relativeTime (number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return (typeof output === 'function') ?\n            output(number, withoutSuffix, string, isFuture) :\n            output.replace(/%d/i, number);\n    }\n\n    function pastFuture (diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return typeof format === 'function' ? format(output) : format.replace(/%s/i, output);\n    }\n\n    function locale_set__set (config) {\n        var prop, i;\n        for (i in config) {\n            prop = config[i];\n            if (typeof prop === 'function') {\n                this[i] = prop;\n            } else {\n                this['_' + i] = prop;\n            }\n        }\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _ordinalParseLenient.\n        this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\\d{1,2}/).source);\n    }\n\n    var prototype__proto = Locale.prototype;\n\n    prototype__proto._calendar       = defaultCalendar;\n    prototype__proto.calendar        = locale_calendar__calendar;\n    prototype__proto._longDateFormat = defaultLongDateFormat;\n    prototype__proto.longDateFormat  = longDateFormat;\n    prototype__proto._invalidDate    = defaultInvalidDate;\n    prototype__proto.invalidDate     = invalidDate;\n    prototype__proto._ordinal        = defaultOrdinal;\n    prototype__proto.ordinal         = ordinal;\n    prototype__proto._ordinalParse   = defaultOrdinalParse;\n    prototype__proto.preparse        = preParsePostFormat;\n    prototype__proto.postformat      = preParsePostFormat;\n    prototype__proto._relativeTime   = defaultRelativeTime;\n    prototype__proto.relativeTime    = relative__relativeTime;\n    prototype__proto.pastFuture      = pastFuture;\n    prototype__proto.set             = locale_set__set;\n\n    // Month\n    prototype__proto.months       =        localeMonths;\n    prototype__proto._months      = defaultLocaleMonths;\n    prototype__proto.monthsShort  =        localeMonthsShort;\n    prototype__proto._monthsShort = defaultLocaleMonthsShort;\n    prototype__proto.monthsParse  =        localeMonthsParse;\n\n    // Week\n    prototype__proto.week = localeWeek;\n    prototype__proto._week = defaultLocaleWeek;\n    prototype__proto.firstDayOfYear = localeFirstDayOfYear;\n    prototype__proto.firstDayOfWeek = localeFirstDayOfWeek;\n\n    // Day of Week\n    prototype__proto.weekdays       =        localeWeekdays;\n    prototype__proto._weekdays      = defaultLocaleWeekdays;\n    prototype__proto.weekdaysMin    =        localeWeekdaysMin;\n    prototype__proto._weekdaysMin   = defaultLocaleWeekdaysMin;\n    prototype__proto.weekdaysShort  =        localeWeekdaysShort;\n    prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort;\n    prototype__proto.weekdaysParse  =        localeWeekdaysParse;\n\n    // Hours\n    prototype__proto.isPM = localeIsPM;\n    prototype__proto._meridiemParse = defaultLocaleMeridiemParse;\n    prototype__proto.meridiem = localeMeridiem;\n\n    function lists__get (format, index, field, setter) {\n        var locale = locale_locales__getLocale();\n        var utc = create_utc__createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function list (format, index, field, count, setter) {\n        if (typeof format === 'number') {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return lists__get(format, index, field, setter);\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < count; i++) {\n            out[i] = lists__get(format, i, field, setter);\n        }\n        return out;\n    }\n\n    function lists__listMonths (format, index) {\n        return list(format, index, 'months', 12, 'month');\n    }\n\n    function lists__listMonthsShort (format, index) {\n        return list(format, index, 'monthsShort', 12, 'month');\n    }\n\n    function lists__listWeekdays (format, index) {\n        return list(format, index, 'weekdays', 7, 'day');\n    }\n\n    function lists__listWeekdaysShort (format, index) {\n        return list(format, index, 'weekdaysShort', 7, 'day');\n    }\n\n    function lists__listWeekdaysMin (format, index) {\n        return list(format, index, 'weekdaysMin', 7, 'day');\n    }\n\n    locale_locales__getSetGlobalLocale('en', {\n        ordinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (toInt(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    // Side effect imports\n    utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale);\n    utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale);\n\n    var mathAbs = Math.abs;\n\n    function duration_abs__abs () {\n        var data           = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days         = mathAbs(this._days);\n        this._months       = mathAbs(this._months);\n\n        data.milliseconds  = mathAbs(data.milliseconds);\n        data.seconds       = mathAbs(data.seconds);\n        data.minutes       = mathAbs(data.minutes);\n        data.hours         = mathAbs(data.hours);\n        data.months        = mathAbs(data.months);\n        data.years         = mathAbs(data.years);\n\n        return this;\n    }\n\n    function duration_add_subtract__addSubtract (duration, input, value, direction) {\n        var other = create__createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days         += direction * other._days;\n        duration._months       += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function duration_add_subtract__add (input, value) {\n        return duration_add_subtract__addSubtract(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function duration_add_subtract__subtract (input, value) {\n        return duration_add_subtract__addSubtract(this, input, value, -1);\n    }\n\n    function bubble () {\n        var milliseconds = this._milliseconds;\n        var days         = this._days;\n        var months       = this._months;\n        var data         = this._data;\n        var seconds, minutes, hours, years = 0;\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds           = absFloor(milliseconds / 1000);\n        data.seconds      = seconds % 60;\n\n        minutes           = absFloor(seconds / 60);\n        data.minutes      = minutes % 60;\n\n        hours             = absFloor(minutes / 60);\n        data.hours        = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // Accurately convert days to years, assume start from year 0.\n        years = absFloor(daysToYears(days));\n        days -= absFloor(yearsToDays(years));\n\n        // 30 days to a month\n        // TODO (iskren): Use anchor date (like 1st Jan) to compute this.\n        months += absFloor(days / 30);\n        days   %= 30;\n\n        // 12 months -> 1 year\n        years  += absFloor(months / 12);\n        months %= 12;\n\n        data.days   = days;\n        data.months = months;\n        data.years  = years;\n\n        return this;\n    }\n\n    function daysToYears (days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        return days * 400 / 146097;\n    }\n\n    function yearsToDays (years) {\n        // years * 365 + absFloor(years / 4) -\n        //     absFloor(years / 100) + absFloor(years / 400);\n        return years * 146097 / 400;\n    }\n\n    function as (units) {\n        var days;\n        var months;\n        var milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'year') {\n            days   = this._days   + milliseconds / 864e5;\n            months = this._months + daysToYears(days) * 12;\n            return units === 'month' ? months : months / 12;\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(yearsToDays(this._months / 12));\n            switch (units) {\n                case 'week'   : return days / 7     + milliseconds / 6048e5;\n                case 'day'    : return days         + milliseconds / 864e5;\n                case 'hour'   : return days * 24    + milliseconds / 36e5;\n                case 'minute' : return days * 1440  + milliseconds / 6e4;\n                case 'second' : return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n                default: throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function duration_as__valueOf () {\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs (alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms');\n    var asSeconds      = makeAs('s');\n    var asMinutes      = makeAs('m');\n    var asHours        = makeAs('h');\n    var asDays         = makeAs('d');\n    var asWeeks        = makeAs('w');\n    var asMonths       = makeAs('M');\n    var asYears        = makeAs('y');\n\n    function duration_get__get (units) {\n        units = normalizeUnits(units);\n        return this[units + 's']();\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this._data[name];\n        };\n    }\n\n    var duration_get__milliseconds = makeGetter('milliseconds');\n    var seconds      = makeGetter('seconds');\n    var minutes      = makeGetter('minutes');\n    var hours        = makeGetter('hours');\n    var days         = makeGetter('days');\n    var months       = makeGetter('months');\n    var years        = makeGetter('years');\n\n    function weeks () {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round;\n    var thresholds = {\n        s: 45,  // seconds to minute\n        m: 45,  // minutes to hour\n        h: 22,  // hours to day\n        d: 26,  // days to month\n        M: 11   // months to year\n    };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) {\n        var duration = create__createDuration(posNegDuration).abs();\n        var seconds  = round(duration.as('s'));\n        var minutes  = round(duration.as('m'));\n        var hours    = round(duration.as('h'));\n        var days     = round(duration.as('d'));\n        var months   = round(duration.as('M'));\n        var years    = round(duration.as('y'));\n\n        var a = seconds < thresholds.s && ['s', seconds]  ||\n                minutes === 1          && ['m']           ||\n                minutes < thresholds.m && ['mm', minutes] ||\n                hours   === 1          && ['h']           ||\n                hours   < thresholds.h && ['hh', hours]   ||\n                days    === 1          && ['d']           ||\n                days    < thresholds.d && ['dd', days]    ||\n                months  === 1          && ['M']           ||\n                months  < thresholds.M && ['MM', months]  ||\n                years   === 1          && ['y']           || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        return true;\n    }\n\n    function humanize (withSuffix) {\n        var locale = this.localeData();\n        var output = duration_humanize__relativeTime(this, !withSuffix, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var iso_string__abs = Math.abs;\n\n    function iso_string__toISOString() {\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        var Y = iso_string__abs(this.years());\n        var M = iso_string__abs(this.months());\n        var D = iso_string__abs(this.days());\n        var h = iso_string__abs(this.hours());\n        var m = iso_string__abs(this.minutes());\n        var s = iso_string__abs(this.seconds() + this.milliseconds() / 1000);\n        var total = this.asSeconds();\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        return (total < 0 ? '-' : '') +\n            'P' +\n            (Y ? Y + 'Y' : '') +\n            (M ? M + 'M' : '') +\n            (D ? D + 'D' : '') +\n            ((h || m || s) ? 'T' : '') +\n            (h ? h + 'H' : '') +\n            (m ? m + 'M' : '') +\n            (s ? s + 'S' : '');\n    }\n\n    var duration_prototype__proto = Duration.prototype;\n\n    duration_prototype__proto.abs            = duration_abs__abs;\n    duration_prototype__proto.add            = duration_add_subtract__add;\n    duration_prototype__proto.subtract       = duration_add_subtract__subtract;\n    duration_prototype__proto.as             = as;\n    duration_prototype__proto.asMilliseconds = asMilliseconds;\n    duration_prototype__proto.asSeconds      = asSeconds;\n    duration_prototype__proto.asMinutes      = asMinutes;\n    duration_prototype__proto.asHours        = asHours;\n    duration_prototype__proto.asDays         = asDays;\n    duration_prototype__proto.asWeeks        = asWeeks;\n    duration_prototype__proto.asMonths       = asMonths;\n    duration_prototype__proto.asYears        = asYears;\n    duration_prototype__proto.valueOf        = duration_as__valueOf;\n    duration_prototype__proto._bubble        = bubble;\n    duration_prototype__proto.get            = duration_get__get;\n    duration_prototype__proto.milliseconds   = duration_get__milliseconds;\n    duration_prototype__proto.seconds        = seconds;\n    duration_prototype__proto.minutes        = minutes;\n    duration_prototype__proto.hours          = hours;\n    duration_prototype__proto.days           = days;\n    duration_prototype__proto.weeks          = weeks;\n    duration_prototype__proto.months         = months;\n    duration_prototype__proto.years          = years;\n    duration_prototype__proto.humanize       = humanize;\n    duration_prototype__proto.toISOString    = iso_string__toISOString;\n    duration_prototype__proto.toString       = iso_string__toISOString;\n    duration_prototype__proto.toJSON         = iso_string__toISOString;\n    duration_prototype__proto.locale         = locale;\n    duration_prototype__proto.localeData     = localeData;\n\n    // Deprecations\n    duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString);\n    duration_prototype__proto.lang = lang;\n\n    // Side effect imports\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input, 10) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    // Side effect imports\n\n\n    utils_hooks__hooks.version = '2.10.3';\n\n    setHookCallback(local__createLocal);\n\n    utils_hooks__hooks.fn                    = momentPrototype;\n    utils_hooks__hooks.min                   = min;\n    utils_hooks__hooks.max                   = max;\n    utils_hooks__hooks.utc                   = create_utc__createUTC;\n    utils_hooks__hooks.unix                  = moment__createUnix;\n    utils_hooks__hooks.months                = lists__listMonths;\n    utils_hooks__hooks.isDate                = isDate;\n    utils_hooks__hooks.locale                = locale_locales__getSetGlobalLocale;\n    utils_hooks__hooks.invalid               = valid__createInvalid;\n    utils_hooks__hooks.duration              = create__createDuration;\n    utils_hooks__hooks.isMoment              = isMoment;\n    utils_hooks__hooks.weekdays              = lists__listWeekdays;\n    utils_hooks__hooks.parseZone             = moment__createInZone;\n    utils_hooks__hooks.localeData            = locale_locales__getLocale;\n    utils_hooks__hooks.isDuration            = isDuration;\n    utils_hooks__hooks.monthsShort           = lists__listMonthsShort;\n    utils_hooks__hooks.weekdaysMin           = lists__listWeekdaysMin;\n    utils_hooks__hooks.defineLocale          = defineLocale;\n    utils_hooks__hooks.weekdaysShort         = lists__listWeekdaysShort;\n    utils_hooks__hooks.normalizeUnits        = normalizeUnits;\n    utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold;\n\n    var _moment = utils_hooks__hooks;\n\n    return _moment;\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/fa_picker/css/fontawesome-iconpicker.css",
    "content": "/*!\n * Font Awesome Icon Picker\n * https://itsjavi.com/fontawesome-iconpicker/\n *\n * Originally written by (c) 2016 Javi Aguilar\n * Licensed under the MIT License\n * https://github.com/itsjavi/fontawesome-iconpicker/blob/master/LICENSE\n *\n */\n/*\n * Font Awesome Icon Picker\n * https://itsjavi.com/fontawesome-iconpicker/\n *\n * Originally written by (c) 2016 Javi Aguilar\n * Licensed under the MIT License\n * https://github.com/itsjavi/fontawesome-iconpicker/blob/master/LICENSE\n *\n */\n/*\n * Font Awesome Icon Picker\n * https://itsjavi.com/fontawesome-iconpicker/\n *\n * Originally written by (c) 2016 Javi Aguilar\n * Licensed under the MIT License\n * https://github.com/itsjavi/fontawesome-iconpicker/blob/master/LICENSE\n *\n */\n.iconpicker-popover.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: none;\n  max-width: none;\n  padding: 1px;\n  text-align: left;\n  width: 216px;\n  background: #f7f7f7;\n}\n.iconpicker-popover.popover.top,\n.iconpicker-popover.popover.topLeftCorner,\n.iconpicker-popover.popover.topLeft,\n.iconpicker-popover.popover.topRight,\n.iconpicker-popover.popover.topRightCorner {\n  margin-top: -10px;\n}\n.iconpicker-popover.popover.right,\n.iconpicker-popover.popover.rightTop,\n.iconpicker-popover.popover.rightBottom {\n  margin-left: 10px;\n}\n.iconpicker-popover.popover.bottom,\n.iconpicker-popover.popover.bottomRightCorner,\n.iconpicker-popover.popover.bottomRight,\n.iconpicker-popover.popover.bottomLeft,\n.iconpicker-popover.popover.bottomLeftCorner {\n  margin-top: 10px;\n}\n.iconpicker-popover.popover.left,\n.iconpicker-popover.popover.leftBottom,\n.iconpicker-popover.popover.leftTop {\n  margin-left: -10px;\n}\n.iconpicker-popover.popover.inline {\n  margin: 0 0 12px 0;\n  position: relative;\n  display: inline-block;\n  opacity: 1;\n  top: auto;\n  left: auto;\n  bottom: auto;\n  right: auto;\n  max-width: 100%;\n  box-shadow: none;\n  z-index: auto;\n  vertical-align: top;\n}\n.iconpicker-popover.popover.inline > .arrow {\n  display: none;\n}\n.dropdown-menu .iconpicker-popover.inline {\n  margin: 0;\n  border: none;\n}\n.dropdown-menu.iconpicker-container {\n  padding: 0;\n}\n.iconpicker-popover.popover .popover-title {\n  padding: 12px;\n  font-size: 13px;\n  line-height: 15px;\n  border-bottom: 1px solid #ebebeb;\n  background-color: #f7f7f7;\n}\n.iconpicker-popover.popover .popover-title input[type=search].iconpicker-search {\n  margin: 0 0 2px 0;\n}\n.iconpicker-popover.popover .popover-title-text ~ input[type=search].iconpicker-search {\n  margin-top: 12px;\n}\n.iconpicker-popover.popover .popover-content {\n  padding: 0px;\n  text-align: center;\n}\n.iconpicker-popover .popover-footer {\n  float: none;\n  clear: both;\n  padding: 12px;\n  text-align: right;\n  margin: 0;\n  border-top: 1px solid #ebebeb;\n  background-color: #f7f7f7;\n}\n.iconpicker-popover .popover-footer:before,\n.iconpicker-popover .popover-footer:after {\n  content: \" \";\n  display: table;\n}\n.iconpicker-popover .popover-footer:after {\n  clear: both;\n}\n.iconpicker-popover .popover-footer .iconpicker-btn {\n  margin-left: 10px;\n}\n.iconpicker-popover .popover-footer input[type=search].iconpicker-search {\n  /*width:auto;\n        float:left;*/\n  margin-bottom: 12px;\n}\n.iconpicker-popover.popover > .arrow,\n.iconpicker-popover.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.iconpicker-popover.popover > .arrow {\n  border-width: 11px;\n}\n.iconpicker-popover.popover > .arrow:after {\n  border-width: 10px;\n  content: \"\";\n}\n.iconpicker-popover.popover.top > .arrow,\n.iconpicker-popover.popover.topLeft > .arrow,\n.iconpicker-popover.popover.topRight > .arrow {\n  left: 50%;\n  margin-left: -11px;\n  border-bottom-width: 0;\n  border-top-color: #999999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  bottom: -11px;\n}\n.iconpicker-popover.popover.top > .arrow:after,\n.iconpicker-popover.popover.topLeft > .arrow:after,\n.iconpicker-popover.popover.topRight > .arrow:after {\n  content: \" \";\n  bottom: 1px;\n  margin-left: -10px;\n  border-bottom-width: 0;\n  border-top-color: #ffffff;\n}\n.iconpicker-popover.popover.topLeft > .arrow {\n  left: 8px;\n  margin-left: 0;\n}\n.iconpicker-popover.popover.topRight > .arrow {\n  left: auto;\n  right: 8px;\n  margin-left: 0;\n}\n.iconpicker-popover.popover.right > .arrow,\n.iconpicker-popover.popover.rightTop > .arrow,\n.iconpicker-popover.popover.rightBottom > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-left-width: 0;\n  border-right-color: #999999;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n.iconpicker-popover.popover.right > .arrow:after,\n.iconpicker-popover.popover.rightTop > .arrow:after,\n.iconpicker-popover.popover.rightBottom > .arrow:after {\n  content: \" \";\n  left: 1px;\n  bottom: -10px;\n  border-left-width: 0;\n  border-right-color: #ffffff;\n}\n.iconpicker-popover.popover.rightTop > .arrow {\n  top: auto;\n  bottom: 8px;\n  margin-top: 0;\n}\n.iconpicker-popover.popover.rightBottom > .arrow {\n  top: 8px;\n  margin-top: 0;\n}\n.iconpicker-popover.popover.bottom > .arrow,\n.iconpicker-popover.popover.bottomRight > .arrow,\n.iconpicker-popover.popover.bottomLeft > .arrow {\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n  top: -11px;\n}\n.iconpicker-popover.popover.bottom > .arrow:after,\n.iconpicker-popover.popover.bottomRight > .arrow:after,\n.iconpicker-popover.popover.bottomLeft > .arrow:after {\n  content: \" \";\n  top: 1px;\n  margin-left: -10px;\n  border-top-width: 0;\n  border-bottom-color: #ffffff;\n}\n.iconpicker-popover.popover.bottomLeft > .arrow {\n  left: 8px;\n  margin-left: 0;\n}\n.iconpicker-popover.popover.bottomRight > .arrow {\n  left: auto;\n  right: 8px;\n  margin-left: 0;\n}\n.iconpicker-popover.popover.left > .arrow,\n.iconpicker-popover.popover.leftBottom > .arrow,\n.iconpicker-popover.popover.leftTop > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999999;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n.iconpicker-popover.popover.left > .arrow:after,\n.iconpicker-popover.popover.leftBottom > .arrow:after,\n.iconpicker-popover.popover.leftTop > .arrow:after {\n  content: \" \";\n  right: 1px;\n  border-right-width: 0;\n  border-left-color: #ffffff;\n  bottom: -10px;\n}\n.iconpicker-popover.popover.leftBottom > .arrow {\n  top: 8px;\n  margin-top: 0;\n}\n.iconpicker-popover.popover.leftTop > .arrow {\n  top: auto;\n  bottom: 8px;\n  margin-top: 0;\n}\n.iconpicker {\n  position: relative;\n  text-align: left;\n  text-shadow: none;\n  line-height: 0;\n  display: block;\n  margin: 0;\n  overflow: hidden;\n}\n.iconpicker * {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  position: relative;\n}\n.iconpicker:before,\n.iconpicker:after {\n  content: \" \";\n  display: table;\n}\n.iconpicker:after {\n  clear: both;\n}\n.iconpicker .iconpicker-items {\n  position: relative;\n  clear: both;\n  float: none;\n  padding: 12px 0 0 12px;\n  background: #fff;\n  margin: 0;\n  overflow: hidden;\n  overflow-y: auto;\n  min-height: 49px;\n  max-height: 246px;\n}\n.iconpicker .iconpicker-items:before,\n.iconpicker .iconpicker-items:after {\n  content: \" \";\n  display: table;\n}\n.iconpicker .iconpicker-items:after {\n  clear: both;\n}\n.iconpicker .iconpicker-item {\n  float: left;\n  width: 14px;\n  height: 14px;\n  padding: 12px;\n  margin: 0 12px 12px 0;\n  text-align: center;\n  cursor: pointer;\n  border-radius: 3px;\n  font-size: 14px;\n  box-shadow: 0 0 0 1px #dddddd;\n  color: inherit;\n  /*&:nth-child(4n+4) {\n            margin-right: 0;\n        }\n        &:nth-last-child(-n+4) {\n            margin-bottom: 0;\n        }*/\n}\n.iconpicker .iconpicker-item:hover:not(.iconpicker-selected) {\n  background-color: #eeeeee;\n}\n.iconpicker .iconpicker-item.iconpicker-selected {\n  box-shadow: none;\n  color: #fff;\n}\n.iconpicker-component {\n  cursor: pointer;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/fa_picker/js/fontawesome-iconpicker.js",
    "content": "(function(a, b) {\n    a.ui = a.ui || {};\n    var c, d = Math.max, e = Math.abs, f = Math.round, g = /left|center|right/, h = /top|center|bottom/, i = /[\\+\\-]\\d+(\\.[\\d]+)?%?/, j = /^\\w+/, k = /%$/, l = a.fn.pos;\n    function m(a, b, c) {\n        return [ parseFloat(a[0]) * (k.test(a[0]) ? b / 100 : 1), parseFloat(a[1]) * (k.test(a[1]) ? c / 100 : 1) ];\n    }\n    function n(b, c) {\n        return parseInt(a.css(b, c), 10) || 0;\n    }\n    function o(b) {\n        var c = b[0];\n        if (c.nodeType === 9) {\n            return {\n                width: b.width(),\n                height: b.height(),\n                offset: {\n                    top: 0,\n                    left: 0\n                }\n            };\n        }\n        if (a.isWindow(c)) {\n            return {\n                width: b.width(),\n                height: b.height(),\n                offset: {\n                    top: b.scrollTop(),\n                    left: b.scrollLeft()\n                }\n            };\n        }\n        if (c.preventDefault) {\n            return {\n                width: 0,\n                height: 0,\n                offset: {\n                    top: c.pageY,\n                    left: c.pageX\n                }\n            };\n        }\n        return {\n            width: b.outerWidth(),\n            height: b.outerHeight(),\n            offset: b.offset()\n        };\n    }\n    a.pos = {\n        scrollbarWidth: function() {\n            if (c !== b) {\n                return c;\n            }\n            var d, e, f = a(\"<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>\"), g = f.children()[0];\n            a(\"body\").append(f);\n            d = g.offsetWidth;\n            f.css(\"overflow\", \"scroll\");\n            e = g.offsetWidth;\n            if (d === e) {\n                e = f[0].clientWidth;\n            }\n            f.remove();\n            return c = d - e;\n        },\n        getScrollInfo: function(b) {\n            var c = b.isWindow || b.isDocument ? \"\" : b.element.css(\"overflow-x\"), d = b.isWindow || b.isDocument ? \"\" : b.element.css(\"overflow-y\"), e = c === \"scroll\" || c === \"auto\" && b.width < b.element[0].scrollWidth, f = d === \"scroll\" || d === \"auto\" && b.height < b.element[0].scrollHeight;\n            return {\n                width: f ? a.pos.scrollbarWidth() : 0,\n                height: e ? a.pos.scrollbarWidth() : 0\n            };\n        },\n        getWithinInfo: function(b) {\n            var c = a(b || window), d = a.isWindow(c[0]), e = !!c[0] && c[0].nodeType === 9;\n            return {\n                element: c,\n                isWindow: d,\n                isDocument: e,\n                offset: c.offset() || {\n                    left: 0,\n                    top: 0\n                },\n                scrollLeft: c.scrollLeft(),\n                scrollTop: c.scrollTop(),\n                width: d ? c.width() : c.outerWidth(),\n                height: d ? c.height() : c.outerHeight()\n            };\n        }\n    };\n    a.fn.pos = function(b) {\n        if (!b || !b.of) {\n            return l.apply(this, arguments);\n        }\n        b = a.extend({}, b);\n        var c, k, p, q, r, s, t = a(b.of), u = a.pos.getWithinInfo(b.within), v = a.pos.getScrollInfo(u), w = (b.collision || \"flip\").split(\" \"), x = {};\n        s = o(t);\n        if (t[0].preventDefault) {\n            b.at = \"left top\";\n        }\n        k = s.width;\n        p = s.height;\n        q = s.offset;\n        r = a.extend({}, q);\n        a.each([ \"my\", \"at\" ], function() {\n            var a = (b[this] || \"\").split(\" \"), c, d;\n            if (a.length === 1) {\n                a = g.test(a[0]) ? a.concat([ \"center\" ]) : h.test(a[0]) ? [ \"center\" ].concat(a) : [ \"center\", \"center\" ];\n            }\n            a[0] = g.test(a[0]) ? a[0] : \"center\";\n            a[1] = h.test(a[1]) ? a[1] : \"center\";\n            c = i.exec(a[0]);\n            d = i.exec(a[1]);\n            x[this] = [ c ? c[0] : 0, d ? d[0] : 0 ];\n            b[this] = [ j.exec(a[0])[0], j.exec(a[1])[0] ];\n        });\n        if (w.length === 1) {\n            w[1] = w[0];\n        }\n        if (b.at[0] === \"right\") {\n            r.left += k;\n        } else if (b.at[0] === \"center\") {\n            r.left += k / 2;\n        }\n        if (b.at[1] === \"bottom\") {\n            r.top += p;\n        } else if (b.at[1] === \"center\") {\n            r.top += p / 2;\n        }\n        c = m(x.at, k, p);\n        r.left += c[0];\n        r.top += c[1];\n        return this.each(function() {\n            var g, h, i = a(this), j = i.outerWidth(), l = i.outerHeight(), o = n(this, \"marginLeft\"), s = n(this, \"marginTop\"), y = j + o + n(this, \"marginRight\") + v.width, z = l + s + n(this, \"marginBottom\") + v.height, A = a.extend({}, r), B = m(x.my, i.outerWidth(), i.outerHeight());\n            if (b.my[0] === \"right\") {\n                A.left -= j;\n            } else if (b.my[0] === \"center\") {\n                A.left -= j / 2;\n            }\n            if (b.my[1] === \"bottom\") {\n                A.top -= l;\n            } else if (b.my[1] === \"center\") {\n                A.top -= l / 2;\n            }\n            A.left += B[0];\n            A.top += B[1];\n            if (!a.support.offsetFractions) {\n                A.left = f(A.left);\n                A.top = f(A.top);\n            }\n            g = {\n                marginLeft: o,\n                marginTop: s\n            };\n            a.each([ \"left\", \"top\" ], function(d, e) {\n                if (a.ui.pos[w[d]]) {\n                    a.ui.pos[w[d]][e](A, {\n                        targetWidth: k,\n                        targetHeight: p,\n                        elemWidth: j,\n                        elemHeight: l,\n                        collisionPosition: g,\n                        collisionWidth: y,\n                        collisionHeight: z,\n                        offset: [ c[0] + B[0], c[1] + B[1] ],\n                        my: b.my,\n                        at: b.at,\n                        within: u,\n                        elem: i\n                    });\n                }\n            });\n            if (b.using) {\n                h = function(a) {\n                    var c = q.left - A.left, f = c + k - j, g = q.top - A.top, h = g + p - l, m = {\n                        target: {\n                            element: t,\n                            left: q.left,\n                            top: q.top,\n                            width: k,\n                            height: p\n                        },\n                        element: {\n                            element: i,\n                            left: A.left,\n                            top: A.top,\n                            width: j,\n                            height: l\n                        },\n                        horizontal: f < 0 ? \"left\" : c > 0 ? \"right\" : \"center\",\n                        vertical: h < 0 ? \"top\" : g > 0 ? \"bottom\" : \"middle\"\n                    };\n                    if (k < j && e(c + f) < k) {\n                        m.horizontal = \"center\";\n                    }\n                    if (p < l && e(g + h) < p) {\n                        m.vertical = \"middle\";\n                    }\n                    if (d(e(c), e(f)) > d(e(g), e(h))) {\n                        m.important = \"horizontal\";\n                    } else {\n                        m.important = \"vertical\";\n                    }\n                    b.using.call(this, a, m);\n                };\n            }\n            i.offset(a.extend(A, {\n                using: h\n            }));\n        });\n    };\n    a.ui.pos = {\n        _trigger: function(a, b, c, d) {\n            if (b.elem) {\n                b.elem.trigger({\n                    type: c,\n                    position: a,\n                    positionData: b,\n                    triggered: d\n                });\n            }\n        },\n        fit: {\n            left: function(b, c) {\n                a.ui.pos._trigger(b, c, \"posCollide\", \"fitLeft\");\n                var e = c.within, f = e.isWindow ? e.scrollLeft : e.offset.left, g = e.width, h = b.left - c.collisionPosition.marginLeft, i = f - h, j = h + c.collisionWidth - g - f, k;\n                if (c.collisionWidth > g) {\n                    if (i > 0 && j <= 0) {\n                        k = b.left + i + c.collisionWidth - g - f;\n                        b.left += i - k;\n                    } else if (j > 0 && i <= 0) {\n                        b.left = f;\n                    } else {\n                        if (i > j) {\n                            b.left = f + g - c.collisionWidth;\n                        } else {\n                            b.left = f;\n                        }\n                    }\n                } else if (i > 0) {\n                    b.left += i;\n                } else if (j > 0) {\n                    b.left -= j;\n                } else {\n                    b.left = d(b.left - h, b.left);\n                }\n                a.ui.pos._trigger(b, c, \"posCollided\", \"fitLeft\");\n            },\n            top: function(b, c) {\n                a.ui.pos._trigger(b, c, \"posCollide\", \"fitTop\");\n                var e = c.within, f = e.isWindow ? e.scrollTop : e.offset.top, g = c.within.height, h = b.top - c.collisionPosition.marginTop, i = f - h, j = h + c.collisionHeight - g - f, k;\n                if (c.collisionHeight > g) {\n                    if (i > 0 && j <= 0) {\n                        k = b.top + i + c.collisionHeight - g - f;\n                        b.top += i - k;\n                    } else if (j > 0 && i <= 0) {\n                        b.top = f;\n                    } else {\n                        if (i > j) {\n                            b.top = f + g - c.collisionHeight;\n                        } else {\n                            b.top = f;\n                        }\n                    }\n                } else if (i > 0) {\n                    b.top += i;\n                } else if (j > 0) {\n                    b.top -= j;\n                } else {\n                    b.top = d(b.top - h, b.top);\n                }\n                a.ui.pos._trigger(b, c, \"posCollided\", \"fitTop\");\n            }\n        },\n        flip: {\n            left: function(b, c) {\n                a.ui.pos._trigger(b, c, \"posCollide\", \"flipLeft\");\n                var d = c.within, f = d.offset.left + d.scrollLeft, g = d.width, h = d.isWindow ? d.scrollLeft : d.offset.left, i = b.left - c.collisionPosition.marginLeft, j = i - h, k = i + c.collisionWidth - g - h, l = c.my[0] === \"left\" ? -c.elemWidth : c.my[0] === \"right\" ? c.elemWidth : 0, m = c.at[0] === \"left\" ? c.targetWidth : c.at[0] === \"right\" ? -c.targetWidth : 0, n = -2 * c.offset[0], o, p;\n                if (j < 0) {\n                    o = b.left + l + m + n + c.collisionWidth - g - f;\n                    if (o < 0 || o < e(j)) {\n                        b.left += l + m + n;\n                    }\n                } else if (k > 0) {\n                    p = b.left - c.collisionPosition.marginLeft + l + m + n - h;\n                    if (p > 0 || e(p) < k) {\n                        b.left += l + m + n;\n                    }\n                }\n                a.ui.pos._trigger(b, c, \"posCollided\", \"flipLeft\");\n            },\n            top: function(b, c) {\n                a.ui.pos._trigger(b, c, \"posCollide\", \"flipTop\");\n                var d = c.within, f = d.offset.top + d.scrollTop, g = d.height, h = d.isWindow ? d.scrollTop : d.offset.top, i = b.top - c.collisionPosition.marginTop, j = i - h, k = i + c.collisionHeight - g - h, l = c.my[1] === \"top\", m = l ? -c.elemHeight : c.my[1] === \"bottom\" ? c.elemHeight : 0, n = c.at[1] === \"top\" ? c.targetHeight : c.at[1] === \"bottom\" ? -c.targetHeight : 0, o = -2 * c.offset[1], p, q;\n                if (j < 0) {\n                    q = b.top + m + n + o + c.collisionHeight - g - f;\n                    if (b.top + m + n + o > j && (q < 0 || q < e(j))) {\n                        b.top += m + n + o;\n                    }\n                } else if (k > 0) {\n                    p = b.top - c.collisionPosition.marginTop + m + n + o - h;\n                    if (b.top + m + n + o > k && (p > 0 || e(p) < k)) {\n                        b.top += m + n + o;\n                    }\n                }\n                a.ui.pos._trigger(b, c, \"posCollided\", \"flipTop\");\n            }\n        },\n        flipfit: {\n            left: function() {\n                a.ui.pos.flip.left.apply(this, arguments);\n                a.ui.pos.fit.left.apply(this, arguments);\n            },\n            top: function() {\n                a.ui.pos.flip.top.apply(this, arguments);\n                a.ui.pos.fit.top.apply(this, arguments);\n            }\n        }\n    };\n    (function() {\n        var b, c, d, e, f, g = document.getElementsByTagName(\"body\")[0], h = document.createElement(\"div\");\n        b = document.createElement(g ? \"div\" : \"body\");\n        d = {\n            visibility: \"hidden\",\n            width: 0,\n            height: 0,\n            border: 0,\n            margin: 0,\n            background: \"none\"\n        };\n        if (g) {\n            a.extend(d, {\n                position: \"absolute\",\n                left: \"-1000px\",\n                top: \"-1000px\"\n            });\n        }\n        for (f in d) {\n            b.style[f] = d[f];\n        }\n        b.appendChild(h);\n        c = g || document.documentElement;\n        c.insertBefore(b, c.firstChild);\n        h.style.cssText = \"position: absolute; left: 10.7432222px;\";\n        e = a(h).offset().left;\n        a.support.offsetFractions = e > 10 && e < 11;\n        b.innerHTML = \"\";\n        c.removeChild(b);\n    })();\n})(jQuery);\n\n(function(a) {\n    \"use strict\";\n    if (typeof define === \"function\" && define.amd) {\n        define([ \"jquery\" ], a);\n    } else if (window.jQuery && !window.jQuery.fn.iconpicker) {\n        a(window.jQuery);\n    }\n})(function(a) {\n    \"use strict\";\n    var b = {\n        isEmpty: function(a) {\n            return a === false || a === \"\" || a === null || a === undefined;\n        },\n        isEmptyObject: function(a) {\n            return this.isEmpty(a) === true || a.length === 0;\n        },\n        isElement: function(b) {\n            return a(b).length > 0;\n        },\n        isString: function(a) {\n            return typeof a === \"string\" || a instanceof String;\n        },\n        isArray: function(b) {\n            return a.isArray(b);\n        },\n        inArray: function(b, c) {\n            return a.inArray(b, c) !== -1;\n        },\n        throwError: function(a) {\n            throw \"Font Awesome Icon Picker Exception: \" + a;\n        }\n    };\n    var c = function(d, e) {\n        this._id = c._idCounter++;\n        this.element = a(d).addClass(\"iconpicker-element\");\n        this._trigger(\"iconpickerCreate\");\n        this.options = a.extend({}, c.defaultOptions, this.element.data(), e);\n        this.options.templates = a.extend({}, c.defaultOptions.templates, this.options.templates);\n        this.options.originalPlacement = this.options.placement;\n        this.container = b.isElement(this.options.container) ? a(this.options.container) : false;\n        if (this.container === false) {\n            if (this.element.is(\".dropdown-toggle\")) {\n                this.container = a(\"~ .dropdown-menu:first\", this.element);\n            } else {\n                this.container = this.element.is(\"input,textarea,button,.btn\") ? this.element.parent() : this.element;\n            }\n        }\n        this.container.addClass(\"iconpicker-container\");\n        if (this.isDropdownMenu()) {\n            this.options.templates.search = false;\n            this.options.templates.buttons = false;\n            this.options.placement = \"inline\";\n        }\n        this.input = this.element.is(\"input,textarea\") ? this.element.addClass(\"iconpicker-input\") : false;\n        if (this.input === false) {\n            this.input = this.container.find(this.options.input);\n            if (!this.input.is(\"input,textarea\")) {\n                this.input = false;\n            }\n        }\n        this.component = this.isDropdownMenu() ? this.container.parent().find(this.options.component) : this.container.find(this.options.component);\n        if (this.component.length === 0) {\n            this.component = false;\n        } else {\n            this.component.find(\"i\").addClass(\"iconpicker-component\");\n        }\n        this._createPopover();\n        this._createIconpicker();\n        if (this.getAcceptButton().length === 0) {\n            this.options.mustAccept = false;\n        }\n        if (this.isInputGroup()) {\n            this.container.parent().append(this.popover);\n        } else {\n            this.container.append(this.popover);\n        }\n        this._bindElementEvents();\n        this._bindWindowEvents();\n        this.update(this.options.selected);\n        if (this.isInline()) {\n            this.show();\n        }\n        this._trigger(\"iconpickerCreated\");\n    };\n    c._idCounter = 0;\n    c.defaultOptions = {\n        title: false,\n        selected: false,\n        defaultValue: false,\n        placement: \"bottom\",\n        collision: \"none\",\n        animation: true,\n        hideOnSelect: false,\n        showFooter: false,\n        searchInFooter: false,\n        mustAccept: false,\n        selectedCustomClass: \"bg-primary\",\n        icons: [],\n        fullClassFormatter: function(a) {\n            return \"fa \" + a;\n        },\n        input: \"input,.iconpicker-input\",\n        inputSearch: false,\n        container: false,\n        component: \".input-group-addon,.iconpicker-component\",\n        templates: {\n            popover: '<div class=\"iconpicker-popover popover\"><div class=\"arrow\"></div>' + '<div class=\"popover-title\"></div><div class=\"popover-content\"></div></div>',\n            footer: '<div class=\"popover-footer\"></div>',\n            buttons: '<button class=\"iconpicker-btn iconpicker-btn-cancel btn btn-default btn-sm\">Cancel</button>' + ' <button class=\"iconpicker-btn iconpicker-btn-accept btn btn-primary btn-sm\">Accept</button>',\n            search: '<input type=\"search\" class=\"form-control iconpicker-search\" placeholder=\"Type to filter\" />',\n            iconpicker: '<div class=\"iconpicker\"><div class=\"iconpicker-items\"></div></div>',\n            iconpickerItem: '<a role=\"button\" href=\"#\" class=\"iconpicker-item\"><i></i></a>'\n        }\n    };\n    c.batch = function(b, c) {\n        var d = Array.prototype.slice.call(arguments, 2);\n        return a(b).each(function() {\n            var b = a(this).data(\"iconpicker\");\n            if (!!b) {\n                b[c].apply(b, d);\n            }\n        });\n    };\n    c.prototype = {\n        constructor: c,\n        options: {},\n        _id: 0,\n        _trigger: function(b, c) {\n            c = c || {};\n            this.element.trigger(a.extend({\n                type: b,\n                iconpickerInstance: this\n            }, c));\n        },\n        _createPopover: function() {\n            this.popover = a(this.options.templates.popover);\n            var c = this.popover.find(\".popover-title\");\n            if (!!this.options.title) {\n                c.append(a('<div class=\"popover-title-text\">' + this.options.title + \"</div>\"));\n            }\n            if (this.hasSeparatedSearchInput() && !this.options.searchInFooter) {\n                c.append(this.options.templates.search);\n            } else if (!this.options.title) {\n                c.remove();\n            }\n            if (this.options.showFooter && !b.isEmpty(this.options.templates.footer)) {\n                var d = a(this.options.templates.footer);\n                if (this.hasSeparatedSearchInput() && this.options.searchInFooter) {\n                    d.append(a(this.options.templates.search));\n                }\n                if (!b.isEmpty(this.options.templates.buttons)) {\n                    d.append(a(this.options.templates.buttons));\n                }\n                this.popover.append(d);\n            }\n            if (this.options.animation === true) {\n                this.popover.addClass(\"fade\");\n            }\n            return this.popover;\n        },\n        _createIconpicker: function() {\n            var b = this;\n            this.iconpicker = a(this.options.templates.iconpicker);\n            var c = function(c) {\n                var d = a(this);\n                if (d.is(\"i\")) {\n                    d = d.parent();\n                }\n                b._trigger(\"iconpickerSelect\", {\n                    iconpickerItem: d,\n                    iconpickerValue: b.iconpickerValue\n                });\n                if (b.options.mustAccept === false) {\n                    b.update(d.data(\"iconpickerValue\"));\n                    b._trigger(\"iconpickerSelected\", {\n                        iconpickerItem: this,\n                        iconpickerValue: b.iconpickerValue\n                    });\n                } else {\n                    b.update(d.data(\"iconpickerValue\"), true);\n                }\n                if (b.options.hideOnSelect && b.options.mustAccept === false) {\n                    b.hide();\n                }\n                c.preventDefault();\n                return false;\n            };\n            for (var d in this.options.icons) {\n                var e = a(this.options.templates.iconpickerItem);\n                e.find(\"i\").addClass(this.options.fullClassFormatter(this.options.icons[d]));\n                e.data(\"iconpickerValue\", this.options.icons[d]).on(\"click.iconpicker\", c);\n                this.iconpicker.find(\".iconpicker-items\").append(e.attr(\"title\", \".\" + this.options.icons[d]));\n            }\n            this.popover.find(\".popover-content\").append(this.iconpicker);\n            return this.iconpicker;\n        },\n        _isEventInsideIconpicker: function(b) {\n            var c = a(b.target);\n            if ((!c.hasClass(\"iconpicker-element\") || c.hasClass(\"iconpicker-element\") && !c.is(this.element)) && c.parents(\".iconpicker-popover\").length === 0) {\n                return false;\n            }\n            return true;\n        },\n        _bindElementEvents: function() {\n            var c = this;\n            this.getSearchInput().on(\"keyup.iconpicker\", function() {\n                c.filter(a(this).val().toLowerCase());\n            });\n            this.getAcceptButton().on(\"click.iconpicker\", function() {\n                var a = c.iconpicker.find(\".iconpicker-selected\").get(0);\n                c.update(c.iconpickerValue);\n                c._trigger(\"iconpickerSelected\", {\n                    iconpickerItem: a,\n                    iconpickerValue: c.iconpickerValue\n                });\n                if (!c.isInline()) {\n                    c.hide();\n                }\n            });\n            this.getCancelButton().on(\"click.iconpicker\", function() {\n                if (!c.isInline()) {\n                    c.hide();\n                }\n            });\n            this.element.on(\"focus.iconpicker\", function(a) {\n                c.show();\n                a.stopPropagation();\n            });\n            if (this.hasComponent()) {\n                this.component.on(\"click.iconpicker\", function() {\n                    c.toggle();\n                });\n            }\n            if (this.hasInput()) {\n                this.input.on(\"keyup.iconpicker\", function(d) {\n                    if (!b.inArray(d.keyCode, [ 38, 40, 37, 39, 16, 17, 18, 9, 8, 91, 93, 20, 46, 186, 190, 46, 78, 188, 44, 86 ])) {\n                        c.update();\n                    } else {\n                        c._updateFormGroupStatus(c.getValid(this.value) !== false);\n                    }\n                    if (c.options.inputSearch === true) {\n                        c.filter(a(this).val().toLowerCase());\n                    }\n                });\n            }\n        },\n        _bindWindowEvents: function() {\n            var b = a(window.document);\n            var c = this;\n            var d = \".iconpicker.inst\" + this._id;\n            a(window).on(\"resize.iconpicker\" + d + \" orientationchange.iconpicker\" + d, function(a) {\n                if (c.popover.hasClass(\"in\")) {\n                    c.updatePlacement();\n                }\n            });\n            if (!c.isInline()) {\n                b.on(\"mouseup\" + d, function(a) {\n                    if (!c._isEventInsideIconpicker(a) && !c.isInline()) {\n                        c.hide();\n                    }\n                    a.stopPropagation();\n                    a.preventDefault();\n                    return false;\n                });\n            }\n            return false;\n        },\n        _unbindElementEvents: function() {\n            this.popover.off(\".iconpicker\");\n            this.element.off(\".iconpicker\");\n            if (this.hasInput()) {\n                this.input.off(\".iconpicker\");\n            }\n            if (this.hasComponent()) {\n                this.component.off(\".iconpicker\");\n            }\n            if (this.hasContainer()) {\n                this.container.off(\".iconpicker\");\n            }\n        },\n        _unbindWindowEvents: function() {\n            a(window).off(\".iconpicker.inst\" + this._id);\n            a(window.document).off(\".iconpicker.inst\" + this._id);\n        },\n        updatePlacement: function(b, c) {\n            b = b || this.options.placement;\n            this.options.placement = b;\n            c = c || this.options.collision;\n            c = c === true ? \"flip\" : c;\n            var d = {\n                at: \"right bottom\",\n                my: \"right top\",\n                of: this.hasInput() && !this.isInputGroup() ? this.input : this.container,\n                collision: c === true ? \"flip\" : c,\n                within: window\n            };\n            this.popover.removeClass(\"inline topLeftCorner topLeft top topRight topRightCorner \" + \"rightTop right rightBottom bottomRight bottomRightCorner \" + \"bottom bottomLeft bottomLeftCorner leftBottom left leftTop\");\n            if (typeof b === \"object\") {\n                return this.popover.pos(a.extend({}, d, b));\n            }\n            switch (b) {\n              case \"inline\":\n                {\n                    d = false;\n                }\n                break;\n\n              case \"topLeftCorner\":\n                {\n                    d.my = \"right bottom\";\n                    d.at = \"left top\";\n                }\n                break;\n\n              case \"topLeft\":\n                {\n                    d.my = \"left bottom\";\n                    d.at = \"left top\";\n                }\n                break;\n\n              case \"top\":\n                {\n                    d.my = \"center bottom\";\n                    d.at = \"center top\";\n                }\n                break;\n\n              case \"topRight\":\n                {\n                    d.my = \"right bottom\";\n                    d.at = \"right top\";\n                }\n                break;\n\n              case \"topRightCorner\":\n                {\n                    d.my = \"left bottom\";\n                    d.at = \"right top\";\n                }\n                break;\n\n              case \"rightTop\":\n                {\n                    d.my = \"left bottom\";\n                    d.at = \"right center\";\n                }\n                break;\n\n              case \"right\":\n                {\n                    d.my = \"left center\";\n                    d.at = \"right center\";\n                }\n                break;\n\n              case \"rightBottom\":\n                {\n                    d.my = \"left top\";\n                    d.at = \"right center\";\n                }\n                break;\n\n              case \"bottomRightCorner\":\n                {\n                    d.my = \"left top\";\n                    d.at = \"right bottom\";\n                }\n                break;\n\n              case \"bottomRight\":\n                {\n                    d.my = \"right top\";\n                    d.at = \"right bottom\";\n                }\n                break;\n\n              case \"bottom\":\n                {\n                    d.my = \"center top\";\n                    d.at = \"center bottom\";\n                }\n                break;\n\n              case \"bottomLeft\":\n                {\n                    d.my = \"left top\";\n                    d.at = \"left bottom\";\n                }\n                break;\n\n              case \"bottomLeftCorner\":\n                {\n                    d.my = \"right top\";\n                    d.at = \"left bottom\";\n                }\n                break;\n\n              case \"leftBottom\":\n                {\n                    d.my = \"right top\";\n                    d.at = \"left center\";\n                }\n                break;\n\n              case \"left\":\n                {\n                    d.my = \"right center\";\n                    d.at = \"left center\";\n                }\n                break;\n\n              case \"leftTop\":\n                {\n                    d.my = \"right bottom\";\n                    d.at = \"left center\";\n                }\n                break;\n\n              default:\n                {\n                    return false;\n                }\n                break;\n            }\n            this.popover.css({\n                display: this.options.placement === \"inline\" ? \"\" : \"block\"\n            });\n            if (d !== false) {\n                this.popover.pos(d).css(\"maxWidth\", a(window).width() - this.container.offset().left - 5);\n            } else {\n                this.popover.css({\n                    top: \"auto\",\n                    right: \"auto\",\n                    bottom: \"auto\",\n                    left: \"auto\",\n                    maxWidth: \"none\"\n                });\n            }\n            this.popover.addClass(this.options.placement);\n            return true;\n        },\n        _updateComponents: function() {\n            this.iconpicker.find(\".iconpicker-item.iconpicker-selected\").removeClass(\"iconpicker-selected \" + this.options.selectedCustomClass);\n            if (this.iconpickerValue) {\n                this.iconpicker.find(\".\" + this.options.fullClassFormatter(this.iconpickerValue).replace(/ /g, \".\")).parent().addClass(\"iconpicker-selected \" + this.options.selectedCustomClass);\n            }\n            if (this.hasComponent()) {\n                var a = this.component.find(\"i\");\n                if (a.length > 0) {\n                    a.attr(\"class\", this.options.fullClassFormatter(this.iconpickerValue));\n                } else {\n                    this.component.html(this.getHtml());\n                }\n            }\n        },\n        _updateFormGroupStatus: function(a) {\n            if (this.hasInput()) {\n                if (a !== false) {\n                    this.input.parents(\".form-group:first\").removeClass(\"has-error\");\n                } else {\n                    this.input.parents(\".form-group:first\").addClass(\"has-error\");\n                }\n                return true;\n            }\n            return false;\n        },\n        getValid: function(c) {\n            if (!b.isString(c)) {\n                c = \"\";\n            }\n            var d = c === \"\";\n            c = a.trim(c);\n            if (b.inArray(c, this.options.icons) || d) {\n                return c;\n            }\n            return false;\n        },\n        setValue: function(a) {\n            var b = this.getValid(a);\n            if (b !== false) {\n                this.iconpickerValue = b;\n                this._trigger(\"iconpickerSetValue\", {\n                    iconpickerValue: b\n                });\n                return this.iconpickerValue;\n            } else {\n                this._trigger(\"iconpickerInvalid\", {\n                    iconpickerValue: a\n                });\n                return false;\n            }\n        },\n        getHtml: function() {\n            return '<i class=\"' + this.options.fullClassFormatter(this.iconpickerValue) + '\"></i>';\n        },\n        setSourceValue: function(a) {\n            a = this.setValue(a);\n            if (a !== false && a !== \"\") {\n                if (this.hasInput()) {\n                    this.input.val(this.iconpickerValue);\n                } else {\n                    this.element.data(\"iconpickerValue\", this.iconpickerValue);\n                }\n                this._trigger(\"iconpickerSetSourceValue\", {\n                    iconpickerValue: a\n                });\n            }\n            return a;\n        },\n        getSourceValue: function(a) {\n            a = a || this.options.defaultValue;\n            var b = a;\n            if (this.hasInput()) {\n                b = this.input.val();\n            } else {\n                b = this.element.data(\"iconpickerValue\");\n            }\n            if (b === undefined || b === \"\" || b === null || b === false) {\n                b = a;\n            }\n            return b;\n        },\n        hasInput: function() {\n            return this.input !== false;\n        },\n        isInputSearch: function() {\n            return this.hasInput() && this.options.inputSearch === true;\n        },\n        isInputGroup: function() {\n            return this.container.is(\".input-group\");\n        },\n        isDropdownMenu: function() {\n            return this.container.is(\".dropdown-menu\");\n        },\n        hasSeparatedSearchInput: function() {\n            return this.options.templates.search !== false && !this.isInputSearch();\n        },\n        hasComponent: function() {\n            return this.component !== false;\n        },\n        hasContainer: function() {\n            return this.container !== false;\n        },\n        getAcceptButton: function() {\n            return this.popover.find(\".iconpicker-btn-accept\");\n        },\n        getCancelButton: function() {\n            return this.popover.find(\".iconpicker-btn-cancel\");\n        },\n        getSearchInput: function() {\n            return this.popover.find(\".iconpicker-search\");\n        },\n        filter: function(c) {\n            if (b.isEmpty(c)) {\n                this.iconpicker.find(\".iconpicker-item\").show();\n                return a(false);\n            } else {\n                var d = [];\n                this.iconpicker.find(\".iconpicker-item\").each(function() {\n                    var b = a(this);\n                    var e = b.attr(\"title\").toLowerCase();\n                    var f = false;\n                    try {\n                        f = new RegExp(c, \"g\");\n                    } catch (a) {\n                        f = false;\n                    }\n                    if (f !== false && e.match(f)) {\n                        d.push(b);\n                        b.show();\n                    } else {\n                        b.hide();\n                    }\n                });\n                return d;\n            }\n        },\n        show: function() {\n            if (this.popover.hasClass(\"in\")) {\n                return false;\n            }\n            a.iconpicker.batch(a(\".iconpicker-popover.in:not(.inline)\").not(this.popover), \"hide\");\n            this._trigger(\"iconpickerShow\");\n            this.updatePlacement();\n            this.popover.addClass(\"in\");\n            setTimeout(a.proxy(function() {\n                this.popover.css(\"display\", this.isInline() ? \"\" : \"block\");\n                this._trigger(\"iconpickerShown\");\n            }, this), this.options.animation ? 300 : 1);\n        },\n        hide: function() {\n            if (!this.popover.hasClass(\"in\")) {\n                return false;\n            }\n            this._trigger(\"iconpickerHide\");\n            this.popover.removeClass(\"in\");\n            setTimeout(a.proxy(function() {\n                this.popover.css(\"display\", \"none\");\n                this.getSearchInput().val(\"\");\n                this.filter(\"\");\n                this._trigger(\"iconpickerHidden\");\n            }, this), this.options.animation ? 300 : 1);\n        },\n        toggle: function() {\n            if (this.popover.is(\":visible\")) {\n                this.hide();\n            } else {\n                this.show(true);\n            }\n        },\n        update: function(a, b) {\n            a = a ? a : this.getSourceValue(this.iconpickerValue);\n            this._trigger(\"iconpickerUpdate\");\n            if (b === true) {\n                a = this.setValue(a);\n            } else {\n                a = this.setSourceValue(a);\n                this._updateFormGroupStatus(a !== false);\n            }\n            if (a !== false) {\n                this._updateComponents();\n            }\n            this._trigger(\"iconpickerUpdated\");\n            return a;\n        },\n        destroy: function() {\n            this._trigger(\"iconpickerDestroy\");\n            this.element.removeData(\"iconpicker\").removeData(\"iconpickerValue\").removeClass(\"iconpicker-element\");\n            this._unbindElementEvents();\n            this._unbindWindowEvents();\n            a(this.popover).remove();\n            this._trigger(\"iconpickerDestroyed\");\n        },\n        disable: function() {\n            if (this.hasInput()) {\n                this.input.prop(\"disabled\", true);\n                return true;\n            }\n            return false;\n        },\n        enable: function() {\n            if (this.hasInput()) {\n                this.input.prop(\"disabled\", false);\n                return true;\n            }\n            return false;\n        },\n        isDisabled: function() {\n            if (this.hasInput()) {\n                return this.input.prop(\"disabled\") === true;\n            }\n            return false;\n        },\n        isInline: function() {\n            return this.options.placement === \"inline\" || this.popover.hasClass(\"inline\");\n        }\n    };\n    a.iconpicker = c;\n    a.fn.iconpicker = function(b) {\n        return this.each(function() {\n            var d = a(this);\n            if (!d.data(\"iconpicker\")) {\n                d.data(\"iconpicker\", new c(this, typeof b === \"object\" ? b : {}));\n            }\n        });\n    };\n    c.defaultOptions.icons = [ \"fa-500px\", \"fa-adjust\", \"fa-adn\", \"fa-align-center\", \"fa-align-justify\", \"fa-align-left\", \"fa-align-right\", \"fa-amazon\", \"fa-ambulance\", \"fa-american-sign-language-interpreting\", \"fa-anchor\", \"fa-android\", \"fa-angellist\", \"fa-angle-double-down\", \"fa-angle-double-left\", \"fa-angle-double-right\", \"fa-angle-double-up\", \"fa-angle-down\", \"fa-angle-left\", \"fa-angle-right\", \"fa-angle-up\", \"fa-apple\", \"fa-archive\", \"fa-area-chart\", \"fa-arrow-circle-down\", \"fa-arrow-circle-left\", \"fa-arrow-circle-o-down\", \"fa-arrow-circle-o-left\", \"fa-arrow-circle-o-right\", \"fa-arrow-circle-o-up\", \"fa-arrow-circle-right\", \"fa-arrow-circle-up\", \"fa-arrow-down\", \"fa-arrow-left\", \"fa-arrow-right\", \"fa-arrow-up\", \"fa-arrows\", \"fa-arrows-alt\", \"fa-arrows-h\", \"fa-arrows-v\", \"fa-asl-interpreting\", \"fa-assistive-listening-systems\", \"fa-asterisk\", \"fa-at\", \"fa-audio-description\", \"fa-automobile\", \"fa-backward\", \"fa-balance-scale\", \"fa-ban\", \"fa-bank\", \"fa-bar-chart\", \"fa-bar-chart-o\", \"fa-barcode\", \"fa-bars\", \"fa-battery-0\", \"fa-battery-1\", \"fa-battery-2\", \"fa-battery-3\", \"fa-battery-4\", \"fa-battery-empty\", \"fa-battery-full\", \"fa-battery-half\", \"fa-battery-quarter\", \"fa-battery-three-quarters\", \"fa-bed\", \"fa-beer\", \"fa-behance\", \"fa-behance-square\", \"fa-bell\", \"fa-bell-o\", \"fa-bell-slash\", \"fa-bell-slash-o\", \"fa-bicycle\", \"fa-binoculars\", \"fa-birthday-cake\", \"fa-bitbucket\", \"fa-bitbucket-square\", \"fa-bitcoin\", \"fa-black-tie\", \"fa-blind\", \"fa-bluetooth\", \"fa-bluetooth-b\", \"fa-bold\", \"fa-bolt\", \"fa-bomb\", \"fa-book\", \"fa-bookmark\", \"fa-bookmark-o\", \"fa-braille\", \"fa-briefcase\", \"fa-btc\", \"fa-bug\", \"fa-building\", \"fa-building-o\", \"fa-bullhorn\", \"fa-bullseye\", \"fa-bus\", \"fa-buysellads\", \"fa-cab\", \"fa-calculator\", \"fa-calendar\", \"fa-calendar-check-o\", \"fa-calendar-minus-o\", \"fa-calendar-o\", \"fa-calendar-plus-o\", \"fa-calendar-times-o\", \"fa-camera\", \"fa-camera-retro\", \"fa-car\", \"fa-caret-down\", \"fa-caret-left\", \"fa-caret-right\", \"fa-caret-square-o-down\", \"fa-caret-square-o-left\", \"fa-caret-square-o-right\", \"fa-caret-square-o-up\", \"fa-caret-up\", \"fa-cart-arrow-down\", \"fa-cart-plus\", \"fa-cc\", \"fa-cc-amex\", \"fa-cc-diners-club\", \"fa-cc-discover\", \"fa-cc-jcb\", \"fa-cc-mastercard\", \"fa-cc-paypal\", \"fa-cc-stripe\", \"fa-cc-visa\", \"fa-certificate\", \"fa-chain\", \"fa-chain-broken\", \"fa-check\", \"fa-check-circle\", \"fa-check-circle-o\", \"fa-check-square\", \"fa-check-square-o\", \"fa-chevron-circle-down\", \"fa-chevron-circle-left\", \"fa-chevron-circle-right\", \"fa-chevron-circle-up\", \"fa-chevron-down\", \"fa-chevron-left\", \"fa-chevron-right\", \"fa-chevron-up\", \"fa-child\", \"fa-chrome\", \"fa-circle\", \"fa-circle-o\", \"fa-circle-o-notch\", \"fa-circle-thin\", \"fa-clipboard\", \"fa-clock-o\", \"fa-clone\", \"fa-close\", \"fa-cloud\", \"fa-cloud-download\", \"fa-cloud-upload\", \"fa-cny\", \"fa-code\", \"fa-code-fork\", \"fa-codepen\", \"fa-codiepie\", \"fa-coffee\", \"fa-cog\", \"fa-cogs\", \"fa-columns\", \"fa-comment\", \"fa-comment-o\", \"fa-commenting\", \"fa-commenting-o\", \"fa-comments\", \"fa-comments-o\", \"fa-compass\", \"fa-compress\", \"fa-connectdevelop\", \"fa-contao\", \"fa-copy\", \"fa-copyright\", \"fa-creative-commons\", \"fa-credit-card\", \"fa-credit-card-alt\", \"fa-crop\", \"fa-crosshairs\", \"fa-css3\", \"fa-cube\", \"fa-cubes\", \"fa-cut\", \"fa-cutlery\", \"fa-dashboard\", \"fa-dashcube\", \"fa-database\", \"fa-deaf\", \"fa-deafness\", \"fa-dedent\", \"fa-delicious\", \"fa-desktop\", \"fa-deviantart\", \"fa-diamond\", \"fa-digg\", \"fa-dollar\", \"fa-dot-circle-o\", \"fa-download\", \"fa-dribbble\", \"fa-dropbox\", \"fa-drupal\", \"fa-edge\", \"fa-edit\", \"fa-eject\", \"fa-ellipsis-h\", \"fa-ellipsis-v\", \"fa-empire\", \"fa-envelope\", \"fa-envelope-o\", \"fa-envelope-square\", \"fa-envira\", \"fa-eraser\", \"fa-eur\", \"fa-euro\", \"fa-exchange\", \"fa-exclamation\", \"fa-exclamation-circle\", \"fa-exclamation-triangle\", \"fa-expand\", \"fa-expeditedssl\", \"fa-external-link\", \"fa-external-link-square\", \"fa-eye\", \"fa-eye-slash\", \"fa-eyedropper\", \"fa-fa\", \"fa-facebook\", \"fa-facebook-f\", \"fa-facebook-official\", \"fa-facebook-square\", \"fa-fast-backward\", \"fa-fast-forward\", \"fa-fax\", \"fa-feed\", \"fa-female\", \"fa-fighter-jet\", \"fa-file\", \"fa-file-archive-o\", \"fa-file-audio-o\", \"fa-file-code-o\", \"fa-file-excel-o\", \"fa-file-image-o\", \"fa-file-movie-o\", \"fa-file-o\", \"fa-file-pdf-o\", \"fa-file-photo-o\", \"fa-file-picture-o\", \"fa-file-powerpoint-o\", \"fa-file-sound-o\", \"fa-file-text\", \"fa-file-text-o\", \"fa-file-video-o\", \"fa-file-word-o\", \"fa-file-zip-o\", \"fa-files-o\", \"fa-film\", \"fa-filter\", \"fa-fire\", \"fa-fire-extinguisher\", \"fa-firefox\", \"fa-first-order\", \"fa-flag\", \"fa-flag-checkered\", \"fa-flag-o\", \"fa-flash\", \"fa-flask\", \"fa-flickr\", \"fa-floppy-o\", \"fa-folder\", \"fa-folder-o\", \"fa-folder-open\", \"fa-folder-open-o\", \"fa-font\", \"fa-font-awesome\", \"fa-fonticons\", \"fa-fort-awesome\", \"fa-forumbee\", \"fa-forward\", \"fa-foursquare\", \"fa-frown-o\", \"fa-futbol-o\", \"fa-gamepad\", \"fa-gavel\", \"fa-gbp\", \"fa-ge\", \"fa-gear\", \"fa-gears\", \"fa-genderless\", \"fa-get-pocket\", \"fa-gg\", \"fa-gg-circle\", \"fa-gift\", \"fa-git\", \"fa-git-square\", \"fa-github\", \"fa-github-alt\", \"fa-github-square\", \"fa-gitlab\", \"fa-gittip\", \"fa-glass\", \"fa-glide\", \"fa-glide-g\", \"fa-globe\", \"fa-google\", \"fa-google-plus\", \"fa-google-plus-circle\", \"fa-google-plus-official\", \"fa-google-plus-square\", \"fa-google-wallet\", \"fa-graduation-cap\", \"fa-gratipay\", \"fa-group\", \"fa-h-square\", \"fa-hacker-news\", \"fa-hand-grab-o\", \"fa-hand-lizard-o\", \"fa-hand-o-down\", \"fa-hand-o-left\", \"fa-hand-o-right\", \"fa-hand-o-up\", \"fa-hand-paper-o\", \"fa-hand-peace-o\", \"fa-hand-pointer-o\", \"fa-hand-rock-o\", \"fa-hand-scissors-o\", \"fa-hand-spock-o\", \"fa-hand-stop-o\", \"fa-hard-of-hearing\", \"fa-hashtag\", \"fa-hdd-o\", \"fa-header\", \"fa-headphones\", \"fa-heart\", \"fa-heart-o\", \"fa-heartbeat\", \"fa-history\", \"fa-home\", \"fa-hospital-o\", \"fa-hotel\", \"fa-hourglass\", \"fa-hourglass-1\", \"fa-hourglass-2\", \"fa-hourglass-3\", \"fa-hourglass-end\", \"fa-hourglass-half\", \"fa-hourglass-o\", \"fa-hourglass-start\", \"fa-houzz\", \"fa-html5\", \"fa-i-cursor\", \"fa-ils\", \"fa-image\", \"fa-inbox\", \"fa-indent\", \"fa-industry\", \"fa-info\", \"fa-info-circle\", \"fa-inr\", \"fa-instagram\", \"fa-institution\", \"fa-internet-explorer\", \"fa-intersex\", \"fa-ioxhost\", \"fa-italic\", \"fa-joomla\", \"fa-jpy\", \"fa-jsfiddle\", \"fa-key\", \"fa-keyboard-o\", \"fa-krw\", \"fa-language\", \"fa-laptop\", \"fa-lastfm\", \"fa-lastfm-square\", \"fa-leaf\", \"fa-leanpub\", \"fa-legal\", \"fa-lemon-o\", \"fa-level-down\", \"fa-level-up\", \"fa-life-bouy\", \"fa-life-buoy\", \"fa-life-ring\", \"fa-life-saver\", \"fa-lightbulb-o\", \"fa-line-chart\", \"fa-link\", \"fa-linkedin\", \"fa-linkedin-square\", \"fa-linux\", \"fa-list\", \"fa-list-alt\", \"fa-list-ol\", \"fa-list-ul\", \"fa-location-arrow\", \"fa-lock\", \"fa-long-arrow-down\", \"fa-long-arrow-left\", \"fa-long-arrow-right\", \"fa-long-arrow-up\", \"fa-low-vision\", \"fa-magic\", \"fa-magnet\", \"fa-mail-forward\", \"fa-mail-reply\", \"fa-mail-reply-all\", \"fa-male\", \"fa-map\", \"fa-map-marker\", \"fa-map-o\", \"fa-map-pin\", \"fa-map-signs\", \"fa-mars\", \"fa-mars-double\", \"fa-mars-stroke\", \"fa-mars-stroke-h\", \"fa-mars-stroke-v\", \"fa-maxcdn\", \"fa-meanpath\", \"fa-medium\", \"fa-medkit\", \"fa-meh-o\", \"fa-mercury\", \"fa-microphone\", \"fa-microphone-slash\", \"fa-minus\", \"fa-minus-circle\", \"fa-minus-square\", \"fa-minus-square-o\", \"fa-mixcloud\", \"fa-mobile\", \"fa-mobile-phone\", \"fa-modx\", \"fa-money\", \"fa-moon-o\", \"fa-mortar-board\", \"fa-motorcycle\", \"fa-mouse-pointer\", \"fa-music\", \"fa-navicon\", \"fa-neuter\", \"fa-newspaper-o\", \"fa-object-group\", \"fa-object-ungroup\", \"fa-odnoklassniki\", \"fa-odnoklassniki-square\", \"fa-opencart\", \"fa-openid\", \"fa-opera\", \"fa-optin-monster\", \"fa-outdent\", \"fa-pagelines\", \"fa-paint-brush\", \"fa-paper-plane\", \"fa-paper-plane-o\", \"fa-paperclip\", \"fa-paragraph\", \"fa-paste\", \"fa-pause\", \"fa-pause-circle\", \"fa-pause-circle-o\", \"fa-paw\", \"fa-paypal\", \"fa-pencil\", \"fa-pencil-square\", \"fa-pencil-square-o\", \"fa-percent\", \"fa-phone\", \"fa-phone-square\", \"fa-photo\", \"fa-picture-o\", \"fa-pie-chart\", \"fa-pied-piper\", \"fa-pied-piper-alt\", \"fa-pied-piper-pp\", \"fa-pinterest\", \"fa-pinterest-p\", \"fa-pinterest-square\", \"fa-plane\", \"fa-play\", \"fa-play-circle\", \"fa-play-circle-o\", \"fa-plug\", \"fa-plus\", \"fa-plus-circle\", \"fa-plus-square\", \"fa-plus-square-o\", \"fa-power-off\", \"fa-print\", \"fa-product-hunt\", \"fa-puzzle-piece\", \"fa-qq\", \"fa-qrcode\", \"fa-question\", \"fa-question-circle\", \"fa-question-circle-o\", \"fa-quote-left\", \"fa-quote-right\", \"fa-ra\", \"fa-random\", \"fa-rebel\", \"fa-recycle\", \"fa-reddit\", \"fa-reddit-alien\", \"fa-reddit-square\", \"fa-refresh\", \"fa-registered\", \"fa-remove\", \"fa-renren\", \"fa-reorder\", \"fa-repeat\", \"fa-reply\", \"fa-reply-all\", \"fa-resistance\", \"fa-retweet\", \"fa-rmb\", \"fa-road\", \"fa-rocket\", \"fa-rotate-left\", \"fa-rotate-right\", \"fa-rouble\", \"fa-rss\", \"fa-rss-square\", \"fa-rub\", \"fa-ruble\", \"fa-rupee\", \"fa-safari\", \"fa-save\", \"fa-scissors\", \"fa-scribd\", \"fa-search\", \"fa-search-minus\", \"fa-search-plus\", \"fa-sellsy\", \"fa-send\", \"fa-send-o\", \"fa-server\", \"fa-share\", \"fa-share-alt\", \"fa-share-alt-square\", \"fa-share-square\", \"fa-share-square-o\", \"fa-shekel\", \"fa-sheqel\", \"fa-shield\", \"fa-ship\", \"fa-shirtsinbulk\", \"fa-shopping-bag\", \"fa-shopping-basket\", \"fa-shopping-cart\", \"fa-sign-in\", \"fa-sign-language\", \"fa-sign-out\", \"fa-signal\", \"fa-signing\", \"fa-simplybuilt\", \"fa-sitemap\", \"fa-skyatlas\", \"fa-skype\", \"fa-slack\", \"fa-sliders\", \"fa-slideshare\", \"fa-smile-o\", \"fa-snapchat\", \"fa-snapchat-ghost\", \"fa-snapchat-square\", \"fa-soccer-ball-o\", \"fa-sort\", \"fa-sort-alpha-asc\", \"fa-sort-alpha-desc\", \"fa-sort-amount-asc\", \"fa-sort-amount-desc\", \"fa-sort-asc\", \"fa-sort-desc\", \"fa-sort-down\", \"fa-sort-numeric-asc\", \"fa-sort-numeric-desc\", \"fa-sort-up\", \"fa-soundcloud\", \"fa-space-shuttle\", \"fa-spinner\", \"fa-spoon\", \"fa-spotify\", \"fa-square\", \"fa-square-o\", \"fa-stack-exchange\", \"fa-stack-overflow\", \"fa-star\", \"fa-star-half\", \"fa-star-half-empty\", \"fa-star-half-full\", \"fa-star-half-o\", \"fa-star-o\", \"fa-steam\", \"fa-steam-square\", \"fa-step-backward\", \"fa-step-forward\", \"fa-stethoscope\", \"fa-sticky-note\", \"fa-sticky-note-o\", \"fa-stop\", \"fa-stop-circle\", \"fa-stop-circle-o\", \"fa-street-view\", \"fa-strikethrough\", \"fa-stumbleupon\", \"fa-stumbleupon-circle\", \"fa-subscript\", \"fa-subway\", \"fa-suitcase\", \"fa-sun-o\", \"fa-superscript\", \"fa-support\", \"fa-table\", \"fa-tablet\", \"fa-tachometer\", \"fa-tag\", \"fa-tags\", \"fa-tasks\", \"fa-taxi\", \"fa-television\", \"fa-tencent-weibo\", \"fa-terminal\", \"fa-text-height\", \"fa-text-width\", \"fa-th\", \"fa-th-large\", \"fa-th-list\", \"fa-themeisle\", \"fa-thumb-tack\", \"fa-thumbs-down\", \"fa-thumbs-o-down\", \"fa-thumbs-o-up\", \"fa-thumbs-up\", \"fa-ticket\", \"fa-times\", \"fa-times-circle\", \"fa-times-circle-o\", \"fa-tint\", \"fa-toggle-down\", \"fa-toggle-left\", \"fa-toggle-off\", \"fa-toggle-on\", \"fa-toggle-right\", \"fa-toggle-up\", \"fa-trademark\", \"fa-train\", \"fa-transgender\", \"fa-transgender-alt\", \"fa-trash\", \"fa-trash-o\", \"fa-tree\", \"fa-trello\", \"fa-tripadvisor\", \"fa-trophy\", \"fa-truck\", \"fa-try\", \"fa-tty\", \"fa-tumblr\", \"fa-tumblr-square\", \"fa-turkish-lira\", \"fa-tv\", \"fa-twitch\", \"fa-twitter\", \"fa-twitter-square\", \"fa-umbrella\", \"fa-underline\", \"fa-undo\", \"fa-universal-access\", \"fa-university\", \"fa-unlink\", \"fa-unlock\", \"fa-unlock-alt\", \"fa-unsorted\", \"fa-upload\", \"fa-usb\", \"fa-usd\", \"fa-user\", \"fa-user-md\", \"fa-user-plus\", \"fa-user-secret\", \"fa-user-times\", \"fa-users\", \"fa-venus\", \"fa-venus-double\", \"fa-venus-mars\", \"fa-viacoin\", \"fa-viadeo\", \"fa-viadeo-square\", \"fa-video-camera\", \"fa-vimeo\", \"fa-vimeo-square\", \"fa-vine\", \"fa-vk\", \"fa-volume-control-phone\", \"fa-volume-down\", \"fa-volume-off\", \"fa-volume-up\", \"fa-warning\", \"fa-wechat\", \"fa-weibo\", \"fa-weixin\", \"fa-whatsapp\", \"fa-wheelchair\", \"fa-wheelchair-alt\", \"fa-wifi\", \"fa-wikipedia-w\", \"fa-windows\", \"fa-won\", \"fa-wordpress\", \"fa-wpbeginner\", \"fa-wpforms\", \"fa-wrench\", \"fa-xing\", \"fa-xing-square\", \"fa-y-combinator\", \"fa-y-combinator-square\", \"fa-yahoo\", \"fa-yc\", \"fa-yc-square\", \"fa-yelp\", \"fa-yen\", \"fa-yoast\", \"fa-youtube\", \"fa-youtube-play\", \"fa-youtube-square\" ];\n});"
  },
  {
    "path": "public/adminlte/plugins/fastclick/fastclick.js",
    "content": ";(function () {\n\t'use strict';\n\n\t/**\n\t * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.\n\t *\n\t * @codingstandard ftlabs-jsv2\n\t * @copyright The Financial Times Limited [All Rights Reserved]\n\t * @license MIT License (see LICENSE.txt)\n\t */\n\n\t/*jslint browser:true, node:true*/\n\t/*global define, Event, Node*/\n\n\n\t/**\n\t * Instantiate fast-clicking listeners on the specified layer.\n\t *\n\t * @constructor\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tfunction FastClick(layer, options) {\n\t\tvar oldOnClick;\n\n\t\toptions = options || {};\n\n\t\t/**\n\t\t * Whether a click is currently being tracked.\n\t\t *\n\t\t * @type boolean\n\t\t */\n\t\tthis.trackingClick = false;\n\n\n\t\t/**\n\t\t * Timestamp for when click tracking started.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.trackingClickStart = 0;\n\n\n\t\t/**\n\t\t * The element being tracked for a click.\n\t\t *\n\t\t * @type EventTarget\n\t\t */\n\t\tthis.targetElement = null;\n\n\n\t\t/**\n\t\t * X-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartX = 0;\n\n\n\t\t/**\n\t\t * Y-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartY = 0;\n\n\n\t\t/**\n\t\t * ID of the last touch, retrieved from Touch.identifier.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.lastTouchIdentifier = 0;\n\n\n\t\t/**\n\t\t * Touchmove boundary, beyond which a click will be cancelled.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchBoundary = options.touchBoundary || 10;\n\n\n\t\t/**\n\t\t * The FastClick layer.\n\t\t *\n\t\t * @type Element\n\t\t */\n\t\tthis.layer = layer;\n\n\t\t/**\n\t\t * The minimum time between tap(touchstart and touchend) events\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapDelay = options.tapDelay || 200;\n\n\t\t/**\n\t\t * The maximum time for a tap\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapTimeout = options.tapTimeout || 700;\n\n\t\tif (FastClick.notNeeded(layer)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Some old versions of Android don't have Function.prototype.bind\n\t\tfunction bind(method, context) {\n\t\t\treturn function() { return method.apply(context, arguments); };\n\t\t}\n\n\n\t\tvar methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel'];\n\t\tvar context = this;\n\t\tfor (var i = 0, l = methods.length; i < l; i++) {\n\t\t\tcontext[methods[i]] = bind(context[methods[i]], context);\n\t\t}\n\n\t\t// Set up event handlers as required\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.addEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.addEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.addEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.addEventListener('click', this.onClick, true);\n\t\tlayer.addEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.addEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.addEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.addEventListener('touchcancel', this.onTouchCancel, false);\n\n\t\t// Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t// which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick\n\t\t// layer when they are cancelled.\n\t\tif (!Event.prototype.stopImmediatePropagation) {\n\t\t\tlayer.removeEventListener = function(type, callback, capture) {\n\t\t\t\tvar rmv = Node.prototype.removeEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\trmv.call(layer, type, callback.hijacked || callback, capture);\n\t\t\t\t} else {\n\t\t\t\t\trmv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlayer.addEventListener = function(type, callback, capture) {\n\t\t\t\tvar adv = Node.prototype.addEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\tadv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {\n\t\t\t\t\t\tif (!event.propagationStopped) {\n\t\t\t\t\t\t\tcallback(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t}), capture);\n\t\t\t\t} else {\n\t\t\t\t\tadv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// If a handler is already declared in the element's onclick attribute, it will be fired before\n\t\t// FastClick's onClick handler. Fix this by pulling out the user-defined handler function and\n\t\t// adding it as listener.\n\t\tif (typeof layer.onclick === 'function') {\n\n\t\t\t// Android browser on at least 3.2 requires a new reference to the function in layer.onclick\n\t\t\t// - the old one won't work if passed to addEventListener directly.\n\t\t\toldOnClick = layer.onclick;\n\t\t\tlayer.addEventListener('click', function(event) {\n\t\t\t\toldOnClick(event);\n\t\t\t}, false);\n\t\t\tlayer.onclick = null;\n\t\t}\n\t}\n\n\t/**\n\t* Windows Phone 8.1 fakes user agent string to look like Android and iPhone.\n\t*\n\t* @type boolean\n\t*/\n\tvar deviceIsWindowsPhone = navigator.userAgent.indexOf(\"Windows Phone\") >= 0;\n\n\t/**\n\t * Android requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0 && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS 4 requires an exception for select elements.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS4 = deviceIsIOS && (/OS 4_\\d(_\\d)?/).test(navigator.userAgent);\n\n\n\t/**\n\t * iOS 6.0-7.* requires the target element to be manually derived\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOSWithBadTarget = deviceIsIOS && (/OS [6-7]_\\d/).test(navigator.userAgent);\n\n\t/**\n\t * BlackBerry requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsBlackBerry10 = navigator.userAgent.indexOf('BB10') > 0;\n\n\t/**\n\t * Determine whether a given element requires a native click.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element needs a native click\n\t */\n\tFastClick.prototype.needsClick = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\n\t\t// Don't send a synthetic click to disabled inputs (issue #62)\n\t\tcase 'button':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\tif (target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'input':\n\n\t\t\t// File inputs need real clicks on iOS 6 due to a browser bug (issue #68)\n\t\t\tif ((deviceIsIOS && target.type === 'file') || target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'label':\n\t\tcase 'iframe': // iOS8 homescreen apps can prevent events bubbling into frames\n\t\tcase 'video':\n\t\t\treturn true;\n\t\t}\n\n\t\treturn (/\\bneedsclick\\b/).test(target.className);\n\t};\n\n\n\t/**\n\t * Determine whether a given element requires a call to focus to simulate click into element.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element requires a call to focus to simulate native click.\n\t */\n\tFastClick.prototype.needsFocus = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tcase 'select':\n\t\t\treturn !deviceIsAndroid;\n\t\tcase 'input':\n\t\t\tswitch (target.type) {\n\t\t\tcase 'button':\n\t\t\tcase 'checkbox':\n\t\t\tcase 'file':\n\t\t\tcase 'image':\n\t\t\tcase 'radio':\n\t\t\tcase 'submit':\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// No point in attempting to focus disabled inputs\n\t\t\treturn !target.disabled && !target.readOnly;\n\t\tdefault:\n\t\t\treturn (/\\bneedsfocus\\b/).test(target.className);\n\t\t}\n\t};\n\n\n\t/**\n\t * Send a click event to the specified element.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t * @param {Event} event\n\t */\n\tFastClick.prototype.sendClick = function(targetElement, event) {\n\t\tvar clickEvent, touch;\n\n\t\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)\n\t\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\t\tdocument.activeElement.blur();\n\t\t}\n\n\t\ttouch = event.changedTouches[0];\n\n\t\t// Synthesise a click event, with an extra attribute so it can be tracked\n\t\tclickEvent = document.createEvent('MouseEvents');\n\t\tclickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\t\tclickEvent.forwardedTouchEvent = true;\n\t\ttargetElement.dispatchEvent(clickEvent);\n\t};\n\n\tFastClick.prototype.determineEventType = function(targetElement) {\n\n\t\t//Issue #159: Android Chrome Select Box does not open with a synthetic click event\n\t\tif (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') {\n\t\t\treturn 'mousedown';\n\t\t}\n\n\t\treturn 'click';\n\t};\n\n\n\t/**\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.focus = function(targetElement) {\n\t\tvar length;\n\n\t\t// Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.\n\t\tif (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {\n\t\t\tlength = targetElement.value.length;\n\t\t\ttargetElement.setSelectionRange(length, length);\n\t\t} else {\n\t\t\ttargetElement.focus();\n\t\t}\n\t};\n\n\n\t/**\n\t * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.updateScrollParent = function(targetElement) {\n\t\tvar scrollParent, parentElement;\n\n\t\tscrollParent = targetElement.fastClickScrollParent;\n\n\t\t// Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the\n\t\t// target element was moved to another parent.\n\t\tif (!scrollParent || !scrollParent.contains(targetElement)) {\n\t\t\tparentElement = targetElement;\n\t\t\tdo {\n\t\t\t\tif (parentElement.scrollHeight > parentElement.offsetHeight) {\n\t\t\t\t\tscrollParent = parentElement;\n\t\t\t\t\ttargetElement.fastClickScrollParent = parentElement;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tparentElement = parentElement.parentElement;\n\t\t\t} while (parentElement);\n\t\t}\n\n\t\t// Always update the scroll top tracker if possible.\n\t\tif (scrollParent) {\n\t\t\tscrollParent.fastClickLastScrollTop = scrollParent.scrollTop;\n\t\t}\n\t};\n\n\n\t/**\n\t * @param {EventTarget} targetElement\n\t * @returns {Element|EventTarget}\n\t */\n\tFastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {\n\n\t\t// On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.\n\t\tif (eventTarget.nodeType === Node.TEXT_NODE) {\n\t\t\treturn eventTarget.parentNode;\n\t\t}\n\n\t\treturn eventTarget;\n\t};\n\n\n\t/**\n\t * On touch start, record the position and scroll offset.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchStart = function(event) {\n\t\tvar targetElement, touch, selection;\n\n\t\t// Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).\n\t\tif (event.targetTouches.length > 1) {\n\t\t\treturn true;\n\t\t}\n\n\t\ttargetElement = this.getTargetElementFromEventTarget(event.target);\n\t\ttouch = event.targetTouches[0];\n\n\t\tif (deviceIsIOS) {\n\n\t\t\t// Only trusted events will deselect text on iOS (issue #49)\n\t\t\tselection = window.getSelection();\n\t\t\tif (selection.rangeCount && !selection.isCollapsed) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (!deviceIsIOS4) {\n\n\t\t\t\t// Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):\n\t\t\t\t// when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched\n\t\t\t\t// with the same identifier as the touch event that previously triggered the click that triggered the alert.\n\t\t\t\t// Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an\n\t\t\t\t// immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.\n\t\t\t\t// Issue 120: touch.identifier is 0 when Chrome dev tools 'Emulate touch events' is set with an iOS device UA string,\n\t\t\t\t// which causes all touch events to be ignored. As this block only applies to iOS, and iOS identifiers are always long,\n\t\t\t\t// random integers, it's safe to to continue if the identifier is 0 here.\n\t\t\t\tif (touch.identifier && touch.identifier === this.lastTouchIdentifier) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthis.lastTouchIdentifier = touch.identifier;\n\n\t\t\t\t// If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:\n\t\t\t\t// 1) the user does a fling scroll on the scrollable layer\n\t\t\t\t// 2) the user stops the fling scroll with another tap\n\t\t\t\t// then the event.target of the last 'touchend' event will be the element that was under the user's finger\n\t\t\t\t// when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check\n\t\t\t\t// is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).\n\t\t\t\tthis.updateScrollParent(targetElement);\n\t\t\t}\n\t\t}\n\n\t\tthis.trackingClick = true;\n\t\tthis.trackingClickStart = event.timeStamp;\n\t\tthis.targetElement = targetElement;\n\n\t\tthis.touchStartX = touch.pageX;\n\t\tthis.touchStartY = touch.pageY;\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Based on a touchmove event object, check whether the touch has moved past a boundary since it started.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.touchHasMoved = function(event) {\n\t\tvar touch = event.changedTouches[0], boundary = this.touchBoundary;\n\n\t\tif (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Update the last position.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchMove = function(event) {\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If the touch has moved, cancel the click tracking\n\t\tif (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {\n\t\t\tthis.trackingClick = false;\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Attempt to find the labelled control for the given label element.\n\t *\n\t * @param {EventTarget|HTMLLabelElement} labelElement\n\t * @returns {Element|null}\n\t */\n\tFastClick.prototype.findControl = function(labelElement) {\n\n\t\t// Fast path for newer browsers supporting the HTML5 control attribute\n\t\tif (labelElement.control !== undefined) {\n\t\t\treturn labelElement.control;\n\t\t}\n\n\t\t// All browsers under test that support touch events also support the HTML5 htmlFor attribute\n\t\tif (labelElement.htmlFor) {\n\t\t\treturn document.getElementById(labelElement.htmlFor);\n\t\t}\n\n\t\t// If no for attribute exists, attempt to retrieve the first labellable descendant element\n\t\t// the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label\n\t\treturn labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');\n\t};\n\n\n\t/**\n\t * On touch end, determine whether to send a click event at once.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchEnd = function(event) {\n\t\tvar forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;\n\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tthis.cancelNextClick = true;\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Reset to prevent wrong click cancel on input (issue #156).\n\t\tthis.cancelNextClick = false;\n\n\t\tthis.lastClickTime = event.timeStamp;\n\n\t\ttrackingClickStart = this.trackingClickStart;\n\t\tthis.trackingClick = false;\n\t\tthis.trackingClickStart = 0;\n\n\t\t// On some iOS devices, the targetElement supplied with the event is invalid if the layer\n\t\t// is performing a transition or scroll, and has to be re-detected manually. Note that\n\t\t// for this to function correctly, it must be called *after* the event target is checked!\n\t\t// See issue #57; also filed as rdar://13048589 .\n\t\tif (deviceIsIOSWithBadTarget) {\n\t\t\ttouch = event.changedTouches[0];\n\n\t\t\t// In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null\n\t\t\ttargetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;\n\t\t\ttargetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;\n\t\t}\n\n\t\ttargetTagName = targetElement.tagName.toLowerCase();\n\t\tif (targetTagName === 'label') {\n\t\t\tforElement = this.findControl(targetElement);\n\t\t\tif (forElement) {\n\t\t\t\tthis.focus(targetElement);\n\t\t\t\tif (deviceIsAndroid) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\ttargetElement = forElement;\n\t\t\t}\n\t\t} else if (this.needsFocus(targetElement)) {\n\n\t\t\t// Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.\n\t\t\t// Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).\n\t\t\tif ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.focus(targetElement);\n\t\t\tthis.sendClick(targetElement, event);\n\n\t\t\t// Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.\n\t\t\t// Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)\n\t\t\tif (!deviceIsIOS || targetTagName !== 'select') {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tif (deviceIsIOS && !deviceIsIOS4) {\n\n\t\t\t// Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled\n\t\t\t// and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).\n\t\t\tscrollParent = targetElement.fastClickScrollParent;\n\t\t\tif (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Prevent the actual click from going though - unless the target node is marked as requiring\n\t\t// real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.\n\t\tif (!this.needsClick(targetElement)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.sendClick(targetElement, event);\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * On touch cancel, stop tracking the click.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.onTouchCancel = function() {\n\t\tthis.trackingClick = false;\n\t\tthis.targetElement = null;\n\t};\n\n\n\t/**\n\t * Determine mouse events which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onMouse = function(event) {\n\n\t\t// If a target element was never set (because a touch event was never fired) allow the event\n\t\tif (!this.targetElement) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (event.forwardedTouchEvent) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Programmatically generated events targeting a specific element should be permitted\n\t\tif (!event.cancelable) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Derive and check the target element to see whether the mouse event needs to be permitted;\n\t\t// unless explicitly enabled, prevent non-touch click events from triggering actions,\n\t\t// to prevent ghost/doubleclicks.\n\t\tif (!this.needsClick(this.targetElement) || this.cancelNextClick) {\n\n\t\t\t// Prevent any user-added listeners declared on FastClick element from being fired.\n\t\t\tif (event.stopImmediatePropagation) {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t} else {\n\n\t\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t\t\tevent.propagationStopped = true;\n\t\t\t}\n\n\t\t\t// Cancel the event\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the mouse event is permitted, return true for the action to go through.\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * On actual clicks, determine whether this is a touch-generated click, a click action occurring\n\t * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or\n\t * an actual click which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onClick = function(event) {\n\t\tvar permitted;\n\n\t\t// It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.\n\t\tif (this.trackingClick) {\n\t\t\tthis.targetElement = null;\n\t\t\tthis.trackingClick = false;\n\t\t\treturn true;\n\t\t}\n\n\t\t// Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.\n\t\tif (event.target.type === 'submit' && event.detail === 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tpermitted = this.onMouse(event);\n\n\t\t// Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.\n\t\tif (!permitted) {\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\t// If clicks are permitted, return true for the action to go through.\n\t\treturn permitted;\n\t};\n\n\n\t/**\n\t * Remove all FastClick's event listeners.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.destroy = function() {\n\t\tvar layer = this.layer;\n\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.removeEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.removeEventListener('click', this.onClick, true);\n\t\tlayer.removeEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.removeEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.removeEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.removeEventListener('touchcancel', this.onTouchCancel, false);\n\t};\n\n\n\t/**\n\t * Check whether FastClick is needed.\n\t *\n\t * @param {Element} layer The layer to listen on\n\t */\n\tFastClick.notNeeded = function(layer) {\n\t\tvar metaViewport;\n\t\tvar chromeVersion;\n\t\tvar blackberryVersion;\n\t\tvar firefoxVersion;\n\n\t\t// Devices that don't support touch don't need FastClick\n\t\tif (typeof window.ontouchstart === 'undefined') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Chrome version - zero for other browsers\n\t\tchromeVersion = +(/Chrome\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (chromeVersion) {\n\n\t\t\tif (deviceIsAndroid) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// Chrome on Android with user-scalable=\"no\" doesn't need FastClick (issue #89)\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// Chrome 32 and above with width=device-width or less don't need FastClick\n\t\t\t\t\tif (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Chrome desktop doesn't need FastClick (issue #15)\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (deviceIsBlackBerry10) {\n\t\t\tblackberryVersion = navigator.userAgent.match(/Version\\/([0-9]*)\\.([0-9]*)/);\n\n\t\t\t// BlackBerry 10.3+ does not require Fastclick library.\n\t\t\t// https://github.com/ftlabs/fastclick/issues/251\n\t\t\tif (blackberryVersion[1] >= 10 && blackberryVersion[2] >= 3) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// user-scalable=no eliminates click delay.\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// width=device-width (or less than device-width) eliminates click delay.\n\t\t\t\t\tif (document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// IE10 with -ms-touch-action: none or manipulation, which disables double-tap-to-zoom (issue #97)\n\t\tif (layer.style.msTouchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Firefox version - zero for other browsers\n\t\tfirefoxVersion = +(/Firefox\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (firefoxVersion >= 27) {\n\t\t\t// Firefox 27+ does not have tap delay if the content is not zoomable - https://bugzilla.mozilla.org/show_bug.cgi?id=922896\n\n\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\t\t\tif (metaViewport && (metaViewport.content.indexOf('user-scalable=no') !== -1 || document.documentElement.scrollWidth <= window.outerWidth)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// IE11: prefixed -ms-touch-action is no longer supported and it's recomended to use non-prefixed version\n\t\t// http://msdn.microsoft.com/en-us/library/windows/apps/Hh767313.aspx\n\t\tif (layer.style.touchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Factory method for creating a FastClick object\n\t *\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tFastClick.attach = function(layer, options) {\n\t\treturn new FastClick(layer, options);\n\t};\n\n\n\tif (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(function() {\n\t\t\treturn FastClick;\n\t\t});\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = FastClick.attach;\n\t\tmodule.exports.FastClick = FastClick;\n\t} else {\n\t\twindow.FastClick = FastClick;\n\t}\n}());\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/css/demo-ie8.css",
    "content": "@charset \"UTF-8\";\n/*\n * jQuery File Upload Demo CSS Fixes for IE<9\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n.navigation {\n  list-style: none;\n  padding: 0;\n  margin: 1em 0;\n}\n.navigation li {\n  display: inline;\n  margin-right: 10px;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/css/demo.css",
    "content": "@charset \"UTF-8\";\n/*\n * jQuery File Upload Demo CSS\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\nbody {\n  max-width: 750px;\n  margin: 0 auto;\n  padding: 1em;\n  font-family: \"Lucida Grande\", \"Lucida Sans Unicode\", Arial, sans-serif;\n  font-size: 1em;\n  line-height: 1.4em;\n  background: #222;\n  color: #fff;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\na {\n  color: orange;\n  text-decoration: none;\n}\nimg {\n  border: 0;\n  vertical-align: middle;\n}\nh1 {\n  line-height: 1em;\n}\nblockquote {\n  padding: 0 0 0 15px;\n  margin: 0 0 20px;\n  border-left: 5px solid #eee;\n}\ntable {\n  width: 100%;\n  margin: 10px 0;\n}\n\n.fileupload-progress {\n\tmargin: 10px 0;\n}\n.fileupload-progress .progress-extended {\n\tmargin-top: 5px;\n}\n.error {\n  color: red;\n}\n\n@media (min-width: 481px) {\n  .navigation {\n    list-style: none;\n    padding: 0;\n  }\n  .navigation li {\n    display: inline-block;\n  }\n  .navigation li:not(:first-child):before {\n    content: \"| \";\n  }\n}\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/css/jquery.fileupload-noscript.css",
    "content": "@charset \"UTF-8\";\n/*\n * jQuery File Upload Plugin NoScript CSS\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n.fileinput-button input {\n  position: static;\n  opacity: 1;\n  filter: none;\n  font-size: inherit !important;\n  direction: inherit;\n}\n.fileinput-button span {\n  display: none;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/css/jquery.fileupload-ui-noscript.css",
    "content": "@charset \"UTF-8\";\n/*\n * jQuery File Upload UI Plugin NoScript CSS\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2012, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n.fileinput-button i,\n.fileupload-buttonbar .delete,\n.fileupload-buttonbar .toggle {\n  display: none;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/css/jquery.fileupload-ui.css",
    "content": "@charset \"UTF-8\";\n/*\n * jQuery File Upload UI Plugin CSS\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2010, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n.fileupload-buttonbar .btn,\n.fileupload-buttonbar .toggle {\n  margin-bottom: 5px;\n}\n.progress-animated .progress-bar,\n.progress-animated .bar {\n  background: url(\"../img/progressbar.gif\") !important;\n  filter: none;\n}\n.fileupload-process {\n  float: right;\n  display: none;\n}\n.fileupload-processing .fileupload-process,\n.files .processing .preview {\n  display: block;\n  width: 32px;\n  height: 32px;\n  background: url(\"../img/loading.gif\") center no-repeat;\n  background-size: contain;\n}\n.files audio,\n.files video {\n  max-width: 300px;\n}\n\n@media (max-width: 767px) {\n  .fileupload-buttonbar .toggle,\n  .files .toggle,\n  .files .btn span {\n    display: none;\n  }\n  .files .name {\n    width: 80px;\n    word-wrap: break-word;\n  }\n  .files audio,\n  .files video {\n    max-width: 80px;\n  }\n  .files img,\n  .files canvas {\n    max-width: 100%;\n  }\n}\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/css/jquery.fileupload.css",
    "content": "@charset \"UTF-8\";\n/*\n * jQuery File Upload Plugin CSS\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n.fileinput-button {\n  position: relative;\n  overflow: hidden;\n  display: inline-block;\n}\n.fileinput-button input {\n  position: absolute;\n  top: 0;\n  right: 0;\n  margin: 0;\n  opacity: 0;\n  -ms-filter: 'alpha(opacity=0)';\n  font-size: 200px !important;\n  direction: ltr;\n  cursor: pointer;\n}\n\n/* Fixes for IE < 8 */\n@media screen\\9 {\n  .fileinput-button input {\n    filter: alpha(opacity=0);\n    font-size: 100%;\n    height: 100%;\n  }\n}\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/css/style.css",
    "content": "@charset \"UTF-8\";\n/*\n * jQuery File Upload Plugin CSS Example\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\nbody {\n  padding-top: 60px;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/app.js",
    "content": "/*\n * jQuery File Upload Plugin Angular JS Example\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global window, angular */\n\n;(function () {\n    'use strict';\n\n    var isOnGitHub = window.location.hostname === 'blueimp.github.io',\n        url = isOnGitHub ? '//jquery-file-upload.appspot.com/' : 'server/php/';\n\n    angular.module('demo', [\n        'blueimp.fileupload'\n    ])\n        .config([\n            '$httpProvider', 'fileUploadProvider',\n            function ($httpProvider, fileUploadProvider) {\n                delete $httpProvider.defaults.headers.common['X-Requested-With'];\n                fileUploadProvider.defaults.redirect = window.location.href.replace(\n                    /\\/[^\\/]*$/,\n                    '/cors/result.html?%s'\n                );\n                if (isOnGitHub) {\n                    // Demo settings:\n                    angular.extend(fileUploadProvider.defaults, {\n                        // Enable image resizing, except for Android and Opera,\n                        // which actually support image resizing, but fail to\n                        // send Blob objects via XHR requests:\n                        disableImageResize: /Android(?!.*Chrome)|Opera/\n                            .test(window.navigator.userAgent),\n                        maxFileSize: 999000,\n                        acceptFileTypes: /(\\.|\\/)(gif|jpe?g|png)$/i\n                    });\n                }\n            }\n        ])\n\n        .controller('DemoFileUploadController', [\n            '$scope', '$http', '$filter', '$window',\n            function ($scope, $http) {\n                $scope.options = {\n                    url: url\n                };\n                if (!isOnGitHub) {\n                    $scope.loadingFiles = true;\n                    $http.get(url)\n                        .then(\n                            function (response) {\n                                $scope.loadingFiles = false;\n                                $scope.queue = response.data.files || [];\n                            },\n                            function () {\n                                $scope.loadingFiles = false;\n                            }\n                        );\n                }\n            }\n        ])\n\n        .controller('FileDestroyController', [\n            '$scope', '$http',\n            function ($scope, $http) {\n                var file = $scope.file,\n                    state;\n                if (file.url) {\n                    file.$state = function () {\n                        return state;\n                    };\n                    file.$destroy = function () {\n                        state = 'pending';\n                        return $http({\n                            url: file.deleteUrl,\n                            method: file.deleteType\n                        }).then(\n                            function () {\n                                state = 'resolved';\n                                $scope.clear(file);\n                            },\n                            function () {\n                                state = 'rejected';\n                            }\n                        );\n                    };\n                } else if (!file.$cancel && !file._index) {\n                    file.$cancel = function () {\n                        $scope.clear(file);\n                    };\n                }\n            }\n        ]);\n\n}());\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/cors/jquery.postmessage-transport.js",
    "content": "/*\n * jQuery postMessage Transport Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* global define, require, window, document */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define(['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(require('jquery'));\n    } else {\n        // Browser globals:\n        factory(window.jQuery);\n    }\n}(function ($) {\n    'use strict';\n\n    var counter = 0,\n        names = [\n            'accepts',\n            'cache',\n            'contents',\n            'contentType',\n            'crossDomain',\n            'data',\n            'dataType',\n            'headers',\n            'ifModified',\n            'mimeType',\n            'password',\n            'processData',\n            'timeout',\n            'traditional',\n            'type',\n            'url',\n            'username'\n        ],\n        convert = function (p) {\n            return p;\n        };\n\n    $.ajaxSetup({\n        converters: {\n            'postmessage text': convert,\n            'postmessage json': convert,\n            'postmessage html': convert\n        }\n    });\n\n    $.ajaxTransport('postmessage', function (options) {\n        if (options.postMessage && window.postMessage) {\n            var iframe,\n                loc = $('<a>').prop('href', options.postMessage)[0],\n                target = loc.protocol + '//' + loc.host,\n                xhrUpload = options.xhr().upload;\n            // IE always includes the port for the host property of a link\n            // element, but not in the location.host or origin property for the\n            // default http port 80 and https port 443, so we strip it:\n            if (/^(http:\\/\\/.+:80)|(https:\\/\\/.+:443)$/.test(target)) {\n              target = target.replace(/:(80|443)$/, '');\n            }\n            return {\n                send: function (_, completeCallback) {\n                    counter += 1;\n                    var message = {\n                            id: 'postmessage-transport-' + counter\n                        },\n                        eventName = 'message.' + message.id;\n                    iframe = $(\n                        '<iframe style=\"display:none;\" src=\"' +\n                            options.postMessage + '\" name=\"' +\n                            message.id + '\"></iframe>'\n                    ).bind('load', function () {\n                        $.each(names, function (i, name) {\n                            message[name] = options[name];\n                        });\n                        message.dataType = message.dataType.replace('postmessage ', '');\n                        $(window).bind(eventName, function (e) {\n                            e = e.originalEvent;\n                            var data = e.data,\n                                ev;\n                            if (e.origin === target && data.id === message.id) {\n                                if (data.type === 'progress') {\n                                    ev = document.createEvent('Event');\n                                    ev.initEvent(data.type, false, true);\n                                    $.extend(ev, data);\n                                    xhrUpload.dispatchEvent(ev);\n                                } else {\n                                    completeCallback(\n                                        data.status,\n                                        data.statusText,\n                                        {postmessage: data.result},\n                                        data.headers\n                                    );\n                                    iframe.remove();\n                                    $(window).unbind(eventName);\n                                }\n                            }\n                        });\n                        iframe[0].contentWindow.postMessage(\n                            message,\n                            target\n                        );\n                    }).appendTo(document.body);\n                },\n                abort: function () {\n                    if (iframe) {\n                        iframe.remove();\n                    }\n                }\n            };\n        }\n    });\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/cors/jquery.xdr-transport.js",
    "content": "/*\n * jQuery XDomainRequest Transport Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on Julian Aubourg's ajaxHooks xdr.js:\n * https://github.com/jaubourg/ajaxHooks/\n */\n\n/* global define, require, window, XDomainRequest */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define(['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(require('jquery'));\n    } else {\n        // Browser globals:\n        factory(window.jQuery);\n    }\n}(function ($) {\n    'use strict';\n    if (window.XDomainRequest && !$.support.cors) {\n        $.ajaxTransport(function (s) {\n            if (s.crossDomain && s.async) {\n                if (s.timeout) {\n                    s.xdrTimeout = s.timeout;\n                    delete s.timeout;\n                }\n                var xdr;\n                return {\n                    send: function (headers, completeCallback) {\n                        var addParamChar = /\\?/.test(s.url) ? '&' : '?';\n                        function callback(status, statusText, responses, responseHeaders) {\n                            xdr.onload = xdr.onerror = xdr.ontimeout = $.noop;\n                            xdr = null;\n                            completeCallback(status, statusText, responses, responseHeaders);\n                        }\n                        xdr = new XDomainRequest();\n                        // XDomainRequest only supports GET and POST:\n                        if (s.type === 'DELETE') {\n                            s.url = s.url + addParamChar + '_method=DELETE';\n                            s.type = 'POST';\n                        } else if (s.type === 'PUT') {\n                            s.url = s.url + addParamChar + '_method=PUT';\n                            s.type = 'POST';\n                        } else if (s.type === 'PATCH') {\n                            s.url = s.url + addParamChar + '_method=PATCH';\n                            s.type = 'POST';\n                        }\n                        xdr.open(s.type, s.url);\n                        xdr.onload = function () {\n                            callback(\n                                200,\n                                'OK',\n                                {text: xdr.responseText},\n                                'Content-Type: ' + xdr.contentType\n                            );\n                        };\n                        xdr.onerror = function () {\n                            callback(404, 'Not Found');\n                        };\n                        if (s.xdrTimeout) {\n                            xdr.ontimeout = function () {\n                                callback(0, 'timeout');\n                            };\n                            xdr.timeout = s.xdrTimeout;\n                        }\n                        xdr.send((s.hasContent && s.data) || null);\n                    },\n                    abort: function () {\n                        if (xdr) {\n                            xdr.onerror = $.noop();\n                            xdr.abort();\n                        }\n                    }\n                };\n            }\n        });\n    }\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/jquery.fileupload-angular.js",
    "content": "/*\n * jQuery File Upload AngularJS Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, angular, require */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            'angular',\n            './jquery.fileupload-image',\n            './jquery.fileupload-audio',\n            './jquery.fileupload-video',\n            './jquery.fileupload-validate'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('angular'),\n            require('./jquery.fileupload-image'),\n            require('./jquery.fileupload-audio'),\n            require('./jquery.fileupload-video'),\n            require('./jquery.fileupload-validate')\n        );\n    } else {\n        factory();\n    }\n}(function () {\n    'use strict';\n\n    angular.module('blueimp.fileupload', [])\n\n        // The fileUpload service provides configuration options\n        // for the fileUpload directive and default handlers for\n        // File Upload events:\n        .provider('fileUpload', function () {\n            var scopeEvalAsync = function (expression) {\n                    var scope = angular.element(this)\n                            .fileupload('option', 'scope');\n                    // Schedule a new $digest cycle if not already inside of one\n                    // and evaluate the given expression:\n                    scope.$evalAsync(expression);\n                },\n                addFileMethods = function (scope, data) {\n                    var files = data.files,\n                        file = files[0];\n                    angular.forEach(files, function (file, index) {\n                        file._index = index;\n                        file.$state = function () {\n                            return data.state();\n                        };\n                        file.$processing = function () {\n                            return data.processing();\n                        };\n                        file.$progress = function () {\n                            return data.progress();\n                        };\n                        file.$response = function () {\n                            return data.response();\n                        };\n                    });\n                    file.$submit = function () {\n                        if (!file.error) {\n                            return data.submit();\n                        }\n                    };\n                    file.$cancel = function () {\n                        return data.abort();\n                    };\n                },\n                $config;\n            $config = this.defaults = {\n                handleResponse: function (e, data) {\n                    var files = data.result && data.result.files;\n                    if (files) {\n                        data.scope.replace(data.files, files);\n                    } else if (data.errorThrown ||\n                            data.textStatus === 'error') {\n                        data.files[0].error = data.errorThrown ||\n                            data.textStatus;\n                    }\n                },\n                add: function (e, data) {\n                    if (e.isDefaultPrevented()) {\n                        return false;\n                    }\n                    var scope = data.scope,\n                        filesCopy = [];\n                    angular.forEach(data.files, function (file) {\n                        filesCopy.push(file);\n                    });\n                    scope.$parent.$applyAsync(function () {\n                        addFileMethods(scope, data);\n                        var method = scope.option('prependFiles') ?\n                                'unshift' : 'push';\n                        Array.prototype[method].apply(scope.queue, data.files);\n                    });\n                    data.process(function () {\n                        return scope.process(data);\n                    }).always(function () {\n                        scope.$parent.$applyAsync(function () {\n                            addFileMethods(scope, data);\n                            scope.replace(filesCopy, data.files);\n                        });\n                    }).then(function () {\n                        if ((scope.option('autoUpload') ||\n                                data.autoUpload) &&\n                                data.autoUpload !== false) {\n                            data.submit();\n                        }\n                    });\n                },\n                done: function (e, data) {\n                    if (e.isDefaultPrevented()) {\n                        return false;\n                    }\n                    var that = this;\n                    data.scope.$apply(function () {\n                        data.handleResponse.call(that, e, data);\n                    });\n                },\n                fail: function (e, data) {\n                    if (e.isDefaultPrevented()) {\n                        return false;\n                    }\n                    var that = this,\n                        scope = data.scope;\n                    if (data.errorThrown === 'abort') {\n                        scope.clear(data.files);\n                        return;\n                    }\n                    scope.$apply(function () {\n                        data.handleResponse.call(that, e, data);\n                    });\n                },\n                stop: scopeEvalAsync,\n                processstart: scopeEvalAsync,\n                processstop: scopeEvalAsync,\n                getNumberOfFiles: function () {\n                    var scope = this.scope;\n                    return scope.queue.length - scope.processing();\n                },\n                dataType: 'json',\n                autoUpload: false\n            };\n            this.$get = [\n                function () {\n                    return {\n                        defaults: $config\n                    };\n                }\n            ];\n        })\n\n        // Format byte numbers to readable presentations:\n        .provider('formatFileSizeFilter', function () {\n            var $config = {\n                // Byte units following the IEC format\n                // http://en.wikipedia.org/wiki/Kilobyte\n                units: [\n                    {size: 1000000000, suffix: ' GB'},\n                    {size: 1000000, suffix: ' MB'},\n                    {size: 1000, suffix: ' KB'}\n                ]\n            };\n            this.defaults = $config;\n            this.$get = function () {\n                return function (bytes) {\n                    if (!angular.isNumber(bytes)) {\n                        return '';\n                    }\n                    var unit = true,\n                        i = 0,\n                        prefix,\n                        suffix;\n                    while (unit) {\n                        unit = $config.units[i];\n                        prefix = unit.prefix || '';\n                        suffix = unit.suffix || '';\n                        if (i === $config.units.length - 1 || bytes >= unit.size) {\n                            return prefix + (bytes / unit.size).toFixed(2) + suffix;\n                        }\n                        i += 1;\n                    }\n                };\n            };\n        })\n\n        // The FileUploadController initializes the fileupload widget and\n        // provides scope methods to control the File Upload functionality:\n        .controller('FileUploadController', [\n            '$scope', '$element', '$attrs', '$window', 'fileUpload','$q',\n            function ($scope, $element, $attrs, $window, fileUpload, $q) {\n                var uploadMethods = {\n                    progress: function () {\n                        return $element.fileupload('progress');\n                    },\n                    active: function () {\n                        return $element.fileupload('active');\n                    },\n                    option: function (option, data) {\n                        if (arguments.length === 1) {\n                            return $element.fileupload('option', option);\n                        }\n                        $element.fileupload('option', option, data);\n                    },\n                    add: function (data) {\n                        return $element.fileupload('add', data);\n                    },\n                    send: function (data) {\n                        return $element.fileupload('send', data);\n                    },\n                    process: function (data) {\n                        return $element.fileupload('process', data);\n                    },\n                    processing: function (data) {\n                        return $element.fileupload('processing', data);\n                    }\n                };\n                $scope.disabled = !$window.jQuery.support.fileInput;\n                $scope.queue = $scope.queue || [];\n                $scope.clear = function (files) {\n                    var queue = this.queue,\n                        i = queue.length,\n                        file = files,\n                        length = 1;\n                    if (angular.isArray(files)) {\n                        file = files[0];\n                        length = files.length;\n                    }\n                    while (i) {\n                        i -= 1;\n                        if (queue[i] === file) {\n                            return queue.splice(i, length);\n                        }\n                    }\n                };\n                $scope.replace = function (oldFiles, newFiles) {\n                    var queue = this.queue,\n                        file = oldFiles[0],\n                        i,\n                        j;\n                    for (i = 0; i < queue.length; i += 1) {\n                        if (queue[i] === file) {\n                            for (j = 0; j < newFiles.length; j += 1) {\n                                queue[i + j] = newFiles[j];\n                            }\n                            return;\n                        }\n                    }\n                };\n                $scope.applyOnQueue = function (method) {\n                    var list = this.queue.slice(0),\n                        i,\n                        file,\n                        promises = [];\n                    for (i = 0; i < list.length; i += 1) {\n                        file = list[i];\n                        if (file[method]) {\n                            promises.push(file[method]());\n                        }\n                    }\n                    return $q.all(promises);\n                };\n                $scope.submit = function () {\n                    return this.applyOnQueue('$submit');\n                };\n                $scope.cancel = function () {\n                    return this.applyOnQueue('$cancel');\n                };\n                // Add upload methods to the scope:\n                angular.extend($scope, uploadMethods);\n                // The fileupload widget will initialize with\n                // the options provided via \"data-\"-parameters,\n                // as well as those given via options object:\n                $element.fileupload(angular.extend(\n                    {scope: $scope},\n                    fileUpload.defaults\n                )).on('fileuploadadd', function (e, data) {\n                    data.scope = $scope;\n                }).on('fileuploadfail', function (e, data) {\n                    if (data.errorThrown === 'abort') {\n                        return;\n                    }\n                    if (data.dataType &&\n                            data.dataType.indexOf('json') === data.dataType.length - 4) {\n                        try {\n                            data.result = angular.fromJson(data.jqXHR.responseText);\n                        } catch (ignore) {}\n                    }\n                }).on([\n                    'fileuploadadd',\n                    'fileuploadsubmit',\n                    'fileuploadsend',\n                    'fileuploaddone',\n                    'fileuploadfail',\n                    'fileuploadalways',\n                    'fileuploadprogress',\n                    'fileuploadprogressall',\n                    'fileuploadstart',\n                    'fileuploadstop',\n                    'fileuploadchange',\n                    'fileuploadpaste',\n                    'fileuploaddrop',\n                    'fileuploaddragover',\n                    'fileuploadchunksend',\n                    'fileuploadchunkdone',\n                    'fileuploadchunkfail',\n                    'fileuploadchunkalways',\n                    'fileuploadprocessstart',\n                    'fileuploadprocess',\n                    'fileuploadprocessdone',\n                    'fileuploadprocessfail',\n                    'fileuploadprocessalways',\n                    'fileuploadprocessstop'\n                ].join(' '), function (e, data) {\n                    $scope.$parent.$applyAsync(function () {\n                        if ($scope.$emit(e.type, data).defaultPrevented) {\n                            e.preventDefault();\n                        }\n                    });\n                }).on('remove', function () {\n                    // Remove upload methods from the scope,\n                    // when the widget is removed:\n                    var method;\n                    for (method in uploadMethods) {\n                        if (uploadMethods.hasOwnProperty(method)) {\n                            delete $scope[method];\n                        }\n                    }\n                });\n                // Observe option changes:\n                $scope.$watch(\n                    $attrs.fileUpload,\n                    function (newOptions) {\n                        if (newOptions) {\n                            $element.fileupload('option', newOptions);\n                        }\n                    }\n                );\n            }\n        ])\n\n        // Provide File Upload progress feedback:\n        .controller('FileUploadProgressController', [\n            '$scope', '$attrs', '$parse',\n            function ($scope, $attrs, $parse) {\n                var fn = $parse($attrs.fileUploadProgress),\n                    update = function () {\n                        var progress = fn($scope);\n                        if (!progress || !progress.total) {\n                            return;\n                        }\n                        $scope.num = Math.floor(\n                            progress.loaded / progress.total * 100\n                        );\n                    };\n                update();\n                $scope.$watch(\n                    $attrs.fileUploadProgress + '.loaded',\n                    function (newValue, oldValue) {\n                        if (newValue !== oldValue) {\n                            update();\n                        }\n                    }\n                );\n            }\n        ])\n\n        // Display File Upload previews:\n        .controller('FileUploadPreviewController', [\n            '$scope', '$element', '$attrs',\n            function ($scope, $element, $attrs) {\n                $scope.$watch(\n                    $attrs.fileUploadPreview + '.preview',\n                    function (preview) {\n                        $element.empty();\n                        if (preview) {\n                            $element.append(preview);\n                        }\n                    }\n                );\n            }\n        ])\n\n        .directive('fileUpload', function () {\n            return {\n                controller: 'FileUploadController',\n                scope: true\n            };\n        })\n\n        .directive('fileUploadProgress', function () {\n            return {\n                controller: 'FileUploadProgressController',\n                scope: true\n            };\n        })\n\n        .directive('fileUploadPreview', function () {\n            return {\n                controller: 'FileUploadPreviewController'\n            };\n        })\n\n        // Enhance the HTML5 download attribute to\n        // allow drag&drop of files to the desktop:\n        .directive('download', function () {\n            return function (scope, elm) {\n                elm.on('dragstart', function (e) {\n                    try {\n                        e.originalEvent.dataTransfer.setData(\n                            'DownloadURL',\n                            [\n                                'application/octet-stream',\n                                elm.prop('download'),\n                                elm.prop('href')\n                            ].join(':')\n                        );\n                    } catch (ignore) {}\n                });\n            };\n        });\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/jquery.fileupload-audio.js",
    "content": "/*\n * jQuery File Upload Audio Preview Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window, document */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            'load-image',\n            './jquery.fileupload-process'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('blueimp-load-image/js/load-image'),\n            require('./jquery.fileupload-process')\n        );\n    } else {\n        // Browser globals:\n        factory(\n            window.jQuery,\n            window.loadImage\n        );\n    }\n}(function ($, loadImage) {\n    'use strict';\n\n    // Prepend to the default processQueue:\n    $.blueimp.fileupload.prototype.options.processQueue.unshift(\n        {\n            action: 'loadAudio',\n            // Use the action as prefix for the \"@\" options:\n            prefix: true,\n            fileTypes: '@',\n            maxFileSize: '@',\n            disabled: '@disableAudioPreview'\n        },\n        {\n            action: 'setAudio',\n            name: '@audioPreviewName',\n            disabled: '@disableAudioPreview'\n        }\n    );\n\n    // The File Upload Audio Preview plugin extends the fileupload widget\n    // with audio preview functionality:\n    $.widget('blueimp.fileupload', $.blueimp.fileupload, {\n\n        options: {\n            // The regular expression for the types of audio files to load,\n            // matched against the file type:\n            loadAudioFileTypes: /^audio\\/.*$/\n        },\n\n        _audioElement: document.createElement('audio'),\n\n        processActions: {\n\n            // Loads the audio file given via data.files and data.index\n            // as audio element if the browser supports playing it.\n            // Accepts the options fileTypes (regular expression)\n            // and maxFileSize (integer) to limit the files to load:\n            loadAudio: function (data, options) {\n                if (options.disabled) {\n                    return data;\n                }\n                var file = data.files[data.index],\n                    url,\n                    audio;\n                if (this._audioElement.canPlayType &&\n                        this._audioElement.canPlayType(file.type) &&\n                        ($.type(options.maxFileSize) !== 'number' ||\n                            file.size <= options.maxFileSize) &&\n                        (!options.fileTypes ||\n                            options.fileTypes.test(file.type))) {\n                    url = loadImage.createObjectURL(file);\n                    if (url) {\n                        audio = this._audioElement.cloneNode(false);\n                        audio.src = url;\n                        audio.controls = true;\n                        data.audio = audio;\n                        return data;\n                    }\n                }\n                return data;\n            },\n\n            // Sets the audio element as a property of the file object:\n            setAudio: function (data, options) {\n                if (data.audio && !options.disabled) {\n                    data.files[data.index][options.name || 'preview'] = data.audio;\n                }\n                return data;\n            }\n\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/jquery.fileupload-image.js",
    "content": "/*\n * jQuery File Upload Image Preview & Resize Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window, Blob */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            'load-image',\n            'load-image-meta',\n            'load-image-scale',\n            'load-image-exif',\n            'canvas-to-blob',\n            './jquery.fileupload-process'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('blueimp-load-image/js/load-image'),\n            require('blueimp-load-image/js/load-image-meta'),\n            require('blueimp-load-image/js/load-image-scale'),\n            require('blueimp-load-image/js/load-image-exif'),\n            require('blueimp-canvas-to-blob'),\n            require('./jquery.fileupload-process')\n        );\n    } else {\n        // Browser globals:\n        factory(\n            window.jQuery,\n            window.loadImage\n        );\n    }\n}(function ($, loadImage) {\n    'use strict';\n\n    // Prepend to the default processQueue:\n    $.blueimp.fileupload.prototype.options.processQueue.unshift(\n        {\n            action: 'loadImageMetaData',\n            disableImageHead: '@',\n            disableExif: '@',\n            disableExifThumbnail: '@',\n            disableExifSub: '@',\n            disableExifGps: '@',\n            disabled: '@disableImageMetaDataLoad'\n        },\n        {\n            action: 'loadImage',\n            // Use the action as prefix for the \"@\" options:\n            prefix: true,\n            fileTypes: '@',\n            maxFileSize: '@',\n            noRevoke: '@',\n            disabled: '@disableImageLoad'\n        },\n        {\n            action: 'resizeImage',\n            // Use \"image\" as prefix for the \"@\" options:\n            prefix: 'image',\n            maxWidth: '@',\n            maxHeight: '@',\n            minWidth: '@',\n            minHeight: '@',\n            crop: '@',\n            orientation: '@',\n            forceResize: '@',\n            disabled: '@disableImageResize'\n        },\n        {\n            action: 'saveImage',\n            quality: '@imageQuality',\n            type: '@imageType',\n            disabled: '@disableImageResize'\n        },\n        {\n            action: 'saveImageMetaData',\n            disabled: '@disableImageMetaDataSave'\n        },\n        {\n            action: 'resizeImage',\n            // Use \"preview\" as prefix for the \"@\" options:\n            prefix: 'preview',\n            maxWidth: '@',\n            maxHeight: '@',\n            minWidth: '@',\n            minHeight: '@',\n            crop: '@',\n            orientation: '@',\n            thumbnail: '@',\n            canvas: '@',\n            disabled: '@disableImagePreview'\n        },\n        {\n            action: 'setImage',\n            name: '@imagePreviewName',\n            disabled: '@disableImagePreview'\n        },\n        {\n            action: 'deleteImageReferences',\n            disabled: '@disableImageReferencesDeletion'\n        }\n    );\n\n    // The File Upload Resize plugin extends the fileupload widget\n    // with image resize functionality:\n    $.widget('blueimp.fileupload', $.blueimp.fileupload, {\n\n        options: {\n            // The regular expression for the types of images to load:\n            // matched against the file type:\n            loadImageFileTypes: /^image\\/(gif|jpeg|png|svg\\+xml)$/,\n            // The maximum file size of images to load:\n            loadImageMaxFileSize: 10000000, // 10MB\n            // The maximum width of resized images:\n            imageMaxWidth: 1920,\n            // The maximum height of resized images:\n            imageMaxHeight: 1080,\n            // Defines the image orientation (1-8) or takes the orientation\n            // value from Exif data if set to true:\n            imageOrientation: false,\n            // Define if resized images should be cropped or only scaled:\n            imageCrop: false,\n            // Disable the resize image functionality by default:\n            disableImageResize: true,\n            // The maximum width of the preview images:\n            previewMaxWidth: 80,\n            // The maximum height of the preview images:\n            previewMaxHeight: 80,\n            // Defines the preview orientation (1-8) or takes the orientation\n            // value from Exif data if set to true:\n            previewOrientation: true,\n            // Create the preview using the Exif data thumbnail:\n            previewThumbnail: true,\n            // Define if preview images should be cropped or only scaled:\n            previewCrop: false,\n            // Define if preview images should be resized as canvas elements:\n            previewCanvas: true\n        },\n\n        processActions: {\n\n            // Loads the image given via data.files and data.index\n            // as img element, if the browser supports the File API.\n            // Accepts the options fileTypes (regular expression)\n            // and maxFileSize (integer) to limit the files to load:\n            loadImage: function (data, options) {\n                if (options.disabled) {\n                    return data;\n                }\n                var that = this,\n                    file = data.files[data.index],\n                    dfd = $.Deferred();\n                if (($.type(options.maxFileSize) === 'number' &&\n                            file.size > options.maxFileSize) ||\n                        (options.fileTypes &&\n                            !options.fileTypes.test(file.type)) ||\n                        !loadImage(\n                            file,\n                            function (img) {\n                                if (img.src) {\n                                    data.img = img;\n                                }\n                                dfd.resolveWith(that, [data]);\n                            },\n                            options\n                        )) {\n                    return data;\n                }\n                return dfd.promise();\n            },\n\n            // Resizes the image given as data.canvas or data.img\n            // and updates data.canvas or data.img with the resized image.\n            // Also stores the resized image as preview property.\n            // Accepts the options maxWidth, maxHeight, minWidth,\n            // minHeight, canvas and crop:\n            resizeImage: function (data, options) {\n                if (options.disabled || !(data.canvas || data.img)) {\n                    return data;\n                }\n                options = $.extend({canvas: true}, options);\n                var that = this,\n                    dfd = $.Deferred(),\n                    img = (options.canvas && data.canvas) || data.img,\n                    resolve = function (newImg) {\n                        if (newImg && (newImg.width !== img.width ||\n                                newImg.height !== img.height ||\n                                options.forceResize)) {\n                            data[newImg.getContext ? 'canvas' : 'img'] = newImg;\n                        }\n                        data.preview = newImg;\n                        dfd.resolveWith(that, [data]);\n                    },\n                    thumbnail;\n                if (data.exif) {\n                    if (options.orientation === true) {\n                        options.orientation = data.exif.get('Orientation');\n                    }\n                    if (options.thumbnail) {\n                        thumbnail = data.exif.get('Thumbnail');\n                        if (thumbnail) {\n                            loadImage(thumbnail, resolve, options);\n                            return dfd.promise();\n                        }\n                    }\n                    // Prevent orienting the same image twice:\n                    if (data.orientation) {\n                        delete options.orientation;\n                    } else {\n                        data.orientation = options.orientation;\n                    }\n                }\n                if (img) {\n                    resolve(loadImage.scale(img, options));\n                    return dfd.promise();\n                }\n                return data;\n            },\n\n            // Saves the processed image given as data.canvas\n            // inplace at data.index of data.files:\n            saveImage: function (data, options) {\n                if (!data.canvas || options.disabled) {\n                    return data;\n                }\n                var that = this,\n                    file = data.files[data.index],\n                    dfd = $.Deferred();\n                if (data.canvas.toBlob) {\n                    data.canvas.toBlob(\n                        function (blob) {\n                            if (!blob.name) {\n                                if (file.type === blob.type) {\n                                    blob.name = file.name;\n                                } else if (file.name) {\n                                    blob.name = file.name.replace(\n                                        /\\.\\w+$/,\n                                        '.' + blob.type.substr(6)\n                                    );\n                                }\n                            }\n                            // Don't restore invalid meta data:\n                            if (file.type !== blob.type) {\n                                delete data.imageHead;\n                            }\n                            // Store the created blob at the position\n                            // of the original file in the files list:\n                            data.files[data.index] = blob;\n                            dfd.resolveWith(that, [data]);\n                        },\n                        options.type || file.type,\n                        options.quality\n                    );\n                } else {\n                    return data;\n                }\n                return dfd.promise();\n            },\n\n            loadImageMetaData: function (data, options) {\n                if (options.disabled) {\n                    return data;\n                }\n                var that = this,\n                    dfd = $.Deferred();\n                loadImage.parseMetaData(data.files[data.index], function (result) {\n                    $.extend(data, result);\n                    dfd.resolveWith(that, [data]);\n                }, options);\n                return dfd.promise();\n            },\n\n            saveImageMetaData: function (data, options) {\n                if (!(data.imageHead && data.canvas &&\n                        data.canvas.toBlob && !options.disabled)) {\n                    return data;\n                }\n                var file = data.files[data.index],\n                    blob = new Blob([\n                        data.imageHead,\n                        // Resized images always have a head size of 20 bytes,\n                        // including the JPEG marker and a minimal JFIF header:\n                        this._blobSlice.call(file, 20)\n                    ], {type: file.type});\n                blob.name = file.name;\n                data.files[data.index] = blob;\n                return data;\n            },\n\n            // Sets the resized version of the image as a property of the\n            // file object, must be called after \"saveImage\":\n            setImage: function (data, options) {\n                if (data.preview && !options.disabled) {\n                    data.files[data.index][options.name || 'preview'] = data.preview;\n                }\n                return data;\n            },\n\n            deleteImageReferences: function (data, options) {\n                if (!options.disabled) {\n                    delete data.img;\n                    delete data.canvas;\n                    delete data.preview;\n                    delete data.imageHead;\n                }\n                return data;\n            }\n\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/jquery.fileupload-jquery-ui.js",
    "content": "/*\n * jQuery File Upload jQuery UI Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            './jquery.fileupload-ui'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('./jquery.fileupload-ui')\n        );\n    } else {\n        // Browser globals:\n        factory(window.jQuery);\n    }\n}(function ($) {\n    'use strict';\n\n    $.widget('blueimp.fileupload', $.blueimp.fileupload, {\n\n        options: {\n            processdone: function (e, data) {\n                data.context.find('.start').button('enable');\n            },\n            progress: function (e, data) {\n                if (data.context) {\n                    data.context.find('.progress').progressbar(\n                        'option',\n                        'value',\n                        parseInt(data.loaded / data.total * 100, 10)\n                    );\n                }\n            },\n            progressall: function (e, data) {\n                var $this = $(this);\n                $this.find('.fileupload-progress')\n                    .find('.progress').progressbar(\n                        'option',\n                        'value',\n                        parseInt(data.loaded / data.total * 100, 10)\n                    ).end()\n                    .find('.progress-extended').each(function () {\n                        $(this).html(\n                            ($this.data('blueimp-fileupload') ||\n                                    $this.data('fileupload'))\n                                ._renderExtendedProgress(data)\n                        );\n                    });\n            }\n        },\n\n        _renderUpload: function (func, files) {\n            var node = this._super(func, files),\n                showIconText = $(window).width() > 480;\n            node.find('.progress').empty().progressbar();\n            node.find('.start').button({\n                icons: {primary: 'ui-icon-circle-arrow-e'},\n                text: showIconText\n            });\n            node.find('.cancel').button({\n                icons: {primary: 'ui-icon-cancel'},\n                text: showIconText\n            });\n            if (node.hasClass('fade')) {\n                node.hide();\n            }\n            return node;\n        },\n\n        _renderDownload: function (func, files) {\n            var node = this._super(func, files),\n                showIconText = $(window).width() > 480;\n            node.find('.delete').button({\n                icons: {primary: 'ui-icon-trash'},\n                text: showIconText\n            });\n            if (node.hasClass('fade')) {\n                node.hide();\n            }\n            return node;\n        },\n\n        _startHandler: function (e) {\n            $(e.currentTarget).button('disable');\n            this._super(e);\n        },\n\n        _transition: function (node) {\n            var deferred = $.Deferred();\n            if (node.hasClass('fade')) {\n                node.fadeToggle(\n                    this.options.transitionDuration,\n                    this.options.transitionEasing,\n                    function () {\n                        deferred.resolveWith(node);\n                    }\n                );\n            } else {\n                deferred.resolveWith(node);\n            }\n            return deferred;\n        },\n\n        _create: function () {\n            this._super();\n            this.element\n                .find('.fileupload-buttonbar')\n                .find('.fileinput-button').each(function () {\n                    var input = $(this).find('input:file').detach();\n                    $(this)\n                        .button({icons: {primary: 'ui-icon-plusthick'}})\n                        .append(input);\n                })\n                .end().find('.start')\n                .button({icons: {primary: 'ui-icon-circle-arrow-e'}})\n                .end().find('.cancel')\n                .button({icons: {primary: 'ui-icon-cancel'}})\n                .end().find('.delete')\n                .button({icons: {primary: 'ui-icon-trash'}})\n                .end().find('.progress').progressbar();\n        },\n\n        _destroy: function () {\n            this.element\n                .find('.fileupload-buttonbar')\n                .find('.fileinput-button').each(function () {\n                    var input = $(this).find('input:file').detach();\n                    $(this)\n                        .button('destroy')\n                        .append(input);\n                })\n                .end().find('.start')\n                .button('destroy')\n                .end().find('.cancel')\n                .button('destroy')\n                .end().find('.delete')\n                .button('destroy')\n                .end().find('.progress').progressbar('destroy');\n            this._super();\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/jquery.fileupload-process.js",
    "content": "/*\n * jQuery File Upload Processing Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2012, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            './jquery.fileupload'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('./jquery.fileupload')\n        );\n    } else {\n        // Browser globals:\n        factory(\n            window.jQuery\n        );\n    }\n}(function ($) {\n    'use strict';\n\n    var originalAdd = $.blueimp.fileupload.prototype.options.add;\n\n    // The File Upload Processing plugin extends the fileupload widget\n    // with file processing functionality:\n    $.widget('blueimp.fileupload', $.blueimp.fileupload, {\n\n        options: {\n            // The list of processing actions:\n            processQueue: [\n                /*\n                {\n                    action: 'log',\n                    type: 'debug'\n                }\n                */\n            ],\n            add: function (e, data) {\n                var $this = $(this);\n                data.process(function () {\n                    return $this.fileupload('process', data);\n                });\n                originalAdd.call(this, e, data);\n            }\n        },\n\n        processActions: {\n            /*\n            log: function (data, options) {\n                console[options.type](\n                    'Processing \"' + data.files[data.index].name + '\"'\n                );\n            }\n            */\n        },\n\n        _processFile: function (data, originalData) {\n            var that = this,\n                dfd = $.Deferred().resolveWith(that, [data]),\n                chain = dfd.promise();\n            this._trigger('process', null, data);\n            $.each(data.processQueue, function (i, settings) {\n                var func = function (data) {\n                    if (originalData.errorThrown) {\n                        return $.Deferred()\n                                .rejectWith(that, [originalData]).promise();\n                    }\n                    return that.processActions[settings.action].call(\n                        that,\n                        data,\n                        settings\n                    );\n                };\n                chain = chain.then(func, settings.always && func);\n            });\n            chain\n                .done(function () {\n                    that._trigger('processdone', null, data);\n                    that._trigger('processalways', null, data);\n                })\n                .fail(function () {\n                    that._trigger('processfail', null, data);\n                    that._trigger('processalways', null, data);\n                });\n            return chain;\n        },\n\n        // Replaces the settings of each processQueue item that\n        // are strings starting with an \"@\", using the remaining\n        // substring as key for the option map,\n        // e.g. \"@autoUpload\" is replaced with options.autoUpload:\n        _transformProcessQueue: function (options) {\n            var processQueue = [];\n            $.each(options.processQueue, function () {\n                var settings = {},\n                    action = this.action,\n                    prefix = this.prefix === true ? action : this.prefix;\n                $.each(this, function (key, value) {\n                    if ($.type(value) === 'string' &&\n                            value.charAt(0) === '@') {\n                        settings[key] = options[\n                            value.slice(1) || (prefix ? prefix +\n                                key.charAt(0).toUpperCase() + key.slice(1) : key)\n                        ];\n                    } else {\n                        settings[key] = value;\n                    }\n\n                });\n                processQueue.push(settings);\n            });\n            options.processQueue = processQueue;\n        },\n\n        // Returns the number of files currently in the processsing queue:\n        processing: function () {\n            return this._processing;\n        },\n\n        // Processes the files given as files property of the data parameter,\n        // returns a Promise object that allows to bind callbacks:\n        process: function (data) {\n            var that = this,\n                options = $.extend({}, this.options, data);\n            if (options.processQueue && options.processQueue.length) {\n                this._transformProcessQueue(options);\n                if (this._processing === 0) {\n                    this._trigger('processstart');\n                }\n                $.each(data.files, function (index) {\n                    var opts = index ? $.extend({}, options) : options,\n                        func = function () {\n                            if (data.errorThrown) {\n                                return $.Deferred()\n                                        .rejectWith(that, [data]).promise();\n                            }\n                            return that._processFile(opts, data);\n                        };\n                    opts.index = index;\n                    that._processing += 1;\n                    that._processingQueue = that._processingQueue.then(func, func)\n                        .always(function () {\n                            that._processing -= 1;\n                            if (that._processing === 0) {\n                                that._trigger('processstop');\n                            }\n                        });\n                });\n            }\n            return this._processingQueue;\n        },\n\n        _create: function () {\n            this._super();\n            this._processing = 0;\n            this._processingQueue = $.Deferred().resolveWith(this)\n                .promise();\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/jquery.fileupload-ui.js",
    "content": "/*\n * jQuery File Upload User Interface Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2010, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            'blueimp-tmpl',\n            './jquery.fileupload-image',\n            './jquery.fileupload-audio',\n            './jquery.fileupload-video',\n            './jquery.fileupload-validate'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('blueimp-tmpl'),\n            require('./jquery.fileupload-image'),\n            require('./jquery.fileupload-video'),\n            require('./jquery.fileupload-validate')\n        );\n    } else {\n        // Browser globals:\n        factory(\n            window.jQuery,\n            window.tmpl\n        );\n    }\n}(function ($, tmpl) {\n    'use strict';\n\n    $.blueimp.fileupload.prototype._specialOptions.push(\n        'filesContainer',\n        'uploadTemplateId',\n        'downloadTemplateId'\n    );\n\n    // The UI version extends the file upload widget\n    // and adds complete user interface interaction:\n    $.widget('blueimp.fileupload', $.blueimp.fileupload, {\n\n        options: {\n            // By default, files added to the widget are uploaded as soon\n            // as the user clicks on the start buttons. To enable automatic\n            // uploads, set the following option to true:\n            autoUpload: false,\n            // The ID of the upload template:\n            uploadTemplateId: 'template-upload',\n            // The ID of the download template:\n            downloadTemplateId: 'template-download',\n            // The container for the list of files. If undefined, it is set to\n            // an element with class \"files\" inside of the widget element:\n            filesContainer: undefined,\n            // By default, files are appended to the files container.\n            // Set the following option to true, to prepend files instead:\n            prependFiles: false,\n            // The expected data type of the upload response, sets the dataType\n            // option of the $.ajax upload requests:\n            dataType: 'json',\n\n            // Error and info messages:\n            messages: {\n                unknownError: 'Unknown error'\n            },\n\n            // Function returning the current number of files,\n            // used by the maxNumberOfFiles validation:\n            getNumberOfFiles: function () {\n                return this.filesContainer.children()\n                    .not('.processing').length;\n            },\n\n            // Callback to retrieve the list of files from the server response:\n            getFilesFromResponse: function (data) {\n                if (data.result && $.isArray(data.result.files)) {\n                    return data.result.files;\n                }\n                return [];\n            },\n\n            // The add callback is invoked as soon as files are added to the fileupload\n            // widget (via file input selection, drag & drop or add API call).\n            // See the basic file upload widget for more information:\n            add: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var $this = $(this),\n                    that = $this.data('blueimp-fileupload') ||\n                        $this.data('fileupload'),\n                    options = that.options;\n                data.context = that._renderUpload(data.files)\n                    .data('data', data)\n                    .addClass('processing');\n                options.filesContainer[\n                    options.prependFiles ? 'prepend' : 'append'\n                ](data.context);\n                that._forceReflow(data.context);\n                that._transition(data.context);\n                data.process(function () {\n                    return $this.fileupload('process', data);\n                }).always(function () {\n                    data.context.each(function (index) {\n                        $(this).find('.size').text(\n                            that._formatFileSize(data.files[index].size)\n                        );\n                    }).removeClass('processing');\n                    that._renderPreviews(data);\n                }).done(function () {\n                    data.context.find('.start').prop('disabled', false);\n                    if ((that._trigger('added', e, data) !== false) &&\n                            (options.autoUpload || data.autoUpload) &&\n                            data.autoUpload !== false) {\n                        data.submit();\n                    }\n                }).fail(function () {\n                    if (data.files.error) {\n                        data.context.each(function (index) {\n                            var error = data.files[index].error;\n                            if (error) {\n                                $(this).find('.error').text(error);\n                            }\n                        });\n                    }\n                });\n            },\n            // Callback for the start of each file upload request:\n            send: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var that = $(this).data('blueimp-fileupload') ||\n                        $(this).data('fileupload');\n                if (data.context && data.dataType &&\n                        data.dataType.substr(0, 6) === 'iframe') {\n                    // Iframe Transport does not support progress events.\n                    // In lack of an indeterminate progress bar, we set\n                    // the progress to 100%, showing the full animated bar:\n                    data.context\n                        .find('.progress').addClass(\n                            !$.support.transition && 'progress-animated'\n                        )\n                        .attr('aria-valuenow', 100)\n                        .children().first().css(\n                            'width',\n                            '100%'\n                        );\n                }\n                return that._trigger('sent', e, data);\n            },\n            // Callback for successful uploads:\n            done: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var that = $(this).data('blueimp-fileupload') ||\n                        $(this).data('fileupload'),\n                    getFilesFromResponse = data.getFilesFromResponse ||\n                        that.options.getFilesFromResponse,\n                    files = getFilesFromResponse(data),\n                    template,\n                    deferred;\n                if (data.context) {\n                    data.context.each(function (index) {\n                        var file = files[index] ||\n                                {error: 'Empty file upload result'};\n                        deferred = that._addFinishedDeferreds();\n                        that._transition($(this)).done(\n                            function () {\n                                var node = $(this);\n                                template = that._renderDownload([file])\n                                    .replaceAll(node);\n                                that._forceReflow(template);\n                                that._transition(template).done(\n                                    function () {\n                                        data.context = $(this);\n                                        that._trigger('completed', e, data);\n                                        that._trigger('finished', e, data);\n                                        deferred.resolve();\n                                    }\n                                );\n                            }\n                        );\n                    });\n                } else {\n                    template = that._renderDownload(files)[\n                        that.options.prependFiles ? 'prependTo' : 'appendTo'\n                    ](that.options.filesContainer);\n                    that._forceReflow(template);\n                    deferred = that._addFinishedDeferreds();\n                    that._transition(template).done(\n                        function () {\n                            data.context = $(this);\n                            that._trigger('completed', e, data);\n                            that._trigger('finished', e, data);\n                            deferred.resolve();\n                        }\n                    );\n                }\n            },\n            // Callback for failed (abort or error) uploads:\n            fail: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var that = $(this).data('blueimp-fileupload') ||\n                        $(this).data('fileupload'),\n                    template,\n                    deferred;\n                if (data.context) {\n                    data.context.each(function (index) {\n                        if (data.errorThrown !== 'abort') {\n                            var file = data.files[index];\n                            file.error = file.error || data.errorThrown ||\n                                data.i18n('unknownError');\n                            deferred = that._addFinishedDeferreds();\n                            that._transition($(this)).done(\n                                function () {\n                                    var node = $(this);\n                                    template = that._renderDownload([file])\n                                        .replaceAll(node);\n                                    that._forceReflow(template);\n                                    that._transition(template).done(\n                                        function () {\n                                            data.context = $(this);\n                                            that._trigger('failed', e, data);\n                                            that._trigger('finished', e, data);\n                                            deferred.resolve();\n                                        }\n                                    );\n                                }\n                            );\n                        } else {\n                            deferred = that._addFinishedDeferreds();\n                            that._transition($(this)).done(\n                                function () {\n                                    $(this).remove();\n                                    that._trigger('failed', e, data);\n                                    that._trigger('finished', e, data);\n                                    deferred.resolve();\n                                }\n                            );\n                        }\n                    });\n                } else if (data.errorThrown !== 'abort') {\n                    data.context = that._renderUpload(data.files)[\n                        that.options.prependFiles ? 'prependTo' : 'appendTo'\n                    ](that.options.filesContainer)\n                        .data('data', data);\n                    that._forceReflow(data.context);\n                    deferred = that._addFinishedDeferreds();\n                    that._transition(data.context).done(\n                        function () {\n                            data.context = $(this);\n                            that._trigger('failed', e, data);\n                            that._trigger('finished', e, data);\n                            deferred.resolve();\n                        }\n                    );\n                } else {\n                    that._trigger('failed', e, data);\n                    that._trigger('finished', e, data);\n                    that._addFinishedDeferreds().resolve();\n                }\n            },\n            // Callback for upload progress events:\n            progress: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var progress = Math.floor(data.loaded / data.total * 100);\n                if (data.context) {\n                    data.context.each(function () {\n                        $(this).find('.progress')\n                            .attr('aria-valuenow', progress)\n                            .children().first().css(\n                                'width',\n                                progress + '%'\n                            );\n                    });\n                }\n            },\n            // Callback for global upload progress events:\n            progressall: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var $this = $(this),\n                    progress = Math.floor(data.loaded / data.total * 100),\n                    globalProgressNode = $this.find('.fileupload-progress'),\n                    extendedProgressNode = globalProgressNode\n                        .find('.progress-extended');\n                if (extendedProgressNode.length) {\n                    extendedProgressNode.html(\n                        ($this.data('blueimp-fileupload') || $this.data('fileupload'))\n                            ._renderExtendedProgress(data)\n                    );\n                }\n                globalProgressNode\n                    .find('.progress')\n                    .attr('aria-valuenow', progress)\n                    .children().first().css(\n                        'width',\n                        progress + '%'\n                    );\n            },\n            // Callback for uploads start, equivalent to the global ajaxStart event:\n            start: function (e) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var that = $(this).data('blueimp-fileupload') ||\n                        $(this).data('fileupload');\n                that._resetFinishedDeferreds();\n                that._transition($(this).find('.fileupload-progress')).done(\n                    function () {\n                        that._trigger('started', e);\n                    }\n                );\n            },\n            // Callback for uploads stop, equivalent to the global ajaxStop event:\n            stop: function (e) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var that = $(this).data('blueimp-fileupload') ||\n                        $(this).data('fileupload'),\n                    deferred = that._addFinishedDeferreds();\n                $.when.apply($, that._getFinishedDeferreds())\n                    .done(function () {\n                        that._trigger('stopped', e);\n                    });\n                that._transition($(this).find('.fileupload-progress')).done(\n                    function () {\n                        $(this).find('.progress')\n                            .attr('aria-valuenow', '0')\n                            .children().first().css('width', '0%');\n                        $(this).find('.progress-extended').html('&nbsp;');\n                        deferred.resolve();\n                    }\n                );\n            },\n            processstart: function (e) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                $(this).addClass('fileupload-processing');\n            },\n            processstop: function (e) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                $(this).removeClass('fileupload-processing');\n            },\n            // Callback for file deletion:\n            destroy: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var that = $(this).data('blueimp-fileupload') ||\n                        $(this).data('fileupload'),\n                    removeNode = function () {\n                        that._transition(data.context).done(\n                            function () {\n                                $(this).remove();\n                                that._trigger('destroyed', e, data);\n                            }\n                        );\n                    };\n                if (data.url) {\n                    data.dataType = data.dataType || that.options.dataType;\n                    $.ajax(data).done(removeNode).fail(function () {\n                        that._trigger('destroyfailed', e, data);\n                    });\n                } else {\n                    removeNode();\n                }\n            }\n        },\n\n        _resetFinishedDeferreds: function () {\n            this._finishedUploads = [];\n        },\n\n        _addFinishedDeferreds: function (deferred) {\n            if (!deferred) {\n                deferred = $.Deferred();\n            }\n            this._finishedUploads.push(deferred);\n            return deferred;\n        },\n\n        _getFinishedDeferreds: function () {\n            return this._finishedUploads;\n        },\n\n        // Link handler, that allows to download files\n        // by drag & drop of the links to the desktop:\n        _enableDragToDesktop: function () {\n            var link = $(this),\n                url = link.prop('href'),\n                name = link.prop('download'),\n                type = 'application/octet-stream';\n            link.bind('dragstart', function (e) {\n                try {\n                    e.originalEvent.dataTransfer.setData(\n                        'DownloadURL',\n                        [type, name, url].join(':')\n                    );\n                } catch (ignore) {}\n            });\n        },\n\n        _formatFileSize: function (bytes) {\n            if (typeof bytes !== 'number') {\n                return '';\n            }\n            if (bytes >= 1000000000) {\n                return (bytes / 1000000000).toFixed(2) + ' GB';\n            }\n            if (bytes >= 1000000) {\n                return (bytes / 1000000).toFixed(2) + ' MB';\n            }\n            return (bytes / 1000).toFixed(2) + ' KB';\n        },\n\n        _formatBitrate: function (bits) {\n            if (typeof bits !== 'number') {\n                return '';\n            }\n            if (bits >= 1000000000) {\n                return (bits / 1000000000).toFixed(2) + ' Gbit/s';\n            }\n            if (bits >= 1000000) {\n                return (bits / 1000000).toFixed(2) + ' Mbit/s';\n            }\n            if (bits >= 1000) {\n                return (bits / 1000).toFixed(2) + ' kbit/s';\n            }\n            return bits.toFixed(2) + ' bit/s';\n        },\n\n        _formatTime: function (seconds) {\n            var date = new Date(seconds * 1000),\n                days = Math.floor(seconds / 86400);\n            days = days ? days + 'd ' : '';\n            return days +\n                ('0' + date.getUTCHours()).slice(-2) + ':' +\n                ('0' + date.getUTCMinutes()).slice(-2) + ':' +\n                ('0' + date.getUTCSeconds()).slice(-2);\n        },\n\n        _formatPercentage: function (floatValue) {\n            return (floatValue * 100).toFixed(2) + ' %';\n        },\n\n        _renderExtendedProgress: function (data) {\n            return this._formatBitrate(data.bitrate) + ' | ' +\n                this._formatTime(\n                    (data.total - data.loaded) * 8 / data.bitrate\n                ) + ' | ' +\n                this._formatPercentage(\n                    data.loaded / data.total\n                ) + ' | ' +\n                this._formatFileSize(data.loaded) + ' / ' +\n                this._formatFileSize(data.total);\n        },\n\n        _renderTemplate: function (func, files) {\n            if (!func) {\n                return $();\n            }\n            var result = func({\n                files: files,\n                formatFileSize: this._formatFileSize,\n                options: this.options\n            });\n            if (result instanceof $) {\n                return result;\n            }\n            return $(this.options.templatesContainer).html(result).children();\n        },\n\n        _renderPreviews: function (data) {\n            data.context.find('.preview').each(function (index, elm) {\n                $(elm).append(data.files[index].preview);\n            });\n        },\n\n        _renderUpload: function (files) {\n            return this._renderTemplate(\n                this.options.uploadTemplate,\n                files\n            );\n        },\n\n        _renderDownload: function (files) {\n            return this._renderTemplate(\n                this.options.downloadTemplate,\n                files\n            ).find('a[download]').each(this._enableDragToDesktop).end();\n        },\n\n        _startHandler: function (e) {\n            e.preventDefault();\n            var button = $(e.currentTarget),\n                template = button.closest('.template-upload'),\n                data = template.data('data');\n            button.prop('disabled', true);\n            if (data && data.submit) {\n                data.submit();\n            }\n        },\n\n        _cancelHandler: function (e) {\n            e.preventDefault();\n            var template = $(e.currentTarget)\n                    .closest('.template-upload,.template-download'),\n                data = template.data('data') || {};\n            data.context = data.context || template;\n            if (data.abort) {\n                data.abort();\n            } else {\n                data.errorThrown = 'abort';\n                this._trigger('fail', e, data);\n            }\n        },\n\n        _deleteHandler: function (e) {\n            e.preventDefault();\n            var button = $(e.currentTarget);\n            this._trigger('destroy', e, $.extend({\n                context: button.closest('.template-download'),\n                type: 'DELETE'\n            }, button.data()));\n        },\n\n        _forceReflow: function (node) {\n            return $.support.transition && node.length &&\n                node[0].offsetWidth;\n        },\n\n        _transition: function (node) {\n            var dfd = $.Deferred();\n            if ($.support.transition && node.hasClass('fade') && node.is(':visible')) {\n                node.bind(\n                    $.support.transition.end,\n                    function (e) {\n                        // Make sure we don't respond to other transitions events\n                        // in the container element, e.g. from button elements:\n                        if (e.target === node[0]) {\n                            node.unbind($.support.transition.end);\n                            dfd.resolveWith(node);\n                        }\n                    }\n                ).toggleClass('in');\n            } else {\n                node.toggleClass('in');\n                dfd.resolveWith(node);\n            }\n            return dfd;\n        },\n\n        _initButtonBarEventHandlers: function () {\n            var fileUploadButtonBar = this.element.find('.fileupload-buttonbar'),\n                filesList = this.options.filesContainer;\n            this._on(fileUploadButtonBar.find('.start'), {\n                click: function (e) {\n                    e.preventDefault();\n                    filesList.find('.start').click();\n                }\n            });\n            this._on(fileUploadButtonBar.find('.cancel'), {\n                click: function (e) {\n                    e.preventDefault();\n                    filesList.find('.cancel').click();\n                }\n            });\n            this._on(fileUploadButtonBar.find('.delete'), {\n                click: function (e) {\n                    e.preventDefault();\n                    filesList.find('.toggle:checked')\n                        .closest('.template-download')\n                        .find('.delete').click();\n                    fileUploadButtonBar.find('.toggle')\n                        .prop('checked', false);\n                }\n            });\n            this._on(fileUploadButtonBar.find('.toggle'), {\n                change: function (e) {\n                    filesList.find('.toggle').prop(\n                        'checked',\n                        $(e.currentTarget).is(':checked')\n                    );\n                }\n            });\n        },\n\n        _destroyButtonBarEventHandlers: function () {\n            this._off(\n                this.element.find('.fileupload-buttonbar')\n                    .find('.start, .cancel, .delete'),\n                'click'\n            );\n            this._off(\n                this.element.find('.fileupload-buttonbar .toggle'),\n                'change.'\n            );\n        },\n\n        _initEventHandlers: function () {\n            this._super();\n            this._on(this.options.filesContainer, {\n                'click .start': this._startHandler,\n                'click .cancel': this._cancelHandler,\n                'click .delete': this._deleteHandler\n            });\n            this._initButtonBarEventHandlers();\n        },\n\n        _destroyEventHandlers: function () {\n            this._destroyButtonBarEventHandlers();\n            this._off(this.options.filesContainer, 'click');\n            this._super();\n        },\n\n        _enableFileInputButton: function () {\n            this.element.find('.fileinput-button input')\n                .prop('disabled', false)\n                .parent().removeClass('disabled');\n        },\n\n        _disableFileInputButton: function () {\n            this.element.find('.fileinput-button input')\n                .prop('disabled', true)\n                .parent().addClass('disabled');\n        },\n\n        _initTemplates: function () {\n            var options = this.options;\n            options.templatesContainer = this.document[0].createElement(\n                options.filesContainer.prop('nodeName')\n            );\n            if (tmpl) {\n                if (options.uploadTemplateId) {\n                    options.uploadTemplate = tmpl(options.uploadTemplateId);\n                }\n                if (options.downloadTemplateId) {\n                    options.downloadTemplate = tmpl(options.downloadTemplateId);\n                }\n            }\n        },\n\n        _initFilesContainer: function () {\n            var options = this.options;\n            if (options.filesContainer === undefined) {\n                options.filesContainer = this.element.find('.files');\n            } else if (!(options.filesContainer instanceof $)) {\n                options.filesContainer = $(options.filesContainer);\n            }\n        },\n\n        _initSpecialOptions: function () {\n            this._super();\n            this._initFilesContainer();\n            this._initTemplates();\n        },\n\n        _create: function () {\n            this._super();\n            this._resetFinishedDeferreds();\n            if (!$.support.fileInput) {\n                this._disableFileInputButton();\n            }\n        },\n\n        enable: function () {\n            var wasDisabled = false;\n            if (this.options.disabled) {\n                wasDisabled = true;\n            }\n            this._super();\n            if (wasDisabled) {\n                this.element.find('input, button').prop('disabled', false);\n                this._enableFileInputButton();\n            }\n        },\n\n        disable: function () {\n            if (!this.options.disabled) {\n                this.element.find('input, button').prop('disabled', true);\n                this._disableFileInputButton();\n            }\n            this._super();\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/jquery.fileupload-validate.js",
    "content": "/*\n * jQuery File Upload Validation Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* global define, require, window */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            './jquery.fileupload-process'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('./jquery.fileupload-process')\n        );\n    } else {\n        // Browser globals:\n        factory(\n            window.jQuery\n        );\n    }\n}(function ($) {\n    'use strict';\n\n    // Append to the default processQueue:\n    $.blueimp.fileupload.prototype.options.processQueue.push(\n        {\n            action: 'validate',\n            // Always trigger this action,\n            // even if the previous action was rejected:\n            always: true,\n            // Options taken from the global options map:\n            acceptFileTypes: '@',\n            maxFileSize: '@',\n            minFileSize: '@',\n            maxNumberOfFiles: '@',\n            disabled: '@disableValidation'\n        }\n    );\n\n    // The File Upload Validation plugin extends the fileupload widget\n    // with file validation functionality:\n    $.widget('blueimp.fileupload', $.blueimp.fileupload, {\n\n        options: {\n            /*\n            // The regular expression for allowed file types, matches\n            // against either file type or file name:\n            acceptFileTypes: /(\\.|\\/)(gif|jpe?g|png)$/i,\n            // The maximum allowed file size in bytes:\n            maxFileSize: 10000000, // 10 MB\n            // The minimum allowed file size in bytes:\n            minFileSize: undefined, // No minimal file size\n            // The limit of files to be uploaded:\n            maxNumberOfFiles: 10,\n            */\n\n            // Function returning the current number of files,\n            // has to be overriden for maxNumberOfFiles validation:\n            getNumberOfFiles: $.noop,\n\n            // Error and info messages:\n            messages: {\n                maxNumberOfFiles: 'Maximum number of files exceeded',\n                acceptFileTypes: 'File type not allowed',\n                maxFileSize: 'File is too large',\n                minFileSize: 'File is too small'\n            }\n        },\n\n        processActions: {\n\n            validate: function (data, options) {\n                if (options.disabled) {\n                    return data;\n                }\n                var dfd = $.Deferred(),\n                    settings = this.options,\n                    file = data.files[data.index],\n                    fileSize;\n                if (options.minFileSize || options.maxFileSize) {\n                    fileSize = file.size;\n                }\n                if ($.type(options.maxNumberOfFiles) === 'number' &&\n                        (settings.getNumberOfFiles() || 0) + data.files.length >\n                            options.maxNumberOfFiles) {\n                    file.error = settings.i18n('maxNumberOfFiles');\n                } else if (options.acceptFileTypes &&\n                        !(options.acceptFileTypes.test(file.type) ||\n                        options.acceptFileTypes.test(file.name))) {\n                    file.error = settings.i18n('acceptFileTypes');\n                } else if (fileSize > options.maxFileSize) {\n                    file.error = settings.i18n('maxFileSize');\n                } else if ($.type(fileSize) === 'number' &&\n                        fileSize < options.minFileSize) {\n                    file.error = settings.i18n('minFileSize');\n                } else {\n                    delete file.error;\n                }\n                if (file.error || data.files.error) {\n                    data.files.error = true;\n                    dfd.rejectWith(this, [data]);\n                } else {\n                    dfd.resolveWith(this, [data]);\n                }\n                return dfd.promise();\n            }\n\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/jquery.fileupload-video.js",
    "content": "/*\n * jQuery File Upload Video Preview Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window, document */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            'load-image',\n            './jquery.fileupload-process'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('blueimp-load-image/js/load-image'),\n            require('./jquery.fileupload-process')\n        );\n    } else {\n        // Browser globals:\n        factory(\n            window.jQuery,\n            window.loadImage\n        );\n    }\n}(function ($, loadImage) {\n    'use strict';\n\n    // Prepend to the default processQueue:\n    $.blueimp.fileupload.prototype.options.processQueue.unshift(\n        {\n            action: 'loadVideo',\n            // Use the action as prefix for the \"@\" options:\n            prefix: true,\n            fileTypes: '@',\n            maxFileSize: '@',\n            disabled: '@disableVideoPreview'\n        },\n        {\n            action: 'setVideo',\n            name: '@videoPreviewName',\n            disabled: '@disableVideoPreview'\n        }\n    );\n\n    // The File Upload Video Preview plugin extends the fileupload widget\n    // with video preview functionality:\n    $.widget('blueimp.fileupload', $.blueimp.fileupload, {\n\n        options: {\n            // The regular expression for the types of video files to load,\n            // matched against the file type:\n            loadVideoFileTypes: /^video\\/.*$/\n        },\n\n        _videoElement: document.createElement('video'),\n\n        processActions: {\n\n            // Loads the video file given via data.files and data.index\n            // as video element if the browser supports playing it.\n            // Accepts the options fileTypes (regular expression)\n            // and maxFileSize (integer) to limit the files to load:\n            loadVideo: function (data, options) {\n                if (options.disabled) {\n                    return data;\n                }\n                var file = data.files[data.index],\n                    url,\n                    video;\n                if (this._videoElement.canPlayType &&\n                        this._videoElement.canPlayType(file.type) &&\n                        ($.type(options.maxFileSize) !== 'number' ||\n                            file.size <= options.maxFileSize) &&\n                        (!options.fileTypes ||\n                            options.fileTypes.test(file.type))) {\n                    url = loadImage.createObjectURL(file);\n                    if (url) {\n                        video = this._videoElement.cloneNode(false);\n                        video.src = url;\n                        video.controls = true;\n                        data.video = video;\n                        return data;\n                    }\n                }\n                return data;\n            },\n\n            // Sets the video element as a property of the file object:\n            setVideo: function (data, options) {\n                if (data.video && !options.disabled) {\n                    data.files[data.index][options.name || 'preview'] = data.video;\n                }\n                return data;\n            }\n\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/jquery.fileupload.js",
    "content": "/*\n * jQuery File Upload Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2010, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window, document, location, Blob, FormData */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            'jquery-ui/ui/widget'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('./vendor/jquery.ui.widget')\n        );\n    } else {\n        // Browser globals:\n        factory(window.jQuery);\n    }\n}(function ($) {\n    'use strict';\n\n    // Detect file input support, based on\n    // http://viljamis.com/blog/2012/file-upload-support-on-mobile/\n    $.support.fileInput = !(new RegExp(\n        // Handle devices which give false positives for the feature detection:\n        '(Android (1\\\\.[0156]|2\\\\.[01]))' +\n            '|(Windows Phone (OS 7|8\\\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' +\n            '|(w(eb)?OSBrowser)|(webOS)' +\n            '|(Kindle/(1\\\\.0|2\\\\.[05]|3\\\\.0))'\n    ).test(window.navigator.userAgent) ||\n        // Feature detection for all other devices:\n        $('<input type=\"file\">').prop('disabled'));\n\n    // The FileReader API is not actually used, but works as feature detection,\n    // as some Safari versions (5?) support XHR file uploads via the FormData API,\n    // but not non-multipart XHR file uploads.\n    // window.XMLHttpRequestUpload is not available on IE10, so we check for\n    // window.ProgressEvent instead to detect XHR2 file upload capability:\n    $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader);\n    $.support.xhrFormDataFileUpload = !!window.FormData;\n\n    // Detect support for Blob slicing (required for chunked uploads):\n    $.support.blobSlice = window.Blob && (Blob.prototype.slice ||\n        Blob.prototype.webkitSlice || Blob.prototype.mozSlice);\n\n    // Helper function to create drag handlers for dragover/dragenter/dragleave:\n    function getDragHandler(type) {\n        var isDragOver = type === 'dragover';\n        return function (e) {\n            e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;\n            var dataTransfer = e.dataTransfer;\n            if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 &&\n                    this._trigger(\n                        type,\n                        $.Event(type, {delegatedEvent: e})\n                    ) !== false) {\n                e.preventDefault();\n                if (isDragOver) {\n                    dataTransfer.dropEffect = 'copy';\n                }\n            }\n        };\n    }\n\n    // The fileupload widget listens for change events on file input fields defined\n    // via fileInput setting and paste or drop events of the given dropZone.\n    // In addition to the default jQuery Widget methods, the fileupload widget\n    // exposes the \"add\" and \"send\" methods, to add or directly send files using\n    // the fileupload API.\n    // By default, files added via file input selection, paste, drag & drop or\n    // \"add\" method are uploaded immediately, but it is possible to override\n    // the \"add\" callback option to queue file uploads.\n    $.widget('blueimp.fileupload', {\n\n        options: {\n            // The drop target element(s), by the default the complete document.\n            // Set to null to disable drag & drop support:\n            dropZone: $(document),\n            // The paste target element(s), by the default undefined.\n            // Set to a DOM node or jQuery object to enable file pasting:\n            pasteZone: undefined,\n            // The file input field(s), that are listened to for change events.\n            // If undefined, it is set to the file input fields inside\n            // of the widget element on plugin initialization.\n            // Set to null to disable the change listener.\n            fileInput: undefined,\n            // By default, the file input field is replaced with a clone after\n            // each input field change event. This is required for iframe transport\n            // queues and allows change events to be fired for the same file\n            // selection, but can be disabled by setting the following option to false:\n            replaceFileInput: true,\n            // The parameter name for the file form data (the request argument name).\n            // If undefined or empty, the name property of the file input field is\n            // used, or \"files[]\" if the file input name property is also empty,\n            // can be a string or an array of strings:\n            paramName: undefined,\n            // By default, each file of a selection is uploaded using an individual\n            // request for XHR type uploads. Set to false to upload file\n            // selections in one request each:\n            singleFileUploads: true,\n            // To limit the number of files uploaded with one XHR request,\n            // set the following option to an integer greater than 0:\n            limitMultiFileUploads: undefined,\n            // The following option limits the number of files uploaded with one\n            // XHR request to keep the request size under or equal to the defined\n            // limit in bytes:\n            limitMultiFileUploadSize: undefined,\n            // Multipart file uploads add a number of bytes to each uploaded file,\n            // therefore the following option adds an overhead for each file used\n            // in the limitMultiFileUploadSize configuration:\n            limitMultiFileUploadSizeOverhead: 512,\n            // Set the following option to true to issue all file upload requests\n            // in a sequential order:\n            sequentialUploads: false,\n            // To limit the number of concurrent uploads,\n            // set the following option to an integer greater than 0:\n            limitConcurrentUploads: undefined,\n            // Set the following option to true to force iframe transport uploads:\n            forceIframeTransport: false,\n            // Set the following option to the location of a redirect url on the\n            // origin server, for cross-domain iframe transport uploads:\n            redirect: undefined,\n            // The parameter name for the redirect url, sent as part of the form\n            // data and set to 'redirect' if this option is empty:\n            redirectParamName: undefined,\n            // Set the following option to the location of a postMessage window,\n            // to enable postMessage transport uploads:\n            postMessage: undefined,\n            // By default, XHR file uploads are sent as multipart/form-data.\n            // The iframe transport is always using multipart/form-data.\n            // Set to false to enable non-multipart XHR uploads:\n            multipart: true,\n            // To upload large files in smaller chunks, set the following option\n            // to a preferred maximum chunk size. If set to 0, null or undefined,\n            // or the browser does not support the required Blob API, files will\n            // be uploaded as a whole.\n            maxChunkSize: undefined,\n            // When a non-multipart upload or a chunked multipart upload has been\n            // aborted, this option can be used to resume the upload by setting\n            // it to the size of the already uploaded bytes. This option is most\n            // useful when modifying the options object inside of the \"add\" or\n            // \"send\" callbacks, as the options are cloned for each file upload.\n            uploadedBytes: undefined,\n            // By default, failed (abort or error) file uploads are removed from the\n            // global progress calculation. Set the following option to false to\n            // prevent recalculating the global progress data:\n            recalculateProgress: true,\n            // Interval in milliseconds to calculate and trigger progress events:\n            progressInterval: 100,\n            // Interval in milliseconds to calculate progress bitrate:\n            bitrateInterval: 500,\n            // By default, uploads are started automatically when adding files:\n            autoUpload: true,\n\n            // Error and info messages:\n            messages: {\n                uploadedBytes: 'Uploaded bytes exceed file size'\n            },\n\n            // Translation function, gets the message key to be translated\n            // and an object with context specific data as arguments:\n            i18n: function (message, context) {\n                message = this.messages[message] || message.toString();\n                if (context) {\n                    $.each(context, function (key, value) {\n                        message = message.replace('{' + key + '}', value);\n                    });\n                }\n                return message;\n            },\n\n            // Additional form data to be sent along with the file uploads can be set\n            // using this option, which accepts an array of objects with name and\n            // value properties, a function returning such an array, a FormData\n            // object (for XHR file uploads), or a simple object.\n            // The form of the first fileInput is given as parameter to the function:\n            formData: function (form) {\n                return form.serializeArray();\n            },\n\n            // The add callback is invoked as soon as files are added to the fileupload\n            // widget (via file input selection, drag & drop, paste or add API call).\n            // If the singleFileUploads option is enabled, this callback will be\n            // called once for each file in the selection for XHR file uploads, else\n            // once for each file selection.\n            //\n            // The upload starts when the submit method is invoked on the data parameter.\n            // The data object contains a files property holding the added files\n            // and allows you to override plugin options as well as define ajax settings.\n            //\n            // Listeners for this callback can also be bound the following way:\n            // .bind('fileuploadadd', func);\n            //\n            // data.submit() returns a Promise object and allows to attach additional\n            // handlers using jQuery's Deferred callbacks:\n            // data.submit().done(func).fail(func).always(func);\n            add: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                if (data.autoUpload || (data.autoUpload !== false &&\n                        $(this).fileupload('option', 'autoUpload'))) {\n                    data.process().done(function () {\n                        data.submit();\n                    });\n                }\n            },\n\n            // Other callbacks:\n\n            // Callback for the submit event of each file upload:\n            // submit: function (e, data) {}, // .bind('fileuploadsubmit', func);\n\n            // Callback for the start of each file upload request:\n            // send: function (e, data) {}, // .bind('fileuploadsend', func);\n\n            // Callback for successful uploads:\n            // done: function (e, data) {}, // .bind('fileuploaddone', func);\n\n            // Callback for failed (abort or error) uploads:\n            // fail: function (e, data) {}, // .bind('fileuploadfail', func);\n\n            // Callback for completed (success, abort or error) requests:\n            // always: function (e, data) {}, // .bind('fileuploadalways', func);\n\n            // Callback for upload progress events:\n            // progress: function (e, data) {}, // .bind('fileuploadprogress', func);\n\n            // Callback for global upload progress events:\n            // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func);\n\n            // Callback for uploads start, equivalent to the global ajaxStart event:\n            // start: function (e) {}, // .bind('fileuploadstart', func);\n\n            // Callback for uploads stop, equivalent to the global ajaxStop event:\n            // stop: function (e) {}, // .bind('fileuploadstop', func);\n\n            // Callback for change events of the fileInput(s):\n            // change: function (e, data) {}, // .bind('fileuploadchange', func);\n\n            // Callback for paste events to the pasteZone(s):\n            // paste: function (e, data) {}, // .bind('fileuploadpaste', func);\n\n            // Callback for drop events of the dropZone(s):\n            // drop: function (e, data) {}, // .bind('fileuploaddrop', func);\n\n            // Callback for dragover events of the dropZone(s):\n            // dragover: function (e) {}, // .bind('fileuploaddragover', func);\n\n            // Callback for the start of each chunk upload request:\n            // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func);\n\n            // Callback for successful chunk uploads:\n            // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func);\n\n            // Callback for failed (abort or error) chunk uploads:\n            // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func);\n\n            // Callback for completed (success, abort or error) chunk upload requests:\n            // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func);\n\n            // The plugin options are used as settings object for the ajax calls.\n            // The following are jQuery ajax settings required for the file uploads:\n            processData: false,\n            contentType: false,\n            cache: false,\n            timeout: 0\n        },\n\n        // A list of options that require reinitializing event listeners and/or\n        // special initialization code:\n        _specialOptions: [\n            'fileInput',\n            'dropZone',\n            'pasteZone',\n            'multipart',\n            'forceIframeTransport'\n        ],\n\n        _blobSlice: $.support.blobSlice && function () {\n            var slice = this.slice || this.webkitSlice || this.mozSlice;\n            return slice.apply(this, arguments);\n        },\n\n        _BitrateTimer: function () {\n            this.timestamp = ((Date.now) ? Date.now() : (new Date()).getTime());\n            this.loaded = 0;\n            this.bitrate = 0;\n            this.getBitrate = function (now, loaded, interval) {\n                var timeDiff = now - this.timestamp;\n                if (!this.bitrate || !interval || timeDiff > interval) {\n                    this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;\n                    this.loaded = loaded;\n                    this.timestamp = now;\n                }\n                return this.bitrate;\n            };\n        },\n\n        _isXHRUpload: function (options) {\n            return !options.forceIframeTransport &&\n                ((!options.multipart && $.support.xhrFileUpload) ||\n                $.support.xhrFormDataFileUpload);\n        },\n\n        _getFormData: function (options) {\n            var formData;\n            if ($.type(options.formData) === 'function') {\n                return options.formData(options.form);\n            }\n            if ($.isArray(options.formData)) {\n                return options.formData;\n            }\n            if ($.type(options.formData) === 'object') {\n                formData = [];\n                $.each(options.formData, function (name, value) {\n                    formData.push({name: name, value: value});\n                });\n                return formData;\n            }\n            return [];\n        },\n\n        _getTotal: function (files) {\n            var total = 0;\n            $.each(files, function (index, file) {\n                total += file.size || 1;\n            });\n            return total;\n        },\n\n        _initProgressObject: function (obj) {\n            var progress = {\n                loaded: 0,\n                total: 0,\n                bitrate: 0\n            };\n            if (obj._progress) {\n                $.extend(obj._progress, progress);\n            } else {\n                obj._progress = progress;\n            }\n        },\n\n        _initResponseObject: function (obj) {\n            var prop;\n            if (obj._response) {\n                for (prop in obj._response) {\n                    if (obj._response.hasOwnProperty(prop)) {\n                        delete obj._response[prop];\n                    }\n                }\n            } else {\n                obj._response = {};\n            }\n        },\n\n        _onProgress: function (e, data) {\n            if (e.lengthComputable) {\n                var now = ((Date.now) ? Date.now() : (new Date()).getTime()),\n                    loaded;\n                if (data._time && data.progressInterval &&\n                        (now - data._time < data.progressInterval) &&\n                        e.loaded !== e.total) {\n                    return;\n                }\n                data._time = now;\n                loaded = Math.floor(\n                    e.loaded / e.total * (data.chunkSize || data._progress.total)\n                ) + (data.uploadedBytes || 0);\n                // Add the difference from the previously loaded state\n                // to the global loaded counter:\n                this._progress.loaded += (loaded - data._progress.loaded);\n                this._progress.bitrate = this._bitrateTimer.getBitrate(\n                    now,\n                    this._progress.loaded,\n                    data.bitrateInterval\n                );\n                data._progress.loaded = data.loaded = loaded;\n                data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate(\n                    now,\n                    loaded,\n                    data.bitrateInterval\n                );\n                // Trigger a custom progress event with a total data property set\n                // to the file size(s) of the current upload and a loaded data\n                // property calculated accordingly:\n                this._trigger(\n                    'progress',\n                    $.Event('progress', {delegatedEvent: e}),\n                    data\n                );\n                // Trigger a global progress event for all current file uploads,\n                // including ajax calls queued for sequential file uploads:\n                this._trigger(\n                    'progressall',\n                    $.Event('progressall', {delegatedEvent: e}),\n                    this._progress\n                );\n            }\n        },\n\n        _initProgressListener: function (options) {\n            var that = this,\n                xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr();\n            // Accesss to the native XHR object is required to add event listeners\n            // for the upload progress event:\n            if (xhr.upload) {\n                $(xhr.upload).bind('progress', function (e) {\n                    var oe = e.originalEvent;\n                    // Make sure the progress event properties get copied over:\n                    e.lengthComputable = oe.lengthComputable;\n                    e.loaded = oe.loaded;\n                    e.total = oe.total;\n                    that._onProgress(e, options);\n                });\n                options.xhr = function () {\n                    return xhr;\n                };\n            }\n        },\n\n        _isInstanceOf: function (type, obj) {\n            // Cross-frame instanceof check\n            return Object.prototype.toString.call(obj) === '[object ' + type + ']';\n        },\n\n        _initXHRData: function (options) {\n            var that = this,\n                formData,\n                file = options.files[0],\n                // Ignore non-multipart setting if not supported:\n                multipart = options.multipart || !$.support.xhrFileUpload,\n                paramName = $.type(options.paramName) === 'array' ?\n                    options.paramName[0] : options.paramName;\n            options.headers = $.extend({}, options.headers);\n            if (options.contentRange) {\n                options.headers['Content-Range'] = options.contentRange;\n            }\n            if (!multipart || options.blob || !this._isInstanceOf('File', file)) {\n                options.headers['Content-Disposition'] = 'attachment; filename=\"' +\n                    encodeURI(file.name) + '\"';\n            }\n            if (!multipart) {\n                options.contentType = file.type || 'application/octet-stream';\n                options.data = options.blob || file;\n            } else if ($.support.xhrFormDataFileUpload) {\n                if (options.postMessage) {\n                    // window.postMessage does not allow sending FormData\n                    // objects, so we just add the File/Blob objects to\n                    // the formData array and let the postMessage window\n                    // create the FormData object out of this array:\n                    formData = this._getFormData(options);\n                    if (options.blob) {\n                        formData.push({\n                            name: paramName,\n                            value: options.blob\n                        });\n                    } else {\n                        $.each(options.files, function (index, file) {\n                            formData.push({\n                                name: ($.type(options.paramName) === 'array' &&\n                                    options.paramName[index]) || paramName,\n                                value: file\n                            });\n                        });\n                    }\n                } else {\n                    if (that._isInstanceOf('FormData', options.formData)) {\n                        formData = options.formData;\n                    } else {\n                        formData = new FormData();\n                        $.each(this._getFormData(options), function (index, field) {\n                            formData.append(field.name, field.value);\n                        });\n                    }\n                    if (options.blob) {\n                        formData.append(paramName, options.blob, file.name);\n                    } else {\n                        $.each(options.files, function (index, file) {\n                            // This check allows the tests to run with\n                            // dummy objects:\n                            if (that._isInstanceOf('File', file) ||\n                                    that._isInstanceOf('Blob', file)) {\n                                formData.append(\n                                    ($.type(options.paramName) === 'array' &&\n                                        options.paramName[index]) || paramName,\n                                    file,\n                                    file.uploadName || file.name\n                                );\n                            }\n                        });\n                    }\n                }\n                options.data = formData;\n            }\n            // Blob reference is not needed anymore, free memory:\n            options.blob = null;\n        },\n\n        _initIframeSettings: function (options) {\n            var targetHost = $('<a></a>').prop('href', options.url).prop('host');\n            // Setting the dataType to iframe enables the iframe transport:\n            options.dataType = 'iframe ' + (options.dataType || '');\n            // The iframe transport accepts a serialized array as form data:\n            options.formData = this._getFormData(options);\n            // Add redirect url to form data on cross-domain uploads:\n            if (options.redirect && targetHost && targetHost !== location.host) {\n                options.formData.push({\n                    name: options.redirectParamName || 'redirect',\n                    value: options.redirect\n                });\n            }\n        },\n\n        _initDataSettings: function (options) {\n            if (this._isXHRUpload(options)) {\n                if (!this._chunkedUpload(options, true)) {\n                    if (!options.data) {\n                        this._initXHRData(options);\n                    }\n                    this._initProgressListener(options);\n                }\n                if (options.postMessage) {\n                    // Setting the dataType to postmessage enables the\n                    // postMessage transport:\n                    options.dataType = 'postmessage ' + (options.dataType || '');\n                }\n            } else {\n                this._initIframeSettings(options);\n            }\n        },\n\n        _getParamName: function (options) {\n            var fileInput = $(options.fileInput),\n                paramName = options.paramName;\n            if (!paramName) {\n                paramName = [];\n                fileInput.each(function () {\n                    var input = $(this),\n                        name = input.prop('name') || 'files[]',\n                        i = (input.prop('files') || [1]).length;\n                    while (i) {\n                        paramName.push(name);\n                        i -= 1;\n                    }\n                });\n                if (!paramName.length) {\n                    paramName = [fileInput.prop('name') || 'files[]'];\n                }\n            } else if (!$.isArray(paramName)) {\n                paramName = [paramName];\n            }\n            return paramName;\n        },\n\n        _initFormSettings: function (options) {\n            // Retrieve missing options from the input field and the\n            // associated form, if available:\n            if (!options.form || !options.form.length) {\n                options.form = $(options.fileInput.prop('form'));\n                // If the given file input doesn't have an associated form,\n                // use the default widget file input's form:\n                if (!options.form.length) {\n                    options.form = $(this.options.fileInput.prop('form'));\n                }\n            }\n            options.paramName = this._getParamName(options);\n            if (!options.url) {\n                options.url = options.form.prop('action') || location.href;\n            }\n            // The HTTP request method must be \"POST\" or \"PUT\":\n            options.type = (options.type ||\n                ($.type(options.form.prop('method')) === 'string' &&\n                    options.form.prop('method')) || ''\n                ).toUpperCase();\n            if (options.type !== 'POST' && options.type !== 'PUT' &&\n                    options.type !== 'PATCH') {\n                options.type = 'POST';\n            }\n            if (!options.formAcceptCharset) {\n                options.formAcceptCharset = options.form.attr('accept-charset');\n            }\n        },\n\n        _getAJAXSettings: function (data) {\n            var options = $.extend({}, this.options, data);\n            this._initFormSettings(options);\n            this._initDataSettings(options);\n            return options;\n        },\n\n        // jQuery 1.6 doesn't provide .state(),\n        // while jQuery 1.8+ removed .isRejected() and .isResolved():\n        _getDeferredState: function (deferred) {\n            if (deferred.state) {\n                return deferred.state();\n            }\n            if (deferred.isResolved()) {\n                return 'resolved';\n            }\n            if (deferred.isRejected()) {\n                return 'rejected';\n            }\n            return 'pending';\n        },\n\n        // Maps jqXHR callbacks to the equivalent\n        // methods of the given Promise object:\n        _enhancePromise: function (promise) {\n            promise.success = promise.done;\n            promise.error = promise.fail;\n            promise.complete = promise.always;\n            return promise;\n        },\n\n        // Creates and returns a Promise object enhanced with\n        // the jqXHR methods abort, success, error and complete:\n        _getXHRPromise: function (resolveOrReject, context, args) {\n            var dfd = $.Deferred(),\n                promise = dfd.promise();\n            context = context || this.options.context || promise;\n            if (resolveOrReject === true) {\n                dfd.resolveWith(context, args);\n            } else if (resolveOrReject === false) {\n                dfd.rejectWith(context, args);\n            }\n            promise.abort = dfd.promise;\n            return this._enhancePromise(promise);\n        },\n\n        // Adds convenience methods to the data callback argument:\n        _addConvenienceMethods: function (e, data) {\n            var that = this,\n                getPromise = function (args) {\n                    return $.Deferred().resolveWith(that, args).promise();\n                };\n            data.process = function (resolveFunc, rejectFunc) {\n                if (resolveFunc || rejectFunc) {\n                    data._processQueue = this._processQueue =\n                        (this._processQueue || getPromise([this])).then(\n                            function () {\n                                if (data.errorThrown) {\n                                    return $.Deferred()\n                                        .rejectWith(that, [data]).promise();\n                                }\n                                return getPromise(arguments);\n                            }\n                        ).then(resolveFunc, rejectFunc);\n                }\n                return this._processQueue || getPromise([this]);\n            };\n            data.submit = function () {\n                if (this.state() !== 'pending') {\n                    data.jqXHR = this.jqXHR =\n                        (that._trigger(\n                            'submit',\n                            $.Event('submit', {delegatedEvent: e}),\n                            this\n                        ) !== false) && that._onSend(e, this);\n                }\n                return this.jqXHR || that._getXHRPromise();\n            };\n            data.abort = function () {\n                if (this.jqXHR) {\n                    return this.jqXHR.abort();\n                }\n                this.errorThrown = 'abort';\n                that._trigger('fail', null, this);\n                return that._getXHRPromise(false);\n            };\n            data.state = function () {\n                if (this.jqXHR) {\n                    return that._getDeferredState(this.jqXHR);\n                }\n                if (this._processQueue) {\n                    return that._getDeferredState(this._processQueue);\n                }\n            };\n            data.processing = function () {\n                return !this.jqXHR && this._processQueue && that\n                    ._getDeferredState(this._processQueue) === 'pending';\n            };\n            data.progress = function () {\n                return this._progress;\n            };\n            data.response = function () {\n                return this._response;\n            };\n        },\n\n        // Parses the Range header from the server response\n        // and returns the uploaded bytes:\n        _getUploadedBytes: function (jqXHR) {\n            var range = jqXHR.getResponseHeader('Range'),\n                parts = range && range.split('-'),\n                upperBytesPos = parts && parts.length > 1 &&\n                    parseInt(parts[1], 10);\n            return upperBytesPos && upperBytesPos + 1;\n        },\n\n        // Uploads a file in multiple, sequential requests\n        // by splitting the file up in multiple blob chunks.\n        // If the second parameter is true, only tests if the file\n        // should be uploaded in chunks, but does not invoke any\n        // upload requests:\n        _chunkedUpload: function (options, testOnly) {\n            options.uploadedBytes = options.uploadedBytes || 0;\n            var that = this,\n                file = options.files[0],\n                fs = file.size,\n                ub = options.uploadedBytes,\n                mcs = options.maxChunkSize || fs,\n                slice = this._blobSlice,\n                dfd = $.Deferred(),\n                promise = dfd.promise(),\n                jqXHR,\n                upload;\n            if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) ||\n                    options.data) {\n                return false;\n            }\n            if (testOnly) {\n                return true;\n            }\n            if (ub >= fs) {\n                file.error = options.i18n('uploadedBytes');\n                return this._getXHRPromise(\n                    false,\n                    options.context,\n                    [null, 'error', file.error]\n                );\n            }\n            // The chunk upload method:\n            upload = function () {\n                // Clone the options object for each chunk upload:\n                var o = $.extend({}, options),\n                    currentLoaded = o._progress.loaded;\n                o.blob = slice.call(\n                    file,\n                    ub,\n                    ub + mcs,\n                    file.type\n                );\n                // Store the current chunk size, as the blob itself\n                // will be dereferenced after data processing:\n                o.chunkSize = o.blob.size;\n                // Expose the chunk bytes position range:\n                o.contentRange = 'bytes ' + ub + '-' +\n                    (ub + o.chunkSize - 1) + '/' + fs;\n                // Process the upload data (the blob and potential form data):\n                that._initXHRData(o);\n                // Add progress listeners for this chunk upload:\n                that._initProgressListener(o);\n                jqXHR = ((that._trigger('chunksend', null, o) !== false && $.ajax(o)) ||\n                        that._getXHRPromise(false, o.context))\n                    .done(function (result, textStatus, jqXHR) {\n                        ub = that._getUploadedBytes(jqXHR) ||\n                            (ub + o.chunkSize);\n                        // Create a progress event if no final progress event\n                        // with loaded equaling total has been triggered\n                        // for this chunk:\n                        if (currentLoaded + o.chunkSize - o._progress.loaded) {\n                            that._onProgress($.Event('progress', {\n                                lengthComputable: true,\n                                loaded: ub - o.uploadedBytes,\n                                total: ub - o.uploadedBytes\n                            }), o);\n                        }\n                        options.uploadedBytes = o.uploadedBytes = ub;\n                        o.result = result;\n                        o.textStatus = textStatus;\n                        o.jqXHR = jqXHR;\n                        that._trigger('chunkdone', null, o);\n                        that._trigger('chunkalways', null, o);\n                        if (ub < fs) {\n                            // File upload not yet complete,\n                            // continue with the next chunk:\n                            upload();\n                        } else {\n                            dfd.resolveWith(\n                                o.context,\n                                [result, textStatus, jqXHR]\n                            );\n                        }\n                    })\n                    .fail(function (jqXHR, textStatus, errorThrown) {\n                        o.jqXHR = jqXHR;\n                        o.textStatus = textStatus;\n                        o.errorThrown = errorThrown;\n                        that._trigger('chunkfail', null, o);\n                        that._trigger('chunkalways', null, o);\n                        dfd.rejectWith(\n                            o.context,\n                            [jqXHR, textStatus, errorThrown]\n                        );\n                    });\n            };\n            this._enhancePromise(promise);\n            promise.abort = function () {\n                return jqXHR.abort();\n            };\n            upload();\n            return promise;\n        },\n\n        _beforeSend: function (e, data) {\n            if (this._active === 0) {\n                // the start callback is triggered when an upload starts\n                // and no other uploads are currently running,\n                // equivalent to the global ajaxStart event:\n                this._trigger('start');\n                // Set timer for global bitrate progress calculation:\n                this._bitrateTimer = new this._BitrateTimer();\n                // Reset the global progress values:\n                this._progress.loaded = this._progress.total = 0;\n                this._progress.bitrate = 0;\n            }\n            // Make sure the container objects for the .response() and\n            // .progress() methods on the data object are available\n            // and reset to their initial state:\n            this._initResponseObject(data);\n            this._initProgressObject(data);\n            data._progress.loaded = data.loaded = data.uploadedBytes || 0;\n            data._progress.total = data.total = this._getTotal(data.files) || 1;\n            data._progress.bitrate = data.bitrate = 0;\n            this._active += 1;\n            // Initialize the global progress values:\n            this._progress.loaded += data.loaded;\n            this._progress.total += data.total;\n        },\n\n        _onDone: function (result, textStatus, jqXHR, options) {\n            var total = options._progress.total,\n                response = options._response;\n            if (options._progress.loaded < total) {\n                // Create a progress event if no final progress event\n                // with loaded equaling total has been triggered:\n                this._onProgress($.Event('progress', {\n                    lengthComputable: true,\n                    loaded: total,\n                    total: total\n                }), options);\n            }\n            response.result = options.result = result;\n            response.textStatus = options.textStatus = textStatus;\n            response.jqXHR = options.jqXHR = jqXHR;\n            this._trigger('done', null, options);\n        },\n\n        _onFail: function (jqXHR, textStatus, errorThrown, options) {\n            var response = options._response;\n            if (options.recalculateProgress) {\n                // Remove the failed (error or abort) file upload from\n                // the global progress calculation:\n                this._progress.loaded -= options._progress.loaded;\n                this._progress.total -= options._progress.total;\n            }\n            response.jqXHR = options.jqXHR = jqXHR;\n            response.textStatus = options.textStatus = textStatus;\n            response.errorThrown = options.errorThrown = errorThrown;\n            this._trigger('fail', null, options);\n        },\n\n        _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) {\n            // jqXHRorResult, textStatus and jqXHRorError are added to the\n            // options object via done and fail callbacks\n            this._trigger('always', null, options);\n        },\n\n        _onSend: function (e, data) {\n            if (!data.submit) {\n                this._addConvenienceMethods(e, data);\n            }\n            var that = this,\n                jqXHR,\n                aborted,\n                slot,\n                pipe,\n                options = that._getAJAXSettings(data),\n                send = function () {\n                    that._sending += 1;\n                    // Set timer for bitrate progress calculation:\n                    options._bitrateTimer = new that._BitrateTimer();\n                    jqXHR = jqXHR || (\n                        ((aborted || that._trigger(\n                            'send',\n                            $.Event('send', {delegatedEvent: e}),\n                            options\n                        ) === false) &&\n                        that._getXHRPromise(false, options.context, aborted)) ||\n                        that._chunkedUpload(options) || $.ajax(options)\n                    ).done(function (result, textStatus, jqXHR) {\n                        that._onDone(result, textStatus, jqXHR, options);\n                    }).fail(function (jqXHR, textStatus, errorThrown) {\n                        that._onFail(jqXHR, textStatus, errorThrown, options);\n                    }).always(function (jqXHRorResult, textStatus, jqXHRorError) {\n                        that._onAlways(\n                            jqXHRorResult,\n                            textStatus,\n                            jqXHRorError,\n                            options\n                        );\n                        that._sending -= 1;\n                        that._active -= 1;\n                        if (options.limitConcurrentUploads &&\n                                options.limitConcurrentUploads > that._sending) {\n                            // Start the next queued upload,\n                            // that has not been aborted:\n                            var nextSlot = that._slots.shift();\n                            while (nextSlot) {\n                                if (that._getDeferredState(nextSlot) === 'pending') {\n                                    nextSlot.resolve();\n                                    break;\n                                }\n                                nextSlot = that._slots.shift();\n                            }\n                        }\n                        if (that._active === 0) {\n                            // The stop callback is triggered when all uploads have\n                            // been completed, equivalent to the global ajaxStop event:\n                            that._trigger('stop');\n                        }\n                    });\n                    return jqXHR;\n                };\n            this._beforeSend(e, options);\n            if (this.options.sequentialUploads ||\n                    (this.options.limitConcurrentUploads &&\n                    this.options.limitConcurrentUploads <= this._sending)) {\n                if (this.options.limitConcurrentUploads > 1) {\n                    slot = $.Deferred();\n                    this._slots.push(slot);\n                    pipe = slot.then(send);\n                } else {\n                    this._sequence = this._sequence.then(send, send);\n                    pipe = this._sequence;\n                }\n                // Return the piped Promise object, enhanced with an abort method,\n                // which is delegated to the jqXHR object of the current upload,\n                // and jqXHR callbacks mapped to the equivalent Promise methods:\n                pipe.abort = function () {\n                    aborted = [undefined, 'abort', 'abort'];\n                    if (!jqXHR) {\n                        if (slot) {\n                            slot.rejectWith(options.context, aborted);\n                        }\n                        return send();\n                    }\n                    return jqXHR.abort();\n                };\n                return this._enhancePromise(pipe);\n            }\n            return send();\n        },\n\n        _onAdd: function (e, data) {\n            var that = this,\n                result = true,\n                options = $.extend({}, this.options, data),\n                files = data.files,\n                filesLength = files.length,\n                limit = options.limitMultiFileUploads,\n                limitSize = options.limitMultiFileUploadSize,\n                overhead = options.limitMultiFileUploadSizeOverhead,\n                batchSize = 0,\n                paramName = this._getParamName(options),\n                paramNameSet,\n                paramNameSlice,\n                fileSet,\n                i,\n                j = 0;\n            if (!filesLength) {\n                return false;\n            }\n            if (limitSize && files[0].size === undefined) {\n                limitSize = undefined;\n            }\n            if (!(options.singleFileUploads || limit || limitSize) ||\n                    !this._isXHRUpload(options)) {\n                fileSet = [files];\n                paramNameSet = [paramName];\n            } else if (!(options.singleFileUploads || limitSize) && limit) {\n                fileSet = [];\n                paramNameSet = [];\n                for (i = 0; i < filesLength; i += limit) {\n                    fileSet.push(files.slice(i, i + limit));\n                    paramNameSlice = paramName.slice(i, i + limit);\n                    if (!paramNameSlice.length) {\n                        paramNameSlice = paramName;\n                    }\n                    paramNameSet.push(paramNameSlice);\n                }\n            } else if (!options.singleFileUploads && limitSize) {\n                fileSet = [];\n                paramNameSet = [];\n                for (i = 0; i < filesLength; i = i + 1) {\n                    batchSize += files[i].size + overhead;\n                    if (i + 1 === filesLength ||\n                            ((batchSize + files[i + 1].size + overhead) > limitSize) ||\n                            (limit && i + 1 - j >= limit)) {\n                        fileSet.push(files.slice(j, i + 1));\n                        paramNameSlice = paramName.slice(j, i + 1);\n                        if (!paramNameSlice.length) {\n                            paramNameSlice = paramName;\n                        }\n                        paramNameSet.push(paramNameSlice);\n                        j = i + 1;\n                        batchSize = 0;\n                    }\n                }\n            } else {\n                paramNameSet = paramName;\n            }\n            data.originalFiles = files;\n            $.each(fileSet || files, function (index, element) {\n                var newData = $.extend({}, data);\n                newData.files = fileSet ? element : [element];\n                newData.paramName = paramNameSet[index];\n                that._initResponseObject(newData);\n                that._initProgressObject(newData);\n                that._addConvenienceMethods(e, newData);\n                result = that._trigger(\n                    'add',\n                    $.Event('add', {delegatedEvent: e}),\n                    newData\n                );\n                return result;\n            });\n            return result;\n        },\n\n        _replaceFileInput: function (data) {\n            var input = data.fileInput,\n                inputClone = input.clone(true),\n                restoreFocus = input.is(document.activeElement);\n            // Add a reference for the new cloned file input to the data argument:\n            data.fileInputClone = inputClone;\n            $('<form></form>').append(inputClone)[0].reset();\n            // Detaching allows to insert the fileInput on another form\n            // without loosing the file input value:\n            input.after(inputClone).detach();\n            // If the fileInput had focus before it was detached,\n            // restore focus to the inputClone.\n            if (restoreFocus) {\n                inputClone.focus();\n            }\n            // Avoid memory leaks with the detached file input:\n            $.cleanData(input.unbind('remove'));\n            // Replace the original file input element in the fileInput\n            // elements set with the clone, which has been copied including\n            // event handlers:\n            this.options.fileInput = this.options.fileInput.map(function (i, el) {\n                if (el === input[0]) {\n                    return inputClone[0];\n                }\n                return el;\n            });\n            // If the widget has been initialized on the file input itself,\n            // override this.element with the file input clone:\n            if (input[0] === this.element[0]) {\n                this.element = inputClone;\n            }\n        },\n\n        _handleFileTreeEntry: function (entry, path) {\n            var that = this,\n                dfd = $.Deferred(),\n                entries = [],\n                dirReader,\n                errorHandler = function (e) {\n                    if (e && !e.entry) {\n                        e.entry = entry;\n                    }\n                    // Since $.when returns immediately if one\n                    // Deferred is rejected, we use resolve instead.\n                    // This allows valid files and invalid items\n                    // to be returned together in one set:\n                    dfd.resolve([e]);\n                },\n                successHandler = function (entries) {\n                    that._handleFileTreeEntries(\n                        entries,\n                        path + entry.name + '/'\n                    ).done(function (files) {\n                        dfd.resolve(files);\n                    }).fail(errorHandler);\n                },\n                readEntries = function () {\n                    dirReader.readEntries(function (results) {\n                        if (!results.length) {\n                            successHandler(entries);\n                        } else {\n                            entries = entries.concat(results);\n                            readEntries();\n                        }\n                    }, errorHandler);\n                };\n            path = path || '';\n            if (entry.isFile) {\n                if (entry._file) {\n                    // Workaround for Chrome bug #149735\n                    entry._file.relativePath = path;\n                    dfd.resolve(entry._file);\n                } else {\n                    entry.file(function (file) {\n                        file.relativePath = path;\n                        dfd.resolve(file);\n                    }, errorHandler);\n                }\n            } else if (entry.isDirectory) {\n                dirReader = entry.createReader();\n                readEntries();\n            } else {\n                // Return an empy list for file system items\n                // other than files or directories:\n                dfd.resolve([]);\n            }\n            return dfd.promise();\n        },\n\n        _handleFileTreeEntries: function (entries, path) {\n            var that = this;\n            return $.when.apply(\n                $,\n                $.map(entries, function (entry) {\n                    return that._handleFileTreeEntry(entry, path);\n                })\n            ).then(function () {\n                return Array.prototype.concat.apply(\n                    [],\n                    arguments\n                );\n            });\n        },\n\n        _getDroppedFiles: function (dataTransfer) {\n            dataTransfer = dataTransfer || {};\n            var items = dataTransfer.items;\n            if (items && items.length && (items[0].webkitGetAsEntry ||\n                    items[0].getAsEntry)) {\n                return this._handleFileTreeEntries(\n                    $.map(items, function (item) {\n                        var entry;\n                        if (item.webkitGetAsEntry) {\n                            entry = item.webkitGetAsEntry();\n                            if (entry) {\n                                // Workaround for Chrome bug #149735:\n                                entry._file = item.getAsFile();\n                            }\n                            return entry;\n                        }\n                        return item.getAsEntry();\n                    })\n                );\n            }\n            return $.Deferred().resolve(\n                $.makeArray(dataTransfer.files)\n            ).promise();\n        },\n\n        _getSingleFileInputFiles: function (fileInput) {\n            fileInput = $(fileInput);\n            var entries = fileInput.prop('webkitEntries') ||\n                    fileInput.prop('entries'),\n                files,\n                value;\n            if (entries && entries.length) {\n                return this._handleFileTreeEntries(entries);\n            }\n            files = $.makeArray(fileInput.prop('files'));\n            if (!files.length) {\n                value = fileInput.prop('value');\n                if (!value) {\n                    return $.Deferred().resolve([]).promise();\n                }\n                // If the files property is not available, the browser does not\n                // support the File API and we add a pseudo File object with\n                // the input value as name with path information removed:\n                files = [{name: value.replace(/^.*\\\\/, '')}];\n            } else if (files[0].name === undefined && files[0].fileName) {\n                // File normalization for Safari 4 and Firefox 3:\n                $.each(files, function (index, file) {\n                    file.name = file.fileName;\n                    file.size = file.fileSize;\n                });\n            }\n            return $.Deferred().resolve(files).promise();\n        },\n\n        _getFileInputFiles: function (fileInput) {\n            if (!(fileInput instanceof $) || fileInput.length === 1) {\n                return this._getSingleFileInputFiles(fileInput);\n            }\n            return $.when.apply(\n                $,\n                $.map(fileInput, this._getSingleFileInputFiles)\n            ).then(function () {\n                return Array.prototype.concat.apply(\n                    [],\n                    arguments\n                );\n            });\n        },\n\n        _onChange: function (e) {\n            var that = this,\n                data = {\n                    fileInput: $(e.target),\n                    form: $(e.target.form)\n                };\n            this._getFileInputFiles(data.fileInput).always(function (files) {\n                data.files = files;\n                if (that.options.replaceFileInput) {\n                    that._replaceFileInput(data);\n                }\n                if (that._trigger(\n                        'change',\n                        $.Event('change', {delegatedEvent: e}),\n                        data\n                    ) !== false) {\n                    that._onAdd(e, data);\n                }\n            });\n        },\n\n        _onPaste: function (e) {\n            var items = e.originalEvent && e.originalEvent.clipboardData &&\n                    e.originalEvent.clipboardData.items,\n                data = {files: []};\n            if (items && items.length) {\n                $.each(items, function (index, item) {\n                    var file = item.getAsFile && item.getAsFile();\n                    if (file) {\n                        data.files.push(file);\n                    }\n                });\n                if (this._trigger(\n                        'paste',\n                        $.Event('paste', {delegatedEvent: e}),\n                        data\n                    ) !== false) {\n                    this._onAdd(e, data);\n                }\n            }\n        },\n\n        _onDrop: function (e) {\n            e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;\n            var that = this,\n                dataTransfer = e.dataTransfer,\n                data = {};\n            if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n                e.preventDefault();\n                this._getDroppedFiles(dataTransfer).always(function (files) {\n                    data.files = files;\n                    if (that._trigger(\n                            'drop',\n                            $.Event('drop', {delegatedEvent: e}),\n                            data\n                        ) !== false) {\n                        that._onAdd(e, data);\n                    }\n                });\n            }\n        },\n\n        _onDragOver: getDragHandler('dragover'),\n\n        _onDragEnter: getDragHandler('dragenter'),\n\n        _onDragLeave: getDragHandler('dragleave'),\n\n        _initEventHandlers: function () {\n            if (this._isXHRUpload(this.options)) {\n                this._on(this.options.dropZone, {\n                    dragover: this._onDragOver,\n                    drop: this._onDrop,\n                    // event.preventDefault() on dragenter is required for IE10+:\n                    dragenter: this._onDragEnter,\n                    // dragleave is not required, but added for completeness:\n                    dragleave: this._onDragLeave\n                });\n                this._on(this.options.pasteZone, {\n                    paste: this._onPaste\n                });\n            }\n            if ($.support.fileInput) {\n                this._on(this.options.fileInput, {\n                    change: this._onChange\n                });\n            }\n        },\n\n        _destroyEventHandlers: function () {\n            this._off(this.options.dropZone, 'dragenter dragleave dragover drop');\n            this._off(this.options.pasteZone, 'paste');\n            this._off(this.options.fileInput, 'change');\n        },\n\n        _destroy: function () {\n            this._destroyEventHandlers();\n        },\n\n        _setOption: function (key, value) {\n            var reinit = $.inArray(key, this._specialOptions) !== -1;\n            if (reinit) {\n                this._destroyEventHandlers();\n            }\n            this._super(key, value);\n            if (reinit) {\n                this._initSpecialOptions();\n                this._initEventHandlers();\n            }\n        },\n\n        _initSpecialOptions: function () {\n            var options = this.options;\n            if (options.fileInput === undefined) {\n                options.fileInput = this.element.is('input[type=\"file\"]') ?\n                        this.element : this.element.find('input[type=\"file\"]');\n            } else if (!(options.fileInput instanceof $)) {\n                options.fileInput = $(options.fileInput);\n            }\n            if (!(options.dropZone instanceof $)) {\n                options.dropZone = $(options.dropZone);\n            }\n            if (!(options.pasteZone instanceof $)) {\n                options.pasteZone = $(options.pasteZone);\n            }\n        },\n\n        _getRegExp: function (str) {\n            var parts = str.split('/'),\n                modifiers = parts.pop();\n            parts.shift();\n            return new RegExp(parts.join('/'), modifiers);\n        },\n\n        _isRegExpOption: function (key, value) {\n            return key !== 'url' && $.type(value) === 'string' &&\n                /^\\/.*\\/[igm]{0,3}$/.test(value);\n        },\n\n        _initDataAttributes: function () {\n            var that = this,\n                options = this.options,\n                data = this.element.data();\n            // Initialize options set via HTML5 data-attributes:\n            $.each(\n                this.element[0].attributes,\n                function (index, attr) {\n                    var key = attr.name.toLowerCase(),\n                        value;\n                    if (/^data-/.test(key)) {\n                        // Convert hyphen-ated key to camelCase:\n                        key = key.slice(5).replace(/-[a-z]/g, function (str) {\n                            return str.charAt(1).toUpperCase();\n                        });\n                        value = data[key];\n                        if (that._isRegExpOption(key, value)) {\n                            value = that._getRegExp(value);\n                        }\n                        options[key] = value;\n                    }\n                }\n            );\n        },\n\n        _create: function () {\n            this._initDataAttributes();\n            this._initSpecialOptions();\n            this._slots = [];\n            this._sequence = this._getXHRPromise(true);\n            this._sending = this._active = 0;\n            this._initProgressObject(this);\n            this._initEventHandlers();\n        },\n\n        // This method is exposed to the widget API and allows to query\n        // the number of active uploads:\n        active: function () {\n            return this._active;\n        },\n\n        // This method is exposed to the widget API and allows to query\n        // the widget upload progress.\n        // It returns an object with loaded, total and bitrate properties\n        // for the running uploads:\n        progress: function () {\n            return this._progress;\n        },\n\n        // This method is exposed to the widget API and allows adding files\n        // using the fileupload API. The data parameter accepts an object which\n        // must have a files property and can contain additional options:\n        // .fileupload('add', {files: filesList});\n        add: function (data) {\n            var that = this;\n            if (!data || this.options.disabled) {\n                return;\n            }\n            if (data.fileInput && !data.files) {\n                this._getFileInputFiles(data.fileInput).always(function (files) {\n                    data.files = files;\n                    that._onAdd(null, data);\n                });\n            } else {\n                data.files = $.makeArray(data.files);\n                this._onAdd(null, data);\n            }\n        },\n\n        // This method is exposed to the widget API and allows sending files\n        // using the fileupload API. The data parameter accepts an object which\n        // must have a files or fileInput property and can contain additional options:\n        // .fileupload('send', {files: filesList});\n        // The method returns a Promise object for the file upload call.\n        send: function (data) {\n            if (data && !this.options.disabled) {\n                if (data.fileInput && !data.files) {\n                    var that = this,\n                        dfd = $.Deferred(),\n                        promise = dfd.promise(),\n                        jqXHR,\n                        aborted;\n                    promise.abort = function () {\n                        aborted = true;\n                        if (jqXHR) {\n                            return jqXHR.abort();\n                        }\n                        dfd.reject(null, 'abort', 'abort');\n                        return promise;\n                    };\n                    this._getFileInputFiles(data.fileInput).always(\n                        function (files) {\n                            if (aborted) {\n                                return;\n                            }\n                            if (!files.length) {\n                                dfd.reject();\n                                return;\n                            }\n                            data.files = files;\n                            jqXHR = that._onSend(null, data);\n                            jqXHR.then(\n                                function (result, textStatus, jqXHR) {\n                                    dfd.resolve(result, textStatus, jqXHR);\n                                },\n                                function (jqXHR, textStatus, errorThrown) {\n                                    dfd.reject(jqXHR, textStatus, errorThrown);\n                                }\n                            );\n                        }\n                    );\n                    return this._enhancePromise(promise);\n                }\n                data.files = $.makeArray(data.files);\n                if (data.files.length) {\n                    return this._onSend(null, data);\n                }\n            }\n            return this._getXHRPromise(false, data && data.context);\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/jquery.iframe-transport.js",
    "content": "/*\n * jQuery Iframe Transport Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* global define, require, window, document, JSON */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define(['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(require('jquery'));\n    } else {\n        // Browser globals:\n        factory(window.jQuery);\n    }\n}(function ($) {\n    'use strict';\n\n    // Helper variable to create unique names for the transport iframes:\n    var counter = 0,\n        jsonAPI = $,\n        jsonParse = 'parseJSON';\n\n    if ('JSON' in window && 'parse' in JSON) {\n      jsonAPI = JSON;\n      jsonParse = 'parse';\n    }\n\n    // The iframe transport accepts four additional options:\n    // options.fileInput: a jQuery collection of file input fields\n    // options.paramName: the parameter name for the file form data,\n    //  overrides the name property of the file input field(s),\n    //  can be a string or an array of strings.\n    // options.formData: an array of objects with name and value properties,\n    //  equivalent to the return data of .serializeArray(), e.g.:\n    //  [{name: 'a', value: 1}, {name: 'b', value: 2}]\n    // options.initialIframeSrc: the URL of the initial iframe src,\n    //  by default set to \"javascript:false;\"\n    $.ajaxTransport('iframe', function (options) {\n        if (options.async) {\n            // javascript:false as initial iframe src\n            // prevents warning popups on HTTPS in IE6:\n            /*jshint scripturl: true */\n            var initialIframeSrc = options.initialIframeSrc || 'javascript:false;',\n            /*jshint scripturl: false */\n                form,\n                iframe,\n                addParamChar;\n            return {\n                send: function (_, completeCallback) {\n                    form = $('<form style=\"display:none;\"></form>');\n                    form.attr('accept-charset', options.formAcceptCharset);\n                    addParamChar = /\\?/.test(options.url) ? '&' : '?';\n                    // XDomainRequest only supports GET and POST:\n                    if (options.type === 'DELETE') {\n                        options.url = options.url + addParamChar + '_method=DELETE';\n                        options.type = 'POST';\n                    } else if (options.type === 'PUT') {\n                        options.url = options.url + addParamChar + '_method=PUT';\n                        options.type = 'POST';\n                    } else if (options.type === 'PATCH') {\n                        options.url = options.url + addParamChar + '_method=PATCH';\n                        options.type = 'POST';\n                    }\n                    // IE versions below IE8 cannot set the name property of\n                    // elements that have already been added to the DOM,\n                    // so we set the name along with the iframe HTML markup:\n                    counter += 1;\n                    iframe = $(\n                        '<iframe src=\"' + initialIframeSrc +\n                            '\" name=\"iframe-transport-' + counter + '\"></iframe>'\n                    ).bind('load', function () {\n                        var fileInputClones,\n                            paramNames = $.isArray(options.paramName) ?\n                                    options.paramName : [options.paramName];\n                        iframe\n                            .unbind('load')\n                            .bind('load', function () {\n                                var response;\n                                // Wrap in a try/catch block to catch exceptions thrown\n                                // when trying to access cross-domain iframe contents:\n                                try {\n                                    response = iframe.contents();\n                                    // Google Chrome and Firefox do not throw an\n                                    // exception when calling iframe.contents() on\n                                    // cross-domain requests, so we unify the response:\n                                    if (!response.length || !response[0].firstChild) {\n                                        throw new Error();\n                                    }\n                                } catch (e) {\n                                    response = undefined;\n                                }\n                                // The complete callback returns the\n                                // iframe content document as response object:\n                                completeCallback(\n                                    200,\n                                    'success',\n                                    {'iframe': response}\n                                );\n                                // Fix for IE endless progress bar activity bug\n                                // (happens on form submits to iframe targets):\n                                $('<iframe src=\"' + initialIframeSrc + '\"></iframe>')\n                                    .appendTo(form);\n                                window.setTimeout(function () {\n                                    // Removing the form in a setTimeout call\n                                    // allows Chrome's developer tools to display\n                                    // the response result\n                                    form.remove();\n                                }, 0);\n                            });\n                        form\n                            .prop('target', iframe.prop('name'))\n                            .prop('action', options.url)\n                            .prop('method', options.type);\n                        if (options.formData) {\n                            $.each(options.formData, function (index, field) {\n                                $('<input type=\"hidden\"/>')\n                                    .prop('name', field.name)\n                                    .val(field.value)\n                                    .appendTo(form);\n                            });\n                        }\n                        if (options.fileInput && options.fileInput.length &&\n                                options.type === 'POST') {\n                            fileInputClones = options.fileInput.clone();\n                            // Insert a clone for each file input field:\n                            options.fileInput.after(function (index) {\n                                return fileInputClones[index];\n                            });\n                            if (options.paramName) {\n                                options.fileInput.each(function (index) {\n                                    $(this).prop(\n                                        'name',\n                                        paramNames[index] || options.paramName\n                                    );\n                                });\n                            }\n                            // Appending the file input fields to the hidden form\n                            // removes them from their original location:\n                            form\n                                .append(options.fileInput)\n                                .prop('enctype', 'multipart/form-data')\n                                // enctype must be set as encoding for IE:\n                                .prop('encoding', 'multipart/form-data');\n                            // Remove the HTML5 form attribute from the input(s):\n                            options.fileInput.removeAttr('form');\n                        }\n                        form.submit();\n                        // Insert the file input fields at their original location\n                        // by replacing the clones with the originals:\n                        if (fileInputClones && fileInputClones.length) {\n                            options.fileInput.each(function (index, input) {\n                                var clone = $(fileInputClones[index]);\n                                // Restore the original name and form properties:\n                                $(input)\n                                    .prop('name', clone.prop('name'))\n                                    .attr('form', clone.attr('form'));\n                                clone.replaceWith(input);\n                            });\n                        }\n                    });\n                    form.append(iframe).appendTo(document.body);\n                },\n                abort: function () {\n                    if (iframe) {\n                        // javascript:false as iframe src aborts the request\n                        // and prevents warning popups on HTTPS in IE6.\n                        // concat is used to avoid the \"Script URL\" JSLint error:\n                        iframe\n                            .unbind('load')\n                            .prop('src', initialIframeSrc);\n                    }\n                    if (form) {\n                        form.remove();\n                    }\n                }\n            };\n        }\n    });\n\n    // The iframe transport returns the iframe content document as response.\n    // The following adds converters from iframe to text, json, html, xml\n    // and script.\n    // Please note that the Content-Type for JSON responses has to be text/plain\n    // or text/html, if the browser doesn't include application/json in the\n    // Accept header, else IE will show a download dialog.\n    // The Content-Type for XML responses on the other hand has to be always\n    // application/xml or text/xml, so IE properly parses the XML response.\n    // See also\n    // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation\n    $.ajaxSetup({\n        converters: {\n            'iframe text': function (iframe) {\n                return iframe && $(iframe[0].body).text();\n            },\n            'iframe json': function (iframe) {\n                return iframe && jsonAPI[jsonParse]($(iframe[0].body).text());\n            },\n            'iframe html': function (iframe) {\n                return iframe && $(iframe[0].body).html();\n            },\n            'iframe xml': function (iframe) {\n                var xmlDoc = iframe && iframe[0];\n                return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc :\n                        $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) ||\n                            $(xmlDoc.body).html());\n            },\n            'iframe script': function (iframe) {\n                return iframe && $.globalEval($(iframe[0].body).text());\n            }\n        }\n    });\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/main.js",
    "content": "/*\n * jQuery File Upload Plugin JS Example\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2010, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* global $, window */\n\n$(function () {\n    'use strict';\n\n    // Initialize the jQuery File Upload widget:\n    $('#fileupload').fileupload({\n        // Uncomment the following to send cross-domain cookies:\n        //xhrFields: {withCredentials: true},\n        url: 'server/php/'\n    });\n\n    // Enable iframe cross-domain access via redirect option:\n    $('#fileupload').fileupload(\n        'option',\n        'redirect',\n        window.location.href.replace(\n            /\\/[^\\/]*$/,\n            '/cors/result.html?%s'\n        )\n    );\n\n    if (window.location.hostname === 'blueimp.github.io') {\n        // Demo settings:\n        $('#fileupload').fileupload('option', {\n            url: '//jquery-file-upload.appspot.com/',\n            // Enable image resizing, except for Android and Opera,\n            // which actually support image resizing, but fail to\n            // send Blob objects via XHR requests:\n            disableImageResize: /Android(?!.*Chrome)|Opera/\n                .test(window.navigator.userAgent),\n            maxFileSize: 999000,\n            acceptFileTypes: /(\\.|\\/)(gif|jpe?g|png)$/i\n        });\n        // Upload server status check for browsers with CORS support:\n        if ($.support.cors) {\n            $.ajax({\n                url: '//jquery-file-upload.appspot.com/',\n                type: 'HEAD'\n            }).fail(function () {\n                $('<div class=\"alert alert-danger\"/>')\n                    .text('Upload server currently unavailable - ' +\n                            new Date())\n                    .appendTo('#fileupload');\n            });\n        }\n    } else {\n        // Load existing files:\n        $('#fileupload').addClass('fileupload-processing');\n        $.ajax({\n            // Uncomment the following to send cross-domain cookies:\n            //xhrFields: {withCredentials: true},\n            url: $('#fileupload').fileupload('option', 'url'),\n            dataType: 'json',\n            context: $('#fileupload')[0]\n        }).always(function () {\n            $(this).removeClass('fileupload-processing');\n        }).done(function (result) {\n            $(this).fileupload('option', 'done')\n                .call(this, $.Event('done'), {result: result});\n        });\n    }\n\n});\n"
  },
  {
    "path": "public/adminlte/plugins/fileUpload/js/vendor/jquery.ui.widget.js",
    "content": "/*! jQuery UI - v1.11.4+CommonJS - 2015-08-28\n* http://jqueryui.com\n* Includes: widget.js\n* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */\n\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([ \"jquery\" ], factory );\n\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node/CommonJS\n\t\tfactory( require( \"jquery\" ) );\n\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n/*!\n * jQuery UI Widget 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/jQuery.widget/\n */\n\n\nvar widget_uuid = 0,\n\twidget_slice = Array.prototype.slice;\n\n$.cleanData = (function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; (elem = elems[i]) != null; i++ ) {\n\t\t\ttry {\n\n\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\tevents = $._data( elem, \"events\" );\n\t\t\t\tif ( events && events.remove ) {\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t\t}\n\n\t\t\t// http://bugs.jquery.com/ticket/8235\n\t\t\t} catch ( e ) {}\n\t\t}\n\t\torig( elems );\n\t};\n})( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar fullName, existingConstructor, constructor, basePrototype,\n\t\t// proxiedPrototype allows the provided prototype to remain unmodified\n\t\t// so that it can be used as a mixin for multiple widgets (#8876)\n\t\tproxiedPrototype = {},\n\t\tnamespace = name.split( \".\" )[ 0 ];\n\n\tname = name.split( \".\" )[ 1 ];\n\tfullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\t// create selector for plugin\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\t\t// allow instantiation without \"new\" keyword\n\t\tif ( !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\t// extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\t\t// copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\t\t// track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t});\n\n\tbasePrototype = new base();\n\t// we need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( !$.isFunction( value ) ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = (function() {\n\t\t\tvar _super = function() {\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t\t},\n\t\t\t\t_superApply = function( args ) {\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t\t};\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super,\n\t\t\t\t\t__superApply = this._superApply,\n\t\t\t\t\treturnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t})();\n\t});\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t});\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor, child._proto );\n\t\t});\n\t\t// remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widget_slice.call( arguments, 1 ),\n\t\tinputIndex = 0,\n\t\tinputLength = input.length,\n\t\tkey,\n\t\tvalue;\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\",\n\t\t\targs = widget_slice.call( arguments, 1 ),\n\t\t\treturnValue = this;\n\n\t\tif ( isMethodCall ) {\n\t\t\tthis.each(function() {\n\t\t\t\tvar methodValue,\n\t\t\t\t\tinstance = $.data( this, fullName );\n\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\treturnValue = instance;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif ( !instance ) {\n\t\t\t\t\treturn $.error( \"cannot call methods on \" + name + \" prior to initialization; \" +\n\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t}\n\t\t\t\tif ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name + \" widget instance\" );\n\t\t\t\t}\n\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\tmethodValue;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat(args) );\n\t\t\t}\n\n\t\t\tthis.each(function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\toptions: {\n\t\tdisabled: false,\n\n\t\t// callbacks\n\t\tcreate: null\n\t},\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widget_uuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.document = $( element.style ?\n\t\t\t\t// element within the document\n\t\t\t\telement.ownerDocument :\n\t\t\t\t// element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[0].defaultView || this.document[0].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\t_getCreateOptions: $.noop,\n\t_getCreateEventData: $.noop,\n\t_create: $.noop,\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tthis._destroy();\n\t\t// we can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.unbind( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName )\n\t\t\t// support: jquery <1.6.3\n\t\t\t// http://bugs.jquery.com/ticket/9413\n\t\t\t.removeData( $.camelCase( this.widgetFullName ) );\n\t\tthis.widget()\n\t\t\t.unbind( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" )\n\t\t\t.removeClass(\n\t\t\t\tthis.widgetFullName + \"-disabled \" +\n\t\t\t\t\"ui-state-disabled\" );\n\n\t\t// clean up events and states\n\t\tthis.bindings.unbind( this.eventNamespace );\n\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\n\t\tthis.focusable.removeClass( \"ui-state-focus\" );\n\t},\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key,\n\t\t\tparts,\n\t\t\tcurOption,\n\t\t\ti;\n\n\t\tif ( arguments.length === 0 ) {\n\t\t\t// don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\t\t\t// handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\t_setOption: function( key, value ) {\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.widget()\n\t\t\t\t.toggleClass( this.widgetFullName + \"-disabled\", !!value );\n\n\t\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\t\tif ( value ) {\n\t\t\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\n\t\t\t\tthis.focusable.removeClass( \"ui-state-focus\" );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions({ disabled: false });\n\t},\n\tdisable: function() {\n\t\treturn this._setOptions({ disabled: true });\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement,\n\t\t\tinstance = this;\n\n\t\t// no suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// no element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\t\t\t\t// allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ ),\n\t\t\t\teventName = match[1] + instance.eventNamespace,\n\t\t\t\tselector = match[2];\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.delegate( selector, eventName, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.bind( eventName, handlerProxy );\n\t\t\t}\n\t\t});\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = (eventName || \"\").split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.unbind( eventName ).undelegate( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-hover\" );\n\t\t\t}\n\t\t});\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-focus\" );\n\t\t\t}\n\t\t});\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig,\n\t\t\tcallback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\t\t// the original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( $.isFunction( callback ) &&\n\t\t\tcallback.apply( this.element[0], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\t\tvar hasOptions,\n\t\t\teffectName = !options ?\n\t\t\t\tmethod :\n\t\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\t\tdefaultEffect :\n\t\t\t\t\toptions.effect || defaultEffect;\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t}\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue(function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t});\n\t\t}\n\t};\n});\n\nvar widget = $.widget;\n\n\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/flot/excanvas.js",
    "content": "// Copyright 2006 Google Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//   http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n\n// Known Issues:\n//\n// * Patterns only support repeat.\n// * Radial gradient are not implemented. The VML version of these look very\n//   different from the canvas one.\n// * Clipping paths are not implemented.\n// * Coordsize. The width and height attribute have higher priority than the\n//   width and height style values which isn't correct.\n// * Painting mode isn't implemented.\n// * Canvas width/height should is using content-box by default. IE in\n//   Quirks mode will draw the canvas using border-box. Either change your\n//   doctype to HTML5\n//   (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)\n//   or use Box Sizing Behavior from WebFX\n//   (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)\n// * Non uniform scaling does not correctly scale strokes.\n// * Filling very large shapes (above 5000 points) is buggy.\n// * Optimize. There is always room for speed improvements.\n\n// Only add this code if we do not already have a canvas implementation\nif (!document.createElement('canvas').getContext) {\n\n(function() {\n\n  // alias some functions to make (compiled) code shorter\n  var m = Math;\n  var mr = m.round;\n  var ms = m.sin;\n  var mc = m.cos;\n  var abs = m.abs;\n  var sqrt = m.sqrt;\n\n  // this is used for sub pixel precision\n  var Z = 10;\n  var Z2 = Z / 2;\n\n  var IE_VERSION = +navigator.userAgent.match(/MSIE ([\\d.]+)?/)[1];\n\n  /**\n   * This funtion is assigned to the <canvas> elements as element.getContext().\n   * @this {HTMLElement}\n   * @return {CanvasRenderingContext2D_}\n   */\n  function getContext() {\n    return this.context_ ||\n        (this.context_ = new CanvasRenderingContext2D_(this));\n  }\n\n  var slice = Array.prototype.slice;\n\n  /**\n   * Binds a function to an object. The returned function will always use the\n   * passed in {@code obj} as {@code this}.\n   *\n   * Example:\n   *\n   *   g = bind(f, obj, a, b)\n   *   g(c, d) // will do f.call(obj, a, b, c, d)\n   *\n   * @param {Function} f The function to bind the object to\n   * @param {Object} obj The object that should act as this when the function\n   *     is called\n   * @param {*} var_args Rest arguments that will be used as the initial\n   *     arguments when the function is called\n   * @return {Function} A new function that has bound this\n   */\n  function bind(f, obj, var_args) {\n    var a = slice.call(arguments, 2);\n    return function() {\n      return f.apply(obj, a.concat(slice.call(arguments)));\n    };\n  }\n\n  function encodeHtmlAttribute(s) {\n    return String(s).replace(/&/g, '&amp;').replace(/\"/g, '&quot;');\n  }\n\n  function addNamespace(doc, prefix, urn) {\n    if (!doc.namespaces[prefix]) {\n      doc.namespaces.add(prefix, urn, '#default#VML');\n    }\n  }\n\n  function addNamespacesAndStylesheet(doc) {\n    addNamespace(doc, 'g_vml_', 'urn:schemas-microsoft-com:vml');\n    addNamespace(doc, 'g_o_', 'urn:schemas-microsoft-com:office:office');\n\n    // Setup default CSS.  Only add one style sheet per document\n    if (!doc.styleSheets['ex_canvas_']) {\n      var ss = doc.createStyleSheet();\n      ss.owningElement.id = 'ex_canvas_';\n      ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +\n          // default size is 300x150 in Gecko and Opera\n          'text-align:left;width:300px;height:150px}';\n    }\n  }\n\n  // Add namespaces and stylesheet at startup.\n  addNamespacesAndStylesheet(document);\n\n  var G_vmlCanvasManager_ = {\n    init: function(opt_doc) {\n      var doc = opt_doc || document;\n      // Create a dummy element so that IE will allow canvas elements to be\n      // recognized.\n      doc.createElement('canvas');\n      doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));\n    },\n\n    init_: function(doc) {\n      // find all canvas elements\n      var els = doc.getElementsByTagName('canvas');\n      for (var i = 0; i < els.length; i++) {\n        this.initElement(els[i]);\n      }\n    },\n\n    /**\n     * Public initializes a canvas element so that it can be used as canvas\n     * element from now on. This is called automatically before the page is\n     * loaded but if you are creating elements using createElement you need to\n     * make sure this is called on the element.\n     * @param {HTMLElement} el The canvas element to initialize.\n     * @return {HTMLElement} the element that was created.\n     */\n    initElement: function(el) {\n      if (!el.getContext) {\n        el.getContext = getContext;\n\n        // Add namespaces and stylesheet to document of the element.\n        addNamespacesAndStylesheet(el.ownerDocument);\n\n        // Remove fallback content. There is no way to hide text nodes so we\n        // just remove all childNodes. We could hide all elements and remove\n        // text nodes but who really cares about the fallback content.\n        el.innerHTML = '';\n\n        // do not use inline function because that will leak memory\n        el.attachEvent('onpropertychange', onPropertyChange);\n        el.attachEvent('onresize', onResize);\n\n        var attrs = el.attributes;\n        if (attrs.width && attrs.width.specified) {\n          // TODO: use runtimeStyle and coordsize\n          // el.getContext().setWidth_(attrs.width.nodeValue);\n          el.style.width = attrs.width.nodeValue + 'px';\n        } else {\n          el.width = el.clientWidth;\n        }\n        if (attrs.height && attrs.height.specified) {\n          // TODO: use runtimeStyle and coordsize\n          // el.getContext().setHeight_(attrs.height.nodeValue);\n          el.style.height = attrs.height.nodeValue + 'px';\n        } else {\n          el.height = el.clientHeight;\n        }\n        //el.getContext().setCoordsize_()\n      }\n      return el;\n    }\n  };\n\n  function onPropertyChange(e) {\n    var el = e.srcElement;\n\n    switch (e.propertyName) {\n      case 'width':\n        el.getContext().clearRect();\n        el.style.width = el.attributes.width.nodeValue + 'px';\n        // In IE8 this does not trigger onresize.\n        el.firstChild.style.width =  el.clientWidth + 'px';\n        break;\n      case 'height':\n        el.getContext().clearRect();\n        el.style.height = el.attributes.height.nodeValue + 'px';\n        el.firstChild.style.height = el.clientHeight + 'px';\n        break;\n    }\n  }\n\n  function onResize(e) {\n    var el = e.srcElement;\n    if (el.firstChild) {\n      el.firstChild.style.width =  el.clientWidth + 'px';\n      el.firstChild.style.height = el.clientHeight + 'px';\n    }\n  }\n\n  G_vmlCanvasManager_.init();\n\n  // precompute \"00\" to \"FF\"\n  var decToHex = [];\n  for (var i = 0; i < 16; i++) {\n    for (var j = 0; j < 16; j++) {\n      decToHex[i * 16 + j] = i.toString(16) + j.toString(16);\n    }\n  }\n\n  function createMatrixIdentity() {\n    return [\n      [1, 0, 0],\n      [0, 1, 0],\n      [0, 0, 1]\n    ];\n  }\n\n  function matrixMultiply(m1, m2) {\n    var result = createMatrixIdentity();\n\n    for (var x = 0; x < 3; x++) {\n      for (var y = 0; y < 3; y++) {\n        var sum = 0;\n\n        for (var z = 0; z < 3; z++) {\n          sum += m1[x][z] * m2[z][y];\n        }\n\n        result[x][y] = sum;\n      }\n    }\n    return result;\n  }\n\n  function copyState(o1, o2) {\n    o2.fillStyle     = o1.fillStyle;\n    o2.lineCap       = o1.lineCap;\n    o2.lineJoin      = o1.lineJoin;\n    o2.lineWidth     = o1.lineWidth;\n    o2.miterLimit    = o1.miterLimit;\n    o2.shadowBlur    = o1.shadowBlur;\n    o2.shadowColor   = o1.shadowColor;\n    o2.shadowOffsetX = o1.shadowOffsetX;\n    o2.shadowOffsetY = o1.shadowOffsetY;\n    o2.strokeStyle   = o1.strokeStyle;\n    o2.globalAlpha   = o1.globalAlpha;\n    o2.font          = o1.font;\n    o2.textAlign     = o1.textAlign;\n    o2.textBaseline  = o1.textBaseline;\n    o2.arcScaleX_    = o1.arcScaleX_;\n    o2.arcScaleY_    = o1.arcScaleY_;\n    o2.lineScale_    = o1.lineScale_;\n  }\n\n  var colorData = {\n    aliceblue: '#F0F8FF',\n    antiquewhite: '#FAEBD7',\n    aquamarine: '#7FFFD4',\n    azure: '#F0FFFF',\n    beige: '#F5F5DC',\n    bisque: '#FFE4C4',\n    black: '#000000',\n    blanchedalmond: '#FFEBCD',\n    blueviolet: '#8A2BE2',\n    brown: '#A52A2A',\n    burlywood: '#DEB887',\n    cadetblue: '#5F9EA0',\n    chartreuse: '#7FFF00',\n    chocolate: '#D2691E',\n    coral: '#FF7F50',\n    cornflowerblue: '#6495ED',\n    cornsilk: '#FFF8DC',\n    crimson: '#DC143C',\n    cyan: '#00FFFF',\n    darkblue: '#00008B',\n    darkcyan: '#008B8B',\n    darkgoldenrod: '#B8860B',\n    darkgray: '#A9A9A9',\n    darkgreen: '#006400',\n    darkgrey: '#A9A9A9',\n    darkkhaki: '#BDB76B',\n    darkmagenta: '#8B008B',\n    darkolivegreen: '#556B2F',\n    darkorange: '#FF8C00',\n    darkorchid: '#9932CC',\n    darkred: '#8B0000',\n    darksalmon: '#E9967A',\n    darkseagreen: '#8FBC8F',\n    darkslateblue: '#483D8B',\n    darkslategray: '#2F4F4F',\n    darkslategrey: '#2F4F4F',\n    darkturquoise: '#00CED1',\n    darkviolet: '#9400D3',\n    deeppink: '#FF1493',\n    deepskyblue: '#00BFFF',\n    dimgray: '#696969',\n    dimgrey: '#696969',\n    dodgerblue: '#1E90FF',\n    firebrick: '#B22222',\n    floralwhite: '#FFFAF0',\n    forestgreen: '#228B22',\n    gainsboro: '#DCDCDC',\n    ghostwhite: '#F8F8FF',\n    gold: '#FFD700',\n    goldenrod: '#DAA520',\n    grey: '#808080',\n    greenyellow: '#ADFF2F',\n    honeydew: '#F0FFF0',\n    hotpink: '#FF69B4',\n    indianred: '#CD5C5C',\n    indigo: '#4B0082',\n    ivory: '#FFFFF0',\n    khaki: '#F0E68C',\n    lavender: '#E6E6FA',\n    lavenderblush: '#FFF0F5',\n    lawngreen: '#7CFC00',\n    lemonchiffon: '#FFFACD',\n    lightblue: '#ADD8E6',\n    lightcoral: '#F08080',\n    lightcyan: '#E0FFFF',\n    lightgoldenrodyellow: '#FAFAD2',\n    lightgreen: '#90EE90',\n    lightgrey: '#D3D3D3',\n    lightpink: '#FFB6C1',\n    lightsalmon: '#FFA07A',\n    lightseagreen: '#20B2AA',\n    lightskyblue: '#87CEFA',\n    lightslategray: '#778899',\n    lightslategrey: '#778899',\n    lightsteelblue: '#B0C4DE',\n    lightyellow: '#FFFFE0',\n    limegreen: '#32CD32',\n    linen: '#FAF0E6',\n    magenta: '#FF00FF',\n    mediumaquamarine: '#66CDAA',\n    mediumblue: '#0000CD',\n    mediumorchid: '#BA55D3',\n    mediumpurple: '#9370DB',\n    mediumseagreen: '#3CB371',\n    mediumslateblue: '#7B68EE',\n    mediumspringgreen: '#00FA9A',\n    mediumturquoise: '#48D1CC',\n    mediumvioletred: '#C71585',\n    midnightblue: '#191970',\n    mintcream: '#F5FFFA',\n    mistyrose: '#FFE4E1',\n    moccasin: '#FFE4B5',\n    navajowhite: '#FFDEAD',\n    oldlace: '#FDF5E6',\n    olivedrab: '#6B8E23',\n    orange: '#FFA500',\n    orangered: '#FF4500',\n    orchid: '#DA70D6',\n    palegoldenrod: '#EEE8AA',\n    palegreen: '#98FB98',\n    paleturquoise: '#AFEEEE',\n    palevioletred: '#DB7093',\n    papayawhip: '#FFEFD5',\n    peachpuff: '#FFDAB9',\n    peru: '#CD853F',\n    pink: '#FFC0CB',\n    plum: '#DDA0DD',\n    powderblue: '#B0E0E6',\n    rosybrown: '#BC8F8F',\n    royalblue: '#4169E1',\n    saddlebrown: '#8B4513',\n    salmon: '#FA8072',\n    sandybrown: '#F4A460',\n    seagreen: '#2E8B57',\n    seashell: '#FFF5EE',\n    sienna: '#A0522D',\n    skyblue: '#87CEEB',\n    slateblue: '#6A5ACD',\n    slategray: '#708090',\n    slategrey: '#708090',\n    snow: '#FFFAFA',\n    springgreen: '#00FF7F',\n    steelblue: '#4682B4',\n    tan: '#D2B48C',\n    thistle: '#D8BFD8',\n    tomato: '#FF6347',\n    turquoise: '#40E0D0',\n    violet: '#EE82EE',\n    wheat: '#F5DEB3',\n    whitesmoke: '#F5F5F5',\n    yellowgreen: '#9ACD32'\n  };\n\n\n  function getRgbHslContent(styleString) {\n    var start = styleString.indexOf('(', 3);\n    var end = styleString.indexOf(')', start + 1);\n    var parts = styleString.substring(start + 1, end).split(',');\n    // add alpha if needed\n    if (parts.length != 4 || styleString.charAt(3) != 'a') {\n      parts[3] = 1;\n    }\n    return parts;\n  }\n\n  function percent(s) {\n    return parseFloat(s) / 100;\n  }\n\n  function clamp(v, min, max) {\n    return Math.min(max, Math.max(min, v));\n  }\n\n  function hslToRgb(parts){\n    var r, g, b, h, s, l;\n    h = parseFloat(parts[0]) / 360 % 360;\n    if (h < 0)\n      h++;\n    s = clamp(percent(parts[1]), 0, 1);\n    l = clamp(percent(parts[2]), 0, 1);\n    if (s == 0) {\n      r = g = b = l; // achromatic\n    } else {\n      var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n      var p = 2 * l - q;\n      r = hueToRgb(p, q, h + 1 / 3);\n      g = hueToRgb(p, q, h);\n      b = hueToRgb(p, q, h - 1 / 3);\n    }\n\n    return '#' + decToHex[Math.floor(r * 255)] +\n        decToHex[Math.floor(g * 255)] +\n        decToHex[Math.floor(b * 255)];\n  }\n\n  function hueToRgb(m1, m2, h) {\n    if (h < 0)\n      h++;\n    if (h > 1)\n      h--;\n\n    if (6 * h < 1)\n      return m1 + (m2 - m1) * 6 * h;\n    else if (2 * h < 1)\n      return m2;\n    else if (3 * h < 2)\n      return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n    else\n      return m1;\n  }\n\n  var processStyleCache = {};\n\n  function processStyle(styleString) {\n    if (styleString in processStyleCache) {\n      return processStyleCache[styleString];\n    }\n\n    var str, alpha = 1;\n\n    styleString = String(styleString);\n    if (styleString.charAt(0) == '#') {\n      str = styleString;\n    } else if (/^rgb/.test(styleString)) {\n      var parts = getRgbHslContent(styleString);\n      var str = '#', n;\n      for (var i = 0; i < 3; i++) {\n        if (parts[i].indexOf('%') != -1) {\n          n = Math.floor(percent(parts[i]) * 255);\n        } else {\n          n = +parts[i];\n        }\n        str += decToHex[clamp(n, 0, 255)];\n      }\n      alpha = +parts[3];\n    } else if (/^hsl/.test(styleString)) {\n      var parts = getRgbHslContent(styleString);\n      str = hslToRgb(parts);\n      alpha = parts[3];\n    } else {\n      str = colorData[styleString] || styleString;\n    }\n    return processStyleCache[styleString] = {color: str, alpha: alpha};\n  }\n\n  var DEFAULT_STYLE = {\n    style: 'normal',\n    variant: 'normal',\n    weight: 'normal',\n    size: 10,\n    family: 'sans-serif'\n  };\n\n  // Internal text style cache\n  var fontStyleCache = {};\n\n  function processFontStyle(styleString) {\n    if (fontStyleCache[styleString]) {\n      return fontStyleCache[styleString];\n    }\n\n    var el = document.createElement('div');\n    var style = el.style;\n    try {\n      style.font = styleString;\n    } catch (ex) {\n      // Ignore failures to set to invalid font.\n    }\n\n    return fontStyleCache[styleString] = {\n      style: style.fontStyle || DEFAULT_STYLE.style,\n      variant: style.fontVariant || DEFAULT_STYLE.variant,\n      weight: style.fontWeight || DEFAULT_STYLE.weight,\n      size: style.fontSize || DEFAULT_STYLE.size,\n      family: style.fontFamily || DEFAULT_STYLE.family\n    };\n  }\n\n  function getComputedStyle(style, element) {\n    var computedStyle = {};\n\n    for (var p in style) {\n      computedStyle[p] = style[p];\n    }\n\n    // Compute the size\n    var canvasFontSize = parseFloat(element.currentStyle.fontSize),\n        fontSize = parseFloat(style.size);\n\n    if (typeof style.size == 'number') {\n      computedStyle.size = style.size;\n    } else if (style.size.indexOf('px') != -1) {\n      computedStyle.size = fontSize;\n    } else if (style.size.indexOf('em') != -1) {\n      computedStyle.size = canvasFontSize * fontSize;\n    } else if(style.size.indexOf('%') != -1) {\n      computedStyle.size = (canvasFontSize / 100) * fontSize;\n    } else if (style.size.indexOf('pt') != -1) {\n      computedStyle.size = fontSize / .75;\n    } else {\n      computedStyle.size = canvasFontSize;\n    }\n\n    // Different scaling between normal text and VML text. This was found using\n    // trial and error to get the same size as non VML text.\n    computedStyle.size *= 0.981;\n\n    return computedStyle;\n  }\n\n  function buildStyle(style) {\n    return style.style + ' ' + style.variant + ' ' + style.weight + ' ' +\n        style.size + 'px ' + style.family;\n  }\n\n  var lineCapMap = {\n    'butt': 'flat',\n    'round': 'round'\n  };\n\n  function processLineCap(lineCap) {\n    return lineCapMap[lineCap] || 'square';\n  }\n\n  /**\n   * This class implements CanvasRenderingContext2D interface as described by\n   * the WHATWG.\n   * @param {HTMLElement} canvasElement The element that the 2D context should\n   * be associated with\n   */\n  function CanvasRenderingContext2D_(canvasElement) {\n    this.m_ = createMatrixIdentity();\n\n    this.mStack_ = [];\n    this.aStack_ = [];\n    this.currentPath_ = [];\n\n    // Canvas context properties\n    this.strokeStyle = '#000';\n    this.fillStyle = '#000';\n\n    this.lineWidth = 1;\n    this.lineJoin = 'miter';\n    this.lineCap = 'butt';\n    this.miterLimit = Z * 1;\n    this.globalAlpha = 1;\n    this.font = '10px sans-serif';\n    this.textAlign = 'left';\n    this.textBaseline = 'alphabetic';\n    this.canvas = canvasElement;\n\n    var cssText = 'width:' + canvasElement.clientWidth + 'px;height:' +\n        canvasElement.clientHeight + 'px;overflow:hidden;position:absolute';\n    var el = canvasElement.ownerDocument.createElement('div');\n    el.style.cssText = cssText;\n    canvasElement.appendChild(el);\n\n    var overlayEl = el.cloneNode(false);\n    // Use a non transparent background.\n    overlayEl.style.backgroundColor = 'red';\n    overlayEl.style.filter = 'alpha(opacity=0)';\n    canvasElement.appendChild(overlayEl);\n\n    this.element_ = el;\n    this.arcScaleX_ = 1;\n    this.arcScaleY_ = 1;\n    this.lineScale_ = 1;\n  }\n\n  var contextPrototype = CanvasRenderingContext2D_.prototype;\n  contextPrototype.clearRect = function() {\n    if (this.textMeasureEl_) {\n      this.textMeasureEl_.removeNode(true);\n      this.textMeasureEl_ = null;\n    }\n    this.element_.innerHTML = '';\n  };\n\n  contextPrototype.beginPath = function() {\n    // TODO: Branch current matrix so that save/restore has no effect\n    //       as per safari docs.\n    this.currentPath_ = [];\n  };\n\n  contextPrototype.moveTo = function(aX, aY) {\n    var p = getCoords(this, aX, aY);\n    this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});\n    this.currentX_ = p.x;\n    this.currentY_ = p.y;\n  };\n\n  contextPrototype.lineTo = function(aX, aY) {\n    var p = getCoords(this, aX, aY);\n    this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});\n\n    this.currentX_ = p.x;\n    this.currentY_ = p.y;\n  };\n\n  contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,\n                                            aCP2x, aCP2y,\n                                            aX, aY) {\n    var p = getCoords(this, aX, aY);\n    var cp1 = getCoords(this, aCP1x, aCP1y);\n    var cp2 = getCoords(this, aCP2x, aCP2y);\n    bezierCurveTo(this, cp1, cp2, p);\n  };\n\n  // Helper function that takes the already fixed cordinates.\n  function bezierCurveTo(self, cp1, cp2, p) {\n    self.currentPath_.push({\n      type: 'bezierCurveTo',\n      cp1x: cp1.x,\n      cp1y: cp1.y,\n      cp2x: cp2.x,\n      cp2y: cp2.y,\n      x: p.x,\n      y: p.y\n    });\n    self.currentX_ = p.x;\n    self.currentY_ = p.y;\n  }\n\n  contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {\n    // the following is lifted almost directly from\n    // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes\n\n    var cp = getCoords(this, aCPx, aCPy);\n    var p = getCoords(this, aX, aY);\n\n    var cp1 = {\n      x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),\n      y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)\n    };\n    var cp2 = {\n      x: cp1.x + (p.x - this.currentX_) / 3.0,\n      y: cp1.y + (p.y - this.currentY_) / 3.0\n    };\n\n    bezierCurveTo(this, cp1, cp2, p);\n  };\n\n  contextPrototype.arc = function(aX, aY, aRadius,\n                                  aStartAngle, aEndAngle, aClockwise) {\n    aRadius *= Z;\n    var arcType = aClockwise ? 'at' : 'wa';\n\n    var xStart = aX + mc(aStartAngle) * aRadius - Z2;\n    var yStart = aY + ms(aStartAngle) * aRadius - Z2;\n\n    var xEnd = aX + mc(aEndAngle) * aRadius - Z2;\n    var yEnd = aY + ms(aEndAngle) * aRadius - Z2;\n\n    // IE won't render arches drawn counter clockwise if xStart == xEnd.\n    if (xStart == xEnd && !aClockwise) {\n      xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something\n                       // that can be represented in binary\n    }\n\n    var p = getCoords(this, aX, aY);\n    var pStart = getCoords(this, xStart, yStart);\n    var pEnd = getCoords(this, xEnd, yEnd);\n\n    this.currentPath_.push({type: arcType,\n                           x: p.x,\n                           y: p.y,\n                           radius: aRadius,\n                           xStart: pStart.x,\n                           yStart: pStart.y,\n                           xEnd: pEnd.x,\n                           yEnd: pEnd.y});\n\n  };\n\n  contextPrototype.rect = function(aX, aY, aWidth, aHeight) {\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n  };\n\n  contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {\n    var oldPath = this.currentPath_;\n    this.beginPath();\n\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n    this.stroke();\n\n    this.currentPath_ = oldPath;\n  };\n\n  contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {\n    var oldPath = this.currentPath_;\n    this.beginPath();\n\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n    this.fill();\n\n    this.currentPath_ = oldPath;\n  };\n\n  contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {\n    var gradient = new CanvasGradient_('gradient');\n    gradient.x0_ = aX0;\n    gradient.y0_ = aY0;\n    gradient.x1_ = aX1;\n    gradient.y1_ = aY1;\n    return gradient;\n  };\n\n  contextPrototype.createRadialGradient = function(aX0, aY0, aR0,\n                                                   aX1, aY1, aR1) {\n    var gradient = new CanvasGradient_('gradientradial');\n    gradient.x0_ = aX0;\n    gradient.y0_ = aY0;\n    gradient.r0_ = aR0;\n    gradient.x1_ = aX1;\n    gradient.y1_ = aY1;\n    gradient.r1_ = aR1;\n    return gradient;\n  };\n\n  contextPrototype.drawImage = function(image, var_args) {\n    var dx, dy, dw, dh, sx, sy, sw, sh;\n\n    // to find the original width we overide the width and height\n    var oldRuntimeWidth = image.runtimeStyle.width;\n    var oldRuntimeHeight = image.runtimeStyle.height;\n    image.runtimeStyle.width = 'auto';\n    image.runtimeStyle.height = 'auto';\n\n    // get the original size\n    var w = image.width;\n    var h = image.height;\n\n    // and remove overides\n    image.runtimeStyle.width = oldRuntimeWidth;\n    image.runtimeStyle.height = oldRuntimeHeight;\n\n    if (arguments.length == 3) {\n      dx = arguments[1];\n      dy = arguments[2];\n      sx = sy = 0;\n      sw = dw = w;\n      sh = dh = h;\n    } else if (arguments.length == 5) {\n      dx = arguments[1];\n      dy = arguments[2];\n      dw = arguments[3];\n      dh = arguments[4];\n      sx = sy = 0;\n      sw = w;\n      sh = h;\n    } else if (arguments.length == 9) {\n      sx = arguments[1];\n      sy = arguments[2];\n      sw = arguments[3];\n      sh = arguments[4];\n      dx = arguments[5];\n      dy = arguments[6];\n      dw = arguments[7];\n      dh = arguments[8];\n    } else {\n      throw Error('Invalid number of arguments');\n    }\n\n    var d = getCoords(this, dx, dy);\n\n    var w2 = sw / 2;\n    var h2 = sh / 2;\n\n    var vmlStr = [];\n\n    var W = 10;\n    var H = 10;\n\n    // For some reason that I've now forgotten, using divs didn't work\n    vmlStr.push(' <g_vml_:group',\n                ' coordsize=\"', Z * W, ',', Z * H, '\"',\n                ' coordorigin=\"0,0\"' ,\n                ' style=\"width:', W, 'px;height:', H, 'px;position:absolute;');\n\n    // If filters are necessary (rotation exists), create them\n    // filters are bog-slow, so only create them if abbsolutely necessary\n    // The following check doesn't account for skews (which don't exist\n    // in the canvas spec (yet) anyway.\n\n    if (this.m_[0][0] != 1 || this.m_[0][1] ||\n        this.m_[1][1] != 1 || this.m_[1][0]) {\n      var filter = [];\n\n      // Note the 12/21 reversal\n      filter.push('M11=', this.m_[0][0], ',',\n                  'M12=', this.m_[1][0], ',',\n                  'M21=', this.m_[0][1], ',',\n                  'M22=', this.m_[1][1], ',',\n                  'Dx=', mr(d.x / Z), ',',\n                  'Dy=', mr(d.y / Z), '');\n\n      // Bounding box calculation (need to minimize displayed area so that\n      // filters don't waste time on unused pixels.\n      var max = d;\n      var c2 = getCoords(this, dx + dw, dy);\n      var c3 = getCoords(this, dx, dy + dh);\n      var c4 = getCoords(this, dx + dw, dy + dh);\n\n      max.x = m.max(max.x, c2.x, c3.x, c4.x);\n      max.y = m.max(max.y, c2.y, c3.y, c4.y);\n\n      vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),\n                  'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',\n                  filter.join(''), \", sizingmethod='clip');\");\n\n    } else {\n      vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');\n    }\n\n    vmlStr.push(' \">' ,\n                '<g_vml_:image src=\"', image.src, '\"',\n                ' style=\"width:', Z * dw, 'px;',\n                ' height:', Z * dh, 'px\"',\n                ' cropleft=\"', sx / w, '\"',\n                ' croptop=\"', sy / h, '\"',\n                ' cropright=\"', (w - sx - sw) / w, '\"',\n                ' cropbottom=\"', (h - sy - sh) / h, '\"',\n                ' />',\n                '</g_vml_:group>');\n\n    this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));\n  };\n\n  contextPrototype.stroke = function(aFill) {\n    var W = 10;\n    var H = 10;\n    // Divide the shape into chunks if it's too long because IE has a limit\n    // somewhere for how long a VML shape can be. This simple division does\n    // not work with fills, only strokes, unfortunately.\n    var chunkSize = 5000;\n\n    var min = {x: null, y: null};\n    var max = {x: null, y: null};\n\n    for (var j = 0; j < this.currentPath_.length; j += chunkSize) {\n      var lineStr = [];\n      var lineOpen = false;\n\n      lineStr.push('<g_vml_:shape',\n                   ' filled=\"', !!aFill, '\"',\n                   ' style=\"position:absolute;width:', W, 'px;height:', H, 'px;\"',\n                   ' coordorigin=\"0,0\"',\n                   ' coordsize=\"', Z * W, ',', Z * H, '\"',\n                   ' stroked=\"', !aFill, '\"',\n                   ' path=\"');\n\n      var newSeq = false;\n\n      for (var i = j; i < Math.min(j + chunkSize, this.currentPath_.length); i++) {\n        if (i % chunkSize == 0 && i > 0) { // move into position for next chunk\n          lineStr.push(' m ', mr(this.currentPath_[i-1].x), ',', mr(this.currentPath_[i-1].y));\n        }\n\n        var p = this.currentPath_[i];\n        var c;\n\n        switch (p.type) {\n          case 'moveTo':\n            c = p;\n            lineStr.push(' m ', mr(p.x), ',', mr(p.y));\n            break;\n          case 'lineTo':\n            lineStr.push(' l ', mr(p.x), ',', mr(p.y));\n            break;\n          case 'close':\n            lineStr.push(' x ');\n            p = null;\n            break;\n          case 'bezierCurveTo':\n            lineStr.push(' c ',\n                         mr(p.cp1x), ',', mr(p.cp1y), ',',\n                         mr(p.cp2x), ',', mr(p.cp2y), ',',\n                         mr(p.x), ',', mr(p.y));\n            break;\n          case 'at':\n          case 'wa':\n            lineStr.push(' ', p.type, ' ',\n                         mr(p.x - this.arcScaleX_ * p.radius), ',',\n                         mr(p.y - this.arcScaleY_ * p.radius), ' ',\n                         mr(p.x + this.arcScaleX_ * p.radius), ',',\n                         mr(p.y + this.arcScaleY_ * p.radius), ' ',\n                         mr(p.xStart), ',', mr(p.yStart), ' ',\n                         mr(p.xEnd), ',', mr(p.yEnd));\n            break;\n        }\n  \n  \n        // TODO: Following is broken for curves due to\n        //       move to proper paths.\n  \n        // Figure out dimensions so we can do gradient fills\n        // properly\n        if (p) {\n          if (min.x == null || p.x < min.x) {\n            min.x = p.x;\n          }\n          if (max.x == null || p.x > max.x) {\n            max.x = p.x;\n          }\n          if (min.y == null || p.y < min.y) {\n            min.y = p.y;\n          }\n          if (max.y == null || p.y > max.y) {\n            max.y = p.y;\n          }\n        }\n      }\n      lineStr.push(' \">');\n  \n      if (!aFill) {\n        appendStroke(this, lineStr);\n      } else {\n        appendFill(this, lineStr, min, max);\n      }\n  \n      lineStr.push('</g_vml_:shape>');\n  \n      this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));\n    }\n  };\n\n  function appendStroke(ctx, lineStr) {\n    var a = processStyle(ctx.strokeStyle);\n    var color = a.color;\n    var opacity = a.alpha * ctx.globalAlpha;\n    var lineWidth = ctx.lineScale_ * ctx.lineWidth;\n\n    // VML cannot correctly render a line if the width is less than 1px.\n    // In that case, we dilute the color to make the line look thinner.\n    if (lineWidth < 1) {\n      opacity *= lineWidth;\n    }\n\n    lineStr.push(\n      '<g_vml_:stroke',\n      ' opacity=\"', opacity, '\"',\n      ' joinstyle=\"', ctx.lineJoin, '\"',\n      ' miterlimit=\"', ctx.miterLimit, '\"',\n      ' endcap=\"', processLineCap(ctx.lineCap), '\"',\n      ' weight=\"', lineWidth, 'px\"',\n      ' color=\"', color, '\" />'\n    );\n  }\n\n  function appendFill(ctx, lineStr, min, max) {\n    var fillStyle = ctx.fillStyle;\n    var arcScaleX = ctx.arcScaleX_;\n    var arcScaleY = ctx.arcScaleY_;\n    var width = max.x - min.x;\n    var height = max.y - min.y;\n    if (fillStyle instanceof CanvasGradient_) {\n      // TODO: Gradients transformed with the transformation matrix.\n      var angle = 0;\n      var focus = {x: 0, y: 0};\n\n      // additional offset\n      var shift = 0;\n      // scale factor for offset\n      var expansion = 1;\n\n      if (fillStyle.type_ == 'gradient') {\n        var x0 = fillStyle.x0_ / arcScaleX;\n        var y0 = fillStyle.y0_ / arcScaleY;\n        var x1 = fillStyle.x1_ / arcScaleX;\n        var y1 = fillStyle.y1_ / arcScaleY;\n        var p0 = getCoords(ctx, x0, y0);\n        var p1 = getCoords(ctx, x1, y1);\n        var dx = p1.x - p0.x;\n        var dy = p1.y - p0.y;\n        angle = Math.atan2(dx, dy) * 180 / Math.PI;\n\n        // The angle should be a non-negative number.\n        if (angle < 0) {\n          angle += 360;\n        }\n\n        // Very small angles produce an unexpected result because they are\n        // converted to a scientific notation string.\n        if (angle < 1e-6) {\n          angle = 0;\n        }\n      } else {\n        var p0 = getCoords(ctx, fillStyle.x0_, fillStyle.y0_);\n        focus = {\n          x: (p0.x - min.x) / width,\n          y: (p0.y - min.y) / height\n        };\n\n        width  /= arcScaleX * Z;\n        height /= arcScaleY * Z;\n        var dimension = m.max(width, height);\n        shift = 2 * fillStyle.r0_ / dimension;\n        expansion = 2 * fillStyle.r1_ / dimension - shift;\n      }\n\n      // We need to sort the color stops in ascending order by offset,\n      // otherwise IE won't interpret it correctly.\n      var stops = fillStyle.colors_;\n      stops.sort(function(cs1, cs2) {\n        return cs1.offset - cs2.offset;\n      });\n\n      var length = stops.length;\n      var color1 = stops[0].color;\n      var color2 = stops[length - 1].color;\n      var opacity1 = stops[0].alpha * ctx.globalAlpha;\n      var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;\n\n      var colors = [];\n      for (var i = 0; i < length; i++) {\n        var stop = stops[i];\n        colors.push(stop.offset * expansion + shift + ' ' + stop.color);\n      }\n\n      // When colors attribute is used, the meanings of opacity and o:opacity2\n      // are reversed.\n      lineStr.push('<g_vml_:fill type=\"', fillStyle.type_, '\"',\n                   ' method=\"none\" focus=\"100%\"',\n                   ' color=\"', color1, '\"',\n                   ' color2=\"', color2, '\"',\n                   ' colors=\"', colors.join(','), '\"',\n                   ' opacity=\"', opacity2, '\"',\n                   ' g_o_:opacity2=\"', opacity1, '\"',\n                   ' angle=\"', angle, '\"',\n                   ' focusposition=\"', focus.x, ',', focus.y, '\" />');\n    } else if (fillStyle instanceof CanvasPattern_) {\n      if (width && height) {\n        var deltaLeft = -min.x;\n        var deltaTop = -min.y;\n        lineStr.push('<g_vml_:fill',\n                     ' position=\"',\n                     deltaLeft / width * arcScaleX * arcScaleX, ',',\n                     deltaTop / height * arcScaleY * arcScaleY, '\"',\n                     ' type=\"tile\"',\n                     // TODO: Figure out the correct size to fit the scale.\n                     //' size=\"', w, 'px ', h, 'px\"',\n                     ' src=\"', fillStyle.src_, '\" />');\n       }\n    } else {\n      var a = processStyle(ctx.fillStyle);\n      var color = a.color;\n      var opacity = a.alpha * ctx.globalAlpha;\n      lineStr.push('<g_vml_:fill color=\"', color, '\" opacity=\"', opacity,\n                   '\" />');\n    }\n  }\n\n  contextPrototype.fill = function() {\n    this.stroke(true);\n  };\n\n  contextPrototype.closePath = function() {\n    this.currentPath_.push({type: 'close'});\n  };\n\n  function getCoords(ctx, aX, aY) {\n    var m = ctx.m_;\n    return {\n      x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,\n      y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2\n    };\n  }\n    contextPrototype.save = function() {\n    var o = {};\n    copyState(this, o);\n    this.aStack_.push(o);\n    this.mStack_.push(this.m_);\n    this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);\n  };\n\n  contextPrototype.restore = function() {\n    if (this.aStack_.length) {\n      copyState(this.aStack_.pop(), this);\n      this.m_ = this.mStack_.pop();\n    }\n  };\n\n  function matrixIsFinite(m) {\n    return isFinite(m[0][0]) && isFinite(m[0][1]) &&\n        isFinite(m[1][0]) && isFinite(m[1][1]) &&\n        isFinite(m[2][0]) && isFinite(m[2][1]);\n  }\n\n  function setM(ctx, m, updateLineScale) {\n    if (!matrixIsFinite(m)) {\n      return;\n    }\n    ctx.m_ = m;\n\n    if (updateLineScale) {\n      // Get the line scale.\n      // Determinant of this.m_ means how much the area is enlarged by the\n      // transformation. So its square root can be used as a scale factor\n      // for width.\n      var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];\n      ctx.lineScale_ = sqrt(abs(det));\n    }\n  }\n\n  contextPrototype.translate = function(aX, aY) {\n    var m1 = [\n      [1,  0,  0],\n      [0,  1,  0],\n      [aX, aY, 1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), false);\n  };\n\n  contextPrototype.rotate = function(aRot) {\n    var c = mc(aRot);\n    var s = ms(aRot);\n\n    var m1 = [\n      [c,  s, 0],\n      [-s, c, 0],\n      [0,  0, 1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), false);\n  };\n\n  contextPrototype.scale = function(aX, aY) {\n    this.arcScaleX_ *= aX;\n    this.arcScaleY_ *= aY;\n    var m1 = [\n      [aX, 0,  0],\n      [0,  aY, 0],\n      [0,  0,  1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), true);\n  };\n\n  contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {\n    var m1 = [\n      [m11, m12, 0],\n      [m21, m22, 0],\n      [dx,  dy,  1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), true);\n  };\n\n  contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {\n    var m = [\n      [m11, m12, 0],\n      [m21, m22, 0],\n      [dx,  dy,  1]\n    ];\n\n    setM(this, m, true);\n  };\n\n  /**\n   * The text drawing function.\n   * The maxWidth argument isn't taken in account, since no browser supports\n   * it yet.\n   */\n  contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) {\n    var m = this.m_,\n        delta = 1000,\n        left = 0,\n        right = delta,\n        offset = {x: 0, y: 0},\n        lineStr = [];\n\n    var fontStyle = getComputedStyle(processFontStyle(this.font),\n                                     this.element_);\n\n    var fontStyleString = buildStyle(fontStyle);\n\n    var elementStyle = this.element_.currentStyle;\n    var textAlign = this.textAlign.toLowerCase();\n    switch (textAlign) {\n      case 'left':\n      case 'center':\n      case 'right':\n        break;\n      case 'end':\n        textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';\n        break;\n      case 'start':\n        textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';\n        break;\n      default:\n        textAlign = 'left';\n    }\n\n    // 1.75 is an arbitrary number, as there is no info about the text baseline\n    switch (this.textBaseline) {\n      case 'hanging':\n      case 'top':\n        offset.y = fontStyle.size / 1.75;\n        break;\n      case 'middle':\n        break;\n      default:\n      case null:\n      case 'alphabetic':\n      case 'ideographic':\n      case 'bottom':\n        offset.y = -fontStyle.size / 2.25;\n        break;\n    }\n\n    switch(textAlign) {\n      case 'right':\n        left = delta;\n        right = 0.05;\n        break;\n      case 'center':\n        left = right = delta / 2;\n        break;\n    }\n\n    var d = getCoords(this, x + offset.x, y + offset.y);\n\n    lineStr.push('<g_vml_:line from=\"', -left ,' 0\" to=\"', right ,' 0.05\" ',\n                 ' coordsize=\"100 100\" coordorigin=\"0 0\"',\n                 ' filled=\"', !stroke, '\" stroked=\"', !!stroke,\n                 '\" style=\"position:absolute;width:1px;height:1px;\">');\n\n    if (stroke) {\n      appendStroke(this, lineStr);\n    } else {\n      // TODO: Fix the min and max params.\n      appendFill(this, lineStr, {x: -left, y: 0},\n                 {x: right, y: fontStyle.size});\n    }\n\n    var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' +\n                m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';\n\n    var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z);\n\n    lineStr.push('<g_vml_:skew on=\"t\" matrix=\"', skewM ,'\" ',\n                 ' offset=\"', skewOffset, '\" origin=\"', left ,' 0\" />',\n                 '<g_vml_:path textpathok=\"true\" />',\n                 '<g_vml_:textpath on=\"true\" string=\"',\n                 encodeHtmlAttribute(text),\n                 '\" style=\"v-text-align:', textAlign,\n                 ';font:', encodeHtmlAttribute(fontStyleString),\n                 '\" /></g_vml_:line>');\n\n    this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));\n  };\n\n  contextPrototype.fillText = function(text, x, y, maxWidth) {\n    this.drawText_(text, x, y, maxWidth, false);\n  };\n\n  contextPrototype.strokeText = function(text, x, y, maxWidth) {\n    this.drawText_(text, x, y, maxWidth, true);\n  };\n\n  contextPrototype.measureText = function(text) {\n    if (!this.textMeasureEl_) {\n      var s = '<span style=\"position:absolute;' +\n          'top:-20000px;left:0;padding:0;margin:0;border:none;' +\n          'white-space:pre;\"></span>';\n      this.element_.insertAdjacentHTML('beforeEnd', s);\n      this.textMeasureEl_ = this.element_.lastChild;\n    }\n    var doc = this.element_.ownerDocument;\n    this.textMeasureEl_.innerHTML = '';\n    this.textMeasureEl_.style.font = this.font;\n    // Don't use innerHTML or innerText because they allow markup/whitespace.\n    this.textMeasureEl_.appendChild(doc.createTextNode(text));\n    return {width: this.textMeasureEl_.offsetWidth};\n  };\n\n  /******** STUBS ********/\n  contextPrototype.clip = function() {\n    // TODO: Implement\n  };\n\n  contextPrototype.arcTo = function() {\n    // TODO: Implement\n  };\n\n  contextPrototype.createPattern = function(image, repetition) {\n    return new CanvasPattern_(image, repetition);\n  };\n\n  // Gradient / Pattern Stubs\n  function CanvasGradient_(aType) {\n    this.type_ = aType;\n    this.x0_ = 0;\n    this.y0_ = 0;\n    this.r0_ = 0;\n    this.x1_ = 0;\n    this.y1_ = 0;\n    this.r1_ = 0;\n    this.colors_ = [];\n  }\n\n  CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {\n    aColor = processStyle(aColor);\n    this.colors_.push({offset: aOffset,\n                       color: aColor.color,\n                       alpha: aColor.alpha});\n  };\n\n  function CanvasPattern_(image, repetition) {\n    assertImageIsValid(image);\n    switch (repetition) {\n      case 'repeat':\n      case null:\n      case '':\n        this.repetition_ = 'repeat';\n        break;\n      case 'repeat-x':\n      case 'repeat-y':\n      case 'no-repeat':\n        this.repetition_ = repetition;\n        break;\n      default:\n        throwException('SYNTAX_ERR');\n    }\n\n    this.src_ = image.src;\n    this.width_ = image.width;\n    this.height_ = image.height;\n  }\n\n  function throwException(s) {\n    throw new DOMException_(s);\n  }\n\n  function assertImageIsValid(img) {\n    if (!img || img.nodeType != 1 || img.tagName != 'IMG') {\n      throwException('TYPE_MISMATCH_ERR');\n    }\n    if (img.readyState != 'complete') {\n      throwException('INVALID_STATE_ERR');\n    }\n  }\n\n  function DOMException_(s) {\n    this.code = this[s];\n    this.message = s +': DOM Exception ' + this.code;\n  }\n  var p = DOMException_.prototype = new Error;\n  p.INDEX_SIZE_ERR = 1;\n  p.DOMSTRING_SIZE_ERR = 2;\n  p.HIERARCHY_REQUEST_ERR = 3;\n  p.WRONG_DOCUMENT_ERR = 4;\n  p.INVALID_CHARACTER_ERR = 5;\n  p.NO_DATA_ALLOWED_ERR = 6;\n  p.NO_MODIFICATION_ALLOWED_ERR = 7;\n  p.NOT_FOUND_ERR = 8;\n  p.NOT_SUPPORTED_ERR = 9;\n  p.INUSE_ATTRIBUTE_ERR = 10;\n  p.INVALID_STATE_ERR = 11;\n  p.SYNTAX_ERR = 12;\n  p.INVALID_MODIFICATION_ERR = 13;\n  p.NAMESPACE_ERR = 14;\n  p.INVALID_ACCESS_ERR = 15;\n  p.VALIDATION_ERR = 16;\n  p.TYPE_MISMATCH_ERR = 17;\n\n  // set up externs\n  G_vmlCanvasManager = G_vmlCanvasManager_;\n  CanvasRenderingContext2D = CanvasRenderingContext2D_;\n  CanvasGradient = CanvasGradient_;\n  CanvasPattern = CanvasPattern_;\n  DOMException = DOMException_;\n})();\n\n} // if\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.colorhelpers.js",
    "content": "/* Plugin for jQuery for working with colors.\n * \n * Version 1.1.\n * \n * Inspiration from jQuery color animation plugin by John Resig.\n *\n * Released under the MIT license by Ole Laursen, October 2009.\n *\n * Examples:\n *\n *   $.color.parse(\"#fff\").scale('rgb', 0.25).add('a', -0.5).toString()\n *   var c = $.color.extract($(\"#mydiv\"), 'background-color');\n *   console.log(c.r, c.g, c.b, c.a);\n *   $.color.make(100, 50, 25, 0.4).toString() // returns \"rgba(100,50,25,0.4)\"\n *\n * Note that .scale() and .add() return the same modified object\n * instead of making a new one.\n *\n * V. 1.1: Fix error handling so e.g. parsing an empty string does\n * produce a color rather than just crashing.\n */ \n\n(function($) {\n    $.color = {};\n\n    // construct color object with some convenient chainable helpers\n    $.color.make = function (r, g, b, a) {\n        var o = {};\n        o.r = r || 0;\n        o.g = g || 0;\n        o.b = b || 0;\n        o.a = a != null ? a : 1;\n\n        o.add = function (c, d) {\n            for (var i = 0; i < c.length; ++i)\n                o[c.charAt(i)] += d;\n            return o.normalize();\n        };\n        \n        o.scale = function (c, f) {\n            for (var i = 0; i < c.length; ++i)\n                o[c.charAt(i)] *= f;\n            return o.normalize();\n        };\n        \n        o.toString = function () {\n            if (o.a >= 1.0) {\n                return \"rgb(\"+[o.r, o.g, o.b].join(\",\")+\")\";\n            } else {\n                return \"rgba(\"+[o.r, o.g, o.b, o.a].join(\",\")+\")\";\n            }\n        };\n\n        o.normalize = function () {\n            function clamp(min, value, max) {\n                return value < min ? min: (value > max ? max: value);\n            }\n            \n            o.r = clamp(0, parseInt(o.r), 255);\n            o.g = clamp(0, parseInt(o.g), 255);\n            o.b = clamp(0, parseInt(o.b), 255);\n            o.a = clamp(0, o.a, 1);\n            return o;\n        };\n\n        o.clone = function () {\n            return $.color.make(o.r, o.b, o.g, o.a);\n        };\n\n        return o.normalize();\n    };\n\n    // extract CSS color property from element, going up in the DOM\n    // if it's \"transparent\"\n    $.color.extract = function (elem, css) {\n        var c;\n\n        do {\n            c = elem.css(css).toLowerCase();\n            // keep going until we find an element that has color, or\n            // we hit the body or root (have no parent)\n            if (c != '' && c != 'transparent')\n                break;\n            elem = elem.parent();\n        } while (elem.length && !$.nodeName(elem.get(0), \"body\"));\n\n        // catch Safari's way of signalling transparent\n        if (c == \"rgba(0, 0, 0, 0)\")\n            c = \"transparent\";\n        \n        return $.color.parse(c);\n    };\n    \n    // parse CSS color string (like \"rgb(10, 32, 43)\" or \"#fff\"),\n    // returns color object, if parsing failed, you get black (0, 0,\n    // 0) out\n    $.color.parse = function (str) {\n        var res, m = $.color.make;\n\n        // Look for rgb(num,num,num)\n        if (res = /rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(str))\n            return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10));\n        \n        // Look for rgba(num,num,num,num)\n        if (res = /rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(str))\n            return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10), parseFloat(res[4]));\n            \n        // Look for rgb(num%,num%,num%)\n        if (res = /rgb\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.exec(str))\n            return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55);\n\n        // Look for rgba(num%,num%,num%,num)\n        if (res = /rgba\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(str))\n            return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55, parseFloat(res[4]));\n        \n        // Look for #a0b1c2\n        if (res = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))\n            return m(parseInt(res[1], 16), parseInt(res[2], 16), parseInt(res[3], 16));\n\n        // Look for #fff\n        if (res = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))\n            return m(parseInt(res[1]+res[1], 16), parseInt(res[2]+res[2], 16), parseInt(res[3]+res[3], 16));\n\n        // Otherwise, we're most likely dealing with a named color\n        var name = $.trim(str).toLowerCase();\n        if (name == \"transparent\")\n            return m(255, 255, 255, 0);\n        else {\n            // default to black\n            res = lookupColors[name] || [0, 0, 0];\n            return m(res[0], res[1], res[2]);\n        }\n    };\n    \n    var lookupColors = {\n        aqua:[0,255,255],\n        azure:[240,255,255],\n        beige:[245,245,220],\n        black:[0,0,0],\n        blue:[0,0,255],\n        brown:[165,42,42],\n        cyan:[0,255,255],\n        darkblue:[0,0,139],\n        darkcyan:[0,139,139],\n        darkgrey:[169,169,169],\n        darkgreen:[0,100,0],\n        darkkhaki:[189,183,107],\n        darkmagenta:[139,0,139],\n        darkolivegreen:[85,107,47],\n        darkorange:[255,140,0],\n        darkorchid:[153,50,204],\n        darkred:[139,0,0],\n        darksalmon:[233,150,122],\n        darkviolet:[148,0,211],\n        fuchsia:[255,0,255],\n        gold:[255,215,0],\n        green:[0,128,0],\n        indigo:[75,0,130],\n        khaki:[240,230,140],\n        lightblue:[173,216,230],\n        lightcyan:[224,255,255],\n        lightgreen:[144,238,144],\n        lightgrey:[211,211,211],\n        lightpink:[255,182,193],\n        lightyellow:[255,255,224],\n        lime:[0,255,0],\n        magenta:[255,0,255],\n        maroon:[128,0,0],\n        navy:[0,0,128],\n        olive:[128,128,0],\n        orange:[255,165,0],\n        pink:[255,192,203],\n        purple:[128,0,128],\n        violet:[128,0,128],\n        red:[255,0,0],\n        silver:[192,192,192],\n        white:[255,255,255],\n        yellow:[255,255,0]\n    };\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.canvas.js",
    "content": "/* Flot plugin for drawing all elements of a plot on the canvas.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nFlot normally produces certain elements, like axis labels and the legend, using\nHTML elements. This permits greater interactivity and customization, and often\nlooks better, due to cross-browser canvas text inconsistencies and limitations.\n\nIt can also be desirable to render the plot entirely in canvas, particularly\nif the goal is to save it as an image, or if Flot is being used in a context\nwhere the HTML DOM does not exist, as is the case within Node.js. This plugin\nswitches out Flot's standard drawing operations for canvas-only replacements.\n\nCurrently the plugin supports only axis labels, but it will eventually allow\nevery element of the plot to be rendered directly to canvas.\n\nThe plugin supports these options:\n\n{\n    canvas: boolean\n}\n\nThe \"canvas\" option controls whether full canvas drawing is enabled, making it\npossible to toggle on and off. This is useful when a plot uses HTML text in the\nbrowser, but needs to redraw with canvas text when exporting as an image.\n\n*/\n\n(function($) {\n\n\tvar options = {\n\t\tcanvas: true\n\t};\n\n\tvar render, getTextInfo, addText;\n\n\t// Cache the prototype hasOwnProperty for faster access\n\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n\tfunction init(plot, classes) {\n\n\t\tvar Canvas = classes.Canvas;\n\n\t\t// We only want to replace the functions once; the second time around\n\t\t// we would just get our new function back.  This whole replacing of\n\t\t// prototype functions is a disaster, and needs to be changed ASAP.\n\n\t\tif (render == null) {\n\t\t\tgetTextInfo = Canvas.prototype.getTextInfo,\n\t\t\taddText = Canvas.prototype.addText,\n\t\t\trender = Canvas.prototype.render;\n\t\t}\n\n\t\t// Finishes rendering the canvas, including overlaid text\n\n\t\tCanvas.prototype.render = function() {\n\n\t\t\tif (!plot.getOptions().canvas) {\n\t\t\t\treturn render.call(this);\n\t\t\t}\n\n\t\t\tvar context = this.context,\n\t\t\t\tcache = this._textCache;\n\n\t\t\t// For each text layer, render elements marked as active\n\n\t\t\tcontext.save();\n\t\t\tcontext.textBaseline = \"middle\";\n\n\t\t\tfor (var layerKey in cache) {\n\t\t\t\tif (hasOwnProperty.call(cache, layerKey)) {\n\t\t\t\t\tvar layerCache = cache[layerKey];\n\t\t\t\t\tfor (var styleKey in layerCache) {\n\t\t\t\t\t\tif (hasOwnProperty.call(layerCache, styleKey)) {\n\t\t\t\t\t\t\tvar styleCache = layerCache[styleKey],\n\t\t\t\t\t\t\t\tupdateStyles = true;\n\t\t\t\t\t\t\tfor (var key in styleCache) {\n\t\t\t\t\t\t\t\tif (hasOwnProperty.call(styleCache, key)) {\n\n\t\t\t\t\t\t\t\t\tvar info = styleCache[key],\n\t\t\t\t\t\t\t\t\t\tpositions = info.positions,\n\t\t\t\t\t\t\t\t\t\tlines = info.lines;\n\n\t\t\t\t\t\t\t\t\t// Since every element at this level of the cache have the\n\t\t\t\t\t\t\t\t\t// same font and fill styles, we can just change them once\n\t\t\t\t\t\t\t\t\t// using the values from the first element.\n\n\t\t\t\t\t\t\t\t\tif (updateStyles) {\n\t\t\t\t\t\t\t\t\t\tcontext.fillStyle = info.font.color;\n\t\t\t\t\t\t\t\t\t\tcontext.font = info.font.definition;\n\t\t\t\t\t\t\t\t\t\tupdateStyles = false;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\t\t\t\t\t\t\tif (position.active) {\n\t\t\t\t\t\t\t\t\t\t\tfor (var j = 0, line; line = position.lines[j]; j++) {\n\t\t\t\t\t\t\t\t\t\t\t\tcontext.fillText(lines[j].text, line[0], line[1]);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tpositions.splice(i--, 1);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (positions.length == 0) {\n\t\t\t\t\t\t\t\t\t\tdelete styleCache[key];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontext.restore();\n\t\t};\n\n\t\t// Creates (if necessary) and returns a text info object.\n\t\t//\n\t\t// When the canvas option is set, the object looks like this:\n\t\t//\n\t\t// {\n\t\t//     width: Width of the text's bounding box.\n\t\t//     height: Height of the text's bounding box.\n\t\t//     positions: Array of positions at which this text is drawn.\n\t\t//     lines: [{\n\t\t//         height: Height of this line.\n\t\t//         widths: Width of this line.\n\t\t//         text: Text on this line.\n\t\t//     }],\n\t\t//     font: {\n\t\t//         definition: Canvas font property string.\n\t\t//         color: Color of the text.\n\t\t//     },\n\t\t// }\n\t\t//\n\t\t// The positions array contains objects that look like this:\n\t\t//\n\t\t// {\n\t\t//     active: Flag indicating whether the text should be visible.\n\t\t//     lines: Array of [x, y] coordinates at which to draw the line.\n\t\t//     x: X coordinate at which to draw the text.\n\t\t//     y: Y coordinate at which to draw the text.\n\t\t// }\n\n\t\tCanvas.prototype.getTextInfo = function(layer, text, font, angle, width) {\n\n\t\t\tif (!plot.getOptions().canvas) {\n\t\t\t\treturn getTextInfo.call(this, layer, text, font, angle, width);\n\t\t\t}\n\n\t\t\tvar textStyle, layerCache, styleCache, info;\n\n\t\t\t// Cast the value to a string, in case we were given a number\n\n\t\t\ttext = \"\" + text;\n\n\t\t\t// If the font is a font-spec object, generate a CSS definition\n\n\t\t\tif (typeof font === \"object\") {\n\t\t\t\ttextStyle = font.style + \" \" + font.variant + \" \" + font.weight + \" \" + font.size + \"px \" + font.family;\n\t\t\t} else {\n\t\t\t\ttextStyle = font;\n\t\t\t}\n\n\t\t\t// Retrieve (or create) the cache for the text's layer and styles\n\n\t\t\tlayerCache = this._textCache[layer];\n\n\t\t\tif (layerCache == null) {\n\t\t\t\tlayerCache = this._textCache[layer] = {};\n\t\t\t}\n\n\t\t\tstyleCache = layerCache[textStyle];\n\n\t\t\tif (styleCache == null) {\n\t\t\t\tstyleCache = layerCache[textStyle] = {};\n\t\t\t}\n\n\t\t\tinfo = styleCache[text];\n\n\t\t\tif (info == null) {\n\n\t\t\t\tvar context = this.context;\n\n\t\t\t\t// If the font was provided as CSS, create a div with those\n\t\t\t\t// classes and examine it to generate a canvas font spec.\n\n\t\t\t\tif (typeof font !== \"object\") {\n\n\t\t\t\t\tvar element = $(\"<div>&nbsp;</div>\")\n\t\t\t\t\t\t.css(\"position\", \"absolute\")\n\t\t\t\t\t\t.addClass(typeof font === \"string\" ? font : null)\n\t\t\t\t\t\t.appendTo(this.getTextLayer(layer));\n\n\t\t\t\t\tfont = {\n\t\t\t\t\t\tlineHeight: element.height(),\n\t\t\t\t\t\tstyle: element.css(\"font-style\"),\n\t\t\t\t\t\tvariant: element.css(\"font-variant\"),\n\t\t\t\t\t\tweight: element.css(\"font-weight\"),\n\t\t\t\t\t\tfamily: element.css(\"font-family\"),\n\t\t\t\t\t\tcolor: element.css(\"color\")\n\t\t\t\t\t};\n\n\t\t\t\t\t// Setting line-height to 1, without units, sets it equal\n\t\t\t\t\t// to the font-size, even if the font-size is abstract,\n\t\t\t\t\t// like 'smaller'.  This enables us to read the real size\n\t\t\t\t\t// via the element's height, working around browsers that\n\t\t\t\t\t// return the literal 'smaller' value.\n\n\t\t\t\t\tfont.size = element.css(\"line-height\", 1).height();\n\n\t\t\t\t\telement.remove();\n\t\t\t\t}\n\n\t\t\t\ttextStyle = font.style + \" \" + font.variant + \" \" + font.weight + \" \" + font.size + \"px \" + font.family;\n\n\t\t\t\t// Create a new info object, initializing the dimensions to\n\t\t\t\t// zero so we can count them up line-by-line.\n\n\t\t\t\tinfo = styleCache[text] = {\n\t\t\t\t\twidth: 0,\n\t\t\t\t\theight: 0,\n\t\t\t\t\tpositions: [],\n\t\t\t\t\tlines: [],\n\t\t\t\t\tfont: {\n\t\t\t\t\t\tdefinition: textStyle,\n\t\t\t\t\t\tcolor: font.color\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tcontext.save();\n\t\t\t\tcontext.font = textStyle;\n\n\t\t\t\t// Canvas can't handle multi-line strings; break on various\n\t\t\t\t// newlines, including HTML brs, to build a list of lines.\n\t\t\t\t// Note that we could split directly on regexps, but IE < 9 is\n\t\t\t\t// broken; revisit when we drop IE 7/8 support.\n\n\t\t\t\tvar lines = (text + \"\").replace(/<br ?\\/?>|\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n\n\t\t\t\tfor (var i = 0; i < lines.length; ++i) {\n\n\t\t\t\t\tvar lineText = lines[i],\n\t\t\t\t\t\tmeasured = context.measureText(lineText);\n\n\t\t\t\t\tinfo.width = Math.max(measured.width, info.width);\n\t\t\t\t\tinfo.height += font.lineHeight;\n\n\t\t\t\t\tinfo.lines.push({\n\t\t\t\t\t\ttext: lineText,\n\t\t\t\t\t\twidth: measured.width,\n\t\t\t\t\t\theight: font.lineHeight\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tcontext.restore();\n\t\t\t}\n\n\t\t\treturn info;\n\t\t};\n\n\t\t// Adds a text string to the canvas text overlay.\n\n\t\tCanvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {\n\n\t\t\tif (!plot.getOptions().canvas) {\n\t\t\t\treturn addText.call(this, layer, x, y, text, font, angle, width, halign, valign);\n\t\t\t}\n\n\t\t\tvar info = this.getTextInfo(layer, text, font, angle, width),\n\t\t\t\tpositions = info.positions,\n\t\t\t\tlines = info.lines;\n\n\t\t\t// Text is drawn with baseline 'middle', which we need to account\n\t\t\t// for by adding half a line's height to the y position.\n\n\t\t\ty += info.height / lines.length / 2;\n\n\t\t\t// Tweak the initial y-position to match vertical alignment\n\n\t\t\tif (valign == \"middle\") {\n\t\t\t\ty = Math.round(y - info.height / 2);\n\t\t\t} else if (valign == \"bottom\") {\n\t\t\t\ty = Math.round(y - info.height);\n\t\t\t} else {\n\t\t\t\ty = Math.round(y);\n\t\t\t}\n\n\t\t\t// FIXME: LEGACY BROWSER FIX\n\t\t\t// AFFECTS: Opera < 12.00\n\n\t\t\t// Offset the y coordinate, since Opera is off pretty\n\t\t\t// consistently compared to the other browsers.\n\n\t\t\tif (!!(window.opera && window.opera.version().split(\".\")[0] < 12)) {\n\t\t\t\ty -= 2;\n\t\t\t}\n\n\t\t\t// Determine whether this text already exists at this position.\n\t\t\t// If so, mark it for inclusion in the next render pass.\n\n\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\tif (position.x == x && position.y == y) {\n\t\t\t\t\tposition.active = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the text doesn't exist at this position, create a new entry\n\n\t\t\tposition = {\n\t\t\t\tactive: true,\n\t\t\t\tlines: [],\n\t\t\t\tx: x,\n\t\t\t\ty: y\n\t\t\t};\n\n\t\t\tpositions.push(position);\n\n\t\t\t// Fill in the x & y positions of each line, adjusting them\n\t\t\t// individually for horizontal alignment.\n\n\t\t\tfor (var i = 0, line; line = lines[i]; i++) {\n\t\t\t\tif (halign == \"center\") {\n\t\t\t\t\tposition.lines.push([Math.round(x - line.width / 2), y]);\n\t\t\t\t} else if (halign == \"right\") {\n\t\t\t\t\tposition.lines.push([Math.round(x - line.width), y]);\n\t\t\t\t} else {\n\t\t\t\t\tposition.lines.push([Math.round(x), y]);\n\t\t\t\t}\n\t\t\t\ty += line.height;\n\t\t\t}\n\t\t};\n\t}\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: \"canvas\",\n\t\tversion: \"1.0\"\n\t});\n\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.categories.js",
    "content": "/* Flot plugin for plotting textual data or categories.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nConsider a dataset like [[\"February\", 34], [\"March\", 20], ...]. This plugin\nallows you to plot such a dataset directly.\n\nTo enable it, you must specify mode: \"categories\" on the axis with the textual\nlabels, e.g.\n\n\t$.plot(\"#placeholder\", data, { xaxis: { mode: \"categories\" } });\n\nBy default, the labels are ordered as they are met in the data series. If you\nneed a different ordering, you can specify \"categories\" on the axis options\nand list the categories there:\n\n\txaxis: {\n\t\tmode: \"categories\",\n\t\tcategories: [\"February\", \"March\", \"April\"]\n\t}\n\nIf you need to customize the distances between the categories, you can specify\n\"categories\" as an object mapping labels to values\n\n\txaxis: {\n\t\tmode: \"categories\",\n\t\tcategories: { \"February\": 1, \"March\": 3, \"April\": 4 }\n\t}\n\nIf you don't specify all categories, the remaining categories will be numbered\nfrom the max value plus 1 (with a spacing of 1 between each).\n\nInternally, the plugin works by transforming the input data through an auto-\ngenerated mapping where the first category becomes 0, the second 1, etc.\nHence, a point like [\"February\", 34] becomes [0, 34] internally in Flot (this\nis visible in hover and click events that return numbers rather than the\ncategory labels). The plugin also overrides the tick generator to spit out the\ncategories as ticks instead of the values.\n\nIf you need to map a value back to its label, the mapping is always accessible\nas \"categories\" on the axis object, e.g. plot.getAxes().xaxis.categories.\n\n*/\n\n(function ($) {\n    var options = {\n        xaxis: {\n            categories: null\n        },\n        yaxis: {\n            categories: null\n        }\n    };\n    \n    function processRawData(plot, series, data, datapoints) {\n        // if categories are enabled, we need to disable\n        // auto-transformation to numbers so the strings are intact\n        // for later processing\n\n        var xCategories = series.xaxis.options.mode == \"categories\",\n            yCategories = series.yaxis.options.mode == \"categories\";\n        \n        if (!(xCategories || yCategories))\n            return;\n\n        var format = datapoints.format;\n\n        if (!format) {\n            // FIXME: auto-detection should really not be defined here\n            var s = series;\n            format = [];\n            format.push({ x: true, number: true, required: true });\n            format.push({ y: true, number: true, required: true });\n\n            if (s.bars.show || (s.lines.show && s.lines.fill)) {\n                var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));\n                format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });\n                if (s.bars.horizontal) {\n                    delete format[format.length - 1].y;\n                    format[format.length - 1].x = true;\n                }\n            }\n            \n            datapoints.format = format;\n        }\n\n        for (var m = 0; m < format.length; ++m) {\n            if (format[m].x && xCategories)\n                format[m].number = false;\n            \n            if (format[m].y && yCategories)\n                format[m].number = false;\n        }\n    }\n\n    function getNextIndex(categories) {\n        var index = -1;\n        \n        for (var v in categories)\n            if (categories[v] > index)\n                index = categories[v];\n\n        return index + 1;\n    }\n\n    function categoriesTickGenerator(axis) {\n        var res = [];\n        for (var label in axis.categories) {\n            var v = axis.categories[label];\n            if (v >= axis.min && v <= axis.max)\n                res.push([v, label]);\n        }\n\n        res.sort(function (a, b) { return a[0] - b[0]; });\n\n        return res;\n    }\n    \n    function setupCategoriesForAxis(series, axis, datapoints) {\n        if (series[axis].options.mode != \"categories\")\n            return;\n        \n        if (!series[axis].categories) {\n            // parse options\n            var c = {}, o = series[axis].options.categories || {};\n            if ($.isArray(o)) {\n                for (var i = 0; i < o.length; ++i)\n                    c[o[i]] = i;\n            }\n            else {\n                for (var v in o)\n                    c[v] = o[v];\n            }\n            \n            series[axis].categories = c;\n        }\n\n        // fix ticks\n        if (!series[axis].options.ticks)\n            series[axis].options.ticks = categoriesTickGenerator;\n\n        transformPointsOnAxis(datapoints, axis, series[axis].categories);\n    }\n    \n    function transformPointsOnAxis(datapoints, axis, categories) {\n        // go through the points, transforming them\n        var points = datapoints.points,\n            ps = datapoints.pointsize,\n            format = datapoints.format,\n            formatColumn = axis.charAt(0),\n            index = getNextIndex(categories);\n\n        for (var i = 0; i < points.length; i += ps) {\n            if (points[i] == null)\n                continue;\n            \n            for (var m = 0; m < ps; ++m) {\n                var val = points[i + m];\n\n                if (val == null || !format[m][formatColumn])\n                    continue;\n\n                if (!(val in categories)) {\n                    categories[val] = index;\n                    ++index;\n                }\n                \n                points[i + m] = categories[val];\n            }\n        }\n    }\n\n    function processDatapoints(plot, series, datapoints) {\n        setupCategoriesForAxis(series, \"xaxis\", datapoints);\n        setupCategoriesForAxis(series, \"yaxis\", datapoints);\n    }\n\n    function init(plot) {\n        plot.hooks.processRawData.push(processRawData);\n        plot.hooks.processDatapoints.push(processDatapoints);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'categories',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.crosshair.js",
    "content": "/* Flot plugin for showing crosshairs when the mouse hovers over the plot.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin supports these options:\n\n\tcrosshair: {\n\t\tmode: null or \"x\" or \"y\" or \"xy\"\n\t\tcolor: color\n\t\tlineWidth: number\n\t}\n\nSet the mode to one of \"x\", \"y\" or \"xy\". The \"x\" mode enables a vertical\ncrosshair that lets you trace the values on the x axis, \"y\" enables a\nhorizontal crosshair and \"xy\" enables them both. \"color\" is the color of the\ncrosshair (default is \"rgba(170, 0, 0, 0.80)\"), \"lineWidth\" is the width of\nthe drawn lines (default is 1).\n\nThe plugin also adds four public methods:\n\n  - setCrosshair( pos )\n\n    Set the position of the crosshair. Note that this is cleared if the user\n    moves the mouse. \"pos\" is in coordinates of the plot and should be on the\n    form { x: xpos, y: ypos } (you can use x2/x3/... if you're using multiple\n    axes), which is coincidentally the same format as what you get from a\n    \"plothover\" event. If \"pos\" is null, the crosshair is cleared.\n\n  - clearCrosshair()\n\n    Clear the crosshair.\n\n  - lockCrosshair(pos)\n\n    Cause the crosshair to lock to the current location, no longer updating if\n    the user moves the mouse. Optionally supply a position (passed on to\n    setCrosshair()) to move it to.\n\n    Example usage:\n\n\tvar myFlot = $.plot( $(\"#graph\"), ..., { crosshair: { mode: \"x\" } } };\n\t$(\"#graph\").bind( \"plothover\", function ( evt, position, item ) {\n\t\tif ( item ) {\n\t\t\t// Lock the crosshair to the data point being hovered\n\t\t\tmyFlot.lockCrosshair({\n\t\t\t\tx: item.datapoint[ 0 ],\n\t\t\t\ty: item.datapoint[ 1 ]\n\t\t\t});\n\t\t} else {\n\t\t\t// Return normal crosshair operation\n\t\t\tmyFlot.unlockCrosshair();\n\t\t}\n\t});\n\n  - unlockCrosshair()\n\n    Free the crosshair to move again after locking it.\n*/\n\n(function ($) {\n    var options = {\n        crosshair: {\n            mode: null, // one of null, \"x\", \"y\" or \"xy\",\n            color: \"rgba(170, 0, 0, 0.80)\",\n            lineWidth: 1\n        }\n    };\n    \n    function init(plot) {\n        // position of crosshair in pixels\n        var crosshair = { x: -1, y: -1, locked: false };\n\n        plot.setCrosshair = function setCrosshair(pos) {\n            if (!pos)\n                crosshair.x = -1;\n            else {\n                var o = plot.p2c(pos);\n                crosshair.x = Math.max(0, Math.min(o.left, plot.width()));\n                crosshair.y = Math.max(0, Math.min(o.top, plot.height()));\n            }\n            \n            plot.triggerRedrawOverlay();\n        };\n        \n        plot.clearCrosshair = plot.setCrosshair; // passes null for pos\n        \n        plot.lockCrosshair = function lockCrosshair(pos) {\n            if (pos)\n                plot.setCrosshair(pos);\n            crosshair.locked = true;\n        };\n\n        plot.unlockCrosshair = function unlockCrosshair() {\n            crosshair.locked = false;\n        };\n\n        function onMouseOut(e) {\n            if (crosshair.locked)\n                return;\n\n            if (crosshair.x != -1) {\n                crosshair.x = -1;\n                plot.triggerRedrawOverlay();\n            }\n        }\n\n        function onMouseMove(e) {\n            if (crosshair.locked)\n                return;\n                \n            if (plot.getSelection && plot.getSelection()) {\n                crosshair.x = -1; // hide the crosshair while selecting\n                return;\n            }\n                \n            var offset = plot.offset();\n            crosshair.x = Math.max(0, Math.min(e.pageX - offset.left, plot.width()));\n            crosshair.y = Math.max(0, Math.min(e.pageY - offset.top, plot.height()));\n            plot.triggerRedrawOverlay();\n        }\n        \n        plot.hooks.bindEvents.push(function (plot, eventHolder) {\n            if (!plot.getOptions().crosshair.mode)\n                return;\n\n            eventHolder.mouseout(onMouseOut);\n            eventHolder.mousemove(onMouseMove);\n        });\n\n        plot.hooks.drawOverlay.push(function (plot, ctx) {\n            var c = plot.getOptions().crosshair;\n            if (!c.mode)\n                return;\n\n            var plotOffset = plot.getPlotOffset();\n            \n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            if (crosshair.x != -1) {\n                var adj = plot.getOptions().crosshair.lineWidth % 2 === 0 ? 0 : 0.5;\n\n                ctx.strokeStyle = c.color;\n                ctx.lineWidth = c.lineWidth;\n                ctx.lineJoin = \"round\";\n\n                ctx.beginPath();\n                if (c.mode.indexOf(\"x\") != -1) {\n                    var drawX = Math.round(crosshair.x) + adj;\n                    ctx.moveTo(drawX, 0);\n                    ctx.lineTo(drawX, plot.height());\n                }\n                if (c.mode.indexOf(\"y\") != -1) {\n                    var drawY = Math.round(crosshair.y) + adj;\n                    ctx.moveTo(0, drawY);\n                    ctx.lineTo(plot.width(), drawY);\n                }\n                ctx.stroke();\n            }\n            ctx.restore();\n        });\n\n        plot.hooks.shutdown.push(function (plot, eventHolder) {\n            eventHolder.unbind(\"mouseout\", onMouseOut);\n            eventHolder.unbind(\"mousemove\", onMouseMove);\n        });\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'crosshair',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.errorbars.js",
    "content": "/* Flot plugin for plotting error bars.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nError bars are used to show standard deviation and other statistical\nproperties in a plot.\n\n* Created by Rui Pereira  -  rui (dot) pereira (at) gmail (dot) com\n\nThis plugin allows you to plot error-bars over points. Set \"errorbars\" inside\nthe points series to the axis name over which there will be error values in\nyour data array (*even* if you do not intend to plot them later, by setting\n\"show: null\" on xerr/yerr).\n\nThe plugin supports these options:\n\n\tseries: {\n\t\tpoints: {\n\t\t\terrorbars: \"x\" or \"y\" or \"xy\",\n\t\t\txerr: {\n\t\t\t\tshow: null/false or true,\n\t\t\t\tasymmetric: null/false or true,\n\t\t\t\tupperCap: null or \"-\" or function,\n\t\t\t\tlowerCap: null or \"-\" or function,\n\t\t\t\tcolor: null or color,\n\t\t\t\tradius: null or number\n\t\t\t},\n\t\t\tyerr: { same options as xerr }\n\t\t}\n\t}\n\nEach data point array is expected to be of the type:\n\n\t\"x\"  [ x, y, xerr ]\n\t\"y\"  [ x, y, yerr ]\n\t\"xy\" [ x, y, xerr, yerr ]\n\nWhere xerr becomes xerr_lower,xerr_upper for the asymmetric error case, and\nequivalently for yerr. Eg., a datapoint for the \"xy\" case with symmetric\nerror-bars on X and asymmetric on Y would be:\n\n\t[ x, y, xerr, yerr_lower, yerr_upper ]\n\nBy default no end caps are drawn. Setting upperCap and/or lowerCap to \"-\" will\ndraw a small cap perpendicular to the error bar. They can also be set to a\nuser-defined drawing function, with (ctx, x, y, radius) as parameters, as eg.\n\n\tfunction drawSemiCircle( ctx, x, y, radius ) {\n\t\tctx.beginPath();\n\t\tctx.arc( x, y, radius, 0, Math.PI, false );\n\t\tctx.moveTo( x - radius, y );\n\t\tctx.lineTo( x + radius, y );\n\t\tctx.stroke();\n\t}\n\nColor and radius both default to the same ones of the points series if not\nset. The independent radius parameter on xerr/yerr is useful for the case when\nwe may want to add error-bars to a line, without showing the interconnecting\npoints (with radius: 0), and still showing end caps on the error-bars.\nshadowSize and lineWidth are derived as well from the points series.\n\n*/\n\n(function ($) {\n    var options = {\n        series: {\n            points: {\n                errorbars: null, //should be 'x', 'y' or 'xy'\n                xerr: { err: 'x', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null},\n                yerr: { err: 'y', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null}\n            }\n        }\n    };\n\n    function processRawData(plot, series, data, datapoints){\n        if (!series.points.errorbars)\n            return;\n\n        // x,y values\n        var format = [\n            { x: true, number: true, required: true },\n            { y: true, number: true, required: true }\n        ];\n\n        var errors = series.points.errorbars;\n        // error bars - first X then Y\n        if (errors == 'x' || errors == 'xy') {\n            // lower / upper error\n            if (series.points.xerr.asymmetric) {\n                format.push({ x: true, number: true, required: true });\n                format.push({ x: true, number: true, required: true });\n            } else\n                format.push({ x: true, number: true, required: true });\n        }\n        if (errors == 'y' || errors == 'xy') {\n            // lower / upper error\n            if (series.points.yerr.asymmetric) {\n                format.push({ y: true, number: true, required: true });\n                format.push({ y: true, number: true, required: true });\n            } else\n                format.push({ y: true, number: true, required: true });\n        }\n        datapoints.format = format;\n    }\n\n    function parseErrors(series, i){\n\n        var points = series.datapoints.points;\n\n        // read errors from points array\n        var exl = null,\n                exu = null,\n                eyl = null,\n                eyu = null;\n        var xerr = series.points.xerr,\n                yerr = series.points.yerr;\n\n        var eb = series.points.errorbars;\n        // error bars - first X\n        if (eb == 'x' || eb == 'xy') {\n            if (xerr.asymmetric) {\n                exl = points[i + 2];\n                exu = points[i + 3];\n                if (eb == 'xy')\n                    if (yerr.asymmetric){\n                        eyl = points[i + 4];\n                        eyu = points[i + 5];\n                    } else eyl = points[i + 4];\n            } else {\n                exl = points[i + 2];\n                if (eb == 'xy')\n                    if (yerr.asymmetric) {\n                        eyl = points[i + 3];\n                        eyu = points[i + 4];\n                    } else eyl = points[i + 3];\n            }\n        // only Y\n        } else if (eb == 'y')\n            if (yerr.asymmetric) {\n                eyl = points[i + 2];\n                eyu = points[i + 3];\n            } else eyl = points[i + 2];\n\n        // symmetric errors?\n        if (exu == null) exu = exl;\n        if (eyu == null) eyu = eyl;\n\n        var errRanges = [exl, exu, eyl, eyu];\n        // nullify if not showing\n        if (!xerr.show){\n            errRanges[0] = null;\n            errRanges[1] = null;\n        }\n        if (!yerr.show){\n            errRanges[2] = null;\n            errRanges[3] = null;\n        }\n        return errRanges;\n    }\n\n    function drawSeriesErrors(plot, ctx, s){\n\n        var points = s.datapoints.points,\n                ps = s.datapoints.pointsize,\n                ax = [s.xaxis, s.yaxis],\n                radius = s.points.radius,\n                err = [s.points.xerr, s.points.yerr];\n\n        //sanity check, in case some inverted axis hack is applied to flot\n        var invertX = false;\n        if (ax[0].p2c(ax[0].max) < ax[0].p2c(ax[0].min)) {\n            invertX = true;\n            var tmp = err[0].lowerCap;\n            err[0].lowerCap = err[0].upperCap;\n            err[0].upperCap = tmp;\n        }\n\n        var invertY = false;\n        if (ax[1].p2c(ax[1].min) < ax[1].p2c(ax[1].max)) {\n            invertY = true;\n            var tmp = err[1].lowerCap;\n            err[1].lowerCap = err[1].upperCap;\n            err[1].upperCap = tmp;\n        }\n\n        for (var i = 0; i < s.datapoints.points.length; i += ps) {\n\n            //parse\n            var errRanges = parseErrors(s, i);\n\n            //cycle xerr & yerr\n            for (var e = 0; e < err.length; e++){\n\n                var minmax = [ax[e].min, ax[e].max];\n\n                //draw this error?\n                if (errRanges[e * err.length]){\n\n                    //data coordinates\n                    var x = points[i],\n                        y = points[i + 1];\n\n                    //errorbar ranges\n                    var upper = [x, y][e] + errRanges[e * err.length + 1],\n                        lower = [x, y][e] - errRanges[e * err.length];\n\n                    //points outside of the canvas\n                    if (err[e].err == 'x')\n                        if (y > ax[1].max || y < ax[1].min || upper < ax[0].min || lower > ax[0].max)\n                            continue;\n                    if (err[e].err == 'y')\n                        if (x > ax[0].max || x < ax[0].min || upper < ax[1].min || lower > ax[1].max)\n                            continue;\n\n                    // prevent errorbars getting out of the canvas\n                    var drawUpper = true,\n                        drawLower = true;\n\n                    if (upper > minmax[1]) {\n                        drawUpper = false;\n                        upper = minmax[1];\n                    }\n                    if (lower < minmax[0]) {\n                        drawLower = false;\n                        lower = minmax[0];\n                    }\n\n                    //sanity check, in case some inverted axis hack is applied to flot\n                    if ((err[e].err == 'x' && invertX) || (err[e].err == 'y' && invertY)) {\n                        //swap coordinates\n                        var tmp = lower;\n                        lower = upper;\n                        upper = tmp;\n                        tmp = drawLower;\n                        drawLower = drawUpper;\n                        drawUpper = tmp;\n                        tmp = minmax[0];\n                        minmax[0] = minmax[1];\n                        minmax[1] = tmp;\n                    }\n\n                    // convert to pixels\n                    x = ax[0].p2c(x),\n                        y = ax[1].p2c(y),\n                        upper = ax[e].p2c(upper);\n                    lower = ax[e].p2c(lower);\n                    minmax[0] = ax[e].p2c(minmax[0]);\n                    minmax[1] = ax[e].p2c(minmax[1]);\n\n                    //same style as points by default\n                    var lw = err[e].lineWidth ? err[e].lineWidth : s.points.lineWidth,\n                        sw = s.points.shadowSize != null ? s.points.shadowSize : s.shadowSize;\n\n                    //shadow as for points\n                    if (lw > 0 && sw > 0) {\n                        var w = sw / 2;\n                        ctx.lineWidth = w;\n                        ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n                        drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w + w/2, minmax);\n\n                        ctx.strokeStyle = \"rgba(0,0,0,0.2)\";\n                        drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w/2, minmax);\n                    }\n\n                    ctx.strokeStyle = err[e].color? err[e].color: s.color;\n                    ctx.lineWidth = lw;\n                    //draw it\n                    drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, 0, minmax);\n                }\n            }\n        }\n    }\n\n    function drawError(ctx,err,x,y,upper,lower,drawUpper,drawLower,radius,offset,minmax){\n\n        //shadow offset\n        y += offset;\n        upper += offset;\n        lower += offset;\n\n        // error bar - avoid plotting over circles\n        if (err.err == 'x'){\n            if (upper > x + radius) drawPath(ctx, [[upper,y],[Math.max(x + radius,minmax[0]),y]]);\n            else drawUpper = false;\n            if (lower < x - radius) drawPath(ctx, [[Math.min(x - radius,minmax[1]),y],[lower,y]] );\n            else drawLower = false;\n        }\n        else {\n            if (upper < y - radius) drawPath(ctx, [[x,upper],[x,Math.min(y - radius,minmax[0])]] );\n            else drawUpper = false;\n            if (lower > y + radius) drawPath(ctx, [[x,Math.max(y + radius,minmax[1])],[x,lower]] );\n            else drawLower = false;\n        }\n\n        //internal radius value in errorbar, allows to plot radius 0 points and still keep proper sized caps\n        //this is a way to get errorbars on lines without visible connecting dots\n        radius = err.radius != null? err.radius: radius;\n\n        // upper cap\n        if (drawUpper) {\n            if (err.upperCap == '-'){\n                if (err.err=='x') drawPath(ctx, [[upper,y - radius],[upper,y + radius]] );\n                else drawPath(ctx, [[x - radius,upper],[x + radius,upper]] );\n            } else if ($.isFunction(err.upperCap)){\n                if (err.err=='x') err.upperCap(ctx, upper, y, radius);\n                else err.upperCap(ctx, x, upper, radius);\n            }\n        }\n        // lower cap\n        if (drawLower) {\n            if (err.lowerCap == '-'){\n                if (err.err=='x') drawPath(ctx, [[lower,y - radius],[lower,y + radius]] );\n                else drawPath(ctx, [[x - radius,lower],[x + radius,lower]] );\n            } else if ($.isFunction(err.lowerCap)){\n                if (err.err=='x') err.lowerCap(ctx, lower, y, radius);\n                else err.lowerCap(ctx, x, lower, radius);\n            }\n        }\n    }\n\n    function drawPath(ctx, pts){\n        ctx.beginPath();\n        ctx.moveTo(pts[0][0], pts[0][1]);\n        for (var p=1; p < pts.length; p++)\n            ctx.lineTo(pts[p][0], pts[p][1]);\n        ctx.stroke();\n    }\n\n    function draw(plot, ctx){\n        var plotOffset = plot.getPlotOffset();\n\n        ctx.save();\n        ctx.translate(plotOffset.left, plotOffset.top);\n        $.each(plot.getData(), function (i, s) {\n            if (s.points.errorbars && (s.points.xerr.show || s.points.yerr.show))\n                drawSeriesErrors(plot, ctx, s);\n        });\n        ctx.restore();\n    }\n\n    function init(plot) {\n        plot.hooks.processRawData.push(processRawData);\n        plot.hooks.draw.push(draw);\n    }\n\n    $.plot.plugins.push({\n                init: init,\n                options: options,\n                name: 'errorbars',\n                version: '1.0'\n            });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.fillbetween.js",
    "content": "/* Flot plugin for computing bottoms for filled line and bar charts.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe case: you've got two series that you want to fill the area between. In Flot\nterms, you need to use one as the fill bottom of the other. You can specify the\nbottom of each data point as the third coordinate manually, or you can use this\nplugin to compute it for you.\n\nIn order to name the other series, you need to give it an id, like this:\n\n\tvar dataset = [\n\t\t{ data: [ ... ], id: \"foo\" } ,         // use default bottom\n\t\t{ data: [ ... ], fillBetween: \"foo\" }, // use first dataset as bottom\n\t];\n\n\t$.plot($(\"#placeholder\"), dataset, { lines: { show: true, fill: true }});\n\nAs a convenience, if the id given is a number that doesn't appear as an id in\nthe series, it is interpreted as the index in the array instead (so fillBetween:\n0 can also mean the first series).\n\nInternally, the plugin modifies the datapoints in each series. For line series,\nextra data points might be inserted through interpolation. Note that at points\nwhere the bottom line is not defined (due to a null point or start/end of line),\nthe current line will show a gap too. The algorithm comes from the\njquery.flot.stack.js plugin, possibly some code could be shared.\n\n*/\n\n(function ( $ ) {\n\n\tvar options = {\n\t\tseries: {\n\t\t\tfillBetween: null\t// or number\n\t\t}\n\t};\n\n\tfunction init( plot ) {\n\n\t\tfunction findBottomSeries( s, allseries ) {\n\n\t\t\tvar i;\n\n\t\t\tfor ( i = 0; i < allseries.length; ++i ) {\n\t\t\t\tif ( allseries[ i ].id === s.fillBetween ) {\n\t\t\t\t\treturn allseries[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( typeof s.fillBetween === \"number\" ) {\n\t\t\t\tif ( s.fillBetween < 0 || s.fillBetween >= allseries.length ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn allseries[ s.fillBetween ];\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction computeFillBottoms( plot, s, datapoints ) {\n\n\t\t\tif ( s.fillBetween == null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar other = findBottomSeries( s, plot.getData() );\n\n\t\t\tif ( !other ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar ps = datapoints.pointsize,\n\t\t\t\tpoints = datapoints.points,\n\t\t\t\totherps = other.datapoints.pointsize,\n\t\t\t\totherpoints = other.datapoints.points,\n\t\t\t\tnewpoints = [],\n\t\t\t\tpx, py, intery, qx, qy, bottom,\n\t\t\t\twithlines = s.lines.show,\n\t\t\t\twithbottom = ps > 2 && datapoints.format[2].y,\n\t\t\t\twithsteps = withlines && s.lines.steps,\n\t\t\t\tfromgap = true,\n\t\t\t\ti = 0,\n\t\t\t\tj = 0,\n\t\t\t\tl, m;\n\n\t\t\twhile ( true ) {\n\n\t\t\t\tif ( i >= points.length ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tl = newpoints.length;\n\n\t\t\t\tif ( points[ i ] == null ) {\n\n\t\t\t\t\t// copy gaps\n\n\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t}\n\n\t\t\t\t\ti += ps;\n\n\t\t\t\t} else if ( j >= otherpoints.length ) {\n\n\t\t\t\t\t// for lines, we can't use the rest of the points\n\n\t\t\t\t\tif ( !withlines ) {\n\t\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ti += ps;\n\n\t\t\t\t} else if ( otherpoints[ j ] == null ) {\n\n\t\t\t\t\t// oops, got a gap\n\n\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\tnewpoints.push( null );\n\t\t\t\t\t}\n\n\t\t\t\t\tfromgap = true;\n\t\t\t\t\tj += otherps;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// cases where we actually got two points\n\n\t\t\t\t\tpx = points[ i ];\n\t\t\t\t\tpy = points[ i + 1 ];\n\t\t\t\t\tqx = otherpoints[ j ];\n\t\t\t\t\tqy = otherpoints[ j + 1 ];\n\t\t\t\t\tbottom = 0;\n\n\t\t\t\t\tif ( px === qx ) {\n\n\t\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//newpoints[ l + 1 ] += qy;\n\t\t\t\t\t\tbottom = qy;\n\n\t\t\t\t\t\ti += ps;\n\t\t\t\t\t\tj += otherps;\n\n\t\t\t\t\t} else if ( px > qx ) {\n\n\t\t\t\t\t\t// we got past point below, might need to\n\t\t\t\t\t\t// insert interpolated extra point\n\n\t\t\t\t\t\tif ( withlines && i > 0 && points[ i - ps ] != null ) {\n\t\t\t\t\t\t\tintery = py + ( points[ i - ps + 1 ] - py ) * ( qx - px ) / ( points[ i - ps ] - px );\n\t\t\t\t\t\t\tnewpoints.push( qx );\n\t\t\t\t\t\t\tnewpoints.push( intery );\n\t\t\t\t\t\t\tfor ( m = 2; m < ps; ++m ) {\n\t\t\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbottom = qy;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tj += otherps;\n\n\t\t\t\t\t} else { // px < qx\n\n\t\t\t\t\t\t// if we come from a gap, we just skip this point\n\n\t\t\t\t\t\tif ( fromgap && withlines ) {\n\t\t\t\t\t\t\ti += ps;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// we might be able to interpolate a point below,\n\t\t\t\t\t\t// this can give us a better y\n\n\t\t\t\t\t\tif ( withlines && j > 0 && otherpoints[ j - otherps ] != null ) {\n\t\t\t\t\t\t\tbottom = qy + ( otherpoints[ j - otherps + 1 ] - qy ) * ( px - qx ) / ( otherpoints[ j - otherps ] - qx );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//newpoints[l + 1] += bottom;\n\n\t\t\t\t\t\ti += ps;\n\t\t\t\t\t}\n\n\t\t\t\t\tfromgap = false;\n\n\t\t\t\t\tif ( l !== newpoints.length && withbottom ) {\n\t\t\t\t\t\tnewpoints[ l + 2 ] = bottom;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// maintain the line steps invariant\n\n\t\t\t\tif ( withsteps && l !== newpoints.length && l > 0 &&\n\t\t\t\t\tnewpoints[ l ] !== null &&\n\t\t\t\t\tnewpoints[ l ] !== newpoints[ l - ps ] &&\n\t\t\t\t\tnewpoints[ l + 1 ] !== newpoints[ l - ps + 1 ] ) {\n\t\t\t\t\tfor (m = 0; m < ps; ++m) {\n\t\t\t\t\t\tnewpoints[ l + ps + m ] = newpoints[ l + m ];\n\t\t\t\t\t}\n\t\t\t\t\tnewpoints[ l + 1 ] = newpoints[ l - ps + 1 ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdatapoints.points = newpoints;\n\t\t}\n\n\t\tplot.hooks.processDatapoints.push( computeFillBottoms );\n\t}\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: \"fillbetween\",\n\t\tversion: \"1.0\"\n\t});\n\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.image.js",
    "content": "/* Flot plugin for plotting images.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe data syntax is [ [ image, x1, y1, x2, y2 ], ... ] where (x1, y1) and\n(x2, y2) are where you intend the two opposite corners of the image to end up\nin the plot. Image must be a fully loaded Javascript image (you can make one\nwith new Image()). If the image is not complete, it's skipped when plotting.\n\nThere are two helpers included for retrieving images. The easiest work the way\nthat you put in URLs instead of images in the data, like this:\n\n\t[ \"myimage.png\", 0, 0, 10, 10 ]\n\nThen call $.plot.image.loadData( data, options, callback ) where data and\noptions are the same as you pass in to $.plot. This loads the images, replaces\nthe URLs in the data with the corresponding images and calls \"callback\" when\nall images are loaded (or failed loading). In the callback, you can then call\n$.plot with the data set. See the included example.\n\nA more low-level helper, $.plot.image.load(urls, callback) is also included.\nGiven a list of URLs, it calls callback with an object mapping from URL to\nImage object when all images are loaded or have failed loading.\n\nThe plugin supports these options:\n\n\tseries: {\n\t\timages: {\n\t\t\tshow: boolean\n\t\t\tanchor: \"corner\" or \"center\"\n\t\t\talpha: [ 0, 1 ]\n\t\t}\n\t}\n\nThey can be specified for a specific series:\n\n\t$.plot( $(\"#placeholder\"), [{\n\t\tdata: [ ... ],\n\t\timages: { ... }\n\t])\n\nNote that because the data format is different from usual data points, you\ncan't use images with anything else in a specific data series.\n\nSetting \"anchor\" to \"center\" causes the pixels in the image to be anchored at\nthe corner pixel centers inside of at the pixel corners, effectively letting\nhalf a pixel stick out to each side in the plot.\n\nA possible future direction could be support for tiling for large images (like\nGoogle Maps).\n\n*/\n\n(function ($) {\n    var options = {\n        series: {\n            images: {\n                show: false,\n                alpha: 1,\n                anchor: \"corner\" // or \"center\"\n            }\n        }\n    };\n\n    $.plot.image = {};\n\n    $.plot.image.loadDataImages = function (series, options, callback) {\n        var urls = [], points = [];\n\n        var defaultShow = options.series.images.show;\n        \n        $.each(series, function (i, s) {\n            if (!(defaultShow || s.images.show))\n                return;\n            \n            if (s.data)\n                s = s.data;\n\n            $.each(s, function (i, p) {\n                if (typeof p[0] == \"string\") {\n                    urls.push(p[0]);\n                    points.push(p);\n                }\n            });\n        });\n\n        $.plot.image.load(urls, function (loadedImages) {\n            $.each(points, function (i, p) {\n                var url = p[0];\n                if (loadedImages[url])\n                    p[0] = loadedImages[url];\n            });\n\n            callback();\n        });\n    };\n    \n    $.plot.image.load = function (urls, callback) {\n        var missing = urls.length, loaded = {};\n        if (missing == 0)\n            callback({});\n\n        $.each(urls, function (i, url) {\n            var handler = function () {\n                --missing;\n                \n                loaded[url] = this;\n                \n                if (missing == 0)\n                    callback(loaded);\n            };\n\n            $('<img />').load(handler).error(handler).attr('src', url);\n        });\n    };\n    \n    function drawSeries(plot, ctx, series) {\n        var plotOffset = plot.getPlotOffset();\n        \n        if (!series.images || !series.images.show)\n            return;\n        \n        var points = series.datapoints.points,\n            ps = series.datapoints.pointsize;\n        \n        for (var i = 0; i < points.length; i += ps) {\n            var img = points[i],\n                x1 = points[i + 1], y1 = points[i + 2],\n                x2 = points[i + 3], y2 = points[i + 4],\n                xaxis = series.xaxis, yaxis = series.yaxis,\n                tmp;\n\n            // actually we should check img.complete, but it\n            // appears to be a somewhat unreliable indicator in\n            // IE6 (false even after load event)\n            if (!img || img.width <= 0 || img.height <= 0)\n                continue;\n\n            if (x1 > x2) {\n                tmp = x2;\n                x2 = x1;\n                x1 = tmp;\n            }\n            if (y1 > y2) {\n                tmp = y2;\n                y2 = y1;\n                y1 = tmp;\n            }\n            \n            // if the anchor is at the center of the pixel, expand the \n            // image by 1/2 pixel in each direction\n            if (series.images.anchor == \"center\") {\n                tmp = 0.5 * (x2-x1) / (img.width - 1);\n                x1 -= tmp;\n                x2 += tmp;\n                tmp = 0.5 * (y2-y1) / (img.height - 1);\n                y1 -= tmp;\n                y2 += tmp;\n            }\n            \n            // clip\n            if (x1 == x2 || y1 == y2 ||\n                x1 >= xaxis.max || x2 <= xaxis.min ||\n                y1 >= yaxis.max || y2 <= yaxis.min)\n                continue;\n\n            var sx1 = 0, sy1 = 0, sx2 = img.width, sy2 = img.height;\n            if (x1 < xaxis.min) {\n                sx1 += (sx2 - sx1) * (xaxis.min - x1) / (x2 - x1);\n                x1 = xaxis.min;\n            }\n\n            if (x2 > xaxis.max) {\n                sx2 += (sx2 - sx1) * (xaxis.max - x2) / (x2 - x1);\n                x2 = xaxis.max;\n            }\n\n            if (y1 < yaxis.min) {\n                sy2 += (sy1 - sy2) * (yaxis.min - y1) / (y2 - y1);\n                y1 = yaxis.min;\n            }\n\n            if (y2 > yaxis.max) {\n                sy1 += (sy1 - sy2) * (yaxis.max - y2) / (y2 - y1);\n                y2 = yaxis.max;\n            }\n            \n            x1 = xaxis.p2c(x1);\n            x2 = xaxis.p2c(x2);\n            y1 = yaxis.p2c(y1);\n            y2 = yaxis.p2c(y2);\n            \n            // the transformation may have swapped us\n            if (x1 > x2) {\n                tmp = x2;\n                x2 = x1;\n                x1 = tmp;\n            }\n            if (y1 > y2) {\n                tmp = y2;\n                y2 = y1;\n                y1 = tmp;\n            }\n\n            tmp = ctx.globalAlpha;\n            ctx.globalAlpha *= series.images.alpha;\n            ctx.drawImage(img,\n                          sx1, sy1, sx2 - sx1, sy2 - sy1,\n                          x1 + plotOffset.left, y1 + plotOffset.top,\n                          x2 - x1, y2 - y1);\n            ctx.globalAlpha = tmp;\n        }\n    }\n\n    function processRawData(plot, series, data, datapoints) {\n        if (!series.images.show)\n            return;\n\n        // format is Image, x1, y1, x2, y2 (opposite corners)\n        datapoints.format = [\n            { required: true },\n            { x: true, number: true, required: true },\n            { y: true, number: true, required: true },\n            { x: true, number: true, required: true },\n            { y: true, number: true, required: true }\n        ];\n    }\n    \n    function init(plot) {\n        plot.hooks.processRawData.push(processRawData);\n        plot.hooks.drawSeries.push(drawSeries);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'image',\n        version: '1.1'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.js",
    "content": "/* Javascript plotting library for jQuery, version 0.8.2.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\n*/\n\n// first an inline dependency, jquery.colorhelpers.js, we inline it here\n// for convenience\n\n/* Plugin for jQuery for working with colors.\n *\n * Version 1.1.\n *\n * Inspiration from jQuery color animation plugin by John Resig.\n *\n * Released under the MIT license by Ole Laursen, October 2009.\n *\n * Examples:\n *\n *   $.color.parse(\"#fff\").scale('rgb', 0.25).add('a', -0.5).toString()\n *   var c = $.color.extract($(\"#mydiv\"), 'background-color');\n *   console.log(c.r, c.g, c.b, c.a);\n *   $.color.make(100, 50, 25, 0.4).toString() // returns \"rgba(100,50,25,0.4)\"\n *\n * Note that .scale() and .add() return the same modified object\n * instead of making a new one.\n *\n * V. 1.1: Fix error handling so e.g. parsing an empty string does\n * produce a color rather than just crashing.\n */\n(function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){return\"rgb(\"+[o.r,o.g,o.b].join(\",\")+\")\"}else{return\"rgba(\"+[o.r,o.g,o.b,o.a].join(\",\")+\")\"}};o.normalize=function(){function clamp(min,value,max){return value<min?min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g),255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=function(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=\"\"&&c!=\"transparent\")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),\"body\"));if(c==\"rgba(0, 0, 0, 0)\")c=\"transparent\";return $.color.parse(c)};$.color.parse=function(str){var res,m=$.color.make;if(res=/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10));if(res=/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res=/rgb\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55);if(res=/rgba\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),parseInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))return m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[3],16));var name=$.trim(str).toLowerCase();if(name==\"transparent\")return m(255,255,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};var lookupColors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);\n\n// the actual Flot code\n(function($) {\n\n\t// Cache the prototype hasOwnProperty for faster access\n\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// The Canvas object is a wrapper around an HTML5 <canvas> tag.\n\t//\n\t// @constructor\n\t// @param {string} cls List of classes to apply to the canvas.\n\t// @param {element} container Element onto which to append the canvas.\n\t//\n\t// Requiring a container is a little iffy, but unfortunately canvas\n\t// operations don't work unless the canvas is attached to the DOM.\n\n\tfunction Canvas(cls, container) {\n\n\t\tvar element = container.children(\".\" + cls)[0];\n\n\t\tif (element == null) {\n\n\t\t\telement = document.createElement(\"canvas\");\n\t\t\telement.className = cls;\n\n\t\t\t$(element).css({ direction: \"ltr\", position: \"absolute\", left: 0, top: 0 })\n\t\t\t\t.appendTo(container);\n\n\t\t\t// If HTML5 Canvas isn't available, fall back to [Ex|Flash]canvas\n\n\t\t\tif (!element.getContext) {\n\t\t\t\tif (window.G_vmlCanvasManager) {\n\t\t\t\t\telement = window.G_vmlCanvasManager.initElement(element);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\"Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element = element;\n\n\t\tvar context = this.context = element.getContext(\"2d\");\n\n\t\t// Determine the screen's ratio of physical to device-independent\n\t\t// pixels.  This is the ratio between the canvas width that the browser\n\t\t// advertises and the number of pixels actually present in that space.\n\n\t\t// The iPhone 4, for example, has a device-independent width of 320px,\n\t\t// but its screen is actually 640px wide.  It therefore has a pixel\n\t\t// ratio of 2, while most normal devices have a ratio of 1.\n\n\t\tvar devicePixelRatio = window.devicePixelRatio || 1,\n\t\t\tbackingStoreRatio =\n\t\t\t\tcontext.webkitBackingStorePixelRatio ||\n\t\t\t\tcontext.mozBackingStorePixelRatio ||\n\t\t\t\tcontext.msBackingStorePixelRatio ||\n\t\t\t\tcontext.oBackingStorePixelRatio ||\n\t\t\t\tcontext.backingStorePixelRatio || 1;\n\n\t\tthis.pixelRatio = devicePixelRatio / backingStoreRatio;\n\n\t\t// Size the canvas to match the internal dimensions of its container\n\n\t\tthis.resize(container.width(), container.height());\n\n\t\t// Collection of HTML div layers for text overlaid onto the canvas\n\n\t\tthis.textContainer = null;\n\t\tthis.text = {};\n\n\t\t// Cache of text fragments and metrics, so we can avoid expensively\n\t\t// re-calculating them when the plot is re-rendered in a loop.\n\n\t\tthis._textCache = {};\n\t}\n\n\t// Resizes the canvas to the given dimensions.\n\t//\n\t// @param {number} width New width of the canvas, in pixels.\n\t// @param {number} width New height of the canvas, in pixels.\n\n\tCanvas.prototype.resize = function(width, height) {\n\n\t\tif (width <= 0 || height <= 0) {\n\t\t\tthrow new Error(\"Invalid dimensions for plot, width = \" + width + \", height = \" + height);\n\t\t}\n\n\t\tvar element = this.element,\n\t\t\tcontext = this.context,\n\t\t\tpixelRatio = this.pixelRatio;\n\n\t\t// Resize the canvas, increasing its density based on the display's\n\t\t// pixel ratio; basically giving it more pixels without increasing the\n\t\t// size of its element, to take advantage of the fact that retina\n\t\t// displays have that many more pixels in the same advertised space.\n\n\t\t// Resizing should reset the state (excanvas seems to be buggy though)\n\n\t\tif (this.width != width) {\n\t\t\telement.width = width * pixelRatio;\n\t\t\telement.style.width = width + \"px\";\n\t\t\tthis.width = width;\n\t\t}\n\n\t\tif (this.height != height) {\n\t\t\telement.height = height * pixelRatio;\n\t\t\telement.style.height = height + \"px\";\n\t\t\tthis.height = height;\n\t\t}\n\n\t\t// Save the context, so we can reset in case we get replotted.  The\n\t\t// restore ensure that we're really back at the initial state, and\n\t\t// should be safe even if we haven't saved the initial state yet.\n\n\t\tcontext.restore();\n\t\tcontext.save();\n\n\t\t// Scale the coordinate space to match the display density; so even though we\n\t\t// may have twice as many pixels, we still want lines and other drawing to\n\t\t// appear at the same size; the extra pixels will just make them crisper.\n\n\t\tcontext.scale(pixelRatio, pixelRatio);\n\t};\n\n\t// Clears the entire canvas area, not including any overlaid HTML text\n\n\tCanvas.prototype.clear = function() {\n\t\tthis.context.clearRect(0, 0, this.width, this.height);\n\t};\n\n\t// Finishes rendering the canvas, including managing the text overlay.\n\n\tCanvas.prototype.render = function() {\n\n\t\tvar cache = this._textCache;\n\n\t\t// For each text layer, add elements marked as active that haven't\n\t\t// already been rendered, and remove those that are no longer active.\n\n\t\tfor (var layerKey in cache) {\n\t\t\tif (hasOwnProperty.call(cache, layerKey)) {\n\n\t\t\t\tvar layer = this.getTextLayer(layerKey),\n\t\t\t\t\tlayerCache = cache[layerKey];\n\n\t\t\t\tlayer.hide();\n\n\t\t\t\tfor (var styleKey in layerCache) {\n\t\t\t\t\tif (hasOwnProperty.call(layerCache, styleKey)) {\n\t\t\t\t\t\tvar styleCache = layerCache[styleKey];\n\t\t\t\t\t\tfor (var key in styleCache) {\n\t\t\t\t\t\t\tif (hasOwnProperty.call(styleCache, key)) {\n\n\t\t\t\t\t\t\t\tvar positions = styleCache[key].positions;\n\n\t\t\t\t\t\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\t\t\t\t\t\tif (position.active) {\n\t\t\t\t\t\t\t\t\t\tif (!position.rendered) {\n\t\t\t\t\t\t\t\t\t\t\tlayer.append(position.element);\n\t\t\t\t\t\t\t\t\t\t\tposition.rendered = true;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tpositions.splice(i--, 1);\n\t\t\t\t\t\t\t\t\t\tif (position.rendered) {\n\t\t\t\t\t\t\t\t\t\t\tposition.element.detach();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (positions.length == 0) {\n\t\t\t\t\t\t\t\t\tdelete styleCache[key];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlayer.show();\n\t\t\t}\n\t\t}\n\t};\n\n\t// Creates (if necessary) and returns the text overlay container.\n\t//\n\t// @param {string} classes String of space-separated CSS classes used to\n\t//     uniquely identify the text layer.\n\t// @return {object} The jQuery-wrapped text-layer div.\n\n\tCanvas.prototype.getTextLayer = function(classes) {\n\n\t\tvar layer = this.text[classes];\n\n\t\t// Create the text layer if it doesn't exist\n\n\t\tif (layer == null) {\n\n\t\t\t// Create the text layer container, if it doesn't exist\n\n\t\t\tif (this.textContainer == null) {\n\t\t\t\tthis.textContainer = $(\"<div class='flot-text'></div>\")\n\t\t\t\t\t.css({\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\t'font-size': \"smaller\",\n\t\t\t\t\t\tcolor: \"#545454\"\n\t\t\t\t\t})\n\t\t\t\t\t.insertAfter(this.element);\n\t\t\t}\n\n\t\t\tlayer = this.text[classes] = $(\"<div></div>\")\n\t\t\t\t.addClass(classes)\n\t\t\t\t.css({\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tbottom: 0,\n\t\t\t\t\tright: 0\n\t\t\t\t})\n\t\t\t\t.appendTo(this.textContainer);\n\t\t}\n\n\t\treturn layer;\n\t};\n\n\t// Creates (if necessary) and returns a text info object.\n\t//\n\t// The object looks like this:\n\t//\n\t// {\n\t//     width: Width of the text's wrapper div.\n\t//     height: Height of the text's wrapper div.\n\t//     element: The jQuery-wrapped HTML div containing the text.\n\t//     positions: Array of positions at which this text is drawn.\n\t// }\n\t//\n\t// The positions array contains objects that look like this:\n\t//\n\t// {\n\t//     active: Flag indicating whether the text should be visible.\n\t//     rendered: Flag indicating whether the text is currently visible.\n\t//     element: The jQuery-wrapped HTML div containing the text.\n\t//     x: X coordinate at which to draw the text.\n\t//     y: Y coordinate at which to draw the text.\n\t// }\n\t//\n\t// Each position after the first receives a clone of the original element.\n\t//\n\t// The idea is that that the width, height, and general 'identity' of the\n\t// text is constant no matter where it is placed; the placements are a\n\t// secondary property.\n\t//\n\t// Canvas maintains a cache of recently-used text info objects; getTextInfo\n\t// either returns the cached element or creates a new entry.\n\t//\n\t// @param {string} layer A string of space-separated CSS classes uniquely\n\t//     identifying the layer containing this text.\n\t// @param {string} text Text string to retrieve info for.\n\t// @param {(string|object)=} font Either a string of space-separated CSS\n\t//     classes or a font-spec object, defining the text's font and style.\n\t// @param {number=} angle Angle at which to rotate the text, in degrees.\n\t//     Angle is currently unused, it will be implemented in the future.\n\t// @param {number=} width Maximum width of the text before it wraps.\n\t// @return {object} a text info object.\n\n\tCanvas.prototype.getTextInfo = function(layer, text, font, angle, width) {\n\n\t\tvar textStyle, layerCache, styleCache, info;\n\n\t\t// Cast the value to a string, in case we were given a number or such\n\n\t\ttext = \"\" + text;\n\n\t\t// If the font is a font-spec object, generate a CSS font definition\n\n\t\tif (typeof font === \"object\") {\n\t\t\ttextStyle = font.style + \" \" + font.variant + \" \" + font.weight + \" \" + font.size + \"px/\" + font.lineHeight + \"px \" + font.family;\n\t\t} else {\n\t\t\ttextStyle = font;\n\t\t}\n\n\t\t// Retrieve (or create) the cache for the text's layer and styles\n\n\t\tlayerCache = this._textCache[layer];\n\n\t\tif (layerCache == null) {\n\t\t\tlayerCache = this._textCache[layer] = {};\n\t\t}\n\n\t\tstyleCache = layerCache[textStyle];\n\n\t\tif (styleCache == null) {\n\t\t\tstyleCache = layerCache[textStyle] = {};\n\t\t}\n\n\t\tinfo = styleCache[text];\n\n\t\t// If we can't find a matching element in our cache, create a new one\n\n\t\tif (info == null) {\n\n\t\t\tvar element = $(\"<div></div>\").html(text)\n\t\t\t\t.css({\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t'max-width': width,\n\t\t\t\t\ttop: -9999\n\t\t\t\t})\n\t\t\t\t.appendTo(this.getTextLayer(layer));\n\n\t\t\tif (typeof font === \"object\") {\n\t\t\t\telement.css({\n\t\t\t\t\tfont: textStyle,\n\t\t\t\t\tcolor: font.color\n\t\t\t\t});\n\t\t\t} else if (typeof font === \"string\") {\n\t\t\t\telement.addClass(font);\n\t\t\t}\n\n\t\t\tinfo = styleCache[text] = {\n\t\t\t\twidth: element.outerWidth(true),\n\t\t\t\theight: element.outerHeight(true),\n\t\t\t\telement: element,\n\t\t\t\tpositions: []\n\t\t\t};\n\n\t\t\telement.detach();\n\t\t}\n\n\t\treturn info;\n\t};\n\n\t// Adds a text string to the canvas text overlay.\n\t//\n\t// The text isn't drawn immediately; it is marked as rendering, which will\n\t// result in its addition to the canvas on the next render pass.\n\t//\n\t// @param {string} layer A string of space-separated CSS classes uniquely\n\t//     identifying the layer containing this text.\n\t// @param {number} x X coordinate at which to draw the text.\n\t// @param {number} y Y coordinate at which to draw the text.\n\t// @param {string} text Text string to draw.\n\t// @param {(string|object)=} font Either a string of space-separated CSS\n\t//     classes or a font-spec object, defining the text's font and style.\n\t// @param {number=} angle Angle at which to rotate the text, in degrees.\n\t//     Angle is currently unused, it will be implemented in the future.\n\t// @param {number=} width Maximum width of the text before it wraps.\n\t// @param {string=} halign Horizontal alignment of the text; either \"left\",\n\t//     \"center\" or \"right\".\n\t// @param {string=} valign Vertical alignment of the text; either \"top\",\n\t//     \"middle\" or \"bottom\".\n\n\tCanvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {\n\n\t\tvar info = this.getTextInfo(layer, text, font, angle, width),\n\t\t\tpositions = info.positions;\n\n\t\t// Tweak the div's position to match the text's alignment\n\n\t\tif (halign == \"center\") {\n\t\t\tx -= info.width / 2;\n\t\t} else if (halign == \"right\") {\n\t\t\tx -= info.width;\n\t\t}\n\n\t\tif (valign == \"middle\") {\n\t\t\ty -= info.height / 2;\n\t\t} else if (valign == \"bottom\") {\n\t\t\ty -= info.height;\n\t\t}\n\n\t\t// Determine whether this text already exists at this position.\n\t\t// If so, mark it for inclusion in the next render pass.\n\n\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\tif (position.x == x && position.y == y) {\n\t\t\t\tposition.active = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// If the text doesn't exist at this position, create a new entry\n\n\t\t// For the very first position we'll re-use the original element,\n\t\t// while for subsequent ones we'll clone it.\n\n\t\tposition = {\n\t\t\tactive: true,\n\t\t\trendered: false,\n\t\t\telement: positions.length ? info.element.clone() : info.element,\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\n\t\tpositions.push(position);\n\n\t\t// Move the element to its final position within the container\n\n\t\tposition.element.css({\n\t\t\ttop: Math.round(y),\n\t\t\tleft: Math.round(x),\n\t\t\t'text-align': halign\t// In case the text wraps\n\t\t});\n\t};\n\n\t// Removes one or more text strings from the canvas text overlay.\n\t//\n\t// If no parameters are given, all text within the layer is removed.\n\t//\n\t// Note that the text is not immediately removed; it is simply marked as\n\t// inactive, which will result in its removal on the next render pass.\n\t// This avoids the performance penalty for 'clear and redraw' behavior,\n\t// where we potentially get rid of all text on a layer, but will likely\n\t// add back most or all of it later, as when redrawing axes, for example.\n\t//\n\t// @param {string} layer A string of space-separated CSS classes uniquely\n\t//     identifying the layer containing this text.\n\t// @param {number=} x X coordinate of the text.\n\t// @param {number=} y Y coordinate of the text.\n\t// @param {string=} text Text string to remove.\n\t// @param {(string|object)=} font Either a string of space-separated CSS\n\t//     classes or a font-spec object, defining the text's font and style.\n\t// @param {number=} angle Angle at which the text is rotated, in degrees.\n\t//     Angle is currently unused, it will be implemented in the future.\n\n\tCanvas.prototype.removeText = function(layer, x, y, text, font, angle) {\n\t\tif (text == null) {\n\t\t\tvar layerCache = this._textCache[layer];\n\t\t\tif (layerCache != null) {\n\t\t\t\tfor (var styleKey in layerCache) {\n\t\t\t\t\tif (hasOwnProperty.call(layerCache, styleKey)) {\n\t\t\t\t\t\tvar styleCache = layerCache[styleKey];\n\t\t\t\t\t\tfor (var key in styleCache) {\n\t\t\t\t\t\t\tif (hasOwnProperty.call(styleCache, key)) {\n\t\t\t\t\t\t\t\tvar positions = styleCache[key].positions;\n\t\t\t\t\t\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\t\t\t\t\t\tposition.active = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar positions = this.getTextInfo(layer, text, font, angle).positions;\n\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\tif (position.x == x && position.y == y) {\n\t\t\t\t\tposition.active = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// The top-level container for the entire plot.\n\n    function Plot(placeholder, data_, options_, plugins) {\n        // data is on the form:\n        //   [ series1, series2 ... ]\n        // where series is either just the data as [ [x1, y1], [x2, y2], ... ]\n        // or { data: [ [x1, y1], [x2, y2], ... ], label: \"some label\", ... }\n\n        var series = [],\n            options = {\n                // the color theme used for graphs\n                colors: [\"#edc240\", \"#afd8f8\", \"#cb4b4b\", \"#4da74d\", \"#9440ed\"],\n                legend: {\n                    show: true,\n                    noColumns: 1, // number of colums in legend table\n                    labelFormatter: null, // fn: string -> string\n                    labelBoxBorderColor: \"#ccc\", // border color for the little label boxes\n                    container: null, // container (as jQuery object) to put legend in, null means default on top of graph\n                    position: \"ne\", // position of default legend container within plot\n                    margin: 5, // distance from grid edge to default legend container within plot\n                    backgroundColor: null, // null means auto-detect\n                    backgroundOpacity: 0.85, // set to 0 to avoid background\n                    sorted: null    // default to no legend sorting\n                },\n                xaxis: {\n                    show: null, // null = auto-detect, true = always, false = never\n                    position: \"bottom\", // or \"top\"\n                    mode: null, // null or \"time\"\n                    font: null, // null (derived from CSS in placeholder) or object like { size: 11, lineHeight: 13, style: \"italic\", weight: \"bold\", family: \"sans-serif\", variant: \"small-caps\" }\n                    color: null, // base color, labels, ticks\n                    tickColor: null, // possibly different color of ticks, e.g. \"rgba(0,0,0,0.15)\"\n                    transform: null, // null or f: number -> number to transform axis\n                    inverseTransform: null, // if transform is set, this should be the inverse function\n                    min: null, // min. value to show, null means set automatically\n                    max: null, // max. value to show, null means set automatically\n                    autoscaleMargin: null, // margin in % to add if auto-setting min/max\n                    ticks: null, // either [1, 3] or [[1, \"a\"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks\n                    tickFormatter: null, // fn: number -> string\n                    labelWidth: null, // size of tick labels in pixels\n                    labelHeight: null,\n                    reserveSpace: null, // whether to reserve space even if axis isn't shown\n                    tickLength: null, // size in pixels of ticks, or \"full\" for whole line\n                    alignTicksWithAxis: null, // axis number or null for no sync\n                    tickDecimals: null, // no. of decimals, null means auto\n                    tickSize: null, // number or [number, \"unit\"]\n                    minTickSize: null // number or [number, \"unit\"]\n                },\n                yaxis: {\n                    autoscaleMargin: 0.02,\n                    position: \"left\" // or \"right\"\n                },\n                xaxes: [],\n                yaxes: [],\n                series: {\n                    points: {\n                        show: false,\n                        radius: 3,\n                        lineWidth: 2, // in pixels\n                        fill: true,\n                        fillColor: \"#ffffff\",\n                        symbol: \"circle\" // or callback\n                    },\n                    lines: {\n                        // we don't put in show: false so we can see\n                        // whether lines were actively disabled\n                        lineWidth: 2, // in pixels\n                        fill: false,\n                        fillColor: null,\n                        steps: false\n                        // Omit 'zero', so we can later default its value to\n                        // match that of the 'fill' option.\n                    },\n                    bars: {\n                        show: false,\n                        lineWidth: 2, // in pixels\n                        barWidth: 1, // in units of the x axis\n                        fill: true,\n                        fillColor: null,\n                        align: \"left\", // \"left\", \"right\", or \"center\"\n                        horizontal: false,\n                        zero: true\n                    },\n                    shadowSize: 3,\n                    highlightColor: null\n                },\n                grid: {\n                    show: true,\n                    aboveData: false,\n                    color: \"#545454\", // primary color used for outline and labels\n                    backgroundColor: null, // null for transparent, else color\n                    borderColor: null, // set if different from the grid color\n                    tickColor: null, // color for the ticks, e.g. \"rgba(0,0,0,0.15)\"\n                    margin: 0, // distance from the canvas edge to the grid\n                    labelMargin: 5, // in pixels\n                    axisMargin: 8, // in pixels\n                    borderWidth: 2, // in pixels\n                    minBorderMargin: null, // in pixels, null means taken from points radius\n                    markings: null, // array of ranges or fn: axes -> array of ranges\n                    markingsColor: \"#f4f4f4\",\n                    markingsLineWidth: 2,\n                    // interactive stuff\n                    clickable: false,\n                    hoverable: false,\n                    autoHighlight: true, // highlight in case mouse is near\n                    mouseActiveRadius: 10 // how far the mouse can be away to activate an item\n                },\n                interaction: {\n                    redrawOverlayInterval: 1000/60 // time between updates, -1 means in same flow\n                },\n                hooks: {}\n            },\n        surface = null,     // the canvas for the plot itself\n        overlay = null,     // canvas for interactive stuff on top of plot\n        eventHolder = null, // jQuery object that events should be bound to\n        ctx = null, octx = null,\n        xaxes = [], yaxes = [],\n        plotOffset = { left: 0, right: 0, top: 0, bottom: 0},\n        plotWidth = 0, plotHeight = 0,\n        hooks = {\n            processOptions: [],\n            processRawData: [],\n            processDatapoints: [],\n            processOffset: [],\n            drawBackground: [],\n            drawSeries: [],\n            draw: [],\n            bindEvents: [],\n            drawOverlay: [],\n            shutdown: []\n        },\n        plot = this;\n\n        // public functions\n        plot.setData = setData;\n        plot.setupGrid = setupGrid;\n        plot.draw = draw;\n        plot.getPlaceholder = function() { return placeholder; };\n        plot.getCanvas = function() { return surface.element; };\n        plot.getPlotOffset = function() { return plotOffset; };\n        plot.width = function () { return plotWidth; };\n        plot.height = function () { return plotHeight; };\n        plot.offset = function () {\n            var o = eventHolder.offset();\n            o.left += plotOffset.left;\n            o.top += plotOffset.top;\n            return o;\n        };\n        plot.getData = function () { return series; };\n        plot.getAxes = function () {\n            var res = {}, i;\n            $.each(xaxes.concat(yaxes), function (_, axis) {\n                if (axis)\n                    res[axis.direction + (axis.n != 1 ? axis.n : \"\") + \"axis\"] = axis;\n            });\n            return res;\n        };\n        plot.getXAxes = function () { return xaxes; };\n        plot.getYAxes = function () { return yaxes; };\n        plot.c2p = canvasToAxisCoords;\n        plot.p2c = axisToCanvasCoords;\n        plot.getOptions = function () { return options; };\n        plot.highlight = highlight;\n        plot.unhighlight = unhighlight;\n        plot.triggerRedrawOverlay = triggerRedrawOverlay;\n        plot.pointOffset = function(point) {\n            return {\n                left: parseInt(xaxes[axisNumber(point, \"x\") - 1].p2c(+point.x) + plotOffset.left, 10),\n                top: parseInt(yaxes[axisNumber(point, \"y\") - 1].p2c(+point.y) + plotOffset.top, 10)\n            };\n        };\n        plot.shutdown = shutdown;\n        plot.destroy = function () {\n            shutdown();\n            placeholder.removeData(\"plot\").empty();\n\n            series = [];\n            options = null;\n            surface = null;\n            overlay = null;\n            eventHolder = null;\n            ctx = null;\n            octx = null;\n            xaxes = [];\n            yaxes = [];\n            hooks = null;\n            highlights = [];\n            plot = null;\n        };\n        plot.resize = function () {\n        \tvar width = placeholder.width(),\n        \t\theight = placeholder.height();\n            surface.resize(width, height);\n            overlay.resize(width, height);\n        };\n\n        // public attributes\n        plot.hooks = hooks;\n\n        // initialize\n        initPlugins(plot);\n        parseOptions(options_);\n        setupCanvases();\n        setData(data_);\n        setupGrid();\n        draw();\n        bindEvents();\n\n\n        function executeHooks(hook, args) {\n            args = [plot].concat(args);\n            for (var i = 0; i < hook.length; ++i)\n                hook[i].apply(this, args);\n        }\n\n        function initPlugins() {\n\n            // References to key classes, allowing plugins to modify them\n\n            var classes = {\n                Canvas: Canvas\n            };\n\n            for (var i = 0; i < plugins.length; ++i) {\n                var p = plugins[i];\n                p.init(plot, classes);\n                if (p.options)\n                    $.extend(true, options, p.options);\n            }\n        }\n\n        function parseOptions(opts) {\n\n            $.extend(true, options, opts);\n\n            // $.extend merges arrays, rather than replacing them.  When less\n            // colors are provided than the size of the default palette, we\n            // end up with those colors plus the remaining defaults, which is\n            // not expected behavior; avoid it by replacing them here.\n\n            if (opts && opts.colors) {\n            \toptions.colors = opts.colors;\n            }\n\n            if (options.xaxis.color == null)\n                options.xaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n            if (options.yaxis.color == null)\n                options.yaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n\n            if (options.xaxis.tickColor == null) // grid.tickColor for back-compatibility\n                options.xaxis.tickColor = options.grid.tickColor || options.xaxis.color;\n            if (options.yaxis.tickColor == null) // grid.tickColor for back-compatibility\n                options.yaxis.tickColor = options.grid.tickColor || options.yaxis.color;\n\n            if (options.grid.borderColor == null)\n                options.grid.borderColor = options.grid.color;\n            if (options.grid.tickColor == null)\n                options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n\n            // Fill in defaults for axis options, including any unspecified\n            // font-spec fields, if a font-spec was provided.\n\n            // If no x/y axis options were provided, create one of each anyway,\n            // since the rest of the code assumes that they exist.\n\n            var i, axisOptions, axisCount,\n                fontSize = placeholder.css(\"font-size\"),\n                fontSizeDefault = fontSize ? +fontSize.replace(\"px\", \"\") : 13,\n                fontDefaults = {\n                    style: placeholder.css(\"font-style\"),\n                    size: Math.round(0.8 * fontSizeDefault),\n                    variant: placeholder.css(\"font-variant\"),\n                    weight: placeholder.css(\"font-weight\"),\n                    family: placeholder.css(\"font-family\")\n                };\n\n            axisCount = options.xaxes.length || 1;\n            for (i = 0; i < axisCount; ++i) {\n\n                axisOptions = options.xaxes[i];\n                if (axisOptions && !axisOptions.tickColor) {\n                    axisOptions.tickColor = axisOptions.color;\n                }\n\n                axisOptions = $.extend(true, {}, options.xaxis, axisOptions);\n                options.xaxes[i] = axisOptions;\n\n                if (axisOptions.font) {\n                    axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);\n                    if (!axisOptions.font.color) {\n                        axisOptions.font.color = axisOptions.color;\n                    }\n                    if (!axisOptions.font.lineHeight) {\n                        axisOptions.font.lineHeight = Math.round(axisOptions.font.size * 1.15);\n                    }\n                }\n            }\n\n            axisCount = options.yaxes.length || 1;\n            for (i = 0; i < axisCount; ++i) {\n\n                axisOptions = options.yaxes[i];\n                if (axisOptions && !axisOptions.tickColor) {\n                    axisOptions.tickColor = axisOptions.color;\n                }\n\n                axisOptions = $.extend(true, {}, options.yaxis, axisOptions);\n                options.yaxes[i] = axisOptions;\n\n                if (axisOptions.font) {\n                    axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);\n                    if (!axisOptions.font.color) {\n                        axisOptions.font.color = axisOptions.color;\n                    }\n                    if (!axisOptions.font.lineHeight) {\n                        axisOptions.font.lineHeight = Math.round(axisOptions.font.size * 1.15);\n                    }\n                }\n            }\n\n            // backwards compatibility, to be removed in future\n            if (options.xaxis.noTicks && options.xaxis.ticks == null)\n                options.xaxis.ticks = options.xaxis.noTicks;\n            if (options.yaxis.noTicks && options.yaxis.ticks == null)\n                options.yaxis.ticks = options.yaxis.noTicks;\n            if (options.x2axis) {\n                options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis);\n                options.xaxes[1].position = \"top\";\n            }\n            if (options.y2axis) {\n                options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis);\n                options.yaxes[1].position = \"right\";\n            }\n            if (options.grid.coloredAreas)\n                options.grid.markings = options.grid.coloredAreas;\n            if (options.grid.coloredAreasColor)\n                options.grid.markingsColor = options.grid.coloredAreasColor;\n            if (options.lines)\n                $.extend(true, options.series.lines, options.lines);\n            if (options.points)\n                $.extend(true, options.series.points, options.points);\n            if (options.bars)\n                $.extend(true, options.series.bars, options.bars);\n            if (options.shadowSize != null)\n                options.series.shadowSize = options.shadowSize;\n            if (options.highlightColor != null)\n                options.series.highlightColor = options.highlightColor;\n\n            // save options on axes for future reference\n            for (i = 0; i < options.xaxes.length; ++i)\n                getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i];\n            for (i = 0; i < options.yaxes.length; ++i)\n                getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i];\n\n            // add hooks from options\n            for (var n in hooks)\n                if (options.hooks[n] && options.hooks[n].length)\n                    hooks[n] = hooks[n].concat(options.hooks[n]);\n\n            executeHooks(hooks.processOptions, [options]);\n        }\n\n        function setData(d) {\n            series = parseData(d);\n            fillInSeriesOptions();\n            processData();\n        }\n\n        function parseData(d) {\n            var res = [];\n            for (var i = 0; i < d.length; ++i) {\n                var s = $.extend(true, {}, options.series);\n\n                if (d[i].data != null) {\n                    s.data = d[i].data; // move the data instead of deep-copy\n                    delete d[i].data;\n\n                    $.extend(true, s, d[i]);\n\n                    d[i].data = s.data;\n                }\n                else\n                    s.data = d[i];\n                res.push(s);\n            }\n\n            return res;\n        }\n\n        function axisNumber(obj, coord) {\n            var a = obj[coord + \"axis\"];\n            if (typeof a == \"object\") // if we got a real axis, extract number\n                a = a.n;\n            if (typeof a != \"number\")\n                a = 1; // default to first axis\n            return a;\n        }\n\n        function allAxes() {\n            // return flat array without annoying null entries\n            return $.grep(xaxes.concat(yaxes), function (a) { return a; });\n        }\n\n        function canvasToAxisCoords(pos) {\n            // return an object with x/y corresponding to all used axes\n            var res = {}, i, axis;\n            for (i = 0; i < xaxes.length; ++i) {\n                axis = xaxes[i];\n                if (axis && axis.used)\n                    res[\"x\" + axis.n] = axis.c2p(pos.left);\n            }\n\n            for (i = 0; i < yaxes.length; ++i) {\n                axis = yaxes[i];\n                if (axis && axis.used)\n                    res[\"y\" + axis.n] = axis.c2p(pos.top);\n            }\n\n            if (res.x1 !== undefined)\n                res.x = res.x1;\n            if (res.y1 !== undefined)\n                res.y = res.y1;\n\n            return res;\n        }\n\n        function axisToCanvasCoords(pos) {\n            // get canvas coords from the first pair of x/y found in pos\n            var res = {}, i, axis, key;\n\n            for (i = 0; i < xaxes.length; ++i) {\n                axis = xaxes[i];\n                if (axis && axis.used) {\n                    key = \"x\" + axis.n;\n                    if (pos[key] == null && axis.n == 1)\n                        key = \"x\";\n\n                    if (pos[key] != null) {\n                        res.left = axis.p2c(pos[key]);\n                        break;\n                    }\n                }\n            }\n\n            for (i = 0; i < yaxes.length; ++i) {\n                axis = yaxes[i];\n                if (axis && axis.used) {\n                    key = \"y\" + axis.n;\n                    if (pos[key] == null && axis.n == 1)\n                        key = \"y\";\n\n                    if (pos[key] != null) {\n                        res.top = axis.p2c(pos[key]);\n                        break;\n                    }\n                }\n            }\n\n            return res;\n        }\n\n        function getOrCreateAxis(axes, number) {\n            if (!axes[number - 1])\n                axes[number - 1] = {\n                    n: number, // save the number for future reference\n                    direction: axes == xaxes ? \"x\" : \"y\",\n                    options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis)\n                };\n\n            return axes[number - 1];\n        }\n\n        function fillInSeriesOptions() {\n\n            var neededColors = series.length, maxIndex = -1, i;\n\n            // Subtract the number of series that already have fixed colors or\n            // color indexes from the number that we still need to generate.\n\n            for (i = 0; i < series.length; ++i) {\n                var sc = series[i].color;\n                if (sc != null) {\n                    neededColors--;\n                    if (typeof sc == \"number\" && sc > maxIndex) {\n                        maxIndex = sc;\n                    }\n                }\n            }\n\n            // If any of the series have fixed color indexes, then we need to\n            // generate at least as many colors as the highest index.\n\n            if (neededColors <= maxIndex) {\n                neededColors = maxIndex + 1;\n            }\n\n            // Generate all the colors, using first the option colors and then\n            // variations on those colors once they're exhausted.\n\n            var c, colors = [], colorPool = options.colors,\n                colorPoolSize = colorPool.length, variation = 0;\n\n            for (i = 0; i < neededColors; i++) {\n\n                c = $.color.parse(colorPool[i % colorPoolSize] || \"#666\");\n\n                // Each time we exhaust the colors in the pool we adjust\n                // a scaling factor used to produce more variations on\n                // those colors. The factor alternates negative/positive\n                // to produce lighter/darker colors.\n\n                // Reset the variation after every few cycles, or else\n                // it will end up producing only white or black colors.\n\n                if (i % colorPoolSize == 0 && i) {\n                    if (variation >= 0) {\n                        if (variation < 0.5) {\n                            variation = -variation - 0.2;\n                        } else variation = 0;\n                    } else variation = -variation;\n                }\n\n                colors[i] = c.scale('rgb', 1 + variation);\n            }\n\n            // Finalize the series options, filling in their colors\n\n            var colori = 0, s;\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                // assign colors\n                if (s.color == null) {\n                    s.color = colors[colori].toString();\n                    ++colori;\n                }\n                else if (typeof s.color == \"number\")\n                    s.color = colors[s.color].toString();\n\n                // turn on lines automatically in case nothing is set\n                if (s.lines.show == null) {\n                    var v, show = true;\n                    for (v in s)\n                        if (s[v] && s[v].show) {\n                            show = false;\n                            break;\n                        }\n                    if (show)\n                        s.lines.show = true;\n                }\n\n                // If nothing was provided for lines.zero, default it to match\n                // lines.fill, since areas by default should extend to zero.\n\n                if (s.lines.zero == null) {\n                    s.lines.zero = !!s.lines.fill;\n                }\n\n                // setup axes\n                s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, \"x\"));\n                s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, \"y\"));\n            }\n        }\n\n        function processData() {\n            var topSentry = Number.POSITIVE_INFINITY,\n                bottomSentry = Number.NEGATIVE_INFINITY,\n                fakeInfinity = Number.MAX_VALUE,\n                i, j, k, m, length,\n                s, points, ps, x, y, axis, val, f, p,\n                data, format;\n\n            function updateAxis(axis, min, max) {\n                if (min < axis.datamin && min != -fakeInfinity)\n                    axis.datamin = min;\n                if (max > axis.datamax && max != fakeInfinity)\n                    axis.datamax = max;\n            }\n\n            $.each(allAxes(), function (_, axis) {\n                // init axis\n                axis.datamin = topSentry;\n                axis.datamax = bottomSentry;\n                axis.used = false;\n            });\n\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n                s.datapoints = { points: [] };\n\n                executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]);\n            }\n\n            // first pass: clean and copy data\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                data = s.data;\n                format = s.datapoints.format;\n\n                if (!format) {\n                    format = [];\n                    // find out how to copy\n                    format.push({ x: true, number: true, required: true });\n                    format.push({ y: true, number: true, required: true });\n\n                    if (s.bars.show || (s.lines.show && s.lines.fill)) {\n                        var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));\n                        format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });\n                        if (s.bars.horizontal) {\n                            delete format[format.length - 1].y;\n                            format[format.length - 1].x = true;\n                        }\n                    }\n\n                    s.datapoints.format = format;\n                }\n\n                if (s.datapoints.pointsize != null)\n                    continue; // already filled in\n\n                s.datapoints.pointsize = format.length;\n\n                ps = s.datapoints.pointsize;\n                points = s.datapoints.points;\n\n                var insertSteps = s.lines.show && s.lines.steps;\n                s.xaxis.used = s.yaxis.used = true;\n\n                for (j = k = 0; j < data.length; ++j, k += ps) {\n                    p = data[j];\n\n                    var nullify = p == null;\n                    if (!nullify) {\n                        for (m = 0; m < ps; ++m) {\n                            val = p[m];\n                            f = format[m];\n\n                            if (f) {\n                                if (f.number && val != null) {\n                                    val = +val; // convert to number\n                                    if (isNaN(val))\n                                        val = null;\n                                    else if (val == Infinity)\n                                        val = fakeInfinity;\n                                    else if (val == -Infinity)\n                                        val = -fakeInfinity;\n                                }\n\n                                if (val == null) {\n                                    if (f.required)\n                                        nullify = true;\n\n                                    if (f.defaultValue != null)\n                                        val = f.defaultValue;\n                                }\n                            }\n\n                            points[k + m] = val;\n                        }\n                    }\n\n                    if (nullify) {\n                        for (m = 0; m < ps; ++m) {\n                            val = points[k + m];\n                            if (val != null) {\n                                f = format[m];\n                                // extract min/max info\n                                if (f.autoscale !== false) {\n                                    if (f.x) {\n                                        updateAxis(s.xaxis, val, val);\n                                    }\n                                    if (f.y) {\n                                        updateAxis(s.yaxis, val, val);\n                                    }\n                                }\n                            }\n                            points[k + m] = null;\n                        }\n                    }\n                    else {\n                        // a little bit of line specific stuff that\n                        // perhaps shouldn't be here, but lacking\n                        // better means...\n                        if (insertSteps && k > 0\n                            && points[k - ps] != null\n                            && points[k - ps] != points[k]\n                            && points[k - ps + 1] != points[k + 1]) {\n                            // copy the point to make room for a middle point\n                            for (m = 0; m < ps; ++m)\n                                points[k + ps + m] = points[k + m];\n\n                            // middle point has same y\n                            points[k + 1] = points[k - ps + 1];\n\n                            // we've added a point, better reflect that\n                            k += ps;\n                        }\n                    }\n                }\n            }\n\n            // give the hooks a chance to run\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                executeHooks(hooks.processDatapoints, [ s, s.datapoints]);\n            }\n\n            // second pass: find datamax/datamin for auto-scaling\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n                points = s.datapoints.points;\n                ps = s.datapoints.pointsize;\n                format = s.datapoints.format;\n\n                var xmin = topSentry, ymin = topSentry,\n                    xmax = bottomSentry, ymax = bottomSentry;\n\n                for (j = 0; j < points.length; j += ps) {\n                    if (points[j] == null)\n                        continue;\n\n                    for (m = 0; m < ps; ++m) {\n                        val = points[j + m];\n                        f = format[m];\n                        if (!f || f.autoscale === false || val == fakeInfinity || val == -fakeInfinity)\n                            continue;\n\n                        if (f.x) {\n                            if (val < xmin)\n                                xmin = val;\n                            if (val > xmax)\n                                xmax = val;\n                        }\n                        if (f.y) {\n                            if (val < ymin)\n                                ymin = val;\n                            if (val > ymax)\n                                ymax = val;\n                        }\n                    }\n                }\n\n                if (s.bars.show) {\n                    // make sure we got room for the bar on the dancing floor\n                    var delta;\n\n                    switch (s.bars.align) {\n                        case \"left\":\n                            delta = 0;\n                            break;\n                        case \"right\":\n                            delta = -s.bars.barWidth;\n                            break;\n                        default:\n                            delta = -s.bars.barWidth / 2;\n                    }\n\n                    if (s.bars.horizontal) {\n                        ymin += delta;\n                        ymax += delta + s.bars.barWidth;\n                    }\n                    else {\n                        xmin += delta;\n                        xmax += delta + s.bars.barWidth;\n                    }\n                }\n\n                updateAxis(s.xaxis, xmin, xmax);\n                updateAxis(s.yaxis, ymin, ymax);\n            }\n\n            $.each(allAxes(), function (_, axis) {\n                if (axis.datamin == topSentry)\n                    axis.datamin = null;\n                if (axis.datamax == bottomSentry)\n                    axis.datamax = null;\n            });\n        }\n\n        function setupCanvases() {\n\n            // Make sure the placeholder is clear of everything except canvases\n            // from a previous plot in this container that we'll try to re-use.\n\n            placeholder.css(\"padding\", 0) // padding messes up the positioning\n                .children().filter(function(){\n                    return !$(this).hasClass(\"flot-overlay\") && !$(this).hasClass('flot-base');\n                }).remove();\n\n            if (placeholder.css(\"position\") == 'static')\n                placeholder.css(\"position\", \"relative\"); // for positioning labels and overlay\n\n            surface = new Canvas(\"flot-base\", placeholder);\n            overlay = new Canvas(\"flot-overlay\", placeholder); // overlay canvas for interactive features\n\n            ctx = surface.context;\n            octx = overlay.context;\n\n            // define which element we're listening for events on\n            eventHolder = $(overlay.element).unbind();\n\n            // If we're re-using a plot object, shut down the old one\n\n            var existing = placeholder.data(\"plot\");\n\n            if (existing) {\n                existing.shutdown();\n                overlay.clear();\n            }\n\n            // save in case we get replotted\n            placeholder.data(\"plot\", plot);\n        }\n\n        function bindEvents() {\n            // bind events\n            if (options.grid.hoverable) {\n                eventHolder.mousemove(onMouseMove);\n\n                // Use bind, rather than .mouseleave, because we officially\n                // still support jQuery 1.2.6, which doesn't define a shortcut\n                // for mouseenter or mouseleave.  This was a bug/oversight that\n                // was fixed somewhere around 1.3.x.  We can return to using\n                // .mouseleave when we drop support for 1.2.6.\n\n                eventHolder.bind(\"mouseleave\", onMouseLeave);\n            }\n\n            if (options.grid.clickable)\n                eventHolder.click(onClick);\n\n            executeHooks(hooks.bindEvents, [eventHolder]);\n        }\n\n        function shutdown() {\n            if (redrawTimeout)\n                clearTimeout(redrawTimeout);\n\n            eventHolder.unbind(\"mousemove\", onMouseMove);\n            eventHolder.unbind(\"mouseleave\", onMouseLeave);\n            eventHolder.unbind(\"click\", onClick);\n\n            executeHooks(hooks.shutdown, [eventHolder]);\n        }\n\n        function setTransformationHelpers(axis) {\n            // set helper functions on the axis, assumes plot area\n            // has been computed already\n\n            function identity(x) { return x; }\n\n            var s, m, t = axis.options.transform || identity,\n                it = axis.options.inverseTransform;\n\n            // precompute how much the axis is scaling a point\n            // in canvas space\n            if (axis.direction == \"x\") {\n                s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min));\n                m = Math.min(t(axis.max), t(axis.min));\n            }\n            else {\n                s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min));\n                s = -s;\n                m = Math.max(t(axis.max), t(axis.min));\n            }\n\n            // data point to canvas coordinate\n            if (t == identity) // slight optimization\n                axis.p2c = function (p) { return (p - m) * s; };\n            else\n                axis.p2c = function (p) { return (t(p) - m) * s; };\n            // canvas coordinate to data point\n            if (!it)\n                axis.c2p = function (c) { return m + c / s; };\n            else\n                axis.c2p = function (c) { return it(m + c / s); };\n        }\n\n        function measureTickLabels(axis) {\n\n            var opts = axis.options,\n                ticks = axis.ticks || [],\n                labelWidth = opts.labelWidth || 0,\n                labelHeight = opts.labelHeight || 0,\n                maxWidth = labelWidth || (axis.direction == \"x\" ? Math.floor(surface.width / (ticks.length || 1)) : null),\n                legacyStyles = axis.direction + \"Axis \" + axis.direction + axis.n + \"Axis\",\n                layer = \"flot-\" + axis.direction + \"-axis flot-\" + axis.direction + axis.n + \"-axis \" + legacyStyles,\n                font = opts.font || \"flot-tick-label tickLabel\";\n\n            for (var i = 0; i < ticks.length; ++i) {\n\n                var t = ticks[i];\n\n                if (!t.label)\n                    continue;\n\n                var info = surface.getTextInfo(layer, t.label, font, null, maxWidth);\n\n                labelWidth = Math.max(labelWidth, info.width);\n                labelHeight = Math.max(labelHeight, info.height);\n            }\n\n            axis.labelWidth = opts.labelWidth || labelWidth;\n            axis.labelHeight = opts.labelHeight || labelHeight;\n        }\n\n        function allocateAxisBoxFirstPhase(axis) {\n            // find the bounding box of the axis by looking at label\n            // widths/heights and ticks, make room by diminishing the\n            // plotOffset; this first phase only looks at one\n            // dimension per axis, the other dimension depends on the\n            // other axes so will have to wait\n\n            var lw = axis.labelWidth,\n                lh = axis.labelHeight,\n                pos = axis.options.position,\n                isXAxis = axis.direction === \"x\",\n                tickLength = axis.options.tickLength,\n                axisMargin = options.grid.axisMargin,\n                padding = options.grid.labelMargin,\n                innermost = true,\n                outermost = true,\n                first = true,\n                found = false;\n\n            // Determine the axis's position in its direction and on its side\n\n            $.each(isXAxis ? xaxes : yaxes, function(i, a) {\n                if (a && a.reserveSpace) {\n                    if (a === axis) {\n                        found = true;\n                    } else if (a.options.position === pos) {\n                        if (found) {\n                            outermost = false;\n                        } else {\n                            innermost = false;\n                        }\n                    }\n                    if (!found) {\n                        first = false;\n                    }\n                }\n            });\n\n            // The outermost axis on each side has no margin\n\n            if (outermost) {\n                axisMargin = 0;\n            }\n\n            // The ticks for the first axis in each direction stretch across\n\n            if (tickLength == null) {\n                tickLength = first ? \"full\" : 5;\n            }\n\n            if (!isNaN(+tickLength))\n                padding += +tickLength;\n\n            if (isXAxis) {\n                lh += padding;\n\n                if (pos == \"bottom\") {\n                    plotOffset.bottom += lh + axisMargin;\n                    axis.box = { top: surface.height - plotOffset.bottom, height: lh };\n                }\n                else {\n                    axis.box = { top: plotOffset.top + axisMargin, height: lh };\n                    plotOffset.top += lh + axisMargin;\n                }\n            }\n            else {\n                lw += padding;\n\n                if (pos == \"left\") {\n                    axis.box = { left: plotOffset.left + axisMargin, width: lw };\n                    plotOffset.left += lw + axisMargin;\n                }\n                else {\n                    plotOffset.right += lw + axisMargin;\n                    axis.box = { left: surface.width - plotOffset.right, width: lw };\n                }\n            }\n\n             // save for future reference\n            axis.position = pos;\n            axis.tickLength = tickLength;\n            axis.box.padding = padding;\n            axis.innermost = innermost;\n        }\n\n        function allocateAxisBoxSecondPhase(axis) {\n            // now that all axis boxes have been placed in one\n            // dimension, we can set the remaining dimension coordinates\n            if (axis.direction == \"x\") {\n                axis.box.left = plotOffset.left - axis.labelWidth / 2;\n                axis.box.width = surface.width - plotOffset.left - plotOffset.right + axis.labelWidth;\n            }\n            else {\n                axis.box.top = plotOffset.top - axis.labelHeight / 2;\n                axis.box.height = surface.height - plotOffset.bottom - plotOffset.top + axis.labelHeight;\n            }\n        }\n\n        function adjustLayoutForThingsStickingOut() {\n            // possibly adjust plot offset to ensure everything stays\n            // inside the canvas and isn't clipped off\n\n            var minMargin = options.grid.minBorderMargin,\n                axis, i;\n\n            // check stuff from the plot (FIXME: this should just read\n            // a value from the series, otherwise it's impossible to\n            // customize)\n            if (minMargin == null) {\n                minMargin = 0;\n                for (i = 0; i < series.length; ++i)\n                    minMargin = Math.max(minMargin, 2 * (series[i].points.radius + series[i].points.lineWidth/2));\n            }\n\n            var margins = {\n                left: minMargin,\n                right: minMargin,\n                top: minMargin,\n                bottom: minMargin\n            };\n\n            // check axis labels, note we don't check the actual\n            // labels but instead use the overall width/height to not\n            // jump as much around with replots\n            $.each(allAxes(), function (_, axis) {\n                if (axis.reserveSpace && axis.ticks && axis.ticks.length) {\n                    var lastTick = axis.ticks[axis.ticks.length - 1];\n                    if (axis.direction === \"x\") {\n                        margins.left = Math.max(margins.left, axis.labelWidth / 2);\n                        if (lastTick.v <= axis.max) {\n                            margins.right = Math.max(margins.right, axis.labelWidth / 2);\n                        }\n                    } else {\n                        margins.bottom = Math.max(margins.bottom, axis.labelHeight / 2);\n                        if (lastTick.v <= axis.max) {\n                            margins.top = Math.max(margins.top, axis.labelHeight / 2);\n                        }\n                    }\n                }\n            });\n\n            plotOffset.left = Math.ceil(Math.max(margins.left, plotOffset.left));\n            plotOffset.right = Math.ceil(Math.max(margins.right, plotOffset.right));\n            plotOffset.top = Math.ceil(Math.max(margins.top, plotOffset.top));\n            plotOffset.bottom = Math.ceil(Math.max(margins.bottom, plotOffset.bottom));\n        }\n\n        function setupGrid() {\n            var i, axes = allAxes(), showGrid = options.grid.show;\n\n            // Initialize the plot's offset from the edge of the canvas\n\n            for (var a in plotOffset) {\n                var margin = options.grid.margin || 0;\n                plotOffset[a] = typeof margin == \"number\" ? margin : margin[a] || 0;\n            }\n\n            executeHooks(hooks.processOffset, [plotOffset]);\n\n            // If the grid is visible, add its border width to the offset\n\n            for (var a in plotOffset) {\n                if(typeof(options.grid.borderWidth) == \"object\") {\n                    plotOffset[a] += showGrid ? options.grid.borderWidth[a] : 0;\n                }\n                else {\n                    plotOffset[a] += showGrid ? options.grid.borderWidth : 0;\n                }\n            }\n\n            // init axes\n            $.each(axes, function (_, axis) {\n                axis.show = axis.options.show;\n                if (axis.show == null)\n                    axis.show = axis.used; // by default an axis is visible if it's got data\n\n                axis.reserveSpace = axis.show || axis.options.reserveSpace;\n\n                setRange(axis);\n            });\n\n            if (showGrid) {\n\n                var allocatedAxes = $.grep(axes, function (axis) { return axis.reserveSpace; });\n\n                $.each(allocatedAxes, function (_, axis) {\n                    // make the ticks\n                    setupTickGeneration(axis);\n                    setTicks(axis);\n                    snapRangeToTicks(axis, axis.ticks);\n                    // find labelWidth/Height for axis\n                    measureTickLabels(axis);\n                });\n\n                // with all dimensions calculated, we can compute the\n                // axis bounding boxes, start from the outside\n                // (reverse order)\n                for (i = allocatedAxes.length - 1; i >= 0; --i)\n                    allocateAxisBoxFirstPhase(allocatedAxes[i]);\n\n                // make sure we've got enough space for things that\n                // might stick out\n                adjustLayoutForThingsStickingOut();\n\n                $.each(allocatedAxes, function (_, axis) {\n                    allocateAxisBoxSecondPhase(axis);\n                });\n            }\n\n            plotWidth = surface.width - plotOffset.left - plotOffset.right;\n            plotHeight = surface.height - plotOffset.bottom - plotOffset.top;\n\n            // now we got the proper plot dimensions, we can compute the scaling\n            $.each(axes, function (_, axis) {\n                setTransformationHelpers(axis);\n            });\n\n            if (showGrid) {\n                drawAxisLabels();\n            }\n\n            insertLegend();\n        }\n\n        function setRange(axis) {\n            var opts = axis.options,\n                min = +(opts.min != null ? opts.min : axis.datamin),\n                max = +(opts.max != null ? opts.max : axis.datamax),\n                delta = max - min;\n\n            if (delta == 0.0) {\n                // degenerate case\n                var widen = max == 0 ? 1 : 0.01;\n\n                if (opts.min == null)\n                    min -= widen;\n                // always widen max if we couldn't widen min to ensure we\n                // don't fall into min == max which doesn't work\n                if (opts.max == null || opts.min != null)\n                    max += widen;\n            }\n            else {\n                // consider autoscaling\n                var margin = opts.autoscaleMargin;\n                if (margin != null) {\n                    if (opts.min == null) {\n                        min -= delta * margin;\n                        // make sure we don't go below zero if all values\n                        // are positive\n                        if (min < 0 && axis.datamin != null && axis.datamin >= 0)\n                            min = 0;\n                    }\n                    if (opts.max == null) {\n                        max += delta * margin;\n                        if (max > 0 && axis.datamax != null && axis.datamax <= 0)\n                            max = 0;\n                    }\n                }\n            }\n            axis.min = min;\n            axis.max = max;\n        }\n\n        function setupTickGeneration(axis) {\n            var opts = axis.options;\n\n            // estimate number of ticks\n            var noTicks;\n            if (typeof opts.ticks == \"number\" && opts.ticks > 0)\n                noTicks = opts.ticks;\n            else\n                // heuristic based on the model a*sqrt(x) fitted to\n                // some data points that seemed reasonable\n                noTicks = 0.3 * Math.sqrt(axis.direction == \"x\" ? surface.width : surface.height);\n\n            var delta = (axis.max - axis.min) / noTicks,\n                dec = -Math.floor(Math.log(delta) / Math.LN10),\n                maxDec = opts.tickDecimals;\n\n            if (maxDec != null && dec > maxDec) {\n                dec = maxDec;\n            }\n\n            var magn = Math.pow(10, -dec),\n                norm = delta / magn, // norm is between 1.0 and 10.0\n                size;\n\n            if (norm < 1.5) {\n                size = 1;\n            } else if (norm < 3) {\n                size = 2;\n                // special case for 2.5, requires an extra decimal\n                if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {\n                    size = 2.5;\n                    ++dec;\n                }\n            } else if (norm < 7.5) {\n                size = 5;\n            } else {\n                size = 10;\n            }\n\n            size *= magn;\n\n            if (opts.minTickSize != null && size < opts.minTickSize) {\n                size = opts.minTickSize;\n            }\n\n            axis.delta = delta;\n            axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec);\n            axis.tickSize = opts.tickSize || size;\n\n            // Time mode was moved to a plug-in in 0.8, but since so many people use this\n            // we'll add an especially friendly make sure they remembered to include it.\n\n            if (opts.mode == \"time\" && !axis.tickGenerator) {\n                throw new Error(\"Time mode requires the flot.time plugin.\");\n            }\n\n            // Flot supports base-10 axes; any other mode else is handled by a plug-in,\n            // like flot.time.js.\n\n            if (!axis.tickGenerator) {\n\n                axis.tickGenerator = function (axis) {\n\n                    var ticks = [],\n                        start = floorInBase(axis.min, axis.tickSize),\n                        i = 0,\n                        v = Number.NaN,\n                        prev;\n\n                    do {\n                        prev = v;\n                        v = start + i * axis.tickSize;\n                        ticks.push(v);\n                        ++i;\n                    } while (v < axis.max && v != prev);\n                    return ticks;\n                };\n\n\t\t\t\taxis.tickFormatter = function (value, axis) {\n\n\t\t\t\t\tvar factor = axis.tickDecimals ? Math.pow(10, axis.tickDecimals) : 1;\n\t\t\t\t\tvar formatted = \"\" + Math.round(value * factor) / factor;\n\n\t\t\t\t\t// If tickDecimals was specified, ensure that we have exactly that\n\t\t\t\t\t// much precision; otherwise default to the value's own precision.\n\n\t\t\t\t\tif (axis.tickDecimals != null) {\n\t\t\t\t\t\tvar decimal = formatted.indexOf(\".\");\n\t\t\t\t\t\tvar precision = decimal == -1 ? 0 : formatted.length - decimal - 1;\n\t\t\t\t\t\tif (precision < axis.tickDecimals) {\n\t\t\t\t\t\t\treturn (precision ? formatted : formatted + \".\") + (\"\" + factor).substr(1, axis.tickDecimals - precision);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n                    return formatted;\n                };\n            }\n\n            if ($.isFunction(opts.tickFormatter))\n                axis.tickFormatter = function (v, axis) { return \"\" + opts.tickFormatter(v, axis); };\n\n            if (opts.alignTicksWithAxis != null) {\n                var otherAxis = (axis.direction == \"x\" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1];\n                if (otherAxis && otherAxis.used && otherAxis != axis) {\n                    // consider snapping min/max to outermost nice ticks\n                    var niceTicks = axis.tickGenerator(axis);\n                    if (niceTicks.length > 0) {\n                        if (opts.min == null)\n                            axis.min = Math.min(axis.min, niceTicks[0]);\n                        if (opts.max == null && niceTicks.length > 1)\n                            axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]);\n                    }\n\n                    axis.tickGenerator = function (axis) {\n                        // copy ticks, scaled to this axis\n                        var ticks = [], v, i;\n                        for (i = 0; i < otherAxis.ticks.length; ++i) {\n                            v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min);\n                            v = axis.min + v * (axis.max - axis.min);\n                            ticks.push(v);\n                        }\n                        return ticks;\n                    };\n\n                    // we might need an extra decimal since forced\n                    // ticks don't necessarily fit naturally\n                    if (!axis.mode && opts.tickDecimals == null) {\n                        var extraDec = Math.max(0, -Math.floor(Math.log(axis.delta) / Math.LN10) + 1),\n                            ts = axis.tickGenerator(axis);\n\n                        // only proceed if the tick interval rounded\n                        // with an extra decimal doesn't give us a\n                        // zero at end\n                        if (!(ts.length > 1 && /\\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec))))\n                            axis.tickDecimals = extraDec;\n                    }\n                }\n            }\n        }\n\n        function setTicks(axis) {\n            var oticks = axis.options.ticks, ticks = [];\n            if (oticks == null || (typeof oticks == \"number\" && oticks > 0))\n                ticks = axis.tickGenerator(axis);\n            else if (oticks) {\n                if ($.isFunction(oticks))\n                    // generate the ticks\n                    ticks = oticks(axis);\n                else\n                    ticks = oticks;\n            }\n\n            // clean up/labelify the supplied ticks, copy them over\n            var i, v;\n            axis.ticks = [];\n            for (i = 0; i < ticks.length; ++i) {\n                var label = null;\n                var t = ticks[i];\n                if (typeof t == \"object\") {\n                    v = +t[0];\n                    if (t.length > 1)\n                        label = t[1];\n                }\n                else\n                    v = +t;\n                if (label == null)\n                    label = axis.tickFormatter(v, axis);\n                if (!isNaN(v))\n                    axis.ticks.push({ v: v, label: label });\n            }\n        }\n\n        function snapRangeToTicks(axis, ticks) {\n            if (axis.options.autoscaleMargin && ticks.length > 0) {\n                // snap to ticks\n                if (axis.options.min == null)\n                    axis.min = Math.min(axis.min, ticks[0].v);\n                if (axis.options.max == null && ticks.length > 1)\n                    axis.max = Math.max(axis.max, ticks[ticks.length - 1].v);\n            }\n        }\n\n        function draw() {\n\n            surface.clear();\n\n            executeHooks(hooks.drawBackground, [ctx]);\n\n            var grid = options.grid;\n\n            // draw background, if any\n            if (grid.show && grid.backgroundColor)\n                drawBackground();\n\n            if (grid.show && !grid.aboveData) {\n                drawGrid();\n            }\n\n            for (var i = 0; i < series.length; ++i) {\n                executeHooks(hooks.drawSeries, [ctx, series[i]]);\n                drawSeries(series[i]);\n            }\n\n            executeHooks(hooks.draw, [ctx]);\n\n            if (grid.show && grid.aboveData) {\n                drawGrid();\n            }\n\n            surface.render();\n\n            // A draw implies that either the axes or data have changed, so we\n            // should probably update the overlay highlights as well.\n\n            triggerRedrawOverlay();\n        }\n\n        function extractRange(ranges, coord) {\n            var axis, from, to, key, axes = allAxes();\n\n            for (var i = 0; i < axes.length; ++i) {\n                axis = axes[i];\n                if (axis.direction == coord) {\n                    key = coord + axis.n + \"axis\";\n                    if (!ranges[key] && axis.n == 1)\n                        key = coord + \"axis\"; // support x1axis as xaxis\n                    if (ranges[key]) {\n                        from = ranges[key].from;\n                        to = ranges[key].to;\n                        break;\n                    }\n                }\n            }\n\n            // backwards-compat stuff - to be removed in future\n            if (!ranges[key]) {\n                axis = coord == \"x\" ? xaxes[0] : yaxes[0];\n                from = ranges[coord + \"1\"];\n                to = ranges[coord + \"2\"];\n            }\n\n            // auto-reverse as an added bonus\n            if (from != null && to != null && from > to) {\n                var tmp = from;\n                from = to;\n                to = tmp;\n            }\n\n            return { from: from, to: to, axis: axis };\n        }\n\n        function drawBackground() {\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, \"rgba(255, 255, 255, 0)\");\n            ctx.fillRect(0, 0, plotWidth, plotHeight);\n            ctx.restore();\n        }\n\n        function drawGrid() {\n            var i, axes, bw, bc;\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            // draw markings\n            var markings = options.grid.markings;\n            if (markings) {\n                if ($.isFunction(markings)) {\n                    axes = plot.getAxes();\n                    // xmin etc. is backwards compatibility, to be\n                    // removed in the future\n                    axes.xmin = axes.xaxis.min;\n                    axes.xmax = axes.xaxis.max;\n                    axes.ymin = axes.yaxis.min;\n                    axes.ymax = axes.yaxis.max;\n\n                    markings = markings(axes);\n                }\n\n                for (i = 0; i < markings.length; ++i) {\n                    var m = markings[i],\n                        xrange = extractRange(m, \"x\"),\n                        yrange = extractRange(m, \"y\");\n\n                    // fill in missing\n                    if (xrange.from == null)\n                        xrange.from = xrange.axis.min;\n                    if (xrange.to == null)\n                        xrange.to = xrange.axis.max;\n                    if (yrange.from == null)\n                        yrange.from = yrange.axis.min;\n                    if (yrange.to == null)\n                        yrange.to = yrange.axis.max;\n\n                    // clip\n                    if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||\n                        yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)\n                        continue;\n\n                    xrange.from = Math.max(xrange.from, xrange.axis.min);\n                    xrange.to = Math.min(xrange.to, xrange.axis.max);\n                    yrange.from = Math.max(yrange.from, yrange.axis.min);\n                    yrange.to = Math.min(yrange.to, yrange.axis.max);\n\n                    if (xrange.from == xrange.to && yrange.from == yrange.to)\n                        continue;\n\n                    // then draw\n                    xrange.from = xrange.axis.p2c(xrange.from);\n                    xrange.to = xrange.axis.p2c(xrange.to);\n                    yrange.from = yrange.axis.p2c(yrange.from);\n                    yrange.to = yrange.axis.p2c(yrange.to);\n\n                    if (xrange.from == xrange.to || yrange.from == yrange.to) {\n                        // draw line\n                        ctx.beginPath();\n                        ctx.strokeStyle = m.color || options.grid.markingsColor;\n                        ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth;\n                        ctx.moveTo(xrange.from, yrange.from);\n                        ctx.lineTo(xrange.to, yrange.to);\n                        ctx.stroke();\n                    }\n                    else {\n                        // fill area\n                        ctx.fillStyle = m.color || options.grid.markingsColor;\n                        ctx.fillRect(xrange.from, yrange.to,\n                                     xrange.to - xrange.from,\n                                     yrange.from - yrange.to);\n                    }\n                }\n            }\n\n            // draw the ticks\n            axes = allAxes();\n            bw = options.grid.borderWidth;\n\n            for (var j = 0; j < axes.length; ++j) {\n                var axis = axes[j], box = axis.box,\n                    t = axis.tickLength, x, y, xoff, yoff;\n                if (!axis.show || axis.ticks.length == 0)\n                    continue;\n\n                ctx.lineWidth = 1;\n\n                // find the edges\n                if (axis.direction == \"x\") {\n                    x = 0;\n                    if (t == \"full\")\n                        y = (axis.position == \"top\" ? 0 : plotHeight);\n                    else\n                        y = box.top - plotOffset.top + (axis.position == \"top\" ? box.height : 0);\n                }\n                else {\n                    y = 0;\n                    if (t == \"full\")\n                        x = (axis.position == \"left\" ? 0 : plotWidth);\n                    else\n                        x = box.left - plotOffset.left + (axis.position == \"left\" ? box.width : 0);\n                }\n\n                // draw tick bar\n                if (!axis.innermost) {\n                    ctx.strokeStyle = axis.options.color;\n                    ctx.beginPath();\n                    xoff = yoff = 0;\n                    if (axis.direction == \"x\")\n                        xoff = plotWidth + 1;\n                    else\n                        yoff = plotHeight + 1;\n\n                    if (ctx.lineWidth == 1) {\n                        if (axis.direction == \"x\") {\n                            y = Math.floor(y) + 0.5;\n                        } else {\n                            x = Math.floor(x) + 0.5;\n                        }\n                    }\n\n                    ctx.moveTo(x, y);\n                    ctx.lineTo(x + xoff, y + yoff);\n                    ctx.stroke();\n                }\n\n                // draw ticks\n\n                ctx.strokeStyle = axis.options.tickColor;\n\n                ctx.beginPath();\n                for (i = 0; i < axis.ticks.length; ++i) {\n                    var v = axis.ticks[i].v;\n\n                    xoff = yoff = 0;\n\n                    if (isNaN(v) || v < axis.min || v > axis.max\n                        // skip those lying on the axes if we got a border\n                        || (t == \"full\"\n                            && ((typeof bw == \"object\" && bw[axis.position] > 0) || bw > 0)\n                            && (v == axis.min || v == axis.max)))\n                        continue;\n\n                    if (axis.direction == \"x\") {\n                        x = axis.p2c(v);\n                        yoff = t == \"full\" ? -plotHeight : t;\n\n                        if (axis.position == \"top\")\n                            yoff = -yoff;\n                    }\n                    else {\n                        y = axis.p2c(v);\n                        xoff = t == \"full\" ? -plotWidth : t;\n\n                        if (axis.position == \"left\")\n                            xoff = -xoff;\n                    }\n\n                    if (ctx.lineWidth == 1) {\n                        if (axis.direction == \"x\")\n                            x = Math.floor(x) + 0.5;\n                        else\n                            y = Math.floor(y) + 0.5;\n                    }\n\n                    ctx.moveTo(x, y);\n                    ctx.lineTo(x + xoff, y + yoff);\n                }\n\n                ctx.stroke();\n            }\n\n\n            // draw border\n            if (bw) {\n                // If either borderWidth or borderColor is an object, then draw the border\n                // line by line instead of as one rectangle\n                bc = options.grid.borderColor;\n                if(typeof bw == \"object\" || typeof bc == \"object\") {\n                    if (typeof bw !== \"object\") {\n                        bw = {top: bw, right: bw, bottom: bw, left: bw};\n                    }\n                    if (typeof bc !== \"object\") {\n                        bc = {top: bc, right: bc, bottom: bc, left: bc};\n                    }\n\n                    if (bw.top > 0) {\n                        ctx.strokeStyle = bc.top;\n                        ctx.lineWidth = bw.top;\n                        ctx.beginPath();\n                        ctx.moveTo(0 - bw.left, 0 - bw.top/2);\n                        ctx.lineTo(plotWidth, 0 - bw.top/2);\n                        ctx.stroke();\n                    }\n\n                    if (bw.right > 0) {\n                        ctx.strokeStyle = bc.right;\n                        ctx.lineWidth = bw.right;\n                        ctx.beginPath();\n                        ctx.moveTo(plotWidth + bw.right / 2, 0 - bw.top);\n                        ctx.lineTo(plotWidth + bw.right / 2, plotHeight);\n                        ctx.stroke();\n                    }\n\n                    if (bw.bottom > 0) {\n                        ctx.strokeStyle = bc.bottom;\n                        ctx.lineWidth = bw.bottom;\n                        ctx.beginPath();\n                        ctx.moveTo(plotWidth + bw.right, plotHeight + bw.bottom / 2);\n                        ctx.lineTo(0, plotHeight + bw.bottom / 2);\n                        ctx.stroke();\n                    }\n\n                    if (bw.left > 0) {\n                        ctx.strokeStyle = bc.left;\n                        ctx.lineWidth = bw.left;\n                        ctx.beginPath();\n                        ctx.moveTo(0 - bw.left/2, plotHeight + bw.bottom);\n                        ctx.lineTo(0- bw.left/2, 0);\n                        ctx.stroke();\n                    }\n                }\n                else {\n                    ctx.lineWidth = bw;\n                    ctx.strokeStyle = options.grid.borderColor;\n                    ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);\n                }\n            }\n\n            ctx.restore();\n        }\n\n        function drawAxisLabels() {\n\n            $.each(allAxes(), function (_, axis) {\n                var box = axis.box,\n                    legacyStyles = axis.direction + \"Axis \" + axis.direction + axis.n + \"Axis\",\n                    layer = \"flot-\" + axis.direction + \"-axis flot-\" + axis.direction + axis.n + \"-axis \" + legacyStyles,\n                    font = axis.options.font || \"flot-tick-label tickLabel\",\n                    tick, x, y, halign, valign;\n\n                // Remove text before checking for axis.show and ticks.length;\n                // otherwise plugins, like flot-tickrotor, that draw their own\n                // tick labels will end up with both theirs and the defaults.\n\n                surface.removeText(layer);\n\n                if (!axis.show || axis.ticks.length == 0)\n                    return;\n\n                for (var i = 0; i < axis.ticks.length; ++i) {\n\n                    tick = axis.ticks[i];\n                    if (!tick.label || tick.v < axis.min || tick.v > axis.max)\n                        continue;\n\n                    if (axis.direction == \"x\") {\n                        halign = \"center\";\n                        x = plotOffset.left + axis.p2c(tick.v);\n                        if (axis.position == \"bottom\") {\n                            y = box.top + box.padding;\n                        } else {\n                            y = box.top + box.height - box.padding;\n                            valign = \"bottom\";\n                        }\n                    } else {\n                        valign = \"middle\";\n                        y = plotOffset.top + axis.p2c(tick.v);\n                        if (axis.position == \"left\") {\n                            x = box.left + box.width - box.padding;\n                            halign = \"right\";\n                        } else {\n                            x = box.left + box.padding;\n                        }\n                    }\n\n                    surface.addText(layer, x, y, tick.label, font, null, null, halign, valign);\n                }\n            });\n        }\n\n        function drawSeries(series) {\n            if (series.lines.show)\n                drawSeriesLines(series);\n            if (series.bars.show)\n                drawSeriesBars(series);\n            if (series.points.show)\n                drawSeriesPoints(series);\n        }\n\n        function drawSeriesLines(series) {\n            function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {\n                var points = datapoints.points,\n                    ps = datapoints.pointsize,\n                    prevx = null, prevy = null;\n\n                ctx.beginPath();\n                for (var i = ps; i < points.length; i += ps) {\n                    var x1 = points[i - ps], y1 = points[i - ps + 1],\n                        x2 = points[i], y2 = points[i + 1];\n\n                    if (x1 == null || x2 == null)\n                        continue;\n\n                    // clip with ymin\n                    if (y1 <= y2 && y1 < axisy.min) {\n                        if (y2 < axisy.min)\n                            continue;   // line segment is outside\n                        // compute new intersection point\n                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.min;\n                    }\n                    else if (y2 <= y1 && y2 < axisy.min) {\n                        if (y1 < axisy.min)\n                            continue;\n                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.min;\n                    }\n\n                    // clip with ymax\n                    if (y1 >= y2 && y1 > axisy.max) {\n                        if (y2 > axisy.max)\n                            continue;\n                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.max;\n                    }\n                    else if (y2 >= y1 && y2 > axisy.max) {\n                        if (y1 > axisy.max)\n                            continue;\n                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.max;\n                    }\n\n                    // clip with xmin\n                    if (x1 <= x2 && x1 < axisx.min) {\n                        if (x2 < axisx.min)\n                            continue;\n                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.min;\n                    }\n                    else if (x2 <= x1 && x2 < axisx.min) {\n                        if (x1 < axisx.min)\n                            continue;\n                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.min;\n                    }\n\n                    // clip with xmax\n                    if (x1 >= x2 && x1 > axisx.max) {\n                        if (x2 > axisx.max)\n                            continue;\n                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.max;\n                    }\n                    else if (x2 >= x1 && x2 > axisx.max) {\n                        if (x1 > axisx.max)\n                            continue;\n                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.max;\n                    }\n\n                    if (x1 != prevx || y1 != prevy)\n                        ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);\n\n                    prevx = x2;\n                    prevy = y2;\n                    ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);\n                }\n                ctx.stroke();\n            }\n\n            function plotLineArea(datapoints, axisx, axisy) {\n                var points = datapoints.points,\n                    ps = datapoints.pointsize,\n                    bottom = Math.min(Math.max(0, axisy.min), axisy.max),\n                    i = 0, top, areaOpen = false,\n                    ypos = 1, segmentStart = 0, segmentEnd = 0;\n\n                // we process each segment in two turns, first forward\n                // direction to sketch out top, then once we hit the\n                // end we go backwards to sketch the bottom\n                while (true) {\n                    if (ps > 0 && i > points.length + ps)\n                        break;\n\n                    i += ps; // ps is negative if going backwards\n\n                    var x1 = points[i - ps],\n                        y1 = points[i - ps + ypos],\n                        x2 = points[i], y2 = points[i + ypos];\n\n                    if (areaOpen) {\n                        if (ps > 0 && x1 != null && x2 == null) {\n                            // at turning point\n                            segmentEnd = i;\n                            ps = -ps;\n                            ypos = 2;\n                            continue;\n                        }\n\n                        if (ps < 0 && i == segmentStart + ps) {\n                            // done with the reverse sweep\n                            ctx.fill();\n                            areaOpen = false;\n                            ps = -ps;\n                            ypos = 1;\n                            i = segmentStart = segmentEnd + ps;\n                            continue;\n                        }\n                    }\n\n                    if (x1 == null || x2 == null)\n                        continue;\n\n                    // clip x values\n\n                    // clip with xmin\n                    if (x1 <= x2 && x1 < axisx.min) {\n                        if (x2 < axisx.min)\n                            continue;\n                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.min;\n                    }\n                    else if (x2 <= x1 && x2 < axisx.min) {\n                        if (x1 < axisx.min)\n                            continue;\n                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.min;\n                    }\n\n                    // clip with xmax\n                    if (x1 >= x2 && x1 > axisx.max) {\n                        if (x2 > axisx.max)\n                            continue;\n                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.max;\n                    }\n                    else if (x2 >= x1 && x2 > axisx.max) {\n                        if (x1 > axisx.max)\n                            continue;\n                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.max;\n                    }\n\n                    if (!areaOpen) {\n                        // open area\n                        ctx.beginPath();\n                        ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));\n                        areaOpen = true;\n                    }\n\n                    // now first check the case where both is outside\n                    if (y1 >= axisy.max && y2 >= axisy.max) {\n                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));\n                        continue;\n                    }\n                    else if (y1 <= axisy.min && y2 <= axisy.min) {\n                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));\n                        continue;\n                    }\n\n                    // else it's a bit more complicated, there might\n                    // be a flat maxed out rectangle first, then a\n                    // triangular cutout or reverse; to find these\n                    // keep track of the current x values\n                    var x1old = x1, x2old = x2;\n\n                    // clip the y values, without shortcutting, we\n                    // go through all cases in turn\n\n                    // clip with ymin\n                    if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {\n                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.min;\n                    }\n                    else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {\n                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.min;\n                    }\n\n                    // clip with ymax\n                    if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {\n                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.max;\n                    }\n                    else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {\n                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.max;\n                    }\n\n                    // if the x value was changed we got a rectangle\n                    // to fill\n                    if (x1 != x1old) {\n                        ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1));\n                        // it goes to (x1, y1), but we fill that below\n                    }\n\n                    // fill triangular section, this sometimes result\n                    // in redundant points if (x1, y1) hasn't changed\n                    // from previous line to, but we just ignore that\n                    ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));\n                    ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));\n\n                    // fill the other rectangle if it's there\n                    if (x2 != x2old) {\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));\n                        ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2));\n                    }\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n            ctx.lineJoin = \"round\";\n\n            var lw = series.lines.lineWidth,\n                sw = series.shadowSize;\n            // FIXME: consider another form of shadow when filling is turned on\n            if (lw > 0 && sw > 0) {\n                // draw shadow as a thick and thin line with transparency\n                ctx.lineWidth = sw;\n                ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n                // position shadow at angle from the mid of line\n                var angle = Math.PI/18;\n                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis);\n                ctx.lineWidth = sw/2;\n                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis);\n            }\n\n            ctx.lineWidth = lw;\n            ctx.strokeStyle = series.color;\n            var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);\n            if (fillStyle) {\n                ctx.fillStyle = fillStyle;\n                plotLineArea(series.datapoints, series.xaxis, series.yaxis);\n            }\n\n            if (lw > 0)\n                plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);\n            ctx.restore();\n        }\n\n        function drawSeriesPoints(series) {\n            function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) {\n                var points = datapoints.points, ps = datapoints.pointsize;\n\n                for (var i = 0; i < points.length; i += ps) {\n                    var x = points[i], y = points[i + 1];\n                    if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)\n                        continue;\n\n                    ctx.beginPath();\n                    x = axisx.p2c(x);\n                    y = axisy.p2c(y) + offset;\n                    if (symbol == \"circle\")\n                        ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false);\n                    else\n                        symbol(ctx, x, y, radius, shadow);\n                    ctx.closePath();\n\n                    if (fillStyle) {\n                        ctx.fillStyle = fillStyle;\n                        ctx.fill();\n                    }\n                    ctx.stroke();\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            var lw = series.points.lineWidth,\n                sw = series.shadowSize,\n                radius = series.points.radius,\n                symbol = series.points.symbol;\n\n            // If the user sets the line width to 0, we change it to a very \n            // small value. A line width of 0 seems to force the default of 1.\n            // Doing the conditional here allows the shadow setting to still be \n            // optional even with a lineWidth of 0.\n\n            if( lw == 0 )\n                lw = 0.0001;\n\n            if (lw > 0 && sw > 0) {\n                // draw shadow in two steps\n                var w = sw / 2;\n                ctx.lineWidth = w;\n                ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n                plotPoints(series.datapoints, radius, null, w + w/2, true,\n                           series.xaxis, series.yaxis, symbol);\n\n                ctx.strokeStyle = \"rgba(0,0,0,0.2)\";\n                plotPoints(series.datapoints, radius, null, w/2, true,\n                           series.xaxis, series.yaxis, symbol);\n            }\n\n            ctx.lineWidth = lw;\n            ctx.strokeStyle = series.color;\n            plotPoints(series.datapoints, radius,\n                       getFillStyle(series.points, series.color), 0, false,\n                       series.xaxis, series.yaxis, symbol);\n            ctx.restore();\n        }\n\n        function drawBar(x, y, b, barLeft, barRight, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) {\n            var left, right, bottom, top,\n                drawLeft, drawRight, drawTop, drawBottom,\n                tmp;\n\n            // in horizontal mode, we start the bar from the left\n            // instead of from the bottom so it appears to be\n            // horizontal rather than vertical\n            if (horizontal) {\n                drawBottom = drawRight = drawTop = true;\n                drawLeft = false;\n                left = b;\n                right = x;\n                top = y + barLeft;\n                bottom = y + barRight;\n\n                // account for negative bars\n                if (right < left) {\n                    tmp = right;\n                    right = left;\n                    left = tmp;\n                    drawLeft = true;\n                    drawRight = false;\n                }\n            }\n            else {\n                drawLeft = drawRight = drawTop = true;\n                drawBottom = false;\n                left = x + barLeft;\n                right = x + barRight;\n                bottom = b;\n                top = y;\n\n                // account for negative bars\n                if (top < bottom) {\n                    tmp = top;\n                    top = bottom;\n                    bottom = tmp;\n                    drawBottom = true;\n                    drawTop = false;\n                }\n            }\n\n            // clip\n            if (right < axisx.min || left > axisx.max ||\n                top < axisy.min || bottom > axisy.max)\n                return;\n\n            if (left < axisx.min) {\n                left = axisx.min;\n                drawLeft = false;\n            }\n\n            if (right > axisx.max) {\n                right = axisx.max;\n                drawRight = false;\n            }\n\n            if (bottom < axisy.min) {\n                bottom = axisy.min;\n                drawBottom = false;\n            }\n\n            if (top > axisy.max) {\n                top = axisy.max;\n                drawTop = false;\n            }\n\n            left = axisx.p2c(left);\n            bottom = axisy.p2c(bottom);\n            right = axisx.p2c(right);\n            top = axisy.p2c(top);\n\n            // fill the bar\n            if (fillStyleCallback) {\n                c.fillStyle = fillStyleCallback(bottom, top);\n                c.fillRect(left, top, right - left, bottom - top)\n            }\n\n            // draw outline\n            if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) {\n                c.beginPath();\n\n                // FIXME: inline moveTo is buggy with excanvas\n                c.moveTo(left, bottom);\n                if (drawLeft)\n                    c.lineTo(left, top);\n                else\n                    c.moveTo(left, top);\n                if (drawTop)\n                    c.lineTo(right, top);\n                else\n                    c.moveTo(right, top);\n                if (drawRight)\n                    c.lineTo(right, bottom);\n                else\n                    c.moveTo(right, bottom);\n                if (drawBottom)\n                    c.lineTo(left, bottom);\n                else\n                    c.moveTo(left, bottom);\n                c.stroke();\n            }\n        }\n\n        function drawSeriesBars(series) {\n            function plotBars(datapoints, barLeft, barRight, fillStyleCallback, axisx, axisy) {\n                var points = datapoints.points, ps = datapoints.pointsize;\n\n                for (var i = 0; i < points.length; i += ps) {\n                    if (points[i] == null)\n                        continue;\n                    drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            // FIXME: figure out a way to add shadows (for instance along the right edge)\n            ctx.lineWidth = series.bars.lineWidth;\n            ctx.strokeStyle = series.color;\n\n            var barLeft;\n\n            switch (series.bars.align) {\n                case \"left\":\n                    barLeft = 0;\n                    break;\n                case \"right\":\n                    barLeft = -series.bars.barWidth;\n                    break;\n                default:\n                    barLeft = -series.bars.barWidth / 2;\n            }\n\n            var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;\n            plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, fillStyleCallback, series.xaxis, series.yaxis);\n            ctx.restore();\n        }\n\n        function getFillStyle(filloptions, seriesColor, bottom, top) {\n            var fill = filloptions.fill;\n            if (!fill)\n                return null;\n\n            if (filloptions.fillColor)\n                return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);\n\n            var c = $.color.parse(seriesColor);\n            c.a = typeof fill == \"number\" ? fill : 0.4;\n            c.normalize();\n            return c.toString();\n        }\n\n        function insertLegend() {\n\n            if (options.legend.container != null) {\n                $(options.legend.container).html(\"\");\n            } else {\n                placeholder.find(\".legend\").remove();\n            }\n\n            if (!options.legend.show) {\n                return;\n            }\n\n            var fragments = [], entries = [], rowStarted = false,\n                lf = options.legend.labelFormatter, s, label;\n\n            // Build a list of legend entries, with each having a label and a color\n\n            for (var i = 0; i < series.length; ++i) {\n                s = series[i];\n                if (s.label) {\n                    label = lf ? lf(s.label, s) : s.label;\n                    if (label) {\n                        entries.push({\n                            label: label,\n                            color: s.color\n                        });\n                    }\n                }\n            }\n\n            // Sort the legend using either the default or a custom comparator\n\n            if (options.legend.sorted) {\n                if ($.isFunction(options.legend.sorted)) {\n                    entries.sort(options.legend.sorted);\n                } else if (options.legend.sorted == \"reverse\") {\n                \tentries.reverse();\n                } else {\n                    var ascending = options.legend.sorted != \"descending\";\n                    entries.sort(function(a, b) {\n                        return a.label == b.label ? 0 : (\n                            (a.label < b.label) != ascending ? 1 : -1   // Logical XOR\n                        );\n                    });\n                }\n            }\n\n            // Generate markup for the list of entries, in their final order\n\n            for (var i = 0; i < entries.length; ++i) {\n\n                var entry = entries[i];\n\n                if (i % options.legend.noColumns == 0) {\n                    if (rowStarted)\n                        fragments.push('</tr>');\n                    fragments.push('<tr>');\n                    rowStarted = true;\n                }\n\n                fragments.push(\n                    '<td class=\"legendColorBox\"><div style=\"border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px\"><div style=\"width:4px;height:0;border:5px solid ' + entry.color + ';overflow:hidden\"></div></div></td>' +\n                    '<td class=\"legendLabel\">' + entry.label + '</td>'\n                );\n            }\n\n            if (rowStarted)\n                fragments.push('</tr>');\n\n            if (fragments.length == 0)\n                return;\n\n            var table = '<table style=\"font-size:smaller;color:' + options.grid.color + '\">' + fragments.join(\"\") + '</table>';\n            if (options.legend.container != null)\n                $(options.legend.container).html(table);\n            else {\n                var pos = \"\",\n                    p = options.legend.position,\n                    m = options.legend.margin;\n                if (m[0] == null)\n                    m = [m, m];\n                if (p.charAt(0) == \"n\")\n                    pos += 'top:' + (m[1] + plotOffset.top) + 'px;';\n                else if (p.charAt(0) == \"s\")\n                    pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';\n                if (p.charAt(1) == \"e\")\n                    pos += 'right:' + (m[0] + plotOffset.right) + 'px;';\n                else if (p.charAt(1) == \"w\")\n                    pos += 'left:' + (m[0] + plotOffset.left) + 'px;';\n                var legend = $('<div class=\"legend\">' + table.replace('style=\"', 'style=\"position:absolute;' + pos +';') + '</div>').appendTo(placeholder);\n                if (options.legend.backgroundOpacity != 0.0) {\n                    // put in the transparent background\n                    // separately to avoid blended labels and\n                    // label boxes\n                    var c = options.legend.backgroundColor;\n                    if (c == null) {\n                        c = options.grid.backgroundColor;\n                        if (c && typeof c == \"string\")\n                            c = $.color.parse(c);\n                        else\n                            c = $.color.extract(legend, 'background-color');\n                        c.a = 1;\n                        c = c.toString();\n                    }\n                    var div = legend.children();\n                    $('<div style=\"position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';\"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);\n                }\n            }\n        }\n\n\n        // interactive features\n\n        var highlights = [],\n            redrawTimeout = null;\n\n        // returns the data item the mouse is over, or null if none is found\n        function findNearbyItem(mouseX, mouseY, seriesFilter) {\n            var maxDistance = options.grid.mouseActiveRadius,\n                smallestDistance = maxDistance * maxDistance + 1,\n                item = null, foundPoint = false, i, j, ps;\n\n            for (i = series.length - 1; i >= 0; --i) {\n                if (!seriesFilter(series[i]))\n                    continue;\n\n                var s = series[i],\n                    axisx = s.xaxis,\n                    axisy = s.yaxis,\n                    points = s.datapoints.points,\n                    mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster\n                    my = axisy.c2p(mouseY),\n                    maxx = maxDistance / axisx.scale,\n                    maxy = maxDistance / axisy.scale;\n\n                ps = s.datapoints.pointsize;\n                // with inverse transforms, we can't use the maxx/maxy\n                // optimization, sadly\n                if (axisx.options.inverseTransform)\n                    maxx = Number.MAX_VALUE;\n                if (axisy.options.inverseTransform)\n                    maxy = Number.MAX_VALUE;\n\n                if (s.lines.show || s.points.show) {\n                    for (j = 0; j < points.length; j += ps) {\n                        var x = points[j], y = points[j + 1];\n                        if (x == null)\n                            continue;\n\n                        // For points and lines, the cursor must be within a\n                        // certain distance to the data point\n                        if (x - mx > maxx || x - mx < -maxx ||\n                            y - my > maxy || y - my < -maxy)\n                            continue;\n\n                        // We have to calculate distances in pixels, not in\n                        // data units, because the scales of the axes may be different\n                        var dx = Math.abs(axisx.p2c(x) - mouseX),\n                            dy = Math.abs(axisy.p2c(y) - mouseY),\n                            dist = dx * dx + dy * dy; // we save the sqrt\n\n                        // use <= to ensure last point takes precedence\n                        // (last generally means on top of)\n                        if (dist < smallestDistance) {\n                            smallestDistance = dist;\n                            item = [i, j / ps];\n                        }\n                    }\n                }\n\n                if (s.bars.show && !item) { // no other point can be nearby\n\n                    var barLeft, barRight;\n\n                    switch (s.bars.align) {\n                        case \"left\":\n                            barLeft = 0;\n                            break;\n                        case \"right\":\n                            barLeft = -s.bars.barWidth;\n                            break;\n                        default:\n                            barLeft = -s.bars.barWidth / 2;\n                    }\n\n                    barRight = barLeft + s.bars.barWidth;\n\n                    for (j = 0; j < points.length; j += ps) {\n                        var x = points[j], y = points[j + 1], b = points[j + 2];\n                        if (x == null)\n                            continue;\n\n                        // for a bar graph, the cursor must be inside the bar\n                        if (series[i].bars.horizontal ?\n                            (mx <= Math.max(b, x) && mx >= Math.min(b, x) &&\n                             my >= y + barLeft && my <= y + barRight) :\n                            (mx >= x + barLeft && mx <= x + barRight &&\n                             my >= Math.min(b, y) && my <= Math.max(b, y)))\n                                item = [i, j / ps];\n                    }\n                }\n            }\n\n            if (item) {\n                i = item[0];\n                j = item[1];\n                ps = series[i].datapoints.pointsize;\n\n                return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),\n                         dataIndex: j,\n                         series: series[i],\n                         seriesIndex: i };\n            }\n\n            return null;\n        }\n\n        function onMouseMove(e) {\n            if (options.grid.hoverable)\n                triggerClickHoverEvent(\"plothover\", e,\n                                       function (s) { return s[\"hoverable\"] != false; });\n        }\n\n        function onMouseLeave(e) {\n            if (options.grid.hoverable)\n                triggerClickHoverEvent(\"plothover\", e,\n                                       function (s) { return false; });\n        }\n\n        function onClick(e) {\n            triggerClickHoverEvent(\"plotclick\", e,\n                                   function (s) { return s[\"clickable\"] != false; });\n        }\n\n        // trigger click or hover event (they send the same parameters\n        // so we share their code)\n        function triggerClickHoverEvent(eventname, event, seriesFilter) {\n            var offset = eventHolder.offset(),\n                canvasX = event.pageX - offset.left - plotOffset.left,\n                canvasY = event.pageY - offset.top - plotOffset.top,\n            pos = canvasToAxisCoords({ left: canvasX, top: canvasY });\n\n            pos.pageX = event.pageX;\n            pos.pageY = event.pageY;\n\n            var item = findNearbyItem(canvasX, canvasY, seriesFilter);\n\n            if (item) {\n                // fill in mouse pos for any listeners out there\n                item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left, 10);\n                item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top, 10);\n            }\n\n            if (options.grid.autoHighlight) {\n                // clear auto-highlights\n                for (var i = 0; i < highlights.length; ++i) {\n                    var h = highlights[i];\n                    if (h.auto == eventname &&\n                        !(item && h.series == item.series &&\n                          h.point[0] == item.datapoint[0] &&\n                          h.point[1] == item.datapoint[1]))\n                        unhighlight(h.series, h.point);\n                }\n\n                if (item)\n                    highlight(item.series, item.datapoint, eventname);\n            }\n\n            placeholder.trigger(eventname, [ pos, item ]);\n        }\n\n        function triggerRedrawOverlay() {\n            var t = options.interaction.redrawOverlayInterval;\n            if (t == -1) {      // skip event queue\n                drawOverlay();\n                return;\n            }\n\n            if (!redrawTimeout)\n                redrawTimeout = setTimeout(drawOverlay, t);\n        }\n\n        function drawOverlay() {\n            redrawTimeout = null;\n\n            // draw highlights\n            octx.save();\n            overlay.clear();\n            octx.translate(plotOffset.left, plotOffset.top);\n\n            var i, hi;\n            for (i = 0; i < highlights.length; ++i) {\n                hi = highlights[i];\n\n                if (hi.series.bars.show)\n                    drawBarHighlight(hi.series, hi.point);\n                else\n                    drawPointHighlight(hi.series, hi.point);\n            }\n            octx.restore();\n\n            executeHooks(hooks.drawOverlay, [octx]);\n        }\n\n        function highlight(s, point, auto) {\n            if (typeof s == \"number\")\n                s = series[s];\n\n            if (typeof point == \"number\") {\n                var ps = s.datapoints.pointsize;\n                point = s.datapoints.points.slice(ps * point, ps * (point + 1));\n            }\n\n            var i = indexOfHighlight(s, point);\n            if (i == -1) {\n                highlights.push({ series: s, point: point, auto: auto });\n\n                triggerRedrawOverlay();\n            }\n            else if (!auto)\n                highlights[i].auto = false;\n        }\n\n        function unhighlight(s, point) {\n            if (s == null && point == null) {\n                highlights = [];\n                triggerRedrawOverlay();\n                return;\n            }\n\n            if (typeof s == \"number\")\n                s = series[s];\n\n            if (typeof point == \"number\") {\n                var ps = s.datapoints.pointsize;\n                point = s.datapoints.points.slice(ps * point, ps * (point + 1));\n            }\n\n            var i = indexOfHighlight(s, point);\n            if (i != -1) {\n                highlights.splice(i, 1);\n\n                triggerRedrawOverlay();\n            }\n        }\n\n        function indexOfHighlight(s, p) {\n            for (var i = 0; i < highlights.length; ++i) {\n                var h = highlights[i];\n                if (h.series == s && h.point[0] == p[0]\n                    && h.point[1] == p[1])\n                    return i;\n            }\n            return -1;\n        }\n\n        function drawPointHighlight(series, point) {\n            var x = point[0], y = point[1],\n                axisx = series.xaxis, axisy = series.yaxis,\n                highlightColor = (typeof series.highlightColor === \"string\") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString();\n\n            if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)\n                return;\n\n            var pointRadius = series.points.radius + series.points.lineWidth / 2;\n            octx.lineWidth = pointRadius;\n            octx.strokeStyle = highlightColor;\n            var radius = 1.5 * pointRadius;\n            x = axisx.p2c(x);\n            y = axisy.p2c(y);\n\n            octx.beginPath();\n            if (series.points.symbol == \"circle\")\n                octx.arc(x, y, radius, 0, 2 * Math.PI, false);\n            else\n                series.points.symbol(octx, x, y, radius, false);\n            octx.closePath();\n            octx.stroke();\n        }\n\n        function drawBarHighlight(series, point) {\n            var highlightColor = (typeof series.highlightColor === \"string\") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(),\n                fillStyle = highlightColor,\n                barLeft;\n\n            switch (series.bars.align) {\n                case \"left\":\n                    barLeft = 0;\n                    break;\n                case \"right\":\n                    barLeft = -series.bars.barWidth;\n                    break;\n                default:\n                    barLeft = -series.bars.barWidth / 2;\n            }\n\n            octx.lineWidth = series.bars.lineWidth;\n            octx.strokeStyle = highlightColor;\n\n            drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,\n                    function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth);\n        }\n\n        function getColorOrGradient(spec, bottom, top, defaultColor) {\n            if (typeof spec == \"string\")\n                return spec;\n            else {\n                // assume this is a gradient spec; IE currently only\n                // supports a simple vertical gradient properly, so that's\n                // what we support too\n                var gradient = ctx.createLinearGradient(0, top, 0, bottom);\n\n                for (var i = 0, l = spec.colors.length; i < l; ++i) {\n                    var c = spec.colors[i];\n                    if (typeof c != \"string\") {\n                        var co = $.color.parse(defaultColor);\n                        if (c.brightness != null)\n                            co = co.scale('rgb', c.brightness);\n                        if (c.opacity != null)\n                            co.a *= c.opacity;\n                        c = co.toString();\n                    }\n                    gradient.addColorStop(i / (l - 1), c);\n                }\n\n                return gradient;\n            }\n        }\n    }\n\n    // Add the plot function to the top level of the jQuery object\n\n    $.plot = function(placeholder, data, options) {\n        //var t0 = new Date();\n        var plot = new Plot($(placeholder), data, options, $.plot.plugins);\n        //(window.console ? console.log : alert)(\"time used (msecs): \" + ((new Date()).getTime() - t0.getTime()));\n        return plot;\n    };\n\n    $.plot.version = \"0.8.2\";\n\n    $.plot.plugins = [];\n\n    // Also add the plot function as a chainable property\n\n    $.fn.plot = function(data, options) {\n        return this.each(function() {\n            $.plot(this, data, options);\n        });\n    };\n\n    // round to nearby lower multiple of base\n    function floorInBase(n, base) {\n        return base * Math.floor(n / base);\n    }\n\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.navigate.js",
    "content": "/* Flot plugin for adding the ability to pan and zoom the plot.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe default behaviour is double click and scrollwheel up/down to zoom in, drag\nto pan. The plugin defines plot.zoom({ center }), plot.zoomOut() and\nplot.pan( offset ) so you easily can add custom controls. It also fires\n\"plotpan\" and \"plotzoom\" events, useful for synchronizing plots.\n\nThe plugin supports these options:\n\n\tzoom: {\n\t\tinteractive: false\n\t\ttrigger: \"dblclick\" // or \"click\" for single click\n\t\tamount: 1.5         // 2 = 200% (zoom in), 0.5 = 50% (zoom out)\n\t}\n\n\tpan: {\n\t\tinteractive: false\n\t\tcursor: \"move\"      // CSS mouse cursor value used when dragging, e.g. \"pointer\"\n\t\tframeRate: 20\n\t}\n\n\txaxis, yaxis, x2axis, y2axis: {\n\t\tzoomRange: null  // or [ number, number ] (min range, max range) or false\n\t\tpanRange: null   // or [ number, number ] (min, max) or false\n\t}\n\n\"interactive\" enables the built-in drag/click behaviour. If you enable\ninteractive for pan, then you'll have a basic plot that supports moving\naround; the same for zoom.\n\n\"amount\" specifies the default amount to zoom in (so 1.5 = 150%) relative to\nthe current viewport.\n\n\"cursor\" is a standard CSS mouse cursor string used for visual feedback to the\nuser when dragging.\n\n\"frameRate\" specifies the maximum number of times per second the plot will\nupdate itself while the user is panning around on it (set to null to disable\nintermediate pans, the plot will then not update until the mouse button is\nreleased).\n\n\"zoomRange\" is the interval in which zooming can happen, e.g. with zoomRange:\n[1, 100] the zoom will never scale the axis so that the difference between min\nand max is smaller than 1 or larger than 100. You can set either end to null\nto ignore, e.g. [1, null]. If you set zoomRange to false, zooming on that axis\nwill be disabled.\n\n\"panRange\" confines the panning to stay within a range, e.g. with panRange:\n[-10, 20] panning stops at -10 in one end and at 20 in the other. Either can\nbe null, e.g. [-10, null]. If you set panRange to false, panning on that axis\nwill be disabled.\n\nExample API usage:\n\n\tplot = $.plot(...);\n\n\t// zoom default amount in on the pixel ( 10, 20 )\n\tplot.zoom({ center: { left: 10, top: 20 } });\n\n\t// zoom out again\n\tplot.zoomOut({ center: { left: 10, top: 20 } });\n\n\t// zoom 200% in on the pixel (10, 20)\n\tplot.zoom({ amount: 2, center: { left: 10, top: 20 } });\n\n\t// pan 100 pixels to the left and 20 down\n\tplot.pan({ left: -100, top: 20 })\n\nHere, \"center\" specifies where the center of the zooming should happen. Note\nthat this is defined in pixel space, not the space of the data points (you can\nuse the p2c helpers on the axes in Flot to help you convert between these).\n\n\"amount\" is the amount to zoom the viewport relative to the current range, so\n1 is 100% (i.e. no change), 1.5 is 150% (zoom in), 0.7 is 70% (zoom out). You\ncan set the default in the options.\n\n*/\n\n// First two dependencies, jquery.event.drag.js and\n// jquery.mousewheel.js, we put them inline here to save people the\n// effort of downloading them.\n\n/*\njquery.event.drag.js ~ v1.5 ~ Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)\nLicensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-LICENSE.txt\n*/\n(function(a){function e(h){var k,j=this,l=h.data||{};if(l.elem)j=h.dragTarget=l.elem,h.dragProxy=d.proxy||j,h.cursorOffsetX=l.pageX-l.left,h.cursorOffsetY=l.pageY-l.top,h.offsetX=h.pageX-h.cursorOffsetX,h.offsetY=h.pageY-h.cursorOffsetY;else if(d.dragging||l.which>0&&h.which!=l.which||a(h.target).is(l.not))return;switch(h.type){case\"mousedown\":return a.extend(l,a(j).offset(),{elem:j,target:h.target,pageX:h.pageX,pageY:h.pageY}),b.add(document,\"mousemove mouseup\",e,l),i(j,!1),d.dragging=null,!1;case!d.dragging&&\"mousemove\":if(g(h.pageX-l.pageX)+g(h.pageY-l.pageY)<l.distance)break;h.target=l.target,k=f(h,\"dragstart\",j),k!==!1&&(d.dragging=j,d.proxy=h.dragProxy=a(k||j)[0]);case\"mousemove\":if(d.dragging){if(k=f(h,\"drag\",j),c.drop&&(c.drop.allowed=k!==!1,c.drop.handler(h)),k!==!1)break;h.type=\"mouseup\"}case\"mouseup\":b.remove(document,\"mousemove mouseup\",e),d.dragging&&(c.drop&&c.drop.handler(h),f(h,\"dragend\",j)),i(j,!0),d.dragging=d.proxy=l.elem=!1}return!0}function f(b,c,d){b.type=c;var e=a.event.dispatch.call(d,b);return e===!1?!1:e||b.result}function g(a){return Math.pow(a,2)}function h(){return d.dragging===!1}function i(a,b){a&&(a.unselectable=b?\"off\":\"on\",a.onselectstart=function(){return b},a.style&&(a.style.MozUserSelect=b?\"\":\"none\"))}a.fn.drag=function(a,b,c){return b&&this.bind(\"dragstart\",a),c&&this.bind(\"dragend\",c),a?this.bind(\"drag\",b?b:a):this.trigger(\"drag\")};var b=a.event,c=b.special,d=c.drag={not:\":input\",distance:0,which:1,dragging:!1,setup:function(c){c=a.extend({distance:d.distance,which:d.which,not:d.not},c||{}),c.distance=g(c.distance),b.add(this,\"mousedown\",e,c),this.attachEvent&&this.attachEvent(\"ondragstart\",h)},teardown:function(){b.remove(this,\"mousedown\",e),this===d.dragging&&(d.dragging=d.proxy=!1),i(this,!0),this.detachEvent&&this.detachEvent(\"ondragstart\",h)}};c.dragstart=c.dragend={setup:function(){},teardown:function(){}}})(jQuery);\n\n/* jquery.mousewheel.min.js\n * Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net)\n * Licensed under the MIT License (LICENSE.txt).\n * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.\n * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.\n * Thanks to: Seamus Leahy for adding deltaX and deltaY\n *\n * Version: 3.0.6\n *\n * Requires: 1.2.2+\n */\n(function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type=\"mousewheel\";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;void 0!==b.axis&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);void 0!==b.wheelDeltaY&&(g=b.wheelDeltaY/120);void 0!==b.wheelDeltaX&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=[\"DOMMouseScroll\",\"mousewheel\"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]=d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,!1);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,!1);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind(\"mousewheel\",a):this.trigger(\"mousewheel\")},unmousewheel:function(a){return this.unbind(\"mousewheel\",a)}})})(jQuery);\n\n\n\n\n(function ($) {\n    var options = {\n        xaxis: {\n            zoomRange: null, // or [number, number] (min range, max range)\n            panRange: null // or [number, number] (min, max)\n        },\n        zoom: {\n            interactive: false,\n            trigger: \"dblclick\", // or \"click\" for single click\n            amount: 1.5 // how much to zoom relative to current position, 2 = 200% (zoom in), 0.5 = 50% (zoom out)\n        },\n        pan: {\n            interactive: false,\n            cursor: \"move\",\n            frameRate: 20\n        }\n    };\n\n    function init(plot) {\n        function onZoomClick(e, zoomOut) {\n            var c = plot.offset();\n            c.left = e.pageX - c.left;\n            c.top = e.pageY - c.top;\n            if (zoomOut)\n                plot.zoomOut({ center: c });\n            else\n                plot.zoom({ center: c });\n        }\n\n        function onMouseWheel(e, delta) {\n            e.preventDefault();\n            onZoomClick(e, delta < 0);\n            return false;\n        }\n        \n        var prevCursor = 'default', prevPageX = 0, prevPageY = 0,\n            panTimeout = null;\n\n        function onDragStart(e) {\n            if (e.which != 1)  // only accept left-click\n                return false;\n            var c = plot.getPlaceholder().css('cursor');\n            if (c)\n                prevCursor = c;\n            plot.getPlaceholder().css('cursor', plot.getOptions().pan.cursor);\n            prevPageX = e.pageX;\n            prevPageY = e.pageY;\n        }\n        \n        function onDrag(e) {\n            var frameRate = plot.getOptions().pan.frameRate;\n            if (panTimeout || !frameRate)\n                return;\n\n            panTimeout = setTimeout(function () {\n                plot.pan({ left: prevPageX - e.pageX,\n                           top: prevPageY - e.pageY });\n                prevPageX = e.pageX;\n                prevPageY = e.pageY;\n                                                    \n                panTimeout = null;\n            }, 1 / frameRate * 1000);\n        }\n\n        function onDragEnd(e) {\n            if (panTimeout) {\n                clearTimeout(panTimeout);\n                panTimeout = null;\n            }\n                    \n            plot.getPlaceholder().css('cursor', prevCursor);\n            plot.pan({ left: prevPageX - e.pageX,\n                       top: prevPageY - e.pageY });\n        }\n        \n        function bindEvents(plot, eventHolder) {\n            var o = plot.getOptions();\n            if (o.zoom.interactive) {\n                eventHolder[o.zoom.trigger](onZoomClick);\n                eventHolder.mousewheel(onMouseWheel);\n            }\n\n            if (o.pan.interactive) {\n                eventHolder.bind(\"dragstart\", { distance: 10 }, onDragStart);\n                eventHolder.bind(\"drag\", onDrag);\n                eventHolder.bind(\"dragend\", onDragEnd);\n            }\n        }\n\n        plot.zoomOut = function (args) {\n            if (!args)\n                args = {};\n            \n            if (!args.amount)\n                args.amount = plot.getOptions().zoom.amount;\n\n            args.amount = 1 / args.amount;\n            plot.zoom(args);\n        };\n        \n        plot.zoom = function (args) {\n            if (!args)\n                args = {};\n            \n            var c = args.center,\n                amount = args.amount || plot.getOptions().zoom.amount,\n                w = plot.width(), h = plot.height();\n\n            if (!c)\n                c = { left: w / 2, top: h / 2 };\n                \n            var xf = c.left / w,\n                yf = c.top / h,\n                minmax = {\n                    x: {\n                        min: c.left - xf * w / amount,\n                        max: c.left + (1 - xf) * w / amount\n                    },\n                    y: {\n                        min: c.top - yf * h / amount,\n                        max: c.top + (1 - yf) * h / amount\n                    }\n                };\n\n            $.each(plot.getAxes(), function(_, axis) {\n                var opts = axis.options,\n                    min = minmax[axis.direction].min,\n                    max = minmax[axis.direction].max,\n                    zr = opts.zoomRange,\n                    pr = opts.panRange;\n\n                if (zr === false) // no zooming on this axis\n                    return;\n                    \n                min = axis.c2p(min);\n                max = axis.c2p(max);\n                if (min > max) {\n                    // make sure min < max\n                    var tmp = min;\n                    min = max;\n                    max = tmp;\n                }\n\n                //Check that we are in panRange\n                if (pr) {\n                    if (pr[0] != null && min < pr[0]) {\n                        min = pr[0];\n                    }\n                    if (pr[1] != null && max > pr[1]) {\n                        max = pr[1];\n                    }\n                }\n\n                var range = max - min;\n                if (zr &&\n                    ((zr[0] != null && range < zr[0]) ||\n                     (zr[1] != null && range > zr[1])))\n                    return;\n            \n                opts.min = min;\n                opts.max = max;\n            });\n            \n            plot.setupGrid();\n            plot.draw();\n            \n            if (!args.preventEvent)\n                plot.getPlaceholder().trigger(\"plotzoom\", [ plot, args ]);\n        };\n\n        plot.pan = function (args) {\n            var delta = {\n                x: +args.left,\n                y: +args.top\n            };\n\n            if (isNaN(delta.x))\n                delta.x = 0;\n            if (isNaN(delta.y))\n                delta.y = 0;\n\n            $.each(plot.getAxes(), function (_, axis) {\n                var opts = axis.options,\n                    min, max, d = delta[axis.direction];\n\n                min = axis.c2p(axis.p2c(axis.min) + d),\n                max = axis.c2p(axis.p2c(axis.max) + d);\n\n                var pr = opts.panRange;\n                if (pr === false) // no panning on this axis\n                    return;\n                \n                if (pr) {\n                    // check whether we hit the wall\n                    if (pr[0] != null && pr[0] > min) {\n                        d = pr[0] - min;\n                        min += d;\n                        max += d;\n                    }\n                    \n                    if (pr[1] != null && pr[1] < max) {\n                        d = pr[1] - max;\n                        min += d;\n                        max += d;\n                    }\n                }\n                \n                opts.min = min;\n                opts.max = max;\n            });\n            \n            plot.setupGrid();\n            plot.draw();\n            \n            if (!args.preventEvent)\n                plot.getPlaceholder().trigger(\"plotpan\", [ plot, args ]);\n        };\n\n        function shutdown(plot, eventHolder) {\n            eventHolder.unbind(plot.getOptions().zoom.trigger, onZoomClick);\n            eventHolder.unbind(\"mousewheel\", onMouseWheel);\n            eventHolder.unbind(\"dragstart\", onDragStart);\n            eventHolder.unbind(\"drag\", onDrag);\n            eventHolder.unbind(\"dragend\", onDragEnd);\n            if (panTimeout)\n                clearTimeout(panTimeout);\n        }\n        \n        plot.hooks.bindEvents.push(bindEvents);\n        plot.hooks.shutdown.push(shutdown);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'navigate',\n        version: '1.3'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.pie.js",
    "content": "/* Flot plugin for rendering pie charts.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin assumes that each series has a single data value, and that each\nvalue is a positive integer or zero.  Negative numbers don't make sense for a\npie chart, and have unpredictable results.  The values do NOT need to be\npassed in as percentages; the plugin will calculate the total and per-slice\npercentages internally.\n\n* Created by Brian Medendorp\n\n* Updated with contributions from btburnett3, Anthony Aragues and Xavi Ivars\n\nThe plugin supports these options:\n\n\tseries: {\n\t\tpie: {\n\t\t\tshow: true/false\n\t\t\tradius: 0-1 for percentage of fullsize, or a specified pixel length, or 'auto'\n\t\t\tinnerRadius: 0-1 for percentage of fullsize or a specified pixel length, for creating a donut effect\n\t\t\tstartAngle: 0-2 factor of PI used for starting angle (in radians) i.e 3/2 starts at the top, 0 and 2 have the same result\n\t\t\ttilt: 0-1 for percentage to tilt the pie, where 1 is no tilt, and 0 is completely flat (nothing will show)\n\t\t\toffset: {\n\t\t\t\ttop: integer value to move the pie up or down\n\t\t\t\tleft: integer value to move the pie left or right, or 'auto'\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#FFF')\n\t\t\t\twidth: integer pixel width of the stroke\n\t\t\t},\n\t\t\tlabel: {\n\t\t\t\tshow: true/false, or 'auto'\n\t\t\t\tformatter:  a user-defined function that modifies the text/style of the label text\n\t\t\t\tradius: 0-1 for percentage of fullsize, or a specified pixel length\n\t\t\t\tbackground: {\n\t\t\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#000')\n\t\t\t\t\topacity: 0-1\n\t\t\t\t},\n\t\t\t\tthreshold: 0-1 for the percentage value at which to hide labels (if they're too small)\n\t\t\t},\n\t\t\tcombine: {\n\t\t\t\tthreshold: 0-1 for the percentage value at which to combine slices (if they're too small)\n\t\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#CCC'), if null, the plugin will automatically use the color of the first slice to be combined\n\t\t\t\tlabel: any text value of what the combined slice should be labeled\n\t\t\t}\n\t\t\thighlight: {\n\t\t\t\topacity: 0-1\n\t\t\t}\n\t\t}\n\t}\n\nMore detail and specific examples can be found in the included HTML file.\n\n*/\n\n(function($) {\n\n\t// Maximum redraw attempts when fitting labels within the plot\n\n\tvar REDRAW_ATTEMPTS = 10;\n\n\t// Factor by which to shrink the pie when fitting labels within the plot\n\n\tvar REDRAW_SHRINK = 0.95;\n\n\tfunction init(plot) {\n\n\t\tvar canvas = null,\n\t\t\ttarget = null,\n\t\t\toptions = null,\n\t\t\tmaxRadius = null,\n\t\t\tcenterLeft = null,\n\t\t\tcenterTop = null,\n\t\t\tprocessed = false,\n\t\t\tctx = null;\n\n\t\t// interactive variables\n\n\t\tvar highlights = [];\n\n\t\t// add hook to determine if pie plugin in enabled, and then perform necessary operations\n\n\t\tplot.hooks.processOptions.push(function(plot, options) {\n\t\t\tif (options.series.pie.show) {\n\n\t\t\t\toptions.grid.show = false;\n\n\t\t\t\t// set labels.show\n\n\t\t\t\tif (options.series.pie.label.show == \"auto\") {\n\t\t\t\t\tif (options.legend.show) {\n\t\t\t\t\t\toptions.series.pie.label.show = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.series.pie.label.show = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// set radius\n\n\t\t\t\tif (options.series.pie.radius == \"auto\") {\n\t\t\t\t\tif (options.series.pie.label.show) {\n\t\t\t\t\t\toptions.series.pie.radius = 3/4;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.series.pie.radius = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// ensure sane tilt\n\n\t\t\t\tif (options.series.pie.tilt > 1) {\n\t\t\t\t\toptions.series.pie.tilt = 1;\n\t\t\t\t} else if (options.series.pie.tilt < 0) {\n\t\t\t\t\toptions.series.pie.tilt = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.bindEvents.push(function(plot, eventHolder) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tif (options.grid.hoverable) {\n\t\t\t\t\teventHolder.unbind(\"mousemove\").mousemove(onMouseMove);\n\t\t\t\t}\n\t\t\t\tif (options.grid.clickable) {\n\t\t\t\t\teventHolder.unbind(\"click\").click(onClick);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.processDatapoints.push(function(plot, series, data, datapoints) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tprocessDatapoints(plot, series, data, datapoints);\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.drawOverlay.push(function(plot, octx) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tdrawOverlay(plot, octx);\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.draw.push(function(plot, newCtx) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tdraw(plot, newCtx);\n\t\t\t}\n\t\t});\n\n\t\tfunction processDatapoints(plot, series, datapoints) {\n\t\t\tif (!processed)\t{\n\t\t\t\tprocessed = true;\n\t\t\t\tcanvas = plot.getCanvas();\n\t\t\t\ttarget = $(canvas).parent();\n\t\t\t\toptions = plot.getOptions();\n\t\t\t\tplot.setData(combine(plot.getData()));\n\t\t\t}\n\t\t}\n\n\t\tfunction combine(data) {\n\n\t\t\tvar total = 0,\n\t\t\t\tcombined = 0,\n\t\t\t\tnumCombined = 0,\n\t\t\t\tcolor = options.series.pie.combine.color,\n\t\t\t\tnewdata = [];\n\n\t\t\t// Fix up the raw data from Flot, ensuring the data is numeric\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\n\t\t\t\tvar value = data[i].data;\n\n\t\t\t\t// If the data is an array, we'll assume that it's a standard\n\t\t\t\t// Flot x-y pair, and are concerned only with the second value.\n\n\t\t\t\t// Note how we use the original array, rather than creating a\n\t\t\t\t// new one; this is more efficient and preserves any extra data\n\t\t\t\t// that the user may have stored in higher indexes.\n\n\t\t\t\tif ($.isArray(value) && value.length == 1) {\n    \t\t\t\tvalue = value[0];\n\t\t\t\t}\n\n\t\t\t\tif ($.isArray(value)) {\n\t\t\t\t\t// Equivalent to $.isNumeric() but compatible with jQuery < 1.7\n\t\t\t\t\tif (!isNaN(parseFloat(value[1])) && isFinite(value[1])) {\n\t\t\t\t\t\tvalue[1] = +value[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue[1] = 0;\n\t\t\t\t\t}\n\t\t\t\t} else if (!isNaN(parseFloat(value)) && isFinite(value)) {\n\t\t\t\t\tvalue = [1, +value];\n\t\t\t\t} else {\n\t\t\t\t\tvalue = [1, 0];\n\t\t\t\t}\n\n\t\t\t\tdata[i].data = [value];\n\t\t\t}\n\n\t\t\t// Sum up all the slices, so we can calculate percentages for each\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\ttotal += data[i].data[0][1];\n\t\t\t}\n\n\t\t\t// Count the number of slices with percentages below the combine\n\t\t\t// threshold; if it turns out to be just one, we won't combine.\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\tvar value = data[i].data[0][1];\n\t\t\t\tif (value / total <= options.series.pie.combine.threshold) {\n\t\t\t\t\tcombined += value;\n\t\t\t\t\tnumCombined++;\n\t\t\t\t\tif (!color) {\n\t\t\t\t\t\tcolor = data[i].color;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\tvar value = data[i].data[0][1];\n\t\t\t\tif (numCombined < 2 || value / total > options.series.pie.combine.threshold) {\n\t\t\t\t\tnewdata.push({\n\t\t\t\t\t\tdata: [[1, value]],\n\t\t\t\t\t\tcolor: data[i].color,\n\t\t\t\t\t\tlabel: data[i].label,\n\t\t\t\t\t\tangle: value * Math.PI * 2 / total,\n\t\t\t\t\t\tpercent: value / (total / 100)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (numCombined > 1) {\n\t\t\t\tnewdata.push({\n\t\t\t\t\tdata: [[1, combined]],\n\t\t\t\t\tcolor: color,\n\t\t\t\t\tlabel: options.series.pie.combine.label,\n\t\t\t\t\tangle: combined * Math.PI * 2 / total,\n\t\t\t\t\tpercent: combined / (total / 100)\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn newdata;\n\t\t}\n\n\t\tfunction draw(plot, newCtx) {\n\n\t\t\tif (!target) {\n\t\t\t\treturn; // if no series were passed\n\t\t\t}\n\n\t\t\tvar canvasWidth = plot.getPlaceholder().width(),\n\t\t\t\tcanvasHeight = plot.getPlaceholder().height(),\n\t\t\t\tlegendWidth = target.children().filter(\".legend\").children().width() || 0;\n\n\t\t\tctx = newCtx;\n\n\t\t\t// WARNING: HACK! REWRITE THIS CODE AS SOON AS POSSIBLE!\n\n\t\t\t// When combining smaller slices into an 'other' slice, we need to\n\t\t\t// add a new series.  Since Flot gives plugins no way to modify the\n\t\t\t// list of series, the pie plugin uses a hack where the first call\n\t\t\t// to processDatapoints results in a call to setData with the new\n\t\t\t// list of series, then subsequent processDatapoints do nothing.\n\n\t\t\t// The plugin-global 'processed' flag is used to control this hack;\n\t\t\t// it starts out false, and is set to true after the first call to\n\t\t\t// processDatapoints.\n\n\t\t\t// Unfortunately this turns future setData calls into no-ops; they\n\t\t\t// call processDatapoints, the flag is true, and nothing happens.\n\n\t\t\t// To fix this we'll set the flag back to false here in draw, when\n\t\t\t// all series have been processed, so the next sequence of calls to\n\t\t\t// processDatapoints once again starts out with a slice-combine.\n\t\t\t// This is really a hack; in 0.9 we need to give plugins a proper\n\t\t\t// way to modify series before any processing begins.\n\n\t\t\tprocessed = false;\n\n\t\t\t// calculate maximum radius and center point\n\n\t\t\tmaxRadius =  Math.min(canvasWidth, canvasHeight / options.series.pie.tilt) / 2;\n\t\t\tcenterTop = canvasHeight / 2 + options.series.pie.offset.top;\n\t\t\tcenterLeft = canvasWidth / 2;\n\n\t\t\tif (options.series.pie.offset.left == \"auto\") {\n\t\t\t\tif (options.legend.position.match(\"w\")) {\n\t\t\t\t\tcenterLeft += legendWidth / 2;\n\t\t\t\t} else {\n\t\t\t\t\tcenterLeft -= legendWidth / 2;\n\t\t\t\t}\n\t\t\t\tif (centerLeft < maxRadius) {\n\t\t\t\t\tcenterLeft = maxRadius;\n\t\t\t\t} else if (centerLeft > canvasWidth - maxRadius) {\n\t\t\t\t\tcenterLeft = canvasWidth - maxRadius;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcenterLeft += options.series.pie.offset.left;\n\t\t\t}\n\n\t\t\tvar slices = plot.getData(),\n\t\t\t\tattempts = 0;\n\n\t\t\t// Keep shrinking the pie's radius until drawPie returns true,\n\t\t\t// indicating that all the labels fit, or we try too many times.\n\n\t\t\tdo {\n\t\t\t\tif (attempts > 0) {\n\t\t\t\t\tmaxRadius *= REDRAW_SHRINK;\n\t\t\t\t}\n\t\t\t\tattempts += 1;\n\t\t\t\tclear();\n\t\t\t\tif (options.series.pie.tilt <= 0.8) {\n\t\t\t\t\tdrawShadow();\n\t\t\t\t}\n\t\t\t} while (!drawPie() && attempts < REDRAW_ATTEMPTS);\n\n\t\t\tif (attempts >= REDRAW_ATTEMPTS) {\n\t\t\t\tclear();\n\t\t\t\ttarget.prepend(\"<div class='error'>Could not draw pie with labels contained inside canvas</div>\");\n\t\t\t}\n\n\t\t\tif (plot.setSeries && plot.insertLegend) {\n\t\t\t\tplot.setSeries(slices);\n\t\t\t\tplot.insertLegend();\n\t\t\t}\n\n\t\t\t// we're actually done at this point, just defining internal functions at this point\n\n\t\t\tfunction clear() {\n\t\t\t\tctx.clearRect(0, 0, canvasWidth, canvasHeight);\n\t\t\t\ttarget.children().filter(\".pieLabel, .pieLabelBackground\").remove();\n\t\t\t}\n\n\t\t\tfunction drawShadow() {\n\n\t\t\t\tvar shadowLeft = options.series.pie.shadow.left;\n\t\t\t\tvar shadowTop = options.series.pie.shadow.top;\n\t\t\t\tvar edge = 10;\n\t\t\t\tvar alpha = options.series.pie.shadow.alpha;\n\t\t\t\tvar radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;\n\n\t\t\t\tif (radius >= canvasWidth / 2 - shadowLeft || radius * options.series.pie.tilt >= canvasHeight / 2 - shadowTop || radius <= edge) {\n\t\t\t\t\treturn;\t// shadow would be outside canvas, so don't draw it\n\t\t\t\t}\n\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(shadowLeft,shadowTop);\n\t\t\t\tctx.globalAlpha = alpha;\n\t\t\t\tctx.fillStyle = \"#000\";\n\n\t\t\t\t// center and rotate to starting position\n\n\t\t\t\tctx.translate(centerLeft,centerTop);\n\t\t\t\tctx.scale(1, options.series.pie.tilt);\n\n\t\t\t\t//radius -= edge;\n\n\t\t\t\tfor (var i = 1; i <= edge; i++) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.arc(0, 0, radius, 0, Math.PI * 2, false);\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tradius -= i;\n\t\t\t\t}\n\n\t\t\t\tctx.restore();\n\t\t\t}\n\n\t\t\tfunction drawPie() {\n\n\t\t\t\tvar startAngle = Math.PI * options.series.pie.startAngle;\n\t\t\t\tvar radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;\n\n\t\t\t\t// center and rotate to starting position\n\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(centerLeft,centerTop);\n\t\t\t\tctx.scale(1, options.series.pie.tilt);\n\t\t\t\t//ctx.rotate(startAngle); // start at top; -- This doesn't work properly in Opera\n\n\t\t\t\t// draw slices\n\n\t\t\t\tctx.save();\n\t\t\t\tvar currentAngle = startAngle;\n\t\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\t\t\t\t\tslices[i].startAngle = currentAngle;\n\t\t\t\t\tdrawSlice(slices[i].angle, slices[i].color, true);\n\t\t\t\t}\n\t\t\t\tctx.restore();\n\n\t\t\t\t// draw slice outlines\n\n\t\t\t\tif (options.series.pie.stroke.width > 0) {\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.lineWidth = options.series.pie.stroke.width;\n\t\t\t\t\tcurrentAngle = startAngle;\n\t\t\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\t\t\t\t\t\tdrawSlice(slices[i].angle, options.series.pie.stroke.color, false);\n\t\t\t\t\t}\n\t\t\t\t\tctx.restore();\n\t\t\t\t}\n\n\t\t\t\t// draw donut hole\n\n\t\t\t\tdrawDonutHole(ctx);\n\n\t\t\t\tctx.restore();\n\n\t\t\t\t// Draw the labels, returning true if they fit within the plot\n\n\t\t\t\tif (options.series.pie.label.show) {\n\t\t\t\t\treturn drawLabels();\n\t\t\t\t} else return true;\n\n\t\t\t\tfunction drawSlice(angle, color, fill) {\n\n\t\t\t\t\tif (angle <= 0 || isNaN(angle)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (fill) {\n\t\t\t\t\t\tctx.fillStyle = color;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.strokeStyle = color;\n\t\t\t\t\t\tctx.lineJoin = \"round\";\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tif (Math.abs(angle - Math.PI * 2) > 0.000000001) {\n\t\t\t\t\t\tctx.moveTo(0, 0); // Center of the pie\n\t\t\t\t\t}\n\n\t\t\t\t\t//ctx.arc(0, 0, radius, 0, angle, false); // This doesn't work properly in Opera\n\t\t\t\t\tctx.arc(0, 0, radius,currentAngle, currentAngle + angle / 2, false);\n\t\t\t\t\tctx.arc(0, 0, radius,currentAngle + angle / 2, currentAngle + angle, false);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\t//ctx.rotate(angle); // This doesn't work properly in Opera\n\t\t\t\t\tcurrentAngle += angle;\n\n\t\t\t\t\tif (fill) {\n\t\t\t\t\t\tctx.fill();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction drawLabels() {\n\n\t\t\t\t\tvar currentAngle = startAngle;\n\t\t\t\t\tvar radius = options.series.pie.label.radius > 1 ? options.series.pie.label.radius : maxRadius * options.series.pie.label.radius;\n\n\t\t\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\t\t\t\t\t\tif (slices[i].percent >= options.series.pie.label.threshold * 100) {\n\t\t\t\t\t\t\tif (!drawLabel(slices[i], currentAngle, i)) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentAngle += slices[i].angle;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t\tfunction drawLabel(slice, startAngle, index) {\n\n\t\t\t\t\t\tif (slice.data[0][1] == 0) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// format label text\n\n\t\t\t\t\t\tvar lf = options.legend.labelFormatter, text, plf = options.series.pie.label.formatter;\n\n\t\t\t\t\t\tif (lf) {\n\t\t\t\t\t\t\ttext = lf(slice.label, slice);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttext = slice.label;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (plf) {\n\t\t\t\t\t\t\ttext = plf(text, slice);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar halfAngle = ((startAngle + slice.angle) + startAngle) / 2;\n\t\t\t\t\t\tvar x = centerLeft + Math.round(Math.cos(halfAngle) * radius);\n\t\t\t\t\t\tvar y = centerTop + Math.round(Math.sin(halfAngle) * radius) * options.series.pie.tilt;\n\n\t\t\t\t\t\tvar html = \"<span class='pieLabel' id='pieLabel\" + index + \"' style='position:absolute;top:\" + y + \"px;left:\" + x + \"px;'>\" + text + \"</span>\";\n\t\t\t\t\t\ttarget.append(html);\n\n\t\t\t\t\t\tvar label = target.children(\"#pieLabel\" + index);\n\t\t\t\t\t\tvar labelTop = (y - label.height() / 2);\n\t\t\t\t\t\tvar labelLeft = (x - label.width() / 2);\n\n\t\t\t\t\t\tlabel.css(\"top\", labelTop);\n\t\t\t\t\t\tlabel.css(\"left\", labelLeft);\n\n\t\t\t\t\t\t// check to make sure that the label is not outside the canvas\n\n\t\t\t\t\t\tif (0 - labelTop > 0 || 0 - labelLeft > 0 || canvasHeight - (labelTop + label.height()) < 0 || canvasWidth - (labelLeft + label.width()) < 0) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.series.pie.label.background.opacity != 0) {\n\n\t\t\t\t\t\t\t// put in the transparent background separately to avoid blended labels and label boxes\n\n\t\t\t\t\t\t\tvar c = options.series.pie.label.background.color;\n\n\t\t\t\t\t\t\tif (c == null) {\n\t\t\t\t\t\t\t\tc = slice.color;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar pos = \"top:\" + labelTop + \"px;left:\" + labelLeft + \"px;\";\n\t\t\t\t\t\t\t$(\"<div class='pieLabelBackground' style='position:absolute;width:\" + label.width() + \"px;height:\" + label.height() + \"px;\" + pos + \"background-color:\" + c + \";'></div>\")\n\t\t\t\t\t\t\t\t.css(\"opacity\", options.series.pie.label.background.opacity)\n\t\t\t\t\t\t\t\t.insertBefore(label);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} // end individual label function\n\t\t\t\t} // end drawLabels function\n\t\t\t} // end drawPie function\n\t\t} // end draw function\n\n\t\t// Placed here because it needs to be accessed from multiple locations\n\n\t\tfunction drawDonutHole(layer) {\n\t\t\tif (options.series.pie.innerRadius > 0) {\n\n\t\t\t\t// subtract the center\n\n\t\t\t\tlayer.save();\n\t\t\t\tvar innerRadius = options.series.pie.innerRadius > 1 ? options.series.pie.innerRadius : maxRadius * options.series.pie.innerRadius;\n\t\t\t\tlayer.globalCompositeOperation = \"destination-out\"; // this does not work with excanvas, but it will fall back to using the stroke color\n\t\t\t\tlayer.beginPath();\n\t\t\t\tlayer.fillStyle = options.series.pie.stroke.color;\n\t\t\t\tlayer.arc(0, 0, innerRadius, 0, Math.PI * 2, false);\n\t\t\t\tlayer.fill();\n\t\t\t\tlayer.closePath();\n\t\t\t\tlayer.restore();\n\n\t\t\t\t// add inner stroke\n\n\t\t\t\tlayer.save();\n\t\t\t\tlayer.beginPath();\n\t\t\t\tlayer.strokeStyle = options.series.pie.stroke.color;\n\t\t\t\tlayer.arc(0, 0, innerRadius, 0, Math.PI * 2, false);\n\t\t\t\tlayer.stroke();\n\t\t\t\tlayer.closePath();\n\t\t\t\tlayer.restore();\n\n\t\t\t\t// TODO: add extra shadow inside hole (with a mask) if the pie is tilted.\n\t\t\t}\n\t\t}\n\n\t\t//-- Additional Interactive related functions --\n\n\t\tfunction isPointInPoly(poly, pt) {\n\t\t\tfor(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)\n\t\t\t\t((poly[i][1] <= pt[1] && pt[1] < poly[j][1]) || (poly[j][1] <= pt[1] && pt[1]< poly[i][1]))\n\t\t\t\t&& (pt[0] < (poly[j][0] - poly[i][0]) * (pt[1] - poly[i][1]) / (poly[j][1] - poly[i][1]) + poly[i][0])\n\t\t\t\t&& (c = !c);\n\t\t\treturn c;\n\t\t}\n\n\t\tfunction findNearbySlice(mouseX, mouseY) {\n\n\t\t\tvar slices = plot.getData(),\n\t\t\t\toptions = plot.getOptions(),\n\t\t\t\tradius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius,\n\t\t\t\tx, y;\n\n\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\n\t\t\t\tvar s = slices[i];\n\n\t\t\t\tif (s.pie.show) {\n\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(0, 0); // Center of the pie\n\t\t\t\t\t//ctx.scale(1, options.series.pie.tilt);\t// this actually seems to break everything when here.\n\t\t\t\t\tctx.arc(0, 0, radius, s.startAngle, s.startAngle + s.angle / 2, false);\n\t\t\t\t\tctx.arc(0, 0, radius, s.startAngle + s.angle / 2, s.startAngle + s.angle, false);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tx = mouseX - centerLeft;\n\t\t\t\t\ty = mouseY - centerTop;\n\n\t\t\t\t\tif (ctx.isPointInPath) {\n\t\t\t\t\t\tif (ctx.isPointInPath(mouseX - centerLeft, mouseY - centerTop)) {\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdatapoint: [s.percent, s.data],\n\t\t\t\t\t\t\t\tdataIndex: 0,\n\t\t\t\t\t\t\t\tseries: s,\n\t\t\t\t\t\t\t\tseriesIndex: i\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// excanvas for IE doesn;t support isPointInPath, this is a workaround.\n\n\t\t\t\t\t\tvar p1X = radius * Math.cos(s.startAngle),\n\t\t\t\t\t\t\tp1Y = radius * Math.sin(s.startAngle),\n\t\t\t\t\t\t\tp2X = radius * Math.cos(s.startAngle + s.angle / 4),\n\t\t\t\t\t\t\tp2Y = radius * Math.sin(s.startAngle + s.angle / 4),\n\t\t\t\t\t\t\tp3X = radius * Math.cos(s.startAngle + s.angle / 2),\n\t\t\t\t\t\t\tp3Y = radius * Math.sin(s.startAngle + s.angle / 2),\n\t\t\t\t\t\t\tp4X = radius * Math.cos(s.startAngle + s.angle / 1.5),\n\t\t\t\t\t\t\tp4Y = radius * Math.sin(s.startAngle + s.angle / 1.5),\n\t\t\t\t\t\t\tp5X = radius * Math.cos(s.startAngle + s.angle),\n\t\t\t\t\t\t\tp5Y = radius * Math.sin(s.startAngle + s.angle),\n\t\t\t\t\t\t\tarrPoly = [[0, 0], [p1X, p1Y], [p2X, p2Y], [p3X, p3Y], [p4X, p4Y], [p5X, p5Y]],\n\t\t\t\t\t\t\tarrPoint = [x, y];\n\n\t\t\t\t\t\t// TODO: perhaps do some mathmatical trickery here with the Y-coordinate to compensate for pie tilt?\n\n\t\t\t\t\t\tif (isPointInPoly(arrPoly, arrPoint)) {\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdatapoint: [s.percent, s.data],\n\t\t\t\t\t\t\t\tdataIndex: 0,\n\t\t\t\t\t\t\t\tseries: s,\n\t\t\t\t\t\t\t\tseriesIndex: i\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.restore();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction onMouseMove(e) {\n\t\t\ttriggerClickHoverEvent(\"plothover\", e);\n\t\t}\n\n\t\tfunction onClick(e) {\n\t\t\ttriggerClickHoverEvent(\"plotclick\", e);\n\t\t}\n\n\t\t// trigger click or hover event (they send the same parameters so we share their code)\n\n\t\tfunction triggerClickHoverEvent(eventname, e) {\n\n\t\t\tvar offset = plot.offset();\n\t\t\tvar canvasX = parseInt(e.pageX - offset.left);\n\t\t\tvar canvasY =  parseInt(e.pageY - offset.top);\n\t\t\tvar item = findNearbySlice(canvasX, canvasY);\n\n\t\t\tif (options.grid.autoHighlight) {\n\n\t\t\t\t// clear auto-highlights\n\n\t\t\t\tfor (var i = 0; i < highlights.length; ++i) {\n\t\t\t\t\tvar h = highlights[i];\n\t\t\t\t\tif (h.auto == eventname && !(item && h.series == item.series)) {\n\t\t\t\t\t\tunhighlight(h.series);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// highlight the slice\n\n\t\t\tif (item) {\n\t\t\t\thighlight(item.series, eventname);\n\t\t\t}\n\n\t\t\t// trigger any hover bind events\n\n\t\t\tvar pos = { pageX: e.pageX, pageY: e.pageY };\n\t\t\ttarget.trigger(eventname, [pos, item]);\n\t\t}\n\n\t\tfunction highlight(s, auto) {\n\t\t\t//if (typeof s == \"number\") {\n\t\t\t//\ts = series[s];\n\t\t\t//}\n\n\t\t\tvar i = indexOfHighlight(s);\n\n\t\t\tif (i == -1) {\n\t\t\t\thighlights.push({ series: s, auto: auto });\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t} else if (!auto) {\n\t\t\t\thighlights[i].auto = false;\n\t\t\t}\n\t\t}\n\n\t\tfunction unhighlight(s) {\n\t\t\tif (s == null) {\n\t\t\t\thighlights = [];\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t}\n\n\t\t\t//if (typeof s == \"number\") {\n\t\t\t//\ts = series[s];\n\t\t\t//}\n\n\t\t\tvar i = indexOfHighlight(s);\n\n\t\t\tif (i != -1) {\n\t\t\t\thighlights.splice(i, 1);\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t}\n\t\t}\n\n\t\tfunction indexOfHighlight(s) {\n\t\t\tfor (var i = 0; i < highlights.length; ++i) {\n\t\t\t\tvar h = highlights[i];\n\t\t\t\tif (h.series == s)\n\t\t\t\t\treturn i;\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\n\t\tfunction drawOverlay(plot, octx) {\n\n\t\t\tvar options = plot.getOptions();\n\n\t\t\tvar radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;\n\n\t\t\toctx.save();\n\t\t\toctx.translate(centerLeft, centerTop);\n\t\t\toctx.scale(1, options.series.pie.tilt);\n\n\t\t\tfor (var i = 0; i < highlights.length; ++i) {\n\t\t\t\tdrawHighlight(highlights[i].series);\n\t\t\t}\n\n\t\t\tdrawDonutHole(octx);\n\n\t\t\toctx.restore();\n\n\t\t\tfunction drawHighlight(series) {\n\n\t\t\t\tif (series.angle <= 0 || isNaN(series.angle)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//octx.fillStyle = parseColor(options.series.pie.highlight.color).scale(null, null, null, options.series.pie.highlight.opacity).toString();\n\t\t\t\toctx.fillStyle = \"rgba(255, 255, 255, \" + options.series.pie.highlight.opacity + \")\"; // this is temporary until we have access to parseColor\n\t\t\t\toctx.beginPath();\n\t\t\t\tif (Math.abs(series.angle - Math.PI * 2) > 0.000000001) {\n\t\t\t\t\toctx.moveTo(0, 0); // Center of the pie\n\t\t\t\t}\n\t\t\t\toctx.arc(0, 0, radius, series.startAngle, series.startAngle + series.angle / 2, false);\n\t\t\t\toctx.arc(0, 0, radius, series.startAngle + series.angle / 2, series.startAngle + series.angle, false);\n\t\t\t\toctx.closePath();\n\t\t\t\toctx.fill();\n\t\t\t}\n\t\t}\n\t} // end init (plugin body)\n\n\t// define pie specific options and their default values\n\n\tvar options = {\n\t\tseries: {\n\t\t\tpie: {\n\t\t\t\tshow: false,\n\t\t\t\tradius: \"auto\",\t// actual radius of the visible pie (based on full calculated radius if <=1, or hard pixel value)\n\t\t\t\tinnerRadius: 0, /* for donut */\n\t\t\t\tstartAngle: 3/2,\n\t\t\t\ttilt: 1,\n\t\t\t\tshadow: {\n\t\t\t\t\tleft: 5,\t// shadow left offset\n\t\t\t\t\ttop: 15,\t// shadow top offset\n\t\t\t\t\talpha: 0.02\t// shadow alpha\n\t\t\t\t},\n\t\t\t\toffset: {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: \"auto\"\n\t\t\t\t},\n\t\t\t\tstroke: {\n\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\twidth: 1\n\t\t\t\t},\n\t\t\t\tlabel: {\n\t\t\t\t\tshow: \"auto\",\n\t\t\t\t\tformatter: function(label, slice) {\n\t\t\t\t\t\treturn \"<div style='font-size:x-small;text-align:center;padding:2px;color:\" + slice.color + \";'>\" + label + \"<br/>\" + Math.round(slice.percent) + \"%</div>\";\n\t\t\t\t\t},\t// formatter function\n\t\t\t\t\tradius: 1,\t// radius at which to place the labels (based on full calculated radius if <=1, or hard pixel value)\n\t\t\t\t\tbackground: {\n\t\t\t\t\t\tcolor: null,\n\t\t\t\t\t\topacity: 0\n\t\t\t\t\t},\n\t\t\t\t\tthreshold: 0\t// percentage at which to hide the label (i.e. the slice is too narrow)\n\t\t\t\t},\n\t\t\t\tcombine: {\n\t\t\t\t\tthreshold: -1,\t// percentage at which to combine little slices into one larger slice\n\t\t\t\t\tcolor: null,\t// color to give the new slice (auto-generated if null)\n\t\t\t\t\tlabel: \"Other\"\t// label to give the new slice\n\t\t\t\t},\n\t\t\t\thighlight: {\n\t\t\t\t\t//color: \"#fff\",\t\t// will add this functionality once parseColor is available\n\t\t\t\t\topacity: 0.5\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: \"pie\",\n\t\tversion: \"1.1\"\n\t});\n\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.resize.js",
    "content": "/* Flot plugin for automatically redrawing plots as the placeholder resizes.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nIt works by listening for changes on the placeholder div (through the jQuery\nresize event plugin) - if the size changes, it will redraw the plot.\n\nThere are no options. If you need to disable the plugin for some plots, you\ncan just fix the size of their placeholders.\n\n*/\n\n/* Inline dependency:\n * jQuery resize event - v1.1 - 3/14/2010\n * http://benalman.com/projects/jquery-resize-plugin/\n *\n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n\n(function($,t,n){function p(){for(var n=r.length-1;n>=0;n--){var o=$(r[n]);if(o[0]==t||o.is(\":visible\")){var h=o.width(),d=o.height(),v=o.data(a);!v||h===v.w&&d===v.h?i[f]=i[l]:(i[f]=i[c],o.trigger(u,[v.w=h,v.h=d]))}else v=o.data(a),v.w=0,v.h=0}s!==null&&(s=t.requestAnimationFrame(p))}var r=[],i=$.resize=$.extend($.resize,{}),s,o=\"setTimeout\",u=\"resize\",a=u+\"-special-event\",f=\"delay\",l=\"pendingDelay\",c=\"activeDelay\",h=\"throttleWindow\";i[l]=250,i[c]=20,i[f]=i[l],i[h]=!0,$.event.special[u]={setup:function(){if(!i[h]&&this[o])return!1;var t=$(this);r.push(this),t.data(a,{w:t.width(),h:t.height()}),r.length===1&&(s=n,p())},teardown:function(){if(!i[h]&&this[o])return!1;var t=$(this);for(var n=r.length-1;n>=0;n--)if(r[n]==this){r.splice(n,1);break}t.removeData(a),r.length||(cancelAnimationFrame(s),s=null)},add:function(t){function s(t,i,s){var o=$(this),u=o.data(a);u.w=i!==n?i:o.width(),u.h=s!==n?s:o.height(),r.apply(this,arguments)}if(!i[h]&&this[o])return!1;var r;if($.isFunction(t))return r=t,s;r=t.handler,t.handler=s}},t.requestAnimationFrame||(t.requestAnimationFrame=function(){return t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||t.msRequestAnimationFrame||function(e,n){return t.setTimeout(e,i[f])}}()),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(){return t.webkitCancelRequestAnimationFrame||t.mozCancelRequestAnimationFrame||t.oCancelRequestAnimationFrame||t.msCancelRequestAnimationFrame||clearTimeout}())})(jQuery,this);\n\n(function ($) {\n    var options = { }; // no options\n\n    function init(plot) {\n        function onResize() {\n            var placeholder = plot.getPlaceholder();\n\n            // somebody might have hidden us and we can't plot\n            // when we don't have the dimensions\n            if (placeholder.width() == 0 || placeholder.height() == 0)\n                return;\n\n            plot.resize();\n            plot.setupGrid();\n            plot.draw();\n        }\n        \n        function bindEvents(plot, eventHolder) {\n            plot.getPlaceholder().resize(onResize);\n        }\n\n        function shutdown(plot, eventHolder) {\n            plot.getPlaceholder().unbind(\"resize\", onResize);\n        }\n        \n        plot.hooks.bindEvents.push(bindEvents);\n        plot.hooks.shutdown.push(shutdown);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'resize',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.selection.js",
    "content": "/* Flot plugin for selecting regions of a plot.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin supports these options:\n\nselection: {\n\tmode: null or \"x\" or \"y\" or \"xy\",\n\tcolor: color,\n\tshape: \"round\" or \"miter\" or \"bevel\",\n\tminSize: number of pixels\n}\n\nSelection support is enabled by setting the mode to one of \"x\", \"y\" or \"xy\".\nIn \"x\" mode, the user will only be able to specify the x range, similarly for\n\"y\" mode. For \"xy\", the selection becomes a rectangle where both ranges can be\nspecified. \"color\" is color of the selection (if you need to change the color\nlater on, you can get to it with plot.getOptions().selection.color). \"shape\"\nis the shape of the corners of the selection.\n\n\"minSize\" is the minimum size a selection can be in pixels. This value can\nbe customized to determine the smallest size a selection can be and still\nhave the selection rectangle be displayed. When customizing this value, the\nfact that it refers to pixels, not axis units must be taken into account.\nThus, for example, if there is a bar graph in time mode with BarWidth set to 1\nminute, setting \"minSize\" to 1 will not make the minimum selection size 1\nminute, but rather 1 pixel. Note also that setting \"minSize\" to 0 will prevent\n\"plotunselected\" events from being fired when the user clicks the mouse without\ndragging.\n\nWhen selection support is enabled, a \"plotselected\" event will be emitted on\nthe DOM element you passed into the plot function. The event handler gets a\nparameter with the ranges selected on the axes, like this:\n\n\tplaceholder.bind( \"plotselected\", function( event, ranges ) {\n\t\talert(\"You selected \" + ranges.xaxis.from + \" to \" + ranges.xaxis.to)\n\t\t// similar for yaxis - with multiple axes, the extra ones are in\n\t\t// x2axis, x3axis, ...\n\t});\n\nThe \"plotselected\" event is only fired when the user has finished making the\nselection. A \"plotselecting\" event is fired during the process with the same\nparameters as the \"plotselected\" event, in case you want to know what's\nhappening while it's happening,\n\nA \"plotunselected\" event with no arguments is emitted when the user clicks the\nmouse to remove the selection. As stated above, setting \"minSize\" to 0 will\ndestroy this behavior.\n\nThe plugin allso adds the following methods to the plot object:\n\n- setSelection( ranges, preventEvent )\n\n  Set the selection rectangle. The passed in ranges is on the same form as\n  returned in the \"plotselected\" event. If the selection mode is \"x\", you\n  should put in either an xaxis range, if the mode is \"y\" you need to put in\n  an yaxis range and both xaxis and yaxis if the selection mode is \"xy\", like\n  this:\n\n\tsetSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } });\n\n  setSelection will trigger the \"plotselected\" event when called. If you don't\n  want that to happen, e.g. if you're inside a \"plotselected\" handler, pass\n  true as the second parameter. If you are using multiple axes, you can\n  specify the ranges on any of those, e.g. as x2axis/x3axis/... instead of\n  xaxis, the plugin picks the first one it sees.\n\n- clearSelection( preventEvent )\n\n  Clear the selection rectangle. Pass in true to avoid getting a\n  \"plotunselected\" event.\n\n- getSelection()\n\n  Returns the current selection in the same format as the \"plotselected\"\n  event. If there's currently no selection, the function returns null.\n\n*/\n\n(function ($) {\n    function init(plot) {\n        var selection = {\n                first: { x: -1, y: -1}, second: { x: -1, y: -1},\n                show: false,\n                active: false\n            };\n\n        // FIXME: The drag handling implemented here should be\n        // abstracted out, there's some similar code from a library in\n        // the navigation plugin, this should be massaged a bit to fit\n        // the Flot cases here better and reused. Doing this would\n        // make this plugin much slimmer.\n        var savedhandlers = {};\n\n        var mouseUpHandler = null;\n        \n        function onMouseMove(e) {\n            if (selection.active) {\n                updateSelection(e);\n                \n                plot.getPlaceholder().trigger(\"plotselecting\", [ getSelection() ]);\n            }\n        }\n\n        function onMouseDown(e) {\n            if (e.which != 1)  // only accept left-click\n                return;\n            \n            // cancel out any text selections\n            document.body.focus();\n\n            // prevent text selection and drag in old-school browsers\n            if (document.onselectstart !== undefined && savedhandlers.onselectstart == null) {\n                savedhandlers.onselectstart = document.onselectstart;\n                document.onselectstart = function () { return false; };\n            }\n            if (document.ondrag !== undefined && savedhandlers.ondrag == null) {\n                savedhandlers.ondrag = document.ondrag;\n                document.ondrag = function () { return false; };\n            }\n\n            setSelectionPos(selection.first, e);\n\n            selection.active = true;\n\n            // this is a bit silly, but we have to use a closure to be\n            // able to whack the same handler again\n            mouseUpHandler = function (e) { onMouseUp(e); };\n            \n            $(document).one(\"mouseup\", mouseUpHandler);\n        }\n\n        function onMouseUp(e) {\n            mouseUpHandler = null;\n            \n            // revert drag stuff for old-school browsers\n            if (document.onselectstart !== undefined)\n                document.onselectstart = savedhandlers.onselectstart;\n            if (document.ondrag !== undefined)\n                document.ondrag = savedhandlers.ondrag;\n\n            // no more dragging\n            selection.active = false;\n            updateSelection(e);\n\n            if (selectionIsSane())\n                triggerSelectedEvent();\n            else {\n                // this counts as a clear\n                plot.getPlaceholder().trigger(\"plotunselected\", [ ]);\n                plot.getPlaceholder().trigger(\"plotselecting\", [ null ]);\n            }\n\n            return false;\n        }\n\n        function getSelection() {\n            if (!selectionIsSane())\n                return null;\n            \n            if (!selection.show) return null;\n\n            var r = {}, c1 = selection.first, c2 = selection.second;\n            $.each(plot.getAxes(), function (name, axis) {\n                if (axis.used) {\n                    var p1 = axis.c2p(c1[axis.direction]), p2 = axis.c2p(c2[axis.direction]); \n                    r[name] = { from: Math.min(p1, p2), to: Math.max(p1, p2) };\n                }\n            });\n            return r;\n        }\n\n        function triggerSelectedEvent() {\n            var r = getSelection();\n\n            plot.getPlaceholder().trigger(\"plotselected\", [ r ]);\n\n            // backwards-compat stuff, to be removed in future\n            if (r.xaxis && r.yaxis)\n                plot.getPlaceholder().trigger(\"selected\", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]);\n        }\n\n        function clamp(min, value, max) {\n            return value < min ? min: (value > max ? max: value);\n        }\n\n        function setSelectionPos(pos, e) {\n            var o = plot.getOptions();\n            var offset = plot.getPlaceholder().offset();\n            var plotOffset = plot.getPlotOffset();\n            pos.x = clamp(0, e.pageX - offset.left - plotOffset.left, plot.width());\n            pos.y = clamp(0, e.pageY - offset.top - plotOffset.top, plot.height());\n\n            if (o.selection.mode == \"y\")\n                pos.x = pos == selection.first ? 0 : plot.width();\n\n            if (o.selection.mode == \"x\")\n                pos.y = pos == selection.first ? 0 : plot.height();\n        }\n\n        function updateSelection(pos) {\n            if (pos.pageX == null)\n                return;\n\n            setSelectionPos(selection.second, pos);\n            if (selectionIsSane()) {\n                selection.show = true;\n                plot.triggerRedrawOverlay();\n            }\n            else\n                clearSelection(true);\n        }\n\n        function clearSelection(preventEvent) {\n            if (selection.show) {\n                selection.show = false;\n                plot.triggerRedrawOverlay();\n                if (!preventEvent)\n                    plot.getPlaceholder().trigger(\"plotunselected\", [ ]);\n            }\n        }\n\n        // function taken from markings support in Flot\n        function extractRange(ranges, coord) {\n            var axis, from, to, key, axes = plot.getAxes();\n\n            for (var k in axes) {\n                axis = axes[k];\n                if (axis.direction == coord) {\n                    key = coord + axis.n + \"axis\";\n                    if (!ranges[key] && axis.n == 1)\n                        key = coord + \"axis\"; // support x1axis as xaxis\n                    if (ranges[key]) {\n                        from = ranges[key].from;\n                        to = ranges[key].to;\n                        break;\n                    }\n                }\n            }\n\n            // backwards-compat stuff - to be removed in future\n            if (!ranges[key]) {\n                axis = coord == \"x\" ? plot.getXAxes()[0] : plot.getYAxes()[0];\n                from = ranges[coord + \"1\"];\n                to = ranges[coord + \"2\"];\n            }\n\n            // auto-reverse as an added bonus\n            if (from != null && to != null && from > to) {\n                var tmp = from;\n                from = to;\n                to = tmp;\n            }\n            \n            return { from: from, to: to, axis: axis };\n        }\n        \n        function setSelection(ranges, preventEvent) {\n            var axis, range, o = plot.getOptions();\n\n            if (o.selection.mode == \"y\") {\n                selection.first.x = 0;\n                selection.second.x = plot.width();\n            }\n            else {\n                range = extractRange(ranges, \"x\");\n\n                selection.first.x = range.axis.p2c(range.from);\n                selection.second.x = range.axis.p2c(range.to);\n            }\n\n            if (o.selection.mode == \"x\") {\n                selection.first.y = 0;\n                selection.second.y = plot.height();\n            }\n            else {\n                range = extractRange(ranges, \"y\");\n\n                selection.first.y = range.axis.p2c(range.from);\n                selection.second.y = range.axis.p2c(range.to);\n            }\n\n            selection.show = true;\n            plot.triggerRedrawOverlay();\n            if (!preventEvent && selectionIsSane())\n                triggerSelectedEvent();\n        }\n\n        function selectionIsSane() {\n            var minSize = plot.getOptions().selection.minSize;\n            return Math.abs(selection.second.x - selection.first.x) >= minSize &&\n                Math.abs(selection.second.y - selection.first.y) >= minSize;\n        }\n\n        plot.clearSelection = clearSelection;\n        plot.setSelection = setSelection;\n        plot.getSelection = getSelection;\n\n        plot.hooks.bindEvents.push(function(plot, eventHolder) {\n            var o = plot.getOptions();\n            if (o.selection.mode != null) {\n                eventHolder.mousemove(onMouseMove);\n                eventHolder.mousedown(onMouseDown);\n            }\n        });\n\n\n        plot.hooks.drawOverlay.push(function (plot, ctx) {\n            // draw selection\n            if (selection.show && selectionIsSane()) {\n                var plotOffset = plot.getPlotOffset();\n                var o = plot.getOptions();\n\n                ctx.save();\n                ctx.translate(plotOffset.left, plotOffset.top);\n\n                var c = $.color.parse(o.selection.color);\n\n                ctx.strokeStyle = c.scale('a', 0.8).toString();\n                ctx.lineWidth = 1;\n                ctx.lineJoin = o.selection.shape;\n                ctx.fillStyle = c.scale('a', 0.4).toString();\n\n                var x = Math.min(selection.first.x, selection.second.x) + 0.5,\n                    y = Math.min(selection.first.y, selection.second.y) + 0.5,\n                    w = Math.abs(selection.second.x - selection.first.x) - 1,\n                    h = Math.abs(selection.second.y - selection.first.y) - 1;\n\n                ctx.fillRect(x, y, w, h);\n                ctx.strokeRect(x, y, w, h);\n\n                ctx.restore();\n            }\n        });\n        \n        plot.hooks.shutdown.push(function (plot, eventHolder) {\n            eventHolder.unbind(\"mousemove\", onMouseMove);\n            eventHolder.unbind(\"mousedown\", onMouseDown);\n            \n            if (mouseUpHandler)\n                $(document).unbind(\"mouseup\", mouseUpHandler);\n        });\n\n    }\n\n    $.plot.plugins.push({\n        init: init,\n        options: {\n            selection: {\n                mode: null, // one of null, \"x\", \"y\" or \"xy\"\n                color: \"#e8cfac\",\n                shape: \"round\", // one of \"round\", \"miter\", or \"bevel\"\n                minSize: 5 // minimum number of pixels\n            }\n        },\n        name: 'selection',\n        version: '1.1'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.stack.js",
    "content": "/* Flot plugin for stacking data sets rather than overlyaing them.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin assumes the data is sorted on x (or y if stacking horizontally).\nFor line charts, it is assumed that if a line has an undefined gap (from a\nnull point), then the line above it should have the same gap - insert zeros\ninstead of \"null\" if you want another behaviour. This also holds for the start\nand end of the chart. Note that stacking a mix of positive and negative values\nin most instances doesn't make sense (so it looks weird).\n\nTwo or more series are stacked when their \"stack\" attribute is set to the same\nkey (which can be any number or string or just \"true\"). To specify the default\nstack, you can set the stack option like this:\n\n\tseries: {\n\t\tstack: null/false, true, or a key (number/string)\n\t}\n\nYou can also specify it for a single series, like this:\n\n\t$.plot( $(\"#placeholder\"), [{\n\t\tdata: [ ... ],\n\t\tstack: true\n\t}])\n\nThe stacking order is determined by the order of the data series in the array\n(later series end up on top of the previous).\n\nInternally, the plugin modifies the datapoints in each series, adding an\noffset to the y value. For line series, extra data points are inserted through\ninterpolation. If there's a second y value, it's also adjusted (e.g for bar\ncharts or filled areas).\n\n*/\n\n(function ($) {\n    var options = {\n        series: { stack: null } // or number/string\n    };\n    \n    function init(plot) {\n        function findMatchingSeries(s, allseries) {\n            var res = null;\n            for (var i = 0; i < allseries.length; ++i) {\n                if (s == allseries[i])\n                    break;\n                \n                if (allseries[i].stack == s.stack)\n                    res = allseries[i];\n            }\n            \n            return res;\n        }\n        \n        function stackData(plot, s, datapoints) {\n            if (s.stack == null || s.stack === false)\n                return;\n\n            var other = findMatchingSeries(s, plot.getData());\n            if (!other)\n                return;\n\n            var ps = datapoints.pointsize,\n                points = datapoints.points,\n                otherps = other.datapoints.pointsize,\n                otherpoints = other.datapoints.points,\n                newpoints = [],\n                px, py, intery, qx, qy, bottom,\n                withlines = s.lines.show,\n                horizontal = s.bars.horizontal,\n                withbottom = ps > 2 && (horizontal ? datapoints.format[2].x : datapoints.format[2].y),\n                withsteps = withlines && s.lines.steps,\n                fromgap = true,\n                keyOffset = horizontal ? 1 : 0,\n                accumulateOffset = horizontal ? 0 : 1,\n                i = 0, j = 0, l, m;\n\n            while (true) {\n                if (i >= points.length)\n                    break;\n\n                l = newpoints.length;\n\n                if (points[i] == null) {\n                    // copy gaps\n                    for (m = 0; m < ps; ++m)\n                        newpoints.push(points[i + m]);\n                    i += ps;\n                }\n                else if (j >= otherpoints.length) {\n                    // for lines, we can't use the rest of the points\n                    if (!withlines) {\n                        for (m = 0; m < ps; ++m)\n                            newpoints.push(points[i + m]);\n                    }\n                    i += ps;\n                }\n                else if (otherpoints[j] == null) {\n                    // oops, got a gap\n                    for (m = 0; m < ps; ++m)\n                        newpoints.push(null);\n                    fromgap = true;\n                    j += otherps;\n                }\n                else {\n                    // cases where we actually got two points\n                    px = points[i + keyOffset];\n                    py = points[i + accumulateOffset];\n                    qx = otherpoints[j + keyOffset];\n                    qy = otherpoints[j + accumulateOffset];\n                    bottom = 0;\n\n                    if (px == qx) {\n                        for (m = 0; m < ps; ++m)\n                            newpoints.push(points[i + m]);\n\n                        newpoints[l + accumulateOffset] += qy;\n                        bottom = qy;\n                        \n                        i += ps;\n                        j += otherps;\n                    }\n                    else if (px > qx) {\n                        // we got past point below, might need to\n                        // insert interpolated extra point\n                        if (withlines && i > 0 && points[i - ps] != null) {\n                            intery = py + (points[i - ps + accumulateOffset] - py) * (qx - px) / (points[i - ps + keyOffset] - px);\n                            newpoints.push(qx);\n                            newpoints.push(intery + qy);\n                            for (m = 2; m < ps; ++m)\n                                newpoints.push(points[i + m]);\n                            bottom = qy; \n                        }\n\n                        j += otherps;\n                    }\n                    else { // px < qx\n                        if (fromgap && withlines) {\n                            // if we come from a gap, we just skip this point\n                            i += ps;\n                            continue;\n                        }\n                            \n                        for (m = 0; m < ps; ++m)\n                            newpoints.push(points[i + m]);\n                        \n                        // we might be able to interpolate a point below,\n                        // this can give us a better y\n                        if (withlines && j > 0 && otherpoints[j - otherps] != null)\n                            bottom = qy + (otherpoints[j - otherps + accumulateOffset] - qy) * (px - qx) / (otherpoints[j - otherps + keyOffset] - qx);\n\n                        newpoints[l + accumulateOffset] += bottom;\n                        \n                        i += ps;\n                    }\n\n                    fromgap = false;\n                    \n                    if (l != newpoints.length && withbottom)\n                        newpoints[l + 2] += bottom;\n                }\n\n                // maintain the line steps invariant\n                if (withsteps && l != newpoints.length && l > 0\n                    && newpoints[l] != null\n                    && newpoints[l] != newpoints[l - ps]\n                    && newpoints[l + 1] != newpoints[l - ps + 1]) {\n                    for (m = 0; m < ps; ++m)\n                        newpoints[l + ps + m] = newpoints[l + m];\n                    newpoints[l + 1] = newpoints[l - ps + 1];\n                }\n            }\n\n            datapoints.points = newpoints;\n        }\n        \n        plot.hooks.processDatapoints.push(stackData);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'stack',\n        version: '1.2'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.symbol.js",
    "content": "/* Flot plugin that adds some extra symbols for plotting points.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe symbols are accessed as strings through the standard symbol options:\n\n\tseries: {\n\t\tpoints: {\n\t\t\tsymbol: \"square\" // or \"diamond\", \"triangle\", \"cross\"\n\t\t}\n\t}\n\n*/\n\n(function ($) {\n    function processRawData(plot, series, datapoints) {\n        // we normalize the area of each symbol so it is approximately the\n        // same as a circle of the given radius\n\n        var handlers = {\n            square: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = (2s)^2  =>  s = r * sqrt(pi)/2\n                var size = radius * Math.sqrt(Math.PI) / 2;\n                ctx.rect(x - size, y - size, size + size, size + size);\n            },\n            diamond: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = 2s^2  =>  s = r * sqrt(pi/2)\n                var size = radius * Math.sqrt(Math.PI / 2);\n                ctx.moveTo(x - size, y);\n                ctx.lineTo(x, y - size);\n                ctx.lineTo(x + size, y);\n                ctx.lineTo(x, y + size);\n                ctx.lineTo(x - size, y);\n            },\n            triangle: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = 1/2 * s^2 * sin (pi / 3)  =>  s = r * sqrt(2 * pi / sin(pi / 3))\n                var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3));\n                var height = size * Math.sin(Math.PI / 3);\n                ctx.moveTo(x - size/2, y + height/2);\n                ctx.lineTo(x + size/2, y + height/2);\n                if (!shadow) {\n                    ctx.lineTo(x, y - height/2);\n                    ctx.lineTo(x - size/2, y + height/2);\n                }\n            },\n            cross: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = (2s)^2  =>  s = r * sqrt(pi)/2\n                var size = radius * Math.sqrt(Math.PI) / 2;\n                ctx.moveTo(x - size, y - size);\n                ctx.lineTo(x + size, y + size);\n                ctx.moveTo(x - size, y + size);\n                ctx.lineTo(x + size, y - size);\n            }\n        };\n\n        var s = series.points.symbol;\n        if (handlers[s])\n            series.points.symbol = handlers[s];\n    }\n    \n    function init(plot) {\n        plot.hooks.processDatapoints.push(processRawData);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        name: 'symbols',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.threshold.js",
    "content": "/* Flot plugin for thresholding data.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin supports these options:\n\n\tseries: {\n\t\tthreshold: {\n\t\t\tbelow: number\n\t\t\tcolor: colorspec\n\t\t}\n\t}\n\nIt can also be applied to a single series, like this:\n\n\t$.plot( $(\"#placeholder\"), [{\n\t\tdata: [ ... ],\n\t\tthreshold: { ... }\n\t}])\n\nAn array can be passed for multiple thresholding, like this:\n\n\tthreshold: [{\n\t\tbelow: number1\n\t\tcolor: color1\n\t},{\n\t\tbelow: number2\n\t\tcolor: color2\n\t}]\n\nThese multiple threshold objects can be passed in any order since they are\nsorted by the processing function.\n\nThe data points below \"below\" are drawn with the specified color. This makes\nit easy to mark points below 0, e.g. for budget data.\n\nInternally, the plugin works by splitting the data into two series, above and\nbelow the threshold. The extra series below the threshold will have its label\ncleared and the special \"originSeries\" attribute set to the original series.\nYou may need to check for this in hover events.\n\n*/\n\n(function ($) {\n    var options = {\n        series: { threshold: null } // or { below: number, color: color spec}\n    };\n    \n    function init(plot) {\n        function thresholdData(plot, s, datapoints, below, color) {\n            var ps = datapoints.pointsize, i, x, y, p, prevp,\n                thresholded = $.extend({}, s); // note: shallow copy\n\n            thresholded.datapoints = { points: [], pointsize: ps, format: datapoints.format };\n            thresholded.label = null;\n            thresholded.color = color;\n            thresholded.threshold = null;\n            thresholded.originSeries = s;\n            thresholded.data = [];\n \n            var origpoints = datapoints.points,\n                addCrossingPoints = s.lines.show;\n\n            var threspoints = [];\n            var newpoints = [];\n            var m;\n\n            for (i = 0; i < origpoints.length; i += ps) {\n                x = origpoints[i];\n                y = origpoints[i + 1];\n\n                prevp = p;\n                if (y < below)\n                    p = threspoints;\n                else\n                    p = newpoints;\n\n                if (addCrossingPoints && prevp != p && x != null\n                    && i > 0 && origpoints[i - ps] != null) {\n                    var interx = x + (below - y) * (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]);\n                    prevp.push(interx);\n                    prevp.push(below);\n                    for (m = 2; m < ps; ++m)\n                        prevp.push(origpoints[i + m]);\n                    \n                    p.push(null); // start new segment\n                    p.push(null);\n                    for (m = 2; m < ps; ++m)\n                        p.push(origpoints[i + m]);\n                    p.push(interx);\n                    p.push(below);\n                    for (m = 2; m < ps; ++m)\n                        p.push(origpoints[i + m]);\n                }\n\n                p.push(x);\n                p.push(y);\n                for (m = 2; m < ps; ++m)\n                    p.push(origpoints[i + m]);\n            }\n\n            datapoints.points = newpoints;\n            thresholded.datapoints.points = threspoints;\n            \n            if (thresholded.datapoints.points.length > 0) {\n                var origIndex = $.inArray(s, plot.getData());\n                // Insert newly-generated series right after original one (to prevent it from becoming top-most)\n                plot.getData().splice(origIndex + 1, 0, thresholded);\n            }\n                \n            // FIXME: there are probably some edge cases left in bars\n        }\n        \n        function processThresholds(plot, s, datapoints) {\n            if (!s.threshold)\n                return;\n            \n            if (s.threshold instanceof Array) {\n                s.threshold.sort(function(a, b) {\n                    return a.below - b.below;\n                });\n                \n                $(s.threshold).each(function(i, th) {\n                    thresholdData(plot, s, datapoints, th.below, th.color);\n                });\n            }\n            else {\n                thresholdData(plot, s, datapoints, s.threshold.below, s.threshold.color);\n            }\n        }\n        \n        plot.hooks.processDatapoints.push(processThresholds);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'threshold',\n        version: '1.2'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/flot/jquery.flot.time.js",
    "content": "/* Pretty handling of time axes.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nSet axis.mode to \"time\" to enable. See the section \"Time series data\" in\nAPI.txt for details.\n\n*/\n\n(function($) {\n\n\tvar options = {\n\t\txaxis: {\n\t\t\ttimezone: null,\t\t// \"browser\" for local to the client or timezone for timezone-js\n\t\t\ttimeformat: null,\t// format string to use\n\t\t\ttwelveHourClock: false,\t// 12 or 24 time in time mode\n\t\t\tmonthNames: null\t// list of names of months\n\t\t}\n\t};\n\n\t// round to nearby lower multiple of base\n\n\tfunction floorInBase(n, base) {\n\t\treturn base * Math.floor(n / base);\n\t}\n\n\t// Returns a string with the date d formatted according to fmt.\n\t// A subset of the Open Group's strftime format is supported.\n\n\tfunction formatDate(d, fmt, monthNames, dayNames) {\n\n\t\tif (typeof d.strftime == \"function\") {\n\t\t\treturn d.strftime(fmt);\n\t\t}\n\n\t\tvar leftPad = function(n, pad) {\n\t\t\tn = \"\" + n;\n\t\t\tpad = \"\" + (pad == null ? \"0\" : pad);\n\t\t\treturn n.length == 1 ? pad + n : n;\n\t\t};\n\n\t\tvar r = [];\n\t\tvar escape = false;\n\t\tvar hours = d.getHours();\n\t\tvar isAM = hours < 12;\n\n\t\tif (monthNames == null) {\n\t\t\tmonthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\t\t}\n\n\t\tif (dayNames == null) {\n\t\t\tdayNames = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\t\t}\n\n\t\tvar hours12;\n\n\t\tif (hours > 12) {\n\t\t\thours12 = hours - 12;\n\t\t} else if (hours == 0) {\n\t\t\thours12 = 12;\n\t\t} else {\n\t\t\thours12 = hours;\n\t\t}\n\n\t\tfor (var i = 0; i < fmt.length; ++i) {\n\n\t\t\tvar c = fmt.charAt(i);\n\n\t\t\tif (escape) {\n\t\t\t\tswitch (c) {\n\t\t\t\t\tcase 'a': c = \"\" + dayNames[d.getDay()]; break;\n\t\t\t\t\tcase 'b': c = \"\" + monthNames[d.getMonth()]; break;\n\t\t\t\t\tcase 'd': c = leftPad(d.getDate()); break;\n\t\t\t\t\tcase 'e': c = leftPad(d.getDate(), \" \"); break;\n\t\t\t\t\tcase 'h':\t// For back-compat with 0.7; remove in 1.0\n\t\t\t\t\tcase 'H': c = leftPad(hours); break;\n\t\t\t\t\tcase 'I': c = leftPad(hours12); break;\n\t\t\t\t\tcase 'l': c = leftPad(hours12, \" \"); break;\n\t\t\t\t\tcase 'm': c = leftPad(d.getMonth() + 1); break;\n\t\t\t\t\tcase 'M': c = leftPad(d.getMinutes()); break;\n\t\t\t\t\t// quarters not in Open Group's strftime specification\n\t\t\t\t\tcase 'q':\n\t\t\t\t\t\tc = \"\" + (Math.floor(d.getMonth() / 3) + 1); break;\n\t\t\t\t\tcase 'S': c = leftPad(d.getSeconds()); break;\n\t\t\t\t\tcase 'y': c = leftPad(d.getFullYear() % 100); break;\n\t\t\t\t\tcase 'Y': c = \"\" + d.getFullYear(); break;\n\t\t\t\t\tcase 'p': c = (isAM) ? (\"\" + \"am\") : (\"\" + \"pm\"); break;\n\t\t\t\t\tcase 'P': c = (isAM) ? (\"\" + \"AM\") : (\"\" + \"PM\"); break;\n\t\t\t\t\tcase 'w': c = \"\" + d.getDay(); break;\n\t\t\t\t}\n\t\t\t\tr.push(c);\n\t\t\t\tescape = false;\n\t\t\t} else {\n\t\t\t\tif (c == \"%\") {\n\t\t\t\t\tescape = true;\n\t\t\t\t} else {\n\t\t\t\t\tr.push(c);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn r.join(\"\");\n\t}\n\n\t// To have a consistent view of time-based data independent of which time\n\t// zone the client happens to be in we need a date-like object independent\n\t// of time zones.  This is done through a wrapper that only calls the UTC\n\t// versions of the accessor methods.\n\n\tfunction makeUtcWrapper(d) {\n\n\t\tfunction addProxyMethod(sourceObj, sourceMethod, targetObj, targetMethod) {\n\t\t\tsourceObj[sourceMethod] = function() {\n\t\t\t\treturn targetObj[targetMethod].apply(targetObj, arguments);\n\t\t\t};\n        }\n        var utc = {\n\t\t\tdate: d\n\t\t};\n\n\t\t// support strftime, if found\n\n\t\tif (d.strftime != undefined) {\n\t\t\taddProxyMethod(utc, \"strftime\", d, \"strftime\");\n\t\t}\n\n\t\taddProxyMethod(utc, \"getTime\", d, \"getTime\");\n\t\taddProxyMethod(utc, \"setTime\", d, \"setTime\");\n\n\t\tvar props = [\"Date\", \"Day\", \"FullYear\", \"Hours\", \"Milliseconds\", \"Minutes\", \"Month\", \"Seconds\"];\n\n\t\tfor (var p = 0; p < props.length; p++) {\n\t\t\taddProxyMethod(utc, \"get\" + props[p], d, \"getUTC\" + props[p]);\n\t\t\taddProxyMethod(utc, \"set\" + props[p], d, \"setUTC\" + props[p]);\n\t\t}\n\n\t\treturn utc;\n    }\n    // select time zone strategy.  This returns a date-like object tied to the\n\t// desired timezone\n\n\tfunction dateGenerator(ts, opts) {\n\t\tif (opts.timezone == \"browser\") {\n\t\t\treturn new Date(ts);\n\t\t} else if (!opts.timezone || opts.timezone == \"utc\") {\n\t\t\treturn makeUtcWrapper(new Date(ts));\n\t\t} else if (typeof timezoneJS != \"undefined\" && typeof timezoneJS.Date != \"undefined\") {\n\t\t\tvar d = new timezoneJS.Date();\n\t\t\t// timezone-js is fickle, so be sure to set the time zone before\n\t\t\t// setting the time.\n\t\t\td.setTimezone(opts.timezone);\n\t\t\td.setTime(ts);\n\t\t\treturn d;\n\t\t} else {\n\t\t\treturn makeUtcWrapper(new Date(ts));\n\t\t}\n\t}\n\t\n\t// map of app. size of time units in milliseconds\n\n\tvar timeUnitSize = {\n\t\t\"second\": 1000,\n\t\t\"minute\": 60 * 1000,\n\t\t\"hour\": 60 * 60 * 1000,\n\t\t\"day\": 24 * 60 * 60 * 1000,\n\t\t\"month\": 30 * 24 * 60 * 60 * 1000,\n\t\t\"quarter\": 3 * 30 * 24 * 60 * 60 * 1000,\n\t\t\"year\": 365.2425 * 24 * 60 * 60 * 1000\n\t};\n\n\t// the allowed tick sizes, after 1 year we use\n\t// an integer algorithm\n\n\tvar baseSpec = [\n\t\t[1, \"second\"], [2, \"second\"], [5, \"second\"], [10, \"second\"],\n\t\t[30, \"second\"], \n\t\t[1, \"minute\"], [2, \"minute\"], [5, \"minute\"], [10, \"minute\"],\n\t\t[30, \"minute\"], \n\t\t[1, \"hour\"], [2, \"hour\"], [4, \"hour\"],\n\t\t[8, \"hour\"], [12, \"hour\"],\n\t\t[1, \"day\"], [2, \"day\"], [3, \"day\"],\n\t\t[0.25, \"month\"], [0.5, \"month\"], [1, \"month\"],\n\t\t[2, \"month\"]\n\t];\n\n\t// we don't know which variant(s) we'll need yet, but generating both is\n\t// cheap\n\n\tvar specMonths = baseSpec.concat([[3, \"month\"], [6, \"month\"],\n\t\t[1, \"year\"]]);\n\tvar specQuarters = baseSpec.concat([[1, \"quarter\"], [2, \"quarter\"],\n\t\t[1, \"year\"]]);\n\n\tfunction init(plot) {\n\t\tplot.hooks.processOptions.push(function (plot, options) {\n\t\t\t$.each(plot.getAxes(), function(axisName, axis) {\n\n\t\t\t\tvar opts = axis.options;\n\n\t\t\t\tif (opts.mode == \"time\") {\n\t\t\t\t\taxis.tickGenerator = function(axis) {\n\n\t\t\t\t\t\tvar ticks = [];\n\t\t\t\t\t\tvar d = dateGenerator(axis.min, opts);\n\t\t\t\t\t\tvar minSize = 0;\n\n\t\t\t\t\t\t// make quarter use a possibility if quarters are\n\t\t\t\t\t\t// mentioned in either of these options\n\n\t\t\t\t\t\tvar spec = (opts.tickSize && opts.tickSize[1] ===\n\t\t\t\t\t\t\t\"quarter\") ||\n\t\t\t\t\t\t\t(opts.minTickSize && opts.minTickSize[1] ===\n\t\t\t\t\t\t\t\"quarter\") ? specQuarters : specMonths;\n\n\t\t\t\t\t\tif (opts.minTickSize != null) {\n\t\t\t\t\t\t\tif (typeof opts.tickSize == \"number\") {\n\t\t\t\t\t\t\t\tminSize = opts.tickSize;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tminSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (var i = 0; i < spec.length - 1; ++i) {\n\t\t\t\t\t\t\tif (axis.delta < (spec[i][0] * timeUnitSize[spec[i][1]]\n\t\t\t\t\t\t\t\t\t\t\t  + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2\n\t\t\t\t\t\t\t\t&& spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar size = spec[i][0];\n\t\t\t\t\t\tvar unit = spec[i][1];\n\n\t\t\t\t\t\t// special-case the possibility of several years\n\n\t\t\t\t\t\tif (unit == \"year\") {\n\n\t\t\t\t\t\t\t// if given a minTickSize in years, just use it,\n\t\t\t\t\t\t\t// ensuring that it's an integer\n\n\t\t\t\t\t\t\tif (opts.minTickSize != null && opts.minTickSize[1] == \"year\") {\n\t\t\t\t\t\t\t\tsize = Math.floor(opts.minTickSize[0]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tvar magn = Math.pow(10, Math.floor(Math.log(axis.delta / timeUnitSize.year) / Math.LN10));\n\t\t\t\t\t\t\t\tvar norm = (axis.delta / timeUnitSize.year) / magn;\n\n\t\t\t\t\t\t\t\tif (norm < 1.5) {\n\t\t\t\t\t\t\t\t\tsize = 1;\n\t\t\t\t\t\t\t\t} else if (norm < 3) {\n\t\t\t\t\t\t\t\t\tsize = 2;\n\t\t\t\t\t\t\t\t} else if (norm < 7.5) {\n\t\t\t\t\t\t\t\t\tsize = 5;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tsize = 10;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tsize *= magn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// minimum size for years is 1\n\n\t\t\t\t\t\t\tif (size < 1) {\n\t\t\t\t\t\t\t\tsize = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\taxis.tickSize = opts.tickSize || [size, unit];\n\t\t\t\t\t\tvar tickSize = axis.tickSize[0];\n\t\t\t\t\t\tunit = axis.tickSize[1];\n\n\t\t\t\t\t\tvar step = tickSize * timeUnitSize[unit];\n\n\t\t\t\t\t\tif (unit == \"second\") {\n\t\t\t\t\t\t\td.setSeconds(floorInBase(d.getSeconds(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"minute\") {\n\t\t\t\t\t\t\td.setMinutes(floorInBase(d.getMinutes(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"hour\") {\n\t\t\t\t\t\t\td.setHours(floorInBase(d.getHours(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"month\") {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"quarter\") {\n\t\t\t\t\t\t\td.setMonth(3 * floorInBase(d.getMonth() / 3,\n\t\t\t\t\t\t\t\ttickSize));\n\t\t\t\t\t\t} else if (unit == \"year\") {\n\t\t\t\t\t\t\td.setFullYear(floorInBase(d.getFullYear(), tickSize));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// reset smaller components\n\n\t\t\t\t\t\td.setMilliseconds(0);\n\n\t\t\t\t\t\tif (step >= timeUnitSize.minute) {\n\t\t\t\t\t\t\td.setSeconds(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.hour) {\n\t\t\t\t\t\t\td.setMinutes(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.day) {\n\t\t\t\t\t\t\td.setHours(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.day * 4) {\n\t\t\t\t\t\t\td.setDate(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.month * 2) {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), 3));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.quarter * 2) {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), 6));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.year) {\n\t\t\t\t\t\t\td.setMonth(0);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar carry = 0;\n\t\t\t\t\t\tvar v = Number.NaN;\n\t\t\t\t\t\tvar prev;\n\n\t\t\t\t\t\tdo {\n\n\t\t\t\t\t\t\tprev = v;\n\t\t\t\t\t\t\tv = d.getTime();\n\t\t\t\t\t\t\tticks.push(v);\n\n\t\t\t\t\t\t\tif (unit == \"month\" || unit == \"quarter\") {\n\t\t\t\t\t\t\t\tif (tickSize < 1) {\n\n\t\t\t\t\t\t\t\t\t// a bit complicated - we'll divide the\n\t\t\t\t\t\t\t\t\t// month/quarter up but we need to take\n\t\t\t\t\t\t\t\t\t// care of fractions so we don't end up in\n\t\t\t\t\t\t\t\t\t// the middle of a day\n\n\t\t\t\t\t\t\t\t\td.setDate(1);\n\t\t\t\t\t\t\t\t\tvar start = d.getTime();\n\t\t\t\t\t\t\t\t\td.setMonth(d.getMonth() +\n\t\t\t\t\t\t\t\t\t\t(unit == \"quarter\" ? 3 : 1));\n\t\t\t\t\t\t\t\t\tvar end = d.getTime();\n\t\t\t\t\t\t\t\t\td.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);\n\t\t\t\t\t\t\t\t\tcarry = d.getHours();\n\t\t\t\t\t\t\t\t\td.setHours(0);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\td.setMonth(d.getMonth() +\n\t\t\t\t\t\t\t\t\t\ttickSize * (unit == \"quarter\" ? 3 : 1));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (unit == \"year\") {\n\t\t\t\t\t\t\t\td.setFullYear(d.getFullYear() + tickSize);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\td.setTime(v + step);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while (v < axis.max && v != prev);\n\n\t\t\t\t\t\treturn ticks;\n\t\t\t\t\t};\n\n\t\t\t\t\taxis.tickFormatter = function (v, axis) {\n\n\t\t\t\t\t\tvar d = dateGenerator(v, axis.options);\n\n\t\t\t\t\t\t// first check global format\n\n\t\t\t\t\t\tif (opts.timeformat != null) {\n\t\t\t\t\t\t\treturn formatDate(d, opts.timeformat, opts.monthNames, opts.dayNames);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// possibly use quarters if quarters are mentioned in\n\t\t\t\t\t\t// any of these places\n\n\t\t\t\t\t\tvar useQuarters = (axis.options.tickSize &&\n\t\t\t\t\t\t\t\taxis.options.tickSize[1] == \"quarter\") ||\n\t\t\t\t\t\t\t(axis.options.minTickSize &&\n\t\t\t\t\t\t\t\taxis.options.minTickSize[1] == \"quarter\");\n\n\t\t\t\t\t\tvar t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];\n\t\t\t\t\t\tvar span = axis.max - axis.min;\n\t\t\t\t\t\tvar suffix = (opts.twelveHourClock) ? \" %p\" : \"\";\n\t\t\t\t\t\tvar hourCode = (opts.twelveHourClock) ? \"%I\" : \"%H\";\n\t\t\t\t\t\tvar fmt;\n\n\t\t\t\t\t\tif (t < timeUnitSize.minute) {\n\t\t\t\t\t\t\tfmt = hourCode + \":%M:%S\" + suffix;\n\t\t\t\t\t\t} else if (t < timeUnitSize.day) {\n\t\t\t\t\t\t\tif (span < 2 * timeUnitSize.day) {\n\t\t\t\t\t\t\t\tfmt = hourCode + \":%M\" + suffix;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"%b %d \" + hourCode + \":%M\" + suffix;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (t < timeUnitSize.month) {\n\t\t\t\t\t\t\tfmt = \"%b %d\";\n\t\t\t\t\t\t} else if ((useQuarters && t < timeUnitSize.quarter) ||\n\t\t\t\t\t\t\t(!useQuarters && t < timeUnitSize.year)) {\n\t\t\t\t\t\t\tif (span < timeUnitSize.year) {\n\t\t\t\t\t\t\t\tfmt = \"%b\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"%b %Y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (useQuarters && t < timeUnitSize.year) {\n\t\t\t\t\t\t\tif (span < timeUnitSize.year) {\n\t\t\t\t\t\t\t\tfmt = \"Q%q\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"Q%q %Y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfmt = \"%Y\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar rt = formatDate(d, fmt, opts.monthNames, opts.dayNames);\n\n\t\t\t\t\t\treturn rt;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: 'time',\n\t\tversion: '1.0'\n\t});\n\n\t// Time-axis support used to be in Flot core, which exposed the\n\t// formatDate function on the plot object.  Various plugins depend\n\t// on the function, so we need to re-expose it here.\n\n\t$.plot.formatDate = formatDate;\n\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/fullcalendar/fullcalendar.css",
    "content": "/*!\n * FullCalendar v2.2.5 Stylesheet\n * Docs & License: http://arshaw.com/fullcalendar/\n * (c) 2013 Adam Shaw\n */\n\n\n.fc {\n\tdirection: ltr;\n\ttext-align: left;\n}\n\n.fc-rtl {\n\ttext-align: right;\n}\n\nbody .fc { /* extra precedence to overcome jqui */\n\tfont-size: 1em;\n}\n\n\n/* Colors\n--------------------------------------------------------------------------------------------------*/\n\n.fc-unthemed th,\n.fc-unthemed td,\n.fc-unthemed hr,\n.fc-unthemed thead,\n.fc-unthemed tbody,\n.fc-unthemed .fc-row,\n.fc-unthemed .fc-popover {\n\tborder-color: #ddd;\n}\n\n.fc-unthemed .fc-popover {\n\tbackground-color: #fff;\n}\n\n.fc-unthemed hr,\n.fc-unthemed .fc-popover .fc-header {\n\tbackground: #eee;\n}\n\n.fc-unthemed .fc-popover .fc-header .fc-close {\n\tcolor: #666;\n}\n\n.fc-unthemed .fc-today {\n\tbackground: #fcf8e3;\n}\n\n.fc-highlight { /* when user is selecting cells */\n\tbackground: #bce8f1;\n\topacity: .3;\n\tfilter: alpha(opacity=30); /* for IE */\n}\n\n.fc-bgevent { /* default look for background events */\n\tbackground: rgb(143, 223, 130);\n\topacity: .3;\n\tfilter: alpha(opacity=30); /* for IE */\n}\n\n.fc-nonbusiness { /* default look for non-business-hours areas */\n\t/* will inherit .fc-bgevent's styles */\n\tbackground: #ccc;\n}\n\n\n/* Icons (inline elements with styled text that mock arrow icons)\n--------------------------------------------------------------------------------------------------*/\n\n.fc-icon {\n\tdisplay: inline-block;\n\tfont-size: 2em;\n\tline-height: .5em;\n\theight: .5em; /* will make the total height 1em */\n\tfont-family: \"Courier New\", Courier, monospace;\n}\n\n.fc-icon-left-single-arrow:after {\n\tcontent: \"\\02039\";\n\tfont-weight: bold;\n}\n\n.fc-icon-right-single-arrow:after {\n\tcontent: \"\\0203A\";\n\tfont-weight: bold;\n}\n\n.fc-icon-left-double-arrow:after {\n\tcontent: \"\\000AB\";\n}\n\n.fc-icon-right-double-arrow:after {\n\tcontent: \"\\000BB\";\n}\n\n.fc-icon-x:after {\n\tcontent: \"\\000D7\";\n}\n\n\n/* Buttons (styled <button> tags, normalized to work cross-browser)\n--------------------------------------------------------------------------------------------------*/\n\n.fc button {\n\t/* force height to include the border and padding */\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n\tbox-sizing: border-box;\n\n\t/* dimensions */\n\tmargin: 0;\n\theight: 2.1em;\n\tpadding: 0 .6em;\n\n\t/* text & cursor */\n\tfont-size: 1em; /* normalize */\n\twhite-space: nowrap;\n\tcursor: pointer;\n}\n\n/* Firefox has an annoying inner border */\n.fc button::-moz-focus-inner { margin: 0; padding: 0; }\n\t\n.fc-state-default { /* non-theme */\n\tborder: 1px solid;\n}\n\n.fc-state-default.fc-corner-left { /* non-theme */\n\tborder-top-left-radius: 4px;\n\tborder-bottom-left-radius: 4px;\n}\n\n.fc-state-default.fc-corner-right { /* non-theme */\n\tborder-top-right-radius: 4px;\n\tborder-bottom-right-radius: 4px;\n}\n\n/* icons in buttons */\n\n.fc button .fc-icon { /* non-theme */\n\tposition: relative;\n\ttop: .05em; /* seems to be a good adjustment across browsers */\n\tmargin: 0 .1em;\n}\n\t\n/*\n  button states\n  borrowed from twitter bootstrap (http://twitter.github.com/bootstrap/)\n*/\n\n.fc-state-default {\n\tbackground-color: #f5f5f5;\n\tbackground-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);\n\tbackground-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));\n\tbackground-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);\n\tbackground-image: -o-linear-gradient(top, #ffffff, #e6e6e6);\n\tbackground-image: linear-gradient(to bottom, #ffffff, #e6e6e6);\n\tbackground-repeat: repeat-x;\n\tborder-color: #e6e6e6 #e6e6e6 #bfbfbf;\n\tborder-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n\tcolor: #333;\n\ttext-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);\n\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n.fc-state-hover,\n.fc-state-down,\n.fc-state-active,\n.fc-state-disabled {\n\tcolor: #333333;\n\tbackground-color: #e6e6e6;\n}\n\n.fc-state-hover {\n\tcolor: #333333;\n\ttext-decoration: none;\n\tbackground-position: 0 -15px;\n\t-webkit-transition: background-position 0.1s linear;\n\t   -moz-transition: background-position 0.1s linear;\n\t     -o-transition: background-position 0.1s linear;\n\t        transition: background-position 0.1s linear;\n}\n\n.fc-state-down,\n.fc-state-active {\n\tbackground-color: #cccccc;\n\tbackground-image: none;\n\tbox-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n.fc-state-disabled {\n\tcursor: default;\n\tbackground-image: none;\n\topacity: 0.65;\n\tfilter: alpha(opacity=65);\n\tbox-shadow: none;\n}\n\n\n/* Buttons Groups\n--------------------------------------------------------------------------------------------------*/\n\n.fc-button-group {\n\tdisplay: inline-block;\n}\n\n/*\nevery button that is not first in a button group should scootch over one pixel and cover the\nprevious button's border...\n*/\n\n.fc .fc-button-group > * { /* extra precedence b/c buttons have margin set to zero */\n\tfloat: left;\n\tmargin: 0 0 0 -1px;\n}\n\n.fc .fc-button-group > :first-child { /* same */\n\tmargin-left: 0;\n}\n\n\n/* Popover\n--------------------------------------------------------------------------------------------------*/\n\n.fc-popover {\n\tposition: absolute;\n\tbox-shadow: 0 2px 6px rgba(0,0,0,.15);\n}\n\n.fc-popover .fc-header {\n\tpadding: 2px 4px;\n}\n\n.fc-popover .fc-header .fc-title {\n\tmargin: 0 2px;\n}\n\n.fc-popover .fc-header .fc-close {\n\tcursor: pointer;\n}\n\n.fc-ltr .fc-popover .fc-header .fc-title,\n.fc-rtl .fc-popover .fc-header .fc-close {\n\tfloat: left;\n}\n\n.fc-rtl .fc-popover .fc-header .fc-title,\n.fc-ltr .fc-popover .fc-header .fc-close {\n\tfloat: right;\n}\n\n/* unthemed */\n\n.fc-unthemed .fc-popover {\n\tborder-width: 1px;\n\tborder-style: solid;\n}\n\n.fc-unthemed .fc-popover .fc-header .fc-close {\n\tfont-size: 25px;\n\tmargin-top: 4px;\n}\n\n/* jqui themed */\n\n.fc-popover > .ui-widget-header + .ui-widget-content {\n\tborder-top: 0; /* where they meet, let the header have the border */\n}\n\n\n/* Misc Reusable Components\n--------------------------------------------------------------------------------------------------*/\n\n.fc hr {\n\theight: 0;\n\tmargin: 0;\n\tpadding: 0 0 2px; /* height is unreliable across browsers, so use padding */\n\tborder-style: solid;\n\tborder-width: 1px 0;\n}\n\n.fc-clear {\n\tclear: both;\n}\n\n.fc-bg,\n.fc-bgevent-skeleton,\n.fc-highlight-skeleton,\n.fc-helper-skeleton {\n\t/* these element should always cling to top-left/right corners */\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n}\n\n.fc-bg {\n\tbottom: 0; /* strech bg to bottom edge */\n}\n\n.fc-bg table {\n\theight: 100%; /* strech bg to bottom edge */\n}\n\n\n/* Tables\n--------------------------------------------------------------------------------------------------*/\n\n.fc table {\n\twidth: 100%;\n\ttable-layout: fixed;\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n\tfont-size: 1em; /* normalize cross-browser */\n}\n\n.fc th {\n\ttext-align: center;\n}\n\n.fc th,\n.fc td {\n\tborder-style: solid;\n\tborder-width: 1px;\n\tpadding: 0;\n\tvertical-align: top;\n}\n\n.fc td.fc-today {\n\tborder-style: double; /* overcome neighboring borders */\n}\n\n\n/* Fake Table Rows\n--------------------------------------------------------------------------------------------------*/\n\n.fc .fc-row { /* extra precedence to overcome themes w/ .ui-widget-content forcing a 1px border */\n\t/* no visible border by default. but make available if need be (scrollbar width compensation) */\n\tborder-style: solid;\n\tborder-width: 0;\n}\n\n.fc-row table {\n\t/* don't put left/right border on anything within a fake row.\n\t   the outer tbody will worry about this */\n\tborder-left: 0 hidden transparent;\n\tborder-right: 0 hidden transparent;\n\n\t/* no bottom borders on rows */\n\tborder-bottom: 0 hidden transparent; \n}\n\n.fc-row:first-child table {\n\tborder-top: 0 hidden transparent; /* no top border on first row */\n}\n\n\n/* Day Row (used within the header and the DayGrid)\n--------------------------------------------------------------------------------------------------*/\n\n.fc-row {\n\tposition: relative;\n}\n\n.fc-row .fc-bg {\n\tz-index: 1;\n}\n\n/* highlighting cells & background event skeleton */\n\n.fc-row .fc-bgevent-skeleton,\n.fc-row .fc-highlight-skeleton {\n\tbottom: 0; /* stretch skeleton to bottom of row */\n}\n\n.fc-row .fc-bgevent-skeleton table,\n.fc-row .fc-highlight-skeleton table {\n\theight: 100%; /* stretch skeleton to bottom of row */\n}\n\n.fc-row .fc-highlight-skeleton td,\n.fc-row .fc-bgevent-skeleton td {\n\tborder-color: transparent;\n}\n\n.fc-row .fc-bgevent-skeleton {\n\tz-index: 2;\n\n}\n\n.fc-row .fc-highlight-skeleton {\n\tz-index: 3;\n}\n\n/*\nrow content (which contains day/week numbers and events) as well as \"helper\" (which contains\ntemporary rendered events).\n*/\n\n.fc-row .fc-content-skeleton {\n\tposition: relative;\n\tz-index: 4;\n\tpadding-bottom: 2px; /* matches the space above the events */\n}\n\n.fc-row .fc-helper-skeleton {\n\tz-index: 5;\n}\n\n.fc-row .fc-content-skeleton td,\n.fc-row .fc-helper-skeleton td {\n\t/* see-through to the background below */\n\tbackground: none; /* in case <td>s are globally styled */\n\tborder-color: transparent;\n\n\t/* don't put a border between events and/or the day number */\n\tborder-bottom: 0;\n}\n\n.fc-row .fc-content-skeleton tbody td, /* cells with events inside (so NOT the day number cell) */\n.fc-row .fc-helper-skeleton tbody td {\n\t/* don't put a border between event cells */\n\tborder-top: 0;\n}\n\n\n/* Scrolling Container\n--------------------------------------------------------------------------------------------------*/\n\n.fc-scroller { /* this class goes on elements for guaranteed vertical scrollbars */\n\toverflow-y: scroll;\n\toverflow-x: hidden;\n}\n\n.fc-scroller > * { /* we expect an immediate inner element */\n\tposition: relative; /* re-scope all positions */\n\twidth: 100%; /* hack to force re-sizing this inner element when scrollbars appear/disappear */\n\toverflow: hidden; /* don't let negative margins or absolute positioning create further scroll */\n}\n\n\n/* Global Event Styles\n--------------------------------------------------------------------------------------------------*/\n\n.fc-event {\n\tposition: relative; /* for resize handle and other inner positioning */\n\tdisplay: block; /* make the <a> tag block */\n\tfont-size: .85em;\n\tline-height: 1.3;\n\tborder-radius: 3px;\n\tborder: 1px solid #3a87ad; /* default BORDER color */\n\tbackground-color: #3a87ad; /* default BACKGROUND color */\n\tfont-weight: normal; /* undo jqui's ui-widget-header bold */\n}\n\n/* overpower some of bootstrap's and jqui's styles on <a> tags */\n.fc-event,\n.fc-event:hover,\n.ui-widget .fc-event {\n\tcolor: #fff; /* default TEXT color */\n\ttext-decoration: none; /* if <a> has an href */\n}\n\n.fc-event[href],\n.fc-event.fc-draggable {\n\tcursor: pointer; /* give events with links and draggable events a hand mouse pointer */\n}\n\n.fc-not-allowed, /* causes a \"warning\" cursor. applied on body */\n.fc-not-allowed .fc-event { /* to override an event's custom cursor */\n\tcursor: not-allowed;\n}\n\n\n/* DayGrid events\n----------------------------------------------------------------------------------------------------\nWe use the full \"fc-day-grid-event\" class instead of using descendants because the event won't\nbe a descendant of the grid when it is being dragged.\n*/\n\n.fc-day-grid-event {\n\tmargin: 1px 2px 0; /* spacing between events and edges */\n\tpadding: 0 1px;\n}\n\n/* events that are continuing to/from another week. kill rounded corners and butt up against edge */\n\n.fc-ltr .fc-day-grid-event.fc-not-start,\n.fc-rtl .fc-day-grid-event.fc-not-end {\n\tmargin-left: 0;\n\tborder-left-width: 0;\n\tpadding-left: 1px; /* replace the border with padding */\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n}\n\n.fc-ltr .fc-day-grid-event.fc-not-end,\n.fc-rtl .fc-day-grid-event.fc-not-start {\n\tmargin-right: 0;\n\tborder-right-width: 0;\n\tpadding-right: 1px; /* replace the border with padding */\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.fc-day-grid-event > .fc-content { /* force events to be one-line tall */\n\twhite-space: nowrap;\n\toverflow: hidden;\n}\n\n.fc-day-grid-event .fc-time {\n\tfont-weight: bold;\n}\n\n/* resize handle (outside of fc-content, so can go outside of bounds) */\n\n.fc-day-grid-event .fc-resizer {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\twidth: 7px;\n}\n\n.fc-ltr .fc-day-grid-event .fc-resizer {\n\tright: -3px;\n\tcursor: e-resize;\n}\n\n.fc-rtl .fc-day-grid-event .fc-resizer {\n\tleft: -3px;\n\tcursor: w-resize;\n}\n\n\n/* Event Limiting\n--------------------------------------------------------------------------------------------------*/\n\n/* \"more\" link that represents hidden events */\n\na.fc-more {\n\tmargin: 1px 3px;\n\tfont-size: .85em;\n\tcursor: pointer;\n\ttext-decoration: none;\n}\n\na.fc-more:hover {\n\ttext-decoration: underline;\n}\n\n.fc-limited { /* rows and cells that are hidden because of a \"more\" link */\n\tdisplay: none;\n}\n\n/* popover that appears when \"more\" link is clicked */\n\n.fc-day-grid .fc-row {\n\tz-index: 1; /* make the \"more\" popover one higher than this */\n}\n\n.fc-more-popover {\n\tz-index: 2;\n\twidth: 220px;\n}\n\n.fc-more-popover .fc-event-container {\n\tpadding: 10px;\n}\n\n/* Toolbar\n--------------------------------------------------------------------------------------------------*/\n\n.fc-toolbar {\n\ttext-align: center;\n\tmargin-bottom: 1em;\n}\n\n.fc-toolbar .fc-left {\n\tfloat: left;\n}\n\n.fc-toolbar .fc-right {\n\tfloat: right;\n}\n\n.fc-toolbar .fc-center {\n\tdisplay: inline-block;\n}\n\n/* the things within each left/right/center section */\n.fc .fc-toolbar > * > * { /* extra precedence to override button border margins */\n\tfloat: left;\n\tmargin-left: .75em;\n}\n\n/* the first thing within each left/center/right section */\n.fc .fc-toolbar > * > :first-child { /* extra precedence to override button border margins */\n\tmargin-left: 0;\n}\n\t\n/* title text */\n\n.fc-toolbar h2 {\n\tmargin: 0;\n}\n\n/* button layering (for border precedence) */\n\n.fc-toolbar button {\n\tposition: relative;\n}\n\n.fc-toolbar .fc-state-hover,\n.fc-toolbar .ui-state-hover {\n\tz-index: 2;\n}\n\t\n.fc-toolbar .fc-state-down {\n\tz-index: 3;\n}\n\n.fc-toolbar .fc-state-active,\n.fc-toolbar .ui-state-active {\n\tz-index: 4;\n}\n\n.fc-toolbar button:focus {\n\tz-index: 5;\n}\n\n\n/* View Structure\n--------------------------------------------------------------------------------------------------*/\n\n/* undo twitter bootstrap's box-sizing rules. normalizes positioning techniques */\n/* don't do this for the toolbar because we'll want bootstrap to style those buttons as some pt */\n.fc-view-container *,\n.fc-view-container *:before,\n.fc-view-container *:after {\n\t-webkit-box-sizing: content-box;\n\t   -moz-box-sizing: content-box;\n\t        box-sizing: content-box;\n}\n\n.fc-view, /* scope positioning and z-index's for everything within the view */\n.fc-view > table { /* so dragged elements can be above the view's main element */\n\tposition: relative;\n\tz-index: 1;\n}\n\n/* BasicView\n--------------------------------------------------------------------------------------------------*/\n\n/* day row structure */\n\n.fc-basicWeek-view .fc-content-skeleton,\n.fc-basicDay-view .fc-content-skeleton {\n\t/* we are sure there are no day numbers in these views, so... */\n\tpadding-top: 1px; /* add a pixel to make sure there are 2px padding above events */\n\tpadding-bottom: 1em; /* ensure a space at bottom of cell for user selecting/clicking */\n}\n\n.fc-basic-view tbody .fc-row {\n\tmin-height: 4em; /* ensure that all rows are at least this tall */\n}\n\n/* a \"rigid\" row will take up a constant amount of height because content-skeleton is absolute */\n\n.fc-row.fc-rigid {\n\toverflow: hidden;\n}\n\n.fc-row.fc-rigid .fc-content-skeleton {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n}\n\n/* week and day number styling */\n\n.fc-basic-view .fc-week-number,\n.fc-basic-view .fc-day-number {\n\tpadding: 0 2px;\n}\n\n.fc-basic-view td.fc-week-number span,\n.fc-basic-view td.fc-day-number {\n\tpadding-top: 2px;\n\tpadding-bottom: 2px;\n}\n\n.fc-basic-view .fc-week-number {\n\ttext-align: center;\n}\n\n.fc-basic-view .fc-week-number span {\n\t/* work around the way we do column resizing and ensure a minimum width */\n\tdisplay: inline-block;\n\tmin-width: 1.25em;\n}\n\n.fc-ltr .fc-basic-view .fc-day-number {\n\ttext-align: right;\n}\n\n.fc-rtl .fc-basic-view .fc-day-number {\n\ttext-align: left;\n}\n\n.fc-day-number.fc-other-month {\n\topacity: 0.3;\n\tfilter: alpha(opacity=30); /* for IE */\n\t/* opacity with small font can sometimes look too faded\n\t   might want to set the 'color' property instead\n\t   making day-numbers bold also fixes the problem */\n}\n\n/* AgendaView all-day area\n--------------------------------------------------------------------------------------------------*/\n\n.fc-agenda-view .fc-day-grid {\n\tposition: relative;\n\tz-index: 2; /* so the \"more..\" popover will be over the time grid */\n}\n\n.fc-agenda-view .fc-day-grid .fc-row {\n\tmin-height: 3em; /* all-day section will never get shorter than this */\n}\n\n.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton {\n\tpadding-top: 1px; /* add a pixel to make sure there are 2px padding above events */\n\tpadding-bottom: 1em; /* give space underneath events for clicking/selecting days */\n}\n\n\n/* TimeGrid axis running down the side (for both the all-day area and the slot area)\n--------------------------------------------------------------------------------------------------*/\n\n.fc .fc-axis { /* .fc to overcome default cell styles */\n\tvertical-align: middle;\n\tpadding: 0 4px;\n\twhite-space: nowrap;\n}\n\n.fc-ltr .fc-axis {\n\ttext-align: right;\n}\n\n.fc-rtl .fc-axis {\n\ttext-align: left;\n}\n\n.ui-widget td.fc-axis {\n\tfont-weight: normal; /* overcome jqui theme making it bold */\n}\n\n\n/* TimeGrid Structure\n--------------------------------------------------------------------------------------------------*/\n\n.fc-time-grid-container, /* so scroll container's z-index is below all-day */\n.fc-time-grid { /* so slats/bg/content/etc positions get scoped within here */\n\tposition: relative;\n\tz-index: 1;\n}\n\n.fc-time-grid {\n\tmin-height: 100%; /* so if height setting is 'auto', .fc-bg stretches to fill height */\n}\n\n.fc-time-grid table { /* don't put outer borders on slats/bg/content/etc */\n\tborder: 0 hidden transparent;\n}\n\n.fc-time-grid > .fc-bg {\n\tz-index: 1;\n}\n\n.fc-time-grid .fc-slats,\n.fc-time-grid > hr { /* the <hr> AgendaView injects when grid is shorter than scroller */\n\tposition: relative;\n\tz-index: 2;\n}\n\n.fc-time-grid .fc-bgevent-skeleton,\n.fc-time-grid .fc-content-skeleton {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n}\n\n.fc-time-grid .fc-bgevent-skeleton {\n\tz-index: 3;\n}\n\n.fc-time-grid .fc-highlight-skeleton {\n\tz-index: 4;\n}\n\n.fc-time-grid .fc-content-skeleton {\n\tz-index: 5;\n}\n\n.fc-time-grid .fc-helper-skeleton {\n\tz-index: 6;\n}\n\n\n/* TimeGrid Slats (lines that run horizontally)\n--------------------------------------------------------------------------------------------------*/\n\n.fc-slats td {\n\theight: 1.5em;\n\tborder-bottom: 0; /* each cell is responsible for its top border */\n}\n\n.fc-slats .fc-minor td {\n\tborder-top-style: dotted;\n}\n\n.fc-slats .ui-widget-content { /* for jqui theme */\n\tbackground: none; /* see through to fc-bg */\n}\n\n\n/* TimeGrid Highlighting Slots\n--------------------------------------------------------------------------------------------------*/\n\n.fc-time-grid .fc-highlight-container { /* a div within a cell within the fc-highlight-skeleton */\n\tposition: relative; /* scopes the left/right of the fc-highlight to be in the column */\n}\n\n.fc-time-grid .fc-highlight {\n\tposition: absolute;\n\tleft: 0;\n\tright: 0;\n\t/* top and bottom will be in by JS */\n}\n\n\n/* TimeGrid Event Containment\n--------------------------------------------------------------------------------------------------*/\n\n.fc-time-grid .fc-event-container, /* a div within a cell within the fc-content-skeleton */\n.fc-time-grid .fc-bgevent-container { /* a div within a cell within the fc-bgevent-skeleton */\n\tposition: relative;\n}\n\n.fc-ltr .fc-time-grid .fc-event-container { /* space on the sides of events for LTR (default) */\n\tmargin: 0 2.5% 0 2px;\n}\n\n.fc-rtl .fc-time-grid .fc-event-container { /* space on the sides of events for RTL */\n\tmargin: 0 2px 0 2.5%;\n}\n\n.fc-time-grid .fc-event,\n.fc-time-grid .fc-bgevent {\n\tposition: absolute;\n\tz-index: 1; /* scope inner z-index's */\n}\n\n.fc-time-grid .fc-bgevent {\n\t/* background events always span full width */\n\tleft: 0;\n\tright: 0;\n}\n\n\n/* TimeGrid Event Styling\n----------------------------------------------------------------------------------------------------\nWe use the full \"fc-time-grid-event\" class instead of using descendants because the event won't\nbe a descendant of the grid when it is being dragged.\n*/\n\n.fc-time-grid-event.fc-not-start { /* events that are continuing from another day */\n\t/* replace space made by the top border with padding */\n\tborder-top-width: 0;\n\tpadding-top: 1px;\n\n\t/* remove top rounded corners */\n\tborder-top-left-radius: 0;\n\tborder-top-right-radius: 0;\n}\n\n.fc-time-grid-event.fc-not-end {\n\t/* replace space made by the top border with padding */\n\tborder-bottom-width: 0;\n\tpadding-bottom: 1px;\n\n\t/* remove bottom rounded corners */\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.fc-time-grid-event {\n\toverflow: hidden; /* don't let the bg flow over rounded corners */\n}\n\n.fc-time-grid-event > .fc-content { /* contains the time and title, but no bg and resizer */\n\tposition: relative;\n\tz-index: 2; /* above the bg */\n}\n\n.fc-time-grid-event .fc-time,\n.fc-time-grid-event .fc-title {\n\tpadding: 0 1px;\n}\n\n.fc-time-grid-event .fc-time {\n\tfont-size: .85em;\n\twhite-space: nowrap;\n}\n\n.fc-time-grid-event .fc-bg {\n\tz-index: 1;\n\tbackground: #fff;\n\topacity: .25;\n\tfilter: alpha(opacity=25); /* for IE */\n}\n\n/* short mode, where time and title are on the same line */\n\n.fc-time-grid-event.fc-short .fc-content {\n\t/* don't wrap to second line (now that contents will be inline) */\n\twhite-space: nowrap;\n}\n\n.fc-time-grid-event.fc-short .fc-time,\n.fc-time-grid-event.fc-short .fc-title {\n\t/* put the time and title on the same line */\n\tdisplay: inline-block;\n\tvertical-align: top;\n}\n\n.fc-time-grid-event.fc-short .fc-time span {\n\tdisplay: none; /* don't display the full time text... */\n}\n\n.fc-time-grid-event.fc-short .fc-time:before {\n\tcontent: attr(data-start); /* ...instead, display only the start time */\n}\n\n.fc-time-grid-event.fc-short .fc-time:after {\n\tcontent: \"\\000A0-\\000A0\"; /* seperate with a dash, wrapped in nbsp's */\n}\n\n.fc-time-grid-event.fc-short .fc-title {\n\tfont-size: .85em; /* make the title text the same size as the time */\n\tpadding: 0; /* undo padding from above */\n}\n\n/* resizer */\n\n.fc-time-grid-event .fc-resizer {\n\tposition: absolute;\n\tz-index: 3; /* above content */\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\theight: 8px;\n\toverflow: hidden;\n\tline-height: 8px;\n\tfont-size: 11px;\n\tfont-family: monospace;\n\ttext-align: center;\n\tcursor: s-resize;\n}\n\n.fc-time-grid-event .fc-resizer:after {\n\tcontent: \"=\";\n}\n"
  },
  {
    "path": "public/adminlte/plugins/fullcalendar/fullcalendar.js",
    "content": "/*!\n * FullCalendar v2.2.5\n * Docs & License: http://arshaw.com/fullcalendar/\n * (c) 2013 Adam Shaw\n */\n\n(function(factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine([ 'jquery', 'moment' ], factory);\n\t}\n\telse {\n\t\tfactory(jQuery, moment);\n\t}\n})(function($, moment) {\n\n    var defaults = {\n\n\ttitleRangeSeparator: ' \\u2014 ', // emphasized dash\n\tmonthYearFormat: 'MMMM YYYY', // required for en. other languages rely on datepicker computable option\n\n\tdefaultTimedEventDuration: '02:00:00',\n\tdefaultAllDayEventDuration: { days: 1 },\n\tforceEventDuration: false,\n\tnextDayThreshold: '09:00:00', // 9am\n\n\t// display\n\tdefaultView: 'month',\n\taspectRatio: 1.35,\n\theader: {\n\t\tleft: 'title',\n\t\tcenter: '',\n\t\tright: 'today prev,next'\n\t},\n\tweekends: true,\n\tweekNumbers: false,\n\n\tweekNumberTitle: 'W',\n\tweekNumberCalculation: 'local',\n\t\n\t//editable: false,\n\t\n\t// event ajax\n\tlazyFetching: true,\n\tstartParam: 'start',\n\tendParam: 'end',\n\ttimezoneParam: 'timezone',\n\n\ttimezone: false,\n\n\t//allDayDefault: undefined,\n\n\t// locale\n\tisRTL: false,\n\tdefaultButtonText: {\n\t\tprev: \"prev\",\n\t\tnext: \"next\",\n\t\tprevYear: \"prev year\",\n\t\tnextYear: \"next year\",\n\t\ttoday: 'today',\n\t\tmonth: 'month',\n\t\tweek: 'week',\n\t\tday: 'day'\n\t},\n\n\tbuttonIcons: {\n\t\tprev: 'left-single-arrow',\n\t\tnext: 'right-single-arrow',\n\t\tprevYear: 'left-double-arrow',\n\t\tnextYear: 'right-double-arrow'\n\t},\n\t\n\t// jquery-ui theming\n\ttheme: false,\n\tthemeButtonIcons: {\n\t\tprev: 'circle-triangle-w',\n\t\tnext: 'circle-triangle-e',\n\t\tprevYear: 'seek-prev',\n\t\tnextYear: 'seek-next'\n\t},\n\n\tdragOpacity: .75,\n\tdragRevertDuration: 500,\n\tdragScroll: true,\n\t\n\t//selectable: false,\n\tunselectAuto: true,\n\t\n\tdropAccept: '*',\n\n\teventLimit: false,\n\teventLimitText: 'more',\n\teventLimitClick: 'popover',\n\tdayPopoverFormat: 'LL',\n\t\n\thandleWindowResize: true,\n\twindowResizeDelay: 200 // milliseconds before an updateSize happens\n\t\n};\n\n\nvar englishDefaults = {\n\tdayPopoverFormat: 'dddd, MMMM D'\n};\n\n\n// right-to-left defaults\nvar rtlDefaults = {\n\theader: {\n\t\tleft: 'next,prev today',\n\t\tcenter: '',\n\t\tright: 'title'\n\t},\n\tbuttonIcons: {\n\t\tprev: 'right-single-arrow',\n\t\tnext: 'left-single-arrow',\n\t\tprevYear: 'right-double-arrow',\n\t\tnextYear: 'left-double-arrow'\n\t},\n\tthemeButtonIcons: {\n\t\tprev: 'circle-triangle-e',\n\t\tnext: 'circle-triangle-w',\n\t\tnextYear: 'seek-prev',\n\t\tprevYear: 'seek-next'\n\t}\n};\n\n    var fc = $.fullCalendar = { version: \"2.2.5\" };\nvar fcViews = fc.views = {};\n\n\n$.fn.fullCalendar = function(options) {\n\tvar args = Array.prototype.slice.call(arguments, 1); // for a possible method call\n\tvar res = this; // what this function will return (this jQuery object by default)\n\n\tthis.each(function(i, _element) { // loop each DOM element involved\n\t\tvar element = $(_element);\n\t\tvar calendar = element.data('fullCalendar'); // get the existing calendar object (if any)\n\t\tvar singleRes; // the returned value of this single method call\n\n\t\t// a method call\n\t\tif (typeof options === 'string') {\n\t\t\tif (calendar && $.isFunction(calendar[options])) {\n\t\t\t\tsingleRes = calendar[options].apply(calendar, args);\n\t\t\t\tif (!i) {\n\t\t\t\t\tres = singleRes; // record the first method call result\n\t\t\t\t}\n\t\t\t\tif (options === 'destroy') { // for the destroy method, must remove Calendar object data\n\t\t\t\t\telement.removeData('fullCalendar');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// a new calendar initialization\n\t\telse if (!calendar) { // don't initialize twice\n\t\t\tcalendar = new Calendar(element, options);\n\t\t\telement.data('fullCalendar', calendar);\n\t\t\tcalendar.render();\n\t\t}\n\t});\n\t\n\treturn res;\n};\n\n\n// function for adding/overriding defaults\nfunction setDefaults(d) {\n\tmergeOptions(defaults, d);\n}\n\n\n// Recursively combines option hash-objects.\n// Better than `$.extend(true, ...)` because arrays are not traversed/copied.\n//\n// called like:\n//     mergeOptions(target, obj1, obj2, ...)\n//\nfunction mergeOptions(target) {\n\n\tfunction mergeIntoTarget(name, value) {\n\t\tif ($.isPlainObject(value) && $.isPlainObject(target[name]) && !isForcedAtomicOption(name)) {\n\t\t\t// merge into a new object to avoid destruction\n\t\t\ttarget[name] = mergeOptions({}, target[name], value); // combine. `value` object takes precedence\n\t\t}\n\t\telse if (value !== undefined) { // only use values that are set and not undefined\n\t\t\ttarget[name] = value;\n\t\t}\n\t}\n\n\tfor (var i=1; i<arguments.length; i++) {\n\t\t$.each(arguments[i], mergeIntoTarget);\n\t}\n\n\treturn target;\n}\n\n\n// overcome sucky view-option-hash and option-merging behavior messing with options it shouldn't\nfunction isForcedAtomicOption(name) {\n\t// Any option that ends in \"Time\" or \"Duration\" is probably a Duration,\n\t// and these will commonly be specified as plain objects, which we don't want to mess up.\n\treturn /(Time|Duration)$/.test(name);\n}\n// FIX: find a different solution for view-option-hashes and have a whitelist\n// for options that can be recursively merged.\n\n    var langOptionHash = fc.langs = {}; // initialize and expose\n\n\n// TODO: document the structure and ordering of a FullCalendar lang file\n// TODO: rename everything \"lang\" to \"locale\", like what the moment project did\n\n\n// Initialize jQuery UI datepicker translations while using some of the translations\n// Will set this as the default language for datepicker.\nfc.datepickerLang = function(langCode, dpLangCode, dpOptions) {\n\n\t// get the FullCalendar internal option hash for this language. create if necessary\n\tvar fcOptions = langOptionHash[langCode] || (langOptionHash[langCode] = {});\n\n\t// transfer some simple options from datepicker to fc\n\tfcOptions.isRTL = dpOptions.isRTL;\n\tfcOptions.weekNumberTitle = dpOptions.weekHeader;\n\n\t// compute some more complex options from datepicker\n\t$.each(dpComputableOptions, function(name, func) {\n\t\tfcOptions[name] = func(dpOptions);\n\t});\n\n\t// is jQuery UI Datepicker is on the page?\n\tif ($.datepicker) {\n\n\t\t// Register the language data.\n\t\t// FullCalendar and MomentJS use language codes like \"pt-br\" but Datepicker\n\t\t// does it like \"pt-BR\" or if it doesn't have the language, maybe just \"pt\".\n\t\t// Make an alias so the language can be referenced either way.\n\t\t$.datepicker.regional[dpLangCode] =\n\t\t\t$.datepicker.regional[langCode] = // alias\n\t\t\t\tdpOptions;\n\n\t\t// Alias 'en' to the default language data. Do this every time.\n\t\t$.datepicker.regional.en = $.datepicker.regional[''];\n\n\t\t// Set as Datepicker's global defaults.\n\t\t$.datepicker.setDefaults(dpOptions);\n\t}\n};\n\n\n// Sets FullCalendar-specific translations. Will set the language as the global default.\nfc.lang = function(langCode, newFcOptions) {\n\tvar fcOptions;\n\tvar momOptions;\n\n\t// get the FullCalendar internal option hash for this language. create if necessary\n\tfcOptions = langOptionHash[langCode] || (langOptionHash[langCode] = {});\n\n\t// provided new options for this language? merge them in\n\tif (newFcOptions) {\n\t\tmergeOptions(fcOptions, newFcOptions);\n\t}\n\n\t// compute language options that weren't defined.\n\t// always do this. newFcOptions can be undefined when initializing from i18n file,\n\t// so no way to tell if this is an initialization or a default-setting.\n\tmomOptions = getMomentLocaleData(langCode); // will fall back to en\n\t$.each(momComputableOptions, function(name, func) {\n\t\tif (fcOptions[name] === undefined) {\n\t\t\tfcOptions[name] = func(momOptions, fcOptions);\n\t\t}\n\t});\n\n\t// set it as the default language for FullCalendar\n\tdefaults.lang = langCode;\n};\n\n\n// NOTE: can't guarantee any of these computations will run because not every language has datepicker\n// configs, so make sure there are English fallbacks for these in the defaults file.\nvar dpComputableOptions = {\n\n\tdefaultButtonText: function(dpOptions) {\n\t\treturn {\n\t\t\t// the translations sometimes wrongly contain HTML entities\n\t\t\tprev: stripHtmlEntities(dpOptions.prevText),\n\t\t\tnext: stripHtmlEntities(dpOptions.nextText),\n\t\t\ttoday: stripHtmlEntities(dpOptions.currentText)\n\t\t};\n\t},\n\n\t// Produces format strings like \"MMMM YYYY\" -> \"September 2014\"\n\tmonthYearFormat: function(dpOptions) {\n\t\treturn dpOptions.showMonthAfterYear ?\n\t\t\t'YYYY[' + dpOptions.yearSuffix + '] MMMM' :\n\t\t\t'MMMM YYYY[' + dpOptions.yearSuffix + ']';\n\t}\n\n};\n\nvar momComputableOptions = {\n\n\t// Produces format strings like \"ddd MM/DD\" -> \"Fri 12/10\"\n\tdayOfMonthFormat: function(momOptions, fcOptions) {\n\t\tvar format = momOptions.longDateFormat('l'); // for the format like \"M/D/YYYY\"\n\n\t\t// strip the year off the edge, as well as other misc non-whitespace chars\n\t\tformat = format.replace(/^Y+[^\\w\\s]*|[^\\w\\s]*Y+$/g, '');\n\n\t\tif (fcOptions.isRTL) {\n\t\t\tformat += ' ddd'; // for RTL, add day-of-week to end\n\t\t}\n\t\telse {\n\t\t\tformat = 'ddd ' + format; // for LTR, add day-of-week to beginning\n\t\t}\n\t\treturn format;\n\t},\n\n\t// Produces format strings like \"H(:mm)a\" -> \"6pm\" or \"6:30pm\"\n\tsmallTimeFormat: function(momOptions) {\n\t\treturn momOptions.longDateFormat('LT')\n\t\t\t.replace(':mm', '(:mm)')\n\t\t\t.replace(/(\\Wmm)$/, '($1)') // like above, but for foreign langs\n\t\t\t.replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\n\t},\n\n\t// Produces format strings like \"H(:mm)t\" -> \"6p\" or \"6:30p\"\n\textraSmallTimeFormat: function(momOptions) {\n\t\treturn momOptions.longDateFormat('LT')\n\t\t\t.replace(':mm', '(:mm)')\n\t\t\t.replace(/(\\Wmm)$/, '($1)') // like above, but for foreign langs\n\t\t\t.replace(/\\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand\n\t},\n\n\t// Produces format strings like \"H:mm\" -> \"6:30\" (with no AM/PM)\n\tnoMeridiemTimeFormat: function(momOptions) {\n\t\treturn momOptions.longDateFormat('LT')\n\t\t\t.replace(/\\s*a$/i, ''); // remove trailing AM/PM\n\t}\n\n};\n\n\n// Returns moment's internal locale data. If doesn't exist, returns English.\n// Works with moment-pre-2.8\nfunction getMomentLocaleData(langCode) {\n\tvar func = moment.localeData || moment.langData;\n\treturn func.call(moment, langCode) ||\n\t\tfunc.call(moment, 'en'); // the newer localData could return null, so fall back to en\n}\n\n\n// Initialize English by forcing computation of moment-derived options.\n// Also, sets it as the default.\nfc.lang('en', englishDefaults);\n\n// exports\nfc.intersectionToSeg = intersectionToSeg;\nfc.applyAll = applyAll;\nfc.debounce = debounce;\n\n\n/* FullCalendar-specific DOM Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\n// Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left\n// and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that.\nfunction compensateScroll(rowEls, scrollbarWidths) {\n\tif (scrollbarWidths.left) {\n\t\trowEls.css({\n\t\t\t'border-left-width': 1,\n\t\t\t'margin-left': scrollbarWidths.left - 1\n\t\t});\n\t}\n\tif (scrollbarWidths.right) {\n\t\trowEls.css({\n\t\t\t'border-right-width': 1,\n\t\t\t'margin-right': scrollbarWidths.right - 1\n\t\t});\n\t}\n}\n\n\n// Undoes compensateScroll and restores all borders/margins\nfunction uncompensateScroll(rowEls) {\n\trowEls.css({\n\t\t'margin-left': '',\n\t\t'margin-right': '',\n\t\t'border-left-width': '',\n\t\t'border-right-width': ''\n\t});\n}\n\n\n// Make the mouse cursor express that an event is not allowed in the current area\nfunction disableCursor() {\n\t$('body').addClass('fc-not-allowed');\n}\n\n\n// Returns the mouse cursor to its original look\nfunction enableCursor() {\n\t$('body').removeClass('fc-not-allowed');\n}\n\n\n// Given a total available height to fill, have `els` (essentially child rows) expand to accomodate.\n// By default, all elements that are shorter than the recommended height are expanded uniformly, not considering\n// any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and \n// reduces the available height.\nfunction distributeHeight(els, availableHeight, shouldRedistribute) {\n\n\t// *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions,\n\t// and it is better to be shorter than taller, to avoid creating unnecessary scrollbars.\n\n\tvar minOffset1 = Math.floor(availableHeight / els.length); // for non-last element\n\tvar minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE*\n\tvar flexEls = []; // elements that are allowed to expand. array of DOM nodes\n\tvar flexOffsets = []; // amount of vertical space it takes up\n\tvar flexHeights = []; // actual css height\n\tvar usedHeight = 0;\n\n\tundistributeHeight(els); // give all elements their natural height\n\n\t// find elements that are below the recommended height (expandable).\n\t// important to query for heights in a single first pass (to avoid reflow oscillation).\n\tels.each(function(i, el) {\n\t\tvar minOffset = i === els.length - 1 ? minOffset2 : minOffset1;\n\t\tvar naturalOffset = $(el).outerHeight(true);\n\n\t\tif (naturalOffset < minOffset) {\n\t\t\tflexEls.push(el);\n\t\t\tflexOffsets.push(naturalOffset);\n\t\t\tflexHeights.push($(el).height());\n\t\t}\n\t\telse {\n\t\t\t// this element stretches past recommended height (non-expandable). mark the space as occupied.\n\t\t\tusedHeight += naturalOffset;\n\t\t}\n\t});\n\n\t// readjust the recommended height to only consider the height available to non-maxed-out rows.\n\tif (shouldRedistribute) {\n\t\tavailableHeight -= usedHeight;\n\t\tminOffset1 = Math.floor(availableHeight / flexEls.length);\n\t\tminOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE*\n\t}\n\n\t// assign heights to all expandable elements\n\t$(flexEls).each(function(i, el) {\n\t\tvar minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1;\n\t\tvar naturalOffset = flexOffsets[i];\n\t\tvar naturalHeight = flexHeights[i];\n\t\tvar newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding\n\n\t\tif (naturalOffset < minOffset) { // we check this again because redistribution might have changed things\n\t\t\t$(el).height(newHeight);\n\t\t}\n\t});\n}\n\n\n// Undoes distrubuteHeight, restoring all els to their natural height\nfunction undistributeHeight(els) {\n\tels.height('');\n}\n\n\n// Given `els`, a jQuery set of <td> cells, find the cell with the largest natural width and set the widths of all the\n// cells to be that width.\n// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline\nfunction matchCellWidths(els) {\n\tvar maxInnerWidth = 0;\n\n\tels.find('> *').each(function(i, innerEl) {\n\t\tvar innerWidth = $(innerEl).outerWidth();\n\t\tif (innerWidth > maxInnerWidth) {\n\t\t\tmaxInnerWidth = innerWidth;\n\t\t}\n\t});\n\n\tmaxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance\n\n\tels.width(maxInnerWidth);\n\n\treturn maxInnerWidth;\n}\n\n\n// Turns a container element into a scroller if its contents is taller than the allotted height.\n// Returns true if the element is now a scroller, false otherwise.\n// NOTE: this method is best because it takes weird zooming dimensions into account\nfunction setPotentialScroller(containerEl, height) {\n\tcontainerEl.height(height).addClass('fc-scroller');\n\n\t// are scrollbars needed?\n\tif (containerEl[0].scrollHeight - 1 > containerEl[0].clientHeight) { // !!! -1 because IE is often off-by-one :(\n\t\treturn true;\n\t}\n\n\tunsetScroller(containerEl); // undo\n\treturn false;\n}\n\n\n// Takes an element that might have been a scroller, and turns it back into a normal element.\nfunction unsetScroller(containerEl) {\n\tcontainerEl.height('').removeClass('fc-scroller');\n}\n\n\n/* General DOM Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\n// borrowed from https://github.com/jquery/jquery-ui/blob/1.11.0/ui/core.js#L51\nfunction getScrollParent(el) {\n\tvar position = el.css('position'),\n\t\tscrollParent = el.parents().filter(function() {\n\t\t\tvar parent = $(this);\n\t\t\treturn (/(auto|scroll)/).test(\n\t\t\t\tparent.css('overflow') + parent.css('overflow-y') + parent.css('overflow-x')\n\t\t\t);\n\t\t}).eq(0);\n\n\treturn position === 'fixed' || !scrollParent.length ? $(el[0].ownerDocument || document) : scrollParent;\n}\n\n\n// Given a container element, return an object with the pixel values of the left/right scrollbars.\n// Left scrollbars might occur on RTL browsers (IE maybe?) but I have not tested.\n// PREREQUISITE: container element must have a single child with display:block\nfunction getScrollbarWidths(container) {\n\tvar containerLeft = container.offset().left;\n\tvar containerRight = containerLeft + container.width();\n\tvar inner = container.children();\n\tvar innerLeft = inner.offset().left;\n\tvar innerRight = innerLeft + inner.outerWidth();\n\n\treturn {\n\t\tleft: innerLeft - containerLeft,\n\t\tright: containerRight - innerRight\n\t};\n}\n\n\n// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\nfunction isPrimaryMouseButton(ev) {\n\treturn ev.which == 1 && !ev.ctrlKey;\n}\n\n\n/* FullCalendar-specific Misc Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\n// Creates a basic segment with the intersection of the two ranges. Returns undefined if no intersection.\n// Expects all dates to be normalized to the same timezone beforehand.\n// TODO: move to date section?\nfunction intersectionToSeg(subjectRange, constraintRange) {\n\tvar subjectStart = subjectRange.start;\n\tvar subjectEnd = subjectRange.end;\n\tvar constraintStart = constraintRange.start;\n\tvar constraintEnd = constraintRange.end;\n\tvar segStart, segEnd;\n\tvar isStart, isEnd;\n\n\tif (subjectEnd > constraintStart && subjectStart < constraintEnd) { // in bounds at all?\n\n\t\tif (subjectStart >= constraintStart) {\n\t\t\tsegStart = subjectStart.clone();\n\t\t\tisStart = true;\n\t\t}\n\t\telse {\n\t\t\tsegStart = constraintStart.clone();\n\t\t\tisStart =  false;\n\t\t}\n\n\t\tif (subjectEnd <= constraintEnd) {\n\t\t\tsegEnd = subjectEnd.clone();\n\t\t\tisEnd = true;\n\t\t}\n\t\telse {\n\t\t\tsegEnd = constraintEnd.clone();\n\t\t\tisEnd = false;\n\t\t}\n\n\t\treturn {\n\t\t\tstart: segStart,\n\t\t\tend: segEnd,\n\t\t\tisStart: isStart,\n\t\t\tisEnd: isEnd\n\t\t};\n\t}\n}\n\n\nfunction smartProperty(obj, name) { // get a camel-cased/namespaced property of an object\n\tobj = obj || {};\n\tif (obj[name] !== undefined) {\n\t\treturn obj[name];\n\t}\n\tvar parts = name.split(/(?=[A-Z])/),\n\t\ti = parts.length - 1, res;\n\tfor (; i>=0; i--) {\n\t\tres = obj[parts[i].toLowerCase()];\n\t\tif (res !== undefined) {\n\t\t\treturn res;\n\t\t}\n\t}\n\treturn obj['default'];\n}\n\n\n/* Date Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar dayIDs = [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat' ];\nvar intervalUnits = [ 'year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond' ];\n\n\n// Diffs the two moments into a Duration where full-days are recorded first, then the remaining time.\n// Moments will have their timezones normalized.\nfunction diffDayTime(a, b) {\n\treturn moment.duration({\n\t\tdays: a.clone().stripTime().diff(b.clone().stripTime(), 'days'),\n\t\tms: a.time() - b.time() // time-of-day from day start. disregards timezone\n\t});\n}\n\n\n// Diffs the two moments via their start-of-day (regardless of timezone). Produces whole-day durations.\nfunction diffDay(a, b) {\n\treturn moment.duration({\n\t\tdays: a.clone().stripTime().diff(b.clone().stripTime(), 'days')\n\t});\n}\n\n\n// Computes the larges whole-unit period of time, as a duration object.\n// For example, 48 hours will be {days:2} whereas 49 hours will be {hours:49}.\n// Accepts start/end, a range object, or an original duration object.\n/* (never used)\nfunction computeIntervalDuration(start, end) {\n\tvar durationInput = {};\n\tvar i, unit;\n\tvar val;\n\n\tfor (i = 0; i < intervalUnits.length; i++) {\n\t\tunit = intervalUnits[i];\n\t\tval = computeIntervalAs(unit, start, end);\n\t\tif (val) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tdurationInput[unit] = val;\n\treturn moment.duration(durationInput);\n}\n*/\n\n\n// Computes the unit name of the largest whole-unit period of time.\n// For example, 48 hours will be \"days\" wherewas 49 hours will be \"hours\".\n// Accepts start/end, a range object, or an original duration object.\nfunction computeIntervalUnit(start, end) {\n\tvar i, unit;\n\n\tfor (i = 0; i < intervalUnits.length; i++) {\n\t\tunit = intervalUnits[i];\n\t\tif (computeIntervalAs(unit, start, end)) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn unit; // will be \"milliseconds\" if nothing else matches\n}\n\n\n// Computes the number of units the interval is cleanly comprised of.\n// If the given unit does not cleanly divide the interval a whole number of times, `false` is returned.\n// Accepts start/end, a range object, or an original duration object.\nfunction computeIntervalAs(unit, start, end) {\n\tvar val;\n\n\tif (end != null) { // given start, end\n\t\tval = end.diff(start, unit, true);\n\t}\n\telse if (moment.isDuration(start)) { // given duration\n\t\tval = start.as(unit);\n\t}\n\telse { // given { start, end } range object\n\t\tval = start.end.diff(start.start, unit, true);\n\t}\n\n\tif (val >= 1 && isInt(val)) {\n\t\treturn val;\n\t}\n\n\treturn false;\n}\n\n\nfunction isNativeDate(input) {\n\treturn  Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date;\n}\n\n\n// Returns a boolean about whether the given input is a time string, like \"06:40:00\" or \"06:00\"\nfunction isTimeString(str) {\n\treturn /^\\d+\\:\\d+(?:\\:\\d+\\.?(?:\\d{3})?)?$/.test(str);\n}\n\n\n/* General Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar hasOwnPropMethod = {}.hasOwnProperty;\n\n\n// Create an object that has the given prototype. Just like Object.create\nfunction createObject(proto) {\n\tvar f = function() {};\n\tf.prototype = proto;\n\treturn new f();\n}\n\n\nfunction copyOwnProps(src, dest) {\n\tfor (var name in src) {\n\t\tif (hasOwnProp(src, name)) {\n\t\t\tdest[name] = src[name];\n\t\t}\n\t}\n}\n\n\nfunction hasOwnProp(obj, name) {\n\treturn hasOwnPropMethod.call(obj, name);\n}\n\n\n// Is the given value a non-object non-function value?\nfunction isAtomic(val) {\n\treturn /undefined|null|boolean|number|string/.test($.type(val));\n}\n\n\nfunction applyAll(functions, thisObj, args) {\n\tif ($.isFunction(functions)) {\n\t\tfunctions = [ functions ];\n\t}\n\tif (functions) {\n\t\tvar i;\n\t\tvar ret;\n\t\tfor (i=0; i<functions.length; i++) {\n\t\t\tret = functions[i].apply(thisObj, args) || ret;\n\t\t}\n\t\treturn ret;\n\t}\n}\n\n\nfunction firstDefined() {\n\tfor (var i=0; i<arguments.length; i++) {\n\t\tif (arguments[i] !== undefined) {\n\t\t\treturn arguments[i];\n\t\t}\n\t}\n}\n\n\nfunction htmlEscape(s) {\n\treturn (s + '').replace(/&/g, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/'/g, '&#039;')\n\t\t.replace(/\"/g, '&quot;')\n\t\t.replace(/\\n/g, '<br />');\n}\n\n\nfunction stripHtmlEntities(text) {\n\treturn text.replace(/&.*?;/g, '');\n}\n\n\nfunction capitaliseFirstLetter(str) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nfunction compareNumbers(a, b) { // for .sort()\n\treturn a - b;\n}\n\n\nfunction isInt(n) {\n\treturn n % 1 === 0;\n}\n\n\n// Returns a function, that, as long as it continues to be invoked, will not\n// be triggered. The function will be called after it stops being called for\n// N milliseconds.\n// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714\nfunction debounce(func, wait) {\n\tvar timeoutId;\n\tvar args;\n\tvar context;\n\tvar timestamp; // of most recent call\n\tvar later = function() {\n\t\tvar last = +new Date() - timestamp;\n\t\tif (last < wait && last > 0) {\n\t\t\ttimeoutId = setTimeout(later, wait - last);\n\t\t}\n\t\telse {\n\t\t\ttimeoutId = null;\n\t\t\tfunc.apply(context, args);\n\t\t\tif (!timeoutId) {\n\t\t\t\tcontext = args = null;\n\t\t\t}\n\t\t}\n\t};\n\n\treturn function() {\n\t\tcontext = this;\n\t\targs = arguments;\n\t\ttimestamp = +new Date();\n\t\tif (!timeoutId) {\n\t\t\ttimeoutId = setTimeout(later, wait);\n\t\t}\n\t};\n}\n\n    var ambigDateOfMonthRegex = /^\\s*\\d{4}-\\d\\d$/;\nvar ambigTimeOrZoneRegex =\n\t/^\\s*\\d{4}-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?)?$/;\nvar newMomentProto = moment.fn; // where we will attach our new methods\nvar oldMomentProto = $.extend({}, newMomentProto); // copy of original moment methods\nvar allowValueOptimization;\nvar setUTCValues; // function defined below\nvar setLocalValues; // function defined below\n\n\n// Creating\n// -------------------------------------------------------------------------------------------------\n\n// Creates a new moment, similar to the vanilla moment(...) constructor, but with\n// extra features (ambiguous time, enhanced formatting). When given an existing moment,\n// it will function as a clone (and retain the zone of the moment). Anything else will\n// result in a moment in the local zone.\nfc.moment = function() {\n\treturn makeMoment(arguments);\n};\n\n// Sames as fc.moment, but forces the resulting moment to be in the UTC timezone.\nfc.moment.utc = function() {\n\tvar mom = makeMoment(arguments, true);\n\n\t// Force it into UTC because makeMoment doesn't guarantee it\n\t// (if given a pre-existing moment for example)\n\tif (mom.hasTime()) { // don't give ambiguously-timed moments a UTC zone\n\t\tmom.utc();\n\t}\n\n\treturn mom;\n};\n\n// Same as fc.moment, but when given an ISO8601 string, the timezone offset is preserved.\n// ISO8601 strings with no timezone offset will become ambiguously zoned.\nfc.moment.parseZone = function() {\n\treturn makeMoment(arguments, true, true);\n};\n\n// Builds an enhanced moment from args. When given an existing moment, it clones. When given a\n// native Date, or called with no arguments (the current time), the resulting moment will be local.\n// Anything else needs to be \"parsed\" (a string or an array), and will be affected by:\n//    parseAsUTC - if there is no zone information, should we parse the input in UTC?\n//    parseZone - if there is zone information, should we force the zone of the moment?\nfunction makeMoment(args, parseAsUTC, parseZone) {\n\tvar input = args[0];\n\tvar isSingleString = args.length == 1 && typeof input === 'string';\n\tvar isAmbigTime;\n\tvar isAmbigZone;\n\tvar ambigMatch;\n\tvar mom;\n\n\tif (moment.isMoment(input)) {\n\t\tmom = moment.apply(null, args); // clone it\n\t\ttransferAmbigs(input, mom); // the ambig flags weren't transfered with the clone\n\t}\n\telse if (isNativeDate(input) || input === undefined) {\n\t\tmom = moment.apply(null, args); // will be local\n\t}\n\telse { // \"parsing\" is required\n\t\tisAmbigTime = false;\n\t\tisAmbigZone = false;\n\n\t\tif (isSingleString) {\n\t\t\tif (ambigDateOfMonthRegex.test(input)) {\n\t\t\t\t// accept strings like '2014-05', but convert to the first of the month\n\t\t\t\tinput += '-01';\n\t\t\t\targs = [ input ]; // for when we pass it on to moment's constructor\n\t\t\t\tisAmbigTime = true;\n\t\t\t\tisAmbigZone = true;\n\t\t\t}\n\t\t\telse if ((ambigMatch = ambigTimeOrZoneRegex.exec(input))) {\n\t\t\t\tisAmbigTime = !ambigMatch[5]; // no time part?\n\t\t\t\tisAmbigZone = true;\n\t\t\t}\n\t\t}\n\t\telse if ($.isArray(input)) {\n\t\t\t// arrays have no timezone information, so assume ambiguous zone\n\t\t\tisAmbigZone = true;\n\t\t}\n\t\t// otherwise, probably a string with a format\n\n\t\tif (parseAsUTC || isAmbigTime) {\n\t\t\tmom = moment.utc.apply(moment, args);\n\t\t}\n\t\telse {\n\t\t\tmom = moment.apply(null, args);\n\t\t}\n\n\t\tif (isAmbigTime) {\n\t\t\tmom._ambigTime = true;\n\t\t\tmom._ambigZone = true; // ambiguous time always means ambiguous zone\n\t\t}\n\t\telse if (parseZone) { // let's record the inputted zone somehow\n\t\t\tif (isAmbigZone) {\n\t\t\t\tmom._ambigZone = true;\n\t\t\t}\n\t\t\telse if (isSingleString) {\n\t\t\t\tmom.zone(input); // if not a valid zone, will assign UTC\n\t\t\t}\n\t\t}\n\t}\n\n\tmom._fullCalendar = true; // flag for extended functionality\n\n\treturn mom;\n}\n\n\n// A clone method that works with the flags related to our enhanced functionality.\n// In the future, use moment.momentProperties\nnewMomentProto.clone = function() {\n\tvar mom = oldMomentProto.clone.apply(this, arguments);\n\n\t// these flags weren't transfered with the clone\n\ttransferAmbigs(this, mom);\n\tif (this._fullCalendar) {\n\t\tmom._fullCalendar = true;\n\t}\n\n\treturn mom;\n};\n\n\n// Time-of-day\n// -------------------------------------------------------------------------------------------------\n\n// GETTER\n// Returns a Duration with the hours/minutes/seconds/ms values of the moment.\n// If the moment has an ambiguous time, a duration of 00:00 will be returned.\n//\n// SETTER\n// You can supply a Duration, a Moment, or a Duration-like argument.\n// When setting the time, and the moment has an ambiguous time, it then becomes unambiguous.\nnewMomentProto.time = function(time) {\n\n\t// Fallback to the original method (if there is one) if this moment wasn't created via FullCalendar.\n\t// `time` is a generic enough method name where this precaution is necessary to avoid collisions w/ other plugins.\n\tif (!this._fullCalendar) {\n\t\treturn oldMomentProto.time.apply(this, arguments);\n\t}\n\n\tif (time == null) { // getter\n\t\treturn moment.duration({\n\t\t\thours: this.hours(),\n\t\t\tminutes: this.minutes(),\n\t\t\tseconds: this.seconds(),\n\t\t\tmilliseconds: this.milliseconds()\n\t\t});\n\t}\n\telse { // setter\n\n\t\tthis._ambigTime = false; // mark that the moment now has a time\n\n\t\tif (!moment.isDuration(time) && !moment.isMoment(time)) {\n\t\t\ttime = moment.duration(time);\n\t\t}\n\n\t\t// The day value should cause overflow (so 24 hours becomes 00:00:00 of next day).\n\t\t// Only for Duration times, not Moment times.\n\t\tvar dayHours = 0;\n\t\tif (moment.isDuration(time)) {\n\t\t\tdayHours = Math.floor(time.asDays()) * 24;\n\t\t}\n\n\t\t// We need to set the individual fields.\n\t\t// Can't use startOf('day') then add duration. In case of DST at start of day.\n\t\treturn this.hours(dayHours + time.hours())\n\t\t\t.minutes(time.minutes())\n\t\t\t.seconds(time.seconds())\n\t\t\t.milliseconds(time.milliseconds());\n\t}\n};\n\n// Converts the moment to UTC, stripping out its time-of-day and timezone offset,\n// but preserving its YMD. A moment with a stripped time will display no time\n// nor timezone offset when .format() is called.\nnewMomentProto.stripTime = function() {\n\tvar a;\n\n\tif (!this._ambigTime) {\n\n\t\t// get the values before any conversion happens\n\t\ta = this.toArray(); // array of y/m/d/h/m/s/ms\n\n\t\tthis.utc(); // set the internal UTC flag (will clear the ambig flags)\n\t\tsetUTCValues(this, a.slice(0, 3)); // set the year/month/date. time will be zero\n\n\t\t// Mark the time as ambiguous. This needs to happen after the .utc() call, which calls .zone(),\n\t\t// which clears all ambig flags. Same with setUTCValues with moment-timezone.\n\t\tthis._ambigTime = true;\n\t\tthis._ambigZone = true; // if ambiguous time, also ambiguous timezone offset\n\t}\n\n\treturn this; // for chaining\n};\n\n// Returns if the moment has a non-ambiguous time (boolean)\nnewMomentProto.hasTime = function() {\n\treturn !this._ambigTime;\n};\n\n\n// Timezone\n// -------------------------------------------------------------------------------------------------\n\n// Converts the moment to UTC, stripping out its timezone offset, but preserving its\n// YMD and time-of-day. A moment with a stripped timezone offset will display no\n// timezone offset when .format() is called.\nnewMomentProto.stripZone = function() {\n\tvar a, wasAmbigTime;\n\n\tif (!this._ambigZone) {\n\n\t\t// get the values before any conversion happens\n\t\ta = this.toArray(); // array of y/m/d/h/m/s/ms\n\t\twasAmbigTime = this._ambigTime;\n\n\t\tthis.utc(); // set the internal UTC flag (will clear the ambig flags)\n\t\tsetUTCValues(this, a); // will set the year/month/date/hours/minutes/seconds/ms\n\n\t\tif (wasAmbigTime) {\n\t\t\t// the above call to .utc()/.zone() unfortunately clears the ambig flags, so reassign\n\t\t\tthis._ambigTime = true;\n\t\t}\n\n\t\t// Mark the zone as ambiguous. This needs to happen after the .utc() call, which calls .zone(),\n\t\t// which clears all ambig flags. Same with setUTCValues with moment-timezone.\n\t\tthis._ambigZone = true;\n\t}\n\n\treturn this; // for chaining\n};\n\n// Returns of the moment has a non-ambiguous timezone offset (boolean)\nnewMomentProto.hasZone = function() {\n\treturn !this._ambigZone;\n};\n\n// this method implicitly marks a zone (will get called upon .utc() and .local())\nnewMomentProto.zone = function(tzo) {\n\n\tif (tzo != null) { // setter\n\t\t// these assignments needs to happen before the original zone method is called.\n\t\t// I forget why, something to do with a browser crash.\n\t\tthis._ambigTime = false;\n\t\tthis._ambigZone = false;\n\t}\n\n\treturn oldMomentProto.zone.apply(this, arguments);\n};\n\n// this method implicitly marks a zone\nnewMomentProto.local = function() {\n\tvar a = this.toArray(); // year,month,date,hours,minutes,seconds,ms as an array\n\tvar wasAmbigZone = this._ambigZone;\n\n\toldMomentProto.local.apply(this, arguments); // will clear ambig flags\n\n\tif (wasAmbigZone) {\n\t\t// If the moment was ambiguously zoned, the date fields were stored as UTC.\n\t\t// We want to preserve these, but in local time.\n\t\tsetLocalValues(this, a);\n\t}\n\n\treturn this; // for chaining\n};\n\n\n// Formatting\n// -------------------------------------------------------------------------------------------------\n\nnewMomentProto.format = function() {\n\tif (this._fullCalendar && arguments[0]) { // an enhanced moment? and a format string provided?\n\t\treturn formatDate(this, arguments[0]); // our extended formatting\n\t}\n\tif (this._ambigTime) {\n\t\treturn oldMomentFormat(this, 'YYYY-MM-DD');\n\t}\n\tif (this._ambigZone) {\n\t\treturn oldMomentFormat(this, 'YYYY-MM-DD[T]HH:mm:ss');\n\t}\n\treturn oldMomentProto.format.apply(this, arguments);\n};\n\nnewMomentProto.toISOString = function() {\n\tif (this._ambigTime) {\n\t\treturn oldMomentFormat(this, 'YYYY-MM-DD');\n\t}\n\tif (this._ambigZone) {\n\t\treturn oldMomentFormat(this, 'YYYY-MM-DD[T]HH:mm:ss');\n\t}\n\treturn oldMomentProto.toISOString.apply(this, arguments);\n};\n\n\n// Querying\n// -------------------------------------------------------------------------------------------------\n\n// Is the moment within the specified range? `end` is exclusive.\n// FYI, this method is not a standard Moment method, so always do our enhanced logic.\nnewMomentProto.isWithin = function(start, end) {\n\tvar a = commonlyAmbiguate([ this, start, end ]);\n\treturn a[0] >= a[1] && a[0] < a[2];\n};\n\n// When isSame is called with units, timezone ambiguity is normalized before the comparison happens.\n// If no units specified, the two moments must be identically the same, with matching ambig flags.\nnewMomentProto.isSame = function(input, units) {\n\tvar a;\n\n\t// only do custom logic if this is an enhanced moment\n\tif (!this._fullCalendar) {\n\t\treturn oldMomentProto.isSame.apply(this, arguments);\n\t}\n\n\tif (units) {\n\t\ta = commonlyAmbiguate([ this, input ], true); // normalize timezones but don't erase times\n\t\treturn oldMomentProto.isSame.call(a[0], a[1], units);\n\t}\n\telse {\n\t\tinput = fc.moment.parseZone(input); // normalize input\n\t\treturn oldMomentProto.isSame.call(this, input) &&\n\t\t\tBoolean(this._ambigTime) === Boolean(input._ambigTime) &&\n\t\t\tBoolean(this._ambigZone) === Boolean(input._ambigZone);\n\t}\n};\n\n// Make these query methods work with ambiguous moments\n$.each([\n\t'isBefore',\n\t'isAfter'\n], function(i, methodName) {\n\tnewMomentProto[methodName] = function(input, units) {\n\t\tvar a;\n\n\t\t// only do custom logic if this is an enhanced moment\n\t\tif (!this._fullCalendar) {\n\t\t\treturn oldMomentProto[methodName].apply(this, arguments);\n\t\t}\n\n\t\ta = commonlyAmbiguate([ this, input ]);\n\t\treturn oldMomentProto[methodName].call(a[0], a[1], units);\n\t};\n});\n\n\n// Misc Internals\n// -------------------------------------------------------------------------------------------------\n\n// given an array of moment-like inputs, return a parallel array w/ moments similarly ambiguated.\n// for example, of one moment has ambig time, but not others, all moments will have their time stripped.\n// set `preserveTime` to `true` to keep times, but only normalize zone ambiguity.\n// returns the original moments if no modifications are necessary.\nfunction commonlyAmbiguate(inputs, preserveTime) {\n\tvar anyAmbigTime = false;\n\tvar anyAmbigZone = false;\n\tvar len = inputs.length;\n\tvar moms = [];\n\tvar i, mom;\n\n\t// parse inputs into real moments and query their ambig flags\n\tfor (i = 0; i < len; i++) {\n\t\tmom = inputs[i];\n\t\tif (!moment.isMoment(mom)) {\n\t\t\tmom = fc.moment.parseZone(mom);\n\t\t}\n\t\tanyAmbigTime = anyAmbigTime || mom._ambigTime;\n\t\tanyAmbigZone = anyAmbigZone || mom._ambigZone;\n\t\tmoms.push(mom);\n\t}\n\n\t// strip each moment down to lowest common ambiguity\n\t// use clones to avoid modifying the original moments\n\tfor (i = 0; i < len; i++) {\n\t\tmom = moms[i];\n\t\tif (!preserveTime && anyAmbigTime && !mom._ambigTime) {\n\t\t\tmoms[i] = mom.clone().stripTime();\n\t\t}\n\t\telse if (anyAmbigZone && !mom._ambigZone) {\n\t\t\tmoms[i] = mom.clone().stripZone();\n\t\t}\n\t}\n\n\treturn moms;\n}\n\n// Transfers all the flags related to ambiguous time/zone from the `src` moment to the `dest` moment\nfunction transferAmbigs(src, dest) {\n\tif (src._ambigTime) {\n\t\tdest._ambigTime = true;\n\t}\n\telse if (dest._ambigTime) {\n\t\tdest._ambigTime = false;\n\t}\n\n\tif (src._ambigZone) {\n\t\tdest._ambigZone = true;\n\t}\n\telse if (dest._ambigZone) {\n\t\tdest._ambigZone = false;\n\t}\n}\n\n\n// Sets the year/month/date/etc values of the moment from the given array.\n// Inefficient because it calls each individual setter.\nfunction setMomentValues(mom, a) {\n\tmom.year(a[0] || 0)\n\t\t.month(a[1] || 0)\n\t\t.date(a[2] || 0)\n\t\t.hours(a[3] || 0)\n\t\t.minutes(a[4] || 0)\n\t\t.seconds(a[5] || 0)\n\t\t.milliseconds(a[6] || 0);\n}\n\n// Can we set the moment's internal date directly?\nallowValueOptimization = '_d' in moment() && 'updateOffset' in moment;\n\n// Utility function. Accepts a moment and an array of the UTC year/month/date/etc values to set.\n// Assumes the given moment is already in UTC mode.\nsetUTCValues = allowValueOptimization ? function(mom, a) {\n\t// simlate what moment's accessors do\n\tmom._d.setTime(Date.UTC.apply(Date, a));\n\tmoment.updateOffset(mom, false); // keepTime=false\n} : setMomentValues;\n\n// Utility function. Accepts a moment and an array of the local year/month/date/etc values to set.\n// Assumes the given moment is already in local mode.\nsetLocalValues = allowValueOptimization ? function(mom, a) {\n\t// simlate what moment's accessors do\n\tmom._d.setTime(+new Date( // FYI, there is now way to apply an array of args to a constructor\n\t\ta[0] || 0,\n\t\ta[1] || 0,\n\t\ta[2] || 0,\n\t\ta[3] || 0,\n\t\ta[4] || 0,\n\t\ta[5] || 0,\n\t\ta[6] || 0\n\t));\n\tmoment.updateOffset(mom, false); // keepTime=false\n} : setMomentValues;\n\n// Single Date Formatting\n// -------------------------------------------------------------------------------------------------\n\n\n// call this if you want Moment's original format method to be used\nfunction oldMomentFormat(mom, formatStr) {\n\treturn oldMomentProto.format.call(mom, formatStr); // oldMomentProto defined in moment-ext.js\n}\n\n\n// Formats `date` with a Moment formatting string, but allow our non-zero areas and\n// additional token.\nfunction formatDate(date, formatStr) {\n\treturn formatDateWithChunks(date, getFormatStringChunks(formatStr));\n}\n\n\nfunction formatDateWithChunks(date, chunks) {\n\tvar s = '';\n\tvar i;\n\n\tfor (i=0; i<chunks.length; i++) {\n\t\ts += formatDateWithChunk(date, chunks[i]);\n\t}\n\n\treturn s;\n}\n\n\n// addition formatting tokens we want recognized\nvar tokenOverrides = {\n\tt: function(date) { // \"a\" or \"p\"\n\t\treturn oldMomentFormat(date, 'a').charAt(0);\n\t},\n\tT: function(date) { // \"A\" or \"P\"\n\t\treturn oldMomentFormat(date, 'A').charAt(0);\n\t}\n};\n\n\nfunction formatDateWithChunk(date, chunk) {\n\tvar token;\n\tvar maybeStr;\n\n\tif (typeof chunk === 'string') { // a literal string\n\t\treturn chunk;\n\t}\n\telse if ((token = chunk.token)) { // a token, like \"YYYY\"\n\t\tif (tokenOverrides[token]) {\n\t\t\treturn tokenOverrides[token](date); // use our custom token\n\t\t}\n\t\treturn oldMomentFormat(date, token);\n\t}\n\telse if (chunk.maybe) { // a grouping of other chunks that must be non-zero\n\t\tmaybeStr = formatDateWithChunks(date, chunk.maybe);\n\t\tif (maybeStr.match(/[1-9]/)) {\n\t\t\treturn maybeStr;\n\t\t}\n\t}\n\n\treturn '';\n}\n\n\n// Date Range Formatting\n// -------------------------------------------------------------------------------------------------\n// TODO: make it work with timezone offset\n\n// Using a formatting string meant for a single date, generate a range string, like\n// \"Sep 2 - 9 2013\", that intelligently inserts a separator where the dates differ.\n// If the dates are the same as far as the format string is concerned, just return a single\n// rendering of one date, without any separator.\nfunction formatRange(date1, date2, formatStr, separator, isRTL) {\n\tvar localeData;\n\n\tdate1 = fc.moment.parseZone(date1);\n\tdate2 = fc.moment.parseZone(date2);\n\n\tlocaleData = (date1.localeData || date1.lang).call(date1); // works with moment-pre-2.8\n\n\t// Expand localized format strings, like \"LL\" -> \"MMMM D YYYY\"\n\tformatStr = localeData.longDateFormat(formatStr) || formatStr;\n\t// BTW, this is not important for `formatDate` because it is impossible to put custom tokens\n\t// or non-zero areas in Moment's localized format strings.\n\n\tseparator = separator || ' - ';\n\n\treturn formatRangeWithChunks(\n\t\tdate1,\n\t\tdate2,\n\t\tgetFormatStringChunks(formatStr),\n\t\tseparator,\n\t\tisRTL\n\t);\n}\nfc.formatRange = formatRange; // expose\n\n\nfunction formatRangeWithChunks(date1, date2, chunks, separator, isRTL) {\n\tvar chunkStr; // the rendering of the chunk\n\tvar leftI;\n\tvar leftStr = '';\n\tvar rightI;\n\tvar rightStr = '';\n\tvar middleI;\n\tvar middleStr1 = '';\n\tvar middleStr2 = '';\n\tvar middleStr = '';\n\n\t// Start at the leftmost side of the formatting string and continue until you hit a token\n\t// that is not the same between dates.\n\tfor (leftI=0; leftI<chunks.length; leftI++) {\n\t\tchunkStr = formatSimilarChunk(date1, date2, chunks[leftI]);\n\t\tif (chunkStr === false) {\n\t\t\tbreak;\n\t\t}\n\t\tleftStr += chunkStr;\n\t}\n\n\t// Similarly, start at the rightmost side of the formatting string and move left\n\tfor (rightI=chunks.length-1; rightI>leftI; rightI--) {\n\t\tchunkStr = formatSimilarChunk(date1, date2, chunks[rightI]);\n\t\tif (chunkStr === false) {\n\t\t\tbreak;\n\t\t}\n\t\trightStr = chunkStr + rightStr;\n\t}\n\n\t// The area in the middle is different for both of the dates.\n\t// Collect them distinctly so we can jam them together later.\n\tfor (middleI=leftI; middleI<=rightI; middleI++) {\n\t\tmiddleStr1 += formatDateWithChunk(date1, chunks[middleI]);\n\t\tmiddleStr2 += formatDateWithChunk(date2, chunks[middleI]);\n\t}\n\n\tif (middleStr1 || middleStr2) {\n\t\tif (isRTL) {\n\t\t\tmiddleStr = middleStr2 + separator + middleStr1;\n\t\t}\n\t\telse {\n\t\t\tmiddleStr = middleStr1 + separator + middleStr2;\n\t\t}\n\t}\n\n\treturn leftStr + middleStr + rightStr;\n}\n\n\nvar similarUnitMap = {\n\tY: 'year',\n\tM: 'month',\n\tD: 'day', // day of month\n\td: 'day', // day of week\n\t// prevents a separator between anything time-related...\n\tA: 'second', // AM/PM\n\ta: 'second', // am/pm\n\tT: 'second', // A/P\n\tt: 'second', // a/p\n\tH: 'second', // hour (24)\n\th: 'second', // hour (12)\n\tm: 'second', // minute\n\ts: 'second' // second\n};\n// TODO: week maybe?\n\n\n// Given a formatting chunk, and given that both dates are similar in the regard the\n// formatting chunk is concerned, format date1 against `chunk`. Otherwise, return `false`.\nfunction formatSimilarChunk(date1, date2, chunk) {\n\tvar token;\n\tvar unit;\n\n\tif (typeof chunk === 'string') { // a literal string\n\t\treturn chunk;\n\t}\n\telse if ((token = chunk.token)) {\n\t\tunit = similarUnitMap[token.charAt(0)];\n\t\t// are the dates the same for this unit of measurement?\n\t\tif (unit && date1.isSame(date2, unit)) {\n\t\t\treturn oldMomentFormat(date1, token); // would be the same if we used `date2`\n\t\t\t// BTW, don't support custom tokens\n\t\t}\n\t}\n\n\treturn false; // the chunk is NOT the same for the two dates\n\t// BTW, don't support splitting on non-zero areas\n}\n\n\n// Chunking Utils\n// -------------------------------------------------------------------------------------------------\n\n\nvar formatStringChunkCache = {};\n\n\nfunction getFormatStringChunks(formatStr) {\n\tif (formatStr in formatStringChunkCache) {\n\t\treturn formatStringChunkCache[formatStr];\n\t}\n\treturn (formatStringChunkCache[formatStr] = chunkFormatString(formatStr));\n}\n\n\n// Break the formatting string into an array of chunks\nfunction chunkFormatString(formatStr) {\n\tvar chunks = [];\n\tvar chunker = /\\[([^\\]]*)\\]|\\(([^\\)]*)\\)|(LT|(\\w)\\4*o?)|([^\\w\\[\\(]+)/g; // TODO: more descrimination\n\tvar match;\n\n\twhile ((match = chunker.exec(formatStr))) {\n\t\tif (match[1]) { // a literal string inside [ ... ]\n\t\t\tchunks.push(match[1]);\n\t\t}\n\t\telse if (match[2]) { // non-zero formatting inside ( ... )\n\t\t\tchunks.push({ maybe: chunkFormatString(match[2]) });\n\t\t}\n\t\telse if (match[3]) { // a formatting token\n\t\t\tchunks.push({ token: match[3] });\n\t\t}\n\t\telse if (match[5]) { // an unenclosed literal string\n\t\t\tchunks.push(match[5]);\n\t\t}\n\t}\n\n\treturn chunks;\n}\n\n    fc.Class = Class; // export\n\n// class that all other classes will inherit from\nfunction Class() { }\n\n// called upon a class to create a subclass\nClass.extend = function(members) {\n\tvar superClass = this;\n\tvar subClass;\n\n\tmembers = members || {};\n\n\t// ensure a constructor for the subclass, forwarding all arguments to the super-constructor if it doesn't exist\n\tif (hasOwnProp(members, 'constructor')) {\n\t\tsubClass = members.constructor;\n\t}\n\tif (typeof subClass !== 'function') {\n\t\tsubClass = members.constructor = function() {\n\t\t\tsuperClass.apply(this, arguments);\n\t\t};\n\t}\n\n\t// build the base prototype for the subclass, which is an new object chained to the superclass's prototype\n\tsubClass.prototype = createObject(superClass.prototype);\n\n\t// copy each member variable/method onto the the subclass's prototype\n\tcopyOwnProps(members, subClass.prototype);\n\n\t// copy over all class variables/methods to the subclass, such as `extend` and `mixin`\n\tcopyOwnProps(superClass, subClass);\n\n\treturn subClass;\n};\n\n// adds new member variables/methods to the class's prototype.\n// can be called with another class, or a plain object hash containing new members.\nClass.mixin = function(members) {\n\tcopyOwnProps(members.prototype || members, this.prototype);\n};\n    /* A rectangular panel that is absolutely positioned over other content\n------------------------------------------------------------------------------------------------------------------------\nOptions:\n\t- className (string)\n\t- content (HTML string or jQuery element set)\n\t- parentEl\n\t- top\n\t- left\n\t- right (the x coord of where the right edge should be. not a \"CSS\" right)\n\t- autoHide (boolean)\n\t- show (callback)\n\t- hide (callback)\n*/\n\nvar Popover = Class.extend({\n\n\tisHidden: true,\n\toptions: null,\n\tel: null, // the container element for the popover. generated by this object\n\tdocumentMousedownProxy: null, // document mousedown handler bound to `this`\n\tmargin: 10, // the space required between the popover and the edges of the scroll container\n\n\n\tconstructor: function(options) {\n\t\tthis.options = options || {};\n\t},\n\n\n\t// Shows the popover on the specified position. Renders it if not already\n\tshow: function() {\n\t\tif (this.isHidden) {\n\t\t\tif (!this.el) {\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t\tthis.el.show();\n\t\t\tthis.position();\n\t\t\tthis.isHidden = false;\n\t\t\tthis.trigger('show');\n\t\t}\n\t},\n\n\n\t// Hides the popover, through CSS, but does not remove it from the DOM\n\thide: function() {\n\t\tif (!this.isHidden) {\n\t\t\tthis.el.hide();\n\t\t\tthis.isHidden = true;\n\t\t\tthis.trigger('hide');\n\t\t}\n\t},\n\n\n\t// Creates `this.el` and renders content inside of it\n\trender: function() {\n\t\tvar _this = this;\n\t\tvar options = this.options;\n\n\t\tthis.el = $('<div class=\"fc-popover\"/>')\n\t\t\t.addClass(options.className || '')\n\t\t\t.css({\n\t\t\t\t// position initially to the top left to avoid creating scrollbars\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t})\n\t\t\t.append(options.content)\n\t\t\t.appendTo(options.parentEl);\n\n\t\t// when a click happens on anything inside with a 'fc-close' className, hide the popover\n\t\tthis.el.on('click', '.fc-close', function() {\n\t\t\t_this.hide();\n\t\t});\n\n\t\tif (options.autoHide) {\n\t\t\t$(document).on('mousedown', this.documentMousedownProxy = $.proxy(this, 'documentMousedown'));\n\t\t}\n\t},\n\n\n\t// Triggered when the user clicks *anywhere* in the document, for the autoHide feature\n\tdocumentMousedown: function(ev) {\n\t\t// only hide the popover if the click happened outside the popover\n\t\tif (this.el && !$(ev.target).closest(this.el).length) {\n\t\t\tthis.hide();\n\t\t}\n\t},\n\n\n\t// Hides and unregisters any handlers\n\tdestroy: function() {\n\t\tthis.hide();\n\n\t\tif (this.el) {\n\t\t\tthis.el.remove();\n\t\t\tthis.el = null;\n\t\t}\n\n\t\t$(document).off('mousedown', this.documentMousedownProxy);\n\t},\n\n\n\t// Positions the popover optimally, using the top/left/right options\n\tposition: function() {\n\t\tvar options = this.options;\n\t\tvar origin = this.el.offsetParent().offset();\n\t\tvar width = this.el.outerWidth();\n\t\tvar height = this.el.outerHeight();\n\t\tvar windowEl = $(window);\n\t\tvar viewportEl = getScrollParent(this.el);\n\t\tvar viewportTop;\n\t\tvar viewportLeft;\n\t\tvar viewportOffset;\n\t\tvar top; // the \"position\" (not \"offset\") values for the popover\n\t\tvar left; //\n\n\t\t// compute top and left\n\t\ttop = options.top || 0;\n\t\tif (options.left !== undefined) {\n\t\t\tleft = options.left;\n\t\t}\n\t\telse if (options.right !== undefined) {\n\t\t\tleft = options.right - width; // derive the left value from the right value\n\t\t}\n\t\telse {\n\t\t\tleft = 0;\n\t\t}\n\n\t\tif (viewportEl.is(window) || viewportEl.is(document)) { // normalize getScrollParent's result\n\t\t\tviewportEl = windowEl;\n\t\t\tviewportTop = 0; // the window is always at the top left\n\t\t\tviewportLeft = 0; // (and .offset() won't work if called here)\n\t\t}\n\t\telse {\n\t\t\tviewportOffset = viewportEl.offset();\n\t\t\tviewportTop = viewportOffset.top;\n\t\t\tviewportLeft = viewportOffset.left;\n\t\t}\n\n\t\t// if the window is scrolled, it causes the visible area to be further down\n\t\tviewportTop += windowEl.scrollTop();\n\t\tviewportLeft += windowEl.scrollLeft();\n\n\t\t// constrain to the view port. if constrained by two edges, give precedence to top/left\n\t\tif (options.viewportConstrain !== false) {\n\t\t\ttop = Math.min(top, viewportTop + viewportEl.outerHeight() - height - this.margin);\n\t\t\ttop = Math.max(top, viewportTop + this.margin);\n\t\t\tleft = Math.min(left, viewportLeft + viewportEl.outerWidth() - width - this.margin);\n\t\t\tleft = Math.max(left, viewportLeft + this.margin);\n\t\t}\n\n\t\tthis.el.css({\n\t\t\ttop: top - origin.top,\n\t\t\tleft: left - origin.left\n\t\t});\n\t},\n\n\n\t// Triggers a callback. Calls a function in the option hash of the same name.\n\t// Arguments beyond the first `name` are forwarded on.\n\t// TODO: better code reuse for this. Repeat code\n\ttrigger: function(name) {\n\t\tif (this.options[name]) {\n\t\t\tthis.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\t}\n\n});\n\n    /* A \"coordinate map\" converts pixel coordinates into an associated cell, which has an associated date\n------------------------------------------------------------------------------------------------------------------------\nCommon interface:\n\n\tCoordMap.prototype = {\n\t\tbuild: function() {},\n\t\tgetCell: function(x, y) {}\n\t};\n\n*/\n\n/* Coordinate map for a grid component\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar GridCoordMap = Class.extend({\n\n\tgrid: null, // reference to the Grid\n\trowCoords: null, // array of {top,bottom} objects\n\tcolCoords: null, // array of {left,right} objects\n\n\tcontainerEl: null, // container element that all coordinates are constrained to. optionally assigned\n\tminX: null,\n\tmaxX: null, // exclusive\n\tminY: null,\n\tmaxY: null, // exclusive\n\n\n\tconstructor: function(grid) {\n\t\tthis.grid = grid;\n\t},\n\n\n\t// Queries the grid for the coordinates of all the cells\n\tbuild: function() {\n\t\tthis.rowCoords = this.grid.computeRowCoords();\n\t\tthis.colCoords = this.grid.computeColCoords();\n\t\tthis.computeBounds();\n\t},\n\n\n\t// Clears the coordinates data to free up memory\n\tclear: function() {\n\t\tthis.rowCoords = null;\n\t\tthis.colCoords = null;\n\t},\n\n\n\t// Given a coordinate of the document, gets the associated cell. If no cell is underneath, returns null\n\tgetCell: function(x, y) {\n\t\tvar rowCoords = this.rowCoords;\n\t\tvar colCoords = this.colCoords;\n\t\tvar hitRow = null;\n\t\tvar hitCol = null;\n\t\tvar i, coords;\n\t\tvar cell;\n\n\t\tif (this.inBounds(x, y)) {\n\n\t\t\tfor (i = 0; i < rowCoords.length; i++) {\n\t\t\t\tcoords = rowCoords[i];\n\t\t\t\tif (y >= coords.top && y < coords.bottom) {\n\t\t\t\t\thitRow = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (i = 0; i < colCoords.length; i++) {\n\t\t\t\tcoords = colCoords[i];\n\t\t\t\tif (x >= coords.left && x < coords.right) {\n\t\t\t\t\thitCol = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (hitRow !== null && hitCol !== null) {\n\t\t\t\tcell = this.grid.getCell(hitRow, hitCol);\n\t\t\t\tcell.grid = this.grid; // for DragListener's isCellsEqual. dragging between grids\n\t\t\t\treturn cell;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\n\n\t// If there is a containerEl, compute the bounds into min/max values\n\tcomputeBounds: function() {\n\t\tvar containerOffset;\n\n\t\tif (this.containerEl) {\n\t\t\tcontainerOffset = this.containerEl.offset();\n\t\t\tthis.minX = containerOffset.left;\n\t\t\tthis.maxX = containerOffset.left + this.containerEl.outerWidth();\n\t\t\tthis.minY = containerOffset.top;\n\t\t\tthis.maxY = containerOffset.top + this.containerEl.outerHeight();\n\t\t}\n\t},\n\n\n\t// Determines if the given coordinates are in bounds. If no `containerEl`, always true\n\tinBounds: function(x, y) {\n\t\tif (this.containerEl) {\n\t\t\treturn x >= this.minX && x < this.maxX && y >= this.minY && y < this.maxY;\n\t\t}\n\t\treturn true;\n\t}\n\n});\n\n\n/* Coordinate map that is a combination of multiple other coordinate maps\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar ComboCoordMap = Class.extend({\n\n\tcoordMaps: null, // an array of CoordMaps\n\n\n\tconstructor: function(coordMaps) {\n\t\tthis.coordMaps = coordMaps;\n\t},\n\n\n\t// Builds all coordMaps\n\tbuild: function() {\n\t\tvar coordMaps = this.coordMaps;\n\t\tvar i;\n\n\t\tfor (i = 0; i < coordMaps.length; i++) {\n\t\t\tcoordMaps[i].build();\n\t\t}\n\t},\n\n\n\t// Queries all coordMaps for the cell underneath the given coordinates, returning the first result\n\tgetCell: function(x, y) {\n\t\tvar coordMaps = this.coordMaps;\n\t\tvar cell = null;\n\t\tvar i;\n\n\t\tfor (i = 0; i < coordMaps.length && !cell; i++) {\n\t\t\tcell = coordMaps[i].getCell(x, y);\n\t\t}\n\n\t\treturn cell;\n\t},\n\n\n\t// Clears all coordMaps\n\tclear: function() {\n\t\tvar coordMaps = this.coordMaps;\n\t\tvar i;\n\n\t\tfor (i = 0; i < coordMaps.length; i++) {\n\t\t\tcoordMaps[i].clear();\n\t\t}\n\t}\n\n});\n\n    /* Tracks mouse movements over a CoordMap and raises events about which cell the mouse is over.\n----------------------------------------------------------------------------------------------------------------------*/\n// TODO: very useful to have a handler that gets called upon cellOut OR when dragging stops (for cleanup)\n\nvar DragListener = Class.extend({\n\n\tcoordMap: null,\n\toptions: null,\n\n\tisListening: false,\n\tisDragging: false,\n\n\t// the cell the mouse was over when listening started\n\torigCell: null,\n\n\t// the cell the mouse is over\n\tcell: null,\n\n\t// coordinates of the initial mousedown\n\tmouseX0: null,\n\tmouseY0: null,\n\n\t// handler attached to the document, bound to the DragListener's `this`\n\tmousemoveProxy: null,\n\tmouseupProxy: null,\n\n\tscrollEl: null,\n\tscrollBounds: null, // { top, bottom, left, right }\n\tscrollTopVel: null, // pixels per second\n\tscrollLeftVel: null, // pixels per second\n\tscrollIntervalId: null, // ID of setTimeout for scrolling animation loop\n\tscrollHandlerProxy: null, // this-scoped function for handling when scrollEl is scrolled\n\n\tscrollSensitivity: 30, // pixels from edge for scrolling to start\n\tscrollSpeed: 200, // pixels per second, at maximum speed\n\tscrollIntervalMs: 50, // millisecond wait between scroll increment\n\n\n\tconstructor: function(coordMap, options) {\n\t\tthis.coordMap = coordMap;\n\t\tthis.options = options || {};\n\t},\n\n\n\t// Call this when the user does a mousedown. Will probably lead to startListening\n\tmousedown: function(ev) {\n\t\tif (isPrimaryMouseButton(ev)) {\n\n\t\t\tev.preventDefault(); // prevents native selection in most browsers\n\n\t\t\tthis.startListening(ev);\n\n\t\t\t// start the drag immediately if there is no minimum distance for a drag start\n\t\t\tif (!this.options.distance) {\n\t\t\t\tthis.startDrag(ev);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Call this to start tracking mouse movements\n\tstartListening: function(ev) {\n\t\tvar scrollParent;\n\t\tvar cell;\n\n\t\tif (!this.isListening) {\n\n\t\t\t// grab scroll container and attach handler\n\t\t\tif (ev && this.options.scroll) {\n\t\t\t\tscrollParent = getScrollParent($(ev.target));\n\t\t\t\tif (!scrollParent.is(window) && !scrollParent.is(document)) {\n\t\t\t\t\tthis.scrollEl = scrollParent;\n\n\t\t\t\t\t// scope to `this`, and use `debounce` to make sure rapid calls don't happen\n\t\t\t\t\tthis.scrollHandlerProxy = debounce($.proxy(this, 'scrollHandler'), 100);\n\t\t\t\t\tthis.scrollEl.on('scroll', this.scrollHandlerProxy);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.computeCoords(); // relies on `scrollEl`\n\n\t\t\t// get info on the initial cell and its coordinates\n\t\t\tif (ev) {\n\t\t\t\tcell = this.getCell(ev);\n\t\t\t\tthis.origCell = cell;\n\n\t\t\t\tthis.mouseX0 = ev.pageX;\n\t\t\t\tthis.mouseY0 = ev.pageY;\n\t\t\t}\n\n\t\t\t$(document)\n\t\t\t\t.on('mousemove', this.mousemoveProxy = $.proxy(this, 'mousemove'))\n\t\t\t\t.on('mouseup', this.mouseupProxy = $.proxy(this, 'mouseup'))\n\t\t\t\t.on('selectstart', this.preventDefault); // prevents native selection in IE<=8\n\n\t\t\tthis.isListening = true;\n\t\t\tthis.trigger('listenStart', ev);\n\t\t}\n\t},\n\n\n\t// Recomputes the drag-critical positions of elements\n\tcomputeCoords: function() {\n\t\tthis.coordMap.build();\n\t\tthis.computeScrollBounds();\n\t},\n\n\n\t// Called when the user moves the mouse\n\tmousemove: function(ev) {\n\t\tvar minDistance;\n\t\tvar distanceSq; // current distance from mouseX0/mouseY0, squared\n\n\t\tif (!this.isDragging) { // if not already dragging...\n\t\t\t// then start the drag if the minimum distance criteria is met\n\t\t\tminDistance = this.options.distance || 1;\n\t\t\tdistanceSq = Math.pow(ev.pageX - this.mouseX0, 2) + Math.pow(ev.pageY - this.mouseY0, 2);\n\t\t\tif (distanceSq >= minDistance * minDistance) { // use pythagorean theorem\n\t\t\t\tthis.startDrag(ev);\n\t\t\t}\n\t\t}\n\n\t\tif (this.isDragging) {\n\t\t\tthis.drag(ev); // report a drag, even if this mousemove initiated the drag\n\t\t}\n\t},\n\n\n\t// Call this to initiate a legitimate drag.\n\t// This function is called internally from this class, but can also be called explicitly from outside\n\tstartDrag: function(ev) {\n\t\tvar cell;\n\n\t\tif (!this.isListening) { // startDrag must have manually initiated\n\t\t\tthis.startListening();\n\t\t}\n\n\t\tif (!this.isDragging) {\n\t\t\tthis.isDragging = true;\n\t\t\tthis.trigger('dragStart', ev);\n\n\t\t\t// report the initial cell the mouse is over\n\t\t\t// especially important if no min-distance and drag starts immediately\n\t\t\tcell = this.getCell(ev); // this might be different from this.origCell if the min-distance is large\n\t\t\tif (cell) {\n\t\t\t\tthis.cellOver(cell);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Called while the mouse is being moved and when we know a legitimate drag is taking place\n\tdrag: function(ev) {\n\t\tvar cell;\n\n\t\tif (this.isDragging) {\n\t\t\tcell = this.getCell(ev);\n\n\t\t\tif (!isCellsEqual(cell, this.cell)) { // a different cell than before?\n\t\t\t\tif (this.cell) {\n\t\t\t\t\tthis.cellOut();\n\t\t\t\t}\n\t\t\t\tif (cell) {\n\t\t\t\t\tthis.cellOver(cell);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.dragScroll(ev); // will possibly cause scrolling\n\t\t}\n\t},\n\n\n\t// Called when a the mouse has just moved over a new cell\n\tcellOver: function(cell) {\n\t\tthis.cell = cell;\n\t\tthis.trigger('cellOver', cell, isCellsEqual(cell, this.origCell));\n\t},\n\n\n\t// Called when the mouse has just moved out of a cell\n\tcellOut: function() {\n\t\tif (this.cell) {\n\t\t\tthis.trigger('cellOut', this.cell);\n\t\t\tthis.cell = null;\n\t\t}\n\t},\n\n\n\t// Called when the user does a mouseup\n\tmouseup: function(ev) {\n\t\tthis.stopDrag(ev);\n\t\tthis.stopListening(ev);\n\t},\n\n\n\t// Called when the drag is over. Will not cause listening to stop however.\n\t// A concluding 'cellOut' event will NOT be triggered.\n\tstopDrag: function(ev) {\n\t\tif (this.isDragging) {\n\t\t\tthis.stopScrolling();\n\t\t\tthis.trigger('dragStop', ev);\n\t\t\tthis.isDragging = false;\n\t\t}\n\t},\n\n\n\t// Call this to stop listening to the user's mouse events\n\tstopListening: function(ev) {\n\t\tif (this.isListening) {\n\n\t\t\t// remove the scroll handler if there is a scrollEl\n\t\t\tif (this.scrollEl) {\n\t\t\t\tthis.scrollEl.off('scroll', this.scrollHandlerProxy);\n\t\t\t\tthis.scrollHandlerProxy = null;\n\t\t\t}\n\n\t\t\t$(document)\n\t\t\t\t.off('mousemove', this.mousemoveProxy)\n\t\t\t\t.off('mouseup', this.mouseupProxy)\n\t\t\t\t.off('selectstart', this.preventDefault);\n\n\t\t\tthis.mousemoveProxy = null;\n\t\t\tthis.mouseupProxy = null;\n\n\t\t\tthis.isListening = false;\n\t\t\tthis.trigger('listenStop', ev);\n\n\t\t\tthis.origCell = this.cell = null;\n\t\t\tthis.coordMap.clear();\n\t\t}\n\t},\n\n\n\t// Gets the cell underneath the coordinates for the given mouse event\n\tgetCell: function(ev) {\n\t\treturn this.coordMap.getCell(ev.pageX, ev.pageY);\n\t},\n\n\n\t// Triggers a callback. Calls a function in the option hash of the same name.\n\t// Arguments beyond the first `name` are forwarded on.\n\ttrigger: function(name) {\n\t\tif (this.options[name]) {\n\t\t\tthis.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\t},\n\n\n\t// Stops a given mouse event from doing it's native browser action. In our case, text selection.\n\tpreventDefault: function(ev) {\n\t\tev.preventDefault();\n\t},\n\n\n\t/* Scrolling\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes and stores the bounding rectangle of scrollEl\n\tcomputeScrollBounds: function() {\n\t\tvar el = this.scrollEl;\n\t\tvar offset;\n\n\t\tif (el) {\n\t\t\toffset = el.offset();\n\t\t\tthis.scrollBounds = {\n\t\t\t\ttop: offset.top,\n\t\t\t\tleft: offset.left,\n\t\t\t\tbottom: offset.top + el.outerHeight(),\n\t\t\t\tright: offset.left + el.outerWidth()\n\t\t\t};\n\t\t}\n\t},\n\n\n\t// Called when the dragging is in progress and scrolling should be updated\n\tdragScroll: function(ev) {\n\t\tvar sensitivity = this.scrollSensitivity;\n\t\tvar bounds = this.scrollBounds;\n\t\tvar topCloseness, bottomCloseness;\n\t\tvar leftCloseness, rightCloseness;\n\t\tvar topVel = 0;\n\t\tvar leftVel = 0;\n\n\t\tif (bounds) { // only scroll if scrollEl exists\n\n\t\t\t// compute closeness to edges. valid range is from 0.0 - 1.0\n\t\t\ttopCloseness = (sensitivity - (ev.pageY - bounds.top)) / sensitivity;\n\t\t\tbottomCloseness = (sensitivity - (bounds.bottom - ev.pageY)) / sensitivity;\n\t\t\tleftCloseness = (sensitivity - (ev.pageX - bounds.left)) / sensitivity;\n\t\t\trightCloseness = (sensitivity - (bounds.right - ev.pageX)) / sensitivity;\n\n\t\t\t// translate vertical closeness into velocity.\n\t\t\t// mouse must be completely in bounds for velocity to happen.\n\t\t\tif (topCloseness >= 0 && topCloseness <= 1) {\n\t\t\t\ttopVel = topCloseness * this.scrollSpeed * -1; // negative. for scrolling up\n\t\t\t}\n\t\t\telse if (bottomCloseness >= 0 && bottomCloseness <= 1) {\n\t\t\t\ttopVel = bottomCloseness * this.scrollSpeed;\n\t\t\t}\n\n\t\t\t// translate horizontal closeness into velocity\n\t\t\tif (leftCloseness >= 0 && leftCloseness <= 1) {\n\t\t\t\tleftVel = leftCloseness * this.scrollSpeed * -1; // negative. for scrolling left\n\t\t\t}\n\t\t\telse if (rightCloseness >= 0 && rightCloseness <= 1) {\n\t\t\t\tleftVel = rightCloseness * this.scrollSpeed;\n\t\t\t}\n\t\t}\n\n\t\tthis.setScrollVel(topVel, leftVel);\n\t},\n\n\n\t// Sets the speed-of-scrolling for the scrollEl\n\tsetScrollVel: function(topVel, leftVel) {\n\n\t\tthis.scrollTopVel = topVel;\n\t\tthis.scrollLeftVel = leftVel;\n\n\t\tthis.constrainScrollVel(); // massages into realistic values\n\n\t\t// if there is non-zero velocity, and an animation loop hasn't already started, then START\n\t\tif ((this.scrollTopVel || this.scrollLeftVel) && !this.scrollIntervalId) {\n\t\t\tthis.scrollIntervalId = setInterval(\n\t\t\t\t$.proxy(this, 'scrollIntervalFunc'), // scope to `this`\n\t\t\t\tthis.scrollIntervalMs\n\t\t\t);\n\t\t}\n\t},\n\n\n\t// Forces scrollTopVel and scrollLeftVel to be zero if scrolling has already gone all the way\n\tconstrainScrollVel: function() {\n\t\tvar el = this.scrollEl;\n\n\t\tif (this.scrollTopVel < 0) { // scrolling up?\n\t\t\tif (el.scrollTop() <= 0) { // already scrolled all the way up?\n\t\t\t\tthis.scrollTopVel = 0;\n\t\t\t}\n\t\t}\n\t\telse if (this.scrollTopVel > 0) { // scrolling down?\n\t\t\tif (el.scrollTop() + el[0].clientHeight >= el[0].scrollHeight) { // already scrolled all the way down?\n\t\t\t\tthis.scrollTopVel = 0;\n\t\t\t}\n\t\t}\n\n\t\tif (this.scrollLeftVel < 0) { // scrolling left?\n\t\t\tif (el.scrollLeft() <= 0) { // already scrolled all the left?\n\t\t\t\tthis.scrollLeftVel = 0;\n\t\t\t}\n\t\t}\n\t\telse if (this.scrollLeftVel > 0) { // scrolling right?\n\t\t\tif (el.scrollLeft() + el[0].clientWidth >= el[0].scrollWidth) { // already scrolled all the way right?\n\t\t\t\tthis.scrollLeftVel = 0;\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// This function gets called during every iteration of the scrolling animation loop\n\tscrollIntervalFunc: function() {\n\t\tvar el = this.scrollEl;\n\t\tvar frac = this.scrollIntervalMs / 1000; // considering animation frequency, what the vel should be mult'd by\n\n\t\t// change the value of scrollEl's scroll\n\t\tif (this.scrollTopVel) {\n\t\t\tel.scrollTop(el.scrollTop() + this.scrollTopVel * frac);\n\t\t}\n\t\tif (this.scrollLeftVel) {\n\t\t\tel.scrollLeft(el.scrollLeft() + this.scrollLeftVel * frac);\n\t\t}\n\n\t\tthis.constrainScrollVel(); // since the scroll values changed, recompute the velocities\n\n\t\t// if scrolled all the way, which causes the vels to be zero, stop the animation loop\n\t\tif (!this.scrollTopVel && !this.scrollLeftVel) {\n\t\t\tthis.stopScrolling();\n\t\t}\n\t},\n\n\n\t// Kills any existing scrolling animation loop\n\tstopScrolling: function() {\n\t\tif (this.scrollIntervalId) {\n\t\t\tclearInterval(this.scrollIntervalId);\n\t\t\tthis.scrollIntervalId = null;\n\n\t\t\t// when all done with scrolling, recompute positions since they probably changed\n\t\t\tthis.computeCoords();\n\t\t}\n\t},\n\n\n\t// Get called when the scrollEl is scrolled (NOTE: this is delayed via debounce)\n\tscrollHandler: function() {\n\t\t// recompute all coordinates, but *only* if this is *not* part of our scrolling animation\n\t\tif (!this.scrollIntervalId) {\n\t\t\tthis.computeCoords();\n\t\t}\n\t}\n\n});\n\n\n// Returns `true` if the cells are identically equal. `false` otherwise.\n// They must have the same row, col, and be from the same grid.\n// Two null values will be considered equal, as two \"out of the grid\" states are the same.\nfunction isCellsEqual(cell1, cell2) {\n\n\tif (!cell1 && !cell2) {\n\t\treturn true;\n\t}\n\n\tif (cell1 && cell2) {\n\t\treturn cell1.grid === cell2.grid &&\n\t\t\tcell1.row === cell2.row &&\n\t\t\tcell1.col === cell2.col;\n\t}\n\n\treturn false;\n}\n\n    /* Creates a clone of an element and lets it track the mouse as it moves\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar MouseFollower = Class.extend({\n\n\toptions: null,\n\n\tsourceEl: null, // the element that will be cloned and made to look like it is dragging\n\tel: null, // the clone of `sourceEl` that will track the mouse\n\tparentEl: null, // the element that `el` (the clone) will be attached to\n\n\t// the initial position of el, relative to the offset parent. made to match the initial offset of sourceEl\n\ttop0: null,\n\tleft0: null,\n\n\t// the initial position of the mouse\n\tmouseY0: null,\n\tmouseX0: null,\n\n\t// the number of pixels the mouse has moved from its initial position\n\ttopDelta: null,\n\tleftDelta: null,\n\n\tmousemoveProxy: null, // document mousemove handler, bound to the MouseFollower's `this`\n\n\tisFollowing: false,\n\tisHidden: false,\n\tisAnimating: false, // doing the revert animation?\n\n\tconstructor: function(sourceEl, options) {\n\t\tthis.options = options = options || {};\n\t\tthis.sourceEl = sourceEl;\n\t\tthis.parentEl = options.parentEl ? $(options.parentEl) : sourceEl.parent(); // default to sourceEl's parent\n\t},\n\n\n\t// Causes the element to start following the mouse\n\tstart: function(ev) {\n\t\tif (!this.isFollowing) {\n\t\t\tthis.isFollowing = true;\n\n\t\t\tthis.mouseY0 = ev.pageY;\n\t\t\tthis.mouseX0 = ev.pageX;\n\t\t\tthis.topDelta = 0;\n\t\t\tthis.leftDelta = 0;\n\n\t\t\tif (!this.isHidden) {\n\t\t\t\tthis.updatePosition();\n\t\t\t}\n\n\t\t\t$(document).on('mousemove', this.mousemoveProxy = $.proxy(this, 'mousemove'));\n\t\t}\n\t},\n\n\n\t// Causes the element to stop following the mouse. If shouldRevert is true, will animate back to original position.\n\t// `callback` gets invoked when the animation is complete. If no animation, it is invoked immediately.\n\tstop: function(shouldRevert, callback) {\n\t\tvar _this = this;\n\t\tvar revertDuration = this.options.revertDuration;\n\n\t\tfunction complete() {\n\t\t\tthis.isAnimating = false;\n\t\t\t_this.destroyEl();\n\n\t\t\tthis.top0 = this.left0 = null; // reset state for future updatePosition calls\n\n\t\t\tif (callback) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\n\t\tif (this.isFollowing && !this.isAnimating) { // disallow more than one stop animation at a time\n\t\t\tthis.isFollowing = false;\n\n\t\t\t$(document).off('mousemove', this.mousemoveProxy);\n\n\t\t\tif (shouldRevert && revertDuration && !this.isHidden) { // do a revert animation?\n\t\t\t\tthis.isAnimating = true;\n\t\t\t\tthis.el.animate({\n\t\t\t\t\ttop: this.top0,\n\t\t\t\t\tleft: this.left0\n\t\t\t\t}, {\n\t\t\t\t\tduration: revertDuration,\n\t\t\t\t\tcomplete: complete\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Gets the tracking element. Create it if necessary\n\tgetEl: function() {\n\t\tvar el = this.el;\n\n\t\tif (!el) {\n\t\t\tthis.sourceEl.width(); // hack to force IE8 to compute correct bounding box\n\t\t\tel = this.el = this.sourceEl.clone()\n\t\t\t\t.css({\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tvisibility: '', // in case original element was hidden (commonly through hideEvents())\n\t\t\t\t\tdisplay: this.isHidden ? 'none' : '', // for when initially hidden\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tright: 'auto', // erase and set width instead\n\t\t\t\t\tbottom: 'auto', // erase and set height instead\n\t\t\t\t\twidth: this.sourceEl.width(), // explicit height in case there was a 'right' value\n\t\t\t\t\theight: this.sourceEl.height(), // explicit width in case there was a 'bottom' value\n\t\t\t\t\topacity: this.options.opacity || '',\n\t\t\t\t\tzIndex: this.options.zIndex\n\t\t\t\t})\n\t\t\t\t.appendTo(this.parentEl);\n\t\t}\n\n\t\treturn el;\n\t},\n\n\n\t// Removes the tracking element if it has already been created\n\tdestroyEl: function() {\n\t\tif (this.el) {\n\t\t\tthis.el.remove();\n\t\t\tthis.el = null;\n\t\t}\n\t},\n\n\n\t// Update the CSS position of the tracking element\n\tupdatePosition: function() {\n\t\tvar sourceOffset;\n\t\tvar origin;\n\n\t\tthis.getEl(); // ensure this.el\n\n\t\t// make sure origin info was computed\n\t\tif (this.top0 === null) {\n\t\t\tthis.sourceEl.width(); // hack to force IE8 to compute correct bounding box\n\t\t\tsourceOffset = this.sourceEl.offset();\n\t\t\torigin = this.el.offsetParent().offset();\n\t\t\tthis.top0 = sourceOffset.top - origin.top;\n\t\t\tthis.left0 = sourceOffset.left - origin.left;\n\t\t}\n\n\t\tthis.el.css({\n\t\t\ttop: this.top0 + this.topDelta,\n\t\t\tleft: this.left0 + this.leftDelta\n\t\t});\n\t},\n\n\n\t// Gets called when the user moves the mouse\n\tmousemove: function(ev) {\n\t\tthis.topDelta = ev.pageY - this.mouseY0;\n\t\tthis.leftDelta = ev.pageX - this.mouseX0;\n\n\t\tif (!this.isHidden) {\n\t\t\tthis.updatePosition();\n\t\t}\n\t},\n\n\n\t// Temporarily makes the tracking element invisible. Can be called before following starts\n\thide: function() {\n\t\tif (!this.isHidden) {\n\t\t\tthis.isHidden = true;\n\t\t\tif (this.el) {\n\t\t\t\tthis.el.hide();\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Show the tracking element after it has been temporarily hidden\n\tshow: function() {\n\t\tif (this.isHidden) {\n\t\t\tthis.isHidden = false;\n\t\t\tthis.updatePosition();\n\t\t\tthis.getEl().show();\n\t\t}\n\t}\n\n});\n\n    /* A utility class for rendering <tr> rows.\n----------------------------------------------------------------------------------------------------------------------*/\n// It leverages methods of the subclass and the View to determine custom rendering behavior for each row \"type\"\n// (such as highlight rows, day rows, helper rows, etc).\n\nvar RowRenderer = Class.extend({\n\n\tview: null, // a View object\n\tisRTL: null, // shortcut to the view's isRTL option\n\tcellHtml: '<td/>', // plain default HTML used for a cell when no other is available\n\n\n\tconstructor: function(view) {\n\t\tthis.view = view;\n\t\tthis.isRTL = view.opt('isRTL');\n\t},\n\n\n\t// Renders the HTML for a row, leveraging custom cell-HTML-renderers based on the `rowType`.\n\t// Also applies the \"intro\" and \"outro\" cells, which are specified by the subclass and views.\n\t// `row` is an optional row number.\n\trowHtml: function(rowType, row) {\n\t\tvar renderCell = this.getHtmlRenderer('cell', rowType);\n\t\tvar rowCellHtml = '';\n\t\tvar col;\n\t\tvar cell;\n\n\t\trow = row || 0;\n\n\t\tfor (col = 0; col < this.colCnt; col++) {\n\t\t\tcell = this.getCell(row, col);\n\t\t\trowCellHtml += renderCell(cell);\n\t\t}\n\n\t\trowCellHtml = this.bookendCells(rowCellHtml, rowType, row); // apply intro and outro\n\n\t\treturn '<tr>' + rowCellHtml + '</tr>';\n\t},\n\n\n\t// Applies the \"intro\" and \"outro\" HTML to the given cells.\n\t// Intro means the leftmost cell when the calendar is LTR and the rightmost cell when RTL. Vice-versa for outro.\n\t// `cells` can be an HTML string of <td>'s or a jQuery <tr> element\n\t// `row` is an optional row number.\n\tbookendCells: function(cells, rowType, row) {\n\t\tvar intro = this.getHtmlRenderer('intro', rowType)(row || 0);\n\t\tvar outro = this.getHtmlRenderer('outro', rowType)(row || 0);\n\t\tvar prependHtml = this.isRTL ? outro : intro;\n\t\tvar appendHtml = this.isRTL ? intro : outro;\n\n\t\tif (typeof cells === 'string') {\n\t\t\treturn prependHtml + cells + appendHtml;\n\t\t}\n\t\telse { // a jQuery <tr> element\n\t\t\treturn cells.prepend(prependHtml).append(appendHtml);\n\t\t}\n\t},\n\n\n\t// Returns an HTML-rendering function given a specific `rendererName` (like cell, intro, or outro) and a specific\n\t// `rowType` (like day, eventSkeleton, helperSkeleton), which is optional.\n\t// If a renderer for the specific rowType doesn't exist, it will fall back to a generic renderer.\n\t// We will query the View object first for any custom rendering functions, then the methods of the subclass.\n\tgetHtmlRenderer: function(rendererName, rowType) {\n\t\tvar view = this.view;\n\t\tvar generalName; // like \"cellHtml\"\n\t\tvar specificName; // like \"dayCellHtml\". based on rowType\n\t\tvar provider; // either the View or the RowRenderer subclass, whichever provided the method\n\t\tvar renderer;\n\n\t\tgeneralName = rendererName + 'Html';\n\t\tif (rowType) {\n\t\t\tspecificName = rowType + capitaliseFirstLetter(rendererName) + 'Html';\n\t\t}\n\n\t\tif (specificName && (renderer = view[specificName])) {\n\t\t\tprovider = view;\n\t\t}\n\t\telse if (specificName && (renderer = this[specificName])) {\n\t\t\tprovider = this;\n\t\t}\n\t\telse if ((renderer = view[generalName])) {\n\t\t\tprovider = view;\n\t\t}\n\t\telse if ((renderer = this[generalName])) {\n\t\t\tprovider = this;\n\t\t}\n\n\t\tif (typeof renderer === 'function') {\n\t\t\treturn function() {\n\t\t\t\treturn renderer.apply(provider, arguments) || ''; // use correct `this` and always return a string\n\t\t\t};\n\t\t}\n\n\t\t// the rendered can be a plain string as well. if not specified, always an empty string.\n\t\treturn function() {\n\t\t\treturn renderer || '';\n\t\t};\n\t}\n\n});\n\n    /* An abstract class comprised of a \"grid\" of cells that each represent a specific datetime\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar Grid = fc.Grid = RowRenderer.extend({\n\n\tstart: null, // the date of the first cell\n\tend: null, // the date after the last cell\n\n\trowCnt: 0, // number of rows\n\tcolCnt: 0, // number of cols\n\trowData: null, // array of objects, holding misc data for each row\n\tcolData: null, // array of objects, holding misc data for each column\n\n\tel: null, // the containing element\n\tcoordMap: null, // a GridCoordMap that converts pixel values to datetimes\n\telsByFill: null, // a hash of jQuery element sets used for rendering each fill. Keyed by fill name.\n\n\tdocumentDragStartProxy: null, // binds the Grid's scope to documentDragStart (in DayGrid.events)\n\n\t// derived from options\n\tcolHeadFormat: null, // TODO: move to another class. not applicable to all Grids\n\teventTimeFormat: null,\n\tdisplayEventEnd: null,\n\n\n\tconstructor: function() {\n\t\tRowRenderer.apply(this, arguments); // call the super-constructor\n\n\t\tthis.coordMap = new GridCoordMap(this);\n\t\tthis.elsByFill = {};\n\t\tthis.documentDragStartProxy = $.proxy(this, 'documentDragStart');\n\t},\n\n\n\t// Renders the grid into the `el` element.\n\t// Subclasses should override and call this super-method when done.\n\trender: function() {\n\t\tthis.bindHandlers();\n\t},\n\n\n\t// Called when the grid's resources need to be cleaned up\n\tdestroy: function() {\n\t\tthis.unbindHandlers();\n\t},\n\n\n\t/* Options\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Generates the format string used for the text in column headers, if not explicitly defined by 'columnFormat'\n\t// TODO: move to another class. not applicable to all Grids\n\tcomputeColHeadFormat: function() {\n\t\t// subclasses must implement if they want to use headHtml()\n\t},\n\n\n\t// Generates the format string used for event time text, if not explicitly defined by 'timeFormat'\n\tcomputeEventTimeFormat: function() {\n\t\treturn this.view.opt('smallTimeFormat');\n\t},\n\n\n\t// Determines whether events should have their end times displayed, if not explicitly defined by 'displayEventEnd'\n\tcomputeDisplayEventEnd: function() {\n\t\treturn false;\n\t},\n\n\n\t/* Dates\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Tells the grid about what period of time to display. Grid will subsequently compute dates for cell system.\n\tsetRange: function(range) {\n\t\tvar view = this.view;\n\n\t\tthis.start = range.start.clone();\n\t\tthis.end = range.end.clone();\n\n\t\tthis.rowData = [];\n\t\tthis.colData = [];\n\t\tthis.updateCells();\n\n\t\t// Populate option-derived settings. Look for override first, then compute if necessary.\n\t\tthis.colHeadFormat = view.opt('columnFormat') || this.computeColHeadFormat();\n\t\tthis.eventTimeFormat = view.opt('timeFormat') || this.computeEventTimeFormat();\n\t\tthis.displayEventEnd = view.opt('displayEventEnd');\n\t\tif (this.displayEventEnd == null) {\n\t\t\tthis.displayEventEnd = this.computeDisplayEventEnd();\n\t\t}\n\t},\n\n\n\t// Responsible for setting rowCnt/colCnt and any other row/col data\n\tupdateCells: function() {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Converts a range with an inclusive `start` and an exclusive `end` into an array of segment objects\n\trangeToSegs: function(range) {\n\t\t// subclasses must implement\n\t},\n\n\n\t/* Cells\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// NOTE: columns are ordered left-to-right\n\n\n\t// Gets an object containing row/col number, misc data, and range information about the cell.\n\t// Accepts row/col values, an object with row/col properties, or a single-number offset from the first cell.\n\tgetCell: function(row, col) {\n\t\tvar cell;\n\n\t\tif (col == null) {\n\t\t\tif (typeof row === 'number') { // a single-number offset\n\t\t\t\tcol = row % this.colCnt;\n\t\t\t\trow = Math.floor(row / this.colCnt);\n\t\t\t}\n\t\t\telse { // an object with row/col properties\n\t\t\t\tcol = row.col;\n\t\t\t\trow = row.row;\n\t\t\t}\n\t\t}\n\n\t\tcell = { row: row, col: col };\n\n\t\t$.extend(cell, this.getRowData(row), this.getColData(col));\n\t\t$.extend(cell, this.computeCellRange(cell));\n\n\t\treturn cell;\n\t},\n\n\n\t// Given a cell object with index and misc data, generates a range object\n\tcomputeCellRange: function(cell) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Retrieves misc data about the given row\n\tgetRowData: function(row) {\n\t\treturn this.rowData[row] || {};\n\t},\n\n\n\t// Retrieves misc data baout the given column\n\tgetColData: function(col) {\n\t\treturn this.colData[col] || {};\n\t},\n\n\n\t// Retrieves the element representing the given row\n\tgetRowEl: function(row) {\n\t\t// subclasses should implement if leveraging the default getCellDayEl() or computeRowCoords()\n\t},\n\n\n\t// Retrieves the element representing the given column\n\tgetColEl: function(col) {\n\t\t// subclasses should implement if leveraging the default getCellDayEl() or computeColCoords()\n\t},\n\n\n\t// Given a cell object, returns the element that represents the cell's whole-day\n\tgetCellDayEl: function(cell) {\n\t\treturn this.getColEl(cell.col) || this.getRowEl(cell.row);\n\t},\n\n\n\t/* Cell Coordinates\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes the top/bottom coordinates of all rows.\n\t// By default, queries the dimensions of the element provided by getRowEl().\n\tcomputeRowCoords: function() {\n\t\tvar items = [];\n\t\tvar i, el;\n\t\tvar item;\n\n\t\tfor (i = 0; i < this.rowCnt; i++) {\n\t\t\tel = this.getRowEl(i);\n\t\t\titem = {\n\t\t\t\ttop: el.offset().top\n\t\t\t};\n\t\t\tif (i > 0) {\n\t\t\t\titems[i - 1].bottom = item.top;\n\t\t\t}\n\t\t\titems.push(item);\n\t\t}\n\t\titem.bottom = item.top + el.outerHeight();\n\n\t\treturn items;\n\t},\n\n\n\t// Computes the left/right coordinates of all rows.\n\t// By default, queries the dimensions of the element provided by getColEl().\n\tcomputeColCoords: function() {\n\t\tvar items = [];\n\t\tvar i, el;\n\t\tvar item;\n\n\t\tfor (i = 0; i < this.colCnt; i++) {\n\t\t\tel = this.getColEl(i);\n\t\t\titem = {\n\t\t\t\tleft: el.offset().left\n\t\t\t};\n\t\t\tif (i > 0) {\n\t\t\t\titems[i - 1].right = item.left;\n\t\t\t}\n\t\t\titems.push(item);\n\t\t}\n\t\titem.right = item.left + el.outerWidth();\n\n\t\treturn items;\n\t},\n\n\n\t/* Handlers\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Attaches handlers to DOM\n\tbindHandlers: function() {\n\t\tvar _this = this;\n\n\t\t// attach a handler to the grid's root element.\n\t\t// we don't need to clean up in unbindHandlers or destroy, because when jQuery removes the element from the\n\t\t// DOM it automatically unregisters the handlers.\n\t\tthis.el.on('mousedown', function(ev) {\n\t\t\tif (\n\t\t\t\t!$(ev.target).is('.fc-event-container *, .fc-more') && // not an an event element, or \"more..\" link\n\t\t\t\t!$(ev.target).closest('.fc-popover').length // not on a popover (like the \"more..\" events one)\n\t\t\t) {\n\t\t\t\t_this.dayMousedown(ev);\n\t\t\t}\n\t\t});\n\n\t\t// attach event-element-related handlers. in Grid.events\n\t\t// same garbage collection note as above.\n\t\tthis.bindSegHandlers();\n\n\t\t$(document).on('dragstart', this.documentDragStartProxy); // jqui drag\n\t},\n\n\n\t// Unattaches handlers from the DOM\n\tunbindHandlers: function() {\n\t\t$(document).off('dragstart', this.documentDragStartProxy); // jqui drag\n\t},\n\n\n\t// Process a mousedown on an element that represents a day. For day clicking and selecting.\n\tdayMousedown: function(ev) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar isSelectable = view.opt('selectable');\n\t\tvar dayClickCell; // null if invalid dayClick\n\t\tvar selectionRange; // null if invalid selection\n\n\t\t// this listener tracks a mousedown on a day element, and a subsequent drag.\n\t\t// if the drag ends on the same day, it is a 'dayClick'.\n\t\t// if 'selectable' is enabled, this listener also detects selections.\n\t\tvar dragListener = new DragListener(this.coordMap, {\n\t\t\t//distance: 5, // needs more work if we want dayClick to fire correctly\n\t\t\tscroll: view.opt('dragScroll'),\n\t\t\tdragStart: function() {\n\t\t\t\tview.unselect(); // since we could be rendering a new selection, we want to clear any old one\n\t\t\t},\n\t\t\tcellOver: function(cell, isOrig) {\n\t\t\t\tvar origCell = dragListener.origCell;\n\t\t\t\tif (origCell) { // click needs to have started on a cell\n\t\t\t\t\tdayClickCell = isOrig ? cell : null; // single-cell selection is a day click\n\t\t\t\t\tif (isSelectable) {\n\t\t\t\t\t\tselectionRange = _this.computeSelection(origCell, cell);\n\t\t\t\t\t\tif (selectionRange) {\n\t\t\t\t\t\t\t_this.renderSelection(selectionRange);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tdisableCursor();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tcellOut: function(cell) {\n\t\t\t\tdayClickCell = null;\n\t\t\t\tselectionRange = null;\n\t\t\t\t_this.destroySelection();\n\t\t\t\tenableCursor();\n\t\t\t},\n\t\t\tlistenStop: function(ev) {\n\t\t\t\tif (dayClickCell) {\n\t\t\t\t\tview.trigger('dayClick', _this.getCellDayEl(dayClickCell), dayClickCell.start, ev);\n\t\t\t\t}\n\t\t\t\tif (selectionRange) {\n\t\t\t\t\t// the selection will already have been rendered. just report it\n\t\t\t\t\tview.reportSelection(selectionRange, ev);\n\t\t\t\t}\n\t\t\t\tenableCursor();\n\t\t\t}\n\t\t});\n\n\t\tdragListener.mousedown(ev); // start listening, which will eventually initiate a dragStart\n\t},\n\n\n\t/* Event Helper\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// TODO: should probably move this to Grid.events, like we did event dragging / resizing\n\n\n\t// Renders a mock event over the given range.\n\t// The range's end can be null, in which case the mock event that is rendered will have a null end time.\n\t// `sourceSeg` is the internal segment object involved in the drag. If null, something external is dragging.\n\trenderRangeHelper: function(range, sourceSeg) {\n\t\tvar fakeEvent;\n\n\t\tfakeEvent = sourceSeg ? createObject(sourceSeg.event) : {}; // mask the original event object if possible\n\t\tfakeEvent.start = range.start.clone();\n\t\tfakeEvent.end = range.end ? range.end.clone() : null;\n\t\tfakeEvent.allDay = null; // force it to be freshly computed by normalizeEventDateProps\n\t\tthis.view.calendar.normalizeEventDateProps(fakeEvent);\n\n\t\t// this extra className will be useful for differentiating real events from mock events in CSS\n\t\tfakeEvent.className = (fakeEvent.className || []).concat('fc-helper');\n\n\t\t// if something external is being dragged in, don't render a resizer\n\t\tif (!sourceSeg) {\n\t\t\tfakeEvent.editable = false;\n\t\t}\n\n\t\tthis.renderHelper(fakeEvent, sourceSeg); // do the actual rendering\n\t},\n\n\n\t// Renders a mock event\n\trenderHelper: function(event, sourceSeg) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders a mock event\n\tdestroyHelper: function() {\n\t\t// subclasses must implement\n\t},\n\n\n\t/* Selection\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of a selection. Will highlight by default but can be overridden by subclasses.\n\trenderSelection: function(range) {\n\t\tthis.renderHighlight(range);\n\t},\n\n\n\t// Unrenders any visual indications of a selection. Will unrender a highlight by default.\n\tdestroySelection: function() {\n\t\tthis.destroyHighlight();\n\t},\n\n\n\t// Given the first and last cells of a selection, returns a range object.\n\t// Will return something falsy if the selection is invalid (when outside of selectionConstraint for example).\n\t// Subclasses can override and provide additional data in the range object. Will be passed to renderSelection().\n\tcomputeSelection: function(firstCell, lastCell) {\n\t\tvar dates = [\n\t\t\tfirstCell.start,\n\t\t\tfirstCell.end,\n\t\t\tlastCell.start,\n\t\t\tlastCell.end\n\t\t];\n\t\tvar range;\n\n\t\tdates.sort(compareNumbers); // sorts chronologically. works with Moments\n\n\t\trange = {\n\t\t\tstart: dates[0].clone(),\n\t\t\tend: dates[3].clone()\n\t\t};\n\n\t\tif (!this.view.calendar.isSelectionRangeAllowed(range)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn range;\n\t},\n\n\n\t/* Highlight\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders an emphasis on the given date range. `start` is inclusive. `end` is exclusive.\n\trenderHighlight: function(range) {\n\t\tthis.renderFill('highlight', this.rangeToSegs(range));\n\t},\n\n\n\t// Unrenders the emphasis on a date range\n\tdestroyHighlight: function() {\n\t\tthis.destroyFill('highlight');\n\t},\n\n\n\t// Generates an array of classNames for rendering the highlight. Used by the fill system.\n\thighlightSegClasses: function() {\n\t\treturn [ 'fc-highlight' ];\n\t},\n\n\n\t/* Fill System (highlight, background events, business hours)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a set of rectangles over the given segments of time.\n\t// Returns a subset of segs, the segs that were actually rendered.\n\t// Responsible for populating this.elsByFill. TODO: better API for expressing this requirement\n\trenderFill: function(type, segs) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders a specific type of fill that is currently rendered on the grid\n\tdestroyFill: function(type) {\n\t\tvar el = this.elsByFill[type];\n\n\t\tif (el) {\n\t\t\tel.remove();\n\t\t\tdelete this.elsByFill[type];\n\t\t}\n\t},\n\n\n\t// Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.\n\t// Only returns segments that successfully rendered.\n\t// To be harnessed by renderFill (implemented by subclasses).\n\t// Analagous to renderFgSegEls.\n\trenderFillSegEls: function(type, segs) {\n\t\tvar _this = this;\n\t\tvar segElMethod = this[type + 'SegEl'];\n\t\tvar html = '';\n\t\tvar renderedSegs = [];\n\t\tvar i;\n\n\t\tif (segs.length) {\n\n\t\t\t// build a large concatenation of segment HTML\n\t\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\t\thtml += this.fillSegHtml(type, segs[i]);\n\t\t\t}\n\n\t\t\t// Grab individual elements from the combined HTML string. Use each as the default rendering.\n\t\t\t// Then, compute the 'el' for each segment.\n\t\t\t$(html).each(function(i, node) {\n\t\t\t\tvar seg = segs[i];\n\t\t\t\tvar el = $(node);\n\n\t\t\t\t// allow custom filter methods per-type\n\t\t\t\tif (segElMethod) {\n\t\t\t\t\tel = segElMethod.call(_this, seg, el);\n\t\t\t\t}\n\n\t\t\t\tif (el) { // custom filters did not cancel the render\n\t\t\t\t\tel = $(el); // allow custom filter to return raw DOM node\n\n\t\t\t\t\t// correct element type? (would be bad if a non-TD were inserted into a table for example)\n\t\t\t\t\tif (el.is(_this.fillSegTag)) {\n\t\t\t\t\t\tseg.el = el;\n\t\t\t\t\t\trenderedSegs.push(seg);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn renderedSegs;\n\t},\n\n\n\tfillSegTag: 'div', // subclasses can override\n\n\n\t// Builds the HTML needed for one fill segment. Generic enought o work with different types.\n\tfillSegHtml: function(type, seg) {\n\t\tvar classesMethod = this[type + 'SegClasses']; // custom hooks per-type\n\t\tvar stylesMethod = this[type + 'SegStyles']; //\n\t\tvar classes = classesMethod ? classesMethod.call(this, seg) : [];\n\t\tvar styles = stylesMethod ? stylesMethod.call(this, seg) : ''; // a semi-colon separated CSS property string\n\n\t\treturn '<' + this.fillSegTag +\n\t\t\t(classes.length ? ' class=\"' + classes.join(' ') + '\"' : '') +\n\t\t\t(styles ? ' style=\"' + styles + '\"' : '') +\n\t\t\t' />';\n\t},\n\n\n\t/* Generic rendering utilities for subclasses\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a day-of-week header row.\n\t// TODO: move to another class. not applicable to all Grids\n\theadHtml: function() {\n\t\treturn '' +\n\t\t\t'<div class=\"fc-row ' + this.view.widgetHeaderClass + '\">' +\n\t\t\t\t'<table>' +\n\t\t\t\t\t'<thead>' +\n\t\t\t\t\t\tthis.rowHtml('head') + // leverages RowRenderer\n\t\t\t\t\t'</thead>' +\n\t\t\t\t'</table>' +\n\t\t\t'</div>';\n\t},\n\n\n\t// Used by the `headHtml` method, via RowRenderer, for rendering the HTML of a day-of-week header cell\n\t// TODO: move to another class. not applicable to all Grids\n\theadCellHtml: function(cell) {\n\t\tvar view = this.view;\n\t\tvar date = cell.start;\n\n\t\treturn '' +\n\t\t\t'<th class=\"fc-day-header ' + view.widgetHeaderClass + ' fc-' + dayIDs[date.day()] + '\">' +\n\t\t\t\thtmlEscape(date.format(this.colHeadFormat)) +\n\t\t\t'</th>';\n\t},\n\n\n\t// Renders the HTML for a single-day background cell\n\tbgCellHtml: function(cell) {\n\t\tvar view = this.view;\n\t\tvar date = cell.start;\n\t\tvar classes = this.getDayClasses(date);\n\n\t\tclasses.unshift('fc-day', view.widgetContentClass);\n\n\t\treturn '<td class=\"' + classes.join(' ') + '\"' +\n\t\t\t' data-date=\"' + date.format('YYYY-MM-DD') + '\"' + // if date has a time, won't format it\n\t\t\t'></td>';\n\t},\n\n\n\t// Computes HTML classNames for a single-day cell\n\tgetDayClasses: function(date) {\n\t\tvar view = this.view;\n\t\tvar today = view.calendar.getNow().stripTime();\n\t\tvar classes = [ 'fc-' + dayIDs[date.day()] ];\n\n\t\tif (\n\t\t\tview.name === 'month' &&\n\t\t\tdate.month() != view.intervalStart.month()\n\t\t) {\n\t\t\tclasses.push('fc-other-month');\n\t\t}\n\n\t\tif (date.isSame(today, 'day')) {\n\t\t\tclasses.push(\n\t\t\t\t'fc-today',\n\t\t\t\tview.highlightStateClass\n\t\t\t);\n\t\t}\n\t\telse if (date < today) {\n\t\t\tclasses.push('fc-past');\n\t\t}\n\t\telse {\n\t\t\tclasses.push('fc-future');\n\t\t}\n\n\t\treturn classes;\n\t}\n\n});\n\n    /* Event-rendering and event-interaction methods for the abstract Grid class\n----------------------------------------------------------------------------------------------------------------------*/\n\nGrid.mixin({\n\n\tmousedOverSeg: null, // the segment object the user's mouse is over. null if over nothing\n\tisDraggingSeg: false, // is a segment being dragged? boolean\n\tisResizingSeg: false, // is a segment being resized? boolean\n\tsegs: null, // the event segments currently rendered in the grid\n\n\n\t// Renders the given events onto the grid\n\trenderEvents: function(events) {\n\t\tvar segs = this.eventsToSegs(events);\n\t\tvar bgSegs = [];\n\t\tvar fgSegs = [];\n\t\tvar i, seg;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\n\t\t\tif (isBgEvent(seg.event)) {\n\t\t\t\tbgSegs.push(seg);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfgSegs.push(seg);\n\t\t\t}\n\t\t}\n\n\t\t// Render each different type of segment.\n\t\t// Each function may return a subset of the segs, segs that were actually rendered.\n\t\tbgSegs = this.renderBgSegs(bgSegs) || bgSegs;\n\t\tfgSegs = this.renderFgSegs(fgSegs) || fgSegs;\n\n\t\tthis.segs = bgSegs.concat(fgSegs);\n\t},\n\n\n\t// Unrenders all events currently rendered on the grid\n\tdestroyEvents: function() {\n\t\tthis.triggerSegMouseout(); // trigger an eventMouseout if user's mouse is over an event\n\n\t\tthis.destroyFgSegs();\n\t\tthis.destroyBgSegs();\n\n\t\tthis.segs = null;\n\t},\n\n\n\t// Retrieves all rendered segment objects currently rendered on the grid\n\tgetEventSegs: function() {\n\t\treturn this.segs || [];\n\t},\n\n\n\t/* Foreground Segment Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders foreground event segments onto the grid. May return a subset of segs that were rendered.\n\trenderFgSegs: function(segs) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders all currently rendered foreground segments\n\tdestroyFgSegs: function() {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Renders and assigns an `el` property for each foreground event segment.\n\t// Only returns segments that successfully rendered.\n\t// A utility that subclasses may use.\n\trenderFgSegEls: function(segs, disableResizing) {\n\t\tvar view = this.view;\n\t\tvar html = '';\n\t\tvar renderedSegs = [];\n\t\tvar i;\n\n\t\tif (segs.length) { // don't build an empty html string\n\n\t\t\t// build a large concatenation of event segment HTML\n\t\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\t\thtml += this.fgSegHtml(segs[i], disableResizing);\n\t\t\t}\n\n\t\t\t// Grab individual elements from the combined HTML string. Use each as the default rendering.\n\t\t\t// Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.\n\t\t\t$(html).each(function(i, node) {\n\t\t\t\tvar seg = segs[i];\n\t\t\t\tvar el = view.resolveEventEl(seg.event, $(node));\n\n\t\t\t\tif (el) {\n\t\t\t\t\tel.data('fc-seg', seg); // used by handlers\n\t\t\t\t\tseg.el = el;\n\t\t\t\t\trenderedSegs.push(seg);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn renderedSegs;\n\t},\n\n\n\t// Generates the HTML for the default rendering of a foreground event segment. Used by renderFgSegEls()\n\tfgSegHtml: function(seg, disableResizing) {\n\t\t// subclasses should implement\n\t},\n\n\n\t/* Background Segment Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders the given background event segments onto the grid.\n\t// Returns a subset of the segs that were actually rendered.\n\trenderBgSegs: function(segs) {\n\t\treturn this.renderFill('bgEvent', segs);\n\t},\n\n\n\t// Unrenders all the currently rendered background event segments\n\tdestroyBgSegs: function() {\n\t\tthis.destroyFill('bgEvent');\n\t},\n\n\n\t// Renders a background event element, given the default rendering. Called by the fill system.\n\tbgEventSegEl: function(seg, el) {\n\t\treturn this.view.resolveEventEl(seg.event, el); // will filter through eventRender\n\t},\n\n\n\t// Generates an array of classNames to be used for the default rendering of a background event.\n\t// Called by the fill system.\n\tbgEventSegClasses: function(seg) {\n\t\tvar event = seg.event;\n\t\tvar source = event.source || {};\n\n\t\treturn [ 'fc-bgevent' ].concat(\n\t\t\tevent.className,\n\t\t\tsource.className || []\n\t\t);\n\t},\n\n\n\t// Generates a semicolon-separated CSS string to be used for the default rendering of a background event.\n\t// Called by the fill system.\n\t// TODO: consolidate with getEventSkinCss?\n\tbgEventSegStyles: function(seg) {\n\t\tvar view = this.view;\n\t\tvar event = seg.event;\n\t\tvar source = event.source || {};\n\t\tvar eventColor = event.color;\n\t\tvar sourceColor = source.color;\n\t\tvar optionColor = view.opt('eventColor');\n\t\tvar backgroundColor =\n\t\t\tevent.backgroundColor ||\n\t\t\teventColor ||\n\t\t\tsource.backgroundColor ||\n\t\t\tsourceColor ||\n\t\t\tview.opt('eventBackgroundColor') ||\n\t\t\toptionColor;\n\n\t\tif (backgroundColor) {\n\t\t\treturn 'background-color:' + backgroundColor;\n\t\t}\n\n\t\treturn '';\n\t},\n\n\n\t// Generates an array of classNames to be used for the rendering business hours overlay. Called by the fill system.\n\tbusinessHoursSegClasses: function(seg) {\n\t\treturn [ 'fc-nonbusiness', 'fc-bgevent' ];\n\t},\n\n\n\t/* Handlers\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Attaches event-element-related handlers to the container element and leverage bubbling\n\tbindSegHandlers: function() {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\n\t\t$.each(\n\t\t\t{\n\t\t\t\tmouseenter: function(seg, ev) {\n\t\t\t\t\t_this.triggerSegMouseover(seg, ev);\n\t\t\t\t},\n\t\t\t\tmouseleave: function(seg, ev) {\n\t\t\t\t\t_this.triggerSegMouseout(seg, ev);\n\t\t\t\t},\n\t\t\t\tclick: function(seg, ev) {\n\t\t\t\t\treturn view.trigger('eventClick', this, seg.event, ev); // can return `false` to cancel\n\t\t\t\t},\n\t\t\t\tmousedown: function(seg, ev) {\n\t\t\t\t\tif ($(ev.target).is('.fc-resizer') && view.isEventResizable(seg.event)) {\n\t\t\t\t\t\t_this.segResizeMousedown(seg, ev);\n\t\t\t\t\t}\n\t\t\t\t\telse if (view.isEventDraggable(seg.event)) {\n\t\t\t\t\t\t_this.segDragMousedown(seg, ev);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tfunction(name, func) {\n\t\t\t\t// attach the handler to the container element and only listen for real event elements via bubbling\n\t\t\t\t_this.el.on(name, '.fc-event-container > *', function(ev) {\n\t\t\t\t\tvar seg = $(this).data('fc-seg'); // grab segment data. put there by View::renderEvents\n\n\t\t\t\t\t// only call the handlers if there is not a drag/resize in progress\n\t\t\t\t\tif (seg && !_this.isDraggingSeg && !_this.isResizingSeg) {\n\t\t\t\t\t\treturn func.call(this, seg, ev); // `this` will be the event element\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t);\n\t},\n\n\n\t// Updates internal state and triggers handlers for when an event element is moused over\n\ttriggerSegMouseover: function(seg, ev) {\n\t\tif (!this.mousedOverSeg) {\n\t\t\tthis.mousedOverSeg = seg;\n\t\t\tthis.view.trigger('eventMouseover', seg.el[0], seg.event, ev);\n\t\t}\n\t},\n\n\n\t// Updates internal state and triggers handlers for when an event element is moused out.\n\t// Can be given no arguments, in which case it will mouseout the segment that was previously moused over.\n\ttriggerSegMouseout: function(seg, ev) {\n\t\tev = ev || {}; // if given no args, make a mock mouse event\n\n\t\tif (this.mousedOverSeg) {\n\t\t\tseg = seg || this.mousedOverSeg; // if given no args, use the currently moused-over segment\n\t\t\tthis.mousedOverSeg = null;\n\t\t\tthis.view.trigger('eventMouseout', seg.el[0], seg.event, ev);\n\t\t}\n\t},\n\n\n\t/* Event Dragging\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Called when the user does a mousedown on an event, which might lead to dragging.\n\t// Generic enough to work with any type of Grid.\n\tsegDragMousedown: function(seg, ev) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar el = seg.el;\n\t\tvar event = seg.event;\n\t\tvar dropLocation;\n\n\t\t// A clone of the original element that will move with the mouse\n\t\tvar mouseFollower = new MouseFollower(seg.el, {\n\t\t\tparentEl: view.el,\n\t\t\topacity: view.opt('dragOpacity'),\n\t\t\trevertDuration: view.opt('dragRevertDuration'),\n\t\t\tzIndex: 2 // one above the .fc-view\n\t\t});\n\n\t\t// Tracks mouse movement over the *view's* coordinate map. Allows dragging and dropping between subcomponents\n\t\t// of the view.\n\t\tvar dragListener = new DragListener(view.coordMap, {\n\t\t\tdistance: 5,\n\t\t\tscroll: view.opt('dragScroll'),\n\t\t\tlistenStart: function(ev) {\n\t\t\t\tmouseFollower.hide(); // don't show until we know this is a real drag\n\t\t\t\tmouseFollower.start(ev);\n\t\t\t},\n\t\t\tdragStart: function(ev) {\n\t\t\t\t_this.triggerSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported\n\t\t\t\t_this.isDraggingSeg = true;\n\t\t\t\tview.hideEvent(event); // hide all event segments. our mouseFollower will take over\n\t\t\t\tview.trigger('eventDragStart', el[0], event, ev, {}); // last argument is jqui dummy\n\t\t\t},\n\t\t\tcellOver: function(cell, isOrig) {\n\t\t\t\tvar origCell = seg.cell || dragListener.origCell; // starting cell could be forced (DayGrid.limit)\n\n\t\t\t\tdropLocation = _this.computeEventDrop(origCell, cell, event);\n\t\t\t\tif (dropLocation) {\n\t\t\t\t\tif (view.renderDrag(dropLocation, seg)) { // have the subclass render a visual indication\n\t\t\t\t\t\tmouseFollower.hide(); // if the subclass is already using a mock event \"helper\", hide our own\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tmouseFollower.show();\n\t\t\t\t\t}\n\t\t\t\t\tif (isOrig) {\n\t\t\t\t\t\tdropLocation = null; // needs to have moved cells to be a valid drop\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// have the helper follow the mouse (no snapping) with a warning-style cursor\n\t\t\t\t\tmouseFollower.show();\n\t\t\t\t\tdisableCursor();\n\t\t\t\t}\n\t\t\t},\n\t\t\tcellOut: function() { // called before mouse moves to a different cell OR moved out of all cells\n\t\t\t\tdropLocation = null;\n\t\t\t\tview.destroyDrag(); // unrender whatever was done in renderDrag\n\t\t\t\tmouseFollower.show(); // show in case we are moving out of all cells\n\t\t\t\tenableCursor();\n\t\t\t},\n\t\t\tdragStop: function(ev) {\n\t\t\t\t// do revert animation if hasn't changed. calls a callback when finished (whether animation or not)\n\t\t\t\tmouseFollower.stop(!dropLocation, function() {\n\t\t\t\t\t_this.isDraggingSeg = false;\n\t\t\t\t\tview.destroyDrag();\n\t\t\t\t\tview.showEvent(event);\n\t\t\t\t\tview.trigger('eventDragStop', el[0], event, ev, {}); // last argument is jqui dummy\n\n\t\t\t\t\tif (dropLocation) {\n\t\t\t\t\t\tview.reportEventDrop(event, dropLocation, el, ev);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tenableCursor();\n\t\t\t},\n\t\t\tlistenStop: function() {\n\t\t\t\tmouseFollower.stop(); // put in listenStop in case there was a mousedown but the drag never started\n\t\t\t}\n\t\t});\n\n\t\tdragListener.mousedown(ev); // start listening, which will eventually lead to a dragStart\n\t},\n\n\n\t// Given the cell an event drag began, and the cell event was dropped, calculates the new start/end/allDay\n\t// values for the event. Subclasses may override and set additional properties to be used by renderDrag.\n\t// A falsy returned value indicates an invalid drop.\n\tcomputeEventDrop: function(startCell, endCell, event) {\n\t\tvar dragStart = startCell.start;\n\t\tvar dragEnd = endCell.start;\n\t\tvar delta;\n\t\tvar newStart;\n\t\tvar newEnd;\n\t\tvar newAllDay;\n\t\tvar dropLocation;\n\n\t\tif (dragStart.hasTime() === dragEnd.hasTime()) {\n\t\t\tdelta = diffDayTime(dragEnd, dragStart);\n\t\t\tnewStart = event.start.clone().add(delta);\n\t\t\tif (event.end === null) { // do we need to compute an end?\n\t\t\t\tnewEnd = null;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnewEnd = event.end.clone().add(delta);\n\t\t\t}\n\t\t\tnewAllDay = event.allDay; // keep it the same\n\t\t}\n\t\telse {\n\t\t\t// if switching from day <-> timed, start should be reset to the dropped date, and the end cleared\n\t\t\tnewStart = dragEnd.clone();\n\t\t\tnewEnd = null; // end should be cleared\n\t\t\tnewAllDay = !dragEnd.hasTime();\n\t\t}\n\n\t\tdropLocation = {\n\t\t\tstart: newStart,\n\t\t\tend: newEnd,\n\t\t\tallDay: newAllDay\n\t\t};\n\n\t\tif (!this.view.calendar.isEventRangeAllowed(dropLocation, event)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn dropLocation;\n\t},\n\n\n\t/* External Element Dragging\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Called when a jQuery UI drag is initiated anywhere in the DOM\n\tdocumentDragStart: function(ev, ui) {\n\t\tvar view = this.view;\n\t\tvar el;\n\t\tvar accept;\n\n\t\tif (view.opt('droppable')) { // only listen if this setting is on\n\t\t\tel = $(ev.target);\n\n\t\t\t// Test that the dragged element passes the dropAccept selector or filter function.\n\t\t\t// FYI, the default is \"*\" (matches all)\n\t\t\taccept = view.opt('dropAccept');\n\t\t\tif ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) {\n\n\t\t\t\tthis.startExternalDrag(el, ev, ui);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Called when a jQuery UI drag starts and it needs to be monitored for cell dropping\n\tstartExternalDrag: function(el, ev, ui) {\n\t\tvar _this = this;\n\t\tvar meta = getDraggedElMeta(el); // extra data about event drop, including possible event to create\n\t\tvar dragListener;\n\t\tvar dropLocation; // a null value signals an unsuccessful drag\n\n\t\t// listener that tracks mouse movement over date-associated pixel regions\n\t\tdragListener = new DragListener(this.coordMap, {\n\t\t\tcellOver: function(cell) {\n\t\t\t\tdropLocation = _this.computeExternalDrop(cell, meta);\n\t\t\t\tif (dropLocation) {\n\t\t\t\t\t_this.renderDrag(dropLocation); // called without a seg parameter\n\t\t\t\t}\n\t\t\t\telse { // invalid drop cell\n\t\t\t\t\tdisableCursor();\n\t\t\t\t}\n\t\t\t},\n\t\t\tcellOut: function() {\n\t\t\t\tdropLocation = null; // signal unsuccessful\n\t\t\t\t_this.destroyDrag();\n\t\t\t\tenableCursor();\n\t\t\t}\n\t\t});\n\n\t\t// gets called, only once, when jqui drag is finished\n\t\t$(document).one('dragstop', function(ev, ui) {\n\t\t\t_this.destroyDrag();\n\t\t\tenableCursor();\n\n\t\t\tif (dropLocation) { // element was dropped on a valid date/time cell\n\t\t\t\t_this.view.reportExternalDrop(meta, dropLocation, el, ev, ui);\n\t\t\t}\n\t\t});\n\n\t\tdragListener.startDrag(ev); // start listening immediately\n\t},\n\n\n\t// Given a cell to be dropped upon, and misc data associated with the jqui drag (guaranteed to be a plain object),\n\t// returns start/end dates for the event that would result from the hypothetical drop. end might be null.\n\t// Returning a null value signals an invalid drop cell.\n\tcomputeExternalDrop: function(cell, meta) {\n\t\tvar dropLocation = {\n\t\t\tstart: cell.start.clone(),\n\t\t\tend: null\n\t\t};\n\n\t\t// if dropped on an all-day cell, and element's metadata specified a time, set it\n\t\tif (meta.startTime && !dropLocation.start.hasTime()) {\n\t\t\tdropLocation.start.time(meta.startTime);\n\t\t}\n\n\t\tif (meta.duration) {\n\t\t\tdropLocation.end = dropLocation.start.clone().add(meta.duration);\n\t\t}\n\n\t\tif (!this.view.calendar.isExternalDropRangeAllowed(dropLocation, meta.eventProps)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn dropLocation;\n\t},\n\n\n\n\t/* Drag Rendering (for both events and an external elements)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of an event or external element being dragged.\n\t// `dropLocation` contains hypothetical start/end/allDay values the event would have if dropped. end can be null.\n\t// `seg` is the internal segment object that is being dragged. If dragging an external element, `seg` is null.\n\t// A truthy returned value indicates this method has rendered a helper element.\n\trenderDrag: function(dropLocation, seg) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders a visual indication of an event or external element being dragged\n\tdestroyDrag: function() {\n\t\t// subclasses must implement\n\t},\n\n\n\t/* Resizing\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Called when the user does a mousedown on an event's resizer, which might lead to resizing.\n\t// Generic enough to work with any type of Grid.\n\tsegResizeMousedown: function(seg, ev) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar calendar = view.calendar;\n\t\tvar el = seg.el;\n\t\tvar event = seg.event;\n\t\tvar start = event.start;\n\t\tvar oldEnd = calendar.getEventEnd(event);\n\t\tvar newEnd; // falsy if invalid resize\n\t\tvar dragListener;\n\n\t\tfunction destroy() { // resets the rendering to show the original event\n\t\t\t_this.destroyEventResize();\n\t\t\tview.showEvent(event);\n\t\t\tenableCursor();\n\t\t}\n\n\t\t// Tracks mouse movement over the *grid's* coordinate map\n\t\tdragListener = new DragListener(this.coordMap, {\n\t\t\tdistance: 5,\n\t\t\tscroll: view.opt('dragScroll'),\n\t\t\tdragStart: function(ev) {\n\t\t\t\t_this.triggerSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported\n\t\t\t\t_this.isResizingSeg = true;\n\t\t\t\tview.trigger('eventResizeStart', el[0], event, ev, {}); // last argument is jqui dummy\n\t\t\t},\n\t\t\tcellOver: function(cell) {\n\t\t\t\tnewEnd = cell.end;\n\n\t\t\t\tif (!newEnd.isAfter(start)) { // was end moved before start?\n\t\t\t\t\tnewEnd = start.clone().add( // make the event span a single slot\n\t\t\t\t\t\tdiffDayTime(cell.end, cell.start) // assumes all slot durations are the same\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (newEnd.isSame(oldEnd)) {\n\t\t\t\t\tnewEnd = null;\n\t\t\t\t}\n\t\t\t\telse if (!calendar.isEventRangeAllowed({ start: start, end: newEnd }, event)) {\n\t\t\t\t\tnewEnd = null;\n\t\t\t\t\tdisableCursor();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_this.renderEventResize({ start: start, end: newEnd }, seg);\n\t\t\t\t\tview.hideEvent(event);\n\t\t\t\t}\n\t\t\t},\n\t\t\tcellOut: function() { // called before mouse moves to a different cell OR moved out of all cells\n\t\t\t\tnewEnd = null;\n\t\t\t\tdestroy();\n\t\t\t},\n\t\t\tdragStop: function(ev) {\n\t\t\t\t_this.isResizingSeg = false;\n\t\t\t\tdestroy();\n\t\t\t\tview.trigger('eventResizeStop', el[0], event, ev, {}); // last argument is jqui dummy\n\n\t\t\t\tif (newEnd) { // valid date to resize to?\n\t\t\t\t\tview.reportEventResize(event, newEnd, el, ev);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tdragListener.mousedown(ev); // start listening, which will eventually lead to a dragStart\n\t},\n\n\n\t// Renders a visual indication of an event being resized.\n\t// `range` has the updated dates of the event. `seg` is the original segment object involved in the drag.\n\trenderEventResize: function(range, seg) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders a visual indication of an event being resized.\n\tdestroyEventResize: function() {\n\t\t// subclasses must implement\n\t},\n\n\n\t/* Rendering Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Compute the text that should be displayed on an event's element.\n\t// `range` can be the Event object itself, or something range-like, with at least a `start`.\n\t// The `timeFormat` options and the grid's default format is used, but `formatStr` can override.\n\tgetEventTimeText: function(range, formatStr) {\n\n\t\tformatStr = formatStr || this.eventTimeFormat;\n\n\t\tif (range.end && this.displayEventEnd) {\n\t\t\treturn this.view.formatRange(range, formatStr);\n\t\t}\n\t\telse {\n\t\t\treturn range.start.format(formatStr);\n\t\t}\n\t},\n\n\n\t// Generic utility for generating the HTML classNames for an event segment's element\n\tgetSegClasses: function(seg, isDraggable, isResizable) {\n\t\tvar event = seg.event;\n\t\tvar classes = [\n\t\t\t'fc-event',\n\t\t\tseg.isStart ? 'fc-start' : 'fc-not-start',\n\t\t\tseg.isEnd ? 'fc-end' : 'fc-not-end'\n\t\t].concat(\n\t\t\tevent.className,\n\t\t\tevent.source ? event.source.className : []\n\t\t);\n\n\t\tif (isDraggable) {\n\t\t\tclasses.push('fc-draggable');\n\t\t}\n\t\tif (isResizable) {\n\t\t\tclasses.push('fc-resizable');\n\t\t}\n\n\t\treturn classes;\n\t},\n\n\n\t// Utility for generating a CSS string with all the event skin-related properties\n\tgetEventSkinCss: function(event) {\n\t\tvar view = this.view;\n\t\tvar source = event.source || {};\n\t\tvar eventColor = event.color;\n\t\tvar sourceColor = source.color;\n\t\tvar optionColor = view.opt('eventColor');\n\t\tvar backgroundColor =\n\t\t\tevent.backgroundColor ||\n\t\t\teventColor ||\n\t\t\tsource.backgroundColor ||\n\t\t\tsourceColor ||\n\t\t\tview.opt('eventBackgroundColor') ||\n\t\t\toptionColor;\n\t\tvar borderColor =\n\t\t\tevent.borderColor ||\n\t\t\teventColor ||\n\t\t\tsource.borderColor ||\n\t\t\tsourceColor ||\n\t\t\tview.opt('eventBorderColor') ||\n\t\t\toptionColor;\n\t\tvar textColor =\n\t\t\tevent.textColor ||\n\t\t\tsource.textColor ||\n\t\t\tview.opt('eventTextColor');\n\t\tvar statements = [];\n\t\tif (backgroundColor) {\n\t\t\tstatements.push('background-color:' + backgroundColor);\n\t\t}\n\t\tif (borderColor) {\n\t\t\tstatements.push('border-color:' + borderColor);\n\t\t}\n\t\tif (textColor) {\n\t\t\tstatements.push('color:' + textColor);\n\t\t}\n\t\treturn statements.join(';');\n\t},\n\n\n\t/* Converting events -> ranges -> segs\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Converts an array of event objects into an array of event segment objects.\n\t// A custom `rangeToSegsFunc` may be given for arbitrarily slicing up events.\n\teventsToSegs: function(events, rangeToSegsFunc) {\n\t\tvar eventRanges = this.eventsToRanges(events);\n\t\tvar segs = [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < eventRanges.length; i++) {\n\t\t\tsegs.push.apply(\n\t\t\t\tsegs,\n\t\t\t\tthis.eventRangeToSegs(eventRanges[i], rangeToSegsFunc)\n\t\t\t);\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t// Converts an array of events into an array of \"range\" objects.\n\t// A \"range\" object is a plain object with start/end properties denoting the time it covers. Also an event property.\n\t// For \"normal\" events, this will be identical to the event's start/end, but for \"inverse-background\" events,\n\t// will create an array of ranges that span the time *not* covered by the given event.\n\teventsToRanges: function(events) {\n\t\tvar _this = this;\n\t\tvar eventsById = groupEventsById(events);\n\t\tvar ranges = [];\n\n\t\t// group by ID so that related inverse-background events can be rendered together\n\t\t$.each(eventsById, function(id, eventGroup) {\n\t\t\tif (eventGroup.length) {\n\t\t\t\tranges.push.apply(\n\t\t\t\t\tranges,\n\t\t\t\t\tisInverseBgEvent(eventGroup[0]) ?\n\t\t\t\t\t\t_this.eventsToInverseRanges(eventGroup) :\n\t\t\t\t\t\t_this.eventsToNormalRanges(eventGroup)\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\treturn ranges;\n\t},\n\n\n\t// Converts an array of \"normal\" events (not inverted rendering) into a parallel array of ranges\n\teventsToNormalRanges: function(events) {\n\t\tvar calendar = this.view.calendar;\n\t\tvar ranges = [];\n\t\tvar i, event;\n\t\tvar eventStart, eventEnd;\n\n\t\tfor (i = 0; i < events.length; i++) {\n\t\t\tevent = events[i];\n\n\t\t\t// make copies and normalize by stripping timezone\n\t\t\teventStart = event.start.clone().stripZone();\n\t\t\teventEnd = calendar.getEventEnd(event).stripZone();\n\n\t\t\tranges.push({\n\t\t\t\tevent: event,\n\t\t\t\tstart: eventStart,\n\t\t\t\tend: eventEnd,\n\t\t\t\teventStartMS: +eventStart,\n\t\t\t\teventDurationMS: eventEnd - eventStart\n\t\t\t});\n\t\t}\n\n\t\treturn ranges;\n\t},\n\n\n\t// Converts an array of events, with inverse-background rendering, into an array of range objects.\n\t// The range objects will cover all the time NOT covered by the events.\n\teventsToInverseRanges: function(events) {\n\t\tvar view = this.view;\n\t\tvar viewStart = view.start.clone().stripZone(); // normalize timezone\n\t\tvar viewEnd = view.end.clone().stripZone(); // normalize timezone\n\t\tvar normalRanges = this.eventsToNormalRanges(events); // will give us normalized dates we can use w/o copies\n\t\tvar inverseRanges = [];\n\t\tvar event0 = events[0]; // assign this to each range's `.event`\n\t\tvar start = viewStart; // the end of the previous range. the start of the new range\n\t\tvar i, normalRange;\n\n\t\t// ranges need to be in order. required for our date-walking algorithm\n\t\tnormalRanges.sort(compareNormalRanges);\n\n\t\tfor (i = 0; i < normalRanges.length; i++) {\n\t\t\tnormalRange = normalRanges[i];\n\n\t\t\t// add the span of time before the event (if there is any)\n\t\t\tif (normalRange.start > start) { // compare millisecond time (skip any ambig logic)\n\t\t\t\tinverseRanges.push({\n\t\t\t\t\tevent: event0,\n\t\t\t\t\tstart: start,\n\t\t\t\t\tend: normalRange.start\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tstart = normalRange.end;\n\t\t}\n\n\t\t// add the span of time after the last event (if there is any)\n\t\tif (start < viewEnd) { // compare millisecond time (skip any ambig logic)\n\t\t\tinverseRanges.push({\n\t\t\t\tevent: event0,\n\t\t\t\tstart: start,\n\t\t\t\tend: viewEnd\n\t\t\t});\n\t\t}\n\n\t\treturn inverseRanges;\n\t},\n\n\n\t// Slices the given event range into one or more segment objects.\n\t// A `rangeToSegsFunc` custom slicing function can be given.\n\teventRangeToSegs: function(eventRange, rangeToSegsFunc) {\n\t\tvar segs;\n\t\tvar i, seg;\n\n\t\tif (rangeToSegsFunc) {\n\t\t\tsegs = rangeToSegsFunc(eventRange);\n\t\t}\n\t\telse {\n\t\t\tsegs = this.rangeToSegs(eventRange); // defined by the subclass\n\t\t}\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\tseg.event = eventRange.event;\n\t\t\tseg.eventStartMS = eventRange.eventStartMS;\n\t\t\tseg.eventDurationMS = eventRange.eventDurationMS;\n\t\t}\n\n\t\treturn segs;\n\t}\n\n});\n\n\n/* Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nfunction isBgEvent(event) { // returns true if background OR inverse-background\n\tvar rendering = getEventRendering(event);\n\treturn rendering === 'background' || rendering === 'inverse-background';\n}\n\n\nfunction isInverseBgEvent(event) {\n\treturn getEventRendering(event) === 'inverse-background';\n}\n\n\nfunction getEventRendering(event) {\n\treturn firstDefined((event.source || {}).rendering, event.rendering);\n}\n\n\nfunction groupEventsById(events) {\n\tvar eventsById = {};\n\tvar i, event;\n\n\tfor (i = 0; i < events.length; i++) {\n\t\tevent = events[i];\n\t\t(eventsById[event._id] || (eventsById[event._id] = [])).push(event);\n\t}\n\n\treturn eventsById;\n}\n\n\n// A cmp function for determining which non-inverted \"ranges\" (see above) happen earlier\nfunction compareNormalRanges(range1, range2) {\n\treturn range1.eventStartMS - range2.eventStartMS; // earlier ranges go first\n}\n\n\n// A cmp function for determining which segments should take visual priority\n// DOES NOT WORK ON INVERTED BACKGROUND EVENTS because they have no eventStartMS/eventDurationMS\nfunction compareSegs(seg1, seg2) {\n\treturn seg1.eventStartMS - seg2.eventStartMS || // earlier events go first\n\t\tseg2.eventDurationMS - seg1.eventDurationMS || // tie? longer events go first\n\t\tseg2.event.allDay - seg1.event.allDay || // tie? put all-day events first (booleans cast to 0/1)\n\t\t(seg1.event.title || '').localeCompare(seg2.event.title); // tie? alphabetically by title\n}\n\nfc.compareSegs = compareSegs; // export\n\n\n/* External-Dragging-Element Data\n----------------------------------------------------------------------------------------------------------------------*/\n\n// Require all HTML5 data-* attributes used by FullCalendar to have this prefix.\n// A value of '' will query attributes like data-event. A value of 'fc' will query attributes like data-fc-event.\nfc.dataAttrPrefix = '';\n\n// Given a jQuery element that might represent a dragged FullCalendar event, returns an intermediate data structure\n// to be used for Event Object creation.\n// A defined `.eventProps`, even when empty, indicates that an event should be created.\nfunction getDraggedElMeta(el) {\n\tvar prefix = fc.dataAttrPrefix;\n\tvar eventProps; // properties for creating the event, not related to date/time\n\tvar startTime; // a Duration\n\tvar duration;\n\tvar stick;\n\n\tif (prefix) { prefix += '-'; }\n\teventProps = el.data(prefix + 'event') || null;\n\n\tif (eventProps) {\n\t\tif (typeof eventProps === 'object') {\n\t\t\teventProps = $.extend({}, eventProps); // make a copy\n\t\t}\n\t\telse { // something like 1 or true. still signal event creation\n\t\t\teventProps = {};\n\t\t}\n\n\t\t// pluck special-cased date/time properties\n\t\tstartTime = eventProps.start;\n\t\tif (startTime == null) { startTime = eventProps.time; } // accept 'time' as well\n\t\tduration = eventProps.duration;\n\t\tstick = eventProps.stick;\n\t\tdelete eventProps.start;\n\t\tdelete eventProps.time;\n\t\tdelete eventProps.duration;\n\t\tdelete eventProps.stick;\n\t}\n\n\t// fallback to standalone attribute values for each of the date/time properties\n\tif (startTime == null) { startTime = el.data(prefix + 'start'); }\n\tif (startTime == null) { startTime = el.data(prefix + 'time'); } // accept 'time' as well\n\tif (duration == null) { duration = el.data(prefix + 'duration'); }\n\tif (stick == null) { stick = el.data(prefix + 'stick'); }\n\n\t// massage into correct data types\n\tstartTime = startTime != null ? moment.duration(startTime) : null;\n\tduration = duration != null ? moment.duration(duration) : null;\n\tstick = Boolean(stick);\n\n\treturn { eventProps: eventProps, startTime: startTime, duration: duration, stick: stick };\n}\n\n\n    /* A component that renders a grid of whole-days that runs horizontally. There can be multiple rows, one per week.\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar DayGrid = Grid.extend({\n\n\tnumbersVisible: false, // should render a row for day/week numbers? set by outside view. TODO: make internal\n\tbottomCoordPadding: 0, // hack for extending the hit area for the last row of the coordinate grid\n\tbreakOnWeeks: null, // should create a new row for each week? set by outside view\n\n\tcellDates: null, // flat chronological array of each cell's dates\n\tdayToCellOffsets: null, // maps days offsets from grid's start date, to cell offsets\n\n\trowEls: null, // set of fake row elements\n\tdayEls: null, // set of whole-day elements comprising the row's background\n\thelperEls: null, // set of cell skeleton elements for rendering the mock event \"helper\"\n\n\n\t// Renders the rows and columns into the component's `this.el`, which should already be assigned.\n\t// isRigid determins whether the individual rows should ignore the contents and be a constant height.\n\t// Relies on the view's colCnt and rowCnt. In the future, this component should probably be self-sufficient.\n\trender: function(isRigid) {\n\t\tvar view = this.view;\n\t\tvar rowCnt = this.rowCnt;\n\t\tvar colCnt = this.colCnt;\n\t\tvar cellCnt = rowCnt * colCnt;\n\t\tvar html = '';\n\t\tvar row;\n\t\tvar i, cell;\n\n\t\tfor (row = 0; row < rowCnt; row++) {\n\t\t\thtml += this.dayRowHtml(row, isRigid);\n\t\t}\n\t\tthis.el.html(html);\n\n\t\tthis.rowEls = this.el.find('.fc-row');\n\t\tthis.dayEls = this.el.find('.fc-day');\n\n\t\t// trigger dayRender with each cell's element\n\t\tfor (i = 0; i < cellCnt; i++) {\n\t\t\tcell = this.getCell(i);\n\t\t\tview.trigger('dayRender', null, cell.start, this.dayEls.eq(i));\n\t\t}\n\n\t\tGrid.prototype.render.call(this); // call the super-method\n\t},\n\n\n\tdestroy: function() {\n\t\tthis.destroySegPopover();\n\t\tGrid.prototype.destroy.call(this); // call the super-method\n\t},\n\n\n\t// Generates the HTML for a single row. `row` is the row number.\n\tdayRowHtml: function(row, isRigid) {\n\t\tvar view = this.view;\n\t\tvar classes = [ 'fc-row', 'fc-week', view.widgetContentClass ];\n\n\t\tif (isRigid) {\n\t\t\tclasses.push('fc-rigid');\n\t\t}\n\n\t\treturn '' +\n\t\t\t'<div class=\"' + classes.join(' ') + '\">' +\n\t\t\t\t'<div class=\"fc-bg\">' +\n\t\t\t\t\t'<table>' +\n\t\t\t\t\t\tthis.rowHtml('day', row) + // leverages RowRenderer. calls dayCellHtml()\n\t\t\t\t\t'</table>' +\n\t\t\t\t'</div>' +\n\t\t\t\t'<div class=\"fc-content-skeleton\">' +\n\t\t\t\t\t'<table>' +\n\t\t\t\t\t\t(this.numbersVisible ?\n\t\t\t\t\t\t\t'<thead>' +\n\t\t\t\t\t\t\t\tthis.rowHtml('number', row) + // leverages RowRenderer. View will define render method\n\t\t\t\t\t\t\t'</thead>' :\n\t\t\t\t\t\t\t''\n\t\t\t\t\t\t\t) +\n\t\t\t\t\t'</table>' +\n\t\t\t\t'</div>' +\n\t\t\t'</div>';\n\t},\n\n\n\t// Renders the HTML for a whole-day cell. Will eventually end up in the day-row's background.\n\t// We go through a 'day' row type instead of just doing a 'bg' row type so that the View can do custom rendering\n\t// specifically for whole-day rows, whereas a 'bg' might also be used for other purposes (TimeGrid bg for example).\n\tdayCellHtml: function(cell) {\n\t\treturn this.bgCellHtml(cell);\n\t},\n\n\n\t/* Options\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes a default column header formatting string if `colFormat` is not explicitly defined\n\tcomputeColHeadFormat: function() {\n\t\tif (this.rowCnt > 1) { // more than one week row. day numbers will be in each cell\n\t\t\treturn 'ddd'; // \"Sat\"\n\t\t}\n\t\telse if (this.colCnt > 1) { // multiple days, so full single date string WON'T be in title text\n\t\t\treturn this.view.opt('dayOfMonthFormat'); // \"Sat 12/10\"\n\t\t}\n\t\telse { // single day, so full single date string will probably be in title text\n\t\t\treturn 'dddd'; // \"Saturday\"\n\t\t}\n\t},\n\n\n\t// Computes a default event time formatting string if `timeFormat` is not explicitly defined\n\tcomputeEventTimeFormat: function() {\n\t\treturn this.view.opt('extraSmallTimeFormat'); // like \"6p\" or \"6:30p\"\n\t},\n\n\n\t// Computes a default `displayEventEnd` value if one is not expliclty defined\n\tcomputeDisplayEventEnd: function() {\n\t\treturn this.colCnt == 1; // we'll likely have space if there's only one day\n\t},\n\n\n\t/* Cell System\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Initializes row/col information\n\tupdateCells: function() {\n\t\tvar cellDates;\n\t\tvar firstDay;\n\t\tvar rowCnt;\n\t\tvar colCnt;\n\n\t\tthis.updateCellDates(); // populates cellDates and dayToCellOffsets\n\t\tcellDates = this.cellDates;\n\n\t\tif (this.breakOnWeeks) {\n\t\t\t// count columns until the day-of-week repeats\n\t\t\tfirstDay = cellDates[0].day();\n\t\t\tfor (colCnt = 1; colCnt < cellDates.length; colCnt++) {\n\t\t\t\tif (cellDates[colCnt].day() == firstDay) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\trowCnt = Math.ceil(cellDates.length / colCnt);\n\t\t}\n\t\telse {\n\t\t\trowCnt = 1;\n\t\t\tcolCnt = cellDates.length;\n\t\t}\n\n\t\tthis.rowCnt = rowCnt;\n\t\tthis.colCnt = colCnt;\n\t},\n\n\n\t// Populates cellDates and dayToCellOffsets\n\tupdateCellDates: function() {\n\t\tvar view = this.view;\n\t\tvar date = this.start.clone();\n\t\tvar dates = [];\n\t\tvar offset = -1;\n\t\tvar offsets = [];\n\n\t\twhile (date.isBefore(this.end)) { // loop each day from start to end\n\t\t\tif (view.isHiddenDay(date)) {\n\t\t\t\toffsets.push(offset + 0.5); // mark that it's between offsets\n\t\t\t}\n\t\t\telse {\n\t\t\t\toffset++;\n\t\t\t\toffsets.push(offset);\n\t\t\t\tdates.push(date.clone());\n\t\t\t}\n\t\t\tdate.add(1, 'days');\n\t\t}\n\n\t\tthis.cellDates = dates;\n\t\tthis.dayToCellOffsets = offsets;\n\t},\n\n\n\t// Given a cell object, generates a range object\n\tcomputeCellRange: function(cell) {\n\t\tvar colCnt = this.colCnt;\n\t\tvar index = cell.row * colCnt + (this.isRTL ? colCnt - cell.col - 1 : cell.col);\n\t\tvar start = this.cellDates[index].clone();\n\t\tvar end = start.clone().add(1, 'day');\n\n\t\treturn { start: start, end: end };\n\t},\n\n\n\t// Retrieves the element representing the given row\n\tgetRowEl: function(row) {\n\t\treturn this.rowEls.eq(row);\n\t},\n\n\n\t// Retrieves the element representing the given column\n\tgetColEl: function(col) {\n\t\treturn this.dayEls.eq(col);\n\t},\n\n\n\t// Gets the whole-day element associated with the cell\n\tgetCellDayEl: function(cell) {\n\t\treturn this.dayEls.eq(cell.row * this.colCnt + cell.col);\n\t},\n\n\n\t// Overrides Grid's method for when row coordinates are computed\n\tcomputeRowCoords: function() {\n\t\tvar rowCoords = Grid.prototype.computeRowCoords.call(this); // call the super-method\n\n\t\t// hack for extending last row (used by AgendaView)\n\t\trowCoords[rowCoords.length - 1].bottom += this.bottomCoordPadding;\n\n\t\treturn rowCoords;\n\t},\n\n\n\t/* Dates\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Slices up a date range by row into an array of segments\n\trangeToSegs: function(range) {\n\t\tvar isRTL = this.isRTL;\n\t\tvar rowCnt = this.rowCnt;\n\t\tvar colCnt = this.colCnt;\n\t\tvar segs = [];\n\t\tvar first, last; // inclusive cell-offset range for given range\n\t\tvar row;\n\t\tvar rowFirst, rowLast; // inclusive cell-offset range for current row\n\t\tvar isStart, isEnd;\n\t\tvar segFirst, segLast; // inclusive cell-offset range for segment\n\t\tvar seg;\n\n\t\trange = this.view.computeDayRange(range); // make whole-day range, considering nextDayThreshold\n\t\tfirst = this.dateToCellOffset(range.start);\n\t\tlast = this.dateToCellOffset(range.end.subtract(1, 'days')); // offset of inclusive end date\n\n\t\tfor (row = 0; row < rowCnt; row++) {\n\t\t\trowFirst = row * colCnt;\n\t\t\trowLast = rowFirst + colCnt - 1;\n\n\t\t\t// intersect segment's offset range with the row's\n\t\t\tsegFirst = Math.max(rowFirst, first);\n\t\t\tsegLast = Math.min(rowLast, last);\n\n\t\t\t// deal with in-between indices\n\t\t\tsegFirst = Math.ceil(segFirst); // in-between starts round to next cell\n\t\t\tsegLast = Math.floor(segLast); // in-between ends round to prev cell\n\n\t\t\tif (segFirst <= segLast) { // was there any intersection with the current row?\n\n\t\t\t\t// must be matching integers to be the segment's start/end\n\t\t\t\tisStart = segFirst === first;\n\t\t\t\tisEnd = segLast === last;\n\n\t\t\t\t// translate offsets to be relative to start-of-row\n\t\t\t\tsegFirst -= rowFirst;\n\t\t\t\tsegLast -= rowFirst;\n\n\t\t\t\tseg = { row: row, isStart: isStart, isEnd: isEnd };\n\t\t\t\tif (isRTL) {\n\t\t\t\t\tseg.leftCol = colCnt - segLast - 1;\n\t\t\t\t\tseg.rightCol = colCnt - segFirst - 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tseg.leftCol = segFirst;\n\t\t\t\t\tseg.rightCol = segLast;\n\t\t\t\t}\n\t\t\t\tsegs.push(seg);\n\t\t\t}\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t// Given a date, returns its chronolocial cell-offset from the first cell of the grid.\n\t// If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\n\t// If before the first offset, returns a negative number.\n\t// If after the last offset, returns an offset past the last cell offset.\n\t// Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\n\tdateToCellOffset: function(date) {\n\t\tvar offsets = this.dayToCellOffsets;\n\t\tvar day = date.diff(this.start, 'days');\n\n\t\tif (day < 0) {\n\t\t\treturn offsets[0] - 1;\n\t\t}\n\t\telse if (day >= offsets.length) {\n\t\t\treturn offsets[offsets.length - 1] + 1;\n\t\t}\n\t\telse {\n\t\t\treturn offsets[day];\n\t\t}\n\t},\n\n\n\t/* Event Drag Visualization\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// TODO: move to DayGrid.event, similar to what we did with Grid's drag methods\n\n\n\t// Renders a visual indication of an event or external element being dragged.\n\t// The dropLocation's end can be null. seg can be null. See Grid::renderDrag for more info.\n\trenderDrag: function(dropLocation, seg) {\n\t\tvar opacity;\n\n\t\t// always render a highlight underneath\n\t\tthis.renderHighlight(\n\t\t\tthis.view.calendar.ensureVisibleEventRange(dropLocation) // needs to be a proper range\n\t\t);\n\n\t\t// if a segment from the same calendar but another component is being dragged, render a helper event\n\t\tif (seg && !seg.el.closest(this.el).length) {\n\n\t\t\tthis.renderRangeHelper(dropLocation, seg);\n\n\t\t\topacity = this.view.opt('dragOpacity');\n\t\t\tif (opacity !== undefined) {\n\t\t\t\tthis.helperEls.css('opacity', opacity);\n\t\t\t}\n\n\t\t\treturn true; // a helper has been rendered\n\t\t}\n\t},\n\n\n\t// Unrenders any visual indication of a hovering event\n\tdestroyDrag: function() {\n\t\tthis.destroyHighlight();\n\t\tthis.destroyHelper();\n\t},\n\n\n\t/* Event Resize Visualization\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of an event being resized\n\trenderEventResize: function(range, seg) {\n\t\tthis.renderHighlight(range);\n\t\tthis.renderRangeHelper(range, seg);\n\t},\n\n\n\t// Unrenders a visual indication of an event being resized\n\tdestroyEventResize: function() {\n\t\tthis.destroyHighlight();\n\t\tthis.destroyHelper();\n\t},\n\n\n\t/* Event Helper\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a mock \"helper\" event. `sourceSeg` is the associated internal segment object. It can be null.\n\trenderHelper: function(event, sourceSeg) {\n\t\tvar helperNodes = [];\n\t\tvar segs = this.eventsToSegs([ event ]);\n\t\tvar rowStructs;\n\n\t\tsegs = this.renderFgSegEls(segs); // assigns each seg's el and returns a subset of segs that were rendered\n\t\trowStructs = this.renderSegRows(segs);\n\n\t\t// inject each new event skeleton into each associated row\n\t\tthis.rowEls.each(function(row, rowNode) {\n\t\t\tvar rowEl = $(rowNode); // the .fc-row\n\t\t\tvar skeletonEl = $('<div class=\"fc-helper-skeleton\"><table/></div>'); // will be absolutely positioned\n\t\t\tvar skeletonTop;\n\n\t\t\t// If there is an original segment, match the top position. Otherwise, put it at the row's top level\n\t\t\tif (sourceSeg && sourceSeg.row === row) {\n\t\t\t\tskeletonTop = sourceSeg.el.position().top;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tskeletonTop = rowEl.find('.fc-content-skeleton tbody').position().top;\n\t\t\t}\n\n\t\t\tskeletonEl.css('top', skeletonTop)\n\t\t\t\t.find('table')\n\t\t\t\t\t.append(rowStructs[row].tbodyEl);\n\n\t\t\trowEl.append(skeletonEl);\n\t\t\thelperNodes.push(skeletonEl[0]);\n\t\t});\n\n\t\tthis.helperEls = $(helperNodes); // array -> jQuery set\n\t},\n\n\n\t// Unrenders any visual indication of a mock helper event\n\tdestroyHelper: function() {\n\t\tif (this.helperEls) {\n\t\t\tthis.helperEls.remove();\n\t\t\tthis.helperEls = null;\n\t\t}\n\t},\n\n\n\t/* Fill System (highlight, background events, business hours)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tfillSegTag: 'td', // override the default tag name\n\n\n\t// Renders a set of rectangles over the given segments of days.\n\t// Only returns segments that successfully rendered.\n\trenderFill: function(type, segs) {\n\t\tvar nodes = [];\n\t\tvar i, seg;\n\t\tvar skeletonEl;\n\n\t\tsegs = this.renderFillSegEls(type, segs); // assignes `.el` to each seg. returns successfully rendered segs\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\tskeletonEl = this.renderFillRow(type, seg);\n\t\t\tthis.rowEls.eq(seg.row).append(skeletonEl);\n\t\t\tnodes.push(skeletonEl[0]);\n\t\t}\n\n\t\tthis.elsByFill[type] = $(nodes);\n\n\t\treturn segs;\n\t},\n\n\n\t// Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.\n\trenderFillRow: function(type, seg) {\n\t\tvar colCnt = this.colCnt;\n\t\tvar startCol = seg.leftCol;\n\t\tvar endCol = seg.rightCol + 1;\n\t\tvar skeletonEl;\n\t\tvar trEl;\n\n\t\tskeletonEl = $(\n\t\t\t'<div class=\"fc-' + type.toLowerCase() + '-skeleton\">' +\n\t\t\t\t'<table><tr/></table>' +\n\t\t\t'</div>'\n\t\t);\n\t\ttrEl = skeletonEl.find('tr');\n\n\t\tif (startCol > 0) {\n\t\t\ttrEl.append('<td colspan=\"' + startCol + '\"/>');\n\t\t}\n\n\t\ttrEl.append(\n\t\t\tseg.el.attr('colspan', endCol - startCol)\n\t\t);\n\n\t\tif (endCol < colCnt) {\n\t\t\ttrEl.append('<td colspan=\"' + (colCnt - endCol) + '\"/>');\n\t\t}\n\n\t\tthis.bookendCells(trEl, type);\n\n\t\treturn skeletonEl;\n\t}\n\n});\n\n    /* Event-rendering methods for the DayGrid class\n----------------------------------------------------------------------------------------------------------------------*/\n\nDayGrid.mixin({\n\n\trowStructs: null, // an array of objects, each holding information about a row's foreground event-rendering\n\n\n\t// Unrenders all events currently rendered on the grid\n\tdestroyEvents: function() {\n\t\tthis.destroySegPopover(); // removes the \"more..\" events popover\n\t\tGrid.prototype.destroyEvents.apply(this, arguments); // calls the super-method\n\t},\n\n\n\t// Retrieves all rendered segment objects currently rendered on the grid\n\tgetEventSegs: function() {\n\t\treturn Grid.prototype.getEventSegs.call(this) // get the segments from the super-method\n\t\t\t.concat(this.popoverSegs || []); // append the segments from the \"more...\" popover\n\t},\n\n\n\t// Renders the given background event segments onto the grid\n\trenderBgSegs: function(segs) {\n\n\t\t// don't render timed background events\n\t\tvar allDaySegs = $.grep(segs, function(seg) {\n\t\t\treturn seg.event.allDay;\n\t\t});\n\n\t\treturn Grid.prototype.renderBgSegs.call(this, allDaySegs); // call the super-method\n\t},\n\n\n\t// Renders the given foreground event segments onto the grid\n\trenderFgSegs: function(segs) {\n\t\tvar rowStructs;\n\n\t\t// render an `.el` on each seg\n\t\t// returns a subset of the segs. segs that were actually rendered\n\t\tsegs = this.renderFgSegEls(segs);\n\n\t\trowStructs = this.rowStructs = this.renderSegRows(segs);\n\n\t\t// append to each row's content skeleton\n\t\tthis.rowEls.each(function(i, rowNode) {\n\t\t\t$(rowNode).find('.fc-content-skeleton > table').append(\n\t\t\t\trowStructs[i].tbodyEl\n\t\t\t);\n\t\t});\n\n\t\treturn segs; // return only the segs that were actually rendered\n\t},\n\n\n\t// Unrenders all currently rendered foreground event segments\n\tdestroyFgSegs: function() {\n\t\tvar rowStructs = this.rowStructs || [];\n\t\tvar rowStruct;\n\n\t\twhile ((rowStruct = rowStructs.pop())) {\n\t\t\trowStruct.tbodyEl.remove();\n\t\t}\n\n\t\tthis.rowStructs = null;\n\t},\n\n\n\t// Uses the given events array to generate <tbody> elements that should be appended to each row's content skeleton.\n\t// Returns an array of rowStruct objects (see the bottom of `renderSegRow`).\n\t// PRECONDITION: each segment shoud already have a rendered and assigned `.el`\n\trenderSegRows: function(segs) {\n\t\tvar rowStructs = [];\n\t\tvar segRows;\n\t\tvar row;\n\n\t\tsegRows = this.groupSegRows(segs); // group into nested arrays\n\n\t\t// iterate each row of segment groupings\n\t\tfor (row = 0; row < segRows.length; row++) {\n\t\t\trowStructs.push(\n\t\t\t\tthis.renderSegRow(row, segRows[row])\n\t\t\t);\n\t\t}\n\n\t\treturn rowStructs;\n\t},\n\n\n\t// Builds the HTML to be used for the default element for an individual segment\n\tfgSegHtml: function(seg, disableResizing) {\n\t\tvar view = this.view;\n\t\tvar event = seg.event;\n\t\tvar isDraggable = view.isEventDraggable(event);\n\t\tvar isResizable = !disableResizing && event.allDay && seg.isEnd && view.isEventResizable(event);\n\t\tvar classes = this.getSegClasses(seg, isDraggable, isResizable);\n\t\tvar skinCss = this.getEventSkinCss(event);\n\t\tvar timeHtml = '';\n\t\tvar titleHtml;\n\n\t\tclasses.unshift('fc-day-grid-event');\n\n\t\t// Only display a timed events time if it is the starting segment\n\t\tif (!event.allDay && seg.isStart) {\n\t\t\ttimeHtml = '<span class=\"fc-time\">' + htmlEscape(this.getEventTimeText(event)) + '</span>';\n\t\t}\n\n\t\ttitleHtml =\n\t\t\t'<span class=\"fc-title\">' +\n\t\t\t\t(htmlEscape(event.title || '') || '&nbsp;') + // we always want one line of height\n\t\t\t'</span>';\n\t\t\n\t\treturn '<a class=\"' + classes.join(' ') + '\"' +\n\t\t\t\t(event.url ?\n\t\t\t\t\t' href=\"' + htmlEscape(event.url) + '\"' :\n\t\t\t\t\t''\n\t\t\t\t\t) +\n\t\t\t\t(skinCss ?\n\t\t\t\t\t' style=\"' + skinCss + '\"' :\n\t\t\t\t\t''\n\t\t\t\t\t) +\n\t\t\t'>' +\n\t\t\t\t'<div class=\"fc-content\">' +\n\t\t\t\t\t(this.isRTL ?\n\t\t\t\t\t\ttitleHtml + ' ' + timeHtml : // put a natural space in between\n\t\t\t\t\t\ttimeHtml + ' ' + titleHtml   //\n\t\t\t\t\t\t) +\n\t\t\t\t'</div>' +\n\t\t\t\t(isResizable ?\n\t\t\t\t\t'<div class=\"fc-resizer\"/>' :\n\t\t\t\t\t''\n\t\t\t\t\t) +\n\t\t\t'</a>';\n\t},\n\n\n\t// Given a row # and an array of segments all in the same row, render a <tbody> element, a skeleton that contains\n\t// the segments. Returns object with a bunch of internal data about how the render was calculated.\n\trenderSegRow: function(row, rowSegs) {\n\t\tvar colCnt = this.colCnt;\n\t\tvar segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels\n\t\tvar levelCnt = Math.max(1, segLevels.length); // ensure at least one level\n\t\tvar tbody = $('<tbody/>');\n\t\tvar segMatrix = []; // lookup for which segments are rendered into which level+col cells\n\t\tvar cellMatrix = []; // lookup for all <td> elements of the level+col matrix\n\t\tvar loneCellMatrix = []; // lookup for <td> elements that only take up a single column\n\t\tvar i, levelSegs;\n\t\tvar col;\n\t\tvar tr;\n\t\tvar j, seg;\n\t\tvar td;\n\n\t\t// populates empty cells from the current column (`col`) to `endCol`\n\t\tfunction emptyCellsUntil(endCol) {\n\t\t\twhile (col < endCol) {\n\t\t\t\t// try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell\n\t\t\t\ttd = (loneCellMatrix[i - 1] || [])[col];\n\t\t\t\tif (td) {\n\t\t\t\t\ttd.attr(\n\t\t\t\t\t\t'rowspan',\n\t\t\t\t\t\tparseInt(td.attr('rowspan') || 1, 10) + 1\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttd = $('<td/>');\n\t\t\t\t\ttr.append(td);\n\t\t\t\t}\n\t\t\t\tcellMatrix[i][col] = td;\n\t\t\t\tloneCellMatrix[i][col] = td;\n\t\t\t\tcol++;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < levelCnt; i++) { // iterate through all levels\n\t\t\tlevelSegs = segLevels[i];\n\t\t\tcol = 0;\n\t\t\ttr = $('<tr/>');\n\n\t\t\tsegMatrix.push([]);\n\t\t\tcellMatrix.push([]);\n\t\t\tloneCellMatrix.push([]);\n\n\t\t\t// levelCnt might be 1 even though there are no actual levels. protect against this.\n\t\t\t// this single empty row is useful for styling.\n\t\t\tif (levelSegs) {\n\t\t\t\tfor (j = 0; j < levelSegs.length; j++) { // iterate through segments in level\n\t\t\t\t\tseg = levelSegs[j];\n\n\t\t\t\t\temptyCellsUntil(seg.leftCol);\n\n\t\t\t\t\t// create a container that occupies or more columns. append the event element.\n\t\t\t\t\ttd = $('<td class=\"fc-event-container\"/>').append(seg.el);\n\t\t\t\t\tif (seg.leftCol != seg.rightCol) {\n\t\t\t\t\t\ttd.attr('colspan', seg.rightCol - seg.leftCol + 1);\n\t\t\t\t\t}\n\t\t\t\t\telse { // a single-column segment\n\t\t\t\t\t\tloneCellMatrix[i][col] = td;\n\t\t\t\t\t}\n\n\t\t\t\t\twhile (col <= seg.rightCol) {\n\t\t\t\t\t\tcellMatrix[i][col] = td;\n\t\t\t\t\t\tsegMatrix[i][col] = seg;\n\t\t\t\t\t\tcol++;\n\t\t\t\t\t}\n\n\t\t\t\t\ttr.append(td);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\temptyCellsUntil(colCnt); // finish off the row\n\t\t\tthis.bookendCells(tr, 'eventSkeleton');\n\t\t\ttbody.append(tr);\n\t\t}\n\n\t\treturn { // a \"rowStruct\"\n\t\t\trow: row, // the row number\n\t\t\ttbodyEl: tbody,\n\t\t\tcellMatrix: cellMatrix,\n\t\t\tsegMatrix: segMatrix,\n\t\t\tsegLevels: segLevels,\n\t\t\tsegs: rowSegs\n\t\t};\n\t},\n\n\n\t// Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.\n\tbuildSegLevels: function(segs) {\n\t\tvar levels = [];\n\t\tvar i, seg;\n\t\tvar j;\n\n\t\t// Give preference to elements with certain criteria, so they have\n\t\t// a chance to be closer to the top.\n\t\tsegs.sort(compareSegs);\n\t\t\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\n\t\t\t// loop through levels, starting with the topmost, until the segment doesn't collide with other segments\n\t\t\tfor (j = 0; j < levels.length; j++) {\n\t\t\t\tif (!isDaySegCollision(seg, levels[j])) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// `j` now holds the desired subrow index\n\t\t\tseg.level = j;\n\n\t\t\t// create new level array if needed and append segment\n\t\t\t(levels[j] || (levels[j] = [])).push(seg);\n\t\t}\n\n\t\t// order segments left-to-right. very important if calendar is RTL\n\t\tfor (j = 0; j < levels.length; j++) {\n\t\t\tlevels[j].sort(compareDaySegCols);\n\t\t}\n\n\t\treturn levels;\n\t},\n\n\n\t// Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row\n\tgroupSegRows: function(segs) {\n\t\tvar segRows = [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < this.rowCnt; i++) {\n\t\t\tsegRows.push([]);\n\t\t}\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tsegRows[segs[i].row].push(segs[i]);\n\t\t}\n\n\t\treturn segRows;\n\t}\n\n});\n\n\n// Computes whether two segments' columns collide. They are assumed to be in the same row.\nfunction isDaySegCollision(seg, otherSegs) {\n\tvar i, otherSeg;\n\n\tfor (i = 0; i < otherSegs.length; i++) {\n\t\totherSeg = otherSegs[i];\n\n\t\tif (\n\t\t\totherSeg.leftCol <= seg.rightCol &&\n\t\t\totherSeg.rightCol >= seg.leftCol\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n\n// A cmp function for determining the leftmost event\nfunction compareDaySegCols(a, b) {\n\treturn a.leftCol - b.leftCol;\n}\n\n    /* Methods relate to limiting the number events for a given day on a DayGrid\n----------------------------------------------------------------------------------------------------------------------*/\n// NOTE: all the segs being passed around in here are foreground segs\n\nDayGrid.mixin({\n\n\tsegPopover: null, // the Popover that holds events that can't fit in a cell. null when not visible\n\tpopoverSegs: null, // an array of segment objects that the segPopover holds. null when not visible\n\n\n\tdestroySegPopover: function() {\n\t\tif (this.segPopover) {\n\t\t\tthis.segPopover.hide(); // will trigger destruction of `segPopover` and `popoverSegs`\n\t\t}\n\t},\n\n\n\t// Limits the number of \"levels\" (vertically stacking layers of events) for each row of the grid.\n\t// `levelLimit` can be false (don't limit), a number, or true (should be computed).\n\tlimitRows: function(levelLimit) {\n\t\tvar rowStructs = this.rowStructs || [];\n\t\tvar row; // row #\n\t\tvar rowLevelLimit;\n\n\t\tfor (row = 0; row < rowStructs.length; row++) {\n\t\t\tthis.unlimitRow(row);\n\n\t\t\tif (!levelLimit) {\n\t\t\t\trowLevelLimit = false;\n\t\t\t}\n\t\t\telse if (typeof levelLimit === 'number') {\n\t\t\t\trowLevelLimit = levelLimit;\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowLevelLimit = this.computeRowLevelLimit(row);\n\t\t\t}\n\n\t\t\tif (rowLevelLimit !== false) {\n\t\t\t\tthis.limitRow(row, rowLevelLimit);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Computes the number of levels a row will accomodate without going outside its bounds.\n\t// Assumes the row is \"rigid\" (maintains a constant height regardless of what is inside).\n\t// `row` is the row number.\n\tcomputeRowLevelLimit: function(row) {\n\t\tvar rowEl = this.rowEls.eq(row); // the containing \"fake\" row div\n\t\tvar rowHeight = rowEl.height(); // TODO: cache somehow?\n\t\tvar trEls = this.rowStructs[row].tbodyEl.children();\n\t\tvar i, trEl;\n\n\t\t// Reveal one level <tr> at a time and stop when we find one out of bounds\n\t\tfor (i = 0; i < trEls.length; i++) {\n\t\t\ttrEl = trEls.eq(i).removeClass('fc-limited'); // get and reveal\n\t\t\tif (trEl.position().top + trEl.outerHeight() > rowHeight) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\n\t\treturn false; // should not limit at all\n\t},\n\n\n\t// Limits the given grid row to the maximum number of levels and injects \"more\" links if necessary.\n\t// `row` is the row number.\n\t// `levelLimit` is a number for the maximum (inclusive) number of levels allowed.\n\tlimitRow: function(row, levelLimit) {\n\t\tvar _this = this;\n\t\tvar rowStruct = this.rowStructs[row];\n\t\tvar moreNodes = []; // array of \"more\" <a> links and <td> DOM nodes\n\t\tvar col = 0; // col #, left-to-right (not chronologically)\n\t\tvar cell;\n\t\tvar levelSegs; // array of segment objects in the last allowable level, ordered left-to-right\n\t\tvar cellMatrix; // a matrix (by level, then column) of all <td> jQuery elements in the row\n\t\tvar limitedNodes; // array of temporarily hidden level <tr> and segment <td> DOM nodes\n\t\tvar i, seg;\n\t\tvar segsBelow; // array of segment objects below `seg` in the current `col`\n\t\tvar totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies\n\t\tvar colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)\n\t\tvar td, rowspan;\n\t\tvar segMoreNodes; // array of \"more\" <td> cells that will stand-in for the current seg's cell\n\t\tvar j;\n\t\tvar moreTd, moreWrap, moreLink;\n\n\t\t// Iterates through empty level cells and places \"more\" links inside if need be\n\t\tfunction emptyCellsUntil(endCol) { // goes from current `col` to `endCol`\n\t\t\twhile (col < endCol) {\n\t\t\t\tcell = _this.getCell(row, col);\n\t\t\t\tsegsBelow = _this.getCellSegs(cell, levelLimit);\n\t\t\t\tif (segsBelow.length) {\n\t\t\t\t\ttd = cellMatrix[levelLimit - 1][col];\n\t\t\t\t\tmoreLink = _this.renderMoreLink(cell, segsBelow);\n\t\t\t\t\tmoreWrap = $('<div/>').append(moreLink);\n\t\t\t\t\ttd.append(moreWrap);\n\t\t\t\t\tmoreNodes.push(moreWrap[0]);\n\t\t\t\t}\n\t\t\t\tcol++;\n\t\t\t}\n\t\t}\n\n\t\tif (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?\n\t\t\tlevelSegs = rowStruct.segLevels[levelLimit - 1];\n\t\t\tcellMatrix = rowStruct.cellMatrix;\n\n\t\t\tlimitedNodes = rowStruct.tbodyEl.children().slice(levelLimit) // get level <tr> elements past the limit\n\t\t\t\t.addClass('fc-limited').get(); // hide elements and get a simple DOM-nodes array\n\n\t\t\t// iterate though segments in the last allowable level\n\t\t\tfor (i = 0; i < levelSegs.length; i++) {\n\t\t\t\tseg = levelSegs[i];\n\t\t\t\temptyCellsUntil(seg.leftCol); // process empty cells before the segment\n\n\t\t\t\t// determine *all* segments below `seg` that occupy the same columns\n\t\t\t\tcolSegsBelow = [];\n\t\t\t\ttotalSegsBelow = 0;\n\t\t\t\twhile (col <= seg.rightCol) {\n\t\t\t\t\tcell = this.getCell(row, col);\n\t\t\t\t\tsegsBelow = this.getCellSegs(cell, levelLimit);\n\t\t\t\t\tcolSegsBelow.push(segsBelow);\n\t\t\t\t\ttotalSegsBelow += segsBelow.length;\n\t\t\t\t\tcol++;\n\t\t\t\t}\n\n\t\t\t\tif (totalSegsBelow) { // do we need to replace this segment with one or many \"more\" links?\n\t\t\t\t\ttd = cellMatrix[levelLimit - 1][seg.leftCol]; // the segment's parent cell\n\t\t\t\t\trowspan = td.attr('rowspan') || 1;\n\t\t\t\t\tsegMoreNodes = [];\n\n\t\t\t\t\t// make a replacement <td> for each column the segment occupies. will be one for each colspan\n\t\t\t\t\tfor (j = 0; j < colSegsBelow.length; j++) {\n\t\t\t\t\t\tmoreTd = $('<td class=\"fc-more-cell\"/>').attr('rowspan', rowspan);\n\t\t\t\t\t\tsegsBelow = colSegsBelow[j];\n\t\t\t\t\t\tcell = this.getCell(row, seg.leftCol + j);\n\t\t\t\t\t\tmoreLink = this.renderMoreLink(cell, [ seg ].concat(segsBelow)); // count seg as hidden too\n\t\t\t\t\t\tmoreWrap = $('<div/>').append(moreLink);\n\t\t\t\t\t\tmoreTd.append(moreWrap);\n\t\t\t\t\t\tsegMoreNodes.push(moreTd[0]);\n\t\t\t\t\t\tmoreNodes.push(moreTd[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\ttd.addClass('fc-limited').after($(segMoreNodes)); // hide original <td> and inject replacements\n\t\t\t\t\tlimitedNodes.push(td[0]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\temptyCellsUntil(this.colCnt); // finish off the level\n\t\t\trowStruct.moreEls = $(moreNodes); // for easy undoing later\n\t\t\trowStruct.limitedEls = $(limitedNodes); // for easy undoing later\n\t\t}\n\t},\n\n\n\t// Reveals all levels and removes all \"more\"-related elements for a grid's row.\n\t// `row` is a row number.\n\tunlimitRow: function(row) {\n\t\tvar rowStruct = this.rowStructs[row];\n\n\t\tif (rowStruct.moreEls) {\n\t\t\trowStruct.moreEls.remove();\n\t\t\trowStruct.moreEls = null;\n\t\t}\n\n\t\tif (rowStruct.limitedEls) {\n\t\t\trowStruct.limitedEls.removeClass('fc-limited');\n\t\t\trowStruct.limitedEls = null;\n\t\t}\n\t},\n\n\n\t// Renders an <a> element that represents hidden event element for a cell.\n\t// Responsible for attaching click handler as well.\n\trenderMoreLink: function(cell, hiddenSegs) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\n\t\treturn $('<a class=\"fc-more\"/>')\n\t\t\t.text(\n\t\t\t\tthis.getMoreLinkText(hiddenSegs.length)\n\t\t\t)\n\t\t\t.on('click', function(ev) {\n\t\t\t\tvar clickOption = view.opt('eventLimitClick');\n\t\t\t\tvar date = cell.start;\n\t\t\t\tvar moreEl = $(this);\n\t\t\t\tvar dayEl = _this.getCellDayEl(cell);\n\t\t\t\tvar allSegs = _this.getCellSegs(cell);\n\n\t\t\t\t// rescope the segments to be within the cell's date\n\t\t\t\tvar reslicedAllSegs = _this.resliceDaySegs(allSegs, date);\n\t\t\t\tvar reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);\n\n\t\t\t\tif (typeof clickOption === 'function') {\n\t\t\t\t\t// the returned value can be an atomic option\n\t\t\t\t\tclickOption = view.trigger('eventLimitClick', null, {\n\t\t\t\t\t\tdate: date,\n\t\t\t\t\t\tdayEl: dayEl,\n\t\t\t\t\t\tmoreEl: moreEl,\n\t\t\t\t\t\tsegs: reslicedAllSegs,\n\t\t\t\t\t\thiddenSegs: reslicedHiddenSegs\n\t\t\t\t\t}, ev);\n\t\t\t\t}\n\n\t\t\t\tif (clickOption === 'popover') {\n\t\t\t\t\t_this.showSegPopover(cell, moreEl, reslicedAllSegs);\n\t\t\t\t}\n\t\t\t\telse if (typeof clickOption === 'string') { // a view name\n\t\t\t\t\tview.calendar.zoomTo(date, clickOption);\n\t\t\t\t}\n\t\t\t});\n\t},\n\n\n\t// Reveals the popover that displays all events within a cell\n\tshowSegPopover: function(cell, moreLink, segs) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar moreWrap = moreLink.parent(); // the <div> wrapper around the <a>\n\t\tvar topEl; // the element we want to match the top coordinate of\n\t\tvar options;\n\n\t\tif (this.rowCnt == 1) {\n\t\t\ttopEl = view.el; // will cause the popover to cover any sort of header\n\t\t}\n\t\telse {\n\t\t\ttopEl = this.rowEls.eq(cell.row); // will align with top of row\n\t\t}\n\n\t\toptions = {\n\t\t\tclassName: 'fc-more-popover',\n\t\t\tcontent: this.renderSegPopoverContent(cell, segs),\n\t\t\tparentEl: this.el,\n\t\t\ttop: topEl.offset().top,\n\t\t\tautoHide: true, // when the user clicks elsewhere, hide the popover\n\t\t\tviewportConstrain: view.opt('popoverViewportConstrain'),\n\t\t\thide: function() {\n\t\t\t\t// destroy everything when the popover is hidden\n\t\t\t\t_this.segPopover.destroy();\n\t\t\t\t_this.segPopover = null;\n\t\t\t\t_this.popoverSegs = null;\n\t\t\t}\n\t\t};\n\n\t\t// Determine horizontal coordinate.\n\t\t// We use the moreWrap instead of the <td> to avoid border confusion.\n\t\tif (this.isRTL) {\n\t\t\toptions.right = moreWrap.offset().left + moreWrap.outerWidth() + 1; // +1 to be over cell border\n\t\t}\n\t\telse {\n\t\t\toptions.left = moreWrap.offset().left - 1; // -1 to be over cell border\n\t\t}\n\n\t\tthis.segPopover = new Popover(options);\n\t\tthis.segPopover.show();\n\t},\n\n\n\t// Builds the inner DOM contents of the segment popover\n\trenderSegPopoverContent: function(cell, segs) {\n\t\tvar view = this.view;\n\t\tvar isTheme = view.opt('theme');\n\t\tvar title = cell.start.format(view.opt('dayPopoverFormat'));\n\t\tvar content = $(\n\t\t\t'<div class=\"fc-header ' + view.widgetHeaderClass + '\">' +\n\t\t\t\t'<span class=\"fc-close ' +\n\t\t\t\t\t(isTheme ? 'ui-icon ui-icon-closethick' : 'fc-icon fc-icon-x') +\n\t\t\t\t'\"></span>' +\n\t\t\t\t'<span class=\"fc-title\">' +\n\t\t\t\t\thtmlEscape(title) +\n\t\t\t\t'</span>' +\n\t\t\t\t'<div class=\"fc-clear\"/>' +\n\t\t\t'</div>' +\n\t\t\t'<div class=\"fc-body ' + view.widgetContentClass + '\">' +\n\t\t\t\t'<div class=\"fc-event-container\"></div>' +\n\t\t\t'</div>'\n\t\t);\n\t\tvar segContainer = content.find('.fc-event-container');\n\t\tvar i;\n\n\t\t// render each seg's `el` and only return the visible segs\n\t\tsegs = this.renderFgSegEls(segs, true); // disableResizing=true\n\t\tthis.popoverSegs = segs;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\n\t\t\t// because segments in the popover are not part of a grid coordinate system, provide a hint to any\n\t\t\t// grids that want to do drag-n-drop about which cell it came from\n\t\t\tsegs[i].cell = cell;\n\n\t\t\tsegContainer.append(segs[i].el);\n\t\t}\n\n\t\treturn content;\n\t},\n\n\n\t// Given the events within an array of segment objects, reslice them to be in a single day\n\tresliceDaySegs: function(segs, dayDate) {\n\n\t\t// build an array of the original events\n\t\tvar events = $.map(segs, function(seg) {\n\t\t\treturn seg.event;\n\t\t});\n\n\t\tvar dayStart = dayDate.clone().stripTime();\n\t\tvar dayEnd = dayStart.clone().add(1, 'days');\n\t\tvar dayRange = { start: dayStart, end: dayEnd };\n\n\t\t// slice the events with a custom slicing function\n\t\treturn this.eventsToSegs(\n\t\t\tevents,\n\t\t\tfunction(range) {\n\t\t\t\tvar seg = intersectionToSeg(range, dayRange); // undefind if no intersection\n\t\t\t\treturn seg ? [ seg ] : []; // must return an array of segments\n\t\t\t}\n\t\t);\n\t},\n\n\n\t// Generates the text that should be inside a \"more\" link, given the number of events it represents\n\tgetMoreLinkText: function(num) {\n\t\tvar opt = this.view.opt('eventLimitText');\n\n\t\tif (typeof opt === 'function') {\n\t\t\treturn opt(num);\n\t\t}\n\t\telse {\n\t\t\treturn '+' + num + ' ' + opt;\n\t\t}\n\t},\n\n\n\t// Returns segments within a given cell.\n\t// If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.\n\tgetCellSegs: function(cell, startLevel) {\n\t\tvar segMatrix = this.rowStructs[cell.row].segMatrix;\n\t\tvar level = startLevel || 0;\n\t\tvar segs = [];\n\t\tvar seg;\n\n\t\twhile (level < segMatrix.length) {\n\t\t\tseg = segMatrix[level][cell.col];\n\t\t\tif (seg) {\n\t\t\t\tsegs.push(seg);\n\t\t\t}\n\t\t\tlevel++;\n\t\t}\n\n\t\treturn segs;\n\t}\n\n});\n\n    /* A component that renders one or more columns of vertical time slots\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar TimeGrid = Grid.extend({\n\n\tslotDuration: null, // duration of a \"slot\", a distinct time segment on given day, visualized by lines\n\tsnapDuration: null, // granularity of time for dragging and selecting\n\n\tminTime: null, // Duration object that denotes the first visible time of any given day\n\tmaxTime: null, // Duration object that denotes the exclusive visible end time of any given day\n\n\taxisFormat: null, // formatting string for times running along vertical axis\n\n\tdayEls: null, // cells elements in the day-row background\n\tslatEls: null, // elements running horizontally across all columns\n\n\tslatTops: null, // an array of top positions, relative to the container. last item holds bottom of last slot\n\n\thelperEl: null, // cell skeleton element for rendering the mock event \"helper\"\n\n\tbusinessHourSegs: null,\n\n\n\tconstructor: function() {\n\t\tGrid.apply(this, arguments); // call the super-constructor\n\t\tthis.processOptions();\n\t},\n\n\n\t// Renders the time grid into `this.el`, which should already be assigned.\n\t// Relies on the view's colCnt. In the future, this component should probably be self-sufficient.\n\trender: function() {\n\t\tthis.el.html(this.renderHtml());\n\t\tthis.dayEls = this.el.find('.fc-day');\n\t\tthis.slatEls = this.el.find('.fc-slats tr');\n\n\t\tthis.computeSlatTops();\n\t\tthis.renderBusinessHours();\n\t\tGrid.prototype.render.call(this); // call the super-method\n\t},\n\n\n\trenderBusinessHours: function() {\n\t\tvar events = this.view.calendar.getBusinessHoursEvents();\n\t\tthis.businessHourSegs = this.renderFill('businessHours', this.eventsToSegs(events), 'bgevent');\n\t},\n\n\n\t// Renders the basic HTML skeleton for the grid\n\trenderHtml: function() {\n\t\treturn '' +\n\t\t\t'<div class=\"fc-bg\">' +\n\t\t\t\t'<table>' +\n\t\t\t\t\tthis.rowHtml('slotBg') + // leverages RowRenderer, which will call slotBgCellHtml\n\t\t\t\t'</table>' +\n\t\t\t'</div>' +\n\t\t\t'<div class=\"fc-slats\">' +\n\t\t\t\t'<table>' +\n\t\t\t\t\tthis.slatRowHtml() +\n\t\t\t\t'</table>' +\n\t\t\t'</div>';\n\t},\n\n\n\t// Renders the HTML for a vertical background cell behind the slots.\n\t// This method is distinct from 'bg' because we wanted a new `rowType` so the View could customize the rendering.\n\tslotBgCellHtml: function(cell) {\n\t\treturn this.bgCellHtml(cell);\n\t},\n\n\n\t// Generates the HTML for the horizontal \"slats\" that run width-wise. Has a time axis on a side. Depends on RTL.\n\tslatRowHtml: function() {\n\t\tvar view = this.view;\n\t\tvar isRTL = this.isRTL;\n\t\tvar html = '';\n\t\tvar slotNormal = this.slotDuration.asMinutes() % 15 === 0;\n\t\tvar slotTime = moment.duration(+this.minTime); // wish there was .clone() for durations\n\t\tvar slotDate; // will be on the view's first day, but we only care about its time\n\t\tvar minutes;\n\t\tvar axisHtml;\n\n\t\t// Calculate the time for each slot\n\t\twhile (slotTime < this.maxTime) {\n\t\t\tslotDate = this.start.clone().time(slotTime); // will be in UTC but that's good. to avoid DST issues\n\t\t\tminutes = slotDate.minutes();\n\n\t\t\taxisHtml =\n\t\t\t\t'<td class=\"fc-axis fc-time ' + view.widgetContentClass + '\" ' + view.axisStyleAttr() + '>' +\n\t\t\t\t\t((!slotNormal || !minutes) ? // if irregular slot duration, or on the hour, then display the time\n\t\t\t\t\t\t'<span>' + // for matchCellWidths\n\t\t\t\t\t\t\thtmlEscape(slotDate.format(this.axisFormat)) +\n\t\t\t\t\t\t'</span>' :\n\t\t\t\t\t\t''\n\t\t\t\t\t\t) +\n\t\t\t\t'</td>';\n\n\t\t\thtml +=\n\t\t\t\t'<tr ' + (!minutes ? '' : 'class=\"fc-minor\"') + '>' +\n\t\t\t\t\t(!isRTL ? axisHtml : '') +\n\t\t\t\t\t'<td class=\"' + view.widgetContentClass + '\"/>' +\n\t\t\t\t\t(isRTL ? axisHtml : '') +\n\t\t\t\t\"</tr>\";\n\n\t\t\tslotTime.add(this.slotDuration);\n\t\t}\n\n\t\treturn html;\n\t},\n\n\n\t/* Options\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Parses various options into properties of this object\n\tprocessOptions: function() {\n\t\tvar view = this.view;\n\t\tvar slotDuration = view.opt('slotDuration');\n\t\tvar snapDuration = view.opt('snapDuration');\n\n\t\tslotDuration = moment.duration(slotDuration);\n\t\tsnapDuration = snapDuration ? moment.duration(snapDuration) : slotDuration;\n\n\t\tthis.slotDuration = slotDuration;\n\t\tthis.snapDuration = snapDuration;\n\n\t\tthis.minTime = moment.duration(view.opt('minTime'));\n\t\tthis.maxTime = moment.duration(view.opt('maxTime'));\n\n\t\tthis.axisFormat = view.opt('axisFormat') || view.opt('smallTimeFormat');\n\t},\n\n\n\t// Computes a default column header formatting string if `colFormat` is not explicitly defined\n\tcomputeColHeadFormat: function() {\n\t\tif (this.colCnt > 1) { // multiple days, so full single date string WON'T be in title text\n\t\t\treturn this.view.opt('dayOfMonthFormat'); // \"Sat 12/10\"\n\t\t}\n\t\telse { // single day, so full single date string will probably be in title text\n\t\t\treturn 'dddd'; // \"Saturday\"\n\t\t}\n\t},\n\n\n\t// Computes a default event time formatting string if `timeFormat` is not explicitly defined\n\tcomputeEventTimeFormat: function() {\n\t\treturn this.view.opt('noMeridiemTimeFormat'); // like \"6:30\" (no AM/PM)\n\t},\n\n\n\t// Computes a default `displayEventEnd` value if one is not expliclty defined\n\tcomputeDisplayEventEnd: function() {\n\t\treturn true;\n\t},\n\n\n\t/* Cell System\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Initializes row/col information\n\tupdateCells: function() {\n\t\tvar view = this.view;\n\t\tvar colData = [];\n\t\tvar date;\n\n\t\tdate = this.start.clone();\n\t\twhile (date.isBefore(this.end)) {\n\t\t\tcolData.push({\n\t\t\t\tday: date.clone()\n\t\t\t});\n\t\t\tdate.add(1, 'day');\n\t\t\tdate = view.skipHiddenDays(date);\n\t\t}\n\n\t\tif (this.isRTL) {\n\t\t\tcolData.reverse();\n\t\t}\n\n\t\tthis.colData = colData;\n\t\tthis.colCnt = colData.length;\n\t\tthis.rowCnt = Math.ceil((this.maxTime - this.minTime) / this.snapDuration); // # of vertical snaps\n\t},\n\n\n\t// Given a cell object, generates a range object\n\tcomputeCellRange: function(cell) {\n\t\tvar time = this.computeSnapTime(cell.row);\n\t\tvar start = this.view.calendar.rezoneDate(cell.day).time(time);\n\t\tvar end = start.clone().add(this.snapDuration);\n\n\t\treturn { start: start, end: end };\n\t},\n\n\n\t// Retrieves the element representing the given column\n\tgetColEl: function(col) {\n\t\treturn this.dayEls.eq(col);\n\t},\n\n\n\t/* Dates\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Given a row number of the grid, representing a \"snap\", returns a time (Duration) from its start-of-day\n\tcomputeSnapTime: function(row) {\n\t\treturn moment.duration(this.minTime + this.snapDuration * row);\n\t},\n\n\n\t// Slices up a date range by column into an array of segments\n\trangeToSegs: function(range) {\n\t\tvar colCnt = this.colCnt;\n\t\tvar segs = [];\n\t\tvar seg;\n\t\tvar col;\n\t\tvar colDate;\n\t\tvar colRange;\n\n\t\t// normalize :(\n\t\trange = {\n\t\t\tstart: range.start.clone().stripZone(),\n\t\t\tend: range.end.clone().stripZone()\n\t\t};\n\n\t\tfor (col = 0; col < colCnt; col++) {\n\t\t\tcolDate = this.colData[col].day; // will be ambig time/timezone\n\t\t\tcolRange = {\n\t\t\t\tstart: colDate.clone().time(this.minTime),\n\t\t\t\tend: colDate.clone().time(this.maxTime)\n\t\t\t};\n\t\t\tseg = intersectionToSeg(range, colRange); // both will be ambig timezone\n\t\t\tif (seg) {\n\t\t\t\tseg.col = col;\n\t\t\t\tsegs.push(seg);\n\t\t\t}\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t/* Coordinates\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Called when there is a window resize/zoom and we need to recalculate coordinates for the grid\n\tresize: function() {\n\t\tthis.computeSlatTops();\n\t\tthis.updateSegVerticals();\n\t},\n\n\n\t// Computes the top/bottom coordinates of each \"snap\" rows\n\tcomputeRowCoords: function() {\n\t\tvar originTop = this.el.offset().top;\n\t\tvar items = [];\n\t\tvar i;\n\t\tvar item;\n\n\t\tfor (i = 0; i < this.rowCnt; i++) {\n\t\t\titem = {\n\t\t\t\ttop: originTop + this.computeTimeTop(this.computeSnapTime(i))\n\t\t\t};\n\t\t\tif (i > 0) {\n\t\t\t\titems[i - 1].bottom = item.top;\n\t\t\t}\n\t\t\titems.push(item);\n\t\t}\n\t\titem.bottom = item.top + this.computeTimeTop(this.computeSnapTime(i));\n\n\t\treturn items;\n\t},\n\n\n\t// Computes the top coordinate, relative to the bounds of the grid, of the given date.\n\t// A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\n\tcomputeDateTop: function(date, startOfDayDate) {\n\t\treturn this.computeTimeTop(\n\t\t\tmoment.duration(\n\t\t\t\tdate.clone().stripZone() - startOfDayDate.clone().stripTime()\n\t\t\t)\n\t\t);\n\t},\n\n\n\t// Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\n\tcomputeTimeTop: function(time) {\n\t\tvar slatCoverage = (time - this.minTime) / this.slotDuration; // floating-point value of # of slots covered\n\t\tvar slatIndex;\n\t\tvar slatRemainder;\n\t\tvar slatTop;\n\t\tvar slatBottom;\n\n\t\t// constrain. because minTime/maxTime might be customized\n\t\tslatCoverage = Math.max(0, slatCoverage);\n\t\tslatCoverage = Math.min(this.slatEls.length, slatCoverage);\n\n\t\tslatIndex = Math.floor(slatCoverage); // an integer index of the furthest whole slot\n\t\tslatRemainder = slatCoverage - slatIndex;\n\t\tslatTop = this.slatTops[slatIndex]; // the top position of the furthest whole slot\n\n\t\tif (slatRemainder) { // time spans part-way into the slot\n\t\t\tslatBottom = this.slatTops[slatIndex + 1];\n\t\t\treturn slatTop + (slatBottom - slatTop) * slatRemainder; // part-way between slots\n\t\t}\n\t\telse {\n\t\t\treturn slatTop;\n\t\t}\n\t},\n\n\n\t// Queries each `slatEl` for its position relative to the grid's container and stores it in `slatTops`.\n\t// Includes the the bottom of the last slat as the last item in the array.\n\tcomputeSlatTops: function() {\n\t\tvar tops = [];\n\t\tvar top;\n\n\t\tthis.slatEls.each(function(i, node) {\n\t\t\ttop = $(node).position().top;\n\t\t\ttops.push(top);\n\t\t});\n\n\t\ttops.push(top + this.slatEls.last().outerHeight()); // bottom of the last slat\n\n\t\tthis.slatTops = tops;\n\t},\n\n\n\t/* Event Drag Visualization\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of an event being dragged over the specified date(s).\n\t// dropLocation's end might be null, as well as `seg`. See Grid::renderDrag for more info.\n\t// A returned value of `true` signals that a mock \"helper\" event has been rendered.\n\trenderDrag: function(dropLocation, seg) {\n\t\tvar opacity;\n\n\t\tif (seg) { // if there is event information for this drag, render a helper event\n\t\t\tthis.renderRangeHelper(dropLocation, seg);\n\n\t\t\topacity = this.view.opt('dragOpacity');\n\t\t\tif (opacity !== undefined) {\n\t\t\t\tthis.helperEl.css('opacity', opacity);\n\t\t\t}\n\n\t\t\treturn true; // signal that a helper has been rendered\n\t\t}\n\t\telse {\n\t\t\t// otherwise, just render a highlight\n\t\t\tthis.renderHighlight(\n\t\t\t\tthis.view.calendar.ensureVisibleEventRange(dropLocation) // needs to be a proper range\n\t\t\t);\n\t\t}\n\t},\n\n\n\t// Unrenders any visual indication of an event being dragged\n\tdestroyDrag: function() {\n\t\tthis.destroyHelper();\n\t\tthis.destroyHighlight();\n\t},\n\n\n\t/* Event Resize Visualization\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of an event being resized\n\trenderEventResize: function(range, seg) {\n\t\tthis.renderRangeHelper(range, seg);\n\t},\n\n\n\t// Unrenders any visual indication of an event being resized\n\tdestroyEventResize: function() {\n\t\tthis.destroyHelper();\n\t},\n\n\n\t/* Event Helper\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a mock \"helper\" event. `sourceSeg` is the original segment object and might be null (an external drag)\n\trenderHelper: function(event, sourceSeg) {\n\t\tvar segs = this.eventsToSegs([ event ]);\n\t\tvar tableEl;\n\t\tvar i, seg;\n\t\tvar sourceEl;\n\n\t\tsegs = this.renderFgSegEls(segs); // assigns each seg's el and returns a subset of segs that were rendered\n\t\ttableEl = this.renderSegTable(segs);\n\n\t\t// Try to make the segment that is in the same row as sourceSeg look the same\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\tif (sourceSeg && sourceSeg.col === seg.col) {\n\t\t\t\tsourceEl = sourceSeg.el;\n\t\t\t\tseg.el.css({\n\t\t\t\t\tleft: sourceEl.css('left'),\n\t\t\t\t\tright: sourceEl.css('right'),\n\t\t\t\t\t'margin-left': sourceEl.css('margin-left'),\n\t\t\t\t\t'margin-right': sourceEl.css('margin-right')\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tthis.helperEl = $('<div class=\"fc-helper-skeleton\"/>')\n\t\t\t.append(tableEl)\n\t\t\t\t.appendTo(this.el);\n\t},\n\n\n\t// Unrenders any mock helper event\n\tdestroyHelper: function() {\n\t\tif (this.helperEl) {\n\t\t\tthis.helperEl.remove();\n\t\t\tthis.helperEl = null;\n\t\t}\n\t},\n\n\n\t/* Selection\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.\n\trenderSelection: function(range) {\n\t\tif (this.view.opt('selectHelper')) { // this setting signals that a mock helper event should be rendered\n\t\t\tthis.renderRangeHelper(range);\n\t\t}\n\t\telse {\n\t\t\tthis.renderHighlight(range);\n\t\t}\n\t},\n\n\n\t// Unrenders any visual indication of a selection\n\tdestroySelection: function() {\n\t\tthis.destroyHelper();\n\t\tthis.destroyHighlight();\n\t},\n\n\n\t/* Fill System (highlight, background events, business hours)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a set of rectangles over the given time segments.\n\t// Only returns segments that successfully rendered.\n\trenderFill: function(type, segs, className) {\n\t\tvar segCols;\n\t\tvar skeletonEl;\n\t\tvar trEl;\n\t\tvar col, colSegs;\n\t\tvar tdEl;\n\t\tvar containerEl;\n\t\tvar dayDate;\n\t\tvar i, seg;\n\n\t\tif (segs.length) {\n\n\t\t\tsegs = this.renderFillSegEls(type, segs); // assignes `.el` to each seg. returns successfully rendered segs\n\t\t\tsegCols = this.groupSegCols(segs); // group into sub-arrays, and assigns 'col' to each seg\n\n\t\t\tclassName = className || type.toLowerCase();\n\t\t\tskeletonEl = $(\n\t\t\t\t'<div class=\"fc-' + className + '-skeleton\">' +\n\t\t\t\t\t'<table><tr/></table>' +\n\t\t\t\t'</div>'\n\t\t\t);\n\t\t\ttrEl = skeletonEl.find('tr');\n\n\t\t\tfor (col = 0; col < segCols.length; col++) {\n\t\t\t\tcolSegs = segCols[col];\n\t\t\t\ttdEl = $('<td/>').appendTo(trEl);\n\n\t\t\t\tif (colSegs.length) {\n\t\t\t\t\tcontainerEl = $('<div class=\"fc-' + className + '-container\"/>').appendTo(tdEl);\n\t\t\t\t\tdayDate = this.colData[col].day;\n\n\t\t\t\t\tfor (i = 0; i < colSegs.length; i++) {\n\t\t\t\t\t\tseg = colSegs[i];\n\t\t\t\t\t\tcontainerEl.append(\n\t\t\t\t\t\t\tseg.el.css({\n\t\t\t\t\t\t\t\ttop: this.computeDateTop(seg.start, dayDate),\n\t\t\t\t\t\t\t\tbottom: -this.computeDateTop(seg.end, dayDate) // the y position of the bottom edge\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.bookendCells(trEl, type);\n\n\t\t\tthis.el.append(skeletonEl);\n\t\t\tthis.elsByFill[type] = skeletonEl;\n\t\t}\n\n\t\treturn segs;\n\t}\n\n});\n\n    /* Event-rendering methods for the TimeGrid class\n----------------------------------------------------------------------------------------------------------------------*/\n\nTimeGrid.mixin({\n\n\teventSkeletonEl: null, // has cells with event-containers, which contain absolutely positioned event elements\n\n\n\t// Renders the given foreground event segments onto the grid\n\trenderFgSegs: function(segs) {\n\t\tsegs = this.renderFgSegEls(segs); // returns a subset of the segs. segs that were actually rendered\n\n\t\tthis.el.append(\n\t\t\tthis.eventSkeletonEl = $('<div class=\"fc-content-skeleton\"/>')\n\t\t\t\t.append(this.renderSegTable(segs))\n\t\t);\n\n\t\treturn segs; // return only the segs that were actually rendered\n\t},\n\n\n\t// Unrenders all currently rendered foreground event segments\n\tdestroyFgSegs: function(segs) {\n\t\tif (this.eventSkeletonEl) {\n\t\t\tthis.eventSkeletonEl.remove();\n\t\t\tthis.eventSkeletonEl = null;\n\t\t}\n\t},\n\n\n\t// Renders and returns the <table> portion of the event-skeleton.\n\t// Returns an object with properties 'tbodyEl' and 'segs'.\n\trenderSegTable: function(segs) {\n\t\tvar tableEl = $('<table><tr/></table>');\n\t\tvar trEl = tableEl.find('tr');\n\t\tvar segCols;\n\t\tvar i, seg;\n\t\tvar col, colSegs;\n\t\tvar containerEl;\n\n\t\tsegCols = this.groupSegCols(segs); // group into sub-arrays, and assigns 'col' to each seg\n\n\t\tthis.computeSegVerticals(segs); // compute and assign top/bottom\n\n\t\tfor (col = 0; col < segCols.length; col++) { // iterate each column grouping\n\t\t\tcolSegs = segCols[col];\n\t\t\tplaceSlotSegs(colSegs); // compute horizontal coordinates, z-index's, and reorder the array\n\n\t\t\tcontainerEl = $('<div class=\"fc-event-container\"/>');\n\n\t\t\t// assign positioning CSS and insert into container\n\t\t\tfor (i = 0; i < colSegs.length; i++) {\n\t\t\t\tseg = colSegs[i];\n\t\t\t\tseg.el.css(this.generateSegPositionCss(seg));\n\n\t\t\t\t// if the height is short, add a className for alternate styling\n\t\t\t\tif (seg.bottom - seg.top < 30) {\n\t\t\t\t\tseg.el.addClass('fc-short');\n\t\t\t\t}\n\n\t\t\t\tcontainerEl.append(seg.el);\n\t\t\t}\n\n\t\t\ttrEl.append($('<td/>').append(containerEl));\n\t\t}\n\n\t\tthis.bookendCells(trEl, 'eventSkeleton');\n\n\t\treturn tableEl;\n\t},\n\n\n\t// Refreshes the CSS top/bottom coordinates for each segment element. Probably after a window resize/zoom.\n\t// Repositions business hours segs too, so not just for events. Maybe shouldn't be here.\n\tupdateSegVerticals: function() {\n\t\tvar allSegs = (this.segs || []).concat(this.businessHourSegs || []);\n\t\tvar i;\n\n\t\tthis.computeSegVerticals(allSegs);\n\n\t\tfor (i = 0; i < allSegs.length; i++) {\n\t\t\tallSegs[i].el.css(\n\t\t\t\tthis.generateSegVerticalCss(allSegs[i])\n\t\t\t);\n\t\t}\n\t},\n\n\n\t// For each segment in an array, computes and assigns its top and bottom properties\n\tcomputeSegVerticals: function(segs) {\n\t\tvar i, seg;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\tseg.top = this.computeDateTop(seg.start, seg.start);\n\t\t\tseg.bottom = this.computeDateTop(seg.end, seg.start);\n\t\t}\n\t},\n\n\n\t// Renders the HTML for a single event segment's default rendering\n\tfgSegHtml: function(seg, disableResizing) {\n\t\tvar view = this.view;\n\t\tvar event = seg.event;\n\t\tvar isDraggable = view.isEventDraggable(event);\n\t\tvar isResizable = !disableResizing && seg.isEnd && view.isEventResizable(event);\n\t\tvar classes = this.getSegClasses(seg, isDraggable, isResizable);\n\t\tvar skinCss = this.getEventSkinCss(event);\n\t\tvar timeText;\n\t\tvar fullTimeText; // more verbose time text. for the print stylesheet\n\t\tvar startTimeText; // just the start time text\n\n\t\tclasses.unshift('fc-time-grid-event');\n\n\t\tif (view.isMultiDayEvent(event)) { // if the event appears to span more than one day...\n\t\t\t// Don't display time text on segments that run entirely through a day.\n\t\t\t// That would appear as midnight-midnight and would look dumb.\n\t\t\t// Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)\n\t\t\tif (seg.isStart || seg.isEnd) {\n\t\t\t\ttimeText = this.getEventTimeText(seg);\n\t\t\t\tfullTimeText = this.getEventTimeText(seg, 'LT');\n\t\t\t\tstartTimeText = this.getEventTimeText({ start: seg.start });\n\t\t\t}\n\t\t} else {\n\t\t\t// Display the normal time text for the *event's* times\n\t\t\ttimeText = this.getEventTimeText(event);\n\t\t\tfullTimeText = this.getEventTimeText(event, 'LT');\n\t\t\tstartTimeText = this.getEventTimeText({ start: event.start });\n\t\t}\n\n\t\treturn '<a class=\"' + classes.join(' ') + '\"' +\n\t\t\t(event.url ?\n\t\t\t\t' href=\"' + htmlEscape(event.url) + '\"' :\n\t\t\t\t''\n\t\t\t\t) +\n\t\t\t(skinCss ?\n\t\t\t\t' style=\"' + skinCss + '\"' :\n\t\t\t\t''\n\t\t\t\t) +\n\t\t\t'>' +\n\t\t\t\t'<div class=\"fc-content\">' +\n\t\t\t\t\t(timeText ?\n\t\t\t\t\t\t'<div class=\"fc-time\"' +\n\t\t\t\t\t\t' data-start=\"' + htmlEscape(startTimeText) + '\"' +\n\t\t\t\t\t\t' data-full=\"' + htmlEscape(fullTimeText) + '\"' +\n\t\t\t\t\t\t'>' +\n\t\t\t\t\t\t\t'<span>' + htmlEscape(timeText) + '</span>' +\n\t\t\t\t\t\t'</div>' :\n\t\t\t\t\t\t''\n\t\t\t\t\t\t) +\n\t\t\t\t\t(event.title ?\n\t\t\t\t\t\t'<div class=\"fc-title\">' +\n\t\t\t\t\t\t\thtmlEscape(event.title) +\n\t\t\t\t\t\t'</div>' :\n\t\t\t\t\t\t''\n\t\t\t\t\t\t) +\n\t\t\t\t'</div>' +\n\t\t\t\t'<div class=\"fc-bg\"/>' +\n\t\t\t\t(isResizable ?\n\t\t\t\t\t'<div class=\"fc-resizer\"/>' :\n\t\t\t\t\t''\n\t\t\t\t\t) +\n\t\t\t'</a>';\n\t},\n\n\n\t// Generates an object with CSS properties/values that should be applied to an event segment element.\n\t// Contains important positioning-related properties that should be applied to any event element, customized or not.\n\tgenerateSegPositionCss: function(seg) {\n\t\tvar shouldOverlap = this.view.opt('slotEventOverlap');\n\t\tvar backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point\n\t\tvar forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point\n\t\tvar props = this.generateSegVerticalCss(seg); // get top/bottom first\n\t\tvar left; // amount of space from left edge, a fraction of the total width\n\t\tvar right; // amount of space from right edge, a fraction of the total width\n\n\t\tif (shouldOverlap) {\n\t\t\t// double the width, but don't go beyond the maximum forward coordinate (1.0)\n\t\t\tforwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);\n\t\t}\n\n\t\tif (this.isRTL) {\n\t\t\tleft = 1 - forwardCoord;\n\t\t\tright = backwardCoord;\n\t\t}\n\t\telse {\n\t\t\tleft = backwardCoord;\n\t\t\tright = 1 - forwardCoord;\n\t\t}\n\n\t\tprops.zIndex = seg.level + 1; // convert from 0-base to 1-based\n\t\tprops.left = left * 100 + '%';\n\t\tprops.right = right * 100 + '%';\n\n\t\tif (shouldOverlap && seg.forwardPressure) {\n\t\t\t// add padding to the edge so that forward stacked events don't cover the resizer's icon\n\t\t\tprops[this.isRTL ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width\n\t\t}\n\n\t\treturn props;\n\t},\n\n\n\t// Generates an object with CSS properties for the top/bottom coordinates of a segment element\n\tgenerateSegVerticalCss: function(seg) {\n\t\treturn {\n\t\t\ttop: seg.top,\n\t\t\tbottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container\n\t\t};\n\t},\n\n\n\t// Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col\n\tgroupSegCols: function(segs) {\n\t\tvar segCols = [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < this.colCnt; i++) {\n\t\t\tsegCols.push([]);\n\t\t}\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tsegCols[segs[i].col].push(segs[i]);\n\t\t}\n\n\t\treturn segCols;\n\t}\n\n});\n\n\n// Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.\n// Also reorders the given array by date!\nfunction placeSlotSegs(segs) {\n\tvar levels;\n\tvar level0;\n\tvar i;\n\n\tsegs.sort(compareSegs); // order by date\n\tlevels = buildSlotSegLevels(segs);\n\tcomputeForwardSlotSegs(levels);\n\n\tif ((level0 = levels[0])) {\n\n\t\tfor (i = 0; i < level0.length; i++) {\n\t\t\tcomputeSlotSegPressures(level0[i]);\n\t\t}\n\n\t\tfor (i = 0; i < level0.length; i++) {\n\t\t\tcomputeSlotSegCoords(level0[i], 0, 0);\n\t\t}\n\t}\n}\n\n\n// Builds an array of segments \"levels\". The first level will be the leftmost tier of segments if the calendar is\n// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.\nfunction buildSlotSegLevels(segs) {\n\tvar levels = [];\n\tvar i, seg;\n\tvar j;\n\n\tfor (i=0; i<segs.length; i++) {\n\t\tseg = segs[i];\n\n\t\t// go through all the levels and stop on the first level where there are no collisions\n\t\tfor (j=0; j<levels.length; j++) {\n\t\t\tif (!computeSlotSegCollisions(seg, levels[j]).length) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tseg.level = j;\n\n\t\t(levels[j] || (levels[j] = [])).push(seg);\n\t}\n\n\treturn levels;\n}\n\n\n// For every segment, figure out the other segments that are in subsequent\n// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs\nfunction computeForwardSlotSegs(levels) {\n\tvar i, level;\n\tvar j, seg;\n\tvar k;\n\n\tfor (i=0; i<levels.length; i++) {\n\t\tlevel = levels[i];\n\n\t\tfor (j=0; j<level.length; j++) {\n\t\t\tseg = level[j];\n\n\t\t\tseg.forwardSegs = [];\n\t\t\tfor (k=i+1; k<levels.length; k++) {\n\t\t\t\tcomputeSlotSegCollisions(seg, levels[k], seg.forwardSegs);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// Figure out which path forward (via seg.forwardSegs) results in the longest path until\n// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure\nfunction computeSlotSegPressures(seg) {\n\tvar forwardSegs = seg.forwardSegs;\n\tvar forwardPressure = 0;\n\tvar i, forwardSeg;\n\n\tif (seg.forwardPressure === undefined) { // not already computed\n\n\t\tfor (i=0; i<forwardSegs.length; i++) {\n\t\t\tforwardSeg = forwardSegs[i];\n\n\t\t\t// figure out the child's maximum forward path\n\t\t\tcomputeSlotSegPressures(forwardSeg);\n\n\t\t\t// either use the existing maximum, or use the child's forward pressure\n\t\t\t// plus one (for the forwardSeg itself)\n\t\t\tforwardPressure = Math.max(\n\t\t\t\tforwardPressure,\n\t\t\t\t1 + forwardSeg.forwardPressure\n\t\t\t);\n\t\t}\n\n\t\tseg.forwardPressure = forwardPressure;\n\t}\n}\n\n\n// Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range\n// from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to \"left\" and\n// seg.forwardCoord maps to \"right\" (via percentage). Vice-versa if the calendar is right-to-left.\n//\n// The segment might be part of a \"series\", which means consecutive segments with the same pressure\n// who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of\n// segments behind this one in the current series, and `seriesBackwardCoord` is the starting\n// coordinate of the first segment in the series.\nfunction computeSlotSegCoords(seg, seriesBackwardPressure, seriesBackwardCoord) {\n\tvar forwardSegs = seg.forwardSegs;\n\tvar i;\n\n\tif (seg.forwardCoord === undefined) { // not already computed\n\n\t\tif (!forwardSegs.length) {\n\n\t\t\t// if there are no forward segments, this segment should butt up against the edge\n\t\t\tseg.forwardCoord = 1;\n\t\t}\n\t\telse {\n\n\t\t\t// sort highest pressure first\n\t\t\tforwardSegs.sort(compareForwardSlotSegs);\n\n\t\t\t// this segment's forwardCoord will be calculated from the backwardCoord of the\n\t\t\t// highest-pressure forward segment.\n\t\t\tcomputeSlotSegCoords(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);\n\t\t\tseg.forwardCoord = forwardSegs[0].backwardCoord;\n\t\t}\n\n\t\t// calculate the backwardCoord from the forwardCoord. consider the series\n\t\tseg.backwardCoord = seg.forwardCoord -\n\t\t\t(seg.forwardCoord - seriesBackwardCoord) / // available width for series\n\t\t\t(seriesBackwardPressure + 1); // # of segments in the series\n\n\t\t// use this segment's coordinates to computed the coordinates of the less-pressurized\n\t\t// forward segments\n\t\tfor (i=0; i<forwardSegs.length; i++) {\n\t\t\tcomputeSlotSegCoords(forwardSegs[i], 0, seg.forwardCoord);\n\t\t}\n\t}\n}\n\n\n// Find all the segments in `otherSegs` that vertically collide with `seg`.\n// Append into an optionally-supplied `results` array and return.\nfunction computeSlotSegCollisions(seg, otherSegs, results) {\n\tresults = results || [];\n\n\tfor (var i=0; i<otherSegs.length; i++) {\n\t\tif (isSlotSegCollision(seg, otherSegs[i])) {\n\t\t\tresults.push(otherSegs[i]);\n\t\t}\n\t}\n\n\treturn results;\n}\n\n\n// Do these segments occupy the same vertical space?\nfunction isSlotSegCollision(seg1, seg2) {\n\treturn seg1.bottom > seg2.top && seg1.top < seg2.bottom;\n}\n\n\n// A cmp function for determining which forward segment to rely on more when computing coordinates.\nfunction compareForwardSlotSegs(seg1, seg2) {\n\t// put higher-pressure first\n\treturn seg2.forwardPressure - seg1.forwardPressure ||\n\t\t// put segments that are closer to initial edge first (and favor ones with no coords yet)\n\t\t(seg1.backwardCoord || 0) - (seg2.backwardCoord || 0) ||\n\t\t// do normal sorting...\n\t\tcompareSegs(seg1, seg2);\n}\n\n    /* An abstract class from which other views inherit from\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar View = fc.View = Class.extend({\n\n\ttype: null, // subclass' view name (string)\n\tname: null, // deprecated. use `type` instead\n\n\tcalendar: null, // owner Calendar object\n\toptions: null, // view-specific options\n\tcoordMap: null, // a CoordMap object for converting pixel regions to dates\n\tel: null, // the view's containing element. set by Calendar\n\n\t// range the view is actually displaying (moments)\n\tstart: null,\n\tend: null, // exclusive\n\n\t// range the view is formally responsible for (moments)\n\t// may be different from start/end. for example, a month view might have 1st-31st, excluding padded dates\n\tintervalStart: null,\n\tintervalEnd: null, // exclusive\n\n\tintervalDuration: null, // the whole-unit duration that is being displayed\n\tintervalUnit: null, // name of largest unit being displayed, like \"month\" or \"week\"\n\n\tisSelected: false, // boolean whether a range of time is user-selected or not\n\n\t// subclasses can optionally use a scroll container\n\tscrollerEl: null, // the element that will most likely scroll when content is too tall\n\tscrollTop: null, // cached vertical scroll value\n\n\t// classNames styled by jqui themes\n\twidgetHeaderClass: null,\n\twidgetContentClass: null,\n\thighlightStateClass: null,\n\n\t// for date utils, computed from options\n\tnextDayThreshold: null,\n\tisHiddenDayHash: null,\n\n\t// document handlers, bound to `this` object\n\tdocumentMousedownProxy: null, // TODO: doesn't work with touch\n\n\n\tconstructor: function(calendar, viewOptions, viewType) {\n\t\tthis.calendar = calendar;\n\t\tthis.options = viewOptions;\n\t\tthis.type = this.name = viewType; // .name is deprecated\n\n\t\tthis.nextDayThreshold = moment.duration(this.opt('nextDayThreshold'));\n\t\tthis.initTheming();\n\t\tthis.initHiddenDays();\n\n\t\tthis.documentMousedownProxy = $.proxy(this, 'documentMousedown');\n\n\t\tthis.initialize();\n\t},\n\n\n\t// A good place for subclasses to initialize member variables\n\tinitialize: function() {\n\t\t// subclasses can implement\n\t},\n\n\n\t// Retrieves an option with the given name\n\topt: function(name) {\n\t\tvar val;\n\n\t\tval = this.options[name]; // look at view-specific options first\n\t\tif (val !== undefined) {\n\t\t\treturn val;\n\t\t}\n\n\t\tval = this.calendar.options[name];\n\t\tif ($.isPlainObject(val) && !isForcedAtomicOption(name)) { // view-option-hashes are deprecated\n\t\t\treturn smartProperty(val, this.type);\n\t\t}\n\n\t\treturn val;\n\t},\n\n\n\t// Triggers handlers that are view-related. Modifies args before passing to calendar.\n\ttrigger: function(name, thisObj) { // arguments beyond thisObj are passed along\n\t\tvar calendar = this.calendar;\n\n\t\treturn calendar.trigger.apply(\n\t\t\tcalendar,\n\t\t\t[name, thisObj || this].concat(\n\t\t\t\tArray.prototype.slice.call(arguments, 2), // arguments beyond thisObj\n\t\t\t\t[ this ] // always make the last argument a reference to the view. TODO: deprecate\n\t\t\t)\n\t\t);\n\t},\n\n\n\t/* Dates\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Updates all internal dates to center around the given current date\n\tsetDate: function(date) {\n\t\tthis.setRange(this.computeRange(date));\n\t},\n\n\n\t// Updates all internal dates for displaying the given range.\n\t// Expects all values to be normalized (like what computeRange does).\n\tsetRange: function(range) {\n\t\t$.extend(this, range);\n\t},\n\n\n\t// Given a single current date, produce information about what range to display.\n\t// Subclasses can override. Must return all properties.\n\tcomputeRange: function(date) {\n\t\tvar intervalDuration = moment.duration(this.opt('duration') || this.constructor.duration || { days: 1 });\n\t\tvar intervalUnit = computeIntervalUnit(intervalDuration);\n\t\tvar intervalStart = date.clone().startOf(intervalUnit);\n\t\tvar intervalEnd = intervalStart.clone().add(intervalDuration);\n\t\tvar start, end;\n\n\t\t// normalize the range's time-ambiguity\n\t\tif (computeIntervalAs('days', intervalDuration)) { // whole-days?\n\t\t\tintervalStart.stripTime();\n\t\t\tintervalEnd.stripTime();\n\t\t}\n\t\telse { // needs to have a time?\n\t\t\tif (!intervalStart.hasTime()) {\n\t\t\t\tintervalStart = this.calendar.rezoneDate(intervalStart); // convert to current timezone, with 00:00\n\t\t\t}\n\t\t\tif (!intervalEnd.hasTime()) {\n\t\t\t\tintervalEnd = this.calendar.rezoneDate(intervalEnd); // convert to current timezone, with 00:00\n\t\t\t}\n\t\t}\n\n\t\tstart = intervalStart.clone();\n\t\tstart = this.skipHiddenDays(start);\n\t\tend = intervalEnd.clone();\n\t\tend = this.skipHiddenDays(end, -1, true); // exclusively move backwards\n\n\t\treturn {\n\t\t\tintervalDuration: intervalDuration,\n\t\t\tintervalUnit: intervalUnit,\n\t\t\tintervalStart: intervalStart,\n\t\t\tintervalEnd: intervalEnd,\n\t\t\tstart: start,\n\t\t\tend: end\n\t\t};\n\t},\n\n\n\t// Computes the new date when the user hits the prev button, given the current date\n\tcomputePrevDate: function(date) {\n\t\treturn this.skipHiddenDays(\n\t\t\tdate.clone().startOf(this.intervalUnit).subtract(this.intervalDuration), -1\n\t\t);\n\t},\n\n\n\t// Computes the new date when the user hits the next button, given the current date\n\tcomputeNextDate: function(date) {\n\t\treturn this.skipHiddenDays(\n\t\t\tdate.clone().startOf(this.intervalUnit).add(this.intervalDuration)\n\t\t);\n\t},\n\n\n\t/* Title and Date Formatting\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes what the title at the top of the calendar should be for this view\n\tcomputeTitle: function() {\n\t\treturn this.formatRange(\n\t\t\t{ start: this.intervalStart, end: this.intervalEnd },\n\t\t\tthis.opt('titleFormat') || this.computeTitleFormat(),\n\t\t\tthis.opt('titleRangeSeparator')\n\t\t);\n\t},\n\n\n\t// Generates the format string that should be used to generate the title for the current date range.\n\t// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\n\tcomputeTitleFormat: function() {\n\t\tif (this.intervalUnit == 'year') {\n\t\t\treturn 'YYYY';\n\t\t}\n\t\telse if (this.intervalUnit == 'month') {\n\t\t\treturn this.opt('monthYearFormat'); // like \"September 2014\"\n\t\t}\n\t\telse if (this.intervalDuration.as('days') > 1) {\n\t\t\treturn 'll'; // multi-day range. shorter, like \"Sep 9 - 10 2014\"\n\t\t}\n\t\telse {\n\t\t\treturn 'LL'; // one day. longer, like \"September 9 2014\"\n\t\t}\n\t},\n\n\n\t// Utility for formatting a range. Accepts a range object, formatting string, and optional separator.\n\t// Displays all-day ranges naturally, with an inclusive end. Takes the current isRTL into account.\n\tformatRange: function(range, formatStr, separator) {\n\t\tvar end = range.end;\n\n\t\tif (!end.hasTime()) { // all-day?\n\t\t\tend = end.clone().subtract(1); // convert to inclusive. last ms of previous day\n\t\t}\n\n\t\treturn formatRange(range.start, end, formatStr, separator, this.opt('isRTL'));\n\t},\n\n\n\t/* Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Wraps the basic render() method with more View-specific logic. Called by the owner Calendar.\n\trenderView: function() {\n\t\tthis.render();\n\t\tthis.updateSize();\n\t\tthis.initializeScroll();\n\t\tthis.trigger('viewRender', this, this, this.el);\n\n\t\t// attach handlers to document. do it here to allow for destroy/rerender\n\t\t$(document).on('mousedown', this.documentMousedownProxy);\n\t},\n\n\n\t// Renders the view inside an already-defined `this.el`\n\trender: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Wraps the basic destroy() method with more View-specific logic. Called by the owner Calendar.\n\tdestroyView: function() {\n\t\tthis.unselect();\n\t\tthis.destroyViewEvents();\n\t\tthis.destroy();\n\t\tthis.trigger('viewDestroy', this, this, this.el);\n\n\t\t$(document).off('mousedown', this.documentMousedownProxy);\n\t},\n\n\n\t// Clears the view's rendering\n\tdestroy: function() {\n\t\tthis.el.empty(); // removes inner contents but leaves the element intact\n\t},\n\n\n\t// Initializes internal variables related to theming\n\tinitTheming: function() {\n\t\tvar tm = this.opt('theme') ? 'ui' : 'fc';\n\n\t\tthis.widgetHeaderClass = tm + '-widget-header';\n\t\tthis.widgetContentClass = tm + '-widget-content';\n\t\tthis.highlightStateClass = tm + '-state-highlight';\n\t},\n\n\n\t/* Dimensions\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Refreshes anything dependant upon sizing of the container element of the grid\n\tupdateSize: function(isResize) {\n\t\tif (isResize) {\n\t\t\tthis.recordScroll();\n\t\t}\n\t\tthis.updateHeight();\n\t\tthis.updateWidth();\n\t},\n\n\n\t// Refreshes the horizontal dimensions of the calendar\n\tupdateWidth: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Refreshes the vertical dimensions of the calendar\n\tupdateHeight: function() {\n\t\tvar calendar = this.calendar; // we poll the calendar for height information\n\n\t\tthis.setHeight(\n\t\t\tcalendar.getSuggestedViewHeight(),\n\t\t\tcalendar.isHeightAuto()\n\t\t);\n\t},\n\n\n\t// Updates the vertical dimensions of the calendar to the specified height.\n\t// if `isAuto` is set to true, height becomes merely a suggestion and the view should use its \"natural\" height.\n\tsetHeight: function(height, isAuto) {\n\t\t// subclasses should implement\n\t},\n\n\n\t/* Scroller\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Given the total height of the view, return the number of pixels that should be used for the scroller.\n\t// By default, uses this.scrollerEl, but can pass this in as well.\n\t// Utility for subclasses.\n\tcomputeScrollerHeight: function(totalHeight, scrollerEl) {\n\t\tvar both;\n\t\tvar otherHeight; // cumulative height of everything that is not the scrollerEl in the view (header+borders)\n\n\t\tscrollerEl = scrollerEl || this.scrollerEl;\n\t\tboth = this.el.add(scrollerEl);\n\n\t\t// fuckin IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked\n\t\tboth.css({\n\t\t\tposition: 'relative', // cause a reflow, which will force fresh dimension recalculation\n\t\t\tleft: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll\n\t\t});\n\t\totherHeight = this.el.outerHeight() - scrollerEl.height(); // grab the dimensions\n\t\tboth.css({ position: '', left: '' }); // undo hack\n\n\t\treturn totalHeight - otherHeight;\n\t},\n\n\n\t// Sets the scroll value of the scroller to the initial pre-configured state prior to allowing the user to change it\n\tinitializeScroll: function() {\n\t},\n\n\n\t// Called for remembering the current scroll value of the scroller.\n\t// Should be called before there is a destructive operation (like removing DOM elements) that might inadvertently\n\t// change the scroll of the container.\n\trecordScroll: function() {\n\t\tif (this.scrollerEl) {\n\t\t\tthis.scrollTop = this.scrollerEl.scrollTop();\n\t\t}\n\t},\n\n\n\t// Set the scroll value of the scroller to the previously recorded value.\n\t// Should be called after we know the view's dimensions have been restored following some type of destructive\n\t// operation (like temporarily removing DOM elements).\n\trestoreScroll: function() {\n\t\tif (this.scrollTop !== null) {\n\t\t\tthis.scrollerEl.scrollTop(this.scrollTop);\n\t\t}\n\t},\n\n\n\t/* Event Elements / Segments\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Wraps the basic renderEvents() method with more View-specific logic\n\trenderViewEvents: function(events) {\n\t\tthis.renderEvents(events);\n\n\t\tthis.eventSegEach(function(seg) {\n\t\t\tthis.trigger('eventAfterRender', seg.event, seg.event, seg.el);\n\t\t});\n\t\tthis.trigger('eventAfterAllRender');\n\t},\n\n\n\t// Renders the events onto the view.\n\trenderEvents: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Wraps the basic destroyEvents() method with more View-specific logic\n\tdestroyViewEvents: function() {\n\t\tthis.eventSegEach(function(seg) {\n\t\t\tthis.trigger('eventDestroy', seg.event, seg.event, seg.el);\n\t\t});\n\n\t\tthis.destroyEvents();\n\t},\n\n\n\t// Removes event elements from the view.\n\tdestroyEvents: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Given an event and the default element used for rendering, returns the element that should actually be used.\n\t// Basically runs events and elements through the eventRender hook.\n\tresolveEventEl: function(event, el) {\n\t\tvar custom = this.trigger('eventRender', event, event, el);\n\n\t\tif (custom === false) { // means don't render at all\n\t\t\tel = null;\n\t\t}\n\t\telse if (custom && custom !== true) {\n\t\t\tel = $(custom);\n\t\t}\n\n\t\treturn el;\n\t},\n\n\n\t// Hides all rendered event segments linked to the given event\n\tshowEvent: function(event) {\n\t\tthis.eventSegEach(function(seg) {\n\t\t\tseg.el.css('visibility', '');\n\t\t}, event);\n\t},\n\n\n\t// Shows all rendered event segments linked to the given event\n\thideEvent: function(event) {\n\t\tthis.eventSegEach(function(seg) {\n\t\t\tseg.el.css('visibility', 'hidden');\n\t\t}, event);\n\t},\n\n\n\t// Iterates through event segments. Goes through all by default.\n\t// If the optional `event` argument is specified, only iterates through segments linked to that event.\n\t// The `this` value of the callback function will be the view.\n\teventSegEach: function(func, event) {\n\t\tvar segs = this.getEventSegs();\n\t\tvar i;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tif (!event || segs[i].event._id === event._id) {\n\t\t\t\tfunc.call(this, segs[i]);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Retrieves all the rendered segment objects for the view\n\tgetEventSegs: function() {\n\t\t// subclasses must implement\n\t\treturn [];\n\t},\n\n\n\t/* Event Drag-n-Drop\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes if the given event is allowed to be dragged by the user\n\tisEventDraggable: function(event) {\n\t\tvar source = event.source || {};\n\n\t\treturn firstDefined(\n\t\t\tevent.startEditable,\n\t\t\tsource.startEditable,\n\t\t\tthis.opt('eventStartEditable'),\n\t\t\tevent.editable,\n\t\t\tsource.editable,\n\t\t\tthis.opt('editable')\n\t\t);\n\t},\n\n\n\t// Must be called when an event in the view is dropped onto new location.\n\t// `dropLocation` is an object that contains the new start/end/allDay values for the event.\n\treportEventDrop: function(event, dropLocation, el, ev) {\n\t\tvar calendar = this.calendar;\n\t\tvar mutateResult = calendar.mutateEvent(event, dropLocation);\n\t\tvar undoFunc = function() {\n\t\t\tmutateResult.undo();\n\t\t\tcalendar.reportEventChange();\n\t\t};\n\n\t\tthis.triggerEventDrop(event, mutateResult.dateDelta, undoFunc, el, ev);\n\t\tcalendar.reportEventChange(); // will rerender events\n\t},\n\n\n\t// Triggers event-drop handlers that have subscribed via the API\n\ttriggerEventDrop: function(event, dateDelta, undoFunc, el, ev) {\n\t\tthis.trigger('eventDrop', el[0], event, dateDelta, undoFunc, ev, {}); // {} = jqui dummy\n\t},\n\n\n\t/* External Element Drag-n-Drop\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Must be called when an external element, via jQuery UI, has been dropped onto the calendar.\n\t// `meta` is the parsed data that has been embedded into the dragging event.\n\t// `dropLocation` is an object that contains the new start/end/allDay values for the event.\n\treportExternalDrop: function(meta, dropLocation, el, ev, ui) {\n\t\tvar eventProps = meta.eventProps;\n\t\tvar eventInput;\n\t\tvar event;\n\n\t\t// Try to build an event object and render it. TODO: decouple the two\n\t\tif (eventProps) {\n\t\t\teventInput = $.extend({}, eventProps, dropLocation);\n\t\t\tevent = this.calendar.renderEvent(eventInput, meta.stick)[0]; // renderEvent returns an array\n\t\t}\n\n\t\tthis.triggerExternalDrop(event, dropLocation, el, ev, ui);\n\t},\n\n\n\t// Triggers external-drop handlers that have subscribed via the API\n\ttriggerExternalDrop: function(event, dropLocation, el, ev, ui) {\n\n\t\t// trigger 'drop' regardless of whether element represents an event\n\t\tthis.trigger('drop', el[0], dropLocation.start, ev, ui);\n\n\t\tif (event) {\n\t\t\tthis.trigger('eventReceive', null, event); // signal an external event landed\n\t\t}\n\t},\n\n\n\t/* Drag-n-Drop Rendering (for both events and external elements)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of a event or external-element drag over the given drop zone.\n\t// If an external-element, seg will be `null`\n\trenderDrag: function(dropLocation, seg) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders a visual indication of an event or external-element being dragged.\n\tdestroyDrag: function() {\n\t\t// subclasses must implement\n\t},\n\n\n\t/* Event Resizing\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes if the given event is allowed to be resize by the user\n\tisEventResizable: function(event) {\n\t\tvar source = event.source || {};\n\n\t\treturn firstDefined(\n\t\t\tevent.durationEditable,\n\t\t\tsource.durationEditable,\n\t\t\tthis.opt('eventDurationEditable'),\n\t\t\tevent.editable,\n\t\t\tsource.editable,\n\t\t\tthis.opt('editable')\n\t\t);\n\t},\n\n\n\t// Must be called when an event in the view has been resized to a new length\n\treportEventResize: function(event, newEnd, el, ev) {\n\t\tvar calendar = this.calendar;\n\t\tvar mutateResult = calendar.mutateEvent(event, { end: newEnd });\n\t\tvar undoFunc = function() {\n\t\t\tmutateResult.undo();\n\t\t\tcalendar.reportEventChange();\n\t\t};\n\n\t\tthis.triggerEventResize(event, mutateResult.durationDelta, undoFunc, el, ev);\n\t\tcalendar.reportEventChange(); // will rerender events\n\t},\n\n\n\t// Triggers event-resize handlers that have subscribed via the API\n\ttriggerEventResize: function(event, durationDelta, undoFunc, el, ev) {\n\t\tthis.trigger('eventResize', el[0], event, durationDelta, undoFunc, ev, {}); // {} = jqui dummy\n\t},\n\n\n\t/* Selection\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Selects a date range on the view. `start` and `end` are both Moments.\n\t// `ev` is the native mouse event that begin the interaction.\n\tselect: function(range, ev) {\n\t\tthis.unselect(ev);\n\t\tthis.renderSelection(range);\n\t\tthis.reportSelection(range, ev);\n\t},\n\n\n\t// Renders a visual indication of the selection\n\trenderSelection: function(range) {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Called when a new selection is made. Updates internal state and triggers handlers.\n\treportSelection: function(range, ev) {\n\t\tthis.isSelected = true;\n\t\tthis.trigger('select', null, range.start, range.end, ev);\n\t},\n\n\n\t// Undoes a selection. updates in the internal state and triggers handlers.\n\t// `ev` is the native mouse event that began the interaction.\n\tunselect: function(ev) {\n\t\tif (this.isSelected) {\n\t\t\tthis.isSelected = false;\n\t\t\tthis.destroySelection();\n\t\t\tthis.trigger('unselect', null, ev);\n\t\t}\n\t},\n\n\n\t// Unrenders a visual indication of selection\n\tdestroySelection: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Handler for unselecting when the user clicks something and the 'unselectAuto' setting is on\n\tdocumentMousedown: function(ev) {\n\t\tvar ignore;\n\n\t\t// is there a selection, and has the user made a proper left click?\n\t\tif (this.isSelected && this.opt('unselectAuto') && isPrimaryMouseButton(ev)) {\n\n\t\t\t// only unselect if the clicked element is not identical to or inside of an 'unselectCancel' element\n\t\t\tignore = this.opt('unselectCancel');\n\t\t\tif (!ignore || !$(ev.target).closest(ignore).length) {\n\t\t\t\tthis.unselect(ev);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/* Date Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Initializes internal variables related to calculating hidden days-of-week\n\tinitHiddenDays: function() {\n\t\tvar hiddenDays = this.opt('hiddenDays') || []; // array of day-of-week indices that are hidden\n\t\tvar isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\n\t\tvar dayCnt = 0;\n\t\tvar i;\n\n\t\tif (this.opt('weekends') === false) {\n\t\t\thiddenDays.push(0, 6); // 0=sunday, 6=saturday\n\t\t}\n\n\t\tfor (i = 0; i < 7; i++) {\n\t\t\tif (\n\t\t\t\t!(isHiddenDayHash[i] = $.inArray(i, hiddenDays) !== -1)\n\t\t\t) {\n\t\t\t\tdayCnt++;\n\t\t\t}\n\t\t}\n\n\t\tif (!dayCnt) {\n\t\t\tthrow 'invalid hiddenDays'; // all days were hidden? bad.\n\t\t}\n\n\t\tthis.isHiddenDayHash = isHiddenDayHash;\n\t},\n\n\n\t// Is the current day hidden?\n\t// `day` is a day-of-week index (0-6), or a Moment\n\tisHiddenDay: function(day) {\n\t\tif (moment.isMoment(day)) {\n\t\t\tday = day.day();\n\t\t}\n\t\treturn this.isHiddenDayHash[day];\n\t},\n\n\n\t// Incrementing the current day until it is no longer a hidden day, returning a copy.\n\t// If the initial value of `date` is not a hidden day, don't do anything.\n\t// Pass `isExclusive` as `true` if you are dealing with an end date.\n\t// `inc` defaults to `1` (increment one day forward each time)\n\tskipHiddenDays: function(date, inc, isExclusive) {\n\t\tvar out = date.clone();\n\t\tinc = inc || 1;\n\t\twhile (\n\t\t\tthis.isHiddenDayHash[(out.day() + (isExclusive ? inc : 0) + 7) % 7]\n\t\t) {\n\t\t\tout.add(inc, 'days');\n\t\t}\n\t\treturn out;\n\t},\n\n\n\t// Returns the date range of the full days the given range visually appears to occupy.\n\t// Returns a new range object.\n\tcomputeDayRange: function(range) {\n\t\tvar startDay = range.start.clone().stripTime(); // the beginning of the day the range starts\n\t\tvar end = range.end;\n\t\tvar endDay = null;\n\t\tvar endTimeMS;\n\n\t\tif (end) {\n\t\t\tendDay = end.clone().stripTime(); // the beginning of the day the range exclusively ends\n\t\t\tendTimeMS = +end.time(); // # of milliseconds into `endDay`\n\n\t\t\t// If the end time is actually inclusively part of the next day and is equal to or\n\t\t\t// beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\n\t\t\t// Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\n\t\t\tif (endTimeMS && endTimeMS >= this.nextDayThreshold) {\n\t\t\t\tendDay.add(1, 'days');\n\t\t\t}\n\t\t}\n\n\t\t// If no end was specified, or if it is within `startDay` but not past nextDayThreshold,\n\t\t// assign the default duration of one day.\n\t\tif (!end || endDay <= startDay) {\n\t\t\tendDay = startDay.clone().add(1, 'days');\n\t\t}\n\n\t\treturn { start: startDay, end: endDay };\n\t},\n\n\n\t// Does the given event visually appear to occupy more than one day?\n\tisMultiDayEvent: function(event) {\n\t\tvar range = this.computeDayRange(event); // event is range-ish\n\n\t\treturn range.end.diff(range.start, 'days') > 1;\n\t}\n\n});\n\n    function Calendar(element, instanceOptions) {\n\tvar t = this;\n\n\n\n\t// Build options object\n\t// -----------------------------------------------------------------------------------\n\t// Precedence (lowest to highest): defaults, rtlDefaults, langOptions, instanceOptions\n\n\tinstanceOptions = instanceOptions || {};\n\n\tvar options = mergeOptions({}, defaults, instanceOptions);\n\tvar langOptions;\n\n\t// determine language options\n\tif (options.lang in langOptionHash) {\n\t\tlangOptions = langOptionHash[options.lang];\n\t}\n\telse {\n\t\tlangOptions = langOptionHash[defaults.lang];\n\t}\n\n\tif (langOptions) { // if language options exist, rebuild...\n\t\toptions = mergeOptions({}, defaults, langOptions, instanceOptions);\n\t}\n\n\tif (options.isRTL) { // is isRTL, rebuild...\n\t\toptions = mergeOptions({}, defaults, rtlDefaults, langOptions || {}, instanceOptions);\n\t}\n\n\n\t\n\t// Exports\n\t// -----------------------------------------------------------------------------------\n\n\tt.options = options;\n\tt.render = render;\n\tt.destroy = destroy;\n\tt.refetchEvents = refetchEvents;\n\tt.reportEvents = reportEvents;\n\tt.reportEventChange = reportEventChange;\n\tt.rerenderEvents = renderEvents; // `renderEvents` serves as a rerender. an API method\n\tt.changeView = changeView;\n\tt.select = select;\n\tt.unselect = unselect;\n\tt.prev = prev;\n\tt.next = next;\n\tt.prevYear = prevYear;\n\tt.nextYear = nextYear;\n\tt.today = today;\n\tt.gotoDate = gotoDate;\n\tt.incrementDate = incrementDate;\n\tt.zoomTo = zoomTo;\n\tt.getDate = getDate;\n\tt.getCalendar = getCalendar;\n\tt.getView = getView;\n\tt.option = option;\n\tt.trigger = trigger;\n\tt.isValidViewType = isValidViewType;\n\tt.getViewButtonText = getViewButtonText;\n\n\n\n\t// Language-data Internals\n\t// -----------------------------------------------------------------------------------\n\t// Apply overrides to the current language's data\n\n\n\tvar localeData = createObject( // make a cheap copy\n\t\tgetMomentLocaleData(options.lang) // will fall back to en\n\t);\n\n\tif (options.monthNames) {\n\t\tlocaleData._months = options.monthNames;\n\t}\n\tif (options.monthNamesShort) {\n\t\tlocaleData._monthsShort = options.monthNamesShort;\n\t}\n\tif (options.dayNames) {\n\t\tlocaleData._weekdays = options.dayNames;\n\t}\n\tif (options.dayNamesShort) {\n\t\tlocaleData._weekdaysShort = options.dayNamesShort;\n\t}\n\tif (options.firstDay != null) {\n\t\tvar _week = createObject(localeData._week); // _week: { dow: # }\n\t\t_week.dow = options.firstDay;\n\t\tlocaleData._week = _week;\n\t}\n\n\n\n\t// Calendar-specific Date Utilities\n\t// -----------------------------------------------------------------------------------\n\n\n\tt.defaultAllDayEventDuration = moment.duration(options.defaultAllDayEventDuration);\n\tt.defaultTimedEventDuration = moment.duration(options.defaultTimedEventDuration);\n\n\n\t// Builds a moment using the settings of the current calendar: timezone and language.\n\t// Accepts anything the vanilla moment() constructor accepts.\n\tt.moment = function() {\n\t\tvar mom;\n\n\t\tif (options.timezone === 'local') {\n\t\t\tmom = fc.moment.apply(null, arguments);\n\n\t\t\t// Force the moment to be local, because fc.moment doesn't guarantee it.\n\t\t\tif (mom.hasTime()) { // don't give ambiguously-timed moments a local zone\n\t\t\t\tmom.local();\n\t\t\t}\n\t\t}\n\t\telse if (options.timezone === 'UTC') {\n\t\t\tmom = fc.moment.utc.apply(null, arguments); // process as UTC\n\t\t}\n\t\telse {\n\t\t\tmom = fc.moment.parseZone.apply(null, arguments); // let the input decide the zone\n\t\t}\n\n\t\tif ('_locale' in mom) { // moment 2.8 and above\n\t\t\tmom._locale = localeData;\n\t\t}\n\t\telse { // pre-moment-2.8\n\t\t\tmom._lang = localeData;\n\t\t}\n\n\t\treturn mom;\n\t};\n\n\n\t// Returns a boolean about whether or not the calendar knows how to calculate\n\t// the timezone offset of arbitrary dates in the current timezone.\n\tt.getIsAmbigTimezone = function() {\n\t\treturn options.timezone !== 'local' && options.timezone !== 'UTC';\n\t};\n\n\n\t// Returns a copy of the given date in the current timezone of it is ambiguously zoned.\n\t// This will also give the date an unambiguous time.\n\tt.rezoneDate = function(date) {\n\t\treturn t.moment(date.toArray());\n\t};\n\n\n\t// Returns a moment for the current date, as defined by the client's computer,\n\t// or overridden by the `now` option.\n\tt.getNow = function() {\n\t\tvar now = options.now;\n\t\tif (typeof now === 'function') {\n\t\t\tnow = now();\n\t\t}\n\t\treturn t.moment(now);\n\t};\n\n\n\t// Calculates the week number for a moment according to the calendar's\n\t// `weekNumberCalculation` setting.\n\tt.calculateWeekNumber = function(mom) {\n\t\tvar calc = options.weekNumberCalculation;\n\n\t\tif (typeof calc === 'function') {\n\t\t\treturn calc(mom);\n\t\t}\n\t\telse if (calc === 'local') {\n\t\t\treturn mom.week();\n\t\t}\n\t\telse if (calc.toUpperCase() === 'ISO') {\n\t\t\treturn mom.isoWeek();\n\t\t}\n\t};\n\n\n\t// Get an event's normalized end date. If not present, calculate it from the defaults.\n\tt.getEventEnd = function(event) {\n\t\tif (event.end) {\n\t\t\treturn event.end.clone();\n\t\t}\n\t\telse {\n\t\t\treturn t.getDefaultEventEnd(event.allDay, event.start);\n\t\t}\n\t};\n\n\n\t// Given an event's allDay status and start date, return swhat its fallback end date should be.\n\tt.getDefaultEventEnd = function(allDay, start) { // TODO: rename to computeDefaultEventEnd\n\t\tvar end = start.clone();\n\n\t\tif (allDay) {\n\t\t\tend.stripTime().add(t.defaultAllDayEventDuration);\n\t\t}\n\t\telse {\n\t\t\tend.add(t.defaultTimedEventDuration);\n\t\t}\n\n\t\tif (t.getIsAmbigTimezone()) {\n\t\t\tend.stripZone(); // we don't know what the tzo should be\n\t\t}\n\n\t\treturn end;\n\t};\n\n\n\t// Produces a human-readable string for the given duration.\n\t// Side-effect: changes the locale of the given duration.\n\tfunction humanizeDuration(duration) {\n\t\treturn (duration.locale || duration.lang).call(duration, options.lang) // works moment-pre-2.8\n\t\t\t.humanize();\n\t}\n\n\n\t\n\t// Imports\n\t// -----------------------------------------------------------------------------------\n\n\n\tEventManager.call(t, options);\n\tvar isFetchNeeded = t.isFetchNeeded;\n\tvar fetchEvents = t.fetchEvents;\n\n\n\n\t// Locals\n\t// -----------------------------------------------------------------------------------\n\n\n\tvar _element = element[0];\n\tvar header;\n\tvar headerElement;\n\tvar content;\n\tvar tm; // for making theme classes\n\tvar viewSpecCache = {};\n\tvar currentView;\n\tvar suggestedViewHeight;\n\tvar windowResizeProxy; // wraps the windowResize function\n\tvar ignoreWindowResize = 0;\n\tvar date;\n\tvar events = [];\n\t\n\t\n\t\n\t// Main Rendering\n\t// -----------------------------------------------------------------------------------\n\n\n\tif (options.defaultDate != null) {\n\t\tdate = t.moment(options.defaultDate);\n\t}\n\telse {\n\t\tdate = t.getNow();\n\t}\n\t\n\t\n\tfunction render(inc) {\n\t\tif (!content) {\n\t\t\tinitialRender();\n\t\t}\n\t\telse if (elementVisible()) {\n\t\t\t// mainly for the public API\n\t\t\tcalcSize();\n\t\t\trenderView(inc);\n\t\t}\n\t}\n\t\n\t\n\tfunction initialRender() {\n\t\ttm = options.theme ? 'ui' : 'fc';\n\t\telement.addClass('fc');\n\n\t\tif (options.isRTL) {\n\t\t\telement.addClass('fc-rtl');\n\t\t}\n\t\telse {\n\t\t\telement.addClass('fc-ltr');\n\t\t}\n\n\t\tif (options.theme) {\n\t\t\telement.addClass('ui-widget');\n\t\t}\n\t\telse {\n\t\t\telement.addClass('fc-unthemed');\n\t\t}\n\n\t\tcontent = $(\"<div class='fc-view-container'/>\").prependTo(element);\n\n\t\theader = new Header(t, options);\n\t\theaderElement = header.render();\n\t\tif (headerElement) {\n\t\t\telement.prepend(headerElement);\n\t\t}\n\n\t\tchangeView(options.defaultView);\n\n\t\tif (options.handleWindowResize) {\n\t\t\twindowResizeProxy = debounce(windowResize, options.windowResizeDelay); // prevents rapid calls\n\t\t\t$(window).resize(windowResizeProxy);\n\t\t}\n\t}\n\t\n\t\n\tfunction destroy() {\n\n\t\tif (currentView) {\n\t\t\tcurrentView.destroyView();\n\t\t}\n\n\t\theader.destroy();\n\t\tcontent.remove();\n\t\telement.removeClass('fc fc-ltr fc-rtl fc-unthemed ui-widget');\n\n\t\t$(window).unbind('resize', windowResizeProxy);\n\t}\n\t\n\t\n\tfunction elementVisible() {\n\t\treturn element.is(':visible');\n\t}\n\t\n\t\n\n\t// View Rendering\n\t// -----------------------------------------------------------------------------------\n\n\n\tfunction changeView(viewType) {\n\t\trenderView(0, viewType);\n\t}\n\n\n\t// Renders a view because of a date change, view-type change, or for the first time\n\tfunction renderView(delta, viewType) {\n\t\tignoreWindowResize++;\n\n\t\t// if viewType is changing, destroy the old view\n\t\tif (currentView && viewType && currentView.type !== viewType) {\n\t\t\theader.deactivateButton(currentView.type);\n\t\t\tfreezeContentHeight(); // prevent a scroll jump when view element is removed\n\t\t\tif (currentView.start) { // rendered before?\n\t\t\t\tcurrentView.destroyView();\n\t\t\t}\n\t\t\tcurrentView.el.remove();\n\t\t\tcurrentView = null;\n\t\t}\n\n\t\t// if viewType changed, or the view was never created, create a fresh view\n\t\tif (!currentView && viewType) {\n\t\t\tcurrentView = instantiateView(viewType);\n\t\t\tcurrentView.el =  $(\"<div class='fc-view fc-\" + viewType + \"-view' />\").appendTo(content);\n\t\t\theader.activateButton(viewType);\n\t\t}\n\n\t\tif (currentView) {\n\n\t\t\t// let the view determine what the delta means\n\t\t\tif (delta < 0) {\n\t\t\t\tdate = currentView.computePrevDate(date);\n\t\t\t}\n\t\t\telse if (delta > 0) {\n\t\t\t\tdate = currentView.computeNextDate(date);\n\t\t\t}\n\n\t\t\t// render or rerender the view\n\t\t\tif (\n\t\t\t\t!currentView.start || // never rendered before\n\t\t\t\tdelta || // explicit date window change\n\t\t\t\t!date.isWithin(currentView.intervalStart, currentView.intervalEnd) // implicit date window change\n\t\t\t) {\n\t\t\t\tif (elementVisible()) {\n\n\t\t\t\t\tfreezeContentHeight();\n\t\t\t\t\tif (currentView.start) { // rendered before?\n\t\t\t\t\t\tcurrentView.destroyView();\n\t\t\t\t\t}\n\t\t\t\t\tcurrentView.setDate(date);\n\t\t\t\t\tcurrentView.renderView();\n\t\t\t\t\tunfreezeContentHeight();\n\n\t\t\t\t\t// need to do this after View::render, so dates are calculated\n\t\t\t\t\tupdateTitle();\n\t\t\t\t\tupdateTodayButton();\n\n\t\t\t\t\tgetAndRenderEvents();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tunfreezeContentHeight(); // undo any lone freezeContentHeight calls\n\t\tignoreWindowResize--;\n\t}\n\n\n\n\t// View Instantiation\n\t// -----------------------------------------------------------------------------------\n\n\n\t// Given a view name for a custom view or a standard view, creates a ready-to-go View object\n\tfunction instantiateView(viewType) {\n\t\tvar spec = getViewSpec(viewType);\n\n\t\treturn new spec['class'](t, spec.options, viewType);\n\t}\n\n\n\t// Gets information about how to create a view\n\tfunction getViewSpec(requestedViewType) {\n\t\tvar allDefaultButtonText = options.defaultButtonText || {};\n\t\tvar allButtonText = options.buttonText || {};\n\t\tvar hash = options.views || {}; // the `views` option object\n\t\tvar viewType = requestedViewType;\n\t\tvar viewOptionsChain = [];\n\t\tvar viewOptions;\n\t\tvar viewClass;\n\t\tvar duration, unit, unitIsSingle = false;\n\t\tvar buttonText;\n\n\t\tif (viewSpecCache[requestedViewType]) {\n\t\t\treturn viewSpecCache[requestedViewType];\n\t\t}\n\n\t\tfunction processSpecInput(input) {\n\t\t\tif (typeof input === 'function') {\n\t\t\t\tviewClass = input;\n\t\t\t}\n\t\t\telse if (typeof input === 'object') {\n\t\t\t\t$.extend(viewOptions, input);\n\t\t\t}\n\t\t}\n\n\t\t// iterate up a view's spec ancestor chain util we find a class to instantiate\n\t\twhile (viewType && !viewClass) {\n\t\t\tviewOptions = {}; // only for this specific view in the ancestry\n\t\t\tprocessSpecInput(fcViews[viewType]); // $.fullCalendar.views, lower precedence\n\t\t\tprocessSpecInput(hash[viewType]); // options at initialization, higher precedence\n\t\t\tviewOptionsChain.unshift(viewOptions); // record older ancestors first\n\t\t\tviewType = viewOptions.type;\n\t\t}\n\n\t\tviewOptionsChain.unshift({}); // jQuery's extend needs at least one arg\n\t\tviewOptions = $.extend.apply($, viewOptionsChain); // combine all, newer ancestors overwritting old\n\n\t\tif (viewClass) {\n\n\t\t\tduration = viewOptions.duration || viewClass.duration;\n\t\t\tif (duration) {\n\t\t\t\tduration = moment.duration(duration);\n\t\t\t\tunit = computeIntervalUnit(duration);\n\t\t\t\tunitIsSingle = computeIntervalAs(unit, duration) === 1;\n\t\t\t}\n\n\t\t\t// options that are specified per the view's duration, like \"week\" or \"day\"\n\t\t\tif (unitIsSingle && hash[unit]) {\n\t\t\t\tviewOptions = $.extend({}, hash[unit], viewOptions); // lowest priority\n\t\t\t}\n\n\t\t\t// compute the final text for the button representing this view\n\t\t\tbuttonText =\n\t\t\t\tallButtonText[requestedViewType] || // init options, like \"agendaWeek\"\n\t\t\t\t(unitIsSingle ? allButtonText[unit] : null) || // init options, like \"week\"\n\t\t\t\tallDefaultButtonText[requestedViewType] || // lang data, like \"agendaWeek\"\n\t\t\t\t(unitIsSingle ? allDefaultButtonText[unit] : null) || // lang data, like \"week\"\n\t\t\t\tviewOptions.buttonText ||\n\t\t\t\tviewClass.buttonText ||\n\t\t\t\t(duration ? humanizeDuration(duration) : null) ||\n\t\t\t\trequestedViewType;\n\n\t\t\treturn (viewSpecCache[requestedViewType] = {\n\t\t\t\t'class': viewClass,\n\t\t\t\toptions: viewOptions,\n\t\t\t\tbuttonText: buttonText\n\t\t\t});\n\t\t}\n\t}\n\n\n\t// Returns a boolean about whether the view is okay to instantiate at some point\n\tfunction isValidViewType(viewType) {\n\t\treturn Boolean(getViewSpec(viewType));\n\t}\n\n\n\t// Gets the text that should be displayed on a view's button in the header\n\tfunction getViewButtonText(viewType) {\n\t\tvar spec = getViewSpec(viewType);\n\n\t\tif (spec) {\n\t\t\treturn spec.buttonText;\n\t\t}\n\t}\n\t\n\t\n\n\t// Resizing\n\t// -----------------------------------------------------------------------------------\n\n\n\tt.getSuggestedViewHeight = function() {\n\t\tif (suggestedViewHeight === undefined) {\n\t\t\tcalcSize();\n\t\t}\n\t\treturn suggestedViewHeight;\n\t};\n\n\n\tt.isHeightAuto = function() {\n\t\treturn options.contentHeight === 'auto' || options.height === 'auto';\n\t};\n\t\n\t\n\tfunction updateSize(shouldRecalc) {\n\t\tif (elementVisible()) {\n\n\t\t\tif (shouldRecalc) {\n\t\t\t\t_calcSize();\n\t\t\t}\n\n\t\t\tignoreWindowResize++;\n\t\t\tcurrentView.updateSize(true); // isResize=true. will poll getSuggestedViewHeight() and isHeightAuto()\n\t\t\tignoreWindowResize--;\n\n\t\t\treturn true; // signal success\n\t\t}\n\t}\n\n\n\tfunction calcSize() {\n\t\tif (elementVisible()) {\n\t\t\t_calcSize();\n\t\t}\n\t}\n\t\n\t\n\tfunction _calcSize() { // assumes elementVisible\n\t\tif (typeof options.contentHeight === 'number') { // exists and not 'auto'\n\t\t\tsuggestedViewHeight = options.contentHeight;\n\t\t}\n\t\telse if (typeof options.height === 'number') { // exists and not 'auto'\n\t\t\tsuggestedViewHeight = options.height - (headerElement ? headerElement.outerHeight(true) : 0);\n\t\t}\n\t\telse {\n\t\t\tsuggestedViewHeight = Math.round(content.width() / Math.max(options.aspectRatio, .5));\n\t\t}\n\t}\n\t\n\t\n\tfunction windowResize(ev) {\n\t\tif (\n\t\t\t!ignoreWindowResize &&\n\t\t\tev.target === window && // so we don't process jqui \"resize\" events that have bubbled up\n\t\t\tcurrentView.start // view has already been rendered\n\t\t) {\n\t\t\tif (updateSize(true)) {\n\t\t\t\tcurrentView.trigger('windowResize', _element);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t\n\t/* Event Fetching/Rendering\n\t-----------------------------------------------------------------------------*/\n\t// TODO: going forward, most of this stuff should be directly handled by the view\n\n\n\tfunction refetchEvents() { // can be called as an API method\n\t\tdestroyEvents(); // so that events are cleared before user starts waiting for AJAX\n\t\tfetchAndRenderEvents();\n\t}\n\n\n\tfunction renderEvents() { // destroys old events if previously rendered\n\t\tif (elementVisible()) {\n\t\t\tfreezeContentHeight();\n\t\t\tcurrentView.destroyViewEvents(); // no performance cost if never rendered\n\t\t\tcurrentView.renderViewEvents(events);\n\t\t\tunfreezeContentHeight();\n\t\t}\n\t}\n\n\n\tfunction destroyEvents() {\n\t\tfreezeContentHeight();\n\t\tcurrentView.destroyViewEvents();\n\t\tunfreezeContentHeight();\n\t}\n\t\n\n\tfunction getAndRenderEvents() {\n\t\tif (!options.lazyFetching || isFetchNeeded(currentView.start, currentView.end)) {\n\t\t\tfetchAndRenderEvents();\n\t\t}\n\t\telse {\n\t\t\trenderEvents();\n\t\t}\n\t}\n\n\n\tfunction fetchAndRenderEvents() {\n\t\tfetchEvents(currentView.start, currentView.end);\n\t\t\t// ... will call reportEvents\n\t\t\t// ... which will call renderEvents\n\t}\n\n\t\n\t// called when event data arrives\n\tfunction reportEvents(_events) {\n\t\tevents = _events;\n\t\trenderEvents();\n\t}\n\n\n\t// called when a single event's data has been changed\n\tfunction reportEventChange() {\n\t\trenderEvents();\n\t}\n\n\n\n\t/* Header Updating\n\t-----------------------------------------------------------------------------*/\n\n\n\tfunction updateTitle() {\n\t\theader.updateTitle(currentView.computeTitle());\n\t}\n\n\n\tfunction updateTodayButton() {\n\t\tvar now = t.getNow();\n\t\tif (now.isWithin(currentView.intervalStart, currentView.intervalEnd)) {\n\t\t\theader.disableButton('today');\n\t\t}\n\t\telse {\n\t\t\theader.enableButton('today');\n\t\t}\n\t}\n\t\n\n\n\t/* Selection\n\t-----------------------------------------------------------------------------*/\n\t\n\n\tfunction select(start, end) {\n\n\t\tstart = t.moment(start);\n\t\tif (end) {\n\t\t\tend = t.moment(end);\n\t\t}\n\t\telse if (start.hasTime()) {\n\t\t\tend = start.clone().add(t.defaultTimedEventDuration);\n\t\t}\n\t\telse {\n\t\t\tend = start.clone().add(t.defaultAllDayEventDuration);\n\t\t}\n\n\t\tcurrentView.select({ start: start, end: end }); // accepts a range\n\t}\n\t\n\n\tfunction unselect() { // safe to be called before renderView\n\t\tif (currentView) {\n\t\t\tcurrentView.unselect();\n\t\t}\n\t}\n\t\n\t\n\t\n\t/* Date\n\t-----------------------------------------------------------------------------*/\n\t\n\t\n\tfunction prev() {\n\t\trenderView(-1);\n\t}\n\t\n\t\n\tfunction next() {\n\t\trenderView(1);\n\t}\n\t\n\t\n\tfunction prevYear() {\n\t\tdate.add(-1, 'years');\n\t\trenderView();\n\t}\n\t\n\t\n\tfunction nextYear() {\n\t\tdate.add(1, 'years');\n\t\trenderView();\n\t}\n\t\n\t\n\tfunction today() {\n\t\tdate = t.getNow();\n\t\trenderView();\n\t}\n\t\n\t\n\tfunction gotoDate(dateInput) {\n\t\tdate = t.moment(dateInput);\n\t\trenderView();\n\t}\n\t\n\t\n\tfunction incrementDate(delta) {\n\t\tdate.add(moment.duration(delta));\n\t\trenderView();\n\t}\n\n\n\t// Forces navigation to a view for the given date.\n\t// `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\n\tfunction zoomTo(newDate, viewType) {\n\t\tvar viewStr;\n\t\tvar match;\n\n\t\tif (!viewType || !isValidViewType(viewType)) { // a general view name, or \"auto\"\n\t\t\tviewType = viewType || 'day';\n\t\t\tviewStr = header.getViewsWithButtons().join(' '); // space-separated string of all the views in the header\n\n\t\t\t// try to match a general view name, like \"week\", against a specific one, like \"agendaWeek\"\n\t\t\tmatch = viewStr.match(new RegExp('\\\\w+' + capitaliseFirstLetter(viewType)));\n\n\t\t\t// fall back to the day view being used in the header\n\t\t\tif (!match) {\n\t\t\t\tmatch = viewStr.match(/\\w+Day/);\n\t\t\t}\n\n\t\t\tviewType = match ? match[0] : 'agendaDay'; // fall back to agendaDay\n\t\t}\n\n\t\tdate = newDate;\n\t\tchangeView(viewType);\n\t}\n\t\n\t\n\tfunction getDate() {\n\t\treturn date.clone();\n\t}\n\n\n\n\t/* Height \"Freezing\"\n\t-----------------------------------------------------------------------------*/\n\n\n\tfunction freezeContentHeight() {\n\t\tcontent.css({\n\t\t\twidth: '100%',\n\t\t\theight: content.height(),\n\t\t\toverflow: 'hidden'\n\t\t});\n\t}\n\n\n\tfunction unfreezeContentHeight() {\n\t\tcontent.css({\n\t\t\twidth: '',\n\t\t\theight: '',\n\t\t\toverflow: ''\n\t\t});\n\t}\n\t\n\t\n\t\n\t/* Misc\n\t-----------------------------------------------------------------------------*/\n\t\n\n\tfunction getCalendar() {\n\t\treturn t;\n\t}\n\n\t\n\tfunction getView() {\n\t\treturn currentView;\n\t}\n\t\n\t\n\tfunction option(name, value) {\n\t\tif (value === undefined) {\n\t\t\treturn options[name];\n\t\t}\n\t\tif (name == 'height' || name == 'contentHeight' || name == 'aspectRatio') {\n\t\t\toptions[name] = value;\n\t\t\tupdateSize(true); // true = allow recalculation of height\n\t\t}\n\t}\n\t\n\t\n\tfunction trigger(name, thisObj) {\n\t\tif (options[name]) {\n\t\t\treturn options[name].apply(\n\t\t\t\tthisObj || _element,\n\t\t\t\tArray.prototype.slice.call(arguments, 2)\n\t\t\t);\n\t\t}\n\t}\n\n}\n\n    /* Top toolbar area with buttons and title\n----------------------------------------------------------------------------------------------------------------------*/\n// TODO: rename all header-related things to \"toolbar\"\n\nfunction Header(calendar, options) {\n\tvar t = this;\n\t\n\t// exports\n\tt.render = render;\n\tt.destroy = destroy;\n\tt.updateTitle = updateTitle;\n\tt.activateButton = activateButton;\n\tt.deactivateButton = deactivateButton;\n\tt.disableButton = disableButton;\n\tt.enableButton = enableButton;\n\tt.getViewsWithButtons = getViewsWithButtons;\n\t\n\t// locals\n\tvar el = $();\n\tvar viewsWithButtons = [];\n\tvar tm;\n\n\n\tfunction render() {\n\t\tvar sections = options.header;\n\n\t\ttm = options.theme ? 'ui' : 'fc';\n\n\t\tif (sections) {\n\t\t\tel = $(\"<div class='fc-toolbar'/>\")\n\t\t\t\t.append(renderSection('left'))\n\t\t\t\t.append(renderSection('right'))\n\t\t\t\t.append(renderSection('center'))\n\t\t\t\t.append('<div class=\"fc-clear\"/>');\n\n\t\t\treturn el;\n\t\t}\n\t}\n\t\n\t\n\tfunction destroy() {\n\t\tel.remove();\n\t}\n\t\n\t\n\tfunction renderSection(position) {\n\t\tvar sectionEl = $('<div class=\"fc-' + position + '\"/>');\n\t\tvar buttonStr = options.header[position];\n\n\t\tif (buttonStr) {\n\t\t\t$.each(buttonStr.split(' '), function(i) {\n\t\t\t\tvar groupChildren = $();\n\t\t\t\tvar isOnlyButtons = true;\n\t\t\t\tvar groupEl;\n\n\t\t\t\t$.each(this.split(','), function(j, buttonName) {\n\t\t\t\t\tvar buttonClick;\n\t\t\t\t\tvar themeIcon;\n\t\t\t\t\tvar normalIcon;\n\t\t\t\t\tvar defaultText;\n\t\t\t\t\tvar viewText; // highest priority\n\t\t\t\t\tvar customText;\n\t\t\t\t\tvar innerHtml;\n\t\t\t\t\tvar classes;\n\t\t\t\t\tvar button;\n\n\t\t\t\t\tif (buttonName == 'title') {\n\t\t\t\t\t\tgroupChildren = groupChildren.add($('<h2>&nbsp;</h2>')); // we always want it to take up height\n\t\t\t\t\t\tisOnlyButtons = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (calendar[buttonName]) { // a calendar method\n\t\t\t\t\t\t\tbuttonClick = function() {\n\t\t\t\t\t\t\t\tcalendar[buttonName]();\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (calendar.isValidViewType(buttonName)) { // a view type\n\t\t\t\t\t\t\tbuttonClick = function() {\n\t\t\t\t\t\t\t\tcalendar.changeView(buttonName);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tviewsWithButtons.push(buttonName);\n\t\t\t\t\t\t\tviewText = calendar.getViewButtonText(buttonName);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (buttonClick) {\n\n\t\t\t\t\t\t\t// smartProperty allows different text per view button (ex: \"Agenda Week\" vs \"Basic Week\")\n\t\t\t\t\t\t\tthemeIcon = smartProperty(options.themeButtonIcons, buttonName);\n\t\t\t\t\t\t\tnormalIcon = smartProperty(options.buttonIcons, buttonName);\n\t\t\t\t\t\t\tdefaultText = smartProperty(options.defaultButtonText, buttonName); // from languages\n\t\t\t\t\t\t\tcustomText = smartProperty(options.buttonText, buttonName);\n\n\t\t\t\t\t\t\tif (viewText || customText) {\n\t\t\t\t\t\t\t\tinnerHtml = htmlEscape(viewText || customText);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (themeIcon && options.theme) {\n\t\t\t\t\t\t\t\tinnerHtml = \"<span class='ui-icon ui-icon-\" + themeIcon + \"'></span>\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (normalIcon && !options.theme) {\n\t\t\t\t\t\t\t\tinnerHtml = \"<span class='fc-icon fc-icon-\" + normalIcon + \"'></span>\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tinnerHtml = htmlEscape(defaultText || buttonName);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tclasses = [\n\t\t\t\t\t\t\t\t'fc-' + buttonName + '-button',\n\t\t\t\t\t\t\t\ttm + '-button',\n\t\t\t\t\t\t\t\ttm + '-state-default'\n\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tbutton = $( // type=\"button\" so that it doesn't submit a form\n\t\t\t\t\t\t\t\t'<button type=\"button\" class=\"' + classes.join(' ') + '\">' +\n\t\t\t\t\t\t\t\t\tinnerHtml +\n\t\t\t\t\t\t\t\t'</button>'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.click(function() {\n\t\t\t\t\t\t\t\t\t// don't process clicks for disabled buttons\n\t\t\t\t\t\t\t\t\tif (!button.hasClass(tm + '-state-disabled')) {\n\n\t\t\t\t\t\t\t\t\t\tbuttonClick();\n\n\t\t\t\t\t\t\t\t\t\t// after the click action, if the button becomes the \"active\" tab, or disabled,\n\t\t\t\t\t\t\t\t\t\t// it should never have a hover class, so remove it now.\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tbutton.hasClass(tm + '-state-active') ||\n\t\t\t\t\t\t\t\t\t\t\tbutton.hasClass(tm + '-state-disabled')\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tbutton.removeClass(tm + '-state-hover');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.mousedown(function() {\n\t\t\t\t\t\t\t\t\t// the *down* effect (mouse pressed in).\n\t\t\t\t\t\t\t\t\t// only on buttons that are not the \"active\" tab, or disabled\n\t\t\t\t\t\t\t\t\tbutton\n\t\t\t\t\t\t\t\t\t\t.not('.' + tm + '-state-active')\n\t\t\t\t\t\t\t\t\t\t.not('.' + tm + '-state-disabled')\n\t\t\t\t\t\t\t\t\t\t.addClass(tm + '-state-down');\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.mouseup(function() {\n\t\t\t\t\t\t\t\t\t// undo the *down* effect\n\t\t\t\t\t\t\t\t\tbutton.removeClass(tm + '-state-down');\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.hover(\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\t// the *hover* effect.\n\t\t\t\t\t\t\t\t\t\t// only on buttons that are not the \"active\" tab, or disabled\n\t\t\t\t\t\t\t\t\t\tbutton\n\t\t\t\t\t\t\t\t\t\t\t.not('.' + tm + '-state-active')\n\t\t\t\t\t\t\t\t\t\t\t.not('.' + tm + '-state-disabled')\n\t\t\t\t\t\t\t\t\t\t\t.addClass(tm + '-state-hover');\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\t// undo the *hover* effect\n\t\t\t\t\t\t\t\t\t\tbutton\n\t\t\t\t\t\t\t\t\t\t\t.removeClass(tm + '-state-hover')\n\t\t\t\t\t\t\t\t\t\t\t.removeClass(tm + '-state-down'); // if mouseleave happens before mouseup\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tgroupChildren = groupChildren.add(button);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (isOnlyButtons) {\n\t\t\t\t\tgroupChildren\n\t\t\t\t\t\t.first().addClass(tm + '-corner-left').end()\n\t\t\t\t\t\t.last().addClass(tm + '-corner-right').end();\n\t\t\t\t}\n\n\t\t\t\tif (groupChildren.length > 1) {\n\t\t\t\t\tgroupEl = $('<div/>');\n\t\t\t\t\tif (isOnlyButtons) {\n\t\t\t\t\t\tgroupEl.addClass('fc-button-group');\n\t\t\t\t\t}\n\t\t\t\t\tgroupEl.append(groupChildren);\n\t\t\t\t\tsectionEl.append(groupEl);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsectionEl.append(groupChildren); // 1 or 0 children\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn sectionEl;\n\t}\n\t\n\t\n\tfunction updateTitle(text) {\n\t\tel.find('h2').text(text);\n\t}\n\t\n\t\n\tfunction activateButton(buttonName) {\n\t\tel.find('.fc-' + buttonName + '-button')\n\t\t\t.addClass(tm + '-state-active');\n\t}\n\t\n\t\n\tfunction deactivateButton(buttonName) {\n\t\tel.find('.fc-' + buttonName + '-button')\n\t\t\t.removeClass(tm + '-state-active');\n\t}\n\t\n\t\n\tfunction disableButton(buttonName) {\n\t\tel.find('.fc-' + buttonName + '-button')\n\t\t\t.attr('disabled', 'disabled')\n\t\t\t.addClass(tm + '-state-disabled');\n\t}\n\t\n\t\n\tfunction enableButton(buttonName) {\n\t\tel.find('.fc-' + buttonName + '-button')\n\t\t\t.removeAttr('disabled')\n\t\t\t.removeClass(tm + '-state-disabled');\n\t}\n\n\n\tfunction getViewsWithButtons() {\n\t\treturn viewsWithButtons;\n\t}\n\n}\n\n    fc.sourceNormalizers = [];\nfc.sourceFetchers = [];\n\nvar ajaxDefaults = {\n\tdataType: 'json',\n\tcache: false\n};\n\nvar eventGUID = 1;\n\n\nfunction EventManager(options) { // assumed to be a calendar\n\tvar t = this;\n\t\n\t\n\t// exports\n\tt.isFetchNeeded = isFetchNeeded;\n\tt.fetchEvents = fetchEvents;\n\tt.addEventSource = addEventSource;\n\tt.removeEventSource = removeEventSource;\n\tt.updateEvent = updateEvent;\n\tt.renderEvent = renderEvent;\n\tt.removeEvents = removeEvents;\n\tt.clientEvents = clientEvents;\n\tt.mutateEvent = mutateEvent;\n\tt.normalizeEventDateProps = normalizeEventDateProps;\n\tt.ensureVisibleEventRange = ensureVisibleEventRange;\n\t\n\t\n\t// imports\n\tvar trigger = t.trigger;\n\tvar getView = t.getView;\n\tvar reportEvents = t.reportEvents;\n\t\n\t\n\t// locals\n\tvar stickySource = { events: [] };\n\tvar sources = [ stickySource ];\n\tvar rangeStart, rangeEnd;\n\tvar currentFetchID = 0;\n\tvar pendingSourceCnt = 0;\n\tvar loadingLevel = 0;\n\tvar cache = []; // holds events that have already been expanded\n\n\n\t$.each(\n\t\t(options.events ? [ options.events ] : []).concat(options.eventSources || []),\n\t\tfunction(i, sourceInput) {\n\t\t\tvar source = buildEventSource(sourceInput);\n\t\t\tif (source) {\n\t\t\t\tsources.push(source);\n\t\t\t}\n\t\t}\n\t);\n\t\n\t\n\t\n\t/* Fetching\n\t-----------------------------------------------------------------------------*/\n\t\n\t\n\tfunction isFetchNeeded(start, end) {\n\t\treturn !rangeStart || // nothing has been fetched yet?\n\t\t\t// or, a part of the new range is outside of the old range? (after normalizing)\n\t\t\tstart.clone().stripZone() < rangeStart.clone().stripZone() ||\n\t\t\tend.clone().stripZone() > rangeEnd.clone().stripZone();\n\t}\n\t\n\t\n\tfunction fetchEvents(start, end) {\n\t\trangeStart = start;\n\t\trangeEnd = end;\n\t\tcache = [];\n\t\tvar fetchID = ++currentFetchID;\n\t\tvar len = sources.length;\n\t\tpendingSourceCnt = len;\n\t\tfor (var i=0; i<len; i++) {\n\t\t\tfetchEventSource(sources[i], fetchID);\n\t\t}\n\t}\n\t\n\t\n\tfunction fetchEventSource(source, fetchID) {\n\t\t_fetchEventSource(source, function(eventInputs) {\n\t\t\tvar isArraySource = $.isArray(source.events);\n\t\t\tvar i, eventInput;\n\t\t\tvar abstractEvent;\n\n\t\t\tif (fetchID == currentFetchID) {\n\n\t\t\t\tif (eventInputs) {\n\t\t\t\t\tfor (i = 0; i < eventInputs.length; i++) {\n\t\t\t\t\t\teventInput = eventInputs[i];\n\n\t\t\t\t\t\tif (isArraySource) { // array sources have already been convert to Event Objects\n\t\t\t\t\t\t\tabstractEvent = eventInput;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tabstractEvent = buildEventFromInput(eventInput, source);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (abstractEvent) { // not false (an invalid event)\n\t\t\t\t\t\t\tcache.push.apply(\n\t\t\t\t\t\t\t\tcache,\n\t\t\t\t\t\t\t\texpandEvent(abstractEvent) // add individual expanded events to the cache\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpendingSourceCnt--;\n\t\t\t\tif (!pendingSourceCnt) {\n\t\t\t\t\treportEvents(cache);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t\n\t\n\tfunction _fetchEventSource(source, callback) {\n\t\tvar i;\n\t\tvar fetchers = fc.sourceFetchers;\n\t\tvar res;\n\n\t\tfor (i=0; i<fetchers.length; i++) {\n\t\t\tres = fetchers[i].call(\n\t\t\t\tt, // this, the Calendar object\n\t\t\t\tsource,\n\t\t\t\trangeStart.clone(),\n\t\t\t\trangeEnd.clone(),\n\t\t\t\toptions.timezone,\n\t\t\t\tcallback\n\t\t\t);\n\n\t\t\tif (res === true) {\n\t\t\t\t// the fetcher is in charge. made its own async request\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (typeof res == 'object') {\n\t\t\t\t// the fetcher returned a new source. process it\n\t\t\t\t_fetchEventSource(res, callback);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tvar events = source.events;\n\t\tif (events) {\n\t\t\tif ($.isFunction(events)) {\n\t\t\t\tpushLoading();\n\t\t\t\tevents.call(\n\t\t\t\t\tt, // this, the Calendar object\n\t\t\t\t\trangeStart.clone(),\n\t\t\t\t\trangeEnd.clone(),\n\t\t\t\t\toptions.timezone,\n\t\t\t\t\tfunction(events) {\n\t\t\t\t\t\tcallback(events);\n\t\t\t\t\t\tpopLoading();\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t\telse if ($.isArray(events)) {\n\t\t\t\tcallback(events);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}else{\n\t\t\tvar url = source.url;\n\t\t\tif (url) {\n\t\t\t\tvar success = source.success;\n\t\t\t\tvar error = source.error;\n\t\t\t\tvar complete = source.complete;\n\n\t\t\t\t// retrieve any outbound GET/POST $.ajax data from the options\n\t\t\t\tvar customData;\n\t\t\t\tif ($.isFunction(source.data)) {\n\t\t\t\t\t// supplied as a function that returns a key/value object\n\t\t\t\t\tcustomData = source.data();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// supplied as a straight key/value object\n\t\t\t\t\tcustomData = source.data;\n\t\t\t\t}\n\n\t\t\t\t// use a copy of the custom data so we can modify the parameters\n\t\t\t\t// and not affect the passed-in object.\n\t\t\t\tvar data = $.extend({}, customData || {});\n\n\t\t\t\tvar startParam = firstDefined(source.startParam, options.startParam);\n\t\t\t\tvar endParam = firstDefined(source.endParam, options.endParam);\n\t\t\t\tvar timezoneParam = firstDefined(source.timezoneParam, options.timezoneParam);\n\n\t\t\t\tif (startParam) {\n\t\t\t\t\tdata[startParam] = rangeStart.format();\n\t\t\t\t}\n\t\t\t\tif (endParam) {\n\t\t\t\t\tdata[endParam] = rangeEnd.format();\n\t\t\t\t}\n\t\t\t\tif (options.timezone && options.timezone != 'local') {\n\t\t\t\t\tdata[timezoneParam] = options.timezone;\n\t\t\t\t}\n\n\t\t\t\tpushLoading();\n\t\t\t\t$.ajax($.extend({}, ajaxDefaults, source, {\n\t\t\t\t\tdata: data,\n\t\t\t\t\tsuccess: function(events) {\n\t\t\t\t\t\tevents = events || [];\n\t\t\t\t\t\tvar res = applyAll(success, this, arguments);\n\t\t\t\t\t\tif ($.isArray(res)) {\n\t\t\t\t\t\t\tevents = res;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallback(events);\n\t\t\t\t\t},\n\t\t\t\t\terror: function() {\n\t\t\t\t\t\tapplyAll(error, this, arguments);\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t},\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tapplyAll(complete, this, arguments);\n\t\t\t\t\t\tpopLoading();\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}else{\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t\n\t/* Sources\n\t-----------------------------------------------------------------------------*/\n\t\n\n\tfunction addEventSource(sourceInput) {\n\t\tvar source = buildEventSource(sourceInput);\n\t\tif (source) {\n\t\t\tsources.push(source);\n\t\t\tpendingSourceCnt++;\n\t\t\tfetchEventSource(source, currentFetchID); // will eventually call reportEvents\n\t\t}\n\t}\n\n\n\tfunction buildEventSource(sourceInput) { // will return undefined if invalid source\n\t\tvar normalizers = fc.sourceNormalizers;\n\t\tvar source;\n\t\tvar i;\n\n\t\tif ($.isFunction(sourceInput) || $.isArray(sourceInput)) {\n\t\t\tsource = { events: sourceInput };\n\t\t}\n\t\telse if (typeof sourceInput === 'string') {\n\t\t\tsource = { url: sourceInput };\n\t\t}\n\t\telse if (typeof sourceInput === 'object') {\n\t\t\tsource = $.extend({}, sourceInput); // shallow copy\n\t\t}\n\n\t\tif (source) {\n\n\t\t\t// TODO: repeat code, same code for event classNames\n\t\t\tif (source.className) {\n\t\t\t\tif (typeof source.className === 'string') {\n\t\t\t\t\tsource.className = source.className.split(/\\s+/);\n\t\t\t\t}\n\t\t\t\t// otherwise, assumed to be an array\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsource.className = [];\n\t\t\t}\n\n\t\t\t// for array sources, we convert to standard Event Objects up front\n\t\t\tif ($.isArray(source.events)) {\n\t\t\t\tsource.origArray = source.events; // for removeEventSource\n\t\t\t\tsource.events = $.map(source.events, function(eventInput) {\n\t\t\t\t\treturn buildEventFromInput(eventInput, source);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (i=0; i<normalizers.length; i++) {\n\t\t\t\tnormalizers[i].call(t, source);\n\t\t\t}\n\n\t\t\treturn source;\n\t\t}\n\t}\n\n\n\tfunction removeEventSource(source) {\n\t\tsources = $.grep(sources, function(src) {\n\t\t\treturn !isSourcesEqual(src, source);\n\t\t});\n\t\t// remove all client events from that source\n\t\tcache = $.grep(cache, function(e) {\n\t\t\treturn !isSourcesEqual(e.source, source);\n\t\t});\n\t\treportEvents(cache);\n\t}\n\n\n\tfunction isSourcesEqual(source1, source2) {\n\t\treturn source1 && source2 && getSourcePrimitive(source1) == getSourcePrimitive(source2);\n\t}\n\n\n\tfunction getSourcePrimitive(source) {\n\t\treturn (\n\t\t\t(typeof source === 'object') ? // a normalized event source?\n\t\t\t\t(source.origArray || source.googleCalendarId || source.url || source.events) : // get the primitive\n\t\t\t\tnull\n\t\t) ||\n\t\tsource; // the given argument *is* the primitive\n\t}\n\t\n\t\n\t\n\t/* Manipulation\n\t-----------------------------------------------------------------------------*/\n\n\n\t// Only ever called from the externally-facing API\n\tfunction updateEvent(event) {\n\n\t\t// massage start/end values, even if date string values\n\t\tevent.start = t.moment(event.start);\n\t\tif (event.end) {\n\t\t\tevent.end = t.moment(event.end);\n\t\t}\n\t\telse {\n\t\t\tevent.end = null;\n\t\t}\n\n\t\tmutateEvent(event, getMiscEventProps(event)); // will handle start/end/allDay normalization\n\t\treportEvents(cache); // reports event modifications (so we can redraw)\n\t}\n\n\n\t// Returns a hash of misc event properties that should be copied over to related events.\n\tfunction getMiscEventProps(event) {\n\t\tvar props = {};\n\n\t\t$.each(event, function(name, val) {\n\t\t\tif (isMiscEventPropName(name)) {\n\t\t\t\tif (val !== undefined && isAtomic(val)) { // a defined non-object\n\t\t\t\t\tprops[name] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn props;\n\t}\n\n\t// non-date-related, non-id-related, non-secret\n\tfunction isMiscEventPropName(name) {\n\t\treturn !/^_|^(id|allDay|start|end)$/.test(name);\n\t}\n\n\t\n\t// returns the expanded events that were created\n\tfunction renderEvent(eventInput, stick) {\n\t\tvar abstractEvent = buildEventFromInput(eventInput);\n\t\tvar events;\n\t\tvar i, event;\n\n\t\tif (abstractEvent) { // not false (a valid input)\n\t\t\tevents = expandEvent(abstractEvent);\n\n\t\t\tfor (i = 0; i < events.length; i++) {\n\t\t\t\tevent = events[i];\n\n\t\t\t\tif (!event.source) {\n\t\t\t\t\tif (stick) {\n\t\t\t\t\t\tstickySource.events.push(event);\n\t\t\t\t\t\tevent.source = stickySource;\n\t\t\t\t\t}\n\t\t\t\t\tcache.push(event);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treportEvents(cache);\n\n\t\t\treturn events;\n\t\t}\n\n\t\treturn [];\n\t}\n\t\n\t\n\tfunction removeEvents(filter) {\n\t\tvar eventID;\n\t\tvar i;\n\n\t\tif (filter == null) { // null or undefined. remove all events\n\t\t\tfilter = function() { return true; }; // will always match\n\t\t}\n\t\telse if (!$.isFunction(filter)) { // an event ID\n\t\t\teventID = filter + '';\n\t\t\tfilter = function(event) {\n\t\t\t\treturn event._id == eventID;\n\t\t\t};\n\t\t}\n\n\t\t// Purge event(s) from our local cache\n\t\tcache = $.grep(cache, filter, true); // inverse=true\n\n\t\t// Remove events from array sources.\n\t\t// This works because they have been converted to official Event Objects up front.\n\t\t// (and as a result, event._id has been calculated).\n\t\tfor (i=0; i<sources.length; i++) {\n\t\t\tif ($.isArray(sources[i].events)) {\n\t\t\t\tsources[i].events = $.grep(sources[i].events, filter, true);\n\t\t\t}\n\t\t}\n\n\t\treportEvents(cache);\n\t}\n\t\n\t\n\tfunction clientEvents(filter) {\n\t\tif ($.isFunction(filter)) {\n\t\t\treturn $.grep(cache, filter);\n\t\t}\n\t\telse if (filter != null) { // not null, not undefined. an event ID\n\t\t\tfilter += '';\n\t\t\treturn $.grep(cache, function(e) {\n\t\t\t\treturn e._id == filter;\n\t\t\t});\n\t\t}\n\t\treturn cache; // else, return all\n\t}\n\t\n\t\n\t\n\t/* Loading State\n\t-----------------------------------------------------------------------------*/\n\t\n\t\n\tfunction pushLoading() {\n\t\tif (!(loadingLevel++)) {\n\t\t\ttrigger('loading', null, true, getView());\n\t\t}\n\t}\n\t\n\t\n\tfunction popLoading() {\n\t\tif (!(--loadingLevel)) {\n\t\t\ttrigger('loading', null, false, getView());\n\t\t}\n\t}\n\t\n\t\n\t\n\t/* Event Normalization\n\t-----------------------------------------------------------------------------*/\n\n\n\t// Given a raw object with key/value properties, returns an \"abstract\" Event object.\n\t// An \"abstract\" event is an event that, if recurring, will not have been expanded yet.\n\t// Will return `false` when input is invalid.\n\t// `source` is optional\n\tfunction buildEventFromInput(input, source) {\n\t\tvar out = {};\n\t\tvar start, end;\n\t\tvar allDay;\n\n\t\tif (options.eventDataTransform) {\n\t\t\tinput = options.eventDataTransform(input);\n\t\t}\n\t\tif (source && source.eventDataTransform) {\n\t\t\tinput = source.eventDataTransform(input);\n\t\t}\n\n\t\t// Copy all properties over to the resulting object.\n\t\t// The special-case properties will be copied over afterwards.\n\t\t$.extend(out, input);\n\n\t\tif (source) {\n\t\t\tout.source = source;\n\t\t}\n\n\t\tout._id = input._id || (input.id === undefined ? '_fc' + eventGUID++ : input.id + '');\n\n\t\tif (input.className) {\n\t\t\tif (typeof input.className == 'string') {\n\t\t\t\tout.className = input.className.split(/\\s+/);\n\t\t\t}\n\t\t\telse { // assumed to be an array\n\t\t\t\tout.className = input.className;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tout.className = [];\n\t\t}\n\n\t\tstart = input.start || input.date; // \"date\" is an alias for \"start\"\n\t\tend = input.end;\n\n\t\t// parse as a time (Duration) if applicable\n\t\tif (isTimeString(start)) {\n\t\t\tstart = moment.duration(start);\n\t\t}\n\t\tif (isTimeString(end)) {\n\t\t\tend = moment.duration(end);\n\t\t}\n\n\t\tif (input.dow || moment.isDuration(start) || moment.isDuration(end)) {\n\n\t\t\t// the event is \"abstract\" (recurring) so don't calculate exact start/end dates just yet\n\t\t\tout.start = start ? moment.duration(start) : null; // will be a Duration or null\n\t\t\tout.end = end ? moment.duration(end) : null; // will be a Duration or null\n\t\t\tout._recurring = true; // our internal marker\n\t\t}\n\t\telse {\n\n\t\t\tif (start) {\n\t\t\t\tstart = t.moment(start);\n\t\t\t\tif (!start.isValid()) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (end) {\n\t\t\t\tend = t.moment(end);\n\t\t\t\tif (!end.isValid()) {\n\t\t\t\t\tend = null; // let defaults take over\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tallDay = input.allDay;\n\t\t\tif (allDay === undefined) { // still undefined? fallback to default\n\t\t\t\tallDay = firstDefined(\n\t\t\t\t\tsource ? source.allDayDefault : undefined,\n\t\t\t\t\toptions.allDayDefault\n\t\t\t\t);\n\t\t\t\t// still undefined? normalizeEventDateProps will calculate it\n\t\t\t}\n\n\t\t\tassignDatesToEvent(start, end, allDay, out);\n\t\t}\n\n\t\treturn out;\n\t}\n\n\n\t// Normalizes and assigns the given dates to the given partially-formed event object.\n\t// NOTE: mutates the given start/end moments. does not make a copy.\n\tfunction assignDatesToEvent(start, end, allDay, event) {\n\t\tevent.start = start;\n\t\tevent.end = end;\n\t\tevent.allDay = allDay;\n\t\tnormalizeEventDateProps(event);\n\t\tbackupEventDates(event);\n\t}\n\n\n\t// Ensures the allDay property exists.\n\t// Ensures the start/end dates are consistent with allDay and forceEventDuration.\n\t// Accepts an Event object, or a plain object with event-ish properties.\n\t// NOTE: Will modify the given object.\n\tfunction normalizeEventDateProps(props) {\n\n\t\tif (props.allDay == null) {\n\t\t\tprops.allDay = !(props.start.hasTime() || (props.end && props.end.hasTime()));\n\t\t}\n\n\t\tif (props.allDay) {\n\t\t\tprops.start.stripTime();\n\t\t\tif (props.end) {\n\t\t\t\tprops.end.stripTime();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (!props.start.hasTime()) {\n\t\t\t\tprops.start = t.rezoneDate(props.start); // will also give it a 00:00 time\n\t\t\t}\n\t\t\tif (props.end && !props.end.hasTime()) {\n\t\t\t\tprops.end = t.rezoneDate(props.end); // will also give it a 00:00 time\n\t\t\t}\n\t\t}\n\n\t\tif (props.end && !props.end.isAfter(props.start)) {\n\t\t\tprops.end = null;\n\t\t}\n\n\t\tif (!props.end) {\n\t\t\tif (options.forceEventDuration) {\n\t\t\t\tprops.end = t.getDefaultEventEnd(props.allDay, props.start);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tprops.end = null;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// If `range` is a proper range with a start and end, returns the original object.\n\t// If missing an end, computes a new range with an end, computing it as if it were an event.\n\t// TODO: make this a part of the event -> eventRange system\n\tfunction ensureVisibleEventRange(range) {\n\t\tvar allDay;\n\n\t\tif (!range.end) {\n\n\t\t\tallDay = range.allDay; // range might be more event-ish than we think\n\t\t\tif (allDay == null) {\n\t\t\t\tallDay = !range.start.hasTime();\n\t\t\t}\n\n\t\t\trange = {\n\t\t\t\tstart: range.start,\n\t\t\t\tend: t.getDefaultEventEnd(allDay, range.start)\n\t\t\t};\n\t\t}\n\t\treturn range;\n\t}\n\n\n\t// If the given event is a recurring event, break it down into an array of individual instances.\n\t// If not a recurring event, return an array with the single original event.\n\t// If given a falsy input (probably because of a failed buildEventFromInput call), returns an empty array.\n\t// HACK: can override the recurring window by providing custom rangeStart/rangeEnd (for businessHours).\n\tfunction expandEvent(abstractEvent, _rangeStart, _rangeEnd) {\n\t\tvar events = [];\n\t\tvar dowHash;\n\t\tvar dow;\n\t\tvar i;\n\t\tvar date;\n\t\tvar startTime, endTime;\n\t\tvar start, end;\n\t\tvar event;\n\n\t\t_rangeStart = _rangeStart || rangeStart;\n\t\t_rangeEnd = _rangeEnd || rangeEnd;\n\n\t\tif (abstractEvent) {\n\t\t\tif (abstractEvent._recurring) {\n\n\t\t\t\t// make a boolean hash as to whether the event occurs on each day-of-week\n\t\t\t\tif ((dow = abstractEvent.dow)) {\n\t\t\t\t\tdowHash = {};\n\t\t\t\t\tfor (i = 0; i < dow.length; i++) {\n\t\t\t\t\t\tdowHash[dow[i]] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// iterate through every day in the current range\n\t\t\t\tdate = _rangeStart.clone().stripTime(); // holds the date of the current day\n\t\t\t\twhile (date.isBefore(_rangeEnd)) {\n\n\t\t\t\t\tif (!dowHash || dowHash[date.day()]) { // if everyday, or this particular day-of-week\n\n\t\t\t\t\t\tstartTime = abstractEvent.start; // the stored start and end properties are times (Durations)\n\t\t\t\t\t\tendTime = abstractEvent.end; // \"\n\t\t\t\t\t\tstart = date.clone();\n\t\t\t\t\t\tend = null;\n\n\t\t\t\t\t\tif (startTime) {\n\t\t\t\t\t\t\tstart = start.time(startTime);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (endTime) {\n\t\t\t\t\t\t\tend = date.clone().time(endTime);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tevent = $.extend({}, abstractEvent); // make a copy of the original\n\t\t\t\t\t\tassignDatesToEvent(\n\t\t\t\t\t\t\tstart, end,\n\t\t\t\t\t\t\t!startTime && !endTime, // allDay?\n\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t);\n\t\t\t\t\t\tevents.push(event);\n\t\t\t\t\t}\n\n\t\t\t\t\tdate.add(1, 'days');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tevents.push(abstractEvent); // return the original event. will be a one-item array\n\t\t\t}\n\t\t}\n\n\t\treturn events;\n\t}\n\n\n\n\t/* Event Modification Math\n\t-----------------------------------------------------------------------------------------*/\n\n\n\t// Modifies an event and all related events by applying the given properties.\n\t// Special date-diffing logic is used for manipulation of dates.\n\t// If `props` does not contain start/end dates, the updated values are assumed to be the event's current start/end.\n\t// All date comparisons are done against the event's pristine _start and _end dates.\n\t// Returns an object with delta information and a function to undo all operations.\n\t//\n\tfunction mutateEvent(event, props) {\n\t\tvar miscProps = {};\n\t\tvar clearEnd;\n\t\tvar dateDelta;\n\t\tvar durationDelta;\n\t\tvar undoFunc;\n\n\t\tprops = props || {};\n\n\t\t// ensure new date-related values to compare against\n\t\tif (!props.start) {\n\t\t\tprops.start = event.start.clone();\n\t\t}\n\t\tif (props.end === undefined) {\n\t\t\tprops.end = event.end ? event.end.clone() : null;\n\t\t}\n\t\tif (props.allDay == null) { // is null or undefined?\n\t\t\tprops.allDay = event.allDay;\n\t\t}\n\n\t\tnormalizeEventDateProps(props); // massages start/end/allDay\n\n\t\t// clear the end date if explicitly changed to null\n\t\tclearEnd = event._end !== null && props.end === null;\n\n\t\t// compute the delta for moving the start and end dates together\n\t\tif (props.allDay) {\n\t\t\tdateDelta = diffDay(props.start, event._start); // whole-day diff from start-of-day\n\t\t}\n\t\telse {\n\t\t\tdateDelta = diffDayTime(props.start, event._start);\n\t\t}\n\n\t\t// compute the delta for moving the end date (after applying dateDelta)\n\t\tif (!clearEnd && props.end) {\n\t\t\tdurationDelta = diffDayTime(\n\t\t\t\t// new duration\n\t\t\t\tprops.end,\n\t\t\t\tprops.start\n\t\t\t).subtract(diffDayTime(\n\t\t\t\t// subtract old duration\n\t\t\t\tevent._end || t.getDefaultEventEnd(event._allDay, event._start),\n\t\t\t\tevent._start\n\t\t\t));\n\t\t}\n\n\t\t// gather all non-date-related properties\n\t\t$.each(props, function(name, val) {\n\t\t\tif (isMiscEventPropName(name)) {\n\t\t\t\tif (val !== undefined) {\n\t\t\t\t\tmiscProps[name] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// apply the operations to the event and all related events\n\t\tundoFunc = mutateEvents(\n\t\t\tclientEvents(event._id), // get events with this ID\n\t\t\tclearEnd,\n\t\t\tprops.allDay,\n\t\t\tdateDelta,\n\t\t\tdurationDelta,\n\t\t\tmiscProps\n\t\t);\n\n\t\treturn {\n\t\t\tdateDelta: dateDelta,\n\t\t\tdurationDelta: durationDelta,\n\t\t\tundo: undoFunc\n\t\t};\n\t}\n\n\n\t// Modifies an array of events in the following ways (operations are in order):\n\t// - clear the event's `end`\n\t// - convert the event to allDay\n\t// - add `dateDelta` to the start and end\n\t// - add `durationDelta` to the event's duration\n\t// - assign `miscProps` to the event\n\t//\n\t// Returns a function that can be called to undo all the operations.\n\t//\n\t// TODO: don't use so many closures. possible memory issues when lots of events with same ID.\n\t//\n\tfunction mutateEvents(events, clearEnd, allDay, dateDelta, durationDelta, miscProps) {\n\t\tvar isAmbigTimezone = t.getIsAmbigTimezone();\n\t\tvar undoFunctions = [];\n\n\t\t// normalize zero-length deltas to be null\n\t\tif (dateDelta && !dateDelta.valueOf()) { dateDelta = null; }\n\t\tif (durationDelta && !durationDelta.valueOf()) { durationDelta = null; }\n\n\t\t$.each(events, function(i, event) {\n\t\t\tvar oldProps;\n\t\t\tvar newProps;\n\n\t\t\t// build an object holding all the old values, both date-related and misc.\n\t\t\t// for the undo function.\n\t\t\toldProps = {\n\t\t\t\tstart: event.start.clone(),\n\t\t\t\tend: event.end ? event.end.clone() : null,\n\t\t\t\tallDay: event.allDay\n\t\t\t};\n\t\t\t$.each(miscProps, function(name) {\n\t\t\t\toldProps[name] = event[name];\n\t\t\t});\n\n\t\t\t// new date-related properties. work off the original date snapshot.\n\t\t\t// ok to use references because they will be thrown away when backupEventDates is called.\n\t\t\tnewProps = {\n\t\t\t\tstart: event._start,\n\t\t\t\tend: event._end,\n\t\t\t\tallDay: event._allDay\n\t\t\t};\n\n\t\t\tif (clearEnd) {\n\t\t\t\tnewProps.end = null;\n\t\t\t}\n\n\t\t\tnewProps.allDay = allDay;\n\n\t\t\tnormalizeEventDateProps(newProps); // massages start/end/allDay\n\n\t\t\tif (dateDelta) {\n\t\t\t\tnewProps.start.add(dateDelta);\n\t\t\t\tif (newProps.end) {\n\t\t\t\t\tnewProps.end.add(dateDelta);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (durationDelta) {\n\t\t\t\tif (!newProps.end) {\n\t\t\t\t\tnewProps.end = t.getDefaultEventEnd(newProps.allDay, newProps.start);\n\t\t\t\t}\n\t\t\t\tnewProps.end.add(durationDelta);\n\t\t\t}\n\n\t\t\t// if the dates have changed, and we know it is impossible to recompute the\n\t\t\t// timezone offsets, strip the zone.\n\t\t\tif (\n\t\t\t\tisAmbigTimezone &&\n\t\t\t\t!newProps.allDay &&\n\t\t\t\t(dateDelta || durationDelta)\n\t\t\t) {\n\t\t\t\tnewProps.start.stripZone();\n\t\t\t\tif (newProps.end) {\n\t\t\t\t\tnewProps.end.stripZone();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$.extend(event, miscProps, newProps); // copy over misc props, then date-related props\n\t\t\tbackupEventDates(event); // regenerate internal _start/_end/_allDay\n\n\t\t\tundoFunctions.push(function() {\n\t\t\t\t$.extend(event, oldProps);\n\t\t\t\tbackupEventDates(event); // regenerate internal _start/_end/_allDay\n\t\t\t});\n\t\t});\n\n\t\treturn function() {\n\t\t\tfor (var i = 0; i < undoFunctions.length; i++) {\n\t\t\t\tundoFunctions[i]();\n\t\t\t}\n\t\t};\n\t}\n\n\n\t/* Business Hours\n\t-----------------------------------------------------------------------------------------*/\n\n\tt.getBusinessHoursEvents = getBusinessHoursEvents;\n\n\n\t// Returns an array of events as to when the business hours occur in the given view.\n\t// Abuse of our event system :(\n\tfunction getBusinessHoursEvents() {\n\t\tvar optionVal = options.businessHours;\n\t\tvar defaultVal = {\n\t\t\tclassName: 'fc-nonbusiness',\n\t\t\tstart: '09:00',\n\t\t\tend: '17:00',\n\t\t\tdow: [ 1, 2, 3, 4, 5 ], // monday - friday\n\t\t\trendering: 'inverse-background'\n\t\t};\n\t\tvar view = t.getView();\n\t\tvar eventInput;\n\n\t\tif (optionVal) {\n\t\t\tif (typeof optionVal === 'object') {\n\t\t\t\t// option value is an object that can override the default business hours\n\t\t\t\teventInput = $.extend({}, defaultVal, optionVal);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// option value is `true`. use default business hours\n\t\t\t\teventInput = defaultVal;\n\t\t\t}\n\t\t}\n\n\t\tif (eventInput) {\n\t\t\treturn expandEvent(\n\t\t\t\tbuildEventFromInput(eventInput),\n\t\t\t\tview.start,\n\t\t\t\tview.end\n\t\t\t);\n\t\t}\n\n\t\treturn [];\n\t}\n\n\n\t/* Overlapping / Constraining\n\t-----------------------------------------------------------------------------------------*/\n\n\tt.isEventRangeAllowed = isEventRangeAllowed;\n\tt.isSelectionRangeAllowed = isSelectionRangeAllowed;\n\tt.isExternalDropRangeAllowed = isExternalDropRangeAllowed;\n\n\n\tfunction isEventRangeAllowed(range, event) {\n\t\tvar source = event.source || {};\n\t\tvar constraint = firstDefined(\n\t\t\tevent.constraint,\n\t\t\tsource.constraint,\n\t\t\toptions.eventConstraint\n\t\t);\n\t\tvar overlap = firstDefined(\n\t\t\tevent.overlap,\n\t\t\tsource.overlap,\n\t\t\toptions.eventOverlap\n\t\t);\n\n\t\trange = ensureVisibleEventRange(range); // ensure a proper range with an end for isRangeAllowed\n\n\t\treturn isRangeAllowed(range, constraint, overlap, event);\n\t}\n\n\n\tfunction isSelectionRangeAllowed(range) {\n\t\treturn isRangeAllowed(range, options.selectConstraint, options.selectOverlap);\n\t}\n\n\n\t// when `eventProps` is defined, consider this an event.\n\t// `eventProps` can contain misc non-date-related info about the event.\n\tfunction isExternalDropRangeAllowed(range, eventProps) {\n\t\tvar eventInput;\n\t\tvar event;\n\n\t\t// note: very similar logic is in View's reportExternalDrop\n\t\tif (eventProps) {\n\t\t\teventInput = $.extend({}, eventProps, range);\n\t\t\tevent = expandEvent(buildEventFromInput(eventInput))[0];\n\t\t}\n\n\t\tif (event) {\n\t\t\treturn isEventRangeAllowed(range, event);\n\t\t}\n\t\telse { // treat it as a selection\n\n\t\t\trange = ensureVisibleEventRange(range); // ensure a proper range with an end for isSelectionRangeAllowed\n\n\t\t\treturn isSelectionRangeAllowed(range);\n\t\t}\n\t}\n\n\n\t// Returns true if the given range (caused by an event drop/resize or a selection) is allowed to exist\n\t// according to the constraint/overlap settings.\n\t// `event` is not required if checking a selection.\n\tfunction isRangeAllowed(range, constraint, overlap, event) {\n\t\tvar constraintEvents;\n\t\tvar anyContainment;\n\t\tvar i, otherEvent;\n\t\tvar otherOverlap;\n\n\t\t// normalize. fyi, we're normalizing in too many places :(\n\t\trange = {\n\t\t\tstart: range.start.clone().stripZone(),\n\t\t\tend: range.end.clone().stripZone()\n\t\t};\n\n\t\t// the range must be fully contained by at least one of produced constraint events\n\t\tif (constraint != null) {\n\n\t\t\t// not treated as an event! intermediate data structure\n\t\t\t// TODO: use ranges in the future\n\t\t\tconstraintEvents = constraintToEvents(constraint);\n\n\t\t\tanyContainment = false;\n\t\t\tfor (i = 0; i < constraintEvents.length; i++) {\n\t\t\t\tif (eventContainsRange(constraintEvents[i], range)) {\n\t\t\t\t\tanyContainment = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!anyContainment) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < cache.length; i++) { // loop all events and detect overlap\n\t\t\totherEvent = cache[i];\n\n\t\t\t// don't compare the event to itself or other related [repeating] events\n\t\t\tif (event && event._id === otherEvent._id) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// there needs to be an actual intersection before disallowing anything\n\t\t\tif (eventIntersectsRange(otherEvent, range)) {\n\n\t\t\t\t// evaluate overlap for the given range and short-circuit if necessary\n\t\t\t\tif (overlap === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\telse if (typeof overlap === 'function' && !overlap(otherEvent, event)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// if we are computing if the given range is allowable for an event, consider the other event's\n\t\t\t\t// EventObject-specific or Source-specific `overlap` property\n\t\t\t\tif (event) {\n\t\t\t\t\totherOverlap = firstDefined(\n\t\t\t\t\t\totherEvent.overlap,\n\t\t\t\t\t\t(otherEvent.source || {}).overlap\n\t\t\t\t\t\t// we already considered the global `eventOverlap`\n\t\t\t\t\t);\n\t\t\t\t\tif (otherOverlap === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof otherOverlap === 'function' && !otherOverlap(event, otherEvent)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\n\t// Given an event input from the API, produces an array of event objects. Possible event inputs:\n\t// 'businessHours'\n\t// An event ID (number or string)\n\t// An object with specific start/end dates or a recurring event (like what businessHours accepts)\n\tfunction constraintToEvents(constraintInput) {\n\n\t\tif (constraintInput === 'businessHours') {\n\t\t\treturn getBusinessHoursEvents();\n\t\t}\n\n\t\tif (typeof constraintInput === 'object') {\n\t\t\treturn expandEvent(buildEventFromInput(constraintInput));\n\t\t}\n\n\t\treturn clientEvents(constraintInput); // probably an ID\n\t}\n\n\n\t// Does the event's date range fully contain the given range?\n\t// start/end already assumed to have stripped zones :(\n\tfunction eventContainsRange(event, range) {\n\t\tvar eventStart = event.start.clone().stripZone();\n\t\tvar eventEnd = t.getEventEnd(event).stripZone();\n\n\t\treturn range.start >= eventStart && range.end <= eventEnd;\n\t}\n\n\n\t// Does the event's date range intersect with the given range?\n\t// start/end already assumed to have stripped zones :(\n\tfunction eventIntersectsRange(event, range) {\n\t\tvar eventStart = event.start.clone().stripZone();\n\t\tvar eventEnd = t.getEventEnd(event).stripZone();\n\n\t\treturn range.start < eventEnd && range.end > eventStart;\n\t}\n\n}\n\n\n// updates the \"backup\" properties, which are preserved in order to compute diffs later on.\nfunction backupEventDates(event) {\n\tevent._allDay = event.allDay;\n\tevent._start = event.start.clone();\n\tevent._end = event.end ? event.end.clone() : null;\n}\n\n    /* An abstract class for the \"basic\" views, as well as month view. Renders one or more rows of day cells.\n----------------------------------------------------------------------------------------------------------------------*/\n// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.\n// It is responsible for managing width/height.\n\nvar BasicView = fcViews.basic = View.extend({\n\n\tdayGrid: null, // the main subcomponent that does most of the heavy lifting\n\n\tdayNumbersVisible: false, // display day numbers on each day cell?\n\tweekNumbersVisible: false, // display week numbers along the side?\n\n\tweekNumberWidth: null, // width of all the week-number cells running down the side\n\n\theadRowEl: null, // the fake row element of the day-of-week header\n\n\n\tinitialize: function() {\n\t\tthis.dayGrid = new DayGrid(this);\n\t\tthis.coordMap = this.dayGrid.coordMap; // the view's date-to-cell mapping is identical to the subcomponent's\n\t},\n\n\n\t// Sets the display range and computes all necessary dates\n\tsetRange: function(range) {\n\t\tView.prototype.setRange.call(this, range); // call the super-method\n\n\t\tthis.dayGrid.breakOnWeeks = /year|month|week/.test(this.intervalUnit); // do before setRange\n\t\tthis.dayGrid.setRange(range);\n\t},\n\n\n\t// Compute the value to feed into setRange. Overrides superclass.\n\tcomputeRange: function(date) {\n\t\tvar range = View.prototype.computeRange.call(this, date); // get value from the super-method\n\n\t\t// year and month views should be aligned with weeks. this is already done for week\n\t\tif (/year|month/.test(range.intervalUnit)) {\n\t\t\trange.start.startOf('week');\n\t\t\trange.start = this.skipHiddenDays(range.start);\n\n\t\t\t// make end-of-week if not already\n\t\t\tif (range.end.weekday()) {\n\t\t\t\trange.end.add(1, 'week').startOf('week');\n\t\t\t\trange.end = this.skipHiddenDays(range.end, -1, true); // exclusively move backwards\n\t\t\t}\n\t\t}\n\n\t\treturn range;\n\t},\n\n\n\t// Renders the view into `this.el`, which should already be assigned\n\trender: function() {\n\n\t\tthis.dayNumbersVisible = this.dayGrid.rowCnt > 1; // TODO: make grid responsible\n\t\tthis.weekNumbersVisible = this.opt('weekNumbers');\n\t\tthis.dayGrid.numbersVisible = this.dayNumbersVisible || this.weekNumbersVisible;\n\n\t\tthis.el.addClass('fc-basic-view').html(this.renderHtml());\n\n\t\tthis.headRowEl = this.el.find('thead .fc-row');\n\n\t\tthis.scrollerEl = this.el.find('.fc-day-grid-container');\n\t\tthis.dayGrid.coordMap.containerEl = this.scrollerEl; // constrain clicks/etc to the dimensions of the scroller\n\n\t\tthis.dayGrid.el = this.el.find('.fc-day-grid');\n\t\tthis.dayGrid.render(this.hasRigidRows());\n\t},\n\n\n\t// Make subcomponents ready for cleanup\n\tdestroy: function() {\n\t\tthis.dayGrid.destroy();\n\t\tView.prototype.destroy.call(this); // call the super-method\n\t},\n\n\n\t// Builds the HTML skeleton for the view.\n\t// The day-grid component will render inside of a container defined by this HTML.\n\trenderHtml: function() {\n\t\treturn '' +\n\t\t\t'<table>' +\n\t\t\t\t'<thead>' +\n\t\t\t\t\t'<tr>' +\n\t\t\t\t\t\t'<td class=\"' + this.widgetHeaderClass + '\">' +\n\t\t\t\t\t\t\tthis.dayGrid.headHtml() + // render the day-of-week headers\n\t\t\t\t\t\t'</td>' +\n\t\t\t\t\t'</tr>' +\n\t\t\t\t'</thead>' +\n\t\t\t\t'<tbody>' +\n\t\t\t\t\t'<tr>' +\n\t\t\t\t\t\t'<td class=\"' + this.widgetContentClass + '\">' +\n\t\t\t\t\t\t\t'<div class=\"fc-day-grid-container\">' +\n\t\t\t\t\t\t\t\t'<div class=\"fc-day-grid\"/>' +\n\t\t\t\t\t\t\t'</div>' +\n\t\t\t\t\t\t'</td>' +\n\t\t\t\t\t'</tr>' +\n\t\t\t\t'</tbody>' +\n\t\t\t'</table>';\n\t},\n\n\n\t// Generates the HTML that will go before the day-of week header cells.\n\t// Queried by the DayGrid subcomponent when generating rows. Ordering depends on isRTL.\n\theadIntroHtml: function() {\n\t\tif (this.weekNumbersVisible) {\n\t\t\treturn '' +\n\t\t\t\t'<th class=\"fc-week-number ' + this.widgetHeaderClass + '\" ' + this.weekNumberStyleAttr() + '>' +\n\t\t\t\t\t'<span>' + // needed for matchCellWidths\n\t\t\t\t\t\thtmlEscape(this.opt('weekNumberTitle')) +\n\t\t\t\t\t'</span>' +\n\t\t\t\t'</th>';\n\t\t}\n\t},\n\n\n\t// Generates the HTML that will go before content-skeleton cells that display the day/week numbers.\n\t// Queried by the DayGrid subcomponent. Ordering depends on isRTL.\n\tnumberIntroHtml: function(row) {\n\t\tif (this.weekNumbersVisible) {\n\t\t\treturn '' +\n\t\t\t\t'<td class=\"fc-week-number\" ' + this.weekNumberStyleAttr() + '>' +\n\t\t\t\t\t'<span>' + // needed for matchCellWidths\n\t\t\t\t\t\tthis.calendar.calculateWeekNumber(this.dayGrid.getCell(row, 0).start) +\n\t\t\t\t\t'</span>' +\n\t\t\t\t'</td>';\n\t\t}\n\t},\n\n\n\t// Generates the HTML that goes before the day bg cells for each day-row.\n\t// Queried by the DayGrid subcomponent. Ordering depends on isRTL.\n\tdayIntroHtml: function() {\n\t\tif (this.weekNumbersVisible) {\n\t\t\treturn '<td class=\"fc-week-number ' + this.widgetContentClass + '\" ' +\n\t\t\t\tthis.weekNumberStyleAttr() + '></td>';\n\t\t}\n\t},\n\n\n\t// Generates the HTML that goes before every other type of row generated by DayGrid. Ordering depends on isRTL.\n\t// Affects helper-skeleton and highlight-skeleton rows.\n\tintroHtml: function() {\n\t\tif (this.weekNumbersVisible) {\n\t\t\treturn '<td class=\"fc-week-number\" ' + this.weekNumberStyleAttr() + '></td>';\n\t\t}\n\t},\n\n\n\t// Generates the HTML for the <td>s of the \"number\" row in the DayGrid's content skeleton.\n\t// The number row will only exist if either day numbers or week numbers are turned on.\n\tnumberCellHtml: function(cell) {\n\t\tvar date = cell.start;\n\t\tvar classes;\n\n\t\tif (!this.dayNumbersVisible) { // if there are week numbers but not day numbers\n\t\t\treturn '<td/>'; //  will create an empty space above events :(\n\t\t}\n\n\t\tclasses = this.dayGrid.getDayClasses(date);\n\t\tclasses.unshift('fc-day-number');\n\n\t\treturn '' +\n\t\t\t'<td class=\"' + classes.join(' ') + '\" data-date=\"' + date.format() + '\">' +\n\t\t\t\tdate.date() +\n\t\t\t'</td>';\n\t},\n\n\n\t// Generates an HTML attribute string for setting the width of the week number column, if it is known\n\tweekNumberStyleAttr: function() {\n\t\tif (this.weekNumberWidth !== null) {\n\t\t\treturn 'style=\"width:' + this.weekNumberWidth + 'px\"';\n\t\t}\n\t\treturn '';\n\t},\n\n\n\t// Determines whether each row should have a constant height\n\thasRigidRows: function() {\n\t\tvar eventLimit = this.opt('eventLimit');\n\t\treturn eventLimit && typeof eventLimit !== 'number';\n\t},\n\n\n\t/* Dimensions\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Refreshes the horizontal dimensions of the view\n\tupdateWidth: function() {\n\t\tif (this.weekNumbersVisible) {\n\t\t\t// Make sure all week number cells running down the side have the same width.\n\t\t\t// Record the width for cells created later.\n\t\t\tthis.weekNumberWidth = matchCellWidths(\n\t\t\t\tthis.el.find('.fc-week-number')\n\t\t\t);\n\t\t}\n\t},\n\n\n\t// Adjusts the vertical dimensions of the view to the specified values\n\tsetHeight: function(totalHeight, isAuto) {\n\t\tvar eventLimit = this.opt('eventLimit');\n\t\tvar scrollerHeight;\n\n\t\t// reset all heights to be natural\n\t\tunsetScroller(this.scrollerEl);\n\t\tuncompensateScroll(this.headRowEl);\n\n\t\tthis.dayGrid.destroySegPopover(); // kill the \"more\" popover if displayed\n\n\t\t// is the event limit a constant level number?\n\t\tif (eventLimit && typeof eventLimit === 'number') {\n\t\t\tthis.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after\n\t\t}\n\n\t\tscrollerHeight = this.computeScrollerHeight(totalHeight);\n\t\tthis.setGridHeight(scrollerHeight, isAuto);\n\n\t\t// is the event limit dynamically calculated?\n\t\tif (eventLimit && typeof eventLimit !== 'number') {\n\t\t\tthis.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set\n\t\t}\n\n\t\tif (!isAuto && setPotentialScroller(this.scrollerEl, scrollerHeight)) { // using scrollbars?\n\n\t\t\tcompensateScroll(this.headRowEl, getScrollbarWidths(this.scrollerEl));\n\n\t\t\t// doing the scrollbar compensation might have created text overflow which created more height. redo\n\t\t\tscrollerHeight = this.computeScrollerHeight(totalHeight);\n\t\t\tthis.scrollerEl.height(scrollerHeight);\n\n\t\t\tthis.restoreScroll();\n\t\t}\n\t},\n\n\n\t// Sets the height of just the DayGrid component in this view\n\tsetGridHeight: function(height, isAuto) {\n\t\tif (isAuto) {\n\t\t\tundistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding\n\t\t}\n\t\telse {\n\t\t\tdistributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows\n\t\t}\n\t},\n\n\n\t/* Events\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders the given events onto the view and populates the segments array\n\trenderEvents: function(events) {\n\t\tthis.dayGrid.renderEvents(events);\n\n\t\tthis.updateHeight(); // must compensate for events that overflow the row\n\t},\n\n\n\t// Retrieves all segment objects that are rendered in the view\n\tgetEventSegs: function() {\n\t\treturn this.dayGrid.getEventSegs();\n\t},\n\n\n\t// Unrenders all event elements and clears internal segment data\n\tdestroyEvents: function() {\n\t\tthis.recordScroll(); // removing events will reduce height and mess with the scroll, so record beforehand\n\t\tthis.dayGrid.destroyEvents();\n\n\t\t// we DON'T need to call updateHeight() because:\n\t\t// A) a renderEvents() call always happens after this, which will eventually call updateHeight()\n\t\t// B) in IE8, this causes a flash whenever events are rerendered\n\t},\n\n\n\t/* Dragging (for both events and external elements)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// A returned value of `true` signals that a mock \"helper\" event has been rendered.\n\trenderDrag: function(dropLocation, seg) {\n\t\treturn this.dayGrid.renderDrag(dropLocation, seg);\n\t},\n\n\n\tdestroyDrag: function() {\n\t\tthis.dayGrid.destroyDrag();\n\t},\n\n\n\t/* Selection\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of a selection\n\trenderSelection: function(range) {\n\t\tthis.dayGrid.renderSelection(range);\n\t},\n\n\n\t// Unrenders a visual indications of a selection\n\tdestroySelection: function() {\n\t\tthis.dayGrid.destroySelection();\n\t}\n\n});\n\n    /* A month view with day cells running in rows (one-per-week) and columns\n----------------------------------------------------------------------------------------------------------------------*/\n\nsetDefaults({\n\tfixedWeekCount: true\n});\n\nvar MonthView = fcViews.month = BasicView.extend({\n\n\t// Produces information about what range to display\n\tcomputeRange: function(date) {\n\t\tvar range = BasicView.prototype.computeRange.call(this, date); // get value from super-method\n\n\t\tif (this.isFixedWeeks()) {\n\t\t\t// ensure 6 weeks\n\t\t\trange.end.add(\n\t\t\t\t6 - range.end.diff(range.start, 'weeks'),\n\t\t\t\t'weeks'\n\t\t\t);\n\t\t}\n\n\t\treturn range;\n\t},\n\n\n\t// Overrides the default BasicView behavior to have special multi-week auto-height logic\n\tsetGridHeight: function(height, isAuto) {\n\n\t\tisAuto = isAuto || this.opt('weekMode') === 'variable'; // LEGACY: weekMode is deprecated\n\n\t\t// if auto, make the height of each row the height that it would be if there were 6 weeks\n\t\tif (isAuto) {\n\t\t\theight *= this.rowCnt / 6;\n\t\t}\n\n\t\tdistributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows\n\t},\n\n\n\tisFixedWeeks: function() {\n\t\tvar weekMode = this.opt('weekMode'); // LEGACY: weekMode is deprecated\n\t\tif (weekMode) {\n\t\t\treturn weekMode === 'fixed'; // if any other type of weekMode, assume NOT fixed\n\t\t}\n\n\t\treturn this.opt('fixedWeekCount');\n\t}\n\n});\n\nMonthView.duration = { months: 1 };\n\n    /* A week view with simple day cells running horizontally\n----------------------------------------------------------------------------------------------------------------------*/\n\nfcViews.basicWeek = {\n\ttype: 'basic',\n\tduration: { weeks: 1 }\n};\n    /* A view with a single simple day cell\n----------------------------------------------------------------------------------------------------------------------*/\n\nfcViews.basicDay = {\n\ttype: 'basic',\n\tduration: { days: 1 }\n};\n    /* An abstract class for all agenda-related views. Displays one more columns with time slots running vertically.\n----------------------------------------------------------------------------------------------------------------------*/\n// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).\n// Responsible for managing width/height.\n\nsetDefaults({\n\tallDaySlot: true,\n\tallDayText: 'all-day',\n\tscrollTime: '06:00:00',\n\tslotDuration: '00:30:00',\n\tminTime: '00:00:00',\n\tmaxTime: '24:00:00',\n\tslotEventOverlap: true\n});\n\nvar AGENDA_ALL_DAY_EVENT_LIMIT = 5;\n\nfcViews.agenda = View.extend({ // AgendaView\n\n\ttimeGrid: null, // the main time-grid subcomponent of this view\n\tdayGrid: null, // the \"all-day\" subcomponent. if all-day is turned off, this will be null\n\n\taxisWidth: null, // the width of the time axis running down the side\n\n\tnoScrollRowEls: null, // set of fake row elements that must compensate when scrollerEl has scrollbars\n\n\t// when the time-grid isn't tall enough to occupy the given height, we render an <hr> underneath\n\tbottomRuleEl: null,\n\tbottomRuleHeight: null,\n\n\n\tinitialize: function() {\n\t\tthis.timeGrid = new TimeGrid(this);\n\n\t\tif (this.opt('allDaySlot')) { // should we display the \"all-day\" area?\n\t\t\tthis.dayGrid = new DayGrid(this); // the all-day subcomponent of this view\n\n\t\t\t// the coordinate grid will be a combination of both subcomponents' grids\n\t\t\tthis.coordMap = new ComboCoordMap([\n\t\t\t\tthis.dayGrid.coordMap,\n\t\t\t\tthis.timeGrid.coordMap\n\t\t\t]);\n\t\t}\n\t\telse {\n\t\t\tthis.coordMap = this.timeGrid.coordMap;\n\t\t}\n\t},\n\n\n\t/* Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Sets the display range and computes all necessary dates\n\tsetRange: function(range) {\n\t\tView.prototype.setRange.call(this, range); // call the super-method\n\n\t\tthis.timeGrid.setRange(range);\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.setRange(range);\n\t\t}\n\t},\n\n\n\t// Renders the view into `this.el`, which has already been assigned\n\trender: function() {\n\n\t\tthis.el.addClass('fc-agenda-view').html(this.renderHtml());\n\n\t\t// the element that wraps the time-grid that will probably scroll\n\t\tthis.scrollerEl = this.el.find('.fc-time-grid-container');\n\t\tthis.timeGrid.coordMap.containerEl = this.scrollerEl; // don't accept clicks/etc outside of this\n\n\t\tthis.timeGrid.el = this.el.find('.fc-time-grid');\n\t\tthis.timeGrid.render();\n\n\t\t// the <hr> that sometimes displays under the time-grid\n\t\tthis.bottomRuleEl = $('<hr class=\"' + this.widgetHeaderClass + '\"/>')\n\t\t\t.appendTo(this.timeGrid.el); // inject it into the time-grid\n\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.el = this.el.find('.fc-day-grid');\n\t\t\tthis.dayGrid.render();\n\n\t\t\t// have the day-grid extend it's coordinate area over the <hr> dividing the two grids\n\t\t\tthis.dayGrid.bottomCoordPadding = this.dayGrid.el.next('hr').outerHeight();\n\t\t}\n\n\t\tthis.noScrollRowEls = this.el.find('.fc-row:not(.fc-scroller *)'); // fake rows not within the scroller\n\t},\n\n\n\t// Make subcomponents ready for cleanup\n\tdestroy: function() {\n\t\tthis.timeGrid.destroy();\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.destroy();\n\t\t}\n\t\tView.prototype.destroy.call(this); // call the super-method\n\t},\n\n\n\t// Builds the HTML skeleton for the view.\n\t// The day-grid and time-grid components will render inside containers defined by this HTML.\n\trenderHtml: function() {\n\t\treturn '' +\n\t\t\t'<table>' +\n\t\t\t\t'<thead>' +\n\t\t\t\t\t'<tr>' +\n\t\t\t\t\t\t'<td class=\"' + this.widgetHeaderClass + '\">' +\n\t\t\t\t\t\t\tthis.timeGrid.headHtml() + // render the day-of-week headers\n\t\t\t\t\t\t'</td>' +\n\t\t\t\t\t'</tr>' +\n\t\t\t\t'</thead>' +\n\t\t\t\t'<tbody>' +\n\t\t\t\t\t'<tr>' +\n\t\t\t\t\t\t'<td class=\"' + this.widgetContentClass + '\">' +\n\t\t\t\t\t\t\t(this.dayGrid ?\n\t\t\t\t\t\t\t\t'<div class=\"fc-day-grid\"/>' +\n\t\t\t\t\t\t\t\t'<hr class=\"' + this.widgetHeaderClass + '\"/>' :\n\t\t\t\t\t\t\t\t''\n\t\t\t\t\t\t\t\t) +\n\t\t\t\t\t\t\t'<div class=\"fc-time-grid-container\">' +\n\t\t\t\t\t\t\t\t'<div class=\"fc-time-grid\"/>' +\n\t\t\t\t\t\t\t'</div>' +\n\t\t\t\t\t\t'</td>' +\n\t\t\t\t\t'</tr>' +\n\t\t\t\t'</tbody>' +\n\t\t\t'</table>';\n\t},\n\n\n\t// Generates the HTML that will go before the day-of week header cells.\n\t// Queried by the TimeGrid subcomponent when generating rows. Ordering depends on isRTL.\n\theadIntroHtml: function() {\n\t\tvar date;\n\t\tvar weekNumber;\n\t\tvar weekTitle;\n\t\tvar weekText;\n\n\t\tif (this.opt('weekNumbers')) {\n\t\t\tdate = this.timeGrid.getCell(0).start;\n\t\t\tweekNumber = this.calendar.calculateWeekNumber(date);\n\t\t\tweekTitle = this.opt('weekNumberTitle');\n\n\t\t\tif (this.opt('isRTL')) {\n\t\t\t\tweekText = weekNumber + weekTitle;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tweekText = weekTitle + weekNumber;\n\t\t\t}\n\n\t\t\treturn '' +\n\t\t\t\t'<th class=\"fc-axis fc-week-number ' + this.widgetHeaderClass + '\" ' + this.axisStyleAttr() + '>' +\n\t\t\t\t\t'<span>' + // needed for matchCellWidths\n\t\t\t\t\t\thtmlEscape(weekText) +\n\t\t\t\t\t'</span>' +\n\t\t\t\t'</th>';\n\t\t}\n\t\telse {\n\t\t\treturn '<th class=\"fc-axis ' + this.widgetHeaderClass + '\" ' + this.axisStyleAttr() + '></th>';\n\t\t}\n\t},\n\n\n\t// Generates the HTML that goes before the all-day cells.\n\t// Queried by the DayGrid subcomponent when generating rows. Ordering depends on isRTL.\n\tdayIntroHtml: function() {\n\t\treturn '' +\n\t\t\t'<td class=\"fc-axis ' + this.widgetContentClass + '\" ' + this.axisStyleAttr() + '>' +\n\t\t\t\t'<span>' + // needed for matchCellWidths\n\t\t\t\t\t(this.opt('allDayHtml') || htmlEscape(this.opt('allDayText'))) +\n\t\t\t\t'</span>' +\n\t\t\t'</td>';\n\t},\n\n\n\t// Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.\n\tslotBgIntroHtml: function() {\n\t\treturn '<td class=\"fc-axis ' + this.widgetContentClass + '\" ' + this.axisStyleAttr() + '></td>';\n\t},\n\n\n\t// Generates the HTML that goes before all other types of cells.\n\t// Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\n\t// Queried by the TimeGrid and DayGrid subcomponents when generating rows. Ordering depends on isRTL.\n\tintroHtml: function() {\n\t\treturn '<td class=\"fc-axis\" ' + this.axisStyleAttr() + '></td>';\n\t},\n\n\n\t// Generates an HTML attribute string for setting the width of the axis, if it is known\n\taxisStyleAttr: function() {\n\t\tif (this.axisWidth !== null) {\n\t\t\t return 'style=\"width:' + this.axisWidth + 'px\"';\n\t\t}\n\t\treturn '';\n\t},\n\n\n\t/* Dimensions\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tupdateSize: function(isResize) {\n\t\tif (isResize) {\n\t\t\tthis.timeGrid.resize();\n\t\t}\n\t\tView.prototype.updateSize.call(this, isResize);\n\t},\n\n\n\t// Refreshes the horizontal dimensions of the view\n\tupdateWidth: function() {\n\t\t// make all axis cells line up, and record the width so newly created axis cells will have it\n\t\tthis.axisWidth = matchCellWidths(this.el.find('.fc-axis'));\n\t},\n\n\n\t// Adjusts the vertical dimensions of the view to the specified values\n\tsetHeight: function(totalHeight, isAuto) {\n\t\tvar eventLimit;\n\t\tvar scrollerHeight;\n\n\t\tif (this.bottomRuleHeight === null) {\n\t\t\t// calculate the height of the rule the very first time\n\t\t\tthis.bottomRuleHeight = this.bottomRuleEl.outerHeight();\n\t\t}\n\t\tthis.bottomRuleEl.hide(); // .show() will be called later if this <hr> is necessary\n\n\t\t// reset all dimensions back to the original state\n\t\tthis.scrollerEl.css('overflow', '');\n\t\tunsetScroller(this.scrollerEl);\n\t\tuncompensateScroll(this.noScrollRowEls);\n\n\t\t// limit number of events in the all-day area\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.destroySegPopover(); // kill the \"more\" popover if displayed\n\n\t\t\teventLimit = this.opt('eventLimit');\n\t\t\tif (eventLimit && typeof eventLimit !== 'number') {\n\t\t\t\teventLimit = AGENDA_ALL_DAY_EVENT_LIMIT; // make sure \"auto\" goes to a real number\n\t\t\t}\n\t\t\tif (eventLimit) {\n\t\t\t\tthis.dayGrid.limitRows(eventLimit);\n\t\t\t}\n\t\t}\n\n\t\tif (!isAuto) { // should we force dimensions of the scroll container, or let the contents be natural height?\n\n\t\t\tscrollerHeight = this.computeScrollerHeight(totalHeight);\n\t\t\tif (setPotentialScroller(this.scrollerEl, scrollerHeight)) { // using scrollbars?\n\n\t\t\t\t// make the all-day and header rows lines up\n\t\t\t\tcompensateScroll(this.noScrollRowEls, getScrollbarWidths(this.scrollerEl));\n\n\t\t\t\t// the scrollbar compensation might have changed text flow, which might affect height, so recalculate\n\t\t\t\t// and reapply the desired height to the scroller.\n\t\t\t\tscrollerHeight = this.computeScrollerHeight(totalHeight);\n\t\t\t\tthis.scrollerEl.height(scrollerHeight);\n\n\t\t\t\tthis.restoreScroll();\n\t\t\t}\n\t\t\telse { // no scrollbars\n\t\t\t\t// still, force a height and display the bottom rule (marks the end of day)\n\t\t\t\tthis.scrollerEl.height(scrollerHeight).css('overflow', 'hidden'); // in case <hr> goes outside\n\t\t\t\tthis.bottomRuleEl.show();\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Sets the scroll value of the scroller to the initial pre-configured state prior to allowing the user to change it\n\tinitializeScroll: function() {\n\t\tvar _this = this;\n\t\tvar scrollTime = moment.duration(this.opt('scrollTime'));\n\t\tvar top = this.timeGrid.computeTimeTop(scrollTime);\n\n\t\t// zoom can give weird floating-point values. rather scroll a little bit further\n\t\ttop = Math.ceil(top);\n\n\t\tif (top) {\n\t\t\ttop++; // to overcome top border that slots beyond the first have. looks better\n\t\t}\n\n\t\tfunction scroll() {\n\t\t\t_this.scrollerEl.scrollTop(top);\n\t\t}\n\n\t\tscroll();\n\t\tsetTimeout(scroll, 0); // overrides any previous scroll state made by the browser\n\t},\n\n\n\t/* Events\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders events onto the view and populates the View's segment array\n\trenderEvents: function(events) {\n\t\tvar dayEvents = [];\n\t\tvar timedEvents = [];\n\t\tvar daySegs = [];\n\t\tvar timedSegs;\n\t\tvar i;\n\n\t\t// separate the events into all-day and timed\n\t\tfor (i = 0; i < events.length; i++) {\n\t\t\tif (events[i].allDay) {\n\t\t\t\tdayEvents.push(events[i]);\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttimedEvents.push(events[i]);\n\t\t\t}\n\t\t}\n\n\t\t// render the events in the subcomponents\n\t\ttimedSegs = this.timeGrid.renderEvents(timedEvents);\n\t\tif (this.dayGrid) {\n\t\t\tdaySegs = this.dayGrid.renderEvents(dayEvents);\n\t\t}\n\n\t\t// the all-day area is flexible and might have a lot of events, so shift the height\n\t\tthis.updateHeight();\n\t},\n\n\n\t// Retrieves all segment objects that are rendered in the view\n\tgetEventSegs: function() {\n\t\treturn this.timeGrid.getEventSegs().concat(\n\t\t\tthis.dayGrid ? this.dayGrid.getEventSegs() : []\n\t\t);\n\t},\n\n\n\t// Unrenders all event elements and clears internal segment data\n\tdestroyEvents: function() {\n\n\t\t// if destroyEvents is being called as part of an event rerender, renderEvents will be called shortly\n\t\t// after, so remember what the scroll value was so we can restore it.\n\t\tthis.recordScroll();\n\n\t\t// destroy the events in the subcomponents\n\t\tthis.timeGrid.destroyEvents();\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.destroyEvents();\n\t\t}\n\n\t\t// we DON'T need to call updateHeight() because:\n\t\t// A) a renderEvents() call always happens after this, which will eventually call updateHeight()\n\t\t// B) in IE8, this causes a flash whenever events are rerendered\n\t},\n\n\n\t/* Dragging (for events and external elements)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// A returned value of `true` signals that a mock \"helper\" event has been rendered.\n\trenderDrag: function(dropLocation, seg) {\n\t\tif (dropLocation.start.hasTime()) {\n\t\t\treturn this.timeGrid.renderDrag(dropLocation, seg);\n\t\t}\n\t\telse if (this.dayGrid) {\n\t\t\treturn this.dayGrid.renderDrag(dropLocation, seg);\n\t\t}\n\t},\n\n\n\tdestroyDrag: function() {\n\t\tthis.timeGrid.destroyDrag();\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.destroyDrag();\n\t\t}\n\t},\n\n\n\t/* Selection\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of a selection\n\trenderSelection: function(range) {\n\t\tif (range.start.hasTime() || range.end.hasTime()) {\n\t\t\tthis.timeGrid.renderSelection(range);\n\t\t}\n\t\telse if (this.dayGrid) {\n\t\t\tthis.dayGrid.renderSelection(range);\n\t\t}\n\t},\n\n\n\t// Unrenders a visual indications of a selection\n\tdestroySelection: function() {\n\t\tthis.timeGrid.destroySelection();\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.destroySelection();\n\t\t}\n\t}\n\n});\n\n    /* A week view with an all-day cell area at the top, and a time grid below\n----------------------------------------------------------------------------------------------------------------------*/\n\nfcViews.agendaWeek = {\n\ttype: 'agenda',\n\tduration: { weeks: 1 }\n};\n    /* A day view with an all-day cell area at the top, and a time grid below\n----------------------------------------------------------------------------------------------------------------------*/\n\nfcViews.agendaDay = {\n\ttype: 'agenda',\n\tduration: { days: 1 }\n};\n});"
  },
  {
    "path": "public/adminlte/plugins/fullcalendar/fullcalendar.print.css",
    "content": "/*!\n * FullCalendar v2.2.5 Print Stylesheet\n * Docs & License: http://arshaw.com/fullcalendar/\n * (c) 2013 Adam Shaw\n */\n\n/*\n * Include this stylesheet on your page to get a more printer-friendly calendar.\n * When including this stylesheet, use the media='print' attribute of the <link> tag.\n * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css.\n */\n\n.fc {\n\tmax-width: 100% !important;\n}\n\n\n/* Global Event Restyling\n--------------------------------------------------------------------------------------------------*/\n\n.fc-event {\n\tbackground: #fff !important;\n\tcolor: #000 !important;\n\tpage-break-inside: avoid;\n}\n\n.fc-event .fc-resizer {\n\tdisplay: none;\n}\n\n\n/* Table & Day-Row Restyling\n--------------------------------------------------------------------------------------------------*/\n\nth,\ntd,\nhr,\nthead,\ntbody,\n.fc-row {\n\tborder-color: #ccc !important;\n\tbackground: #fff !important;\n}\n\n/* kill the overlaid, absolutely-positioned common components */\n.fc-bg,\n.fc-bgevent-skeleton,\n.fc-highlight-skeleton,\n.fc-helper-skeleton {\n\tdisplay: none;\n}\n\n/* don't force a min-height on rows (for DayGrid) */\n.fc tbody .fc-row {\n\theight: auto !important; /* undo height that JS set in distributeHeight */\n\tmin-height: 0 !important; /* undo the min-height from each view's specific stylesheet */\n}\n\n.fc tbody .fc-row .fc-content-skeleton {\n\tposition: static; /* undo .fc-rigid */\n\tpadding-bottom: 0 !important; /* use a more border-friendly method for this... */\n}\n\n.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td { /* only works in newer browsers */\n\tpadding-bottom: 1em; /* ...gives space within the skeleton. also ensures min height in a way */\n}\n\n.fc tbody .fc-row .fc-content-skeleton table {\n\t/* provides a min-height for the row, but only effective for IE, which exaggerates this value,\n\t   making it look more like 3em. for other browers, it will already be this tall */\n\theight: 1em;\n}\n\n\n/* Undo month-view event limiting. Display all events and hide the \"more\" links\n--------------------------------------------------------------------------------------------------*/\n\n.fc-more-cell,\n.fc-more {\n\tdisplay: none !important;\n}\n\n.fc tr.fc-limited {\n\tdisplay: table-row !important;\n}\n\n.fc td.fc-limited {\n\tdisplay: table-cell !important;\n}\n\n.fc-popover {\n\tdisplay: none; /* never display the \"more..\" popover in print mode */\n}\n\n\n/* TimeGrid Restyling\n--------------------------------------------------------------------------------------------------*/\n\n/* undo the min-height 100% trick used to fill the container's height */\n.fc-time-grid {\n\tmin-height: 0 !important;\n}\n\n/* don't display the side axis at all (\"all-day\" and time cells) */\n.fc-agenda-view .fc-axis {\n\tdisplay: none;\n}\n\n/* don't display the horizontal lines */\n.fc-slats,\n.fc-time-grid hr { /* this hr is used when height is underused and needs to be filled */\n\tdisplay: none !important; /* important overrides inline declaration */\n}\n\n/* let the container that holds the events be naturally positioned and create real height */\n.fc-time-grid .fc-content-skeleton {\n\tposition: static;\n}\n\n/* in case there are no events, we still want some height */\n.fc-time-grid .fc-content-skeleton table {\n\theight: 4em;\n}\n\n/* kill the horizontal spacing made by the event container. event margins will be done below */\n.fc-time-grid .fc-event-container {\n\tmargin: 0 !important;\n}\n\n\n/* TimeGrid *Event* Restyling\n--------------------------------------------------------------------------------------------------*/\n\n/* naturally position events, vertically stacking them */\n.fc-time-grid .fc-event {\n\tposition: static !important;\n\tmargin: 3px 2px !important;\n}\n\n/* for events that continue to a future day, give the bottom border back */\n.fc-time-grid .fc-event.fc-not-end {\n\tborder-bottom-width: 1px !important;\n}\n\n/* indicate the event continues via \"...\" text */\n.fc-time-grid .fc-event.fc-not-end:after {\n\tcontent: \"...\";\n}\n\n/* for events that are continuations from previous days, give the top border back */\n.fc-time-grid .fc-event.fc-not-start {\n\tborder-top-width: 1px !important;\n}\n\n/* indicate the event is a continuation via \"...\" text */\n.fc-time-grid .fc-event.fc-not-start:before {\n\tcontent: \"...\";\n}\n\n/* time */\n\n/* undo a previous declaration and let the time text span to a second line */\n.fc-time-grid .fc-event .fc-time {\n\twhite-space: normal !important;\n}\n\n/* hide the the time that is normally displayed... */\n.fc-time-grid .fc-event .fc-time span {\n\tdisplay: none;\n}\n\n/* ...replace it with a more verbose version (includes AM/PM) stored in an html attribute */\n.fc-time-grid .fc-event .fc-time:after {\n\tcontent: attr(data-full);\n}\n\n\n/* Vertical Scroller & Containers\n--------------------------------------------------------------------------------------------------*/\n\n/* kill the scrollbars and allow natural height */\n.fc-scroller,\n.fc-day-grid-container,    /* these divs might be assigned height, which we need to cleared */\n.fc-time-grid-container {  /* */\n\toverflow: visible !important;\n\theight: auto !important;\n}\n\n/* kill the horizontal border/padding used to compensate for scrollbars */\n.fc-row {\n\tborder: 0 !important;\n\tmargin: 0 !important;\n}\n\n\n/* Button Controls\n--------------------------------------------------------------------------------------------------*/\n\n.fc-button-group,\n.fc button {\n\tdisplay: none; /* don't display any button-related controls */\n}\n"
  },
  {
    "path": "public/adminlte/plugins/iCheck/all.css",
    "content": "/* iCheck plugin skins\n----------------------------------- */\n@import url(\"minimal/_all.css\");\n/*\n@import url(\"minimal/minimal.css\");\n@import url(\"minimal/red.css\");\n@import url(\"minimal/green.css\");\n@import url(\"minimal/blue.css\");\n@import url(\"minimal/aero.css\");\n@import url(\"minimal/grey.css\");\n@import url(\"minimal/orange.css\");\n@import url(\"minimal/yellow.css\");\n@import url(\"minimal/pink.css\");\n@import url(\"minimal/purple.css\");\n*/\n\n@import url(\"square/_all.css\");\n/*\n@import url(\"square/square.css\");\n@import url(\"square/red.css\");\n@import url(\"square/green.css\");\n@import url(\"square/blue.css\");\n@import url(\"square/aero.css\");\n@import url(\"square/grey.css\");\n@import url(\"square/orange.css\");\n@import url(\"square/yellow.css\");\n@import url(\"square/pink.css\");\n@import url(\"square/purple.css\");\n*/\n\n@import url(\"flat/_all.css\");\n/*\n@import url(\"flat/flat.css\");\n@import url(\"flat/red.css\");\n@import url(\"flat/green.css\");\n@import url(\"flat/blue.css\");\n@import url(\"flat/aero.css\");\n@import url(\"flat/grey.css\");\n@import url(\"flat/orange.css\");\n@import url(\"flat/yellow.css\");\n@import url(\"flat/pink.css\");\n@import url(\"flat/purple.css\");\n*/\n\n@import url(\"line/_all.css\");\n/*\n@import url(\"line/line.css\");\n@import url(\"line/red.css\");\n@import url(\"line/green.css\");\n@import url(\"line/blue.css\");\n@import url(\"line/aero.css\");\n@import url(\"line/grey.css\");\n@import url(\"line/orange.css\");\n@import url(\"line/yellow.css\");\n@import url(\"line/pink.css\");\n@import url(\"line/purple.css\");\n*/\n\n@import url(\"polaris/polaris.css\");\n\n@import url(\"futurico/futurico.css\");"
  },
  {
    "path": "public/adminlte/plugins/iCheck/flat/_all.css",
    "content": "/* iCheck plugin Flat skin\n----------------------------------- */\n.icheckbox_flat,\n.iradio_flat {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(flat.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat {\n    background-position: 0 0;\n}\n    .icheckbox_flat.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat {\n    background-position: -88px 0;\n}\n    .iradio_flat.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat,\n    .iradio_flat {\n        background-image: url(flat@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* red */\n.icheckbox_flat-red,\n.iradio_flat-red {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(red.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-red {\n    background-position: 0 0;\n}\n    .icheckbox_flat-red.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-red.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-red.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-red {\n    background-position: -88px 0;\n}\n    .iradio_flat-red.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-red.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-red.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-red,\n    .iradio_flat-red {\n        background-image: url(red@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* green */\n.icheckbox_flat-green,\n.iradio_flat-green {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(green.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-green {\n    background-position: 0 0;\n}\n    .icheckbox_flat-green.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-green.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-green.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-green {\n    background-position: -88px 0;\n}\n    .iradio_flat-green.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-green.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-green.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-green,\n    .iradio_flat-green {\n        background-image: url(green@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* blue */\n.icheckbox_flat-blue,\n.iradio_flat-blue {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(blue.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-blue {\n    background-position: 0 0;\n}\n    .icheckbox_flat-blue.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-blue.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-blue.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-blue {\n    background-position: -88px 0;\n}\n    .iradio_flat-blue.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-blue.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-blue.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-blue,\n    .iradio_flat-blue {\n        background-image: url(blue@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* aero */\n.icheckbox_flat-aero,\n.iradio_flat-aero {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(aero.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-aero {\n    background-position: 0 0;\n}\n    .icheckbox_flat-aero.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-aero.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-aero.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-aero {\n    background-position: -88px 0;\n}\n    .iradio_flat-aero.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-aero.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-aero.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-aero,\n    .iradio_flat-aero {\n        background-image: url(aero@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* grey */\n.icheckbox_flat-grey,\n.iradio_flat-grey {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(grey.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-grey {\n    background-position: 0 0;\n}\n    .icheckbox_flat-grey.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-grey.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-grey.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-grey {\n    background-position: -88px 0;\n}\n    .iradio_flat-grey.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-grey.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-grey.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-grey,\n    .iradio_flat-grey {\n        background-image: url(grey@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* orange */\n.icheckbox_flat-orange,\n.iradio_flat-orange {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(orange.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-orange {\n    background-position: 0 0;\n}\n    .icheckbox_flat-orange.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-orange.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-orange.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-orange {\n    background-position: -88px 0;\n}\n    .iradio_flat-orange.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-orange.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-orange.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-orange,\n    .iradio_flat-orange {\n        background-image: url(orange@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* yellow */\n.icheckbox_flat-yellow,\n.iradio_flat-yellow {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(yellow.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-yellow {\n    background-position: 0 0;\n}\n    .icheckbox_flat-yellow.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-yellow.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-yellow.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-yellow {\n    background-position: -88px 0;\n}\n    .iradio_flat-yellow.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-yellow.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-yellow.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-yellow,\n    .iradio_flat-yellow {\n        background-image: url(yellow@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* pink */\n.icheckbox_flat-pink,\n.iradio_flat-pink {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(pink.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-pink {\n    background-position: 0 0;\n}\n    .icheckbox_flat-pink.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-pink.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-pink.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-pink {\n    background-position: -88px 0;\n}\n    .iradio_flat-pink.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-pink.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-pink.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-pink,\n    .iradio_flat-pink {\n        background-image: url(pink@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* purple */\n.icheckbox_flat-purple,\n.iradio_flat-purple {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(purple.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-purple {\n    background-position: 0 0;\n}\n    .icheckbox_flat-purple.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-purple.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-purple.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-purple {\n    background-position: -88px 0;\n}\n    .iradio_flat-purple.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-purple.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-purple.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-purple,\n    .iradio_flat-purple {\n        background-image: url(purple@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/flat/aero.css",
    "content": "/* iCheck plugin Flat skin, aero\n----------------------------------- */\n.icheckbox_flat-aero,\n.iradio_flat-aero {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(aero.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-aero {\n    background-position: 0 0;\n}\n    .icheckbox_flat-aero.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-aero.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-aero.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-aero {\n    background-position: -88px 0;\n}\n    .iradio_flat-aero.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-aero.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-aero.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-aero,\n    .iradio_flat-aero {\n        background-image: url(aero@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/flat/blue.css",
    "content": "/* iCheck plugin Flat skin, blue\n----------------------------------- */\n.icheckbox_flat-blue,\n.iradio_flat-blue {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(blue.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-blue {\n    background-position: 0 0;\n}\n    .icheckbox_flat-blue.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-blue.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-blue.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-blue {\n    background-position: -88px 0;\n}\n    .iradio_flat-blue.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-blue.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-blue.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-blue,\n    .iradio_flat-blue {\n        background-image: url(blue@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/flat/flat.css",
    "content": "/* iCheck plugin flat skin, black\n----------------------------------- */\n.icheckbox_flat,\n.iradio_flat {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(flat.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat {\n    background-position: 0 0;\n}\n    .icheckbox_flat.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat {\n    background-position: -88px 0;\n}\n    .iradio_flat.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat,\n    .iradio_flat {\n        background-image: url(flat@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/flat/green.css",
    "content": "/* iCheck plugin Flat skin, green\n----------------------------------- */\n.icheckbox_flat-green,\n.iradio_flat-green {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(green.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-green {\n    background-position: 0 0;\n}\n    .icheckbox_flat-green.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-green.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-green.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-green {\n    background-position: -88px 0;\n}\n    .iradio_flat-green.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-green.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-green.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-green,\n    .iradio_flat-green {\n        background-image: url(green@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/flat/grey.css",
    "content": "/* iCheck plugin Flat skin, grey\n----------------------------------- */\n.icheckbox_flat-grey,\n.iradio_flat-grey {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(grey.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-grey {\n    background-position: 0 0;\n}\n    .icheckbox_flat-grey.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-grey.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-grey.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-grey {\n    background-position: -88px 0;\n}\n    .iradio_flat-grey.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-grey.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-grey.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-grey,\n    .iradio_flat-grey {\n        background-image: url(grey@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/flat/orange.css",
    "content": "/* iCheck plugin Flat skin, orange\n----------------------------------- */\n.icheckbox_flat-orange,\n.iradio_flat-orange {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(orange.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-orange {\n    background-position: 0 0;\n}\n    .icheckbox_flat-orange.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-orange.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-orange.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-orange {\n    background-position: -88px 0;\n}\n    .iradio_flat-orange.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-orange.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-orange.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-orange,\n    .iradio_flat-orange {\n        background-image: url(orange@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/flat/pink.css",
    "content": "/* iCheck plugin Flat skin, pink\n----------------------------------- */\n.icheckbox_flat-pink,\n.iradio_flat-pink {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(pink.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-pink {\n    background-position: 0 0;\n}\n    .icheckbox_flat-pink.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-pink.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-pink.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-pink {\n    background-position: -88px 0;\n}\n    .iradio_flat-pink.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-pink.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-pink.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-pink,\n    .iradio_flat-pink {\n        background-image: url(pink@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/flat/purple.css",
    "content": "/* iCheck plugin Flat skin, purple\n----------------------------------- */\n.icheckbox_flat-purple,\n.iradio_flat-purple {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(purple.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-purple {\n    background-position: 0 0;\n}\n    .icheckbox_flat-purple.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-purple.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-purple.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-purple {\n    background-position: -88px 0;\n}\n    .iradio_flat-purple.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-purple.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-purple.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-purple,\n    .iradio_flat-purple {\n        background-image: url(purple@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/flat/red.css",
    "content": "/* iCheck plugin Flat skin, red\n----------------------------------- */\n.icheckbox_flat-red,\n.iradio_flat-red {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(red.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-red {\n    background-position: 0 0;\n}\n    .icheckbox_flat-red.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-red.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-red.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-red {\n    background-position: -88px 0;\n}\n    .iradio_flat-red.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-red.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-red.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-red,\n    .iradio_flat-red {\n        background-image: url(red@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/flat/yellow.css",
    "content": "/* iCheck plugin Flat skin, yellow\n----------------------------------- */\n.icheckbox_flat-yellow,\n.iradio_flat-yellow {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(yellow.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-yellow {\n    background-position: 0 0;\n}\n    .icheckbox_flat-yellow.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-yellow.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-yellow.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-yellow {\n    background-position: -88px 0;\n}\n    .iradio_flat-yellow.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-yellow.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-yellow.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-yellow,\n    .iradio_flat-yellow {\n        background-image: url(yellow@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/futurico/futurico.css",
    "content": "/* iCheck plugin Futurico skin\n----------------------------------- */\n.icheckbox_futurico,\n.iradio_futurico {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 16px;\n    height: 17px;\n    background: url(futurico.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_futurico {\n    background-position: 0 0;\n}\n    .icheckbox_futurico.checked {\n        background-position: -18px 0;\n    }\n    .icheckbox_futurico.disabled {\n        background-position: -36px 0;\n        cursor: default;\n    }\n    .icheckbox_futurico.checked.disabled {\n        background-position: -54px 0;\n    }\n\n.iradio_futurico {\n    background-position: -72px 0;\n}\n    .iradio_futurico.checked {\n        background-position: -90px 0;\n    }\n    .iradio_futurico.disabled {\n        background-position: -108px 0;\n        cursor: default;\n    }\n    .iradio_futurico.checked.disabled {\n        background-position: -126px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_futurico,\n    .iradio_futurico {\n        background-image: url(futurico@2x.png);\n        -webkit-background-size: 144px 19px;\n        background-size: 144px 19px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/icheck.js",
    "content": "/*!\n * iCheck v1.0.1, http://git.io/arlzeA\n * =================================\n * Powerful jQuery and Zepto plugin for checkboxes and radio buttons customization\n *\n * (c) 2013 Damir Sultanov, http://fronteed.com\n * MIT Licensed\n */\n\n(function($) {\n\n  // Cached vars\n  var _iCheck = 'iCheck',\n    _iCheckHelper = _iCheck + '-helper',\n    _checkbox = 'checkbox',\n    _radio = 'radio',\n    _checked = 'checked',\n    _unchecked = 'un' + _checked,\n    _disabled = 'disabled',\n    _determinate = 'determinate',\n    _indeterminate = 'in' + _determinate,\n    _update = 'update',\n    _type = 'type',\n    _click = 'click',\n    _touch = 'touchbegin.i touchend.i',\n    _add = 'addClass',\n    _remove = 'removeClass',\n    _callback = 'trigger',\n    _label = 'label',\n    _cursor = 'cursor',\n    _mobile = /ipad|iphone|ipod|android|blackberry|windows phone|opera mini|silk/i.test(navigator.userAgent);\n\n  // Plugin init\n  $.fn[_iCheck] = function(options, fire) {\n\n    // Walker\n    var handle = 'input[type=\"' + _checkbox + '\"], input[type=\"' + _radio + '\"]',\n      stack = $(),\n      walker = function(object) {\n        object.each(function() {\n          var self = $(this);\n\n          if (self.is(handle)) {\n            stack = stack.add(self);\n          } else {\n            stack = stack.add(self.find(handle));\n          }\n        });\n      };\n\n    // Check if we should operate with some method\n    if (/^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i.test(options)) {\n\n      // Normalize method's name\n      options = options.toLowerCase();\n\n      // Find checkboxes and radio buttons\n      walker(this);\n\n      return stack.each(function() {\n        var self = $(this);\n\n        if (options == 'destroy') {\n          tidy(self, 'ifDestroyed');\n        } else {\n          operate(self, true, options);\n        }\n          // Fire method's callback\n        if ($.isFunction(fire)) {\n          fire();\n        }\n      });\n\n    // Customization\n    } else if (typeof options == 'object' || !options) {\n\n      // Check if any options were passed\n      var settings = $.extend({\n          checkedClass: _checked,\n          disabledClass: _disabled,\n          indeterminateClass: _indeterminate,\n          labelHover: true,\n          aria: false\n        }, options),\n\n        selector = settings.handle,\n        hoverClass = settings.hoverClass || 'hover',\n        focusClass = settings.focusClass || 'focus',\n        activeClass = settings.activeClass || 'active',\n        labelHover = !!settings.labelHover,\n        labelHoverClass = settings.labelHoverClass || 'hover',\n\n        // Setup clickable area\n        area = ('' + settings.increaseArea).replace('%', '') | 0;\n\n      // Selector limit\n      if (selector == _checkbox || selector == _radio) {\n        handle = 'input[type=\"' + selector + '\"]';\n      }\n        // Clickable area limit\n      if (area < -50) {\n        area = -50;\n      }\n        // Walk around the selector\n      walker(this);\n\n      return stack.each(function() {\n        var self = $(this);\n\n        // If already customized\n        tidy(self);\n\n        var node = this,\n          id = node.id,\n\n          // Layer styles\n          offset = -area + '%',\n          size = 100 + (area * 2) + '%',\n          layer = {\n            position: 'absolute',\n            top: offset,\n            left: offset,\n            display: 'block',\n            width: size,\n            height: size,\n            margin: 0,\n            padding: 0,\n            background: '#fff',\n            border: 0,\n            opacity: 0\n          },\n\n          // Choose how to hide input\n          hide = _mobile ? {\n            position: 'absolute',\n            visibility: 'hidden'\n          } : area ? layer : {\n            position: 'absolute',\n            opacity: 0\n          },\n\n          // Get proper class\n          className = node[_type] == _checkbox ? settings.checkboxClass || 'i' + _checkbox : settings.radioClass || 'i' + _radio,\n\n          // Find assigned labels\n          label = $(_label + '[for=\"' + id + '\"]').add(self.closest(_label)),\n\n          // Check ARIA option\n          aria = !!settings.aria,\n\n          // Set ARIA placeholder\n          ariaID = _iCheck + '-' + Math.random().toString(36).replace('0.', ''),\n\n          // Parent & helper\n          parent = '<div class=\"' + className + '\" ' + (aria ? 'role=\"' + node[_type] + '\" ' : ''),\n          helper;\n\n        // Set ARIA \"labelledby\"\n        if (label.length && aria) {\n          label.each(function() {\n            parent += 'aria-labelledby=\"';\n\n            if (this.id) {\n              parent += this.id;\n            } else {\n              this.id = ariaID;\n              parent += ariaID;\n            }\n\n            parent += '\"';\n          });\n        }\n          // Wrap input\n        parent = self.wrap(parent + '/>')[_callback]('ifCreated').parent().append(settings.insert);\n\n        // Layer addition\n        helper = $('<ins class=\"' + _iCheckHelper + '\"/>').css(layer).appendTo(parent);\n\n        // Finalize customization\n        self.data(_iCheck, {o: settings, s: self.attr('style')}).css(hide);\n        !!settings.inheritClass && parent[_add](node.className || '');\n        !!settings.inheritID && id && parent.attr('id', _iCheck + '-' + id);\n        parent.css('position') == 'static' && parent.css('position', 'relative');\n        operate(self, true, _update);\n\n        // Label events\n        if (label.length) {\n          label.on(_click + '.i mouseover.i mouseout.i ' + _touch, function(event) {\n            var type = event[_type],\n              item = $(this);\n\n            // Do nothing if input is disabled\n            if (!node[_disabled]) {\n\n              // Click\n              if (type == _click) {\n                if ($(event.target).is('a')) {\n                  return;\n                }\n                operate(self, false, true);\n\n              // Hover state\n              } else if (labelHover) {\n\n                // mouseout|touchend\n                if (/ut|nd/.test(type)) {\n                  parent[_remove](hoverClass);\n                  item[_remove](labelHoverClass);\n                } else {\n                  parent[_add](hoverClass);\n                  item[_add](labelHoverClass);\n                }\n              }\n                if (_mobile) {\n                event.stopPropagation();\n              } else {\n                return false;\n              }\n            }\n          });\n        }\n          // Input events\n        self.on(_click + '.i focus.i blur.i keyup.i keydown.i keypress.i', function(event) {\n          var type = event[_type],\n            key = event.keyCode;\n\n          // Click\n          if (type == _click) {\n            return false;\n\n          // Keydown\n          } else if (type == 'keydown' && key == 32) {\n            if (!(node[_type] == _radio && node[_checked])) {\n              if (node[_checked]) {\n                off(self, _checked);\n              } else {\n                on(self, _checked);\n              }\n            }\n              return false;\n\n          // Keyup\n          } else if (type == 'keyup' && node[_type] == _radio) {\n            !node[_checked] && on(self, _checked);\n\n          // Focus/blur\n          } else if (/us|ur/.test(type)) {\n            parent[type == 'blur' ? _remove : _add](focusClass);\n          }\n        });\n\n        // Helper events\n        helper.on(_click + ' mousedown mouseup mouseover mouseout ' + _touch, function(event) {\n          var type = event[_type],\n\n            // mousedown|mouseup\n            toggle = /wn|up/.test(type) ? activeClass : hoverClass;\n\n          // Do nothing if input is disabled\n          if (!node[_disabled]) {\n\n            // Click\n            if (type == _click) {\n              operate(self, false, true);\n\n            // Active and hover states\n            } else {\n\n              // State is on\n              if (/wn|er|in/.test(type)) {\n\n                // mousedown|mouseover|touchbegin\n                parent[_add](toggle);\n\n              // State is off\n              } else {\n                parent[_remove](toggle + ' ' + activeClass);\n              }\n                // Label hover\n              if (label.length && labelHover && toggle == hoverClass) {\n\n                // mouseout|touchend\n                label[/ut|nd/.test(type) ? _remove : _add](labelHoverClass);\n              }\n            }\n              if (_mobile) {\n              event.stopPropagation();\n            } else {\n              return false;\n            }\n          }\n        });\n      });\n    } else {\n      return this;\n    }\n  };\n\n  // Do something with inputs\n  function operate(input, direct, method) {\n    var node = input[0],\n      state = /er/.test(method) ? _indeterminate : /bl/.test(method) ? _disabled : _checked,\n      active = method == _update ? {\n        checked: node[_checked],\n        disabled: node[_disabled],\n        indeterminate: input.attr(_indeterminate) == 'true' || input.attr(_determinate) == 'false'\n      } : node[state];\n\n    // Check, disable or indeterminate\n    if (/^(ch|di|in)/.test(method) && !active) {\n      on(input, state);\n\n    // Uncheck, enable or determinate\n    } else if (/^(un|en|de)/.test(method) && active) {\n      off(input, state);\n\n    // Update\n    } else if (method == _update) {\n\n      // Handle states\n      for (var state in active) {\n        if (active[state]) {\n          on(input, state, true);\n        } else {\n          off(input, state, true);\n        }\n      }\n    } else if (!direct || method == 'toggle') {\n\n      // Helper or label was clicked\n      if (!direct) {\n        input[_callback]('ifClicked');\n      }\n        // Toggle checked state\n      if (active) {\n        if (node[_type] !== _radio) {\n          off(input, state);\n        }\n      } else {\n        on(input, state);\n      }\n    }\n  }\n    // Add checked, disabled or indeterminate state\n  function on(input, state, keep) {\n    var node = input[0],\n      parent = input.parent(),\n      checked = state == _checked,\n      indeterminate = state == _indeterminate,\n      disabled = state == _disabled,\n      callback = indeterminate ? _determinate : checked ? _unchecked : 'enabled',\n      regular = option(input, callback + capitalize(node[_type])),\n      specific = option(input, state + capitalize(node[_type]));\n\n    // Prevent unnecessary actions\n    if (node[state] !== true) {\n\n      // Toggle assigned radio buttons\n      if (!keep && state == _checked && node[_type] == _radio && node.name) {\n        var form = input.closest('form'),\n          inputs = 'input[name=\"' + node.name + '\"]';\n\n        inputs = form.length ? form.find(inputs) : $(inputs);\n\n        inputs.each(function() {\n          if (this !== node && $(this).data(_iCheck)) {\n            off($(this), state);\n          }\n        });\n      }\n        // Indeterminate state\n      if (indeterminate) {\n\n        // Add indeterminate state\n        node[state] = true;\n\n        // Remove checked state\n        if (node[_checked]) {\n          off(input, _checked, 'force');\n        }\n          // Checked or disabled state\n      } else {\n\n        // Add checked or disabled state\n        if (!keep) {\n          node[state] = true;\n        }\n          // Remove indeterminate state\n        if (checked && node[_indeterminate]) {\n          off(input, _indeterminate, false);\n        }\n      }\n        // Trigger callbacks\n      callbacks(input, checked, state, keep);\n    }\n      // Add proper cursor\n    if (node[_disabled] && !!option(input, _cursor, true)) {\n      parent.find('.' + _iCheckHelper).css(_cursor, 'default');\n    }\n      // Add state class\n    parent[_add](specific || option(input, state) || '');\n\n    // Set ARIA attribute\n    disabled ? parent.attr('aria-disabled', 'true') : parent.attr('aria-checked', indeterminate ? 'mixed' : 'true');\n\n    // Remove regular state class\n    parent[_remove](regular || option(input, callback) || '');\n  }\n    // Remove checked, disabled or indeterminate state\n  function off(input, state, keep) {\n    var node = input[0],\n      parent = input.parent(),\n      checked = state == _checked,\n      indeterminate = state == _indeterminate,\n      disabled = state == _disabled,\n      callback = indeterminate ? _determinate : checked ? _unchecked : 'enabled',\n      regular = option(input, callback + capitalize(node[_type])),\n      specific = option(input, state + capitalize(node[_type]));\n\n    // Prevent unnecessary actions\n    if (node[state] !== false) {\n\n      // Toggle state\n      if (indeterminate || !keep || keep == 'force') {\n        node[state] = false;\n      }\n        // Trigger callbacks\n      callbacks(input, checked, callback, keep);\n    }\n      // Add proper cursor\n    if (!node[_disabled] && !!option(input, _cursor, true)) {\n      parent.find('.' + _iCheckHelper).css(_cursor, 'pointer');\n    }\n      // Remove state class\n    parent[_remove](specific || option(input, state) || '');\n\n    // Set ARIA attribute\n    disabled ? parent.attr('aria-disabled', 'false') : parent.attr('aria-checked', 'false');\n\n    // Add regular state class\n    parent[_add](regular || option(input, callback) || '');\n  }\n    // Remove all traces\n  function tidy(input, callback) {\n    if (input.data(_iCheck)) {\n\n      // Remove everything except input\n      input.parent().html(input.attr('style', input.data(_iCheck).s || ''));\n\n      // Callback\n      if (callback) {\n        input[_callback](callback);\n      }\n        // Unbind events\n      input.off('.i').unwrap();\n      $(_label + '[for=\"' + input[0].id + '\"]').add(input.closest(_label)).off('.i');\n    }\n  }\n    // Get some option\n  function option(input, state, regular) {\n    if (input.data(_iCheck)) {\n      return input.data(_iCheck).o[state + (regular ? '' : 'Class')];\n    }\n  }\n    // Capitalize some string\n  function capitalize(string) {\n    return string.charAt(0).toUpperCase() + string.slice(1);\n  }\n    // Executable handlers\n  function callbacks(input, checked, callback, keep) {\n    if (!keep) {\n      if (checked) {\n        input[_callback]('ifToggled');\n      }\n        input[_callback]('ifChanged')[_callback]('if' + capitalize(callback));\n    }\n  }\n})(window.jQuery || window.Zepto);\n"
  },
  {
    "path": "public/adminlte/plugins/iCheck/line/_all.css",
    "content": "/* iCheck plugin Line skin\n----------------------------------- */\n.icheckbox_line,\n.iradio_line {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #000;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line .icheck_line-icon,\n    .iradio_line .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line.hover,\n    .icheckbox_line.checked.hover,\n    .iradio_line.hover {\n        background: #444;\n    }\n    .icheckbox_line.checked,\n    .iradio_line.checked {\n        background: #000;\n    }\n        .icheckbox_line.checked .icheck_line-icon,\n        .iradio_line.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line.disabled,\n    .iradio_line.disabled {\n        background: #ccc;\n        cursor: default;\n    }\n        .icheckbox_line.disabled .icheck_line-icon,\n        .iradio_line.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line.checked.disabled,\n    .iradio_line.checked.disabled {\n        background: #ccc;\n    }\n        .icheckbox_line.checked.disabled .icheck_line-icon,\n        .iradio_line.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line .icheck_line-icon,\n    .iradio_line .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* red */\n.icheckbox_line-red,\n.iradio_line-red {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #e56c69;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-red .icheck_line-icon,\n    .iradio_line-red .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-red.hover,\n    .icheckbox_line-red.checked.hover,\n    .iradio_line-red.hover {\n        background: #E98582;\n    }\n    .icheckbox_line-red.checked,\n    .iradio_line-red.checked {\n        background: #e56c69;\n    }\n        .icheckbox_line-red.checked .icheck_line-icon,\n        .iradio_line-red.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-red.disabled,\n    .iradio_line-red.disabled {\n        background: #F7D3D2;\n        cursor: default;\n    }\n        .icheckbox_line-red.disabled .icheck_line-icon,\n        .iradio_line-red.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-red.checked.disabled,\n    .iradio_line-red.checked.disabled {\n        background: #F7D3D2;\n    }\n        .icheckbox_line-red.checked.disabled .icheck_line-icon,\n        .iradio_line-red.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-red .icheck_line-icon,\n    .iradio_line-red .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* green */\n.icheckbox_line-green,\n.iradio_line-green {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #1b7e5a;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-green .icheck_line-icon,\n    .iradio_line-green .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-green.hover,\n    .icheckbox_line-green.checked.hover,\n    .iradio_line-green.hover {\n        background: #24AA7A;\n    }\n    .icheckbox_line-green.checked,\n    .iradio_line-green.checked {\n        background: #1b7e5a;\n    }\n        .icheckbox_line-green.checked .icheck_line-icon,\n        .iradio_line-green.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-green.disabled,\n    .iradio_line-green.disabled {\n        background: #89E6C4;\n        cursor: default;\n    }\n        .icheckbox_line-green.disabled .icheck_line-icon,\n        .iradio_line-green.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-green.checked.disabled,\n    .iradio_line-green.checked.disabled {\n        background: #89E6C4;\n    }\n        .icheckbox_line-green.checked.disabled .icheck_line-icon,\n        .iradio_line-green.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-green .icheck_line-icon,\n    .iradio_line-green .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* blue */\n.icheckbox_line-blue,\n.iradio_line-blue {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #2489c5;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-blue .icheck_line-icon,\n    .iradio_line-blue .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-blue.hover,\n    .icheckbox_line-blue.checked.hover,\n    .iradio_line-blue.hover {\n        background: #3DA0DB;\n    }\n    .icheckbox_line-blue.checked,\n    .iradio_line-blue.checked {\n        background: #2489c5;\n    }\n        .icheckbox_line-blue.checked .icheck_line-icon,\n        .iradio_line-blue.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-blue.disabled,\n    .iradio_line-blue.disabled {\n        background: #ADD7F0;\n        cursor: default;\n    }\n        .icheckbox_line-blue.disabled .icheck_line-icon,\n        .iradio_line-blue.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-blue.checked.disabled,\n    .iradio_line-blue.checked.disabled {\n        background: #ADD7F0;\n    }\n        .icheckbox_line-blue.checked.disabled .icheck_line-icon,\n        .iradio_line-blue.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-blue .icheck_line-icon,\n    .iradio_line-blue .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* aero */\n.icheckbox_line-aero,\n.iradio_line-aero {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #9cc2cb;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-aero .icheck_line-icon,\n    .iradio_line-aero .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-aero.hover,\n    .icheckbox_line-aero.checked.hover,\n    .iradio_line-aero.hover {\n        background: #B5D1D8;\n    }\n    .icheckbox_line-aero.checked,\n    .iradio_line-aero.checked {\n        background: #9cc2cb;\n    }\n        .icheckbox_line-aero.checked .icheck_line-icon,\n        .iradio_line-aero.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-aero.disabled,\n    .iradio_line-aero.disabled {\n        background: #D2E4E8;\n        cursor: default;\n    }\n        .icheckbox_line-aero.disabled .icheck_line-icon,\n        .iradio_line-aero.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-aero.checked.disabled,\n    .iradio_line-aero.checked.disabled {\n        background: #D2E4E8;\n    }\n        .icheckbox_line-aero.checked.disabled .icheck_line-icon,\n        .iradio_line-aero.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-aero .icheck_line-icon,\n    .iradio_line-aero .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* grey */\n.icheckbox_line-grey,\n.iradio_line-grey {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #73716e;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-grey .icheck_line-icon,\n    .iradio_line-grey .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-grey.hover,\n    .icheckbox_line-grey.checked.hover,\n    .iradio_line-grey.hover {\n        background: #8B8986;\n    }\n    .icheckbox_line-grey.checked,\n    .iradio_line-grey.checked {\n        background: #73716e;\n    }\n        .icheckbox_line-grey.checked .icheck_line-icon,\n        .iradio_line-grey.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-grey.disabled,\n    .iradio_line-grey.disabled {\n        background: #D5D4D3;\n        cursor: default;\n    }\n        .icheckbox_line-grey.disabled .icheck_line-icon,\n        .iradio_line-grey.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-grey.checked.disabled,\n    .iradio_line-grey.checked.disabled {\n        background: #D5D4D3;\n    }\n        .icheckbox_line-grey.checked.disabled .icheck_line-icon,\n        .iradio_line-grey.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-grey .icheck_line-icon,\n    .iradio_line-grey .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* orange */\n.icheckbox_line-orange,\n.iradio_line-orange {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #f70;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-orange .icheck_line-icon,\n    .iradio_line-orange .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-orange.hover,\n    .icheckbox_line-orange.checked.hover,\n    .iradio_line-orange.hover {\n        background: #FF9233;\n    }\n    .icheckbox_line-orange.checked,\n    .iradio_line-orange.checked {\n        background: #f70;\n    }\n        .icheckbox_line-orange.checked .icheck_line-icon,\n        .iradio_line-orange.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-orange.disabled,\n    .iradio_line-orange.disabled {\n        background: #FFD6B3;\n        cursor: default;\n    }\n        .icheckbox_line-orange.disabled .icheck_line-icon,\n        .iradio_line-orange.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-orange.checked.disabled,\n    .iradio_line-orange.checked.disabled {\n        background: #FFD6B3;\n    }\n        .icheckbox_line-orange.checked.disabled .icheck_line-icon,\n        .iradio_line-orange.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-orange .icheck_line-icon,\n    .iradio_line-orange .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* yellow */\n.icheckbox_line-yellow,\n.iradio_line-yellow {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #FFC414;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-yellow .icheck_line-icon,\n    .iradio_line-yellow .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-yellow.hover,\n    .icheckbox_line-yellow.checked.hover,\n    .iradio_line-yellow.hover {\n        background: #FFD34F;\n    }\n    .icheckbox_line-yellow.checked,\n    .iradio_line-yellow.checked {\n        background: #FFC414;\n    }\n        .icheckbox_line-yellow.checked .icheck_line-icon,\n        .iradio_line-yellow.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-yellow.disabled,\n    .iradio_line-yellow.disabled {\n        background: #FFE495;\n        cursor: default;\n    }\n        .icheckbox_line-yellow.disabled .icheck_line-icon,\n        .iradio_line-yellow.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-yellow.checked.disabled,\n    .iradio_line-yellow.checked.disabled {\n        background: #FFE495;\n    }\n        .icheckbox_line-yellow.checked.disabled .icheck_line-icon,\n        .iradio_line-yellow.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-yellow .icheck_line-icon,\n    .iradio_line-yellow .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* pink */\n.icheckbox_line-pink,\n.iradio_line-pink {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #a77a94;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-pink .icheck_line-icon,\n    .iradio_line-pink .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-pink.hover,\n    .icheckbox_line-pink.checked.hover,\n    .iradio_line-pink.hover {\n        background: #B995A9;\n    }\n    .icheckbox_line-pink.checked,\n    .iradio_line-pink.checked {\n        background: #a77a94;\n    }\n        .icheckbox_line-pink.checked .icheck_line-icon,\n        .iradio_line-pink.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-pink.disabled,\n    .iradio_line-pink.disabled {\n        background: #E0D0DA;\n        cursor: default;\n    }\n        .icheckbox_line-pink.disabled .icheck_line-icon,\n        .iradio_line-pink.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-pink.checked.disabled,\n    .iradio_line-pink.checked.disabled {\n        background: #E0D0DA;\n    }\n        .icheckbox_line-pink.checked.disabled .icheck_line-icon,\n        .iradio_line-pink.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-pink .icheck_line-icon,\n    .iradio_line-pink .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* purple */\n.icheckbox_line-purple,\n.iradio_line-purple {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #6a5a8c;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-purple .icheck_line-icon,\n    .iradio_line-purple .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-purple.hover,\n    .icheckbox_line-purple.checked.hover,\n    .iradio_line-purple.hover {\n        background: #8677A7;\n    }\n    .icheckbox_line-purple.checked,\n    .iradio_line-purple.checked {\n        background: #6a5a8c;\n    }\n        .icheckbox_line-purple.checked .icheck_line-icon,\n        .iradio_line-purple.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-purple.disabled,\n    .iradio_line-purple.disabled {\n        background: #D2CCDE;\n        cursor: default;\n    }\n        .icheckbox_line-purple.disabled .icheck_line-icon,\n        .iradio_line-purple.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-purple.checked.disabled,\n    .iradio_line-purple.checked.disabled {\n        background: #D2CCDE;\n    }\n        .icheckbox_line-purple.checked.disabled .icheck_line-icon,\n        .iradio_line-purple.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-purple .icheck_line-icon,\n    .iradio_line-purple .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/line/aero.css",
    "content": "/* iCheck plugin Line skin, aero\n----------------------------------- */\n.icheckbox_line-aero,\n.iradio_line-aero {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #9cc2cb;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-aero .icheck_line-icon,\n    .iradio_line-aero .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-aero.hover,\n    .icheckbox_line-aero.checked.hover,\n    .iradio_line-aero.hover {\n        background: #B5D1D8;\n    }\n    .icheckbox_line-aero.checked,\n    .iradio_line-aero.checked {\n        background: #9cc2cb;\n    }\n        .icheckbox_line-aero.checked .icheck_line-icon,\n        .iradio_line-aero.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-aero.disabled,\n    .iradio_line-aero.disabled {\n        background: #D2E4E8;\n        cursor: default;\n    }\n        .icheckbox_line-aero.disabled .icheck_line-icon,\n        .iradio_line-aero.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-aero.checked.disabled,\n    .iradio_line-aero.checked.disabled {\n        background: #D2E4E8;\n    }\n        .icheckbox_line-aero.checked.disabled .icheck_line-icon,\n        .iradio_line-aero.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-aero .icheck_line-icon,\n    .iradio_line-aero .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/line/blue.css",
    "content": "/* iCheck plugin Line skin, blue\n----------------------------------- */\n.icheckbox_line-blue,\n.iradio_line-blue {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #2489c5;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-blue .icheck_line-icon,\n    .iradio_line-blue .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-blue.hover,\n    .icheckbox_line-blue.checked.hover,\n    .iradio_line-blue.hover {\n        background: #3DA0DB;\n    }\n    .icheckbox_line-blue.checked,\n    .iradio_line-blue.checked {\n        background: #2489c5;\n    }\n        .icheckbox_line-blue.checked .icheck_line-icon,\n        .iradio_line-blue.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-blue.disabled,\n    .iradio_line-blue.disabled {\n        background: #ADD7F0;\n        cursor: default;\n    }\n        .icheckbox_line-blue.disabled .icheck_line-icon,\n        .iradio_line-blue.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-blue.checked.disabled,\n    .iradio_line-blue.checked.disabled {\n        background: #ADD7F0;\n    }\n        .icheckbox_line-blue.checked.disabled .icheck_line-icon,\n        .iradio_line-blue.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-blue .icheck_line-icon,\n    .iradio_line-blue .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/line/green.css",
    "content": "/* iCheck plugin Line skin, green\n----------------------------------- */\n.icheckbox_line-green,\n.iradio_line-green {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #1b7e5a;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-green .icheck_line-icon,\n    .iradio_line-green .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-green.hover,\n    .icheckbox_line-green.checked.hover,\n    .iradio_line-green.hover {\n        background: #24AA7A;\n    }\n    .icheckbox_line-green.checked,\n    .iradio_line-green.checked {\n        background: #1b7e5a;\n    }\n        .icheckbox_line-green.checked .icheck_line-icon,\n        .iradio_line-green.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-green.disabled,\n    .iradio_line-green.disabled {\n        background: #89E6C4;\n        cursor: default;\n    }\n        .icheckbox_line-green.disabled .icheck_line-icon,\n        .iradio_line-green.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-green.checked.disabled,\n    .iradio_line-green.checked.disabled {\n        background: #89E6C4;\n    }\n        .icheckbox_line-green.checked.disabled .icheck_line-icon,\n        .iradio_line-green.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-green .icheck_line-icon,\n    .iradio_line-green .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/line/grey.css",
    "content": "/* iCheck plugin Line skin, grey\n----------------------------------- */\n.icheckbox_line-grey,\n.iradio_line-grey {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #73716e;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-grey .icheck_line-icon,\n    .iradio_line-grey .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-grey.hover,\n    .icheckbox_line-grey.checked.hover,\n    .iradio_line-grey.hover {\n        background: #8B8986;\n    }\n    .icheckbox_line-grey.checked,\n    .iradio_line-grey.checked {\n        background: #73716e;\n    }\n        .icheckbox_line-grey.checked .icheck_line-icon,\n        .iradio_line-grey.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-grey.disabled,\n    .iradio_line-grey.disabled {\n        background: #D5D4D3;\n        cursor: default;\n    }\n        .icheckbox_line-grey.disabled .icheck_line-icon,\n        .iradio_line-grey.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-grey.checked.disabled,\n    .iradio_line-grey.checked.disabled {\n        background: #D5D4D3;\n    }\n        .icheckbox_line-grey.checked.disabled .icheck_line-icon,\n        .iradio_line-grey.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-grey .icheck_line-icon,\n    .iradio_line-grey .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/line/line.css",
    "content": "/* iCheck plugin Line skin, black\n----------------------------------- */\n.icheckbox_line,\n.iradio_line {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #000;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line .icheck_line-icon,\n    .iradio_line .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line.hover,\n    .icheckbox_line.checked.hover,\n    .iradio_line.hover {\n        background: #444;\n    }\n    .icheckbox_line.checked,\n    .iradio_line.checked {\n        background: #000;\n    }\n        .icheckbox_line.checked .icheck_line-icon,\n        .iradio_line.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line.disabled,\n    .iradio_line.disabled {\n        background: #ccc;\n        cursor: default;\n    }\n        .icheckbox_line.disabled .icheck_line-icon,\n        .iradio_line.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line.checked.disabled,\n    .iradio_line.checked.disabled {\n        background: #ccc;\n    }\n        .icheckbox_line.checked.disabled .icheck_line-icon,\n        .iradio_line.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line .icheck_line-icon,\n    .iradio_line .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/line/orange.css",
    "content": "/* iCheck plugin Line skin, orange\n----------------------------------- */\n.icheckbox_line-orange,\n.iradio_line-orange {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #f70;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-orange .icheck_line-icon,\n    .iradio_line-orange .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-orange.hover,\n    .icheckbox_line-orange.checked.hover,\n    .iradio_line-orange.hover {\n        background: #FF9233;\n    }\n    .icheckbox_line-orange.checked,\n    .iradio_line-orange.checked {\n        background: #f70;\n    }\n        .icheckbox_line-orange.checked .icheck_line-icon,\n        .iradio_line-orange.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-orange.disabled,\n    .iradio_line-orange.disabled {\n        background: #FFD6B3;\n        cursor: default;\n    }\n        .icheckbox_line-orange.disabled .icheck_line-icon,\n        .iradio_line-orange.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-orange.checked.disabled,\n    .iradio_line-orange.checked.disabled {\n        background: #FFD6B3;\n    }\n        .icheckbox_line-orange.checked.disabled .icheck_line-icon,\n        .iradio_line-orange.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-orange .icheck_line-icon,\n    .iradio_line-orange .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/line/pink.css",
    "content": "/* iCheck plugin Line skin, pink\n----------------------------------- */\n.icheckbox_line-pink,\n.iradio_line-pink {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #a77a94;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-pink .icheck_line-icon,\n    .iradio_line-pink .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-pink.hover,\n    .icheckbox_line-pink.checked.hover,\n    .iradio_line-pink.hover {\n        background: #B995A9;\n    }\n    .icheckbox_line-pink.checked,\n    .iradio_line-pink.checked {\n        background: #a77a94;\n    }\n        .icheckbox_line-pink.checked .icheck_line-icon,\n        .iradio_line-pink.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-pink.disabled,\n    .iradio_line-pink.disabled {\n        background: #E0D0DA;\n        cursor: default;\n    }\n        .icheckbox_line-pink.disabled .icheck_line-icon,\n        .iradio_line-pink.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-pink.checked.disabled,\n    .iradio_line-pink.checked.disabled {\n        background: #E0D0DA;\n    }\n        .icheckbox_line-pink.checked.disabled .icheck_line-icon,\n        .iradio_line-pink.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-pink .icheck_line-icon,\n    .iradio_line-pink .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/line/purple.css",
    "content": "/* iCheck plugin Line skin, purple\n----------------------------------- */\n.icheckbox_line-purple,\n.iradio_line-purple {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #6a5a8c;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-purple .icheck_line-icon,\n    .iradio_line-purple .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-purple.hover,\n    .icheckbox_line-purple.checked.hover,\n    .iradio_line-purple.hover {\n        background: #8677A7;\n    }\n    .icheckbox_line-purple.checked,\n    .iradio_line-purple.checked {\n        background: #6a5a8c;\n    }\n        .icheckbox_line-purple.checked .icheck_line-icon,\n        .iradio_line-purple.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-purple.disabled,\n    .iradio_line-purple.disabled {\n        background: #D2CCDE;\n        cursor: default;\n    }\n        .icheckbox_line-purple.disabled .icheck_line-icon,\n        .iradio_line-purple.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-purple.checked.disabled,\n    .iradio_line-purple.checked.disabled {\n        background: #D2CCDE;\n    }\n        .icheckbox_line-purple.checked.disabled .icheck_line-icon,\n        .iradio_line-purple.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-purple .icheck_line-icon,\n    .iradio_line-purple .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/line/red.css",
    "content": "/* iCheck plugin Line skin, red\n----------------------------------- */\n.icheckbox_line-red,\n.iradio_line-red {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #e56c69;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-red .icheck_line-icon,\n    .iradio_line-red .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-red.hover,\n    .icheckbox_line-red.checked.hover,\n    .iradio_line-red.hover {\n        background: #E98582;\n    }\n    .icheckbox_line-red.checked,\n    .iradio_line-red.checked {\n        background: #e56c69;\n    }\n        .icheckbox_line-red.checked .icheck_line-icon,\n        .iradio_line-red.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-red.disabled,\n    .iradio_line-red.disabled {\n        background: #F7D3D2;\n        cursor: default;\n    }\n        .icheckbox_line-red.disabled .icheck_line-icon,\n        .iradio_line-red.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-red.checked.disabled,\n    .iradio_line-red.checked.disabled {\n        background: #F7D3D2;\n    }\n        .icheckbox_line-red.checked.disabled .icheck_line-icon,\n        .iradio_line-red.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-red .icheck_line-icon,\n    .iradio_line-red .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/line/yellow.css",
    "content": "/* iCheck plugin Line skin, yellow\n----------------------------------- */\n.icheckbox_line-yellow,\n.iradio_line-yellow {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #FFC414;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-yellow .icheck_line-icon,\n    .iradio_line-yellow .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-yellow.hover,\n    .icheckbox_line-yellow.checked.hover,\n    .iradio_line-yellow.hover {\n        background: #FFD34F;\n    }\n    .icheckbox_line-yellow.checked,\n    .iradio_line-yellow.checked {\n        background: #FFC414;\n    }\n        .icheckbox_line-yellow.checked .icheck_line-icon,\n        .iradio_line-yellow.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-yellow.disabled,\n    .iradio_line-yellow.disabled {\n        background: #FFE495;\n        cursor: default;\n    }\n        .icheckbox_line-yellow.disabled .icheck_line-icon,\n        .iradio_line-yellow.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-yellow.checked.disabled,\n    .iradio_line-yellow.checked.disabled {\n        background: #FFE495;\n    }\n        .icheckbox_line-yellow.checked.disabled .icheck_line-icon,\n        .iradio_line-yellow.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-yellow .icheck_line-icon,\n    .iradio_line-yellow .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/minimal/_all.css",
    "content": "/* red */\n.icheckbox_minimal-red,\n.iradio_minimal-red {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(red.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-red {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-red.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-red.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-red.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-red.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-red {\n    background-position: -100px 0;\n}\n    .iradio_minimal-red.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-red.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-red.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-red.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-red,\n    .iradio_minimal-red {\n        background-image: url(red@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* green */\n.icheckbox_minimal-green,\n.iradio_minimal-green {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(green.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-green {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-green.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-green.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-green.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-green.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-green {\n    background-position: -100px 0;\n}\n    .iradio_minimal-green.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-green.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-green.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-green.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-green,\n    .iradio_minimal-green {\n        background-image: url(green@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* blue */\n.icheckbox_minimal-blue,\n.iradio_minimal-blue {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(blue.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-blue {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-blue.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-blue.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-blue.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-blue.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-blue {\n    background-position: -100px 0;\n}\n    .iradio_minimal-blue.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-blue.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-blue.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-blue.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-blue,\n    .iradio_minimal-blue {\n        background-image: url(blue@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* aero */\n.icheckbox_minimal-aero,\n.iradio_minimal-aero {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(aero.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-aero {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-aero.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-aero.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-aero.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-aero.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-aero {\n    background-position: -100px 0;\n}\n    .iradio_minimal-aero.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-aero.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-aero.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-aero.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-aero,\n    .iradio_minimal-aero {\n        background-image: url(aero@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* grey */\n.icheckbox_minimal-grey,\n.iradio_minimal-grey {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(grey.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-grey {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-grey.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-grey.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-grey.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-grey.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-grey {\n    background-position: -100px 0;\n}\n    .iradio_minimal-grey.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-grey.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-grey.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-grey.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-grey,\n    .iradio_minimal-grey {\n        background-image: url(grey@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* orange */\n.icheckbox_minimal-orange,\n.iradio_minimal-orange {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(orange.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-orange {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-orange.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-orange.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-orange.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-orange.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-orange {\n    background-position: -100px 0;\n}\n    .iradio_minimal-orange.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-orange.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-orange.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-orange.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-orange,\n    .iradio_minimal-orange {\n        background-image: url(orange@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* yellow */\n.icheckbox_minimal-yellow,\n.iradio_minimal-yellow {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(yellow.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-yellow {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-yellow.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-yellow.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-yellow.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-yellow.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-yellow {\n    background-position: -100px 0;\n}\n    .iradio_minimal-yellow.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-yellow.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-yellow.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-yellow.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-yellow,\n    .iradio_minimal-yellow {\n        background-image: url(yellow@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* pink */\n.icheckbox_minimal-pink,\n.iradio_minimal-pink {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(pink.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-pink {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-pink.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-pink.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-pink.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-pink.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-pink {\n    background-position: -100px 0;\n}\n    .iradio_minimal-pink.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-pink.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-pink.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-pink.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-pink,\n    .iradio_minimal-pink {\n        background-image: url(pink@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* purple */\n.icheckbox_minimal-purple,\n.iradio_minimal-purple {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(purple.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-purple {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-purple.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-purple.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-purple.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-purple.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-purple {\n    background-position: -100px 0;\n}\n    .iradio_minimal-purple.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-purple.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-purple.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-purple.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-purple,\n    .iradio_minimal-purple {\n        background-image: url(purple@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/minimal/aero.css",
    "content": "/* iCheck plugin Minimal skin, aero\n----------------------------------- */\n.icheckbox_minimal-aero,\n.iradio_minimal-aero {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(aero.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-aero {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-aero.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-aero.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-aero.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-aero.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-aero {\n    background-position: -100px 0;\n}\n    .iradio_minimal-aero.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-aero.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-aero.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-aero.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-aero,\n    .iradio_minimal-aero {\n        background-image: url(aero@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/minimal/blue.css",
    "content": "/* iCheck plugin Minimal skin, blue\n----------------------------------- */\n.icheckbox_minimal-blue,\n.iradio_minimal-blue {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(blue.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-blue {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-blue.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-blue.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-blue.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-blue.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-blue {\n    background-position: -100px 0;\n}\n    .iradio_minimal-blue.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-blue.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-blue.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-blue.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-blue,\n    .iradio_minimal-blue {\n        background-image: url(blue@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/minimal/green.css",
    "content": "/* iCheck plugin Minimal skin, green\n----------------------------------- */\n.icheckbox_minimal-green,\n.iradio_minimal-green {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(green.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-green {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-green.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-green.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-green.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-green.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-green {\n    background-position: -100px 0;\n}\n    .iradio_minimal-green.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-green.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-green.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-green.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-green,\n    .iradio_minimal-green {\n        background-image: url(green@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/minimal/grey.css",
    "content": "/* iCheck plugin Minimal skin, grey\n----------------------------------- */\n.icheckbox_minimal-grey,\n.iradio_minimal-grey {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(grey.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-grey {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-grey.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-grey.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-grey.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-grey.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-grey {\n    background-position: -100px 0;\n}\n    .iradio_minimal-grey.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-grey.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-grey.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-grey.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-grey,\n    .iradio_minimal-grey {\n        background-image: url(grey@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/minimal/minimal.css",
    "content": "/* iCheck plugin Minimal skin, black\n----------------------------------- */\n.icheckbox_minimal,\n.iradio_minimal {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(minimal.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal {\n    background-position: 0 0;\n}\n    .icheckbox_minimal.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal {\n    background-position: -100px 0;\n}\n    .iradio_minimal.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal,\n    .iradio_minimal {\n        background-image: url(minimal@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/minimal/orange.css",
    "content": "/* iCheck plugin Minimal skin, orange\n----------------------------------- */\n.icheckbox_minimal-orange,\n.iradio_minimal-orange {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(orange.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-orange {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-orange.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-orange.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-orange.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-orange.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-orange {\n    background-position: -100px 0;\n}\n    .iradio_minimal-orange.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-orange.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-orange.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-orange.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-orange,\n    .iradio_minimal-orange {\n        background-image: url(orange@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/minimal/pink.css",
    "content": "/* iCheck plugin Minimal skin, pink\n----------------------------------- */\n.icheckbox_minimal-pink,\n.iradio_minimal-pink {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(pink.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-pink {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-pink.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-pink.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-pink.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-pink.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-pink {\n    background-position: -100px 0;\n}\n    .iradio_minimal-pink.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-pink.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-pink.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-pink.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-pink,\n    .iradio_minimal-pink {\n        background-image: url(pink@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/minimal/purple.css",
    "content": "/* iCheck plugin Minimal skin, purple\n----------------------------------- */\n.icheckbox_minimal-purple,\n.iradio_minimal-purple {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(purple.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-purple {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-purple.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-purple.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-purple.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-purple.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-purple {\n    background-position: -100px 0;\n}\n    .iradio_minimal-purple.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-purple.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-purple.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-purple.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-purple,\n    .iradio_minimal-purple {\n        background-image: url(purple@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/minimal/red.css",
    "content": "/* iCheck plugin Minimal skin, red\n----------------------------------- */\n.icheckbox_minimal-red,\n.iradio_minimal-red {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(red.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-red {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-red.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-red.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-red.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-red.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-red {\n    background-position: -100px 0;\n}\n    .iradio_minimal-red.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-red.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-red.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-red.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-red,\n    .iradio_minimal-red {\n        background-image: url(red@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/minimal/yellow.css",
    "content": "/* iCheck plugin Minimal skin, yellow\n----------------------------------- */\n.icheckbox_minimal-yellow,\n.iradio_minimal-yellow {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(yellow.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-yellow {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-yellow.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-yellow.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-yellow.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-yellow.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-yellow {\n    background-position: -100px 0;\n}\n    .iradio_minimal-yellow.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-yellow.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-yellow.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-yellow.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-yellow,\n    .iradio_minimal-yellow {\n        background-image: url(yellow@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/polaris/polaris.css",
    "content": "/* iCheck plugin Polaris skin\n----------------------------------- */\n.icheckbox_polaris,\n.iradio_polaris {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 29px;\n    height: 29px;\n    background: url(polaris.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_polaris {\n    background-position: 0 0;\n}\n    .icheckbox_polaris.hover {\n        background-position: -31px 0;\n    }\n    .icheckbox_polaris.checked {\n        background-position: -62px 0;\n    }\n    .icheckbox_polaris.disabled {\n        background-position: -93px 0;\n        cursor: default;\n    }\n    .icheckbox_polaris.checked.disabled {\n        background-position: -124px 0;\n    }\n\n.iradio_polaris {\n    background-position: -155px 0;\n}\n    .iradio_polaris.hover {\n        background-position: -186px 0;\n    }\n    .iradio_polaris.checked {\n        background-position: -217px 0;\n    }\n    .iradio_polaris.disabled {\n        background-position: -248px 0;\n        cursor: default;\n    }\n    .iradio_polaris.checked.disabled {\n        background-position: -279px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_polaris,\n    .iradio_polaris {\n        background-image: url(polaris@2x.png);\n        -webkit-background-size: 310px 31px;\n        background-size: 310px 31px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/square/_all.css",
    "content": "/* iCheck plugin Square skin\n----------------------------------- */\n.icheckbox_square,\n.iradio_square {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(square.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square {\n    background-position: 0 0;\n}\n    .icheckbox_square.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square {\n    background-position: -120px 0;\n}\n    .iradio_square.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square,\n    .iradio_square {\n        background-image: url(square@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* red */\n.icheckbox_square-red,\n.iradio_square-red {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(red.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-red {\n    background-position: 0 0;\n}\n    .icheckbox_square-red.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-red.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-red.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-red.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-red {\n    background-position: -120px 0;\n}\n    .iradio_square-red.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-red.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-red.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-red.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-red,\n    .iradio_square-red {\n        background-image: url(red@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* green */\n.icheckbox_square-green,\n.iradio_square-green {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(green.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-green {\n    background-position: 0 0;\n}\n    .icheckbox_square-green.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-green.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-green.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-green.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-green {\n    background-position: -120px 0;\n}\n    .iradio_square-green.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-green.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-green.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-green.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-green,\n    .iradio_square-green {\n        background-image: url(green@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* blue */\n.icheckbox_square-blue,\n.iradio_square-blue {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(blue.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-blue {\n    background-position: 0 0;\n}\n    .icheckbox_square-blue.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-blue.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-blue.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-blue.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-blue {\n    background-position: -120px 0;\n}\n    .iradio_square-blue.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-blue.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-blue.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-blue.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-blue,\n    .iradio_square-blue {\n        background-image: url(blue@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* aero */\n.icheckbox_square-aero,\n.iradio_square-aero {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(aero.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-aero {\n    background-position: 0 0;\n}\n    .icheckbox_square-aero.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-aero.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-aero.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-aero.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-aero {\n    background-position: -120px 0;\n}\n    .iradio_square-aero.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-aero.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-aero.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-aero.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-aero,\n    .iradio_square-aero {\n        background-image: url(aero@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* grey */\n.icheckbox_square-grey,\n.iradio_square-grey {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(grey.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-grey {\n    background-position: 0 0;\n}\n    .icheckbox_square-grey.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-grey.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-grey.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-grey.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-grey {\n    background-position: -120px 0;\n}\n    .iradio_square-grey.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-grey.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-grey.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-grey.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-grey,\n    .iradio_square-grey {\n        background-image: url(grey@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* orange */\n.icheckbox_square-orange,\n.iradio_square-orange {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(orange.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-orange {\n    background-position: 0 0;\n}\n    .icheckbox_square-orange.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-orange.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-orange.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-orange.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-orange {\n    background-position: -120px 0;\n}\n    .iradio_square-orange.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-orange.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-orange.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-orange.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-orange,\n    .iradio_square-orange {\n        background-image: url(orange@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* yellow */\n.icheckbox_square-yellow,\n.iradio_square-yellow {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(yellow.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-yellow {\n    background-position: 0 0;\n}\n    .icheckbox_square-yellow.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-yellow.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-yellow.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-yellow.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-yellow {\n    background-position: -120px 0;\n}\n    .iradio_square-yellow.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-yellow.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-yellow.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-yellow.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-yellow,\n    .iradio_square-yellow {\n        background-image: url(yellow@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* pink */\n.icheckbox_square-pink,\n.iradio_square-pink {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(pink.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-pink {\n    background-position: 0 0;\n}\n    .icheckbox_square-pink.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-pink.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-pink.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-pink.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-pink {\n    background-position: -120px 0;\n}\n    .iradio_square-pink.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-pink.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-pink.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-pink.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-pink,\n    .iradio_square-pink {\n        background-image: url(pink@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* purple */\n.icheckbox_square-purple,\n.iradio_square-purple {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(purple.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-purple {\n    background-position: 0 0;\n}\n    .icheckbox_square-purple.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-purple.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-purple.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-purple.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-purple {\n    background-position: -120px 0;\n}\n    .iradio_square-purple.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-purple.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-purple.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-purple.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-purple,\n    .iradio_square-purple {\n        background-image: url(purple@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/square/aero.css",
    "content": "/* iCheck plugin Square skin, aero\n----------------------------------- */\n.icheckbox_square-aero,\n.iradio_square-aero {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(aero.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-aero {\n    background-position: 0 0;\n}\n    .icheckbox_square-aero.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-aero.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-aero.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-aero.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-aero {\n    background-position: -120px 0;\n}\n    .iradio_square-aero.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-aero.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-aero.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-aero.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-aero,\n    .iradio_square-aero {\n        background-image: url(aero@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/square/blue.css",
    "content": "/* iCheck plugin Square skin, blue\n----------------------------------- */\n.icheckbox_square-blue,\n.iradio_square-blue {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(blue.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-blue {\n    background-position: 0 0;\n}\n    .icheckbox_square-blue.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-blue.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-blue.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-blue.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-blue {\n    background-position: -120px 0;\n}\n    .iradio_square-blue.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-blue.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-blue.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-blue.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-blue,\n    .iradio_square-blue {\n        background-image: url(blue@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/square/green.css",
    "content": "/* iCheck plugin Square skin, green\n----------------------------------- */\n.icheckbox_square-green,\n.iradio_square-green {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(green.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-green {\n    background-position: 0 0;\n}\n    .icheckbox_square-green.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-green.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-green.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-green.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-green {\n    background-position: -120px 0;\n}\n    .iradio_square-green.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-green.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-green.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-green.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-green,\n    .iradio_square-green {\n        background-image: url(green@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/square/grey.css",
    "content": "/* iCheck plugin Square skin, grey\n----------------------------------- */\n.icheckbox_square-grey,\n.iradio_square-grey {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(grey.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-grey {\n    background-position: 0 0;\n}\n    .icheckbox_square-grey.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-grey.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-grey.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-grey.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-grey {\n    background-position: -120px 0;\n}\n    .iradio_square-grey.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-grey.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-grey.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-grey.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-grey,\n    .iradio_square-grey {\n        background-image: url(grey@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/square/orange.css",
    "content": "/* iCheck plugin Square skin, orange\n----------------------------------- */\n.icheckbox_square-orange,\n.iradio_square-orange {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(orange.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-orange {\n    background-position: 0 0;\n}\n    .icheckbox_square-orange.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-orange.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-orange.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-orange.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-orange {\n    background-position: -120px 0;\n}\n    .iradio_square-orange.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-orange.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-orange.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-orange.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-orange,\n    .iradio_square-orange {\n        background-image: url(orange@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/square/pink.css",
    "content": "/* iCheck plugin Square skin, pink\n----------------------------------- */\n.icheckbox_square-pink,\n.iradio_square-pink {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(pink.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-pink {\n    background-position: 0 0;\n}\n    .icheckbox_square-pink.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-pink.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-pink.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-pink.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-pink {\n    background-position: -120px 0;\n}\n    .iradio_square-pink.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-pink.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-pink.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-pink.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-pink,\n    .iradio_square-pink {\n        background-image: url(pink@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/square/purple.css",
    "content": "/* iCheck plugin Square skin, purple\n----------------------------------- */\n.icheckbox_square-purple,\n.iradio_square-purple {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(purple.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-purple {\n    background-position: 0 0;\n}\n    .icheckbox_square-purple.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-purple.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-purple.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-purple.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-purple {\n    background-position: -120px 0;\n}\n    .iradio_square-purple.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-purple.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-purple.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-purple.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-purple,\n    .iradio_square-purple {\n        background-image: url(purple@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/square/red.css",
    "content": "/* iCheck plugin Square skin, red\n----------------------------------- */\n.icheckbox_square-red,\n.iradio_square-red {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(red.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-red {\n    background-position: 0 0;\n}\n    .icheckbox_square-red.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-red.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-red.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-red.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-red {\n    background-position: -120px 0;\n}\n    .iradio_square-red.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-red.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-red.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-red.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-red,\n    .iradio_square-red {\n        background-image: url(red@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/square/square.css",
    "content": "/* iCheck plugin Square skin, black\n----------------------------------- */\n.icheckbox_square,\n.iradio_square {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(square.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square {\n    background-position: 0 0;\n}\n    .icheckbox_square.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square {\n    background-position: -120px 0;\n}\n    .iradio_square.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square,\n    .iradio_square {\n        background-image: url(square@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/iCheck/square/yellow.css",
    "content": "/* iCheck plugin Square skin, yellow\n----------------------------------- */\n.icheckbox_square-yellow,\n.iradio_square-yellow {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(yellow.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-yellow {\n    background-position: 0 0;\n}\n    .icheckbox_square-yellow.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-yellow.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-yellow.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-yellow.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-yellow {\n    background-position: -120px 0;\n}\n    .iradio_square-yellow.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-yellow.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-yellow.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-yellow.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-yellow,\n    .iradio_square-yellow {\n        background-image: url(yellow@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/adminlte/plugins/input-mask/jquery.inputmask.date.extensions.js",
    "content": "/*\nInput Mask plugin extensions\nhttp://github.com/RobinHerbots/jquery.inputmask\nCopyright (c) 2010 - 2014 Robin Herbots\nLicensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\nVersion: 0.0.0\n\nOptional extensions on the jquery.inputmask base\n*/\n(function ($) {\n    //date & time aliases\n    $.extend($.inputmask.defaults.definitions, {\n        'h': { //hours\n            validator: \"[01][0-9]|2[0-3]\",\n            cardinality: 2,\n            prevalidator: [{ validator: \"[0-2]\", cardinality: 1 }]\n        },\n        's': { //seconds || minutes\n            validator: \"[0-5][0-9]\",\n            cardinality: 2,\n            prevalidator: [{ validator: \"[0-5]\", cardinality: 1 }]\n        },\n        'd': { //basic day\n            validator: \"0[1-9]|[12][0-9]|3[01]\",\n            cardinality: 2,\n            prevalidator: [{ validator: \"[0-3]\", cardinality: 1 }]\n        },\n        'm': { //basic month\n            validator: \"0[1-9]|1[012]\",\n            cardinality: 2,\n            prevalidator: [{ validator: \"[01]\", cardinality: 1 }]\n        },\n        'y': { //basic year\n            validator: \"(19|20)\\\\d{2}\",\n            cardinality: 4,\n            prevalidator: [\n                        { validator: \"[12]\", cardinality: 1 },\n                        { validator: \"(19|20)\", cardinality: 2 },\n                        { validator: \"(19|20)\\\\d\", cardinality: 3 }\n            ]\n        }\n    });\n    $.extend($.inputmask.defaults.aliases, {\n        'dd/mm/yyyy': {\n            mask: \"1/2/y\",\n            placeholder: \"dd/mm/yyyy\",\n            regex: {\n                val1pre: new RegExp(\"[0-3]\"), //daypre\n                val1: new RegExp(\"0[1-9]|[12][0-9]|3[01]\"), //day\n                val2pre: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp(\"((0[1-9]|[12][0-9]|3[01])\" + escapedSeparator + \"[01])\"); }, //monthpre\n                val2: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp(\"((0[1-9]|[12][0-9])\" + escapedSeparator + \"(0[1-9]|1[012]))|(30\" + escapedSeparator + \"(0[13-9]|1[012]))|(31\" + escapedSeparator + \"(0[13578]|1[02]))\"); }//month\n            },\n            leapday: \"29/02/\",\n            separator: '/',\n            yearrange: { minyear: 1900, maxyear: 2099 },\n            isInYearRange: function (chrs, minyear, maxyear) {\n                var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length)));\n                var enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));\n                return (enteredyear != NaN ? minyear <= enteredyear && enteredyear <= maxyear : false) ||\n            \t\t   (enteredyear2 != NaN ? minyear <= enteredyear2 && enteredyear2 <= maxyear : false);\n            },\n            determinebaseyear: function (minyear, maxyear, hint) {\n                var currentyear = (new Date()).getFullYear();\n                if (minyear > currentyear) return minyear;\n                if (maxyear < currentyear) {\n                    var maxYearPrefix = maxyear.toString().slice(0, 2);\n                    var maxYearPostfix = maxyear.toString().slice(2, 4);\n                    while (maxyear < maxYearPrefix + hint) {\n                        maxYearPrefix--;\n                    }\n                    var maxxYear = maxYearPrefix + maxYearPostfix;\n                    return minyear > maxxYear ? minyear : maxxYear;\n                }\n\n                return currentyear;\n            },\n            onKeyUp: function (e, buffer, opts) {\n                var $input = $(this);\n                if (e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) {\n                    var today = new Date();\n                    $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString());\n                }\n            },\n            definitions: {\n                '1': { //val1 ~ day or month\n                    validator: function (chrs, buffer, pos, strict, opts) {\n                        var isValid = opts.regex.val1.test(chrs);\n                        if (!strict && !isValid) {\n                            if (chrs.charAt(1) == opts.separator || \"-./\".indexOf(chrs.charAt(1)) != -1) {\n                                isValid = opts.regex.val1.test(\"0\" + chrs.charAt(0));\n                                if (isValid) {\n                                    buffer[pos - 1] = \"0\";\n                                    return { \"pos\": pos, \"c\": chrs.charAt(0) };\n                                }\n                            }\n                        }\n                        return isValid;\n                    },\n                    cardinality: 2,\n                    prevalidator: [{\n                        validator: function (chrs, buffer, pos, strict, opts) {\n                            var isValid = opts.regex.val1pre.test(chrs);\n                            if (!strict && !isValid) {\n                                isValid = opts.regex.val1.test(\"0\" + chrs);\n                                if (isValid) {\n                                    buffer[pos] = \"0\";\n                                    pos++;\n                                    return { \"pos\": pos };\n                                }\n                            }\n                            return isValid;\n                        }, cardinality: 1\n                    }]\n                },\n                '2': { //val2 ~ day or month\n                    validator: function (chrs, buffer, pos, strict, opts) {\n                        var frontValue = buffer.join('').substr(0, 3);\n                        if (frontValue.indexOf(opts.placeholder[0]) != -1) frontValue = \"01\" + opts.separator;\n                        var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);\n                        if (!strict && !isValid) {\n                            if (chrs.charAt(1) == opts.separator || \"-./\".indexOf(chrs.charAt(1)) != -1) {\n                                isValid = opts.regex.val2(opts.separator).test(frontValue + \"0\" + chrs.charAt(0));\n                                if (isValid) {\n                                    buffer[pos - 1] = \"0\";\n                                    return { \"pos\": pos, \"c\": chrs.charAt(0) };\n                                }\n                            }\n                        }\n                        return isValid;\n                    },\n                    cardinality: 2,\n                    prevalidator: [{\n                        validator: function (chrs, buffer, pos, strict, opts) {\n                            var frontValue = buffer.join('').substr(0, 3);\n                            if (frontValue.indexOf(opts.placeholder[0]) != -1) frontValue = \"01\" + opts.separator;\n                            var isValid = opts.regex.val2pre(opts.separator).test(frontValue + chrs);\n                            if (!strict && !isValid) {\n                                isValid = opts.regex.val2(opts.separator).test(frontValue + \"0\" + chrs);\n                                if (isValid) {\n                                    buffer[pos] = \"0\";\n                                    pos++;\n                                    return { \"pos\": pos };\n                                }\n                            }\n                            return isValid;\n                        }, cardinality: 1\n                    }]\n                },\n                'y': { //year\n                    validator: function (chrs, buffer, pos, strict, opts) {\n                        if (opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {\n                            var dayMonthValue = buffer.join('').substr(0, 6);\n                            if (dayMonthValue != opts.leapday)\n                                return true;\n                            else {\n                                var year = parseInt(chrs, 10);//detect leap year\n                                if (year % 4 === 0)\n                                    if (year % 100 === 0)\n                                        if (year % 400 === 0)\n                                            return true;\n                                        else return false;\n                                    else return true;\n                                else return false;\n                            }\n                        } else return false;\n                    },\n                    cardinality: 4,\n                    prevalidator: [\n                {\n                    validator: function (chrs, buffer, pos, strict, opts) {\n                        var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n                        if (!strict && !isValid) {\n                            var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + \"0\").toString().slice(0, 1);\n\n                            isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n                            if (isValid) {\n                                buffer[pos++] = yearPrefix[0];\n                                return { \"pos\": pos };\n                            }\n                            yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + \"0\").toString().slice(0, 2);\n\n                            isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n                            if (isValid) {\n                                buffer[pos++] = yearPrefix[0];\n                                buffer[pos++] = yearPrefix[1];\n                                return { \"pos\": pos };\n                            }\n                        }\n                        return isValid;\n                    },\n                    cardinality: 1\n                },\n                {\n                    validator: function (chrs, buffer, pos, strict, opts) {\n                        var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n                        if (!strict && !isValid) {\n                            var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);\n\n                            isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear);\n                            if (isValid) {\n                                buffer[pos++] = yearPrefix[1];\n                                return { \"pos\": pos };\n                            }\n\n                            yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);\n                            if (opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {\n                                var dayMonthValue = buffer.join('').substr(0, 6);\n                                if (dayMonthValue != opts.leapday)\n                                    isValid = true;\n                                else {\n                                    var year = parseInt(chrs, 10);//detect leap year\n                                    if (year % 4 === 0)\n                                        if (year % 100 === 0)\n                                            if (year % 400 === 0)\n                                                isValid = true;\n                                            else isValid = false;\n                                        else isValid = true;\n                                    else isValid = false;\n                                }\n                            } else isValid = false;\n                            if (isValid) {\n                                buffer[pos - 1] = yearPrefix[0];\n                                buffer[pos++] = yearPrefix[1];\n                                buffer[pos++] = chrs[0];\n                                return { \"pos\": pos };\n                            }\n                        }\n                        return isValid;\n                    }, cardinality: 2\n                },\n                {\n                    validator: function (chrs, buffer, pos, strict, opts) {\n                        return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n                    }, cardinality: 3\n                }\n                    ]\n                }\n            },\n            insertMode: false,\n            autoUnmask: false\n        },\n        'mm/dd/yyyy': {\n            placeholder: \"mm/dd/yyyy\",\n            alias: \"dd/mm/yyyy\", //reuse functionality of dd/mm/yyyy alias\n            regex: {\n                val2pre: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp(\"((0[13-9]|1[012])\" + escapedSeparator + \"[0-3])|(02\" + escapedSeparator + \"[0-2])\"); }, //daypre\n                val2: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\" + escapedSeparator + \"30)|((0[13578]|1[02])\" + escapedSeparator + \"31)\"); }, //day\n                val1pre: new RegExp(\"[01]\"), //monthpre\n                val1: new RegExp(\"0[1-9]|1[012]\") //month\n            },\n            leapday: \"02/29/\",\n            onKeyUp: function (e, buffer, opts) {\n                var $input = $(this);\n                if (e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) {\n                    var today = new Date();\n                    $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString());\n                }\n            }\n        },\n        'yyyy/mm/dd': {\n            mask: \"y/1/2\",\n            placeholder: \"yyyy/mm/dd\",\n            alias: \"mm/dd/yyyy\",\n            leapday: \"/02/29\",\n            onKeyUp: function (e, buffer, opts) {\n                var $input = $(this);\n                if (e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) {\n                    var today = new Date();\n                    $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString());\n                }\n            },\n            definitions: {\n                '2': { //val2 ~ day or month\n                    validator: function (chrs, buffer, pos, strict, opts) {\n                        var frontValue = buffer.join('').substr(5, 3);\n                        if (frontValue.indexOf(opts.placeholder[5]) != -1) frontValue = \"01\" + opts.separator;\n                        var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);\n                        if (!strict && !isValid) {\n                            if (chrs.charAt(1) == opts.separator || \"-./\".indexOf(chrs.charAt(1)) != -1) {\n                                isValid = opts.regex.val2(opts.separator).test(frontValue + \"0\" + chrs.charAt(0));\n                                if (isValid) {\n                                    buffer[pos - 1] = \"0\";\n                                    return { \"pos\": pos, \"c\": chrs.charAt(0) };\n                                }\n                            }\n                        }\n\n                        //check leap yeap\n                        if (isValid) {\n                            var dayMonthValue = buffer.join('').substr(4, 4) + chrs;\n                            if (dayMonthValue != opts.leapday)\n                                return true;\n                            else {\n                                var year = parseInt(buffer.join('').substr(0, 4), 10);  //detect leap year\n                                if (year % 4 === 0)\n                                    if (year % 100 === 0)\n                                        if (year % 400 === 0)\n                                            return true;\n                                        else return false;\n                                    else return true;\n                                else return false;\n                            }\n                        }\n\n                        return isValid;\n                    },\n                    cardinality: 2,\n                    prevalidator: [{\n                        validator: function (chrs, buffer, pos, strict, opts) {\n                            var frontValue = buffer.join('').substr(5, 3);\n                            if (frontValue.indexOf(opts.placeholder[5]) != -1) frontValue = \"01\" + opts.separator;\n                            var isValid = opts.regex.val2pre(opts.separator).test(frontValue + chrs);\n                            if (!strict && !isValid) {\n                                isValid = opts.regex.val2(opts.separator).test(frontValue + \"0\" + chrs);\n                                if (isValid) {\n                                    buffer[pos] = \"0\";\n                                    pos++;\n                                    return { \"pos\": pos };\n                                }\n                            }\n                            return isValid;\n                        }, cardinality: 1\n                    }]\n                }\n            }\n        },\n        'dd.mm.yyyy': {\n            mask: \"1.2.y\",\n            placeholder: \"dd.mm.yyyy\",\n            leapday: \"29.02.\",\n            separator: '.',\n            alias: \"dd/mm/yyyy\"\n        },\n        'dd-mm-yyyy': {\n            mask: \"1-2-y\",\n            placeholder: \"dd-mm-yyyy\",\n            leapday: \"29-02-\",\n            separator: '-',\n            alias: \"dd/mm/yyyy\"\n        },\n        'mm.dd.yyyy': {\n            mask: \"1.2.y\",\n            placeholder: \"mm.dd.yyyy\",\n            leapday: \"02.29.\",\n            separator: '.',\n            alias: \"mm/dd/yyyy\"\n        },\n        'mm-dd-yyyy': {\n            mask: \"1-2-y\",\n            placeholder: \"mm-dd-yyyy\",\n            leapday: \"02-29-\",\n            separator: '-',\n            alias: \"mm/dd/yyyy\"\n        },\n        'yyyy.mm.dd': {\n            mask: \"y.1.2\",\n            placeholder: \"yyyy.mm.dd\",\n            leapday: \".02.29\",\n            separator: '.',\n            alias: \"yyyy/mm/dd\"\n        },\n        'yyyy-mm-dd': {\n            mask: \"y-1-2\",\n            placeholder: \"yyyy-mm-dd\",\n            leapday: \"-02-29\",\n            separator: '-',\n            alias: \"yyyy/mm/dd\"\n        },\n        'datetime': {\n            mask: \"1/2/y h:s\",\n            placeholder: \"dd/mm/yyyy hh:mm\",\n            alias: \"dd/mm/yyyy\",\n            regex: {\n                hrspre: new RegExp(\"[012]\"), //hours pre\n                hrs24: new RegExp(\"2[0-9]|1[3-9]\"),\n                hrs: new RegExp(\"[01][0-9]|2[0-3]\"), //hours\n                ampm: new RegExp(\"^[a|p|A|P][m|M]\")\n            },\n            timeseparator: ':',\n            hourFormat: \"24\", // or 12\n            definitions: {\n                'h': { //hours\n                    validator: function (chrs, buffer, pos, strict, opts) {\n                        var isValid = opts.regex.hrs.test(chrs);\n                        if (!strict && !isValid) {\n                            if (chrs.charAt(1) == opts.timeseparator || \"-.:\".indexOf(chrs.charAt(1)) != -1) {\n                                isValid = opts.regex.hrs.test(\"0\" + chrs.charAt(0));\n                                if (isValid) {\n                                    buffer[pos - 1] = \"0\";\n                                    buffer[pos] = chrs.charAt(0);\n                                    pos++;\n                                    return { \"pos\": pos };\n                                }\n                            }\n                        }\n\n                        if (isValid && opts.hourFormat !== \"24\" && opts.regex.hrs24.test(chrs)) {\n\n                            var tmp = parseInt(chrs, 10);\n\n                            if (tmp == 24) {\n                                buffer[pos + 5] = \"a\";\n                                buffer[pos + 6] = \"m\";\n                            } else {\n                                buffer[pos + 5] = \"p\";\n                                buffer[pos + 6] = \"m\";\n                            }\n\n                            tmp = tmp - 12;\n\n                            if (tmp < 10) {\n                                buffer[pos] = tmp.toString();\n                                buffer[pos - 1] = \"0\";\n                            } else {\n                                buffer[pos] = tmp.toString().charAt(1);\n                                buffer[pos - 1] = tmp.toString().charAt(0);\n                            }\n\n                            return { \"pos\": pos, \"c\": buffer[pos] };\n                        }\n\n                        return isValid;\n                    },\n                    cardinality: 2,\n                    prevalidator: [{\n                        validator: function (chrs, buffer, pos, strict, opts) {\n                            var isValid = opts.regex.hrspre.test(chrs);\n                            if (!strict && !isValid) {\n                                isValid = opts.regex.hrs.test(\"0\" + chrs);\n                                if (isValid) {\n                                    buffer[pos] = \"0\";\n                                    pos++;\n                                    return { \"pos\": pos };\n                                }\n                            }\n                            return isValid;\n                        }, cardinality: 1\n                    }]\n                },\n                't': { //am/pm\n                    validator: function (chrs, buffer, pos, strict, opts) {\n                        return opts.regex.ampm.test(chrs + \"m\");\n                    },\n                    casing: \"lower\",\n                    cardinality: 1\n                }\n            },\n            insertMode: false,\n            autoUnmask: false\n        },\n        'datetime12': {\n            mask: \"1/2/y h:s t\\\\m\",\n            placeholder: \"dd/mm/yyyy hh:mm xm\",\n            alias: \"datetime\",\n            hourFormat: \"12\"\n        },\n        'hh:mm t': {\n            mask: \"h:s t\\\\m\",\n            placeholder: \"hh:mm xm\",\n            alias: \"datetime\",\n            hourFormat: \"12\"\n        },\n        'h:s t': {\n            mask: \"h:s t\\\\m\",\n            placeholder: \"hh:mm xm\",\n            alias: \"datetime\",\n            hourFormat: \"12\"\n        },\n        'hh:mm:ss': {\n            mask: \"h:s:s\",\n            autoUnmask: false\n        },\n        'hh:mm': {\n            mask: \"h:s\",\n            autoUnmask: false\n        },\n        'date': {\n            alias: \"dd/mm/yyyy\" // \"mm/dd/yyyy\"\n        },\n        'mm/yyyy': {\n            mask: \"1/y\",\n            placeholder: \"mm/yyyy\",\n            leapday: \"donotuse\",\n            separator: '/',\n            alias: \"mm/dd/yyyy\"\n        }\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/input-mask/jquery.inputmask.extensions.js",
    "content": "/*\nInput Mask plugin extensions\nhttp://github.com/RobinHerbots/jquery.inputmask\nCopyright (c) 2010 - 2014 Robin Herbots\nLicensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\nVersion: 0.0.0\n\nOptional extensions on the jquery.inputmask base\n*/\n(function ($) {\n    //extra definitions\n    $.extend($.inputmask.defaults.definitions, {\n        'A': {\n            validator: \"[A-Za-z]\",\n            cardinality: 1,\n            casing: \"upper\" //auto uppercasing\n        },\n        '#': {\n            validator: \"[A-Za-z\\u0410-\\u044F\\u0401\\u04510-9]\",\n            cardinality: 1,\n            casing: \"upper\"\n        }\n    });\n    $.extend($.inputmask.defaults.aliases, {\n        'url': {\n            mask: \"ir\",\n            placeholder: \"\",\n            separator: \"\",\n            defaultPrefix: \"http://\",\n            regex: {\n                urlpre1: new RegExp(\"[fh]\"),\n                urlpre2: new RegExp(\"(ft|ht)\"),\n                urlpre3: new RegExp(\"(ftp|htt)\"),\n                urlpre4: new RegExp(\"(ftp:|http|ftps)\"),\n                urlpre5: new RegExp(\"(ftp:/|ftps:|http:|https)\"),\n                urlpre6: new RegExp(\"(ftp://|ftps:/|http:/|https:)\"),\n                urlpre7: new RegExp(\"(ftp://|ftps://|http://|https:/)\"),\n                urlpre8: new RegExp(\"(ftp://|ftps://|http://|https://)\")\n            },\n            definitions: {\n                'i': {\n                    validator: function (chrs, buffer, pos, strict, opts) {\n                        return true;\n                    },\n                    cardinality: 8,\n                    prevalidator: (function () {\n                        var result = [], prefixLimit = 8;\n                        for (var i = 0; i < prefixLimit; i++) {\n                            result[i] = (function () {\n                                var j = i;\n                                return {\n                                    validator: function (chrs, buffer, pos, strict, opts) {\n                                        if (opts.regex[\"urlpre\" + (j + 1)]) {\n                                            var tmp = chrs, k;\n                                            if (((j + 1) - chrs.length) > 0) {\n                                                tmp = buffer.join('').substring(0, ((j + 1) - chrs.length)) + \"\" + tmp;\n                                            }\n                                            var isValid = opts.regex[\"urlpre\" + (j + 1)].test(tmp);\n                                            if (!strict && !isValid) {\n                                                pos = pos - j;\n                                                for (k = 0; k < opts.defaultPrefix.length; k++) {\n                                                    buffer[pos] = opts.defaultPrefix[k]; pos++;\n                                                }\n                                                for (k = 0; k < tmp.length - 1; k++) {\n                                                    buffer[pos] = tmp[k]; pos++;\n                                                }\n                                                return { \"pos\": pos };\n                                            }\n                                            return isValid;\n                                        } else {\n                                            return false;\n                                        }\n                                    }, cardinality: j\n                                };\n                            })();\n                        }\n                        return result;\n                    })()\n                },\n                \"r\": {\n                    validator: \".\",\n                    cardinality: 50\n                }\n            },\n            insertMode: false,\n            autoUnmask: false\n        },\n        \"ip\": { //ip-address mask\n            mask: [\"[[x]y]z.[[x]y]z.[[x]y]z.x[yz]\", \"[[x]y]z.[[x]y]z.[[x]y]z.[[x]y][z]\"],\n            definitions: {\n                'x': {\n                    validator: \"[012]\",\n                    cardinality: 1,\n                    definitionSymbol: \"i\"\n                },\n                'y': {\n                    validator: function (chrs, buffer, pos, strict, opts) {\n                        if (pos - 1 > -1 && buffer[pos - 1] != \".\")\n                            chrs = buffer[pos - 1] + chrs;\n                        else chrs = \"0\" + chrs;\n                        return new RegExp(\"2[0-5]|[01][0-9]\").test(chrs);\n                    },\n                    cardinality: 1,\n                    definitionSymbol: \"i\"\n                },\n                'z': {\n                    validator: function (chrs, buffer, pos, strict, opts) {\n                        if (pos - 1 > -1 && buffer[pos - 1] != \".\") {\n                            chrs = buffer[pos - 1] + chrs;\n                            if (pos - 2 > -1 && buffer[pos - 2] != \".\") {\n                                chrs = buffer[pos - 2] + chrs;\n                            } else chrs = \"0\" + chrs;\n                        } else chrs = \"00\" + chrs;\n                        return new RegExp(\"25[0-5]|2[0-4][0-9]|[01][0-9][0-9]\").test(chrs);\n                    },\n                    cardinality: 1,\n                    definitionSymbol: \"i\"\n                }\n            }\n        }\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/input-mask/jquery.inputmask.js",
    "content": "/**\n* @license Input Mask plugin for jquery\n* http://github.com/RobinHerbots/jquery.inputmask\n* Copyright (c) 2010 - 2014 Robin Herbots\n* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n* Version: 0.0.0\n*/\n\n(function ($) {\n    if ($.fn.inputmask === undefined) {\n        //helper functions    \n        function isInputEventSupported(eventName) {\n            var el = document.createElement('input'),\n            eventName = 'on' + eventName,\n            isSupported = (eventName in el);\n            if (!isSupported) {\n                el.setAttribute(eventName, 'return;');\n                isSupported = typeof el[eventName] == 'function';\n            }\n            el = null;\n            return isSupported;\n        }\n        function resolveAlias(aliasStr, options, opts) {\n            var aliasDefinition = opts.aliases[aliasStr];\n            if (aliasDefinition) {\n                if (aliasDefinition.alias) resolveAlias(aliasDefinition.alias, undefined, opts); //alias is another alias\n                $.extend(true, opts, aliasDefinition);  //merge alias definition in the options\n                $.extend(true, opts, options);  //reapply extra given options\n                return true;\n            }\n            return false;\n        }\n        function generateMaskSets(opts) {\n            var ms = [];\n            var genmasks = []; //used to keep track of the masks that where processed, to avoid duplicates\n            function getMaskTemplate(mask) {\n                if (opts.numericInput) {\n                    mask = mask.split('').reverse().join('');\n                }\n                var escaped = false, outCount = 0, greedy = opts.greedy, repeat = opts.repeat;\n                if (repeat == \"*\") greedy = false;\n                //if (greedy == true && opts.placeholder == \"\") opts.placeholder = \" \";\n                if (mask.length == 1 && greedy == false && repeat != 0) { opts.placeholder = \"\"; } //hide placeholder with single non-greedy mask\n                var singleMask = $.map(mask.split(\"\"), function (element, index) {\n                    var outElem = [];\n                    if (element == opts.escapeChar) {\n                        escaped = true;\n                    }\n                    else if ((element != opts.optionalmarker.start && element != opts.optionalmarker.end) || escaped) {\n                        var maskdef = opts.definitions[element];\n                        if (maskdef && !escaped) {\n                            for (var i = 0; i < maskdef.cardinality; i++) {\n                                outElem.push(opts.placeholder.charAt((outCount + i) % opts.placeholder.length));\n                            }\n                        } else {\n                            outElem.push(element);\n                            escaped = false;\n                        }\n                        outCount += outElem.length;\n                        return outElem;\n                    }\n                });\n\n                //allocate repetitions\n                var repeatedMask = singleMask.slice();\n                for (var i = 1; i < repeat && greedy; i++) {\n                    repeatedMask = repeatedMask.concat(singleMask.slice());\n                }\n\n                return { \"mask\": repeatedMask, \"repeat\": repeat, \"greedy\": greedy };\n            }\n            //test definition => {fn: RegExp/function, cardinality: int, optionality: bool, newBlockMarker: bool, offset: int, casing: null/upper/lower, def: definitionSymbol}\n            function getTestingChain(mask) {\n                if (opts.numericInput) {\n                    mask = mask.split('').reverse().join('');\n                }\n                var isOptional = false, escaped = false;\n                var newBlockMarker = false; //indicates wheter the begin/ending of a block should be indicated\n\n                return $.map(mask.split(\"\"), function (element, index) {\n                    var outElem = [];\n\n                    if (element == opts.escapeChar) {\n                        escaped = true;\n                    } else if (element == opts.optionalmarker.start && !escaped) {\n                        isOptional = true;\n                        newBlockMarker = true;\n                    }\n                    else if (element == opts.optionalmarker.end && !escaped) {\n                        isOptional = false;\n                        newBlockMarker = true;\n                    }\n                    else {\n                        var maskdef = opts.definitions[element];\n                        if (maskdef && !escaped) {\n                            var prevalidators = maskdef[\"prevalidator\"], prevalidatorsL = prevalidators ? prevalidators.length : 0;\n                            for (var i = 1; i < maskdef.cardinality; i++) {\n                                var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator[\"validator\"], cardinality = prevalidator[\"cardinality\"];\n                                outElem.push({ fn: validator ? typeof validator == 'string' ? new RegExp(validator) : new function () { this.test = validator; } : new RegExp(\".\"), cardinality: cardinality ? cardinality : 1, optionality: isOptional, newBlockMarker: isOptional == true ? newBlockMarker : false, offset: 0, casing: maskdef[\"casing\"], def: maskdef[\"definitionSymbol\"] || element });\n                                if (isOptional == true) //reset newBlockMarker\n                                    newBlockMarker = false;\n                            }\n                            outElem.push({ fn: maskdef.validator ? typeof maskdef.validator == 'string' ? new RegExp(maskdef.validator) : new function () { this.test = maskdef.validator; } : new RegExp(\".\"), cardinality: maskdef.cardinality, optionality: isOptional, newBlockMarker: newBlockMarker, offset: 0, casing: maskdef[\"casing\"], def: maskdef[\"definitionSymbol\"] || element });\n                        } else {\n                            outElem.push({ fn: null, cardinality: 0, optionality: isOptional, newBlockMarker: newBlockMarker, offset: 0, casing: null, def: element });\n                            escaped = false;\n                        }\n                        //reset newBlockMarker\n                        newBlockMarker = false;\n                        return outElem;\n                    }\n                });\n            }\n            function markOptional(maskPart) { //needed for the clearOptionalTail functionality\n                return opts.optionalmarker.start + maskPart + opts.optionalmarker.end;\n            }\n            function splitFirstOptionalEndPart(maskPart) {\n                var optionalStartMarkers = 0, optionalEndMarkers = 0, mpl = maskPart.length;\n                for (var i = 0; i < mpl; i++) {\n                    if (maskPart.charAt(i) == opts.optionalmarker.start) {\n                        optionalStartMarkers++;\n                    }\n                    if (maskPart.charAt(i) == opts.optionalmarker.end) {\n                        optionalEndMarkers++;\n                    }\n                    if (optionalStartMarkers > 0 && optionalStartMarkers == optionalEndMarkers)\n                        break;\n                }\n                var maskParts = [maskPart.substring(0, i)];\n                if (i < mpl) {\n                    maskParts.push(maskPart.substring(i + 1, mpl));\n                }\n                return maskParts;\n            }\n            function splitFirstOptionalStartPart(maskPart) {\n                var mpl = maskPart.length;\n                for (var i = 0; i < mpl; i++) {\n                    if (maskPart.charAt(i) == opts.optionalmarker.start) {\n                        break;\n                    }\n                }\n                var maskParts = [maskPart.substring(0, i)];\n                if (i < mpl) {\n                    maskParts.push(maskPart.substring(i + 1, mpl));\n                }\n                return maskParts;\n            }\n            function generateMask(maskPrefix, maskPart, metadata) {\n                var maskParts = splitFirstOptionalEndPart(maskPart);\n                var newMask, maskTemplate;\n\n                var masks = splitFirstOptionalStartPart(maskParts[0]);\n                if (masks.length > 1) {\n                    newMask = maskPrefix + masks[0] + markOptional(masks[1]) + (maskParts.length > 1 ? maskParts[1] : \"\");\n                    if ($.inArray(newMask, genmasks) == -1 && newMask != \"\") {\n                        genmasks.push(newMask);\n                        maskTemplate = getMaskTemplate(newMask);\n                        ms.push({\n                            \"mask\": newMask,\n                            \"_buffer\": maskTemplate[\"mask\"],\n                            \"buffer\": maskTemplate[\"mask\"].slice(),\n                            \"tests\": getTestingChain(newMask),\n                            \"lastValidPosition\": -1,\n                            \"greedy\": maskTemplate[\"greedy\"],\n                            \"repeat\": maskTemplate[\"repeat\"],\n                            \"metadata\": metadata\n                        });\n                    }\n                    newMask = maskPrefix + masks[0] + (maskParts.length > 1 ? maskParts[1] : \"\");\n                    if ($.inArray(newMask, genmasks) == -1 && newMask != \"\") {\n                        genmasks.push(newMask);\n                        maskTemplate = getMaskTemplate(newMask);\n                        ms.push({\n                            \"mask\": newMask,\n                            \"_buffer\": maskTemplate[\"mask\"],\n                            \"buffer\": maskTemplate[\"mask\"].slice(),\n                            \"tests\": getTestingChain(newMask),\n                            \"lastValidPosition\": -1,\n                            \"greedy\": maskTemplate[\"greedy\"],\n                            \"repeat\": maskTemplate[\"repeat\"],\n                            \"metadata\": metadata\n                        });\n                    }\n                    if (splitFirstOptionalStartPart(masks[1]).length > 1) { //optional contains another optional\n                        generateMask(maskPrefix + masks[0], masks[1] + maskParts[1], metadata);\n                    }\n                    if (maskParts.length > 1 && splitFirstOptionalStartPart(maskParts[1]).length > 1) {\n                        generateMask(maskPrefix + masks[0] + markOptional(masks[1]), maskParts[1], metadata);\n                        generateMask(maskPrefix + masks[0], maskParts[1], metadata);\n                    }\n                }\n                else {\n                    newMask = maskPrefix + maskParts;\n                    if ($.inArray(newMask, genmasks) == -1 && newMask != \"\") {\n                        genmasks.push(newMask);\n                        maskTemplate = getMaskTemplate(newMask);\n                        ms.push({\n                            \"mask\": newMask,\n                            \"_buffer\": maskTemplate[\"mask\"],\n                            \"buffer\": maskTemplate[\"mask\"].slice(),\n                            \"tests\": getTestingChain(newMask),\n                            \"lastValidPosition\": -1,\n                            \"greedy\": maskTemplate[\"greedy\"],\n                            \"repeat\": maskTemplate[\"repeat\"],\n                            \"metadata\": metadata\n                        });\n                    }\n                }\n\n            }\n\n            if ($.isFunction(opts.mask)) { //allow mask to be a preprocessing fn - should return a valid mask\n                opts.mask = opts.mask.call(this, opts);\n            }\n            if ($.isArray(opts.mask)) {\n                $.each(opts.mask, function (ndx, msk) {\n                    if (msk[\"mask\"] != undefined) {\n                        generateMask(\"\", msk[\"mask\"].toString(), msk);\n                    } else\n                        generateMask(\"\", msk.toString());\n                });\n            } else generateMask(\"\", opts.mask.toString());\n\n            return opts.greedy ? ms : ms.sort(function (a, b) { return a[\"mask\"].length - b[\"mask\"].length; });\n        }\n\n        var msie10 = navigator.userAgent.match(new RegExp(\"msie 10\", \"i\")) !== null,\n            iphone = navigator.userAgent.match(new RegExp(\"iphone\", \"i\")) !== null,\n            android = navigator.userAgent.match(new RegExp(\"android.*safari.*\", \"i\")) !== null,\n            androidchrome = navigator.userAgent.match(new RegExp(\"android.*chrome.*\", \"i\")) !== null,\n            pasteEvent = isInputEventSupported('paste') ? 'paste' : isInputEventSupported('input') ? 'input' : \"propertychange\";\n\n\n        //masking scope\n        //actionObj definition see below\n        function maskScope(masksets, activeMasksetIndex, opts, actionObj) {\n            var isRTL = false,\n                valueOnFocus = getActiveBuffer().join(''),\n                $el, chromeValueOnInput,\n                skipKeyPressEvent = false, //Safari 5.1.x - modal dialog fires keypress twice workaround\n                skipInputEvent = false, //skip when triggered from within inputmask\n                ignorable = false;\n\n\n            //maskset helperfunctions\n\n            function getActiveMaskSet() {\n                return masksets[activeMasksetIndex];\n            }\n\n            function getActiveTests() {\n                return getActiveMaskSet()['tests'];\n            }\n\n            function getActiveBufferTemplate() {\n                return getActiveMaskSet()['_buffer'];\n            }\n\n            function getActiveBuffer() {\n                return getActiveMaskSet()['buffer'];\n            }\n\n            function isValid(pos, c, strict) { //strict true ~ no correction or autofill\n                strict = strict === true; //always set a value to strict to prevent possible strange behavior in the extensions \n\n                function _isValid(position, activeMaskset, c, strict) {\n                    var testPos = determineTestPosition(position), loopend = c ? 1 : 0, chrs = '', buffer = activeMaskset[\"buffer\"];\n                    for (var i = activeMaskset['tests'][testPos].cardinality; i > loopend; i--) {\n                        chrs += getBufferElement(buffer, testPos - (i - 1));\n                    }\n\n                    if (c) {\n                        chrs += c;\n                    }\n\n                    //return is false or a json object => { pos: ??, c: ??} or true\n                    return activeMaskset['tests'][testPos].fn != null ?\n                        activeMaskset['tests'][testPos].fn.test(chrs, buffer, position, strict, opts)\n                        : (c == getBufferElement(activeMaskset['_buffer'], position, true) || c == opts.skipOptionalPartCharacter) ?\n                            { \"refresh\": true, c: getBufferElement(activeMaskset['_buffer'], position, true), pos: position }\n                            : false;\n                }\n\n                function PostProcessResults(maskForwards, results) {\n                    var hasValidActual = false;\n                    $.each(results, function (ndx, rslt) {\n                        hasValidActual = $.inArray(rslt[\"activeMasksetIndex\"], maskForwards) == -1 && rslt[\"result\"] !== false;\n                        if (hasValidActual) return false;\n                    });\n                    if (hasValidActual) { //strip maskforwards\n                        results = $.map(results, function (rslt, ndx) {\n                            if ($.inArray(rslt[\"activeMasksetIndex\"], maskForwards) == -1) {\n                                return rslt;\n                            } else {\n                                masksets[rslt[\"activeMasksetIndex\"]][\"lastValidPosition\"] = actualLVP;\n                            }\n                        });\n                    } else { //keep maskforwards with the least forward\n                        var lowestPos = -1, lowestIndex = -1, rsltValid;\n                        $.each(results, function (ndx, rslt) {\n                            if ($.inArray(rslt[\"activeMasksetIndex\"], maskForwards) != -1 && rslt[\"result\"] !== false & (lowestPos == -1 || lowestPos > rslt[\"result\"][\"pos\"])) {\n                                lowestPos = rslt[\"result\"][\"pos\"];\n                                lowestIndex = rslt[\"activeMasksetIndex\"];\n                            }\n                        });\n                        results = $.map(results, function (rslt, ndx) {\n                            if ($.inArray(rslt[\"activeMasksetIndex\"], maskForwards) != -1) {\n                                if (rslt[\"result\"][\"pos\"] == lowestPos) {\n                                    return rslt;\n                                } else if (rslt[\"result\"] !== false) {\n                                    for (var i = pos; i < lowestPos; i++) {\n                                        rsltValid = _isValid(i, masksets[rslt[\"activeMasksetIndex\"]], masksets[lowestIndex][\"buffer\"][i], true);\n                                        if (rsltValid === false) {\n                                            masksets[rslt[\"activeMasksetIndex\"]][\"lastValidPosition\"] = lowestPos - 1;\n                                            break;\n                                        } else {\n                                            setBufferElement(masksets[rslt[\"activeMasksetIndex\"]][\"buffer\"], i, masksets[lowestIndex][\"buffer\"][i], true);\n                                            masksets[rslt[\"activeMasksetIndex\"]][\"lastValidPosition\"] = i;\n                                        }\n                                    }\n                                    //also check check for the lowestpos with the new input\n                                    rsltValid = _isValid(lowestPos, masksets[rslt[\"activeMasksetIndex\"]], c, true);\n                                    if (rsltValid !== false) {\n                                        setBufferElement(masksets[rslt[\"activeMasksetIndex\"]][\"buffer\"], lowestPos, c, true);\n                                        masksets[rslt[\"activeMasksetIndex\"]][\"lastValidPosition\"] = lowestPos;\n                                    }\n                                    //console.log(\"ndx \" + rslt[\"activeMasksetIndex\"] + \" validate \" + masksets[rslt[\"activeMasksetIndex\"]][\"buffer\"].join('') + \" lv \" + masksets[rslt[\"activeMasksetIndex\"]]['lastValidPosition']);\n                                    return rslt;\n                                }\n                            }\n                        });\n                    }\n                    return results;\n                }\n\n                if (strict) {\n                    var result = _isValid(pos, getActiveMaskSet(), c, strict); //only check validity in current mask when validating strict\n                    if (result === true) {\n                        result = { \"pos\": pos }; //always take a possible corrected maskposition into account\n                    }\n                    return result;\n                }\n\n                var results = [], result = false, currentActiveMasksetIndex = activeMasksetIndex,\n                    actualBuffer = getActiveBuffer().slice(), actualLVP = getActiveMaskSet()[\"lastValidPosition\"],\n                    actualPrevious = seekPrevious(pos),\n                    maskForwards = [];\n                $.each(masksets, function (index, value) {\n                    if (typeof (value) == \"object\") {\n                        activeMasksetIndex = index;\n\n                        var maskPos = pos;\n                        var lvp = getActiveMaskSet()['lastValidPosition'],\n                            rsltValid;\n                        if (lvp == actualLVP) {\n                            if ((maskPos - actualLVP) > 1) {\n                                for (var i = lvp == -1 ? 0 : lvp; i < maskPos; i++) {\n                                    rsltValid = _isValid(i, getActiveMaskSet(), actualBuffer[i], true);\n                                    if (rsltValid === false) {\n                                        break;\n                                    } else {\n                                        setBufferElement(getActiveBuffer(), i, actualBuffer[i], true);\n                                        if (rsltValid === true) {\n                                            rsltValid = { \"pos\": i }; //always take a possible corrected maskposition into account\n                                        }\n                                        var newValidPosition = rsltValid.pos || i;\n                                        if (getActiveMaskSet()['lastValidPosition'] < newValidPosition)\n                                            getActiveMaskSet()['lastValidPosition'] = newValidPosition; //set new position from isValid\n                                    }\n                                }\n                            }\n                            //does the input match on a further position?\n                            if (!isMask(maskPos) && !_isValid(maskPos, getActiveMaskSet(), c, strict)) {\n                                var maxForward = seekNext(maskPos) - maskPos;\n                                for (var fw = 0; fw < maxForward; fw++) {\n                                    if (_isValid(++maskPos, getActiveMaskSet(), c, strict) !== false)\n                                        break;\n                                }\n                                maskForwards.push(activeMasksetIndex);\n                                //console.log('maskforward ' + activeMasksetIndex + \" pos \" + pos + \" maskPos \" + maskPos);\n                            }\n                        }\n\n                        if (getActiveMaskSet()['lastValidPosition'] >= actualLVP || activeMasksetIndex == currentActiveMasksetIndex) {\n                            if (maskPos >= 0 && maskPos < getMaskLength()) {\n                                result = _isValid(maskPos, getActiveMaskSet(), c, strict);\n                                if (result !== false) {\n                                    if (result === true) {\n                                        result = { \"pos\": maskPos }; //always take a possible corrected maskposition into account\n                                    }\n                                    var newValidPosition = result.pos || maskPos;\n                                    if (getActiveMaskSet()['lastValidPosition'] < newValidPosition)\n                                        getActiveMaskSet()['lastValidPosition'] = newValidPosition; //set new position from isValid\n                                }\n                                //console.log(\"pos \" + pos + \" ndx \" + activeMasksetIndex + \" validate \" + getActiveBuffer().join('') + \" lv \" + getActiveMaskSet()['lastValidPosition']);\n                                results.push({ \"activeMasksetIndex\": index, \"result\": result });\n                            }\n                        }\n                    }\n                });\n                activeMasksetIndex = currentActiveMasksetIndex; //reset activeMasksetIndex\n\n                return PostProcessResults(maskForwards, results); //return results of the multiple mask validations\n            }\n\n            function determineActiveMasksetIndex() {\n                var currentMasksetIndex = activeMasksetIndex,\n                    highestValid = { \"activeMasksetIndex\": 0, \"lastValidPosition\": -1, \"next\": -1 };\n                $.each(masksets, function (index, value) {\n                    if (typeof (value) == \"object\") {\n                        activeMasksetIndex = index;\n                        if (getActiveMaskSet()['lastValidPosition'] > highestValid['lastValidPosition']) {\n                            highestValid[\"activeMasksetIndex\"] = index;\n                            highestValid[\"lastValidPosition\"] = getActiveMaskSet()['lastValidPosition'];\n                            highestValid[\"next\"] = seekNext(getActiveMaskSet()['lastValidPosition']);\n                        } else if (getActiveMaskSet()['lastValidPosition'] == highestValid['lastValidPosition'] &&\n                            (highestValid['next'] == -1 || highestValid['next'] > seekNext(getActiveMaskSet()['lastValidPosition']))) {\n                            highestValid[\"activeMasksetIndex\"] = index;\n                            highestValid[\"lastValidPosition\"] = getActiveMaskSet()['lastValidPosition'];\n                            highestValid[\"next\"] = seekNext(getActiveMaskSet()['lastValidPosition']);\n                        }\n                    }\n                });\n\n                activeMasksetIndex = highestValid[\"lastValidPosition\"] != -1 && masksets[currentMasksetIndex][\"lastValidPosition\"] == highestValid[\"lastValidPosition\"] ? currentMasksetIndex : highestValid[\"activeMasksetIndex\"];\n                if (currentMasksetIndex != activeMasksetIndex) {\n                    clearBuffer(getActiveBuffer(), seekNext(highestValid[\"lastValidPosition\"]), getMaskLength());\n                    getActiveMaskSet()[\"writeOutBuffer\"] = true;\n                }\n                $el.data('_inputmask')['activeMasksetIndex'] = activeMasksetIndex; //store the activeMasksetIndex\n            }\n\n            function isMask(pos) {\n                var testPos = determineTestPosition(pos);\n                var test = getActiveTests()[testPos];\n\n                return test != undefined ? test.fn : false;\n            }\n\n            function determineTestPosition(pos) {\n                return pos % getActiveTests().length;\n            }\n\n            function getMaskLength() {\n                return opts.getMaskLength(getActiveBufferTemplate(), getActiveMaskSet()['greedy'], getActiveMaskSet()['repeat'], getActiveBuffer(), opts);\n            }\n\n            //pos: from position\n\n            function seekNext(pos) {\n                var maskL = getMaskLength();\n                if (pos >= maskL) return maskL;\n                var position = pos;\n                while (++position < maskL && !isMask(position)) {\n                }\n                return position;\n            }\n\n            //pos: from position\n\n            function seekPrevious(pos) {\n                var position = pos;\n                if (position <= 0) return 0;\n\n                while (--position > 0 && !isMask(position)) {\n                }\n                return position;\n            }\n\n            function setBufferElement(buffer, position, element, autoPrepare) {\n                if (autoPrepare) position = prepareBuffer(buffer, position);\n\n                var test = getActiveTests()[determineTestPosition(position)];\n                var elem = element;\n                if (elem != undefined && test != undefined) {\n                    switch (test.casing) {\n                        case \"upper\":\n                            elem = element.toUpperCase();\n                            break;\n                        case \"lower\":\n                            elem = element.toLowerCase();\n                            break;\n                    }\n                }\n\n                buffer[position] = elem;\n            }\n\n            function getBufferElement(buffer, position, autoPrepare) {\n                if (autoPrepare) position = prepareBuffer(buffer, position);\n                return buffer[position];\n            }\n\n            //needed to handle the non-greedy mask repetitions\n\n            function prepareBuffer(buffer, position) {\n                var j;\n                while (buffer[position] == undefined && buffer.length < getMaskLength()) {\n                    j = 0;\n                    while (getActiveBufferTemplate()[j] !== undefined) { //add a new buffer\n                        buffer.push(getActiveBufferTemplate()[j++]);\n                    }\n                }\n\n                return position;\n            }\n\n            function writeBuffer(input, buffer, caretPos) {\n                input._valueSet(buffer.join(''));\n                if (caretPos != undefined) {\n                    caret(input, caretPos);\n                }\n            }\n\n            function clearBuffer(buffer, start, end, stripNomasks) {\n                for (var i = start, maskL = getMaskLength() ; i < end && i < maskL; i++) {\n                    if (stripNomasks === true) {\n                        if (!isMask(i))\n                            setBufferElement(buffer, i, \"\");\n                    } else\n                        setBufferElement(buffer, i, getBufferElement(getActiveBufferTemplate().slice(), i, true));\n                }\n            }\n\n            function setReTargetPlaceHolder(buffer, pos) {\n                var testPos = determineTestPosition(pos);\n                setBufferElement(buffer, pos, getBufferElement(getActiveBufferTemplate(), testPos));\n            }\n\n            function getPlaceHolder(pos) {\n                return opts.placeholder.charAt(pos % opts.placeholder.length);\n            }\n\n            function checkVal(input, writeOut, strict, nptvl, intelliCheck) {\n                var inputValue = nptvl != undefined ? nptvl.slice() : truncateInput(input._valueGet()).split('');\n\n                $.each(masksets, function (ndx, ms) {\n                    if (typeof (ms) == \"object\") {\n                        ms[\"buffer\"] = ms[\"_buffer\"].slice();\n                        ms[\"lastValidPosition\"] = -1;\n                        ms[\"p\"] = -1;\n                    }\n                });\n                if (strict !== true) activeMasksetIndex = 0;\n                if (writeOut) input._valueSet(\"\"); //initial clear\n                var ml = getMaskLength();\n                $.each(inputValue, function (ndx, charCode) {\n                    if (intelliCheck === true) {\n                        var p = getActiveMaskSet()[\"p\"], lvp = p == -1 ? p : seekPrevious(p),\n                            pos = lvp == -1 ? ndx : seekNext(lvp);\n                        if ($.inArray(charCode, getActiveBufferTemplate().slice(lvp + 1, pos)) == -1) {\n                            keypressEvent.call(input, undefined, true, charCode.charCodeAt(0), writeOut, strict, ndx);\n                        }\n                    } else {\n                        keypressEvent.call(input, undefined, true, charCode.charCodeAt(0), writeOut, strict, ndx);\n                    }\n                });\n\n                if (strict === true && getActiveMaskSet()[\"p\"] != -1) {\n                    getActiveMaskSet()[\"lastValidPosition\"] = seekPrevious(getActiveMaskSet()[\"p\"]);\n                }\n            }\n\n            function escapeRegex(str) {\n                return $.inputmask.escapeRegex.call(this, str);\n            }\n\n            function truncateInput(inputValue) {\n                return inputValue.replace(new RegExp(\"(\" + escapeRegex(getActiveBufferTemplate().join('')) + \")*$\"), \"\");\n            }\n\n            function clearOptionalTail(input) {\n                var buffer = getActiveBuffer(), tmpBuffer = buffer.slice(), testPos, pos;\n                for (var pos = tmpBuffer.length - 1; pos >= 0; pos--) {\n                    var testPos = determineTestPosition(pos);\n                    if (getActiveTests()[testPos].optionality) {\n                        if (!isMask(pos) || !isValid(pos, buffer[pos], true))\n                            tmpBuffer.pop();\n                        else break;\n                    } else break;\n                }\n                writeBuffer(input, tmpBuffer);\n            }\n\n            function unmaskedvalue($input, skipDatepickerCheck) {\n                if (getActiveTests() && (skipDatepickerCheck === true || !$input.hasClass('hasDatepicker'))) {\n                    //checkVal(input, false, true);\n                    var umValue = $.map(getActiveBuffer(), function (element, index) {\n                        return isMask(index) && isValid(index, element, true) ? element : null;\n                    });\n                    var unmaskedValue = (isRTL ? umValue.reverse() : umValue).join('');\n                    return opts.onUnMask != undefined ? opts.onUnMask.call(this, getActiveBuffer().join(''), unmaskedValue) : unmaskedValue;\n                } else {\n                    return $input[0]._valueGet();\n                }\n            }\n\n            function TranslatePosition(pos) {\n                if (isRTL && typeof pos == 'number' && (!opts.greedy || opts.placeholder != \"\")) {\n                    var bffrLght = getActiveBuffer().length;\n                    pos = bffrLght - pos;\n                }\n                return pos;\n            }\n\n            function caret(input, begin, end) {\n                var npt = input.jquery && input.length > 0 ? input[0] : input, range;\n                if (typeof begin == 'number') {\n                    begin = TranslatePosition(begin);\n                    end = TranslatePosition(end);\n                    if (!$(input).is(':visible')) {\n                        return;\n                    }\n                    end = (typeof end == 'number') ? end : begin;\n                    npt.scrollLeft = npt.scrollWidth;\n                    if (opts.insertMode == false && begin == end) end++; //set visualization for insert/overwrite mode\n                    if (npt.setSelectionRange) {\n                        npt.selectionStart = begin;\n                        npt.selectionEnd = android ? begin : end;\n\n                    } else if (npt.createTextRange) {\n                        range = npt.createTextRange();\n                        range.collapse(true);\n                        range.moveEnd('character', end);\n                        range.moveStart('character', begin);\n                        range.select();\n                    }\n                } else {\n                    if (!$(input).is(':visible')) {\n                        return { \"begin\": 0, \"end\": 0 };\n                    }\n                    if (npt.setSelectionRange) {\n                        begin = npt.selectionStart;\n                        end = npt.selectionEnd;\n                    } else if (document.selection && document.selection.createRange) {\n                        range = document.selection.createRange();\n                        begin = 0 - range.duplicate().moveStart('character', -100000);\n                        end = begin + range.text.length;\n                    }\n                    begin = TranslatePosition(begin);\n                    end = TranslatePosition(end);\n                    return { \"begin\": begin, \"end\": end };\n                }\n            }\n\n            function isComplete(buffer) { //return true / false / undefined (repeat *)\n                if (opts.repeat == \"*\") return undefined;\n                var complete = false, highestValidPosition = 0, currentActiveMasksetIndex = activeMasksetIndex;\n                $.each(masksets, function (ndx, ms) {\n                    if (typeof (ms) == \"object\") {\n                        activeMasksetIndex = ndx;\n                        var aml = seekPrevious(getMaskLength());\n                        if (ms[\"lastValidPosition\"] >= highestValidPosition && ms[\"lastValidPosition\"] == aml) {\n                            var msComplete = true;\n                            for (var i = 0; i <= aml; i++) {\n                                var mask = isMask(i), testPos = determineTestPosition(i);\n                                if ((mask && (buffer[i] == undefined || buffer[i] == getPlaceHolder(i))) || (!mask && buffer[i] != getActiveBufferTemplate()[testPos])) {\n                                    msComplete = false;\n                                    break;\n                                }\n                            }\n                            complete = complete || msComplete;\n                            if (complete) //break loop\n                                return false;\n                        }\n                        highestValidPosition = ms[\"lastValidPosition\"];\n                    }\n                });\n                activeMasksetIndex = currentActiveMasksetIndex; //reset activeMaskset\n                return complete;\n            }\n\n            function isSelection(begin, end) {\n                return isRTL ? (begin - end) > 1 || ((begin - end) == 1 && opts.insertMode) :\n                    (end - begin) > 1 || ((end - begin) == 1 && opts.insertMode);\n            }\n\n\n            //private functions\n            function installEventRuler(npt) {\n                var events = $._data(npt).events;\n\n                $.each(events, function (eventType, eventHandlers) {\n                    $.each(eventHandlers, function (ndx, eventHandler) {\n                        if (eventHandler.namespace == \"inputmask\") {\n                            if (eventHandler.type != \"setvalue\") {\n                                var handler = eventHandler.handler;\n                                eventHandler.handler = function (e) {\n                                    if (this.readOnly || this.disabled)\n                                        e.preventDefault;\n                                    else\n                                        return handler.apply(this, arguments);\n                                };\n                            }\n                        }\n                    });\n                });\n            }\n\n            function patchValueProperty(npt) {\n                var valueProperty;\n                if (Object.getOwnPropertyDescriptor)\n                    valueProperty = Object.getOwnPropertyDescriptor(npt, \"value\");\n                if (valueProperty && valueProperty.get) {\n                    if (!npt._valueGet) {\n                        var valueGet = valueProperty.get;\n                        var valueSet = valueProperty.set;\n                        npt._valueGet = function () {\n                            return isRTL ? valueGet.call(this).split('').reverse().join('') : valueGet.call(this);\n                        };\n                        npt._valueSet = function (value) {\n                            valueSet.call(this, isRTL ? value.split('').reverse().join('') : value);\n                        };\n\n                        Object.defineProperty(npt, \"value\", {\n                            get: function () {\n                                var $self = $(this), inputData = $(this).data('_inputmask'), masksets = inputData['masksets'],\n                                    activeMasksetIndex = inputData['activeMasksetIndex'];\n                                return inputData && inputData['opts'].autoUnmask ? $self.inputmask('unmaskedvalue') : valueGet.call(this) != masksets[activeMasksetIndex]['_buffer'].join('') ? valueGet.call(this) : '';\n                            },\n                            set: function (value) {\n                                valueSet.call(this, value);\n                                $(this).triggerHandler('setvalue.inputmask');\n                            }\n                        });\n                    }\n                } else if (document.__lookupGetter__ && npt.__lookupGetter__(\"value\")) {\n                    if (!npt._valueGet) {\n                        var valueGet = npt.__lookupGetter__(\"value\");\n                        var valueSet = npt.__lookupSetter__(\"value\");\n                        npt._valueGet = function () {\n                            return isRTL ? valueGet.call(this).split('').reverse().join('') : valueGet.call(this);\n                        };\n                        npt._valueSet = function (value) {\n                            valueSet.call(this, isRTL ? value.split('').reverse().join('') : value);\n                        };\n\n                        npt.__defineGetter__(\"value\", function () {\n                            var $self = $(this), inputData = $(this).data('_inputmask'), masksets = inputData['masksets'],\n                                activeMasksetIndex = inputData['activeMasksetIndex'];\n                            return inputData && inputData['opts'].autoUnmask ? $self.inputmask('unmaskedvalue') : valueGet.call(this) != masksets[activeMasksetIndex]['_buffer'].join('') ? valueGet.call(this) : '';\n                        });\n                        npt.__defineSetter__(\"value\", function (value) {\n                            valueSet.call(this, value);\n                            $(this).triggerHandler('setvalue.inputmask');\n                        });\n                    }\n                } else {\n                    if (!npt._valueGet) {\n                        npt._valueGet = function () { return isRTL ? this.value.split('').reverse().join('') : this.value; };\n                        npt._valueSet = function (value) { this.value = isRTL ? value.split('').reverse().join('') : value; };\n                    }\n                    if ($.valHooks.text == undefined || $.valHooks.text.inputmaskpatch != true) {\n                        var valueGet = $.valHooks.text && $.valHooks.text.get ? $.valHooks.text.get : function (elem) { return elem.value; };\n                        var valueSet = $.valHooks.text && $.valHooks.text.set ? $.valHooks.text.set : function (elem, value) {\n                            elem.value = value;\n                            return elem;\n                        };\n\n                        jQuery.extend($.valHooks, {\n                            text: {\n                                get: function (elem) {\n                                    var $elem = $(elem);\n                                    if ($elem.data('_inputmask')) {\n                                        if ($elem.data('_inputmask')['opts'].autoUnmask)\n                                            return $elem.inputmask('unmaskedvalue');\n                                        else {\n                                            var result = valueGet(elem),\n                                                inputData = $elem.data('_inputmask'), masksets = inputData['masksets'],\n                                                activeMasksetIndex = inputData['activeMasksetIndex'];\n                                            return result != masksets[activeMasksetIndex]['_buffer'].join('') ? result : '';\n                                        }\n                                    } else return valueGet(elem);\n                                },\n                                set: function (elem, value) {\n                                    var $elem = $(elem);\n                                    var result = valueSet(elem, value);\n                                    if ($elem.data('_inputmask')) $elem.triggerHandler('setvalue.inputmask');\n                                    return result;\n                                },\n                                inputmaskpatch: true\n                            }\n                        });\n                    }\n                }\n            }\n\n            //shift chars to left from start to end and put c at end position if defined\n\n            function shiftL(start, end, c, maskJumps) {\n                var buffer = getActiveBuffer();\n                if (maskJumps !== false) //jumping over nonmask position\n                    while (!isMask(start) && start - 1 >= 0) start--;\n                for (var i = start; i < end && i < getMaskLength() ; i++) {\n                    if (isMask(i)) {\n                        setReTargetPlaceHolder(buffer, i);\n                        var j = seekNext(i);\n                        var p = getBufferElement(buffer, j);\n                        if (p != getPlaceHolder(j)) {\n                            if (j < getMaskLength() && isValid(i, p, true) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) {\n                                setBufferElement(buffer, i, p, true);\n                            } else {\n                                if (isMask(i))\n                                    break;\n                            }\n                        }\n                    } else {\n                        setReTargetPlaceHolder(buffer, i);\n                    }\n                }\n                if (c != undefined)\n                    setBufferElement(buffer, seekPrevious(end), c);\n\n                if (getActiveMaskSet()[\"greedy\"] == false) {\n                    var trbuffer = truncateInput(buffer.join('')).split('');\n                    buffer.length = trbuffer.length;\n                    for (var i = 0, bl = buffer.length; i < bl; i++) {\n                        buffer[i] = trbuffer[i];\n                    }\n                    if (buffer.length == 0) getActiveMaskSet()[\"buffer\"] = getActiveBufferTemplate().slice();\n                }\n                return start; //return the used start position\n            }\n\n            function shiftR(start, end, c) {\n                var buffer = getActiveBuffer();\n                if (getBufferElement(buffer, start, true) != getPlaceHolder(start)) {\n                    for (var i = seekPrevious(end) ; i > start && i >= 0; i--) {\n                        if (isMask(i)) {\n                            var j = seekPrevious(i);\n                            var t = getBufferElement(buffer, j);\n                            if (t != getPlaceHolder(j)) {\n                                if (isValid(j, t, true) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) {\n                                    setBufferElement(buffer, i, t, true);\n                                    setReTargetPlaceHolder(buffer, j);\n                                } //else break;\n                            }\n                        } else\n                            setReTargetPlaceHolder(buffer, i);\n                    }\n                }\n                if (c != undefined && getBufferElement(buffer, start) == getPlaceHolder(start))\n                    setBufferElement(buffer, start, c);\n                var lengthBefore = buffer.length;\n                if (getActiveMaskSet()[\"greedy\"] == false) {\n                    var trbuffer = truncateInput(buffer.join('')).split('');\n                    buffer.length = trbuffer.length;\n                    for (var i = 0, bl = buffer.length; i < bl; i++) {\n                        buffer[i] = trbuffer[i];\n                    }\n                    if (buffer.length == 0) getActiveMaskSet()[\"buffer\"] = getActiveBufferTemplate().slice();\n                }\n                return end - (lengthBefore - buffer.length); //return new start position\n            }\n\n            function HandleRemove(input, k, pos) {\n                if (opts.numericInput || isRTL) {\n                    switch (k) {\n                        case opts.keyCode.BACKSPACE:\n                            k = opts.keyCode.DELETE;\n                            break;\n                        case opts.keyCode.DELETE:\n                            k = opts.keyCode.BACKSPACE;\n                            break;\n                    }\n                    if (isRTL) {\n                        var pend = pos.end;\n                        pos.end = pos.begin;\n                        pos.begin = pend;\n                    }\n                }\n\n                var isSelection = true;\n                if (pos.begin == pos.end) {\n                    var posBegin = k == opts.keyCode.BACKSPACE ? pos.begin - 1 : pos.begin;\n                    if (opts.isNumeric && opts.radixPoint != \"\" && getActiveBuffer()[posBegin] == opts.radixPoint) {\n                        pos.begin = (getActiveBuffer().length - 1 == posBegin) /* radixPoint is latest? delete it */ ? pos.begin : k == opts.keyCode.BACKSPACE ? posBegin : seekNext(posBegin);\n                        pos.end = pos.begin;\n                    }\n                    isSelection = false;\n                    if (k == opts.keyCode.BACKSPACE)\n                        pos.begin--;\n                    else if (k == opts.keyCode.DELETE)\n                        pos.end++;\n                } else if (pos.end - pos.begin == 1 && !opts.insertMode) {\n                    isSelection = false;\n                    if (k == opts.keyCode.BACKSPACE)\n                        pos.begin--;\n                }\n\n                clearBuffer(getActiveBuffer(), pos.begin, pos.end);\n\n                var ml = getMaskLength();\n                if (opts.greedy == false) {\n                    shiftL(pos.begin, ml, undefined, !isRTL && (k == opts.keyCode.BACKSPACE && !isSelection));\n                } else {\n                    var newpos = pos.begin;\n                    for (var i = pos.begin; i < pos.end; i++) { //seeknext to skip placeholders at start in selection\n                        if (isMask(i) || !isSelection)\n                            newpos = shiftL(pos.begin, ml, undefined, !isRTL && (k == opts.keyCode.BACKSPACE && !isSelection));\n                    }\n                    if (!isSelection) pos.begin = newpos;\n                }\n                var firstMaskPos = seekNext(-1);\n                clearBuffer(getActiveBuffer(), pos.begin, pos.end, true);\n                checkVal(input, false, masksets[1] == undefined || firstMaskPos >= pos.end, getActiveBuffer());\n                if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {\n                    getActiveMaskSet()[\"lastValidPosition\"] = -1;\n                    getActiveMaskSet()[\"p\"] = firstMaskPos;\n                } else {\n                    getActiveMaskSet()[\"p\"] = pos.begin;\n                }\n            }\n\n            function keydownEvent(e) {\n                //Safari 5.1.x - modal dialog fires keypress twice workaround\n                skipKeyPressEvent = false;\n                var input = this, $input = $(input), k = e.keyCode, pos = caret(input);\n\n                //backspace, delete, and escape get special treatment\n                if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iphone && k == 127) || e.ctrlKey && k == 88) { //backspace/delete\n                    e.preventDefault(); //stop default action but allow propagation\n                    if (k == 88) valueOnFocus = getActiveBuffer().join('');\n                    HandleRemove(input, k, pos);\n                    determineActiveMasksetIndex();\n                    writeBuffer(input, getActiveBuffer(), getActiveMaskSet()[\"p\"]);\n                    if (input._valueGet() == getActiveBufferTemplate().join(''))\n                        $input.trigger('cleared');\n\n                    if (opts.showTooltip) { //update tooltip\n                        $input.prop(\"title\", getActiveMaskSet()[\"mask\"]);\n                    }\n                } else if (k == opts.keyCode.END || k == opts.keyCode.PAGE_DOWN) { //when END or PAGE_DOWN pressed set position at lastmatch\n                    setTimeout(function () {\n                        var caretPos = seekNext(getActiveMaskSet()[\"lastValidPosition\"]);\n                        if (!opts.insertMode && caretPos == getMaskLength() && !e.shiftKey) caretPos--;\n                        caret(input, e.shiftKey ? pos.begin : caretPos, caretPos);\n                    }, 0);\n                } else if ((k == opts.keyCode.HOME && !e.shiftKey) || k == opts.keyCode.PAGE_UP) { //Home or page_up\n                    caret(input, 0, e.shiftKey ? pos.begin : 0);\n                } else if (k == opts.keyCode.ESCAPE || (k == 90 && e.ctrlKey)) { //escape && undo\n                    checkVal(input, true, false, valueOnFocus.split(''));\n                    $input.click();\n                } else if (k == opts.keyCode.INSERT && !(e.shiftKey || e.ctrlKey)) { //insert\n                    opts.insertMode = !opts.insertMode;\n                    caret(input, !opts.insertMode && pos.begin == getMaskLength() ? pos.begin - 1 : pos.begin);\n                } else if (opts.insertMode == false && !e.shiftKey) {\n                    if (k == opts.keyCode.RIGHT) {\n                        setTimeout(function () {\n                            var caretPos = caret(input);\n                            caret(input, caretPos.begin);\n                        }, 0);\n                    } else if (k == opts.keyCode.LEFT) {\n                        setTimeout(function () {\n                            var caretPos = caret(input);\n                            caret(input, caretPos.begin - 1);\n                        }, 0);\n                    }\n                }\n\n                var currentCaretPos = caret(input);\n                if (opts.onKeyDown.call(this, e, getActiveBuffer(), opts) === true) //extra stuff to execute on keydown\n                    caret(input, currentCaretPos.begin, currentCaretPos.end);\n                ignorable = $.inArray(k, opts.ignorables) != -1;\n            }\n\n\n            function keypressEvent(e, checkval, k, writeOut, strict, ndx) {\n                //Safari 5.1.x - modal dialog fires keypress twice workaround\n                if (k == undefined && skipKeyPressEvent) return false;\n                skipKeyPressEvent = true;\n\n                var input = this, $input = $(input);\n\n                e = e || window.event;\n                var k = checkval ? k : (e.which || e.charCode || e.keyCode);\n\n                if (checkval !== true && (!(e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable))) {\n                    return true;\n                } else {\n                    if (k) {\n                        //special treat the decimal separator\n                        if (checkval !== true && k == 46 && e.shiftKey == false && opts.radixPoint == \",\") k = 44;\n\n                        var pos, results, result, c = String.fromCharCode(k);\n                        if (checkval) {\n                            var pcaret = strict ? ndx : getActiveMaskSet()[\"lastValidPosition\"] + 1;\n                            pos = { begin: pcaret, end: pcaret };\n                        } else {\n                            pos = caret(input);\n                        }\n\n                        //should we clear a possible selection??\n                        var isSlctn = isSelection(pos.begin, pos.end), redetermineLVP = false,\n                            initialIndex = activeMasksetIndex;\n                        if (isSlctn) {\n                            activeMasksetIndex = initialIndex;\n                            $.each(masksets, function (ndx, lmnt) { //init undobuffer for recovery when not valid\n                                if (typeof (lmnt) == \"object\") {\n                                    activeMasksetIndex = ndx;\n                                    getActiveMaskSet()[\"undoBuffer\"] = getActiveBuffer().join('');\n                                }\n                            });\n                            HandleRemove(input, opts.keyCode.DELETE, pos);\n                            if (!opts.insertMode) { //preserve some space\n                                $.each(masksets, function (ndx, lmnt) {\n                                    if (typeof (lmnt) == \"object\") {\n                                        activeMasksetIndex = ndx;\n                                        shiftR(pos.begin, getMaskLength());\n                                        getActiveMaskSet()[\"lastValidPosition\"] = seekNext(getActiveMaskSet()[\"lastValidPosition\"]);\n                                    }\n                                });\n                            }\n                            activeMasksetIndex = initialIndex; //restore index\n                        }\n\n                        var radixPosition = getActiveBuffer().join('').indexOf(opts.radixPoint);\n                        if (opts.isNumeric && checkval !== true && radixPosition != -1) {\n                            if (opts.greedy && pos.begin <= radixPosition) {\n                                pos.begin = seekPrevious(pos.begin);\n                                pos.end = pos.begin;\n                            } else if (c == opts.radixPoint) {\n                                pos.begin = radixPosition;\n                                pos.end = pos.begin;\n                            }\n                        }\n\n\n                        var p = pos.begin;\n                        results = isValid(p, c, strict);\n                        if (strict === true) results = [{ \"activeMasksetIndex\": activeMasksetIndex, \"result\": results }];\n                        var minimalForwardPosition = -1;\n                        $.each(results, function (index, result) {\n                            activeMasksetIndex = result[\"activeMasksetIndex\"];\n                            getActiveMaskSet()[\"writeOutBuffer\"] = true;\n                            var np = result[\"result\"];\n                            if (np !== false) {\n                                var refresh = false, buffer = getActiveBuffer();\n                                if (np !== true) {\n                                    refresh = np[\"refresh\"]; //only rewrite buffer from isValid\n                                    p = np.pos != undefined ? np.pos : p; //set new position from isValid\n                                    c = np.c != undefined ? np.c : c; //set new char from isValid\n                                }\n                                if (refresh !== true) {\n                                    if (opts.insertMode == true) {\n                                        var lastUnmaskedPosition = getMaskLength();\n                                        var bfrClone = buffer.slice();\n                                        while (getBufferElement(bfrClone, lastUnmaskedPosition, true) != getPlaceHolder(lastUnmaskedPosition) && lastUnmaskedPosition >= p) {\n                                            lastUnmaskedPosition = lastUnmaskedPosition == 0 ? -1 : seekPrevious(lastUnmaskedPosition);\n                                        }\n                                        if (lastUnmaskedPosition >= p) {\n                                            shiftR(p, getMaskLength(), c);\n                                            //shift the lvp if needed\n                                            var lvp = getActiveMaskSet()[\"lastValidPosition\"], nlvp = seekNext(lvp);\n                                            if (nlvp != getMaskLength() && lvp >= p && (getBufferElement(getActiveBuffer(), nlvp, true) != getPlaceHolder(nlvp))) {\n                                                getActiveMaskSet()[\"lastValidPosition\"] = nlvp;\n                                            }\n                                        } else getActiveMaskSet()[\"writeOutBuffer\"] = false;\n                                    } else setBufferElement(buffer, p, c, true);\n                                    if (minimalForwardPosition == -1 || minimalForwardPosition > seekNext(p)) {\n                                        minimalForwardPosition = seekNext(p);\n                                    }\n                                } else if (!strict) {\n                                    var nextPos = p < getMaskLength() ? p + 1 : p;\n                                    if (minimalForwardPosition == -1 || minimalForwardPosition > nextPos) {\n                                        minimalForwardPosition = nextPos;\n                                    }\n                                }\n                                if (minimalForwardPosition > getActiveMaskSet()[\"p\"])\n                                    getActiveMaskSet()[\"p\"] = minimalForwardPosition; //needed for checkval strict \n                            }\n                        });\n\n                        if (strict !== true) {\n                            activeMasksetIndex = initialIndex;\n                            determineActiveMasksetIndex();\n                        }\n                        if (writeOut !== false) {\n                            $.each(results, function (ndx, rslt) {\n                                if (rslt[\"activeMasksetIndex\"] == activeMasksetIndex) {\n                                    result = rslt;\n                                    return false;\n                                }\n                            });\n                            if (result != undefined) {\n                                var self = this;\n                                setTimeout(function () { opts.onKeyValidation.call(self, result[\"result\"], opts); }, 0);\n                                if (getActiveMaskSet()[\"writeOutBuffer\"] && result[\"result\"] !== false) {\n                                    var buffer = getActiveBuffer();\n\n                                    var newCaretPosition;\n                                    if (checkval) {\n                                        newCaretPosition = undefined;\n                                    } else if (opts.numericInput) {\n                                        if (p > radixPosition) {\n                                            newCaretPosition = seekPrevious(minimalForwardPosition);\n                                        } else if (c == opts.radixPoint) {\n                                            newCaretPosition = minimalForwardPosition - 1;\n                                        } else newCaretPosition = seekPrevious(minimalForwardPosition - 1);\n                                    } else {\n                                        newCaretPosition = minimalForwardPosition;\n                                    }\n\n                                    writeBuffer(input, buffer, newCaretPosition);\n                                    if (checkval !== true) {\n                                        setTimeout(function () { //timeout needed for IE\n                                            if (isComplete(buffer) === true)\n                                                $input.trigger(\"complete\");\n                                            skipInputEvent = true;\n                                            $input.trigger(\"input\");\n                                        }, 0);\n                                    }\n                                } else if (isSlctn) {\n                                    getActiveMaskSet()[\"buffer\"] = getActiveMaskSet()[\"undoBuffer\"].split('');\n                                }\n                            }\n                        }\n\n                        if (opts.showTooltip) { //update tooltip\n                            $input.prop(\"title\", getActiveMaskSet()[\"mask\"]);\n                        }\n\n                        //needed for IE8 and below\n                        if (e) e.preventDefault ? e.preventDefault() : e.returnValue = false;\n                    }\n                }\n            }\n\n            function keyupEvent(e) {\n                var $input = $(this), input = this, k = e.keyCode, buffer = getActiveBuffer();\n\n                if (androidchrome && k == opts.keyCode.BACKSPACE) {\n                    if (chromeValueOnInput == input._valueGet())\n                        keydownEvent.call(this, e);\n                }\n\n                opts.onKeyUp.call(this, e, buffer, opts); //extra stuff to execute on keyup\n                if (k == opts.keyCode.TAB && opts.showMaskOnFocus) {\n                    if ($input.hasClass('focus.inputmask') && input._valueGet().length == 0) {\n                        buffer = getActiveBufferTemplate().slice();\n                        writeBuffer(input, buffer);\n                        caret(input, 0);\n                        valueOnFocus = getActiveBuffer().join('');\n                    } else {\n                        writeBuffer(input, buffer);\n                        if (buffer.join('') == getActiveBufferTemplate().join('') && $.inArray(opts.radixPoint, buffer) != -1) {\n                            caret(input, TranslatePosition(0));\n                            $input.click();\n                        } else\n                            caret(input, TranslatePosition(0), TranslatePosition(getMaskLength()));\n                    }\n                }\n            }\n\n            function inputEvent(e) {\n                if (skipInputEvent === true) {\n                    skipInputEvent = false;\n                    return true;\n                }\n                var input = this, $input = $(input);\n\n                chromeValueOnInput = getActiveBuffer().join('');\n                checkVal(input, false, false);\n                writeBuffer(input, getActiveBuffer());\n                if (isComplete(getActiveBuffer()) === true)\n                    $input.trigger(\"complete\");\n                $input.click();\n            }\n\n            function mask(el) {\n                $el = $(el);\n                if ($el.is(\":input\")) {\n                    //store tests & original buffer in the input element - used to get the unmasked value\n                    $el.data('_inputmask', {\n                        'masksets': masksets,\n                        'activeMasksetIndex': activeMasksetIndex,\n                        'opts': opts,\n                        'isRTL': false\n                    });\n\n                    //show tooltip\n                    if (opts.showTooltip) {\n                        $el.prop(\"title\", getActiveMaskSet()[\"mask\"]);\n                    }\n\n                    //correct greedy setting if needed\n                    getActiveMaskSet()['greedy'] = getActiveMaskSet()['greedy'] ? getActiveMaskSet()['greedy'] : getActiveMaskSet()['repeat'] == 0;\n\n                    //handle maxlength attribute\n                    if ($el.attr(\"maxLength\") != null) //only when the attribute is set\n                    {\n                        var maxLength = $el.prop('maxLength');\n                        if (maxLength > -1) { //handle *-repeat\n                            $.each(masksets, function (ndx, ms) {\n                                if (typeof (ms) == \"object\") {\n                                    if (ms[\"repeat\"] == \"*\") {\n                                        ms[\"repeat\"] = maxLength;\n                                    }\n                                }\n                            });\n                        }\n                        if (getMaskLength() >= maxLength && maxLength > -1) { //FF sets no defined max length to -1 \n                            if (maxLength < getActiveBufferTemplate().length) getActiveBufferTemplate().length = maxLength;\n                            if (getActiveMaskSet()['greedy'] == false) {\n                                getActiveMaskSet()['repeat'] = Math.round(maxLength / getActiveBufferTemplate().length);\n                            }\n                            $el.prop('maxLength', getMaskLength() * 2);\n                        }\n                    }\n\n                    patchValueProperty(el);\n\n                    if (opts.numericInput) opts.isNumeric = opts.numericInput;\n                    if (el.dir == \"rtl\" || (opts.numericInput && opts.rightAlignNumerics) || (opts.isNumeric && opts.rightAlignNumerics))\n                        $el.css(\"text-align\", \"right\");\n\n                    if (el.dir == \"rtl\" || opts.numericInput) {\n                        el.dir = \"ltr\";\n                        $el.removeAttr(\"dir\");\n                        var inputData = $el.data('_inputmask');\n                        inputData['isRTL'] = true;\n                        $el.data('_inputmask', inputData);\n                        isRTL = true;\n                    }\n\n                    //unbind all events - to make sure that no other mask will interfere when re-masking\n                    $el.unbind(\".inputmask\");\n                    $el.removeClass('focus.inputmask');\n                    //bind events\n                    $el.closest('form').bind(\"submit\", function () { //trigger change on submit if any\n                        if (valueOnFocus != getActiveBuffer().join('')) {\n                            $el.change();\n                        }\n                    }).bind('reset', function () {\n                        setTimeout(function () {\n                            $el.trigger(\"setvalue\");\n                        }, 0);\n                    });\n                    $el.bind(\"mouseenter.inputmask\", function () {\n                        var $input = $(this), input = this;\n                        if (!$input.hasClass('focus.inputmask') && opts.showMaskOnHover) {\n                            if (input._valueGet() != getActiveBuffer().join('')) {\n                                writeBuffer(input, getActiveBuffer());\n                            }\n                        }\n                    }).bind(\"blur.inputmask\", function () {\n                        var $input = $(this), input = this, nptValue = input._valueGet(), buffer = getActiveBuffer();\n                        $input.removeClass('focus.inputmask');\n                        if (valueOnFocus != getActiveBuffer().join('')) {\n                            $input.change();\n                        }\n                        if (opts.clearMaskOnLostFocus && nptValue != '') {\n                            if (nptValue == getActiveBufferTemplate().join(''))\n                                input._valueSet('');\n                            else { //clearout optional tail of the mask\n                                clearOptionalTail(input);\n                            }\n                        }\n                        if (isComplete(buffer) === false) {\n                            $input.trigger(\"incomplete\");\n                            if (opts.clearIncomplete) {\n                                $.each(masksets, function (ndx, ms) {\n                                    if (typeof (ms) == \"object\") {\n                                        ms[\"buffer\"] = ms[\"_buffer\"].slice();\n                                        ms[\"lastValidPosition\"] = -1;\n                                    }\n                                });\n                                activeMasksetIndex = 0;\n                                if (opts.clearMaskOnLostFocus)\n                                    input._valueSet('');\n                                else {\n                                    buffer = getActiveBufferTemplate().slice();\n                                    writeBuffer(input, buffer);\n                                }\n                            }\n                        }\n                    }).bind(\"focus.inputmask\", function () {\n                        var $input = $(this), input = this, nptValue = input._valueGet();\n                        if (opts.showMaskOnFocus && !$input.hasClass('focus.inputmask') && (!opts.showMaskOnHover || (opts.showMaskOnHover && nptValue == ''))) {\n                            if (input._valueGet() != getActiveBuffer().join('')) {\n                                writeBuffer(input, getActiveBuffer(), seekNext(getActiveMaskSet()[\"lastValidPosition\"]));\n                            }\n                        }\n                        $input.addClass('focus.inputmask');\n                        valueOnFocus = getActiveBuffer().join('');\n                    }).bind(\"mouseleave.inputmask\", function () {\n                        var $input = $(this), input = this;\n                        if (opts.clearMaskOnLostFocus) {\n                            if (!$input.hasClass('focus.inputmask') && input._valueGet() != $input.attr(\"placeholder\")) {\n                                if (input._valueGet() == getActiveBufferTemplate().join('') || input._valueGet() == '')\n                                    input._valueSet('');\n                                else { //clearout optional tail of the mask\n                                    clearOptionalTail(input);\n                                }\n                            }\n                        }\n                    }).bind(\"click.inputmask\", function () {\n                        var input = this;\n                        setTimeout(function () {\n                            var selectedCaret = caret(input), buffer = getActiveBuffer();\n                            if (selectedCaret.begin == selectedCaret.end) {\n                                var clickPosition = isRTL ? TranslatePosition(selectedCaret.begin) : selectedCaret.begin,\n                                    lvp = getActiveMaskSet()[\"lastValidPosition\"],\n                                    lastPosition;\n                                if (opts.isNumeric) {\n                                    lastPosition = opts.skipRadixDance === false && opts.radixPoint != \"\" && $.inArray(opts.radixPoint, buffer) != -1 ?\n                                        (opts.numericInput ? seekNext($.inArray(opts.radixPoint, buffer)) : $.inArray(opts.radixPoint, buffer)) :\n                                        seekNext(lvp);\n                                } else {\n                                    lastPosition = seekNext(lvp);\n                                }\n                                if (clickPosition < lastPosition) {\n                                    if (isMask(clickPosition))\n                                        caret(input, clickPosition);\n                                    else caret(input, seekNext(clickPosition));\n                                } else\n                                    caret(input, lastPosition);\n                            }\n                        }, 0);\n                    }).bind('dblclick.inputmask', function () {\n                        var input = this;\n                        setTimeout(function () {\n                            caret(input, 0, seekNext(getActiveMaskSet()[\"lastValidPosition\"]));\n                        }, 0);\n                    }).bind(pasteEvent + \".inputmask dragdrop.inputmask drop.inputmask\", function (e) {\n                        if (skipInputEvent === true) {\n                            skipInputEvent = false;\n                            return true;\n                        }\n                        var input = this, $input = $(input);\n\n                        //paste event for IE8 and lower I guess ;-)\n                        if (e.type == \"propertychange\" && input._valueGet().length <= getMaskLength()) {\n                            return true;\n                        }\n                        setTimeout(function () {\n                            var pasteValue = opts.onBeforePaste != undefined ? opts.onBeforePaste.call(this, input._valueGet()) : input._valueGet();\n                            checkVal(input, true, false, pasteValue.split(''), true);\n                            if (isComplete(getActiveBuffer()) === true)\n                                $input.trigger(\"complete\");\n                            $input.click();\n                        }, 0);\n                    }).bind('setvalue.inputmask', function () {\n                        var input = this;\n                        checkVal(input, true);\n                        valueOnFocus = getActiveBuffer().join('');\n                        if (input._valueGet() == getActiveBufferTemplate().join(''))\n                            input._valueSet('');\n                    }).bind('complete.inputmask', opts.oncomplete\n                    ).bind('incomplete.inputmask', opts.onincomplete\n                    ).bind('cleared.inputmask', opts.oncleared\n                    ).bind(\"keyup.inputmask\", keyupEvent);\n\n                    if (androidchrome) {\n                        $el.bind(\"input.inputmask\", inputEvent);\n                    } else {\n                        $el.bind(\"keydown.inputmask\", keydownEvent\n                        ).bind(\"keypress.inputmask\", keypressEvent);\n                    }\n\n                    if (msie10)\n                        $el.bind(\"input.inputmask\", inputEvent);\n\n                    //apply mask\n                    checkVal(el, true, false);\n                    valueOnFocus = getActiveBuffer().join('');\n                    // Wrap document.activeElement in a try/catch block since IE9 throw \"Unspecified error\" if document.activeElement is undefined when we are in an IFrame.\n                    var activeElement;\n                    try {\n                        activeElement = document.activeElement;\n                    } catch (e) {\n                    }\n                    if (activeElement === el) { //position the caret when in focus\n                        $el.addClass('focus.inputmask');\n                        caret(el, seekNext(getActiveMaskSet()[\"lastValidPosition\"]));\n                    } else if (opts.clearMaskOnLostFocus) {\n                        if (getActiveBuffer().join('') == getActiveBufferTemplate().join('')) {\n                            el._valueSet('');\n                        } else {\n                            clearOptionalTail(el);\n                        }\n                    } else {\n                        writeBuffer(el, getActiveBuffer());\n                    }\n\n                    installEventRuler(el);\n                }\n            }\n\n            //action object\n            if (actionObj != undefined) {\n                switch (actionObj[\"action\"]) {\n                    case \"isComplete\":\n                        return isComplete(actionObj[\"buffer\"]);\n                    case \"unmaskedvalue\":\n                        isRTL = actionObj[\"$input\"].data('_inputmask')['isRTL'];\n                        return unmaskedvalue(actionObj[\"$input\"], actionObj[\"skipDatepickerCheck\"]);\n                    case \"mask\":\n                        mask(actionObj[\"el\"]);\n                        break;\n                    case \"format\":\n                        $el = $({});\n                        $el.data('_inputmask', {\n                            'masksets': masksets,\n                            'activeMasksetIndex': activeMasksetIndex,\n                            'opts': opts,\n                            'isRTL': opts.numericInput\n                        });\n                        if (opts.numericInput) {\n                            opts.isNumeric = opts.numericInput;\n                            isRTL = true;\n                        }\n\n                        checkVal($el, false, false, actionObj[\"value\"].split(''), true);\n                        return getActiveBuffer().join('');\n                }\n            }\n        }\n        $.inputmask = {\n            //options default\n            defaults: {\n                placeholder: \"_\",\n                optionalmarker: { start: \"[\", end: \"]\" },\n                quantifiermarker: { start: \"{\", end: \"}\" },\n                groupmarker: { start: \"(\", end: \")\" },\n                escapeChar: \"\\\\\",\n                mask: null,\n                oncomplete: $.noop, //executes when the mask is complete\n                onincomplete: $.noop, //executes when the mask is incomplete and focus is lost\n                oncleared: $.noop, //executes when the mask is cleared\n                repeat: 0, //repetitions of the mask: * ~ forever, otherwise specify an integer\n                greedy: true, //true: allocated buffer for the mask and repetitions - false: allocate only if needed\n                autoUnmask: false, //automatically unmask when retrieving the value with $.fn.val or value if the browser supports __lookupGetter__ or getOwnPropertyDescriptor\n                clearMaskOnLostFocus: true,\n                insertMode: true, //insert the input or overwrite the input\n                clearIncomplete: false, //clear the incomplete input on blur\n                aliases: {}, //aliases definitions => see jquery.inputmask.extensions.js\n                onKeyUp: $.noop, //override to implement autocomplete on certain keys for example\n                onKeyDown: $.noop, //override to implement autocomplete on certain keys for example\n                onBeforePaste: undefined, //executes before masking the pasted value to allow preprocessing of the pasted value.  args => pastedValue => return processedValue\n                onUnMask: undefined, //executes after unmasking to allow postprocessing of the unmaskedvalue.  args => maskedValue, unmaskedValue\n                showMaskOnFocus: true, //show the mask-placeholder when the input has focus\n                showMaskOnHover: true, //show the mask-placeholder when hovering the empty input\n                onKeyValidation: $.noop, //executes on every key-press with the result of isValid. Params: result, opts\n                skipOptionalPartCharacter: \" \", //a character which can be used to skip an optional part of a mask\n                showTooltip: false, //show the activemask as tooltip\n                numericInput: false, //numericInput input direction style (input shifts to the left while holding the caret position)\n                //numeric basic properties\n                isNumeric: false, //enable numeric features\n                radixPoint: \"\", //\".\", // | \",\"\n                skipRadixDance: false, //disable radixpoint caret positioning\n                rightAlignNumerics: true, //align numerics to the right\n                //numeric basic properties\n                definitions: {\n                    '9': {\n                        validator: \"[0-9]\",\n                        cardinality: 1\n                    },\n                    'a': {\n                        validator: \"[A-Za-z\\u0410-\\u044F\\u0401\\u0451]\",\n                        cardinality: 1\n                    },\n                    '*': {\n                        validator: \"[A-Za-z\\u0410-\\u044F\\u0401\\u04510-9]\",\n                        cardinality: 1\n                    }\n                },\n                keyCode: {\n                    ALT: 18, BACKSPACE: 8, CAPS_LOCK: 20, COMMA: 188, COMMAND: 91, COMMAND_LEFT: 91, COMMAND_RIGHT: 93, CONTROL: 17, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, INSERT: 45, LEFT: 37, MENU: 93, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108,\n                    NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SHIFT: 16, SPACE: 32, TAB: 9, UP: 38, WINDOWS: 91\n                },\n                //specify keycodes which should not be considered in the keypress event, otherwise the preventDefault will stop their default behavior especially in FF\n                ignorables: [8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123],\n                getMaskLength: function (buffer, greedy, repeat, currentBuffer, opts) {\n                    var calculatedLength = buffer.length;\n                    if (!greedy) {\n                        if (repeat == \"*\") {\n                            calculatedLength = currentBuffer.length + 1;\n                        } else if (repeat > 1) {\n                            calculatedLength += (buffer.length * (repeat - 1));\n                        }\n                    }\n                    return calculatedLength;\n                }\n            },\n            escapeRegex: function (str) {\n                var specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\'];\n                return str.replace(new RegExp('(\\\\' + specials.join('|\\\\') + ')', 'gim'), '\\\\$1');\n            },\n            format: function (value, options) {\n                var opts = $.extend(true, {}, $.inputmask.defaults, options);\n                resolveAlias(opts.alias, options, opts);\n                return maskScope(generateMaskSets(opts), 0, opts, { \"action\": \"format\", \"value\": value });\n            }\n        };\n\n        $.fn.inputmask = function (fn, options) {\n            var opts = $.extend(true, {}, $.inputmask.defaults, options),\n                masksets,\n                activeMasksetIndex = 0;\n\n            if (typeof fn === \"string\") {\n                switch (fn) {\n                    case \"mask\":\n                        //resolve possible aliases given by options\n                        resolveAlias(opts.alias, options, opts);\n                        masksets = generateMaskSets(opts);\n                        if (masksets.length == 0) { return this; }\n\n                        return this.each(function () {\n                            maskScope($.extend(true, {}, masksets), 0, opts, { \"action\": \"mask\", \"el\": this });\n                        });\n                    case \"unmaskedvalue\":\n                        var $input = $(this), input = this;\n                        if ($input.data('_inputmask')) {\n                            masksets = $input.data('_inputmask')['masksets'];\n                            activeMasksetIndex = $input.data('_inputmask')['activeMasksetIndex'];\n                            opts = $input.data('_inputmask')['opts'];\n                            return maskScope(masksets, activeMasksetIndex, opts, { \"action\": \"unmaskedvalue\", \"$input\": $input });\n                        } else return $input.val();\n                    case \"remove\":\n                        return this.each(function () {\n                            var $input = $(this), input = this;\n                            if ($input.data('_inputmask')) {\n                                masksets = $input.data('_inputmask')['masksets'];\n                                activeMasksetIndex = $input.data('_inputmask')['activeMasksetIndex'];\n                                opts = $input.data('_inputmask')['opts'];\n                                //writeout the unmaskedvalue\n                                input._valueSet(maskScope(masksets, activeMasksetIndex, opts, { \"action\": \"unmaskedvalue\", \"$input\": $input, \"skipDatepickerCheck\": true }));\n                                //clear data\n                                $input.removeData('_inputmask');\n                                //unbind all events\n                                $input.unbind(\".inputmask\");\n                                $input.removeClass('focus.inputmask');\n                                //restore the value property\n                                var valueProperty;\n                                if (Object.getOwnPropertyDescriptor)\n                                    valueProperty = Object.getOwnPropertyDescriptor(input, \"value\");\n                                if (valueProperty && valueProperty.get) {\n                                    if (input._valueGet) {\n                                        Object.defineProperty(input, \"value\", {\n                                            get: input._valueGet,\n                                            set: input._valueSet\n                                        });\n                                    }\n                                } else if (document.__lookupGetter__ && input.__lookupGetter__(\"value\")) {\n                                    if (input._valueGet) {\n                                        input.__defineGetter__(\"value\", input._valueGet);\n                                        input.__defineSetter__(\"value\", input._valueSet);\n                                    }\n                                }\n                                try { //try catch needed for IE7 as it does not supports deleting fns\n                                    delete input._valueGet;\n                                    delete input._valueSet;\n                                } catch (e) {\n                                    input._valueGet = undefined;\n                                    input._valueSet = undefined;\n\n                                }\n                            }\n                        });\n                        break;\n                    case \"getemptymask\": //return the default (empty) mask value, usefull for setting the default value in validation\n                        if (this.data('_inputmask')) {\n                            masksets = this.data('_inputmask')['masksets'];\n                            activeMasksetIndex = this.data('_inputmask')['activeMasksetIndex'];\n                            return masksets[activeMasksetIndex]['_buffer'].join('');\n                        }\n                        else return \"\";\n                    case \"hasMaskedValue\": //check wheter the returned value is masked or not; currently only works reliable when using jquery.val fn to retrieve the value \n                        return this.data('_inputmask') ? !this.data('_inputmask')['opts'].autoUnmask : false;\n                    case \"isComplete\":\n                        masksets = this.data('_inputmask')['masksets'];\n                        activeMasksetIndex = this.data('_inputmask')['activeMasksetIndex'];\n                        opts = this.data('_inputmask')['opts'];\n                        return maskScope(masksets, activeMasksetIndex, opts, { \"action\": \"isComplete\", \"buffer\": this[0]._valueGet().split('') });\n                    case \"getmetadata\": //return mask metadata if exists\n                        if (this.data('_inputmask')) {\n                            masksets = this.data('_inputmask')['masksets'];\n                            activeMasksetIndex = this.data('_inputmask')['activeMasksetIndex'];\n                            return masksets[activeMasksetIndex]['metadata'];\n                        }\n                        else return undefined;\n                    default:\n                        //check if the fn is an alias\n                        if (!resolveAlias(fn, options, opts)) {\n                            //maybe fn is a mask so we try\n                            //set mask\n                            opts.mask = fn;\n                        }\n                        masksets = generateMaskSets(opts);\n                        if (masksets.length == 0) { return this; }\n                        return this.each(function () {\n                            maskScope($.extend(true, {}, masksets), activeMasksetIndex, opts, { \"action\": \"mask\", \"el\": this });\n                        });\n\n                        break;\n                }\n            } else if (typeof fn == \"object\") {\n                opts = $.extend(true, {}, $.inputmask.defaults, fn);\n\n                resolveAlias(opts.alias, fn, opts); //resolve aliases\n                masksets = generateMaskSets(opts);\n                if (masksets.length == 0) { return this; }\n                return this.each(function () {\n                    maskScope($.extend(true, {}, masksets), activeMasksetIndex, opts, { \"action\": \"mask\", \"el\": this });\n                });\n            } else if (fn == undefined) {\n                //look for data-inputmask atribute - the attribute should only contain optipns\n                return this.each(function () {\n                    var attrOptions = $(this).attr(\"data-inputmask\");\n                    if (attrOptions && attrOptions != \"\") {\n                        try {\n                            attrOptions = attrOptions.replace(new RegExp(\"'\", \"g\"), '\"');\n                            var dataoptions = $.parseJSON(\"{\" + attrOptions + \"}\");\n                            $.extend(true, dataoptions, options);\n                            opts = $.extend(true, {}, $.inputmask.defaults, dataoptions);\n                            resolveAlias(opts.alias, dataoptions, opts);\n                            opts.alias = undefined;\n                            $(this).inputmask(opts);\n                        } catch (ex) { } //need a more relax parseJSON\n                    }\n                });\n            }\n        };\n    }\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/input-mask/jquery.inputmask.numeric.extensions.js",
    "content": "/*\nInput Mask plugin extensions\nhttp://github.com/RobinHerbots/jquery.inputmask\nCopyright (c) 2010 - 2014 Robin Herbots\nLicensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\nVersion: 0.0.0\n\nOptional extensions on the jquery.inputmask base\n*/\n(function ($) {\n    //number aliases\n    $.extend($.inputmask.defaults.aliases, {\n        'decimal': {\n            mask: \"~\",\n            placeholder: \"\",\n            repeat: \"*\",\n            greedy: false,\n            numericInput: false,\n            isNumeric: true,\n            digits: \"*\", //number of fractionalDigits\n            groupSeparator: \"\",//\",\", // | \".\"\n            radixPoint: \".\",\n            groupSize: 3,\n            autoGroup: false,\n            allowPlus: true,\n            allowMinus: true,\n            //todo\n            integerDigits: \"*\", //number of integerDigits\n            defaultValue: \"\",\n            prefix: \"\",\n            suffix: \"\",\n\n            //todo\n            getMaskLength: function (buffer, greedy, repeat, currentBuffer, opts) { //custom getMaskLength to take the groupSeparator into account\n                var calculatedLength = buffer.length;\n\n                if (!greedy) {\n                    if (repeat == \"*\") {\n                        calculatedLength = currentBuffer.length + 1;\n                    } else if (repeat > 1) {\n                        calculatedLength += (buffer.length * (repeat - 1));\n                    }\n                }\n\n                var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator);\n                var escapedRadixPoint = $.inputmask.escapeRegex.call(this, opts.radixPoint);\n                var currentBufferStr = currentBuffer.join(''), strippedBufferStr = currentBufferStr.replace(new RegExp(escapedGroupSeparator, \"g\"), \"\").replace(new RegExp(escapedRadixPoint), \"\"),\n                groupOffset = currentBufferStr.length - strippedBufferStr.length;\n                return calculatedLength + groupOffset;\n            },\n            postFormat: function (buffer, pos, reformatOnly, opts) {\n                if (opts.groupSeparator == \"\") return pos;\n                var cbuf = buffer.slice(),\n                    radixPos = $.inArray(opts.radixPoint, buffer);\n                if (!reformatOnly) {\n                    cbuf.splice(pos, 0, \"?\"); //set position indicator\n                }\n                var bufVal = cbuf.join('');\n                if (opts.autoGroup || (reformatOnly && bufVal.indexOf(opts.groupSeparator) != -1)) {\n                    var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator);\n                    bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, \"g\"), '');\n                    var radixSplit = bufVal.split(opts.radixPoint);\n                    bufVal = radixSplit[0];\n                    var reg = new RegExp('([-\\+]?[\\\\d\\?]+)([\\\\d\\?]{' + opts.groupSize + '})');\n                    while (reg.test(bufVal)) {\n                        bufVal = bufVal.replace(reg, '$1' + opts.groupSeparator + '$2');\n                        bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator);\n                    }\n                    if (radixSplit.length > 1)\n                        bufVal += opts.radixPoint + radixSplit[1];\n                }\n                buffer.length = bufVal.length; //align the length\n                for (var i = 0, l = bufVal.length; i < l; i++) {\n                    buffer[i] = bufVal.charAt(i);\n                }\n                var newPos = $.inArray(\"?\", buffer);\n                if (!reformatOnly) buffer.splice(newPos, 1);\n\n                return reformatOnly ? pos : newPos;\n            },\n            regex: {\n                number: function (opts) {\n                    var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator);\n                    var escapedRadixPoint = $.inputmask.escapeRegex.call(this, opts.radixPoint);\n                    var digitExpression = isNaN(opts.digits) ? opts.digits : '{0,' + opts.digits + '}';\n                    var signedExpression = opts.allowPlus || opts.allowMinus ? \"[\" + (opts.allowPlus ? \"\\+\" : \"\") + (opts.allowMinus ? \"-\" : \"\") + \"]?\" : \"\";\n                    return new RegExp(\"^\" + signedExpression + \"(\\\\d+|\\\\d{1,\" + opts.groupSize + \"}((\" + escapedGroupSeparator + \"\\\\d{\" + opts.groupSize + \"})?)+)(\" + escapedRadixPoint + \"\\\\d\" + digitExpression + \")?$\");\n                }\n            },\n            onKeyDown: function (e, buffer, opts) {\n                var $input = $(this), input = this;\n                if (e.keyCode == opts.keyCode.TAB) {\n                    var radixPosition = $.inArray(opts.radixPoint, buffer);\n                    if (radixPosition != -1) {\n                        var masksets = $input.data('_inputmask')['masksets'];\n                        var activeMasksetIndex = $input.data('_inputmask')['activeMasksetIndex'];\n                        for (var i = 1; i <= opts.digits && i < opts.getMaskLength(masksets[activeMasksetIndex][\"_buffer\"], masksets[activeMasksetIndex][\"greedy\"], masksets[activeMasksetIndex][\"repeat\"], buffer, opts) ; i++) {\n                            if (buffer[radixPosition + i] == undefined || buffer[radixPosition + i] == \"\") buffer[radixPosition + i] = \"0\";\n                        }\n                        input._valueSet(buffer.join(''));\n                    }\n                } else if (e.keyCode == opts.keyCode.DELETE || e.keyCode == opts.keyCode.BACKSPACE) {\n                    opts.postFormat(buffer, 0, true, opts);\n                    input._valueSet(buffer.join(''));\n                    return true;\n                }\n            },\n            definitions: {\n                '~': { //real number\n                    validator: function (chrs, buffer, pos, strict, opts) {\n                        if (chrs == \"\") return false;\n                        if (!strict && pos <= 1 && buffer[0] === '0' && new RegExp(\"[\\\\d-]\").test(chrs) && buffer.join('').length == 1) { //handle first char\n                            buffer[0] = \"\";\n                            return { \"pos\": 0 };\n                        }\n\n                        var cbuf = strict ? buffer.slice(0, pos) : buffer.slice();\n\n                        cbuf.splice(pos, 0, chrs);\n                        var bufferStr = cbuf.join('');\n\n                        //strip groupseparator\n                        var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator);\n                        bufferStr = bufferStr.replace(new RegExp(escapedGroupSeparator, \"g\"), '');\n\n                        var isValid = opts.regex.number(opts).test(bufferStr);\n                        if (!isValid) {\n                            //let's help the regex a bit\n                            bufferStr += \"0\";\n                            isValid = opts.regex.number(opts).test(bufferStr);\n                            if (!isValid) {\n                                //make a valid group\n                                var lastGroupSeparator = bufferStr.lastIndexOf(opts.groupSeparator);\n                                for (var i = bufferStr.length - lastGroupSeparator; i <= 3; i++) {\n                                    bufferStr += \"0\";\n                                }\n\n                                isValid = opts.regex.number(opts).test(bufferStr);\n                                if (!isValid && !strict) {\n                                    if (chrs == opts.radixPoint) {\n                                        isValid = opts.regex.number(opts).test(\"0\" + bufferStr + \"0\");\n                                        if (isValid) {\n                                            buffer[pos] = \"0\";\n                                            pos++;\n                                            return { \"pos\": pos };\n                                        }\n                                    }\n                                }\n                            }\n                        }\n\n                        if (isValid != false && !strict && chrs != opts.radixPoint) {\n                            var newPos = opts.postFormat(buffer, pos, false, opts);\n                            return { \"pos\": newPos };\n                        }\n\n                        return isValid;\n                    },\n                    cardinality: 1,\n                    prevalidator: null\n                }\n            },\n            insertMode: true,\n            autoUnmask: false\n        },\n        'integer': {\n            regex: {\n                number: function (opts) {\n                    var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator);\n                    var signedExpression = opts.allowPlus || opts.allowMinus ? \"[\" + (opts.allowPlus ? \"\\+\" : \"\") + (opts.allowMinus ? \"-\" : \"\") + \"]?\" : \"\";\n                    return new RegExp(\"^\" + signedExpression + \"(\\\\d+|\\\\d{1,\" + opts.groupSize + \"}((\" + escapedGroupSeparator + \"\\\\d{\" + opts.groupSize + \"})?)+)$\");\n                }\n            },\n            alias: \"decimal\"\n        }\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/input-mask/jquery.inputmask.phone.extensions.js",
    "content": "/*\nInput Mask plugin extensions\nhttp://github.com/RobinHerbots/jquery.inputmask\nCopyright (c) 2010 - 2014 Robin Herbots\nLicensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\nVersion: 0.0.0\n\nPhone extension.\nWhen using this extension make sure you specify the correct url to get the masks\n\n $(selector).inputmask(\"phone\", {\n                url: \"Scripts/jquery.inputmask/phone-codes/phone-codes.json\", \n                onKeyValidation: function () { //show some metadata in the console\n                    console.log($(this).inputmask(\"getmetadata\")[\"name_en\"]);\n                } \n  });\n\n\n*/\n(function ($) {\n    $.extend($.inputmask.defaults.aliases, {\n        'phone': {\n            url: \"phone-codes/phone-codes.json\",\n            mask: function (opts) {\n                opts.definitions = {\n                    'p': {\n                        validator: function () { return false; },\n                        cardinality: 1\n                    },\n                    '#': {\n                        validator: \"[0-9]\",\n                        cardinality: 1\n                    }\n                };\n                var maskList = [];\n                $.ajax({\n                    url: opts.url,\n                    async: false,\n                    dataType: 'json',\n                    success: function (response) {\n                        maskList = response;\n                    }\n                });\n    \n                maskList.splice(0, 0, \"+p(ppp)ppp-pppp\");\n                return maskList;\n            }\n        }\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/input-mask/jquery.inputmask.regex.extensions.js",
    "content": "/*\nInput Mask plugin extensions\nhttp://github.com/RobinHerbots/jquery.inputmask\nCopyright (c) 2010 - 2014 Robin Herbots\nLicensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\nVersion: 0.0.0\n\nRegex extensions on the jquery.inputmask base\nAllows for using regular expressions as a mask\n*/\n(function ($) {\n    $.extend($.inputmask.defaults.aliases, { // $(selector).inputmask(\"Regex\", { regex: \"[0-9]*\"}\n        'Regex': {\n            mask: \"r\",\n            greedy: false,\n            repeat: \"*\",\n            regex: null,\n            regexTokens: null,\n            //Thx to https://github.com/slevithan/regex-colorizer for the tokenizer regex\n            tokenizer: /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\S\\s]?)*]?|\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\\S\\s]?)|\\((?:\\?[:=!]?)?|(?:[?*+]|\\{[0-9]+(?:,[0-9]*)?\\})\\??|[^.?*+^${[()|\\\\]+|./g,\n            quantifierFilter: /[0-9]+[^,]/,\n            definitions: {\n                'r': {\n                    validator: function (chrs, buffer, pos, strict, opts) {\n                        function regexToken() {\n                            this.matches = [];\n                            this.isGroup = false;\n                            this.isQuantifier = false;\n                            this.isLiteral = false;\n                        }\n                        function analyseRegex() {\n                            var currentToken = new regexToken(), match, m, opengroups = [];\n\n                            opts.regexTokens = [];\n\n                            // The tokenizer regex does most of the tokenization grunt work\n                            while (match = opts.tokenizer.exec(opts.regex)) {\n                                m = match[0];\n                                switch (m.charAt(0)) {\n                                    case \"[\": // Character class\n                                    case \"\\\\\":  // Escape or backreference\n                                        if (opengroups.length > 0) {\n                                            opengroups[opengroups.length - 1][\"matches\"].push(m);\n                                        } else {\n                                            currentToken.matches.push(m);\n                                        }\n                                        break;\n                                    case \"(\": // Group opening\n                                        if (!currentToken.isGroup && currentToken.matches.length > 0)\n                                            opts.regexTokens.push(currentToken);\n                                        currentToken = new regexToken();\n                                        currentToken.isGroup = true;\n                                        opengroups.push(currentToken);\n                                        break;\n                                    case \")\": // Group closing\n                                        var groupToken = opengroups.pop();\n                                        if (opengroups.length > 0) {\n                                            opengroups[opengroups.length - 1][\"matches\"].push(groupToken);\n                                        } else {\n                                            opts.regexTokens.push(groupToken);\n                                            currentToken = new regexToken();\n                                        }\n                                        break;\n                                    case \"{\": //Quantifier\n                                        var quantifier = new regexToken();\n                                        quantifier.isQuantifier = true;\n                                        quantifier.matches.push(m);\n                                        if (opengroups.length > 0) {\n                                            opengroups[opengroups.length - 1][\"matches\"].push(quantifier);\n                                        } else {\n                                            currentToken.matches.push(quantifier);\n                                        }\n                                        break;\n                                    default:\n                                        // Vertical bar (alternator) \n                                        // ^ or $ anchor\n                                        // Dot (.)\n                                        // Literal character sequence\n                                        var literal = new regexToken();\n                                        literal.isLiteral = true;\n                                        literal.matches.push(m);\n                                        if (opengroups.length > 0) {\n                                            opengroups[opengroups.length - 1][\"matches\"].push(literal);\n                                        } else {\n                                            currentToken.matches.push(literal);\n                                        }\n                                }\n                            }\n\n                            if (currentToken.matches.length > 0)\n                                opts.regexTokens.push(currentToken);\n                        }\n                        function validateRegexToken(token, fromGroup) {\n                            var isvalid = false;\n                            if (fromGroup) {\n                                regexPart += \"(\";\n                                openGroupCount++;\n                            }\n                            for (var mndx = 0; mndx < token[\"matches\"].length; mndx++) {\n                                var matchToken = token[\"matches\"][mndx];\n                                if (matchToken[\"isGroup\"] == true) {\n                                    isvalid = validateRegexToken(matchToken, true);\n                                } else if (matchToken[\"isQuantifier\"] == true) {\n                                    matchToken = matchToken[\"matches\"][0];\n                                    var quantifierMax = opts.quantifierFilter.exec(matchToken)[0].replace(\"}\", \"\");\n                                    var testExp = regexPart + \"{1,\" + quantifierMax + \"}\"; //relax quantifier validation\n                                    for (var j = 0; j < openGroupCount; j++) {\n                                        testExp += \")\";\n                                    }\n                                    var exp = new RegExp(\"^(\" + testExp + \")$\");\n                                    isvalid = exp.test(bufferStr);\n                                    regexPart += matchToken;\n                                } else if (matchToken[\"isLiteral\"] == true) {\n                                    matchToken = matchToken[\"matches\"][0];\n                                    var testExp = regexPart, openGroupCloser = \"\";\n                                    for (var j = 0; j < openGroupCount; j++) {\n                                        openGroupCloser += \")\";\n                                    }\n                                    for (var k = 0; k < matchToken.length; k++) { //relax literal validation\n                                        testExp = (testExp + matchToken[k]).replace(/\\|$/, \"\");\n                                        var exp = new RegExp(\"^(\" + testExp + openGroupCloser + \")$\");\n                                        isvalid = exp.test(bufferStr);\n                                        if (isvalid) break;\n                                    }\n                                    regexPart += matchToken;\n                                    //console.log(bufferStr + \" \" + exp + \" \" + isvalid);\n                                } else {\n                                    regexPart += matchToken;\n                                    var testExp = regexPart.replace(/\\|$/, \"\");\n                                    for (var j = 0; j < openGroupCount; j++) {\n                                        testExp += \")\";\n                                    }\n                                    var exp = new RegExp(\"^(\" + testExp + \")$\");\n                                    isvalid = exp.test(bufferStr);\n                                    //console.log(bufferStr + \" \" + exp + \" \" + isvalid);\n                                }\n                                if (isvalid) break;\n                            }\n\n                            if (fromGroup) {\n                                regexPart += \")\";\n                                openGroupCount--;\n                            }\n\n                            return isvalid;\n                        }\n\n\n                        if (opts.regexTokens == null) {\n                            analyseRegex();\n                        }\n\n                        var cbuffer = buffer.slice(), regexPart = \"\", isValid = false, openGroupCount = 0;\n                        cbuffer.splice(pos, 0, chrs);\n                        var bufferStr = cbuffer.join('');\n                        for (var i = 0; i < opts.regexTokens.length; i++) {\n                            var regexToken = opts.regexTokens[i];\n                            isValid = validateRegexToken(regexToken, regexToken[\"isGroup\"]);\n                            if (isValid) break;\n                        }\n\n                        return isValid;\n                    },\n                    cardinality: 1\n                }\n            }\n        }\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/input-mask/phone-codes/phone-be.json",
    "content": "[\n\t{ \"mask\": \"+32(53)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Aalst (Alost)\" },\n\t{ \"mask\": \"+32(3)###-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Antwerpen (Anvers)\" },\n\t{ \"mask\": \"+32(63)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Arlon\" },\n\t{ \"mask\": \"+32(67)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Ath\" },\n\t{ \"mask\": \"+32(50)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Brugge (Bruges)\" },\n\t{ \"mask\": \"+32(2)###-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Brussel/Bruxelles (Brussels)\" },\n\t{ \"mask\": \"+32(71)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Charleroi\" },\n\t{ \"mask\": \"+32(60)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Chimay\" },\n\t{ \"mask\": \"+32(83)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Ciney\" },\n\t{ \"mask\": \"+32(52)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Dendermonde\" },\n\t{ \"mask\": \"+32(13)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Diest\" },\n\t{ \"mask\": \"+32(82)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Dinant\" },\n\t{ \"mask\": \"+32(86)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Durbuy\" },\n\t{ \"mask\": \"+32(89)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Genk\" },\n\t{ \"mask\": \"+32(9)###-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Gent (Gand)\" },\n\t{ \"mask\": \"+32(11)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Hasselt\" },\n\t{ \"mask\": \"+32(14)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Herentals\" },\n\t{ \"mask\": \"+32(85)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Huy (Hoei)\" },\n\t{ \"mask\": \"+32(64)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"La Louvière\" },\n\t{ \"mask\": \"+32(16)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Leuven (Louvain)\" },\n\t{ \"mask\": \"+32(61)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Libramont\" },\n\t{ \"mask\": \"+32(4)###-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Liège (Luik)\" },\n\t{ \"mask\": \"+32(15)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Mechelen (Malines)\" },\n\t{ \"mask\": \"+32(47#)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Mobile Phones\" },    \n\t{ \"mask\": \"+32(48#)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Mobile Phones\" },    \n\t{ \"mask\": \"+32(49#)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Mobile Phones\" },    \n\t{ \"mask\": \"+32(65)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Mons (Bergen)\" },\n\t{ \"mask\": \"+32(81)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Namur (Namen)\" },\t\n\t{ \"mask\": \"+32(58)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Nieuwpoort (Nieuport)\" },\t\n\t{ \"mask\": \"+32(54)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Ninove\" },\n\t{ \"mask\": \"+32(67)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Nivelles (Nijvel)\" },\n\t{ \"mask\": \"+32(59)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Oostende (Ostende)\" },\n\t{ \"mask\": \"+32(51)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Roeselare (Roulers)\" },\n\t{ \"mask\": \"+32(55)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Ronse\" },\t\n\t{ \"mask\": \"+32(80)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Stavelot\" },\n\t{ \"mask\": \"+32(12)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Tongeren (Tongres)\" },\n\t{ \"mask\": \"+32(69)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Tounai\" },\n\t{ \"mask\": \"+32(14)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Turnhout\" },\n\t{ \"mask\": \"+32(87)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Verviers\" },\n\t{ \"mask\": \"+32(58)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Veurne\" },\n\t{ \"mask\": \"+32(19)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Wareme\" },\n\t{ \"mask\": \"+32(10)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Wavre (Waver)\" },\n\t{ \"mask\": \"+32(50)##-##-##\", \"cc\": \"BE\", \"cd\": \"Belgium\", \"city\": \"Zeebrugge\" }\n]"
  },
  {
    "path": "public/adminlte/plugins/input-mask/phone-codes/phone-codes.json",
    "content": "[\n\t{ \"mask\": \"+247-####\", \"cc\": \"AC\", \"name_en\": \"Ascension\", \"desc_en\": \"\", \"name_ru\": \"Остров Вознесения\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+376-###-###\", \"cc\": \"AD\", \"name_en\": \"Andorra\", \"desc_en\": \"\", \"name_ru\": \"Андорра\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+971-5#-###-####\", \"cc\": \"AE\", \"name_en\": \"United Arab Emirates\", \"desc_en\": \"mobile\", \"name_ru\": \"Объединенные Арабские Эмираты\", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+971-#-###-####\", \"cc\": \"AE\", \"name_en\": \"United Arab Emirates\", \"desc_en\": \"\", \"name_ru\": \"Объединенные Арабские Эмираты\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+93-##-###-####\", \"cc\": \"AF\", \"name_en\": \"Afghanistan\", \"desc_en\": \"\", \"name_ru\": \"Афганистан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(268)###-####\", \"cc\": \"AG\", \"name_en\": \"Antigua & Barbuda\", \"desc_en\": \"\", \"name_ru\": \"Антигуа и Барбуда\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(264)###-####\", \"cc\": \"AI\", \"name_en\": \"Anguilla\", \"desc_en\": \"\", \"name_ru\": \"Ангилья\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+355(###)###-###\", \"cc\": \"AL\", \"name_en\": \"Albania\", \"desc_en\": \"\", \"name_ru\": \"Албания\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+374-##-###-###\", \"cc\": \"AM\", \"name_en\": \"Armenia\", \"desc_en\": \"\", \"name_ru\": \"Армения\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+599-###-####\", \"cc\": \"AN\", \"name_en\": \"Caribbean Netherlands\", \"desc_en\": \"\", \"name_ru\": \"Карибские Нидерланды\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+599-###-####\", \"cc\": \"AN\", \"name_en\": \"Netherlands Antilles\", \"desc_en\": \"\", \"name_ru\": \"Нидерландские Антильские острова\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+599-9###-####\", \"cc\": \"AN\", \"name_en\": \"Netherlands Antilles\", \"desc_en\": \"Curacao\", \"name_ru\": \"Нидерландские Антильские острова\", \"desc_ru\": \"Кюрасао\" },\n\t{ \"mask\": \"+244(###)###-###\", \"cc\": \"AO\", \"name_en\": \"Angola\", \"desc_en\": \"\", \"name_ru\": \"Ангола\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+672-1##-###\", \"cc\": \"AQ\", \"name_en\": \"Australian bases in Antarctica\", \"desc_en\": \"\", \"name_ru\": \"Австралийская антарктическая база\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+54(###)###-####\", \"cc\": \"AR\", \"name_en\": \"Argentina\", \"desc_en\": \"\", \"name_ru\": \"Аргентина\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(684)###-####\", \"cc\": \"AS\", \"name_en\": \"American Samoa\", \"desc_en\": \"\", \"name_ru\": \"Американское Самоа\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+43(###)###-####\", \"cc\": \"AT\", \"name_en\": \"Austria\", \"desc_en\": \"\", \"name_ru\": \"Австрия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+61-#-####-####\", \"cc\": \"AU\", \"name_en\": \"Australia\", \"desc_en\": \"\", \"name_ru\": \"Австралия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+297-###-####\", \"cc\": \"AW\", \"name_en\": \"Aruba\", \"desc_en\": \"\", \"name_ru\": \"Аруба\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+994-##-###-##-##\", \"cc\": \"AZ\", \"name_en\": \"Azerbaijan\", \"desc_en\": \"\", \"name_ru\": \"Азербайджан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+387-##-#####\", \"cc\": \"BA\", \"name_en\": \"Bosnia and Herzegovina\", \"desc_en\": \"\", \"name_ru\": \"Босния и Герцеговина\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+387-##-####\", \"cc\": \"BA\", \"name_en\": \"Bosnia and Herzegovina\", \"desc_en\": \"\", \"name_ru\": \"Босния и Герцеговина\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(246)###-####\", \"cc\": \"BB\", \"name_en\": \"Barbados\", \"desc_en\": \"\", \"name_ru\": \"Барбадос\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+880-##-###-###\", \"cc\": \"BD\", \"name_en\": \"Bangladesh\", \"desc_en\": \"\", \"name_ru\": \"Бангладеш\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+32(###)###-###\", \"cc\": \"BE\", \"name_en\": \"Belgium\", \"desc_en\": \"\", \"name_ru\": \"Бельгия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+226-##-##-####\", \"cc\": \"BF\", \"name_en\": \"Burkina Faso\", \"desc_en\": \"\", \"name_ru\": \"Буркина Фасо\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+359(###)###-###\", \"cc\": \"BG\", \"name_en\": \"Bulgaria\", \"desc_en\": \"\", \"name_ru\": \"Болгария\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+973-####-####\", \"cc\": \"BH\", \"name_en\": \"Bahrain\", \"desc_en\": \"\", \"name_ru\": \"Бахрейн\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+257-##-##-####\", \"cc\": \"BI\", \"name_en\": \"Burundi\", \"desc_en\": \"\", \"name_ru\": \"Бурунди\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+229-##-##-####\", \"cc\": \"BJ\", \"name_en\": \"Benin\", \"desc_en\": \"\", \"name_ru\": \"Бенин\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(441)###-####\", \"cc\": \"BM\", \"name_en\": \"Bermuda\", \"desc_en\": \"\", \"name_ru\": \"Бермудские острова\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+673-###-####\", \"cc\": \"BN\", \"name_en\": \"Brunei Darussalam\", \"desc_en\": \"\", \"name_ru\": \"Бруней-Даруссалам\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+591-#-###-####\", \"cc\": \"BO\", \"name_en\": \"Bolivia\", \"desc_en\": \"\", \"name_ru\": \"Боливия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+55-##-####[#]-####\", \"cc\": \"BR\", \"name_en\": \"Brazil\", \"desc_en\": \"\", \"name_ru\": \"Бразилия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(242)###-####\", \"cc\": \"BS\", \"name_en\": \"Bahamas\", \"desc_en\": \"\", \"name_ru\": \"Багамские Острова\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+975-17-###-###\", \"cc\": \"BT\", \"name_en\": \"Bhutan\", \"desc_en\": \"\", \"name_ru\": \"Бутан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+975-#-###-###\", \"cc\": \"BT\", \"name_en\": \"Bhutan\", \"desc_en\": \"\", \"name_ru\": \"Бутан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+267-##-###-###\", \"cc\": \"BW\", \"name_en\": \"Botswana\", \"desc_en\": \"\", \"name_ru\": \"Ботсвана\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+375(##)###-##-##\", \"cc\": \"BY\", \"name_en\": \"Belarus\", \"desc_en\": \"\", \"name_ru\": \"Беларусь (Белоруссия)\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+501-###-####\", \"cc\": \"BZ\", \"name_en\": \"Belize\", \"desc_en\": \"\", \"name_ru\": \"Белиз\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+243(###)###-###\", \"cc\": \"CD\", \"name_en\": \"Dem. Rep. Congo\", \"desc_en\": \"\", \"name_ru\": \"Дем. Респ. Конго (Киншаса)\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+236-##-##-####\", \"cc\": \"CF\", \"name_en\": \"Central African Republic\", \"desc_en\": \"\", \"name_ru\": \"Центральноафриканская Республика\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+242-##-###-####\", \"cc\": \"CG\", \"name_en\": \"Congo (Brazzaville)\", \"desc_en\": \"\", \"name_ru\": \"Конго (Браззавиль)\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+41-##-###-####\", \"cc\": \"CH\", \"name_en\": \"Switzerland\", \"desc_en\": \"\", \"name_ru\": \"Швейцария\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+225-##-###-###\", \"cc\": \"CI\", \"name_en\": \"Cote d’Ivoire (Ivory Coast)\", \"desc_en\": \"\", \"name_ru\": \"Кот-д’Ивуар\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+682-##-###\", \"cc\": \"CK\", \"name_en\": \"Cook Islands\", \"desc_en\": \"\", \"name_ru\": \"Острова Кука\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+56-#-####-####\", \"cc\": \"CL\", \"name_en\": \"Chile\", \"desc_en\": \"\", \"name_ru\": \"Чили\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+237-####-####\", \"cc\": \"CM\", \"name_en\": \"Cameroon\", \"desc_en\": \"\", \"name_ru\": \"Камерун\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+86(###)####-####\", \"cc\": \"CN\", \"name_en\": \"China (PRC)\", \"desc_en\": \"\", \"name_ru\": \"Китайская Н.Р.\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+86(###)####-###\", \"cc\": \"CN\", \"name_en\": \"China (PRC)\", \"desc_en\": \"\", \"name_ru\": \"Китайская Н.Р.\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+86-##-#####-#####\", \"cc\": \"CN\", \"name_en\": \"China (PRC)\", \"desc_en\": \"\", \"name_ru\": \"Китайская Н.Р.\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+57(###)###-####\", \"cc\": \"CO\", \"name_en\": \"Colombia\", \"desc_en\": \"\", \"name_ru\": \"Колумбия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+506-####-####\", \"cc\": \"CR\", \"name_en\": \"Costa Rica\", \"desc_en\": \"\", \"name_ru\": \"Коста-Рика\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+53-#-###-####\", \"cc\": \"CU\", \"name_en\": \"Cuba\", \"desc_en\": \"\", \"name_ru\": \"Куба\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+238(###)##-##\", \"cc\": \"CV\", \"name_en\": \"Cape Verde\", \"desc_en\": \"\", \"name_ru\": \"Кабо-Верде\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+599-###-####\", \"cc\": \"CW\", \"name_en\": \"Curacao\", \"desc_en\": \"\", \"name_ru\": \"Кюрасао\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+357-##-###-###\", \"cc\": \"CY\", \"name_en\": \"Cyprus\", \"desc_en\": \"\", \"name_ru\": \"Кипр\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+420(###)###-###\", \"cc\": \"CZ\", \"name_en\": \"Czech Republic\", \"desc_en\": \"\", \"name_ru\": \"Чехия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+49(####)###-####\", \"cc\": \"DE\", \"name_en\": \"Germany\", \"desc_en\": \"\", \"name_ru\": \"Германия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+49(###)###-####\", \"cc\": \"DE\", \"name_en\": \"Germany\", \"desc_en\": \"\", \"name_ru\": \"Германия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+49(###)##-####\", \"cc\": \"DE\", \"name_en\": \"Germany\", \"desc_en\": \"\", \"name_ru\": \"Германия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+49(###)##-###\", \"cc\": \"DE\", \"name_en\": \"Germany\", \"desc_en\": \"\", \"name_ru\": \"Германия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+49(###)##-##\", \"cc\": \"DE\", \"name_en\": \"Germany\", \"desc_en\": \"\", \"name_ru\": \"Германия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+49-###-###\", \"cc\": \"DE\", \"name_en\": \"Germany\", \"desc_en\": \"\", \"name_ru\": \"Германия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+253-##-##-##-##\", \"cc\": \"DJ\", \"name_en\": \"Djibouti\", \"desc_en\": \"\", \"name_ru\": \"Джибути\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+45-##-##-##-##\", \"cc\": \"DK\", \"name_en\": \"Denmark\", \"desc_en\": \"\", \"name_ru\": \"Дания\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(767)###-####\", \"cc\": \"DM\", \"name_en\": \"Dominica\", \"desc_en\": \"\", \"name_ru\": \"Доминика\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(809)###-####\", \"cc\": \"DO\", \"name_en\": \"Dominican Republic\", \"desc_en\": \"\", \"name_ru\": \"Доминиканская Республика\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(829)###-####\", \"cc\": \"DO\", \"name_en\": \"Dominican Republic\", \"desc_en\": \"\", \"name_ru\": \"Доминиканская Республика\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(849)###-####\", \"cc\": \"DO\", \"name_en\": \"Dominican Republic\", \"desc_en\": \"\", \"name_ru\": \"Доминиканская Республика\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+213-##-###-####\", \"cc\": \"DZ\", \"name_en\": \"Algeria\", \"desc_en\": \"\", \"name_ru\": \"Алжир\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+593-##-###-####\", \"cc\": \"EC\", \"name_en\": \"Ecuador \", \"desc_en\": \"mobile\", \"name_ru\": \"Эквадор \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+593-#-###-####\", \"cc\": \"EC\", \"name_en\": \"Ecuador\", \"desc_en\": \"\", \"name_ru\": \"Эквадор\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+372-####-####\", \"cc\": \"EE\", \"name_en\": \"Estonia \", \"desc_en\": \"mobile\", \"name_ru\": \"Эстония \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+372-###-####\", \"cc\": \"EE\", \"name_en\": \"Estonia\", \"desc_en\": \"\", \"name_ru\": \"Эстония\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+20(###)###-####\", \"cc\": \"EG\", \"name_en\": \"Egypt\", \"desc_en\": \"\", \"name_ru\": \"Египет\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+291-#-###-###\", \"cc\": \"ER\", \"name_en\": \"Eritrea\", \"desc_en\": \"\", \"name_ru\": \"Эритрея\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+34(###)###-###\", \"cc\": \"ES\", \"name_en\": \"Spain\", \"desc_en\": \"\", \"name_ru\": \"Испания\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+251-##-###-####\", \"cc\": \"ET\", \"name_en\": \"Ethiopia\", \"desc_en\": \"\", \"name_ru\": \"Эфиопия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+358(###)###-##-##\", \"cc\": \"FI\", \"name_en\": \"Finland\", \"desc_en\": \"\", \"name_ru\": \"Финляндия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+679-##-#####\", \"cc\": \"FJ\", \"name_en\": \"Fiji\", \"desc_en\": \"\", \"name_ru\": \"Фиджи\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+500-#####\", \"cc\": \"FK\", \"name_en\": \"Falkland Islands\", \"desc_en\": \"\", \"name_ru\": \"Фолклендские острова\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+691-###-####\", \"cc\": \"FM\", \"name_en\": \"F.S. Micronesia\", \"desc_en\": \"\", \"name_ru\": \"Ф.Ш. Микронезии\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+298-###-###\", \"cc\": \"FO\", \"name_en\": \"Faroe Islands\", \"desc_en\": \"\", \"name_ru\": \"Фарерские острова\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+262-#####-####\", \"cc\": \"FR\", \"name_en\": \"Mayotte\", \"desc_en\": \"\", \"name_ru\": \"Майотта\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+33(###)###-###\", \"cc\": \"FR\", \"name_en\": \"France\", \"desc_en\": \"\", \"name_ru\": \"Франция\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+508-##-####\", \"cc\": \"FR\", \"name_en\": \"St Pierre & Miquelon\", \"desc_en\": \"\", \"name_ru\": \"Сен-Пьер и Микелон\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+590(###)###-###\", \"cc\": \"FR\", \"name_en\": \"Guadeloupe\", \"desc_en\": \"\", \"name_ru\": \"Гваделупа\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+241-#-##-##-##\", \"cc\": \"GA\", \"name_en\": \"Gabon\", \"desc_en\": \"\", \"name_ru\": \"Габон\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(473)###-####\", \"cc\": \"GD\", \"name_en\": \"Grenada\", \"desc_en\": \"\", \"name_ru\": \"Гренада\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+995(###)###-###\", \"cc\": \"GE\", \"name_en\": \"Rep. of Georgia\", \"desc_en\": \"\", \"name_ru\": \"Грузия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+594-#####-####\", \"cc\": \"GF\", \"name_en\": \"Guiana (French)\", \"desc_en\": \"\", \"name_ru\": \"Фр. Гвиана\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+233(###)###-###\", \"cc\": \"GH\", \"name_en\": \"Ghana\", \"desc_en\": \"\", \"name_ru\": \"Гана\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+350-###-#####\", \"cc\": \"GI\", \"name_en\": \"Gibraltar\", \"desc_en\": \"\", \"name_ru\": \"Гибралтар\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+299-##-##-##\", \"cc\": \"GL\", \"name_en\": \"Greenland\", \"desc_en\": \"\", \"name_ru\": \"Гренландия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+220(###)##-##\", \"cc\": \"GM\", \"name_en\": \"Gambia\", \"desc_en\": \"\", \"name_ru\": \"Гамбия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+224-##-###-###\", \"cc\": \"GN\", \"name_en\": \"Guinea\", \"desc_en\": \"\", \"name_ru\": \"Гвинея\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+240-##-###-####\", \"cc\": \"GQ\", \"name_en\": \"Equatorial Guinea\", \"desc_en\": \"\", \"name_ru\": \"Экваториальная Гвинея\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+30(###)###-####\", \"cc\": \"GR\", \"name_en\": \"Greece\", \"desc_en\": \"\", \"name_ru\": \"Греция\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+502-#-###-####\", \"cc\": \"GT\", \"name_en\": \"Guatemala\", \"desc_en\": \"\", \"name_ru\": \"Гватемала\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(671)###-####\", \"cc\": \"GU\", \"name_en\": \"Guam\", \"desc_en\": \"\", \"name_ru\": \"Гуам\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+245-#-######\", \"cc\": \"GW\", \"name_en\": \"Guinea-Bissau\", \"desc_en\": \"\", \"name_ru\": \"Гвинея-Бисау\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+592-###-####\", \"cc\": \"GY\", \"name_en\": \"Guyana\", \"desc_en\": \"\", \"name_ru\": \"Гайана\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+852-####-####\", \"cc\": \"HK\", \"name_en\": \"Hong Kong\", \"desc_en\": \"\", \"name_ru\": \"Гонконг\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+504-####-####\", \"cc\": \"HN\", \"name_en\": \"Honduras\", \"desc_en\": \"\", \"name_ru\": \"Гондурас\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+385-##-###-###\", \"cc\": \"HR\", \"name_en\": \"Croatia\", \"desc_en\": \"\", \"name_ru\": \"Хорватия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+509-##-##-####\", \"cc\": \"HT\", \"name_en\": \"Haiti\", \"desc_en\": \"\", \"name_ru\": \"Гаити\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+36(###)###-###\", \"cc\": \"HU\", \"name_en\": \"Hungary\", \"desc_en\": \"\", \"name_ru\": \"Венгрия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+62(8##)###-####\", \"cc\": \"ID\", \"name_en\": \"Indonesia \", \"desc_en\": \"mobile\", \"name_ru\": \"Индонезия \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+62-##-###-##\", \"cc\": \"ID\", \"name_en\": \"Indonesia\", \"desc_en\": \"\", \"name_ru\": \"Индонезия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+62-##-###-###\", \"cc\": \"ID\", \"name_en\": \"Indonesia\", \"desc_en\": \"\", \"name_ru\": \"Индонезия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+62-##-###-####\", \"cc\": \"ID\", \"name_en\": \"Indonesia\", \"desc_en\": \"\", \"name_ru\": \"Индонезия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+62(8##)###-###\", \"cc\": \"ID\", \"name_en\": \"Indonesia \", \"desc_en\": \"mobile\", \"name_ru\": \"Индонезия \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+62(8##)###-##-###\", \"cc\": \"ID\", \"name_en\": \"Indonesia \", \"desc_en\": \"mobile\", \"name_ru\": \"Индонезия \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+353(###)###-###\", \"cc\": \"IE\", \"name_en\": \"Ireland\", \"desc_en\": \"\", \"name_ru\": \"Ирландия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+972-5#-###-####\", \"cc\": \"IL\", \"name_en\": \"Israel \", \"desc_en\": \"mobile\", \"name_ru\": \"Израиль \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+972-#-###-####\", \"cc\": \"IL\", \"name_en\": \"Israel\", \"desc_en\": \"\", \"name_ru\": \"Израиль\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+91(####)###-###\", \"cc\": \"IN\", \"name_en\": \"India\", \"desc_en\": \"\", \"name_ru\": \"Индия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+246-###-####\", \"cc\": \"IO\", \"name_en\": \"Diego Garcia\", \"desc_en\": \"\", \"name_ru\": \"Диего-Гарсия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+964(###)###-####\", \"cc\": \"IQ\", \"name_en\": \"Iraq\", \"desc_en\": \"\", \"name_ru\": \"Ирак\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+98(###)###-####\", \"cc\": \"IR\", \"name_en\": \"Iran\", \"desc_en\": \"\", \"name_ru\": \"Иран\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+354-###-####\", \"cc\": \"IS\", \"name_en\": \"Iceland\", \"desc_en\": \"\", \"name_ru\": \"Исландия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+39(###)####-###\", \"cc\": \"IT\", \"name_en\": \"Italy\", \"desc_en\": \"\", \"name_ru\": \"Италия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(876)###-####\", \"cc\": \"JM\", \"name_en\": \"Jamaica\", \"desc_en\": \"\", \"name_ru\": \"Ямайка\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+962-#-####-####\", \"cc\": \"JO\", \"name_en\": \"Jordan\", \"desc_en\": \"\", \"name_ru\": \"Иордания\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+81-##-####-####\", \"cc\": \"JP\", \"name_en\": \"Japan \", \"desc_en\": \"mobile\", \"name_ru\": \"Япония \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+81(###)###-###\", \"cc\": \"JP\", \"name_en\": \"Japan\", \"desc_en\": \"\", \"name_ru\": \"Япония\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+254-###-######\", \"cc\": \"KE\", \"name_en\": \"Kenya\", \"desc_en\": \"\", \"name_ru\": \"Кения\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+996(###)###-###\", \"cc\": \"KG\", \"name_en\": \"Kyrgyzstan\", \"desc_en\": \"\", \"name_ru\": \"Киргизия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+855-##-###-###\", \"cc\": \"KH\", \"name_en\": \"Cambodia\", \"desc_en\": \"\", \"name_ru\": \"Камбоджа\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+686-##-###\", \"cc\": \"KI\", \"name_en\": \"Kiribati\", \"desc_en\": \"\", \"name_ru\": \"Кирибати\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+269-##-#####\", \"cc\": \"KM\", \"name_en\": \"Comoros\", \"desc_en\": \"\", \"name_ru\": \"Коморы\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(869)###-####\", \"cc\": \"KN\", \"name_en\": \"Saint Kitts & Nevis\", \"desc_en\": \"\", \"name_ru\": \"Сент-Китс и Невис\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+850-191-###-####\", \"cc\": \"KP\", \"name_en\": \"DPR Korea (North) \", \"desc_en\": \"mobile\", \"name_ru\": \"Корейская НДР \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+850-##-###-###\", \"cc\": \"KP\", \"name_en\": \"DPR Korea (North)\", \"desc_en\": \"\", \"name_ru\": \"Корейская НДР\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+850-###-####-###\", \"cc\": \"KP\", \"name_en\": \"DPR Korea (North)\", \"desc_en\": \"\", \"name_ru\": \"Корейская НДР\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+850-###-###\", \"cc\": \"KP\", \"name_en\": \"DPR Korea (North)\", \"desc_en\": \"\", \"name_ru\": \"Корейская НДР\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+850-####-####\", \"cc\": \"KP\", \"name_en\": \"DPR Korea (North)\", \"desc_en\": \"\", \"name_ru\": \"Корейская НДР\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+850-####-#############\", \"cc\": \"KP\", \"name_en\": \"DPR Korea (North)\", \"desc_en\": \"\", \"name_ru\": \"Корейская НДР\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+82-##-###-####\", \"cc\": \"KR\", \"name_en\": \"Korea (South)\", \"desc_en\": \"\", \"name_ru\": \"Респ. Корея\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+965-####-####\", \"cc\": \"KW\", \"name_en\": \"Kuwait\", \"desc_en\": \"\", \"name_ru\": \"Кувейт\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(345)###-####\", \"cc\": \"KY\", \"name_en\": \"Cayman Islands\", \"desc_en\": \"\", \"name_ru\": \"Каймановы острова\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+7(6##)###-##-##\", \"cc\": \"KZ\", \"name_en\": \"Kazakhstan\", \"desc_en\": \"\", \"name_ru\": \"Казахстан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+7(7##)###-##-##\", \"cc\": \"KZ\", \"name_en\": \"Kazakhstan\", \"desc_en\": \"\", \"name_ru\": \"Казахстан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+856(20##)###-###\", \"cc\": \"LA\", \"name_en\": \"Laos \", \"desc_en\": \"mobile\", \"name_ru\": \"Лаос \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+856-##-###-###\", \"cc\": \"LA\", \"name_en\": \"Laos\", \"desc_en\": \"\", \"name_ru\": \"Лаос\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+961-##-###-###\", \"cc\": \"LB\", \"name_en\": \"Lebanon \", \"desc_en\": \"mobile\", \"name_ru\": \"Ливан \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+961-#-###-###\", \"cc\": \"LB\", \"name_en\": \"Lebanon\", \"desc_en\": \"\", \"name_ru\": \"Ливан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(758)###-####\", \"cc\": \"LC\", \"name_en\": \"Saint Lucia\", \"desc_en\": \"\", \"name_ru\": \"Сент-Люсия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+423(###)###-####\", \"cc\": \"LI\", \"name_en\": \"Liechtenstein\", \"desc_en\": \"\", \"name_ru\": \"Лихтенштейн\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+94-##-###-####\", \"cc\": \"LK\", \"name_en\": \"Sri Lanka\", \"desc_en\": \"\", \"name_ru\": \"Шри-Ланка\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+231-##-###-###\", \"cc\": \"LR\", \"name_en\": \"Liberia\", \"desc_en\": \"\", \"name_ru\": \"Либерия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+266-#-###-####\", \"cc\": \"LS\", \"name_en\": \"Lesotho\", \"desc_en\": \"\", \"name_ru\": \"Лесото\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+370(###)##-###\", \"cc\": \"LT\", \"name_en\": \"Lithuania\", \"desc_en\": \"\", \"name_ru\": \"Литва\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+352(###)###-###\", \"cc\": \"LU\", \"name_en\": \"Luxembourg\", \"desc_en\": \"\", \"name_ru\": \"Люксембург\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+371-##-###-###\", \"cc\": \"LV\", \"name_en\": \"Latvia\", \"desc_en\": \"\", \"name_ru\": \"Латвия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+218-##-###-###\", \"cc\": \"LY\", \"name_en\": \"Libya\", \"desc_en\": \"\", \"name_ru\": \"Ливия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+218-21-###-####\", \"cc\": \"LY\", \"name_en\": \"Libya\", \"desc_en\": \"Tripoli\", \"name_ru\": \"Ливия\", \"desc_ru\": \"Триполи\" },\n\t{ \"mask\": \"+212-##-####-###\", \"cc\": \"MA\", \"name_en\": \"Morocco\", \"desc_en\": \"\", \"name_ru\": \"Марокко\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+377(###)###-###\", \"cc\": \"MC\", \"name_en\": \"Monaco\", \"desc_en\": \"\", \"name_ru\": \"Монако\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+377-##-###-###\", \"cc\": \"MC\", \"name_en\": \"Monaco\", \"desc_en\": \"\", \"name_ru\": \"Монако\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+373-####-####\", \"cc\": \"MD\", \"name_en\": \"Moldova\", \"desc_en\": \"\", \"name_ru\": \"Молдова\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+382-##-###-###\", \"cc\": \"ME\", \"name_en\": \"Montenegro\", \"desc_en\": \"\", \"name_ru\": \"Черногория\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+261-##-##-#####\", \"cc\": \"MG\", \"name_en\": \"Madagascar\", \"desc_en\": \"\", \"name_ru\": \"Мадагаскар\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+692-###-####\", \"cc\": \"MH\", \"name_en\": \"Marshall Islands\", \"desc_en\": \"\", \"name_ru\": \"Маршалловы Острова\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+389-##-###-###\", \"cc\": \"MK\", \"name_en\": \"Republic of Macedonia\", \"desc_en\": \"\", \"name_ru\": \"Респ. Македония\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+223-##-##-####\", \"cc\": \"ML\", \"name_en\": \"Mali\", \"desc_en\": \"\", \"name_ru\": \"Мали\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+95-##-###-###\", \"cc\": \"MM\", \"name_en\": \"Burma (Myanmar)\", \"desc_en\": \"\", \"name_ru\": \"Бирма (Мьянма)\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+95-#-###-###\", \"cc\": \"MM\", \"name_en\": \"Burma (Myanmar)\", \"desc_en\": \"\", \"name_ru\": \"Бирма (Мьянма)\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+95-###-###\", \"cc\": \"MM\", \"name_en\": \"Burma (Myanmar)\", \"desc_en\": \"\", \"name_ru\": \"Бирма (Мьянма)\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+976-##-##-####\", \"cc\": \"MN\", \"name_en\": \"Mongolia\", \"desc_en\": \"\", \"name_ru\": \"Монголия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+853-####-####\", \"cc\": \"MO\", \"name_en\": \"Macau\", \"desc_en\": \"\", \"name_ru\": \"Макао\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(670)###-####\", \"cc\": \"MP\", \"name_en\": \"Northern Mariana Islands\", \"desc_en\": \"\", \"name_ru\": \"Северные Марианские острова Сайпан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+596(###)##-##-##\", \"cc\": \"MQ\", \"name_en\": \"Martinique\", \"desc_en\": \"\", \"name_ru\": \"Мартиника\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+222-##-##-####\", \"cc\": \"MR\", \"name_en\": \"Mauritania\", \"desc_en\": \"\", \"name_ru\": \"Мавритания\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(664)###-####\", \"cc\": \"MS\", \"name_en\": \"Montserrat\", \"desc_en\": \"\", \"name_ru\": \"Монтсеррат\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+356-####-####\", \"cc\": \"MT\", \"name_en\": \"Malta\", \"desc_en\": \"\", \"name_ru\": \"Мальта\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+230-###-####\", \"cc\": \"MU\", \"name_en\": \"Mauritius\", \"desc_en\": \"\", \"name_ru\": \"Маврикий\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+960-###-####\", \"cc\": \"MV\", \"name_en\": \"Maldives\", \"desc_en\": \"\", \"name_ru\": \"Мальдивские острова\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+265-1-###-###\", \"cc\": \"MW\", \"name_en\": \"Malawi\", \"desc_en\": \"Telecom Ltd\", \"name_ru\": \"Малави\", \"desc_ru\": \"Telecom Ltd\" },\n\t{ \"mask\": \"+265-#-####-####\", \"cc\": \"MW\", \"name_en\": \"Malawi\", \"desc_en\": \"\", \"name_ru\": \"Малави\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+52(###)###-####\", \"cc\": \"MX\", \"name_en\": \"Mexico\", \"desc_en\": \"\", \"name_ru\": \"Мексика\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+52-##-##-####\", \"cc\": \"MX\", \"name_en\": \"Mexico\", \"desc_en\": \"\", \"name_ru\": \"Мексика\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+60-##-###-####\", \"cc\": \"MY\", \"name_en\": \"Malaysia \", \"desc_en\": \"mobile\", \"name_ru\": \"Малайзия \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+60(###)###-###\", \"cc\": \"MY\", \"name_en\": \"Malaysia\", \"desc_en\": \"\", \"name_ru\": \"Малайзия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+60-##-###-###\", \"cc\": \"MY\", \"name_en\": \"Malaysia\", \"desc_en\": \"\", \"name_ru\": \"Малайзия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+60-#-###-###\", \"cc\": \"MY\", \"name_en\": \"Malaysia\", \"desc_en\": \"\", \"name_ru\": \"Малайзия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+258-##-###-###\", \"cc\": \"MZ\", \"name_en\": \"Mozambique\", \"desc_en\": \"\", \"name_ru\": \"Мозамбик\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+264-##-###-####\", \"cc\": \"NA\", \"name_en\": \"Namibia\", \"desc_en\": \"\", \"name_ru\": \"Намибия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+687-##-####\", \"cc\": \"NC\", \"name_en\": \"New Caledonia\", \"desc_en\": \"\", \"name_ru\": \"Новая Каледония\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+227-##-##-####\", \"cc\": \"NE\", \"name_en\": \"Niger\", \"desc_en\": \"\", \"name_ru\": \"Нигер\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+672-3##-###\", \"cc\": \"NF\", \"name_en\": \"Norfolk Island\", \"desc_en\": \"\", \"name_ru\": \"Норфолк (остров)\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+234(###)###-####\", \"cc\": \"NG\", \"name_en\": \"Nigeria\", \"desc_en\": \"\", \"name_ru\": \"Нигерия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+234-##-###-###\", \"cc\": \"NG\", \"name_en\": \"Nigeria\", \"desc_en\": \"\", \"name_ru\": \"Нигерия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+234-##-###-##\", \"cc\": \"NG\", \"name_en\": \"Nigeria\", \"desc_en\": \"\", \"name_ru\": \"Нигерия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+234(###)###-####\", \"cc\": \"NG\", \"name_en\": \"Nigeria \", \"desc_en\": \"mobile\", \"name_ru\": \"Нигерия \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+505-####-####\", \"cc\": \"NI\", \"name_en\": \"Nicaragua\", \"desc_en\": \"\", \"name_ru\": \"Никарагуа\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+31-##-###-####\", \"cc\": \"NL\", \"name_en\": \"Netherlands\", \"desc_en\": \"\", \"name_ru\": \"Нидерланды\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+47(###)##-###\", \"cc\": \"NO\", \"name_en\": \"Norway\", \"desc_en\": \"\", \"name_ru\": \"Норвегия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+977-##-###-###\", \"cc\": \"NP\", \"name_en\": \"Nepal\", \"desc_en\": \"\", \"name_ru\": \"Непал\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+674-###-####\", \"cc\": \"NR\", \"name_en\": \"Nauru\", \"desc_en\": \"\", \"name_ru\": \"Науру\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+683-####\", \"cc\": \"NU\", \"name_en\": \"Niue\", \"desc_en\": \"\", \"name_ru\": \"Ниуэ\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+64(###)###-###\", \"cc\": \"NZ\", \"name_en\": \"New Zealand\", \"desc_en\": \"\", \"name_ru\": \"Новая Зеландия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+64-##-###-###\", \"cc\": \"NZ\", \"name_en\": \"New Zealand\", \"desc_en\": \"\", \"name_ru\": \"Новая Зеландия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+64(###)###-####\", \"cc\": \"NZ\", \"name_en\": \"New Zealand\", \"desc_en\": \"\", \"name_ru\": \"Новая Зеландия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+968-##-###-###\", \"cc\": \"OM\", \"name_en\": \"Oman\", \"desc_en\": \"\", \"name_ru\": \"Оман\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+507-###-####\", \"cc\": \"PA\", \"name_en\": \"Panama\", \"desc_en\": \"\", \"name_ru\": \"Панама\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+51(###)###-###\", \"cc\": \"PE\", \"name_en\": \"Peru\", \"desc_en\": \"\", \"name_ru\": \"Перу\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+689-##-##-##\", \"cc\": \"PF\", \"name_en\": \"French Polynesia\", \"desc_en\": \"\", \"name_ru\": \"Французская Полинезия (Таити)\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+675(###)##-###\", \"cc\": \"PG\", \"name_en\": \"Papua New Guinea\", \"desc_en\": \"\", \"name_ru\": \"Папуа-Новая Гвинея\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+63(###)###-####\", \"cc\": \"PH\", \"name_en\": \"Philippines\", \"desc_en\": \"\", \"name_ru\": \"Филиппины\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+92(###)###-####\", \"cc\": \"PK\", \"name_en\": \"Pakistan\", \"desc_en\": \"\", \"name_ru\": \"Пакистан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+48(###)###-###\", \"cc\": \"PL\", \"name_en\": \"Poland\", \"desc_en\": \"\", \"name_ru\": \"Польша\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+970-##-###-####\", \"cc\": \"PS\", \"name_en\": \"Palestine\", \"desc_en\": \"\", \"name_ru\": \"Палестина\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+351-##-###-####\", \"cc\": \"PT\", \"name_en\": \"Portugal\", \"desc_en\": \"\", \"name_ru\": \"Португалия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+680-###-####\", \"cc\": \"PW\", \"name_en\": \"Palau\", \"desc_en\": \"\", \"name_ru\": \"Палау\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+595(###)###-###\", \"cc\": \"PY\", \"name_en\": \"Paraguay\", \"desc_en\": \"\", \"name_ru\": \"Парагвай\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+974-####-####\", \"cc\": \"QA\", \"name_en\": \"Qatar\", \"desc_en\": \"\", \"name_ru\": \"Катар\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+262-#####-####\", \"cc\": \"RE\", \"name_en\": \"Reunion\", \"desc_en\": \"\", \"name_ru\": \"Реюньон\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+40-##-###-####\", \"cc\": \"RO\", \"name_en\": \"Romania\", \"desc_en\": \"\", \"name_ru\": \"Румыния\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+381-##-###-####\", \"cc\": \"RS\", \"name_en\": \"Serbia\", \"desc_en\": \"\", \"name_ru\": \"Сербия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+7(###)###-##-##\", \"cc\": \"RU\", \"name_en\": \"Russia\", \"desc_en\": \"\", \"name_ru\": \"Россия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+250(###)###-###\", \"cc\": \"RW\", \"name_en\": \"Rwanda\", \"desc_en\": \"\", \"name_ru\": \"Руанда\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+966-5-####-####\", \"cc\": \"SA\", \"name_en\": \"Saudi Arabia \", \"desc_en\": \"mobile\", \"name_ru\": \"Саудовская Аравия \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+966-#-###-####\", \"cc\": \"SA\", \"name_en\": \"Saudi Arabia\", \"desc_en\": \"\", \"name_ru\": \"Саудовская Аравия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+677-###-####\", \"cc\": \"SB\", \"name_en\": \"Solomon Islands \", \"desc_en\": \"mobile\", \"name_ru\": \"Соломоновы Острова \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+677-#####\", \"cc\": \"SB\", \"name_en\": \"Solomon Islands\", \"desc_en\": \"\", \"name_ru\": \"Соломоновы Острова\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+248-#-###-###\", \"cc\": \"SC\", \"name_en\": \"Seychelles\", \"desc_en\": \"\", \"name_ru\": \"Сейшелы\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+249-##-###-####\", \"cc\": \"SD\", \"name_en\": \"Sudan\", \"desc_en\": \"\", \"name_ru\": \"Судан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+46-##-###-####\", \"cc\": \"SE\", \"name_en\": \"Sweden\", \"desc_en\": \"\", \"name_ru\": \"Швеция\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+65-####-####\", \"cc\": \"SG\", \"name_en\": \"Singapore\", \"desc_en\": \"\", \"name_ru\": \"Сингапур\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+290-####\", \"cc\": \"SH\", \"name_en\": \"Saint Helena\", \"desc_en\": \"\", \"name_ru\": \"Остров Святой Елены\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+290-####\", \"cc\": \"SH\", \"name_en\": \"Tristan da Cunha\", \"desc_en\": \"\", \"name_ru\": \"Тристан-да-Кунья\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+386-##-###-###\", \"cc\": \"SI\", \"name_en\": \"Slovenia\", \"desc_en\": \"\", \"name_ru\": \"Словения\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+421(###)###-###\", \"cc\": \"SK\", \"name_en\": \"Slovakia\", \"desc_en\": \"\", \"name_ru\": \"Словакия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+232-##-######\", \"cc\": \"SL\", \"name_en\": \"Sierra Leone\", \"desc_en\": \"\", \"name_ru\": \"Сьерра-Леоне\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+378-####-######\", \"cc\": \"SM\", \"name_en\": \"San Marino\", \"desc_en\": \"\", \"name_ru\": \"Сан-Марино\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+221-##-###-####\", \"cc\": \"SN\", \"name_en\": \"Senegal\", \"desc_en\": \"\", \"name_ru\": \"Сенегал\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+252-##-###-###\", \"cc\": \"SO\", \"name_en\": \"Somalia\", \"desc_en\": \"\", \"name_ru\": \"Сомали\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+252-#-###-###\", \"cc\": \"SO\", \"name_en\": \"Somalia\", \"desc_en\": \"\", \"name_ru\": \"Сомали\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+252-#-###-###\", \"cc\": \"SO\", \"name_en\": \"Somalia \", \"desc_en\": \"mobile\", \"name_ru\": \"Сомали \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+597-###-####\", \"cc\": \"SR\", \"name_en\": \"Suriname \", \"desc_en\": \"mobile\", \"name_ru\": \"Суринам \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+597-###-###\", \"cc\": \"SR\", \"name_en\": \"Suriname\", \"desc_en\": \"\", \"name_ru\": \"Суринам\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+211-##-###-####\", \"cc\": \"SS\", \"name_en\": \"South Sudan\", \"desc_en\": \"\", \"name_ru\": \"Южный Судан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+239-##-#####\", \"cc\": \"ST\", \"name_en\": \"Sao Tome and Principe\", \"desc_en\": \"\", \"name_ru\": \"Сан-Томе и Принсипи\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+503-##-##-####\", \"cc\": \"SV\", \"name_en\": \"El Salvador\", \"desc_en\": \"\", \"name_ru\": \"Сальвадор\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(721)###-####\", \"cc\": \"SX\", \"name_en\": \"Sint Maarten\", \"desc_en\": \"\", \"name_ru\": \"Синт-Маартен\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+963-##-####-###\", \"cc\": \"SY\", \"name_en\": \"Syrian Arab Republic\", \"desc_en\": \"\", \"name_ru\": \"Сирийская арабская республика\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+268-##-##-####\", \"cc\": \"SZ\", \"name_en\": \"Swaziland\", \"desc_en\": \"\", \"name_ru\": \"Свазиленд\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(649)###-####\", \"cc\": \"TC\", \"name_en\": \"Turks & Caicos\", \"desc_en\": \"\", \"name_ru\": \"Тёркс и Кайкос\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+235-##-##-##-##\", \"cc\": \"TD\", \"name_en\": \"Chad\", \"desc_en\": \"\", \"name_ru\": \"Чад\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+228-##-###-###\", \"cc\": \"TG\", \"name_en\": \"Togo\", \"desc_en\": \"\", \"name_ru\": \"Того\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+66-##-###-####\", \"cc\": \"TH\", \"name_en\": \"Thailand \", \"desc_en\": \"mobile\", \"name_ru\": \"Таиланд \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+66-##-###-###\", \"cc\": \"TH\", \"name_en\": \"Thailand\", \"desc_en\": \"\", \"name_ru\": \"Таиланд\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+992-##-###-####\", \"cc\": \"TJ\", \"name_en\": \"Tajikistan\", \"desc_en\": \"\", \"name_ru\": \"Таджикистан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+690-####\", \"cc\": \"TK\", \"name_en\": \"Tokelau\", \"desc_en\": \"\", \"name_ru\": \"Токелау\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+670-###-####\", \"cc\": \"TL\", \"name_en\": \"East Timor\", \"desc_en\": \"\", \"name_ru\": \"Восточный Тимор\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+670-77#-#####\", \"cc\": \"TL\", \"name_en\": \"East Timor\", \"desc_en\": \"Timor Telecom\", \"name_ru\": \"Восточный Тимор\", \"desc_ru\": \"Timor Telecom\" },\n\t{ \"mask\": \"+670-78#-#####\", \"cc\": \"TL\", \"name_en\": \"East Timor\", \"desc_en\": \"Timor Telecom\", \"name_ru\": \"Восточный Тимор\", \"desc_ru\": \"Timor Telecom\" },\n\t{ \"mask\": \"+993-#-###-####\", \"cc\": \"TM\", \"name_en\": \"Turkmenistan\", \"desc_en\": \"\", \"name_ru\": \"Туркменистан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+216-##-###-###\", \"cc\": \"TN\", \"name_en\": \"Tunisia\", \"desc_en\": \"\", \"name_ru\": \"Тунис\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+676-#####\", \"cc\": \"TO\", \"name_en\": \"Tonga\", \"desc_en\": \"\", \"name_ru\": \"Тонга\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+90(###)###-####\", \"cc\": \"TR\", \"name_en\": \"Turkey\", \"desc_en\": \"\", \"name_ru\": \"Турция\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(868)###-####\", \"cc\": \"TT\", \"name_en\": \"Trinidad & Tobago\", \"desc_en\": \"\", \"name_ru\": \"Тринидад и Тобаго\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+688-90####\", \"cc\": \"TV\", \"name_en\": \"Tuvalu \", \"desc_en\": \"mobile\", \"name_ru\": \"Тувалу \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+688-2####\", \"cc\": \"TV\", \"name_en\": \"Tuvalu\", \"desc_en\": \"\", \"name_ru\": \"Тувалу\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+886-#-####-####\", \"cc\": \"TW\", \"name_en\": \"Taiwan\", \"desc_en\": \"\", \"name_ru\": \"Тайвань\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+886-####-####\", \"cc\": \"TW\", \"name_en\": \"Taiwan\", \"desc_en\": \"\", \"name_ru\": \"Тайвань\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+255-##-###-####\", \"cc\": \"TZ\", \"name_en\": \"Tanzania\", \"desc_en\": \"\", \"name_ru\": \"Танзания\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+380(##)###-##-##\", \"cc\": \"UA\", \"name_en\": \"Ukraine\", \"desc_en\": \"\", \"name_ru\": \"Украина\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+256(###)###-###\", \"cc\": \"UG\", \"name_en\": \"Uganda\", \"desc_en\": \"\", \"name_ru\": \"Уганда\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+44-##-####-####\", \"cc\": \"UK\", \"name_en\": \"United Kingdom\", \"desc_en\": \"\", \"name_ru\": \"Великобритания\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+598-#-###-##-##\", \"cc\": \"UY\", \"name_en\": \"Uruguay\", \"desc_en\": \"\", \"name_ru\": \"Уругвай\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+998-##-###-####\", \"cc\": \"UZ\", \"name_en\": \"Uzbekistan\", \"desc_en\": \"\", \"name_ru\": \"Узбекистан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+39-6-698-#####\", \"cc\": \"VA\", \"name_en\": \"Vatican City\", \"desc_en\": \"\", \"name_ru\": \"Ватикан\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(784)###-####\", \"cc\": \"VC\", \"name_en\": \"Saint Vincent & the Grenadines\", \"desc_en\": \"\", \"name_ru\": \"Сент-Винсент и Гренадины\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+58(###)###-####\", \"cc\": \"VE\", \"name_en\": \"Venezuela\", \"desc_en\": \"\", \"name_ru\": \"Венесуэла\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(284)###-####\", \"cc\": \"VG\", \"name_en\": \"British Virgin Islands\", \"desc_en\": \"\", \"name_ru\": \"Британские Виргинские острова\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(340)###-####\", \"cc\": \"VI\", \"name_en\": \"US Virgin Islands\", \"desc_en\": \"\", \"name_ru\": \"Американские Виргинские острова\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+84-##-####-###\", \"cc\": \"VN\", \"name_en\": \"Vietnam\", \"desc_en\": \"\", \"name_ru\": \"Вьетнам\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+84(###)####-###\", \"cc\": \"VN\", \"name_en\": \"Vietnam\", \"desc_en\": \"\", \"name_ru\": \"Вьетнам\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+678-##-#####\", \"cc\": \"VU\", \"name_en\": \"Vanuatu \", \"desc_en\": \"mobile\", \"name_ru\": \"Вануату \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+678-#####\", \"cc\": \"VU\", \"name_en\": \"Vanuatu\", \"desc_en\": \"\", \"name_ru\": \"Вануату\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+681-##-####\", \"cc\": \"WF\", \"name_en\": \"Wallis and Futuna\", \"desc_en\": \"\", \"name_ru\": \"Уоллис и Футуна\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+685-##-####\", \"cc\": \"WS\", \"name_en\": \"Samoa\", \"desc_en\": \"\", \"name_ru\": \"Самоа\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+967-###-###-###\", \"cc\": \"YE\", \"name_en\": \"Yemen \", \"desc_en\": \"mobile\", \"name_ru\": \"Йемен \", \"desc_ru\": \"мобильные\" },\n\t{ \"mask\": \"+967-#-###-###\", \"cc\": \"YE\", \"name_en\": \"Yemen\", \"desc_en\": \"\", \"name_ru\": \"Йемен\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+967-##-###-###\", \"cc\": \"YE\", \"name_en\": \"Yemen\", \"desc_en\": \"\", \"name_ru\": \"Йемен\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+27-##-###-####\", \"cc\": \"ZA\", \"name_en\": \"South Africa\", \"desc_en\": \"\", \"name_ru\": \"Южно-Африканская Респ.\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+260-##-###-####\", \"cc\": \"ZM\", \"name_en\": \"Zambia\", \"desc_en\": \"\", \"name_ru\": \"Замбия\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+263-#-######\", \"cc\": \"ZW\", \"name_en\": \"Zimbabwe\", \"desc_en\": \"\", \"name_ru\": \"Зимбабве\", \"desc_ru\": \"\" },\n\t{ \"mask\": \"+1(###)###-####\", \"cc\": [\"US\", \"CA\"], \"name_en\": \"USA and Canada\", \"desc_en\": \"\", \"name_ru\": \"США и Канада\", \"desc_ru\": \"\" }\n]\n"
  },
  {
    "path": "public/adminlte/plugins/input-mask/phone-codes/readme.txt",
    "content": "more phone masks can be found at https://github.com/andr-04/inputmask-multi "
  },
  {
    "path": "public/adminlte/plugins/ionslider/ion.rangeSlider.css",
    "content": "/* Ion.RangeSlider\n// css version 2.0.3\n// © 2013-2014 Denis Ineshin | IonDen.com\n// ===================================================================================================================*/\n\n/* =====================================================================================================================\n// RangeSlider */\n\n.irs {\n    position: relative; display: block;\n    -webkit-touch-callout: none;\n    -webkit-user-select: none;\n     -khtml-user-select: none;\n       -moz-user-select: none;\n        -ms-user-select: none;\n            user-select: none;\n}\n    .irs-line {\n        position: relative; display: block;\n        overflow: hidden;\n        outline: none !important;\n    }\n        .irs-line-left, .irs-line-mid, .irs-line-right {\n            position: absolute; display: block;\n            top: 0;\n        }\n        .irs-line-left {\n            left: 0; width: 11%;\n        }\n        .irs-line-mid {\n            left: 9%; width: 82%;\n        }\n        .irs-line-right {\n            right: 0; width: 11%;\n        }\n\n    .irs-bar {\n        position: absolute; display: block;\n        left: 0; width: 0;\n    }\n        .irs-bar-edge {\n            position: absolute; display: block;\n            top: 0; left: 0;\n        }\n\n    .irs-shadow {\n        position: absolute; display: none;\n        left: 0; width: 0;\n    }\n\n    .irs-slider {\n        position: absolute; display: block;\n        cursor: default;\n        z-index: 1;\n    }\n        .irs-slider.single {\n\n        }\n        .irs-slider.from {\n\n        }\n        .irs-slider.to {\n\n        }\n        .irs-slider.type_last {\n            z-index: 2;\n        }\n\n    .irs-min {\n        position: absolute; display: block;\n        left: 0;\n        cursor: default;\n    }\n    .irs-max {\n        position: absolute; display: block;\n        right: 0;\n        cursor: default;\n    }\n\n    .irs-from, .irs-to, .irs-single {\n        position: absolute; display: block;\n        top: 0; left: 0;\n        cursor: default;\n        white-space: nowrap;\n    }\n\n.irs-grid {\n    position: absolute; display: none;\n    bottom: 0; left: 0;\n    width: 100%; height: 20px;\n}\n.irs-with-grid .irs-grid {\n    display: block;\n}\n    .irs-grid-pol {\n        position: absolute;\n        top: 0; left: 0;\n        width: 1px; height: 8px;\n        background: #000;\n    }\n    .irs-grid-pol.small {\n        height: 4px;\n    }\n    .irs-grid-text {\n        position: absolute;\n        bottom: 0; left: 0;\n        white-space: nowrap;\n        text-align: center;\n        font-size: 9px; line-height: 9px;\n        padding: 0 3px;\n        color: #000;\n    }\n\n.irs-disable-mask {\n    position: absolute; display: block;\n    top: 0; left: -1%;\n    width: 102%; height: 100%;\n    cursor: default;\n    background: rgba(0,0,0,0.0);\n    z-index: 2;\n}\n.lt-ie9 .irs-disable-mask {\n    background: #000;\n    filter: alpha(opacity=0);\n    cursor: not-allowed;\n}\n\n.irs-disabled {\n    opacity: 0.4;\n}\n\n\n.irs-hidden-input {\n    position: absolute !important;\n    display: block !important;\n    top: 0 !important;\n    left: 0 !important;\n    width: 0 !important;\n    height: 0 !important;\n    font-size: 0 !important;\n    line-height: 0 !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    outline: none !important;\n    z-index: -9999 !important;\n    background: none !important;\n    border-style: solid !important;\n    border-color: transparent !important;\n}\n"
  },
  {
    "path": "public/adminlte/plugins/ionslider/ion.rangeSlider.skinFlat.css",
    "content": "/* Ion.RangeSlider, Flat UI Skin\n// css version 2.0.3\n// © Denis Ineshin, 2014    https://github.com/IonDen\n// ===================================================================================================================*/\n\n/* =====================================================================================================================\n// Skin details */\n\n.irs-line-mid,\n.irs-line-left,\n.irs-line-right,\n.irs-bar,\n.irs-bar-edge,\n.irs-slider {\n    background: url(img/sprite-skin-flat.png) repeat-x;\n}\n\n.irs {\n    height: 40px;\n}\n.irs-with-grid {\n    height: 60px;\n}\n.irs-line {\n    height: 12px; top: 25px;\n}\n    .irs-line-left {\n        height: 12px;\n        background-position: 0 -30px;\n    }\n    .irs-line-mid {\n        height: 12px;\n        background-position: 0 0;\n    }\n    .irs-line-right {\n        height: 12px;\n        background-position: 100% -30px;\n    }\n\n.irs-bar {\n    height: 12px; top: 25px;\n    background-position: 0 -60px;\n}\n    .irs-bar-edge {\n        top: 25px;\n        height: 12px; width: 9px;\n        background-position: 0 -90px;\n    }\n\n.irs-shadow {\n    height: 3px; top: 34px;\n    background: #000;\n    opacity: 0.25;\n}\n.lt-ie9 .irs-shadow {\n    filter: alpha(opacity=25);\n}\n\n.irs-slider {\n    width: 16px; height: 18px;\n    top: 22px;\n    background-position: 0 -120px;\n}\n.irs-slider.state_hover, .irs-slider:hover {\n    background-position: 0 -150px;\n}\n\n.irs-min, .irs-max {\n    color: #999;\n    font-size: 10px; line-height: 1.333;\n    text-shadow: none;\n    top: 0; padding: 1px 3px;\n    background: #e1e4e9;\n    -moz-border-radius: 4px;\n    border-radius: 4px;\n}\n\n.irs-from, .irs-to, .irs-single {\n    color: #fff;\n    font-size: 10px; line-height: 1.333;\n    text-shadow: none;\n    padding: 1px 5px;\n    background: #ed5565;\n    -moz-border-radius: 4px;\n    border-radius: 4px;\n}\n.irs-from:after, .irs-to:after, .irs-single:after {\n    position: absolute; display: block; content: \"\";\n    bottom: -6px; left: 50%;\n    width: 0; height: 0;\n    margin-left: -3px;\n    overflow: hidden;\n    border: 3px solid transparent;\n    border-top-color: #ed5565;\n}\n\n\n.irs-grid-pol {\n    background: #e1e4e9;\n}\n.irs-grid-text {\n    color: #999;\n}\n\n.irs-disabled {\n}\n"
  },
  {
    "path": "public/adminlte/plugins/ionslider/ion.rangeSlider.skinNice.css",
    "content": "/* Ion.RangeSlider, Nice Skin\n// css version 2.0.3\n// © Denis Ineshin, 2014    https://github.com/IonDen\n// ===================================================================================================================*/\n\n/* =====================================================================================================================\n// Skin details */\n\n.irs-line-mid,\n.irs-line-left,\n.irs-line-right,\n.irs-bar,\n.irs-bar-edge,\n.irs-slider {\n    background: url(img/sprite-skin-nice.png) repeat-x;\n}\n\n.irs {\n    height: 40px;\n}\n.irs-with-grid {\n    height: 60px;\n}\n.irs-line {\n    height: 8px; top: 25px;\n}\n    .irs-line-left {\n        height: 8px;\n        background-position: 0 -30px;\n    }\n    .irs-line-mid {\n        height: 8px;\n        background-position: 0 0;\n    }\n    .irs-line-right {\n        height: 8px;\n        background-position: 100% -30px;\n    }\n\n.irs-bar {\n    height: 8px; top: 25px;\n    background-position: 0 -60px;\n}\n    .irs-bar-edge {\n        top: 25px;\n        height: 8px; width: 11px;\n        background-position: 0 -90px;\n    }\n\n.irs-shadow {\n    height: 1px; top: 34px;\n    background: #000;\n    opacity: 0.15;\n}\n.lt-ie9 .irs-shadow {\n    filter: alpha(opacity=15);\n}\n\n.irs-slider {\n    width: 22px; height: 22px;\n    top: 17px;\n    background-position: 0 -120px;\n}\n.irs-slider.state_hover, .irs-slider:hover {\n    background-position: 0 -150px;\n}\n\n.irs-min, .irs-max {\n    color: #999;\n    font-size: 10px; line-height: 1.333;\n    text-shadow: none;\n    top: 0; padding: 1px 3px;\n    background: rgba(0,0,0,0.1);\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n}\n.lt-ie9 .irs-min, .lt-ie9 .irs-max {\n    background: #ccc;\n}\n\n.irs-from, .irs-to, .irs-single {\n    color: #fff;\n    font-size: 10px; line-height: 1.333;\n    text-shadow: none;\n    padding: 1px 5px;\n    background: rgba(0,0,0,0.3);\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n}\n.lt-ie9 .irs-from, .lt-ie9 .irs-to, .lt-ie9 .irs-single {\n    background: #999;\n}\n\n.irs-grid-pol {\n    background: #99a4ac;\n}\n.irs-grid-text {\n    color: #99a4ac;\n}\n\n.irs-disabled {\n}\n"
  },
  {
    "path": "public/adminlte/plugins/jQueryUI/jquery-ui.js",
    "content": "/*! jQuery UI - v1.11.4 - 2015-03-11\n* http://jqueryui.com\n* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js\n* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */\n\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n/*!\n * jQuery UI Core 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/ui-core/\n */\n\n\n// $.ui might exist from components with no dependencies, e.g., $.ui.position\n$.ui = $.ui || {};\n\n$.extend( $.ui, {\n\tversion: \"1.11.4\",\n\n\tkeyCode: {\n\t\tBACKSPACE: 8,\n\t\tCOMMA: 188,\n\t\tDELETE: 46,\n\t\tDOWN: 40,\n\t\tEND: 35,\n\t\tENTER: 13,\n\t\tESCAPE: 27,\n\t\tHOME: 36,\n\t\tLEFT: 37,\n\t\tPAGE_DOWN: 34,\n\t\tPAGE_UP: 33,\n\t\tPERIOD: 190,\n\t\tRIGHT: 39,\n\t\tSPACE: 32,\n\t\tTAB: 9,\n\t\tUP: 38\n\t}\n});\n\n// plugins\n$.fn.extend({\n\tscrollParent: function( includeHidden ) {\n\t\tvar position = this.css( \"position\" ),\n\t\t\texcludeStaticParent = position === \"absolute\",\n\t\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\t\tscrollParent = this.parents().filter( function() {\n\t\t\t\tvar parent = $( this );\n\t\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) + parent.css( \"overflow-x\" ) );\n\t\t\t}).eq( 0 );\n\n\t\treturn position === \"fixed\" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent;\n\t},\n\n\tuniqueId: (function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each(function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t})(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each(function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t});\n\t}\n});\n\n// selectors\nfunction focusable( element, isTabIndexNotNaN ) {\n\tvar map, mapName, img,\n\t\tnodeName = element.nodeName.toLowerCase();\n\tif ( \"area\" === nodeName ) {\n\t\tmap = element.parentNode;\n\t\tmapName = map.name;\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\n\t\t\treturn false;\n\t\t}\n\t\timg = $( \"img[usemap='#\" + mapName + \"']\" )[ 0 ];\n\t\treturn !!img && visible( img );\n\t}\n\treturn ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?\n\t\t!element.disabled :\n\t\t\"a\" === nodeName ?\n\t\t\telement.href || isTabIndexNotNaN :\n\t\t\tisTabIndexNotNaN) &&\n\t\t// the element and all of its ancestors must be visible\n\t\tvisible( element );\n}\n\nfunction visible( element ) {\n\treturn $.expr.filters.visible( element ) &&\n\t\t!$( element ).parents().addBack().filter(function() {\n\t\t\treturn $.css( this, \"visibility\" ) === \"hidden\";\n\t\t}).length;\n}\n\n$.extend( $.expr[ \":\" ], {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo(function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t}) :\n\t\t// support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t},\n\n\tfocusable: function( element ) {\n\t\treturn focusable( element, !isNaN( $.attr( element, \"tabindex\" ) ) );\n\t},\n\n\ttabbable: function( element ) {\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\n\t\t\tisTabIndexNaN = isNaN( tabIndex );\n\t\treturn ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );\n\t}\n});\n\n// support: jQuery <1.8\nif ( !$( \"<a>\" ).outerWidth( 1 ).jquery ) {\n\t$.each( [ \"Width\", \"Height\" ], function( i, name ) {\n\t\tvar side = name === \"Width\" ? [ \"Left\", \"Right\" ] : [ \"Top\", \"Bottom\" ],\n\t\t\ttype = name.toLowerCase(),\n\t\t\torig = {\n\t\t\t\tinnerWidth: $.fn.innerWidth,\n\t\t\t\tinnerHeight: $.fn.innerHeight,\n\t\t\t\touterWidth: $.fn.outerWidth,\n\t\t\t\touterHeight: $.fn.outerHeight\n\t\t\t};\n\n\t\tfunction reduce( elem, size, border, margin ) {\n\t\t\t$.each( side, function() {\n\t\t\t\tsize -= parseFloat( $.css( elem, \"padding\" + this ) ) || 0;\n\t\t\t\tif ( border ) {\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"border\" + this + \"Width\" ) ) || 0;\n\t\t\t\t}\n\t\t\t\tif ( margin ) {\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"margin\" + this ) ) || 0;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn size;\n\t\t}\n\n\t\t$.fn[ \"inner\" + name ] = function( size ) {\n\t\t\tif ( size === undefined ) {\n\t\t\t\treturn orig[ \"inner\" + name ].call( this );\n\t\t\t}\n\n\t\t\treturn this.each(function() {\n\t\t\t\t$( this ).css( type, reduce( this, size ) + \"px\" );\n\t\t\t});\n\t\t};\n\n\t\t$.fn[ \"outer\" + name] = function( size, margin ) {\n\t\t\tif ( typeof size !== \"number\" ) {\n\t\t\t\treturn orig[ \"outer\" + name ].call( this, size );\n\t\t\t}\n\n\t\t\treturn this.each(function() {\n\t\t\t\t$( this).css( type, reduce( this, size, true, margin ) + \"px\" );\n\t\t\t});\n\t\t};\n\t});\n}\n\n// support: jQuery <1.8\nif ( !$.fn.addBack ) {\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)\nif ( $( \"<a>\" ).data( \"a-b\", \"a\" ).removeData( \"a-b\" ).data( \"a-b\" ) ) {\n\t$.fn.removeData = (function( removeData ) {\n\t\treturn function( key ) {\n\t\t\tif ( arguments.length ) {\n\t\t\t\treturn removeData.call( this, $.camelCase( key ) );\n\t\t\t} else {\n\t\t\t\treturn removeData.call( this );\n\t\t\t}\n\t\t};\n\t})( $.fn.removeData );\n}\n\n// deprecated\n$.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n\n$.fn.extend({\n\tfocus: (function( orig ) {\n\t\treturn function( delay, fn ) {\n\t\t\treturn typeof delay === \"number\" ?\n\t\t\t\tthis.each(function() {\n\t\t\t\t\tvar elem = this;\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t$( elem ).focus();\n\t\t\t\t\t\tif ( fn ) {\n\t\t\t\t\t\t\tfn.call( elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}, delay );\n\t\t\t\t}) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t})( $.fn.focus ),\n\n\tdisableSelection: (function() {\n\t\tvar eventType = \"onselectstart\" in document.createElement( \"div\" ) ?\n\t\t\t\"selectstart\" :\n\t\t\t\"mousedown\";\n\n\t\treturn function() {\n\t\t\treturn this.bind( eventType + \".ui-disableSelection\", function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\t\t};\n\t})(),\n\n\tenableSelection: function() {\n\t\treturn this.unbind( \".ui-disableSelection\" );\n\t},\n\n\tzIndex: function( zIndex ) {\n\t\tif ( zIndex !== undefined ) {\n\t\t\treturn this.css( \"zIndex\", zIndex );\n\t\t}\n\n\t\tif ( this.length ) {\n\t\t\tvar elem = $( this[ 0 ] ), position, value;\n\t\t\twhile ( elem.length && elem[ 0 ] !== document ) {\n\t\t\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t\t\t// This makes behavior of this function consistent across browsers\n\t\t\t\t// WebKit always returns auto if the element is positioned\n\t\t\t\tposition = elem.css( \"position\" );\n\t\t\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\n\t\t\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t\t\t// other browsers return a string\n\t\t\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\n\t\t\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telem = elem.parent();\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t}\n});\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\n$.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n/*!\n * jQuery UI Widget 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/jQuery.widget/\n */\n\n\nvar widget_uuid = 0,\n\twidget_slice = Array.prototype.slice;\n\n$.cleanData = (function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; (elem = elems[i]) != null; i++ ) {\n\t\t\ttry {\n\n\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\tevents = $._data( elem, \"events\" );\n\t\t\t\tif ( events && events.remove ) {\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t\t}\n\n\t\t\t// http://bugs.jquery.com/ticket/8235\n\t\t\t} catch ( e ) {}\n\t\t}\n\t\torig( elems );\n\t};\n})( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar fullName, existingConstructor, constructor, basePrototype,\n\t\t// proxiedPrototype allows the provided prototype to remain unmodified\n\t\t// so that it can be used as a mixin for multiple widgets (#8876)\n\t\tproxiedPrototype = {},\n\t\tnamespace = name.split( \".\" )[ 0 ];\n\n\tname = name.split( \".\" )[ 1 ];\n\tfullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\t// create selector for plugin\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\t\t// allow instantiation without \"new\" keyword\n\t\tif ( !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\t// extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\t\t// copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\t\t// track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t});\n\n\tbasePrototype = new base();\n\t// we need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( !$.isFunction( value ) ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = (function() {\n\t\t\tvar _super = function() {\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t\t},\n\t\t\t\t_superApply = function( args ) {\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t\t};\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super,\n\t\t\t\t\t__superApply = this._superApply,\n\t\t\t\t\treturnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t})();\n\t});\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t});\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor, child._proto );\n\t\t});\n\t\t// remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widget_slice.call( arguments, 1 ),\n\t\tinputIndex = 0,\n\t\tinputLength = input.length,\n\t\tkey,\n\t\tvalue;\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\",\n\t\t\targs = widget_slice.call( arguments, 1 ),\n\t\t\treturnValue = this;\n\n\t\tif ( isMethodCall ) {\n\t\t\tthis.each(function() {\n\t\t\t\tvar methodValue,\n\t\t\t\t\tinstance = $.data( this, fullName );\n\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\treturnValue = instance;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif ( !instance ) {\n\t\t\t\t\treturn $.error( \"cannot call methods on \" + name + \" prior to initialization; \" +\n\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t}\n\t\t\t\tif ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name + \" widget instance\" );\n\t\t\t\t}\n\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\tmethodValue;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat(args) );\n\t\t\t}\n\n\t\t\tthis.each(function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\toptions: {\n\t\tdisabled: false,\n\n\t\t// callbacks\n\t\tcreate: null\n\t},\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widget_uuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.document = $( element.style ?\n\t\t\t\t// element within the document\n\t\t\t\telement.ownerDocument :\n\t\t\t\t// element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[0].defaultView || this.document[0].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\t_getCreateOptions: $.noop,\n\t_getCreateEventData: $.noop,\n\t_create: $.noop,\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tthis._destroy();\n\t\t// we can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.unbind( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName )\n\t\t\t// support: jquery <1.6.3\n\t\t\t// http://bugs.jquery.com/ticket/9413\n\t\t\t.removeData( $.camelCase( this.widgetFullName ) );\n\t\tthis.widget()\n\t\t\t.unbind( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" )\n\t\t\t.removeClass(\n\t\t\t\tthis.widgetFullName + \"-disabled \" +\n\t\t\t\t\"ui-state-disabled\" );\n\n\t\t// clean up events and states\n\t\tthis.bindings.unbind( this.eventNamespace );\n\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\n\t\tthis.focusable.removeClass( \"ui-state-focus\" );\n\t},\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key,\n\t\t\tparts,\n\t\t\tcurOption,\n\t\t\ti;\n\n\t\tif ( arguments.length === 0 ) {\n\t\t\t// don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\t\t\t// handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\t_setOption: function( key, value ) {\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.widget()\n\t\t\t\t.toggleClass( this.widgetFullName + \"-disabled\", !!value );\n\n\t\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\t\tif ( value ) {\n\t\t\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\n\t\t\t\tthis.focusable.removeClass( \"ui-state-focus\" );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions({ disabled: false });\n\t},\n\tdisable: function() {\n\t\treturn this._setOptions({ disabled: true });\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement,\n\t\t\tinstance = this;\n\n\t\t// no suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// no element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\t\t\t\t// allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ ),\n\t\t\t\teventName = match[1] + instance.eventNamespace,\n\t\t\t\tselector = match[2];\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.delegate( selector, eventName, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.bind( eventName, handlerProxy );\n\t\t\t}\n\t\t});\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = (eventName || \"\").split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.unbind( eventName ).undelegate( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-hover\" );\n\t\t\t}\n\t\t});\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-focus\" );\n\t\t\t}\n\t\t});\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig,\n\t\t\tcallback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\t\t// the original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( $.isFunction( callback ) &&\n\t\t\tcallback.apply( this.element[0], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\t\tvar hasOptions,\n\t\t\teffectName = !options ?\n\t\t\t\tmethod :\n\t\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\t\tdefaultEffect :\n\t\t\t\t\toptions.effect || defaultEffect;\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t}\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue(function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t});\n\t\t}\n\t};\n});\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Mouse 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/mouse/\n */\n\n\nvar mouseHandled = false;\n$( document ).mouseup( function() {\n\tmouseHandled = false;\n});\n\nvar mouse = $.widget(\"ui.mouse\", {\n\tversion: \"1.11.4\",\n\toptions: {\n\t\tcancel: \"input,textarea,button,select,option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.bind(\"mousedown.\" + this.widgetName, function(event) {\n\t\t\t\treturn that._mouseDown(event);\n\t\t\t})\n\t\t\t.bind(\"click.\" + this.widgetName, function(event) {\n\t\t\t\tif (true === $.data(event.target, that.widgetName + \".preventClickEvent\")) {\n\t\t\t\t\t$.removeData(event.target, that.widgetName + \".preventClickEvent\");\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.unbind(\".\" + this.widgetName);\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.unbind(\"mousemove.\" + this.widgetName, this._mouseMoveDelegate)\n\t\t\t\t.unbind(\"mouseup.\" + this.widgetName, this._mouseUpDelegate);\n\t\t}\n\t},\n\n\t_mouseDown: function(event) {\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// we may have missed mouseup (out of window)\n\t\t(this._mouseStarted && this._mouseUp(event));\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = (event.which === 1),\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = (typeof this.options.cancel === \"string\" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);\n\t\tif (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif (!this.mouseDelayMet) {\n\t\t\tthis._mouseDelayTimer = setTimeout(function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay);\n\t\t}\n\n\t\tif (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\n\t\t\tthis._mouseStarted = (this._mouseStart(event) !== false);\n\t\t\tif (!this._mouseStarted) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif (true === $.data(event.target, this.widgetName + \".preventClickEvent\")) {\n\t\t\t$.removeData(event.target, this.widgetName + \".preventClickEvent\");\n\t\t}\n\n\t\t// these delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function(event) {\n\t\t\treturn that._mouseMove(event);\n\t\t};\n\t\tthis._mouseUpDelegate = function(event) {\n\t\t\treturn that._mouseUp(event);\n\t\t};\n\n\t\tthis.document\n\t\t\t.bind( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.bind( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function(event) {\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {\n\t\t\t\treturn this._mouseUp(event);\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\t\t\t\treturn this._mouseUp( event );\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif (this._mouseStarted) {\n\t\t\tthis._mouseDrag(event);\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t(this._mouseStart(this._mouseDownEvent, event) !== false);\n\t\t\t(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function(event) {\n\t\tthis.document\n\t\t\t.unbind( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.unbind( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif (this._mouseStarted) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif (event.target === this._mouseDownEvent.target) {\n\t\t\t\t$.data(event.target, this.widgetName + \".preventClickEvent\", true);\n\t\t\t}\n\n\t\t\tthis._mouseStop(event);\n\t\t}\n\n\t\tmouseHandled = false;\n\t\treturn false;\n\t},\n\n\t_mouseDistanceMet: function(event) {\n\t\treturn (Math.max(\n\t\t\t\tMath.abs(this._mouseDownEvent.pageX - event.pageX),\n\t\t\t\tMath.abs(this._mouseDownEvent.pageY - event.pageY)\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function(/* event */) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function(/* event */) {},\n\t_mouseDrag: function(/* event */) {},\n\t_mouseStop: function(/* event */) {},\n\t_mouseCapture: function(/* event */) { return true; }\n});\n\n\n/*!\n * jQuery UI Position 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/position/\n */\n\n(function() {\n\n$.ui = $.ui || {};\n\nvar cachedScrollbarWidth, supportsOffsetFractions,\n\tmax = Math.max,\n\tabs = Math.abs,\n\tround = Math.round,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[0];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( $.isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>\" ),\n\t\t\tinnerDiv = div.children()[0];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[0].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn (cachedScrollbarWidth = w1 - w2);\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[0].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[0].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisWindow = $.isWindow( withinElement[0] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: withinElement.offset() || { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\n\t\t\t// support: jQuery 1.6.x\n\t\t\t// jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows\n\t\t\twidth: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(),\n\t\t\theight: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\t\ttarget = $( options.of ),\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[0].preventDefault ) {\n\t\t// force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\t// clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t});\n\n\t// normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each(function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) + scrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) + scrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\t// if the browser doesn't support fractions, then round for consistent results\n\t\tif ( !supportsOffsetFractions ) {\n\t\t\tposition.left = round( position.left );\n\t\t\tposition.top = round( position.top );\n\t\t}\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tif ( options.using ) {\n\t\t\t// adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t});\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\t\t\t\t// element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\t\t\t\t// element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t// element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t// too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\t\t\t// too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\t\t\t// adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\t\t\t\t// element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\t\t\t\t// element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t// element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t// too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\t\t\t// too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\t\t\t// adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n// fraction support test\n(function() {\n\tvar testElement, testElementParent, testElementStyle, offsetLeft, i,\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ],\n\t\tdiv = document.createElement( \"div\" );\n\n\t//Create a \"fake body\" for testing based on method used in jQuery.support\n\ttestElement = document.createElement( body ? \"div\" : \"body\" );\n\ttestElementStyle = {\n\t\tvisibility: \"hidden\",\n\t\twidth: 0,\n\t\theight: 0,\n\t\tborder: 0,\n\t\tmargin: 0,\n\t\tbackground: \"none\"\n\t};\n\tif ( body ) {\n\t\t$.extend( testElementStyle, {\n\t\t\tposition: \"absolute\",\n\t\t\tleft: \"-1000px\",\n\t\t\ttop: \"-1000px\"\n\t\t});\n\t}\n\tfor ( i in testElementStyle ) {\n\t\ttestElement.style[ i ] = testElementStyle[ i ];\n\t}\n\ttestElement.appendChild( div );\n\ttestElementParent = body || document.documentElement;\n\ttestElementParent.insertBefore( testElement, testElementParent.firstChild );\n\n\tdiv.style.cssText = \"position: absolute; left: 10.7432222px;\";\n\n\toffsetLeft = $( div ).offset().left;\n\tsupportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11;\n\n\ttestElement.innerHTML = \"\";\n\ttestElementParent.removeChild( testElement );\n})();\n\n})();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI Accordion 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/accordion/\n */\n\n\nvar accordion = $.widget( \"ui.accordion\", {\n\tversion: \"1.11.4\",\n\toptions: {\n\t\tactive: 0,\n\t\tanimate: {},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theader: \"> li > :first-child,> :not(li):even\",\n\t\theightStyle: \"auto\",\n\t\ticons: {\n\t\t\tactiveHeader: \"ui-icon-triangle-1-s\",\n\t\t\theader: \"ui-icon-triangle-1-e\"\n\t\t},\n\n\t\t// callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null\n\t},\n\n\thideProps: {\n\t\tborderTopWidth: \"hide\",\n\t\tborderBottomWidth: \"hide\",\n\t\tpaddingTop: \"hide\",\n\t\tpaddingBottom: \"hide\",\n\t\theight: \"hide\"\n\t},\n\n\tshowProps: {\n\t\tborderTopWidth: \"show\",\n\t\tborderBottomWidth: \"show\",\n\t\tpaddingTop: \"show\",\n\t\tpaddingBottom: \"show\",\n\t\theight: \"show\"\n\t},\n\n\t_create: function() {\n\t\tvar options = this.options;\n\t\tthis.prevShow = this.prevHide = $();\n\t\tthis.element.addClass( \"ui-accordion ui-widget ui-helper-reset\" )\n\t\t\t// ARIA\n\t\t\t.attr( \"role\", \"tablist\" );\n\n\t\t// don't allow collapsible: false and active: false / null\n\t\tif ( !options.collapsible && (options.active === false || options.active == null) ) {\n\t\t\toptions.active = 0;\n\t\t}\n\n\t\tthis._processPanels();\n\t\t// handle negative values\n\t\tif ( options.active < 0 ) {\n\t\t\toptions.active += this.headers.length;\n\t\t}\n\t\tthis._refresh();\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\theader: this.active,\n\t\t\tpanel: !this.active.length ? $() : this.active.next()\n\t\t};\n\t},\n\n\t_createIcons: function() {\n\t\tvar icons = this.options.icons;\n\t\tif ( icons ) {\n\t\t\t$( \"<span>\" )\n\t\t\t\t.addClass( \"ui-accordion-header-icon ui-icon \" + icons.header )\n\t\t\t\t.prependTo( this.headers );\n\t\t\tthis.active.children( \".ui-accordion-header-icon\" )\n\t\t\t\t.removeClass( icons.header )\n\t\t\t\t.addClass( icons.activeHeader );\n\t\t\tthis.headers.addClass( \"ui-accordion-icons\" );\n\t\t}\n\t},\n\n\t_destroyIcons: function() {\n\t\tthis.headers\n\t\t\t.removeClass( \"ui-accordion-icons\" )\n\t\t\t.children( \".ui-accordion-header-icon\" )\n\t\t\t\t.remove();\n\t},\n\n\t_destroy: function() {\n\t\tvar contents;\n\n\t\t// clean up main element\n\t\tthis.element\n\t\t\t.removeClass( \"ui-accordion ui-widget ui-helper-reset\" )\n\t\t\t.removeAttr( \"role\" );\n\n\t\t// clean up headers\n\t\tthis.headers\n\t\t\t.removeClass( \"ui-accordion-header ui-accordion-header-active ui-state-default \" +\n\t\t\t\t\"ui-corner-all ui-state-active ui-state-disabled ui-corner-top\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-expanded\" )\n\t\t\t.removeAttr( \"aria-selected\" )\n\t\t\t.removeAttr( \"aria-controls\" )\n\t\t\t.removeAttr( \"tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis._destroyIcons();\n\n\t\t// clean up content panels\n\t\tcontents = this.headers.next()\n\t\t\t.removeClass( \"ui-helper-reset ui-widget-content ui-corner-bottom \" +\n\t\t\t\t\"ui-accordion-content ui-accordion-content-active ui-state-disabled\" )\n\t\t\t.css( \"display\", \"\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t.removeAttr( \"aria-labelledby\" )\n\t\t\t.removeUniqueId();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tcontents.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tif ( this.options.event ) {\n\t\t\t\tthis._off( this.headers, this.options.event );\n\t\t\t}\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\t// setting collapsible: false while collapsed; open first panel\n\t\tif ( key === \"collapsible\" && !value && this.options.active === false ) {\n\t\t\tthis._activate( 0 );\n\t\t}\n\n\t\tif ( key === \"icons\" ) {\n\t\t\tthis._destroyIcons();\n\t\t\tif ( value ) {\n\t\t\t\tthis._createIcons();\n\t\t\t}\n\t\t}\n\n\t\t// #5332 - opacity doesn't cascade to positioned elements in IE\n\t\t// so we need to add the disabled class to the headers and panels\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.element\n\t\t\t\t.toggleClass( \"ui-state-disabled\", !!value )\n\t\t\t\t.attr( \"aria-disabled\", value );\n\t\t\tthis.headers.add( this.headers.next() )\n\t\t\t\t.toggleClass( \"ui-state-disabled\", !!value );\n\t\t}\n\t},\n\n\t_keydown: function( event ) {\n\t\tif ( event.altKey || event.ctrlKey ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar keyCode = $.ui.keyCode,\n\t\t\tlength = this.headers.length,\n\t\t\tcurrentIndex = this.headers.index( event.target ),\n\t\t\ttoFocus = false;\n\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase keyCode.RIGHT:\n\t\t\tcase keyCode.DOWN:\n\t\t\t\ttoFocus = this.headers[ ( currentIndex + 1 ) % length ];\n\t\t\t\tbreak;\n\t\t\tcase keyCode.LEFT:\n\t\t\tcase keyCode.UP:\n\t\t\t\ttoFocus = this.headers[ ( currentIndex - 1 + length ) % length ];\n\t\t\t\tbreak;\n\t\t\tcase keyCode.SPACE:\n\t\t\tcase keyCode.ENTER:\n\t\t\t\tthis._eventHandler( event );\n\t\t\t\tbreak;\n\t\t\tcase keyCode.HOME:\n\t\t\t\ttoFocus = this.headers[ 0 ];\n\t\t\t\tbreak;\n\t\t\tcase keyCode.END:\n\t\t\t\ttoFocus = this.headers[ length - 1 ];\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif ( toFocus ) {\n\t\t\t$( event.target ).attr( \"tabIndex\", -1 );\n\t\t\t$( toFocus ).attr( \"tabIndex\", 0 );\n\t\t\ttoFocus.focus();\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_panelKeyDown: function( event ) {\n\t\tif ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {\n\t\t\t$( event.currentTarget ).prev().focus();\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options;\n\t\tthis._processPanels();\n\n\t\t// was collapsed or no panel\n\t\tif ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\t\t// active false only when collapsible is true\n\t\t} else if ( options.active === false ) {\n\t\t\tthis._activate( 0 );\n\t\t// was active, but active panel is gone\n\t\t} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\t\t\t// all remaining panel are disabled\n\t\t\tif ( this.headers.length === this.headers.find(\".ui-state-disabled\").length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\t\t\t// activate previous panel\n\t\t\t} else {\n\t\t\t\tthis._activate( Math.max( 0, options.active - 1 ) );\n\t\t\t}\n\t\t// was active, active panel still exists\n\t\t} else {\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.headers.index( this.active );\n\t\t}\n\n\t\tthis._destroyIcons();\n\n\t\tthis._refresh();\n\t},\n\n\t_processPanels: function() {\n\t\tvar prevHeaders = this.headers,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.headers = this.element.find( this.options.header )\n\t\t\t.addClass( \"ui-accordion-header ui-state-default ui-corner-all\" );\n\n\t\tthis.panels = this.headers.next()\n\t\t\t.addClass( \"ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom\" )\n\t\t\t.filter( \":not(.ui-accordion-content-active)\" )\n\t\t\t.hide();\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevPanels ) {\n\t\t\tthis._off( prevHeaders.not( this.headers ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t_refresh: function() {\n\t\tvar maxHeight,\n\t\t\toptions = this.options,\n\t\t\theightStyle = options.heightStyle,\n\t\t\tparent = this.element.parent();\n\n\t\tthis.active = this._findActive( options.active )\n\t\t\t.addClass( \"ui-accordion-header-active ui-state-active ui-corner-top\" )\n\t\t\t.removeClass( \"ui-corner-all\" );\n\t\tthis.active.next()\n\t\t\t.addClass( \"ui-accordion-content-active\" )\n\t\t\t.show();\n\n\t\tthis.headers\n\t\t\t.attr( \"role\", \"tab\" )\n\t\t\t.each(function() {\n\t\t\t\tvar header = $( this ),\n\t\t\t\t\theaderId = header.uniqueId().attr( \"id\" ),\n\t\t\t\t\tpanel = header.next(),\n\t\t\t\t\tpanelId = panel.uniqueId().attr( \"id\" );\n\t\t\t\theader.attr( \"aria-controls\", panelId );\n\t\t\t\tpanel.attr( \"aria-labelledby\", headerId );\n\t\t\t})\n\t\t\t.next()\n\t\t\t\t.attr( \"role\", \"tabpanel\" );\n\n\t\tthis.headers\n\t\t\t.not( this.active )\n\t\t\t.attr({\n\t\t\t\t\"aria-selected\": \"false\",\n\t\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\ttabIndex: -1\n\t\t\t})\n\t\t\t.next()\n\t\t\t\t.attr({\n\t\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t\t})\n\t\t\t\t.hide();\n\n\t\t// make sure at least one header is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.headers.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active.attr({\n\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\ttabIndex: 0\n\t\t\t})\n\t\t\t.next()\n\t\t\t\t.attr({\n\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t});\n\t\t}\n\n\t\tthis._createIcons();\n\n\t\tthis._setupEvents( options.event );\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tthis.element.siblings( \":visible\" ).each(function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t});\n\n\t\t\tthis.headers.each(function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t});\n\n\t\t\tthis.headers.next()\n\t\t\t\t.each(function() {\n\t\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t\t})\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.headers.next()\n\t\t\t\t.each(function() {\n\t\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).css( \"height\", \"\" ).height() );\n\t\t\t\t})\n\t\t\t\t.height( maxHeight );\n\t\t}\n\t},\n\n\t_activate: function( index ) {\n\t\tvar active = this._findActive( index )[ 0 ];\n\n\t\t// trying to activate the already active panel\n\t\tif ( active === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// trying to collapse, simulate a click on the currently active header\n\t\tactive = active || this.active[ 0 ];\n\n\t\tthis._eventHandler({\n\t\t\ttarget: active,\n\t\t\tcurrentTarget: active,\n\t\t\tpreventDefault: $.noop\n\t\t});\n\t},\n\n\t_findActive: function( selector ) {\n\t\treturn typeof selector === \"number\" ? this.headers.eq( selector ) : $();\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {\n\t\t\tkeydown: \"_keydown\"\n\t\t};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t});\n\t\t}\n\n\t\tthis._off( this.headers.add( this.headers.next() ) );\n\t\tthis._on( this.headers, events );\n\t\tthis._on( this.headers.next(), { keydown: \"_panelKeyDown\" });\n\t\tthis._hoverable( this.headers );\n\t\tthis._focusable( this.headers );\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar options = this.options,\n\t\t\tactive = this.active,\n\t\t\tclicked = $( event.currentTarget ),\n\t\t\tclickedIsActive = clicked[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : clicked.next(),\n\t\t\ttoHide = active.next(),\n\t\t\teventData = {\n\t\t\t\toldHeader: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewHeader: collapsing ? $() : clicked,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif (\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.headers.index( clicked );\n\n\t\t// when the call to ._toggle() comes after the class changes\n\t\t// it causes a very odd bug in IE 8 (see #6720)\n\t\tthis.active = clickedIsActive ? $() : clicked;\n\t\tthis._toggle( eventData );\n\n\t\t// switch classes\n\t\t// corner classes on the previously active header stay after the animation\n\t\tactive.removeClass( \"ui-accordion-header-active ui-state-active\" );\n\t\tif ( options.icons ) {\n\t\t\tactive.children( \".ui-accordion-header-icon\" )\n\t\t\t\t.removeClass( options.icons.activeHeader )\n\t\t\t\t.addClass( options.icons.header );\n\t\t}\n\n\t\tif ( !clickedIsActive ) {\n\t\t\tclicked\n\t\t\t\t.removeClass( \"ui-corner-all\" )\n\t\t\t\t.addClass( \"ui-accordion-header-active ui-state-active ui-corner-top\" );\n\t\t\tif ( options.icons ) {\n\t\t\t\tclicked.children( \".ui-accordion-header-icon\" )\n\t\t\t\t\t.removeClass( options.icons.header )\n\t\t\t\t\t.addClass( options.icons.activeHeader );\n\t\t\t}\n\n\t\t\tclicked\n\t\t\t\t.next()\n\t\t\t\t.addClass( \"ui-accordion-content-active\" );\n\t\t}\n\t},\n\n\t_toggle: function( data ) {\n\t\tvar toShow = data.newPanel,\n\t\t\ttoHide = this.prevShow.length ? this.prevShow : data.oldPanel;\n\n\t\t// handle activating a panel during the animation for another activation\n\t\tthis.prevShow.add( this.prevHide ).stop( true, true );\n\t\tthis.prevShow = toShow;\n\t\tthis.prevHide = toHide;\n\n\t\tif ( this.options.animate ) {\n\t\t\tthis._animate( toShow, toHide, data );\n\t\t} else {\n\t\t\ttoHide.hide();\n\t\t\ttoShow.show();\n\t\t\tthis._toggleComplete( data );\n\t\t}\n\n\t\ttoHide.attr({\n\t\t\t\"aria-hidden\": \"true\"\n\t\t});\n\t\ttoHide.prev().attr({\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t});\n\t\t// if we're switching panels, remove the old header from the tab order\n\t\t// if we're opening from collapsed state, remove the previous header from the tab order\n\t\t// if we're collapsing, then keep the collapsing header in the tab order\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\ttoHide.prev().attr({\n\t\t\t\t\"tabIndex\": -1,\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t});\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.headers.filter(function() {\n\t\t\t\treturn parseInt( $( this ).attr( \"tabIndex\" ), 10 ) === 0;\n\t\t\t})\n\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow\n\t\t\t.attr( \"aria-hidden\", \"false\" )\n\t\t\t.prev()\n\t\t\t\t.attr({\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t});\n\t},\n\n\t_animate: function( toShow, toHide, data ) {\n\t\tvar total, easing, duration,\n\t\t\tthat = this,\n\t\t\tadjust = 0,\n\t\t\tboxSizing = toShow.css( \"box-sizing\" ),\n\t\t\tdown = toShow.length &&\n\t\t\t\t( !toHide.length || ( toShow.index() < toHide.index() ) ),\n\t\t\tanimate = this.options.animate || {},\n\t\t\toptions = down && animate.down || animate,\n\t\t\tcomplete = function() {\n\t\t\t\tthat._toggleComplete( data );\n\t\t\t};\n\n\t\tif ( typeof options === \"number\" ) {\n\t\t\tduration = options;\n\t\t}\n\t\tif ( typeof options === \"string\" ) {\n\t\t\teasing = options;\n\t\t}\n\t\t// fall back from options to animation in case of partial down settings\n\t\teasing = easing || options.easing || animate.easing;\n\t\tduration = duration || options.duration || animate.duration;\n\n\t\tif ( !toHide.length ) {\n\t\t\treturn toShow.animate( this.showProps, duration, easing, complete );\n\t\t}\n\t\tif ( !toShow.length ) {\n\t\t\treturn toHide.animate( this.hideProps, duration, easing, complete );\n\t\t}\n\n\t\ttotal = toShow.show().outerHeight();\n\t\ttoHide.animate( this.hideProps, {\n\t\t\tduration: duration,\n\t\t\teasing: easing,\n\t\t\tstep: function( now, fx ) {\n\t\t\t\tfx.now = Math.round( now );\n\t\t\t}\n\t\t});\n\t\ttoShow\n\t\t\t.hide()\n\t\t\t.animate( this.showProps, {\n\t\t\t\tduration: duration,\n\t\t\t\teasing: easing,\n\t\t\t\tcomplete: complete,\n\t\t\t\tstep: function( now, fx ) {\n\t\t\t\t\tfx.now = Math.round( now );\n\t\t\t\t\tif ( fx.prop !== \"height\" ) {\n\t\t\t\t\t\tif ( boxSizing === \"content-box\" ) {\n\t\t\t\t\t\t\tadjust += fx.now;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( that.options.heightStyle !== \"content\" ) {\n\t\t\t\t\t\tfx.now = Math.round( total - toHide.outerHeight() - adjust );\n\t\t\t\t\t\tadjust = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t},\n\n\t_toggleComplete: function( data ) {\n\t\tvar toHide = data.oldPanel;\n\n\t\ttoHide\n\t\t\t.removeClass( \"ui-accordion-content-active\" )\n\t\t\t.prev()\n\t\t\t\t.removeClass( \"ui-corner-top\" )\n\t\t\t\t.addClass( \"ui-corner-all\" );\n\n\t\t// Work around for rendering bug in IE (#5421)\n\t\tif ( toHide.length ) {\n\t\t\ttoHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;\n\t\t}\n\t\tthis._trigger( \"activate\", null, data );\n\t}\n});\n\n\n/*!\n * jQuery UI Menu 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/menu/\n */\n\n\nvar menu = $.widget( \"ui.menu\", {\n\tversion: \"1.11.4\",\n\tdefaultElement: \"<ul>\",\n\tdelay: 300,\n\toptions: {\n\t\ticons: {\n\t\t\tsubmenu: \"ui-icon-carat-1-e\"\n\t\t},\n\t\titems: \"> *\",\n\t\tmenus: \"ul\",\n\t\tposition: {\n\t\t\tmy: \"left-1 top\",\n\t\t\tat: \"right top\"\n\t\t},\n\t\trole: \"menu\",\n\n\t\t// callbacks\n\t\tblur: null,\n\t\tfocus: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tthis.activeMenu = this.element;\n\n\t\t// Flag used to prevent firing of the click handler\n\t\t// as the event bubbles up through nested menus\n\t\tthis.mouseHandled = false;\n\t\tthis.element\n\t\t\t.uniqueId()\n\t\t\t.addClass( \"ui-menu ui-widget ui-widget-content\" )\n\t\t\t.toggleClass( \"ui-menu-icons\", !!this.element.find( \".ui-icon\" ).length )\n\t\t\t.attr({\n\t\t\t\trole: this.options.role,\n\t\t\t\ttabIndex: 0\n\t\t\t});\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis.element\n\t\t\t\t.addClass( \"ui-state-disabled\" )\n\t\t\t\t.attr( \"aria-disabled\", \"true\" );\n\t\t}\n\n\t\tthis._on({\n\t\t\t// Prevent focus from sticking to links inside menu after clicking\n\t\t\t// them (focus should always stay on UL during navigation).\n\t\t\t\"mousedown .ui-menu-item\": function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t},\n\t\t\t\"click .ui-menu-item\": function( event ) {\n\t\t\t\tvar target = $( event.target );\n\t\t\t\tif ( !this.mouseHandled && target.not( \".ui-state-disabled\" ).length ) {\n\t\t\t\t\tthis.select( event );\n\n\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\n\t\t\t\t\tif ( !event.isPropagationStopped() ) {\n\t\t\t\t\t\tthis.mouseHandled = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Open submenu on click\n\t\t\t\t\tif ( target.has( \".ui-menu\" ).length ) {\n\t\t\t\t\t\tthis.expand( event );\n\t\t\t\t\t} else if ( !this.element.is( \":focus\" ) && $( this.document[ 0 ].activeElement ).closest( \".ui-menu\" ).length ) {\n\n\t\t\t\t\t\t// Redirect focus to the menu\n\t\t\t\t\t\tthis.element.trigger( \"focus\", [ true ] );\n\n\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\n\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\n\t\t\t\t\t\tif ( this.active && this.active.parents( \".ui-menu\" ).length === 1 ) {\n\t\t\t\t\t\t\tclearTimeout( this.timer );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"mouseenter .ui-menu-item\": function( event ) {\n\t\t\t\t// Ignore mouse events while typeahead is active, see #10458.\n\t\t\t\t// Prevents focusing the wrong item when typeahead causes a scroll while the mouse\n\t\t\t\t// is over an item in the menu\n\t\t\t\tif ( this.previousFilter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar target = $( event.currentTarget );\n\t\t\t\t// Remove ui-state-active class from siblings of the newly focused menu item\n\t\t\t\t// to avoid a jump caused by adjacent elements both having a class with a border\n\t\t\t\ttarget.siblings( \".ui-state-active\" ).removeClass( \"ui-state-active\" );\n\t\t\t\tthis.focus( event, target );\n\t\t\t},\n\t\t\tmouseleave: \"collapseAll\",\n\t\t\t\"mouseleave .ui-menu\": \"collapseAll\",\n\t\t\tfocus: function( event, keepActiveItem ) {\n\t\t\t\t// If there's already an active item, keep it active\n\t\t\t\t// If not, activate the first item\n\t\t\t\tvar item = this.active || this.element.find( this.options.items ).eq( 0 );\n\n\t\t\t\tif ( !keepActiveItem ) {\n\t\t\t\t\tthis.focus( event, item );\n\t\t\t\t}\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tthis._delay(function() {\n\t\t\t\t\tif ( !$.contains( this.element[0], this.document[0].activeElement ) ) {\n\t\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tkeydown: \"_keydown\"\n\t\t});\n\n\t\tthis.refresh();\n\n\t\t// Clicks outside of a menu collapse any open menus\n\t\tthis._on( this.document, {\n\t\t\tclick: function( event ) {\n\t\t\t\tif ( this._closeOnDocumentClick( event ) ) {\n\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t}\n\n\t\t\t\t// Reset the mouseHandled flag\n\t\t\t\tthis.mouseHandled = false;\n\t\t\t}\n\t\t});\n\t},\n\n\t_destroy: function() {\n\t\t// Destroy (sub)menus\n\t\tthis.element\n\t\t\t.removeAttr( \"aria-activedescendant\" )\n\t\t\t.find( \".ui-menu\" ).addBack()\n\t\t\t\t.removeClass( \"ui-menu ui-widget ui-widget-content ui-menu-icons ui-front\" )\n\t\t\t\t.removeAttr( \"role\" )\n\t\t\t\t.removeAttr( \"tabIndex\" )\n\t\t\t\t.removeAttr( \"aria-labelledby\" )\n\t\t\t\t.removeAttr( \"aria-expanded\" )\n\t\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t\t.removeAttr( \"aria-disabled\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.show();\n\n\t\t// Destroy menu items\n\t\tthis.element.find( \".ui-menu-item\" )\n\t\t\t.removeClass( \"ui-menu-item\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-disabled\" )\n\t\t\t.removeUniqueId()\n\t\t\t.removeClass( \"ui-state-hover\" )\n\t\t\t.removeAttr( \"tabIndex\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-haspopup\" )\n\t\t\t.children().each( function() {\n\t\t\t\tvar elem = $( this );\n\t\t\t\tif ( elem.data( \"ui-menu-submenu-carat\" ) ) {\n\t\t\t\t\telem.remove();\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Destroy menu dividers\n\t\tthis.element.find( \".ui-menu-divider\" ).removeClass( \"ui-menu-divider ui-widget-content\" );\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar match, prev, character, skip,\n\t\t\tpreventDefault = true;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\tthis.previousPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\tthis.nextPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tthis._move( \"first\", \"first\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tthis._move( \"last\", \"last\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\t\tthis.previous( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tthis.next( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.RIGHT:\n\t\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\t\tthis.expand( event );\n\t\t\t}\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ENTER:\n\t\tcase $.ui.keyCode.SPACE:\n\t\t\tthis._activate( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tpreventDefault = false;\n\t\t\tprev = this.previousFilter || \"\";\n\t\t\tcharacter = String.fromCharCode( event.keyCode );\n\t\t\tskip = false;\n\n\t\t\tclearTimeout( this.filterTimer );\n\n\t\t\tif ( character === prev ) {\n\t\t\t\tskip = true;\n\t\t\t} else {\n\t\t\t\tcharacter = prev + character;\n\t\t\t}\n\n\t\t\tmatch = this._filterMenuItems( character );\n\t\t\tmatch = skip && match.index( this.active.next() ) !== -1 ?\n\t\t\t\tthis.active.nextAll( \".ui-menu-item\" ) :\n\t\t\t\tmatch;\n\n\t\t\t// If no matches on the current filter, reset to the last character pressed\n\t\t\t// to move down the menu to the first item that starts with that character\n\t\t\tif ( !match.length ) {\n\t\t\t\tcharacter = String.fromCharCode( event.keyCode );\n\t\t\t\tmatch = this._filterMenuItems( character );\n\t\t\t}\n\n\t\t\tif ( match.length ) {\n\t\t\t\tthis.focus( event, match );\n\t\t\t\tthis.previousFilter = character;\n\t\t\t\tthis.filterTimer = this._delay(function() {\n\t\t\t\t\tdelete this.previousFilter;\n\t\t\t\t}, 1000 );\n\t\t\t} else {\n\t\t\t\tdelete this.previousFilter;\n\t\t\t}\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_activate: function( event ) {\n\t\tif ( !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\tif ( this.active.is( \"[aria-haspopup='true']\" ) ) {\n\t\t\t\tthis.expand( event );\n\t\t\t} else {\n\t\t\t\tthis.select( event );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar menus, items,\n\t\t\tthat = this,\n\t\t\ticon = this.options.icons.submenu,\n\t\t\tsubmenus = this.element.find( this.options.menus );\n\n\t\tthis.element.toggleClass( \"ui-menu-icons\", !!this.element.find( \".ui-icon\" ).length );\n\n\t\t// Initialize nested menus\n\t\tsubmenus.filter( \":not(.ui-menu)\" )\n\t\t\t.addClass( \"ui-menu ui-widget ui-widget-content ui-front\" )\n\t\t\t.hide()\n\t\t\t.attr({\n\t\t\t\trole: this.options.role,\n\t\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t})\n\t\t\t.each(function() {\n\t\t\t\tvar menu = $( this ),\n\t\t\t\t\titem = menu.parent(),\n\t\t\t\t\tsubmenuCarat = $( \"<span>\" )\n\t\t\t\t\t\t.addClass( \"ui-menu-icon ui-icon \" + icon )\n\t\t\t\t\t\t.data( \"ui-menu-submenu-carat\", true );\n\n\t\t\t\titem\n\t\t\t\t\t.attr( \"aria-haspopup\", \"true\" )\n\t\t\t\t\t.prepend( submenuCarat );\n\t\t\t\tmenu.attr( \"aria-labelledby\", item.attr( \"id\" ) );\n\t\t\t});\n\n\t\tmenus = submenus.add( this.element );\n\t\titems = menus.find( this.options.items );\n\n\t\t// Initialize menu-items containing spaces and/or dashes only as dividers\n\t\titems.not( \".ui-menu-item\" ).each(function() {\n\t\t\tvar item = $( this );\n\t\t\tif ( that._isDivider( item ) ) {\n\t\t\t\titem.addClass( \"ui-widget-content ui-menu-divider\" );\n\t\t\t}\n\t\t});\n\n\t\t// Don't refresh list items that are already adapted\n\t\titems.not( \".ui-menu-item, .ui-menu-divider\" )\n\t\t\t.addClass( \"ui-menu-item\" )\n\t\t\t.uniqueId()\n\t\t\t.attr({\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: this._itemRole()\n\t\t\t});\n\n\t\t// Add aria-disabled attribute to any disabled menu item\n\t\titems.filter( \".ui-state-disabled\" ).attr( \"aria-disabled\", \"true\" );\n\n\t\t// If the active item has been removed, blur the menu\n\t\tif ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\t\t\tthis.blur();\n\t\t}\n\t},\n\n\t_itemRole: function() {\n\t\treturn {\n\t\t\tmenu: \"menuitem\",\n\t\t\tlistbox: \"option\"\n\t\t}[ this.options.role ];\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tthis.element.find( \".ui-menu-icon\" )\n\t\t\t\t.removeClass( this.options.icons.submenu )\n\t\t\t\t.addClass( value.submenu );\n\t\t}\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.element\n\t\t\t\t.toggleClass( \"ui-state-disabled\", !!value )\n\t\t\t\t.attr( \"aria-disabled\", value );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\tfocus: function( event, item ) {\n\t\tvar nested, focused;\n\t\tthis.blur( event, event && event.type === \"focus\" );\n\n\t\tthis._scrollIntoView( item );\n\n\t\tthis.active = item.first();\n\t\tfocused = this.active.addClass( \"ui-state-focus\" ).removeClass( \"ui-state-active\" );\n\t\t// Only update aria-activedescendant if there's a role\n\t\t// otherwise we assume focus is managed elsewhere\n\t\tif ( this.options.role ) {\n\t\t\tthis.element.attr( \"aria-activedescendant\", focused.attr( \"id\" ) );\n\t\t}\n\n\t\t// Highlight active parent menu item, if any\n\t\tthis.active\n\t\t\t.parent()\n\t\t\t.closest( \".ui-menu-item\" )\n\t\t\t.addClass( \"ui-state-active\" );\n\n\t\tif ( event && event.type === \"keydown\" ) {\n\t\t\tthis._close();\n\t\t} else {\n\t\t\tthis.timer = this._delay(function() {\n\t\t\t\tthis._close();\n\t\t\t}, this.delay );\n\t\t}\n\n\t\tnested = item.children( \".ui-menu\" );\n\t\tif ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {\n\t\t\tthis._startOpening(nested);\n\t\t}\n\t\tthis.activeMenu = item.parent();\n\n\t\tthis._trigger( \"focus\", event, { item: item } );\n\t},\n\n\t_scrollIntoView: function( item ) {\n\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\n\t\tif ( this._hasScroll() ) {\n\t\t\tborderTop = parseFloat( $.css( this.activeMenu[0], \"borderTopWidth\" ) ) || 0;\n\t\t\tpaddingTop = parseFloat( $.css( this.activeMenu[0], \"paddingTop\" ) ) || 0;\n\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\n\t\t\tscroll = this.activeMenu.scrollTop();\n\t\t\telementHeight = this.activeMenu.height();\n\t\t\titemHeight = item.outerHeight();\n\n\t\t\tif ( offset < 0 ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset );\n\t\t\t} else if ( offset + itemHeight > elementHeight ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );\n\t\t\t}\n\t\t}\n\t},\n\n\tblur: function( event, fromFocus ) {\n\t\tif ( !fromFocus ) {\n\t\t\tclearTimeout( this.timer );\n\t\t}\n\n\t\tif ( !this.active ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.active.removeClass( \"ui-state-focus\" );\n\t\tthis.active = null;\n\n\t\tthis._trigger( \"blur\", event, { item: this.active } );\n\t},\n\n\t_startOpening: function( submenu ) {\n\t\tclearTimeout( this.timer );\n\n\t\t// Don't open if already open fixes a Firefox bug that caused a .5 pixel\n\t\t// shift in the submenu position when mousing over the carat icon\n\t\tif ( submenu.attr( \"aria-hidden\" ) !== \"true\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.timer = this._delay(function() {\n\t\t\tthis._close();\n\t\t\tthis._open( submenu );\n\t\t}, this.delay );\n\t},\n\n\t_open: function( submenu ) {\n\t\tvar position = $.extend({\n\t\t\tof: this.active\n\t\t}, this.options.position );\n\n\t\tclearTimeout( this.timer );\n\t\tthis.element.find( \".ui-menu\" ).not( submenu.parents( \".ui-menu\" ) )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" );\n\n\t\tsubmenu\n\t\t\t.show()\n\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t.attr( \"aria-expanded\", \"true\" )\n\t\t\t.position( position );\n\t},\n\n\tcollapseAll: function( event, all ) {\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay(function() {\n\t\t\t// If we were passed an event, look for the submenu that contains the event\n\t\t\tvar currentMenu = all ? this.element :\n\t\t\t\t$( event && event.target ).closest( this.element.find( \".ui-menu\" ) );\n\n\t\t\t// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway\n\t\t\tif ( !currentMenu.length ) {\n\t\t\t\tcurrentMenu = this.element;\n\t\t\t}\n\n\t\t\tthis._close( currentMenu );\n\n\t\t\tthis.blur( event );\n\t\t\tthis.activeMenu = currentMenu;\n\t\t}, this.delay );\n\t},\n\n\t// With no arguments, closes the currently active menu - if nothing is active\n\t// it closes all menus.  If passed an argument, it will search for menus BELOW\n\t_close: function( startMenu ) {\n\t\tif ( !startMenu ) {\n\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\n\t\t}\n\n\t\tstartMenu\n\t\t\t.find( \".ui-menu\" )\n\t\t\t\t.hide()\n\t\t\t\t.attr( \"aria-hidden\", \"true\" )\n\t\t\t\t.attr( \"aria-expanded\", \"false\" )\n\t\t\t.end()\n\t\t\t.find( \".ui-state-active\" ).not( \".ui-state-focus\" )\n\t\t\t\t.removeClass( \"ui-state-active\" );\n\t},\n\n\t_closeOnDocumentClick: function( event ) {\n\t\treturn !$( event.target ).closest( \".ui-menu\" ).length;\n\t},\n\n\t_isDivider: function( item ) {\n\n\t\t// Match hyphen, em dash, en dash\n\t\treturn !/[^\\-\\u2014\\u2013\\s]/.test( item.text() );\n\t},\n\n\tcollapse: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active.parent().closest( \".ui-menu-item\", this.element );\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._close();\n\t\t\tthis.focus( event, newItem );\n\t\t}\n\t},\n\n\texpand: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active\n\t\t\t\t.children( \".ui-menu \" )\n\t\t\t\t.find( this.options.items )\n\t\t\t\t.first();\n\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._open( newItem.parent() );\n\n\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\n\t\t\tthis._delay(function() {\n\t\t\t\tthis.focus( event, newItem );\n\t\t\t});\n\t\t}\n\t},\n\n\tnext: function( event ) {\n\t\tthis._move( \"next\", \"first\", event );\n\t},\n\n\tprevious: function( event ) {\n\t\tthis._move( \"prev\", \"last\", event );\n\t},\n\n\tisFirstItem: function() {\n\t\treturn this.active && !this.active.prevAll( \".ui-menu-item\" ).length;\n\t},\n\n\tisLastItem: function() {\n\t\treturn this.active && !this.active.nextAll( \".ui-menu-item\" ).length;\n\t},\n\n\t_move: function( direction, filter, event ) {\n\t\tvar next;\n\t\tif ( this.active ) {\n\t\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.eq( -1 );\n\t\t\t} else {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction + \"All\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.eq( 0 );\n\t\t\t}\n\t\t}\n\t\tif ( !next || !next.length || !this.active ) {\n\t\t\tnext = this.activeMenu.find( this.options.items )[ filter ]();\n\t\t}\n\n\t\tthis.focus( event, next );\n\t},\n\n\tnextPage: function( event ) {\n\t\tvar item, base, height;\n\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isLastItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.height();\n\t\t\tthis.active.nextAll( \".ui-menu-item\" ).each(function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base - height < 0;\n\t\t\t});\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items )\n\t\t\t\t[ !this.active ? \"first\" : \"last\" ]() );\n\t\t}\n\t},\n\n\tpreviousPage: function( event ) {\n\t\tvar item, base, height;\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isFirstItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.height();\n\t\t\tthis.active.prevAll( \".ui-menu-item\" ).each(function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base + height > 0;\n\t\t\t});\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items ).first() );\n\t\t}\n\t},\n\n\t_hasScroll: function() {\n\t\treturn this.element.outerHeight() < this.element.prop( \"scrollHeight\" );\n\t},\n\n\tselect: function( event ) {\n\t\t// TODO: It should never be possible to not have an active item at this\n\t\t// point, but the tests don't trigger mouseenter before click.\n\t\tthis.active = this.active || $( event.target ).closest( \".ui-menu-item\" );\n\t\tvar ui = { item: this.active };\n\t\tif ( !this.active.has( \".ui-menu\" ).length ) {\n\t\t\tthis.collapseAll( event, true );\n\t\t}\n\t\tthis._trigger( \"select\", event, ui );\n\t},\n\n\t_filterMenuItems: function(character) {\n\t\tvar escapedCharacter = character.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" ),\n\t\t\tregex = new RegExp( \"^\" + escapedCharacter, \"i\" );\n\n\t\treturn this.activeMenu\n\t\t\t.find( this.options.items )\n\n\t\t\t// Only match on items, not dividers or other content (#10571)\n\t\t\t.filter( \".ui-menu-item\" )\n\t\t\t.filter(function() {\n\t\t\t\treturn regex.test( $.trim( $( this ).text() ) );\n\t\t\t});\n\t}\n});\n\n\n/*!\n * jQuery UI Autocomplete 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/autocomplete/\n */\n\n\n$.widget( \"ui.autocomplete\", {\n\tversion: \"1.11.4\",\n\tdefaultElement: \"<input>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tautoFocus: false,\n\t\tdelay: 300,\n\t\tminLength: 1,\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\tsource: null,\n\n\t\t// callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresponse: null,\n\t\tsearch: null,\n\t\tselect: null\n\t},\n\n\trequestIndex: 0,\n\tpending: 0,\n\n\t_create: function() {\n\t\t// Some browsers only repeat keydown events, not keypress events,\n\t\t// so we use the suppressKeyPress flag to determine if we've already\n\t\t// handled the keydown event. #7269\n\t\t// Unfortunately the code for & in keypress is the same as the up arrow,\n\t\t// so we use the suppressKeyPressRepeat flag to avoid handling keypress\n\t\t// events when we know the keydown event was used to modify the\n\t\t// search term. #7799\n\t\tvar suppressKeyPress, suppressKeyPressRepeat, suppressInput,\n\t\t\tnodeName = this.element[ 0 ].nodeName.toLowerCase(),\n\t\t\tisTextarea = nodeName === \"textarea\",\n\t\t\tisInput = nodeName === \"input\";\n\n\t\tthis.isMultiLine =\n\t\t\t// Textareas are always multi-line\n\t\t\tisTextarea ? true :\n\t\t\t// Inputs are always single-line, even if inside a contentEditable element\n\t\t\t// IE also treats inputs as contentEditable\n\t\t\tisInput ? false :\n\t\t\t// All other element types are determined by whether or not they're contentEditable\n\t\t\tthis.element.prop( \"isContentEditable\" );\n\n\t\tthis.valueMethod = this.element[ isTextarea || isInput ? \"val\" : \"text\" ];\n\t\tthis.isNewMenu = true;\n\n\t\tthis.element\n\t\t\t.addClass( \"ui-autocomplete-input\" )\n\t\t\t.attr( \"autocomplete\", \"off\" );\n\n\t\tthis._on( this.element, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.element.prop( \"readOnly\" ) ) {\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tsuppressInput = true;\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsuppressKeyPress = false;\n\t\t\t\tsuppressInput = false;\n\t\t\t\tsuppressKeyPressRepeat = false;\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ENTER:\n\t\t\t\t\t// when menu is open and has focus\n\t\t\t\t\tif ( this.menu.active ) {\n\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\n\t\t\t\t\t\t// which causes forms to submit\n\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.TAB:\n\t\t\t\t\tif ( this.menu.active ) {\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ESCAPE:\n\t\t\t\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\t\t\t\tthis._value( this.term );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.close( event );\n\t\t\t\t\t\t// Different browsers have different default behavior for escape\n\t\t\t\t\t\t// Single press can mean undo or clear\n\t\t\t\t\t\t// Double press in IE means clear the whole form\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t\t// search timeout should be triggered before the input value is changed\n\t\t\t\t\tthis._searchTimeout( event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tkeypress: function( event ) {\n\t\t\t\tif ( suppressKeyPress ) {\n\t\t\t\t\tsuppressKeyPress = false;\n\t\t\t\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( suppressKeyPressRepeat ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// replicate some key handlers to allow them to repeat in Firefox and Opera\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tinput: function( event ) {\n\t\t\t\tif ( suppressInput ) {\n\t\t\t\t\tsuppressInput = false;\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._searchTimeout( event );\n\t\t\t},\n\t\t\tfocus: function() {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.previous = this._value();\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tif ( this.cancelBlur ) {\n\t\t\t\t\tdelete this.cancelBlur;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearTimeout( this.searching );\n\t\t\t\tthis.close( event );\n\t\t\t\tthis._change( event );\n\t\t\t}\n\t\t});\n\n\t\tthis._initSource();\n\t\tthis.menu = $( \"<ul>\" )\n\t\t\t.addClass( \"ui-autocomplete ui-front\" )\n\t\t\t.appendTo( this._appendTo() )\n\t\t\t.menu({\n\t\t\t\t// disable ARIA support, the live region takes care of that\n\t\t\t\trole: null\n\t\t\t})\n\t\t\t.hide()\n\t\t\t.menu( \"instance\" );\n\n\t\tthis._on( this.menu.element, {\n\t\t\tmousedown: function( event ) {\n\t\t\t\t// prevent moving focus out of the text field\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t\tthis.cancelBlur = true;\n\t\t\t\tthis._delay(function() {\n\t\t\t\t\tdelete this.cancelBlur;\n\t\t\t\t});\n\n\t\t\t\t// clicking on the scrollbar causes focus to shift to the body\n\t\t\t\t// but we can't detect a mouseup or a click immediately afterward\n\t\t\t\t// so we have to track the next mousedown and close the menu if\n\t\t\t\t// the user clicks somewhere outside of the autocomplete\n\t\t\t\tvar menuElement = this.menu.element[ 0 ];\n\t\t\t\tif ( !$( event.target ).closest( \".ui-menu-item\" ).length ) {\n\t\t\t\t\tthis._delay(function() {\n\t\t\t\t\t\tvar that = this;\n\t\t\t\t\t\tthis.document.one( \"mousedown\", function( event ) {\n\t\t\t\t\t\t\tif ( event.target !== that.element[ 0 ] &&\n\t\t\t\t\t\t\t\t\tevent.target !== menuElement &&\n\t\t\t\t\t\t\t\t\t!$.contains( menuElement, event.target ) ) {\n\t\t\t\t\t\t\t\tthat.close();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tmenufocus: function( event, ui ) {\n\t\t\t\tvar label, item;\n\t\t\t\t// support: Firefox\n\t\t\t\t// Prevent accidental activation of menu items in Firefox (#7024 #9118)\n\t\t\t\tif ( this.isNewMenu ) {\n\t\t\t\t\tthis.isNewMenu = false;\n\t\t\t\t\tif ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis.menu.blur();\n\n\t\t\t\t\t\tthis.document.one( \"mousemove\", function() {\n\t\t\t\t\t\t\t$( event.target ).trigger( event.originalEvent );\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\titem = ui.item.data( \"ui-autocomplete-item\" );\n\t\t\t\tif ( false !== this._trigger( \"focus\", event, { item: item } ) ) {\n\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\n\t\t\t\t\tif ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis._value( item.value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Announce the value in the liveRegion\n\t\t\t\tlabel = ui.item.attr( \"aria-label\" ) || item.value;\n\t\t\t\tif ( label && $.trim( label ).length ) {\n\t\t\t\t\tthis.liveRegion.children().hide();\n\t\t\t\t\t$( \"<div>\" ).text( label ).appendTo( this.liveRegion );\n\t\t\t\t}\n\t\t\t},\n\t\t\tmenuselect: function( event, ui ) {\n\t\t\t\tvar item = ui.item.data( \"ui-autocomplete-item\" ),\n\t\t\t\t\tprevious = this.previous;\n\n\t\t\t\t// only trigger when focus was lost (click on menu)\n\t\t\t\tif ( this.element[ 0 ] !== this.document[ 0 ].activeElement ) {\n\t\t\t\t\tthis.element.focus();\n\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t// #6109 - IE triggers two focus events and the second\n\t\t\t\t\t// is asynchronous, so we need to reset the previous\n\t\t\t\t\t// term synchronously and asynchronously :-(\n\t\t\t\t\tthis._delay(function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t\tthis.selectedItem = item;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif ( false !== this._trigger( \"select\", event, { item: item } ) ) {\n\t\t\t\t\tthis._value( item.value );\n\t\t\t\t}\n\t\t\t\t// reset the term after the select event\n\t\t\t\t// this allows custom select handling to work properly\n\t\t\t\tthis.term = this._value();\n\n\t\t\t\tthis.close( event );\n\t\t\t\tthis.selectedItem = item;\n\t\t\t}\n\t\t});\n\n\t\tthis.liveRegion = $( \"<span>\", {\n\t\t\t\trole: \"status\",\n\t\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\t\"aria-relevant\": \"additions\"\n\t\t\t})\n\t\t\t.addClass( \"ui-helper-hidden-accessible\" )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\n\t\t// turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t});\n\t},\n\n\t_destroy: function() {\n\t\tclearTimeout( this.searching );\n\t\tthis.element\n\t\t\t.removeClass( \"ui-autocomplete-input\" )\n\t\t\t.removeAttr( \"autocomplete\" );\n\t\tthis.menu.element.remove();\n\t\tthis.liveRegion.remove();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"source\" ) {\n\t\t\tthis._initSource();\n\t\t}\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menu.element.appendTo( this._appendTo() );\n\t\t}\n\t\tif ( key === \"disabled\" && value && this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_initSource: function() {\n\t\tvar array, url,\n\t\t\tthat = this;\n\t\tif ( $.isArray( this.options.source ) ) {\n\t\t\tarray = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tresponse( $.ui.autocomplete.filter( array, request.term ) );\n\t\t\t};\n\t\t} else if ( typeof this.options.source === \"string\" ) {\n\t\t\turl = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tif ( that.xhr ) {\n\t\t\t\t\tthat.xhr.abort();\n\t\t\t\t}\n\t\t\t\tthat.xhr = $.ajax({\n\t\t\t\t\turl: url,\n\t\t\t\t\tdata: request,\n\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\tsuccess: function( data ) {\n\t\t\t\t\t\tresponse( data );\n\t\t\t\t\t},\n\t\t\t\t\terror: function() {\n\t\t\t\t\t\tresponse([]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t} else {\n\t\t\tthis.source = this.options.source;\n\t\t}\n\t},\n\n\t_searchTimeout: function( event ) {\n\t\tclearTimeout( this.searching );\n\t\tthis.searching = this._delay(function() {\n\n\t\t\t// Search if the value has changed, or if the user retypes the same value (see #7434)\n\t\t\tvar equalValues = this.term === this._value(),\n\t\t\t\tmenuVisible = this.menu.element.is( \":visible\" ),\n\t\t\t\tmodifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n\n\t\t\tif ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.search( null, event );\n\t\t\t}\n\t\t}, this.options.delay );\n\t},\n\n\tsearch: function( value, event ) {\n\t\tvalue = value != null ? value : this._value();\n\n\t\t// always save the actual value, not the one passed as an argument\n\t\tthis.term = this._value();\n\n\t\tif ( value.length < this.options.minLength ) {\n\t\t\treturn this.close( event );\n\t\t}\n\n\t\tif ( this._trigger( \"search\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._search( value );\n\t},\n\n\t_search: function( value ) {\n\t\tthis.pending++;\n\t\tthis.element.addClass( \"ui-autocomplete-loading\" );\n\t\tthis.cancelSearch = false;\n\n\t\tthis.source( { term: value }, this._response() );\n\t},\n\n\t_response: function() {\n\t\tvar index = ++this.requestIndex;\n\n\t\treturn $.proxy(function( content ) {\n\t\t\tif ( index === this.requestIndex ) {\n\t\t\t\tthis.__response( content );\n\t\t\t}\n\n\t\t\tthis.pending--;\n\t\t\tif ( !this.pending ) {\n\t\t\t\tthis.element.removeClass( \"ui-autocomplete-loading\" );\n\t\t\t}\n\t\t}, this );\n\t},\n\n\t__response: function( content ) {\n\t\tif ( content ) {\n\t\t\tcontent = this._normalize( content );\n\t\t}\n\t\tthis._trigger( \"response\", null, { content: content } );\n\t\tif ( !this.options.disabled && content && content.length && !this.cancelSearch ) {\n\t\t\tthis._suggest( content );\n\t\t\tthis._trigger( \"open\" );\n\t\t} else {\n\t\t\t// use ._close() instead of .close() so we don't cancel future searches\n\t\t\tthis._close();\n\t\t}\n\t},\n\n\tclose: function( event ) {\n\t\tthis.cancelSearch = true;\n\t\tthis._close( event );\n\t},\n\n\t_close: function( event ) {\n\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.menu.element.hide();\n\t\t\tthis.menu.blur();\n\t\t\tthis.isNewMenu = true;\n\t\t\tthis._trigger( \"close\", event );\n\t\t}\n\t},\n\n\t_change: function( event ) {\n\t\tif ( this.previous !== this._value() ) {\n\t\t\tthis._trigger( \"change\", event, { item: this.selectedItem } );\n\t\t}\n\t},\n\n\t_normalize: function( items ) {\n\t\t// assume all items have the right format when the first item is complete\n\t\tif ( items.length && items[ 0 ].label && items[ 0 ].value ) {\n\t\t\treturn items;\n\t\t}\n\t\treturn $.map( items, function( item ) {\n\t\t\tif ( typeof item === \"string\" ) {\n\t\t\t\treturn {\n\t\t\t\t\tlabel: item,\n\t\t\t\t\tvalue: item\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn $.extend( {}, item, {\n\t\t\t\tlabel: item.label || item.value,\n\t\t\t\tvalue: item.value || item.label\n\t\t\t});\n\t\t});\n\t},\n\n\t_suggest: function( items ) {\n\t\tvar ul = this.menu.element.empty();\n\t\tthis._renderMenu( ul, items );\n\t\tthis.isNewMenu = true;\n\t\tthis.menu.refresh();\n\n\t\t// size and position menu\n\t\tul.show();\n\t\tthis._resizeMenu();\n\t\tul.position( $.extend({\n\t\t\tof: this.element\n\t\t}, this.options.position ) );\n\n\t\tif ( this.options.autoFocus ) {\n\t\t\tthis.menu.next();\n\t\t}\n\t},\n\n\t_resizeMenu: function() {\n\t\tvar ul = this.menu.element;\n\t\tul.outerWidth( Math.max(\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\n\t\t\tul.width( \"\" ).outerWidth() + 1,\n\t\t\tthis.element.outerWidth()\n\t\t) );\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this;\n\t\t$.each( items, function( index, item ) {\n\t\t\tthat._renderItemData( ul, item );\n\t\t});\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-autocomplete-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\treturn $( \"<li>\" ).text( item.label ).appendTo( ul );\n\t},\n\n\t_move: function( direction, event ) {\n\t\tif ( !this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.search( null, event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.menu.isFirstItem() && /^previous/.test( direction ) ||\n\t\t\t\tthis.menu.isLastItem() && /^next/.test( direction ) ) {\n\n\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\tthis._value( this.term );\n\t\t\t}\n\n\t\t\tthis.menu.blur();\n\t\t\treturn;\n\t\t}\n\t\tthis.menu[ direction ]( event );\n\t},\n\n\twidget: function() {\n\t\treturn this.menu.element;\n\t},\n\n\t_value: function() {\n\t\treturn this.valueMethod.apply( this.element, arguments );\n\t},\n\n\t_keyEvent: function( keyEvent, event ) {\n\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis._move( keyEvent, event );\n\n\t\t\t// prevents moving cursor to beginning/end of the text field in some browsers\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n});\n\n$.extend( $.ui.autocomplete, {\n\tescapeRegex: function( value ) {\n\t\treturn value.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" );\n\t},\n\tfilter: function( array, term ) {\n\t\tvar matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), \"i\" );\n\t\treturn $.grep( array, function( value ) {\n\t\t\treturn matcher.test( value.label || value.value || value );\n\t\t});\n\t}\n});\n\n// live region extension, adding a `messages` option\n// NOTE: This is an experimental API. We are still investigating\n// a full solution for string manipulation and internationalization.\n$.widget( \"ui.autocomplete\", $.ui.autocomplete, {\n\toptions: {\n\t\tmessages: {\n\t\t\tnoResults: \"No search results.\",\n\t\t\tresults: function( amount ) {\n\t\t\t\treturn amount + ( amount > 1 ? \" results are\" : \" result is\" ) +\n\t\t\t\t\t\" available, use up and down arrow keys to navigate.\";\n\t\t\t}\n\t\t}\n\t},\n\n\t__response: function( content ) {\n\t\tvar message;\n\t\tthis._superApply( arguments );\n\t\tif ( this.options.disabled || this.cancelSearch ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( content && content.length ) {\n\t\t\tmessage = this.options.messages.results( content.length );\n\t\t} else {\n\t\t\tmessage = this.options.messages.noResults;\n\t\t}\n\t\tthis.liveRegion.children().hide();\n\t\t$( \"<div>\" ).text( message ).appendTo( this.liveRegion );\n\t}\n});\n\nvar autocomplete = $.ui.autocomplete;\n\n\n/*!\n * jQuery UI Button 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/button/\n */\n\n\nvar lastActive,\n\tbaseClasses = \"ui-button ui-widget ui-state-default ui-corner-all\",\n\ttypeClasses = \"ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only\",\n\tformResetHandler = function() {\n\t\tvar form = $( this );\n\t\tsetTimeout(function() {\n\t\t\tform.find( \":ui-button\" ).button( \"refresh\" );\n\t\t}, 1 );\n\t},\n\tradioGroup = function( radio ) {\n\t\tvar name = radio.name,\n\t\t\tform = radio.form,\n\t\t\tradios = $( [] );\n\t\tif ( name ) {\n\t\t\tname = name.replace( /'/g, \"\\\\'\" );\n\t\t\tif ( form ) {\n\t\t\t\tradios = $( form ).find( \"[name='\" + name + \"'][type=radio]\" );\n\t\t\t} else {\n\t\t\t\tradios = $( \"[name='\" + name + \"'][type=radio]\", radio.ownerDocument )\n\t\t\t\t\t.filter(function() {\n\t\t\t\t\t\treturn !this.form;\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn radios;\n\t};\n\n$.widget( \"ui.button\", {\n\tversion: \"1.11.4\",\n\tdefaultElement: \"<button>\",\n\toptions: {\n\t\tdisabled: null,\n\t\ttext: true,\n\t\tlabel: null,\n\t\ticons: {\n\t\t\tprimary: null,\n\t\t\tsecondary: null\n\t\t}\n\t},\n\t_create: function() {\n\t\tthis.element.closest( \"form\" )\n\t\t\t.unbind( \"reset\" + this.eventNamespace )\n\t\t\t.bind( \"reset\" + this.eventNamespace, formResetHandler );\n\n\t\tif ( typeof this.options.disabled !== \"boolean\" ) {\n\t\t\tthis.options.disabled = !!this.element.prop( \"disabled\" );\n\t\t} else {\n\t\t\tthis.element.prop( \"disabled\", this.options.disabled );\n\t\t}\n\n\t\tthis._determineButtonType();\n\t\tthis.hasTitle = !!this.buttonElement.attr( \"title\" );\n\n\t\tvar that = this,\n\t\t\toptions = this.options,\n\t\t\ttoggleButton = this.type === \"checkbox\" || this.type === \"radio\",\n\t\t\tactiveClass = !toggleButton ? \"ui-state-active\" : \"\";\n\n\t\tif ( options.label === null ) {\n\t\t\toptions.label = (this.type === \"input\" ? this.buttonElement.val() : this.buttonElement.html());\n\t\t}\n\n\t\tthis._hoverable( this.buttonElement );\n\n\t\tthis.buttonElement\n\t\t\t.addClass( baseClasses )\n\t\t\t.attr( \"role\", \"button\" )\n\t\t\t.bind( \"mouseenter\" + this.eventNamespace, function() {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( this === lastActive ) {\n\t\t\t\t\t$( this ).addClass( \"ui-state-active\" );\n\t\t\t\t}\n\t\t\t})\n\t\t\t.bind( \"mouseleave\" + this.eventNamespace, function() {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$( this ).removeClass( activeClass );\n\t\t\t})\n\t\t\t.bind( \"click\" + this.eventNamespace, function( event ) {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Can't use _focusable() because the element that receives focus\n\t\t// and the element that gets the ui-state-focus class are different\n\t\tthis._on({\n\t\t\tfocus: function() {\n\t\t\t\tthis.buttonElement.addClass( \"ui-state-focus\" );\n\t\t\t},\n\t\t\tblur: function() {\n\t\t\t\tthis.buttonElement.removeClass( \"ui-state-focus\" );\n\t\t\t}\n\t\t});\n\n\t\tif ( toggleButton ) {\n\t\t\tthis.element.bind( \"change\" + this.eventNamespace, function() {\n\t\t\t\tthat.refresh();\n\t\t\t});\n\t\t}\n\n\t\tif ( this.type === \"checkbox\" ) {\n\t\t\tthis.buttonElement.bind( \"click\" + this.eventNamespace, function() {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t} else if ( this.type === \"radio\" ) {\n\t\t\tthis.buttonElement.bind( \"click\" + this.eventNamespace, function() {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t$( this ).addClass( \"ui-state-active\" );\n\t\t\t\tthat.buttonElement.attr( \"aria-pressed\", \"true\" );\n\n\t\t\t\tvar radio = that.element[ 0 ];\n\t\t\t\tradioGroup( radio )\n\t\t\t\t\t.not( radio )\n\t\t\t\t\t.map(function() {\n\t\t\t\t\t\treturn $( this ).button( \"widget\" )[ 0 ];\n\t\t\t\t\t})\n\t\t\t\t\t.removeClass( \"ui-state-active\" )\n\t\t\t\t\t.attr( \"aria-pressed\", \"false\" );\n\t\t\t});\n\t\t} else {\n\t\t\tthis.buttonElement\n\t\t\t\t.bind( \"mousedown\" + this.eventNamespace, function() {\n\t\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t$( this ).addClass( \"ui-state-active\" );\n\t\t\t\t\tlastActive = this;\n\t\t\t\t\tthat.document.one( \"mouseup\", function() {\n\t\t\t\t\t\tlastActive = null;\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.bind( \"mouseup\" + this.eventNamespace, function() {\n\t\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t$( this ).removeClass( \"ui-state-active\" );\n\t\t\t\t})\n\t\t\t\t.bind( \"keydown\" + this.eventNamespace, function(event) {\n\t\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {\n\t\t\t\t\t\t$( this ).addClass( \"ui-state-active\" );\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t// see #8559, we bind to blur here in case the button element loses\n\t\t\t\t// focus between keydown and keyup, it would be left in an \"active\" state\n\t\t\t\t.bind( \"keyup\" + this.eventNamespace + \" blur\" + this.eventNamespace, function() {\n\t\t\t\t\t$( this ).removeClass( \"ui-state-active\" );\n\t\t\t\t});\n\n\t\t\tif ( this.buttonElement.is(\"a\") ) {\n\t\t\t\tthis.buttonElement.keyup(function(event) {\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE ) {\n\t\t\t\t\t\t// TODO pass through original event correctly (just as 2nd argument doesn't work)\n\t\t\t\t\t\t$( this ).click();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tthis._setOption( \"disabled\", options.disabled );\n\t\tthis._resetButton();\n\t},\n\n\t_determineButtonType: function() {\n\t\tvar ancestor, labelSelector, checked;\n\n\t\tif ( this.element.is(\"[type=checkbox]\") ) {\n\t\t\tthis.type = \"checkbox\";\n\t\t} else if ( this.element.is(\"[type=radio]\") ) {\n\t\t\tthis.type = \"radio\";\n\t\t} else if ( this.element.is(\"input\") ) {\n\t\t\tthis.type = \"input\";\n\t\t} else {\n\t\t\tthis.type = \"button\";\n\t\t}\n\n\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t// we don't search against the document in case the element\n\t\t\t// is disconnected from the DOM\n\t\t\tancestor = this.element.parents().last();\n\t\t\tlabelSelector = \"label[for='\" + this.element.attr(\"id\") + \"']\";\n\t\t\tthis.buttonElement = ancestor.find( labelSelector );\n\t\t\tif ( !this.buttonElement.length ) {\n\t\t\t\tancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();\n\t\t\t\tthis.buttonElement = ancestor.filter( labelSelector );\n\t\t\t\tif ( !this.buttonElement.length ) {\n\t\t\t\t\tthis.buttonElement = ancestor.find( labelSelector );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.element.addClass( \"ui-helper-hidden-accessible\" );\n\n\t\t\tchecked = this.element.is( \":checked\" );\n\t\t\tif ( checked ) {\n\t\t\t\tthis.buttonElement.addClass( \"ui-state-active\" );\n\t\t\t}\n\t\t\tthis.buttonElement.prop( \"aria-pressed\", checked );\n\t\t} else {\n\t\t\tthis.buttonElement = this.element;\n\t\t}\n\t},\n\n\twidget: function() {\n\t\treturn this.buttonElement;\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.removeClass( \"ui-helper-hidden-accessible\" );\n\t\tthis.buttonElement\n\t\t\t.removeClass( baseClasses + \" ui-state-active \" + typeClasses )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-pressed\" )\n\t\t\t.html( this.buttonElement.find(\".ui-button-text\").html() );\n\n\t\tif ( !this.hasTitle ) {\n\t\t\tthis.buttonElement.removeAttr( \"title\" );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.widget().toggleClass( \"ui-state-disabled\", !!value );\n\t\t\tthis.element.prop( \"disabled\", !!value );\n\t\t\tif ( value ) {\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tthis.buttonElement.removeClass( \"ui-state-focus\" );\n\t\t\t\t} else {\n\t\t\t\t\tthis.buttonElement.removeClass( \"ui-state-focus ui-state-active\" );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tthis._resetButton();\n\t},\n\n\trefresh: function() {\n\t\t//See #8237 & #8828\n\t\tvar isDisabled = this.element.is( \"input, button\" ) ? this.element.is( \":disabled\" ) : this.element.hasClass( \"ui-button-disabled\" );\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOption( \"disabled\", isDisabled );\n\t\t}\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tradioGroup( this.element[0] ).each(function() {\n\t\t\t\tif ( $( this ).is( \":checked\" ) ) {\n\t\t\t\t\t$( this ).button( \"widget\" )\n\t\t\t\t\t\t.addClass( \"ui-state-active\" )\n\t\t\t\t\t\t.attr( \"aria-pressed\", \"true\" );\n\t\t\t\t} else {\n\t\t\t\t\t$( this ).button( \"widget\" )\n\t\t\t\t\t\t.removeClass( \"ui-state-active\" )\n\t\t\t\t\t\t.attr( \"aria-pressed\", \"false\" );\n\t\t\t\t}\n\t\t\t});\n\t\t} else if ( this.type === \"checkbox\" ) {\n\t\t\tif ( this.element.is( \":checked\" ) ) {\n\t\t\t\tthis.buttonElement\n\t\t\t\t\t.addClass( \"ui-state-active\" )\n\t\t\t\t\t.attr( \"aria-pressed\", \"true\" );\n\t\t\t} else {\n\t\t\t\tthis.buttonElement\n\t\t\t\t\t.removeClass( \"ui-state-active\" )\n\t\t\t\t\t.attr( \"aria-pressed\", \"false\" );\n\t\t\t}\n\t\t}\n\t},\n\n\t_resetButton: function() {\n\t\tif ( this.type === \"input\" ) {\n\t\t\tif ( this.options.label ) {\n\t\t\t\tthis.element.val( this.options.label );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tvar buttonElement = this.buttonElement.removeClass( typeClasses ),\n\t\t\tbuttonText = $( \"<span></span>\", this.document[0] )\n\t\t\t\t.addClass( \"ui-button-text\" )\n\t\t\t\t.html( this.options.label )\n\t\t\t\t.appendTo( buttonElement.empty() )\n\t\t\t\t.text(),\n\t\t\ticons = this.options.icons,\n\t\t\tmultipleIcons = icons.primary && icons.secondary,\n\t\t\tbuttonClasses = [];\n\n\t\tif ( icons.primary || icons.secondary ) {\n\t\t\tif ( this.options.text ) {\n\t\t\t\tbuttonClasses.push( \"ui-button-text-icon\" + ( multipleIcons ? \"s\" : ( icons.primary ? \"-primary\" : \"-secondary\" ) ) );\n\t\t\t}\n\n\t\t\tif ( icons.primary ) {\n\t\t\t\tbuttonElement.prepend( \"<span class='ui-button-icon-primary ui-icon \" + icons.primary + \"'></span>\" );\n\t\t\t}\n\n\t\t\tif ( icons.secondary ) {\n\t\t\t\tbuttonElement.append( \"<span class='ui-button-icon-secondary ui-icon \" + icons.secondary + \"'></span>\" );\n\t\t\t}\n\n\t\t\tif ( !this.options.text ) {\n\t\t\t\tbuttonClasses.push( multipleIcons ? \"ui-button-icons-only\" : \"ui-button-icon-only\" );\n\n\t\t\t\tif ( !this.hasTitle ) {\n\t\t\t\t\tbuttonElement.attr( \"title\", $.trim( buttonText ) );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tbuttonClasses.push( \"ui-button-text-only\" );\n\t\t}\n\t\tbuttonElement.addClass( buttonClasses.join( \" \" ) );\n\t}\n});\n\n$.widget( \"ui.buttonset\", {\n\tversion: \"1.11.4\",\n\toptions: {\n\t\titems: \"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)\"\n\t},\n\n\t_create: function() {\n\t\tthis.element.addClass( \"ui-buttonset\" );\n\t},\n\n\t_init: function() {\n\t\tthis.refresh();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.buttons.button( \"option\", key, value );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\trefresh: function() {\n\t\tvar rtl = this.element.css( \"direction\" ) === \"rtl\",\n\t\t\tallButtons = this.element.find( this.options.items ),\n\t\t\texistingButtons = allButtons.filter( \":ui-button\" );\n\n\t\t// Initialize new buttons\n\t\tallButtons.not( \":ui-button\" ).button();\n\n\t\t// Refresh existing buttons\n\t\texistingButtons.button( \"refresh\" );\n\n\t\tthis.buttons = allButtons\n\t\t\t.map(function() {\n\t\t\t\treturn $( this ).button( \"widget\" )[ 0 ];\n\t\t\t})\n\t\t\t\t.removeClass( \"ui-corner-all ui-corner-left ui-corner-right\" )\n\t\t\t\t.filter( \":first\" )\n\t\t\t\t\t.addClass( rtl ? \"ui-corner-right\" : \"ui-corner-left\" )\n\t\t\t\t.end()\n\t\t\t\t.filter( \":last\" )\n\t\t\t\t\t.addClass( rtl ? \"ui-corner-left\" : \"ui-corner-right\" )\n\t\t\t\t.end()\n\t\t\t.end();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeClass( \"ui-buttonset\" );\n\t\tthis.buttons\n\t\t\t.map(function() {\n\t\t\t\treturn $( this ).button( \"widget\" )[ 0 ];\n\t\t\t})\n\t\t\t\t.removeClass( \"ui-corner-left ui-corner-right\" )\n\t\t\t.end()\n\t\t\t.button( \"destroy\" );\n\t}\n});\n\nvar button = $.ui.button;\n\n\n/*!\n * jQuery UI Datepicker 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/datepicker/\n */\n\n\n$.extend($.ui, { datepicker: { version: \"1.11.4\" } });\n\nvar datepicker_instActive;\n\nfunction datepicker_getZindex( elem ) {\n\tvar position, value;\n\twhile ( elem.length && elem[ 0 ] !== document ) {\n\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t// This makes behavior of this function consistent across browsers\n\t\t// WebKit always returns auto if the element is positioned\n\t\tposition = elem.css( \"position\" );\n\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\n\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t// other browsers return a string\n\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\n\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\telem = elem.parent();\n\t}\n\n\treturn 0;\n}\n/* Date picker manager.\n   Use the singleton instance of this class, $.datepicker, to interact with the date picker.\n   Settings for (groups of) date pickers are maintained in an instance object,\n   allowing multiple different settings on the same page. */\n\nfunction Datepicker() {\n\tthis._curInst = null; // The current instance in use\n\tthis._keyEvent = false; // If the last event was a key event\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\n\tthis._mainDivId = \"ui-datepicker-div\"; // The ID of the main datepicker division\n\tthis._inlineClass = \"ui-datepicker-inline\"; // The name of the inline marker class\n\tthis._appendClass = \"ui-datepicker-append\"; // The name of the append marker class\n\tthis._triggerClass = \"ui-datepicker-trigger\"; // The name of the trigger marker class\n\tthis._dialogClass = \"ui-datepicker-dialog\"; // The name of the dialog marker class\n\tthis._disableClass = \"ui-datepicker-disabled\"; // The name of the disabled covering marker class\n\tthis._unselectableClass = \"ui-datepicker-unselectable\"; // The name of the unselectable cell marker class\n\tthis._currentClass = \"ui-datepicker-current-day\"; // The name of the current day marker class\n\tthis._dayOverClass = \"ui-datepicker-days-cell-over\"; // The name of the day hover marker class\n\tthis.regional = []; // Available regional settings, indexed by language code\n\tthis.regional[\"\"] = { // Default regional settings\n\t\tcloseText: \"Done\", // Display text for close link\n\t\tprevText: \"Prev\", // Display text for previous month link\n\t\tnextText: \"Next\", // Display text for next month link\n\t\tcurrentText: \"Today\", // Display text for current month link\n\t\tmonthNames: [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\n\t\t\t\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"], // Names of months for drop-down and formatting\n\t\tmonthNamesShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"], // For formatting\n\t\tdayNames: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"], // For formatting\n\t\tdayNamesShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"], // For formatting\n\t\tdayNamesMin: [\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"], // Column headings for days starting at Sunday\n\t\tweekHeader: \"Wk\", // Column header for week of the year\n\t\tdateFormat: \"mm/dd/yy\", // See format options on parseDate\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\n\t\tisRTL: false, // True if right-to-left language, false if left-to-right\n\t\tshowMonthAfterYear: false, // True if the year select precedes month, false for month then year\n\t\tyearSuffix: \"\" // Additional text to append to the year in the month headers\n\t};\n\tthis._defaults = { // Global defaults for all the date picker instances\n\t\tshowOn: \"focus\", // \"focus\" for popup on focus,\n\t\t\t// \"button\" for trigger button, or \"both\" for either\n\t\tshowAnim: \"fadeIn\", // Name of jQuery animation for popup\n\t\tshowOptions: {}, // Options for enhanced animations\n\t\tdefaultDate: null, // Used when field is blank: actual date,\n\t\t\t// +/-number for offset from today, null for today\n\t\tappendText: \"\", // Display text following the input box, e.g. showing the format\n\t\tbuttonText: \"...\", // Text for trigger button\n\t\tbuttonImage: \"\", // URL for trigger button image\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\n\t\t\t// if not applicable, false to just disable them\n\t\tnavigationAsDateFormat: false, // True if date formatting applied to prev/today/next links\n\t\tgotoCurrent: false, // True if today link goes back to current selection instead\n\t\tchangeMonth: false, // True if month can be selected directly, false if only prev/next\n\t\tchangeYear: false, // True if year can be selected directly, false if only prev/next\n\t\tyearRange: \"c-10:c+10\", // Range of years to display in drop-down,\n\t\t\t// either relative to today's year (-nn:+nn), relative to currently displayed year\n\t\t\t// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\n\t\tselectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable\n\t\tshowWeek: false, // True to show week of the year, false to not show it\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\n\t\t\t// takes a Date and returns the number of the week for it\n\t\tshortYearCutoff: \"+10\", // Short year values < this are in the current century,\n\t\t\t// > this are in the previous century,\n\t\t\t// string value starting with \"+\" for current year + value\n\t\tminDate: null, // The earliest selectable date, or null for no limit\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\n\t\tduration: \"fast\", // Duration of display/closure\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\n\t\t\t// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or \"\",\n\t\t\t// [2] = cell title (optional), e.g. $.datepicker.noWeekends\n\t\tbeforeShow: null, // Function that takes an input field and\n\t\t\t// returns a set of custom settings for the date picker\n\t\tonSelect: null, // Define a callback function when a date is selected\n\t\tonChangeMonthYear: null, // Define a callback function when the month or year is changed\n\t\tonClose: null, // Define a callback function when the datepicker is closed\n\t\tnumberOfMonths: 1, // Number of months to show at a time\n\t\tshowCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)\n\t\tstepMonths: 1, // Number of months to step back/forward\n\t\tstepBigMonths: 12, // Number of months to step back/forward for the big links\n\t\taltField: \"\", // Selector for an alternate field to store selected dates into\n\t\taltFormat: \"\", // The date format to use for the alternate field\n\t\tconstrainInput: true, // The input is constrained by the current date format\n\t\tshowButtonPanel: false, // True to show button panel, false to not show it\n\t\tautoSize: false, // True to size the input for the date format, false to leave as is\n\t\tdisabled: false // The initial disabled state\n\t};\n\t$.extend(this._defaults, this.regional[\"\"]);\n\tthis.regional.en = $.extend( true, {}, this.regional[ \"\" ]);\n\tthis.regional[ \"en-US\" ] = $.extend( true, {}, this.regional.en );\n\tthis.dpDiv = datepicker_bindHover($(\"<div id='\" + this._mainDivId + \"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\"));\n}\n\n$.extend(Datepicker.prototype, {\n\t/* Class name added to elements to indicate already configured with a date picker. */\n\tmarkerClassName: \"hasDatepicker\",\n\n\t//Keep track of the maximum number of rows displayed (see #7043)\n\tmaxRows: 4,\n\n\t// TODO rename to \"widget\" when switching to widget factory\n\t_widgetDatepicker: function() {\n\t\treturn this.dpDiv;\n\t},\n\n\t/* Override the default settings for all instances of the date picker.\n\t * @param  settings  object - the new settings to use as defaults (anonymous object)\n\t * @return the manager object\n\t */\n\tsetDefaults: function(settings) {\n\t\tdatepicker_extendRemove(this._defaults, settings || {});\n\t\treturn this;\n\t},\n\n\t/* Attach the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t * @param  settings  object - the new settings to use for this date picker instance (anonymous)\n\t */\n\t_attachDatepicker: function(target, settings) {\n\t\tvar nodeName, inline, inst;\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tinline = (nodeName === \"div\" || nodeName === \"span\");\n\t\tif (!target.id) {\n\t\t\tthis.uuid += 1;\n\t\t\ttarget.id = \"dp\" + this.uuid;\n\t\t}\n\t\tinst = this._newInst($(target), inline);\n\t\tinst.settings = $.extend({}, settings || {});\n\t\tif (nodeName === \"input\") {\n\t\t\tthis._connectDatepicker(target, inst);\n\t\t} else if (inline) {\n\t\t\tthis._inlineDatepicker(target, inst);\n\t\t}\n\t},\n\n\t/* Create a new instance object. */\n\t_newInst: function(target, inline) {\n\t\tvar id = target[0].id.replace(/([^A-Za-z0-9_\\-])/g, \"\\\\\\\\$1\"); // escape jQuery meta chars\n\t\treturn {id: id, input: target, // associated target\n\t\t\tselectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection\n\t\t\tdrawMonth: 0, drawYear: 0, // month being drawn\n\t\t\tinline: inline, // is datepicker inline or not\n\t\t\tdpDiv: (!inline ? this.dpDiv : // presentation div\n\t\t\tdatepicker_bindHover($(\"<div class='\" + this._inlineClass + \" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\")))};\n\t},\n\n\t/* Attach the date picker to an input field. */\n\t_connectDatepicker: function(target, inst) {\n\t\tvar input = $(target);\n\t\tinst.append = $([]);\n\t\tinst.trigger = $([]);\n\t\tif (input.hasClass(this.markerClassName)) {\n\t\t\treturn;\n\t\t}\n\t\tthis._attachments(input, inst);\n\t\tinput.addClass(this.markerClassName).keydown(this._doKeyDown).\n\t\t\tkeypress(this._doKeyPress).keyup(this._doKeyUp);\n\t\tthis._autoSize(inst);\n\t\t$.data(target, \"datepicker\", inst);\n\t\t//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)\n\t\tif( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t},\n\n\t/* Make attachments based on settings. */\n\t_attachments: function(input, inst) {\n\t\tvar showOn, buttonText, buttonImage,\n\t\t\tappendText = this._get(inst, \"appendText\"),\n\t\t\tisRTL = this._get(inst, \"isRTL\");\n\n\t\tif (inst.append) {\n\t\t\tinst.append.remove();\n\t\t}\n\t\tif (appendText) {\n\t\t\tinst.append = $(\"<span class='\" + this._appendClass + \"'>\" + appendText + \"</span>\");\n\t\t\tinput[isRTL ? \"before\" : \"after\"](inst.append);\n\t\t}\n\n\t\tinput.unbind(\"focus\", this._showDatepicker);\n\n\t\tif (inst.trigger) {\n\t\t\tinst.trigger.remove();\n\t\t}\n\n\t\tshowOn = this._get(inst, \"showOn\");\n\t\tif (showOn === \"focus\" || showOn === \"both\") { // pop-up date picker when in the marked field\n\t\t\tinput.focus(this._showDatepicker);\n\t\t}\n\t\tif (showOn === \"button\" || showOn === \"both\") { // pop-up date picker when button clicked\n\t\t\tbuttonText = this._get(inst, \"buttonText\");\n\t\t\tbuttonImage = this._get(inst, \"buttonImage\");\n\t\t\tinst.trigger = $(this._get(inst, \"buttonImageOnly\") ?\n\t\t\t\t$(\"<img/>\").addClass(this._triggerClass).\n\t\t\t\t\tattr({ src: buttonImage, alt: buttonText, title: buttonText }) :\n\t\t\t\t$(\"<button type='button'></button>\").addClass(this._triggerClass).\n\t\t\t\t\thtml(!buttonImage ? buttonText : $(\"<img/>\").attr(\n\t\t\t\t\t{ src:buttonImage, alt:buttonText, title:buttonText })));\n\t\t\tinput[isRTL ? \"before\" : \"after\"](inst.trigger);\n\t\t\tinst.trigger.click(function() {\n\t\t\t\tif ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t$.datepicker._showDatepicker(input[0]);\n\t\t\t\t} else {\n\t\t\t\t\t$.datepicker._showDatepicker(input[0]);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t},\n\n\t/* Apply the maximum length for the date format. */\n\t_autoSize: function(inst) {\n\t\tif (this._get(inst, \"autoSize\") && !inst.inline) {\n\t\t\tvar findMax, max, maxI, i,\n\t\t\t\tdate = new Date(2009, 12 - 1, 20), // Ensure double digits\n\t\t\t\tdateFormat = this._get(inst, \"dateFormat\");\n\n\t\t\tif (dateFormat.match(/[DM]/)) {\n\t\t\t\tfindMax = function(names) {\n\t\t\t\t\tmax = 0;\n\t\t\t\t\tmaxI = 0;\n\t\t\t\t\tfor (i = 0; i < names.length; i++) {\n\t\t\t\t\t\tif (names[i].length > max) {\n\t\t\t\t\t\t\tmax = names[i].length;\n\t\t\t\t\t\t\tmaxI = i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn maxI;\n\t\t\t\t};\n\t\t\t\tdate.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?\n\t\t\t\t\t\"monthNames\" : \"monthNamesShort\"))));\n\t\t\t\tdate.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?\n\t\t\t\t\t\"dayNames\" : \"dayNamesShort\"))) + 20 - date.getDay());\n\t\t\t}\n\t\t\tinst.input.attr(\"size\", this._formatDate(inst, date).length);\n\t\t}\n\t},\n\n\t/* Attach an inline date picker to a div. */\n\t_inlineDatepicker: function(target, inst) {\n\t\tvar divSpan = $(target);\n\t\tif (divSpan.hasClass(this.markerClassName)) {\n\t\t\treturn;\n\t\t}\n\t\tdivSpan.addClass(this.markerClassName).append(inst.dpDiv);\n\t\t$.data(target, \"datepicker\", inst);\n\t\tthis._setDate(inst, this._getDefaultDate(inst), true);\n\t\tthis._updateDatepicker(inst);\n\t\tthis._updateAlternate(inst);\n\t\t//If disabled option is true, disable the datepicker before showing it (see ticket #5665)\n\t\tif( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t\t// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements\n\t\t// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height\n\t\tinst.dpDiv.css( \"display\", \"block\" );\n\t},\n\n\t/* Pop-up the date picker in a \"dialog\" box.\n\t * @param  input element - ignored\n\t * @param  date\tstring or Date - the initial date to display\n\t * @param  onSelect  function - the function to call when a date is selected\n\t * @param  settings  object - update the dialog date picker instance's settings (anonymous object)\n\t * @param  pos int[2] - coordinates for the dialog's position within the screen or\n\t *\t\t\t\t\tevent - with x/y coordinates or\n\t *\t\t\t\t\tleave empty for default (screen centre)\n\t * @return the manager object\n\t */\n\t_dialogDatepicker: function(input, date, onSelect, settings, pos) {\n\t\tvar id, browserWidth, browserHeight, scrollX, scrollY,\n\t\t\tinst = this._dialogInst; // internal instance\n\n\t\tif (!inst) {\n\t\t\tthis.uuid += 1;\n\t\t\tid = \"dp\" + this.uuid;\n\t\t\tthis._dialogInput = $(\"<input type='text' id='\" + id +\n\t\t\t\t\"' style='position: absolute; top: -100px; width: 0px;'/>\");\n\t\t\tthis._dialogInput.keydown(this._doKeyDown);\n\t\t\t$(\"body\").append(this._dialogInput);\n\t\t\tinst = this._dialogInst = this._newInst(this._dialogInput, false);\n\t\t\tinst.settings = {};\n\t\t\t$.data(this._dialogInput[0], \"datepicker\", inst);\n\t\t}\n\t\tdatepicker_extendRemove(inst.settings, settings || {});\n\t\tdate = (date && date.constructor === Date ? this._formatDate(inst, date) : date);\n\t\tthis._dialogInput.val(date);\n\n\t\tthis._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);\n\t\tif (!this._pos) {\n\t\t\tbrowserWidth = document.documentElement.clientWidth;\n\t\t\tbrowserHeight = document.documentElement.clientHeight;\n\t\t\tscrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\n\t\t\tscrollY = document.documentElement.scrollTop || document.body.scrollTop;\n\t\t\tthis._pos = // should use actual width/height below\n\t\t\t\t[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];\n\t\t}\n\n\t\t// move input on screen for focus, but hidden behind dialog\n\t\tthis._dialogInput.css(\"left\", (this._pos[0] + 20) + \"px\").css(\"top\", this._pos[1] + \"px\");\n\t\tinst.settings.onSelect = onSelect;\n\t\tthis._inDialog = true;\n\t\tthis.dpDiv.addClass(this._dialogClass);\n\t\tthis._showDatepicker(this._dialogInput[0]);\n\t\tif ($.blockUI) {\n\t\t\t$.blockUI(this.dpDiv);\n\t\t}\n\t\t$.data(this._dialogInput[0], \"datepicker\", inst);\n\t\treturn this;\n\t},\n\n\t/* Detach a datepicker from its control.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_destroyDatepicker: function(target) {\n\t\tvar nodeName,\n\t\t\t$target = $(target),\n\t\t\tinst = $.data(target, \"datepicker\");\n\n\t\tif (!$target.hasClass(this.markerClassName)) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\t$.removeData(target, \"datepicker\");\n\t\tif (nodeName === \"input\") {\n\t\t\tinst.append.remove();\n\t\t\tinst.trigger.remove();\n\t\t\t$target.removeClass(this.markerClassName).\n\t\t\t\tunbind(\"focus\", this._showDatepicker).\n\t\t\t\tunbind(\"keydown\", this._doKeyDown).\n\t\t\t\tunbind(\"keypress\", this._doKeyPress).\n\t\t\t\tunbind(\"keyup\", this._doKeyUp);\n\t\t} else if (nodeName === \"div\" || nodeName === \"span\") {\n\t\t\t$target.removeClass(this.markerClassName).empty();\n\t\t}\n\n\t\tif ( datepicker_instActive === inst ) {\n\t\t\tdatepicker_instActive = null;\n\t\t}\n\t},\n\n\t/* Enable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_enableDatepicker: function(target) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $(target),\n\t\t\tinst = $.data(target, \"datepicker\");\n\n\t\tif (!$target.hasClass(this.markerClassName)) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif (nodeName === \"input\") {\n\t\t\ttarget.disabled = false;\n\t\t\tinst.trigger.filter(\"button\").\n\t\t\t\teach(function() { this.disabled = false; }).end().\n\t\t\t\tfilter(\"img\").css({opacity: \"1.0\", cursor: \"\"});\n\t\t} else if (nodeName === \"div\" || nodeName === \"span\") {\n\t\t\tinline = $target.children(\".\" + this._inlineClass);\n\t\t\tinline.children().removeClass(\"ui-state-disabled\");\n\t\t\tinline.find(\"select.ui-datepicker-month, select.ui-datepicker-year\").\n\t\t\t\tprop(\"disabled\", false);\n\t\t}\n\t\tthis._disabledInputs = $.map(this._disabledInputs,\n\t\t\tfunction(value) { return (value === target ? null : value); }); // delete entry\n\t},\n\n\t/* Disable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_disableDatepicker: function(target) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $(target),\n\t\t\tinst = $.data(target, \"datepicker\");\n\n\t\tif (!$target.hasClass(this.markerClassName)) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif (nodeName === \"input\") {\n\t\t\ttarget.disabled = true;\n\t\t\tinst.trigger.filter(\"button\").\n\t\t\t\teach(function() { this.disabled = true; }).end().\n\t\t\t\tfilter(\"img\").css({opacity: \"0.5\", cursor: \"default\"});\n\t\t} else if (nodeName === \"div\" || nodeName === \"span\") {\n\t\t\tinline = $target.children(\".\" + this._inlineClass);\n\t\t\tinline.children().addClass(\"ui-state-disabled\");\n\t\t\tinline.find(\"select.ui-datepicker-month, select.ui-datepicker-year\").\n\t\t\t\tprop(\"disabled\", true);\n\t\t}\n\t\tthis._disabledInputs = $.map(this._disabledInputs,\n\t\t\tfunction(value) { return (value === target ? null : value); }); // delete entry\n\t\tthis._disabledInputs[this._disabledInputs.length] = target;\n\t},\n\n\t/* Is the first field in a jQuery collection disabled as a datepicker?\n\t * @param  target\telement - the target input field or division or span\n\t * @return boolean - true if disabled, false if enabled\n\t */\n\t_isDisabledDatepicker: function(target) {\n\t\tif (!target) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (var i = 0; i < this._disabledInputs.length; i++) {\n\t\t\tif (this._disabledInputs[i] === target) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t/* Retrieve the instance data for the target control.\n\t * @param  target  element - the target input field or division or span\n\t * @return  object - the associated instance data\n\t * @throws  error if a jQuery problem getting data\n\t */\n\t_getInst: function(target) {\n\t\ttry {\n\t\t\treturn $.data(target, \"datepicker\");\n\t\t}\n\t\tcatch (err) {\n\t\t\tthrow \"Missing instance data for this datepicker\";\n\t\t}\n\t},\n\n\t/* Update or retrieve the settings for a date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t * @param  name\tobject - the new settings to update or\n\t *\t\t\t\tstring - the name of the setting to change or retrieve,\n\t *\t\t\t\twhen retrieving also \"all\" for all instance settings or\n\t *\t\t\t\t\"defaults\" for all global defaults\n\t * @param  value   any - the new value for the setting\n\t *\t\t\t\t(omit if above is an object or to retrieve a value)\n\t */\n\t_optionDatepicker: function(target, name, value) {\n\t\tvar settings, date, minDate, maxDate,\n\t\t\tinst = this._getInst(target);\n\n\t\tif (arguments.length === 2 && typeof name === \"string\") {\n\t\t\treturn (name === \"defaults\" ? $.extend({}, $.datepicker._defaults) :\n\t\t\t\t(inst ? (name === \"all\" ? $.extend({}, inst.settings) :\n\t\t\t\tthis._get(inst, name)) : null));\n\t\t}\n\n\t\tsettings = name || {};\n\t\tif (typeof name === \"string\") {\n\t\t\tsettings = {};\n\t\t\tsettings[name] = value;\n\t\t}\n\n\t\tif (inst) {\n\t\t\tif (this._curInst === inst) {\n\t\t\t\tthis._hideDatepicker();\n\t\t\t}\n\n\t\t\tdate = this._getDateDatepicker(target, true);\n\t\t\tminDate = this._getMinMaxDate(inst, \"min\");\n\t\t\tmaxDate = this._getMinMaxDate(inst, \"max\");\n\t\t\tdatepicker_extendRemove(inst.settings, settings);\n\t\t\t// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided\n\t\t\tif (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {\n\t\t\t\tinst.settings.minDate = this._formatDate(inst, minDate);\n\t\t\t}\n\t\t\tif (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {\n\t\t\t\tinst.settings.maxDate = this._formatDate(inst, maxDate);\n\t\t\t}\n\t\t\tif ( \"disabled\" in settings ) {\n\t\t\t\tif ( settings.disabled ) {\n\t\t\t\t\tthis._disableDatepicker(target);\n\t\t\t\t} else {\n\t\t\t\t\tthis._enableDatepicker(target);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._attachments($(target), inst);\n\t\t\tthis._autoSize(inst);\n\t\t\tthis._setDate(inst, date);\n\t\t\tthis._updateAlternate(inst);\n\t\t\tthis._updateDatepicker(inst);\n\t\t}\n\t},\n\n\t// change method deprecated\n\t_changeDatepicker: function(target, name, value) {\n\t\tthis._optionDatepicker(target, name, value);\n\t},\n\n\t/* Redraw the date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t */\n\t_refreshDatepicker: function(target) {\n\t\tvar inst = this._getInst(target);\n\t\tif (inst) {\n\t\t\tthis._updateDatepicker(inst);\n\t\t}\n\t},\n\n\t/* Set the dates for a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  date\tDate - the new date\n\t */\n\t_setDateDatepicker: function(target, date) {\n\t\tvar inst = this._getInst(target);\n\t\tif (inst) {\n\t\t\tthis._setDate(inst, date);\n\t\t\tthis._updateDatepicker(inst);\n\t\t\tthis._updateAlternate(inst);\n\t\t}\n\t},\n\n\t/* Get the date(s) for the first entry in a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  noDefault boolean - true if no default date is to be used\n\t * @return Date - the current date\n\t */\n\t_getDateDatepicker: function(target, noDefault) {\n\t\tvar inst = this._getInst(target);\n\t\tif (inst && !inst.inline) {\n\t\t\tthis._setDateFromField(inst, noDefault);\n\t\t}\n\t\treturn (inst ? this._getDate(inst) : null);\n\t},\n\n\t/* Handle keystrokes. */\n\t_doKeyDown: function(event) {\n\t\tvar onSelect, dateStr, sel,\n\t\t\tinst = $.datepicker._getInst(event.target),\n\t\t\thandled = true,\n\t\t\tisRTL = inst.dpDiv.is(\".ui-datepicker-rtl\");\n\n\t\tinst._keyEvent = true;\n\t\tif ($.datepicker._datepickerShowing) {\n\t\t\tswitch (event.keyCode) {\n\t\t\t\tcase 9: $.datepicker._hideDatepicker();\n\t\t\t\t\t\thandled = false;\n\t\t\t\t\t\tbreak; // hide on tab out\n\t\t\t\tcase 13: sel = $(\"td.\" + $.datepicker._dayOverClass + \":not(.\" +\n\t\t\t\t\t\t\t\t\t$.datepicker._currentClass + \")\", inst.dpDiv);\n\t\t\t\t\t\tif (sel[0]) {\n\t\t\t\t\t\t\t$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonSelect = $.datepicker._get(inst, \"onSelect\");\n\t\t\t\t\t\tif (onSelect) {\n\t\t\t\t\t\t\tdateStr = $.datepicker._formatDate(inst);\n\n\t\t\t\t\t\t\t// trigger custom callback\n\t\t\t\t\t\t\tonSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false; // don't submit the form\n\t\t\t\tcase 27: $.datepicker._hideDatepicker();\n\t\t\t\t\t\tbreak; // hide on escape\n\t\t\t\tcase 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?\n\t\t\t\t\t\t\t-$.datepicker._get(inst, \"stepBigMonths\") :\n\t\t\t\t\t\t\t-$.datepicker._get(inst, \"stepMonths\")), \"M\");\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\n\t\t\t\tcase 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?\n\t\t\t\t\t\t\t+$.datepicker._get(inst, \"stepBigMonths\") :\n\t\t\t\t\t\t\t+$.datepicker._get(inst, \"stepMonths\")), \"M\");\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\n\t\t\t\tcase 35: if (event.ctrlKey || event.metaKey) {\n\t\t\t\t\t\t\t$.datepicker._clearDate(event.target);\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // clear on ctrl or command +end\n\t\t\t\tcase 36: if (event.ctrlKey || event.metaKey) {\n\t\t\t\t\t\t\t$.datepicker._gotoToday(event.target);\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // current on ctrl or command +home\n\t\t\t\tcase 37: if (event.ctrlKey || event.metaKey) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), \"D\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\t// -1 day on ctrl or command +left\n\t\t\t\t\t\tif (event.originalEvent.altKey) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, (event.ctrlKey ?\n\t\t\t\t\t\t\t\t-$.datepicker._get(inst, \"stepBigMonths\") :\n\t\t\t\t\t\t\t\t-$.datepicker._get(inst, \"stepMonths\")), \"M\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// next month/year on alt +left on Mac\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 38: if (event.ctrlKey || event.metaKey) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, -7, \"D\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // -1 week on ctrl or command +up\n\t\t\t\tcase 39: if (event.ctrlKey || event.metaKey) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), \"D\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\t// +1 day on ctrl or command +right\n\t\t\t\t\t\tif (event.originalEvent.altKey) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, (event.ctrlKey ?\n\t\t\t\t\t\t\t\t+$.datepicker._get(inst, \"stepBigMonths\") :\n\t\t\t\t\t\t\t\t+$.datepicker._get(inst, \"stepMonths\")), \"M\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// next month/year on alt +right\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 40: if (event.ctrlKey || event.metaKey) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, +7, \"D\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // +1 week on ctrl or command +down\n\t\t\t\tdefault: handled = false;\n\t\t\t}\n\t\t} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home\n\t\t\t$.datepicker._showDatepicker(this);\n\t\t} else {\n\t\t\thandled = false;\n\t\t}\n\n\t\tif (handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t},\n\n\t/* Filter entered characters - based on date format. */\n\t_doKeyPress: function(event) {\n\t\tvar chars, chr,\n\t\t\tinst = $.datepicker._getInst(event.target);\n\n\t\tif ($.datepicker._get(inst, \"constrainInput\")) {\n\t\t\tchars = $.datepicker._possibleChars($.datepicker._get(inst, \"dateFormat\"));\n\t\t\tchr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);\n\t\t\treturn event.ctrlKey || event.metaKey || (chr < \" \" || !chars || chars.indexOf(chr) > -1);\n\t\t}\n\t},\n\n\t/* Synchronise manual entry and field/alternate field. */\n\t_doKeyUp: function(event) {\n\t\tvar date,\n\t\t\tinst = $.datepicker._getInst(event.target);\n\n\t\tif (inst.input.val() !== inst.lastVal) {\n\t\t\ttry {\n\t\t\t\tdate = $.datepicker.parseDate($.datepicker._get(inst, \"dateFormat\"),\n\t\t\t\t\t(inst.input ? inst.input.val() : null),\n\t\t\t\t\t$.datepicker._getFormatConfig(inst));\n\n\t\t\t\tif (date) { // only if valid\n\t\t\t\t\t$.datepicker._setDateFromField(inst);\n\t\t\t\t\t$.datepicker._updateAlternate(inst);\n\t\t\t\t\t$.datepicker._updateDatepicker(inst);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/* Pop-up the date picker for a given input field.\n\t * If false returned from beforeShow event handler do not show.\n\t * @param  input  element - the input field attached to the date picker or\n\t *\t\t\t\t\tevent - if triggered by focus\n\t */\n\t_showDatepicker: function(input) {\n\t\tinput = input.target || input;\n\t\tif (input.nodeName.toLowerCase() !== \"input\") { // find from button/image trigger\n\t\t\tinput = $(\"input\", input.parentNode)[0];\n\t\t}\n\n\t\tif ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here\n\t\t\treturn;\n\t\t}\n\n\t\tvar inst, beforeShow, beforeShowSettings, isFixed,\n\t\t\toffset, showAnim, duration;\n\n\t\tinst = $.datepicker._getInst(input);\n\t\tif ($.datepicker._curInst && $.datepicker._curInst !== inst) {\n\t\t\t$.datepicker._curInst.dpDiv.stop(true, true);\n\t\t\tif ( inst && $.datepicker._datepickerShowing ) {\n\t\t\t\t$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );\n\t\t\t}\n\t\t}\n\n\t\tbeforeShow = $.datepicker._get(inst, \"beforeShow\");\n\t\tbeforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};\n\t\tif(beforeShowSettings === false){\n\t\t\treturn;\n\t\t}\n\t\tdatepicker_extendRemove(inst.settings, beforeShowSettings);\n\n\t\tinst.lastVal = null;\n\t\t$.datepicker._lastInput = input;\n\t\t$.datepicker._setDateFromField(inst);\n\n\t\tif ($.datepicker._inDialog) { // hide cursor\n\t\t\tinput.value = \"\";\n\t\t}\n\t\tif (!$.datepicker._pos) { // position below input\n\t\t\t$.datepicker._pos = $.datepicker._findPos(input);\n\t\t\t$.datepicker._pos[1] += input.offsetHeight; // add the height\n\t\t}\n\n\t\tisFixed = false;\n\t\t$(input).parents().each(function() {\n\t\t\tisFixed |= $(this).css(\"position\") === \"fixed\";\n\t\t\treturn !isFixed;\n\t\t});\n\n\t\toffset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};\n\t\t$.datepicker._pos = null;\n\t\t//to avoid flashes on Firefox\n\t\tinst.dpDiv.empty();\n\t\t// determine sizing offscreen\n\t\tinst.dpDiv.css({position: \"absolute\", display: \"block\", top: \"-1000px\"});\n\t\t$.datepicker._updateDatepicker(inst);\n\t\t// fix width for dynamic number of date pickers\n\t\t// and adjust position before showing\n\t\toffset = $.datepicker._checkOffset(inst, offset, isFixed);\n\t\tinst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?\n\t\t\t\"static\" : (isFixed ? \"fixed\" : \"absolute\")), display: \"none\",\n\t\t\tleft: offset.left + \"px\", top: offset.top + \"px\"});\n\n\t\tif (!inst.inline) {\n\t\t\tshowAnim = $.datepicker._get(inst, \"showAnim\");\n\t\t\tduration = $.datepicker._get(inst, \"duration\");\n\t\t\tinst.dpDiv.css( \"z-index\", datepicker_getZindex( $( input ) ) + 1 );\n\t\t\t$.datepicker._datepickerShowing = true;\n\n\t\t\tif ( $.effects && $.effects.effect[ showAnim ] ) {\n\t\t\t\tinst.dpDiv.show(showAnim, $.datepicker._get(inst, \"showOptions\"), duration);\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[showAnim || \"show\"](showAnim ? duration : null);\n\t\t\t}\n\n\t\t\tif ( $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\t\tinst.input.focus();\n\t\t\t}\n\n\t\t\t$.datepicker._curInst = inst;\n\t\t}\n\t},\n\n\t/* Generate the date picker content. */\n\t_updateDatepicker: function(inst) {\n\t\tthis.maxRows = 4; //Reset the max number of rows being displayed (see #7043)\n\t\tdatepicker_instActive = inst; // for delegate hover events\n\t\tinst.dpDiv.empty().append(this._generateHTML(inst));\n\t\tthis._attachHandlers(inst);\n\n\t\tvar origyearshtml,\n\t\t\tnumMonths = this._getNumberOfMonths(inst),\n\t\t\tcols = numMonths[1],\n\t\t\twidth = 17,\n\t\t\tactiveCell = inst.dpDiv.find( \".\" + this._dayOverClass + \" a\" );\n\n\t\tif ( activeCell.length > 0 ) {\n\t\t\tdatepicker_handleMouseover.apply( activeCell.get( 0 ) );\n\t\t}\n\n\t\tinst.dpDiv.removeClass(\"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\").width(\"\");\n\t\tif (cols > 1) {\n\t\t\tinst.dpDiv.addClass(\"ui-datepicker-multi-\" + cols).css(\"width\", (width * cols) + \"em\");\n\t\t}\n\t\tinst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? \"add\" : \"remove\") +\n\t\t\t\"Class\"](\"ui-datepicker-multi\");\n\t\tinst.dpDiv[(this._get(inst, \"isRTL\") ? \"add\" : \"remove\") +\n\t\t\t\"Class\"](\"ui-datepicker-rtl\");\n\n\t\tif (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\tinst.input.focus();\n\t\t}\n\n\t\t// deffered render of the years select (to avoid flashes on Firefox)\n\t\tif( inst.yearshtml ){\n\t\t\torigyearshtml = inst.yearshtml;\n\t\t\tsetTimeout(function(){\n\t\t\t\t//assure that inst.yearshtml didn't change.\n\t\t\t\tif( origyearshtml === inst.yearshtml && inst.yearshtml ){\n\t\t\t\t\tinst.dpDiv.find(\"select.ui-datepicker-year:first\").replaceWith(inst.yearshtml);\n\t\t\t\t}\n\t\t\t\torigyearshtml = inst.yearshtml = null;\n\t\t\t}, 0);\n\t\t}\n\t},\n\n\t// #6694 - don't focus the input if it's already focused\n\t// this breaks the change event in IE\n\t// Support: IE and jQuery <1.9\n\t_shouldFocusInput: function( inst ) {\n\t\treturn inst.input && inst.input.is( \":visible\" ) && !inst.input.is( \":disabled\" ) && !inst.input.is( \":focus\" );\n\t},\n\n\t/* Check positioning to remain on screen. */\n\t_checkOffset: function(inst, offset, isFixed) {\n\t\tvar dpWidth = inst.dpDiv.outerWidth(),\n\t\t\tdpHeight = inst.dpDiv.outerHeight(),\n\t\t\tinputWidth = inst.input ? inst.input.outerWidth() : 0,\n\t\t\tinputHeight = inst.input ? inst.input.outerHeight() : 0,\n\t\t\tviewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),\n\t\t\tviewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());\n\n\t\toffset.left -= (this._get(inst, \"isRTL\") ? (dpWidth - inputWidth) : 0);\n\t\toffset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;\n\t\toffset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;\n\n\t\t// now check if datepicker is showing outside window viewport - move to a better place if so.\n\t\toffset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?\n\t\t\tMath.abs(offset.left + dpWidth - viewWidth) : 0);\n\t\toffset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?\n\t\t\tMath.abs(dpHeight + inputHeight) : 0);\n\n\t\treturn offset;\n\t},\n\n\t/* Find an object's position on the screen. */\n\t_findPos: function(obj) {\n\t\tvar position,\n\t\t\tinst = this._getInst(obj),\n\t\t\tisRTL = this._get(inst, \"isRTL\");\n\n\t\twhile (obj && (obj.type === \"hidden\" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {\n\t\t\tobj = obj[isRTL ? \"previousSibling\" : \"nextSibling\"];\n\t\t}\n\n\t\tposition = $(obj).offset();\n\t\treturn [position.left, position.top];\n\t},\n\n\t/* Hide the date picker from view.\n\t * @param  input  element - the input field attached to the date picker\n\t */\n\t_hideDatepicker: function(input) {\n\t\tvar showAnim, duration, postProcess, onClose,\n\t\t\tinst = this._curInst;\n\n\t\tif (!inst || (input && inst !== $.data(input, \"datepicker\"))) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._datepickerShowing) {\n\t\t\tshowAnim = this._get(inst, \"showAnim\");\n\t\t\tduration = this._get(inst, \"duration\");\n\t\t\tpostProcess = function() {\n\t\t\t\t$.datepicker._tidyDialog(inst);\n\t\t\t};\n\n\t\t\t// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed\n\t\t\tif ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {\n\t\t\t\tinst.dpDiv.hide(showAnim, $.datepicker._get(inst, \"showOptions\"), duration, postProcess);\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[(showAnim === \"slideDown\" ? \"slideUp\" :\n\t\t\t\t\t(showAnim === \"fadeIn\" ? \"fadeOut\" : \"hide\"))]((showAnim ? duration : null), postProcess);\n\t\t\t}\n\n\t\t\tif (!showAnim) {\n\t\t\t\tpostProcess();\n\t\t\t}\n\t\t\tthis._datepickerShowing = false;\n\n\t\t\tonClose = this._get(inst, \"onClose\");\n\t\t\tif (onClose) {\n\t\t\t\tonClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : \"\"), inst]);\n\t\t\t}\n\n\t\t\tthis._lastInput = null;\n\t\t\tif (this._inDialog) {\n\t\t\t\tthis._dialogInput.css({ position: \"absolute\", left: \"0\", top: \"-100px\" });\n\t\t\t\tif ($.blockUI) {\n\t\t\t\t\t$.unblockUI();\n\t\t\t\t\t$(\"body\").append(this.dpDiv);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._inDialog = false;\n\t\t}\n\t},\n\n\t/* Tidy up after a dialog display. */\n\t_tidyDialog: function(inst) {\n\t\tinst.dpDiv.removeClass(this._dialogClass).unbind(\".ui-datepicker-calendar\");\n\t},\n\n\t/* Close date picker if clicked elsewhere. */\n\t_checkExternalClick: function(event) {\n\t\tif (!$.datepicker._curInst) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $target = $(event.target),\n\t\t\tinst = $.datepicker._getInst($target[0]);\n\n\t\tif ( ( ( $target[0].id !== $.datepicker._mainDivId &&\n\t\t\t\t$target.parents(\"#\" + $.datepicker._mainDivId).length === 0 &&\n\t\t\t\t!$target.hasClass($.datepicker.markerClassName) &&\n\t\t\t\t!$target.closest(\".\" + $.datepicker._triggerClass).length &&\n\t\t\t\t$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||\n\t\t\t( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {\n\t\t\t\t$.datepicker._hideDatepicker();\n\t\t}\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustDate: function(id, offset, period) {\n\t\tvar target = $(id),\n\t\t\tinst = this._getInst(target[0]);\n\n\t\tif (this._isDisabledDatepicker(target[0])) {\n\t\t\treturn;\n\t\t}\n\t\tthis._adjustInstDate(inst, offset +\n\t\t\t(period === \"M\" ? this._get(inst, \"showCurrentAtPos\") : 0), // undo positioning\n\t\t\tperiod);\n\t\tthis._updateDatepicker(inst);\n\t},\n\n\t/* Action for current link. */\n\t_gotoToday: function(id) {\n\t\tvar date,\n\t\t\ttarget = $(id),\n\t\t\tinst = this._getInst(target[0]);\n\n\t\tif (this._get(inst, \"gotoCurrent\") && inst.currentDay) {\n\t\t\tinst.selectedDay = inst.currentDay;\n\t\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth;\n\t\t\tinst.drawYear = inst.selectedYear = inst.currentYear;\n\t\t} else {\n\t\t\tdate = new Date();\n\t\t\tinst.selectedDay = date.getDate();\n\t\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\t}\n\t\tthis._notifyChange(inst);\n\t\tthis._adjustDate(target);\n\t},\n\n\t/* Action for selecting a new month/year. */\n\t_selectMonthYear: function(id, select, period) {\n\t\tvar target = $(id),\n\t\t\tinst = this._getInst(target[0]);\n\n\t\tinst[\"selected\" + (period === \"M\" ? \"Month\" : \"Year\")] =\n\t\tinst[\"draw\" + (period === \"M\" ? \"Month\" : \"Year\")] =\n\t\t\tparseInt(select.options[select.selectedIndex].value,10);\n\n\t\tthis._notifyChange(inst);\n\t\tthis._adjustDate(target);\n\t},\n\n\t/* Action for selecting a day. */\n\t_selectDay: function(id, month, year, td) {\n\t\tvar inst,\n\t\t\ttarget = $(id);\n\n\t\tif ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {\n\t\t\treturn;\n\t\t}\n\n\t\tinst = this._getInst(target[0]);\n\t\tinst.selectedDay = inst.currentDay = $(\"a\", td).html();\n\t\tinst.selectedMonth = inst.currentMonth = month;\n\t\tinst.selectedYear = inst.currentYear = year;\n\t\tthis._selectDate(id, this._formatDate(inst,\n\t\t\tinst.currentDay, inst.currentMonth, inst.currentYear));\n\t},\n\n\t/* Erase the input field and hide the date picker. */\n\t_clearDate: function(id) {\n\t\tvar target = $(id);\n\t\tthis._selectDate(target, \"\");\n\t},\n\n\t/* Update the input field with the selected date. */\n\t_selectDate: function(id, dateStr) {\n\t\tvar onSelect,\n\t\t\ttarget = $(id),\n\t\t\tinst = this._getInst(target[0]);\n\n\t\tdateStr = (dateStr != null ? dateStr : this._formatDate(inst));\n\t\tif (inst.input) {\n\t\t\tinst.input.val(dateStr);\n\t\t}\n\t\tthis._updateAlternate(inst);\n\n\t\tonSelect = this._get(inst, \"onSelect\");\n\t\tif (onSelect) {\n\t\t\tonSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback\n\t\t} else if (inst.input) {\n\t\t\tinst.input.trigger(\"change\"); // fire the change event\n\t\t}\n\n\t\tif (inst.inline){\n\t\t\tthis._updateDatepicker(inst);\n\t\t} else {\n\t\t\tthis._hideDatepicker();\n\t\t\tthis._lastInput = inst.input[0];\n\t\t\tif (typeof(inst.input[0]) !== \"object\") {\n\t\t\t\tinst.input.focus(); // restore focus\n\t\t\t}\n\t\t\tthis._lastInput = null;\n\t\t}\n\t},\n\n\t/* Update any alternate field to synchronise with the main field. */\n\t_updateAlternate: function(inst) {\n\t\tvar altFormat, date, dateStr,\n\t\t\taltField = this._get(inst, \"altField\");\n\n\t\tif (altField) { // update alternate field too\n\t\t\taltFormat = this._get(inst, \"altFormat\") || this._get(inst, \"dateFormat\");\n\t\t\tdate = this._getDate(inst);\n\t\t\tdateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));\n\t\t\t$(altField).each(function() { $(this).val(dateStr); });\n\t\t}\n\t},\n\n\t/* Set as beforeShowDay function to prevent selection of weekends.\n\t * @param  date  Date - the date to customise\n\t * @return [boolean, string] - is this date selectable?, what is its CSS class?\n\t */\n\tnoWeekends: function(date) {\n\t\tvar day = date.getDay();\n\t\treturn [(day > 0 && day < 6), \"\"];\n\t},\n\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\n\t * @param  date  Date - the date to get the week for\n\t * @return  number - the number of the week within the year that contains this date\n\t */\n\tiso8601Week: function(date) {\n\t\tvar time,\n\t\t\tcheckDate = new Date(date.getTime());\n\n\t\t// Find Thursday of this week starting on Monday\n\t\tcheckDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));\n\n\t\ttime = checkDate.getTime();\n\t\tcheckDate.setMonth(0); // Compare with Jan 1\n\t\tcheckDate.setDate(1);\n\t\treturn Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;\n\t},\n\n\t/* Parse a string value into a date object.\n\t * See formatDate below for the possible formats.\n\t *\n\t * @param  format string - the expected format of the date\n\t * @param  value string - the date in the above format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tshortYearCutoff  number - the cutoff year for determining the century (optional)\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  Date - the extracted date value or null if value is blank\n\t */\n\tparseDate: function (format, value, settings) {\n\t\tif (format == null || value == null) {\n\t\t\tthrow \"Invalid arguments\";\n\t\t}\n\n\t\tvalue = (typeof value === \"object\" ? value.toString() : value + \"\");\n\t\tif (value === \"\") {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar iFormat, dim, extra,\n\t\t\tiValue = 0,\n\t\t\tshortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,\n\t\t\tshortYearCutoff = (typeof shortYearCutoffTemp !== \"string\" ? shortYearCutoffTemp :\n\t\t\t\tnew Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),\n\t\t\tdayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,\n\t\t\tdayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,\n\t\t\tyear = -1,\n\t\t\tmonth = -1,\n\t\t\tday = -1,\n\t\t\tdoy = -1,\n\t\t\tliteral = false,\n\t\t\tdate,\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function(match) {\n\t\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n\t\t\t\tif (matches) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\t\t\t// Extract a number from the string value\n\t\t\tgetNumber = function(match) {\n\t\t\t\tvar isDoubled = lookAhead(match),\n\t\t\t\t\tsize = (match === \"@\" ? 14 : (match === \"!\" ? 20 :\n\t\t\t\t\t(match === \"y\" && isDoubled ? 4 : (match === \"o\" ? 3 : 2)))),\n\t\t\t\t\tminSize = (match === \"y\" ? size : 1),\n\t\t\t\t\tdigits = new RegExp(\"^\\\\d{\" + minSize + \",\" + size + \"}\"),\n\t\t\t\t\tnum = value.substring(iValue).match(digits);\n\t\t\t\tif (!num) {\n\t\t\t\t\tthrow \"Missing number at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue += num[0].length;\n\t\t\t\treturn parseInt(num[0], 10);\n\t\t\t},\n\t\t\t// Extract a name from the string value and convert to an index\n\t\t\tgetName = function(match, shortNames, longNames) {\n\t\t\t\tvar index = -1,\n\t\t\t\t\tnames = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {\n\t\t\t\t\t\treturn [ [k, v] ];\n\t\t\t\t\t}).sort(function (a, b) {\n\t\t\t\t\t\treturn -(a[1].length - b[1].length);\n\t\t\t\t\t});\n\n\t\t\t\t$.each(names, function (i, pair) {\n\t\t\t\t\tvar name = pair[1];\n\t\t\t\t\tif (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {\n\t\t\t\t\t\tindex = pair[0];\n\t\t\t\t\t\tiValue += name.length;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\treturn index + 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow \"Unknown name at position \" + iValue;\n\t\t\t\t}\n\t\t\t},\n\t\t\t// Confirm that a literal character matches the string value\n\t\t\tcheckLiteral = function() {\n\t\t\t\tif (value.charAt(iValue) !== format.charAt(iFormat)) {\n\t\t\t\t\tthrow \"Unexpected literal at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue++;\n\t\t\t};\n\n\t\tfor (iFormat = 0; iFormat < format.length; iFormat++) {\n\t\t\tif (literal) {\n\t\t\t\tif (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch (format.charAt(iFormat)) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\tday = getNumber(\"d\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\tgetName(\"D\", dayNamesShort, dayNames);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\tdoy = getNumber(\"o\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\tmonth = getNumber(\"m\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\tmonth = getName(\"M\", monthNamesShort, monthNames);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\tyear = getNumber(\"y\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\tdate = new Date(getNumber(\"@\"));\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\tdate = new Date((getNumber(\"!\") - this._ticksTo1970) / 10000);\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif (lookAhead(\"'\")){\n\t\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (iValue < value.length){\n\t\t\textra = value.substr(iValue);\n\t\t\tif (!/^\\s+/.test(extra)) {\n\t\t\t\tthrow \"Extra/unparsed characters found in date: \" + extra;\n\t\t\t}\n\t\t}\n\n\t\tif (year === -1) {\n\t\t\tyear = new Date().getFullYear();\n\t\t} else if (year < 100) {\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\n\t\t\t\t(year <= shortYearCutoff ? 0 : -100);\n\t\t}\n\n\t\tif (doy > -1) {\n\t\t\tmonth = 1;\n\t\t\tday = doy;\n\t\t\tdo {\n\t\t\t\tdim = this._getDaysInMonth(year, month - 1);\n\t\t\t\tif (day <= dim) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmonth++;\n\t\t\t\tday -= dim;\n\t\t\t} while (true);\n\t\t}\n\n\t\tdate = this._daylightSavingAdjust(new Date(year, month - 1, day));\n\t\tif (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\n\t\t\tthrow \"Invalid date\"; // E.g. 31/02/00\n\t\t}\n\t\treturn date;\n\t},\n\n\t/* Standard date formats. */\n\tATOM: \"yy-mm-dd\", // RFC 3339 (ISO 8601)\n\tCOOKIE: \"D, dd M yy\",\n\tISO_8601: \"yy-mm-dd\",\n\tRFC_822: \"D, d M y\",\n\tRFC_850: \"DD, dd-M-y\",\n\tRFC_1036: \"D, d M y\",\n\tRFC_1123: \"D, d M yy\",\n\tRFC_2822: \"D, d M yy\",\n\tRSS: \"D, d M y\", // RFC 822\n\tTICKS: \"!\",\n\tTIMESTAMP: \"@\",\n\tW3C: \"yy-mm-dd\", // ISO 8601\n\n\t_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +\n\t\tMath.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),\n\n\t/* Format a date object into a string value.\n\t * The format can be combinations of the following:\n\t * d  - day of month (no leading zero)\n\t * dd - day of month (two digit)\n\t * o  - day of year (no leading zeros)\n\t * oo - day of year (three digit)\n\t * D  - day name short\n\t * DD - day name long\n\t * m  - month of year (no leading zero)\n\t * mm - month of year (two digit)\n\t * M  - month name short\n\t * MM - month name long\n\t * y  - year (two digit)\n\t * yy - year (four digit)\n\t * @ - Unix timestamp (ms since 01/01/1970)\n\t * ! - Windows ticks (100ns since 01/01/0001)\n\t * \"...\" - literal text\n\t * '' - single quote\n\t *\n\t * @param  format string - the desired format of the date\n\t * @param  date Date - the date value to format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  string - the date in the above format\n\t */\n\tformatDate: function (format, date, settings) {\n\t\tif (!date) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tvar iFormat,\n\t\t\tdayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,\n\t\t\tdayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function(match) {\n\t\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n\t\t\t\tif (matches) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\t\t\t// Format a number, with leading zero if necessary\n\t\t\tformatNumber = function(match, value, len) {\n\t\t\t\tvar num = \"\" + value;\n\t\t\t\tif (lookAhead(match)) {\n\t\t\t\t\twhile (num.length < len) {\n\t\t\t\t\t\tnum = \"0\" + num;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn num;\n\t\t\t},\n\t\t\t// Format a name, short or long as requested\n\t\t\tformatName = function(match, value, shortNames, longNames) {\n\t\t\t\treturn (lookAhead(match) ? longNames[value] : shortNames[value]);\n\t\t\t},\n\t\t\toutput = \"\",\n\t\t\tliteral = false;\n\n\t\tif (date) {\n\t\t\tfor (iFormat = 0; iFormat < format.length; iFormat++) {\n\t\t\t\tif (literal) {\n\t\t\t\t\tif (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n\t\t\t\t\t\tliteral = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += format.charAt(iFormat);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch (format.charAt(iFormat)) {\n\t\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\t\toutput += formatNumber(\"d\", date.getDate(), 2);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\t\toutput += formatName(\"D\", date.getDay(), dayNamesShort, dayNames);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\t\toutput += formatNumber(\"o\",\n\t\t\t\t\t\t\t\tMath.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\t\toutput += formatNumber(\"m\", date.getMonth() + 1, 2);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\t\toutput += formatName(\"M\", date.getMonth(), monthNamesShort, monthNames);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\t\toutput += (lookAhead(\"y\") ? date.getFullYear() :\n\t\t\t\t\t\t\t\t(date.getYear() % 100 < 10 ? \"0\" : \"\") + date.getYear() % 100);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\t\toutput += date.getTime();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\t\toutput += date.getTime() * 10000 + this._ticksTo1970;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\t\tif (lookAhead(\"'\")) {\n\t\t\t\t\t\t\t\toutput += \"'\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\toutput += format.charAt(iFormat);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t},\n\n\t/* Extract all possible characters from the date format. */\n\t_possibleChars: function (format) {\n\t\tvar iFormat,\n\t\t\tchars = \"\",\n\t\t\tliteral = false,\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function(match) {\n\t\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n\t\t\t\tif (matches) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t};\n\n\t\tfor (iFormat = 0; iFormat < format.length; iFormat++) {\n\t\t\tif (literal) {\n\t\t\t\tif (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tchars += format.charAt(iFormat);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch (format.charAt(iFormat)) {\n\t\t\t\t\tcase \"d\": case \"m\": case \"y\": case \"@\":\n\t\t\t\t\t\tchars += \"0123456789\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\": case \"M\":\n\t\t\t\t\t\treturn null; // Accept anything\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif (lookAhead(\"'\")) {\n\t\t\t\t\t\t\tchars += \"'\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tchars += format.charAt(iFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chars;\n\t},\n\n\t/* Get a setting value, defaulting if necessary. */\n\t_get: function(inst, name) {\n\t\treturn inst.settings[name] !== undefined ?\n\t\t\tinst.settings[name] : this._defaults[name];\n\t},\n\n\t/* Parse existing date and initialise date picker. */\n\t_setDateFromField: function(inst, noDefault) {\n\t\tif (inst.input.val() === inst.lastVal) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dateFormat = this._get(inst, \"dateFormat\"),\n\t\t\tdates = inst.lastVal = inst.input ? inst.input.val() : null,\n\t\t\tdefaultDate = this._getDefaultDate(inst),\n\t\t\tdate = defaultDate,\n\t\t\tsettings = this._getFormatConfig(inst);\n\n\t\ttry {\n\t\t\tdate = this.parseDate(dateFormat, dates, settings) || defaultDate;\n\t\t} catch (event) {\n\t\t\tdates = (noDefault ? \"\" : dates);\n\t\t}\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tinst.currentDay = (dates ? date.getDate() : 0);\n\t\tinst.currentMonth = (dates ? date.getMonth() : 0);\n\t\tinst.currentYear = (dates ? date.getFullYear() : 0);\n\t\tthis._adjustInstDate(inst);\n\t},\n\n\t/* Retrieve the default date shown on opening. */\n\t_getDefaultDate: function(inst) {\n\t\treturn this._restrictMinMax(inst,\n\t\t\tthis._determineDate(inst, this._get(inst, \"defaultDate\"), new Date()));\n\t},\n\n\t/* A date may be specified as an exact value or a relative one. */\n\t_determineDate: function(inst, date, defaultDate) {\n\t\tvar offsetNumeric = function(offset) {\n\t\t\t\tvar date = new Date();\n\t\t\t\tdate.setDate(date.getDate() + offset);\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\toffsetString = function(offset) {\n\t\t\t\ttry {\n\t\t\t\t\treturn $.datepicker.parseDate($.datepicker._get(inst, \"dateFormat\"),\n\t\t\t\t\t\toffset, $.datepicker._getFormatConfig(inst));\n\t\t\t\t}\n\t\t\t\tcatch (e) {\n\t\t\t\t\t// Ignore\n\t\t\t\t}\n\n\t\t\t\tvar date = (offset.toLowerCase().match(/^c/) ?\n\t\t\t\t\t$.datepicker._getDate(inst) : null) || new Date(),\n\t\t\t\t\tyear = date.getFullYear(),\n\t\t\t\t\tmonth = date.getMonth(),\n\t\t\t\t\tday = date.getDate(),\n\t\t\t\t\tpattern = /([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,\n\t\t\t\t\tmatches = pattern.exec(offset);\n\n\t\t\t\twhile (matches) {\n\t\t\t\t\tswitch (matches[2] || \"d\") {\n\t\t\t\t\t\tcase \"d\" : case \"D\" :\n\t\t\t\t\t\t\tday += parseInt(matches[1],10); break;\n\t\t\t\t\t\tcase \"w\" : case \"W\" :\n\t\t\t\t\t\t\tday += parseInt(matches[1],10) * 7; break;\n\t\t\t\t\t\tcase \"m\" : case \"M\" :\n\t\t\t\t\t\t\tmonth += parseInt(matches[1],10);\n\t\t\t\t\t\t\tday = Math.min(day, $.datepicker._getDaysInMonth(year, month));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\": case \"Y\" :\n\t\t\t\t\t\t\tyear += parseInt(matches[1],10);\n\t\t\t\t\t\t\tday = Math.min(day, $.datepicker._getDaysInMonth(year, month));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec(offset);\n\t\t\t\t}\n\t\t\t\treturn new Date(year, month, day);\n\t\t\t},\n\t\t\tnewDate = (date == null || date === \"\" ? defaultDate : (typeof date === \"string\" ? offsetString(date) :\n\t\t\t\t(typeof date === \"number\" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));\n\n\t\tnewDate = (newDate && newDate.toString() === \"Invalid Date\" ? defaultDate : newDate);\n\t\tif (newDate) {\n\t\t\tnewDate.setHours(0);\n\t\t\tnewDate.setMinutes(0);\n\t\t\tnewDate.setSeconds(0);\n\t\t\tnewDate.setMilliseconds(0);\n\t\t}\n\t\treturn this._daylightSavingAdjust(newDate);\n\t},\n\n\t/* Handle switch to/from daylight saving.\n\t * Hours may be non-zero on daylight saving cut-over:\n\t * > 12 when midnight changeover, but then cannot generate\n\t * midnight datetime, so jump to 1AM, otherwise reset.\n\t * @param  date  (Date) the date to check\n\t * @return  (Date) the corrected date\n\t */\n\t_daylightSavingAdjust: function(date) {\n\t\tif (!date) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\n\t\treturn date;\n\t},\n\n\t/* Set the date(s) directly. */\n\t_setDate: function(inst, date, noChange) {\n\t\tvar clear = !date,\n\t\t\torigMonth = inst.selectedMonth,\n\t\t\torigYear = inst.selectedYear,\n\t\t\tnewDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));\n\n\t\tinst.selectedDay = inst.currentDay = newDate.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();\n\t\tinst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();\n\t\tif ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {\n\t\t\tthis._notifyChange(inst);\n\t\t}\n\t\tthis._adjustInstDate(inst);\n\t\tif (inst.input) {\n\t\t\tinst.input.val(clear ? \"\" : this._formatDate(inst));\n\t\t}\n\t},\n\n\t/* Retrieve the date(s) directly. */\n\t_getDate: function(inst) {\n\t\tvar startDate = (!inst.currentYear || (inst.input && inst.input.val() === \"\") ? null :\n\t\t\tthis._daylightSavingAdjust(new Date(\n\t\t\tinst.currentYear, inst.currentMonth, inst.currentDay)));\n\t\t\treturn startDate;\n\t},\n\n\t/* Attach the onxxx handlers.  These are declared statically so\n\t * they work with static code transformers like Caja.\n\t */\n\t_attachHandlers: function(inst) {\n\t\tvar stepMonths = this._get(inst, \"stepMonths\"),\n\t\t\tid = \"#\" + inst.id.replace( /\\\\\\\\/g, \"\\\\\" );\n\t\tinst.dpDiv.find(\"[data-handler]\").map(function () {\n\t\t\tvar handler = {\n\t\t\t\tprev: function () {\n\t\t\t\t\t$.datepicker._adjustDate(id, -stepMonths, \"M\");\n\t\t\t\t},\n\t\t\t\tnext: function () {\n\t\t\t\t\t$.datepicker._adjustDate(id, +stepMonths, \"M\");\n\t\t\t\t},\n\t\t\t\thide: function () {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t},\n\t\t\t\ttoday: function () {\n\t\t\t\t\t$.datepicker._gotoToday(id);\n\t\t\t\t},\n\t\t\t\tselectDay: function () {\n\t\t\t\t\t$.datepicker._selectDay(id, +this.getAttribute(\"data-month\"), +this.getAttribute(\"data-year\"), this);\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectMonth: function () {\n\t\t\t\t\t$.datepicker._selectMonthYear(id, this, \"M\");\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectYear: function () {\n\t\t\t\t\t$.datepicker._selectMonthYear(id, this, \"Y\");\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\t\t\t$(this).bind(this.getAttribute(\"data-event\"), handler[this.getAttribute(\"data-handler\")]);\n\t\t});\n\t},\n\n\t/* Generate the HTML for the current state of the date picker. */\n\t_generateHTML: function(inst) {\n\t\tvar maxDraw, prevText, prev, nextText, next, currentText, gotoDate,\n\t\t\tcontrols, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,\n\t\t\tmonthNames, monthNamesShort, beforeShowDay, showOtherMonths,\n\t\t\tselectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,\n\t\t\tcornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,\n\t\t\tprintDate, dRow, tbody, daySettings, otherMonth, unselectable,\n\t\t\ttempDate = new Date(),\n\t\t\ttoday = this._daylightSavingAdjust(\n\t\t\t\tnew Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time\n\t\t\tisRTL = this._get(inst, \"isRTL\"),\n\t\t\tshowButtonPanel = this._get(inst, \"showButtonPanel\"),\n\t\t\thideIfNoPrevNext = this._get(inst, \"hideIfNoPrevNext\"),\n\t\t\tnavigationAsDateFormat = this._get(inst, \"navigationAsDateFormat\"),\n\t\t\tnumMonths = this._getNumberOfMonths(inst),\n\t\t\tshowCurrentAtPos = this._get(inst, \"showCurrentAtPos\"),\n\t\t\tstepMonths = this._get(inst, \"stepMonths\"),\n\t\t\tisMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),\n\t\t\tcurrentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :\n\t\t\t\tnew Date(inst.currentYear, inst.currentMonth, inst.currentDay))),\n\t\t\tminDate = this._getMinMaxDate(inst, \"min\"),\n\t\t\tmaxDate = this._getMinMaxDate(inst, \"max\"),\n\t\t\tdrawMonth = inst.drawMonth - showCurrentAtPos,\n\t\t\tdrawYear = inst.drawYear;\n\n\t\tif (drawMonth < 0) {\n\t\t\tdrawMonth += 12;\n\t\t\tdrawYear--;\n\t\t}\n\t\tif (maxDate) {\n\t\t\tmaxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),\n\t\t\t\tmaxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));\n\t\t\tmaxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);\n\t\t\twhile (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {\n\t\t\t\tdrawMonth--;\n\t\t\t\tif (drawMonth < 0) {\n\t\t\t\t\tdrawMonth = 11;\n\t\t\t\t\tdrawYear--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinst.drawMonth = drawMonth;\n\t\tinst.drawYear = drawYear;\n\n\t\tprevText = this._get(inst, \"prevText\");\n\t\tprevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,\n\t\t\tthis._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),\n\t\t\tthis._getFormatConfig(inst)));\n\n\t\tprev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?\n\t\t\t\"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'\" +\n\t\t\t\" title='\" + prevText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\") + \"'>\" + prevText + \"</span></a>\" :\n\t\t\t(hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='\"+ prevText +\"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\") + \"'>\" + prevText + \"</span></a>\"));\n\n\t\tnextText = this._get(inst, \"nextText\");\n\t\tnextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,\n\t\t\tthis._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),\n\t\t\tthis._getFormatConfig(inst)));\n\n\t\tnext = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?\n\t\t\t\"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'\" +\n\t\t\t\" title='\" + nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\") + \"'>\" + nextText + \"</span></a>\" :\n\t\t\t(hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='\"+ nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\") + \"'>\" + nextText + \"</span></a>\"));\n\n\t\tcurrentText = this._get(inst, \"currentText\");\n\t\tgotoDate = (this._get(inst, \"gotoCurrent\") && inst.currentDay ? currentDate : today);\n\t\tcurrentText = (!navigationAsDateFormat ? currentText :\n\t\t\tthis.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));\n\n\t\tcontrols = (!inst.inline ? \"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>\" +\n\t\t\tthis._get(inst, \"closeText\") + \"</button>\" : \"\");\n\n\t\tbuttonPanel = (showButtonPanel) ? \"<div class='ui-datepicker-buttonpane ui-widget-content'>\" + (isRTL ? controls : \"\") +\n\t\t\t(this._isInRange(inst, gotoDate) ? \"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'\" +\n\t\t\t\">\" + currentText + \"</button>\" : \"\") + (isRTL ? \"\" : controls) + \"</div>\" : \"\";\n\n\t\tfirstDay = parseInt(this._get(inst, \"firstDay\"),10);\n\t\tfirstDay = (isNaN(firstDay) ? 0 : firstDay);\n\n\t\tshowWeek = this._get(inst, \"showWeek\");\n\t\tdayNames = this._get(inst, \"dayNames\");\n\t\tdayNamesMin = this._get(inst, \"dayNamesMin\");\n\t\tmonthNames = this._get(inst, \"monthNames\");\n\t\tmonthNamesShort = this._get(inst, \"monthNamesShort\");\n\t\tbeforeShowDay = this._get(inst, \"beforeShowDay\");\n\t\tshowOtherMonths = this._get(inst, \"showOtherMonths\");\n\t\tselectOtherMonths = this._get(inst, \"selectOtherMonths\");\n\t\tdefaultDate = this._getDefaultDate(inst);\n\t\thtml = \"\";\n\t\tdow;\n\t\tfor (row = 0; row < numMonths[0]; row++) {\n\t\t\tgroup = \"\";\n\t\t\tthis.maxRows = 4;\n\t\t\tfor (col = 0; col < numMonths[1]; col++) {\n\t\t\t\tselectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));\n\t\t\t\tcornerClass = \" ui-corner-all\";\n\t\t\t\tcalender = \"\";\n\t\t\t\tif (isMultiMonth) {\n\t\t\t\t\tcalender += \"<div class='ui-datepicker-group\";\n\t\t\t\t\tif (numMonths[1] > 1) {\n\t\t\t\t\t\tswitch (col) {\n\t\t\t\t\t\t\tcase 0: calender += \" ui-datepicker-group-first\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + (isRTL ? \"right\" : \"left\"); break;\n\t\t\t\t\t\t\tcase numMonths[1]-1: calender += \" ui-datepicker-group-last\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + (isRTL ? \"left\" : \"right\"); break;\n\t\t\t\t\t\t\tdefault: calender += \" ui-datepicker-group-middle\"; cornerClass = \"\"; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcalender += \"'>\";\n\t\t\t\t}\n\t\t\t\tcalender += \"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\" + cornerClass + \"'>\" +\n\t\t\t\t\t(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : \"\") +\n\t\t\t\t\t(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : \"\") +\n\t\t\t\t\tthis._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\t\t\trow > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers\n\t\t\t\t\t\"</div><table class='ui-datepicker-calendar'><thead>\" +\n\t\t\t\t\t\"<tr>\";\n\t\t\t\tthead = (showWeek ? \"<th class='ui-datepicker-week-col'>\" + this._get(inst, \"weekHeader\") + \"</th>\" : \"\");\n\t\t\t\tfor (dow = 0; dow < 7; dow++) { // days of the week\n\t\t\t\t\tday = (dow + firstDay) % 7;\n\t\t\t\t\tthead += \"<th scope='col'\" + ((dow + firstDay + 6) % 7 >= 5 ? \" class='ui-datepicker-week-end'\" : \"\") + \">\" +\n\t\t\t\t\t\t\"<span title='\" + dayNames[day] + \"'>\" + dayNamesMin[day] + \"</span></th>\";\n\t\t\t\t}\n\t\t\t\tcalender += thead + \"</tr></thead><tbody>\";\n\t\t\t\tdaysInMonth = this._getDaysInMonth(drawYear, drawMonth);\n\t\t\t\tif (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {\n\t\t\t\t\tinst.selectedDay = Math.min(inst.selectedDay, daysInMonth);\n\t\t\t\t}\n\t\t\t\tleadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;\n\t\t\t\tcurRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate\n\t\t\t\tnumRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)\n\t\t\t\tthis.maxRows = numRows;\n\t\t\t\tprintDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));\n\t\t\t\tfor (dRow = 0; dRow < numRows; dRow++) { // create date picker rows\n\t\t\t\t\tcalender += \"<tr>\";\n\t\t\t\t\ttbody = (!showWeek ? \"\" : \"<td class='ui-datepicker-week-col'>\" +\n\t\t\t\t\t\tthis._get(inst, \"calculateWeek\")(printDate) + \"</td>\");\n\t\t\t\t\tfor (dow = 0; dow < 7; dow++) { // create date picker days\n\t\t\t\t\t\tdaySettings = (beforeShowDay ?\n\t\t\t\t\t\t\tbeforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, \"\"]);\n\t\t\t\t\t\totherMonth = (printDate.getMonth() !== drawMonth);\n\t\t\t\t\t\tunselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||\n\t\t\t\t\t\t\t(minDate && printDate < minDate) || (maxDate && printDate > maxDate);\n\t\t\t\t\t\ttbody += \"<td class='\" +\n\t\t\t\t\t\t\t((dow + firstDay + 6) % 7 >= 5 ? \" ui-datepicker-week-end\" : \"\") + // highlight weekends\n\t\t\t\t\t\t\t(otherMonth ? \" ui-datepicker-other-month\" : \"\") + // highlight days from other months\n\t\t\t\t\t\t\t((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key\n\t\t\t\t\t\t\t(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?\n\t\t\t\t\t\t\t// or defaultDate is current printedDate and defaultDate is selectedDate\n\t\t\t\t\t\t\t\" \" + this._dayOverClass : \"\") + // highlight selected day\n\t\t\t\t\t\t\t(unselectable ? \" \" + this._unselectableClass + \" ui-state-disabled\": \"\") +  // highlight unselectable days\n\t\t\t\t\t\t\t(otherMonth && !showOtherMonths ? \"\" : \" \" + daySettings[1] + // highlight custom dates\n\t\t\t\t\t\t\t(printDate.getTime() === currentDate.getTime() ? \" \" + this._currentClass : \"\") + // highlight selected day\n\t\t\t\t\t\t\t(printDate.getTime() === today.getTime() ? \" ui-datepicker-today\" : \"\")) + \"'\" + // highlight today (if different)\n\t\t\t\t\t\t\t((!otherMonth || showOtherMonths) && daySettings[2] ? \" title='\" + daySettings[2].replace(/'/g, \"&#39;\") + \"'\" : \"\") + // cell title\n\t\t\t\t\t\t\t(unselectable ? \"\" : \" data-handler='selectDay' data-event='click' data-month='\" + printDate.getMonth() + \"' data-year='\" + printDate.getFullYear() + \"'\") + \">\" + // actions\n\t\t\t\t\t\t\t(otherMonth && !showOtherMonths ? \"&#xa0;\" : // display for other months\n\t\t\t\t\t\t\t(unselectable ? \"<span class='ui-state-default'>\" + printDate.getDate() + \"</span>\" : \"<a class='ui-state-default\" +\n\t\t\t\t\t\t\t(printDate.getTime() === today.getTime() ? \" ui-state-highlight\" : \"\") +\n\t\t\t\t\t\t\t(printDate.getTime() === currentDate.getTime() ? \" ui-state-active\" : \"\") + // highlight selected day\n\t\t\t\t\t\t\t(otherMonth ? \" ui-priority-secondary\" : \"\") + // distinguish dates from other months\n\t\t\t\t\t\t\t\"' href='#'>\" + printDate.getDate() + \"</a>\")) + \"</td>\"; // display selectable date\n\t\t\t\t\t\tprintDate.setDate(printDate.getDate() + 1);\n\t\t\t\t\t\tprintDate = this._daylightSavingAdjust(printDate);\n\t\t\t\t\t}\n\t\t\t\t\tcalender += tbody + \"</tr>\";\n\t\t\t\t}\n\t\t\t\tdrawMonth++;\n\t\t\t\tif (drawMonth > 11) {\n\t\t\t\t\tdrawMonth = 0;\n\t\t\t\t\tdrawYear++;\n\t\t\t\t}\n\t\t\t\tcalender += \"</tbody></table>\" + (isMultiMonth ? \"</div>\" +\n\t\t\t\t\t\t\t((numMonths[0] > 0 && col === numMonths[1]-1) ? \"<div class='ui-datepicker-row-break'></div>\" : \"\") : \"\");\n\t\t\t\tgroup += calender;\n\t\t\t}\n\t\t\thtml += group;\n\t\t}\n\t\thtml += buttonPanel;\n\t\tinst._keyEvent = false;\n\t\treturn html;\n\t},\n\n\t/* Generate the month and year header. */\n\t_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\tsecondary, monthNames, monthNamesShort) {\n\n\t\tvar inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,\n\t\t\tchangeMonth = this._get(inst, \"changeMonth\"),\n\t\t\tchangeYear = this._get(inst, \"changeYear\"),\n\t\t\tshowMonthAfterYear = this._get(inst, \"showMonthAfterYear\"),\n\t\t\thtml = \"<div class='ui-datepicker-title'>\",\n\t\t\tmonthHtml = \"\";\n\n\t\t// month selection\n\t\tif (secondary || !changeMonth) {\n\t\t\tmonthHtml += \"<span class='ui-datepicker-month'>\" + monthNames[drawMonth] + \"</span>\";\n\t\t} else {\n\t\t\tinMinYear = (minDate && minDate.getFullYear() === drawYear);\n\t\t\tinMaxYear = (maxDate && maxDate.getFullYear() === drawYear);\n\t\t\tmonthHtml += \"<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>\";\n\t\t\tfor ( month = 0; month < 12; month++) {\n\t\t\t\tif ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {\n\t\t\t\t\tmonthHtml += \"<option value='\" + month + \"'\" +\n\t\t\t\t\t\t(month === drawMonth ? \" selected='selected'\" : \"\") +\n\t\t\t\t\t\t\">\" + monthNamesShort[month] + \"</option>\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tmonthHtml += \"</select>\";\n\t\t}\n\n\t\tif (!showMonthAfterYear) {\n\t\t\thtml += monthHtml + (secondary || !(changeMonth && changeYear) ? \"&#xa0;\" : \"\");\n\t\t}\n\n\t\t// year selection\n\t\tif ( !inst.yearshtml ) {\n\t\t\tinst.yearshtml = \"\";\n\t\t\tif (secondary || !changeYear) {\n\t\t\t\thtml += \"<span class='ui-datepicker-year'>\" + drawYear + \"</span>\";\n\t\t\t} else {\n\t\t\t\t// determine range of years to display\n\t\t\t\tyears = this._get(inst, \"yearRange\").split(\":\");\n\t\t\t\tthisYear = new Date().getFullYear();\n\t\t\t\tdetermineYear = function(value) {\n\t\t\t\t\tvar year = (value.match(/c[+\\-].*/) ? drawYear + parseInt(value.substring(1), 10) :\n\t\t\t\t\t\t(value.match(/[+\\-].*/) ? thisYear + parseInt(value, 10) :\n\t\t\t\t\t\tparseInt(value, 10)));\n\t\t\t\t\treturn (isNaN(year) ? thisYear : year);\n\t\t\t\t};\n\t\t\t\tyear = determineYear(years[0]);\n\t\t\t\tendYear = Math.max(year, determineYear(years[1] || \"\"));\n\t\t\t\tyear = (minDate ? Math.max(year, minDate.getFullYear()) : year);\n\t\t\t\tendYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);\n\t\t\t\tinst.yearshtml += \"<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>\";\n\t\t\t\tfor (; year <= endYear; year++) {\n\t\t\t\t\tinst.yearshtml += \"<option value='\" + year + \"'\" +\n\t\t\t\t\t\t(year === drawYear ? \" selected='selected'\" : \"\") +\n\t\t\t\t\t\t\">\" + year + \"</option>\";\n\t\t\t\t}\n\t\t\t\tinst.yearshtml += \"</select>\";\n\n\t\t\t\thtml += inst.yearshtml;\n\t\t\t\tinst.yearshtml = null;\n\t\t\t}\n\t\t}\n\n\t\thtml += this._get(inst, \"yearSuffix\");\n\t\tif (showMonthAfterYear) {\n\t\t\thtml += (secondary || !(changeMonth && changeYear) ? \"&#xa0;\" : \"\") + monthHtml;\n\t\t}\n\t\thtml += \"</div>\"; // Close datepicker_header\n\t\treturn html;\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustInstDate: function(inst, offset, period) {\n\t\tvar year = inst.drawYear + (period === \"Y\" ? offset : 0),\n\t\t\tmonth = inst.drawMonth + (period === \"M\" ? offset : 0),\n\t\t\tday = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === \"D\" ? offset : 0),\n\t\t\tdate = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));\n\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tif (period === \"M\" || period === \"Y\") {\n\t\t\tthis._notifyChange(inst);\n\t\t}\n\t},\n\n\t/* Ensure a date is within any min/max bounds. */\n\t_restrictMinMax: function(inst, date) {\n\t\tvar minDate = this._getMinMaxDate(inst, \"min\"),\n\t\t\tmaxDate = this._getMinMaxDate(inst, \"max\"),\n\t\t\tnewDate = (minDate && date < minDate ? minDate : date);\n\t\treturn (maxDate && newDate > maxDate ? maxDate : newDate);\n\t},\n\n\t/* Notify change of month/year. */\n\t_notifyChange: function(inst) {\n\t\tvar onChange = this._get(inst, \"onChangeMonthYear\");\n\t\tif (onChange) {\n\t\t\tonChange.apply((inst.input ? inst.input[0] : null),\n\t\t\t\t[inst.selectedYear, inst.selectedMonth + 1, inst]);\n\t\t}\n\t},\n\n\t/* Determine the number of months to show. */\n\t_getNumberOfMonths: function(inst) {\n\t\tvar numMonths = this._get(inst, \"numberOfMonths\");\n\t\treturn (numMonths == null ? [1, 1] : (typeof numMonths === \"number\" ? [1, numMonths] : numMonths));\n\t},\n\n\t/* Determine the current maximum date - ensure no time components are set. */\n\t_getMinMaxDate: function(inst, minMax) {\n\t\treturn this._determineDate(inst, this._get(inst, minMax + \"Date\"), null);\n\t},\n\n\t/* Find the number of days in a given month. */\n\t_getDaysInMonth: function(year, month) {\n\t\treturn 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();\n\t},\n\n\t/* Find the day of the week of the first of a month. */\n\t_getFirstDayOfMonth: function(year, month) {\n\t\treturn new Date(year, month, 1).getDay();\n\t},\n\n\t/* Determines if we should allow a \"next/prev\" month display change. */\n\t_canAdjustMonth: function(inst, offset, curYear, curMonth) {\n\t\tvar numMonths = this._getNumberOfMonths(inst),\n\t\t\tdate = this._daylightSavingAdjust(new Date(curYear,\n\t\t\tcurMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));\n\n\t\tif (offset < 0) {\n\t\t\tdate.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));\n\t\t}\n\t\treturn this._isInRange(inst, date);\n\t},\n\n\t/* Is the given date in the accepted range? */\n\t_isInRange: function(inst, date) {\n\t\tvar yearSplit, currentYear,\n\t\t\tminDate = this._getMinMaxDate(inst, \"min\"),\n\t\t\tmaxDate = this._getMinMaxDate(inst, \"max\"),\n\t\t\tminYear = null,\n\t\t\tmaxYear = null,\n\t\t\tyears = this._get(inst, \"yearRange\");\n\t\t\tif (years){\n\t\t\t\tyearSplit = years.split(\":\");\n\t\t\t\tcurrentYear = new Date().getFullYear();\n\t\t\t\tminYear = parseInt(yearSplit[0], 10);\n\t\t\t\tmaxYear = parseInt(yearSplit[1], 10);\n\t\t\t\tif ( yearSplit[0].match(/[+\\-].*/) ) {\n\t\t\t\t\tminYear += currentYear;\n\t\t\t\t}\n\t\t\t\tif ( yearSplit[1].match(/[+\\-].*/) ) {\n\t\t\t\t\tmaxYear += currentYear;\n\t\t\t\t}\n\t\t\t}\n\n\t\treturn ((!minDate || date.getTime() >= minDate.getTime()) &&\n\t\t\t(!maxDate || date.getTime() <= maxDate.getTime()) &&\n\t\t\t(!minYear || date.getFullYear() >= minYear) &&\n\t\t\t(!maxYear || date.getFullYear() <= maxYear));\n\t},\n\n\t/* Provide the configuration settings for formatting/parsing. */\n\t_getFormatConfig: function(inst) {\n\t\tvar shortYearCutoff = this._get(inst, \"shortYearCutoff\");\n\t\tshortYearCutoff = (typeof shortYearCutoff !== \"string\" ? shortYearCutoff :\n\t\t\tnew Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));\n\t\treturn {shortYearCutoff: shortYearCutoff,\n\t\t\tdayNamesShort: this._get(inst, \"dayNamesShort\"), dayNames: this._get(inst, \"dayNames\"),\n\t\t\tmonthNamesShort: this._get(inst, \"monthNamesShort\"), monthNames: this._get(inst, \"monthNames\")};\n\t},\n\n\t/* Format the given date for display. */\n\t_formatDate: function(inst, day, month, year) {\n\t\tif (!day) {\n\t\t\tinst.currentDay = inst.selectedDay;\n\t\t\tinst.currentMonth = inst.selectedMonth;\n\t\t\tinst.currentYear = inst.selectedYear;\n\t\t}\n\t\tvar date = (day ? (typeof day === \"object\" ? day :\n\t\t\tthis._daylightSavingAdjust(new Date(year, month, day))) :\n\t\t\tthis._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));\n\t\treturn this.formatDate(this._get(inst, \"dateFormat\"), date, this._getFormatConfig(inst));\n\t}\n});\n\n/*\n * Bind hover events for datepicker elements.\n * Done via delegate so the binding only occurs once in the lifetime of the parent div.\n * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.\n */\nfunction datepicker_bindHover(dpDiv) {\n\tvar selector = \"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";\n\treturn dpDiv.delegate(selector, \"mouseout\", function() {\n\t\t\t$(this).removeClass(\"ui-state-hover\");\n\t\t\tif (this.className.indexOf(\"ui-datepicker-prev\") !== -1) {\n\t\t\t\t$(this).removeClass(\"ui-datepicker-prev-hover\");\n\t\t\t}\n\t\t\tif (this.className.indexOf(\"ui-datepicker-next\") !== -1) {\n\t\t\t\t$(this).removeClass(\"ui-datepicker-next-hover\");\n\t\t\t}\n\t\t})\n\t\t.delegate( selector, \"mouseover\", datepicker_handleMouseover );\n}\n\nfunction datepicker_handleMouseover() {\n\tif (!$.datepicker._isDisabledDatepicker( datepicker_instActive.inline? datepicker_instActive.dpDiv.parent()[0] : datepicker_instActive.input[0])) {\n\t\t$(this).parents(\".ui-datepicker-calendar\").find(\"a\").removeClass(\"ui-state-hover\");\n\t\t$(this).addClass(\"ui-state-hover\");\n\t\tif (this.className.indexOf(\"ui-datepicker-prev\") !== -1) {\n\t\t\t$(this).addClass(\"ui-datepicker-prev-hover\");\n\t\t}\n\t\tif (this.className.indexOf(\"ui-datepicker-next\") !== -1) {\n\t\t\t$(this).addClass(\"ui-datepicker-next-hover\");\n\t\t}\n\t}\n}\n\n/* jQuery extend now ignores nulls! */\nfunction datepicker_extendRemove(target, props) {\n\t$.extend(target, props);\n\tfor (var name in props) {\n\t\tif (props[name] == null) {\n\t\t\ttarget[name] = props[name];\n\t\t}\n\t}\n\treturn target;\n}\n\n/* Invoke the datepicker functionality.\n   @param  options  string - a command, optionally followed by additional parameters or\n\t\t\t\t\tObject - settings for attaching new datepicker functionality\n   @return  jQuery object */\n$.fn.datepicker = function(options){\n\n\t/* Verify an empty collection wasn't passed - Fixes #6976 */\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\n\t/* Initialise the date picker. */\n\tif (!$.datepicker.initialized) {\n\t\t$(document).mousedown($.datepicker._checkExternalClick);\n\t\t$.datepicker.initialized = true;\n\t}\n\n\t/* Append datepicker main container to body if not exist. */\n\tif ($(\"#\"+$.datepicker._mainDivId).length === 0) {\n\t\t$(\"body\").append($.datepicker.dpDiv);\n\t}\n\n\tvar otherArgs = Array.prototype.slice.call(arguments, 1);\n\tif (typeof options === \"string\" && (options === \"isDisabled\" || options === \"getDate\" || options === \"widget\")) {\n\t\treturn $.datepicker[\"_\" + options + \"Datepicker\"].\n\t\t\tapply($.datepicker, [this[0]].concat(otherArgs));\n\t}\n\tif (options === \"option\" && arguments.length === 2 && typeof arguments[1] === \"string\") {\n\t\treturn $.datepicker[\"_\" + options + \"Datepicker\"].\n\t\t\tapply($.datepicker, [this[0]].concat(otherArgs));\n\t}\n\treturn this.each(function() {\n\t\ttypeof options === \"string\" ?\n\t\t\t$.datepicker[\"_\" + options + \"Datepicker\"].\n\t\t\t\tapply($.datepicker, [this].concat(otherArgs)) :\n\t\t\t$.datepicker._attachDatepicker(this, options);\n\t});\n};\n\n$.datepicker = new Datepicker(); // singleton instance\n$.datepicker.initialized = false;\n$.datepicker.uuid = new Date().getTime();\n$.datepicker.version = \"1.11.4\";\n\nvar datepicker = $.datepicker;\n\n\n/*!\n * jQuery UI Draggable 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/draggable/\n */\n\n\n$.widget(\"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.11.4\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif (this.options.addClasses){\n\t\t\tthis.element.addClass(\"ui-draggable\");\n\t\t}\n\t\tif (this.options.disabled){\n\t\t\tthis.element.addClass(\"ui-draggable-disabled\");\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis.element.removeClass( \"ui-draggable ui-draggable-dragging ui-draggable-disabled\" );\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function(event) {\n\t\tvar o = this.options;\n\n\t\tthis._blurActiveElement( event );\n\n\t\t// among others, prevent a drag on a resizable-handle\n\t\tif (this.helper || o.disabled || $(event.target).closest(\".ui-resizable-handle\").length > 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle(event);\n\t\tif (!this.handle) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map(function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t});\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar document = this.document[ 0 ];\n\n\t\t// Only need to blur if the event occurred on the draggable itself, see #10527\n\t\tif ( !this.handleElement.is( event.target ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// support: IE9\n\t\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n\t\ttry {\n\n\t\t\t// Support: IE9, IE10\n\t\t\t// If the <body> is blurred, IE will switch windows, see #9520\n\t\t\tif ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== \"body\" ) {\n\n\t\t\t\t// Blur any element that currently has focus, see #4261\n\t\t\t\t$( document.activeElement ).blur();\n\t\t\t}\n\t\t} catch ( error ) {}\n\t},\n\n\t_mouseStart: function(event) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper(event);\n\n\t\tthis.helper.addClass(\"ui-draggable-dragging\");\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ($.ui.ddmanager) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter(function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t}).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif (this._trigger(\"start\", event) === false) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ($.ui.ddmanager && !o.dropBehaviour) {\n\t\t\t$.ui.ddmanager.prepareOffsets(this, event);\n\t\t}\n\n\t\t// Reset helper's right/bottom css if they're set and set explicit width/height instead\n\t\t// as this prevents resizing of elements with right/bottom set (see #7772)\n\t\tthis._normalizeRightBottom();\n\n\t\tthis._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position\n\n\t\t//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart(this, event);\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function(event, noPropagation) {\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif (!noPropagation) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif (this._trigger(\"drag\", event, ui) === false) {\n\t\t\t\tthis._mouseUp({});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ($.ui.ddmanager) {\n\t\t\t$.ui.ddmanager.drag(this, event);\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function(event) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ($.ui.ddmanager && !this.options.dropBehaviour) {\n\t\t\tdropped = $.ui.ddmanager.drop(this, event);\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif (this.dropped) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ((this.options.revert === \"invalid\" && !dropped) || (this.options.revert === \"valid\" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {\n\t\t\t$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {\n\t\t\t\tif (that._trigger(\"stop\", event) !== false) {\n\t\t\t\t\tthat._clear();\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif (this._trigger(\"stop\", event) !== false) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop(this, event);\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\t\t\t// The interaction is over; whether or not the click resulted in a drag, focus the element\n\t\t\tthis.element.focus();\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call(this, event);\n\t},\n\n\tcancel: function() {\n\n\t\tif (this.helper.is(\".ui-draggable-dragging\")) {\n\t\t\tthis._mouseUp({});\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function(event) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis.handleElement.addClass( \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis.handleElement.removeClass( \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function(event) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = $.isFunction( o.helper ),\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif (!helper.parents(\"body\").length) {\n\t\t\thelper.appendTo((o.appendTo === \"parent\" ? this.element[0].parentNode : o.appendTo));\n\t\t}\n\n\t\t// http://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif (helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css(\"position\"))) {\n\t\t\thelper.css(\"position\", \"absolute\");\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function(obj) {\n\t\tif (typeof obj === \"string\") {\n\t\t\tobj = obj.split(\" \");\n\t\t}\n\t\tif ($.isArray(obj)) {\n\t\t\tobj = { left: +obj[0], top: +obj[1] || 0 };\n\t\t}\n\t\tif (\"left\" in obj) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif (\"right\" in obj) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif (\"top\" in obj) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif (\"bottom\" in obj) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that\n\t\t//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag\n\t\tif (this.cssPosition === \"absolute\" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + (parseInt(this.offsetParent.css(\"borderTopWidth\"), 10) || 0),\n\t\t\tleft: po.left + (parseInt(this.offsetParent.css(\"borderLeftWidth\"), 10) || 0)\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt(this.helper.css( \"top\" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt(this.helper.css( \"left\" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: (parseInt(this.element.css(\"marginLeft\"), 10) || 0),\n\t\t\ttop: (parseInt(this.element.css(\"marginTop\"), 10) || 0),\n\t\t\tright: (parseInt(this.element.css(\"marginRight\"), 10) || 0),\n\t\t\tbottom: (parseInt(this.element.css(\"marginBottom\"), 10) || 0)\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\") {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) + ( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) + ( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function(d, pos) {\n\n\t\tif (!pos) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\t\t\t\tpos.top\t+\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.relative.top * mod +\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.top * mod -\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod)\n\t\t\t),\n\t\t\tleft: (\n\t\t\t\tpos.left +\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.relative.left * mod +\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.left * mod\t-\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod)\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ){\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif (event.pageX - this.offset.click.left < containment[0]) {\n\t\t\t\t\tpageX = containment[0] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif (event.pageY - this.offset.click.top < containment[1]) {\n\t\t\t\t\tpageY = containment[1] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif (event.pageX - this.offset.click.left > containment[2]) {\n\t\t\t\t\tpageX = containment[2] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif (event.pageY - this.offset.click.top > containment[3]) {\n\t\t\t\t\tpageY = containment[3] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (o.grid) {\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;\n\t\t\t\tpageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;\n\n\t\t\t\tleft = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;\n\t\t\t\tpageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\t\t\t\tpageY -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.click.top\t-\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.relative.top -\t\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.top +\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( this.cssPosition === \"fixed\" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\t\t\t\tpageX -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.click.left -\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.relative.left -\t\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.left +\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( this.cssPosition === \"fixed\" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis.helper.removeClass(\"ui-draggable-dragging\");\n\t\tif (this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t_normalizeRightBottom: function() {\n\t\tif ( this.options.axis !== \"y\" && this.helper.css( \"right\" ) !== \"auto\" ) {\n\t\t\tthis.helper.width( this.helper.width() );\n\t\t\tthis.helper.css( \"right\", \"auto\" );\n\t\t}\n\t\tif ( this.options.axis !== \"x\" && this.helper.css( \"bottom\" ) !== \"auto\" ) {\n\t\t\tthis.helper.height( this.helper.height() );\n\t\t\tthis.helper.css( \"bottom\", \"auto\" );\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n});\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t});\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each(function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// refreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger(\"activate\", event, uiSortable);\n\t\t\t}\n\t\t});\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t});\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop(event);\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t});\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t});\n\n\t\t\t\t\t// hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif (t.css(\"cursor\")) {\n\t\t\to._cursor = t.css(\"cursor\");\n\t\t}\n\t\tt.css(\"cursor\", o.cursor);\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif (o._cursor) {\n\t\t\t$(\"body\").css(\"cursor\", o._cursor);\n\t\t}\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif (t.css(\"opacity\")) {\n\t\t\to._opacity = t.css(\"opacity\");\n\t\t}\n\t\tt.css(\"opacity\", o.opacity);\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif (o._opacity) {\n\t\t\t$(ui.helper).css(\"opacity\", o._opacity);\n\t\t}\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] && i.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i  ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif (!o.axis || o.axis !== \"x\") {\n\t\t\t\tif (event.pageY - $(document).scrollTop() < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);\n\t\t\t\t} else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!o.axis || o.axis !== \"y\") {\n\t\t\t\tif (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);\n\t\t\t\t} else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {\n\t\t\t$.ui.ddmanager.prepareOffsets(i, event);\n\t\t}\n\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$(o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap).each(function() {\n\t\t\tvar $t = $(this),\n\t\t\t\t$o = $t.offset();\n\t\t\tif (this !== i.element[0]) {\n\t\t\t\ti.snapElements.push({\n\t\t\t\t\titem: this,\n\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor (i = inst.snapElements.length - 1; i >= 0; i--){\n\n\t\t\tl = inst.snapElements[i].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[i].width;\n\t\t\tt = inst.snapElements[i].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[i].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {\n\t\t\t\tif (inst.snapElements[i].snapping) {\n\t\t\t\t\t(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));\n\t\t\t\t}\n\t\t\t\tinst.snapElements[i].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (o.snapMode !== \"inner\") {\n\t\t\t\tts = Math.abs(t - y2) <= d;\n\t\t\t\tbs = Math.abs(b - y1) <= d;\n\t\t\t\tls = Math.abs(l - x2) <= d;\n\t\t\t\trs = Math.abs(r - x1) <= d;\n\t\t\t\tif (ts) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo(\"relative\", { top: t - inst.helperProportions.height, left: 0 }).top;\n\t\t\t\t}\n\t\t\t\tif (bs) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo(\"relative\", { top: b, left: 0 }).top;\n\t\t\t\t}\n\t\t\t\tif (ls) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: l - inst.helperProportions.width }).left;\n\t\t\t\t}\n\t\t\t\tif (rs) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: r }).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = (ts || bs || ls || rs);\n\n\t\t\tif (o.snapMode !== \"outer\") {\n\t\t\t\tts = Math.abs(t - y1) <= d;\n\t\t\t\tbs = Math.abs(b - y2) <= d;\n\t\t\t\tls = Math.abs(l - x1) <= d;\n\t\t\t\trs = Math.abs(r - x2) <= d;\n\t\t\t\tif (ts) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo(\"relative\", { top: t, left: 0 }).top;\n\t\t\t\t}\n\t\t\t\tif (bs) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo(\"relative\", { top: b - inst.helperProportions.height, left: 0 }).top;\n\t\t\t\t}\n\t\t\t\tif (ls) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: l }).left;\n\t\t\t\t}\n\t\t\t\tif (rs) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: r - inst.helperProportions.width }).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {\n\t\t\t\t(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));\n\t\t\t}\n\t\t\tinst.snapElements[i].snapping = (ts || bs || ls || rs || first);\n\n\t\t}\n\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray($(o.stack)).sort(function(a, b) {\n\t\t\t\treturn (parseInt($(a).css(\"zIndex\"), 10) || 0) - (parseInt($(b).css(\"zIndex\"), 10) || 0);\n\t\t\t});\n\n\t\tif (!group.length) { return; }\n\n\t\tmin = parseInt($(group[0]).css(\"zIndex\"), 10) || 0;\n\t\t$(group).each(function(i) {\n\t\t\t$(this).css(\"zIndex\", min + i);\n\t\t});\n\t\tthis.css(\"zIndex\", (min + group.length));\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif (t.css(\"zIndex\")) {\n\t\t\to._zIndex = t.css(\"zIndex\");\n\t\t}\n\t\tt.css(\"zIndex\", o.zIndex);\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif (o._zIndex) {\n\t\t\t$(ui.helper).css(\"zIndex\", o._zIndex);\n\t\t}\n\t}\n});\n\nvar draggable = $.ui.draggable;\n\n\n/*!\n * jQuery UI Resizable 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/resizable/\n */\n\n\n$.widget(\"ui.resizable\", $.ui.mouse, {\n\tversion: \"1.11.4\",\n\twidgetEventPrefix: \"resize\",\n\toptions: {\n\t\talsoResize: false,\n\t\tanimate: false,\n\t\tanimateDuration: \"slow\",\n\t\tanimateEasing: \"swing\",\n\t\taspectRatio: false,\n\t\tautoHide: false,\n\t\tcontainment: false,\n\t\tghost: false,\n\t\tgrid: false,\n\t\thandles: \"e,s,se\",\n\t\thelper: false,\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 10,\n\t\tminWidth: 10,\n\t\t// See #7960\n\t\tzIndex: 90,\n\n\t\t// callbacks\n\t\tresize: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_num: function( value ) {\n\t\treturn parseInt( value, 10 ) || 0;\n\t},\n\n\t_isNumber: function( value ) {\n\t\treturn !isNaN( parseInt( value, 10 ) );\n\t},\n\n\t_hasScroll: function( el, a ) {\n\n\t\tif ( $( el ).css( \"overflow\" ) === \"hidden\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar scroll = ( a && a === \"left\" ) ? \"scrollLeft\" : \"scrollTop\",\n\t\t\thas = false;\n\n\t\tif ( el[ scroll ] > 0 ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: determine which cases actually cause this to happen\n\t\t// if the element doesn't have the scroll set, see if it's possible to\n\t\t// set the scroll\n\t\tel[ scroll ] = 1;\n\t\thas = ( el[ scroll ] > 0 );\n\t\tel[ scroll ] = 0;\n\t\treturn has;\n\t},\n\n\t_create: function() {\n\n\t\tvar n, i, handle, axis, hname,\n\t\t\tthat = this,\n\t\t\to = this.options;\n\t\tthis.element.addClass(\"ui-resizable\");\n\n\t\t$.extend(this, {\n\t\t\t_aspectRatio: !!(o.aspectRatio),\n\t\t\taspectRatio: o.aspectRatio,\n\t\t\toriginalElement: this.element,\n\t\t\t_proportionallyResizeElements: [],\n\t\t\t_helper: o.helper || o.ghost || o.animate ? o.helper || \"ui-resizable-helper\" : null\n\t\t});\n\n\t\t// Wrap the element if it cannot hold child nodes\n\t\tif (this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)) {\n\n\t\t\tthis.element.wrap(\n\t\t\t\t$(\"<div class='ui-wrapper' style='overflow: hidden;'></div>\").css({\n\t\t\t\t\tposition: this.element.css(\"position\"),\n\t\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\t\ttop: this.element.css(\"top\"),\n\t\t\t\t\tleft: this.element.css(\"left\")\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tthis.element = this.element.parent().data(\n\t\t\t\t\"ui-resizable\", this.element.resizable( \"instance\" )\n\t\t\t);\n\n\t\t\tthis.elementIsWrapper = true;\n\n\t\t\tthis.element.css({\n\t\t\t\tmarginLeft: this.originalElement.css(\"marginLeft\"),\n\t\t\t\tmarginTop: this.originalElement.css(\"marginTop\"),\n\t\t\t\tmarginRight: this.originalElement.css(\"marginRight\"),\n\t\t\t\tmarginBottom: this.originalElement.css(\"marginBottom\")\n\t\t\t});\n\t\t\tthis.originalElement.css({\n\t\t\t\tmarginLeft: 0,\n\t\t\t\tmarginTop: 0,\n\t\t\t\tmarginRight: 0,\n\t\t\t\tmarginBottom: 0\n\t\t\t});\n\t\t\t// support: Safari\n\t\t\t// Prevent Safari textarea resize\n\t\t\tthis.originalResizeStyle = this.originalElement.css(\"resize\");\n\t\t\tthis.originalElement.css(\"resize\", \"none\");\n\n\t\t\tthis._proportionallyResizeElements.push( this.originalElement.css({\n\t\t\t\tposition: \"static\",\n\t\t\t\tzoom: 1,\n\t\t\t\tdisplay: \"block\"\n\t\t\t}) );\n\n\t\t\t// support: IE9\n\t\t\t// avoid IE jump (hard set the margin)\n\t\t\tthis.originalElement.css({ margin: this.originalElement.css(\"margin\") });\n\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tthis.handles = o.handles ||\n\t\t\t( !$(\".ui-resizable-handle\", this.element).length ?\n\t\t\t\t\"e,s,se\" : {\n\t\t\t\t\tn: \".ui-resizable-n\",\n\t\t\t\t\te: \".ui-resizable-e\",\n\t\t\t\t\ts: \".ui-resizable-s\",\n\t\t\t\t\tw: \".ui-resizable-w\",\n\t\t\t\t\tse: \".ui-resizable-se\",\n\t\t\t\t\tsw: \".ui-resizable-sw\",\n\t\t\t\t\tne: \".ui-resizable-ne\",\n\t\t\t\t\tnw: \".ui-resizable-nw\"\n\t\t\t\t} );\n\n\t\tthis._handles = $();\n\t\tif ( this.handles.constructor === String ) {\n\n\t\t\tif ( this.handles === \"all\") {\n\t\t\t\tthis.handles = \"n,e,s,w,se,sw,ne,nw\";\n\t\t\t}\n\n\t\t\tn = this.handles.split(\",\");\n\t\t\tthis.handles = {};\n\n\t\t\tfor (i = 0; i < n.length; i++) {\n\n\t\t\t\thandle = $.trim(n[i]);\n\t\t\t\thname = \"ui-resizable-\" + handle;\n\t\t\t\taxis = $(\"<div class='ui-resizable-handle \" + hname + \"'></div>\");\n\n\t\t\t\taxis.css({ zIndex: o.zIndex });\n\n\t\t\t\t// TODO : What's going on here?\n\t\t\t\tif (\"se\" === handle) {\n\t\t\t\t\taxis.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\");\n\t\t\t\t}\n\n\t\t\t\tthis.handles[handle] = \".ui-resizable-\" + handle;\n\t\t\t\tthis.element.append(axis);\n\t\t\t}\n\n\t\t}\n\n\t\tthis._renderAxis = function(target) {\n\n\t\t\tvar i, axis, padPos, padWrapper;\n\n\t\t\ttarget = target || this.element;\n\n\t\t\tfor (i in this.handles) {\n\n\t\t\t\tif (this.handles[i].constructor === String) {\n\t\t\t\t\tthis.handles[i] = this.element.children( this.handles[ i ] ).first().show();\n\t\t\t\t} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {\n\t\t\t\t\tthis.handles[ i ] = $( this.handles[ i ] );\n\t\t\t\t\tthis._on( this.handles[ i ], { \"mousedown\": that._mouseDown });\n\t\t\t\t}\n\n\t\t\t\tif (this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)) {\n\n\t\t\t\t\taxis = $(this.handles[i], this.element);\n\n\t\t\t\t\tpadWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();\n\n\t\t\t\t\tpadPos = [ \"padding\",\n\t\t\t\t\t\t/ne|nw|n/.test(i) ? \"Top\" :\n\t\t\t\t\t\t/se|sw|s/.test(i) ? \"Bottom\" :\n\t\t\t\t\t\t/^e$/.test(i) ? \"Right\" : \"Left\" ].join(\"\");\n\n\t\t\t\t\ttarget.css(padPos, padWrapper);\n\n\t\t\t\t\tthis._proportionallyResize();\n\t\t\t\t}\n\n\t\t\t\tthis._handles = this._handles.add( this.handles[ i ] );\n\t\t\t}\n\t\t};\n\n\t\t// TODO: make renderAxis a prototype function\n\t\tthis._renderAxis(this.element);\n\n\t\tthis._handles = this._handles.add( this.element.find( \".ui-resizable-handle\" ) );\n\t\tthis._handles.disableSelection();\n\n\t\tthis._handles.mouseover(function() {\n\t\t\tif (!that.resizing) {\n\t\t\t\tif (this.className) {\n\t\t\t\t\taxis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);\n\t\t\t\t}\n\t\t\t\tthat.axis = axis && axis[1] ? axis[1] : \"se\";\n\t\t\t}\n\t\t});\n\n\t\tif (o.autoHide) {\n\t\t\tthis._handles.hide();\n\t\t\t$(this.element)\n\t\t\t\t.addClass(\"ui-resizable-autohide\")\n\t\t\t\t.mouseenter(function() {\n\t\t\t\t\tif (o.disabled) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t$(this).removeClass(\"ui-resizable-autohide\");\n\t\t\t\t\tthat._handles.show();\n\t\t\t\t})\n\t\t\t\t.mouseleave(function() {\n\t\t\t\t\tif (o.disabled) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!that.resizing) {\n\t\t\t\t\t\t$(this).addClass(\"ui-resizable-autohide\");\n\t\t\t\t\t\tthat._handles.hide();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}\n\n\t\tthis._mouseInit();\n\t},\n\n\t_destroy: function() {\n\n\t\tthis._mouseDestroy();\n\n\t\tvar wrapper,\n\t\t\t_destroy = function(exp) {\n\t\t\t\t$(exp)\n\t\t\t\t\t.removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\")\n\t\t\t\t\t.removeData(\"resizable\")\n\t\t\t\t\t.removeData(\"ui-resizable\")\n\t\t\t\t\t.unbind(\".resizable\")\n\t\t\t\t\t.find(\".ui-resizable-handle\")\n\t\t\t\t\t\t.remove();\n\t\t\t};\n\n\t\t// TODO: Unwrap at same DOM position\n\t\tif (this.elementIsWrapper) {\n\t\t\t_destroy(this.element);\n\t\t\twrapper = this.element;\n\t\t\tthis.originalElement.css({\n\t\t\t\tposition: wrapper.css(\"position\"),\n\t\t\t\twidth: wrapper.outerWidth(),\n\t\t\t\theight: wrapper.outerHeight(),\n\t\t\t\ttop: wrapper.css(\"top\"),\n\t\t\t\tleft: wrapper.css(\"left\")\n\t\t\t}).insertAfter( wrapper );\n\t\t\twrapper.remove();\n\t\t}\n\n\t\tthis.originalElement.css(\"resize\", this.originalResizeStyle);\n\t\t_destroy(this.originalElement);\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function(event) {\n\t\tvar i, handle,\n\t\t\tcapture = false;\n\n\t\tfor (i in this.handles) {\n\t\t\thandle = $(this.handles[i])[0];\n\t\t\tif (handle === event.target || $.contains(handle, event.target)) {\n\t\t\t\tcapture = true;\n\t\t\t}\n\t\t}\n\n\t\treturn !this.options.disabled && capture;\n\t},\n\n\t_mouseStart: function(event) {\n\n\t\tvar curleft, curtop, cursor,\n\t\t\to = this.options,\n\t\t\tel = this.element;\n\n\t\tthis.resizing = true;\n\n\t\tthis._renderProxy();\n\n\t\tcurleft = this._num(this.helper.css(\"left\"));\n\t\tcurtop = this._num(this.helper.css(\"top\"));\n\n\t\tif (o.containment) {\n\t\t\tcurleft += $(o.containment).scrollLeft() || 0;\n\t\t\tcurtop += $(o.containment).scrollTop() || 0;\n\t\t}\n\n\t\tthis.offset = this.helper.offset();\n\t\tthis.position = { left: curleft, top: curtop };\n\n\t\tthis.size = this._helper ? {\n\t\t\t\twidth: this.helper.width(),\n\t\t\t\theight: this.helper.height()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.originalSize = this._helper ? {\n\t\t\t\twidth: el.outerWidth(),\n\t\t\t\theight: el.outerHeight()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.sizeDiff = {\n\t\t\twidth: el.outerWidth() - el.width(),\n\t\t\theight: el.outerHeight() - el.height()\n\t\t};\n\n\t\tthis.originalPosition = { left: curleft, top: curtop };\n\t\tthis.originalMousePosition = { left: event.pageX, top: event.pageY };\n\n\t\tthis.aspectRatio = (typeof o.aspectRatio === \"number\") ?\n\t\t\to.aspectRatio :\n\t\t\t((this.originalSize.width / this.originalSize.height) || 1);\n\n\t\tcursor = $(\".ui-resizable-\" + this.axis).css(\"cursor\");\n\t\t$(\"body\").css(\"cursor\", cursor === \"auto\" ? this.axis + \"-resize\" : cursor);\n\n\t\tel.addClass(\"ui-resizable-resizing\");\n\t\tthis._propagate(\"start\", event);\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function(event) {\n\n\t\tvar data, props,\n\t\t\tsmp = this.originalMousePosition,\n\t\t\ta = this.axis,\n\t\t\tdx = (event.pageX - smp.left) || 0,\n\t\t\tdy = (event.pageY - smp.top) || 0,\n\t\t\ttrigger = this._change[a];\n\n\t\tthis._updatePrevProperties();\n\n\t\tif (!trigger) {\n\t\t\treturn false;\n\t\t}\n\n\t\tdata = trigger.apply(this, [ event, dx, dy ]);\n\n\t\tthis._updateVirtualBoundaries(event.shiftKey);\n\t\tif (this._aspectRatio || event.shiftKey) {\n\t\t\tdata = this._updateRatio(data, event);\n\t\t}\n\n\t\tdata = this._respectSize(data, event);\n\n\t\tthis._updateCache(data);\n\n\t\tthis._propagate(\"resize\", event);\n\n\t\tprops = this._applyChanges();\n\n\t\tif ( !this._helper && this._proportionallyResizeElements.length ) {\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tif ( !$.isEmptyObject( props ) ) {\n\t\t\tthis._updatePrevProperties();\n\t\t\tthis._trigger( \"resize\", event, this.ui() );\n\t\t\tthis._applyChanges();\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function(event) {\n\n\t\tthis.resizing = false;\n\t\tvar pr, ista, soffseth, soffsetw, s, left, top,\n\t\t\to = this.options, that = this;\n\n\t\tif (this._helper) {\n\n\t\t\tpr = this._proportionallyResizeElements;\n\t\t\tista = pr.length && (/textarea/i).test(pr[0].nodeName);\n\t\t\tsoffseth = ista && this._hasScroll(pr[0], \"left\") ? 0 : that.sizeDiff.height;\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width;\n\n\t\t\ts = {\n\t\t\t\twidth: (that.helper.width()  - soffsetw),\n\t\t\t\theight: (that.helper.height() - soffseth)\n\t\t\t};\n\t\t\tleft = (parseInt(that.element.css(\"left\"), 10) +\n\t\t\t\t(that.position.left - that.originalPosition.left)) || null;\n\t\t\ttop = (parseInt(that.element.css(\"top\"), 10) +\n\t\t\t\t(that.position.top - that.originalPosition.top)) || null;\n\n\t\t\tif (!o.animate) {\n\t\t\t\tthis.element.css($.extend(s, { top: top, left: left }));\n\t\t\t}\n\n\t\t\tthat.helper.height(that.size.height);\n\t\t\tthat.helper.width(that.size.width);\n\n\t\t\tif (this._helper && !o.animate) {\n\t\t\t\tthis._proportionallyResize();\n\t\t\t}\n\t\t}\n\n\t\t$(\"body\").css(\"cursor\", \"auto\");\n\n\t\tthis.element.removeClass(\"ui-resizable-resizing\");\n\n\t\tthis._propagate(\"stop\", event);\n\n\t\tif (this._helper) {\n\t\t\tthis.helper.remove();\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\t_updatePrevProperties: function() {\n\t\tthis.prevPosition = {\n\t\t\ttop: this.position.top,\n\t\t\tleft: this.position.left\n\t\t};\n\t\tthis.prevSize = {\n\t\t\twidth: this.size.width,\n\t\t\theight: this.size.height\n\t\t};\n\t},\n\n\t_applyChanges: function() {\n\t\tvar props = {};\n\n\t\tif ( this.position.top !== this.prevPosition.top ) {\n\t\t\tprops.top = this.position.top + \"px\";\n\t\t}\n\t\tif ( this.position.left !== this.prevPosition.left ) {\n\t\t\tprops.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( this.size.width !== this.prevSize.width ) {\n\t\t\tprops.width = this.size.width + \"px\";\n\t\t}\n\t\tif ( this.size.height !== this.prevSize.height ) {\n\t\t\tprops.height = this.size.height + \"px\";\n\t\t}\n\n\t\tthis.helper.css( props );\n\n\t\treturn props;\n\t},\n\n\t_updateVirtualBoundaries: function(forceAspectRatio) {\n\t\tvar pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,\n\t\t\to = this.options;\n\n\t\tb = {\n\t\t\tminWidth: this._isNumber(o.minWidth) ? o.minWidth : 0,\n\t\t\tmaxWidth: this._isNumber(o.maxWidth) ? o.maxWidth : Infinity,\n\t\t\tminHeight: this._isNumber(o.minHeight) ? o.minHeight : 0,\n\t\t\tmaxHeight: this._isNumber(o.maxHeight) ? o.maxHeight : Infinity\n\t\t};\n\n\t\tif (this._aspectRatio || forceAspectRatio) {\n\t\t\tpMinWidth = b.minHeight * this.aspectRatio;\n\t\t\tpMinHeight = b.minWidth / this.aspectRatio;\n\t\t\tpMaxWidth = b.maxHeight * this.aspectRatio;\n\t\t\tpMaxHeight = b.maxWidth / this.aspectRatio;\n\n\t\t\tif (pMinWidth > b.minWidth) {\n\t\t\t\tb.minWidth = pMinWidth;\n\t\t\t}\n\t\t\tif (pMinHeight > b.minHeight) {\n\t\t\t\tb.minHeight = pMinHeight;\n\t\t\t}\n\t\t\tif (pMaxWidth < b.maxWidth) {\n\t\t\t\tb.maxWidth = pMaxWidth;\n\t\t\t}\n\t\t\tif (pMaxHeight < b.maxHeight) {\n\t\t\t\tb.maxHeight = pMaxHeight;\n\t\t\t}\n\t\t}\n\t\tthis._vBoundaries = b;\n\t},\n\n\t_updateCache: function(data) {\n\t\tthis.offset = this.helper.offset();\n\t\tif (this._isNumber(data.left)) {\n\t\t\tthis.position.left = data.left;\n\t\t}\n\t\tif (this._isNumber(data.top)) {\n\t\t\tthis.position.top = data.top;\n\t\t}\n\t\tif (this._isNumber(data.height)) {\n\t\t\tthis.size.height = data.height;\n\t\t}\n\t\tif (this._isNumber(data.width)) {\n\t\t\tthis.size.width = data.width;\n\t\t}\n\t},\n\n\t_updateRatio: function( data ) {\n\n\t\tvar cpos = this.position,\n\t\t\tcsize = this.size,\n\t\t\ta = this.axis;\n\n\t\tif (this._isNumber(data.height)) {\n\t\t\tdata.width = (data.height * this.aspectRatio);\n\t\t} else if (this._isNumber(data.width)) {\n\t\t\tdata.height = (data.width / this.aspectRatio);\n\t\t}\n\n\t\tif (a === \"sw\") {\n\t\t\tdata.left = cpos.left + (csize.width - data.width);\n\t\t\tdata.top = null;\n\t\t}\n\t\tif (a === \"nw\") {\n\t\t\tdata.top = cpos.top + (csize.height - data.height);\n\t\t\tdata.left = cpos.left + (csize.width - data.width);\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_respectSize: function( data ) {\n\n\t\tvar o = this._vBoundaries,\n\t\t\ta = this.axis,\n\t\t\tismaxw = this._isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width),\n\t\t\tismaxh = this._isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),\n\t\t\tisminw = this._isNumber(data.width) && o.minWidth && (o.minWidth > data.width),\n\t\t\tisminh = this._isNumber(data.height) && o.minHeight && (o.minHeight > data.height),\n\t\t\tdw = this.originalPosition.left + this.originalSize.width,\n\t\t\tdh = this.position.top + this.size.height,\n\t\t\tcw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);\n\t\tif (isminw) {\n\t\t\tdata.width = o.minWidth;\n\t\t}\n\t\tif (isminh) {\n\t\t\tdata.height = o.minHeight;\n\t\t}\n\t\tif (ismaxw) {\n\t\t\tdata.width = o.maxWidth;\n\t\t}\n\t\tif (ismaxh) {\n\t\t\tdata.height = o.maxHeight;\n\t\t}\n\n\t\tif (isminw && cw) {\n\t\t\tdata.left = dw - o.minWidth;\n\t\t}\n\t\tif (ismaxw && cw) {\n\t\t\tdata.left = dw - o.maxWidth;\n\t\t}\n\t\tif (isminh && ch) {\n\t\t\tdata.top = dh - o.minHeight;\n\t\t}\n\t\tif (ismaxh && ch) {\n\t\t\tdata.top = dh - o.maxHeight;\n\t\t}\n\n\t\t// Fixing jump error on top/left - bug #2330\n\t\tif (!data.width && !data.height && !data.left && data.top) {\n\t\t\tdata.top = null;\n\t\t} else if (!data.width && !data.height && !data.top && data.left) {\n\t\t\tdata.left = null;\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_getPaddingPlusBorderDimensions: function( element ) {\n\t\tvar i = 0,\n\t\t\twidths = [],\n\t\t\tborders = [\n\t\t\t\telement.css( \"borderTopWidth\" ),\n\t\t\t\telement.css( \"borderRightWidth\" ),\n\t\t\t\telement.css( \"borderBottomWidth\" ),\n\t\t\t\telement.css( \"borderLeftWidth\" )\n\t\t\t],\n\t\t\tpaddings = [\n\t\t\t\telement.css( \"paddingTop\" ),\n\t\t\t\telement.css( \"paddingRight\" ),\n\t\t\t\telement.css( \"paddingBottom\" ),\n\t\t\t\telement.css( \"paddingLeft\" )\n\t\t\t];\n\n\t\tfor ( ; i < 4; i++ ) {\n\t\t\twidths[ i ] = ( parseInt( borders[ i ], 10 ) || 0 );\n\t\t\twidths[ i ] += ( parseInt( paddings[ i ], 10 ) || 0 );\n\t\t}\n\n\t\treturn {\n\t\t\theight: widths[ 0 ] + widths[ 2 ],\n\t\t\twidth: widths[ 1 ] + widths[ 3 ]\n\t\t};\n\t},\n\n\t_proportionallyResize: function() {\n\n\t\tif (!this._proportionallyResizeElements.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar prel,\n\t\t\ti = 0,\n\t\t\telement = this.helper || this.element;\n\n\t\tfor ( ; i < this._proportionallyResizeElements.length; i++) {\n\n\t\t\tprel = this._proportionallyResizeElements[i];\n\n\t\t\t// TODO: Seems like a bug to cache this.outerDimensions\n\t\t\t// considering that we are in a loop.\n\t\t\tif (!this.outerDimensions) {\n\t\t\t\tthis.outerDimensions = this._getPaddingPlusBorderDimensions( prel );\n\t\t\t}\n\n\t\t\tprel.css({\n\t\t\t\theight: (element.height() - this.outerDimensions.height) || 0,\n\t\t\t\twidth: (element.width() - this.outerDimensions.width) || 0\n\t\t\t});\n\n\t\t}\n\n\t},\n\n\t_renderProxy: function() {\n\n\t\tvar el = this.element, o = this.options;\n\t\tthis.elementOffset = el.offset();\n\n\t\tif (this._helper) {\n\n\t\t\tthis.helper = this.helper || $(\"<div style='overflow:hidden;'></div>\");\n\n\t\t\tthis.helper.addClass(this._helper).css({\n\t\t\t\twidth: this.element.outerWidth() - 1,\n\t\t\t\theight: this.element.outerHeight() - 1,\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: this.elementOffset.left + \"px\",\n\t\t\t\ttop: this.elementOffset.top + \"px\",\n\t\t\t\tzIndex: ++o.zIndex //TODO: Don't modify option\n\t\t\t});\n\n\t\t\tthis.helper\n\t\t\t\t.appendTo(\"body\")\n\t\t\t\t.disableSelection();\n\n\t\t} else {\n\t\t\tthis.helper = this.element;\n\t\t}\n\n\t},\n\n\t_change: {\n\t\te: function(event, dx) {\n\t\t\treturn { width: this.originalSize.width + dx };\n\t\t},\n\t\tw: function(event, dx) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { left: sp.left + dx, width: cs.width - dx };\n\t\t},\n\t\tn: function(event, dx, dy) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { top: sp.top + dy, height: cs.height - dy };\n\t\t},\n\t\ts: function(event, dx, dy) {\n\t\t\treturn { height: this.originalSize.height + dy };\n\t\t},\n\t\tse: function(event, dx, dy) {\n\t\t\treturn $.extend(this._change.s.apply(this, arguments),\n\t\t\t\tthis._change.e.apply(this, [ event, dx, dy ]));\n\t\t},\n\t\tsw: function(event, dx, dy) {\n\t\t\treturn $.extend(this._change.s.apply(this, arguments),\n\t\t\t\tthis._change.w.apply(this, [ event, dx, dy ]));\n\t\t},\n\t\tne: function(event, dx, dy) {\n\t\t\treturn $.extend(this._change.n.apply(this, arguments),\n\t\t\t\tthis._change.e.apply(this, [ event, dx, dy ]));\n\t\t},\n\t\tnw: function(event, dx, dy) {\n\t\t\treturn $.extend(this._change.n.apply(this, arguments),\n\t\t\t\tthis._change.w.apply(this, [ event, dx, dy ]));\n\t\t}\n\t},\n\n\t_propagate: function(n, event) {\n\t\t$.ui.plugin.call(this, n, [ event, this.ui() ]);\n\t\t(n !== \"resize\" && this._trigger(n, event, this.ui()));\n\t},\n\n\tplugins: {},\n\n\tui: function() {\n\t\treturn {\n\t\t\toriginalElement: this.originalElement,\n\t\t\telement: this.element,\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\tsize: this.size,\n\t\t\toriginalSize: this.originalSize,\n\t\t\toriginalPosition: this.originalPosition\n\t\t};\n\t}\n\n});\n\n/*\n * Resizable Extensions\n */\n\n$.ui.plugin.add(\"resizable\", \"animate\", {\n\n\tstop: function( event ) {\n\t\tvar that = $(this).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tpr = that._proportionallyResizeElements,\n\t\t\tista = pr.length && (/textarea/i).test(pr[0].nodeName),\n\t\t\tsoffseth = ista && that._hasScroll(pr[0], \"left\") ? 0 : that.sizeDiff.height,\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width,\n\t\t\tstyle = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },\n\t\t\tleft = (parseInt(that.element.css(\"left\"), 10) +\n\t\t\t\t(that.position.left - that.originalPosition.left)) || null,\n\t\t\ttop = (parseInt(that.element.css(\"top\"), 10) +\n\t\t\t\t(that.position.top - that.originalPosition.top)) || null;\n\n\t\tthat.element.animate(\n\t\t\t$.extend(style, top && left ? { top: top, left: left } : {}), {\n\t\t\t\tduration: o.animateDuration,\n\t\t\t\teasing: o.animateEasing,\n\t\t\t\tstep: function() {\n\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\twidth: parseInt(that.element.css(\"width\"), 10),\n\t\t\t\t\t\theight: parseInt(that.element.css(\"height\"), 10),\n\t\t\t\t\t\ttop: parseInt(that.element.css(\"top\"), 10),\n\t\t\t\t\t\tleft: parseInt(that.element.css(\"left\"), 10)\n\t\t\t\t\t};\n\n\t\t\t\t\tif (pr && pr.length) {\n\t\t\t\t\t\t$(pr[0]).css({ width: data.width, height: data.height });\n\t\t\t\t\t}\n\n\t\t\t\t\t// propagating resize, and updating values for each animation step\n\t\t\t\t\tthat._updateCache(data);\n\t\t\t\t\tthat._propagate(\"resize\", event);\n\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n});\n\n$.ui.plugin.add( \"resizable\", \"containment\", {\n\n\tstart: function() {\n\t\tvar element, p, co, ch, cw, width, height,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tel = that.element,\n\t\t\toc = o.containment,\n\t\t\tce = ( oc instanceof $ ) ? oc.get( 0 ) : ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthat.containerElement = $( ce );\n\n\t\tif ( /document/.test( oc ) || oc === document ) {\n\t\t\tthat.containerOffset = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\t\t\tthat.containerPosition = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: $( document ),\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\twidth: $( document ).width(),\n\t\t\t\theight: $( document ).height() || document.body.parentNode.scrollHeight\n\t\t\t};\n\t\t} else {\n\t\t\telement = $( ce );\n\t\t\tp = [];\n\t\t\t$([ \"Top\", \"Right\", \"Left\", \"Bottom\" ]).each(function( i, name ) {\n\t\t\t\tp[ i ] = that._num( element.css( \"padding\" + name ) );\n\t\t\t});\n\n\t\t\tthat.containerOffset = element.offset();\n\t\t\tthat.containerPosition = element.position();\n\t\t\tthat.containerSize = {\n\t\t\t\theight: ( element.innerHeight() - p[ 3 ] ),\n\t\t\t\twidth: ( element.innerWidth() - p[ 1 ] )\n\t\t\t};\n\n\t\t\tco = that.containerOffset;\n\t\t\tch = that.containerSize.height;\n\t\t\tcw = that.containerSize.width;\n\t\t\twidth = ( that._hasScroll ( ce, \"left\" ) ? ce.scrollWidth : cw );\n\t\t\theight = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: ce,\n\t\t\t\tleft: co.left,\n\t\t\t\ttop: co.top,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t};\n\t\t}\n\t},\n\n\tresize: function( event ) {\n\t\tvar woset, hoset, isParent, isOffsetRelative,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcp = that.position,\n\t\t\tpRatio = that._aspectRatio || event.shiftKey,\n\t\t\tcop = {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t},\n\t\t\tce = that.containerElement,\n\t\t\tcontinueResize = true;\n\n\t\tif ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\tcop = co;\n\t\t}\n\n\t\tif ( cp.left < ( that._helper ? co.left : 0 ) ) {\n\t\t\tthat.size.width = that.size.width +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.left - co.left ) :\n\t\t\t\t\t( that.position.left - cop.left ) );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.left = o.helper ? co.left : 0;\n\t\t}\n\n\t\tif ( cp.top < ( that._helper ? co.top : 0 ) ) {\n\t\t\tthat.size.height = that.size.height +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.top - co.top ) :\n\t\t\t\t\tthat.position.top );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.top = that._helper ? co.top : 0;\n\t\t}\n\n\t\tisParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );\n\t\tisOffsetRelative = /relative|absolute/.test( that.containerElement.css( \"position\" ) );\n\n\t\tif ( isParent && isOffsetRelative ) {\n\t\t\tthat.offset.left = that.parentData.left + that.position.left;\n\t\t\tthat.offset.top = that.parentData.top + that.position.top;\n\t\t} else {\n\t\t\tthat.offset.left = that.element.offset().left;\n\t\t\tthat.offset.top = that.element.offset().top;\n\t\t}\n\n\t\twoset = Math.abs( that.sizeDiff.width +\n\t\t\t(that._helper ?\n\t\t\t\tthat.offset.left - cop.left :\n\t\t\t\t(that.offset.left - co.left)) );\n\n\t\thoset = Math.abs( that.sizeDiff.height +\n\t\t\t(that._helper ?\n\t\t\t\tthat.offset.top - cop.top :\n\t\t\t\t(that.offset.top - co.top)) );\n\n\t\tif ( woset + that.size.width >= that.parentData.width ) {\n\t\t\tthat.size.width = that.parentData.width - woset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( hoset + that.size.height >= that.parentData.height ) {\n\t\t\tthat.size.height = that.parentData.height - hoset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( !continueResize ) {\n\t\t\tthat.position.left = that.prevPosition.left;\n\t\t\tthat.position.top = that.prevPosition.top;\n\t\t\tthat.size.width = that.prevSize.width;\n\t\t\tthat.size.height = that.prevSize.height;\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcop = that.containerPosition,\n\t\t\tce = that.containerElement,\n\t\t\thelper = $( that.helper ),\n\t\t\tho = helper.offset(),\n\t\t\tw = helper.outerWidth() - that.sizeDiff.width,\n\t\t\th = helper.outerHeight() - that.sizeDiff.height;\n\n\t\tif ( that._helper && !o.animate && ( /relative/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css({\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t});\n\t\t}\n\n\t\tif ( that._helper && !o.animate && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css({\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t});\n\t\t}\n\t}\n});\n\n$.ui.plugin.add(\"resizable\", \"alsoResize\", {\n\n\tstart: function() {\n\t\tvar that = $(this).resizable( \"instance\" ),\n\t\t\to = that.options;\n\n\t\t$(o.alsoResize).each(function() {\n\t\t\tvar el = $(this);\n\t\t\tel.data(\"ui-resizable-alsoresize\", {\n\t\t\t\twidth: parseInt(el.width(), 10), height: parseInt(el.height(), 10),\n\t\t\t\tleft: parseInt(el.css(\"left\"), 10), top: parseInt(el.css(\"top\"), 10)\n\t\t\t});\n\t\t});\n\t},\n\n\tresize: function(event, ui) {\n\t\tvar that = $(this).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\tdelta = {\n\t\t\t\theight: (that.size.height - os.height) || 0,\n\t\t\t\twidth: (that.size.width - os.width) || 0,\n\t\t\t\ttop: (that.position.top - op.top) || 0,\n\t\t\t\tleft: (that.position.left - op.left) || 0\n\t\t\t};\n\n\t\t\t$(o.alsoResize).each(function() {\n\t\t\t\tvar el = $(this), start = $(this).data(\"ui-resizable-alsoresize\"), style = {},\n\t\t\t\t\tcss = el.parents(ui.originalElement[0]).length ?\n\t\t\t\t\t\t\t[ \"width\", \"height\" ] :\n\t\t\t\t\t\t\t[ \"width\", \"height\", \"top\", \"left\" ];\n\n\t\t\t\t$.each(css, function(i, prop) {\n\t\t\t\t\tvar sum = (start[prop] || 0) + (delta[prop] || 0);\n\t\t\t\t\tif (sum && sum >= 0) {\n\t\t\t\t\t\tstyle[prop] = sum || null;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tel.css(style);\n\t\t\t});\n\t},\n\n\tstop: function() {\n\t\t$(this).removeData(\"resizable-alsoresize\");\n\t}\n});\n\n$.ui.plugin.add(\"resizable\", \"ghost\", {\n\n\tstart: function() {\n\n\t\tvar that = $(this).resizable( \"instance\" ), o = that.options, cs = that.size;\n\n\t\tthat.ghost = that.originalElement.clone();\n\t\tthat.ghost\n\t\t\t.css({\n\t\t\t\topacity: 0.25,\n\t\t\t\tdisplay: \"block\",\n\t\t\t\tposition: \"relative\",\n\t\t\t\theight: cs.height,\n\t\t\t\twidth: cs.width,\n\t\t\t\tmargin: 0,\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t})\n\t\t\t.addClass(\"ui-resizable-ghost\")\n\t\t\t.addClass(typeof o.ghost === \"string\" ? o.ghost : \"\");\n\n\t\tthat.ghost.appendTo(that.helper);\n\n\t},\n\n\tresize: function() {\n\t\tvar that = $(this).resizable( \"instance\" );\n\t\tif (that.ghost) {\n\t\t\tthat.ghost.css({\n\t\t\t\tposition: \"relative\",\n\t\t\t\theight: that.size.height,\n\t\t\t\twidth: that.size.width\n\t\t\t});\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $(this).resizable( \"instance\" );\n\t\tif (that.ghost && that.helper) {\n\t\t\tthat.helper.get(0).removeChild(that.ghost.get(0));\n\t\t}\n\t}\n\n});\n\n$.ui.plugin.add(\"resizable\", \"grid\", {\n\n\tresize: function() {\n\t\tvar outerDimensions,\n\t\t\tthat = $(this).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tcs = that.size,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\ta = that.axis,\n\t\t\tgrid = typeof o.grid === \"number\" ? [ o.grid, o.grid ] : o.grid,\n\t\t\tgridX = (grid[0] || 1),\n\t\t\tgridY = (grid[1] || 1),\n\t\t\tox = Math.round((cs.width - os.width) / gridX) * gridX,\n\t\t\toy = Math.round((cs.height - os.height) / gridY) * gridY,\n\t\t\tnewWidth = os.width + ox,\n\t\t\tnewHeight = os.height + oy,\n\t\t\tisMaxWidth = o.maxWidth && (o.maxWidth < newWidth),\n\t\t\tisMaxHeight = o.maxHeight && (o.maxHeight < newHeight),\n\t\t\tisMinWidth = o.minWidth && (o.minWidth > newWidth),\n\t\t\tisMinHeight = o.minHeight && (o.minHeight > newHeight);\n\n\t\to.grid = grid;\n\n\t\tif (isMinWidth) {\n\t\t\tnewWidth += gridX;\n\t\t}\n\t\tif (isMinHeight) {\n\t\t\tnewHeight += gridY;\n\t\t}\n\t\tif (isMaxWidth) {\n\t\t\tnewWidth -= gridX;\n\t\t}\n\t\tif (isMaxHeight) {\n\t\t\tnewHeight -= gridY;\n\t\t}\n\n\t\tif (/^(se|s|e)$/.test(a)) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t} else if (/^(ne)$/.test(a)) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.top = op.top - oy;\n\t\t} else if (/^(sw)$/.test(a)) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.left = op.left - ox;\n\t\t} else {\n\t\t\tif ( newHeight - gridY <= 0 || newWidth - gridX <= 0) {\n\t\t\t\touterDimensions = that._getPaddingPlusBorderDimensions( this );\n\t\t\t}\n\n\t\t\tif ( newHeight - gridY > 0 ) {\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top - oy;\n\t\t\t} else {\n\t\t\t\tnewHeight = gridY - outerDimensions.height;\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top + os.height - newHeight;\n\t\t\t}\n\t\t\tif ( newWidth - gridX > 0 ) {\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left - ox;\n\t\t\t} else {\n\t\t\t\tnewWidth = gridX - outerDimensions.width;\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left + os.width - newWidth;\n\t\t\t}\n\t\t}\n\t}\n\n});\n\nvar resizable = $.ui.resizable;\n\n\n/*!\n * jQuery UI Dialog 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/dialog/\n */\n\n\nvar dialog = $.widget( \"ui.dialog\", {\n\tversion: \"1.11.4\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoOpen: true,\n\t\tbuttons: [],\n\t\tcloseOnEscape: true,\n\t\tcloseText: \"Close\",\n\t\tdialogClass: \"\",\n\t\tdraggable: true,\n\t\thide: null,\n\t\theight: \"auto\",\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 150,\n\t\tminWidth: 150,\n\t\tmodal: false,\n\t\tposition: {\n\t\t\tmy: \"center\",\n\t\t\tat: \"center\",\n\t\t\tof: window,\n\t\t\tcollision: \"fit\",\n\t\t\t// Ensure the titlebar is always visible\n\t\t\tusing: function( pos ) {\n\t\t\t\tvar topOffset = $( this ).css( pos ).offset().top;\n\t\t\t\tif ( topOffset < 0 ) {\n\t\t\t\t\t$( this ).css( \"top\", pos.top - topOffset );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tresizable: true,\n\t\tshow: null,\n\t\ttitle: null,\n\t\twidth: 300,\n\n\t\t// callbacks\n\t\tbeforeClose: null,\n\t\tclose: null,\n\t\tdrag: null,\n\t\tdragStart: null,\n\t\tdragStop: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresize: null,\n\t\tresizeStart: null,\n\t\tresizeStop: null\n\t},\n\n\tsizeRelatedOptions: {\n\t\tbuttons: true,\n\t\theight: true,\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true,\n\t\twidth: true\n\t},\n\n\tresizableRelatedOptions: {\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true\n\t},\n\n\t_create: function() {\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[ 0 ].style.display,\n\t\t\twidth: this.element[ 0 ].style.width,\n\t\t\tminHeight: this.element[ 0 ].style.minHeight,\n\t\t\tmaxHeight: this.element[ 0 ].style.maxHeight,\n\t\t\theight: this.element[ 0 ].style.height\n\t\t};\n\t\tthis.originalPosition = {\n\t\t\tparent: this.element.parent(),\n\t\t\tindex: this.element.parent().children().index( this.element )\n\t\t};\n\t\tthis.originalTitle = this.element.attr( \"title\" );\n\t\tthis.options.title = this.options.title || this.originalTitle;\n\n\t\tthis._createWrapper();\n\n\t\tthis.element\n\t\t\t.show()\n\t\t\t.removeAttr( \"title\" )\n\t\t\t.addClass( \"ui-dialog-content ui-widget-content\" )\n\t\t\t.appendTo( this.uiDialog );\n\n\t\tthis._createTitlebar();\n\t\tthis._createButtonPane();\n\n\t\tif ( this.options.draggable && $.fn.draggable ) {\n\t\t\tthis._makeDraggable();\n\t\t}\n\t\tif ( this.options.resizable && $.fn.resizable ) {\n\t\t\tthis._makeResizable();\n\t\t}\n\n\t\tthis._isOpen = false;\n\n\t\tthis._trackFocus();\n\t},\n\n\t_init: function() {\n\t\tif ( this.options.autoOpen ) {\n\t\t\tthis.open();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\t\tif ( element && (element.jquery || element.nodeType) ) {\n\t\t\treturn $( element );\n\t\t}\n\t\treturn this.document.find( element || \"body\" ).eq( 0 );\n\t},\n\n\t_destroy: function() {\n\t\tvar next,\n\t\t\toriginalPosition = this.originalPosition;\n\n\t\tthis._untrackInstance();\n\t\tthis._destroyOverlay();\n\n\t\tthis.element\n\t\t\t.removeUniqueId()\n\t\t\t.removeClass( \"ui-dialog-content ui-widget-content\" )\n\t\t\t.css( this.originalCss )\n\t\t\t// Without detaching first, the following becomes really slow\n\t\t\t.detach();\n\n\t\tthis.uiDialog.stop( true, true ).remove();\n\n\t\tif ( this.originalTitle ) {\n\t\t\tthis.element.attr( \"title\", this.originalTitle );\n\t\t}\n\n\t\tnext = originalPosition.parent.children().eq( originalPosition.index );\n\t\t// Don't try to place the dialog next to itself (#8613)\n\t\tif ( next.length && next[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tnext.before( this.element );\n\t\t} else {\n\t\t\toriginalPosition.parent.append( this.element );\n\t\t}\n\t},\n\n\twidget: function() {\n\t\treturn this.uiDialog;\n\t},\n\n\tdisable: $.noop,\n\tenable: $.noop,\n\n\tclose: function( event ) {\n\t\tvar activeElement,\n\t\t\tthat = this;\n\n\t\tif ( !this._isOpen || this._trigger( \"beforeClose\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = false;\n\t\tthis._focusedElement = null;\n\t\tthis._destroyOverlay();\n\t\tthis._untrackInstance();\n\n\t\tif ( !this.opener.filter( \":focusable\" ).focus().length ) {\n\n\t\t\t// support: IE9\n\t\t\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n\t\t\ttry {\n\t\t\t\tactiveElement = this.document[ 0 ].activeElement;\n\n\t\t\t\t// Support: IE9, IE10\n\t\t\t\t// If the <body> is blurred, IE will switch windows, see #4520\n\t\t\t\tif ( activeElement && activeElement.nodeName.toLowerCase() !== \"body\" ) {\n\n\t\t\t\t\t// Hiding a focused element doesn't trigger blur in WebKit\n\t\t\t\t\t// so in case we have nothing to focus on, explicitly blur the active element\n\t\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=47182\n\t\t\t\t\t$( activeElement ).blur();\n\t\t\t\t}\n\t\t\t} catch ( error ) {}\n\t\t}\n\n\t\tthis._hide( this.uiDialog, this.options.hide, function() {\n\t\t\tthat._trigger( \"close\", event );\n\t\t});\n\t},\n\n\tisOpen: function() {\n\t\treturn this._isOpen;\n\t},\n\n\tmoveToTop: function() {\n\t\tthis._moveToTop();\n\t},\n\n\t_moveToTop: function( event, silent ) {\n\t\tvar moved = false,\n\t\t\tzIndices = this.uiDialog.siblings( \".ui-front:visible\" ).map(function() {\n\t\t\t\treturn +$( this ).css( \"z-index\" );\n\t\t\t}).get(),\n\t\t\tzIndexMax = Math.max.apply( null, zIndices );\n\n\t\tif ( zIndexMax >= +this.uiDialog.css( \"z-index\" ) ) {\n\t\t\tthis.uiDialog.css( \"z-index\", zIndexMax + 1 );\n\t\t\tmoved = true;\n\t\t}\n\n\t\tif ( moved && !silent ) {\n\t\t\tthis._trigger( \"focus\", event );\n\t\t}\n\t\treturn moved;\n\t},\n\n\topen: function() {\n\t\tvar that = this;\n\t\tif ( this._isOpen ) {\n\t\t\tif ( this._moveToTop() ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = true;\n\t\tthis.opener = $( this.document[ 0 ].activeElement );\n\n\t\tthis._size();\n\t\tthis._position();\n\t\tthis._createOverlay();\n\t\tthis._moveToTop( null, true );\n\n\t\t// Ensure the overlay is moved to the top with the dialog, but only when\n\t\t// opening. The overlay shouldn't move after the dialog is open so that\n\t\t// modeless dialogs opened after the modal dialog stack properly.\n\t\tif ( this.overlay ) {\n\t\t\tthis.overlay.css( \"z-index\", this.uiDialog.css( \"z-index\" ) - 1 );\n\t\t}\n\n\t\tthis._show( this.uiDialog, this.options.show, function() {\n\t\t\tthat._focusTabbable();\n\t\t\tthat._trigger( \"focus\" );\n\t\t});\n\n\t\t// Track the dialog immediately upon openening in case a focus event\n\t\t// somehow occurs outside of the dialog before an element inside the\n\t\t// dialog is focused (#10152)\n\t\tthis._makeFocusTarget();\n\n\t\tthis._trigger( \"open\" );\n\t},\n\n\t_focusTabbable: function() {\n\t\t// Set focus to the first match:\n\t\t// 1. An element that was focused previously\n\t\t// 2. First element inside the dialog matching [autofocus]\n\t\t// 3. Tabbable element inside the content element\n\t\t// 4. Tabbable element inside the buttonpane\n\t\t// 5. The close button\n\t\t// 6. The dialog itself\n\t\tvar hasFocus = this._focusedElement;\n\t\tif ( !hasFocus ) {\n\t\t\thasFocus = this.element.find( \"[autofocus]\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.element.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogButtonPane.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogTitlebarClose.filter( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialog;\n\t\t}\n\t\thasFocus.eq( 0 ).focus();\n\t},\n\n\t_keepFocus: function( event ) {\n\t\tfunction checkFocus() {\n\t\t\tvar activeElement = this.document[0].activeElement,\n\t\t\t\tisActive = this.uiDialog[0] === activeElement ||\n\t\t\t\t\t$.contains( this.uiDialog[0], activeElement );\n\t\t\tif ( !isActive ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t}\n\t\tevent.preventDefault();\n\t\tcheckFocus.call( this );\n\t\t// support: IE\n\t\t// IE <= 8 doesn't prevent moving focus even with event.preventDefault()\n\t\t// so we check again later\n\t\tthis._delay( checkFocus );\n\t},\n\n\t_createWrapper: function() {\n\t\tthis.uiDialog = $(\"<div>\")\n\t\t\t.addClass( \"ui-dialog ui-widget ui-widget-content ui-corner-all ui-front \" +\n\t\t\t\tthis.options.dialogClass )\n\t\t\t.hide()\n\t\t\t.attr({\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: \"dialog\"\n\t\t\t})\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._on( this.uiDialog, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&\n\t\t\t\t\t\tevent.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.close( event );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// prevent tabbing out of dialogs\n\t\t\t\tif ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar tabbables = this.uiDialog.find( \":tabbable\" ),\n\t\t\t\t\tfirst = tabbables.filter( \":first\" ),\n\t\t\t\t\tlast = tabbables.filter( \":last\" );\n\n\t\t\t\tif ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {\n\t\t\t\t\tthis._delay(function() {\n\t\t\t\t\t\tfirst.focus();\n\t\t\t\t\t});\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {\n\t\t\t\t\tthis._delay(function() {\n\t\t\t\t\t\tlast.focus();\n\t\t\t\t\t});\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\tmousedown: function( event ) {\n\t\t\t\tif ( this._moveToTop( event ) ) {\n\t\t\t\t\tthis._focusTabbable();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// We assume that any existing aria-describedby attribute means\n\t\t// that the dialog content is marked up properly\n\t\t// otherwise we brute force the content as the description\n\t\tif ( !this.element.find( \"[aria-describedby]\" ).length ) {\n\t\t\tthis.uiDialog.attr({\n\t\t\t\t\"aria-describedby\": this.element.uniqueId().attr( \"id\" )\n\t\t\t});\n\t\t}\n\t},\n\n\t_createTitlebar: function() {\n\t\tvar uiDialogTitle;\n\n\t\tthis.uiDialogTitlebar = $( \"<div>\" )\n\t\t\t.addClass( \"ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix\" )\n\t\t\t.prependTo( this.uiDialog );\n\t\tthis._on( this.uiDialogTitlebar, {\n\t\t\tmousedown: function( event ) {\n\t\t\t\t// Don't prevent click on close button (#8838)\n\t\t\t\t// Focusing a dialog that is partially scrolled out of view\n\t\t\t\t// causes the browser to scroll it into view, preventing the click event\n\t\t\t\tif ( !$( event.target ).closest( \".ui-dialog-titlebar-close\" ) ) {\n\t\t\t\t\t// Dialog isn't getting focus when dragging (#8063)\n\t\t\t\t\tthis.uiDialog.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// support: IE\n\t\t// Use type=\"button\" to prevent enter keypresses in textboxes from closing the\n\t\t// dialog in IE (#9312)\n\t\tthis.uiDialogTitlebarClose = $( \"<button type='button'></button>\" )\n\t\t\t.button({\n\t\t\t\tlabel: this.options.closeText,\n\t\t\t\ticons: {\n\t\t\t\t\tprimary: \"ui-icon-closethick\"\n\t\t\t\t},\n\t\t\t\ttext: false\n\t\t\t})\n\t\t\t.addClass( \"ui-dialog-titlebar-close\" )\n\t\t\t.appendTo( this.uiDialogTitlebar );\n\t\tthis._on( this.uiDialogTitlebarClose, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t});\n\n\t\tuiDialogTitle = $( \"<span>\" )\n\t\t\t.uniqueId()\n\t\t\t.addClass( \"ui-dialog-title\" )\n\t\t\t.prependTo( this.uiDialogTitlebar );\n\t\tthis._title( uiDialogTitle );\n\n\t\tthis.uiDialog.attr({\n\t\t\t\"aria-labelledby\": uiDialogTitle.attr( \"id\" )\n\t\t});\n\t},\n\n\t_title: function( title ) {\n\t\tif ( !this.options.title ) {\n\t\t\ttitle.html( \"&#160;\" );\n\t\t}\n\t\ttitle.text( this.options.title );\n\t},\n\n\t_createButtonPane: function() {\n\t\tthis.uiDialogButtonPane = $( \"<div>\" )\n\t\t\t.addClass( \"ui-dialog-buttonpane ui-widget-content ui-helper-clearfix\" );\n\n\t\tthis.uiButtonSet = $( \"<div>\" )\n\t\t\t.addClass( \"ui-dialog-buttonset\" )\n\t\t\t.appendTo( this.uiDialogButtonPane );\n\n\t\tthis._createButtons();\n\t},\n\n\t_createButtons: function() {\n\t\tvar that = this,\n\t\t\tbuttons = this.options.buttons;\n\n\t\t// if we already have a button pane, remove it\n\t\tthis.uiDialogButtonPane.remove();\n\t\tthis.uiButtonSet.empty();\n\n\t\tif ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {\n\t\t\tthis.uiDialog.removeClass( \"ui-dialog-buttons\" );\n\t\t\treturn;\n\t\t}\n\n\t\t$.each( buttons, function( name, props ) {\n\t\t\tvar click, buttonOptions;\n\t\t\tprops = $.isFunction( props ) ?\n\t\t\t\t{ click: props, text: name } :\n\t\t\t\tprops;\n\t\t\t// Default to a non-submitting button\n\t\t\tprops = $.extend( { type: \"button\" }, props );\n\t\t\t// Change the context for the click callback to be the main element\n\t\t\tclick = props.click;\n\t\t\tprops.click = function() {\n\t\t\t\tclick.apply( that.element[ 0 ], arguments );\n\t\t\t};\n\t\t\tbuttonOptions = {\n\t\t\t\ticons: props.icons,\n\t\t\t\ttext: props.showText\n\t\t\t};\n\t\t\tdelete props.icons;\n\t\t\tdelete props.showText;\n\t\t\t$( \"<button></button>\", props )\n\t\t\t\t.button( buttonOptions )\n\t\t\t\t.appendTo( that.uiButtonSet );\n\t\t});\n\t\tthis.uiDialog.addClass( \"ui-dialog-buttons\" );\n\t\tthis.uiDialogButtonPane.appendTo( this.uiDialog );\n\t},\n\n\t_makeDraggable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\tposition: ui.position,\n\t\t\t\toffset: ui.offset\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.draggable({\n\t\t\tcancel: \".ui-dialog-content, .ui-dialog-titlebar-close\",\n\t\t\thandle: \".ui-dialog-titlebar\",\n\t\t\tcontainment: \"document\",\n\t\t\tstart: function( event, ui ) {\n\t\t\t\t$( this ).addClass( \"ui-dialog-dragging\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"dragStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tdrag: function( event, ui ) {\n\t\t\t\tthat._trigger( \"drag\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar left = ui.offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = ui.offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + (left >= 0 ? \"+\" : \"\") + left + \" \" +\n\t\t\t\t\t\t\"top\" + (top >= 0 ? \"+\" : \"\") + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\t$( this ).removeClass( \"ui-dialog-dragging\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"dragStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t});\n\t},\n\n\t_makeResizable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options,\n\t\t\thandles = options.resizable,\n\t\t\t// .ui-resizable has position: relative defined in the stylesheet\n\t\t\t// but dialogs have to use absolute or fixed positioning\n\t\t\tposition = this.uiDialog.css(\"position\"),\n\t\t\tresizeHandles = typeof handles === \"string\" ?\n\t\t\t\thandles\t:\n\t\t\t\t\"n,e,s,w,se,sw,ne,nw\";\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\toriginalPosition: ui.originalPosition,\n\t\t\t\toriginalSize: ui.originalSize,\n\t\t\t\tposition: ui.position,\n\t\t\t\tsize: ui.size\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.resizable({\n\t\t\tcancel: \".ui-dialog-content\",\n\t\t\tcontainment: \"document\",\n\t\t\talsoResize: this.element,\n\t\t\tmaxWidth: options.maxWidth,\n\t\t\tmaxHeight: options.maxHeight,\n\t\t\tminWidth: options.minWidth,\n\t\t\tminHeight: this._minHeight(),\n\t\t\thandles: resizeHandles,\n\t\t\tstart: function( event, ui ) {\n\t\t\t\t$( this ).addClass( \"ui-dialog-resizing\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"resizeStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tresize: function( event, ui ) {\n\t\t\t\tthat._trigger( \"resize\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar offset = that.uiDialog.offset(),\n\t\t\t\t\tleft = offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.height = that.uiDialog.height();\n\t\t\t\toptions.width = that.uiDialog.width();\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + (left >= 0 ? \"+\" : \"\") + left + \" \" +\n\t\t\t\t\t\t\"top\" + (top >= 0 ? \"+\" : \"\") + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\t$( this ).removeClass( \"ui-dialog-resizing\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"resizeStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t})\n\t\t.css( \"position\", position );\n\t},\n\n\t_trackFocus: function() {\n\t\tthis._on( this.widget(), {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._makeFocusTarget();\n\t\t\t\tthis._focusedElement = $( event.target );\n\t\t\t}\n\t\t});\n\t},\n\n\t_makeFocusTarget: function() {\n\t\tthis._untrackInstance();\n\t\tthis._trackingInstances().unshift( this );\n\t},\n\n\t_untrackInstance: function() {\n\t\tvar instances = this._trackingInstances(),\n\t\t\texists = $.inArray( this, instances );\n\t\tif ( exists !== -1 ) {\n\t\t\tinstances.splice( exists, 1 );\n\t\t}\n\t},\n\n\t_trackingInstances: function() {\n\t\tvar instances = this.document.data( \"ui-dialog-instances\" );\n\t\tif ( !instances ) {\n\t\t\tinstances = [];\n\t\t\tthis.document.data( \"ui-dialog-instances\", instances );\n\t\t}\n\t\treturn instances;\n\t},\n\n\t_minHeight: function() {\n\t\tvar options = this.options;\n\n\t\treturn options.height === \"auto\" ?\n\t\t\toptions.minHeight :\n\t\t\tMath.min( options.minHeight, options.height );\n\t},\n\n\t_position: function() {\n\t\t// Need to show the dialog to get the actual offset in the position plugin\n\t\tvar isVisible = this.uiDialog.is( \":visible\" );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.show();\n\t\t}\n\t\tthis.uiDialog.position( this.options.position );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.hide();\n\t\t}\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tresize = false,\n\t\t\tresizableOptions = {};\n\n\t\t$.each( options, function( key, value ) {\n\t\t\tthat._setOption( key, value );\n\n\t\t\tif ( key in that.sizeRelatedOptions ) {\n\t\t\t\tresize = true;\n\t\t\t}\n\t\t\tif ( key in that.resizableRelatedOptions ) {\n\t\t\t\tresizableOptions[ key ] = value;\n\t\t\t}\n\t\t});\n\n\t\tif ( resize ) {\n\t\t\tthis._size();\n\t\t\tthis._position();\n\t\t}\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", resizableOptions );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar isDraggable, isResizable,\n\t\t\tuiDialog = this.uiDialog;\n\n\t\tif ( key === \"dialogClass\" ) {\n\t\t\tuiDialog\n\t\t\t\t.removeClass( this.options.dialogClass )\n\t\t\t\t.addClass( value );\n\t\t}\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.uiDialog.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"buttons\" ) {\n\t\t\tthis._createButtons();\n\t\t}\n\n\t\tif ( key === \"closeText\" ) {\n\t\t\tthis.uiDialogTitlebarClose.button({\n\t\t\t\t// Ensure that we always pass a string\n\t\t\t\tlabel: \"\" + value\n\t\t\t});\n\t\t}\n\n\t\tif ( key === \"draggable\" ) {\n\t\t\tisDraggable = uiDialog.is( \":data(ui-draggable)\" );\n\t\t\tif ( isDraggable && !value ) {\n\t\t\t\tuiDialog.draggable( \"destroy\" );\n\t\t\t}\n\n\t\t\tif ( !isDraggable && value ) {\n\t\t\t\tthis._makeDraggable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"position\" ) {\n\t\t\tthis._position();\n\t\t}\n\n\t\tif ( key === \"resizable\" ) {\n\t\t\t// currently resizable, becoming non-resizable\n\t\t\tisResizable = uiDialog.is( \":data(ui-resizable)\" );\n\t\t\tif ( isResizable && !value ) {\n\t\t\t\tuiDialog.resizable( \"destroy\" );\n\t\t\t}\n\n\t\t\t// currently resizable, changing handles\n\t\t\tif ( isResizable && typeof value === \"string\" ) {\n\t\t\t\tuiDialog.resizable( \"option\", \"handles\", value );\n\t\t\t}\n\n\t\t\t// currently non-resizable, becoming resizable\n\t\t\tif ( !isResizable && value !== false ) {\n\t\t\t\tthis._makeResizable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"title\" ) {\n\t\t\tthis._title( this.uiDialogTitlebar.find( \".ui-dialog-title\" ) );\n\t\t}\n\t},\n\n\t_size: function() {\n\t\t// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content\n\t\t// divs will both have width and height set, so we need to reset them\n\t\tvar nonContentHeight, minContentHeight, maxContentHeight,\n\t\t\toptions = this.options;\n\n\t\t// Reset content sizing\n\t\tthis.element.show().css({\n\t\t\twidth: \"auto\",\n\t\t\tminHeight: 0,\n\t\t\tmaxHeight: \"none\",\n\t\t\theight: 0\n\t\t});\n\n\t\tif ( options.minWidth > options.width ) {\n\t\t\toptions.width = options.minWidth;\n\t\t}\n\n\t\t// reset wrapper sizing\n\t\t// determine the height of all the non-content elements\n\t\tnonContentHeight = this.uiDialog.css({\n\t\t\t\theight: \"auto\",\n\t\t\t\twidth: options.width\n\t\t\t})\n\t\t\t.outerHeight();\n\t\tminContentHeight = Math.max( 0, options.minHeight - nonContentHeight );\n\t\tmaxContentHeight = typeof options.maxHeight === \"number\" ?\n\t\t\tMath.max( 0, options.maxHeight - nonContentHeight ) :\n\t\t\t\"none\";\n\n\t\tif ( options.height === \"auto\" ) {\n\t\t\tthis.element.css({\n\t\t\t\tminHeight: minContentHeight,\n\t\t\t\tmaxHeight: maxContentHeight,\n\t\t\t\theight: \"auto\"\n\t\t\t});\n\t\t} else {\n\t\t\tthis.element.height( Math.max( 0, options.height - nonContentHeight ) );\n\t\t}\n\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", \"minHeight\", this._minHeight() );\n\t\t}\n\t},\n\n\t_blockFrames: function() {\n\t\tthis.iframeBlocks = this.document.find( \"iframe\" ).map(function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css({\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: iframe.outerWidth(),\n\t\t\t\t\theight: iframe.outerHeight()\n\t\t\t\t})\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.offset( iframe.offset() )[0];\n\t\t});\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_allowInteraction: function( event ) {\n\t\tif ( $( event.target ).closest( \".ui-dialog\" ).length ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: Remove hack when datepicker implements\n\t\t// the .ui-front logic (#8989)\n\t\treturn !!$( event.target ).closest( \".ui-datepicker\" ).length;\n\t},\n\n\t_createOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We use a delay in case the overlay is created from an\n\t\t// event that we're going to be cancelling (#2804)\n\t\tvar isOpening = true;\n\t\tthis._delay(function() {\n\t\t\tisOpening = false;\n\t\t});\n\n\t\tif ( !this.document.data( \"ui-dialog-overlays\" ) ) {\n\n\t\t\t// Prevent use of anchors and inputs\n\t\t\t// Using _on() for an event handler shared across many instances is\n\t\t\t// safe because the dialogs stack and must be closed in reverse order\n\t\t\tthis._on( this.document, {\n\t\t\t\tfocusin: function( event ) {\n\t\t\t\t\tif ( isOpening ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !this._allowInteraction( event ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis._trackingInstances()[ 0 ]._focusTabbable();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.overlay = $( \"<div>\" )\n\t\t\t.addClass( \"ui-widget-overlay ui-front\" )\n\t\t\t.appendTo( this._appendTo() );\n\t\tthis._on( this.overlay, {\n\t\t\tmousedown: \"_keepFocus\"\n\t\t});\n\t\tthis.document.data( \"ui-dialog-overlays\",\n\t\t\t(this.document.data( \"ui-dialog-overlays\" ) || 0) + 1 );\n\t},\n\n\t_destroyOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.overlay ) {\n\t\t\tvar overlays = this.document.data( \"ui-dialog-overlays\" ) - 1;\n\n\t\t\tif ( !overlays ) {\n\t\t\t\tthis.document\n\t\t\t\t\t.unbind( \"focusin\" )\n\t\t\t\t\t.removeData( \"ui-dialog-overlays\" );\n\t\t\t} else {\n\t\t\t\tthis.document.data( \"ui-dialog-overlays\", overlays );\n\t\t\t}\n\n\t\t\tthis.overlay.remove();\n\t\t\tthis.overlay = null;\n\t\t}\n\t}\n});\n\n\n/*!\n * jQuery UI Droppable 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/droppable/\n */\n\n\n$.widget( \"ui.droppable\", {\n\tversion: \"1.11.4\",\n\twidgetEventPrefix: \"drop\",\n\toptions: {\n\t\taccept: \"*\",\n\t\tactiveClass: false,\n\t\taddClasses: true,\n\t\tgreedy: false,\n\t\thoverClass: false,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\n\t\t// callbacks\n\t\tactivate: null,\n\t\tdeactivate: null,\n\t\tdrop: null,\n\t\tout: null,\n\t\tover: null\n\t},\n\t_create: function() {\n\n\t\tvar proportions,\n\t\t\to = this.options,\n\t\t\taccept = o.accept;\n\n\t\tthis.isover = false;\n\t\tthis.isout = true;\n\n\t\tthis.accept = $.isFunction( accept ) ? accept : function( d ) {\n\t\t\treturn d.is( accept );\n\t\t};\n\n\t\tthis.proportions = function( /* valueToWrite */ ) {\n\t\t\tif ( arguments.length ) {\n\t\t\t\t// Store the droppable's proportions\n\t\t\t\tproportions = arguments[ 0 ];\n\t\t\t} else {\n\t\t\t\t// Retrieve or derive the droppable's proportions\n\t\t\t\treturn proportions ?\n\t\t\t\t\tproportions :\n\t\t\t\t\tproportions = {\n\t\t\t\t\t\twidth: this.element[ 0 ].offsetWidth,\n\t\t\t\t\t\theight: this.element[ 0 ].offsetHeight\n\t\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tthis._addToManager( o.scope );\n\n\t\to.addClasses && this.element.addClass( \"ui-droppable\" );\n\n\t},\n\n\t_addToManager: function( scope ) {\n\t\t// Add the reference and positions to the manager\n\t\t$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];\n\t\t$.ui.ddmanager.droppables[ scope ].push( this );\n\t},\n\n\t_splice: function( drop ) {\n\t\tvar i = 0;\n\t\tfor ( ; i < drop.length; i++ ) {\n\t\t\tif ( drop[ i ] === this ) {\n\t\t\t\tdrop.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\tthis._splice( drop );\n\n\t\tthis.element.removeClass( \"ui-droppable ui-droppable-disabled\" );\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\tif ( key === \"accept\" ) {\n\t\t\tthis.accept = $.isFunction( value ) ? value : function( d ) {\n\t\t\t\treturn d.is( value );\n\t\t\t};\n\t\t} else if ( key === \"scope\" ) {\n\t\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\t\tthis._splice( drop );\n\t\t\tthis._addToManager( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_activate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\t\tif ( this.options.activeClass ) {\n\t\t\tthis.element.addClass( this.options.activeClass );\n\t\t}\n\t\tif ( draggable ){\n\t\t\tthis._trigger( \"activate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_deactivate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\t\tif ( this.options.activeClass ) {\n\t\t\tthis.element.removeClass( this.options.activeClass );\n\t\t}\n\t\tif ( draggable ){\n\t\t\tthis._trigger( \"deactivate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_over: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.addClass( this.options.hoverClass );\n\t\t\t}\n\t\t\tthis._trigger( \"over\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_out: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.removeClass( this.options.hoverClass );\n\t\t\t}\n\t\t\tthis._trigger( \"out\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_drop: function( event, custom ) {\n\n\t\tvar draggable = custom || $.ui.ddmanager.current,\n\t\t\tchildrenIntersection = false;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.element.find( \":data(ui-droppable)\" ).not( \".ui-draggable-dragging\" ).each(function() {\n\t\t\tvar inst = $( this ).droppable( \"instance\" );\n\t\t\tif (\n\t\t\t\tinst.options.greedy &&\n\t\t\t\t!inst.options.disabled &&\n\t\t\t\tinst.options.scope === draggable.options.scope &&\n\t\t\t\tinst.accept.call( inst.element[ 0 ], ( draggable.currentItem || draggable.element ) ) &&\n\t\t\t\t$.ui.intersect( draggable, $.extend( inst, { offset: inst.element.offset() } ), inst.options.tolerance, event )\n\t\t\t) { childrenIntersection = true; return false; }\n\t\t});\n\t\tif ( childrenIntersection ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.removeClass( this.options.activeClass );\n\t\t\t}\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.removeClass( this.options.hoverClass );\n\t\t\t}\n\t\t\tthis._trigger( \"drop\", event, this.ui( draggable ) );\n\t\t\treturn this.element;\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tui: function( c ) {\n\t\treturn {\n\t\t\tdraggable: ( c.currentItem || c.element ),\n\t\t\thelper: c.helper,\n\t\t\tposition: c.position,\n\t\t\toffset: c.positionAbs\n\t\t};\n\t}\n\n});\n\n$.ui.intersect = (function() {\n\tfunction isOverAxis( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t}\n\n\treturn function( draggable, droppable, toleranceMode, event ) {\n\n\t\tif ( !droppable.offset ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar x1 = ( draggable.positionAbs || draggable.position.absolute ).left + draggable.margins.left,\n\t\t\ty1 = ( draggable.positionAbs || draggable.position.absolute ).top + draggable.margins.top,\n\t\t\tx2 = x1 + draggable.helperProportions.width,\n\t\t\ty2 = y1 + draggable.helperProportions.height,\n\t\t\tl = droppable.offset.left,\n\t\t\tt = droppable.offset.top,\n\t\t\tr = l + droppable.proportions().width,\n\t\t\tb = t + droppable.proportions().height;\n\n\t\tswitch ( toleranceMode ) {\n\t\tcase \"fit\":\n\t\t\treturn ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );\n\t\tcase \"intersect\":\n\t\t\treturn ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half\n\t\tcase \"pointer\":\n\t\t\treturn isOverAxis( event.pageY, t, droppable.proportions().height ) && isOverAxis( event.pageX, l, droppable.proportions().width );\n\t\tcase \"touch\":\n\t\t\treturn (\n\t\t\t\t( y1 >= t && y1 <= b ) || // Top edge touching\n\t\t\t\t( y2 >= t && y2 <= b ) || // Bottom edge touching\n\t\t\t\t( y1 < t && y2 > b ) // Surrounded vertically\n\t\t\t) && (\n\t\t\t\t( x1 >= l && x1 <= r ) || // Left edge touching\n\t\t\t\t( x2 >= l && x2 <= r ) || // Right edge touching\n\t\t\t\t( x1 < l && x2 > r ) // Surrounded horizontally\n\t\t\t);\n\t\tdefault:\n\t\t\treturn false;\n\t\t}\n\t};\n})();\n\n/*\n\tThis manager tracks offsets of draggables and droppables\n*/\n$.ui.ddmanager = {\n\tcurrent: null,\n\tdroppables: { \"default\": [] },\n\tprepareOffsets: function( t, event ) {\n\n\t\tvar i, j,\n\t\t\tm = $.ui.ddmanager.droppables[ t.options.scope ] || [],\n\t\t\ttype = event ? event.type : null, // workaround for #2317\n\t\t\tlist = ( t.currentItem || t.element ).find( \":data(ui-droppable)\" ).addBack();\n\n\t\tdroppablesLoop: for ( i = 0; i < m.length; i++ ) {\n\n\t\t\t// No disabled and non-accepted\n\t\t\tif ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ], ( t.currentItem || t.element ) ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Filter out elements in the current dragged item\n\t\t\tfor ( j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === m[ i ].element[ 0 ] ) {\n\t\t\t\t\tm[ i ].proportions().height = 0;\n\t\t\t\t\tcontinue droppablesLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tm[ i ].visible = m[ i ].element.css( \"display\" ) !== \"none\";\n\t\t\tif ( !m[ i ].visible ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Activate the droppable if used directly from draggables\n\t\t\tif ( type === \"mousedown\" ) {\n\t\t\t\tm[ i ]._activate.call( m[ i ], event );\n\t\t\t}\n\n\t\t\tm[ i ].offset = m[ i ].element.offset();\n\t\t\tm[ i ].proportions({ width: m[ i ].element[ 0 ].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight });\n\n\t\t}\n\n\t},\n\tdrop: function( draggable, event ) {\n\n\t\tvar dropped = false;\n\t\t// Create a copy of the droppables in case the list changes during the drop (#9116)\n\t\t$.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {\n\n\t\t\tif ( !this.options ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.options.disabled && this.visible && $.ui.intersect( draggable, this, this.options.tolerance, event ) ) {\n\t\t\t\tdropped = this._drop.call( this, event ) || dropped;\n\t\t\t}\n\n\t\t\tif ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {\n\t\t\t\tthis.isout = true;\n\t\t\t\tthis.isover = false;\n\t\t\t\tthis._deactivate.call( this, event );\n\t\t\t}\n\n\t\t});\n\t\treturn dropped;\n\n\t},\n\tdragStart: function( draggable, event ) {\n\t\t// Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)\n\t\tdraggable.element.parentsUntil( \"body\" ).bind( \"scroll.droppable\", function() {\n\t\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t\t}\n\t\t});\n\t},\n\tdrag: function( draggable, event ) {\n\n\t\t// If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.\n\t\tif ( draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\n\t\t// Run through all droppables and check their positions based on specific tolerance options\n\t\t$.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {\n\n\t\t\tif ( this.options.disabled || this.greedyChild || !this.visible ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar parentInstance, scope, parent,\n\t\t\t\tintersects = $.ui.intersect( draggable, this, this.options.tolerance, event ),\n\t\t\t\tc = !intersects && this.isover ? \"isout\" : ( intersects && !this.isover ? \"isover\" : null );\n\t\t\tif ( !c ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.options.greedy ) {\n\t\t\t\t// find droppable parents with same scope\n\t\t\t\tscope = this.options.scope;\n\t\t\t\tparent = this.element.parents( \":data(ui-droppable)\" ).filter(function() {\n\t\t\t\t\treturn $( this ).droppable( \"instance\" ).options.scope === scope;\n\t\t\t\t});\n\n\t\t\t\tif ( parent.length ) {\n\t\t\t\t\tparentInstance = $( parent[ 0 ] ).droppable( \"instance\" );\n\t\t\t\t\tparentInstance.greedyChild = ( c === \"isover\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// we just moved into a greedy child\n\t\t\tif ( parentInstance && c === \"isover\" ) {\n\t\t\t\tparentInstance.isover = false;\n\t\t\t\tparentInstance.isout = true;\n\t\t\t\tparentInstance._out.call( parentInstance, event );\n\t\t\t}\n\n\t\t\tthis[ c ] = true;\n\t\t\tthis[c === \"isout\" ? \"isover\" : \"isout\"] = false;\n\t\t\tthis[c === \"isover\" ? \"_over\" : \"_out\"].call( this, event );\n\n\t\t\t// we just moved out of a greedy child\n\t\t\tif ( parentInstance && c === \"isout\" ) {\n\t\t\t\tparentInstance.isout = false;\n\t\t\t\tparentInstance.isover = true;\n\t\t\t\tparentInstance._over.call( parentInstance, event );\n\t\t\t}\n\t\t});\n\n\t},\n\tdragStop: function( draggable, event ) {\n\t\tdraggable.element.parentsUntil( \"body\" ).unbind( \"scroll.droppable\" );\n\t\t// Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)\n\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\t}\n};\n\nvar droppable = $.ui.droppable;\n\n\n/*!\n * jQuery UI Effects 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/effects-core/\n */\n\n\nvar dataSpace = \"ui-effects-\",\n\n\t// Create a local jQuery because jQuery Color relies on it and the\n\t// global may not exist with AMD and a custom build (#10199)\n\tjQuery = $;\n\n$.effects = {\n\teffect: {}\n};\n\n/*!\n * jQuery Color Animations v2.1.2\n * https://github.com/jquery/jquery-color\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * Date: Wed Jan 16 08:47:09 2013 -0600\n */\n(function( jQuery, undefined ) {\n\n\tvar stepHooks = \"backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",\n\n\t// plusequals test for += 100 -= 100\n\trplusequals = /^([\\-+])=\\s*(\\d+\\.?\\d*)/,\n\t// a set of RE's that can match strings and generate color tuples.\n\tstringParsers = [ {\n\t\t\tre: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ],\n\t\t\t\t\texecResult[ 3 ],\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ] * 2.55,\n\t\t\t\t\texecResult[ 2 ] * 2.55,\n\t\t\t\t\texecResult[ 3 ] * 2.55,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ], 16 )\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9])([a-f0-9])([a-f0-9])/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ] + execResult[ 3 ], 16 )\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tspace: \"hsla\",\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ] / 100,\n\t\t\t\t\texecResult[ 3 ] / 100,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t} ],\n\n\t// jQuery.Color( )\n\tcolor = jQuery.Color = function( color, green, blue, alpha ) {\n\t\treturn new jQuery.Color.fn.parse( color, green, blue, alpha );\n\t},\n\tspaces = {\n\t\trgba: {\n\t\t\tprops: {\n\t\t\t\tred: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tgreen: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tblue: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thsla: {\n\t\t\tprops: {\n\t\t\t\thue: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"degrees\"\n\t\t\t\t},\n\t\t\t\tsaturation: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t},\n\t\t\t\tlightness: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tpropTypes = {\n\t\t\"byte\": {\n\t\t\tfloor: true,\n\t\t\tmax: 255\n\t\t},\n\t\t\"percent\": {\n\t\t\tmax: 1\n\t\t},\n\t\t\"degrees\": {\n\t\t\tmod: 360,\n\t\t\tfloor: true\n\t\t}\n\t},\n\tsupport = color.support = {},\n\n\t// element for support tests\n\tsupportElem = jQuery( \"<p>\" )[ 0 ],\n\n\t// colors = jQuery.Color.names\n\tcolors,\n\n\t// local aliases of functions called often\n\teach = jQuery.each;\n\n// determine rgba support immediately\nsupportElem.style.cssText = \"background-color:rgba(1,1,1,.5)\";\nsupport.rgba = supportElem.style.backgroundColor.indexOf( \"rgba\" ) > -1;\n\n// define cache name and alpha properties\n// for rgba and hsla spaces\neach( spaces, function( spaceName, space ) {\n\tspace.cache = \"_\" + spaceName;\n\tspace.props.alpha = {\n\t\tidx: 3,\n\t\ttype: \"percent\",\n\t\tdef: 1\n\t};\n});\n\nfunction clamp( value, prop, allowEmpty ) {\n\tvar type = propTypes[ prop.type ] || {};\n\n\tif ( value == null ) {\n\t\treturn (allowEmpty || !prop.def) ? null : prop.def;\n\t}\n\n\t// ~~ is an short way of doing floor for positive numbers\n\tvalue = type.floor ? ~~value : parseFloat( value );\n\n\t// IE will pass in empty strings as value for alpha,\n\t// which will hit this case\n\tif ( isNaN( value ) ) {\n\t\treturn prop.def;\n\t}\n\n\tif ( type.mod ) {\n\t\t// we add mod before modding to make sure that negatives values\n\t\t// get converted properly: -10 -> 350\n\t\treturn (value + type.mod) % type.mod;\n\t}\n\n\t// for now all property types without mod have min and max\n\treturn 0 > value ? 0 : type.max < value ? type.max : value;\n}\n\nfunction stringParse( string ) {\n\tvar inst = color(),\n\t\trgba = inst._rgba = [];\n\n\tstring = string.toLowerCase();\n\n\teach( stringParsers, function( i, parser ) {\n\t\tvar parsed,\n\t\t\tmatch = parser.re.exec( string ),\n\t\t\tvalues = match && parser.parse( match ),\n\t\t\tspaceName = parser.space || \"rgba\";\n\n\t\tif ( values ) {\n\t\t\tparsed = inst[ spaceName ]( values );\n\n\t\t\t// if this was an rgba parse the assignment might happen twice\n\t\t\t// oh well....\n\t\t\tinst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];\n\t\t\trgba = inst._rgba = parsed._rgba;\n\n\t\t\t// exit each( stringParsers ) here because we matched\n\t\t\treturn false;\n\t\t}\n\t});\n\n\t// Found a stringParser that handled it\n\tif ( rgba.length ) {\n\n\t\t// if this came from a parsed string, force \"transparent\" when alpha is 0\n\t\t// chrome, (and maybe others) return \"transparent\" as rgba(0,0,0,0)\n\t\tif ( rgba.join() === \"0,0,0,0\" ) {\n\t\t\tjQuery.extend( rgba, colors.transparent );\n\t\t}\n\t\treturn inst;\n\t}\n\n\t// named colors\n\treturn colors[ string ];\n}\n\ncolor.fn = jQuery.extend( color.prototype, {\n\tparse: function( red, green, blue, alpha ) {\n\t\tif ( red === undefined ) {\n\t\t\tthis._rgba = [ null, null, null, null ];\n\t\t\treturn this;\n\t\t}\n\t\tif ( red.jquery || red.nodeType ) {\n\t\t\tred = jQuery( red ).css( green );\n\t\t\tgreen = undefined;\n\t\t}\n\n\t\tvar inst = this,\n\t\t\ttype = jQuery.type( red ),\n\t\t\trgba = this._rgba = [];\n\n\t\t// more than 1 argument specified - assume ( red, green, blue, alpha )\n\t\tif ( green !== undefined ) {\n\t\t\tred = [ red, green, blue, alpha ];\n\t\t\ttype = \"array\";\n\t\t}\n\n\t\tif ( type === \"string\" ) {\n\t\t\treturn this.parse( stringParse( red ) || colors._default );\n\t\t}\n\n\t\tif ( type === \"array\" ) {\n\t\t\teach( spaces.rgba.props, function( key, prop ) {\n\t\t\t\trgba[ prop.idx ] = clamp( red[ prop.idx ], prop );\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( type === \"object\" ) {\n\t\t\tif ( red instanceof color ) {\n\t\t\t\teach( spaces, function( spaceName, space ) {\n\t\t\t\t\tif ( red[ space.cache ] ) {\n\t\t\t\t\t\tinst[ space.cache ] = red[ space.cache ].slice();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\teach( spaces, function( spaceName, space ) {\n\t\t\t\t\tvar cache = space.cache;\n\t\t\t\t\teach( space.props, function( key, prop ) {\n\n\t\t\t\t\t\t// if the cache doesn't exist, and we know how to convert\n\t\t\t\t\t\tif ( !inst[ cache ] && space.to ) {\n\n\t\t\t\t\t\t\t// if the value was null, we don't need to copy it\n\t\t\t\t\t\t\t// if the key was alpha, we don't need to copy it either\n\t\t\t\t\t\t\tif ( key === \"alpha\" || red[ key ] == null ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinst[ cache ] = space.to( inst._rgba );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// this is the only case where we allow nulls for ALL properties.\n\t\t\t\t\t\t// call clamp with alwaysAllowEmpty\n\t\t\t\t\t\tinst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );\n\t\t\t\t\t});\n\n\t\t\t\t\t// everything defined but alpha?\n\t\t\t\t\tif ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {\n\t\t\t\t\t\t// use the default of 1\n\t\t\t\t\t\tinst[ cache ][ 3 ] = 1;\n\t\t\t\t\t\tif ( space.from ) {\n\t\t\t\t\t\t\tinst._rgba = space.from( inst[ cache ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t},\n\tis: function( compare ) {\n\t\tvar is = color( compare ),\n\t\t\tsame = true,\n\t\t\tinst = this;\n\n\t\teach( spaces, function( _, space ) {\n\t\t\tvar localCache,\n\t\t\t\tisCache = is[ space.cache ];\n\t\t\tif (isCache) {\n\t\t\t\tlocalCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];\n\t\t\t\teach( space.props, function( _, prop ) {\n\t\t\t\t\tif ( isCache[ prop.idx ] != null ) {\n\t\t\t\t\t\tsame = ( isCache[ prop.idx ] === localCache[ prop.idx ] );\n\t\t\t\t\t\treturn same;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn same;\n\t\t});\n\t\treturn same;\n\t},\n\t_space: function() {\n\t\tvar used = [],\n\t\t\tinst = this;\n\t\teach( spaces, function( spaceName, space ) {\n\t\t\tif ( inst[ space.cache ] ) {\n\t\t\t\tused.push( spaceName );\n\t\t\t}\n\t\t});\n\t\treturn used.pop();\n\t},\n\ttransition: function( other, distance ) {\n\t\tvar end = color( other ),\n\t\t\tspaceName = end._space(),\n\t\t\tspace = spaces[ spaceName ],\n\t\t\tstartColor = this.alpha() === 0 ? color( \"transparent\" ) : this,\n\t\t\tstart = startColor[ space.cache ] || space.to( startColor._rgba ),\n\t\t\tresult = start.slice();\n\n\t\tend = end[ space.cache ];\n\t\teach( space.props, function( key, prop ) {\n\t\t\tvar index = prop.idx,\n\t\t\t\tstartValue = start[ index ],\n\t\t\t\tendValue = end[ index ],\n\t\t\t\ttype = propTypes[ prop.type ] || {};\n\n\t\t\t// if null, don't override start value\n\t\t\tif ( endValue === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// if null - use end\n\t\t\tif ( startValue === null ) {\n\t\t\t\tresult[ index ] = endValue;\n\t\t\t} else {\n\t\t\t\tif ( type.mod ) {\n\t\t\t\t\tif ( endValue - startValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue += type.mod;\n\t\t\t\t\t} else if ( startValue - endValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue -= type.mod;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );\n\t\t\t}\n\t\t});\n\t\treturn this[ spaceName ]( result );\n\t},\n\tblend: function( opaque ) {\n\t\t// if we are already opaque - return ourself\n\t\tif ( this._rgba[ 3 ] === 1 ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar rgb = this._rgba.slice(),\n\t\t\ta = rgb.pop(),\n\t\t\tblend = color( opaque )._rgba;\n\n\t\treturn color( jQuery.map( rgb, function( v, i ) {\n\t\t\treturn ( 1 - a ) * blend[ i ] + a * v;\n\t\t}));\n\t},\n\ttoRgbaString: function() {\n\t\tvar prefix = \"rgba(\",\n\t\t\trgba = jQuery.map( this._rgba, function( v, i ) {\n\t\t\t\treturn v == null ? ( i > 2 ? 1 : 0 ) : v;\n\t\t\t});\n\n\t\tif ( rgba[ 3 ] === 1 ) {\n\t\t\trgba.pop();\n\t\t\tprefix = \"rgb(\";\n\t\t}\n\n\t\treturn prefix + rgba.join() + \")\";\n\t},\n\ttoHslaString: function() {\n\t\tvar prefix = \"hsla(\",\n\t\t\thsla = jQuery.map( this.hsla(), function( v, i ) {\n\t\t\t\tif ( v == null ) {\n\t\t\t\t\tv = i > 2 ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\t// catch 1 and 2\n\t\t\t\tif ( i && i < 3 ) {\n\t\t\t\t\tv = Math.round( v * 100 ) + \"%\";\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t});\n\n\t\tif ( hsla[ 3 ] === 1 ) {\n\t\t\thsla.pop();\n\t\t\tprefix = \"hsl(\";\n\t\t}\n\t\treturn prefix + hsla.join() + \")\";\n\t},\n\ttoHexString: function( includeAlpha ) {\n\t\tvar rgba = this._rgba.slice(),\n\t\t\talpha = rgba.pop();\n\n\t\tif ( includeAlpha ) {\n\t\t\trgba.push( ~~( alpha * 255 ) );\n\t\t}\n\n\t\treturn \"#\" + jQuery.map( rgba, function( v ) {\n\n\t\t\t// default to 0 when nulls exist\n\t\t\tv = ( v || 0 ).toString( 16 );\n\t\t\treturn v.length === 1 ? \"0\" + v : v;\n\t\t}).join(\"\");\n\t},\n\ttoString: function() {\n\t\treturn this._rgba[ 3 ] === 0 ? \"transparent\" : this.toRgbaString();\n\t}\n});\ncolor.fn.parse.prototype = color.fn;\n\n// hsla conversions adapted from:\n// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021\n\nfunction hue2rgb( p, q, h ) {\n\th = ( h + 1 ) % 1;\n\tif ( h * 6 < 1 ) {\n\t\treturn p + ( q - p ) * h * 6;\n\t}\n\tif ( h * 2 < 1) {\n\t\treturn q;\n\t}\n\tif ( h * 3 < 2 ) {\n\t\treturn p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;\n\t}\n\treturn p;\n}\n\nspaces.hsla.to = function( rgba ) {\n\tif ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {\n\t\treturn [ null, null, null, rgba[ 3 ] ];\n\t}\n\tvar r = rgba[ 0 ] / 255,\n\t\tg = rgba[ 1 ] / 255,\n\t\tb = rgba[ 2 ] / 255,\n\t\ta = rgba[ 3 ],\n\t\tmax = Math.max( r, g, b ),\n\t\tmin = Math.min( r, g, b ),\n\t\tdiff = max - min,\n\t\tadd = max + min,\n\t\tl = add * 0.5,\n\t\th, s;\n\n\tif ( min === max ) {\n\t\th = 0;\n\t} else if ( r === max ) {\n\t\th = ( 60 * ( g - b ) / diff ) + 360;\n\t} else if ( g === max ) {\n\t\th = ( 60 * ( b - r ) / diff ) + 120;\n\t} else {\n\t\th = ( 60 * ( r - g ) / diff ) + 240;\n\t}\n\n\t// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%\n\t// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)\n\tif ( diff === 0 ) {\n\t\ts = 0;\n\t} else if ( l <= 0.5 ) {\n\t\ts = diff / add;\n\t} else {\n\t\ts = diff / ( 2 - add );\n\t}\n\treturn [ Math.round(h) % 360, s, l, a == null ? 1 : a ];\n};\n\nspaces.hsla.from = function( hsla ) {\n\tif ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {\n\t\treturn [ null, null, null, hsla[ 3 ] ];\n\t}\n\tvar h = hsla[ 0 ] / 360,\n\t\ts = hsla[ 1 ],\n\t\tl = hsla[ 2 ],\n\t\ta = hsla[ 3 ],\n\t\tq = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,\n\t\tp = 2 * l - q;\n\n\treturn [\n\t\tMath.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),\n\t\ta\n\t];\n};\n\neach( spaces, function( spaceName, space ) {\n\tvar props = space.props,\n\t\tcache = space.cache,\n\t\tto = space.to,\n\t\tfrom = space.from;\n\n\t// makes rgba() and hsla()\n\tcolor.fn[ spaceName ] = function( value ) {\n\n\t\t// generate a cache for this space if it doesn't exist\n\t\tif ( to && !this[ cache ] ) {\n\t\t\tthis[ cache ] = to( this._rgba );\n\t\t}\n\t\tif ( value === undefined ) {\n\t\t\treturn this[ cache ].slice();\n\t\t}\n\n\t\tvar ret,\n\t\t\ttype = jQuery.type( value ),\n\t\t\tarr = ( type === \"array\" || type === \"object\" ) ? value : arguments,\n\t\t\tlocal = this[ cache ].slice();\n\n\t\teach( props, function( key, prop ) {\n\t\t\tvar val = arr[ type === \"object\" ? key : prop.idx ];\n\t\t\tif ( val == null ) {\n\t\t\t\tval = local[ prop.idx ];\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = clamp( val, prop );\n\t\t});\n\n\t\tif ( from ) {\n\t\t\tret = color( from( local ) );\n\t\t\tret[ cache ] = local;\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn color( local );\n\t\t}\n\t};\n\n\t// makes red() green() blue() alpha() hue() saturation() lightness()\n\teach( props, function( key, prop ) {\n\t\t// alpha is included in more than one space\n\t\tif ( color.fn[ key ] ) {\n\t\t\treturn;\n\t\t}\n\t\tcolor.fn[ key ] = function( value ) {\n\t\t\tvar vtype = jQuery.type( value ),\n\t\t\t\tfn = ( key === \"alpha\" ? ( this._hsla ? \"hsla\" : \"rgba\" ) : spaceName ),\n\t\t\t\tlocal = this[ fn ](),\n\t\t\t\tcur = local[ prop.idx ],\n\t\t\t\tmatch;\n\n\t\t\tif ( vtype === \"undefined\" ) {\n\t\t\t\treturn cur;\n\t\t\t}\n\n\t\t\tif ( vtype === \"function\" ) {\n\t\t\t\tvalue = value.call( this, cur );\n\t\t\t\tvtype = jQuery.type( value );\n\t\t\t}\n\t\t\tif ( value == null && prop.empty ) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( vtype === \"string\" ) {\n\t\t\t\tmatch = rplusequals.exec( value );\n\t\t\t\tif ( match ) {\n\t\t\t\t\tvalue = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === \"+\" ? 1 : -1 );\n\t\t\t\t}\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = value;\n\t\t\treturn this[ fn ]( local );\n\t\t};\n\t});\n});\n\n// add cssHook and .fx.step function for each named hook.\n// accept a space separated string of properties\ncolor.hook = function( hook ) {\n\tvar hooks = hook.split( \" \" );\n\teach( hooks, function( i, hook ) {\n\t\tjQuery.cssHooks[ hook ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar parsed, curElem,\n\t\t\t\t\tbackgroundColor = \"\";\n\n\t\t\t\tif ( value !== \"transparent\" && ( jQuery.type( value ) !== \"string\" || ( parsed = stringParse( value ) ) ) ) {\n\t\t\t\t\tvalue = color( parsed || value );\n\t\t\t\t\tif ( !support.rgba && value._rgba[ 3 ] !== 1 ) {\n\t\t\t\t\t\tcurElem = hook === \"backgroundColor\" ? elem.parentNode : elem;\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t(backgroundColor === \"\" || backgroundColor === \"transparent\") &&\n\t\t\t\t\t\t\tcurElem && curElem.style\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tbackgroundColor = jQuery.css( curElem, \"backgroundColor\" );\n\t\t\t\t\t\t\t\tcurElem = curElem.parentNode;\n\t\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvalue = value.blend( backgroundColor && backgroundColor !== \"transparent\" ?\n\t\t\t\t\t\t\tbackgroundColor :\n\t\t\t\t\t\t\t\"_default\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = value.toRgbaString();\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\telem.style[ hook ] = value;\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// wrapped to prevent IE from throwing errors on \"invalid\" values like 'auto' or 'inherit'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tjQuery.fx.step[ hook ] = function( fx ) {\n\t\t\tif ( !fx.colorInit ) {\n\t\t\t\tfx.start = color( fx.elem, hook );\n\t\t\t\tfx.end = color( fx.end );\n\t\t\t\tfx.colorInit = true;\n\t\t\t}\n\t\t\tjQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );\n\t\t};\n\t});\n\n};\n\ncolor.hook( stepHooks );\n\njQuery.cssHooks.borderColor = {\n\texpand: function( value ) {\n\t\tvar expanded = {};\n\n\t\teach( [ \"Top\", \"Right\", \"Bottom\", \"Left\" ], function( i, part ) {\n\t\t\texpanded[ \"border\" + part + \"Color\" ] = value;\n\t\t});\n\t\treturn expanded;\n\t}\n};\n\n// Basic color names only.\n// Usage of any of the other color names requires adding yourself or including\n// jquery.color.svg-names.js.\ncolors = jQuery.Color.names = {\n\t// 4.1. Basic color keywords\n\taqua: \"#00ffff\",\n\tblack: \"#000000\",\n\tblue: \"#0000ff\",\n\tfuchsia: \"#ff00ff\",\n\tgray: \"#808080\",\n\tgreen: \"#008000\",\n\tlime: \"#00ff00\",\n\tmaroon: \"#800000\",\n\tnavy: \"#000080\",\n\tolive: \"#808000\",\n\tpurple: \"#800080\",\n\tred: \"#ff0000\",\n\tsilver: \"#c0c0c0\",\n\tteal: \"#008080\",\n\twhite: \"#ffffff\",\n\tyellow: \"#ffff00\",\n\n\t// 4.2.3. \"transparent\" color keyword\n\ttransparent: [ null, null, null, 0 ],\n\n\t_default: \"#ffffff\"\n};\n\n})( jQuery );\n\n/******************************************************************************/\n/****************************** CLASS ANIMATIONS ******************************/\n/******************************************************************************/\n(function() {\n\nvar classAnimationActions = [ \"add\", \"remove\", \"toggle\" ],\n\tshorthandStyles = {\n\t\tborder: 1,\n\t\tborderBottom: 1,\n\t\tborderColor: 1,\n\t\tborderLeft: 1,\n\t\tborderRight: 1,\n\t\tborderTop: 1,\n\t\tborderWidth: 1,\n\t\tmargin: 1,\n\t\tpadding: 1\n\t};\n\n$.each([ \"borderLeftStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderTopStyle\" ], function( _, prop ) {\n\t$.fx.step[ prop ] = function( fx ) {\n\t\tif ( fx.end !== \"none\" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {\n\t\t\tjQuery.style( fx.elem, prop, fx.end );\n\t\t\tfx.setAttr = true;\n\t\t}\n\t};\n});\n\nfunction getElementStyles( elem ) {\n\tvar key, len,\n\t\tstyle = elem.ownerDocument.defaultView ?\n\t\t\telem.ownerDocument.defaultView.getComputedStyle( elem, null ) :\n\t\t\telem.currentStyle,\n\t\tstyles = {};\n\n\tif ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {\n\t\tlen = style.length;\n\t\twhile ( len-- ) {\n\t\t\tkey = style[ len ];\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ $.camelCase( key ) ] = style[ key ];\n\t\t\t}\n\t\t}\n\t// support: Opera, IE <9\n\t} else {\n\t\tfor ( key in style ) {\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ key ] = style[ key ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn styles;\n}\n\nfunction styleDifference( oldStyle, newStyle ) {\n\tvar diff = {},\n\t\tname, value;\n\n\tfor ( name in newStyle ) {\n\t\tvalue = newStyle[ name ];\n\t\tif ( oldStyle[ name ] !== value ) {\n\t\t\tif ( !shorthandStyles[ name ] ) {\n\t\t\t\tif ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {\n\t\t\t\t\tdiff[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n// support: jQuery <1.8\nif ( !$.fn.addBack ) {\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n$.effects.animateClass = function( value, duration, easing, callback ) {\n\tvar o = $.speed( duration, easing, callback );\n\n\treturn this.queue( function() {\n\t\tvar animated = $( this ),\n\t\t\tbaseClass = animated.attr( \"class\" ) || \"\",\n\t\t\tapplyClassChange,\n\t\t\tallAnimations = o.children ? animated.find( \"*\" ).addBack() : animated;\n\n\t\t// map the animated objects to store the original styles.\n\t\tallAnimations = allAnimations.map(function() {\n\t\t\tvar el = $( this );\n\t\t\treturn {\n\t\t\t\tel: el,\n\t\t\t\tstart: getElementStyles( this )\n\t\t\t};\n\t\t});\n\n\t\t// apply class change\n\t\tapplyClassChange = function() {\n\t\t\t$.each( classAnimationActions, function(i, action) {\n\t\t\t\tif ( value[ action ] ) {\n\t\t\t\t\tanimated[ action + \"Class\" ]( value[ action ] );\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\tapplyClassChange();\n\n\t\t// map all animated objects again - calculate new styles and diff\n\t\tallAnimations = allAnimations.map(function() {\n\t\t\tthis.end = getElementStyles( this.el[ 0 ] );\n\t\t\tthis.diff = styleDifference( this.start, this.end );\n\t\t\treturn this;\n\t\t});\n\n\t\t// apply original class\n\t\tanimated.attr( \"class\", baseClass );\n\n\t\t// map all animated objects again - this time collecting a promise\n\t\tallAnimations = allAnimations.map(function() {\n\t\t\tvar styleInfo = this,\n\t\t\t\tdfd = $.Deferred(),\n\t\t\t\topts = $.extend({}, o, {\n\t\t\t\t\tqueue: false,\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tdfd.resolve( styleInfo );\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tthis.el.animate( this.diff, opts );\n\t\t\treturn dfd.promise();\n\t\t});\n\n\t\t// once all animations have completed:\n\t\t$.when.apply( $, allAnimations.get() ).done(function() {\n\n\t\t\t// set the final class\n\t\t\tapplyClassChange();\n\n\t\t\t// for each animated element,\n\t\t\t// clear all css properties that were animated\n\t\t\t$.each( arguments, function() {\n\t\t\t\tvar el = this.el;\n\t\t\t\t$.each( this.diff, function(key) {\n\t\t\t\t\tel.css( key, \"\" );\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// this is guarnteed to be there if you use jQuery.speed()\n\t\t\t// it also handles dequeuing the next anim...\n\t\t\to.complete.call( animated[ 0 ] );\n\t\t});\n\t});\n};\n\n$.fn.extend({\n\taddClass: (function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn speed ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ add: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t})( $.fn.addClass ),\n\n\tremoveClass: (function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn arguments.length > 1 ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ remove: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t})( $.fn.removeClass ),\n\n\ttoggleClass: (function( orig ) {\n\t\treturn function( classNames, force, speed, easing, callback ) {\n\t\t\tif ( typeof force === \"boolean\" || force === undefined ) {\n\t\t\t\tif ( !speed ) {\n\t\t\t\t\t// without speed parameter\n\t\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t\t(force ? { add: classNames } : { remove: classNames }),\n\t\t\t\t\t\tspeed, easing, callback );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// without force parameter\n\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t{ toggle: classNames }, force, speed, easing );\n\t\t\t}\n\t\t};\n\t})( $.fn.toggleClass ),\n\n\tswitchClass: function( remove, add, speed, easing, callback) {\n\t\treturn $.effects.animateClass.call( this, {\n\t\t\tadd: add,\n\t\t\tremove: remove\n\t\t}, speed, easing, callback );\n\t}\n});\n\n})();\n\n/******************************************************************************/\n/*********************************** EFFECTS **********************************/\n/******************************************************************************/\n\n(function() {\n\n$.extend( $.effects, {\n\tversion: \"1.11.4\",\n\n\t// Saves a set of properties in a data storage\n\tsave: function( element, set ) {\n\t\tfor ( var i = 0; i < set.length; i++ ) {\n\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\telement.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Restores a set of previously saved properties from a data storage\n\trestore: function( element, set ) {\n\t\tvar val, i;\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\tval = element.data( dataSpace + set[ i ] );\n\t\t\t\t// support: jQuery 1.6.2\n\t\t\t\t// http://bugs.jquery.com/ticket/9917\n\t\t\t\t// jQuery 1.6.2 incorrectly returns undefined for any falsy value.\n\t\t\t\t// We can't differentiate between \"\" and 0 here, so we just assume\n\t\t\t\t// empty string since it's likely to be a more common value...\n\t\t\t\tif ( val === undefined ) {\n\t\t\t\t\tval = \"\";\n\t\t\t\t}\n\t\t\t\telement.css( set[ i ], val );\n\t\t\t}\n\t\t}\n\t},\n\n\tsetMode: function( el, mode ) {\n\t\tif (mode === \"toggle\") {\n\t\t\tmode = el.is( \":hidden\" ) ? \"show\" : \"hide\";\n\t\t}\n\t\treturn mode;\n\t},\n\n\t// Translates a [top,left] array into a baseline value\n\t// this should be a little more flexible in the future to handle a string & hash\n\tgetBaseline: function( origin, original ) {\n\t\tvar y, x;\n\t\tswitch ( origin[ 0 ] ) {\n\t\t\tcase \"top\": y = 0; break;\n\t\t\tcase \"middle\": y = 0.5; break;\n\t\t\tcase \"bottom\": y = 1; break;\n\t\t\tdefault: y = origin[ 0 ] / original.height;\n\t\t}\n\t\tswitch ( origin[ 1 ] ) {\n\t\t\tcase \"left\": x = 0; break;\n\t\t\tcase \"center\": x = 0.5; break;\n\t\t\tcase \"right\": x = 1; break;\n\t\t\tdefault: x = origin[ 1 ] / original.width;\n\t\t}\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\n\t// Wraps the element around a wrapper that copies position properties\n\tcreateWrapper: function( element ) {\n\n\t\t// if the element is already wrapped, return it\n\t\tif ( element.parent().is( \".ui-effects-wrapper\" )) {\n\t\t\treturn element.parent();\n\t\t}\n\n\t\t// wrap the element\n\t\tvar props = {\n\t\t\t\twidth: element.outerWidth(true),\n\t\t\t\theight: element.outerHeight(true),\n\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t},\n\t\t\twrapper = $( \"<div></div>\" )\n\t\t\t\t.addClass( \"ui-effects-wrapper\" )\n\t\t\t\t.css({\n\t\t\t\t\tfontSize: \"100%\",\n\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\tborder: \"none\",\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tpadding: 0\n\t\t\t\t}),\n\t\t\t// Store the size in case width/height are defined in % - Fixes #5245\n\t\t\tsize = {\n\t\t\t\twidth: element.width(),\n\t\t\t\theight: element.height()\n\t\t\t},\n\t\t\tactive = document.activeElement;\n\n\t\t// support: Firefox\n\t\t// Firefox incorrectly exposes anonymous content\n\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=561664\n\t\ttry {\n\t\t\tactive.id;\n\t\t} catch ( e ) {\n\t\t\tactive = document.body;\n\t\t}\n\n\t\telement.wrap( wrapper );\n\n\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t$( active ).focus();\n\t\t}\n\n\t\twrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element\n\n\t\t// transfer positioning properties to the wrapper\n\t\tif ( element.css( \"position\" ) === \"static\" ) {\n\t\t\twrapper.css({ position: \"relative\" });\n\t\t\telement.css({ position: \"relative\" });\n\t\t} else {\n\t\t\t$.extend( props, {\n\t\t\t\tposition: element.css( \"position\" ),\n\t\t\t\tzIndex: element.css( \"z-index\" )\n\t\t\t});\n\t\t\t$.each([ \"top\", \"left\", \"bottom\", \"right\" ], function(i, pos) {\n\t\t\t\tprops[ pos ] = element.css( pos );\n\t\t\t\tif ( isNaN( parseInt( props[ pos ], 10 ) ) ) {\n\t\t\t\t\tprops[ pos ] = \"auto\";\n\t\t\t\t}\n\t\t\t});\n\t\t\telement.css({\n\t\t\t\tposition: \"relative\",\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tright: \"auto\",\n\t\t\t\tbottom: \"auto\"\n\t\t\t});\n\t\t}\n\t\telement.css(size);\n\n\t\treturn wrapper.css( props ).show();\n\t},\n\n\tremoveWrapper: function( element ) {\n\t\tvar active = document.activeElement;\n\n\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\telement.parent().replaceWith( element );\n\n\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t$( active ).focus();\n\t\t\t}\n\t\t}\n\n\t\treturn element;\n\t},\n\n\tsetTransition: function( element, list, factor, value ) {\n\t\tvalue = value || {};\n\t\t$.each( list, function( i, x ) {\n\t\t\tvar unit = element.cssUnit( x );\n\t\t\tif ( unit[ 0 ] > 0 ) {\n\t\t\t\tvalue[ x ] = unit[ 0 ] * factor + unit[ 1 ];\n\t\t\t}\n\t\t});\n\t\treturn value;\n\t}\n});\n\n// return an effect options object for the given parameters:\nfunction _normalizeArguments( effect, options, speed, callback ) {\n\n\t// allow passing all options as the first parameter\n\tif ( $.isPlainObject( effect ) ) {\n\t\toptions = effect;\n\t\teffect = effect.effect;\n\t}\n\n\t// convert to an object\n\teffect = { effect: effect };\n\n\t// catch (effect, null, ...)\n\tif ( options == null ) {\n\t\toptions = {};\n\t}\n\n\t// catch (effect, callback)\n\tif ( $.isFunction( options ) ) {\n\t\tcallback = options;\n\t\tspeed = null;\n\t\toptions = {};\n\t}\n\n\t// catch (effect, speed, ?)\n\tif ( typeof options === \"number\" || $.fx.speeds[ options ] ) {\n\t\tcallback = speed;\n\t\tspeed = options;\n\t\toptions = {};\n\t}\n\n\t// catch (effect, options, callback)\n\tif ( $.isFunction( speed ) ) {\n\t\tcallback = speed;\n\t\tspeed = null;\n\t}\n\n\t// add options to effect\n\tif ( options ) {\n\t\t$.extend( effect, options );\n\t}\n\n\tspeed = speed || options.duration;\n\teffect.duration = $.fx.off ? 0 :\n\t\ttypeof speed === \"number\" ? speed :\n\t\tspeed in $.fx.speeds ? $.fx.speeds[ speed ] :\n\t\t$.fx.speeds._default;\n\n\teffect.complete = callback || options.complete;\n\n\treturn effect;\n}\n\nfunction standardAnimationOption( option ) {\n\t// Valid standard speeds (nothing, number, named speed)\n\tif ( !option || typeof option === \"number\" || $.fx.speeds[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Invalid strings - treat as \"normal\" speed\n\tif ( typeof option === \"string\" && !$.effects.effect[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Complete callback\n\tif ( $.isFunction( option ) ) {\n\t\treturn true;\n\t}\n\n\t// Options hash (but not naming an effect)\n\tif ( typeof option === \"object\" && !option.effect ) {\n\t\treturn true;\n\t}\n\n\t// Didn't match any standard API\n\treturn false;\n}\n\n$.fn.extend({\n\teffect: function( /* effect, options, speed, callback */ ) {\n\t\tvar args = _normalizeArguments.apply( this, arguments ),\n\t\t\tmode = args.mode,\n\t\t\tqueue = args.queue,\n\t\t\teffectMethod = $.effects.effect[ args.effect ];\n\n\t\tif ( $.fx.off || !effectMethod ) {\n\t\t\t// delegate to the original method (e.g., .show()) if possible\n\t\t\tif ( mode ) {\n\t\t\t\treturn this[ mode ]( args.duration, args.complete );\n\t\t\t} else {\n\t\t\t\treturn this.each( function() {\n\t\t\t\t\tif ( args.complete ) {\n\t\t\t\t\t\targs.complete.call( this );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfunction run( next ) {\n\t\t\tvar elem = $( this ),\n\t\t\t\tcomplete = args.complete,\n\t\t\t\tmode = args.mode;\n\n\t\t\tfunction done() {\n\t\t\t\tif ( $.isFunction( complete ) ) {\n\t\t\t\t\tcomplete.call( elem[0] );\n\t\t\t\t}\n\t\t\t\tif ( $.isFunction( next ) ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the element already has the correct final state, delegate to\n\t\t\t// the core methods so the internal tracking of \"olddisplay\" works.\n\t\t\tif ( elem.is( \":hidden\" ) ? mode === \"hide\" : mode === \"show\" ) {\n\t\t\t\telem[ mode ]();\n\t\t\t\tdone();\n\t\t\t} else {\n\t\t\t\teffectMethod.call( elem[0], args, done );\n\t\t\t}\n\t\t}\n\n\t\treturn queue === false ? this.each( run ) : this.queue( queue || \"fx\", run );\n\t},\n\n\tshow: (function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"show\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t})( $.fn.show ),\n\n\thide: (function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"hide\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t})( $.fn.hide ),\n\n\ttoggle: (function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) || typeof option === \"boolean\" ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"toggle\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t})( $.fn.toggle ),\n\n\t// helper functions\n\tcssUnit: function(key) {\n\t\tvar style = this.css( key ),\n\t\t\tval = [];\n\n\t\t$.each( [ \"em\", \"px\", \"%\", \"pt\" ], function( i, unit ) {\n\t\t\tif ( style.indexOf( unit ) > 0 ) {\n\t\t\t\tval = [ parseFloat( style ), unit ];\n\t\t\t}\n\t\t});\n\t\treturn val;\n\t}\n});\n\n})();\n\n/******************************************************************************/\n/*********************************** EASING ***********************************/\n/******************************************************************************/\n\n(function() {\n\n// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)\n\nvar baseEasings = {};\n\n$.each( [ \"Quad\", \"Cubic\", \"Quart\", \"Quint\", \"Expo\" ], function( i, name ) {\n\tbaseEasings[ name ] = function( p ) {\n\t\treturn Math.pow( p, i + 2 );\n\t};\n});\n\n$.extend( baseEasings, {\n\tSine: function( p ) {\n\t\treturn 1 - Math.cos( p * Math.PI / 2 );\n\t},\n\tCirc: function( p ) {\n\t\treturn 1 - Math.sqrt( 1 - p * p );\n\t},\n\tElastic: function( p ) {\n\t\treturn p === 0 || p === 1 ? p :\n\t\t\t-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );\n\t},\n\tBack: function( p ) {\n\t\treturn p * p * ( 3 * p - 2 );\n\t},\n\tBounce: function( p ) {\n\t\tvar pow2,\n\t\t\tbounce = 4;\n\n\t\twhile ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}\n\t\treturn 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );\n\t}\n});\n\n$.each( baseEasings, function( name, easeIn ) {\n\t$.easing[ \"easeIn\" + name ] = easeIn;\n\t$.easing[ \"easeOut\" + name ] = function( p ) {\n\t\treturn 1 - easeIn( 1 - p );\n\t};\n\t$.easing[ \"easeInOut\" + name ] = function( p ) {\n\t\treturn p < 0.5 ?\n\t\t\teaseIn( p * 2 ) / 2 :\n\t\t\t1 - easeIn( p * -2 + 2 ) / 2;\n\t};\n});\n\n})();\n\nvar effect = $.effects;\n\n\n/*!\n * jQuery UI Effects Blind 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/blind-effect/\n */\n\n\nvar effectBlind = $.effects.effect.blind = function( o, done ) {\n\t// Create element\n\tvar el = $( this ),\n\t\trvertical = /up|down|vertical/,\n\t\trpositivemotion = /up|left|vertical|horizontal/,\n\t\tprops = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"height\", \"width\" ],\n\t\tmode = $.effects.setMode( el, o.mode || \"hide\" ),\n\t\tdirection = o.direction || \"up\",\n\t\tvertical = rvertical.test( direction ),\n\t\tref = vertical ? \"height\" : \"width\",\n\t\tref2 = vertical ? \"top\" : \"left\",\n\t\tmotion = rpositivemotion.test( direction ),\n\t\tanimation = {},\n\t\tshow = mode === \"show\",\n\t\twrapper, distance, margin;\n\n\t// if already wrapped, the wrapper's properties are my property. #6245\n\tif ( el.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t$.effects.save( el.parent(), props );\n\t} else {\n\t\t$.effects.save( el, props );\n\t}\n\tel.show();\n\twrapper = $.effects.createWrapper( el ).css({\n\t\toverflow: \"hidden\"\n\t});\n\n\tdistance = wrapper[ ref ]();\n\tmargin = parseFloat( wrapper.css( ref2 ) ) || 0;\n\n\tanimation[ ref ] = show ? distance : 0;\n\tif ( !motion ) {\n\t\tel\n\t\t\t.css( vertical ? \"bottom\" : \"right\", 0 )\n\t\t\t.css( vertical ? \"top\" : \"left\", \"auto\" )\n\t\t\t.css({ position: \"absolute\" });\n\n\t\tanimation[ ref2 ] = show ? margin : distance + margin;\n\t}\n\n\t// start at 0 if we are showing\n\tif ( show ) {\n\t\twrapper.css( ref, 0 );\n\t\tif ( !motion ) {\n\t\t\twrapper.css( ref2, margin + distance );\n\t\t}\n\t}\n\n\t// Animate\n\twrapper.animate( animation, {\n\t\tduration: o.duration,\n\t\teasing: o.easing,\n\t\tqueue: false,\n\t\tcomplete: function() {\n\t\t\tif ( mode === \"hide\" ) {\n\t\t\t\tel.hide();\n\t\t\t}\n\t\t\t$.effects.restore( el, props );\n\t\t\t$.effects.removeWrapper( el );\n\t\t\tdone();\n\t\t}\n\t});\n};\n\n\n/*!\n * jQuery UI Effects Bounce 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/bounce-effect/\n */\n\n\nvar effectBounce = $.effects.effect.bounce = function( o, done ) {\n\tvar el = $( this ),\n\t\tprops = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"height\", \"width\" ],\n\n\t\t// defaults:\n\t\tmode = $.effects.setMode( el, o.mode || \"effect\" ),\n\t\thide = mode === \"hide\",\n\t\tshow = mode === \"show\",\n\t\tdirection = o.direction || \"up\",\n\t\tdistance = o.distance,\n\t\ttimes = o.times || 5,\n\n\t\t// number of internal animations\n\t\tanims = times * 2 + ( show || hide ? 1 : 0 ),\n\t\tspeed = o.duration / anims,\n\t\teasing = o.easing,\n\n\t\t// utility:\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ),\n\t\ti,\n\t\tupAnim,\n\t\tdownAnim,\n\n\t\t// we will need to re-assemble the queue to stack our animations in place\n\t\tqueue = el.queue(),\n\t\tqueuelen = queue.length;\n\n\t// Avoid touching opacity to prevent clearType and PNG issues in IE\n\tif ( show || hide ) {\n\t\tprops.push( \"opacity\" );\n\t}\n\n\t$.effects.save( el, props );\n\tel.show();\n\t$.effects.createWrapper( el ); // Create Wrapper\n\n\t// default distance for the BIGGEST bounce is the outer Distance / 3\n\tif ( !distance ) {\n\t\tdistance = el[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]() / 3;\n\t}\n\n\tif ( show ) {\n\t\tdownAnim = { opacity: 1 };\n\t\tdownAnim[ ref ] = 0;\n\n\t\t// if we are showing, force opacity 0 and set the initial position\n\t\t// then do the \"first\" animation\n\t\tel.css( \"opacity\", 0 )\n\t\t\t.css( ref, motion ? -distance * 2 : distance * 2 )\n\t\t\t.animate( downAnim, speed, easing );\n\t}\n\n\t// start at the smallest distance if we are hiding\n\tif ( hide ) {\n\t\tdistance = distance / Math.pow( 2, times - 1 );\n\t}\n\n\tdownAnim = {};\n\tdownAnim[ ref ] = 0;\n\t// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here\n\tfor ( i = 0; i < times; i++ ) {\n\t\tupAnim = {};\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\tel.animate( upAnim, speed, easing )\n\t\t\t.animate( downAnim, speed, easing );\n\n\t\tdistance = hide ? distance * 2 : distance / 2;\n\t}\n\n\t// Last Bounce when Hiding\n\tif ( hide ) {\n\t\tupAnim = { opacity: 0 };\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\tel.animate( upAnim, speed, easing );\n\t}\n\n\tel.queue(function() {\n\t\tif ( hide ) {\n\t\t\tel.hide();\n\t\t}\n\t\t$.effects.restore( el, props );\n\t\t$.effects.removeWrapper( el );\n\t\tdone();\n\t});\n\n\t// inject all the animations we just queued to be first in line (after \"inprogress\")\n\tif ( queuelen > 1) {\n\t\tqueue.splice.apply( queue,\n\t\t\t[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );\n\t}\n\tel.dequeue();\n\n};\n\n\n/*!\n * jQuery UI Effects Clip 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/clip-effect/\n */\n\n\nvar effectClip = $.effects.effect.clip = function( o, done ) {\n\t// Create element\n\tvar el = $( this ),\n\t\tprops = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"height\", \"width\" ],\n\t\tmode = $.effects.setMode( el, o.mode || \"hide\" ),\n\t\tshow = mode === \"show\",\n\t\tdirection = o.direction || \"vertical\",\n\t\tvert = direction === \"vertical\",\n\t\tsize = vert ? \"height\" : \"width\",\n\t\tposition = vert ? \"top\" : \"left\",\n\t\tanimation = {},\n\t\twrapper, animate, distance;\n\n\t// Save & Show\n\t$.effects.save( el, props );\n\tel.show();\n\n\t// Create Wrapper\n\twrapper = $.effects.createWrapper( el ).css({\n\t\toverflow: \"hidden\"\n\t});\n\tanimate = ( el[0].tagName === \"IMG\" ) ? wrapper : el;\n\tdistance = animate[ size ]();\n\n\t// Shift\n\tif ( show ) {\n\t\tanimate.css( size, 0 );\n\t\tanimate.css( position, distance / 2 );\n\t}\n\n\t// Create Animation Object:\n\tanimation[ size ] = show ? distance : 0;\n\tanimation[ position ] = show ? 0 : distance / 2;\n\n\t// Animate\n\tanimate.animate( animation, {\n\t\tqueue: false,\n\t\tduration: o.duration,\n\t\teasing: o.easing,\n\t\tcomplete: function() {\n\t\t\tif ( !show ) {\n\t\t\t\tel.hide();\n\t\t\t}\n\t\t\t$.effects.restore( el, props );\n\t\t\t$.effects.removeWrapper( el );\n\t\t\tdone();\n\t\t}\n\t});\n\n};\n\n\n/*!\n * jQuery UI Effects Drop 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/drop-effect/\n */\n\n\nvar effectDrop = $.effects.effect.drop = function( o, done ) {\n\n\tvar el = $( this ),\n\t\tprops = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"opacity\", \"height\", \"width\" ],\n\t\tmode = $.effects.setMode( el, o.mode || \"hide\" ),\n\t\tshow = mode === \"show\",\n\t\tdirection = o.direction || \"left\",\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ) ? \"pos\" : \"neg\",\n\t\tanimation = {\n\t\t\topacity: show ? 1 : 0\n\t\t},\n\t\tdistance;\n\n\t// Adjust\n\t$.effects.save( el, props );\n\tel.show();\n\t$.effects.createWrapper( el );\n\n\tdistance = o.distance || el[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ) / 2;\n\n\tif ( show ) {\n\t\tel\n\t\t\t.css( \"opacity\", 0 )\n\t\t\t.css( ref, motion === \"pos\" ? -distance : distance );\n\t}\n\n\t// Animation\n\tanimation[ ref ] = ( show ?\n\t\t( motion === \"pos\" ? \"+=\" : \"-=\" ) :\n\t\t( motion === \"pos\" ? \"-=\" : \"+=\" ) ) +\n\t\tdistance;\n\n\t// Animate\n\tel.animate( animation, {\n\t\tqueue: false,\n\t\tduration: o.duration,\n\t\teasing: o.easing,\n\t\tcomplete: function() {\n\t\t\tif ( mode === \"hide\" ) {\n\t\t\t\tel.hide();\n\t\t\t}\n\t\t\t$.effects.restore( el, props );\n\t\t\t$.effects.removeWrapper( el );\n\t\t\tdone();\n\t\t}\n\t});\n};\n\n\n/*!\n * jQuery UI Effects Explode 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/explode-effect/\n */\n\n\nvar effectExplode = $.effects.effect.explode = function( o, done ) {\n\n\tvar rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,\n\t\tcells = rows,\n\t\tel = $( this ),\n\t\tmode = $.effects.setMode( el, o.mode || \"hide\" ),\n\t\tshow = mode === \"show\",\n\n\t\t// show and then visibility:hidden the element before calculating offset\n\t\toffset = el.show().css( \"visibility\", \"hidden\" ).offset(),\n\n\t\t// width and height of a piece\n\t\twidth = Math.ceil( el.outerWidth() / cells ),\n\t\theight = Math.ceil( el.outerHeight() / rows ),\n\t\tpieces = [],\n\n\t\t// loop\n\t\ti, j, left, top, mx, my;\n\n\t// children animate complete:\n\tfunction childComplete() {\n\t\tpieces.push( this );\n\t\tif ( pieces.length === rows * cells ) {\n\t\t\tanimComplete();\n\t\t}\n\t}\n\n\t// clone the element for each row and cell.\n\tfor ( i = 0; i < rows ; i++ ) { // ===>\n\t\ttop = offset.top + i * height;\n\t\tmy = i - ( rows - 1 ) / 2 ;\n\n\t\tfor ( j = 0; j < cells ; j++ ) { // |||\n\t\t\tleft = offset.left + j * width;\n\t\t\tmx = j - ( cells - 1 ) / 2 ;\n\n\t\t\t// Create a clone of the now hidden main element that will be absolute positioned\n\t\t\t// within a wrapper div off the -left and -top equal to size of our pieces\n\t\t\tel\n\t\t\t\t.clone()\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.wrap( \"<div></div>\" )\n\t\t\t\t.css({\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tvisibility: \"visible\",\n\t\t\t\t\tleft: -j * width,\n\t\t\t\t\ttop: -i * height\n\t\t\t\t})\n\n\t\t\t// select the wrapper - make it overflow: hidden and absolute positioned based on\n\t\t\t// where the original was located +left and +top equal to the size of pieces\n\t\t\t\t.parent()\n\t\t\t\t.addClass( \"ui-effects-explode\" )\n\t\t\t\t.css({\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\twidth: width,\n\t\t\t\t\theight: height,\n\t\t\t\t\tleft: left + ( show ? mx * width : 0 ),\n\t\t\t\t\ttop: top + ( show ? my * height : 0 ),\n\t\t\t\t\topacity: show ? 0 : 1\n\t\t\t\t}).animate({\n\t\t\t\t\tleft: left + ( show ? 0 : mx * width ),\n\t\t\t\t\ttop: top + ( show ? 0 : my * height ),\n\t\t\t\t\topacity: show ? 1 : 0\n\t\t\t\t}, o.duration || 500, o.easing, childComplete );\n\t\t}\n\t}\n\n\tfunction animComplete() {\n\t\tel.css({\n\t\t\tvisibility: \"visible\"\n\t\t});\n\t\t$( pieces ).remove();\n\t\tif ( !show ) {\n\t\t\tel.hide();\n\t\t}\n\t\tdone();\n\t}\n};\n\n\n/*!\n * jQuery UI Effects Fade 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/fade-effect/\n */\n\n\nvar effectFade = $.effects.effect.fade = function( o, done ) {\n\tvar el = $( this ),\n\t\tmode = $.effects.setMode( el, o.mode || \"toggle\" );\n\n\tel.animate({\n\t\topacity: mode\n\t}, {\n\t\tqueue: false,\n\t\tduration: o.duration,\n\t\teasing: o.easing,\n\t\tcomplete: done\n\t});\n};\n\n\n/*!\n * jQuery UI Effects Fold 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/fold-effect/\n */\n\n\nvar effectFold = $.effects.effect.fold = function( o, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\tprops = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"height\", \"width\" ],\n\t\tmode = $.effects.setMode( el, o.mode || \"hide\" ),\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tsize = o.size || 15,\n\t\tpercent = /([0-9]+)%/.exec( size ),\n\t\thorizFirst = !!o.horizFirst,\n\t\twidthFirst = show !== horizFirst,\n\t\tref = widthFirst ? [ \"width\", \"height\" ] : [ \"height\", \"width\" ],\n\t\tduration = o.duration / 2,\n\t\twrapper, distance,\n\t\tanimation1 = {},\n\t\tanimation2 = {};\n\n\t$.effects.save( el, props );\n\tel.show();\n\n\t// Create Wrapper\n\twrapper = $.effects.createWrapper( el ).css({\n\t\toverflow: \"hidden\"\n\t});\n\tdistance = widthFirst ?\n\t\t[ wrapper.width(), wrapper.height() ] :\n\t\t[ wrapper.height(), wrapper.width() ];\n\n\tif ( percent ) {\n\t\tsize = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];\n\t}\n\tif ( show ) {\n\t\twrapper.css( horizFirst ? {\n\t\t\theight: 0,\n\t\t\twidth: size\n\t\t} : {\n\t\t\theight: size,\n\t\t\twidth: 0\n\t\t});\n\t}\n\n\t// Animation\n\tanimation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;\n\tanimation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;\n\n\t// Animate\n\twrapper\n\t\t.animate( animation1, duration, o.easing )\n\t\t.animate( animation2, duration, o.easing, function() {\n\t\t\tif ( hide ) {\n\t\t\t\tel.hide();\n\t\t\t}\n\t\t\t$.effects.restore( el, props );\n\t\t\t$.effects.removeWrapper( el );\n\t\t\tdone();\n\t\t});\n\n};\n\n\n/*!\n * jQuery UI Effects Highlight 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/highlight-effect/\n */\n\n\nvar effectHighlight = $.effects.effect.highlight = function( o, done ) {\n\tvar elem = $( this ),\n\t\tprops = [ \"backgroundImage\", \"backgroundColor\", \"opacity\" ],\n\t\tmode = $.effects.setMode( elem, o.mode || \"show\" ),\n\t\tanimation = {\n\t\t\tbackgroundColor: elem.css( \"backgroundColor\" )\n\t\t};\n\n\tif (mode === \"hide\") {\n\t\tanimation.opacity = 0;\n\t}\n\n\t$.effects.save( elem, props );\n\n\telem\n\t\t.show()\n\t\t.css({\n\t\t\tbackgroundImage: \"none\",\n\t\t\tbackgroundColor: o.color || \"#ffff99\"\n\t\t})\n\t\t.animate( animation, {\n\t\t\tqueue: false,\n\t\t\tduration: o.duration,\n\t\t\teasing: o.easing,\n\t\t\tcomplete: function() {\n\t\t\t\tif ( mode === \"hide\" ) {\n\t\t\t\t\telem.hide();\n\t\t\t\t}\n\t\t\t\t$.effects.restore( elem, props );\n\t\t\t\tdone();\n\t\t\t}\n\t\t});\n};\n\n\n/*!\n * jQuery UI Effects Size 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/size-effect/\n */\n\n\nvar effectSize = $.effects.effect.size = function( o, done ) {\n\n\t// Create element\n\tvar original, baseline, factor,\n\t\tel = $( this ),\n\t\tprops0 = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"width\", \"height\", \"overflow\", \"opacity\" ],\n\n\t\t// Always restore\n\t\tprops1 = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"overflow\", \"opacity\" ],\n\n\t\t// Copy for children\n\t\tprops2 = [ \"width\", \"height\", \"overflow\" ],\n\t\tcProps = [ \"fontSize\" ],\n\t\tvProps = [ \"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\" ],\n\t\thProps = [ \"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\" ],\n\n\t\t// Set options\n\t\tmode = $.effects.setMode( el, o.mode || \"effect\" ),\n\t\trestore = o.restore || mode !== \"effect\",\n\t\tscale = o.scale || \"both\",\n\t\torigin = o.origin || [ \"middle\", \"center\" ],\n\t\tposition = el.css( \"position\" ),\n\t\tprops = restore ? props0 : props1,\n\t\tzero = {\n\t\t\theight: 0,\n\t\t\twidth: 0,\n\t\t\touterHeight: 0,\n\t\t\touterWidth: 0\n\t\t};\n\n\tif ( mode === \"show\" ) {\n\t\tel.show();\n\t}\n\toriginal = {\n\t\theight: el.height(),\n\t\twidth: el.width(),\n\t\touterHeight: el.outerHeight(),\n\t\touterWidth: el.outerWidth()\n\t};\n\n\tif ( o.mode === \"toggle\" && mode === \"show\" ) {\n\t\tel.from = o.to || zero;\n\t\tel.to = o.from || original;\n\t} else {\n\t\tel.from = o.from || ( mode === \"show\" ? zero : original );\n\t\tel.to = o.to || ( mode === \"hide\" ? zero : original );\n\t}\n\n\t// Set scaling factor\n\tfactor = {\n\t\tfrom: {\n\t\t\ty: el.from.height / original.height,\n\t\t\tx: el.from.width / original.width\n\t\t},\n\t\tto: {\n\t\t\ty: el.to.height / original.height,\n\t\t\tx: el.to.width / original.width\n\t\t}\n\t};\n\n\t// Scale the css box\n\tif ( scale === \"box\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tprops = props.concat( vProps );\n\t\t\tel.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );\n\t\t\tel.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );\n\t\t}\n\n\t\t// Horizontal props scaling\n\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\tprops = props.concat( hProps );\n\t\t\tel.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );\n\t\t\tel.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );\n\t\t}\n\t}\n\n\t// Scale the content\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tprops = props.concat( cProps ).concat( props2 );\n\t\t\tel.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );\n\t\t\tel.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );\n\t\t}\n\t}\n\n\t$.effects.save( el, props );\n\tel.show();\n\t$.effects.createWrapper( el );\n\tel.css( \"overflow\", \"hidden\" ).css( el.from );\n\n\t// Adjust\n\tif (origin) { // Calculate baseline shifts\n\t\tbaseline = $.effects.getBaseline( origin, original );\n\t\tel.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;\n\t\tel.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;\n\t\tel.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;\n\t\tel.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;\n\t}\n\tel.css( el.from ); // set top & left\n\n\t// Animate\n\tif ( scale === \"content\" || scale === \"both\" ) { // Scale the children\n\n\t\t// Add margins/font-size\n\t\tvProps = vProps.concat([ \"marginTop\", \"marginBottom\" ]).concat(cProps);\n\t\thProps = hProps.concat([ \"marginLeft\", \"marginRight\" ]);\n\t\tprops2 = props0.concat(vProps).concat(hProps);\n\n\t\tel.find( \"*[width]\" ).each( function() {\n\t\t\tvar child = $( this ),\n\t\t\t\tc_original = {\n\t\t\t\t\theight: child.height(),\n\t\t\t\t\twidth: child.width(),\n\t\t\t\t\touterHeight: child.outerHeight(),\n\t\t\t\t\touterWidth: child.outerWidth()\n\t\t\t\t};\n\t\t\tif (restore) {\n\t\t\t\t$.effects.save(child, props2);\n\t\t\t}\n\n\t\t\tchild.from = {\n\t\t\t\theight: c_original.height * factor.from.y,\n\t\t\t\twidth: c_original.width * factor.from.x,\n\t\t\t\touterHeight: c_original.outerHeight * factor.from.y,\n\t\t\t\touterWidth: c_original.outerWidth * factor.from.x\n\t\t\t};\n\t\t\tchild.to = {\n\t\t\t\theight: c_original.height * factor.to.y,\n\t\t\t\twidth: c_original.width * factor.to.x,\n\t\t\t\touterHeight: c_original.height * factor.to.y,\n\t\t\t\touterWidth: c_original.width * factor.to.x\n\t\t\t};\n\n\t\t\t// Vertical props scaling\n\t\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\t\tchild.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );\n\t\t\t\tchild.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );\n\t\t\t}\n\n\t\t\t// Horizontal props scaling\n\t\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\t\tchild.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );\n\t\t\t\tchild.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );\n\t\t\t}\n\n\t\t\t// Animate children\n\t\t\tchild.css( child.from );\n\t\t\tchild.animate( child.to, o.duration, o.easing, function() {\n\n\t\t\t\t// Restore children\n\t\t\t\tif ( restore ) {\n\t\t\t\t\t$.effects.restore( child, props2 );\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// Animate\n\tel.animate( el.to, {\n\t\tqueue: false,\n\t\tduration: o.duration,\n\t\teasing: o.easing,\n\t\tcomplete: function() {\n\t\t\tif ( el.to.opacity === 0 ) {\n\t\t\t\tel.css( \"opacity\", el.from.opacity );\n\t\t\t}\n\t\t\tif ( mode === \"hide\" ) {\n\t\t\t\tel.hide();\n\t\t\t}\n\t\t\t$.effects.restore( el, props );\n\t\t\tif ( !restore ) {\n\n\t\t\t\t// we need to calculate our new positioning based on the scaling\n\t\t\t\tif ( position === \"static\" ) {\n\t\t\t\t\tel.css({\n\t\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\t\ttop: el.to.top,\n\t\t\t\t\t\tleft: el.to.left\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t$.each([ \"top\", \"left\" ], function( idx, pos ) {\n\t\t\t\t\t\tel.css( pos, function( _, str ) {\n\t\t\t\t\t\t\tvar val = parseInt( str, 10 ),\n\t\t\t\t\t\t\t\ttoRef = idx ? el.to.left : el.to.top;\n\n\t\t\t\t\t\t\t// if original was \"auto\", recalculate the new value from wrapper\n\t\t\t\t\t\t\tif ( str === \"auto\" ) {\n\t\t\t\t\t\t\t\treturn toRef + \"px\";\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn val + toRef + \"px\";\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$.effects.removeWrapper( el );\n\t\t\tdone();\n\t\t}\n\t});\n\n};\n\n\n/*!\n * jQuery UI Effects Scale 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/scale-effect/\n */\n\n\nvar effectScale = $.effects.effect.scale = function( o, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\toptions = $.extend( true, {}, o ),\n\t\tmode = $.effects.setMode( el, o.mode || \"effect\" ),\n\t\tpercent = parseInt( o.percent, 10 ) ||\n\t\t\t( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === \"hide\" ? 0 : 100 ) ),\n\t\tdirection = o.direction || \"both\",\n\t\torigin = o.origin,\n\t\toriginal = {\n\t\t\theight: el.height(),\n\t\t\twidth: el.width(),\n\t\t\touterHeight: el.outerHeight(),\n\t\t\touterWidth: el.outerWidth()\n\t\t},\n\t\tfactor = {\n\t\t\ty: direction !== \"horizontal\" ? (percent / 100) : 1,\n\t\t\tx: direction !== \"vertical\" ? (percent / 100) : 1\n\t\t};\n\n\t// We are going to pass this effect to the size effect:\n\toptions.effect = \"size\";\n\toptions.queue = false;\n\toptions.complete = done;\n\n\t// Set default origin and restore for show/hide\n\tif ( mode !== \"effect\" ) {\n\t\toptions.origin = origin || [ \"middle\", \"center\" ];\n\t\toptions.restore = true;\n\t}\n\n\toptions.from = o.from || ( mode === \"show\" ? {\n\t\theight: 0,\n\t\twidth: 0,\n\t\touterHeight: 0,\n\t\touterWidth: 0\n\t} : original );\n\toptions.to = {\n\t\theight: original.height * factor.y,\n\t\twidth: original.width * factor.x,\n\t\touterHeight: original.outerHeight * factor.y,\n\t\touterWidth: original.outerWidth * factor.x\n\t};\n\n\t// Fade option to support puff\n\tif ( options.fade ) {\n\t\tif ( mode === \"show\" ) {\n\t\t\toptions.from.opacity = 0;\n\t\t\toptions.to.opacity = 1;\n\t\t}\n\t\tif ( mode === \"hide\" ) {\n\t\t\toptions.from.opacity = 1;\n\t\t\toptions.to.opacity = 0;\n\t\t}\n\t}\n\n\t// Animate\n\tel.effect( options );\n\n};\n\n\n/*!\n * jQuery UI Effects Puff 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/puff-effect/\n */\n\n\nvar effectPuff = $.effects.effect.puff = function( o, done ) {\n\tvar elem = $( this ),\n\t\tmode = $.effects.setMode( elem, o.mode || \"hide\" ),\n\t\thide = mode === \"hide\",\n\t\tpercent = parseInt( o.percent, 10 ) || 150,\n\t\tfactor = percent / 100,\n\t\toriginal = {\n\t\t\theight: elem.height(),\n\t\t\twidth: elem.width(),\n\t\t\touterHeight: elem.outerHeight(),\n\t\t\touterWidth: elem.outerWidth()\n\t\t};\n\n\t$.extend( o, {\n\t\teffect: \"scale\",\n\t\tqueue: false,\n\t\tfade: true,\n\t\tmode: mode,\n\t\tcomplete: done,\n\t\tpercent: hide ? percent : 100,\n\t\tfrom: hide ?\n\t\t\toriginal :\n\t\t\t{\n\t\t\t\theight: original.height * factor,\n\t\t\t\twidth: original.width * factor,\n\t\t\t\touterHeight: original.outerHeight * factor,\n\t\t\t\touterWidth: original.outerWidth * factor\n\t\t\t}\n\t});\n\n\telem.effect( o );\n};\n\n\n/*!\n * jQuery UI Effects Pulsate 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/pulsate-effect/\n */\n\n\nvar effectPulsate = $.effects.effect.pulsate = function( o, done ) {\n\tvar elem = $( this ),\n\t\tmode = $.effects.setMode( elem, o.mode || \"show\" ),\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tshowhide = ( show || mode === \"hide\" ),\n\n\t\t// showing or hiding leaves of the \"last\" animation\n\t\tanims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),\n\t\tduration = o.duration / anims,\n\t\tanimateTo = 0,\n\t\tqueue = elem.queue(),\n\t\tqueuelen = queue.length,\n\t\ti;\n\n\tif ( show || !elem.is(\":visible\")) {\n\t\telem.css( \"opacity\", 0 ).show();\n\t\tanimateTo = 1;\n\t}\n\n\t// anims - 1 opacity \"toggles\"\n\tfor ( i = 1; i < anims; i++ ) {\n\t\telem.animate({\n\t\t\topacity: animateTo\n\t\t}, duration, o.easing );\n\t\tanimateTo = 1 - animateTo;\n\t}\n\n\telem.animate({\n\t\topacity: animateTo\n\t}, duration, o.easing);\n\n\telem.queue(function() {\n\t\tif ( hide ) {\n\t\t\telem.hide();\n\t\t}\n\t\tdone();\n\t});\n\n\t// We just queued up \"anims\" animations, we need to put them next in the queue\n\tif ( queuelen > 1 ) {\n\t\tqueue.splice.apply( queue,\n\t\t\t[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );\n\t}\n\telem.dequeue();\n};\n\n\n/*!\n * jQuery UI Effects Shake 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/shake-effect/\n */\n\n\nvar effectShake = $.effects.effect.shake = function( o, done ) {\n\n\tvar el = $( this ),\n\t\tprops = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"height\", \"width\" ],\n\t\tmode = $.effects.setMode( el, o.mode || \"effect\" ),\n\t\tdirection = o.direction || \"left\",\n\t\tdistance = o.distance || 20,\n\t\ttimes = o.times || 3,\n\t\tanims = times * 2 + 1,\n\t\tspeed = Math.round( o.duration / anims ),\n\t\tref = (direction === \"up\" || direction === \"down\") ? \"top\" : \"left\",\n\t\tpositiveMotion = (direction === \"up\" || direction === \"left\"),\n\t\tanimation = {},\n\t\tanimation1 = {},\n\t\tanimation2 = {},\n\t\ti,\n\n\t\t// we will need to re-assemble the queue to stack our animations in place\n\t\tqueue = el.queue(),\n\t\tqueuelen = queue.length;\n\n\t$.effects.save( el, props );\n\tel.show();\n\t$.effects.createWrapper( el );\n\n\t// Animation\n\tanimation[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance;\n\tanimation1[ ref ] = ( positiveMotion ? \"+=\" : \"-=\" ) + distance * 2;\n\tanimation2[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance * 2;\n\n\t// Animate\n\tel.animate( animation, speed, o.easing );\n\n\t// Shakes\n\tfor ( i = 1; i < times; i++ ) {\n\t\tel.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );\n\t}\n\tel\n\t\t.animate( animation1, speed, o.easing )\n\t\t.animate( animation, speed / 2, o.easing )\n\t\t.queue(function() {\n\t\t\tif ( mode === \"hide\" ) {\n\t\t\t\tel.hide();\n\t\t\t}\n\t\t\t$.effects.restore( el, props );\n\t\t\t$.effects.removeWrapper( el );\n\t\t\tdone();\n\t\t});\n\n\t// inject all the animations we just queued to be first in line (after \"inprogress\")\n\tif ( queuelen > 1) {\n\t\tqueue.splice.apply( queue,\n\t\t\t[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );\n\t}\n\tel.dequeue();\n\n};\n\n\n/*!\n * jQuery UI Effects Slide 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/slide-effect/\n */\n\n\nvar effectSlide = $.effects.effect.slide = function( o, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\tprops = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"width\", \"height\" ],\n\t\tmode = $.effects.setMode( el, o.mode || \"show\" ),\n\t\tshow = mode === \"show\",\n\t\tdirection = o.direction || \"left\",\n\t\tref = (direction === \"up\" || direction === \"down\") ? \"top\" : \"left\",\n\t\tpositiveMotion = (direction === \"up\" || direction === \"left\"),\n\t\tdistance,\n\t\tanimation = {};\n\n\t// Adjust\n\t$.effects.save( el, props );\n\tel.show();\n\tdistance = o.distance || el[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true );\n\n\t$.effects.createWrapper( el ).css({\n\t\toverflow: \"hidden\"\n\t});\n\n\tif ( show ) {\n\t\tel.css( ref, positiveMotion ? (isNaN(distance) ? \"-\" + distance : -distance) : distance );\n\t}\n\n\t// Animation\n\tanimation[ ref ] = ( show ?\n\t\t( positiveMotion ? \"+=\" : \"-=\") :\n\t\t( positiveMotion ? \"-=\" : \"+=\")) +\n\t\tdistance;\n\n\t// Animate\n\tel.animate( animation, {\n\t\tqueue: false,\n\t\tduration: o.duration,\n\t\teasing: o.easing,\n\t\tcomplete: function() {\n\t\t\tif ( mode === \"hide\" ) {\n\t\t\t\tel.hide();\n\t\t\t}\n\t\t\t$.effects.restore( el, props );\n\t\t\t$.effects.removeWrapper( el );\n\t\t\tdone();\n\t\t}\n\t});\n};\n\n\n/*!\n * jQuery UI Effects Transfer 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/transfer-effect/\n */\n\n\nvar effectTransfer = $.effects.effect.transfer = function( o, done ) {\n\tvar elem = $( this ),\n\t\ttarget = $( o.to ),\n\t\ttargetFixed = target.css( \"position\" ) === \"fixed\",\n\t\tbody = $(\"body\"),\n\t\tfixTop = targetFixed ? body.scrollTop() : 0,\n\t\tfixLeft = targetFixed ? body.scrollLeft() : 0,\n\t\tendPosition = target.offset(),\n\t\tanimation = {\n\t\t\ttop: endPosition.top - fixTop,\n\t\t\tleft: endPosition.left - fixLeft,\n\t\t\theight: target.innerHeight(),\n\t\t\twidth: target.innerWidth()\n\t\t},\n\t\tstartPosition = elem.offset(),\n\t\ttransfer = $( \"<div class='ui-effects-transfer'></div>\" )\n\t\t\t.appendTo( document.body )\n\t\t\t.addClass( o.className )\n\t\t\t.css({\n\t\t\t\ttop: startPosition.top - fixTop,\n\t\t\t\tleft: startPosition.left - fixLeft,\n\t\t\t\theight: elem.innerHeight(),\n\t\t\t\twidth: elem.innerWidth(),\n\t\t\t\tposition: targetFixed ? \"fixed\" : \"absolute\"\n\t\t\t})\n\t\t\t.animate( animation, o.duration, o.easing, function() {\n\t\t\t\ttransfer.remove();\n\t\t\t\tdone();\n\t\t\t});\n};\n\n\n/*!\n * jQuery UI Progressbar 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/progressbar/\n */\n\n\nvar progressbar = $.widget( \"ui.progressbar\", {\n\tversion: \"1.11.4\",\n\toptions: {\n\t\tmax: 100,\n\t\tvalue: 0,\n\n\t\tchange: null,\n\t\tcomplete: null\n\t},\n\n\tmin: 0,\n\n\t_create: function() {\n\t\t// Constrain initial value\n\t\tthis.oldValue = this.options.value = this._constrainedValue();\n\n\t\tthis.element\n\t\t\t.addClass( \"ui-progressbar ui-widget ui-widget-content ui-corner-all\" )\n\t\t\t.attr({\n\t\t\t\t// Only set static values, aria-valuenow and aria-valuemax are\n\t\t\t\t// set inside _refreshValue()\n\t\t\t\trole: \"progressbar\",\n\t\t\t\t\"aria-valuemin\": this.min\n\t\t\t});\n\n\t\tthis.valueDiv = $( \"<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>\" )\n\t\t\t.appendTo( this.element );\n\n\t\tthis._refreshValue();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.removeClass( \"ui-progressbar ui-widget ui-widget-content ui-corner-all\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-valuemin\" )\n\t\t\t.removeAttr( \"aria-valuemax\" )\n\t\t\t.removeAttr( \"aria-valuenow\" );\n\n\t\tthis.valueDiv.remove();\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\treturn this.options.value;\n\t\t}\n\n\t\tthis.options.value = this._constrainedValue( newValue );\n\t\tthis._refreshValue();\n\t},\n\n\t_constrainedValue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\tnewValue = this.options.value;\n\t\t}\n\n\t\tthis.indeterminate = newValue === false;\n\n\t\t// sanitize value\n\t\tif ( typeof newValue !== \"number\" ) {\n\t\t\tnewValue = 0;\n\t\t}\n\n\t\treturn this.indeterminate ? false :\n\t\t\tMath.min( this.options.max, Math.max( this.min, newValue ) );\n\t},\n\n\t_setOptions: function( options ) {\n\t\t// Ensure \"value\" option is set after other values (like max)\n\t\tvar value = options.value;\n\t\tdelete options.value;\n\n\t\tthis._super( options );\n\n\t\tthis.options.value = this._constrainedValue( value );\n\t\tthis._refreshValue();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"max\" ) {\n\t\t\t// Don't allow a max less than min\n\t\t\tvalue = Math.max( this.min, value );\n\t\t}\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.element\n\t\t\t\t.toggleClass( \"ui-state-disabled\", !!value )\n\t\t\t\t.attr( \"aria-disabled\", value );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_percentage: function() {\n\t\treturn this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );\n\t},\n\n\t_refreshValue: function() {\n\t\tvar value = this.options.value,\n\t\t\tpercentage = this._percentage();\n\n\t\tthis.valueDiv\n\t\t\t.toggle( this.indeterminate || value > this.min )\n\t\t\t.toggleClass( \"ui-corner-right\", value === this.options.max )\n\t\t\t.width( percentage.toFixed(0) + \"%\" );\n\n\t\tthis.element.toggleClass( \"ui-progressbar-indeterminate\", this.indeterminate );\n\n\t\tif ( this.indeterminate ) {\n\t\t\tthis.element.removeAttr( \"aria-valuenow\" );\n\t\t\tif ( !this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv = $( \"<div class='ui-progressbar-overlay'></div>\" ).appendTo( this.valueDiv );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.element.attr({\n\t\t\t\t\"aria-valuemax\": this.options.max,\n\t\t\t\t\"aria-valuenow\": value\n\t\t\t});\n\t\t\tif ( this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv.remove();\n\t\t\t\tthis.overlayDiv = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( this.oldValue !== value ) {\n\t\t\tthis.oldValue = value;\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t\tif ( value === this.options.max ) {\n\t\t\tthis._trigger( \"complete\" );\n\t\t}\n\t}\n});\n\n\n/*!\n * jQuery UI Selectable 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/selectable/\n */\n\n\nvar selectable = $.widget(\"ui.selectable\", $.ui.mouse, {\n\tversion: \"1.11.4\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoRefresh: true,\n\t\tdistance: 0,\n\t\tfilter: \"*\",\n\t\ttolerance: \"touch\",\n\n\t\t// callbacks\n\t\tselected: null,\n\t\tselecting: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tunselected: null,\n\t\tunselecting: null\n\t},\n\t_create: function() {\n\t\tvar selectees,\n\t\t\tthat = this;\n\n\t\tthis.element.addClass(\"ui-selectable\");\n\n\t\tthis.dragged = false;\n\n\t\t// cache selectee children based on filter\n\t\tthis.refresh = function() {\n\t\t\tselectees = $(that.options.filter, that.element[0]);\n\t\t\tselectees.addClass(\"ui-selectee\");\n\t\t\tselectees.each(function() {\n\t\t\t\tvar $this = $(this),\n\t\t\t\t\tpos = $this.offset();\n\t\t\t\t$.data(this, \"selectable-item\", {\n\t\t\t\t\telement: this,\n\t\t\t\t\t$element: $this,\n\t\t\t\t\tleft: pos.left,\n\t\t\t\t\ttop: pos.top,\n\t\t\t\t\tright: pos.left + $this.outerWidth(),\n\t\t\t\t\tbottom: pos.top + $this.outerHeight(),\n\t\t\t\t\tstartselected: false,\n\t\t\t\t\tselected: $this.hasClass(\"ui-selected\"),\n\t\t\t\t\tselecting: $this.hasClass(\"ui-selecting\"),\n\t\t\t\t\tunselecting: $this.hasClass(\"ui-unselecting\")\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\t\tthis.refresh();\n\n\t\tthis.selectees = selectees.addClass(\"ui-selectee\");\n\n\t\tthis._mouseInit();\n\n\t\tthis.helper = $(\"<div class='ui-selectable-helper'></div>\");\n\t},\n\n\t_destroy: function() {\n\t\tthis.selectees\n\t\t\t.removeClass(\"ui-selectee\")\n\t\t\t.removeData(\"selectable-item\");\n\t\tthis.element\n\t\t\t.removeClass(\"ui-selectable ui-selectable-disabled\");\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseStart: function(event) {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.opos = [ event.pageX, event.pageY ];\n\n\t\tif (this.options.disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.selectees = $(options.filter, this.element[0]);\n\n\t\tthis._trigger(\"start\", event);\n\n\t\t$(options.appendTo).append(this.helper);\n\t\t// position helper (lasso)\n\t\tthis.helper.css({\n\t\t\t\"left\": event.pageX,\n\t\t\t\"top\": event.pageY,\n\t\t\t\"width\": 0,\n\t\t\t\"height\": 0\n\t\t});\n\n\t\tif (options.autoRefresh) {\n\t\t\tthis.refresh();\n\t\t}\n\n\t\tthis.selectees.filter(\".ui-selected\").each(function() {\n\t\t\tvar selectee = $.data(this, \"selectable-item\");\n\t\t\tselectee.startselected = true;\n\t\t\tif (!event.metaKey && !event.ctrlKey) {\n\t\t\t\tselectee.$element.removeClass(\"ui-selected\");\n\t\t\t\tselectee.selected = false;\n\t\t\t\tselectee.$element.addClass(\"ui-unselecting\");\n\t\t\t\tselectee.unselecting = true;\n\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\tthat._trigger(\"unselecting\", event, {\n\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t$(event.target).parents().addBack().each(function() {\n\t\t\tvar doSelect,\n\t\t\t\tselectee = $.data(this, \"selectable-item\");\n\t\t\tif (selectee) {\n\t\t\t\tdoSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass(\"ui-selected\");\n\t\t\t\tselectee.$element\n\t\t\t\t\t.removeClass(doSelect ? \"ui-unselecting\" : \"ui-selected\")\n\t\t\t\t\t.addClass(doSelect ? \"ui-selecting\" : \"ui-unselecting\");\n\t\t\t\tselectee.unselecting = !doSelect;\n\t\t\t\tselectee.selecting = doSelect;\n\t\t\t\tselectee.selected = doSelect;\n\t\t\t\t// selectable (UN)SELECTING callback\n\t\t\t\tif (doSelect) {\n\t\t\t\t\tthat._trigger(\"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthat._trigger(\"unselecting\", event, {\n\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t},\n\n\t_mouseDrag: function(event) {\n\n\t\tthis.dragged = true;\n\n\t\tif (this.options.disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar tmp,\n\t\t\tthat = this,\n\t\t\toptions = this.options,\n\t\t\tx1 = this.opos[0],\n\t\t\ty1 = this.opos[1],\n\t\t\tx2 = event.pageX,\n\t\t\ty2 = event.pageY;\n\n\t\tif (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }\n\t\tif (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }\n\t\tthis.helper.css({ left: x1, top: y1, width: x2 - x1, height: y2 - y1 });\n\n\t\tthis.selectees.each(function() {\n\t\t\tvar selectee = $.data(this, \"selectable-item\"),\n\t\t\t\thit = false;\n\n\t\t\t//prevent helper from being selected if appendTo: selectable\n\t\t\tif (!selectee || selectee.element === that.element[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (options.tolerance === \"touch\") {\n\t\t\t\thit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );\n\t\t\t} else if (options.tolerance === \"fit\") {\n\t\t\t\thit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);\n\t\t\t}\n\n\t\t\tif (hit) {\n\t\t\t\t// SELECT\n\t\t\t\tif (selectee.selected) {\n\t\t\t\t\tselectee.$element.removeClass(\"ui-selected\");\n\t\t\t\t\tselectee.selected = false;\n\t\t\t\t}\n\t\t\t\tif (selectee.unselecting) {\n\t\t\t\t\tselectee.$element.removeClass(\"ui-unselecting\");\n\t\t\t\t\tselectee.unselecting = false;\n\t\t\t\t}\n\t\t\t\tif (!selectee.selecting) {\n\t\t\t\t\tselectee.$element.addClass(\"ui-selecting\");\n\t\t\t\t\tselectee.selecting = true;\n\t\t\t\t\t// selectable SELECTING callback\n\t\t\t\t\tthat._trigger(\"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// UNSELECT\n\t\t\t\tif (selectee.selecting) {\n\t\t\t\t\tif ((event.metaKey || event.ctrlKey) && selectee.startselected) {\n\t\t\t\t\t\tselectee.$element.removeClass(\"ui-selecting\");\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tselectee.$element.addClass(\"ui-selected\");\n\t\t\t\t\t\tselectee.selected = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tselectee.$element.removeClass(\"ui-selecting\");\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tif (selectee.startselected) {\n\t\t\t\t\t\t\tselectee.$element.addClass(\"ui-unselecting\");\n\t\t\t\t\t\t\tselectee.unselecting = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger(\"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (selectee.selected) {\n\t\t\t\t\tif (!event.metaKey && !event.ctrlKey && !selectee.startselected) {\n\t\t\t\t\t\tselectee.$element.removeClass(\"ui-selected\");\n\t\t\t\t\t\tselectee.selected = false;\n\n\t\t\t\t\t\tselectee.$element.addClass(\"ui-unselecting\");\n\t\t\t\t\t\tselectee.unselecting = true;\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger(\"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function(event) {\n\t\tvar that = this;\n\n\t\tthis.dragged = false;\n\n\t\t$(\".ui-unselecting\", this.element[0]).each(function() {\n\t\t\tvar selectee = $.data(this, \"selectable-item\");\n\t\t\tselectee.$element.removeClass(\"ui-unselecting\");\n\t\t\tselectee.unselecting = false;\n\t\t\tselectee.startselected = false;\n\t\t\tthat._trigger(\"unselected\", event, {\n\t\t\t\tunselected: selectee.element\n\t\t\t});\n\t\t});\n\t\t$(\".ui-selecting\", this.element[0]).each(function() {\n\t\t\tvar selectee = $.data(this, \"selectable-item\");\n\t\t\tselectee.$element.removeClass(\"ui-selecting\").addClass(\"ui-selected\");\n\t\t\tselectee.selecting = false;\n\t\t\tselectee.selected = true;\n\t\t\tselectee.startselected = true;\n\t\t\tthat._trigger(\"selected\", event, {\n\t\t\t\tselected: selectee.element\n\t\t\t});\n\t\t});\n\t\tthis._trigger(\"stop\", event);\n\n\t\tthis.helper.remove();\n\n\t\treturn false;\n\t}\n\n});\n\n\n/*!\n * jQuery UI Selectmenu 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/selectmenu\n */\n\n\nvar selectmenu = $.widget( \"ui.selectmenu\", {\n\tversion: \"1.11.4\",\n\tdefaultElement: \"<select>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tdisabled: null,\n\t\ticons: {\n\t\t\tbutton: \"ui-icon-triangle-1-s\"\n\t\t},\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\twidth: null,\n\n\t\t// callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tvar selectmenuId = this.element.uniqueId().attr( \"id\" );\n\t\tthis.ids = {\n\t\t\telement: selectmenuId,\n\t\t\tbutton: selectmenuId + \"-button\",\n\t\t\tmenu: selectmenuId + \"-menu\"\n\t\t};\n\n\t\tthis._drawButton();\n\t\tthis._drawMenu();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis.disable();\n\t\t}\n\t},\n\n\t_drawButton: function() {\n\t\tvar that = this;\n\n\t\t// Associate existing label with the new button\n\t\tthis.label = $( \"label[for='\" + this.ids.element + \"']\" ).attr( \"for\", this.ids.button );\n\t\tthis._on( this.label, {\n\t\t\tclick: function( event ) {\n\t\t\t\tthis.button.focus();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\t// Hide original select element\n\t\tthis.element.hide();\n\n\t\t// Create button\n\t\tthis.button = $( \"<span>\", {\n\t\t\t\"class\": \"ui-selectmenu-button ui-widget ui-state-default ui-corner-all\",\n\t\t\ttabindex: this.options.disabled ? -1 : 0,\n\t\t\tid: this.ids.button,\n\t\t\trole: \"combobox\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\"aria-autocomplete\": \"list\",\n\t\t\t\"aria-owns\": this.ids.menu,\n\t\t\t\"aria-haspopup\": \"true\"\n\t\t})\n\t\t\t.insertAfter( this.element );\n\n\t\t$( \"<span>\", {\n\t\t\t\"class\": \"ui-icon \" + this.options.icons.button\n\t\t})\n\t\t\t.prependTo( this.button );\n\n\t\tthis.buttonText = $( \"<span>\", {\n\t\t\t\"class\": \"ui-selectmenu-text\"\n\t\t})\n\t\t\t.appendTo( this.button );\n\n\t\tthis._setText( this.buttonText, this.element.find( \"option:selected\" ).text() );\n\t\tthis._resizeButton();\n\n\t\tthis._on( this.button, this._buttonEvents );\n\t\tthis.button.one( \"focusin\", function() {\n\n\t\t\t// Delay rendering the menu items until the button receives focus.\n\t\t\t// The menu may have already been rendered via a programmatic open.\n\t\t\tif ( !that.menuItems ) {\n\t\t\t\tthat._refreshMenu();\n\t\t\t}\n\t\t});\n\t\tthis._hoverable( this.button );\n\t\tthis._focusable( this.button );\n\t},\n\n\t_drawMenu: function() {\n\t\tvar that = this;\n\n\t\t// Create menu\n\t\tthis.menu = $( \"<ul>\", {\n\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\"aria-labelledby\": this.ids.button,\n\t\t\tid: this.ids.menu\n\t\t});\n\n\t\t// Wrap menu\n\t\tthis.menuWrap = $( \"<div>\", {\n\t\t\t\"class\": \"ui-selectmenu-menu ui-front\"\n\t\t})\n\t\t\t.append( this.menu )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\t// Initialize menu widget\n\t\tthis.menuInstance = this.menu\n\t\t\t.menu({\n\t\t\t\trole: \"listbox\",\n\t\t\t\tselect: function( event, ui ) {\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t// support: IE8\n\t\t\t\t\t// If the item was selected via a click, the text selection\n\t\t\t\t\t// will be destroyed in IE\n\t\t\t\t\tthat._setSelection();\n\n\t\t\t\t\tthat._select( ui.item.data( \"ui-selectmenu-item\" ), event );\n\t\t\t\t},\n\t\t\t\tfocus: function( event, ui ) {\n\t\t\t\t\tvar item = ui.item.data( \"ui-selectmenu-item\" );\n\n\t\t\t\t\t// Prevent inital focus from firing and check if its a newly focused item\n\t\t\t\t\tif ( that.focusIndex != null && item.index !== that.focusIndex ) {\n\t\t\t\t\t\tthat._trigger( \"focus\", event, { item: item } );\n\t\t\t\t\t\tif ( !that.isOpen ) {\n\t\t\t\t\t\t\tthat._select( item, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthat.focusIndex = item.index;\n\n\t\t\t\t\tthat.button.attr( \"aria-activedescendant\",\n\t\t\t\t\t\tthat.menuItems.eq( item.index ).attr( \"id\" ) );\n\t\t\t\t}\n\t\t\t})\n\t\t\t.menu( \"instance\" );\n\n\t\t// Adjust menu styles to dropdown\n\t\tthis.menu\n\t\t\t.addClass( \"ui-corner-bottom\" )\n\t\t\t.removeClass( \"ui-corner-all\" );\n\n\t\t// Don't close the menu on mouseleave\n\t\tthis.menuInstance._off( this.menu, \"mouseleave\" );\n\n\t\t// Cancel the menu's collapseAll on document click\n\t\tthis.menuInstance._closeOnDocumentClick = function() {\n\t\t\treturn false;\n\t\t};\n\n\t\t// Selects often contain empty items, but never contain dividers\n\t\tthis.menuInstance._isDivider = function() {\n\t\t\treturn false;\n\t\t};\n\t},\n\n\trefresh: function() {\n\t\tthis._refreshMenu();\n\t\tthis._setText( this.buttonText, this._getSelectedItem().text() );\n\t\tif ( !this.options.width ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_refreshMenu: function() {\n\t\tthis.menu.empty();\n\n\t\tvar item,\n\t\t\toptions = this.element.find( \"option\" );\n\n\t\tif ( !options.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._parseOptions( options );\n\t\tthis._renderMenu( this.menu, this.items );\n\n\t\tthis.menuInstance.refresh();\n\t\tthis.menuItems = this.menu.find( \"li\" ).not( \".ui-selectmenu-optgroup\" );\n\n\t\titem = this._getSelectedItem();\n\n\t\t// Update the menu to have the correct item focused\n\t\tthis.menuInstance.focus( null, item );\n\t\tthis._setAria( item.data( \"ui-selectmenu-item\" ) );\n\n\t\t// Set disabled state\n\t\tthis._setOption( \"disabled\", this.element.prop( \"disabled\" ) );\n\t},\n\n\topen: function( event ) {\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If this is the first time the menu is being opened, render the items\n\t\tif ( !this.menuItems ) {\n\t\t\tthis._refreshMenu();\n\t\t} else {\n\n\t\t\t// Menu clears focus on close, reset focus to selected item\n\t\t\tthis.menu.find( \".ui-state-focus\" ).removeClass( \"ui-state-focus\" );\n\t\t\tthis.menuInstance.focus( null, this._getSelectedItem() );\n\t\t}\n\n\t\tthis.isOpen = true;\n\t\tthis._toggleAttr();\n\t\tthis._resizeMenu();\n\t\tthis._position();\n\n\t\tthis._on( this.document, this._documentClick );\n\n\t\tthis._trigger( \"open\", event );\n\t},\n\n\t_position: function() {\n\t\tthis.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );\n\t},\n\n\tclose: function( event ) {\n\t\tif ( !this.isOpen ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = false;\n\t\tthis._toggleAttr();\n\n\t\tthis.range = null;\n\t\tthis._off( this.document );\n\n\t\tthis._trigger( \"close\", event );\n\t},\n\n\twidget: function() {\n\t\treturn this.button;\n\t},\n\n\tmenuWidget: function() {\n\t\treturn this.menu;\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this,\n\t\t\tcurrentOptgroup = \"\";\n\n\t\t$.each( items, function( index, item ) {\n\t\t\tif ( item.optgroup !== currentOptgroup ) {\n\t\t\t\t$( \"<li>\", {\n\t\t\t\t\t\"class\": \"ui-selectmenu-optgroup ui-menu-divider\" +\n\t\t\t\t\t\t( item.element.parent( \"optgroup\" ).prop( \"disabled\" ) ?\n\t\t\t\t\t\t\t\" ui-state-disabled\" :\n\t\t\t\t\t\t\t\"\" ),\n\t\t\t\t\ttext: item.optgroup\n\t\t\t\t})\n\t\t\t\t\t.appendTo( ul );\n\n\t\t\t\tcurrentOptgroup = item.optgroup;\n\t\t\t}\n\n\t\t\tthat._renderItemData( ul, item );\n\t\t});\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-selectmenu-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\tvar li = $( \"<li>\" );\n\n\t\tif ( item.disabled ) {\n\t\t\tli.addClass( \"ui-state-disabled\" );\n\t\t}\n\t\tthis._setText( li, item.label );\n\n\t\treturn li.appendTo( ul );\n\t},\n\n\t_setText: function( element, value ) {\n\t\tif ( value ) {\n\t\t\telement.text( value );\n\t\t} else {\n\t\t\telement.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_move: function( direction, event ) {\n\t\tvar item, next,\n\t\t\tfilter = \".ui-menu-item\";\n\n\t\tif ( this.isOpen ) {\n\t\t\titem = this.menuItems.eq( this.focusIndex );\n\t\t} else {\n\t\t\titem = this.menuItems.eq( this.element[ 0 ].selectedIndex );\n\t\t\tfilter += \":not(.ui-state-disabled)\";\n\t\t}\n\n\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\tnext = item[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( filter ).eq( -1 );\n\t\t} else {\n\t\t\tnext = item[ direction + \"All\" ]( filter ).eq( 0 );\n\t\t}\n\n\t\tif ( next.length ) {\n\t\t\tthis.menuInstance.focus( event, next );\n\t\t}\n\t},\n\n\t_getSelectedItem: function() {\n\t\treturn this.menuItems.eq( this.element[ 0 ].selectedIndex );\n\t},\n\n\t_toggle: function( event ) {\n\t\tthis[ this.isOpen ? \"close\" : \"open\" ]( event );\n\t},\n\n\t_setSelection: function() {\n\t\tvar selection;\n\n\t\tif ( !this.range ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( window.getSelection ) {\n\t\t\tselection = window.getSelection();\n\t\t\tselection.removeAllRanges();\n\t\t\tselection.addRange( this.range );\n\n\t\t// support: IE8\n\t\t} else {\n\t\t\tthis.range.select();\n\t\t}\n\n\t\t// support: IE\n\t\t// Setting the text selection kills the button focus in IE, but\n\t\t// restoring the focus doesn't kill the selection.\n\t\tthis.button.focus();\n\t},\n\n\t_documentClick: {\n\t\tmousedown: function( event ) {\n\t\t\tif ( !this.isOpen ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !$( event.target ).closest( \".ui-selectmenu-menu, #\" + this.ids.button ).length ) {\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t}\n\t},\n\n\t_buttonEvents: {\n\n\t\t// Prevent text selection from being reset when interacting with the selectmenu (#10144)\n\t\tmousedown: function() {\n\t\t\tvar selection;\n\n\t\t\tif ( window.getSelection ) {\n\t\t\t\tselection = window.getSelection();\n\t\t\t\tif ( selection.rangeCount ) {\n\t\t\t\t\tthis.range = selection.getRangeAt( 0 );\n\t\t\t\t}\n\n\t\t\t// support: IE8\n\t\t\t} else {\n\t\t\t\tthis.range = document.selection.createRange();\n\t\t\t}\n\t\t},\n\n\t\tclick: function( event ) {\n\t\t\tthis._setSelection();\n\t\t\tthis._toggle( event );\n\t\t},\n\n\t\tkeydown: function( event ) {\n\t\t\tvar preventDefault = true;\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.TAB:\n\t\t\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\t\t\tthis.close( event );\n\t\t\t\t\tpreventDefault = false;\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.ENTER:\n\t\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\t\tthis._toggle( event );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\t\tthis._toggle( event );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._move( \"next\", event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.SPACE:\n\t\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._toggle( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\tthis._move( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\tthis._move( \"first\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\tthis._move( \"last\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.menu.trigger( event );\n\t\t\t\t\tpreventDefault = false;\n\t\t\t}\n\n\t\t\tif ( preventDefault ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t},\n\n\t_selectFocusedItem: function( event ) {\n\t\tvar item = this.menuItems.eq( this.focusIndex );\n\t\tif ( !item.hasClass( \"ui-state-disabled\" ) ) {\n\t\t\tthis._select( item.data( \"ui-selectmenu-item\" ), event );\n\t\t}\n\t},\n\n\t_select: function( item, event ) {\n\t\tvar oldIndex = this.element[ 0 ].selectedIndex;\n\n\t\t// Change native select element\n\t\tthis.element[ 0 ].selectedIndex = item.index;\n\t\tthis._setText( this.buttonText, item.label );\n\t\tthis._setAria( item );\n\t\tthis._trigger( \"select\", event, { item: item } );\n\n\t\tif ( item.index !== oldIndex ) {\n\t\t\tthis._trigger( \"change\", event, { item: item } );\n\t\t}\n\n\t\tthis.close( event );\n\t},\n\n\t_setAria: function( item ) {\n\t\tvar id = this.menuItems.eq( item.index ).attr( \"id\" );\n\n\t\tthis.button.attr({\n\t\t\t\"aria-labelledby\": id,\n\t\t\t\"aria-activedescendant\": id\n\t\t});\n\t\tthis.menu.attr( \"aria-activedescendant\", id );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tthis.button.find( \"span.ui-icon\" )\n\t\t\t\t.removeClass( this.options.icons.button )\n\t\t\t\t.addClass( value.button );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menuWrap.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.menuInstance.option( \"disabled\", value );\n\t\t\tthis.button\n\t\t\t\t.toggleClass( \"ui-state-disabled\", value )\n\t\t\t\t.attr( \"aria-disabled\", value );\n\n\t\t\tthis.element.prop( \"disabled\", value );\n\t\t\tif ( value ) {\n\t\t\t\tthis.button.attr( \"tabindex\", -1 );\n\t\t\t\tthis.close();\n\t\t\t} else {\n\t\t\t\tthis.button.attr( \"tabindex\", 0 );\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"width\" ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_toggleAttr: function() {\n\t\tthis.button\n\t\t\t.toggleClass( \"ui-corner-top\", this.isOpen )\n\t\t\t.toggleClass( \"ui-corner-all\", !this.isOpen )\n\t\t\t.attr( \"aria-expanded\", this.isOpen );\n\t\tthis.menuWrap.toggleClass( \"ui-selectmenu-open\", this.isOpen );\n\t\tthis.menu.attr( \"aria-hidden\", !this.isOpen );\n\t},\n\n\t_resizeButton: function() {\n\t\tvar width = this.options.width;\n\n\t\tif ( !width ) {\n\t\t\twidth = this.element.show().outerWidth();\n\t\t\tthis.element.hide();\n\t\t}\n\n\t\tthis.button.outerWidth( width );\n\t},\n\n\t_resizeMenu: function() {\n\t\tthis.menu.outerWidth( Math.max(\n\t\t\tthis.button.outerWidth(),\n\n\t\t\t// support: IE10\n\t\t\t// IE10 wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping\n\t\t\tthis.menu.width( \"\" ).outerWidth() + 1\n\t\t) );\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn { disabled: this.element.prop( \"disabled\" ) };\n\t},\n\n\t_parseOptions: function( options ) {\n\t\tvar data = [];\n\t\toptions.each(function( index, item ) {\n\t\t\tvar option = $( item ),\n\t\t\t\toptgroup = option.parent( \"optgroup\" );\n\t\t\tdata.push({\n\t\t\t\telement: option,\n\t\t\t\tindex: index,\n\t\t\t\tvalue: option.val(),\n\t\t\t\tlabel: option.text(),\n\t\t\t\toptgroup: optgroup.attr( \"label\" ) || \"\",\n\t\t\t\tdisabled: optgroup.prop( \"disabled\" ) || option.prop( \"disabled\" )\n\t\t\t});\n\t\t});\n\t\tthis.items = data;\n\t},\n\n\t_destroy: function() {\n\t\tthis.menuWrap.remove();\n\t\tthis.button.remove();\n\t\tthis.element.show();\n\t\tthis.element.removeUniqueId();\n\t\tthis.label.attr( \"for\", this.ids.element );\n\t}\n});\n\n\n/*!\n * jQuery UI Slider 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/slider/\n */\n\n\nvar slider = $.widget( \"ui.slider\", $.ui.mouse, {\n\tversion: \"1.11.4\",\n\twidgetEventPrefix: \"slide\",\n\n\toptions: {\n\t\tanimate: false,\n\t\tdistance: 0,\n\t\tmax: 100,\n\t\tmin: 0,\n\t\torientation: \"horizontal\",\n\t\trange: false,\n\t\tstep: 1,\n\t\tvalue: 0,\n\t\tvalues: null,\n\n\t\t// callbacks\n\t\tchange: null,\n\t\tslide: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t// number of pages in a slider\n\t// (how many times can you page up/down to go through the whole range)\n\tnumPages: 5,\n\n\t_create: function() {\n\t\tthis._keySliding = false;\n\t\tthis._mouseSliding = false;\n\t\tthis._animateOff = true;\n\t\tthis._handleIndex = null;\n\t\tthis._detectOrientation();\n\t\tthis._mouseInit();\n\t\tthis._calculateNewMax();\n\n\t\tthis.element\n\t\t\t.addClass( \"ui-slider\" +\n\t\t\t\t\" ui-slider-\" + this.orientation +\n\t\t\t\t\" ui-widget\" +\n\t\t\t\t\" ui-widget-content\" +\n\t\t\t\t\" ui-corner-all\");\n\n\t\tthis._refresh();\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\n\t\tthis._animateOff = false;\n\t},\n\n\t_refresh: function() {\n\t\tthis._createRange();\n\t\tthis._createHandles();\n\t\tthis._setupEvents();\n\t\tthis._refreshValue();\n\t},\n\n\t_createHandles: function() {\n\t\tvar i, handleCount,\n\t\t\toptions = this.options,\n\t\t\texistingHandles = this.element.find( \".ui-slider-handle\" ).addClass( \"ui-state-default ui-corner-all\" ),\n\t\t\thandle = \"<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>\",\n\t\t\thandles = [];\n\n\t\thandleCount = ( options.values && options.values.length ) || 1;\n\n\t\tif ( existingHandles.length > handleCount ) {\n\t\t\texistingHandles.slice( handleCount ).remove();\n\t\t\texistingHandles = existingHandles.slice( 0, handleCount );\n\t\t}\n\n\t\tfor ( i = existingHandles.length; i < handleCount; i++ ) {\n\t\t\thandles.push( handle );\n\t\t}\n\n\t\tthis.handles = existingHandles.add( $( handles.join( \"\" ) ).appendTo( this.element ) );\n\n\t\tthis.handle = this.handles.eq( 0 );\n\n\t\tthis.handles.each(function( i ) {\n\t\t\t$( this ).data( \"ui-slider-handle-index\", i );\n\t\t});\n\t},\n\n\t_createRange: function() {\n\t\tvar options = this.options,\n\t\t\tclasses = \"\";\n\n\t\tif ( options.range ) {\n\t\t\tif ( options.range === true ) {\n\t\t\t\tif ( !options.values ) {\n\t\t\t\t\toptions.values = [ this._valueMin(), this._valueMin() ];\n\t\t\t\t} else if ( options.values.length && options.values.length !== 2 ) {\n\t\t\t\t\toptions.values = [ options.values[0], options.values[0] ];\n\t\t\t\t} else if ( $.isArray( options.values ) ) {\n\t\t\t\t\toptions.values = options.values.slice(0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !this.range || !this.range.length ) {\n\t\t\t\tthis.range = $( \"<div></div>\" )\n\t\t\t\t\t.appendTo( this.element );\n\n\t\t\t\tclasses = \"ui-slider-range\" +\n\t\t\t\t// note: this isn't the most fittingly semantic framework class for this element,\n\t\t\t\t// but worked best visually with a variety of themes\n\t\t\t\t\" ui-widget-header ui-corner-all\";\n\t\t\t} else {\n\t\t\t\tthis.range.removeClass( \"ui-slider-range-min ui-slider-range-max\" )\n\t\t\t\t\t// Handle range switching from true to min/max\n\t\t\t\t\t.css({\n\t\t\t\t\t\t\"left\": \"\",\n\t\t\t\t\t\t\"bottom\": \"\"\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.range.addClass( classes +\n\t\t\t\t( ( options.range === \"min\" || options.range === \"max\" ) ? \" ui-slider-range-\" + options.range : \"\" ) );\n\t\t} else {\n\t\t\tif ( this.range ) {\n\t\t\t\tthis.range.remove();\n\t\t\t}\n\t\t\tthis.range = null;\n\t\t}\n\t},\n\n\t_setupEvents: function() {\n\t\tthis._off( this.handles );\n\t\tthis._on( this.handles, this._handleEvents );\n\t\tthis._hoverable( this.handles );\n\t\tthis._focusable( this.handles );\n\t},\n\n\t_destroy: function() {\n\t\tthis.handles.remove();\n\t\tif ( this.range ) {\n\t\t\tthis.range.remove();\n\t\t}\n\n\t\tthis.element\n\t\t\t.removeClass( \"ui-slider\" +\n\t\t\t\t\" ui-slider-horizontal\" +\n\t\t\t\t\" ui-slider-vertical\" +\n\t\t\t\t\" ui-widget\" +\n\t\t\t\t\" ui-widget-content\" +\n\t\t\t\t\" ui-corner-all\" );\n\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,\n\t\t\tthat = this,\n\t\t\to = this.options;\n\n\t\tif ( o.disabled ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.elementSize = {\n\t\t\twidth: this.element.outerWidth(),\n\t\t\theight: this.element.outerHeight()\n\t\t};\n\t\tthis.elementOffset = this.element.offset();\n\n\t\tposition = { x: event.pageX, y: event.pageY };\n\t\tnormValue = this._normValueFromMouse( position );\n\t\tdistance = this._valueMax() - this._valueMin() + 1;\n\t\tthis.handles.each(function( i ) {\n\t\t\tvar thisDistance = Math.abs( normValue - that.values(i) );\n\t\t\tif (( distance > thisDistance ) ||\n\t\t\t\t( distance === thisDistance &&\n\t\t\t\t\t(i === that._lastChangedValue || that.values(i) === o.min ))) {\n\t\t\t\tdistance = thisDistance;\n\t\t\t\tclosestHandle = $( this );\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t});\n\n\t\tallowed = this._start( event, index );\n\t\tif ( allowed === false ) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._mouseSliding = true;\n\n\t\tthis._handleIndex = index;\n\n\t\tclosestHandle\n\t\t\t.addClass( \"ui-state-active\" )\n\t\t\t.focus();\n\n\t\toffset = closestHandle.offset();\n\t\tmouseOverHandle = !$( event.target ).parents().addBack().is( \".ui-slider-handle\" );\n\t\tthis._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {\n\t\t\tleft: event.pageX - offset.left - ( closestHandle.width() / 2 ),\n\t\t\ttop: event.pageY - offset.top -\n\t\t\t\t( closestHandle.height() / 2 ) -\n\t\t\t\t( parseInt( closestHandle.css(\"borderTopWidth\"), 10 ) || 0 ) -\n\t\t\t\t( parseInt( closestHandle.css(\"borderBottomWidth\"), 10 ) || 0) +\n\t\t\t\t( parseInt( closestHandle.css(\"marginTop\"), 10 ) || 0)\n\t\t};\n\n\t\tif ( !this.handles.hasClass( \"ui-state-hover\" ) ) {\n\t\t\tthis._slide( event, index, normValue );\n\t\t}\n\t\tthis._animateOff = true;\n\t\treturn true;\n\t},\n\n\t_mouseStart: function() {\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar position = { x: event.pageX, y: event.pageY },\n\t\t\tnormValue = this._normValueFromMouse( position );\n\n\t\tthis._slide( event, this._handleIndex, normValue );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tthis.handles.removeClass( \"ui-state-active\" );\n\t\tthis._mouseSliding = false;\n\n\t\tthis._stop( event, this._handleIndex );\n\t\tthis._change( event, this._handleIndex );\n\n\t\tthis._handleIndex = null;\n\t\tthis._clickOffset = null;\n\t\tthis._animateOff = false;\n\n\t\treturn false;\n\t},\n\n\t_detectOrientation: function() {\n\t\tthis.orientation = ( this.options.orientation === \"vertical\" ) ? \"vertical\" : \"horizontal\";\n\t},\n\n\t_normValueFromMouse: function( position ) {\n\t\tvar pixelTotal,\n\t\t\tpixelMouse,\n\t\t\tpercentMouse,\n\t\t\tvalueTotal,\n\t\t\tvalueMouse;\n\n\t\tif ( this.orientation === \"horizontal\" ) {\n\t\t\tpixelTotal = this.elementSize.width;\n\t\t\tpixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );\n\t\t} else {\n\t\t\tpixelTotal = this.elementSize.height;\n\t\t\tpixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );\n\t\t}\n\n\t\tpercentMouse = ( pixelMouse / pixelTotal );\n\t\tif ( percentMouse > 1 ) {\n\t\t\tpercentMouse = 1;\n\t\t}\n\t\tif ( percentMouse < 0 ) {\n\t\t\tpercentMouse = 0;\n\t\t}\n\t\tif ( this.orientation === \"vertical\" ) {\n\t\t\tpercentMouse = 1 - percentMouse;\n\t\t}\n\n\t\tvalueTotal = this._valueMax() - this._valueMin();\n\t\tvalueMouse = this._valueMin() + percentMouse * valueTotal;\n\n\t\treturn this._trimAlignValue( valueMouse );\n\t},\n\n\t_start: function( event, index ) {\n\t\tvar uiHash = {\n\t\t\thandle: this.handles[ index ],\n\t\t\tvalue: this.value()\n\t\t};\n\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\tuiHash.value = this.values( index );\n\t\t\tuiHash.values = this.values();\n\t\t}\n\t\treturn this._trigger( \"start\", event, uiHash );\n\t},\n\n\t_slide: function( event, index, newVal ) {\n\t\tvar otherVal,\n\t\t\tnewValues,\n\t\t\tallowed;\n\n\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\totherVal = this.values( index ? 0 : 1 );\n\n\t\t\tif ( ( this.options.values.length === 2 && this.options.range === true ) &&\n\t\t\t\t\t( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )\n\t\t\t\t) {\n\t\t\t\tnewVal = otherVal;\n\t\t\t}\n\n\t\t\tif ( newVal !== this.values( index ) ) {\n\t\t\t\tnewValues = this.values();\n\t\t\t\tnewValues[ index ] = newVal;\n\t\t\t\t// A slide can be canceled by returning false from the slide callback\n\t\t\t\tallowed = this._trigger( \"slide\", event, {\n\t\t\t\t\thandle: this.handles[ index ],\n\t\t\t\t\tvalue: newVal,\n\t\t\t\t\tvalues: newValues\n\t\t\t\t} );\n\t\t\t\totherVal = this.values( index ? 0 : 1 );\n\t\t\t\tif ( allowed !== false ) {\n\t\t\t\t\tthis.values( index, newVal );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif ( newVal !== this.value() ) {\n\t\t\t\t// A slide can be canceled by returning false from the slide callback\n\t\t\t\tallowed = this._trigger( \"slide\", event, {\n\t\t\t\t\thandle: this.handles[ index ],\n\t\t\t\t\tvalue: newVal\n\t\t\t\t} );\n\t\t\t\tif ( allowed !== false ) {\n\t\t\t\t\tthis.value( newVal );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_stop: function( event, index ) {\n\t\tvar uiHash = {\n\t\t\thandle: this.handles[ index ],\n\t\t\tvalue: this.value()\n\t\t};\n\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\tuiHash.value = this.values( index );\n\t\t\tuiHash.values = this.values();\n\t\t}\n\n\t\tthis._trigger( \"stop\", event, uiHash );\n\t},\n\n\t_change: function( event, index ) {\n\t\tif ( !this._keySliding && !this._mouseSliding ) {\n\t\t\tvar uiHash = {\n\t\t\t\thandle: this.handles[ index ],\n\t\t\t\tvalue: this.value()\n\t\t\t};\n\t\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\t\tuiHash.value = this.values( index );\n\t\t\t\tuiHash.values = this.values();\n\t\t\t}\n\n\t\t\t//store the last changed value index for reference when handles overlap\n\t\t\tthis._lastChangedValue = index;\n\n\t\t\tthis._trigger( \"change\", event, uiHash );\n\t\t}\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( arguments.length ) {\n\t\t\tthis.options.value = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, 0 );\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._value();\n\t},\n\n\tvalues: function( index, newValue ) {\n\t\tvar vals,\n\t\t\tnewValues,\n\t\t\ti;\n\n\t\tif ( arguments.length > 1 ) {\n\t\t\tthis.options.values[ index ] = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, index );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tif ( $.isArray( arguments[ 0 ] ) ) {\n\t\t\t\tvals = this.options.values;\n\t\t\t\tnewValues = arguments[ 0 ];\n\t\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\t\tvals[ i ] = this._trimAlignValue( newValues[ i ] );\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._refreshValue();\n\t\t\t} else {\n\t\t\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\t\t\treturn this._values( index );\n\t\t\t\t} else {\n\t\t\t\t\treturn this.value();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn this._values();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar i,\n\t\t\tvalsLength = 0;\n\n\t\tif ( key === \"range\" && this.options.range === true ) {\n\t\t\tif ( value === \"min\" ) {\n\t\t\t\tthis.options.value = this._values( 0 );\n\t\t\t\tthis.options.values = null;\n\t\t\t} else if ( value === \"max\" ) {\n\t\t\t\tthis.options.value = this._values( this.options.values.length - 1 );\n\t\t\t\tthis.options.values = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( $.isArray( this.options.values ) ) {\n\t\t\tvalsLength = this.options.values.length;\n\t\t}\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.element.toggleClass( \"ui-state-disabled\", !!value );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\t\tcase \"orientation\":\n\t\t\t\tthis._detectOrientation();\n\t\t\t\tthis.element\n\t\t\t\t\t.removeClass( \"ui-slider-horizontal ui-slider-vertical\" )\n\t\t\t\t\t.addClass( \"ui-slider-\" + this.orientation );\n\t\t\t\tthis._refreshValue();\n\n\t\t\t\t// Reset positioning from previous orientation\n\t\t\t\tthis.handles.css( value === \"horizontal\" ? \"bottom\" : \"left\", \"\" );\n\t\t\t\tbreak;\n\t\t\tcase \"value\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._change( null, 0 );\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"values\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\t\t\t\tfor ( i = 0; i < valsLength; i += 1 ) {\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"step\":\n\t\t\tcase \"min\":\n\t\t\tcase \"max\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._calculateNewMax();\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"range\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refresh();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\t//internal value getter\n\t// _value() returns value trimmed by min and max, aligned by step\n\t_value: function() {\n\t\tvar val = this.options.value;\n\t\tval = this._trimAlignValue( val );\n\n\t\treturn val;\n\t},\n\n\t//internal values getter\n\t// _values() returns array of values trimmed by min and max, aligned by step\n\t// _values( index ) returns single value trimmed by min and max, aligned by step\n\t_values: function( index ) {\n\t\tvar val,\n\t\t\tvals,\n\t\t\ti;\n\n\t\tif ( arguments.length ) {\n\t\t\tval = this.options.values[ index ];\n\t\t\tval = this._trimAlignValue( val );\n\n\t\t\treturn val;\n\t\t} else if ( this.options.values && this.options.values.length ) {\n\t\t\t// .slice() creates a copy of the array\n\t\t\t// this copy gets trimmed by min and max and then returned\n\t\t\tvals = this.options.values.slice();\n\t\t\tfor ( i = 0; i < vals.length; i += 1) {\n\t\t\t\tvals[ i ] = this._trimAlignValue( vals[ i ] );\n\t\t\t}\n\n\t\t\treturn vals;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t},\n\n\t// returns the step-aligned value that val is closest to, between (inclusive) min and max\n\t_trimAlignValue: function( val ) {\n\t\tif ( val <= this._valueMin() ) {\n\t\t\treturn this._valueMin();\n\t\t}\n\t\tif ( val >= this._valueMax() ) {\n\t\t\treturn this._valueMax();\n\t\t}\n\t\tvar step = ( this.options.step > 0 ) ? this.options.step : 1,\n\t\t\tvalModStep = (val - this._valueMin()) % step,\n\t\t\talignValue = val - valModStep;\n\n\t\tif ( Math.abs(valModStep) * 2 >= step ) {\n\t\t\talignValue += ( valModStep > 0 ) ? step : ( -step );\n\t\t}\n\n\t\t// Since JavaScript has problems with large floats, round\n\t\t// the final value to 5 digits after the decimal point (see #4124)\n\t\treturn parseFloat( alignValue.toFixed(5) );\n\t},\n\n\t_calculateNewMax: function() {\n\t\tvar max = this.options.max,\n\t\t\tmin = this._valueMin(),\n\t\t\tstep = this.options.step,\n\t\t\taboveMin = Math.floor( ( +( max - min ).toFixed( this._precision() ) ) / step ) * step;\n\t\tmax = aboveMin + min;\n\t\tthis.max = parseFloat( max.toFixed( this._precision() ) );\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_valueMin: function() {\n\t\treturn this.options.min;\n\t},\n\n\t_valueMax: function() {\n\t\treturn this.max;\n\t},\n\n\t_refreshValue: function() {\n\t\tvar lastValPercent, valPercent, value, valueMin, valueMax,\n\t\t\toRange = this.options.range,\n\t\t\to = this.options,\n\t\t\tthat = this,\n\t\t\tanimate = ( !this._animateOff ) ? o.animate : false,\n\t\t\t_set = {};\n\n\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\tthis.handles.each(function( i ) {\n\t\t\t\tvalPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;\n\t\t\t\t_set[ that.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\t\t$( this ).stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\t\t\t\tif ( that.options.range === true ) {\n\t\t\t\t\tif ( that.orientation === \"horizontal\" ) {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { left: valPercent + \"%\" }, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( { width: ( valPercent - lastValPercent ) + \"%\" }, { queue: false, duration: o.animate } );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { bottom: ( valPercent ) + \"%\" }, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( { height: ( valPercent - lastValPercent ) + \"%\" }, { queue: false, duration: o.animate } );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastValPercent = valPercent;\n\t\t\t});\n\t\t} else {\n\t\t\tvalue = this.value();\n\t\t\tvalueMin = this._valueMin();\n\t\t\tvalueMax = this._valueMax();\n\t\t\tvalPercent = ( valueMax !== valueMin ) ?\n\t\t\t\t\t( value - valueMin ) / ( valueMax - valueMin ) * 100 :\n\t\t\t\t\t0;\n\t\t\t_set[ this.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\tthis.handle.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\n\t\t\tif ( oRange === \"min\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { width: valPercent + \"%\" }, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range[ animate ? \"animate\" : \"css\" ]( { width: ( 100 - valPercent ) + \"%\" }, { queue: false, duration: o.animate } );\n\t\t\t}\n\t\t\tif ( oRange === \"min\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { height: valPercent + \"%\" }, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range[ animate ? \"animate\" : \"css\" ]( { height: ( 100 - valPercent ) + \"%\" }, { queue: false, duration: o.animate } );\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleEvents: {\n\t\tkeydown: function( event ) {\n\t\t\tvar allowed, curVal, newVal, step,\n\t\t\t\tindex = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( !this._keySliding ) {\n\t\t\t\t\t\tthis._keySliding = true;\n\t\t\t\t\t\t$( event.target ).addClass( \"ui-state-active\" );\n\t\t\t\t\t\tallowed = this._start( event, index );\n\t\t\t\t\t\tif ( allowed === false ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tstep = this.options.step;\n\t\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\t\tcurVal = newVal = this.values( index );\n\t\t\t} else {\n\t\t\t\tcurVal = newVal = this.value();\n\t\t\t}\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\t\tnewVal = this._valueMin();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\t\tnewVal = this._valueMax();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal - ( (this._valueMax() - this._valueMin()) / this.numPages ) );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\tif ( curVal === this._valueMax() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal + step );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tif ( curVal === this._valueMin() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal - step );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis._slide( event, index, newVal );\n\t\t},\n\t\tkeyup: function( event ) {\n\t\t\tvar index = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tif ( this._keySliding ) {\n\t\t\t\tthis._keySliding = false;\n\t\t\t\tthis._stop( event, index );\n\t\t\t\tthis._change( event, index );\n\t\t\t\t$( event.target ).removeClass( \"ui-state-active\" );\n\t\t\t}\n\t\t}\n\t}\n});\n\n\n/*!\n * jQuery UI Sortable 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/sortable/\n */\n\n\nvar sortable = $.widget(\"ui.sortable\", $.ui.mouse, {\n\tversion: \"1.11.4\",\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: \"> *\",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000,\n\n\t\t// callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn (/left|right/).test(item.css(\"float\")) || (/inline|table-cell/).test(item.css(\"display\"));\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis.element.addClass(\"ui-sortable\");\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We're ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.element.find( \".ui-sortable-handle\" ).removeClass( \"ui-sortable-handle\" );\n\t\t$.each( this.items, function() {\n\t\t\t( this.instance.options.handle ?\n\t\t\t\tthis.item.find( this.instance.options.handle ) : this.item )\n\t\t\t\t.addClass( \"ui-sortable-handle\" );\n\t\t});\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.removeClass( \"ui-sortable ui-sortable-disabled\" )\n\t\t\t.find( \".ui-sortable-handle\" )\n\t\t\t\t.removeClass( \"ui-sortable-handle\" );\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[i].item.removeData(this.widgetName + \"-item\");\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function(event, overrideHandle) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif (this.reverting) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif(this.options.disabled || this.options.type === \"static\") {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems(event);\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$(event.target).parents().each(function() {\n\t\t\tif($.data(this, that.widgetName + \"-item\") === that) {\n\t\t\t\tcurrentItem = $(this);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif($.data(event.target, that.widgetName + \"-item\") === that) {\n\t\t\tcurrentItem = $(event.target);\n\t\t}\n\n\t\tif(!currentItem) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.options.handle && !overrideHandle) {\n\t\t\t$(this.options.handle, currentItem).find(\"*\").addBack().each(function() {\n\t\t\t\tif(this === event.target) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(!validHandle) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function(event, overrideHandle, noActivation) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper(event);\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.helper.scrollParent();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend(this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper\n\t\t});\n\n\t\t// Only after we got the offset, we can change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css(\"position\", \"absolute\");\n\t\tthis.cssPosition = this.helper.css(\"position\");\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this._generatePosition(event);\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };\n\n\t\t//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way\n\t\tif(this.helper[0] !== this.currentItem[0]) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Set a containment if given in the options\n\t\tif(o.containment) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif( o.cursor && o.cursor !== \"auto\" ) { // cursor option\n\t\t\tbody = this.document.find( \"body\" );\n\n\t\t\t// support: IE\n\t\t\tthis.storedCursor = body.css( \"cursor\" );\n\t\t\tbody.css( \"cursor\", o.cursor );\n\n\t\t\tthis.storedStylesheet = $( \"<style>*{ cursor: \"+o.cursor+\" !important; }</style>\" ).appendTo( body );\n\t\t}\n\n\t\tif(o.opacity) { // opacity option\n\t\t\tif (this.helper.css(\"opacity\")) {\n\t\t\t\tthis._storedOpacity = this.helper.css(\"opacity\");\n\t\t\t}\n\t\t\tthis.helper.css(\"opacity\", o.opacity);\n\t\t}\n\n\t\tif(o.zIndex) { // zIndex option\n\t\t\tif (this.helper.css(\"zIndex\")) {\n\t\t\t\tthis._storedZIndex = this.helper.css(\"zIndex\");\n\t\t\t}\n\t\t\tthis.helper.css(\"zIndex\", o.zIndex);\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== \"HTML\") {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger(\"start\", event, this._uiHash());\n\n\t\t//Recache the helper size\n\t\tif(!this._preserveHelperProportions) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\n\t\t//Post \"activate\" events to possible containers\n\t\tif( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif($.ui.ddmanager) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ($.ui.ddmanager && !o.dropBehaviour) {\n\t\t\t$.ui.ddmanager.prepareOffsets(this, event);\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis.helper.addClass(\"ui-sortable-helper\");\n\t\tthis._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position\n\t\treturn true;\n\n\t},\n\n\t_mouseDrag: function(event) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options,\n\t\t\tscrolled = false;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition(event);\n\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\n\n\t\tif (!this.lastPositionAbs) {\n\t\t\tthis.lastPositionAbs = this.positionAbs;\n\t\t}\n\n\t\t//Do scrolling\n\t\tif(this.options.scroll) {\n\t\t\tif(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== \"HTML\") {\n\n\t\t\t\tif((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {\n\t\t\t\t\tthis.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;\n\t\t\t\t} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {\n\t\t\t\t\tthis.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t\tif((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {\n\t\t\t\t\tthis.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {\n\t\t\t\t\tthis.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif(event.pageY - this.document.scrollTop() < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = this.document.scrollTop(this.document.scrollTop() - o.scrollSpeed);\n\t\t\t\t} else if(this.window.height() - (event.pageY - this.document.scrollTop()) < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = this.document.scrollTop(this.document.scrollTop() + o.scrollSpeed);\n\t\t\t\t}\n\n\t\t\t\tif(event.pageX - this.document.scrollLeft() < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(this.document.scrollLeft() - o.scrollSpeed);\n\t\t\t\t} else if(this.window.width() - (event.pageX - this.document.scrollLeft()) < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(this.document.scrollLeft() + o.scrollSpeed);\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets(this, event);\n\t\t\t}\n\t\t}\n\n\t\t//Regenerate the absolute position used for position checks\n\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\n\n\t\t//Set the helper position\n\t\tif(!this.options.axis || this.options.axis !== \"y\") {\n\t\t\tthis.helper[0].style.left = this.position.left+\"px\";\n\t\t}\n\t\tif(!this.options.axis || this.options.axis !== \"x\") {\n\t\t\tthis.helper[0].style.top = this.position.top+\"px\";\n\t\t}\n\n\t\t//Rearrange\n\t\tfor (i = this.items.length - 1; i >= 0; i--) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[i];\n\t\t\titemElement = item.item[0];\n\t\t\tintersection = this._intersectsWithPointer(item);\n\t\t\tif (!intersection) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif (item.instance !== this.currentContainer) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif (itemElement !== this.currentItem[0] &&\n\t\t\t\tthis.placeholder[intersection === 1 ? \"next\" : \"prev\"]()[0] !== itemElement &&\n\t\t\t\t!$.contains(this.placeholder[0], itemElement) &&\n\t\t\t\t(this.options.type === \"semi-dynamic\" ? !$.contains(this.element[0], itemElement) : true)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\tif (this.options.tolerance === \"pointer\" || this._intersectsWithSides(item)) {\n\t\t\t\t\tthis._rearrange(event, item);\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger(\"change\", event, this._uiHash());\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers(event);\n\n\t\t//Interconnect with droppables\n\t\tif($.ui.ddmanager) {\n\t\t\t$.ui.ddmanager.drag(this, event);\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger(\"sort\", event, this._uiHash());\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function(event, noPropagation) {\n\n\t\tif(!event) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ($.ui.ddmanager && !this.options.dropBehaviour) {\n\t\t\t$.ui.ddmanager.drop(this, event);\n\t\t}\n\n\t\tif(this.options.revert) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === \"x\" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft);\n\t\t\t}\n\t\t\tif ( !axis || axis === \"y\" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {\n\t\t\t\tthat._clear(event);\n\t\t\t});\n\t\t} else {\n\t\t\tthis._clear(event, noPropagation);\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif(this.dragging) {\n\n\t\t\tthis._mouseUp({ target: null });\n\n\t\t\tif(this.options.helper === \"original\") {\n\t\t\t\tthis.currentItem.css(this._storedCSS).removeClass(\"ui-sortable-helper\");\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor (var i = this.containers.length - 1; i >= 0; i--){\n\t\t\t\tthis.containers[i]._trigger(\"deactivate\", null, this._uiHash(this));\n\t\t\t\tif(this.containers[i].containerCache.over) {\n\t\t\t\t\tthis.containers[i]._trigger(\"out\", null, this._uiHash(this));\n\t\t\t\t\tthis.containers[i].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif (this.placeholder) {\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!\n\t\t\tif(this.placeholder[0].parentNode) {\n\t\t\t\tthis.placeholder[0].parentNode.removeChild(this.placeholder[0]);\n\t\t\t}\n\t\t\tif(this.options.helper !== \"original\" && this.helper && this.helper[0].parentNode) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend(this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t});\n\n\t\t\tif(this.domPosition.prev) {\n\t\t\t\t$(this.domPosition.prev).after(this.currentItem);\n\t\t\t} else {\n\t\t\t\t$(this.domPosition.parent).prepend(this.currentItem);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function(o) {\n\n\t\tvar items = this._getItemsAsjQuery(o && o.connected),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$(items).each(function() {\n\t\t\tvar res = ($(o.item || this).attr(o.attribute || \"id\") || \"\").match(o.expression || (/(.+)[\\-=_](.+)/));\n\t\t\tif (res) {\n\t\t\t\tstr.push((o.key || res[1]+\"[]\")+\"=\"+(o.key && o.expression ? res[1] : res[2]));\n\t\t\t}\n\t\t});\n\n\t\tif(!str.length && o.key) {\n\t\t\tstr.push(o.key + \"=\");\n\t\t}\n\n\t\treturn str.join(\"&\");\n\n\t},\n\n\ttoArray: function(o) {\n\n\t\tvar items = this._getItemsAsjQuery(o && o.connected),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each(function() { ret.push($(o.item || this).attr(o.attribute || \"id\") || \"\"); });\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function(item) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t(this.options.tolerance !== \"pointer\" && this.helperProportions[this.floating ? \"width\" : \"height\"] > item[this.floating ? \"width\" : \"height\"])\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn (l < x1 + (this.helperProportions.width / 2) && // Right Half\n\t\t\t\tx2 - (this.helperProportions.width / 2) < r && // Left Half\n\t\t\t\tt < y1 + (this.helperProportions.height / 2) && // Bottom Half\n\t\t\t\ty2 - (this.helperProportions.height / 2) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function(item) {\n\n\t\tvar isOverElementHeight = (this.options.axis === \"x\") || this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),\n\t\t\tisOverElementWidth = (this.options.axis === \"y\") || this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth,\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\tif (!isOverElement) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn this.floating ?\n\t\t\t( ((horizontalDirection && horizontalDirection === \"right\") || verticalDirection === \"down\") ? 2 : 1 )\n\t\t\t: ( verticalDirection && (verticalDirection === \"down\" ? 2 : 1) );\n\n\t},\n\n\t_intersectsWithSides: function(item) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),\n\t\t\tisOverRightHalf = this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\tif (this.floating && horizontalDirection) {\n\t\t\treturn ((horizontalDirection === \"right\" && isOverRightHalf) || (horizontalDirection === \"left\" && !isOverRightHalf));\n\t\t} else {\n\t\t\treturn verticalDirection && ((verticalDirection === \"down\" && isOverBottomHalf) || (verticalDirection === \"up\" && !isOverBottomHalf));\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && (delta > 0 ? \"down\" : \"up\");\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && (delta > 0 ? \"right\" : \"left\");\n\t},\n\n\trefresh: function(event) {\n\t\tthis._refreshItems(event);\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function(connected) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif(connectWith && connected) {\n\t\t\tfor (i = connectWith.length - 1; i >= 0; i--){\n\t\t\t\tcur = $(connectWith[i], this.document[0]);\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j--){\n\t\t\t\t\tinst = $.data(cur[j], this.widgetFullName);\n\t\t\t\t\tif(inst && inst !== this && !inst.options.disabled) {\n\t\t\t\t\t\tqueries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"), inst]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"), this]);\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor (i = queries.length - 1; i >= 0; i--){\n\t\t\tqueries[i][0].each( addItems );\n\t\t}\n\n\t\treturn $(items);\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find(\":data(\" + this.widgetName + \"-item)\");\n\n\t\tthis.items = $.grep(this.items, function (item) {\n\t\t\tfor (var j=0; j < list.length; j++) {\n\t\t\t\tif(list[j] === item.item[0]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t},\n\n\t_refreshItems: function(event) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [this];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down\n\t\t\tfor (i = connectWith.length - 1; i >= 0; i--){\n\t\t\t\tcur = $(connectWith[i], this.document[0]);\n\t\t\t\tfor (j = cur.length - 1; j >= 0; j--){\n\t\t\t\t\tinst = $.data(cur[j], this.widgetFullName);\n\t\t\t\t\tif(inst && inst !== this && !inst.options.disabled) {\n\t\t\t\t\t\tqueries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);\n\t\t\t\t\t\tthis.containers.push(inst);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (i = queries.length - 1; i >= 0; i--) {\n\t\t\ttargetData = queries[i][1];\n\t\t\t_queries = queries[i][0];\n\n\t\t\tfor (j=0, queriesLength = _queries.length; j < queriesLength; j++) {\n\t\t\t\titem = $(_queries[j]);\n\n\t\t\t\titem.data(this.widgetName + \"-item\", targetData); // Data for target checking (mouse manager)\n\n\t\t\t\titems.push({\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t},\n\n\trefreshPositions: function(fast) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === \"x\" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change\n\t\tif(this.offsetParent && this.helper) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tvar i, item, t, p;\n\n\t\tfor (i = this.items.length - 1; i >= 0; i--){\n\t\t\titem = this.items[i];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;\n\n\t\t\tif (!fast) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\n\t\tif(this.options.custom && this.options.custom.refreshContainers) {\n\t\t\tthis.options.custom.refreshContainers.call(this);\n\t\t} else {\n\t\t\tfor (i = this.containers.length - 1; i >= 0; i--){\n\t\t\t\tp = this.containers[i].element.offset();\n\t\t\t\tthis.containers[i].containerCache.left = p.left;\n\t\t\t\tthis.containers[i].containerCache.top = p.top;\n\t\t\t\tthis.containers[i].containerCache.width = this.containers[i].element.outerWidth();\n\t\t\t\tthis.containers[i].containerCache.height = this.containers[i].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function(that) {\n\t\tthat = that || this;\n\t\tvar className,\n\t\t\to = that.options;\n\n\t\tif(!o.placeholder || o.placeholder.constructor === String) {\n\t\t\tclassName = o.placeholder;\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar nodeName = that.currentItem[0].nodeName.toLowerCase(),\n\t\t\t\t\t\telement = $( \"<\" + nodeName + \">\", that.document[0] )\n\t\t\t\t\t\t\t.addClass(className || that.currentItem[0].className+\" ui-sortable-placeholder\")\n\t\t\t\t\t\t\t.removeClass(\"ui-sortable-helper\");\n\n\t\t\t\t\tif ( nodeName === \"tbody\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( \"tr\" ).eq( 0 ),\n\t\t\t\t\t\t\t$( \"<tr>\", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === \"tr\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function(container, p) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified\n\t\t\t\t\tif(className && !o.forcePlaceholderSize) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item\n\t\t\t\t\tif(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css(\"paddingTop\")||0, 10) - parseInt(that.currentItem.css(\"paddingBottom\")||0, 10)); }\n\t\t\t\t\tif(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css(\"paddingLeft\")||0, 10) - parseInt(that.currentItem.css(\"paddingRight\")||0, 10)); }\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after(that.placeholder);\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update(that, that.placeholder);\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each(function() {\n\t\t\t$( \"<td>&#160;</td>\", that.document[ 0 ] )\n\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t});\n\t},\n\n\t_contactContainers: function(event) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// get innermost container that intersects with item\n\t\tfor (i = this.containers.length - 1; i >= 0; i--) {\n\n\t\t\t// never consider a container that's located within the item itself\n\t\t\tif($.contains(this.currentItem[0], this.containers[i].element[0])) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif(this._intersectsWith(this.containers[i].containerCache)) {\n\n\t\t\t\t// if we've already found a container and it's more \"inner\" than this, then continue\n\t\t\t\tif(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[i];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\n\t\t\t\tif(this.containers[i].containerCache.over) {\n\t\t\t\t\tthis.containers[i]._trigger(\"out\", event, this._uiHash(this));\n\t\t\t\t\tthis.containers[i].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// if no intersecting containers found, return\n\t\tif(!innermostContainer) {\n\t\t\treturn;\n\t\t}\n\n\t\t// move the item into the container if it's not there already\n\t\tif(this.containers.length === 1) {\n\t\t\tif (!this.containers[innermostIndex].containerCache.over) {\n\t\t\t\tthis.containers[innermostIndex]._trigger(\"over\", event, this._uiHash(this));\n\t\t\t\tthis.containers[innermostIndex].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t//When entering a new container, we will find the item with the least distance and append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating(this.currentItem);\n\t\t\tposProperty = floating ? \"left\" : \"top\";\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\n\t\t\taxis = floating ? \"clientX\" : \"clientY\";\n\n\t\t\tfor (j = this.items.length - 1; j >= 0; j--) {\n\t\t\t\tif(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif(this.items[j].item[0] === this.currentItem[0]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[j].item.offset()[posProperty];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? \"up\": \"down\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif(!itemWithLeastDistance && !this.options.dropOnEmpty) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(this.currentContainer === this.containers[innermostIndex]) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\titemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);\n\t\t\tthis._trigger(\"change\", event, this._uiHash());\n\t\t\tthis.containers[innermostIndex]._trigger(\"change\", event, this._uiHash(this));\n\t\t\tthis.currentContainer = this.containers[innermostIndex];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update(this.currentContainer, this.placeholder);\n\n\t\t\tthis.containers[innermostIndex]._trigger(\"over\", event, this._uiHash(this));\n\t\t\tthis.containers[innermostIndex].containerCache.over = 1;\n\t\t}\n\n\n\t},\n\n\t_createHelper: function(event) {\n\n\t\tvar o = this.options,\n\t\t\thelper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem);\n\n\t\t//Add the helper to the DOM if that didn't happen already\n\t\tif(!helper.parents(\"body\").length) {\n\t\t\t$(o.appendTo !== \"parent\" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);\n\t\t}\n\n\t\tif(helper[0] === this.currentItem[0]) {\n\t\t\tthis._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css(\"position\"), top: this.currentItem.css(\"top\"), left: this.currentItem.css(\"left\") };\n\t\t}\n\n\t\tif(!helper[0].style.width || o.forceHelperSize) {\n\t\t\thelper.width(this.currentItem.width());\n\t\t}\n\t\tif(!helper[0].style.height || o.forceHelperSize) {\n\t\t\thelper.height(this.currentItem.height());\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function(obj) {\n\t\tif (typeof obj === \"string\") {\n\t\t\tobj = obj.split(\" \");\n\t\t}\n\t\tif ($.isArray(obj)) {\n\t\t\tobj = {left: +obj[0], top: +obj[1] || 0};\n\t\t}\n\t\tif (\"left\" in obj) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif (\"right\" in obj) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif (\"top\" in obj) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif (\"bottom\" in obj) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that\n\t\t//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag\n\t\tif(this.cssPosition === \"absolute\" && this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this information\n\t\t// with an ugly IE fix\n\t\tif( this.offsetParent[0] === this.document[0].body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === \"html\" && $.ui.ie)) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + (parseInt(this.offsetParent.css(\"borderTopWidth\"),10) || 0),\n\t\t\tleft: po.left + (parseInt(this.offsetParent.css(\"borderLeftWidth\"),10) || 0)\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif(this.cssPosition === \"relative\") {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - (parseInt(this.helper.css(\"top\"),10) || 0) + this.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - (parseInt(this.helper.css(\"left\"),10) || 0) + this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: (parseInt(this.currentItem.css(\"marginLeft\"),10) || 0),\n\t\t\ttop: (parseInt(this.currentItem.css(\"marginTop\"),10) || 0)\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif(o.containment === \"parent\") {\n\t\t\to.containment = this.helper[0].parentNode;\n\t\t}\n\t\tif(o.containment === \"document\" || o.containment === \"window\") {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === \"document\" ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t(o.containment === \"document\" ? this.document.width() : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif(!(/^(document|window|parent)$/).test(o.containment)) {\n\t\t\tce = $(o.containment)[0];\n\t\t\tco = $(o.containment).offset();\n\t\t\tover = ($(ce).css(\"overflow\") !== \"hidden\");\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + (parseInt($(ce).css(\"borderLeftWidth\"),10) || 0) + (parseInt($(ce).css(\"paddingLeft\"),10) || 0) - this.margins.left,\n\t\t\t\tco.top + (parseInt($(ce).css(\"borderTopWidth\"),10) || 0) + (parseInt($(ce).css(\"paddingTop\"),10) || 0) - this.margins.top,\n\t\t\t\tco.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css(\"borderLeftWidth\"),10) || 0) - (parseInt($(ce).css(\"paddingRight\"),10) || 0) - this.helperProportions.width - this.margins.left,\n\t\t\t\tco.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css(\"borderTopWidth\"),10) || 0) - (parseInt($(ce).css(\"paddingBottom\"),10) || 0) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function(d, pos) {\n\n\t\tif(!pos) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === \"absolute\" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,\n\t\t\tscrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);\n\n\t\treturn {\n\t\t\ttop: (\n\t\t\t\tpos.top\t+\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.relative.top * mod +\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.top * mod -\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)\n\t\t\t),\n\t\t\tleft: (\n\t\t\t\tpos.left +\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.relative.left * mod +\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.left * mod\t-\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function(event) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === \"absolute\" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif(this.cssPosition === \"relative\" && !(this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0])) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif(this.originalPosition) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif(this.containment) {\n\t\t\t\tif(event.pageX - this.offset.click.left < this.containment[0]) {\n\t\t\t\t\tpageX = this.containment[0] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif(event.pageY - this.offset.click.top < this.containment[1]) {\n\t\t\t\t\tpageY = this.containment[1] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif(event.pageX - this.offset.click.left > this.containment[2]) {\n\t\t\t\t\tpageX = this.containment[2] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif(event.pageY - this.offset.click.top > this.containment[3]) {\n\t\t\t\t\tpageY = this.containment[3] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(o.grid) {\n\t\t\t\ttop = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];\n\t\t\t\tpageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;\n\n\t\t\t\tleft = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];\n\t\t\t\tpageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\t\t\t\tpageY -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.click.top -\t\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.relative.top\t-\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.top +\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))\n\t\t\t),\n\t\t\tleft: (\n\t\t\t\tpageX -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.click.left -\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.relative.left\t-\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.left +\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function(event, i, a, hardRefresh) {\n\n\t\ta ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === \"down\" ? i.item[0] : i.item[0].nextSibling));\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay(function() {\n\t\t\tif(counter === this.counter) {\n\t\t\t\tthis.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove\n\t\t\t}\n\t\t});\n\n\t},\n\n\t_clear: function(event, noPropagation) {\n\n\t\tthis.reverting = false;\n\t\t// We delay all events that have to be triggered to after the point where the placeholder has been removed and\n\t\t// everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)\n\t\tif(!this._noFinalSort && this.currentItem.parent().length) {\n\t\t\tthis.placeholder.before(this.currentItem);\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif(this.helper[0] === this.currentItem[0]) {\n\t\t\tfor(i in this._storedCSS) {\n\t\t\t\tif(this._storedCSS[i] === \"auto\" || this._storedCSS[i] === \"static\") {\n\t\t\t\t\tthis._storedCSS[i] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css(this._storedCSS).removeClass(\"ui-sortable-helper\");\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif(this.fromOutside && !noPropagation) {\n\t\t\tdelayedTriggers.push(function(event) { this._trigger(\"receive\", event, this._uiHash(this.fromOutside)); });\n\t\t}\n\t\tif((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(\".ui-sortable-helper\")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {\n\t\t\tdelayedTriggers.push(function(event) { this._trigger(\"update\", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif (this !== this.currentContainer) {\n\t\t\tif(!noPropagation) {\n\t\t\t\tdelayedTriggers.push(function(event) { this._trigger(\"remove\", event, this._uiHash()); });\n\t\t\t\tdelayedTriggers.push((function(c) { return function(event) { c._trigger(\"receive\", event, this._uiHash(this)); };  }).call(this, this.currentContainer));\n\t\t\t\tdelayedTriggers.push((function(c) { return function(event) { c._trigger(\"update\", event, this._uiHash(this));  }; }).call(this, this.currentContainer));\n\t\t\t}\n\t\t}\n\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor (i = this.containers.length - 1; i >= 0; i--){\n\t\t\tif (!noPropagation) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif(this.containers[i].containerCache.over) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[i].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this.storedCursor ) {\n\t\t\tthis.document.find( \"body\" ).css( \"cursor\", this.storedCursor );\n\t\t\tthis.storedStylesheet.remove();\n\t\t}\n\t\tif(this._storedOpacity) {\n\t\t\tthis.helper.css(\"opacity\", this._storedOpacity);\n\t\t}\n\t\tif(this._storedZIndex) {\n\t\t\tthis.helper.css(\"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex);\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif(!noPropagation) {\n\t\t\tthis._trigger(\"beforeStop\", event, this._uiHash());\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!\n\t\tthis.placeholder[0].parentNode.removeChild(this.placeholder[0]);\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif(!noPropagation) {\n\t\t\tfor (i=0; i < delayedTriggers.length; i++) {\n\t\t\t\tdelayedTriggers[i].call(this, event);\n\t\t\t} //Trigger all delayed events\n\t\t\tthis._trigger(\"stop\", event, this._uiHash());\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ($.Widget.prototype._trigger.apply(this, arguments) === false) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function(_inst) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $([]),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n});\n\n\n/*!\n * jQuery UI Spinner 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/spinner/\n */\n\n\nfunction spinner_modifier( fn ) {\n\treturn function() {\n\t\tvar previous = this.element.val();\n\t\tfn.apply( this, arguments );\n\t\tthis._refresh();\n\t\tif ( previous !== this.element.val() ) {\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t};\n}\n\nvar spinner = $.widget( \"ui.spinner\", {\n\tversion: \"1.11.4\",\n\tdefaultElement: \"<input>\",\n\twidgetEventPrefix: \"spin\",\n\toptions: {\n\t\tculture: null,\n\t\ticons: {\n\t\t\tdown: \"ui-icon-triangle-1-s\",\n\t\t\tup: \"ui-icon-triangle-1-n\"\n\t\t},\n\t\tincremental: true,\n\t\tmax: null,\n\t\tmin: null,\n\t\tnumberFormat: null,\n\t\tpage: 10,\n\t\tstep: 1,\n\n\t\tchange: null,\n\t\tspin: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_create: function() {\n\t\t// handle string values that need to be parsed\n\t\tthis._setOption( \"max\", this.options.max );\n\t\tthis._setOption( \"min\", this.options.min );\n\t\tthis._setOption( \"step\", this.options.step );\n\n\t\t// Only format if there is a value, prevents the field from being marked\n\t\t// as invalid in Firefox, see #9573.\n\t\tif ( this.value() !== \"\" ) {\n\t\t\t// Format the value, but don't constrain.\n\t\t\tthis._value( this.element.val(), true );\n\t\t}\n\n\t\tthis._draw();\n\t\tthis._on( this._events );\n\t\tthis._refresh();\n\n\t\t// turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t});\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = {},\n\t\t\telement = this.element;\n\n\t\t$.each( [ \"min\", \"max\", \"step\" ], function( i, option ) {\n\t\t\tvar value = element.attr( option );\n\t\t\tif ( value !== undefined && value.length ) {\n\t\t\t\toptions[ option ] = value;\n\t\t\t}\n\t\t});\n\n\t\treturn options;\n\t},\n\n\t_events: {\n\t\tkeydown: function( event ) {\n\t\t\tif ( this._start( event ) && this._keydown( event ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\tkeyup: \"_stop\",\n\t\tfocus: function() {\n\t\t\tthis.previous = this.element.val();\n\t\t},\n\t\tblur: function( event ) {\n\t\t\tif ( this.cancelBlur ) {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._stop();\n\t\t\tthis._refresh();\n\t\t\tif ( this.previous !== this.element.val() ) {\n\t\t\t\tthis._trigger( \"change\", event );\n\t\t\t}\n\t\t},\n\t\tmousewheel: function( event, delta ) {\n\t\t\tif ( !delta ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.spinning && !this._start( event ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis._spin( (delta > 0 ? 1 : -1) * this.options.step, event );\n\t\t\tclearTimeout( this.mousewheelTimer );\n\t\t\tthis.mousewheelTimer = this._delay(function() {\n\t\t\t\tif ( this.spinning ) {\n\t\t\t\t\tthis._stop( event );\n\t\t\t\t}\n\t\t\t}, 100 );\n\t\t\tevent.preventDefault();\n\t\t},\n\t\t\"mousedown .ui-spinner-button\": function( event ) {\n\t\t\tvar previous;\n\n\t\t\t// We never want the buttons to have focus; whenever the user is\n\t\t\t// interacting with the spinner, the focus should be on the input.\n\t\t\t// If the input is focused then this.previous is properly set from\n\t\t\t// when the input first received focus. If the input is not focused\n\t\t\t// then we need to set this.previous based on the value before spinning.\n\t\t\tprevious = this.element[0] === this.document[0].activeElement ?\n\t\t\t\tthis.previous : this.element.val();\n\t\t\tfunction checkFocus() {\n\t\t\t\tvar isActive = this.element[0] === this.document[0].activeElement;\n\t\t\t\tif ( !isActive ) {\n\t\t\t\t\tthis.element.focus();\n\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t// support: IE\n\t\t\t\t\t// IE sets focus asynchronously, so we need to check if focus\n\t\t\t\t\t// moved off of the input because the user clicked on the button.\n\t\t\t\t\tthis._delay(function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// ensure focus is on (or stays on) the text field\n\t\t\tevent.preventDefault();\n\t\t\tcheckFocus.call( this );\n\n\t\t\t// support: IE\n\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t// and check (again) if focus moved off of the input.\n\t\t\tthis.cancelBlur = true;\n\t\t\tthis._delay(function() {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\tcheckFocus.call( this );\n\t\t\t});\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._repeat( null, $( event.currentTarget ).hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\t\t\"mouseup .ui-spinner-button\": \"_stop\",\n\t\t\"mouseenter .ui-spinner-button\": function( event ) {\n\t\t\t// button will add ui-state-active if mouse was down while mouseleave and kept down\n\t\t\tif ( !$( event.currentTarget ).hasClass( \"ui-state-active\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._repeat( null, $( event.currentTarget ).hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\t\t// TODO: do we really want to consider this a stop?\n\t\t// shouldn't we just stop the repeater and wait until mouseup before\n\t\t// we trigger the stop event?\n\t\t\"mouseleave .ui-spinner-button\": \"_stop\"\n\t},\n\n\t_draw: function() {\n\t\tvar uiSpinner = this.uiSpinner = this.element\n\t\t\t.addClass( \"ui-spinner-input\" )\n\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t.wrap( this._uiSpinnerHtml() )\n\t\t\t.parent()\n\t\t\t\t// add buttons\n\t\t\t\t.append( this._buttonHtml() );\n\n\t\tthis.element.attr( \"role\", \"spinbutton\" );\n\n\t\t// button bindings\n\t\tthis.buttons = uiSpinner.find( \".ui-spinner-button\" )\n\t\t\t.attr( \"tabIndex\", -1 )\n\t\t\t.button()\n\t\t\t.removeClass( \"ui-corner-all\" );\n\n\t\t// IE 6 doesn't understand height: 50% for the buttons\n\t\t// unless the wrapper has an explicit height\n\t\tif ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&\n\t\t\t\tuiSpinner.height() > 0 ) {\n\t\t\tuiSpinner.height( uiSpinner.height() );\n\t\t}\n\n\t\t// disable spinner if element was already disabled\n\t\tif ( this.options.disabled ) {\n\t\t\tthis.disable();\n\t\t}\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar options = this.options,\n\t\t\tkeyCode = $.ui.keyCode;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.UP:\n\t\t\tthis._repeat( null, 1, event );\n\t\t\treturn true;\n\t\tcase keyCode.DOWN:\n\t\t\tthis._repeat( null, -1, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_UP:\n\t\t\tthis._repeat( null, options.page, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_DOWN:\n\t\t\tthis._repeat( null, -options.page, event );\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_uiSpinnerHtml: function() {\n\t\treturn \"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>\";\n\t},\n\n\t_buttonHtml: function() {\n\t\treturn \"\" +\n\t\t\t\"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>\" +\n\t\t\t\t\"<span class='ui-icon \" + this.options.icons.up + \"'>&#9650;</span>\" +\n\t\t\t\"</a>\" +\n\t\t\t\"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>\" +\n\t\t\t\t\"<span class='ui-icon \" + this.options.icons.down + \"'>&#9660;</span>\" +\n\t\t\t\"</a>\";\n\t},\n\n\t_start: function( event ) {\n\t\tif ( !this.spinning && this._trigger( \"start\", event ) === false ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\t\tthis.spinning = true;\n\t\treturn true;\n\t},\n\n\t_repeat: function( i, steps, event ) {\n\t\ti = i || 500;\n\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay(function() {\n\t\t\tthis._repeat( 40, steps, event );\n\t\t}, i );\n\n\t\tthis._spin( steps * this.options.step, event );\n\t},\n\n\t_spin: function( step, event ) {\n\t\tvar value = this.value() || 0;\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\n\t\tvalue = this._adjustValue( value + step * this._increment( this.counter ) );\n\n\t\tif ( !this.spinning || this._trigger( \"spin\", event, { value: value } ) !== false) {\n\t\t\tthis._value( value );\n\t\t\tthis.counter++;\n\t\t}\n\t},\n\n\t_increment: function( i ) {\n\t\tvar incremental = this.options.incremental;\n\n\t\tif ( incremental ) {\n\t\t\treturn $.isFunction( incremental ) ?\n\t\t\t\tincremental( i ) :\n\t\t\t\tMath.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );\n\t\t}\n\n\t\treturn 1;\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_adjustValue: function( value ) {\n\t\tvar base, aboveMin,\n\t\t\toptions = this.options;\n\n\t\t// make sure we're at a valid step\n\t\t// - find out where we are relative to the base (min or 0)\n\t\tbase = options.min !== null ? options.min : 0;\n\t\taboveMin = value - base;\n\t\t// - round to the nearest step\n\t\taboveMin = Math.round(aboveMin / options.step) * options.step;\n\t\t// - rounding is based on 0, so adjust back to our base\n\t\tvalue = base + aboveMin;\n\n\t\t// fix precision from bad JS floating point math\n\t\tvalue = parseFloat( value.toFixed( this._precision() ) );\n\n\t\t// clamp the value\n\t\tif ( options.max !== null && value > options.max) {\n\t\t\treturn options.max;\n\t\t}\n\t\tif ( options.min !== null && value < options.min ) {\n\t\t\treturn options.min;\n\t\t}\n\n\t\treturn value;\n\t},\n\n\t_stop: function( event ) {\n\t\tif ( !this.spinning ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( this.timer );\n\t\tclearTimeout( this.mousewheelTimer );\n\t\tthis.counter = 0;\n\t\tthis.spinning = false;\n\t\tthis._trigger( \"stop\", event );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"culture\" || key === \"numberFormat\" ) {\n\t\t\tvar prevValue = this._parse( this.element.val() );\n\t\t\tthis.options[ key ] = value;\n\t\t\tthis.element.val( this._format( prevValue ) );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"max\" || key === \"min\" || key === \"step\" ) {\n\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\tvalue = this._parse( value );\n\t\t\t}\n\t\t}\n\t\tif ( key === \"icons\" ) {\n\t\t\tthis.buttons.first().find( \".ui-icon\" )\n\t\t\t\t.removeClass( this.options.icons.up )\n\t\t\t\t.addClass( value.up );\n\t\t\tthis.buttons.last().find( \".ui-icon\" )\n\t\t\t\t.removeClass( this.options.icons.down )\n\t\t\t\t.addClass( value.down );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.widget().toggleClass( \"ui-state-disabled\", !!value );\n\t\t\tthis.element.prop( \"disabled\", !!value );\n\t\t\tthis.buttons.button( value ? \"disable\" : \"enable\" );\n\t\t}\n\t},\n\n\t_setOptions: spinner_modifier(function( options ) {\n\t\tthis._super( options );\n\t}),\n\n\t_parse: function( val ) {\n\t\tif ( typeof val === \"string\" && val !== \"\" ) {\n\t\t\tval = window.Globalize && this.options.numberFormat ?\n\t\t\t\tGlobalize.parseFloat( val, 10, this.options.culture ) : +val;\n\t\t}\n\t\treturn val === \"\" || isNaN( val ) ? null : val;\n\t},\n\n\t_format: function( value ) {\n\t\tif ( value === \"\" ) {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn window.Globalize && this.options.numberFormat ?\n\t\t\tGlobalize.format( value, this.options.numberFormat, this.options.culture ) :\n\t\t\tvalue;\n\t},\n\n\t_refresh: function() {\n\t\tthis.element.attr({\n\t\t\t\"aria-valuemin\": this.options.min,\n\t\t\t\"aria-valuemax\": this.options.max,\n\t\t\t// TODO: what should we do with values that can't be parsed?\n\t\t\t\"aria-valuenow\": this._parse( this.element.val() )\n\t\t});\n\t},\n\n\tisValid: function() {\n\t\tvar value = this.value();\n\n\t\t// null is invalid\n\t\tif ( value === null ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// if value gets adjusted, it's invalid\n\t\treturn value === this._adjustValue( value );\n\t},\n\n\t// update the value without triggering change\n\t_value: function( value, allowAny ) {\n\t\tvar parsed;\n\t\tif ( value !== \"\" ) {\n\t\t\tparsed = this._parse( value );\n\t\t\tif ( parsed !== null ) {\n\t\t\t\tif ( !allowAny ) {\n\t\t\t\t\tparsed = this._adjustValue( parsed );\n\t\t\t\t}\n\t\t\t\tvalue = this._format( parsed );\n\t\t\t}\n\t\t}\n\t\tthis.element.val( value );\n\t\tthis._refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.removeClass( \"ui-spinner-input\" )\n\t\t\t.prop( \"disabled\", false )\n\t\t\t.removeAttr( \"autocomplete\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-valuemin\" )\n\t\t\t.removeAttr( \"aria-valuemax\" )\n\t\t\t.removeAttr( \"aria-valuenow\" );\n\t\tthis.uiSpinner.replaceWith( this.element );\n\t},\n\n\tstepUp: spinner_modifier(function( steps ) {\n\t\tthis._stepUp( steps );\n\t}),\n\t_stepUp: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( (steps || 1) * this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tstepDown: spinner_modifier(function( steps ) {\n\t\tthis._stepDown( steps );\n\t}),\n\t_stepDown: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( (steps || 1) * -this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tpageUp: spinner_modifier(function( pages ) {\n\t\tthis._stepUp( (pages || 1) * this.options.page );\n\t}),\n\n\tpageDown: spinner_modifier(function( pages ) {\n\t\tthis._stepDown( (pages || 1) * this.options.page );\n\t}),\n\n\tvalue: function( newVal ) {\n\t\tif ( !arguments.length ) {\n\t\t\treturn this._parse( this.element.val() );\n\t\t}\n\t\tspinner_modifier( this._value ).call( this, newVal );\n\t},\n\n\twidget: function() {\n\t\treturn this.uiSpinner;\n\t}\n});\n\n\n/*!\n * jQuery UI Tabs 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/tabs/\n */\n\n\nvar tabs = $.widget( \"ui.tabs\", {\n\tversion: \"1.11.4\",\n\tdelay: 300,\n\toptions: {\n\t\tactive: null,\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theightStyle: \"content\",\n\t\thide: null,\n\t\tshow: null,\n\n\t\t// callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null,\n\t\tbeforeLoad: null,\n\t\tload: null\n\t},\n\n\t_isLocal: (function() {\n\t\tvar rhash = /#.*$/;\n\n\t\treturn function( anchor ) {\n\t\t\tvar anchorUrl, locationUrl;\n\n\t\t\t// support: IE7\n\t\t\t// IE7 doesn't normalize the href property when set via script (#9317)\n\t\t\tanchor = anchor.cloneNode( false );\n\n\t\t\tanchorUrl = anchor.href.replace( rhash, \"\" );\n\t\t\tlocationUrl = location.href.replace( rhash, \"\" );\n\n\t\t\t// decoding may throw an error if the URL isn't UTF-8 (#9518)\n\t\t\ttry {\n\t\t\t\tanchorUrl = decodeURIComponent( anchorUrl );\n\t\t\t} catch ( error ) {}\n\t\t\ttry {\n\t\t\t\tlocationUrl = decodeURIComponent( locationUrl );\n\t\t\t} catch ( error ) {}\n\n\t\t\treturn anchor.hash.length > 1 && anchorUrl === locationUrl;\n\t\t};\n\t})(),\n\n\t_create: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.running = false;\n\n\t\tthis.element\n\t\t\t.addClass( \"ui-tabs ui-widget ui-widget-content ui-corner-all\" )\n\t\t\t.toggleClass( \"ui-tabs-collapsible\", options.collapsible );\n\n\t\tthis._processTabs();\n\t\toptions.active = this._initialActive();\n\n\t\t// Take disabling tabs via class attribute from HTML\n\t\t// into account and update option properly.\n\t\tif ( $.isArray( options.disabled ) ) {\n\t\t\toptions.disabled = $.unique( options.disabled.concat(\n\t\t\t\t$.map( this.tabs.filter( \".ui-state-disabled\" ), function( li ) {\n\t\t\t\t\treturn that.tabs.index( li );\n\t\t\t\t})\n\t\t\t) ).sort();\n\t\t}\n\n\t\t// check for length avoids error when initializing empty list\n\t\tif ( this.options.active !== false && this.anchors.length ) {\n\t\t\tthis.active = this._findActive( options.active );\n\t\t} else {\n\t\t\tthis.active = $();\n\t\t}\n\n\t\tthis._refresh();\n\n\t\tif ( this.active.length ) {\n\t\t\tthis.load( options.active );\n\t\t}\n\t},\n\n\t_initialActive: function() {\n\t\tvar active = this.options.active,\n\t\t\tcollapsible = this.options.collapsible,\n\t\t\tlocationHash = location.hash.substring( 1 );\n\n\t\tif ( active === null ) {\n\t\t\t// check the fragment identifier in the URL\n\t\t\tif ( locationHash ) {\n\t\t\t\tthis.tabs.each(function( i, tab ) {\n\t\t\t\t\tif ( $( tab ).attr( \"aria-controls\" ) === locationHash ) {\n\t\t\t\t\t\tactive = i;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// check for a tab marked active via a class\n\t\t\tif ( active === null ) {\n\t\t\t\tactive = this.tabs.index( this.tabs.filter( \".ui-tabs-active\" ) );\n\t\t\t}\n\n\t\t\t// no active tab, set to false\n\t\t\tif ( active === null || active === -1 ) {\n\t\t\t\tactive = this.tabs.length ? 0 : false;\n\t\t\t}\n\t\t}\n\n\t\t// handle numbers: negative, out of range\n\t\tif ( active !== false ) {\n\t\t\tactive = this.tabs.index( this.tabs.eq( active ) );\n\t\t\tif ( active === -1 ) {\n\t\t\t\tactive = collapsible ? false : 0;\n\t\t\t}\n\t\t}\n\n\t\t// don't allow collapsible: false and active: false\n\t\tif ( !collapsible && active === false && this.anchors.length ) {\n\t\t\tactive = 0;\n\t\t}\n\n\t\treturn active;\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\ttab: this.active,\n\t\t\tpanel: !this.active.length ? $() : this._getPanelForTab( this.active )\n\t\t};\n\t},\n\n\t_tabKeydown: function( event ) {\n\t\tvar focusedTab = $( this.document[0].activeElement ).closest( \"li\" ),\n\t\t\tselectedIndex = this.tabs.index( focusedTab ),\n\t\t\tgoingForward = true;\n\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tselectedIndex++;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.UP:\n\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\tgoingForward = false;\n\t\t\t\tselectedIndex--;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.END:\n\t\t\t\tselectedIndex = this.anchors.length - 1;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\tselectedIndex = 0;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.SPACE:\n\t\t\t\t// Activate only, no collapsing\n\t\t\t\tevent.preventDefault();\n\t\t\t\tclearTimeout( this.activating );\n\t\t\t\tthis._activate( selectedIndex );\n\t\t\t\treturn;\n\t\t\tcase $.ui.keyCode.ENTER:\n\t\t\t\t// Toggle (cancel delayed activation, allow collapsing)\n\t\t\t\tevent.preventDefault();\n\t\t\t\tclearTimeout( this.activating );\n\t\t\t\t// Determine if we should collapse or activate\n\t\t\t\tthis._activate( selectedIndex === this.options.active ? false : selectedIndex );\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\t// Focus the appropriate tab, based on which key was pressed\n\t\tevent.preventDefault();\n\t\tclearTimeout( this.activating );\n\t\tselectedIndex = this._focusNextTab( selectedIndex, goingForward );\n\n\t\t// Navigating with control/command key will prevent automatic activation\n\t\tif ( !event.ctrlKey && !event.metaKey ) {\n\n\t\t\t// Update aria-selected immediately so that AT think the tab is already selected.\n\t\t\t// Otherwise AT may confuse the user by stating that they need to activate the tab,\n\t\t\t// but the tab will already be activated by the time the announcement finishes.\n\t\t\tfocusedTab.attr( \"aria-selected\", \"false\" );\n\t\t\tthis.tabs.eq( selectedIndex ).attr( \"aria-selected\", \"true\" );\n\n\t\t\tthis.activating = this._delay(function() {\n\t\t\t\tthis.option( \"active\", selectedIndex );\n\t\t\t}, this.delay );\n\t\t}\n\t},\n\n\t_panelKeydown: function( event ) {\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ctrl+up moves focus to the current tab\n\t\tif ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.active.focus();\n\t\t}\n\t},\n\n\t// Alt+page up/down moves focus to the previous/next tab (and activates)\n\t_handlePageNav: function( event ) {\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active - 1, false ) );\n\t\t\treturn true;\n\t\t}\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active + 1, true ) );\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t_findNextTab: function( index, goingForward ) {\n\t\tvar lastTabIndex = this.tabs.length - 1;\n\n\t\tfunction constrain() {\n\t\t\tif ( index > lastTabIndex ) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\tif ( index < 0 ) {\n\t\t\t\tindex = lastTabIndex;\n\t\t\t}\n\t\t\treturn index;\n\t\t}\n\n\t\twhile ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {\n\t\t\tindex = goingForward ? index + 1 : index - 1;\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_focusNextTab: function( index, goingForward ) {\n\t\tindex = this._findNextTab( index, goingForward );\n\t\tthis.tabs.eq( index ).focus();\n\t\treturn index;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\t// don't use the widget factory's disabled handling\n\t\t\tthis._setupDisabled( value );\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value);\n\n\t\tif ( key === \"collapsible\" ) {\n\t\t\tthis.element.toggleClass( \"ui-tabs-collapsible\", value );\n\t\t\t// Setting collapsible: false while collapsed; open first panel\n\t\t\tif ( !value && this.options.active === false ) {\n\t\t\t\tthis._activate( 0 );\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tif ( key === \"heightStyle\" ) {\n\t\t\tthis._setupHeightStyle( value );\n\t\t}\n\t},\n\n\t_sanitizeSelector: function( hash ) {\n\t\treturn hash ? hash.replace( /[!\"$%&'()*+,.\\/:;<=>?@\\[\\]\\^`{|}~]/g, \"\\\\$&\" ) : \"\";\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options,\n\t\t\tlis = this.tablist.children( \":has(a[href])\" );\n\n\t\t// get disabled tabs from class attribute from HTML\n\t\t// this will get converted to a boolean if needed in _refresh()\n\t\toptions.disabled = $.map( lis.filter( \".ui-state-disabled\" ), function( tab ) {\n\t\t\treturn lis.index( tab );\n\t\t});\n\n\t\tthis._processTabs();\n\n\t\t// was collapsed or no tabs\n\t\tif ( options.active === false || !this.anchors.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\t\t// was active, but active tab is gone\n\t\t} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {\n\t\t\t// all remaining tabs are disabled\n\t\t\tif ( this.tabs.length === options.disabled.length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\t\t\t// activate previous tab\n\t\t\t} else {\n\t\t\t\tthis._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );\n\t\t\t}\n\t\t// was active, active tab still exists\n\t\t} else {\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.tabs.index( this.active );\n\t\t}\n\n\t\tthis._refresh();\n\t},\n\n\t_refresh: function() {\n\t\tthis._setupDisabled( this.options.disabled );\n\t\tthis._setupEvents( this.options.event );\n\t\tthis._setupHeightStyle( this.options.heightStyle );\n\n\t\tthis.tabs.not( this.active ).attr({\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\ttabIndex: -1\n\t\t});\n\t\tthis.panels.not( this._getPanelForTab( this.active ) )\n\t\t\t.hide()\n\t\t\t.attr({\n\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t});\n\n\t\t// Make sure one tab is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.tabs.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active\n\t\t\t\t.addClass( \"ui-tabs-active ui-state-active\" )\n\t\t\t\t.attr({\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t});\n\t\t\tthis._getPanelForTab( this.active )\n\t\t\t\t.show()\n\t\t\t\t.attr({\n\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t});\n\t\t}\n\t},\n\n\t_processTabs: function() {\n\t\tvar that = this,\n\t\t\tprevTabs = this.tabs,\n\t\t\tprevAnchors = this.anchors,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.tablist = this._getList()\n\t\t\t.addClass( \"ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all\" )\n\t\t\t.attr( \"role\", \"tablist\" )\n\n\t\t\t// Prevent users from focusing disabled tabs via click\n\t\t\t.delegate( \"> li\", \"mousedown\" + this.eventNamespace, function( event ) {\n\t\t\t\tif ( $( this ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// support: IE <9\n\t\t\t// Preventing the default action in mousedown doesn't prevent IE\n\t\t\t// from focusing the element, so if the anchor gets focused, blur.\n\t\t\t// We don't have to worry about focusing the previously focused\n\t\t\t// element since clicking on a non-focusable element should focus\n\t\t\t// the body anyway.\n\t\t\t.delegate( \".ui-tabs-anchor\", \"focus\" + this.eventNamespace, function() {\n\t\t\t\tif ( $( this ).closest( \"li\" ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t}\n\t\t\t});\n\n\t\tthis.tabs = this.tablist.find( \"> li:has(a[href])\" )\n\t\t\t.addClass( \"ui-state-default ui-corner-top\" )\n\t\t\t.attr({\n\t\t\t\trole: \"tab\",\n\t\t\t\ttabIndex: -1\n\t\t\t});\n\n\t\tthis.anchors = this.tabs.map(function() {\n\t\t\t\treturn $( \"a\", this )[ 0 ];\n\t\t\t})\n\t\t\t.addClass( \"ui-tabs-anchor\" )\n\t\t\t.attr({\n\t\t\t\trole: \"presentation\",\n\t\t\t\ttabIndex: -1\n\t\t\t});\n\n\t\tthis.panels = $();\n\n\t\tthis.anchors.each(function( i, anchor ) {\n\t\t\tvar selector, panel, panelId,\n\t\t\t\tanchorId = $( anchor ).uniqueId().attr( \"id\" ),\n\t\t\t\ttab = $( anchor ).closest( \"li\" ),\n\t\t\t\toriginalAriaControls = tab.attr( \"aria-controls\" );\n\n\t\t\t// inline tab\n\t\t\tif ( that._isLocal( anchor ) ) {\n\t\t\t\tselector = anchor.hash;\n\t\t\t\tpanelId = selector.substring( 1 );\n\t\t\t\tpanel = that.element.find( that._sanitizeSelector( selector ) );\n\t\t\t// remote tab\n\t\t\t} else {\n\t\t\t\t// If the tab doesn't already have aria-controls,\n\t\t\t\t// generate an id by using a throw-away element\n\t\t\t\tpanelId = tab.attr( \"aria-controls\" ) || $( {} ).uniqueId()[ 0 ].id;\n\t\t\t\tselector = \"#\" + panelId;\n\t\t\t\tpanel = that.element.find( selector );\n\t\t\t\tif ( !panel.length ) {\n\t\t\t\t\tpanel = that._createPanel( panelId );\n\t\t\t\t\tpanel.insertAfter( that.panels[ i - 1 ] || that.tablist );\n\t\t\t\t}\n\t\t\t\tpanel.attr( \"aria-live\", \"polite\" );\n\t\t\t}\n\n\t\t\tif ( panel.length) {\n\t\t\t\tthat.panels = that.panels.add( panel );\n\t\t\t}\n\t\t\tif ( originalAriaControls ) {\n\t\t\t\ttab.data( \"ui-tabs-aria-controls\", originalAriaControls );\n\t\t\t}\n\t\t\ttab.attr({\n\t\t\t\t\"aria-controls\": panelId,\n\t\t\t\t\"aria-labelledby\": anchorId\n\t\t\t});\n\t\t\tpanel.attr( \"aria-labelledby\", anchorId );\n\t\t});\n\n\t\tthis.panels\n\t\t\t.addClass( \"ui-tabs-panel ui-widget-content ui-corner-bottom\" )\n\t\t\t.attr( \"role\", \"tabpanel\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevTabs ) {\n\t\t\tthis._off( prevTabs.not( this.tabs ) );\n\t\t\tthis._off( prevAnchors.not( this.anchors ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t// allow overriding how to find the list for rare usage scenarios (#7715)\n\t_getList: function() {\n\t\treturn this.tablist || this.element.find( \"ol,ul\" ).eq( 0 );\n\t},\n\n\t_createPanel: function( id ) {\n\t\treturn $( \"<div>\" )\n\t\t\t.attr( \"id\", id )\n\t\t\t.addClass( \"ui-tabs-panel ui-widget-content ui-corner-bottom\" )\n\t\t\t.data( \"ui-tabs-destroy\", true );\n\t},\n\n\t_setupDisabled: function( disabled ) {\n\t\tif ( $.isArray( disabled ) ) {\n\t\t\tif ( !disabled.length ) {\n\t\t\t\tdisabled = false;\n\t\t\t} else if ( disabled.length === this.anchors.length ) {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\t\t}\n\n\t\t// disable tabs\n\t\tfor ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {\n\t\t\tif ( disabled === true || $.inArray( i, disabled ) !== -1 ) {\n\t\t\t\t$( li )\n\t\t\t\t\t.addClass( \"ui-state-disabled\" )\n\t\t\t\t\t.attr( \"aria-disabled\", \"true\" );\n\t\t\t} else {\n\t\t\t\t$( li )\n\t\t\t\t\t.removeClass( \"ui-state-disabled\" )\n\t\t\t\t\t.removeAttr( \"aria-disabled\" );\n\t\t\t}\n\t\t}\n\n\t\tthis.options.disabled = disabled;\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {};\n\t\tif ( event ) {\n\t\t\t$.each( event.split(\" \"), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t});\n\t\t}\n\n\t\tthis._off( this.anchors.add( this.tabs ).add( this.panels ) );\n\t\t// Always prevent the default action, even when disabled\n\t\tthis._on( true, this.anchors, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t});\n\t\tthis._on( this.anchors, events );\n\t\tthis._on( this.tabs, { keydown: \"_tabKeydown\" } );\n\t\tthis._on( this.panels, { keydown: \"_panelKeydown\" } );\n\n\t\tthis._focusable( this.tabs );\n\t\tthis._hoverable( this.tabs );\n\t},\n\n\t_setupHeightStyle: function( heightStyle ) {\n\t\tvar maxHeight,\n\t\t\tparent = this.element.parent();\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tmaxHeight -= this.element.outerHeight() - this.element.height();\n\n\t\t\tthis.element.siblings( \":visible\" ).each(function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t});\n\n\t\t\tthis.element.children().not( this.panels ).each(function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t});\n\n\t\t\tthis.panels.each(function() {\n\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t})\n\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.panels.each(function() {\n\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).height( \"\" ).height() );\n\t\t\t}).height( maxHeight );\n\t\t}\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar options = this.options,\n\t\t\tactive = this.active,\n\t\t\tanchor = $( event.currentTarget ),\n\t\t\ttab = anchor.closest( \"li\" ),\n\t\t\tclickedIsActive = tab[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : this._getPanelForTab( tab ),\n\t\t\ttoHide = !active.length ? $() : this._getPanelForTab( active ),\n\t\t\teventData = {\n\t\t\t\toldTab: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewTab: collapsing ? $() : tab,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif ( tab.hasClass( \"ui-state-disabled\" ) ||\n\t\t\t\t// tab is already loading\n\t\t\t\ttab.hasClass( \"ui-tabs-loading\" ) ||\n\t\t\t\t// can't switch durning an animation\n\t\t\t\tthis.running ||\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.tabs.index( tab );\n\n\t\tthis.active = clickedIsActive ? $() : tab;\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tif ( !toHide.length && !toShow.length ) {\n\t\t\t$.error( \"jQuery UI Tabs: Mismatching fragment identifier.\" );\n\t\t}\n\n\t\tif ( toShow.length ) {\n\t\t\tthis.load( this.tabs.index( tab ), event );\n\t\t}\n\t\tthis._toggle( event, eventData );\n\t},\n\n\t// handles show/hide for selecting tabs\n\t_toggle: function( event, eventData ) {\n\t\tvar that = this,\n\t\t\ttoShow = eventData.newPanel,\n\t\t\ttoHide = eventData.oldPanel;\n\n\t\tthis.running = true;\n\n\t\tfunction complete() {\n\t\t\tthat.running = false;\n\t\t\tthat._trigger( \"activate\", event, eventData );\n\t\t}\n\n\t\tfunction show() {\n\t\t\teventData.newTab.closest( \"li\" ).addClass( \"ui-tabs-active ui-state-active\" );\n\n\t\t\tif ( toShow.length && that.options.show ) {\n\t\t\t\tthat._show( toShow, that.options.show, complete );\n\t\t\t} else {\n\t\t\t\ttoShow.show();\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\n\t\t// start out by hiding, then showing, then completing\n\t\tif ( toHide.length && this.options.hide ) {\n\t\t\tthis._hide( toHide, this.options.hide, function() {\n\t\t\t\teventData.oldTab.closest( \"li\" ).removeClass( \"ui-tabs-active ui-state-active\" );\n\t\t\t\tshow();\n\t\t\t});\n\t\t} else {\n\t\t\teventData.oldTab.closest( \"li\" ).removeClass( \"ui-tabs-active ui-state-active\" );\n\t\t\ttoHide.hide();\n\t\t\tshow();\n\t\t}\n\n\t\ttoHide.attr( \"aria-hidden\", \"true\" );\n\t\teventData.oldTab.attr({\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t});\n\t\t// If we're switching tabs, remove the old tab from the tab order.\n\t\t// If we're opening from collapsed state, remove the previous tab from the tab order.\n\t\t// If we're collapsing, then keep the collapsing tab in the tab order.\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\teventData.oldTab.attr( \"tabIndex\", -1 );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.tabs.filter(function() {\n\t\t\t\treturn $( this ).attr( \"tabIndex\" ) === 0;\n\t\t\t})\n\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow.attr( \"aria-hidden\", \"false\" );\n\t\teventData.newTab.attr({\n\t\t\t\"aria-selected\": \"true\",\n\t\t\t\"aria-expanded\": \"true\",\n\t\t\ttabIndex: 0\n\t\t});\n\t},\n\n\t_activate: function( index ) {\n\t\tvar anchor,\n\t\t\tactive = this._findActive( index );\n\n\t\t// trying to activate the already active panel\n\t\tif ( active[ 0 ] === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// trying to collapse, simulate a click on the current active header\n\t\tif ( !active.length ) {\n\t\t\tactive = this.active;\n\t\t}\n\n\t\tanchor = active.find( \".ui-tabs-anchor\" )[ 0 ];\n\t\tthis._eventHandler({\n\t\t\ttarget: anchor,\n\t\t\tcurrentTarget: anchor,\n\t\t\tpreventDefault: $.noop\n\t\t});\n\t},\n\n\t_findActive: function( index ) {\n\t\treturn index === false ? $() : this.tabs.eq( index );\n\t},\n\n\t_getIndex: function( index ) {\n\t\t// meta-function to give users option to provide a href string instead of a numerical index.\n\t\tif ( typeof index === \"string\" ) {\n\t\t\tindex = this.anchors.index( this.anchors.filter( \"[href$='\" + index + \"']\" ) );\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_destroy: function() {\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tthis.element.removeClass( \"ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible\" );\n\n\t\tthis.tablist\n\t\t\t.removeClass( \"ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all\" )\n\t\t\t.removeAttr( \"role\" );\n\n\t\tthis.anchors\n\t\t\t.removeClass( \"ui-tabs-anchor\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis.tablist.unbind( this.eventNamespace );\n\n\t\tthis.tabs.add( this.panels ).each(function() {\n\t\t\tif ( $.data( this, \"ui-tabs-destroy\" ) ) {\n\t\t\t\t$( this ).remove();\n\t\t\t} else {\n\t\t\t\t$( this )\n\t\t\t\t\t.removeClass( \"ui-state-default ui-state-active ui-state-disabled \" +\n\t\t\t\t\t\t\"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel\" )\n\t\t\t\t\t.removeAttr( \"tabIndex\" )\n\t\t\t\t\t.removeAttr( \"aria-live\" )\n\t\t\t\t\t.removeAttr( \"aria-busy\" )\n\t\t\t\t\t.removeAttr( \"aria-selected\" )\n\t\t\t\t\t.removeAttr( \"aria-labelledby\" )\n\t\t\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t\t\t.removeAttr( \"aria-expanded\" )\n\t\t\t\t\t.removeAttr( \"role\" );\n\t\t\t}\n\t\t});\n\n\t\tthis.tabs.each(function() {\n\t\t\tvar li = $( this ),\n\t\t\t\tprev = li.data( \"ui-tabs-aria-controls\" );\n\t\t\tif ( prev ) {\n\t\t\t\tli\n\t\t\t\t\t.attr( \"aria-controls\", prev )\n\t\t\t\t\t.removeData( \"ui-tabs-aria-controls\" );\n\t\t\t} else {\n\t\t\t\tli.removeAttr( \"aria-controls\" );\n\t\t\t}\n\t\t});\n\n\t\tthis.panels.show();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tthis.panels.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\tenable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = false;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.map( disabled, function( num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdisabled = $.map( this.tabs, function( li, num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis._setupDisabled( disabled );\n\t},\n\n\tdisable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === true ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = true;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.inArray( index, disabled ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( $.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.merge( [ index ], disabled ).sort();\n\t\t\t} else {\n\t\t\t\tdisabled = [ index ];\n\t\t\t}\n\t\t}\n\t\tthis._setupDisabled( disabled );\n\t},\n\n\tload: function( index, event ) {\n\t\tindex = this._getIndex( index );\n\t\tvar that = this,\n\t\t\ttab = this.tabs.eq( index ),\n\t\t\tanchor = tab.find( \".ui-tabs-anchor\" ),\n\t\t\tpanel = this._getPanelForTab( tab ),\n\t\t\teventData = {\n\t\t\t\ttab: tab,\n\t\t\t\tpanel: panel\n\t\t\t},\n\t\t\tcomplete = function( jqXHR, status ) {\n\t\t\t\tif ( status === \"abort\" ) {\n\t\t\t\t\tthat.panels.stop( false, true );\n\t\t\t\t}\n\n\t\t\t\ttab.removeClass( \"ui-tabs-loading\" );\n\t\t\t\tpanel.removeAttr( \"aria-busy\" );\n\n\t\t\t\tif ( jqXHR === that.xhr ) {\n\t\t\t\t\tdelete that.xhr;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// not remote\n\t\tif ( this._isLocal( anchor[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );\n\n\t\t// support: jQuery <1.8\n\t\t// jQuery <1.8 returns false if the request is canceled in beforeSend,\n\t\t// but as of 1.8, $.ajax() always returns a jqXHR object.\n\t\tif ( this.xhr && this.xhr.statusText !== \"canceled\" ) {\n\t\t\ttab.addClass( \"ui-tabs-loading\" );\n\t\t\tpanel.attr( \"aria-busy\", \"true\" );\n\n\t\t\tthis.xhr\n\t\t\t\t.done(function( response, status, jqXHR ) {\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// http://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tpanel.html( response );\n\t\t\t\t\t\tthat._trigger( \"load\", event, eventData );\n\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t})\n\t\t\t\t.fail(function( jqXHR, status ) {\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// http://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t});\n\t\t}\n\t},\n\n\t_ajaxSettings: function( anchor, event, eventData ) {\n\t\tvar that = this;\n\t\treturn {\n\t\t\turl: anchor.attr( \"href\" ),\n\t\t\tbeforeSend: function( jqXHR, settings ) {\n\t\t\t\treturn that._trigger( \"beforeLoad\", event,\n\t\t\t\t\t$.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );\n\t\t\t}\n\t\t};\n\t},\n\n\t_getPanelForTab: function( tab ) {\n\t\tvar id = $( tab ).attr( \"aria-controls\" );\n\t\treturn this.element.find( this._sanitizeSelector( \"#\" + id ) );\n\t}\n});\n\n\n/*!\n * jQuery UI Tooltip 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/tooltip/\n */\n\n\nvar tooltip = $.widget( \"ui.tooltip\", {\n\tversion: \"1.11.4\",\n\toptions: {\n\t\tcontent: function() {\n\t\t\t// support: IE<9, Opera in jQuery <1.7\n\t\t\t// .text() can't accept undefined, so coerce to a string\n\t\t\tvar title = $( this ).attr( \"title\" ) || \"\";\n\t\t\t// Escape title, since we're going from an attribute to raw HTML\n\t\t\treturn $( \"<a>\" ).text( title ).html();\n\t\t},\n\t\thide: true,\n\t\t// Disabled elements have inconsistent behavior across browsers (#8661)\n\t\titems: \"[title]:not([disabled])\",\n\t\tposition: {\n\t\t\tmy: \"left top+15\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"flipfit flip\"\n\t\t},\n\t\tshow: true,\n\t\ttooltipClass: null,\n\t\ttrack: false,\n\n\t\t// callbacks\n\t\tclose: null,\n\t\topen: null\n\t},\n\n\t_addDescribedBy: function( elem, id ) {\n\t\tvar describedby = (elem.attr( \"aria-describedby\" ) || \"\").split( /\\s+/ );\n\t\tdescribedby.push( id );\n\t\telem\n\t\t\t.data( \"ui-tooltip-id\", id )\n\t\t\t.attr( \"aria-describedby\", $.trim( describedby.join( \" \" ) ) );\n\t},\n\n\t_removeDescribedBy: function( elem ) {\n\t\tvar id = elem.data( \"ui-tooltip-id\" ),\n\t\t\tdescribedby = (elem.attr( \"aria-describedby\" ) || \"\").split( /\\s+/ ),\n\t\t\tindex = $.inArray( id, describedby );\n\n\t\tif ( index !== -1 ) {\n\t\t\tdescribedby.splice( index, 1 );\n\t\t}\n\n\t\telem.removeData( \"ui-tooltip-id\" );\n\t\tdescribedby = $.trim( describedby.join( \" \" ) );\n\t\tif ( describedby ) {\n\t\t\telem.attr( \"aria-describedby\", describedby );\n\t\t} else {\n\t\t\telem.removeAttr( \"aria-describedby\" );\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._on({\n\t\t\tmouseover: \"open\",\n\t\t\tfocusin: \"open\"\n\t\t});\n\n\t\t// IDs of generated tooltips, needed for destroy\n\t\tthis.tooltips = {};\n\n\t\t// IDs of parent tooltips where we removed the title attribute\n\t\tthis.parents = {};\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._disable();\n\t\t}\n\n\t\t// Append the aria-live region so tooltips announce correctly\n\t\tthis.liveRegion = $( \"<div>\" )\n\t\t\t.attr({\n\t\t\t\trole: \"log\",\n\t\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\t\"aria-relevant\": \"additions\"\n\t\t\t})\n\t\t\t.addClass( \"ui-helper-hidden-accessible\" )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar that = this;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis[ value ? \"_disable\" : \"_enable\" ]();\n\t\t\tthis.options[ key ] = value;\n\t\t\t// disable element style changes\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"content\" ) {\n\t\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\t\tthat._updateContent( tooltipData.element );\n\t\t\t});\n\t\t}\n\t},\n\n\t_disable: function() {\n\t\tvar that = this;\n\n\t\t// close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\tvar event = $.Event( \"blur\" );\n\t\t\tevent.target = event.currentTarget = tooltipData.element[ 0 ];\n\t\t\tthat.close( event, true );\n\t\t});\n\n\t\t// remove title attributes to prevent native tooltips\n\t\tthis.element.find( this.options.items ).addBack().each(function() {\n\t\t\tvar element = $( this );\n\t\t\tif ( element.is( \"[title]\" ) ) {\n\t\t\t\telement\n\t\t\t\t\t.data( \"ui-tooltip-title\", element.attr( \"title\" ) )\n\t\t\t\t\t.removeAttr( \"title\" );\n\t\t\t}\n\t\t});\n\t},\n\n\t_enable: function() {\n\t\t// restore title attributes\n\t\tthis.element.find( this.options.items ).addBack().each(function() {\n\t\t\tvar element = $( this );\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t}\n\t\t});\n\t},\n\n\topen: function( event ) {\n\t\tvar that = this,\n\t\t\ttarget = $( event ? event.target : this.element )\n\t\t\t\t// we need closest here due to mouseover bubbling,\n\t\t\t\t// but always pointing at the same event target\n\t\t\t\t.closest( this.options.items );\n\n\t\t// No element to show a tooltip for or the tooltip is already open\n\t\tif ( !target.length || target.data( \"ui-tooltip-id\" ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( target.attr( \"title\" ) ) {\n\t\t\ttarget.data( \"ui-tooltip-title\", target.attr( \"title\" ) );\n\t\t}\n\n\t\ttarget.data( \"ui-tooltip-open\", true );\n\n\t\t// kill parent tooltips, custom or native, for hover\n\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\ttarget.parents().each(function() {\n\t\t\t\tvar parent = $( this ),\n\t\t\t\t\tblurEvent;\n\t\t\t\tif ( parent.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\tblurEvent = $.Event( \"blur\" );\n\t\t\t\t\tblurEvent.target = blurEvent.currentTarget = this;\n\t\t\t\t\tthat.close( blurEvent, true );\n\t\t\t\t}\n\t\t\t\tif ( parent.attr( \"title\" ) ) {\n\t\t\t\t\tparent.uniqueId();\n\t\t\t\t\tthat.parents[ this.id ] = {\n\t\t\t\t\t\telement: this,\n\t\t\t\t\t\ttitle: parent.attr( \"title\" )\n\t\t\t\t\t};\n\t\t\t\t\tparent.attr( \"title\", \"\" );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis._registerCloseHandlers( event, target );\n\t\tthis._updateContent( target, event );\n\t},\n\n\t_updateContent: function( target, event ) {\n\t\tvar content,\n\t\t\tcontentOption = this.options.content,\n\t\t\tthat = this,\n\t\t\teventType = event ? event.type : null;\n\n\t\tif ( typeof contentOption === \"string\" ) {\n\t\t\treturn this._open( event, target, contentOption );\n\t\t}\n\n\t\tcontent = contentOption.call( target[0], function( response ) {\n\n\t\t\t// IE may instantly serve a cached response for ajax requests\n\t\t\t// delay this call to _open so the other call to _open runs first\n\t\t\tthat._delay(function() {\n\n\t\t\t\t// Ignore async response if tooltip was closed already\n\t\t\t\tif ( !target.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// jQuery creates a special event for focusin when it doesn't\n\t\t\t\t// exist natively. To improve performance, the native event\n\t\t\t\t// object is reused and the type is changed. Therefore, we can't\n\t\t\t\t// rely on the type being correct after the event finished\n\t\t\t\t// bubbling, so we set it back to the previous value. (#8740)\n\t\t\t\tif ( event ) {\n\t\t\t\t\tevent.type = eventType;\n\t\t\t\t}\n\t\t\t\tthis._open( event, target, response );\n\t\t\t});\n\t\t});\n\t\tif ( content ) {\n\t\t\tthis._open( event, target, content );\n\t\t}\n\t},\n\n\t_open: function( event, target, content ) {\n\t\tvar tooltipData, tooltip, delayedShow, a11yContent,\n\t\t\tpositionOption = $.extend( {}, this.options.position );\n\n\t\tif ( !content ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Content can be updated multiple times. If the tooltip already\n\t\t// exists, then just update the content and bail.\n\t\ttooltipData = this._find( target );\n\t\tif ( tooltipData ) {\n\t\t\ttooltipData.tooltip.find( \".ui-tooltip-content\" ).html( content );\n\t\t\treturn;\n\t\t}\n\n\t\t// if we have a title, clear it to prevent the native tooltip\n\t\t// we have to check first to avoid defining a title if none exists\n\t\t// (we don't want to cause an element to start matching [title])\n\t\t//\n\t\t// We use removeAttr only for key events, to allow IE to export the correct\n\t\t// accessible attributes. For mouse events, set to empty string to avoid\n\t\t// native tooltip showing up (happens only when removing inside mouseover).\n\t\tif ( target.is( \"[title]\" ) ) {\n\t\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\t\ttarget.attr( \"title\", \"\" );\n\t\t\t} else {\n\t\t\t\ttarget.removeAttr( \"title\" );\n\t\t\t}\n\t\t}\n\n\t\ttooltipData = this._tooltip( target );\n\t\ttooltip = tooltipData.tooltip;\n\t\tthis._addDescribedBy( target, tooltip.attr( \"id\" ) );\n\t\ttooltip.find( \".ui-tooltip-content\" ).html( content );\n\n\t\t// Support: Voiceover on OS X, JAWS on IE <= 9\n\t\t// JAWS announces deletions even when aria-relevant=\"additions\"\n\t\t// Voiceover will sometimes re-read the entire log region's contents from the beginning\n\t\tthis.liveRegion.children().hide();\n\t\tif ( content.clone ) {\n\t\t\ta11yContent = content.clone();\n\t\t\ta11yContent.removeAttr( \"id\" ).find( \"[id]\" ).removeAttr( \"id\" );\n\t\t} else {\n\t\t\ta11yContent = content;\n\t\t}\n\t\t$( \"<div>\" ).html( a11yContent ).appendTo( this.liveRegion );\n\n\t\tfunction position( event ) {\n\t\t\tpositionOption.of = event;\n\t\t\tif ( tooltip.is( \":hidden\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttooltip.position( positionOption );\n\t\t}\n\t\tif ( this.options.track && event && /^mouse/.test( event.type ) ) {\n\t\t\tthis._on( this.document, {\n\t\t\t\tmousemove: position\n\t\t\t});\n\t\t\t// trigger once to override element-relative positioning\n\t\t\tposition( event );\n\t\t} else {\n\t\t\ttooltip.position( $.extend({\n\t\t\t\tof: target\n\t\t\t}, this.options.position ) );\n\t\t}\n\n\t\ttooltip.hide();\n\n\t\tthis._show( tooltip, this.options.show );\n\t\t// Handle tracking tooltips that are shown with a delay (#8644). As soon\n\t\t// as the tooltip is visible, position the tooltip using the most recent\n\t\t// event.\n\t\tif ( this.options.show && this.options.show.delay ) {\n\t\t\tdelayedShow = this.delayedShow = setInterval(function() {\n\t\t\t\tif ( tooltip.is( \":visible\" ) ) {\n\t\t\t\t\tposition( positionOption.of );\n\t\t\t\t\tclearInterval( delayedShow );\n\t\t\t\t}\n\t\t\t}, $.fx.interval );\n\t\t}\n\n\t\tthis._trigger( \"open\", event, { tooltip: tooltip } );\n\t},\n\n\t_registerCloseHandlers: function( event, target ) {\n\t\tvar events = {\n\t\t\tkeyup: function( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tvar fakeEvent = $.Event(event);\n\t\t\t\t\tfakeEvent.currentTarget = target[0];\n\t\t\t\t\tthis.close( fakeEvent, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Only bind remove handler for delegated targets. Non-delegated\n\t\t// tooltips will handle this in destroy.\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tevents.remove = function() {\n\t\t\t\tthis._removeTooltip( this._find( target ).tooltip );\n\t\t\t};\n\t\t}\n\n\t\tif ( !event || event.type === \"mouseover\" ) {\n\t\t\tevents.mouseleave = \"close\";\n\t\t}\n\t\tif ( !event || event.type === \"focusin\" ) {\n\t\t\tevents.focusout = \"close\";\n\t\t}\n\t\tthis._on( true, target, events );\n\t},\n\n\tclose: function( event ) {\n\t\tvar tooltip,\n\t\t\tthat = this,\n\t\t\ttarget = $( event ? event.currentTarget : this.element ),\n\t\t\ttooltipData = this._find( target );\n\n\t\t// The tooltip may already be closed\n\t\tif ( !tooltipData ) {\n\n\t\t\t// We set ui-tooltip-open immediately upon open (in open()), but only set the\n\t\t\t// additional data once there's actually content to show (in _open()). So even if the\n\t\t\t// tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in\n\t\t\t// the period between open() and _open().\n\t\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\t\treturn;\n\t\t}\n\n\t\ttooltip = tooltipData.tooltip;\n\n\t\t// disabling closes the tooltip, so we need to track when we're closing\n\t\t// to avoid an infinite loop in case the tooltip becomes disabled on close\n\t\tif ( tooltipData.closing ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear the interval for delayed tracking tooltips\n\t\tclearInterval( this.delayedShow );\n\n\t\t// only set title if we had one before (see comment in _open())\n\t\t// If the title attribute has changed since open(), don't restore\n\t\tif ( target.data( \"ui-tooltip-title\" ) && !target.attr( \"title\" ) ) {\n\t\t\ttarget.attr( \"title\", target.data( \"ui-tooltip-title\" ) );\n\t\t}\n\n\t\tthis._removeDescribedBy( target );\n\n\t\ttooltipData.hiding = true;\n\t\ttooltip.stop( true );\n\t\tthis._hide( tooltip, this.options.hide, function() {\n\t\t\tthat._removeTooltip( $( this ) );\n\t\t});\n\n\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\tthis._off( target, \"mouseleave focusout keyup\" );\n\n\t\t// Remove 'remove' binding only on delegated targets\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tthis._off( target, \"remove\" );\n\t\t}\n\t\tthis._off( this.document, \"mousemove\" );\n\n\t\tif ( event && event.type === \"mouseleave\" ) {\n\t\t\t$.each( this.parents, function( id, parent ) {\n\t\t\t\t$( parent.element ).attr( \"title\", parent.title );\n\t\t\t\tdelete that.parents[ id ];\n\t\t\t});\n\t\t}\n\n\t\ttooltipData.closing = true;\n\t\tthis._trigger( \"close\", event, { tooltip: tooltip } );\n\t\tif ( !tooltipData.hiding ) {\n\t\t\ttooltipData.closing = false;\n\t\t}\n\t},\n\n\t_tooltip: function( element ) {\n\t\tvar tooltip = $( \"<div>\" )\n\t\t\t\t.attr( \"role\", \"tooltip\" )\n\t\t\t\t.addClass( \"ui-tooltip ui-widget ui-corner-all ui-widget-content \" +\n\t\t\t\t\t( this.options.tooltipClass || \"\" ) ),\n\t\t\tid = tooltip.uniqueId().attr( \"id\" );\n\n\t\t$( \"<div>\" )\n\t\t\t.addClass( \"ui-tooltip-content\" )\n\t\t\t.appendTo( tooltip );\n\n\t\ttooltip.appendTo( this.document[0].body );\n\n\t\treturn this.tooltips[ id ] = {\n\t\t\telement: element,\n\t\t\ttooltip: tooltip\n\t\t};\n\t},\n\n\t_find: function( target ) {\n\t\tvar id = target.data( \"ui-tooltip-id\" );\n\t\treturn id ? this.tooltips[ id ] : null;\n\t},\n\n\t_removeTooltip: function( tooltip ) {\n\t\ttooltip.remove();\n\t\tdelete this.tooltips[ tooltip.attr( \"id\" ) ];\n\t},\n\n\t_destroy: function() {\n\t\tvar that = this;\n\n\t\t// close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\t// Delegate to close method to handle common cleanup\n\t\t\tvar event = $.Event( \"blur\" ),\n\t\t\t\telement = tooltipData.element;\n\t\t\tevent.target = event.currentTarget = element[ 0 ];\n\t\t\tthat.close( event, true );\n\n\t\t\t// Remove immediately; destroying an open tooltip doesn't use the\n\t\t\t// hide animation\n\t\t\t$( \"#\" + id ).remove();\n\n\t\t\t// Restore the title\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\t\t\t\t// If the title attribute has changed since open(), don't restore\n\t\t\t\tif ( !element.attr( \"title\" ) ) {\n\t\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t\t}\n\t\t\t\telement.removeData( \"ui-tooltip-title\" );\n\t\t\t}\n\t\t});\n\t\tthis.liveRegion.remove();\n\t}\n});\n\n\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/additional-methods.js",
    "content": "/*!\n * jQuery Validation Plugin v1.15.0\n *\n * http://jqueryvalidation.org/\n *\n * Copyright (c) 2016 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"./jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n( function() {\n\n\tfunction stripHtml( value ) {\n\n\t\t// Remove html tags and space chars\n\t\treturn value.replace( /<.[^<>]*?>/g, \" \" ).replace( /&nbsp;|&#160;/gi, \" \" )\n\n\t\t// Remove punctuation\n\t\t.replace( /[.(),;:!?%#$'\\\"_+=\\/\\-“”’]*/g, \"\" );\n\t}\n\n\t$.validator.addMethod( \"maxWords\", function( value, element, params ) {\n\t\treturn this.optional( element ) || stripHtml( value ).match( /\\b\\w+\\b/g ).length <= params;\n\t}, $.validator.format( \"Please enter {0} words or less.\" ) );\n\n\t$.validator.addMethod( \"minWords\", function( value, element, params ) {\n\t\treturn this.optional( element ) || stripHtml( value ).match( /\\b\\w+\\b/g ).length >= params;\n\t}, $.validator.format( \"Please enter at least {0} words.\" ) );\n\n\t$.validator.addMethod( \"rangeWords\", function( value, element, params ) {\n\t\tvar valueStripped = stripHtml( value ),\n\t\t\tregex = /\\b\\w+\\b/g;\n\t\treturn this.optional( element ) || valueStripped.match( regex ).length >= params[ 0 ] && valueStripped.match( regex ).length <= params[ 1 ];\n\t}, $.validator.format( \"Please enter between {0} and {1} words.\" ) );\n\n}() );\n\n// Accept a value from a file input based on a required mimetype\n$.validator.addMethod( \"accept\", function( value, element, param ) {\n\n\t// Split mime on commas in case we have multiple types we can accept\n\tvar typeParam = typeof param === \"string\" ? param.replace( /\\s/g, \"\" ) : \"image/*\",\n\toptionalValue = this.optional( element ),\n\ti, file, regex;\n\n\t// Element is optional\n\tif ( optionalValue ) {\n\t\treturn optionalValue;\n\t}\n\n\tif ( $( element ).attr( \"type\" ) === \"file\" ) {\n\n\t\t// Escape string to be used in the regex\n\t\t// see: http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n\t\t// Escape also \"/*\" as \"/.*\" as a wildcard\n\t\ttypeParam = typeParam.replace( /[\\-\\[\\]\\/\\{\\}\\(\\)\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\" ).replace( /,/g, \"|\" ).replace( \"\\/*\", \"/.*\" );\n\n\t\t// Check if the element has a FileList before checking each file\n\t\tif ( element.files && element.files.length ) {\n\t\t\tregex = new RegExp( \".?(\" + typeParam + \")$\", \"i\" );\n\t\t\tfor ( i = 0; i < element.files.length; i++ ) {\n\t\t\t\tfile = element.files[ i ];\n\n\t\t\t\t// Grab the mimetype from the loaded file, verify it matches\n\t\t\t\tif ( !file.type.match( regex ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Either return true because we've validated each file, or because the\n\t// browser does not support element.files and the FileList feature\n\treturn true;\n}, $.validator.format( \"Please enter a value with a valid mimetype.\" ) );\n\n$.validator.addMethod( \"alphanumeric\", function( value, element ) {\n\treturn this.optional( element ) || /^\\w+$/i.test( value );\n}, \"Letters, numbers, and underscores only please\" );\n\n/*\n * Dutch bank account numbers (not 'giro' numbers) have 9 digits\n * and pass the '11 check'.\n * We accept the notation with spaces, as that is common.\n * acceptable: 123456789 or 12 34 56 789\n */\n$.validator.addMethod( \"bankaccountNL\", function( value, element ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\tif ( !( /^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test( value ) ) ) {\n\t\treturn false;\n\t}\n\n\t// Now '11 check'\n\tvar account = value.replace( / /g, \"\" ), // Remove spaces\n\t\tsum = 0,\n\t\tlen = account.length,\n\t\tpos, factor, digit;\n\tfor ( pos = 0; pos < len; pos++ ) {\n\t\tfactor = len - pos;\n\t\tdigit = account.substring( pos, pos + 1 );\n\t\tsum = sum + factor * digit;\n\t}\n\treturn sum % 11 === 0;\n}, \"Please specify a valid bank account number\" );\n\n$.validator.addMethod( \"bankorgiroaccountNL\", function( value, element ) {\n\treturn this.optional( element ) ||\n\t\t\t( $.validator.methods.bankaccountNL.call( this, value, element ) ) ||\n\t\t\t( $.validator.methods.giroaccountNL.call( this, value, element ) );\n}, \"Please specify a valid bank or giro account number\" );\n\n/**\n * BIC is the business identifier code (ISO 9362). This BIC check is not a guarantee for authenticity.\n *\n * BIC pattern: BBBBCCLLbbb (8 or 11 characters long; bbb is optional)\n *\n * Validation is case-insensitive. Please make sure to normalize input yourself.\n *\n * BIC definition in detail:\n * - First 4 characters - bank code (only letters)\n * - Next 2 characters - ISO 3166-1 alpha-2 country code (only letters)\n * - Next 2 characters - location code (letters and digits)\n *   a. shall not start with '0' or '1'\n *   b. second character must be a letter ('O' is not allowed) or digit ('0' for test (therefore not allowed), '1' denoting passive participant, '2' typically reverse-billing)\n * - Last 3 characters - branch code, optional (shall not start with 'X' except in case of 'XXX' for primary office) (letters and digits)\n */\n$.validator.addMethod( \"bic\", function( value, element ) {\n    return this.optional( element ) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test( value.toUpperCase() );\n}, \"Please specify a valid BIC code\" );\n\n/*\n * Código de identificación fiscal ( CIF ) is the tax identification code for Spanish legal entities\n * Further rules can be found in Spanish on http://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal\n */\n$.validator.addMethod( \"cifES\", function( value ) {\n\t\"use strict\";\n\n\tvar num = [],\n\t\tcontrolDigit, sum, i, count, tmp, secondDigit;\n\n\tvalue = value.toUpperCase();\n\n\t// Quick format test\n\tif ( !value.match( \"((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)\" ) ) {\n\t\treturn false;\n\t}\n\n\tfor ( i = 0; i < 9; i++ ) {\n\t\tnum[ i ] = parseInt( value.charAt( i ), 10 );\n\t}\n\n\t// Algorithm for checking CIF codes\n\tsum = num[ 2 ] + num[ 4 ] + num[ 6 ];\n\tfor ( count = 1; count < 8; count += 2 ) {\n\t\ttmp = ( 2 * num[ count ] ).toString();\n\t\tsecondDigit = tmp.charAt( 1 );\n\n\t\tsum += parseInt( tmp.charAt( 0 ), 10 ) + ( secondDigit === \"\" ? 0 : parseInt( secondDigit, 10 ) );\n\t}\n\n\t/* The first (position 1) is a letter following the following criteria:\n\t *\tA. Corporations\n\t *\tB. LLCs\n\t *\tC. General partnerships\n\t *\tD. Companies limited partnerships\n\t *\tE. Communities of goods\n\t *\tF. Cooperative Societies\n\t *\tG. Associations\n\t *\tH. Communities of homeowners in horizontal property regime\n\t *\tJ. Civil Societies\n\t *\tK. Old format\n\t *\tL. Old format\n\t *\tM. Old format\n\t *\tN. Nonresident entities\n\t *\tP. Local authorities\n\t *\tQ. Autonomous bodies, state or not, and the like, and congregations and religious institutions\n\t *\tR. Congregations and religious institutions (since 2008 ORDER EHA/451/2008)\n\t *\tS. Organs of State Administration and regions\n\t *\tV. Agrarian Transformation\n\t *\tW. Permanent establishments of non-resident in Spain\n\t */\n\tif ( /^[ABCDEFGHJNPQRSUVW]{1}/.test( value ) ) {\n\t\tsum += \"\";\n\t\tcontrolDigit = 10 - parseInt( sum.charAt( sum.length - 1 ), 10 );\n\t\tvalue += controlDigit;\n\t\treturn ( num[ 8 ].toString() === String.fromCharCode( 64 + controlDigit ) || num[ 8 ].toString() === value.charAt( value.length - 1 ) );\n\t}\n\n\treturn false;\n\n}, \"Please specify a valid CIF number.\" );\n\n/*\n * Brazillian CPF number (Cadastrado de Pessoas Físicas) is the equivalent of a Brazilian tax registration number.\n * CPF numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.\n */\n$.validator.addMethod( \"cpfBR\", function( value ) {\n\n\t// Removing special characters from value\n\tvalue = value.replace( /([~!@#$%^&*()_+=`{}\\[\\]\\-|\\\\:;'<>,.\\/? ])+/g, \"\" );\n\n\t// Checking value to have 11 digits only\n\tif ( value.length !== 11 ) {\n\t\treturn false;\n\t}\n\n\tvar sum = 0,\n\t\tfirstCN, secondCN, checkResult, i;\n\n\tfirstCN = parseInt( value.substring( 9, 10 ), 10 );\n\tsecondCN = parseInt( value.substring( 10, 11 ), 10 );\n\n\tcheckResult = function( sum, cn ) {\n\t\tvar result = ( sum * 10 ) % 11;\n\t\tif ( ( result === 10 ) || ( result === 11 ) ) {\n\t\t\tresult = 0;\n\t\t}\n\t\treturn ( result === cn );\n\t};\n\n\t// Checking for dump data\n\tif ( value === \"\" ||\n\t\tvalue === \"00000000000\" ||\n\t\tvalue === \"11111111111\" ||\n\t\tvalue === \"22222222222\" ||\n\t\tvalue === \"33333333333\" ||\n\t\tvalue === \"44444444444\" ||\n\t\tvalue === \"55555555555\" ||\n\t\tvalue === \"66666666666\" ||\n\t\tvalue === \"77777777777\" ||\n\t\tvalue === \"88888888888\" ||\n\t\tvalue === \"99999999999\"\n\t) {\n\t\treturn false;\n\t}\n\n\t// Step 1 - using first Check Number:\n\tfor ( i = 1; i <= 9; i++ ) {\n\t\tsum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 11 - i );\n\t}\n\n\t// If first Check Number (CN) is valid, move to Step 2 - using second Check Number:\n\tif ( checkResult( sum, firstCN ) ) {\n\t\tsum = 0;\n\t\tfor ( i = 1; i <= 10; i++ ) {\n\t\t\tsum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 12 - i );\n\t\t}\n\t\treturn checkResult( sum, secondCN );\n\t}\n\treturn false;\n\n}, \"Please specify a valid CPF number\" );\n\n// http://jqueryvalidation.org/creditcard-method/\n// based on http://en.wikipedia.org/wiki/Luhn_algorithm\n$.validator.addMethod( \"creditcard\", function( value, element ) {\n\tif ( this.optional( element ) ) {\n\t\treturn \"dependency-mismatch\";\n\t}\n\n\t// Accept only spaces, digits and dashes\n\tif ( /[^0-9 \\-]+/.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tvar nCheck = 0,\n\t\tnDigit = 0,\n\t\tbEven = false,\n\t\tn, cDigit;\n\n\tvalue = value.replace( /\\D/g, \"\" );\n\n\t// Basing min and max length on\n\t// http://developer.ean.com/general_info/Valid_Credit_Card_Types\n\tif ( value.length < 13 || value.length > 19 ) {\n\t\treturn false;\n\t}\n\n\tfor ( n = value.length - 1; n >= 0; n-- ) {\n\t\tcDigit = value.charAt( n );\n\t\tnDigit = parseInt( cDigit, 10 );\n\t\tif ( bEven ) {\n\t\t\tif ( ( nDigit *= 2 ) > 9 ) {\n\t\t\t\tnDigit -= 9;\n\t\t\t}\n\t\t}\n\n\t\tnCheck += nDigit;\n\t\tbEven = !bEven;\n\t}\n\n\treturn ( nCheck % 10 ) === 0;\n}, \"Please enter a valid credit card number.\" );\n\n/* NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator\n * Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0\n * Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)\n */\n$.validator.addMethod( \"creditcardtypes\", function( value, element, param ) {\n\tif ( /[^0-9\\-]+/.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tvalue = value.replace( /\\D/g, \"\" );\n\n\tvar validTypes = 0x0000;\n\n\tif ( param.mastercard ) {\n\t\tvalidTypes |= 0x0001;\n\t}\n\tif ( param.visa ) {\n\t\tvalidTypes |= 0x0002;\n\t}\n\tif ( param.amex ) {\n\t\tvalidTypes |= 0x0004;\n\t}\n\tif ( param.dinersclub ) {\n\t\tvalidTypes |= 0x0008;\n\t}\n\tif ( param.enroute ) {\n\t\tvalidTypes |= 0x0010;\n\t}\n\tif ( param.discover ) {\n\t\tvalidTypes |= 0x0020;\n\t}\n\tif ( param.jcb ) {\n\t\tvalidTypes |= 0x0040;\n\t}\n\tif ( param.unknown ) {\n\t\tvalidTypes |= 0x0080;\n\t}\n\tif ( param.all ) {\n\t\tvalidTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;\n\t}\n\tif ( validTypes & 0x0001 && /^(5[12345])/.test( value ) ) { // Mastercard\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0002 && /^(4)/.test( value ) ) { // Visa\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0004 && /^(3[47])/.test( value ) ) { // Amex\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test( value ) ) { // Dinersclub\n\t\treturn value.length === 14;\n\t}\n\tif ( validTypes & 0x0010 && /^(2(014|149))/.test( value ) ) { // Enroute\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0020 && /^(6011)/.test( value ) ) { // Discover\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0040 && /^(3)/.test( value ) ) { // Jcb\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0040 && /^(2131|1800)/.test( value ) ) { // Jcb\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0080 ) { // Unknown\n\t\treturn true;\n\t}\n\treturn false;\n}, \"Please enter a valid credit card number.\" );\n\n/**\n * Validates currencies with any given symbols by @jameslouiz\n * Symbols can be optional or required. Symbols required by default\n *\n * Usage examples:\n *  currency: [\"£\", false] - Use false for soft currency validation\n *  currency: [\"$\", false]\n *  currency: [\"RM\", false] - also works with text based symbols such as \"RM\" - Malaysia Ringgit etc\n *\n *  <input class=\"currencyInput\" name=\"currencyInput\">\n *\n * Soft symbol checking\n *  currencyInput: {\n *     currency: [\"$\", false]\n *  }\n *\n * Strict symbol checking (default)\n *  currencyInput: {\n *     currency: \"$\"\n *     //OR\n *     currency: [\"$\", true]\n *  }\n *\n * Multiple Symbols\n *  currencyInput: {\n *     currency: \"$,£,¢\"\n *  }\n */\n$.validator.addMethod( \"currency\", function( value, element, param ) {\n    var isParamString = typeof param === \"string\",\n        symbol = isParamString ? param : param[ 0 ],\n        soft = isParamString ? true : param[ 1 ],\n        regex;\n\n    symbol = symbol.replace( /,/g, \"\" );\n    symbol = soft ? symbol + \"]\" : symbol + \"]?\";\n    regex = \"^[\" + symbol + \"([1-9]{1}[0-9]{0,2}(\\\\,[0-9]{3})*(\\\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\\\.[0-9]{0,2})?|0(\\\\.[0-9]{0,2})?|(\\\\.[0-9]{1,2})?)$\";\n    regex = new RegExp( regex );\n    return this.optional( element ) || regex.test( value );\n\n}, \"Please specify a valid currency\" );\n\n$.validator.addMethod( \"dateFA\", function( value, element ) {\n\treturn this.optional( element ) || /^[1-4]\\d{3}\\/((0?[1-6]\\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value );\n}, $.validator.messages.date );\n\n/**\n * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.\n *\n * @example $.validator.methods.date(\"01/01/1900\")\n * @result true\n *\n * @example $.validator.methods.date(\"01/13/1990\")\n * @result false\n *\n * @example $.validator.methods.date(\"01.01.1900\")\n * @result false\n *\n * @example <input name=\"pippo\" class=\"{dateITA:true}\" />\n * @desc Declares an optional input element whose value must be a valid date.\n *\n * @name $.validator.methods.dateITA\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"dateITA\", function( value, element ) {\n\tvar check = false,\n\t\tre = /^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$/,\n\t\tadata, gg, mm, aaaa, xdata;\n\tif ( re.test( value ) ) {\n\t\tadata = value.split( \"/\" );\n\t\tgg = parseInt( adata[ 0 ], 10 );\n\t\tmm = parseInt( adata[ 1 ], 10 );\n\t\taaaa = parseInt( adata[ 2 ], 10 );\n\t\txdata = new Date( Date.UTC( aaaa, mm - 1, gg, 12, 0, 0, 0 ) );\n\t\tif ( ( xdata.getUTCFullYear() === aaaa ) && ( xdata.getUTCMonth() === mm - 1 ) && ( xdata.getUTCDate() === gg ) ) {\n\t\t\tcheck = true;\n\t\t} else {\n\t\t\tcheck = false;\n\t\t}\n\t} else {\n\t\tcheck = false;\n\t}\n\treturn this.optional( element ) || check;\n}, $.validator.messages.date );\n\n$.validator.addMethod( \"dateNL\", function( value, element ) {\n\treturn this.optional( element ) || /^(0?[1-9]|[12]\\d|3[01])[\\.\\/\\-](0?[1-9]|1[012])[\\.\\/\\-]([12]\\d)?(\\d\\d)$/.test( value );\n}, $.validator.messages.date );\n\n// Older \"accept\" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept\n$.validator.addMethod( \"extension\", function( value, element, param ) {\n\tparam = typeof param === \"string\" ? param.replace( /,/g, \"|\" ) : \"png|jpe?g|gif\";\n\treturn this.optional( element ) || value.match( new RegExp( \"\\\\.(\" + param + \")$\", \"i\" ) );\n}, $.validator.format( \"Please enter a value with a valid extension.\" ) );\n\n/**\n * Dutch giro account numbers (not bank numbers) have max 7 digits\n */\n$.validator.addMethod( \"giroaccountNL\", function( value, element ) {\n\treturn this.optional( element ) || /^[0-9]{1,7}$/.test( value );\n}, \"Please specify a valid giro account number\" );\n\n/**\n * IBAN is the international bank account number.\n * It has a country - specific format, that is checked here too\n *\n * Validation is case-insensitive. Please make sure to normalize input yourself.\n */\n$.validator.addMethod( \"iban\", function( value, element ) {\n\n\t// Some quick simple tests to prevent needless work\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\t// Remove spaces and to upper case\n\tvar iban = value.replace( / /g, \"\" ).toUpperCase(),\n\t\tibancheckdigits = \"\",\n\t\tleadingZeroes = true,\n\t\tcRest = \"\",\n\t\tcOperator = \"\",\n\t\tcountrycode, ibancheck, charAt, cChar, bbanpattern, bbancountrypatterns, ibanregexp, i, p;\n\n\t// Check the country code and find the country specific format\n\tcountrycode = iban.substring( 0, 2 );\n\tbbancountrypatterns = {\n\t\t\"AL\": \"\\\\d{8}[\\\\dA-Z]{16}\",\n\t\t\"AD\": \"\\\\d{8}[\\\\dA-Z]{12}\",\n\t\t\"AT\": \"\\\\d{16}\",\n\t\t\"AZ\": \"[\\\\dA-Z]{4}\\\\d{20}\",\n\t\t\"BE\": \"\\\\d{12}\",\n\t\t\"BH\": \"[A-Z]{4}[\\\\dA-Z]{14}\",\n\t\t\"BA\": \"\\\\d{16}\",\n\t\t\"BR\": \"\\\\d{23}[A-Z][\\\\dA-Z]\",\n\t\t\"BG\": \"[A-Z]{4}\\\\d{6}[\\\\dA-Z]{8}\",\n\t\t\"CR\": \"\\\\d{17}\",\n\t\t\"HR\": \"\\\\d{17}\",\n\t\t\"CY\": \"\\\\d{8}[\\\\dA-Z]{16}\",\n\t\t\"CZ\": \"\\\\d{20}\",\n\t\t\"DK\": \"\\\\d{14}\",\n\t\t\"DO\": \"[A-Z]{4}\\\\d{20}\",\n\t\t\"EE\": \"\\\\d{16}\",\n\t\t\"FO\": \"\\\\d{14}\",\n\t\t\"FI\": \"\\\\d{14}\",\n\t\t\"FR\": \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\",\n\t\t\"GE\": \"[\\\\dA-Z]{2}\\\\d{16}\",\n\t\t\"DE\": \"\\\\d{18}\",\n\t\t\"GI\": \"[A-Z]{4}[\\\\dA-Z]{15}\",\n\t\t\"GR\": \"\\\\d{7}[\\\\dA-Z]{16}\",\n\t\t\"GL\": \"\\\\d{14}\",\n\t\t\"GT\": \"[\\\\dA-Z]{4}[\\\\dA-Z]{20}\",\n\t\t\"HU\": \"\\\\d{24}\",\n\t\t\"IS\": \"\\\\d{22}\",\n\t\t\"IE\": \"[\\\\dA-Z]{4}\\\\d{14}\",\n\t\t\"IL\": \"\\\\d{19}\",\n\t\t\"IT\": \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\",\n\t\t\"KZ\": \"\\\\d{3}[\\\\dA-Z]{13}\",\n\t\t\"KW\": \"[A-Z]{4}[\\\\dA-Z]{22}\",\n\t\t\"LV\": \"[A-Z]{4}[\\\\dA-Z]{13}\",\n\t\t\"LB\": \"\\\\d{4}[\\\\dA-Z]{20}\",\n\t\t\"LI\": \"\\\\d{5}[\\\\dA-Z]{12}\",\n\t\t\"LT\": \"\\\\d{16}\",\n\t\t\"LU\": \"\\\\d{3}[\\\\dA-Z]{13}\",\n\t\t\"MK\": \"\\\\d{3}[\\\\dA-Z]{10}\\\\d{2}\",\n\t\t\"MT\": \"[A-Z]{4}\\\\d{5}[\\\\dA-Z]{18}\",\n\t\t\"MR\": \"\\\\d{23}\",\n\t\t\"MU\": \"[A-Z]{4}\\\\d{19}[A-Z]{3}\",\n\t\t\"MC\": \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\",\n\t\t\"MD\": \"[\\\\dA-Z]{2}\\\\d{18}\",\n\t\t\"ME\": \"\\\\d{18}\",\n\t\t\"NL\": \"[A-Z]{4}\\\\d{10}\",\n\t\t\"NO\": \"\\\\d{11}\",\n\t\t\"PK\": \"[\\\\dA-Z]{4}\\\\d{16}\",\n\t\t\"PS\": \"[\\\\dA-Z]{4}\\\\d{21}\",\n\t\t\"PL\": \"\\\\d{24}\",\n\t\t\"PT\": \"\\\\d{21}\",\n\t\t\"RO\": \"[A-Z]{4}[\\\\dA-Z]{16}\",\n\t\t\"SM\": \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\",\n\t\t\"SA\": \"\\\\d{2}[\\\\dA-Z]{18}\",\n\t\t\"RS\": \"\\\\d{18}\",\n\t\t\"SK\": \"\\\\d{20}\",\n\t\t\"SI\": \"\\\\d{15}\",\n\t\t\"ES\": \"\\\\d{20}\",\n\t\t\"SE\": \"\\\\d{20}\",\n\t\t\"CH\": \"\\\\d{5}[\\\\dA-Z]{12}\",\n\t\t\"TN\": \"\\\\d{20}\",\n\t\t\"TR\": \"\\\\d{5}[\\\\dA-Z]{17}\",\n\t\t\"AE\": \"\\\\d{3}\\\\d{16}\",\n\t\t\"GB\": \"[A-Z]{4}\\\\d{14}\",\n\t\t\"VG\": \"[\\\\dA-Z]{4}\\\\d{16}\"\n\t};\n\n\tbbanpattern = bbancountrypatterns[ countrycode ];\n\n\t// As new countries will start using IBAN in the\n\t// future, we only check if the countrycode is known.\n\t// This prevents false negatives, while almost all\n\t// false positives introduced by this, will be caught\n\t// by the checksum validation below anyway.\n\t// Strict checking should return FALSE for unknown\n\t// countries.\n\tif ( typeof bbanpattern !== \"undefined\" ) {\n\t\tibanregexp = new RegExp( \"^[A-Z]{2}\\\\d{2}\" + bbanpattern + \"$\", \"\" );\n\t\tif ( !( ibanregexp.test( iban ) ) ) {\n\t\t\treturn false; // Invalid country specific format\n\t\t}\n\t}\n\n\t// Now check the checksum, first convert to digits\n\tibancheck = iban.substring( 4, iban.length ) + iban.substring( 0, 4 );\n\tfor ( i = 0; i < ibancheck.length; i++ ) {\n\t\tcharAt = ibancheck.charAt( i );\n\t\tif ( charAt !== \"0\" ) {\n\t\t\tleadingZeroes = false;\n\t\t}\n\t\tif ( !leadingZeroes ) {\n\t\t\tibancheckdigits += \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\".indexOf( charAt );\n\t\t}\n\t}\n\n\t// Calculate the result of: ibancheckdigits % 97\n\tfor ( p = 0; p < ibancheckdigits.length; p++ ) {\n\t\tcChar = ibancheckdigits.charAt( p );\n\t\tcOperator = \"\" + cRest + \"\" + cChar;\n\t\tcRest = cOperator % 97;\n\t}\n\treturn cRest === 1;\n}, \"Please specify a valid IBAN\" );\n\n$.validator.addMethod( \"integer\", function( value, element ) {\n\treturn this.optional( element ) || /^-?\\d+$/.test( value );\n}, \"A positive or negative non-decimal number please\" );\n\n$.validator.addMethod( \"ipv4\", function( value, element ) {\n\treturn this.optional( element ) || /^(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/i.test( value );\n}, \"Please enter a valid IP v4 address.\" );\n\n$.validator.addMethod( \"ipv6\", function( value, element ) {\n\treturn this.optional( element ) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test( value );\n}, \"Please enter a valid IP v6 address.\" );\n\n$.validator.addMethod( \"lettersonly\", function( value, element ) {\n\treturn this.optional( element ) || /^[a-z]+$/i.test( value );\n}, \"Letters only please\" );\n\n$.validator.addMethod( \"letterswithbasicpunc\", function( value, element ) {\n\treturn this.optional( element ) || /^[a-z\\-.,()'\"\\s]+$/i.test( value );\n}, \"Letters or punctuation only please\" );\n\n$.validator.addMethod( \"mobileNL\", function( value, element ) {\n\treturn this.optional( element ) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)6((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test( value );\n}, \"Please specify a valid mobile number\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n$.validator.addMethod( \"mobileUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?|0)7(?:[1345789]\\d{2}|624)\\s?\\d{3}\\s?\\d{3})$/ );\n}, \"Please specify a valid mobile number\" );\n\n/*\n * The número de identidad de extranjero ( NIE )is a code used to identify the non-nationals in Spain\n */\n$.validator.addMethod( \"nieES\", function( value ) {\n\t\"use strict\";\n\n\tvalue = value.toUpperCase();\n\n\t// Basic format test\n\tif ( !value.match( \"((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)\" ) ) {\n\t\treturn false;\n\t}\n\n\t// Test NIE\n\t//T\n\tif ( /^[T]{1}/.test( value ) ) {\n\t\treturn ( value[ 8 ] === /^[T]{1}[A-Z0-9]{8}$/.test( value ) );\n\t}\n\n\t//XYZ\n\tif ( /^[XYZ]{1}/.test( value ) ) {\n\t\treturn (\n\t\t\tvalue[ 8 ] === \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt(\n\t\t\t\tvalue.replace( \"X\", \"0\" )\n\t\t\t\t\t.replace( \"Y\", \"1\" )\n\t\t\t\t\t.replace( \"Z\", \"2\" )\n\t\t\t\t\t.substring( 0, 8 ) % 23\n\t\t\t)\n\t\t);\n\t}\n\n\treturn false;\n\n}, \"Please specify a valid NIE number.\" );\n\n/*\n * The Número de Identificación Fiscal ( NIF ) is the way tax identification used in Spain for individuals\n */\n$.validator.addMethod( \"nifES\", function( value ) {\n\t\"use strict\";\n\n\tvalue = value.toUpperCase();\n\n\t// Basic format test\n\tif ( !value.match( \"((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)\" ) ) {\n\t\treturn false;\n\t}\n\n\t// Test NIF\n\tif ( /^[0-9]{8}[A-Z]{1}$/.test( value ) ) {\n\t\treturn ( \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt( value.substring( 8, 0 ) % 23 ) === value.charAt( 8 ) );\n\t}\n\n\t// Test specials NIF (starts with K, L or M)\n\tif ( /^[KLM]{1}/.test( value ) ) {\n\t\treturn ( value[ 8 ] === String.fromCharCode( 64 ) );\n\t}\n\n\treturn false;\n\n}, \"Please specify a valid NIF number.\" );\n\njQuery.validator.addMethod( \"notEqualTo\", function( value, element, param ) {\n\treturn this.optional( element ) || !$.validator.methods.equalTo.call( this, value, element, param );\n}, \"Please enter a different value, values must not be the same.\" );\n\n$.validator.addMethod( \"nowhitespace\", function( value, element ) {\n\treturn this.optional( element ) || /^\\S+$/i.test( value );\n}, \"No white space please\" );\n\n/**\n* Return true if the field value matches the given format RegExp\n*\n* @example $.validator.methods.pattern(\"AR1004\",element,/^AR\\d{4}$/)\n* @result true\n*\n* @example $.validator.methods.pattern(\"BR1004\",element,/^AR\\d{4}$/)\n* @result false\n*\n* @name $.validator.methods.pattern\n* @type Boolean\n* @cat Plugins/Validate/Methods\n*/\n$.validator.addMethod( \"pattern\", function( value, element, param ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\tif ( typeof param === \"string\" ) {\n\t\tparam = new RegExp( \"^(?:\" + param + \")$\" );\n\t}\n\treturn param.test( value );\n}, \"Invalid format.\" );\n\n/**\n * Dutch phone numbers have 10 digits (or 11 and start with +31).\n */\n$.validator.addMethod( \"phoneNL\", function( value, element ) {\n\treturn this.optional( element ) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)[1-9]((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test( value );\n}, \"Please specify a valid phone number.\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n$.validator.addMethod( \"phoneUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?)|(?:\\(?0))(?:\\d{2}\\)?\\s?\\d{4}\\s?\\d{4}|\\d{3}\\)?\\s?\\d{3}\\s?\\d{3,4}|\\d{4}\\)?\\s?(?:\\d{5}|\\d{3}\\s?\\d{3})|\\d{5}\\)?\\s?\\d{4,5})$/ );\n}, \"Please specify a valid phone number\" );\n\n/**\n * Matches US phone number format\n *\n * where the area code may not start with 1 and the prefix may not start with 1\n * allows '-' or ' ' as a separator and allows parens around area code\n * some people may want to put a '1' in front of their number\n *\n * 1(212)-999-2345 or\n * 212 999 2344 or\n * 212-999-0983\n *\n * but not\n * 111-123-5434\n * and not\n * 212 123 4567\n */\n$.validator.addMethod( \"phoneUS\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\s+/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(\\+?1-?)?(\\([2-9]([02-9]\\d|1[02-9])\\)|[2-9]([02-9]\\d|1[02-9]))-?[2-9]([02-9]\\d|1[02-9])-?\\d{4}$/ );\n}, \"Please specify a valid phone number\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n\n// Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers\n$.validator.addMethod( \"phonesUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?|0)(?:1\\d{8,9}|[23]\\d{9}|7(?:[1345789]\\d{8}|624\\d{6})))$/ );\n}, \"Please specify a valid uk phone number\" );\n\n/**\n * Matches a valid Canadian Postal Code\n *\n * @example jQuery.validator.methods.postalCodeCA( \"H0H 0H0\", element )\n * @result true\n *\n * @example jQuery.validator.methods.postalCodeCA( \"H0H0H0\", element )\n * @result false\n *\n * @name jQuery.validator.methods.postalCodeCA\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"postalCodeCA\", function( value, element ) {\n\treturn this.optional( element ) || /^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJKLMNPRSTVWXYZ] *\\d[ABCEGHJKLMNPRSTVWXYZ]\\d$/i.test( value );\n}, \"Please specify a valid postal code\" );\n\n/*\n* Valida CEPs do brasileiros:\n*\n* Formatos aceitos:\n* 99999-999\n* 99.999-999\n* 99999999\n*/\n$.validator.addMethod( \"postalcodeBR\", function( cep_value, element ) {\n\treturn this.optional( element ) || /^\\d{2}.\\d{3}-\\d{3}?$|^\\d{5}-?\\d{3}?$/.test( cep_value );\n}, \"Informe um CEP válido.\" );\n\n/* Matches Italian postcode (CAP) */\n$.validator.addMethod( \"postalcodeIT\", function( value, element ) {\n\treturn this.optional( element ) || /^\\d{5}$/.test( value );\n}, \"Please specify a valid postal code\" );\n\n$.validator.addMethod( \"postalcodeNL\", function( value, element ) {\n\treturn this.optional( element ) || /^[1-9][0-9]{3}\\s?[a-zA-Z]{2}$/.test( value );\n}, \"Please specify a valid postal code\" );\n\n// Matches UK postcode. Does not match to UK Channel Islands that have their own postcodes (non standard UK)\n$.validator.addMethod( \"postcodeUK\", function( value, element ) {\n\treturn this.optional( element ) || /^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\\s?(0AA))$/i.test( value );\n}, \"Please specify a valid UK postcode\" );\n\n/*\n * Lets you say \"at least X inputs that match selector Y must be filled.\"\n *\n * The end result is that neither of these inputs:\n *\n *\t<input class=\"productinfo\" name=\"partnumber\">\n *\t<input class=\"productinfo\" name=\"description\">\n *\n *\t...will validate unless at least one of them is filled.\n *\n * partnumber:\t{require_from_group: [1,\".productinfo\"]},\n * description: {require_from_group: [1,\".productinfo\"]}\n *\n * options[0]: number of fields that must be filled in the group\n * options[1]: CSS selector that defines the group of conditionally required fields\n */\n$.validator.addMethod( \"require_from_group\", function( value, element, options ) {\n\tvar $fields = $( options[ 1 ], element.form ),\n\t\t$fieldsFirst = $fields.eq( 0 ),\n\t\tvalidator = $fieldsFirst.data( \"valid_req_grp\" ) ? $fieldsFirst.data( \"valid_req_grp\" ) : $.extend( {}, this ),\n\t\tisValid = $fields.filter( function() {\n\t\t\treturn validator.elementValue( this );\n\t\t} ).length >= options[ 0 ];\n\n\t// Store the cloned validator for future validation\n\t$fieldsFirst.data( \"valid_req_grp\", validator );\n\n\t// If element isn't being validated, run each require_from_group field's validation rules\n\tif ( !$( element ).data( \"being_validated\" ) ) {\n\t\t$fields.data( \"being_validated\", true );\n\t\t$fields.each( function() {\n\t\t\tvalidator.element( this );\n\t\t} );\n\t\t$fields.data( \"being_validated\", false );\n\t}\n\treturn isValid;\n}, $.validator.format( \"Please fill at least {0} of these fields.\" ) );\n\n/*\n * Lets you say \"either at least X inputs that match selector Y must be filled,\n * OR they must all be skipped (left blank).\"\n *\n * The end result, is that none of these inputs:\n *\n *\t<input class=\"productinfo\" name=\"partnumber\">\n *\t<input class=\"productinfo\" name=\"description\">\n *\t<input class=\"productinfo\" name=\"color\">\n *\n *\t...will validate unless either at least two of them are filled,\n *\tOR none of them are.\n *\n * partnumber:\t{skip_or_fill_minimum: [2,\".productinfo\"]},\n * description: {skip_or_fill_minimum: [2,\".productinfo\"]},\n * color:\t\t{skip_or_fill_minimum: [2,\".productinfo\"]}\n *\n * options[0]: number of fields that must be filled in the group\n * options[1]: CSS selector that defines the group of conditionally required fields\n *\n */\n$.validator.addMethod( \"skip_or_fill_minimum\", function( value, element, options ) {\n\tvar $fields = $( options[ 1 ], element.form ),\n\t\t$fieldsFirst = $fields.eq( 0 ),\n\t\tvalidator = $fieldsFirst.data( \"valid_skip\" ) ? $fieldsFirst.data( \"valid_skip\" ) : $.extend( {}, this ),\n\t\tnumberFilled = $fields.filter( function() {\n\t\t\treturn validator.elementValue( this );\n\t\t} ).length,\n\t\tisValid = numberFilled === 0 || numberFilled >= options[ 0 ];\n\n\t// Store the cloned validator for future validation\n\t$fieldsFirst.data( \"valid_skip\", validator );\n\n\t// If element isn't being validated, run each skip_or_fill_minimum field's validation rules\n\tif ( !$( element ).data( \"being_validated\" ) ) {\n\t\t$fields.data( \"being_validated\", true );\n\t\t$fields.each( function() {\n\t\t\tvalidator.element( this );\n\t\t} );\n\t\t$fields.data( \"being_validated\", false );\n\t}\n\treturn isValid;\n}, $.validator.format( \"Please either skip these fields or fill at least {0} of them.\" ) );\n\n/* Validates US States and/or Territories by @jdforsythe\n * Can be case insensitive or require capitalization - default is case insensitive\n * Can include US Territories or not - default does not\n * Can include US Military postal abbreviations (AA, AE, AP) - default does not\n *\n * Note: \"States\" always includes DC (District of Colombia)\n *\n * Usage examples:\n *\n *  This is the default - case insensitive, no territories, no military zones\n *  stateInput: {\n *     caseSensitive: false,\n *     includeTerritories: false,\n *     includeMilitary: false\n *  }\n *\n *  Only allow capital letters, no territories, no military zones\n *  stateInput: {\n *     caseSensitive: false\n *  }\n *\n *  Case insensitive, include territories but not military zones\n *  stateInput: {\n *     includeTerritories: true\n *  }\n *\n *  Only allow capital letters, include territories and military zones\n *  stateInput: {\n *     caseSensitive: true,\n *     includeTerritories: true,\n *     includeMilitary: true\n *  }\n *\n */\n$.validator.addMethod( \"stateUS\", function( value, element, options ) {\n\tvar isDefault = typeof options === \"undefined\",\n\t\tcaseSensitive = ( isDefault || typeof options.caseSensitive === \"undefined\" ) ? false : options.caseSensitive,\n\t\tincludeTerritories = ( isDefault || typeof options.includeTerritories === \"undefined\" ) ? false : options.includeTerritories,\n\t\tincludeMilitary = ( isDefault || typeof options.includeMilitary === \"undefined\" ) ? false : options.includeMilitary,\n\t\tregex;\n\n\tif ( !includeTerritories && !includeMilitary ) {\n\t\tregex = \"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\";\n\t} else if ( includeTerritories && includeMilitary ) {\n\t\tregex = \"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\";\n\t} else if ( includeTerritories ) {\n\t\tregex = \"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\";\n\t} else {\n\t\tregex = \"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\";\n\t}\n\n\tregex = caseSensitive ? new RegExp( regex ) : new RegExp( regex, \"i\" );\n\treturn this.optional( element ) || regex.test( value );\n}, \"Please specify a valid state\" );\n\n// TODO check if value starts with <, otherwise don't try stripping anything\n$.validator.addMethod( \"strippedminlength\", function( value, element, param ) {\n\treturn $( value ).text().length >= param;\n}, $.validator.format( \"Please enter at least {0} characters\" ) );\n\n$.validator.addMethod( \"time\", function( value, element ) {\n\treturn this.optional( element ) || /^([01]\\d|2[0-3]|[0-9])(:[0-5]\\d){1,2}$/.test( value );\n}, \"Please enter a valid time, between 00:00 and 23:59\" );\n\n$.validator.addMethod( \"time12h\", function( value, element ) {\n\treturn this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\\d){1,2}(\\ ?[AP]M))$/i.test( value );\n}, \"Please enter a valid time in 12-hour am/pm format\" );\n\n// Same as url, but TLD is optional\n$.validator.addMethod( \"url2\", function( value, element ) {\n\treturn this.optional( element ) || /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)*(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test( value );\n}, $.validator.messages.url );\n\n/**\n * Return true, if the value is a valid vehicle identification number (VIN).\n *\n * Works with all kind of text inputs.\n *\n * @example <input type=\"text\" size=\"20\" name=\"VehicleID\" class=\"{required:true,vinUS:true}\" />\n * @desc Declares a required input element whose value must be a valid vehicle identification number.\n *\n * @name $.validator.methods.vinUS\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"vinUS\", function( v ) {\n\tif ( v.length !== 17 ) {\n\t\treturn false;\n\t}\n\n\tvar LL = [ \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"J\", \"K\", \"L\", \"M\", \"N\", \"P\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\" ],\n\t\tVL = [ 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9 ],\n\t\tFL = [ 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2 ],\n\t\trs = 0,\n\t\ti, n, d, f, cd, cdv;\n\n\tfor ( i = 0; i < 17; i++ ) {\n\t\tf = FL[ i ];\n\t\td = v.slice( i, i + 1 );\n\t\tif ( i === 8 ) {\n\t\t\tcdv = d;\n\t\t}\n\t\tif ( !isNaN( d ) ) {\n\t\t\td *= f;\n\t\t} else {\n\t\t\tfor ( n = 0; n < LL.length; n++ ) {\n\t\t\t\tif ( d.toUpperCase() === LL[ n ] ) {\n\t\t\t\t\td = VL[ n ];\n\t\t\t\t\td *= f;\n\t\t\t\t\tif ( isNaN( cdv ) && n === 8 ) {\n\t\t\t\t\t\tcdv = LL[ n ];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\trs += d;\n\t}\n\tcd = rs % 11;\n\tif ( cd === 10 ) {\n\t\tcd = \"X\";\n\t}\n\tif ( cd === cdv ) {\n\t\treturn true;\n\t}\n\treturn false;\n}, \"The specified vehicle identification number (VIN) is invalid.\" );\n\n$.validator.addMethod( \"zipcodeUS\", function( value, element ) {\n\treturn this.optional( element ) || /^\\d{5}(-\\d{4})?$/.test( value );\n}, \"The specified US ZIP Code is invalid\" );\n\n$.validator.addMethod( \"ziprange\", function( value, element ) {\n\treturn this.optional( element ) || /^90[2-5]\\d\\{2\\}-\\d{4}$/.test( value );\n}, \"Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx\" );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/jquery.validate.js",
    "content": "/*!\n * jQuery Validation Plugin v1.15.0\n *\n * http://jqueryvalidation.org/\n *\n * Copyright (c) 2016 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend( $.fn, {\n\n\t// http://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\tvalidator.submitButton = event.target;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\n\t\t\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\thidden = $( \"<input type='hidden'/>\" )\n\t\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// http://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// http://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar element = this[ 0 ],\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t\tif ( method === \"required\" ) {\n\t\t\t\t\t\t$( element ).removeAttr( \"aria-required\" );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t\t$( element ).attr( \"aria-required\", \"true\" );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// Custom selectors\n$.extend( $.expr[ \":\" ], {\n\n\t// http://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !$.trim( \"\" + $( a ).val() );\n\t},\n\n\t// http://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!$.trim( \"\" + val );\n\t},\n\n\t// http://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// http://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array  ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift       => 16\n\t\t\t// Ctrl        => 17\n\t\t\t// Alt         => 18\n\t\t\t// Caps lock   => 20\n\t\t\t// End         => 35\n\t\t\t// Home        => 36\n\t\t\t// Left arrow  => 37\n\t\t\t// Up arrow    => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow  => 40\n\t\t\t// Insert      => 45\n\t\t\t// Num lock    => 144\n\t\t\t// AltGr key   => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// http://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date ( ISO ).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar groups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable]\", delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\n\t\t\t// Add aria-required to any Static/Data/Class required fields before first validation\n\t\t\t// Screen readers require this attribute to be present before the initial submission http://www.w3.org/TR/WCAG-TECHS/ARIA2.html\n\t\t\t$( this.currentForm ).find( \"[required], [data-rule-required], .required\" ).attr( \"aria-required\", \"true\" );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = result && v.check( cleanElement );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( obj[ i ] ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.focus()\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea, [contenteditable]\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( this.hasAttribute( \"contenteditable\" ) ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( element.hasAttribute( \"contenteditable\" ) ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule;\n\n\t\t\t// If a normalizer is defined for this element, then\n\t\t\t// call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tval = rules.normalizer.call( element, val );\n\n\t\t\t\tif ( typeof val !== \"string\" ) {\n\t\t\t\t\tthrow new TypeError( \"The normalizer should return a string value.\" );\n\t\t\t\t}\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating\n\t\t\t\t// it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \".  Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement( place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$( this.currentForm ).submit();\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element, method ) {\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\n\t\t\t} );\n\t\t},\n\n\t\t// Cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" )\n\t\t\t\t.find( \".validate-equalTo-blur\" )\n\t\t\t\t\t.off( \".validate-equalTo\" )\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// Exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// Support for <input required> in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// Force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\n\t\t// Handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = $.isFunction( parameter ) && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// http://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// http://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// http://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value.length > 0;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/date-method/\n\t\tdate: function( value, element ) {\n\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() );\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\t\t\treturn this.optional( element ) || ( value % param === 0 );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// http://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.resetInternals();\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_ar.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: AR (Arabic; العربية)\n */\n$.extend( $.validator.messages, {\n\trequired: \"هذا الحقل إلزامي\",\n\tremote: \"يرجى تصحيح هذا الحقل للمتابعة\",\n\temail: \"رجاء إدخال عنوان بريد إلكتروني صحيح\",\n\turl: \"رجاء إدخال عنوان موقع إلكتروني صحيح\",\n\tdate: \"رجاء إدخال تاريخ صحيح\",\n\tdateISO: \"رجاء إدخال تاريخ صحيح (ISO)\",\n\tnumber: \"رجاء إدخال عدد بطريقة صحيحة\",\n\tdigits: \"رجاء إدخال أرقام فقط\",\n\tcreditcard: \"رجاء إدخال رقم بطاقة ائتمان صحيح\",\n\tequalTo: \"رجاء إدخال نفس القيمة\",\n\textension: \"رجاء إدخال ملف بامتداد موافق عليه\",\n\tmaxlength: $.validator.format( \"الحد الأقصى لعدد الحروف هو {0}\" ),\n\tminlength: $.validator.format( \"الحد الأدنى لعدد الحروف هو {0}\" ),\n\trangelength: $.validator.format( \"عدد الحروف يجب أن يكون بين {0} و {1}\" ),\n\trange: $.validator.format( \"رجاء إدخال عدد قيمته بين {0} و {1}\" ),\n\tmax: $.validator.format( \"رجاء إدخال عدد أقل من أو يساوي (0}\" ),\n\tmin: $.validator.format( \"رجاء إدخال عدد أكبر من أو يساوي (0}\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_bg.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: BG (Bulgarian; български език)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Полето е задължително.\",\n\tremote: \"Моля, въведете правилната стойност.\",\n\temail: \"Моля, въведете валиден email.\",\n\turl: \"Моля, въведете валидно URL.\",\n\tdate: \"Моля, въведете валидна дата.\",\n\tdateISO: \"Моля, въведете валидна дата (ISO).\",\n\tnumber: \"Моля, въведете валиден номер.\",\n\tdigits: \"Моля, въведете само цифри.\",\n\tcreditcard: \"Моля, въведете валиден номер на кредитна карта.\",\n\tequalTo: \"Моля, въведете същата стойност отново.\",\n\textension: \"Моля, въведете стойност с валидно разширение.\",\n\tmaxlength: $.validator.format( \"Моля, въведете повече от {0} символа.\" ),\n\tminlength: $.validator.format( \"Моля, въведете поне {0} символа.\" ),\n\trangelength: $.validator.format( \"Моля, въведете стойност с дължина между {0} и {1} символа.\" ),\n\trange: $.validator.format( \"Моля, въведете стойност между {0} и {1}.\" ),\n\tmax: $.validator.format( \"Моля, въведете стойност по-малка или равна на {0}.\" ),\n\tmin: $.validator.format( \"Моля, въведете стойност по-голяма или равна на {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_bn_BD.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: bn_BD (Bengali, Bangladesh)\n */\n$.extend( $.validator.messages, {\n\trequired: \"এই তথ্যটি আবশ্যক।\",\n\tremote: \"এই তথ্যটি ঠিক করুন।\",\n\temail: \"অনুগ্রহ করে একটি সঠিক মেইল ঠিকানা লিখুন।\",\n\turl: \"অনুগ্রহ করে একটি সঠিক লিঙ্ক দিন।\",\n\tdate: \"তারিখ সঠিক নয়।\",\n\tdateISO: \"অনুগ্রহ করে একটি সঠিক (ISO) তারিখ লিখুন।\",\n\tnumber: \"অনুগ্রহ করে একটি সঠিক নম্বর লিখুন।\",\n\tdigits: \"এখানে শুধু সংখ্যা ব্যবহার করা যাবে।\",\n\tcreditcard: \"অনুগ্রহ করে একটি ক্রেডিট কার্ডের সঠিক নম্বর লিখুন।\",\n\tequalTo: \"একই মান আবার লিখুন।\",\n\textension: \"সঠিক ধরনের ফাইল আপলোড করুন।\",\n\tmaxlength: $.validator.format( \"{0}টির বেশি অক্ষর লেখা যাবে না।\" ),\n\tminlength: $.validator.format( \"{0}টির কম অক্ষর লেখা যাবে না।\" ),\n\trangelength: $.validator.format( \"{0} থেকে {1} টি অক্ষর সম্বলিত মান লিখুন।\" ),\n\trange: $.validator.format( \"{0} থেকে {1} এর মধ্যে একটি মান ব্যবহার করুন।\" ),\n\tmax: $.validator.format( \"অনুগ্রহ করে {0} বা তার চাইতে কম মান ব্যবহার করুন।\" ),\n\tmin: $.validator.format( \"অনুগ্রহ করে {0} বা তার চাইতে বেশি মান ব্যবহার করুন।\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_ca.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: CA (Catalan; català)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Aquest camp és obligatori.\",\n\tremote: \"Si us plau, omple aquest camp.\",\n\temail: \"Si us plau, escriu una adreça de correu-e vàlida\",\n\turl: \"Si us plau, escriu una URL vàlida.\",\n\tdate: \"Si us plau, escriu una data vàlida.\",\n\tdateISO: \"Si us plau, escriu una data (ISO) vàlida.\",\n\tnumber: \"Si us plau, escriu un número enter vàlid.\",\n\tdigits: \"Si us plau, escriu només dígits.\",\n\tcreditcard: \"Si us plau, escriu un número de tarjeta vàlid.\",\n\tequalTo: \"Si us plau, escriu el mateix valor de nou.\",\n\textension: \"Si us plau, escriu un valor amb una extensió acceptada.\",\n\tmaxlength: $.validator.format( \"Si us plau, no escriguis més de {0} caracters.\" ),\n\tminlength: $.validator.format( \"Si us plau, no escriguis menys de {0} caracters.\" ),\n\trangelength: $.validator.format( \"Si us plau, escriu un valor entre {0} i {1} caracters.\" ),\n\trange: $.validator.format( \"Si us plau, escriu un valor entre {0} i {1}.\" ),\n\tmax: $.validator.format( \"Si us plau, escriu un valor menor o igual a {0}.\" ),\n\tmin: $.validator.format( \"Si us plau, escriu un valor major o igual a {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_cs.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: CS (Czech; čeština, český jazyk)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Tento údaj je povinný.\",\n\tremote: \"Prosím, opravte tento údaj.\",\n\temail: \"Prosím, zadejte platný e-mail.\",\n\turl: \"Prosím, zadejte platné URL.\",\n\tdate: \"Prosím, zadejte platné datum.\",\n\tdateISO: \"Prosím, zadejte platné datum (ISO).\",\n\tnumber: \"Prosím, zadejte číslo.\",\n\tdigits: \"Prosím, zadávejte pouze číslice.\",\n\tcreditcard: \"Prosím, zadejte číslo kreditní karty.\",\n\tequalTo: \"Prosím, zadejte znovu stejnou hodnotu.\",\n\textension: \"Prosím, zadejte soubor se správnou příponou.\",\n\tmaxlength: $.validator.format( \"Prosím, zadejte nejvíce {0} znaků.\" ),\n\tminlength: $.validator.format( \"Prosím, zadejte nejméně {0} znaků.\" ),\n\trangelength: $.validator.format( \"Prosím, zadejte od {0} do {1} znaků.\" ),\n\trange: $.validator.format( \"Prosím, zadejte hodnotu od {0} do {1}.\" ),\n\tmax: $.validator.format( \"Prosím, zadejte hodnotu menší nebo rovnu {0}.\" ),\n\tmin: $.validator.format( \"Prosím, zadejte hodnotu větší nebo rovnu {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_da.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: DA (Danish; dansk)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Dette felt er påkrævet.\",\n\tmaxlength: $.validator.format( \"Indtast højst {0} tegn.\" ),\n\tminlength: $.validator.format( \"Indtast mindst {0} tegn.\" ),\n\trangelength: $.validator.format( \"Indtast mindst {0} og højst {1} tegn.\" ),\n\temail: \"Indtast en gyldig email-adresse.\",\n\turl: \"Indtast en gyldig URL.\",\n\tdate: \"Indtast en gyldig dato.\",\n\tnumber: \"Indtast et tal.\",\n\tdigits: \"Indtast kun cifre.\",\n\tequalTo: \"Indtast den samme værdi igen.\",\n\trange: $.validator.format( \"Angiv en værdi mellem {0} og {1}.\" ),\n\tmax: $.validator.format( \"Angiv en værdi der højst er {0}.\" ),\n\tmin: $.validator.format( \"Angiv en værdi der mindst er {0}.\" ),\n\tcreditcard: \"Indtast et gyldigt kreditkortnummer.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_de.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: DE (German, Deutsch)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Dieses Feld ist ein Pflichtfeld.\",\n\tmaxlength: $.validator.format( \"Geben Sie bitte maximal {0} Zeichen ein.\" ),\n\tminlength: $.validator.format( \"Geben Sie bitte mindestens {0} Zeichen ein.\" ),\n\trangelength: $.validator.format( \"Geben Sie bitte mindestens {0} und maximal {1} Zeichen ein.\" ),\n\temail: \"Geben Sie bitte eine gültige E-Mail Adresse ein.\",\n\turl: \"Geben Sie bitte eine gültige URL ein.\",\n\tdate: \"Bitte geben Sie ein gültiges Datum ein.\",\n\tnumber: \"Geben Sie bitte eine Nummer ein.\",\n\tdigits: \"Geben Sie bitte nur Ziffern ein.\",\n\tequalTo: \"Bitte denselben Wert wiederholen.\",\n\trange: $.validator.format( \"Geben Sie bitte einen Wert zwischen {0} und {1} ein.\" ),\n\tmax: $.validator.format( \"Geben Sie bitte einen Wert kleiner oder gleich {0} ein.\" ),\n\tmin: $.validator.format( \"Geben Sie bitte einen Wert größer oder gleich {0} ein.\" ),\n\tcreditcard: \"Geben Sie bitte eine gültige Kreditkarten-Nummer ein.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_el.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: EL (Greek; ελληνικά)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Αυτό το πεδίο είναι υποχρεωτικό.\",\n\tremote: \"Παρακαλώ διορθώστε αυτό το πεδίο.\",\n\temail: \"Παρακαλώ εισάγετε μια έγκυρη διεύθυνση email.\",\n\turl: \"Παρακαλώ εισάγετε ένα έγκυρο URL.\",\n\tdate: \"Παρακαλώ εισάγετε μια έγκυρη ημερομηνία.\",\n\tdateISO: \"Παρακαλώ εισάγετε μια έγκυρη ημερομηνία (ISO).\",\n\tnumber: \"Παρακαλώ εισάγετε έναν έγκυρο αριθμό.\",\n\tdigits: \"Παρακαλώ εισάγετε μόνο αριθμητικά ψηφία.\",\n\tcreditcard: \"Παρακαλώ εισάγετε έναν έγκυρο αριθμό πιστωτικής κάρτας.\",\n\tequalTo: \"Παρακαλώ εισάγετε την ίδια τιμή ξανά.\",\n\textension: \"Παρακαλώ εισάγετε μια τιμή με έγκυρη επέκταση αρχείου.\",\n\tmaxlength: $.validator.format( \"Παρακαλώ εισάγετε μέχρι και {0} χαρακτήρες.\" ),\n\tminlength: $.validator.format( \"Παρακαλώ εισάγετε τουλάχιστον {0} χαρακτήρες.\" ),\n\trangelength: $.validator.format( \"Παρακαλώ εισάγετε μια τιμή με μήκος μεταξύ {0} και {1} χαρακτήρων.\" ),\n\trange: $.validator.format( \"Παρακαλώ εισάγετε μια τιμή μεταξύ {0} και {1}.\" ),\n\tmax: $.validator.format( \"Παρακαλώ εισάγετε μια τιμή μικρότερη ή ίση του {0}.\" ),\n\tmin: $.validator.format( \"Παρακαλώ εισάγετε μια τιμή μεγαλύτερη ή ίση του {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_es.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: ES (Spanish; Español)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Este campo es obligatorio.\",\n\tremote: \"Por favor, rellena este campo.\",\n\temail: \"Por favor, escribe una dirección de correo válida.\",\n\turl: \"Por favor, escribe una URL válida.\",\n\tdate: \"Por favor, escribe una fecha válida.\",\n\tdateISO: \"Por favor, escribe una fecha (ISO) válida.\",\n\tnumber: \"Por favor, escribe un número válido.\",\n\tdigits: \"Por favor, escribe sólo dígitos.\",\n\tcreditcard: \"Por favor, escribe un número de tarjeta válido.\",\n\tequalTo: \"Por favor, escribe el mismo valor de nuevo.\",\n\textension: \"Por favor, escribe un valor con una extensión aceptada.\",\n\tmaxlength: $.validator.format( \"Por favor, no escribas más de {0} caracteres.\" ),\n\tminlength: $.validator.format( \"Por favor, no escribas menos de {0} caracteres.\" ),\n\trangelength: $.validator.format( \"Por favor, escribe un valor entre {0} y {1} caracteres.\" ),\n\trange: $.validator.format( \"Por favor, escribe un valor entre {0} y {1}.\" ),\n\tmax: $.validator.format( \"Por favor, escribe un valor menor o igual a {0}.\" ),\n\tmin: $.validator.format( \"Por favor, escribe un valor mayor o igual a {0}.\" ),\n\tnifES: \"Por favor, escribe un NIF válido.\",\n\tnieES: \"Por favor, escribe un NIE válido.\",\n\tcifES: \"Por favor, escribe un CIF válido.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_es_AR.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: ES (Spanish; Español)\n * Region: AR (Argentina)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Este campo es obligatorio.\",\n\tremote: \"Por favor, completá este campo.\",\n\temail: \"Por favor, escribí una dirección de correo válida.\",\n\turl: \"Por favor, escribí una URL válida.\",\n\tdate: \"Por favor, escribí una fecha válida.\",\n\tdateISO: \"Por favor, escribí una fecha (ISO) válida.\",\n\tnumber: \"Por favor, escribí un número entero válido.\",\n\tdigits: \"Por favor, escribí sólo dígitos.\",\n\tcreditcard: \"Por favor, escribí un número de tarjeta válido.\",\n\tequalTo: \"Por favor, escribí el mismo valor de nuevo.\",\n\textension: \"Por favor, escribí un valor con una extensión aceptada.\",\n\tmaxlength: $.validator.format( \"Por favor, no escribas más de {0} caracteres.\" ),\n\tminlength: $.validator.format( \"Por favor, no escribas menos de {0} caracteres.\" ),\n\trangelength: $.validator.format( \"Por favor, escribí un valor entre {0} y {1} caracteres.\" ),\n\trange: $.validator.format( \"Por favor, escribí un valor entre {0} y {1}.\" ),\n\tmax: $.validator.format( \"Por favor, escribí un valor menor o igual a {0}.\" ),\n\tmin: $.validator.format( \"Por favor, escribí un valor mayor o igual a {0}.\" ),\n\tnifES: \"Por favor, escribí un NIF válido.\",\n\tnieES: \"Por favor, escribí un NIE válido.\",\n\tcifES: \"Por favor, escribí un CIF válido.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_es_PE.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: ES (Spanish; Español)\n * Region: PE (Perú)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Este campo es obligatorio.\",\n\tremote: \"Por favor, llene este campo.\",\n\temail: \"Por favor, escriba un correo electrónico válido.\",\n\turl: \"Por favor, escriba una URL válida.\",\n\tdate: \"Por favor, escriba una fecha válida.\",\n\tdateISO: \"Por favor, escriba una fecha (ISO) válida.\",\n\tnumber: \"Por favor, escriba un número válido.\",\n\tdigits: \"Por favor, escriba sólo dígitos.\",\n\tcreditcard: \"Por favor, escriba un número de tarjeta válido.\",\n\tequalTo: \"Por favor, escriba el mismo valor de nuevo.\",\n\textension: \"Por favor, escriba un valor con una extensión permitida.\",\n\tmaxlength: $.validator.format( \"Por favor, no escriba más de {0} caracteres.\" ),\n\tminlength: $.validator.format( \"Por favor, no escriba menos de {0} caracteres.\" ),\n\trangelength: $.validator.format( \"Por favor, escriba un valor entre {0} y {1} caracteres.\" ),\n\trange: $.validator.format( \"Por favor, escriba un valor entre {0} y {1}.\" ),\n\tmax: $.validator.format( \"Por favor, escriba un valor menor o igual a {0}.\" ),\n\tmin: $.validator.format( \"Por favor, escriba un valor mayor o igual a {0}.\" ),\n\tnifES: \"Por favor, escriba un NIF válido.\",\n\tnieES: \"Por favor, escriba un NIE válido.\",\n\tcifES: \"Por favor, escriba un CIF válido.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_et.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: ET (Estonian; eesti, eesti keel)\n */\n$.extend( $.validator.messages, {\n\trequired: \"See väli peab olema täidetud.\",\n\tmaxlength: $.validator.format( \"Palun sisestage vähem kui {0} tähemärki.\" ),\n\tminlength: $.validator.format( \"Palun sisestage vähemalt {0} tähemärki.\" ),\n\trangelength: $.validator.format( \"Palun sisestage väärtus vahemikus {0} kuni {1} tähemärki.\" ),\n\temail: \"Palun sisestage korrektne e-maili aadress.\",\n\turl: \"Palun sisestage korrektne URL.\",\n\tdate: \"Palun sisestage korrektne kuupäev.\",\n\tdateISO: \"Palun sisestage korrektne kuupäev (YYYY-MM-DD).\",\n\tnumber: \"Palun sisestage korrektne number.\",\n\tdigits: \"Palun sisestage ainult numbreid.\",\n\tequalTo: \"Palun sisestage sama väärtus uuesti.\",\n\trange: $.validator.format( \"Palun sisestage väärtus vahemikus {0} kuni {1}.\" ),\n\tmax: $.validator.format( \"Palun sisestage väärtus, mis on väiksem või võrdne arvuga {0}.\" ),\n\tmin: $.validator.format( \"Palun sisestage väärtus, mis on suurem või võrdne arvuga {0}.\" ),\n\tcreditcard: \"Palun sisestage korrektne krediitkaardi number.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_eu.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: EU (Basque; euskara, euskera)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Eremu hau beharrezkoa da.\",\n\tremote: \"Mesedez, bete eremu hau.\",\n\temail: \"Mesedez, idatzi baliozko posta helbide bat.\",\n\turl: \"Mesedez, idatzi baliozko URL bat.\",\n\tdate: \"Mesedez, idatzi baliozko data bat.\",\n\tdateISO: \"Mesedez, idatzi baliozko (ISO) data bat.\",\n\tnumber: \"Mesedez, idatzi baliozko zenbaki oso bat.\",\n\tdigits: \"Mesedez, idatzi digituak soilik.\",\n\tcreditcard: \"Mesedez, idatzi baliozko txartel zenbaki bat.\",\n\tequalTo: \"Mesedez, idatzi berdina berriro ere.\",\n\textension: \"Mesedez, idatzi onartutako luzapena duen balio bat.\",\n\tmaxlength: $.validator.format( \"Mesedez, ez idatzi {0} karaktere baino gehiago.\" ),\n\tminlength: $.validator.format( \"Mesedez, ez idatzi {0} karaktere baino gutxiago.\" ),\n\trangelength: $.validator.format( \"Mesedez, idatzi {0} eta {1} karaktere arteko balio bat.\" ),\n\trange: $.validator.format( \"Mesedez, idatzi {0} eta {1} arteko balio bat.\" ),\n\tmax: $.validator.format( \"Mesedez, idatzi {0} edo txikiagoa den balio bat.\" ),\n\tmin: $.validator.format( \"Mesedez, idatzi {0} edo handiagoa den balio bat.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_fa.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: FA (Persian; فارسی)\n */\n$.extend( $.validator.messages, {\n\trequired: \"تکمیل این فیلد اجباری است.\",\n\tremote: \"لطفا این فیلد را تصحیح کنید.\",\n\temail: \".لطفا یک ایمیل صحیح وارد کنید\",\n\turl: \"لطفا آدرس صحیح وارد کنید.\",\n\tdate: \"لطفا یک تاریخ صحیح وارد کنید\",\n\tdateFA: \"لطفا یک تاریخ صحیح وارد کنید\",\n\tdateISO: \"لطفا تاریخ صحیح وارد کنید (ISO).\",\n\tnumber: \"لطفا عدد صحیح وارد کنید.\",\n\tdigits: \"لطفا تنها رقم وارد کنید\",\n\tcreditcard: \"لطفا کریدیت کارت صحیح وارد کنید.\",\n\tequalTo: \"لطفا مقدار برابری وارد کنید\",\n\textension: \"لطفا مقداری وارد کنید که \",\n\tmaxlength: $.validator.format( \"لطفا بیشتر از {0} حرف وارد نکنید.\" ),\n\tminlength: $.validator.format( \"لطفا کمتر از {0} حرف وارد نکنید.\" ),\n\trangelength: $.validator.format( \"لطفا مقداری بین {0} تا {1} حرف وارد کنید.\" ),\n\trange: $.validator.format( \"لطفا مقداری بین {0} تا {1} حرف وارد کنید.\" ),\n\tmax: $.validator.format( \"لطفا مقداری کمتر از {0} وارد کنید.\" ),\n\tmin: $.validator.format( \"لطفا مقداری بیشتر از {0} وارد کنید.\" ),\n\tminWords: $.validator.format( \"لطفا حداقل {0} کلمه وارد کنید.\" ),\n\tmaxWords: $.validator.format( \"لطفا حداکثر {0} کلمه وارد کنید.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_fi.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: FI (Finnish; suomi, suomen kieli)\n */\n$.extend( $.validator.messages, {\n\trequired: \"T&auml;m&auml; kentt&auml; on pakollinen.\",\n\temail: \"Sy&ouml;t&auml; oikea s&auml;hk&ouml;postiosoite.\",\n\turl: \"Sy&ouml;t&auml; oikea URL-osoite.\",\n\tdate: \"Sy&ouml;t&auml; oikea p&auml;iv&auml;m&auml;&auml;r&auml;.\",\n\tdateISO: \"Sy&ouml;t&auml; oikea p&auml;iv&auml;m&auml;&auml;r&auml; muodossa VVVV-KK-PP.\",\n\tnumber: \"Sy&ouml;t&auml; luku.\",\n\tcreditcard: \"Sy&ouml;t&auml; voimassa oleva luottokorttinumero.\",\n\tdigits: \"Sy&ouml;t&auml; pelk&auml;st&auml;&auml;n numeroita.\",\n\tequalTo: \"Sy&ouml;t&auml; sama arvo uudestaan.\",\n\tmaxlength: $.validator.format( \"Voit sy&ouml;tt&auml;&auml; enint&auml;&auml;n {0} merkki&auml;.\" ),\n\tminlength: $.validator.format( \"V&auml;hint&auml;&auml;n {0} merkki&auml;.\" ),\n\trangelength: $.validator.format( \"Sy&ouml;t&auml; v&auml;hint&auml;&auml;n {0} ja enint&auml;&auml;n {1} merkki&auml;.\" ),\n\trange: $.validator.format( \"Sy&ouml;t&auml; arvo v&auml;lilt&auml; {0}&ndash;{1}.\" ),\n\tmax: $.validator.format( \"Sy&ouml;t&auml; arvo, joka on enint&auml;&auml;n {0}.\" ),\n\tmin: $.validator.format( \"Sy&ouml;t&auml; arvo, joka on v&auml;hint&auml;&auml;n {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_fr.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: FR (French; français)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Ce champ est obligatoire.\",\n\tremote: \"Veuillez corriger ce champ.\",\n\temail: \"Veuillez fournir une adresse électronique valide.\",\n\turl: \"Veuillez fournir une adresse URL valide.\",\n\tdate: \"Veuillez fournir une date valide.\",\n\tdateISO: \"Veuillez fournir une date valide (ISO).\",\n\tnumber: \"Veuillez fournir un numéro valide.\",\n\tdigits: \"Veuillez fournir seulement des chiffres.\",\n\tcreditcard: \"Veuillez fournir un numéro de carte de crédit valide.\",\n\tequalTo: \"Veuillez fournir encore la même valeur.\",\n\textension: \"Veuillez fournir une valeur avec une extension valide.\",\n\tmaxlength: $.validator.format( \"Veuillez fournir au plus {0} caractères.\" ),\n\tminlength: $.validator.format( \"Veuillez fournir au moins {0} caractères.\" ),\n\trangelength: $.validator.format( \"Veuillez fournir une valeur qui contient entre {0} et {1} caractères.\" ),\n\trange: $.validator.format( \"Veuillez fournir une valeur entre {0} et {1}.\" ),\n\tmax: $.validator.format( \"Veuillez fournir une valeur inférieure ou égale à {0}.\" ),\n\tmin: $.validator.format( \"Veuillez fournir une valeur supérieure ou égale à {0}.\" ),\n\tmaxWords: $.validator.format( \"Veuillez fournir au plus {0} mots.\" ),\n\tminWords: $.validator.format( \"Veuillez fournir au moins {0} mots.\" ),\n\trangeWords: $.validator.format( \"Veuillez fournir entre {0} et {1} mots.\" ),\n\tletterswithbasicpunc: \"Veuillez fournir seulement des lettres et des signes de ponctuation.\",\n\talphanumeric: \"Veuillez fournir seulement des lettres, nombres, espaces et soulignages.\",\n\tlettersonly: \"Veuillez fournir seulement des lettres.\",\n\tnowhitespace: \"Veuillez ne pas inscrire d'espaces blancs.\",\n\tziprange: \"Veuillez fournir un code postal entre 902xx-xxxx et 905-xx-xxxx.\",\n\tinteger: \"Veuillez fournir un nombre non décimal qui est positif ou négatif.\",\n\tvinUS: \"Veuillez fournir un numéro d'identification du véhicule (VIN).\",\n\tdateITA: \"Veuillez fournir une date valide.\",\n\ttime: \"Veuillez fournir une heure valide entre 00:00 et 23:59.\",\n\tphoneUS: \"Veuillez fournir un numéro de téléphone valide.\",\n\tphoneUK: \"Veuillez fournir un numéro de téléphone valide.\",\n\tmobileUK: \"Veuillez fournir un numéro de téléphone mobile valide.\",\n\tstrippedminlength: $.validator.format( \"Veuillez fournir au moins {0} caractères.\" ),\n\temail2: \"Veuillez fournir une adresse électronique valide.\",\n\turl2: \"Veuillez fournir une adresse URL valide.\",\n\tcreditcardtypes: \"Veuillez fournir un numéro de carte de crédit valide.\",\n\tipv4: \"Veuillez fournir une adresse IP v4 valide.\",\n\tipv6: \"Veuillez fournir une adresse IP v6 valide.\",\n\trequire_from_group: \"Veuillez fournir au moins {0} de ces champs.\",\n\tnifES: \"Veuillez fournir un numéro NIF valide.\",\n\tnieES: \"Veuillez fournir un numéro NIE valide.\",\n\tcifES: \"Veuillez fournir un numéro CIF valide.\",\n\tpostalCodeCA: \"Veuillez fournir un code postal valide.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_ge.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/**\n * @author  @tatocaster <kutaliatato@gmail.com>\n * Translated default messages for the jQuery validation plugin.\n * Locale: GE (Georgian; ქართული)\n */\n$.extend( $.validator.messages, {\n\trequired: \"ეს ველი სავალდებულოა\",\n\tremote: \"გთხოვთ შეასწოროთ.\",\n\temail: \"გთხოვთ შეიყვანოთ სწორი ფორმატით.\",\n\turl: \"გთხოვთ შეიყვანოთ სწორი ფორმატით.\",\n\tdate: \"გთხოვთ შეიყვანოთ სწორი თარიღი.\",\n\tdateISO: \"გთხოვთ შეიყვანოთ სწორი ფორმატით ( ISO ).\",\n\tnumber: \"გთხოვთ შეიყვანოთ რიცხვი.\",\n\tdigits: \"დაშვებულია მხოლოდ ციფრები.\",\n\tcreditcard: \"გთხოვთ შეიყვანოთ სწორი ფორმატის ბარათის კოდი.\",\n\tequalTo: \"გთხოვთ შეიყვანოთ იგივე მნიშვნელობა.\",\n\tmaxlength: $.validator.format( \"გთხოვთ შეიყვანოთ არა უმეტეს {0} სიმბოლოსი.\" ),\n\tminlength: $.validator.format( \"შეიყვანეთ მინიმუმ {0} სიმბოლო.\" ),\n\trangelength: $.validator.format( \"გთხოვთ შეიყვანოთ {0} -დან {1} -მდე რაოდენობის სიმბოლოები.\" ),\n\trange: $.validator.format( \"შეიყვანეთ {0} -სა {1} -ს შორის.\" ),\n\tmax: $.validator.format( \"გთხოვთ შეიყვანოთ მნიშვნელობა ნაკლები ან ტოლი {0} -ს.\" ),\n\tmin: $.validator.format( \"გთხოვთ შეიყვანოთ მნიშვნელობა მეტი ან ტოლი {0} -ს.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_gl.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: GL (Galician; Galego)\n */\n( function( $ ) {\n\t$.extend( $.validator.messages, {\n\t\trequired: \"Este campo é obrigatorio.\",\n\t\tremote: \"Por favor, cubre este campo.\",\n\t\temail: \"Por favor, escribe unha dirección de correo válida.\",\n\t\turl: \"Por favor, escribe unha URL válida.\",\n\t\tdate: \"Por favor, escribe unha data válida.\",\n\t\tdateISO: \"Por favor, escribe unha data (ISO) válida.\",\n\t\tnumber: \"Por favor, escribe un número válido.\",\n\t\tdigits: \"Por favor, escribe só díxitos.\",\n\t\tcreditcard: \"Por favor, escribe un número de tarxeta válido.\",\n\t\tequalTo: \"Por favor, escribe o mesmo valor de novo.\",\n\t\textension: \"Por favor, escribe un valor cunha extensión aceptada.\",\n\t\tmaxlength: $.validator.format( \"Por favor, non escribas máis de {0} caracteres.\" ),\n\t\tminlength: $.validator.format( \"Por favor, non escribas menos de {0} caracteres.\" ),\n\t\trangelength: $.validator.format( \"Por favor, escribe un valor entre {0} e {1} caracteres.\" ),\n\t\trange: $.validator.format( \"Por favor, escribe un valor entre {0} e {1}.\" ),\n\t\tmax: $.validator.format( \"Por favor, escribe un valor menor ou igual a {0}.\" ),\n\t\tmin: $.validator.format( \"Por favor, escribe un valor maior ou igual a {0}.\" ),\n\t\tnifES: \"Por favor, escribe un NIF válido.\",\n\t\tnieES: \"Por favor, escribe un NIE válido.\",\n\t\tcifES: \"Por favor, escribe un CIF válido.\"\n\t} );\n}( jQuery ) );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_he.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: HE (Hebrew; עברית)\n */\n$.extend( $.validator.messages, {\n\trequired: \"השדה הזה הינו שדה חובה\",\n\tremote: \"נא לתקן שדה זה\",\n\temail: \"נא למלא כתובת דוא\\\"ל חוקית\",\n\turl: \"נא למלא כתובת אינטרנט חוקית\",\n\tdate: \"נא למלא תאריך חוקי\",\n\tdateISO: \"נא למלא תאריך חוקי (ISO)\",\n\tnumber: \"נא למלא מספר\",\n\tdigits: \"נא למלא רק מספרים\",\n\tcreditcard: \"נא למלא מספר כרטיס אשראי חוקי\",\n\tequalTo: \"נא למלא את אותו ערך שוב\",\n\textension: \"נא למלא ערך עם סיומת חוקית\",\n\tmaxlength: $.validator.format( \".נא לא למלא יותר מ- {0} תווים\" ),\n\tminlength: $.validator.format( \"נא למלא לפחות {0} תווים\" ),\n\trangelength: $.validator.format( \"נא למלא ערך בין {0} ל- {1} תווים\" ),\n\trange: $.validator.format( \"נא למלא ערך בין {0} ל- {1}\" ),\n\tmax: $.validator.format( \"נא למלא ערך קטן או שווה ל- {0}\" ),\n\tmin: $.validator.format( \"נא למלא ערך גדול או שווה ל- {0}\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_hr.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: HR (Croatia; hrvatski jezik)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Ovo polje je obavezno.\",\n\tremote: \"Ovo polje treba popraviti.\",\n\temail: \"Unesite ispravnu e-mail adresu.\",\n\turl: \"Unesite ispravan URL.\",\n\tdate: \"Unesite ispravan datum.\",\n\tdateISO: \"Unesite ispravan datum (ISO).\",\n\tnumber: \"Unesite ispravan broj.\",\n\tdigits: \"Unesite samo brojeve.\",\n\tcreditcard: \"Unesite ispravan broj kreditne kartice.\",\n\tequalTo: \"Unesite ponovo istu vrijednost.\",\n\textension: \"Unesite vrijednost sa ispravnom ekstenzijom.\",\n\tmaxlength: $.validator.format( \"Maksimalni broj znakova je {0} .\" ),\n\tminlength: $.validator.format( \"Minimalni broj znakova je {0} .\" ),\n\trangelength: $.validator.format( \"Unesite vrijednost između {0} i {1} znakova.\" ),\n\trange: $.validator.format( \"Unesite vrijednost između {0} i {1}.\" ),\n\tmax: $.validator.format( \"Unesite vrijednost manju ili jednaku {0}.\" ),\n\tmin: $.validator.format( \"Unesite vrijednost veću ili jednaku {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_hu.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: HU (Hungarian; Magyar)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Kötelező megadni.\",\n\tmaxlength: $.validator.format( \"Legfeljebb {0} karakter hosszú legyen.\" ),\n\tminlength: $.validator.format( \"Legalább {0} karakter hosszú legyen.\" ),\n\trangelength: $.validator.format( \"Legalább {0} és legfeljebb {1} karakter hosszú legyen.\" ),\n\temail: \"Érvényes e-mail címnek kell lennie.\",\n\turl: \"Érvényes URL-nek kell lennie.\",\n\tdate: \"Dátumnak kell lennie.\",\n\tnumber: \"Számnak kell lennie.\",\n\tdigits: \"Csak számjegyek lehetnek.\",\n\tequalTo: \"Meg kell egyeznie a két értéknek.\",\n\trange: $.validator.format( \"{0} és {1} közé kell esnie.\" ),\n\tmax: $.validator.format( \"Nem lehet nagyobb, mint {0}.\" ),\n\tmin: $.validator.format( \"Nem lehet kisebb, mint {0}.\" ),\n\tcreditcard: \"Érvényes hitelkártyaszámnak kell lennie.\",\n\tremote: \"Kérem javítsa ki ezt a mezőt.\",\n\tdateISO: \"Kérem írjon be egy érvényes dátumot (ISO).\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_hy_AM.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: HY_AM (Armenian; հայերեն լեզու)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Պարտադիր լրացման դաշտ\",\n\tremote: \"Ներմուծեք ճիշտ արժեքը\",\n\temail: \"Ներմուծեք վավեր էլեկտրոնային փոստի հասցե\",\n\turl: \"Ներմուծեք վավեր URL\",\n\tdate: \"Ներմուծեք վավեր ամսաթիվ\",\n\tdateISO: \"Ներմուծեք ISO ֆորմատով վավեր ամսաթիվ։\",\n\tnumber: \"Ներմուծեք թիվ\",\n\tdigits: \"Ներմուծեք միայն թվեր\",\n\tcreditcard: \"Ներմուծեք ճիշտ բանկային քարտի համար\",\n\tequalTo: \"Ներմուծեք միևնուն արժեքը ևս մեկ անգամ\",\n\textension: \"Ընտրեք ճիշտ ընդլանումով ֆայլ\",\n\tmaxlength: $.validator.format( \"Ներմուծեք ոչ ավել քան {0} նիշ\" ),\n\tminlength: $.validator.format( \"Ներմուծեք ոչ պակաս քան {0} նիշ\" ),\n\trangelength: $.validator.format( \"Ներմուծեք {0}֊ից {1} երկարությամբ արժեք\" ),\n\trange: $.validator.format( \"Ներմուծեք թիվ {0}֊ից {1} միջակայքում\" ),\n\tmax: $.validator.format( \"Ներմուծեք թիվ, որը փոքր կամ հավասար է {0}֊ին\" ),\n\tmin: $.validator.format( \"Ներմուծեք թիվ, որը մեծ կամ հավասար է {0}֊ին\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_id.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: ID (Indonesia; Indonesian)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Kolom ini diperlukan.\",\n\tremote: \"Harap benarkan kolom ini.\",\n\temail: \"Silakan masukkan format email yang benar.\",\n\turl: \"Silakan masukkan format URL yang benar.\",\n\tdate: \"Silakan masukkan format tanggal yang benar.\",\n\tdateISO: \"Silakan masukkan format tanggal(ISO) yang benar.\",\n\tnumber: \"Silakan masukkan angka yang benar.\",\n\tdigits: \"Harap masukan angka saja.\",\n\tcreditcard: \"Harap masukkan format kartu kredit yang benar.\",\n\tequalTo: \"Harap masukkan nilai yg sama dengan sebelumnya.\",\n\tmaxlength: $.validator.format( \"Input dibatasi hanya {0} karakter.\" ),\n\tminlength: $.validator.format( \"Input tidak kurang dari {0} karakter.\" ),\n\trangelength: $.validator.format( \"Panjang karakter yg diizinkan antara {0} dan {1} karakter.\" ),\n\trange: $.validator.format( \"Harap masukkan nilai antara {0} dan {1}.\" ),\n\tmax: $.validator.format( \"Harap masukkan nilai lebih kecil atau sama dengan {0}.\" ),\n\tmin: $.validator.format( \"Harap masukkan nilai lebih besar atau sama dengan {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_is.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: IS (Icelandic; íslenska)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Þessi reitur er nauðsynlegur.\",\n\tremote: \"Lagaðu þennan reit.\",\n\tmaxlength: $.validator.format( \"Sláðu inn mest {0} stafi.\" ),\n\tminlength: $.validator.format( \"Sláðu inn minnst {0} stafi.\" ),\n\trangelength: $.validator.format( \"Sláðu inn minnst {0} og mest {1} stafi.\" ),\n\temail: \"Sláðu inn gilt netfang.\",\n\turl: \"Sláðu inn gilda vefslóð.\",\n\tdate: \"Sláðu inn gilda dagsetningu.\",\n\tnumber: \"Sláðu inn tölu.\",\n\tdigits: \"Sláðu inn tölustafi eingöngu.\",\n\tequalTo: \"Sláðu sama gildi inn aftur.\",\n\trange: $.validator.format( \"Sláðu inn gildi milli {0} og {1}.\" ),\n\tmax: $.validator.format( \"Sláðu inn gildi sem er minna en eða jafnt og {0}.\" ),\n\tmin: $.validator.format( \"Sláðu inn gildi sem er stærra en eða jafnt og {0}.\" ),\n\tcreditcard: \"Sláðu inn gilt greiðslukortanúmer.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_it.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: IT (Italian; Italiano)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Campo obbligatorio\",\n\tremote: \"Controlla questo campo\",\n\temail: \"Inserisci un indirizzo email valido\",\n\turl: \"Inserisci un indirizzo web valido\",\n\tdate: \"Inserisci una data valida\",\n\tdateISO: \"Inserisci una data valida (ISO)\",\n\tnumber: \"Inserisci un numero valido\",\n\tdigits: \"Inserisci solo numeri\",\n\tcreditcard: \"Inserisci un numero di carta di credito valido\",\n\tequalTo: \"Il valore non corrisponde\",\n\textension: \"Inserisci un valore con un&apos;estensione valida\",\n\tmaxlength: $.validator.format( \"Non inserire pi&ugrave; di {0} caratteri\" ),\n\tminlength: $.validator.format( \"Inserisci almeno {0} caratteri\" ),\n\trangelength: $.validator.format( \"Inserisci un valore compreso tra {0} e {1} caratteri\" ),\n\trange: $.validator.format( \"Inserisci un valore compreso tra {0} e {1}\" ),\n\tmax: $.validator.format( \"Inserisci un valore minore o uguale a {0}\" ),\n\tmin: $.validator.format( \"Inserisci un valore maggiore o uguale a {0}\" ),\n\tnifES: \"Inserisci un NIF valido\",\n\tnieES: \"Inserisci un NIE valido\",\n\tcifES: \"Inserisci un CIF valido\",\n\tcurrency: \"Inserisci una valuta valida\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_ja.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: JA (Japanese; 日本語)\n */\n$.extend( $.validator.messages, {\n\trequired: \"このフィールドは必須です。\",\n\tremote: \"このフィールドを修正してください。\",\n\temail: \"有効なEメールアドレスを入力してください。\",\n\turl: \"有効なURLを入力してください。\",\n\tdate: \"有効な日付を入力してください。\",\n\tdateISO: \"有効な日付（ISO）を入力してください。\",\n\tnumber: \"有効な数字を入力してください。\",\n\tdigits: \"数字のみを入力してください。\",\n\tcreditcard: \"有効なクレジットカード番号を入力してください。\",\n\tequalTo: \"同じ値をもう一度入力してください。\",\n\textension: \"有効な拡張子を含む値を入力してください。\",\n\tmaxlength: $.validator.format( \"{0} 文字以内で入力してください。\" ),\n\tminlength: $.validator.format( \"{0} 文字以上で入力してください。\" ),\n\trangelength: $.validator.format( \"{0} 文字から {1} 文字までの値を入力してください。\" ),\n\trange: $.validator.format( \"{0} から {1} までの値を入力してください。\" ),\n\tmax: $.validator.format( \"{0} 以下の値を入力してください。\" ),\n\tmin: $.validator.format( \"{0} 以上の値を入力してください。\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_ka.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: KA (Georgian; ქართული)\n */\n$.extend( $.validator.messages, {\n\trequired: \"ამ ველის შევსება აუცილებელია.\",\n\tremote: \"გთხოვთ მიუთითოთ სწორი მნიშვნელობა.\",\n\temail: \"გთხოვთ მიუთითოთ ელ-ფოსტის კორექტული მისამართი.\",\n\turl: \"გთხოვთ მიუთითოთ კორექტული URL.\",\n\tdate: \"გთხოვთ მიუთითოთ კორექტული თარიღი.\",\n\tdateISO: \"გთხოვთ მიუთითოთ კორექტული თარიღი ISO ფორმატში.\",\n\tnumber: \"გთხოვთ მიუთითოთ ციფრი.\",\n\tdigits: \"გთხოვთ მიუთითოთ მხოლოდ ციფრები.\",\n\tcreditcard: \"გთხოვთ მიუთითოთ საკრედიტო ბარათის კორექტული ნომერი.\",\n\tequalTo: \"გთხოვთ მიუთითოთ ასეთივე მნიშვნელობა კიდევ ერთხელ.\",\n\textension: \"გთხოვთ აირჩიოთ ფაილი კორექტული გაფართოებით.\",\n\tmaxlength: $.validator.format( \"დასაშვებია არაუმეტეს {0} სიმბოლო.\" ),\n\tminlength: $.validator.format( \"აუცილებელია შეიყვანოთ მინიმუმ {0} სიმბოლო.\" ),\n\trangelength: $.validator.format( \"ტექსტში სიმბოლოების რაოდენობა უნდა იყოს {0}-დან {1}-მდე.\" ),\n\trange: $.validator.format( \"გთხოვთ შეიყვანოთ ციფრი {0}-დან {1}-მდე.\" ),\n\tmax: $.validator.format( \"გთხოვთ შეიყვანოთ ციფრი რომელიც ნაკლებია ან უდრის {0}-ს.\" ),\n\tmin: $.validator.format( \"გთხოვთ შეიყვანოთ ციფრი რომელიც მეტია ან უდრის {0}-ს.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_kk.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: KK (Kazakh; қазақ тілі)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Бұл өрісті міндетті түрде толтырыңыз.\",\n\tremote: \"Дұрыс мағына енгізуіңізді сұраймыз.\",\n\temail: \"Нақты электронды поштаңызды енгізуіңізді сұраймыз.\",\n\turl: \"Нақты URL-ды енгізуіңізді сұраймыз.\",\n\tdate: \"Нақты URL-ды енгізуіңізді сұраймыз.\",\n\tdateISO: \"Нақты ISO форматымен сәйкес датасын енгізуіңізді сұраймыз.\",\n\tnumber: \"Күнді енгізуіңізді сұраймыз.\",\n\tdigits: \"Тек қана сандарды енгізуіңізді сұраймыз.\",\n\tcreditcard: \"Несие картасының нөмірін дұрыс енгізуіңізді сұраймыз.\",\n\tequalTo: \"Осы мәнді қайта енгізуіңізді сұраймыз.\",\n\textension: \"Файлдың кеңейтуін дұрыс таңдаңыз.\",\n\tmaxlength: $.validator.format( \"Ұзындығы {0} символдан көр болмасын.\" ),\n\tminlength: $.validator.format( \"Ұзындығы {0} символдан аз болмасын.\" ),\n\trangelength: $.validator.format( \"Ұзындығы {0}-{1} дейін мән енгізуіңізді сұраймыз.\" ),\n\trange: $.validator.format( \"Пожалуйста, введите число от {0} до {1}. - {0} - {1} санын енгізуіңізді сұраймыз.\" ),\n\tmax: $.validator.format( \"{0} аз немесе тең санын енгізуіңіді сұраймыз.\" ),\n\tmin: $.validator.format( \"{0} көп немесе тең санын енгізуіңізді сұраймыз.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_ko.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: KO (Korean; 한국어)\n */\n$.extend( $.validator.messages, {\n\trequired: \"필수 항목입니다.\",\n\tremote: \"항목을 수정하세요.\",\n\temail: \"유효하지 않은 E-Mail주소입니다.\",\n\turl: \"유효하지 않은 URL입니다.\",\n\tdate: \"올바른 날짜를 입력하세요.\",\n\tdateISO: \"올바른 날짜(ISO)를 입력하세요.\",\n\tnumber: \"유효한 숫자가 아닙니다.\",\n\tdigits: \"숫자만 입력 가능합니다.\",\n\tcreditcard: \"신용카드 번호가 바르지 않습니다.\",\n\tequalTo: \"같은 값을 다시 입력하세요.\",\n\textension: \"올바른 확장자가 아닙니다.\",\n\tmaxlength: $.validator.format( \"{0}자를 넘을 수 없습니다. \" ),\n\tminlength: $.validator.format( \"{0}자 이상 입력하세요.\" ),\n\trangelength: $.validator.format( \"문자 길이가 {0} 에서 {1} 사이의 값을 입력하세요.\" ),\n\trange: $.validator.format( \"{0} 에서 {1} 사이의 값을 입력하세요.\" ),\n\tmax: $.validator.format( \"{0} 이하의 값을 입력하세요.\" ),\n\tmin: $.validator.format( \"{0} 이상의 값을 입력하세요.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_lt.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: LT (Lithuanian; lietuvių kalba)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Šis laukas yra privalomas.\",\n\tremote: \"Prašau pataisyti šį lauką.\",\n\temail: \"Prašau įvesti teisingą elektroninio pašto adresą.\",\n\turl: \"Prašau įvesti teisingą URL.\",\n\tdate: \"Prašau įvesti teisingą datą.\",\n\tdateISO: \"Prašau įvesti teisingą datą (ISO).\",\n\tnumber: \"Prašau įvesti teisingą skaičių.\",\n\tdigits: \"Prašau naudoti tik skaitmenis.\",\n\tcreditcard: \"Prašau įvesti teisingą kreditinės kortelės numerį.\",\n\tequalTo: \"Prašau įvestį tą pačią reikšmę dar kartą.\",\n\textension: \"Prašau įvesti reikšmę su teisingu plėtiniu.\",\n\tmaxlength: $.validator.format( \"Prašau įvesti ne daugiau kaip {0} simbolių.\" ),\n\tminlength: $.validator.format( \"Prašau įvesti bent {0} simbolius.\" ),\n\trangelength: $.validator.format( \"Prašau įvesti reikšmes, kurių ilgis nuo {0} iki {1} simbolių.\" ),\n\trange: $.validator.format( \"Prašau įvesti reikšmę intervale nuo {0} iki {1}.\" ),\n\tmax: $.validator.format( \"Prašau įvesti reikšmę mažesnę arba lygią {0}.\" ),\n\tmin: $.validator.format( \"Prašau įvesti reikšmę didesnę arba lygią {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_lv.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: LV (Latvian; latviešu valoda)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Šis lauks ir obligāts.\",\n\tremote: \"Lūdzu, pārbaudiet šo lauku.\",\n\temail: \"Lūdzu, ievadiet derīgu e-pasta adresi.\",\n\turl: \"Lūdzu, ievadiet derīgu URL adresi.\",\n\tdate: \"Lūdzu, ievadiet derīgu datumu.\",\n\tdateISO: \"Lūdzu, ievadiet derīgu datumu (ISO).\",\n\tnumber: \"Lūdzu, ievadiet derīgu numuru.\",\n\tdigits: \"Lūdzu, ievadiet tikai ciparus.\",\n\tcreditcard: \"Lūdzu, ievadiet derīgu kredītkartes numuru.\",\n\tequalTo: \"Lūdzu, ievadiet to pašu vēlreiz.\",\n\textension: \"Lūdzu, ievadiet vērtību ar derīgu paplašinājumu.\",\n\tmaxlength: $.validator.format( \"Lūdzu, ievadiet ne vairāk kā {0} rakstzīmes.\" ),\n\tminlength: $.validator.format( \"Lūdzu, ievadiet vismaz {0} rakstzīmes.\" ),\n\trangelength: $.validator.format( \"Lūdzu ievadiet {0} līdz {1} rakstzīmes.\" ),\n\trange: $.validator.format( \"Lūdzu, ievadiet skaitli no {0} līdz {1}.\" ),\n\tmax: $.validator.format( \"Lūdzu, ievadiet skaitli, kurš ir mazāks vai vienāds ar {0}.\" ),\n\tmin: $.validator.format( \"Lūdzu, ievadiet skaitli, kurš ir lielāks vai vienāds ar {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_mk.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: MK (Macedonian; македонски јазик)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Полето е задолжително.\",\n\tremote: \"Поправете го ова поле\",\n\temail: \"Внесете правилна e-mail адреса\",\n\turl: \"Внесете правилен URL.\",\n\tdate: \"Внесете правилен датум\",\n\tdateISO: \"Внесете правилен датум (ISO).\",\n\tnumber: \"Внесете правилен број.\",\n\tdigits: \"Внесете само бројки.\",\n\tcreditcard: \"Внесете правилен број на кредитната картичка.\",\n\tequalTo: \"Внесете ја истата вредност повторно.\",\n\textension: \"Внесете вредност со соодветна екстензија.\",\n\tmaxlength: $.validator.format( \"Внесете максимално {0} знаци.\" ),\n\tminlength: $.validator.format( \"Внесете барем {0} знаци.\" ),\n\trangelength: $.validator.format( \"Внесете вредност со должина помеѓу {0} и {1} знаци.\" ),\n\trange: $.validator.format( \"Внесете вредност помеѓу {0} и {1}.\" ),\n\tmax: $.validator.format( \"Внесете вредност помала или еднаква на {0}.\" ),\n\tmin: $.validator.format( \"Внесете вредност поголема или еднаква на {0}\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_my.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: MY (Malay; Melayu)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Medan ini diperlukan.\",\n\tremote: \"Sila betulkan medan ini.\",\n\temail: \"Sila masukkan alamat emel yang betul.\",\n\turl: \"Sila masukkan URL yang betul.\",\n\tdate: \"Sila masukkan tarikh yang betul.\",\n\tdateISO: \"Sila masukkan tarikh(ISO) yang betul.\",\n\tnumber: \"Sila masukkan nombor yang betul.\",\n\tdigits: \"Sila masukkan nilai digit sahaja.\",\n\tcreditcard: \"Sila masukkan nombor kredit kad yang betul.\",\n\tequalTo: \"Sila masukkan nilai yang sama semula.\",\n\textension: \"Sila masukkan nilai yang telah diterima.\",\n\tmaxlength: $.validator.format( \"Sila masukkan tidak lebih dari {0} aksara.\" ),\n\tminlength: $.validator.format( \"Sila masukkan sekurang-kurangnya {0} aksara.\" ),\n\trangelength: $.validator.format( \"Sila masukkan antara {0} dan {1} panjang aksara.\" ),\n\trange: $.validator.format( \"Sila masukkan nilai antara {0} dan {1} aksara.\" ),\n\tmax: $.validator.format( \"Sila masukkan nilai yang kurang atau sama dengan {0}.\" ),\n\tmin: $.validator.format( \"Sila masukkan nilai yang lebih atau sama dengan {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_nl.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: NL (Dutch; Nederlands, Vlaams)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Dit is een verplicht veld.\",\n\tremote: \"Controleer dit veld.\",\n\temail: \"Vul hier een geldig e-mailadres in.\",\n\turl: \"Vul hier een geldige URL in.\",\n\tdate: \"Vul hier een geldige datum in.\",\n\tdateISO: \"Vul hier een geldige datum in (ISO-formaat).\",\n\tnumber: \"Vul hier een geldig getal in.\",\n\tdigits: \"Vul hier alleen getallen in.\",\n\tcreditcard: \"Vul hier een geldig creditcardnummer in.\",\n\tequalTo: \"Vul hier dezelfde waarde in.\",\n\textension: \"Vul hier een waarde in met een geldige extensie.\",\n\tmaxlength: $.validator.format( \"Vul hier maximaal {0} tekens in.\" ),\n\tminlength: $.validator.format( \"Vul hier minimaal {0} tekens in.\" ),\n\trangelength: $.validator.format( \"Vul hier een waarde in van minimaal {0} en maximaal {1} tekens.\" ),\n\trange: $.validator.format( \"Vul hier een waarde in van minimaal {0} en maximaal {1}.\" ),\n\tmax: $.validator.format( \"Vul hier een waarde in kleiner dan of gelijk aan {0}.\" ),\n\tmin: $.validator.format( \"Vul hier een waarde in groter dan of gelijk aan {0}.\" ),\n\n\t// For validations in additional-methods.js\n\tiban: \"Vul hier een geldig IBAN in.\",\n\tdateNL: \"Vul hier een geldige datum in.\",\n\tphoneNL: \"Vul hier een geldig Nederlands telefoonnummer in.\",\n\tmobileNL: \"Vul hier een geldig Nederlands mobiel telefoonnummer in.\",\n\tpostalcodeNL: \"Vul hier een geldige postcode in.\",\n\tbankaccountNL: \"Vul hier een geldig bankrekeningnummer in.\",\n\tgiroaccountNL: \"Vul hier een geldig gironummer in.\",\n\tbankorgiroaccountNL: \"Vul hier een geldig bank- of gironummer in.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_no.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: NO (Norwegian; Norsk)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Dette feltet er obligatorisk.\",\n\tmaxlength: $.validator.format( \"Maksimalt {0} tegn.\" ),\n\tminlength: $.validator.format( \"Minimum {0} tegn.\" ),\n\trangelength: $.validator.format( \"Angi minimum {0} og maksimum {1} tegn.\" ),\n\temail: \"Oppgi en gyldig epostadresse.\",\n\turl: \"Angi en gyldig URL.\",\n\tdate: \"Angi en gyldig dato.\",\n\tdateISO: \"Angi en gyldig dato (&ARING;&ARING;&ARING;&ARING;-MM-DD).\",\n\tdateSE: \"Angi en gyldig dato.\",\n\tnumber: \"Angi et gyldig nummer.\",\n\tnumberSE: \"Angi et gyldig nummer.\",\n\tdigits: \"Skriv kun tall.\",\n\tequalTo: \"Skriv samme verdi igjen.\",\n\trange: $.validator.format( \"Angi en verdi mellom {0} og {1}.\" ),\n\tmax: $.validator.format( \"Angi en verdi som er mindre eller lik {0}.\" ),\n\tmin: $.validator.format( \"Angi en verdi som er st&oslash;rre eller lik {0}.\" ),\n\tcreditcard: \"Angi et gyldig kredittkortnummer.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_pl.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: PL (Polish; język polski, polszczyzna)\n */\n$.extend( $.validator.messages, {\n\trequired: \"To pole jest wymagane.\",\n\tremote: \"Proszę o wypełnienie tego pola.\",\n\temail: \"Proszę o podanie prawidłowego adresu email.\",\n\turl: \"Proszę o podanie prawidłowego URL.\",\n\tdate: \"Proszę o podanie prawidłowej daty.\",\n\tdateISO: \"Proszę o podanie prawidłowej daty (ISO).\",\n\tnumber: \"Proszę o podanie prawidłowej liczby.\",\n\tdigits: \"Proszę o podanie samych cyfr.\",\n\tcreditcard: \"Proszę o podanie prawidłowej karty kredytowej.\",\n\tequalTo: \"Proszę o podanie tej samej wartości ponownie.\",\n\textension: \"Proszę o podanie wartości z prawidłowym rozszerzeniem.\",\n\tmaxlength: $.validator.format( \"Proszę o podanie nie więcej niż {0} znaków.\" ),\n\tminlength: $.validator.format( \"Proszę o podanie przynajmniej {0} znaków.\" ),\n\trangelength: $.validator.format( \"Proszę o podanie wartości o długości od {0} do {1} znaków.\" ),\n\trange: $.validator.format( \"Proszę o podanie wartości z przedziału od {0} do {1}.\" ),\n\tmax: $.validator.format( \"Proszę o podanie wartości mniejszej bądź równej {0}.\" ),\n\tmin: $.validator.format( \"Proszę o podanie wartości większej bądź równej {0}.\" ),\n\tpattern: $.validator.format( \"Pole zawiera niedozwolone znaki.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_pt_BR.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: PT (Portuguese; português)\n * Region: BR (Brazil)\n */\n$.extend( $.validator.messages, {\n\n\t// Core\n\trequired: \"Este campo &eacute; requerido.\",\n\tremote: \"Por favor, corrija este campo.\",\n\temail: \"Por favor, forne&ccedil;a um endere&ccedil;o de email v&aacute;lido.\",\n\turl: \"Por favor, forne&ccedil;a uma URL v&aacute;lida.\",\n\tdate: \"Por favor, forne&ccedil;a uma data v&aacute;lida.\",\n\tdateISO: \"Por favor, forne&ccedil;a uma data v&aacute;lida (ISO).\",\n\tnumber: \"Por favor, forne&ccedil;a um n&uacute;mero v&aacute;lido.\",\n\tdigits: \"Por favor, forne&ccedil;a somente d&iacute;gitos.\",\n\tcreditcard: \"Por favor, forne&ccedil;a um cart&atilde;o de cr&eacute;dito v&aacute;lido.\",\n\tequalTo: \"Por favor, forne&ccedil;a o mesmo valor novamente.\",\n\tmaxlength: $.validator.format( \"Por favor, forne&ccedil;a n&atilde;o mais que {0} caracteres.\" ),\n\tminlength: $.validator.format( \"Por favor, forne&ccedil;a ao menos {0} caracteres.\" ),\n\trangelength: $.validator.format( \"Por favor, forne&ccedil;a um valor entre {0} e {1} caracteres de comprimento.\" ),\n\trange: $.validator.format( \"Por favor, forne&ccedil;a um valor entre {0} e {1}.\" ),\n\tmax: $.validator.format( \"Por favor, forne&ccedil;a um valor menor ou igual a {0}.\" ),\n\tmin: $.validator.format( \"Por favor, forne&ccedil;a um valor maior ou igual a {0}.\" ),\n\n\t// Metodos Adicionais\n\tmaxWords: $.validator.format( \"Por favor, forne&ccedil;a com {0} palavras ou menos.\" ),\n\tminWords: $.validator.format( \"Por favor, forne&ccedil;a pelo menos {0} palavras.\" ),\n\trangeWords: $.validator.format( \"Por favor, forne&ccedil;a entre {0} e {1} palavras.\" ),\n\taccept: \"Por favor, forne&ccedil;a um tipo v&aacute;lido.\",\n\talphanumeric: \"Por favor, forne&ccedil;a somente com letras, n&uacute;meros e sublinhados.\",\n\tbankaccountNL: \"Por favor, forne&ccedil;a com um n&uacute;mero de conta banc&aacute;ria v&aacute;lida.\",\n\tbankorgiroaccountNL: \"Por favor, forne&ccedil;a um banco v&aacute;lido ou n&uacute;mero de conta.\",\n\tbic: \"Por favor, forne&ccedil;a um c&oacute;digo BIC v&aacute;lido.\",\n\tcifES: \"Por favor, forne&ccedil;a um c&oacute;digo CIF v&aacute;lido.\",\n\tcreditcardtypes: \"Por favor, forne&ccedil;a um n&uacute;mero de cart&atilde;o de cr&eacute;dito v&aacute;lido.\",\n\tcurrency: \"Por favor, forne&ccedil;a uma moeda v&aacute;lida.\",\n\tdateFA: \"Por favor, forne&ccedil;a uma data correta.\",\n\tdateITA: \"Por favor, forne&ccedil;a uma data correta.\",\n\tdateNL: \"Por favor, forne&ccedil;a uma data correta.\",\n\textension: \"Por favor, forne&ccedil;a um valor com uma extens&atilde;o v&aacute;lida.\",\n\tgiroaccountNL: \"Por favor, forne&ccedil;a um n&uacute;mero de conta corrente v&aacute;lido.\",\n\tiban: \"Por favor, forne&ccedil;a um c&oacute;digo IBAN v&aacute;lido.\",\n\tinteger: \"Por favor, forne&ccedil;a um n&uacute;mero n&atilde;o decimal.\",\n\tipv4: \"Por favor, forne&ccedil;a um IPv4 v&aacute;lido.\",\n\tipv6: \"Por favor, forne&ccedil;a um IPv6 v&aacute;lido.\",\n\tlettersonly: \"Por favor, forne&ccedil;a apenas com letras.\",\n\tletterswithbasicpunc: \"Por favor, forne&ccedil;a apenas letras ou pontua&ccedil;ões.\",\n\tmobileNL: \"Por favor, fornece&ccedil;a um n&uacute;mero v&aacute;lido de telefone.\",\n\tmobileUK: \"Por favor, fornece&ccedil;a um n&uacute;mero v&aacute;lido de telefone.\",\n\tnieES: \"Por favor, forne&ccedil;a um NIE v&aacute;lido.\",\n\tnifES: \"Por favor, forne&ccedil;a um NIF v&aacute;lido.\",\n\tnowhitespace: \"Por favor, n&atilde;o utilize espa&ccedil;os em branco.\",\n\tpattern: \"O formato fornenecido &eacute; inv&aacute;lido.\",\n\tphoneNL: \"Por favor, fornece&ccedil;a um n&uacute;mero de telefone v&aacute;lido.\",\n\tphoneUK: \"Por favor, fornece&ccedil;a um n&uacute;mero de telefone v&aacute;lido.\",\n\tphoneUS: \"Por favor, fornece&ccedil;a um n&uacute;mero de telefone v&aacute;lido.\",\n\tphonesUK: \"Por favor, fornece&ccedil;a um n&uacute;mero de telefone v&aacute;lido.\",\n\tpostalCodeCA: \"Por favor, fornece&ccedil;a um n&uacute;mero de c&oacute;digo postal v&aacute;lido.\",\n\tpostalcodeIT: \"Por favor, fornece&ccedil;a um n&uacute;mero de c&oacute;digo postal v&aacute;lido.\",\n\tpostalcodeNL: \"Por favor, fornece&ccedil;a um n&uacute;mero de c&oacute;digo postal v&aacute;lido.\",\n\tpostcodeUK: \"Por favor, fornece&ccedil;a um n&uacute;mero de c&oacute;digo postal v&aacute;lido.\",\n\tpostalcodeBR: \"Por favor, forne&ccedil;a um CEP v&aacute;lido.\",\n\trequire_from_group: $.validator.format( \"Por favor, forne&ccedil;a pelo menos {0} destes campos.\" ),\n\tskip_or_fill_minimum: $.validator.format( \"Por favor, optar entre ignorar esses campos ou preencher pelo menos {0} deles.\" ),\n\tstateUS: \"Por favor, forne&ccedil;a um estado v&aacute;lido.\",\n\tstrippedminlength: $.validator.format( \"Por favor, forne&ccedil;a pelo menos {0} caracteres.\" ),\n\ttime: \"Por favor, forne&ccedil;a um hor&aacute;rio v&aacute;lido, no intervado de 00:00 e 23:59.\",\n\ttime12h: \"Por favor, forne&ccedil;a um hor&aacute;rio v&aacute;lido, no intervado de 01:00 e 12:59 am/pm.\",\n\turl2: \"Por favor, fornece&ccedil;a uma URL v&aacute;lida.\",\n\tvinUS: \"O n&uacute;mero de identifica&ccedil;&atilde;o de ve&iacute;culo informada (VIN) &eacute; inv&aacute;lido.\",\n\tzipcodeUS: \"Por favor, fornece&ccedil;a um c&oacute;digo postal americano v&aacute;lido.\",\n\tziprange: \"O c&oacute;digo postal deve estar entre 902xx-xxxx e 905xx-xxxx\",\n\tcpfBR: \"Por favor, forne&ccedil;a um CPF v&aacute;lido.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_pt_PT.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: PT (Portuguese; português)\n * Region: PT (Portugal)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Campo de preenchimento obrigat&oacute;rio.\",\n\tremote: \"Por favor, corrija este campo.\",\n\temail: \"Por favor, introduza um endere&ccedil;o eletr&oacute;nico v&aacute;lido.\",\n\turl: \"Por favor, introduza um URL v&aacute;lido.\",\n\tdate: \"Por favor, introduza uma data v&aacute;lida.\",\n\tdateISO: \"Por favor, introduza uma data v&aacute;lida (ISO).\",\n\tnumber: \"Por favor, introduza um n&uacute;mero v&aacute;lido.\",\n\tdigits: \"Por favor, introduza apenas d&iacute;gitos.\",\n\tcreditcard: \"Por favor, introduza um n&uacute;mero de cart&atilde;o de cr&eacute;dito v&aacute;lido.\",\n\tequalTo: \"Por favor, introduza de novo o mesmo valor.\",\n\textension: \"Por favor, introduza um ficheiro com uma extens&atilde;o v&aacute;lida.\",\n\tmaxlength: $.validator.format( \"Por favor, n&atilde;o introduza mais do que {0} caracteres.\" ),\n\tminlength: $.validator.format( \"Por favor, introduza pelo menos {0} caracteres.\" ),\n\trangelength: $.validator.format( \"Por favor, introduza entre {0} e {1} caracteres.\" ),\n\trange: $.validator.format( \"Por favor, introduza um valor entre {0} e {1}.\" ),\n\tmax: $.validator.format( \"Por favor, introduza um valor menor ou igual a {0}.\" ),\n\tmin: $.validator.format( \"Por favor, introduza um valor maior ou igual a {0}.\" ),\n\tnifES: \"Por favor, introduza um NIF v&aacute;lido.\",\n\tnieES: \"Por favor, introduza um NIE v&aacute;lido.\",\n\tcifES: \"Por favor, introduza um CIF v&aacute;lido.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_ro.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: RO (Romanian, limba română)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Acest câmp este obligatoriu.\",\n\tremote: \"Te rugăm să completezi acest câmp.\",\n\temail: \"Te rugăm să introduci o adresă de email validă\",\n\turl: \"Te rugăm sa introduci o adresă URL validă.\",\n\tdate: \"Te rugăm să introduci o dată corectă.\",\n\tdateISO: \"Te rugăm să introduci o dată (ISO) corectă.\",\n\tnumber: \"Te rugăm să introduci un număr întreg valid.\",\n\tdigits: \"Te rugăm să introduci doar cifre.\",\n\tcreditcard: \"Te rugăm să introduci un numar de carte de credit valid.\",\n\tequalTo: \"Te rugăm să reintroduci valoarea.\",\n\textension: \"Te rugăm să introduci o valoare cu o extensie validă.\",\n\tmaxlength: $.validator.format( \"Te rugăm să nu introduci mai mult de {0} caractere.\" ),\n\tminlength: $.validator.format( \"Te rugăm să introduci cel puțin {0} caractere.\" ),\n\trangelength: $.validator.format( \"Te rugăm să introduci o valoare între {0} și {1} caractere.\" ),\n\trange: $.validator.format( \"Te rugăm să introduci o valoare între {0} și {1}.\" ),\n\tmax: $.validator.format( \"Te rugăm să introduci o valoare egal sau mai mică decât {0}.\" ),\n\tmin: $.validator.format( \"Te rugăm să introduci o valoare egal sau mai mare decât {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_ru.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: RU (Russian; русский язык)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Это поле необходимо заполнить.\",\n\tremote: \"Пожалуйста, введите правильное значение.\",\n\temail: \"Пожалуйста, введите корректный адрес электронной почты.\",\n\turl: \"Пожалуйста, введите корректный URL.\",\n\tdate: \"Пожалуйста, введите корректную дату.\",\n\tdateISO: \"Пожалуйста, введите корректную дату в формате ISO.\",\n\tnumber: \"Пожалуйста, введите число.\",\n\tdigits: \"Пожалуйста, вводите только цифры.\",\n\tcreditcard: \"Пожалуйста, введите правильный номер кредитной карты.\",\n\tequalTo: \"Пожалуйста, введите такое же значение ещё раз.\",\n\textension: \"Пожалуйста, выберите файл с правильным расширением.\",\n\tmaxlength: $.validator.format( \"Пожалуйста, введите не больше {0} символов.\" ),\n\tminlength: $.validator.format( \"Пожалуйста, введите не меньше {0} символов.\" ),\n\trangelength: $.validator.format( \"Пожалуйста, введите значение длиной от {0} до {1} символов.\" ),\n\trange: $.validator.format( \"Пожалуйста, введите число от {0} до {1}.\" ),\n\tmax: $.validator.format( \"Пожалуйста, введите число, меньшее или равное {0}.\" ),\n\tmin: $.validator.format( \"Пожалуйста, введите число, большее или равное {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_si.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: SI (Slovenian)\n */\n$.extend( $.validator.messages, {\n\trequired: \"To polje je obvezno.\",\n\tremote: \"Vpis v tem polju ni v pravi obliki.\",\n\temail: \"Prosimo, vnesite pravi email naslov.\",\n\turl: \"Prosimo, vnesite pravi URL.\",\n\tdate: \"Prosimo, vnesite pravi datum.\",\n\tdateISO: \"Prosimo, vnesite pravi datum (ISO).\",\n\tnumber: \"Prosimo, vnesite pravo številko.\",\n\tdigits: \"Prosimo, vnesite samo številke.\",\n\tcreditcard: \"Prosimo, vnesite pravo številko kreditne kartice.\",\n\tequalTo: \"Prosimo, ponovno vnesite enako vsebino.\",\n\textension: \"Prosimo, vnesite vsebino z pravo končnico.\",\n\tmaxlength: $.validator.format( \"Prosimo, da ne vnašate več kot {0} znakov.\" ),\n\tminlength: $.validator.format( \"Prosimo, vnesite vsaj {0} znakov.\" ),\n\trangelength: $.validator.format( \"Prosimo, vnesite od {0} do {1} znakov.\" ),\n\trange: $.validator.format( \"Prosimo, vnesite vrednost med {0} in {1}.\" ),\n\tmax: $.validator.format( \"Prosimo, vnesite vrednost manjšo ali enako {0}.\" ),\n\tmin: $.validator.format( \"Prosimo, vnesite vrednost večjo ali enako {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_sk.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: SK (Slovak; slovenčina, slovenský jazyk)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Povinné zadať.\",\n\tmaxlength: $.validator.format( \"Maximálne {0} znakov.\" ),\n\tminlength: $.validator.format( \"Minimálne {0} znakov.\" ),\n\trangelength: $.validator.format( \"Minimálne {0} a maximálne {1} znakov.\" ),\n\temail: \"E-mailová adresa musí byť platná.\",\n\turl: \"URL musí byť platná.\",\n\tdate: \"Musí byť dátum.\",\n\tnumber: \"Musí byť číslo.\",\n\tdigits: \"Môže obsahovať iba číslice.\",\n\tequalTo: \"Dve hodnoty sa musia rovnať.\",\n\trange: $.validator.format( \"Musí byť medzi {0} a {1}.\" ),\n\tmax: $.validator.format( \"Nemôže byť viac ako {0}.\" ),\n\tmin: $.validator.format( \"Nemôže byť menej ako {0}.\" ),\n\tcreditcard: \"Číslo platobnej karty musí byť platné.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_sl.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Language: SL (Slovenian; slovenski jezik)\n */\n$.extend( $.validator.messages, {\n\trequired: \"To polje je obvezno.\",\n\tremote: \"Prosimo popravite to polje.\",\n\temail: \"Prosimo vnesite veljaven email naslov.\",\n\turl: \"Prosimo vnesite veljaven URL naslov.\",\n\tdate: \"Prosimo vnesite veljaven datum.\",\n\tdateISO: \"Prosimo vnesite veljaven ISO datum.\",\n\tnumber: \"Prosimo vnesite veljavno število.\",\n\tdigits: \"Prosimo vnesite samo števila.\",\n\tcreditcard: \"Prosimo vnesite veljavno številko kreditne kartice.\",\n\tequalTo: \"Prosimo ponovno vnesite vrednost.\",\n\textension: \"Prosimo vnesite vrednost z veljavno končnico.\",\n\tmaxlength: $.validator.format( \"Prosimo vnesite največ {0} znakov.\" ),\n\tminlength: $.validator.format( \"Prosimo vnesite najmanj {0} znakov.\" ),\n\trangelength: $.validator.format( \"Prosimo vnesite najmanj {0} in največ {1} znakov.\" ),\n\trange: $.validator.format( \"Prosimo vnesite vrednost med {0} in {1}.\" ),\n\tmax: $.validator.format( \"Prosimo vnesite vrednost manjše ali enako {0}.\" ),\n\tmin: $.validator.format( \"Prosimo vnesite vrednost večje ali enako {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_sr.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: SR (Serbian; српски језик)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Поље је обавезно.\",\n\tremote: \"Средите ово поље.\",\n\temail: \"Унесите исправну и-мејл адресу.\",\n\turl: \"Унесите исправан URL.\",\n\tdate: \"Унесите исправан датум.\",\n\tdateISO: \"Унесите исправан датум (ISO).\",\n\tnumber: \"Унесите исправан број.\",\n\tdigits: \"Унесите само цифе.\",\n\tcreditcard: \"Унесите исправан број кредитне картице.\",\n\tequalTo: \"Унесите исту вредност поново.\",\n\textension: \"Унесите вредност са одговарајућом екстензијом.\",\n\tmaxlength: $.validator.format( \"Унесите мање од {0} карактера.\" ),\n\tminlength: $.validator.format( \"Унесите барем {0} карактера.\" ),\n\trangelength: $.validator.format( \"Унесите вредност дугачку између {0} и {1} карактера.\" ),\n\trange: $.validator.format( \"Унесите вредност између {0} и {1}.\" ),\n\tmax: $.validator.format( \"Унесите вредност мању или једнаку {0}.\" ),\n\tmin: $.validator.format( \"Унесите вредност већу или једнаку {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_sr_lat.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: SR (Serbian - Latin alphabet; srpski jezik - latinica)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Polje je obavezno.\",\n\tremote: \"Sredite ovo polje.\",\n\temail: \"Unesite ispravnu e-mail adresu\",\n\turl: \"Unesite ispravan URL.\",\n\tdate: \"Unesite ispravan datum.\",\n\tdateISO: \"Unesite ispravan datum (ISO).\",\n\tnumber: \"Unesite ispravan broj.\",\n\tdigits: \"Unesite samo cifre.\",\n\tcreditcard: \"Unesite ispravan broj kreditne kartice.\",\n\tequalTo: \"Unesite istu vrednost ponovo.\",\n\textension: \"Unesite vrednost sa odgovarajućom ekstenzijom.\",\n\tmaxlength: $.validator.format( \"Unesite manje od {0} karaktera.\" ),\n\tminlength: $.validator.format( \"Unesite barem {0} karaktera.\" ),\n\trangelength: $.validator.format( \"Unesite vrednost dugačku između {0} i {1} karaktera.\" ),\n\trange: $.validator.format( \"Unesite vrednost između {0} i {1}.\" ),\n\tmax: $.validator.format( \"Unesite vrednost manju ili jednaku {0}.\" ),\n\tmin: $.validator.format( \"Unesite vrednost veću ili jednaku {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_sv.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: SV (Swedish; Svenska)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Detta f&auml;lt &auml;r obligatoriskt.\",\n\tmaxlength: $.validator.format( \"Du f&aring;r ange h&ouml;gst {0} tecken.\" ),\n\tminlength: $.validator.format( \"Du m&aring;ste ange minst {0} tecken.\" ),\n\trangelength: $.validator.format( \"Ange minst {0} och max {1} tecken.\" ),\n\temail: \"Ange en korrekt e-postadress.\",\n\turl: \"Ange en korrekt URL.\",\n\tdate: \"Ange ett korrekt datum.\",\n\tdateISO: \"Ange ett korrekt datum (&Aring;&Aring;&Aring;&Aring;-MM-DD).\",\n\tnumber: \"Ange ett korrekt nummer.\",\n\tdigits: \"Ange endast siffror.\",\n\tequalTo: \"Ange samma v&auml;rde igen.\",\n\trange: $.validator.format( \"Ange ett v&auml;rde mellan {0} och {1}.\" ),\n\tmax: $.validator.format( \"Ange ett v&auml;rde som &auml;r mindre eller lika med {0}.\" ),\n\tmin: $.validator.format( \"Ange ett v&auml;rde som &auml;r st&ouml;rre eller lika med {0}.\" ),\n\tcreditcard: \"Ange ett korrekt kreditkortsnummer.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_th.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: TH (Thai; ไทย)\n */\n$.extend( $.validator.messages, {\n\trequired: \"โปรดระบุ\",\n\tremote: \"โปรดแก้ไขให้ถูกต้อง\",\n\temail: \"โปรดระบุที่อยู่อีเมล์ที่ถูกต้อง\",\n\turl: \"โปรดระบุ URL ที่ถูกต้อง\",\n\tdate: \"โปรดระบุวันที่ ที่ถูกต้อง\",\n\tdateISO: \"โปรดระบุวันที่ ที่ถูกต้อง (ระบบ ISO).\",\n\tnumber: \"โปรดระบุทศนิยมที่ถูกต้อง\",\n\tdigits: \"โปรดระบุจำนวนเต็มที่ถูกต้อง\",\n\tcreditcard: \"โปรดระบุรหัสบัตรเครดิตที่ถูกต้อง\",\n\tequalTo: \"โปรดระบุค่าเดิมอีกครั้ง\",\n\textension: \"โปรดระบุค่าที่มีส่วนขยายที่ถูกต้อง\",\n\tmaxlength: $.validator.format( \"โปรดอย่าระบุค่าที่ยาวกว่า {0} อักขระ\" ),\n\tminlength: $.validator.format( \"โปรดอย่าระบุค่าที่สั้นกว่า {0} อักขระ\" ),\n\trangelength: $.validator.format( \"โปรดอย่าระบุค่าความยาวระหว่าง {0} ถึง {1} อักขระ\" ),\n\trange: $.validator.format( \"โปรดระบุค่าระหว่าง {0} และ {1}\" ),\n\tmax: $.validator.format( \"โปรดระบุค่าน้อยกว่าหรือเท่ากับ {0}\" ),\n\tmin: $.validator.format( \"โปรดระบุค่ามากกว่าหรือเท่ากับ {0}\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_tj.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: TJ (Tajikistan; Забони тоҷикӣ)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Ворид кардани ин филд маҷбури аст.\",\n\tremote: \"Илтимос, маълумоти саҳеҳ ворид кунед.\",\n\temail: \"Илтимос, почтаи электронии саҳеҳ ворид кунед.\",\n\turl: \"Илтимос, URL адреси саҳеҳ ворид кунед.\",\n\tdate: \"Илтимос, таърихи саҳеҳ ворид кунед.\",\n\tdateISO: \"Илтимос, таърихи саҳеҳи (ISO)ӣ ворид кунед.\",\n\tnumber: \"Илтимос, рақамҳои саҳеҳ ворид кунед.\",\n\tdigits: \"Илтимос, танҳо рақам ворид кунед.\",\n\tcreditcard: \"Илтимос, кредит карди саҳеҳ ворид кунед.\",\n\tequalTo: \"Илтимос, миқдори баробар ворид кунед.\",\n\textension: \"Илтимос, қофияи файлро дуруст интихоб кунед\",\n\tmaxlength: $.validator.format( \"Илтимос, бештар аз {0} рамз ворид накунед.\" ),\n\tminlength: $.validator.format( \"Илтимос, камтар аз {0} рамз ворид накунед.\" ),\n\trangelength: $.validator.format( \"Илтимос, камтар аз {0} ва зиёда аз {1} рамз ворид кунед.\" ),\n\trange: $.validator.format( \"Илтимос, аз {0} то {1} рақам зиёд ворид кунед.\" ),\n\tmax: $.validator.format( \"Илтимос, бештар аз {0} рақам ворид накунед.\" ),\n\tmin: $.validator.format( \"Илтимос, камтар аз {0} рақам ворид накунед.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_tr.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: TR (Turkish; Türkçe)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Bu alanın doldurulması zorunludur.\",\n\tremote: \"Lütfen bu alanı düzeltin.\",\n\temail: \"Lütfen geçerli bir e-posta adresi giriniz.\",\n\turl: \"Lütfen geçerli bir web adresi (URL) giriniz.\",\n\tdate: \"Lütfen geçerli bir tarih giriniz.\",\n\tdateISO: \"Lütfen geçerli bir tarih giriniz(ISO formatında)\",\n\tnumber: \"Lütfen geçerli bir sayı giriniz.\",\n\tdigits: \"Lütfen sadece sayısal karakterler giriniz.\",\n\tcreditcard: \"Lütfen geçerli bir kredi kartı giriniz.\",\n\tequalTo: \"Lütfen aynı değeri tekrar giriniz.\",\n\textension: \"Lütfen geçerli uzantıya sahip bir değer giriniz.\",\n\tmaxlength: $.validator.format( \"Lütfen en fazla {0} karakter uzunluğunda bir değer giriniz.\" ),\n\tminlength: $.validator.format( \"Lütfen en az {0} karakter uzunluğunda bir değer giriniz.\" ),\n\trangelength: $.validator.format( \"Lütfen en az {0} ve en fazla {1} uzunluğunda bir değer giriniz.\" ),\n\trange: $.validator.format( \"Lütfen {0} ile {1} arasında bir değer giriniz.\" ),\n\tmax: $.validator.format( \"Lütfen {0} değerine eşit ya da daha küçük bir değer giriniz.\" ),\n\tmin: $.validator.format( \"Lütfen {0} değerine eşit ya da daha büyük bir değer giriniz.\" ),\n\trequire_from_group: \"Lütfen bu alanların en az {0} tanesini doldurunuz.\"\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_uk.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: UK (Ukrainian; українська мова)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Це поле необхідно заповнити.\",\n\tremote: \"Будь ласка, введіть правильне значення.\",\n\temail: \"Будь ласка, введіть коректну адресу електронної пошти.\",\n\turl: \"Будь ласка, введіть коректний URL.\",\n\tdate: \"Будь ласка, введіть коректну дату.\",\n\tdateISO: \"Будь ласка, введіть коректну дату у форматі ISO.\",\n\tnumber: \"Будь ласка, введіть число.\",\n\tdigits: \"Вводите потрібно лише цифри.\",\n\tcreditcard: \"Будь ласка, введіть правильний номер кредитної карти.\",\n\tequalTo: \"Будь ласка, введіть таке ж значення ще раз.\",\n\textension: \"Будь ласка, виберіть файл з правильним розширенням.\",\n\tmaxlength: $.validator.format( \"Будь ласка, введіть не більше {0} символів.\" ),\n\tminlength: $.validator.format( \"Будь ласка, введіть не менше {0} символів.\" ),\n\trangelength: $.validator.format( \"Будь ласка, введіть значення довжиною від {0} до {1} символів.\" ),\n\trange: $.validator.format( \"Будь ласка, введіть число від {0} до {1}.\" ),\n\tmax: $.validator.format( \"Будь ласка, введіть число, менше або рівно {0}.\" ),\n\tmin: $.validator.format( \"Будь ласка, введіть число, більше або рівно {0}.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_vi.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: VI (Vietnamese; Tiếng Việt)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Hãy nhập.\",\n\tremote: \"Hãy sửa cho đúng.\",\n\temail: \"Hãy nhập email.\",\n\turl: \"Hãy nhập URL.\",\n\tdate: \"Hãy nhập ngày.\",\n\tdateISO: \"Hãy nhập ngày (ISO).\",\n\tnumber: \"Hãy nhập số.\",\n\tdigits: \"Hãy nhập chữ số.\",\n\tcreditcard: \"Hãy nhập số thẻ tín dụng.\",\n\tequalTo: \"Hãy nhập thêm lần nữa.\",\n\textension: \"Phần mở rộng không đúng.\",\n\tmaxlength: $.validator.format( \"Hãy nhập từ {0} kí tự trở xuống.\" ),\n\tminlength: $.validator.format( \"Hãy nhập từ {0} kí tự trở lên.\" ),\n\trangelength: $.validator.format( \"Hãy nhập từ {0} đến {1} kí tự.\" ),\n\trange: $.validator.format( \"Hãy nhập từ {0} đến {1}.\" ),\n\tmax: $.validator.format( \"Hãy nhập từ {0} trở xuống.\" ),\n\tmin: $.validator.format( \"Hãy nhập từ {1} trở lên.\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_zh.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: ZH (Chinese, 中文 (Zhōngwén), 汉语, 漢語)\n */\n$.extend( $.validator.messages, {\n\trequired: \"这是必填字段\",\n\tremote: \"请修正此字段\",\n\temail: \"请输入有效的电子邮件地址\",\n\turl: \"请输入有效的网址\",\n\tdate: \"请输入有效的日期\",\n\tdateISO: \"请输入有效的日期 (YYYY-MM-DD)\",\n\tnumber: \"请输入有效的数字\",\n\tdigits: \"只能输入数字\",\n\tcreditcard: \"请输入有效的信用卡号码\",\n\tequalTo: \"你的输入不相同\",\n\textension: \"请输入有效的后缀\",\n\tmaxlength: $.validator.format( \"最多可以输入 {0} 个字符\" ),\n\tminlength: $.validator.format( \"最少要输入 {0} 个字符\" ),\n\trangelength: $.validator.format( \"请输入长度在 {0} 到 {1} 之间的字符串\" ),\n\trange: $.validator.format( \"请输入范围在 {0} 到 {1} 之间的数值\" ),\n\tmax: $.validator.format( \"请输入不大于 {0} 的数值\" ),\n\tmin: $.validator.format( \"请输入不小于 {0} 的数值\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/messages_zh_TW.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: ZH (Chinese; 中文 (Zhōngwén), 汉语, 漢語)\n * Region: TW (Taiwan)\n */\n$.extend( $.validator.messages, {\n\trequired: \"必須填寫\",\n\tremote: \"請修正此欄位\",\n\temail: \"請輸入有效的電子郵件\",\n\turl: \"請輸入有效的網址\",\n\tdate: \"請輸入有效的日期\",\n\tdateISO: \"請輸入有效的日期 (YYYY-MM-DD)\",\n\tnumber: \"請輸入正確的數值\",\n\tdigits: \"只可輸入數字\",\n\tcreditcard: \"請輸入有效的信用卡號碼\",\n\tequalTo: \"請重複輸入一次\",\n\textension: \"請輸入有效的後綴\",\n\tmaxlength: $.validator.format( \"最多 {0} 個字\" ),\n\tminlength: $.validator.format( \"最少 {0} 個字\" ),\n\trangelength: $.validator.format( \"請輸入長度為 {0} 至 {1} 之間的字串\" ),\n\trange: $.validator.format( \"請輸入 {0} 至 {1} 之間的數值\" ),\n\tmax: $.validator.format( \"請輸入不大於 {0} 的數值\" ),\n\tmin: $.validator.format( \"請輸入不小於 {0} 的數值\" )\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/methods_de.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Localized default methods for the jQuery validation plugin.\n * Locale: DE\n */\n$.extend( $.validator.methods, {\n\tdate: function( value, element ) {\n\t\treturn this.optional( element ) || /^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.test( value );\n\t},\n\tnumber: function( value, element ) {\n\t\treturn this.optional( element ) || /^-?(?:\\d+|\\d{1,3}(?:\\.\\d{3})+)(?:,\\d+)?$/.test( value );\n\t}\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/methods_es_CL.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Localized default methods for the jQuery validation plugin.\n * Locale: ES_CL\n */\n$.extend( $.validator.methods, {\n\tdate: function( value, element ) {\n\t\treturn this.optional( element ) || /^\\d\\d?\\-\\d\\d?\\-\\d\\d\\d?\\d?$/.test( value );\n\t},\n\tnumber: function( value, element ) {\n\t\treturn this.optional( element ) || /^-?(?:\\d+|\\d{1,3}(?:\\.\\d{3})+)(?:,\\d+)?$/.test( value );\n\t}\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/methods_fi.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Localized default methods for the jQuery validation plugin.\n * Locale: FI\n */\n$.extend( $.validator.methods, {\n\tdate: function( value, element ) {\n\t\treturn this.optional( element ) || /^\\d{1,2}\\.\\d{1,2}\\.\\d{4}$/.test( value );\n\t},\n\tnumber: function( value, element ) {\n\t\treturn this.optional( element ) || /^-?(?:\\d+)(?:,\\d+)?$/.test( value );\n\t}\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/methods_nl.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Localized default methods for the jQuery validation plugin.\n * Locale: NL\n */\n$.extend( $.validator.methods, {\n\tdate: function( value, element ) {\n\t\treturn this.optional( element ) || /^\\d\\d?[\\.\\/\\-]\\d\\d?[\\.\\/\\-]\\d\\d\\d?\\d?$/.test( value );\n\t}\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jqueryvalidation/localization/methods_pt.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Localized default methods for the jQuery validation plugin.\n * Locale: PT_BR\n */\n$.extend( $.validator.methods, {\n\tdate: function( value, element ) {\n\t\treturn this.optional( element ) || /^\\d\\d?\\/\\d\\d?\\/\\d\\d\\d?\\d?$/.test( value );\n\t}\n} );\n\n}));"
  },
  {
    "path": "public/adminlte/plugins/jvectormap/jquery-jvectormap-1.2.2.css",
    "content": ".jvectormap-label {\n    position: absolute;\n    display: none;\n    border: solid 1px #CDCDCD;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    background: #292929;\n    color: white;\n    font-size: 10px!important;\n    padding: 3px;\n    z-index: 9999;\n}\n\n.jvectormap-zoomin, .jvectormap-zoomout {\n    position: absolute;\n    top: 100%;\n    margin-top: -25px;\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n    border-radius: 2px;\n    background: #d2d6de;//rgba(0,0,0,0.4);\n    padding: 5px;\n    color: #444;\n    cursor: pointer;\n    line-height: 10px;\n    text-align: center;\n    font-weight: bold;\n    box-shadow: 0 1px 2px rgba(0,0,0,0.2);\n}\n\n.jvectormap-zoomin {\n    left: 100%;\n    margin-left: -50px;\n}\n\n.jvectormap-zoomout {\n    left: 100%;\n    margin-left: -30px;\n}"
  },
  {
    "path": "public/adminlte/plugins/jvectormap/jquery-jvectormap-usa-en.js",
    "content": "jQuery.fn.vectorMap('addMap', 'us_aea',{\"insets\": [{\"width\": 220, \"top\": 440, \"height\": 172.3954126857679, \"bbox\": [{\"y\": -8441276.54251503, \"x\": -4774054.664881943}, {\"y\": -6227982.667213126, \"x\": -1949590.5739843722}], \"left\": 0}, {\"width\": 80, \"top\": 460, \"height\": 151.48337407091987, \"bbox\": [{\"y\": -4196208.652471859, \"x\": -5906305.806252358}, {\"y\": -3657293.3059425415, \"x\": -5621698.812337889}], \"left\": 245}, {\"width\": 900, \"top\": 0, \"height\": 550.1122047105795, \"bbox\": [{\"y\": -5490816.561605522, \"x\": -2029882.6485830692}, {\"y\": -2690009.0242363815, \"x\": 2552322.14899711}], \"left\": 0}], \"paths\": {\"US-VA\": {\"path\": \"M682.42,289.98l1.61,-0.93l1.65,-0.48l1.12,-0.95l3.57,-1.69l0.74,-2.33l0.82,-0.19l2.32,-1.53l0.05,-1.81l2.04,-1.86l-0.13,-1.58l0.26,-0.41l5.0,-4.09l4.76,-6.0l0.09,0.63l0.96,0.54l0.33,1.37l1.32,0.74l0.71,0.81l1.46,0.09l2.09,1.13l1.41,-0.09l0.79,-0.41l0.76,-1.22l1.17,-0.57l0.53,-1.38l2.72,1.49l1.42,-1.1l2.25,-0.99l0.76,0.06l1.08,-0.97l0.33,-0.82l-0.48,-0.96l0.23,-0.42l1.9,0.58l3.26,-2.62l0.3,-0.1l0.51,0.73l0.66,-0.07l2.38,-2.34l0.17,-0.85l-0.49,-0.51l0.99,-1.12l0.1,-0.6l-0.28,-0.51l-1.0,-0.46l0.71,-3.03l2.6,-4.8l0.55,-2.15l-0.01,-1.91l1.61,-2.55l-0.22,-0.94l0.24,-0.84l0.5,-0.48l0.39,-1.7l-0.0,-3.18l1.22,0.19l1.18,1.73l3.8,0.43l0.59,-0.28l1.05,-2.52l0.2,-2.36l0.71,-1.05l-0.04,-1.61l0.76,-2.3l1.78,0.75l0.65,-0.17l1.3,-3.3l0.57,0.05l0.59,-0.39l0.52,-1.2l0.81,-0.68l0.44,-1.8l1.38,-2.43l-0.35,-2.57l0.54,-1.76l-0.3,-2.01l9.18,4.57l0.59,-0.29l0.63,-4.0l2.6,-0.07l0.63,0.57l1.05,0.23l-0.5,1.74l0.6,0.88l1.61,0.85l2.52,-0.04l1.03,1.18l1.49,0.13l2.24,1.73l-0.0,1.31l0.44,1.27l-1.67,0.96l-0.12,0.65l-0.64,0.14l-0.27,0.45l-0.47,5.03l-0.36,0.13l-0.04,0.48l1.17,0.97l-0.29,0.11l-0.04,0.76l2.03,-0.01l2.41,-1.45l0.49,-0.72l0.34,0.74l-0.52,0.63l1.21,0.88l0.69,0.13l0.42,1.11l1.62,0.52l1.94,-0.2l0.84,0.43l0.82,-0.65l0.89,0.02l0.23,0.6l1.33,0.48l0.46,1.1l1.12,-0.05l0.02,0.3l1.18,0.42l2.84,0.65l0.4,1.01l-0.85,-0.41l-0.57,0.45l0.89,1.74l-0.35,0.57l0.62,0.79l-0.43,0.89l0.24,0.59l-1.36,-0.36l-0.59,-0.72l-0.67,0.18l-0.1,0.43l-2.44,-2.29l-0.56,0.05l-0.37,-0.56l-0.52,0.32l-1.47,-1.32l-1.19,-0.38l-0.43,-0.64l-0.9,-0.39l-0.7,-1.29l-0.77,-0.64l-1.34,-0.12l-1.11,-0.81l-1.17,0.05l-0.39,0.52l0.47,0.71l1.1,-0.01l0.63,0.68l1.33,0.07l0.59,0.42l0.38,1.52l2.73,1.56l1.86,1.88l1.95,0.61l1.59,2.1l0.98,0.24l1.35,-0.45l1.28,0.47l-0.61,0.7l0.3,0.49l2.03,0.34l0.26,0.72l0.47,0.12l0.31,1.96l-0.57,-0.83l-0.52,-0.22l-0.39,0.21l-1.13,-1.0l-0.58,0.3l0.1,0.82l-0.31,0.68l0.7,0.7l-0.18,0.59l0.51,0.28l0.43,-0.14l0.28,0.35l-1.39,0.72l-6.15,-4.74l-0.58,0.11l-0.19,0.81l0.24,0.54l2.28,1.53l2.09,2.14l2.77,1.18l1.26,-0.68l0.45,1.05l1.27,0.26l-0.44,0.67l0.29,0.56l0.93,-0.19l-0.0,1.24l-0.92,0.41l-0.57,0.73l-0.64,-0.88l-3.14,-1.26l-0.42,-1.53l-0.59,-0.59l-0.87,-0.12l-1.2,0.67l-1.71,-0.44l-0.36,-1.15l-0.71,-0.05l-0.05,1.31l-0.33,0.41l-1.42,-1.32l-0.51,0.09l-0.49,0.57l-0.64,-0.4l-0.99,0.45l-2.23,-0.1l-0.37,0.94l0.34,0.46l1.9,0.22l1.4,-0.31l0.85,0.24l0.56,-0.69l0.63,0.88l1.34,0.43l1.95,-0.31l0.82,0.72l0.84,0.12l0.51,-0.55l0.77,2.44l1.35,0.13l0.23,0.43l1.68,0.71l0.45,0.68l-0.57,1.03l0.56,0.44l1.72,-1.32l0.88,-0.02l0.83,0.65l0.8,-0.26l-0.61,-0.9l0.0,-0.82l-0.46,-0.34l3.99,0.08l0.93,-0.73l2.07,3.53l-0.4,0.7l0.65,3.09l-1.19,-0.58l-0.02,0.88l-30.94,7.83l-37.18,8.41l-19.51,3.35l-11.78,1.24l-0.82,0.62l-28.2,5.01ZM781.17,223.48l0.11,0.08l-0.08,0.06l0.0,-0.03l-0.03,-0.11ZM808.02,244.55l0.53,-1.15l-0.62,-0.62l0.58,-0.97l-0.39,-0.71l-0.03,-0.49l0.44,-0.35l-0.17,-0.73l0.62,-0.3l0.23,-0.6l0.14,-2.33l1.01,-0.39l-0.12,-0.9l0.48,-0.14l-0.26,-1.53l-0.79,-0.4l0.87,-0.57l0.1,-0.96l2.64,-1.01l0.31,2.47l-0.97,2.12l-2.32,7.36l-0.58,1.0l0.17,1.12l-0.48,0.31l-0.33,1.09l0.25,4.27l-1.1,-1.81l0.23,-0.94l-0.33,-1.57l0.28,-0.97l-0.38,-0.29Z\", \"name\": \"Virginia\"}, \"US-PA\": {\"path\": \"M716.45,159.95l0.63,-0.19l4.3,-3.73l1.12,5.19l0.48,0.31l34.84,-7.93l34.27,-8.64l1.42,0.58l0.71,1.39l0.63,0.13l0.77,-0.33l1.24,0.59l0.14,0.85l0.81,0.41l-0.16,0.58l0.89,2.69l1.9,2.07l2.12,0.75l2.2,-0.2l0.72,0.79l-0.89,0.87l-0.73,1.48l-0.17,2.25l-1.41,3.35l-1.37,1.58l0.04,0.79l1.79,1.72l-0.31,1.65l-0.84,0.43l-0.22,0.66l0.14,1.48l1.04,2.87l0.52,0.25l1.2,-0.18l1.18,2.39l0.95,0.58l0.66,-0.26l0.6,0.9l4.23,2.75l0.12,0.41l-1.29,0.93l-3.71,4.22l-0.23,0.75l0.17,0.9l-1.36,1.13l-0.84,0.15l-1.33,1.08l-0.31,0.66l-1.72,-0.12l-2.03,0.84l-1.15,1.37l-0.41,1.39l-37.22,9.21l-39.1,8.66l-10.03,-48.2l1.92,-1.22l3.07,-3.04Z\", \"name\": \"Pennsylvania\"}, \"US-TN\": {\"path\": \"M571.74,341.02l0.86,-0.84l0.29,-1.37l1.0,0.04l0.65,-0.79l-0.99,-4.89l1.41,-1.93l0.06,-1.32l1.18,-0.46l0.36,-0.48l-0.63,-1.31l0.57,-1.21l-0.89,-1.33l2.55,-1.57l1.09,-1.13l-0.14,-0.84l-0.85,-0.53l0.14,-0.19l0.34,-0.16l0.85,0.37l0.46,-0.33l-0.27,-1.31l-0.85,-0.9l0.06,-0.71l0.51,-1.43l1.0,-1.11l-1.35,-2.06l1.37,-0.21l0.61,-0.55l-0.13,-0.64l-1.17,-0.82l0.82,-0.15l0.58,-0.54l0.13,-0.69l-0.58,-1.38l0.02,-0.36l0.37,0.53l0.47,0.08l1.18,-1.15l23.66,-2.81l0.35,-0.41l-0.1,-1.34l-0.84,-2.39l2.98,-0.08l0.82,0.58l22.78,-3.54l7.64,-0.46l7.5,-0.86l8.82,-1.42l24.01,-3.09l1.11,-0.6l29.29,-5.2l0.73,-0.6l3.56,-0.54l-0.4,1.44l0.43,0.85l-0.4,2.0l0.36,0.82l-1.15,-0.03l-1.71,1.79l-1.21,3.89l-0.55,0.7l-0.56,0.08l-0.63,-0.74l-1.44,-0.02l-2.66,1.73l-1.42,2.73l-0.96,0.89l-0.34,-0.34l-0.13,-1.05l-0.73,-0.54l-0.53,0.15l-2.3,1.81l-0.29,1.32l-0.93,-0.24l-0.9,0.48l-0.16,0.77l0.32,0.73l-0.85,2.18l-1.28,0.06l-1.75,1.14l-1.89,2.3l-0.78,0.27l-2.28,2.46l-4.04,0.78l-2.58,1.7l-0.49,1.09l-0.88,0.55l-0.55,0.81l-0.18,2.88l-0.35,0.6l-1.65,0.52l-0.89,-0.16l-1.06,1.14l0.21,5.24l-20.21,3.32l-21.61,3.04l-25.56,2.95l-0.34,0.31l-7.39,0.9l-28.72,3.17Z\", \"name\": \"Tennessee\"}, \"US-WV\": {\"path\": \"M693.03,248.37l3.95,-1.54l0.35,-0.71l0.12,-2.77l1.15,-0.22l0.4,-0.61l-0.57,-2.49l-0.61,-1.24l0.49,-0.64l0.36,-2.77l0.68,-1.66l0.45,-0.39l1.24,0.55l0.41,0.71l-0.14,1.13l0.71,0.46l0.78,-0.44l0.48,-1.42l0.49,0.21l0.57,-0.2l0.2,-0.44l-0.63,-2.09l-0.75,-0.55l0.81,-0.79l-0.26,-1.71l0.74,-2.0l1.65,-0.51l0.17,-1.6l1.02,-1.42l0.43,-0.08l0.65,0.79l0.67,0.19l2.28,-1.59l1.5,-1.64l0.79,-1.83l2.45,-2.67l0.37,-2.41l-0.73,-1.0l0.71,-2.33l-0.25,-0.76l0.59,-0.58l-0.27,-3.43l0.47,-3.93l0.53,-0.8l0.08,-1.11l-0.38,-1.21l-0.39,-0.33l-0.04,-2.0l-1.57,-1.9l0.44,-0.54l0.85,-0.1l0.3,-0.33l4.03,19.33l0.47,0.31l16.59,-3.55l2.17,10.68l0.5,0.37l2.06,-2.5l0.97,-0.56l0.34,-1.03l1.63,-1.99l0.25,-1.05l0.52,-0.4l1.19,0.45l0.74,-0.32l1.32,-2.6l0.6,-0.46l-0.04,-0.85l0.42,0.59l1.81,0.52l3.2,-0.57l0.78,-0.86l0.08,-1.46l2.0,-0.74l1.02,-1.69l0.67,-0.1l3.16,1.5l1.8,-0.71l-0.45,1.02l0.56,0.92l1.27,0.42l0.09,0.96l1.13,0.43l0.09,1.2l0.33,0.42l-0.58,3.64l-9.0,-4.48l-0.64,0.24l-0.31,1.14l0.38,1.61l-0.52,1.62l0.41,2.28l-1.36,2.4l-0.42,1.76l-0.72,0.53l-0.42,1.11l-0.27,0.21l-0.61,-0.23l-0.37,0.33l-1.25,3.28l-1.84,-0.78l-0.64,0.25l-0.94,2.77l0.08,1.46l-0.73,1.14l-0.19,2.33l-0.89,2.2l-3.25,-0.36l-1.44,-1.76l-1.71,-0.24l-0.5,0.41l-0.26,2.17l0.19,1.3l-0.32,1.45l-0.49,0.45l-0.31,1.04l0.23,0.92l-1.58,2.44l-0.04,2.1l-0.52,2.0l-2.58,4.73l-0.75,3.16l0.14,0.76l1.13,0.55l-1.08,1.38l0.06,0.6l0.45,0.4l-2.16,2.13l-0.55,-0.7l-0.84,0.15l-3.12,2.53l-1.03,-0.56l-1.32,0.26l-0.44,0.91l0.45,1.17l-0.91,0.91l-0.73,-0.05l-2.27,1.0l-1.21,0.96l-2.18,-1.36l-0.73,-0.01l-0.82,1.58l-1.1,0.49l-1.22,1.46l-1.08,0.08l-1.98,-1.09l-1.3,-0.01l-0.61,-0.74l-1.19,-0.6l-0.31,-1.33l-0.89,-0.55l0.36,-0.67l-0.3,-0.81l-0.85,-0.37l-0.84,0.25l-1.33,-0.17l-1.26,-1.19l-2.06,-0.79l-0.76,-1.43l-1.58,-1.24l-0.7,-1.49l-1.0,-0.6l-0.12,-1.09l-1.38,-0.95l-2.0,-2.27l0.71,-2.03l-0.25,-1.62l-0.66,-1.46Z\", \"name\": \"West Virginia\"}, \"US-NV\": {\"path\": \"M139.46,329.14l-12.69,-16.93l-36.58,-51.09l-25.34,-34.51l13.7,-64.18l46.88,9.24l46.98,7.74l-18.71,125.81l-0.9,1.16l-0.99,2.19l-0.44,0.17l-1.34,-0.22l-0.98,-2.24l-0.7,-0.63l-1.41,0.22l-1.95,-1.02l-1.6,0.23l-1.78,0.96l-0.76,2.48l0.88,2.59l-0.6,0.97l-0.24,1.3l0.38,3.12l-0.76,2.54l0.77,3.71l-0.13,3.07l-0.3,1.07l-1.04,0.31l0.2,1.31l-0.52,0.62Z\", \"name\": \"Nevada\"}, \"US-TX\": {\"path\": \"M276.24,412.51l33.07,1.98l32.79,1.35l0.41,-0.39l3.6,-98.69l25.86,0.61l26.29,0.22l0.05,42.08l0.44,0.4l1.02,-0.13l0.78,0.28l3.74,3.82l1.66,0.21l0.88,-0.58l2.49,0.64l0.6,-0.68l0.11,-1.05l0.6,0.76l0.92,0.22l0.38,0.93l0.77,0.78l-0.01,1.64l0.52,0.83l2.85,0.42l1.25,-0.2l1.38,0.89l2.78,0.69l1.82,-0.56l0.62,0.1l1.89,1.8l1.4,-0.11l1.25,-1.43l2.43,0.26l1.67,-0.46l0.1,2.28l0.91,0.67l1.62,0.4l-0.04,2.08l1.56,0.79l1.82,-0.66l1.57,-1.67l1.02,-0.65l0.41,0.19l0.45,1.64l2.01,0.2l0.24,1.05l0.72,0.48l1.47,-0.21l0.88,-0.93l0.39,0.33l0.59,-0.08l0.61,-0.99l0.26,0.41l-0.45,1.23l0.14,0.76l0.67,1.14l0.78,0.42l0.57,-0.04l0.6,-0.5l0.68,-2.36l0.91,-0.65l0.35,-1.54l0.57,-0.14l0.4,0.14l0.29,0.99l0.57,0.64l1.21,0.02l0.83,0.5l1.25,-0.2l0.68,-1.34l0.48,0.15l-0.13,0.7l0.49,0.69l1.21,0.45l0.49,0.72l1.52,-0.05l1.49,1.74l0.52,0.02l0.63,-0.62l0.08,-0.71l1.49,-0.1l0.93,-1.43l1.88,-0.41l1.66,-1.13l1.52,0.83l1.51,-0.22l0.29,-0.83l2.29,-0.73l0.52,-0.55l0.5,0.32l0.38,0.88l1.82,0.42l1.69,-0.06l1.86,-1.14l0.41,-1.05l1.06,0.31l2.24,1.56l1.16,0.17l1.79,2.08l2.14,0.41l1.04,0.92l0.76,-0.11l2.48,0.85l1.04,0.04l0.37,0.79l1.38,0.97l1.45,-0.12l0.39,-0.72l0.8,0.36l0.88,-0.4l0.92,0.35l0.76,-0.15l0.64,0.36l2.22,34.02l1.51,1.67l1.3,0.82l1.25,1.87l0.57,1.63l-0.1,2.64l1.0,1.21l0.85,0.4l-0.12,0.85l0.75,0.54l0.28,0.87l0.65,0.7l-0.19,1.17l1.0,1.02l0.59,1.63l0.5,0.34l0.55,-0.1l-0.16,1.71l0.81,1.22l-0.64,0.25l-0.35,0.68l0.77,1.27l-0.55,0.89l0.19,1.39l-0.75,2.69l-0.74,0.85l-0.36,1.54l-0.79,1.13l0.64,2.0l-0.83,2.28l0.17,1.07l0.83,1.2l-0.19,1.01l0.49,1.6l-0.24,1.41l-1.18,1.78l-1.18,0.4l-1.16,2.72l-0.03,2.1l1.39,1.67l-3.43,0.08l-7.37,3.78l-0.02,-0.43l-0.69,-0.24l-0.23,0.23l-0.78,-0.43l-3.38,1.13l0.65,-1.31l0.35,-2.04l-0.34,-1.36l-0.8,-0.78l-1.79,0.16l-1.18,2.58l-0.42,0.15l-0.36,-0.65l-2.38,-1.23l-0.4,0.31l-0.18,0.82l0.23,0.45l1.07,0.38l-0.3,0.82l0.54,0.81l-0.47,0.64l0.04,0.99l1.48,0.76l-0.44,0.47l0.5,1.12l0.91,0.23l0.28,0.37l-0.4,1.25l-0.45,-0.12l-0.97,0.81l-1.72,2.25l-1.18,-0.4l-0.49,0.12l0.32,1.0l0.08,2.54l-1.85,1.49l-1.91,2.11l-0.96,0.37l-4.1,2.9l-3.3,0.44l-2.54,1.07l-0.2,1.12l-0.75,-0.34l-2.04,0.89l-0.33,-0.34l-1.11,0.18l0.43,-0.87l-0.52,-0.6l-1.43,0.22l-1.22,1.08l-0.6,-0.62l-0.11,-1.2l-1.38,-0.81l-0.5,0.44l0.65,1.44l0.01,1.12l-0.71,0.09l-0.54,-0.44l-0.75,-0.0l-0.55,-1.34l-1.46,-0.37l-0.58,0.39l0.04,0.54l0.94,1.7l0.03,1.23l0.58,0.37l0.37,-0.16l1.13,0.78l-0.75,0.37l-0.12,0.9l0.7,0.23l1.08,-0.55l0.96,0.6l-4.27,2.42l-0.57,-0.13l-0.37,-1.44l-0.5,-0.19l-1.13,-1.47l-0.48,-0.03l-1.05,1.99l1.19,1.61l-0.31,1.04l0.33,0.85l-1.66,1.79l-0.37,0.2l0.37,-0.63l-0.18,-0.72l0.25,-0.73l-0.46,-0.67l-0.52,0.17l-0.71,1.1l0.26,0.72l-0.39,0.95l-0.07,-1.13l-0.52,-0.55l-1.95,1.29l-0.78,-0.33l-0.69,0.51l0.07,0.75l-0.81,0.99l0.02,0.49l1.25,0.63l0.03,0.56l0.78,0.29l0.7,-1.41l0.86,-0.41l0.01,0.62l-2.82,4.36l-1.23,-1.0l-1.36,0.39l-0.32,-0.34l-2.4,0.39l-0.46,-0.31l-0.65,0.16l-0.18,0.58l0.41,0.61l0.55,0.38l1.53,0.03l0.54,1.55l2.07,1.03l-2.7,7.63l-0.2,0.1l-0.39,-0.54l-0.33,0.1l0.18,-0.75l-0.57,-0.43l-2.35,1.95l-1.67,-2.31l-1.23,-0.97l-0.61,0.4l0.09,0.52l1.44,2.0l-0.24,0.46l0.36,0.47l-1.17,-0.21l-0.33,0.63l0.5,0.56l0.89,0.23l1.12,-0.16l0.66,0.62l1.37,0.18l1.0,-0.03l0.99,-0.62l-0.34,1.59l0.24,0.77l-0.98,0.7l0.37,1.59l-1.12,0.14l-0.43,0.41l0.4,2.11l-0.33,1.6l0.45,0.64l0.84,0.24l0.87,2.86l0.71,2.8l-0.91,0.82l0.62,0.49l-0.08,1.28l0.71,0.3l0.18,0.61l0.58,0.29l0.4,1.79l0.68,0.31l0.45,3.21l1.46,0.62l-0.52,1.1l0.31,1.08l-0.62,0.77l-0.84,-0.05l-0.54,0.44l0.09,1.3l-0.49,-0.33l-0.49,0.25l-0.39,-0.67l-1.49,-0.45l-2.92,-2.53l-2.2,-0.18l-0.81,-0.51l-4.2,0.09l-0.9,0.42l-0.79,-0.62l-1.64,0.24l-2.12,-0.89l-0.73,-0.97l-0.6,-0.14l-0.21,-0.72l-1.17,-0.49l-0.99,-0.02l-1.98,-0.87l-1.45,0.39l-0.83,-1.09l-0.6,-0.21l-1.43,-1.38l-1.96,0.01l-1.47,-0.64l-0.86,0.11l-1.62,-0.41l0.35,-0.9l-0.3,-0.97l-1.11,-0.7l0.3,-0.29l-0.26,-1.44l0.56,-1.21l-0.35,-0.67l0.88,-0.38l0.12,-0.54l-1.04,-0.54l-0.91,0.67l-0.32,-0.31l0.03,-1.09l-0.59,-0.83l0.31,-0.09l0.53,-1.43l-0.22,-0.71l-0.71,0.09l-1.03,0.96l-0.57,-0.89l-0.85,-0.28l-0.26,-1.34l-1.51,-0.77l0.29,-0.65l-0.24,-0.76l0.34,-2.18l-0.45,-0.96l-1.04,-1.01l0.65,-1.99l0.05,-1.19l-0.18,-0.7l-0.54,-0.33l-0.15,-1.81l-1.85,-1.44l-0.86,0.21l-0.3,-0.41l-0.81,-0.11l-0.74,-1.31l-2.22,-1.71l0.01,-0.69l-0.51,-0.58l0.12,-0.87l-0.97,-0.92l-0.08,-0.75l-1.12,-0.61l-1.3,-2.88l-2.66,-1.48l-0.38,-0.91l-1.13,-0.59l-0.06,-1.16l-0.82,-1.19l-0.59,-1.95l0.41,-0.22l-0.04,-0.72l-1.03,-0.49l-0.26,-1.29l-0.82,-0.58l-0.94,-1.73l-0.61,-2.38l-1.85,-2.36l-0.87,-4.24l-1.81,-1.34l0.05,-0.7l-0.75,-1.21l-4.07,-2.82l-0.29,-1.39l1.68,-0.02l0.79,-0.84l-0.29,-0.39l-0.65,-0.06l-0.09,-0.72l0.08,-0.89l0.64,-0.7l-0.11,-0.74l-0.48,0.05l-0.77,0.72l-0.45,0.69l0.01,0.66l-0.88,0.15l-0.39,1.07l-0.54,-0.04l-1.81,-1.75l0.06,-0.67l-0.41,-0.68l-0.77,-0.2l-0.64,0.29l-0.33,-0.53l-0.73,-0.13l-0.89,-2.16l-1.49,-0.8l-0.85,0.27l-0.44,-0.87l-0.61,0.1l-0.25,0.61l-1.05,0.16l-2.88,-0.47l-0.39,-0.38l-1.48,-0.03l-0.79,0.29l-0.77,-0.44l-2.66,0.27l-2.42,-1.08l-1.14,-0.89l-0.68,-0.07l-1.03,0.82l-0.64,1.61l-1.99,-0.17l-0.51,0.44l-0.49,-0.17l-2.52,0.78l-3.07,6.25l-0.18,1.77l-0.76,0.67l-0.38,1.8l0.35,0.59l-1.97,0.98l-0.75,1.32l-1.07,0.61l-0.62,0.83l-0.29,1.09l-2.91,-0.34l-1.04,-0.87l-0.54,0.3l-1.69,-1.21l-1.31,-1.63l-2.9,-0.85l-1.15,-0.95l-0.02,-0.67l-0.42,-0.4l-2.75,-0.51l-2.28,-1.03l-1.89,-1.75l-0.91,-1.53l-0.96,-0.91l-1.53,-0.29l-1.76,-1.26l-0.22,-0.56l-1.14,-0.97l-0.83,-2.9l-0.86,-1.01l-0.24,-1.1l-0.76,-1.27l-0.26,-2.34l0.52,-3.04l-3.0,-5.07l-0.06,-1.94l-1.26,-2.51l-0.99,-0.44l-0.43,-1.24l-1.43,-0.81l-2.15,-2.17l-1.02,-0.1l-2.01,-1.25l-3.18,-3.35l-0.59,-1.55l-3.13,-2.55l-1.59,-2.45l-1.19,-0.95l-0.61,-1.05l-4.42,-2.6l-2.4,-5.42l-1.37,-1.08l-1.12,-0.08l-1.76,-1.68l-0.79,-3.05ZM502.12,468.09l-0.33,0.17l0.18,-0.16l0.15,-0.02ZM498.72,470.76l-0.09,0.12l-0.04,0.02l0.13,-0.14ZM467.58,489.09l0.03,0.02l-0.02,0.02l-0.0,-0.03ZM453.97,547.08l0.76,-0.5l0.25,-0.68l0.11,1.08l-1.11,0.1Z\", \"name\": \"Texas\"}, \"US-NH\": {\"path\": \"M829.91,105.39l0.2,-1.33l-1.43,-5.38l0.53,-1.45l-0.28,-2.22l1.0,-1.86l-0.13,-2.3l0.64,-2.28l-0.44,-0.62l0.29,-2.3l-0.93,-3.8l0.08,-0.7l0.3,-0.45l1.83,-0.8l0.7,-1.39l1.43,-1.62l0.74,-1.8l-0.25,-1.13l0.52,-0.62l-2.34,-3.49l0.87,-3.26l-0.11,-0.78l-0.81,-1.29l0.28,-0.59l-0.23,-0.7l0.48,-3.2l-0.36,-0.82l0.91,-1.49l2.44,0.33l0.65,-0.86l12.99,34.86l0.84,3.65l2.6,2.21l0.88,0.34l0.36,1.6l1.71,1.31l0.0,0.35l0.77,0.23l-0.06,0.58l-0.46,3.09l-1.57,0.24l-1.32,1.19l-0.51,0.94l-0.96,0.37l-0.5,1.68l-1.1,1.44l-17.61,4.74l-1.7,-1.43l-0.41,-0.89l-0.1,-2.0l0.54,-0.59l0.03,-0.52l-1.02,-5.18Z\", \"name\": \"New Hampshire\"}, \"US-NY\": {\"path\": \"M821.95,168.59l-0.84,-0.72l0.83,-3.23l1.03,-0.3l0.37,-0.48l0.74,0.21l0.64,-0.32l-0.06,-0.58l0.43,-0.05l0.28,-0.66l0.72,-0.32l-0.21,-1.42l0.73,-0.47l0.35,0.56l1.04,-0.16l0.49,-0.33l0.01,-0.54l1.46,-0.18l0.24,-0.74l1.66,0.02l0.91,-0.54l0.45,-1.21l0.62,0.24l0.43,-0.5l4.32,-1.28l2.35,-1.12l2.36,-2.84l0.18,0.17l-2.53,3.41l-0.01,0.46l0.56,0.38l1.59,-0.33l0.28,0.61l-1.3,1.19l-2.05,0.53l-0.37,0.58l-1.16,0.41l0.23,0.43l-0.24,0.3l-0.68,-0.16l-0.74,0.7l-1.04,0.17l-0.37,0.55l-1.42,0.45l-0.26,0.67l-1.34,0.19l-0.44,0.7l-1.35,0.96l-2.77,1.33l-1.02,0.88l-1.04,0.09l-0.32,0.93l-0.28,0.03l-0.26,-0.68l-1.45,-0.25l-0.88,0.74l0.07,0.96l-0.94,0.56ZM844.29,155.03l0.88,-2.14l1.18,-0.48l0.6,-0.93l0.81,0.34l0.13,-0.83l0.75,0.63l-3.84,3.68l-0.51,-0.28ZM845.16,149.15l0.06,-0.06l0.18,-0.06l-0.11,0.19l-0.13,-0.07ZM722.08,155.52l3.76,-3.85l1.27,-2.19l1.75,-1.86l1.16,-0.78l1.28,-3.35l2.09,-2.13l-0.21,-1.84l-1.61,-2.42l0.42,-1.13l-0.17,-0.78l-0.83,-0.53l-2.09,-0.0l0.04,-0.99l-0.58,-2.23l4.98,-2.94l4.48,-1.79l2.38,-0.2l1.84,-0.74l5.64,-0.24l3.12,1.25l3.16,-1.68l5.49,-1.06l0.59,0.45l0.68,-0.2l0.12,-0.99l3.23,-1.85l0.69,-2.05l1.87,-1.76l0.78,-1.26l1.12,0.03l1.13,-0.52l1.07,-1.63l-0.46,-0.69l0.36,-1.2l-0.25,-0.51l-0.64,0.02l-0.17,-1.18l-0.94,-1.58l-1.01,-0.62l0.12,-0.18l0.59,0.39l0.53,-0.27l0.75,-1.43l-0.01,-0.92l0.81,-0.64l-0.01,-0.98l-0.93,-0.19l-0.6,0.7l-0.28,0.12l0.56,-1.3l-0.81,-0.63l-1.26,0.05l-0.87,0.77l-0.98,-0.7l2.05,-2.51l1.78,-1.47l1.67,-2.63l0.7,-0.56l0.89,-1.54l0.07,-0.56l-0.49,-0.94l0.78,-1.9l4.82,-7.61l4.76,-4.5l2.84,-0.51l19.65,-5.66l0.4,0.87l-0.08,2.01l1.02,1.22l0.43,3.79l2.29,3.25l-0.09,1.89l0.85,2.41l-0.59,1.07l-0.0,3.41l0.71,0.89l1.32,2.76l0.19,1.09l0.62,0.84l0.12,3.92l0.55,0.85l0.54,0.07l0.53,-0.61l0.06,-0.87l0.33,-0.07l1.05,1.12l3.87,14.48l0.11,1.59l0.62,1.09l0.33,14.92l0.6,0.62l3.57,16.23l1.26,1.34l-2.82,3.18l0.03,0.54l1.74,1.62l-1.86,3.37l0.21,1.06l-1.03,0.45l-0.24,-4.26l-0.56,-2.23l-0.74,-1.62l-1.46,-1.1l-0.17,-1.13l-0.7,-0.09l-0.42,1.33l0.8,1.45l0.94,0.69l0.95,2.79l-13.74,-4.06l-1.28,-1.47l-2.39,0.24l-0.63,-0.43l-1.06,-0.15l-1.74,-1.91l-0.75,-2.33l0.12,-0.72l-0.36,-0.63l-0.56,-0.21l0.09,-0.46l-0.35,-0.42l-1.64,-0.68l-1.08,0.32l-0.53,-1.22l-1.92,-0.93l-34.6,8.73l-34.43,7.84l-1.11,-5.15Z\", \"name\": \"New York\"}, \"US-HI\": {\"path\": \"M293.44,610.32l-0.16,-1.33l-1.79,-3.5l-1.21,-1.37l0.23,-0.95l-0.21,-0.49l0.64,-1.68l4.55,-5.05l0.88,-5.09l0.45,-0.65l0.48,-2.22l-0.34,-2.5l0.41,-1.79l1.19,-0.79l1.55,-0.08l1.27,-0.5l1.51,0.3l2.68,-1.18l1.51,-0.07l1.15,-1.13l-0.03,-3.17l0.35,-1.25l0.99,-1.6l1.21,-0.53l2.67,2.45l-0.1,1.68l1.07,1.67l0.81,2.19l1.64,1.05l2.04,2.64l3.96,7.75l0.59,3.31l-2.1,3.31l0.14,0.54l0.73,0.44l1.2,0.23l0.29,0.68l-0.01,0.53l-0.8,1.13l-0.09,1.86l0.56,2.06l1.01,1.51l0.17,1.18l-0.37,0.44l-2.35,0.67l-1.45,-0.32l-2.49,0.4l-1.2,-0.39l-2.49,-0.11l-3.15,-1.01l-0.9,-0.94l-1.39,-0.68l-2.87,0.15l-4.73,-0.64l-1.91,0.32l-1.08,1.21l-1.89,0.33l-1.22,0.8l-1.62,0.21ZM302.97,554.35l1.47,-2.4l0.62,-1.93l-0.3,-0.8l-0.55,-0.42l-1.1,0.04l-1.49,-2.22l-0.31,-2.64l0.31,-0.99l0.92,-0.89l0.88,-0.53l1.05,-0.12l0.9,0.44l0.73,1.4l0.05,3.78l1.07,0.23l1.89,1.04l1.66,0.12l1.88,1.67l0.65,3.28l0.56,0.34l0.11,1.09l2.18,2.69l-0.14,1.17l-1.45,1.15l-0.84,-0.19l-0.81,0.3l-0.68,-0.4l-1.7,-0.23l-1.91,-1.3l-3.1,-0.5l-0.96,-1.02l-1.42,-0.79l-0.16,-1.4ZM273.53,509.24l-0.16,-0.35l0.54,-1.85l-0.3,-1.63l0.39,-1.12l-0.31,-1.61l0.83,-1.4l-0.26,-1.26l3.14,2.06l2.55,-0.17l1.08,-0.64l1.25,-0.12l0.77,0.28l0.39,1.22l-0.11,1.03l-0.4,0.54l0.01,2.42l0.41,1.21l-0.78,0.43l-0.61,1.27l0.64,2.46l0.61,0.41l0.56,-0.16l-0.24,0.78l0.3,0.88l-0.35,0.37l-0.14,1.04l0.56,1.3l-1.15,0.14l-0.29,-0.77l-2.67,-0.85l-0.05,-0.86l-0.79,-1.25l0.15,-0.76l-0.26,-0.63l-1.05,0.24l-0.45,-0.78l0.16,-0.27l1.0,0.06l0.45,-0.62l-0.42,-0.96l-0.64,-0.2l-0.35,-0.61l-0.47,0.25l-0.47,-0.55l-0.38,0.32l0.14,1.95l-2.85,-1.22ZM284.15,511.85l0.1,-0.21l-0.0,-0.01l0.1,0.09l-0.19,0.14ZM246.14,461.52l2.01,-0.42l1.12,-0.67l1.33,0.51l3.66,0.37l0.71,1.4l1.04,-0.06l1.12,1.14l0.89,0.21l0.72,0.89l0.28,1.56l-0.23,1.15l-0.51,0.62l-2.05,0.87l-1.37,1.99l-0.6,-0.19l-0.46,0.49l-2.84,0.16l-3.61,-3.83l-0.24,-1.91l-1.68,-2.24l0.05,-1.26l0.66,-0.81Z\", \"name\": \"Hawaii\"}, \"US-VT\": {\"path\": \"M805.54,72.68l26.02,-7.96l0.89,1.85l-0.74,2.37l-0.03,1.54l2.22,2.75l-0.51,0.58l0.26,1.13l-0.67,1.6l-1.35,1.49l-0.64,1.32l-1.72,0.7l-0.62,0.92l-0.1,0.98l0.93,3.74l-0.29,2.44l0.4,0.54l-0.6,2.11l0.15,2.19l-1.0,1.87l0.27,2.36l-0.53,1.54l1.43,5.44l-0.22,1.22l1.05,5.3l-0.58,0.85l0.11,2.31l0.6,1.26l1.51,1.1l-11.72,3.08l-4.31,-16.79l-1.72,-1.59l-0.91,0.25l-0.3,1.19l-0.12,-0.26l-0.11,-3.91l-0.68,-1.0l-0.14,-0.98l-1.37,-2.85l-0.63,-0.68l0.01,-3.15l0.6,-1.15l-0.86,-2.57l0.08,-1.93l-0.39,-0.91l-1.55,-1.63l-0.38,-0.81l-0.41,-3.71l-1.03,-1.27l0.11,-1.87l-0.42,-1.0Z\", \"name\": \"Vermont\"}, \"US-NM\": {\"path\": \"M230.94,422.8l11.82,-123.64l25.66,2.24l26.09,1.86l26.12,1.45l25.74,1.02l-0.31,10.24l-0.74,0.39l-3.59,98.67l-32.38,-1.34l-33.52,-2.02l-0.44,0.76l0.54,2.31l0.44,1.26l1.0,0.77l-30.53,-2.46l-0.43,0.36l-0.81,9.46l-14.64,-1.33Z\", \"name\": \"New Mexico\"}, \"US-NC\": {\"path\": \"M676.72,321.71l0.92,0.17l1.52,-0.39l0.42,-0.39l0.52,-0.97l0.13,-2.7l1.34,-1.19l0.47,-1.05l2.24,-1.47l2.12,-0.52l0.76,0.18l1.32,-0.52l2.36,-2.52l0.78,-0.25l1.84,-2.29l1.48,-1.0l1.55,-0.19l1.15,-2.65l-0.28,-1.22l1.65,0.06l0.51,-1.65l0.93,-0.77l1.08,-0.77l0.51,1.52l1.07,0.33l1.34,-1.17l1.35,-2.64l2.49,-1.59l0.79,0.08l0.82,0.8l1.06,-0.21l0.84,-1.07l1.47,-4.18l1.08,-1.1l1.47,0.09l0.44,-0.31l-0.69,-1.26l0.4,-2.0l-0.42,-0.9l0.38,-1.25l7.42,-0.86l19.54,-3.36l37.21,-8.42l31.11,-7.87l0.4,1.21l3.54,3.24l1.0,1.53l-1.2,-1.0l-0.16,-0.63l-0.92,-0.41l-0.52,0.05l-0.24,0.65l0.66,0.54l0.59,1.56l-0.53,0.01l-0.91,-0.75l-2.31,-0.8l-0.4,-0.48l-0.55,0.13l-0.31,0.69l0.14,0.64l1.37,0.44l1.69,1.38l-1.1,0.66l-2.49,-1.2l-0.35,0.5l0.14,0.42l1.6,1.18l-1.84,-0.33l-2.23,-0.87l-0.46,0.14l0.01,0.48l0.6,0.7l1.7,0.83l-0.97,0.58l0.0,0.6l-0.43,0.53l-1.48,0.75l-0.89,-0.77l-0.61,0.22l-0.1,0.35l-0.2,-0.13l-1.31,-2.32l0.21,-2.63l-0.42,-0.48l-0.89,-0.22l-0.37,0.64l0.62,0.71l-0.43,0.99l-0.02,1.03l0.49,1.73l1.6,2.2l-0.31,1.28l0.48,0.29l2.97,-0.59l2.1,-1.49l0.27,0.01l0.37,0.79l0.76,-0.34l1.56,0.05l0.16,-0.72l-0.57,-0.32l1.29,-0.76l2.04,-0.46l-0.1,1.19l0.64,0.29l-0.6,0.88l0.88,1.19l-0.84,0.1l-0.19,0.66l1.38,0.46l0.26,0.94l-1.21,0.05l-0.19,0.66l0.66,0.59l1.25,-0.16l0.52,0.26l0.41,-0.38l0.18,-1.95l-0.75,-3.33l0.41,-0.48l0.56,0.43l0.94,0.06l0.28,-0.58l-0.29,-0.44l0.48,-0.57l1.71,1.84l-0.01,1.4l0.62,0.9l-0.78,0.65l0.9,1.14l-0.08,0.37l-0.42,0.55l-0.78,0.09l-0.91,-0.86l-0.32,0.34l0.13,1.26l-1.08,1.62l0.2,0.57l-0.33,0.22l-0.15,0.98l-0.74,0.55l0.1,0.91l-0.9,0.97l-1.06,0.21l-0.6,-0.37l-0.52,0.52l-0.93,-0.81l-0.86,0.1l-0.4,-0.82l-0.59,-0.21l-0.52,0.38l0.08,0.94l-0.52,0.22l-1.42,-1.24l1.31,-0.4l0.23,-0.88l-0.57,-0.42l-2.02,0.31l-1.14,1.01l0.29,0.67l0.44,0.16l-0.06,0.39l0.15,0.43l0.35,0.25l-0.03,0.12l-0.57,-0.34l-1.69,0.83l-1.12,-0.43l-1.45,0.06l-3.32,-0.7l0.42,1.08l0.97,0.45l0.36,0.64l1.51,-0.21l4.03,1.02l3.51,0.11l0.47,0.42l-0.06,0.52l-0.99,0.05l-0.25,0.72l-1.62,1.44l0.32,0.58l1.85,0.01l-2.56,3.5l-1.67,0.04l-1.6,-0.98l-0.9,-0.19l-1.21,-1.02l-1.12,0.07l0.07,0.47l1.04,1.14l2.32,2.09l2.68,0.26l1.31,0.49l1.7,-2.16l0.51,0.47l1.17,0.33l0.4,-0.57l-0.55,-0.9l0.87,0.16l0.19,0.57l0.66,0.23l1.63,-1.2l-0.18,0.61l0.29,0.57l-0.29,0.38l-0.43,-0.21l-0.41,0.37l0.03,0.9l-0.97,1.72l0.01,0.78l-0.71,-0.07l-0.06,-0.74l-1.12,-0.61l-0.42,0.47l0.27,1.45l-0.52,-1.1l-0.65,-0.15l-1.22,1.08l-0.21,0.53l0.25,0.27l-2.03,0.32l-2.75,1.84l-0.67,-1.03l-0.75,-0.3l-0.37,0.49l0.43,1.26l-0.57,-0.01l-0.09,0.82l-0.94,1.73l-0.91,0.84l-0.59,-0.26l0.49,-0.69l-0.02,-0.77l-1.06,-0.93l-0.08,-0.52l-1.69,-0.41l-0.16,0.47l0.43,1.16l0.2,0.33l0.58,0.07l0.3,0.61l-0.88,0.37l-0.08,0.71l0.65,0.64l0.77,0.18l-0.01,0.37l-2.12,1.67l-1.91,2.65l-2.0,4.31l-0.34,2.13l0.12,1.33l-0.15,-1.03l-1.0,-1.6l-0.55,-0.17l-0.3,0.48l1.17,3.95l-0.63,2.27l-3.9,0.19l-1.43,0.65l-0.35,-0.52l-0.58,-0.18l-0.54,1.07l-1.9,1.14l-0.61,-0.02l-23.25,-15.36l-1.05,-0.02l-18.68,3.49l-0.65,-2.77l-3.25,-2.84l-0.47,0.08l-1.23,1.31l-0.01,-1.29l-0.82,-0.54l-22.82,3.35l-0.64,-0.27l-0.62,0.46l-0.25,0.65l-3.98,1.92l-0.89,1.23l-1.01,0.08l-4.78,2.66l-20.95,3.93l-0.34,-4.55l0.7,-0.95ZM816.97,271.42l0.19,0.35l0.24,0.38l-0.45,-0.41l0.02,-0.32ZM807.5,290.22l0.2,0.32l-0.16,-0.09l-0.04,-0.24ZM815.28,299.09l0.16,-0.36l0.16,0.07l-0.13,0.29l-0.19,0.01ZM812.72,299.05l-0.06,-0.29l-0.03,-0.11l0.3,0.26l-0.21,0.13Z\", \"name\": \"North Carolina\"}, \"US-ND\": {\"path\": \"M438.58,42.78l2.06,6.89l-0.73,2.53l0.57,2.36l-0.27,1.17l0.47,1.99l0.01,3.26l1.42,3.95l0.45,0.54l-0.08,0.97l0.39,1.52l0.62,0.74l1.48,3.74l-0.06,3.9l0.42,0.7l0.5,8.35l0.51,1.54l0.51,0.25l-0.47,2.64l0.36,1.63l-0.14,1.75l0.69,1.1l0.2,2.16l0.49,1.13l1.8,2.56l0.15,2.2l0.51,1.08l0.17,1.39l-0.24,1.36l0.28,1.74l-27.89,0.73l-28.38,0.19l-28.38,-0.37l-28.48,-0.93l2.75,-65.45l23.09,0.78l25.56,0.42l25.56,-0.06l24.09,-0.49Z\", \"name\": \"North Dakota\"}, \"US-NE\": {\"path\": \"M422.62,173.98l3.92,2.71l3.93,1.9l1.33,-0.22l0.51,-0.47l0.36,-1.08l0.48,-0.2l2.49,0.34l1.32,-0.47l1.58,0.25l3.45,-0.65l2.37,1.98l1.4,0.14l1.55,0.77l1.45,0.08l0.88,1.1l1.49,0.17l-0.06,0.98l1.68,2.08l3.32,0.6l-0.02,2.55l1.13,1.94l0.01,2.29l1.15,1.07l0.34,1.72l1.73,1.46l0.07,1.88l1.5,2.11l-0.49,2.33l0.44,3.09l0.52,0.54l0.93,-0.2l-0.04,1.25l1.21,0.5l-0.41,2.36l0.21,0.44l1.12,0.4l-0.6,0.77l-0.09,1.01l0.13,0.59l0.82,0.5l0.16,1.45l-0.26,0.92l0.26,1.27l0.55,0.61l0.3,1.93l-0.22,1.33l0.23,0.72l-0.57,0.92l0.02,0.79l0.45,0.88l1.23,0.63l0.25,2.5l1.1,0.51l0.03,0.79l1.18,2.75l-0.23,0.96l1.16,0.21l0.8,0.99l1.1,0.24l-0.15,0.96l1.31,1.68l-0.21,1.12l0.51,0.91l-26.14,1.05l-27.83,0.63l-27.84,0.14l-27.88,-0.35l0.46,-21.65l-0.39,-0.41l-32.35,-1.04l1.85,-43.23l43.35,1.22l44.66,-0.04Z\", \"name\": \"Nebraska\"}, \"US-LA\": {\"path\": \"M509.0,412.88l-1.33,-21.76l51.43,-4.07l0.34,0.83l1.48,0.65l-0.92,1.35l-0.25,2.13l0.49,0.72l1.18,0.31l-1.21,0.47l-0.45,0.78l0.45,1.36l1.04,0.84l0.08,2.15l0.46,0.54l1.51,0.74l0.45,1.05l1.42,0.44l-0.87,1.22l-0.85,2.34l-0.75,0.04l-0.52,0.51l-0.02,0.73l0.63,0.72l-0.22,1.16l-1.34,0.96l-1.08,1.89l-1.37,0.67l-0.68,0.83l-0.79,2.42l-0.25,3.52l-1.55,1.74l0.13,1.2l0.62,0.96l-0.35,2.38l-1.61,0.29l-0.6,0.57l0.28,0.97l0.64,0.59l-0.26,1.41l0.98,1.51l-1.18,1.18l-0.08,0.45l0.4,0.23l6.18,-0.55l29.23,-2.92l-0.68,3.47l-0.52,1.02l-0.2,2.24l0.69,0.98l-0.09,0.66l0.6,1.0l1.31,0.7l1.22,1.42l0.14,0.88l0.89,1.39l0.14,1.05l1.11,1.84l-1.85,0.39l-0.38,-0.08l-0.01,-0.56l-0.53,-0.57l-1.28,0.27l-1.18,-0.59l-1.51,0.17l-0.61,-0.98l-1.24,-0.86l-2.84,-0.47l-1.24,0.63l-1.39,2.3l-1.3,1.42l-0.42,0.91l0.07,1.2l0.55,0.89l0.82,0.57l4.25,0.82l3.35,-1.0l1.32,-1.19l0.68,-1.2l0.34,0.59l1.08,0.43l0.59,-0.4l0.81,0.03l0.51,-0.46l-0.76,1.21l-1.12,-0.12l-0.57,0.32l-0.38,0.62l0.0,0.83l0.76,1.22l1.48,-0.02l0.65,0.89l1.1,0.48l1.44,-0.66l0.46,-1.11l-0.02,-1.37l0.93,-0.57l0.42,-0.99l0.23,0.05l0.1,1.16l-0.24,0.25l0.19,0.57l0.42,0.15l-0.07,0.75l1.34,1.08l0.35,-0.16l-0.48,0.59l0.18,0.63l-0.24,0.17l-0.84,-0.72l-0.71,-0.08l-1.0,1.89l-0.84,0.14l-0.46,0.53l0.16,1.19l-1.59,-0.6l-0.43,0.19l0.04,0.46l1.14,1.06l-1.17,-0.14l-0.92,0.6l0.68,0.43l1.26,2.04l2.74,0.97l-0.08,1.2l0.33,0.4l2.07,-0.31l0.77,0.17l0.17,0.53l0.73,0.32l1.35,-0.34l0.53,0.78l1.08,-0.46l1.13,0.73l0.14,0.3l-0.41,0.63l1.54,0.86l-0.39,0.65l0.39,0.58l-0.18,0.62l-0.95,1.49l-1.3,-1.56l-0.68,0.34l0.1,0.66l-0.38,0.12l0.41,-1.88l-1.32,-0.76l-0.51,0.5l0.2,1.17l-0.54,0.45l-0.27,-1.02l-0.57,-0.25l-0.89,-1.27l0.03,-0.77l-0.96,-0.14l-0.47,0.5l-1.41,-0.17l-0.74,-0.77l-2.31,-0.09l0.38,-0.86l-0.13,-0.66l-0.64,-0.69l-0.91,0.04l0.1,-0.96l-0.37,-0.36l-0.91,-0.03l-0.22,0.59l-0.85,-0.38l-0.48,0.27l-2.61,-1.26l-1.24,-0.02l-0.67,-0.64l-0.61,0.18l-0.3,0.56l-0.05,1.25l1.72,0.94l1.67,0.35l-0.16,0.92l0.28,0.4l-0.34,0.34l0.23,0.68l-0.76,0.94l-0.03,0.66l0.81,0.97l-0.95,1.43l-1.33,0.94l-0.76,-1.15l0.22,-1.5l-0.35,-0.92l-0.49,-0.18l-0.4,0.36l-1.15,-1.08l-0.6,0.42l-0.76,-1.05l-0.62,-0.2l-0.64,1.33l-0.85,0.26l-0.89,-0.53l-0.85,0.53l-0.1,0.62l0.48,0.41l-0.67,0.56l-0.13,1.44l-0.46,0.13l-0.4,0.84l-0.92,0.08l-0.11,-0.68l-1.6,-0.4l-0.76,0.97l-1.92,-0.93l-0.3,-0.54l-0.99,0.01l-0.35,0.6l-1.15,-0.51l0.42,-0.4l0.0,-1.46l-0.38,-0.57l-1.9,-1.19l-0.08,-0.54l-0.83,-0.71l-0.09,-0.91l0.73,-1.15l-0.34,-1.14l-0.88,-0.19l-0.34,0.57l0.16,0.43l-0.58,0.81l0.04,0.91l-1.8,-0.4l0.07,-0.39l-0.47,-0.54l-1.97,0.76l-0.7,-2.22l-1.32,0.23l-0.18,-2.12l-1.31,-0.35l-1.89,0.3l-1.08,0.66l-0.21,-0.71l0.84,-0.26l-0.05,-0.8l-0.6,-0.58l-1.03,-0.1l-0.85,0.42l-0.94,-0.15l-0.4,0.8l-2.0,1.11l-0.63,-0.31l-1.29,0.71l0.54,1.37l0.81,0.31l1.04,1.55l-1.27,0.36l-1.82,1.06l-7.63,-0.92l-6.7,-2.31l-3.46,-0.65l-6.85,0.69l-3.41,0.8l-1.57,0.73l-0.91,-1.41l1.2,-0.46l0.79,-0.98l0.27,-2.3l-0.59,-0.84l1.15,-1.62l0.23,-1.59l-0.5,-1.83l0.07,-1.46l-0.66,-0.7l-0.21,-1.04l0.83,-2.21l-0.64,-1.95l0.76,-0.84l0.3,-1.49l0.78,-0.94l0.79,-2.83l-0.18,-1.42l0.58,-0.97l-0.75,-1.33l0.84,-0.39l0.2,-0.44l-0.89,-1.36l0.03,-2.13l-1.07,-0.23l-0.57,-1.57l-0.92,-0.84l0.28,-1.27l-0.81,-0.76l-0.33,-0.95l-0.64,-0.34l0.22,-0.98l-1.16,-0.58l-0.81,-0.93l0.16,-2.46l-0.68,-1.93l-1.33,-1.98l-2.63,-2.21ZM548.97,462.65l0.0,-0.0l0.0,0.0l-0.0,0.0ZM607.49,467.36l-0.03,-0.03l-0.08,-0.04l0.13,-0.01l-0.03,0.08ZM607.51,465.75l-0.02,-0.01l0.03,-0.01l-0.02,0.02ZM567.05,468.89l-2.0,-0.42l-0.66,-0.5l0.73,-0.43l0.35,-0.75l0.39,0.49l0.83,0.21l-0.14,0.6l0.5,0.81Z\", \"name\": \"Louisiana\"}, \"US-SD\": {\"path\": \"M336.43,128.81l0.3,-0.53l0.75,-19.92l28.49,0.93l28.39,0.37l28.39,-0.19l27.77,-0.73l-0.18,1.71l-0.73,1.71l-2.9,2.46l-0.42,1.27l1.59,2.13l1.06,2.06l0.55,0.36l1.74,0.24l1.01,0.84l0.57,1.02l1.45,38.83l-1.84,0.09l-0.42,0.56l0.24,1.44l0.88,1.14l0.01,1.45l-0.65,0.36l0.17,1.48l0.48,0.43l1.09,0.04l0.34,1.68l-0.16,0.91l-0.62,0.83l0.02,1.73l-0.68,2.45l-0.49,0.44l-0.67,1.88l0.5,1.1l1.33,1.08l-0.16,0.62l0.64,0.66l0.35,1.15l-1.65,-0.28l-0.34,-0.94l-0.85,-0.73l0.19,-0.61l-0.28,-0.59l-1.58,-0.23l-1.03,-1.18l-1.57,-0.11l-1.51,-0.75l-1.34,-0.12l-2.38,-1.99l-3.78,0.6l-1.65,-0.25l-1.19,0.46l-2.62,-0.33l-0.98,0.48l-0.76,1.45l-0.72,0.05l-3.66,-1.82l-4.13,-2.8l-44.82,0.05l-43.33,-1.22l1.79,-43.19Z\", \"name\": \"South Dakota\"}, \"US-DC\": {\"path\": \"M783.1,218.48l-0.45,-0.64l-1.55,-0.67l0.58,-1.01l2.03,1.26l-0.61,1.06Z\", \"name\": \"District of Columbia\"}, \"US-DE\": {\"path\": \"M798.42,195.12l0.48,-1.56l0.92,-1.11l1.72,-0.71l1.12,0.06l-0.33,0.56l-0.08,1.38l-0.46,1.09l-0.6,0.54l-0.09,0.77l0.13,0.61l1.03,0.85l0.11,2.31l3.98,3.32l1.13,3.99l1.96,1.68l0.47,1.26l3.17,2.27l1.35,-0.08l0.48,1.21l-0.58,0.27l-0.31,0.67l0.03,0.76l0.36,0.19l-0.82,0.57l-0.08,1.21l0.66,0.21l0.85,-0.73l0.72,0.34l0.3,-0.21l0.59,1.55l-9.84,2.64l-8.37,-25.89Z\", \"name\": \"Delaware\"}, \"US-FL\": {\"path\": \"M630.29,423.61l47.18,-6.86l1.52,1.91l0.86,2.72l1.47,1.0l48.78,-5.11l1.03,1.38l0.03,1.09l0.55,1.05l1.04,0.48l1.64,-0.28l0.85,-0.75l-0.14,-4.57l-0.98,-1.49l-0.22,-1.77l0.28,-0.74l0.62,-0.3l0.12,-0.7l5.59,0.96l4.03,-0.16l0.14,1.24l-0.75,-0.12l-0.32,0.43l0.25,1.54l2.11,1.81l0.22,1.01l0.42,0.38l0.3,1.92l5.3,11.5l1.81,3.07l7.14,10.22l0.63,0.36l6.82,7.53l-0.48,-0.02l-0.27,0.61l-1.35,-0.02l-0.34,-0.65l0.38,-1.38l-0.16,-0.56l-2.3,-0.92l-0.46,0.53l1.0,2.8l0.78,0.97l2.14,4.77l9.92,13.71l1.37,3.11l3.66,5.34l-1.38,-0.35l-0.43,0.74l0.8,0.65l0.85,0.24l0.56,-0.22l1.46,0.94l2.05,3.05l-0.5,0.34l-0.12,0.53l1.16,0.53l0.89,1.83l-0.08,1.06l0.59,0.95l0.61,2.64l-0.27,0.75l0.93,8.98l-0.31,1.07l0.46,0.67l0.5,3.1l-0.78,1.26l0.03,2.43l-0.84,0.74l-0.22,1.8l-0.48,0.85l0.21,1.47l-0.31,1.74l0.54,1.74l0.45,0.23l-1.15,1.8l-0.39,1.28l-0.94,0.24l-0.53,-0.22l-1.37,0.45l-0.35,1.06l-0.89,0.3l-0.18,0.58l-0.85,0.67l-1.44,0.14l-0.27,-0.32l-1.23,-0.1l-0.9,1.05l-3.17,1.13l-1.06,-0.59l-0.7,-1.04l0.06,-1.8l1.0,0.84l1.64,0.47l0.26,0.63l0.52,0.07l1.35,-0.72l0.2,-0.69l-0.26,-0.64l-1.58,-1.11l-2.4,-0.26l-0.91,-0.46l-0.85,-1.67l-0.89,-0.72l0.22,-0.98l-0.48,-0.28l-0.53,0.15l-1.38,-2.51l-0.44,-0.3l-0.64,0.07l-0.44,-0.61l0.22,-0.89l-0.7,-0.65l-1.21,-0.6l-1.06,-0.08l-0.75,-0.54l-0.57,0.18l-2.8,-0.59l-0.5,0.64l0.25,-0.91l-0.46,-0.42l-0.87,0.12l-0.26,-0.72l-0.88,-0.65l-0.61,-1.41l-0.55,-0.11l-0.73,-2.95l-0.77,-0.98l-0.16,-1.52l-0.44,-0.83l-0.71,-0.89l-0.49,-0.15l-0.12,0.93l-1.29,-0.26l1.07,-1.3l0.18,-1.37l0.86,-1.46l0.65,-0.34l0.28,-0.83l-0.61,-0.38l-1.42,0.93l-1.03,1.67l-0.28,1.79l-1.37,0.35l-0.2,-1.33l-0.79,-1.33l-0.27,-4.04l-0.86,-0.6l1.63,-1.33l0.22,-0.97l-0.58,-0.42l-3.05,1.92l-0.75,-0.66l-0.4,0.26l-1.27,-0.89l-0.37,0.74l1.13,1.09l0.52,0.1l1.26,2.0l-1.04,0.24l-1.43,-0.38l-0.84,-1.6l-1.13,-0.6l-1.94,-2.54l-1.04,-2.28l-1.28,-0.87l0.1,-0.87l-0.97,-1.8l-1.77,-0.98l0.09,-0.67l0.99,-0.41l-0.35,-0.49l0.44,-0.73l-0.39,-0.35l0.4,-1.21l2.47,-4.47l-1.05,-2.41l-0.68,-0.46l-0.92,0.42l-0.28,0.93l0.29,1.19l-0.24,0.03l-0.73,-2.44l-0.99,-0.28l-1.18,-0.87l-1.52,-0.31l0.29,1.94l-0.48,0.61l0.27,0.59l2.21,0.56l0.24,0.97l-0.37,2.46l-0.31,-0.58l-0.8,-0.21l-2.13,-1.53l-0.41,0.2l-0.29,-0.62l0.59,-2.11l0.07,-2.97l-0.66,-1.97l0.42,-0.51l0.48,-1.91l-0.24,-0.54l0.66,-3.04l-0.37,-5.41l-0.69,-1.56l0.35,-0.47l-0.47,-2.18l-2.1,-1.33l-0.05,-0.53l-0.55,-0.43l-0.1,-1.01l-0.92,-0.73l-0.55,-1.51l-0.64,-0.25l-1.44,0.32l-1.02,-0.2l-1.57,0.54l-1.15,-1.74l-1.5,-0.47l-0.19,-0.6l-1.35,-1.51l-3.81,-1.88l-0.51,-2.75l-3.06,-1.14l-0.65,-0.59l-0.52,-1.23l-2.15,-1.93l-2.19,-1.09l-1.45,-0.12l-3.44,-1.68l-2.85,0.98l-1.01,-0.4l-1.04,0.42l-0.36,0.68l-1.33,0.68l-0.5,0.71l0.03,0.64l-0.73,-0.22l-0.59,0.6l0.67,0.94l1.51,0.08l0.41,0.21l-3.03,0.23l-1.58,1.51l-0.91,0.45l-1.3,1.56l-1.56,1.03l-0.32,0.13l0.2,-0.48l-0.26,-0.54l-0.67,-0.04l-2.07,2.24l-2.2,0.23l-2.11,1.06l-0.78,0.03l-0.27,-2.03l-1.71,-2.23l-2.21,-1.0l-0.18,-0.41l-2.51,-1.5l2.8,1.33l1.21,-0.74l-0.0,-0.74l-1.32,-0.34l-0.35,0.55l-0.21,-1.01l-0.34,-0.1l0.12,-0.52l-0.49,-0.33l-1.4,0.61l-2.3,-0.76l0.65,-1.08l0.83,-0.1l1.03,-1.45l-0.91,-0.96l-0.46,0.13l-0.49,1.02l-0.44,-0.04l-0.81,0.56l-0.72,-0.9l-0.7,0.09l-0.17,0.38l-1.34,0.73l-0.14,0.68l0.28,0.46l-3.95,-1.35l-5.05,-0.71l0.11,-0.24l1.27,0.29l0.61,-0.53l2.1,0.39l0.23,-0.78l-0.94,-1.02l0.09,-0.69l-0.62,-0.29l-0.5,0.32l-0.28,-0.47l-1.9,0.19l-2.25,1.1l0.3,-0.64l-0.41,-0.58l-0.96,0.35l-0.58,-0.25l-0.23,0.44l0.2,0.71l-1.45,0.79l-0.4,0.64l-5.17,0.97l0.32,-0.52l-0.4,-0.52l-1.35,-0.28l-0.72,-0.53l0.69,-0.53l0.01,-0.78l-0.68,-0.13l-0.81,-0.66l-0.46,0.11l0.14,0.76l-0.42,1.77l-1.05,-1.39l-0.69,-0.45l-0.55,0.07l-0.3,0.71l0.82,1.77l-0.25,0.79l-1.39,0.99l-0.05,1.04l-0.6,0.22l-0.17,0.57l-1.48,0.55l0.28,-0.66l-0.22,-0.45l1.14,-1.03l0.07,-0.74l-0.4,-0.58l-1.18,-0.24l-0.42,-0.84l0.3,-1.7l-0.18,-1.61l-2.17,-1.12l-2.39,-2.46l0.32,-1.44l-0.15,-1.04ZM644.36,434.04l-0.94,0.26l0.4,-0.44l0.53,0.18ZM665.13,435.61l0.98,-0.28l0.35,0.31l0.08,0.72l-1.42,-0.75ZM770.53,454.92l0.42,0.56l-0.43,0.75l0.0,-1.31Z\", \"name\": \"Florida\"}, \"US-CT\": {\"path\": \"M823.41,156.51l2.83,-3.23l-0.07,-0.54l-1.31,-1.25l-3.5,-15.89l9.81,-2.41l0.6,0.46l0.65,-0.26l0.23,-0.58l14.16,-4.0l3.2,10.18l0.47,1.96l-0.04,1.69l-1.66,0.32l-0.92,0.81l-0.69,-0.36l-0.5,0.1l-0.18,0.91l-1.14,0.07l-1.27,1.27l-0.62,-0.14l-0.56,-1.02l-0.89,-0.09l-0.21,0.67l0.75,0.64l0.08,0.54l-0.89,-0.02l-1.02,0.87l-1.65,0.07l-1.15,0.94l-1.44,0.13l-1.21,0.93l-0.65,-1.0l-0.61,0.11l-1.01,2.46l-1.06,0.61l-0.25,1.02l-0.77,-0.26l-0.96,0.56l-0.09,0.85l-1.72,0.98l-1.94,2.27l-1.19,0.46l-0.24,0.38l-1.4,-1.23Z\", \"name\": \"Connecticut\"}, \"US-WA\": {\"path\": \"M38.51,55.06l0.37,-1.08l0.93,0.65l0.55,-0.14l0.54,-0.65l0.49,0.67l0.71,-0.01l0.17,-0.77l-0.98,-1.47l0.85,-0.83l-0.09,-1.36l0.49,-0.39l-0.1,-1.03l0.81,-0.27l0.05,0.5l0.48,0.41l0.95,-0.31l-0.09,-0.68l-1.44,-1.82l-1.84,-0.1l-0.15,0.32l-0.78,-0.82l0.26,-1.62l0.66,0.53l0.52,-0.07l0.29,-0.56l-0.17,-0.68l3.33,-0.52l0.25,-0.68l-2.59,-1.29l-0.05,-0.79l-0.67,-0.57l-1.3,-0.31l0.37,-4.73l-0.5,-1.29l0.25,-0.72l-0.52,-0.48l0.55,-3.93l0.04,-4.38l-0.56,-1.02l-0.04,-0.98l-1.56,-2.34l0.33,-4.24l-0.21,-1.29l0.78,-0.79l0.04,-0.71l0.97,-1.44l-0.6,-1.43l1.04,0.8l0.44,0.0l3.35,3.31l0.99,0.35l2.18,2.41l3.73,1.49l1.21,0.07l0.79,0.71l0.67,0.31l0.6,-0.15l1.57,1.07l1.49,0.47l1.28,0.28l1.22,-0.61l0.53,0.31l0.46,0.71l-0.05,1.24l0.55,0.74l0.8,-0.24l0.07,-0.75l0.44,0.03l0.63,1.39l-0.4,0.58l0.34,0.49l0.56,-0.04l0.73,-0.84l-0.38,-1.7l1.03,-0.24l-0.44,0.23l-0.22,0.69l1.27,4.41l-0.46,0.1l-1.67,1.72l0.22,-1.29l-0.22,-0.41l-1.31,0.31l-0.38,0.81l0.09,0.95l-1.37,1.7l-1.98,1.38l-1.06,1.41l-0.96,0.69l-1.1,1.67l-0.06,0.71l0.62,0.6l0.96,0.12l2.77,-0.48l1.22,-0.58l-0.03,-0.7l-0.64,-0.23l-2.94,0.79l-0.35,-0.3l3.23,-3.42l3.06,-0.88l0.89,-1.51l1.73,-1.54l0.53,0.57l0.54,-0.19l0.22,-1.81l-0.06,2.25l0.26,0.91l-0.98,-0.21l-0.64,0.77l-0.41,-0.73l-0.53,-0.19l-0.39,0.64l0.32,2.34l-0.21,-1.07l-0.67,-0.21l-0.46,0.69l-0.07,0.75l0.46,0.66l-0.63,0.58l-0.0,0.45l0.42,0.17l1.67,-0.57l0.25,1.09l-1.08,1.79l-0.08,1.05l-0.83,0.7l0.13,1.0l-0.85,-0.68l1.12,-1.44l-0.23,-0.96l-1.96,1.08l-0.38,0.64l-0.05,-2.11l-0.52,0.02l-1.03,1.59l-1.26,0.53l-1.14,1.87l-1.51,0.3l-0.46,0.44l-0.21,1.18l1.11,-0.03l-0.25,0.36l0.27,0.37l0.93,0.02l0.06,0.68l0.53,0.47l0.52,-0.27l0.35,-1.76l0.15,0.42l0.83,-0.15l1.11,1.48l1.31,-0.61l1.64,-1.48l0.98,-1.56l0.63,0.78l0.73,0.14l0.44,-0.23l-0.06,-0.86l1.56,-0.55l0.35,-0.94l-0.33,-1.26l0.22,-1.19l-0.18,-1.35l0.83,0.2l0.3,-0.92l-0.19,-0.75l-0.72,-0.63l0.89,-1.13l0.07,-1.75l1.24,-1.24l0.61,-1.37l1.61,-0.49l0.78,-1.15l-0.45,-0.66l-0.51,-0.02l-0.86,-1.3l0.16,-2.09l-0.26,-0.87l0.49,-0.79l0.06,-0.84l-1.15,-1.73l-0.63,-0.4l-0.17,-0.64l0.18,-0.5l0.59,0.24l0.53,-0.33l0.24,-1.8l0.79,-0.24l0.3,-1.0l-0.61,-2.32l0.44,-0.53l-0.03,-0.86l-0.96,-0.88l-0.95,0.3l-1.09,-2.65l0.93,-1.82l41.31,9.4l38.95,7.65l-10.13,55.39l1.04,3.0l0.13,2.0l-1.0,1.3l0.73,1.88l-31.18,-5.92l-1.67,0.79l-7.24,-1.02l-1.68,0.92l-4.19,-0.12l-3.18,0.45l-1.64,0.75l-0.88,-0.26l-1.2,0.3l-1.51,-0.23l-2.43,-0.94l-0.91,0.46l-3.45,0.51l-2.11,-0.71l-1.65,0.3l-0.31,-1.36l-1.09,-0.88l-4.34,-1.46l-2.32,-0.11l-1.15,-0.51l-1.27,0.21l-1.89,0.86l-4.49,0.58l-2.26,-1.01l-1.61,-1.15l-1.84,-0.51l-0.63,-0.81l0.64,-6.82l-0.46,-0.95l-0.22,-1.9l-0.98,-1.35l-1.96,-1.67l-1.59,-0.23l-1.31,0.28l-1.95,-3.24l-2.07,-0.23l-0.56,-0.3l-0.1,-0.52l-0.55,-0.47l-1.22,0.28l-0.81,-0.15l-1.0,0.52l-1.03,-1.77l-0.93,-0.23ZM61.97,39.77l0.16,0.74l-0.42,0.48l0.0,-0.91l0.26,-0.31ZM71.38,20.37l-0.61,0.87l-0.15,0.52l0.18,-1.38l0.58,-0.01ZM71.25,15.62l-0.09,-0.05l0.05,-0.04l0.04,0.1ZM70.48,15.47l-0.77,0.39l0.37,-0.68l-0.07,-0.6l0.22,-0.07l0.25,0.97ZM57.68,42.43l0.04,-0.02l-0.01,0.0l-0.03,0.01Z\", \"name\": \"Washington\"}, \"US-KS\": {\"path\": \"M477.93,239.62l0.44,0.63l0.76,0.18l1.04,0.8l2.19,-1.08l-0.0,0.75l1.08,0.79l0.23,1.44l-0.95,-0.15l-0.6,0.31l-0.17,0.97l-1.14,1.37l-0.06,1.14l-0.79,0.5l0.04,0.64l1.56,2.1l2.0,1.49l0.2,1.13l0.42,0.86l0.74,0.56l0.32,1.11l1.89,0.91l1.54,0.26l2.67,46.81l-31.54,1.48l-31.97,0.88l-31.98,0.26l-32.04,-0.37l1.21,-65.46l27.89,0.35l27.85,-0.14l27.84,-0.64l27.67,-1.12l1.65,1.23Z\", \"name\": \"Kansas\"}, \"US-WI\": {\"path\": \"M510.09,124.06l0.41,-0.27l0.28,-0.9l-0.45,-1.48l0.04,-1.91l0.7,-1.16l0.53,-2.25l-1.61,-2.91l-0.83,-0.36l-1.28,-0.01l-0.21,-2.31l1.67,-2.26l-0.05,-0.77l0.77,-1.55l1.95,-1.09l0.48,-0.75l0.97,-0.25l0.45,-0.75l1.16,-0.14l1.04,-1.56l-0.97,-12.11l1.03,-0.35l0.22,-1.1l0.73,-0.97l0.78,0.7l1.68,0.64l2.61,-0.56l3.27,-1.57l2.65,-0.82l2.22,-2.12l0.31,0.29l1.39,-0.11l1.25,-1.48l0.79,-0.58l1.04,-0.1l0.4,-0.52l1.07,0.99l-0.48,1.68l-0.67,1.01l0.23,1.61l-1.21,2.21l0.64,0.66l2.5,-1.09l0.72,-0.87l2.15,1.22l2.34,0.47l0.44,0.53l0.86,-0.13l1.6,0.7l2.23,3.54l15.47,2.52l4.65,1.96l1.67,-0.16l1.63,0.42l1.33,-0.59l3.17,0.71l2.18,0.09l0.85,0.41l0.56,0.89l-0.42,1.09l0.41,0.77l3.4,0.63l1.4,1.13l-0.16,0.71l0.59,1.11l-0.36,0.81l0.43,1.25l-0.78,1.25l-0.03,1.76l0.91,0.63l1.38,-0.26l1.02,-0.72l0.2,0.26l-0.79,2.44l0.04,1.31l1.32,1.46l0.84,0.35l-0.24,2.02l-2.42,1.2l-0.51,0.78l0.04,1.26l-1.61,3.49l-0.4,3.5l1.11,0.83l0.91,-0.04l0.5,-0.37l0.49,-1.37l1.82,-1.47l0.66,-2.54l1.06,-1.7l0.59,0.18l0.58,-0.71l0.87,-0.4l1.12,1.12l0.59,0.2l-0.28,2.18l-1.19,2.85l-0.57,5.58l0.23,1.11l0.8,0.93l0.07,0.52l-0.51,0.98l-1.3,1.34l-0.86,3.88l0.15,2.57l0.72,1.2l0.06,1.24l-1.07,3.23l0.12,2.11l-0.73,2.11l-0.28,2.46l0.59,2.02l-0.04,1.32l0.49,0.53l-0.21,1.7l0.92,0.78l0.54,2.44l1.2,1.54l0.08,1.69l-0.33,1.45l0.48,2.95l-44.2,4.6l-0.19,-0.79l-1.56,-2.19l-4.94,-0.84l-1.06,-1.35l-0.36,-1.68l-0.9,-1.21l-0.86,-4.89l1.04,-2.61l-0.09,-0.99l-0.71,-0.79l-1.44,-0.48l-0.71,-1.76l-0.47,-6.02l-0.7,-1.4l-0.52,-2.56l-1.15,-0.6l-1.1,-1.56l-0.93,-0.11l-1.17,-0.75l-1.71,0.09l-2.67,-1.79l-2.3,-3.5l-2.64,-2.1l-2.94,-0.53l-0.73,-1.24l-1.12,-1.0l-3.12,-0.45l-3.53,-2.74l0.45,-1.24l-0.12,-1.61l0.25,-0.81l-0.88,-3.11Z\", \"name\": \"Wisconsin\"}, \"US-OR\": {\"path\": \"M10.81,140.09l0.63,-3.94l1.32,-2.52l0.23,-1.22l-0.01,-1.26l-0.46,-0.66l-0.14,-1.12l-0.42,-0.32l-0.11,-1.85l2.73,-3.63l2.2,-4.73l0.1,-1.09l0.42,-0.27l0.01,0.79l0.73,0.1l0.42,-1.11l0.88,-0.84l0.23,0.94l1.39,0.27l-0.51,-2.64l-0.92,0.08l2.09,-3.81l1.11,-0.76l0.8,0.4l0.55,-0.33l-0.66,-1.35l-0.6,-0.3l1.71,-4.39l0.41,-0.38l0.04,-0.96l1.74,-5.49l0.97,-1.98l0.4,0.33l0.67,-0.29l-0.12,-0.97l-0.56,-0.32l0.96,-2.74l0.81,0.17l0.23,-0.45l-0.16,-0.52l-0.52,-0.28l0.54,-2.86l1.58,-2.7l0.83,-3.02l1.14,-1.76l0.97,-3.1l-0.08,-1.04l1.21,-1.1l0.04,-0.6l-0.46,-0.65l0.14,-0.52l0.51,0.64l0.45,0.05l0.39,-0.63l0.17,-1.39l-0.74,-0.72l0.5,-1.2l1.28,-0.78l0.05,-0.46l-0.86,-0.5l-0.26,-1.11l0.86,-2.17l-0.06,-1.44l0.92,-0.59l0.4,-0.85l0.07,-3.75l0.49,0.86l0.9,0.41l-0.04,0.91l0.55,0.53l0.43,-0.82l0.39,-0.14l-0.27,-0.98l1.12,0.84l1.53,0.0l1.45,-0.68l1.44,2.36l1.99,0.78l1.39,-0.67l0.91,0.06l1.72,1.51l0.77,1.04l0.21,1.9l0.43,0.78l-0.03,2.05l-0.39,1.24l0.19,0.93l-0.43,1.74l0.26,1.45l0.79,0.85l1.94,0.56l1.44,1.05l2.4,1.1l4.98,-0.53l2.9,-1.06l1.14,0.51l2.23,0.09l4.24,1.43l0.69,0.54l0.19,1.15l0.57,0.58l1.86,-0.27l2.11,0.71l3.79,-0.55l0.69,-0.42l2.19,0.93l1.64,0.24l1.19,-0.3l0.88,0.26l1.89,-0.78l3.07,-0.43l4.16,0.13l1.61,-0.91l7.16,1.02l0.96,-0.19l0.79,-0.58l31.27,5.93l0.23,1.81l0.93,1.82l1.16,0.63l1.96,1.86l0.57,2.45l-0.16,1.0l-3.69,4.54l-0.4,1.41l-1.39,2.63l-2.21,2.42l-0.65,2.68l-1.49,1.84l-2.23,1.5l-1.92,3.35l-1.49,1.27l-0.62,2.02l-0.12,1.87l0.28,0.92l0.56,0.61l0.54,0.04l0.39,-0.35l0.63,0.76l0.89,-0.05l0.07,0.88l0.8,0.95l-0.46,1.0l-0.65,0.06l-0.33,0.4l0.21,1.8l-1.03,2.56l-1.22,1.41l-6.86,39.15l-26.21,-4.99l-28.89,-6.05l-28.8,-6.61l-28.87,-7.22l-1.54,-2.51l0.26,-2.47l-0.29,-0.87Z\", \"name\": \"Oregon\"}, \"US-KY\": {\"path\": \"M583.03,306.53l0.35,-2.18l1.13,0.96l0.72,0.2l0.75,-0.36l0.46,-0.88l0.87,-3.55l-0.54,-1.75l0.38,-0.86l-0.1,-1.87l-1.27,-2.04l1.79,-3.21l1.24,-0.51l0.73,0.06l7.03,2.56l0.81,-0.2l0.65,-0.72l0.24,-1.93l-1.48,-2.14l-0.24,-1.44l0.2,-0.87l0.4,-0.52l1.1,-0.18l1.24,-0.83l3.0,-0.95l0.64,-0.51l0.15,-1.13l-1.53,-2.05l-0.08,-0.68l1.33,-1.97l0.14,-1.16l1.25,0.42l1.12,-1.33l-0.68,-2.0l1.92,0.9l1.72,-0.84l0.03,1.18l1.0,0.46l0.99,-0.94l0.02,-1.36l0.51,0.16l1.9,-0.96l4.41,1.52l0.64,0.94l0.86,0.18l0.59,-0.59l0.73,-2.53l1.38,-0.55l1.39,-1.34l0.86,1.29l0.77,0.42l1.16,-0.13l0.11,0.75l0.95,0.19l0.67,-0.62l0.03,-1.0l0.84,-0.38l0.26,-0.48l-0.25,-2.09l0.84,-0.4l0.34,-0.56l-0.06,-0.69l1.25,-0.56l0.34,-0.72l0.38,1.47l0.61,0.6l1.46,0.64l1.25,-0.0l1.11,0.81l0.53,-0.11l0.26,-0.55l1.1,-0.46l0.53,-0.69l0.04,-3.47l0.85,-2.18l1.02,0.18l1.55,-1.19l0.75,-3.46l1.04,-0.37l1.65,-2.23l0.0,-0.81l-1.18,-2.88l2.78,-0.59l1.54,0.81l3.85,-2.82l2.23,-0.46l-0.18,-1.07l0.36,-1.47l-0.32,-0.36l-1.22,-0.04l0.58,-1.39l-1.09,-1.54l1.65,-1.83l1.81,1.18l0.92,-0.11l1.93,-1.01l0.78,0.88l1.75,0.54l0.57,1.28l0.94,0.92l0.79,1.84l2.6,0.67l1.87,-0.57l1.63,0.27l2.18,1.85l0.96,0.43l1.28,-0.18l0.61,-1.31l0.99,-0.54l1.35,0.5l1.34,0.04l1.33,1.09l1.26,-0.69l1.41,-0.15l1.81,-2.55l1.72,-1.03l0.92,2.35l0.7,0.83l2.45,0.81l1.35,0.97l0.75,1.05l0.93,3.35l-0.37,0.45l0.09,0.72l-0.44,0.61l0.02,0.53l2.24,2.62l1.35,0.92l-0.08,0.89l1.34,0.97l0.58,1.35l1.55,1.2l0.98,1.62l2.14,0.84l1.09,1.12l2.14,0.25l-4.86,6.13l-5.06,4.15l-0.42,0.86l0.22,1.25l-2.07,1.93l0.04,1.64l-3.06,1.63l-0.8,2.38l-1.71,0.6l-2.7,1.83l-1.66,0.48l-3.39,2.42l-23.95,3.09l-8.8,1.42l-7.47,0.86l-7.68,0.46l-22.71,3.52l-0.64,-0.56l-3.63,0.09l-0.41,0.6l1.03,3.57l-22.99,2.73Z\", \"name\": \"Kentucky\"}, \"US-ME\": {\"path\": \"M837.01,56.27l0.87,-1.15l1.42,1.7l0.84,0.04l0.39,-2.12l-0.46,-2.19l1.7,0.36l0.73,-0.42l0.21,-0.52l-0.32,-0.7l-1.18,-0.47l-0.44,-0.62l0.19,-1.42l0.86,-2.02l2.08,-2.25l0.01,-0.98l-0.52,-0.93l1.02,-1.64l0.39,-1.51l-0.22,-0.92l-1.02,-0.35l-0.07,-1.42l-0.4,-0.43l0.55,-0.96l-0.04,-0.63l-1.0,-1.26l0.13,-1.73l0.37,-0.63l-0.15,-0.97l1.22,-1.93l-0.96,-6.17l5.58,-18.87l2.25,-0.23l1.14,3.18l0.55,0.43l2.54,0.56l1.83,-1.73l1.68,-0.83l1.24,-1.72l1.25,-0.12l0.64,-0.47l0.25,-1.43l0.42,-0.3l1.36,0.04l3.68,1.41l1.14,0.96l2.36,1.05l8.38,22.7l0.64,0.65l-0.19,1.26l0.64,0.86l-0.1,1.52l-0.33,0.05l-0.24,0.66l1.72,1.13l1.79,0.22l0.82,0.41l1.88,-0.19l1.25,-0.64l0.34,0.86l-0.59,1.43l1.69,1.86l0.28,2.69l2.72,1.68l0.98,-0.1l0.47,-0.74l-0.06,-0.5l0.36,0.08l0.25,0.49l0.64,0.07l1.41,1.11l0.27,0.75l1.27,0.94l0.04,0.47l-0.52,-0.14l-0.39,0.41l0.18,0.77l-0.76,-0.15l-0.35,0.4l0.16,0.63l0.81,0.53l0.55,0.92l0.48,0.17l0.16,-0.88l0.39,-0.17l0.8,0.32l0.25,-0.83l0.34,0.41l-0.31,0.85l-0.53,0.19l-1.21,3.24l-0.63,-0.04l-0.31,0.44l-0.55,-1.05l-0.72,0.03l-0.3,0.5l-0.56,0.06l-0.02,0.49l0.58,0.85l-0.9,-0.45l-0.33,0.63l0.26,0.52l-1.2,-0.28l-0.36,0.3l-0.37,0.78l0.07,0.45l0.44,0.08l0.07,1.21l-0.37,-0.57l-0.55,-0.06l-0.39,0.45l-0.2,1.09l-0.48,-1.53l-1.14,0.01l-0.68,0.75l-0.36,1.48l0.59,0.63l-0.83,0.63l-0.69,-0.46l-0.73,1.04l0.1,0.64l0.99,0.63l-0.35,0.21l-0.1,0.82l-0.46,-0.21l-0.85,-1.82l-1.03,-0.46l-0.39,0.22l-0.45,-0.41l-0.57,0.63l-1.24,-0.19l-0.26,0.85l0.78,0.4l0.01,0.37l-0.51,-0.05l-0.56,0.4l-0.09,0.7l-0.49,-1.02l-1.17,-0.02l-0.16,0.64l0.52,0.88l-1.44,0.96l0.84,1.11l0.08,1.06l0.53,0.65l-0.97,-0.41l-0.96,0.22l-1.2,-0.42l-0.17,-0.91l0.74,-0.28l-0.08,-0.56l-0.42,-0.49l-0.67,-0.12l-0.3,0.33l-0.23,-2.37l-0.37,-0.22l-1.1,0.27l0.04,1.96l-1.85,1.92l0.02,0.49l1.25,1.47l-0.64,0.96l-0.19,3.87l0.77,1.41l-1.08,1.72l-0.8,-0.19l-0.45,0.93l-0.62,-0.06l-0.41,-1.15l-0.73,-0.21l-0.52,1.03l0.11,0.69l-0.45,0.59l0.12,2.41l-0.95,-1.01l0.14,-1.28l-0.24,-0.59l-0.82,0.29l-0.08,2.01l-0.44,-0.25l0.15,-1.54l-0.47,-0.4l-0.68,0.49l-0.76,3.04l-0.77,-1.97l0.17,-1.21l-0.4,-0.27l-0.46,0.21l-1.05,2.59l0.35,0.53l0.85,-0.15l0.95,2.08l-0.28,-0.59l-0.51,-0.23l-0.66,0.3l-0.07,0.64l-1.38,-0.1l-2.16,3.17l-0.53,1.86l0.29,0.6l-0.68,0.65l0.51,0.43l0.91,-0.21l0.37,0.92l-0.77,0.3l-0.2,0.39l-0.4,-0.04l-0.51,0.57l-0.14,1.03l0.67,1.37l-0.08,0.68l-0.79,1.29l-0.94,0.61l-0.54,1.29l0.44,1.56l-0.4,2.81l-0.8,-0.33l-0.42,0.59l-1.02,-0.76l-0.57,-1.85l-0.93,-0.37l-2.36,-1.99l-0.76,-3.45l-13.24,-35.53ZM863.91,81.24l0.08,0.26l-0.08,0.23l0.03,-0.29l-0.04,-0.2ZM865.32,81.46l0.47,0.7l-0.04,0.47l-0.32,-0.25l-0.1,-0.93ZM867.66,78.32l0.42,0.82l-0.16,0.14l-0.42,-0.19l0.16,-0.77ZM877.03,64.89l-0.14,0.2l-0.03,-0.24l0.17,0.04ZM873.08,75.23l0.01,0.02l-0.03,0.03l0.01,-0.06Z\", \"name\": \"Maine\"}, \"US-OH\": {\"path\": \"M665.07,178.88l1.66,0.36l0.97,-0.31l1.75,1.07l2.07,0.26l1.47,1.17l1.7,0.24l-2.17,1.18l-0.12,0.47l0.42,0.24l2.45,0.19l1.39,-1.1l1.76,-0.25l3.39,0.96l0.92,-0.08l1.48,-1.3l1.73,-0.59l1.15,-0.97l1.91,-0.97l2.61,-0.03l1.09,-0.62l1.24,-0.06l1.07,-0.8l4.24,-5.46l4.53,-3.47l6.92,-4.36l5.83,28.04l-0.51,0.54l-1.28,0.43l-0.41,0.95l1.65,2.23l0.02,2.11l0.41,0.26l0.31,0.94l-0.04,0.76l-0.54,0.83l-0.5,4.08l0.18,3.21l-0.58,0.41l0.34,1.11l-0.35,1.74l-0.39,0.54l0.76,1.23l-0.25,1.87l-2.41,2.65l-0.82,1.86l-1.37,1.5l-1.24,0.67l-0.6,0.7l-0.87,-0.92l-1.18,0.14l-1.32,1.74l-0.09,1.32l-1.78,0.85l-0.78,2.25l0.28,1.58l-0.94,0.85l0.3,0.67l0.63,0.41l0.27,1.3l-0.8,0.17l-0.5,1.6l0.06,-0.93l-0.91,-1.26l-1.53,-0.55l-1.07,0.71l-0.82,1.98l-0.34,2.69l-0.53,0.82l1.22,3.58l-1.27,0.39l-0.28,0.42l-0.25,3.12l-2.66,1.2l-1.0,0.05l-0.76,-1.06l-1.51,-1.1l-2.34,-0.73l-1.16,-1.92l-0.31,-1.14l-0.42,-0.33l-0.73,0.13l-1.84,1.17l-1.1,1.28l-0.4,1.05l-1.43,0.15l-0.87,0.61l-1.11,-1.0l-3.14,-0.59l-1.37,0.72l-0.53,1.25l-0.71,0.05l-3.04,-2.26l-1.93,-0.29l-1.77,0.56l-2.14,-0.52l-0.55,-1.54l-0.96,-0.97l-0.63,-1.38l-2.03,-0.76l-1.14,-1.01l-0.97,0.26l-1.31,0.89l-0.46,0.03l-1.79,-1.23l-0.61,0.2l-0.6,0.7l-8.67,-55.57l20.65,-4.25ZM675.61,181.3l0.53,-0.79l0.67,0.41l-0.48,0.35l-0.72,0.03Z\", \"name\": \"Ohio\"}, \"US-OK\": {\"path\": \"M399.11,359.23l-0.05,-42.02l-0.39,-0.4l-51.81,-0.82l0.31,-10.23l36.69,0.74l35.99,-0.07l35.98,-0.86l35.56,-1.62l0.6,10.68l4.55,24.34l1.41,37.87l-1.2,-0.22l-0.29,-0.36l-2.13,-0.21l-0.82,-0.79l-2.11,-0.39l-1.77,-2.05l-1.23,-0.22l-2.25,-1.56l-1.5,-0.4l-0.8,0.46l-0.23,0.88l-0.82,0.24l-0.46,0.62l-2.47,-0.14l-1.79,-1.48l-2.3,1.29l-1.16,0.2l-0.19,0.56l-0.63,0.28l-2.12,-0.77l-1.7,1.18l-2.06,0.51l-0.83,1.37l-1.48,0.06l-0.57,1.25l-1.26,-1.55l-1.7,-0.1l-0.32,-0.58l-1.21,-0.46l-0.02,-0.96l-0.44,-0.5l-1.24,-0.18l-0.73,1.38l-0.66,0.11l-0.84,-0.5l-0.97,0.07l-0.71,-1.51l-1.09,-0.35l-1.17,0.57l-0.45,1.7l-0.7,-0.08l-0.49,0.43l0.29,0.73l-0.51,1.68l-0.43,0.19l-0.86,-1.45l0.39,-1.65l-0.75,-0.86l-0.8,0.18l-0.49,0.76l-0.84,-0.18l-0.92,0.98l-1.07,0.13l-0.53,-1.36l-1.99,-0.19l-0.3,-1.48l-1.19,-0.53l-0.82,0.33l-2.12,2.15l-1.21,0.51l-0.97,-0.38l0.19,-1.25l-0.28,-1.13l-2.33,-0.67l-0.07,-2.18l-0.43,-0.55l-2.11,0.39l-2.52,-0.25l-0.64,0.26l-0.81,1.21l-0.95,0.06l-1.76,-1.77l-0.97,-0.12l-1.5,0.56l-2.68,-0.63l-1.86,-1.0l-1.05,0.25l-2.46,-0.3l-0.17,-2.12l-0.85,-0.87l-0.43,-1.02l-1.16,-0.41l-0.7,-0.83l-0.83,0.08l-0.44,1.64l-2.22,-0.68l-1.07,0.6l-0.96,-0.09l-3.79,-3.78l-1.12,-0.43l-0.8,0.08Z\", \"name\": \"Oklahoma\"}, \"US-ID\": {\"path\": \"M132.48,121.36l-0.34,-0.44l0.08,-1.99l0.53,-1.74l1.42,-1.22l2.11,-3.59l1.68,-0.92l1.39,-1.52l1.08,-2.15l0.05,-1.22l2.21,-2.41l1.43,-2.7l0.37,-1.37l2.04,-2.26l1.89,-2.81l0.03,-1.01l-0.79,-2.95l-2.13,-1.94l-0.87,-0.36l-0.85,-1.61l-0.41,-3.02l-0.59,-1.19l0.94,-1.19l-0.12,-2.35l-1.04,-2.69l10.12,-55.42l13.39,2.35l-3.54,20.71l1.29,2.89l1.0,1.27l0.27,1.55l1.17,1.76l-0.12,0.83l0.39,1.14l-0.99,0.95l0.83,1.76l-0.83,0.11l-0.28,0.71l1.93,1.68l1.03,2.04l2.24,1.22l0.54,1.58l1.09,1.33l1.49,2.79l0.08,0.68l1.64,1.81l0.01,1.88l1.79,1.71l-0.07,1.35l0.74,0.19l0.9,-0.58l0.36,0.46l-0.36,0.55l0.07,0.54l1.11,0.96l1.61,0.15l1.81,-0.36l-0.63,2.61l-0.99,0.54l0.25,1.14l-1.83,3.73l0.06,1.72l-0.81,0.07l-0.37,0.54l0.6,1.33l-0.62,0.9l-0.03,1.16l0.96,0.93l-0.37,0.81l0.28,1.01l-1.57,0.43l-1.21,1.41l0.1,1.11l0.46,0.77l-0.13,0.73l-0.83,0.77l-0.2,1.52l1.48,0.63l1.38,1.79l0.78,0.27l1.08,-0.35l0.56,-0.8l1.85,-0.41l1.21,-1.28l0.81,-0.29l0.15,-0.76l0.78,0.81l0.23,0.71l1.05,0.64l-0.42,1.23l0.73,0.95l-0.34,1.38l0.57,1.34l-0.21,1.61l1.54,2.64l0.31,1.73l0.82,0.37l0.67,2.08l-0.18,0.98l-0.76,0.64l0.51,1.89l1.24,1.16l0.3,0.79l0.81,0.08l0.86,-0.37l1.04,0.93l1.06,2.79l-0.5,0.81l0.89,1.83l-0.28,0.6l0.11,0.98l2.29,2.41l0.97,-0.14l-0.01,-1.14l1.07,-0.89l0.93,-0.22l4.53,1.62l0.69,-0.32l0.67,-1.35l1.19,-0.39l2.25,0.93l3.3,-0.1l0.96,0.88l2.29,-0.58l3.23,0.78l0.45,-0.49l-0.67,-0.76l0.26,-1.06l0.74,-0.48l-0.07,-0.96l1.23,-0.51l0.48,0.37l1.07,2.11l0.12,1.11l1.36,1.95l0.73,0.45l-6.27,53.85l-47.47,-6.31l-46.96,-7.72l6.88,-39.16l1.12,-1.18l1.07,-2.67l-0.21,-1.74l0.74,-0.15l0.77,-1.62l-0.9,-1.27l-0.18,-1.2l-1.24,-0.08l-0.64,-0.81l-0.88,0.29Z\", \"name\": \"Idaho\"}, \"US-WY\": {\"path\": \"M218.62,206.98l10.1,-86.59l25.45,2.74l26.79,2.4l26.83,1.91l27.84,1.46l-3.67,87.1l-27.31,-1.41l-28.2,-1.97l-29.69,-2.63l-28.14,-3.02Z\", \"name\": \"Wyoming\"}, \"US-UT\": {\"path\": \"M220.28,185.78l-2.51,21.5l0.35,0.45l32.23,3.42l-8.32,87.13l-42.53,-4.67l-42.4,-5.77l16.08,-108.32l47.1,6.26Z\", \"name\": \"Utah\"}, \"US-IN\": {\"path\": \"M600.87,189.59l1.42,0.87l2.1,0.15l1.52,-0.38l2.63,-1.39l2.73,-2.1l32.14,-4.8l8.96,57.41l-0.66,1.15l0.3,0.92l0.81,0.79l-0.66,1.14l0.49,0.8l1.12,0.04l-0.36,1.14l0.18,0.51l-1.81,0.29l-3.18,2.55l-0.43,0.17l-1.4,-0.81l-3.46,0.91l-0.09,0.78l1.19,3.1l-1.4,1.88l-1.18,0.49l-0.45,0.89l-0.31,2.6l-1.11,0.88l-1.06,-0.24l-0.47,0.47l-0.85,1.95l0.05,3.13l-0.39,1.0l-1.38,0.85l-0.93,-0.68l-1.24,0.01l-1.47,-0.69l-0.62,-1.84l-1.89,-0.73l-0.44,0.3l-0.04,0.5l0.83,0.68l-0.62,0.31l-0.89,-0.35l-0.36,0.29l0.5,1.42l-1.08,0.68l0.14,2.37l-1.06,0.65l-0.0,0.83l-0.16,0.37l-0.25,-1.01l-1.6,0.18l-1.4,-1.69l-0.5,-0.08l-1.67,1.5l-1.57,0.69l-1.07,2.89l-0.81,-1.07l-2.79,-0.77l-1.11,-0.61l-1.08,-0.18l-1.76,0.92l-0.64,-1.02l-0.58,-0.18l-0.53,0.56l0.64,1.86l-0.34,0.84l-0.28,0.09l-0.02,-1.18l-0.42,-0.4l-0.58,0.01l-1.46,0.79l-1.41,-0.84l-0.85,0.0l-0.48,0.95l0.71,1.55l-0.49,0.74l-1.15,-0.39l-0.07,-0.54l-0.53,-0.44l0.55,-0.63l-0.35,-3.09l0.96,-0.78l-0.07,-0.58l-0.44,-0.23l0.69,-0.46l0.25,-0.61l-1.17,-1.47l0.46,-1.16l0.32,0.19l1.39,-0.55l0.33,-1.8l0.55,-0.4l0.44,-0.92l-0.06,-0.83l1.52,-1.07l0.06,-0.69l-0.41,-0.93l0.57,-0.86l0.14,-1.29l0.87,-0.51l0.4,-1.91l-1.08,-2.54l0.06,-1.91l-0.93,-0.91l-0.61,-1.5l-1.05,-0.78l-0.04,-0.58l0.92,-1.39l-0.63,-2.25l1.27,-1.31l-6.5,-50.67Z\", \"name\": \"Indiana\"}, \"US-IL\": {\"path\": \"M540.1,225.5l0.86,-0.35l0.37,-0.67l-0.23,-2.33l-0.73,-0.93l0.15,-0.41l0.72,-0.69l2.42,-0.98l0.71,-0.65l0.63,-1.68l0.17,-2.11l1.65,-2.47l0.27,-0.94l-0.03,-1.22l-0.59,-1.95l-2.23,-1.88l-0.11,-1.77l0.67,-2.38l0.45,-0.37l4.6,-0.85l0.81,-0.41l0.82,-1.12l2.55,-1.0l1.43,-1.56l0.39,-3.28l1.42,-1.46l0.29,-0.74l0.33,-4.37l-0.76,-2.14l-4.02,-2.47l-0.28,-1.5l-0.48,-0.82l-3.64,-2.48l44.57,-4.64l-0.01,2.65l0.57,2.59l1.38,2.49l1.3,0.95l0.76,2.6l1.26,2.71l1.42,1.85l6.6,51.47l-1.22,1.13l-0.1,0.69l0.67,1.76l-0.84,1.09l-0.03,1.11l1.19,1.09l0.56,1.41l0.89,0.82l-0.1,1.8l1.06,2.31l-0.28,1.49l-0.87,0.56l-0.21,1.47l-0.59,0.93l0.34,1.2l-1.48,1.13l-0.23,0.41l0.28,0.7l-0.93,1.17l-0.31,1.19l-1.64,0.67l-0.63,1.67l0.15,0.8l0.97,0.83l-1.27,1.15l0.42,0.76l-0.49,0.23l-0.13,0.54l0.43,2.94l-1.15,0.19l0.08,0.45l0.91,0.78l-0.48,0.17l-0.03,0.64l0.83,0.29l0.04,0.42l-1.31,1.97l-0.25,1.19l0.59,1.22l0.7,0.64l0.37,1.08l-3.31,1.22l-1.19,0.82l-1.24,0.24l-0.77,1.01l-0.18,2.04l1.7,2.81l0.07,0.54l-0.53,1.19l-0.96,0.03l-6.3,-2.43l-1.08,-0.08l-1.57,0.64l-0.68,0.72l-1.44,2.95l0.06,0.66l-1.18,-1.2l-0.79,0.14l-0.35,0.47l0.59,1.13l-1.24,-0.79l-0.01,-0.68l-1.6,-2.21l-0.4,-1.12l-0.75,-0.37l-0.05,-0.49l0.94,-1.35l0.2,-1.03l-0.32,-1.01l-1.44,-2.02l-0.47,-3.18l-2.26,-0.99l-1.55,-2.14l-1.95,-0.82l-1.72,-1.34l-1.56,-0.14l-1.82,-0.96l-2.32,-1.78l-2.34,-2.44l-0.36,-1.95l2.37,-6.85l-0.25,-2.32l0.98,-2.06l-0.38,-0.84l-2.66,-1.45l-2.59,-0.67l-1.29,0.45l-0.86,1.45l-0.9,0.15l-1.3,-1.9l-0.43,-1.52l0.16,-0.87l-0.54,-0.91l-0.29,-1.65l-0.83,-1.36l-0.94,-0.9l-4.11,-2.52l-1.01,-1.64l-4.53,-3.53l-0.73,-1.9l-1.04,-1.21l-0.04,-1.6l-0.96,-1.48l-0.75,-3.54l0.1,-2.94l0.6,-1.28ZM585.53,295.46l0.05,0.05l0.04,0.04l-0.05,-0.0l-0.04,-0.09Z\", \"name\": \"Illinois\"}, \"US-AK\": {\"path\": \"M64.88,530.75l0.06,-0.04l0.04,0.06l-0.06,-0.01l-0.05,-0.0ZM66.64,530.24l1.13,0.16l0.11,0.52l-1.21,0.78l-0.23,-0.24l0.3,-0.47l-0.09,-0.76ZM69.51,530.52l0.7,-0.13l0.3,-0.66l2.1,-0.44l2.68,0.09l1.86,0.74l0.99,0.81l0.04,2.23l0.65,0.89l0.77,-0.37l-0.07,-0.76l0.56,0.36l-0.1,0.53l1.05,1.08l-1.24,-0.51l-0.68,0.56l-0.08,-0.76l-1.26,-0.01l-0.76,-0.43l-0.82,0.28l-1.12,-0.26l-0.44,-0.54l0.4,-0.34l0.95,0.84l0.47,-0.03l0.2,-0.5l-0.7,-1.62l-1.11,-0.6l-1.17,0.32l-0.66,0.82l-1.29,0.37l-0.52,-0.37l-0.59,0.38l-0.74,-0.26l-0.58,0.37l0.21,-2.07ZM81.1,534.87l0.81,-0.72l-0.68,-1.59l0.14,-0.29l1.83,-1.05l3.86,-0.11l2.68,0.81l0.57,-0.32l1.04,0.3l0.88,1.1l0.7,-0.06l0.9,-1.66l2.68,-0.78l1.06,0.33l1.28,-0.46l0.86,0.05l-0.14,0.54l0.5,0.59l1.15,0.33l0.6,-0.91l-0.56,-0.35l-0.31,0.15l0.28,-0.7l-0.2,-0.46l2.24,-2.37l1.05,0.07l0.63,0.82l0.66,-0.29l-0.11,-0.63l-1.04,-0.94l0.19,-0.63l0.96,-0.57l3.31,-0.22l-0.15,-0.63l0.81,-0.73l0.76,-0.04l1.14,-1.23l-0.94,-0.25l-0.69,0.62l-0.61,-0.12l-0.59,0.33l-5.45,-1.21l0.08,-1.16l-0.36,-0.69l0.61,-0.46l0.52,-0.18l0.49,0.51l-0.04,1.27l0.91,-0.05l0.15,-0.75l-0.06,-0.85l-0.98,-1.22l0.01,-0.82l-0.67,-0.19l-0.29,0.86l-0.73,0.37l-0.19,0.06l0.24,-0.27l-0.27,-0.52l-0.4,-0.11l-0.76,0.98l-0.97,0.24l-0.67,2.38l-0.33,0.05l-0.36,-0.33l0.03,-4.92l-0.66,-0.64l-1.23,0.46l0.07,-0.72l-0.68,-0.92l0.27,-0.42l-0.12,-1.01l-2.89,-0.21l-0.54,-0.39l-1.37,-0.13l-0.43,-0.56l-1.2,0.69l-0.99,-0.27l-0.29,-0.65l1.23,-0.02l-0.05,-0.92l0.46,-0.72l1.47,-0.11l-0.03,-0.81l-1.33,-0.74l0.14,-0.43l0.85,-0.72l1.34,-0.01l0.43,-0.43l0.58,-4.63l1.27,-1.41l-0.84,-0.73l1.97,-1.03l1.58,0.21l0.44,-0.55l-0.81,-0.46l-0.34,-0.75l-0.6,0.5l-0.57,-0.1l-1.3,0.72l-2.17,0.25l-0.12,0.5l0.5,0.82l-0.72,0.78l-0.48,-0.47l-2.21,-0.3l-2.19,-1.17l-1.56,-1.56l0.03,-0.37l0.7,-0.05l0.04,-0.67l-0.61,-1.28l-0.09,-1.54l0.39,-0.61l-0.72,-0.34l-0.58,-1.19l0.93,-0.28l0.14,-0.6l-1.09,-0.61l1.52,0.14l0.51,-0.46l0.88,0.03l0.05,0.6l1.07,1.2l-1.21,0.44l-0.39,0.39l0.31,0.47l1.11,-0.1l0.47,0.28l1.12,-0.22l0.18,0.15l-0.72,1.13l0.74,0.73l1.63,0.09l0.68,-0.64l-0.26,-0.92l0.44,-0.39l-0.14,-1.27l-0.59,-0.28l-1.31,0.1l-1.81,-1.44l0.01,-0.63l-0.97,-1.12l0.81,0.16l0.53,-0.4l-1.18,-1.08l0.63,-0.51l-0.14,-0.67l1.25,-0.21l0.53,0.32l0.83,-0.05l0.73,-0.46l-0.08,-0.52l-3.03,-0.29l-1.91,0.63l-0.4,0.68l-0.19,-0.22l0.72,-1.02l-0.63,-1.4l0.68,0.09l0.47,-0.54l-0.48,-1.21l0.96,0.46l0.42,-0.51l-0.63,-0.98l1.73,1.01l0.42,-1.53l0.59,-0.35l3.77,-0.6l0.5,0.35l0.25,0.85l-0.36,0.21l0.14,0.47l1.2,0.19l0.3,-0.42l-0.18,-1.0l1.6,-0.11l0.29,-0.63l-1.51,-0.29l0.59,-0.27l0.16,-0.74l0.9,-0.32l1.37,1.16l0.47,-0.57l-0.32,-0.84l0.37,-0.03l1.02,0.42l1.03,1.2l-0.04,0.6l-0.87,-0.06l-0.35,0.64l1.72,0.3l0.1,0.67l1.21,0.8l3.02,0.17l1.92,-0.37l0.11,0.59l2.89,1.88l2.0,0.37l1.83,-0.33l0.67,-0.63l0.41,-1.78l0.72,-1.29l-0.14,-1.81l0.74,0.39l1.24,-0.12l0.86,-0.71l-0.17,-1.62l0.3,-0.04l0.11,-0.44l-0.25,-0.34l-0.83,-0.45l-1.45,0.34l-0.98,-1.22l-1.22,0.1l-0.5,-0.38l-2.79,-0.15l-0.75,0.51l0.35,-0.85l-0.56,-1.94l-1.57,-0.24l-3.01,-2.71l-1.14,-0.28l-0.95,-0.93l-0.77,0.17l-3.27,-3.98l-0.31,-1.07l0.73,-0.34l0.39,-0.82l-0.53,-1.14l0.14,-0.32l0.52,0.26l1.05,-0.26l1.2,1.12l0.36,-0.78l-2.39,-3.21l-1.44,-1.39l-1.03,-2.33l0.73,0.11l1.02,0.72l1.24,-0.42l0.31,0.63l0.57,0.29l1.08,0.2l0.98,-0.22l1.81,0.53l1.37,1.81l1.19,0.53l0.56,-0.47l-0.6,-1.16l1.94,0.62l0.58,0.79l2.66,0.53l1.79,1.18l0.34,0.64l-0.69,0.11l-0.63,0.77l-1.35,-0.42l-0.12,0.69l0.75,0.66l0.19,1.01l2.13,1.87l1.3,0.71l-0.16,0.68l2.13,1.1l0.66,1.36l0.45,0.21l2.16,-0.88l0.7,1.0l-0.4,0.08l0.01,0.51l0.87,0.33l0.96,-0.71l-0.06,-1.11l-0.58,-0.85l0.4,0.0l1.01,2.11l1.88,1.12l0.85,-0.28l0.74,-1.61l-0.17,-0.25l-1.34,-0.47l-0.61,-1.11l-1.03,-0.61l-1.16,0.14l-0.44,-0.38l-0.48,-1.61l1.18,-0.54l0.78,0.4l0.37,-0.59l-0.87,-1.38l-1.35,-0.8l0.0,-1.23l-0.47,-0.25l-1.01,0.43l-3.2,-3.27l0.71,-1.39l0.04,-2.41l-2.35,-5.81l-1.25,-1.7l-0.54,-1.91l1.29,-0.66l1.24,-1.29l3.37,2.86l2.53,1.62l1.6,0.63l4.17,0.25l2.43,-1.65l1.96,0.17l1.51,-0.27l4.46,2.3l3.16,0.43l0.14,0.68l-0.34,0.08l-0.14,0.66l0.53,0.23l0.34,1.4l0.55,-0.29l0.38,-1.21l1.25,0.75l0.88,0.14l0.29,-0.35l-0.22,-0.39l-1.5,-1.03l0.05,-0.38l0.97,-0.06l0.34,0.13l0.34,1.14l0.55,0.33l0.18,-0.22l0.76,0.21l3.84,2.25l2.9,0.43l2.71,-0.19l0.31,0.85l0.85,0.61l0.02,0.66l1.47,0.88l-0.91,-0.04l-0.91,-0.49l-0.93,0.25l0.42,0.83l-0.26,0.43l0.18,0.59l0.73,-0.04l1.12,0.51l1.03,-0.39l1.07,0.65l0.92,-0.02l0.21,0.47l-0.71,0.01l-0.29,0.34l1.75,2.14l1.64,0.18l2.21,1.14l1.47,1.72l0.67,-0.07l0.41,0.37l-1.57,0.55l-0.18,0.63l2.16,1.28l-0.22,0.75l1.74,1.13l0.58,0.79l0.82,-0.05l1.56,0.52l0.51,0.45l0.14,0.61l2.14,0.56l1.96,1.16l1.82,1.63l0.39,0.96l1.19,0.37l1.05,0.92l-0.12,0.41l0.45,0.47l1.93,1.39l4.48,2.43l1.5,1.94l1.21,0.76l1.38,0.67l0.93,0.04l0.77,0.37l0.03,0.38l1.6,0.03l1.23,0.61l0.47,0.58l0.29,-0.26l1.69,1.44l1.68,2.36l1.24,0.84l0.65,1.11l1.25,0.49l-27.91,60.77l0.17,0.48l1.69,1.44l0.83,-0.19l1.44,1.5l2.05,-0.3l2.16,0.82l-0.98,1.08l-0.15,0.61l0.53,1.11l1.01,1.05l0.05,1.28l2.81,5.56l-0.47,2.71l0.54,0.33l1.98,-0.35l0.06,0.23l-1.19,0.71l0.29,0.54l0.84,-0.22l1.03,0.71l0.36,1.46l-0.28,0.03l-0.1,0.51l0.26,0.36l1.11,0.26l-0.24,0.59l0.49,0.49l-0.11,0.51l-0.36,-0.03l-0.12,-0.59l-0.85,-0.8l-0.47,-0.03l-1.0,0.68l-0.32,-0.86l-1.11,-0.57l-1.15,-1.83l0.58,-0.48l-0.09,-0.3l-0.99,-0.27l-0.56,-1.13l-0.02,-1.29l-1.34,-2.12l0.09,-0.76l-1.17,-0.46l-1.47,-1.72l-0.33,-0.8l-1.65,-1.66l1.58,-0.72l-0.4,0.98l0.71,0.53l0.48,-0.34l0.48,-1.49l0.98,0.8l0.73,-0.31l-0.53,-0.92l-0.81,-0.46l-0.73,-1.81l-0.41,-0.17l-2.16,1.02l-2.27,-0.06l-1.73,-1.01l-1.8,-1.85l0.52,-0.4l0.26,-0.96l-0.45,-1.04l-0.92,0.09l-0.12,0.64l-0.81,-0.05l-1.0,-1.05l-3.3,-2.31l-5.2,-1.56l-0.48,-1.29l0.16,-0.55l-1.83,-0.99l-0.64,-1.23l0.85,-0.63l0.26,-0.77l1.16,-0.21l0.15,-0.7l-0.98,-0.3l-2.56,1.0l-1.03,-0.01l-0.22,-0.7l-0.85,-0.75l1.1,-0.51l0.19,-0.4l-0.31,-0.45l-0.64,-0.02l-0.47,-0.8l0.14,-0.59l-0.49,-1.17l-0.45,-0.22l-0.62,0.19l-0.57,-0.49l0.25,-0.73l0.46,-0.09l1.22,0.53l0.42,-0.5l-0.16,-0.48l-1.49,-0.88l-1.82,0.34l-0.6,-0.61l-1.17,-0.28l-0.22,-0.32l0.32,-1.1l-0.72,-0.3l0.35,-0.97l-0.33,-0.29l-2.04,0.78l-0.28,-0.64l-1.38,-0.22l-0.75,0.57l0.31,0.89l-1.75,-0.34l-0.8,0.99l0.26,0.62l0.9,-0.03l-0.2,0.34l-1.52,0.34l-0.23,0.63l0.38,0.29l1.02,-0.16l0.49,0.83l-0.47,0.61l-0.59,-0.24l-0.7,0.58l0.05,0.63l-0.31,0.35l-0.27,-0.15l-0.68,0.39l-1.38,-1.05l0.03,-0.72l-1.08,-0.12l0.11,-0.8l-0.55,-0.46l-1.0,1.06l-1.09,-0.68l-0.44,0.5l-0.48,-0.1l-0.2,0.41l-0.8,-0.43l-0.29,0.55l-0.7,-0.52l-1.3,0.56l-0.16,-0.45l-0.91,-0.04l-0.56,0.81l-1.73,0.25l-1.02,-0.92l-0.6,0.32l-0.44,-0.36l-1.29,0.01l-0.44,-1.08l0.64,0.17l0.17,-0.48l0.68,0.04l0.89,0.91l0.56,-0.11l0.11,-0.54l0.9,0.16l1.67,-0.74l0.32,-0.52l-0.22,-0.4l-2.72,-0.16l-0.79,-1.25l1.54,-1.19l1.91,-0.52l0.81,-0.85l0.52,-0.09l0.76,-1.03l0.15,-1.27l1.37,0.34l3.53,-0.14l0.24,1.07l0.66,0.57l1.41,0.31l2.69,2.59l0.5,-0.37l-0.13,-0.93l-0.99,-0.67l-1.76,-2.54l1.94,-0.66l2.25,0.33l0.05,-0.75l-1.75,-0.86l-1.62,0.15l-0.71,0.63l-1.07,-0.92l-0.7,-0.18l0.17,-0.32l-0.28,-0.7l-1.24,0.32l-1.57,-0.23l-0.99,0.48l-1.49,-0.52l-1.37,0.05l-0.78,0.4l-0.2,0.55l-1.24,-0.08l-1.92,0.49l-0.59,0.81l-0.62,0.26l-0.75,-0.02l-0.97,-1.32l-1.1,-0.29l-0.3,0.28l0.16,0.51l0.44,0.07l0.66,2.11l-0.91,0.44l-2.4,-0.95l-0.46,0.21l0.03,0.68l0.78,0.42l-0.2,0.15l-0.56,0.01l-0.54,-1.57l-0.76,0.74l-0.24,-0.5l-0.88,0.16l-0.13,0.57l-0.85,-0.44l-0.36,0.28l0.3,0.67l-1.93,-0.49l-0.81,1.18l-0.83,0.28l-0.17,1.22l0.33,0.36l0.71,-0.05l1.13,0.82l0.76,1.64l-0.81,0.65l-1.11,0.16l-1.09,-0.54l-0.98,0.53l-0.75,-0.18l-0.37,0.73l-1.4,-0.13l-0.46,0.82l-0.5,-0.62l-0.4,0.44l-1.47,0.04l-1.12,-0.71l-1.09,0.61l-0.67,-0.22l-0.91,0.37l-0.64,-0.78l-0.94,0.73l-0.49,-0.21l-0.32,0.36l-0.62,-0.1l-0.41,-0.5l-0.83,0.37l-2.51,-0.14l-0.57,0.44l0.28,1.17l-0.59,0.14l-1.31,-0.59l-0.58,0.52l-0.3,-0.46l-2.04,0.38l-0.15,-0.68l-0.48,-0.37l-0.79,0.47l-0.83,0.0l-0.29,0.61l-0.03,-0.62l-0.42,-0.3l-1.95,-0.18l-0.77,0.39l-0.34,-0.37l-0.72,-0.1l-1.8,0.43l-0.28,0.75l-0.4,-0.03l-0.82,0.77l-2.9,-0.76l-0.87,-0.79l-0.66,0.16l-0.84,-0.82l-1.36,-0.26l-0.93,0.26ZM89.01,536.65l-0.02,0.01l-0.0,0.03l0.02,-0.04ZM89.06,536.61l0.02,-0.01l-0.01,0.01l-0.0,0.01ZM91.61,484.22l-0.0,0.01l-0.0,-0.01l0.01,0.0ZM87.17,484.0l-0.0,-0.0l0.01,-0.0l-0.0,0.01l-0.01,-0.0ZM186.66,475.29l-0.0,0.02l-0.01,-0.01l0.01,-0.0ZM156.69,531.75l-0.95,1.06l-0.87,0.02l-0.13,-0.28l0.69,-0.51l1.26,-0.28ZM151.45,532.97l-0.11,0.02l0.12,-0.04l-0.01,0.02ZM152.06,535.54l-0.09,-0.14l0.41,-0.11l-0.1,0.3l-0.22,-0.05ZM116.92,535.18l-0.13,0.11l-0.06,-0.02l0.04,-0.19l0.16,0.1ZM90.72,536.66l0.27,-0.19l0.07,0.3l-0.17,0.07l-0.17,-0.19ZM121.46,528.8l-0.0,-0.02l0.04,0.01l-0.03,0.01ZM186.96,558.95l-0.09,-1.09l0.4,-0.11l0.13,0.57l-0.44,0.62ZM196.09,568.76l2.06,0.17l0.88,-0.72l0.4,-0.93l0.62,0.05l0.66,-0.45l0.12,-0.56l3.59,0.11l1.22,2.1l-0.59,0.6l0.11,1.69l1.05,0.86l0.25,0.97l0.46,0.34l0.11,1.76l1.72,2.25l0.24,1.0l-1.26,-0.23l-0.94,0.69l-0.72,1.06l-0.71,-1.34l-1.02,-0.73l0.15,-0.58l-0.32,-1.25l0.48,-1.41l-0.8,-0.55l0.41,-2.32l-0.18,-1.24l0.62,-1.53l-0.66,-0.25l-0.62,0.87l-0.78,-0.09l0.03,0.58l-0.38,0.41l0.37,1.24l-0.41,0.99l0.15,1.56l-0.41,1.27l0.03,2.19l-0.37,0.45l-0.41,-0.46l0.02,-1.59l-0.29,-0.45l-0.66,0.28l-1.11,-0.29l0.47,-0.38l0.24,-0.99l-0.35,-1.47l1.14,0.14l0.45,-0.45l-0.11,-0.36l-0.86,-0.52l-0.27,0.12l-0.01,-1.01l-0.61,-0.4l-0.96,1.15l0.46,0.38l-0.33,0.4l-0.04,-0.54l-0.68,-0.29l0.29,-0.67l-0.28,-0.54l-0.39,-0.02l-0.2,-0.62l-0.47,-0.15l-0.26,0.42l-0.35,-0.7ZM209.19,578.54l0.61,1.19l-0.23,0.77l0.66,1.82l0.05,1.22l1.73,7.29l-0.66,0.56l0.03,0.64l1.0,0.69l-0.59,0.84l0.05,0.52l0.72,0.67l-0.2,1.56l0.37,0.44l1.07,0.31l1.71,2.17l1.4,0.95l0.39,0.88l0.67,0.5l0.09,0.91l1.53,1.02l-0.19,0.84l-1.17,1.01l-0.41,1.68l-0.0,2.19l-2.07,1.87l-1.09,0.57l-0.63,-0.13l-0.02,-1.13l-0.64,0.07l-0.3,1.04l-0.22,0.05l0.16,-1.54l1.09,0.23l2.31,-1.69l-0.23,-0.63l-0.64,0.13l-0.33,-0.61l-0.71,0.13l0.71,-2.09l0.22,-1.84l-0.43,-0.29l-0.4,-1.06l0.62,-0.2l0.58,-0.88l-0.43,-0.27l-1.78,0.52l-0.59,-0.36l-2.75,0.29l-0.13,0.71l0.35,0.37l-0.57,0.72l-0.64,-0.46l-0.2,1.01l-0.3,-0.39l0.1,-0.81l0.89,-0.27l0.51,-0.97l0.54,-0.2l0.43,-1.37l1.49,0.53l1.01,-0.36l-0.17,-0.59l-1.8,-0.6l0.03,-1.02l-0.82,-0.63l0.03,-0.53l-0.51,-0.72l0.35,-0.41l-0.16,-0.68l-0.59,-0.0l0.81,-0.68l0.22,-0.62l-0.41,-0.27l-0.79,0.23l-0.68,-1.21l0.4,-0.26l0.21,-1.19l-0.39,-0.3l-0.8,0.09l-0.48,-1.2l-0.52,-0.26l-0.49,0.27l-0.37,-0.39l0.13,-0.25l1.84,0.29l0.62,-0.37l-0.23,-0.67l-1.19,-0.13l0.23,-0.72l-0.6,-0.28l0.07,-0.27l0.81,-0.01l0.81,1.13l0.62,-0.14l0.04,-0.52l-1.77,-2.58l0.17,-0.56l1.59,1.01l0.37,-0.69l-0.4,-0.48l-1.89,-0.89l0.24,-0.34l-0.2,-0.47l0.54,-0.81l-0.81,-0.3l-0.88,0.87l-0.2,-0.58l0.08,-0.72l0.74,-0.62l0.17,-0.66l0.54,-0.5l0.92,-0.14ZM214.84,608.68l-0.72,0.37l-0.3,-0.26l-0.82,0.1l0.74,-0.58l1.09,0.36ZM207.55,585.56l-0.21,-0.06l0.0,-0.24l0.08,0.17l0.13,0.13ZM124.33,461.82l-0.72,-0.79l0.08,-0.62l0.61,0.33l0.02,1.08ZM96.68,478.86l-0.08,-0.01l0.0,-0.01l0.08,0.02ZM87.61,480.71l-0.14,-0.07l0.02,0.0l0.12,0.07ZM87.75,487.21l-0.01,0.0l-0.04,-0.04l0.05,0.04ZM210.21,605.25l0.95,-0.39l0.15,-0.88l1.01,-0.37l0.59,-1.12l0.76,0.04l0.47,2.53l-1.46,2.49l0.34,-0.93l-0.25,-0.46l0.16,-1.74l-0.39,-0.42l-0.42,0.19l-0.21,0.58l-0.85,0.26l-0.29,1.23l-0.57,-1.01ZM204.53,604.41l0.23,-0.52l-0.58,-0.47l0.16,-0.56l-0.41,-0.26l1.05,-0.38l0.21,-0.67l-2.13,-0.56l1.59,-0.9l0.16,-0.86l-0.36,-0.08l0.35,-1.05l0.21,0.49l1.38,0.95l0.65,1.87l-0.18,0.82l-0.68,0.31l-0.12,0.51l-0.79,0.23l-0.06,0.42l0.07,0.51l0.76,-0.09l-0.11,0.29l0.38,0.45l0.87,0.16l0.31,0.67l-0.54,-0.15l-0.4,0.8l0.23,0.39l0.85,0.22l-1.39,0.74l0.11,0.7l0.57,0.32l-0.22,0.31l0.26,0.63l-0.39,0.4l-0.4,-0.2l0.24,-0.39l-0.45,-1.27l0.19,-0.92l-0.49,-0.5l-0.25,-1.87l-0.67,0.18l-0.2,-0.66ZM204.7,605.12l-0.02,0.03l0.0,-0.0l0.02,-0.03ZM204.91,597.51l-0.15,-0.81l-1.16,-0.79l0.71,0.03l0.44,0.61l0.43,-0.21l0.17,0.98l-0.44,0.18ZM204.03,589.42l1.73,1.0l0.58,0.52l0.11,0.57l0.56,0.15l0.24,-0.39l0.54,0.65l-0.54,1.63l-0.36,-1.55l-0.5,-0.5l-0.56,0.05l-0.21,0.96l0.31,0.54l-0.25,0.39l0.51,0.85l-0.29,0.21l-0.99,-0.68l-0.46,0.33l-0.4,-0.11l0.95,-2.9l-0.98,-1.74ZM204.3,590.82l0.01,0.01l0.01,0.01l-0.01,-0.0l-0.01,-0.01ZM201.28,587.91l0.24,-0.68l0.52,-0.17l-0.03,-0.45l0.42,-0.22l0.35,0.32l0.6,-0.35l-0.0,-0.8l-0.62,-0.4l0.7,-0.07l0.24,-0.65l-1.03,-0.28l-0.02,-1.43l0.48,-2.46l0.45,-0.43l0.87,0.22l0.37,0.4l-0.69,2.23l0.41,0.23l0.08,1.49l0.51,0.53l-0.12,0.39l-0.62,-0.22l-0.31,0.8l-0.69,0.34l0.04,0.32l-0.11,0.42l-0.22,0.32l-1.81,0.61ZM204.42,586.23l0.02,0.16l-0.19,-0.27l0.07,0.06l0.09,0.05ZM203.16,578.77l0.02,-0.02l0.01,0.06l-0.01,0.0l-0.03,-0.05ZM202.08,593.81l-0.03,-0.32l0.05,-0.01l0.09,0.19l-0.11,0.14ZM202.25,593.0l-0.25,-0.54l0.16,-0.07l0.34,0.48l-0.24,0.13ZM201.87,592.45l-0.2,-0.02l-0.02,-0.03l0.04,-0.01l0.17,0.06ZM201.97,591.45l-0.19,-0.44l-0.52,-0.05l0.08,-0.24l1.42,-0.09l-0.01,0.81l-0.39,0.25l-0.38,-0.25ZM195.26,578.67l0.22,-0.17l0.78,1.25l0.56,-0.45l-0.67,-1.58l0.86,0.26l0.05,-1.05l0.36,0.52l1.18,-0.42l0.77,0.97l-0.44,0.2l-0.8,-0.21l-0.17,0.33l-0.79,0.06l0.06,0.48l1.78,2.24l-0.07,0.74l0.9,0.5l1.08,0.01l-0.34,1.59l-0.43,-0.2l-2.75,-3.68l-0.61,0.35l0.09,0.44l-0.28,0.18l0.52,0.86l-0.19,0.56l0.29,0.37l-0.52,0.14l-0.52,-1.4l0.33,-0.19l-0.16,-0.49l-1.1,-2.22ZM197.81,583.65l0.03,-0.01l-0.01,0.04l-0.02,-0.02l-0.0,-0.0ZM197.98,583.86l0.65,0.02l0.94,0.95l0.23,2.78l-0.4,2.69l-0.3,0.89l-0.47,0.37l-0.63,1.95l-0.37,-2.3l1.14,-0.59l-0.06,-0.73l-0.28,-0.06l0.01,-0.56l-0.47,-0.3l-0.19,-0.68l-0.71,-0.04l0.39,-0.63l0.81,-0.06l0.22,-0.32l-0.13,-0.54l-0.66,-0.34l0.68,-0.34l-0.35,-1.27l-0.73,-0.27l0.59,-0.15l0.09,-0.48ZM196.56,583.11l-0.06,-0.04l0.15,-0.08l-0.09,0.12ZM199.05,579.52l1.11,-0.49l0.92,0.47l0.59,0.75l-0.17,0.31l-0.56,-0.63l-0.63,-0.07l-0.13,0.57l0.35,0.67l-1.49,-1.58ZM121.86,538.8l-0.0,-0.01l0.02,0.02l-0.02,-0.01ZM122.16,539.2l0.38,0.41l0.59,-0.1l-0.04,-0.62l0.83,0.53l0.61,-1.11l0.62,0.04l-0.13,0.7l0.46,0.88l-0.67,0.48l-0.23,-0.84l-0.37,-0.03l-0.81,0.68l-0.2,-0.29l-0.67,0.31l-0.36,-1.02ZM125.68,539.91l0.02,-0.0l-0.01,0.0l-0.01,-0.0ZM126.24,540.18l-0.05,-0.09l0.07,0.07l-0.02,0.02ZM126.1,539.97l-0.36,-0.07l0.27,-0.16l0.09,0.23ZM111.97,541.9l0.13,-1.11l-0.41,-0.51l0.57,-0.47l0.58,-0.31l0.5,0.27l1.58,-0.22l0.55,0.47l-0.75,0.07l0.02,0.5l0.56,0.37l-0.31,0.99l0.56,1.75l0.45,0.16l0.28,-0.39l-0.23,-0.7l0.33,-1.09l0.38,0.2l0.37,-0.33l1.06,0.15l0.41,-0.28l0.62,0.17l0.21,0.41l0.91,-0.72l0.49,0.31l-0.22,0.73l0.26,0.4l0.49,-0.02l0.33,-0.47l1.39,0.19l-0.09,0.39l-0.85,0.24l-0.21,0.41l0.21,1.1l0.75,0.33l-0.77,0.3l-2.35,-2.03l-0.88,0.42l-0.02,0.69l-0.56,-0.49l-0.44,0.12l-0.27,0.58l-1.74,-0.5l-0.49,0.58l-0.32,-0.15l-0.13,-0.86l-0.79,-0.03l-1.07,-1.18l-1.1,-0.44ZM119.11,544.38l0.82,0.17l0.33,0.72l-0.52,-0.07l-0.2,-0.66l-0.42,-0.16ZM117.78,540.47l-0.76,-0.83l0.17,-0.28l0.83,0.02l-0.24,1.09ZM121.13,540.99l0.32,0.07l-0.59,0.51l0.31,-0.44l-0.03,-0.14ZM113.0,545.5l-0.71,0.24l-0.07,-0.11l0.36,-0.03l0.42,-0.1ZM111.68,543.33l0.69,-0.15l0.23,0.13l-0.51,0.43l-0.41,-0.41ZM76.93,452.59l0.44,-0.56l0.74,-0.21l0.04,0.98l0.81,0.62l0.81,1.25l1.59,0.48l1.11,0.77l0.29,0.97l-0.62,0.7l1.28,1.78l-0.03,0.76l0.83,0.73l0.06,0.6l-0.76,-0.35l-1.49,0.03l-0.08,-1.15l-0.71,-1.29l0.16,-0.62l-1.2,-2.9l-0.96,-0.77l-1.79,-0.42l-0.51,-1.4ZM84.52,461.74l0.69,0.18l0.56,0.73l-0.43,0.12l-0.82,-1.03ZM75.58,485.5l0.07,-0.44l1.7,1.61l0.78,-0.27l0.53,0.4l0.88,-0.0l-0.06,0.37l0.83,0.24l0.29,0.89l1.02,0.89l-0.67,0.62l-0.55,1.49l-2.66,-1.39l-0.92,-0.99l-0.64,-2.06l-0.55,-0.58l-0.06,-0.77ZM55.82,528.18l0.22,-0.57l1.29,0.26l2.05,-0.81l0.73,0.9l0.76,-0.1l1.99,0.58l0.55,0.5l0.05,0.8l-0.49,1.14l-1.03,0.31l-2.5,-1.87l-2.52,0.16l-1.15,-0.81l0.05,-0.5ZM37.73,525.86l0.44,0.13l0.4,0.44l-0.66,-0.33l-0.17,-0.24ZM43.99,527.71l-0.32,-0.33l-0.55,0.04l0.82,-0.2l0.41,-0.61l-1.11,-1.43l0.35,-0.53l1.55,0.81l-0.4,0.52l0.03,0.83l-0.39,0.13l-0.39,0.76ZM42.84,527.18l-0.0,-0.0l0.0,0.0l0.0,0.0ZM43.98,526.54l0.02,-0.01l0.01,0.01l-0.02,0.0l-0.0,-0.0ZM42.63,527.12l-0.35,0.44l-0.22,-0.21l0.3,-0.36l-0.18,-0.32l0.39,-0.07l0.05,0.51ZM42.72,526.39l-0.0,-0.06l0.01,0.01l-0.01,0.05ZM31.87,524.21l0.91,-0.8l0.8,0.02l0.72,0.69l-1.15,0.35l-1.28,-0.25ZM35.31,524.02l0.44,-0.89l0.8,-0.04l0.97,0.45l0.25,0.65l-0.43,0.37l-2.04,-0.54ZM4.9,508.63l0.28,0.1l-0.04,0.24l-0.12,0.03l-0.12,-0.37ZM6.12,508.53l-0.05,-0.66l0.53,0.07l0.12,0.71l-0.59,-0.13Z\", \"name\": \"Alaska\"}, \"US-NJ\": {\"path\": \"M801.65,165.2l1.31,-1.55l0.48,-1.57l0.5,-0.62l0.54,-1.45l0.11,-2.05l0.67,-1.35l0.92,-0.71l14.12,4.16l-0.4,6.03l-0.35,0.55l-0.23,-0.44l-0.7,0.11l-0.26,1.18l-0.76,0.97l0.12,1.42l-0.46,0.6l0.08,1.71l0.58,0.62l1.2,0.29l1.38,-0.43l2.3,0.24l0.9,6.92l-0.56,0.39l0.18,0.66l-0.61,0.95l0.46,0.58l-0.21,0.6l0.53,1.94l-0.47,2.0l0.11,0.61l0.62,0.64l-0.39,1.13l-0.49,0.45l-0.01,0.59l-0.93,1.13l0.02,0.52l-1.07,0.1l0.09,1.21l0.64,0.83l-0.82,0.56l-0.18,1.15l1.05,0.77l-0.31,0.29l-0.17,-0.44l-0.53,-0.18l-0.5,0.22l-0.44,1.51l-1.28,0.61l-0.2,0.45l0.46,0.55l0.8,0.06l-0.66,1.26l-0.26,1.5l-0.68,0.65l0.19,0.48l0.4,0.04l-0.89,1.57l0.07,0.95l-1.65,1.72l-0.12,-1.34l0.36,-2.44l-0.11,-0.87l-0.58,-0.82l-0.89,-0.28l-1.11,0.34l-0.81,-0.35l-1.51,0.88l-0.31,-0.7l-1.62,-0.96l-1.0,0.04l-0.65,-0.71l-0.7,0.07l-3.24,-2.03l-0.06,-1.73l-1.02,-0.94l0.48,-0.68l0.0,-0.87l0.43,-0.83l-0.12,-0.73l0.51,-1.18l1.2,-1.16l2.6,-1.49l0.54,-0.86l-0.38,-0.85l0.5,-0.37l0.47,-1.44l1.24,-1.7l2.52,-2.22l0.18,-0.67l-0.47,-0.82l-4.26,-2.78l-0.75,-1.05l-0.9,0.24l-0.48,-0.33l-1.24,-2.46l-1.62,-0.02l-1.0,-3.44l1.02,-1.03l0.36,-2.23l-1.87,-1.91Z\", \"name\": \"New Jersey\"}, \"US-CO\": {\"path\": \"M364.23,239.52l-1.22,65.86l-29.29,-0.9l-29.38,-1.43l-29.35,-1.95l-32.17,-2.75l8.32,-87.13l27.79,2.39l28.22,1.92l29.58,1.46l27.95,0.87l-0.46,21.65Z\", \"name\": \"Colorado\"}, \"US-MD\": {\"path\": \"M740.67,219.62l-2.04,-10.06l19.85,-4.49l-0.66,1.29l-0.94,0.08l-1.54,0.81l0.16,0.7l-0.42,0.49l0.23,0.78l-1.76,0.5l-1.48,0.03l-1.14,-0.39l0.21,-0.36l-0.3,-0.49l-1.11,-0.31l-0.47,1.8l-1.63,2.84l-1.37,-0.39l-1.03,0.62l-0.41,1.26l-1.6,1.93l-0.36,1.04l-0.88,0.45l-1.3,1.87ZM760.74,204.54l36.93,-9.13l8.48,26.19l0.45,0.26l1.06,-0.21l8.18,-2.08l-0.9,0.53l0.31,0.64l0.52,0.01l0.37,0.76l0.52,-0.05l-0.38,1.96l-0.12,-0.26l-0.47,0.07l-0.73,0.86l-0.17,2.7l-0.6,0.19l-0.36,0.71l-0.02,1.66l-3.62,1.37l-0.45,0.7l-2.2,0.43l-0.56,0.65l-0.3,-1.09l0.5,-0.31l0.86,-1.84l-0.4,-0.51l-0.45,0.12l0.08,-0.5l-0.44,-0.42l-2.29,0.63l0.3,-0.6l1.15,-0.83l-0.17,-0.69l-1.36,-0.18l0.38,-2.24l-0.18,-1.02l-0.91,0.16l-0.53,1.76l-0.34,-0.68l-0.62,-0.07l-0.44,0.47l-0.5,1.39l0.53,1.02l-2.87,-2.14l-0.43,-0.19l-0.61,0.36l-0.73,-0.76l0.33,-1.67l0.76,-0.6l-0.08,-1.35l2.55,0.23l0.78,-1.5l-0.32,-1.42l-0.72,0.27l-0.28,1.29l-0.98,-0.25l-0.38,-1.07l-0.52,-0.28l-0.55,0.23l-0.22,-0.68l-0.63,0.08l1.0,-0.82l0.22,-1.04l-0.54,-0.55l-0.75,0.83l-0.21,-0.61l1.06,-0.92l-0.25,-0.65l-0.54,-0.08l-0.51,-0.75l-0.42,0.22l-0.53,-0.37l0.83,-1.03l-0.24,-1.02l0.84,-1.95l-0.07,-0.86l-0.46,0.02l-0.66,0.66l-0.56,-0.16l-0.48,0.45l-0.19,0.97l-0.95,-1.2l0.75,-3.46l0.59,-0.51l0.07,-0.74l3.89,-0.78l0.49,-0.41l-0.23,-0.67l-0.45,-0.07l-2.38,0.56l0.88,-1.55l1.42,-0.05l0.35,-0.5l-0.99,-0.67l0.44,-1.9l-0.63,-0.32l-0.48,0.39l-0.87,1.96l0.21,-2.02l-0.59,-0.34l-0.88,1.43l-1.42,0.34l-0.31,1.65l0.39,0.53l0.65,0.12l-1.45,1.92l-0.2,-1.64l-0.64,-0.42l-0.61,0.73l0.07,1.45l-0.85,-0.29l-1.16,0.64l0.02,0.71l1.01,0.27l-0.37,0.54l-0.83,0.22l-0.05,0.34l-0.44,-0.04l-0.35,0.64l1.2,1.22l-0.29,0.17l-1.52,-0.76l-1.33,0.48l0.16,0.69l0.82,0.1l1.26,1.21l1.49,0.58l0.1,0.28l-0.44,0.33l-1.37,0.5l-0.12,1.19l1.83,1.04l0.47,0.63l-0.66,-0.43l-1.05,0.29l0.2,0.64l0.92,0.48l-0.34,0.47l0.4,1.15l0.6,0.09l-0.63,1.26l0.13,0.43l0.63,0.65l1.28,4.18l2.83,2.58l-0.01,0.35l-0.38,0.54l-0.67,-1.23l-1.21,-0.22l-1.69,-0.87l-1.51,-3.64l-0.74,-0.68l-0.28,0.69l1.17,3.94l0.65,0.92l1.45,0.81l1.3,0.31l1.49,1.39l0.89,-0.33l0.37,1.32l1.47,1.47l0.1,1.07l-1.08,-0.68l-0.33,-1.23l-0.63,-0.45l-0.45,0.04l-0.13,0.44l0.27,0.78l-0.74,0.13l-0.62,-0.73l-1.16,-0.38l-1.53,0.0l-0.92,0.43l-0.55,-0.2l-1.0,-2.19l-1.26,-0.71l-0.46,0.14l0.01,0.48l1.19,2.0l-0.67,-0.12l-0.28,-0.5l-0.89,-0.4l-1.61,-2.6l-0.48,-0.14l-0.43,1.47l-0.25,-0.74l-0.62,-0.04l-0.4,0.46l0.33,0.72l-0.18,0.69l-0.64,0.59l-0.57,-0.26l-0.63,-1.86l0.25,-1.14l0.71,-0.37l0.2,-0.51l-0.37,-0.52l0.83,-0.52l0.21,-1.61l1.06,-0.35l0.07,-0.66l-0.33,-0.42l0.23,-0.42l-0.38,-0.38l-0.04,-0.7l1.27,-2.2l-0.14,-0.54l-2.72,-1.68l-0.56,0.14l-0.69,1.19l-1.81,-0.37l-1.09,-1.19l-2.96,-0.09l-1.25,-0.91l0.61,-1.35l-0.4,-0.97l-1.19,-0.3l-0.89,-0.66l-2.69,0.07l-0.36,-0.23l-0.11,-1.26l-1.04,-0.6l0.09,-1.2l-0.51,-0.29l-0.49,0.19l-0.23,-0.64l-0.52,-0.13l0.26,-0.83l-0.45,-0.58l-0.69,-0.12l-1.81,0.67l-2.24,-1.27ZM790.07,212.25l0.29,-0.0l0.93,0.21l-0.44,0.4l-0.78,-0.61ZM796.79,218.15l0.0,0.16l-0.13,-0.11l0.13,-0.06ZM803.02,225.62l-0.02,0.33l-0.21,-0.15l0.23,-0.19ZM806.99,229.08l-0.16,0.3l-0.12,0.07l0.02,-0.25l0.26,-0.12ZM797.54,220.57l-0.06,0.01l-0.09,0.03l0.12,-0.06l0.03,0.02ZM797.21,220.69l-0.26,0.57l-0.18,0.12l0.15,-0.61l0.29,-0.07ZM796.09,217.04l-0.61,0.32l-0.58,-0.42l0.02,-0.53l0.16,-0.23l0.68,0.3l0.32,0.56ZM794.46,213.09l-0.25,0.5l-0.8,0.39l0.15,-1.17l0.9,0.27Z\", \"name\": \"Maryland\"}, \"US-MA\": {\"path\": \"M820.4,120.02l30.04,-8.0l1.53,-1.8l0.34,-1.48l0.95,-0.35l0.61,-1.04l1.17,-1.05l1.35,-0.1l-0.44,1.05l1.03,0.32l0.21,1.55l1.17,0.55l-0.06,0.32l0.39,0.28l1.31,0.19l-0.17,0.56l-2.29,1.79l-0.05,1.07l0.45,0.16l-1.11,1.41l0.23,1.08l-1.01,0.96l0.58,1.41l1.4,0.45l0.5,0.63l1.36,-0.57l0.33,-0.59l1.2,0.09l0.79,0.47l0.23,0.68l1.79,1.37l-0.07,1.25l-0.56,0.55l0.12,0.6l1.23,0.66l1.73,-0.23l0.68,1.2l0.21,1.14l0.89,0.68l1.33,0.41l1.48,-0.12l0.43,0.38l1.05,-0.23l2.92,-2.34l0.82,-1.11l0.54,0.02l0.56,1.86l-3.32,1.52l-0.94,0.82l-2.75,0.98l-0.49,1.64l-1.93,1.37l-0.82,-2.64l0.11,-1.34l-0.55,-0.31l-0.5,0.39l-0.93,-0.1l-0.3,0.51l0.25,0.92l-0.26,0.79l-0.4,0.06l-0.63,1.1l-0.6,-0.2l-0.5,0.48l0.22,1.86l-0.9,0.87l-0.63,-0.8l-0.47,0.01l-0.11,0.55l-0.26,0.03l-0.71,-2.03l-1.02,-0.35l0.44,-2.5l-0.21,-0.4l-0.78,0.4l-0.29,1.47l-0.69,0.2l-1.4,-0.64l-0.78,-2.12l-0.8,-0.22l-0.78,-2.15l-0.49,-0.24l-6.13,2.0l-0.3,-0.15l-14.84,4.19l-0.28,0.5l-0.46,-0.28l-0.86,0.17l-9.54,2.36l-0.25,-0.18l-0.32,-14.66ZM860.63,110.12l-0.02,-0.37l-0.14,-0.48l0.51,0.23l-0.35,0.62ZM876.24,122.86l-0.12,-0.42l0.25,0.35l-0.13,0.06ZM875.23,121.15l-0.78,0.0l-0.55,-1.2l0.56,0.44l0.77,0.76ZM871.43,119.57l-0.08,0.14l-0.09,-0.07l0.0,-0.0l0.17,-0.07Z\", \"name\": \"Massachusetts\"}, \"US-AL\": {\"path\": \"M608.67,337.4l25.17,-2.91l19.4,-2.75l14.04,43.29l1.01,2.45l1.17,1.59l0.59,1.87l2.24,2.5l0.92,1.8l-0.11,2.13l1.8,1.13l-0.17,0.74l-0.63,0.1l-0.16,0.7l-0.98,0.84l-0.22,2.29l0.25,1.48l-0.76,2.3l-0.14,1.84l1.1,2.94l1.21,1.52l0.53,1.6l-0.08,5.02l-0.25,0.81l0.48,2.03l1.35,1.16l1.14,2.07l-47.64,6.92l-0.42,0.61l-0.08,2.99l2.64,2.75l2.0,0.96l-0.34,2.7l0.56,1.61l0.43,0.39l-0.94,1.69l-1.24,1.0l-1.13,-0.75l-0.34,0.49l0.66,1.46l-2.81,1.05l0.29,-0.63l-0.45,-0.86l-0.99,-0.76l-0.1,-1.11l-0.57,-0.22l-0.52,0.61l-0.32,-0.1l-0.89,-1.53l0.41,-1.67l-0.97,-2.21l-1.32,-0.65l-0.3,-0.89l-0.56,-0.17l-0.37,0.61l0.15,0.35l-0.77,3.1l-0.01,5.08l-0.59,0.0l-0.24,-0.71l-2.22,-0.44l-1.64,0.31l-5.46,-31.98l-0.99,-66.48l-0.02,-0.37l-1.07,-0.63l-0.69,-1.02Z\", \"name\": \"Alabama\"}, \"US-MO\": {\"path\": \"M468.72,225.49l24.71,-0.73l18.94,-1.42l22.1,-2.58l0.42,0.35l0.39,0.91l2.43,1.65l0.29,0.74l1.21,0.87l-0.51,1.36l-0.1,3.21l0.78,3.65l0.95,1.44l0.03,1.59l1.11,1.37l0.46,1.55l4.96,4.1l1.06,1.69l4.93,3.31l0.7,1.15l0.27,1.62l0.5,0.82l-0.18,0.69l0.47,1.8l0.97,1.63l0.77,0.73l1.04,0.16l0.83,-0.56l0.84,-1.4l0.57,-0.19l2.41,0.61l1.68,0.76l0.84,0.77l-0.97,1.95l0.26,2.28l-2.37,6.86l0.01,1.02l0.7,1.92l4.67,4.05l1.99,1.05l1.46,0.09l1.66,1.3l1.92,0.8l1.5,2.11l2.04,0.83l0.42,2.96l1.72,2.9l-1.1,1.94l0.18,1.38l0.75,0.33l2.31,4.25l1.94,0.92l0.55,-0.32l0.0,-0.65l0.87,1.1l1.07,-0.08l0.14,1.85l-0.37,1.07l0.53,1.59l-1.07,3.86l-0.51,0.07l-1.37,-1.13l-0.65,0.13l-0.78,3.34l-0.52,0.74l0.13,-1.06l-0.56,-1.09l-0.97,-0.2l-0.74,0.63l0.02,1.05l0.53,0.66l-0.04,0.7l0.58,1.34l-0.2,0.4l-1.2,0.39l-0.17,0.41l0.15,0.55l0.86,0.84l-1.71,0.37l-0.14,0.62l1.53,1.97l-0.89,0.75l-0.63,2.13l-10.61,1.42l1.06,-2.28l0.87,-0.61l0.18,-0.87l1.43,-0.96l0.25,-0.96l0.63,-0.37l0.29,-0.59l-0.22,-2.28l-1.05,-0.75l-0.2,-0.77l-1.09,-1.18l-39.24,3.6l-37.71,2.58l-3.21,-58.18l-1.03,-0.63l-1.2,-0.02l-1.52,-0.73l-0.19,-0.93l-1.11,-1.3l-0.36,-1.55l-0.55,-0.09l-0.3,-0.56l-1.13,-0.66l-1.4,-1.84l0.73,-0.51l0.09,-1.24l1.12,-1.27l0.09,-0.79l1.01,0.16l0.56,-0.43l-0.2,-2.24l-1.02,-0.74l-0.32,-1.1l-1.17,-0.01l-1.31,0.96l-0.81,-0.7l-0.73,-0.17l-2.67,-2.35l-1.05,-0.28l0.13,-1.6l-1.32,-1.72l0.1,-1.01l-0.37,-0.36l-1.01,-0.18l-0.59,-0.85l-0.84,-0.26l0.07,-0.52l-1.24,-2.88l-0.0,-0.74l-0.4,-0.49l-0.85,-0.29l-0.05,-0.54ZM583.78,294.53l-0.1,-0.1l-0.08,-0.15l0.11,-0.01l0.07,0.26Z\", \"name\": \"Missouri\"}, \"US-MN\": {\"path\": \"M443.67,67.68l-0.4,-1.37l0.05,-1.19l-0.48,-0.53l-1.36,-3.77l0.0,-3.22l-0.47,-1.97l0.27,-1.12l-0.57,-2.32l0.73,-2.56l-2.06,-6.89l29.55,-1.22l0.47,-0.81l-0.38,-7.12l2.84,0.15l1.24,0.82l0.38,2.69l1.73,5.31l0.13,2.3l0.52,0.86l1.46,1.05l1.3,0.49l3.23,-0.36l0.39,0.85l0.54,0.38l5.25,0.04l0.38,0.24l0.54,1.58l0.72,0.61l4.27,-0.78l0.77,-0.65l0.07,-0.69l0.69,-0.35l1.74,-0.44l3.97,-0.02l1.42,0.7l3.38,0.66l-1.01,0.79l0.0,0.82l0.51,0.45l2.91,-0.06l0.52,2.08l1.58,2.29l0.71,0.05l1.03,-0.78l-0.04,-1.73l2.67,-0.46l1.43,2.16l2.01,0.79l1.54,0.18l0.54,0.57l-0.03,0.83l0.58,0.35l1.32,0.06l0.19,0.75l0.41,0.1l1.2,-0.22l1.12,0.22l2.21,-0.85l2.78,-2.55l2.49,-1.54l1.24,2.52l0.96,0.51l2.23,-0.66l0.87,0.36l5.98,-1.3l0.56,0.18l1.32,1.64l1.24,0.59l0.62,-0.01l1.61,-0.83l1.3,0.1l-0.89,1.0l-4.69,3.07l-6.35,2.82l-3.68,2.47l-2.15,2.49l-0.96,0.57l-6.62,8.67l-0.95,0.61l-1.07,1.56l-1.96,1.97l-4.18,3.55l-0.86,1.78l-0.55,0.44l-0.14,0.96l-0.78,-0.01l-0.46,0.51l0.98,12.22l-0.79,1.2l-1.04,0.08l-0.52,0.82l-0.83,0.15l-0.61,0.83l-2.06,1.19l-0.94,1.86l0.06,0.72l-1.69,2.39l-0.01,2.06l0.38,0.91l2.15,0.39l1.42,2.49l-0.52,1.92l-0.71,1.25l-0.05,2.12l0.45,1.32l-0.71,1.23l0.91,3.14l-0.51,4.08l3.95,3.03l3.02,0.4l1.89,2.25l2.87,0.5l2.45,1.93l2.39,3.59l2.63,1.8l2.09,0.09l1.07,0.71l0.88,0.1l0.82,1.36l1.26,0.84l0.28,2.03l0.68,1.3l0.39,4.82l-40.62,3.2l-40.63,2.09l-1.46,-38.98l-1.52,-2.05l-2.57,-0.79l-0.94,-1.91l-1.46,-1.79l0.21,-0.68l2.82,-2.34l0.93,-2.03l0.43,-2.53l-0.35,-1.58l0.23,-1.86l-0.18,-1.51l-0.5,-1.03l-0.18,-2.33l-1.81,-2.59l-0.47,-1.13l-0.21,-2.16l-0.66,-0.98l0.15,-1.66l-0.35,-1.52l0.53,-2.69l-1.08,-1.85l-0.49,-8.32l-0.42,-0.79l0.06,-3.92l-1.58,-3.95l-0.53,-0.65Z\", \"name\": \"Minnesota\"}, \"US-CA\": {\"path\": \"M3.07,175.36l0.87,-1.1l0.96,0.24l1.21,-2.15l0.92,0.12l0.64,-0.23l0.41,-0.57l-0.27,-0.82l-0.71,-0.36l1.52,-2.68l0.12,-0.78l-0.43,-0.48l0.1,-1.34l0.85,-0.88l1.17,-2.25l1.26,-3.01l0.39,-2.1l-0.28,-1.0l0.05,-3.89l-1.25,-1.24l0.92,-1.24l0.94,-2.81l32.73,8.13l32.57,7.34l-13.67,64.67l25.44,34.66l36.59,51.09l13.3,17.72l-0.19,2.73l0.73,0.94l0.21,1.71l0.85,0.63l0.81,2.56l-0.07,0.91l0.63,1.46l-0.16,1.36l3.8,3.82l0.01,0.5l-1.95,1.53l-3.11,1.26l-1.2,1.99l-1.72,1.14l-0.33,0.81l0.38,1.03l-0.51,0.51l-0.1,0.9l0.08,2.29l-0.6,0.72l-0.64,2.44l-2.02,2.47l-1.6,0.14l-0.42,0.51l0.33,0.89l-0.59,1.34l0.54,1.11l-0.01,1.19l-0.78,2.68l0.57,1.02l2.74,1.13l0.34,0.83l-0.19,2.4l-1.18,0.78l-0.42,1.37l-2.27,-0.62l-1.26,0.61l-43.36,-3.35l0.04,-0.76l0.39,-0.07l0.3,-0.56l-0.12,-1.38l-1.1,-1.65l-1.08,0.02l0.16,-1.13l-0.24,-1.11l0.35,-0.13l0.36,-0.93l0.05,-2.47l-0.39,-2.64l-2.46,-5.66l-3.47,-4.07l-1.29,-1.98l-2.42,-2.12l-2.07,-2.86l-2.01,-1.04l-1.23,0.18l-0.29,0.88l-1.56,-0.95l-0.11,-0.38l0.63,-0.52l0.22,-0.95l-0.46,-2.65l-1.0,-1.95l-0.7,-0.58l-2.17,-0.43l-1.45,-0.13l-1.11,0.3l-0.49,-0.59l-1.66,-0.65l-3.05,-1.95l-1.24,-1.35l-0.54,-2.64l-0.89,-0.66l-1.77,-2.24l-1.66,-1.3l-1.92,-0.51l-1.09,0.24l-1.1,-0.72l-1.51,-0.14l-2.0,-1.52l-2.34,-0.84l-5.72,-0.67l-0.4,-1.69l-1.01,-0.93l-0.92,-0.35l1.28,-2.62l-0.33,-1.38l0.84,-2.21l-0.65,-1.27l1.18,-2.39l0.32,-2.41l-0.99,-1.24l-1.32,-0.26l-1.34,-1.39l-0.08,-0.75l1.44,-1.4l-0.5,-2.3l-0.34,-0.54l-1.68,-0.76l-1.88,-4.27l-1.79,-1.16l-0.32,-2.63l-1.62,-2.61l-0.22,-2.75l-1.01,-0.76l-1.13,-3.38l-2.16,-2.3l-0.75,-1.6l0.04,-3.93l0.55,-1.46l-0.54,-0.6l0.52,-0.53l0.56,0.71l0.58,-0.1l0.8,-0.59l0.9,-1.64l0.83,0.01l0.08,-0.52l-0.51,-0.5l0.4,-0.88l-0.05,-0.93l-0.49,-2.22l-0.61,-1.2l-0.6,-0.44l-0.92,0.25l-2.02,-0.43l-1.45,-1.81l-0.86,-2.15l-0.53,-0.38l-0.32,-1.18l-0.46,-0.5l0.04,-1.12l0.85,-2.26l-0.21,-2.94l-0.89,-1.29l1.1,-2.74l0.21,-2.34l1.33,-0.2l0.23,1.52l-0.62,0.31l-0.1,2.71l1.73,1.17l0.7,1.42l1.0,0.72l0.4,1.01l0.89,0.41l0.85,-0.4l-0.19,-1.18l-0.68,-0.51l-0.37,-1.53l0.13,-1.99l-0.54,-1.26l-0.37,-0.02l-0.11,-0.14l0.62,-0.35l-0.0,-0.34l-1.62,-1.2l0.69,-0.67l-0.17,-1.88l-0.94,-0.36l-0.3,-0.61l1.07,-0.66l0.99,-0.01l0.96,-0.71l1.25,1.03l2.63,-0.1l5.01,2.23l0.53,-0.22l0.04,-0.59l0.61,-0.67l-0.3,0.75l0.39,0.76l0.81,-0.06l0.35,-0.49l1.35,1.6l0.7,-0.16l0.02,-0.38l-0.53,-1.14l-0.97,-0.74l-0.27,-0.8l-0.66,-0.38l-1.09,-0.07l0.27,-0.58l-0.25,-0.54l-2.48,1.29l-0.7,-0.34l-0.75,0.18l-0.18,-0.55l-1.09,-0.25l0.28,-0.66l-0.36,-0.69l-1.09,-0.17l-1.86,1.57l-0.34,-0.46l-1.36,-0.54l-0.36,-0.88l-1.36,-1.35l-2.59,0.52l0.1,0.92l-0.7,1.21l0.53,0.72l-0.88,0.92l-0.07,2.28l-0.37,-0.09l-1.52,-2.07l-1.18,-0.34l-1.16,-2.44l-1.41,-1.2l0.09,-0.69l-0.68,-0.18l0.73,-1.18l0.93,2.05l0.44,0.25l0.33,-0.38l-1.77,-5.65l-0.41,-0.59l-0.57,-0.2l0.2,-0.84l-0.53,-2.28l-2.72,-3.32l-1.0,-2.99l-3.45,-6.17l-0.03,-0.38l1.14,-1.43l0.12,-0.85l-0.51,-6.75l0.61,-1.87l1.33,-2.02l0.4,-3.04l-0.36,-1.21l0.19,-2.39l-0.7,-1.04l-1.24,-3.68l-0.57,-0.53l0.1,-0.93l-0.32,-0.88l-1.04,-0.88l-2.01,-3.32l0.52,-1.23l-0.26,-2.71l2.38,-3.44ZM33.36,240.61l0.01,-0.01l0.01,0.01l-0.02,-0.01ZM45.67,326.22l-0.02,0.03l0.02,-0.03l0.01,0.01ZM31.63,240.38l-0.09,0.14l-0.63,0.23l-0.2,-0.07l0.92,-0.3Z\", \"name\": \"California\"}, \"US-IA\": {\"path\": \"M452.94,162.22l42.82,-2.19l40.55,-3.19l0.96,2.52l2.0,1.0l0.08,0.59l-0.9,1.8l-0.16,1.04l0.9,5.09l0.92,1.26l0.39,1.75l1.46,1.72l4.94,0.85l1.27,2.03l-0.3,1.03l0.29,0.66l3.61,2.37l0.85,2.41l3.84,2.31l0.62,1.68l-0.31,4.21l-1.64,1.98l-0.5,1.94l0.13,1.28l-1.26,1.36l-2.51,0.97l-0.89,1.18l-0.55,0.25l-4.56,0.83l-0.89,0.73l-0.61,1.71l-0.15,2.55l0.4,1.08l2.01,1.47l0.54,2.65l-1.87,3.25l-0.22,2.24l-0.52,1.42l-2.88,1.39l-1.02,1.02l-0.2,0.99l0.72,0.87l0.2,2.15l-0.58,0.23l-1.34,-0.82l-0.31,-0.76l-1.29,-0.82l-0.29,-0.51l-0.88,-0.36l-0.3,-0.82l-0.95,-0.68l-22.3,2.61l-15.12,1.17l-7.59,0.51l-20.78,0.47l-0.22,-1.06l-1.3,-0.73l-0.33,-0.67l0.58,-1.16l-0.21,-0.95l0.22,-1.39l-0.36,-2.19l-0.6,-0.73l0.07,-3.65l-1.05,-0.5l0.05,-0.91l0.71,-1.02l-0.05,-0.44l-1.31,-0.56l0.33,-2.54l-0.41,-0.45l-0.89,-0.16l0.23,-0.8l-0.3,-0.58l-0.51,-0.25l-0.74,0.23l-0.42,-2.81l0.5,-2.36l-0.2,-0.67l-1.36,-1.71l-0.08,-1.92l-1.78,-1.54l-0.36,-1.74l-1.09,-0.94l0.03,-2.18l-1.1,-1.87l0.21,-1.7l-0.27,-1.08l-1.38,-0.67l-0.87,-2.17l0.05,-0.63l-1.81,-1.82l0.56,-1.61l0.54,-0.47l0.73,-2.68l0.0,-1.68l0.55,-0.69l0.21,-1.19l-0.51,-2.24l-1.33,-0.29l-0.05,-0.73l0.45,-0.56l-0.0,-1.71l-0.95,-1.42l-0.05,-0.87Z\", \"name\": \"Iowa\"}, \"US-MI\": {\"path\": \"M612.25,185.8l1.83,-2.17l0.7,-1.59l1.18,-4.4l1.43,-3.05l1.01,-5.05l0.09,-5.37l-0.86,-5.54l-2.4,-5.17l0.6,-0.5l0.3,-0.79l-0.57,-0.42l-1.08,0.55l-3.82,-7.03l-0.21,-1.1l1.13,-2.68l-0.01,-0.97l-0.74,-3.13l-1.29,-1.65l-0.05,-0.62l1.73,-2.73l1.22,-4.14l-0.21,-5.35l-0.77,-1.59l1.09,-1.15l0.81,-0.02l0.56,-0.47l-0.27,-3.49l1.08,-0.11l0.67,-1.43l1.18,0.47l0.66,-0.33l0.76,-2.59l0.82,-1.2l0.56,-1.68l0.55,-0.18l-0.58,0.87l0.6,1.65l-0.71,1.8l0.71,0.42l-0.48,2.61l0.88,1.43l0.73,-0.05l0.52,0.56l0.64,-0.24l0.89,-2.26l0.67,-3.51l-0.08,-2.07l-0.76,-3.42l0.58,-1.02l2.13,-1.64l2.74,-0.55l0.98,-0.63l0.28,-0.64l-0.25,-0.54l-1.76,-0.11l-0.96,-0.86l-0.52,-1.98l1.85,-2.98l-0.1,-0.73l1.72,-0.23l0.74,-0.94l4.16,2.0l0.83,0.12l1.98,-0.4l1.37,0.4l1.19,1.04l0.53,1.15l0.77,0.49l2.41,-0.29l1.7,1.01l1.92,0.09l0.8,0.64l3.27,0.45l1.1,0.77l-0.01,1.12l1.04,1.31l0.64,0.21l0.37,0.91l-0.14,0.55l-0.67,-0.25l-0.94,0.57l-0.23,1.83l0.81,1.29l1.6,0.98l0.69,1.37l0.65,2.26l-0.12,1.73l0.77,5.57l-0.14,0.59l-0.58,0.21l-0.48,0.96l-0.74,0.07l-0.8,0.81l-0.17,4.47l-1.12,0.49l-0.18,0.82l-1.86,0.43l-0.72,0.6l-0.58,2.61l0.26,0.45l-0.21,0.52l0.25,2.57l1.38,1.31l2.89,0.84l0.91,-0.08l1.08,-1.23l0.6,-1.44l0.62,0.19l0.39,-0.24l1.01,-3.59l0.6,-1.06l-0.08,-0.51l0.97,-1.45l1.39,-0.39l1.07,-0.69l0.83,-1.1l0.87,-0.44l2.06,0.59l1.13,0.7l1.0,1.09l1.21,2.16l2.01,5.91l0.82,1.6l1.03,3.71l1.49,3.63l1.29,1.74l-0.34,3.92l0.45,2.48l-0.48,2.79l-0.36,0.45l-0.57,-1.21l0.03,-0.85l-1.46,-0.52l-0.47,0.08l-1.48,1.36l-0.06,0.83l0.55,0.67l-0.82,0.57l-0.29,0.79l0.28,2.94l-0.48,0.75l-1.62,0.92l-1.06,1.85l-0.43,3.73l0.27,1.56l-0.33,0.93l-0.42,0.19l0.02,0.91l-0.64,0.3l-0.89,1.6l-0.5,1.29l-0.02,1.05l-0.52,0.91l-20.5,4.22l-0.15,-0.92l-0.45,-0.33l-31.44,4.71ZM621.47,115.84l0.0,-0.07l0.11,-0.12l-0.01,0.03l-0.11,0.16ZM621.73,114.93l-0.07,-0.16l0.07,-0.14l-0.0,0.3ZM543.5,88.02l4.87,-2.38l3.55,-3.62l5.77,-1.36l1.39,-0.84l2.36,-2.71l0.98,0.04l1.52,-0.73l1.0,-2.24l2.82,-2.85l0.23,1.72l1.85,0.59l0.05,1.44l0.67,0.14l0.51,0.6l-0.17,3.14l0.44,0.95l-0.34,0.47l0.2,0.47l0.74,-0.02l1.08,-2.21l1.08,-0.89l-0.42,1.15l0.58,0.45l0.83,-0.67l0.52,-1.22l1.0,-0.43l3.09,-0.25l1.5,0.21l1.18,0.93l1.54,0.44l0.47,1.05l2.31,2.58l1.17,0.55l0.53,1.55l0.73,0.34l1.87,0.07l0.73,-0.4l1.06,-0.06l1.4,-1.09l1.0,1.11l1.1,0.64l1.01,-0.25l0.68,-0.82l1.87,1.06l0.64,-0.34l1.65,-2.58l2.81,-1.89l1.7,-1.65l0.92,0.11l3.27,-1.21l5.17,-0.25l3.25,-2.09l2.28,-0.88l1.52,-0.11l-0.01,3.24l0.29,0.71l-0.36,1.1l0.46,0.7l0.68,0.28l0.91,-0.41l2.2,0.7l1.14,-0.43l1.03,-0.87l0.66,0.48l0.21,0.7l0.85,0.22l1.22,-0.76l0.79,-1.57l0.69,-0.28l1.06,0.23l1.35,-1.15l0.53,-0.01l0.22,0.08l-0.3,2.02l0.75,1.32l-1.11,-0.04l-0.36,0.5l0.84,1.83l-0.87,1.04l0.12,0.45l0.83,0.79l1.37,-0.42l0.6,0.47l0.62,0.04l0.18,1.19l0.98,0.87l1.53,0.51l-1.17,0.68l-4.96,-0.15l-0.53,0.3l-1.35,-0.17l-0.88,0.41l-0.66,-0.75l-1.63,-0.07l-0.59,0.47l-0.07,1.22l-0.49,0.76l0.38,2.05l-0.92,-0.22l-0.89,-0.92l-0.77,-0.13l-1.96,-1.65l-2.41,-0.6l-1.6,0.04l-1.04,-0.5l-2.89,0.47l-0.61,0.45l-1.18,2.52l-3.47,0.73l-0.57,0.77l-2.06,-0.33l-2.82,0.93l-0.68,0.83l-0.56,2.51l-0.78,0.28l-0.81,0.87l-0.65,0.28l0.16,-1.95l-0.74,-0.91l-1.02,0.34l-0.77,0.92l-0.97,-0.39l-0.68,0.17l-0.37,0.4l0.1,0.82l-0.73,2.01l-1.2,0.59l-0.1,-1.37l-0.46,-1.06l0.34,-1.69l-0.17,-0.37l-0.66,-0.17l-0.45,0.57l-0.6,2.13l-0.22,2.57l-1.12,0.91l-1.26,3.03l-0.62,2.65l-2.55,5.33l-0.69,0.73l0.12,0.91l-1.4,-1.28l0.18,-1.74l0.63,-1.69l-0.41,-0.81l-0.62,-0.31l-1.36,0.85l-1.16,0.1l0.04,-1.29l0.81,-1.45l-0.41,-1.34l0.3,-1.09l-0.58,-0.98l0.15,-0.83l-1.9,-1.55l-1.1,-0.06l-0.59,-0.44l-1.48,-0.0l0.3,-1.36l-0.94,-1.45l-1.13,-0.51l-2.23,-0.1l-3.2,-0.71l-1.55,0.59l-1.43,-0.42l-1.62,0.17l-4.56,-1.94l-15.37,-2.5l-1.99,-3.39l-1.88,-0.96l-0.76,0.26l-0.1,-0.29ZM603.39,98.63l-0.0,0.52l-0.46,0.32l-0.7,1.39l0.08,0.57l-0.65,-0.58l0.91,-2.15l0.83,-0.06ZM570.53,72.73l-0.51,-0.27l-1.16,0.06l-0.04,-1.56l1.0,-1.02l1.18,-2.09l1.83,-1.5l0.63,-0.0l0.53,-0.58l2.08,-0.89l3.34,-0.42l1.1,0.66l-0.54,0.38l-1.32,-0.12l-2.26,0.78l0.15,0.87l0.71,0.13l-1.19,0.98l-1.4,1.89l-0.69,0.28l-0.36,1.45l-1.15,1.36l-0.66,2.04l-0.67,-0.87l0.75,-0.97l0.14,-1.95l-0.84,-0.23l-0.6,0.92l-0.05,0.67Z\", \"name\": \"Michigan\"}, \"US-GA\": {\"path\": \"M654.05,331.64l22.02,-3.57l20.65,-3.86l-0.07,0.58l-2.59,3.35l-0.41,1.73l0.11,1.23l0.82,0.78l1.84,0.8l1.03,0.12l2.7,2.03l0.84,0.24l1.9,-0.37l0.6,0.25l0.8,1.64l1.51,1.6l1.04,2.5l1.33,0.82l0.84,1.16l0.56,0.26l1.0,1.77l1.07,0.3l1.17,0.99l3.81,1.85l2.41,3.16l2.25,0.58l2.53,1.67l0.5,2.34l1.25,1.01l0.47,-0.16l0.31,0.49l-0.1,0.62l0.79,0.73l0.79,0.09l0.56,1.2l4.99,1.88l0.4,1.78l1.54,1.73l1.02,2.01l-0.07,0.8l0.48,0.69l0.11,1.24l1.04,0.79l1.16,0.17l1.25,0.62l0.28,0.53l0.57,0.23l1.12,2.56l0.76,0.57l0.08,2.68l0.77,1.48l1.38,0.9l1.52,-0.27l1.44,0.76l1.45,0.12l-0.59,0.78l-0.55,-0.35l-0.47,0.28l-0.4,0.99l0.62,0.91l-0.38,0.48l-1.38,-0.16l-0.77,-0.55l-0.65,0.44l0.26,0.71l-0.49,0.52l0.36,0.6l1.44,0.25l-0.58,1.35l-1.43,0.27l-1.08,-0.44l-0.6,0.21l0.03,0.82l1.45,0.6l-1.76,3.73l0.36,1.73l-0.48,0.97l0.85,1.48l-2.29,-0.19l-0.46,0.29l0.06,0.63l0.55,0.34l2.76,0.24l1.07,0.66l-0.02,0.34l-0.56,0.22l-0.88,1.95l-0.5,-1.41l-0.45,-0.13l-0.6,0.33l-0.15,0.84l0.34,0.96l-0.6,0.12l-0.03,0.84l-0.3,0.16l0.07,0.46l1.34,1.15l-1.09,1.03l0.32,0.47l0.77,0.08l-0.39,0.92l0.06,0.88l-0.46,0.51l1.1,1.66l0.03,0.76l-0.79,0.33l-2.64,-0.17l-4.06,-0.96l-1.31,0.35l-0.18,0.74l-0.68,0.26l-0.35,1.25l0.28,2.08l0.95,1.36l0.13,4.25l-1.97,0.4l-0.54,-0.92l-0.12,-1.3l-1.33,-1.82l-49.21,5.14l-0.72,-0.56l-0.86,-2.7l-0.94,-1.51l-0.56,-0.38l0.16,-0.68l-0.73,-1.51l-1.82,-1.81l-0.43,-1.75l0.25,-0.8l0.06,-5.18l-0.6,-1.81l-1.19,-1.47l-1.03,-2.65l0.12,-1.65l0.78,-2.36l-0.25,-1.53l0.19,-2.11l1.62,-1.33l0.46,-1.47l-0.55,-0.61l-1.42,-0.69l0.09,-2.15l-0.97,-1.87l-2.18,-2.42l-1.03,-2.81l-0.75,-0.68l-0.17,-0.96l-0.77,-1.37l-13.99,-43.11Z\", \"name\": \"Georgia\"}, \"US-AZ\": {\"path\": \"M128.51,384.14l0.44,-1.81l1.29,-1.29l0.53,-1.12l0.48,-0.25l1.66,0.62l0.96,-0.03l0.52,-0.46l0.28,-1.17l1.31,-1.0l0.24,-2.73l-0.46,-1.24l-0.84,-0.66l-2.07,-0.66l-0.3,-0.61l0.8,-2.4l0.0,-1.39l-0.52,-1.19l0.57,-0.86l-0.2,-0.87l1.57,-0.27l2.29,-2.81l0.65,-2.43l0.65,-0.81l0.02,-3.17l0.55,-0.62l-0.29,-1.43l1.71,-1.14l1.03,-1.85l3.16,-1.29l2.03,-1.58l0.26,-0.53l-0.13,-1.04l-3.25,-3.49l-0.51,-0.22l0.22,-1.26l-0.66,-1.46l0.07,-0.91l-0.88,-2.76l-0.84,-0.56l-0.19,-1.65l-0.69,-0.8l0.19,-3.54l0.58,-0.87l-0.3,-0.86l1.03,-0.4l0.4,-1.42l0.14,-3.2l-0.76,-3.66l0.76,-2.55l-0.4,-3.0l0.85,-2.56l-0.8,-1.87l-0.03,-0.92l0.78,-1.88l2.54,-0.63l1.75,0.99l1.43,-0.19l0.96,2.24l0.79,0.71l1.54,0.14l1.01,-0.5l1.02,-2.27l0.94,-1.19l2.57,-16.94l42.42,5.78l42.56,4.67l-11.82,123.64l-36.87,-4.05l-36.33,-18.97l-28.43,-15.56Z\", \"name\": \"Arizona\"}, \"US-MT\": {\"path\": \"M166.39,57.3l0.69,-0.1l0.33,-0.38l-0.9,-1.99l0.83,-0.96l-0.39,-1.3l0.09,-0.96l-1.24,-1.93l-0.24,-1.49l-1.03,-1.33l-1.19,-2.44l3.53,-20.64l43.67,6.71l43.04,5.23l42.75,3.84l43.13,2.53l-3.53,86.04l-28.1,-1.47l-26.82,-1.91l-26.78,-2.4l-25.83,-2.79l-0.44,0.35l-1.22,10.41l-1.51,-2.01l-0.03,-0.91l-1.18,-2.35l-1.25,-0.74l-1.8,0.92l0.03,1.05l-0.72,0.42l-0.34,1.56l-2.42,-0.41l-1.91,0.57l-0.92,-0.85l-3.36,0.09l-2.38,-0.96l-1.68,0.58l-0.84,1.49l-4.66,-1.6l-1.3,0.37l-1.12,0.9l-0.31,0.67l-1.65,-1.4l0.22,-1.43l-0.9,-1.71l0.4,-0.36l0.07,-0.62l-1.17,-3.08l-1.45,-1.25l-1.44,0.36l-0.21,-0.64l-1.08,-0.9l-0.41,-1.37l0.68,-0.61l0.2,-1.41l-0.77,-2.38l-0.77,-0.35l-0.31,-1.58l-1.51,-2.54l0.23,-1.51l-0.56,-1.26l0.34,-1.4l-0.73,-0.86l0.48,-0.98l-0.21,-0.74l-1.14,-0.75l-0.13,-0.59l-0.85,-0.91l-0.8,-0.4l-0.51,0.37l-0.07,0.74l-0.7,0.27l-1.13,1.22l-1.75,0.37l-1.21,1.07l-1.08,-0.85l-0.64,-1.01l-1.06,-0.44l0.02,-0.86l0.74,-0.63l0.24,-1.06l-0.61,-1.6l0.9,-1.09l1.07,-0.08l0.83,-0.8l-0.26,-1.14l0.38,-1.07l-0.95,-0.81l-0.04,-0.81l0.66,-1.28l-0.59,-1.07l0.74,-0.07l0.38,-0.42l-0.04,-1.77l1.83,-3.73l-0.14,-1.05l0.89,-0.62l0.6,-3.16l-0.78,-0.5l-1.8,0.37l-1.33,-0.11l-0.64,-0.55l0.37,-0.83l-0.62,-0.97l-0.66,-0.23l-0.72,0.35l-0.07,-0.95l-1.74,-1.62l0.04,-1.84l-1.68,-1.82l-0.08,-0.69l-1.55,-2.88l-1.07,-1.29l-0.57,-1.63l-2.35,-1.34l-0.95,-1.95l-1.43,-1.19Z\", \"name\": \"Montana\"}, \"US-MS\": {\"path\": \"M555.51,431.02l0.67,-0.97l-1.05,-1.76l0.18,-1.63l-0.81,-0.87l1.69,-0.25l0.47,-0.54l0.4,-2.74l-0.77,-1.82l1.56,-1.79l0.25,-3.58l0.74,-2.26l1.89,-1.25l1.15,-1.97l1.4,-1.04l0.34,-0.78l-0.04,-0.99l-0.63,-0.96l1.14,-0.28l0.96,-2.58l0.91,-1.31l-0.16,-0.86l-1.54,-0.43l-0.35,-0.96l-1.83,-1.04l-0.07,-2.14l-0.93,-0.74l-0.45,-0.84l-0.02,-0.37l1.14,-0.29l0.46,-0.69l-0.26,-0.89l-1.41,-0.49l0.23,-1.77l0.98,-1.54l-0.77,-1.06l-1.08,-0.31l-0.15,-2.82l0.9,-0.54l0.23,-0.8l-0.62,-2.52l-1.25,-0.66l0.7,-1.33l-0.07,-2.22l-2.02,-1.52l1.13,-0.47l0.12,-1.41l-1.34,-0.89l1.58,-2.04l0.93,-0.31l0.36,-0.69l-0.52,-1.56l0.42,-1.35l-0.9,-0.89l2.84,-1.1l0.59,-0.76l-0.09,-1.07l-1.41,-0.95l1.39,-1.08l0.62,-1.77l0.94,-0.17l0.34,-0.97l-0.2,-0.77l1.48,-0.43l1.22,-1.21l0.07,-3.53l-0.46,-1.53l0.36,-1.78l0.73,0.09l0.68,-0.33l0.42,-0.87l-0.41,-1.06l2.72,-1.71l0.58,-1.06l-0.29,-1.28l36.44,-4.1l0.86,1.26l0.85,0.45l0.99,66.49l5.52,32.95l-0.73,0.69l-1.53,-0.3l-0.9,-0.94l-1.32,1.06l-1.23,0.17l-2.17,-1.26l-1.85,-0.19l-0.83,0.36l-0.34,0.44l0.32,0.41l-0.56,0.36l-3.96,1.66l-0.05,-0.5l-0.96,-0.52l-1.0,0.05l-0.58,1.0l0.76,0.61l-1.59,1.21l-0.33,1.28l-0.69,0.3l-1.33,-0.06l-1.16,-1.86l-0.08,-0.89l-0.92,-1.47l-0.21,-1.0l-1.4,-1.63l-1.16,-0.54l-0.47,-0.77l0.1,-0.62l-0.69,-0.92l0.21,-1.99l0.5,-0.93l0.66,-2.98l-0.06,-1.22l-0.43,-0.29l-34.66,3.41Z\", \"name\": \"Mississippi\"}, \"US-SC\": {\"path\": \"M697.55,324.05l4.86,-2.69l1.02,-0.05l1.11,-1.38l3.93,-1.9l0.45,-0.88l0.63,0.22l22.71,-3.36l0.07,1.22l0.42,0.57l0.71,0.01l1.21,-1.3l2.82,2.54l0.46,2.48l0.55,0.52l19.74,-3.49l22.74,15.07l0.02,0.55l-2.48,2.18l-2.44,3.67l-2.41,5.72l-0.09,2.74l-1.08,-0.21l0.85,-2.72l-0.63,-0.23l-0.76,0.87l-0.56,1.38l-0.11,1.55l0.83,0.95l1.05,0.23l0.44,0.91l-0.75,0.08l-0.41,0.56l-0.87,0.02l-0.24,0.68l0.94,0.45l-1.1,1.13l-0.07,1.02l-1.34,0.63l-0.5,-0.61l-0.5,-0.08l-1.06,0.87l-0.56,1.77l0.43,0.87l-1.19,1.23l-0.61,1.44l-1.2,1.01l-0.9,-0.4l0.27,-0.6l-0.53,-0.74l-1.37,0.31l0.25,1.2l-0.52,0.03l0.05,0.76l2.02,1.01l-0.12,0.39l-0.88,0.94l-1.22,0.23l-0.24,0.51l0.33,0.45l-2.29,1.34l-1.42,-0.84l-0.56,0.11l-0.1,0.67l1.19,0.78l-1.54,1.57l-0.72,-0.75l-0.5,0.52l-0.0,0.74l-1.54,-0.37l-1.34,-0.84l-0.44,0.5l0.16,0.53l-1.73,0.17l-0.44,0.37l-0.06,0.78l2.07,0.05l-0.26,0.55l0.42,0.25l1.91,-0.15l0.11,0.22l-0.97,0.86l-0.32,0.78l0.57,0.49l0.94,-0.53l0.03,0.21l-1.12,1.09l-0.99,0.43l-0.21,-2.04l-0.69,-0.27l-0.22,-1.54l-0.88,-0.15l-0.3,0.58l0.86,2.69l-1.12,-0.66l-0.63,-1.0l-0.39,-1.76l-0.65,-0.21l-0.52,-0.63l-0.69,0.0l-0.27,0.6l0.84,1.02l0.01,0.68l1.11,1.83l-0.02,0.86l1.22,1.17l-0.62,0.35l0.03,0.98l-1.2,3.56l-1.51,-0.78l-1.52,0.26l-0.97,-0.68l-0.54,-1.03l-0.17,-2.93l-0.86,-0.75l-1.06,-2.47l-1.04,-0.95l-3.23,-1.33l-0.49,-2.65l-1.12,-2.17l-1.43,-1.58l-0.06,-1.07l-0.76,-1.21l-4.81,-1.69l-0.58,-1.27l-1.21,-0.37l0.02,-0.7l-0.53,-0.87l-0.87,0.0l-0.73,-0.61l0.03,-1.21l-0.66,-1.26l-2.7,-1.78l-2.16,-0.52l-2.36,-3.12l-3.93,-1.93l-1.22,-1.03l-0.83,-0.12l-1.04,-1.81l-0.51,-0.22l-0.91,-1.21l-1.18,-0.68l-0.99,-2.42l-1.54,-1.65l-1.02,-1.87l-1.06,-0.37l-1.93,0.37l-0.46,-0.16l-2.75,-2.19l-1.06,0.02l-2.23,-1.27l0.36,-2.22l2.6,-3.31l0.15,-1.07ZM750.36,375.19l0.73,-0.08l0.51,0.45l-1.23,1.9l0.28,-1.22l-0.3,-1.06Z\", \"name\": \"South Carolina\"}, \"US-RI\": {\"path\": \"M851.1,141.46l0.22,-0.46l-0.53,-2.22l-3.14,-10.0l5.61,-1.84l0.76,2.06l0.8,0.25l0.19,0.73l0.08,0.42l-0.77,0.25l0.03,0.29l0.51,1.45l0.59,0.5l-0.75,0.28l-0.3,0.6l0.87,0.97l-0.14,1.23l0.89,1.9l0.03,1.67l-0.27,0.71l-0.9,0.16l-3.59,2.35l-0.18,-1.31ZM855.89,131.53l0.26,0.1l0.01,0.1l-0.17,-0.08l-0.1,-0.12ZM857.28,132.21l0.25,0.54l-0.05,0.32l-0.15,0.01l-0.05,-0.87Z\", \"name\": \"Rhode Island\"}, \"US-AR\": {\"path\": \"M498.76,376.91l-1.42,-38.01l-4.48,-23.98l37.68,-2.58l39.02,-3.58l0.8,1.6l1.01,0.7l0.11,1.77l-0.77,0.57l-0.22,0.94l-1.42,0.93l-0.29,1.04l-0.83,0.54l-1.19,2.59l0.02,0.7l0.53,0.26l10.94,-1.46l0.86,0.93l-1.18,0.37l-0.52,0.96l0.25,0.49l0.84,0.41l-3.6,2.7l0.02,0.84l0.83,1.04l-0.6,1.15l0.62,0.97l-1.42,0.74l-0.11,1.44l-1.45,2.09l0.12,1.64l0.91,3.1l-0.15,0.27l-1.08,-0.01l-0.33,0.26l-0.51,1.73l-1.52,0.95l-0.04,0.51l0.79,0.91l0.05,0.65l-1.11,1.21l-2.02,1.13l-0.21,0.62l0.43,1.0l-0.19,0.27l-1.23,0.03l-0.42,0.67l-0.32,1.89l0.47,1.57l0.02,3.08l-1.27,1.09l-1.54,0.13l0.23,1.49l-0.21,0.48l-0.93,0.25l-0.59,1.77l-1.49,1.19l-0.02,0.93l1.39,0.76l-0.03,0.7l-1.23,0.3l-2.24,1.23l0.03,0.67l0.99,0.82l-0.45,1.14l0.53,1.38l-1.09,0.62l-1.9,2.57l0.52,0.7l1.0,0.49l0.01,0.58l-0.98,0.29l-0.42,0.64l0.51,0.84l1.63,1.01l0.06,1.77l-0.59,0.98l-0.09,0.84l1.34,0.79l0.5,2.17l-1.09,1.01l0.06,2.11l-51.45,4.07l-0.83,-11.53l-1.18,-0.85l-0.9,0.16l-0.83,-0.35l-0.93,0.39l-1.22,-0.33l-0.57,0.72l-0.47,0.01l-0.49,-0.48l-0.82,-0.15l-0.63,-1.0Z\", \"name\": \"Arkansas\"}}, \"height\": 612.395412685768, \"projection\": {\"type\": \"aea\", \"centralMeridian\": -100.0}, \"width\": 900.0});"
  },
  {
    "path": "public/adminlte/plugins/jvectormap/jquery-jvectormap-world-mill-en.js",
    "content": "$.fn.vectorMap('addMap', 'world_mill_en',{\"insets\": [{\"width\": 900.0, \"top\": 0, \"height\": 440.7063107441331, \"bbox\": [{\"y\": -12671671.123330014, \"x\": -20004297.151525836}, {\"y\": 6930392.02513512, \"x\": 20026572.394749384}], \"left\": 0}], \"paths\": {\"BD\": {\"path\": \"M652.71,228.85l-0.04,1.38l-0.46,-0.21l-0.42,0.3l0.05,0.65l-0.17,-1.37l-0.48,-1.26l-1.08,-1.6l-0.23,-0.13l-2.31,-0.11l-0.31,0.36l0.21,0.98l-0.6,1.11l-0.8,-0.4l-0.37,0.09l-0.23,0.3l-0.54,-0.21l-0.78,-0.19l-0.38,-2.04l-0.83,-1.89l0.4,-1.5l-0.16,-0.35l-1.24,-0.57l0.36,-0.62l1.5,-0.95l0.02,-0.49l-1.62,-1.26l0.64,-1.31l1.7,1.0l0.12,0.04l0.96,0.11l0.19,1.62l0.25,0.26l2.38,0.37l2.32,-0.04l1.06,0.33l-0.92,1.79l-0.97,0.13l-0.23,0.16l-0.77,1.51l0.05,0.35l1.37,1.37l0.5,-0.14l0.35,-1.46l0.24,-0.0l1.24,3.92Z\", \"name\": \"Bangladesh\"}, \"BE\": {\"path\": \"M429.28,143.95l1.76,0.25l0.13,-0.01l2.16,-0.64l1.46,1.34l1.26,0.71l-0.23,1.8l-0.44,0.08l-0.24,0.25l-0.2,1.36l-1.8,-1.22l-0.23,-0.05l-1.14,0.23l-1.62,-1.43l-1.15,-1.31l-0.21,-0.1l-0.95,-0.04l-0.21,-0.68l1.66,-0.54Z\", \"name\": \"Belgium\"}, \"BF\": {\"path\": \"M413.48,260.21l-1.22,-0.46l-0.13,-0.02l-1.17,0.1l-0.15,0.06l-0.73,0.53l-0.87,-0.41l-0.39,-0.75l-0.13,-0.13l-0.98,-0.48l-0.14,-1.2l0.63,-0.99l0.05,-0.18l-0.05,-0.73l1.9,-2.01l0.08,-0.14l0.35,-1.65l0.49,-0.44l1.05,0.3l0.21,-0.02l1.05,-0.52l0.13,-0.13l0.3,-0.58l1.87,-1.1l0.11,-0.1l0.43,-0.72l2.23,-1.01l1.21,-0.32l0.51,0.4l0.19,0.06l1.25,-0.01l-0.14,0.89l0.01,0.13l0.34,1.16l0.06,0.11l1.35,1.59l0.07,1.13l0.24,0.28l2.64,0.53l-0.05,1.39l-0.42,0.59l-1.11,0.21l-0.22,0.17l-0.46,0.99l-0.69,0.23l-2.12,-0.05l-1.14,-0.2l-0.19,0.03l-0.72,0.36l-1.07,-0.17l-4.35,0.12l-0.29,0.29l-0.06,1.44l0.25,1.45Z\", \"name\": \"Burkina Faso\"}, \"BG\": {\"path\": \"M477.63,166.84l0.51,0.9l0.33,0.14l0.9,-0.21l1.91,0.47l3.68,0.16l0.17,-0.05l1.2,-0.75l2.78,-0.67l1.72,1.05l1.02,0.24l-0.97,0.97l-0.91,2.17l0.0,0.24l0.56,1.19l-1.58,-0.3l-0.16,0.01l-2.55,0.95l-0.2,0.28l-0.02,1.23l-1.92,0.24l-1.68,-0.99l-0.27,-0.02l-1.94,0.8l-1.52,-0.07l-0.15,-1.72l-0.12,-0.21l-0.99,-0.76l0.18,-0.18l0.02,-0.39l-0.17,-0.22l0.33,-0.75l0.91,-0.91l0.01,-0.42l-1.16,-1.25l-0.18,-0.89l0.24,-0.27Z\", \"name\": \"Bulgaria\"}, \"BA\": {\"path\": \"M468.39,164.66l0.16,0.04l0.43,-0.0l-0.43,0.93l0.06,0.34l1.08,1.06l-0.28,1.09l-0.5,0.13l-0.47,0.28l-0.86,0.74l-0.1,0.16l-0.28,1.29l-1.81,-0.94l-0.9,-1.22l-1.0,-0.73l-1.1,-1.1l-0.55,-0.96l-1.11,-1.3l0.3,-0.75l0.59,0.46l0.42,-0.04l0.46,-0.54l1.0,-0.06l2.11,0.5l1.72,-0.03l1.06,0.64Z\", \"name\": \"Bosnia and Herzegovina\"}, \"BN\": {\"path\": \"M707.34,273.57l0.76,-0.72l1.59,-1.03l-0.18,1.93l-0.9,-0.06l-0.28,0.14l-0.31,0.51l-0.68,-0.78Z\", \"name\": \"Brunei\"}, \"BO\": {\"path\": \"M263.83,340.79l-0.23,-0.12l-2.86,-0.11l-0.28,0.17l-0.77,1.67l-1.17,-1.51l-0.18,-0.11l-3.28,-0.64l-0.28,0.1l-2.02,2.3l-1.43,0.29l-0.91,-3.35l-1.31,-2.88l0.75,-2.41l-0.09,-0.32l-1.23,-1.03l-0.31,-1.76l-0.05,-0.12l-1.12,-1.6l1.49,-2.62l0.01,-0.28l-1.0,-2.0l0.48,-0.72l0.02,-0.29l-0.37,-0.78l0.87,-1.13l0.06,-0.18l0.05,-2.17l0.12,-1.71l0.5,-0.8l0.01,-0.3l-1.9,-3.58l1.3,0.15l1.34,-0.05l0.23,-0.12l0.51,-0.7l2.12,-0.99l1.31,-0.93l2.81,-0.37l-0.21,1.51l0.01,0.13l0.29,0.91l-0.19,1.64l0.11,0.27l2.72,2.27l0.15,0.07l2.71,0.41l0.92,0.88l0.12,0.07l1.64,0.49l1.0,0.71l0.18,0.06l1.5,-0.02l1.24,0.64l0.1,1.31l0.05,0.14l0.44,0.68l0.02,0.73l-0.44,0.03l-0.27,0.39l0.96,2.99l0.28,0.21l4.43,0.1l-0.28,1.12l0.0,0.15l0.27,1.02l0.15,0.19l1.27,0.67l0.52,1.42l-0.42,1.91l-0.66,1.1l-0.04,0.2l0.21,1.3l-0.19,0.13l-0.01,-0.27l-0.15,-0.24l-2.33,-1.33l-0.14,-0.04l-2.38,-0.03l-4.36,0.76l-0.21,0.16l-1.2,2.29l-0.03,0.13l-0.06,1.37l-0.79,2.53l-0.05,-0.08Z\", \"name\": \"Bolivia\"}, \"JP\": {\"path\": \"M781.17,166.78l1.8,0.67l0.28,-0.04l1.38,-1.01l0.43,2.67l-3.44,0.77l-0.18,0.12l-2.04,2.79l-3.71,-1.94l-0.42,0.15l-1.29,3.11l-2.32,0.04l-0.3,-2.63l1.12,-2.1l2.51,-0.16l0.28,-0.25l0.73,-4.22l0.58,-1.9l2.59,2.84l2.0,1.1ZM773.66,187.36l-0.92,2.24l-0.01,0.2l0.4,1.3l-1.18,1.81l-3.06,1.28l-4.35,0.17l-0.19,0.08l-3.4,3.06l-1.36,-0.87l-0.1,-1.95l-0.34,-0.28l-4.35,0.62l-2.99,1.33l-2.87,0.05l-0.28,0.2l0.09,0.33l2.37,1.93l-1.57,4.44l-1.35,0.97l-0.9,-0.79l0.57,-2.32l-0.15,-0.34l-1.5,-0.77l-0.81,-1.53l2.04,-0.75l0.14,-0.1l1.28,-1.72l2.47,-1.43l1.84,-1.92l4.83,-0.82l2.62,0.57l0.33,-0.16l2.45,-4.77l1.38,1.14l0.38,0.0l5.1,-4.02l0.09,-0.11l1.57,-3.57l0.02,-0.16l-0.42,-3.22l0.94,-1.67l2.27,-0.47l1.26,3.82l-0.07,2.23l-2.26,2.86l-0.06,0.19l0.04,2.93ZM757.85,196.18l0.22,0.66l-1.11,1.33l-0.8,-0.7l-0.33,-0.04l-1.28,0.65l-0.14,0.15l-0.54,1.34l-1.17,-0.57l0.02,-1.03l1.2,-1.45l1.24,0.28l0.29,-0.1l0.9,-1.03l1.51,0.5Z\", \"name\": \"Japan\"}, \"BI\": {\"path\": \"M494.7,295.83l-0.14,-2.71l-0.04,-0.13l-0.34,-0.62l0.93,0.12l0.3,-0.16l0.67,-1.25l0.9,0.11l0.11,0.76l0.08,0.16l0.46,0.48l0.02,0.56l-0.55,0.48l-0.96,1.29l-0.82,0.82l-0.61,0.07Z\", \"name\": \"Burundi\"}, \"BJ\": {\"path\": \"M427.4,268.94l-1.58,0.22l-0.52,-1.45l0.11,-5.73l-0.08,-0.21l-0.43,-0.44l-0.09,-1.13l-0.09,-0.19l-1.52,-1.52l0.24,-1.01l0.7,-0.23l0.18,-0.16l0.45,-0.97l1.07,-0.21l0.19,-0.12l0.53,-0.73l0.73,-0.65l0.68,-0.0l1.69,1.3l-0.08,0.67l0.02,0.14l0.52,1.38l-0.44,0.9l-0.01,0.24l0.2,0.52l-1.1,1.42l-0.76,0.76l-0.08,0.13l-0.47,1.59l0.05,1.69l-0.13,3.79Z\", \"name\": \"Benin\"}, \"BT\": {\"path\": \"M650.38,213.78l0.88,0.75l-0.13,1.24l-1.77,0.07l-2.1,-0.18l-1.57,0.4l-2.02,-0.91l-0.02,-0.24l1.54,-1.87l1.18,-0.6l1.67,0.59l1.32,0.08l1.01,0.67Z\", \"name\": \"Bhutan\"}, \"JM\": {\"path\": \"M226.67,238.37l1.64,0.23l1.2,0.56l0.11,0.19l-1.25,0.03l-0.14,0.04l-0.65,0.37l-1.24,-0.37l-1.17,-0.77l0.11,-0.22l0.86,-0.15l0.52,0.08Z\", \"name\": \"Jamaica\"}, \"BW\": {\"path\": \"M484.91,331.96l0.53,0.52l0.82,1.53l2.83,2.86l0.14,0.08l0.85,0.22l0.03,0.81l0.74,1.66l0.21,0.17l1.87,0.39l1.17,0.87l-3.13,1.71l-2.3,2.01l-0.07,0.1l-0.82,1.74l-0.66,0.88l-1.24,0.19l-0.24,0.2l-0.65,1.98l-1.4,0.55l-1.9,-0.12l-1.2,-0.74l-1.06,-0.32l-0.22,0.02l-1.22,0.62l-0.14,0.14l-0.58,1.21l-1.16,0.79l-1.18,1.13l-1.5,0.23l-0.4,-0.68l0.22,-1.53l-0.04,-0.19l-1.48,-2.54l-0.11,-0.11l-0.53,-0.31l-0.0,-7.25l2.18,-0.08l0.29,-0.3l0.07,-9.0l1.63,-0.08l3.69,-0.86l0.84,0.93l0.38,0.05l1.53,-0.97l0.79,-0.03l1.3,-0.53l0.23,0.1l0.92,1.96Z\", \"name\": \"Botswana\"}, \"BR\": {\"path\": \"M259.49,274.87l1.42,0.25l1.97,0.62l0.28,-0.05l0.67,-0.55l1.76,-0.38l2.8,-0.94l0.12,-0.08l0.92,-0.96l0.05,-0.33l-0.15,-0.32l0.73,-0.06l0.36,0.35l-0.27,0.93l0.17,0.36l0.76,0.34l0.44,0.9l-0.58,0.73l-0.06,0.13l-0.4,2.13l0.03,0.19l0.62,1.22l0.17,1.11l0.11,0.19l1.54,1.18l0.15,0.06l1.23,0.12l0.29,-0.15l0.2,-0.36l0.71,-0.11l1.13,-0.44l0.79,-0.63l1.25,0.19l0.65,-0.08l1.32,0.2l0.32,-0.18l0.23,-0.51l-0.05,-0.31l-0.31,-0.37l0.11,-0.31l0.75,0.17l0.13,0.0l1.1,-0.24l1.34,0.5l1.08,0.51l0.33,-0.05l0.67,-0.58l0.27,0.05l0.28,0.57l0.31,0.17l1.2,-0.18l0.17,-0.08l1.03,-1.05l0.76,-1.82l1.39,-2.16l0.49,-0.07l0.52,1.17l1.4,4.37l0.2,0.2l1.14,0.35l0.05,1.39l-1.8,1.97l0.01,0.42l0.78,0.75l0.18,0.08l4.16,0.37l0.08,2.25l0.5,0.22l1.78,-1.54l2.98,0.85l4.07,1.5l1.07,1.28l-0.37,1.23l0.36,0.38l2.83,-0.75l4.8,1.3l3.75,-0.09l3.6,2.02l3.27,2.84l1.93,0.72l2.13,0.11l0.76,0.66l1.22,4.56l-0.96,4.03l-1.22,1.58l-3.52,3.51l-1.63,2.91l-1.75,2.09l-0.5,0.04l-0.26,0.19l-0.72,1.99l0.18,4.76l-0.95,5.56l-0.74,0.96l-0.06,0.15l-0.43,3.39l-2.49,3.34l-0.06,0.13l-0.4,2.56l-1.9,1.07l-0.13,0.16l-0.51,1.38l-2.59,0.0l-3.94,1.01l-1.82,1.19l-2.85,0.81l-3.01,2.17l-2.12,2.65l-0.06,0.13l-0.36,2.0l0.01,0.13l0.4,1.42l-0.45,2.63l-0.53,1.23l-1.76,1.53l-2.76,4.79l-2.16,2.15l-1.69,1.29l-0.09,0.12l-1.12,2.6l-1.3,1.26l-0.45,-1.02l0.99,-1.18l0.01,-0.37l-1.5,-1.95l-1.98,-1.54l-2.58,-1.77l-0.2,-0.05l-0.81,0.07l-2.42,-2.05l-0.25,-0.07l-0.77,0.14l2.75,-3.07l2.8,-2.61l1.67,-1.09l2.11,-1.49l0.13,-0.24l0.05,-2.15l-0.07,-0.2l-1.26,-1.54l-0.35,-0.09l-0.64,0.27l0.3,-0.95l0.34,-1.57l0.01,-1.52l-0.16,-0.26l-0.9,-0.48l-0.27,-0.01l-0.86,0.39l-0.65,-0.08l-0.23,-0.8l-0.23,-2.39l-0.04,-0.12l-0.47,-0.79l-0.14,-0.12l-1.69,-0.71l-0.25,0.01l-0.93,0.47l-2.29,-0.44l0.15,-3.3l-0.03,-0.15l-0.62,-1.22l0.57,-0.39l0.13,-0.3l-0.22,-1.37l0.67,-1.13l0.44,-2.04l-0.01,-0.17l-0.59,-1.61l-0.14,-0.16l-1.25,-0.66l-0.22,-0.82l0.35,-1.41l-0.28,-0.37l-4.59,-0.1l-0.78,-2.41l0.34,-0.02l0.28,-0.31l-0.03,-1.1l-0.05,-0.16l-0.45,-0.68l-0.1,-1.4l-0.16,-0.24l-1.45,-0.76l-0.14,-0.03l-1.48,0.02l-1.04,-0.73l-1.62,-0.48l-0.93,-0.9l-0.16,-0.08l-2.72,-0.41l-2.53,-2.12l0.18,-1.54l-0.01,-0.13l-0.29,-0.91l0.26,-1.83l-0.34,-0.34l-3.28,0.43l-0.14,0.05l-1.3,0.93l-2.16,1.01l-0.12,0.09l-0.47,0.65l-1.12,0.05l-1.84,-0.21l-0.12,0.01l-1.33,0.41l-0.82,-0.21l0.16,-3.6l-0.48,-0.26l-1.97,1.43l-1.96,-0.06l-0.86,-1.23l-0.22,-0.13l-1.23,-0.11l0.34,-0.69l-0.05,-0.33l-1.36,-1.5l-0.92,-2.0l0.45,-0.32l0.13,-0.25l-0.0,-0.87l1.34,-0.64l0.17,-0.32l-0.23,-1.23l0.56,-0.77l0.05,-0.13l0.16,-1.03l2.7,-1.61l2.01,-0.47l0.16,-0.09l0.24,-0.27l2.11,0.11l0.31,-0.25l1.13,-6.87l0.06,-1.12l-0.4,-1.53l-0.1,-0.15l-1.0,-0.82l0.01,-1.45l1.08,-0.32l0.39,0.2l0.44,-0.24l0.08,-0.96l-0.25,-0.32l-1.22,-0.22l-0.02,-1.01l4.57,0.05l0.22,-0.09l0.6,-0.63l0.44,0.5l0.47,1.42l0.45,0.16l0.27,-0.18l1.21,1.16l0.23,0.08l1.95,-0.16l0.23,-0.14l0.43,-0.67l1.76,-0.55l1.05,-0.42l0.18,-0.2l0.25,-0.92l1.65,-0.66l0.18,-0.35l-0.14,-0.53l-0.26,-0.22l-1.91,-0.19l-0.29,-1.33l0.1,-1.64l-0.15,-0.28l-0.44,-0.25Z\", \"name\": \"Brazil\"}, \"BS\": {\"path\": \"M227.51,216.69l0.3,0.18l-0.24,1.07l0.03,-1.04l-0.09,-0.21ZM226.5,224.03l-0.13,0.03l-0.54,-1.3l-0.09,-0.12l-0.78,-0.64l0.4,-1.26l0.33,0.05l0.79,2.0l0.01,1.24ZM225.76,216.5l-2.16,0.34l-0.07,-0.41l0.85,-0.16l1.36,0.07l0.02,0.16Z\", \"name\": \"The Bahamas\"}, \"BY\": {\"path\": \"M480.08,135.28l2.09,0.02l0.13,-0.03l2.72,-1.3l0.16,-0.19l0.55,-1.83l1.94,-1.06l0.15,-0.31l-0.2,-1.33l1.33,-0.52l2.58,-1.3l2.39,0.8l0.3,0.75l0.37,0.17l1.22,-0.39l2.18,0.75l0.2,1.36l-0.48,0.85l0.01,0.32l1.57,2.26l0.92,0.6l-0.1,0.41l0.19,0.35l1.61,0.57l0.48,0.6l-0.64,0.49l-1.91,-0.11l-0.18,0.05l-0.48,0.32l-0.1,0.39l0.57,1.1l0.51,1.78l-1.79,0.17l-0.18,0.08l-0.77,0.73l-0.09,0.19l-0.13,1.31l-0.75,-0.22l-2.11,0.15l-0.56,-0.66l-0.39,-0.06l-0.8,0.49l-0.79,-0.4l-0.13,-0.03l-1.94,-0.07l-2.76,-0.79l-2.58,-0.27l-1.98,0.07l-0.15,0.05l-1.31,0.86l-0.8,0.09l-0.04,-1.16l-0.03,-0.12l-0.63,-1.28l1.22,-0.56l0.17,-0.27l0.01,-1.35l-0.04,-0.15l-0.66,-1.24l-0.08,-1.12Z\", \"name\": \"Belarus\"}, \"BZ\": {\"path\": \"M198.03,239.7l0.28,0.19l0.43,-0.1l0.82,-1.42l0.0,0.07l0.29,0.29l0.16,0.0l-0.02,0.35l-0.39,1.08l0.02,0.25l0.16,0.29l-0.23,0.8l0.04,0.24l0.09,0.14l-0.25,1.12l-0.38,0.53l-0.33,0.06l-0.21,0.15l-0.41,0.74l-0.25,0.0l0.17,-2.58l0.01,-2.2Z\", \"name\": \"Belize\"}, \"RU\": {\"path\": \"M688.57,38.85l0.63,2.39l0.44,0.19l2.22,-1.23l7.18,0.07l5.54,2.49l1.85,1.77l-0.55,2.34l-2.64,1.42l-6.57,2.76l-1.95,1.5l0.12,0.53l3.09,0.68l3.69,1.23l0.21,-0.01l1.98,-0.81l1.16,2.84l0.5,0.08l1.03,-1.18l3.86,-0.74l7.79,0.78l0.56,2.05l0.27,0.22l10.47,0.71l0.32,-0.29l0.13,-3.34l4.98,0.8l3.96,-0.02l3.88,2.43l1.06,2.79l-1.38,1.83l0.01,0.38l3.15,3.64l0.1,0.08l3.94,1.86l0.4,-0.14l2.28,-4.56l3.75,1.94l0.22,0.02l4.18,-1.22l4.76,1.4l0.26,-0.04l1.74,-1.23l3.98,0.63l0.32,-0.41l-1.71,-4.1l3.0,-1.86l22.39,3.04l2.06,2.67l0.1,0.08l6.55,3.51l0.17,0.03l10.08,-0.86l4.86,0.73l1.91,1.72l-0.29,3.13l0.18,0.31l3.08,1.26l0.19,0.01l3.32,-0.9l4.37,-0.11l4.78,0.87l4.61,-0.48l4.26,3.82l0.32,0.05l3.1,-1.4l0.12,-0.45l-1.91,-2.67l0.92,-1.64l7.78,1.22l5.22,-0.26l7.12,2.1l9.6,5.22l6.4,4.15l-0.2,2.44l0.14,0.28l1.69,1.04l0.45,-0.31l-0.51,-2.66l6.31,0.58l4.52,3.61l-2.1,1.52l-4.02,0.42l-0.27,0.29l-0.06,3.83l-0.81,0.67l-2.14,-0.11l-1.91,-1.39l-3.19,-1.13l-0.51,-1.63l-0.21,-0.2l-2.54,-0.67l-0.13,-0.0l-2.69,0.5l-1.12,-1.19l0.48,-1.36l-0.38,-0.39l-3.0,0.98l-0.17,0.44l1.02,1.76l-1.27,1.55l-3.09,1.71l-3.15,-0.29l-0.3,0.18l0.07,0.34l2.22,2.1l1.47,3.22l1.15,1.09l0.25,1.41l-0.48,0.76l-4.47,-0.81l-0.17,0.02l-6.97,2.9l-2.2,0.44l-0.11,0.05l-3.83,2.68l-3.63,2.32l-0.1,0.11l-0.76,1.4l-3.3,-2.4l-0.3,-0.03l-6.31,2.85l-0.99,-1.21l-0.4,-0.06l-2.32,1.54l-3.23,-0.49l-0.33,0.2l-0.79,2.39l-2.97,3.51l-0.07,0.21l0.09,1.47l0.22,0.27l2.62,0.74l-0.3,4.7l-2.06,0.12l-0.26,0.2l-1.07,2.94l0.04,0.27l0.83,1.19l-4.03,1.63l-0.18,0.21l-0.83,3.72l-3.55,0.79l-0.23,0.23l-0.73,3.32l-3.22,2.76l-0.76,-1.88l-1.07,-4.88l-1.39,-7.59l1.17,-4.76l2.05,-2.08l0.09,-0.19l0.11,-1.46l3.67,-0.77l0.15,-0.08l4.47,-4.61l4.29,-3.82l4.48,-3.01l0.11,-0.14l2.01,-5.43l-0.31,-0.4l-3.04,0.33l-0.24,0.17l-1.47,3.11l-5.98,3.94l-1.91,-4.36l-0.33,-0.17l-6.46,1.3l-0.15,0.08l-6.27,6.33l-0.01,0.41l1.7,1.87l-5.04,0.87l-3.51,0.34l0.16,-2.32l-0.26,-0.32l-3.89,-0.56l-0.19,0.04l-3.02,1.77l-7.63,-0.63l-8.24,1.1l-0.16,0.07l-8.11,7.09l-9.6,8.31l0.16,0.52l3.79,0.42l1.16,2.03l0.17,0.14l2.43,0.76l0.31,-0.08l1.5,-1.61l2.49,0.2l3.46,3.6l0.08,2.67l-1.91,3.26l-0.04,0.14l-0.21,3.91l-1.11,5.09l-3.73,4.55l-0.87,2.21l-6.73,7.14l-1.59,1.77l-3.23,1.72l-1.38,0.03l-1.48,-1.39l-0.37,-0.03l-3.36,2.22l-0.11,0.14l-0.16,0.42l-0.01,-1.09l1.0,-0.06l0.28,-0.27l0.36,-3.6l-0.61,-2.51l1.85,-0.94l2.94,0.53l0.32,-0.15l1.71,-3.1l0.84,-3.38l0.97,-1.18l1.32,-2.88l-0.34,-0.42l-4.14,0.95l-2.18,1.25l-3.51,-0.0l-0.95,-2.81l-0.1,-0.14l-2.97,-2.3l-0.11,-0.05l-4.19,-1.0l-0.89,-3.08l-0.87,-2.03l-0.95,-1.46l-1.54,-3.37l-0.12,-0.14l-2.27,-1.28l-3.83,-1.02l-3.37,0.1l-3.11,0.61l-0.13,0.06l-2.07,1.69l0.04,0.49l1.23,0.72l0.03,1.53l-1.34,1.05l-2.26,3.51l-0.05,0.17l0.02,1.27l-3.25,1.9l-2.87,-1.17l-0.14,-0.02l-2.86,0.26l-1.22,-1.02l-0.12,-0.06l-1.5,-0.35l-0.23,0.04l-3.62,2.27l-3.24,0.53l-2.28,0.79l-3.08,-0.51l-2.24,0.03l-1.49,-1.61l-2.45,-1.57l-0.11,-0.04l-2.6,-0.43l-3.17,0.43l-2.31,0.59l-3.31,-1.28l-0.45,-2.31l-0.21,-0.23l-2.94,-0.85l-2.26,-0.39l-2.77,-1.36l-0.37,0.09l-2.59,3.45l-0.03,0.32l0.91,1.74l-2.15,2.01l-3.47,-0.79l-2.44,-0.12l-1.59,-1.46l-0.2,-0.08l-2.55,-0.05l-2.12,-0.98l-0.24,-0.01l-3.85,1.57l-4.74,2.79l-2.59,0.55l-0.79,0.21l-1.21,-1.81l-0.29,-0.13l-3.05,0.41l-0.96,-1.25l-0.14,-0.1l-1.65,-0.6l-1.15,-1.82l-0.13,-0.12l-1.38,-0.6l-0.19,-0.02l-3.49,0.82l-3.35,-1.85l-0.38,0.08l-1.08,1.4l-5.36,-8.17l-3.02,-2.52l0.72,-0.85l0.01,-0.38l-0.37,-0.08l-6.22,3.21l-1.98,0.16l0.17,-1.51l-0.2,-0.31l-3.22,-1.17l-0.19,-0.0l-2.3,0.74l-0.72,-3.27l-0.24,-0.23l-4.5,-0.75l-0.21,0.04l-2.2,1.42l-6.21,1.27l-0.11,0.05l-1.16,0.81l-9.3,1.19l-0.18,0.09l-1.15,1.17l-0.02,0.39l1.56,2.01l-2.02,0.74l-0.16,0.42l0.35,0.68l-2.18,1.49l0.02,0.51l3.83,2.16l-0.45,1.13l-3.31,-0.13l-0.25,0.12l-0.57,0.77l-2.97,-1.59l-0.15,-0.04l-3.97,0.07l-0.13,0.03l-2.53,1.32l-2.84,-1.28l-5.52,-2.3l-0.12,-0.02l-3.91,0.09l-0.16,0.05l-5.17,3.6l-0.13,0.21l-0.25,1.89l-2.17,-1.6l-0.44,0.1l-2.0,3.59l0.06,0.37l0.55,0.5l-1.32,2.23l0.04,0.36l2.13,2.17l0.23,0.09l1.7,-0.08l1.42,1.89l-0.23,1.5l0.19,0.32l0.94,0.38l-0.89,1.44l-2.3,0.49l-0.17,0.11l-2.49,3.2l0.0,0.37l2.2,2.81l-0.23,1.93l0.06,0.22l2.56,3.32l-1.27,1.02l-0.4,0.66l-0.8,-0.15l-1.65,-1.75l-0.18,-0.09l-0.66,-0.09l-1.45,-0.64l-0.72,-1.16l-0.18,-0.13l-2.34,-0.63l-0.17,0.0l-1.32,0.41l-0.31,-0.4l-0.12,-0.09l-3.49,-1.48l-3.67,-0.49l-2.1,-0.52l-0.3,0.1l-0.12,0.14l-2.96,-2.4l-2.89,-1.19l-1.69,-1.42l1.27,-0.35l0.16,-0.1l2.08,-2.61l-0.04,-0.41l-1.02,-0.9l3.21,-1.12l0.2,-0.31l-0.07,-0.69l-0.37,-0.26l-1.86,0.42l0.05,-0.86l1.11,-0.76l2.35,-0.23l0.25,-0.19l0.39,-1.07l0.0,-0.19l-0.51,-1.64l0.95,-1.58l0.04,-0.16l-0.03,-0.95l-0.22,-0.28l-3.69,-1.06l-1.43,0.02l-1.45,-1.44l-0.29,-0.08l-1.83,0.49l-2.88,-1.04l0.04,-0.42l-0.04,-0.18l-0.89,-1.43l-0.23,-0.14l-1.77,-0.14l-0.13,-0.66l0.52,-0.56l0.01,-0.4l-1.6,-1.9l-0.27,-0.1l-2.55,0.32l-0.71,-0.16l-0.3,0.1l-0.53,0.63l-0.58,-0.08l-0.56,-1.97l-0.48,-0.94l0.17,-0.11l1.92,0.11l0.2,-0.06l0.97,-0.74l0.05,-0.42l-0.72,-0.91l-0.13,-0.1l-1.43,-0.51l0.09,-0.36l-0.13,-0.33l-0.97,-0.59l-1.43,-2.06l0.44,-0.77l0.04,-0.19l-0.25,-1.64l-0.2,-0.24l-2.45,-0.84l-0.19,-0.0l-1.05,0.34l-0.25,-0.62l-0.18,-0.17l-2.5,-0.84l-0.74,-1.93l-0.21,-1.7l-0.13,-0.21l-0.92,-0.63l0.83,-0.89l0.07,-0.27l-0.71,-3.26l1.69,-2.01l0.03,-0.34l-0.24,-0.41l2.63,-1.9l-0.01,-0.49l-2.31,-1.57l5.08,-4.61l2.33,-2.24l1.01,-2.08l-0.09,-0.37l-3.52,-2.56l0.94,-2.38l-0.04,-0.29l-2.14,-2.86l1.61,-3.35l-0.01,-0.29l-2.81,-4.58l2.19,-3.04l-0.06,-0.42l-3.7,-2.76l0.32,-2.67l1.87,-0.38l4.26,-1.77l2.46,-1.47l3.96,2.58l0.12,0.05l6.81,1.04l9.37,4.87l1.81,1.92l0.15,2.55l-2.61,2.06l-3.95,1.07l-11.1,-3.15l-0.17,0.0l-1.84,0.53l-0.1,0.53l3.97,2.97l0.15,1.77l0.16,4.14l0.19,0.27l3.21,1.22l1.94,1.03l0.44,-0.22l0.32,-1.94l-0.07,-0.25l-1.32,-1.52l1.25,-1.2l5.87,2.45l0.24,-0.01l2.11,-0.98l0.13,-0.42l-1.55,-2.75l5.52,-3.84l2.13,0.22l2.28,1.42l0.43,-0.12l1.46,-2.87l-0.04,-0.33l-1.97,-2.37l1.14,-2.38l-0.02,-0.3l-1.42,-2.07l6.15,1.22l1.14,1.92l-2.74,0.46l-0.25,0.3l0.02,2.36l0.12,0.24l1.97,1.44l0.25,0.05l3.87,-0.91l0.22,-0.23l0.58,-2.55l5.09,-1.98l8.67,-3.69l1.22,0.14l-2.06,2.2l0.18,0.5l3.11,0.45l0.23,-0.07l1.71,-1.41l4.59,-0.12l0.12,-0.03l3.53,-1.72l2.7,2.48l0.42,-0.01l2.85,-2.88l-0.0,-0.43l-2.42,-2.35l1.0,-1.13l7.2,1.31l3.42,1.36l9.06,4.97l0.39,-0.08l1.67,-2.27l-0.04,-0.4l-2.46,-2.23l-0.06,-0.82l-0.26,-0.27l-2.64,-0.38l0.69,-1.76l0.0,-0.22l-1.32,-3.47l-0.07,-1.27l4.52,-4.09l0.08,-0.11l1.6,-4.18l1.67,-0.84l6.33,1.2l0.46,2.31l-2.31,3.67l0.05,0.38l1.49,1.41l0.77,3.04l-0.56,6.05l0.09,0.24l2.62,2.54l-0.99,2.65l-4.87,5.96l0.17,0.48l2.86,0.61l0.31,-0.13l0.94,-1.42l2.67,-1.04l0.18,-0.19l0.64,-2.01l2.11,-1.98l0.05,-0.37l-1.38,-2.32l1.11,-2.74l-0.24,-0.41l-2.53,-0.33l-0.53,-2.16l1.96,-4.42l-0.05,-0.32l-3.03,-3.48l4.21,-2.94l0.12,-0.3l-0.52,-3.04l0.72,-0.06l1.18,2.35l-0.97,4.39l0.2,0.35l2.68,0.84l0.37,-0.38l-1.05,-3.07l3.89,-1.71l5.05,-0.24l4.55,2.62l0.36,-0.05l0.05,-0.36l-2.19,-3.84l-0.23,-4.78l4.07,-0.92l5.98,0.21l5.47,-0.64l0.2,-0.48l-1.88,-2.37l2.65,-2.99l2.75,-0.13l0.12,-0.03l4.82,-2.48l6.56,-0.67l0.23,-0.14l0.76,-1.27l6.33,-0.46l1.97,1.11l0.28,0.01l5.55,-2.71l4.53,0.08l0.29,-0.21l0.67,-2.18l2.29,-2.15l5.75,-2.13l3.48,1.4l-2.7,1.03l-0.19,0.31l0.26,0.26l5.47,0.78ZM871.83,65.73l0.25,-0.15l1.99,0.01l3.3,1.2l-0.08,0.22l-2.41,1.03l-5.73,0.49l-0.31,-1.0l2.99,-1.8ZM797.64,48.44l-2.22,1.51l-3.85,-0.43l-4.35,-1.85l0.42,-1.13l4.42,0.72l5.59,1.17ZM783.82,46.06l-1.71,3.25l-9.05,-0.14l-4.11,1.15l-4.64,-3.04l1.21,-3.13l3.11,-0.91l6.53,0.22l8.66,2.59ZM780.37,145.71l2.28,5.23l-3.09,-0.89l-0.37,0.19l-1.54,4.65l0.04,0.27l2.38,3.17l-0.05,1.4l-1.41,-1.41l-0.46,0.04l-1.23,1.81l-0.33,-1.86l0.28,-3.1l-0.28,-3.41l0.58,-2.46l0.11,-4.39l-0.03,-0.13l-1.44,-3.2l0.21,-4.39l2.19,-1.49l0.09,-0.41l-0.81,-1.3l0.48,-0.21l0.56,1.94l0.86,3.23l-0.05,3.36l1.03,3.35ZM780.16,57.18l-3.4,0.03l-5.06,-0.53l1.97,-1.59l2.95,-0.42l3.35,1.75l0.18,0.77ZM683.84,31.18l-13.29,1.97l4.16,-6.56l1.88,-0.58l1.77,0.34l6.08,3.02l-0.6,1.8ZM670.94,28.02l-5.18,0.65l-6.89,-1.58l-4.03,-2.07l-1.88,-3.98l-0.18,-0.16l-2.8,-0.93l5.91,-3.62l5.25,-1.29l4.73,2.88l5.63,5.44l-0.57,4.66ZM564.37,68.98l-0.85,0.23l-7.93,-0.57l-0.6,-1.84l-0.21,-0.2l-4.34,-1.18l-0.3,-2.08l2.34,-0.92l0.19,-0.29l-0.08,-2.43l4.85,-4.0l-0.12,-0.52l-1.68,-0.43l5.47,-3.94l0.11,-0.33l-0.6,-2.02l5.36,-2.55l8.22,-3.27l8.29,-0.96l4.34,-1.94l4.67,-0.65l1.45,1.72l-1.43,1.37l-8.8,2.52l-7.65,2.42l-7.92,4.84l-3.73,4.75l-3.92,4.58l-0.07,0.23l0.51,3.88l0.11,0.2l4.32,3.39ZM548.86,18.57l-3.28,0.75l-2.25,0.44l-0.22,0.19l-0.3,0.81l-2.67,0.86l-2.27,-1.14l1.2,-1.51l-0.23,-0.49l-3.14,-0.1l2.48,-0.54l3.55,-0.07l0.44,1.36l0.49,0.12l1.4,-1.35l2.2,-0.9l3.13,1.08l-0.54,0.49ZM477.5,133.25l-4.21,0.05l-2.69,-0.34l0.39,-1.03l3.24,-1.06l2.51,0.58l0.85,0.43l-0.2,0.71l-0.0,0.15l0.12,0.52Z\", \"name\": \"Russia\"}, \"RW\": {\"path\": \"M497.03,288.12l0.78,1.11l-0.12,1.19l-0.49,0.21l-1.25,-0.15l-0.3,0.16l-0.67,1.24l-1.01,-0.13l0.16,-0.92l0.22,-0.12l0.15,-0.24l0.09,-1.37l0.49,-0.48l0.42,0.18l0.25,-0.01l1.26,-0.65Z\", \"name\": \"Rwanda\"}, \"RS\": {\"path\": \"M469.75,168.65l0.21,-0.21l0.36,-1.44l-0.08,-0.29l-1.06,-1.03l0.54,-1.16l-0.28,-0.43l-0.26,0.0l0.55,-0.67l-0.01,-0.39l-0.77,-0.86l-0.45,-0.89l1.56,-0.67l1.39,0.12l1.22,1.1l0.26,0.91l0.16,0.19l1.38,0.66l0.17,1.12l0.14,0.21l1.46,0.9l0.35,-0.03l0.62,-0.54l0.09,0.06l-0.28,0.25l-0.03,0.42l0.29,0.34l-0.44,0.5l-0.07,0.26l0.22,1.12l0.07,0.14l1.02,1.1l-0.81,0.84l-0.42,0.96l0.04,0.3l0.12,0.15l-0.15,0.16l-1.04,0.04l-0.39,0.08l0.33,-0.81l-0.29,-0.41l-0.21,0.01l-0.39,-0.45l-0.13,-0.09l-0.32,-0.11l-0.27,-0.4l-0.14,-0.11l-0.4,-0.16l-0.31,-0.37l-0.34,-0.09l-0.45,0.17l-0.18,0.18l-0.29,0.84l-0.96,-0.65l-0.81,-0.33l-0.32,-0.37l-0.22,-0.18Z\", \"name\": \"Republic of Serbia\"}, \"LT\": {\"path\": \"M478.13,133.31l-0.14,-0.63l0.25,-0.88l-0.15,-0.35l-1.17,-0.58l-2.43,-0.57l-0.45,-2.51l2.58,-0.97l4.14,0.22l2.3,-0.32l0.26,0.54l0.22,0.17l1.26,0.22l2.25,1.6l0.19,1.23l-1.87,1.01l-0.14,0.18l-0.54,1.83l-2.54,1.21l-2.18,-0.02l-0.52,-0.91l-0.18,-0.14l-1.11,-0.32Z\", \"name\": \"Lithuania\"}, \"LU\": {\"path\": \"M435.95,147.99l0.33,0.49l-0.11,1.07l-0.39,0.04l-0.29,-0.15l0.21,-1.4l0.25,-0.05Z\", \"name\": \"Luxembourg\"}, \"LR\": {\"path\": \"M401.37,273.67l-0.32,0.01l-2.48,-1.15l-2.24,-1.89l-2.14,-1.38l-1.47,-1.42l0.44,-0.59l0.05,-0.13l0.12,-0.65l1.07,-1.3l1.08,-1.09l0.52,-0.07l0.43,-0.18l0.84,1.24l-0.15,0.89l0.07,0.25l0.49,0.54l0.22,0.1l0.71,0.01l0.27,-0.16l0.42,-0.83l0.19,0.02l-0.06,0.52l0.23,1.12l-0.5,1.03l0.06,0.35l0.73,0.69l0.14,0.08l0.71,0.15l0.92,0.91l0.06,0.76l-0.17,0.22l-0.06,0.15l-0.17,1.8Z\", \"name\": \"Liberia\"}, \"RO\": {\"path\": \"M477.94,155.19l1.02,-0.64l1.49,0.33l1.52,0.01l1.09,0.73l0.32,0.01l0.81,-0.46l1.8,-0.3l0.18,-0.1l0.54,-0.64l0.86,0.0l0.64,0.26l0.71,0.87l0.8,1.35l1.39,1.81l0.07,1.25l-0.26,1.3l0.01,0.15l0.45,1.42l0.15,0.18l1.12,0.57l0.25,0.01l1.05,-0.45l0.86,0.4l0.03,0.43l-0.92,0.51l-0.63,-0.24l-0.4,0.22l-0.64,3.41l-1.12,-0.24l-1.78,-1.09l-0.23,-0.04l-2.95,0.71l-1.25,0.77l-3.55,-0.16l-1.89,-0.47l-0.14,-0.0l-0.75,0.17l-0.61,-1.07l-0.3,-0.36l0.36,-0.32l-0.04,-0.48l-0.62,-0.38l-0.36,0.03l-0.62,0.54l-1.15,-0.71l-0.18,-1.14l-0.17,-0.22l-1.4,-0.67l-0.24,-0.86l-0.09,-0.14l-0.96,-0.87l1.49,-0.44l0.16,-0.11l1.51,-2.14l1.15,-2.09l1.44,-0.63Z\", \"name\": \"Romania\"}, \"GW\": {\"path\": \"M383.03,256.73l-1.12,-0.88l-0.14,-0.06l-0.94,-0.15l-0.43,-0.54l0.01,-0.27l-0.13,-0.26l-0.68,-0.48l-0.05,-0.16l0.99,-0.31l0.77,0.08l0.15,-0.02l0.61,-0.26l4.25,0.1l-0.02,0.44l-0.19,0.18l-0.08,0.29l0.17,0.66l-0.17,0.14l-0.44,0.0l-0.16,0.05l-0.57,0.37l-0.66,-0.04l-0.24,0.1l-0.92,1.03Z\", \"name\": \"Guinea Bissau\"}, \"GT\": {\"path\": \"M195.13,249.89l-1.05,-0.35l-1.5,-0.04l-1.06,-0.47l-1.19,-0.93l0.04,-0.53l0.27,-0.55l-0.03,-0.31l-0.24,-0.32l1.02,-1.77l3.04,-0.01l0.3,-0.28l0.06,-0.88l-0.19,-0.3l-0.3,-0.11l-0.23,-0.45l-0.11,-0.12l-0.9,-0.58l-0.35,-0.33l0.37,-0.0l0.3,-0.3l0.0,-1.15l4.05,0.02l-0.02,1.74l-0.2,2.89l0.3,0.32l0.67,-0.0l0.75,0.42l0.4,-0.11l-0.62,0.53l-1.17,0.7l-0.13,0.16l-0.18,0.49l0.0,0.21l0.14,0.34l-0.35,0.44l-0.49,0.13l-0.2,0.41l0.03,0.06l-0.27,0.16l-0.86,0.64l-0.12,0.22ZM199.35,245.38l0.07,-0.13l0.05,0.02l-0.13,0.11Z\", \"name\": \"Guatemala\"}, \"GR\": {\"path\": \"M487.2,174.55l-0.64,1.54l-0.43,0.24l-1.41,-0.08l-1.28,-0.28l-0.14,0.0l-3.03,0.77l-0.13,0.51l1.39,1.34l-0.78,0.29l-1.2,0.0l-1.23,-1.42l-0.47,0.02l-0.47,0.65l-0.04,0.27l0.56,1.76l0.06,0.11l1.02,1.12l-0.66,0.45l-0.04,0.46l1.39,1.35l1.15,0.79l0.02,1.06l-1.91,-0.63l-0.36,0.42l0.56,1.12l-1.2,0.23l-0.22,0.4l0.8,2.14l-1.15,0.02l-1.89,-1.15l-0.89,-2.19l-0.43,-1.91l-0.05,-0.11l-0.98,-1.35l-1.24,-1.62l-0.13,-0.63l1.07,-1.32l0.06,-0.14l0.13,-0.81l0.68,-0.36l0.16,-0.25l0.03,-0.54l1.4,-0.23l0.12,-0.05l0.87,-0.6l1.26,0.05l0.25,-0.11l0.34,-0.43l0.33,-0.07l1.81,0.08l0.13,-0.02l1.87,-0.77l1.64,0.97l0.19,0.04l2.28,-0.28l0.26,-0.29l0.02,-0.95l0.56,0.36ZM480.44,192.0l1.05,0.74l0.01,0.0l-1.26,-0.23l0.2,-0.51ZM481.76,192.79l1.86,-0.15l1.53,0.17l-0.02,0.19l0.34,0.3l-2.28,0.15l0.01,-0.13l-0.25,-0.31l-1.19,-0.22ZM485.65,193.28l0.65,-0.16l-0.05,0.12l-0.6,0.04Z\", \"name\": \"Greece\"}, \"GQ\": {\"path\": \"M444.81,282.04l-0.21,-0.17l0.74,-2.4l3.56,0.05l0.02,2.42l-3.34,-0.02l-0.76,0.13Z\", \"name\": \"Equatorial Guinea\"}, \"GY\": {\"path\": \"M271.34,264.25l1.43,0.81l1.44,1.53l0.06,1.19l0.28,0.28l0.84,0.05l2.13,1.92l-0.34,1.93l-1.37,0.59l-0.17,0.34l0.12,0.51l-0.43,1.21l0.03,0.26l1.11,1.82l0.26,0.14l0.56,0.0l0.32,1.29l1.25,1.78l-0.08,0.01l-1.34,-0.21l-0.24,0.06l-0.78,0.64l-1.06,0.41l-0.76,0.1l-0.22,0.15l-0.18,0.32l-0.95,-0.1l-1.38,-1.05l-0.19,-1.13l-0.6,-1.18l0.37,-1.96l0.65,-0.83l0.03,-0.32l-0.57,-1.17l-0.15,-0.14l-0.62,-0.27l0.25,-0.85l-0.08,-0.3l-0.58,-0.58l-0.24,-0.09l-1.15,0.1l-1.41,-1.58l0.48,-0.49l0.09,-0.22l-0.04,-0.92l1.31,-0.34l0.73,-0.52l0.04,-0.44l-0.75,-0.82l0.16,-0.66l1.74,-1.3Z\", \"name\": \"Guyana\"}, \"GE\": {\"path\": \"M525.41,174.19l0.26,-0.88l-0.0,-0.17l-0.63,-2.06l-0.1,-0.15l-1.45,-1.12l-0.11,-0.05l-1.31,-0.33l-0.66,-0.69l1.97,0.48l3.65,0.49l3.3,1.41l0.39,0.5l0.33,0.1l1.43,-0.45l2.14,0.58l0.7,1.14l0.13,0.12l1.06,0.47l-0.18,0.11l-0.08,0.43l1.08,1.41l-0.06,0.06l-1.16,-0.15l-1.82,-0.84l-0.31,0.04l-0.55,0.44l-3.29,0.44l-2.32,-1.41l-0.17,-0.04l-2.25,0.12Z\", \"name\": \"Georgia\"}, \"GB\": {\"path\": \"M412.82,118.6l-2.31,3.4l-0.0,0.33l0.31,0.13l2.52,-0.49l2.34,0.02l-0.56,2.51l-2.22,3.13l0.22,0.47l2.43,0.21l2.35,4.35l0.17,0.14l1.58,0.51l1.49,3.78l0.73,1.37l0.2,0.15l2.76,0.59l-0.25,1.75l-1.18,0.91l-0.08,0.39l0.87,1.49l-1.96,1.51l-3.31,-0.02l-4.15,0.88l-1.07,-0.59l-0.35,0.04l-1.55,1.44l-2.17,-0.35l-0.22,0.05l-1.61,1.15l-0.78,-0.38l3.31,-3.12l2.18,-0.7l0.21,-0.31l-0.26,-0.27l-3.78,-0.54l-0.48,-0.9l2.3,-0.92l0.13,-0.46l-1.29,-1.71l0.39,-1.83l3.46,0.29l0.32,-0.24l0.37,-1.99l-0.06,-0.24l-1.71,-2.17l-0.18,-0.11l-2.91,-0.58l-0.43,-0.68l0.82,-1.4l-0.03,-0.35l-0.82,-0.97l-0.46,0.01l-0.85,1.05l-0.11,-2.6l-0.05,-0.16l-1.19,-1.7l0.86,-3.53l1.81,-2.75l1.88,0.26l2.38,-0.24ZM406.39,132.84l-1.09,1.92l-1.65,-0.62l-1.26,0.02l0.41,-1.46l0.0,-0.16l-0.42,-1.51l1.62,-0.11l2.39,1.92Z\", \"name\": \"United Kingdom\"}, \"GA\": {\"path\": \"M448.76,294.47l-2.38,-2.34l-1.63,-2.04l-1.46,-2.48l0.06,-0.66l0.54,-0.81l0.61,-1.82l0.46,-1.69l0.63,-0.11l3.62,0.03l0.3,-0.3l-0.02,-2.75l0.88,-0.12l1.47,0.32l0.13,0.0l1.39,-0.3l-0.13,0.87l0.03,0.19l0.7,1.29l0.3,0.16l1.74,-0.19l0.36,0.29l-1.01,2.7l0.05,0.29l1.13,1.42l0.25,1.82l-0.3,1.56l-0.64,0.99l-1.93,-0.09l-1.26,-1.13l-0.5,0.17l-0.16,0.91l-1.48,0.27l-0.12,0.05l-0.86,0.63l-0.08,0.39l0.81,1.42l-1.48,1.08Z\", \"name\": \"Gabon\"}, \"GN\": {\"path\": \"M399.83,265.31l-0.69,-0.06l-0.3,0.16l-0.43,0.85l-0.39,-0.01l-0.3,-0.33l0.14,-0.87l-0.05,-0.22l-1.05,-1.54l-0.37,-0.11l-0.61,0.27l-0.84,0.12l0.02,-0.54l-0.04,-0.17l-0.35,-0.57l0.07,-0.63l-0.03,-0.17l-0.57,-1.11l-0.7,-0.9l-0.24,-0.12l-2.0,-0.0l-0.19,0.07l-0.51,0.42l-0.6,0.05l-0.21,0.11l-0.43,0.55l-0.3,0.7l-1.04,0.86l-0.91,-1.24l-1.0,-1.02l-0.69,-0.37l-0.52,-0.42l-0.3,-1.11l-0.37,-0.56l-0.1,-0.1l-0.4,-0.23l0.77,-0.85l0.62,0.04l0.18,-0.05l0.58,-0.38l0.46,-0.0l0.19,-0.07l0.39,-0.34l0.1,-0.3l-0.17,-0.67l0.15,-0.14l0.09,-0.2l0.03,-0.57l0.87,0.02l1.76,0.6l0.13,0.01l0.55,-0.06l0.22,-0.13l0.08,-0.12l1.18,0.17l0.17,-0.02l0.09,0.56l0.3,0.25l0.4,-0.0l0.14,-0.03l0.56,-0.29l0.23,0.05l0.63,0.59l0.15,0.07l1.07,0.2l0.24,-0.06l0.65,-0.52l0.77,-0.32l0.55,-0.32l0.3,0.04l0.44,0.45l0.34,0.74l0.84,0.87l-0.35,0.45l-0.06,0.15l-0.1,0.82l0.42,0.31l0.35,-0.16l0.05,0.04l-0.1,0.59l0.09,0.27l0.42,0.4l-0.06,0.02l-0.18,0.21l-0.2,0.86l0.03,0.21l0.56,1.02l0.52,1.71l-0.65,0.21l-0.15,0.12l-0.24,0.35l-0.03,0.28l0.16,0.41l-0.1,0.76l-0.12,0.0Z\", \"name\": \"Guinea\"}, \"GM\": {\"path\": \"M379.18,251.48l0.15,-0.55l2.51,-0.07l0.21,-0.09l0.48,-0.52l0.58,-0.03l0.91,0.58l0.16,0.05l0.78,0.01l0.14,-0.03l0.59,-0.31l0.16,0.24l-0.71,0.38l-0.94,-0.04l-1.02,-0.51l-0.3,0.01l-0.86,0.55l-0.37,0.02l-0.14,0.04l-0.53,0.31l-1.81,-0.04Z\", \"name\": \"Gambia\"}, \"GL\": {\"path\": \"M304.13,6.6l8.19,-3.63l8.72,0.28l0.19,-0.06l3.12,-2.28l8.75,-0.61l19.94,0.8l14.93,4.75l-3.92,2.01l-9.52,0.27l-13.48,0.6l-0.27,0.2l0.09,0.33l1.26,1.09l0.22,0.07l8.81,-0.67l7.49,2.07l0.19,-0.01l4.68,-1.78l1.76,1.84l-2.59,3.26l-0.01,0.36l0.34,0.11l6.35,-2.2l12.09,-2.32l7.31,1.14l1.17,2.13l-9.9,4.05l-1.43,1.32l-7.91,0.98l-0.26,0.31l0.29,0.29l5.25,0.25l-2.63,3.72l-2.02,3.61l-0.04,0.15l0.08,6.05l0.07,0.19l2.61,3.0l-3.4,0.2l-4.12,1.66l-0.04,0.54l4.5,2.67l0.53,3.9l-2.39,0.42l-0.19,0.48l2.91,3.83l-5.0,0.32l-0.27,0.22l0.12,0.33l2.69,1.84l-0.65,1.35l-3.36,0.71l-3.46,0.01l-0.21,0.51l3.05,3.15l0.02,1.53l-4.54,-1.79l-0.32,0.06l-1.29,1.26l0.11,0.5l3.33,1.15l3.17,2.74l0.85,3.29l-4.0,0.78l-1.83,-1.66l-3.1,-2.64l-0.36,-0.02l-0.13,0.33l0.8,2.92l-2.76,2.26l-0.09,0.33l0.28,0.2l6.59,0.19l2.47,0.18l-5.86,3.38l-6.76,3.43l-7.26,1.48l-2.73,0.02l-0.16,0.05l-2.67,1.72l-3.44,4.42l-5.28,2.86l-1.73,0.18l-3.33,1.01l-3.59,0.96l-0.15,0.1l-2.15,2.52l-0.07,0.19l-0.03,2.76l-1.21,2.49l-4.03,3.1l-0.1,0.33l0.98,2.94l-2.31,6.57l-3.21,0.21l-3.6,-3.0l-0.19,-0.07l-4.9,-0.02l-2.29,-1.97l-1.69,-3.78l-4.31,-4.86l-1.23,-2.52l-0.34,-3.58l-0.08,-0.17l-3.35,-3.67l0.85,-2.92l-0.09,-0.31l-1.5,-1.34l2.33,-4.7l3.67,-1.57l0.15,-0.13l1.02,-1.93l0.52,-3.47l-0.44,-0.31l-2.85,1.57l-1.33,0.64l-2.12,0.59l-2.81,-1.32l-0.15,-2.79l0.88,-2.17l2.09,-0.06l5.07,1.2l0.34,-0.17l-0.11,-0.37l-4.3,-2.9l-2.24,-1.58l-0.25,-0.05l-2.38,0.62l-1.7,-0.93l2.62,-4.1l-0.03,-0.36l-1.51,-1.75l-1.97,-3.3l-3.01,-5.21l-0.1,-0.11l-3.04,-1.85l0.03,-1.94l-0.18,-0.28l-6.82,-3.01l-5.35,-0.38l-6.69,0.21l-6.03,0.37l-2.81,-1.59l-3.84,-2.9l5.94,-1.5l5.01,-0.28l0.28,-0.29l-0.26,-0.31l-10.68,-1.38l-5.38,-2.1l0.27,-1.68l9.3,-2.6l9.18,-2.68l0.19,-0.16l0.97,-2.05l-0.18,-0.42l-6.29,-1.91l1.81,-1.9l8.58,-4.05l3.6,-0.63l0.23,-0.4l-0.92,-2.37l5.59,-1.5l7.66,-0.95l7.58,-0.05l2.65,1.84l0.31,0.02l6.52,-3.29l5.85,2.24l3.55,0.49l5.17,1.95l0.38,-0.16l-0.13,-0.39l-5.77,-3.16l0.29,-2.26Z\", \"name\": \"Greenland\"}, \"KW\": {\"path\": \"M540.87,207.81l0.41,0.94l-0.18,0.51l0.0,0.21l0.65,1.66l-1.15,0.05l-0.54,-1.12l-0.24,-0.17l-1.73,-0.2l1.44,-2.06l1.33,0.18Z\", \"name\": \"Kuwait\"}, \"GH\": {\"path\": \"M423.16,269.88l-3.58,1.34l-1.41,0.87l-2.13,0.69l-1.91,-0.61l0.09,-0.75l-0.03,-0.17l-1.04,-2.07l0.62,-2.7l1.04,-2.08l0.03,-0.19l-1.0,-5.46l0.05,-1.12l4.04,-0.11l1.08,0.18l0.18,-0.03l0.72,-0.36l0.75,0.13l-0.11,0.48l0.06,0.26l0.98,1.22l-0.0,1.77l0.24,1.99l0.05,0.13l0.55,0.81l-0.52,2.14l0.19,1.37l0.69,1.66l0.38,0.62Z\", \"name\": \"Ghana\"}, \"OM\": {\"path\": \"M568.16,231.0l-0.08,0.1l-0.84,1.61l-0.93,-0.11l-0.27,0.11l-0.58,0.73l-0.4,1.32l-0.01,0.14l0.29,1.61l-0.07,0.09l-1.0,-0.01l-0.16,0.04l-1.56,0.97l-0.14,0.2l-0.23,1.17l-0.41,0.4l-1.44,-0.02l-0.17,0.05l-0.98,0.65l-0.13,0.25l0.01,0.87l-0.97,0.57l-1.27,-0.22l-0.19,0.03l-1.63,0.84l-0.88,0.11l-2.55,-5.57l7.2,-2.49l0.19,-0.19l1.67,-5.23l-0.03,-0.25l-1.1,-1.78l0.05,-0.89l0.68,-1.03l0.05,-0.16l0.01,-0.89l0.96,-0.44l0.07,-0.5l-0.32,-0.26l0.16,-1.31l0.85,-0.01l1.03,1.67l0.09,0.09l1.4,0.96l0.11,0.05l1.82,0.34l1.37,0.45l1.75,2.32l0.13,0.1l0.7,0.26l-0.0,0.3l-1.25,2.19l-1.01,0.8ZM561.88,218.47l-0.01,0.02l-0.15,-0.29l0.3,-0.38l-0.14,0.65Z\", \"name\": \"Oman\"}, \"_3\": {\"path\": \"M543.2,261.06l-1.07,1.46l-1.65,1.99l-1.91,0.01l-8.08,-2.95l-0.89,-0.84l-0.9,-1.19l-0.81,-1.23l0.44,-0.73l0.76,-1.12l0.49,0.28l0.52,1.05l1.13,1.06l0.2,0.08l1.24,0.01l2.42,-0.65l2.77,-0.31l2.17,-0.78l1.31,-0.19l0.84,-0.43l1.03,-0.06l-0.01,4.54Z\", \"name\": \"Somaliland\"}, \"_2\": {\"path\": \"M384.23,230.37l0.07,-0.06l0.28,-0.89l0.99,-1.13l0.07,-0.13l0.8,-3.54l3.4,-2.8l0.09,-0.13l0.76,-2.17l0.07,5.5l-2.07,0.21l-0.24,0.17l-0.61,1.36l-0.02,0.16l0.43,3.46l-4.01,-0.01ZM391.82,218.2l0.07,-0.06l0.75,-1.93l1.86,-0.25l0.94,0.34l1.14,0.0l0.18,-0.06l0.73,-0.56l1.41,-0.08l-0.0,2.72l-7.08,-0.12Z\", \"name\": \"Western Sahara\"}, \"_1\": {\"path\": \"M472.71,172.84l-0.07,-0.43l-0.16,-0.22l-0.53,-0.27l-0.38,-0.58l0.3,-0.43l0.51,-0.19l0.18,-0.18l0.3,-0.87l0.12,-0.04l0.22,0.26l0.12,0.09l0.38,0.15l0.28,0.41l0.15,0.12l0.34,0.12l0.43,0.5l0.15,0.07l-0.12,0.3l-0.27,0.32l-0.03,0.18l-0.31,0.06l-1.48,0.47l-0.15,0.17Z\", \"name\": \"Kosovo\"}, \"_0\": {\"path\": \"M503.54,192.92l0.09,-0.17l0.41,0.01l-0.08,0.01l-0.42,0.15ZM504.23,192.76l1.02,0.02l0.4,-0.13l-0.09,0.29l0.03,0.08l-0.35,0.16l-0.24,-0.04l-0.06,-0.1l-0.18,-0.17l-0.19,-0.08l-0.33,-0.02Z\", \"name\": \"Northern Cyprus\"}, \"JO\": {\"path\": \"M510.26,200.93l0.28,-0.57l2.53,1.0l0.27,-0.02l4.57,-2.77l0.84,2.84l-0.28,0.25l-4.95,1.37l-0.14,0.49l2.24,2.48l-0.5,0.28l-0.13,0.14l-0.35,0.78l-1.76,0.35l-0.2,0.14l-0.57,0.94l-0.94,0.73l-2.45,-0.38l-0.03,-0.12l1.23,-4.32l-0.04,-1.1l0.34,-0.75l0.03,-0.12l0.0,-1.63Z\", \"name\": \"Jordan\"}, \"HR\": {\"path\": \"M455.49,162.73l1.53,0.09l0.24,-0.1l0.29,-0.34l0.64,0.38l0.14,0.04l0.98,0.06l0.32,-0.3l-0.01,-0.66l0.67,-0.25l0.19,-0.22l0.21,-1.11l1.72,-0.72l0.65,0.32l1.94,1.37l2.07,0.6l0.22,-0.02l0.67,-0.33l0.47,0.94l0.67,0.76l-0.63,0.77l-0.91,-0.55l-0.16,-0.04l-1.69,0.04l-2.2,-0.51l-1.17,0.07l-0.21,0.11l-0.36,0.42l-0.67,-0.53l-0.46,0.12l-0.52,1.29l0.05,0.31l1.21,1.42l0.58,0.99l1.15,1.14l0.95,0.68l0.92,1.23l0.1,0.09l1.75,0.91l-1.87,-0.89l-1.5,-1.11l-2.23,-0.88l-1.77,-1.9l0.12,-0.06l0.1,-0.47l-1.07,-1.22l-0.04,-0.94l-0.21,-0.27l-1.61,-0.49l-0.35,0.14l-0.53,0.93l-0.41,-0.57l0.04,-0.73Z\", \"name\": \"Croatia\"}, \"HT\": {\"path\": \"M237.82,234.68l1.35,0.1l1.95,0.37l0.18,1.15l-0.16,0.83l-0.51,0.37l-0.06,0.44l0.57,0.68l-0.02,0.22l-1.31,-0.35l-1.26,0.17l-1.49,-0.18l-0.15,0.02l-1.03,0.43l-1.02,-0.61l0.09,-0.36l2.04,0.32l1.9,0.21l0.19,-0.05l0.9,-0.58l0.05,-0.47l-1.05,-1.03l0.02,-0.86l-0.23,-0.3l-1.13,-0.29l0.18,-0.23Z\", \"name\": \"Haiti\"}, \"HU\": {\"path\": \"M461.96,157.92l0.68,-1.66l-0.03,-0.29l-0.15,-0.22l0.84,-0.0l0.3,-0.26l0.12,-0.84l0.88,0.57l0.98,0.38l0.16,0.01l2.1,-0.39l0.23,-0.21l0.14,-0.45l0.88,-0.1l1.06,-0.43l0.13,0.1l0.28,0.04l1.18,-0.4l0.14,-0.1l0.52,-0.67l0.63,-0.15l2.6,0.95l0.26,-0.03l0.38,-0.23l1.12,0.7l0.1,0.49l-1.31,0.57l-0.14,0.13l-1.18,2.14l-1.44,2.04l-1.85,0.55l-1.51,-0.13l-0.14,0.02l-1.92,0.82l-0.85,0.42l-1.91,-0.55l-1.83,-1.31l-0.74,-0.37l-0.44,-0.97l-0.26,-0.18Z\", \"name\": \"Hungary\"}, \"HN\": {\"path\": \"M202.48,251.87l-0.33,-0.62l-0.18,-0.14l-0.5,-0.15l0.13,-0.76l-0.11,-0.28l-0.34,-0.28l-0.6,-0.23l-0.18,-0.01l-0.81,0.22l-0.16,-0.24l-0.72,-0.39l-0.51,-0.48l-0.12,-0.07l-0.31,-0.09l0.24,-0.3l0.04,-0.3l-0.16,-0.4l0.1,-0.28l1.14,-0.69l1.0,-0.86l0.09,0.04l0.3,-0.05l0.47,-0.39l0.49,-0.03l0.14,0.13l0.29,0.06l0.31,-0.1l1.16,0.22l1.24,-0.08l0.81,-0.28l0.29,-0.25l0.63,0.1l0.69,0.18l0.65,-0.06l0.49,-0.2l1.04,0.32l0.38,0.06l0.7,0.44l0.71,0.56l0.92,0.41l0.1,0.11l-0.11,-0.01l-0.23,0.09l-0.3,0.3l-0.76,0.29l-0.58,0.0l-0.15,0.04l-0.45,0.26l-0.31,-0.07l-0.37,-0.34l-0.28,-0.07l-0.26,0.07l-0.18,0.15l-0.23,0.43l-0.04,-0.0l-0.33,0.28l-0.03,0.4l-0.76,0.61l-0.45,0.3l-0.15,0.16l-0.51,-0.36l-0.41,0.06l-0.45,0.56l-0.41,-0.01l-0.59,0.06l-0.27,0.31l0.04,0.96l-0.07,0.0l-0.25,0.16l-0.24,0.45l-0.42,0.06Z\", \"name\": \"Honduras\"}, \"PR\": {\"path\": \"M254.95,238.31l1.15,0.21l0.2,0.23l-0.36,0.36l-1.76,-0.01l-1.2,0.07l-0.09,-0.69l0.17,-0.18l1.89,0.01Z\", \"name\": \"Puerto Rico\"}, \"PS\": {\"path\": \"M509.66,201.06l-0.0,1.44l-0.29,0.63l-0.59,0.19l0.02,-0.11l0.52,-0.31l-0.02,-0.53l-0.41,-0.2l0.36,-1.28l0.41,0.17Z\", \"name\": \"West Bank\"}, \"PT\": {\"path\": \"M398.65,173.6l0.75,-0.63l0.7,-0.3l0.51,1.2l0.28,0.18l1.48,-0.0l0.2,-0.08l0.33,-0.3l1.16,0.08l0.52,1.11l-0.95,0.66l-0.13,0.24l-0.03,2.2l-0.33,0.35l-0.08,0.18l-0.08,1.17l-0.86,0.19l-0.2,0.44l0.93,1.64l-0.64,1.79l0.07,0.31l0.72,0.72l-0.24,0.56l-0.9,1.05l-0.07,0.26l0.17,0.77l-0.73,0.54l-1.18,-0.36l-0.16,-0.0l-0.85,0.21l0.31,-1.81l-0.23,-1.87l-0.23,-0.25l-0.99,-0.24l-0.49,-0.91l0.18,-1.72l0.93,-0.99l0.08,-0.16l0.17,-1.17l0.52,-1.76l-0.04,-1.36l-0.51,-1.14l-0.09,-0.8Z\", \"name\": \"Portugal\"}, \"PY\": {\"path\": \"M264.33,341.43l0.93,-2.96l0.07,-1.42l1.1,-2.1l4.19,-0.73l2.22,0.04l2.12,1.21l0.07,0.76l0.7,1.38l-0.16,3.48l0.24,0.31l2.64,0.5l0.19,-0.03l0.9,-0.45l1.47,0.62l0.38,0.64l0.23,2.35l0.3,1.07l0.25,0.21l0.93,0.12l0.16,-0.02l0.8,-0.37l0.61,0.33l-0.0,1.25l-0.33,1.53l-0.5,1.57l-0.39,2.26l-2.14,1.94l-1.85,0.4l-2.74,-0.4l-2.13,-0.62l2.26,-3.75l0.03,-0.24l-0.36,-1.18l-0.17,-0.19l-2.55,-1.03l-3.04,-1.95l-2.07,-0.43l-4.4,-4.12Z\", \"name\": \"Paraguay\"}, \"PA\": {\"path\": \"M213.65,263.79l0.18,-0.43l0.02,-0.18l-0.06,-0.28l0.23,-0.18l-0.01,-0.48l-0.4,-0.29l-0.01,-0.62l0.57,-0.13l0.68,0.69l-0.04,0.39l0.26,0.33l1.0,0.11l0.27,-0.1l0.49,0.44l0.24,0.07l1.34,-0.22l1.04,-0.62l1.49,-0.5l0.86,-0.73l0.99,0.11l0.18,0.28l1.35,0.08l1.02,0.4l0.78,0.72l0.71,0.53l-0.1,0.12l-0.05,0.3l0.53,1.34l-0.28,0.44l-0.6,-0.13l-0.36,0.22l-0.2,0.76l-0.41,-0.36l-0.44,-1.12l0.49,-0.53l-0.14,-0.49l-0.51,-0.14l-0.41,-0.72l-0.11,-0.11l-1.25,-0.7l-0.19,-0.04l-1.1,0.16l-0.22,0.15l-0.47,0.81l-0.9,0.56l-0.49,0.08l-0.22,0.17l-0.25,0.52l0.05,0.32l0.93,1.07l-0.41,0.21l-0.29,0.3l-0.81,0.09l-0.36,-1.26l-0.53,-0.1l-0.21,0.28l-0.5,-0.09l-0.44,-0.88l-0.22,-0.16l-0.99,-0.16l-0.61,-0.28l-0.13,-0.03l-1.0,0.0Z\", \"name\": \"Panama\"}, \"PG\": {\"path\": \"M808.4,298.6l0.62,0.46l1.19,1.56l1.04,0.77l-0.18,0.37l-0.42,0.15l-0.92,-0.82l-1.05,-1.53l-0.27,-0.96ZM804.09,296.06l-0.3,0.26l-0.36,-1.11l-0.66,-1.06l-2.55,-1.89l-1.42,-0.59l0.17,-0.15l1.16,0.6l0.85,0.55l1.01,0.58l0.97,1.02l0.9,0.76l0.24,1.03ZM796.71,297.99l0.15,0.82l0.34,0.24l1.43,-0.19l0.19,-0.11l0.68,-0.82l1.36,-0.87l0.13,-0.31l-0.21,-1.13l1.04,-0.03l0.3,0.25l-0.04,1.17l-0.74,1.34l-1.17,0.18l-0.22,0.15l-0.35,0.62l-2.51,1.13l-1.21,-0.0l-1.99,-0.71l-1.19,-0.58l0.07,-0.28l1.98,0.32l1.46,-0.2l0.24,-0.21l0.25,-0.79ZM789.24,303.52l0.11,0.15l2.19,1.62l1.6,2.62l0.27,0.14l1.09,-0.06l-0.07,0.77l0.23,0.32l1.23,0.27l-0.14,0.09l0.05,0.53l2.39,0.95l-0.11,0.28l-1.33,0.14l-0.51,-0.55l-0.18,-0.09l-4.59,-0.65l-1.87,-1.55l-1.38,-1.35l-1.28,-2.17l-0.16,-0.13l-3.27,-1.1l-0.19,0.0l-2.12,0.72l-1.58,0.85l-0.15,0.31l0.28,1.63l-1.65,0.73l-1.37,-0.4l-2.3,-0.09l-0.08,-15.65l3.95,1.57l4.58,1.42l1.67,1.25l1.32,1.19l0.36,1.39l0.19,0.21l4.06,1.51l0.39,0.85l-1.9,0.22l-0.25,0.39l0.55,1.68Z\", \"name\": \"Papua New Guinea\"}, \"PE\": {\"path\": \"M246.44,329.21l-0.63,1.25l-1.05,0.54l-2.25,-1.33l-0.19,-0.93l-0.16,-0.21l-4.95,-2.58l-4.46,-2.79l-1.87,-1.52l-0.94,-1.91l0.33,-0.6l-0.01,-0.31l-2.11,-3.33l-2.46,-4.66l-2.36,-5.02l-1.04,-1.18l-0.77,-1.81l-0.08,-0.11l-1.95,-1.64l-1.54,-0.88l0.61,-0.85l0.02,-0.31l-1.15,-2.27l0.69,-1.56l1.59,-1.26l0.12,0.42l-0.56,0.47l-0.11,0.25l0.07,0.92l0.36,0.27l0.97,-0.19l0.85,0.23l0.99,1.19l0.41,0.05l1.42,-1.03l0.11,-0.16l0.46,-1.64l1.45,-2.06l2.92,-0.96l0.11,-0.07l2.73,-2.62l0.84,-1.72l0.02,-0.18l-0.3,-1.65l0.28,-0.1l1.49,1.06l0.77,1.14l0.1,0.09l1.08,0.6l1.43,2.55l0.21,0.15l1.86,0.31l0.18,-0.03l1.25,-0.6l0.77,0.37l0.17,0.03l1.4,-0.2l1.57,0.96l-1.45,2.29l0.23,0.46l0.63,0.05l0.66,0.7l-1.51,-0.08l-0.24,0.1l-0.27,0.31l-1.96,0.46l-2.95,1.74l-0.14,0.21l-0.17,1.1l-0.6,0.82l-0.05,0.23l0.21,1.13l-1.31,0.63l-0.17,0.27l0.0,0.91l-0.53,0.37l-0.1,0.37l1.04,2.27l1.31,1.46l-0.44,0.9l0.24,0.43l1.52,0.13l0.87,1.23l0.24,0.13l2.21,0.07l0.18,-0.06l1.55,-1.13l-0.14,3.22l0.23,0.3l1.14,0.29l0.16,-0.0l1.18,-0.36l1.97,3.71l-0.45,0.71l-0.04,0.14l-0.12,1.8l-0.05,2.07l-0.92,1.2l-0.03,0.31l0.38,0.8l-0.48,0.72l-0.02,0.3l1.01,2.02l-1.5,2.64Z\", \"name\": \"Peru\"}, \"PK\": {\"path\": \"M609.08,187.76l1.66,1.21l0.71,2.11l0.2,0.19l3.62,1.01l-1.98,1.95l-2.65,0.4l-3.75,-0.68l-0.26,0.08l-1.23,1.22l-0.07,0.31l0.89,2.46l0.88,1.92l0.1,0.12l1.67,1.14l-1.8,1.35l-0.12,0.25l0.04,1.85l-2.35,2.67l-1.59,2.79l-2.5,2.72l-2.76,-0.2l-0.24,0.09l-2.76,2.83l0.04,0.45l1.54,1.13l0.27,1.94l0.09,0.17l1.34,1.29l0.4,1.83l-5.14,-0.01l-0.22,0.09l-1.53,1.63l-1.52,-0.56l-0.76,-1.88l-1.93,-2.03l-0.25,-0.09l-4.6,0.5l-4.05,0.05l-3.1,0.33l0.77,-2.53l3.48,-1.33l0.19,-0.33l-0.21,-1.24l-0.19,-0.23l-1.01,-0.37l-0.06,-2.18l-0.17,-0.26l-2.32,-1.16l-0.96,-1.57l-0.56,-0.65l3.16,1.05l0.14,0.01l2.45,-0.4l1.44,0.33l0.3,-0.1l0.4,-0.47l1.58,0.22l0.14,-0.01l3.25,-1.14l0.2,-0.27l0.08,-2.23l1.23,-1.38l1.73,0.0l0.28,-0.2l0.22,-0.61l1.68,-0.32l0.86,0.24l0.27,-0.05l0.98,-0.78l0.11,-0.26l-0.13,-1.57l0.96,-1.52l1.51,-0.67l0.14,-0.41l-0.74,-1.4l1.86,0.07l0.26,-0.13l0.69,-1.01l0.05,-0.2l-0.09,-0.94l1.14,-1.09l0.09,-0.28l-0.29,-1.41l-0.51,-1.07l1.23,-1.05l2.6,-0.58l2.86,-0.33l1.33,-0.54l1.3,-0.29Z\", \"name\": \"Pakistan\"}, \"PH\": {\"path\": \"M737.11,263.82l0.25,1.66l0.14,1.34l-0.54,1.46l-0.64,-1.79l-0.5,-0.1l-1.17,1.28l-0.05,0.32l0.74,1.71l-0.49,0.81l-2.6,-1.28l-0.61,-1.57l0.68,-1.07l-0.07,-0.4l-1.59,-1.19l-0.42,0.06l-0.69,0.91l-1.01,-0.08l-0.21,0.06l-1.58,1.2l-0.17,-0.3l0.87,-1.88l1.48,-0.66l1.18,-0.81l0.71,0.92l0.34,0.1l1.9,-0.69l0.18,-0.18l0.34,-0.94l1.57,-0.06l0.29,-0.32l-0.1,-1.38l1.41,0.83l0.36,2.06ZM734.94,254.42l0.56,2.24l-1.41,-0.49l-0.4,0.3l0.07,0.94l0.51,1.3l-0.54,0.26l-0.08,-1.34l-0.25,-0.28l-0.56,-0.1l-0.23,-0.91l1.03,0.14l0.34,-0.31l-0.03,-0.96l-0.06,-0.18l-1.14,-1.44l1.62,0.04l0.57,0.78ZM724.68,238.33l1.48,0.71l0.33,-0.04l0.44,-0.38l0.05,0.13l-0.37,0.97l0.01,0.23l0.81,1.75l-0.59,1.92l-1.37,0.79l-0.14,0.2l-0.39,2.07l0.01,0.14l0.56,2.04l0.23,0.21l1.33,0.28l0.14,-0.0l1.0,-0.27l2.82,1.28l-0.2,1.16l0.12,0.29l0.66,0.5l-0.13,0.56l-1.54,-0.99l-0.89,-1.29l-0.49,0.0l-0.44,0.65l-1.34,-1.28l-0.26,-0.08l-2.18,0.36l-0.96,-0.44l0.09,-0.72l0.69,-0.57l-0.01,-0.47l-0.75,-0.59l-0.47,0.14l-0.15,0.43l-0.86,-1.02l-0.34,-1.02l-0.07,-1.74l0.49,0.41l0.49,-0.21l0.26,-3.99l0.73,-2.1l1.23,0.0ZM731.12,258.92l-0.82,0.75l-0.83,1.64l-0.52,0.5l-1.17,-1.33l0.36,-0.47l0.62,-0.7l0.07,-0.15l0.24,-1.35l0.73,-0.08l-0.31,1.29l0.16,0.34l0.37,-0.09l1.21,-1.6l-0.12,1.24ZM726.66,255.58l0.85,0.45l0.14,0.03l1.28,-0.0l-0.03,0.62l-1.04,0.96l-1.15,0.55l-0.05,-0.71l0.17,-1.26l-0.01,-0.13l-0.16,-0.51ZM724.92,252.06l-0.45,1.5l-0.7,-0.83l-0.95,-1.43l1.44,0.06l0.67,0.7ZM717.48,261.28l-1.87,1.35l0.21,-0.3l1.81,-1.57l1.5,-1.75l0.97,-1.84l0.23,1.08l-1.56,1.33l-1.29,1.7Z\", \"name\": \"Philippines\"}, \"PL\": {\"path\": \"M458.8,144.25l-0.96,-1.98l0.18,-1.06l-0.01,-0.15l-0.62,-1.8l-0.82,-1.11l0.56,-0.73l0.05,-0.28l-0.51,-1.51l1.48,-0.87l3.88,-1.58l3.06,-1.14l2.23,0.52l0.15,0.66l0.29,0.23l2.4,0.04l3.11,0.39l4.56,-0.05l1.12,0.32l0.51,0.89l0.1,1.45l0.03,0.12l0.66,1.23l-0.01,1.08l-1.33,0.61l-0.14,0.41l0.74,1.5l0.07,1.53l1.22,2.79l-0.19,0.66l-1.09,0.33l-0.14,0.09l-2.27,2.72l-0.04,0.31l0.35,0.8l-2.22,-1.16l-0.21,-0.02l-1.72,0.44l-1.1,-0.31l-0.21,0.02l-1.3,0.61l-1.11,-1.02l-0.32,-0.05l-0.81,0.35l-1.15,-1.61l-0.21,-0.12l-1.65,-0.17l-0.19,-0.82l-0.23,-0.23l-1.72,-0.37l-0.34,0.17l-0.25,0.56l-0.88,-0.44l0.12,-0.69l-0.25,-0.35l-1.78,-0.27l-1.08,-0.97Z\", \"name\": \"Poland\"}, \"ZM\": {\"path\": \"M502.81,308.32l1.09,1.04l0.58,1.94l-0.39,0.66l-0.5,2.05l-0.0,0.14l0.45,1.95l-0.69,0.77l-0.06,0.11l-0.76,2.37l0.15,0.36l0.62,0.31l-6.85,1.9l-0.22,0.33l0.2,1.54l-1.62,0.3l-0.12,0.05l-1.43,1.02l-0.11,0.15l-0.25,0.73l-0.73,0.17l-0.14,0.08l-2.18,2.12l-1.33,1.6l-0.65,0.05l-0.83,-0.29l-2.75,-0.28l-0.24,-0.1l-0.15,-0.27l-0.99,-0.58l-0.12,-0.04l-1.73,-0.14l-1.88,0.54l-1.5,-1.48l-1.61,-2.01l0.11,-7.73l4.92,0.03l0.29,-0.37l-0.19,-0.79l0.34,-0.86l0.0,-0.21l-0.41,-1.11l0.26,-1.14l-0.01,-0.16l-0.12,-0.36l0.18,0.01l0.1,0.56l0.31,0.25l1.14,-0.06l1.44,0.21l0.76,1.05l0.19,0.12l2.01,0.35l0.19,-0.03l1.24,-0.65l0.44,1.03l0.22,0.18l1.81,0.34l0.85,0.99l1.02,1.39l0.24,0.12l1.92,0.02l0.3,-0.32l-0.21,-2.74l-0.47,-0.23l-0.53,0.36l-1.58,-0.89l-0.51,-0.34l0.29,-2.36l0.44,-2.99l-0.03,-0.18l-0.5,-0.99l0.61,-1.38l0.53,-0.24l3.26,-0.41l0.89,0.23l1.01,0.62l1.04,0.44l1.6,0.43l1.35,0.72Z\", \"name\": \"Zambia\"}, \"EE\": {\"path\": \"M482.19,120.88l0.23,-1.68l-0.43,-0.31l-0.75,0.37l-1.34,-1.1l-0.18,-1.75l2.92,-0.95l3.07,-0.53l2.66,0.6l2.48,-0.1l0.18,0.31l-1.65,1.96l-0.06,0.26l0.71,3.25l-0.88,0.94l-1.85,-0.01l-2.08,-1.3l-1.14,-0.47l-0.2,-0.01l-1.69,0.51Z\", \"name\": \"Estonia\"}, \"EG\": {\"path\": \"M508.07,208.8l-0.66,1.06l-0.53,2.03l-0.64,1.32l-0.32,0.26l-1.74,-1.85l-1.77,-3.86l-0.48,-0.09l-0.26,0.25l-0.07,0.32l1.04,2.88l1.55,2.76l1.89,4.18l0.94,1.48l0.83,1.54l2.08,2.73l-0.3,0.28l-0.1,0.23l0.08,1.72l0.11,0.22l2.91,2.37l-28.78,0.0l0.0,-19.06l-0.73,-2.2l0.61,-1.59l0.0,-0.2l-0.34,-1.04l0.73,-1.08l3.13,-0.04l2.36,0.72l2.48,0.81l1.15,0.43l0.23,-0.01l1.93,-0.87l1.02,-0.78l2.08,-0.21l1.59,0.31l0.62,1.24l0.52,0.03l0.46,-0.71l1.86,0.59l1.95,0.16l0.17,-0.04l0.92,-0.52l1.48,4.24Z\", \"name\": \"Egypt\"}, \"ZA\": {\"path\": \"M467.06,373.27l-0.13,-0.29l0.01,-1.58l-0.02,-0.12l-0.71,-1.64l0.59,-0.37l0.14,-0.26l-0.07,-2.13l-0.05,-0.15l-1.63,-2.58l-1.25,-2.31l-1.71,-3.37l0.88,-0.98l0.7,0.52l0.39,1.08l0.23,0.19l1.1,0.19l1.55,0.51l0.14,0.01l1.35,-0.2l0.11,-0.04l2.24,-1.39l0.14,-0.25l0.0,-9.4l0.16,0.09l1.39,2.38l-0.22,1.53l0.04,0.19l0.56,0.94l0.3,0.14l1.79,-0.27l0.16,-0.08l1.23,-1.18l1.17,-0.79l0.1,-0.12l0.57,-1.19l1.02,-0.52l0.9,0.28l1.16,0.73l0.14,0.05l2.04,0.13l0.13,-0.02l1.6,-0.62l0.18,-0.19l0.63,-1.93l1.18,-0.19l0.19,-0.12l0.78,-1.05l0.81,-1.71l2.18,-1.91l3.44,-1.88l0.89,0.02l1.17,0.43l0.21,-0.0l0.76,-0.29l1.07,0.21l1.15,3.55l0.63,1.82l-0.44,2.9l0.1,0.52l-0.74,-0.29l-0.18,-0.01l-0.72,0.19l-0.21,0.2l-0.22,0.74l-0.66,0.97l-0.05,0.18l0.02,0.93l0.09,0.21l1.49,1.46l0.27,0.08l1.47,-0.29l0.22,-0.18l0.43,-1.01l1.29,0.02l-0.51,1.63l-0.29,2.2l-0.59,1.12l-2.2,1.78l-1.06,1.39l-0.72,1.44l-1.39,1.93l-2.81,2.84l-1.75,1.65l-1.85,1.24l-2.55,1.06l-1.23,0.14l-0.24,0.18l-0.22,0.54l-1.27,-0.35l-0.2,0.01l-1.15,0.5l-2.62,-0.52l-0.12,0.0l-1.46,0.33l-0.98,-0.14l-0.16,0.02l-2.55,1.1l-2.11,0.44l-1.59,1.07l-0.93,0.06l-0.97,-0.92l-0.19,-0.08l-0.72,-0.04l-1.0,-1.16l-0.25,0.05ZM493.72,359.24l-1.12,-0.86l-0.31,-0.03l-1.23,0.59l-1.36,1.07l-1.39,1.78l0.01,0.38l1.88,2.11l0.31,0.09l0.9,-0.27l0.18,-0.15l0.4,-0.77l1.28,-0.39l0.18,-0.16l0.42,-0.88l0.76,-1.32l-0.05,-0.37l-0.87,-0.82Z\", \"name\": \"South Africa\"}, \"EC\": {\"path\": \"M220.2,293.48l1.25,-1.76l0.02,-0.31l-0.54,-1.09l-0.5,-0.06l-0.78,0.94l-1.03,-0.75l0.33,-0.46l0.05,-0.23l-0.38,-2.04l0.66,-0.28l0.17,-0.19l0.45,-1.52l0.93,-1.58l0.04,-0.2l-0.13,-0.78l1.19,-0.47l1.57,-0.91l2.35,1.34l0.17,0.04l0.28,-0.02l0.52,0.91l0.21,0.15l2.12,0.35l0.2,-0.03l0.55,-0.31l1.08,0.73l0.97,0.54l0.31,1.67l-0.71,1.49l-2.64,2.54l-2.95,0.97l-0.15,0.11l-1.53,2.18l-0.49,1.68l-1.1,0.8l-0.87,-1.05l-0.15,-0.1l-1.01,-0.27l-0.13,-0.0l-0.7,0.14l-0.03,-0.43l0.6,-0.5l0.1,-0.31l-0.26,-0.91Z\", \"name\": \"Ecuador\"}, \"AL\": {\"path\": \"M470.27,171.7l0.38,0.19l0.45,-0.18l0.4,0.61l0.11,0.1l0.46,0.24l0.13,0.87l-0.3,0.95l-0.0,0.17l0.36,1.28l0.12,0.17l0.9,0.63l-0.03,0.44l-0.67,0.35l-0.16,0.22l-0.14,0.88l-0.96,1.18l-0.06,-0.03l-0.04,-0.48l-0.12,-0.22l-1.28,-0.92l-0.19,-1.25l0.2,-1.96l0.33,-0.89l-0.06,-0.3l-0.36,-0.41l-0.13,-0.75l0.66,-0.9Z\", \"name\": \"Albania\"}, \"AO\": {\"path\": \"M461.62,299.93l0.55,1.67l0.73,1.54l1.56,2.18l0.28,0.12l1.66,-0.2l0.81,-0.34l1.28,0.33l0.33,-0.14l0.39,-0.67l0.56,-1.3l1.37,-0.09l0.27,-0.21l0.07,-0.23l0.67,-0.01l-0.13,0.53l0.29,0.37l2.74,-0.02l0.04,1.29l0.03,0.13l0.46,0.87l-0.35,1.52l0.18,1.55l0.07,0.16l0.75,0.85l-0.13,2.89l0.41,0.29l0.56,-0.21l1.11,0.05l1.5,-0.37l0.9,0.12l0.18,0.53l-0.27,1.15l0.01,0.17l0.4,1.08l-0.33,0.85l-0.01,0.18l0.12,0.51l-4.83,-0.03l-0.3,0.3l-0.12,8.13l0.07,0.19l1.69,2.1l1.27,1.25l-4.03,0.92l-5.93,-0.36l-1.66,-1.19l-0.18,-0.06l-10.15,0.11l-0.34,0.13l-1.35,-1.05l-0.17,-0.06l-1.62,-0.08l-1.6,0.45l-0.88,0.36l-0.17,-1.2l0.34,-2.19l0.85,-2.32l0.14,-1.13l0.79,-2.24l0.57,-1.0l1.42,-1.64l0.82,-1.15l0.05,-0.13l0.26,-1.88l-0.13,-1.51l-0.07,-0.16l-0.72,-0.87l-1.23,-2.91l0.09,-0.37l0.73,-0.95l0.05,-0.27l-1.27,-4.12l-1.19,-1.54l0.1,-0.2l0.86,-0.28l0.78,0.03l0.83,-0.29l7.12,0.03ZM451.81,298.94l-0.17,0.07l-0.5,-1.42l0.85,-0.92l0.53,-0.29l0.48,0.44l-0.56,0.32l-0.1,0.1l-0.41,0.65l-0.05,0.14l-0.07,0.91Z\", \"name\": \"Angola\"}, \"KZ\": {\"path\": \"M598.42,172.08l-1.37,0.54l-3.3,2.09l-0.11,0.12l-1.01,1.97l-0.56,0.01l-0.6,-1.24l-0.26,-0.17l-2.95,-0.09l-0.46,-2.22l-0.29,-0.24l-0.91,-0.02l0.17,-2.72l-0.12,-0.26l-3.0,-2.22l-0.2,-0.06l-4.29,0.24l-2.8,0.42l-2.36,-2.7l-6.4,-3.65l-0.23,-0.03l-6.45,1.83l-0.22,0.29l0.1,10.94l-0.84,0.1l-1.65,-2.21l-0.11,-0.09l-1.69,-0.84l-0.2,-0.02l-2.84,0.63l-0.14,0.07l-0.71,0.64l-0.02,-0.11l0.57,-1.17l0.0,-0.26l-0.48,-1.05l-0.17,-0.16l-2.78,-0.99l-1.08,-2.62l-0.13,-0.15l-1.24,-0.7l-0.04,-0.48l2.07,0.25l0.34,-0.29l0.09,-2.03l1.84,-0.44l2.12,0.45l0.36,-0.25l0.45,-3.04l-0.45,-2.06l-0.31,-0.23l-2.44,0.15l-2.07,-0.75l-0.23,0.01l-2.88,1.38l-2.21,0.62l-0.96,-0.38l0.22,-1.39l-0.06,-0.23l-1.6,-2.12l-0.25,-0.12l-1.72,0.08l-1.87,-1.91l1.33,-2.24l-0.06,-0.38l-0.55,-0.5l1.72,-3.08l2.3,1.7l0.48,-0.2l0.29,-2.26l4.99,-3.48l3.76,-0.08l5.46,2.27l2.96,1.33l0.26,-0.01l2.59,-1.36l3.82,-0.06l3.13,1.67l0.38,-0.09l0.63,-0.85l3.36,0.14l0.29,-0.19l0.63,-1.57l-0.13,-0.37l-3.64,-2.05l2.0,-1.36l0.1,-0.38l-0.32,-0.62l2.09,-0.76l0.13,-0.47l-1.65,-2.13l0.89,-0.91l9.27,-1.18l0.13,-0.05l1.17,-0.82l6.2,-1.27l2.26,-1.43l4.19,0.7l0.74,3.39l0.38,0.22l2.52,-0.81l2.9,1.06l-0.18,1.63l0.32,0.33l2.52,-0.23l5.0,-2.58l0.03,0.39l3.16,2.62l5.57,8.48l0.49,0.02l1.18,-1.53l3.22,1.78l0.21,0.03l3.5,-0.83l1.21,0.52l1.16,1.82l0.15,0.12l1.67,0.61l1.01,1.32l0.28,0.11l3.04,-0.41l1.1,1.64l-1.68,1.89l-1.97,0.28l-0.26,0.29l-0.12,3.09l-1.2,1.23l-4.81,-1.01l-0.35,0.2l-1.77,5.51l-1.14,0.62l-4.92,1.23l-0.2,0.41l2.14,5.06l-1.45,0.67l-0.17,0.31l0.15,1.28l-1.05,-0.3l-1.21,-1.04l-0.17,-0.07l-3.73,-0.32l-4.15,-0.08l-0.92,0.31l-3.46,-1.24l-0.22,0.01l-1.42,0.63l-0.17,0.21l-0.32,1.49l-3.82,-0.97l-0.15,0.0l-1.65,0.43l-0.2,0.17l-0.51,1.21Z\", \"name\": \"Kazakhstan\"}, \"ET\": {\"path\": \"M516.0,247.63l1.21,0.92l0.3,0.04l1.3,-0.53l0.46,0.41l0.19,0.08l1.65,0.03l2.05,0.96l0.67,0.88l1.07,0.79l1.0,1.45l0.7,0.68l-0.72,0.92l-0.85,1.19l-0.04,0.25l0.19,0.67l0.04,0.74l0.29,0.28l1.4,0.04l0.55,-0.15l0.23,0.19l-0.41,0.67l0.01,0.32l0.92,1.39l0.93,1.23l0.99,0.94l0.1,0.06l8.19,2.99l1.51,0.01l-6.51,6.95l-3.14,0.11l-0.18,0.06l-2.15,1.71l-1.51,0.04l-0.22,0.1l-0.6,0.69l-1.46,-0.0l-0.93,-0.78l-0.32,-0.04l-2.29,1.05l-0.12,0.1l-0.64,0.9l-1.44,-0.17l-0.51,-0.26l-0.17,-0.03l-0.56,0.07l-0.68,-0.02l-3.1,-2.08l-0.17,-0.05l-1.62,0.0l-0.68,-0.65l0.0,-1.28l-0.21,-0.29l-1.19,-0.38l-1.42,-2.63l-0.13,-0.12l-1.05,-0.53l-0.46,-1.0l-1.27,-1.23l-0.17,-0.08l-1.08,-0.13l0.53,-0.9l1.17,-0.05l0.26,-0.17l0.37,-0.77l0.03,-0.14l-0.03,-2.23l0.7,-2.49l1.08,-0.65l0.14,-0.19l0.24,-1.0l1.03,-1.85l1.47,-1.22l0.09,-0.12l1.02,-2.51l0.36,-1.96l2.62,0.48l0.33,-0.18l0.63,-1.55Z\", \"name\": \"Ethiopia\"}, \"ZW\": {\"path\": \"M498.95,341.2l-1.16,-0.23l-0.16,0.01l-0.74,0.28l-1.11,-0.41l-1.02,-0.04l-1.52,-1.13l-0.12,-0.05l-1.79,-0.37l-0.65,-1.46l-0.01,-0.86l-0.22,-0.29l-0.99,-0.26l-2.74,-2.77l-0.77,-1.46l-0.52,-0.5l-0.72,-1.54l2.24,0.23l0.78,0.28l0.12,0.02l0.85,-0.06l0.21,-0.11l1.38,-1.66l2.11,-2.05l0.81,-0.18l0.22,-0.2l0.27,-0.8l1.29,-0.93l1.53,-0.28l0.11,0.66l0.3,0.25l2.02,-0.05l1.04,0.48l0.5,0.59l0.18,0.1l1.13,0.18l1.11,0.7l0.01,3.06l-0.49,1.82l-0.11,1.94l0.03,0.16l0.35,0.68l-0.24,1.3l-0.27,0.17l-0.12,0.15l-0.64,1.83l-2.49,2.8Z\", \"name\": \"Zimbabwe\"}, \"ES\": {\"path\": \"M398.67,172.8l0.09,-1.45l-0.06,-0.2l-0.82,-1.05l3.16,-1.96l3.01,0.54l3.33,-0.02l2.64,0.52l2.14,-0.15l3.9,0.1l0.91,1.08l0.14,0.09l4.61,1.38l0.26,-0.04l0.77,-0.55l2.66,1.29l0.17,0.03l2.59,-0.35l0.1,1.28l-2.2,1.85l-3.13,0.62l-0.23,0.23l-0.21,0.92l-1.54,1.68l-0.97,2.4l0.02,0.26l0.85,1.46l-1.27,1.14l-0.09,0.14l-0.5,1.73l-1.73,0.53l-0.15,0.1l-1.68,2.1l-3.03,0.04l-2.38,-0.05l-0.17,0.05l-1.57,1.01l-0.9,1.01l-0.96,-0.19l-0.82,-0.86l-0.69,-1.6l-0.22,-0.18l-2.14,-0.41l-0.13,-0.62l0.83,-0.97l0.39,-0.86l-0.06,-0.33l-0.73,-0.73l0.63,-1.74l-0.02,-0.25l-0.8,-1.41l0.69,-0.15l0.23,-0.27l0.09,-1.29l0.33,-0.36l0.08,-0.2l0.03,-2.16l1.03,-0.72l0.1,-0.37l-0.7,-1.5l-0.25,-0.17l-1.46,-0.11l-0.22,0.07l-0.34,0.3l-1.17,0.0l-0.55,-1.29l-0.39,-0.16l-1.02,0.44l-0.45,0.36Z\", \"name\": \"Spain\"}, \"ER\": {\"path\": \"M527.15,253.05l-0.77,-0.74l-1.01,-1.47l-1.14,-0.86l-0.62,-0.84l-0.11,-0.09l-2.18,-1.02l-0.12,-0.03l-1.61,-0.03l-0.52,-0.46l-0.31,-0.05l-1.31,0.54l-1.38,-1.06l-0.46,0.12l-0.69,1.68l-2.49,-0.46l-0.2,-0.76l1.06,-3.69l0.24,-1.65l0.66,-0.66l1.76,-0.4l0.16,-0.1l0.97,-1.13l1.24,2.55l0.68,2.34l0.09,0.14l1.4,1.27l3.39,2.4l1.37,1.43l2.14,2.34l0.94,0.6l-0.32,0.26l-0.85,-0.17Z\", \"name\": \"Eritrea\"}, \"ME\": {\"path\": \"M469.05,172.9l-0.57,-0.8l-0.1,-0.09l-0.82,-0.46l0.16,-0.33l0.35,-1.57l0.72,-0.62l0.27,-0.16l0.48,0.38l0.35,0.4l0.12,0.08l0.79,0.32l0.66,0.43l-0.43,0.62l-0.28,0.11l-0.07,-0.25l-0.53,-0.1l-1.09,1.49l-0.05,0.23l0.06,0.32Z\", \"name\": \"Montenegro\"}, \"MD\": {\"path\": \"M488.2,153.75l0.14,-0.11l1.49,-0.28l1.75,0.95l1.06,0.14l0.92,0.7l-0.15,0.9l0.15,0.31l0.8,0.46l0.33,1.2l0.09,0.14l0.72,0.66l-0.11,0.28l0.1,0.33l-0.06,0.02l-1.25,-0.08l-0.17,-0.29l-0.39,-0.12l-0.52,0.25l-0.16,0.36l0.13,0.42l-0.6,0.88l-0.43,1.03l-0.22,0.12l-0.32,-1.0l0.25,-1.34l-0.08,-1.38l-0.06,-0.17l-1.43,-1.87l-0.81,-1.36l-0.78,-0.95l-0.12,-0.09l-0.29,-0.12Z\", \"name\": \"Moldova\"}, \"MG\": {\"path\": \"M544.77,316.45l0.64,1.04l0.6,1.62l0.4,3.04l0.63,1.21l-0.22,1.07l-0.15,0.26l-0.59,-1.05l-0.52,-0.01l-0.47,0.76l-0.04,0.23l0.46,1.84l-0.19,0.92l-0.61,0.53l-0.1,0.21l-0.16,2.15l-0.97,2.98l-1.24,3.59l-1.55,4.97l-0.96,3.67l-1.08,2.93l-1.94,0.61l-2.05,1.06l-3.2,-1.53l-0.62,-1.26l-0.18,-2.39l-0.87,-2.07l-0.22,-1.8l0.4,-1.69l1.01,-0.4l0.19,-0.28l0.01,-0.79l1.15,-1.91l0.04,-0.11l0.23,-1.66l-0.03,-0.17l-0.57,-1.21l-0.46,-1.58l-0.19,-2.25l0.82,-1.36l0.33,-1.51l1.11,-0.1l1.4,-0.53l0.9,-0.45l1.03,-0.03l0.21,-0.09l1.41,-1.45l2.12,-1.65l0.75,-1.29l0.03,-0.24l-0.17,-0.56l0.53,0.15l0.32,-0.1l1.38,-1.77l0.06,-0.18l0.04,-1.44l0.54,-0.74l0.62,0.77Z\", \"name\": \"Madagascar\"}, \"MA\": {\"path\": \"M378.66,230.13l0.07,-0.75l0.93,-0.72l0.82,-1.37l0.04,-0.21l-0.14,-0.8l0.8,-1.74l1.33,-1.61l0.79,-0.4l0.14,-0.15l0.66,-1.55l0.08,-1.46l0.83,-1.52l1.6,-0.94l0.11,-0.11l1.56,-2.71l1.2,-0.99l2.24,-0.29l0.17,-0.08l1.95,-1.83l1.3,-0.77l2.09,-2.28l0.07,-0.26l-0.61,-3.34l0.92,-2.3l0.33,-1.44l1.52,-1.79l2.48,-1.27l1.86,-1.16l0.1,-0.11l1.67,-2.93l0.72,-1.59l1.54,0.01l1.43,1.14l0.21,0.06l2.33,-0.19l2.55,0.62l0.97,0.03l0.83,1.6l0.15,1.71l0.86,2.96l0.09,0.14l0.5,0.45l-0.31,0.73l-3.11,0.44l-0.16,0.07l-1.07,0.97l-1.36,0.23l-0.25,0.28l-0.1,1.85l-2.74,1.02l-0.14,0.11l-0.9,1.3l-1.93,0.69l-2.56,0.44l-4.04,2.01l-0.17,0.27l0.02,2.91l-0.08,0.0l-0.3,0.31l0.05,1.15l-1.25,0.07l-0.16,0.06l-0.73,0.55l-0.98,0.0l-0.85,-0.33l-0.15,-0.02l-2.11,0.29l-0.24,0.19l-0.76,1.95l-0.63,0.16l-0.21,0.19l-1.15,3.29l-3.42,2.81l-0.1,0.17l-0.81,3.57l-0.98,1.12l-0.3,0.85l-5.13,0.19Z\", \"name\": \"Morocco\"}, \"UZ\": {\"path\": \"M587.83,186.48l0.06,-1.46l-0.19,-0.29l-3.31,-1.24l-2.57,-1.4l-1.63,-1.38l-2.79,-1.98l-1.2,-2.98l-0.12,-0.14l-0.84,-0.54l-0.18,-0.05l-2.61,0.13l-0.76,-0.48l-0.25,-2.25l-0.17,-0.24l-3.37,-1.6l-0.32,0.04l-2.08,1.73l-2.11,1.02l-0.16,0.35l0.31,1.14l-2.14,0.03l-0.09,-10.68l6.1,-1.74l6.25,3.57l2.36,2.72l0.27,0.1l2.92,-0.44l4.17,-0.23l2.78,2.06l-0.18,2.87l0.29,0.32l0.98,0.02l0.46,2.22l0.28,0.24l3.0,0.09l0.61,1.25l0.28,0.17l0.93,-0.02l0.26,-0.16l1.06,-2.06l3.21,-2.03l1.3,-0.5l0.19,0.08l-1.75,1.62l0.05,0.48l1.85,1.12l0.27,0.02l1.65,-0.69l2.4,1.27l-2.69,1.79l-1.79,-0.27l-0.89,0.06l-0.22,-0.52l0.48,-1.26l-0.34,-0.4l-3.35,0.69l-0.22,0.18l-0.78,1.87l-1.07,1.47l-1.93,-0.13l-0.29,0.16l-0.65,1.29l0.16,0.42l1.69,0.64l0.48,1.91l-1.25,2.6l-1.64,-0.53l-1.18,-0.03Z\", \"name\": \"Uzbekistan\"}, \"MM\": {\"path\": \"M670.1,233.39l-1.46,1.11l-1.68,0.11l-0.26,0.19l-1.1,2.7l-0.95,0.42l-0.14,0.42l1.21,2.27l1.61,1.92l0.94,1.55l-0.82,1.99l-0.77,0.42l-0.13,0.39l0.64,1.35l1.62,1.97l0.26,1.32l-0.04,1.15l0.02,0.13l0.92,2.18l-1.3,2.23l-0.79,1.69l-0.1,-0.77l0.74,-1.87l-0.02,-0.26l-0.8,-1.42l0.2,-2.68l-0.06,-0.2l-0.98,-1.27l-0.8,-2.98l-0.45,-3.22l-1.11,-2.22l-0.45,-0.1l-1.64,1.28l-2.74,1.76l-1.26,-0.2l-1.27,-0.49l0.79,-2.93l0.0,-0.14l-0.52,-2.42l-1.93,-2.97l0.26,-0.8l-0.22,-0.39l-1.37,-0.31l-1.65,-1.98l-0.12,-1.5l0.41,0.19l0.42,-0.26l0.05,-1.7l1.08,-0.54l0.16,-0.34l-0.24,-1.0l0.5,-0.79l0.05,-0.15l0.08,-2.35l1.58,0.49l0.36,-0.15l1.12,-2.19l0.15,-1.34l1.35,-2.18l0.04,-0.17l-0.07,-1.35l2.97,-1.71l1.67,0.45l0.38,-0.33l-0.18,-1.46l0.7,-0.4l0.15,-0.32l-0.13,-0.72l0.94,-0.13l0.74,1.41l0.11,0.12l0.95,0.56l0.07,1.89l-0.09,2.08l-2.28,2.15l-0.09,0.19l-0.3,3.15l0.35,0.32l2.37,-0.39l0.53,2.17l0.2,0.21l1.3,0.42l-0.63,1.9l0.14,0.36l1.86,0.99l1.1,0.49l0.24,0.0l1.45,-0.6l0.04,0.51l-2.01,1.6l-0.56,0.96l-1.34,0.56Z\", \"name\": \"Myanmar\"}, \"ML\": {\"path\": \"M390.79,248.2l0.67,-0.37l0.14,-0.18l0.36,-1.31l0.51,-0.04l1.68,0.69l0.21,0.0l1.34,-0.48l0.89,0.16l0.3,-0.13l0.29,-0.44l9.89,-0.04l0.29,-0.21l0.56,-1.8l-0.11,-0.33l-0.33,-0.24l-2.37,-22.1l3.41,-0.04l8.37,5.73l8.38,5.68l0.56,1.15l0.14,0.14l1.56,0.75l0.99,0.36l0.03,1.45l0.33,0.29l2.45,-0.22l0.01,5.52l-1.3,1.64l-0.06,0.15l-0.18,1.37l-1.99,0.36l-3.4,0.22l-0.19,0.09l-0.85,0.83l-1.48,0.09l-1.49,0.01l-0.54,-0.43l-0.26,-0.05l-1.38,0.36l-2.39,1.08l-0.13,0.12l-0.44,0.73l-1.88,1.11l-0.11,0.12l-0.3,0.57l-0.86,0.42l-1.1,-0.31l-0.28,0.07l-0.69,0.62l-0.09,0.16l-0.35,1.66l-1.93,2.04l-0.08,0.23l0.05,0.76l-0.63,0.99l-0.04,0.19l0.14,1.23l-0.81,0.29l-0.32,0.17l-0.27,-0.75l-0.39,-0.18l-0.65,0.26l-0.36,-0.04l-0.29,0.14l-0.37,0.6l-1.69,-0.02l-0.63,-0.34l-0.32,0.02l-0.12,0.09l-0.47,-0.45l0.1,-0.6l-0.09,-0.27l-0.31,-0.3l-0.33,-0.05l-0.05,0.02l0.02,-0.21l0.46,-0.59l-0.02,-0.39l-0.99,-1.02l-0.34,-0.74l-0.56,-0.56l-0.17,-0.09l-0.5,-0.07l-0.19,0.04l-0.58,0.35l-0.79,0.33l-0.65,0.51l-0.85,-0.16l-0.63,-0.59l-0.14,-0.07l-0.41,-0.08l-0.2,0.03l-0.59,0.31l-0.07,0.0l-0.1,-0.63l0.11,-0.85l-0.21,-0.98l-0.11,-0.17l-0.86,-0.66l-0.45,-1.34l-0.1,-1.36Z\", \"name\": \"Mali\"}, \"MN\": {\"path\": \"M641.06,150.59l2.41,-0.53l4.76,-2.8l3.67,-1.49l2.06,0.96l0.12,0.03l2.5,0.05l1.59,1.45l0.19,0.08l2.47,0.12l3.59,0.81l0.27,-0.07l2.43,-2.28l0.06,-0.36l-0.93,-1.77l2.33,-3.1l2.66,1.3l2.26,0.39l2.75,0.8l0.44,2.3l0.19,0.22l3.56,1.38l0.18,0.01l2.35,-0.6l3.1,-0.42l2.4,0.41l2.37,1.52l1.49,1.63l0.23,0.1l2.29,-0.03l3.13,0.52l0.15,-0.01l2.28,-0.79l3.27,-0.53l0.11,-0.04l3.56,-2.23l1.31,0.31l1.26,1.05l0.22,0.07l2.45,-0.22l-0.98,1.96l-1.77,3.21l-0.01,0.28l0.64,1.31l0.35,0.16l1.35,-0.38l2.4,0.48l0.22,-0.04l1.78,-1.09l1.82,0.92l2.11,2.07l-0.17,0.68l-1.79,-0.31l-3.74,0.45l-1.85,0.96l-1.78,2.01l-3.74,1.18l-2.46,1.61l-2.45,-0.6l-1.42,-0.28l-0.31,0.13l-1.31,1.99l0.0,0.33l0.78,1.15l0.3,0.74l-1.58,0.93l-1.75,1.59l-2.83,1.03l-3.77,0.12l-4.05,1.05l-2.81,1.54l-0.95,-0.8l-0.19,-0.07l-2.96,0.0l-3.64,-1.8l-2.55,-0.48l-3.38,0.41l-5.13,-0.67l-2.66,0.06l-1.35,-1.65l-1.12,-2.78l-0.21,-0.18l-1.5,-0.33l-2.98,-1.89l-0.12,-0.04l-3.37,-0.43l-2.84,-0.51l-0.75,-1.13l0.93,-3.54l-0.04,-0.24l-1.73,-2.55l-0.15,-0.12l-3.52,-1.18l-1.99,-1.61l-0.54,-1.85Z\", \"name\": \"Mongolia\"}, \"MK\": {\"path\": \"M472.73,173.87l0.08,0.01l0.32,-0.25l0.08,-0.44l1.29,-0.41l1.37,-0.28l1.03,-0.04l1.06,0.82l0.14,1.59l-0.22,0.04l-0.17,0.11l-0.32,0.4l-1.2,-0.05l-0.18,0.05l-0.9,0.61l-1.45,0.23l-0.85,-0.59l-0.3,-1.09l0.22,-0.71Z\", \"name\": \"Macedonia\"}, \"MW\": {\"path\": \"M507.18,313.84l-0.67,1.85l-0.01,0.16l0.7,3.31l0.31,0.24l0.75,-0.03l0.78,0.71l0.99,1.75l0.2,3.03l-0.91,0.45l-0.14,0.15l-0.59,1.38l-1.24,-1.21l-0.17,-1.62l0.49,-1.12l0.02,-0.16l-0.15,-1.03l-0.13,-0.21l-0.99,-0.65l-0.26,-0.03l-0.53,0.18l-1.31,-1.12l-1.15,-0.59l0.66,-2.06l0.75,-0.84l0.07,-0.27l-0.47,-2.04l0.48,-1.94l0.4,-0.65l0.03,-0.24l-0.64,-2.15l-0.08,-0.13l-0.44,-0.42l1.34,0.26l1.25,1.73l0.67,3.3Z\", \"name\": \"Malawi\"}, \"MR\": {\"path\": \"M390.54,247.66l-1.48,-1.58l-1.51,-1.88l-0.12,-0.09l-1.64,-0.67l-1.17,-0.74l-0.17,-0.05l-1.4,0.03l-0.12,0.03l-1.14,0.52l-1.15,-0.21l-0.26,0.08l-0.44,0.43l-0.11,-0.72l0.68,-1.29l0.31,-2.43l-0.28,-2.63l-0.29,-1.27l0.24,-1.24l-0.03,-0.2l-0.65,-1.24l-1.19,-1.05l0.32,-0.51l9.64,0.02l0.3,-0.34l-0.46,-3.71l0.51,-1.12l2.17,-0.22l0.27,-0.3l-0.08,-6.5l7.91,0.13l0.31,-0.3l0.01,-3.5l8.17,5.63l-2.89,0.04l-0.29,0.33l2.42,22.56l0.12,0.21l0.26,0.19l-0.43,1.38l-9.83,0.04l-0.25,0.13l-0.27,0.41l-0.77,-0.14l-0.15,0.01l-1.3,0.47l-1.64,-0.67l-0.14,-0.02l-0.79,0.06l-0.27,0.22l-0.39,1.39l-0.53,0.29Z\", \"name\": \"Mauritania\"}, \"UG\": {\"path\": \"M500.74,287.17l-2.84,-0.02l-0.92,0.32l-1.37,0.71l-0.29,-0.12l0.02,-1.6l0.54,-0.89l0.04,-0.13l0.14,-1.96l0.49,-1.09l0.91,-1.24l0.97,-0.68l0.8,-0.89l-0.13,-0.49l-0.79,-0.27l0.13,-2.55l0.78,-0.52l1.45,0.51l0.18,0.01l1.97,-0.57l1.72,0.01l0.18,-0.06l1.29,-0.97l0.98,1.44l0.29,1.24l1.05,2.75l-0.84,1.68l-1.94,2.66l-0.06,0.18l0.02,2.36l-4.8,0.18Z\", \"name\": \"Uganda\"}, \"MY\": {\"path\": \"M717.6,273.52l-1.51,0.7l-2.13,-0.41l-2.88,-0.0l-0.29,0.21l-0.84,2.77l-0.9,0.82l-0.08,0.12l-1.23,3.34l-1.81,0.47l-2.29,-0.68l-0.14,-0.01l-1.2,0.22l-0.14,0.07l-1.36,1.18l-1.47,-0.17l-0.12,0.01l-1.46,0.46l-1.51,-1.25l-0.24,-0.97l1.26,0.59l0.2,0.02l1.93,-0.47l0.22,-0.22l0.47,-1.98l0.9,-0.4l2.97,-0.54l0.17,-0.09l1.8,-1.98l1.02,-1.32l0.9,1.03l0.48,-0.04l0.43,-0.7l1.02,0.07l0.32,-0.27l0.25,-2.72l1.84,-1.67l1.23,-1.89l0.73,-0.01l1.12,1.11l0.1,0.99l0.18,0.24l1.66,0.71l1.85,0.67l-0.09,0.51l-1.45,0.11l-0.26,0.4l0.35,0.97ZM673.78,269.53l0.17,1.14l0.35,0.25l1.65,-0.3l0.18,-0.11l0.68,-0.86l0.31,0.13l1.41,1.45l0.99,1.59l0.13,1.57l-0.26,1.09l0.0,0.15l0.24,0.84l0.18,1.46l0.11,0.2l0.82,0.64l0.92,2.08l-0.03,0.52l-1.4,0.13l-2.29,-1.79l-2.86,-1.92l-0.27,-1.16l-0.07,-0.13l-1.39,-1.61l-0.33,-1.99l-0.05,-0.12l-0.84,-1.27l0.26,-1.72l-0.03,-0.18l-0.45,-0.87l0.13,-0.13l1.71,0.92Z\", \"name\": \"Malaysia\"}, \"MX\": {\"path\": \"M133.41,213.83l0.61,0.09l0.27,-0.09l0.93,-1.01l0.08,-0.18l0.09,-1.22l-0.09,-0.23l-1.93,-1.94l-1.46,-0.77l-2.96,-5.62l-0.86,-2.1l2.44,-0.18l2.68,-0.25l-0.03,0.08l0.17,0.4l3.79,1.35l5.81,1.97l6.96,-0.02l0.3,-0.3l0.0,-0.84l3.91,0.0l0.87,0.93l1.27,0.87l1.44,1.17l0.79,1.37l0.62,1.49l0.12,0.14l1.35,0.85l2.08,0.82l0.35,-0.1l1.49,-2.04l1.81,-0.05l1.63,1.01l1.21,1.8l0.86,1.58l1.47,1.55l0.53,1.82l0.73,1.32l0.14,0.13l1.98,0.84l1.78,0.59l0.61,-0.03l-0.78,1.89l-0.45,1.96l-0.19,3.58l-0.24,1.27l0.01,0.14l0.43,1.43l0.78,1.31l0.49,1.98l0.06,0.12l1.63,1.9l0.61,1.51l0.98,1.28l0.16,0.11l2.58,0.67l0.98,1.02l0.31,0.08l2.17,-0.71l1.91,-0.26l1.87,-0.47l1.67,-0.49l1.59,-1.06l0.11,-0.14l0.6,-1.52l0.22,-2.21l0.35,-0.62l1.58,-0.64l2.59,-0.59l2.18,0.09l1.43,-0.2l0.39,0.36l-0.07,1.02l-1.28,1.48l-0.65,1.68l0.07,0.32l0.33,0.32l-0.79,2.49l-0.28,-0.3l-0.24,-0.09l-1.0,0.08l-0.24,0.15l-0.74,1.28l-0.19,-0.13l-0.28,-0.03l-0.3,0.12l-0.19,0.29l0.0,0.06l-4.34,-0.02l-0.3,0.3l-0.0,1.16l-0.83,0.0l-0.28,0.19l0.08,0.33l0.93,0.86l0.9,0.58l0.24,0.48l0.16,0.15l0.2,0.08l-0.03,0.38l-2.94,0.01l-0.26,0.15l-1.21,2.09l0.02,0.33l0.25,0.33l-0.21,0.44l-0.04,0.22l-2.42,-2.35l-1.36,-0.87l-2.04,-0.67l-0.13,-0.01l-1.4,0.19l-2.07,0.98l-1.14,0.23l-1.72,-0.66l-1.85,-0.48l-2.31,-1.16l-1.92,-0.38l-2.79,-1.18l-2.04,-1.2l-0.6,-0.66l-0.19,-0.1l-1.37,-0.15l-2.45,-0.78l-1.07,-1.18l-2.63,-1.44l-1.2,-1.56l-0.44,-0.93l0.5,-0.15l0.2,-0.39l-0.2,-0.58l0.46,-0.55l0.07,-0.19l0.01,-0.91l-0.06,-0.18l-0.81,-1.13l-0.25,-1.08l-0.86,-1.36l-2.21,-2.63l-2.53,-2.09l-1.2,-1.63l-0.11,-0.09l-2.08,-1.06l-0.34,-0.48l0.35,-1.53l-0.16,-0.34l-1.24,-0.61l-1.39,-1.23l-0.6,-1.81l-0.24,-0.2l-1.25,-0.2l-1.38,-1.35l-1.11,-1.25l-0.1,-0.76l-0.05,-0.13l-1.33,-2.04l-0.85,-2.02l0.04,-0.99l-0.14,-0.27l-1.81,-1.1l-0.2,-0.04l-0.74,0.11l-1.34,-0.72l-0.42,0.16l-0.4,1.12l-0.0,0.19l0.41,1.3l0.24,2.04l0.06,0.15l0.88,1.16l1.84,1.86l0.4,0.61l0.12,0.1l0.27,0.14l0.29,0.82l0.31,0.2l0.2,-0.02l0.43,1.51l0.09,0.14l0.72,0.65l0.51,0.91l1.58,1.4l0.8,2.42l0.77,1.23l0.66,1.19l0.13,1.34l0.28,0.27l1.08,0.08l0.92,1.1l0.83,1.08l-0.03,0.24l-0.88,0.81l-0.13,-0.0l-0.59,-1.42l-0.07,-0.11l-1.67,-1.53l-1.81,-1.28l-1.15,-0.61l0.07,-1.85l-0.38,-1.45l-0.12,-0.17l-2.91,-2.03l-0.39,0.04l-0.11,0.11l-0.42,-0.46l-0.11,-0.08l-1.49,-0.63l-1.09,-1.16Z\", \"name\": \"Mexico\"}, \"VU\": {\"path\": \"M839.92,325.66l0.78,0.73l-0.18,0.07l-0.6,-0.8ZM839.13,322.74l0.27,1.36l-0.13,-0.06l-0.21,-0.02l-0.29,0.08l-0.22,-0.43l-0.03,-1.32l0.61,0.4Z\", \"name\": \"Vanuatu\"}, \"FR\": {\"path\": \"M444.58,172.63l-0.68,1.92l-0.72,-0.38l-0.51,-1.79l0.43,-0.95l1.15,-0.83l0.33,2.04ZM429.71,147.03l1.77,1.57l0.26,0.07l1.16,-0.23l2.12,1.44l0.56,0.28l0.16,0.03l0.61,-0.06l1.09,0.78l0.13,0.05l3.18,0.53l-1.09,1.94l-0.3,2.16l-0.48,0.38l-1.0,-0.26l-0.37,0.32l0.07,0.66l-1.73,1.68l-0.09,0.21l-0.04,1.42l0.41,0.29l0.96,-0.4l0.67,1.07l-0.09,0.78l0.04,0.19l0.61,0.97l-0.71,0.78l-0.07,0.28l0.65,2.39l0.21,0.21l1.09,0.31l-0.2,0.95l-2.08,1.58l-4.81,-0.8l-0.13,0.01l-3.65,0.99l-0.22,0.24l-0.25,1.6l-2.59,0.35l-2.74,-1.33l-0.31,0.03l-0.79,0.57l-4.38,-1.31l-0.79,-0.94l1.16,-1.64l0.05,-0.15l0.48,-6.17l-0.06,-0.21l-2.58,-3.3l-1.89,-1.65l-0.11,-0.06l-3.64,-1.17l-0.2,-1.88l2.92,-0.63l4.14,0.82l0.35,-0.36l-0.65,-3.0l1.77,1.05l0.27,0.02l5.83,-2.54l0.17,-0.19l0.71,-2.54l1.75,-0.53l0.27,0.88l0.27,0.21l1.04,0.05l1.08,1.23ZM289.1,278.45l-0.85,0.84l-0.88,0.13l-0.25,-0.51l-0.21,-0.16l-0.56,-0.1l-0.25,0.07l-0.63,0.55l-0.62,-0.29l0.5,-0.88l0.21,-1.11l0.42,-1.05l-0.03,-0.28l-0.93,-1.42l-0.18,-1.54l1.13,-1.87l2.42,0.78l2.55,2.04l0.33,0.81l-1.4,2.16l-0.77,1.84Z\", \"name\": \"France\"}, \"FI\": {\"path\": \"M492.26,76.42l-0.38,3.12l0.12,0.28l3.6,2.69l-2.14,2.96l-0.01,0.33l2.83,4.61l-1.61,3.36l0.03,0.31l2.15,2.87l-0.96,2.44l0.1,0.35l3.51,2.55l-0.81,1.72l-2.28,2.19l-5.28,4.79l-4.51,0.31l-4.39,1.37l-3.87,0.75l-1.34,-1.89l-0.11,-0.09l-2.23,-1.14l0.53,-3.54l-0.01,-0.14l-1.17,-3.37l1.12,-2.13l2.23,-2.44l5.69,-4.33l1.65,-0.84l0.16,-0.31l-0.26,-1.73l-0.15,-0.22l-3.4,-1.91l-0.77,-1.47l-0.07,-6.45l-0.12,-0.24l-3.91,-2.94l-3.0,-1.92l0.97,-0.76l2.6,2.17l0.21,0.07l3.2,-0.21l2.63,1.03l0.3,-0.05l2.39,-1.94l0.09,-0.13l1.18,-3.12l3.63,-1.42l2.87,1.59l-0.98,2.87Z\", \"name\": \"Finland\"}, \"FJ\": {\"path\": \"M869.98,327.07l-1.31,0.44l-0.14,-0.41l0.96,-0.41l0.85,-0.17l1.43,-0.78l-0.16,0.65l-1.64,0.67ZM867.58,329.12l0.54,0.47l-0.31,1.0l-1.32,0.3l-1.13,-0.26l-0.17,-0.78l0.72,-0.66l0.98,0.27l0.25,-0.04l0.43,-0.29Z\", \"name\": \"Fiji\"}, \"FK\": {\"path\": \"M268.15,427.89l2.6,-1.73l1.98,0.77l0.31,-0.05l1.32,-1.17l1.58,1.18l-0.54,0.84l-3.1,0.92l-1.0,-1.04l-0.39,-0.04l-1.9,1.35l-0.86,-1.04Z\", \"name\": \"Falkland Islands\"}, \"NI\": {\"path\": \"M202.1,252.6l0.23,-0.0l0.12,-0.11l0.68,-0.09l0.22,-0.15l0.23,-0.43l0.2,-0.01l0.28,-0.31l-0.04,-0.97l0.29,-0.03l0.5,0.02l0.25,-0.11l0.37,-0.46l0.51,0.35l0.4,-0.06l0.23,-0.28l0.45,-0.29l0.87,-0.7l0.11,-0.21l0.02,-0.26l0.23,-0.12l0.25,-0.48l0.29,0.27l0.14,0.07l0.5,0.12l0.22,-0.03l0.48,-0.28l0.66,-0.02l0.87,-0.33l0.36,-0.32l0.21,0.01l-0.11,0.48l0.0,0.14l0.22,0.8l-0.54,0.85l-0.27,1.03l-0.09,1.18l0.14,0.72l0.05,0.95l-0.24,0.15l-0.13,0.19l-0.23,1.09l0.0,0.14l0.14,0.53l-0.42,0.53l-0.06,0.24l0.12,0.69l0.08,0.15l0.18,0.19l-0.26,0.23l-0.49,-0.11l-0.35,-0.44l-0.16,-0.1l-0.79,-0.21l-0.23,0.03l-0.45,0.26l-1.51,-0.62l-0.31,0.05l-0.17,0.15l-1.81,-1.62l-0.6,-0.9l-1.04,-0.79l-0.77,-0.71Z\", \"name\": \"Nicaragua\"}, \"NL\": {\"path\": \"M436.22,136.65l1.82,0.08l0.36,0.89l-0.6,2.96l-0.53,1.06l-1.32,0.0l-0.3,0.34l0.35,2.89l-0.83,-0.47l-1.56,-1.43l-0.29,-0.07l-2.26,0.67l-1.02,-0.15l0.68,-0.48l0.1,-0.12l2.14,-4.84l3.25,-1.35Z\", \"name\": \"Netherlands\"}, \"NO\": {\"path\": \"M491.45,67.31l7.06,3.0l-2.52,0.94l-0.11,0.49l2.43,2.49l-3.82,1.59l-1.48,0.3l0.89,-2.61l-0.14,-0.36l-3.21,-1.78l-0.25,-0.02l-3.89,1.52l-0.17,0.17l-1.2,3.17l-2.19,1.78l-2.53,-0.99l-0.13,-0.02l-3.15,0.21l-2.69,-2.25l-0.38,-0.01l-1.43,1.11l-1.47,0.17l-0.26,0.26l-0.33,2.57l-4.42,-0.65l-0.33,0.22l-0.6,2.19l-2.17,-0.01l-0.27,0.16l-4.15,7.68l-3.88,5.76l-0.0,0.33l0.81,1.23l-0.7,1.27l-2.3,-0.06l-0.28,0.18l-1.63,3.72l-0.02,0.13l0.15,5.17l0.07,0.18l1.51,1.84l-0.79,4.24l-2.04,2.5l-0.92,1.75l-1.39,-1.88l-0.44,-0.05l-4.89,4.21l-3.16,0.81l-3.24,-1.74l-0.86,-3.82l-0.78,-8.6l2.18,-2.36l6.56,-3.28l5.0,-4.16l4.63,-5.74l5.99,-8.09l4.17,-3.23l6.84,-5.49l5.39,-1.92l4.06,0.24l0.23,-0.09l3.72,-3.67l4.51,0.19l4.4,-0.89ZM484.58,19.95l4.42,1.82l-3.25,2.68l-7.14,0.65l-7.16,-0.91l-0.39,-1.37l-0.28,-0.22l-3.48,-0.1l-2.25,-2.15l7.09,-1.48l3.55,1.36l0.28,-0.03l2.42,-1.66l6.18,1.41ZM481.99,33.92l-4.73,1.85l-3.76,-1.06l1.27,-1.02l0.04,-0.43l-1.18,-1.35l4.46,-0.94l0.89,1.83l0.17,0.15l2.83,0.96ZM466.5,23.95l7.64,3.87l-5.63,1.94l-0.19,0.19l-1.35,3.88l-2.08,0.96l-0.16,0.19l-1.14,4.18l-2.71,0.18l-4.94,-2.95l1.95,-1.63l-0.08,-0.51l-3.7,-1.54l-4.79,-4.54l-1.78,-4.01l6.29,-1.88l1.25,1.81l0.25,0.13l3.57,-0.08l0.26,-0.17l0.87,-1.79l3.41,-0.18l3.08,1.94Z\", \"name\": \"Norway\"}, \"NA\": {\"path\": \"M461.88,357.98l-1.61,-1.77l-0.94,-1.9l-0.54,-2.58l-0.62,-1.95l-0.83,-4.05l-0.06,-3.13l-0.33,-1.5l-0.07,-0.14l-0.95,-1.06l-1.27,-2.12l-1.3,-3.1l-0.59,-1.71l-1.98,-2.46l-0.13,-1.67l0.99,-0.4l1.44,-0.42l1.48,0.07l1.42,1.11l0.31,0.03l0.32,-0.15l9.99,-0.11l1.66,1.18l0.16,0.06l6.06,0.37l4.69,-1.06l2.01,-0.57l1.5,0.14l0.63,0.37l-1.0,0.41l-0.7,0.01l-0.16,0.05l-1.38,0.88l-0.79,-0.88l-0.29,-0.09l-3.83,0.9l-1.84,0.08l-0.29,0.3l-0.07,8.99l-2.18,0.08l-0.29,0.3l-0.0,17.47l-2.04,1.27l-1.21,0.18l-1.51,-0.49l-0.99,-0.18l-0.36,-1.0l-0.1,-0.14l-0.99,-0.74l-0.4,0.04l-0.98,1.09Z\", \"name\": \"Namibia\"}, \"NC\": {\"path\": \"M835.87,338.68l2.06,1.63l1.01,0.94l-0.49,0.32l-1.21,-0.62l-1.76,-1.16l-1.58,-1.36l-1.61,-1.79l-0.16,-0.41l0.54,0.02l1.32,0.83l1.08,0.87l0.79,0.73Z\", \"name\": \"New Caledonia\"}, \"NE\": {\"path\": \"M426.67,254.17l0.03,-1.04l-0.24,-0.3l-2.66,-0.53l-0.06,-1.0l-0.07,-0.17l-1.37,-1.62l-0.3,-1.04l0.15,-0.94l1.37,-0.09l0.19,-0.09l0.85,-0.83l3.34,-0.22l2.22,-0.41l0.24,-0.26l0.2,-1.5l1.32,-1.65l0.07,-0.19l-0.01,-5.74l3.4,-1.13l7.24,-5.12l8.46,-4.95l3.76,1.08l1.35,1.39l0.36,0.05l1.39,-0.77l0.55,3.66l0.12,0.2l0.82,0.6l0.03,0.69l0.1,0.21l0.87,0.74l-0.47,0.99l-0.96,5.26l-0.13,3.25l-3.08,2.34l-0.1,0.15l-1.08,3.37l0.08,0.31l0.94,0.86l-0.01,1.51l0.29,0.3l1.25,0.05l-0.14,0.66l-0.51,0.11l-0.24,0.26l-0.06,0.57l-0.04,0.0l-1.59,-2.62l-0.21,-0.14l-0.59,-0.1l-0.23,0.05l-1.83,1.33l-1.79,-0.68l-1.42,-0.17l-0.17,0.03l-0.65,0.32l-1.39,-0.07l-0.19,0.06l-1.4,1.03l-1.12,0.05l-2.97,-1.29l-0.26,0.01l-1.12,0.59l-1.08,-0.04l-0.85,-0.88l-0.11,-0.07l-2.51,-0.95l-0.14,-0.02l-2.69,0.3l-0.16,0.07l-0.65,0.55l-0.1,0.16l-0.34,1.41l-0.69,0.98l-0.05,0.15l-0.13,1.72l-1.47,-1.13l-0.18,-0.06l-0.9,0.01l-0.2,0.08l-0.32,0.28Z\", \"name\": \"Niger\"}, \"NG\": {\"path\": \"M442.0,272.7l-2.4,0.83l-0.88,-0.12l-0.19,0.04l-0.89,0.52l-1.78,-0.05l-1.23,-1.44l-0.88,-1.87l-1.77,-1.66l-0.21,-0.08l-3.78,0.03l0.13,-3.75l-0.06,-1.58l0.44,-1.47l0.74,-0.75l1.21,-1.56l0.04,-0.29l-0.22,-0.56l0.44,-0.9l0.01,-0.24l-0.54,-1.44l0.26,-2.97l0.72,-1.06l0.33,-1.37l0.51,-0.43l2.53,-0.28l2.38,0.9l0.89,0.91l0.2,0.09l1.28,0.04l0.15,-0.03l1.06,-0.56l2.9,1.26l0.13,0.02l1.28,-0.06l0.16,-0.06l1.39,-1.02l1.36,0.07l0.15,-0.03l0.64,-0.32l1.22,0.13l1.9,0.73l0.28,-0.04l1.86,-1.35l0.33,0.06l1.62,2.67l0.29,0.14l0.32,-0.04l0.73,0.74l-0.19,0.37l-0.12,0.74l-2.03,1.89l-0.07,0.11l-0.66,1.62l-0.35,1.28l-0.48,0.51l-0.07,0.12l-0.48,1.67l-1.26,0.98l-0.1,0.15l-0.38,1.24l-0.58,1.07l-0.2,0.91l-1.43,0.7l-1.26,-0.93l-0.19,-0.06l-0.95,0.04l-0.2,0.09l-1.41,1.39l-0.61,0.02l-0.26,0.17l-1.19,2.42l-0.61,1.67Z\", \"name\": \"Nigeria\"}, \"NZ\": {\"path\": \"M857.9,379.62l1.85,3.1l0.33,0.14l0.22,-0.28l0.04,-1.41l0.57,0.4l0.35,2.06l0.17,0.22l2.02,0.94l1.78,0.26l0.22,-0.06l1.31,-1.01l0.84,0.22l-0.53,2.27l-0.67,1.5l-1.71,-0.05l-0.25,0.12l-0.67,0.89l-0.05,0.23l0.21,1.15l-0.31,0.46l-2.15,3.57l-1.6,0.99l-0.28,-0.51l-0.15,-0.13l-0.72,-0.3l1.27,-2.15l0.01,-0.29l-0.82,-1.63l-0.15,-0.14l-2.5,-1.09l0.05,-0.69l1.67,-0.94l0.15,-0.21l0.42,-2.24l-0.11,-1.95l-0.03,-0.12l-0.97,-1.85l0.05,-0.41l-0.09,-0.25l-1.18,-1.17l-1.94,-2.49l-0.86,-1.64l0.38,-0.09l1.24,1.43l0.12,0.08l1.81,0.68l0.67,2.39ZM853.93,393.55l0.57,1.24l0.44,0.12l1.51,-1.03l0.52,0.91l0.0,1.09l-0.88,1.31l-1.62,2.2l-1.26,1.2l-0.05,0.38l0.64,1.02l-1.4,0.03l-0.14,0.04l-2.14,1.16l-0.14,0.17l-0.67,2.0l-1.38,3.06l-3.07,2.19l-2.12,-0.06l-1.55,-0.99l-0.14,-0.05l-2.53,-0.2l-0.31,-0.84l1.25,-2.15l3.07,-2.97l1.62,-0.59l1.81,-1.17l2.18,-1.63l1.55,-1.65l1.08,-2.18l0.9,-0.72l0.11,-0.17l0.35,-1.56l1.37,-1.07l0.4,0.91Z\", \"name\": \"New Zealand\"}, \"NP\": {\"path\": \"M641.26,213.53l-0.14,0.95l0.32,1.64l-0.21,0.78l-1.83,0.04l-2.98,-0.62l-1.86,-0.25l-1.37,-1.3l-0.18,-0.08l-3.38,-0.34l-3.21,-1.49l-2.38,-1.34l-2.16,-0.92l0.84,-2.2l1.51,-1.18l0.89,-0.57l1.83,0.77l2.5,1.76l1.39,0.41l0.78,1.21l0.17,0.13l1.91,0.53l2.0,1.17l2.92,0.66l2.63,0.24Z\", \"name\": \"Nepal\"}, \"CI\": {\"path\": \"M413.53,272.08l-0.83,0.02l-1.79,-0.49l-1.64,0.03l-3.04,0.46l-1.73,0.72l-2.4,0.89l-0.12,-0.02l0.16,-1.7l0.19,-0.25l0.06,-0.2l-0.08,-0.99l-0.09,-0.19l-1.06,-1.05l-0.15,-0.08l-0.71,-0.15l-0.51,-0.48l0.45,-0.92l0.02,-0.19l-0.24,-1.16l0.07,-0.43l0.14,-0.0l0.3,-0.26l0.15,-1.1l-0.02,-0.15l-0.13,-0.34l0.09,-0.13l0.83,-0.27l0.19,-0.37l-0.62,-2.02l-0.55,-1.0l0.14,-0.59l0.35,-0.14l0.24,-0.16l0.53,0.29l0.14,0.04l1.93,0.02l0.26,-0.14l0.36,-0.58l0.39,0.01l0.43,-0.17l0.28,0.79l0.43,0.16l0.56,-0.31l0.89,-0.32l0.92,0.45l0.39,0.75l0.14,0.13l1.13,0.53l0.3,-0.03l0.81,-0.59l1.02,-0.08l1.49,0.57l0.62,3.33l-1.03,2.09l-0.65,2.84l0.02,0.2l1.05,2.08l-0.07,0.64Z\", \"name\": \"Ivory Coast\"}, \"CH\": {\"path\": \"M444.71,156.27l0.05,0.3l-0.34,0.69l0.13,0.4l1.13,0.58l1.07,0.1l-0.12,0.81l-0.87,0.42l-1.75,-0.37l-0.34,0.18l-0.47,1.1l-0.86,0.07l-0.33,-0.38l-0.41,-0.04l-1.34,1.01l-1.02,0.13l-0.93,-0.58l-0.82,-1.32l-0.37,-0.12l-0.77,0.32l0.02,-0.84l1.74,-1.69l0.09,-0.25l-0.04,-0.38l0.73,0.19l0.26,-0.06l0.6,-0.48l2.02,0.02l0.24,-0.12l0.38,-0.51l2.31,0.84Z\", \"name\": \"Switzerland\"}, \"CO\": {\"path\": \"M232.24,284.95l-0.94,-0.52l-1.22,-0.82l-0.31,-0.01l-0.62,0.35l-1.88,-0.31l-0.54,-0.95l-0.29,-0.15l-0.37,0.03l-2.34,-1.33l-0.15,-0.35l0.57,-0.11l0.24,-0.32l-0.1,-1.15l0.46,-0.71l1.11,-0.15l0.21,-0.13l1.05,-1.57l0.95,-1.31l-0.08,-0.43l-0.73,-0.47l0.4,-1.24l0.01,-0.16l-0.53,-2.15l0.44,-0.54l0.06,-0.24l-0.4,-2.13l-0.06,-0.13l-0.93,-1.22l0.21,-0.8l0.52,0.12l0.32,-0.13l0.47,-0.75l0.03,-0.27l-0.52,-1.32l0.09,-0.11l1.14,0.07l0.22,-0.08l1.82,-1.71l0.96,-0.25l0.22,-0.28l0.02,-0.81l0.43,-2.01l1.28,-1.04l1.48,-0.05l0.27,-0.19l0.12,-0.31l1.73,0.19l0.2,-0.05l1.96,-1.28l0.97,-0.56l1.16,-1.16l0.64,0.11l0.43,0.44l-0.31,0.55l-1.49,0.39l-0.19,0.16l-0.6,1.2l-0.97,0.74l-0.73,0.94l-0.06,0.13l-0.3,1.76l-0.68,1.44l0.23,0.43l1.1,0.14l0.27,0.97l0.08,0.13l0.49,0.49l0.17,0.85l-0.27,0.86l-0.01,0.14l0.09,0.53l0.2,0.23l0.52,0.18l0.54,0.79l0.27,0.13l3.18,-0.24l1.31,0.29l1.7,2.08l0.31,0.1l0.96,-0.26l1.75,0.13l1.41,-0.27l0.56,0.27l-0.36,1.07l-0.54,0.81l-0.05,0.13l-0.2,1.8l0.51,1.79l0.07,0.12l0.65,0.68l0.05,0.32l-1.16,1.14l0.05,0.47l0.86,0.52l0.6,0.79l0.31,1.01l-0.7,-0.81l-0.44,-0.01l-0.74,0.77l-4.75,-0.05l-0.3,0.31l0.03,1.57l0.25,0.29l1.2,0.21l-0.02,0.24l-0.1,-0.05l-0.22,-0.02l-1.41,0.41l-0.22,0.29l-0.01,1.82l0.11,0.23l1.04,0.85l0.35,1.3l-0.06,1.02l-1.02,6.26l-0.84,-0.89l-0.19,-0.09l-0.25,-0.02l1.35,-2.13l-0.1,-0.42l-1.92,-1.17l-0.2,-0.04l-1.41,0.2l-0.82,-0.39l-0.26,0.0l-1.29,0.62l-1.63,-0.27l-1.4,-2.5l-0.12,-0.12l-1.1,-0.61l-0.83,-1.2l-1.67,-1.19l-0.27,-0.04l-0.54,0.19Z\", \"name\": \"Colombia\"}, \"CN\": {\"path\": \"M740.32,148.94l0.22,0.21l4.3,1.03l2.84,2.2l0.99,2.92l0.28,0.2l3.8,0.0l0.15,-0.04l2.13,-1.24l3.5,-0.8l-1.05,2.29l-0.95,1.13l-0.06,0.12l-0.85,3.41l-1.56,2.81l-2.83,-0.51l-0.19,0.03l-2.15,1.09l-0.15,0.34l0.65,2.59l-0.33,3.3l-1.03,0.07l-0.28,0.3l0.01,0.75l-1.09,-1.2l-0.48,0.05l-0.94,1.6l-3.76,1.26l-0.2,0.36l0.29,1.19l-1.67,-0.08l-1.11,-0.88l-0.42,0.05l-1.69,2.08l-2.71,1.57l-2.04,1.88l-3.42,0.84l-0.11,0.05l-1.8,1.34l-1.54,0.46l0.52,-0.53l0.06,-0.33l-0.44,-0.96l1.84,-1.84l0.02,-0.41l-1.32,-1.56l-0.36,-0.08l-2.23,1.08l-2.83,2.06l-1.52,1.85l-2.32,0.13l-0.2,0.09l-1.28,1.37l-0.03,0.37l1.32,1.97l0.18,0.13l1.83,0.43l0.07,1.08l0.18,0.26l1.98,0.84l0.3,-0.03l2.66,-1.96l2.06,1.04l0.12,0.03l1.4,0.07l0.27,1.0l-3.24,0.73l-0.17,0.11l-1.13,1.5l-2.38,1.4l-0.1,0.1l-1.29,1.99l0.1,0.42l2.6,1.5l0.97,2.72l1.52,2.56l1.66,2.08l-0.03,1.76l-1.4,0.67l-0.15,0.38l0.6,1.47l0.13,0.15l1.29,0.75l-0.35,2.0l-0.58,1.96l-1.22,0.21l-0.2,0.14l-1.83,2.93l-2.02,3.51l-2.29,3.13l-3.4,2.42l-3.42,2.18l-2.75,0.3l-0.15,0.06l-1.32,1.01l-0.68,-0.67l-0.41,-0.01l-1.37,1.27l-3.42,1.28l-2.62,0.4l-0.24,0.21l-0.8,2.57l-0.95,0.11l-0.53,-1.54l0.52,-0.89l-0.19,-0.44l-3.36,-0.84l-0.17,0.01l-1.09,0.4l-2.36,-0.64l-1.0,-0.9l0.35,-1.34l-0.23,-0.37l-2.22,-0.47l-1.15,-0.94l-0.36,-0.02l-2.08,1.37l-2.35,0.29l-1.98,-0.01l-0.13,0.03l-1.32,0.63l-1.28,0.38l-0.21,0.33l0.33,2.65l-0.78,-0.04l-0.14,-0.39l-0.07,-1.04l-0.41,-0.26l-1.72,0.71l-0.96,-0.43l-1.63,-0.86l0.65,-1.95l-0.19,-0.38l-1.43,-0.46l-0.56,-2.27l-0.34,-0.22l-2.26,0.38l0.25,-2.65l2.29,-2.15l0.09,-0.2l0.1,-2.21l-0.07,-2.09l-0.15,-0.25l-1.02,-0.6l-0.8,-1.52l-0.31,-0.16l-1.42,0.2l-2.16,-0.32l0.55,-0.74l0.01,-0.35l-1.17,-1.7l-0.41,-0.08l-1.67,1.07l-1.97,-0.63l-0.25,0.03l-2.89,1.73l-2.26,1.99l-1.82,0.3l-1.0,-0.66l-0.15,-0.05l-1.28,-0.06l-1.75,-0.61l-0.24,0.02l-1.35,0.69l-0.1,0.08l-1.2,1.45l-0.14,-1.41l-0.4,-0.25l-1.46,0.55l-2.83,-0.26l-2.77,-0.61l-1.99,-1.17l-1.91,-0.54l-0.78,-1.21l-0.17,-0.13l-1.36,-0.38l-2.54,-1.79l-2.01,-0.84l-0.28,0.02l-0.89,0.56l-3.31,-1.83l-2.35,-1.67l-0.57,-2.49l1.34,0.28l0.36,-0.28l0.08,-1.42l-0.05,-0.19l-0.93,-1.34l0.24,-2.18l-0.07,-0.22l-2.69,-3.32l-0.15,-0.1l-3.97,-1.11l-0.69,-2.05l-0.11,-0.15l-1.79,-1.3l-0.39,-0.73l-0.36,-1.57l0.08,-1.09l-0.18,-0.3l-1.52,-0.66l-0.22,-0.01l-0.51,0.18l-0.52,-2.21l0.59,-0.55l0.06,-0.35l-0.22,-0.44l2.12,-1.24l1.63,-0.55l2.58,0.39l0.31,-0.16l0.87,-1.75l3.05,-0.34l0.21,-0.12l0.84,-1.12l3.87,-1.59l0.15,-0.14l0.35,-0.68l0.03,-0.17l-0.17,-1.51l1.52,-0.7l0.15,-0.39l-2.12,-5.0l4.62,-1.15l1.35,-0.72l0.14,-0.17l1.72,-5.37l4.7,0.99l0.28,-0.08l1.39,-1.43l0.08,-0.2l0.11,-2.95l1.83,-0.26l0.18,-0.1l1.85,-2.08l0.61,-0.17l0.57,1.97l0.1,0.15l2.2,1.75l3.48,1.17l1.59,2.36l-0.93,3.53l0.04,0.24l0.9,1.35l0.2,0.13l2.98,0.53l3.32,0.43l2.97,1.89l1.49,0.35l1.08,2.67l1.52,1.88l0.24,0.11l2.74,-0.07l5.15,0.67l3.36,-0.41l2.39,0.43l3.67,1.81l0.13,0.03l2.92,-0.0l1.02,0.86l0.34,0.03l2.88,-1.59l3.98,-1.03l3.81,-0.13l3.02,-1.12l1.77,-1.61l1.73,-1.01l0.13,-0.37l-0.41,-1.01l-0.72,-1.07l1.09,-1.66l1.21,0.24l2.57,0.63l0.24,-0.04l2.46,-1.62l3.78,-1.19l0.13,-0.09l1.8,-2.03l1.66,-0.84l3.54,-0.41l1.93,0.35l0.34,-0.22l0.27,-1.12l-0.08,-0.29l-2.27,-2.22l-2.08,-1.07l-0.29,0.01l-1.82,1.12l-2.36,-0.47l-0.14,0.01l-1.18,0.34l-0.46,-0.94l1.69,-3.08l1.1,-2.21l2.75,1.12l0.26,-0.02l3.53,-2.06l0.15,-0.26l-0.02,-1.35l2.18,-3.39l1.35,-1.04l0.12,-0.24l-0.03,-1.85l-0.15,-0.25l-1.0,-0.58l1.68,-1.37l3.01,-0.59l3.25,-0.09l3.67,0.99l2.08,1.18l1.51,3.3l0.95,1.45l0.85,1.99l0.92,3.19ZM697.0,237.37l-1.95,1.12l-1.74,-0.68l-0.06,-1.9l1.08,-1.03l2.62,-0.7l1.23,0.05l0.37,0.65l-1.01,1.08l-0.54,1.4Z\", \"name\": \"China\"}, \"CM\": {\"path\": \"M453.76,278.92l-0.26,-0.11l-0.18,-0.02l-1.42,0.31l-1.56,-0.33l-1.17,0.16l-3.7,-0.05l0.3,-1.63l-0.04,-0.21l-0.98,-1.66l-0.15,-0.13l-1.03,-0.38l-0.46,-1.01l-0.13,-0.14l-0.48,-0.27l0.02,-0.46l0.62,-1.72l1.1,-2.25l0.54,-0.02l0.2,-0.09l1.41,-1.39l0.73,-0.03l1.32,0.97l0.31,0.03l1.72,-0.85l0.16,-0.2l0.22,-1.0l0.57,-1.03l0.36,-1.18l1.26,-0.98l0.1,-0.15l0.49,-1.7l0.48,-0.51l0.07,-0.13l0.35,-1.3l0.63,-1.54l2.06,-1.92l0.09,-0.17l0.12,-0.79l0.24,-0.41l-0.04,-0.36l-0.89,-0.91l0.04,-0.45l0.28,-0.06l0.85,1.39l0.16,1.59l-0.09,1.66l0.04,0.17l1.09,1.84l-0.86,-0.02l-0.72,0.17l-1.07,-0.24l-0.34,0.17l-0.54,1.19l0.06,0.34l1.48,1.47l1.06,0.44l0.32,0.94l0.73,1.6l-0.32,0.57l-1.23,2.49l-0.54,0.41l-0.12,0.21l-0.19,1.95l0.24,1.08l-0.18,0.67l0.07,0.28l1.13,1.25l0.24,0.93l0.92,1.29l1.1,0.8l0.1,1.01l0.26,0.73l-0.12,0.93l-1.65,-0.49l-2.02,-0.66l-3.19,-0.11Z\", \"name\": \"Cameroon\"}, \"CL\": {\"path\": \"M246.8,429.1l-1.14,0.78l-2.25,1.21l-0.16,0.23l-0.37,2.94l-0.75,0.06l-2.72,-1.07l-2.83,-2.34l-3.06,-1.9l-0.71,-1.92l0.67,-1.84l-0.02,-0.25l-1.22,-2.13l-0.31,-5.41l1.02,-2.95l2.59,-2.4l-0.13,-0.51l-3.32,-0.8l2.06,-2.4l0.07,-0.15l0.79,-4.77l2.44,0.95l0.4,-0.22l1.31,-6.31l-0.16,-0.33l-1.68,-0.8l-0.42,0.21l-0.72,3.47l-1.01,-0.27l0.74,-4.06l0.85,-5.46l1.12,-1.96l0.03,-0.22l-0.71,-2.82l-0.19,-2.94l0.76,-0.07l0.26,-0.2l1.53,-4.62l1.73,-4.52l1.07,-4.2l-0.56,-4.2l0.73,-2.2l0.01,-0.12l-0.29,-3.3l1.46,-3.34l0.45,-5.19l0.8,-5.52l0.78,-5.89l-0.18,-4.33l-0.49,-3.47l1.1,-0.56l0.13,-0.13l0.44,-0.88l0.9,1.29l0.32,1.8l0.1,0.18l1.16,0.97l-0.73,2.33l0.01,0.21l1.33,2.91l0.97,3.6l0.35,0.22l1.57,-0.31l0.16,0.34l-0.79,2.51l-2.61,1.25l-0.17,0.28l0.08,4.36l-0.48,0.79l0.01,0.33l0.6,0.84l-1.62,1.55l-1.67,2.6l-0.89,2.47l-0.02,0.13l0.23,2.56l-1.5,2.76l-0.03,0.21l1.15,4.8l0.11,0.17l0.54,0.42l-0.01,2.37l-1.4,2.7l-0.03,0.15l0.06,2.25l-1.8,1.78l-0.09,0.21l0.02,2.73l0.71,2.63l-1.33,0.94l-0.12,0.17l-0.67,2.64l-0.59,3.03l0.4,3.55l-0.84,0.51l-0.14,0.31l0.58,3.5l0.08,0.16l0.96,0.99l-0.7,1.08l0.11,0.43l1.04,0.55l0.19,0.8l-0.89,0.48l-0.16,0.31l0.26,1.77l-0.89,4.06l-1.31,2.67l-0.03,0.19l0.28,1.53l-0.73,1.88l-1.85,1.37l-0.12,0.26l0.22,3.46l0.06,0.16l0.88,1.19l0.28,0.12l1.32,-0.17l-0.04,2.13l0.04,0.15l1.04,1.95l0.24,0.16l5.94,0.44ZM248.79,430.71l0.0,7.41l0.3,0.3l2.67,0.0l1.01,0.06l-0.54,0.91l-1.99,1.01l-1.13,-0.1l-1.42,-0.27l-1.87,-1.06l-2.57,-0.49l-3.09,-1.9l-2.52,-1.83l-2.65,-2.93l0.93,0.32l3.54,2.29l3.32,1.23l0.34,-0.09l1.29,-1.57l0.83,-2.32l2.11,-1.28l1.43,0.32Z\", \"name\": \"Chile\"}, \"CA\": {\"path\": \"M280.14,145.66l-1.66,2.88l0.06,0.37l0.37,0.03l1.5,-1.01l1.17,0.49l-0.64,0.83l0.13,0.46l2.22,0.89l0.28,-0.03l1.02,-0.7l2.09,0.83l-0.69,2.1l0.37,0.38l1.43,-0.45l0.27,1.43l0.74,1.88l-0.95,2.5l-0.88,0.09l-1.34,-0.48l0.49,-2.34l-0.14,-0.32l-0.7,-0.4l-0.36,0.04l-2.81,2.66l-0.63,-0.05l1.2,-1.01l-0.1,-0.52l-2.4,-0.77l-2.79,0.18l-4.65,-0.09l-0.22,-0.54l1.37,-0.99l0.01,-0.48l-0.82,-0.65l1.91,-1.79l2.57,-5.17l1.49,-1.81l2.04,-1.07l0.63,0.08l-0.27,0.51l-1.33,2.07ZM193.92,74.85l-0.01,4.24l0.19,0.28l0.33,-0.07l3.14,-3.22l2.65,2.5l-0.71,3.04l0.06,0.26l2.42,2.88l0.46,0.0l2.66,-3.14l1.83,-3.74l0.03,-0.12l0.13,-4.53l3.23,0.31l3.63,0.64l3.18,2.08l0.13,1.91l-1.79,2.22l-0.0,0.37l1.69,2.2l-0.28,1.8l-4.74,2.84l-3.33,0.62l-2.5,-1.21l-0.41,0.17l-0.73,2.05l-2.39,3.44l-0.74,1.78l-2.78,2.61l-3.48,0.26l-0.17,0.07l-1.98,1.68l-0.1,0.21l-0.15,2.33l-2.68,0.45l-0.17,0.09l-3.1,3.2l-2.75,4.38l-0.99,3.06l-0.14,4.31l0.25,0.31l3.5,0.58l1.07,3.24l1.18,2.76l0.34,0.18l3.43,-0.69l4.55,1.52l2.45,1.32l1.76,1.65l0.12,0.07l3.11,0.96l2.63,1.46l0.13,0.04l4.12,0.2l2.41,0.3l-0.36,2.81l0.8,3.51l1.81,3.78l0.08,0.1l3.73,3.17l0.34,0.03l1.93,-1.08l0.13,-0.15l1.35,-3.44l0.01,-0.18l-1.31,-5.38l-0.08,-0.14l-1.46,-1.5l3.68,-1.51l2.84,-2.46l1.45,-2.55l0.04,-0.17l-0.2,-2.39l-0.04,-0.12l-1.7,-3.07l-2.9,-2.64l2.79,-3.66l0.05,-0.27l-1.08,-3.38l-0.8,-5.75l1.45,-0.75l4.18,1.03l2.6,0.38l0.18,-0.03l1.93,-0.95l2.18,1.23l3.01,2.18l0.73,1.42l0.25,0.16l4.18,0.27l-0.06,2.95l0.83,4.7l0.22,0.24l2.19,0.55l1.75,2.08l0.38,0.07l3.63,-2.03l0.11,-0.11l2.38,-4.06l1.36,-1.43l1.76,3.01l3.26,4.68l2.68,4.19l-0.94,2.09l0.12,0.38l3.31,1.98l2.23,1.98l0.13,0.07l3.94,0.89l1.48,1.02l0.96,2.82l0.22,0.2l1.85,0.43l0.88,1.13l0.17,3.53l-1.68,1.16l-1.76,1.14l-4.08,1.17l-0.11,0.06l-3.08,2.65l-4.11,0.52l-5.35,-0.69l-3.76,-0.02l-2.62,0.23l-0.2,0.1l-2.05,2.29l-3.13,1.41l-0.11,0.08l-3.6,4.24l-2.87,2.92l-0.05,0.36l0.33,0.14l2.13,-0.52l0.15,-0.08l3.98,-4.15l5.16,-2.63l3.58,-0.31l1.82,1.3l-2.09,1.91l-0.09,0.29l0.8,3.46l0.82,2.37l0.15,0.17l3.25,1.56l0.16,0.03l4.14,-0.45l0.21,-0.12l2.03,-2.86l0.11,1.46l0.13,0.22l1.26,0.88l-2.7,1.78l-5.51,1.83l-2.52,1.26l-2.75,2.16l-1.52,-0.18l-0.08,-2.16l4.19,-2.47l0.14,-0.34l-0.3,-0.22l-4.01,0.1l-2.66,0.36l-1.45,-1.56l0.0,-4.16l-0.11,-0.23l-1.11,-0.91l-0.28,-0.05l-1.5,0.48l-0.7,-0.7l-0.45,0.02l-1.91,2.39l-0.8,2.5l-0.82,1.31l-0.95,0.43l-0.77,0.15l-0.23,0.2l-0.18,0.56l-8.2,0.02l-0.13,0.03l-1.19,0.61l-2.95,2.45l-0.78,1.13l-4.6,0.01l-0.12,0.02l-1.13,0.48l-0.13,0.44l0.37,0.55l0.2,0.82l-0.01,0.09l-3.1,1.42l-2.63,0.5l-2.84,1.57l-0.47,0.0l-0.72,-0.4l-0.18,-0.27l0.03,-0.15l0.52,-1.0l1.2,-1.71l0.73,-1.8l0.02,-0.17l-1.03,-5.47l-0.15,-0.21l-2.35,-1.32l0.16,-0.29l-0.05,-0.35l-0.37,-0.38l-0.22,-0.09l-0.56,0.0l-0.35,-0.34l-0.11,-0.65l-0.46,-0.2l-0.39,0.26l-0.2,-0.03l-0.11,-0.33l-0.48,-0.25l-0.21,-0.71l-0.15,-0.18l-3.97,-2.07l-4.8,-2.39l-0.25,-0.01l-2.19,0.89l-0.72,0.03l-3.04,-0.82l-0.14,-0.0l-1.94,0.4l-2.4,-0.98l-2.56,-0.51l-1.7,-0.19l-0.62,-0.44l-0.42,-1.67l-0.3,-0.23l-0.85,0.02l-0.29,0.3l-0.01,0.95l-69.26,-0.01l-4.77,-3.14l-1.78,-1.41l-4.51,-1.38l-1.3,-2.73l0.34,-1.96l-0.17,-0.33l-3.06,-1.37l-0.41,-2.58l-0.11,-0.18l-2.92,-2.4l-0.05,-1.53l1.32,-1.59l0.07,-0.2l-0.07,-2.21l-0.16,-0.26l-4.19,-2.22l-2.52,-4.02l-1.56,-2.6l-0.08,-0.09l-2.28,-1.64l-1.65,-1.48l-1.31,-1.89l-0.38,-0.1l-2.51,1.21l-2.28,1.92l-2.03,-2.22l-1.85,-1.71l-2.44,-1.04l-2.28,-0.12l0.03,-37.72l4.27,0.98l4.0,2.13l2.61,0.4l0.24,-0.07l2.17,-1.81l2.92,-1.33l3.63,0.53l0.18,-0.03l3.72,-1.94l3.89,-1.06l1.6,1.72l0.37,0.06l1.87,-1.04l0.14,-0.19l0.48,-1.83l1.37,0.38l4.18,3.96l0.41,0.0l2.89,-2.62l0.28,2.79l0.37,0.26l3.08,-0.73l0.17,-0.12l0.85,-1.16l2.81,0.24l3.83,1.86l5.86,1.61l3.46,0.75l2.44,-0.26l2.89,1.89l-3.12,1.89l-0.14,0.31l0.24,0.24l4.53,0.92l6.84,-0.5l2.04,-0.71l2.54,2.44l0.39,0.02l2.72,-2.16l-0.01,-0.48l-2.26,-1.61l1.27,-1.16l2.94,-0.19l1.94,-0.42l1.89,0.97l2.49,2.32l0.24,0.08l2.71,-0.33l4.35,1.9l0.17,0.02l3.86,-0.67l3.62,0.1l0.31,-0.33l-0.26,-2.44l1.9,-0.65l3.58,1.36l-0.01,3.84l0.23,0.29l0.34,-0.17l1.51,-3.23l1.81,0.1l0.31,-0.22l1.13,-4.37l-0.08,-0.29l-2.68,-2.73l-2.83,-1.76l0.19,-4.73l2.77,-3.15l3.06,0.69l2.44,1.97l3.24,4.88l-2.05,2.02l0.15,0.51l4.41,0.85ZM265.85,150.7l-0.84,0.04l-3.15,-0.99l-1.77,-1.17l0.19,-0.06l3.17,0.79l2.39,1.27l0.01,0.12ZM249.41,3.71l6.68,0.49l5.34,0.79l4.34,1.6l-0.08,1.24l-5.91,2.56l-6.03,1.21l-2.36,1.38l-0.14,0.34l0.29,0.22l4.37,-0.02l-4.96,3.01l-4.06,1.64l-0.11,0.08l-4.21,4.62l-5.07,0.92l-0.12,0.05l-1.53,1.1l-7.5,0.59l-0.28,0.28l0.24,0.31l2.67,0.54l-1.04,0.6l-0.09,0.44l1.89,2.49l-2.11,1.66l-3.83,1.52l-0.15,0.13l-1.14,2.01l-3.41,1.55l-0.16,0.36l0.35,1.19l0.3,0.22l3.98,-0.19l0.03,0.78l-6.42,2.99l-6.44,-1.41l-7.41,0.79l-3.72,-0.62l-4.48,-0.26l-0.25,-2.0l4.37,-1.13l0.21,-0.38l-1.14,-3.55l1.13,-0.28l6.61,2.29l0.35,-0.12l-0.04,-0.37l-3.41,-3.45l-0.14,-0.08l-3.57,-0.92l1.62,-1.7l4.36,-1.3l0.2,-0.18l0.71,-1.94l-0.12,-0.36l-3.45,-2.15l-0.88,-2.43l6.36,0.23l1.94,0.61l0.23,-0.02l3.91,-2.1l0.15,-0.32l-0.26,-0.24l-5.69,-0.67l-8.69,0.37l-4.3,-1.92l-2.12,-2.39l-2.82,-1.68l-0.44,-1.65l3.41,-1.06l2.93,-0.2l4.91,-0.99l3.69,-2.28l2.93,0.31l2.64,1.68l0.42,-0.1l1.84,-3.23l3.17,-0.96l4.45,-0.69l7.56,-0.26l1.26,0.64l0.18,0.03l7.2,-1.06l10.81,0.8ZM203.94,57.59l0.01,0.32l1.97,2.97l0.51,-0.01l2.26,-3.75l6.05,-1.89l4.08,4.72l-0.36,2.95l0.38,0.33l4.95,-1.36l0.11,-0.05l2.23,-1.77l5.37,2.31l3.32,2.14l0.3,1.89l0.36,0.25l4.48,-1.01l2.49,2.8l0.14,0.09l5.99,1.78l2.09,1.74l2.18,3.83l-4.29,1.91l-0.01,0.54l5.9,2.83l3.95,0.94l3.54,3.84l0.2,0.1l3.58,0.25l-0.67,2.51l-4.18,4.54l-2.84,-1.61l-3.91,-3.95l-0.26,-0.09l-3.24,0.52l-0.25,0.26l-0.32,2.37l0.1,0.26l2.63,2.38l3.42,1.89l0.96,1.0l1.57,3.8l-0.74,2.43l-2.85,-0.96l-6.26,-3.15l-0.38,0.09l0.04,0.39l3.54,3.4l2.55,2.31l0.23,0.78l-6.26,-1.43l-5.33,-2.25l-2.73,-1.73l0.67,-0.86l-0.09,-0.45l-7.38,-4.01l-0.44,0.27l0.03,0.89l-6.85,0.61l-1.8,-1.17l1.43,-2.6l4.56,-0.07l5.15,-0.52l0.23,-0.45l-0.76,-1.34l0.8,-1.89l3.21,-4.06l0.05,-0.29l-0.72,-1.95l-0.97,-1.47l-0.11,-0.1l-3.84,-2.1l-4.53,-1.33l1.09,-0.75l0.05,-0.45l-2.65,-2.75l-0.18,-0.09l-2.12,-0.24l-1.91,-1.47l-0.39,0.02l-1.27,1.25l-4.4,0.56l-9.06,-0.99l-5.28,-1.31l-4.01,-0.67l-1.72,-1.31l2.32,-1.85l0.1,-0.33l-0.28,-0.2l-3.3,-0.02l-0.74,-4.36l1.86,-4.09l2.46,-1.88l5.74,-1.15l-1.5,2.55ZM261.28,159.28l0.19,0.14l1.82,0.42l1.66,-0.05l-0.66,0.68l-0.75,0.16l-3.0,-1.25l-0.46,-0.77l0.51,-0.52l0.68,1.19ZM230.87,84.48l-2.48,0.19l-0.52,-1.74l0.96,-2.17l2.03,-0.53l1.71,1.04l0.02,1.6l-0.22,0.46l-1.5,1.16ZM229.52,58.19l0.14,0.82l-4.99,-0.22l-2.73,0.63l-0.59,-0.23l-2.61,-2.4l0.08,-1.38l0.94,-0.25l5.61,0.51l4.14,2.54ZM222.12,105.0l-0.79,1.63l-0.75,-0.22l-0.52,-0.91l0.04,-0.09l0.84,-1.01l0.74,0.06l0.44,0.55ZM183.77,38.22l2.72,1.65l0.16,0.04l4.83,-0.01l1.92,1.52l-0.51,1.75l0.18,0.36l2.84,1.14l1.56,1.19l0.16,0.06l3.37,0.22l3.65,0.42l4.07,-1.1l5.05,-0.43l3.96,0.35l2.53,1.8l0.48,1.79l-1.37,1.16l-3.6,1.03l-3.22,-0.59l-7.17,0.76l-5.1,0.09l-4.0,-0.6l-6.48,-1.56l-0.81,-2.57l-0.3,-2.49l-0.1,-0.19l-2.51,-2.25l-0.16,-0.07l-5.12,-0.63l-2.61,-1.45l0.75,-1.71l4.88,0.32ZM207.46,91.26l0.42,1.62l0.42,0.19l1.12,-0.55l1.35,0.99l2.74,1.39l2.73,1.2l0.2,1.74l0.35,0.26l1.72,-0.29l1.31,0.97l-1.72,0.96l-3.68,-0.9l-1.34,-1.71l-0.43,-0.04l-2.46,2.1l-3.23,1.85l-0.74,-1.98l-0.31,-0.19l-2.47,0.28l1.49,-1.34l0.1,-0.19l0.32,-3.15l0.79,-3.45l1.34,0.25ZM215.59,102.66l-2.73,2.0l-1.49,-0.08l-0.37,-0.7l1.61,-1.56l3.0,0.03l-0.02,0.3ZM202.79,24.07l0.11,0.12l2.54,1.53l-3.01,1.47l-4.55,4.07l-4.3,0.38l-5.07,-0.68l-2.51,-2.09l0.03,-1.72l1.86,-1.4l0.1,-0.34l-0.29,-0.2l-4.49,0.04l-2.63,-1.79l-1.45,-2.36l1.61,-2.38l1.65,-1.69l2.47,-0.4l0.19,-0.48l-0.72,-0.89l5.1,-0.26l3.1,3.05l0.13,0.07l4.21,1.25l3.99,1.06l1.92,3.65ZM187.5,59.3l-0.15,0.1l-2.59,3.4l-2.5,-0.15l-1.47,-3.92l0.04,-2.24l1.22,-1.92l2.34,-1.26l5.11,0.17l4.28,1.06l-3.36,3.86l-2.9,0.9ZM186.19,48.8l-1.15,1.63l-3.42,-0.35l-2.68,-1.15l1.11,-1.88l3.34,-1.27l2.01,1.63l0.79,1.38ZM185.78,35.41l-0.95,0.13l-4.48,-0.33l-0.4,-0.91l4.5,0.07l1.45,0.82l-0.1,0.21ZM180.76,32.56l-3.43,1.03l-1.85,-1.14l-1.01,-1.92l-0.16,-1.87l2.87,0.2l1.39,0.35l2.75,1.75l-0.55,1.6ZM181.03,76.32l-1.21,1.2l-3.19,-1.26l-0.18,-0.01l-1.92,0.45l-2.88,-1.67l1.84,-1.16l1.6,-1.77l2.45,1.17l1.45,0.77l2.05,2.28ZM169.72,54.76l2.83,0.97l0.14,0.01l4.25,-0.58l0.47,1.01l-2.19,2.16l0.07,0.48l3.61,1.95l-0.41,3.84l-3.87,1.68l-2.23,-0.36l-1.73,-1.75l-6.07,-3.53l0.03,-1.01l4.79,0.55l0.3,-0.16l-0.04,-0.34l-2.55,-2.89l2.59,-2.05ZM174.44,40.56l1.49,1.87l0.07,2.48l-1.07,3.52l-3.87,0.48l-2.41,-0.72l0.05,-2.72l-0.33,-0.3l-3.79,0.36l-0.13,-3.31l2.36,0.14l0.15,-0.03l3.7,-1.74l3.44,0.29l0.31,-0.22l0.03,-0.12ZM170.14,31.5l0.75,1.74l-3.52,-0.52l-4.19,-1.77l-4.65,-0.17l1.65,-1.11l-0.05,-0.52l-2.86,-1.26l-0.13,-1.58l4.52,0.7l6.66,1.99l1.84,2.5ZM134.64,58.08l-1.08,1.93l0.34,0.44l5.44,-1.41l3.37,2.32l0.37,-0.02l2.66,-2.28l2.03,1.38l2.01,4.53l0.53,0.04l1.26,-1.93l0.03,-0.27l-1.67,-4.55l1.82,-0.58l2.36,0.73l2.69,1.84l1.53,4.46l0.77,3.24l0.15,0.19l4.22,2.26l4.32,2.04l-0.21,1.51l-3.87,0.34l-0.19,0.5l1.45,1.54l-0.65,1.23l-4.3,-0.65l-4.4,-1.19l-2.97,0.28l-4.67,1.48l-6.31,0.65l-4.27,0.39l-1.26,-1.91l-0.15,-0.12l-3.42,-1.2l-0.16,-0.01l-2.05,0.45l-2.66,-3.02l1.2,-0.34l3.82,-0.76l3.58,0.19l3.27,-0.78l0.23,-0.29l-0.24,-0.29l-4.84,-1.06l-5.42,0.35l-3.4,-0.09l-0.97,-1.22l5.39,-1.7l0.21,-0.33l-0.3,-0.25l-3.82,0.06l-3.95,-1.1l1.88,-3.13l1.68,-1.81l6.54,-2.84l2.11,0.77ZM158.85,56.58l-1.82,2.62l-3.38,-2.9l0.49,-0.39l3.17,-0.18l1.54,0.86ZM149.71,42.7l1.0,1.87l0.37,0.14l2.17,-0.83l2.33,0.2l0.38,2.16l-1.38,2.17l-8.33,0.76l-6.34,2.15l-3.51,0.1l-0.22,-1.13l4.98,-2.12l0.17,-0.34l-0.31,-0.23l-11.27,0.6l-3.04,-0.78l3.14,-4.57l2.2,-1.35l6.87,1.7l4.4,3.0l0.14,0.05l4.37,0.39l0.27,-0.48l-3.41,-4.68l1.96,-1.62l2.28,0.53l0.79,2.32ZM145.44,29.83l-2.18,0.77l-3.79,-0.0l0.02,-0.31l2.34,-1.5l1.2,0.23l2.42,0.83ZM144.83,34.5l-4.44,1.46l-3.18,-1.48l1.6,-1.36l3.51,-0.53l3.1,0.75l-0.6,1.16ZM119.02,65.87l-6.17,2.07l-1.19,-1.82l-0.13,-0.11l-5.48,-2.32l0.92,-1.7l1.73,-3.44l2.16,-3.15l-0.02,-0.36l-2.09,-2.56l7.84,-0.71l3.59,1.02l6.32,0.27l2.35,1.37l2.25,1.71l-2.68,1.04l-6.21,3.41l-3.1,3.28l-0.08,0.21l0.0,1.81ZM129.66,35.4l-0.3,3.55l-1.77,1.67l-2.34,0.27l-4.62,2.2l-3.89,0.76l-2.83,-0.93l3.85,-3.52l5.04,-3.36l3.75,0.07l3.11,-0.7ZM111.24,152.74l-0.82,0.29l-3.92,-1.39l-0.7,-1.06l-0.12,-0.1l-2.15,-1.09l-0.41,-0.84l-0.2,-0.16l-2.44,-0.56l-0.84,-1.56l0.1,-0.36l2.34,0.64l1.53,0.5l2.28,0.34l0.78,1.04l1.24,1.55l0.09,0.08l2.42,1.3l0.81,1.39ZM88.54,134.82l0.14,0.02l2.0,-0.23l-0.67,3.48l0.06,0.24l1.78,2.22l-0.24,-0.0l-1.4,-1.42l-0.91,-1.53l-1.26,-1.08l-0.42,-1.35l0.09,-0.66l0.82,0.31Z\", \"name\": \"Canada\"}, \"CG\": {\"path\": \"M453.66,296.61l-0.9,-0.82l-0.35,-0.04l-0.83,0.48l-0.77,0.83l-1.65,-2.13l1.66,-1.2l0.08,-0.39l-0.81,-1.43l0.59,-0.43l1.62,-0.29l0.24,-0.24l0.1,-0.58l0.94,0.84l0.19,0.08l2.21,0.11l0.27,-0.14l0.81,-1.29l0.32,-1.76l-0.27,-1.96l-0.06,-0.15l-1.08,-1.35l1.02,-2.74l-0.09,-0.34l-0.62,-0.5l-0.22,-0.06l-1.66,0.18l-0.55,-1.03l0.12,-0.73l2.85,0.09l1.98,0.65l2.0,0.59l0.38,-0.25l0.17,-1.3l1.26,-2.24l1.34,-1.19l1.54,0.38l1.35,0.12l-0.11,1.15l-0.74,1.34l-0.5,1.61l-0.31,2.22l0.12,1.41l-0.4,0.9l-0.06,0.88l-0.24,0.67l-1.57,1.15l-1.24,1.41l-1.09,2.43l-0.03,0.13l0.08,1.95l-0.55,0.69l-1.46,1.23l-1.32,1.41l-0.61,-0.29l-0.13,-0.57l-0.29,-0.23l-1.36,-0.02l-0.23,0.1l-0.72,0.81l-0.41,-0.16Z\", \"name\": \"Republic of the Congo\"}, \"CF\": {\"path\": \"M459.41,266.56l1.9,-0.17l0.22,-0.12l0.36,-0.5l0.14,0.02l0.55,0.51l0.29,0.07l3.15,-0.96l0.12,-0.07l1.05,-0.97l1.29,-0.87l0.12,-0.33l-0.17,-0.61l0.38,-0.12l2.36,0.15l0.15,-0.03l2.36,-1.17l0.12,-0.1l1.78,-2.72l1.18,-0.96l1.23,-0.34l0.21,0.79l0.07,0.13l1.37,1.5l0.01,0.86l-0.39,1.0l-0.01,0.17l0.16,0.78l0.1,0.17l0.91,0.76l1.89,1.09l1.24,0.92l0.02,0.67l0.12,0.23l1.67,1.3l0.99,1.03l0.61,1.46l0.14,0.15l1.79,0.95l0.2,0.4l-0.44,0.14l-1.54,-0.06l-1.98,-0.26l-0.93,0.22l-0.19,0.14l-0.3,0.48l-0.57,0.05l-0.91,-0.49l-0.26,-0.01l-2.7,1.21l-1.04,-0.23l-0.21,0.03l-0.34,0.19l-0.12,0.13l-0.64,1.3l-1.67,-0.43l-1.77,-0.24l-1.58,-0.91l-2.06,-0.85l-0.27,0.02l-1.42,0.88l-0.97,1.27l-0.06,0.14l-0.19,1.46l-1.3,-0.11l-1.67,-0.42l-0.27,0.07l-1.55,1.41l-0.99,1.76l-0.14,-1.18l-0.13,-0.22l-1.1,-0.78l-0.86,-1.2l-0.2,-0.84l-0.07,-0.13l-1.07,-1.19l0.16,-0.59l0.0,-0.15l-0.24,-1.01l0.18,-1.77l0.5,-0.38l0.09,-0.11l1.18,-2.4Z\", \"name\": \"Central African Republic\"}, \"CD\": {\"path\": \"M497.85,276.25l-0.14,2.77l0.2,0.3l0.57,0.19l-0.47,0.52l-1.0,0.71l-0.96,1.31l-0.56,1.22l-0.16,2.04l-0.54,0.89l-0.04,0.15l-0.02,1.76l-0.63,0.61l-0.09,0.2l-0.08,1.33l-0.2,0.11l-0.15,0.21l-0.23,1.37l0.03,0.2l0.6,1.08l0.16,2.96l0.44,2.29l-0.24,1.25l0.01,0.15l0.5,1.46l0.07,0.12l1.41,1.37l1.09,2.56l-0.51,-0.11l-3.45,0.45l-0.67,0.3l-0.15,0.15l-0.71,1.61l0.01,0.26l0.52,1.03l-0.43,2.9l-0.31,2.55l0.13,0.29l0.7,0.46l1.75,0.99l0.31,-0.01l0.26,-0.17l0.15,1.9l-1.44,-0.02l-0.94,-1.28l-0.94,-1.1l-0.17,-0.1l-1.76,-0.33l-0.5,-1.18l-0.42,-0.15l-1.44,0.75l-1.79,-0.32l-0.77,-1.05l-0.2,-0.12l-1.59,-0.23l-0.97,0.04l-0.1,-0.53l-0.27,-0.25l-0.86,-0.06l-1.13,-0.15l-1.62,0.37l-1.04,-0.06l-0.32,0.09l0.11,-2.56l-0.08,-0.21l-0.77,-0.87l-0.17,-1.41l0.36,-1.47l-0.03,-0.21l-0.48,-0.91l-0.04,-1.52l-0.3,-0.29l-2.65,0.02l0.13,-0.53l-0.29,-0.37l-1.28,0.01l-0.28,0.21l-0.07,0.24l-1.35,0.09l-0.26,0.18l-0.62,1.45l-0.25,0.42l-1.17,-0.3l-0.19,0.01l-0.79,0.34l-1.44,0.18l-1.41,-1.96l-0.7,-1.47l-0.61,-1.86l-0.28,-0.21l-7.39,-0.03l-0.92,0.3l-0.78,-0.03l-0.78,0.25l-0.11,-0.25l0.35,-0.15l0.18,-0.26l0.07,-1.02l0.33,-0.52l0.72,-0.42l0.52,0.2l0.33,-0.08l0.76,-0.86l0.99,0.02l0.11,0.48l0.16,0.2l0.94,0.44l0.35,-0.07l1.46,-1.56l1.44,-1.21l0.68,-0.85l0.06,-0.2l-0.08,-1.99l1.04,-2.33l1.1,-1.23l1.62,-1.19l0.11,-0.14l0.29,-0.8l0.08,-0.94l0.38,-0.82l0.03,-0.16l-0.13,-1.38l0.3,-2.16l0.47,-1.51l0.73,-1.31l0.04,-0.12l0.15,-1.51l0.21,-1.66l0.89,-1.16l1.16,-0.7l1.9,0.79l1.69,0.95l1.81,0.24l1.85,0.48l0.35,-0.16l0.71,-1.43l0.16,-0.09l1.03,0.23l0.19,-0.02l2.65,-1.19l0.86,0.46l0.17,0.03l0.81,-0.08l0.23,-0.14l0.31,-0.5l0.75,-0.17l1.83,0.26l1.64,0.06l0.72,-0.21l1.39,1.9l0.16,0.11l1.12,0.3l0.24,-0.04l0.58,-0.36l1.05,0.15l0.15,-0.02l1.15,-0.44l0.47,0.84l0.08,0.09l2.08,1.57Z\", \"name\": \"Democratic Republic of the Congo\"}, \"CZ\": {\"path\": \"M463.29,152.22l-0.88,-0.47l-0.18,-0.03l-1.08,0.15l-1.86,-0.94l-0.21,-0.02l-0.88,0.24l-0.13,0.07l-1.25,1.17l-1.63,-0.91l-1.38,-1.36l-1.22,-0.75l-0.24,-1.24l-0.33,-0.75l1.53,-0.6l0.98,-0.84l1.74,-0.62l0.11,-0.07l0.47,-0.47l0.46,0.27l0.24,0.03l0.96,-0.3l1.06,0.95l0.15,0.07l1.57,0.24l-0.1,0.6l0.16,0.32l1.36,0.68l0.41,-0.15l0.28,-0.62l1.29,0.28l0.19,0.84l0.26,0.23l1.73,0.18l0.74,1.02l-0.17,0.0l-0.25,0.13l-0.32,0.49l-0.46,0.11l-0.22,0.23l-0.13,0.57l-0.32,0.1l-0.2,0.22l-0.03,0.14l-0.65,0.25l-1.05,-0.05l-0.28,0.17l-0.22,0.43Z\", \"name\": \"Czech Republic\"}, \"CY\": {\"path\": \"M505.03,193.75l-1.51,0.68l-1.0,-0.3l-0.32,-0.63l0.69,-0.06l0.41,0.13l0.19,-0.0l0.62,-0.22l0.31,0.02l0.06,0.22l0.49,0.17l0.06,-0.01Z\", \"name\": \"Cyprus\"}, \"CR\": {\"path\": \"M213.0,263.84l-0.98,-0.4l-0.3,-0.31l0.16,-0.24l0.05,-0.21l-0.09,-0.56l-0.1,-0.18l-0.76,-0.65l-0.99,-0.5l-0.74,-0.28l-0.13,-0.58l-0.12,-0.18l-0.66,-0.45l-0.34,-0.0l-0.13,0.31l0.13,0.59l-0.17,0.21l-0.34,-0.42l-0.14,-0.1l-0.7,-0.22l-0.23,-0.34l0.01,-0.62l0.31,-0.74l-0.14,-0.38l-0.3,-0.15l0.47,-0.4l1.48,0.6l0.26,-0.02l0.47,-0.27l0.58,0.15l0.35,0.44l0.17,0.11l0.74,0.17l0.27,-0.07l0.3,-0.27l0.52,1.09l0.97,1.02l0.77,0.71l-0.41,0.1l-0.23,0.3l0.01,1.02l0.12,0.24l0.2,0.14l-0.07,0.05l-0.11,0.3l0.08,0.37l-0.23,0.63Z\", \"name\": \"Costa Rica\"}, \"CU\": {\"path\": \"M215.01,226.09l2.08,0.18l1.94,0.03l2.24,0.86l0.95,0.92l0.25,0.08l2.22,-0.28l0.79,0.55l3.68,2.81l0.19,0.06l0.77,-0.03l1.18,0.42l-0.12,0.47l0.27,0.37l1.78,0.1l1.59,0.9l-0.11,0.22l-1.5,0.3l-1.64,0.13l-1.75,-0.2l-2.69,0.19l1.0,-0.86l-0.03,-0.48l-1.02,-0.68l-0.13,-0.05l-1.52,-0.16l-0.74,-0.64l-0.57,-1.42l-0.3,-0.19l-1.36,0.1l-2.23,-0.67l-0.71,-0.52l-0.14,-0.06l-3.2,-0.4l-0.42,-0.25l0.56,-0.39l0.12,-0.33l-0.27,-0.22l-2.46,-0.13l-0.2,0.06l-1.72,1.31l-0.94,0.03l-0.25,0.15l-0.29,0.53l-1.04,0.24l-0.29,-0.07l0.7,-0.43l0.1,-0.11l0.5,-0.87l1.04,-0.54l1.23,-0.49l1.86,-0.25l0.62,-0.28Z\", \"name\": \"Cuba\"}, \"SZ\": {\"path\": \"M500.95,353.41l-0.41,0.97l-1.16,0.23l-1.29,-1.26l-0.02,-0.71l0.63,-0.93l0.23,-0.7l0.47,-0.12l1.04,0.4l0.32,1.05l0.2,1.08Z\", \"name\": \"Swaziland\"}, \"SY\": {\"path\": \"M510.84,199.83l0.09,-0.11l0.07,-0.2l-0.04,-1.08l0.56,-1.4l1.3,-1.01l0.1,-0.34l-0.41,-1.11l-0.24,-0.19l-0.89,-0.11l-0.2,-1.84l0.55,-1.05l1.3,-1.22l0.09,-0.19l0.09,-1.09l0.39,0.27l0.25,0.04l2.66,-0.77l1.35,0.52l2.06,-0.01l2.93,-1.08l1.35,0.04l2.14,-0.34l-0.83,1.16l-1.31,0.68l-0.16,0.3l0.23,2.03l-0.9,3.25l-5.43,2.87l-4.79,2.91l-2.32,-0.92Z\", \"name\": \"Syria\"}, \"KG\": {\"path\": \"M599.04,172.15l0.38,-0.9l1.43,-0.37l4.04,1.02l0.37,-0.23l0.36,-1.64l1.17,-0.52l3.45,1.24l0.2,-0.0l0.86,-0.31l4.09,0.08l3.61,0.31l1.18,1.02l0.11,0.06l1.19,0.34l-0.13,0.26l-3.84,1.58l-0.13,0.1l-0.81,1.08l-3.08,0.34l-0.24,0.16l-0.85,1.7l-2.43,-0.37l-0.14,0.01l-1.79,0.61l-2.39,1.4l-0.12,0.39l0.25,0.49l-0.48,0.45l-4.57,0.43l-3.04,-0.94l-2.45,0.18l0.14,-1.02l2.42,0.44l0.27,-0.08l0.81,-0.81l1.76,0.27l0.21,-0.05l3.21,-2.14l-0.03,-0.51l-2.97,-1.57l-0.26,-0.01l-1.64,0.69l-1.38,-0.84l1.81,-1.67l-0.09,-0.5l-0.46,-0.18Z\", \"name\": \"Kyrgyzstan\"}, \"KE\": {\"path\": \"M523.3,287.04l0.06,0.17l1.29,1.8l-1.46,0.84l-0.11,0.11l-0.55,0.93l-0.81,0.16l-0.24,0.24l-0.34,1.69l-0.81,1.06l-0.46,1.58l-0.76,0.63l-3.3,-2.3l-0.16,-1.32l-0.15,-0.23l-9.35,-5.28l-0.02,-2.4l1.92,-2.63l0.91,-1.83l0.01,-0.24l-1.09,-2.86l-0.29,-1.24l-1.09,-1.63l2.93,-2.85l0.92,0.3l0.0,1.19l0.09,0.22l0.86,0.83l0.21,0.08l1.65,0.0l3.09,2.08l0.16,0.05l0.79,0.03l0.54,-0.06l0.58,0.28l1.67,0.2l0.28,-0.12l0.69,-0.98l2.04,-0.94l0.86,0.73l0.19,0.07l1.1,0.0l-1.82,2.36l-0.06,0.18l0.03,9.12Z\", \"name\": \"Kenya\"}, \"SS\": {\"path\": \"M505.7,261.39l0.02,1.64l-0.27,0.55l-1.15,0.05l-0.24,0.15l-0.85,1.44l0.22,0.45l1.44,0.17l1.15,1.12l0.42,0.95l0.14,0.15l1.06,0.54l1.33,2.45l-3.06,2.98l-1.44,1.08l-1.75,0.01l-1.92,0.56l-1.5,-0.53l-0.27,0.03l-0.85,0.57l-1.98,-1.5l-0.56,-1.02l-0.37,-0.13l-1.32,0.5l-1.08,-0.15l-0.2,0.04l-0.56,0.35l-0.9,-0.24l-1.44,-1.97l-0.39,-0.77l-0.13,-0.13l-1.78,-0.94l-0.65,-1.5l-1.08,-1.12l-1.57,-1.22l-0.02,-0.68l-0.12,-0.23l-1.37,-1.02l-1.17,-0.68l0.2,-0.08l0.86,-0.48l0.14,-0.18l0.63,-2.22l0.6,-1.02l1.47,-0.28l0.35,0.56l1.29,1.48l0.14,0.09l0.69,0.22l0.22,-0.02l0.83,-0.4l1.58,0.08l0.26,0.39l0.25,0.13l2.49,0.0l0.3,-0.25l0.06,-0.35l1.13,-0.42l0.18,-0.18l0.22,-0.63l0.68,-0.38l1.95,1.37l0.23,0.05l1.29,-0.26l0.19,-0.12l1.23,-1.8l1.36,-1.37l0.08,-0.25l-0.21,-1.52l-0.06,-0.15l-0.25,-0.3l0.94,-0.08l0.26,-0.21l0.1,-0.32l0.6,0.09l-0.25,1.67l0.3,1.83l0.11,0.19l1.22,0.94l0.25,0.73l-0.04,1.2l0.26,0.31l0.09,0.01Z\", \"name\": \"South Sudan\"}, \"SR\": {\"path\": \"M278.1,270.26l2.71,0.45l0.31,-0.14l0.19,-0.32l1.82,-0.16l2.25,0.56l-1.09,1.81l-0.04,0.19l0.2,1.72l0.05,0.13l0.9,1.35l-0.39,0.99l-0.21,1.09l-0.48,0.8l-1.2,-0.44l-0.17,-0.01l-1.12,0.24l-0.95,-0.21l-0.35,0.2l-0.25,0.73l0.05,0.29l0.3,0.35l-0.06,0.13l-1.01,-0.15l-1.42,-2.03l-0.32,-1.36l-0.29,-0.23l-0.63,-0.0l-0.95,-1.56l0.41,-1.16l0.01,-0.17l-0.08,-0.35l1.29,-0.56l0.18,-0.22l0.35,-1.97Z\", \"name\": \"Suriname\"}, \"KH\": {\"path\": \"M680.28,257.89l-0.93,-1.2l-1.24,-2.56l-0.56,-2.9l1.45,-1.92l3.07,-0.46l2.26,0.35l2.03,0.98l0.38,-0.11l1.0,-1.55l1.86,0.79l0.52,1.51l-0.28,2.82l-4.05,1.88l-0.12,0.45l0.79,1.1l-2.2,0.17l-2.08,0.98l-1.89,-0.33Z\", \"name\": \"Cambodia\"}, \"SV\": {\"path\": \"M197.02,248.89l0.18,-0.05l0.59,0.17l0.55,0.51l0.64,0.35l0.06,0.22l0.37,0.21l1.01,-0.28l0.38,0.13l0.16,0.13l-0.14,0.81l-0.18,0.38l-1.22,-0.03l-0.84,-0.23l-1.11,-0.52l-1.31,-0.15l-0.49,-0.38l0.02,-0.08l0.76,-0.57l0.46,-0.27l0.11,-0.35Z\", \"name\": \"El Salvador\"}, \"SK\": {\"path\": \"M468.01,150.02l0.05,0.07l0.36,0.1l0.85,-0.37l1.12,1.02l0.33,0.05l1.38,-0.65l1.07,0.3l0.16,0.0l1.69,-0.43l1.95,1.02l-0.51,0.64l-0.45,1.2l-0.32,0.2l-2.55,-0.93l-0.17,-0.01l-0.82,0.2l-0.17,0.11l-0.53,0.68l-0.94,0.32l-0.14,-0.11l-0.29,-0.04l-1.18,0.48l-0.95,0.09l-0.26,0.21l-0.15,0.47l-1.84,0.34l-0.82,-0.31l-1.14,-0.73l-0.2,-0.89l0.42,-0.84l0.91,0.05l0.12,-0.02l0.86,-0.33l0.18,-0.21l0.03,-0.13l0.32,-0.1l0.2,-0.22l0.12,-0.55l0.39,-0.1l0.18,-0.13l0.3,-0.45l0.43,-0.0Z\", \"name\": \"Slovakia\"}, \"KR\": {\"path\": \"M737.31,185.72l0.84,0.08l0.27,-0.12l0.89,-1.2l1.63,-0.13l1.1,-0.2l0.21,-0.16l0.12,-0.24l1.86,2.95l0.59,1.79l0.02,3.17l-0.84,1.38l-2.23,0.55l-1.95,1.14l-1.91,0.21l-0.22,-1.21l0.45,-2.07l-0.01,-0.17l-0.99,-2.67l1.54,-0.4l0.17,-0.46l-1.55,-2.24Z\", \"name\": \"South Korea\"}, \"SI\": {\"path\": \"M455.77,159.59l1.79,0.21l0.18,-0.04l1.2,-0.68l2.12,-0.08l0.21,-0.1l0.38,-0.42l0.1,0.01l0.28,0.62l-1.71,0.71l-0.18,0.22l-0.21,1.1l-0.71,0.26l-0.2,0.28l0.01,0.55l-0.59,-0.04l-0.79,-0.47l-0.38,0.06l-0.36,0.41l-0.84,-0.05l0.05,-0.15l-0.56,-1.24l0.21,-1.17Z\", \"name\": \"Slovenia\"}, \"KP\": {\"path\": \"M747.76,172.02l-0.23,-0.04l-0.26,0.08l-1.09,1.02l-0.78,1.06l-0.06,0.19l0.09,1.95l-1.12,0.57l-0.53,0.58l-0.88,0.82l-1.69,0.51l-1.09,0.79l-0.12,0.22l-0.07,1.17l-0.22,0.25l0.09,0.47l0.96,0.46l1.22,1.1l-0.19,0.37l-0.91,0.16l-1.75,0.14l-0.22,0.12l-0.87,1.18l-0.95,-0.09l-0.3,0.18l-0.97,-0.44l-0.39,0.13l-0.25,0.44l-0.29,0.09l-0.03,-0.2l-0.18,-0.23l-0.62,-0.25l-0.43,-0.29l0.52,-0.97l0.52,-0.3l0.13,-0.38l-0.18,-0.42l0.59,-1.47l0.01,-0.21l-0.16,-0.48l-0.22,-0.2l-1.41,-0.31l-0.82,-0.55l1.74,-1.62l2.73,-1.58l1.62,-1.96l0.96,0.76l0.17,0.06l2.17,0.11l0.31,-0.37l-0.32,-1.31l3.61,-1.21l0.16,-0.13l0.79,-1.34l1.25,1.38Z\", \"name\": \"North Korea\"}, \"SO\": {\"path\": \"M543.8,256.48l0.61,-0.05l1.14,-0.37l1.31,-0.25l0.12,-0.05l1.11,-0.81l0.57,-0.0l0.03,0.39l-0.23,1.49l0.01,1.25l-0.52,0.92l-0.7,2.71l-1.19,2.79l-1.54,3.2l-2.13,3.66l-2.12,2.79l-2.92,3.39l-2.47,2.0l-3.76,2.5l-2.33,1.9l-2.77,3.06l-0.61,1.35l-0.28,0.29l-1.22,-1.69l-0.03,-8.92l2.12,-2.76l0.59,-0.68l1.47,-0.04l0.18,-0.06l2.15,-1.71l3.16,-0.11l0.21,-0.09l7.08,-7.55l1.76,-2.12l1.14,-1.57l0.06,-0.18l0.01,-4.67Z\", \"name\": \"Somalia\"}, \"SN\": {\"path\": \"M379.28,250.34l-0.95,-1.82l-0.09,-0.1l-0.83,-0.6l0.62,-0.28l0.13,-0.11l1.21,-1.8l0.6,-1.31l0.71,-0.68l1.09,0.2l0.18,-0.02l1.17,-0.53l1.25,-0.03l1.17,0.73l1.59,0.65l1.47,1.83l1.59,1.7l0.12,1.56l0.49,1.46l0.1,0.14l0.85,0.65l0.18,0.82l-0.08,0.57l-0.13,0.05l-1.29,-0.19l-0.29,0.13l-0.11,0.16l-0.35,0.04l-1.83,-0.61l-5.84,-0.13l-0.12,0.02l-0.6,0.26l-0.87,-0.06l-1.01,0.32l-0.26,-1.26l1.9,0.04l0.16,-0.04l0.54,-0.32l0.37,-0.02l0.15,-0.05l0.78,-0.5l0.92,0.46l0.12,0.03l1.09,0.04l0.15,-0.03l1.08,-0.57l0.11,-0.44l-0.51,-0.74l-0.39,-0.1l-0.76,0.39l-0.62,-0.01l-0.92,-0.58l-0.18,-0.05l-0.79,0.04l-0.2,0.09l-0.48,0.51l-2.41,0.06Z\", \"name\": \"Senegal\"}, \"SL\": {\"path\": \"M392.19,267.53l-0.44,-0.12l-1.73,-0.97l-1.24,-1.28l-0.4,-0.84l-0.27,-1.65l1.21,-1.0l0.09,-0.12l0.27,-0.66l0.32,-0.41l0.56,-0.05l0.16,-0.07l0.5,-0.41l1.75,0.0l0.59,0.77l0.49,0.96l-0.07,0.64l0.04,0.19l0.36,0.58l-0.03,0.84l0.24,0.2l-0.64,0.65l-1.13,1.37l-0.06,0.14l-0.12,0.66l-0.43,0.58Z\", \"name\": \"Sierra Leone\"}, \"SB\": {\"path\": \"M826.74,311.51l0.23,0.29l-0.95,-0.01l-0.39,-0.63l0.65,0.27l0.45,0.09ZM825.01,308.52l-1.18,-1.39l-0.37,-1.06l0.24,0.0l0.82,1.84l0.49,0.6ZM823.21,309.42l-0.44,0.03l-1.43,-0.24l-0.32,-0.24l0.08,-0.5l1.29,0.31l0.72,0.47l0.11,0.18ZM817.9,303.81l2.59,1.44l0.3,0.41l-1.21,-0.66l-1.34,-0.89l-0.34,-0.3ZM813.77,302.4l0.48,0.34l0.1,0.08l-0.33,-0.17l-0.25,-0.25Z\", \"name\": \"Solomon Islands\"}, \"SA\": {\"path\": \"M528.24,243.1l-0.2,-0.69l-0.07,-0.12l-0.69,-0.71l-0.18,-0.94l-0.12,-0.19l-1.24,-0.89l-1.28,-2.09l-0.7,-2.08l-0.07,-0.11l-1.73,-1.79l-0.11,-0.07l-1.03,-0.39l-1.57,-2.36l-0.27,-1.72l0.1,-1.53l-0.03,-0.15l-1.44,-2.93l-1.25,-1.13l-1.34,-0.56l-0.72,-1.33l0.11,-0.49l-0.02,-0.2l-0.7,-1.38l-0.08,-0.1l-0.68,-0.56l-0.97,-1.98l-2.8,-4.03l-0.25,-0.13l-0.85,0.01l0.29,-1.11l0.12,-0.97l0.23,-0.81l2.52,0.39l0.23,-0.06l1.08,-0.84l0.6,-0.95l1.78,-0.35l0.22,-0.17l0.37,-0.83l0.74,-0.42l0.08,-0.46l-2.17,-2.4l4.55,-1.26l0.12,-0.06l0.36,-0.32l2.83,0.71l3.67,1.91l7.04,5.5l0.17,0.06l4.64,0.22l2.06,0.24l0.55,1.15l0.28,0.17l1.56,-0.06l0.9,2.15l0.14,0.15l1.14,0.57l0.39,0.85l0.11,0.13l1.59,1.06l0.12,0.91l-0.23,0.83l0.01,0.18l0.32,0.9l0.07,0.11l0.68,0.7l0.33,0.86l0.37,0.65l0.09,0.1l0.76,0.53l0.25,0.04l0.45,-0.12l0.35,0.75l0.1,0.63l0.96,2.68l0.23,0.19l7.53,1.33l0.27,-0.09l0.24,-0.26l0.87,1.41l-1.58,4.96l-7.34,2.54l-7.28,1.02l-2.34,1.17l-0.12,0.1l-1.74,2.63l-0.86,0.32l-0.49,-0.68l-0.28,-0.12l-0.92,0.12l-2.32,-0.25l-0.41,-0.23l-0.15,-0.04l-2.89,0.06l-0.63,0.2l-0.91,-0.59l-0.43,0.11l-0.66,1.27l-0.03,0.21l0.21,0.89l-0.6,0.45Z\", \"name\": \"Saudi Arabia\"}, \"SE\": {\"path\": \"M476.42,90.44l-0.15,0.1l-2.43,2.86l-0.07,0.24l0.36,2.31l-3.84,3.1l-4.83,3.38l-0.11,0.15l-1.82,5.45l0.03,0.26l1.78,2.68l2.27,1.99l-2.13,3.88l-2.49,0.82l-0.2,0.24l-0.95,6.05l-1.32,3.09l-2.82,-0.32l-0.3,0.16l-1.34,2.64l-2.48,0.14l-0.76,-3.15l-2.09,-4.04l-1.85,-5.01l1.03,-1.98l2.06,-2.53l0.06,-0.13l0.83,-4.45l-0.06,-0.25l-1.54,-1.86l-0.15,-5.0l1.52,-3.48l2.28,0.06l0.27,-0.16l0.87,-1.59l-0.01,-0.31l-0.8,-1.21l3.79,-5.63l4.07,-7.54l2.23,0.01l0.29,-0.22l0.59,-2.15l4.46,0.66l0.34,-0.26l0.34,-2.64l1.21,-0.14l3.24,2.08l3.78,2.85l0.06,6.37l0.03,0.14l0.67,1.29l-3.95,1.07Z\", \"name\": \"Sweden\"}, \"SD\": {\"path\": \"M505.98,259.75l-0.31,-0.9l-0.1,-0.14l-1.2,-0.93l-0.27,-1.66l0.29,-1.83l-0.25,-0.34l-1.16,-0.17l-0.33,0.21l-0.11,0.37l-1.3,0.11l-0.21,0.49l0.55,0.68l0.18,1.29l-1.31,1.33l-1.18,1.72l-1.04,0.21l-2.0,-1.4l-0.32,-0.02l-0.95,0.52l-0.14,0.16l-0.21,0.6l-1.16,0.43l-0.19,0.23l-0.04,0.27l-2.08,0.0l-0.25,-0.39l-0.24,-0.13l-1.81,-0.09l-0.14,0.03l-0.8,0.38l-0.49,-0.16l-1.22,-1.39l-0.42,-0.67l-0.31,-0.14l-1.81,0.35l-0.2,0.14l-0.72,1.24l-0.61,2.14l-0.73,0.4l-0.62,0.22l-0.83,-0.68l-0.12,-0.6l0.38,-0.97l0.01,-1.14l-0.08,-0.2l-1.39,-1.53l-0.25,-0.97l0.03,-0.57l-0.11,-0.25l-0.81,-0.66l-0.03,-1.34l-0.04,-0.14l-0.52,-0.98l-0.31,-0.15l-0.42,0.07l0.12,-0.44l0.63,-1.03l0.03,-0.23l-0.24,-0.88l0.69,-0.66l0.02,-0.41l-0.4,-0.46l0.58,-1.39l1.04,-1.71l1.97,0.16l0.32,-0.3l-0.12,-10.24l0.02,-0.8l2.59,-0.01l0.3,-0.3l0.0,-4.92l29.19,0.0l0.68,2.17l-0.4,0.35l-0.1,0.27l0.36,2.69l0.93,3.15l0.12,0.16l2.05,1.4l-0.99,1.15l-1.75,0.4l-0.15,0.08l-0.79,0.79l-0.08,0.17l-0.24,1.69l-1.07,3.75l-0.0,0.16l0.25,0.96l-0.38,2.1l-0.98,2.41l-1.52,1.3l-1.07,1.94l-0.25,0.99l-1.08,0.64l-0.13,0.18l-0.46,1.65Z\", \"name\": \"Sudan\"}, \"DO\": {\"path\": \"M241.7,234.97l0.15,-0.22l1.73,0.01l1.43,0.64l0.15,0.03l0.45,-0.04l0.36,0.74l0.28,0.17l1.02,-0.04l-0.04,0.43l0.27,0.33l1.03,0.09l0.91,0.7l-0.57,0.64l-0.99,-0.47l-0.16,-0.03l-1.11,0.11l-0.79,-0.12l-0.26,0.09l-0.38,0.4l-0.66,0.11l-0.28,-0.45l-0.38,-0.12l-0.83,0.37l-0.14,0.13l-0.85,1.49l-0.27,-0.17l-0.1,-0.58l0.05,-0.67l-0.07,-0.21l-0.44,-0.53l0.35,-0.25l0.12,-0.19l0.19,-1.0l-0.2,-1.4Z\", \"name\": \"Dominican Republic\"}, \"DJ\": {\"path\": \"M528.78,253.36l0.34,0.45l-0.06,0.76l-1.26,0.54l-0.05,0.53l0.82,0.53l-0.57,0.83l-0.3,-0.25l-0.27,-0.05l-0.56,0.17l-1.07,-0.03l-0.04,-0.56l-0.16,-0.56l0.76,-1.07l0.76,-0.97l0.89,0.18l0.25,-0.06l0.51,-0.42Z\", \"name\": \"Djibouti\"}, \"DK\": {\"path\": \"M452.4,129.07l-1.27,2.39l-2.25,-1.69l-0.26,-1.08l3.15,-1.0l0.63,1.39ZM447.87,126.25l-0.35,0.76l-0.47,-0.24l-0.38,0.09l-1.8,2.53l-0.03,0.29l0.56,1.4l-1.22,0.4l-1.68,-0.41l-0.92,-1.76l-0.07,-3.47l0.38,-0.88l0.62,-0.93l2.07,-0.21l0.19,-0.1l0.84,-0.95l1.5,-0.76l-0.06,1.26l-0.7,1.1l-0.03,0.25l0.3,1.0l0.18,0.19l1.06,0.42Z\", \"name\": \"Denmark\"}, \"DE\": {\"path\": \"M445.51,131.69l0.03,0.94l0.21,0.28l2.32,0.74l-0.02,1.0l0.37,0.3l2.55,-0.65l1.36,-0.89l2.63,1.27l1.09,1.01l0.51,1.51l-0.6,0.78l-0.0,0.36l0.88,1.17l0.58,1.68l-0.18,1.08l0.03,0.18l0.87,1.81l-0.66,0.2l-0.55,-0.32l-0.36,0.05l-0.58,0.58l-1.73,0.62l-0.99,0.84l-1.77,0.7l-0.16,0.4l0.42,0.94l0.26,1.34l0.14,0.2l1.25,0.76l1.22,1.2l-0.71,1.2l-0.81,0.37l-0.17,0.32l0.34,1.99l-0.04,0.09l-0.47,-0.39l-0.17,-0.07l-1.2,-0.1l-1.85,0.57l-2.15,-0.13l-0.29,0.18l-0.21,0.5l-0.96,-0.67l-0.24,-0.05l-0.67,0.16l-2.6,-0.94l-0.34,0.1l-0.42,0.57l-1.64,-0.02l0.26,-1.88l1.24,-2.15l-0.21,-0.45l-3.54,-0.58l-0.98,-0.71l0.12,-1.26l-0.05,-0.2l-0.44,-0.64l0.27,-2.18l-0.38,-3.14l1.17,-0.0l0.27,-0.17l0.63,-1.26l0.65,-3.17l-0.02,-0.17l-0.41,-1.0l0.32,-0.47l1.77,-0.16l0.37,0.6l0.47,0.06l1.7,-1.69l0.06,-0.33l-0.55,-1.24l-0.09,-1.51l1.5,0.36l0.16,-0.01l1.22,-0.4Z\", \"name\": \"Germany\"}, \"YE\": {\"path\": \"M553.53,242.65l-1.51,0.58l-0.17,0.16l-0.48,1.14l-0.07,0.79l-2.31,1.0l-3.98,1.19l-2.28,1.8l-0.97,0.12l-0.7,-0.14l-0.23,0.05l-1.42,1.03l-1.51,0.47l-2.07,0.13l-0.68,0.15l-0.17,0.1l-0.49,0.6l-0.57,0.16l-0.18,0.13l-0.3,0.49l-1.06,-0.05l-0.13,0.02l-0.73,0.32l-1.48,-0.11l-0.55,-1.26l0.07,-1.32l-0.04,-0.16l-0.39,-0.72l-0.48,-1.85l-0.52,-0.79l0.08,-0.02l0.22,-0.36l-0.23,-1.05l0.24,-0.39l0.04,-0.19l-0.09,-0.95l0.96,-0.72l0.11,-0.31l-0.23,-0.98l0.46,-0.88l0.75,0.49l0.26,0.03l0.63,-0.22l2.76,-0.06l0.5,0.25l2.42,0.26l0.85,-0.11l0.52,0.71l0.35,0.1l1.17,-0.43l0.15,-0.12l1.75,-2.64l2.22,-1.11l6.95,-0.96l2.55,5.58Z\", \"name\": \"Yemen\"}, \"AT\": {\"path\": \"M463.17,154.15l-0.14,0.99l-1.15,0.01l-0.24,0.47l0.39,0.56l-0.75,1.84l-0.36,0.4l-2.06,0.07l-0.14,0.04l-1.18,0.67l-1.96,-0.23l-3.43,-0.78l-0.5,-0.97l-0.33,-0.16l-2.47,0.55l-0.2,0.16l-0.18,0.37l-1.27,-0.38l-1.28,-0.09l-0.81,-0.41l0.25,-0.51l0.03,-0.18l-0.05,-0.28l0.35,-0.08l1.16,0.81l0.45,-0.13l0.27,-0.64l2.0,0.12l1.84,-0.57l1.05,0.09l0.71,0.59l0.47,-0.11l0.23,-0.54l0.02,-0.17l-0.32,-1.85l0.69,-0.31l0.13,-0.12l0.73,-1.23l1.61,0.89l0.35,-0.04l1.35,-1.27l0.7,-0.19l1.84,0.93l0.18,0.03l1.08,-0.15l0.81,0.43l-0.07,0.15l-0.02,0.2l0.24,1.06Z\", \"name\": \"Austria\"}, \"DZ\": {\"path\": \"M450.58,224.94l-8.31,4.86l-7.23,5.12l-3.46,1.13l-2.42,0.22l-0.02,-1.33l-0.2,-0.28l-1.15,-0.42l-1.45,-0.69l-0.55,-1.13l-0.1,-0.12l-8.45,-5.72l-17.72,-12.17l0.03,-0.38l-0.02,-3.21l3.84,-1.91l2.46,-0.41l2.1,-0.75l0.14,-0.11l0.9,-1.3l2.84,-1.06l0.19,-0.27l0.09,-1.81l1.21,-0.2l0.15,-0.07l1.06,-0.96l3.19,-0.46l0.23,-0.18l0.46,-1.08l-0.08,-0.34l-0.6,-0.54l-0.83,-2.85l-0.18,-1.8l-0.82,-1.57l2.13,-1.37l2.65,-0.49l0.13,-0.05l1.55,-1.15l2.34,-0.85l4.2,-0.51l4.07,-0.23l1.21,0.41l0.23,-0.01l2.3,-1.11l2.52,-0.02l0.94,0.62l0.2,0.05l1.25,-0.13l-0.36,1.03l-0.01,0.14l0.39,2.66l-0.56,2.2l-1.49,1.52l-0.08,0.24l0.22,2.12l0.11,0.2l1.94,1.58l0.02,0.54l0.12,0.23l1.45,1.06l1.04,4.85l0.81,2.42l0.13,1.19l-0.43,2.17l0.17,1.28l-0.31,1.53l0.2,1.56l-0.9,1.02l-0.01,0.38l1.43,1.88l0.09,1.06l0.04,0.13l0.89,1.48l0.37,0.12l1.03,-0.43l1.79,1.12l0.89,1.34Z\", \"name\": \"Algeria\"}, \"US\": {\"path\": \"M892.64,99.05l1.16,0.57l0.21,0.02l1.45,-0.38l1.92,0.99l2.17,0.47l-1.65,0.72l-1.75,-0.79l-0.93,-0.7l-0.21,-0.06l-2.11,0.22l-0.35,-0.2l0.09,-0.87ZM183.29,150.37l0.39,1.54l0.12,0.17l0.78,0.55l0.14,0.05l1.74,0.2l2.52,0.5l2.4,0.98l0.17,0.02l1.96,-0.4l3.01,0.81l0.91,-0.02l2.22,-0.88l4.67,2.33l3.86,2.01l0.21,0.71l0.15,0.18l0.33,0.17l-0.02,0.05l0.23,0.43l0.67,0.1l0.21,-0.05l0.1,-0.07l0.05,0.29l0.09,0.16l0.5,0.5l0.21,0.09l0.56,0.0l0.13,0.13l-0.2,0.36l0.12,0.41l2.49,1.39l0.99,5.24l-0.69,1.68l-1.16,1.64l-0.6,1.18l-0.06,0.31l0.04,0.22l0.28,0.43l0.11,0.1l0.85,0.47l0.15,0.04l0.63,0.0l0.14,-0.04l2.87,-1.58l2.6,-0.49l3.28,-1.5l0.17,-0.23l0.04,-0.43l-0.23,-0.93l-0.24,-0.39l0.74,-0.32l4.7,-0.01l0.25,-0.13l0.77,-1.15l2.9,-2.41l1.04,-0.52l8.35,-0.02l0.28,-0.21l0.2,-0.6l0.7,-0.14l1.06,-0.48l0.13,-0.11l0.92,-1.49l0.75,-2.39l1.67,-2.08l0.59,0.6l0.3,0.07l1.52,-0.49l0.88,0.72l-0.0,4.14l0.08,0.2l1.6,1.72l0.31,0.72l-2.42,1.35l-2.55,1.05l-2.64,0.9l-0.14,0.11l-1.33,1.81l-0.44,0.7l-0.05,0.15l-0.03,1.6l0.03,0.14l0.83,1.59l0.24,0.16l0.78,0.06l-1.15,0.33l-1.25,-0.04l-1.83,0.52l-2.51,0.29l-2.17,0.88l-0.17,0.36l0.33,0.22l3.55,-0.54l0.15,0.11l-2.87,0.73l-1.19,0.0l-0.16,-0.33l-0.36,0.06l-0.76,0.82l0.17,0.5l0.42,0.08l-0.45,1.75l-1.4,1.74l-0.04,-0.17l-0.21,-0.22l-0.48,-0.13l-0.77,-0.69l-0.36,-0.03l-0.12,0.34l0.52,1.58l0.09,0.14l0.52,0.43l0.03,0.87l-0.74,1.05l-0.39,0.63l0.05,-0.12l-0.08,-0.34l-1.19,-1.03l-0.28,-2.31l-0.26,-0.26l-0.32,0.19l-0.48,1.27l-0.01,0.19l0.39,1.33l-1.14,-0.31l-0.36,0.18l0.14,0.38l1.57,0.85l0.1,2.58l0.22,0.28l0.55,0.15l0.21,0.81l0.33,2.72l-1.46,1.94l-2.5,0.81l-0.12,0.07l-1.58,1.58l-1.15,0.17l-0.15,0.06l-1.27,1.03l-0.09,0.13l-0.32,0.85l-2.71,1.79l-1.45,1.37l-1.18,1.64l-0.05,0.12l-0.39,1.96l0.0,0.13l0.44,1.91l0.85,2.37l1.1,1.91l0.03,1.2l1.16,3.07l-0.08,1.74l-0.1,0.99l-0.57,1.48l-0.54,0.24l-0.97,-0.26l-0.34,-1.02l-0.12,-0.16l-0.89,-0.58l-2.44,-4.28l-0.34,-0.94l0.49,-1.71l-0.02,-0.21l-0.7,-1.5l-2.0,-2.35l-0.11,-0.08l-0.98,-0.42l-0.25,0.01l-2.42,1.19l-0.26,-0.08l-1.26,-1.29l-1.57,-0.68l-0.16,-0.02l-2.79,0.34l-2.18,-0.3l-1.98,0.19l-1.12,0.45l-0.14,0.44l0.4,0.65l-0.04,1.02l0.09,0.22l0.29,0.3l-0.06,0.05l-0.77,-0.33l-0.26,0.01l-0.87,0.48l-1.64,-0.08l-1.79,-1.39l-0.23,-0.06l-2.11,0.33l-1.75,-0.61l-0.14,-0.01l-1.61,0.2l-2.11,0.64l-0.11,0.06l-2.25,1.99l-2.53,1.21l-1.43,1.38l-0.58,1.22l-0.03,0.12l-0.03,1.86l0.13,1.32l0.3,0.62l-0.46,0.04l-1.71,-0.57l-1.85,-0.79l-0.63,-1.14l-0.54,-1.85l-0.07,-0.12l-1.45,-1.51l-0.86,-1.58l-1.26,-1.87l-0.09,-0.09l-1.76,-1.09l-0.17,-0.04l-2.05,0.05l-0.23,0.12l-1.44,1.97l-1.84,-0.72l-1.19,-0.76l-0.6,-1.45l-0.9,-1.52l-1.49,-1.21l-1.27,-0.87l-0.89,-0.96l-0.22,-0.1l-4.34,-0.0l-0.3,0.3l-0.0,0.84l-6.62,0.02l-5.66,-1.93l-3.48,-1.24l0.11,-0.25l-0.3,-0.42l-3.18,0.3l-2.6,0.2l-0.35,-1.19l-0.08,-0.13l-1.62,-1.61l-0.13,-0.08l-1.02,-0.29l-0.22,-0.66l-0.25,-0.2l-1.31,-0.13l-0.82,-0.7l-0.16,-0.07l-2.25,-0.27l-0.48,-0.34l-0.28,-1.44l-0.07,-0.14l-2.41,-2.84l-2.03,-3.89l0.08,-0.58l-0.1,-0.27l-1.08,-0.94l-1.87,-2.36l-0.33,-2.31l-0.07,-0.15l-1.24,-1.5l0.52,-2.4l-0.09,-2.57l-0.78,-2.3l0.96,-2.83l0.61,-5.66l-0.46,-4.26l-0.79,-2.71l-0.68,-1.4l0.13,-0.26l3.24,0.97l1.28,2.88l0.52,0.06l0.62,-0.84l0.06,-0.22l-0.4,-2.61l-0.74,-2.29l68.9,-0.0l0.3,-0.3l0.01,-0.95l0.32,-0.01ZM32.5,67.43l1.75,1.99l0.41,0.04l1.02,-0.81l3.79,0.25l-0.1,0.72l0.24,0.34l3.83,0.77l2.6,-0.44l5.21,1.41l4.84,0.43l1.9,0.57l0.15,0.01l3.25,-0.71l3.72,1.32l2.52,0.58l-0.03,38.14l0.29,0.3l2.41,0.11l2.34,1.0l1.7,1.59l2.22,2.42l0.42,0.03l2.41,-2.04l2.25,-1.08l1.23,1.76l1.71,1.53l2.24,1.62l1.54,2.56l2.56,4.09l0.11,0.11l4.1,2.17l0.06,1.93l-1.12,1.35l-1.22,-1.14l-2.08,-1.05l-0.68,-2.94l-0.09,-0.16l-3.18,-2.84l-1.32,-3.35l-0.25,-0.19l-2.43,-0.24l-3.93,-0.09l-2.85,-1.02l-5.24,-3.85l-6.77,-2.04l-3.52,0.3l-4.84,-1.7l-2.96,-1.6l-0.23,-0.02l-2.78,0.8l-0.21,0.35l0.46,2.31l-1.11,0.19l-2.9,0.78l-2.24,1.26l-2.42,0.68l-0.29,-1.79l1.07,-3.49l2.54,-1.11l0.12,-0.45l-0.69,-0.96l-0.41,-0.07l-3.19,2.12l-1.76,2.54l-3.57,2.62l-0.03,0.46l1.63,1.59l-2.14,2.38l-2.64,1.49l-2.49,1.09l-0.16,0.17l-0.58,1.48l-3.8,1.79l-0.14,0.14l-0.75,1.57l-2.75,1.41l-1.62,-0.25l-0.16,0.02l-2.35,0.98l-2.54,1.19l-2.06,1.15l-4.05,0.93l-0.1,-0.15l2.45,-1.45l2.49,-1.1l2.61,-1.88l3.03,-0.39l0.19,-0.1l1.2,-1.41l3.43,-2.11l0.61,-0.75l1.81,-1.24l0.13,-0.2l0.42,-2.7l1.24,-2.12l-0.03,-0.35l-0.34,-0.09l-2.73,1.05l-0.67,-0.53l-0.39,0.02l-1.13,1.11l-1.43,-1.62l-0.49,0.06l-0.41,0.8l-0.67,-1.31l-0.42,-0.12l-2.43,1.43l-1.18,-0.0l-0.18,-1.86l0.43,-1.3l-0.09,-0.33l-1.61,-1.33l-0.26,-0.06l-3.11,0.68l-2.0,-1.66l-1.61,-0.85l-0.01,-1.97l-0.11,-0.23l-1.76,-1.48l0.86,-1.96l2.01,-2.13l0.88,-1.94l1.79,-0.25l1.65,0.6l0.31,-0.06l1.91,-1.8l1.67,0.31l0.22,-0.04l1.91,-1.23l0.13,-0.33l-0.47,-1.82l-0.15,-0.19l-1.0,-0.52l1.51,-1.27l0.09,-0.34l-0.29,-0.19l-1.62,0.06l-2.66,0.88l-0.13,0.09l-0.62,0.72l-1.77,-0.8l-0.16,-0.02l-3.48,0.44l-3.5,-0.92l-1.06,-1.61l-2.78,-2.09l3.07,-1.51l5.52,-2.01l1.65,0.0l-0.28,1.73l0.31,0.35l5.29,-0.16l0.23,-0.49l-2.03,-2.59l-0.1,-0.08l-3.03,-1.58l-1.79,-2.12l-2.4,-1.83l-3.18,-1.27l1.13,-1.84l4.28,-0.14l0.15,-0.05l3.16,-2.0l0.13,-0.17l0.57,-2.07l2.43,-2.02l2.42,-0.52l4.67,-1.98l2.22,0.29l0.2,-0.04l3.74,-2.37l3.57,0.91ZM37.66,123.49l-2.31,1.26l-1.04,-0.75l-0.31,-1.35l2.06,-1.16l1.24,-0.51l1.48,0.22l0.76,0.81l-1.89,1.49ZM30.89,233.84l1.2,0.57l0.35,0.3l0.48,0.69l-1.6,0.86l-0.3,0.31l-0.24,-0.14l0.05,-0.54l-0.02,-0.15l-0.36,-0.83l0.05,-0.12l0.39,-0.38l0.07,-0.31l-0.09,-0.27ZM29.06,231.89l0.5,0.14l0.31,0.19l-0.46,0.1l-0.34,-0.43ZM25.02,230.13l0.2,-0.11l0.4,0.47l-0.43,-0.05l-0.17,-0.31ZM21.29,228.68l0.1,-0.07l0.22,0.02l0.02,0.21l-0.02,0.02l-0.32,-0.18ZM6.0,113.33l-1.19,0.45l-1.5,-0.64l-0.94,-0.63l1.76,-0.46l1.71,0.29l0.16,0.98Z\", \"name\": \"United States of America\"}, \"LV\": {\"path\": \"M473.99,127.16l0.07,-2.15l1.15,-2.11l2.05,-1.07l1.84,2.48l0.25,0.12l2.01,-0.07l0.29,-0.25l0.45,-2.58l1.85,-0.56l0.98,0.4l2.13,1.33l0.16,0.05l1.97,0.01l1.02,0.7l0.21,1.67l0.71,1.84l-2.44,1.23l-1.36,0.53l-2.28,-1.62l-0.12,-0.05l-1.18,-0.2l-0.28,-0.6l-0.31,-0.17l-2.43,0.35l-4.17,-0.23l-0.12,0.02l-2.45,0.93Z\", \"name\": \"Latvia\"}, \"UY\": {\"path\": \"M276.9,363.17l1.3,-0.23l2.4,2.04l0.22,0.07l0.82,-0.07l2.48,1.7l1.93,1.5l1.28,1.67l-0.95,1.14l-0.04,0.31l0.63,1.45l-0.96,1.57l-2.65,1.47l-1.73,-0.53l-0.15,-0.01l-1.25,0.28l-2.22,-1.16l-0.16,-0.03l-1.56,0.08l-1.33,-1.36l0.17,-1.58l0.48,-0.55l0.07,-0.2l-0.02,-2.74l0.66,-2.8l0.57,-2.02Z\", \"name\": \"Uruguay\"}, \"LB\": {\"path\": \"M510.44,198.11l-0.48,0.03l-0.26,0.17l-0.15,0.32l-0.21,-0.0l0.72,-1.85l1.19,-1.9l0.74,0.09l0.27,0.73l-1.19,0.93l-0.09,0.13l-0.54,1.36Z\", \"name\": \"Lebanon\"}, \"LA\": {\"path\": \"M684.87,248.8l0.61,-0.86l0.05,-0.16l0.11,-2.17l-0.08,-0.22l-1.96,-2.16l-0.15,-2.44l-0.08,-0.18l-1.9,-2.1l-0.19,-0.1l-1.89,-0.18l-0.29,0.15l-0.42,0.76l-1.21,0.06l-0.67,-0.41l-0.31,-0.0l-2.2,1.29l-0.05,-1.77l0.61,-2.7l-0.27,-0.37l-1.44,-0.1l-0.12,-1.31l-0.12,-0.21l-0.87,-0.65l0.38,-0.68l1.76,-1.41l0.08,0.22l0.27,0.2l1.33,0.07l0.31,-0.34l-0.35,-2.75l0.85,-0.25l1.32,1.88l1.11,2.36l0.27,0.17l2.89,0.02l0.78,1.82l-1.32,0.56l-0.12,0.09l-0.72,0.93l0.1,0.45l2.93,1.52l3.62,5.27l1.88,1.78l0.58,1.67l-0.38,2.11l-1.87,-0.79l-0.37,0.11l-0.99,1.54l-1.51,-0.73Z\", \"name\": \"Laos\"}, \"TW\": {\"path\": \"M725.6,222.5l-1.5,4.22l-0.82,1.65l-1.01,-1.7l-0.26,-1.8l1.4,-2.48l1.8,-1.81l0.76,0.53l-0.38,1.39Z\", \"name\": \"Taiwan\"}, \"TT\": {\"path\": \"M266.35,259.46l0.41,-0.39l0.09,-0.23l-0.04,-0.75l1.14,-0.26l0.2,0.03l-0.07,1.37l-1.73,0.23Z\", \"name\": \"Trinidad and Tobago\"}, \"TR\": {\"path\": \"M513.25,175.38l3.63,1.17l0.14,0.01l2.88,-0.45l2.11,0.26l0.18,-0.03l2.9,-1.53l2.51,-0.13l2.25,1.37l0.36,0.88l-0.23,1.36l0.19,0.33l1.81,0.72l0.61,0.53l-1.31,0.64l-0.16,0.34l0.76,3.24l-0.44,0.8l0.01,0.3l1.19,2.02l-0.71,0.29l-0.74,-0.62l-0.15,-0.07l-2.91,-0.37l-0.15,0.02l-1.04,0.43l-2.78,0.44l-1.44,-0.03l-2.83,1.06l-1.95,0.01l-1.28,-0.52l-0.2,-0.01l-2.62,0.76l-0.7,-0.48l-0.47,0.22l-0.13,1.49l-1.01,0.94l-0.58,-0.82l0.79,-0.9l0.04,-0.34l-0.31,-0.15l-1.46,0.23l-2.03,-0.64l-0.3,0.07l-1.65,1.58l-3.58,0.3l-1.94,-1.47l-0.17,-0.06l-2.7,-0.1l-0.28,0.17l-0.51,1.06l-1.47,0.29l-2.32,-1.46l-0.17,-0.05l-2.55,0.05l-1.4,-2.7l-1.72,-1.54l1.11,-2.06l-0.07,-0.37l-1.35,-1.19l2.47,-2.51l3.74,-0.11l0.26,-0.17l0.96,-2.07l4.56,0.38l0.19,-0.05l2.97,-1.92l2.84,-0.83l4.03,-0.06l4.31,2.08ZM488.85,176.8l-1.81,1.38l-0.57,-1.01l0.02,-0.36l0.45,-0.25l0.13,-0.15l0.78,-1.87l-0.11,-0.37l-0.72,-0.47l1.91,-0.71l1.89,0.35l0.25,0.97l0.17,0.2l1.87,0.83l-0.19,0.31l-2.82,0.16l-0.18,0.07l-1.06,0.91Z\", \"name\": \"Turkey\"}, \"LK\": {\"path\": \"M625.44,266.07l-0.35,2.4l-0.9,0.61l-1.91,0.5l-1.04,-1.75l-0.43,-3.5l1.0,-3.6l1.34,1.09l1.13,1.72l1.16,2.52Z\", \"name\": \"Sri Lanka\"}, \"TN\": {\"path\": \"M444.91,206.18l-0.99,-4.57l-0.12,-0.18l-1.43,-1.04l-0.02,-0.53l-0.11,-0.22l-1.95,-1.59l-0.19,-1.85l1.44,-1.47l0.08,-0.14l0.59,-2.34l-0.38,-2.77l0.44,-1.28l2.52,-1.08l1.41,0.28l-0.06,1.2l0.43,0.28l1.81,-0.9l0.02,0.06l-1.14,1.28l-0.08,0.2l-0.02,1.32l0.11,0.24l0.74,0.6l-0.29,2.18l-1.56,1.35l-0.09,0.32l0.48,1.54l0.28,0.21l1.11,0.04l0.55,1.17l0.15,0.14l0.76,0.35l-0.12,1.79l-1.1,0.72l-0.8,0.91l-1.68,1.04l-0.13,0.32l0.25,1.08l-0.18,0.96l-0.74,0.39Z\", \"name\": \"Tunisia\"}, \"TL\": {\"path\": \"M734.21,307.22l0.17,-0.34l1.99,-0.52l1.72,-0.08l0.78,-0.3l0.29,0.1l-0.43,0.32l-2.57,1.09l-1.71,0.59l-0.05,-0.49l-0.19,-0.36Z\", \"name\": \"East Timor\"}, \"TM\": {\"path\": \"M553.16,173.51l-0.12,1.0l-0.26,-0.65l0.38,-0.34ZM553.54,173.16l0.13,-0.12l0.43,-0.09l-0.56,0.21ZM555.68,172.6l0.65,-0.14l1.53,0.76l1.71,2.29l0.27,0.12l1.27,-0.14l2.81,-0.04l0.29,-0.38l-0.35,-1.27l1.98,-0.97l1.96,-1.63l3.05,1.44l0.25,2.23l0.14,0.22l0.96,0.61l0.18,0.05l2.61,-0.13l0.68,0.44l1.2,2.97l0.1,0.13l2.85,2.03l1.67,1.41l2.66,1.45l3.13,1.17l-0.05,1.23l-0.36,-0.04l-1.12,-0.73l-0.44,0.14l-0.34,0.89l-1.96,0.52l-0.22,0.23l-0.47,2.17l-1.26,0.78l-1.93,0.42l-0.21,0.18l-0.46,1.14l-1.64,0.33l-2.3,-0.97l-0.2,-2.23l-0.28,-0.27l-1.76,-0.1l-2.78,-2.48l-0.15,-0.07l-1.95,-0.31l-2.82,-1.48l-1.78,-0.27l-0.18,0.03l-1.03,0.51l-1.6,-0.08l-0.22,0.08l-1.72,1.6l-1.83,0.46l-0.39,-1.7l0.36,-3.0l-0.16,-0.3l-1.73,-0.88l0.57,-1.77l-0.25,-0.39l-1.33,-0.14l0.41,-1.85l2.05,0.63l0.21,-0.01l2.2,-0.95l0.09,-0.49l-1.78,-1.75l-0.69,-1.66l-0.07,-0.03Z\", \"name\": \"Turkmenistan\"}, \"TJ\": {\"path\": \"M597.99,178.71l-0.23,0.23l-2.57,-0.47l-0.35,0.25l-0.24,1.7l0.32,0.34l2.66,-0.22l3.15,0.95l4.47,-0.42l0.58,2.45l0.39,0.21l0.71,-0.25l1.22,0.53l-0.06,1.01l0.29,1.28l-2.19,-0.0l-1.71,-0.21l-0.23,0.07l-1.51,1.25l-1.05,0.27l-0.77,0.51l-0.71,-0.67l0.22,-2.28l-0.24,-0.32l-0.43,-0.08l0.17,-0.57l-0.16,-0.36l-1.36,-0.66l-0.34,0.05l-1.08,1.01l-0.09,0.15l-0.25,1.09l-0.24,0.26l-1.36,-0.05l-0.27,0.14l-0.65,1.06l-0.58,-0.39l-0.3,-0.02l-1.68,0.86l-0.36,-0.16l1.28,-2.65l0.02,-0.2l-0.54,-2.17l-0.18,-0.21l-1.53,-0.58l0.41,-0.82l1.89,0.13l0.26,-0.12l1.19,-1.63l0.77,-1.82l2.66,-0.55l-0.33,0.87l0.01,0.23l0.36,0.82l0.3,0.18l0.23,-0.02Z\", \"name\": \"Tajikistan\"}, \"LS\": {\"path\": \"M493.32,359.69l0.69,0.65l-0.65,1.12l-0.38,0.8l-1.27,0.39l-0.18,0.15l-0.4,0.77l-0.59,0.18l-1.59,-1.78l1.16,-1.5l1.3,-1.02l0.97,-0.46l0.94,0.72Z\", \"name\": \"Lesotho\"}, \"TH\": {\"path\": \"M677.42,253.68l-1.7,-0.88l-0.14,-0.03l-1.77,0.04l0.3,-1.64l-0.3,-0.35l-2.21,0.01l-0.3,0.28l-0.2,2.76l-2.15,5.9l-0.02,0.13l0.17,1.83l0.28,0.27l1.45,0.07l0.93,2.1l0.44,2.15l0.08,0.15l1.4,1.44l0.16,0.09l1.43,0.27l1.04,1.05l-0.58,0.73l-1.24,0.22l-0.15,-0.99l-0.15,-0.22l-2.04,-1.1l-0.36,0.06l-0.23,0.23l-0.72,-0.71l-0.41,-1.18l-0.06,-0.11l-1.33,-1.42l-1.22,-1.2l-0.5,0.13l-0.15,0.54l-0.14,-0.41l0.26,-1.48l0.73,-2.38l1.2,-2.57l1.37,-2.35l0.02,-0.27l-0.95,-2.26l0.03,-1.19l-0.29,-1.42l-0.06,-0.13l-1.65,-2.0l-0.46,-0.99l0.62,-0.34l0.13,-0.15l0.92,-2.23l-0.02,-0.27l-1.05,-1.74l-1.57,-1.86l-1.04,-1.96l0.76,-0.34l0.16,-0.16l1.07,-2.63l1.58,-0.1l0.16,-0.06l1.43,-1.11l1.24,-0.52l0.84,0.62l0.13,1.43l0.28,0.27l1.34,0.09l-0.54,2.39l0.05,2.39l0.45,0.25l2.48,-1.45l0.6,0.36l0.17,0.04l1.47,-0.07l0.25,-0.15l0.41,-0.73l1.58,0.15l1.76,1.93l0.15,2.44l0.08,0.18l1.94,2.15l-0.1,1.96l-0.66,0.93l-2.25,-0.34l-3.24,0.49l-0.19,0.12l-1.6,2.12l-0.06,0.24l0.48,2.46Z\", \"name\": \"Thailand\"}, \"TF\": {\"path\": \"M593.76,417.73l1.38,0.84l2.15,0.37l0.04,0.31l-0.59,1.24l-3.36,0.19l-0.05,-1.38l0.43,-1.56Z\", \"name\": \"French Southern and Antarctic Lands\"}, \"TG\": {\"path\": \"M425.23,269.29l-1.49,0.4l-0.43,-0.68l-0.64,-1.54l-0.18,-1.16l0.54,-2.21l-0.04,-0.24l-0.59,-0.86l-0.23,-1.9l0.0,-1.82l-0.07,-0.19l-0.95,-1.19l0.1,-0.41l1.58,0.04l-0.23,0.97l0.08,0.28l1.55,1.55l0.09,1.13l0.08,0.19l0.42,0.43l-0.11,5.66l0.52,1.53Z\", \"name\": \"Togo\"}, \"TD\": {\"path\": \"M457.57,252.46l0.23,-1.08l-0.28,-0.36l-1.32,-0.05l0.0,-1.35l-0.1,-0.22l-0.9,-0.82l0.99,-3.1l3.12,-2.37l0.12,-0.23l0.13,-3.33l0.95,-5.2l0.53,-1.09l-0.07,-0.36l-0.94,-0.81l-0.03,-0.7l-0.12,-0.23l-0.84,-0.61l-0.57,-3.76l2.21,-1.26l19.67,9.88l0.12,9.74l-1.83,-0.15l-0.28,0.14l-1.14,1.89l-0.68,1.62l0.05,0.31l0.33,0.38l-0.61,0.58l-0.08,0.3l0.25,0.93l-0.58,0.95l-0.29,1.01l0.34,0.37l0.67,-0.11l0.39,0.73l0.03,1.4l0.11,0.23l0.8,0.65l-0.01,0.24l-1.38,0.37l-0.11,0.06l-1.27,1.03l-1.83,2.76l-2.21,1.1l-2.34,-0.15l-0.82,0.25l-0.2,0.37l0.19,0.68l-1.16,0.79l-1.01,0.94l-2.92,0.89l-0.5,-0.46l-0.17,-0.08l-0.41,-0.05l-0.28,0.12l-0.38,0.54l-1.36,0.12l0.1,-0.18l0.01,-0.27l-0.78,-1.72l-0.35,-1.03l-0.17,-0.18l-1.03,-0.41l-1.29,-1.28l0.36,-0.78l0.9,0.2l0.14,-0.0l0.67,-0.17l1.36,0.02l0.26,-0.45l-1.32,-2.22l0.09,-1.64l-0.17,-1.68l-0.04,-0.13l-0.93,-1.53Z\", \"name\": \"Chad\"}, \"LY\": {\"path\": \"M457.99,226.38l-1.57,0.87l-1.25,-1.28l-0.13,-0.08l-3.85,-1.11l-1.04,-1.57l-0.09,-0.09l-1.98,-1.23l-0.27,-0.02l-0.93,0.39l-0.72,-1.2l-0.09,-1.07l-0.06,-0.16l-1.33,-1.75l0.83,-0.94l0.07,-0.24l-0.21,-1.64l0.31,-1.43l-0.17,-1.29l0.43,-2.26l-0.15,-1.33l-0.73,-2.18l0.99,-0.52l0.16,-0.21l0.22,-1.16l-0.22,-1.06l1.54,-0.95l0.81,-0.92l1.19,-0.78l0.14,-0.23l0.12,-1.76l2.57,0.84l0.16,0.01l0.99,-0.23l2.01,0.45l3.19,1.2l1.12,2.36l0.2,0.16l2.24,0.53l3.5,1.14l2.65,1.36l0.29,-0.01l1.22,-0.71l1.27,-1.32l0.07,-0.29l-0.55,-2.0l0.69,-1.19l1.7,-1.23l1.61,-0.35l3.2,0.54l0.78,1.14l0.24,0.13l0.85,0.01l0.84,0.47l2.35,0.31l0.42,0.63l-0.79,1.16l-0.04,0.26l0.35,1.08l-0.61,1.6l-0.0,0.2l0.73,2.16l0.0,24.24l-2.58,0.01l-0.3,0.29l-0.02,0.62l-19.55,-9.83l-0.28,0.01l-2.53,1.44Z\", \"name\": \"Libya\"}, \"AE\": {\"path\": \"M550.59,223.8l0.12,0.08l1.92,-0.41l3.54,0.15l0.23,-0.09l1.71,-1.79l1.86,-1.7l1.31,-1.36l0.26,0.5l0.28,1.72l-0.93,0.01l-0.3,0.26l-0.21,1.73l0.11,0.27l0.08,0.06l-0.7,0.32l-0.17,0.27l-0.01,0.99l-0.68,1.02l-0.05,0.15l-0.06,0.96l-0.32,0.36l-7.19,-1.27l-0.79,-2.22Z\", \"name\": \"United Arab Emirates\"}, \"VE\": {\"path\": \"M240.66,256.5l0.65,0.91l-0.03,1.13l-1.05,1.39l-0.03,0.31l0.95,2.0l0.32,0.17l1.08,-0.16l0.24,-0.21l0.56,-1.83l-0.06,-0.29l-0.71,-0.81l-0.1,-1.58l2.9,-0.96l0.19,-0.37l-0.29,-1.02l0.45,-0.41l0.72,1.43l0.26,0.16l1.65,0.04l1.46,1.27l0.08,0.72l0.3,0.27l2.28,0.02l2.55,-0.25l1.34,1.06l0.14,0.06l1.92,0.31l0.2,-0.03l1.4,-0.79l0.15,-0.25l0.02,-0.36l2.82,-0.14l1.17,-0.01l-0.41,0.14l-0.14,0.46l0.86,1.19l0.22,0.12l1.93,0.18l1.73,1.13l0.37,1.9l0.31,0.24l1.21,-0.05l0.52,0.32l-1.63,1.21l-0.11,0.17l-0.22,0.92l0.07,0.27l0.63,0.69l-0.31,0.24l-1.48,0.39l-0.22,0.3l0.04,1.03l-0.59,0.6l-0.01,0.41l1.67,1.87l0.23,0.48l-0.72,0.76l-2.71,0.91l-1.78,0.39l-0.13,0.06l-0.6,0.49l-1.84,-0.58l-1.89,-0.33l-0.18,0.03l-0.47,0.23l-0.02,0.53l0.96,0.56l-0.08,1.58l0.35,1.58l0.26,0.23l1.91,0.19l0.02,0.07l-1.54,0.62l-0.18,0.2l-0.25,0.92l-0.88,0.35l-1.85,0.58l-0.16,0.13l-0.4,0.64l-1.66,0.14l-1.22,-1.18l-0.79,-2.52l-0.67,-0.88l-0.66,-0.43l0.99,-0.98l0.09,-0.26l-0.09,-0.56l-0.08,-0.16l-0.66,-0.69l-0.47,-1.54l0.18,-1.67l0.55,-0.85l0.45,-1.35l-0.15,-0.36l-0.89,-0.43l-0.19,-0.02l-1.39,0.28l-1.76,-0.13l-0.92,0.23l-1.64,-2.01l-0.17,-0.1l-1.54,-0.33l-3.05,0.23l-0.5,-0.73l-0.15,-0.12l-0.45,-0.15l-0.05,-0.28l0.28,-0.86l0.01,-0.15l-0.2,-1.01l-0.08,-0.15l-0.5,-0.5l-0.3,-1.08l-0.25,-0.22l-0.89,-0.12l0.54,-1.18l0.29,-1.73l0.66,-0.85l0.94,-0.7l0.09,-0.11l0.3,-0.6Z\", \"name\": \"Venezuela\"}, \"AF\": {\"path\": \"M574.42,192.1l2.24,0.95l0.18,0.02l1.89,-0.38l0.22,-0.18l0.46,-1.14l1.82,-0.4l1.5,-0.91l0.14,-0.19l0.46,-2.12l1.93,-0.51l0.2,-0.18l0.26,-0.68l0.87,0.57l0.13,0.05l0.79,0.09l1.35,0.02l1.83,0.59l0.75,0.34l0.26,-0.01l1.66,-0.85l0.7,0.46l0.42,-0.09l0.72,-1.17l1.32,0.05l0.23,-0.1l0.39,-0.43l0.07,-0.14l0.24,-1.08l0.86,-0.81l0.94,0.46l-0.2,0.64l0.23,0.38l0.49,0.09l-0.21,2.15l0.09,0.25l0.99,0.94l0.38,0.03l0.83,-0.57l1.06,-0.27l0.12,-0.06l1.46,-1.21l1.63,0.2l2.4,0.0l0.17,0.32l-1.12,0.25l-1.23,0.52l-2.86,0.33l-2.69,0.6l-0.13,0.06l-1.46,1.25l-0.07,0.36l0.58,1.18l0.25,1.21l-1.13,1.08l-0.09,0.25l0.09,0.98l-0.53,0.79l-2.22,-0.08l-0.28,0.44l0.83,1.57l-1.3,0.58l-0.13,0.11l-1.06,1.69l-0.05,0.18l0.13,1.51l-0.73,0.58l-0.78,-0.22l-0.14,-0.01l-1.91,0.36l-0.23,0.19l-0.2,0.57l-1.65,-0.0l-0.22,0.1l-1.4,1.56l-0.08,0.19l-0.08,2.13l-2.99,1.05l-1.67,-0.23l-0.27,0.1l-0.39,0.46l-1.43,-0.31l-2.43,0.4l-3.69,-1.23l1.96,-2.15l0.08,-0.24l-0.21,-1.78l-0.23,-0.26l-1.69,-0.42l-0.19,-1.62l-0.77,-2.08l0.98,-1.41l-0.14,-0.45l-0.82,-0.31l0.6,-1.79l0.93,-3.21Z\", \"name\": \"Afghanistan\"}, \"IQ\": {\"path\": \"M534.42,190.89l0.13,0.14l1.5,0.78l0.15,1.34l-1.13,0.87l-0.11,0.16l-0.58,2.2l0.04,0.24l1.73,2.67l0.12,0.1l2.99,1.49l1.18,1.94l-0.39,1.89l0.29,0.36l0.5,-0.0l0.02,1.17l0.08,0.2l0.83,0.86l-2.36,-0.29l-0.29,0.13l-1.74,2.49l-4.4,-0.21l-7.03,-5.49l-3.73,-1.94l-2.92,-0.74l-0.89,-3.0l5.33,-2.81l0.15,-0.19l0.95,-3.43l-0.2,-2.0l1.19,-0.61l0.11,-0.09l1.23,-1.73l0.92,-0.38l2.75,0.35l0.81,0.68l0.31,0.05l0.94,-0.38l1.5,3.17Z\", \"name\": \"Iraq\"}, \"IS\": {\"path\": \"M384.26,87.96l-0.51,2.35l0.08,0.28l2.61,2.58l-2.99,2.83l-7.16,2.72l-2.08,0.7l-9.51,-1.71l1.89,-1.36l-0.07,-0.53l-4.4,-1.59l3.33,-0.59l0.25,-0.32l-0.11,-1.2l-0.25,-0.27l-4.82,-0.88l1.38,-2.2l3.54,-0.57l3.8,2.74l0.33,0.01l3.68,-2.18l3.02,1.12l0.25,-0.02l4.01,-2.18l3.72,0.27Z\", \"name\": \"Iceland\"}, \"IR\": {\"path\": \"M556.2,187.5l2.05,-0.52l0.13,-0.07l1.69,-1.57l1.55,0.08l0.15,-0.03l1.02,-0.5l1.64,0.25l2.82,1.48l1.91,0.3l2.8,2.49l0.18,0.08l1.61,0.09l0.19,2.09l-1.0,3.47l-0.69,2.04l0.18,0.38l0.73,0.28l-0.85,1.22l-0.04,0.28l0.81,2.19l0.19,1.72l0.23,0.26l1.69,0.42l0.17,1.43l-2.18,2.39l-0.01,0.4l1.22,1.42l1.0,1.62l0.12,0.11l2.23,1.11l0.06,2.2l0.2,0.27l1.03,0.38l0.14,0.83l-3.38,1.3l-0.18,0.19l-0.87,2.85l-4.44,-0.76l-2.75,-0.62l-2.64,-0.32l-1.01,-3.11l-0.17,-0.19l-1.2,-0.48l-0.18,-0.01l-1.99,0.51l-2.42,1.25l-2.89,-0.84l-2.48,-2.03l-2.41,-0.79l-1.61,-2.47l-1.84,-3.63l-0.36,-0.15l-1.22,0.4l-1.48,-0.84l-0.37,0.06l-0.72,0.82l-1.08,-1.12l-0.02,-1.35l-0.3,-0.29l-0.43,0.0l0.34,-1.64l-0.04,-0.22l-1.29,-2.11l-0.12,-0.11l-3.0,-1.49l-1.62,-2.49l0.52,-1.98l1.18,-0.92l0.11,-0.27l-0.19,-1.66l-0.16,-0.23l-1.55,-0.81l-1.58,-3.33l-1.3,-2.2l0.41,-0.75l0.03,-0.21l-0.73,-3.12l1.2,-0.59l0.35,0.9l1.26,1.35l0.15,0.09l1.81,0.39l0.91,-0.09l0.15,-0.06l2.9,-2.13l0.7,-0.16l0.48,0.56l-0.75,1.26l0.05,0.37l1.56,1.53l0.28,0.08l0.37,-0.09l0.7,1.89l0.21,0.19l2.31,0.59l1.69,1.4l0.15,0.07l3.66,0.49l3.91,-0.76l0.23,-0.19l0.19,-0.52Z\", \"name\": \"Iran\"}, \"AM\": {\"path\": \"M530.51,176.08l2.91,-0.39l0.41,0.63l0.11,0.1l0.66,0.36l-0.32,0.47l0.07,0.41l1.1,0.84l-0.53,0.7l0.06,0.42l1.06,0.8l1.01,0.44l0.04,1.56l-0.44,0.04l-0.88,-1.46l0.01,-0.37l-0.3,-0.31l-0.98,0.01l-0.65,-0.69l-0.26,-0.09l-0.38,0.06l-0.97,-0.82l-1.64,-0.65l0.2,-1.2l-0.02,-0.16l-0.28,-0.69Z\", \"name\": \"Armenia\"}, \"IT\": {\"path\": \"M451.68,158.58l0.2,0.16l3.3,0.75l-0.22,1.26l0.02,0.18l0.35,0.78l-1.4,-0.32l-0.21,0.03l-2.04,1.1l-0.16,0.29l0.13,1.47l-0.29,0.82l0.02,0.24l0.82,1.57l0.1,0.11l2.28,1.5l1.29,2.53l2.79,2.43l0.2,0.07l1.83,-0.02l0.31,0.34l-0.46,0.39l0.06,0.5l4.06,1.97l2.06,1.49l0.17,0.36l-0.24,0.53l-1.08,-1.07l-0.15,-0.08l-2.18,-0.49l-0.33,0.15l-1.05,1.91l0.11,0.4l1.63,0.98l-0.22,1.12l-0.84,0.14l-0.22,0.15l-1.27,2.38l-0.54,0.12l0.01,-0.47l0.48,-1.46l0.5,-0.58l0.03,-0.35l-0.97,-1.69l-0.76,-1.48l-0.17,-0.15l-0.94,-0.33l-0.68,-1.18l-0.16,-0.13l-1.53,-0.52l-1.03,-1.14l-0.19,-0.1l-1.78,-0.19l-1.88,-1.3l-2.27,-1.94l-1.64,-1.68l-0.76,-2.94l-0.21,-0.21l-1.22,-0.35l-2.01,-1.0l-0.24,-0.01l-1.15,0.42l-0.11,0.07l-1.38,1.36l-0.5,0.11l0.19,-0.87l-0.21,-0.35l-1.19,-0.34l-0.56,-2.06l0.76,-0.82l0.03,-0.36l-0.68,-1.08l0.04,-0.31l0.68,0.42l0.19,0.04l1.21,-0.15l0.14,-0.06l1.18,-0.89l0.25,0.29l0.25,0.1l1.19,-0.1l0.25,-0.18l0.45,-1.04l1.61,0.34l0.19,-0.02l1.1,-0.53l0.17,-0.22l0.15,-0.95l1.19,0.35l0.35,-0.16l0.23,-0.47l2.11,-0.47l0.45,0.89ZM459.35,184.63l-0.71,1.81l0.0,0.23l0.33,0.79l-0.37,1.03l-1.6,-0.91l-1.33,-0.34l-3.24,-1.36l0.23,-0.99l2.73,0.24l3.95,-0.5ZM443.95,175.91l1.26,1.77l-0.31,3.47l-0.82,-0.13l-0.26,0.08l-0.83,0.79l-0.64,-0.52l-0.1,-3.42l-0.44,-1.34l0.91,0.1l0.21,-0.06l1.01,-0.74Z\", \"name\": \"Italy\"}, \"VN\": {\"path\": \"M690.8,230.21l-2.86,1.93l-2.09,2.46l-0.06,0.11l-0.55,1.8l0.04,0.26l4.26,6.1l2.31,1.63l1.46,1.97l1.12,4.62l-0.32,4.3l-1.97,1.57l-2.85,1.62l-2.09,2.14l-2.83,2.13l-0.67,-1.19l0.65,-1.58l-0.09,-0.35l-1.47,-1.14l1.67,-0.79l2.57,-0.18l0.22,-0.47l-0.89,-1.24l3.88,-1.8l0.17,-0.24l0.31,-3.05l-0.01,-0.13l-0.56,-1.63l0.44,-2.48l-0.01,-0.15l-0.63,-1.81l-0.08,-0.12l-1.87,-1.77l-3.64,-5.3l-0.11,-0.1l-2.68,-1.39l0.45,-0.59l1.53,-0.65l0.16,-0.39l-0.97,-2.27l-0.27,-0.18l-2.89,-0.02l-1.04,-2.21l-1.28,-1.83l0.96,-0.46l1.97,0.01l2.43,-0.3l0.13,-0.05l1.95,-1.29l1.04,0.85l0.13,0.06l1.98,0.42l-0.32,1.21l0.09,0.3l1.19,1.07l0.12,0.07l1.88,0.51Z\", \"name\": \"Vietnam\"}, \"AR\": {\"path\": \"M258.11,341.34l1.4,1.81l0.51,-0.06l0.89,-1.94l2.51,0.1l0.36,0.49l4.6,4.31l0.15,0.08l1.99,0.39l3.01,1.93l2.5,1.01l0.28,0.91l-2.4,3.97l0.17,0.44l2.57,0.74l2.81,0.41l2.09,-0.44l0.14,-0.07l2.27,-2.06l0.09,-0.17l0.38,-2.2l0.88,-0.36l1.05,1.29l-0.04,1.88l-1.98,1.4l-1.72,1.13l-2.84,2.65l-3.34,3.73l-0.07,0.12l-0.63,2.22l-0.67,2.85l0.02,2.73l-0.47,0.54l-0.07,0.17l-0.36,3.28l0.12,0.27l3.03,2.32l-0.31,1.78l0.11,0.29l1.44,1.15l-0.11,1.17l-2.32,3.57l-3.59,1.51l-4.95,0.6l-2.72,-0.29l-0.32,0.38l0.5,1.67l-0.49,2.13l0.01,0.16l0.4,1.29l-1.27,0.88l-2.41,0.39l-2.33,-1.05l-0.31,0.04l-0.97,0.78l-0.11,0.27l0.35,2.98l0.16,0.23l1.69,0.91l0.31,-0.02l1.08,-0.75l0.46,0.96l-2.1,0.88l-2.01,1.89l-0.09,0.18l-0.36,3.05l-0.51,1.42l-2.16,0.01l-0.19,0.07l-1.96,1.59l-0.1,0.15l-0.72,2.34l0.08,0.31l2.46,2.31l0.13,0.07l2.09,0.56l-0.74,2.45l-2.86,1.75l-0.12,0.14l-1.59,3.71l-2.2,1.24l-0.1,0.09l-1.03,1.54l-0.04,0.23l0.81,3.45l0.06,0.13l1.13,1.32l-2.59,-0.57l-5.89,-0.44l-0.92,-1.73l0.05,-2.4l-0.34,-0.3l-1.49,0.19l-0.72,-0.98l-0.2,-3.21l1.79,-1.33l0.1,-0.13l0.79,-2.04l0.02,-0.16l-0.27,-1.52l1.31,-2.69l0.91,-4.15l-0.23,-1.72l0.91,-0.49l0.15,-0.33l-0.27,-1.16l-0.15,-0.2l-0.87,-0.46l0.65,-1.01l-0.04,-0.37l-1.06,-1.09l-0.54,-3.2l0.83,-0.51l0.14,-0.29l-0.42,-3.6l0.58,-2.98l0.64,-2.5l1.41,-1.0l0.12,-0.32l-0.75,-2.8l-0.01,-2.48l1.81,-1.78l0.09,-0.22l-0.06,-2.3l1.39,-2.69l0.03,-0.14l0.01,-2.58l-0.11,-0.24l-0.57,-0.45l-1.1,-4.59l1.49,-2.73l0.04,-0.17l-0.23,-2.59l0.86,-2.38l1.6,-2.48l1.74,-1.65l0.04,-0.39l-0.64,-0.89l0.42,-0.7l0.04,-0.16l-0.08,-4.26l2.55,-1.23l0.16,-0.18l0.86,-2.75l-0.01,-0.22l-0.22,-0.48l1.84,-2.1l3.0,0.59ZM256.77,438.98l-2.1,0.15l-1.18,-1.14l-0.19,-0.08l-1.53,-0.09l-2.38,-0.0l-0.0,-6.28l0.4,0.65l1.25,2.55l0.11,0.12l3.26,2.07l3.19,0.8l-0.82,1.26Z\", \"name\": \"Argentina\"}, \"AU\": {\"path\": \"M705.55,353.06l0.09,0.09l0.37,0.05l0.13,-0.35l-0.57,-1.69l0.48,0.3l0.71,0.99l0.34,0.11l0.2,-0.29l-0.04,-1.37l-0.04,-0.14l-1.22,-2.07l-0.28,-0.9l-0.51,-0.69l0.24,-1.33l0.52,-0.7l0.34,-1.32l0.01,-0.13l-0.25,-1.44l0.51,-0.94l0.1,1.03l0.23,0.26l0.32,-0.14l1.01,-1.72l1.94,-0.84l1.27,-1.14l1.84,-0.92l1.0,-0.18l0.6,0.28l0.26,-0.0l1.94,-0.96l1.48,-0.28l0.19,-0.13l0.32,-0.49l0.51,-0.18l1.42,0.05l2.63,-0.76l0.11,-0.06l1.36,-1.15l0.08,-0.1l0.61,-1.33l1.42,-1.27l0.1,-0.19l0.11,-1.03l0.06,-1.32l1.39,-1.74l0.85,1.79l0.4,0.14l1.07,-0.51l0.11,-0.45l-0.77,-1.05l0.53,-0.84l0.86,0.43l0.43,-0.22l0.29,-1.85l1.29,-1.19l0.6,-0.98l1.16,-0.4l0.2,-0.27l0.02,-0.34l0.74,0.2l0.38,-0.27l0.03,-0.44l1.98,-0.61l1.7,1.08l1.36,1.48l0.22,0.1l1.55,0.02l1.57,0.24l0.33,-0.4l-0.48,-1.27l1.09,-1.86l1.06,-0.63l0.1,-0.42l-0.28,-0.46l0.93,-1.24l1.36,-0.8l1.16,0.27l0.14,0.0l2.1,-0.48l0.23,-0.3l-0.05,-1.3l-0.18,-0.26l-1.08,-0.49l0.44,-0.12l1.52,0.58l1.39,1.06l2.11,0.65l0.19,-0.0l0.59,-0.21l1.44,0.72l0.27,0.0l1.37,-0.68l0.84,0.2l0.26,-0.06l0.37,-0.3l0.82,0.89l-0.56,1.14l-0.84,0.91l-0.75,0.07l-0.26,0.38l0.26,0.9l-0.67,1.15l-0.88,1.24l-0.05,0.25l0.18,0.72l0.12,0.17l1.99,1.42l1.96,0.84l1.25,0.86l1.8,1.51l0.19,0.07l0.63,-0.0l1.15,0.58l0.34,0.7l0.17,0.15l2.39,0.88l0.24,-0.02l1.65,-0.88l0.14,-0.16l0.49,-1.37l0.52,-1.19l0.31,-1.39l0.75,-2.02l0.01,-0.19l-0.33,-1.16l0.16,-0.67l0.0,-0.13l-0.28,-1.41l0.3,-1.78l0.42,-0.45l0.05,-0.33l-0.33,-0.73l0.56,-1.25l0.48,-1.39l0.07,-0.69l0.58,-0.59l0.48,0.84l0.17,1.53l0.17,0.24l0.47,0.23l0.09,0.9l0.05,0.14l0.87,1.23l0.17,1.33l-0.09,0.89l0.03,0.15l0.9,2.0l0.43,0.13l1.38,-0.83l0.71,0.92l1.06,0.88l-0.22,0.96l0.0,0.14l0.53,2.2l0.38,1.3l0.15,0.18l0.52,0.26l0.62,2.01l-0.23,1.27l0.02,0.18l0.81,1.76l0.14,0.14l2.69,1.35l3.21,2.21l-0.2,0.4l0.04,0.34l1.39,1.6l0.95,2.78l0.43,0.16l0.79,-0.46l0.85,0.96l0.39,0.05l0.22,-0.15l0.36,2.33l0.09,0.18l1.78,1.63l1.16,1.01l1.9,2.1l0.67,2.05l0.06,1.47l-0.17,1.64l0.03,0.17l1.16,2.22l-0.14,2.28l-0.43,1.24l-0.68,2.44l0.04,1.63l-0.48,1.92l-1.06,2.43l-1.79,1.32l-0.1,0.12l-0.91,2.15l-0.82,1.37l-0.76,2.47l-0.98,1.46l-0.63,2.14l-0.33,2.02l0.1,0.82l-1.21,0.85l-2.71,0.1l-0.13,0.03l-2.31,1.19l-1.21,1.17l-1.34,1.11l-1.89,-1.18l-1.33,-0.46l0.32,-1.24l-0.4,-0.35l-1.46,0.61l-2.06,1.98l-1.99,-0.73l-1.43,-0.46l-1.45,-0.22l-2.32,-0.81l-1.51,-1.67l-0.45,-2.11l-0.6,-1.5l-0.07,-0.11l-1.23,-1.16l-0.16,-0.08l-1.96,-0.28l0.59,-0.99l0.03,-0.24l-0.61,-2.1l-0.54,-0.08l-1.16,1.85l-1.23,0.29l0.73,-0.88l0.06,-0.12l0.37,-1.57l0.93,-1.33l0.05,-0.2l-0.2,-2.07l-0.53,-0.17l-2.01,2.35l-1.52,0.94l-0.12,0.14l-0.82,1.93l-1.5,-0.9l0.07,-1.32l-0.06,-0.2l-1.57,-2.04l-1.15,-0.92l0.3,-0.41l-0.1,-0.44l-3.21,-1.69l-0.13,-0.03l-1.69,-0.08l-2.35,-1.31l-0.16,-0.04l-4.55,0.27l-3.24,0.99l-2.8,0.91l-2.33,-0.18l-0.17,0.03l-2.63,1.41l-2.14,0.64l-0.2,0.19l-0.47,1.42l-0.8,0.99l-1.99,0.06l-1.55,0.24l-2.27,-0.5l-1.79,0.3l-1.71,0.13l-0.19,0.09l-1.38,1.39l-0.58,-0.1l-0.21,0.04l-1.26,0.8l-1.13,0.85l-1.72,-0.1l-1.6,-0.0l-2.58,-1.76l-1.21,-0.49l0.04,-1.19l1.04,-0.32l0.16,-0.12l0.42,-0.64l0.05,-0.19l-0.09,-0.97l0.3,-2.0l-0.28,-1.64l-1.34,-2.84l-0.39,-1.49l0.1,-1.51l-0.04,-0.17l-0.96,-1.72l-0.06,-0.73l-0.09,-0.19l-1.04,-1.01l-0.3,-2.02l-0.05,-0.12l-1.23,-1.83ZM784.95,393.35l2.39,1.01l0.2,0.01l3.26,-0.96l1.19,0.16l0.16,3.19l-0.78,0.95l-0.07,0.16l-0.19,1.83l-0.43,-0.41l-0.44,0.03l-1.61,1.96l-0.4,-0.12l-1.38,-0.09l-1.43,-2.42l-0.37,-2.03l-1.4,-2.53l0.04,-0.94l1.27,0.2Z\", \"name\": \"Australia\"}, \"IL\": {\"path\": \"M509.04,199.22l0.71,0.0l0.27,-0.17l0.15,-0.33l0.19,-0.01l0.02,0.73l-0.27,0.34l0.02,0.08l-0.32,0.62l-0.65,-0.27l-0.41,0.19l-0.52,1.85l0.16,0.35l0.14,0.07l-0.17,0.1l-0.14,0.21l-0.11,0.73l0.39,0.33l0.81,-0.26l0.03,0.64l-0.97,3.43l-1.28,-3.67l0.62,-0.78l-0.03,-0.41l0.58,-1.16l0.5,-2.07l0.27,-0.54Z\", \"name\": \"Israel\"}, \"IN\": {\"path\": \"M615.84,192.58l2.4,2.97l-0.24,2.17l0.05,0.2l0.94,1.35l-0.06,0.97l-1.46,-0.3l-0.35,0.36l0.7,3.06l0.12,0.18l2.46,1.75l3.11,1.72l-1.23,0.96l-0.1,0.13l-0.97,2.55l0.16,0.38l2.41,1.02l2.37,1.33l3.27,1.52l3.43,0.37l1.37,1.3l0.17,0.08l1.92,0.25l3.0,0.62l2.15,-0.04l0.28,-0.22l0.29,-1.06l0.0,-0.13l-0.32,-1.66l0.16,-0.94l1.0,-0.37l0.23,2.28l0.18,0.24l2.28,1.02l0.2,0.02l1.52,-0.41l2.06,0.18l2.08,-0.08l0.29,-0.27l0.18,-1.66l-0.1,-0.26l-0.53,-0.44l1.38,-0.23l0.15,-0.07l2.26,-2.0l2.75,-1.65l1.97,0.63l0.25,-0.03l1.54,-0.99l0.89,1.28l-0.72,0.97l0.2,0.48l2.49,0.37l0.11,0.61l-0.69,0.39l-0.15,0.3l0.15,1.22l-1.36,-0.37l-0.23,0.03l-3.24,1.86l-0.15,0.28l0.07,1.44l-1.33,2.16l-0.04,0.13l-0.12,1.24l-0.98,1.91l-1.72,-0.53l-0.39,0.28l-0.09,2.66l-0.52,0.83l-0.04,0.23l0.21,0.89l-0.71,0.36l-1.21,-3.85l-0.29,-0.21l-0.69,0.01l-0.29,0.23l-0.28,1.17l-0.84,-0.84l0.6,-1.17l0.97,-0.13l0.23,-0.16l1.15,-2.25l-0.18,-0.42l-1.54,-0.47l-2.3,0.04l-2.13,-0.33l-0.19,-1.63l-0.26,-0.26l-1.13,-0.13l-1.93,-1.13l-0.42,0.13l-0.88,1.82l0.08,0.37l1.47,1.15l-1.21,0.77l-0.1,0.1l-0.56,0.97l0.13,0.42l1.31,0.61l-0.36,1.35l0.01,0.2l0.85,1.95l0.37,2.05l-0.26,0.68l-1.55,-0.02l-3.09,0.54l-0.25,0.32l0.13,1.84l-1.21,1.4l-3.64,1.79l-2.79,3.04l-1.86,1.61l-2.48,1.68l-0.13,0.25l-0.0,1.0l-1.07,0.55l-2.21,0.9l-1.13,0.13l-0.25,0.19l-0.75,1.96l-0.02,0.15l0.52,3.31l0.13,2.03l-1.03,2.35l-0.03,0.12l-0.01,4.03l-1.02,0.1l-0.23,0.15l-1.14,1.93l0.04,0.36l0.44,0.48l-1.83,0.57l-0.18,0.15l-0.81,1.65l-0.74,0.53l-2.14,-2.12l-1.14,-3.47l-0.96,-2.57l-0.9,-1.26l-1.3,-2.38l-0.61,-3.14l-0.44,-1.62l-2.29,-3.56l-1.03,-4.94l-0.74,-3.29l0.01,-3.12l-0.49,-2.51l-0.41,-0.22l-3.56,1.53l-1.59,-0.28l-2.96,-2.87l0.94,-0.74l0.06,-0.41l-0.74,-1.03l-2.73,-2.1l1.35,-1.43l5.38,0.01l0.29,-0.36l-0.5,-2.29l-0.09,-0.15l-1.33,-1.28l-0.27,-1.96l-0.12,-0.2l-1.36,-1.0l2.42,-2.48l2.77,0.2l0.24,-0.1l2.62,-2.85l1.59,-2.8l2.41,-2.74l0.07,-0.2l-0.04,-1.82l2.01,-1.51l-0.01,-0.49l-1.95,-1.33l-0.83,-1.81l-0.82,-2.27l0.98,-0.97l3.64,0.66l2.89,-0.42l0.17,-0.08l2.18,-2.15Z\", \"name\": \"India\"}, \"TZ\": {\"path\": \"M505.77,287.58l0.36,0.23l8.95,5.03l0.15,1.3l0.13,0.21l3.4,2.37l-1.07,2.88l-0.02,0.14l0.15,1.42l0.15,0.23l1.47,0.84l0.05,0.42l-0.66,1.44l-0.02,0.18l0.13,0.72l-0.16,1.16l0.03,0.19l0.87,1.57l1.03,2.48l0.12,0.14l0.53,0.32l-1.59,1.18l-2.64,0.95l-1.45,-0.04l-0.2,0.07l-0.81,0.69l-1.64,0.06l-0.68,0.3l-2.9,-0.69l-1.71,0.17l-0.65,-3.18l-0.05,-0.12l-1.35,-1.88l-0.19,-0.12l-2.41,-0.46l-1.38,-0.74l-1.63,-0.44l-0.96,-0.41l-0.95,-0.58l-1.31,-3.09l-1.47,-1.46l-0.45,-1.31l0.24,-1.34l-0.39,-1.99l0.71,-0.08l0.18,-0.09l0.91,-0.91l0.98,-1.31l0.59,-0.5l0.11,-0.24l-0.02,-0.81l-0.08,-0.2l-0.47,-0.5l-0.1,-0.67l0.51,-0.23l0.18,-0.25l0.14,-1.47l-0.05,-0.2l-0.76,-1.09l0.45,-0.15l2.71,0.03l5.01,-0.19Z\", \"name\": \"Tanzania\"}, \"AZ\": {\"path\": \"M539.36,175.66l0.16,0.09l1.11,0.2l0.32,-0.15l0.4,-0.71l1.22,-0.99l1.11,1.33l1.26,2.09l0.22,0.14l1.06,0.13l0.28,0.29l-1.46,0.17l-0.26,0.24l-0.43,2.26l-0.39,0.92l-0.85,0.63l-0.12,0.25l0.06,1.2l-0.22,0.05l-1.28,-1.25l0.74,-1.25l-0.03,-0.35l-0.74,-0.86l-0.3,-0.1l-1.05,0.27l-2.49,1.82l-0.04,-1.46l-0.18,-0.27l-1.09,-0.47l-0.8,-0.6l0.53,-0.7l-0.06,-0.42l-1.11,-0.84l0.34,-0.51l-0.11,-0.43l-0.89,-0.48l-0.33,-0.49l0.25,-0.2l1.78,0.81l1.35,0.18l0.25,-0.09l0.34,-0.35l0.02,-0.39l-1.04,-1.36l0.28,-0.18l0.49,0.07l1.65,1.74ZM533.53,180.16l0.63,0.67l0.22,0.09l0.8,-0.0l0.04,0.31l0.66,1.09l-0.94,-0.21l-1.16,-1.24l-0.25,-0.71Z\", \"name\": \"Azerbaijan\"}, \"IE\": {\"path\": \"M405.17,135.35l0.36,2.16l-1.78,2.84l-4.28,1.91l-3.02,-0.43l1.81,-3.13l0.02,-0.26l-1.23,-3.26l3.24,-2.56l1.54,-1.32l0.37,1.33l-0.49,1.77l0.3,0.38l1.49,-0.05l1.68,0.63Z\", \"name\": \"Ireland\"}, \"ID\": {\"path\": \"M756.56,287.86l0.69,4.02l0.15,0.21l2.59,1.5l0.39,-0.07l2.05,-2.61l2.75,-1.45l2.09,-0.0l2.08,0.85l1.85,0.89l2.52,0.46l0.08,15.44l-1.72,-1.6l-0.15,-0.07l-2.54,-0.51l-0.29,0.1l-0.53,0.62l-2.53,0.06l0.78,-1.51l1.48,-0.66l0.17,-0.34l-0.65,-2.74l-1.23,-2.19l-0.14,-0.13l-4.85,-2.13l-2.09,-0.23l-3.7,-2.28l-0.41,0.1l-0.67,1.11l-0.63,0.14l-0.41,-0.67l-0.01,-1.01l-0.14,-0.25l-1.39,-0.89l2.05,-0.69l1.73,0.05l0.29,-0.39l-0.21,-0.66l-0.29,-0.21l-3.5,-0.0l-0.9,-1.36l-0.19,-0.13l-2.14,-0.44l-0.65,-0.76l2.86,-0.51l1.28,-0.79l3.75,0.96l0.32,0.76ZM758.01,300.37l-0.79,1.04l-0.14,-1.07l0.4,-0.81l0.29,-0.47l0.24,0.31l-0.0,1.0ZM747.45,292.9l0.48,1.02l-1.45,-0.69l-2.09,-0.21l-1.45,0.16l-1.28,-0.07l0.35,-0.81l2.86,-0.1l2.58,0.68ZM741.15,285.69l-0.16,-0.25l-0.72,-3.08l0.47,-1.86l0.35,-0.38l0.1,0.73l0.25,0.26l1.28,0.19l0.18,0.78l-0.11,1.8l-0.96,-0.18l-0.35,0.22l-0.38,1.52l0.05,0.24ZM741.19,285.75l0.76,0.97l-0.11,0.05l-0.65,-1.02ZM739.18,293.52l-0.61,0.54l-1.44,-0.38l-0.25,-0.55l1.93,-0.09l0.36,0.48ZM728.4,295.87l-0.27,-0.07l-2.26,0.89l-0.37,-0.41l0.27,-0.8l-0.09,-0.33l-1.68,-1.37l0.17,-2.29l-0.42,-0.3l-1.67,0.76l-0.17,0.29l0.21,2.92l0.09,3.34l-1.22,0.28l-0.78,-0.54l0.65,-2.1l0.01,-0.14l-0.39,-2.42l-0.29,-0.25l-0.86,-0.02l-0.63,-1.4l0.99,-1.61l0.35,-1.97l1.24,-3.73l0.49,-0.96l1.95,-1.7l1.86,0.69l3.16,0.35l2.92,-0.1l0.17,-0.06l2.24,-1.65l0.11,0.14l-1.8,2.22l-1.72,0.44l-2.41,-0.48l-4.21,0.13l-2.19,0.36l-0.25,0.24l-0.36,1.9l0.08,0.27l2.24,2.23l0.4,0.02l1.29,-1.08l3.19,-0.58l-0.19,0.06l-1.04,1.4l-2.13,0.94l-0.12,0.45l2.26,3.06l-0.37,0.69l0.03,0.32l1.51,1.95ZM728.48,295.97l0.59,0.76l-0.02,1.37l-1.0,0.55l-0.64,-0.58l1.09,-1.84l-0.02,-0.26ZM728.64,286.95l0.79,-0.14l-0.07,0.39l-0.72,-0.24ZM732.38,310.1l-1.89,0.49l-0.06,-0.06l0.17,-0.64l1.0,-1.42l2.14,-0.87l0.1,0.2l0.04,0.58l-1.49,1.72ZM728.26,305.71l-0.17,0.63l-3.53,0.67l-3.02,-0.28l-0.0,-0.42l1.66,-0.44l1.47,0.71l0.16,0.03l1.75,-0.21l1.69,-0.69ZM722.98,310.33l-0.74,0.03l-2.52,-1.35l1.42,-0.3l1.19,0.7l0.72,0.63l-0.06,0.28ZM716.24,305.63l0.66,0.49l0.22,0.06l1.35,-0.18l0.31,0.53l-4.18,0.77l-0.8,-0.01l0.51,-0.86l1.2,-0.02l0.24,-0.12l0.49,-0.65ZM715.84,280.21l0.09,0.34l2.25,1.86l-2.25,0.22l-0.24,0.17l-0.84,1.71l-0.03,0.15l0.1,2.11l-2.27,1.62l-0.13,0.24l-0.06,2.46l-0.74,2.92l-0.02,-0.05l-0.39,-0.16l-2.62,1.04l-0.86,-1.33l-0.23,-0.14l-1.71,-0.14l-1.19,-0.76l-0.25,-0.03l-2.78,0.84l-0.79,-1.05l-0.26,-0.12l-1.61,0.13l-1.8,-0.25l-0.36,-3.13l-0.15,-0.23l-1.18,-0.65l-1.13,-2.02l-0.33,-2.1l0.27,-2.19l1.05,-1.17l0.28,1.12l0.1,0.16l1.71,1.41l0.28,0.05l1.55,-0.49l1.54,0.17l0.23,-0.07l1.4,-1.21l1.05,-0.19l2.3,0.68l0.16,0.0l2.04,-0.53l0.21,-0.19l1.26,-3.41l0.91,-0.82l0.09,-0.14l0.8,-2.64l2.63,0.0l1.71,0.33l-1.19,1.89l0.02,0.34l1.74,2.24l-0.37,1.0ZM692.67,302.0l0.26,0.19l4.8,0.25l0.28,-0.16l0.44,-0.83l4.29,1.12l0.85,1.52l0.23,0.15l3.71,0.45l2.37,1.15l-2.06,0.69l-2.77,-1.0l-2.25,0.07l-2.57,-0.18l-2.31,-0.45l-2.94,-0.97l-1.84,-0.25l-0.13,0.01l-0.97,0.29l-4.34,-0.98l-0.38,-0.94l-0.25,-0.19l-1.76,-0.14l1.31,-1.84l2.81,0.14l1.97,0.96l0.95,0.19l0.28,0.74ZM685.63,299.27l-2.36,0.04l-2.07,-2.05l-3.17,-2.02l-1.06,-1.5l-1.88,-2.02l-1.22,-1.85l-1.9,-3.49l-2.2,-2.11l-0.71,-2.08l-0.94,-1.99l-0.1,-0.12l-2.21,-1.54l-1.35,-2.17l-1.86,-1.39l-2.53,-2.68l-0.14,-0.81l1.22,0.08l3.76,0.47l2.16,2.4l1.94,1.7l1.37,1.04l2.35,2.67l0.22,0.1l2.44,0.04l1.99,1.62l1.42,2.06l0.09,0.09l1.67,1.0l-0.88,1.8l0.11,0.39l1.44,0.87l0.13,0.04l0.68,0.05l0.41,1.62l0.87,1.4l0.22,0.14l1.71,0.21l1.06,1.38l-0.61,3.04l-0.09,3.6Z\", \"name\": \"Indonesia\"}, \"UA\": {\"path\": \"M500.54,141.42l0.9,0.13l0.27,-0.11l0.52,-0.62l0.68,0.13l2.43,-0.3l1.32,1.57l-0.45,0.48l-0.07,0.26l0.21,1.03l0.27,0.24l1.85,0.15l0.76,1.22l-0.05,0.55l0.2,0.31l3.18,1.15l0.18,0.01l1.75,-0.47l1.42,1.41l0.22,0.09l1.42,-0.03l3.44,0.99l0.02,0.65l-0.97,1.62l-0.03,0.24l0.52,1.67l-0.29,0.79l-2.24,0.22l-0.14,0.05l-1.29,0.89l-0.13,0.23l-0.07,1.16l-1.75,0.22l-0.12,0.04l-1.6,0.98l-2.27,0.16l-0.12,0.04l-2.16,1.17l-0.16,0.29l0.15,1.94l0.14,0.23l1.23,0.75l0.18,0.04l2.06,-0.15l-0.22,0.51l-2.67,0.54l-3.27,1.72l-1.0,-0.45l0.45,-1.19l-0.19,-0.39l-2.34,-0.78l0.15,-0.2l2.32,-1.0l0.09,-0.49l-0.73,-0.72l-0.15,-0.08l-3.69,-0.75l-0.14,-0.96l-0.35,-0.25l-2.32,0.39l-0.21,0.15l-0.91,1.7l-1.77,2.1l-0.93,-0.44l-0.24,-0.0l-1.05,0.45l-0.48,-0.25l0.13,-0.07l0.14,-0.15l0.43,-1.04l0.67,-0.97l0.04,-0.26l-0.1,-0.31l0.04,-0.02l0.11,0.19l0.24,0.15l1.48,0.09l0.78,-0.25l0.07,-0.53l-0.27,-0.19l0.09,-0.25l-0.08,-0.33l-0.81,-0.74l-0.34,-1.24l-0.14,-0.18l-0.73,-0.42l0.15,-0.87l-0.11,-0.29l-1.13,-0.86l-0.15,-0.06l-0.97,-0.11l-1.79,-0.97l-0.2,-0.03l-1.66,0.32l-0.13,0.06l-0.52,0.41l-0.95,-0.0l-0.23,0.11l-0.56,0.66l-1.74,0.29l-0.79,0.43l-1.01,-0.68l-0.16,-0.05l-1.57,-0.01l-1.52,-0.35l-0.23,0.04l-0.71,0.45l-0.09,-0.43l-0.13,-0.19l-1.18,-0.74l0.38,-1.02l0.53,-0.64l0.35,0.12l0.37,-0.41l-0.57,-1.29l2.1,-2.5l1.16,-0.36l0.2,-0.2l0.27,-0.92l-0.01,-0.2l-1.1,-2.52l0.79,-0.09l0.13,-0.05l1.3,-0.86l1.83,-0.07l2.48,0.26l2.84,0.8l1.91,0.06l0.88,0.45l0.29,-0.01l0.72,-0.44l0.49,0.58l0.25,0.11l2.2,-0.16l0.94,0.3l0.39,-0.26l0.15,-1.57l0.61,-0.59l2.01,-0.19Z\", \"name\": \"Ukraine\"}, \"QA\": {\"path\": \"M548.47,221.47l-0.15,-1.72l0.59,-1.23l0.38,-0.16l0.54,0.6l0.04,1.4l-0.47,1.37l-0.41,0.11l-0.53,-0.37Z\", \"name\": \"Qatar\"}, \"MZ\": {\"path\": \"M507.71,314.14l1.65,-0.18l2.96,0.7l0.2,-0.02l0.6,-0.29l1.68,-0.06l0.18,-0.07l0.8,-0.69l1.5,0.02l2.74,-0.98l1.74,-1.27l0.25,0.7l-0.1,2.47l0.31,2.27l0.1,3.97l0.42,1.24l-0.7,1.71l-0.94,1.73l-1.52,1.52l-5.06,2.21l-2.88,2.8l-1.01,0.51l-1.72,1.81l-0.99,0.58l-0.15,0.23l-0.21,1.86l0.04,0.19l1.17,1.95l0.47,1.47l0.03,0.74l0.39,0.28l0.05,-0.01l-0.06,2.13l-0.39,1.19l0.1,0.33l0.42,0.32l-0.28,0.83l-0.95,0.86l-2.03,0.88l-3.08,1.49l-1.1,0.99l-0.09,0.28l0.21,1.13l0.21,0.23l0.38,0.11l-0.14,0.89l-1.39,-0.02l-0.17,-0.94l-0.38,-1.23l-0.2,-0.89l0.44,-2.91l-0.01,-0.14l-0.65,-1.88l-1.15,-3.55l2.52,-2.85l0.68,-1.89l0.29,-0.18l0.14,-0.2l0.28,-1.53l-0.03,-0.19l-0.36,-0.7l0.1,-1.83l0.49,-1.84l-0.01,-3.26l-0.14,-0.25l-1.3,-0.83l-0.11,-0.04l-1.08,-0.17l-0.47,-0.55l-0.1,-0.08l-1.16,-0.54l-0.13,-0.03l-1.83,0.04l-0.32,-2.25l7.19,-1.99l1.32,1.12l0.29,0.06l0.55,-0.19l0.75,0.49l0.11,0.81l-0.49,1.11l-0.02,0.15l0.19,1.81l0.09,0.18l1.63,1.59l0.48,-0.1l0.72,-1.68l0.99,-0.49l0.17,-0.29l-0.21,-3.29l-0.04,-0.13l-1.11,-1.92l-0.9,-0.82l-0.21,-0.08l-0.62,0.03l-0.63,-2.98l0.61,-1.67Z\", \"name\": \"Mozambique\"}}, \"height\": 440.7063107441331, \"projection\": {\"type\": \"mill\", \"centralMeridian\": 11.5}, \"width\": 900.0});"
  },
  {
    "path": "public/adminlte/plugins/knob/jquery.knob.js",
    "content": "/*!jQuery Knob*/\n/**\n * Downward compatible, touchable dial\n *\n * Version: 1.2.11\n * Requires: jQuery v1.7+\n *\n * Copyright (c) 2012 Anthony Terrien\n * Under MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Thanks to vor, eskimoblood, spiffistan, FabrizioC\n */\n(function (factory) {\n    if (typeof exports === 'object') {\n        // CommonJS\n        module.exports = factory(require('jquery'));\n    } else if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n\n    /**\n     * Kontrol library\n     */\n    \"use strict\";\n\n    /**\n     * Definition of globals and core\n     */\n    var k = {}, // kontrol\n        max = Math.max,\n        min = Math.min;\n\n    k.c = {};\n    k.c.d = $(document);\n    k.c.t = function (e) {\n        return e.originalEvent.touches.length - 1;\n    };\n\n    /**\n     * Kontrol Object\n     *\n     * Definition of an abstract UI control\n     *\n     * Each concrete component must call this one.\n     * <code>\n     * k.o.call(this);\n     * </code>\n     */\n    k.o = function () {\n        var s = this;\n\n        this.o = null; // array of options\n        this.$ = null; // jQuery wrapped element\n        this.i = null; // mixed HTMLInputElement or array of HTMLInputElement\n        this.g = null; // deprecated 2D graphics context for 'pre-rendering'\n        this.v = null; // value ; mixed array or integer\n        this.cv = null; // change value ; not commited value\n        this.x = 0; // canvas x position\n        this.y = 0; // canvas y position\n        this.w = 0; // canvas width\n        this.h = 0; // canvas height\n        this.$c = null; // jQuery canvas element\n        this.c = null; // rendered canvas context\n        this.t = 0; // touches index\n        this.isInit = false;\n        this.fgColor = null; // main color\n        this.pColor = null; // previous color\n        this.dH = null; // draw hook\n        this.cH = null; // change hook\n        this.eH = null; // cancel hook\n        this.rH = null; // release hook\n        this.scale = 1; // scale factor\n        this.relative = false;\n        this.relativeWidth = false;\n        this.relativeHeight = false;\n        this.$div = null; // component div\n\n        this.run = function () {\n            var cf = function (e, conf) {\n                var k;\n                for (k in conf) {\n                    s.o[k] = conf[k];\n                }\n                s._carve().init();\n                s._configure()\n                 ._draw();\n            };\n\n            if (this.$.data('kontroled')) return;\n            this.$.data('kontroled', true);\n\n            this.extend();\n            this.o = $.extend({\n                    // Config\n                    min: this.$.data('min') !== undefined ? this.$.data('min') : 0,\n                    max: this.$.data('max') !== undefined ? this.$.data('max') : 100,\n                    stopper: true,\n                    readOnly: this.$.data('readonly') || (this.$.attr('readonly') === 'readonly'),\n\n                    // UI\n                    cursor: this.$.data('cursor') === true && 30\n                            || this.$.data('cursor') || 0,\n                    thickness: this.$.data('thickness')\n                               && Math.max(Math.min(this.$.data('thickness'), 1), 0.01)\n                               || 0.35,\n                    lineCap: this.$.data('linecap') || 'butt',\n                    width: this.$.data('width') || 200,\n                    height: this.$.data('height') || 200,\n                    displayInput: this.$.data('displayinput') == null || this.$.data('displayinput'),\n                    displayPrevious: this.$.data('displayprevious'),\n                    fgColor: this.$.data('fgcolor') || '#87CEEB',\n                    inputColor: this.$.data('inputcolor'),\n                    font: this.$.data('font') || 'Arial',\n                    fontWeight: this.$.data('font-weight') || 'bold',\n                    inline: false,\n                    step: this.$.data('step') || 1,\n                    rotation: this.$.data('rotation'),\n\n                    // Hooks\n                    draw: null, // function () {}\n                    change: null, // function (value) {}\n                    cancel: null, // function () {}\n                    release: null, // function (value) {}\n\n                    // Output formatting, allows to add unit: %, ms ...\n                    format: function(v) {\n                        return v;\n                    },\n                    parse: function (v) {\n                        return parseFloat(v);\n                    }\n                }, this.o\n            );\n\n            // finalize options\n            this.o.flip = this.o.rotation === 'anticlockwise' || this.o.rotation === 'acw';\n            if (!this.o.inputColor) {\n                this.o.inputColor = this.o.fgColor;\n            }\n\n            // routing value\n            if (this.$.is('fieldset')) {\n\n                // fieldset = array of integer\n                this.v = {};\n                this.i = this.$.find('input');\n                this.i.each(function(k) {\n                    var $this = $(this);\n                    s.i[k] = $this;\n                    s.v[k] = s.o.parse($this.val());\n\n                    $this.bind(\n                        'change blur',\n                        function () {\n                            var val = {};\n                            val[k] = $this.val();\n                            s.val(s._validate(val));\n                        }\n                    );\n                });\n                this.$.find('legend').remove();\n            } else {\n\n                // input = integer\n                this.i = this.$;\n                this.v = this.o.parse(this.$.val());\n                this.v === '' && (this.v = this.o.min);\n                this.$.bind(\n                    'change blur',\n                    function () {\n                        s.val(s._validate(s.o.parse(s.$.val())));\n                    }\n                );\n\n            }\n\n            !this.o.displayInput && this.$.hide();\n\n            // adds needed DOM elements (canvas, div)\n            this.$c = $(document.createElement('canvas')).attr({\n                width: this.o.width,\n                height: this.o.height\n            });\n\n            // wraps all elements in a div\n            // add to DOM before Canvas init is triggered\n            this.$div = $('<div style=\"'\n                + (this.o.inline ? 'display:inline;' : '')\n                + 'width:' + this.o.width + 'px;height:' + this.o.height + 'px;'\n                + '\"></div>');\n\n            this.$.wrap(this.$div).before(this.$c);\n            this.$div = this.$.parent();\n\n            if (typeof G_vmlCanvasManager !== 'undefined') {\n                G_vmlCanvasManager.initElement(this.$c[0]);\n            }\n\n            this.c = this.$c[0].getContext ? this.$c[0].getContext('2d') : null;\n\n            if (!this.c) {\n                throw {\n                    name:        \"CanvasNotSupportedException\",\n                    message:     \"Canvas not supported. Please use excanvas on IE8.0.\",\n                    toString:    function(){return this.name + \": \" + this.message}\n                }\n            }\n\n            // hdpi support\n            this.scale = (window.devicePixelRatio || 1) / (\n                            this.c.webkitBackingStorePixelRatio ||\n                            this.c.mozBackingStorePixelRatio ||\n                            this.c.msBackingStorePixelRatio ||\n                            this.c.oBackingStorePixelRatio ||\n                            this.c.backingStorePixelRatio || 1\n                         );\n\n            // detects relative width / height\n            this.relativeWidth =  this.o.width % 1 !== 0\n                                  && this.o.width.indexOf('%');\n            this.relativeHeight = this.o.height % 1 !== 0\n                                  && this.o.height.indexOf('%');\n            this.relative = this.relativeWidth || this.relativeHeight;\n\n            // computes size and carves the component\n            this._carve();\n\n            // prepares props for transaction\n            if (this.v instanceof Object) {\n                this.cv = {};\n                this.copy(this.v, this.cv);\n            } else {\n                this.cv = this.v;\n            }\n\n            // binds configure event\n            this.$\n                .bind(\"configure\", cf)\n                .parent()\n                .bind(\"configure\", cf);\n\n            // finalize init\n            this._listen()\n                ._configure()\n                ._xy()\n                .init();\n\n            this.isInit = true;\n\n            this.$.val(this.o.format(this.v));\n            this._draw();\n\n            return this;\n        };\n\n        this._carve = function() {\n            if (this.relative) {\n                var w = this.relativeWidth ?\n                        this.$div.parent().width() *\n                        parseInt(this.o.width) / 100\n                        : this.$div.parent().width(),\n                    h = this.relativeHeight ?\n                        this.$div.parent().height() *\n                        parseInt(this.o.height) / 100\n                        : this.$div.parent().height();\n\n                // apply relative\n                this.w = this.h = Math.min(w, h);\n            } else {\n                this.w = this.o.width;\n                this.h = this.o.height;\n            }\n\n            // finalize div\n            this.$div.css({\n                'width': this.w + 'px',\n                'height': this.h + 'px'\n            });\n\n            // finalize canvas with computed width\n            this.$c.attr({\n                width: this.w,\n                height: this.h\n            });\n\n            // scaling\n            if (this.scale !== 1) {\n                this.$c[0].width = this.$c[0].width * this.scale;\n                this.$c[0].height = this.$c[0].height * this.scale;\n                this.$c.width(this.w);\n                this.$c.height(this.h);\n            }\n\n            return this;\n        }\n\n        this._draw = function () {\n\n            // canvas pre-rendering\n            var d = true;\n\n            s.g = s.c;\n\n            s.clear();\n\n            s.dH && (d = s.dH());\n\n            d !== false && s.draw();\n        };\n\n        this._touch = function (e) {\n            var touchMove = function (e) {\n                var v = s.xy2val(\n                            e.originalEvent.touches[s.t].pageX,\n                            e.originalEvent.touches[s.t].pageY\n                        );\n\n                if (v == s.cv) return;\n\n                if (s.cH && s.cH(v) === false) return;\n\n                s.change(s._validate(v));\n                s._draw();\n            };\n\n            // get touches index\n            this.t = k.c.t(e);\n\n            // First touch\n            touchMove(e);\n\n            // Touch events listeners\n            k.c.d\n                .bind(\"touchmove.k\", touchMove)\n                .bind(\n                    \"touchend.k\",\n                    function () {\n                        k.c.d.unbind('touchmove.k touchend.k');\n                        s.val(s.cv);\n                    }\n                );\n\n            return this;\n        };\n\n        this._mouse = function (e) {\n            var mouseMove = function (e) {\n                var v = s.xy2val(e.pageX, e.pageY);\n\n                if (v == s.cv) return;\n\n                if (s.cH && (s.cH(v) === false)) return;\n\n                s.change(s._validate(v));\n                s._draw();\n            };\n\n            // First click\n            mouseMove(e);\n\n            // Mouse events listeners\n            k.c.d\n                .bind(\"mousemove.k\", mouseMove)\n                .bind(\n                    // Escape key cancel current change\n                    \"keyup.k\",\n                    function (e) {\n                        if (e.keyCode === 27) {\n                            k.c.d.unbind(\"mouseup.k mousemove.k keyup.k\");\n\n                            if (s.eH && s.eH() === false)\n                                return;\n\n                            s.cancel();\n                        }\n                    }\n                )\n                .bind(\n                    \"mouseup.k\",\n                    function (e) {\n                        k.c.d.unbind('mousemove.k mouseup.k keyup.k');\n                        s.val(s.cv);\n                    }\n                );\n\n            return this;\n        };\n\n        this._xy = function () {\n            var o = this.$c.offset();\n            this.x = o.left;\n            this.y = o.top;\n\n            return this;\n        };\n\n        this._listen = function () {\n            if (!this.o.readOnly) {\n                this.$c\n                    .bind(\n                        \"mousedown\",\n                        function (e) {\n                            e.preventDefault();\n                            s._xy()._mouse(e);\n                        }\n                    )\n                    .bind(\n                        \"touchstart\",\n                        function (e) {\n                            e.preventDefault();\n                            s._xy()._touch(e);\n                        }\n                    );\n\n                this.listen();\n            } else {\n                this.$.attr('readonly', 'readonly');\n            }\n\n            if (this.relative) {\n                $(window).resize(function() {\n                    s._carve().init();\n                    s._draw();\n                });\n            }\n\n            return this;\n        };\n\n        this._configure = function () {\n\n            // Hooks\n            if (this.o.draw) this.dH = this.o.draw;\n            if (this.o.change) this.cH = this.o.change;\n            if (this.o.cancel) this.eH = this.o.cancel;\n            if (this.o.release) this.rH = this.o.release;\n\n            if (this.o.displayPrevious) {\n                this.pColor = this.h2rgba(this.o.fgColor, \"0.4\");\n                this.fgColor = this.h2rgba(this.o.fgColor, \"0.6\");\n            } else {\n                this.fgColor = this.o.fgColor;\n            }\n\n            return this;\n        };\n\n        this._clear = function () {\n            this.$c[0].width = this.$c[0].width;\n        };\n\n        this._validate = function (v) {\n            var val = (~~ (((v < 0) ? -0.5 : 0.5) + (v/this.o.step))) * this.o.step;\n            return Math.round(val * 100) / 100;\n        };\n\n        // Abstract methods\n        this.listen = function () {}; // on start, one time\n        this.extend = function () {}; // each time configure triggered\n        this.init = function () {}; // each time configure triggered\n        this.change = function (v) {}; // on change\n        this.val = function (v) {}; // on release\n        this.xy2val = function (x, y) {}; //\n        this.draw = function () {}; // on change / on release\n        this.clear = function () { this._clear(); };\n\n        // Utils\n        this.h2rgba = function (h, a) {\n            var rgb;\n            h = h.substring(1,7)\n            rgb = [\n                parseInt(h.substring(0,2), 16),\n                parseInt(h.substring(2,4), 16),\n                parseInt(h.substring(4,6), 16)\n            ];\n\n            return \"rgba(\" + rgb[0] + \",\" + rgb[1] + \",\" + rgb[2] + \",\" + a + \")\";\n        };\n\n        this.copy = function (f, t) {\n            for (var i in f) {\n                t[i] = f[i];\n            }\n        };\n    };\n\n\n    /**\n     * k.Dial\n     */\n    k.Dial = function () {\n        k.o.call(this);\n\n        this.startAngle = null;\n        this.xy = null;\n        this.radius = null;\n        this.lineWidth = null;\n        this.cursorExt = null;\n        this.w2 = null;\n        this.PI2 = 2*Math.PI;\n\n        this.extend = function () {\n            this.o = $.extend({\n                bgColor: this.$.data('bgcolor') || '#EEEEEE',\n                angleOffset: this.$.data('angleoffset') || 0,\n                angleArc: this.$.data('anglearc') || 360,\n                inline: true\n            }, this.o);\n        };\n\n        this.val = function (v, triggerRelease) {\n            if (null != v) {\n\n                // reverse format\n                v = this.o.parse(v);\n\n                if (triggerRelease !== false\n                    && v != this.v\n                    && this.rH\n                    && this.rH(v) === false) { return; }\n\n                this.cv = this.o.stopper ? max(min(v, this.o.max), this.o.min) : v;\n                this.v = this.cv;\n                this.$.val(this.o.format(this.v));\n                this._draw();\n            } else {\n                return this.v;\n            }\n        };\n\n        this.xy2val = function (x, y) {\n            var a, ret;\n\n            a = Math.atan2(\n                        x - (this.x + this.w2),\n                        - (y - this.y - this.w2)\n                    ) - this.angleOffset;\n\n            if (this.o.flip) {\n                a = this.angleArc - a - this.PI2;\n            }\n\n            if (this.angleArc != this.PI2 && (a < 0) && (a > -0.5)) {\n\n                // if isset angleArc option, set to min if .5 under min\n                a = 0;\n            } else if (a < 0) {\n                a += this.PI2;\n            }\n\n            ret = (a * (this.o.max - this.o.min) / this.angleArc) + this.o.min;\n\n            this.o.stopper && (ret = max(min(ret, this.o.max), this.o.min));\n\n            return ret;\n        };\n\n        this.listen = function () {\n\n            // bind MouseWheel\n            var s = this, mwTimerStop,\n                mwTimerRelease,\n                mw = function (e) {\n                    e.preventDefault();\n\n                    var ori = e.originalEvent,\n                        deltaX = ori.detail || ori.wheelDeltaX,\n                        deltaY = ori.detail || ori.wheelDeltaY,\n                        v = s._validate(s.o.parse(s.$.val()))\n                            + (\n                                deltaX > 0 || deltaY > 0\n                                ? s.o.step\n                                : deltaX < 0 || deltaY < 0 ? -s.o.step : 0\n                              );\n\n                    v = max(min(v, s.o.max), s.o.min);\n\n                    s.val(v, false);\n\n                    if (s.rH) {\n                        // Handle mousewheel stop\n                        clearTimeout(mwTimerStop);\n                        mwTimerStop = setTimeout(function () {\n                            s.rH(v);\n                            mwTimerStop = null;\n                        }, 100);\n\n                        // Handle mousewheel releases\n                        if (!mwTimerRelease) {\n                            mwTimerRelease = setTimeout(function () {\n                                if (mwTimerStop)\n                                    s.rH(v);\n                                mwTimerRelease = null;\n                            }, 200);\n                        }\n                    }\n                },\n                kval,\n                to,\n                m = 1,\n                kv = {\n                    37: -s.o.step,\n                    38: s.o.step,\n                    39: s.o.step,\n                    40: -s.o.step\n                };\n\n            this.$\n                .bind(\n                    \"keydown\",\n                    function (e) {\n                        var kc = e.keyCode;\n\n                        // numpad support\n                        if (kc >= 96 && kc <= 105) {\n                            kc = e.keyCode = kc - 48;\n                        }\n\n                        kval = parseInt(String.fromCharCode(kc));\n\n                        if (isNaN(kval)) {\n                            (kc !== 13)                     // enter\n                            && kc !== 8                     // bs\n                            && kc !== 9                     // tab\n                            && kc !== 189                   // -\n                            && (kc !== 190\n                                || s.$.val().match(/\\./))   // . allowed once\n                            && e.preventDefault();\n\n                            // arrows\n                            if ($.inArray(kc,[37,38,39,40]) > -1) {\n                                e.preventDefault();\n\n                                var v = s.o.parse(s.$.val()) + kv[kc] * m;\n                                s.o.stopper && (v = max(min(v, s.o.max), s.o.min));\n\n                                s.change(s._validate(v));\n                                s._draw();\n\n                                // long time keydown speed-up\n                                to = window.setTimeout(function () {\n                                    m *= 2;\n                                }, 30);\n                            }\n                        }\n                    }\n                )\n                .bind(\n                    \"keyup\",\n                    function (e) {\n                        if (isNaN(kval)) {\n                            if (to) {\n                                window.clearTimeout(to);\n                                to = null;\n                                m = 1;\n                                s.val(s.$.val());\n                            }\n                        } else {\n                            // kval postcond\n                            (s.$.val() > s.o.max && s.$.val(s.o.max))\n                            || (s.$.val() < s.o.min && s.$.val(s.o.min));\n                        }\n                    }\n                );\n\n            this.$c.bind(\"mousewheel DOMMouseScroll\", mw);\n            this.$.bind(\"mousewheel DOMMouseScroll\", mw)\n        };\n\n        this.init = function () {\n            if (this.v < this.o.min\n                || this.v > this.o.max) { this.v = this.o.min; }\n\n            this.$.val(this.v);\n            this.w2 = this.w / 2;\n            this.cursorExt = this.o.cursor / 100;\n            this.xy = this.w2 * this.scale;\n            this.lineWidth = this.xy * this.o.thickness;\n            this.lineCap = this.o.lineCap;\n            this.radius = this.xy - this.lineWidth / 2;\n\n            this.o.angleOffset\n            && (this.o.angleOffset = isNaN(this.o.angleOffset) ? 0 : this.o.angleOffset);\n\n            this.o.angleArc\n            && (this.o.angleArc = isNaN(this.o.angleArc) ? this.PI2 : this.o.angleArc);\n\n            // deg to rad\n            this.angleOffset = this.o.angleOffset * Math.PI / 180;\n            this.angleArc = this.o.angleArc * Math.PI / 180;\n\n            // compute start and end angles\n            this.startAngle = 1.5 * Math.PI + this.angleOffset;\n            this.endAngle = 1.5 * Math.PI + this.angleOffset + this.angleArc;\n\n            var s = max(\n                String(Math.abs(this.o.max)).length,\n                String(Math.abs(this.o.min)).length,\n                2\n            ) + 2;\n\n            this.o.displayInput\n                && this.i.css({\n                        'width' : ((this.w / 2 + 4) >> 0) + 'px',\n                        'height' : ((this.w / 3) >> 0) + 'px',\n                        'position' : 'absolute',\n                        'vertical-align' : 'middle',\n                        'margin-top' : ((this.w / 3) >> 0) + 'px',\n                        'margin-left' : '-' + ((this.w * 3 / 4 + 2) >> 0) + 'px',\n                        'border' : 0,\n                        'background' : 'none',\n                        'font' : this.o.fontWeight + ' ' + ((this.w / s) >> 0) + 'px ' + this.o.font,\n                        'text-align' : 'center',\n                        'color' : this.o.inputColor || this.o.fgColor,\n                        'padding' : '0px',\n                        '-webkit-appearance': 'none'\n                        }) || this.i.css({\n                            'width': '0px',\n                            'visibility': 'hidden'\n                        });\n        };\n\n        this.change = function (v) {\n            this.cv = v;\n            this.$.val(this.o.format(v));\n        };\n\n        this.angle = function (v) {\n            return (v - this.o.min) * this.angleArc / (this.o.max - this.o.min);\n        };\n\n        this.arc = function (v) {\n          var sa, ea;\n          v = this.angle(v);\n          if (this.o.flip) {\n              sa = this.endAngle + 0.00001;\n              ea = sa - v - 0.00001;\n          } else {\n              sa = this.startAngle - 0.00001;\n              ea = sa + v + 0.00001;\n          }\n          this.o.cursor\n              && (sa = ea - this.cursorExt)\n              && (ea = ea + this.cursorExt);\n\n          return {\n              s: sa,\n              e: ea,\n              d: this.o.flip && !this.o.cursor\n          };\n        };\n\n        this.draw = function () {\n            var c = this.g,                 // context\n                a = this.arc(this.cv),      // Arc\n                pa,                         // Previous arc\n                r = 1;\n\n            c.lineWidth = this.lineWidth;\n            c.lineCap = this.lineCap;\n\n            if (this.o.bgColor !== \"none\") {\n                c.beginPath();\n                    c.strokeStyle = this.o.bgColor;\n                    c.arc(this.xy, this.xy, this.radius, this.endAngle - 0.00001, this.startAngle + 0.00001, true);\n                c.stroke();\n            }\n\n            if (this.o.displayPrevious) {\n                pa = this.arc(this.v);\n                c.beginPath();\n                c.strokeStyle = this.pColor;\n                c.arc(this.xy, this.xy, this.radius, pa.s, pa.e, pa.d);\n                c.stroke();\n                r = this.cv == this.v;\n            }\n\n            c.beginPath();\n            c.strokeStyle = r ? this.o.fgColor : this.fgColor ;\n            c.arc(this.xy, this.xy, this.radius, a.s, a.e, a.d);\n            c.stroke();\n        };\n\n        this.cancel = function () {\n            this.val(this.v);\n        };\n    };\n\n    $.fn.dial = $.fn.knob = function (o) {\n        return this.each(\n            function () {\n                var d = new k.Dial();\n                d.o = o;\n                d.$ = $(this);\n                d.run();\n            }\n        ).parent();\n    };\n\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/morris/morris.css",
    "content": ".morris-hover{position:absolute;z-index:1090;}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#f9f9f9;background:rgba(0, 0, 0, 0.8);border:solid 2px rgba(0, 0, 0, 0.9);font-weight: 600;font-size:14px;text-align:center;}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0;}\n.morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0;}\n"
  },
  {
    "path": "public/adminlte/plugins/morris/morris.js",
    "content": "/* @license\nmorris.js v0.5.0\nCopyright 2014 Olly Smith All rights reserved.\nLicensed under the BSD-2-Clause License.\n*/\n\n\n(function() {\n  var $, Morris, minutesSpecHelper, secondsSpecHelper,\n    __slice = [].slice,\n    __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n    __hasProp = {}.hasOwnProperty,\n    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n  Morris = window.Morris = {};\n\n  $ = jQuery;\n\n  Morris.EventEmitter = (function() {\n    function EventEmitter() {}\n\n    EventEmitter.prototype.on = function(name, handler) {\n      if (this.handlers == null) {\n        this.handlers = {};\n      }\n      if (this.handlers[name] == null) {\n        this.handlers[name] = [];\n      }\n      this.handlers[name].push(handler);\n      return this;\n    };\n\n    EventEmitter.prototype.fire = function() {\n      var args, handler, name, _i, _len, _ref, _results;\n      name = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n      if ((this.handlers != null) && (this.handlers[name] != null)) {\n        _ref = this.handlers[name];\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          handler = _ref[_i];\n          _results.push(handler.apply(null, args));\n        }\n        return _results;\n      }\n    };\n\n    return EventEmitter;\n\n  })();\n\n  Morris.commas = function(num) {\n    var absnum, intnum, ret, strabsnum;\n    if (num != null) {\n      ret = num < 0 ? \"-\" : \"\";\n      absnum = Math.abs(num);\n      intnum = Math.floor(absnum).toFixed(0);\n      ret += intnum.replace(/(?=(?:\\d{3})+$)(?!^)/g, ',');\n      strabsnum = absnum.toString();\n      if (strabsnum.length > intnum.length) {\n        ret += strabsnum.slice(intnum.length);\n      }\n      return ret;\n    } else {\n      return '-';\n    }\n  };\n\n  Morris.pad2 = function(number) {\n    return (number < 10 ? '0' : '') + number;\n  };\n\n  Morris.Grid = (function(_super) {\n    __extends(Grid, _super);\n\n    function Grid(options) {\n      this.resizeHandler = __bind(this.resizeHandler, this);\n      var _this = this;\n      if (typeof options.element === 'string') {\n        this.el = $(document.getElementById(options.element));\n      } else {\n        this.el = $(options.element);\n      }\n      if ((this.el == null) || this.el.length === 0) {\n        throw new Error(\"Graph container element not found\");\n      }\n      if (this.el.css('position') === 'static') {\n        this.el.css('position', 'relative');\n      }\n      this.options = $.extend({}, this.gridDefaults, this.defaults || {}, options);\n      if (typeof this.options.units === 'string') {\n        this.options.postUnits = options.units;\n      }\n      this.raphael = new Raphael(this.el[0]);\n      this.elementWidth = null;\n      this.elementHeight = null;\n      this.dirty = false;\n      this.selectFrom = null;\n      if (this.init) {\n        this.init();\n      }\n      this.setData(this.options.data);\n      this.el.bind('mousemove', function(evt) {\n        var left, offset, right, width, x;\n        offset = _this.el.offset();\n        x = evt.pageX - offset.left;\n        if (_this.selectFrom) {\n          left = _this.data[_this.hitTest(Math.min(x, _this.selectFrom))]._x;\n          right = _this.data[_this.hitTest(Math.max(x, _this.selectFrom))]._x;\n          width = right - left;\n          return _this.selectionRect.attr({\n            x: left,\n            width: width\n          });\n        } else {\n          return _this.fire('hovermove', x, evt.pageY - offset.top);\n        }\n      });\n      this.el.bind('mouseleave', function(evt) {\n        if (_this.selectFrom) {\n          _this.selectionRect.hide();\n          _this.selectFrom = null;\n        }\n        return _this.fire('hoverout');\n      });\n      this.el.bind('touchstart touchmove touchend', function(evt) {\n        var offset, touch;\n        touch = evt.originalEvent.touches[0] || evt.originalEvent.changedTouches[0];\n        offset = _this.el.offset();\n        return _this.fire('hovermove', touch.pageX - offset.left, touch.pageY - offset.top);\n      });\n      this.el.bind('click', function(evt) {\n        var offset;\n        offset = _this.el.offset();\n        return _this.fire('gridclick', evt.pageX - offset.left, evt.pageY - offset.top);\n      });\n      if (this.options.rangeSelect) {\n        this.selectionRect = this.raphael.rect(0, 0, 0, this.el.innerHeight()).attr({\n          fill: this.options.rangeSelectColor,\n          stroke: false\n        }).toBack().hide();\n        this.el.bind('mousedown', function(evt) {\n          var offset;\n          offset = _this.el.offset();\n          return _this.startRange(evt.pageX - offset.left);\n        });\n        this.el.bind('mouseup', function(evt) {\n          var offset;\n          offset = _this.el.offset();\n          _this.endRange(evt.pageX - offset.left);\n          return _this.fire('hovermove', evt.pageX - offset.left, evt.pageY - offset.top);\n        });\n      }\n      if (this.options.resize) {\n        $(window).bind('resize', function(evt) {\n          if (_this.timeoutId != null) {\n            window.clearTimeout(_this.timeoutId);\n          }\n          return _this.timeoutId = window.setTimeout(_this.resizeHandler, 100);\n        });\n      }\n      this.el.css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)');\n      if (this.postInit) {\n        this.postInit();\n      }\n    }\n\n    Grid.prototype.gridDefaults = {\n      dateFormat: null,\n      axes: true,\n      grid: true,\n      gridLineColor: '#aaa',\n      gridStrokeWidth: 0.5,\n      gridTextColor: '#888',\n      gridTextSize: 12,\n      gridTextFamily: 'sans-serif',\n      gridTextWeight: 'normal',\n      hideHover: false,\n      yLabelFormat: null,\n      xLabelAngle: 0,\n      numLines: 5,\n      padding: 25,\n      parseTime: true,\n      postUnits: '',\n      preUnits: '',\n      ymax: 'auto',\n      ymin: 'auto 0',\n      goals: [],\n      goalStrokeWidth: 1.0,\n      goalLineColors: ['#666633', '#999966', '#cc6666', '#663333'],\n      events: [],\n      eventStrokeWidth: 1.0,\n      eventLineColors: ['#005a04', '#ccffbb', '#3a5f0b', '#005502'],\n      rangeSelect: null,\n      rangeSelectColor: '#eef',\n      resize: false\n    };\n\n    Grid.prototype.setData = function(data, redraw) {\n      var e, idx, index, maxGoal, minGoal, ret, row, step, total, y, ykey, ymax, ymin, yval, _ref;\n      if (redraw == null) {\n        redraw = true;\n      }\n      this.options.data = data;\n      if ((data == null) || data.length === 0) {\n        this.data = [];\n        this.raphael.clear();\n        if (this.hover != null) {\n          this.hover.hide();\n        }\n        return;\n      }\n      ymax = this.cumulative ? 0 : null;\n      ymin = this.cumulative ? 0 : null;\n      if (this.options.goals.length > 0) {\n        minGoal = Math.min.apply(Math, this.options.goals);\n        maxGoal = Math.max.apply(Math, this.options.goals);\n        ymin = ymin != null ? Math.min(ymin, minGoal) : minGoal;\n        ymax = ymax != null ? Math.max(ymax, maxGoal) : maxGoal;\n      }\n      this.data = (function() {\n        var _i, _len, _results;\n        _results = [];\n        for (index = _i = 0, _len = data.length; _i < _len; index = ++_i) {\n          row = data[index];\n          ret = {\n            src: row\n          };\n          ret.label = row[this.options.xkey];\n          if (this.options.parseTime) {\n            ret.x = Morris.parseDate(ret.label);\n            if (this.options.dateFormat) {\n              ret.label = this.options.dateFormat(ret.x);\n            } else if (typeof ret.label === 'number') {\n              ret.label = new Date(ret.label).toString();\n            }\n          } else {\n            ret.x = index;\n            if (this.options.xLabelFormat) {\n              ret.label = this.options.xLabelFormat(ret);\n            }\n          }\n          total = 0;\n          ret.y = (function() {\n            var _j, _len1, _ref, _results1;\n            _ref = this.options.ykeys;\n            _results1 = [];\n            for (idx = _j = 0, _len1 = _ref.length; _j < _len1; idx = ++_j) {\n              ykey = _ref[idx];\n              yval = row[ykey];\n              if (typeof yval === 'string') {\n                yval = parseFloat(yval);\n              }\n              if ((yval != null) && typeof yval !== 'number') {\n                yval = null;\n              }\n              if (yval != null) {\n                if (this.cumulative) {\n                  total += yval;\n                } else {\n                  if (ymax != null) {\n                    ymax = Math.max(yval, ymax);\n                    ymin = Math.min(yval, ymin);\n                  } else {\n                    ymax = ymin = yval;\n                  }\n                }\n              }\n              if (this.cumulative && (total != null)) {\n                ymax = Math.max(total, ymax);\n                ymin = Math.min(total, ymin);\n              }\n              _results1.push(yval);\n            }\n            return _results1;\n          }).call(this);\n          _results.push(ret);\n        }\n        return _results;\n      }).call(this);\n      if (this.options.parseTime) {\n        this.data = this.data.sort(function(a, b) {\n          return (a.x > b.x) - (b.x > a.x);\n        });\n      }\n      this.xmin = this.data[0].x;\n      this.xmax = this.data[this.data.length - 1].x;\n      this.events = [];\n      if (this.options.events.length > 0) {\n        if (this.options.parseTime) {\n          this.events = (function() {\n            var _i, _len, _ref, _results;\n            _ref = this.options.events;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n              e = _ref[_i];\n              _results.push(Morris.parseDate(e));\n            }\n            return _results;\n          }).call(this);\n        } else {\n          this.events = this.options.events;\n        }\n        this.xmax = Math.max(this.xmax, Math.max.apply(Math, this.events));\n        this.xmin = Math.min(this.xmin, Math.min.apply(Math, this.events));\n      }\n      if (this.xmin === this.xmax) {\n        this.xmin -= 1;\n        this.xmax += 1;\n      }\n      this.ymin = this.yboundary('min', ymin);\n      this.ymax = this.yboundary('max', ymax);\n      if (this.ymin === this.ymax) {\n        if (ymin) {\n          this.ymin -= 1;\n        }\n        this.ymax += 1;\n      }\n      if (((_ref = this.options.axes) === true || _ref === 'both' || _ref === 'y') || this.options.grid === true) {\n        if (this.options.ymax === this.gridDefaults.ymax && this.options.ymin === this.gridDefaults.ymin) {\n          this.grid = this.autoGridLines(this.ymin, this.ymax, this.options.numLines);\n          this.ymin = Math.min(this.ymin, this.grid[0]);\n          this.ymax = Math.max(this.ymax, this.grid[this.grid.length - 1]);\n        } else {\n          step = (this.ymax - this.ymin) / (this.options.numLines - 1);\n          this.grid = (function() {\n            var _i, _ref1, _ref2, _results;\n            _results = [];\n            for (y = _i = _ref1 = this.ymin, _ref2 = this.ymax; step > 0 ? _i <= _ref2 : _i >= _ref2; y = _i += step) {\n              _results.push(y);\n            }\n            return _results;\n          }).call(this);\n        }\n      }\n      this.dirty = true;\n      if (redraw) {\n        return this.redraw();\n      }\n    };\n\n    Grid.prototype.yboundary = function(boundaryType, currentValue) {\n      var boundaryOption, suggestedValue;\n      boundaryOption = this.options[\"y\" + boundaryType];\n      if (typeof boundaryOption === 'string') {\n        if (boundaryOption.slice(0, 4) === 'auto') {\n          if (boundaryOption.length > 5) {\n            suggestedValue = parseInt(boundaryOption.slice(5), 10);\n            if (currentValue == null) {\n              return suggestedValue;\n            }\n            return Math[boundaryType](currentValue, suggestedValue);\n          } else {\n            if (currentValue != null) {\n              return currentValue;\n            } else {\n              return 0;\n            }\n          }\n        } else {\n          return parseInt(boundaryOption, 10);\n        }\n      } else {\n        return boundaryOption;\n      }\n    };\n\n    Grid.prototype.autoGridLines = function(ymin, ymax, nlines) {\n      var gmax, gmin, grid, smag, span, step, unit, y, ymag;\n      span = ymax - ymin;\n      ymag = Math.floor(Math.log(span) / Math.log(10));\n      unit = Math.pow(10, ymag);\n      gmin = Math.floor(ymin / unit) * unit;\n      gmax = Math.ceil(ymax / unit) * unit;\n      step = (gmax - gmin) / (nlines - 1);\n      if (unit === 1 && step > 1 && Math.ceil(step) !== step) {\n        step = Math.ceil(step);\n        gmax = gmin + step * (nlines - 1);\n      }\n      if (gmin < 0 && gmax > 0) {\n        gmin = Math.floor(ymin / step) * step;\n        gmax = Math.ceil(ymax / step) * step;\n      }\n      if (step < 1) {\n        smag = Math.floor(Math.log(step) / Math.log(10));\n        grid = (function() {\n          var _i, _results;\n          _results = [];\n          for (y = _i = gmin; step > 0 ? _i <= gmax : _i >= gmax; y = _i += step) {\n            _results.push(parseFloat(y.toFixed(1 - smag)));\n          }\n          return _results;\n        })();\n      } else {\n        grid = (function() {\n          var _i, _results;\n          _results = [];\n          for (y = _i = gmin; step > 0 ? _i <= gmax : _i >= gmax; y = _i += step) {\n            _results.push(y);\n          }\n          return _results;\n        })();\n      }\n      return grid;\n    };\n\n    Grid.prototype._calc = function() {\n      var bottomOffsets, gridLine, h, i, w, yLabelWidths, _ref, _ref1;\n      w = this.el.width();\n      h = this.el.height();\n      if (this.elementWidth !== w || this.elementHeight !== h || this.dirty) {\n        this.elementWidth = w;\n        this.elementHeight = h;\n        this.dirty = false;\n        this.left = this.options.padding;\n        this.right = this.elementWidth - this.options.padding;\n        this.top = this.options.padding;\n        this.bottom = this.elementHeight - this.options.padding;\n        if ((_ref = this.options.axes) === true || _ref === 'both' || _ref === 'y') {\n          yLabelWidths = (function() {\n            var _i, _len, _ref1, _results;\n            _ref1 = this.grid;\n            _results = [];\n            for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n              gridLine = _ref1[_i];\n              _results.push(this.measureText(this.yAxisFormat(gridLine)).width);\n            }\n            return _results;\n          }).call(this);\n          this.left += Math.max.apply(Math, yLabelWidths);\n        }\n        if ((_ref1 = this.options.axes) === true || _ref1 === 'both' || _ref1 === 'x') {\n          bottomOffsets = (function() {\n            var _i, _ref2, _results;\n            _results = [];\n            for (i = _i = 0, _ref2 = this.data.length; 0 <= _ref2 ? _i < _ref2 : _i > _ref2; i = 0 <= _ref2 ? ++_i : --_i) {\n              _results.push(this.measureText(this.data[i].text, -this.options.xLabelAngle).height);\n            }\n            return _results;\n          }).call(this);\n          this.bottom -= Math.max.apply(Math, bottomOffsets);\n        }\n        this.width = Math.max(1, this.right - this.left);\n        this.height = Math.max(1, this.bottom - this.top);\n        this.dx = this.width / (this.xmax - this.xmin);\n        this.dy = this.height / (this.ymax - this.ymin);\n        if (this.calc) {\n          return this.calc();\n        }\n      }\n    };\n\n    Grid.prototype.transY = function(y) {\n      return this.bottom - (y - this.ymin) * this.dy;\n    };\n\n    Grid.prototype.transX = function(x) {\n      if (this.data.length === 1) {\n        return (this.left + this.right) / 2;\n      } else {\n        return this.left + (x - this.xmin) * this.dx;\n      }\n    };\n\n    Grid.prototype.redraw = function() {\n      this.raphael.clear();\n      this._calc();\n      this.drawGrid();\n      this.drawGoals();\n      this.drawEvents();\n      if (this.draw) {\n        return this.draw();\n      }\n    };\n\n    Grid.prototype.measureText = function(text, angle) {\n      var ret, tt;\n      if (angle == null) {\n        angle = 0;\n      }\n      tt = this.raphael.text(100, 100, text).attr('font-size', this.options.gridTextSize).attr('font-family', this.options.gridTextFamily).attr('font-weight', this.options.gridTextWeight).rotate(angle);\n      ret = tt.getBBox();\n      tt.remove();\n      return ret;\n    };\n\n    Grid.prototype.yAxisFormat = function(label) {\n      return this.yLabelFormat(label);\n    };\n\n    Grid.prototype.yLabelFormat = function(label) {\n      if (typeof this.options.yLabelFormat === 'function') {\n        return this.options.yLabelFormat(label);\n      } else {\n        return \"\" + this.options.preUnits + (Morris.commas(label)) + this.options.postUnits;\n      }\n    };\n\n    Grid.prototype.drawGrid = function() {\n      var lineY, y, _i, _len, _ref, _ref1, _ref2, _results;\n      if (this.options.grid === false && ((_ref = this.options.axes) !== true && _ref !== 'both' && _ref !== 'y')) {\n        return;\n      }\n      _ref1 = this.grid;\n      _results = [];\n      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n        lineY = _ref1[_i];\n        y = this.transY(lineY);\n        if ((_ref2 = this.options.axes) === true || _ref2 === 'both' || _ref2 === 'y') {\n          this.drawYAxisLabel(this.left - this.options.padding / 2, y, this.yAxisFormat(lineY));\n        }\n        if (this.options.grid) {\n          _results.push(this.drawGridLine(\"M\" + this.left + \",\" + y + \"H\" + (this.left + this.width)));\n        } else {\n          _results.push(void 0);\n        }\n      }\n      return _results;\n    };\n\n    Grid.prototype.drawGoals = function() {\n      var color, goal, i, _i, _len, _ref, _results;\n      _ref = this.options.goals;\n      _results = [];\n      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n        goal = _ref[i];\n        color = this.options.goalLineColors[i % this.options.goalLineColors.length];\n        _results.push(this.drawGoal(goal, color));\n      }\n      return _results;\n    };\n\n    Grid.prototype.drawEvents = function() {\n      var color, event, i, _i, _len, _ref, _results;\n      _ref = this.events;\n      _results = [];\n      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n        event = _ref[i];\n        color = this.options.eventLineColors[i % this.options.eventLineColors.length];\n        _results.push(this.drawEvent(event, color));\n      }\n      return _results;\n    };\n\n    Grid.prototype.drawGoal = function(goal, color) {\n      return this.raphael.path(\"M\" + this.left + \",\" + (this.transY(goal)) + \"H\" + this.right).attr('stroke', color).attr('stroke-width', this.options.goalStrokeWidth);\n    };\n\n    Grid.prototype.drawEvent = function(event, color) {\n      return this.raphael.path(\"M\" + (this.transX(event)) + \",\" + this.bottom + \"V\" + this.top).attr('stroke', color).attr('stroke-width', this.options.eventStrokeWidth);\n    };\n\n    Grid.prototype.drawYAxisLabel = function(xPos, yPos, text) {\n      return this.raphael.text(xPos, yPos, text).attr('font-size', this.options.gridTextSize).attr('font-family', this.options.gridTextFamily).attr('font-weight', this.options.gridTextWeight).attr('fill', this.options.gridTextColor).attr('text-anchor', 'end');\n    };\n\n    Grid.prototype.drawGridLine = function(path) {\n      return this.raphael.path(path).attr('stroke', this.options.gridLineColor).attr('stroke-width', this.options.gridStrokeWidth);\n    };\n\n    Grid.prototype.startRange = function(x) {\n      this.hover.hide();\n      this.selectFrom = x;\n      return this.selectionRect.attr({\n        x: x,\n        width: 0\n      }).show();\n    };\n\n    Grid.prototype.endRange = function(x) {\n      var end, start;\n      if (this.selectFrom) {\n        start = Math.min(this.selectFrom, x);\n        end = Math.max(this.selectFrom, x);\n        this.options.rangeSelect.call(this.el, {\n          start: this.data[this.hitTest(start)].x,\n          end: this.data[this.hitTest(end)].x\n        });\n        return this.selectFrom = null;\n      }\n    };\n\n    Grid.prototype.resizeHandler = function() {\n      this.timeoutId = null;\n      this.raphael.setSize(this.el.width(), this.el.height());\n      return this.redraw();\n    };\n\n    return Grid;\n\n  })(Morris.EventEmitter);\n\n  Morris.parseDate = function(date) {\n    var isecs, m, msecs, n, o, offsetmins, p, q, r, ret, secs;\n    if (typeof date === 'number') {\n      return date;\n    }\n    m = date.match(/^(\\d+) Q(\\d)$/);\n    n = date.match(/^(\\d+)-(\\d+)$/);\n    o = date.match(/^(\\d+)-(\\d+)-(\\d+)$/);\n    p = date.match(/^(\\d+) W(\\d+)$/);\n    q = date.match(/^(\\d+)-(\\d+)-(\\d+)[ T](\\d+):(\\d+)(Z|([+-])(\\d\\d):?(\\d\\d))?$/);\n    r = date.match(/^(\\d+)-(\\d+)-(\\d+)[ T](\\d+):(\\d+):(\\d+(\\.\\d+)?)(Z|([+-])(\\d\\d):?(\\d\\d))?$/);\n    if (m) {\n      return new Date(parseInt(m[1], 10), parseInt(m[2], 10) * 3 - 1, 1).getTime();\n    } else if (n) {\n      return new Date(parseInt(n[1], 10), parseInt(n[2], 10) - 1, 1).getTime();\n    } else if (o) {\n      return new Date(parseInt(o[1], 10), parseInt(o[2], 10) - 1, parseInt(o[3], 10)).getTime();\n    } else if (p) {\n      ret = new Date(parseInt(p[1], 10), 0, 1);\n      if (ret.getDay() !== 4) {\n        ret.setMonth(0, 1 + ((4 - ret.getDay()) + 7) % 7);\n      }\n      return ret.getTime() + parseInt(p[2], 10) * 604800000;\n    } else if (q) {\n      if (!q[6]) {\n        return new Date(parseInt(q[1], 10), parseInt(q[2], 10) - 1, parseInt(q[3], 10), parseInt(q[4], 10), parseInt(q[5], 10)).getTime();\n      } else {\n        offsetmins = 0;\n        if (q[6] !== 'Z') {\n          offsetmins = parseInt(q[8], 10) * 60 + parseInt(q[9], 10);\n          if (q[7] === '+') {\n            offsetmins = 0 - offsetmins;\n          }\n        }\n        return Date.UTC(parseInt(q[1], 10), parseInt(q[2], 10) - 1, parseInt(q[3], 10), parseInt(q[4], 10), parseInt(q[5], 10) + offsetmins);\n      }\n    } else if (r) {\n      secs = parseFloat(r[6]);\n      isecs = Math.floor(secs);\n      msecs = Math.round((secs - isecs) * 1000);\n      if (!r[8]) {\n        return new Date(parseInt(r[1], 10), parseInt(r[2], 10) - 1, parseInt(r[3], 10), parseInt(r[4], 10), parseInt(r[5], 10), isecs, msecs).getTime();\n      } else {\n        offsetmins = 0;\n        if (r[8] !== 'Z') {\n          offsetmins = parseInt(r[10], 10) * 60 + parseInt(r[11], 10);\n          if (r[9] === '+') {\n            offsetmins = 0 - offsetmins;\n          }\n        }\n        return Date.UTC(parseInt(r[1], 10), parseInt(r[2], 10) - 1, parseInt(r[3], 10), parseInt(r[4], 10), parseInt(r[5], 10) + offsetmins, isecs, msecs);\n      }\n    } else {\n      return new Date(parseInt(date, 10), 0, 1).getTime();\n    }\n  };\n\n  Morris.Hover = (function() {\n    Hover.defaults = {\n      \"class\": 'morris-hover morris-default-style'\n    };\n\n    function Hover(options) {\n      if (options == null) {\n        options = {};\n      }\n      this.options = $.extend({}, Morris.Hover.defaults, options);\n      this.el = $(\"<div class='\" + this.options[\"class\"] + \"'></div>\");\n      this.el.hide();\n      this.options.parent.append(this.el);\n    }\n\n    Hover.prototype.update = function(html, x, y) {\n      if (!html) {\n        return this.hide();\n      } else {\n        this.html(html);\n        this.show();\n        return this.moveTo(x, y);\n      }\n    };\n\n    Hover.prototype.html = function(content) {\n      return this.el.html(content);\n    };\n\n    Hover.prototype.moveTo = function(x, y) {\n      var hoverHeight, hoverWidth, left, parentHeight, parentWidth, top;\n      parentWidth = this.options.parent.innerWidth();\n      parentHeight = this.options.parent.innerHeight();\n      hoverWidth = this.el.outerWidth();\n      hoverHeight = this.el.outerHeight();\n      left = Math.min(Math.max(0, x - hoverWidth / 2), parentWidth - hoverWidth);\n      if (y != null) {\n        top = y - hoverHeight - 10;\n        if (top < 0) {\n          top = y + 10;\n          if (top + hoverHeight > parentHeight) {\n            top = parentHeight / 2 - hoverHeight / 2;\n          }\n        }\n      } else {\n        top = parentHeight / 2 - hoverHeight / 2;\n      }\n      return this.el.css({\n        left: left + \"px\",\n        top: parseInt(top) + \"px\"\n      });\n    };\n\n    Hover.prototype.show = function() {\n      return this.el.show();\n    };\n\n    Hover.prototype.hide = function() {\n      return this.el.hide();\n    };\n\n    return Hover;\n\n  })();\n\n  Morris.Line = (function(_super) {\n    __extends(Line, _super);\n\n    function Line(options) {\n      this.hilight = __bind(this.hilight, this);\n      this.onHoverOut = __bind(this.onHoverOut, this);\n      this.onHoverMove = __bind(this.onHoverMove, this);\n      this.onGridClick = __bind(this.onGridClick, this);\n      if (!(this instanceof Morris.Line)) {\n        return new Morris.Line(options);\n      }\n      Line.__super__.constructor.call(this, options);\n    }\n\n    Line.prototype.init = function() {\n      if (this.options.hideHover !== 'always') {\n        this.hover = new Morris.Hover({\n          parent: this.el\n        });\n        this.on('hovermove', this.onHoverMove);\n        this.on('hoverout', this.onHoverOut);\n        return this.on('gridclick', this.onGridClick);\n      }\n    };\n\n    Line.prototype.defaults = {\n      lineWidth: 3,\n      pointSize: 4,\n      lineColors: ['#0b62a4', '#7A92A3', '#4da74d', '#afd8f8', '#edc240', '#cb4b4b', '#9440ed'],\n      pointStrokeWidths: [1],\n      pointStrokeColors: ['#ffffff'],\n      pointFillColors: [],\n      smooth: true,\n      xLabels: 'auto',\n      xLabelFormat: null,\n      xLabelMargin: 24,\n      hideHover: false\n    };\n\n    Line.prototype.calc = function() {\n      this.calcPoints();\n      return this.generatePaths();\n    };\n\n    Line.prototype.calcPoints = function() {\n      var row, y, _i, _len, _ref, _results;\n      _ref = this.data;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        row = _ref[_i];\n        row._x = this.transX(row.x);\n        row._y = (function() {\n          var _j, _len1, _ref1, _results1;\n          _ref1 = row.y;\n          _results1 = [];\n          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n            y = _ref1[_j];\n            if (y != null) {\n              _results1.push(this.transY(y));\n            } else {\n              _results1.push(y);\n            }\n          }\n          return _results1;\n        }).call(this);\n        _results.push(row._ymax = Math.min.apply(Math, [this.bottom].concat((function() {\n          var _j, _len1, _ref1, _results1;\n          _ref1 = row._y;\n          _results1 = [];\n          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n            y = _ref1[_j];\n            if (y != null) {\n              _results1.push(y);\n            }\n          }\n          return _results1;\n        })())));\n      }\n      return _results;\n    };\n\n    Line.prototype.hitTest = function(x) {\n      var index, r, _i, _len, _ref;\n      if (this.data.length === 0) {\n        return null;\n      }\n      _ref = this.data.slice(1);\n      for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) {\n        r = _ref[index];\n        if (x < (r._x + this.data[index]._x) / 2) {\n          break;\n        }\n      }\n      return index;\n    };\n\n    Line.prototype.onGridClick = function(x, y) {\n      var index;\n      index = this.hitTest(x);\n      return this.fire('click', index, this.data[index].src, x, y);\n    };\n\n    Line.prototype.onHoverMove = function(x, y) {\n      var index;\n      index = this.hitTest(x);\n      return this.displayHoverForRow(index);\n    };\n\n    Line.prototype.onHoverOut = function() {\n      if (this.options.hideHover !== false) {\n        return this.displayHoverForRow(null);\n      }\n    };\n\n    Line.prototype.displayHoverForRow = function(index) {\n      var _ref;\n      if (index != null) {\n        (_ref = this.hover).update.apply(_ref, this.hoverContentForRow(index));\n        return this.hilight(index);\n      } else {\n        this.hover.hide();\n        return this.hilight();\n      }\n    };\n\n    Line.prototype.hoverContentForRow = function(index) {\n      var content, j, row, y, _i, _len, _ref;\n      row = this.data[index];\n      content = \"<div class='morris-hover-row-label'>\" + row.label + \"</div>\";\n      _ref = row.y;\n      for (j = _i = 0, _len = _ref.length; _i < _len; j = ++_i) {\n        y = _ref[j];\n        content += \"<div class='morris-hover-point' style='color: \" + (this.colorFor(row, j, 'label')) + \"'>\\n  \" + this.options.labels[j] + \":\\n  \" + (this.yLabelFormat(y)) + \"\\n</div>\";\n      }\n      if (typeof this.options.hoverCallback === 'function') {\n        content = this.options.hoverCallback(index, this.options, content, row.src);\n      }\n      return [content, row._x, row._ymax];\n    };\n\n    Line.prototype.generatePaths = function() {\n      var coords, i, r, smooth;\n      return this.paths = (function() {\n        var _i, _ref, _ref1, _results;\n        _results = [];\n        for (i = _i = 0, _ref = this.options.ykeys.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n          smooth = typeof this.options.smooth === \"boolean\" ? this.options.smooth : (_ref1 = this.options.ykeys[i], __indexOf.call(this.options.smooth, _ref1) >= 0);\n          coords = (function() {\n            var _j, _len, _ref2, _results1;\n            _ref2 = this.data;\n            _results1 = [];\n            for (_j = 0, _len = _ref2.length; _j < _len; _j++) {\n              r = _ref2[_j];\n              if (r._y[i] !== void 0) {\n                _results1.push({\n                  x: r._x,\n                  y: r._y[i]\n                });\n              }\n            }\n            return _results1;\n          }).call(this);\n          if (coords.length > 1) {\n            _results.push(Morris.Line.createPath(coords, smooth, this.bottom));\n          } else {\n            _results.push(null);\n          }\n        }\n        return _results;\n      }).call(this);\n    };\n\n    Line.prototype.draw = function() {\n      var _ref;\n      if ((_ref = this.options.axes) === true || _ref === 'both' || _ref === 'x') {\n        this.drawXAxis();\n      }\n      this.drawSeries();\n      if (this.options.hideHover === false) {\n        return this.displayHoverForRow(this.data.length - 1);\n      }\n    };\n\n    Line.prototype.drawXAxis = function() {\n      var drawLabel, l, labels, prevAngleMargin, prevLabelMargin, row, ypos, _i, _len, _results,\n        _this = this;\n      ypos = this.bottom + this.options.padding / 2;\n      prevLabelMargin = null;\n      prevAngleMargin = null;\n      drawLabel = function(labelText, xpos) {\n        var label, labelBox, margin, offset, textBox;\n        label = _this.drawXAxisLabel(_this.transX(xpos), ypos, labelText);\n        textBox = label.getBBox();\n        label.transform(\"r\" + (-_this.options.xLabelAngle));\n        labelBox = label.getBBox();\n        label.transform(\"t0,\" + (labelBox.height / 2) + \"...\");\n        if (_this.options.xLabelAngle !== 0) {\n          offset = -0.5 * textBox.width * Math.cos(_this.options.xLabelAngle * Math.PI / 180.0);\n          label.transform(\"t\" + offset + \",0...\");\n        }\n        labelBox = label.getBBox();\n        if (((prevLabelMargin == null) || prevLabelMargin >= labelBox.x + labelBox.width || (prevAngleMargin != null) && prevAngleMargin >= labelBox.x) && labelBox.x >= 0 && (labelBox.x + labelBox.width) < _this.el.width()) {\n          if (_this.options.xLabelAngle !== 0) {\n            margin = 1.25 * _this.options.gridTextSize / Math.sin(_this.options.xLabelAngle * Math.PI / 180.0);\n            prevAngleMargin = labelBox.x - margin;\n          }\n          return prevLabelMargin = labelBox.x - _this.options.xLabelMargin;\n        } else {\n          return label.remove();\n        }\n      };\n      if (this.options.parseTime) {\n        if (this.data.length === 1 && this.options.xLabels === 'auto') {\n          labels = [[this.data[0].label, this.data[0].x]];\n        } else {\n          labels = Morris.labelSeries(this.xmin, this.xmax, this.width, this.options.xLabels, this.options.xLabelFormat);\n        }\n      } else {\n        labels = (function() {\n          var _i, _len, _ref, _results;\n          _ref = this.data;\n          _results = [];\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            row = _ref[_i];\n            _results.push([row.label, row.x]);\n          }\n          return _results;\n        }).call(this);\n      }\n      labels.reverse();\n      _results = [];\n      for (_i = 0, _len = labels.length; _i < _len; _i++) {\n        l = labels[_i];\n        _results.push(drawLabel(l[0], l[1]));\n      }\n      return _results;\n    };\n\n    Line.prototype.drawSeries = function() {\n      var i, _i, _j, _ref, _ref1, _results;\n      this.seriesPoints = [];\n      for (i = _i = _ref = this.options.ykeys.length - 1; _ref <= 0 ? _i <= 0 : _i >= 0; i = _ref <= 0 ? ++_i : --_i) {\n        this._drawLineFor(i);\n      }\n      _results = [];\n      for (i = _j = _ref1 = this.options.ykeys.length - 1; _ref1 <= 0 ? _j <= 0 : _j >= 0; i = _ref1 <= 0 ? ++_j : --_j) {\n        _results.push(this._drawPointFor(i));\n      }\n      return _results;\n    };\n\n    Line.prototype._drawPointFor = function(index) {\n      var circle, row, _i, _len, _ref, _results;\n      this.seriesPoints[index] = [];\n      _ref = this.data;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        row = _ref[_i];\n        circle = null;\n        if (row._y[index] != null) {\n          circle = this.drawLinePoint(row._x, row._y[index], this.colorFor(row, index, 'point'), index);\n        }\n        _results.push(this.seriesPoints[index].push(circle));\n      }\n      return _results;\n    };\n\n    Line.prototype._drawLineFor = function(index) {\n      var path;\n      path = this.paths[index];\n      if (path !== null) {\n        return this.drawLinePath(path, this.colorFor(null, index, 'line'), index);\n      }\n    };\n\n    Line.createPath = function(coords, smooth, bottom) {\n      var coord, g, grads, i, ix, lg, path, prevCoord, x1, x2, y1, y2, _i, _len;\n      path = \"\";\n      if (smooth) {\n        grads = Morris.Line.gradients(coords);\n      }\n      prevCoord = {\n        y: null\n      };\n      for (i = _i = 0, _len = coords.length; _i < _len; i = ++_i) {\n        coord = coords[i];\n        if (coord.y != null) {\n          if (prevCoord.y != null) {\n            if (smooth) {\n              g = grads[i];\n              lg = grads[i - 1];\n              ix = (coord.x - prevCoord.x) / 4;\n              x1 = prevCoord.x + ix;\n              y1 = Math.min(bottom, prevCoord.y + ix * lg);\n              x2 = coord.x - ix;\n              y2 = Math.min(bottom, coord.y - ix * g);\n              path += \"C\" + x1 + \",\" + y1 + \",\" + x2 + \",\" + y2 + \",\" + coord.x + \",\" + coord.y;\n            } else {\n              path += \"L\" + coord.x + \",\" + coord.y;\n            }\n          } else {\n            if (!smooth || (grads[i] != null)) {\n              path += \"M\" + coord.x + \",\" + coord.y;\n            }\n          }\n        }\n        prevCoord = coord;\n      }\n      return path;\n    };\n\n    Line.gradients = function(coords) {\n      var coord, grad, i, nextCoord, prevCoord, _i, _len, _results;\n      grad = function(a, b) {\n        return (a.y - b.y) / (a.x - b.x);\n      };\n      _results = [];\n      for (i = _i = 0, _len = coords.length; _i < _len; i = ++_i) {\n        coord = coords[i];\n        if (coord.y != null) {\n          nextCoord = coords[i + 1] || {\n            y: null\n          };\n          prevCoord = coords[i - 1] || {\n            y: null\n          };\n          if ((prevCoord.y != null) && (nextCoord.y != null)) {\n            _results.push(grad(prevCoord, nextCoord));\n          } else if (prevCoord.y != null) {\n            _results.push(grad(prevCoord, coord));\n          } else if (nextCoord.y != null) {\n            _results.push(grad(coord, nextCoord));\n          } else {\n            _results.push(null);\n          }\n        } else {\n          _results.push(null);\n        }\n      }\n      return _results;\n    };\n\n    Line.prototype.hilight = function(index) {\n      var i, _i, _j, _ref, _ref1;\n      if (this.prevHilight !== null && this.prevHilight !== index) {\n        for (i = _i = 0, _ref = this.seriesPoints.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {\n          if (this.seriesPoints[i][this.prevHilight]) {\n            this.seriesPoints[i][this.prevHilight].animate(this.pointShrinkSeries(i));\n          }\n        }\n      }\n      if (index !== null && this.prevHilight !== index) {\n        for (i = _j = 0, _ref1 = this.seriesPoints.length - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = 0 <= _ref1 ? ++_j : --_j) {\n          if (this.seriesPoints[i][index]) {\n            this.seriesPoints[i][index].animate(this.pointGrowSeries(i));\n          }\n        }\n      }\n      return this.prevHilight = index;\n    };\n\n    Line.prototype.colorFor = function(row, sidx, type) {\n      if (typeof this.options.lineColors === 'function') {\n        return this.options.lineColors.call(this, row, sidx, type);\n      } else if (type === 'point') {\n        return this.options.pointFillColors[sidx % this.options.pointFillColors.length] || this.options.lineColors[sidx % this.options.lineColors.length];\n      } else {\n        return this.options.lineColors[sidx % this.options.lineColors.length];\n      }\n    };\n\n    Line.prototype.drawXAxisLabel = function(xPos, yPos, text) {\n      return this.raphael.text(xPos, yPos, text).attr('font-size', this.options.gridTextSize).attr('font-family', this.options.gridTextFamily).attr('font-weight', this.options.gridTextWeight).attr('fill', this.options.gridTextColor);\n    };\n\n    Line.prototype.drawLinePath = function(path, lineColor, lineIndex) {\n      return this.raphael.path(path).attr('stroke', lineColor).attr('stroke-width', this.lineWidthForSeries(lineIndex));\n    };\n\n    Line.prototype.drawLinePoint = function(xPos, yPos, pointColor, lineIndex) {\n      return this.raphael.circle(xPos, yPos, this.pointSizeForSeries(lineIndex)).attr('fill', pointColor).attr('stroke-width', this.pointStrokeWidthForSeries(lineIndex)).attr('stroke', this.pointStrokeColorForSeries(lineIndex));\n    };\n\n    Line.prototype.pointStrokeWidthForSeries = function(index) {\n      return this.options.pointStrokeWidths[index % this.options.pointStrokeWidths.length];\n    };\n\n    Line.prototype.pointStrokeColorForSeries = function(index) {\n      return this.options.pointStrokeColors[index % this.options.pointStrokeColors.length];\n    };\n\n    Line.prototype.lineWidthForSeries = function(index) {\n      if (this.options.lineWidth instanceof Array) {\n        return this.options.lineWidth[index % this.options.lineWidth.length];\n      } else {\n        return this.options.lineWidth;\n      }\n    };\n\n    Line.prototype.pointSizeForSeries = function(index) {\n      if (this.options.pointSize instanceof Array) {\n        return this.options.pointSize[index % this.options.pointSize.length];\n      } else {\n        return this.options.pointSize;\n      }\n    };\n\n    Line.prototype.pointGrowSeries = function(index) {\n      return Raphael.animation({\n        r: this.pointSizeForSeries(index) + 3\n      }, 25, 'linear');\n    };\n\n    Line.prototype.pointShrinkSeries = function(index) {\n      return Raphael.animation({\n        r: this.pointSizeForSeries(index)\n      }, 25, 'linear');\n    };\n\n    return Line;\n\n  })(Morris.Grid);\n\n  Morris.labelSeries = function(dmin, dmax, pxwidth, specName, xLabelFormat) {\n    var d, d0, ddensity, name, ret, s, spec, t, _i, _len, _ref;\n    ddensity = 200 * (dmax - dmin) / pxwidth;\n    d0 = new Date(dmin);\n    spec = Morris.LABEL_SPECS[specName];\n    if (spec === void 0) {\n      _ref = Morris.AUTO_LABEL_ORDER;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        name = _ref[_i];\n        s = Morris.LABEL_SPECS[name];\n        if (ddensity >= s.span) {\n          spec = s;\n          break;\n        }\n      }\n    }\n    if (spec === void 0) {\n      spec = Morris.LABEL_SPECS[\"second\"];\n    }\n    if (xLabelFormat) {\n      spec = $.extend({}, spec, {\n        fmt: xLabelFormat\n      });\n    }\n    d = spec.start(d0);\n    ret = [];\n    while ((t = d.getTime()) <= dmax) {\n      if (t >= dmin) {\n        ret.push([spec.fmt(d), t]);\n      }\n      spec.incr(d);\n    }\n    return ret;\n  };\n\n  minutesSpecHelper = function(interval) {\n    return {\n      span: interval * 60 * 1000,\n      start: function(d) {\n        return new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours());\n      },\n      fmt: function(d) {\n        return \"\" + (Morris.pad2(d.getHours())) + \":\" + (Morris.pad2(d.getMinutes()));\n      },\n      incr: function(d) {\n        return d.setUTCMinutes(d.getUTCMinutes() + interval);\n      }\n    };\n  };\n\n  secondsSpecHelper = function(interval) {\n    return {\n      span: interval * 1000,\n      start: function(d) {\n        return new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes());\n      },\n      fmt: function(d) {\n        return \"\" + (Morris.pad2(d.getHours())) + \":\" + (Morris.pad2(d.getMinutes())) + \":\" + (Morris.pad2(d.getSeconds()));\n      },\n      incr: function(d) {\n        return d.setUTCSeconds(d.getUTCSeconds() + interval);\n      }\n    };\n  };\n\n  Morris.LABEL_SPECS = {\n    \"decade\": {\n      span: 172800000000,\n      start: function(d) {\n        return new Date(d.getFullYear() - d.getFullYear() % 10, 0, 1);\n      },\n      fmt: function(d) {\n        return \"\" + (d.getFullYear());\n      },\n      incr: function(d) {\n        return d.setFullYear(d.getFullYear() + 10);\n      }\n    },\n    \"year\": {\n      span: 17280000000,\n      start: function(d) {\n        return new Date(d.getFullYear(), 0, 1);\n      },\n      fmt: function(d) {\n        return \"\" + (d.getFullYear());\n      },\n      incr: function(d) {\n        return d.setFullYear(d.getFullYear() + 1);\n      }\n    },\n    \"month\": {\n      span: 2419200000,\n      start: function(d) {\n        return new Date(d.getFullYear(), d.getMonth(), 1);\n      },\n      fmt: function(d) {\n        return \"\" + (d.getFullYear()) + \"-\" + (Morris.pad2(d.getMonth() + 1));\n      },\n      incr: function(d) {\n        return d.setMonth(d.getMonth() + 1);\n      }\n    },\n    \"week\": {\n      span: 604800000,\n      start: function(d) {\n        return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n      },\n      fmt: function(d) {\n        return \"\" + (d.getFullYear()) + \"-\" + (Morris.pad2(d.getMonth() + 1)) + \"-\" + (Morris.pad2(d.getDate()));\n      },\n      incr: function(d) {\n        return d.setDate(d.getDate() + 7);\n      }\n    },\n    \"day\": {\n      span: 86400000,\n      start: function(d) {\n        return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n      },\n      fmt: function(d) {\n        return \"\" + (d.getFullYear()) + \"-\" + (Morris.pad2(d.getMonth() + 1)) + \"-\" + (Morris.pad2(d.getDate()));\n      },\n      incr: function(d) {\n        return d.setDate(d.getDate() + 1);\n      }\n    },\n    \"hour\": minutesSpecHelper(60),\n    \"30min\": minutesSpecHelper(30),\n    \"15min\": minutesSpecHelper(15),\n    \"10min\": minutesSpecHelper(10),\n    \"5min\": minutesSpecHelper(5),\n    \"minute\": minutesSpecHelper(1),\n    \"30sec\": secondsSpecHelper(30),\n    \"15sec\": secondsSpecHelper(15),\n    \"10sec\": secondsSpecHelper(10),\n    \"5sec\": secondsSpecHelper(5),\n    \"second\": secondsSpecHelper(1)\n  };\n\n  Morris.AUTO_LABEL_ORDER = [\"decade\", \"year\", \"month\", \"week\", \"day\", \"hour\", \"30min\", \"15min\", \"10min\", \"5min\", \"minute\", \"30sec\", \"15sec\", \"10sec\", \"5sec\", \"second\"];\n\n  Morris.Area = (function(_super) {\n    var areaDefaults;\n\n    __extends(Area, _super);\n\n    areaDefaults = {\n      fillOpacity: 'auto',\n      behaveLikeLine: false\n    };\n\n    function Area(options) {\n      var areaOptions;\n      if (!(this instanceof Morris.Area)) {\n        return new Morris.Area(options);\n      }\n      areaOptions = $.extend({}, areaDefaults, options);\n      this.cumulative = !areaOptions.behaveLikeLine;\n      if (areaOptions.fillOpacity === 'auto') {\n        areaOptions.fillOpacity = areaOptions.behaveLikeLine ? .8 : 1;\n      }\n      Area.__super__.constructor.call(this, areaOptions);\n    }\n\n    Area.prototype.calcPoints = function() {\n      var row, total, y, _i, _len, _ref, _results;\n      _ref = this.data;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        row = _ref[_i];\n        row._x = this.transX(row.x);\n        total = 0;\n        row._y = (function() {\n          var _j, _len1, _ref1, _results1;\n          _ref1 = row.y;\n          _results1 = [];\n          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n            y = _ref1[_j];\n            if (this.options.behaveLikeLine) {\n              _results1.push(this.transY(y));\n            } else {\n              total += y || 0;\n              _results1.push(this.transY(total));\n            }\n          }\n          return _results1;\n        }).call(this);\n        _results.push(row._ymax = Math.max.apply(Math, row._y));\n      }\n      return _results;\n    };\n\n    Area.prototype.drawSeries = function() {\n      var i, range, _i, _j, _k, _len, _ref, _ref1, _results, _results1, _results2;\n      this.seriesPoints = [];\n      if (this.options.behaveLikeLine) {\n        range = (function() {\n          _results = [];\n          for (var _i = 0, _ref = this.options.ykeys.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; 0 <= _ref ? _i++ : _i--){ _results.push(_i); }\n          return _results;\n        }).apply(this);\n      } else {\n        range = (function() {\n          _results1 = [];\n          for (var _j = _ref1 = this.options.ykeys.length - 1; _ref1 <= 0 ? _j <= 0 : _j >= 0; _ref1 <= 0 ? _j++ : _j--){ _results1.push(_j); }\n          return _results1;\n        }).apply(this);\n      }\n      _results2 = [];\n      for (_k = 0, _len = range.length; _k < _len; _k++) {\n        i = range[_k];\n        this._drawFillFor(i);\n        this._drawLineFor(i);\n        _results2.push(this._drawPointFor(i));\n      }\n      return _results2;\n    };\n\n    Area.prototype._drawFillFor = function(index) {\n      var path;\n      path = this.paths[index];\n      if (path !== null) {\n        path = path + (\"L\" + (this.transX(this.xmax)) + \",\" + this.bottom + \"L\" + (this.transX(this.xmin)) + \",\" + this.bottom + \"Z\");\n        return this.drawFilledPath(path, this.fillForSeries(index));\n      }\n    };\n\n    Area.prototype.fillForSeries = function(i) {\n      var color;\n      color = Raphael.rgb2hsl(this.colorFor(this.data[i], i, 'line'));\n      return Raphael.hsl(color.h, this.options.behaveLikeLine ? color.s * 0.9 : color.s * 0.75, Math.min(0.98, this.options.behaveLikeLine ? color.l * 1.2 : color.l * 1.25));\n    };\n\n    Area.prototype.drawFilledPath = function(path, fill) {\n      return this.raphael.path(path).attr('fill', fill).attr('fill-opacity', this.options.fillOpacity).attr('stroke', 'none');\n    };\n\n    return Area;\n\n  })(Morris.Line);\n\n  Morris.Bar = (function(_super) {\n    __extends(Bar, _super);\n\n    function Bar(options) {\n      this.onHoverOut = __bind(this.onHoverOut, this);\n      this.onHoverMove = __bind(this.onHoverMove, this);\n      this.onGridClick = __bind(this.onGridClick, this);\n      if (!(this instanceof Morris.Bar)) {\n        return new Morris.Bar(options);\n      }\n      Bar.__super__.constructor.call(this, $.extend({}, options, {\n        parseTime: false\n      }));\n    }\n\n    Bar.prototype.init = function() {\n      this.cumulative = this.options.stacked;\n      if (this.options.hideHover !== 'always') {\n        this.hover = new Morris.Hover({\n          parent: this.el\n        });\n        this.on('hovermove', this.onHoverMove);\n        this.on('hoverout', this.onHoverOut);\n        return this.on('gridclick', this.onGridClick);\n      }\n    };\n\n    Bar.prototype.defaults = {\n      barSizeRatio: 0.75,\n      barGap: 3,\n      barColors: ['#0b62a4', '#7a92a3', '#4da74d', '#afd8f8', '#edc240', '#cb4b4b', '#9440ed'],\n      barOpacity: 1.0,\n      barRadius: [0, 0, 0, 0],\n      xLabelMargin: 50\n    };\n\n    Bar.prototype.calc = function() {\n      var _ref;\n      this.calcBars();\n      if (this.options.hideHover === false) {\n        return (_ref = this.hover).update.apply(_ref, this.hoverContentForRow(this.data.length - 1));\n      }\n    };\n\n    Bar.prototype.calcBars = function() {\n      var idx, row, y, _i, _len, _ref, _results;\n      _ref = this.data;\n      _results = [];\n      for (idx = _i = 0, _len = _ref.length; _i < _len; idx = ++_i) {\n        row = _ref[idx];\n        row._x = this.left + this.width * (idx + 0.5) / this.data.length;\n        _results.push(row._y = (function() {\n          var _j, _len1, _ref1, _results1;\n          _ref1 = row.y;\n          _results1 = [];\n          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n            y = _ref1[_j];\n            if (y != null) {\n              _results1.push(this.transY(y));\n            } else {\n              _results1.push(null);\n            }\n          }\n          return _results1;\n        }).call(this));\n      }\n      return _results;\n    };\n\n    Bar.prototype.draw = function() {\n      var _ref;\n      if ((_ref = this.options.axes) === true || _ref === 'both' || _ref === 'x') {\n        this.drawXAxis();\n      }\n      return this.drawSeries();\n    };\n\n    Bar.prototype.drawXAxis = function() {\n      var i, label, labelBox, margin, offset, prevAngleMargin, prevLabelMargin, row, textBox, ypos, _i, _ref, _results;\n      ypos = this.bottom + (this.options.xAxisLabelTopPadding || this.options.padding / 2);\n      prevLabelMargin = null;\n      prevAngleMargin = null;\n      _results = [];\n      for (i = _i = 0, _ref = this.data.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n        row = this.data[this.data.length - 1 - i];\n        label = this.drawXAxisLabel(row._x, ypos, row.label);\n        textBox = label.getBBox();\n        label.transform(\"r\" + (-this.options.xLabelAngle));\n        labelBox = label.getBBox();\n        label.transform(\"t0,\" + (labelBox.height / 2) + \"...\");\n        if (this.options.xLabelAngle !== 0) {\n          offset = -0.5 * textBox.width * Math.cos(this.options.xLabelAngle * Math.PI / 180.0);\n          label.transform(\"t\" + offset + \",0...\");\n        }\n        if (((prevLabelMargin == null) || prevLabelMargin >= labelBox.x + labelBox.width || (prevAngleMargin != null) && prevAngleMargin >= labelBox.x) && labelBox.x >= 0 && (labelBox.x + labelBox.width) < this.el.width()) {\n          if (this.options.xLabelAngle !== 0) {\n            margin = 1.25 * this.options.gridTextSize / Math.sin(this.options.xLabelAngle * Math.PI / 180.0);\n            prevAngleMargin = labelBox.x - margin;\n          }\n          _results.push(prevLabelMargin = labelBox.x - this.options.xLabelMargin);\n        } else {\n          _results.push(label.remove());\n        }\n      }\n      return _results;\n    };\n\n    Bar.prototype.drawSeries = function() {\n      var barWidth, bottom, groupWidth, idx, lastTop, left, leftPadding, numBars, row, sidx, size, spaceLeft, top, ypos, zeroPos;\n      groupWidth = this.width / this.options.data.length;\n      numBars = this.options.stacked ? 1 : this.options.ykeys.length;\n      barWidth = (groupWidth * this.options.barSizeRatio - this.options.barGap * (numBars - 1)) / numBars;\n      if (this.options.barSize) {\n        barWidth = Math.min(barWidth, this.options.barSize);\n      }\n      spaceLeft = groupWidth - barWidth * numBars - this.options.barGap * (numBars - 1);\n      leftPadding = spaceLeft / 2;\n      zeroPos = this.ymin <= 0 && this.ymax >= 0 ? this.transY(0) : null;\n      return this.bars = (function() {\n        var _i, _len, _ref, _results;\n        _ref = this.data;\n        _results = [];\n        for (idx = _i = 0, _len = _ref.length; _i < _len; idx = ++_i) {\n          row = _ref[idx];\n          lastTop = 0;\n          _results.push((function() {\n            var _j, _len1, _ref1, _results1;\n            _ref1 = row._y;\n            _results1 = [];\n            for (sidx = _j = 0, _len1 = _ref1.length; _j < _len1; sidx = ++_j) {\n              ypos = _ref1[sidx];\n              if (ypos !== null) {\n                if (zeroPos) {\n                  top = Math.min(ypos, zeroPos);\n                  bottom = Math.max(ypos, zeroPos);\n                } else {\n                  top = ypos;\n                  bottom = this.bottom;\n                }\n                left = this.left + idx * groupWidth + leftPadding;\n                if (!this.options.stacked) {\n                  left += sidx * (barWidth + this.options.barGap);\n                }\n                size = bottom - top;\n                if (this.options.verticalGridCondition && this.options.verticalGridCondition(row.x)) {\n                  this.drawBar(this.left + idx * groupWidth, this.top, groupWidth, Math.abs(this.top - this.bottom), this.options.verticalGridColor, this.options.verticalGridOpacity, this.options.barRadius);\n                }\n                if (this.options.stacked) {\n                  top -= lastTop;\n                }\n                this.drawBar(left, top, barWidth, size, this.colorFor(row, sidx, 'bar'), this.options.barOpacity, this.options.barRadius);\n                _results1.push(lastTop += size);\n              } else {\n                _results1.push(null);\n              }\n            }\n            return _results1;\n          }).call(this));\n        }\n        return _results;\n      }).call(this);\n    };\n\n    Bar.prototype.colorFor = function(row, sidx, type) {\n      var r, s;\n      if (typeof this.options.barColors === 'function') {\n        r = {\n          x: row.x,\n          y: row.y[sidx],\n          label: row.label\n        };\n        s = {\n          index: sidx,\n          key: this.options.ykeys[sidx],\n          label: this.options.labels[sidx]\n        };\n        return this.options.barColors.call(this, r, s, type);\n      } else {\n        return this.options.barColors[sidx % this.options.barColors.length];\n      }\n    };\n\n    Bar.prototype.hitTest = function(x) {\n      if (this.data.length === 0) {\n        return null;\n      }\n      x = Math.max(Math.min(x, this.right), this.left);\n      return Math.min(this.data.length - 1, Math.floor((x - this.left) / (this.width / this.data.length)));\n    };\n\n    Bar.prototype.onGridClick = function(x, y) {\n      var index;\n      index = this.hitTest(x);\n      return this.fire('click', index, this.data[index].src, x, y);\n    };\n\n    Bar.prototype.onHoverMove = function(x, y) {\n      var index, _ref;\n      index = this.hitTest(x);\n      return (_ref = this.hover).update.apply(_ref, this.hoverContentForRow(index));\n    };\n\n    Bar.prototype.onHoverOut = function() {\n      if (this.options.hideHover !== false) {\n        return this.hover.hide();\n      }\n    };\n\n    Bar.prototype.hoverContentForRow = function(index) {\n      var content, j, row, x, y, _i, _len, _ref;\n      row = this.data[index];\n      content = \"<div class='morris-hover-row-label'>\" + row.label + \"</div>\";\n      _ref = row.y;\n      for (j = _i = 0, _len = _ref.length; _i < _len; j = ++_i) {\n        y = _ref[j];\n        content += \"<div class='morris-hover-point' style='color: \" + (this.colorFor(row, j, 'label')) + \"'>\\n  \" + this.options.labels[j] + \":\\n  \" + (this.yLabelFormat(y)) + \"\\n</div>\";\n      }\n      if (typeof this.options.hoverCallback === 'function') {\n        content = this.options.hoverCallback(index, this.options, content, row.src);\n      }\n      x = this.left + (index + 0.5) * this.width / this.data.length;\n      return [content, x];\n    };\n\n    Bar.prototype.drawXAxisLabel = function(xPos, yPos, text) {\n      var label;\n      return label = this.raphael.text(xPos, yPos, text).attr('font-size', this.options.gridTextSize).attr('font-family', this.options.gridTextFamily).attr('font-weight', this.options.gridTextWeight).attr('fill', this.options.gridTextColor);\n    };\n\n    Bar.prototype.drawBar = function(xPos, yPos, width, height, barColor, opacity, radiusArray) {\n      var maxRadius, path;\n      maxRadius = Math.max.apply(Math, radiusArray);\n      if (maxRadius === 0 || maxRadius > height) {\n        path = this.raphael.rect(xPos, yPos, width, height);\n      } else {\n        path = this.raphael.path(this.roundedRect(xPos, yPos, width, height, radiusArray));\n      }\n      return path.attr('fill', barColor).attr('fill-opacity', opacity).attr('stroke', 'none');\n    };\n\n    Bar.prototype.roundedRect = function(x, y, w, h, r) {\n      if (r == null) {\n        r = [0, 0, 0, 0];\n      }\n      return [\"M\", x, r[0] + y, \"Q\", x, y, x + r[0], y, \"L\", x + w - r[1], y, \"Q\", x + w, y, x + w, y + r[1], \"L\", x + w, y + h - r[2], \"Q\", x + w, y + h, x + w - r[2], y + h, \"L\", x + r[3], y + h, \"Q\", x, y + h, x, y + h - r[3], \"Z\"];\n    };\n\n    return Bar;\n\n  })(Morris.Grid);\n\n  Morris.Donut = (function(_super) {\n    __extends(Donut, _super);\n\n    Donut.prototype.defaults = {\n      colors: ['#0B62A4', '#3980B5', '#679DC6', '#95BBD7', '#B0CCE1', '#095791', '#095085', '#083E67', '#052C48', '#042135'],\n      backgroundColor: '#FFFFFF',\n      labelColor: '#000000',\n      formatter: Morris.commas,\n      resize: false\n    };\n\n    function Donut(options) {\n      this.resizeHandler = __bind(this.resizeHandler, this);\n      this.select = __bind(this.select, this);\n      this.click = __bind(this.click, this);\n      var _this = this;\n      if (!(this instanceof Morris.Donut)) {\n        return new Morris.Donut(options);\n      }\n      this.options = $.extend({}, this.defaults, options);\n      if (typeof options.element === 'string') {\n        this.el = $(document.getElementById(options.element));\n      } else {\n        this.el = $(options.element);\n      }\n      if (this.el === null || this.el.length === 0) {\n        throw new Error(\"Graph placeholder not found.\");\n      }\n      if (options.data === void 0 || options.data.length === 0) {\n        return;\n      }\n      this.raphael = new Raphael(this.el[0]);\n      if (this.options.resize) {\n        $(window).bind('resize', function(evt) {\n          if (_this.timeoutId != null) {\n            window.clearTimeout(_this.timeoutId);\n          }\n          return _this.timeoutId = window.setTimeout(_this.resizeHandler, 100);\n        });\n      }\n      this.setData(options.data);\n    }\n\n    Donut.prototype.redraw = function() {\n      var C, cx, cy, i, idx, last, max_value, min, next, seg, total, value, w, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;\n      this.raphael.clear();\n      cx = this.el.width() / 2;\n      cy = this.el.height() / 2;\n      w = (Math.min(cx, cy) - 10) / 3;\n      total = 0;\n      _ref = this.values;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        value = _ref[_i];\n        total += value;\n      }\n      min = 5 / (2 * w);\n      C = 1.9999 * Math.PI - min * this.data.length;\n      last = 0;\n      idx = 0;\n      this.segments = [];\n      _ref1 = this.values;\n      for (i = _j = 0, _len1 = _ref1.length; _j < _len1; i = ++_j) {\n        value = _ref1[i];\n        next = last + min + C * (value / total);\n        seg = new Morris.DonutSegment(cx, cy, w * 2, w, last, next, this.data[i].color || this.options.colors[idx % this.options.colors.length], this.options.backgroundColor, idx, this.raphael);\n        seg.render();\n        this.segments.push(seg);\n        seg.on('hover', this.select);\n        seg.on('click', this.click);\n        last = next;\n        idx += 1;\n      }\n      this.text1 = this.drawEmptyDonutLabel(cx, cy - 10, this.options.labelColor, 15, 800);\n      this.text2 = this.drawEmptyDonutLabel(cx, cy + 10, this.options.labelColor, 14);\n      max_value = Math.max.apply(Math, this.values);\n      idx = 0;\n      _ref2 = this.values;\n      _results = [];\n      for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n        value = _ref2[_k];\n        if (value === max_value) {\n          this.select(idx);\n          break;\n        }\n        _results.push(idx += 1);\n      }\n      return _results;\n    };\n\n    Donut.prototype.setData = function(data) {\n      var row;\n      this.data = data;\n      this.values = (function() {\n        var _i, _len, _ref, _results;\n        _ref = this.data;\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          row = _ref[_i];\n          _results.push(parseFloat(row.value));\n        }\n        return _results;\n      }).call(this);\n      return this.redraw();\n    };\n\n    Donut.prototype.click = function(idx) {\n      return this.fire('click', idx, this.data[idx]);\n    };\n\n    Donut.prototype.select = function(idx) {\n      var row, s, segment, _i, _len, _ref;\n      _ref = this.segments;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        s = _ref[_i];\n        s.deselect();\n      }\n      segment = this.segments[idx];\n      segment.select();\n      row = this.data[idx];\n      return this.setLabels(row.label, this.options.formatter(row.value, row));\n    };\n\n    Donut.prototype.setLabels = function(label1, label2) {\n      var inner, maxHeightBottom, maxHeightTop, maxWidth, text1bbox, text1scale, text2bbox, text2scale;\n      inner = (Math.min(this.el.width() / 2, this.el.height() / 2) - 10) * 2 / 3;\n      maxWidth = 1.8 * inner;\n      maxHeightTop = inner / 2;\n      maxHeightBottom = inner / 3;\n      this.text1.attr({\n        text: label1,\n        transform: ''\n      });\n      text1bbox = this.text1.getBBox();\n      text1scale = Math.min(maxWidth / text1bbox.width, maxHeightTop / text1bbox.height);\n      this.text1.attr({\n        transform: \"S\" + text1scale + \",\" + text1scale + \",\" + (text1bbox.x + text1bbox.width / 2) + \",\" + (text1bbox.y + text1bbox.height)\n      });\n      this.text2.attr({\n        text: label2,\n        transform: ''\n      });\n      text2bbox = this.text2.getBBox();\n      text2scale = Math.min(maxWidth / text2bbox.width, maxHeightBottom / text2bbox.height);\n      return this.text2.attr({\n        transform: \"S\" + text2scale + \",\" + text2scale + \",\" + (text2bbox.x + text2bbox.width / 2) + \",\" + text2bbox.y\n      });\n    };\n\n    Donut.prototype.drawEmptyDonutLabel = function(xPos, yPos, color, fontSize, fontWeight) {\n      var text;\n      text = this.raphael.text(xPos, yPos, '').attr('font-size', fontSize).attr('fill', color);\n      if (fontWeight != null) {\n        text.attr('font-weight', fontWeight);\n      }\n      return text;\n    };\n\n    Donut.prototype.resizeHandler = function() {\n      this.timeoutId = null;\n      this.raphael.setSize(this.el.width(), this.el.height());\n      return this.redraw();\n    };\n\n    return Donut;\n\n  })(Morris.EventEmitter);\n\n  Morris.DonutSegment = (function(_super) {\n    __extends(DonutSegment, _super);\n\n    function DonutSegment(cx, cy, inner, outer, p0, p1, color, backgroundColor, index, raphael) {\n      this.cx = cx;\n      this.cy = cy;\n      this.inner = inner;\n      this.outer = outer;\n      this.color = color;\n      this.backgroundColor = backgroundColor;\n      this.index = index;\n      this.raphael = raphael;\n      this.deselect = __bind(this.deselect, this);\n      this.select = __bind(this.select, this);\n      this.sin_p0 = Math.sin(p0);\n      this.cos_p0 = Math.cos(p0);\n      this.sin_p1 = Math.sin(p1);\n      this.cos_p1 = Math.cos(p1);\n      this.is_long = (p1 - p0) > Math.PI ? 1 : 0;\n      this.path = this.calcSegment(this.inner + 3, this.inner + this.outer - 5);\n      this.selectedPath = this.calcSegment(this.inner + 3, this.inner + this.outer);\n      this.hilight = this.calcArc(this.inner);\n    }\n\n    DonutSegment.prototype.calcArcPoints = function(r) {\n      return [this.cx + r * this.sin_p0, this.cy + r * this.cos_p0, this.cx + r * this.sin_p1, this.cy + r * this.cos_p1];\n    };\n\n    DonutSegment.prototype.calcSegment = function(r1, r2) {\n      var ix0, ix1, iy0, iy1, ox0, ox1, oy0, oy1, _ref, _ref1;\n      _ref = this.calcArcPoints(r1), ix0 = _ref[0], iy0 = _ref[1], ix1 = _ref[2], iy1 = _ref[3];\n      _ref1 = this.calcArcPoints(r2), ox0 = _ref1[0], oy0 = _ref1[1], ox1 = _ref1[2], oy1 = _ref1[3];\n      return (\"M\" + ix0 + \",\" + iy0) + (\"A\" + r1 + \",\" + r1 + \",0,\" + this.is_long + \",0,\" + ix1 + \",\" + iy1) + (\"L\" + ox1 + \",\" + oy1) + (\"A\" + r2 + \",\" + r2 + \",0,\" + this.is_long + \",1,\" + ox0 + \",\" + oy0) + \"Z\";\n    };\n\n    DonutSegment.prototype.calcArc = function(r) {\n      var ix0, ix1, iy0, iy1, _ref;\n      _ref = this.calcArcPoints(r), ix0 = _ref[0], iy0 = _ref[1], ix1 = _ref[2], iy1 = _ref[3];\n      return (\"M\" + ix0 + \",\" + iy0) + (\"A\" + r + \",\" + r + \",0,\" + this.is_long + \",0,\" + ix1 + \",\" + iy1);\n    };\n\n    DonutSegment.prototype.render = function() {\n      var _this = this;\n      this.arc = this.drawDonutArc(this.hilight, this.color);\n      return this.seg = this.drawDonutSegment(this.path, this.color, this.backgroundColor, function() {\n        return _this.fire('hover', _this.index);\n      }, function() {\n        return _this.fire('click', _this.index);\n      });\n    };\n\n    DonutSegment.prototype.drawDonutArc = function(path, color) {\n      return this.raphael.path(path).attr({\n        stroke: color,\n        'stroke-width': 2,\n        opacity: 0\n      });\n    };\n\n    DonutSegment.prototype.drawDonutSegment = function(path, fillColor, strokeColor, hoverFunction, clickFunction) {\n      return this.raphael.path(path).attr({\n        fill: fillColor,\n        stroke: strokeColor,\n        'stroke-width': 3\n      }).hover(hoverFunction).click(clickFunction);\n    };\n\n    DonutSegment.prototype.select = function() {\n      if (!this.selected) {\n        this.seg.animate({\n          path: this.selectedPath\n        }, 150, '<>');\n        this.arc.animate({\n          opacity: 1\n        }, 150, '<>');\n        return this.selected = true;\n      }\n    };\n\n    DonutSegment.prototype.deselect = function() {\n      if (this.selected) {\n        this.seg.animate({\n          path: this.path\n        }, 150, '<>');\n        this.arc.animate({\n          opacity: 0\n        }, 150, '<>');\n        return this.selected = false;\n      }\n    };\n\n    return DonutSegment;\n\n  })(Morris.EventEmitter);\n\n}).call(this);"
  },
  {
    "path": "public/adminlte/plugins/pace/pace.css",
    "content": ".pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: #fff;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 100%;\n  width: 100%;\n  height: 2px;\n}\n\n.pace .pace-progress-inner {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #fff, 0 0 5px #fff;\n  opacity: 1.0;\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n  -moz-transform: rotate(3deg) translate(0px, -4px);\n  -ms-transform: rotate(3deg) translate(0px, -4px);\n  -o-transform: rotate(3deg) translate(0px, -4px);\n  transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 15px;\n  right: 50%;\n  width: 14px;\n  height: 14px;\n  border: solid 2px transparent;\n  border-top-color: #fff;\n  border-left-color: #fff;\n  border-radius: 10px;\n  -webkit-animation: pace-spinner 400ms linear infinite;\n  -moz-animation: pace-spinner 400ms linear infinite;\n  -ms-animation: pace-spinner 400ms linear infinite;\n  -o-animation: pace-spinner 400ms linear infinite;\n  animation: pace-spinner 400ms linear infinite;\n}\n\n@media (max-width: 767px) {\n\t.pace .pace-activity {\n\t  top: 15px;\n\t  right: 15px;\n\t  width: 14px;\n\t  height: 14px;\n\t}\n}\n\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}"
  },
  {
    "path": "public/adminlte/plugins/pace/pace.js",
    "content": "(function() {\n  var AjaxMonitor, Bar, DocumentMonitor, ElementMonitor, ElementTracker, EventLagMonitor, Evented, Events, NoTargetError, Pace, RequestIntercept, SOURCE_KEYS, Scaler, SocketRequestTracker, XHRRequestTracker, animation, avgAmplitude, bar, cancelAnimation, cancelAnimationFrame, defaultOptions, extend, extendNative, getFromDOM, getIntercept, handlePushState, ignoreStack, init, now, options, requestAnimationFrame, result, runAnimation, scalers, shouldIgnoreURL, shouldTrack, source, sources, uniScaler, _WebSocket, _XDomainRequest, _XMLHttpRequest, _i, _intercept, _len, _pushState, _ref, _ref1, _replaceState,\n    __slice = [].slice,\n    __hasProp = {}.hasOwnProperty,\n    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n  defaultOptions = {\n    catchupTime: 100,\n    initialRate: .03,\n    minTime: 250,\n    ghostTime: 100,\n    maxProgressPerFrame: 20,\n    easeFactor: 1.25,\n    startOnPageLoad: true,\n    restartOnPushState: true,\n    restartOnRequestAfter: 500,\n    target: 'body',\n    elements: {\n      checkInterval: 100,\n      selectors: ['body']\n    },\n    eventLag: {\n      minSamples: 10,\n      sampleCount: 3,\n      lagThreshold: 3\n    },\n    ajax: {\n      trackMethods: ['GET'],\n      trackWebSockets: true,\n      ignoreURLs: []\n    }\n  };\n\n  now = function() {\n    var _ref;\n    return (_ref = typeof performance !== \"undefined\" && performance !== null ? typeof performance.now === \"function\" ? performance.now() : void 0 : void 0) != null ? _ref : +(new Date);\n  };\n\n  requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;\n\n  cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame;\n\n  if (requestAnimationFrame == null) {\n    requestAnimationFrame = function(fn) {\n      return setTimeout(fn, 50);\n    };\n    cancelAnimationFrame = function(id) {\n      return clearTimeout(id);\n    };\n  }\n\n  runAnimation = function(fn) {\n    var last, tick;\n    last = now();\n    tick = function() {\n      var diff;\n      diff = now() - last;\n      if (diff >= 33) {\n        last = now();\n        return fn(diff, function() {\n          return requestAnimationFrame(tick);\n        });\n      } else {\n        return setTimeout(tick, 33 - diff);\n      }\n    };\n    return tick();\n  };\n\n  result = function() {\n    var args, key, obj;\n    obj = arguments[0], key = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : [];\n    if (typeof obj[key] === 'function') {\n      return obj[key].apply(obj, args);\n    } else {\n      return obj[key];\n    }\n  };\n\n  extend = function() {\n    var key, out, source, sources, val, _i, _len;\n    out = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n    for (_i = 0, _len = sources.length; _i < _len; _i++) {\n      source = sources[_i];\n      if (source) {\n        for (key in source) {\n          if (!__hasProp.call(source, key)) continue;\n          val = source[key];\n          if ((out[key] != null) && typeof out[key] === 'object' && (val != null) && typeof val === 'object') {\n            extend(out[key], val);\n          } else {\n            out[key] = val;\n          }\n        }\n      }\n    }\n    return out;\n  };\n\n  avgAmplitude = function(arr) {\n    var count, sum, v, _i, _len;\n    sum = count = 0;\n    for (_i = 0, _len = arr.length; _i < _len; _i++) {\n      v = arr[_i];\n      sum += Math.abs(v);\n      count++;\n    }\n    return sum / count;\n  };\n\n  getFromDOM = function(key, json) {\n    var data, e, el;\n    if (key == null) {\n      key = 'options';\n    }\n    if (json == null) {\n      json = true;\n    }\n    el = document.querySelector(\"[data-pace-\" + key + \"]\");\n    if (!el) {\n      return;\n    }\n    data = el.getAttribute(\"data-pace-\" + key);\n    if (!json) {\n      return data;\n    }\n    try {\n      return JSON.parse(data);\n    } catch (_error) {\n      e = _error;\n      return typeof console !== \"undefined\" && console !== null ? console.error(\"Error parsing inline pace options\", e) : void 0;\n    }\n  };\n\n  Evented = (function() {\n    function Evented() {}\n\n    Evented.prototype.on = function(event, handler, ctx, once) {\n      var _base;\n      if (once == null) {\n        once = false;\n      }\n      if (this.bindings == null) {\n        this.bindings = {};\n      }\n      if ((_base = this.bindings)[event] == null) {\n        _base[event] = [];\n      }\n      return this.bindings[event].push({\n        handler: handler,\n        ctx: ctx,\n        once: once\n      });\n    };\n\n    Evented.prototype.once = function(event, handler, ctx) {\n      return this.on(event, handler, ctx, true);\n    };\n\n    Evented.prototype.off = function(event, handler) {\n      var i, _ref, _results;\n      if (((_ref = this.bindings) != null ? _ref[event] : void 0) == null) {\n        return;\n      }\n      if (handler == null) {\n        return delete this.bindings[event];\n      } else {\n        i = 0;\n        _results = [];\n        while (i < this.bindings[event].length) {\n          if (this.bindings[event][i].handler === handler) {\n            _results.push(this.bindings[event].splice(i, 1));\n          } else {\n            _results.push(i++);\n          }\n        }\n        return _results;\n      }\n    };\n\n    Evented.prototype.trigger = function() {\n      var args, ctx, event, handler, i, once, _ref, _ref1, _results;\n      event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n      if ((_ref = this.bindings) != null ? _ref[event] : void 0) {\n        i = 0;\n        _results = [];\n        while (i < this.bindings[event].length) {\n          _ref1 = this.bindings[event][i], handler = _ref1.handler, ctx = _ref1.ctx, once = _ref1.once;\n          handler.apply(ctx != null ? ctx : this, args);\n          if (once) {\n            _results.push(this.bindings[event].splice(i, 1));\n          } else {\n            _results.push(i++);\n          }\n        }\n        return _results;\n      }\n    };\n\n    return Evented;\n\n  })();\n\n  Pace = window.Pace || {};\n\n  window.Pace = Pace;\n\n  extend(Pace, Evented.prototype);\n\n  options = Pace.options = extend({}, defaultOptions, window.paceOptions, getFromDOM());\n\n  _ref = ['ajax', 'document', 'eventLag', 'elements'];\n  for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n    source = _ref[_i];\n    if (options[source] === true) {\n      options[source] = defaultOptions[source];\n    }\n  }\n\n  NoTargetError = (function(_super) {\n    __extends(NoTargetError, _super);\n\n    function NoTargetError() {\n      _ref1 = NoTargetError.__super__.constructor.apply(this, arguments);\n      return _ref1;\n    }\n\n    return NoTargetError;\n\n  })(Error);\n\n  Bar = (function() {\n    function Bar() {\n      this.progress = 0;\n    }\n\n    Bar.prototype.getElement = function() {\n      var targetElement;\n      if (this.el == null) {\n        targetElement = document.querySelector(options.target);\n        if (!targetElement) {\n          throw new NoTargetError;\n        }\n        this.el = document.createElement('div');\n        this.el.className = \"pace pace-active\";\n        document.body.className = document.body.className.replace(/pace-done/g, '');\n        document.body.className += ' pace-running';\n        this.el.innerHTML = '<div class=\"pace-progress\">\\n  <div class=\"pace-progress-inner\"></div>\\n</div>\\n<div class=\"pace-activity\"></div>';\n        if (targetElement.firstChild != null) {\n          targetElement.insertBefore(this.el, targetElement.firstChild);\n        } else {\n          targetElement.appendChild(this.el);\n        }\n      }\n      return this.el;\n    };\n\n    Bar.prototype.finish = function() {\n      var el;\n      el = this.getElement();\n      el.className = el.className.replace('pace-active', '');\n      el.className += ' pace-inactive';\n      document.body.className = document.body.className.replace('pace-running', '');\n      return document.body.className += ' pace-done';\n    };\n\n    Bar.prototype.update = function(prog) {\n      this.progress = prog;\n      return this.render();\n    };\n\n    Bar.prototype.destroy = function() {\n      try {\n        this.getElement().parentNode.removeChild(this.getElement());\n      } catch (_error) {\n        NoTargetError = _error;\n      }\n      return this.el = void 0;\n    };\n\n    Bar.prototype.render = function() {\n      var el, key, progressStr, transform, _j, _len1, _ref2;\n      if (document.querySelector(options.target) == null) {\n        return false;\n      }\n      el = this.getElement();\n      transform = \"translate3d(\" + this.progress + \"%, 0, 0)\";\n      _ref2 = ['webkitTransform', 'msTransform', 'transform'];\n      for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n        key = _ref2[_j];\n        el.children[0].style[key] = transform;\n      }\n      if (!this.lastRenderedProgress || this.lastRenderedProgress | 0 !== this.progress | 0) {\n        el.children[0].setAttribute('data-progress-text', \"\" + (this.progress | 0) + \"%\");\n        if (this.progress >= 100) {\n          progressStr = '99';\n        } else {\n          progressStr = this.progress < 10 ? \"0\" : \"\";\n          progressStr += this.progress | 0;\n        }\n        el.children[0].setAttribute('data-progress', \"\" + progressStr);\n      }\n      return this.lastRenderedProgress = this.progress;\n    };\n\n    Bar.prototype.done = function() {\n      return this.progress >= 100;\n    };\n\n    return Bar;\n\n  })();\n\n  Events = (function() {\n    function Events() {\n      this.bindings = {};\n    }\n\n    Events.prototype.trigger = function(name, val) {\n      var binding, _j, _len1, _ref2, _results;\n      if (this.bindings[name] != null) {\n        _ref2 = this.bindings[name];\n        _results = [];\n        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n          binding = _ref2[_j];\n          _results.push(binding.call(this, val));\n        }\n        return _results;\n      }\n    };\n\n    Events.prototype.on = function(name, fn) {\n      var _base;\n      if ((_base = this.bindings)[name] == null) {\n        _base[name] = [];\n      }\n      return this.bindings[name].push(fn);\n    };\n\n    return Events;\n\n  })();\n\n  _XMLHttpRequest = window.XMLHttpRequest;\n\n  _XDomainRequest = window.XDomainRequest;\n\n  _WebSocket = window.WebSocket;\n\n  extendNative = function(to, from) {\n    var e, key, _results;\n    _results = [];\n    for (key in from.prototype) {\n      try {\n        if ((to[key] == null) && typeof from[key] !== 'function') {\n          if (typeof Object.defineProperty === 'function') {\n            _results.push(Object.defineProperty(to, key, {\n              get: function() {\n                return from.prototype[key];\n              },\n              configurable: true,\n              enumerable: true\n            }));\n          } else {\n            _results.push(to[key] = from.prototype[key]);\n          }\n        } else {\n          _results.push(void 0);\n        }\n      } catch (_error) {\n        e = _error;\n      }\n    }\n    return _results;\n  };\n\n  ignoreStack = [];\n\n  Pace.ignore = function() {\n    var args, fn, ret;\n    fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n    ignoreStack.unshift('ignore');\n    ret = fn.apply(null, args);\n    ignoreStack.shift();\n    return ret;\n  };\n\n  Pace.track = function() {\n    var args, fn, ret;\n    fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n    ignoreStack.unshift('track');\n    ret = fn.apply(null, args);\n    ignoreStack.shift();\n    return ret;\n  };\n\n  shouldTrack = function(method) {\n    var _ref2;\n    if (method == null) {\n      method = 'GET';\n    }\n    if (ignoreStack[0] === 'track') {\n      return 'force';\n    }\n    if (!ignoreStack.length && options.ajax) {\n      if (method === 'socket' && options.ajax.trackWebSockets) {\n        return true;\n      } else if (_ref2 = method.toUpperCase(), __indexOf.call(options.ajax.trackMethods, _ref2) >= 0) {\n        return true;\n      }\n    }\n    return false;\n  };\n\n  RequestIntercept = (function(_super) {\n    __extends(RequestIntercept, _super);\n\n    function RequestIntercept() {\n      var monitorXHR,\n        _this = this;\n      RequestIntercept.__super__.constructor.apply(this, arguments);\n      monitorXHR = function(req) {\n        var _open;\n        _open = req.open;\n        return req.open = function(type, url, async) {\n          if (shouldTrack(type)) {\n            _this.trigger('request', {\n              type: type,\n              url: url,\n              request: req\n            });\n          }\n          return _open.apply(req, arguments);\n        };\n      };\n      window.XMLHttpRequest = function(flags) {\n        var req;\n        req = new _XMLHttpRequest(flags);\n        monitorXHR(req);\n        return req;\n      };\n      try {\n        extendNative(window.XMLHttpRequest, _XMLHttpRequest);\n      } catch (_error) {}\n      if (_XDomainRequest != null) {\n        window.XDomainRequest = function() {\n          var req;\n          req = new _XDomainRequest;\n          monitorXHR(req);\n          return req;\n        };\n        try {\n          extendNative(window.XDomainRequest, _XDomainRequest);\n        } catch (_error) {}\n      }\n      if ((_WebSocket != null) && options.ajax.trackWebSockets) {\n        window.WebSocket = function(url, protocols) {\n          var req;\n          if (protocols != null) {\n            req = new _WebSocket(url, protocols);\n          } else {\n            req = new _WebSocket(url);\n          }\n          if (shouldTrack('socket')) {\n            _this.trigger('request', {\n              type: 'socket',\n              url: url,\n              protocols: protocols,\n              request: req\n            });\n          }\n          return req;\n        };\n        try {\n          extendNative(window.WebSocket, _WebSocket);\n        } catch (_error) {}\n      }\n    }\n\n    return RequestIntercept;\n\n  })(Events);\n\n  _intercept = null;\n\n  getIntercept = function() {\n    if (_intercept == null) {\n      _intercept = new RequestIntercept;\n    }\n    return _intercept;\n  };\n\n  shouldIgnoreURL = function(url) {\n    var pattern, _j, _len1, _ref2;\n    _ref2 = options.ajax.ignoreURLs;\n    for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n      pattern = _ref2[_j];\n      if (typeof pattern === 'string') {\n        if (url.indexOf(pattern) !== -1) {\n          return true;\n        }\n      } else {\n        if (pattern.test(url)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  };\n\n  getIntercept().on('request', function(_arg) {\n    var after, args, request, type, url;\n    type = _arg.type, request = _arg.request, url = _arg.url;\n    if (shouldIgnoreURL(url)) {\n      return;\n    }\n    if (!Pace.running && (options.restartOnRequestAfter !== false || shouldTrack(type) === 'force')) {\n      args = arguments;\n      after = options.restartOnRequestAfter || 0;\n      if (typeof after === 'boolean') {\n        after = 0;\n      }\n      return setTimeout(function() {\n        var stillActive, _j, _len1, _ref2, _ref3, _results;\n        if (type === 'socket') {\n          stillActive = request.readyState < 2;\n        } else {\n          stillActive = (0 < (_ref2 = request.readyState) && _ref2 < 4);\n        }\n        if (stillActive) {\n          Pace.restart();\n          _ref3 = Pace.sources;\n          _results = [];\n          for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {\n            source = _ref3[_j];\n            if (source instanceof AjaxMonitor) {\n              source.watch.apply(source, args);\n              break;\n            } else {\n              _results.push(void 0);\n            }\n          }\n          return _results;\n        }\n      }, after);\n    }\n  });\n\n  AjaxMonitor = (function() {\n    function AjaxMonitor() {\n      var _this = this;\n      this.elements = [];\n      getIntercept().on('request', function() {\n        return _this.watch.apply(_this, arguments);\n      });\n    }\n\n    AjaxMonitor.prototype.watch = function(_arg) {\n      var request, tracker, type, url;\n      type = _arg.type, request = _arg.request, url = _arg.url;\n      if (shouldIgnoreURL(url)) {\n        return;\n      }\n      if (type === 'socket') {\n        tracker = new SocketRequestTracker(request);\n      } else {\n        tracker = new XHRRequestTracker(request);\n      }\n      return this.elements.push(tracker);\n    };\n\n    return AjaxMonitor;\n\n  })();\n\n  XHRRequestTracker = (function() {\n    function XHRRequestTracker(request) {\n      var event, size, _j, _len1, _onreadystatechange, _ref2,\n        _this = this;\n      this.progress = 0;\n      if (window.ProgressEvent != null) {\n        size = null;\n        request.addEventListener('progress', function(evt) {\n          if (evt.lengthComputable) {\n            return _this.progress = 100 * evt.loaded / evt.total;\n          } else {\n            return _this.progress = _this.progress + (100 - _this.progress) / 2;\n          }\n        }, false);\n        _ref2 = ['load', 'abort', 'timeout', 'error'];\n        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n          event = _ref2[_j];\n          request.addEventListener(event, function() {\n            return _this.progress = 100;\n          }, false);\n        }\n      } else {\n        _onreadystatechange = request.onreadystatechange;\n        request.onreadystatechange = function() {\n          var _ref3;\n          if ((_ref3 = request.readyState) === 0 || _ref3 === 4) {\n            _this.progress = 100;\n          } else if (request.readyState === 3) {\n            _this.progress = 50;\n          }\n          return typeof _onreadystatechange === \"function\" ? _onreadystatechange.apply(null, arguments) : void 0;\n        };\n      }\n    }\n\n    return XHRRequestTracker;\n\n  })();\n\n  SocketRequestTracker = (function() {\n    function SocketRequestTracker(request) {\n      var event, _j, _len1, _ref2,\n        _this = this;\n      this.progress = 0;\n      _ref2 = ['error', 'open'];\n      for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n        event = _ref2[_j];\n        request.addEventListener(event, function() {\n          return _this.progress = 100;\n        }, false);\n      }\n    }\n\n    return SocketRequestTracker;\n\n  })();\n\n  ElementMonitor = (function() {\n    function ElementMonitor(options) {\n      var selector, _j, _len1, _ref2;\n      if (options == null) {\n        options = {};\n      }\n      this.elements = [];\n      if (options.selectors == null) {\n        options.selectors = [];\n      }\n      _ref2 = options.selectors;\n      for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n        selector = _ref2[_j];\n        this.elements.push(new ElementTracker(selector));\n      }\n    }\n\n    return ElementMonitor;\n\n  })();\n\n  ElementTracker = (function() {\n    function ElementTracker(selector) {\n      this.selector = selector;\n      this.progress = 0;\n      this.check();\n    }\n\n    ElementTracker.prototype.check = function() {\n      var _this = this;\n      if (document.querySelector(this.selector)) {\n        return this.done();\n      } else {\n        return setTimeout((function() {\n          return _this.check();\n        }), options.elements.checkInterval);\n      }\n    };\n\n    ElementTracker.prototype.done = function() {\n      return this.progress = 100;\n    };\n\n    return ElementTracker;\n\n  })();\n\n  DocumentMonitor = (function() {\n    DocumentMonitor.prototype.states = {\n      loading: 0,\n      interactive: 50,\n      complete: 100\n    };\n\n    function DocumentMonitor() {\n      var _onreadystatechange, _ref2,\n        _this = this;\n      this.progress = (_ref2 = this.states[document.readyState]) != null ? _ref2 : 100;\n      _onreadystatechange = document.onreadystatechange;\n      document.onreadystatechange = function() {\n        if (_this.states[document.readyState] != null) {\n          _this.progress = _this.states[document.readyState];\n        }\n        return typeof _onreadystatechange === \"function\" ? _onreadystatechange.apply(null, arguments) : void 0;\n      };\n    }\n\n    return DocumentMonitor;\n\n  })();\n\n  EventLagMonitor = (function() {\n    function EventLagMonitor() {\n      var avg, interval, last, points, samples,\n        _this = this;\n      this.progress = 0;\n      avg = 0;\n      samples = [];\n      points = 0;\n      last = now();\n      interval = setInterval(function() {\n        var diff;\n        diff = now() - last - 50;\n        last = now();\n        samples.push(diff);\n        if (samples.length > options.eventLag.sampleCount) {\n          samples.shift();\n        }\n        avg = avgAmplitude(samples);\n        if (++points >= options.eventLag.minSamples && avg < options.eventLag.lagThreshold) {\n          _this.progress = 100;\n          return clearInterval(interval);\n        } else {\n          return _this.progress = 100 * (3 / (avg + 3));\n        }\n      }, 50);\n    }\n\n    return EventLagMonitor;\n\n  })();\n\n  Scaler = (function() {\n    function Scaler(source) {\n      this.source = source;\n      this.last = this.sinceLastUpdate = 0;\n      this.rate = options.initialRate;\n      this.catchup = 0;\n      this.progress = this.lastProgress = 0;\n      if (this.source != null) {\n        this.progress = result(this.source, 'progress');\n      }\n    }\n\n    Scaler.prototype.tick = function(frameTime, val) {\n      var scaling;\n      if (val == null) {\n        val = result(this.source, 'progress');\n      }\n      if (val >= 100) {\n        this.done = true;\n      }\n      if (val === this.last) {\n        this.sinceLastUpdate += frameTime;\n      } else {\n        if (this.sinceLastUpdate) {\n          this.rate = (val - this.last) / this.sinceLastUpdate;\n        }\n        this.catchup = (val - this.progress) / options.catchupTime;\n        this.sinceLastUpdate = 0;\n        this.last = val;\n      }\n      if (val > this.progress) {\n        this.progress += this.catchup * frameTime;\n      }\n      scaling = 1 - Math.pow(this.progress / 100, options.easeFactor);\n      this.progress += scaling * this.rate * frameTime;\n      this.progress = Math.min(this.lastProgress + options.maxProgressPerFrame, this.progress);\n      this.progress = Math.max(0, this.progress);\n      this.progress = Math.min(100, this.progress);\n      this.lastProgress = this.progress;\n      return this.progress;\n    };\n\n    return Scaler;\n\n  })();\n\n  sources = null;\n\n  scalers = null;\n\n  bar = null;\n\n  uniScaler = null;\n\n  animation = null;\n\n  cancelAnimation = null;\n\n  Pace.running = false;\n\n  handlePushState = function() {\n    if (options.restartOnPushState) {\n      return Pace.restart();\n    }\n  };\n\n  if (window.history.pushState != null) {\n    _pushState = window.history.pushState;\n    window.history.pushState = function() {\n      handlePushState();\n      return _pushState.apply(window.history, arguments);\n    };\n  }\n\n  if (window.history.replaceState != null) {\n    _replaceState = window.history.replaceState;\n    window.history.replaceState = function() {\n      handlePushState();\n      return _replaceState.apply(window.history, arguments);\n    };\n  }\n\n  SOURCE_KEYS = {\n    ajax: AjaxMonitor,\n    elements: ElementMonitor,\n    document: DocumentMonitor,\n    eventLag: EventLagMonitor\n  };\n\n  (init = function() {\n    var type, _j, _k, _len1, _len2, _ref2, _ref3, _ref4;\n    Pace.sources = sources = [];\n    _ref2 = ['ajax', 'elements', 'document', 'eventLag'];\n    for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n      type = _ref2[_j];\n      if (options[type] !== false) {\n        sources.push(new SOURCE_KEYS[type](options[type]));\n      }\n    }\n    _ref4 = (_ref3 = options.extraSources) != null ? _ref3 : [];\n    for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {\n      source = _ref4[_k];\n      sources.push(new source(options));\n    }\n    Pace.bar = bar = new Bar;\n    scalers = [];\n    return uniScaler = new Scaler;\n  })();\n\n  Pace.stop = function() {\n    Pace.trigger('stop');\n    Pace.running = false;\n    bar.destroy();\n    cancelAnimation = true;\n    if (animation != null) {\n      if (typeof cancelAnimationFrame === \"function\") {\n        cancelAnimationFrame(animation);\n      }\n      animation = null;\n    }\n    return init();\n  };\n\n  Pace.restart = function() {\n    Pace.trigger('restart');\n    Pace.stop();\n    return Pace.start();\n  };\n\n  Pace.go = function() {\n    var start;\n    Pace.running = true;\n    bar.render();\n    start = now();\n    cancelAnimation = false;\n    return animation = runAnimation(function(frameTime, enqueueNextFrame) {\n      var avg, count, done, element, elements, i, j, remaining, scaler, scalerList, sum, _j, _k, _len1, _len2, _ref2;\n      remaining = 100 - bar.progress;\n      count = sum = 0;\n      done = true;\n      for (i = _j = 0, _len1 = sources.length; _j < _len1; i = ++_j) {\n        source = sources[i];\n        scalerList = scalers[i] != null ? scalers[i] : scalers[i] = [];\n        elements = (_ref2 = source.elements) != null ? _ref2 : [source];\n        for (j = _k = 0, _len2 = elements.length; _k < _len2; j = ++_k) {\n          element = elements[j];\n          scaler = scalerList[j] != null ? scalerList[j] : scalerList[j] = new Scaler(element);\n          done &= scaler.done;\n          if (scaler.done) {\n            continue;\n          }\n          count++;\n          sum += scaler.tick(frameTime);\n        }\n      }\n      avg = sum / count;\n      bar.update(uniScaler.tick(frameTime, avg));\n      if (bar.done() || done || cancelAnimation) {\n        bar.update(100);\n        Pace.trigger('done');\n        return setTimeout(function() {\n          bar.finish();\n          Pace.running = false;\n          return Pace.trigger('hide');\n        }, Math.max(options.ghostTime, Math.max(options.minTime - (now() - start), 0)));\n      } else {\n        return enqueueNextFrame();\n      }\n    });\n  };\n\n  Pace.start = function(_options) {\n    extend(options, _options);\n    Pace.running = true;\n    try {\n      bar.render();\n    } catch (_error) {\n      NoTargetError = _error;\n    }\n    if (!document.querySelector('.pace')) {\n      return setTimeout(Pace.start, 50);\n    } else {\n      Pace.trigger('start');\n      return Pace.go();\n    }\n  };\n\n  if (typeof define === 'function' && define.amd) {\n    define(['pace'], function() {\n      return Pace;\n    });\n  } else if (typeof exports === 'object') {\n    module.exports = Pace;\n  } else {\n    if (options.startOnPageLoad) {\n      Pace.start();\n    }\n  }\n\n}).call(this);\n"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/ar.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/ar\",[],function(){return{errorLoading:function(){return\"لا يمكن تحميل النتائج\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"الرجاء حذف \"+t+\" عناصر\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"الرجاء إضافة \"+t+\" عناصر\";return n},loadingMore:function(){return\"جاري تحميل نتائج إضافية...\"},maximumSelected:function(e){var t=\"تستطيع إختيار \"+e.maximum+\" بنود فقط\";return t},noResults:function(){return\"لم يتم العثور على أي نتائج\"},searching:function(){return\"جاري البحث…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/az.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/az\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return t+\" simvol silin\"},inputTooShort:function(e){var t=e.minimum-e.input.length;return t+\" simvol daxil edin\"},loadingMore:function(){return\"Daha çox nəticə yüklənir…\"},maximumSelected:function(e){return\"Sadəcə \"+e.maximum+\" element seçə bilərsiniz\"},noResults:function(){return\"Nəticə tapılmadı\"},searching:function(){return\"Axtarılır…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/bg.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/bg\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Моля въведете с \"+t+\" по-малко символ\";return t>1&&(n+=\"a\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Моля въведете още \"+t+\" символ\";return t>1&&(n+=\"a\"),n},loadingMore:function(){return\"Зареждат се още…\"},maximumSelected:function(e){var t=\"Можете да направите до \"+e.maximum+\" \";return e.maximum>1?t+=\"избора\":t+=\"избор\",t},noResults:function(){return\"Няма намерени съвпадения\"},searching:function(){return\"Търсене…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/ca.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/ca\",[],function(){return{errorLoading:function(){return\"La càrrega ha fallat\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Si us plau, elimina \"+t+\" car\";return t==1?n+=\"àcter\":n+=\"àcters\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Si us plau, introdueix \"+t+\" car\";return t==1?n+=\"àcter\":n+=\"àcters\",n},loadingMore:function(){return\"Carregant més resultats…\"},maximumSelected:function(e){var t=\"Només es pot seleccionar \"+e.maximum+\" element\";return e.maximum!=1&&(t+=\"s\"),t},noResults:function(){return\"No s'han trobat resultats\"},searching:function(){return\"Cercant…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/cs.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/cs\",[],function(){function e(e,t){switch(e){case 2:return t?\"dva\":\"dvě\";case 3:return\"tři\";case 4:return\"čtyři\"}return\"\"}return{errorLoading:function(){return\"Výsledky nemohly být načteny.\"},inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?\"Prosím zadejte o jeden znak méně\":n<=4?\"Prosím zadejte o \"+e(n,!0)+\" znaky méně\":\"Prosím zadejte o \"+n+\" znaků méně\"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?\"Prosím zadejte ještě jeden znak\":n<=4?\"Prosím zadejte ještě další \"+e(n,!0)+\" znaky\":\"Prosím zadejte ještě dalších \"+n+\" znaků\"},loadingMore:function(){return\"Načítají se další výsledky…\"},maximumSelected:function(t){var n=t.maximum;return n==1?\"Můžete zvolit jen jednu položku\":n<=4?\"Můžete zvolit maximálně \"+e(n,!1)+\" položky\":\"Můžete zvolit maximálně \"+n+\" položek\"},noResults:function(){return\"Nenalezeny žádné položky\"},searching:function(){return\"Vyhledávání…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/da.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/da\",[],function(){return{errorLoading:function(){return\"Resultaterne kunne ikke indlæses.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Angiv venligst \"+t+\" tegn mindre\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Angiv venligst \"+t+\" tegn mere\";return n},loadingMore:function(){return\"Indlæser flere resultater…\"},maximumSelected:function(e){var t=\"Du kan kun vælge \"+e.maximum+\" emne\";return e.maximum!=1&&(t+=\"r\"),t},noResults:function(){return\"Ingen resultater fundet\"},searching:function(){return\"Søger…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/de.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/de\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Bitte \"+t+\" Zeichen weniger eingeben\"},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Bitte \"+t+\" Zeichen mehr eingeben\"},loadingMore:function(){return\"Lade mehr Ergebnisse…\"},maximumSelected:function(e){var t=\"Sie können nur \"+e.maximum+\" Eintr\";return e.maximum===1?t+=\"ag\":t+=\"äge\",t+=\" auswählen\",t},noResults:function(){return\"Keine Übereinstimmungen gefunden\"},searching:function(){return\"Suche…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/el.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/el\",[],function(){return{errorLoading:function(){return\"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Παρακαλώ διαγράψτε \"+t+\" χαρακτήρ\";return t==1&&(n+=\"α\"),t!=1&&(n+=\"ες\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Παρακαλώ συμπληρώστε \"+t+\" ή περισσότερους χαρακτήρες\";return n},loadingMore:function(){return\"Φόρτωση περισσότερων αποτελεσμάτων…\"},maximumSelected:function(e){var t=\"Μπορείτε να επιλέξετε μόνο \"+e.maximum+\" επιλογ\";return e.maximum==1&&(t+=\"ή\"),e.maximum!=1&&(t+=\"ές\"),t},noResults:function(){return\"Δεν βρέθηκαν αποτελέσματα\"},searching:function(){return\"Αναζήτηση…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/en.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/en\",[],function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Please delete \"+t+\" character\";return t!=1&&(n+=\"s\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Please enter \"+t+\" or more characters\";return n},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(e){var t=\"You can only select \"+e.maximum+\" item\";return e.maximum!=1&&(t+=\"s\"),t},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/es.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/es\",[],function(){return{errorLoading:function(){return\"La carga falló\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Por favor, elimine \"+t+\" car\";return t==1?n+=\"ácter\":n+=\"acteres\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Por favor, introduzca \"+t+\" car\";return t==1?n+=\"ácter\":n+=\"acteres\",n},loadingMore:function(){return\"Cargando más resultados…\"},maximumSelected:function(e){var t=\"Sólo puede seleccionar \"+e.maximum+\" elemento\";return e.maximum!=1&&(t+=\"s\"),t},noResults:function(){return\"No se encontraron resultados\"},searching:function(){return\"Buscando…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/et.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/et\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Sisesta \"+t+\" täht\";return t!=1&&(n+=\"e\"),n+=\" vähem\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Sisesta \"+t+\" täht\";return t!=1&&(n+=\"e\"),n+=\" rohkem\",n},loadingMore:function(){return\"Laen tulemusi…\"},maximumSelected:function(e){var t=\"Saad vaid \"+e.maximum+\" tulemus\";return e.maximum==1?t+=\"e\":t+=\"t\",t+=\" valida\",t},noResults:function(){return\"Tulemused puuduvad\"},searching:function(){return\"Otsin…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/eu.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/eu\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Idatzi \";return t==1?n+=\"karaktere bat\":n+=t+\" karaktere\",n+=\" gutxiago\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Idatzi \";return t==1?n+=\"karaktere bat\":n+=t+\" karaktere\",n+=\" gehiago\",n},loadingMore:function(){return\"Emaitza gehiago kargatzen…\"},maximumSelected:function(e){return e.maximum===1?\"Elementu bakarra hauta dezakezu\":e.maximum+\" elementu hauta ditzakezu soilik\"},noResults:function(){return\"Ez da bat datorrenik aurkitu\"},searching:function(){return\"Bilatzen…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/fa.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/fa\",[],function(){return{errorLoading:function(){return\"امکان بارگذاری نتایج وجود ندارد.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"لطفاً \"+t+\" کاراکتر را حذف نمایید\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"لطفاً تعداد \"+t+\" کاراکتر یا بیشتر وارد نمایید\";return n},loadingMore:function(){return\"در حال بارگذاری نتایج بیشتر...\"},maximumSelected:function(e){var t=\"شما تنها می‌توانید \"+e.maximum+\" آیتم را انتخاب نمایید\";return t},noResults:function(){return\"هیچ نتیجه‌ای یافت نشد\"},searching:function(){return\"در حال جستجو...\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/fi.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/fi\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Ole hyvä ja anna \"+t+\" merkkiä vähemmän\"},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Ole hyvä ja anna \"+t+\" merkkiä lisää\"},loadingMore:function(){return\"Ladataan lisää tuloksia…\"},maximumSelected:function(e){return\"Voit valita ainoastaan \"+e.maximum+\" kpl\"},noResults:function(){return\"Ei tuloksia\"},searching:function(){}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/fr.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/fr\",[],function(){return{errorLoading:function(){return\"Les résultats ne peuvent pas être chargés.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Supprimez \"+t+\" caractère\";return t!==1&&(n+=\"s\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Saisissez \"+t+\" caractère\";return t!==1&&(n+=\"s\"),n},loadingMore:function(){return\"Chargement de résultats supplémentaires…\"},maximumSelected:function(e){var t=\"Vous pouvez seulement sélectionner \"+e.maximum+\" élément\";return e.maximum!==1&&(t+=\"s\"),t},noResults:function(){return\"Aucun résultat trouvé\"},searching:function(){return\"Recherche en cours…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/gl.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/gl\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Elimine \";return t===1?n+=\"un carácter\":n+=t+\" caracteres\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Engada \";return t===1?n+=\"un carácter\":n+=t+\" caracteres\",n},loadingMore:function(){return\"Cargando máis resultados…\"},maximumSelected:function(e){var t=\"Só pode \";return e.maximum===1?t+=\"un elemento\":t+=e.maximum+\" elementos\",t},noResults:function(){return\"Non se atoparon resultados\"},searching:function(){return\"Buscando…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/he.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/he\",[],function(){return{errorLoading:function(){return\"שגיאה בטעינת התוצאות\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"נא למחוק \";return t===1?n+=\"תו אחד\":n+=t+\" תווים\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"נא להכניס \";return t===1?n+=\"תו אחד\":n+=t+\" תווים\",n+=\" או יותר\",n},loadingMore:function(){return\"טוען תוצאות נוספות…\"},maximumSelected:function(e){var t=\"באפשרותך לבחור עד \";return e.maximum===1?t+=\"פריט אחד\":t+=e.maximum+\" פריטים\",t},noResults:function(){return\"לא נמצאו תוצאות\"},searching:function(){return\"מחפש…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/hi.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/hi\",[],function(){return{errorLoading:function(){return\"परिणामों को लोड नहीं किया जा सका।\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+\" अक्षर को हटा दें\";return t>1&&(n=t+\" अक्षरों को हटा दें \"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"कृपया \"+t+\" या अधिक अक्षर दर्ज करें\";return n},loadingMore:function(){return\"अधिक परिणाम लोड हो रहे है...\"},maximumSelected:function(e){var t=\"आप केवल \"+e.maximum+\" आइटम का चयन कर सकते हैं\";return t},noResults:function(){return\"कोई परिणाम नहीं मिला\"},searching:function(){return\"खोज रहा है...\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/hr.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/hr\",[],function(){function e(e){var t=\" \"+e+\" znak\";return e%10<5&&e%10>0&&(e%100<5||e%100>19)?e%10>1&&(t+=\"a\"):t+=\"ova\",t}return{errorLoading:function(){return\"Preuzimanje nije uspjelo.\"},inputTooLong:function(t){var n=t.input.length-t.maximum;return\"Unesite \"+e(n)},inputTooShort:function(t){var n=t.minimum-t.input.length;return\"Unesite još \"+e(n)},loadingMore:function(){return\"Učitavanje rezultata…\"},maximumSelected:function(e){return\"Maksimalan broj odabranih stavki je \"+e.maximum},noResults:function(){return\"Nema rezultata\"},searching:function(){return\"Pretraga…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/hu.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/hu\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Túl hosszú. \"+t+\" karakterrel több, mint kellene.\"},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Túl rövid. Még \"+t+\" karakter hiányzik.\"},loadingMore:function(){return\"Töltés…\"},maximumSelected:function(e){return\"Csak \"+e.maximum+\" elemet lehet kiválasztani.\"},noResults:function(){return\"Nincs találat.\"},searching:function(){return\"Keresés…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/id.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/id\",[],function(){return{errorLoading:function(){return\"Data tidak boleh diambil.\"},inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Hapuskan \"+t+\" huruf\"},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Masukkan \"+t+\" huruf lagi\"},loadingMore:function(){return\"Mengambil data…\"},maximumSelected:function(e){return\"Anda hanya dapat memilih \"+e.maximum+\" pilihan\"},noResults:function(){return\"Tidak ada data yang sesuai\"},searching:function(){return\"Mencari…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/is.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/is\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Vinsamlegast styttið texta um \"+t+\" staf\";return t<=1?n:n+\"i\"},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Vinsamlegast skrifið \"+t+\" staf\";return t>1&&(n+=\"i\"),n+=\" í viðbót\",n},loadingMore:function(){return\"Sæki fleiri niðurstöður…\"},maximumSelected:function(e){return\"Þú getur aðeins valið \"+e.maximum+\" atriði\"},noResults:function(){return\"Ekkert fannst\"},searching:function(){return\"Leita…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/it.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/it\",[],function(){return{errorLoading:function(){return\"I risultati non possono essere caricati.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Per favore cancella \"+t+\" caratter\";return t!==1?n+=\"i\":n+=\"e\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Per favore inserisci \"+t+\" o più caratteri\";return n},loadingMore:function(){return\"Caricando più risultati…\"},maximumSelected:function(e){var t=\"Puoi selezionare solo \"+e.maximum+\" element\";return e.maximum!==1?t+=\"i\":t+=\"o\",t},noResults:function(){return\"Nessun risultato trovato\"},searching:function(){return\"Sto cercando…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/ja.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/ja\",[],function(){return{errorLoading:function(){return\"結果が読み込まれませんでした\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+\" 文字を削除してください\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"少なくとも \"+t+\" 文字を入力してください\";return n},loadingMore:function(){return\"読み込み中…\"},maximumSelected:function(e){var t=e.maximum+\" 件しか選択できません\";return t},noResults:function(){return\"対象が見つかりません\"},searching:function(){return\"検索しています…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/km.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/km\",[],function(){return{errorLoading:function(){return\"មិនអាចទាញយកទិន្នន័យ\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"សូមលុបចេញ  \"+t+\" អក្សរ\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"សូមបញ្ចូល\"+t+\" អក្សរ រឺ ច្រើនជាងនេះ\";return n},loadingMore:function(){return\"កំពុងទាញយកទិន្នន័យបន្ថែម...\"},maximumSelected:function(e){var t=\"អ្នកអាចជ្រើសរើសបានតែ \"+e.maximum+\" ជម្រើសប៉ុណ្ណោះ\";return t},noResults:function(){return\"មិនមានលទ្ធផល\"},searching:function(){return\"កំពុងស្វែងរក...\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/ko.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/ko\",[],function(){return{errorLoading:function(){return\"결과를 불러올 수 없습니다.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"너무 깁니다. \"+t+\" 글자 지워주세요.\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"너무 짧습니다. \"+t+\" 글자 더 입력해주세요.\";return n},loadingMore:function(){return\"불러오는 중…\"},maximumSelected:function(e){var t=\"최대 \"+e.maximum+\"개까지만 선택 가능합니다.\";return t},noResults:function(){return\"결과가 없습니다.\"},searching:function(){return\"검색 중…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/lt.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/lt\",[],function(){function e(e,t,n,r){return e%10===1&&(e%100<11||e%100>19)?t:e%10>=2&&e%10<=9&&(e%100<11||e%100>19)?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r=\"Pašalinkite \"+n+\" simbol\";return r+=e(n,\"į\",\"ius\",\"ių\"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r=\"Įrašykite dar \"+n+\" simbol\";return r+=e(n,\"į\",\"ius\",\"ių\"),r},loadingMore:function(){return\"Kraunama daugiau rezultatų…\"},maximumSelected:function(t){var n=\"Jūs galite pasirinkti tik \"+t.maximum+\" element\";return n+=e(t.maximum,\"ą\",\"us\",\"ų\"),n},noResults:function(){return\"Atitikmenų nerasta\"},searching:function(){return\"Ieškoma…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/lv.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/lv\",[],function(){function e(e,t,n,r){return e===11?t:e%10===1?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r=\"Lūdzu ievadiet par  \"+n;return r+=\" simbol\"+e(n,\"iem\",\"u\",\"iem\"),r+\" mazāk\"},inputTooShort:function(t){var n=t.minimum-t.input.length,r=\"Lūdzu ievadiet vēl \"+n;return r+=\" simbol\"+e(n,\"us\",\"u\",\"us\"),r},loadingMore:function(){return\"Datu ielāde…\"},maximumSelected:function(t){var n=\"Jūs varat izvēlēties ne vairāk kā \"+t.maximum;return n+=\" element\"+e(t.maximum,\"us\",\"u\",\"us\"),n},noResults:function(){return\"Sakritību nav\"},searching:function(){return\"Meklēšana…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/mk.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/mk\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Ве молиме внесете \"+e.maximum+\" помалку карактер\";return e.maximum!==1&&(n+=\"и\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Ве молиме внесете уште \"+e.maximum+\" карактер\";return e.maximum!==1&&(n+=\"и\"),n},loadingMore:function(){return\"Вчитување резултати…\"},maximumSelected:function(e){var t=\"Можете да изберете само \"+e.maximum+\" ставк\";return e.maximum===1?t+=\"а\":t+=\"и\",t},noResults:function(){return\"Нема пронајдено совпаѓања\"},searching:function(){return\"Пребарување…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/ms.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/ms\",[],function(){return{errorLoading:function(){return\"Keputusan tidak berjaya dimuatkan.\"},inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Sila hapuskan \"+t+\" aksara\"},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Sila masukkan \"+t+\" atau lebih aksara\"},loadingMore:function(){return\"Sedang memuatkan keputusan…\"},maximumSelected:function(e){return\"Anda hanya boleh memilih \"+e.maximum+\" pilihan\"},noResults:function(){return\"Tiada padanan yang ditemui\"},searching:function(){return\"Mencari…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/nb.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/nb\",[],function(){return{errorLoading:function(){return\"Kunne ikke hente resultater.\"},inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Vennligst fjern \"+t+\" tegn\"},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Vennligst skriv inn \";return t>1?n+=\" flere tegn\":n+=\" tegn til\",n},loadingMore:function(){return\"Laster flere resultater…\"},maximumSelected:function(e){return\"Du kan velge maks \"+e.maximum+\" elementer\"},noResults:function(){return\"Ingen treff\"},searching:function(){return\"Søker…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/nl.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/nl\",[],function(){return{errorLoading:function(){return\"De resultaten konden niet worden geladen.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Gelieve \"+t+\" karakters te verwijderen\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Gelieve \"+t+\" of meer karakters in te voeren\";return n},loadingMore:function(){return\"Meer resultaten laden…\"},maximumSelected:function(e){var t=e.maximum==1?\"kan\":\"kunnen\",n=\"Er \"+t+\" maar \"+e.maximum+\" item\";return e.maximum!=1&&(n+=\"s\"),n+=\" worden geselecteerd\",n},noResults:function(){return\"Geen resultaten gevonden…\"},searching:function(){return\"Zoeken…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/pl.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/pl\",[],function(){var e=[\"znak\",\"znaki\",\"znaków\"],t=[\"element\",\"elementy\",\"elementów\"],n=function(t,n){if(t===1)return n[0];if(t>1&&t<=4)return n[1];if(t>=5)return n[2]};return{errorLoading:function(){return\"Nie można załadować wyników.\"},inputTooLong:function(t){var r=t.input.length-t.maximum;return\"Usuń \"+r+\" \"+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return\"Podaj przynajmniej \"+r+\" \"+n(r,e)},loadingMore:function(){return\"Trwa ładowanie…\"},maximumSelected:function(e){return\"Możesz zaznaczyć tylko \"+e.maximum+\" \"+n(e.maximum,t)},noResults:function(){return\"Brak wyników\"},searching:function(){return\"Trwa wyszukiwanie…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/pt-BR.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/pt-BR\",[],function(){return{errorLoading:function(){return\"Os resultados não puderam ser carregados.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Apague \"+t+\" caracter\";return t!=1&&(n+=\"es\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Digite \"+t+\" ou mais caracteres\";return n},loadingMore:function(){return\"Carregando mais resultados…\"},maximumSelected:function(e){var t=\"Você só pode selecionar \"+e.maximum+\" ite\";return e.maximum==1?t+=\"m\":t+=\"ns\",t},noResults:function(){return\"Nenhum resultado encontrado\"},searching:function(){return\"Buscando…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/pt.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/pt\",[],function(){return{errorLoading:function(){return\"Os resultados não puderam ser carregados.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Por favor apague \"+t+\" \";return n+=t!=1?\"caracteres\":\"carácter\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Introduza \"+t+\" ou mais caracteres\";return n},loadingMore:function(){return\"A carregar mais resultados…\"},maximumSelected:function(e){var t=\"Apenas pode seleccionar \"+e.maximum+\" \";return t+=e.maximum!=1?\"itens\":\"item\",t},noResults:function(){return\"Sem resultados\"},searching:function(){return\"A procurar…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/ro.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/ro\",[],function(){return{errorLoading:function(){return\"Rezultatele nu au putut fi incărcate.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Vă rugăm să ștergeți\"+t+\" caracter\";return t!==1&&(n+=\"e\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Vă rugăm să introduceți \"+t+\"sau mai multe caractere\";return n},loadingMore:function(){return\"Se încarcă mai multe rezultate…\"},maximumSelected:function(e){var t=\"Aveți voie să selectați cel mult \"+e.maximum;return t+=\" element\",e.maximum!==1&&(t+=\"e\"),t},noResults:function(){return\"Nu au fost găsite rezultate\"},searching:function(){return\"Căutare…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/ru.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/ru\",[],function(){function e(e,t,n,r){return e%10<5&&e%10>0&&e%100<5||e%100>20?e%10>1?n:t:r}return{errorLoading:function(){return\"Невозможно загрузить результаты\"},inputTooLong:function(t){var n=t.input.length-t.maximum,r=\"Пожалуйста, введите на \"+n+\" символ\";return r+=e(n,\"\",\"a\",\"ов\"),r+=\" меньше\",r},inputTooShort:function(t){var n=t.minimum-t.input.length,r=\"Пожалуйста, введите еще хотя бы \"+n+\" символ\";return r+=e(n,\"\",\"a\",\"ов\"),r},loadingMore:function(){return\"Загрузка данных…\"},maximumSelected:function(t){var n=\"Вы можете выбрать не более \"+t.maximum+\" элемент\";return n+=e(t.maximum,\"\",\"a\",\"ов\"),n},noResults:function(){return\"Совпадений не найдено\"},searching:function(){return\"Поиск…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/sk.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/sk\",[],function(){var e={2:function(e){return e?\"dva\":\"dve\"},3:function(){return\"tri\"},4:function(){return\"štyri\"}};return{inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?\"Prosím, zadajte o jeden znak menej\":n>=2&&n<=4?\"Prosím, zadajte o \"+e[n](!0)+\" znaky menej\":\"Prosím, zadajte o \"+n+\" znakov menej\"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?\"Prosím, zadajte ešte jeden znak\":n<=4?\"Prosím, zadajte ešte ďalšie \"+e[n](!0)+\" znaky\":\"Prosím, zadajte ešte ďalších \"+n+\" znakov\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(t){return t.maximum==1?\"Môžete zvoliť len jednu položku\":t.maximum>=2&&t.maximum<=4?\"Môžete zvoliť najviac \"+e[t.maximum](!1)+\" položky\":\"Môžete zvoliť najviac \"+t.maximum+\" položiek\"},noResults:function(){return\"Nenašli sa žiadne položky\"},searching:function(){return\"Vyhľadávanie…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/sr-Cyrl.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/sr-Cyrl\",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return\"Преузимање није успело.\"},inputTooLong:function(t){var n=t.input.length-t.maximum,r=\"Обришите \"+n+\" симбол\";return r+=e(n,\"\",\"а\",\"а\"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r=\"Укуцајте бар још \"+n+\" симбол\";return r+=e(n,\"\",\"а\",\"а\"),r},loadingMore:function(){return\"Преузимање још резултата…\"},maximumSelected:function(t){var n=\"Можете изабрати само \"+t.maximum+\" ставк\";return n+=e(t.maximum,\"у\",\"е\",\"и\"),n},noResults:function(){return\"Ништа није пронађено\"},searching:function(){return\"Претрага…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/sr.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/sr\",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return\"Preuzimanje nije uspelo.\"},inputTooLong:function(t){var n=t.input.length-t.maximum,r=\"Obrišite \"+n+\" simbol\";return r+=e(n,\"\",\"a\",\"a\"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r=\"Ukucajte bar još \"+n+\" simbol\";return r+=e(n,\"\",\"a\",\"a\"),r},loadingMore:function(){return\"Preuzimanje još rezultata…\"},maximumSelected:function(t){var n=\"Možete izabrati samo \"+t.maximum+\" stavk\";return n+=e(t.maximum,\"u\",\"e\",\"i\"),n},noResults:function(){return\"Ništa nije pronađeno\"},searching:function(){return\"Pretraga…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/sv.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/sv\",[],function(){return{errorLoading:function(){return\"Resultat kunde inte laddas.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Vänligen sudda ut \"+t+\" tecken\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Vänligen skriv in \"+t+\" eller fler tecken\";return n},loadingMore:function(){return\"Laddar fler resultat…\"},maximumSelected:function(e){var t=\"Du kan max välja \"+e.maximum+\" element\";return t},noResults:function(){return\"Inga träffar\"},searching:function(){return\"Söker…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/th.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/th\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"โปรดลบออก \"+t+\" ตัวอักษร\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"โปรดพิมพ์เพิ่มอีก \"+t+\" ตัวอักษร\";return n},loadingMore:function(){return\"กำลังค้นข้อมูลเพิ่ม…\"},maximumSelected:function(e){var t=\"คุณสามารถเลือกได้ไม่เกิน \"+e.maximum+\" รายการ\";return t},noResults:function(){return\"ไม่พบข้อมูล\"},searching:function(){return\"กำลังค้นข้อมูล…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/tr.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/tr\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+\" karakter daha girmelisiniz\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"En az \"+t+\" karakter daha girmelisiniz\";return n},loadingMore:function(){return\"Daha fazla…\"},maximumSelected:function(e){var t=\"Sadece \"+e.maximum+\" seçim yapabilirsiniz\";return t},noResults:function(){return\"Sonuç bulunamadı\"},searching:function(){return\"Aranıyor…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/uk.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/uk\",[],function(){function e(e,t,n,r){return e%100>10&&e%100<15?r:e%10===1?t:e%10>1&&e%10<5?n:r}return{errorLoading:function(){return\"Неможливо завантажити результати\"},inputTooLong:function(t){var n=t.input.length-t.maximum;return\"Будь ласка, видаліть \"+n+\" \"+e(t.maximum,\"літеру\",\"літери\",\"літер\")},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Будь ласка, введіть \"+t+\" або більше літер\"},loadingMore:function(){return\"Завантаження інших результатів…\"},maximumSelected:function(t){return\"Ви можете вибрати лише \"+t.maximum+\" \"+e(t.maximum,\"пункт\",\"пункти\",\"пунктів\")},noResults:function(){return\"Нічого не знайдено\"},searching:function(){return\"Пошук…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/vi.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/vi\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Vui lòng nhập ít hơn \"+t+\" ký tự\";return t!=1&&(n+=\"s\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Vui lòng nhập nhiều hơn \"+t+' ký tự\"';return n},loadingMore:function(){return\"Đang lấy thêm kết quả…\"},maximumSelected:function(e){var t=\"Chỉ có thể chọn được \"+e.maximum+\" lựa chọn\";return t},noResults:function(){return\"Không tìm thấy kết quả\"},searching:function(){return\"Đang tìm…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/zh-CN.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/zh-CN\",[],function(){return{errorLoading:function(){return\"无法载入结果。\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"请删除\"+t+\"个字符\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"请再输入至少\"+t+\"个字符\";return n},loadingMore:function(){return\"载入更多结果…\"},maximumSelected:function(e){var t=\"最多只能选择\"+e.maximum+\"个项目\";return t},noResults:function(){return\"未找到结果\"},searching:function(){return\"搜索中…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/i18n/zh-TW.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/zh-TW\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"請刪掉\"+t+\"個字元\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"請再輸入\"+t+\"個字元\";return n},loadingMore:function(){return\"載入中…\"},maximumSelected:function(e){var t=\"你只能選擇最多\"+e.maximum+\"項\";return t},noResults:function(){return\"沒有找到相符的項目\"},searching:function(){return\"搜尋中…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "public/adminlte/plugins/select2/select2.css",
    "content": ".select2-container {\n  box-sizing: border-box;\n  display: inline-block;\n  margin: 0;\n  position: relative;\n  vertical-align: middle; }\n  .select2-container .select2-selection--single {\n    box-sizing: border-box;\n    cursor: pointer;\n    display: block;\n    height: 28px;\n    user-select: none;\n    -webkit-user-select: none; }\n    .select2-container .select2-selection--single .select2-selection__rendered {\n      display: block;\n      padding-left: 8px;\n      padding-right: 20px;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap; }\n    .select2-container .select2-selection--single .select2-selection__clear {\n      position: relative; }\n  .select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n    padding-right: 8px;\n    padding-left: 20px; }\n  .select2-container .select2-selection--multiple {\n    box-sizing: border-box;\n    cursor: pointer;\n    display: block;\n    min-height: 32px;\n    user-select: none;\n    -webkit-user-select: none; }\n    .select2-container .select2-selection--multiple .select2-selection__rendered {\n      display: inline-block;\n      overflow: hidden;\n      padding-left: 8px;\n      text-overflow: ellipsis;\n      white-space: nowrap; }\n  .select2-container .select2-search--inline {\n    float: left; }\n    .select2-container .select2-search--inline .select2-search__field {\n      box-sizing: border-box;\n      border: none;\n      font-size: 100%;\n      margin-top: 5px;\n      padding: 0; }\n      .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {\n        -webkit-appearance: none; }\n\n.select2-dropdown {\n  background-color: white;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  box-sizing: border-box;\n  display: block;\n  position: absolute;\n  left: -100000px;\n  width: 100%;\n  z-index: 1051; }\n\n.select2-results {\n  display: block; }\n\n.select2-results__options {\n  list-style: none;\n  margin: 0;\n  padding: 0; }\n\n.select2-results__option {\n  padding: 6px;\n  user-select: none;\n  -webkit-user-select: none; }\n  .select2-results__option[aria-selected] {\n    cursor: pointer; }\n\n.select2-container--open .select2-dropdown {\n  left: 0; }\n\n.select2-container--open .select2-dropdown--above {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.select2-container--open .select2-dropdown--below {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0; }\n\n.select2-search--dropdown {\n  display: block;\n  padding: 4px; }\n  .select2-search--dropdown .select2-search__field {\n    padding: 4px;\n    width: 100%;\n    box-sizing: border-box; }\n    .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {\n      -webkit-appearance: none; }\n  .select2-search--dropdown.select2-search--hide {\n    display: none; }\n\n.select2-close-mask {\n  border: 0;\n  margin: 0;\n  padding: 0;\n  display: block;\n  position: fixed;\n  left: 0;\n  top: 0;\n  min-height: 100%;\n  min-width: 100%;\n  height: auto;\n  width: auto;\n  opacity: 0;\n  z-index: 99;\n  background-color: #fff;\n  filter: alpha(opacity=0); }\n\n.select2-hidden-accessible {\n  border: 0 !important;\n  clip: rect(0 0 0 0) !important;\n  height: 1px !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  padding: 0 !important;\n  position: absolute !important;\n  width: 1px !important; }\n\n.select2-container--default .select2-selection--single {\n  background-color: #fff;\n  border: 1px solid #aaa;\n  border-radius: 4px; }\n  .select2-container--default .select2-selection--single .select2-selection__rendered {\n    color: #444;\n    line-height: 28px; }\n  .select2-container--default .select2-selection--single .select2-selection__clear {\n    cursor: pointer;\n    float: right;\n    font-weight: bold; }\n  .select2-container--default .select2-selection--single .select2-selection__placeholder {\n    color: #999; }\n  .select2-container--default .select2-selection--single .select2-selection__arrow {\n    height: 26px;\n    position: absolute;\n    top: 1px;\n    right: 1px;\n    width: 20px; }\n    .select2-container--default .select2-selection--single .select2-selection__arrow b {\n      border-color: #888 transparent transparent transparent;\n      border-style: solid;\n      border-width: 5px 4px 0 4px;\n      height: 0;\n      left: 50%;\n      margin-left: -4px;\n      margin-top: -2px;\n      position: absolute;\n      top: 50%;\n      width: 0; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n  float: left; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n  left: 1px;\n  right: auto; }\n\n.select2-container--default.select2-container--disabled .select2-selection--single {\n  background-color: #eee;\n  cursor: default; }\n  .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {\n    display: none; }\n\n.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {\n  border-color: transparent transparent #888 transparent;\n  border-width: 0 4px 5px 4px; }\n\n.select2-container--default .select2-selection--multiple {\n  background-color: white;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  cursor: text; }\n  .select2-container--default .select2-selection--multiple .select2-selection__rendered {\n    box-sizing: border-box;\n    list-style: none;\n    margin: 0;\n    padding: 0 5px;\n    width: 100%; }\n    .select2-container--default .select2-selection--multiple .select2-selection__rendered li {\n      list-style: none; }\n  .select2-container--default .select2-selection--multiple .select2-selection__placeholder {\n    color: #999;\n    margin-top: 5px;\n    float: left; }\n  .select2-container--default .select2-selection--multiple .select2-selection__clear {\n    cursor: pointer;\n    float: right;\n    font-weight: bold;\n    margin-top: 5px;\n    margin-right: 10px; }\n  .select2-container--default .select2-selection--multiple .select2-selection__choice {\n    background-color: #e4e4e4;\n    border: 1px solid #aaa;\n    border-radius: 4px;\n    cursor: default;\n    float: left;\n    margin-right: 5px;\n    margin-top: 5px;\n    padding: 0 5px; }\n  .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n    color: #999;\n    cursor: pointer;\n    display: inline-block;\n    font-weight: bold;\n    margin-right: 2px; }\n    .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {\n      color: #333; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-search--inline {\n  float: right; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n  margin-left: 5px;\n  margin-right: auto; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n  margin-left: 2px;\n  margin-right: auto; }\n\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n  border: solid black 1px;\n  outline: 0; }\n\n.select2-container--default.select2-container--disabled .select2-selection--multiple {\n  background-color: #eee;\n  cursor: default; }\n\n.select2-container--default.select2-container--disabled .select2-selection__choice__remove {\n  display: none; }\n\n.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0; }\n\n.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.select2-container--default .select2-search--dropdown .select2-search__field {\n  border: 1px solid #aaa; }\n\n.select2-container--default .select2-search--inline .select2-search__field {\n  background: transparent;\n  border: none;\n  outline: 0;\n  box-shadow: none;\n  -webkit-appearance: textfield; }\n\n.select2-container--default .select2-results > .select2-results__options {\n  max-height: 200px;\n  overflow-y: auto; }\n\n.select2-container--default .select2-results__option[role=group] {\n  padding: 0; }\n\n.select2-container--default .select2-results__option[aria-disabled=true] {\n  color: #999; }\n\n.select2-container--default .select2-results__option[aria-selected=true] {\n  background-color: #ddd; }\n\n.select2-container--default .select2-results__option .select2-results__option {\n  padding-left: 1em; }\n  .select2-container--default .select2-results__option .select2-results__option .select2-results__group {\n    padding-left: 0; }\n  .select2-container--default .select2-results__option .select2-results__option .select2-results__option {\n    margin-left: -1em;\n    padding-left: 2em; }\n    .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n      margin-left: -2em;\n      padding-left: 3em; }\n      .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n        margin-left: -3em;\n        padding-left: 4em; }\n        .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n          margin-left: -4em;\n          padding-left: 5em; }\n          .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n            margin-left: -5em;\n            padding-left: 6em; }\n\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n  background-color: #5897fb;\n  color: white; }\n\n.select2-container--default .select2-results__group {\n  cursor: default;\n  display: block;\n  padding: 6px; }\n\n.select2-container--classic .select2-selection--single {\n  background-color: #f7f7f7;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  outline: 0;\n  background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);\n  background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);\n  background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }\n  .select2-container--classic .select2-selection--single:focus {\n    border: 1px solid #5897fb; }\n  .select2-container--classic .select2-selection--single .select2-selection__rendered {\n    color: #444;\n    line-height: 28px; }\n  .select2-container--classic .select2-selection--single .select2-selection__clear {\n    cursor: pointer;\n    float: right;\n    font-weight: bold;\n    margin-right: 10px; }\n  .select2-container--classic .select2-selection--single .select2-selection__placeholder {\n    color: #999; }\n  .select2-container--classic .select2-selection--single .select2-selection__arrow {\n    background-color: #ddd;\n    border: none;\n    border-left: 1px solid #aaa;\n    border-top-right-radius: 4px;\n    border-bottom-right-radius: 4px;\n    height: 26px;\n    position: absolute;\n    top: 1px;\n    right: 1px;\n    width: 20px;\n    background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n    background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n    background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }\n    .select2-container--classic .select2-selection--single .select2-selection__arrow b {\n      border-color: #888 transparent transparent transparent;\n      border-style: solid;\n      border-width: 5px 4px 0 4px;\n      height: 0;\n      left: 50%;\n      margin-left: -4px;\n      margin-top: -2px;\n      position: absolute;\n      top: 50%;\n      width: 0; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n  float: left; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n  border: none;\n  border-right: 1px solid #aaa;\n  border-radius: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n  left: 1px;\n  right: auto; }\n\n.select2-container--classic.select2-container--open .select2-selection--single {\n  border: 1px solid #5897fb; }\n  .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {\n    background: transparent;\n    border: none; }\n    .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {\n      border-color: transparent transparent #888 transparent;\n      border-width: 0 4px 5px 4px; }\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);\n  background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);\n  background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n  background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);\n  background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);\n  background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }\n\n.select2-container--classic .select2-selection--multiple {\n  background-color: white;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  cursor: text;\n  outline: 0; }\n  .select2-container--classic .select2-selection--multiple:focus {\n    border: 1px solid #5897fb; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__rendered {\n    list-style: none;\n    margin: 0;\n    padding: 0 5px; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__clear {\n    display: none; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__choice {\n    background-color: #e4e4e4;\n    border: 1px solid #aaa;\n    border-radius: 4px;\n    cursor: default;\n    float: left;\n    margin-right: 5px;\n    margin-top: 5px;\n    padding: 0 5px; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {\n    color: #888;\n    cursor: pointer;\n    display: inline-block;\n    font-weight: bold;\n    margin-right: 2px; }\n    .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {\n      color: #555; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n  float: right; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n  margin-left: 5px;\n  margin-right: auto; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n  margin-left: 2px;\n  margin-right: auto; }\n\n.select2-container--classic.select2-container--open .select2-selection--multiple {\n  border: 1px solid #5897fb; }\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0; }\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.select2-container--classic .select2-search--dropdown .select2-search__field {\n  border: 1px solid #aaa;\n  outline: 0; }\n\n.select2-container--classic .select2-search--inline .select2-search__field {\n  outline: 0;\n  box-shadow: none; }\n\n.select2-container--classic .select2-dropdown {\n  background-color: white;\n  border: 1px solid transparent; }\n\n.select2-container--classic .select2-dropdown--above {\n  border-bottom: none; }\n\n.select2-container--classic .select2-dropdown--below {\n  border-top: none; }\n\n.select2-container--classic .select2-results > .select2-results__options {\n  max-height: 200px;\n  overflow-y: auto; }\n\n.select2-container--classic .select2-results__option[role=group] {\n  padding: 0; }\n\n.select2-container--classic .select2-results__option[aria-disabled=true] {\n  color: grey; }\n\n.select2-container--classic .select2-results__option--highlighted[aria-selected] {\n  background-color: #3875d7;\n  color: white; }\n\n.select2-container--classic .select2-results__group {\n  cursor: default;\n  display: block;\n  padding: 6px; }\n\n.select2-container--classic.select2-container--open .select2-dropdown {\n  border-color: #5897fb; }\n"
  },
  {
    "path": "public/adminlte/plugins/select2/select2.full.js",
    "content": "/*!\n * Select2 4.0.3\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof exports === 'object') {\n    // Node/CommonJS\n    factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n}(function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 =\n(function () {\n  // Restore the Select2 AMD loader so it can be used\n  // Needed mostly in the language files, where the loader is not inserted\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n    var S2 = jQuery.fn.select2.amd;\n  }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/almond for details\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*jslint sloppy: true */\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n    var main, req, makeMap, handlers,\n        defined = {},\n        waiting = {},\n        config = {},\n        defining = {},\n        hasOwn = Object.prototype.hasOwnProperty,\n        aps = [].slice,\n        jsSuffixRegExp = /\\.js$/;\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    /**\n     * Given a relative module name, like ./something, normalize it to\n     * a real name that can be mapped to a path.\n     * @param {String} name the relative name\n     * @param {String} baseName a real name that the name arg is relative\n     * to.\n     * @returns {String} normalized name\n     */\n    function normalize(name, baseName) {\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n            foundI, foundStarMap, starI, i, j, part,\n            baseParts = baseName && baseName.split(\"/\"),\n            map = config.map,\n            starMap = (map && map['*']) || {};\n\n        //Adjust any relative paths.\n        if (name && name.charAt(0) === \".\") {\n            //If have a base name, try to normalize against it,\n            //otherwise, assume it is a top-level require that will\n            //be relative to baseUrl in the end.\n            if (baseName) {\n                name = name.split('/');\n                lastIndex = name.length - 1;\n\n                // Node .js allowance:\n                if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                    name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n                }\n\n                //Lop off the last part of baseParts, so that . matches the\n                //\"directory\" and not name of the baseName's module. For instance,\n                //baseName of \"one/two/three\", maps to \"one/two/three.js\", but we\n                //want the directory, \"one/two\" for this normalization.\n                name = baseParts.slice(0, baseParts.length - 1).concat(name);\n\n                //start trimDots\n                for (i = 0; i < name.length; i += 1) {\n                    part = name[i];\n                    if (part === \".\") {\n                        name.splice(i, 1);\n                        i -= 1;\n                    } else if (part === \"..\") {\n                        if (i === 1 && (name[2] === '..' || name[0] === '..')) {\n                            //End of the line. Keep at least one non-dot\n                            //path segment at the front so it can be mapped\n                            //correctly to disk. Otherwise, there is likely\n                            //no path mapping for a path starting with '..'.\n                            //This can still fail, but catches the most reasonable\n                            //uses of ..\n                            break;\n                        } else if (i > 0) {\n                            name.splice(i - 1, 2);\n                            i -= 2;\n                        }\n                    }\n                }\n                //end trimDots\n\n                name = name.join(\"/\");\n            } else if (name.indexOf('./') === 0) {\n                // No baseName, so this is ID is resolved relative\n                // to baseUrl, pull off the leading dot.\n                name = name.substring(2);\n            }\n        }\n\n        //Apply map config if available.\n        if ((baseParts || starMap) && map) {\n            nameParts = name.split('/');\n\n            for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                    //Find the longest baseName segment match in the config.\n                    //So, do joins on the biggest to smallest lengths of baseParts.\n                    for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join('/')];\n\n                        //baseName segment has  config, find if it has one for\n                        //this name.\n                        if (mapValue) {\n                            mapValue = mapValue[nameSegment];\n                            if (mapValue) {\n                                //Match, update name to the new value.\n                                foundMap = mapValue;\n                                foundI = i;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (foundMap) {\n                    break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                    foundStarMap = starMap[nameSegment];\n                    starI = i;\n                }\n            }\n\n            if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n            }\n\n            if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n            }\n        }\n\n        return name;\n    }\n\n    function makeRequire(relName, forceSync) {\n        return function () {\n            //A version of a require function that passes a moduleName\n            //value for items that may need to\n            //look up paths relative to the moduleName\n            var args = aps.call(arguments, 0);\n\n            //If first arg is not require('string'), and there is only\n            //one arg, it is the array form without a callback. Insert\n            //a null so that the following concat is correct.\n            if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n            }\n            return req.apply(undef, args.concat([relName, forceSync]));\n        };\n    }\n\n    function makeNormalize(relName) {\n        return function (name) {\n            return normalize(name, relName);\n        };\n    }\n\n    function makeLoad(depName) {\n        return function (value) {\n            defined[depName] = value;\n        };\n    }\n\n    function callDep(name) {\n        if (hasProp(waiting, name)) {\n            var args = waiting[name];\n            delete waiting[name];\n            defining[name] = true;\n            main.apply(undef, args);\n        }\n\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\n            throw new Error('No ' + name);\n        }\n        return defined[name];\n    }\n\n    //Turns a plugin!resource to [plugin, resource]\n    //with the plugin being undefined if the name\n    //did not have a plugin prefix.\n    function splitPrefix(name) {\n        var prefix,\n            index = name ? name.indexOf('!') : -1;\n        if (index > -1) {\n            prefix = name.substring(0, index);\n            name = name.substring(index + 1, name.length);\n        }\n        return [prefix, name];\n    }\n\n    /**\n     * Makes a name map, normalizing the name, and using a plugin\n     * for normalization if necessary. Grabs a ref to plugin\n     * too, as an optimization.\n     */\n    makeMap = function (name, relName) {\n        var plugin,\n            parts = splitPrefix(name),\n            prefix = parts[0];\n\n        name = parts[1];\n\n        if (prefix) {\n            prefix = normalize(prefix, relName);\n            plugin = callDep(prefix);\n        }\n\n        //Normalize according\n        if (prefix) {\n            if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relName));\n            } else {\n                name = normalize(name, relName);\n            }\n        } else {\n            name = normalize(name, relName);\n            parts = splitPrefix(name);\n            prefix = parts[0];\n            name = parts[1];\n            if (prefix) {\n                plugin = callDep(prefix);\n            }\n        }\n\n        //Using ridiculous property names for space reasons\n        return {\n            f: prefix ? prefix + '!' + name : name, //fullName\n            n: name,\n            pr: prefix,\n            p: plugin\n        };\n    };\n\n    function makeConfig(name) {\n        return function () {\n            return (config && config.config && config.config[name]) || {};\n        };\n    }\n\n    handlers = {\n        require: function (name) {\n            return makeRequire(name);\n        },\n        exports: function (name) {\n            var e = defined[name];\n            if (typeof e !== 'undefined') {\n                return e;\n            } else {\n                return (defined[name] = {});\n            }\n        },\n        module: function (name) {\n            return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n            };\n        }\n    };\n\n    main = function (name, deps, callback, relName) {\n        var cjsModule, depName, ret, map, i,\n            args = [],\n            callbackType = typeof callback,\n            usingExports;\n\n        //Use name if no relName\n        relName = relName || name;\n\n        //Call the callback to define the module, if necessary.\n        if (callbackType === 'undefined' || callbackType === 'function') {\n            //Pull out the defined dependencies and pass the ordered\n            //values to the callback.\n            //Default to [require, exports, module] if no deps\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n            for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relName);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                    args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                    //CommonJS module spec 1.1\n                    args[i] = handlers.exports(name);\n                    usingExports = true;\n                } else if (depName === \"module\") {\n                    //CommonJS module spec 1.1\n                    cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) ||\n                           hasProp(waiting, depName) ||\n                           hasProp(defining, depName)) {\n                    args[i] = callDep(depName);\n                } else if (map.p) {\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                    args[i] = defined[depName];\n                } else {\n                    throw new Error(name + ' missing ' + depName);\n                }\n            }\n\n            ret = callback ? callback.apply(defined[name], args) : undefined;\n\n            if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef &&\n                        cjsModule.exports !== defined[name]) {\n                    defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                    //Use the return value from the function.\n                    defined[name] = ret;\n                }\n            }\n        } else if (name) {\n            //May just be an object definition for the module. Only\n            //worry about defining if have a module name.\n            defined[name] = callback;\n        }\n    };\n\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n        if (typeof deps === \"string\") {\n            if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n            }\n            //Just return the module wanted. In this scenario, the\n            //deps arg is the module name, and second arg (if passed)\n            //is just the relName.\n            //Normalize module name, if it contains . or ..\n            return callDep(makeMap(deps, callback).f);\n        } else if (!deps.splice) {\n            //deps is a config object, not an array.\n            config = deps;\n            if (config.deps) {\n                req(config.deps, config.callback);\n            }\n            if (!callback) {\n                return;\n            }\n\n            if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n            } else {\n                deps = undef;\n            }\n        }\n\n        //Support require(['a'])\n        callback = callback || function () {};\n\n        //If relName is a function, it is an errback handler,\n        //so remove it.\n        if (typeof relName === 'function') {\n            relName = forceSync;\n            forceSync = alt;\n        }\n\n        //Simulate async callback;\n        if (forceSync) {\n            main(undef, deps, callback, relName);\n        } else {\n            //Using a non-zero value because of concern for what old browsers\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n            //If want a value immediately, use require('id') instead -- something\n            //that works in almond on the global level, but not guaranteed and\n            //unlikely to work in other AMD implementations.\n            setTimeout(function () {\n                main(undef, deps, callback, relName);\n            }, 4);\n        }\n\n        return req;\n    };\n\n    /**\n     * Just drops the config on the floor, but returns req in case\n     * the config return value is used.\n     */\n    req.config = function (cfg) {\n        return req(cfg);\n    };\n\n    /**\n     * Expose module registry for debugging and tooling\n     */\n    requirejs._defined = defined;\n\n    define = function (name, deps, callback) {\n        if (typeof name !== 'string') {\n            throw new Error('See almond README: incorrect module build, no module name');\n        }\n\n        //This module may not have dependencies\n        if (!deps.splice) {\n            //deps is not an array, so probably means\n            //an object literal or factory function for\n            //the value. Adjust args.\n            callback = deps;\n            deps = [];\n        }\n\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n            waiting[name] = [name, deps, callback];\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n  var _$ = jQuery || $;\n\n  if (_$ == null && console && console.error) {\n    console.error(\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n      'found. Make sure that you are including jQuery before Select2 on your ' +\n      'web page.'\n    );\n  }\n\n  return _$;\n});\n\nS2.define('select2/utils',[\n  'jquery'\n], function ($) {\n  var Utils = {};\n\n  Utils.Extend = function (ChildClass, SuperClass) {\n    var __hasProp = {}.hasOwnProperty;\n\n    function BaseConstructor () {\n      this.constructor = ChildClass;\n    }\n\n    for (var key in SuperClass) {\n      if (__hasProp.call(SuperClass, key)) {\n        ChildClass[key] = SuperClass[key];\n      }\n    }\n\n    BaseConstructor.prototype = SuperClass.prototype;\n    ChildClass.prototype = new BaseConstructor();\n    ChildClass.__super__ = SuperClass.prototype;\n\n    return ChildClass;\n  };\n\n  function getMethods (theClass) {\n    var proto = theClass.prototype;\n\n    var methods = [];\n\n    for (var methodName in proto) {\n      var m = proto[methodName];\n\n      if (typeof m !== 'function') {\n        continue;\n      }\n\n      if (methodName === 'constructor') {\n        continue;\n      }\n\n      methods.push(methodName);\n    }\n\n    return methods;\n  }\n\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\n    var decoratedMethods = getMethods(DecoratorClass);\n    var superMethods = getMethods(SuperClass);\n\n    function DecoratedClass () {\n      var unshift = Array.prototype.unshift;\n\n      var argCount = DecoratorClass.prototype.constructor.length;\n\n      var calledConstructor = SuperClass.prototype.constructor;\n\n      if (argCount > 0) {\n        unshift.call(arguments, SuperClass.prototype.constructor);\n\n        calledConstructor = DecoratorClass.prototype.constructor;\n      }\n\n      calledConstructor.apply(this, arguments);\n    }\n\n    DecoratorClass.displayName = SuperClass.displayName;\n\n    function ctr () {\n      this.constructor = DecoratedClass;\n    }\n\n    DecoratedClass.prototype = new ctr();\n\n    for (var m = 0; m < superMethods.length; m++) {\n        var superMethod = superMethods[m];\n\n        DecoratedClass.prototype[superMethod] =\n          SuperClass.prototype[superMethod];\n    }\n\n    var calledMethod = function (methodName) {\n      // Stub out the original method if it's not decorating an actual method\n      var originalMethod = function () {};\n\n      if (methodName in DecoratedClass.prototype) {\n        originalMethod = DecoratedClass.prototype[methodName];\n      }\n\n      var decoratedMethod = DecoratorClass.prototype[methodName];\n\n      return function () {\n        var unshift = Array.prototype.unshift;\n\n        unshift.call(arguments, originalMethod);\n\n        return decoratedMethod.apply(this, arguments);\n      };\n    };\n\n    for (var d = 0; d < decoratedMethods.length; d++) {\n      var decoratedMethod = decoratedMethods[d];\n\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n    }\n\n    return DecoratedClass;\n  };\n\n  var Observable = function () {\n    this.listeners = {};\n  };\n\n  Observable.prototype.on = function (event, callback) {\n    this.listeners = this.listeners || {};\n\n    if (event in this.listeners) {\n      this.listeners[event].push(callback);\n    } else {\n      this.listeners[event] = [callback];\n    }\n  };\n\n  Observable.prototype.trigger = function (event) {\n    var slice = Array.prototype.slice;\n    var params = slice.call(arguments, 1);\n\n    this.listeners = this.listeners || {};\n\n    // Params should always come in as an array\n    if (params == null) {\n      params = [];\n    }\n\n    // If there are no arguments to the event, use a temporary object\n    if (params.length === 0) {\n      params.push({});\n    }\n\n    // Set the `_type` of the first object to the event\n    params[0]._type = event;\n\n    if (event in this.listeners) {\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\n    }\n\n    if ('*' in this.listeners) {\n      this.invoke(this.listeners['*'], arguments);\n    }\n  };\n\n  Observable.prototype.invoke = function (listeners, params) {\n    for (var i = 0, len = listeners.length; i < len; i++) {\n      listeners[i].apply(this, params);\n    }\n  };\n\n  Utils.Observable = Observable;\n\n  Utils.generateChars = function (length) {\n    var chars = '';\n\n    for (var i = 0; i < length; i++) {\n      var randomChar = Math.floor(Math.random() * 36);\n      chars += randomChar.toString(36);\n    }\n\n    return chars;\n  };\n\n  Utils.bind = function (func, context) {\n    return function () {\n      func.apply(context, arguments);\n    };\n  };\n\n  Utils._convertData = function (data) {\n    for (var originalKey in data) {\n      var keys = originalKey.split('-');\n\n      var dataLevel = data;\n\n      if (keys.length === 1) {\n        continue;\n      }\n\n      for (var k = 0; k < keys.length; k++) {\n        var key = keys[k];\n\n        // Lowercase the first letter\n        // By default, dash-separated becomes camelCase\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n        if (!(key in dataLevel)) {\n          dataLevel[key] = {};\n        }\n\n        if (k == keys.length - 1) {\n          dataLevel[key] = data[originalKey];\n        }\n\n        dataLevel = dataLevel[key];\n      }\n\n      delete data[originalKey];\n    }\n\n    return data;\n  };\n\n  Utils.hasScroll = function (index, el) {\n    // Adapted from the function created by @ShadowScripter\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\n    // The original code can be found at\n    // http://codereview.stackexchange.com/q/13338\n    // and was designed to be used with the Sizzle selector engine.\n\n    var $el = $(el);\n    var overflowX = el.style.overflowX;\n    var overflowY = el.style.overflowY;\n\n    //Check both x and y declarations\n    if (overflowX === overflowY &&\n        (overflowY === 'hidden' || overflowY === 'visible')) {\n      return false;\n    }\n\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\n      return true;\n    }\n\n    return ($el.innerHeight() < el.scrollHeight ||\n      $el.innerWidth() < el.scrollWidth);\n  };\n\n  Utils.escapeMarkup = function (markup) {\n    var replaceMap = {\n      '\\\\': '&#92;',\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '/': '&#47;'\n    };\n\n    // Do not try to escape the markup if it's not a string\n    if (typeof markup !== 'string') {\n      return markup;\n    }\n\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n      return replaceMap[match];\n    });\n  };\n\n  // Append an array of jQuery nodes to a given element.\n  Utils.appendMany = function ($element, $nodes) {\n    // jQuery 1.7.x does not support $.fn.append() with an array\n    // Fall back to a jQuery object collection using $.fn.add()\n    if ($.fn.jquery.substr(0, 3) === '1.7') {\n      var $jqNodes = $();\n\n      $.map($nodes, function (node) {\n        $jqNodes = $jqNodes.add(node);\n      });\n\n      $nodes = $jqNodes;\n    }\n\n    $element.append($nodes);\n  };\n\n  return Utils;\n});\n\nS2.define('select2/results',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Results ($element, options, dataAdapter) {\n    this.$element = $element;\n    this.data = dataAdapter;\n    this.options = options;\n\n    Results.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Results, Utils.Observable);\n\n  Results.prototype.render = function () {\n    var $results = $(\n      '<ul class=\"select2-results__options\" role=\"tree\"></ul>'\n    );\n\n    if (this.options.get('multiple')) {\n      $results.attr('aria-multiselectable', 'true');\n    }\n\n    this.$results = $results;\n\n    return $results;\n  };\n\n  Results.prototype.clear = function () {\n    this.$results.empty();\n  };\n\n  Results.prototype.displayMessage = function (params) {\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    this.clear();\n    this.hideLoading();\n\n    var $message = $(\n      '<li role=\"treeitem\" aria-live=\"assertive\"' +\n      ' class=\"select2-results__option\"></li>'\n    );\n\n    var message = this.options.get('translations').get(params.message);\n\n    $message.append(\n      escapeMarkup(\n        message(params.args)\n      )\n    );\n\n    $message[0].className += ' select2-results__message';\n\n    this.$results.append($message);\n  };\n\n  Results.prototype.hideMessages = function () {\n    this.$results.find('.select2-results__message').remove();\n  };\n\n  Results.prototype.append = function (data) {\n    this.hideLoading();\n\n    var $options = [];\n\n    if (data.results == null || data.results.length === 0) {\n      if (this.$results.children().length === 0) {\n        this.trigger('results:message', {\n          message: 'noResults'\n        });\n      }\n\n      return;\n    }\n\n    data.results = this.sort(data.results);\n\n    for (var d = 0; d < data.results.length; d++) {\n      var item = data.results[d];\n\n      var $option = this.option(item);\n\n      $options.push($option);\n    }\n\n    this.$results.append($options);\n  };\n\n  Results.prototype.position = function ($results, $dropdown) {\n    var $resultsContainer = $dropdown.find('.select2-results');\n    $resultsContainer.append($results);\n  };\n\n  Results.prototype.sort = function (data) {\n    var sorter = this.options.get('sorter');\n\n    return sorter(data);\n  };\n\n  Results.prototype.highlightFirstItem = function () {\n    var $options = this.$results\n      .find('.select2-results__option[aria-selected]');\n\n    var $selected = $options.filter('[aria-selected=true]');\n\n    // Check if there are any selected options\n    if ($selected.length > 0) {\n      // If there are selected options, highlight the first\n      $selected.first().trigger('mouseenter');\n    } else {\n      // If there are no selected options, highlight the first option\n      // in the dropdown\n      $options.first().trigger('mouseenter');\n    }\n\n    this.ensureHighlightVisible();\n  };\n\n  Results.prototype.setClasses = function () {\n    var self = this;\n\n    this.data.current(function (selected) {\n      var selectedIds = $.map(selected, function (s) {\n        return s.id.toString();\n      });\n\n      var $options = self.$results\n        .find('.select2-results__option[aria-selected]');\n\n      $options.each(function () {\n        var $option = $(this);\n\n        var item = $.data(this, 'data');\n\n        // id needs to be converted to a string when comparing\n        var id = '' + item.id;\n\n        if ((item.element != null && item.element.selected) ||\n            (item.element == null && $.inArray(id, selectedIds) > -1)) {\n          $option.attr('aria-selected', 'true');\n        } else {\n          $option.attr('aria-selected', 'false');\n        }\n      });\n\n    });\n  };\n\n  Results.prototype.showLoading = function (params) {\n    this.hideLoading();\n\n    var loadingMore = this.options.get('translations').get('searching');\n\n    var loading = {\n      disabled: true,\n      loading: true,\n      text: loadingMore(params)\n    };\n    var $loading = this.option(loading);\n    $loading.className += ' loading-results';\n\n    this.$results.prepend($loading);\n  };\n\n  Results.prototype.hideLoading = function () {\n    this.$results.find('.loading-results').remove();\n  };\n\n  Results.prototype.option = function (data) {\n    var option = document.createElement('li');\n    option.className = 'select2-results__option';\n\n    var attrs = {\n      'role': 'treeitem',\n      'aria-selected': 'false'\n    };\n\n    if (data.disabled) {\n      delete attrs['aria-selected'];\n      attrs['aria-disabled'] = 'true';\n    }\n\n    if (data.id == null) {\n      delete attrs['aria-selected'];\n    }\n\n    if (data._resultId != null) {\n      option.id = data._resultId;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    if (data.children) {\n      attrs.role = 'group';\n      attrs['aria-label'] = data.text;\n      delete attrs['aria-selected'];\n    }\n\n    for (var attr in attrs) {\n      var val = attrs[attr];\n\n      option.setAttribute(attr, val);\n    }\n\n    if (data.children) {\n      var $option = $(option);\n\n      var label = document.createElement('strong');\n      label.className = 'select2-results__group';\n\n      var $label = $(label);\n      this.template(data, label);\n\n      var $children = [];\n\n      for (var c = 0; c < data.children.length; c++) {\n        var child = data.children[c];\n\n        var $child = this.option(child);\n\n        $children.push($child);\n      }\n\n      var $childrenContainer = $('<ul></ul>', {\n        'class': 'select2-results__options select2-results__options--nested'\n      });\n\n      $childrenContainer.append($children);\n\n      $option.append(label);\n      $option.append($childrenContainer);\n    } else {\n      this.template(data, option);\n    }\n\n    $.data(option, 'data', data);\n\n    return option;\n  };\n\n  Results.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-results';\n\n    this.$results.attr('id', id);\n\n    container.on('results:all', function (params) {\n      self.clear();\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('results:append', function (params) {\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n      }\n    });\n\n    container.on('query', function (params) {\n      self.hideMessages();\n      self.showLoading(params);\n    });\n\n    container.on('select', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n      self.highlightFirstItem();\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n      self.highlightFirstItem();\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expended=\"true\"\n      self.$results.attr('aria-expanded', 'true');\n      self.$results.attr('aria-hidden', 'false');\n\n      self.setClasses();\n      self.ensureHighlightVisible();\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expended=\"false\"\n      self.$results.attr('aria-expanded', 'false');\n      self.$results.attr('aria-hidden', 'true');\n      self.$results.removeAttr('aria-activedescendant');\n    });\n\n    container.on('results:toggle', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      $highlighted.trigger('mouseup');\n    });\n\n    container.on('results:select', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      var data = $highlighted.data('data');\n\n      if ($highlighted.attr('aria-selected') == 'true') {\n        self.trigger('close', {});\n      } else {\n        self.trigger('select', {\n          data: data\n        });\n      }\n    });\n\n    container.on('results:previous', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      // If we are already at te top, don't move further\n      if (currentIndex === 0) {\n        return;\n      }\n\n      var nextIndex = currentIndex - 1;\n\n      // If none are highlighted, highlight the first\n      if ($highlighted.length === 0) {\n        nextIndex = 0;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top;\n      var nextTop = $next.offset().top;\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextTop - currentOffset < 0) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:next', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      var nextIndex = currentIndex + 1;\n\n      // If we are at the last option, stay there\n      if (nextIndex >= $options.length) {\n        return;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextBottom > currentOffset) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      params.element.addClass('select2-results__option--highlighted');\n    });\n\n    container.on('results:message', function (params) {\n      self.displayMessage(params);\n    });\n\n    if ($.fn.mousewheel) {\n      this.$results.on('mousewheel', function (e) {\n        var top = self.$results.scrollTop();\n\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n        if (isAtTop) {\n          self.$results.scrollTop(0);\n\n          e.preventDefault();\n          e.stopPropagation();\n        } else if (isAtBottom) {\n          self.$results.scrollTop(\n            self.$results.get(0).scrollHeight - self.$results.height()\n          );\n\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    }\n\n    this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var $this = $(this);\n\n      var data = $this.data('data');\n\n      if ($this.attr('aria-selected') === 'true') {\n        if (self.options.get('multiple')) {\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        } else {\n          self.trigger('close', {});\n        }\n\n        return;\n      }\n\n      self.trigger('select', {\n        originalEvent: evt,\n        data: data\n      });\n    });\n\n    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var data = $(this).data('data');\n\n      self.getHighlightedResults()\n          .removeClass('select2-results__option--highlighted');\n\n      self.trigger('results:focus', {\n        data: data,\n        element: $(this)\n      });\n    });\n  };\n\n  Results.prototype.getHighlightedResults = function () {\n    var $highlighted = this.$results\n    .find('.select2-results__option--highlighted');\n\n    return $highlighted;\n  };\n\n  Results.prototype.destroy = function () {\n    this.$results.remove();\n  };\n\n  Results.prototype.ensureHighlightVisible = function () {\n    var $highlighted = this.getHighlightedResults();\n\n    if ($highlighted.length === 0) {\n      return;\n    }\n\n    var $options = this.$results.find('[aria-selected]');\n\n    var currentIndex = $options.index($highlighted);\n\n    var currentOffset = this.$results.offset().top;\n    var nextTop = $highlighted.offset().top;\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n    var offsetDelta = nextTop - currentOffset;\n    nextOffset -= $highlighted.outerHeight(false) * 2;\n\n    if (currentIndex <= 2) {\n      this.$results.scrollTop(0);\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n      this.$results.scrollTop(nextOffset);\n    }\n  };\n\n  Results.prototype.template = function (result, container) {\n    var template = this.options.get('templateResult');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    var content = template(result, container);\n\n    if (content == null) {\n      container.style.display = 'none';\n    } else if (typeof content === 'string') {\n      container.innerHTML = escapeMarkup(content);\n    } else {\n      $(container).append(content);\n    }\n  };\n\n  return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n  var KEYS = {\n    BACKSPACE: 8,\n    TAB: 9,\n    ENTER: 13,\n    SHIFT: 16,\n    CTRL: 17,\n    ALT: 18,\n    ESC: 27,\n    SPACE: 32,\n    PAGE_UP: 33,\n    PAGE_DOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    DELETE: 46\n  };\n\n  return KEYS;\n});\n\nS2.define('select2/selection/base',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function BaseSelection ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    BaseSelection.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseSelection, Utils.Observable);\n\n  BaseSelection.prototype.render = function () {\n    var $selection = $(\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n      '</span>'\n    );\n\n    this._tabindex = 0;\n\n    if (this.$element.data('old-tabindex') != null) {\n      this._tabindex = this.$element.data('old-tabindex');\n    } else if (this.$element.attr('tabindex') != null) {\n      this._tabindex = this.$element.attr('tabindex');\n    }\n\n    $selection.attr('title', this.$element.attr('title'));\n    $selection.attr('tabindex', this._tabindex);\n\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-container';\n    var resultsId = container.id + '-results';\n\n    this.container = container;\n\n    this.$selection.on('focus', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('blur', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      if (evt.which === KEYS.SPACE) {\n        evt.preventDefault();\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expanded=\"true\"\n      self.$selection.attr('aria-expanded', 'true');\n      self.$selection.attr('aria-owns', resultsId);\n\n      self._attachCloseHandler(container);\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expanded=\"false\"\n      self.$selection.attr('aria-expanded', 'false');\n      self.$selection.removeAttr('aria-activedescendant');\n      self.$selection.removeAttr('aria-owns');\n\n      self.$selection.focus();\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\n    });\n  };\n\n  BaseSelection.prototype._handleBlur = function (evt) {\n    var self = this;\n\n    // This needs to be delayed as the active element is the body when the tab\n    // key is pressed, possibly along with others.\n    window.setTimeout(function () {\n      // Don't trigger `blur` if the focus is still in the selection\n      if (\n        (document.activeElement == self.$selection[0]) ||\n        ($.contains(self.$selection[0], document.activeElement))\n      ) {\n        return;\n      }\n\n      self.trigger('blur', evt);\n    }, 1);\n  };\n\n  BaseSelection.prototype._attachCloseHandler = function (container) {\n    var self = this;\n\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\n      var $target = $(e.target);\n\n      var $select = $target.closest('.select2');\n\n      var $all = $('.select2.select2-container--open');\n\n      $all.each(function () {\n        var $this = $(this);\n\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = $this.data('element');\n\n        $element.select2('close');\n      });\n    });\n  };\n\n  BaseSelection.prototype._detachCloseHandler = function (container) {\n    $(document.body).off('mousedown.select2.' + container.id);\n  };\n\n  BaseSelection.prototype.position = function ($selection, $container) {\n    var $selectionContainer = $container.find('.selection');\n    $selectionContainer.append($selection);\n  };\n\n  BaseSelection.prototype.destroy = function () {\n    this._detachCloseHandler(this.container);\n  };\n\n  BaseSelection.prototype.update = function (data) {\n    throw new Error('The `update` method must be defined in child classes.');\n  };\n\n  return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n  'jquery',\n  './base',\n  '../utils',\n  '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n  function SingleSelection () {\n    SingleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(SingleSelection, BaseSelection);\n\n  SingleSelection.prototype.render = function () {\n    var $selection = SingleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--single');\n\n    $selection.html(\n      '<span class=\"select2-selection__rendered\"></span>' +\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n        '<b role=\"presentation\"></b>' +\n      '</span>'\n    );\n\n    return $selection;\n  };\n\n  SingleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    SingleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n\n    this.$selection.find('.select2-selection__rendered').attr('id', id);\n    this.$selection.attr('aria-labelledby', id);\n\n    this.$selection.on('mousedown', function (evt) {\n      // Only respond to left clicks\n      if (evt.which !== 1) {\n        return;\n      }\n\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on('focus', function (evt) {\n      // User focuses on the container\n    });\n\n    this.$selection.on('blur', function (evt) {\n      // User exits the container\n    });\n\n    container.on('focus', function (evt) {\n      if (!container.isOpen()) {\n        self.$selection.focus();\n      }\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    this.$selection.find('.select2-selection__rendered').empty();\n  };\n\n  SingleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  SingleSelection.prototype.selectionContainer = function () {\n    return $('<span></span>');\n  };\n\n  SingleSelection.prototype.update = function (data) {\n    if (data.length === 0) {\n      this.clear();\n      return;\n    }\n\n    var selection = data[0];\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    var formatted = this.display(selection, $rendered);\n\n    $rendered.empty().append(formatted);\n    $rendered.prop('title', selection.title || selection.text);\n  };\n\n  return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n  'jquery',\n  './base',\n  '../utils'\n], function ($, BaseSelection, Utils) {\n  function MultipleSelection ($element, options) {\n    MultipleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(MultipleSelection, BaseSelection);\n\n  MultipleSelection.prototype.render = function () {\n    var $selection = MultipleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--multiple');\n\n    $selection.html(\n      '<ul class=\"select2-selection__rendered\"></ul>'\n    );\n\n    return $selection;\n  };\n\n  MultipleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    MultipleSelection.__super__.bind.apply(this, arguments);\n\n    this.$selection.on('click', function (evt) {\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on(\n      'click',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.options.get('disabled')) {\n          return;\n        }\n\n        var $remove = $(this);\n        var $selection = $remove.parent();\n\n        var data = $selection.data('data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    this.$selection.find('.select2-selection__rendered').empty();\n  };\n\n  MultipleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  MultipleSelection.prototype.selectionContainer = function () {\n    var $container = $(\n      '<li class=\"select2-selection__choice\">' +\n        '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n          '&times;' +\n        '</span>' +\n      '</li>'\n    );\n\n    return $container;\n  };\n\n  MultipleSelection.prototype.update = function (data) {\n    this.clear();\n\n    if (data.length === 0) {\n      return;\n    }\n\n    var $selections = [];\n\n    for (var d = 0; d < data.length; d++) {\n      var selection = data[d];\n\n      var $selection = this.selectionContainer();\n      var formatted = this.display(selection, $selection);\n\n      $selection.append(formatted);\n      $selection.prop('title', selection.title || selection.text);\n\n      $selection.data('data', selection);\n\n      $selections.push($selection);\n    }\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n\n    Utils.appendMany($rendered, $selections);\n  };\n\n  return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n  '../utils'\n], function (Utils) {\n  function Placeholder (decorated, $element, options) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options);\n  }\n\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n    var $placeholder = this.selectionContainer();\n\n    $placeholder.html(this.display(placeholder));\n    $placeholder.addClass('select2-selection__placeholder')\n                .removeClass('select2-selection__choice');\n\n    return $placeholder;\n  };\n\n  Placeholder.prototype.update = function (decorated, data) {\n    var singlePlaceholder = (\n      data.length == 1 && data[0].id != this.placeholder.id\n    );\n    var multipleSelections = data.length > 1;\n\n    if (multipleSelections || singlePlaceholder) {\n      return decorated.call(this, data);\n    }\n\n    this.clear();\n\n    var $placeholder = this.createPlaceholder(this.placeholder);\n\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\n  };\n\n  return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n  'jquery',\n  '../keys'\n], function ($, KEYS) {\n  function AllowClear () { }\n\n  AllowClear.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    if (this.placeholder == null) {\n      if (this.options.get('debug') && window.console && console.error) {\n        console.error(\n          'Select2: The `allowClear` option should be used in combination ' +\n          'with the `placeholder` option.'\n        );\n      }\n    }\n\n    this.$selection.on('mousedown', '.select2-selection__clear',\n      function (evt) {\n        self._handleClear(evt);\n    });\n\n    container.on('keypress', function (evt) {\n      self._handleKeyboardClear(evt, container);\n    });\n  };\n\n  AllowClear.prototype._handleClear = function (_, evt) {\n    // Ignore the event if it is disabled\n    if (this.options.get('disabled')) {\n      return;\n    }\n\n    var $clear = this.$selection.find('.select2-selection__clear');\n\n    // Ignore the event if nothing has been selected\n    if ($clear.length === 0) {\n      return;\n    }\n\n    evt.stopPropagation();\n\n    var data = $clear.data('data');\n\n    for (var d = 0; d < data.length; d++) {\n      var unselectData = {\n        data: data[d]\n      };\n\n      // Trigger the `unselect` event, so people can prevent it from being\n      // cleared.\n      this.trigger('unselect', unselectData);\n\n      // If the event was prevented, don't clear it out.\n      if (unselectData.prevented) {\n        return;\n      }\n    }\n\n    this.$element.val(this.placeholder.id).trigger('change');\n\n    this.trigger('toggle', {});\n  };\n\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n    if (container.isOpen()) {\n      return;\n    }\n\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n      this._handleClear(evt);\n    }\n  };\n\n  AllowClear.prototype.update = function (decorated, data) {\n    decorated.call(this, data);\n\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n        data.length === 0) {\n      return;\n    }\n\n    var $remove = $(\n      '<span class=\"select2-selection__clear\">' +\n        '&times;' +\n      '</span>'\n    );\n    $remove.data('data', data);\n\n    this.$selection.find('.select2-selection__rendered').prepend($remove);\n  };\n\n  return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function Search (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  Search.prototype.render = function (decorated) {\n    var $search = $(\n      '<li class=\"select2-search select2-search--inline\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\"' +\n        ' spellcheck=\"false\" role=\"textbox\" aria-autocomplete=\"list\" />' +\n      '</li>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    var $rendered = decorated.call(this);\n\n    this._transferTabIndex();\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\n      self.$search.removeAttr('aria-activedescendant');\n      self.$search.trigger('focus');\n    });\n\n    container.on('enable', function () {\n      self.$search.prop('disabled', false);\n\n      self._transferTabIndex();\n    });\n\n    container.on('disable', function () {\n      self.$search.prop('disabled', true);\n    });\n\n    container.on('focus', function (evt) {\n      self.$search.trigger('focus');\n    });\n\n    container.on('results:focus', function (params) {\n      self.$search.attr('aria-activedescendant', params.id);\n    });\n\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n      evt.stopPropagation();\n\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n\n      var key = evt.which;\n\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n        var $previousChoice = self.$searchContainer\n          .prev('.select2-selection__choice');\n\n        if ($previousChoice.length > 0) {\n          var item = $previousChoice.data('data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\n      }\n    });\n\n    // Try to detect the IE version should the `documentMode` property that\n    // is stored on the document. This is only implemented in IE and is\n    // slightly cleaner than doing a user agent check.\n    // This property is not available in Edge, but Edge also doesn't have\n    // this bug.\n    var msie = document.documentMode;\n    var disableInputEvents = msie && msie <= 11;\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$selection.on(\n      'input.searchcheck',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents) {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        // Unbind the duplicated `keyup` event\n        self.$selection.off('keyup.search');\n      }\n    );\n\n    this.$selection.on(\n      'keyup.search input.search',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents && evt.type === 'input') {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        var key = evt.which;\n\n        // We can freely ignore events from modifier keys\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n          return;\n        }\n\n        // Tabbing will be handled during the `keydown` phase\n        if (key == KEYS.TAB) {\n          return;\n        }\n\n        self.handleSearch(evt);\n      }\n    );\n  };\n\n  /**\n   * This method will transfer the tabindex attribute from the rendered\n   * selection to the search box. This allows for the search box to be used as\n   * the primary focus instead of the selection container.\n   *\n   * @private\n   */\n  Search.prototype._transferTabIndex = function (decorated) {\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n    this.$selection.attr('tabindex', '-1');\n  };\n\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\n    this.$search.attr('placeholder', placeholder.text);\n  };\n\n  Search.prototype.update = function (decorated, data) {\n    var searchHadFocus = this.$search[0] == document.activeElement;\n\n    this.$search.attr('placeholder', '');\n\n    decorated.call(this, data);\n\n    this.$selection.find('.select2-selection__rendered')\n                   .append(this.$searchContainer);\n\n    this.resizeSearch();\n    if (searchHadFocus) {\n      this.$search.focus();\n    }\n  };\n\n  Search.prototype.handleSearch = function () {\n    this.resizeSearch();\n\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\n    this.trigger('unselect', {\n      data: item\n    });\n\n    this.$search.val(item.text);\n    this.handleSearch();\n  };\n\n  Search.prototype.resizeSearch = function () {\n    this.$search.css('width', '25px');\n\n    var width = '';\n\n    if (this.$search.attr('placeholder') !== '') {\n      width = this.$selection.find('.select2-selection__rendered').innerWidth();\n    } else {\n      var minimumWidth = this.$search.val().length + 1;\n\n      width = (minimumWidth * 0.75) + 'em';\n    }\n\n    this.$search.css('width', width);\n  };\n\n  return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n  'jquery'\n], function ($) {\n  function EventRelay () { }\n\n  EventRelay.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n    var relayEvents = [\n      'open', 'opening',\n      'close', 'closing',\n      'select', 'selecting',\n      'unselect', 'unselecting'\n    ];\n\n    var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting'];\n\n    decorated.call(this, container, $container);\n\n    container.on('*', function (name, params) {\n      // Ignore events that should not be relayed\n      if ($.inArray(name, relayEvents) === -1) {\n        return;\n      }\n\n      // The parameters should always be an object\n      params = params || {};\n\n      // Generate the jQuery event for the Select2 event\n      var evt = $.Event('select2:' + name, {\n        params: params\n      });\n\n      self.$element.trigger(evt);\n\n      // Only handle preventable events if it was one\n      if ($.inArray(name, preventableEvents) === -1) {\n        return;\n      }\n\n      params.prevented = evt.isDefaultPrevented();\n    });\n  };\n\n  return EventRelay;\n});\n\nS2.define('select2/translation',[\n  'jquery',\n  'require'\n], function ($, require) {\n  function Translation (dict) {\n    this.dict = dict || {};\n  }\n\n  Translation.prototype.all = function () {\n    return this.dict;\n  };\n\n  Translation.prototype.get = function (key) {\n    return this.dict[key];\n  };\n\n  Translation.prototype.extend = function (translation) {\n    this.dict = $.extend({}, translation.all(), this.dict);\n  };\n\n  // Static functions\n\n  Translation._cache = {};\n\n  Translation.loadPath = function (path) {\n    if (!(path in Translation._cache)) {\n      var translations = require(path);\n\n      Translation._cache[path] = translations;\n    }\n\n    return new Translation(Translation._cache[path]);\n  };\n\n  return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n  var diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03C9': '\\u03C9',\n    '\\u03C2': '\\u03C3'\n  };\n\n  return diacritics;\n});\n\nS2.define('select2/data/base',[\n  '../utils'\n], function (Utils) {\n  function BaseAdapter ($element, options) {\n    BaseAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseAdapter, Utils.Observable);\n\n  BaseAdapter.prototype.current = function (callback) {\n    throw new Error('The `current` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.query = function (params, callback) {\n    throw new Error('The `query` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.bind = function (container, $container) {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.destroy = function () {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.generateResultId = function (container, data) {\n    var id = container.id + '-result-';\n\n    id += Utils.generateChars(4);\n\n    if (data.id != null) {\n      id += '-' + data.id.toString();\n    } else {\n      id += '-' + Utils.generateChars(4);\n    }\n    return id;\n  };\n\n  return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n  './base',\n  '../utils',\n  'jquery'\n], function (BaseAdapter, Utils, $) {\n  function SelectAdapter ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    SelectAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(SelectAdapter, BaseAdapter);\n\n  SelectAdapter.prototype.current = function (callback) {\n    var data = [];\n    var self = this;\n\n    this.$element.find(':selected').each(function () {\n      var $option = $(this);\n\n      var option = self.item($option);\n\n      data.push(option);\n    });\n\n    callback(data);\n  };\n\n  SelectAdapter.prototype.select = function (data) {\n    var self = this;\n\n    data.selected = true;\n\n    // If data.element is a DOM node, use it instead\n    if ($(data.element).is('option')) {\n      data.element.selected = true;\n\n      this.$element.trigger('change');\n\n      return;\n    }\n\n    if (this.$element.prop('multiple')) {\n      this.current(function (currentData) {\n        var val = [];\n\n        data = [data];\n        data.push.apply(data, currentData);\n\n        for (var d = 0; d < data.length; d++) {\n          var id = data[d].id;\n\n          if ($.inArray(id, val) === -1) {\n            val.push(id);\n          }\n        }\n\n        self.$element.val(val);\n        self.$element.trigger('change');\n      });\n    } else {\n      var val = data.id;\n\n      this.$element.val(val);\n      this.$element.trigger('change');\n    }\n  };\n\n  SelectAdapter.prototype.unselect = function (data) {\n    var self = this;\n\n    if (!this.$element.prop('multiple')) {\n      return;\n    }\n\n    data.selected = false;\n\n    if ($(data.element).is('option')) {\n      data.element.selected = false;\n\n      this.$element.trigger('change');\n\n      return;\n    }\n\n    this.current(function (currentData) {\n      var val = [];\n\n      for (var d = 0; d < currentData.length; d++) {\n        var id = currentData[d].id;\n\n        if (id !== data.id && $.inArray(id, val) === -1) {\n          val.push(id);\n        }\n      }\n\n      self.$element.val(val);\n\n      self.$element.trigger('change');\n    });\n  };\n\n  SelectAdapter.prototype.bind = function (container, $container) {\n    var self = this;\n\n    this.container = container;\n\n    container.on('select', function (params) {\n      self.select(params.data);\n    });\n\n    container.on('unselect', function (params) {\n      self.unselect(params.data);\n    });\n  };\n\n  SelectAdapter.prototype.destroy = function () {\n    // Remove anything added to child elements\n    this.$element.find('*').each(function () {\n      // Remove any custom data set by Select2\n      $.removeData(this, 'data');\n    });\n  };\n\n  SelectAdapter.prototype.query = function (params, callback) {\n    var data = [];\n    var self = this;\n\n    var $options = this.$element.children();\n\n    $options.each(function () {\n      var $option = $(this);\n\n      if (!$option.is('option') && !$option.is('optgroup')) {\n        return;\n      }\n\n      var option = self.item($option);\n\n      var matches = self.matches(params, option);\n\n      if (matches !== null) {\n        data.push(matches);\n      }\n    });\n\n    callback({\n      results: data\n    });\n  };\n\n  SelectAdapter.prototype.addOptions = function ($options) {\n    Utils.appendMany(this.$element, $options);\n  };\n\n  SelectAdapter.prototype.option = function (data) {\n    var option;\n\n    if (data.children) {\n      option = document.createElement('optgroup');\n      option.label = data.text;\n    } else {\n      option = document.createElement('option');\n\n      if (option.textContent !== undefined) {\n        option.textContent = data.text;\n      } else {\n        option.innerText = data.text;\n      }\n    }\n\n    if (data.id) {\n      option.value = data.id;\n    }\n\n    if (data.disabled) {\n      option.disabled = true;\n    }\n\n    if (data.selected) {\n      option.selected = true;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    var $option = $(option);\n\n    var normalizedData = this._normalizeItem(data);\n    normalizedData.element = option;\n\n    // Override the option's data with the combined data\n    $.data(option, 'data', normalizedData);\n\n    return $option;\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = $.data($option[0], 'data');\n\n    if (data != null) {\n      return data;\n    }\n\n    if ($option.is('option')) {\n      data = {\n        id: $option.val(),\n        text: $option.text(),\n        disabled: $option.prop('disabled'),\n        selected: $option.prop('selected'),\n        title: $option.prop('title')\n      };\n    } else if ($option.is('optgroup')) {\n      data = {\n        text: $option.prop('label'),\n        children: [],\n        title: $option.prop('title')\n      };\n\n      var $children = $option.children('option');\n      var children = [];\n\n      for (var c = 0; c < $children.length; c++) {\n        var $child = $($children[c]);\n\n        var child = this.item($child);\n\n        children.push(child);\n      }\n\n      data.children = children;\n    }\n\n    data = this._normalizeItem(data);\n    data.element = $option[0];\n\n    $.data($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (!$.isPlainObject(item)) {\n      item = {\n        id: item,\n        text: item\n      };\n    }\n\n    item = $.extend({}, {\n      text: ''\n    }, item);\n\n    var defaults = {\n      selected: false,\n      disabled: false\n    };\n\n    if (item.id != null) {\n      item.id = item.id.toString();\n    }\n\n    if (item.text != null) {\n      item.text = item.text.toString();\n    }\n\n    if (item._resultId == null && item.id && this.container != null) {\n      item._resultId = this.generateResultId(this.container, item);\n    }\n\n    return $.extend({}, defaults, item);\n  };\n\n  SelectAdapter.prototype.matches = function (params, data) {\n    var matcher = this.options.get('matcher');\n\n    return matcher(params, data);\n  };\n\n  return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n  './select',\n  '../utils',\n  'jquery'\n], function (SelectAdapter, Utils, $) {\n  function ArrayAdapter ($element, options) {\n    var data = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n\n    this.addOptions(this.convertToOptions(data));\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\n\n  ArrayAdapter.prototype.select = function (data) {\n    var $option = this.$element.find('option').filter(function (i, elm) {\n      return elm.value == data.id.toString();\n    });\n\n    if ($option.length === 0) {\n      $option = this.option(data);\n\n      this.addOptions($option);\n    }\n\n    ArrayAdapter.__super__.select.call(this, data);\n  };\n\n  ArrayAdapter.prototype.convertToOptions = function (data) {\n    var self = this;\n\n    var $existing = this.$element.find('option');\n    var existingIds = $existing.map(function () {\n      return self.item($(this)).id;\n    }).get();\n\n    var $options = [];\n\n    // Filter out all items except for the one passed in the argument\n    function onlyItem (item) {\n      return function () {\n        return $(this).val() == item.id;\n      };\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      var item = this._normalizeItem(data[d]);\n\n      // Skip items which were pre-loaded, only merge the data\n      if ($.inArray(item.id, existingIds) >= 0) {\n        var $existingOption = $existing.filter(onlyItem(item));\n\n        var existingData = this.item($existingOption);\n        var newData = $.extend(true, {}, item, existingData);\n\n        var $newOption = this.option(newData);\n\n        $existingOption.replaceWith($newOption);\n\n        continue;\n      }\n\n      var $option = this.option(item);\n\n      if (item.children) {\n        var $children = this.convertToOptions(item.children);\n\n        Utils.appendMany($option, $children);\n      }\n\n      $options.push($option);\n    }\n\n    return $options;\n  };\n\n  return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n  './array',\n  '../utils',\n  'jquery'\n], function (ArrayAdapter, Utils, $) {\n  function AjaxAdapter ($element, options) {\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n    if (this.ajaxOptions.processResults != null) {\n      this.processResults = this.ajaxOptions.processResults;\n    }\n\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n  AjaxAdapter.prototype._applyDefaults = function (options) {\n    var defaults = {\n      data: function (params) {\n        return $.extend({}, params, {\n          q: params.term\n        });\n      },\n      transport: function (params, success, failure) {\n        var $request = $.ajax(params);\n\n        $request.then(success);\n        $request.fail(failure);\n\n        return $request;\n      }\n    };\n\n    return $.extend({}, defaults, options, true);\n  };\n\n  AjaxAdapter.prototype.processResults = function (results) {\n    return results;\n  };\n\n  AjaxAdapter.prototype.query = function (params, callback) {\n    var matches = [];\n    var self = this;\n\n    if (this._request != null) {\n      // JSONP requests cannot always be aborted\n      if ($.isFunction(this._request.abort)) {\n        this._request.abort();\n      }\n\n      this._request = null;\n    }\n\n    var options = $.extend({\n      type: 'GET'\n    }, this.ajaxOptions);\n\n    if (typeof options.url === 'function') {\n      options.url = options.url.call(this.$element, params);\n    }\n\n    if (typeof options.data === 'function') {\n      options.data = options.data.call(this.$element, params);\n    }\n\n    function request () {\n      var $request = options.transport(options, function (data) {\n        var results = self.processResults(data, params);\n\n        if (self.options.get('debug') && window.console && console.error) {\n          // Check to make sure that the response included a `results` key.\n          if (!results || !results.results || !$.isArray(results.results)) {\n            console.error(\n              'Select2: The AJAX results did not return an array in the ' +\n              '`results` key of the response.'\n            );\n          }\n        }\n\n        callback(results);\n      }, function () {\n        // Attempt to detect if a request was aborted\n        // Only works if the transport exposes a status property\n        if ($request.status && $request.status === '0') {\n          return;\n        }\n\n        self.trigger('results:message', {\n          message: 'errorLoading'\n        });\n      });\n\n      self._request = $request;\n    }\n\n    if (this.ajaxOptions.delay && params.term != null) {\n      if (this._queryTimeout) {\n        window.clearTimeout(this._queryTimeout);\n      }\n\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n    } else {\n      request();\n    }\n  };\n\n  return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n  'jquery'\n], function ($) {\n  function Tags (decorated, $element, options) {\n    var tags = options.get('tags');\n\n    var createTag = options.get('createTag');\n\n    if (createTag !== undefined) {\n      this.createTag = createTag;\n    }\n\n    var insertTag = options.get('insertTag');\n\n    if (insertTag !== undefined) {\n        this.insertTag = insertTag;\n    }\n\n    decorated.call(this, $element, options);\n\n    if ($.isArray(tags)) {\n      for (var t = 0; t < tags.length; t++) {\n        var tag = tags[t];\n        var item = this._normalizeItem(tag);\n\n        var $option = this.option(item);\n\n        this.$element.append($option);\n      }\n    }\n  }\n\n  Tags.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    this._removeOldTags();\n\n    if (params.term == null || params.page != null) {\n      decorated.call(this, params, callback);\n      return;\n    }\n\n    function wrapper (obj, child) {\n      var data = obj.results;\n\n      for (var i = 0; i < data.length; i++) {\n        var option = data[i];\n\n        var checkChildren = (\n          option.children != null &&\n          !wrapper({\n            results: option.children\n          }, true)\n        );\n\n        var checkText = option.text === params.term;\n\n        if (checkText || checkChildren) {\n          if (child) {\n            return false;\n          }\n\n          obj.data = data;\n          callback(obj);\n\n          return;\n        }\n      }\n\n      if (child) {\n        return true;\n      }\n\n      var tag = self.createTag(params);\n\n      if (tag != null) {\n        var $option = self.option(tag);\n        $option.attr('data-select2-tag', true);\n\n        self.addOptions([$option]);\n\n        self.insertTag(data, tag);\n      }\n\n      obj.results = data;\n\n      callback(obj);\n    }\n\n    decorated.call(this, params, wrapper);\n  };\n\n  Tags.prototype.createTag = function (decorated, params) {\n    var term = $.trim(params.term);\n\n    if (term === '') {\n      return null;\n    }\n\n    return {\n      id: term,\n      text: term\n    };\n  };\n\n  Tags.prototype.insertTag = function (_, data, tag) {\n    data.unshift(tag);\n  };\n\n  Tags.prototype._removeOldTags = function (_) {\n    var tag = this._lastTag;\n\n    var $options = this.$element.find('option[data-select2-tag]');\n\n    $options.each(function () {\n      if (this.selected) {\n        return;\n      }\n\n      $(this).remove();\n    });\n  };\n\n  return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n  'jquery'\n], function ($) {\n  function Tokenizer (decorated, $element, options) {\n    var tokenizer = options.get('tokenizer');\n\n    if (tokenizer !== undefined) {\n      this.tokenizer = tokenizer;\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    this.$search =  container.dropdown.$search || container.selection.$search ||\n      $container.find('.select2-search__field');\n  };\n\n  Tokenizer.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    function createAndSelect (data) {\n      // Normalize the data object so we can use it for checks\n      var item = self._normalizeItem(data);\n\n      // Check if the data object already exists as a tag\n      // Select it if it doesn't\n      var $existingOptions = self.$element.find('option').filter(function () {\n        return $(this).val() === item.id;\n      });\n\n      // If an existing option wasn't found for it, create the option\n      if (!$existingOptions.length) {\n        var $option = self.option(item);\n        $option.attr('data-select2-tag', true);\n\n        self._removeOldTags();\n        self.addOptions([$option]);\n      }\n\n      // Select the item, now that we know there is an option for it\n      select(item);\n    }\n\n    function select (data) {\n      self.trigger('select', {\n        data: data\n      });\n    }\n\n    params.term = params.term || '';\n\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n    if (tokenData.term !== params.term) {\n      // Replace the search term if we have the search box\n      if (this.$search.length) {\n        this.$search.val(tokenData.term);\n        this.$search.focus();\n      }\n\n      params.term = tokenData.term;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n    var separators = options.get('tokenSeparators') || [];\n    var term = params.term;\n    var i = 0;\n\n    var createTag = this.createTag || function (params) {\n      return {\n        id: params.term,\n        text: params.term\n      };\n    };\n\n    while (i < term.length) {\n      var termChar = term[i];\n\n      if ($.inArray(termChar, separators) === -1) {\n        i++;\n\n        continue;\n      }\n\n      var part = term.substr(0, i);\n      var partParams = $.extend({}, params, {\n        term: part\n      });\n\n      var data = createTag(partParams);\n\n      if (data == null) {\n        i++;\n        continue;\n      }\n\n      callback(data);\n\n      // Reset the term to not include the tokenized portion\n      term = term.substr(i + 1) || '';\n      i = 0;\n    }\n\n    return {\n      term: term\n    };\n  };\n\n  return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n  function MinimumInputLength (decorated, $e, options) {\n    this.minimumInputLength = options.get('minimumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (params.term.length < this.minimumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooShort',\n        args: {\n          minimum: this.minimumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n  function MaximumInputLength (decorated, $e, options) {\n    this.maximumInputLength = options.get('maximumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (this.maximumInputLength > 0 &&\n        params.term.length > this.maximumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooLong',\n        args: {\n          maximum: this.maximumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n  function MaximumSelectionLength (decorated, $e, options) {\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumSelectionLength.prototype.query =\n    function (decorated, params, callback) {\n      var self = this;\n\n      this.current(function (currentData) {\n        var count = currentData != null ? currentData.length : 0;\n        if (self.maximumSelectionLength > 0 &&\n          count >= self.maximumSelectionLength) {\n          self.trigger('results:message', {\n            message: 'maximumSelected',\n            args: {\n              maximum: self.maximumSelectionLength\n            }\n          });\n          return;\n        }\n        decorated.call(self, params, callback);\n      });\n  };\n\n  return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Dropdown ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    Dropdown.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Dropdown, Utils.Observable);\n\n  Dropdown.prototype.render = function () {\n    var $dropdown = $(\n      '<span class=\"select2-dropdown\">' +\n        '<span class=\"select2-results\"></span>' +\n      '</span>'\n    );\n\n    $dropdown.attr('dir', this.options.get('dir'));\n\n    this.$dropdown = $dropdown;\n\n    return $dropdown;\n  };\n\n  Dropdown.prototype.bind = function () {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.position = function ($dropdown, $container) {\n    // Should be implmented in subclasses\n  };\n\n  Dropdown.prototype.destroy = function () {\n    // Remove the dropdown from the DOM\n    this.$dropdown.remove();\n  };\n\n  return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function Search () { }\n\n  Search.prototype.render = function (decorated) {\n    var $rendered = decorated.call(this);\n\n    var $search = $(\n      '<span class=\"select2-search select2-search--dropdown\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\"' +\n        ' spellcheck=\"false\" role=\"textbox\" />' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    $rendered.prepend($search);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    this.$search.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n    });\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$search.on('input', function (evt) {\n      // Unbind the duplicated `keyup` event\n      $(this).off('keyup');\n    });\n\n    this.$search.on('keyup input', function (evt) {\n      self.handleSearch(evt);\n    });\n\n    container.on('open', function () {\n      self.$search.attr('tabindex', 0);\n\n      self.$search.focus();\n\n      window.setTimeout(function () {\n        self.$search.focus();\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n\n      self.$search.val('');\n    });\n\n    container.on('focus', function () {\n      if (container.isOpen()) {\n        self.$search.focus();\n      }\n    });\n\n    container.on('results:all', function (params) {\n      if (params.query.term == null || params.query.term === '') {\n        var showSearch = self.showSearch(params);\n\n        if (showSearch) {\n          self.$searchContainer.removeClass('select2-search--hide');\n        } else {\n          self.$searchContainer.addClass('select2-search--hide');\n        }\n      }\n    });\n  };\n\n  Search.prototype.handleSearch = function (evt) {\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.showSearch = function (_, params) {\n    return true;\n  };\n\n  return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  HidePlaceholder.prototype.append = function (decorated, data) {\n    data.results = this.removePlaceholder(data.results);\n\n    decorated.call(this, data);\n  };\n\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n    var modifiedData = data.slice(0);\n\n    for (var d = data.length - 1; d >= 0; d--) {\n      var item = data[d];\n\n      if (this.placeholder.id === item.id) {\n        modifiedData.splice(d, 1);\n      }\n    }\n\n    return modifiedData;\n  };\n\n  return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n  'jquery'\n], function ($) {\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\n    this.lastParams = {};\n\n    decorated.call(this, $element, options, dataAdapter);\n\n    this.$loadingMore = this.createLoadingMore();\n    this.loading = false;\n  }\n\n  InfiniteScroll.prototype.append = function (decorated, data) {\n    this.$loadingMore.remove();\n    this.loading = false;\n\n    decorated.call(this, data);\n\n    if (this.showLoadingMore(data)) {\n      this.$results.append(this.$loadingMore);\n    }\n  };\n\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('query', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    container.on('query:append', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    this.$results.on('scroll', function () {\n      var isLoadMoreVisible = $.contains(\n        document.documentElement,\n        self.$loadingMore[0]\n      );\n\n      if (self.loading || !isLoadMoreVisible) {\n        return;\n      }\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var loadingMoreOffset = self.$loadingMore.offset().top +\n        self.$loadingMore.outerHeight(false);\n\n      if (currentOffset + 50 >= loadingMoreOffset) {\n        self.loadMore();\n      }\n    });\n  };\n\n  InfiniteScroll.prototype.loadMore = function () {\n    this.loading = true;\n\n    var params = $.extend({}, {page: 1}, this.lastParams);\n\n    params.page++;\n\n    this.trigger('query:append', params);\n  };\n\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n    return data.pagination && data.pagination.more;\n  };\n\n  InfiniteScroll.prototype.createLoadingMore = function () {\n    var $option = $(\n      '<li ' +\n      'class=\"select2-results__option select2-results__option--load-more\"' +\n      'role=\"treeitem\" aria-disabled=\"true\"></li>'\n    );\n\n    var message = this.options.get('translations').get('loadingMore');\n\n    $option.html(message(this.lastParams));\n\n    return $option;\n  };\n\n  return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function AttachBody (decorated, $element, options) {\n    this.$dropdownParent = options.get('dropdownParent') || $(document.body);\n\n    decorated.call(this, $element, options);\n  }\n\n  AttachBody.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var setupResultsEvents = false;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      if (!setupResultsEvents) {\n        setupResultsEvents = true;\n\n        container.on('results:all', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n\n        container.on('results:append', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n      }\n    });\n\n    container.on('close', function () {\n      self._hideDropdown();\n      self._detachPositioningHandler(container);\n    });\n\n    this.$dropdownContainer.on('mousedown', function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  AttachBody.prototype.destroy = function (decorated) {\n    decorated.call(this);\n\n    this.$dropdownContainer.remove();\n  };\n\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n    // Clone all of the container classes\n    $dropdown.attr('class', $container.attr('class'));\n\n    $dropdown.removeClass('select2');\n    $dropdown.addClass('select2-container--open');\n\n    $dropdown.css({\n      position: 'absolute',\n      top: -999999\n    });\n\n    this.$container = $container;\n  };\n\n  AttachBody.prototype.render = function (decorated) {\n    var $container = $('<span></span>');\n\n    var $dropdown = decorated.call(this);\n    $container.append($dropdown);\n\n    this.$dropdownContainer = $container;\n\n    return $container;\n  };\n\n  AttachBody.prototype._hideDropdown = function (decorated) {\n    this.$dropdownContainer.detach();\n  };\n\n  AttachBody.prototype._attachPositioningHandler =\n      function (decorated, container) {\n    var self = this;\n\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.each(function () {\n      $(this).data('select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = $(this).data('select2-scroll-position');\n      $(this).scrollTop(position.y);\n    });\n\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n      function (e) {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n  };\n\n  AttachBody.prototype._detachPositioningHandler =\n      function (decorated, container) {\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.off(scrollEvent);\n\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n  };\n\n  AttachBody.prototype._positionDropdown = function () {\n    var $window = $(window);\n\n    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n    var newDirection = null;\n\n    var offset = this.$container.offset();\n\n    offset.bottom = offset.top + this.$container.outerHeight(false);\n\n    var container = {\n      height: this.$container.outerHeight(false)\n    };\n\n    container.top = offset.top;\n    container.bottom = offset.top + container.height;\n\n    var dropdown = {\n      height: this.$dropdown.outerHeight(false)\n    };\n\n    var viewport = {\n      top: $window.scrollTop(),\n      bottom: $window.scrollTop() + $window.height()\n    };\n\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n    var css = {\n      left: offset.left,\n      top: container.bottom\n    };\n\n    // Determine what the parent element is to use for calciulating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positoned elements, we need to get the element\n    // that is determining the offset\n    if ($offsetParent.css('position') === 'static') {\n      $offsetParent = $offsetParent.offsetParent();\n    }\n\n    var parentOffset = $offsetParent.offset();\n\n    css.top -= parentOffset.top;\n    css.left -= parentOffset.left;\n\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\n      newDirection = 'below';\n    }\n\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n      newDirection = 'above';\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n      newDirection = 'below';\n    }\n\n    if (newDirection == 'above' ||\n      (isCurrentlyAbove && newDirection !== 'below')) {\n      css.top = container.top - parentOffset.top - dropdown.height;\n    }\n\n    if (newDirection != null) {\n      this.$dropdown\n        .removeClass('select2-dropdown--below select2-dropdown--above')\n        .addClass('select2-dropdown--' + newDirection);\n      this.$container\n        .removeClass('select2-container--below select2-container--above')\n        .addClass('select2-container--' + newDirection);\n    }\n\n    this.$dropdownContainer.css(css);\n  };\n\n  AttachBody.prototype._resizeDropdown = function () {\n    var css = {\n      width: this.$container.outerWidth(false) + 'px'\n    };\n\n    if (this.options.get('dropdownAutoWidth')) {\n      css.minWidth = css.width;\n      css.position = 'relative';\n      css.width = 'auto';\n    }\n\n    this.$dropdown.css(css);\n  };\n\n  AttachBody.prototype._showDropdown = function (decorated) {\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n    this._positionDropdown();\n    this._resizeDropdown();\n  };\n\n  return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n  function countResults (data) {\n    var count = 0;\n\n    for (var d = 0; d < data.length; d++) {\n      var item = data[d];\n\n      if (item.children) {\n        count += countResults(item.children);\n      } else {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n    if (this.minimumResultsForSearch < 0) {\n      this.minimumResultsForSearch = Infinity;\n    }\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\n      return false;\n    }\n\n    return decorated.call(this, params);\n  };\n\n  return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n\n], function () {\n  function SelectOnClose () { }\n\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('close', function (params) {\n      self._handleSelectOnClose(params);\n    });\n  };\n\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n    if (params && params.originalSelect2Event != null) {\n      var event = params.originalSelect2Event;\n\n      // Don't select an item if the close event was triggered from a select or\n      // unselect event\n      if (event._type === 'select' || event._type === 'unselect') {\n        return;\n      }\n    }\n\n    var $highlightedResults = this.getHighlightedResults();\n\n    // Only select highlighted results\n    if ($highlightedResults.length < 1) {\n      return;\n    }\n\n    var data = $highlightedResults.data('data');\n\n    // Don't re-select already selected resulte\n    if (\n      (data.element != null && data.element.selected) ||\n      (data.element == null && data.selected)\n    ) {\n      return;\n    }\n\n    this.trigger('select', {\n        data: data\n    });\n  };\n\n  return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n  function CloseOnSelect () { }\n\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('select', function (evt) {\n      self._selectTriggered(evt);\n    });\n\n    container.on('unselect', function (evt) {\n      self._selectTriggered(evt);\n    });\n  };\n\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n    var originalEvent = evt.originalEvent;\n\n    // Don't close if the control key is being held\n    if (originalEvent && originalEvent.ctrlKey) {\n      return;\n    }\n\n    this.trigger('close', {\n      originalEvent: originalEvent,\n      originalSelect2Event: evt\n    });\n  };\n\n  return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n  // English\n  return {\n    errorLoading: function () {\n      return 'The results could not be loaded.';\n    },\n    inputTooLong: function (args) {\n      var overChars = args.input.length - args.maximum;\n\n      var message = 'Please delete ' + overChars + ' character';\n\n      if (overChars != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    inputTooShort: function (args) {\n      var remainingChars = args.minimum - args.input.length;\n\n      var message = 'Please enter ' + remainingChars + ' or more characters';\n\n      return message;\n    },\n    loadingMore: function () {\n      return 'Loading more results…';\n    },\n    maximumSelected: function (args) {\n      var message = 'You can only select ' + args.maximum + ' item';\n\n      if (args.maximum != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    noResults: function () {\n      return 'No results found';\n    },\n    searching: function () {\n      return 'Searching…';\n    }\n  };\n});\n\nS2.define('select2/defaults',[\n  'jquery',\n  'require',\n\n  './results',\n\n  './selection/single',\n  './selection/multiple',\n  './selection/placeholder',\n  './selection/allowClear',\n  './selection/search',\n  './selection/eventRelay',\n\n  './utils',\n  './translation',\n  './diacritics',\n\n  './data/select',\n  './data/array',\n  './data/ajax',\n  './data/tags',\n  './data/tokenizer',\n  './data/minimumInputLength',\n  './data/maximumInputLength',\n  './data/maximumSelectionLength',\n\n  './dropdown',\n  './dropdown/search',\n  './dropdown/hidePlaceholder',\n  './dropdown/infiniteScroll',\n  './dropdown/attachBody',\n  './dropdown/minimumResultsForSearch',\n  './dropdown/selectOnClose',\n  './dropdown/closeOnSelect',\n\n  './i18n/en'\n], function ($, require,\n\n             ResultsList,\n\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\n             SelectionSearch, EventRelay,\n\n             Utils, Translation, DIACRITICS,\n\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n             EnglishTranslation) {\n  function Defaults () {\n    this.reset();\n  }\n\n  Defaults.prototype.apply = function (options) {\n    options = $.extend(true, {}, this.defaults, options);\n\n    if (options.dataAdapter == null) {\n      if (options.ajax != null) {\n        options.dataAdapter = AjaxData;\n      } else if (options.data != null) {\n        options.dataAdapter = ArrayData;\n      } else {\n        options.dataAdapter = SelectData;\n      }\n\n      if (options.minimumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MinimumInputLength\n        );\n      }\n\n      if (options.maximumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumInputLength\n        );\n      }\n\n      if (options.maximumSelectionLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumSelectionLength\n        );\n      }\n\n      if (options.tags) {\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n      }\n\n      if (options.tokenSeparators != null || options.tokenizer != null) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Tokenizer\n        );\n      }\n\n      if (options.query != null) {\n        var Query = require(options.amdBase + 'compat/query');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Query\n        );\n      }\n\n      if (options.initSelection != null) {\n        var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          InitSelection\n        );\n      }\n    }\n\n    if (options.resultsAdapter == null) {\n      options.resultsAdapter = ResultsList;\n\n      if (options.ajax != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          InfiniteScroll\n        );\n      }\n\n      if (options.placeholder != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          HidePlaceholder\n        );\n      }\n\n      if (options.selectOnClose) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          SelectOnClose\n        );\n      }\n    }\n\n    if (options.dropdownAdapter == null) {\n      if (options.multiple) {\n        options.dropdownAdapter = Dropdown;\n      } else {\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n        options.dropdownAdapter = SearchableDropdown;\n      }\n\n      if (options.minimumResultsForSearch !== 0) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          MinimumResultsForSearch\n        );\n      }\n\n      if (options.closeOnSelect) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          CloseOnSelect\n        );\n      }\n\n      if (\n        options.dropdownCssClass != null ||\n        options.dropdownCss != null ||\n        options.adaptDropdownCssClass != null\n      ) {\n        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          DropdownCSS\n        );\n      }\n\n      options.dropdownAdapter = Utils.Decorate(\n        options.dropdownAdapter,\n        AttachBody\n      );\n    }\n\n    if (options.selectionAdapter == null) {\n      if (options.multiple) {\n        options.selectionAdapter = MultipleSelection;\n      } else {\n        options.selectionAdapter = SingleSelection;\n      }\n\n      // Add the placeholder mixin if a placeholder was specified\n      if (options.placeholder != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          Placeholder\n        );\n      }\n\n      if (options.allowClear) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          AllowClear\n        );\n      }\n\n      if (options.multiple) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionSearch\n        );\n      }\n\n      if (\n        options.containerCssClass != null ||\n        options.containerCss != null ||\n        options.adaptContainerCssClass != null\n      ) {\n        var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          ContainerCSS\n        );\n      }\n\n      options.selectionAdapter = Utils.Decorate(\n        options.selectionAdapter,\n        EventRelay\n      );\n    }\n\n    if (typeof options.language === 'string') {\n      // Check if the language is specified with a region\n      if (options.language.indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = options.language.split('-');\n        var baseLanguage = languageParts[0];\n\n        options.language = [options.language, baseLanguage];\n      } else {\n        options.language = [options.language];\n      }\n    }\n\n    if ($.isArray(options.language)) {\n      var languages = new Translation();\n      options.language.push('en');\n\n      var languageNames = options.language;\n\n      for (var l = 0; l < languageNames.length; l++) {\n        var name = languageNames[l];\n        var language = {};\n\n        try {\n          // Try to load it with the original name\n          language = Translation.loadPath(name);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            name = this.defaults.amdLanguageBase + name;\n            language = Translation.loadPath(name);\n          } catch (ex) {\n            // The translation could not be loaded at all. Sometimes this is\n            // because of a configuration problem, other times this can be\n            // because of how Select2 helps load all possible translation files.\n            if (options.debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + name + '\" could not be ' +\n                'automatically loaded. A fallback will be used instead.'\n              );\n            }\n\n            continue;\n          }\n        }\n\n        languages.extend(language);\n      }\n\n      options.translations = languages;\n    } else {\n      var baseTranslation = Translation.loadPath(\n        this.defaults.amdLanguageBase + 'en'\n      );\n      var customTranslation = new Translation(options.language);\n\n      customTranslation.extend(baseTranslation);\n\n      options.translations = customTranslation;\n    }\n\n    return options;\n  };\n\n  Defaults.prototype.reset = function () {\n    function stripDiacritics (text) {\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n      function match(a) {\n        return DIACRITICS[a] || a;\n      }\n\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function matcher (params, data) {\n      // Always return the object if there is nothing to compare\n      if ($.trim(params.term) === '') {\n        return data;\n      }\n\n      // Do a recursive check for options with children\n      if (data.children && data.children.length > 0) {\n        // Clone the data object if there are children\n        // This is required as we modify the object to remove any non-matches\n        var match = $.extend(true, {}, data);\n\n        // Check each child of the option\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          var matches = matcher(params, child);\n\n          // If there wasn't a match, remove the object in the array\n          if (matches == null) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        // If any children matched, return the new object\n        if (match.children.length > 0) {\n          return match;\n        }\n\n        // If there were no matching children, check just the plain object\n        return matcher(params, match);\n      }\n\n      var original = stripDiacritics(data.text).toUpperCase();\n      var term = stripDiacritics(params.term).toUpperCase();\n\n      // Check if the text contains the term\n      if (original.indexOf(term) > -1) {\n        return data;\n      }\n\n      // If it doesn't contain the term, don't return anything\n      return null;\n    }\n\n    this.defaults = {\n      amdBase: './',\n      amdLanguageBase: './i18n/',\n      closeOnSelect: true,\n      debug: false,\n      dropdownAutoWidth: false,\n      escapeMarkup: Utils.escapeMarkup,\n      language: EnglishTranslation,\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: false,\n      sorter: function (data) {\n        return data;\n      },\n      templateResult: function (result) {\n        return result.text;\n      },\n      templateSelection: function (selection) {\n        return selection.text;\n      },\n      theme: 'default',\n      width: 'resolve'\n    };\n  };\n\n  Defaults.prototype.set = function (key, value) {\n    var camelKey = $.camelCase(key);\n\n    var data = {};\n    data[camelKey] = value;\n\n    var convertedData = Utils._convertData(data);\n\n    $.extend(this.defaults, convertedData);\n  };\n\n  var defaults = new Defaults();\n\n  return defaults;\n});\n\nS2.define('select2/options',[\n  'require',\n  'jquery',\n  './defaults',\n  './utils'\n], function (require, $, Defaults, Utils) {\n  function Options (options, $element) {\n    this.options = options;\n\n    if ($element != null) {\n      this.fromElement($element);\n    }\n\n    this.options = Defaults.apply(this.options);\n\n    if ($element && $element.is('input')) {\n      var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n      this.options.dataAdapter = Utils.Decorate(\n        this.options.dataAdapter,\n        InputCompat\n      );\n    }\n  }\n\n  Options.prototype.fromElement = function ($e) {\n    var excludedData = ['select2'];\n\n    if (this.options.multiple == null) {\n      this.options.multiple = $e.prop('multiple');\n    }\n\n    if (this.options.disabled == null) {\n      this.options.disabled = $e.prop('disabled');\n    }\n\n    if (this.options.language == null) {\n      if ($e.prop('lang')) {\n        this.options.language = $e.prop('lang').toLowerCase();\n      } else if ($e.closest('[lang]').prop('lang')) {\n        this.options.language = $e.closest('[lang]').prop('lang');\n      }\n    }\n\n    if (this.options.dir == null) {\n      if ($e.prop('dir')) {\n        this.options.dir = $e.prop('dir');\n      } else if ($e.closest('[dir]').prop('dir')) {\n        this.options.dir = $e.closest('[dir]').prop('dir');\n      } else {\n        this.options.dir = 'ltr';\n      }\n    }\n\n    $e.prop('disabled', this.options.disabled);\n    $e.prop('multiple', this.options.multiple);\n\n    if ($e.data('select2Tags')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n          'removed in future versions of Select2.'\n        );\n      }\n\n      $e.data('data', $e.data('select2Tags'));\n      $e.data('tags', true);\n    }\n\n    if ($e.data('ajaxUrl')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\n          '`data-ajax--url` and support for the old attribute will be removed' +\n          ' in future versions of Select2.'\n        );\n      }\n\n      $e.attr('ajax--url', $e.data('ajaxUrl'));\n      $e.data('ajax--url', $e.data('ajaxUrl'));\n    }\n\n    var dataset = {};\n\n    // Prefer the element's `dataset` attribute if it exists\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n      dataset = $.extend(true, {}, $e[0].dataset, $e.data());\n    } else {\n      dataset = $e.data();\n    }\n\n    var data = $.extend(true, {}, dataset);\n\n    data = Utils._convertData(data);\n\n    for (var key in data) {\n      if ($.inArray(key, excludedData) > -1) {\n        continue;\n      }\n\n      if ($.isPlainObject(this.options[key])) {\n        $.extend(this.options[key], data[key]);\n      } else {\n        this.options[key] = data[key];\n      }\n    }\n\n    return this;\n  };\n\n  Options.prototype.get = function (key) {\n    return this.options[key];\n  };\n\n  Options.prototype.set = function (key, val) {\n    this.options[key] = val;\n  };\n\n  return Options;\n});\n\nS2.define('select2/core',[\n  'jquery',\n  './options',\n  './utils',\n  './keys'\n], function ($, Options, Utils, KEYS) {\n  var Select2 = function ($element, options) {\n    if ($element.data('select2') != null) {\n      $element.data('select2').destroy();\n    }\n\n    this.$element = $element;\n\n    this.id = this._generateId($element);\n\n    options = options || {};\n\n    this.options = new Options(options, $element);\n\n    Select2.__super__.constructor.call(this);\n\n    // Set up the tabindex\n\n    var tabindex = $element.attr('tabindex') || 0;\n    $element.data('old-tabindex', tabindex);\n    $element.attr('tabindex', '-1');\n\n    // Set up containers and adapters\n\n    var DataAdapter = this.options.get('dataAdapter');\n    this.dataAdapter = new DataAdapter($element, this.options);\n\n    var $container = this.render();\n\n    this._placeContainer($container);\n\n    var SelectionAdapter = this.options.get('selectionAdapter');\n    this.selection = new SelectionAdapter($element, this.options);\n    this.$selection = this.selection.render();\n\n    this.selection.position(this.$selection, $container);\n\n    var DropdownAdapter = this.options.get('dropdownAdapter');\n    this.dropdown = new DropdownAdapter($element, this.options);\n    this.$dropdown = this.dropdown.render();\n\n    this.dropdown.position(this.$dropdown, $container);\n\n    var ResultsAdapter = this.options.get('resultsAdapter');\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n    this.$results = this.results.render();\n\n    this.results.position(this.$results, this.$dropdown);\n\n    // Bind events\n\n    var self = this;\n\n    // Bind the container to all of the adapters\n    this._bindAdapters();\n\n    // Register any DOM event handlers\n    this._registerDomEvents();\n\n    // Register any internal event handlers\n    this._registerDataEvents();\n    this._registerSelectionEvents();\n    this._registerDropdownEvents();\n    this._registerResultsEvents();\n    this._registerEvents();\n\n    // Set the initial state\n    this.dataAdapter.current(function (initialData) {\n      self.trigger('selection:update', {\n        data: initialData\n      });\n    });\n\n    // Hide the original select\n    $element.addClass('select2-hidden-accessible');\n    $element.attr('aria-hidden', 'true');\n\n    // Synchronize any monitored attributes\n    this._syncAttributes();\n\n    $element.data('select2', this);\n  };\n\n  Utils.Extend(Select2, Utils.Observable);\n\n  Select2.prototype._generateId = function ($element) {\n    var id = '';\n\n    if ($element.attr('id') != null) {\n      id = $element.attr('id');\n    } else if ($element.attr('name') != null) {\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\n    } else {\n      id = Utils.generateChars(4);\n    }\n\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n    id = 'select2-' + id;\n\n    return id;\n  };\n\n  Select2.prototype._placeContainer = function ($container) {\n    $container.insertAfter(this.$element);\n\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n    if (width != null) {\n      $container.css('width', width);\n    }\n  };\n\n  Select2.prototype._resolveWidth = function ($element, method) {\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n    if (method == 'resolve') {\n      var styleWidth = this._resolveWidth($element, 'style');\n\n      if (styleWidth != null) {\n        return styleWidth;\n      }\n\n      return this._resolveWidth($element, 'element');\n    }\n\n    if (method == 'element') {\n      var elementWidth = $element.outerWidth(false);\n\n      if (elementWidth <= 0) {\n        return 'auto';\n      }\n\n      return elementWidth + 'px';\n    }\n\n    if (method == 'style') {\n      var style = $element.attr('style');\n\n      if (typeof(style) !== 'string') {\n        return null;\n      }\n\n      var attrs = style.split(';');\n\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n        var attr = attrs[i].replace(/\\s/g, '');\n        var matches = attr.match(WIDTH);\n\n        if (matches !== null && matches.length >= 1) {\n          return matches[1];\n        }\n      }\n\n      return null;\n    }\n\n    return method;\n  };\n\n  Select2.prototype._bindAdapters = function () {\n    this.dataAdapter.bind(this, this.$container);\n    this.selection.bind(this, this.$container);\n\n    this.dropdown.bind(this, this.$container);\n    this.results.bind(this, this.$container);\n  };\n\n  Select2.prototype._registerDomEvents = function () {\n    var self = this;\n\n    this.$element.on('change.select2', function () {\n      self.dataAdapter.current(function (data) {\n        self.trigger('selection:update', {\n          data: data\n        });\n      });\n    });\n\n    this.$element.on('focus.select2', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this._syncA = Utils.bind(this._syncAttributes, this);\n    this._syncS = Utils.bind(this._syncSubtree, this);\n\n    if (this.$element[0].attachEvent) {\n      this.$element[0].attachEvent('onpropertychange', this._syncA);\n    }\n\n    var observer = window.MutationObserver ||\n      window.WebKitMutationObserver ||\n      window.MozMutationObserver\n    ;\n\n    if (observer != null) {\n      this._observer = new observer(function (mutations) {\n        $.each(mutations, self._syncA);\n        $.each(mutations, self._syncS);\n      });\n      this._observer.observe(this.$element[0], {\n        attributes: true,\n        childList: true,\n        subtree: false\n      });\n    } else if (this.$element[0].addEventListener) {\n      this.$element[0].addEventListener(\n        'DOMAttrModified',\n        self._syncA,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeInserted',\n        self._syncS,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeRemoved',\n        self._syncS,\n        false\n      );\n    }\n  };\n\n  Select2.prototype._registerDataEvents = function () {\n    var self = this;\n\n    this.dataAdapter.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerSelectionEvents = function () {\n    var self = this;\n    var nonRelayEvents = ['toggle', 'focus'];\n\n    this.selection.on('toggle', function () {\n      self.toggleDropdown();\n    });\n\n    this.selection.on('focus', function (params) {\n      self.focus(params);\n    });\n\n    this.selection.on('*', function (name, params) {\n      if ($.inArray(name, nonRelayEvents) !== -1) {\n        return;\n      }\n\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerDropdownEvents = function () {\n    var self = this;\n\n    this.dropdown.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerResultsEvents = function () {\n    var self = this;\n\n    this.results.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerEvents = function () {\n    var self = this;\n\n    this.on('open', function () {\n      self.$container.addClass('select2-container--open');\n    });\n\n    this.on('close', function () {\n      self.$container.removeClass('select2-container--open');\n    });\n\n    this.on('enable', function () {\n      self.$container.removeClass('select2-container--disabled');\n    });\n\n    this.on('disable', function () {\n      self.$container.addClass('select2-container--disabled');\n    });\n\n    this.on('blur', function () {\n      self.$container.removeClass('select2-container--focus');\n    });\n\n    this.on('query', function (params) {\n      if (!self.isOpen()) {\n        self.trigger('open', {});\n      }\n\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:all', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('query:append', function (params) {\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:append', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('keypress', function (evt) {\n      var key = evt.which;\n\n      if (self.isOpen()) {\n        if (key === KEYS.ESC || key === KEYS.TAB ||\n            (key === KEYS.UP && evt.altKey)) {\n          self.close();\n\n          evt.preventDefault();\n        } else if (key === KEYS.ENTER) {\n          self.trigger('results:select', {});\n\n          evt.preventDefault();\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n          self.trigger('results:toggle', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.UP) {\n          self.trigger('results:previous', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.DOWN) {\n          self.trigger('results:next', {});\n\n          evt.preventDefault();\n        }\n      } else {\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\n            (key === KEYS.DOWN && evt.altKey)) {\n          self.open();\n\n          evt.preventDefault();\n        }\n      }\n    });\n  };\n\n  Select2.prototype._syncAttributes = function () {\n    this.options.set('disabled', this.$element.prop('disabled'));\n\n    if (this.options.get('disabled')) {\n      if (this.isOpen()) {\n        this.close();\n      }\n\n      this.trigger('disable', {});\n    } else {\n      this.trigger('enable', {});\n    }\n  };\n\n  Select2.prototype._syncSubtree = function (evt, mutations) {\n    var changed = false;\n    var self = this;\n\n    // Ignore any mutation events raised for elements that aren't options or\n    // optgroups. This handles the case when the select element is destroyed\n    if (\n      evt && evt.target && (\n        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n      )\n    ) {\n      return;\n    }\n\n    if (!mutations) {\n      // If mutation events aren't supported, then we can only assume that the\n      // change affected the selections\n      changed = true;\n    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\n        var node = mutations.addedNodes[n];\n\n        if (node.selected) {\n          changed = true;\n        }\n      }\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n      changed = true;\n    }\n\n    // Only re-pull the data if we think there is a change\n    if (changed) {\n      this.dataAdapter.current(function (currentData) {\n        self.trigger('selection:update', {\n          data: currentData\n        });\n      });\n    }\n  };\n\n  /**\n   * Override the trigger method to automatically trigger pre-events when\n   * there are events that can be prevented.\n   */\n  Select2.prototype.trigger = function (name, args) {\n    var actualTrigger = Select2.__super__.trigger;\n    var preTriggerMap = {\n      'open': 'opening',\n      'close': 'closing',\n      'select': 'selecting',\n      'unselect': 'unselecting'\n    };\n\n    if (args === undefined) {\n      args = {};\n    }\n\n    if (name in preTriggerMap) {\n      var preTriggerName = preTriggerMap[name];\n      var preTriggerArgs = {\n        prevented: false,\n        name: name,\n        args: args\n      };\n\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n      if (preTriggerArgs.prevented) {\n        args.prevented = true;\n\n        return;\n      }\n    }\n\n    actualTrigger.call(this, name, args);\n  };\n\n  Select2.prototype.toggleDropdown = function () {\n    if (this.options.get('disabled')) {\n      return;\n    }\n\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  };\n\n  Select2.prototype.open = function () {\n    if (this.isOpen()) {\n      return;\n    }\n\n    this.trigger('query', {});\n  };\n\n  Select2.prototype.close = function () {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.trigger('close', {});\n  };\n\n  Select2.prototype.isOpen = function () {\n    return this.$container.hasClass('select2-container--open');\n  };\n\n  Select2.prototype.hasFocus = function () {\n    return this.$container.hasClass('select2-container--focus');\n  };\n\n  Select2.prototype.focus = function (data) {\n    // No need to re-trigger focus events if we are already focused\n    if (this.hasFocus()) {\n      return;\n    }\n\n    this.$container.addClass('select2-container--focus');\n    this.trigger('focus', {});\n  };\n\n  Select2.prototype.enable = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n        ' instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      args = [true];\n    }\n\n    var disabled = !args[0];\n\n    this.$element.prop('disabled', disabled);\n  };\n\n  Select2.prototype.data = function () {\n    if (this.options.get('debug') &&\n        arguments.length > 0 && window.console && console.warn) {\n      console.warn(\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n        'should consider setting the value instead using `$element.val()`.'\n      );\n    }\n\n    var data = [];\n\n    this.dataAdapter.current(function (currentData) {\n      data = currentData;\n    });\n\n    return data;\n  };\n\n  Select2.prototype.val = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n        ' removed in later Select2 versions. Use $element.val() instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      return this.$element.val();\n    }\n\n    var newVal = args[0];\n\n    if ($.isArray(newVal)) {\n      newVal = $.map(newVal, function (obj) {\n        return obj.toString();\n      });\n    }\n\n    this.$element.val(newVal).trigger('change');\n  };\n\n  Select2.prototype.destroy = function () {\n    this.$container.remove();\n\n    if (this.$element[0].detachEvent) {\n      this.$element[0].detachEvent('onpropertychange', this._syncA);\n    }\n\n    if (this._observer != null) {\n      this._observer.disconnect();\n      this._observer = null;\n    } else if (this.$element[0].removeEventListener) {\n      this.$element[0]\n        .removeEventListener('DOMAttrModified', this._syncA, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeInserted', this._syncS, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeRemoved', this._syncS, false);\n    }\n\n    this._syncA = null;\n    this._syncS = null;\n\n    this.$element.off('.select2');\n    this.$element.attr('tabindex', this.$element.data('old-tabindex'));\n\n    this.$element.removeClass('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\n    this.$element.removeData('select2');\n\n    this.dataAdapter.destroy();\n    this.selection.destroy();\n    this.dropdown.destroy();\n    this.results.destroy();\n\n    this.dataAdapter = null;\n    this.selection = null;\n    this.dropdown = null;\n    this.results = null;\n  };\n\n  Select2.prototype.render = function () {\n    var $container = $(\n      '<span class=\"select2 select2-container\">' +\n        '<span class=\"selection\"></span>' +\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n      '</span>'\n    );\n\n    $container.attr('dir', this.options.get('dir'));\n\n    this.$container = $container;\n\n    this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n    $container.data('element', this.$element);\n\n    return $container;\n  };\n\n  return Select2;\n});\n\nS2.define('select2/compat/utils',[\n  'jquery'\n], function ($) {\n  function syncCssClasses ($dest, $src, adapter) {\n    var classes, replacements = [], adapted;\n\n    classes = $.trim($dest.attr('class'));\n\n    if (classes) {\n      classes = '' + classes; // for IE which returns object\n\n      $(classes.split(/\\s+/)).each(function () {\n        // Save all Select2 classes\n        if (this.indexOf('select2-') === 0) {\n          replacements.push(this);\n        }\n      });\n    }\n\n    classes = $.trim($src.attr('class'));\n\n    if (classes) {\n      classes = '' + classes; // for IE which returns object\n\n      $(classes.split(/\\s+/)).each(function () {\n        // Only adapt non-Select2 classes\n        if (this.indexOf('select2-') !== 0) {\n          adapted = adapter(this);\n\n          if (adapted != null) {\n            replacements.push(adapted);\n          }\n        }\n      });\n    }\n\n    $dest.attr('class', replacements.join(' '));\n  }\n\n  return {\n    syncCssClasses: syncCssClasses\n  };\n});\n\nS2.define('select2/compat/containerCss',[\n  'jquery',\n  './utils'\n], function ($, CompatUtils) {\n  // No-op CSS adapter that discards all classes by default\n  function _containerAdapter (clazz) {\n    return null;\n  }\n\n  function ContainerCSS () { }\n\n  ContainerCSS.prototype.render = function (decorated) {\n    var $container = decorated.call(this);\n\n    var containerCssClass = this.options.get('containerCssClass') || '';\n\n    if ($.isFunction(containerCssClass)) {\n      containerCssClass = containerCssClass(this.$element);\n    }\n\n    var containerCssAdapter = this.options.get('adaptContainerCssClass');\n    containerCssAdapter = containerCssAdapter || _containerAdapter;\n\n    if (containerCssClass.indexOf(':all:') !== -1) {\n      containerCssClass = containerCssClass.replace(':all:', '');\n\n      var _cssAdapter = containerCssAdapter;\n\n      containerCssAdapter = function (clazz) {\n        var adapted = _cssAdapter(clazz);\n\n        if (adapted != null) {\n          // Append the old one along with the adapted one\n          return adapted + ' ' + clazz;\n        }\n\n        return clazz;\n      };\n    }\n\n    var containerCss = this.options.get('containerCss') || {};\n\n    if ($.isFunction(containerCss)) {\n      containerCss = containerCss(this.$element);\n    }\n\n    CompatUtils.syncCssClasses($container, this.$element, containerCssAdapter);\n\n    $container.css(containerCss);\n    $container.addClass(containerCssClass);\n\n    return $container;\n  };\n\n  return ContainerCSS;\n});\n\nS2.define('select2/compat/dropdownCss',[\n  'jquery',\n  './utils'\n], function ($, CompatUtils) {\n  // No-op CSS adapter that discards all classes by default\n  function _dropdownAdapter (clazz) {\n    return null;\n  }\n\n  function DropdownCSS () { }\n\n  DropdownCSS.prototype.render = function (decorated) {\n    var $dropdown = decorated.call(this);\n\n    var dropdownCssClass = this.options.get('dropdownCssClass') || '';\n\n    if ($.isFunction(dropdownCssClass)) {\n      dropdownCssClass = dropdownCssClass(this.$element);\n    }\n\n    var dropdownCssAdapter = this.options.get('adaptDropdownCssClass');\n    dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter;\n\n    if (dropdownCssClass.indexOf(':all:') !== -1) {\n      dropdownCssClass = dropdownCssClass.replace(':all:', '');\n\n      var _cssAdapter = dropdownCssAdapter;\n\n      dropdownCssAdapter = function (clazz) {\n        var adapted = _cssAdapter(clazz);\n\n        if (adapted != null) {\n          // Append the old one along with the adapted one\n          return adapted + ' ' + clazz;\n        }\n\n        return clazz;\n      };\n    }\n\n    var dropdownCss = this.options.get('dropdownCss') || {};\n\n    if ($.isFunction(dropdownCss)) {\n      dropdownCss = dropdownCss(this.$element);\n    }\n\n    CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter);\n\n    $dropdown.css(dropdownCss);\n    $dropdown.addClass(dropdownCssClass);\n\n    return $dropdown;\n  };\n\n  return DropdownCSS;\n});\n\nS2.define('select2/compat/initSelection',[\n  'jquery'\n], function ($) {\n  function InitSelection (decorated, $element, options) {\n    if (options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `initSelection` option has been deprecated in favor' +\n        ' of a custom data adapter that overrides the `current` method. ' +\n        'This method is now called multiple times instead of a single ' +\n        'time when the instance is initialized. Support will be removed ' +\n        'for the `initSelection` option in future versions of Select2'\n      );\n    }\n\n    this.initSelection = options.get('initSelection');\n    this._isInitialized = false;\n\n    decorated.call(this, $element, options);\n  }\n\n  InitSelection.prototype.current = function (decorated, callback) {\n    var self = this;\n\n    if (this._isInitialized) {\n      decorated.call(this, callback);\n\n      return;\n    }\n\n    this.initSelection.call(null, this.$element, function (data) {\n      self._isInitialized = true;\n\n      if (!$.isArray(data)) {\n        data = [data];\n      }\n\n      callback(data);\n    });\n  };\n\n  return InitSelection;\n});\n\nS2.define('select2/compat/inputData',[\n  'jquery'\n], function ($) {\n  function InputData (decorated, $element, options) {\n    this._currentData = [];\n    this._valueSeparator = options.get('valueSeparator') || ',';\n\n    if ($element.prop('type') === 'hidden') {\n      if (options.get('debug') && console && console.warn) {\n        console.warn(\n          'Select2: Using a hidden input with Select2 is no longer ' +\n          'supported and may stop working in the future. It is recommended ' +\n          'to use a `<select>` element instead.'\n        );\n      }\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  InputData.prototype.current = function (_, callback) {\n    function getSelected (data, selectedIds) {\n      var selected = [];\n\n      if (data.selected || $.inArray(data.id, selectedIds) !== -1) {\n        data.selected = true;\n        selected.push(data);\n      } else {\n        data.selected = false;\n      }\n\n      if (data.children) {\n        selected.push.apply(selected, getSelected(data.children, selectedIds));\n      }\n\n      return selected;\n    }\n\n    var selected = [];\n\n    for (var d = 0; d < this._currentData.length; d++) {\n      var data = this._currentData[d];\n\n      selected.push.apply(\n        selected,\n        getSelected(\n          data,\n          this.$element.val().split(\n            this._valueSeparator\n          )\n        )\n      );\n    }\n\n    callback(selected);\n  };\n\n  InputData.prototype.select = function (_, data) {\n    if (!this.options.get('multiple')) {\n      this.current(function (allData) {\n        $.map(allData, function (data) {\n          data.selected = false;\n        });\n      });\n\n      this.$element.val(data.id);\n      this.$element.trigger('change');\n    } else {\n      var value = this.$element.val();\n      value += this._valueSeparator + data.id;\n\n      this.$element.val(value);\n      this.$element.trigger('change');\n    }\n  };\n\n  InputData.prototype.unselect = function (_, data) {\n    var self = this;\n\n    data.selected = false;\n\n    this.current(function (allData) {\n      var values = [];\n\n      for (var d = 0; d < allData.length; d++) {\n        var item = allData[d];\n\n        if (data.id == item.id) {\n          continue;\n        }\n\n        values.push(item.id);\n      }\n\n      self.$element.val(values.join(self._valueSeparator));\n      self.$element.trigger('change');\n    });\n  };\n\n  InputData.prototype.query = function (_, params, callback) {\n    var results = [];\n\n    for (var d = 0; d < this._currentData.length; d++) {\n      var data = this._currentData[d];\n\n      var matches = this.matches(params, data);\n\n      if (matches !== null) {\n        results.push(matches);\n      }\n    }\n\n    callback({\n      results: results\n    });\n  };\n\n  InputData.prototype.addOptions = function (_, $options) {\n    var options = $.map($options, function ($option) {\n      return $.data($option[0], 'data');\n    });\n\n    this._currentData.push.apply(this._currentData, options);\n  };\n\n  return InputData;\n});\n\nS2.define('select2/compat/matcher',[\n  'jquery'\n], function ($) {\n  function oldMatcher (matcher) {\n    function wrappedMatcher (params, data) {\n      var match = $.extend(true, {}, data);\n\n      if (params.term == null || $.trim(params.term) === '') {\n        return match;\n      }\n\n      if (data.children) {\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          // Check if the child object matches\n          // The old matcher returned a boolean true or false\n          var doesMatch = matcher(params.term, child.text, child);\n\n          // If the child didn't match, pop it off\n          if (!doesMatch) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        if (match.children.length > 0) {\n          return match;\n        }\n      }\n\n      if (matcher(params.term, data.text, data)) {\n        return match;\n      }\n\n      return null;\n    }\n\n    return wrappedMatcher;\n  }\n\n  return oldMatcher;\n});\n\nS2.define('select2/compat/query',[\n\n], function () {\n  function Query (decorated, $element, options) {\n    if (options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `query` option has been deprecated in favor of a ' +\n        'custom data adapter that overrides the `query` method. Support ' +\n        'will be removed for the `query` option in future versions of ' +\n        'Select2.'\n      );\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Query.prototype.query = function (_, params, callback) {\n    params.callback = callback;\n\n    var query = this.options.get('query');\n\n    query.call(null, params);\n  };\n\n  return Query;\n});\n\nS2.define('select2/dropdown/attachContainer',[\n\n], function () {\n  function AttachContainer (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  AttachContainer.prototype.position =\n    function (decorated, $dropdown, $container) {\n    var $dropdownContainer = $container.find('.dropdown-wrapper');\n    $dropdownContainer.append($dropdown);\n\n    $dropdown.addClass('select2-dropdown--below');\n    $container.addClass('select2-container--below');\n  };\n\n  return AttachContainer;\n});\n\nS2.define('select2/dropdown/stopPropagation',[\n\n], function () {\n  function StopPropagation () { }\n\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    var stoppedEvents = [\n    'blur',\n    'change',\n    'click',\n    'dblclick',\n    'focus',\n    'focusin',\n    'focusout',\n    'input',\n    'keydown',\n    'keyup',\n    'keypress',\n    'mousedown',\n    'mouseenter',\n    'mouseleave',\n    'mousemove',\n    'mouseover',\n    'mouseup',\n    'search',\n    'touchend',\n    'touchstart'\n    ];\n\n    this.$dropdown.on(stoppedEvents.join(' '), function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  return StopPropagation;\n});\n\nS2.define('select2/selection/stopPropagation',[\n\n], function () {\n  function StopPropagation () { }\n\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    var stoppedEvents = [\n      'blur',\n      'change',\n      'click',\n      'dblclick',\n      'focus',\n      'focusin',\n      'focusout',\n      'input',\n      'keydown',\n      'keyup',\n      'keypress',\n      'mousedown',\n      'mouseenter',\n      'mouseleave',\n      'mousemove',\n      'mouseover',\n      'mouseup',\n      'search',\n      'touchend',\n      'touchstart'\n    ];\n\n    this.$selection.on(stoppedEvents.join(' '), function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  return StopPropagation;\n});\n\n/*!\n * jQuery Mousewheel 3.1.13\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n */\n\n(function (factory) {\n    if ( typeof S2.define === 'function' && S2.define.amd ) {\n        // AMD. Register as an anonymous module.\n        S2.define('jquery-mousewheel',['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS style for Browserify\n        module.exports = factory;\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n\n    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\n        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\n                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\n        slice  = Array.prototype.slice,\n        nullLowestDeltaTimeout, lowestDelta;\n\n    if ( $.event.fixHooks ) {\n        for ( var i = toFix.length; i; ) {\n            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\n        }\n    }\n\n    var special = $.event.special.mousewheel = {\n        version: '3.1.12',\n\n        setup: function() {\n            if ( this.addEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.addEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = handler;\n            }\n            // Store the line height and page height for this particular element\n            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\n            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\n        },\n\n        teardown: function() {\n            if ( this.removeEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.removeEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = null;\n            }\n            // Clean up the data we added to the element\n            $.removeData(this, 'mousewheel-line-height');\n            $.removeData(this, 'mousewheel-page-height');\n        },\n\n        getLineHeight: function(elem) {\n            var $elem = $(elem),\n                $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\n            if (!$parent.length) {\n                $parent = $('body');\n            }\n            return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\n        },\n\n        getPageHeight: function(elem) {\n            return $(elem).height();\n        },\n\n        settings: {\n            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n            normalizeOffset: true  // calls getBoundingClientRect for each event\n        }\n    };\n\n    $.fn.extend({\n        mousewheel: function(fn) {\n            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\n        },\n\n        unmousewheel: function(fn) {\n            return this.unbind('mousewheel', fn);\n        }\n    });\n\n\n    function handler(event) {\n        var orgEvent   = event || window.event,\n            args       = slice.call(arguments, 1),\n            delta      = 0,\n            deltaX     = 0,\n            deltaY     = 0,\n            absDelta   = 0,\n            offsetX    = 0,\n            offsetY    = 0;\n        event = $.event.fix(orgEvent);\n        event.type = 'mousewheel';\n\n        // Old school scrollwheel delta\n        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }\n        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }\n        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }\n        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\n\n        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n            deltaX = deltaY * -1;\n            deltaY = 0;\n        }\n\n        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n        delta = deltaY === 0 ? deltaX : deltaY;\n\n        // New school wheel delta (wheel event)\n        if ( 'deltaY' in orgEvent ) {\n            deltaY = orgEvent.deltaY * -1;\n            delta  = deltaY;\n        }\n        if ( 'deltaX' in orgEvent ) {\n            deltaX = orgEvent.deltaX;\n            if ( deltaY === 0 ) { delta  = deltaX * -1; }\n        }\n\n        // No change actually happened, no reason to go any further\n        if ( deltaY === 0 && deltaX === 0 ) { return; }\n\n        // Need to convert lines and pages to pixels if we aren't already in pixels\n        // There are three delta modes:\n        //   * deltaMode 0 is by pixels, nothing to do\n        //   * deltaMode 1 is by lines\n        //   * deltaMode 2 is by pages\n        if ( orgEvent.deltaMode === 1 ) {\n            var lineHeight = $.data(this, 'mousewheel-line-height');\n            delta  *= lineHeight;\n            deltaY *= lineHeight;\n            deltaX *= lineHeight;\n        } else if ( orgEvent.deltaMode === 2 ) {\n            var pageHeight = $.data(this, 'mousewheel-page-height');\n            delta  *= pageHeight;\n            deltaY *= pageHeight;\n            deltaX *= pageHeight;\n        }\n\n        // Store lowest absolute delta to normalize the delta values\n        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\n\n        if ( !lowestDelta || absDelta < lowestDelta ) {\n            lowestDelta = absDelta;\n\n            // Adjust older deltas if necessary\n            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n                lowestDelta /= 40;\n            }\n        }\n\n        // Adjust older deltas if necessary\n        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n            // Divide all the things by 40!\n            delta  /= 40;\n            deltaX /= 40;\n            deltaY /= 40;\n        }\n\n        // Get a whole, normalized value for the deltas\n        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);\n        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\n        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\n\n        // Normalise offsetX and offsetY properties\n        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\n            var boundingRect = this.getBoundingClientRect();\n            offsetX = event.clientX - boundingRect.left;\n            offsetY = event.clientY - boundingRect.top;\n        }\n\n        // Add information to the event object\n        event.deltaX = deltaX;\n        event.deltaY = deltaY;\n        event.deltaFactor = lowestDelta;\n        event.offsetX = offsetX;\n        event.offsetY = offsetY;\n        // Go ahead and set deltaMode to 0 since we converted to pixels\n        // Although this is a little odd since we overwrite the deltaX/Y\n        // properties with normalized deltas.\n        event.deltaMode = 0;\n\n        // Add event and delta to the front of the arguments\n        args.unshift(event, delta, deltaX, deltaY);\n\n        // Clearout lowestDelta after sometime to better\n        // handle multiple device types that give different\n        // a different lowestDelta\n        // Ex: trackpad = 3 and mouse wheel = 120\n        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\n        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\n\n        return ($.event.dispatch || $.event.handle).apply(this, args);\n    }\n\n    function nullLowestDelta() {\n        lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas(orgEvent, absDelta) {\n        // If this is an older event and the delta is divisable by 120,\n        // then we are assuming that the browser is treating this as an\n        // older mouse wheel event and that we should divide the deltas\n        // by 40 to try and get a more usable deltaFactor.\n        // Side note, this actually impacts the reported scroll distance\n        // in older browsers and can cause scrolling to be slower than native.\n        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\n    }\n\n}));\n\nS2.define('jquery.select2',[\n  'jquery',\n  'jquery-mousewheel',\n\n  './select2/core',\n  './select2/defaults'\n], function ($, _, Select2, Defaults) {\n  if ($.fn.select2 == null) {\n    // All methods that should return the element\n    var thisMethods = ['open', 'close', 'destroy'];\n\n    $.fn.select2 = function (options) {\n      options = options || {};\n\n      if (typeof options === 'object') {\n        this.each(function () {\n          var instanceOptions = $.extend(true, {}, options);\n\n          var instance = new Select2($(this), instanceOptions);\n        });\n\n        return this;\n      } else if (typeof options === 'string') {\n        var ret;\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n          var instance = $(this).data('select2');\n\n          if (instance == null && window.console && console.error) {\n            console.error(\n              'The select2(\\'' + options + '\\') method was called on an ' +\n              'element that is not using Select2.'\n            );\n          }\n\n          ret = instance[options].apply(instance, args);\n        });\n\n        // Check if we should be returning `this`\n        if ($.inArray(options, thisMethods) > -1) {\n          return this;\n        }\n\n        return ret;\n      } else {\n        throw new Error('Invalid arguments for Select2: ' + options);\n      }\n    };\n  }\n\n  if ($.fn.select2.defaults == null) {\n    $.fn.select2.defaults = Defaults;\n  }\n\n  return Select2;\n});\n\n  // Return the AMD loader configuration so it can be used outside of this file\n  return {\n    define: S2.define,\n    require: S2.require\n  };\n}());\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/select2/select2.js",
    "content": "/*!\n * Select2 4.0.3\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof exports === 'object') {\n    // Node/CommonJS\n    factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n}(function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 =\n(function () {\n  // Restore the Select2 AMD loader so it can be used\n  // Needed mostly in the language files, where the loader is not inserted\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n    var S2 = jQuery.fn.select2.amd;\n  }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/almond for details\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*jslint sloppy: true */\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n    var main, req, makeMap, handlers,\n        defined = {},\n        waiting = {},\n        config = {},\n        defining = {},\n        hasOwn = Object.prototype.hasOwnProperty,\n        aps = [].slice,\n        jsSuffixRegExp = /\\.js$/;\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    /**\n     * Given a relative module name, like ./something, normalize it to\n     * a real name that can be mapped to a path.\n     * @param {String} name the relative name\n     * @param {String} baseName a real name that the name arg is relative\n     * to.\n     * @returns {String} normalized name\n     */\n    function normalize(name, baseName) {\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n            foundI, foundStarMap, starI, i, j, part,\n            baseParts = baseName && baseName.split(\"/\"),\n            map = config.map,\n            starMap = (map && map['*']) || {};\n\n        //Adjust any relative paths.\n        if (name && name.charAt(0) === \".\") {\n            //If have a base name, try to normalize against it,\n            //otherwise, assume it is a top-level require that will\n            //be relative to baseUrl in the end.\n            if (baseName) {\n                name = name.split('/');\n                lastIndex = name.length - 1;\n\n                // Node .js allowance:\n                if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                    name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n                }\n\n                //Lop off the last part of baseParts, so that . matches the\n                //\"directory\" and not name of the baseName's module. For instance,\n                //baseName of \"one/two/three\", maps to \"one/two/three.js\", but we\n                //want the directory, \"one/two\" for this normalization.\n                name = baseParts.slice(0, baseParts.length - 1).concat(name);\n\n                //start trimDots\n                for (i = 0; i < name.length; i += 1) {\n                    part = name[i];\n                    if (part === \".\") {\n                        name.splice(i, 1);\n                        i -= 1;\n                    } else if (part === \"..\") {\n                        if (i === 1 && (name[2] === '..' || name[0] === '..')) {\n                            //End of the line. Keep at least one non-dot\n                            //path segment at the front so it can be mapped\n                            //correctly to disk. Otherwise, there is likely\n                            //no path mapping for a path starting with '..'.\n                            //This can still fail, but catches the most reasonable\n                            //uses of ..\n                            break;\n                        } else if (i > 0) {\n                            name.splice(i - 1, 2);\n                            i -= 2;\n                        }\n                    }\n                }\n                //end trimDots\n\n                name = name.join(\"/\");\n            } else if (name.indexOf('./') === 0) {\n                // No baseName, so this is ID is resolved relative\n                // to baseUrl, pull off the leading dot.\n                name = name.substring(2);\n            }\n        }\n\n        //Apply map config if available.\n        if ((baseParts || starMap) && map) {\n            nameParts = name.split('/');\n\n            for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                    //Find the longest baseName segment match in the config.\n                    //So, do joins on the biggest to smallest lengths of baseParts.\n                    for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join('/')];\n\n                        //baseName segment has  config, find if it has one for\n                        //this name.\n                        if (mapValue) {\n                            mapValue = mapValue[nameSegment];\n                            if (mapValue) {\n                                //Match, update name to the new value.\n                                foundMap = mapValue;\n                                foundI = i;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (foundMap) {\n                    break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                    foundStarMap = starMap[nameSegment];\n                    starI = i;\n                }\n            }\n\n            if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n            }\n\n            if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n            }\n        }\n\n        return name;\n    }\n\n    function makeRequire(relName, forceSync) {\n        return function () {\n            //A version of a require function that passes a moduleName\n            //value for items that may need to\n            //look up paths relative to the moduleName\n            var args = aps.call(arguments, 0);\n\n            //If first arg is not require('string'), and there is only\n            //one arg, it is the array form without a callback. Insert\n            //a null so that the following concat is correct.\n            if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n            }\n            return req.apply(undef, args.concat([relName, forceSync]));\n        };\n    }\n\n    function makeNormalize(relName) {\n        return function (name) {\n            return normalize(name, relName);\n        };\n    }\n\n    function makeLoad(depName) {\n        return function (value) {\n            defined[depName] = value;\n        };\n    }\n\n    function callDep(name) {\n        if (hasProp(waiting, name)) {\n            var args = waiting[name];\n            delete waiting[name];\n            defining[name] = true;\n            main.apply(undef, args);\n        }\n\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\n            throw new Error('No ' + name);\n        }\n        return defined[name];\n    }\n\n    //Turns a plugin!resource to [plugin, resource]\n    //with the plugin being undefined if the name\n    //did not have a plugin prefix.\n    function splitPrefix(name) {\n        var prefix,\n            index = name ? name.indexOf('!') : -1;\n        if (index > -1) {\n            prefix = name.substring(0, index);\n            name = name.substring(index + 1, name.length);\n        }\n        return [prefix, name];\n    }\n\n    /**\n     * Makes a name map, normalizing the name, and using a plugin\n     * for normalization if necessary. Grabs a ref to plugin\n     * too, as an optimization.\n     */\n    makeMap = function (name, relName) {\n        var plugin,\n            parts = splitPrefix(name),\n            prefix = parts[0];\n\n        name = parts[1];\n\n        if (prefix) {\n            prefix = normalize(prefix, relName);\n            plugin = callDep(prefix);\n        }\n\n        //Normalize according\n        if (prefix) {\n            if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relName));\n            } else {\n                name = normalize(name, relName);\n            }\n        } else {\n            name = normalize(name, relName);\n            parts = splitPrefix(name);\n            prefix = parts[0];\n            name = parts[1];\n            if (prefix) {\n                plugin = callDep(prefix);\n            }\n        }\n\n        //Using ridiculous property names for space reasons\n        return {\n            f: prefix ? prefix + '!' + name : name, //fullName\n            n: name,\n            pr: prefix,\n            p: plugin\n        };\n    };\n\n    function makeConfig(name) {\n        return function () {\n            return (config && config.config && config.config[name]) || {};\n        };\n    }\n\n    handlers = {\n        require: function (name) {\n            return makeRequire(name);\n        },\n        exports: function (name) {\n            var e = defined[name];\n            if (typeof e !== 'undefined') {\n                return e;\n            } else {\n                return (defined[name] = {});\n            }\n        },\n        module: function (name) {\n            return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n            };\n        }\n    };\n\n    main = function (name, deps, callback, relName) {\n        var cjsModule, depName, ret, map, i,\n            args = [],\n            callbackType = typeof callback,\n            usingExports;\n\n        //Use name if no relName\n        relName = relName || name;\n\n        //Call the callback to define the module, if necessary.\n        if (callbackType === 'undefined' || callbackType === 'function') {\n            //Pull out the defined dependencies and pass the ordered\n            //values to the callback.\n            //Default to [require, exports, module] if no deps\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n            for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relName);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                    args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                    //CommonJS module spec 1.1\n                    args[i] = handlers.exports(name);\n                    usingExports = true;\n                } else if (depName === \"module\") {\n                    //CommonJS module spec 1.1\n                    cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) ||\n                           hasProp(waiting, depName) ||\n                           hasProp(defining, depName)) {\n                    args[i] = callDep(depName);\n                } else if (map.p) {\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                    args[i] = defined[depName];\n                } else {\n                    throw new Error(name + ' missing ' + depName);\n                }\n            }\n\n            ret = callback ? callback.apply(defined[name], args) : undefined;\n\n            if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef &&\n                        cjsModule.exports !== defined[name]) {\n                    defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                    //Use the return value from the function.\n                    defined[name] = ret;\n                }\n            }\n        } else if (name) {\n            //May just be an object definition for the module. Only\n            //worry about defining if have a module name.\n            defined[name] = callback;\n        }\n    };\n\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n        if (typeof deps === \"string\") {\n            if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n            }\n            //Just return the module wanted. In this scenario, the\n            //deps arg is the module name, and second arg (if passed)\n            //is just the relName.\n            //Normalize module name, if it contains . or ..\n            return callDep(makeMap(deps, callback).f);\n        } else if (!deps.splice) {\n            //deps is a config object, not an array.\n            config = deps;\n            if (config.deps) {\n                req(config.deps, config.callback);\n            }\n            if (!callback) {\n                return;\n            }\n\n            if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n            } else {\n                deps = undef;\n            }\n        }\n\n        //Support require(['a'])\n        callback = callback || function () {};\n\n        //If relName is a function, it is an errback handler,\n        //so remove it.\n        if (typeof relName === 'function') {\n            relName = forceSync;\n            forceSync = alt;\n        }\n\n        //Simulate async callback;\n        if (forceSync) {\n            main(undef, deps, callback, relName);\n        } else {\n            //Using a non-zero value because of concern for what old browsers\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n            //If want a value immediately, use require('id') instead -- something\n            //that works in almond on the global level, but not guaranteed and\n            //unlikely to work in other AMD implementations.\n            setTimeout(function () {\n                main(undef, deps, callback, relName);\n            }, 4);\n        }\n\n        return req;\n    };\n\n    /**\n     * Just drops the config on the floor, but returns req in case\n     * the config return value is used.\n     */\n    req.config = function (cfg) {\n        return req(cfg);\n    };\n\n    /**\n     * Expose module registry for debugging and tooling\n     */\n    requirejs._defined = defined;\n\n    define = function (name, deps, callback) {\n        if (typeof name !== 'string') {\n            throw new Error('See almond README: incorrect module build, no module name');\n        }\n\n        //This module may not have dependencies\n        if (!deps.splice) {\n            //deps is not an array, so probably means\n            //an object literal or factory function for\n            //the value. Adjust args.\n            callback = deps;\n            deps = [];\n        }\n\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n            waiting[name] = [name, deps, callback];\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n  var _$ = jQuery || $;\n\n  if (_$ == null && console && console.error) {\n    console.error(\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n      'found. Make sure that you are including jQuery before Select2 on your ' +\n      'web page.'\n    );\n  }\n\n  return _$;\n});\n\nS2.define('select2/utils',[\n  'jquery'\n], function ($) {\n  var Utils = {};\n\n  Utils.Extend = function (ChildClass, SuperClass) {\n    var __hasProp = {}.hasOwnProperty;\n\n    function BaseConstructor () {\n      this.constructor = ChildClass;\n    }\n\n    for (var key in SuperClass) {\n      if (__hasProp.call(SuperClass, key)) {\n        ChildClass[key] = SuperClass[key];\n      }\n    }\n\n    BaseConstructor.prototype = SuperClass.prototype;\n    ChildClass.prototype = new BaseConstructor();\n    ChildClass.__super__ = SuperClass.prototype;\n\n    return ChildClass;\n  };\n\n  function getMethods (theClass) {\n    var proto = theClass.prototype;\n\n    var methods = [];\n\n    for (var methodName in proto) {\n      var m = proto[methodName];\n\n      if (typeof m !== 'function') {\n        continue;\n      }\n\n      if (methodName === 'constructor') {\n        continue;\n      }\n\n      methods.push(methodName);\n    }\n\n    return methods;\n  }\n\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\n    var decoratedMethods = getMethods(DecoratorClass);\n    var superMethods = getMethods(SuperClass);\n\n    function DecoratedClass () {\n      var unshift = Array.prototype.unshift;\n\n      var argCount = DecoratorClass.prototype.constructor.length;\n\n      var calledConstructor = SuperClass.prototype.constructor;\n\n      if (argCount > 0) {\n        unshift.call(arguments, SuperClass.prototype.constructor);\n\n        calledConstructor = DecoratorClass.prototype.constructor;\n      }\n\n      calledConstructor.apply(this, arguments);\n    }\n\n    DecoratorClass.displayName = SuperClass.displayName;\n\n    function ctr () {\n      this.constructor = DecoratedClass;\n    }\n\n    DecoratedClass.prototype = new ctr();\n\n    for (var m = 0; m < superMethods.length; m++) {\n        var superMethod = superMethods[m];\n\n        DecoratedClass.prototype[superMethod] =\n          SuperClass.prototype[superMethod];\n    }\n\n    var calledMethod = function (methodName) {\n      // Stub out the original method if it's not decorating an actual method\n      var originalMethod = function () {};\n\n      if (methodName in DecoratedClass.prototype) {\n        originalMethod = DecoratedClass.prototype[methodName];\n      }\n\n      var decoratedMethod = DecoratorClass.prototype[methodName];\n\n      return function () {\n        var unshift = Array.prototype.unshift;\n\n        unshift.call(arguments, originalMethod);\n\n        return decoratedMethod.apply(this, arguments);\n      };\n    };\n\n    for (var d = 0; d < decoratedMethods.length; d++) {\n      var decoratedMethod = decoratedMethods[d];\n\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n    }\n\n    return DecoratedClass;\n  };\n\n  var Observable = function () {\n    this.listeners = {};\n  };\n\n  Observable.prototype.on = function (event, callback) {\n    this.listeners = this.listeners || {};\n\n    if (event in this.listeners) {\n      this.listeners[event].push(callback);\n    } else {\n      this.listeners[event] = [callback];\n    }\n  };\n\n  Observable.prototype.trigger = function (event) {\n    var slice = Array.prototype.slice;\n    var params = slice.call(arguments, 1);\n\n    this.listeners = this.listeners || {};\n\n    // Params should always come in as an array\n    if (params == null) {\n      params = [];\n    }\n\n    // If there are no arguments to the event, use a temporary object\n    if (params.length === 0) {\n      params.push({});\n    }\n\n    // Set the `_type` of the first object to the event\n    params[0]._type = event;\n\n    if (event in this.listeners) {\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\n    }\n\n    if ('*' in this.listeners) {\n      this.invoke(this.listeners['*'], arguments);\n    }\n  };\n\n  Observable.prototype.invoke = function (listeners, params) {\n    for (var i = 0, len = listeners.length; i < len; i++) {\n      listeners[i].apply(this, params);\n    }\n  };\n\n  Utils.Observable = Observable;\n\n  Utils.generateChars = function (length) {\n    var chars = '';\n\n    for (var i = 0; i < length; i++) {\n      var randomChar = Math.floor(Math.random() * 36);\n      chars += randomChar.toString(36);\n    }\n\n    return chars;\n  };\n\n  Utils.bind = function (func, context) {\n    return function () {\n      func.apply(context, arguments);\n    };\n  };\n\n  Utils._convertData = function (data) {\n    for (var originalKey in data) {\n      var keys = originalKey.split('-');\n\n      var dataLevel = data;\n\n      if (keys.length === 1) {\n        continue;\n      }\n\n      for (var k = 0; k < keys.length; k++) {\n        var key = keys[k];\n\n        // Lowercase the first letter\n        // By default, dash-separated becomes camelCase\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n        if (!(key in dataLevel)) {\n          dataLevel[key] = {};\n        }\n\n        if (k == keys.length - 1) {\n          dataLevel[key] = data[originalKey];\n        }\n\n        dataLevel = dataLevel[key];\n      }\n\n      delete data[originalKey];\n    }\n\n    return data;\n  };\n\n  Utils.hasScroll = function (index, el) {\n    // Adapted from the function created by @ShadowScripter\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\n    // The original code can be found at\n    // http://codereview.stackexchange.com/q/13338\n    // and was designed to be used with the Sizzle selector engine.\n\n    var $el = $(el);\n    var overflowX = el.style.overflowX;\n    var overflowY = el.style.overflowY;\n\n    //Check both x and y declarations\n    if (overflowX === overflowY &&\n        (overflowY === 'hidden' || overflowY === 'visible')) {\n      return false;\n    }\n\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\n      return true;\n    }\n\n    return ($el.innerHeight() < el.scrollHeight ||\n      $el.innerWidth() < el.scrollWidth);\n  };\n\n  Utils.escapeMarkup = function (markup) {\n    var replaceMap = {\n      '\\\\': '&#92;',\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '/': '&#47;'\n    };\n\n    // Do not try to escape the markup if it's not a string\n    if (typeof markup !== 'string') {\n      return markup;\n    }\n\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n      return replaceMap[match];\n    });\n  };\n\n  // Append an array of jQuery nodes to a given element.\n  Utils.appendMany = function ($element, $nodes) {\n    // jQuery 1.7.x does not support $.fn.append() with an array\n    // Fall back to a jQuery object collection using $.fn.add()\n    if ($.fn.jquery.substr(0, 3) === '1.7') {\n      var $jqNodes = $();\n\n      $.map($nodes, function (node) {\n        $jqNodes = $jqNodes.add(node);\n      });\n\n      $nodes = $jqNodes;\n    }\n\n    $element.append($nodes);\n  };\n\n  return Utils;\n});\n\nS2.define('select2/results',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Results ($element, options, dataAdapter) {\n    this.$element = $element;\n    this.data = dataAdapter;\n    this.options = options;\n\n    Results.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Results, Utils.Observable);\n\n  Results.prototype.render = function () {\n    var $results = $(\n      '<ul class=\"select2-results__options\" role=\"tree\"></ul>'\n    );\n\n    if (this.options.get('multiple')) {\n      $results.attr('aria-multiselectable', 'true');\n    }\n\n    this.$results = $results;\n\n    return $results;\n  };\n\n  Results.prototype.clear = function () {\n    this.$results.empty();\n  };\n\n  Results.prototype.displayMessage = function (params) {\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    this.clear();\n    this.hideLoading();\n\n    var $message = $(\n      '<li role=\"treeitem\" aria-live=\"assertive\"' +\n      ' class=\"select2-results__option\"></li>'\n    );\n\n    var message = this.options.get('translations').get(params.message);\n\n    $message.append(\n      escapeMarkup(\n        message(params.args)\n      )\n    );\n\n    $message[0].className += ' select2-results__message';\n\n    this.$results.append($message);\n  };\n\n  Results.prototype.hideMessages = function () {\n    this.$results.find('.select2-results__message').remove();\n  };\n\n  Results.prototype.append = function (data) {\n    this.hideLoading();\n\n    var $options = [];\n\n    if (data.results == null || data.results.length === 0) {\n      if (this.$results.children().length === 0) {\n        this.trigger('results:message', {\n          message: 'noResults'\n        });\n      }\n\n      return;\n    }\n\n    data.results = this.sort(data.results);\n\n    for (var d = 0; d < data.results.length; d++) {\n      var item = data.results[d];\n\n      var $option = this.option(item);\n\n      $options.push($option);\n    }\n\n    this.$results.append($options);\n  };\n\n  Results.prototype.position = function ($results, $dropdown) {\n    var $resultsContainer = $dropdown.find('.select2-results');\n    $resultsContainer.append($results);\n  };\n\n  Results.prototype.sort = function (data) {\n    var sorter = this.options.get('sorter');\n\n    return sorter(data);\n  };\n\n  Results.prototype.highlightFirstItem = function () {\n    var $options = this.$results\n      .find('.select2-results__option[aria-selected]');\n\n    var $selected = $options.filter('[aria-selected=true]');\n\n    // Check if there are any selected options\n    if ($selected.length > 0) {\n      // If there are selected options, highlight the first\n      $selected.first().trigger('mouseenter');\n    } else {\n      // If there are no selected options, highlight the first option\n      // in the dropdown\n      $options.first().trigger('mouseenter');\n    }\n\n    this.ensureHighlightVisible();\n  };\n\n  Results.prototype.setClasses = function () {\n    var self = this;\n\n    this.data.current(function (selected) {\n      var selectedIds = $.map(selected, function (s) {\n        return s.id.toString();\n      });\n\n      var $options = self.$results\n        .find('.select2-results__option[aria-selected]');\n\n      $options.each(function () {\n        var $option = $(this);\n\n        var item = $.data(this, 'data');\n\n        // id needs to be converted to a string when comparing\n        var id = '' + item.id;\n\n        if ((item.element != null && item.element.selected) ||\n            (item.element == null && $.inArray(id, selectedIds) > -1)) {\n          $option.attr('aria-selected', 'true');\n        } else {\n          $option.attr('aria-selected', 'false');\n        }\n      });\n\n    });\n  };\n\n  Results.prototype.showLoading = function (params) {\n    this.hideLoading();\n\n    var loadingMore = this.options.get('translations').get('searching');\n\n    var loading = {\n      disabled: true,\n      loading: true,\n      text: loadingMore(params)\n    };\n    var $loading = this.option(loading);\n    $loading.className += ' loading-results';\n\n    this.$results.prepend($loading);\n  };\n\n  Results.prototype.hideLoading = function () {\n    this.$results.find('.loading-results').remove();\n  };\n\n  Results.prototype.option = function (data) {\n    var option = document.createElement('li');\n    option.className = 'select2-results__option';\n\n    var attrs = {\n      'role': 'treeitem',\n      'aria-selected': 'false'\n    };\n\n    if (data.disabled) {\n      delete attrs['aria-selected'];\n      attrs['aria-disabled'] = 'true';\n    }\n\n    if (data.id == null) {\n      delete attrs['aria-selected'];\n    }\n\n    if (data._resultId != null) {\n      option.id = data._resultId;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    if (data.children) {\n      attrs.role = 'group';\n      attrs['aria-label'] = data.text;\n      delete attrs['aria-selected'];\n    }\n\n    for (var attr in attrs) {\n      var val = attrs[attr];\n\n      option.setAttribute(attr, val);\n    }\n\n    if (data.children) {\n      var $option = $(option);\n\n      var label = document.createElement('strong');\n      label.className = 'select2-results__group';\n\n      var $label = $(label);\n      this.template(data, label);\n\n      var $children = [];\n\n      for (var c = 0; c < data.children.length; c++) {\n        var child = data.children[c];\n\n        var $child = this.option(child);\n\n        $children.push($child);\n      }\n\n      var $childrenContainer = $('<ul></ul>', {\n        'class': 'select2-results__options select2-results__options--nested'\n      });\n\n      $childrenContainer.append($children);\n\n      $option.append(label);\n      $option.append($childrenContainer);\n    } else {\n      this.template(data, option);\n    }\n\n    $.data(option, 'data', data);\n\n    return option;\n  };\n\n  Results.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-results';\n\n    this.$results.attr('id', id);\n\n    container.on('results:all', function (params) {\n      self.clear();\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('results:append', function (params) {\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n      }\n    });\n\n    container.on('query', function (params) {\n      self.hideMessages();\n      self.showLoading(params);\n    });\n\n    container.on('select', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n      self.highlightFirstItem();\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n      self.highlightFirstItem();\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expended=\"true\"\n      self.$results.attr('aria-expanded', 'true');\n      self.$results.attr('aria-hidden', 'false');\n\n      self.setClasses();\n      self.ensureHighlightVisible();\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expended=\"false\"\n      self.$results.attr('aria-expanded', 'false');\n      self.$results.attr('aria-hidden', 'true');\n      self.$results.removeAttr('aria-activedescendant');\n    });\n\n    container.on('results:toggle', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      $highlighted.trigger('mouseup');\n    });\n\n    container.on('results:select', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      var data = $highlighted.data('data');\n\n      if ($highlighted.attr('aria-selected') == 'true') {\n        self.trigger('close', {});\n      } else {\n        self.trigger('select', {\n          data: data\n        });\n      }\n    });\n\n    container.on('results:previous', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      // If we are already at te top, don't move further\n      if (currentIndex === 0) {\n        return;\n      }\n\n      var nextIndex = currentIndex - 1;\n\n      // If none are highlighted, highlight the first\n      if ($highlighted.length === 0) {\n        nextIndex = 0;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top;\n      var nextTop = $next.offset().top;\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextTop - currentOffset < 0) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:next', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      var nextIndex = currentIndex + 1;\n\n      // If we are at the last option, stay there\n      if (nextIndex >= $options.length) {\n        return;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextBottom > currentOffset) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      params.element.addClass('select2-results__option--highlighted');\n    });\n\n    container.on('results:message', function (params) {\n      self.displayMessage(params);\n    });\n\n    if ($.fn.mousewheel) {\n      this.$results.on('mousewheel', function (e) {\n        var top = self.$results.scrollTop();\n\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n        if (isAtTop) {\n          self.$results.scrollTop(0);\n\n          e.preventDefault();\n          e.stopPropagation();\n        } else if (isAtBottom) {\n          self.$results.scrollTop(\n            self.$results.get(0).scrollHeight - self.$results.height()\n          );\n\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    }\n\n    this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var $this = $(this);\n\n      var data = $this.data('data');\n\n      if ($this.attr('aria-selected') === 'true') {\n        if (self.options.get('multiple')) {\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        } else {\n          self.trigger('close', {});\n        }\n\n        return;\n      }\n\n      self.trigger('select', {\n        originalEvent: evt,\n        data: data\n      });\n    });\n\n    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var data = $(this).data('data');\n\n      self.getHighlightedResults()\n          .removeClass('select2-results__option--highlighted');\n\n      self.trigger('results:focus', {\n        data: data,\n        element: $(this)\n      });\n    });\n  };\n\n  Results.prototype.getHighlightedResults = function () {\n    var $highlighted = this.$results\n    .find('.select2-results__option--highlighted');\n\n    return $highlighted;\n  };\n\n  Results.prototype.destroy = function () {\n    this.$results.remove();\n  };\n\n  Results.prototype.ensureHighlightVisible = function () {\n    var $highlighted = this.getHighlightedResults();\n\n    if ($highlighted.length === 0) {\n      return;\n    }\n\n    var $options = this.$results.find('[aria-selected]');\n\n    var currentIndex = $options.index($highlighted);\n\n    var currentOffset = this.$results.offset().top;\n    var nextTop = $highlighted.offset().top;\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n    var offsetDelta = nextTop - currentOffset;\n    nextOffset -= $highlighted.outerHeight(false) * 2;\n\n    if (currentIndex <= 2) {\n      this.$results.scrollTop(0);\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n      this.$results.scrollTop(nextOffset);\n    }\n  };\n\n  Results.prototype.template = function (result, container) {\n    var template = this.options.get('templateResult');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    var content = template(result, container);\n\n    if (content == null) {\n      container.style.display = 'none';\n    } else if (typeof content === 'string') {\n      container.innerHTML = escapeMarkup(content);\n    } else {\n      $(container).append(content);\n    }\n  };\n\n  return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n  var KEYS = {\n    BACKSPACE: 8,\n    TAB: 9,\n    ENTER: 13,\n    SHIFT: 16,\n    CTRL: 17,\n    ALT: 18,\n    ESC: 27,\n    SPACE: 32,\n    PAGE_UP: 33,\n    PAGE_DOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    DELETE: 46\n  };\n\n  return KEYS;\n});\n\nS2.define('select2/selection/base',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function BaseSelection ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    BaseSelection.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseSelection, Utils.Observable);\n\n  BaseSelection.prototype.render = function () {\n    var $selection = $(\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n      '</span>'\n    );\n\n    this._tabindex = 0;\n\n    if (this.$element.data('old-tabindex') != null) {\n      this._tabindex = this.$element.data('old-tabindex');\n    } else if (this.$element.attr('tabindex') != null) {\n      this._tabindex = this.$element.attr('tabindex');\n    }\n\n    $selection.attr('title', this.$element.attr('title'));\n    $selection.attr('tabindex', this._tabindex);\n\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-container';\n    var resultsId = container.id + '-results';\n\n    this.container = container;\n\n    this.$selection.on('focus', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('blur', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      if (evt.which === KEYS.SPACE) {\n        evt.preventDefault();\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expanded=\"true\"\n      self.$selection.attr('aria-expanded', 'true');\n      self.$selection.attr('aria-owns', resultsId);\n\n      self._attachCloseHandler(container);\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expanded=\"false\"\n      self.$selection.attr('aria-expanded', 'false');\n      self.$selection.removeAttr('aria-activedescendant');\n      self.$selection.removeAttr('aria-owns');\n\n      self.$selection.focus();\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\n    });\n  };\n\n  BaseSelection.prototype._handleBlur = function (evt) {\n    var self = this;\n\n    // This needs to be delayed as the active element is the body when the tab\n    // key is pressed, possibly along with others.\n    window.setTimeout(function () {\n      // Don't trigger `blur` if the focus is still in the selection\n      if (\n        (document.activeElement == self.$selection[0]) ||\n        ($.contains(self.$selection[0], document.activeElement))\n      ) {\n        return;\n      }\n\n      self.trigger('blur', evt);\n    }, 1);\n  };\n\n  BaseSelection.prototype._attachCloseHandler = function (container) {\n    var self = this;\n\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\n      var $target = $(e.target);\n\n      var $select = $target.closest('.select2');\n\n      var $all = $('.select2.select2-container--open');\n\n      $all.each(function () {\n        var $this = $(this);\n\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = $this.data('element');\n\n        $element.select2('close');\n      });\n    });\n  };\n\n  BaseSelection.prototype._detachCloseHandler = function (container) {\n    $(document.body).off('mousedown.select2.' + container.id);\n  };\n\n  BaseSelection.prototype.position = function ($selection, $container) {\n    var $selectionContainer = $container.find('.selection');\n    $selectionContainer.append($selection);\n  };\n\n  BaseSelection.prototype.destroy = function () {\n    this._detachCloseHandler(this.container);\n  };\n\n  BaseSelection.prototype.update = function (data) {\n    throw new Error('The `update` method must be defined in child classes.');\n  };\n\n  return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n  'jquery',\n  './base',\n  '../utils',\n  '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n  function SingleSelection () {\n    SingleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(SingleSelection, BaseSelection);\n\n  SingleSelection.prototype.render = function () {\n    var $selection = SingleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--single');\n\n    $selection.html(\n      '<span class=\"select2-selection__rendered\"></span>' +\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n        '<b role=\"presentation\"></b>' +\n      '</span>'\n    );\n\n    return $selection;\n  };\n\n  SingleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    SingleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n\n    this.$selection.find('.select2-selection__rendered').attr('id', id);\n    this.$selection.attr('aria-labelledby', id);\n\n    this.$selection.on('mousedown', function (evt) {\n      // Only respond to left clicks\n      if (evt.which !== 1) {\n        return;\n      }\n\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on('focus', function (evt) {\n      // User focuses on the container\n    });\n\n    this.$selection.on('blur', function (evt) {\n      // User exits the container\n    });\n\n    container.on('focus', function (evt) {\n      if (!container.isOpen()) {\n        self.$selection.focus();\n      }\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    this.$selection.find('.select2-selection__rendered').empty();\n  };\n\n  SingleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  SingleSelection.prototype.selectionContainer = function () {\n    return $('<span></span>');\n  };\n\n  SingleSelection.prototype.update = function (data) {\n    if (data.length === 0) {\n      this.clear();\n      return;\n    }\n\n    var selection = data[0];\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    var formatted = this.display(selection, $rendered);\n\n    $rendered.empty().append(formatted);\n    $rendered.prop('title', selection.title || selection.text);\n  };\n\n  return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n  'jquery',\n  './base',\n  '../utils'\n], function ($, BaseSelection, Utils) {\n  function MultipleSelection ($element, options) {\n    MultipleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(MultipleSelection, BaseSelection);\n\n  MultipleSelection.prototype.render = function () {\n    var $selection = MultipleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--multiple');\n\n    $selection.html(\n      '<ul class=\"select2-selection__rendered\"></ul>'\n    );\n\n    return $selection;\n  };\n\n  MultipleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    MultipleSelection.__super__.bind.apply(this, arguments);\n\n    this.$selection.on('click', function (evt) {\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on(\n      'click',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.options.get('disabled')) {\n          return;\n        }\n\n        var $remove = $(this);\n        var $selection = $remove.parent();\n\n        var data = $selection.data('data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    this.$selection.find('.select2-selection__rendered').empty();\n  };\n\n  MultipleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  MultipleSelection.prototype.selectionContainer = function () {\n    var $container = $(\n      '<li class=\"select2-selection__choice\">' +\n        '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n          '&times;' +\n        '</span>' +\n      '</li>'\n    );\n\n    return $container;\n  };\n\n  MultipleSelection.prototype.update = function (data) {\n    this.clear();\n\n    if (data.length === 0) {\n      return;\n    }\n\n    var $selections = [];\n\n    for (var d = 0; d < data.length; d++) {\n      var selection = data[d];\n\n      var $selection = this.selectionContainer();\n      var formatted = this.display(selection, $selection);\n\n      $selection.append(formatted);\n      $selection.prop('title', selection.title || selection.text);\n\n      $selection.data('data', selection);\n\n      $selections.push($selection);\n    }\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n\n    Utils.appendMany($rendered, $selections);\n  };\n\n  return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n  '../utils'\n], function (Utils) {\n  function Placeholder (decorated, $element, options) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options);\n  }\n\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n    var $placeholder = this.selectionContainer();\n\n    $placeholder.html(this.display(placeholder));\n    $placeholder.addClass('select2-selection__placeholder')\n                .removeClass('select2-selection__choice');\n\n    return $placeholder;\n  };\n\n  Placeholder.prototype.update = function (decorated, data) {\n    var singlePlaceholder = (\n      data.length == 1 && data[0].id != this.placeholder.id\n    );\n    var multipleSelections = data.length > 1;\n\n    if (multipleSelections || singlePlaceholder) {\n      return decorated.call(this, data);\n    }\n\n    this.clear();\n\n    var $placeholder = this.createPlaceholder(this.placeholder);\n\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\n  };\n\n  return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n  'jquery',\n  '../keys'\n], function ($, KEYS) {\n  function AllowClear () { }\n\n  AllowClear.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    if (this.placeholder == null) {\n      if (this.options.get('debug') && window.console && console.error) {\n        console.error(\n          'Select2: The `allowClear` option should be used in combination ' +\n          'with the `placeholder` option.'\n        );\n      }\n    }\n\n    this.$selection.on('mousedown', '.select2-selection__clear',\n      function (evt) {\n        self._handleClear(evt);\n    });\n\n    container.on('keypress', function (evt) {\n      self._handleKeyboardClear(evt, container);\n    });\n  };\n\n  AllowClear.prototype._handleClear = function (_, evt) {\n    // Ignore the event if it is disabled\n    if (this.options.get('disabled')) {\n      return;\n    }\n\n    var $clear = this.$selection.find('.select2-selection__clear');\n\n    // Ignore the event if nothing has been selected\n    if ($clear.length === 0) {\n      return;\n    }\n\n    evt.stopPropagation();\n\n    var data = $clear.data('data');\n\n    for (var d = 0; d < data.length; d++) {\n      var unselectData = {\n        data: data[d]\n      };\n\n      // Trigger the `unselect` event, so people can prevent it from being\n      // cleared.\n      this.trigger('unselect', unselectData);\n\n      // If the event was prevented, don't clear it out.\n      if (unselectData.prevented) {\n        return;\n      }\n    }\n\n    this.$element.val(this.placeholder.id).trigger('change');\n\n    this.trigger('toggle', {});\n  };\n\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n    if (container.isOpen()) {\n      return;\n    }\n\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n      this._handleClear(evt);\n    }\n  };\n\n  AllowClear.prototype.update = function (decorated, data) {\n    decorated.call(this, data);\n\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n        data.length === 0) {\n      return;\n    }\n\n    var $remove = $(\n      '<span class=\"select2-selection__clear\">' +\n        '&times;' +\n      '</span>'\n    );\n    $remove.data('data', data);\n\n    this.$selection.find('.select2-selection__rendered').prepend($remove);\n  };\n\n  return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function Search (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  Search.prototype.render = function (decorated) {\n    var $search = $(\n      '<li class=\"select2-search select2-search--inline\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\"' +\n        ' spellcheck=\"false\" role=\"textbox\" aria-autocomplete=\"list\" />' +\n      '</li>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    var $rendered = decorated.call(this);\n\n    this._transferTabIndex();\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\n      self.$search.removeAttr('aria-activedescendant');\n      self.$search.trigger('focus');\n    });\n\n    container.on('enable', function () {\n      self.$search.prop('disabled', false);\n\n      self._transferTabIndex();\n    });\n\n    container.on('disable', function () {\n      self.$search.prop('disabled', true);\n    });\n\n    container.on('focus', function (evt) {\n      self.$search.trigger('focus');\n    });\n\n    container.on('results:focus', function (params) {\n      self.$search.attr('aria-activedescendant', params.id);\n    });\n\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n      evt.stopPropagation();\n\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n\n      var key = evt.which;\n\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n        var $previousChoice = self.$searchContainer\n          .prev('.select2-selection__choice');\n\n        if ($previousChoice.length > 0) {\n          var item = $previousChoice.data('data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\n      }\n    });\n\n    // Try to detect the IE version should the `documentMode` property that\n    // is stored on the document. This is only implemented in IE and is\n    // slightly cleaner than doing a user agent check.\n    // This property is not available in Edge, but Edge also doesn't have\n    // this bug.\n    var msie = document.documentMode;\n    var disableInputEvents = msie && msie <= 11;\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$selection.on(\n      'input.searchcheck',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents) {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        // Unbind the duplicated `keyup` event\n        self.$selection.off('keyup.search');\n      }\n    );\n\n    this.$selection.on(\n      'keyup.search input.search',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents && evt.type === 'input') {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        var key = evt.which;\n\n        // We can freely ignore events from modifier keys\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n          return;\n        }\n\n        // Tabbing will be handled during the `keydown` phase\n        if (key == KEYS.TAB) {\n          return;\n        }\n\n        self.handleSearch(evt);\n      }\n    );\n  };\n\n  /**\n   * This method will transfer the tabindex attribute from the rendered\n   * selection to the search box. This allows for the search box to be used as\n   * the primary focus instead of the selection container.\n   *\n   * @private\n   */\n  Search.prototype._transferTabIndex = function (decorated) {\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n    this.$selection.attr('tabindex', '-1');\n  };\n\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\n    this.$search.attr('placeholder', placeholder.text);\n  };\n\n  Search.prototype.update = function (decorated, data) {\n    var searchHadFocus = this.$search[0] == document.activeElement;\n\n    this.$search.attr('placeholder', '');\n\n    decorated.call(this, data);\n\n    this.$selection.find('.select2-selection__rendered')\n                   .append(this.$searchContainer);\n\n    this.resizeSearch();\n    if (searchHadFocus) {\n      this.$search.focus();\n    }\n  };\n\n  Search.prototype.handleSearch = function () {\n    this.resizeSearch();\n\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\n    this.trigger('unselect', {\n      data: item\n    });\n\n    this.$search.val(item.text);\n    this.handleSearch();\n  };\n\n  Search.prototype.resizeSearch = function () {\n    this.$search.css('width', '25px');\n\n    var width = '';\n\n    if (this.$search.attr('placeholder') !== '') {\n      width = this.$selection.find('.select2-selection__rendered').innerWidth();\n    } else {\n      var minimumWidth = this.$search.val().length + 1;\n\n      width = (minimumWidth * 0.75) + 'em';\n    }\n\n    this.$search.css('width', width);\n  };\n\n  return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n  'jquery'\n], function ($) {\n  function EventRelay () { }\n\n  EventRelay.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n    var relayEvents = [\n      'open', 'opening',\n      'close', 'closing',\n      'select', 'selecting',\n      'unselect', 'unselecting'\n    ];\n\n    var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting'];\n\n    decorated.call(this, container, $container);\n\n    container.on('*', function (name, params) {\n      // Ignore events that should not be relayed\n      if ($.inArray(name, relayEvents) === -1) {\n        return;\n      }\n\n      // The parameters should always be an object\n      params = params || {};\n\n      // Generate the jQuery event for the Select2 event\n      var evt = $.Event('select2:' + name, {\n        params: params\n      });\n\n      self.$element.trigger(evt);\n\n      // Only handle preventable events if it was one\n      if ($.inArray(name, preventableEvents) === -1) {\n        return;\n      }\n\n      params.prevented = evt.isDefaultPrevented();\n    });\n  };\n\n  return EventRelay;\n});\n\nS2.define('select2/translation',[\n  'jquery',\n  'require'\n], function ($, require) {\n  function Translation (dict) {\n    this.dict = dict || {};\n  }\n\n  Translation.prototype.all = function () {\n    return this.dict;\n  };\n\n  Translation.prototype.get = function (key) {\n    return this.dict[key];\n  };\n\n  Translation.prototype.extend = function (translation) {\n    this.dict = $.extend({}, translation.all(), this.dict);\n  };\n\n  // Static functions\n\n  Translation._cache = {};\n\n  Translation.loadPath = function (path) {\n    if (!(path in Translation._cache)) {\n      var translations = require(path);\n\n      Translation._cache[path] = translations;\n    }\n\n    return new Translation(Translation._cache[path]);\n  };\n\n  return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n  var diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03C9': '\\u03C9',\n    '\\u03C2': '\\u03C3'\n  };\n\n  return diacritics;\n});\n\nS2.define('select2/data/base',[\n  '../utils'\n], function (Utils) {\n  function BaseAdapter ($element, options) {\n    BaseAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseAdapter, Utils.Observable);\n\n  BaseAdapter.prototype.current = function (callback) {\n    throw new Error('The `current` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.query = function (params, callback) {\n    throw new Error('The `query` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.bind = function (container, $container) {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.destroy = function () {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.generateResultId = function (container, data) {\n    var id = container.id + '-result-';\n\n    id += Utils.generateChars(4);\n\n    if (data.id != null) {\n      id += '-' + data.id.toString();\n    } else {\n      id += '-' + Utils.generateChars(4);\n    }\n    return id;\n  };\n\n  return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n  './base',\n  '../utils',\n  'jquery'\n], function (BaseAdapter, Utils, $) {\n  function SelectAdapter ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    SelectAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(SelectAdapter, BaseAdapter);\n\n  SelectAdapter.prototype.current = function (callback) {\n    var data = [];\n    var self = this;\n\n    this.$element.find(':selected').each(function () {\n      var $option = $(this);\n\n      var option = self.item($option);\n\n      data.push(option);\n    });\n\n    callback(data);\n  };\n\n  SelectAdapter.prototype.select = function (data) {\n    var self = this;\n\n    data.selected = true;\n\n    // If data.element is a DOM node, use it instead\n    if ($(data.element).is('option')) {\n      data.element.selected = true;\n\n      this.$element.trigger('change');\n\n      return;\n    }\n\n    if (this.$element.prop('multiple')) {\n      this.current(function (currentData) {\n        var val = [];\n\n        data = [data];\n        data.push.apply(data, currentData);\n\n        for (var d = 0; d < data.length; d++) {\n          var id = data[d].id;\n\n          if ($.inArray(id, val) === -1) {\n            val.push(id);\n          }\n        }\n\n        self.$element.val(val);\n        self.$element.trigger('change');\n      });\n    } else {\n      var val = data.id;\n\n      this.$element.val(val);\n      this.$element.trigger('change');\n    }\n  };\n\n  SelectAdapter.prototype.unselect = function (data) {\n    var self = this;\n\n    if (!this.$element.prop('multiple')) {\n      return;\n    }\n\n    data.selected = false;\n\n    if ($(data.element).is('option')) {\n      data.element.selected = false;\n\n      this.$element.trigger('change');\n\n      return;\n    }\n\n    this.current(function (currentData) {\n      var val = [];\n\n      for (var d = 0; d < currentData.length; d++) {\n        var id = currentData[d].id;\n\n        if (id !== data.id && $.inArray(id, val) === -1) {\n          val.push(id);\n        }\n      }\n\n      self.$element.val(val);\n\n      self.$element.trigger('change');\n    });\n  };\n\n  SelectAdapter.prototype.bind = function (container, $container) {\n    var self = this;\n\n    this.container = container;\n\n    container.on('select', function (params) {\n      self.select(params.data);\n    });\n\n    container.on('unselect', function (params) {\n      self.unselect(params.data);\n    });\n  };\n\n  SelectAdapter.prototype.destroy = function () {\n    // Remove anything added to child elements\n    this.$element.find('*').each(function () {\n      // Remove any custom data set by Select2\n      $.removeData(this, 'data');\n    });\n  };\n\n  SelectAdapter.prototype.query = function (params, callback) {\n    var data = [];\n    var self = this;\n\n    var $options = this.$element.children();\n\n    $options.each(function () {\n      var $option = $(this);\n\n      if (!$option.is('option') && !$option.is('optgroup')) {\n        return;\n      }\n\n      var option = self.item($option);\n\n      var matches = self.matches(params, option);\n\n      if (matches !== null) {\n        data.push(matches);\n      }\n    });\n\n    callback({\n      results: data\n    });\n  };\n\n  SelectAdapter.prototype.addOptions = function ($options) {\n    Utils.appendMany(this.$element, $options);\n  };\n\n  SelectAdapter.prototype.option = function (data) {\n    var option;\n\n    if (data.children) {\n      option = document.createElement('optgroup');\n      option.label = data.text;\n    } else {\n      option = document.createElement('option');\n\n      if (option.textContent !== undefined) {\n        option.textContent = data.text;\n      } else {\n        option.innerText = data.text;\n      }\n    }\n\n    if (data.id) {\n      option.value = data.id;\n    }\n\n    if (data.disabled) {\n      option.disabled = true;\n    }\n\n    if (data.selected) {\n      option.selected = true;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    var $option = $(option);\n\n    var normalizedData = this._normalizeItem(data);\n    normalizedData.element = option;\n\n    // Override the option's data with the combined data\n    $.data(option, 'data', normalizedData);\n\n    return $option;\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = $.data($option[0], 'data');\n\n    if (data != null) {\n      return data;\n    }\n\n    if ($option.is('option')) {\n      data = {\n        id: $option.val(),\n        text: $option.text(),\n        disabled: $option.prop('disabled'),\n        selected: $option.prop('selected'),\n        title: $option.prop('title')\n      };\n    } else if ($option.is('optgroup')) {\n      data = {\n        text: $option.prop('label'),\n        children: [],\n        title: $option.prop('title')\n      };\n\n      var $children = $option.children('option');\n      var children = [];\n\n      for (var c = 0; c < $children.length; c++) {\n        var $child = $($children[c]);\n\n        var child = this.item($child);\n\n        children.push(child);\n      }\n\n      data.children = children;\n    }\n\n    data = this._normalizeItem(data);\n    data.element = $option[0];\n\n    $.data($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (!$.isPlainObject(item)) {\n      item = {\n        id: item,\n        text: item\n      };\n    }\n\n    item = $.extend({}, {\n      text: ''\n    }, item);\n\n    var defaults = {\n      selected: false,\n      disabled: false\n    };\n\n    if (item.id != null) {\n      item.id = item.id.toString();\n    }\n\n    if (item.text != null) {\n      item.text = item.text.toString();\n    }\n\n    if (item._resultId == null && item.id && this.container != null) {\n      item._resultId = this.generateResultId(this.container, item);\n    }\n\n    return $.extend({}, defaults, item);\n  };\n\n  SelectAdapter.prototype.matches = function (params, data) {\n    var matcher = this.options.get('matcher');\n\n    return matcher(params, data);\n  };\n\n  return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n  './select',\n  '../utils',\n  'jquery'\n], function (SelectAdapter, Utils, $) {\n  function ArrayAdapter ($element, options) {\n    var data = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n\n    this.addOptions(this.convertToOptions(data));\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\n\n  ArrayAdapter.prototype.select = function (data) {\n    var $option = this.$element.find('option').filter(function (i, elm) {\n      return elm.value == data.id.toString();\n    });\n\n    if ($option.length === 0) {\n      $option = this.option(data);\n\n      this.addOptions($option);\n    }\n\n    ArrayAdapter.__super__.select.call(this, data);\n  };\n\n  ArrayAdapter.prototype.convertToOptions = function (data) {\n    var self = this;\n\n    var $existing = this.$element.find('option');\n    var existingIds = $existing.map(function () {\n      return self.item($(this)).id;\n    }).get();\n\n    var $options = [];\n\n    // Filter out all items except for the one passed in the argument\n    function onlyItem (item) {\n      return function () {\n        return $(this).val() == item.id;\n      };\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      var item = this._normalizeItem(data[d]);\n\n      // Skip items which were pre-loaded, only merge the data\n      if ($.inArray(item.id, existingIds) >= 0) {\n        var $existingOption = $existing.filter(onlyItem(item));\n\n        var existingData = this.item($existingOption);\n        var newData = $.extend(true, {}, item, existingData);\n\n        var $newOption = this.option(newData);\n\n        $existingOption.replaceWith($newOption);\n\n        continue;\n      }\n\n      var $option = this.option(item);\n\n      if (item.children) {\n        var $children = this.convertToOptions(item.children);\n\n        Utils.appendMany($option, $children);\n      }\n\n      $options.push($option);\n    }\n\n    return $options;\n  };\n\n  return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n  './array',\n  '../utils',\n  'jquery'\n], function (ArrayAdapter, Utils, $) {\n  function AjaxAdapter ($element, options) {\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n    if (this.ajaxOptions.processResults != null) {\n      this.processResults = this.ajaxOptions.processResults;\n    }\n\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n  AjaxAdapter.prototype._applyDefaults = function (options) {\n    var defaults = {\n      data: function (params) {\n        return $.extend({}, params, {\n          q: params.term\n        });\n      },\n      transport: function (params, success, failure) {\n        var $request = $.ajax(params);\n\n        $request.then(success);\n        $request.fail(failure);\n\n        return $request;\n      }\n    };\n\n    return $.extend({}, defaults, options, true);\n  };\n\n  AjaxAdapter.prototype.processResults = function (results) {\n    return results;\n  };\n\n  AjaxAdapter.prototype.query = function (params, callback) {\n    var matches = [];\n    var self = this;\n\n    if (this._request != null) {\n      // JSONP requests cannot always be aborted\n      if ($.isFunction(this._request.abort)) {\n        this._request.abort();\n      }\n\n      this._request = null;\n    }\n\n    var options = $.extend({\n      type: 'GET'\n    }, this.ajaxOptions);\n\n    if (typeof options.url === 'function') {\n      options.url = options.url.call(this.$element, params);\n    }\n\n    if (typeof options.data === 'function') {\n      options.data = options.data.call(this.$element, params);\n    }\n\n    function request () {\n      var $request = options.transport(options, function (data) {\n        var results = self.processResults(data, params);\n\n        if (self.options.get('debug') && window.console && console.error) {\n          // Check to make sure that the response included a `results` key.\n          if (!results || !results.results || !$.isArray(results.results)) {\n            console.error(\n              'Select2: The AJAX results did not return an array in the ' +\n              '`results` key of the response.'\n            );\n          }\n        }\n\n        callback(results);\n      }, function () {\n        // Attempt to detect if a request was aborted\n        // Only works if the transport exposes a status property\n        if ($request.status && $request.status === '0') {\n          return;\n        }\n\n        self.trigger('results:message', {\n          message: 'errorLoading'\n        });\n      });\n\n      self._request = $request;\n    }\n\n    if (this.ajaxOptions.delay && params.term != null) {\n      if (this._queryTimeout) {\n        window.clearTimeout(this._queryTimeout);\n      }\n\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n    } else {\n      request();\n    }\n  };\n\n  return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n  'jquery'\n], function ($) {\n  function Tags (decorated, $element, options) {\n    var tags = options.get('tags');\n\n    var createTag = options.get('createTag');\n\n    if (createTag !== undefined) {\n      this.createTag = createTag;\n    }\n\n    var insertTag = options.get('insertTag');\n\n    if (insertTag !== undefined) {\n        this.insertTag = insertTag;\n    }\n\n    decorated.call(this, $element, options);\n\n    if ($.isArray(tags)) {\n      for (var t = 0; t < tags.length; t++) {\n        var tag = tags[t];\n        var item = this._normalizeItem(tag);\n\n        var $option = this.option(item);\n\n        this.$element.append($option);\n      }\n    }\n  }\n\n  Tags.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    this._removeOldTags();\n\n    if (params.term == null || params.page != null) {\n      decorated.call(this, params, callback);\n      return;\n    }\n\n    function wrapper (obj, child) {\n      var data = obj.results;\n\n      for (var i = 0; i < data.length; i++) {\n        var option = data[i];\n\n        var checkChildren = (\n          option.children != null &&\n          !wrapper({\n            results: option.children\n          }, true)\n        );\n\n        var checkText = option.text === params.term;\n\n        if (checkText || checkChildren) {\n          if (child) {\n            return false;\n          }\n\n          obj.data = data;\n          callback(obj);\n\n          return;\n        }\n      }\n\n      if (child) {\n        return true;\n      }\n\n      var tag = self.createTag(params);\n\n      if (tag != null) {\n        var $option = self.option(tag);\n        $option.attr('data-select2-tag', true);\n\n        self.addOptions([$option]);\n\n        self.insertTag(data, tag);\n      }\n\n      obj.results = data;\n\n      callback(obj);\n    }\n\n    decorated.call(this, params, wrapper);\n  };\n\n  Tags.prototype.createTag = function (decorated, params) {\n    var term = $.trim(params.term);\n\n    if (term === '') {\n      return null;\n    }\n\n    return {\n      id: term,\n      text: term\n    };\n  };\n\n  Tags.prototype.insertTag = function (_, data, tag) {\n    data.unshift(tag);\n  };\n\n  Tags.prototype._removeOldTags = function (_) {\n    var tag = this._lastTag;\n\n    var $options = this.$element.find('option[data-select2-tag]');\n\n    $options.each(function () {\n      if (this.selected) {\n        return;\n      }\n\n      $(this).remove();\n    });\n  };\n\n  return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n  'jquery'\n], function ($) {\n  function Tokenizer (decorated, $element, options) {\n    var tokenizer = options.get('tokenizer');\n\n    if (tokenizer !== undefined) {\n      this.tokenizer = tokenizer;\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    this.$search =  container.dropdown.$search || container.selection.$search ||\n      $container.find('.select2-search__field');\n  };\n\n  Tokenizer.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    function createAndSelect (data) {\n      // Normalize the data object so we can use it for checks\n      var item = self._normalizeItem(data);\n\n      // Check if the data object already exists as a tag\n      // Select it if it doesn't\n      var $existingOptions = self.$element.find('option').filter(function () {\n        return $(this).val() === item.id;\n      });\n\n      // If an existing option wasn't found for it, create the option\n      if (!$existingOptions.length) {\n        var $option = self.option(item);\n        $option.attr('data-select2-tag', true);\n\n        self._removeOldTags();\n        self.addOptions([$option]);\n      }\n\n      // Select the item, now that we know there is an option for it\n      select(item);\n    }\n\n    function select (data) {\n      self.trigger('select', {\n        data: data\n      });\n    }\n\n    params.term = params.term || '';\n\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n    if (tokenData.term !== params.term) {\n      // Replace the search term if we have the search box\n      if (this.$search.length) {\n        this.$search.val(tokenData.term);\n        this.$search.focus();\n      }\n\n      params.term = tokenData.term;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n    var separators = options.get('tokenSeparators') || [];\n    var term = params.term;\n    var i = 0;\n\n    var createTag = this.createTag || function (params) {\n      return {\n        id: params.term,\n        text: params.term\n      };\n    };\n\n    while (i < term.length) {\n      var termChar = term[i];\n\n      if ($.inArray(termChar, separators) === -1) {\n        i++;\n\n        continue;\n      }\n\n      var part = term.substr(0, i);\n      var partParams = $.extend({}, params, {\n        term: part\n      });\n\n      var data = createTag(partParams);\n\n      if (data == null) {\n        i++;\n        continue;\n      }\n\n      callback(data);\n\n      // Reset the term to not include the tokenized portion\n      term = term.substr(i + 1) || '';\n      i = 0;\n    }\n\n    return {\n      term: term\n    };\n  };\n\n  return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n  function MinimumInputLength (decorated, $e, options) {\n    this.minimumInputLength = options.get('minimumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (params.term.length < this.minimumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooShort',\n        args: {\n          minimum: this.minimumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n  function MaximumInputLength (decorated, $e, options) {\n    this.maximumInputLength = options.get('maximumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (this.maximumInputLength > 0 &&\n        params.term.length > this.maximumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooLong',\n        args: {\n          maximum: this.maximumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n  function MaximumSelectionLength (decorated, $e, options) {\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumSelectionLength.prototype.query =\n    function (decorated, params, callback) {\n      var self = this;\n\n      this.current(function (currentData) {\n        var count = currentData != null ? currentData.length : 0;\n        if (self.maximumSelectionLength > 0 &&\n          count >= self.maximumSelectionLength) {\n          self.trigger('results:message', {\n            message: 'maximumSelected',\n            args: {\n              maximum: self.maximumSelectionLength\n            }\n          });\n          return;\n        }\n        decorated.call(self, params, callback);\n      });\n  };\n\n  return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Dropdown ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    Dropdown.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Dropdown, Utils.Observable);\n\n  Dropdown.prototype.render = function () {\n    var $dropdown = $(\n      '<span class=\"select2-dropdown\">' +\n        '<span class=\"select2-results\"></span>' +\n      '</span>'\n    );\n\n    $dropdown.attr('dir', this.options.get('dir'));\n\n    this.$dropdown = $dropdown;\n\n    return $dropdown;\n  };\n\n  Dropdown.prototype.bind = function () {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.position = function ($dropdown, $container) {\n    // Should be implmented in subclasses\n  };\n\n  Dropdown.prototype.destroy = function () {\n    // Remove the dropdown from the DOM\n    this.$dropdown.remove();\n  };\n\n  return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function Search () { }\n\n  Search.prototype.render = function (decorated) {\n    var $rendered = decorated.call(this);\n\n    var $search = $(\n      '<span class=\"select2-search select2-search--dropdown\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\"' +\n        ' spellcheck=\"false\" role=\"textbox\" />' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    $rendered.prepend($search);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    this.$search.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n    });\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$search.on('input', function (evt) {\n      // Unbind the duplicated `keyup` event\n      $(this).off('keyup');\n    });\n\n    this.$search.on('keyup input', function (evt) {\n      self.handleSearch(evt);\n    });\n\n    container.on('open', function () {\n      self.$search.attr('tabindex', 0);\n\n      self.$search.focus();\n\n      window.setTimeout(function () {\n        self.$search.focus();\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n\n      self.$search.val('');\n    });\n\n    container.on('focus', function () {\n      if (container.isOpen()) {\n        self.$search.focus();\n      }\n    });\n\n    container.on('results:all', function (params) {\n      if (params.query.term == null || params.query.term === '') {\n        var showSearch = self.showSearch(params);\n\n        if (showSearch) {\n          self.$searchContainer.removeClass('select2-search--hide');\n        } else {\n          self.$searchContainer.addClass('select2-search--hide');\n        }\n      }\n    });\n  };\n\n  Search.prototype.handleSearch = function (evt) {\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.showSearch = function (_, params) {\n    return true;\n  };\n\n  return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  HidePlaceholder.prototype.append = function (decorated, data) {\n    data.results = this.removePlaceholder(data.results);\n\n    decorated.call(this, data);\n  };\n\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n    var modifiedData = data.slice(0);\n\n    for (var d = data.length - 1; d >= 0; d--) {\n      var item = data[d];\n\n      if (this.placeholder.id === item.id) {\n        modifiedData.splice(d, 1);\n      }\n    }\n\n    return modifiedData;\n  };\n\n  return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n  'jquery'\n], function ($) {\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\n    this.lastParams = {};\n\n    decorated.call(this, $element, options, dataAdapter);\n\n    this.$loadingMore = this.createLoadingMore();\n    this.loading = false;\n  }\n\n  InfiniteScroll.prototype.append = function (decorated, data) {\n    this.$loadingMore.remove();\n    this.loading = false;\n\n    decorated.call(this, data);\n\n    if (this.showLoadingMore(data)) {\n      this.$results.append(this.$loadingMore);\n    }\n  };\n\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('query', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    container.on('query:append', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    this.$results.on('scroll', function () {\n      var isLoadMoreVisible = $.contains(\n        document.documentElement,\n        self.$loadingMore[0]\n      );\n\n      if (self.loading || !isLoadMoreVisible) {\n        return;\n      }\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var loadingMoreOffset = self.$loadingMore.offset().top +\n        self.$loadingMore.outerHeight(false);\n\n      if (currentOffset + 50 >= loadingMoreOffset) {\n        self.loadMore();\n      }\n    });\n  };\n\n  InfiniteScroll.prototype.loadMore = function () {\n    this.loading = true;\n\n    var params = $.extend({}, {page: 1}, this.lastParams);\n\n    params.page++;\n\n    this.trigger('query:append', params);\n  };\n\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n    return data.pagination && data.pagination.more;\n  };\n\n  InfiniteScroll.prototype.createLoadingMore = function () {\n    var $option = $(\n      '<li ' +\n      'class=\"select2-results__option select2-results__option--load-more\"' +\n      'role=\"treeitem\" aria-disabled=\"true\"></li>'\n    );\n\n    var message = this.options.get('translations').get('loadingMore');\n\n    $option.html(message(this.lastParams));\n\n    return $option;\n  };\n\n  return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function AttachBody (decorated, $element, options) {\n    this.$dropdownParent = options.get('dropdownParent') || $(document.body);\n\n    decorated.call(this, $element, options);\n  }\n\n  AttachBody.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var setupResultsEvents = false;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      if (!setupResultsEvents) {\n        setupResultsEvents = true;\n\n        container.on('results:all', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n\n        container.on('results:append', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n      }\n    });\n\n    container.on('close', function () {\n      self._hideDropdown();\n      self._detachPositioningHandler(container);\n    });\n\n    this.$dropdownContainer.on('mousedown', function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  AttachBody.prototype.destroy = function (decorated) {\n    decorated.call(this);\n\n    this.$dropdownContainer.remove();\n  };\n\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n    // Clone all of the container classes\n    $dropdown.attr('class', $container.attr('class'));\n\n    $dropdown.removeClass('select2');\n    $dropdown.addClass('select2-container--open');\n\n    $dropdown.css({\n      position: 'absolute',\n      top: -999999\n    });\n\n    this.$container = $container;\n  };\n\n  AttachBody.prototype.render = function (decorated) {\n    var $container = $('<span></span>');\n\n    var $dropdown = decorated.call(this);\n    $container.append($dropdown);\n\n    this.$dropdownContainer = $container;\n\n    return $container;\n  };\n\n  AttachBody.prototype._hideDropdown = function (decorated) {\n    this.$dropdownContainer.detach();\n  };\n\n  AttachBody.prototype._attachPositioningHandler =\n      function (decorated, container) {\n    var self = this;\n\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.each(function () {\n      $(this).data('select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = $(this).data('select2-scroll-position');\n      $(this).scrollTop(position.y);\n    });\n\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n      function (e) {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n  };\n\n  AttachBody.prototype._detachPositioningHandler =\n      function (decorated, container) {\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.off(scrollEvent);\n\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n  };\n\n  AttachBody.prototype._positionDropdown = function () {\n    var $window = $(window);\n\n    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n    var newDirection = null;\n\n    var offset = this.$container.offset();\n\n    offset.bottom = offset.top + this.$container.outerHeight(false);\n\n    var container = {\n      height: this.$container.outerHeight(false)\n    };\n\n    container.top = offset.top;\n    container.bottom = offset.top + container.height;\n\n    var dropdown = {\n      height: this.$dropdown.outerHeight(false)\n    };\n\n    var viewport = {\n      top: $window.scrollTop(),\n      bottom: $window.scrollTop() + $window.height()\n    };\n\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n    var css = {\n      left: offset.left,\n      top: container.bottom\n    };\n\n    // Determine what the parent element is to use for calciulating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positoned elements, we need to get the element\n    // that is determining the offset\n    if ($offsetParent.css('position') === 'static') {\n      $offsetParent = $offsetParent.offsetParent();\n    }\n\n    var parentOffset = $offsetParent.offset();\n\n    css.top -= parentOffset.top;\n    css.left -= parentOffset.left;\n\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\n      newDirection = 'below';\n    }\n\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n      newDirection = 'above';\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n      newDirection = 'below';\n    }\n\n    if (newDirection == 'above' ||\n      (isCurrentlyAbove && newDirection !== 'below')) {\n      css.top = container.top - parentOffset.top - dropdown.height;\n    }\n\n    if (newDirection != null) {\n      this.$dropdown\n        .removeClass('select2-dropdown--below select2-dropdown--above')\n        .addClass('select2-dropdown--' + newDirection);\n      this.$container\n        .removeClass('select2-container--below select2-container--above')\n        .addClass('select2-container--' + newDirection);\n    }\n\n    this.$dropdownContainer.css(css);\n  };\n\n  AttachBody.prototype._resizeDropdown = function () {\n    var css = {\n      width: this.$container.outerWidth(false) + 'px'\n    };\n\n    if (this.options.get('dropdownAutoWidth')) {\n      css.minWidth = css.width;\n      css.position = 'relative';\n      css.width = 'auto';\n    }\n\n    this.$dropdown.css(css);\n  };\n\n  AttachBody.prototype._showDropdown = function (decorated) {\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n    this._positionDropdown();\n    this._resizeDropdown();\n  };\n\n  return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n  function countResults (data) {\n    var count = 0;\n\n    for (var d = 0; d < data.length; d++) {\n      var item = data[d];\n\n      if (item.children) {\n        count += countResults(item.children);\n      } else {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n    if (this.minimumResultsForSearch < 0) {\n      this.minimumResultsForSearch = Infinity;\n    }\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\n      return false;\n    }\n\n    return decorated.call(this, params);\n  };\n\n  return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n\n], function () {\n  function SelectOnClose () { }\n\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('close', function (params) {\n      self._handleSelectOnClose(params);\n    });\n  };\n\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n    if (params && params.originalSelect2Event != null) {\n      var event = params.originalSelect2Event;\n\n      // Don't select an item if the close event was triggered from a select or\n      // unselect event\n      if (event._type === 'select' || event._type === 'unselect') {\n        return;\n      }\n    }\n\n    var $highlightedResults = this.getHighlightedResults();\n\n    // Only select highlighted results\n    if ($highlightedResults.length < 1) {\n      return;\n    }\n\n    var data = $highlightedResults.data('data');\n\n    // Don't re-select already selected resulte\n    if (\n      (data.element != null && data.element.selected) ||\n      (data.element == null && data.selected)\n    ) {\n      return;\n    }\n\n    this.trigger('select', {\n        data: data\n    });\n  };\n\n  return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n  function CloseOnSelect () { }\n\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('select', function (evt) {\n      self._selectTriggered(evt);\n    });\n\n    container.on('unselect', function (evt) {\n      self._selectTriggered(evt);\n    });\n  };\n\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n    var originalEvent = evt.originalEvent;\n\n    // Don't close if the control key is being held\n    if (originalEvent && originalEvent.ctrlKey) {\n      return;\n    }\n\n    this.trigger('close', {\n      originalEvent: originalEvent,\n      originalSelect2Event: evt\n    });\n  };\n\n  return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n  // English\n  return {\n    errorLoading: function () {\n      return 'The results could not be loaded.';\n    },\n    inputTooLong: function (args) {\n      var overChars = args.input.length - args.maximum;\n\n      var message = 'Please delete ' + overChars + ' character';\n\n      if (overChars != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    inputTooShort: function (args) {\n      var remainingChars = args.minimum - args.input.length;\n\n      var message = 'Please enter ' + remainingChars + ' or more characters';\n\n      return message;\n    },\n    loadingMore: function () {\n      return 'Loading more results…';\n    },\n    maximumSelected: function (args) {\n      var message = 'You can only select ' + args.maximum + ' item';\n\n      if (args.maximum != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    noResults: function () {\n      return 'No results found';\n    },\n    searching: function () {\n      return 'Searching…';\n    }\n  };\n});\n\nS2.define('select2/defaults',[\n  'jquery',\n  'require',\n\n  './results',\n\n  './selection/single',\n  './selection/multiple',\n  './selection/placeholder',\n  './selection/allowClear',\n  './selection/search',\n  './selection/eventRelay',\n\n  './utils',\n  './translation',\n  './diacritics',\n\n  './data/select',\n  './data/array',\n  './data/ajax',\n  './data/tags',\n  './data/tokenizer',\n  './data/minimumInputLength',\n  './data/maximumInputLength',\n  './data/maximumSelectionLength',\n\n  './dropdown',\n  './dropdown/search',\n  './dropdown/hidePlaceholder',\n  './dropdown/infiniteScroll',\n  './dropdown/attachBody',\n  './dropdown/minimumResultsForSearch',\n  './dropdown/selectOnClose',\n  './dropdown/closeOnSelect',\n\n  './i18n/en'\n], function ($, require,\n\n             ResultsList,\n\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\n             SelectionSearch, EventRelay,\n\n             Utils, Translation, DIACRITICS,\n\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n             EnglishTranslation) {\n  function Defaults () {\n    this.reset();\n  }\n\n  Defaults.prototype.apply = function (options) {\n    options = $.extend(true, {}, this.defaults, options);\n\n    if (options.dataAdapter == null) {\n      if (options.ajax != null) {\n        options.dataAdapter = AjaxData;\n      } else if (options.data != null) {\n        options.dataAdapter = ArrayData;\n      } else {\n        options.dataAdapter = SelectData;\n      }\n\n      if (options.minimumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MinimumInputLength\n        );\n      }\n\n      if (options.maximumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumInputLength\n        );\n      }\n\n      if (options.maximumSelectionLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumSelectionLength\n        );\n      }\n\n      if (options.tags) {\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n      }\n\n      if (options.tokenSeparators != null || options.tokenizer != null) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Tokenizer\n        );\n      }\n\n      if (options.query != null) {\n        var Query = require(options.amdBase + 'compat/query');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Query\n        );\n      }\n\n      if (options.initSelection != null) {\n        var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          InitSelection\n        );\n      }\n    }\n\n    if (options.resultsAdapter == null) {\n      options.resultsAdapter = ResultsList;\n\n      if (options.ajax != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          InfiniteScroll\n        );\n      }\n\n      if (options.placeholder != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          HidePlaceholder\n        );\n      }\n\n      if (options.selectOnClose) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          SelectOnClose\n        );\n      }\n    }\n\n    if (options.dropdownAdapter == null) {\n      if (options.multiple) {\n        options.dropdownAdapter = Dropdown;\n      } else {\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n        options.dropdownAdapter = SearchableDropdown;\n      }\n\n      if (options.minimumResultsForSearch !== 0) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          MinimumResultsForSearch\n        );\n      }\n\n      if (options.closeOnSelect) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          CloseOnSelect\n        );\n      }\n\n      if (\n        options.dropdownCssClass != null ||\n        options.dropdownCss != null ||\n        options.adaptDropdownCssClass != null\n      ) {\n        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          DropdownCSS\n        );\n      }\n\n      options.dropdownAdapter = Utils.Decorate(\n        options.dropdownAdapter,\n        AttachBody\n      );\n    }\n\n    if (options.selectionAdapter == null) {\n      if (options.multiple) {\n        options.selectionAdapter = MultipleSelection;\n      } else {\n        options.selectionAdapter = SingleSelection;\n      }\n\n      // Add the placeholder mixin if a placeholder was specified\n      if (options.placeholder != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          Placeholder\n        );\n      }\n\n      if (options.allowClear) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          AllowClear\n        );\n      }\n\n      if (options.multiple) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionSearch\n        );\n      }\n\n      if (\n        options.containerCssClass != null ||\n        options.containerCss != null ||\n        options.adaptContainerCssClass != null\n      ) {\n        var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          ContainerCSS\n        );\n      }\n\n      options.selectionAdapter = Utils.Decorate(\n        options.selectionAdapter,\n        EventRelay\n      );\n    }\n\n    if (typeof options.language === 'string') {\n      // Check if the language is specified with a region\n      if (options.language.indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = options.language.split('-');\n        var baseLanguage = languageParts[0];\n\n        options.language = [options.language, baseLanguage];\n      } else {\n        options.language = [options.language];\n      }\n    }\n\n    if ($.isArray(options.language)) {\n      var languages = new Translation();\n      options.language.push('en');\n\n      var languageNames = options.language;\n\n      for (var l = 0; l < languageNames.length; l++) {\n        var name = languageNames[l];\n        var language = {};\n\n        try {\n          // Try to load it with the original name\n          language = Translation.loadPath(name);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            name = this.defaults.amdLanguageBase + name;\n            language = Translation.loadPath(name);\n          } catch (ex) {\n            // The translation could not be loaded at all. Sometimes this is\n            // because of a configuration problem, other times this can be\n            // because of how Select2 helps load all possible translation files.\n            if (options.debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + name + '\" could not be ' +\n                'automatically loaded. A fallback will be used instead.'\n              );\n            }\n\n            continue;\n          }\n        }\n\n        languages.extend(language);\n      }\n\n      options.translations = languages;\n    } else {\n      var baseTranslation = Translation.loadPath(\n        this.defaults.amdLanguageBase + 'en'\n      );\n      var customTranslation = new Translation(options.language);\n\n      customTranslation.extend(baseTranslation);\n\n      options.translations = customTranslation;\n    }\n\n    return options;\n  };\n\n  Defaults.prototype.reset = function () {\n    function stripDiacritics (text) {\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n      function match(a) {\n        return DIACRITICS[a] || a;\n      }\n\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function matcher (params, data) {\n      // Always return the object if there is nothing to compare\n      if ($.trim(params.term) === '') {\n        return data;\n      }\n\n      // Do a recursive check for options with children\n      if (data.children && data.children.length > 0) {\n        // Clone the data object if there are children\n        // This is required as we modify the object to remove any non-matches\n        var match = $.extend(true, {}, data);\n\n        // Check each child of the option\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          var matches = matcher(params, child);\n\n          // If there wasn't a match, remove the object in the array\n          if (matches == null) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        // If any children matched, return the new object\n        if (match.children.length > 0) {\n          return match;\n        }\n\n        // If there were no matching children, check just the plain object\n        return matcher(params, match);\n      }\n\n      var original = stripDiacritics(data.text).toUpperCase();\n      var term = stripDiacritics(params.term).toUpperCase();\n\n      // Check if the text contains the term\n      if (original.indexOf(term) > -1) {\n        return data;\n      }\n\n      // If it doesn't contain the term, don't return anything\n      return null;\n    }\n\n    this.defaults = {\n      amdBase: './',\n      amdLanguageBase: './i18n/',\n      closeOnSelect: true,\n      debug: false,\n      dropdownAutoWidth: false,\n      escapeMarkup: Utils.escapeMarkup,\n      language: EnglishTranslation,\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: false,\n      sorter: function (data) {\n        return data;\n      },\n      templateResult: function (result) {\n        return result.text;\n      },\n      templateSelection: function (selection) {\n        return selection.text;\n      },\n      theme: 'default',\n      width: 'resolve'\n    };\n  };\n\n  Defaults.prototype.set = function (key, value) {\n    var camelKey = $.camelCase(key);\n\n    var data = {};\n    data[camelKey] = value;\n\n    var convertedData = Utils._convertData(data);\n\n    $.extend(this.defaults, convertedData);\n  };\n\n  var defaults = new Defaults();\n\n  return defaults;\n});\n\nS2.define('select2/options',[\n  'require',\n  'jquery',\n  './defaults',\n  './utils'\n], function (require, $, Defaults, Utils) {\n  function Options (options, $element) {\n    this.options = options;\n\n    if ($element != null) {\n      this.fromElement($element);\n    }\n\n    this.options = Defaults.apply(this.options);\n\n    if ($element && $element.is('input')) {\n      var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n      this.options.dataAdapter = Utils.Decorate(\n        this.options.dataAdapter,\n        InputCompat\n      );\n    }\n  }\n\n  Options.prototype.fromElement = function ($e) {\n    var excludedData = ['select2'];\n\n    if (this.options.multiple == null) {\n      this.options.multiple = $e.prop('multiple');\n    }\n\n    if (this.options.disabled == null) {\n      this.options.disabled = $e.prop('disabled');\n    }\n\n    if (this.options.language == null) {\n      if ($e.prop('lang')) {\n        this.options.language = $e.prop('lang').toLowerCase();\n      } else if ($e.closest('[lang]').prop('lang')) {\n        this.options.language = $e.closest('[lang]').prop('lang');\n      }\n    }\n\n    if (this.options.dir == null) {\n      if ($e.prop('dir')) {\n        this.options.dir = $e.prop('dir');\n      } else if ($e.closest('[dir]').prop('dir')) {\n        this.options.dir = $e.closest('[dir]').prop('dir');\n      } else {\n        this.options.dir = 'ltr';\n      }\n    }\n\n    $e.prop('disabled', this.options.disabled);\n    $e.prop('multiple', this.options.multiple);\n\n    if ($e.data('select2Tags')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n          'removed in future versions of Select2.'\n        );\n      }\n\n      $e.data('data', $e.data('select2Tags'));\n      $e.data('tags', true);\n    }\n\n    if ($e.data('ajaxUrl')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\n          '`data-ajax--url` and support for the old attribute will be removed' +\n          ' in future versions of Select2.'\n        );\n      }\n\n      $e.attr('ajax--url', $e.data('ajaxUrl'));\n      $e.data('ajax--url', $e.data('ajaxUrl'));\n    }\n\n    var dataset = {};\n\n    // Prefer the element's `dataset` attribute if it exists\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n      dataset = $.extend(true, {}, $e[0].dataset, $e.data());\n    } else {\n      dataset = $e.data();\n    }\n\n    var data = $.extend(true, {}, dataset);\n\n    data = Utils._convertData(data);\n\n    for (var key in data) {\n      if ($.inArray(key, excludedData) > -1) {\n        continue;\n      }\n\n      if ($.isPlainObject(this.options[key])) {\n        $.extend(this.options[key], data[key]);\n      } else {\n        this.options[key] = data[key];\n      }\n    }\n\n    return this;\n  };\n\n  Options.prototype.get = function (key) {\n    return this.options[key];\n  };\n\n  Options.prototype.set = function (key, val) {\n    this.options[key] = val;\n  };\n\n  return Options;\n});\n\nS2.define('select2/core',[\n  'jquery',\n  './options',\n  './utils',\n  './keys'\n], function ($, Options, Utils, KEYS) {\n  var Select2 = function ($element, options) {\n    if ($element.data('select2') != null) {\n      $element.data('select2').destroy();\n    }\n\n    this.$element = $element;\n\n    this.id = this._generateId($element);\n\n    options = options || {};\n\n    this.options = new Options(options, $element);\n\n    Select2.__super__.constructor.call(this);\n\n    // Set up the tabindex\n\n    var tabindex = $element.attr('tabindex') || 0;\n    $element.data('old-tabindex', tabindex);\n    $element.attr('tabindex', '-1');\n\n    // Set up containers and adapters\n\n    var DataAdapter = this.options.get('dataAdapter');\n    this.dataAdapter = new DataAdapter($element, this.options);\n\n    var $container = this.render();\n\n    this._placeContainer($container);\n\n    var SelectionAdapter = this.options.get('selectionAdapter');\n    this.selection = new SelectionAdapter($element, this.options);\n    this.$selection = this.selection.render();\n\n    this.selection.position(this.$selection, $container);\n\n    var DropdownAdapter = this.options.get('dropdownAdapter');\n    this.dropdown = new DropdownAdapter($element, this.options);\n    this.$dropdown = this.dropdown.render();\n\n    this.dropdown.position(this.$dropdown, $container);\n\n    var ResultsAdapter = this.options.get('resultsAdapter');\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n    this.$results = this.results.render();\n\n    this.results.position(this.$results, this.$dropdown);\n\n    // Bind events\n\n    var self = this;\n\n    // Bind the container to all of the adapters\n    this._bindAdapters();\n\n    // Register any DOM event handlers\n    this._registerDomEvents();\n\n    // Register any internal event handlers\n    this._registerDataEvents();\n    this._registerSelectionEvents();\n    this._registerDropdownEvents();\n    this._registerResultsEvents();\n    this._registerEvents();\n\n    // Set the initial state\n    this.dataAdapter.current(function (initialData) {\n      self.trigger('selection:update', {\n        data: initialData\n      });\n    });\n\n    // Hide the original select\n    $element.addClass('select2-hidden-accessible');\n    $element.attr('aria-hidden', 'true');\n\n    // Synchronize any monitored attributes\n    this._syncAttributes();\n\n    $element.data('select2', this);\n  };\n\n  Utils.Extend(Select2, Utils.Observable);\n\n  Select2.prototype._generateId = function ($element) {\n    var id = '';\n\n    if ($element.attr('id') != null) {\n      id = $element.attr('id');\n    } else if ($element.attr('name') != null) {\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\n    } else {\n      id = Utils.generateChars(4);\n    }\n\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n    id = 'select2-' + id;\n\n    return id;\n  };\n\n  Select2.prototype._placeContainer = function ($container) {\n    $container.insertAfter(this.$element);\n\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n    if (width != null) {\n      $container.css('width', width);\n    }\n  };\n\n  Select2.prototype._resolveWidth = function ($element, method) {\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n    if (method == 'resolve') {\n      var styleWidth = this._resolveWidth($element, 'style');\n\n      if (styleWidth != null) {\n        return styleWidth;\n      }\n\n      return this._resolveWidth($element, 'element');\n    }\n\n    if (method == 'element') {\n      var elementWidth = $element.outerWidth(false);\n\n      if (elementWidth <= 0) {\n        return 'auto';\n      }\n\n      return elementWidth + 'px';\n    }\n\n    if (method == 'style') {\n      var style = $element.attr('style');\n\n      if (typeof(style) !== 'string') {\n        return null;\n      }\n\n      var attrs = style.split(';');\n\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n        var attr = attrs[i].replace(/\\s/g, '');\n        var matches = attr.match(WIDTH);\n\n        if (matches !== null && matches.length >= 1) {\n          return matches[1];\n        }\n      }\n\n      return null;\n    }\n\n    return method;\n  };\n\n  Select2.prototype._bindAdapters = function () {\n    this.dataAdapter.bind(this, this.$container);\n    this.selection.bind(this, this.$container);\n\n    this.dropdown.bind(this, this.$container);\n    this.results.bind(this, this.$container);\n  };\n\n  Select2.prototype._registerDomEvents = function () {\n    var self = this;\n\n    this.$element.on('change.select2', function () {\n      self.dataAdapter.current(function (data) {\n        self.trigger('selection:update', {\n          data: data\n        });\n      });\n    });\n\n    this.$element.on('focus.select2', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this._syncA = Utils.bind(this._syncAttributes, this);\n    this._syncS = Utils.bind(this._syncSubtree, this);\n\n    if (this.$element[0].attachEvent) {\n      this.$element[0].attachEvent('onpropertychange', this._syncA);\n    }\n\n    var observer = window.MutationObserver ||\n      window.WebKitMutationObserver ||\n      window.MozMutationObserver\n    ;\n\n    if (observer != null) {\n      this._observer = new observer(function (mutations) {\n        $.each(mutations, self._syncA);\n        $.each(mutations, self._syncS);\n      });\n      this._observer.observe(this.$element[0], {\n        attributes: true,\n        childList: true,\n        subtree: false\n      });\n    } else if (this.$element[0].addEventListener) {\n      this.$element[0].addEventListener(\n        'DOMAttrModified',\n        self._syncA,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeInserted',\n        self._syncS,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeRemoved',\n        self._syncS,\n        false\n      );\n    }\n  };\n\n  Select2.prototype._registerDataEvents = function () {\n    var self = this;\n\n    this.dataAdapter.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerSelectionEvents = function () {\n    var self = this;\n    var nonRelayEvents = ['toggle', 'focus'];\n\n    this.selection.on('toggle', function () {\n      self.toggleDropdown();\n    });\n\n    this.selection.on('focus', function (params) {\n      self.focus(params);\n    });\n\n    this.selection.on('*', function (name, params) {\n      if ($.inArray(name, nonRelayEvents) !== -1) {\n        return;\n      }\n\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerDropdownEvents = function () {\n    var self = this;\n\n    this.dropdown.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerResultsEvents = function () {\n    var self = this;\n\n    this.results.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerEvents = function () {\n    var self = this;\n\n    this.on('open', function () {\n      self.$container.addClass('select2-container--open');\n    });\n\n    this.on('close', function () {\n      self.$container.removeClass('select2-container--open');\n    });\n\n    this.on('enable', function () {\n      self.$container.removeClass('select2-container--disabled');\n    });\n\n    this.on('disable', function () {\n      self.$container.addClass('select2-container--disabled');\n    });\n\n    this.on('blur', function () {\n      self.$container.removeClass('select2-container--focus');\n    });\n\n    this.on('query', function (params) {\n      if (!self.isOpen()) {\n        self.trigger('open', {});\n      }\n\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:all', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('query:append', function (params) {\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:append', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('keypress', function (evt) {\n      var key = evt.which;\n\n      if (self.isOpen()) {\n        if (key === KEYS.ESC || key === KEYS.TAB ||\n            (key === KEYS.UP && evt.altKey)) {\n          self.close();\n\n          evt.preventDefault();\n        } else if (key === KEYS.ENTER) {\n          self.trigger('results:select', {});\n\n          evt.preventDefault();\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n          self.trigger('results:toggle', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.UP) {\n          self.trigger('results:previous', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.DOWN) {\n          self.trigger('results:next', {});\n\n          evt.preventDefault();\n        }\n      } else {\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\n            (key === KEYS.DOWN && evt.altKey)) {\n          self.open();\n\n          evt.preventDefault();\n        }\n      }\n    });\n  };\n\n  Select2.prototype._syncAttributes = function () {\n    this.options.set('disabled', this.$element.prop('disabled'));\n\n    if (this.options.get('disabled')) {\n      if (this.isOpen()) {\n        this.close();\n      }\n\n      this.trigger('disable', {});\n    } else {\n      this.trigger('enable', {});\n    }\n  };\n\n  Select2.prototype._syncSubtree = function (evt, mutations) {\n    var changed = false;\n    var self = this;\n\n    // Ignore any mutation events raised for elements that aren't options or\n    // optgroups. This handles the case when the select element is destroyed\n    if (\n      evt && evt.target && (\n        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n      )\n    ) {\n      return;\n    }\n\n    if (!mutations) {\n      // If mutation events aren't supported, then we can only assume that the\n      // change affected the selections\n      changed = true;\n    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\n        var node = mutations.addedNodes[n];\n\n        if (node.selected) {\n          changed = true;\n        }\n      }\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n      changed = true;\n    }\n\n    // Only re-pull the data if we think there is a change\n    if (changed) {\n      this.dataAdapter.current(function (currentData) {\n        self.trigger('selection:update', {\n          data: currentData\n        });\n      });\n    }\n  };\n\n  /**\n   * Override the trigger method to automatically trigger pre-events when\n   * there are events that can be prevented.\n   */\n  Select2.prototype.trigger = function (name, args) {\n    var actualTrigger = Select2.__super__.trigger;\n    var preTriggerMap = {\n      'open': 'opening',\n      'close': 'closing',\n      'select': 'selecting',\n      'unselect': 'unselecting'\n    };\n\n    if (args === undefined) {\n      args = {};\n    }\n\n    if (name in preTriggerMap) {\n      var preTriggerName = preTriggerMap[name];\n      var preTriggerArgs = {\n        prevented: false,\n        name: name,\n        args: args\n      };\n\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n      if (preTriggerArgs.prevented) {\n        args.prevented = true;\n\n        return;\n      }\n    }\n\n    actualTrigger.call(this, name, args);\n  };\n\n  Select2.prototype.toggleDropdown = function () {\n    if (this.options.get('disabled')) {\n      return;\n    }\n\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  };\n\n  Select2.prototype.open = function () {\n    if (this.isOpen()) {\n      return;\n    }\n\n    this.trigger('query', {});\n  };\n\n  Select2.prototype.close = function () {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.trigger('close', {});\n  };\n\n  Select2.prototype.isOpen = function () {\n    return this.$container.hasClass('select2-container--open');\n  };\n\n  Select2.prototype.hasFocus = function () {\n    return this.$container.hasClass('select2-container--focus');\n  };\n\n  Select2.prototype.focus = function (data) {\n    // No need to re-trigger focus events if we are already focused\n    if (this.hasFocus()) {\n      return;\n    }\n\n    this.$container.addClass('select2-container--focus');\n    this.trigger('focus', {});\n  };\n\n  Select2.prototype.enable = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n        ' instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      args = [true];\n    }\n\n    var disabled = !args[0];\n\n    this.$element.prop('disabled', disabled);\n  };\n\n  Select2.prototype.data = function () {\n    if (this.options.get('debug') &&\n        arguments.length > 0 && window.console && console.warn) {\n      console.warn(\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n        'should consider setting the value instead using `$element.val()`.'\n      );\n    }\n\n    var data = [];\n\n    this.dataAdapter.current(function (currentData) {\n      data = currentData;\n    });\n\n    return data;\n  };\n\n  Select2.prototype.val = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n        ' removed in later Select2 versions. Use $element.val() instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      return this.$element.val();\n    }\n\n    var newVal = args[0];\n\n    if ($.isArray(newVal)) {\n      newVal = $.map(newVal, function (obj) {\n        return obj.toString();\n      });\n    }\n\n    this.$element.val(newVal).trigger('change');\n  };\n\n  Select2.prototype.destroy = function () {\n    this.$container.remove();\n\n    if (this.$element[0].detachEvent) {\n      this.$element[0].detachEvent('onpropertychange', this._syncA);\n    }\n\n    if (this._observer != null) {\n      this._observer.disconnect();\n      this._observer = null;\n    } else if (this.$element[0].removeEventListener) {\n      this.$element[0]\n        .removeEventListener('DOMAttrModified', this._syncA, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeInserted', this._syncS, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeRemoved', this._syncS, false);\n    }\n\n    this._syncA = null;\n    this._syncS = null;\n\n    this.$element.off('.select2');\n    this.$element.attr('tabindex', this.$element.data('old-tabindex'));\n\n    this.$element.removeClass('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\n    this.$element.removeData('select2');\n\n    this.dataAdapter.destroy();\n    this.selection.destroy();\n    this.dropdown.destroy();\n    this.results.destroy();\n\n    this.dataAdapter = null;\n    this.selection = null;\n    this.dropdown = null;\n    this.results = null;\n  };\n\n  Select2.prototype.render = function () {\n    var $container = $(\n      '<span class=\"select2 select2-container\">' +\n        '<span class=\"selection\"></span>' +\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n      '</span>'\n    );\n\n    $container.attr('dir', this.options.get('dir'));\n\n    this.$container = $container;\n\n    this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n    $container.data('element', this.$element);\n\n    return $container;\n  };\n\n  return Select2;\n});\n\nS2.define('jquery-mousewheel',[\n  'jquery'\n], function ($) {\n  // Used to shim jQuery.mousewheel for non-full builds.\n  return $;\n});\n\nS2.define('jquery.select2',[\n  'jquery',\n  'jquery-mousewheel',\n\n  './select2/core',\n  './select2/defaults'\n], function ($, _, Select2, Defaults) {\n  if ($.fn.select2 == null) {\n    // All methods that should return the element\n    var thisMethods = ['open', 'close', 'destroy'];\n\n    $.fn.select2 = function (options) {\n      options = options || {};\n\n      if (typeof options === 'object') {\n        this.each(function () {\n          var instanceOptions = $.extend(true, {}, options);\n\n          var instance = new Select2($(this), instanceOptions);\n        });\n\n        return this;\n      } else if (typeof options === 'string') {\n        var ret;\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n          var instance = $(this).data('select2');\n\n          if (instance == null && window.console && console.error) {\n            console.error(\n              'The select2(\\'' + options + '\\') method was called on an ' +\n              'element that is not using Select2.'\n            );\n          }\n\n          ret = instance[options].apply(instance, args);\n        });\n\n        // Check if we should be returning `this`\n        if ($.inArray(options, thisMethods) > -1) {\n          return this;\n        }\n\n        return ret;\n      } else {\n        throw new Error('Invalid arguments for Select2: ' + options);\n      }\n    };\n  }\n\n  if ($.fn.select2.defaults == null) {\n    $.fn.select2.defaults = Defaults;\n  }\n\n  return Select2;\n});\n\n  // Return the AMD loader configuration so it can be used outside of this file\n  return {\n    define: S2.define,\n    require: S2.require\n  };\n}());\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n}));\n"
  },
  {
    "path": "public/adminlte/plugins/slimScroll/jquery.slimscroll.js",
    "content": "/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)\n * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)\n * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.\n *\n * Version: 1.3.8\n *\n */\n(function($) {\n\n  $.fn.extend({\n    slimScroll: function(options) {\n\n      var defaults = {\n\n        // width in pixels of the visible scroll area\n        width : 'auto',\n\n        // height in pixels of the visible scroll area\n        height : '250px',\n\n        // width in pixels of the scrollbar and rail\n        size : '7px',\n\n        // scrollbar color, accepts any hex/color value\n        color: '#000',\n\n        // scrollbar position - left/right\n        position : 'right',\n\n        // distance in pixels between the side edge and the scrollbar\n        distance : '1px',\n\n        // default scroll position on load - top / bottom / $('selector')\n        start : 'top',\n\n        // sets scrollbar opacity\n        opacity : .4,\n\n        // enables always-on mode for the scrollbar\n        alwaysVisible : false,\n\n        // check if we should hide the scrollbar when user is hovering over\n        disableFadeOut : false,\n\n        // sets visibility of the rail\n        railVisible : false,\n\n        // sets rail color\n        railColor : '#333',\n\n        // sets rail opacity\n        railOpacity : .2,\n\n        // whether  we should use jQuery UI Draggable to enable bar dragging\n        railDraggable : true,\n\n        // defautlt CSS class of the slimscroll rail\n        railClass : 'slimScrollRail',\n\n        // defautlt CSS class of the slimscroll bar\n        barClass : 'slimScrollBar',\n\n        // defautlt CSS class of the slimscroll wrapper\n        wrapperClass : 'slimScrollDiv',\n\n        // check if mousewheel should scroll the window if we reach top/bottom\n        allowPageScroll : false,\n\n        // scroll amount applied to each mouse wheel step\n        wheelStep : 20,\n\n        // scroll amount applied when user is using gestures\n        touchScrollStep : 200,\n\n        // sets border radius\n        borderRadius: '7px',\n\n        // sets border radius of the rail\n        railBorderRadius : '7px'\n      };\n\n      var o = $.extend(defaults, options);\n\n      // do it for every element that matches selector\n      this.each(function(){\n\n      var isOverPanel, isOverBar, isDragg, queueHide, touchDif,\n        barHeight, percentScroll, lastScroll,\n        divS = '<div></div>',\n        minBarHeight = 30,\n        releaseScroll = false;\n\n        // used in event handlers and for better minification\n        var me = $(this);\n\n        // ensure we are not binding it again\n        if (me.parent().hasClass(o.wrapperClass))\n        {\n            // start from last bar position\n            var offset = me.scrollTop();\n\n            // find bar and rail\n            bar = me.siblings('.' + o.barClass);\n            rail = me.siblings('.' + o.railClass);\n\n            getBarHeight();\n\n            // check if we should scroll existing instance\n            if ($.isPlainObject(options))\n            {\n              // Pass height: auto to an existing slimscroll object to force a resize after contents have changed\n              if ( 'height' in options && options.height == 'auto' ) {\n                me.parent().css('height', 'auto');\n                me.css('height', 'auto');\n                var height = me.parent().parent().height();\n                me.parent().css('height', height);\n                me.css('height', height);\n              } else if ('height' in options) {\n                var h = options.height;\n                me.parent().css('height', h);\n                me.css('height', h);\n              }\n\n              if ('scrollTo' in options)\n              {\n                // jump to a static point\n                offset = parseInt(o.scrollTo);\n              }\n              else if ('scrollBy' in options)\n              {\n                // jump by value pixels\n                offset += parseInt(o.scrollBy);\n              }\n              else if ('destroy' in options)\n              {\n                // remove slimscroll elements\n                bar.remove();\n                rail.remove();\n                me.unwrap();\n                return;\n              }\n\n              // scroll content by the given offset\n              scrollContent(offset, false, true);\n            }\n\n            return;\n        }\n        else if ($.isPlainObject(options))\n        {\n            if ('destroy' in options)\n            {\n            \treturn;\n            }\n        }\n\n        // optionally set height to the parent's height\n        o.height = (o.height == 'auto') ? me.parent().height() : o.height;\n\n        // wrap content\n        var wrapper = $(divS)\n          .addClass(o.wrapperClass)\n          .css({\n            position: 'relative',\n            overflow: 'hidden',\n            width: o.width,\n            height: o.height\n          });\n\n        // update style for the div\n        me.css({\n          overflow: 'hidden',\n          width: o.width,\n          height: o.height\n        });\n\n        // create scrollbar rail\n        var rail = $(divS)\n          .addClass(o.railClass)\n          .css({\n            width: o.size,\n            height: '100%',\n            position: 'absolute',\n            top: 0,\n            display: (o.alwaysVisible && o.railVisible) ? 'block' : 'none',\n            'border-radius': o.railBorderRadius,\n            background: o.railColor,\n            opacity: o.railOpacity,\n            zIndex: 90\n          });\n\n        // create scrollbar\n        var bar = $(divS)\n          .addClass(o.barClass)\n          .css({\n            background: o.color,\n            width: o.size,\n            position: 'absolute',\n            top: 0,\n            opacity: o.opacity,\n            display: o.alwaysVisible ? 'block' : 'none',\n            'border-radius' : o.borderRadius,\n            BorderRadius: o.borderRadius,\n            MozBorderRadius: o.borderRadius,\n            WebkitBorderRadius: o.borderRadius,\n            zIndex: 99\n          });\n\n        // set position\n        var posCss = (o.position == 'right') ? { right: o.distance } : { left: o.distance };\n        rail.css(posCss);\n        bar.css(posCss);\n\n        // wrap it\n        me.wrap(wrapper);\n\n        // append to parent div\n        me.parent().append(bar);\n        me.parent().append(rail);\n\n        // make it draggable and no longer dependent on the jqueryUI\n        if (o.railDraggable){\n          bar.bind(\"mousedown\", function(e) {\n            var $doc = $(document);\n            isDragg = true;\n            t = parseFloat(bar.css('top'));\n            pageY = e.pageY;\n\n            $doc.bind(\"mousemove.slimscroll\", function(e){\n              currTop = t + e.pageY - pageY;\n              bar.css('top', currTop);\n              scrollContent(0, bar.position().top, false);// scroll content\n            });\n\n            $doc.bind(\"mouseup.slimscroll\", function(e) {\n              isDragg = false;hideBar();\n              $doc.unbind('.slimscroll');\n            });\n            return false;\n          }).bind(\"selectstart.slimscroll\", function(e){\n            e.stopPropagation();\n            e.preventDefault();\n            return false;\n          });\n        }\n\n        // on rail over\n        rail.hover(function(){\n          showBar();\n        }, function(){\n          hideBar();\n        });\n\n        // on bar over\n        bar.hover(function(){\n          isOverBar = true;\n        }, function(){\n          isOverBar = false;\n        });\n\n        // show on parent mouseover\n        me.hover(function(){\n          isOverPanel = true;\n          showBar();\n          hideBar();\n        }, function(){\n          isOverPanel = false;\n          hideBar();\n        });\n\n        // support for mobile\n        me.bind('touchstart', function(e,b){\n          if (e.originalEvent.touches.length)\n          {\n            // record where touch started\n            touchDif = e.originalEvent.touches[0].pageY;\n          }\n        });\n\n        me.bind('touchmove', function(e){\n          // prevent scrolling the page if necessary\n          if(!releaseScroll)\n          {\n  \t\t      e.originalEvent.preventDefault();\n\t\t      }\n          if (e.originalEvent.touches.length)\n          {\n            // see how far user swiped\n            var diff = (touchDif - e.originalEvent.touches[0].pageY) / o.touchScrollStep;\n            // scroll content\n            scrollContent(diff, true);\n            touchDif = e.originalEvent.touches[0].pageY;\n          }\n        });\n\n        // set up initial height\n        getBarHeight();\n\n        // check start position\n        if (o.start === 'bottom')\n        {\n          // scroll content to bottom\n          bar.css({ top: me.outerHeight() - bar.outerHeight() });\n          scrollContent(0, true);\n        }\n        else if (o.start !== 'top')\n        {\n          // assume jQuery selector\n          scrollContent($(o.start).position().top, null, true);\n\n          // make sure bar stays hidden\n          if (!o.alwaysVisible) { bar.hide(); }\n        }\n\n        // attach scroll events\n        attachWheel(this);\n\n        function _onWheel(e)\n        {\n          // use mouse wheel only when mouse is over\n          if (!isOverPanel) { return; }\n\n          var e = e || window.event;\n\n          var delta = 0;\n          if (e.wheelDelta) { delta = -e.wheelDelta/120; }\n          if (e.detail) { delta = e.detail / 3; }\n\n          var target = e.target || e.srcTarget || e.srcElement;\n          if ($(target).closest('.' + o.wrapperClass).is(me.parent())) {\n            // scroll content\n            scrollContent(delta, true);\n          }\n\n          // stop window scroll\n          if (e.preventDefault && !releaseScroll) { e.preventDefault(); }\n          if (!releaseScroll) { e.returnValue = false; }\n        }\n\n        function scrollContent(y, isWheel, isJump)\n        {\n          releaseScroll = false;\n          var delta = y;\n          var maxTop = me.outerHeight() - bar.outerHeight();\n\n          if (isWheel)\n          {\n            // move bar with mouse wheel\n            delta = parseInt(bar.css('top')) + y * parseInt(o.wheelStep) / 100 * bar.outerHeight();\n\n            // move bar, make sure it doesn't go out\n            delta = Math.min(Math.max(delta, 0), maxTop);\n\n            // if scrolling down, make sure a fractional change to the\n            // scroll position isn't rounded away when the scrollbar's CSS is set\n            // this flooring of delta would happened automatically when\n            // bar.css is set below, but we floor here for clarity\n            delta = (y > 0) ? Math.ceil(delta) : Math.floor(delta);\n\n            // scroll the scrollbar\n            bar.css({ top: delta + 'px' });\n          }\n\n          // calculate actual scroll amount\n          percentScroll = parseInt(bar.css('top')) / (me.outerHeight() - bar.outerHeight());\n          delta = percentScroll * (me[0].scrollHeight - me.outerHeight());\n\n          if (isJump)\n          {\n            delta = y;\n            var offsetTop = delta / me[0].scrollHeight * me.outerHeight();\n            offsetTop = Math.min(Math.max(offsetTop, 0), maxTop);\n            bar.css({ top: offsetTop + 'px' });\n          }\n\n          // scroll content\n          me.scrollTop(delta);\n\n          // fire scrolling event\n          me.trigger('slimscrolling', ~~delta);\n\n          // ensure bar is visible\n          showBar();\n\n          // trigger hide when scroll is stopped\n          hideBar();\n        }\n\n        function attachWheel(target)\n        {\n          if (window.addEventListener)\n          {\n            target.addEventListener('DOMMouseScroll', _onWheel, false );\n            target.addEventListener('mousewheel', _onWheel, false );\n          }\n          else\n          {\n            document.attachEvent(\"onmousewheel\", _onWheel)\n          }\n        }\n\n        function getBarHeight()\n        {\n          // calculate scrollbar height and make sure it is not too small\n          barHeight = Math.max((me.outerHeight() / me[0].scrollHeight) * me.outerHeight(), minBarHeight);\n          bar.css({ height: barHeight + 'px' });\n\n          // hide scrollbar if content is not long enough\n          var display = barHeight == me.outerHeight() ? 'none' : 'block';\n          bar.css({ display: display });\n        }\n\n        function showBar()\n        {\n          // recalculate bar height\n          getBarHeight();\n          clearTimeout(queueHide);\n\n          // when bar reached top or bottom\n          if (percentScroll == ~~percentScroll)\n          {\n            //release wheel\n            releaseScroll = o.allowPageScroll;\n\n            // publish approporiate event\n            if (lastScroll != percentScroll)\n            {\n                var msg = (~~percentScroll == 0) ? 'top' : 'bottom';\n                me.trigger('slimscroll', msg);\n            }\n          }\n          else\n          {\n            releaseScroll = false;\n          }\n          lastScroll = percentScroll;\n\n          // show only when required\n          if(barHeight >= me.outerHeight()) {\n            //allow window scroll\n            releaseScroll = true;\n            return;\n          }\n          bar.stop(true,true).fadeIn('fast');\n          if (o.railVisible) { rail.stop(true,true).fadeIn('fast'); }\n        }\n\n        function hideBar()\n        {\n          // only hide when options allow it\n          if (!o.alwaysVisible)\n          {\n            queueHide = setTimeout(function(){\n              if (!(o.disableFadeOut && isOverPanel) && !isOverBar && !isDragg)\n              {\n                bar.fadeOut('slow');\n                rail.fadeOut('slow');\n              }\n            }, 1000);\n          }\n        }\n\n      });\n\n      // maintain chainability\n      return this;\n    }\n  });\n\n  $.fn.extend({\n    slimscroll: $.fn.slimScroll\n  });\n\n})(jQuery);\n"
  },
  {
    "path": "public/adminlte/plugins/sparkline/jquery.sparkline.js",
    "content": "/**\n*\n* jquery.sparkline.js\n*\n* v2.1.2\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n*     * Redistributions of source code must retain the above copyright notice,\n*       this list of conditions and the following disclaimer.\n*     * Redistributions in binary form must reproduce the above copyright notice,\n*       this list of conditions and the following disclaimer in the documentation\n*       and/or other materials provided with the distribution.\n*     * Neither the name of Splunk Inc nor the names of its contributors may\n*       be used to endorse or promote products derived from this software without\n*       specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n*  $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*   <p>Sparkline: <span class=\"sparkline\">1,4,6,6,8,5,3,5</span></p>\n*   $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*    <p>Sparkline: <span id=\"sparkline1\">This text replaced if the browser is compatible</span></p>\n*    $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n*    $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*    <p>Sparkline: <span class=\"sparkline\"><!--1,4,6,6,8,5,3,5 --></span></p>\n*    <p>Sparkline: <span class=\"sparkline\" values=\"1,4,6,6,8,5,3,5\"></span></p>\n*    $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*   <p>Sparkline: <span class=\"sparkline\">1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5</span></p>\n*    $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as teh second argument to the sparkline function:\n*   $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself.  This feature is disabled by default though\n* as there's a slight performance overhead:\n*   $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*   <p>Sparkline: <span class=\"sparkline\" sparkType=\"bar\" sparkBarColor=\"red\">loading</span></p>\n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionPrefix)\n*\n* Supported options:\n*   lineColor - Color of the line used for the chart\n*   fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n*   width - Width of the chart - Defaults to 3 times the number of values in pixels\n*   height - Height of the chart - Defaults to the height of the containing element\n*   chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n*   chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n*   chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n*   chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n*   chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n*   composite - If true then don't erase any existing chart attached to the tag, but draw\n*           another chart over the top - Note that width and height are ignored if an\n*           existing chart is detected.\n*   tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n*   enableTagOptions - Whether to check tags for sparkline options\n*   tagOptionPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n*   disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n*           hidden dom element, avoding a browser reflow\n*   disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n*       making the plugin perform much like it did in 1.x\n*   disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n*   disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n*       defaults to false (highlights enabled)\n*   highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n*   tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n*   tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n*   tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n*   tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n*   tooltipFormatter  - Optional callback that allows you to override the HTML displayed in the tooltip\n*       callback is given arguments of (sparkline, options, fields)\n*   tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n*   tooltipFormat - A format string or SPFormat object  (or an array thereof for multiple entries)\n*       to control the format of the tooltip\n*   tooltipPrefix - A string to prepend to each field displayed in a tooltip\n*   tooltipSuffix - A string to append to each field displayed in a tooltip\n*   tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n*   tooltipValueLookups - An object or range map to map field values to tooltip strings\n*       (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n*   numberFormatter - Optional callback for formatting numbers in tooltips\n*   numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n*   numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n*   numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n*    line - Line chart.  Options:\n*       spotColor - Set to '' to not end each line in a circular spot\n*       minSpotColor - If set, color of spot at minimum value\n*       maxSpotColor - If set, color of spot at maximum value\n*       spotRadius - Radius in pixels\n*       lineWidth - Width of line in pixels\n*       normalRangeMin\n*       normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n*                      or expected range of values\n*       normalRangeColor - Color to use for the above bar\n*       drawNormalOnTop - Draw the normal range above the chart fill color if true\n*       defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n*       highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n*       highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n*       valueSpots - Specify which points to draw spots on, and in which color.  Accepts a range map\n*\n*   bar - Bar chart.  Options:\n*       barColor - Color of bars for postive values\n*       negBarColor - Color of bars for negative values\n*       zeroColor - Color of bars with zero values\n*       nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n*       barWidth - Width of bars in pixels\n*       colorMap - Optional mappnig of values to colors to override the *BarColor values above\n*                  can be an Array of values to control the color of individual bars or a range map\n*                  to specify colors for individual ranges of values\n*       barSpacing - Gap between bars in pixels\n*       zeroAxis - Centers the y-axis around zero if true\n*\n*   tristate - Charts values of win (>0), lose (<0) or draw (=0)\n*       posBarColor - Color of win values\n*       negBarColor - Color of lose values\n*       zeroBarColor - Color of draw values\n*       barWidth - Width of bars in pixels\n*       barSpacing - Gap between bars in pixels\n*       colorMap - Optional mappnig of values to colors to override the *BarColor values above\n*                  can be an Array of values to control the color of individual bars or a range map\n*                  to specify colors for individual ranges of values\n*\n*   discrete - Options:\n*       lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n*       thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n*       thresholdColor\n*\n*   bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n*       options:\n*       targetColor - The color of the vertical target marker\n*       targetWidth - The width of the target marker in pixels\n*       performanceColor - The color of the performance measure horizontal bar\n*       rangeColors - Colors to use for each qualitative range background color\n*\n*   pie - Pie chart. Options:\n*       sliceColors - An array of colors to use for pie slices\n*       offset - Angle in degrees to offset the first slice - Try -90 or +90\n*       borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n*       borderColor - Color to use for the pie chart border - Defaults to #000\n*\n*   box - Box plot. Options:\n*       raw - Set to true to supply pre-computed plot points as values\n*             values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n*             When set to false you can supply any number of values and the box plot will\n*             be computed for you.  Default is false.\n*       showOutliers - Set to true (default) to display outliers as circles\n*       outlierIQR - Interquartile range used to determine outliers.  Default 1.5\n*       boxLineColor - Outline color of the box\n*       boxFillColor - Fill color for the box\n*       whiskerColor - Line color used for whiskers\n*       outlierLineColor - Outline color of outlier circles\n*       outlierFillColor - Fill color of the outlier circles\n*       spotRadius - Radius of outlier circles\n*       medianColor - Line color of the median line\n*       target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n*   Examples:\n*   $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n*   $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n*   $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n*   $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n*   $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n*   $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n    if(typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    } else if (jQuery && !jQuery.fn.sparkline) {\n        factory(jQuery);\n    }\n}\n(function($) {\n    'use strict';\n\n    var UNSET_OPTION = {},\n        getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n        remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n        MouseHandler, Tooltip, barHighlightMixin,\n        line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n        VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n    /**\n     * Default configuration settings\n     */\n    getDefaults = function () {\n        return {\n            // Settings common to most/all chart types\n            common: {\n                type: 'line',\n                lineColor: '#00f',\n                fillColor: '#cdf',\n                defaultPixelsPerValue: 3,\n                width: 'auto',\n                height: 'auto',\n                composite: false,\n                tagValuesAttribute: 'values',\n                tagOptionsPrefix: 'spark',\n                enableTagOptions: false,\n                enableHighlight: true,\n                highlightLighten: 1.4,\n                tooltipSkipNull: true,\n                tooltipPrefix: '',\n                tooltipSuffix: '',\n                disableHiddenCheck: false,\n                numberFormatter: false,\n                numberDigitGroupCount: 3,\n                numberDigitGroupSep: ',',\n                numberDecimalMark: '.',\n                disableTooltips: false,\n                disableInteraction: false\n            },\n            // Defaults for line charts\n            line: {\n                spotColor: '#f80',\n                highlightSpotColor: '#5f5',\n                highlightLineColor: '#f22',\n                spotRadius: 1.5,\n                minSpotColor: '#f80',\n                maxSpotColor: '#f80',\n                lineWidth: 1,\n                normalRangeMin: undefined,\n                normalRangeMax: undefined,\n                normalRangeColor: '#ccc',\n                drawNormalOnTop: false,\n                chartRangeMin: undefined,\n                chartRangeMax: undefined,\n                chartRangeMinX: undefined,\n                chartRangeMaxX: undefined,\n                tooltipFormat: new SPFormat('<span style=\"color: {{color}}\">&#9679;</span> {{prefix}}{{y}}{{suffix}}')\n            },\n            // Defaults for bar charts\n            bar: {\n                barColor: '#3366cc',\n                negBarColor: '#f44',\n                stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n                    '#dd4477', '#0099c6', '#990099'],\n                zeroColor: undefined,\n                nullColor: undefined,\n                zeroAxis: true,\n                barWidth: 4,\n                barSpacing: 1,\n                chartRangeMax: undefined,\n                chartRangeMin: undefined,\n                chartRangeClip: false,\n                colorMap: undefined,\n                tooltipFormat: new SPFormat('<span style=\"color: {{color}}\">&#9679;</span> {{prefix}}{{value}}{{suffix}}')\n            },\n            // Defaults for tristate charts\n            tristate: {\n                barWidth: 4,\n                barSpacing: 1,\n                posBarColor: '#6f6',\n                negBarColor: '#f44',\n                zeroBarColor: '#999',\n                colorMap: {},\n                tooltipFormat: new SPFormat('<span style=\"color: {{color}}\">&#9679;</span> {{value:map}}'),\n                tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n            },\n            // Defaults for discrete charts\n            discrete: {\n                lineHeight: 'auto',\n                thresholdColor: undefined,\n                thresholdValue: 0,\n                chartRangeMax: undefined,\n                chartRangeMin: undefined,\n                chartRangeClip: false,\n                tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n            },\n            // Defaults for bullet charts\n            bullet: {\n                targetColor: '#f33',\n                targetWidth: 3, // width of the target bar in pixels\n                performanceColor: '#33f',\n                rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n                base: undefined, // set this to a number to change the base start number\n                tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n                tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n            },\n            // Defaults for pie charts\n            pie: {\n                offset: 0,\n                sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n                    '#dd4477', '#0099c6', '#990099'],\n                borderWidth: 0,\n                borderColor: '#000',\n                tooltipFormat: new SPFormat('<span style=\"color: {{color}}\">&#9679;</span> {{value}} ({{percent.1}}%)')\n            },\n            // Defaults for box plots\n            box: {\n                raw: false,\n                boxLineColor: '#000',\n                boxFillColor: '#cdf',\n                whiskerColor: '#000',\n                outlierLineColor: '#333',\n                outlierFillColor: '#fff',\n                medianColor: '#f00',\n                showOutliers: true,\n                outlierIQR: 1.5,\n                spotRadius: 1.5,\n                target: undefined,\n                targetColor: '#4a2',\n                chartRangeMax: undefined,\n                chartRangeMin: undefined,\n                tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n                tooltipFormatFieldlistKey: 'field',\n                tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n                    uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n                    lw: 'Left Whisker', rw: 'Right Whisker'} }\n            }\n        };\n    };\n\n    // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n    defaultStyles = '.jqstooltip { ' +\n            'position: absolute;' +\n            'left: 0px;' +\n            'top: 0px;' +\n            'visibility: hidden;' +\n            'background: rgb(0, 0, 0) transparent;' +\n            'background-color: rgba(0,0,0,0.6);' +\n            'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n            '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n            'color: white;' +\n            'font: 10px arial, san serif;' +\n            'text-align: left;' +\n            'white-space: nowrap;' +\n            'padding: 5px;' +\n            'border: 1px solid white;' +\n            'z-index: 10000;' +\n            '}' +\n            '.jqsfield { ' +\n            'color: white;' +\n            'font: 10px arial, san serif;' +\n            'text-align: left;' +\n            '}';\n\n    /**\n     * Utilities\n     */\n\n    createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n        var Class, args;\n        Class = function () {\n            this.init.apply(this, arguments);\n        };\n        if (arguments.length > 1) {\n            if (arguments[0]) {\n                Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n                Class._super = arguments[0].prototype;\n            } else {\n                Class.prototype = arguments[arguments.length - 1];\n            }\n            if (arguments.length > 2) {\n                args = Array.prototype.slice.call(arguments, 1, -1);\n                args.unshift(Class.prototype);\n                $.extend.apply($, args);\n            }\n        } else {\n            Class.prototype = arguments[0];\n        }\n        Class.prototype.cls = Class;\n        return Class;\n    };\n\n    /**\n     * Wraps a format string for tooltips\n     * {{x}}\n     * {{x.2}\n     * {{x:months}}\n     */\n    $.SPFormatClass = SPFormat = createClass({\n        fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n        precre: /(\\w+)\\.(\\d+)/,\n\n        init: function (format, fclass) {\n            this.format = format;\n            this.fclass = fclass;\n        },\n\n        render: function (fieldset, lookups, options) {\n            var self = this,\n                fields = fieldset,\n                match, token, lookupkey, fieldvalue, prec;\n            return this.format.replace(this.fre, function () {\n                var lookup;\n                token = arguments[1];\n                lookupkey = arguments[3];\n                match = self.precre.exec(token);\n                if (match) {\n                    prec = match[2];\n                    token = match[1];\n                } else {\n                    prec = false;\n                }\n                fieldvalue = fields[token];\n                if (fieldvalue === undefined) {\n                    return '';\n                }\n                if (lookupkey && lookups && lookups[lookupkey]) {\n                    lookup = lookups[lookupkey];\n                    if (lookup.get) { // RangeMap\n                        return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n                    } else {\n                        return lookups[lookupkey][fieldvalue] || fieldvalue;\n                    }\n                }\n                if (isNumber(fieldvalue)) {\n                    if (options.get('numberFormatter')) {\n                        fieldvalue = options.get('numberFormatter')(fieldvalue);\n                    } else {\n                        fieldvalue = formatNumber(fieldvalue, prec,\n                            options.get('numberDigitGroupCount'),\n                            options.get('numberDigitGroupSep'),\n                            options.get('numberDecimalMark'));\n                    }\n                }\n                return fieldvalue;\n            });\n        }\n    });\n\n    // convience method to avoid needing the new operator\n    $.spformat = function(format, fclass) {\n        return new SPFormat(format, fclass);\n    };\n\n    clipval = function (val, min, max) {\n        if (val < min) {\n            return min;\n        }\n        if (val > max) {\n            return max;\n        }\n        return val;\n    };\n\n    quartile = function (values, q) {\n        var vl;\n        if (q === 2) {\n            vl = Math.floor(values.length / 2);\n            return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n        } else {\n            if (values.length % 2 ) { // odd\n                vl = (values.length * q + q) / 4;\n                return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n            } else { //even\n                vl = (values.length * q + 2) / 4;\n                return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 :  values[vl-1];\n\n            }\n        }\n    };\n\n    normalizeValue = function (val) {\n        var nf;\n        switch (val) {\n            case 'undefined':\n                val = undefined;\n                break;\n            case 'null':\n                val = null;\n                break;\n            case 'true':\n                val = true;\n                break;\n            case 'false':\n                val = false;\n                break;\n            default:\n                nf = parseFloat(val);\n                if (val == nf) {\n                    val = nf;\n                }\n        }\n        return val;\n    };\n\n    normalizeValues = function (vals) {\n        var i, result = [];\n        for (i = vals.length; i--;) {\n            result[i] = normalizeValue(vals[i]);\n        }\n        return result;\n    };\n\n    remove = function (vals, filter) {\n        var i, vl, result = [];\n        for (i = 0, vl = vals.length; i < vl; i++) {\n            if (vals[i] !== filter) {\n                result.push(vals[i]);\n            }\n        }\n        return result;\n    };\n\n    isNumber = function (num) {\n        return !isNaN(parseFloat(num)) && isFinite(num);\n    };\n\n    formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n        var p, i;\n        num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n        p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n        if (p < num.length) {\n            num[p] = decsep;\n        }\n        for (i = p - groupsize; i > 0; i -= groupsize) {\n            num.splice(i, 0, groupsep);\n        }\n        return num.join('');\n    };\n\n    // determine if all values of an array match a value\n    // returns true if the array is empty\n    all = function (val, arr, ignoreNull) {\n        var i;\n        for (i = arr.length; i--; ) {\n            if (ignoreNull && arr[i] === null) continue;\n            if (arr[i] !== val) {\n                return false;\n            }\n        }\n        return true;\n    };\n\n    // sums the numeric values in an array, ignoring other values\n    sum = function (vals) {\n        var total = 0, i;\n        for (i = vals.length; i--;) {\n            total += typeof vals[i] === 'number' ? vals[i] : 0;\n        }\n        return total;\n    };\n\n    ensureArray = function (val) {\n        return $.isArray(val) ? val : [val];\n    };\n\n    // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n    addCSS = function(css) {\n        var tag;\n        //if ('\\v' == 'v') /* ie only */ {\n        if (document.createStyleSheet) {\n            document.createStyleSheet().cssText = css;\n        } else {\n            tag = document.createElement('style');\n            tag.type = 'text/css';\n            document.getElementsByTagName('head')[0].appendChild(tag);\n            tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n        }\n    };\n\n    // Provide a cross-browser interface to a few simple drawing primitives\n    $.fn.simpledraw = function (width, height, useExisting, interact) {\n        var target, mhandler;\n        if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n            return target;\n        }\n\n        if ($.fn.sparkline.canvas === false) {\n            // We've already determined that neither Canvas nor VML are available\n            return false;\n\n        } else if ($.fn.sparkline.canvas === undefined) {\n            // No function defined yet -- need to see if we support Canvas or VML\n            var el = document.createElement('canvas');\n            if (!!(el.getContext && el.getContext('2d'))) {\n                // Canvas is available\n                $.fn.sparkline.canvas = function(width, height, target, interact) {\n                    return new VCanvas_canvas(width, height, target, interact);\n                };\n            } else if (document.namespaces && !document.namespaces.v) {\n                // VML is available\n                document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n                $.fn.sparkline.canvas = function(width, height, target, interact) {\n                    return new VCanvas_vml(width, height, target);\n                };\n            } else {\n                // Neither Canvas nor VML are available\n                $.fn.sparkline.canvas = false;\n                return false;\n            }\n        }\n\n        if (width === undefined) {\n            width = $(this).innerWidth();\n        }\n        if (height === undefined) {\n            height = $(this).innerHeight();\n        }\n\n        target = $.fn.sparkline.canvas(width, height, this, interact);\n\n        mhandler = $(this).data('_jqs_mhandler');\n        if (mhandler) {\n            mhandler.registerCanvas(target);\n        }\n        return target;\n    };\n\n    $.fn.cleardraw = function () {\n        var target = this.data('_jqs_vcanvas');\n        if (target) {\n            target.reset();\n        }\n    };\n\n    $.RangeMapClass = RangeMap = createClass({\n        init: function (map) {\n            var key, range, rangelist = [];\n            for (key in map) {\n                if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n                    range = key.split(':');\n                    range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n                    range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n                    range[2] = map[key];\n                    rangelist.push(range);\n                }\n            }\n            this.map = map;\n            this.rangelist = rangelist || false;\n        },\n\n        get: function (value) {\n            var rangelist = this.rangelist,\n                i, range, result;\n            if ((result = this.map[value]) !== undefined) {\n                return result;\n            }\n            if (rangelist) {\n                for (i = rangelist.length; i--;) {\n                    range = rangelist[i];\n                    if (range[0] <= value && range[1] >= value) {\n                        return range[2];\n                    }\n                }\n            }\n            return undefined;\n        }\n    });\n\n    // Convenience function\n    $.range_map = function(map) {\n        return new RangeMap(map);\n    };\n\n    MouseHandler = createClass({\n        init: function (el, options) {\n            var $el = $(el);\n            this.$el = $el;\n            this.options = options;\n            this.currentPageX = 0;\n            this.currentPageY = 0;\n            this.el = el;\n            this.splist = [];\n            this.tooltip = null;\n            this.over = false;\n            this.displayTooltips = !options.get('disableTooltips');\n            this.highlightEnabled = !options.get('disableHighlight');\n        },\n\n        registerSparkline: function (sp) {\n            this.splist.push(sp);\n            if (this.over) {\n                this.updateDisplay();\n            }\n        },\n\n        registerCanvas: function (canvas) {\n            var $canvas = $(canvas.canvas);\n            this.canvas = canvas;\n            this.$canvas = $canvas;\n            $canvas.mouseenter($.proxy(this.mouseenter, this));\n            $canvas.mouseleave($.proxy(this.mouseleave, this));\n            $canvas.click($.proxy(this.mouseclick, this));\n        },\n\n        reset: function (removeTooltip) {\n            this.splist = [];\n            if (this.tooltip && removeTooltip) {\n                this.tooltip.remove();\n                this.tooltip = undefined;\n            }\n        },\n\n        mouseclick: function (e) {\n            var clickEvent = $.Event('sparklineClick');\n            clickEvent.originalEvent = e;\n            clickEvent.sparklines = this.splist;\n            this.$el.trigger(clickEvent);\n        },\n\n        mouseenter: function (e) {\n            $(document.body).unbind('mousemove.jqs');\n            $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n            this.over = true;\n            this.currentPageX = e.pageX;\n            this.currentPageY = e.pageY;\n            this.currentEl = e.target;\n            if (!this.tooltip && this.displayTooltips) {\n                this.tooltip = new Tooltip(this.options);\n                this.tooltip.updatePosition(e.pageX, e.pageY);\n            }\n            this.updateDisplay();\n        },\n\n        mouseleave: function () {\n            $(document.body).unbind('mousemove.jqs');\n            var splist = this.splist,\n                 spcount = splist.length,\n                 needsRefresh = false,\n                 sp, i;\n            this.over = false;\n            this.currentEl = null;\n\n            if (this.tooltip) {\n                this.tooltip.remove();\n                this.tooltip = null;\n            }\n\n            for (i = 0; i < spcount; i++) {\n                sp = splist[i];\n                if (sp.clearRegionHighlight()) {\n                    needsRefresh = true;\n                }\n            }\n\n            if (needsRefresh) {\n                this.canvas.render();\n            }\n        },\n\n        mousemove: function (e) {\n            this.currentPageX = e.pageX;\n            this.currentPageY = e.pageY;\n            this.currentEl = e.target;\n            if (this.tooltip) {\n                this.tooltip.updatePosition(e.pageX, e.pageY);\n            }\n            this.updateDisplay();\n        },\n\n        updateDisplay: function () {\n            var splist = this.splist,\n                 spcount = splist.length,\n                 needsRefresh = false,\n                 offset = this.$canvas.offset(),\n                 localX = this.currentPageX - offset.left,\n                 localY = this.currentPageY - offset.top,\n                 tooltiphtml, sp, i, result, changeEvent;\n            if (!this.over) {\n                return;\n            }\n            for (i = 0; i < spcount; i++) {\n                sp = splist[i];\n                result = sp.setRegionHighlight(this.currentEl, localX, localY);\n                if (result) {\n                    needsRefresh = true;\n                }\n            }\n            if (needsRefresh) {\n                changeEvent = $.Event('sparklineRegionChange');\n                changeEvent.sparklines = this.splist;\n                this.$el.trigger(changeEvent);\n                if (this.tooltip) {\n                    tooltiphtml = '';\n                    for (i = 0; i < spcount; i++) {\n                        sp = splist[i];\n                        tooltiphtml += sp.getCurrentRegionTooltip();\n                    }\n                    this.tooltip.setContent(tooltiphtml);\n                }\n                if (!this.disableHighlight) {\n                    this.canvas.render();\n                }\n            }\n            if (result === null) {\n                this.mouseleave();\n            }\n        }\n    });\n\n\n    Tooltip = createClass({\n        sizeStyle: 'position: static !important;' +\n            'display: block !important;' +\n            'visibility: hidden !important;' +\n            'float: left !important;',\n\n        init: function (options) {\n            var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n                sizetipStyle = this.sizeStyle,\n                offset;\n            this.container = options.get('tooltipContainer') || document.body;\n            this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n            this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n            // remove any previous lingering tooltip\n            $('#jqssizetip').remove();\n            $('#jqstooltip').remove();\n            this.sizetip = $('<div/>', {\n                id: 'jqssizetip',\n                style: sizetipStyle,\n                'class': tooltipClassname\n            });\n            this.tooltip = $('<div/>', {\n                id: 'jqstooltip',\n                'class': tooltipClassname\n            }).appendTo(this.container);\n            // account for the container's location\n            offset = this.tooltip.offset();\n            this.offsetLeft = offset.left;\n            this.offsetTop = offset.top;\n            this.hidden = true;\n            $(window).unbind('resize.jqs scroll.jqs');\n            $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n            this.updateWindowDims();\n        },\n\n        updateWindowDims: function () {\n            this.scrollTop = $(window).scrollTop();\n            this.scrollLeft = $(window).scrollLeft();\n            this.scrollRight = this.scrollLeft + $(window).width();\n            this.updatePosition();\n        },\n\n        getSize: function (content) {\n            this.sizetip.html(content).appendTo(this.container);\n            this.width = this.sizetip.width() + 1;\n            this.height = this.sizetip.height();\n            this.sizetip.remove();\n        },\n\n        setContent: function (content) {\n            if (!content) {\n                this.tooltip.css('visibility', 'hidden');\n                this.hidden = true;\n                return;\n            }\n            this.getSize(content);\n            this.tooltip.html(content)\n                .css({\n                    'width': this.width,\n                    'height': this.height,\n                    'visibility': 'visible'\n                });\n            if (this.hidden) {\n                this.hidden = false;\n                this.updatePosition();\n            }\n        },\n\n        updatePosition: function (x, y) {\n            if (x === undefined) {\n                if (this.mousex === undefined) {\n                    return;\n                }\n                x = this.mousex - this.offsetLeft;\n                y = this.mousey - this.offsetTop;\n\n            } else {\n                this.mousex = x = x - this.offsetLeft;\n                this.mousey = y = y - this.offsetTop;\n            }\n            if (!this.height || !this.width || this.hidden) {\n                return;\n            }\n\n            y -= this.height + this.tooltipOffsetY;\n            x += this.tooltipOffsetX;\n\n            if (y < this.scrollTop) {\n                y = this.scrollTop;\n            }\n            if (x < this.scrollLeft) {\n                x = this.scrollLeft;\n            } else if (x + this.width > this.scrollRight) {\n                x = this.scrollRight - this.width;\n            }\n\n            this.tooltip.css({\n                'left': x,\n                'top': y\n            });\n        },\n\n        remove: function () {\n            this.tooltip.remove();\n            this.sizetip.remove();\n            this.sizetip = this.tooltip = undefined;\n            $(window).unbind('resize.jqs scroll.jqs');\n        }\n    });\n\n    initStyles = function() {\n        addCSS(defaultStyles);\n    };\n\n    $(initStyles);\n\n    pending = [];\n    $.fn.sparkline = function (userValues, userOptions) {\n        return this.each(function () {\n            var options = new $.fn.sparkline.options(this, userOptions),\n                 $this = $(this),\n                 render, i;\n            render = function () {\n                var values, width, height, tmp, mhandler, sp, vals;\n                if (userValues === 'html' || userValues === undefined) {\n                    vals = this.getAttribute(options.get('tagValuesAttribute'));\n                    if (vals === undefined || vals === null) {\n                        vals = $this.html();\n                    }\n                    values = vals.replace(/(^\\s*<!--)|(-->\\s*$)|\\s+/g, '').split(',');\n                } else {\n                    values = userValues;\n                }\n\n                width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n                if (options.get('height') === 'auto') {\n                    if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n                        // must be a better way to get the line height\n                        tmp = document.createElement('span');\n                        tmp.innerHTML = 'a';\n                        $this.html(tmp);\n                        height = $(tmp).innerHeight() || $(tmp).height();\n                        $(tmp).remove();\n                        tmp = null;\n                    }\n                } else {\n                    height = options.get('height');\n                }\n\n                if (!options.get('disableInteraction')) {\n                    mhandler = $.data(this, '_jqs_mhandler');\n                    if (!mhandler) {\n                        mhandler = new MouseHandler(this, options);\n                        $.data(this, '_jqs_mhandler', mhandler);\n                    } else if (!options.get('composite')) {\n                        mhandler.reset();\n                    }\n                } else {\n                    mhandler = false;\n                }\n\n                if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n                    if (!$.data(this, '_jqs_errnotify')) {\n                        alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n                        $.data(this, '_jqs_errnotify', true);\n                    }\n                    return;\n                }\n\n                sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n                sp.render();\n\n                if (mhandler) {\n                    mhandler.registerSparkline(sp);\n                }\n            };\n            if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n                if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n                    // remove any existing references to the element\n                    for (i = pending.length; i; i--) {\n                        if (pending[i - 1][0] == this) {\n                            pending.splice(i - 1, 1);\n                        }\n                    }\n                }\n                pending.push([this, render]);\n                $.data(this, '_jqs_pending', true);\n            } else {\n                render.call(this);\n            }\n        });\n    };\n\n    $.fn.sparkline.defaults = getDefaults();\n\n\n    $.sparkline_display_visible = function () {\n        var el, i, pl;\n        var done = [];\n        for (i = 0, pl = pending.length; i < pl; i++) {\n            el = pending[i][0];\n            if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n                pending[i][1].call(el);\n                $.data(pending[i][0], '_jqs_pending', false);\n                done.push(i);\n            } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n                // element has been inserted and removed from the DOM\n                // If it was not yet inserted into the dom then the .data request\n                // will return true.\n                // removing from the dom causes the data to be removed.\n                $.data(pending[i][0], '_jqs_pending', false);\n                done.push(i);\n            }\n        }\n        for (i = done.length; i; i--) {\n            pending.splice(done[i - 1], 1);\n        }\n    };\n\n\n    /**\n     * User option handler\n     */\n    $.fn.sparkline.options = createClass({\n        init: function (tag, userOptions) {\n            var extendedOptions, defaults, base, tagOptionType;\n            this.userOptions = userOptions = userOptions || {};\n            this.tag = tag;\n            this.tagValCache = {};\n            defaults = $.fn.sparkline.defaults;\n            base = defaults.common;\n            this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n            tagOptionType = this.getTagSetting('type');\n            if (tagOptionType === UNSET_OPTION) {\n                extendedOptions = defaults[userOptions.type || base.type];\n            } else {\n                extendedOptions = defaults[tagOptionType];\n            }\n            this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n        },\n\n\n        getTagSetting: function (key) {\n            var prefix = this.tagOptionsPrefix,\n                val, i, pairs, keyval;\n            if (prefix === false || prefix === undefined) {\n                return UNSET_OPTION;\n            }\n            if (this.tagValCache.hasOwnProperty(key)) {\n                val = this.tagValCache.key;\n            } else {\n                val = this.tag.getAttribute(prefix + key);\n                if (val === undefined || val === null) {\n                    val = UNSET_OPTION;\n                } else if (val.substr(0, 1) === '[') {\n                    val = val.substr(1, val.length - 2).split(',');\n                    for (i = val.length; i--;) {\n                        val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n                    }\n                } else if (val.substr(0, 1) === '{') {\n                    pairs = val.substr(1, val.length - 2).split(',');\n                    val = {};\n                    for (i = pairs.length; i--;) {\n                        keyval = pairs[i].split(':', 2);\n                        val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n                    }\n                } else {\n                    val = normalizeValue(val);\n                }\n                this.tagValCache.key = val;\n            }\n            return val;\n        },\n\n        get: function (key, defaultval) {\n            var tagOption = this.getTagSetting(key),\n                result;\n            if (tagOption !== UNSET_OPTION) {\n                return tagOption;\n            }\n            return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n        }\n    });\n\n\n    $.fn.sparkline._base = createClass({\n        disabled: false,\n\n        init: function (el, values, options, width, height) {\n            this.el = el;\n            this.$el = $(el);\n            this.values = values;\n            this.options = options;\n            this.width = width;\n            this.height = height;\n            this.currentRegion = undefined;\n        },\n\n        /**\n         * Setup the canvas\n         */\n        initTarget: function () {\n            var interactive = !this.options.get('disableInteraction');\n            if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n                this.disabled = true;\n            } else {\n                this.canvasWidth = this.target.pixelWidth;\n                this.canvasHeight = this.target.pixelHeight;\n            }\n        },\n\n        /**\n         * Actually render the chart to the canvas\n         */\n        render: function () {\n            if (this.disabled) {\n                this.el.innerHTML = '';\n                return false;\n            }\n            return true;\n        },\n\n        /**\n         * Return a region id for a given x/y co-ordinate\n         */\n        getRegion: function (x, y) {\n        },\n\n        /**\n         * Highlight an item based on the moused-over x,y co-ordinate\n         */\n        setRegionHighlight: function (el, x, y) {\n            var currentRegion = this.currentRegion,\n                highlightEnabled = !this.options.get('disableHighlight'),\n                newRegion;\n            if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n                return null;\n            }\n            newRegion = this.getRegion(el, x, y);\n            if (currentRegion !== newRegion) {\n                if (currentRegion !== undefined && highlightEnabled) {\n                    this.removeHighlight();\n                }\n                this.currentRegion = newRegion;\n                if (newRegion !== undefined && highlightEnabled) {\n                    this.renderHighlight();\n                }\n                return true;\n            }\n            return false;\n        },\n\n        /**\n         * Reset any currently highlighted item\n         */\n        clearRegionHighlight: function () {\n            if (this.currentRegion !== undefined) {\n                this.removeHighlight();\n                this.currentRegion = undefined;\n                return true;\n            }\n            return false;\n        },\n\n        renderHighlight: function () {\n            this.changeHighlight(true);\n        },\n\n        removeHighlight: function () {\n            this.changeHighlight(false);\n        },\n\n        changeHighlight: function (highlight)  {},\n\n        /**\n         * Fetch the HTML to display as a tooltip\n         */\n        getCurrentRegionTooltip: function () {\n            var options = this.options,\n                header = '',\n                entries = [],\n                fields, formats, formatlen, fclass, text, i,\n                showFields, showFieldsKey, newFields, fv,\n                formatter, format, fieldlen, j;\n            if (this.currentRegion === undefined) {\n                return '';\n            }\n            fields = this.getCurrentRegionFields();\n            formatter = options.get('tooltipFormatter');\n            if (formatter) {\n                return formatter(this, options, fields);\n            }\n            if (options.get('tooltipChartTitle')) {\n                header += '<div class=\"jqs jqstitle\">' + options.get('tooltipChartTitle') + '</div>\\n';\n            }\n            formats = this.options.get('tooltipFormat');\n            if (!formats) {\n                return '';\n            }\n            if (!$.isArray(formats)) {\n                formats = [formats];\n            }\n            if (!$.isArray(fields)) {\n                fields = [fields];\n            }\n            showFields = this.options.get('tooltipFormatFieldlist');\n            showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n            if (showFields && showFieldsKey) {\n                // user-selected ordering of fields\n                newFields = [];\n                for (i = fields.length; i--;) {\n                    fv = fields[i][showFieldsKey];\n                    if ((j = $.inArray(fv, showFields)) != -1) {\n                        newFields[j] = fields[i];\n                    }\n                }\n                fields = newFields;\n            }\n            formatlen = formats.length;\n            fieldlen = fields.length;\n            for (i = 0; i < formatlen; i++) {\n                format = formats[i];\n                if (typeof format === 'string') {\n                    format = new SPFormat(format);\n                }\n                fclass = format.fclass || 'jqsfield';\n                for (j = 0; j < fieldlen; j++) {\n                    if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n                        $.extend(fields[j], {\n                            prefix: options.get('tooltipPrefix'),\n                            suffix: options.get('tooltipSuffix')\n                        });\n                        text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n                        entries.push('<div class=\"' + fclass + '\">' + text + '</div>');\n                    }\n                }\n            }\n            if (entries.length) {\n                return header + entries.join('\\n');\n            }\n            return '';\n        },\n\n        getCurrentRegionFields: function () {},\n\n        calcHighlightColor: function (color, options) {\n            var highlightColor = options.get('highlightColor'),\n                lighten = options.get('highlightLighten'),\n                parse, mult, rgbnew, i;\n            if (highlightColor) {\n                return highlightColor;\n            }\n            if (lighten) {\n                // extract RGB values\n                parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n                if (parse) {\n                    rgbnew = [];\n                    mult = color.length === 4 ? 16 : 1;\n                    for (i = 0; i < 3; i++) {\n                        rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n                    }\n                    return 'rgb(' + rgbnew.join(',') + ')';\n                }\n\n            }\n            return color;\n        }\n\n    });\n\n    barHighlightMixin = {\n        changeHighlight: function (highlight) {\n            var currentRegion = this.currentRegion,\n                target = this.target,\n                shapeids = this.regionShapes[currentRegion],\n                newShapes;\n            // will be null if the region value was null\n            if (shapeids) {\n                newShapes = this.renderRegion(currentRegion, highlight);\n                if ($.isArray(newShapes) || $.isArray(shapeids)) {\n                    target.replaceWithShapes(shapeids, newShapes);\n                    this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n                        return newShape.id;\n                    });\n                } else {\n                    target.replaceWithShape(shapeids, newShapes);\n                    this.regionShapes[currentRegion] = newShapes.id;\n                }\n            }\n        },\n\n        render: function () {\n            var values = this.values,\n                target = this.target,\n                regionShapes = this.regionShapes,\n                shapes, ids, i, j;\n\n            if (!this.cls._super.render.call(this)) {\n                return;\n            }\n            for (i = values.length; i--;) {\n                shapes = this.renderRegion(i);\n                if (shapes) {\n                    if ($.isArray(shapes)) {\n                        ids = [];\n                        for (j = shapes.length; j--;) {\n                            shapes[j].append();\n                            ids.push(shapes[j].id);\n                        }\n                        regionShapes[i] = ids;\n                    } else {\n                        shapes.append();\n                        regionShapes[i] = shapes.id; // store just the shapeid\n                    }\n                } else {\n                    // null value\n                    regionShapes[i] = null;\n                }\n            }\n            target.render();\n        }\n    };\n\n    /**\n     * Line charts\n     */\n    $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n        type: 'line',\n\n        init: function (el, values, options, width, height) {\n            line._super.init.call(this, el, values, options, width, height);\n            this.vertices = [];\n            this.regionMap = [];\n            this.xvalues = [];\n            this.yvalues = [];\n            this.yminmax = [];\n            this.hightlightSpotId = null;\n            this.lastShapeId = null;\n            this.initTarget();\n        },\n\n        getRegion: function (el, x, y) {\n            var i,\n                regionMap = this.regionMap; // maps regions to value positions\n            for (i = regionMap.length; i--;) {\n                if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n                    return regionMap[i][2];\n                }\n            }\n            return undefined;\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                isNull: this.yvalues[currentRegion] === null,\n                x: this.xvalues[currentRegion],\n                y: this.yvalues[currentRegion],\n                color: this.options.get('lineColor'),\n                fillColor: this.options.get('fillColor'),\n                offset: currentRegion\n            };\n        },\n\n        renderHighlight: function () {\n            var currentRegion = this.currentRegion,\n                target = this.target,\n                vertex = this.vertices[currentRegion],\n                options = this.options,\n                spotRadius = options.get('spotRadius'),\n                highlightSpotColor = options.get('highlightSpotColor'),\n                highlightLineColor = options.get('highlightLineColor'),\n                highlightSpot, highlightLine;\n\n            if (!vertex) {\n                return;\n            }\n            if (spotRadius && highlightSpotColor) {\n                highlightSpot = target.drawCircle(vertex[0], vertex[1],\n                    spotRadius, undefined, highlightSpotColor);\n                this.highlightSpotId = highlightSpot.id;\n                target.insertAfterShape(this.lastShapeId, highlightSpot);\n            }\n            if (highlightLineColor) {\n                highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n                    this.canvasTop + this.canvasHeight, highlightLineColor);\n                this.highlightLineId = highlightLine.id;\n                target.insertAfterShape(this.lastShapeId, highlightLine);\n            }\n        },\n\n        removeHighlight: function () {\n            var target = this.target;\n            if (this.highlightSpotId) {\n                target.removeShapeId(this.highlightSpotId);\n                this.highlightSpotId = null;\n            }\n            if (this.highlightLineId) {\n                target.removeShapeId(this.highlightLineId);\n                this.highlightLineId = null;\n            }\n        },\n\n        scanValues: function () {\n            var values = this.values,\n                valcount = values.length,\n                xvalues = this.xvalues,\n                yvalues = this.yvalues,\n                yminmax = this.yminmax,\n                i, val, isStr, isArray, sp;\n            for (i = 0; i < valcount; i++) {\n                val = values[i];\n                isStr = typeof(values[i]) === 'string';\n                isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n                sp = isStr && values[i].split(':');\n                if (isStr && sp.length === 2) { // x:y\n                    xvalues.push(Number(sp[0]));\n                    yvalues.push(Number(sp[1]));\n                    yminmax.push(Number(sp[1]));\n                } else if (isArray) {\n                    xvalues.push(val[0]);\n                    yvalues.push(val[1]);\n                    yminmax.push(val[1]);\n                } else {\n                    xvalues.push(i);\n                    if (values[i] === null || values[i] === 'null') {\n                        yvalues.push(null);\n                    } else {\n                        yvalues.push(Number(val));\n                        yminmax.push(Number(val));\n                    }\n                }\n            }\n            if (this.options.get('xvalues')) {\n                xvalues = this.options.get('xvalues');\n            }\n\n            this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n            this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n            this.maxx = Math.max.apply(Math, xvalues);\n            this.minx = Math.min.apply(Math, xvalues);\n\n            this.xvalues = xvalues;\n            this.yvalues = yvalues;\n            this.yminmax = yminmax;\n\n        },\n\n        processRangeOptions: function () {\n            var options = this.options,\n                normalRangeMin = options.get('normalRangeMin'),\n                normalRangeMax = options.get('normalRangeMax');\n\n            if (normalRangeMin !== undefined) {\n                if (normalRangeMin < this.miny) {\n                    this.miny = normalRangeMin;\n                }\n                if (normalRangeMax > this.maxy) {\n                    this.maxy = normalRangeMax;\n                }\n            }\n            if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n                this.miny = options.get('chartRangeMin');\n            }\n            if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n                this.maxy = options.get('chartRangeMax');\n            }\n            if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n                this.minx = options.get('chartRangeMinX');\n            }\n            if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n                this.maxx = options.get('chartRangeMaxX');\n            }\n\n        },\n\n        drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n            var normalRangeMin = this.options.get('normalRangeMin'),\n                normalRangeMax = this.options.get('normalRangeMax'),\n                ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n                height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n            this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n        },\n\n        render: function () {\n            var options = this.options,\n                target = this.target,\n                canvasWidth = this.canvasWidth,\n                canvasHeight = this.canvasHeight,\n                vertices = this.vertices,\n                spotRadius = options.get('spotRadius'),\n                regionMap = this.regionMap,\n                rangex, rangey, yvallast,\n                canvasTop, canvasLeft,\n                vertex, path, paths, x, y, xnext, xpos, xposnext,\n                last, next, yvalcount, lineShapes, fillShapes, plen,\n                valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n            if (!line._super.render.call(this)) {\n                return;\n            }\n\n            this.scanValues();\n            this.processRangeOptions();\n\n            xvalues = this.xvalues;\n            yvalues = this.yvalues;\n\n            if (!this.yminmax.length || this.yvalues.length < 2) {\n                // empty or all null valuess\n                return;\n            }\n\n            canvasTop = canvasLeft = 0;\n\n            rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n            rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n            yvallast = this.yvalues.length - 1;\n\n            if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n                spotRadius = 0;\n            }\n            if (spotRadius) {\n                // adjust the canvas size as required so that spots will fit\n                hlSpotsEnabled = options.get('highlightSpotColor') &&  !options.get('disableInteraction');\n                if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n                    canvasHeight -= Math.ceil(spotRadius);\n                }\n                if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n                    canvasHeight -= Math.ceil(spotRadius);\n                    canvasTop += Math.ceil(spotRadius);\n                }\n                if (hlSpotsEnabled ||\n                     ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n                    canvasLeft += Math.ceil(spotRadius);\n                    canvasWidth -= Math.ceil(spotRadius);\n                }\n                if (hlSpotsEnabled || options.get('spotColor') ||\n                    (options.get('minSpotColor') || options.get('maxSpotColor') &&\n                        (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n                    canvasWidth -= Math.ceil(spotRadius);\n                }\n            }\n\n\n            canvasHeight--;\n\n            if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n                this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n            }\n\n            path = [];\n            paths = [path];\n            last = next = null;\n            yvalcount = yvalues.length;\n            for (i = 0; i < yvalcount; i++) {\n                x = xvalues[i];\n                xnext = xvalues[i + 1];\n                y = yvalues[i];\n                xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n                xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n                next = xpos + ((xposnext - xpos) / 2);\n                regionMap[i] = [last || 0, next, i];\n                last = next;\n                if (y === null) {\n                    if (i) {\n                        if (yvalues[i - 1] !== null) {\n                            path = [];\n                            paths.push(path);\n                        }\n                        vertices.push(null);\n                    }\n                } else {\n                    if (y < this.miny) {\n                        y = this.miny;\n                    }\n                    if (y > this.maxy) {\n                        y = this.maxy;\n                    }\n                    if (!path.length) {\n                        // previous value was null\n                        path.push([xpos, canvasTop + canvasHeight]);\n                    }\n                    vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n                    path.push(vertex);\n                    vertices.push(vertex);\n                }\n            }\n\n            lineShapes = [];\n            fillShapes = [];\n            plen = paths.length;\n            for (i = 0; i < plen; i++) {\n                path = paths[i];\n                if (path.length) {\n                    if (options.get('fillColor')) {\n                        path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n                        fillShapes.push(path.slice(0));\n                        path.pop();\n                    }\n                    // if there's only a single point in this path, then we want to display it\n                    // as a vertical line which means we keep path[0]  as is\n                    if (path.length > 2) {\n                        // else we want the first value\n                        path[0] = [path[0][0], path[1][1]];\n                    }\n                    lineShapes.push(path);\n                }\n            }\n\n            // draw the fill first, then optionally the normal range, then the line on top of that\n            plen = fillShapes.length;\n            for (i = 0; i < plen; i++) {\n                target.drawShape(fillShapes[i],\n                    options.get('fillColor'), options.get('fillColor')).append();\n            }\n\n            if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n                this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n            }\n\n            plen = lineShapes.length;\n            for (i = 0; i < plen; i++) {\n                target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n                    options.get('lineWidth')).append();\n            }\n\n            if (spotRadius && options.get('valueSpots')) {\n                valueSpots = options.get('valueSpots');\n                if (valueSpots.get === undefined) {\n                    valueSpots = new RangeMap(valueSpots);\n                }\n                for (i = 0; i < yvalcount; i++) {\n                    color = valueSpots.get(yvalues[i]);\n                    if (color) {\n                        target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n                            canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n                            spotRadius, undefined,\n                            color).append();\n                    }\n                }\n\n            }\n            if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n                target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n                    canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n                    spotRadius, undefined,\n                    options.get('spotColor')).append();\n            }\n            if (this.maxy !== this.minyorg) {\n                if (spotRadius && options.get('minSpotColor')) {\n                    x = xvalues[$.inArray(this.minyorg, yvalues)];\n                    target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n                        canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n                        spotRadius, undefined,\n                        options.get('minSpotColor')).append();\n                }\n                if (spotRadius && options.get('maxSpotColor')) {\n                    x = xvalues[$.inArray(this.maxyorg, yvalues)];\n                    target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n                        canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n                        spotRadius, undefined,\n                        options.get('maxSpotColor')).append();\n                }\n            }\n\n            this.lastShapeId = target.getLastShapeId();\n            this.canvasTop = canvasTop;\n            target.render();\n        }\n    });\n\n    /**\n     * Bar charts\n     */\n    $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n        type: 'bar',\n\n        init: function (el, values, options, width, height) {\n            var barWidth = parseInt(options.get('barWidth'), 10),\n                barSpacing = parseInt(options.get('barSpacing'), 10),\n                chartRangeMin = options.get('chartRangeMin'),\n                chartRangeMax = options.get('chartRangeMax'),\n                chartRangeClip = options.get('chartRangeClip'),\n                stackMin = Infinity,\n                stackMax = -Infinity,\n                isStackString, groupMin, groupMax, stackRanges,\n                numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n                stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n            bar._super.init.call(this, el, values, options, width, height);\n\n            // scan values to determine whether to stack bars\n            for (i = 0, vlen = values.length; i < vlen; i++) {\n                val = values[i];\n                isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n                if (isStackString || $.isArray(val)) {\n                    stacked = true;\n                    if (isStackString) {\n                        val = values[i] = normalizeValues(val.split(':'));\n                    }\n                    val = remove(val, null); // min/max will treat null as zero\n                    groupMin = Math.min.apply(Math, val);\n                    groupMax = Math.max.apply(Math, val);\n                    if (groupMin < stackMin) {\n                        stackMin = groupMin;\n                    }\n                    if (groupMax > stackMax) {\n                        stackMax = groupMax;\n                    }\n                }\n            }\n\n            this.stacked = stacked;\n            this.regionShapes = {};\n            this.barWidth = barWidth;\n            this.barSpacing = barSpacing;\n            this.totalBarWidth = barWidth + barSpacing;\n            this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n            this.initTarget();\n\n            if (chartRangeClip) {\n                clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n                clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n            }\n\n            numValues = [];\n            stackRanges = stacked ? [] : numValues;\n            var stackTotals = [];\n            var stackRangesNeg = [];\n            for (i = 0, vlen = values.length; i < vlen; i++) {\n                if (stacked) {\n                    vlist = values[i];\n                    values[i] = svals = [];\n                    stackTotals[i] = 0;\n                    stackRanges[i] = stackRangesNeg[i] = 0;\n                    for (j = 0, slen = vlist.length; j < slen; j++) {\n                        val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n                        if (val !== null) {\n                            if (val > 0) {\n                                stackTotals[i] += val;\n                            }\n                            if (stackMin < 0 && stackMax > 0) {\n                                if (val < 0) {\n                                    stackRangesNeg[i] += Math.abs(val);\n                                } else {\n                                    stackRanges[i] += val;\n                                }\n                            } else {\n                                stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n                            }\n                            numValues.push(val);\n                        }\n                    }\n                } else {\n                    val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n                    val = values[i] = normalizeValue(val);\n                    if (val !== null) {\n                        numValues.push(val);\n                    }\n                }\n            }\n            this.max = max = Math.max.apply(Math, numValues);\n            this.min = min = Math.min.apply(Math, numValues);\n            this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n            this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n            if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n                min = options.get('chartRangeMin');\n            }\n            if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n                max = options.get('chartRangeMax');\n            }\n\n            this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n            if (min <= 0 && max >= 0 && zeroAxis) {\n                xaxisOffset = 0;\n            } else if (zeroAxis == false) {\n                xaxisOffset = min;\n            } else if (min > 0) {\n                xaxisOffset = min;\n            } else {\n                xaxisOffset = max;\n            }\n            this.xaxisOffset = xaxisOffset;\n\n            range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n            // as we plot zero/min values a single pixel line, we add a pixel to all other\n            // values - Reduce the effective canvas size to suit\n            this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n            if (min < xaxisOffset) {\n                yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n                yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n                if (yoffset !== Math.ceil(yoffset)) {\n                    this.canvasHeightEf -= 2;\n                    yoffset = Math.ceil(yoffset);\n                }\n            } else {\n                yoffset = this.canvasHeight;\n            }\n            this.yoffset = yoffset;\n\n            if ($.isArray(options.get('colorMap'))) {\n                this.colorMapByIndex = options.get('colorMap');\n                this.colorMapByValue = null;\n            } else {\n                this.colorMapByIndex = null;\n                this.colorMapByValue = options.get('colorMap');\n                if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n                    this.colorMapByValue = new RangeMap(this.colorMapByValue);\n                }\n            }\n\n            this.range = range;\n        },\n\n        getRegion: function (el, x, y) {\n            var result = Math.floor(x / this.totalBarWidth);\n            return (result < 0 || result >= this.values.length) ? undefined : result;\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion,\n                values = ensureArray(this.values[currentRegion]),\n                result = [],\n                value, i;\n            for (i = values.length; i--;) {\n                value = values[i];\n                result.push({\n                    isNull: value === null,\n                    value: value,\n                    color: this.calcColor(i, value, currentRegion),\n                    offset: currentRegion\n                });\n            }\n            return result;\n        },\n\n        calcColor: function (stacknum, value, valuenum) {\n            var colorMapByIndex = this.colorMapByIndex,\n                colorMapByValue = this.colorMapByValue,\n                options = this.options,\n                color, newColor;\n            if (this.stacked) {\n                color = options.get('stackedBarColor');\n            } else {\n                color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n            }\n            if (value === 0 && options.get('zeroColor') !== undefined) {\n                color = options.get('zeroColor');\n            }\n            if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n                color = newColor;\n            } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n                color = colorMapByIndex[valuenum];\n            }\n            return $.isArray(color) ? color[stacknum % color.length] : color;\n        },\n\n        /**\n         * Render bar(s) for a region\n         */\n        renderRegion: function (valuenum, highlight) {\n            var vals = this.values[valuenum],\n                options = this.options,\n                xaxisOffset = this.xaxisOffset,\n                result = [],\n                range = this.range,\n                stacked = this.stacked,\n                target = this.target,\n                x = valuenum * this.totalBarWidth,\n                canvasHeightEf = this.canvasHeightEf,\n                yoffset = this.yoffset,\n                y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n            vals = $.isArray(vals) ? vals : [vals];\n            valcount = vals.length;\n            val = vals[0];\n            isNull = all(null, vals);\n            allMin = all(xaxisOffset, vals, true);\n\n            if (isNull) {\n                if (options.get('nullColor')) {\n                    color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n                    y = (yoffset > 0) ? yoffset - 1 : yoffset;\n                    return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n                } else {\n                    return undefined;\n                }\n            }\n            yoffsetNeg = yoffset;\n            for (i = 0; i < valcount; i++) {\n                val = vals[i];\n\n                if (stacked && val === xaxisOffset) {\n                    if (!allMin || minPlotted) {\n                        continue;\n                    }\n                    minPlotted = true;\n                }\n\n                if (range > 0) {\n                    height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n                } else {\n                    height = 1;\n                }\n                if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n                    y = yoffsetNeg;\n                    yoffsetNeg += height;\n                } else {\n                    y = yoffset - height;\n                    yoffset -= height;\n                }\n                color = this.calcColor(i, val, valuenum);\n                if (highlight) {\n                    color = this.calcHighlightColor(color, options);\n                }\n                result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n            }\n            if (result.length === 1) {\n                return result[0];\n            }\n            return result;\n        }\n    });\n\n    /**\n     * Tristate charts\n     */\n    $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n        type: 'tristate',\n\n        init: function (el, values, options, width, height) {\n            var barWidth = parseInt(options.get('barWidth'), 10),\n                barSpacing = parseInt(options.get('barSpacing'), 10);\n            tristate._super.init.call(this, el, values, options, width, height);\n\n            this.regionShapes = {};\n            this.barWidth = barWidth;\n            this.barSpacing = barSpacing;\n            this.totalBarWidth = barWidth + barSpacing;\n            this.values = $.map(values, Number);\n            this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n            if ($.isArray(options.get('colorMap'))) {\n                this.colorMapByIndex = options.get('colorMap');\n                this.colorMapByValue = null;\n            } else {\n                this.colorMapByIndex = null;\n                this.colorMapByValue = options.get('colorMap');\n                if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n                    this.colorMapByValue = new RangeMap(this.colorMapByValue);\n                }\n            }\n            this.initTarget();\n        },\n\n        getRegion: function (el, x, y) {\n            return Math.floor(x / this.totalBarWidth);\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                isNull: this.values[currentRegion] === undefined,\n                value: this.values[currentRegion],\n                color: this.calcColor(this.values[currentRegion], currentRegion),\n                offset: currentRegion\n            };\n        },\n\n        calcColor: function (value, valuenum) {\n            var values = this.values,\n                options = this.options,\n                colorMapByIndex = this.colorMapByIndex,\n                colorMapByValue = this.colorMapByValue,\n                color, newColor;\n\n            if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n                color = newColor;\n            } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n                color = colorMapByIndex[valuenum];\n            } else if (values[valuenum] < 0) {\n                color = options.get('negBarColor');\n            } else if (values[valuenum] > 0) {\n                color = options.get('posBarColor');\n            } else {\n                color = options.get('zeroBarColor');\n            }\n            return color;\n        },\n\n        renderRegion: function (valuenum, highlight) {\n            var values = this.values,\n                options = this.options,\n                target = this.target,\n                canvasHeight, height, halfHeight,\n                x, y, color;\n\n            canvasHeight = target.pixelHeight;\n            halfHeight = Math.round(canvasHeight / 2);\n\n            x = valuenum * this.totalBarWidth;\n            if (values[valuenum] < 0) {\n                y = halfHeight;\n                height = halfHeight - 1;\n            } else if (values[valuenum] > 0) {\n                y = 0;\n                height = halfHeight - 1;\n            } else {\n                y = halfHeight - 1;\n                height = 2;\n            }\n            color = this.calcColor(values[valuenum], valuenum);\n            if (color === null) {\n                return;\n            }\n            if (highlight) {\n                color = this.calcHighlightColor(color, options);\n            }\n            return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n        }\n    });\n\n    /**\n     * Discrete charts\n     */\n    $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n        type: 'discrete',\n\n        init: function (el, values, options, width, height) {\n            discrete._super.init.call(this, el, values, options, width, height);\n\n            this.regionShapes = {};\n            this.values = values = $.map(values, Number);\n            this.min = Math.min.apply(Math, values);\n            this.max = Math.max.apply(Math, values);\n            this.range = this.max - this.min;\n            this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n            this.interval = Math.floor(width / values.length);\n            this.itemWidth = width / values.length;\n            if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n                this.min = options.get('chartRangeMin');\n            }\n            if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n                this.max = options.get('chartRangeMax');\n            }\n            this.initTarget();\n            if (this.target) {\n                this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n            }\n        },\n\n        getRegion: function (el, x, y) {\n            return Math.floor(x / this.itemWidth);\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                isNull: this.values[currentRegion] === undefined,\n                value: this.values[currentRegion],\n                offset: currentRegion\n            };\n        },\n\n        renderRegion: function (valuenum, highlight) {\n            var values = this.values,\n                options = this.options,\n                min = this.min,\n                max = this.max,\n                range = this.range,\n                interval = this.interval,\n                target = this.target,\n                canvasHeight = this.canvasHeight,\n                lineHeight = this.lineHeight,\n                pheight = canvasHeight - lineHeight,\n                ytop, val, color, x;\n\n            val = clipval(values[valuenum], min, max);\n            x = valuenum * interval;\n            ytop = Math.round(pheight - pheight * ((val - min) / range));\n            color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n            if (highlight) {\n                color = this.calcHighlightColor(color, options);\n            }\n            return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n        }\n    });\n\n    /**\n     * Bullet charts\n     */\n    $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n        type: 'bullet',\n\n        init: function (el, values, options, width, height) {\n            var min, max, vals;\n            bullet._super.init.call(this, el, values, options, width, height);\n\n            // values: target, performance, range1, range2, range3\n            this.values = values = normalizeValues(values);\n            // target or performance could be null\n            vals = values.slice();\n            vals[0] = vals[0] === null ? vals[2] : vals[0];\n            vals[1] = values[1] === null ? vals[2] : vals[1];\n            min = Math.min.apply(Math, values);\n            max = Math.max.apply(Math, values);\n            if (options.get('base') === undefined) {\n                min = min < 0 ? min : 0;\n            } else {\n                min = options.get('base');\n            }\n            this.min = min;\n            this.max = max;\n            this.range = max - min;\n            this.shapes = {};\n            this.valueShapes = {};\n            this.regiondata = {};\n            this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n            this.target = this.$el.simpledraw(width, height, options.get('composite'));\n            if (!values.length) {\n                this.disabled = true;\n            }\n            this.initTarget();\n        },\n\n        getRegion: function (el, x, y) {\n            var shapeid = this.target.getShapeAt(el, x, y);\n            return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                fieldkey: currentRegion.substr(0, 1),\n                value: this.values[currentRegion.substr(1)],\n                region: currentRegion\n            };\n        },\n\n        changeHighlight: function (highlight) {\n            var currentRegion = this.currentRegion,\n                shapeid = this.valueShapes[currentRegion],\n                shape;\n            delete this.shapes[shapeid];\n            switch (currentRegion.substr(0, 1)) {\n                case 'r':\n                    shape = this.renderRange(currentRegion.substr(1), highlight);\n                    break;\n                case 'p':\n                    shape = this.renderPerformance(highlight);\n                    break;\n                case 't':\n                    shape = this.renderTarget(highlight);\n                    break;\n            }\n            this.valueShapes[currentRegion] = shape.id;\n            this.shapes[shape.id] = currentRegion;\n            this.target.replaceWithShape(shapeid, shape);\n        },\n\n        renderRange: function (rn, highlight) {\n            var rangeval = this.values[rn],\n                rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n                color = this.options.get('rangeColors')[rn - 2];\n            if (highlight) {\n                color = this.calcHighlightColor(color, this.options);\n            }\n            return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n        },\n\n        renderPerformance: function (highlight) {\n            var perfval = this.values[1],\n                perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n                color = this.options.get('performanceColor');\n            if (highlight) {\n                color = this.calcHighlightColor(color, this.options);\n            }\n            return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n                Math.round(this.canvasHeight * 0.4) - 1, color, color);\n        },\n\n        renderTarget: function (highlight) {\n            var targetval = this.values[0],\n                x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n                targettop = Math.round(this.canvasHeight * 0.10),\n                targetheight = this.canvasHeight - (targettop * 2),\n                color = this.options.get('targetColor');\n            if (highlight) {\n                color = this.calcHighlightColor(color, this.options);\n            }\n            return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n        },\n\n        render: function () {\n            var vlen = this.values.length,\n                target = this.target,\n                i, shape;\n            if (!bullet._super.render.call(this)) {\n                return;\n            }\n            for (i = 2; i < vlen; i++) {\n                shape = this.renderRange(i).append();\n                this.shapes[shape.id] = 'r' + i;\n                this.valueShapes['r' + i] = shape.id;\n            }\n            if (this.values[1] !== null) {\n                shape = this.renderPerformance().append();\n                this.shapes[shape.id] = 'p1';\n                this.valueShapes.p1 = shape.id;\n            }\n            if (this.values[0] !== null) {\n                shape = this.renderTarget().append();\n                this.shapes[shape.id] = 't0';\n                this.valueShapes.t0 = shape.id;\n            }\n            target.render();\n        }\n    });\n\n    /**\n     * Pie charts\n     */\n    $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n        type: 'pie',\n\n        init: function (el, values, options, width, height) {\n            var total = 0, i;\n\n            pie._super.init.call(this, el, values, options, width, height);\n\n            this.shapes = {}; // map shape ids to value offsets\n            this.valueShapes = {}; // maps value offsets to shape ids\n            this.values = values = $.map(values, Number);\n\n            if (options.get('width') === 'auto') {\n                this.width = this.height;\n            }\n\n            if (values.length > 0) {\n                for (i = values.length; i--;) {\n                    total += values[i];\n                }\n            }\n            this.total = total;\n            this.initTarget();\n            this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n        },\n\n        getRegion: function (el, x, y) {\n            var shapeid = this.target.getShapeAt(el, x, y);\n            return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                isNull: this.values[currentRegion] === undefined,\n                value: this.values[currentRegion],\n                percent: this.values[currentRegion] / this.total * 100,\n                color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n                offset: currentRegion\n            };\n        },\n\n        changeHighlight: function (highlight) {\n            var currentRegion = this.currentRegion,\n                 newslice = this.renderSlice(currentRegion, highlight),\n                 shapeid = this.valueShapes[currentRegion];\n            delete this.shapes[shapeid];\n            this.target.replaceWithShape(shapeid, newslice);\n            this.valueShapes[currentRegion] = newslice.id;\n            this.shapes[newslice.id] = currentRegion;\n        },\n\n        renderSlice: function (valuenum, highlight) {\n            var target = this.target,\n                options = this.options,\n                radius = this.radius,\n                borderWidth = options.get('borderWidth'),\n                offset = options.get('offset'),\n                circle = 2 * Math.PI,\n                values = this.values,\n                total = this.total,\n                next = offset ? (2*Math.PI)*(offset/360) : 0,\n                start, end, i, vlen, color;\n\n            vlen = values.length;\n            for (i = 0; i < vlen; i++) {\n                start = next;\n                end = next;\n                if (total > 0) {  // avoid divide by zero\n                    end = next + (circle * (values[i] / total));\n                }\n                if (valuenum === i) {\n                    color = options.get('sliceColors')[i % options.get('sliceColors').length];\n                    if (highlight) {\n                        color = this.calcHighlightColor(color, options);\n                    }\n\n                    return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n                }\n                next = end;\n            }\n        },\n\n        render: function () {\n            var target = this.target,\n                values = this.values,\n                options = this.options,\n                radius = this.radius,\n                borderWidth = options.get('borderWidth'),\n                shape, i;\n\n            if (!pie._super.render.call(this)) {\n                return;\n            }\n            if (borderWidth) {\n                target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n                    options.get('borderColor'), undefined, borderWidth).append();\n            }\n            for (i = values.length; i--;) {\n                if (values[i]) { // don't render zero values\n                    shape = this.renderSlice(i).append();\n                    this.valueShapes[i] = shape.id; // store just the shapeid\n                    this.shapes[shape.id] = i;\n                }\n            }\n            target.render();\n        }\n    });\n\n    /**\n     * Box plots\n     */\n    $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n        type: 'box',\n\n        init: function (el, values, options, width, height) {\n            box._super.init.call(this, el, values, options, width, height);\n            this.values = $.map(values, Number);\n            this.width = options.get('width') === 'auto' ? '4.0em' : width;\n            this.initTarget();\n            if (!this.values.length) {\n                this.disabled = 1;\n            }\n        },\n\n        /**\n         * Simulate a single region\n         */\n        getRegion: function () {\n            return 1;\n        },\n\n        getCurrentRegionFields: function () {\n            var result = [\n                { field: 'lq', value: this.quartiles[0] },\n                { field: 'med', value: this.quartiles[1] },\n                { field: 'uq', value: this.quartiles[2] }\n            ];\n            if (this.loutlier !== undefined) {\n                result.push({ field: 'lo', value: this.loutlier});\n            }\n            if (this.routlier !== undefined) {\n                result.push({ field: 'ro', value: this.routlier});\n            }\n            if (this.lwhisker !== undefined) {\n                result.push({ field: 'lw', value: this.lwhisker});\n            }\n            if (this.rwhisker !== undefined) {\n                result.push({ field: 'rw', value: this.rwhisker});\n            }\n            return result;\n        },\n\n        render: function () {\n            var target = this.target,\n                values = this.values,\n                vlen = values.length,\n                options = this.options,\n                canvasWidth = this.canvasWidth,\n                canvasHeight = this.canvasHeight,\n                minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n                maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n                canvasLeft = 0,\n                lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n                size, unitSize;\n\n            if (!box._super.render.call(this)) {\n                return;\n            }\n\n            if (options.get('raw')) {\n                if (options.get('showOutliers') && values.length > 5) {\n                    loutlier = values[0];\n                    lwhisker = values[1];\n                    q1 = values[2];\n                    q2 = values[3];\n                    q3 = values[4];\n                    rwhisker = values[5];\n                    routlier = values[6];\n                } else {\n                    lwhisker = values[0];\n                    q1 = values[1];\n                    q2 = values[2];\n                    q3 = values[3];\n                    rwhisker = values[4];\n                }\n            } else {\n                values.sort(function (a, b) { return a - b; });\n                q1 = quartile(values, 1);\n                q2 = quartile(values, 2);\n                q3 = quartile(values, 3);\n                iqr = q3 - q1;\n                if (options.get('showOutliers')) {\n                    lwhisker = rwhisker = undefined;\n                    for (i = 0; i < vlen; i++) {\n                        if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n                            lwhisker = values[i];\n                        }\n                        if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n                            rwhisker = values[i];\n                        }\n                    }\n                    loutlier = values[0];\n                    routlier = values[vlen - 1];\n                } else {\n                    lwhisker = values[0];\n                    rwhisker = values[vlen - 1];\n                }\n            }\n            this.quartiles = [q1, q2, q3];\n            this.lwhisker = lwhisker;\n            this.rwhisker = rwhisker;\n            this.loutlier = loutlier;\n            this.routlier = routlier;\n\n            unitSize = canvasWidth / (maxValue - minValue + 1);\n            if (options.get('showOutliers')) {\n                canvasLeft = Math.ceil(options.get('spotRadius'));\n                canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n                unitSize = canvasWidth / (maxValue - minValue + 1);\n                if (loutlier < lwhisker) {\n                    target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n                        canvasHeight / 2,\n                        options.get('spotRadius'),\n                        options.get('outlierLineColor'),\n                        options.get('outlierFillColor')).append();\n                }\n                if (routlier > rwhisker) {\n                    target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n                        canvasHeight / 2,\n                        options.get('spotRadius'),\n                        options.get('outlierLineColor'),\n                        options.get('outlierFillColor')).append();\n                }\n            }\n\n            // box\n            target.drawRect(\n                Math.round((q1 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight * 0.1),\n                Math.round((q3 - q1) * unitSize),\n                Math.round(canvasHeight * 0.8),\n                options.get('boxLineColor'),\n                options.get('boxFillColor')).append();\n            // left whisker\n            target.drawLine(\n                Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 2),\n                Math.round((q1 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 2),\n                options.get('lineColor')).append();\n            target.drawLine(\n                Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 4),\n                Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight - canvasHeight / 4),\n                options.get('whiskerColor')).append();\n            // right whisker\n            target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 2),\n                Math.round((q3 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 2),\n                options.get('lineColor')).append();\n            target.drawLine(\n                Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 4),\n                Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight - canvasHeight / 4),\n                options.get('whiskerColor')).append();\n            // median line\n            target.drawLine(\n                Math.round((q2 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight * 0.1),\n                Math.round((q2 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight * 0.9),\n                options.get('medianColor')).append();\n            if (options.get('target')) {\n                size = Math.ceil(options.get('spotRadius'));\n                target.drawLine(\n                    Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n                    Math.round((canvasHeight / 2) - size),\n                    Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n                    Math.round((canvasHeight / 2) + size),\n                    options.get('targetColor')).append();\n                target.drawLine(\n                    Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n                    Math.round(canvasHeight / 2),\n                    Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n                    Math.round(canvasHeight / 2),\n                    options.get('targetColor')).append();\n            }\n            target.render();\n        }\n    });\n\n    // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n    // This is accessible as $(foo).simpledraw()\n\n    VShape = createClass({\n        init: function (target, id, type, args) {\n            this.target = target;\n            this.id = id;\n            this.type = type;\n            this.args = args;\n        },\n        append: function () {\n            this.target.appendShape(this);\n            return this;\n        }\n    });\n\n    VCanvas_base = createClass({\n        _pxregex: /(\\d+)(px)?\\s*$/i,\n\n        init: function (width, height, target) {\n            if (!width) {\n                return;\n            }\n            this.width = width;\n            this.height = height;\n            this.target = target;\n            this.lastShapeId = null;\n            if (target[0]) {\n                target = target[0];\n            }\n            $.data(target, '_jqs_vcanvas', this);\n        },\n\n        drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n            return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n        },\n\n        drawShape: function (path, lineColor, fillColor, lineWidth) {\n            return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n        },\n\n        drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n            return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n        },\n\n        drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n            return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n        },\n\n        drawRect: function (x, y, width, height, lineColor, fillColor) {\n            return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n        },\n\n        getElement: function () {\n            return this.canvas;\n        },\n\n        /**\n         * Return the most recently inserted shape id\n         */\n        getLastShapeId: function () {\n            return this.lastShapeId;\n        },\n\n        /**\n         * Clear and reset the canvas\n         */\n        reset: function () {\n            alert('reset not implemented');\n        },\n\n        _insert: function (el, target) {\n            $(target).html(el);\n        },\n\n        /**\n         * Calculate the pixel dimensions of the canvas\n         */\n        _calculatePixelDims: function (width, height, canvas) {\n            // XXX This should probably be a configurable option\n            var match;\n            match = this._pxregex.exec(height);\n            if (match) {\n                this.pixelHeight = match[1];\n            } else {\n                this.pixelHeight = $(canvas).height();\n            }\n            match = this._pxregex.exec(width);\n            if (match) {\n                this.pixelWidth = match[1];\n            } else {\n                this.pixelWidth = $(canvas).width();\n            }\n        },\n\n        /**\n         * Generate a shape object and id for later rendering\n         */\n        _genShape: function (shapetype, shapeargs) {\n            var id = shapeCount++;\n            shapeargs.unshift(id);\n            return new VShape(this, id, shapetype, shapeargs);\n        },\n\n        /**\n         * Add a shape to the end of the render queue\n         */\n        appendShape: function (shape) {\n            alert('appendShape not implemented');\n        },\n\n        /**\n         * Replace one shape with another\n         */\n        replaceWithShape: function (shapeid, shape) {\n            alert('replaceWithShape not implemented');\n        },\n\n        /**\n         * Insert one shape after another in the render queue\n         */\n        insertAfterShape: function (shapeid, shape) {\n            alert('insertAfterShape not implemented');\n        },\n\n        /**\n         * Remove a shape from the queue\n         */\n        removeShapeId: function (shapeid) {\n            alert('removeShapeId not implemented');\n        },\n\n        /**\n         * Find a shape at the specified x/y co-ordinates\n         */\n        getShapeAt: function (el, x, y) {\n            alert('getShapeAt not implemented');\n        },\n\n        /**\n         * Render all queued shapes onto the canvas\n         */\n        render: function () {\n            alert('render not implemented');\n        }\n    });\n\n    VCanvas_canvas = createClass(VCanvas_base, {\n        init: function (width, height, target, interact) {\n            VCanvas_canvas._super.init.call(this, width, height, target);\n            this.canvas = document.createElement('canvas');\n            if (target[0]) {\n                target = target[0];\n            }\n            $.data(target, '_jqs_vcanvas', this);\n            $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n            this._insert(this.canvas, target);\n            this._calculatePixelDims(width, height, this.canvas);\n            this.canvas.width = this.pixelWidth;\n            this.canvas.height = this.pixelHeight;\n            this.interact = interact;\n            this.shapes = {};\n            this.shapeseq = [];\n            this.currentTargetShapeId = undefined;\n            $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n        },\n\n        _getContext: function (lineColor, fillColor, lineWidth) {\n            var context = this.canvas.getContext('2d');\n            if (lineColor !== undefined) {\n                context.strokeStyle = lineColor;\n            }\n            context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n            if (fillColor !== undefined) {\n                context.fillStyle = fillColor;\n            }\n            return context;\n        },\n\n        reset: function () {\n            var context = this._getContext();\n            context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n            this.shapes = {};\n            this.shapeseq = [];\n            this.currentTargetShapeId = undefined;\n        },\n\n        _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n            var context = this._getContext(lineColor, fillColor, lineWidth),\n                i, plen;\n            context.beginPath();\n            context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n            for (i = 1, plen = path.length; i < plen; i++) {\n                context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n            }\n            if (lineColor !== undefined) {\n                context.stroke();\n            }\n            if (fillColor !== undefined) {\n                context.fill();\n            }\n            if (this.targetX !== undefined && this.targetY !== undefined &&\n                context.isPointInPath(this.targetX, this.targetY)) {\n                this.currentTargetShapeId = shapeid;\n            }\n        },\n\n        _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n            var context = this._getContext(lineColor, fillColor, lineWidth);\n            context.beginPath();\n            context.arc(x, y, radius, 0, 2 * Math.PI, false);\n            if (this.targetX !== undefined && this.targetY !== undefined &&\n                context.isPointInPath(this.targetX, this.targetY)) {\n                this.currentTargetShapeId = shapeid;\n            }\n            if (lineColor !== undefined) {\n                context.stroke();\n            }\n            if (fillColor !== undefined) {\n                context.fill();\n            }\n        },\n\n        _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n            var context = this._getContext(lineColor, fillColor);\n            context.beginPath();\n            context.moveTo(x, y);\n            context.arc(x, y, radius, startAngle, endAngle, false);\n            context.lineTo(x, y);\n            context.closePath();\n            if (lineColor !== undefined) {\n                context.stroke();\n            }\n            if (fillColor) {\n                context.fill();\n            }\n            if (this.targetX !== undefined && this.targetY !== undefined &&\n                context.isPointInPath(this.targetX, this.targetY)) {\n                this.currentTargetShapeId = shapeid;\n            }\n        },\n\n        _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n            return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n        },\n\n        appendShape: function (shape) {\n            this.shapes[shape.id] = shape;\n            this.shapeseq.push(shape.id);\n            this.lastShapeId = shape.id;\n            return shape.id;\n        },\n\n        replaceWithShape: function (shapeid, shape) {\n            var shapeseq = this.shapeseq,\n                i;\n            this.shapes[shape.id] = shape;\n            for (i = shapeseq.length; i--;) {\n                if (shapeseq[i] == shapeid) {\n                    shapeseq[i] = shape.id;\n                }\n            }\n            delete this.shapes[shapeid];\n        },\n\n        replaceWithShapes: function (shapeids, shapes) {\n            var shapeseq = this.shapeseq,\n                shapemap = {},\n                sid, i, first;\n\n            for (i = shapeids.length; i--;) {\n                shapemap[shapeids[i]] = true;\n            }\n            for (i = shapeseq.length; i--;) {\n                sid = shapeseq[i];\n                if (shapemap[sid]) {\n                    shapeseq.splice(i, 1);\n                    delete this.shapes[sid];\n                    first = i;\n                }\n            }\n            for (i = shapes.length; i--;) {\n                shapeseq.splice(first, 0, shapes[i].id);\n                this.shapes[shapes[i].id] = shapes[i];\n            }\n\n        },\n\n        insertAfterShape: function (shapeid, shape) {\n            var shapeseq = this.shapeseq,\n                i;\n            for (i = shapeseq.length; i--;) {\n                if (shapeseq[i] === shapeid) {\n                    shapeseq.splice(i + 1, 0, shape.id);\n                    this.shapes[shape.id] = shape;\n                    return;\n                }\n            }\n        },\n\n        removeShapeId: function (shapeid) {\n            var shapeseq = this.shapeseq,\n                i;\n            for (i = shapeseq.length; i--;) {\n                if (shapeseq[i] === shapeid) {\n                    shapeseq.splice(i, 1);\n                    break;\n                }\n            }\n            delete this.shapes[shapeid];\n        },\n\n        getShapeAt: function (el, x, y) {\n            this.targetX = x;\n            this.targetY = y;\n            this.render();\n            return this.currentTargetShapeId;\n        },\n\n        render: function () {\n            var shapeseq = this.shapeseq,\n                shapes = this.shapes,\n                shapeCount = shapeseq.length,\n                context = this._getContext(),\n                shapeid, shape, i;\n            context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n            for (i = 0; i < shapeCount; i++) {\n                shapeid = shapeseq[i];\n                shape = shapes[shapeid];\n                this['_draw' + shape.type].apply(this, shape.args);\n            }\n            if (!this.interact) {\n                // not interactive so no need to keep the shapes array\n                this.shapes = {};\n                this.shapeseq = [];\n            }\n        }\n\n    });\n\n    VCanvas_vml = createClass(VCanvas_base, {\n        init: function (width, height, target) {\n            var groupel;\n            VCanvas_vml._super.init.call(this, width, height, target);\n            if (target[0]) {\n                target = target[0];\n            }\n            $.data(target, '_jqs_vcanvas', this);\n            this.canvas = document.createElement('span');\n            $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n            this._insert(this.canvas, target);\n            this._calculatePixelDims(width, height, this.canvas);\n            this.canvas.width = this.pixelWidth;\n            this.canvas.height = this.pixelHeight;\n            groupel = '<v:group coordorigin=\"0 0\" coordsize=\"' + this.pixelWidth + ' ' + this.pixelHeight + '\"' +\n                    ' style=\"position:absolute;top:0;left:0;width:' + this.pixelWidth + 'px;height=' + this.pixelHeight + 'px;\"></v:group>';\n            this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n            this.group = $(this.canvas).children()[0];\n            this.rendered = false;\n            this.prerender = '';\n        },\n\n        _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n            var vpath = [],\n                initial, stroke, fill, closed, vel, plen, i;\n            for (i = 0, plen = path.length; i < plen; i++) {\n                vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n            }\n            initial = vpath.splice(0, 1);\n            lineWidth = lineWidth === undefined ? 1 : lineWidth;\n            stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n            fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n            closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n            vel = '<v:shape coordorigin=\"0 0\" coordsize=\"' + this.pixelWidth + ' ' + this.pixelHeight + '\" ' +\n                 ' id=\"jqsshape' + shapeid + '\" ' +\n                 stroke +\n                 fill +\n                ' style=\"position:absolute;left:0px;top:0px;height:' + this.pixelHeight + 'px;width:' + this.pixelWidth + 'px;padding:0px;margin:0px;\" ' +\n                ' path=\"m ' + initial + ' l ' + vpath.join(', ') + ' ' + closed + 'e\">' +\n                ' </v:shape>';\n            return vel;\n        },\n\n        _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n            var stroke, fill, vel;\n            x -= radius;\n            y -= radius;\n            stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n            fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n            vel = '<v:oval ' +\n                 ' id=\"jqsshape' + shapeid + '\" ' +\n                stroke +\n                fill +\n                ' style=\"position:absolute;top:' + y + 'px; left:' + x + 'px; width:' + (radius * 2) + 'px; height:' + (radius * 2) + 'px\"></v:oval>';\n            return vel;\n\n        },\n\n        _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n            var vpath, startx, starty, endx, endy, stroke, fill, vel;\n            if (startAngle === endAngle) {\n                return '';  // VML seems to have problem when start angle equals end angle.\n            }\n            if ((endAngle - startAngle) === (2 * Math.PI)) {\n                startAngle = 0.0;  // VML seems to have a problem when drawing a full circle that doesn't start 0\n                endAngle = (2 * Math.PI);\n            }\n\n            startx = x + Math.round(Math.cos(startAngle) * radius);\n            starty = y + Math.round(Math.sin(startAngle) * radius);\n            endx = x + Math.round(Math.cos(endAngle) * radius);\n            endy = y + Math.round(Math.sin(endAngle) * radius);\n\n            if (startx === endx && starty === endy) {\n                if ((endAngle - startAngle) < Math.PI) {\n                    // Prevent very small slices from being mistaken as a whole pie\n                    return '';\n                }\n                // essentially going to be the entire circle, so ignore startAngle\n                startx = endx = x + radius;\n                starty = endy = y;\n            }\n\n            if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n                return '';\n            }\n\n            vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n            stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n            fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n            vel = '<v:shape coordorigin=\"0 0\" coordsize=\"' + this.pixelWidth + ' ' + this.pixelHeight + '\" ' +\n                 ' id=\"jqsshape' + shapeid + '\" ' +\n                 stroke +\n                 fill +\n                ' style=\"position:absolute;left:0px;top:0px;height:' + this.pixelHeight + 'px;width:' + this.pixelWidth + 'px;padding:0px;margin:0px;\" ' +\n                ' path=\"m ' + x + ',' + y + ' wa ' + vpath.join(', ') + ' x e\">' +\n                ' </v:shape>';\n            return vel;\n        },\n\n        _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n            return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n        },\n\n        reset: function () {\n            this.group.innerHTML = '';\n        },\n\n        appendShape: function (shape) {\n            var vel = this['_draw' + shape.type].apply(this, shape.args);\n            if (this.rendered) {\n                this.group.insertAdjacentHTML('beforeEnd', vel);\n            } else {\n                this.prerender += vel;\n            }\n            this.lastShapeId = shape.id;\n            return shape.id;\n        },\n\n        replaceWithShape: function (shapeid, shape) {\n            var existing = $('#jqsshape' + shapeid),\n                vel = this['_draw' + shape.type].apply(this, shape.args);\n            existing[0].outerHTML = vel;\n        },\n\n        replaceWithShapes: function (shapeids, shapes) {\n            // replace the first shapeid with all the new shapes then toast the remaining old shapes\n            var existing = $('#jqsshape' + shapeids[0]),\n                replace = '',\n                slen = shapes.length,\n                i;\n            for (i = 0; i < slen; i++) {\n                replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n            }\n            existing[0].outerHTML = replace;\n            for (i = 1; i < shapeids.length; i++) {\n                $('#jqsshape' + shapeids[i]).remove();\n            }\n        },\n\n        insertAfterShape: function (shapeid, shape) {\n            var existing = $('#jqsshape' + shapeid),\n                 vel = this['_draw' + shape.type].apply(this, shape.args);\n            existing[0].insertAdjacentHTML('afterEnd', vel);\n        },\n\n        removeShapeId: function (shapeid) {\n            var existing = $('#jqsshape' + shapeid);\n            this.group.removeChild(existing[0]);\n        },\n\n        getShapeAt: function (el, x, y) {\n            var shapeid = el.id.substr(8);\n            return shapeid;\n        },\n\n        render: function () {\n            if (!this.rendered) {\n                // batch the intial render into a single repaint\n                this.group.innerHTML = this.prerender;\n                this.rendered = true;\n            }\n        }\n    });\n\n}))}(document, Math));\n"
  },
  {
    "path": "public/adminlte/plugins/timepicker/bootstrap-timepicker.css",
    "content": "/*!\n * Timepicker Component for Twitter Bootstrap\n *\n * Copyright 2013 Joris de Wit\n *\n * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n.bootstrap-timepicker {\n  position: relative;\n}\n.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu {\n  left: auto;\n  right: 0;\n}\n.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before {\n  left: auto;\n  right: 12px;\n}\n.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after {\n  left: auto;\n  right: 13px;\n}\n.bootstrap-timepicker .add-on {\n  cursor: pointer;\n}\n.bootstrap-timepicker .add-on i {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n}\n.bootstrap-timepicker-widget.dropdown-menu {\n  padding: 2px 3px 2px 2px;\n}\n.bootstrap-timepicker-widget.dropdown-menu.open {\n  display: inline-block;\n}\n.bootstrap-timepicker-widget.dropdown-menu:before {\n  border-bottom: 7px solid rgba(0, 0, 0, 0.2);\n  border-left: 7px solid transparent;\n  border-right: 7px solid transparent;\n  content: \"\";\n  display: inline-block;\n  left: 9px;\n  position: relative;\n  top: -7px;\n}\n.bootstrap-timepicker-widget.dropdown-menu:after {\n  border-bottom: 6px solid #FFFFFF;\n  border-left: 6px solid transparent;\n  border-right: 6px solid transparent;\n  content: \"\";\n  display: inline-block;\n  left: 10px;\n  position: relative;\n  top: -6px;\n}\n.bootstrap-timepicker-widget a.btn,\n.bootstrap-timepicker-widget input {\n  border-radius: 4px;\n}\n.bootstrap-timepicker-widget table {\n  width: 100%;\n  margin: 0;\n}\n.bootstrap-timepicker-widget table td {\n  text-align: center;\n  height: 30px;\n  margin: 0;\n  padding: 2px;\n}\n.bootstrap-timepicker-widget table td:not(.separator) {\n  min-width: 30px;\n}\n.bootstrap-timepicker-widget table td span {\n  width: 100%;\n}\n.bootstrap-timepicker-widget table td a {\n  border: 1px transparent solid;\n  width: 100%;\n  display: inline-block;\n  margin: 0;\n  padding: 8px 0;\n  outline: 0;\n  color: #333;\n}\n.bootstrap-timepicker-widget table td a:hover {\n  text-decoration: none;\n  background-color: #eee;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  border-radius: 4px;\n  border-color: #ddd;\n}\n.bootstrap-timepicker-widget table td a i {\n  margin-top: 2px;\n}\n.bootstrap-timepicker-widget table td input {\n  width: 25px;\n  margin: 0;\n  text-align: center;\n}\n.bootstrap-timepicker-widget .modal-content {\n  padding: 4px;\n}\n@media (min-width: 767px) {\n  .bootstrap-timepicker-widget.modal {\n    width: 200px;\n    margin-left: -100px;\n  }\n}\n@media (max-width: 767px) {\n  .bootstrap-timepicker {\n    width: 100%;\n  }\n  .bootstrap-timepicker .dropdown-menu {\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "public/adminlte/plugins/timepicker/bootstrap-timepicker.js",
    "content": "//TODO: move arrow styles and button click code into configurable items, with defaults matching the existing code\n\n/*!\n* Timepicker Component for Twitter Bootstrap\n*\n* Copyright 2013 Joris de Wit\n*\n* Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors\n*\n* For the full copyright and license information, please view the LICENSE\n* file that was distributed with this source code.\n*/\n(function($, window, document, undefined) {\n  'use strict';\n\n  // TIMEPICKER PUBLIC CLASS DEFINITION\n  var Timepicker = function(element, options) {\n    this.widget = '';\n    this.$element = $(element);\n    this.defaultTime = options.defaultTime;\n    this.disableFocus = options.disableFocus;\n    this.isOpen = options.isOpen;\n    this.minuteStep = options.minuteStep;\n    this.modalBackdrop = options.modalBackdrop;\n    this.secondStep = options.secondStep;\n    this.showInputs = options.showInputs;\n    this.showMeridian = options.showMeridian;\n    this.showSeconds = options.showSeconds;\n    this.template = options.template;\n    this.appendWidgetTo = options.appendWidgetTo;\n\tthis.upArrowStyle = options.upArrowStyle;\n\tthis.downArrowStyle = options.downArrowStyle;\n\tthis.containerClass = options.containerClass;\n\n    this._init();\n  };\n\n  Timepicker.prototype = {\n\n    constructor: Timepicker,\n\n    _init: function() {\n      var self = this;\n\n      if (this.$element.parent().hasClass('input-append') || this.$element.parent().hasClass('input-prepend')) {\n\t\tif (this.$element.parent('.input-append, .input-prepend').find('.add-on').length) {\n\t\t\tthis.$element.parent('.input-append, .input-prepend').find('.add-on').on({\n\t\t\t  'click.timepicker': $.proxy(this.showWidget, this)\n\t\t\t});\t\t\n\t\t} else {\n\t\t\tthis.$element.closest(this.containerClass).find('.add-on').on({\n\t\t\t  'click.timepicker': $.proxy(this.showWidget, this)\n\t\t\t});\t\t\n\t\t}\n\t\t\n        this.$element.on({\n          'focus.timepicker': $.proxy(this.highlightUnit, this),\n          'click.timepicker': $.proxy(this.highlightUnit, this),\n          'keydown.timepicker': $.proxy(this.elementKeydown, this),\n          'blur.timepicker': $.proxy(this.blurElement, this)\n        });\n      } else {\n        if (this.template) {\n          this.$element.on({\n            'focus.timepicker': $.proxy(this.showWidget, this),\n            'click.timepicker': $.proxy(this.showWidget, this),\n            'blur.timepicker': $.proxy(this.blurElement, this)\n          });\n        } else {\n          this.$element.on({\n            'focus.timepicker': $.proxy(this.highlightUnit, this),\n            'click.timepicker': $.proxy(this.highlightUnit, this),\n            'keydown.timepicker': $.proxy(this.elementKeydown, this),\n            'blur.timepicker': $.proxy(this.blurElement, this)\n          });\n        }\n      }\n\n      if (this.template !== false) {\n        this.$widget = $(this.getTemplate()).prependTo(this.$element.parents(this.appendWidgetTo)).on('click', $.proxy(this.widgetClick, this));\n      } else {\n        this.$widget = false;\n      }\n\n      if (this.showInputs && this.$widget !== false) {\n        this.$widget.find('input').each(function() {\n          $(this).on({\n            'click.timepicker': function() { $(this).select(); },\n            'keydown.timepicker': $.proxy(self.widgetKeydown, self)\n          });\n        });\n      }\n\n      this.setDefaultTime(this.defaultTime);\n    },\n\n    blurElement: function() {\n      this.highlightedUnit = undefined;\n      this.updateFromElementVal();\n    },\n\n    decrementHour: function() {\n      if (this.showMeridian) {\n        if (this.hour === 1) {\n          this.hour = 12;\n        } else if (this.hour === 12) {\n          this.hour--;\n\n          return this.toggleMeridian();\n        } else if (this.hour === 0) {\n          this.hour = 11;\n\n          return this.toggleMeridian();\n        } else {\n          this.hour--;\n        }\n      } else {\n        if (this.hour === 0) {\n          this.hour = 23;\n        } else {\n          this.hour--;\n        }\n      }\n      this.update();\n    },\n\n    decrementMinute: function(step) {\n      var newVal;\n\n      if (step) {\n        newVal = this.minute - step;\n      } else {\n        newVal = this.minute - this.minuteStep;\n      }\n\n      if (newVal < 0) {\n        this.decrementHour();\n        this.minute = newVal + 60;\n      } else {\n        this.minute = newVal;\n      }\n      this.update();\n    },\n\n    decrementSecond: function() {\n      var newVal = this.second - this.secondStep;\n\n      if (newVal < 0) {\n        this.decrementMinute(true);\n        this.second = newVal + 60;\n      } else {\n        this.second = newVal;\n      }\n      this.update();\n    },\n\n    elementKeydown: function(e) {\n      switch (e.keyCode) {\n      case 9: //tab\n        this.updateFromElementVal();\n\n        switch (this.highlightedUnit) {\n        case 'hour':\n          e.preventDefault();\n          this.highlightNextUnit();\n          break;\n        case 'minute':\n          if (this.showMeridian || this.showSeconds) {\n            e.preventDefault();\n            this.highlightNextUnit();\n          }\n          break;\n        case 'second':\n          if (this.showMeridian) {\n            e.preventDefault();\n            this.highlightNextUnit();\n          }\n          break;\n        }\n        break;\n      case 27: // escape\n        this.updateFromElementVal();\n        break;\n      case 37: // left arrow\n        e.preventDefault();\n        this.highlightPrevUnit();\n        this.updateFromElementVal();\n        break;\n      case 38: // up arrow\n        e.preventDefault();\n        switch (this.highlightedUnit) {\n        case 'hour':\n          this.incrementHour();\n          this.highlightHour();\n          break;\n        case 'minute':\n          this.incrementMinute();\n          this.highlightMinute();\n          break;\n        case 'second':\n          this.incrementSecond();\n          this.highlightSecond();\n          break;\n        case 'meridian':\n          this.toggleMeridian();\n          this.highlightMeridian();\n          break;\n        }\n        break;\n      case 39: // right arrow\n        e.preventDefault();\n        this.updateFromElementVal();\n        this.highlightNextUnit();\n        break;\n      case 40: // down arrow\n        e.preventDefault();\n        switch (this.highlightedUnit) {\n        case 'hour':\n          this.decrementHour();\n          this.highlightHour();\n          break;\n        case 'minute':\n          this.decrementMinute();\n          this.highlightMinute();\n          break;\n        case 'second':\n          this.decrementSecond();\n          this.highlightSecond();\n          break;\n        case 'meridian':\n          this.toggleMeridian();\n          this.highlightMeridian();\n          break;\n        }\n        break;\n      }\n    },\n\n    formatTime: function(hour, minute, second, meridian) {\n      hour = hour < 10 ? '0' + hour : hour;\n      minute = minute < 10 ? '0' + minute : minute;\n      second = second < 10 ? '0' + second : second;\n\n      return hour + ':' + minute + (this.showSeconds ? ':' + second : '') + (this.showMeridian ? ' ' + meridian : '');\n    },\n\n    getCursorPosition: function() {\n      var input = this.$element.get(0);\n\n      if ('selectionStart' in input) {// Standard-compliant browsers\n\n        return input.selectionStart;\n      } else if (document.selection) {// IE fix\n        input.focus();\n        var sel = document.selection.createRange(),\n          selLen = document.selection.createRange().text.length;\n\n        sel.moveStart('character', - input.value.length);\n\n        return sel.text.length - selLen;\n      }\n    },\n\n    getTemplate: function() {\n      var template,\n        hourTemplate,\n        minuteTemplate,\n        secondTemplate,\n        meridianTemplate,\n        templateContent;\n\n      if (this.showInputs) {\n        hourTemplate = '<input type=\"text\" name=\"hour\" class=\"bootstrap-timepicker-hour form-control\" maxlength=\"2\"/>';\n        minuteTemplate = '<input type=\"text\" name=\"minute\" class=\"bootstrap-timepicker-minute form-control\" maxlength=\"2\"/>';\n        secondTemplate = '<input type=\"text\" name=\"second\" class=\"bootstrap-timepicker-second form-control\" maxlength=\"2\"/>';\n        meridianTemplate = '<input type=\"text\" name=\"meridian\" class=\"bootstrap-timepicker-meridian form-control\" maxlength=\"2\"/>';\n      } else {\n        hourTemplate = '<span class=\"bootstrap-timepicker-hour\"></span>';\n        minuteTemplate = '<span class=\"bootstrap-timepicker-minute\"></span>';\n        secondTemplate = '<span class=\"bootstrap-timepicker-second\"></span>';\n        meridianTemplate = '<span class=\"bootstrap-timepicker-meridian\"></span>';\n      }\n\n      templateContent = '<table>'+\n         '<tr>'+\n           '<td><a href=\"#\" data-action=\"incrementHour\"><i class=\"' + this.upArrowStyle + '\"></i></a></td>'+\n           '<td class=\"separator\">&nbsp;</td>'+\n           '<td><a href=\"#\" data-action=\"incrementMinute\"><i class=\"' + this.upArrowStyle + '\"></i></a></td>'+\n           (this.showSeconds ?\n             '<td class=\"separator\">&nbsp;</td>'+\n             '<td><a href=\"#\" data-action=\"incrementSecond\"><i class=\"' + this.upArrowStyle + '\"></i></a></td>'\n           : '') +\n           (this.showMeridian ?\n             '<td class=\"separator\">&nbsp;</td>'+\n             '<td class=\"meridian-column\"><a href=\"#\" data-action=\"toggleMeridian\"><i class=\"' + this.upArrowStyle + '\"></i></a></td>'\n           : '') +\n         '</tr>'+\n         '<tr>'+\n           '<td>'+ hourTemplate +'</td> '+\n           '<td class=\"separator\">:</td>'+\n           '<td>'+ minuteTemplate +'</td> '+\n           (this.showSeconds ?\n            '<td class=\"separator\">:</td>'+\n            '<td>'+ secondTemplate +'</td>'\n           : '') +\n           (this.showMeridian ?\n            '<td class=\"separator\">&nbsp;</td>'+\n            '<td>'+ meridianTemplate +'</td>'\n           : '') +\n         '</tr>'+\n         '<tr>'+\n           '<td><a href=\"#\" data-action=\"decrementHour\"><i class=\"' + this.downArrowStyle + '\"></i></a></td>'+\n           '<td class=\"separator\"></td>'+\n           '<td><a href=\"#\" data-action=\"decrementMinute\"><i class=\"' + this.downArrowStyle + '\"></i></a></td>'+\n           (this.showSeconds ?\n            '<td class=\"separator\">&nbsp;</td>'+\n            '<td><a href=\"#\" data-action=\"decrementSecond\"><i class=\"' + this.downArrowStyle + '\"></i></a></td>'\n           : '') +\n           (this.showMeridian ?\n            '<td class=\"separator\">&nbsp;</td>'+\n            '<td><a href=\"#\" data-action=\"toggleMeridian\"><i class=\"' + this.downArrowStyle + '\"></i></a></td>'\n           : '') +\n         '</tr>'+\n       '</table>';\n\n      switch(this.template) {\n      case 'modal':\n        template = '<div class=\"bootstrap-timepicker-widget modal hide fade in\" data-backdrop=\"'+ (this.modalBackdrop ? 'true' : 'false') +'\">'+\n          '<div class=\"modal-header\">'+\n            '<a href=\"#\" class=\"close\" data-dismiss=\"modal\">×</a>'+\n            '<h3>Pick a Time</h3>'+\n          '</div>'+\n          '<div class=\"modal-content\">'+\n            templateContent +\n          '</div>'+\n          '<div class=\"modal-footer\">'+\n            '<a href=\"#\" class=\"btn btn-primary\" data-dismiss=\"modal\">OK</a>'+\n          '</div>'+\n        '</div>';\n        break;\n      case 'dropdown':\n        template = '<div class=\"bootstrap-timepicker-widget dropdown-menu\">'+ templateContent +'</div>';\n        break;\n      }\n\n      return template;\n    },\n\n    getTime: function() {\n      return this.formatTime(this.hour, this.minute, this.second, this.meridian);\n    },\n\n    hideWidget: function() {\n      if (this.isOpen === false) {\n        return;\n      }\n\n                        if (this.showInputs) {\n                                this.updateFromWidgetInputs();\n                        }\n\n      this.$element.trigger({\n        'type': 'hide.timepicker',\n        'time': {\n          'value': this.getTime(),\n          'hours': this.hour,\n          'minutes': this.minute,\n          'seconds': this.second,\n          'meridian': this.meridian\n        }\n      });\n\n      if (this.template === 'modal' && this.$widget.modal) {\n        this.$widget.modal('hide');\n      } else {\n        this.$widget.removeClass('open');\n      }\n\n      $(document).off('mousedown.timepicker');\n\n      this.isOpen = false;\n    },\n\n    highlightUnit: function() {\n      this.position = this.getCursorPosition();\n      if (this.position >= 0 && this.position <= 2) {\n        this.highlightHour();\n      } else if (this.position >= 3 && this.position <= 5) {\n        this.highlightMinute();\n      } else if (this.position >= 6 && this.position <= 8) {\n        if (this.showSeconds) {\n          this.highlightSecond();\n        } else {\n          this.highlightMeridian();\n        }\n      } else if (this.position >= 9 && this.position <= 11) {\n        this.highlightMeridian();\n      }\n    },\n\n    highlightNextUnit: function() {\n      switch (this.highlightedUnit) {\n      case 'hour':\n        this.highlightMinute();\n        break;\n      case 'minute':\n        if (this.showSeconds) {\n          this.highlightSecond();\n        } else if (this.showMeridian){\n          this.highlightMeridian();\n        } else {\n          this.highlightHour();\n        }\n        break;\n      case 'second':\n        if (this.showMeridian) {\n          this.highlightMeridian();\n        } else {\n          this.highlightHour();\n        }\n        break;\n      case 'meridian':\n        this.highlightHour();\n        break;\n      }\n    },\n\n    highlightPrevUnit: function() {\n      switch (this.highlightedUnit) {\n      case 'hour':\n        this.highlightMeridian();\n        break;\n      case 'minute':\n        this.highlightHour();\n        break;\n      case 'second':\n        this.highlightMinute();\n        break;\n      case 'meridian':\n        if (this.showSeconds) {\n          this.highlightSecond();\n        } else {\n          this.highlightMinute();\n        }\n        break;\n      }\n    },\n\n    highlightHour: function() {\n      var $element = this.$element.get(0);\n\n      this.highlightedUnit = 'hour';\n\n                        if ($element.setSelectionRange) {\n                                setTimeout(function() {\n                                        $element.setSelectionRange(0,2);\n                                }, 0);\n                        }\n    },\n\n    highlightMinute: function() {\n      var $element = this.$element.get(0);\n\n      this.highlightedUnit = 'minute';\n\n                        if ($element.setSelectionRange) {\n                                setTimeout(function() {\n                                        $element.setSelectionRange(3,5);\n                                }, 0);\n                        }\n    },\n\n    highlightSecond: function() {\n      var $element = this.$element.get(0);\n\n      this.highlightedUnit = 'second';\n\n                        if ($element.setSelectionRange) {\n                                setTimeout(function() {\n                                        $element.setSelectionRange(6,8);\n                                }, 0);\n                        }\n    },\n\n    highlightMeridian: function() {\n      var $element = this.$element.get(0);\n\n      this.highlightedUnit = 'meridian';\n\n                        if ($element.setSelectionRange) {\n                                if (this.showSeconds) {\n                                        setTimeout(function() {\n                                                $element.setSelectionRange(9,11);\n                                        }, 0);\n                                } else {\n                                        setTimeout(function() {\n                                                $element.setSelectionRange(6,8);\n                                        }, 0);\n                                }\n                        }\n    },\n\n    incrementHour: function() {\n      if (this.showMeridian) {\n        if (this.hour === 11) {\n          this.hour++;\n          return this.toggleMeridian();\n        } else if (this.hour === 12) {\n          this.hour = 0;\n        }\n      }\n      if (this.hour === 23) {\n        this.hour = 0;\n\n        return;\n      }\n      this.hour++;\n      this.update();\n    },\n\n    incrementMinute: function(step) {\n      var newVal;\n\n      if (step) {\n        newVal = this.minute + step;\n      } else {\n        newVal = this.minute + this.minuteStep - (this.minute % this.minuteStep);\n      }\n\n      if (newVal > 59) {\n        this.incrementHour();\n        this.minute = newVal - 60;\n      } else {\n        this.minute = newVal;\n      }\n      this.update();\n    },\n\n    incrementSecond: function() {\n      var newVal = this.second + this.secondStep - (this.second % this.secondStep);\n\n      if (newVal > 59) {\n        this.incrementMinute(true);\n        this.second = newVal - 60;\n      } else {\n        this.second = newVal;\n      }\n      this.update();\n    },\n\n    remove: function() {\n      $('document').off('.timepicker');\n      if (this.$widget) {\n        this.$widget.remove();\n      }\n      delete this.$element.data().timepicker;\n    },\n\n    setDefaultTime: function(defaultTime){\n      if (!this.$element.val()) {\n        if (defaultTime === 'current') {\n          var dTime = new Date(),\n            hours = dTime.getHours(),\n            minutes = Math.floor(dTime.getMinutes() / this.minuteStep) * this.minuteStep,\n            seconds = Math.floor(dTime.getSeconds() / this.secondStep) * this.secondStep,\n            meridian = 'AM';\n\n          if (this.showMeridian) {\n            if (hours === 0) {\n              hours = 12;\n            } else if (hours >= 12) {\n              if (hours > 12) {\n                hours = hours - 12;\n              }\n              meridian = 'PM';\n            } else {\n              meridian = 'AM';\n            }\n          }\n\n          this.hour = hours;\n          this.minute = minutes;\n          this.second = seconds;\n          this.meridian = meridian;\n\n          this.update();\n\n        } else if (defaultTime === false) {\n          this.hour = 0;\n          this.minute = 0;\n          this.second = 0;\n          this.meridian = 'AM';\n        } else {\n          this.setTime(defaultTime);\n        }\n      } else {\n        this.updateFromElementVal();\n      }\n    },\n\n    setTime: function(time) {\n      var arr,\n        timeArray;\n\n      if (this.showMeridian) {\n        arr = time.split(' ');\n        timeArray = arr[0].split(':');\n        this.meridian = arr[1];\n      } else {\n        timeArray = time.split(':');\n      }\n\n      this.hour = parseInt(timeArray[0], 10);\n      this.minute = parseInt(timeArray[1], 10);\n      this.second = parseInt(timeArray[2], 10);\n\n      if (isNaN(this.hour)) {\n        this.hour = 0;\n      }\n      if (isNaN(this.minute)) {\n        this.minute = 0;\n      }\n\n      if (this.showMeridian) {\n        if (this.hour > 12) {\n          this.hour = 12;\n        } else if (this.hour < 1) {\n          this.hour = 12;\n        }\n\n        if (this.meridian === 'am' || this.meridian === 'a') {\n          this.meridian = 'AM';\n        } else if (this.meridian === 'pm' || this.meridian === 'p') {\n          this.meridian = 'PM';\n        }\n\n        if (this.meridian !== 'AM' && this.meridian !== 'PM') {\n          this.meridian = 'AM';\n        }\n      } else {\n        if (this.hour >= 24) {\n          this.hour = 23;\n        } else if (this.hour < 0) {\n          this.hour = 0;\n        }\n      }\n\n      if (this.minute < 0) {\n        this.minute = 0;\n      } else if (this.minute >= 60) {\n        this.minute = 59;\n      }\n\n      if (this.showSeconds) {\n        if (isNaN(this.second)) {\n          this.second = 0;\n        } else if (this.second < 0) {\n          this.second = 0;\n        } else if (this.second >= 60) {\n          this.second = 59;\n        }\n      }\n\n      this.update();\n    },\n\n    showWidget: function() {\n      if (this.isOpen) {\n        return;\n      }\n\n      if (this.$element.is(':disabled')) {\n        return;\n      }\n\n      var self = this;\n      $(document).on('mousedown.timepicker', function (e) {\n        // Clicked outside the timepicker, hide it\n        if ($(e.target).closest('.bootstrap-timepicker-widget').length === 0) {\n          self.hideWidget();\n        }\n      });\n\n      this.$element.trigger({\n        'type': 'show.timepicker',\n        'time': {\n          'value': this.getTime(),\n          'hours': this.hour,\n          'minutes': this.minute,\n          'seconds': this.second,\n          'meridian': this.meridian\n        }\n      });\n\n      if (this.disableFocus) {\n        this.$element.blur();\n      }\n\n      this.updateFromElementVal();\n\n      if (this.template === 'modal' && this.$widget.modal) {\n        this.$widget.modal('show').on('hidden', $.proxy(this.hideWidget, this));\n      } else {\n        if (this.isOpen === false) {\n          this.$widget.addClass('open');\n        }\n      }\n\n      this.isOpen = true;\n    },\n\n    toggleMeridian: function() {\n      this.meridian = this.meridian === 'AM' ? 'PM' : 'AM';\n      this.update();\n    },\n\n    update: function() {\n      this.$element.trigger({\n        'type': 'changeTime.timepicker',\n        'time': {\n          'value': this.getTime(),\n          'hours': this.hour,\n          'minutes': this.minute,\n          'seconds': this.second,\n          'meridian': this.meridian\n        }\n      });\n\n      this.updateElement();\n      this.updateWidget();\n    },\n\n    updateElement: function() {\n      this.$element.val(this.getTime()).change();\n    },\n\n    updateFromElementVal: function() {\n                        var val = this.$element.val();\n\n                        if (val) {\n                                this.setTime(val);\n                        }\n    },\n\n    updateWidget: function() {\n      if (this.$widget === false) {\n        return;\n      }\n\n      var hour = this.hour < 10 ? '0' + this.hour : this.hour,\n          minute = this.minute < 10 ? '0' + this.minute : this.minute,\n          second = this.second < 10 ? '0' + this.second : this.second;\n\n      if (this.showInputs) {\n        this.$widget.find('input.bootstrap-timepicker-hour').val(hour);\n        this.$widget.find('input.bootstrap-timepicker-minute').val(minute);\n\n        if (this.showSeconds) {\n          this.$widget.find('input.bootstrap-timepicker-second').val(second);\n        }\n        if (this.showMeridian) {\n          this.$widget.find('input.bootstrap-timepicker-meridian').val(this.meridian);\n        }\n      } else {\n        this.$widget.find('span.bootstrap-timepicker-hour').text(hour);\n        this.$widget.find('span.bootstrap-timepicker-minute').text(minute);\n\n        if (this.showSeconds) {\n          this.$widget.find('span.bootstrap-timepicker-second').text(second);\n        }\n        if (this.showMeridian) {\n          this.$widget.find('span.bootstrap-timepicker-meridian').text(this.meridian);\n        }\n      }\n    },\n\n    updateFromWidgetInputs: function() {\n      if (this.$widget === false) {\n        return;\n      }\n      var time = $('input.bootstrap-timepicker-hour', this.$widget).val() + ':' +\n        $('input.bootstrap-timepicker-minute', this.$widget).val() +\n        (this.showSeconds ? ':' + $('input.bootstrap-timepicker-second', this.$widget).val() : '') +\n        (this.showMeridian ? ' ' + $('input.bootstrap-timepicker-meridian', this.$widget).val() : '');\n\n      this.setTime(time);\n    },\n\n    widgetClick: function(e) {\n      e.stopPropagation();\n      e.preventDefault();\n\n      var action = $(e.target).closest('a').data('action');\n      if (action) {\n        this[action]();\n      }\n    },\n\n    widgetKeydown: function(e) {\n      var $input = $(e.target).closest('input'),\n          name = $input.attr('name');\n\n      switch (e.keyCode) {\n      case 9: //tab\n        if (this.showMeridian) {\n          if (name === 'meridian') {\n            return this.hideWidget();\n          }\n        } else {\n          if (this.showSeconds) {\n            if (name === 'second') {\n              return this.hideWidget();\n            }\n          } else {\n            if (name === 'minute') {\n              return this.hideWidget();\n            }\n          }\n        }\n\n        this.updateFromWidgetInputs();\n        break;\n      case 27: // escape\n        this.hideWidget();\n        break;\n      case 38: // up arrow\n        e.preventDefault();\n        switch (name) {\n        case 'hour':\n          this.incrementHour();\n          break;\n        case 'minute':\n          this.incrementMinute();\n          break;\n        case 'second':\n          this.incrementSecond();\n          break;\n        case 'meridian':\n          this.toggleMeridian();\n          break;\n        }\n        break;\n      case 40: // down arrow\n        e.preventDefault();\n        switch (name) {\n        case 'hour':\n          this.decrementHour();\n          break;\n        case 'minute':\n          this.decrementMinute();\n          break;\n        case 'second':\n          this.decrementSecond();\n          break;\n        case 'meridian':\n          this.toggleMeridian();\n          break;\n        }\n        break;\n      }\n    }\n  };\n\n\n  //TIMEPICKER PLUGIN DEFINITION\n  $.fn.timepicker = function(option) {\n    var args = Array.apply(null, arguments);\n    args.shift();\n    return this.each(function() {\n      var $this = $(this),\n        data = $this.data('timepicker'),\n        options = typeof option === 'object' && option;\n\n      if (!data) {\n        $this.data('timepicker', (data = new Timepicker(this, $.extend({}, $.fn.timepicker.defaults, options, $(this).data()))));\n      }\n\n      if (typeof option === 'string') {\n        data[option].apply(data, args);\n      }\n    });\n  };\n\n  $.fn.timepicker.defaults = {\n    defaultTime: 'current',\n    disableFocus: false,\n    isOpen: false,\n    minuteStep: 15,\n    modalBackdrop: false,\n    secondStep: 15,\n    showSeconds: false,\n    showInputs: true,\n    showMeridian: true,\n    template: 'dropdown',\n    appendWidgetTo: '.bootstrap-timepicker',\n\tupArrowStyle: 'glyphicon glyphicon-chevron-up',\n\tdownArrowStyle: 'glyphicon glyphicon-chevron-down',\n\tcontainerClass: 'bootstrap-timepicker'\n  };\n\n  $.fn.timepicker.Constructor = Timepicker;\n\n})(jQuery, window, document);\n"
  },
  {
    "path": "public/css/app.css",
    "content": "@import url(https://fonts.googleapis.com/css?family=Raleway:300,400,600);@charset \"UTF-8\";/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.label,sub,sup{vertical-align:baseline}hr,img{border:0}body,figure{margin:0}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}.img-responsive,.img-thumbnail,.table,label{max-width:100%}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}img{vertical-align:middle}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:\" (\" attr(href) \")\"}abbr[title]:after{content:\" (\" attr(title) \")\"}a[href^=\"#\"]:after,a[href^=\"javascript:\"]:after{content:\"\"}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.btn-danger.dropdown-toggle,.open>.btn-default.dropdown-toggle,.open>.btn-info.dropdown-toggle,.open>.btn-primary.dropdown-toggle,.open>.btn-warning.dropdown-toggle{background-image:none}.img-thumbnail,body{background-color:#f5f8fa}@font-face{font-family:'Glyphicons Halflings';src:url(/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.eot?f4769f9bdb7466be65088239c12046d1);src:url(/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.eot?f4769f9bdb7466be65088239c12046d1?#iefix) format(\"embedded-opentype\"),url(/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.woff2?448c34a56d699c29117adc64c43affeb) format(\"woff2\"),url(/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.woff?fa2772327f55d8198301fdb8bcfc8158) format(\"woff\"),url(/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.ttf?e18bbf611f2a2e43afc071aa2f4e1512) format(\"truetype\"),url(/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.svg?89889688147bd7575d6327160d64e760#glyphicons_halflingsregular) format(\"svg\")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:\"\\002a\"}.glyphicon-plus:before{content:\"\\002b\"}.glyphicon-eur:before,.glyphicon-euro:before{content:\"\\20ac\"}.glyphicon-minus:before{content:\"\\2212\"}.glyphicon-cloud:before{content:\"\\2601\"}.glyphicon-envelope:before{content:\"\\2709\"}.glyphicon-pencil:before{content:\"\\270f\"}.glyphicon-glass:before{content:\"\\e001\"}.glyphicon-music:before{content:\"\\e002\"}.glyphicon-search:before{content:\"\\e003\"}.glyphicon-heart:before{content:\"\\e005\"}.glyphicon-star:before{content:\"\\e006\"}.glyphicon-star-empty:before{content:\"\\e007\"}.glyphicon-user:before{content:\"\\e008\"}.glyphicon-film:before{content:\"\\e009\"}.glyphicon-th-large:before{content:\"\\e010\"}.glyphicon-th:before{content:\"\\e011\"}.glyphicon-th-list:before{content:\"\\e012\"}.glyphicon-ok:before{content:\"\\e013\"}.glyphicon-remove:before{content:\"\\e014\"}.glyphicon-zoom-in:before{content:\"\\e015\"}.glyphicon-zoom-out:before{content:\"\\e016\"}.glyphicon-off:before{content:\"\\e017\"}.glyphicon-signal:before{content:\"\\e018\"}.glyphicon-cog:before{content:\"\\e019\"}.glyphicon-trash:before{content:\"\\e020\"}.glyphicon-home:before{content:\"\\e021\"}.glyphicon-file:before{content:\"\\e022\"}.glyphicon-time:before{content:\"\\e023\"}.glyphicon-road:before{content:\"\\e024\"}.glyphicon-download-alt:before{content:\"\\e025\"}.glyphicon-download:before{content:\"\\e026\"}.glyphicon-upload:before{content:\"\\e027\"}.glyphicon-inbox:before{content:\"\\e028\"}.glyphicon-play-circle:before{content:\"\\e029\"}.glyphicon-repeat:before{content:\"\\e030\"}.glyphicon-refresh:before{content:\"\\e031\"}.glyphicon-list-alt:before{content:\"\\e032\"}.glyphicon-lock:before{content:\"\\e033\"}.glyphicon-flag:before{content:\"\\e034\"}.glyphicon-headphones:before{content:\"\\e035\"}.glyphicon-volume-off:before{content:\"\\e036\"}.glyphicon-volume-down:before{content:\"\\e037\"}.glyphicon-volume-up:before{content:\"\\e038\"}.glyphicon-qrcode:before{content:\"\\e039\"}.glyphicon-barcode:before{content:\"\\e040\"}.glyphicon-tag:before{content:\"\\e041\"}.glyphicon-tags:before{content:\"\\e042\"}.glyphicon-book:before{content:\"\\e043\"}.glyphicon-bookmark:before{content:\"\\e044\"}.glyphicon-print:before{content:\"\\e045\"}.glyphicon-camera:before{content:\"\\e046\"}.glyphicon-font:before{content:\"\\e047\"}.glyphicon-bold:before{content:\"\\e048\"}.glyphicon-italic:before{content:\"\\e049\"}.glyphicon-text-height:before{content:\"\\e050\"}.glyphicon-text-width:before{content:\"\\e051\"}.glyphicon-align-left:before{content:\"\\e052\"}.glyphicon-align-center:before{content:\"\\e053\"}.glyphicon-align-right:before{content:\"\\e054\"}.glyphicon-align-justify:before{content:\"\\e055\"}.glyphicon-list:before{content:\"\\e056\"}.glyphicon-indent-left:before{content:\"\\e057\"}.glyphicon-indent-right:before{content:\"\\e058\"}.glyphicon-facetime-video:before{content:\"\\e059\"}.glyphicon-picture:before{content:\"\\e060\"}.glyphicon-map-marker:before{content:\"\\e062\"}.glyphicon-adjust:before{content:\"\\e063\"}.glyphicon-tint:before{content:\"\\e064\"}.glyphicon-edit:before{content:\"\\e065\"}.glyphicon-share:before{content:\"\\e066\"}.glyphicon-check:before{content:\"\\e067\"}.glyphicon-move:before{content:\"\\e068\"}.glyphicon-step-backward:before{content:\"\\e069\"}.glyphicon-fast-backward:before{content:\"\\e070\"}.glyphicon-backward:before{content:\"\\e071\"}.glyphicon-play:before{content:\"\\e072\"}.glyphicon-pause:before{content:\"\\e073\"}.glyphicon-stop:before{content:\"\\e074\"}.glyphicon-forward:before{content:\"\\e075\"}.glyphicon-fast-forward:before{content:\"\\e076\"}.glyphicon-step-forward:before{content:\"\\e077\"}.glyphicon-eject:before{content:\"\\e078\"}.glyphicon-chevron-left:before{content:\"\\e079\"}.glyphicon-chevron-right:before{content:\"\\e080\"}.glyphicon-plus-sign:before{content:\"\\e081\"}.glyphicon-minus-sign:before{content:\"\\e082\"}.glyphicon-remove-sign:before{content:\"\\e083\"}.glyphicon-ok-sign:before{content:\"\\e084\"}.glyphicon-question-sign:before{content:\"\\e085\"}.glyphicon-info-sign:before{content:\"\\e086\"}.glyphicon-screenshot:before{content:\"\\e087\"}.glyphicon-remove-circle:before{content:\"\\e088\"}.glyphicon-ok-circle:before{content:\"\\e089\"}.glyphicon-ban-circle:before{content:\"\\e090\"}.glyphicon-arrow-left:before{content:\"\\e091\"}.glyphicon-arrow-right:before{content:\"\\e092\"}.glyphicon-arrow-up:before{content:\"\\e093\"}.glyphicon-arrow-down:before{content:\"\\e094\"}.glyphicon-share-alt:before{content:\"\\e095\"}.glyphicon-resize-full:before{content:\"\\e096\"}.glyphicon-resize-small:before{content:\"\\e097\"}.glyphicon-exclamation-sign:before{content:\"\\e101\"}.glyphicon-gift:before{content:\"\\e102\"}.glyphicon-leaf:before{content:\"\\e103\"}.glyphicon-fire:before{content:\"\\e104\"}.glyphicon-eye-open:before{content:\"\\e105\"}.glyphicon-eye-close:before{content:\"\\e106\"}.glyphicon-warning-sign:before{content:\"\\e107\"}.glyphicon-plane:before{content:\"\\e108\"}.glyphicon-calendar:before{content:\"\\e109\"}.glyphicon-random:before{content:\"\\e110\"}.glyphicon-comment:before{content:\"\\e111\"}.glyphicon-magnet:before{content:\"\\e112\"}.glyphicon-chevron-up:before{content:\"\\e113\"}.glyphicon-chevron-down:before{content:\"\\e114\"}.glyphicon-retweet:before{content:\"\\e115\"}.glyphicon-shopping-cart:before{content:\"\\e116\"}.glyphicon-folder-close:before{content:\"\\e117\"}.glyphicon-folder-open:before{content:\"\\e118\"}.glyphicon-resize-vertical:before{content:\"\\e119\"}.glyphicon-resize-horizontal:before{content:\"\\e120\"}.glyphicon-hdd:before{content:\"\\e121\"}.glyphicon-bullhorn:before{content:\"\\e122\"}.glyphicon-bell:before{content:\"\\e123\"}.glyphicon-certificate:before{content:\"\\e124\"}.glyphicon-thumbs-up:before{content:\"\\e125\"}.glyphicon-thumbs-down:before{content:\"\\e126\"}.glyphicon-hand-right:before{content:\"\\e127\"}.glyphicon-hand-left:before{content:\"\\e128\"}.glyphicon-hand-up:before{content:\"\\e129\"}.glyphicon-hand-down:before{content:\"\\e130\"}.glyphicon-circle-arrow-right:before{content:\"\\e131\"}.glyphicon-circle-arrow-left:before{content:\"\\e132\"}.glyphicon-circle-arrow-up:before{content:\"\\e133\"}.glyphicon-circle-arrow-down:before{content:\"\\e134\"}.glyphicon-globe:before{content:\"\\e135\"}.glyphicon-wrench:before{content:\"\\e136\"}.glyphicon-tasks:before{content:\"\\e137\"}.glyphicon-filter:before{content:\"\\e138\"}.glyphicon-briefcase:before{content:\"\\e139\"}.glyphicon-fullscreen:before{content:\"\\e140\"}.glyphicon-dashboard:before{content:\"\\e141\"}.glyphicon-paperclip:before{content:\"\\e142\"}.glyphicon-heart-empty:before{content:\"\\e143\"}.glyphicon-link:before{content:\"\\e144\"}.glyphicon-phone:before{content:\"\\e145\"}.glyphicon-pushpin:before{content:\"\\e146\"}.glyphicon-usd:before{content:\"\\e148\"}.glyphicon-gbp:before{content:\"\\e149\"}.glyphicon-sort:before{content:\"\\e150\"}.glyphicon-sort-by-alphabet:before{content:\"\\e151\"}.glyphicon-sort-by-alphabet-alt:before{content:\"\\e152\"}.glyphicon-sort-by-order:before{content:\"\\e153\"}.glyphicon-sort-by-order-alt:before{content:\"\\e154\"}.glyphicon-sort-by-attributes:before{content:\"\\e155\"}.glyphicon-sort-by-attributes-alt:before{content:\"\\e156\"}.glyphicon-unchecked:before{content:\"\\e157\"}.glyphicon-expand:before{content:\"\\e158\"}.glyphicon-collapse-down:before{content:\"\\e159\"}.glyphicon-collapse-up:before{content:\"\\e160\"}.glyphicon-log-in:before{content:\"\\e161\"}.glyphicon-flash:before{content:\"\\e162\"}.glyphicon-log-out:before{content:\"\\e163\"}.glyphicon-new-window:before{content:\"\\e164\"}.glyphicon-record:before{content:\"\\e165\"}.glyphicon-save:before{content:\"\\e166\"}.glyphicon-open:before{content:\"\\e167\"}.glyphicon-saved:before{content:\"\\e168\"}.glyphicon-import:before{content:\"\\e169\"}.glyphicon-export:before{content:\"\\e170\"}.glyphicon-send:before{content:\"\\e171\"}.glyphicon-floppy-disk:before{content:\"\\e172\"}.glyphicon-floppy-saved:before{content:\"\\e173\"}.glyphicon-floppy-remove:before{content:\"\\e174\"}.glyphicon-floppy-save:before{content:\"\\e175\"}.glyphicon-floppy-open:before{content:\"\\e176\"}.glyphicon-credit-card:before{content:\"\\e177\"}.glyphicon-transfer:before{content:\"\\e178\"}.glyphicon-cutlery:before{content:\"\\e179\"}.glyphicon-header:before{content:\"\\e180\"}.glyphicon-compressed:before{content:\"\\e181\"}.glyphicon-earphone:before{content:\"\\e182\"}.glyphicon-phone-alt:before{content:\"\\e183\"}.glyphicon-tower:before{content:\"\\e184\"}.glyphicon-stats:before{content:\"\\e185\"}.glyphicon-sd-video:before{content:\"\\e186\"}.glyphicon-hd-video:before{content:\"\\e187\"}.glyphicon-subtitles:before{content:\"\\e188\"}.glyphicon-sound-stereo:before{content:\"\\e189\"}.glyphicon-sound-dolby:before{content:\"\\e190\"}.glyphicon-sound-5-1:before{content:\"\\e191\"}.glyphicon-sound-6-1:before{content:\"\\e192\"}.glyphicon-sound-7-1:before{content:\"\\e193\"}.glyphicon-copyright-mark:before{content:\"\\e194\"}.glyphicon-registration-mark:before{content:\"\\e195\"}.glyphicon-cloud-download:before{content:\"\\e197\"}.glyphicon-cloud-upload:before{content:\"\\e198\"}.glyphicon-tree-conifer:before{content:\"\\e199\"}.glyphicon-tree-deciduous:before{content:\"\\e200\"}.glyphicon-cd:before{content:\"\\e201\"}.glyphicon-save-file:before{content:\"\\e202\"}.glyphicon-open-file:before{content:\"\\e203\"}.glyphicon-level-up:before{content:\"\\e204\"}.glyphicon-copy:before{content:\"\\e205\"}.glyphicon-paste:before{content:\"\\e206\"}.glyphicon-alert:before{content:\"\\e209\"}.glyphicon-equalizer:before{content:\"\\e210\"}.glyphicon-king:before{content:\"\\e211\"}.glyphicon-queen:before{content:\"\\e212\"}.glyphicon-pawn:before{content:\"\\e213\"}.glyphicon-bishop:before{content:\"\\e214\"}.glyphicon-knight:before{content:\"\\e215\"}.glyphicon-baby-formula:before{content:\"\\e216\"}.glyphicon-tent:before{content:\"\\26fa\"}.glyphicon-blackboard:before{content:\"\\e218\"}.glyphicon-bed:before{content:\"\\e219\"}.glyphicon-apple:before{content:\"\\f8ff\"}.glyphicon-erase:before{content:\"\\e221\"}.glyphicon-hourglass:before{content:\"\\231b\"}.glyphicon-lamp:before{content:\"\\e223\"}.glyphicon-duplicate:before{content:\"\\e224\"}.glyphicon-piggy-bank:before{content:\"\\e225\"}.glyphicon-scissors:before{content:\"\\e226\"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:\"\\e227\"}.glyphicon-jpy:before,.glyphicon-yen:before{content:\"\\00a5\"}.glyphicon-rub:before,.glyphicon-ruble:before{content:\"\\20bd\"}.glyphicon-scale:before{content:\"\\e230\"}.glyphicon-ice-lolly:before{content:\"\\e231\"}.glyphicon-ice-lolly-tasted:before{content:\"\\e232\"}.glyphicon-education:before{content:\"\\e233\"}.glyphicon-option-horizontal:before{content:\"\\e234\"}.glyphicon-option-vertical:before{content:\"\\e235\"}.glyphicon-menu-hamburger:before{content:\"\\e236\"}.glyphicon-modal-window:before{content:\"\\e237\"}.glyphicon-oil:before{content:\"\\e238\"}.glyphicon-grain:before{content:\"\\e239\"}.glyphicon-sunglasses:before{content:\"\\e240\"}.glyphicon-text-size:before{content:\"\\e241\"}.glyphicon-text-color:before{content:\"\\e242\"}.glyphicon-text-background:before{content:\"\\e243\"}.glyphicon-object-align-top:before{content:\"\\e244\"}.glyphicon-object-align-bottom:before{content:\"\\e245\"}.glyphicon-object-align-horizontal:before{content:\"\\e246\"}.glyphicon-object-align-left:before{content:\"\\e247\"}.glyphicon-object-align-vertical:before{content:\"\\e248\"}.glyphicon-object-align-right:before{content:\"\\e249\"}.glyphicon-triangle-right:before{content:\"\\e250\"}.glyphicon-triangle-left:before{content:\"\\e251\"}.glyphicon-triangle-bottom:before{content:\"\\e252\"}.glyphicon-triangle-top:before{content:\"\\e253\"}.glyphicon-console:before{content:\"\\e254\"}.glyphicon-superscript:before{content:\"\\e255\"}.glyphicon-subscript:before{content:\"\\e256\"}.glyphicon-menu-left:before{content:\"\\e257\"}.glyphicon-menu-right:before{content:\"\\e258\"}.glyphicon-menu-down:before{content:\"\\e259\"}.glyphicon-menu-up:before{content:\"\\e260\"}*,:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Raleway,sans-serif;font-size:14px;line-height:1.6;color:#636b6f}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#3097D1;text-decoration:none}a:focus,a:hover{color:#216a94;text-decoration:underline}a:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.img-responsive{display:block;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.6;border:1px solid #ddd;border-radius:4px;transition:all .2s ease-in-out;display:inline-block;height:auto}.img-circle{border-radius:50%}hr{margin-top:22px;margin-bottom:22px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:22px;margin-bottom:11px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:11px;margin-bottom:11px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 11px}.lead{margin-bottom:22px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.initialism,.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#3097D1}a.text-primary:focus,a.text-primary:hover{color:#2579a9}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#3097D1}a.bg-primary:focus,a.bg-primary:hover{background-color:#2579a9}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:10px;margin:44px 0 22px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:22px}ol,ul{margin-bottom:11px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dd,dt{line-height:1.6}dd{margin-left:0}.dl-horizontal dd:after,.dl-horizontal dd:before{content:\" \";display:table}.dl-horizontal dd:after{clear:both}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dropdown-menu>li>a,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%}blockquote{padding:11px 22px;margin:0 0 22px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.6;color:#777}legend,pre{color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\\2014 \\00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\\00A0 \\2014'}address{font-style:normal;line-height:1.6}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,\"Courier New\",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{display:block;padding:10.5px;margin:0 0 11px;font-size:13px;line-height:1.6;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container-fluid:after,.container-fluid:before,.container:after,.container:before,.row:after,.row:before{display:table;content:\" \"}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-left:15px;padding-right:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1{width:8.33333333%}.col-xs-2{width:16.66666667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333%}.col-xs-5{width:41.66666667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333333%}.col-xs-8{width:66.66666667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333%}.col-xs-11{width:91.66666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333333%}.col-xs-push-2{left:16.66666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333333%}.col-xs-push-5{left:41.66666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333333%}.col-xs-push-8{left:66.66666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333333%}.col-xs-push-11{left:91.66666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.33333333%}.col-sm-2{width:16.66666667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333%}.col-sm-5{width:41.66666667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333333%}.col-sm-8{width:66.66666667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333%}.col-sm-11{width:91.66666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333333%}.col-sm-push-2{left:16.66666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333%}.col-sm-push-5{left:41.66666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333333%}.col-sm-push-8{left:66.66666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333%}.col-sm-push-11{left:91.66666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.33333333%}.col-md-2{width:16.66666667%}.col-md-3{width:25%}.col-md-4{width:33.33333333%}.col-md-5{width:41.66666667%}.col-md-6{width:50%}.col-md-7{width:58.33333333%}.col-md-8{width:66.66666667%}.col-md-9{width:75%}.col-md-10{width:83.33333333%}.col-md-11{width:91.66666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333333%}.col-md-pull-2{right:16.66666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333%}.col-md-pull-5{right:41.66666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333333%}.col-md-pull-8{right:66.66666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333%}.col-md-pull-11{right:91.66666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333333%}.col-md-push-2{left:16.66666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333%}.col-md-push-5{left:41.66666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333333%}.col-md-push-8{left:66.66666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333%}.col-md-push-11{left:91.66666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.33333333%}.col-lg-2{width:16.66666667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333%}.col-lg-5{width:41.66666667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333333%}.col-lg-8{width:66.66666667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333%}.col-lg-11{width:91.66666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333333%}.col-lg-push-2{left:16.66666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333%}.col-lg-push-5{left:41.66666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333333%}.col-lg-push-8{left:66.66666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333%}.col-lg-push-11{left:91.66666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-12{margin-left:100%}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;margin-bottom:22px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.6;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#f5f8fa}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:16.5px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{display:block;width:100%;margin-bottom:22px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.6;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:36px;padding:6px 12px;background-color:#fff;border:1px solid #ccd0d2;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#98cbe8;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(152,203,232,.6)}.form-control::-moz-placeholder{color:#b1b7ba;opacity:1}.form-control:-ms-input-placeholder{color:#b1b7ba}.form-control::-webkit-input-placeholder{color:#b1b7ba}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:36px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm>.input-group-btn>input[type=date].btn,.input-group-sm>.input-group-btn>input[type=time].btn,.input-group-sm>.input-group-btn>input[type=datetime-local].btn,.input-group-sm>.input-group-btn>input[type=month].btn,.input-group-sm>input[type=date].form-control,.input-group-sm>input[type=date].input-group-addon,.input-group-sm>input[type=time].form-control,.input-group-sm>input[type=time].input-group-addon,.input-group-sm>input[type=datetime-local].form-control,.input-group-sm>input[type=datetime-local].input-group-addon,.input-group-sm>input[type=month].form-control,.input-group-sm>input[type=month].input-group-addon,input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg>.input-group-btn>input[type=date].btn,.input-group-lg>.input-group-btn>input[type=time].btn,.input-group-lg>.input-group-btn>input[type=datetime-local].btn,.input-group-lg>.input-group-btn>input[type=month].btn,.input-group-lg>input[type=date].form-control,.input-group-lg>input[type=date].input-group-addon,.input-group-lg>input[type=time].form-control,.input-group-lg>input[type=time].input-group-addon,.input-group-lg>input[type=datetime-local].form-control,.input-group-lg>input[type=datetime-local].input-group-addon,.input-group-lg>input[type=month].form-control,.input-group-lg>input[type=month].input-group-addon,input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:22px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:36px}.form-control-static.input-lg,.form-control-static.input-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:30px;line-height:30px}.input-group-sm>.input-group-btn>select[multiple].btn,.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:34px;padding:6px 10px;font-size:12px;line-height:1.5}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:46px;line-height:46px}.input-group-lg>.input-group-btn>select[multiple].btn,.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:40px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:45px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:36px;height:36px;line-height:36px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-feedback label~.form-control-feedback{top:27px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#a4aaae}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:29px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:after,.form-horizontal .form-group:before{content:\" \";display:table}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.6;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#636b6f;text-decoration:none}.btn.active,.btn:active{outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#636b6f;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#636b6f;background-color:#e6e5e5;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.btn-default.dropdown-toggle{color:#636b6f;background-color:#e6e5e5;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.btn-default.dropdown-toggle.focus,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle:hover{color:#636b6f;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#636b6f}.btn-primary{color:#fff;background-color:#3097D1;border-color:#2a88bd}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#2579a9;border-color:#133d55}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#2579a9;border-color:#1f648b}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.btn-primary.dropdown-toggle.focus,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#1f648b;border-color:#133d55}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#3097D1;border-color:#2a88bd}.btn-primary .badge{color:#3097D1;background-color:#fff}.btn-success{color:#fff;background-color:#2ab27b;border-color:#259d6d}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#20895e;border-color:#0d3625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#20895e;border-color:#196c4b}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.btn-success.dropdown-toggle.focus,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle:hover{color:#fff;background-color:#196c4b;border-color:#0d3625}.btn-success.active,.btn-success:active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#2ab27b;border-color:#259d6d}.btn-success .badge{color:#2ab27b;background-color:#fff}.btn-info{color:#fff;background-color:#8eb4cb;border-color:#7da8c3}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#6b9dbb;border-color:#3d6983}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#6b9dbb;border-color:#538db0}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.btn-info.dropdown-toggle.focus,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle:hover{color:#fff;background-color:#538db0;border-color:#3d6983}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#8eb4cb;border-color:#7da8c3}.btn-info .badge{color:#8eb4cb;background-color:#fff}.btn-warning{color:#fff;background-color:#cbb956;border-color:#c5b143}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#b6a338;border-color:#685d20}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#b6a338;border-color:#9b8a30}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.btn-warning.dropdown-toggle.focus,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#9b8a30;border-color:#685d20}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#cbb956;border-color:#c5b143}.btn-warning .badge{color:#cbb956;background-color:#fff}.btn-danger{color:#fff;background-color:#bf5329;border-color:#aa4a24}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#954120;border-color:#411c0e}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#954120;border-color:#78341a}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.btn-danger.dropdown-toggle.focus,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#78341a;border-color:#411c0e}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#bf5329;border-color:#aa4a24}.btn-danger .badge{color:#bf5329;background-color:#fff}.btn-link{color:#3097D1;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#216a94;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;transition-property:height,visibility;transition-duration:.35s;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.6;white-space:nowrap}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.dropdown-menu .divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#3097D1}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\\9;content:\"\"}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:after,.btn-toolbar:before{content:\" \";display:table}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before{content:\" \";display:table}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 4px 4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group,.input-group-btn,.input-group-btn>.btn{position:relative}.input-group{display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccd0d2;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:after,.nav:before{content:\" \";display:table}.nav>li,.nav>li>a{display:block;position:relative}.nav:after{clear:both}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#3097D1}.nav .nav-divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.6;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#f5f8fa;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li,.nav-tabs.nav-justified>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#3097D1}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#f5f8fa}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:22px;border:1px solid transparent}.navbar:after,.navbar:before{content:\" \";display:table}.navbar-header:after,.navbar-header:before{content:\" \";display:table}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse:after,.navbar-collapse:before{content:\" \";display:table}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:14px 15px;font-size:18px;line-height:22px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:22px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:22px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-danger,.progress-striped .progress-bar-info,.progress-striped .progress-bar-success,.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:14px;padding-bottom:14px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:7px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:7px;margin-bottom:7px}.btn-group-sm>.navbar-btn.btn,.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.btn-group-xs>.navbar-btn.btn,.navbar-btn.btn-xs,.navbar-text{margin-top:14px;margin-bottom:14px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#fff;border-color:#d3e0e9}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5d5d;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#eee}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#d3e0e9}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#eee;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#eee}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#090909;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:22px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li+li:before{content:\"/ \";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:22px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.6;text-decoration:none;color:#3097D1;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#216a94;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;background-color:#3097D1;border-color:#3097D1;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;text-align:center}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:22px 0;list-style:none;text-align:center}.pager:after,.pager:before{content:\" \";display:table}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}.label:empty{display:none}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#3097D1}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#2579a9}.label-success{background-color:#2ab27b}.label-success[href]:focus,.label-success[href]:hover{background-color:#20895e}.label-info{background-color:#8eb4cb}.label-info[href]:focus,.label-info[href]:hover{background-color:#6b9dbb}.label-warning{background-color:#cbb956}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#b6a338}.label-danger{background-color:#bf5329}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#954120}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#3097D1;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:22px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.6;background-color:#f5f8fa;border:1px solid #ddd;border-radius:4px;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#636b6f}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#3097D1}.alert{padding:15px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:22px;margin-bottom:22px;background-color:#f5f5f5;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:22px;color:#fff;text-align:center;background-color:#3097D1;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#2ab27b}.progress-bar-info{background-color:#8eb4cb}.progress-bar-warning{background-color:#cbb956}.progress-bar-danger{background-color:#bf5329}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #d3e0e9}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#3097D1;border-color:#3097D1}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#d7ebf6}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:22px;background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-body:after,.panel-body:before{content:\" \";display:table}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #d3e0e9;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:22px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #d3e0e9}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #d3e0e9}.panel-default{border-color:#d3e0e9}.panel-default>.panel-heading{color:#333;background-color:#fff;border-color:#d3e0e9}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d3e0e9}.panel-default>.panel-heading .badge{color:#fff;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d3e0e9}.panel-primary{border-color:#3097D1}.panel-primary>.panel-heading{color:#fff;background-color:#3097D1;border-color:#3097D1}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#3097D1}.panel-primary>.panel-heading .badge{color:#3097D1;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#3097D1}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.popover,.tooltip{font-family:Raleway,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.6;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-content,.popover{background-clip:padding-box}.modal{display:none;position:fixed;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before{display:table;content:\" \"}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);transform:translate(0,-25%);transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.6}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;text-align:left;text-align:start;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow,.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.top .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.top-left .tooltip-arrow{right:5px;margin-bottom:-5px}.tooltip.top-right .tooltip-arrow{left:5px;margin-bottom:-5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;text-align:start;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.carousel-caption,.carousel-control{color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:\"\"}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:\" \";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.left>.arrow:after,.popover.right>.arrow:after{content:\" \";bottom:-10px}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{left:1px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:\" \";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;background-color:transparent}.carousel-control.left{background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\\2039'}.carousel-control .icon-next:before{content:'\\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\\9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:after,.clearfix:before{content:\" \";display:table}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}"
  },
  {
    "path": "public/index.php",
    "content": "<?php\n\n/**\n * Laravel - A PHP Framework For Web Artisans\n *\n * @package  Laravel\n * @author   Taylor Otwell <taylor@laravel.com>\n */\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|--------------------------------------------------------------------------\n| Register The Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader for\n| our application. We just need to utilize it! We'll simply require it\n| into the script here so that we don't have to worry about manual\n| loading any of our classes later on. It feels great to relax.\n|\n*/\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/*\n|--------------------------------------------------------------------------\n| Turn On The Lights\n|--------------------------------------------------------------------------\n|\n| We need to illuminate PHP development, so let us turn on the lights.\n| This bootstraps the framework and gets it ready for use, then it\n| will load up this application so that we can run it and send\n| the responses back to the browser and delight our users.\n|\n*/\n\n$app = require_once __DIR__.'/../bootstrap/app.php';\n\n/*\n|--------------------------------------------------------------------------\n| Run The Application\n|--------------------------------------------------------------------------\n|\n| Once we have the application, we can handle the incoming request\n| through the kernel, and send the associated response back to\n| the client's browser allowing them to enjoy the creative\n| and wonderful application we have prepared for them.\n|\n*/\n\n$kernel = $app->make(Illuminate\\Contracts\\Http\\Kernel::class);\n\n$response = $kernel->handle(\n    $request = Illuminate\\Http\\Request::capture()\n);\n\n$response->send();\n\n$kernel->terminate($request, $response);\n"
  },
  {
    "path": "public/js/app.js",
    "content": "!function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=39)}([function(t,e,n){\"use strict\";function r(t){return\"[object Array]\"===C.call(t)}function i(t){return\"[object ArrayBuffer]\"===C.call(t)}function o(t){return\"undefined\"!=typeof FormData&&t instanceof FormData}function a(t){return\"undefined\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function s(t){return\"string\"==typeof t}function u(t){return\"number\"==typeof t}function c(t){return void 0===t}function l(t){return null!==t&&\"object\"==typeof t}function f(t){return\"[object Date]\"===C.call(t)}function p(t){return\"[object File]\"===C.call(t)}function d(t){return\"[object Blob]\"===C.call(t)}function h(t){return\"[object Function]\"===C.call(t)}function v(t){return l(t)&&h(t.pipe)}function g(t){return\"undefined\"!=typeof URLSearchParams&&t instanceof URLSearchParams}function m(t){return t.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\")}function y(){return\"undefined\"!=typeof window&&\"undefined\"!=typeof document&&\"function\"==typeof document.createElement}function b(t,e){if(null!==t&&void 0!==t)if(\"object\"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,i=t.length;n<i;n++)e.call(null,t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.call(null,t[o],o,t)}function _(){function t(t,n){\"object\"==typeof e[n]&&\"object\"==typeof t?e[n]=_(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;n<r;n++)b(arguments[n],t);return e}function w(t,e,n){return b(e,function(e,r){t[r]=n&&\"function\"==typeof e?x(e,n):e}),t}var x=n(6),C=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:i,isFormData:o,isArrayBufferView:a,isString:s,isNumber:u,isObject:l,isUndefined:c,isDate:f,isFile:p,isBlob:d,isFunction:h,isStream:v,isURLSearchParams:g,isStandardBrowserEnv:y,forEach:b,merge:_,extend:w,trim:m}},function(t,e,n){\"use strict\";(function(e){function r(t,e){!i.isUndefined(t)&&i.isUndefined(t[\"Content-Type\"])&&(t[\"Content-Type\"]=e)}var i=n(0),o=n(25),a={\"Content-Type\":\"application/x-www-form-urlencoded\"},s={adapter:function(){var t;return\"undefined\"!=typeof XMLHttpRequest?t=n(2):void 0!==e&&(t=n(2)),t}(),transformRequest:[function(t,e){return o(e,\"Content-Type\"),i.isFormData(t)||i.isArrayBuffer(t)||i.isStream(t)||i.isFile(t)||i.isBlob(t)?t:i.isArrayBufferView(t)?t.buffer:i.isURLSearchParams(t)?(r(e,\"application/x-www-form-urlencoded;charset=utf-8\"),t.toString()):i.isObject(t)?(r(e,\"application/json;charset=utf-8\"),JSON.stringify(t)):t}],transformResponse:[function(t){if(\"string\"==typeof t){t=t.replace(/^\\)\\]\\}',?\\n/,\"\");try{t=JSON.parse(t)}catch(t){}}return t}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,validateStatus:function(t){return t>=200&&t<300}};s.headers={common:{Accept:\"application/json, text/plain, */*\"}},i.forEach([\"delete\",\"get\",\"head\"],function(t){s.headers[t]={}}),i.forEach([\"post\",\"put\",\"patch\"],function(t){s.headers[t]=i.merge(a)}),t.exports=s}).call(e,n(33))},function(t,e,n){\"use strict\";var r=n(0),i=n(17),o=n(20),a=n(26),s=n(24),u=n(5),c=\"undefined\"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(19);t.exports=function(t){return new Promise(function(e,l){var f=t.data,p=t.headers;r.isFormData(f)&&delete p[\"Content-Type\"];var d=new XMLHttpRequest,h=\"onreadystatechange\",v=!1;if(\"undefined\"==typeof window||!window.XDomainRequest||\"withCredentials\"in d||s(t.url)||(d=new window.XDomainRequest,h=\"onload\",v=!0,d.onprogress=function(){},d.ontimeout=function(){}),t.auth){var g=t.auth.username||\"\",m=t.auth.password||\"\";p.Authorization=\"Basic \"+c(g+\":\"+m)}if(d.open(t.method.toUpperCase(),o(t.url,t.params,t.paramsSerializer),!0),d.timeout=t.timeout,d[h]=function(){if(d&&(4===d.readyState||v)&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf(\"file:\"))){var n=\"getAllResponseHeaders\"in d?a(d.getAllResponseHeaders()):null,r=t.responseType&&\"text\"!==t.responseType?d.response:d.responseText,o={data:r,status:1223===d.status?204:d.status,statusText:1223===d.status?\"No Content\":d.statusText,headers:n,config:t,request:d};i(e,l,o),d=null}},d.onerror=function(){l(u(\"Network Error\",t)),d=null},d.ontimeout=function(){l(u(\"timeout of \"+t.timeout+\"ms exceeded\",t,\"ECONNABORTED\")),d=null},r.isStandardBrowserEnv()){var y=n(22),b=(t.withCredentials||s(t.url))&&t.xsrfCookieName?y.read(t.xsrfCookieName):void 0;b&&(p[t.xsrfHeaderName]=b)}if(\"setRequestHeader\"in d&&r.forEach(p,function(t,e){void 0===f&&\"content-type\"===e.toLowerCase()?delete p[e]:d.setRequestHeader(e,t)}),t.withCredentials&&(d.withCredentials=!0),t.responseType)try{d.responseType=t.responseType}catch(t){if(\"json\"!==d.responseType)throw t}\"function\"==typeof t.onDownloadProgress&&d.addEventListener(\"progress\",t.onDownloadProgress),\"function\"==typeof t.onUploadProgress&&d.upload&&d.upload.addEventListener(\"progress\",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then(function(t){d&&(d.abort(),l(t),d=null)}),void 0===f&&(f=null),d.send(f)})}},function(t,e,n){\"use strict\";function r(t){this.message=t}r.prototype.toString=function(){return\"Cancel\"+(this.message?\": \"+this.message:\"\")},r.prototype.__CANCEL__=!0,t.exports=r},function(t,e,n){\"use strict\";t.exports=function(t){return!(!t||!t.__CANCEL__)}},function(t,e,n){\"use strict\";var r=n(16);t.exports=function(t,e,n,i){var o=new Error(t);return r(o,e,n,i)}},function(t,e,n){\"use strict\";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}}},function(t,e){var n;n=function(){return this}();try{n=n||Function(\"return this\")()||(0,eval)(\"this\")}catch(t){\"object\"==typeof window&&(n=window)}t.exports=n},function(t,e,n){n(29),window.Vue=n(37),Vue.component(\"example\",n(34));new Vue({el:\"#app\"})},function(t,e){},function(t,e,n){t.exports=n(11)},function(t,e,n){\"use strict\";function r(t){var e=new a(t),n=o(a.prototype.request,e);return i.extend(n,a.prototype,e),i.extend(n,e),n}var i=n(0),o=n(6),a=n(13),s=n(1),u=r(s);u.Axios=a,u.create=function(t){return r(i.merge(s,t))},u.Cancel=n(3),u.CancelToken=n(12),u.isCancel=n(4),u.all=function(t){return Promise.all(t)},u.spread=n(27),t.exports=u,t.exports.default=u},function(t,e,n){\"use strict\";function r(t){if(\"function\"!=typeof t)throw new TypeError(\"executor must be a function.\");var e;this.promise=new Promise(function(t){e=t});var n=this;t(function(t){n.reason||(n.reason=new i(t),e(n.reason))})}var i=n(3);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var t;return{token:new r(function(e){t=e}),cancel:t}},t.exports=r},function(t,e,n){\"use strict\";function r(t){this.defaults=t,this.interceptors={request:new a,response:new a}}var i=n(1),o=n(0),a=n(14),s=n(15),u=n(23),c=n(21);r.prototype.request=function(t){\"string\"==typeof t&&(t=o.merge({url:arguments[0]},arguments[1])),t=o.merge(i,this.defaults,{method:\"get\"},t),t.baseURL&&!u(t.url)&&(t.url=c(t.baseURL,t.url));var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n},o.forEach([\"delete\",\"get\",\"head\"],function(t){r.prototype[t]=function(e,n){return this.request(o.merge(n||{},{method:t,url:e}))}}),o.forEach([\"post\",\"put\",\"patch\"],function(t){r.prototype[t]=function(e,n,r){return this.request(o.merge(r||{},{method:t,url:e,data:n}))}}),t.exports=r},function(t,e,n){\"use strict\";function r(){this.handlers=[]}var i=n(0);r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){i.forEach(this.handlers,function(e){null!==e&&t(e)})},t.exports=r},function(t,e,n){\"use strict\";function r(t){t.cancelToken&&t.cancelToken.throwIfRequested()}var i=n(0),o=n(18),a=n(4),s=n(1);t.exports=function(t){return r(t),t.headers=t.headers||{},t.data=o(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],function(e){delete t.headers[e]}),(t.adapter||s.adapter)(t).then(function(e){return r(t),e.data=o(e.data,e.headers,t.transformResponse),e},function(e){return a(e)||(r(t),e&&e.response&&(e.response.data=o(e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)})}},function(t,e,n){\"use strict\";t.exports=function(t,e,n,r){return t.config=e,n&&(t.code=n),t.response=r,t}},function(t,e,n){\"use strict\";var r=n(5);t.exports=function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(r(\"Request failed with status code \"+n.status,n.config,null,n)):t(n)}},function(t,e,n){\"use strict\";var r=n(0);t.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},function(t,e,n){\"use strict\";function r(){this.message=\"String contains an invalid character\"}function i(t){for(var e,n,i=String(t),a=\"\",s=0,u=o;i.charAt(0|s)||(u=\"=\",s%1);a+=u.charAt(63&e>>8-s%1*8)){if((n=i.charCodeAt(s+=.75))>255)throw new r;e=e<<8|n}return a}var o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.prototype=new Error,r.prototype.code=5,r.prototype.name=\"InvalidCharacterError\",t.exports=i},function(t,e,n){\"use strict\";function r(t){return encodeURIComponent(t).replace(/%40/gi,\"@\").replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}var i=n(0);t.exports=function(t,e,n){if(!e)return t;var o;if(n)o=n(e);else if(i.isURLSearchParams(e))o=e.toString();else{var a=[];i.forEach(e,function(t,e){null!==t&&void 0!==t&&(i.isArray(t)&&(e+=\"[]\"),i.isArray(t)||(t=[t]),i.forEach(t,function(t){i.isDate(t)?t=t.toISOString():i.isObject(t)&&(t=JSON.stringify(t)),a.push(r(e)+\"=\"+r(t))}))}),o=a.join(\"&\")}return o&&(t+=(-1===t.indexOf(\"?\")?\"?\":\"&\")+o),t}},function(t,e,n){\"use strict\";t.exports=function(t,e){return t.replace(/\\/+$/,\"\")+\"/\"+e.replace(/^\\/+/,\"\")}},function(t,e,n){\"use strict\";var r=n(0);t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,i,o,a){var s=[];s.push(t+\"=\"+encodeURIComponent(e)),r.isNumber(n)&&s.push(\"expires=\"+new Date(n).toGMTString()),r.isString(i)&&s.push(\"path=\"+i),r.isString(o)&&s.push(\"domain=\"+o),!0===a&&s.push(\"secure\"),document.cookie=s.join(\"; \")},read:function(t){var e=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+t+\")=([^;]*)\"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,\"\",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(t,e,n){\"use strict\";t.exports=function(t){return/^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(t)}},function(t,e,n){\"use strict\";var r=n(0);t.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(i.setAttribute(\"href\",e),e=i.href),i.setAttribute(\"href\",e),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,\"\"):\"\",host:i.host,search:i.search?i.search.replace(/^\\?/,\"\"):\"\",hash:i.hash?i.hash.replace(/^#/,\"\"):\"\",hostname:i.hostname,port:i.port,pathname:\"/\"===i.pathname.charAt(0)?i.pathname:\"/\"+i.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement(\"a\");return e=t(window.location.href),function(n){var i=r.isString(n)?t(n):n;return i.protocol===e.protocol&&i.host===e.host}}():function(){return function(){return!0}}()},function(t,e,n){\"use strict\";var r=n(0);t.exports=function(t,e){r.forEach(t,function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])})}},function(t,e,n){\"use strict\";var r=n(0);t.exports=function(t){var e,n,i,o={};return t?(r.forEach(t.split(\"\\n\"),function(t){i=t.indexOf(\":\"),e=r.trim(t.substr(0,i)).toLowerCase(),n=r.trim(t.substr(i+1)),e&&(o[e]=o[e]?o[e]+\", \"+n:n)}),o):o}},function(t,e,n){\"use strict\";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default={mounted:function(){}}},function(t,e,n){window._=n(32);try{window.$=window.jQuery=n(31),n(30)}catch(t){}window.axios=n(10),window.axios.defaults.headers.common[\"X-Requested-With\"]=\"XMLHttpRequest\";var r=document.head.querySelector('meta[name=\"csrf-token\"]');r&&(window.axios.defaults.headers.common[\"X-CSRF-TOKEN\"]=r.content)},function(t,e){/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license\n */\nif(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");+function(t){\"use strict\";var e=t.fn.jquery.split(\" \")[0].split(\".\");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")}(jQuery),function(t){\"use strict\";function e(){var t=document.createElement(\"bootstrap\"),e={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}t.fn.emulateTransitionEnd=function(e){var n=!1,r=this;t(this).one(\"bsTransitionEnd\",function(){n=!0});var i=function(){n||t(r).trigger(t.support.transition.end)};return setTimeout(i,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(t){\"use strict\";function e(e){return this.each(function(){var n=t(this),i=n.data(\"bs.alert\");i||n.data(\"bs.alert\",i=new r(this)),\"string\"==typeof e&&i[e].call(n)})}var n='[data-dismiss=\"alert\"]',r=function(e){t(e).on(\"click\",n,this.close)};r.VERSION=\"3.3.7\",r.TRANSITION_DURATION=150,r.prototype.close=function(e){function n(){a.detach().trigger(\"closed.bs.alert\").remove()}var i=t(this),o=i.attr(\"data-target\");o||(o=i.attr(\"href\"),o=o&&o.replace(/.*(?=#[^\\s]*$)/,\"\"));var a=t(\"#\"===o?[]:o);e&&e.preventDefault(),a.length||(a=i.closest(\".alert\")),a.trigger(e=t.Event(\"close.bs.alert\")),e.isDefaultPrevented()||(a.removeClass(\"in\"),t.support.transition&&a.hasClass(\"fade\")?a.one(\"bsTransitionEnd\",n).emulateTransitionEnd(r.TRANSITION_DURATION):n())};var i=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=r,t.fn.alert.noConflict=function(){return t.fn.alert=i,this},t(document).on(\"click.bs.alert.data-api\",n,r.prototype.close)}(jQuery),function(t){\"use strict\";function e(e){return this.each(function(){var r=t(this),i=r.data(\"bs.button\"),o=\"object\"==typeof e&&e;i||r.data(\"bs.button\",i=new n(this,o)),\"toggle\"==e?i.toggle():e&&i.setState(e)})}var n=function(e,r){this.$element=t(e),this.options=t.extend({},n.DEFAULTS,r),this.isLoading=!1};n.VERSION=\"3.3.7\",n.DEFAULTS={loadingText:\"loading...\"},n.prototype.setState=function(e){var n=\"disabled\",r=this.$element,i=r.is(\"input\")?\"val\":\"html\",o=r.data();e+=\"Text\",null==o.resetText&&r.data(\"resetText\",r[i]()),setTimeout(t.proxy(function(){r[i](null==o[e]?this.options[e]:o[e]),\"loadingText\"==e?(this.isLoading=!0,r.addClass(n).attr(n,n).prop(n,!0)):this.isLoading&&(this.isLoading=!1,r.removeClass(n).removeAttr(n).prop(n,!1))},this),0)},n.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle=\"buttons\"]');if(e.length){var n=this.$element.find(\"input\");\"radio\"==n.prop(\"type\")?(n.prop(\"checked\")&&(t=!1),e.find(\".active\").removeClass(\"active\"),this.$element.addClass(\"active\")):\"checkbox\"==n.prop(\"type\")&&(n.prop(\"checked\")!==this.$element.hasClass(\"active\")&&(t=!1),this.$element.toggleClass(\"active\")),n.prop(\"checked\",this.$element.hasClass(\"active\")),t&&n.trigger(\"change\")}else this.$element.attr(\"aria-pressed\",!this.$element.hasClass(\"active\")),this.$element.toggleClass(\"active\")};var r=t.fn.button;t.fn.button=e,t.fn.button.Constructor=n,t.fn.button.noConflict=function(){return t.fn.button=r,this},t(document).on(\"click.bs.button.data-api\",'[data-toggle^=\"button\"]',function(n){var r=t(n.target).closest(\".btn\");e.call(r,\"toggle\"),t(n.target).is('input[type=\"radio\"], input[type=\"checkbox\"]')||(n.preventDefault(),r.is(\"input,button\")?r.trigger(\"focus\"):r.find(\"input:visible,button:visible\").first().trigger(\"focus\"))}).on(\"focus.bs.button.data-api blur.bs.button.data-api\",'[data-toggle^=\"button\"]',function(e){t(e.target).closest(\".btn\").toggleClass(\"focus\",/^focus(in)?$/.test(e.type))})}(jQuery),function(t){\"use strict\";function e(e){return this.each(function(){var r=t(this),i=r.data(\"bs.carousel\"),o=t.extend({},n.DEFAULTS,r.data(),\"object\"==typeof e&&e),a=\"string\"==typeof e?e:o.slide;i||r.data(\"bs.carousel\",i=new n(this,o)),\"number\"==typeof e?i.to(e):a?i[a]():o.interval&&i.pause().cycle()})}var n=function(e,n){this.$element=t(e),this.$indicators=this.$element.find(\".carousel-indicators\"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on(\"keydown.bs.carousel\",t.proxy(this.keydown,this)),\"hover\"==this.options.pause&&!(\"ontouchstart\"in document.documentElement)&&this.$element.on(\"mouseenter.bs.carousel\",t.proxy(this.pause,this)).on(\"mouseleave.bs.carousel\",t.proxy(this.cycle,this))};n.VERSION=\"3.3.7\",n.TRANSITION_DURATION=600,n.DEFAULTS={interval:5e3,pause:\"hover\",wrap:!0,keyboard:!0},n.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},n.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},n.prototype.getItemIndex=function(t){return this.$items=t.parent().children(\".item\"),this.$items.index(t||this.$active)},n.prototype.getItemForDirection=function(t,e){var n=this.getItemIndex(e);if((\"prev\"==t&&0===n||\"next\"==t&&n==this.$items.length-1)&&!this.options.wrap)return e;var r=\"prev\"==t?-1:1,i=(n+r)%this.$items.length;return this.$items.eq(i)},n.prototype.to=function(t){var e=this,n=this.getItemIndex(this.$active=this.$element.find(\".item.active\"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",function(){e.to(t)}):n==t?this.pause().cycle():this.slide(t>n?\"next\":\"prev\",this.$items.eq(t))},n.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(\".next, .prev\").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},n.prototype.next=function(){if(!this.sliding)return this.slide(\"next\")},n.prototype.prev=function(){if(!this.sliding)return this.slide(\"prev\")},n.prototype.slide=function(e,r){var i=this.$element.find(\".item.active\"),o=r||this.getItemForDirection(e,i),a=this.interval,s=\"next\"==e?\"left\":\"right\",u=this;if(o.hasClass(\"active\"))return this.sliding=!1;var c=o[0],l=t.Event(\"slide.bs.carousel\",{relatedTarget:c,direction:s});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(\".active\").removeClass(\"active\");var f=t(this.$indicators.children()[this.getItemIndex(o)]);f&&f.addClass(\"active\")}var p=t.Event(\"slid.bs.carousel\",{relatedTarget:c,direction:s});return t.support.transition&&this.$element.hasClass(\"slide\")?(o.addClass(e),o[0].offsetWidth,i.addClass(s),o.addClass(s),i.one(\"bsTransitionEnd\",function(){o.removeClass([e,s].join(\" \")).addClass(\"active\"),i.removeClass([\"active\",s].join(\" \")),u.sliding=!1,setTimeout(function(){u.$element.trigger(p)},0)}).emulateTransitionEnd(n.TRANSITION_DURATION)):(i.removeClass(\"active\"),o.addClass(\"active\"),this.sliding=!1,this.$element.trigger(p)),a&&this.cycle(),this}};var r=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=n,t.fn.carousel.noConflict=function(){return t.fn.carousel=r,this};var i=function(n){var r,i=t(this),o=t(i.attr(\"data-target\")||(r=i.attr(\"href\"))&&r.replace(/.*(?=#[^\\s]+$)/,\"\"));if(o.hasClass(\"carousel\")){var a=t.extend({},o.data(),i.data()),s=i.attr(\"data-slide-to\");s&&(a.interval=!1),e.call(o,a),s&&o.data(\"bs.carousel\").to(s),n.preventDefault()}};t(document).on(\"click.bs.carousel.data-api\",\"[data-slide]\",i).on(\"click.bs.carousel.data-api\",\"[data-slide-to]\",i),t(window).on(\"load\",function(){t('[data-ride=\"carousel\"]').each(function(){var n=t(this);e.call(n,n.data())})})}(jQuery),function(t){\"use strict\";function e(e){var n,r=e.attr(\"data-target\")||(n=e.attr(\"href\"))&&n.replace(/.*(?=#[^\\s]+$)/,\"\");return t(r)}function n(e){return this.each(function(){var n=t(this),i=n.data(\"bs.collapse\"),o=t.extend({},r.DEFAULTS,n.data(),\"object\"==typeof e&&e);!i&&o.toggle&&/show|hide/.test(e)&&(o.toggle=!1),i||n.data(\"bs.collapse\",i=new r(this,o)),\"string\"==typeof e&&i[e]()})}var r=function(e,n){this.$element=t(e),this.options=t.extend({},r.DEFAULTS,n),this.$trigger=t('[data-toggle=\"collapse\"][href=\"#'+e.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+e.id+'\"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};r.VERSION=\"3.3.7\",r.TRANSITION_DURATION=350,r.DEFAULTS={toggle:!0},r.prototype.dimension=function(){return this.$element.hasClass(\"width\")?\"width\":\"height\"},r.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass(\"in\")){var e,i=this.$parent&&this.$parent.children(\".panel\").children(\".in, .collapsing\");if(!(i&&i.length&&(e=i.data(\"bs.collapse\"))&&e.transitioning)){var o=t.Event(\"show.bs.collapse\");if(this.$element.trigger(o),!o.isDefaultPrevented()){i&&i.length&&(n.call(i,\"hide\"),e||i.data(\"bs.collapse\",null));var a=this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[a](0).attr(\"aria-expanded\",!0),this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\",!0),this.transitioning=1;var s=function(){this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[a](\"\"),this.transitioning=0,this.$element.trigger(\"shown.bs.collapse\")};if(!t.support.transition)return s.call(this);var u=t.camelCase([\"scroll\",a].join(\"-\"));this.$element.one(\"bsTransitionEnd\",t.proxy(s,this)).emulateTransitionEnd(r.TRANSITION_DURATION)[a](this.$element[0][u])}}}},r.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass(\"in\")){var e=t.Event(\"hide.bs.collapse\");if(this.$element.trigger(e),!e.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\",!1),this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\",!1),this.transitioning=1;var i=function(){this.transitioning=0,this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\")};if(!t.support.transition)return i.call(this);this.$element[n](0).one(\"bsTransitionEnd\",t.proxy(i,this)).emulateTransitionEnd(r.TRANSITION_DURATION)}}},r.prototype.toggle=function(){this[this.$element.hasClass(\"in\")?\"hide\":\"show\"]()},r.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"'+this.options.parent+'\"]').each(t.proxy(function(n,r){var i=t(r);this.addAriaAndCollapsedClass(e(i),i)},this)).end()},r.prototype.addAriaAndCollapsedClass=function(t,e){var n=t.hasClass(\"in\");t.attr(\"aria-expanded\",n),e.toggleClass(\"collapsed\",!n).attr(\"aria-expanded\",n)};var i=t.fn.collapse;t.fn.collapse=n,t.fn.collapse.Constructor=r,t.fn.collapse.noConflict=function(){return t.fn.collapse=i,this},t(document).on(\"click.bs.collapse.data-api\",'[data-toggle=\"collapse\"]',function(r){var i=t(this);i.attr(\"data-target\")||r.preventDefault();var o=e(i),a=o.data(\"bs.collapse\"),s=a?\"toggle\":i.data();n.call(o,s)})}(jQuery),function(t){\"use strict\";function e(e){var n=e.attr(\"data-target\");n||(n=e.attr(\"href\"),n=n&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\\s]*$)/,\"\"));var r=n&&t(n);return r&&r.length?r:e.parent()}function n(n){n&&3===n.which||(t(i).remove(),t(o).each(function(){var r=t(this),i=e(r),o={relatedTarget:this};i.hasClass(\"open\")&&(n&&\"click\"==n.type&&/input|textarea/i.test(n.target.tagName)&&t.contains(i[0],n.target)||(i.trigger(n=t.Event(\"hide.bs.dropdown\",o)),n.isDefaultPrevented()||(r.attr(\"aria-expanded\",\"false\"),i.removeClass(\"open\").trigger(t.Event(\"hidden.bs.dropdown\",o)))))}))}function r(e){return this.each(function(){var n=t(this),r=n.data(\"bs.dropdown\");r||n.data(\"bs.dropdown\",r=new a(this)),\"string\"==typeof e&&r[e].call(n)})}var i=\".dropdown-backdrop\",o='[data-toggle=\"dropdown\"]',a=function(e){t(e).on(\"click.bs.dropdown\",this.toggle)};a.VERSION=\"3.3.7\",a.prototype.toggle=function(r){var i=t(this);if(!i.is(\".disabled, :disabled\")){var o=e(i),a=o.hasClass(\"open\");if(n(),!a){\"ontouchstart\"in document.documentElement&&!o.closest(\".navbar-nav\").length&&t(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(t(this)).on(\"click\",n);var s={relatedTarget:this};if(o.trigger(r=t.Event(\"show.bs.dropdown\",s)),r.isDefaultPrevented())return;i.trigger(\"focus\").attr(\"aria-expanded\",\"true\"),o.toggleClass(\"open\").trigger(t.Event(\"shown.bs.dropdown\",s))}return!1}},a.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var r=t(this);if(n.preventDefault(),n.stopPropagation(),!r.is(\".disabled, :disabled\")){var i=e(r),a=i.hasClass(\"open\");if(!a&&27!=n.which||a&&27==n.which)return 27==n.which&&i.find(o).trigger(\"focus\"),r.trigger(\"click\");var s=i.find(\".dropdown-menu li:not(.disabled):visible a\");if(s.length){var u=s.index(n.target);38==n.which&&u>0&&u--,40==n.which&&u<s.length-1&&u++,~u||(u=0),s.eq(u).trigger(\"focus\")}}}};var s=t.fn.dropdown;t.fn.dropdown=r,t.fn.dropdown.Constructor=a,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=s,this},t(document).on(\"click.bs.dropdown.data-api\",n).on(\"click.bs.dropdown.data-api\",\".dropdown form\",function(t){t.stopPropagation()}).on(\"click.bs.dropdown.data-api\",o,a.prototype.toggle).on(\"keydown.bs.dropdown.data-api\",o,a.prototype.keydown).on(\"keydown.bs.dropdown.data-api\",\".dropdown-menu\",a.prototype.keydown)}(jQuery),function(t){\"use strict\";function e(e,r){return this.each(function(){var i=t(this),o=i.data(\"bs.modal\"),a=t.extend({},n.DEFAULTS,i.data(),\"object\"==typeof e&&e);o||i.data(\"bs.modal\",o=new n(this,a)),\"string\"==typeof e?o[e](r):a.show&&o.show(r)})}var n=function(e,n){this.options=n,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(\".modal-dialog\"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(\".modal-content\").load(this.options.remote,t.proxy(function(){this.$element.trigger(\"loaded.bs.modal\")},this))};n.VERSION=\"3.3.7\",n.TRANSITION_DURATION=300,n.BACKDROP_TRANSITION_DURATION=150,n.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},n.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},n.prototype.show=function(e){var r=this,i=t.Event(\"show.bs.modal\",{relatedTarget:e});this.$element.trigger(i),this.isShown||i.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass(\"modal-open\"),this.escape(),this.resize(),this.$element.on(\"click.dismiss.bs.modal\",'[data-dismiss=\"modal\"]',t.proxy(this.hide,this)),this.$dialog.on(\"mousedown.dismiss.bs.modal\",function(){r.$element.one(\"mouseup.dismiss.bs.modal\",function(e){t(e.target).is(r.$element)&&(r.ignoreBackdropClick=!0)})}),this.backdrop(function(){var i=t.support.transition&&r.$element.hasClass(\"fade\");r.$element.parent().length||r.$element.appendTo(r.$body),r.$element.show().scrollTop(0),r.adjustDialog(),i&&r.$element[0].offsetWidth,r.$element.addClass(\"in\"),r.enforceFocus();var o=t.Event(\"shown.bs.modal\",{relatedTarget:e});i?r.$dialog.one(\"bsTransitionEnd\",function(){r.$element.trigger(\"focus\").trigger(o)}).emulateTransitionEnd(n.TRANSITION_DURATION):r.$element.trigger(\"focus\").trigger(o)}))},n.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event(\"hide.bs.modal\"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off(\"focusin.bs.modal\"),this.$element.removeClass(\"in\").off(\"click.dismiss.bs.modal\").off(\"mouseup.dismiss.bs.modal\"),this.$dialog.off(\"mousedown.dismiss.bs.modal\"),t.support.transition&&this.$element.hasClass(\"fade\")?this.$element.one(\"bsTransitionEnd\",t.proxy(this.hideModal,this)).emulateTransitionEnd(n.TRANSITION_DURATION):this.hideModal())},n.prototype.enforceFocus=function(){t(document).off(\"focusin.bs.modal\").on(\"focusin.bs.modal\",t.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger(\"focus\")},this))},n.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(\"keydown.dismiss.bs.modal\",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off(\"keydown.dismiss.bs.modal\")},n.prototype.resize=function(){this.isShown?t(window).on(\"resize.bs.modal\",t.proxy(this.handleUpdate,this)):t(window).off(\"resize.bs.modal\")},n.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass(\"modal-open\"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger(\"hidden.bs.modal\")})},n.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},n.prototype.backdrop=function(e){var r=this,i=this.$element.hasClass(\"fade\")?\"fade\":\"\";if(this.isShown&&this.options.backdrop){var o=t.support.transition&&i;if(this.$backdrop=t(document.createElement(\"div\")).addClass(\"modal-backdrop \"+i).appendTo(this.$body),this.$element.on(\"click.dismiss.bs.modal\",t.proxy(function(t){if(this.ignoreBackdropClick)return void(this.ignoreBackdropClick=!1);t.target===t.currentTarget&&(\"static\"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass(\"in\"),!e)return;o?this.$backdrop.one(\"bsTransitionEnd\",e).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass(\"in\");var a=function(){r.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass(\"fade\")?this.$backdrop.one(\"bsTransitionEnd\",a).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):a()}else e&&e()},n.prototype.handleUpdate=function(){this.adjustDialog()},n.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:\"\"})},n.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},n.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},n.prototype.setScrollbar=function(){var t=parseInt(this.$body.css(\"padding-right\")||0,10);this.originalBodyPad=document.body.style.paddingRight||\"\",this.bodyIsOverflowing&&this.$body.css(\"padding-right\",t+this.scrollbarWidth)},n.prototype.resetScrollbar=function(){this.$body.css(\"padding-right\",this.originalBodyPad)},n.prototype.measureScrollbar=function(){var t=document.createElement(\"div\");t.className=\"modal-scrollbar-measure\",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var r=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=n,t.fn.modal.noConflict=function(){return t.fn.modal=r,this},t(document).on(\"click.bs.modal.data-api\",'[data-toggle=\"modal\"]',function(n){var r=t(this),i=r.attr(\"href\"),o=t(r.attr(\"data-target\")||i&&i.replace(/.*(?=#[^\\s]+$)/,\"\")),a=o.data(\"bs.modal\")?\"toggle\":t.extend({remote:!/#/.test(i)&&i},o.data(),r.data());r.is(\"a\")&&n.preventDefault(),o.one(\"show.bs.modal\",function(t){t.isDefaultPrevented()||o.one(\"hidden.bs.modal\",function(){r.is(\":visible\")&&r.trigger(\"focus\")})}),e.call(o,a,this)})}(jQuery),function(t){\"use strict\";function e(e){return this.each(function(){var r=t(this),i=r.data(\"bs.tooltip\"),o=\"object\"==typeof e&&e;!i&&/destroy|hide/.test(e)||(i||r.data(\"bs.tooltip\",i=new n(this,o)),\"string\"==typeof e&&i[e]())})}var n=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init(\"tooltip\",t,e)};n.VERSION=\"3.3.7\",n.TRANSITION_DURATION=150,n.DEFAULTS={animation:!0,placement:\"top\",selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0}},n.prototype.init=function(e,n,r){if(this.enabled=!0,this.type=e,this.$element=t(n),this.options=this.getOptions(r),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var i=this.options.trigger.split(\" \"),o=i.length;o--;){var a=i[o];if(\"click\"==a)this.$element.on(\"click.\"+this.type,this.options.selector,t.proxy(this.toggle,this));else if(\"manual\"!=a){var s=\"hover\"==a?\"mouseenter\":\"focusin\",u=\"hover\"==a?\"mouseleave\":\"focusout\";this.$element.on(s+\".\"+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(u+\".\"+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&\"number\"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},n.prototype.getDelegateOptions=function(){var e={},n=this.getDefaults();return this._options&&t.each(this._options,function(t,r){n[t]!=r&&(e[t]=r)}),e},n.prototype.enter=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data(\"bs.\"+this.type);return n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,n)),e instanceof t.Event&&(n.inState[\"focusin\"==e.type?\"focus\":\"hover\"]=!0),n.tip().hasClass(\"in\")||\"in\"==n.hoverState?void(n.hoverState=\"in\"):(clearTimeout(n.timeout),n.hoverState=\"in\",n.options.delay&&n.options.delay.show?void(n.timeout=setTimeout(function(){\"in\"==n.hoverState&&n.show()},n.options.delay.show)):n.show())},n.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},n.prototype.leave=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data(\"bs.\"+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,n)),e instanceof t.Event&&(n.inState[\"focusout\"==e.type?\"focus\":\"hover\"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState=\"out\",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout(function(){\"out\"==n.hoverState&&n.hide()},n.options.delay.hide)}},n.prototype.show=function(){var e=t.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var r=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!r)return;var i=this,o=this.tip(),a=this.getUID(this.type);this.setContent(),o.attr(\"id\",a),this.$element.attr(\"aria-describedby\",a),this.options.animation&&o.addClass(\"fade\");var s=\"function\"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,u=/\\s?auto?\\s?/i,c=u.test(s);c&&(s=s.replace(u,\"\")||\"top\"),o.detach().css({top:0,left:0,display:\"block\"}).addClass(s).data(\"bs.\"+this.type,this),this.options.container?o.appendTo(this.options.container):o.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var l=this.getPosition(),f=o[0].offsetWidth,p=o[0].offsetHeight;if(c){var d=s,h=this.getPosition(this.$viewport);s=\"bottom\"==s&&l.bottom+p>h.bottom?\"top\":\"top\"==s&&l.top-p<h.top?\"bottom\":\"right\"==s&&l.right+f>h.width?\"left\":\"left\"==s&&l.left-f<h.left?\"right\":s,o.removeClass(d).addClass(s)}var v=this.getCalculatedOffset(s,l,f,p);this.applyPlacement(v,s);var g=function(){var t=i.hoverState;i.$element.trigger(\"shown.bs.\"+i.type),i.hoverState=null,\"out\"==t&&i.leave(i)};t.support.transition&&this.$tip.hasClass(\"fade\")?o.one(\"bsTransitionEnd\",g).emulateTransitionEnd(n.TRANSITION_DURATION):g()}},n.prototype.applyPlacement=function(e,n){var r=this.tip(),i=r[0].offsetWidth,o=r[0].offsetHeight,a=parseInt(r.css(\"margin-top\"),10),s=parseInt(r.css(\"margin-left\"),10);isNaN(a)&&(a=0),isNaN(s)&&(s=0),e.top+=a,e.left+=s,t.offset.setOffset(r[0],t.extend({using:function(t){r.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),r.addClass(\"in\");var u=r[0].offsetWidth,c=r[0].offsetHeight;\"top\"==n&&c!=o&&(e.top=e.top+o-c);var l=this.getViewportAdjustedDelta(n,e,u,c);l.left?e.left+=l.left:e.top+=l.top;var f=/top|bottom/.test(n),p=f?2*l.left-i+u:2*l.top-o+c,d=f?\"offsetWidth\":\"offsetHeight\";r.offset(e),this.replaceArrow(p,r[0][d],f)},n.prototype.replaceArrow=function(t,e,n){this.arrow().css(n?\"left\":\"top\",50*(1-t/e)+\"%\").css(n?\"top\":\"left\",\"\")},n.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(\".tooltip-inner\")[this.options.html?\"html\":\"text\"](e),t.removeClass(\"fade in top bottom left right\")},n.prototype.hide=function(e){function r(){\"in\"!=i.hoverState&&o.detach(),i.$element&&i.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\"+i.type),e&&e()}var i=this,o=t(this.$tip),a=t.Event(\"hide.bs.\"+this.type);if(this.$element.trigger(a),!a.isDefaultPrevented())return o.removeClass(\"in\"),t.support.transition&&o.hasClass(\"fade\")?o.one(\"bsTransitionEnd\",r).emulateTransitionEnd(n.TRANSITION_DURATION):r(),this.hoverState=null,this},n.prototype.fixTitle=function(){var t=this.$element;(t.attr(\"title\")||\"string\"!=typeof t.attr(\"data-original-title\"))&&t.attr(\"data-original-title\",t.attr(\"title\")||\"\").attr(\"title\",\"\")},n.prototype.hasContent=function(){return this.getTitle()},n.prototype.getPosition=function(e){e=e||this.$element;var n=e[0],r=\"BODY\"==n.tagName,i=n.getBoundingClientRect();null==i.width&&(i=t.extend({},i,{width:i.right-i.left,height:i.bottom-i.top}));var o=window.SVGElement&&n instanceof window.SVGElement,a=r?{top:0,left:0}:o?null:e.offset(),s={scroll:r?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},u=r?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},i,s,u,a)},n.prototype.getCalculatedOffset=function(t,e,n,r){return\"bottom\"==t?{top:e.top+e.height,left:e.left+e.width/2-n/2}:\"top\"==t?{top:e.top-r,left:e.left+e.width/2-n/2}:\"left\"==t?{top:e.top+e.height/2-r/2,left:e.left-n}:{top:e.top+e.height/2-r/2,left:e.left+e.width}},n.prototype.getViewportAdjustedDelta=function(t,e,n,r){var i={top:0,left:0};if(!this.$viewport)return i;var o=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var s=e.top-o-a.scroll,u=e.top+o-a.scroll+r;s<a.top?i.top=a.top-s:u>a.top+a.height&&(i.top=a.top+a.height-u)}else{var c=e.left-o,l=e.left+o+n;c<a.left?i.left=a.left-c:l>a.right&&(i.left=a.left+a.width-l)}return i},n.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr(\"data-original-title\")||(\"function\"==typeof e.title?e.title.call(t[0]):e.title)},n.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},n.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},n.prototype.enable=function(){this.enabled=!0},n.prototype.disable=function(){this.enabled=!1},n.prototype.toggleEnabled=function(){this.enabled=!this.enabled},n.prototype.toggle=function(e){var n=this;e&&((n=t(e.currentTarget).data(\"bs.\"+this.type))||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,n))),e?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass(\"in\")?n.leave(n):n.enter(n)},n.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off(\".\"+t.type).removeData(\"bs.\"+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})};var r=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=n,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=r,this}}(jQuery),function(t){\"use strict\";function e(e){return this.each(function(){var r=t(this),i=r.data(\"bs.popover\"),o=\"object\"==typeof e&&e;!i&&/destroy|hide/.test(e)||(i||r.data(\"bs.popover\",i=new n(this,o)),\"string\"==typeof e&&i[e]())})}var n=function(t,e){this.init(\"popover\",t,e)};if(!t.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");n.VERSION=\"3.3.7\",n.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'}),n.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),n.prototype.constructor=n,n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),n=this.getContent();t.find(\".popover-title\")[this.options.html?\"html\":\"text\"](e),t.find(\".popover-content\").children().detach().end()[this.options.html?\"string\"==typeof n?\"html\":\"append\":\"text\"](n),t.removeClass(\"fade top bottom left right in\"),t.find(\".popover-title\").html()||t.find(\".popover-title\").hide()},n.prototype.hasContent=function(){return this.getTitle()||this.getContent()},n.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr(\"data-content\")||(\"function\"==typeof e.content?e.content.call(t[0]):e.content)},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var r=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=n,t.fn.popover.noConflict=function(){return t.fn.popover=r,this}}(jQuery),function(t){\"use strict\";function e(n,r){this.$body=t(document.body),this.$scrollElement=t(t(n).is(document.body)?window:n),this.options=t.extend({},e.DEFAULTS,r),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",t.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each(function(){var r=t(this),i=r.data(\"bs.scrollspy\"),o=\"object\"==typeof n&&n;i||r.data(\"bs.scrollspy\",i=new e(this,o)),\"string\"==typeof n&&i[n]()})}e.VERSION=\"3.3.7\",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,n=\"offset\",r=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(n=\"position\",r=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),i=e.data(\"target\")||e.attr(\"href\"),o=/^#./.test(i)&&t(i);return o&&o.length&&o.is(\":visible\")&&[[o[n]().top+r,i]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),r=this.options.offset+n-this.$scrollElement.height(),i=this.offsets,o=this.targets,a=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),e>=r)return a!=(t=o[o.length-1])&&this.activate(t);if(a&&e<i[0])return this.activeTarget=null,this.clear();for(t=i.length;t--;)a!=o[t]&&e>=i[t]&&(void 0===i[t+1]||e<i[t+1])&&this.activate(o[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var n=this.selector+'[data-target=\"'+e+'\"],'+this.selector+'[href=\"'+e+'\"]',r=t(n).parents(\"li\").addClass(\"active\");r.parent(\".dropdown-menu\").length&&(r=r.closest(\"li.dropdown\").addClass(\"active\")),r.trigger(\"activate.bs.scrollspy\")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,\".active\").removeClass(\"active\")};var r=t.fn.scrollspy;t.fn.scrollspy=n,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=r,this},t(window).on(\"load.bs.scrollspy.data-api\",function(){t('[data-spy=\"scroll\"]').each(function(){var e=t(this);n.call(e,e.data())})})}(jQuery),function(t){\"use strict\";function e(e){return this.each(function(){var r=t(this),i=r.data(\"bs.tab\");i||r.data(\"bs.tab\",i=new n(this)),\"string\"==typeof e&&i[e]()})}var n=function(e){this.element=t(e)};n.VERSION=\"3.3.7\",n.TRANSITION_DURATION=150,n.prototype.show=function(){var e=this.element,n=e.closest(\"ul:not(.dropdown-menu)\"),r=e.data(\"target\");if(r||(r=e.attr(\"href\"),r=r&&r.replace(/.*(?=#[^\\s]*$)/,\"\")),!e.parent(\"li\").hasClass(\"active\")){var i=n.find(\".active:last a\"),o=t.Event(\"hide.bs.tab\",{relatedTarget:e[0]}),a=t.Event(\"show.bs.tab\",{relatedTarget:i[0]});if(i.trigger(o),e.trigger(a),!a.isDefaultPrevented()&&!o.isDefaultPrevented()){var s=t(r);this.activate(e.closest(\"li\"),n),this.activate(s,s.parent(),function(){i.trigger({type:\"hidden.bs.tab\",relatedTarget:e[0]}),e.trigger({type:\"shown.bs.tab\",relatedTarget:i[0]})})}}},n.prototype.activate=function(e,r,i){function o(){a.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),e.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),s?(e[0].offsetWidth,e.addClass(\"in\")):e.removeClass(\"fade\"),e.parent(\".dropdown-menu\").length&&e.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),i&&i()}var a=r.find(\"> .active\"),s=i&&t.support.transition&&(a.length&&a.hasClass(\"fade\")||!!r.find(\"> .fade\").length);a.length&&s?a.one(\"bsTransitionEnd\",o).emulateTransitionEnd(n.TRANSITION_DURATION):o(),a.removeClass(\"in\")};var r=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=n,t.fn.tab.noConflict=function(){return t.fn.tab=r,this};var i=function(n){n.preventDefault(),e.call(t(this),\"show\")};t(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',i).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',i)}(jQuery),function(t){\"use strict\";function e(e){return this.each(function(){var r=t(this),i=r.data(\"bs.affix\"),o=\"object\"==typeof e&&e;i||r.data(\"bs.affix\",i=new n(this,o)),\"string\"==typeof e&&i[e]()})}var n=function(e,r){this.options=t.extend({},n.DEFAULTS,r),this.$target=t(this.options.target).on(\"scroll.bs.affix.data-api\",t.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};n.VERSION=\"3.3.7\",n.RESET=\"affix affix-top affix-bottom\",n.DEFAULTS={offset:0,target:window},n.prototype.getState=function(t,e,n,r){var i=this.$target.scrollTop(),o=this.$element.offset(),a=this.$target.height();if(null!=n&&\"top\"==this.affixed)return i<n&&\"top\";if(\"bottom\"==this.affixed)return null!=n?!(i+this.unpin<=o.top)&&\"bottom\":!(i+a<=t-r)&&\"bottom\";var s=null==this.affixed,u=s?i:o.top,c=s?a:e;return null!=n&&i<=n?\"top\":null!=r&&u+c>=t-r&&\"bottom\"},n.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(n.RESET).addClass(\"affix\");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},n.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},n.prototype.checkPosition=function(){if(this.$element.is(\":visible\")){var e=this.$element.height(),r=this.options.offset,i=r.top,o=r.bottom,a=Math.max(t(document).height(),t(document.body).height());\"object\"!=typeof r&&(o=i=r),\"function\"==typeof i&&(i=r.top(this.$element)),\"function\"==typeof o&&(o=r.bottom(this.$element));var s=this.getState(a,e,i,o);if(this.affixed!=s){null!=this.unpin&&this.$element.css(\"top\",\"\");var u=\"affix\"+(s?\"-\"+s:\"\"),c=t.Event(u+\".bs.affix\");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=s,this.unpin=\"bottom\"==s?this.getPinnedOffset():null,this.$element.removeClass(n.RESET).addClass(u).trigger(u.replace(\"affix\",\"affixed\")+\".bs.affix\")}\"bottom\"==s&&this.$element.offset({top:a-e-o})}};var r=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=n,t.fn.affix.noConflict=function(){return t.fn.affix=r,this},t(window).on(\"load\",function(){t('[data-spy=\"affix\"]').each(function(){var n=t(this),r=n.data();r.offset=r.offset||{},null!=r.offsetBottom&&(r.offset.bottom=r.offsetBottom),null!=r.offsetTop&&(r.offset.top=r.offsetTop),e.call(n,r)})})}(jQuery)},function(t,e,n){var r,i;/*!\n * jQuery JavaScript Library v3.2.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2017-03-20T18:59Z\n */\n!function(e,n){\"use strict\";\"object\"==typeof t&&\"object\"==typeof t.exports?t.exports=e.document?n(e,!0):function(t){if(!t.document)throw new Error(\"jQuery requires a window with a document\");return n(t)}:n(e)}(\"undefined\"!=typeof window?window:this,function(n,o){\"use strict\";function a(t,e){e=e||at;var n=e.createElement(\"script\");n.text=t,e.head.appendChild(n).parentNode.removeChild(n)}function s(t){var e=!!t&&\"length\"in t&&t.length,n=yt.type(t);return\"function\"!==n&&!yt.isWindow(t)&&(\"array\"===n||0===e||\"number\"==typeof e&&e>0&&e-1 in t)}function u(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}function c(t,e,n){return yt.isFunction(e)?yt.grep(t,function(t,r){return!!e.call(t,r,t)!==n}):e.nodeType?yt.grep(t,function(t){return t===e!==n}):\"string\"!=typeof e?yt.grep(t,function(t){return ft.call(e,t)>-1!==n}):$t.test(e)?yt.filter(e,t,n):(e=yt.filter(e,t),yt.grep(t,function(t){return ft.call(e,t)>-1!==n&&1===t.nodeType}))}function l(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}function f(t){var e={};return yt.each(t.match(Ot)||[],function(t,n){e[n]=!0}),e}function p(t){return t}function d(t){throw t}function h(t,e,n,r){var i;try{t&&yt.isFunction(i=t.promise)?i.call(t).done(e).fail(n):t&&yt.isFunction(i=t.then)?i.call(t,e,n):e.apply(void 0,[t].slice(r))}catch(t){n.apply(void 0,[t])}}function v(){at.removeEventListener(\"DOMContentLoaded\",v),n.removeEventListener(\"load\",v),yt.ready()}function g(){this.expando=yt.expando+g.uid++}function m(t){return\"true\"===t||\"false\"!==t&&(\"null\"===t?null:t===+t+\"\"?+t:Pt.test(t)?JSON.parse(t):t)}function y(t,e,n){var r;if(void 0===n&&1===t.nodeType)if(r=\"data-\"+e.replace(Ft,\"-$&\").toLowerCase(),\"string\"==typeof(n=t.getAttribute(r))){try{n=m(n)}catch(t){}Rt.set(t,e,n)}else n=void 0;return n}function b(t,e,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:function(){return yt.css(t,e,\"\")},u=s(),c=n&&n[3]||(yt.cssNumber[e]?\"\":\"px\"),l=(yt.cssNumber[e]||\"px\"!==c&&+u)&&Mt.exec(yt.css(t,e));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do{o=o||\".5\",l/=o,yt.style(t,e,l+c)}while(o!==(o=s()/u)&&1!==o&&--a)}return n&&(l=+l||+u||0,i=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=i)),i}function _(t){var e,n=t.ownerDocument,r=t.nodeName,i=Wt[r];return i||(e=n.body.appendChild(n.createElement(r)),i=yt.css(e,\"display\"),e.parentNode.removeChild(e),\"none\"===i&&(i=\"block\"),Wt[r]=i,i)}function w(t,e){for(var n,r,i=[],o=0,a=t.length;o<a;o++)r=t[o],r.style&&(n=r.style.display,e?(\"none\"===n&&(i[o]=Lt.get(r,\"display\")||null,i[o]||(r.style.display=\"\")),\"\"===r.style.display&&Bt(r)&&(i[o]=_(r))):\"none\"!==n&&(i[o]=\"none\",Lt.set(r,\"display\",n)));for(o=0;o<a;o++)null!=i[o]&&(t[o].style.display=i[o]);return t}function x(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||\"*\"):void 0!==t.querySelectorAll?t.querySelectorAll(e||\"*\"):[],void 0===e||e&&u(t,e)?yt.merge([t],n):n}function C(t,e){for(var n=0,r=t.length;n<r;n++)Lt.set(t[n],\"globalEval\",!e||Lt.get(e[n],\"globalEval\"))}function T(t,e,n,r,i){for(var o,a,s,u,c,l,f=e.createDocumentFragment(),p=[],d=0,h=t.length;d<h;d++)if((o=t[d])||0===o)if(\"object\"===yt.type(o))yt.merge(p,o.nodeType?[o]:o);else if(Jt.test(o)){for(a=a||f.appendChild(e.createElement(\"div\")),s=(Vt.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=Kt[s]||Kt._default,a.innerHTML=u[1]+yt.htmlPrefilter(o)+u[2],l=u[0];l--;)a=a.lastChild;yt.merge(p,a.childNodes),a=f.firstChild,a.textContent=\"\"}else p.push(e.createTextNode(o));for(f.textContent=\"\",d=0;o=p[d++];)if(r&&yt.inArray(o,r)>-1)i&&i.push(o);else if(c=yt.contains(o.ownerDocument,o),a=x(f.appendChild(o),\"script\"),c&&C(a),n)for(l=0;o=a[l++];)Xt.test(o.type||\"\")&&n.push(o);return f}function $(){return!0}function k(){return!1}function A(){try{return at.activeElement}catch(t){}}function E(t,e,n,r,i,o){var a,s;if(\"object\"==typeof e){\"string\"!=typeof n&&(r=r||n,n=void 0);for(s in e)E(t,s,n,r,e[s],o);return t}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=k;else if(!i)return t;return 1===o&&(a=i,i=function(t){return yt().off(t),a.apply(this,arguments)},i.guid=a.guid||(a.guid=yt.guid++)),t.each(function(){yt.event.add(this,e,i,r,n)})}function S(t,e){return u(t,\"table\")&&u(11!==e.nodeType?e:e.firstChild,\"tr\")?yt(\">tbody\",t)[0]||t:t}function O(t){return t.type=(null!==t.getAttribute(\"type\"))+\"/\"+t.type,t}function j(t){var e=ne.exec(t.type);return e?t.type=e[1]:t.removeAttribute(\"type\"),t}function N(t,e){var n,r,i,o,a,s,u,c;if(1===e.nodeType){if(Lt.hasData(t)&&(o=Lt.access(t),a=Lt.set(e,o),c=o.events)){delete a.handle,a.events={};for(i in c)for(n=0,r=c[i].length;n<r;n++)yt.event.add(e,i,c[i][n])}Rt.hasData(t)&&(s=Rt.access(t),u=yt.extend({},s),Rt.set(e,u))}}function D(t,e){var n=e.nodeName.toLowerCase();\"input\"===n&&zt.test(t.type)?e.checked=t.checked:\"input\"!==n&&\"textarea\"!==n||(e.defaultValue=t.defaultValue)}function I(t,e,n,r){e=ct.apply([],e);var i,o,s,u,c,l,f=0,p=t.length,d=p-1,h=e[0],v=yt.isFunction(h);if(v||p>1&&\"string\"==typeof h&&!mt.checkClone&&ee.test(h))return t.each(function(i){var o=t.eq(i);v&&(e[0]=h.call(this,i,o.html())),I(o,e,n,r)});if(p&&(i=T(e,t[0].ownerDocument,!1,t,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(s=yt.map(x(i,\"script\"),O),u=s.length;f<p;f++)c=i,f!==d&&(c=yt.clone(c,!0,!0),u&&yt.merge(s,x(c,\"script\"))),n.call(t[f],c,f);if(u)for(l=s[s.length-1].ownerDocument,yt.map(s,j),f=0;f<u;f++)c=s[f],Xt.test(c.type||\"\")&&!Lt.access(c,\"globalEval\")&&yt.contains(l,c)&&(c.src?yt._evalUrl&&yt._evalUrl(c.src):a(c.textContent.replace(re,\"\"),l))}return t}function L(t,e,n){for(var r,i=e?yt.filter(e,t):t,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||yt.cleanData(x(r)),r.parentNode&&(n&&yt.contains(r.ownerDocument,r)&&C(x(r,\"script\")),r.parentNode.removeChild(r));return t}function R(t,e,n){var r,i,o,a,s=t.style;return n=n||ae(t),n&&(a=n.getPropertyValue(e)||n[e],\"\"!==a||yt.contains(t.ownerDocument,t)||(a=yt.style(t,e)),!mt.pixelMarginRight()&&oe.test(a)&&ie.test(e)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function P(t,e){return{get:function(){return t()?void delete this.get:(this.get=e).apply(this,arguments)}}}function F(t){if(t in pe)return t;for(var e=t[0].toUpperCase()+t.slice(1),n=fe.length;n--;)if((t=fe[n]+e)in pe)return t}function q(t){var e=yt.cssProps[t];return e||(e=yt.cssProps[t]=F(t)||t),e}function M(t,e,n){var r=Mt.exec(e);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):e}function H(t,e,n,r,i){var o,a=0;for(o=n===(r?\"border\":\"content\")?4:\"width\"===e?1:0;o<4;o+=2)\"margin\"===n&&(a+=yt.css(t,n+Ht[o],!0,i)),r?(\"content\"===n&&(a-=yt.css(t,\"padding\"+Ht[o],!0,i)),\"margin\"!==n&&(a-=yt.css(t,\"border\"+Ht[o]+\"Width\",!0,i))):(a+=yt.css(t,\"padding\"+Ht[o],!0,i),\"padding\"!==n&&(a+=yt.css(t,\"border\"+Ht[o]+\"Width\",!0,i)));return a}function B(t,e,n){var r,i=ae(t),o=R(t,e,i),a=\"border-box\"===yt.css(t,\"boxSizing\",!1,i);return oe.test(o)?o:(r=a&&(mt.boxSizingReliable()||o===t.style[e]),\"auto\"===o&&(o=t[\"offset\"+e[0].toUpperCase()+e.slice(1)]),(o=parseFloat(o)||0)+H(t,e,n||(a?\"border\":\"content\"),r,i)+\"px\")}function U(t,e,n,r,i){return new U.prototype.init(t,e,n,r,i)}function W(){he&&(!1===at.hidden&&n.requestAnimationFrame?n.requestAnimationFrame(W):n.setTimeout(W,yt.fx.interval),yt.fx.tick())}function z(){return n.setTimeout(function(){de=void 0}),de=yt.now()}function V(t,e){var n,r=0,i={height:t};for(e=e?1:0;r<4;r+=2-e)n=Ht[r],i[\"margin\"+n]=i[\"padding\"+n]=t;return e&&(i.opacity=i.width=t),i}function X(t,e,n){for(var r,i=(Q.tweeners[e]||[]).concat(Q.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,e,t))return r}function K(t,e,n){var r,i,o,a,s,u,c,l,f=\"width\"in e||\"height\"in e,p=this,d={},h=t.style,v=t.nodeType&&Bt(t),g=Lt.get(t,\"fxshow\");n.queue||(a=yt._queueHooks(t,\"fx\"),null==a.unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,yt.queue(t,\"fx\").length||a.empty.fire()})}));for(r in e)if(i=e[r],ve.test(i)){if(delete e[r],o=o||\"toggle\"===i,i===(v?\"hide\":\"show\")){if(\"show\"!==i||!g||void 0===g[r])continue;v=!0}d[r]=g&&g[r]||yt.style(t,r)}if((u=!yt.isEmptyObject(e))||!yt.isEmptyObject(d)){f&&1===t.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],c=g&&g.display,null==c&&(c=Lt.get(t,\"display\")),l=yt.css(t,\"display\"),\"none\"===l&&(c?l=c:(w([t],!0),c=t.style.display||c,l=yt.css(t,\"display\"),w([t]))),(\"inline\"===l||\"inline-block\"===l&&null!=c)&&\"none\"===yt.css(t,\"float\")&&(u||(p.done(function(){h.display=c}),null==c&&(l=h.display,c=\"none\"===l?\"\":l)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(g?\"hidden\"in g&&(v=g.hidden):g=Lt.access(t,\"fxshow\",{display:c}),o&&(g.hidden=!v),v&&w([t],!0),p.done(function(){v||w([t]),Lt.remove(t,\"fxshow\");for(r in d)yt.style(t,r,d[r])})),u=X(v?g[r]:0,r,p),r in g||(g[r]=u.start,v&&(u.end=u.start,u.start=0))}}function J(t,e){var n,r,i,o,a;for(n in t)if(r=yt.camelCase(n),i=e[r],o=t[n],Array.isArray(o)&&(i=o[1],o=t[n]=o[0]),n!==r&&(t[r]=o,delete t[n]),(a=yt.cssHooks[r])&&\"expand\"in a){o=a.expand(o),delete t[r];for(n in o)n in t||(t[n]=o[n],e[n]=i)}else e[r]=i}function Q(t,e,n){var r,i,o=0,a=Q.prefilters.length,s=yt.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var e=de||z(),n=Math.max(0,c.startTime+c.duration-e),r=n/c.duration||0,o=1-r,a=0,u=c.tweens.length;a<u;a++)c.tweens[a].run(o);return s.notifyWith(t,[c,o,n]),o<1&&u?n:(u||s.notifyWith(t,[c,1,0]),s.resolveWith(t,[c]),!1)},c=s.promise({elem:t,props:yt.extend({},e),opts:yt.extend(!0,{specialEasing:{},easing:yt.easing._default},n),originalProperties:e,originalOptions:n,startTime:de||z(),duration:n.duration,tweens:[],createTween:function(e,n){var r=yt.Tween(t,c.opts,e,n,c.opts.specialEasing[e]||c.opts.easing);return c.tweens.push(r),r},stop:function(e){var n=0,r=e?c.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)c.tweens[n].run(1);return e?(s.notifyWith(t,[c,1,0]),s.resolveWith(t,[c,e])):s.rejectWith(t,[c,e]),this}}),l=c.props;for(J(l,c.opts.specialEasing);o<a;o++)if(r=Q.prefilters[o].call(c,t,l,c.opts))return yt.isFunction(r.stop)&&(yt._queueHooks(c.elem,c.opts.queue).stop=yt.proxy(r.stop,r)),r;return yt.map(l,X,c),yt.isFunction(c.opts.start)&&c.opts.start.call(t,c),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always),yt.fx.timer(yt.extend(u,{elem:t,anim:c,queue:c.opts.queue})),c}function G(t){return(t.match(Ot)||[]).join(\" \")}function Z(t){return t.getAttribute&&t.getAttribute(\"class\")||\"\"}function Y(t,e,n,r){var i;if(Array.isArray(e))yt.each(e,function(e,i){n||$e.test(t)?r(t,i):Y(t+\"[\"+(\"object\"==typeof i&&null!=i?e:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==yt.type(e))r(t,e);else for(i in e)Y(t+\"[\"+i+\"]\",e[i],n,r)}function tt(t){return function(e,n){\"string\"!=typeof e&&(n=e,e=\"*\");var r,i=0,o=e.toLowerCase().match(Ot)||[];if(yt.isFunction(n))for(;r=o[i++];)\"+\"===r[0]?(r=r.slice(1)||\"*\",(t[r]=t[r]||[]).unshift(n)):(t[r]=t[r]||[]).push(n)}}function et(t,e,n,r){function i(s){var u;return o[s]=!0,yt.each(t[s]||[],function(t,s){var c=s(e,n,r);return\"string\"!=typeof c||a||o[c]?a?!(u=c):void 0:(e.dataTypes.unshift(c),i(c),!1)}),u}var o={},a=t===Ne;return i(e.dataTypes[0])||!o[\"*\"]&&i(\"*\")}function nt(t,e){var n,r,i=yt.ajaxSettings.flatOptions||{};for(n in e)void 0!==e[n]&&((i[n]?t:r||(r={}))[n]=e[n]);return r&&yt.extend(!0,t,r),t}function rt(t,e,n){for(var r,i,o,a,s=t.contents,u=t.dataTypes;\"*\"===u[0];)u.shift(),void 0===r&&(r=t.mimeType||e.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||t.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function it(t,e,n,r){var i,o,a,s,u,c={},l=t.dataTypes.slice();if(l[1])for(a in t.converters)c[a.toLowerCase()]=t.converters[a];for(o=l.shift();o;)if(t.responseFields[o]&&(n[t.responseFields[o]]=e),!u&&r&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),u=o,o=l.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=c[u+\" \"+o]||c[\"* \"+o]))for(i in c)if(s=i.split(\" \"),s[1]===o&&(a=c[u+\" \"+s[0]]||c[\"* \"+s[0]])){!0===a?a=c[i]:!0!==c[i]&&(o=s[0],l.unshift(s[1]));break}if(!0!==a)if(a&&t.throws)e=a(e);else try{e=a(e)}catch(t){return{state:\"parsererror\",error:a?t:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:e}}var ot=[],at=n.document,st=Object.getPrototypeOf,ut=ot.slice,ct=ot.concat,lt=ot.push,ft=ot.indexOf,pt={},dt=pt.toString,ht=pt.hasOwnProperty,vt=ht.toString,gt=vt.call(Object),mt={},yt=function(t,e){return new yt.fn.init(t,e)},bt=function(t,e){return e.toUpperCase()};yt.fn=yt.prototype={jquery:\"3.2.1\",constructor:yt,length:0,toArray:function(){return ut.call(this)},get:function(t){return null==t?ut.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=yt.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return yt.each(this,t)},map:function(t){return this.pushStack(yt.map(this,function(e,n){return t.call(e,n,e)}))},slice:function(){return this.pushStack(ut.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n<e?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:lt,sort:ot.sort,splice:ot.splice},yt.extend=yt.fn.extend=function(){var t,e,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,c=!1;for(\"boolean\"==typeof a&&(c=a,a=arguments[s]||{},s++),\"object\"==typeof a||yt.isFunction(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(t=arguments[s]))for(e in t)n=a[e],r=t[e],a!==r&&(c&&r&&(yt.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&yt.isPlainObject(n)?n:{},a[e]=yt.extend(c,o,r)):void 0!==r&&(a[e]=r));return a},yt.extend({expando:\"jQuery\"+(\"3.2.1\"+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isFunction:function(t){return\"function\"===yt.type(t)},isWindow:function(t){return null!=t&&t===t.window},isNumeric:function(t){var e=yt.type(t);return(\"number\"===e||\"string\"===e)&&!isNaN(t-parseFloat(t))},isPlainObject:function(t){var e,n;return!(!t||\"[object Object]\"!==dt.call(t))&&(!(e=st(t))||\"function\"==typeof(n=ht.call(e,\"constructor\")&&e.constructor)&&vt.call(n)===gt)},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},type:function(t){return null==t?t+\"\":\"object\"==typeof t||\"function\"==typeof t?pt[dt.call(t)]||\"object\":typeof t},globalEval:function(t){a(t)},camelCase:function(t){return t.replace(/^-ms-/,\"ms-\").replace(/-([a-z])/g,bt)},each:function(t,e){var n,r=0;if(s(t))for(n=t.length;r<n&&!1!==e.call(t[r],r,t[r]);r++);else for(r in t)if(!1===e.call(t[r],r,t[r]))break;return t},trim:function(t){return null==t?\"\":(t+\"\").replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\"\")},makeArray:function(t,e){var n=e||[];return null!=t&&(s(Object(t))?yt.merge(n,\"string\"==typeof t?[t]:t):lt.call(n,t)),n},inArray:function(t,e,n){return null==e?-1:ft.call(e,t,n)},merge:function(t,e){for(var n=+e.length,r=0,i=t.length;r<n;r++)t[i++]=e[r];return t.length=i,t},grep:function(t,e,n){for(var r=[],i=0,o=t.length,a=!n;i<o;i++)!e(t[i],i)!==a&&r.push(t[i]);return r},map:function(t,e,n){var r,i,o=0,a=[];if(s(t))for(r=t.length;o<r;o++)null!=(i=e(t[o],o,n))&&a.push(i);else for(o in t)null!=(i=e(t[o],o,n))&&a.push(i);return ct.apply([],a)},guid:1,proxy:function(t,e){var n,r,i;if(\"string\"==typeof e&&(n=t[e],e=t,t=n),yt.isFunction(t))return r=ut.call(arguments,2),i=function(){return t.apply(e||this,r.concat(ut.call(arguments)))},i.guid=t.guid=t.guid||yt.guid++,i},now:Date.now,support:mt}),\"function\"==typeof Symbol&&(yt.fn[Symbol.iterator]=ot[Symbol.iterator]),yt.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(t,e){pt[\"[object \"+e+\"]\"]=e.toLowerCase()});var _t=/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\nfunction(t){function e(t,e,n,r){var i,o,a,s,u,l,p,d=e&&e.ownerDocument,h=e?e.nodeType:9;if(n=n||[],\"string\"!=typeof t||!t||1!==h&&9!==h&&11!==h)return n;if(!r&&((e?e.ownerDocument||e:q)!==j&&O(e),e=e||j,D)){if(11!==h&&(u=vt.exec(t)))if(i=u[1]){if(9===h){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(d&&(a=d.getElementById(i))&&P(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return Q.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&_.getElementsByClassName&&e.getElementsByClassName)return Q.apply(n,e.getElementsByClassName(i)),n}if(_.qsa&&!W[t+\" \"]&&(!I||!I.test(t))){if(1!==h)d=e,p=t;else if(\"object\"!==e.nodeName.toLowerCase()){for((s=e.getAttribute(\"id\"))?s=s.replace(bt,_t):e.setAttribute(\"id\",s=F),l=T(t),o=l.length;o--;)l[o]=\"#\"+s+\" \"+f(l[o]);p=l.join(\",\"),d=gt.test(t)&&c(e.parentNode)||e}if(p)try{return Q.apply(n,d.querySelectorAll(p)),n}catch(t){}finally{s===F&&e.removeAttribute(\"id\")}}}return k(t.replace(ot,\"$1\"),e,n,r)}function n(){function t(n,r){return e.push(n+\" \")>w.cacheLength&&delete t[e.shift()],t[n+\" \"]=r}var e=[];return t}function r(t){return t[F]=!0,t}function i(t){var e=j.createElement(\"fieldset\");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function o(t,e){for(var n=t.split(\"|\"),r=n.length;r--;)w.attrHandle[n[r]]=e}function a(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function s(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&xt(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function u(t){return r(function(e){return e=+e,r(function(n,r){for(var i,o=t([],n.length,e),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function c(t){return t&&void 0!==t.getElementsByTagName&&t}function l(){}function f(t){for(var e=0,n=t.length,r=\"\";e<n;e++)r+=t[e].value;return r}function p(t,e,n){var r=e.dir,i=e.next,o=i||r,a=n&&\"parentNode\"===o,s=H++;return e.first?function(e,n,i){for(;e=e[r];)if(1===e.nodeType||a)return t(e,n,i);return!1}:function(e,n,u){var c,l,f,p=[M,s];if(u){for(;e=e[r];)if((1===e.nodeType||a)&&t(e,n,u))return!0}else for(;e=e[r];)if(1===e.nodeType||a)if(f=e[F]||(e[F]={}),l=f[e.uniqueID]||(f[e.uniqueID]={}),i&&i===e.nodeName.toLowerCase())e=e[r]||e;else{if((c=l[o])&&c[0]===M&&c[1]===s)return p[2]=c[2];if(l[o]=p,p[2]=t(e,n,u))return!0}return!1}}function d(t){return t.length>1?function(e,n,r){for(var i=t.length;i--;)if(!t[i](e,n,r))return!1;return!0}:t[0]}function h(t,n,r){for(var i=0,o=n.length;i<o;i++)e(t,n[i],r);return r}function v(t,e,n,r,i){for(var o,a=[],s=0,u=t.length,c=null!=e;s<u;s++)(o=t[s])&&(n&&!n(o,r,i)||(a.push(o),c&&e.push(s)));return a}function g(t,e,n,i,o,a){return i&&!i[F]&&(i=g(i)),o&&!o[F]&&(o=g(o,a)),r(function(r,a,s,u){var c,l,f,p=[],d=[],g=a.length,m=r||h(e||\"*\",s.nodeType?[s]:s,[]),y=!t||!r&&e?m:v(m,p,t,s,u),b=n?o||(r?t:g||i)?[]:a:y;if(n&&n(y,b,s,u),i)for(c=v(b,d),i(c,[],s,u),l=c.length;l--;)(f=c[l])&&(b[d[l]]=!(y[d[l]]=f));if(r){if(o||t){if(o){for(c=[],l=b.length;l--;)(f=b[l])&&c.push(y[l]=f);o(null,b=[],c,u)}for(l=b.length;l--;)(f=b[l])&&(c=o?Z(r,f):p[l])>-1&&(r[c]=!(a[c]=f))}}else b=v(b===a?b.splice(g,b.length):b),o?o(null,a,b,u):Q.apply(a,b)})}function m(t){for(var e,n,r,i=t.length,o=w.relative[t[0].type],a=o||w.relative[\" \"],s=o?1:0,u=p(function(t){return t===e},a,!0),c=p(function(t){return Z(e,t)>-1},a,!0),l=[function(t,n,r){var i=!o&&(r||n!==A)||((e=n).nodeType?u(t,n,r):c(t,n,r));return e=null,i}];s<i;s++)if(n=w.relative[t[s].type])l=[p(d(l),n)];else{if(n=w.filter[t[s].type].apply(null,t[s].matches),n[F]){for(r=++s;r<i&&!w.relative[t[r].type];r++);return g(s>1&&d(l),s>1&&f(t.slice(0,s-1).concat({value:\" \"===t[s-2].type?\"*\":\"\"})).replace(ot,\"$1\"),n,s<r&&m(t.slice(s,r)),r<i&&m(t=t.slice(r)),r<i&&f(t))}l.push(n)}return d(l)}function y(t,n){var i=n.length>0,o=t.length>0,a=function(r,a,s,u,c){var l,f,p,d=0,h=\"0\",g=r&&[],m=[],y=A,b=r||o&&w.find.TAG(\"*\",c),_=M+=null==y?1:Math.random()||.1,x=b.length;for(c&&(A=a===j||a||c);h!==x&&null!=(l=b[h]);h++){if(o&&l){for(f=0,a||l.ownerDocument===j||(O(l),s=!D);p=t[f++];)if(p(l,a||j,s)){u.push(l);break}c&&(M=_)}i&&((l=!p&&l)&&d--,r&&g.push(l))}if(d+=h,i&&h!==d){for(f=0;p=n[f++];)p(g,m,a,s);if(r){if(d>0)for(;h--;)g[h]||m[h]||(m[h]=K.call(u));m=v(m)}Q.apply(u,m),c&&!r&&m.length>0&&d+n.length>1&&e.uniqueSort(u)}return c&&(M=_,A=y),g};return i?r(a):a}var b,_,w,x,C,T,$,k,A,E,S,O,j,N,D,I,L,R,P,F=\"sizzle\"+1*new Date,q=t.document,M=0,H=0,B=n(),U=n(),W=n(),z=function(t,e){return t===e&&(S=!0),0},V={}.hasOwnProperty,X=[],K=X.pop,J=X.push,Q=X.push,G=X.slice,Z=function(t,e){for(var n=0,r=t.length;n<r;n++)if(t[n]===e)return n;return-1},Y=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",tt=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",et=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",nt=\"\\\\[\"+tt+\"*(\"+et+\")(?:\"+tt+\"*([*^$|!~]?=)\"+tt+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+et+\"))|)\"+tt+\"*\\\\]\",rt=\":(\"+et+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+nt+\")*)|.*)\\\\)|)\",it=new RegExp(tt+\"+\",\"g\"),ot=new RegExp(\"^\"+tt+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+tt+\"+$\",\"g\"),at=new RegExp(\"^\"+tt+\"*,\"+tt+\"*\"),st=new RegExp(\"^\"+tt+\"*([>+~]|\"+tt+\")\"+tt+\"*\"),ut=new RegExp(\"=\"+tt+\"*([^\\\\]'\\\"]*?)\"+tt+\"*\\\\]\",\"g\"),ct=new RegExp(rt),lt=new RegExp(\"^\"+et+\"$\"),ft={ID:new RegExp(\"^#(\"+et+\")\"),CLASS:new RegExp(\"^\\\\.(\"+et+\")\"),TAG:new RegExp(\"^(\"+et+\"|[*])\"),ATTR:new RegExp(\"^\"+nt),PSEUDO:new RegExp(\"^\"+rt),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+tt+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+tt+\"*(?:([+-]|)\"+tt+\"*(\\\\d+)|))\"+tt+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+Y+\")$\",\"i\"),needsContext:new RegExp(\"^\"+tt+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+tt+\"*((?:-\\\\d)?\\\\d*)\"+tt+\"*\\\\)|)(?=[^-]|$)\",\"i\")},pt=/^(?:input|select|textarea|button)$/i,dt=/^h\\d$/i,ht=/^[^{]+\\{\\s*\\[native \\w/,vt=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,gt=/[+~]/,mt=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+tt+\"?|(\"+tt+\")|.)\",\"ig\"),yt=function(t,e,n){var r=\"0x\"+e-65536;return r!==r||n?e:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},bt=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,_t=function(t,e){return e?\"\\0\"===t?\"�\":t.slice(0,-1)+\"\\\\\"+t.charCodeAt(t.length-1).toString(16)+\" \":\"\\\\\"+t},wt=function(){O()},xt=p(function(t){return!0===t.disabled&&(\"form\"in t||\"label\"in t)},{dir:\"parentNode\",next:\"legend\"});try{Q.apply(X=G.call(q.childNodes),q.childNodes),X[q.childNodes.length].nodeType}catch(t){Q={apply:X.length?function(t,e){J.apply(t,G.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}_=e.support={},C=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&\"HTML\"!==e.nodeName},O=e.setDocument=function(t){var e,n,r=t?t.ownerDocument||t:q;return r!==j&&9===r.nodeType&&r.documentElement?(j=r,N=j.documentElement,D=!C(j),q!==j&&(n=j.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",wt,!1):n.attachEvent&&n.attachEvent(\"onunload\",wt)),_.attributes=i(function(t){return t.className=\"i\",!t.getAttribute(\"className\")}),_.getElementsByTagName=i(function(t){return t.appendChild(j.createComment(\"\")),!t.getElementsByTagName(\"*\").length}),_.getElementsByClassName=ht.test(j.getElementsByClassName),_.getById=i(function(t){return N.appendChild(t).id=F,!j.getElementsByName||!j.getElementsByName(F).length}),_.getById?(w.filter.ID=function(t){var e=t.replace(mt,yt);return function(t){return t.getAttribute(\"id\")===e}},w.find.ID=function(t,e){if(void 0!==e.getElementById&&D){var n=e.getElementById(t);return n?[n]:[]}}):(w.filter.ID=function(t){var e=t.replace(mt,yt);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode(\"id\");return n&&n.value===e}},w.find.ID=function(t,e){if(void 0!==e.getElementById&&D){var n,r,i,o=e.getElementById(t);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o];for(i=e.getElementsByName(t),r=0;o=i[r++];)if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o]}return[]}}),w.find.TAG=_.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):_.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,r=[],i=0,o=e.getElementsByTagName(t);if(\"*\"===t){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},w.find.CLASS=_.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&D)return e.getElementsByClassName(t)},L=[],I=[],(_.qsa=ht.test(j.querySelectorAll))&&(i(function(t){N.appendChild(t).innerHTML=\"<a id='\"+F+\"'></a><select id='\"+F+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",t.querySelectorAll(\"[msallowcapture^='']\").length&&I.push(\"[*^$]=\"+tt+\"*(?:''|\\\"\\\")\"),t.querySelectorAll(\"[selected]\").length||I.push(\"\\\\[\"+tt+\"*(?:value|\"+Y+\")\"),t.querySelectorAll(\"[id~=\"+F+\"-]\").length||I.push(\"~=\"),t.querySelectorAll(\":checked\").length||I.push(\":checked\"),t.querySelectorAll(\"a#\"+F+\"+*\").length||I.push(\".#.+[+~]\")}),i(function(t){t.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var e=j.createElement(\"input\");e.setAttribute(\"type\",\"hidden\"),t.appendChild(e).setAttribute(\"name\",\"D\"),t.querySelectorAll(\"[name=d]\").length&&I.push(\"name\"+tt+\"*[*^$|!~]?=\"),2!==t.querySelectorAll(\":enabled\").length&&I.push(\":enabled\",\":disabled\"),N.appendChild(t).disabled=!0,2!==t.querySelectorAll(\":disabled\").length&&I.push(\":enabled\",\":disabled\"),t.querySelectorAll(\"*,:x\"),I.push(\",.*:\")})),(_.matchesSelector=ht.test(R=N.matches||N.webkitMatchesSelector||N.mozMatchesSelector||N.oMatchesSelector||N.msMatchesSelector))&&i(function(t){_.disconnectedMatch=R.call(t,\"*\"),R.call(t,\"[s!='']:x\"),L.push(\"!=\",rt)}),I=I.length&&new RegExp(I.join(\"|\")),L=L.length&&new RegExp(L.join(\"|\")),e=ht.test(N.compareDocumentPosition),P=e||ht.test(N.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},z=e?function(t,e){if(t===e)return S=!0,0;var n=!t.compareDocumentPosition-!e.compareDocumentPosition;return n||(n=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1,1&n||!_.sortDetached&&e.compareDocumentPosition(t)===n?t===j||t.ownerDocument===q&&P(q,t)?-1:e===j||e.ownerDocument===q&&P(q,e)?1:E?Z(E,t)-Z(E,e):0:4&n?-1:1)}:function(t,e){if(t===e)return S=!0,0;var n,r=0,i=t.parentNode,o=e.parentNode,s=[t],u=[e];if(!i||!o)return t===j?-1:e===j?1:i?-1:o?1:E?Z(E,t)-Z(E,e):0;if(i===o)return a(t,e);for(n=t;n=n.parentNode;)s.unshift(n);for(n=e;n=n.parentNode;)u.unshift(n);for(;s[r]===u[r];)r++;return r?a(s[r],u[r]):s[r]===q?-1:u[r]===q?1:0},j):j},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==j&&O(t),n=n.replace(ut,\"='$1']\"),_.matchesSelector&&D&&!W[n+\" \"]&&(!L||!L.test(n))&&(!I||!I.test(n)))try{var r=R.call(t,n);if(r||_.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(t){}return e(n,j,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==j&&O(t),P(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==j&&O(t);var n=w.attrHandle[e.toLowerCase()],r=n&&V.call(w.attrHandle,e.toLowerCase())?n(t,e,!D):void 0;return void 0!==r?r:_.attributes||!D?t.getAttribute(e):(r=t.getAttributeNode(e))&&r.specified?r.value:null},e.escape=function(t){return(t+\"\").replace(bt,_t)},e.error=function(t){throw new Error(\"Syntax error, unrecognized expression: \"+t)},e.uniqueSort=function(t){var e,n=[],r=0,i=0;if(S=!_.detectDuplicates,E=!_.sortStable&&t.slice(0),t.sort(z),S){for(;e=t[i++];)e===t[i]&&(r=n.push(i));for(;r--;)t.splice(n[r],1)}return E=null,t},x=e.getText=function(t){var e,n=\"\",r=0,i=t.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=x(t)}else if(3===i||4===i)return t.nodeValue}else for(;e=t[r++];)n+=x(e);return n},w=e.selectors={cacheLength:50,createPseudo:r,match:ft,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(mt,yt),t[3]=(t[3]||t[4]||t[5]||\"\").replace(mt,yt),\"~=\"===t[2]&&(t[3]=\" \"+t[3]+\" \"),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),\"nth\"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*(\"even\"===t[3]||\"odd\"===t[3])),t[5]=+(t[7]+t[8]||\"odd\"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return ft.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||\"\":n&&ct.test(n)&&(e=T(n,!0))&&(e=n.indexOf(\")\",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(mt,yt).toLowerCase();return\"*\"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=B[t+\" \"];return e||(e=new RegExp(\"(^|\"+tt+\")\"+t+\"(\"+tt+\"|$)\"))&&B(t,function(t){return e.test(\"string\"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute(\"class\")||\"\")})},ATTR:function(t,n,r){return function(i){var o=e.attr(i,t);return null==o?\"!=\"===n:!n||(o+=\"\",\"=\"===n?o===r:\"!=\"===n?o!==r:\"^=\"===n?r&&0===o.indexOf(r):\"*=\"===n?r&&o.indexOf(r)>-1:\"$=\"===n?r&&o.slice(-r.length)===r:\"~=\"===n?(\" \"+o.replace(it,\" \")+\" \").indexOf(r)>-1:\"|=\"===n&&(o===r||o.slice(0,r.length+1)===r+\"-\"))}},CHILD:function(t,e,n,r,i){var o=\"nth\"!==t.slice(0,3),a=\"last\"!==t.slice(-4),s=\"of-type\"===e;return 1===r&&0===i?function(t){return!!t.parentNode}:function(e,n,u){var c,l,f,p,d,h,v=o!==a?\"nextSibling\":\"previousSibling\",g=e.parentNode,m=s&&e.nodeName.toLowerCase(),y=!u&&!s,b=!1;if(g){if(o){for(;v;){for(p=e;p=p[v];)if(s?p.nodeName.toLowerCase()===m:1===p.nodeType)return!1;h=v=\"only\"===t&&!h&&\"nextSibling\"}return!0}if(h=[a?g.firstChild:g.lastChild],a&&y){for(p=g,f=p[F]||(p[F]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[t]||[],d=c[0]===M&&c[1],b=d&&c[2],p=d&&g.childNodes[d];p=++d&&p&&p[v]||(b=d=0)||h.pop();)if(1===p.nodeType&&++b&&p===e){l[t]=[M,d,b];break}}else if(y&&(p=e,f=p[F]||(p[F]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[t]||[],d=c[0]===M&&c[1],b=d),!1===b)for(;(p=++d&&p&&p[v]||(b=d=0)||h.pop())&&((s?p.nodeName.toLowerCase()!==m:1!==p.nodeType)||!++b||(y&&(f=p[F]||(p[F]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),l[t]=[M,b]),p!==e)););return(b-=i)===r||b%r==0&&b/r>=0}}},PSEUDO:function(t,n){var i,o=w.pseudos[t]||w.setFilters[t.toLowerCase()]||e.error(\"unsupported pseudo: \"+t);return o[F]?o(n):o.length>1?(i=[t,t,\"\",n],w.setFilters.hasOwnProperty(t.toLowerCase())?r(function(t,e){for(var r,i=o(t,n),a=i.length;a--;)r=Z(t,i[a]),t[r]=!(e[r]=i[a])}):function(t){return o(t,0,i)}):o}},pseudos:{not:r(function(t){var e=[],n=[],i=$(t.replace(ot,\"$1\"));return i[F]?r(function(t,e,n,r){for(var o,a=i(t,null,r,[]),s=t.length;s--;)(o=a[s])&&(t[s]=!(e[s]=o))}):function(t,r,o){return e[0]=t,i(e,null,o,n),e[0]=null,!n.pop()}}),has:r(function(t){return function(n){return e(t,n).length>0}}),contains:r(function(t){return t=t.replace(mt,yt),function(e){return(e.textContent||e.innerText||x(e)).indexOf(t)>-1}}),lang:r(function(t){return lt.test(t||\"\")||e.error(\"unsupported lang: \"+t),t=t.replace(mt,yt).toLowerCase(),function(e){var n;do{if(n=D?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(n=n.toLowerCase())===t||0===n.indexOf(t+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===N},focus:function(t){return t===j.activeElement&&(!j.hasFocus||j.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:s(!1),disabled:s(!0),checked:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&!!t.checked||\"option\"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!w.pseudos.empty(t)},header:function(t){return dt.test(t.nodeName)},input:function(t){return pt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&\"button\"===t.type||\"button\"===e},text:function(t){var e;return\"input\"===t.nodeName.toLowerCase()&&\"text\"===t.type&&(null==(e=t.getAttribute(\"type\"))||\"text\"===e.toLowerCase())},first:u(function(){return[0]}),last:u(function(t,e){return[e-1]}),eq:u(function(t,e,n){return[n<0?n+e:n]}),even:u(function(t,e){for(var n=0;n<e;n+=2)t.push(n);return t}),odd:u(function(t,e){for(var n=1;n<e;n+=2)t.push(n);return t}),lt:u(function(t,e,n){for(var r=n<0?n+e:n;--r>=0;)t.push(r);return t}),gt:u(function(t,e,n){for(var r=n<0?n+e:n;++r<e;)t.push(r);return t})}},w.pseudos.nth=w.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[b]=function(t){return function(e){return\"input\"===e.nodeName.toLowerCase()&&e.type===t}}(b);for(b in{submit:!0,reset:!0})w.pseudos[b]=function(t){return function(e){var n=e.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&e.type===t}}(b);return l.prototype=w.filters=w.pseudos,w.setFilters=new l,T=e.tokenize=function(t,n){var r,i,o,a,s,u,c,l=U[t+\" \"];if(l)return n?0:l.slice(0);for(s=t,u=[],c=w.preFilter;s;){r&&!(i=at.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),r=!1,(i=st.exec(s))&&(r=i.shift(),o.push({value:r,type:i[0].replace(ot,\" \")}),s=s.slice(r.length));for(a in w.filter)!(i=ft[a].exec(s))||c[a]&&!(i=c[a](i))||(r=i.shift(),o.push({value:r,type:a,matches:i}),s=s.slice(r.length));if(!r)break}return n?s.length:s?e.error(t):U(t,u).slice(0)},$=e.compile=function(t,e){var n,r=[],i=[],o=W[t+\" \"];if(!o){for(e||(e=T(t)),n=e.length;n--;)o=m(e[n]),o[F]?r.push(o):i.push(o);o=W(t,y(i,r)),o.selector=t}return o},k=e.select=function(t,e,n,r){var i,o,a,s,u,l=\"function\"==typeof t&&t,p=!r&&T(t=l.selector||t);if(n=n||[],1===p.length){if(o=p[0]=p[0].slice(0),o.length>2&&\"ID\"===(a=o[0]).type&&9===e.nodeType&&D&&w.relative[o[1].type]){if(!(e=(w.find.ID(a.matches[0].replace(mt,yt),e)||[])[0]))return n;l&&(e=e.parentNode),t=t.slice(o.shift().value.length)}for(i=ft.needsContext.test(t)?0:o.length;i--&&(a=o[i],!w.relative[s=a.type]);)if((u=w.find[s])&&(r=u(a.matches[0].replace(mt,yt),gt.test(o[0].type)&&c(e.parentNode)||e))){if(o.splice(i,1),!(t=r.length&&f(o)))return Q.apply(n,r),n;break}}return(l||$(t,p))(r,e,!D,n,!e||gt.test(t)&&c(e.parentNode)||e),n},_.sortStable=F.split(\"\").sort(z).join(\"\")===F,_.detectDuplicates=!!S,O(),_.sortDetached=i(function(t){return 1&t.compareDocumentPosition(j.createElement(\"fieldset\"))}),i(function(t){return t.innerHTML=\"<a href='#'></a>\",\"#\"===t.firstChild.getAttribute(\"href\")})||o(\"type|href|height|width\",function(t,e,n){if(!n)return t.getAttribute(e,\"type\"===e.toLowerCase()?1:2)}),_.attributes&&i(function(t){return t.innerHTML=\"<input/>\",t.firstChild.setAttribute(\"value\",\"\"),\"\"===t.firstChild.getAttribute(\"value\")})||o(\"value\",function(t,e,n){if(!n&&\"input\"===t.nodeName.toLowerCase())return t.defaultValue}),i(function(t){return null==t.getAttribute(\"disabled\")})||o(Y,function(t,e,n){var r;if(!n)return!0===t[e]?e.toLowerCase():(r=t.getAttributeNode(e))&&r.specified?r.value:null}),e}(n);yt.find=_t,yt.expr=_t.selectors,yt.expr[\":\"]=yt.expr.pseudos,yt.uniqueSort=yt.unique=_t.uniqueSort,yt.text=_t.getText,yt.isXMLDoc=_t.isXML,yt.contains=_t.contains,yt.escapeSelector=_t.escape;var wt=function(t,e,n){for(var r=[],i=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(i&&yt(t).is(n))break;r.push(t)}return r},xt=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},Ct=yt.expr.match.needsContext,Tt=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i,$t=/^.[^:#\\[\\.,]*$/;yt.filter=function(t,e,n){var r=e[0];return n&&(t=\":not(\"+t+\")\"),1===e.length&&1===r.nodeType?yt.find.matchesSelector(r,t)?[r]:[]:yt.find.matches(t,yt.grep(e,function(t){return 1===t.nodeType}))},yt.fn.extend({find:function(t){var e,n,r=this.length,i=this;if(\"string\"!=typeof t)return this.pushStack(yt(t).filter(function(){for(e=0;e<r;e++)if(yt.contains(i[e],this))return!0}));for(n=this.pushStack([]),e=0;e<r;e++)yt.find(t,i[e],n);return r>1?yt.uniqueSort(n):n},filter:function(t){return this.pushStack(c(this,t||[],!1))},not:function(t){return this.pushStack(c(this,t||[],!0))},is:function(t){return!!c(this,\"string\"==typeof t&&Ct.test(t)?yt(t):t||[],!1).length}});var kt,At=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(yt.fn.init=function(t,e,n){var r,i;if(!t)return this;if(n=n||kt,\"string\"==typeof t){if(!(r=\"<\"===t[0]&&\">\"===t[t.length-1]&&t.length>=3?[null,t,null]:At.exec(t))||!r[1]&&e)return!e||e.jquery?(e||n).find(t):this.constructor(e).find(t);if(r[1]){if(e=e instanceof yt?e[0]:e,yt.merge(this,yt.parseHTML(r[1],e&&e.nodeType?e.ownerDocument||e:at,!0)),Tt.test(r[1])&&yt.isPlainObject(e))for(r in e)yt.isFunction(this[r])?this[r](e[r]):this.attr(r,e[r]);return this}return i=at.getElementById(r[2]),i&&(this[0]=i,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):yt.isFunction(t)?void 0!==n.ready?n.ready(t):t(yt):yt.makeArray(t,this)}).prototype=yt.fn,kt=yt(at);var Et=/^(?:parents|prev(?:Until|All))/,St={children:!0,contents:!0,next:!0,prev:!0};yt.fn.extend({has:function(t){var e=yt(t,this),n=e.length;return this.filter(function(){for(var t=0;t<n;t++)if(yt.contains(this,e[t]))return!0})},closest:function(t,e){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof t&&yt(t);if(!Ct.test(t))for(;r<i;r++)for(n=this[r];n&&n!==e;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&yt.find.matchesSelector(n,t))){o.push(n);break}return this.pushStack(o.length>1?yt.uniqueSort(o):o)},index:function(t){return t?\"string\"==typeof t?ft.call(yt(t),this[0]):ft.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(yt.uniqueSort(yt.merge(this.get(),yt(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),yt.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return wt(t,\"parentNode\")},parentsUntil:function(t,e,n){return wt(t,\"parentNode\",n)},next:function(t){return l(t,\"nextSibling\")},prev:function(t){return l(t,\"previousSibling\")},nextAll:function(t){return wt(t,\"nextSibling\")},prevAll:function(t){return wt(t,\"previousSibling\")},nextUntil:function(t,e,n){return wt(t,\"nextSibling\",n)},prevUntil:function(t,e,n){return wt(t,\"previousSibling\",n)},siblings:function(t){return xt((t.parentNode||{}).firstChild,t)},children:function(t){return xt(t.firstChild)},contents:function(t){return u(t,\"iframe\")?t.contentDocument:(u(t,\"template\")&&(t=t.content||t),yt.merge([],t.childNodes))}},function(t,e){yt.fn[t]=function(n,r){var i=yt.map(this,e,n);return\"Until\"!==t.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=yt.filter(r,i)),this.length>1&&(St[t]||yt.uniqueSort(i),Et.test(t)&&i.reverse()),this.pushStack(i)}});var Ot=/[^\\x20\\t\\r\\n\\f]+/g;yt.Callbacks=function(t){t=\"string\"==typeof t?f(t):yt.extend({},t);var e,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||t.once,r=e=!0;a.length;s=-1)for(n=a.shift();++s<o.length;)!1===o[s].apply(n[0],n[1])&&t.stopOnFalse&&(s=o.length,n=!1);t.memory||(n=!1),e=!1,i&&(o=n?[]:\"\")},c={add:function(){return o&&(n&&!e&&(s=o.length-1,a.push(n)),function e(n){yt.each(n,function(n,r){yt.isFunction(r)?t.unique&&c.has(r)||o.push(r):r&&r.length&&\"string\"!==yt.type(r)&&e(r)})}(arguments),n&&!e&&u()),this},remove:function(){return yt.each(arguments,function(t,e){for(var n;(n=yt.inArray(e,o,n))>-1;)o.splice(n,1),n<=s&&s--}),this},has:function(t){return t?yt.inArray(t,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=a=[],n||e||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(t,n){return i||(n=n||[],n=[t,n.slice?n.slice():n],a.push(n),e||u()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},yt.extend({Deferred:function(t){var e=[[\"notify\",\"progress\",yt.Callbacks(\"memory\"),yt.Callbacks(\"memory\"),2],[\"resolve\",\"done\",yt.Callbacks(\"once memory\"),yt.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",yt.Callbacks(\"once memory\"),yt.Callbacks(\"once memory\"),1,\"rejected\"]],r=\"pending\",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},catch:function(t){return i.then(null,t)},pipe:function(){var t=arguments;return yt.Deferred(function(n){yt.each(e,function(e,r){var i=yt.isFunction(t[r[4]])&&t[r[4]];o[r[1]](function(){var t=i&&i.apply(this,arguments);t&&yt.isFunction(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+\"With\"](this,i?[t]:arguments)})}),t=null}).promise()},then:function(t,r,i){function o(t,e,r,i){return function(){var s=this,u=arguments,c=function(){var n,c;if(!(t<a)){if((n=r.apply(s,u))===e.promise())throw new TypeError(\"Thenable self-resolution\");c=n&&(\"object\"==typeof n||\"function\"==typeof n)&&n.then,yt.isFunction(c)?i?c.call(n,o(a,e,p,i),o(a,e,d,i)):(a++,c.call(n,o(a,e,p,i),o(a,e,d,i),o(a,e,p,e.notifyWith))):(r!==p&&(s=void 0,u=[n]),(i||e.resolveWith)(s,u))}},l=i?c:function(){try{c()}catch(n){yt.Deferred.exceptionHook&&yt.Deferred.exceptionHook(n,l.stackTrace),t+1>=a&&(r!==d&&(s=void 0,u=[n]),e.rejectWith(s,u))}};t?l():(yt.Deferred.getStackHook&&(l.stackTrace=yt.Deferred.getStackHook()),n.setTimeout(l))}}var a=0;return yt.Deferred(function(n){e[0][3].add(o(0,n,yt.isFunction(i)?i:p,n.notifyWith)),e[1][3].add(o(0,n,yt.isFunction(t)?t:p)),e[2][3].add(o(0,n,yt.isFunction(r)?r:d))}).promise()},promise:function(t){return null!=t?yt.extend(t,i):i}},o={};return yt.each(e,function(t,n){var a=n[2],s=n[5];i[n[1]]=a.add,s&&a.add(function(){r=s},e[3-t][2].disable,e[0][2].lock),a.add(n[3].fire),o[n[0]]=function(){return o[n[0]+\"With\"](this===o?void 0:this,arguments),this},o[n[0]+\"With\"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(t){var e=arguments.length,n=e,r=Array(n),i=ut.call(arguments),o=yt.Deferred(),a=function(t){return function(n){r[t]=this,i[t]=arguments.length>1?ut.call(arguments):n,--e||o.resolveWith(r,i)}};if(e<=1&&(h(t,o.done(a(n)).resolve,o.reject,!e),\"pending\"===o.state()||yt.isFunction(i[n]&&i[n].then)))return o.then();for(;n--;)h(i[n],a(n),o.reject);return o.promise()}});var jt=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;yt.Deferred.exceptionHook=function(t,e){n.console&&n.console.warn&&t&&jt.test(t.name)&&n.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,e)},yt.readyException=function(t){n.setTimeout(function(){throw t})};var Nt=yt.Deferred();yt.fn.ready=function(t){return Nt.then(t).catch(function(t){yt.readyException(t)}),this},yt.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--yt.readyWait:yt.isReady)||(yt.isReady=!0,!0!==t&&--yt.readyWait>0||Nt.resolveWith(at,[yt]))}}),yt.ready.then=Nt.then,\"complete\"===at.readyState||\"loading\"!==at.readyState&&!at.documentElement.doScroll?n.setTimeout(yt.ready):(at.addEventListener(\"DOMContentLoaded\",v),n.addEventListener(\"load\",v));var Dt=function(t,e,n,r,i,o,a){var s=0,u=t.length,c=null==n;if(\"object\"===yt.type(n)){i=!0;for(s in n)Dt(t,e,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,yt.isFunction(r)||(a=!0),c&&(a?(e.call(t,r),e=null):(c=e,e=function(t,e,n){return c.call(yt(t),n)})),e))for(;s<u;s++)e(t[s],n,a?r:r.call(t[s],s,e(t[s],n)));return i?t:c?e.call(t):u?e(t[0],n):o},It=function(t){return 1===t.nodeType||9===t.nodeType||!+t.nodeType};g.uid=1,g.prototype={cache:function(t){var e=t[this.expando];return e||(e={},It(t)&&(t.nodeType?t[this.expando]=e:Object.defineProperty(t,this.expando,{value:e,configurable:!0}))),e},set:function(t,e,n){var r,i=this.cache(t);if(\"string\"==typeof e)i[yt.camelCase(e)]=n;else for(r in e)i[yt.camelCase(r)]=e[r];return i},get:function(t,e){return void 0===e?this.cache(t):t[this.expando]&&t[this.expando][yt.camelCase(e)]},access:function(t,e,n){return void 0===e||e&&\"string\"==typeof e&&void 0===n?this.get(t,e):(this.set(t,e,n),void 0!==n?n:e)},remove:function(t,e){var n,r=t[this.expando];if(void 0!==r){if(void 0!==e){Array.isArray(e)?e=e.map(yt.camelCase):(e=yt.camelCase(e),e=e in r?[e]:e.match(Ot)||[]),n=e.length;for(;n--;)delete r[e[n]]}(void 0===e||yt.isEmptyObject(r))&&(t.nodeType?t[this.expando]=void 0:delete t[this.expando])}},hasData:function(t){var e=t[this.expando];return void 0!==e&&!yt.isEmptyObject(e)}};var Lt=new g,Rt=new g,Pt=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Ft=/[A-Z]/g;yt.extend({hasData:function(t){return Rt.hasData(t)||Lt.hasData(t)},data:function(t,e,n){return Rt.access(t,e,n)},removeData:function(t,e){Rt.remove(t,e)},_data:function(t,e,n){return Lt.access(t,e,n)},_removeData:function(t,e){Lt.remove(t,e)}}),yt.fn.extend({data:function(t,e){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===t){if(this.length&&(i=Rt.get(o),1===o.nodeType&&!Lt.get(o,\"hasDataAttrs\"))){for(n=a.length;n--;)a[n]&&(r=a[n].name,0===r.indexOf(\"data-\")&&(r=yt.camelCase(r.slice(5)),y(o,r,i[r])));Lt.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof t?this.each(function(){Rt.set(this,t)}):Dt(this,function(e){var n;if(o&&void 0===e){if(void 0!==(n=Rt.get(o,t)))return n;if(void 0!==(n=y(o,t)))return n}else this.each(function(){Rt.set(this,t,e)})},null,e,arguments.length>1,null,!0)},removeData:function(t){return this.each(function(){Rt.remove(this,t)})}}),yt.extend({queue:function(t,e,n){var r;if(t)return e=(e||\"fx\")+\"queue\",r=Lt.get(t,e),n&&(!r||Array.isArray(n)?r=Lt.access(t,e,yt.makeArray(n)):r.push(n)),r||[]},dequeue:function(t,e){e=e||\"fx\";var n=yt.queue(t,e),r=n.length,i=n.shift(),o=yt._queueHooks(t,e),a=function(){yt.dequeue(t,e)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===e&&n.unshift(\"inprogress\"),delete o.stop,i.call(t,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(t,e){var n=e+\"queueHooks\";return Lt.get(t,n)||Lt.access(t,n,{empty:yt.Callbacks(\"once memory\").add(function(){Lt.remove(t,[e+\"queue\",n])})})}}),yt.fn.extend({queue:function(t,e){var n=2;return\"string\"!=typeof t&&(e=t,t=\"fx\",n--),arguments.length<n?yt.queue(this[0],t):void 0===e?this:this.each(function(){var n=yt.queue(this,t,e);yt._queueHooks(this,t),\"fx\"===t&&\"inprogress\"!==n[0]&&yt.dequeue(this,t)})},dequeue:function(t){return this.each(function(){yt.dequeue(this,t)})},clearQueue:function(t){return this.queue(t||\"fx\",[])},promise:function(t,e){var n,r=1,i=yt.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};for(\"string\"!=typeof t&&(e=t,t=void 0),t=t||\"fx\";a--;)(n=Lt.get(o[a],t+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(e)}});var qt=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,Mt=new RegExp(\"^(?:([+-])=|)(\"+qt+\")([a-z%]*)$\",\"i\"),Ht=[\"Top\",\"Right\",\"Bottom\",\"Left\"],Bt=function(t,e){return t=e||t,\"none\"===t.style.display||\"\"===t.style.display&&yt.contains(t.ownerDocument,t)&&\"none\"===yt.css(t,\"display\")},Ut=function(t,e,n,r){var i,o,a={};for(o in e)a[o]=t.style[o],t.style[o]=e[o];i=n.apply(t,r||[]);for(o in e)t.style[o]=a[o];return i},Wt={};yt.fn.extend({show:function(){return w(this,!0)},hide:function(){return w(this)},toggle:function(t){return\"boolean\"==typeof t?t?this.show():this.hide():this.each(function(){Bt(this)?yt(this).show():yt(this).hide()})}});var zt=/^(?:checkbox|radio)$/i,Vt=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,Xt=/^$|\\/(?:java|ecma)script/i,Kt={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};Kt.optgroup=Kt.option,Kt.tbody=Kt.tfoot=Kt.colgroup=Kt.caption=Kt.thead,Kt.th=Kt.td;var Jt=/<|&#?\\w+;/;!function(){var t=at.createDocumentFragment(),e=t.appendChild(at.createElement(\"div\")),n=at.createElement(\"input\");n.setAttribute(\"type\",\"radio\"),n.setAttribute(\"checked\",\"checked\"),n.setAttribute(\"name\",\"t\"),e.appendChild(n),mt.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML=\"<textarea>x</textarea>\",mt.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var Qt=at.documentElement,Gt=/^key/,Zt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Yt=/^([^.]*)(?:\\.(.+)|)/;yt.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,c,l,f,p,d,h,v,g=Lt.get(t);if(g)for(n.handler&&(o=n,n=o.handler,i=o.selector),i&&yt.find.matchesSelector(Qt,i),n.guid||(n.guid=yt.guid++),(u=g.events)||(u=g.events={}),(a=g.handle)||(a=g.handle=function(e){return void 0!==yt&&yt.event.triggered!==e.type?yt.event.dispatch.apply(t,arguments):void 0}),e=(e||\"\").match(Ot)||[\"\"],c=e.length;c--;)s=Yt.exec(e[c])||[],d=v=s[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=yt.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=yt.event.special[d]||{},l=yt.extend({type:d,origType:v,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&yt.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||(p=u[d]=[],p.delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,l),l.handler.guid||(l.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,l):p.push(l),yt.event.global[d]=!0)},remove:function(t,e,n,r,i){var o,a,s,u,c,l,f,p,d,h,v,g=Lt.hasData(t)&&Lt.get(t);if(g&&(u=g.events)){for(e=(e||\"\").match(Ot)||[\"\"],c=e.length;c--;)if(s=Yt.exec(e[c])||[],d=v=s[1],h=(s[2]||\"\").split(\".\").sort(),d){for(f=yt.event.special[d]||{},d=(r?f.delegateType:f.bindType)||d,p=u[d]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=o=p.length;o--;)l=p[o],!i&&v!==l.origType||n&&n.guid!==l.guid||s&&!s.test(l.namespace)||r&&r!==l.selector&&(\"**\"!==r||!l.selector)||(p.splice(o,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(t,l));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(t,h,g.handle)||yt.removeEvent(t,d,g.handle),delete u[d])}else for(d in u)yt.event.remove(t,d+e[c],n,r,!0);yt.isEmptyObject(u)&&Lt.remove(t,\"handle events\")}},dispatch:function(t){var e,n,r,i,o,a,s=yt.event.fix(t),u=new Array(arguments.length),c=(Lt.get(this,\"events\")||{})[s.type]||[],l=yt.event.special[s.type]||{};for(u[0]=s,e=1;e<arguments.length;e++)u[e]=arguments[e];if(s.delegateTarget=this,!l.preDispatch||!1!==l.preDispatch.call(this,s)){for(a=yt.event.handlers.call(this,s,c),e=0;(i=a[e++])&&!s.isPropagationStopped();)for(s.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!s.isImmediatePropagationStopped();)s.rnamespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((yt.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,s),s.result}},handlers:function(t,e){var n,r,i,o,a,s=[],u=e.delegateCount,c=t.target;if(u&&c.nodeType&&!(\"click\"===t.type&&t.button>=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&(\"click\"!==t.type||!0!==c.disabled)){for(o=[],a={},n=0;n<u;n++)r=e[n],i=r.selector+\" \",void 0===a[i]&&(a[i]=r.needsContext?yt(i,this).index(c)>-1:yt.find(i,this,null,[c]).length),a[i]&&o.push(r);o.length&&s.push({elem:c,handlers:o})}return c=this,u<e.length&&s.push({elem:c,handlers:e.slice(u)}),s},addProp:function(t,e){Object.defineProperty(yt.Event.prototype,t,{enumerable:!0,configurable:!0,get:yt.isFunction(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(t){return t[yt.expando]?t:new yt.Event(t)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==A()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===A()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&u(this,\"input\"))return this.click(),!1},_default:function(t){return u(t.target,\"a\")}},beforeunload:{postDispatch:function(t){void 0!==t.result&&t.originalEvent&&(t.originalEvent.returnValue=t.result)}}}},yt.removeEvent=function(t,e,n){t.removeEventListener&&t.removeEventListener(e,n)},yt.Event=function(t,e){if(!(this instanceof yt.Event))return new yt.Event(t,e);t&&t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&&!1===t.returnValue?$:k,this.target=t.target&&3===t.target.nodeType?t.target.parentNode:t.target,this.currentTarget=t.currentTarget,this.relatedTarget=t.relatedTarget):this.type=t,e&&yt.extend(this,e),this.timeStamp=t&&t.timeStamp||yt.now(),this[yt.expando]=!0},yt.Event.prototype={constructor:yt.Event,isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k,isSimulated:!1,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=$,t&&!this.isSimulated&&t.preventDefault()},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=$,t&&!this.isSimulated&&t.stopPropagation()},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=$,t&&!this.isSimulated&&t.stopImmediatePropagation(),this.stopPropagation()}},yt.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(t){var e=t.button;return null==t.which&&Gt.test(t.type)?null!=t.charCode?t.charCode:t.keyCode:!t.which&&void 0!==e&&Zt.test(t.type)?1&e?1:2&e?3:4&e?2:0:t.which}},yt.event.addProp),yt.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(t,e){yt.event.special[t]={delegateType:e,bindType:e,handle:function(t){var n,r=this,i=t.relatedTarget,o=t.handleObj;return i&&(i===r||yt.contains(r,i))||(t.type=o.origType,n=o.handler.apply(this,arguments),t.type=e),n}}}),yt.fn.extend({on:function(t,e,n,r){return E(this,t,e,n,r)},one:function(t,e,n,r){return E(this,t,e,n,r,1)},off:function(t,e,n){var r,i;if(t&&t.preventDefault&&t.handleObj)return r=t.handleObj,yt(t.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof t){for(i in t)this.off(i,e,t[i]);return this}return!1!==e&&\"function\"!=typeof e||(n=e,e=void 0),!1===n&&(n=k),this.each(function(){yt.event.remove(this,t,n,e)})}});var te=/<script|<style|<link/i,ee=/checked\\s*(?:[^=]|=\\s*.checked.)/i,ne=/^true\\/(.*)/,re=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;yt.extend({htmlPrefilter:function(t){return t.replace(/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\"<$1></$2>\")},clone:function(t,e,n){var r,i,o,a,s=t.cloneNode(!0),u=yt.contains(t.ownerDocument,t);if(!(mt.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||yt.isXMLDoc(t)))for(a=x(s),o=x(t),r=0,i=o.length;r<i;r++)D(o[r],a[r]);if(e)if(n)for(o=o||x(t),a=a||x(s),r=0,i=o.length;r<i;r++)N(o[r],a[r]);else N(t,s);return a=x(s,\"script\"),a.length>0&&C(a,!u&&x(t,\"script\")),s},cleanData:function(t){for(var e,n,r,i=yt.event.special,o=0;void 0!==(n=t[o]);o++)if(It(n)){if(e=n[Lt.expando]){if(e.events)for(r in e.events)i[r]?yt.event.remove(n,r):yt.removeEvent(n,r,e.handle);n[Lt.expando]=void 0}n[Rt.expando]&&(n[Rt.expando]=void 0)}}}),yt.fn.extend({detach:function(t){return L(this,t,!0)},remove:function(t){return L(this,t)},text:function(t){return Dt(this,function(t){return void 0===t?yt.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return I(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){S(this,t).appendChild(t)}})},prepend:function(){return I(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=S(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return I(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return I(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(yt.cleanData(x(t,!1)),t.textContent=\"\");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return yt.clone(this,t,e)})},html:function(t){return Dt(this,function(t){var e=this[0]||{},n=0,r=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if(\"string\"==typeof t&&!te.test(t)&&!Kt[(Vt.exec(t)||[\"\",\"\"])[1].toLowerCase()]){t=yt.htmlPrefilter(t);try{for(;n<r;n++)e=this[n]||{},1===e.nodeType&&(yt.cleanData(x(e,!1)),e.innerHTML=t);e=0}catch(t){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=[];return I(this,arguments,function(e){var n=this.parentNode;yt.inArray(this,t)<0&&(yt.cleanData(x(this)),n&&n.replaceChild(e,this))},t)}}),yt.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(t,e){yt.fn[t]=function(t){for(var n,r=[],i=yt(t),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),yt(i[a])[e](n),lt.apply(r,n.get());return this.pushStack(r)}});var ie=/^margin/,oe=new RegExp(\"^(\"+qt+\")(?!px)[a-z%]+$\",\"i\"),ae=function(t){var e=t.ownerDocument.defaultView;return e&&e.opener||(e=n),e.getComputedStyle(t)};!function(){function t(){if(s){s.style.cssText=\"box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%\",s.innerHTML=\"\",Qt.appendChild(a);var t=n.getComputedStyle(s);e=\"1%\"!==t.top,o=\"2px\"===t.marginLeft,r=\"4px\"===t.width,s.style.marginRight=\"50%\",i=\"4px\"===t.marginRight,Qt.removeChild(a),s=null}}var e,r,i,o,a=at.createElement(\"div\"),s=at.createElement(\"div\");s.style&&(s.style.backgroundClip=\"content-box\",s.cloneNode(!0).style.backgroundClip=\"\",mt.clearCloneStyle=\"content-box\"===s.style.backgroundClip,a.style.cssText=\"border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute\",a.appendChild(s),yt.extend(mt,{pixelPosition:function(){return t(),e},boxSizingReliable:function(){return t(),r},pixelMarginRight:function(){return t(),i},reliableMarginLeft:function(){return t(),o}}))}();var se=/^(none|table(?!-c[ea]).+)/,ue=/^--/,ce={position:\"absolute\",visibility:\"hidden\",display:\"block\"},le={letterSpacing:\"0\",fontWeight:\"400\"},fe=[\"Webkit\",\"Moz\",\"ms\"],pe=at.createElement(\"div\").style;yt.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=R(t,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:\"cssFloat\"},style:function(t,e,n,r){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var i,o,a,s=yt.camelCase(e),u=ue.test(e),c=t.style;if(u||(e=q(s)),a=yt.cssHooks[e]||yt.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(t,!1,r))?i:c[e];o=typeof n,\"string\"===o&&(i=Mt.exec(n))&&i[1]&&(n=b(t,e,i),o=\"number\"),null!=n&&n===n&&(\"number\"===o&&(n+=i&&i[3]||(yt.cssNumber[s]?\"\":\"px\")),mt.clearCloneStyle||\"\"!==n||0!==e.indexOf(\"background\")||(c[e]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(t,n,r))||(u?c.setProperty(e,n):c[e]=n))}},css:function(t,e,n,r){var i,o,a,s=yt.camelCase(e);return ue.test(e)||(e=q(s)),a=yt.cssHooks[e]||yt.cssHooks[s],a&&\"get\"in a&&(i=a.get(t,!0,n)),void 0===i&&(i=R(t,e,r)),\"normal\"===i&&e in le&&(i=le[e]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),yt.each([\"height\",\"width\"],function(t,e){yt.cssHooks[e]={get:function(t,n,r){if(n)return!se.test(yt.css(t,\"display\"))||t.getClientRects().length&&t.getBoundingClientRect().width?B(t,e,r):Ut(t,ce,function(){return B(t,e,r)})},set:function(t,n,r){var i,o=r&&ae(t),a=r&&H(t,e,r,\"border-box\"===yt.css(t,\"boxSizing\",!1,o),o);return a&&(i=Mt.exec(n))&&\"px\"!==(i[3]||\"px\")&&(t.style[e]=n,n=yt.css(t,e)),M(t,n,a)}}}),yt.cssHooks.marginLeft=P(mt.reliableMarginLeft,function(t,e){if(e)return(parseFloat(R(t,\"marginLeft\"))||t.getBoundingClientRect().left-Ut(t,{marginLeft:0},function(){return t.getBoundingClientRect().left}))+\"px\"}),yt.each({margin:\"\",padding:\"\",border:\"Width\"},function(t,e){yt.cssHooks[t+e]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[t+Ht[r]+e]=o[r]||o[r-2]||o[0];return i}},ie.test(t)||(yt.cssHooks[t+e].set=M)}),yt.fn.extend({css:function(t,e){return Dt(this,function(t,e,n){var r,i,o={},a=0;if(Array.isArray(e)){for(r=ae(t),i=e.length;a<i;a++)o[e[a]]=yt.css(t,e[a],!1,r);return o}return void 0!==n?yt.style(t,e,n):yt.css(t,e)},t,e,arguments.length>1)}}),yt.Tween=U,U.prototype={constructor:U,init:function(t,e,n,r,i,o){this.elem=t,this.prop=n,this.easing=i||yt.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=r,this.unit=o||(yt.cssNumber[n]?\"\":\"px\")},cur:function(){var t=U.propHooks[this.prop];return t&&t.get?t.get(this):U.propHooks._default.get(this)},run:function(t){var e,n=U.propHooks[this.prop];return this.options.duration?this.pos=e=yt.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):U.propHooks._default.set(this),this}},U.prototype.init.prototype=U.prototype,U.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=yt.css(t.elem,t.prop,\"\"),e&&\"auto\"!==e?e:0)},set:function(t){yt.fx.step[t.prop]?yt.fx.step[t.prop](t):1!==t.elem.nodeType||null==t.elem.style[yt.cssProps[t.prop]]&&!yt.cssHooks[t.prop]?t.elem[t.prop]=t.now:yt.style(t.elem,t.prop,t.now+t.unit)}}},U.propHooks.scrollTop=U.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},yt.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:\"swing\"},yt.fx=U.prototype.init,yt.fx.step={};var de,he,ve=/^(?:toggle|show|hide)$/,ge=/queueHooks$/;yt.Animation=yt.extend(Q,{tweeners:{\"*\":[function(t,e){var n=this.createTween(t,e);return b(n.elem,t,Mt.exec(e),n),n}]},tweener:function(t,e){yt.isFunction(t)?(e=t,t=[\"*\"]):t=t.match(Ot);for(var n,r=0,i=t.length;r<i;r++)n=t[r],Q.tweeners[n]=Q.tweeners[n]||[],Q.tweeners[n].unshift(e)},prefilters:[K],prefilter:function(t,e){e?Q.prefilters.unshift(t):Q.prefilters.push(t)}}),yt.speed=function(t,e,n){var r=t&&\"object\"==typeof t?yt.extend({},t):{complete:n||!n&&e||yt.isFunction(t)&&t,duration:t,easing:n&&e||e&&!yt.isFunction(e)&&e};return yt.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in yt.fx.speeds?r.duration=yt.fx.speeds[r.duration]:r.duration=yt.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){yt.isFunction(r.old)&&r.old.call(this),r.queue&&yt.dequeue(this,r.queue)},r},yt.fn.extend({fadeTo:function(t,e,n,r){return this.filter(Bt).css(\"opacity\",0).show().end().animate({opacity:e},t,n,r)},animate:function(t,e,n,r){var i=yt.isEmptyObject(t),o=yt.speed(e,n,r),a=function(){var e=Q(this,yt.extend({},t),o);(i||Lt.get(this,\"finish\"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(t,e,n){var r=function(t){var e=t.stop;delete t.stop,e(n)};return\"string\"!=typeof t&&(n=e,e=t,t=void 0),e&&!1!==t&&this.queue(t||\"fx\",[]),this.each(function(){var e=!0,i=null!=t&&t+\"queueHooks\",o=yt.timers,a=Lt.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ge.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=t&&o[i].queue!==t||(o[i].anim.stop(n),e=!1,o.splice(i,1));!e&&n||yt.dequeue(this,t)})},finish:function(t){return!1!==t&&(t=t||\"fx\"),this.each(function(){var e,n=Lt.get(this),r=n[t+\"queue\"],i=n[t+\"queueHooks\"],o=yt.timers,a=r?r.length:0;for(n.finish=!0,yt.queue(this,t,[]),i&&i.stop&&i.stop.call(this,!0),e=o.length;e--;)o[e].elem===this&&o[e].queue===t&&(o[e].anim.stop(!0),o.splice(e,1));for(e=0;e<a;e++)r[e]&&r[e].finish&&r[e].finish.call(this);delete n.finish})}}),yt.each([\"toggle\",\"show\",\"hide\"],function(t,e){var n=yt.fn[e];yt.fn[e]=function(t,r,i){return null==t||\"boolean\"==typeof t?n.apply(this,arguments):this.animate(V(e,!0),t,r,i)}}),yt.each({slideDown:V(\"show\"),slideUp:V(\"hide\"),slideToggle:V(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(t,e){yt.fn[t]=function(t,n,r){return this.animate(e,t,n,r)}}),yt.timers=[],yt.fx.tick=function(){var t,e=0,n=yt.timers;for(de=yt.now();e<n.length;e++)(t=n[e])()||n[e]!==t||n.splice(e--,1);n.length||yt.fx.stop(),de=void 0},yt.fx.timer=function(t){yt.timers.push(t),yt.fx.start()},yt.fx.interval=13,yt.fx.start=function(){he||(he=!0,W())},yt.fx.stop=function(){he=null},yt.fx.speeds={slow:600,fast:200,_default:400},yt.fn.delay=function(t,e){return t=yt.fx?yt.fx.speeds[t]||t:t,e=e||\"fx\",this.queue(e,function(e,r){var i=n.setTimeout(e,t);r.stop=function(){n.clearTimeout(i)}})},function(){var t=at.createElement(\"input\"),e=at.createElement(\"select\"),n=e.appendChild(at.createElement(\"option\"));t.type=\"checkbox\",mt.checkOn=\"\"!==t.value,mt.optSelected=n.selected,t=at.createElement(\"input\"),t.value=\"t\",t.type=\"radio\",mt.radioValue=\"t\"===t.value}();var me,ye=yt.expr.attrHandle;yt.fn.extend({attr:function(t,e){return Dt(this,yt.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each(function(){yt.removeAttr(this,t)})}}),yt.extend({attr:function(t,e,n){var r,i,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===t.getAttribute?yt.prop(t,e,n):(1===o&&yt.isXMLDoc(t)||(i=yt.attrHooks[e.toLowerCase()]||(yt.expr.match.bool.test(e)?me:void 0)),void 0!==n?null===n?void yt.removeAttr(t,e):i&&\"set\"in i&&void 0!==(r=i.set(t,n,e))?r:(t.setAttribute(e,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(t,e))?r:(r=yt.find.attr(t,e),null==r?void 0:r))},attrHooks:{type:{set:function(t,e){if(!mt.radioValue&&\"radio\"===e&&u(t,\"input\")){var n=t.value;return t.setAttribute(\"type\",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,r=0,i=e&&e.match(Ot);if(i&&1===t.nodeType)for(;n=i[r++];)t.removeAttribute(n)}}),me={set:function(t,e,n){return!1===e?yt.removeAttr(t,n):t.setAttribute(n,n),n}},yt.each(yt.expr.match.bool.source.match(/\\w+/g),function(t,e){var n=ye[e]||yt.find.attr;ye[e]=function(t,e,r){var i,o,a=e.toLowerCase();return r||(o=ye[a],ye[a]=i,i=null!=n(t,e,r)?a:null,ye[a]=o),i}});var be=/^(?:input|select|textarea|button)$/i,_e=/^(?:a|area)$/i;yt.fn.extend({prop:function(t,e){return Dt(this,yt.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[yt.propFix[t]||t]})}}),yt.extend({prop:function(t,e,n){var r,i,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&yt.isXMLDoc(t)||(e=yt.propFix[e]||e,i=yt.propHooks[e]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(t,n,e))?r:t[e]=n:i&&\"get\"in i&&null!==(r=i.get(t,e))?r:t[e]},propHooks:{tabIndex:{get:function(t){var e=yt.find.attr(t,\"tabindex\");return e?parseInt(e,10):be.test(t.nodeName)||_e.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),mt.optSelected||(yt.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),yt.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){yt.propFix[this.toLowerCase()]=this}),yt.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(yt.isFunction(t))return this.each(function(e){yt(this).addClass(t.call(this,e,Z(this)))});if(\"string\"==typeof t&&t)for(e=t.match(Ot)||[];n=this[u++];)if(i=Z(n),r=1===n.nodeType&&\" \"+G(i)+\" \"){for(a=0;o=e[a++];)r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");s=G(r),i!==s&&n.setAttribute(\"class\",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(yt.isFunction(t))return this.each(function(e){yt(this).removeClass(t.call(this,e,Z(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if(\"string\"==typeof t&&t)for(e=t.match(Ot)||[];n=this[u++];)if(i=Z(n),r=1===n.nodeType&&\" \"+G(i)+\" \"){for(a=0;o=e[a++];)for(;r.indexOf(\" \"+o+\" \")>-1;)r=r.replace(\" \"+o+\" \",\" \");s=G(r),i!==s&&n.setAttribute(\"class\",s)}return this},toggleClass:function(t,e){var n=typeof t;return\"boolean\"==typeof e&&\"string\"===n?e?this.addClass(t):this.removeClass(t):yt.isFunction(t)?this.each(function(n){yt(this).toggleClass(t.call(this,n,Z(this),e),e)}):this.each(function(){var e,r,i,o;if(\"string\"===n)for(r=0,i=yt(this),o=t.match(Ot)||[];e=o[r++];)i.hasClass(e)?i.removeClass(e):i.addClass(e);else void 0!==t&&\"boolean\"!==n||(e=Z(this),e&&Lt.set(this,\"__className__\",e),this.setAttribute&&this.setAttribute(\"class\",e||!1===t?\"\":Lt.get(this,\"__className__\")||\"\"))})},hasClass:function(t){var e,n,r=0;for(e=\" \"+t+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+G(Z(n))+\" \").indexOf(e)>-1)return!0;return!1}});yt.fn.extend({val:function(t){var e,n,r,i=this[0];{if(arguments.length)return r=yt.isFunction(t),this.each(function(n){var i;1===this.nodeType&&(i=r?t.call(this,n,yt(this).val()):t,null==i?i=\"\":\"number\"==typeof i?i+=\"\":Array.isArray(i)&&(i=yt.map(i,function(t){return null==t?\"\":t+\"\"})),(e=yt.valHooks[this.type]||yt.valHooks[this.nodeName.toLowerCase()])&&\"set\"in e&&void 0!==e.set(this,i,\"value\")||(this.value=i))});if(i)return(e=yt.valHooks[i.type]||yt.valHooks[i.nodeName.toLowerCase()])&&\"get\"in e&&void 0!==(n=e.get(i,\"value\"))?n:(n=i.value,\"string\"==typeof n?n.replace(/\\r/g,\"\"):null==n?\"\":n)}}}),yt.extend({valHooks:{option:{get:function(t){var e=yt.find.attr(t,\"value\");return null!=e?e:G(yt.text(t))}},select:{get:function(t){var e,n,r,i=t.options,o=t.selectedIndex,a=\"select-one\"===t.type,s=a?null:[],c=a?o+1:i.length;for(r=o<0?c:a?o:0;r<c;r++)if(n=i[r],(n.selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!u(n.parentNode,\"optgroup\"))){if(e=yt(n).val(),a)return e;s.push(e)}return s},set:function(t,e){for(var n,r,i=t.options,o=yt.makeArray(e),a=i.length;a--;)r=i[a],(r.selected=yt.inArray(yt.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(t.selectedIndex=-1),o}}}}),yt.each([\"radio\",\"checkbox\"],function(){yt.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=yt.inArray(yt(t).val(),e)>-1}},mt.checkOn||(yt.valHooks[this].get=function(t){return null===t.getAttribute(\"value\")?\"on\":t.value})});var we=/^(?:focusinfocus|focusoutblur)$/;yt.extend(yt.event,{trigger:function(t,e,r,i){var o,a,s,u,c,l,f,p=[r||at],d=ht.call(t,\"type\")?t.type:t,h=ht.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(a=s=r=r||at,3!==r.nodeType&&8!==r.nodeType&&!we.test(d+yt.event.triggered)&&(d.indexOf(\".\")>-1&&(h=d.split(\".\"),d=h.shift(),h.sort()),c=d.indexOf(\":\")<0&&\"on\"+d,t=t[yt.expando]?t:new yt.Event(d,\"object\"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=r),e=null==e?[t]:yt.makeArray(e,[t]),f=yt.event.special[d]||{},i||!f.trigger||!1!==f.trigger.apply(r,e))){if(!i&&!f.noBubble&&!yt.isWindow(r)){for(u=f.delegateType||d,we.test(u+d)||(a=a.parentNode);a;a=a.parentNode)p.push(a),s=a;s===(r.ownerDocument||at)&&p.push(s.defaultView||s.parentWindow||n)}for(o=0;(a=p[o++])&&!t.isPropagationStopped();)t.type=o>1?u:f.bindType||d,l=(Lt.get(a,\"events\")||{})[t.type]&&Lt.get(a,\"handle\"),l&&l.apply(a,e),(l=c&&a[c])&&l.apply&&It(a)&&(t.result=l.apply(a,e),!1===t.result&&t.preventDefault());return t.type=d,i||t.isDefaultPrevented()||f._default&&!1!==f._default.apply(p.pop(),e)||!It(r)||c&&yt.isFunction(r[d])&&!yt.isWindow(r)&&(s=r[c],s&&(r[c]=null),yt.event.triggered=d,r[d](),yt.event.triggered=void 0,s&&(r[c]=s)),t.result}},simulate:function(t,e,n){var r=yt.extend(new yt.Event,n,{type:t,isSimulated:!0});yt.event.trigger(r,null,e)}}),yt.fn.extend({trigger:function(t,e){return this.each(function(){yt.event.trigger(t,e,this)})},triggerHandler:function(t,e){var n=this[0];if(n)return yt.event.trigger(t,e,n,!0)}}),yt.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(t,e){yt.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),yt.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),mt.focusin=\"onfocusin\"in n,mt.focusin||yt.each({focus:\"focusin\",blur:\"focusout\"},function(t,e){var n=function(t){yt.event.simulate(e,t.target,yt.event.fix(t))};yt.event.special[e]={setup:function(){var r=this.ownerDocument||this,i=Lt.access(r,e);i||r.addEventListener(t,n,!0),Lt.access(r,e,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=Lt.access(r,e)-1;i?Lt.access(r,e,i):(r.removeEventListener(t,n,!0),Lt.remove(r,e))}}});var xe=n.location,Ce=yt.now(),Te=/\\?/;yt.parseXML=function(t){var e;if(!t||\"string\"!=typeof t)return null;try{e=(new n.DOMParser).parseFromString(t,\"text/xml\")}catch(t){e=void 0}return e&&!e.getElementsByTagName(\"parsererror\").length||yt.error(\"Invalid XML: \"+t),e};var $e=/\\[\\]$/,ke=/^(?:submit|button|image|reset|file)$/i,Ae=/^(?:input|select|textarea|keygen)/i;yt.param=function(t,e){var n,r=[],i=function(t,e){var n=yt.isFunction(e)?e():e;r[r.length]=encodeURIComponent(t)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(Array.isArray(t)||t.jquery&&!yt.isPlainObject(t))yt.each(t,function(){i(this.name,this.value)});else for(n in t)Y(n,t[n],e,i);return r.join(\"&\")},yt.fn.extend({serialize:function(){return yt.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=yt.prop(this,\"elements\");return t?yt.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!yt(this).is(\":disabled\")&&Ae.test(this.nodeName)&&!ke.test(t)&&(this.checked||!zt.test(t))}).map(function(t,e){var n=yt(this).val();return null==n?null:Array.isArray(n)?yt.map(n,function(t){return{name:e.name,value:t.replace(/\\r?\\n/g,\"\\r\\n\")}}):{name:e.name,value:n.replace(/\\r?\\n/g,\"\\r\\n\")}}).get()}});var Ee=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Se=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Oe=/^(?:GET|HEAD)$/,je={},Ne={},De=\"*/\".concat(\"*\"),Ie=at.createElement(\"a\");Ie.href=xe.href,yt.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:xe.href,type:\"GET\",isLocal:Se.test(xe.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":De,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":yt.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?nt(nt(t,yt.ajaxSettings),e):nt(yt.ajaxSettings,t)},ajaxPrefilter:tt(je),ajaxTransport:tt(Ne),ajax:function(t,e){function r(t,e,r,s){var c,p,d,_,w,x=e;l||(l=!0,u&&n.clearTimeout(u),i=void 0,a=s||\"\",C.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(_=rt(h,C,r)),_=it(h,_,C,c),c?(h.ifModified&&(w=C.getResponseHeader(\"Last-Modified\"),w&&(yt.lastModified[o]=w),(w=C.getResponseHeader(\"etag\"))&&(yt.etag[o]=w)),204===t||\"HEAD\"===h.type?x=\"nocontent\":304===t?x=\"notmodified\":(x=_.state,p=_.data,d=_.error,c=!d)):(d=x,!t&&x||(x=\"error\",t<0&&(t=0))),C.status=t,C.statusText=(e||x)+\"\",c?m.resolveWith(v,[p,x,C]):m.rejectWith(v,[C,x,d]),C.statusCode(b),b=void 0,f&&g.trigger(c?\"ajaxSuccess\":\"ajaxError\",[C,h,c?p:d]),y.fireWith(v,[C,x]),f&&(g.trigger(\"ajaxComplete\",[C,h]),--yt.active||yt.event.trigger(\"ajaxStop\")))}\"object\"==typeof t&&(e=t,t=void 0),e=e||{};var i,o,a,s,u,c,l,f,p,d,h=yt.ajaxSetup({},e),v=h.context||h,g=h.context&&(v.nodeType||v.jquery)?yt(v):yt.event,m=yt.Deferred(),y=yt.Callbacks(\"once memory\"),b=h.statusCode||{},_={},w={},x=\"canceled\",C={readyState:0,getResponseHeader:function(t){var e;if(l){if(!s)for(s={};e=Ee.exec(a);)s[e[1].toLowerCase()]=e[2];e=s[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return l?a:null},setRequestHeader:function(t,e){return null==l&&(t=w[t.toLowerCase()]=w[t.toLowerCase()]||t,_[t]=e),this},overrideMimeType:function(t){return null==l&&(h.mimeType=t),this},statusCode:function(t){var e;if(t)if(l)C.always(t[C.status]);else for(e in t)b[e]=[b[e],t[e]];return this},abort:function(t){var e=t||x;return i&&i.abort(e),r(0,e),this}};if(m.promise(C),h.url=((t||h.url||xe.href)+\"\").replace(/^\\/\\//,xe.protocol+\"//\"),h.type=e.method||e.type||h.method||h.type,h.dataTypes=(h.dataType||\"*\").toLowerCase().match(Ot)||[\"\"],null==h.crossDomain){c=at.createElement(\"a\");try{c.href=h.url,c.href=c.href,h.crossDomain=Ie.protocol+\"//\"+Ie.host!=c.protocol+\"//\"+c.host}catch(t){h.crossDomain=!0}}if(h.data&&h.processData&&\"string\"!=typeof h.data&&(h.data=yt.param(h.data,h.traditional)),et(je,h,e,C),l)return C;f=yt.event&&h.global,f&&0==yt.active++&&yt.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!Oe.test(h.type),o=h.url.replace(/#.*$/,\"\"),h.hasContent?h.data&&h.processData&&0===(h.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(h.data=h.data.replace(/%20/g,\"+\")):(d=h.url.slice(o.length),h.data&&(o+=(Te.test(o)?\"&\":\"?\")+h.data,delete h.data),!1===h.cache&&(o=o.replace(/([?&])_=[^&]*/,\"$1\"),d=(Te.test(o)?\"&\":\"?\")+\"_=\"+Ce+++d),h.url=o+d),h.ifModified&&(yt.lastModified[o]&&C.setRequestHeader(\"If-Modified-Since\",yt.lastModified[o]),yt.etag[o]&&C.setRequestHeader(\"If-None-Match\",yt.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||e.contentType)&&C.setRequestHeader(\"Content-Type\",h.contentType),C.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\"*\"!==h.dataTypes[0]?\", \"+De+\"; q=0.01\":\"\"):h.accepts[\"*\"]);for(p in h.headers)C.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(v,C,h)||l))return C.abort();if(x=\"abort\",y.add(h.complete),C.done(h.success),C.fail(h.error),i=et(Ne,h,e,C)){if(C.readyState=1,f&&g.trigger(\"ajaxSend\",[C,h]),l)return C;h.async&&h.timeout>0&&(u=n.setTimeout(function(){C.abort(\"timeout\")},h.timeout));try{l=!1,i.send(_,r)}catch(t){if(l)throw t;r(-1,t)}}else r(-1,\"No Transport\");return C},getJSON:function(t,e,n){return yt.get(t,e,n,\"json\")},getScript:function(t,e){return yt.get(t,void 0,e,\"script\")}}),yt.each([\"get\",\"post\"],function(t,e){yt[e]=function(t,n,r,i){return yt.isFunction(n)&&(i=i||r,r=n,n=void 0),yt.ajax(yt.extend({url:t,type:e,dataType:i,data:n,success:r},yt.isPlainObject(t)&&t))}}),yt._evalUrl=function(t){return yt.ajax({url:t,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,throws:!0})},yt.fn.extend({wrapAll:function(t){var e;return this[0]&&(yt.isFunction(t)&&(t=t.call(this[0])),e=yt(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this},wrapInner:function(t){return yt.isFunction(t)?this.each(function(e){yt(this).wrapInner(t.call(this,e))}):this.each(function(){var e=yt(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=yt.isFunction(t);return this.each(function(n){yt(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(t){return this.parent(t).not(\"body\").each(function(){yt(this).replaceWith(this.childNodes)}),this}}),yt.expr.pseudos.hidden=function(t){return!yt.expr.pseudos.visible(t)},yt.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},yt.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(t){}};var Le={0:200,1223:204},Re=yt.ajaxSettings.xhr();mt.cors=!!Re&&\"withCredentials\"in Re,mt.ajax=Re=!!Re,yt.ajaxTransport(function(t){var e,r;if(mt.cors||Re&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");for(a in i)s.setRequestHeader(a,i[a]);e=function(t){return function(){e&&(e=r=s.onload=s.onerror=s.onabort=s.onreadystatechange=null,\"abort\"===t?s.abort():\"error\"===t?\"number\"!=typeof s.status?o(0,\"error\"):o(s.status,s.statusText):o(Le[s.status]||s.status,s.statusText,\"text\"!==(s.responseType||\"text\")||\"string\"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=e(),r=s.onerror=e(\"error\"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&n.setTimeout(function(){e&&r()})},e=e(\"abort\");try{s.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}}),yt.ajaxPrefilter(function(t){t.crossDomain&&(t.contents.script=!1)}),yt.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(t){return yt.globalEval(t),t}}}),yt.ajaxPrefilter(\"script\",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type=\"GET\")}),yt.ajaxTransport(\"script\",function(t){if(t.crossDomain){var e,n;return{send:function(r,i){e=yt(\"<script>\").prop({charset:t.scriptCharset,src:t.url}).on(\"load error\",n=function(t){e.remove(),n=null,t&&i(\"error\"===t.type?404:200,t.type)}),at.head.appendChild(e[0])},abort:function(){n&&n()}}}});var Pe=[],Fe=/(=)\\?(?=&|$)|\\?\\?/;yt.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var t=Pe.pop()||yt.expando+\"_\"+Ce++;return this[t]=!0,t}}),yt.ajaxPrefilter(\"json jsonp\",function(t,e,r){var i,o,a,s=!1!==t.jsonp&&(Fe.test(t.url)?\"url\":\"string\"==typeof t.data&&0===(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Fe.test(t.data)&&\"data\");if(s||\"jsonp\"===t.dataTypes[0])return i=t.jsonpCallback=yt.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Fe,\"$1\"+i):!1!==t.jsonp&&(t.url+=(Te.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+i),t.converters[\"script json\"]=function(){return a||yt.error(i+\" was not called\"),a[0]},t.dataTypes[0]=\"json\",o=n[i],n[i]=function(){a=arguments},r.always(function(){void 0===o?yt(n).removeProp(i):n[i]=o,t[i]&&(t.jsonpCallback=e.jsonpCallback,Pe.push(i)),a&&yt.isFunction(o)&&o(a[0]),a=o=void 0}),\"script\"}),mt.createHTMLDocument=function(){var t=at.implementation.createHTMLDocument(\"\").body;return t.innerHTML=\"<form></form><form></form>\",2===t.childNodes.length}(),yt.parseHTML=function(t,e,n){if(\"string\"!=typeof t)return[];\"boolean\"==typeof e&&(n=e,e=!1);var r,i,o;return e||(mt.createHTMLDocument?(e=at.implementation.createHTMLDocument(\"\"),r=e.createElement(\"base\"),r.href=at.location.href,e.head.appendChild(r)):e=at),i=Tt.exec(t),o=!n&&[],i?[e.createElement(i[1])]:(i=T([t],e,o),o&&o.length&&yt(o).remove(),yt.merge([],i.childNodes))},yt.fn.load=function(t,e,n){var r,i,o,a=this,s=t.indexOf(\" \");return s>-1&&(r=G(t.slice(s)),t=t.slice(0,s)),yt.isFunction(e)?(n=e,e=void 0):e&&\"object\"==typeof e&&(i=\"POST\"),a.length>0&&yt.ajax({url:t,type:i||\"GET\",dataType:\"html\",data:e}).done(function(t){o=arguments,a.html(r?yt(\"<div>\").append(yt.parseHTML(t)).find(r):t)}).always(n&&function(t,e){a.each(function(){n.apply(this,o||[t.responseText,e,t])})}),this},yt.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(t,e){yt.fn[e]=function(t){return this.on(e,t)}}),yt.expr.pseudos.animated=function(t){return yt.grep(yt.timers,function(e){return t===e.elem}).length},yt.offset={setOffset:function(t,e,n){var r,i,o,a,s,u,c,l=yt.css(t,\"position\"),f=yt(t),p={};\"static\"===l&&(t.style.position=\"relative\"),s=f.offset(),o=yt.css(t,\"top\"),u=yt.css(t,\"left\"),c=(\"absolute\"===l||\"fixed\"===l)&&(o+u).indexOf(\"auto\")>-1,c?(r=f.position(),a=r.top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),yt.isFunction(e)&&(e=e.call(t,n,yt.extend({},s))),null!=e.top&&(p.top=e.top-s.top+a),null!=e.left&&(p.left=e.left-s.left+i),\"using\"in e?e.using.call(t,p):f.css(p)}},yt.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){yt.offset.setOffset(this,t,e)});var e,n,r,i,o=this[0];if(o)return o.getClientRects().length?(r=o.getBoundingClientRect(),e=o.ownerDocument,n=e.documentElement,i=e.defaultView,{top:r.top+i.pageYOffset-n.clientTop,left:r.left+i.pageXOffset-n.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var t,e,n=this[0],r={top:0,left:0};return\"fixed\"===yt.css(n,\"position\")?e=n.getBoundingClientRect():(t=this.offsetParent(),e=this.offset(),u(t[0],\"html\")||(r=t.offset()),r={top:r.top+yt.css(t[0],\"borderTopWidth\",!0),left:r.left+yt.css(t[0],\"borderLeftWidth\",!0)}),{top:e.top-r.top-yt.css(n,\"marginTop\",!0),left:e.left-r.left-yt.css(n,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent;t&&\"static\"===yt.css(t,\"position\");)t=t.offsetParent;return t||Qt})}}),yt.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(t,e){var n=\"pageYOffset\"===e;yt.fn[t]=function(r){return Dt(this,function(t,r,i){var o;if(yt.isWindow(t)?o=t:9===t.nodeType&&(o=t.defaultView),void 0===i)return o?o[e]:t[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):t[r]=i},t,r,arguments.length)}}),yt.each([\"top\",\"left\"],function(t,e){yt.cssHooks[e]=P(mt.pixelPosition,function(t,n){if(n)return n=R(t,e),oe.test(n)?yt(t).position()[e]+\"px\":n})}),yt.each({Height:\"height\",Width:\"width\"},function(t,e){yt.each({padding:\"inner\"+t,content:e,\"\":\"outer\"+t},function(n,r){yt.fn[r]=function(i,o){var a=arguments.length&&(n||\"boolean\"!=typeof i),s=n||(!0===i||!0===o?\"margin\":\"border\");return Dt(this,function(e,n,i){var o;return yt.isWindow(e)?0===r.indexOf(\"outer\")?e[\"inner\"+t]:e.document.documentElement[\"client\"+t]:9===e.nodeType?(o=e.documentElement,Math.max(e.body[\"scroll\"+t],o[\"scroll\"+t],e.body[\"offset\"+t],o[\"offset\"+t],o[\"client\"+t])):void 0===i?yt.css(e,n,s):yt.style(e,n,i,s)},e,a?i:void 0,a)}})}),yt.fn.extend({bind:function(t,e,n){return this.on(t,null,e,n)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,n,r){return this.on(e,t,n,r)},undelegate:function(t,e,n){return 1===arguments.length?this.off(t,\"**\"):this.off(e,t||\"**\",n)}}),yt.holdReady=function(t){t?yt.readyWait++:yt.ready(!0)},yt.isArray=Array.isArray,yt.parseJSON=JSON.parse,yt.nodeName=u,r=[],void 0!==(i=function(){return yt}.apply(e,r))&&(t.exports=i);var qe=n.jQuery,Me=n.$;return yt.noConflict=function(t){return n.$===yt&&(n.$=Me),t&&n.jQuery===yt&&(n.jQuery=qe),yt},o||(n.jQuery=n.$=yt),yt})},function(t,e,n){(function(t,r){var i;(function(){function o(t,e){return t.set(e[0],e[1]),t}function a(t,e){return t.add(e),t}function s(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function u(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var a=t[i];e(r,a,n(a),t)}return r}function c(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function l(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function f(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function p(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var a=t[n];e(a,n,t)&&(o[i++]=a)}return o}function d(t,e){return!!(null==t?0:t.length)&&T(t,e,0)>-1}function h(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function v(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function g(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function m(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function y(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function b(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}function _(t){return t.split(\"\")}function w(t){return t.match(Pe)||[]}function x(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function C(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function T(t,e,n){return e===e?G(t,e,n):C(t,k,n)}function $(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function k(t){return t!==t}function A(t,e){var n=null==t?0:t.length;return n?N(t,e)/n:Lt}function E(t){return function(e){return null==e?it:e[t]}}function S(t){return function(e){return null==t?it:t[e]}}function O(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function j(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}function N(t,e){for(var n,r=-1,i=t.length;++r<i;){var o=e(t[r]);o!==it&&(n=n===it?o:n+o)}return n}function D(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function I(t,e){return v(e,function(e){return[e,t[e]]})}function L(t){return function(e){return t(e)}}function R(t,e){return v(e,function(e){return t[e]})}function P(t,e){return t.has(e)}function F(t,e){for(var n=-1,r=t.length;++n<r&&T(e,t[n],0)>-1;);return n}function q(t,e){for(var n=t.length;n--&&T(e,t[n],0)>-1;);return n}function M(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}function H(t){return\"\\\\\"+Tn[t]}function B(t,e){return null==t?it:t[e]}function U(t){return vn.test(t)}function W(t){return gn.test(t)}function z(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}function V(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function X(t,e){return function(n){return t(e(n))}}function K(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n];a!==e&&a!==lt||(t[n]=lt,o[i++]=n)}return o}function J(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function Q(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function G(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}function Z(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}function Y(t){return U(t)?et(t):Hn(t)}function tt(t){return U(t)?nt(t):_(t)}function et(t){for(var e=dn.lastIndex=0;dn.test(t);)++e;return e}function nt(t){return t.match(dn)||[]}function rt(t){return t.match(hn)||[]}var it,ot=200,at=\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\",st=\"Expected a function\",ut=\"__lodash_hash_undefined__\",ct=500,lt=\"__lodash_placeholder__\",ft=1,pt=2,dt=4,ht=1,vt=2,gt=1,mt=2,yt=4,bt=8,_t=16,wt=32,xt=64,Ct=128,Tt=256,$t=512,kt=30,At=\"...\",Et=800,St=16,Ot=1,jt=2,Nt=1/0,Dt=9007199254740991,It=1.7976931348623157e308,Lt=NaN,Rt=4294967295,Pt=Rt-1,Ft=Rt>>>1,qt=[[\"ary\",Ct],[\"bind\",gt],[\"bindKey\",mt],[\"curry\",bt],[\"curryRight\",_t],[\"flip\",$t],[\"partial\",wt],[\"partialRight\",xt],[\"rearg\",Tt]],Mt=\"[object Arguments]\",Ht=\"[object Array]\",Bt=\"[object AsyncFunction]\",Ut=\"[object Boolean]\",Wt=\"[object Date]\",zt=\"[object DOMException]\",Vt=\"[object Error]\",Xt=\"[object Function]\",Kt=\"[object GeneratorFunction]\",Jt=\"[object Map]\",Qt=\"[object Number]\",Gt=\"[object Null]\",Zt=\"[object Object]\",Yt=\"[object Proxy]\",te=\"[object RegExp]\",ee=\"[object Set]\",ne=\"[object String]\",re=\"[object Symbol]\",ie=\"[object Undefined]\",oe=\"[object WeakMap]\",ae=\"[object WeakSet]\",se=\"[object ArrayBuffer]\",ue=\"[object DataView]\",ce=\"[object Float32Array]\",le=\"[object Float64Array]\",fe=\"[object Int8Array]\",pe=\"[object Int16Array]\",de=\"[object Int32Array]\",he=\"[object Uint8Array]\",ve=\"[object Uint8ClampedArray]\",ge=\"[object Uint16Array]\",me=\"[object Uint32Array]\",ye=/\\b__p \\+= '';/g,be=/\\b(__p \\+=) '' \\+/g,_e=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,we=/&(?:amp|lt|gt|quot|#39);/g,xe=/[&<>\"']/g,Ce=RegExp(we.source),Te=RegExp(xe.source),$e=/<%=([\\s\\S]+?)%>/g,ke=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Ae=/^\\w*$/,Ee=/^\\./,Se=/[\\\\^$.*+?()[\\]{}|]/g,Oe=RegExp(Se.source),je=/^\\s+|\\s+$/g,Ne=/^\\s+/,De=/\\s+$/,Ie=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,Le=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,Re=/,? & /,Pe=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,Fe=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,qe=/\\w*$/,Me=/^[-+]0x[0-9a-f]+$/i,He=/^0b[01]+$/i,Be=/^\\[object .+?Constructor\\]$/,Ue=/^0o[0-7]+$/i,We=/^(?:0|[1-9]\\d*)$/,ze=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,Ve=/($^)/,Xe=/['\\n\\r\\u2028\\u2029\\\\]/g,Ke=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",Je=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Qe=\"[\"+Je+\"]\",Ge=\"[\"+Ke+\"]\",Ze=\"[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]\",Ye=\"[^\\\\ud800-\\\\udfff\"+Je+\"\\\\d+\\\\u2700-\\\\u27bfa-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xffA-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]\",tn=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",en=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",nn=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",rn=\"[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]\",on=\"(?:\"+Ze+\"|\"+Ye+\")\",an=\"(?:[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]|\\\\ud83c[\\\\udffb-\\\\udfff])?\",sn=\"(?:\\\\u200d(?:\"+[\"[^\\\\ud800-\\\\udfff]\",en,nn].join(\"|\")+\")[\\\\ufe0e\\\\ufe0f]?\"+an+\")*\",un=\"[\\\\ufe0e\\\\ufe0f]?\"+an+sn,cn=\"(?:\"+[\"[\\\\u2700-\\\\u27bf]\",en,nn].join(\"|\")+\")\"+un,ln=\"(?:\"+[\"[^\\\\ud800-\\\\udfff]\"+Ge+\"?\",Ge,en,nn,\"[\\\\ud800-\\\\udfff]\"].join(\"|\")+\")\",fn=RegExp(\"['’]\",\"g\"),pn=RegExp(Ge,\"g\"),dn=RegExp(tn+\"(?=\"+tn+\")|\"+ln+un,\"g\"),hn=RegExp([rn+\"?\"+Ze+\"+(?:['’](?:d|ll|m|re|s|t|ve))?(?=\"+[Qe,rn,\"$\"].join(\"|\")+\")\",\"(?:[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]|[^\\\\ud800-\\\\udfff\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\d+\\\\u2700-\\\\u27bfa-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xffA-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=\"+[Qe,rn+on,\"$\"].join(\"|\")+\")\",rn+\"?\"+on+\"+(?:['’](?:d|ll|m|re|s|t|ve))?\",rn+\"+(?:['’](?:D|LL|M|RE|S|T|VE))?\",\"\\\\d*(?:(?:1ST|2ND|3RD|(?![123])\\\\dTH)\\\\b)\",\"\\\\d*(?:(?:1st|2nd|3rd|(?![123])\\\\dth)\\\\b)\",\"\\\\d+\",cn].join(\"|\"),\"g\"),vn=RegExp(\"[\\\\u200d\\\\ud800-\\\\udfff\"+Ke+\"\\\\ufe0e\\\\ufe0f]\"),gn=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,mn=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],yn=-1,bn={};bn[ce]=bn[le]=bn[fe]=bn[pe]=bn[de]=bn[he]=bn[ve]=bn[ge]=bn[me]=!0,bn[Mt]=bn[Ht]=bn[se]=bn[Ut]=bn[ue]=bn[Wt]=bn[Vt]=bn[Xt]=bn[Jt]=bn[Qt]=bn[Zt]=bn[te]=bn[ee]=bn[ne]=bn[oe]=!1;var _n={};_n[Mt]=_n[Ht]=_n[se]=_n[ue]=_n[Ut]=_n[Wt]=_n[ce]=_n[le]=_n[fe]=_n[pe]=_n[de]=_n[Jt]=_n[Qt]=_n[Zt]=_n[te]=_n[ee]=_n[ne]=_n[re]=_n[he]=_n[ve]=_n[ge]=_n[me]=!0,_n[Vt]=_n[Xt]=_n[oe]=!1;var wn={\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ã\":\"A\",\"Ä\":\"A\",\"Å\":\"A\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ã\":\"a\",\"ä\":\"a\",\"å\":\"a\",\"Ç\":\"C\",\"ç\":\"c\",\"Ð\":\"D\",\"ð\":\"d\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ë\":\"E\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ë\":\"e\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ï\":\"I\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ï\":\"i\",\"Ñ\":\"N\",\"ñ\":\"n\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Õ\":\"O\",\"Ö\":\"O\",\"Ø\":\"O\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"õ\":\"o\",\"ö\":\"o\",\"ø\":\"o\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ü\":\"U\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ü\":\"u\",\"Ý\":\"Y\",\"ý\":\"y\",\"ÿ\":\"y\",\"Æ\":\"Ae\",\"æ\":\"ae\",\"Þ\":\"Th\",\"þ\":\"th\",\"ß\":\"ss\",\"Ā\":\"A\",\"Ă\":\"A\",\"Ą\":\"A\",\"ā\":\"a\",\"ă\":\"a\",\"ą\":\"a\",\"Ć\":\"C\",\"Ĉ\":\"C\",\"Ċ\":\"C\",\"Č\":\"C\",\"ć\":\"c\",\"ĉ\":\"c\",\"ċ\":\"c\",\"č\":\"c\",\"Ď\":\"D\",\"Đ\":\"D\",\"ď\":\"d\",\"đ\":\"d\",\"Ē\":\"E\",\"Ĕ\":\"E\",\"Ė\":\"E\",\"Ę\":\"E\",\"Ě\":\"E\",\"ē\":\"e\",\"ĕ\":\"e\",\"ė\":\"e\",\"ę\":\"e\",\"ě\":\"e\",\"Ĝ\":\"G\",\"Ğ\":\"G\",\"Ġ\":\"G\",\"Ģ\":\"G\",\"ĝ\":\"g\",\"ğ\":\"g\",\"ġ\":\"g\",\"ģ\":\"g\",\"Ĥ\":\"H\",\"Ħ\":\"H\",\"ĥ\":\"h\",\"ħ\":\"h\",\"Ĩ\":\"I\",\"Ī\":\"I\",\"Ĭ\":\"I\",\"Į\":\"I\",\"İ\":\"I\",\"ĩ\":\"i\",\"ī\":\"i\",\"ĭ\":\"i\",\"į\":\"i\",\"ı\":\"i\",\"Ĵ\":\"J\",\"ĵ\":\"j\",\"Ķ\":\"K\",\"ķ\":\"k\",\"ĸ\":\"k\",\"Ĺ\":\"L\",\"Ļ\":\"L\",\"Ľ\":\"L\",\"Ŀ\":\"L\",\"Ł\":\"L\",\"ĺ\":\"l\",\"ļ\":\"l\",\"ľ\":\"l\",\"ŀ\":\"l\",\"ł\":\"l\",\"Ń\":\"N\",\"Ņ\":\"N\",\"Ň\":\"N\",\"Ŋ\":\"N\",\"ń\":\"n\",\"ņ\":\"n\",\"ň\":\"n\",\"ŋ\":\"n\",\"Ō\":\"O\",\"Ŏ\":\"O\",\"Ő\":\"O\",\"ō\":\"o\",\"ŏ\":\"o\",\"ő\":\"o\",\"Ŕ\":\"R\",\"Ŗ\":\"R\",\"Ř\":\"R\",\"ŕ\":\"r\",\"ŗ\":\"r\",\"ř\":\"r\",\"Ś\":\"S\",\"Ŝ\":\"S\",\"Ş\":\"S\",\"Š\":\"S\",\"ś\":\"s\",\"ŝ\":\"s\",\"ş\":\"s\",\"š\":\"s\",\"Ţ\":\"T\",\"Ť\":\"T\",\"Ŧ\":\"T\",\"ţ\":\"t\",\"ť\":\"t\",\"ŧ\":\"t\",\"Ũ\":\"U\",\"Ū\":\"U\",\"Ŭ\":\"U\",\"Ů\":\"U\",\"Ű\":\"U\",\"Ų\":\"U\",\"ũ\":\"u\",\"ū\":\"u\",\"ŭ\":\"u\",\"ů\":\"u\",\"ű\":\"u\",\"ų\":\"u\",\"Ŵ\":\"W\",\"ŵ\":\"w\",\"Ŷ\":\"Y\",\"ŷ\":\"y\",\"Ÿ\":\"Y\",\"Ź\":\"Z\",\"Ż\":\"Z\",\"Ž\":\"Z\",\"ź\":\"z\",\"ż\":\"z\",\"ž\":\"z\",\"Ĳ\":\"IJ\",\"ĳ\":\"ij\",\"Œ\":\"Oe\",\"œ\":\"oe\",\"ŉ\":\"'n\",\"ſ\":\"s\"},xn={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},Cn={\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"},Tn={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},$n=parseFloat,kn=parseInt,An=\"object\"==typeof t&&t&&t.Object===Object&&t,En=\"object\"==typeof self&&self&&self.Object===Object&&self,Sn=An||En||Function(\"return this\")(),On=\"object\"==typeof e&&e&&!e.nodeType&&e,jn=On&&\"object\"==typeof r&&r&&!r.nodeType&&r,Nn=jn&&jn.exports===On,Dn=Nn&&An.process,In=function(){try{return Dn&&Dn.binding&&Dn.binding(\"util\")}catch(t){}}(),Ln=In&&In.isArrayBuffer,Rn=In&&In.isDate,Pn=In&&In.isMap,Fn=In&&In.isRegExp,qn=In&&In.isSet,Mn=In&&In.isTypedArray,Hn=E(\"length\"),Bn=S(wn),Un=S(xn),Wn=S(Cn),zn=function t(e){function n(t){if(eu(t)&&!dp(t)&&!(t instanceof _)){if(t instanceof i)return t;if(pl.call(t,\"__wrapped__\"))return Zo(t)}return new i(t)}function r(){}function i(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=it}function _(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Rt,this.__views__=[]}function S(){var t=new _(this.__wrapped__);return t.__actions__=Di(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Di(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Di(this.__views__),t}function G(){if(this.__filtered__){var t=new _(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function et(){var t=this.__wrapped__.value(),e=this.__dir__,n=dp(t),r=e<0,i=n?t.length:0,o=Co(0,i,this.__views__),a=o.start,s=o.end,u=s-a,c=r?s:a-1,l=this.__iteratees__,f=l.length,p=0,d=Bl(u,this.__takeCount__);if(!n||!r&&i==u&&d==u)return hi(t,this.__actions__);var h=[];t:for(;u--&&p<d;){c+=e;for(var v=-1,g=t[c];++v<f;){var m=l[v],y=m.iteratee,b=m.type,_=y(g);if(b==jt)g=_;else if(!_){if(b==Ot)continue t;break t}}h[p++]=g}return h}function nt(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Pe(){this.__data__=Zl?Zl(null):{},this.size=0}function Ke(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function Je(t){var e=this.__data__;if(Zl){var n=e[t];return n===ut?it:n}return pl.call(e,t)?e[t]:it}function Qe(t){var e=this.__data__;return Zl?e[t]!==it:pl.call(e,t)}function Ge(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=Zl&&e===it?ut:e,this}function Ze(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Ye(){this.__data__=[],this.size=0}function tn(t){var e=this.__data__,n=Vn(e,t);return!(n<0)&&(n==e.length-1?e.pop():kl.call(e,n,1),--this.size,!0)}function en(t){var e=this.__data__,n=Vn(e,t);return n<0?it:e[n][1]}function nn(t){return Vn(this.__data__,t)>-1}function rn(t,e){var n=this.__data__,r=Vn(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function on(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function an(){this.size=0,this.__data__={hash:new nt,map:new(Kl||Ze),string:new nt}}function sn(t){var e=bo(this,t).delete(t);return this.size-=e?1:0,e}function un(t){return bo(this,t).get(t)}function cn(t){return bo(this,t).has(t)}function ln(t,e){var n=bo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this}function dn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new on;++e<n;)this.add(t[e])}function hn(t){return this.__data__.set(t,ut),this}function vn(t){return this.__data__.has(t)}function gn(t){var e=this.__data__=new Ze(t);this.size=e.size}function wn(){this.__data__=new Ze,this.size=0}function xn(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}function Cn(t){return this.__data__.get(t)}function Tn(t){return this.__data__.has(t)}function An(t,e){var n=this.__data__;if(n instanceof Ze){var r=n.__data__;if(!Kl||r.length<ot-1)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new on(r)}return n.set(t,e),this.size=n.size,this}function En(t,e){var n=dp(t),r=!n&&pp(t),i=!n&&!r&&vp(t),o=!n&&!r&&!i&&_p(t),a=n||r||i||o,s=a?D(t.length,ol):[],u=s.length;for(var c in t)!e&&!pl.call(t,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||jo(c,u))||s.push(c);return s}function On(t){var e=t.length;return e?t[Jr(0,e-1)]:it}function jn(t,e){return Ko(Di(t),Zn(e,0,t.length))}function Dn(t){return Ko(Di(t))}function In(t,e,n){(n===it||Hs(t[e],n))&&(n!==it||e in t)||Qn(t,e,n)}function Hn(t,e,n){var r=t[e];pl.call(t,e)&&Hs(r,n)&&(n!==it||e in t)||Qn(t,e,n)}function Vn(t,e){for(var n=t.length;n--;)if(Hs(t[n][0],e))return n;return-1}function Xn(t,e,n,r){return ff(t,function(t,i,o){e(r,t,n(t),o)}),r}function Kn(t,e){return t&&Ii(e,Ru(e),t)}function Jn(t,e){return t&&Ii(e,Pu(e),t)}function Qn(t,e,n){\"__proto__\"==e&&Ol?Ol(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function Gn(t,e){for(var n=-1,r=e.length,i=Zc(r),o=null==t;++n<r;)i[n]=o?it:Du(t,e[n]);return i}function Zn(t,e,n){return t===t&&(n!==it&&(t=t<=n?t:n),e!==it&&(t=t>=e?t:e)),t}function Yn(t,e,n,r,i,o){var a,s=e&ft,u=e&pt,l=e&dt;if(n&&(a=i?n(t,r,i,o):n(t)),a!==it)return a;if(!tu(t))return t;var f=dp(t);if(f){if(a=ko(t),!s)return Di(t,a)}else{var p=Cf(t),d=p==Xt||p==Kt;if(vp(t))return wi(t,s);if(p==Zt||p==Mt||d&&!i){if(a=u||d?{}:Ao(t),!s)return u?Ri(t,Jn(a,t)):Li(t,Kn(a,t))}else{if(!_n[p])return i?t:{};a=Eo(t,p,Yn,s)}}o||(o=new gn);var h=o.get(t);if(h)return h;o.set(t,a);var v=l?u?vo:ho:u?Pu:Ru,g=f?it:v(t);return c(g||t,function(r,i){g&&(i=r,r=t[i]),Hn(a,i,Yn(r,e,n,i,t,o))}),a}function tr(t){var e=Ru(t);return function(n){return er(n,t,e)}}function er(t,e,n){var r=n.length;if(null==t)return!r;for(t=rl(t);r--;){var i=n[r],o=e[i],a=t[i];if(a===it&&!(i in t)||!o(a))return!1}return!0}function nr(t,e,n){if(\"function\"!=typeof t)throw new al(st);return kf(function(){t.apply(it,n)},e)}function rr(t,e,n,r){var i=-1,o=d,a=!0,s=t.length,u=[],c=e.length;if(!s)return u;n&&(e=v(e,L(n))),r?(o=h,a=!1):e.length>=ot&&(o=P,a=!1,e=new dn(e));t:for(;++i<s;){var l=t[i],f=null==n?l:n(l);if(l=r||0!==l?l:0,a&&f===f){for(var p=c;p--;)if(e[p]===f)continue t;u.push(l)}else o(e,f,r)||u.push(l)}return u}function ir(t,e){var n=!0;return ff(t,function(t,r,i){return n=!!e(t,r,i)}),n}function or(t,e,n){for(var r=-1,i=t.length;++r<i;){var o=t[r],a=e(o);if(null!=a&&(s===it?a===a&&!pu(a):n(a,s)))var s=a,u=o}return u}function ar(t,e,n,r){var i=t.length;for(n=yu(n),n<0&&(n=-n>i?0:i+n),r=r===it||r>i?i:yu(r),r<0&&(r+=i),r=n>r?0:bu(r);n<r;)t[n++]=e;return t}function sr(t,e){var n=[];return ff(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function ur(t,e,n,r,i){var o=-1,a=t.length;for(n||(n=Oo),i||(i=[]);++o<a;){var s=t[o];e>0&&n(s)?e>1?ur(s,e-1,n,r,i):g(i,s):r||(i[i.length]=s)}return i}function cr(t,e){return t&&df(t,e,Ru)}function lr(t,e){return t&&hf(t,e,Ru)}function fr(t,e){return p(e,function(e){return Gs(t[e])})}function pr(t,e){e=bi(e,t);for(var n=0,r=e.length;null!=t&&n<r;)t=t[Jo(e[n++])];return n&&n==r?t:it}function dr(t,e,n){var r=e(t);return dp(t)?r:g(r,n(t))}function hr(t){return null==t?t===it?ie:Gt:Sl&&Sl in rl(t)?xo(t):Bo(t)}function vr(t,e){return t>e}function gr(t,e){return null!=t&&pl.call(t,e)}function mr(t,e){return null!=t&&e in rl(t)}function yr(t,e,n){return t>=Bl(e,n)&&t<Hl(e,n)}function br(t,e,n){for(var r=n?h:d,i=t[0].length,o=t.length,a=o,s=Zc(o),u=1/0,c=[];a--;){var l=t[a];a&&e&&(l=v(l,L(e))),u=Bl(l.length,u),s[a]=!n&&(e||i>=120&&l.length>=120)?new dn(a&&l):it}l=t[0];var f=-1,p=s[0];t:for(;++f<i&&c.length<u;){var g=l[f],m=e?e(g):g;if(g=n||0!==g?g:0,!(p?P(p,m):r(c,m,n))){for(a=o;--a;){var y=s[a];if(!(y?P(y,m):r(t[a],m,n)))continue t}p&&p.push(m),c.push(g)}}return c}function _r(t,e,n,r){return cr(t,function(t,i,o){e(r,n(t),i,o)}),r}function wr(t,e,n){e=bi(e,t),t=Wo(t,e);var r=null==t?t:t[Jo(ma(e))];return null==r?it:s(r,t,n)}function xr(t){return eu(t)&&hr(t)==Mt}function Cr(t){return eu(t)&&hr(t)==se}function Tr(t){return eu(t)&&hr(t)==Wt}function $r(t,e,n,r,i){return t===e||(null==t||null==e||!eu(t)&&!eu(e)?t!==t&&e!==e:kr(t,e,n,r,$r,i))}function kr(t,e,n,r,i,o){var a=dp(t),s=dp(e),u=a?Ht:Cf(t),c=s?Ht:Cf(e);u=u==Mt?Zt:u,c=c==Mt?Zt:c;var l=u==Zt,f=c==Zt,p=u==c;if(p&&vp(t)){if(!vp(e))return!1;a=!0,l=!1}if(p&&!l)return o||(o=new gn),a||_p(t)?co(t,e,n,r,i,o):lo(t,e,u,n,r,i,o);if(!(n&ht)){var d=l&&pl.call(t,\"__wrapped__\"),h=f&&pl.call(e,\"__wrapped__\");if(d||h){var v=d?t.value():t,g=h?e.value():e;return o||(o=new gn),i(v,g,n,r,o)}}return!!p&&(o||(o=new gn),fo(t,e,n,r,i,o))}function Ar(t){return eu(t)&&Cf(t)==Jt}function Er(t,e,n,r){var i=n.length,o=i,a=!r;if(null==t)return!o;for(t=rl(t);i--;){var s=n[i];if(a&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++i<o;){s=n[i];var u=s[0],c=t[u],l=s[1];if(a&&s[2]){if(c===it&&!(u in t))return!1}else{var f=new gn;if(r)var p=r(c,l,u,t,e,f);if(!(p===it?$r(l,c,ht|vt,r,f):p))return!1}}return!0}function Sr(t){return!(!tu(t)||Ro(t))&&(Gs(t)?yl:Be).test(Qo(t))}function Or(t){return eu(t)&&hr(t)==te}function jr(t){return eu(t)&&Cf(t)==ee}function Nr(t){return eu(t)&&Ys(t.length)&&!!bn[hr(t)]}function Dr(t){return\"function\"==typeof t?t:null==t?kc:\"object\"==typeof t?dp(t)?qr(t[0],t[1]):Fr(t):Ic(t)}function Ir(t){if(!Po(t))return Ml(t);var e=[];for(var n in rl(t))pl.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function Lr(t){if(!tu(t))return Ho(t);var e=Po(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&pl.call(t,r))&&n.push(r);return n}function Rr(t,e){return t<e}function Pr(t,e){var n=-1,r=Bs(t)?Zc(t.length):[];return ff(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function Fr(t){var e=_o(t);return 1==e.length&&e[0][2]?qo(e[0][0],e[0][1]):function(n){return n===t||Er(n,t,e)}}function qr(t,e){return Do(t)&&Fo(e)?qo(Jo(t),e):function(n){var r=Du(n,t);return r===it&&r===e?Lu(n,t):$r(e,r,ht|vt)}}function Mr(t,e,n,r,i){t!==e&&df(e,function(o,a){if(tu(o))i||(i=new gn),Hr(t,e,a,n,Mr,r,i);else{var s=r?r(t[a],o,a+\"\",t,e,i):it;s===it&&(s=o),In(t,a,s)}},Pu)}function Hr(t,e,n,r,i,o,a){var s=t[n],u=e[n],c=a.get(u);if(c)return void In(t,n,c);var l=o?o(s,u,n+\"\",t,e,a):it,f=l===it;if(f){var p=dp(u),d=!p&&vp(u),h=!p&&!d&&_p(u);l=u,p||d||h?dp(s)?l=s:Us(s)?l=Di(s):d?(f=!1,l=wi(u,!0)):h?(f=!1,l=Ei(u,!0)):l=[]:cu(u)||pp(u)?(l=s,pp(s)?l=wu(s):(!tu(s)||r&&Gs(s))&&(l=Ao(u))):f=!1}f&&(a.set(u,l),i(l,u,r,o,a),a.delete(u)),In(t,n,l)}function Br(t,e){var n=t.length;if(n)return e+=e<0?n:0,jo(e,n)?t[e]:it}function Ur(t,e,n){var r=-1;return e=v(e.length?e:[kc],L(yo())),j(Pr(t,function(t,n,i){return{criteria:v(e,function(e){return e(t)}),index:++r,value:t}}),function(t,e){return Oi(t,e,n)})}function Wr(t,e){return zr(t,e,function(e,n){return Lu(t,n)})}function zr(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var a=e[r],s=pr(t,a);n(s,a)&&ei(o,bi(a,t),s)}return o}function Vr(t){return function(e){return pr(e,t)}}function Xr(t,e,n,r){var i=r?$:T,o=-1,a=e.length,s=t;for(t===e&&(e=Di(e)),n&&(s=v(t,L(n)));++o<a;)for(var u=0,c=e[o],l=n?n(c):c;(u=i(s,l,u,r))>-1;)s!==t&&kl.call(s,u,1),kl.call(t,u,1);return t}function Kr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;jo(i)?kl.call(t,i,1):fi(t,i)}}return t}function Jr(t,e){return t+Ll(zl()*(e-t+1))}function Qr(t,e,n,r){for(var i=-1,o=Hl(Il((e-t)/(n||1)),0),a=Zc(o);o--;)a[r?o:++i]=t,t+=n;return a}function Gr(t,e){var n=\"\";if(!t||e<1||e>Dt)return n;do{e%2&&(n+=t),(e=Ll(e/2))&&(t+=t)}while(e);return n}function Zr(t,e){return Af(Uo(t,e,kc),t+\"\")}function Yr(t){return On(Ju(t))}function ti(t,e){var n=Ju(t);return Ko(n,Zn(e,0,n.length))}function ei(t,e,n,r){if(!tu(t))return t;e=bi(e,t);for(var i=-1,o=e.length,a=o-1,s=t;null!=s&&++i<o;){var u=Jo(e[i]),c=n;if(i!=a){var l=s[u];c=r?r(l,u,s):it,c===it&&(c=tu(l)?l:jo(e[i+1])?[]:{})}Hn(s,u,c),s=s[u]}return t}function ni(t){return Ko(Ju(t))}function ri(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),n=n>i?i:n,n<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=Zc(i);++r<i;)o[r]=t[r+e];return o}function ii(t,e){var n;return ff(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function oi(t,e,n){var r=0,i=null==t?r:t.length;if(\"number\"==typeof e&&e===e&&i<=Ft){for(;r<i;){var o=r+i>>>1,a=t[o];null!==a&&!pu(a)&&(n?a<=e:a<e)?r=o+1:i=o}return i}return ai(t,e,kc,n)}function ai(t,e,n,r){e=n(e);for(var i=0,o=null==t?0:t.length,a=e!==e,s=null===e,u=pu(e),c=e===it;i<o;){var l=Ll((i+o)/2),f=n(t[l]),p=f!==it,d=null===f,h=f===f,v=pu(f);if(a)var g=r||h;else g=c?h&&(r||p):s?h&&p&&(r||!d):u?h&&p&&!d&&(r||!v):!d&&!v&&(r?f<=e:f<e);g?i=l+1:o=l}return Bl(o,Pt)}function si(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n],s=e?e(a):a;if(!n||!Hs(s,u)){var u=s;o[i++]=0===a?0:a}}return o}function ui(t){return\"number\"==typeof t?t:pu(t)?Lt:+t}function ci(t){if(\"string\"==typeof t)return t;if(dp(t))return v(t,ci)+\"\";if(pu(t))return cf?cf.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-Nt?\"-0\":e}function li(t,e,n){var r=-1,i=d,o=t.length,a=!0,s=[],u=s;if(n)a=!1,i=h;else if(o>=ot){var c=e?null:bf(t);if(c)return J(c);a=!1,i=P,u=new dn}else u=e?[]:s;t:for(;++r<o;){var l=t[r],f=e?e(l):l;if(l=n||0!==l?l:0,a&&f===f){for(var p=u.length;p--;)if(u[p]===f)continue t;e&&u.push(f),s.push(l)}else i(u,f,n)||(u!==s&&u.push(f),s.push(l))}return s}function fi(t,e){return e=bi(e,t),null==(t=Wo(t,e))||delete t[Jo(ma(e))]}function pi(t,e,n,r){return ei(t,e,n(pr(t,e)),r)}function di(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?ri(t,r?0:o,r?o+1:i):ri(t,r?o+1:0,r?i:o)}function hi(t,e){var n=t;return n instanceof _&&(n=n.value()),m(e,function(t,e){return e.func.apply(e.thisArg,g([t],e.args))},n)}function vi(t,e,n){var r=t.length;if(r<2)return r?li(t[0]):[];for(var i=-1,o=Zc(r);++i<r;)for(var a=t[i],s=-1;++s<r;)s!=i&&(o[i]=rr(o[i]||a,t[s],e,n));return li(ur(o,1),e,n)}function gi(t,e,n){for(var r=-1,i=t.length,o=e.length,a={};++r<i;){var s=r<o?e[r]:it;n(a,t[r],s)}return a}function mi(t){return Us(t)?t:[]}function yi(t){return\"function\"==typeof t?t:kc}function bi(t,e){return dp(t)?t:Do(t,e)?[t]:Ef(Cu(t))}function _i(t,e,n){var r=t.length;return n=n===it?r:n,!e&&n>=r?t:ri(t,e,n)}function wi(t,e){if(e)return t.slice();var n=t.length,r=xl?xl(n):new t.constructor(n);return t.copy(r),r}function xi(t){var e=new t.constructor(t.byteLength);return new wl(e).set(new wl(t)),e}function Ci(t,e){var n=e?xi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function Ti(t,e,n){return m(e?n(V(t),ft):V(t),o,new t.constructor)}function $i(t){var e=new t.constructor(t.source,qe.exec(t));return e.lastIndex=t.lastIndex,e}function ki(t,e,n){return m(e?n(J(t),ft):J(t),a,new t.constructor)}function Ai(t){return uf?rl(uf.call(t)):{}}function Ei(t,e){var n=e?xi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Si(t,e){if(t!==e){var n=t!==it,r=null===t,i=t===t,o=pu(t),a=e!==it,s=null===e,u=e===e,c=pu(e);if(!s&&!c&&!o&&t>e||o&&a&&u&&!s&&!c||r&&a&&u||!n&&u||!i)return 1;if(!r&&!o&&!c&&t<e||c&&n&&i&&!r&&!o||s&&n&&i||!a&&i||!u)return-1}return 0}function Oi(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,a=i.length,s=n.length;++r<a;){var u=Si(i[r],o[r]);if(u){if(r>=s)return u;return u*(\"desc\"==n[r]?-1:1)}}return t.index-e.index}function ji(t,e,n,r){for(var i=-1,o=t.length,a=n.length,s=-1,u=e.length,c=Hl(o-a,0),l=Zc(u+c),f=!r;++s<u;)l[s]=e[s];for(;++i<a;)(f||i<o)&&(l[n[i]]=t[i]);for(;c--;)l[s++]=t[i++];return l}function Ni(t,e,n,r){for(var i=-1,o=t.length,a=-1,s=n.length,u=-1,c=e.length,l=Hl(o-s,0),f=Zc(l+c),p=!r;++i<l;)f[i]=t[i];for(var d=i;++u<c;)f[d+u]=e[u];for(;++a<s;)(p||i<o)&&(f[d+n[a]]=t[i++]);return f}function Di(t,e){var n=-1,r=t.length;for(e||(e=Zc(r));++n<r;)e[n]=t[n];return e}function Ii(t,e,n,r){var i=!n;n||(n={});for(var o=-1,a=e.length;++o<a;){var s=e[o],u=r?r(n[s],t[s],s,n,t):it;u===it&&(u=t[s]),i?Qn(n,s,u):Hn(n,s,u)}return n}function Li(t,e){return Ii(t,wf(t),e)}function Ri(t,e){return Ii(t,xf(t),e)}function Pi(t,e){return function(n,r){var i=dp(n)?u:Xn,o=e?e():{};return i(n,t,yo(r,2),o)}}function Fi(t){return Zr(function(e,n){var r=-1,i=n.length,o=i>1?n[i-1]:it,a=i>2?n[2]:it;for(o=t.length>3&&\"function\"==typeof o?(i--,o):it,a&&No(n[0],n[1],a)&&(o=i<3?it:o,i=1),e=rl(e);++r<i;){var s=n[r];s&&t(e,s,r,o)}return e})}function qi(t,e){return function(n,r){if(null==n)return n;if(!Bs(n))return t(n,r);for(var i=n.length,o=e?i:-1,a=rl(n);(e?o--:++o<i)&&!1!==r(a[o],o,a););return n}}function Mi(t){return function(e,n,r){for(var i=-1,o=rl(e),a=r(e),s=a.length;s--;){var u=a[t?s:++i];if(!1===n(o[u],u,o))break}return e}}function Hi(t,e,n){function r(){return(this&&this!==Sn&&this instanceof r?o:t).apply(i?n:this,arguments)}var i=e&gt,o=Wi(t);return r}function Bi(t){return function(e){e=Cu(e);var n=U(e)?tt(e):it,r=n?n[0]:e.charAt(0),i=n?_i(n,1).join(\"\"):e.slice(1);return r[t]()+i}}function Ui(t){return function(e){return m(wc(ec(e).replace(fn,\"\")),t,\"\")}}function Wi(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=lf(t.prototype),r=t.apply(n,e);return tu(r)?r:n}}function zi(t,e,n){function r(){for(var o=arguments.length,a=Zc(o),u=o,c=mo(r);u--;)a[u]=arguments[u];var l=o<3&&a[0]!==c&&a[o-1]!==c?[]:K(a,c);return(o-=l.length)<n?no(t,e,Ki,r.placeholder,it,a,l,it,it,n-o):s(this&&this!==Sn&&this instanceof r?i:t,this,a)}var i=Wi(t);return r}function Vi(t){return function(e,n,r){var i=rl(e);if(!Bs(e)){var o=yo(n,3);e=Ru(e),n=function(t){return o(i[t],t,i)}}var a=t(e,n,r);return a>-1?i[o?e[a]:a]:it}}function Xi(t){return po(function(e){var n=e.length,r=n,o=i.prototype.thru;for(t&&e.reverse();r--;){var a=e[r];if(\"function\"!=typeof a)throw new al(st);if(o&&!s&&\"wrapper\"==go(a))var s=new i([],!0)}for(r=s?r:n;++r<n;){a=e[r];var u=go(a),c=\"wrapper\"==u?_f(a):it;s=c&&Lo(c[0])&&c[1]==(Ct|bt|wt|Tt)&&!c[4].length&&1==c[9]?s[go(c[0])].apply(s,c[3]):1==a.length&&Lo(a)?s[u]():s.thru(a)}return function(){var t=arguments,r=t[0];if(s&&1==t.length&&dp(r))return s.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function Ki(t,e,n,r,i,o,a,s,u,c){function l(){for(var m=arguments.length,y=Zc(m),b=m;b--;)y[b]=arguments[b];if(h)var _=mo(l),w=M(y,_);if(r&&(y=ji(y,r,i,h)),o&&(y=Ni(y,o,a,h)),m-=w,h&&m<c){var x=K(y,_);return no(t,e,Ki,l.placeholder,n,y,x,s,u,c-m)}var C=p?n:this,T=d?C[t]:t;return m=y.length,s?y=zo(y,s):v&&m>1&&y.reverse(),f&&u<m&&(y.length=u),this&&this!==Sn&&this instanceof l&&(T=g||Wi(T)),T.apply(C,y)}var f=e&Ct,p=e&gt,d=e&mt,h=e&(bt|_t),v=e&$t,g=d?it:Wi(t);return l}function Ji(t,e){return function(n,r){return _r(n,t,e(r),{})}}function Qi(t,e){return function(n,r){var i;if(n===it&&r===it)return e;if(n!==it&&(i=n),r!==it){if(i===it)return r;\"string\"==typeof n||\"string\"==typeof r?(n=ci(n),r=ci(r)):(n=ui(n),r=ui(r)),i=t(n,r)}return i}}function Gi(t){return po(function(e){return e=v(e,L(yo())),Zr(function(n){var r=this;return t(e,function(t){return s(t,r,n)})})})}function Zi(t,e){e=e===it?\" \":ci(e);var n=e.length;if(n<2)return n?Gr(e,t):e;var r=Gr(e,Il(t/Y(e)));return U(e)?_i(tt(r),0,t).join(\"\"):r.slice(0,t)}function Yi(t,e,n,r){function i(){for(var e=-1,u=arguments.length,c=-1,l=r.length,f=Zc(l+u),p=this&&this!==Sn&&this instanceof i?a:t;++c<l;)f[c]=r[c];for(;u--;)f[c++]=arguments[++e];return s(p,o?n:this,f)}var o=e&gt,a=Wi(t);return i}function to(t){return function(e,n,r){return r&&\"number\"!=typeof r&&No(e,n,r)&&(n=r=it),e=mu(e),n===it?(n=e,e=0):n=mu(n),r=r===it?e<n?1:-1:mu(r),Qr(e,n,r,t)}}function eo(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=_u(e),n=_u(n)),t(e,n)}}function no(t,e,n,r,i,o,a,s,u,c){var l=e&bt,f=l?a:it,p=l?it:a,d=l?o:it,h=l?it:o;e|=l?wt:xt,(e&=~(l?xt:wt))&yt||(e&=~(gt|mt));var v=[t,e,i,d,f,h,p,s,u,c],g=n.apply(it,v);return Lo(t)&&$f(g,v),g.placeholder=r,Vo(g,t,e)}function ro(t){var e=nl[t];return function(t,n){if(t=_u(t),n=null==n?0:Bl(yu(n),292)){var r=(Cu(t)+\"e\").split(\"e\");return r=(Cu(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"),+(r[0]+\"e\"+(+r[1]-n))}return e(t)}}function io(t){return function(e){var n=Cf(e);return n==Jt?V(e):n==ee?Q(e):I(e,t(e))}}function oo(t,e,n,r,i,o,a,s){var u=e&mt;if(!u&&\"function\"!=typeof t)throw new al(st);var c=r?r.length:0;if(c||(e&=~(wt|xt),r=i=it),a=a===it?a:Hl(yu(a),0),s=s===it?s:yu(s),c-=i?i.length:0,e&xt){var l=r,f=i;r=i=it}var p=u?it:_f(t),d=[t,e,n,r,i,l,f,o,a,s];if(p&&Mo(d,p),t=d[0],e=d[1],n=d[2],r=d[3],i=d[4],s=d[9]=d[9]===it?u?0:t.length:Hl(d[9]-c,0),!s&&e&(bt|_t)&&(e&=~(bt|_t)),e&&e!=gt)h=e==bt||e==_t?zi(t,e,s):e!=wt&&e!=(gt|wt)||i.length?Ki.apply(it,d):Yi(t,e,n,r);else var h=Hi(t,e,n);return Vo((p?vf:$f)(h,d),t,e)}function ao(t,e,n,r){return t===it||Hs(t,cl[n])&&!pl.call(r,n)?e:t}function so(t,e,n,r,i,o){return tu(t)&&tu(e)&&(o.set(e,t),Mr(t,e,it,so,o),o.delete(e)),t}function uo(t){return cu(t)?it:t}function co(t,e,n,r,i,o){var a=n&ht,s=t.length,u=e.length;if(s!=u&&!(a&&u>s))return!1;var c=o.get(t);if(c&&o.get(e))return c==e;var l=-1,f=!0,p=n&vt?new dn:it;for(o.set(t,e),o.set(e,t);++l<s;){var d=t[l],h=e[l];if(r)var v=a?r(h,d,l,e,t,o):r(d,h,l,t,e,o);if(v!==it){if(v)continue;f=!1;break}if(p){if(!b(e,function(t,e){if(!P(p,e)&&(d===t||i(d,t,n,r,o)))return p.push(e)})){f=!1;break}}else if(d!==h&&!i(d,h,n,r,o)){f=!1;break}}return o.delete(t),o.delete(e),f}function lo(t,e,n,r,i,o,a){switch(n){case ue:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case se:return!(t.byteLength!=e.byteLength||!o(new wl(t),new wl(e)));case Ut:case Wt:case Qt:return Hs(+t,+e);case Vt:return t.name==e.name&&t.message==e.message;case te:case ne:return t==e+\"\";case Jt:var s=V;case ee:var u=r&ht;if(s||(s=J),t.size!=e.size&&!u)return!1;var c=a.get(t);if(c)return c==e;r|=vt,a.set(t,e);var l=co(s(t),s(e),r,i,o,a);return a.delete(t),l;case re:if(uf)return uf.call(t)==uf.call(e)}return!1}function fo(t,e,n,r,i,o){var a=n&ht,s=ho(t),u=s.length;if(u!=ho(e).length&&!a)return!1;for(var c=u;c--;){var l=s[c];if(!(a?l in e:pl.call(e,l)))return!1}var f=o.get(t);if(f&&o.get(e))return f==e;var p=!0;o.set(t,e),o.set(e,t);for(var d=a;++c<u;){l=s[c];var h=t[l],v=e[l];if(r)var g=a?r(v,h,l,e,t,o):r(h,v,l,t,e,o);if(!(g===it?h===v||i(h,v,n,r,o):g)){p=!1;break}d||(d=\"constructor\"==l)}if(p&&!d){var m=t.constructor,y=e.constructor;m!=y&&\"constructor\"in t&&\"constructor\"in e&&!(\"function\"==typeof m&&m instanceof m&&\"function\"==typeof y&&y instanceof y)&&(p=!1)}return o.delete(t),o.delete(e),p}function po(t){return Af(Uo(t,it,ca),t+\"\")}function ho(t){return dr(t,Ru,wf)}function vo(t){return dr(t,Pu,xf)}function go(t){for(var e=t.name+\"\",n=tf[e],r=pl.call(tf,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function mo(t){return(pl.call(n,\"placeholder\")?n:t).placeholder}function yo(){var t=n.iteratee||Ac;return t=t===Ac?Dr:t,arguments.length?t(arguments[0],arguments[1]):t}function bo(t,e){var n=t.__data__;return Io(e)?n[\"string\"==typeof e?\"string\":\"hash\"]:n.map}function _o(t){for(var e=Ru(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,Fo(i)]}return e}function wo(t,e){var n=B(t,e);return Sr(n)?n:it}function xo(t){var e=pl.call(t,Sl),n=t[Sl];try{t[Sl]=it;var r=!0}catch(t){}var i=vl.call(t);return r&&(e?t[Sl]=n:delete t[Sl]),i}function Co(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],a=o.size;switch(o.type){case\"drop\":t+=a;break;case\"dropRight\":e-=a;break;case\"take\":e=Bl(e,t+a);break;case\"takeRight\":t=Hl(t,e-a)}}return{start:t,end:e}}function To(t){var e=t.match(Le);return e?e[1].split(Re):[]}function $o(t,e,n){e=bi(e,t);for(var r=-1,i=e.length,o=!1;++r<i;){var a=Jo(e[r]);if(!(o=null!=t&&n(t,a)))break;t=t[a]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Ys(i)&&jo(a,i)&&(dp(t)||pp(t))}function ko(t){var e=t.length,n=t.constructor(e);return e&&\"string\"==typeof t[0]&&pl.call(t,\"index\")&&(n.index=t.index,n.input=t.input),n}function Ao(t){return\"function\"!=typeof t.constructor||Po(t)?{}:lf(Cl(t))}function Eo(t,e,n,r){var i=t.constructor;switch(e){case se:return xi(t);case Ut:case Wt:return new i(+t);case ue:return Ci(t,r);case ce:case le:case fe:case pe:case de:case he:case ve:case ge:case me:return Ei(t,r);case Jt:return Ti(t,r,n);case Qt:case ne:return new i(t);case te:return $i(t);case ee:return ki(t,r,n);case re:return Ai(t)}}function So(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(Ie,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}function Oo(t){return dp(t)||pp(t)||!!(Al&&t&&t[Al])}function jo(t,e){return!!(e=null==e?Dt:e)&&(\"number\"==typeof t||We.test(t))&&t>-1&&t%1==0&&t<e}function No(t,e,n){if(!tu(n))return!1;var r=typeof e;return!!(\"number\"==r?Bs(n)&&jo(e,n.length):\"string\"==r&&e in n)&&Hs(n[e],t)}function Do(t,e){if(dp(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!pu(t))||(Ae.test(t)||!ke.test(t)||null!=e&&t in rl(e))}function Io(t){var e=typeof t;return\"string\"==e||\"number\"==e||\"symbol\"==e||\"boolean\"==e?\"__proto__\"!==t:null===t}function Lo(t){var e=go(t),r=n[e];if(\"function\"!=typeof r||!(e in _.prototype))return!1;if(t===r)return!0;var i=_f(r);return!!i&&t===i[0]}function Ro(t){return!!hl&&hl in t}function Po(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||cl)}function Fo(t){return t===t&&!tu(t)}function qo(t,e){return function(n){return null!=n&&(n[t]===e&&(e!==it||t in rl(n)))}}function Mo(t,e){var n=t[1],r=e[1],i=n|r,o=i<(gt|mt|Ct),a=r==Ct&&n==bt||r==Ct&&n==Tt&&t[7].length<=e[8]||r==(Ct|Tt)&&e[7].length<=e[8]&&n==bt;if(!o&&!a)return t;r&gt&&(t[2]=e[2],i|=n&gt?0:yt);var s=e[3];if(s){var u=t[3];t[3]=u?ji(u,s,e[4]):s,t[4]=u?K(t[3],lt):e[4]}return s=e[5],s&&(u=t[5],t[5]=u?Ni(u,s,e[6]):s,t[6]=u?K(t[5],lt):e[6]),s=e[7],s&&(t[7]=s),r&Ct&&(t[8]=null==t[8]?e[8]:Bl(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i,t}function Ho(t){var e=[];if(null!=t)for(var n in rl(t))e.push(n);return e}function Bo(t){return vl.call(t)}function Uo(t,e,n){return e=Hl(e===it?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=Hl(r.length-e,0),a=Zc(o);++i<o;)a[i]=r[e+i];i=-1;for(var u=Zc(e+1);++i<e;)u[i]=r[i];return u[e]=n(a),s(t,this,u)}}function Wo(t,e){return e.length<2?t:pr(t,ri(e,0,-1))}function zo(t,e){for(var n=t.length,r=Bl(e.length,n),i=Di(t);r--;){var o=e[r];t[r]=jo(o,n)?i[o]:it}return t}function Vo(t,e,n){var r=e+\"\";return Af(t,So(r,Go(To(r),n)))}function Xo(t){var e=0,n=0;return function(){var r=Ul(),i=St-(r-n);if(n=r,i>0){if(++e>=Et)return arguments[0]}else e=0;return t.apply(it,arguments)}}function Ko(t,e){var n=-1,r=t.length,i=r-1;for(e=e===it?r:e;++n<e;){var o=Jr(n,i),a=t[o];t[o]=t[n],t[n]=a}return t.length=e,t}function Jo(t){if(\"string\"==typeof t||pu(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-Nt?\"-0\":e}function Qo(t){if(null!=t){try{return fl.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Go(t,e){return c(qt,function(n){var r=\"_.\"+n[0];e&n[1]&&!d(t,r)&&t.push(r)}),t.sort()}function Zo(t){if(t instanceof _)return t.clone();var e=new i(t.__wrapped__,t.__chain__);return e.__actions__=Di(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}function Yo(t,e,n){e=(n?No(t,e,n):e===it)?1:Hl(yu(e),0);var r=null==t?0:t.length;if(!r||e<1)return[];for(var i=0,o=0,a=Zc(Il(r/e));i<r;)a[o++]=ri(t,i,i+=e);return a}function ta(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i}function ea(){var t=arguments.length;if(!t)return[];for(var e=Zc(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return g(dp(n)?Di(n):[n],ur(e,1))}function na(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===it?1:yu(e),ri(t,e<0?0:e,r)):[]}function ra(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===it?1:yu(e),e=r-e,ri(t,0,e<0?0:e)):[]}function ia(t,e){return t&&t.length?di(t,yo(e,3),!0,!0):[]}function oa(t,e){return t&&t.length?di(t,yo(e,3),!0):[]}function aa(t,e,n,r){var i=null==t?0:t.length;return i?(n&&\"number\"!=typeof n&&No(t,e,n)&&(n=0,r=i),ar(t,e,n,r)):[]}function sa(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:yu(n);return i<0&&(i=Hl(r+i,0)),C(t,yo(e,3),i)}function ua(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r-1;return n!==it&&(i=yu(n),i=n<0?Hl(r+i,0):Bl(i,r-1)),C(t,yo(e,3),i,!0)}function ca(t){return(null==t?0:t.length)?ur(t,1):[]}function la(t){return(null==t?0:t.length)?ur(t,Nt):[]}function fa(t,e){return(null==t?0:t.length)?(e=e===it?1:yu(e),ur(t,e)):[]}function pa(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];r[i[0]]=i[1]}return r}function da(t){return t&&t.length?t[0]:it}function ha(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:yu(n);return i<0&&(i=Hl(r+i,0)),T(t,e,i)}function va(t){return(null==t?0:t.length)?ri(t,0,-1):[]}function ga(t,e){return null==t?\"\":ql.call(t,e)}function ma(t){var e=null==t?0:t.length;return e?t[e-1]:it}function ya(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r;return n!==it&&(i=yu(n),i=i<0?Hl(r+i,0):Bl(i,r-1)),e===e?Z(t,e,i):C(t,k,i,!0)}function ba(t,e){return t&&t.length?Br(t,yu(e)):it}function _a(t,e){return t&&t.length&&e&&e.length?Xr(t,e):t}function wa(t,e,n){return t&&t.length&&e&&e.length?Xr(t,e,yo(n,2)):t}function xa(t,e,n){return t&&t.length&&e&&e.length?Xr(t,e,it,n):t}function Ca(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=yo(e,3);++r<o;){var a=t[r];e(a,r,t)&&(n.push(a),i.push(r))}return Kr(t,i),n}function Ta(t){return null==t?t:Vl.call(t)}function $a(t,e,n){var r=null==t?0:t.length;return r?(n&&\"number\"!=typeof n&&No(t,e,n)?(e=0,n=r):(e=null==e?0:yu(e),n=n===it?r:yu(n)),ri(t,e,n)):[]}function ka(t,e){return oi(t,e)}function Aa(t,e,n){return ai(t,e,yo(n,2))}function Ea(t,e){var n=null==t?0:t.length;if(n){var r=oi(t,e);if(r<n&&Hs(t[r],e))return r}return-1}function Sa(t,e){return oi(t,e,!0)}function Oa(t,e,n){return ai(t,e,yo(n,2),!0)}function ja(t,e){if(null==t?0:t.length){var n=oi(t,e,!0)-1;if(Hs(t[n],e))return n}return-1}function Na(t){return t&&t.length?si(t):[]}function Da(t,e){return t&&t.length?si(t,yo(e,2)):[]}function Ia(t){var e=null==t?0:t.length;return e?ri(t,1,e):[]}function La(t,e,n){return t&&t.length?(e=n||e===it?1:yu(e),ri(t,0,e<0?0:e)):[]}function Ra(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===it?1:yu(e),e=r-e,ri(t,e<0?0:e,r)):[]}function Pa(t,e){return t&&t.length?di(t,yo(e,3),!1,!0):[]}function Fa(t,e){return t&&t.length?di(t,yo(e,3)):[]}function qa(t){return t&&t.length?li(t):[]}function Ma(t,e){return t&&t.length?li(t,yo(e,2)):[]}function Ha(t,e){return e=\"function\"==typeof e?e:it,t&&t.length?li(t,it,e):[]}function Ba(t){if(!t||!t.length)return[];var e=0;return t=p(t,function(t){if(Us(t))return e=Hl(t.length,e),!0}),D(e,function(e){return v(t,E(e))})}function Ua(t,e){if(!t||!t.length)return[];var n=Ba(t);return null==e?n:v(n,function(t){return s(e,it,t)})}function Wa(t,e){return gi(t||[],e||[],Hn)}function za(t,e){return gi(t||[],e||[],ei)}function Va(t){var e=n(t);return e.__chain__=!0,e}function Xa(t,e){return e(t),t}function Ka(t,e){return e(t)}function Ja(){return Va(this)}function Qa(){return new i(this.value(),this.__chain__)}function Ga(){this.__values__===it&&(this.__values__=gu(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?it:this.__values__[this.__index__++]}}function Za(){return this}function Ya(t){for(var e,n=this;n instanceof r;){var i=Zo(n);i.__index__=0,i.__values__=it,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e}function ts(){var t=this.__wrapped__;if(t instanceof _){var e=t;return this.__actions__.length&&(e=new _(this)),e=e.reverse(),e.__actions__.push({func:Ka,args:[Ta],thisArg:it}),new i(e,this.__chain__)}return this.thru(Ta)}function es(){return hi(this.__wrapped__,this.__actions__)}function ns(t,e,n){var r=dp(t)?f:ir;return n&&No(t,e,n)&&(e=it),r(t,yo(e,3))}function rs(t,e){return(dp(t)?p:sr)(t,yo(e,3))}function is(t,e){return ur(ls(t,e),1)}function os(t,e){return ur(ls(t,e),Nt)}function as(t,e,n){return n=n===it?1:yu(n),ur(ls(t,e),n)}function ss(t,e){return(dp(t)?c:ff)(t,yo(e,3))}function us(t,e){return(dp(t)?l:pf)(t,yo(e,3))}function cs(t,e,n,r){t=Bs(t)?t:Ju(t),n=n&&!r?yu(n):0;var i=t.length;return n<0&&(n=Hl(i+n,0)),fu(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&T(t,e,n)>-1}function ls(t,e){return(dp(t)?v:Pr)(t,yo(e,3))}function fs(t,e,n,r){return null==t?[]:(dp(e)||(e=null==e?[]:[e]),n=r?it:n,dp(n)||(n=null==n?[]:[n]),Ur(t,e,n))}function ps(t,e,n){var r=dp(t)?m:O,i=arguments.length<3;return r(t,yo(e,4),n,i,ff)}function ds(t,e,n){var r=dp(t)?y:O,i=arguments.length<3;return r(t,yo(e,4),n,i,pf)}function hs(t,e){return(dp(t)?p:sr)(t,Es(yo(e,3)))}function vs(t){return(dp(t)?On:Yr)(t)}function gs(t,e,n){return e=(n?No(t,e,n):e===it)?1:yu(e),(dp(t)?jn:ti)(t,e)}function ms(t){return(dp(t)?Dn:ni)(t)}function ys(t){if(null==t)return 0;if(Bs(t))return fu(t)?Y(t):t.length;var e=Cf(t);return e==Jt||e==ee?t.size:Ir(t).length}function bs(t,e,n){var r=dp(t)?b:ii;return n&&No(t,e,n)&&(e=it),r(t,yo(e,3))}function _s(t,e){if(\"function\"!=typeof e)throw new al(st);return t=yu(t),function(){if(--t<1)return e.apply(this,arguments)}}function ws(t,e,n){return e=n?it:e,e=t&&null==e?t.length:e,oo(t,Ct,it,it,it,it,e)}function xs(t,e){var n;if(\"function\"!=typeof e)throw new al(st);return t=yu(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=it),n}}function Cs(t,e,n){e=n?it:e;var r=oo(t,bt,it,it,it,it,it,e);return r.placeholder=Cs.placeholder,r}function Ts(t,e,n){e=n?it:e;var r=oo(t,_t,it,it,it,it,it,e);return r.placeholder=Ts.placeholder,r}function $s(t,e,n){function r(e){var n=p,r=d;return p=d=it,y=e,v=t.apply(r,n)}function i(t){return y=t,g=kf(s,e),b?r(t):v}function o(t){var n=t-m,r=t-y,i=e-n;return _?Bl(i,h-r):i}function a(t){var n=t-m,r=t-y;return m===it||n>=e||n<0||_&&r>=h}function s(){var t=ep();if(a(t))return u(t);g=kf(s,o(t))}function u(t){return g=it,w&&p?r(t):(p=d=it,v)}function c(){g!==it&&yf(g),y=0,p=m=d=g=it}function l(){return g===it?v:u(ep())}function f(){var t=ep(),n=a(t);if(p=arguments,d=this,m=t,n){if(g===it)return i(m);if(_)return g=kf(s,e),r(m)}return g===it&&(g=kf(s,e)),v}var p,d,h,v,g,m,y=0,b=!1,_=!1,w=!0;if(\"function\"!=typeof t)throw new al(st);return e=_u(e)||0,tu(n)&&(b=!!n.leading,_=\"maxWait\"in n,h=_?Hl(_u(n.maxWait)||0,e):h,w=\"trailing\"in n?!!n.trailing:w),f.cancel=c,f.flush=l,f}function ks(t){return oo(t,$t)}function As(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new al(st);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(As.Cache||on),n}function Es(t){if(\"function\"!=typeof t)throw new al(st);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}function Ss(t){return xs(2,t)}function Os(t,e){if(\"function\"!=typeof t)throw new al(st);return e=e===it?e:yu(e),Zr(t,e)}function js(t,e){if(\"function\"!=typeof t)throw new al(st);return e=null==e?0:Hl(yu(e),0),Zr(function(n){var r=n[e],i=_i(n,0,e);return r&&g(i,r),s(t,this,i)})}function Ns(t,e,n){var r=!0,i=!0;if(\"function\"!=typeof t)throw new al(st);return tu(n)&&(r=\"leading\"in n?!!n.leading:r,i=\"trailing\"in n?!!n.trailing:i),$s(t,e,{leading:r,maxWait:e,trailing:i})}function Ds(t){return ws(t,1)}function Is(t,e){return sp(yi(e),t)}function Ls(){if(!arguments.length)return[];var t=arguments[0];return dp(t)?t:[t]}function Rs(t){return Yn(t,dt)}function Ps(t,e){return e=\"function\"==typeof e?e:it,Yn(t,dt,e)}function Fs(t){return Yn(t,ft|dt)}function qs(t,e){return e=\"function\"==typeof e?e:it,Yn(t,ft|dt,e)}function Ms(t,e){return null==e||er(t,e,Ru(e))}function Hs(t,e){return t===e||t!==t&&e!==e}function Bs(t){return null!=t&&Ys(t.length)&&!Gs(t)}function Us(t){return eu(t)&&Bs(t)}function Ws(t){return!0===t||!1===t||eu(t)&&hr(t)==Ut}function zs(t){return eu(t)&&1===t.nodeType&&!cu(t)}function Vs(t){if(null==t)return!0;if(Bs(t)&&(dp(t)||\"string\"==typeof t||\"function\"==typeof t.splice||vp(t)||_p(t)||pp(t)))return!t.length;var e=Cf(t);if(e==Jt||e==ee)return!t.size;if(Po(t))return!Ir(t).length;for(var n in t)if(pl.call(t,n))return!1;return!0}function Xs(t,e){return $r(t,e)}function Ks(t,e,n){n=\"function\"==typeof n?n:it;var r=n?n(t,e):it;return r===it?$r(t,e,it,n):!!r}function Js(t){if(!eu(t))return!1;var e=hr(t);return e==Vt||e==zt||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!cu(t)}function Qs(t){return\"number\"==typeof t&&Fl(t)}function Gs(t){if(!tu(t))return!1;var e=hr(t);return e==Xt||e==Kt||e==Bt||e==Yt}function Zs(t){return\"number\"==typeof t&&t==yu(t)}function Ys(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=Dt}function tu(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function eu(t){return null!=t&&\"object\"==typeof t}function nu(t,e){return t===e||Er(t,e,_o(e))}function ru(t,e,n){return n=\"function\"==typeof n?n:it,Er(t,e,_o(e),n)}function iu(t){return uu(t)&&t!=+t}function ou(t){if(Tf(t))throw new tl(at);return Sr(t)}function au(t){return null===t}function su(t){return null==t}function uu(t){return\"number\"==typeof t||eu(t)&&hr(t)==Qt}function cu(t){if(!eu(t)||hr(t)!=Zt)return!1;var e=Cl(t);if(null===e)return!0;var n=pl.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&fl.call(n)==gl}function lu(t){return Zs(t)&&t>=-Dt&&t<=Dt}function fu(t){return\"string\"==typeof t||!dp(t)&&eu(t)&&hr(t)==ne}function pu(t){return\"symbol\"==typeof t||eu(t)&&hr(t)==re}function du(t){return t===it}function hu(t){return eu(t)&&Cf(t)==oe}function vu(t){return eu(t)&&hr(t)==ae}function gu(t){if(!t)return[];if(Bs(t))return fu(t)?tt(t):Di(t);if(El&&t[El])return z(t[El]());var e=Cf(t);return(e==Jt?V:e==ee?J:Ju)(t)}function mu(t){if(!t)return 0===t?t:0;if((t=_u(t))===Nt||t===-Nt){return(t<0?-1:1)*It}return t===t?t:0}function yu(t){var e=mu(t),n=e%1;return e===e?n?e-n:e:0}function bu(t){return t?Zn(yu(t),0,Rt):0}function _u(t){if(\"number\"==typeof t)return t;if(pu(t))return Lt;if(tu(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=tu(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=t.replace(je,\"\");var n=He.test(t);return n||Ue.test(t)?kn(t.slice(2),n?2:8):Me.test(t)?Lt:+t}function wu(t){return Ii(t,Pu(t))}function xu(t){return t?Zn(yu(t),-Dt,Dt):0===t?t:0}function Cu(t){return null==t?\"\":ci(t)}function Tu(t,e){var n=lf(t);return null==e?n:Kn(n,e)}function $u(t,e){return x(t,yo(e,3),cr)}function ku(t,e){return x(t,yo(e,3),lr)}function Au(t,e){return null==t?t:df(t,yo(e,3),Pu)}function Eu(t,e){return null==t?t:hf(t,yo(e,3),Pu)}function Su(t,e){return t&&cr(t,yo(e,3))}function Ou(t,e){return t&&lr(t,yo(e,3))}function ju(t){return null==t?[]:fr(t,Ru(t))}function Nu(t){return null==t?[]:fr(t,Pu(t))}function Du(t,e,n){var r=null==t?it:pr(t,e);return r===it?n:r}function Iu(t,e){return null!=t&&$o(t,e,gr)}function Lu(t,e){return null!=t&&$o(t,e,mr)}function Ru(t){return Bs(t)?En(t):Ir(t)}function Pu(t){return Bs(t)?En(t,!0):Lr(t)}function Fu(t,e){var n={};return e=yo(e,3),cr(t,function(t,r,i){Qn(n,e(t,r,i),t)}),n}function qu(t,e){var n={};return e=yo(e,3),cr(t,function(t,r,i){Qn(n,r,e(t,r,i))}),n}function Mu(t,e){return Hu(t,Es(yo(e)))}function Hu(t,e){if(null==t)return{};var n=v(vo(t),function(t){return[t]});return e=yo(e),zr(t,n,function(t,n){return e(t,n[0])})}function Bu(t,e,n){e=bi(e,t);var r=-1,i=e.length;for(i||(i=1,t=it);++r<i;){var o=null==t?it:t[Jo(e[r])];o===it&&(r=i,o=n),t=Gs(o)?o.call(t):o}return t}function Uu(t,e,n){return null==t?t:ei(t,e,n)}function Wu(t,e,n,r){return r=\"function\"==typeof r?r:it,null==t?t:ei(t,e,n,r)}function zu(t,e,n){var r=dp(t),i=r||vp(t)||_p(t);if(e=yo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:tu(t)&&Gs(o)?lf(Cl(t)):{}}return(i?c:cr)(t,function(t,r,i){return e(n,t,r,i)}),n}function Vu(t,e){return null==t||fi(t,e)}function Xu(t,e,n){return null==t?t:pi(t,e,yi(n))}function Ku(t,e,n,r){return r=\"function\"==typeof r?r:it,null==t?t:pi(t,e,yi(n),r)}function Ju(t){return null==t?[]:R(t,Ru(t))}function Qu(t){return null==t?[]:R(t,Pu(t))}function Gu(t,e,n){return n===it&&(n=e,e=it),n!==it&&(n=_u(n),n=n===n?n:0),e!==it&&(e=_u(e),e=e===e?e:0),Zn(_u(t),e,n)}function Zu(t,e,n){return e=mu(e),n===it?(n=e,e=0):n=mu(n),t=_u(t),yr(t,e,n)}function Yu(t,e,n){if(n&&\"boolean\"!=typeof n&&No(t,e,n)&&(e=n=it),n===it&&(\"boolean\"==typeof e?(n=e,e=it):\"boolean\"==typeof t&&(n=t,t=it)),t===it&&e===it?(t=0,e=1):(t=mu(t),e===it?(e=t,t=0):e=mu(e)),t>e){var r=t;t=e,e=r}if(n||t%1||e%1){var i=zl();return Bl(t+i*(e-t+$n(\"1e-\"+((i+\"\").length-1))),e)}return Jr(t,e)}function tc(t){return Vp(Cu(t).toLowerCase())}function ec(t){return(t=Cu(t))&&t.replace(ze,Bn).replace(pn,\"\")}function nc(t,e,n){t=Cu(t),e=ci(e);var r=t.length;n=n===it?r:Zn(yu(n),0,r);var i=n;return(n-=e.length)>=0&&t.slice(n,i)==e}function rc(t){return t=Cu(t),t&&Te.test(t)?t.replace(xe,Un):t}function ic(t){return t=Cu(t),t&&Oe.test(t)?t.replace(Se,\"\\\\$&\"):t}function oc(t,e,n){t=Cu(t),e=yu(e);var r=e?Y(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Zi(Ll(i),n)+t+Zi(Il(i),n)}function ac(t,e,n){t=Cu(t),e=yu(e);var r=e?Y(t):0;return e&&r<e?t+Zi(e-r,n):t}function sc(t,e,n){t=Cu(t),e=yu(e);var r=e?Y(t):0;return e&&r<e?Zi(e-r,n)+t:t}function uc(t,e,n){return n||null==e?e=0:e&&(e=+e),Wl(Cu(t).replace(Ne,\"\"),e||0)}function cc(t,e,n){return e=(n?No(t,e,n):e===it)?1:yu(e),Gr(Cu(t),e)}function lc(){var t=arguments,e=Cu(t[0]);return t.length<3?e:e.replace(t[1],t[2])}function fc(t,e,n){return n&&\"number\"!=typeof n&&No(t,e,n)&&(e=n=it),(n=n===it?Rt:n>>>0)?(t=Cu(t),t&&(\"string\"==typeof e||null!=e&&!yp(e))&&!(e=ci(e))&&U(t)?_i(tt(t),0,n):t.split(e,n)):[]}function pc(t,e,n){return t=Cu(t),n=null==n?0:Zn(yu(n),0,t.length),e=ci(e),t.slice(n,n+e.length)==e}function dc(t,e,r){var i=n.templateSettings;r&&No(t,e,r)&&(e=it),t=Cu(t),e=$p({},e,i,ao);var o,a,s=$p({},e.imports,i.imports,ao),u=Ru(s),c=R(s,u),l=0,f=e.interpolate||Ve,p=\"__p += '\",d=il((e.escape||Ve).source+\"|\"+f.source+\"|\"+(f===$e?Fe:Ve).source+\"|\"+(e.evaluate||Ve).source+\"|$\",\"g\"),h=\"//# sourceURL=\"+(\"sourceURL\"in e?e.sourceURL:\"lodash.templateSources[\"+ ++yn+\"]\")+\"\\n\";t.replace(d,function(e,n,r,i,s,u){return r||(r=i),p+=t.slice(l,u).replace(Xe,H),n&&(o=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),s&&(a=!0,p+=\"';\\n\"+s+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),l=u+e.length,e}),p+=\"';\\n\";var v=e.variable;v||(p=\"with (obj) {\\n\"+p+\"\\n}\\n\"),p=(a?p.replace(ye,\"\"):p).replace(be,\"$1\").replace(_e,\"$1;\"),p=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(o?\", __e = _.escape\":\"\")+(a?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var g=Xp(function(){return el(u,h+\"return \"+p).apply(it,c)});if(g.source=p,Js(g))throw g;return g}function hc(t){return Cu(t).toLowerCase()}function vc(t){return Cu(t).toUpperCase()}function gc(t,e,n){if((t=Cu(t))&&(n||e===it))return t.replace(je,\"\");if(!t||!(e=ci(e)))return t;var r=tt(t),i=tt(e);return _i(r,F(r,i),q(r,i)+1).join(\"\")}function mc(t,e,n){if((t=Cu(t))&&(n||e===it))return t.replace(De,\"\");if(!t||!(e=ci(e)))return t;var r=tt(t);return _i(r,0,q(r,tt(e))+1).join(\"\")}function yc(t,e,n){if((t=Cu(t))&&(n||e===it))return t.replace(Ne,\"\");if(!t||!(e=ci(e)))return t;var r=tt(t);return _i(r,F(r,tt(e))).join(\"\")}function bc(t,e){var n=kt,r=At;if(tu(e)){var i=\"separator\"in e?e.separator:i;n=\"length\"in e?yu(e.length):n,r=\"omission\"in e?ci(e.omission):r}t=Cu(t);var o=t.length;if(U(t)){var a=tt(t);o=a.length}if(n>=o)return t;var s=n-Y(r);if(s<1)return r;var u=a?_i(a,0,s).join(\"\"):t.slice(0,s);if(i===it)return u+r;if(a&&(s+=u.length-s),yp(i)){if(t.slice(s).search(i)){var c,l=u;for(i.global||(i=il(i.source,Cu(qe.exec(i))+\"g\")),i.lastIndex=0;c=i.exec(l);)var f=c.index;u=u.slice(0,f===it?s:f)}}else if(t.indexOf(ci(i),s)!=s){var p=u.lastIndexOf(i);p>-1&&(u=u.slice(0,p))}return u+r}function _c(t){return t=Cu(t),t&&Ce.test(t)?t.replace(we,Wn):t}function wc(t,e,n){return t=Cu(t),e=n?it:e,e===it?W(t)?rt(t):w(t):t.match(e)||[]}function xc(t){var e=null==t?0:t.length,n=yo();return t=e?v(t,function(t){if(\"function\"!=typeof t[1])throw new al(st);return[n(t[0]),t[1]]}):[],Zr(function(n){for(var r=-1;++r<e;){var i=t[r];if(s(i[0],this,n))return s(i[1],this,n)}})}function Cc(t){return tr(Yn(t,ft))}function Tc(t){return function(){return t}}function $c(t,e){return null==t||t!==t?e:t}function kc(t){return t}function Ac(t){return Dr(\"function\"==typeof t?t:Yn(t,ft))}function Ec(t){return Fr(Yn(t,ft))}function Sc(t,e){return qr(t,Yn(e,ft))}function Oc(t,e,n){var r=Ru(e),i=fr(e,r);null!=n||tu(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=fr(e,Ru(e)));var o=!(tu(n)&&\"chain\"in n&&!n.chain),a=Gs(t);return c(i,function(n){var r=e[n];t[n]=r,a&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Di(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,g([this.value()],arguments))})}),t}function jc(){return Sn._===this&&(Sn._=ml),this}function Nc(){}function Dc(t){return t=yu(t),Zr(function(e){return Br(e,t)})}function Ic(t){return Do(t)?E(Jo(t)):Vr(t)}function Lc(t){return function(e){return null==t?it:pr(t,e)}}function Rc(){return[]}function Pc(){return!1}function Fc(){return{}}function qc(){return\"\"}function Mc(){return!0}function Hc(t,e){if((t=yu(t))<1||t>Dt)return[];var n=Rt,r=Bl(t,Rt);e=yo(e),t-=Rt;for(var i=D(r,e);++n<t;)e(n);return i}function Bc(t){return dp(t)?v(t,Jo):pu(t)?[t]:Di(Ef(Cu(t)))}function Uc(t){var e=++dl;return Cu(t)+e}function Wc(t){return t&&t.length?or(t,kc,vr):it}function zc(t,e){return t&&t.length?or(t,yo(e,2),vr):it}function Vc(t){return A(t,kc)}function Xc(t,e){return A(t,yo(e,2))}function Kc(t){return t&&t.length?or(t,kc,Rr):it}function Jc(t,e){return t&&t.length?or(t,yo(e,2),Rr):it}function Qc(t){return t&&t.length?N(t,kc):0}function Gc(t,e){return t&&t.length?N(t,yo(e,2)):0}e=null==e?Sn:zn.defaults(Sn.Object(),e,zn.pick(Sn,mn));var Zc=e.Array,Yc=e.Date,tl=e.Error,el=e.Function,nl=e.Math,rl=e.Object,il=e.RegExp,ol=e.String,al=e.TypeError,sl=Zc.prototype,ul=el.prototype,cl=rl.prototype,ll=e[\"__core-js_shared__\"],fl=ul.toString,pl=cl.hasOwnProperty,dl=0,hl=function(){var t=/[^.]+$/.exec(ll&&ll.keys&&ll.keys.IE_PROTO||\"\");return t?\"Symbol(src)_1.\"+t:\"\"}(),vl=cl.toString,gl=fl.call(rl),ml=Sn._,yl=il(\"^\"+fl.call(pl).replace(Se,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),bl=Nn?e.Buffer:it,_l=e.Symbol,wl=e.Uint8Array,xl=bl?bl.allocUnsafe:it,Cl=X(rl.getPrototypeOf,rl),Tl=rl.create,$l=cl.propertyIsEnumerable,kl=sl.splice,Al=_l?_l.isConcatSpreadable:it,El=_l?_l.iterator:it,Sl=_l?_l.toStringTag:it,Ol=function(){try{var t=wo(rl,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),jl=e.clearTimeout!==Sn.clearTimeout&&e.clearTimeout,Nl=Yc&&Yc.now!==Sn.Date.now&&Yc.now,Dl=e.setTimeout!==Sn.setTimeout&&e.setTimeout,Il=nl.ceil,Ll=nl.floor,Rl=rl.getOwnPropertySymbols,Pl=bl?bl.isBuffer:it,Fl=e.isFinite,ql=sl.join,Ml=X(rl.keys,rl),Hl=nl.max,Bl=nl.min,Ul=Yc.now,Wl=e.parseInt,zl=nl.random,Vl=sl.reverse,Xl=wo(e,\"DataView\"),Kl=wo(e,\"Map\"),Jl=wo(e,\"Promise\"),Ql=wo(e,\"Set\"),Gl=wo(e,\"WeakMap\"),Zl=wo(rl,\"create\"),Yl=Gl&&new Gl,tf={},ef=Qo(Xl),nf=Qo(Kl),rf=Qo(Jl),of=Qo(Ql),af=Qo(Gl),sf=_l?_l.prototype:it,uf=sf?sf.valueOf:it,cf=sf?sf.toString:it,lf=function(){function t(){}return function(e){if(!tu(e))return{};if(Tl)return Tl(e);t.prototype=e;var n=new t;return t.prototype=it,n}}();n.templateSettings={escape:/<%-([\\s\\S]+?)%>/g,evaluate:/<%([\\s\\S]+?)%>/g,interpolate:$e,variable:\"\",imports:{_:n}},n.prototype=r.prototype,n.prototype.constructor=n,i.prototype=lf(r.prototype),i.prototype.constructor=i,_.prototype=lf(r.prototype),_.prototype.constructor=_,nt.prototype.clear=Pe,nt.prototype.delete=Ke,nt.prototype.get=Je,nt.prototype.has=Qe,nt.prototype.set=Ge,Ze.prototype.clear=Ye,Ze.prototype.delete=tn,Ze.prototype.get=en,Ze.prototype.has=nn,Ze.prototype.set=rn,on.prototype.clear=an,on.prototype.delete=sn,on.prototype.get=un,on.prototype.has=cn,on.prototype.set=ln,dn.prototype.add=dn.prototype.push=hn,dn.prototype.has=vn,gn.prototype.clear=wn,gn.prototype.delete=xn,gn.prototype.get=Cn,gn.prototype.has=Tn,gn.prototype.set=An;var ff=qi(cr),pf=qi(lr,!0),df=Mi(),hf=Mi(!0),vf=Yl?function(t,e){return Yl.set(t,e),t}:kc,gf=Ol?function(t,e){return Ol(t,\"toString\",{configurable:!0,enumerable:!1,value:Tc(e),writable:!0})}:kc,mf=Zr,yf=jl||function(t){return Sn.clearTimeout(t)},bf=Ql&&1/J(new Ql([,-0]))[1]==Nt?function(t){return new Ql(t)}:Nc,_f=Yl?function(t){return Yl.get(t)}:Nc,wf=Rl?function(t){return null==t?[]:(t=rl(t),p(Rl(t),function(e){return $l.call(t,e)}))}:Rc,xf=Rl?function(t){for(var e=[];t;)g(e,wf(t)),t=Cl(t);return e}:Rc,Cf=hr;(Xl&&Cf(new Xl(new ArrayBuffer(1)))!=ue||Kl&&Cf(new Kl)!=Jt||Jl&&\"[object Promise]\"!=Cf(Jl.resolve())||Ql&&Cf(new Ql)!=ee||Gl&&Cf(new Gl)!=oe)&&(Cf=function(t){var e=hr(t),n=e==Zt?t.constructor:it,r=n?Qo(n):\"\";if(r)switch(r){case ef:return ue;case nf:return Jt;case rf:return\"[object Promise]\";case of:return ee;case af:return oe}return e});var Tf=ll?Gs:Pc,$f=Xo(vf),kf=Dl||function(t,e){return Sn.setTimeout(t,e)},Af=Xo(gf),Ef=function(t){var e=As(t,function(t){return n.size===ct&&n.clear(),t}),n=e.cache;return e}(function(t){var e=[];return Ee.test(t)&&e.push(\"\"),t.replace(/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,function(t,n,r,i){e.push(r?i.replace(/\\\\(\\\\)?/g,\"$1\"):n||t)}),e}),Sf=Zr(function(t,e){return Us(t)?rr(t,ur(e,1,Us,!0)):[]}),Of=Zr(function(t,e){var n=ma(e);return Us(n)&&(n=it),Us(t)?rr(t,ur(e,1,Us,!0),yo(n,2)):[]}),jf=Zr(function(t,e){var n=ma(e);return Us(n)&&(n=it),Us(t)?rr(t,ur(e,1,Us,!0),it,n):[]}),Nf=Zr(function(t){var e=v(t,mi);return e.length&&e[0]===t[0]?br(e):[]}),Df=Zr(function(t){var e=ma(t),n=v(t,mi);return e===ma(n)?e=it:n.pop(),n.length&&n[0]===t[0]?br(n,yo(e,2)):[]}),If=Zr(function(t){var e=ma(t),n=v(t,mi);return e=\"function\"==typeof e?e:it,e&&n.pop(),n.length&&n[0]===t[0]?br(n,it,e):[]}),Lf=Zr(_a),Rf=po(function(t,e){var n=null==t?0:t.length,r=Gn(t,e);return Kr(t,v(e,function(t){return jo(t,n)?+t:t}).sort(Si)),r}),Pf=Zr(function(t){return li(ur(t,1,Us,!0))}),Ff=Zr(function(t){var e=ma(t);return Us(e)&&(e=it),li(ur(t,1,Us,!0),yo(e,2))}),qf=Zr(function(t){var e=ma(t);return e=\"function\"==typeof e?e:it,li(ur(t,1,Us,!0),it,e)}),Mf=Zr(function(t,e){return Us(t)?rr(t,e):[]}),Hf=Zr(function(t){return vi(p(t,Us))}),Bf=Zr(function(t){var e=ma(t);return Us(e)&&(e=it),vi(p(t,Us),yo(e,2))}),Uf=Zr(function(t){var e=ma(t);return e=\"function\"==typeof e?e:it,vi(p(t,Us),it,e)}),Wf=Zr(Ba),zf=Zr(function(t){var e=t.length,n=e>1?t[e-1]:it;return n=\"function\"==typeof n?(t.pop(),n):it,Ua(t,n)}),Vf=po(function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,o=function(e){return Gn(e,t)};return!(e>1||this.__actions__.length)&&r instanceof _&&jo(n)?(r=r.slice(n,+n+(e?1:0)),r.__actions__.push({func:Ka,args:[o],thisArg:it}),new i(r,this.__chain__).thru(function(t){return e&&!t.length&&t.push(it),t})):this.thru(o)}),Xf=Pi(function(t,e,n){pl.call(t,n)?++t[n]:Qn(t,n,1)}),Kf=Vi(sa),Jf=Vi(ua),Qf=Pi(function(t,e,n){pl.call(t,n)?t[n].push(e):Qn(t,n,[e])}),Gf=Zr(function(t,e,n){var r=-1,i=\"function\"==typeof e,o=Bs(t)?Zc(t.length):[];return ff(t,function(t){o[++r]=i?s(e,t,n):wr(t,e,n)}),o}),Zf=Pi(function(t,e,n){Qn(t,n,e)}),Yf=Pi(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),tp=Zr(function(t,e){if(null==t)return[];var n=e.length;return n>1&&No(t,e[0],e[1])?e=[]:n>2&&No(e[0],e[1],e[2])&&(e=[e[0]]),Ur(t,ur(e,1),[])}),ep=Nl||function(){return Sn.Date.now()},np=Zr(function(t,e,n){var r=gt;if(n.length){var i=K(n,mo(np));r|=wt}return oo(t,r,e,n,i)}),rp=Zr(function(t,e,n){var r=gt|mt;if(n.length){var i=K(n,mo(rp));r|=wt}return oo(e,r,t,n,i)}),ip=Zr(function(t,e){return nr(t,1,e)}),op=Zr(function(t,e,n){return nr(t,_u(e)||0,n)});As.Cache=on;var ap=mf(function(t,e){e=1==e.length&&dp(e[0])?v(e[0],L(yo())):v(ur(e,1),L(yo()));var n=e.length;return Zr(function(r){for(var i=-1,o=Bl(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return s(t,this,r)})}),sp=Zr(function(t,e){var n=K(e,mo(sp));return oo(t,wt,it,e,n)}),up=Zr(function(t,e){var n=K(e,mo(up));return oo(t,xt,it,e,n)}),cp=po(function(t,e){return oo(t,Tt,it,it,it,e)}),lp=eo(vr),fp=eo(function(t,e){return t>=e}),pp=xr(function(){return arguments}())?xr:function(t){return eu(t)&&pl.call(t,\"callee\")&&!$l.call(t,\"callee\")},dp=Zc.isArray,hp=Ln?L(Ln):Cr,vp=Pl||Pc,gp=Rn?L(Rn):Tr,mp=Pn?L(Pn):Ar,yp=Fn?L(Fn):Or,bp=qn?L(qn):jr,_p=Mn?L(Mn):Nr,wp=eo(Rr),xp=eo(function(t,e){return t<=e}),Cp=Fi(function(t,e){if(Po(e)||Bs(e))return void Ii(e,Ru(e),t);for(var n in e)pl.call(e,n)&&Hn(t,n,e[n])}),Tp=Fi(function(t,e){Ii(e,Pu(e),t)}),$p=Fi(function(t,e,n,r){Ii(e,Pu(e),t,r)}),kp=Fi(function(t,e,n,r){Ii(e,Ru(e),t,r)}),Ap=po(Gn),Ep=Zr(function(t){return t.push(it,ao),s($p,it,t)}),Sp=Zr(function(t){return t.push(it,so),s(Ip,it,t)}),Op=Ji(function(t,e,n){t[e]=n},Tc(kc)),jp=Ji(function(t,e,n){pl.call(t,e)?t[e].push(n):t[e]=[n]},yo),Np=Zr(wr),Dp=Fi(function(t,e,n){Mr(t,e,n)}),Ip=Fi(function(t,e,n,r){Mr(t,e,n,r)}),Lp=po(function(t,e){var n={};if(null==t)return n;var r=!1;e=v(e,function(e){return e=bi(e,t),r||(r=e.length>1),e}),Ii(t,vo(t),n),r&&(n=Yn(n,ft|pt|dt,uo));for(var i=e.length;i--;)fi(n,e[i]);return n}),Rp=po(function(t,e){return null==t?{}:Wr(t,e)}),Pp=io(Ru),Fp=io(Pu),qp=Ui(function(t,e,n){return e=e.toLowerCase(),t+(n?tc(e):e)}),Mp=Ui(function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()}),Hp=Ui(function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()}),Bp=Bi(\"toLowerCase\"),Up=Ui(function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}),Wp=Ui(function(t,e,n){return t+(n?\" \":\"\")+Vp(e)}),zp=Ui(function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()}),Vp=Bi(\"toUpperCase\"),Xp=Zr(function(t,e){try{return s(t,it,e)}catch(t){return Js(t)?t:new tl(t)}}),Kp=po(function(t,e){return c(e,function(e){e=Jo(e),Qn(t,e,np(t[e],t))}),t}),Jp=Xi(),Qp=Xi(!0),Gp=Zr(function(t,e){return function(n){return wr(n,t,e)}}),Zp=Zr(function(t,e){return function(n){return wr(t,n,e)}}),Yp=Gi(v),td=Gi(f),ed=Gi(b),nd=to(),rd=to(!0),id=Qi(function(t,e){return t+e},0),od=ro(\"ceil\"),ad=Qi(function(t,e){return t/e},1),sd=ro(\"floor\"),ud=Qi(function(t,e){return t*e},1),cd=ro(\"round\"),ld=Qi(function(t,e){return t-e},0);return n.after=_s,n.ary=ws,n.assign=Cp,n.assignIn=Tp,n.assignInWith=$p,n.assignWith=kp,n.at=Ap,n.before=xs,n.bind=np,n.bindAll=Kp,n.bindKey=rp,n.castArray=Ls,n.chain=Va,n.chunk=Yo,n.compact=ta,n.concat=ea,n.cond=xc,n.conforms=Cc,n.constant=Tc,n.countBy=Xf,n.create=Tu,n.curry=Cs,n.curryRight=Ts,n.debounce=$s,n.defaults=Ep,n.defaultsDeep=Sp,n.defer=ip,n.delay=op,n.difference=Sf,n.differenceBy=Of,n.differenceWith=jf,n.drop=na,n.dropRight=ra,n.dropRightWhile=ia,n.dropWhile=oa,n.fill=aa,n.filter=rs,n.flatMap=is,n.flatMapDeep=os,n.flatMapDepth=as,n.flatten=ca,n.flattenDeep=la,n.flattenDepth=fa,n.flip=ks,n.flow=Jp,n.flowRight=Qp,n.fromPairs=pa,n.functions=ju,n.functionsIn=Nu,n.groupBy=Qf,n.initial=va,n.intersection=Nf,n.intersectionBy=Df,n.intersectionWith=If,n.invert=Op,n.invertBy=jp,n.invokeMap=Gf,n.iteratee=Ac,n.keyBy=Zf,n.keys=Ru,n.keysIn=Pu,n.map=ls,n.mapKeys=Fu,n.mapValues=qu,n.matches=Ec,n.matchesProperty=Sc,n.memoize=As,n.merge=Dp,n.mergeWith=Ip,n.method=Gp,n.methodOf=Zp,n.mixin=Oc,n.negate=Es,n.nthArg=Dc,n.omit=Lp,n.omitBy=Mu,n.once=Ss,n.orderBy=fs,n.over=Yp,n.overArgs=ap,n.overEvery=td,n.overSome=ed,n.partial=sp,n.partialRight=up,n.partition=Yf,n.pick=Rp,n.pickBy=Hu,n.property=Ic,n.propertyOf=Lc,n.pull=Lf,n.pullAll=_a,n.pullAllBy=wa,n.pullAllWith=xa,n.pullAt=Rf,n.range=nd,n.rangeRight=rd,n.rearg=cp,n.reject=hs,n.remove=Ca,n.rest=Os,n.reverse=Ta,n.sampleSize=gs,n.set=Uu,n.setWith=Wu,n.shuffle=ms,n.slice=$a,n.sortBy=tp,n.sortedUniq=Na,n.sortedUniqBy=Da,n.split=fc,n.spread=js,n.tail=Ia,n.take=La,n.takeRight=Ra,n.takeRightWhile=Pa,n.takeWhile=Fa,n.tap=Xa,n.throttle=Ns,n.thru=Ka,n.toArray=gu,n.toPairs=Pp,n.toPairsIn=Fp,n.toPath=Bc,n.toPlainObject=wu,n.transform=zu,n.unary=Ds,n.union=Pf,n.unionBy=Ff,n.unionWith=qf,n.uniq=qa,n.uniqBy=Ma,n.uniqWith=Ha,n.unset=Vu,n.unzip=Ba,n.unzipWith=Ua,n.update=Xu,n.updateWith=Ku,n.values=Ju,n.valuesIn=Qu,n.without=Mf,n.words=wc,n.wrap=Is,n.xor=Hf,n.xorBy=Bf,n.xorWith=Uf,n.zip=Wf,n.zipObject=Wa,n.zipObjectDeep=za,n.zipWith=zf,n.entries=Pp,n.entriesIn=Fp,n.extend=Tp,n.extendWith=$p,Oc(n,n),n.add=id,n.attempt=Xp,n.camelCase=qp,n.capitalize=tc,n.ceil=od,n.clamp=Gu,n.clone=Rs,n.cloneDeep=Fs,n.cloneDeepWith=qs,n.cloneWith=Ps,n.conformsTo=Ms,n.deburr=ec,n.defaultTo=$c,n.divide=ad,n.endsWith=nc,n.eq=Hs,n.escape=rc,n.escapeRegExp=ic,n.every=ns,n.find=Kf,n.findIndex=sa,n.findKey=$u,n.findLast=Jf,n.findLastIndex=ua,n.findLastKey=ku,n.floor=sd,n.forEach=ss,n.forEachRight=us,n.forIn=Au,n.forInRight=Eu,n.forOwn=Su,n.forOwnRight=Ou,n.get=Du,n.gt=lp,n.gte=fp,n.has=Iu,n.hasIn=Lu,n.head=da,n.identity=kc,n.includes=cs,n.indexOf=ha,n.inRange=Zu,n.invoke=Np,n.isArguments=pp,n.isArray=dp,n.isArrayBuffer=hp,n.isArrayLike=Bs,n.isArrayLikeObject=Us,n.isBoolean=Ws,n.isBuffer=vp,n.isDate=gp,n.isElement=zs,n.isEmpty=Vs,n.isEqual=Xs,n.isEqualWith=Ks,n.isError=Js,n.isFinite=Qs,n.isFunction=Gs,n.isInteger=Zs,n.isLength=Ys,n.isMap=mp,n.isMatch=nu,n.isMatchWith=ru,n.isNaN=iu,n.isNative=ou,n.isNil=su,n.isNull=au,n.isNumber=uu,n.isObject=tu,n.isObjectLike=eu,n.isPlainObject=cu,n.isRegExp=yp,n.isSafeInteger=lu,n.isSet=bp,n.isString=fu,n.isSymbol=pu,n.isTypedArray=_p,n.isUndefined=du,n.isWeakMap=hu,n.isWeakSet=vu,n.join=ga,n.kebabCase=Mp,n.last=ma,n.lastIndexOf=ya,n.lowerCase=Hp,n.lowerFirst=Bp,n.lt=wp,n.lte=xp,n.max=Wc,n.maxBy=zc,n.mean=Vc,n.meanBy=Xc,n.min=Kc,n.minBy=Jc,n.stubArray=Rc,n.stubFalse=Pc,n.stubObject=Fc,n.stubString=qc,n.stubTrue=Mc,n.multiply=ud,n.nth=ba,n.noConflict=jc,n.noop=Nc,n.now=ep,n.pad=oc,n.padEnd=ac,n.padStart=sc,n.parseInt=uc,n.random=Yu,n.reduce=ps,n.reduceRight=ds,n.repeat=cc,n.replace=lc,n.result=Bu,n.round=cd,n.runInContext=t,n.sample=vs,n.size=ys,n.snakeCase=Up,n.some=bs,n.sortedIndex=ka,n.sortedIndexBy=Aa,n.sortedIndexOf=Ea,n.sortedLastIndex=Sa,n.sortedLastIndexBy=Oa,n.sortedLastIndexOf=ja,n.startCase=Wp,n.startsWith=pc,n.subtract=ld,n.sum=Qc,n.sumBy=Gc,n.template=dc,n.times=Hc,n.toFinite=mu,n.toInteger=yu,n.toLength=bu,n.toLower=hc,n.toNumber=_u,n.toSafeInteger=xu,n.toString=Cu,n.toUpper=vc,n.trim=gc,n.trimEnd=mc,n.trimStart=yc,n.truncate=bc,n.unescape=_c,n.uniqueId=Uc,n.upperCase=zp,n.upperFirst=Vp,n.each=ss,n.eachRight=us,n.first=da,Oc(n,function(){var t={};return cr(n,function(e,r){pl.call(n.prototype,r)||(t[r]=e)}),t}(),{chain:!1}),n.VERSION=\"4.17.4\",c([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){n[t].placeholder=n}),c([\"drop\",\"take\"],function(t,e){_.prototype[t]=function(n){n=n===it?1:Hl(yu(n),0);var r=this.__filtered__&&!e?new _(this):this.clone();return r.__filtered__?r.__takeCount__=Bl(n,r.__takeCount__):r.__views__.push({size:Bl(n,Rt),type:t+(r.__dir__<0?\"Right\":\"\")}),r},_.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),c([\"filter\",\"map\",\"takeWhile\"],function(t,e){var n=e+1,r=n==Ot||3==n;_.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:yo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),c([\"head\",\"last\"],function(t,e){var n=\"take\"+(e?\"Right\":\"\");_.prototype[t]=function(){return this[n](1).value()[0]}}),c([\"initial\",\"tail\"],function(t,e){var n=\"drop\"+(e?\"\":\"Right\");_.prototype[t]=function(){return this.__filtered__?new _(this):this[n](1)}}),_.prototype.compact=function(){return this.filter(kc)},_.prototype.find=function(t){return this.filter(t).head()},_.prototype.findLast=function(t){return this.reverse().find(t)},_.prototype.invokeMap=Zr(function(t,e){return\"function\"==typeof t?new _(this):this.map(function(n){return wr(n,t,e)})}),_.prototype.reject=function(t){return this.filter(Es(yo(t)))},_.prototype.slice=function(t,e){t=yu(t);var n=this;return n.__filtered__&&(t>0||e<0)?new _(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==it&&(e=yu(e),n=e<0?n.dropRight(-e):n.take(e-t)),n)},_.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},_.prototype.toArray=function(){return this.take(Rt)},cr(_.prototype,function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),o=/^(?:head|last)$/.test(e),a=n[o?\"take\"+(\"last\"==e?\"Right\":\"\"):e],s=o||/^find/.test(e);a&&(n.prototype[e]=function(){var e=this.__wrapped__,u=o?[1]:arguments,c=e instanceof _,l=u[0],f=c||dp(e),p=function(t){var e=a.apply(n,g([t],u));return o&&d?e[0]:e};f&&r&&\"function\"==typeof l&&1!=l.length&&(c=f=!1);var d=this.__chain__,h=!!this.__actions__.length,v=s&&!d,m=c&&!h;if(!s&&f){e=m?e:new _(this);var y=t.apply(e,u);return y.__actions__.push({func:Ka,args:[p],thisArg:it}),new i(y,d)}return v&&m?t.apply(this,u):(y=this.thru(p),v?o?y.value()[0]:y.value():y)})}),c([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=sl[t],r=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",i=/^(?:pop|shift)$/.test(t);n.prototype[t]=function(){var t=arguments;if(i&&!this.__chain__){var n=this.value();return e.apply(dp(n)?n:[],t)}return this[r](function(n){return e.apply(dp(n)?n:[],t)})}}),cr(_.prototype,function(t,e){var r=n[e];if(r){var i=r.name+\"\";(tf[i]||(tf[i]=[])).push({name:e,func:r})}}),tf[Ki(it,mt).name]=[{name:\"wrapper\",func:it}],_.prototype.clone=S,_.prototype.reverse=G,_.prototype.value=et,n.prototype.at=Vf,n.prototype.chain=Ja,n.prototype.commit=Qa,n.prototype.next=Ga,n.prototype.plant=Ya,n.prototype.reverse=ts,n.prototype.toJSON=n.prototype.valueOf=n.prototype.value=es,n.prototype.first=n.prototype.head,El&&(n.prototype[El]=Za),n}();Sn._=zn,(i=function(){return zn}.call(e,n,e,r))!==it&&(r.exports=i)}).call(this)}).call(e,n(7),n(38)(t))},function(t,e){function n(){throw new Error(\"setTimeout has not been defined\")}function r(){throw new Error(\"clearTimeout has not been defined\")}function i(t){if(l===setTimeout)return setTimeout(t,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}function o(t){if(f===clearTimeout)return clearTimeout(t);if((f===r||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(t);try{return f(t)}catch(e){try{return f.call(null,t)}catch(e){return f.call(this,t)}}}function a(){v&&d&&(v=!1,d.length?h=d.concat(h):g=-1,h.length&&s())}function s(){if(!v){var t=i(a);v=!0;for(var e=h.length;e;){for(d=h,h=[];++g<e;)d&&d[g].run();g=-1,e=h.length}d=null,v=!1,o(t)}}function u(t,e){this.fun=t,this.array=e}function c(){}var l,f,p=t.exports={};!function(){try{l=\"function\"==typeof setTimeout?setTimeout:n}catch(t){l=n}try{f=\"function\"==typeof clearTimeout?clearTimeout:r}catch(t){f=r}}();var d,h=[],v=!1,g=-1;p.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];h.push(new u(t,e)),1!==h.length||v||i(s)},u.prototype.run=function(){this.fun.apply(null,this.array)},p.title=\"browser\",p.browser=!0,p.env={},p.argv=[],p.version=\"\",p.versions={},p.on=c,p.addListener=c,p.once=c,p.off=c,p.removeListener=c,p.removeAllListeners=c,p.emit=c,p.prependListener=c,p.prependOnceListener=c,p.listeners=function(t){return[]},p.binding=function(t){throw new Error(\"process.binding is not supported\")},p.cwd=function(){return\"/\"},p.chdir=function(t){throw new Error(\"process.chdir is not supported\")},p.umask=function(){return 0}},function(t,e,n){var r=n(35)(n(28),n(36),null,null);t.exports=r.exports},function(t,e){t.exports=function(t,e,n,r){var i,o=t=t||{},a=typeof t.default;\"object\"!==a&&\"function\"!==a||(i=t,o=t.default);var s=\"function\"==typeof o?o.options:o;if(e&&(s.render=e.render,s.staticRenderFns=e.staticRenderFns),n&&(s._scopeId=n),r){var u=Object.create(s.computed||null);Object.keys(r).forEach(function(t){var e=r[t];u[t]=function(){return e}}),s.computed=u}return{esModule:i,exports:o,options:s}}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)},staticRenderFns:[function(){var t=this,e=t.$createElement,n=t._self._c||e;return n(\"div\",{staticClass:\"container\"},[n(\"div\",{staticClass:\"row\"},[n(\"div\",{staticClass:\"col-md-8 col-md-offset-2\"},[n(\"div\",{staticClass:\"panel panel-default\"},[n(\"div\",{staticClass:\"panel-heading\"},[t._v(\"Example Component\")]),t._v(\" \"),n(\"div\",{staticClass:\"panel-body\"},[t._v(\"\\n                    I'm an example component!\\n                \")])])])])])}]}},function(t,e,n){\"use strict\";(function(e){/*!\n * Vue.js v2.3.3\n * (c) 2014-2017 Evan You\n * Released under the MIT License.\n */\nfunction n(t){return void 0===t||null===t}function r(t){return void 0!==t&&null!==t}function i(t){return!0===t}function o(t){return!1===t}function a(t){return\"string\"==typeof t||\"number\"==typeof t}function s(t){return null!==t&&\"object\"==typeof t}function u(t){return\"[object Object]\"===ji.call(t)}function c(t){return\"[object RegExp]\"===ji.call(t)}function l(t){return null==t?\"\":\"object\"==typeof t?JSON.stringify(t,null,2):String(t)}function f(t){var e=parseFloat(t);return isNaN(e)?t:e}function p(t,e){for(var n=Object.create(null),r=t.split(\",\"),i=0;i<r.length;i++)n[r[i]]=!0;return e?function(t){return n[t.toLowerCase()]}:function(t){return n[t]}}function d(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)return t.splice(n,1)}}function h(t,e){return Di.call(t,e)}function v(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}function g(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function m(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function y(t,e){for(var n in e)t[n]=e[n];return t}function b(t){for(var e={},n=0;n<t.length;n++)t[n]&&y(e,t[n]);return e}function _(){}function w(t,e){var n=s(t),r=s(e);if(!n||!r)return!n&&!r&&String(t)===String(e);try{return JSON.stringify(t)===JSON.stringify(e)}catch(n){return t===e}}function x(t,e){for(var n=0;n<t.length;n++)if(w(t[n],e))return n;return-1}function C(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}function T(t){var e=(t+\"\").charCodeAt(0);return 36===e||95===e}function $(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function k(t){if(!Wi.test(t)){var e=t.split(\".\");return function(t){for(var n=0;n<e.length;n++){if(!t)return;t=t[e[n]]}return t}}}function A(t,e,n){if(Bi.errorHandler)Bi.errorHandler.call(null,t,e,n);else if(!Xi||\"undefined\"==typeof console)throw t}function E(t){return\"function\"==typeof t&&/native code/.test(t.toString())}function S(t){lo.target&&fo.push(lo.target),lo.target=t}function O(){lo.target=fo.pop()}function j(t,e){t.__proto__=e}function N(t,e,n){for(var r=0,i=n.length;r<i;r++){var o=n[r];$(t,o,e[o])}}function D(t,e){if(s(t)){var n;return h(t,\"__ob__\")&&t.__ob__ instanceof mo?n=t.__ob__:go.shouldConvert&&!oo()&&(Array.isArray(t)||u(t))&&Object.isExtensible(t)&&!t._isVue&&(n=new mo(t)),e&&n&&n.vmCount++,n}}function I(t,e,n,r){var i=new lo,o=Object.getOwnPropertyDescriptor(t,e);if(!o||!1!==o.configurable){var a=o&&o.get,s=o&&o.set,u=D(n);Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){var e=a?a.call(t):n;return lo.target&&(i.depend(),u&&u.dep.depend(),Array.isArray(e)&&P(e)),e},set:function(e){var r=a?a.call(t):n;e===r||e!==e&&r!==r||(s?s.call(t,e):n=e,u=D(e),i.notify())}})}}function L(t,e,n){if(Array.isArray(t)&&\"number\"==typeof e)return t.length=Math.max(t.length,e),t.splice(e,1,n),n;if(h(t,e))return t[e]=n,n;var r=t.__ob__;return t._isVue||r&&r.vmCount?n:r?(I(r.value,e,n),r.dep.notify(),n):(t[e]=n,n)}function R(t,e){if(Array.isArray(t)&&\"number\"==typeof e)return void t.splice(e,1);var n=t.__ob__;t._isVue||n&&n.vmCount||h(t,e)&&(delete t[e],n&&n.dep.notify())}function P(t){for(var e=void 0,n=0,r=t.length;n<r;n++)e=t[n],e&&e.__ob__&&e.__ob__.dep.depend(),Array.isArray(e)&&P(e)}function F(t,e){if(!e)return t;for(var n,r,i,o=Object.keys(e),a=0;a<o.length;a++)n=o[a],r=t[n],i=e[n],h(t,n)?u(r)&&u(i)&&F(r,i):L(t,n,i);return t}function q(t,e){return e?t?t.concat(e):Array.isArray(e)?e:[e]:t}function M(t,e){var n=Object.create(t||null);return e?y(n,e):n}function H(t){var e=t.props;if(e){var n,r,i,o={};if(Array.isArray(e))for(n=e.length;n--;)\"string\"==typeof(r=e[n])&&(i=Ii(r),o[i]={type:null});else if(u(e))for(var a in e)r=e[a],i=Ii(a),o[i]=u(r)?r:{type:r};t.props=o}}function B(t){var e=t.directives;if(e)for(var n in e){var r=e[n];\"function\"==typeof r&&(e[n]={bind:r,update:r})}}function U(t,e,n){function r(r){var i=yo[r]||bo;u[r]=i(t[r],e[r],n,r)}\"function\"==typeof e&&(e=e.options),H(e),B(e);var i=e.extends;if(i&&(t=U(t,i,n)),e.mixins)for(var o=0,a=e.mixins.length;o<a;o++)t=U(t,e.mixins[o],n);var s,u={};for(s in t)r(s);for(s in e)h(t,s)||r(s);return u}function W(t,e,n,r){if(\"string\"==typeof n){var i=t[e];if(h(i,n))return i[n];var o=Ii(n);if(h(i,o))return i[o];var a=Li(o);if(h(i,a))return i[a];return i[n]||i[o]||i[a]}}function z(t,e,n,r){var i=e[t],o=!h(n,t),a=n[t];if(K(Boolean,i.type)&&(o&&!h(i,\"default\")?a=!1:K(String,i.type)||\"\"!==a&&a!==Ri(t)||(a=!0)),void 0===a){a=V(r,i,t);var s=go.shouldConvert;go.shouldConvert=!0,D(a),go.shouldConvert=s}return a}function V(t,e,n){if(h(e,\"default\")){var r=e.default;return t&&t.$options.propsData&&void 0===t.$options.propsData[n]&&void 0!==t._props[n]?t._props[n]:\"function\"==typeof r&&\"Function\"!==X(e.type)?r.call(t):r}}function X(t){var e=t&&t.toString().match(/^\\s*function (\\w+)/);return e?e[1]:\"\"}function K(t,e){if(!Array.isArray(e))return X(e)===X(t);for(var n=0,r=e.length;n<r;n++)if(X(e[n])===X(t))return!0;return!1}function J(t){return new _o(void 0,void 0,void 0,String(t))}function Q(t){var e=new _o(t.tag,t.data,t.children,t.text,t.elm,t.context,t.componentOptions);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.isCloned=!0,e}function G(t){for(var e=t.length,n=new Array(e),r=0;r<e;r++)n[r]=Q(t[r]);return n}function Z(t){function e(){var t=arguments,n=e.fns;if(!Array.isArray(n))return n.apply(null,arguments);for(var r=0;r<n.length;r++)n[r].apply(null,t)}return e.fns=t,e}function Y(t,e,r,i,o){var a,s,u,c;for(a in t)s=t[a],u=e[a],c=To(a),n(s)||(n(u)?(n(s.fns)&&(s=t[a]=Z(s)),r(c.name,s,c.once,c.capture,c.passive)):s!==u&&(u.fns=s,t[a]=u));for(a in e)n(t[a])&&(c=To(a),i(c.name,e[a],c.capture))}function tt(t,e,o){function a(){o.apply(this,arguments),d(s.fns,a)}var s,u=t[e];n(u)?s=Z([a]):r(u.fns)&&i(u.merged)?(s=u,s.fns.push(a)):s=Z([u,a]),s.merged=!0,t[e]=s}function et(t,e,i){var o=e.options.props;if(!n(o)){var a={},s=t.attrs,u=t.props;if(r(s)||r(u))for(var c in o){var l=Ri(c);nt(a,u,c,l,!0)||nt(a,s,c,l,!1)}return a}}function nt(t,e,n,i,o){if(r(e)){if(h(e,n))return t[n]=e[n],o||delete e[n],!0;if(h(e,i))return t[n]=e[i],o||delete e[i],!0}return!1}function rt(t){for(var e=0;e<t.length;e++)if(Array.isArray(t[e]))return Array.prototype.concat.apply([],t);return t}function it(t){return a(t)?[J(t)]:Array.isArray(t)?at(t):void 0}function ot(t){return r(t)&&r(t.text)&&o(t.isComment)}function at(t,e){var o,s,u,c=[];for(o=0;o<t.length;o++)s=t[o],n(s)||\"boolean\"==typeof s||(u=c[c.length-1],Array.isArray(s)?c.push.apply(c,at(s,(e||\"\")+\"_\"+o)):a(s)?ot(u)?u.text+=String(s):\"\"!==s&&c.push(J(s)):ot(s)&&ot(u)?c[c.length-1]=J(u.text+s.text):(i(t._isVList)&&r(s.tag)&&n(s.key)&&r(e)&&(s.key=\"__vlist\"+e+\"_\"+o+\"__\"),c.push(s)));return c}function st(t,e){return s(t)?e.extend(t):t}function ut(t,e,o){if(i(t.error)&&r(t.errorComp))return t.errorComp;if(r(t.resolved))return t.resolved;if(i(t.loading)&&r(t.loadingComp))return t.loadingComp;if(!r(t.contexts)){var a=t.contexts=[o],u=!0,c=function(){for(var t=0,e=a.length;t<e;t++)a[t].$forceUpdate()},l=C(function(n){t.resolved=st(n,e),u||c()}),f=C(function(e){r(t.errorComp)&&(t.error=!0,c())}),p=t(l,f);return s(p)&&(\"function\"==typeof p.then?n(t.resolved)&&p.then(l,f):r(p.component)&&\"function\"==typeof p.component.then&&(p.component.then(l,f),r(p.error)&&(t.errorComp=st(p.error,e)),r(p.loading)&&(t.loadingComp=st(p.loading,e),0===p.delay?t.loading=!0:setTimeout(function(){n(t.resolved)&&n(t.error)&&(t.loading=!0,c())},p.delay||200)),r(p.timeout)&&setTimeout(function(){n(t.resolved)&&f(null)},p.timeout))),u=!1,t.loading?t.loadingComp:t.resolved}t.contexts.push(o)}function ct(t){if(Array.isArray(t))for(var e=0;e<t.length;e++){var n=t[e];if(r(n)&&r(n.componentOptions))return n}}function lt(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&dt(t,e)}function ft(t,e,n){n?xo.$once(t,e):xo.$on(t,e)}function pt(t,e){xo.$off(t,e)}function dt(t,e,n){xo=t,Y(e,n||{},ft,pt,t)}function ht(t,e){var n={};if(!t)return n;for(var r=[],i=0,o=t.length;i<o;i++){var a=t[i];if(a.context!==e&&a.functionalContext!==e||!a.data||null==a.data.slot)r.push(a);else{var s=a.data.slot,u=n[s]||(n[s]=[]);\"template\"===a.tag?u.push.apply(u,a.children):u.push(a)}}return r.every(vt)||(n.default=r),n}function vt(t){return t.isComment||\" \"===t.text}function gt(t,e){e=e||{};for(var n=0;n<t.length;n++)Array.isArray(t[n])?gt(t[n],e):e[t[n].key]=t[n].fn;return e}function mt(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}function yt(t,e,n){t.$el=e,t.$options.render||(t.$options.render=Co),Ct(t,\"beforeMount\");var r;return r=function(){t._update(t._render(),n)},t._watcher=new Do(t,r,_),n=!1,null==t.$vnode&&(t._isMounted=!0,Ct(t,\"mounted\")),t}function bt(t,e,n,r,i){var o=!!(i||t.$options._renderChildren||r.data.scopedSlots||t.$scopedSlots!==Ui);if(t.$options._parentVnode=r,t.$vnode=r,t._vnode&&(t._vnode.parent=r),t.$options._renderChildren=i,e&&t.$options.props){go.shouldConvert=!1;for(var a=t._props,s=t.$options._propKeys||[],u=0;u<s.length;u++){var c=s[u];a[c]=z(c,t.$options.props,e,t)}go.shouldConvert=!0,t.$options.propsData=e}if(n){var l=t.$options._parentListeners;t.$options._parentListeners=n,dt(t,n,l)}o&&(t.$slots=ht(i,r.context),t.$forceUpdate())}function _t(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function wt(t,e){if(e){if(t._directInactive=!1,_t(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(var n=0;n<t.$children.length;n++)wt(t.$children[n]);Ct(t,\"activated\")}}function xt(t,e){if(!(e&&(t._directInactive=!0,_t(t))||t._inactive)){t._inactive=!0;for(var n=0;n<t.$children.length;n++)xt(t.$children[n]);Ct(t,\"deactivated\")}}function Ct(t,e){var n=t.$options[e];if(n)for(var r=0,i=n.length;r<i;r++)try{n[r].call(t)}catch(n){A(n,t,e+\" hook\")}t._hasHookEvent&&t.$emit(\"hook:\"+e)}function Tt(){jo=ko.length=Ao.length=0,Eo={},So=Oo=!1}function $t(){Oo=!0;var t,e;for(ko.sort(function(t,e){return t.id-e.id}),jo=0;jo<ko.length;jo++)t=ko[jo],e=t.id,Eo[e]=null,t.run();var n=Ao.slice(),r=ko.slice();Tt(),Et(n),kt(r),ao&&Bi.devtools&&ao.emit(\"flush\")}function kt(t){for(var e=t.length;e--;){var n=t[e],r=n.vm;r._watcher===n&&r._isMounted&&Ct(r,\"updated\")}}function At(t){t._inactive=!1,Ao.push(t)}function Et(t){for(var e=0;e<t.length;e++)t[e]._inactive=!0,wt(t[e],!0)}function St(t){var e=t.id;if(null==Eo[e]){if(Eo[e]=!0,Oo){for(var n=ko.length-1;n>jo&&ko[n].id>t.id;)n--;ko.splice(n+1,0,t)}else ko.push(t);So||(So=!0,uo($t))}}function Ot(t){Io.clear(),jt(t,Io)}function jt(t,e){var n,r,i=Array.isArray(t);if((i||s(t))&&Object.isExtensible(t)){if(t.__ob__){var o=t.__ob__.dep.id;if(e.has(o))return;e.add(o)}if(i)for(n=t.length;n--;)jt(t[n],e);else for(r=Object.keys(t),n=r.length;n--;)jt(t[r[n]],e)}}function Nt(t,e,n){Lo.get=function(){return this[e][n]},Lo.set=function(t){this[e][n]=t},Object.defineProperty(t,n,Lo)}function Dt(t){t._watchers=[];var e=t.$options;e.props&&It(t,e.props),e.methods&&Mt(t,e.methods),e.data?Lt(t):D(t._data={},!0),e.computed&&Pt(t,e.computed),e.watch&&Ht(t,e.watch)}function It(t,e){var n=t.$options.propsData||{},r=t._props={},i=t.$options._propKeys=[],o=!t.$parent;go.shouldConvert=o;for(var a in e)!function(o){i.push(o);var a=z(o,e,n,t);I(r,o,a),o in t||Nt(t,\"_props\",o)}(a);go.shouldConvert=!0}function Lt(t){var e=t.$options.data;e=t._data=\"function\"==typeof e?Rt(e,t):e||{},u(e)||(e={});for(var n=Object.keys(e),r=t.$options.props,i=n.length;i--;)r&&h(r,n[i])||T(n[i])||Nt(t,\"_data\",n[i]);D(e,!0)}function Rt(t,e){try{return t.call(e)}catch(t){return A(t,e,\"data()\"),{}}}function Pt(t,e){var n=t._computedWatchers=Object.create(null);for(var r in e){var i=e[r],o=\"function\"==typeof i?i:i.get;n[r]=new Do(t,o,_,Ro),r in t||Ft(t,r,i)}}function Ft(t,e,n){\"function\"==typeof n?(Lo.get=qt(e),Lo.set=_):(Lo.get=n.get?!1!==n.cache?qt(e):n.get:_,Lo.set=n.set?n.set:_),Object.defineProperty(t,e,Lo)}function qt(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),lo.target&&e.depend(),e.value}}function Mt(t,e){t.$options.props;for(var n in e)t[n]=null==e[n]?_:g(e[n],t)}function Ht(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)Bt(t,n,r[i]);else Bt(t,n,r)}}function Bt(t,e,n){var r;u(n)&&(r=n,n=n.handler),\"string\"==typeof n&&(n=t[n]),t.$watch(e,n,r)}function Ut(t){var e=t.$options.provide;e&&(t._provided=\"function\"==typeof e?e.call(t):e)}function Wt(t){var e=zt(t.$options.inject,t);e&&Object.keys(e).forEach(function(n){I(t,n,e[n])})}function zt(t,e){if(t){for(var n=Array.isArray(t),r=Object.create(null),i=n?t:so?Reflect.ownKeys(t):Object.keys(t),o=0;o<i.length;o++)for(var a=i[o],s=n?a:t[a],u=e;u;){if(u._provided&&s in u._provided){r[a]=u._provided[s];break}u=u.$parent}return r}}function Vt(t,e,n,i,o){var a={},s=t.options.props;if(r(s))for(var u in s)a[u]=z(u,s,e||{});else r(n.attrs)&&Xt(a,n.attrs),r(n.props)&&Xt(a,n.props);var c=Object.create(i),l=function(t,e,n,r){return Yt(c,t,e,n,r,!0)},f=t.options.render.call(null,l,{data:n,props:a,children:o,parent:i,listeners:n.on||{},injections:zt(t.options.inject,i),slots:function(){return ht(o,i)}});return f instanceof _o&&(f.functionalContext=i,f.functionalOptions=t.options,n.slot&&((f.data||(f.data={})).slot=n.slot)),f}function Xt(t,e){for(var n in e)t[Ii(n)]=e[n]}function Kt(t,e,o,a,u){if(!n(t)){var c=o.$options._base;if(s(t)&&(t=c.extend(t)),\"function\"==typeof t&&(!n(t.cid)||void 0!==(t=ut(t,c,o)))){de(t),e=e||{},r(e.model)&&Zt(t.options,e);var l=et(e,t,u);if(i(t.options.functional))return Vt(t,l,e,o,a);var f=e.on;e.on=e.nativeOn,i(t.options.abstract)&&(e={}),Qt(e);var p=t.options.name||u;return new _o(\"vue-component-\"+t.cid+(p?\"-\"+p:\"\"),e,void 0,void 0,void 0,o,{Ctor:t,propsData:l,listeners:f,tag:u,children:a})}}}function Jt(t,e,n,i){var o=t.componentOptions,a={_isComponent:!0,parent:e,propsData:o.propsData,_componentTag:o.tag,_parentVnode:t,_parentListeners:o.listeners,_renderChildren:o.children,_parentElm:n||null,_refElm:i||null},s=t.data.inlineTemplate;return r(s)&&(a.render=s.render,a.staticRenderFns=s.staticRenderFns),new o.Ctor(a)}function Qt(t){t.hook||(t.hook={});for(var e=0;e<Fo.length;e++){var n=Fo[e],r=t.hook[n],i=Po[n];t.hook[n]=r?Gt(i,r):i}}function Gt(t,e){return function(n,r,i,o){t(n,r,i,o),e(n,r,i,o)}}function Zt(t,e){var n=t.model&&t.model.prop||\"value\",i=t.model&&t.model.event||\"input\";(e.props||(e.props={}))[n]=e.model.value;var o=e.on||(e.on={});r(o[i])?o[i]=[e.model.callback].concat(o[i]):o[i]=e.model.callback}function Yt(t,e,n,r,o,s){return(Array.isArray(n)||a(n))&&(o=r,r=n,n=void 0),i(s)&&(o=Mo),te(t,e,n,r,o)}function te(t,e,n,i,o){if(r(n)&&r(n.__ob__))return Co();if(!e)return Co();Array.isArray(i)&&\"function\"==typeof i[0]&&(n=n||{},n.scopedSlots={default:i[0]},i.length=0),o===Mo?i=it(i):o===qo&&(i=rt(i));var a,s;if(\"string\"==typeof e){var u;s=Bi.getTagNamespace(e),a=Bi.isReservedTag(e)?new _o(Bi.parsePlatformTagName(e),n,i,void 0,void 0,t):r(u=W(t.$options,\"components\",e))?Kt(u,n,t,i,e):new _o(e,n,i,void 0,void 0,t)}else a=Kt(e,n,t,i);return r(a)?(s&&ee(a,s),a):Co()}function ee(t,e){if(t.ns=e,\"foreignObject\"!==t.tag&&r(t.children))for(var i=0,o=t.children.length;i<o;i++){var a=t.children[i];r(a.tag)&&n(a.ns)&&ee(a,e)}}function ne(t,e){var n,i,o,a,u;if(Array.isArray(t)||\"string\"==typeof t)for(n=new Array(t.length),i=0,o=t.length;i<o;i++)n[i]=e(t[i],i);else if(\"number\"==typeof t)for(n=new Array(t),i=0;i<t;i++)n[i]=e(i+1,i);else if(s(t))for(a=Object.keys(t),n=new Array(a.length),i=0,o=a.length;i<o;i++)u=a[i],n[i]=e(t[u],u,i);return r(n)&&(n._isVList=!0),n}function re(t,e,n,r){var i=this.$scopedSlots[t];if(i)return n=n||{},r&&y(n,r),i(n)||e;var o=this.$slots[t];return o||e}function ie(t){return W(this.$options,\"filters\",t,!0)||Fi}function oe(t,e,n){var r=Bi.keyCodes[e]||n;return Array.isArray(r)?-1===r.indexOf(t):r!==t}function ae(t,e,n,r){if(n)if(s(n)){Array.isArray(n)&&(n=b(n));var i;for(var o in n){if(\"class\"===o||\"style\"===o)i=t;else{var a=t.attrs&&t.attrs.type;i=r||Bi.mustUseProp(e,a,o)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}o in i||(i[o]=n[o])}}else;return t}function se(t,e){var n=this._staticTrees[t];return n&&!e?Array.isArray(n)?G(n):Q(n):(n=this._staticTrees[t]=this.$options.staticRenderFns[t].call(this._renderProxy),ce(n,\"__static__\"+t,!1),n)}function ue(t,e,n){return ce(t,\"__once__\"+e+(n?\"_\"+n:\"\"),!0),t}function ce(t,e,n){if(Array.isArray(t))for(var r=0;r<t.length;r++)t[r]&&\"string\"!=typeof t[r]&&le(t[r],e+\"_\"+r,n);else le(t,e,n)}function le(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}function fe(t){t._vnode=null,t._staticTrees=null;var e=t.$vnode=t.$options._parentVnode,n=e&&e.context;t.$slots=ht(t.$options._renderChildren,n),t.$scopedSlots=Ui,t._c=function(e,n,r,i){return Yt(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Yt(t,e,n,r,i,!0)}}function pe(t,e){var n=t.$options=Object.create(t.constructor.options);n.parent=e.parent,n.propsData=e.propsData,n._parentVnode=e._parentVnode,n._parentListeners=e._parentListeners,n._renderChildren=e._renderChildren,n._componentTag=e._componentTag,n._parentElm=e._parentElm,n._refElm=e._refElm,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}function de(t){var e=t.options;if(t.super){var n=de(t.super);if(n!==t.superOptions){t.superOptions=n;var r=he(t);r&&y(t.extendOptions,r),e=t.options=U(n,t.extendOptions),e.name&&(e.components[e.name]=t)}}return e}function he(t){var e,n=t.options,r=t.extendOptions,i=t.sealedOptions;for(var o in n)n[o]!==i[o]&&(e||(e={}),e[o]=ve(n[o],r[o],i[o]));return e}function ve(t,e,n){if(Array.isArray(t)){var r=[];n=Array.isArray(n)?n:[n],e=Array.isArray(e)?e:[e];for(var i=0;i<t.length;i++)(e.indexOf(t[i])>=0||n.indexOf(t[i])<0)&&r.push(t[i]);return r}return t}function ge(t){this._init(t)}function me(t){t.use=function(t){if(t.installed)return this;var e=m(arguments,1);return e.unshift(this),\"function\"==typeof t.install?t.install.apply(t,e):\"function\"==typeof t&&t.apply(null,e),t.installed=!0,this}}function ye(t){t.mixin=function(t){return this.options=U(this.options,t),this}}function be(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,i=t._Ctor||(t._Ctor={});if(i[r])return i[r];var o=t.name||n.options.name,a=function(t){this._init(t)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=e++,a.options=U(n.options,t),a.super=n,a.options.props&&_e(a),a.options.computed&&we(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,Mi.forEach(function(t){a[t]=n[t]}),o&&(a.options.components[o]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=y({},a.options),i[r]=a,a}}function _e(t){var e=t.options.props;for(var n in e)Nt(t.prototype,\"_props\",n)}function we(t){var e=t.options.computed;for(var n in e)Ft(t.prototype,n,e[n])}function xe(t){Mi.forEach(function(e){t[e]=function(t,n){return n?(\"component\"===e&&u(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),\"directive\"===e&&\"function\"==typeof n&&(n={bind:n,update:n}),this.options[e+\"s\"][t]=n,n):this.options[e+\"s\"][t]}})}function Ce(t){return t&&(t.Ctor.options.name||t.tag)}function Te(t,e){return\"string\"==typeof t?t.split(\",\").indexOf(e)>-1:!!c(t)&&t.test(e)}function $e(t,e,n){for(var r in t){var i=t[r];if(i){var o=Ce(i.componentOptions);o&&!n(o)&&(i!==e&&ke(i),t[r]=null)}}}function ke(t){t&&t.componentInstance.$destroy()}function Ae(t){for(var e=t.data,n=t,i=t;r(i.componentInstance);)i=i.componentInstance._vnode,i.data&&(e=Ee(i.data,e));for(;r(n=n.parent);)n.data&&(e=Ee(e,n.data));return Se(e)}function Ee(t,e){return{staticClass:Oe(t.staticClass,e.staticClass),class:r(t.class)?[t.class,e.class]:e.class}}function Se(t){var e=t.class,n=t.staticClass;return r(n)||r(e)?Oe(n,je(e)):\"\"}function Oe(t,e){return t?e?t+\" \"+e:t:e||\"\"}function je(t){if(n(t))return\"\";if(\"string\"==typeof t)return t;var e=\"\";if(Array.isArray(t)){for(var i,o=0,a=t.length;o<a;o++)r(t[o])&&r(i=je(t[o]))&&\"\"!==i&&(e+=i+\" \");return e.slice(0,-1)}if(s(t)){for(var u in t)t[u]&&(e+=u+\" \");return e.slice(0,-1)}return e}function Ne(t){return fa(t)?\"svg\":\"math\"===t?\"math\":void 0}function De(t){if(!Xi)return!0;if(da(t))return!1;if(t=t.toLowerCase(),null!=ha[t])return ha[t];var e=document.createElement(t);return t.indexOf(\"-\")>-1?ha[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:ha[t]=/HTMLUnknownElement/.test(e.toString())}function Ie(t){if(\"string\"==typeof t){var e=document.querySelector(t);return e||document.createElement(\"div\")}return t}function Le(t,e){var n=document.createElement(t);return\"select\"!==t?n:(e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute(\"multiple\",\"multiple\"),n)}function Re(t,e){return document.createElementNS(ca[t],e)}function Pe(t){return document.createTextNode(t)}function Fe(t){return document.createComment(t)}function qe(t,e,n){t.insertBefore(e,n)}function Me(t,e){t.removeChild(e)}function He(t,e){t.appendChild(e)}function Be(t){return t.parentNode}function Ue(t){return t.nextSibling}function We(t){return t.tagName}function ze(t,e){t.textContent=e}function Ve(t,e,n){t.setAttribute(e,n)}function Xe(t,e){var n=t.data.ref;if(n){var r=t.context,i=t.componentInstance||t.elm,o=r.$refs;e?Array.isArray(o[n])?d(o[n],i):o[n]===i&&(o[n]=void 0):t.data.refInFor?Array.isArray(o[n])&&o[n].indexOf(i)<0?o[n].push(i):o[n]=[i]:o[n]=i}}function Ke(t,e){return t.key===e.key&&t.tag===e.tag&&t.isComment===e.isComment&&r(t.data)===r(e.data)&&Je(t,e)}function Je(t,e){if(\"input\"!==t.tag)return!0;var n;return(r(n=t.data)&&r(n=n.attrs)&&n.type)===(r(n=e.data)&&r(n=n.attrs)&&n.type)}function Qe(t,e,n){var i,o,a={};for(i=e;i<=n;++i)o=t[i].key,r(o)&&(a[o]=i);return a}function Ge(t,e){(t.data.directives||e.data.directives)&&Ze(t,e)}function Ze(t,e){var n,r,i,o=t===ma,a=e===ma,s=Ye(t.data.directives,t.context),u=Ye(e.data.directives,e.context),c=[],l=[];for(n in u)r=s[n],i=u[n],r?(i.oldValue=r.value,en(i,\"update\",e,t),i.def&&i.def.componentUpdated&&l.push(i)):(en(i,\"bind\",e,t),i.def&&i.def.inserted&&c.push(i));if(c.length){var f=function(){for(var n=0;n<c.length;n++)en(c[n],\"inserted\",e,t)};o?tt(e.data.hook||(e.data.hook={}),\"insert\",f):f()}if(l.length&&tt(e.data.hook||(e.data.hook={}),\"postpatch\",function(){for(var n=0;n<l.length;n++)en(l[n],\"componentUpdated\",e,t)}),!o)for(n in s)u[n]||en(s[n],\"unbind\",t,t,a)}function Ye(t,e){var n=Object.create(null);if(!t)return n;var r,i;for(r=0;r<t.length;r++)i=t[r],i.modifiers||(i.modifiers=_a),n[tn(i)]=i,i.def=W(e.$options,\"directives\",i.name,!0);return n}function tn(t){return t.rawName||t.name+\".\"+Object.keys(t.modifiers||{}).join(\".\")}function en(t,e,n,r,i){var o=t.def&&t.def[e];if(o)try{o(n.elm,t,n,r,i)}catch(r){A(r,n.context,\"directive \"+t.name+\" \"+e+\" hook\")}}function nn(t,e){if(!n(t.data.attrs)||!n(e.data.attrs)){var i,o,a=e.elm,s=t.data.attrs||{},u=e.data.attrs||{};r(u.__ob__)&&(u=e.data.attrs=y({},u));for(i in u)o=u[i],s[i]!==o&&rn(a,i,o);Qi&&u.value!==s.value&&rn(a,\"value\",u.value);for(i in s)n(u[i])&&(aa(i)?a.removeAttributeNS(oa,sa(i)):ra(i)||a.removeAttribute(i))}}function rn(t,e,n){ia(e)?ua(n)?t.removeAttribute(e):t.setAttribute(e,e):ra(e)?t.setAttribute(e,ua(n)||\"false\"===n?\"false\":\"true\"):aa(e)?ua(n)?t.removeAttributeNS(oa,sa(e)):t.setAttributeNS(oa,e,n):ua(n)?t.removeAttribute(e):t.setAttribute(e,n)}function on(t,e){var i=e.elm,o=e.data,a=t.data;if(!(n(o.staticClass)&&n(o.class)&&(n(a)||n(a.staticClass)&&n(a.class)))){var s=Ae(e),u=i._transitionClasses;r(u)&&(s=Oe(s,je(u))),s!==i._prevClass&&(i.setAttribute(\"class\",s),i._prevClass=s)}}function an(t){function e(){(a||(a=[])).push(t.slice(h,i).trim()),h=i+1}var n,r,i,o,a,s=!1,u=!1,c=!1,l=!1,f=0,p=0,d=0,h=0;for(i=0;i<t.length;i++)if(r=n,n=t.charCodeAt(i),s)39===n&&92!==r&&(s=!1);else if(u)34===n&&92!==r&&(u=!1);else if(c)96===n&&92!==r&&(c=!1);else if(l)47===n&&92!==r&&(l=!1);else if(124!==n||124===t.charCodeAt(i+1)||124===t.charCodeAt(i-1)||f||p||d){switch(n){case 34:u=!0;break;case 39:s=!0;break;case 96:c=!0;break;case 40:d++;break;case 41:d--;break;case 91:p++;break;case 93:p--;break;case 123:f++;break;case 125:f--}if(47===n){for(var v=i-1,g=void 0;v>=0&&\" \"===(g=t.charAt(v));v--);g&&Ta.test(g)||(l=!0)}}else void 0===o?(h=i+1,o=t.slice(0,i).trim()):e();if(void 0===o?o=t.slice(0,i).trim():0!==h&&e(),a)for(i=0;i<a.length;i++)o=sn(o,a[i]);return o}function sn(t,e){var n=e.indexOf(\"(\");return n<0?'_f(\"'+e+'\")('+t+\")\":'_f(\"'+e.slice(0,n)+'\")('+t+\",\"+e.slice(n+1)}function un(t){}function cn(t,e){return t?t.map(function(t){return t[e]}).filter(function(t){return t}):[]}function ln(t,e,n){(t.props||(t.props=[])).push({name:e,value:n})}function fn(t,e,n){(t.attrs||(t.attrs=[])).push({name:e,value:n})}function pn(t,e,n,r,i,o){(t.directives||(t.directives=[])).push({name:e,rawName:n,value:r,arg:i,modifiers:o})}function dn(t,e,n,r,i,o){r&&r.capture&&(delete r.capture,e=\"!\"+e),r&&r.once&&(delete r.once,e=\"~\"+e),r&&r.passive&&(delete r.passive,e=\"&\"+e);var a;r&&r.native?(delete r.native,a=t.nativeEvents||(t.nativeEvents={})):a=t.events||(t.events={});var s={value:n,modifiers:r},u=a[e];Array.isArray(u)?i?u.unshift(s):u.push(s):a[e]=u?i?[s,u]:[u,s]:s}function hn(t,e,n){var r=vn(t,\":\"+e)||vn(t,\"v-bind:\"+e);if(null!=r)return an(r);if(!1!==n){var i=vn(t,e);if(null!=i)return JSON.stringify(i)}}function vn(t,e){var n;if(null!=(n=t.attrsMap[e]))for(var r=t.attrsList,i=0,o=r.length;i<o;i++)if(r[i].name===e){r.splice(i,1);break}return n}function gn(t,e,n){var r=n||{},i=r.number,o=r.trim,a=\"$$v\";o&&(a=\"(typeof $$v === 'string'? $$v.trim(): $$v)\"),i&&(a=\"_n(\"+a+\")\");var s=mn(e,a);t.model={value:\"(\"+e+\")\",expression:'\"'+e+'\"',callback:\"function ($$v) {\"+s+\"}\"}}function mn(t,e){var n=yn(t);return null===n.idx?t+\"=\"+e:\"var $$exp = \"+n.exp+\", $$idx = \"+n.idx+\";if (!Array.isArray($$exp)){\"+t+\"=\"+e+\"}else{$$exp.splice($$idx, 1, \"+e+\")}\"}function yn(t){if(Vo=t,zo=Vo.length,Ko=Jo=Qo=0,t.indexOf(\"[\")<0||t.lastIndexOf(\"]\")<zo-1)return{exp:t,idx:null};for(;!_n();)Xo=bn(),wn(Xo)?Cn(Xo):91===Xo&&xn(Xo);return{exp:t.substring(0,Jo),idx:t.substring(Jo+1,Qo)}}function bn(){return Vo.charCodeAt(++Ko)}function _n(){return Ko>=zo}function wn(t){return 34===t||39===t}function xn(t){var e=1;for(Jo=Ko;!_n();)if(t=bn(),wn(t))Cn(t);else if(91===t&&e++,93===t&&e--,0===e){Qo=Ko;break}}function Cn(t){for(var e=t;!_n()&&(t=bn())!==e;);}function Tn(t,e,n){Go=n;var r=e.value,i=e.modifiers,o=t.tag,a=t.attrsMap.type;if(\"select\"===o)An(t,r,i);else if(\"input\"===o&&\"checkbox\"===a)$n(t,r,i);else if(\"input\"===o&&\"radio\"===a)kn(t,r,i);else if(\"input\"===o||\"textarea\"===o)En(t,r,i);else if(!Bi.isReservedTag(o))return gn(t,r,i),!1;return!0}function $n(t,e,n){var r=n&&n.number,i=hn(t,\"value\")||\"null\",o=hn(t,\"true-value\")||\"true\",a=hn(t,\"false-value\")||\"false\";ln(t,\"checked\",\"Array.isArray(\"+e+\")?_i(\"+e+\",\"+i+\")>-1\"+(\"true\"===o?\":(\"+e+\")\":\":_q(\"+e+\",\"+o+\")\")),dn(t,ka,\"var $$a=\"+e+\",$$el=$event.target,$$c=$$el.checked?(\"+o+\"):(\"+a+\");if(Array.isArray($$a)){var $$v=\"+(r?\"_n(\"+i+\")\":i)+\",$$i=_i($$a,$$v);if($$c){$$i<0&&(\"+e+\"=$$a.concat($$v))}else{$$i>-1&&(\"+e+\"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{\"+mn(e,\"$$c\")+\"}\",null,!0)}function kn(t,e,n){var r=n&&n.number,i=hn(t,\"value\")||\"null\";i=r?\"_n(\"+i+\")\":i,ln(t,\"checked\",\"_q(\"+e+\",\"+i+\")\"),dn(t,ka,mn(e,i),null,!0)}function An(t,e,n){var r=n&&n.number,i='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return '+(r?\"_n(val)\":\"val\")+\"})\",o=\"var $$selectedVal = \"+i+\";\";o=o+\" \"+mn(e,\"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\"),dn(t,\"change\",o,null,!0)}function En(t,e,n){var r=t.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,u=!o&&\"range\"!==r,c=o?\"change\":\"range\"===r?$a:\"input\",l=\"$event.target.value\";s&&(l=\"$event.target.value.trim()\"),a&&(l=\"_n(\"+l+\")\");var f=mn(e,l);u&&(f=\"if($event.target.composing)return;\"+f),ln(t,\"value\",\"(\"+e+\")\"),dn(t,c,f,null,!0),(s||a||\"number\"===r)&&dn(t,\"blur\",\"$forceUpdate()\")}function Sn(t){var e;r(t[$a])&&(e=Ji?\"change\":\"input\",t[e]=[].concat(t[$a],t[e]||[]),delete t[$a]),r(t[ka])&&(e=to?\"click\":\"change\",t[e]=[].concat(t[ka],t[e]||[]),delete t[ka])}function On(t,e,n,r,i){if(n){var o=e,a=Zo;e=function(n){null!==(1===arguments.length?o(n):o.apply(null,arguments))&&jn(t,e,r,a)}}Zo.addEventListener(t,e,eo?{capture:r,passive:i}:r)}function jn(t,e,n,r){(r||Zo).removeEventListener(t,e,n)}function Nn(t,e){if(!n(t.data.on)||!n(e.data.on)){var r=e.data.on||{},i=t.data.on||{};Zo=e.elm,Sn(r),Y(r,i,On,jn,e.context)}}function Dn(t,e){if(!n(t.data.domProps)||!n(e.data.domProps)){var i,o,a=e.elm,s=t.data.domProps||{},u=e.data.domProps||{};r(u.__ob__)&&(u=e.data.domProps=y({},u));for(i in s)n(u[i])&&(a[i]=\"\");for(i in u)if(o=u[i],\"textContent\"!==i&&\"innerHTML\"!==i||(e.children&&(e.children.length=0),o!==s[i]))if(\"value\"===i){a._value=o;var c=n(o)?\"\":String(o);In(a,e,c)&&(a.value=c)}else a[i]=o}}function In(t,e,n){return!t.composing&&(\"option\"===e.tag||Ln(t,n)||Rn(t,n))}function Ln(t,e){return document.activeElement!==t&&t.value!==e}function Rn(t,e){var n=t.value,i=t._vModifiers;return r(i)&&i.number||\"number\"===t.type?f(n)!==f(e):r(i)&&i.trim?n.trim()!==e.trim():n!==e}function Pn(t){var e=Fn(t.style);return t.staticStyle?y(t.staticStyle,e):e}function Fn(t){return Array.isArray(t)?b(t):\"string\"==typeof t?Sa(t):t}function qn(t,e){var n,r={};if(e)for(var i=t;i.componentInstance;)i=i.componentInstance._vnode,i.data&&(n=Pn(i.data))&&y(r,n);(n=Pn(t.data))&&y(r,n);for(var o=t;o=o.parent;)o.data&&(n=Pn(o.data))&&y(r,n);return r}function Mn(t,e){var i=e.data,o=t.data;if(!(n(i.staticStyle)&&n(i.style)&&n(o.staticStyle)&&n(o.style))){var a,s,u=e.elm,c=o.staticStyle,l=o.normalizedStyle||o.style||{},f=c||l,p=Fn(e.data.style)||{};e.data.normalizedStyle=r(p.__ob__)?y({},p):p;var d=qn(e,!0);for(s in f)n(d[s])&&Na(u,s,\"\");for(s in d)(a=d[s])!==f[s]&&Na(u,s,null==a?\"\":a)}}function Hn(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(\" \")>-1?e.split(/\\s+/).forEach(function(e){return t.classList.add(e)}):t.classList.add(e);else{var n=\" \"+(t.getAttribute(\"class\")||\"\")+\" \";n.indexOf(\" \"+e+\" \")<0&&t.setAttribute(\"class\",(n+e).trim())}}function Bn(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(\" \")>-1?e.split(/\\s+/).forEach(function(e){return t.classList.remove(e)}):t.classList.remove(e);else{for(var n=\" \"+(t.getAttribute(\"class\")||\"\")+\" \",r=\" \"+e+\" \";n.indexOf(r)>=0;)n=n.replace(r,\" \");t.setAttribute(\"class\",n.trim())}}function Un(t){if(t){if(\"object\"==typeof t){var e={};return!1!==t.css&&y(e,Ra(t.name||\"v\")),y(e,t),e}return\"string\"==typeof t?Ra(t):void 0}}function Wn(t){Wa(function(){Wa(t)})}function zn(t,e){(t._transitionClasses||(t._transitionClasses=[])).push(e),Hn(t,e)}function Vn(t,e){t._transitionClasses&&d(t._transitionClasses,e),Bn(t,e)}function Xn(t,e,n){var r=Kn(t,e),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Fa?Ha:Ua,u=0,c=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++u>=a&&c()};setTimeout(function(){u<a&&c()},o+1),t.addEventListener(s,l)}function Kn(t,e){var n,r=window.getComputedStyle(t),i=r[Ma+\"Delay\"].split(\", \"),o=r[Ma+\"Duration\"].split(\", \"),a=Jn(i,o),s=r[Ba+\"Delay\"].split(\", \"),u=r[Ba+\"Duration\"].split(\", \"),c=Jn(s,u),l=0,f=0;return e===Fa?a>0&&(n=Fa,l=a,f=o.length):e===qa?c>0&&(n=qa,l=c,f=u.length):(l=Math.max(a,c),n=l>0?a>c?Fa:qa:null,f=n?n===Fa?o.length:u.length:0),{type:n,timeout:l,propCount:f,hasTransform:n===Fa&&za.test(r[Ma+\"Property\"])}}function Jn(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.apply(null,e.map(function(e,n){return Qn(e)+Qn(t[n])}))}function Qn(t){return 1e3*Number(t.slice(0,-1))}function Gn(t,e){var i=t.elm;r(i._leaveCb)&&(i._leaveCb.cancelled=!0,i._leaveCb());var o=Un(t.data.transition);if(!n(o)&&!r(i._enterCb)&&1===i.nodeType){for(var a=o.css,u=o.type,c=o.enterClass,l=o.enterToClass,p=o.enterActiveClass,d=o.appearClass,h=o.appearToClass,v=o.appearActiveClass,g=o.beforeEnter,m=o.enter,y=o.afterEnter,b=o.enterCancelled,_=o.beforeAppear,w=o.appear,x=o.afterAppear,T=o.appearCancelled,$=o.duration,k=$o,A=$o.$vnode;A&&A.parent;)A=A.parent,k=A.context;var E=!k._isMounted||!t.isRootInsert;if(!E||w||\"\"===w){var S=E&&d?d:c,O=E&&v?v:p,j=E&&h?h:l,N=E?_||g:g,D=E&&\"function\"==typeof w?w:m,I=E?x||y:y,L=E?T||b:b,R=f(s($)?$.enter:$),P=!1!==a&&!Qi,F=tr(D),q=i._enterCb=C(function(){P&&(Vn(i,j),Vn(i,O)),q.cancelled?(P&&Vn(i,S),L&&L(i)):I&&I(i),i._enterCb=null});t.data.show||tt(t.data.hook||(t.data.hook={}),\"insert\",function(){var e=i.parentNode,n=e&&e._pending&&e._pending[t.key];n&&n.tag===t.tag&&n.elm._leaveCb&&n.elm._leaveCb(),D&&D(i,q)}),N&&N(i),P&&(zn(i,S),zn(i,O),Wn(function(){zn(i,j),Vn(i,S),q.cancelled||F||(Yn(R)?setTimeout(q,R):Xn(i,u,q))})),t.data.show&&(e&&e(),D&&D(i,q)),P||F||q()}}}function Zn(t,e){function i(){T.cancelled||(t.data.show||((o.parentNode._pending||(o.parentNode._pending={}))[t.key]=t),h&&h(o),_&&(zn(o,l),zn(o,d),Wn(function(){zn(o,p),Vn(o,l),T.cancelled||w||(Yn(x)?setTimeout(T,x):Xn(o,c,T))})),v&&v(o,T),_||w||T())}var o=t.elm;r(o._enterCb)&&(o._enterCb.cancelled=!0,o._enterCb());var a=Un(t.data.transition);if(n(a))return e();if(!r(o._leaveCb)&&1===o.nodeType){var u=a.css,c=a.type,l=a.leaveClass,p=a.leaveToClass,d=a.leaveActiveClass,h=a.beforeLeave,v=a.leave,g=a.afterLeave,m=a.leaveCancelled,y=a.delayLeave,b=a.duration,_=!1!==u&&!Qi,w=tr(v),x=f(s(b)?b.leave:b),T=o._leaveCb=C(function(){o.parentNode&&o.parentNode._pending&&(o.parentNode._pending[t.key]=null),_&&(Vn(o,p),Vn(o,d)),T.cancelled?(_&&Vn(o,l),m&&m(o)):(e(),g&&g(o)),o._leaveCb=null});y?y(i):i()}}function Yn(t){return\"number\"==typeof t&&!isNaN(t)}function tr(t){if(n(t))return!1;var e=t.fns;return r(e)?tr(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function er(t,e){!0!==e.data.show&&Gn(e)}function nr(t,e,n){var r=e.value,i=t.multiple;if(!i||Array.isArray(r)){for(var o,a,s=0,u=t.options.length;s<u;s++)if(a=t.options[s],i)o=x(r,ir(a))>-1,a.selected!==o&&(a.selected=o);else if(w(ir(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));i||(t.selectedIndex=-1)}}function rr(t,e){for(var n=0,r=e.length;n<r;n++)if(w(ir(e[n]),t))return!1;return!0}function ir(t){return\"_value\"in t?t._value:t.value}function or(t){t.target.composing=!0}function ar(t){t.target.composing&&(t.target.composing=!1,sr(t.target,\"input\"))}function sr(t,e){var n=document.createEvent(\"HTMLEvents\");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function ur(t){return!t.componentInstance||t.data&&t.data.transition?t:ur(t.componentInstance._vnode)}function cr(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?cr(ct(e.children)):t}function lr(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var i=n._parentListeners;for(var o in i)e[Ii(o)]=i[o];return e}function fr(t,e){if(/\\d-keep-alive$/.test(e.tag))return t(\"keep-alive\",{props:e.componentOptions.propsData})}function pr(t){for(;t=t.parent;)if(t.data.transition)return!0}function dr(t,e){return e.key===t.key&&e.tag===t.tag}function hr(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function vr(t){t.data.newPos=t.elm.getBoundingClientRect()}function gr(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,i=e.top-n.top;if(r||i){t.data.moved=!0;var o=t.elm.style;o.transform=o.WebkitTransform=\"translate(\"+r+\"px,\"+i+\"px)\",o.transitionDuration=\"0s\"}}function mr(t){return is=is||document.createElement(\"div\"),is.innerHTML=t,is.textContent}function yr(t,e){var n=e?Bs:Hs;return t.replace(n,function(t){return Ms[t]})}function br(t,e){function n(e){l+=e,t=t.substring(e)}function r(t,n,r){var i,s;if(null==n&&(n=l),null==r&&(r=l),t&&(s=t.toLowerCase()),t)for(i=a.length-1;i>=0&&a[i].lowerCasedTag!==s;i--);else i=0;if(i>=0){for(var u=a.length-1;u>=i;u--)e.end&&e.end(a[u].tag,n,r);a.length=i,o=i&&a[i-1].tag}else\"br\"===s?e.start&&e.start(t,[],!0,n,r):\"p\"===s&&(e.start&&e.start(t,[],!1,n,r),e.end&&e.end(t,n,r))}for(var i,o,a=[],s=e.expectHTML,u=e.isUnaryTag||Pi,c=e.canBeLeftOpenTag||Pi,l=0;t;){if(i=t,o&&Fs(o)){var f=o.toLowerCase(),p=qs[f]||(qs[f]=new RegExp(\"([\\\\s\\\\S]*?)(</\"+f+\"[^>]*>)\",\"i\")),d=0,h=t.replace(p,function(t,n,r){return d=r.length,Fs(f)||\"noscript\"===f||(n=n.replace(/<!--([\\s\\S]*?)-->/g,\"$1\").replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g,\"$1\")),e.chars&&e.chars(n),\"\"});l+=t.length-h.length,t=h,r(f,l-d,l)}else{var v=t.indexOf(\"<\");if(0===v){if(ms.test(t)){var g=t.indexOf(\"--\\x3e\");if(g>=0){n(g+3);continue}}if(ys.test(t)){var m=t.indexOf(\"]>\");if(m>=0){n(m+2);continue}}var y=t.match(gs);if(y){n(y[0].length);continue}var b=t.match(vs);if(b){var _=l;n(b[0].length),r(b[1],_,l);continue}var w=function(){var e=t.match(ds);if(e){var r={tagName:e[1],attrs:[],start:l};n(e[0].length);for(var i,o;!(i=t.match(hs))&&(o=t.match(ls));)n(o[0].length),r.attrs.push(o);if(i)return r.unarySlash=i[1],n(i[0].length),r.end=l,r}}();if(w){!function(t){var n=t.tagName,i=t.unarySlash;s&&(\"p\"===o&&us(n)&&r(o),c(n)&&o===n&&r(n));for(var l=u(n)||\"html\"===n&&\"head\"===o||!!i,f=t.attrs.length,p=new Array(f),d=0;d<f;d++){var h=t.attrs[d];bs&&-1===h[0].indexOf('\"\"')&&(\"\"===h[3]&&delete h[3],\"\"===h[4]&&delete h[4],\"\"===h[5]&&delete h[5]);var v=h[3]||h[4]||h[5]||\"\";p[d]={name:h[1],value:yr(v,e.shouldDecodeNewlines)}}l||(a.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:p}),o=n),e.start&&e.start(n,p,l,t.start,t.end)}(w);continue}}var x=void 0,C=void 0,T=void 0;if(v>=0){for(C=t.slice(v);!(vs.test(C)||ds.test(C)||ms.test(C)||ys.test(C)||(T=C.indexOf(\"<\",1))<0);)v+=T,C=t.slice(v);x=t.substring(0,v),n(v)}v<0&&(x=t,t=\"\"),e.chars&&x&&e.chars(x)}if(t===i){e.chars&&e.chars(t);break}}r()}function _r(t,e){var n=e?Ws(e):Us;if(n.test(t)){for(var r,i,o=[],a=n.lastIndex=0;r=n.exec(t);){i=r.index,i>a&&o.push(JSON.stringify(t.slice(a,i)));var s=an(r[1].trim());o.push(\"_s(\"+s+\")\"),a=i+r[0].length}return a<t.length&&o.push(JSON.stringify(t.slice(a))),o.join(\"+\")}}function wr(t,e){function n(t){t.pre&&(s=!1),$s(t.tag)&&(u=!1)}_s=e.warn||un,As=e.getTagNamespace||Pi,ks=e.mustUseProp||Pi,$s=e.isPreTag||Pi,Cs=cn(e.modules,\"preTransformNode\"),xs=cn(e.modules,\"transformNode\"),Ts=cn(e.modules,\"postTransformNode\"),ws=e.delimiters;var r,i,o=[],a=!1!==e.preserveWhitespace,s=!1,u=!1;return br(t,{warn:_s,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,start:function(t,a,c){var l=i&&i.ns||As(t);Ji&&\"svg\"===l&&(a=Mr(a));var f={type:1,tag:t,attrsList:a,attrsMap:Pr(a),parent:i,children:[]};l&&(f.ns=l),qr(f)&&!oo()&&(f.forbidden=!0);for(var p=0;p<Cs.length;p++)Cs[p](f,e);if(s||(xr(f),f.pre&&(s=!0)),$s(f.tag)&&(u=!0),s)Cr(f);else{kr(f),Ar(f),jr(f),Tr(f),f.plain=!f.key&&!a.length,$r(f),Nr(f),Dr(f);for(var d=0;d<xs.length;d++)xs[d](f,e);Ir(f)}if(r?o.length||r.if&&(f.elseif||f.else)&&Or(r,{exp:f.elseif,block:f}):r=f,i&&!f.forbidden)if(f.elseif||f.else)Er(f,i);else if(f.slotScope){i.plain=!1;var h=f.slotTarget||'\"default\"';(i.scopedSlots||(i.scopedSlots={}))[h]=f}else i.children.push(f),f.parent=i;c?n(f):(i=f,o.push(f));for(var v=0;v<Ts.length;v++)Ts[v](f,e)},end:function(){var t=o[o.length-1],e=t.children[t.children.length-1];e&&3===e.type&&\" \"===e.text&&!u&&t.children.pop(),o.length-=1,i=o[o.length-1],n(t)},chars:function(t){if(i&&(!Ji||\"textarea\"!==i.tag||i.attrsMap.placeholder!==t)){var e=i.children;if(t=u||t.trim()?Fr(i)?t:Zs(t):a&&e.length?\" \":\"\"){var n;!s&&\" \"!==t&&(n=_r(t,ws))?e.push({type:2,expression:n,text:t}):\" \"===t&&e.length&&\" \"===e[e.length-1].text||e.push({type:3,text:t})}}}}),r}function xr(t){null!=vn(t,\"v-pre\")&&(t.pre=!0)}function Cr(t){var e=t.attrsList.length;if(e)for(var n=t.attrs=new Array(e),r=0;r<e;r++)n[r]={name:t.attrsList[r].name,value:JSON.stringify(t.attrsList[r].value)};else t.pre||(t.plain=!0)}function Tr(t){var e=hn(t,\"key\");e&&(t.key=e)}function $r(t){var e=hn(t,\"ref\");e&&(t.ref=e,t.refInFor=Lr(t))}function kr(t){var e;if(e=vn(t,\"v-for\")){var n=e.match(Xs);if(!n)return;t.for=n[2].trim();var r=n[1].trim(),i=r.match(Ks);i?(t.alias=i[1].trim(),t.iterator1=i[2].trim(),i[3]&&(t.iterator2=i[3].trim())):t.alias=r}}function Ar(t){var e=vn(t,\"v-if\");if(e)t.if=e,Or(t,{exp:e,block:t});else{null!=vn(t,\"v-else\")&&(t.else=!0);var n=vn(t,\"v-else-if\");n&&(t.elseif=n)}}function Er(t,e){var n=Sr(e.children);n&&n.if&&Or(n,{exp:t.elseif,block:t})}function Sr(t){for(var e=t.length;e--;){if(1===t[e].type)return t[e];t.pop()}}function Or(t,e){t.ifConditions||(t.ifConditions=[]),t.ifConditions.push(e)}function jr(t){null!=vn(t,\"v-once\")&&(t.once=!0)}function Nr(t){if(\"slot\"===t.tag)t.slotName=hn(t,\"name\");else{var e=hn(t,\"slot\");e&&(t.slotTarget='\"\"'===e?'\"default\"':e),\"template\"===t.tag&&(t.slotScope=vn(t,\"scope\"))}}function Dr(t){var e;(e=hn(t,\"is\"))&&(t.component=e),null!=vn(t,\"inline-template\")&&(t.inlineTemplate=!0)}function Ir(t){var e,n,r,i,o,a,s,u=t.attrsList;for(e=0,n=u.length;e<n;e++)if(r=i=u[e].name,o=u[e].value,Vs.test(r))if(t.hasBindings=!0,a=Rr(r),a&&(r=r.replace(Gs,\"\")),Qs.test(r))r=r.replace(Qs,\"\"),o=an(o),s=!1,a&&(a.prop&&(s=!0,\"innerHtml\"===(r=Ii(r))&&(r=\"innerHTML\")),a.camel&&(r=Ii(r)),a.sync&&dn(t,\"update:\"+Ii(r),mn(o,\"$event\"))),s||ks(t.tag,t.attrsMap.type,r)?ln(t,r,o):fn(t,r,o);else if(zs.test(r))r=r.replace(zs,\"\"),dn(t,r,o,a,!1,_s);else{r=r.replace(Vs,\"\");var c=r.match(Js),l=c&&c[1];l&&(r=r.slice(0,-(l.length+1))),pn(t,r,i,o,l,a)}else{fn(t,r,JSON.stringify(o))}}function Lr(t){for(var e=t;e;){if(void 0!==e.for)return!0;e=e.parent}return!1}function Rr(t){var e=t.match(Gs);if(e){var n={};return e.forEach(function(t){n[t.slice(1)]=!0}),n}}function Pr(t){for(var e={},n=0,r=t.length;n<r;n++)e[t[n].name]=t[n].value;return e}function Fr(t){return\"script\"===t.tag||\"style\"===t.tag}function qr(t){return\"style\"===t.tag||\"script\"===t.tag&&(!t.attrsMap.type||\"text/javascript\"===t.attrsMap.type)}function Mr(t){for(var e=[],n=0;n<t.length;n++){var r=t[n];Ys.test(r.name)||(r.name=r.name.replace(tu,\"\"),e.push(r))}return e}function Hr(t,e){t&&(Es=eu(e.staticKeys||\"\"),Ss=e.isReservedTag||Pi,Ur(t),Wr(t,!1))}function Br(t){return p(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs\"+(t?\",\"+t:\"\"))}function Ur(t){if(t.static=Vr(t),1===t.type){if(!Ss(t.tag)&&\"slot\"!==t.tag&&null==t.attrsMap[\"inline-template\"])return;for(var e=0,n=t.children.length;e<n;e++){var r=t.children[e];Ur(r),r.static||(t.static=!1)}}}function Wr(t,e){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=e),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return void(t.staticRoot=!0);if(t.staticRoot=!1,t.children)for(var n=0,r=t.children.length;n<r;n++)Wr(t.children[n],e||!!t.for);t.ifConditions&&zr(t.ifConditions,e)}}function zr(t,e){for(var n=1,r=t.length;n<r;n++)Wr(t[n].block,e)}function Vr(t){return 2!==t.type&&(3===t.type||!(!t.pre&&(t.hasBindings||t.if||t.for||Ni(t.tag)||!Ss(t.tag)||Xr(t)||!Object.keys(t).every(Es))))}function Xr(t){for(;t.parent;){if(t=t.parent,\"template\"!==t.tag)return!1;if(t.for)return!0}return!1}function Kr(t,e,n){var r=e?\"nativeOn:{\":\"on:{\";for(var i in t){r+='\"'+i+'\":'+Jr(i,t[i])+\",\"}return r.slice(0,-1)+\"}\"}function Jr(t,e){if(!e)return\"function(){}\";if(Array.isArray(e))return\"[\"+e.map(function(e){return Jr(t,e)}).join(\",\")+\"]\";var n=ru.test(e.value),r=nu.test(e.value);if(e.modifiers){var i=\"\",o=\"\",a=[];for(var s in e.modifiers)au[s]?(o+=au[s],iu[s]&&a.push(s)):a.push(s);a.length&&(i+=Qr(a)),o&&(i+=o);return\"function($event){\"+i+(n?e.value+\"($event)\":r?\"(\"+e.value+\")($event)\":e.value)+\"}\"}return n||r?e.value:\"function($event){\"+e.value+\"}\"}function Qr(t){return\"if(!('button' in $event)&&\"+t.map(Gr).join(\"&&\")+\")return null;\"}function Gr(t){var e=parseInt(t,10);if(e)return\"$event.keyCode!==\"+e;var n=iu[t];return\"_k($event.keyCode,\"+JSON.stringify(t)+(n?\",\"+JSON.stringify(n):\"\")+\")\"}function Zr(t,e){t.wrapData=function(n){return\"_b(\"+n+\",'\"+t.tag+\"',\"+e.value+(e.modifiers&&e.modifiers.prop?\",true\":\"\")+\")\"}}function Yr(t,e){var n=Ls,r=Ls=[],i=Rs;Rs=0,Ps=e,Os=e.warn||un,js=cn(e.modules,\"transformCode\"),Ns=cn(e.modules,\"genData\"),Ds=e.directives||{},Is=e.isReservedTag||Pi;var o=t?ti(t):'_c(\"div\")';return Ls=n,Rs=i,{render:\"with(this){return \"+o+\"}\",staticRenderFns:r}}function ti(t){if(t.staticRoot&&!t.staticProcessed)return ei(t);if(t.once&&!t.onceProcessed)return ni(t);if(t.for&&!t.forProcessed)return oi(t);if(t.if&&!t.ifProcessed)return ri(t);if(\"template\"!==t.tag||t.slotTarget){if(\"slot\"===t.tag)return yi(t);var e;if(t.component)e=bi(t.component,t);else{var n=t.plain?void 0:ai(t),r=t.inlineTemplate?null:pi(t,!0);e=\"_c('\"+t.tag+\"'\"+(n?\",\"+n:\"\")+(r?\",\"+r:\"\")+\")\"}for(var i=0;i<js.length;i++)e=js[i](t,e);return e}return pi(t)||\"void 0\"}function ei(t){return t.staticProcessed=!0,Ls.push(\"with(this){return \"+ti(t)+\"}\"),\"_m(\"+(Ls.length-1)+(t.staticInFor?\",true\":\"\")+\")\"}function ni(t){if(t.onceProcessed=!0,t.if&&!t.ifProcessed)return ri(t);if(t.staticInFor){for(var e=\"\",n=t.parent;n;){if(n.for){e=n.key;break}n=n.parent}return e?\"_o(\"+ti(t)+\",\"+Rs+++(e?\",\"+e:\"\")+\")\":ti(t)}return ei(t)}function ri(t){return t.ifProcessed=!0,ii(t.ifConditions.slice())}function ii(t){function e(t){return t.once?ni(t):ti(t)}if(!t.length)return\"_e()\";var n=t.shift();return n.exp?\"(\"+n.exp+\")?\"+e(n.block)+\":\"+ii(t):\"\"+e(n.block)}function oi(t){var e=t.for,n=t.alias,r=t.iterator1?\",\"+t.iterator1:\"\",i=t.iterator2?\",\"+t.iterator2:\"\";return t.forProcessed=!0,\"_l((\"+e+\"),function(\"+n+r+i+\"){return \"+ti(t)+\"})\"}function ai(t){var e=\"{\",n=si(t);n&&(e+=n+\",\"),t.key&&(e+=\"key:\"+t.key+\",\"),t.ref&&(e+=\"ref:\"+t.ref+\",\"),t.refInFor&&(e+=\"refInFor:true,\"),t.pre&&(e+=\"pre:true,\"),t.component&&(e+='tag:\"'+t.tag+'\",');for(var r=0;r<Ns.length;r++)e+=Ns[r](t);if(t.attrs&&(e+=\"attrs:{\"+_i(t.attrs)+\"},\"),t.props&&(e+=\"domProps:{\"+_i(t.props)+\"},\"),t.events&&(e+=Kr(t.events,!1,Os)+\",\"),t.nativeEvents&&(e+=Kr(t.nativeEvents,!0,Os)+\",\"),t.slotTarget&&(e+=\"slot:\"+t.slotTarget+\",\"),t.scopedSlots&&(e+=ci(t.scopedSlots)+\",\"),t.model&&(e+=\"model:{value:\"+t.model.value+\",callback:\"+t.model.callback+\",expression:\"+t.model.expression+\"},\"),t.inlineTemplate){var i=ui(t);i&&(e+=i+\",\")}return e=e.replace(/,$/,\"\")+\"}\",t.wrapData&&(e=t.wrapData(e)),e}function si(t){var e=t.directives;if(e){var n,r,i,o,a=\"directives:[\",s=!1;for(n=0,r=e.length;n<r;n++){i=e[n],o=!0;var u=Ds[i.name]||su[i.name];u&&(o=!!u(t,i,Os)),o&&(s=!0,a+='{name:\"'+i.name+'\",rawName:\"'+i.rawName+'\"'+(i.value?\",value:(\"+i.value+\"),expression:\"+JSON.stringify(i.value):\"\")+(i.arg?',arg:\"'+i.arg+'\"':\"\")+(i.modifiers?\",modifiers:\"+JSON.stringify(i.modifiers):\"\")+\"},\")}return s?a.slice(0,-1)+\"]\":void 0}}function ui(t){var e=t.children[0];if(1===e.type){var n=Yr(e,Ps);return\"inlineTemplate:{render:function(){\"+n.render+\"},staticRenderFns:[\"+n.staticRenderFns.map(function(t){return\"function(){\"+t+\"}\"}).join(\",\")+\"]}\"}}function ci(t){return\"scopedSlots:_u([\"+Object.keys(t).map(function(e){return li(e,t[e])}).join(\",\")+\"])\"}function li(t,e){return e.for&&!e.forProcessed?fi(t,e):\"{key:\"+t+\",fn:function(\"+String(e.attrsMap.scope)+\"){return \"+(\"template\"===e.tag?pi(e)||\"void 0\":ti(e))+\"}}\"}function fi(t,e){var n=e.for,r=e.alias,i=e.iterator1?\",\"+e.iterator1:\"\",o=e.iterator2?\",\"+e.iterator2:\"\";return e.forProcessed=!0,\"_l((\"+n+\"),function(\"+r+i+o+\"){return \"+li(t,e)+\"})\"}function pi(t,e){var n=t.children;if(n.length){var r=n[0];if(1===n.length&&r.for&&\"template\"!==r.tag&&\"slot\"!==r.tag)return ti(r);var i=e?di(n):0;return\"[\"+n.map(gi).join(\",\")+\"]\"+(i?\",\"+i:\"\")}}function di(t){for(var e=0,n=0;n<t.length;n++){var r=t[n];if(1===r.type){if(hi(r)||r.ifConditions&&r.ifConditions.some(function(t){return hi(t.block)})){e=2;break}(vi(r)||r.ifConditions&&r.ifConditions.some(function(t){return vi(t.block)}))&&(e=1)}}return e}function hi(t){return void 0!==t.for||\"template\"===t.tag||\"slot\"===t.tag}function vi(t){return!Is(t.tag)}function gi(t){return 1===t.type?ti(t):mi(t)}function mi(t){return\"_v(\"+(2===t.type?t.expression:wi(JSON.stringify(t.text)))+\")\"}function yi(t){var e=t.slotName||'\"default\"',n=pi(t),r=\"_t(\"+e+(n?\",\"+n:\"\"),i=t.attrs&&\"{\"+t.attrs.map(function(t){return Ii(t.name)+\":\"+t.value}).join(\",\")+\"}\",o=t.attrsMap[\"v-bind\"];return!i&&!o||n||(r+=\",null\"),i&&(r+=\",\"+i),o&&(r+=(i?\"\":\",null\")+\",\"+o),r+\")\"}function bi(t,e){var n=e.inlineTemplate?null:pi(e,!0);return\"_c(\"+t+\",\"+ai(e)+(n?\",\"+n:\"\")+\")\"}function _i(t){for(var e=\"\",n=0;n<t.length;n++){var r=t[n];e+='\"'+r.name+'\":'+wi(r.value)+\",\"}return e.slice(0,-1)}function wi(t){return t.replace(/\\u2028/g,\"\\\\u2028\").replace(/\\u2029/g,\"\\\\u2029\")}function xi(t,e){var n=wr(t.trim(),e);Hr(n,e);var r=Yr(n,e);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}}function Ci(t,e){try{return new Function(t)}catch(n){return e.push({err:n,code:t}),_}}function Ti(t,e){var n=(e.warn,vn(t,\"class\"));n&&(t.staticClass=JSON.stringify(n));var r=hn(t,\"class\",!1);r&&(t.classBinding=r)}function $i(t){var e=\"\";return t.staticClass&&(e+=\"staticClass:\"+t.staticClass+\",\"),t.classBinding&&(e+=\"class:\"+t.classBinding+\",\"),e}function ki(t,e){var n=(e.warn,vn(t,\"style\"));if(n){t.staticStyle=JSON.stringify(Sa(n))}var r=hn(t,\"style\",!1);r&&(t.styleBinding=r)}function Ai(t){var e=\"\";return t.staticStyle&&(e+=\"staticStyle:\"+t.staticStyle+\",\"),t.styleBinding&&(e+=\"style:(\"+t.styleBinding+\"),\"),e}function Ei(t,e){e.value&&ln(t,\"textContent\",\"_s(\"+e.value+\")\")}function Si(t,e){e.value&&ln(t,\"innerHTML\",\"_s(\"+e.value+\")\")}function Oi(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement(\"div\");return e.appendChild(t.cloneNode(!0)),e.innerHTML}var ji=Object.prototype.toString,Ni=p(\"slot,component\",!0),Di=Object.prototype.hasOwnProperty,Ii=v(function(t){return t.replace(/-(\\w)/g,function(t,e){return e?e.toUpperCase():\"\"})}),Li=v(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}),Ri=v(function(t){return t.replace(/([^-])([A-Z])/g,\"$1-$2\").replace(/([^-])([A-Z])/g,\"$1-$2\").toLowerCase()}),Pi=function(){return!1},Fi=function(t){return t},qi=\"data-server-rendered\",Mi=[\"component\",\"directive\",\"filter\"],Hi=[\"beforeCreate\",\"created\",\"beforeMount\",\"mounted\",\"beforeUpdate\",\"updated\",\"beforeDestroy\",\"destroyed\",\"activated\",\"deactivated\"],Bi={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:Pi,isReservedAttr:Pi,isUnknownElement:Pi,getTagNamespace:_,parsePlatformTagName:Fi,mustUseProp:Pi,_lifecycleHooks:Hi},Ui=Object.freeze({}),Wi=/[^\\w.$]/,zi=_,Vi=\"__proto__\"in{},Xi=\"undefined\"!=typeof window,Ki=Xi&&window.navigator.userAgent.toLowerCase(),Ji=Ki&&/msie|trident/.test(Ki),Qi=Ki&&Ki.indexOf(\"msie 9.0\")>0,Gi=Ki&&Ki.indexOf(\"edge/\")>0,Zi=Ki&&Ki.indexOf(\"android\")>0,Yi=Ki&&/iphone|ipad|ipod|ios/.test(Ki),to=Ki&&/chrome\\/\\d+/.test(Ki)&&!Gi,eo=!1;if(Xi)try{var no={};Object.defineProperty(no,\"passive\",{get:function(){eo=!0}}),window.addEventListener(\"test-passive\",null,no)}catch(t){}var ro,io,oo=function(){return void 0===ro&&(ro=!Xi&&void 0!==e&&\"server\"===e.process.env.VUE_ENV),ro},ao=Xi&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,so=\"undefined\"!=typeof Symbol&&E(Symbol)&&\"undefined\"!=typeof Reflect&&E(Reflect.ownKeys),uo=function(){function t(){r=!1;var t=n.slice(0);n.length=0;for(var e=0;e<t.length;e++)t[e]()}var e,n=[],r=!1;if(\"undefined\"!=typeof Promise&&E(Promise)){var i=Promise.resolve(),o=function(t){};e=function(){i.then(t).catch(o),Yi&&setTimeout(_)}}else if(\"undefined\"==typeof MutationObserver||!E(MutationObserver)&&\"[object MutationObserverConstructor]\"!==MutationObserver.toString())e=function(){setTimeout(t,0)};else{var a=1,s=new MutationObserver(t),u=document.createTextNode(String(a));s.observe(u,{characterData:!0}),e=function(){a=(a+1)%2,u.data=String(a)}}return function(t,i){var o;if(n.push(function(){if(t)try{t.call(i)}catch(t){A(t,i,\"nextTick\")}else o&&o(i)}),r||(r=!0,e()),!t&&\"undefined\"!=typeof Promise)return new Promise(function(t,e){o=t})}}();io=\"undefined\"!=typeof Set&&E(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var co=0,lo=function(){this.id=co++,this.subs=[]};lo.prototype.addSub=function(t){this.subs.push(t)},lo.prototype.removeSub=function(t){d(this.subs,t)},lo.prototype.depend=function(){lo.target&&lo.target.addDep(this)},lo.prototype.notify=function(){for(var t=this.subs.slice(),e=0,n=t.length;e<n;e++)t[e].update()},lo.target=null;var fo=[],po=Array.prototype,ho=Object.create(po);[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\",\"sort\",\"reverse\"].forEach(function(t){var e=po[t];$(ho,t,function(){for(var n=arguments,r=arguments.length,i=new Array(r);r--;)i[r]=n[r];var o,a=e.apply(this,i),s=this.__ob__;switch(t){case\"push\":case\"unshift\":o=i;break;case\"splice\":o=i.slice(2)}return o&&s.observeArray(o),s.dep.notify(),a})});var vo=Object.getOwnPropertyNames(ho),go={shouldConvert:!0,isSettingProps:!1},mo=function(t){if(this.value=t,this.dep=new lo,this.vmCount=0,$(t,\"__ob__\",this),Array.isArray(t)){(Vi?j:N)(t,ho,vo),this.observeArray(t)}else this.walk(t)};mo.prototype.walk=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)I(t,e[n],t[e[n]])},mo.prototype.observeArray=function(t){for(var e=0,n=t.length;e<n;e++)D(t[e])};var yo=Bi.optionMergeStrategies;yo.data=function(t,e,n){return n?t||e?function(){var r=\"function\"==typeof e?e.call(n):e,i=\"function\"==typeof t?t.call(n):void 0;return r?F(r,i):i}:void 0:e?\"function\"!=typeof e?t:t?function(){return F(e.call(this),t.call(this))}:e:t},Hi.forEach(function(t){yo[t]=q}),Mi.forEach(function(t){yo[t+\"s\"]=M}),yo.watch=function(t,e){if(!e)return Object.create(t||null);if(!t)return e;var n={};y(n,t);for(var r in e){var i=n[r],o=e[r];i&&!Array.isArray(i)&&(i=[i]),n[r]=i?i.concat(o):[o]}return n},yo.props=yo.methods=yo.computed=function(t,e){if(!e)return Object.create(t||null);if(!t)return e;var n=Object.create(null);return y(n,t),y(n,e),n};var bo=function(t,e){return void 0===e?t:e},_o=function(t,e,n,r,i,o,a){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=i,this.ns=void 0,this.context=o,this.functionalContext=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1},wo={child:{}};wo.child.get=function(){return this.componentInstance},Object.defineProperties(_o.prototype,wo);var xo,Co=function(){var t=new _o;return t.text=\"\",t.isComment=!0,t},To=v(function(t){var e=\"&\"===t.charAt(0);t=e?t.slice(1):t;var n=\"~\"===t.charAt(0);t=n?t.slice(1):t;var r=\"!\"===t.charAt(0);return t=r?t.slice(1):t,{name:t,once:n,capture:r,passive:e}}),$o=null,ko=[],Ao=[],Eo={},So=!1,Oo=!1,jo=0,No=0,Do=function(t,e,n,r){this.vm=t,t._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++No,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new io,this.newDepIds=new io,this.expression=\"\",\"function\"==typeof e?this.getter=e:(this.getter=k(e),this.getter||(this.getter=function(){})),this.value=this.lazy?void 0:this.get()};Do.prototype.get=function(){S(this);var t,e=this.vm;if(this.user)try{t=this.getter.call(e,e)}catch(t){A(t,e,'getter for watcher \"'+this.expression+'\"')}else t=this.getter.call(e,e);return this.deep&&Ot(t),O(),this.cleanupDeps(),t},Do.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},Do.prototype.cleanupDeps=function(){for(var t=this,e=this.deps.length;e--;){var n=t.deps[e];t.newDepIds.has(n.id)||n.removeSub(t)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},Do.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():St(this)},Do.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||s(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){A(t,this.vm,'callback for watcher \"'+this.expression+'\"')}else this.cb.call(this.vm,t,e)}}},Do.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Do.prototype.depend=function(){for(var t=this,e=this.deps.length;e--;)t.deps[e].depend()},Do.prototype.teardown=function(){var t=this;if(this.active){this.vm._isBeingDestroyed||d(this.vm._watchers,this);for(var e=this.deps.length;e--;)t.deps[e].removeSub(t);this.active=!1}};var Io=new io,Lo={enumerable:!0,configurable:!0,get:_,set:_},Ro={lazy:!0},Po={init:function(t,e,n,r){if(!t.componentInstance||t.componentInstance._isDestroyed){(t.componentInstance=Jt(t,$o,n,r)).$mount(e?t.elm:void 0,e)}else if(t.data.keepAlive){var i=t;Po.prepatch(i,i)}},prepatch:function(t,e){var n=e.componentOptions;bt(e.componentInstance=t.componentInstance,n.propsData,n.listeners,e,n.children)},insert:function(t){var e=t.context,n=t.componentInstance;n._isMounted||(n._isMounted=!0,Ct(n,\"mounted\")),t.data.keepAlive&&(e._isMounted?At(n):wt(n,!0))},destroy:function(t){var e=t.componentInstance;e._isDestroyed||(t.data.keepAlive?xt(e,!0):e.$destroy())}},Fo=Object.keys(Po),qo=1,Mo=2,Ho=0;!function(t){t.prototype._init=function(t){var e=this;e._uid=Ho++,e._isVue=!0,t&&t._isComponent?pe(e,t):e.$options=U(de(e.constructor),t||{},e),e._renderProxy=e,e._self=e,mt(e),lt(e),fe(e),Ct(e,\"beforeCreate\"),Wt(e),Dt(e),Ut(e),Ct(e,\"created\"),e.$options.el&&e.$mount(e.$options.el)}}(ge),function(t){var e={};e.get=function(){return this._data};var n={};n.get=function(){return this._props},Object.defineProperty(t.prototype,\"$data\",e),Object.defineProperty(t.prototype,\"$props\",n),t.prototype.$set=L,t.prototype.$delete=R,t.prototype.$watch=function(t,e,n){var r=this;n=n||{},n.user=!0;var i=new Do(r,t,e,n);return n.immediate&&e.call(r,i.value),function(){i.teardown()}}}(ge),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var r=this,i=this;if(Array.isArray(t))for(var o=0,a=t.length;o<a;o++)r.$on(t[o],n);else(i._events[t]||(i._events[t]=[])).push(n),e.test(t)&&(i._hasHookEvent=!0);return i},t.prototype.$once=function(t,e){function n(){r.$off(t,n),e.apply(r,arguments)}var r=this;return n.fn=e,r.$on(t,n),r},t.prototype.$off=function(t,e){var n=this,r=this;if(!arguments.length)return r._events=Object.create(null),r;if(Array.isArray(t)){for(var i=0,o=t.length;i<o;i++)n.$off(t[i],e);return r}var a=r._events[t];if(!a)return r;if(1===arguments.length)return r._events[t]=null,r;for(var s,u=a.length;u--;)if((s=a[u])===e||s.fn===e){a.splice(u,1);break}return r},t.prototype.$emit=function(t){var e=this,n=e._events[t];if(n){n=n.length>1?m(n):n;for(var r=m(arguments,1),i=0,o=n.length;i<o;i++)n[i].apply(e,r)}return e}}(ge),function(t){t.prototype._update=function(t,e){var n=this;n._isMounted&&Ct(n,\"beforeUpdate\");var r=n.$el,i=n._vnode,o=$o;$o=n,n._vnode=t,n.$el=i?n.__patch__(i,t):n.__patch__(n.$el,t,e,!1,n.$options._parentElm,n.$options._refElm),$o=o,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},t.prototype.$forceUpdate=function(){var t=this;t._watcher&&t._watcher.update()},t.prototype.$destroy=function(){var t=this;if(!t._isBeingDestroyed){Ct(t,\"beforeDestroy\"),t._isBeingDestroyed=!0;var e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||d(e.$children,t),t._watcher&&t._watcher.teardown();for(var n=t._watchers.length;n--;)t._watchers[n].teardown();t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),Ct(t,\"destroyed\"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$options._parentElm=t.$options._refElm=null}}}(ge),function(t){t.prototype.$nextTick=function(t){return uo(t,this)},t.prototype._render=function(){var t=this,e=t.$options,n=e.render,r=e.staticRenderFns,i=e._parentVnode;if(t._isMounted)for(var o in t.$slots)t.$slots[o]=G(t.$slots[o]);t.$scopedSlots=i&&i.data.scopedSlots||Ui,r&&!t._staticTrees&&(t._staticTrees=[]),t.$vnode=i;var a;try{a=n.call(t._renderProxy,t.$createElement)}catch(e){A(e,t,\"render function\"),a=t._vnode}return a instanceof _o||(a=Co()),a.parent=i,a},t.prototype._o=ue,t.prototype._n=f,t.prototype._s=l,t.prototype._l=ne,t.prototype._t=re,t.prototype._q=w,t.prototype._i=x,t.prototype._m=se,t.prototype._f=ie,t.prototype._k=oe,t.prototype._b=ae,t.prototype._v=J,t.prototype._e=Co,t.prototype._u=gt}(ge);var Bo=[String,RegExp],Uo={name:\"keep-alive\",abstract:!0,props:{include:Bo,exclude:Bo},created:function(){this.cache=Object.create(null)},destroyed:function(){var t=this;for(var e in t.cache)ke(t.cache[e])},watch:{include:function(t){$e(this.cache,this._vnode,function(e){return Te(t,e)})},exclude:function(t){$e(this.cache,this._vnode,function(e){return!Te(t,e)})}},render:function(){var t=ct(this.$slots.default),e=t&&t.componentOptions;if(e){var n=Ce(e);if(n&&(this.include&&!Te(this.include,n)||this.exclude&&Te(this.exclude,n)))return t;var r=null==t.key?e.Ctor.cid+(e.tag?\"::\"+e.tag:\"\"):t.key;this.cache[r]?t.componentInstance=this.cache[r].componentInstance:this.cache[r]=t,t.data.keepAlive=!0}return t}},Wo={KeepAlive:Uo};!function(t){var e={};e.get=function(){return Bi},Object.defineProperty(t,\"config\",e),t.util={warn:zi,extend:y,mergeOptions:U,defineReactive:I},t.set=L,t.delete=R,t.nextTick=uo,t.options=Object.create(null),Mi.forEach(function(e){t.options[e+\"s\"]=Object.create(null)}),t.options._base=t,y(t.options.components,Wo),me(t),ye(t),be(t),xe(t)}(ge),Object.defineProperty(ge.prototype,\"$isServer\",{get:oo}),Object.defineProperty(ge.prototype,\"$ssrContext\",{get:function(){return this.$vnode.ssrContext}}),ge.version=\"2.3.3\";var zo,Vo,Xo,Ko,Jo,Qo,Go,Zo,Yo,ta=p(\"style,class\"),ea=p(\"input,textarea,option,select\"),na=function(t,e,n){return\"value\"===n&&ea(t)&&\"button\"!==e||\"selected\"===n&&\"option\"===t||\"checked\"===n&&\"input\"===t||\"muted\"===n&&\"video\"===t},ra=p(\"contenteditable,draggable,spellcheck\"),ia=p(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible\"),oa=\"http://www.w3.org/1999/xlink\",aa=function(t){return\":\"===t.charAt(5)&&\"xlink\"===t.slice(0,5)},sa=function(t){return aa(t)?t.slice(6,t.length):\"\"},ua=function(t){return null==t||!1===t},ca={svg:\"http://www.w3.org/2000/svg\",math:\"http://www.w3.org/1998/Math/MathML\"},la=p(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template\"),fa=p(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\",!0),pa=function(t){return\"pre\"===t},da=function(t){return la(t)||fa(t)},ha=Object.create(null),va=Object.freeze({createElement:Le,createElementNS:Re,createTextNode:Pe,createComment:Fe,insertBefore:qe,removeChild:Me,appendChild:He,parentNode:Be,nextSibling:Ue,tagName:We,setTextContent:ze,setAttribute:Ve}),ga={create:function(t,e){Xe(e)},update:function(t,e){t.data.ref!==e.data.ref&&(Xe(t,!0),Xe(e))},destroy:function(t){Xe(t,!0)}},ma=new _o(\"\",{},[]),ya=[\"create\",\"activate\",\"update\",\"remove\",\"destroy\"],ba={create:Ge,update:Ge,destroy:function(t){Ge(t,ma)}},_a=Object.create(null),wa=[ga,ba],xa={create:nn,update:nn},Ca={create:on,update:on},Ta=/[\\w).+\\-_$\\]]/,$a=\"__r\",ka=\"__c\",Aa={create:Nn,update:Nn},Ea={create:Dn,update:Dn},Sa=v(function(t){var e={};return t.split(/;(?![^(]*\\))/g).forEach(function(t){if(t){var n=t.split(/:(.+)/);n.length>1&&(e[n[0].trim()]=n[1].trim())}}),e}),Oa=/^--/,ja=/\\s*!important$/,Na=function(t,e,n){if(Oa.test(e))t.style.setProperty(e,n);else if(ja.test(n))t.style.setProperty(e,n.replace(ja,\"\"),\"important\");else{var r=Ia(e);if(Array.isArray(n))for(var i=0,o=n.length;i<o;i++)t.style[r]=n[i];else t.style[r]=n}},Da=[\"Webkit\",\"Moz\",\"ms\"],Ia=v(function(t){if(Yo=Yo||document.createElement(\"div\"),\"filter\"!==(t=Ii(t))&&t in Yo.style)return t;for(var e=t.charAt(0).toUpperCase()+t.slice(1),n=0;n<Da.length;n++){var r=Da[n]+e;if(r in Yo.style)return r}}),La={create:Mn,update:Mn},Ra=v(function(t){return{enterClass:t+\"-enter\",enterToClass:t+\"-enter-to\",enterActiveClass:t+\"-enter-active\",leaveClass:t+\"-leave\",leaveToClass:t+\"-leave-to\",leaveActiveClass:t+\"-leave-active\"}}),Pa=Xi&&!Qi,Fa=\"transition\",qa=\"animation\",Ma=\"transition\",Ha=\"transitionend\",Ba=\"animation\",Ua=\"animationend\";Pa&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Ma=\"WebkitTransition\",Ha=\"webkitTransitionEnd\"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Ba=\"WebkitAnimation\",Ua=\"webkitAnimationEnd\"));var Wa=Xi&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout,za=/\\b(transform|all)(,|$)/,Va=Xi?{create:er,activate:er,remove:function(t,e){!0!==t.data.show?Zn(t,e):e()}}:{},Xa=[xa,Ca,Aa,Ea,La,Va],Ka=Xa.concat(wa),Ja=function(t){function e(t){return new _o(O.tagName(t).toLowerCase(),{},[],void 0,t)}function o(t,e){function n(){0==--n.listeners&&s(t)}return n.listeners=e,n}function s(t){var e=O.parentNode(t);r(e)&&O.removeChild(e,t)}function u(t,e,n,o,a){if(t.isRootInsert=!a,!c(t,e,n,o)){var s=t.data,u=t.children,l=t.tag;r(l)?(t.elm=t.ns?O.createElementNS(t.ns,l):O.createElement(l,t),m(t),h(t,u,e),r(s)&&g(t,e),d(n,t.elm,o)):i(t.isComment)?(t.elm=O.createComment(t.text),d(n,t.elm,o)):(t.elm=O.createTextNode(t.text),d(n,t.elm,o))}}function c(t,e,n,o){var a=t.data;if(r(a)){var s=r(t.componentInstance)&&a.keepAlive;if(r(a=a.hook)&&r(a=a.init)&&a(t,!1,n,o),r(t.componentInstance))return l(t,e),i(s)&&f(t,e,n,o),!0}}function l(t,e){r(t.data.pendingInsert)&&e.push.apply(e,t.data.pendingInsert),t.elm=t.componentInstance.$el,v(t)?(g(t,e),m(t)):(Xe(t),e.push(t))}function f(t,e,n,i){for(var o,a=t;a.componentInstance;)if(a=a.componentInstance._vnode,r(o=a.data)&&r(o=o.transition)){for(o=0;o<E.activate.length;++o)E.activate[o](ma,a);e.push(a);break}d(n,t.elm,i)}function d(t,e,n){r(t)&&(r(n)?n.parentNode===t&&O.insertBefore(t,e,n):O.appendChild(t,e))}function h(t,e,n){if(Array.isArray(e))for(var r=0;r<e.length;++r)u(e[r],n,t.elm,null,!0);else a(t.text)&&O.appendChild(t.elm,O.createTextNode(t.text))}function v(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return r(t.tag)}function g(t,e){for(var n=0;n<E.create.length;++n)E.create[n](ma,t);k=t.data.hook,r(k)&&(r(k.create)&&k.create(ma,t),r(k.insert)&&e.push(t))}function m(t){for(var e,n=t;n;)r(e=n.context)&&r(e=e.$options._scopeId)&&O.setAttribute(t.elm,e,\"\"),n=n.parent;r(e=$o)&&e!==t.context&&r(e=e.$options._scopeId)&&O.setAttribute(t.elm,e,\"\")}function y(t,e,n,r,i,o){for(;r<=i;++r)u(n[r],o,t,e)}function b(t){var e,n,i=t.data;if(r(i))for(r(e=i.hook)&&r(e=e.destroy)&&e(t),e=0;e<E.destroy.length;++e)E.destroy[e](t);if(r(e=t.children))for(n=0;n<t.children.length;++n)b(t.children[n])}function _(t,e,n,i){for(;n<=i;++n){var o=e[n];r(o)&&(r(o.tag)?(w(o),b(o)):s(o.elm))}}function w(t,e){if(r(e)||r(t.data)){var n,i=E.remove.length+1;for(r(e)?e.listeners+=i:e=o(t.elm,i),r(n=t.componentInstance)&&r(n=n._vnode)&&r(n.data)&&w(n,e),n=0;n<E.remove.length;++n)E.remove[n](t,e);r(n=t.data.hook)&&r(n=n.remove)?n(t,e):e()}else s(t.elm)}function x(t,e,i,o,a){for(var s,c,l,f,p=0,d=0,h=e.length-1,v=e[0],g=e[h],m=i.length-1,b=i[0],w=i[m],x=!a;p<=h&&d<=m;)n(v)?v=e[++p]:n(g)?g=e[--h]:Ke(v,b)?(C(v,b,o),v=e[++p],b=i[++d]):Ke(g,w)?(C(g,w,o),g=e[--h],w=i[--m]):Ke(v,w)?(C(v,w,o),x&&O.insertBefore(t,v.elm,O.nextSibling(g.elm)),v=e[++p],w=i[--m]):Ke(g,b)?(C(g,b,o),x&&O.insertBefore(t,g.elm,v.elm),g=e[--h],b=i[++d]):(n(s)&&(s=Qe(e,p,h)),c=r(b.key)?s[b.key]:null,n(c)?(u(b,o,t,v.elm),b=i[++d]):(l=e[c],Ke(l,b)?(C(l,b,o),e[c]=void 0,x&&O.insertBefore(t,b.elm,v.elm),b=i[++d]):(u(b,o,t,v.elm),b=i[++d])));p>h?(f=n(i[m+1])?null:i[m+1].elm,y(t,f,i,d,m,o)):d>m&&_(t,e,p,h)}function C(t,e,o,a){if(t!==e){if(i(e.isStatic)&&i(t.isStatic)&&e.key===t.key&&(i(e.isCloned)||i(e.isOnce)))return e.elm=t.elm,void(e.componentInstance=t.componentInstance);var s,u=e.data;r(u)&&r(s=u.hook)&&r(s=s.prepatch)&&s(t,e);var c=e.elm=t.elm,l=t.children,f=e.children;if(r(u)&&v(e)){for(s=0;s<E.update.length;++s)E.update[s](t,e);r(s=u.hook)&&r(s=s.update)&&s(t,e)}n(e.text)?r(l)&&r(f)?l!==f&&x(c,l,f,o,a):r(f)?(r(t.text)&&O.setTextContent(c,\"\"),y(c,null,f,0,f.length-1,o)):r(l)?_(c,l,0,l.length-1):r(t.text)&&O.setTextContent(c,\"\"):t.text!==e.text&&O.setTextContent(c,e.text),r(u)&&r(s=u.hook)&&r(s=s.postpatch)&&s(t,e)}}function T(t,e,n){if(i(n)&&r(t.parent))t.parent.data.pendingInsert=e;else for(var o=0;o<e.length;++o)e[o].data.hook.insert(e[o])}function $(t,e,n){e.elm=t;var i=e.tag,o=e.data,a=e.children;if(r(o)&&(r(k=o.hook)&&r(k=k.init)&&k(e,!0),r(k=e.componentInstance)))return l(e,n),!0;if(r(i)){if(r(a))if(t.hasChildNodes()){for(var s=!0,u=t.firstChild,c=0;c<a.length;c++){if(!u||!$(u,a[c],n)){s=!1;break}u=u.nextSibling}if(!s||u)return!1}else h(e,a,n);if(r(o))for(var f in o)if(!j(f)){g(e,n);break}}else t.data!==e.text&&(t.data=e.text);return!0}var k,A,E={},S=t.modules,O=t.nodeOps;for(k=0;k<ya.length;++k)for(E[ya[k]]=[],A=0;A<S.length;++A)r(S[A][ya[k]])&&E[ya[k]].push(S[A][ya[k]]);var j=p(\"attrs,style,class,staticClass,staticStyle,key\");return function(t,o,a,s,c,l){if(n(o))return void(r(t)&&b(t));var f=!1,p=[];if(n(t))f=!0,u(o,p,c,l);else{var d=r(t.nodeType);if(!d&&Ke(t,o))C(t,o,p,s);else{if(d){if(1===t.nodeType&&t.hasAttribute(qi)&&(t.removeAttribute(qi),a=!0),i(a)&&$(t,o,p))return T(o,p,!0),t;t=e(t)}var h=t.elm,g=O.parentNode(h);if(u(o,p,h._leaveCb?null:g,O.nextSibling(h)),r(o.parent)){for(var m=o.parent;m;)m.elm=o.elm,m=m.parent;if(v(o))for(var y=0;y<E.create.length;++y)E.create[y](ma,o.parent)}r(g)?_(g,[t],0,0):r(t.tag)&&b(t)}}return T(o,p,f),o.elm}}({nodeOps:va,modules:Ka});Qi&&document.addEventListener(\"selectionchange\",function(){var t=document.activeElement;t&&t.vmodel&&sr(t,\"input\")});var Qa={inserted:function(t,e,n){if(\"select\"===n.tag){var r=function(){nr(t,e,n.context)};r(),(Ji||Gi)&&setTimeout(r,0)}else\"textarea\"!==n.tag&&\"text\"!==t.type&&\"password\"!==t.type||(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener(\"change\",ar),Zi||(t.addEventListener(\"compositionstart\",or),t.addEventListener(\"compositionend\",ar)),Qi&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if(\"select\"===n.tag){nr(t,e,n.context);(t.multiple?e.value.some(function(e){return rr(e,t.options)}):e.value!==e.oldValue&&rr(e.value,t.options))&&sr(t,\"change\")}}},Ga={bind:function(t,e,n){var r=e.value;n=ur(n);var i=n.data&&n.data.transition,o=t.__vOriginalDisplay=\"none\"===t.style.display?\"\":t.style.display;r&&i&&!Qi?(n.data.show=!0,Gn(n,function(){t.style.display=o})):t.style.display=r?o:\"none\"},update:function(t,e,n){var r=e.value;r!==e.oldValue&&(n=ur(n),n.data&&n.data.transition&&!Qi?(n.data.show=!0,r?Gn(n,function(){t.style.display=t.__vOriginalDisplay}):Zn(n,function(){t.style.display=\"none\"})):t.style.display=r?t.__vOriginalDisplay:\"none\")},unbind:function(t,e,n,r,i){i||(t.style.display=t.__vOriginalDisplay)}},Za={model:Qa,show:Ga},Ya={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]},ts={name:\"transition\",props:Ya,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(function(t){return t.tag}),n.length)){var r=this.mode,i=n[0];if(pr(this.$vnode))return i;var o=cr(i);if(!o)return i;if(this._leaving)return fr(t,i);var s=\"__transition-\"+this._uid+\"-\";o.key=null==o.key?s+o.tag:a(o.key)?0===String(o.key).indexOf(s)?o.key:s+o.key:o.key;var u=(o.data||(o.data={})).transition=lr(this),c=this._vnode,l=cr(c);if(o.data.directives&&o.data.directives.some(function(t){return\"show\"===t.name})&&(o.data.show=!0),l&&l.data&&!dr(o,l)){var f=l&&(l.data.transition=y({},u));if(\"out-in\"===r)return this._leaving=!0,tt(f,\"afterLeave\",function(){e._leaving=!1,e.$forceUpdate()}),fr(t,i);if(\"in-out\"===r){var p,d=function(){p()};tt(u,\"afterEnter\",d),tt(u,\"enterCancelled\",d),tt(f,\"delayLeave\",function(t){p=t})}}return i}}},es=y({tag:String,moveClass:String},Ya);delete es.mode;var ns={props:es,render:function(t){for(var e=this.tag||this.$vnode.data.tag||\"span\",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=lr(this),s=0;s<i.length;s++){var u=i[s];if(u.tag)if(null!=u.key&&0!==String(u.key).indexOf(\"__vlist\"))o.push(u),n[u.key]=u,(u.data||(u.data={})).transition=a;else;}if(r){for(var c=[],l=[],f=0;f<r.length;f++){var p=r[f];p.data.transition=a,p.data.pos=p.elm.getBoundingClientRect(),n[p.key]?c.push(p):l.push(p)}this.kept=t(e,null,c),this.removed=l}return t(e,null,o)},beforeUpdate:function(){this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept},updated:function(){var t=this.prevChildren,e=this.moveClass||(this.name||\"v\")+\"-move\";if(t.length&&this.hasMove(t[0].elm,e)){t.forEach(hr),t.forEach(vr),t.forEach(gr);var n=document.body;n.offsetHeight;t.forEach(function(t){if(t.data.moved){var n=t.elm,r=n.style;zn(n,e),r.transform=r.WebkitTransform=r.transitionDuration=\"\",n.addEventListener(Ha,n._moveCb=function t(r){r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(Ha,t),n._moveCb=null,Vn(n,e))})}})}},methods:{hasMove:function(t,e){if(!Pa)return!1;if(null!=this._hasMove)return this._hasMove;var n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach(function(t){Bn(n,t)}),Hn(n,e),n.style.display=\"none\",this.$el.appendChild(n);var r=Kn(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}},rs={Transition:ts,TransitionGroup:ns};ge.config.mustUseProp=na,ge.config.isReservedTag=da,ge.config.isReservedAttr=ta,ge.config.getTagNamespace=Ne,ge.config.isUnknownElement=De,y(ge.options.directives,Za),y(ge.options.components,rs),ge.prototype.__patch__=Xi?Ja:_,ge.prototype.$mount=function(t,e){return t=t&&Xi?Ie(t):void 0,yt(this,t,e)},setTimeout(function(){Bi.devtools&&ao&&ao.emit(\"init\",ge)},0);var is,os=!!Xi&&function(t,e){var n=document.createElement(\"div\");return n.innerHTML='<div a=\"'+t+'\">',n.innerHTML.indexOf(e)>0}(\"\\n\",\"&#10;\"),as=p(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),ss=p(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),us=p(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),cs=[/\"([^\"]*)\"+/.source,/'([^']*)'+/.source,/([^\\s\"'=<>`]+)/.source],ls=new RegExp(\"^\\\\s*\"+/([^\\s\"'<>\\/=]+)/.source+\"(?:\\\\s*(\"+/(?:=)/.source+\")\\\\s*(?:\"+cs.join(\"|\")+\"))?\"),fs=\"[a-zA-Z_][\\\\w\\\\-\\\\.]*\",ps=\"((?:\"+fs+\"\\\\:)?\"+fs+\")\",ds=new RegExp(\"^<\"+ps),hs=/^\\s*(\\/?)>/,vs=new RegExp(\"^<\\\\/\"+ps+\"[^>]*>\"),gs=/^<!DOCTYPE [^>]+>/i,ms=/^<!--/,ys=/^<!\\[/,bs=!1;\"x\".replace(/x(.)?/g,function(t,e){bs=\"\"===e});var _s,ws,xs,Cs,Ts,$s,ks,As,Es,Ss,Os,js,Ns,Ds,Is,Ls,Rs,Ps,Fs=p(\"script,style,textarea\",!0),qs={},Ms={\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&amp;\":\"&\",\"&#10;\":\"\\n\"},Hs=/&(?:lt|gt|quot|amp);/g,Bs=/&(?:lt|gt|quot|amp|#10);/g,Us=/\\{\\{((?:.|\\n)+?)\\}\\}/g,Ws=v(function(t){var e=t[0].replace(/[-.*+?^${}()|[\\]\\/\\\\]/g,\"\\\\$&\"),n=t[1].replace(/[-.*+?^${}()|[\\]\\/\\\\]/g,\"\\\\$&\");return new RegExp(e+\"((?:.|\\\\n)+?)\"+n,\"g\")}),zs=/^@|^v-on:/,Vs=/^v-|^@|^:/,Xs=/(.*?)\\s+(?:in|of)\\s+(.*)/,Ks=/\\((\\{[^}]*\\}|[^,]*),([^,]*)(?:,([^,]*))?\\)/,Js=/:(.*)$/,Qs=/^:|^v-bind:/,Gs=/\\.[^.]+/g,Zs=v(mr),Ys=/^xmlns:NS\\d+/,tu=/^NS\\d+:/,eu=v(Br),nu=/^\\s*([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*\\(/,ru=/^\\s*[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['.*?']|\\[\".*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*\\s*$/,iu={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},ou=function(t){return\"if(\"+t+\")return null;\"},au={stop:\"$event.stopPropagation();\",prevent:\"$event.preventDefault();\",self:ou(\"$event.target !== $event.currentTarget\"),ctrl:ou(\"!$event.ctrlKey\"),shift:ou(\"!$event.shiftKey\"),alt:ou(\"!$event.altKey\"),meta:ou(\"!$event.metaKey\"),left:ou(\"'button' in $event && $event.button !== 0\"),middle:ou(\"'button' in $event && $event.button !== 1\"),right:ou(\"'button' in $event && $event.button !== 2\")},su={bind:Zr,cloak:_},uu=(new RegExp(\"\\\\b\"+\"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\")+\"\\\\b\"),new RegExp(\"\\\\b\"+\"delete,typeof,void\".split(\",\").join(\"\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b\")+\"\\\\s*\\\\([^\\\\)]*\\\\)\"),{staticKeys:[\"staticClass\"],transformNode:Ti,genData:$i}),cu={staticKeys:[\"staticStyle\"],transformNode:ki,genData:Ai},lu=[uu,cu],fu={model:Tn,text:Ei,html:Si},pu={expectHTML:!0,modules:lu,directives:fu,isPreTag:pa,isUnaryTag:as,mustUseProp:na,canBeLeftOpenTag:ss,isReservedTag:da,getTagNamespace:Ne,staticKeys:function(t){return t.reduce(function(t,e){return t.concat(e.staticKeys||[])},[]).join(\",\")}(lu)},du=function(t){function e(e,n){var r=Object.create(t),i=[],o=[];if(r.warn=function(t,e){(e?o:i).push(t)},n){n.modules&&(r.modules=(t.modules||[]).concat(n.modules)),n.directives&&(r.directives=y(Object.create(t.directives),n.directives));for(var a in n)\"modules\"!==a&&\"directives\"!==a&&(r[a]=n[a])}var s=xi(e,r);return s.errors=i,s.tips=o,s}function n(t,n,i){n=n||{};var o=n.delimiters?String(n.delimiters)+t:t;if(r[o])return r[o];var a=e(t,n),s={},u=[];s.render=Ci(a.render,u);var c=a.staticRenderFns.length;s.staticRenderFns=new Array(c);for(var l=0;l<c;l++)s.staticRenderFns[l]=Ci(a.staticRenderFns[l],u);return r[o]=s}var r=Object.create(null);return{compile:e,compileToFunctions:n}}(pu),hu=du.compileToFunctions,vu=v(function(t){var e=Ie(t);return e&&e.innerHTML}),gu=ge.prototype.$mount;ge.prototype.$mount=function(t,e){if((t=t&&Ie(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if(\"string\"==typeof r)\"#\"===r.charAt(0)&&(r=vu(r));else{if(!r.nodeType)return this;r=r.innerHTML}else t&&(r=Oi(t));if(r){var i=hu(r,{shouldDecodeNewlines:os,delimiters:n.delimiters},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return gu.call(this,t,e)},ge.compile=hu,t.exports=ge}).call(e,n(7))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,\"loaded\",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,\"id\",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){n(8),t.exports=n(9)}]);"
  },
  {
    "path": "public/quickadmin/css/components.css",
    "content": "/***\nRounded corners reset\n***/\n/* Reset rounded corners for all elements */\ndiv,\ninput,\nselect,\ntextarea,\nspan,\nimg,\ntable,\nlabel,\ntd,\nth,\np,\na,\nbutton,\nul,\ncode,\npre,\nli {\n  -webkit-border-radius: 0 !important;\n  -moz-border-radius: 0 !important;\n  border-radius: 0 !important;\n}\n\n/* except below bootstrap elements */\n.img-circle {\n  border-radius: 50% !important;\n}\n\n.img-rounded {\n  border-radius: 6px !important;\n}\n\n/***\nGeneral reset\n***/\n/* Set default body */\nbody {\n  color: #333333;\n  font-family: \"Open Sans\", sans-serif;\n  padding: 0px !important;\n  margin: 0px !important;\n  font-size: 13px;\n  direction: ltr;\n}\n\n/*\n Internet Explorer 10 doesn't differentiate device width from viewport width, and thus doesn't \n properly apply the media queries in Bootstrap's CSS. To address this, \n you can optionally include the following CSS and JavaScript to work around this problem until Microsoft issues a fix.\n*/\n@-webkit-viewport {\n  width: device-width;\n}\n@-moz-viewport {\n  width: device-width;\n}\n@-ms-viewport {\n  width: device-width;\n}\n@-o-viewport {\n  width: device-width;\n}\n@viewport {\n  width: device-width;\n}\n/*\n Internet Explorer 10 doesn't differentiate device width from viewport width, \n and thus doesn't properly apply the media queries in Bootstrap's CSS. To address this, following CSS code applied \n*/\n@-ms-viewport {\n  width: auto !important;\n}\n.md-shadow-z-1 {\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.18);\n}\n\n.md-shadow-z-1-i {\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.18) !important;\n}\n\n.md-shadow-z-1-hover {\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.14), 0 1px 2px rgba(0, 0, 0, 0.22);\n}\n\n.md-shadow-z-2 {\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.22);\n}\n\n.md-shadow-z-2-i {\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.22) !important;\n}\n\n.md-shadow-z-2-hover {\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.2), 0 3px 6px rgba(0, 0, 0, 0.26);\n}\n\n.md-shadow-z-3 {\n  box-shadow: 0 8px 18px rgba(0, 0, 0, 0.18), 0 6px 6px rgba(0, 0, 0, 0.23);\n}\n\n.md-shadow-z-3-i {\n  box-shadow: 0 8px 18px rgba(0, 0, 0, 0.18), 0 6px 6px rgba(0, 0, 0, 0.24) !important;\n}\n\n.md-shadow-z-3-hover {\n  box-shadow: 0 8px 18px rgba(0, 0, 0, 0.22), 0 6px 6px rgba(0, 0, 0, 0.26);\n}\n\n.md-shadow-z-4 {\n  box-shadow: 0 14px 28px rgba(0, 0, 0, 0.26), 0 10px 10px rgba(0, 0, 0, 0.22);\n}\n\n.md-shadow-z-4-i {\n  box-shadow: 0 14px 28px rgba(0, 0, 0, 0.26), 0 10px 10px rgba(0, 0, 0, 0.22) !important;\n}\n\n.md-shadow-z-5 {\n  box-shadow: 0 19px 38px rgba(0, 0, 0, 0.28), 0 15px 12px rgba(0, 0, 0, 0.22);\n}\n\n.md-shadow-z-5-i {\n  box-shadow: 0 19px 38px rgba(0, 0, 0, 0.28), 0 15px 12px rgba(0, 0, 0, 0.22) !important;\n}\n\n.md-shadow-none {\n  box-shadow: none !important;\n}\n\n.md-click-circle {\n  display: block;\n  position: absolute;\n  background: rgba(0, 0, 0, 0.2);\n  border-radius: 50%;\n  -webkit-animation: scale(0);\n  -moz-transform: scale(0);\n  transform: scale(0);\n}\n.md-click-circle.md-click-animate {\n  -webkit-animation: mdClickEffect 0.55s linear;\n  -moz-animation: mdClickEffect 0.55s linear;\n  animation: mdClickEffect 0.55s linear;\n}\n\n@-webkit-keyframes mdClickEffect {\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(1.5);\n  }\n}\n@-moz-keyframes mdClickEffect {\n  100% {\n    opacity: 0;\n    -moz-transform: scale(2.5);\n  }\n}\n@keyframes mdClickEffect {\n  100% {\n    opacity: 0;\n    transform: scale(2.5);\n  }\n}\n.form-group.form-md-line-input {\n  position: relative;\n  margin: 0 0 35px 0;\n  padding-top: 20px;\n}\n.form-horizontal .form-group.form-md-line-input {\n  padding-top: 10px;\n  margin-bottom: 20px;\n  margin: 0 -15px 20px -15px;\n}\n.form-horizontal .form-group.form-md-line-input > label {\n  padding-top: 5px;\n  font-size: 13px;\n  color: #888888;\n  opacity: 1 ;\n  filter: alpha(opacity=100) ;\n}\n.form-group.form-md-line-input .form-control {\n  background: none;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n  -webkit-border-radius: 0;\n  -moz-border-radius: 0;\n  -ms-border-radius: 0;\n  -o-border-radius: 0;\n  border-radius: 0;\n  color: #333;\n  box-shadow: none;\n  padding-left: 0;\n  padding-right: 0;\n  font-size: 16px;\n}\n.form-group.form-md-line-input .form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-group.form-md-line-input .form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-group.form-md-line-input .form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-group.form-md-line-input .form-control.form-control-static {\n  border-bottom: 0;\n}\n.form-group.form-md-line-input .form-control.input-sm {\n  font-size: 14px;\n  padding: 6px 0;\n}\n.form-group.form-md-line-input .form-control.input-lg {\n  font-size: 20px;\n  padding: 14px 0;\n}\n.form-group.form-md-line-input .form-control ~ label,\n.form-group.form-md-line-input .form-control ~ .form-control-focus {\n  width: 100%;\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  pointer-events: none;\n}\n.form-horizontal .form-group.form-md-line-input .form-control ~ label, .form-horizontal\n.form-group.form-md-line-input .form-control ~ .form-control-focus {\n  width: auto;\n  left: 15px;\n  right: 15px;\n}\n.form-group.form-md-line-input .form-control ~ label:after,\n.form-group.form-md-line-input .form-control ~ .form-control-focus:after {\n  content: '';\n  position: absolute;\n  z-index: 5;\n  bottom: 0;\n  left: 50%;\n  width: 0;\n  height: 2px;\n  width: 0;\n  visibility: hidden;\n  transition: 0.2s ease all;\n}\n.form-group.form-md-line-input .form-control ~ label {\n  top: 0;\n  margin-bottom: 0;\n  font-size: 13px;\n  color: #888888;\n  opacity: 1 ;\n  filter: alpha(opacity=100) ;\n}\n.form-group.form-md-line-input .form-control.edited:not([readonly]) ~ label,\n.form-group.form-md-line-input .form-control.edited:not([readonly]) ~ .form-control-focus, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ label,\n.form-group.form-md-line-input .form-control:focus:not([readonly]) ~ .form-control-focus, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ label,\n.form-group.form-md-line-input .form-control.focus:not([readonly]) ~ .form-control-focus {\n  color: #888888;\n}\n.form-group.form-md-line-input .form-control.edited:not([readonly]) ~ label:after,\n.form-group.form-md-line-input .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ label:after,\n.form-group.form-md-line-input .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ label:after,\n.form-group.form-md-line-input .form-control.focus:not([readonly]) ~ .form-control-focus:after {\n  visibility: visible;\n  left: 0;\n  width: 100%;\n  background: #45B6AF;\n}\n.form-group.form-md-line-input .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ label {\n  opacity: 1 ;\n  filter: alpha(opacity=100) ;\n}\n.form-group.form-md-line-input .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ .help-block {\n  color: #45B6AF;\n  opacity: 1 ;\n  filter: alpha(opacity=100) ;\n}\n.form-group.form-md-line-input .form-control[readonly], .form-group.form-md-line-input .form-control[disabled], fieldset[disabled] .form-group.form-md-line-input .form-control {\n  background: none;\n  cursor: not-allowed;\n  border-bottom: 1px dashed #e5e5e5;\n}\n.form-group.form-md-line-input.form-md-floating-label .form-control ~ label {\n  font-size: 16px;\n  top: 25px;\n  transition: 0.2s ease all;\n  color: #999;\n}\n.form-group.form-md-line-input.form-md-floating-label .form-control[readonly] ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.edited ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.form-control-static ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.focus:not([readonly]) ~ label {\n  top: 0;\n  font-size: 13px;\n}\n.form-group.form-md-line-input.form-md-floating-label .form-control.input-sm ~ label {\n  font-size: 14px;\n  top: 24px;\n}\n.form-group.form-md-line-input.form-md-floating-label .form-control.input-sm[readonly] ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm.form-control-static ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm.edited ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm:focus:not([readonly]) ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm.focus:not([readonly]) ~ label {\n  top: 0;\n  font-size: 13px;\n}\n.form-group.form-md-line-input.form-md-floating-label .form-control.input-lg ~ label {\n  font-size: 20px;\n  top: 30px;\n}\n.form-group.form-md-line-input.form-md-floating-label .form-control.input-lg[readonly] ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg.edited ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg.form-control-static ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg:focus:not([readonly]) ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg.focus:not([readonly]) ~ label {\n  top: 0;\n  font-size: 13px;\n}\n.form-group.form-md-line-input.form-md-floating-label .input-icon > label {\n  padding-left: 34px;\n}\n.form-group.form-md-line-input.form-md-floating-label .input-icon.right > label {\n  padding-left: 0;\n  padding-right: 34px;\n}\n.form-group.form-md-line-input.form-md-floating-label .input-group.left-addon label {\n  padding-left: 34px;\n}\n.form-group.form-md-line-input.form-md-floating-label .input-group.right-addon label {\n  padding-right: 34px;\n}\n.form-group.form-md-line-input + .input-icon {\n  padding-top: 0;\n}\n.form-group.form-md-line-input .help-block {\n  position: absolute;\n  margin: 2px 0 0 0;\n  opacity: 0 ;\n  filter: alpha(opacity=0) ;\n  font-size: 13px;\n}\n.form-group.form-md-line-input > .input-icon > i {\n  left: 0;\n  bottom: 0;\n  margin: 9px 2px 10px 10px;\n  color: #888888;\n}\n.form-group.form-md-line-input > .input-icon.input-icon-lg > i {\n  top: 6px;\n}\n.form-group.form-md-line-input > .input-icon.input-icon-sm > i {\n  top: -1px;\n}\n.form-group.form-md-line-input > .input-icon .form-control {\n  padding-left: 34px;\n}\n.form-group.form-md-line-input > .input-icon > label {\n  margin-top: -20px;\n}\n.form-group.form-md-line-input > .input-icon.right .form-control {\n  padding-left: 0;\n  padding-right: 34px;\n}\n.form-group.form-md-line-input > .input-icon.right > i {\n  left: auto;\n  right: 8px;\n  margin: 11px 2px 10px 10px;\n}\n.form-group.form-md-line-input + .input-group {\n  padding-top: 0;\n}\n.form-group.form-md-line-input .input-group {\n  padding-top: 0;\n}\n.form-group.form-md-line-input .input-group > label {\n  margin-top: -20px;\n}\n.form-group.form-md-line-input .input-group .input-group-addon {\n  -webkit-border-radius: 0;\n  -moz-border-radius: 0;\n  -ms-border-radius: 0;\n  -o-border-radius: 0;\n  border-radius: 0;\n  background: none;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\n.form-group.form-md-line-input .input-group + .input-group-control {\n  padding-top: 0;\n}\n.form-group.form-md-line-input .input-group .input-group-control {\n  padding-top: 0;\n  position: relative;\n  display: table-cell;\n  vertical-align: bottom;\n}\n.form-group.form-md-line-input .input-group .input-group-control > label {\n  margin-top: -20px;\n}\n.form-group.form-md-line-input .input-group .input-group-btn .btn {\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px;\n}\n.form-group.form-md-line-input .input-group .input-group-btn.btn-left .btn {\n  margin-right: 10px;\n}\n.form-group.form-md-line-input .input-group .input-group-btn.btn-right .btn {\n  margin-left: 10px;\n}\n.form-group.form-md-line-input .input-group .help-block {\n  margin-top: 35px;\n}\n.form-group.form-md-line-input .input-group.input-group-sm .help-block {\n  margin-top: 30px;\n}\n.form-group.form-md-line-input .input-group.input-group-lg .help-block {\n  margin-top: 47px;\n}\n.form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ label:after,\n.form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-success .form-control.form-control-static ~ label:after,\n.form-group.form-md-line-input.has-success .form-control.form-control-static ~ .form-control-focus:after, .form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ label:after,\n.form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ label:after,\n.form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ .form-control-focus:after {\n  background: #3c763d;\n}\n.form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input.has-success .form-control.form-control-static ~ label, .form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ label {\n  color: #3c763d;\n}\n.form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ i, .form-group.form-md-line-input.has-success .form-control.form-control-static ~ i, .form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ i, .form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ i {\n  color: #3c763d;\n}\n.form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-success .form-control.form-control-static ~ .help-block, .form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ .help-block {\n  color: #3c763d;\n}\n.form-group.form-md-line-input.has-success .input-group-addon {\n  color: #3c763d;\n}\n.form-horizontal .form-group.form-md-line-input.has-success > label {\n  color: #3c763d;\n}\n.form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ label:after,\n.form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-warning .form-control.form-control-static ~ label:after,\n.form-group.form-md-line-input.has-warning .form-control.form-control-static ~ .form-control-focus:after, .form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ label:after,\n.form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ label:after,\n.form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ .form-control-focus:after {\n  background: #8a6d3b;\n}\n.form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input.has-warning .form-control.form-control-static ~ label, .form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ label {\n  color: #8a6d3b;\n}\n.form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ i, .form-group.form-md-line-input.has-warning .form-control.form-control-static ~ i, .form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ i, .form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ i {\n  color: #8a6d3b;\n}\n.form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-warning .form-control.form-control-static ~ .help-block, .form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ .help-block {\n  color: #8a6d3b;\n}\n.form-group.form-md-line-input.has-warning .input-group-addon {\n  color: #8a6d3b;\n}\n.form-horizontal .form-group.form-md-line-input.has-warning > label {\n  color: #8a6d3b;\n}\n.form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ label:after,\n.form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-error .form-control.form-control-static ~ label:after,\n.form-group.form-md-line-input.has-error .form-control.form-control-static ~ .form-control-focus:after, .form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ label:after,\n.form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ label:after,\n.form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ .form-control-focus:after {\n  background: #a94442;\n}\n.form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input.has-error .form-control.form-control-static ~ label, .form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ label {\n  color: #a94442;\n}\n.form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ i, .form-group.form-md-line-input.has-error .form-control.form-control-static ~ i, .form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ i, .form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ i {\n  color: #a94442;\n}\n.form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-error .form-control.form-control-static ~ .help-block, .form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ .help-block {\n  color: #a94442;\n}\n.form-group.form-md-line-input.has-error .input-group-addon {\n  color: #a94442;\n}\n.form-horizontal .form-group.form-md-line-input.has-error > label {\n  color: #a94442;\n}\n.form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ label:after,\n.form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-info .form-control.form-control-static ~ label:after,\n.form-group.form-md-line-input.has-info .form-control.form-control-static ~ .form-control-focus:after, .form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ label:after,\n.form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ label:after,\n.form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ .form-control-focus:after {\n  background: #31708f;\n}\n.form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input.has-info .form-control.form-control-static ~ label, .form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ label {\n  color: #31708f;\n}\n.form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ i, .form-group.form-md-line-input.has-info .form-control.form-control-static ~ i, .form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ i, .form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ i {\n  color: #31708f;\n}\n.form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-info .form-control.form-control-static ~ .help-block, .form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ .help-block {\n  color: #31708f;\n}\n.form-group.form-md-line-input.has-info .input-group-addon {\n  color: #31708f;\n}\n.form-horizontal .form-group.form-md-line-input.has-info > label {\n  color: #31708f;\n}\n\n.form-inline .form-md-line-input {\n  margin: 0;\n  padding-top: 0;\n  margin-right: 20px;\n}\n.form-inline .form-md-line-input > .input-icon {\n  padding: 0;\n}\n\n.form-horizontal .form-group.form-md-line-input .input-icon .form-control {\n  padding-left: 33px;\n}\n.form-horizontal .form-group.form-md-line-input .input-icon > i {\n  top: 0;\n}\n.form-horizontal .form-group.form-md-line-input .input-icon.right .form-control {\n  padding-left: 0;\n  padding-right: 33px;\n}\n.form-horizontal .form-group.form-md-line-input .input-icon > .form-control-focus {\n  left: 0 !important;\n  right: 0 !important;\n}\n.form-horizontal .form-group.form-md-line-input .input-group {\n  padding-top: 0;\n}\n.form-horizontal .form-group.form-md-line-input .input-group > .input-group-btn .btn {\n  margin-bottom: 0 !important;\n}\n.form-horizontal .form-group.form-md-line-input .input-group > .input-group-control {\n  padding-top: 0;\n}\n.form-horizontal .form-group.form-md-line-input .input-group > .input-group-control > .form-control-focus {\n  left: 0 !important;\n  right: 0 !important;\n}\n.form-horizontal .form-group.form-md-line-input .input-group > .form-control-focus {\n  left: 0 !important;\n  right: 0 !important;\n}\n\n.md-checkbox {\n  position: relative;\n  /* handling click events */\n  /* when checkbox is checked */\n}\n.md-checkbox.md-checkbox-inline {\n  display: inline-block;\n}\n.form-inline .md-checkbox.md-checkbox-inline {\n  margin-right: 20px;\n  top: 3px;\n}\n.md-checkbox input[type=checkbox] {\n  visibility: hidden;\n  position: absolute;\n}\n.md-checkbox label {\n  cursor: pointer;\n  padding-left: 30px;\n}\n.md-checkbox label > span {\n  display: block;\n  position: absolute;\n  left: 0;\n  -webkit-transition-duration: 0.3s;\n  -moz-transition-duration: 0.3s;\n  transition-duration: 0.3s;\n}\n.md-checkbox label > span.inc {\n  background: #fff;\n  left: -20px;\n  top: -20px;\n  height: 60px;\n  width: 60px;\n  opacity: 0;\n  border-radius: 50% !important;\n  -moz-border-radius: 50% !important;\n  -webkit-border-radius: 50% !important;\n}\n.md-checkbox label > .box {\n  top: 0px;\n  border: 2px solid #666;\n  height: 20px;\n  width: 20px;\n  z-index: 5;\n  -webkit-transition-delay: 0.2s;\n  -moz-transition-delay: 0.2s;\n  transition-delay: 0.2s;\n}\n.md-checkbox label > .check {\n  top: -4px;\n  left: 6px;\n  width: 10px;\n  height: 20px;\n  border: 2px solid #45B6AF;\n  border-top: none;\n  border-left: none;\n  opacity: 0;\n  z-index: 5;\n  -webkit-transform: rotate(180deg);\n  -moz-transform: rotate(180deg);\n  transform: rotate(180deg);\n  -webkit-transition-delay: 0.3s;\n  -moz-transition-delay: 0.3s;\n  transition-delay: 0.3s;\n}\n.md-checkbox label > span.inc {\n  -webkit-animation: growCircle 0.3s ease;\n  -moz-animation: growCircle 0.3s ease;\n  animation: growCircle 0.3s ease;\n}\n.md-checkbox input[type=checkbox]:checked ~ label > .box {\n  opacity: 0;\n  -webkit-transform: scale(0) rotate(-180deg);\n  -moz-transform: scale(0) rotate(-180deg);\n  transform: scale(0) rotate(-180deg);\n}\n.md-checkbox input[type=checkbox]:checked ~ label > .check {\n  opacity: 1;\n  -webkit-transform: scale(1) rotate(45deg);\n  -moz-transform: scale(1) rotate(45deg);\n  transform: scale(1) rotate(45deg);\n}\n.md-checkbox input[type=checkbox]:disabled ~ label,\n.md-checkbox input[type=checkbox][disabled] ~ label {\n  cursor: not-allowed;\n  opacity: 0.7 ;\n  filter: alpha(opacity=70) ;\n}\n.md-checkbox input[type=checkbox]:disabled ~ label > .box,\n.md-checkbox input[type=checkbox][disabled] ~ label > .box {\n  cursor: not-allowed;\n  opacity: 0.7 ;\n  filter: alpha(opacity=70) ;\n}\n.md-checkbox input[type=checkbox]:disabled:checked ~ label > .check,\n.md-checkbox input[type=checkbox][disabled]:checked ~ label > .check {\n  cursor: not-allowed;\n  opacity: 0.7 ;\n  filter: alpha(opacity=70) ;\n}\n.md-checkbox.has-error label {\n  color: #F3565D;\n}\n.md-checkbox.has-error label > .box {\n  border-color: #F3565D;\n}\n.md-checkbox.has-error label > .check {\n  border-color: #F3565D;\n}\n.md-checkbox.has-info label {\n  color: #89C4F4;\n}\n.md-checkbox.has-info label > .box {\n  border-color: #89C4F4;\n}\n.md-checkbox.has-info label > .check {\n  border-color: #89C4F4;\n}\n.md-checkbox.has-success label {\n  color: #45B6AF;\n}\n.md-checkbox.has-success label > .box {\n  border-color: #45B6AF;\n}\n.md-checkbox.has-success label > .check {\n  border-color: #45B6AF;\n}\n.md-checkbox.has-warning label {\n  color: #dfba49;\n}\n.md-checkbox.has-warning label > .box {\n  border-color: #dfba49;\n}\n.md-checkbox.has-warning label > .check {\n  border-color: #dfba49;\n}\n\n.form-md-checkboxes > label {\n  font-size: 13px;\n  color: #888888;\n  opacity: 1 ;\n  filter: alpha(opacity=100) ;\n}\n.form-md-checkboxes.has-error > label {\n  color: #F3565D;\n}\n.form-md-checkboxes.has-info > label {\n  color: #89C4F4;\n}\n.form-md-checkboxes.has-success > label {\n  color: #45B6AF;\n}\n.form-md-checkboxes.has-warning > label {\n  color: #dfba49;\n}\n\n.md-checkbox-list {\n  margin: 10px 0;\n}\n.form-horizontal .md-checkbox-list {\n  margin-top: 0px;\n}\n.md-checkbox-list .md-checkbox {\n  display: block;\n  margin-bottom: 10px;\n}\n\n.md-checkbox-inline {\n  margin: 10px 0;\n}\n.form-horizontal .md-checkbox-inline {\n  margin-top: 5px;\n}\n.md-checkbox-inline .md-checkbox {\n  display: inline-block;\n  margin-right: 20px;\n}\n.md-checkbox-inline .md-checkbox:last-child {\n  margin-right: 0;\n}\n\n/* bubble animation */\n@-webkit-keyframes growCircle {\n  0%, 100% {\n    -webkit-transform: scale(0);\n    opacity: 1;\n  }\n  70% {\n    background: #eee;\n    -webkit-transform: scale(1.25);\n  }\n}\n@-moz-keyframes growCircle {\n  0%, 100% {\n    -moz-transform: scale(0);\n    opacity: 1;\n  }\n  70% {\n    background: #eee;\n    -moz-transform: scale(1.25);\n  }\n}\n@keyframes growCircle {\n  0%, 100% {\n    transform: scale(0);\n    opacity: 1;\n  }\n  70% {\n    background: #eee;\n    transform: scale(1.25);\n  }\n}\n.md-radio {\n  position: relative;\n  /* handling click events */\n  /* when radio is checked */\n}\n.md-radio input[type=radio] {\n  visibility: hidden;\n  position: absolute;\n}\n.md-radio label {\n  cursor: pointer;\n  padding-left: 30px;\n}\n.md-radio label > span {\n  display: block;\n  position: absolute;\n  left: 0;\n  -webkit-transition-duration: 0.3s;\n  -moz-transition-duration: 0.3s;\n  transition-duration: 0.3s;\n}\n.md-radio label > span.inc {\n  background: #fff;\n  left: -20px;\n  top: -20px;\n  height: 60px;\n  width: 60px;\n  opacity: 0;\n  border-radius: 50% !important;\n  -moz-border-radius: 50% !important;\n  -webkit-border-radius: 50% !important;\n}\n.md-radio label > .box {\n  top: 0px;\n  border: 2px solid #666;\n  height: 20px;\n  width: 20px;\n  border-radius: 50% !important;\n  -moz-border-radius: 50% !important;\n  -webkit-border-radius: 50% !important;\n  z-index: 5;\n}\n.md-radio label > .check {\n  top: 5px;\n  left: 5px;\n  width: 10px;\n  height: 10px;\n  background: #45B6AF;\n  opacity: 0;\n  z-index: 6;\n  border-radius: 50% !important;\n  -moz-border-radius: 50% !important;\n  -webkit-border-radius: 50% !important;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  transform: scale(0);\n}\n.md-radio label > span.inc {\n  -webkit-animation: growCircleRadio 0.3s ease;\n  -moz-animation: growCircleRadio 0.3s ease;\n  animation: growCircleRadio 0.3s ease;\n}\n.md-radio input[type=radio]:checked ~ label > .check {\n  opacity: 1;\n  -webkit-transform: scale(1);\n  -moz-transform: scale(1);\n  transform: scale(1);\n}\n.md-radio input[type=radio]:disabled ~ label,\n.md-radio input[type=radio][disabled] ~ label {\n  cursor: not-allowed;\n  opacity: 0.7 ;\n  filter: alpha(opacity=70) ;\n}\n.md-radio input[type=radio]:disabled ~ label > .box,\n.md-radio input[type=radio][disabled] ~ label > .box {\n  cursor: not-allowed;\n  opacity: 0.7 ;\n  filter: alpha(opacity=70) ;\n}\n.md-radio input[type=radio]:disabled:checked ~ label > .check,\n.md-radio input[type=radio][disabled]:checked ~ label > .check {\n  cursor: not-allowed;\n  opacity: 0.7 ;\n  filter: alpha(opacity=70) ;\n}\n.md-radio.has-error label {\n  color: #F3565D;\n}\n.md-radio.has-error label > .box {\n  border-color: #F3565D;\n}\n.md-radio.has-error label > .check {\n  background: #F3565D;\n}\n.md-radio.has-info label {\n  color: #89C4F4;\n}\n.md-radio.has-info label > .box {\n  border-color: #89C4F4;\n}\n.md-radio.has-info label > .check {\n  background: #89C4F4;\n}\n.md-radio.has-success label {\n  color: #45B6AF;\n}\n.md-radio.has-success label > .box {\n  border-color: #45B6AF;\n}\n.md-radio.has-success label > .check {\n  background: #45B6AF;\n}\n.md-radio.has-warning label {\n  color: #dfba49;\n}\n.md-radio.has-warning label > .box {\n  border-color: #dfba49;\n}\n.md-radio.has-warning label > .check {\n  background: #dfba49;\n}\n\n.form-md-radios > label {\n  font-size: 13px;\n  color: #888888;\n  opacity: 1 ;\n  filter: alpha(opacity=100) ;\n}\n.form-md-radios.has-error > label {\n  color: #F3565D;\n}\n.form-md-radios.has-info > label {\n  color: #89C4F4;\n}\n.form-md-radios.has-success > label {\n  color: #45B6AF;\n}\n.form-md-radios.has-warning > label {\n  color: #dfba49;\n}\n\n.md-radio-list {\n  margin: 10px 0;\n}\n.form-horizontal .md-radio-list {\n  margin-top: 0px;\n}\n.md-radio-list .md-radio {\n  display: block;\n  margin-bottom: 10px;\n}\n\n.md-radio-inline {\n  margin: 10px 0;\n}\n.form-horizontal .md-radio-inline {\n  margin-top: 5px;\n}\n.md-radio-inline .md-radio {\n  display: inline-block;\n  margin-right: 20px;\n}\n.md-radio-inline .md-radio:last-child {\n  margin-right: 0;\n}\n\n/* bubble animation */\n@-webkit-keyframes growCircleRadio {\n  0%, 100% {\n    -webkit-transform: scale(0);\n    opacity: 1;\n  }\n  70% {\n    background: #eee;\n    -webkit-transform: scale(1.25);\n  }\n}\n@-moz-keyframes growCircleRadio {\n  0%, 100% {\n    -moz-transform: scale(0);\n    opacity: 1;\n  }\n  70% {\n    background: #eee;\n    -moz-transform: scale(1.25);\n  }\n}\n@keyframes growCircleRadio {\n  0%, 100% {\n    transform: scale(0);\n    opacity: 1;\n  }\n  70% {\n    background: #eee;\n    transform: scale(1.25);\n  }\n}\n/***\nGeneral typography\n***/\n/* Headings */\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-family: \"Open Sans\", sans-serif;\n  font-weight: 300;\n}\n\nh1 {\n  font-size: 33px;\n}\n\nh2 {\n  font-size: 27px;\n}\n\nh3 {\n  font-size: 23px;\n}\n\nh4 {\n  font-size: 17px;\n}\n\nh5 {\n  font-size: 13px;\n}\n\nh6 {\n  font-size: 12px;\n}\n\n/* Headings helper text */\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small {\n  color: #444444;\n}\n\n/* Block headings */\nh1.block,\nh2.block,\nh3.block,\nh4.block,\nh5.block,\nh6.block {\n  padding-top: 10px;\n  padding-bottom: 10px;\n}\n\n/* Links */\na {\n  text-shadow: none;\n  color: #5b9bd1;\n}\na:hover {\n  color: #3175af;\n}\na:focus, a:hover, a:active {\n  outline: 0;\n}\n\n/* Horizontal break */\nhr {\n  margin: 20px 0;\n  border: 0;\n  border-top: 1px solid #eee;\n  border-bottom: 0;\n}\n\n/* Unstyled List */\n.list-unstyled li > .list-unstyled {\n  margin-left: 25px;\n}\n\n/* Code */\ncode {\n  border: 1px solid #e1e1e1;\n  -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);\n  -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);\n}\n\n/* Disabled Navigation Link */\n.disabled-link .disable-target {\n  opacity: 0.5 !important;\n  filter: alpha(opacity=50) !important;\n}\n.disabled-link .disable-target:hover {\n  cursor: not-allowed !important;\n}\n.disabled-link:hover {\n  cursor: not-allowed !important;\n}\n\n/***\nUtilities\n***/\n/* Links */\na:hover {\n  cursor: pointer;\n}\n\n/* Primary Link */\n.primary-link {\n  color: #65A0D0;\n  font-weight: 600;\n}\n.primary-link:hover {\n  color: #5194ca;\n}\n\n/* Rounded Element */\n.rounded-2 {\n  border-radius: 2px !important;\n}\n\n.rounded-3 {\n  border-radius: 3px !important;\n}\n\n.rounded-4 {\n  border-radius: 4px !important;\n}\n\n/* Circle Element */\n.circle {\n  border-radius: 25px !important;\n}\n\n.circle-right {\n  border-radius: 0 25px 25px 0 !important;\n}\n\n.circle-left {\n  border-radius: 25px 0 0 25px !important;\n}\n\n.circle-bottom {\n  border-radius: 0 0 25px 25px !important;\n}\n\n.circle-top {\n  border-radius: 25px 25px 0 0 !important;\n}\n\n/* General utilities */\n.display-none,\n.display-hide {\n  display: none;\n}\n\n.hidden {\n  display: none !important;\n}\n\n.primary-font {\n  font-family: \"Open Sans\", sans-serif !important;\n}\n\n.bold {\n  font-weight: 700 !important;\n}\n\n.thin {\n  font-weight: 300 !important;\n}\n\n.uppercase {\n  text-transform: uppercase !important;\n}\n\n.fix-margin {\n  margin-left: 0px !important;\n}\n\n.border {\n  border: 1px solid red;\n}\n\n.font-hg {\n  font-size: 23px;\n}\n\n.font-lg {\n  font-size: 18px;\n}\n\n.font-md {\n  font-size: 14px;\n}\n\n.font-sm {\n  font-size: 13px;\n}\n\n.font-xs {\n  font-size: 11px;\n}\n\n.inline {\n  display: inline;\n}\n\n.inline-block {\n  display: inline-block;\n}\n\n.text-align-reverse {\n  text-align: right;\n}\n\n/* Margin and padding utilities */\n.no-space {\n  margin: 0px !important;\n  padding: 0px !important;\n}\n\n.no-margin {\n  margin: 0;\n}\n\n.margin-bottom-5 {\n  margin-bottom: 5px;\n}\n\n.margin-bottom-10 {\n  margin-bottom: 10px !important;\n}\n\n.margin-top-10 {\n  margin-top: 10px !important;\n}\n\n.margin-top-15 {\n  margin-top: 15px !important;\n}\n\n.margin-bottom-15 {\n  margin-bottom: 15px !important;\n}\n\n.margin-bottom-20 {\n  margin-bottom: 20px !important;\n}\n\n.margin-top-20 {\n  margin-top: 20px !important;\n}\n\n.margin-bottom-25 {\n  margin-bottom: 25px !important;\n}\n\n.margin-bottom-30 {\n  margin-bottom: 30px !important;\n}\n\n.margin-bottom-40 {\n  margin-bottom: 40px !important;\n}\n\n.margin-right-10 {\n  margin-right: 10px !important;\n}\n\n/* IE8 & IE9 mode utilities */\n.visible-ie8 {\n  display: none;\n}\n\n.ie8 .visible-ie8 {\n  display: inherit !important;\n}\n\n.visible-ie9 {\n  display: none;\n}\n\n.ie9 .visible-ie9 {\n  display: inherit !important;\n}\n\n.hidden-ie8 {\n  display: inherit;\n}\n\n.ie8 .hidden-ie8 {\n  display: none !important;\n}\n\n.hidden-ie9 {\n  display: inherit;\n}\n\n.ie9 .hidden-ie9 {\n  display: none !important;\n}\n\n/***\nResponsive Utils\n***/\n@media (max-width: 1024px) {\n  .hidden-1024 {\n    display: none;\n  }\n}\n@media (max-width: 480px) {\n  .hidden-480 {\n    display: none;\n  }\n}\n@media (max-width: 320px) {\n  .hidden-320 {\n    display: none;\n  }\n}\n/***\nDemo Utils\n***/\n.scrollspy-example {\n  position: relative;\n  height: 200px;\n  margin-top: 10px;\n  overflow: auto;\n}\n\n.util-btn-margin-bottom-5 .btn {\n  margin-bottom: 5px !important;\n}\n\n.util-btn-group-margin-bottom-5 .btn-group {\n  margin-bottom: 5px !important;\n}\n\n/***\nUsers\n***/\n.user-info {\n  margin-bottom: 10px !important;\n}\n.user-info img {\n  float: left;\n  margin-right: 5px;\n}\n.user-info .details {\n  display: inline-block;\n}\n.user-info .label {\n  font-weight: 300;\n  font-size: 11px;\n}\n\n/***\nTop News Blocks(new in v1.2.2) \n***/\n.top-news {\n  color: #fff;\n  margin: 8px 0;\n}\n.top-news em {\n  font-size: 13px;\n  margin-bottom: 8px;\n  margin-bottom: 0;\n  font-style: normal;\n  display: block;\n}\n.top-news em i {\n  font-size: 14px;\n}\n.top-news span {\n  font-size: 18px;\n  margin-bottom: 5px;\n  display: block;\n  text-align: left;\n}\n.top-news a {\n  display: block;\n  text-align: left;\n  padding: 10px;\n  position: relative;\n  margin-bottom: 10px;\n}\n.top-news a .top-news-icon {\n  right: 8px;\n  bottom: 15px;\n  opacity: 0.3;\n  font-size: 35px;\n  position: absolute;\n  filter: alpha(opacity=30);\n  /*For IE8*/\n}\n.top-news .btn + .btn {\n  margin-left: 0;\n}\n\n/***\nBlock Images(new in v1.2.2)\n***/\n.blog-images {\n  margin-bottom: 0;\n}\n.blog-images li {\n  padding: 0;\n  margin: 0;\n  display: inline;\n}\n.blog-images li a:hover {\n  text-decoration: none;\n}\n.blog-images li img {\n  width: 50px;\n  height: 50px;\n  opacity: 0.6;\n  margin: 0 2px 8px;\n}\n.blog-images li img:hover {\n  opacity: 1;\n  box-shadow: 0 0 0 4px #72c02c;\n  transition: all 0.4s ease-in-out 0s;\n  -moz-transition: all 0.4s ease-in-out 0s;\n  -webkit-transition: all 0.4s ease-in-out 0s;\n}\n\n/***\nSidebar Tags\n***/\n.sidebar-tags li {\n  padding: 0;\n}\n.sidebar-tags li a {\n  color: #555;\n  font-size: 12px;\n  padding: 3px 5px;\n  background: #f7f7f7;\n  margin: 0 2px 5px 0;\n  display: inline-block;\n}\n.sidebar-tags li a:hover, .sidebar-tags li a:hover i {\n  background: #EEE;\n  text-decoration: none;\n  -webkit-transition: all 0.3s ease-in-out;\n  -moz-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.sidebar-tags li a i {\n  color: #777;\n}\n\n/***\nCustom vertical inline menu\n***/\n.ver-inline-menu {\n  padding: 0;\n  margin: 0;\n  list-style: none;\n}\n.ver-inline-menu li {\n  position: relative;\n  margin-bottom: 1px;\n}\n.ver-inline-menu li i {\n  width: 37px;\n  height: 37px;\n  display: inline-block;\n  color: #b9cbd5;\n  font-size: 15px;\n  padding: 12px 10px 10px 8px;\n  margin: 0 8px 0 0;\n  text-align: center;\n  background: #e0eaf0 !important;\n}\n.ver-inline-menu li a {\n  font-size: 14px;\n  font-weight: 300;\n  color: #557386;\n  display: block;\n  background: #f0f6fa;\n  border-left: solid 2px #c4d5df;\n}\n.ver-inline-menu li:hover a {\n  background: #e0eaf0;\n  text-decoration: none;\n}\n.ver-inline-menu li:hover i {\n  color: #fff;\n  background: #c4d5df !important;\n}\n.ver-inline-menu li.active a {\n  border-left: solid 2px #0c91e5;\n}\n.ver-inline-menu li.active i {\n  background: #0c91e5 !important;\n}\n.ver-inline-menu li.active a, .ver-inline-menu li.active i {\n  color: #fff;\n  background: #169ef4;\n  text-decoration: none;\n}\n.ver-inline-menu li.active a, .ver-inline-menu li:hover a {\n  font-size: 14px;\n}\n.ver-inline-menu li.active:after {\n  content: '';\n  display: inline-block;\n  border-bottom: 6px solid transparent;\n  border-top: 6px solid transparent;\n  border-left: 6px solid #169ef4;\n  position: absolute;\n  top: 12px;\n  right: -5px;\n}\n\n@media (max-width: 767px) {\n  .ver-inline-menu > li.active:after {\n    display: none;\n  }\n}\n/***\nSeparated List\n***/\n.list-separated {\n  margin-top: 10px;\n  margin-bottom: 15px;\n}\n.list-separated > div:last-child {\n  border-right: 0;\n}\n@media (max-width: 767px) {\n  .list-separated {\n    /* 767px */\n  }\n  .list-separated > div {\n    margin-bottom: 20px;\n  }\n}\n\n/***\nNumber & Chart Stats\n***/\n.number-stats {\n  margin: 10px 0;\n}\n.number-stats .stat-number {\n  display: inline-block;\n  margin: 0 5px;\n}\n.number-stats .stat-number .title {\n  font-size: 13px;\n  margin-bottom: 3px;\n  color: #B8C3C7;\n}\n.number-stats .stat-number .number {\n  font-size: 27px;\n  line-height: 27px;\n  color: #7D8C9D;\n}\n.number-stats .stat-chart {\n  display: inline-block;\n  margin: 0 5px;\n}\n.number-stats > div {\n  border-right: 1px solid #f5f5f5;\n}\n.number-stats > div:last-child {\n  border-right: 0;\n}\n.number-stats .stat-left {\n  float: right;\n}\n.number-stats .stat-left .stat-number {\n  float: right;\n  text-align: right;\n}\n.number-stats .stat-left .stat-chart {\n  float: right;\n}\n.number-stats .stat-right {\n  float: left !important;\n}\n.number-stats .stat-right .stat-number {\n  float: left;\n  text-align: left;\n}\n.number-stats .stat-right .stat-chart {\n  float: left;\n}\n.number-stats .stat-number {\n  float: left;\n  text-align: left;\n}\n.number-stats .stat-chart {\n  float: left;\n}\n\n/***\nGeneral User Record Listing\n***/\n.general-item-list > .item {\n  padding: 10px 0;\n  border-bottom: 1px solid #F1F4F7;\n}\n.general-item-list > .item:last-child {\n  border-bottom: 0;\n}\n.general-item-list > .item > .item-head {\n  margin-bottom: 5px;\n}\n.general-item-list > .item > .item-head:before, .general-item-list > .item > .item-head:after {\n  content: \" \";\n  display: table;\n}\n.general-item-list > .item > .item-head:after {\n  clear: both;\n}\n.general-item-list > .item > .item-head > .item-details {\n  display: inline-block;\n  float: left;\n}\n.general-item-list > .item > .item-head > .item-details > .item-pic {\n  height: 35px;\n  margin-right: 10px;\n  -webkit-border-radius: 100%;\n  -moz-border-radius: 100%;\n  -ms-border-radius: 100%;\n  -o-border-radius: 100%;\n  border-radius: 100%;\n}\n.general-item-list > .item > .item-head > .item-details > .item-name {\n  display: inline-block;\n  margin-right: 10px;\n}\n.general-item-list > .item > .item-head > .item-details > .item-label {\n  color: #C0C9CC;\n}\n.general-item-list > .item > .item-head > .item-status {\n  color: #C0C9CC;\n  top: 10px;\n  position: relative;\n  display: inline-block;\n  float: right;\n}\n.general-item-list > .item > .item-head > .item-status > .badge {\n  margin-top: -2px;\n}\n.general-item-list > .item > .item-body {\n  color: #96a5aa;\n}\n\n/***\nFile dropzone\n***/\n.file-drop-zone {\n  border: 2px dashed #ddd;\n  padding: 30px;\n  text-align: center;\n}\n.file-drop-zone.file-drop-zone-over {\n  border-color: #aaa;\n}\n\n/***\nFontawesome Icons\n***/\n[class^=\"fa-\"]:not(.fa-stack),\n[class^=\"glyphicon-\"],\n[class^=\"icon-\"],\n[class*=\" fa-\"]:not(.fa-stack),\n[class*=\" glyphicon-\"],\n[class*=\" icon-\"] {\n  display: inline-block;\n  font-size: 14px;\n  *margin-right: .3em;\n  line-height: 14px;\n  -webkit-font-smoothing: antialiased;\n}\n\n/* Make font awesome icons fixed width */\nli [class^=\"fa-\"],\nli [class^=\"glyphicon-\"],\nli [class^=\"icon-\"],\nli [class*=\" fa-\"],\nli [class*=\" glyphicon-\"],\nli [class*=\" icon-\"] {\n  display: inline-block;\n  width: 1.25em;\n  text-align: center;\n}\n\nli [class^=\"glyphicon-\"],\nli [class*=\" glyphicon-\"] {\n  top: 2px;\n}\n\nli [class^=\"icon-\"],\nli [class*=\" icon-\"] {\n  top: 1px;\n  position: relative;\n}\n\nli [class^=\"fa-\"].icon-large,\nli [class^=\"glyphicon-\"].icon-large,\nli [class^=\"icon-\"].icon-large,\nli [class*=\" fa-\"].icon-large,\nli [class*=\" glyphicon-\"].icon-large,\nli [class*=\" icon-\"].icon-large {\n  /* increased font size for icon-large */\n  width: 1.5625em;\n}\n\n/* Icon sizing */\n.fa-sm:not(.fa-stack),\n.icon-sm {\n  font-size: 12px;\n}\n\n.fa-lg:not(.fa-stack),\n.icon-lg {\n  font-size: 16px !important;\n}\n\n.fa-2x {\n  font-size: 2em;\n}\n\n.fa-3x {\n  font-size: 3em;\n}\n\n.fa-4x {\n  font-size: 4em;\n}\n\n.fa-5x {\n  font-size: 5em;\n}\n\n/* Icon coloring */\n.icon-state-default {\n  color: #c6c6c6;\n}\n\n.icon-state-success {\n  color: #45B6AF;\n}\n\n.icon-state-info {\n  color: #89C4F4;\n}\n\n.icon-state-warning {\n  color: #dfba49;\n}\n\n.icon-state-danger {\n  color: #F3565D;\n}\n\n/***\nFont Awesome 4.x Demo\n***/\n.fa-item {\n  font-size: 14px;\n  padding: 10px 10px 10px 20px;\n}\n.fa-item i {\n  font-size: 16px;\n  display: inline-block;\n  width: 20px;\n  color: #333;\n}\n.fa-item:hover {\n  cursor: pointer;\n  background: #eee;\n}\n\n/***\nSimple Line Icons Demo\n***/\n.simplelineicons-demo .item-box {\n  display: inline-block;\n  font-size: 16px;\n  margin: 0 -0.22em 1em 0;\n  padding-left: 1em;\n  width: 100%;\n}\n.simplelineicons-demo .item-box .item {\n  background-color: #fff;\n  color: #33383e;\n  border-radius: 8px;\n  display: inline-block;\n  padding: 10px;\n  width: 100%;\n}\n.simplelineicons-demo .item-box .item span {\n  font-size: 22px;\n}\n\n@media only screen and (min-width: 768px) {\n  .simplelineicons-demo .item-box {\n    width: 33.333%;\n  }\n}\n/*** \nGlyphicons Demo\n***/\n.glyphicons-demo ul {\n  padding-left: 0;\n  padding-bottom: 1px;\n  margin-bottom: 20px;\n  list-style: none;\n  overflow: hidden;\n}\n\n.bs-glyphicon-class {\n  text-align: center;\n}\n\n.bs-glyphicons {\n  padding-left: 0;\n  padding-bottom: 1px;\n  margin-bottom: 20px;\n  list-style: none;\n  overflow: hidden;\n}\n\n.glyphicons-demo ul li {\n  float: left;\n  width: 25%;\n  height: 115px;\n  padding: 10px;\n  margin: 0 -1px -1px 0;\n  font-size: 14px;\n  line-height: 1.4;\n  text-align: center;\n  border: 1px solid #ddd;\n}\n\n.glyphicons-demo .glyphicon {\n  display: block;\n  margin: 5px auto 10px;\n  font-size: 24px;\n  color: #444;\n}\n\n.glyphicons-demo ul li:hover {\n  background-color: rgba(86, 61, 124, 0.1);\n}\n\n@media (min-width: 768px) {\n  .glyphicons-demo ul li {\n    width: 12.5%;\n  }\n}\n/***\nCustomized Bootstrap Alerts\n***/\n.alert {\n  border-width: 1px;\n}\n.alert.alert-borderless {\n  border: 0;\n}\n\n/***\nBootstrap Alerts\n***/\n.alert-success {\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n  color: #3c763d;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n\n.alert-info {\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n  color: #31708f;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n\n.alert-warning {\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n  color: #8a6d3b;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n\n.alert-danger {\n  background-color: #f2dede;\n  border-color: #ebccd1;\n  color: #a94442;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n\n/***\nCustom Bootstrap Badges\n***/\n.badge {\n  font-size: 11px !important;\n  font-weight: 300;\n  text-align: center;\n  height: 18px;\n  padding: 3px 6px 3px 6px;\n  -webkit-border-radius: 12px !important;\n  -moz-border-radius: 12px !important;\n  border-radius: 12px !important;\n  text-shadow: none !important;\n  text-align: center;\n  vertical-align: middle;\n}\n.badge.badge-roundless {\n  -webkit-border-radius: 0 !important;\n  -moz-border-radius: 0 !important;\n  border-radius: 0 !important;\n}\n.badge.badge-empty {\n  display: inline-block;\n  padding: 0;\n  min-width: 8px;\n  height: 8px;\n  width: 8px;\n}\n\n/* Badge variants */\n.badge-default {\n  background-color: #c6c6c6;\n  background-image: none;\n}\n\n.badge-primary {\n  background-color: #428bca;\n  background-image: none;\n}\n\n.badge-info {\n  background-color: #89C4F4;\n  background-image: none;\n}\n\n.badge-success {\n  background-color: #45B6AF;\n  background-image: none;\n}\n\n.badge-danger {\n  background-color: #F3565D;\n  background-image: none;\n}\n\n.badge-warning {\n  background-color: #dfba49;\n  background-image: none;\n}\n\n/* Fix badge position for navs */\n.nav.nav-pills > li > a > .badge,\n.nav.nav-stacked > li > a > .badge {\n  margin-top: -2px;\n}\n\n/***\nDropdown Menu Badges\n***/\n.dropdown-menu > li > a > .badge {\n  position: absolute;\n  margin-top: 1px;\n  right: 3px;\n  display: inline;\n  font-size: 11px;\n  font-weight: 300;\n  text-shadow: none;\n  height: 18px;\n  padding: 3px 6px 3px 6px;\n  text-align: center;\n  vertical-align: middle;\n  -webkit-border-radius: 12px !important;\n  -moz-border-radius: 12px !important;\n  border-radius: 12px !important;\n}\n.dropdown-menu.badge-roundless {\n  -webkit-border-radius: 0 !important;\n  -moz-border-radius: 0 !important;\n  border-radius: 0 !important;\n}\n\n/***\nCustomized Bootstrap Buttons\n***/\n/* Default buttons */\n.btn {\n  border-width: 0;\n  padding: 7px 14px;\n  font-size: 14px;\n  outline: none !important;\n  background-image: none !important;\n  filter: none;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  text-shadow: none;\n}\n.btn.dropdown-toggle, .btn-group .btn.dropdown-toggle, .btn:hover, .btn:disabled, .btn[disabled], .btn:focus, .btn:active, .btn.active {\n  outline: none !important;\n  background-image: none !important;\n  filter: none;\n  text-shadow: none;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n\n.btn + .btn {\n  margin-left: 5px;\n}\n\n.btn-default {\n  border-width: 1px;\n  padding: 6px 13px;\n}\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n/* Bootstrap buttons */\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active {\n  color: #333;\n  background-color: #ededed;\n  border-color: #b3b3b3;\n}\n.open .btn-default.dropdown-toggle {\n  color: #333;\n  background-color: #ededed;\n  border-color: #b3b3b3;\n}\n.btn-default:active, .btn-default.active {\n  background-image: none;\n  background-color: #e0e0e0;\n}\n.btn-default:active:hover, .btn-default.active:hover {\n  background-color: #e6e6e6;\n}\n.open .btn-default.dropdown-toggle {\n  background-image: none;\n}\n.btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled]:active, .btn-default[disabled].active, fieldset[disabled] .btn-default, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default.active {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-default > i {\n  color: #aaa;\n}\n.btn-default > i[class^=\"icon-\"],\n.btn-default > i[class*=\"icon-\"] {\n  color: #8c8c8c;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active {\n  color: #fff;\n  background-color: #3379b5;\n  border-color: #2a6496;\n}\n.open .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #3379b5;\n  border-color: #2a6496;\n}\n.btn-primary:active, .btn-primary.active {\n  background-image: none;\n  background-color: #2d6ca2;\n}\n.btn-primary:active:hover, .btn-primary.active:hover {\n  background-color: #3071a9;\n}\n.open .btn-primary.dropdown-toggle {\n  background-image: none;\n}\n.btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled]:active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.btn-primary .badge {\n  color: #428bca;\n  background-color: #fff;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #45B6AF;\n  border-color: #3ea49d;\n}\n.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active {\n  color: #fff;\n  background-color: #3b9c96;\n  border-color: #307f7a;\n}\n.open .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #3b9c96;\n  border-color: #307f7a;\n}\n.btn-success:active, .btn-success.active {\n  background-image: none;\n  background-color: #348a84;\n}\n.btn-success:active:hover, .btn-success.active:hover {\n  background-color: #37918b;\n}\n.open .btn-success.dropdown-toggle {\n  background-image: none;\n}\n.btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled]:active, .btn-success[disabled].active, fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active {\n  background-color: #45B6AF;\n  border-color: #3ea49d;\n}\n.btn-success .badge {\n  color: #45B6AF;\n  background-color: #fff;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #89C4F4;\n  border-color: #72b8f2;\n}\n.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active {\n  color: #fff;\n  background-color: #68b4f1;\n  border-color: #43a1ed;\n}\n.open .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #68b4f1;\n  border-color: #43a1ed;\n}\n.btn-info:active, .btn-info.active {\n  background-image: none;\n  background-color: #51a8ef;\n}\n.btn-info:active:hover, .btn-info.active:hover {\n  background-color: #5aadf0;\n}\n.open .btn-info.dropdown-toggle {\n  background-image: none;\n}\n.btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled]:active, .btn-info[disabled].active, fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active {\n  background-color: #89C4F4;\n  border-color: #72b8f2;\n}\n.btn-info .badge {\n  color: #89C4F4;\n  background-color: #fff;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #dfba49;\n  border-color: #dbb233;\n}\n.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active {\n  color: #fff;\n  background-color: #daae2b;\n  border-color: #bb9521;\n}\n.open .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #daae2b;\n  border-color: #bb9521;\n}\n.btn-warning:active, .btn-warning.active {\n  background-image: none;\n  background-color: #c89f23;\n}\n.btn-warning:active:hover, .btn-warning.active:hover {\n  background-color: #d0a625;\n}\n.open .btn-warning.dropdown-toggle {\n  background-image: none;\n}\n.btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled]:active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning.active {\n  background-color: #dfba49;\n  border-color: #dbb233;\n}\n.btn-warning .badge {\n  color: #dfba49;\n  background-color: #fff;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #F3565D;\n  border-color: #f13e46;\n}\n.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active {\n  color: #fff;\n  background-color: #f1353d;\n  border-color: #ec111b;\n}\n.open .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #f1353d;\n  border-color: #ec111b;\n}\n.btn-danger:active, .btn-danger.active {\n  background-image: none;\n  background-color: #ef1d26;\n}\n.btn-danger:active:hover, .btn-danger.active:hover {\n  background-color: #f0262f;\n}\n.open .btn-danger.dropdown-toggle {\n  background-image: none;\n}\n.btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled]:active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger.active {\n  background-color: #F3565D;\n  border-color: #f13e46;\n}\n.btn-danger .badge {\n  color: #F3565D;\n  background-color: #fff;\n}\n\n/* Button sizes */\n.btn > i {\n  font-size: 14px;\n}\n\n.btn-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  vertical-align: middle;\n}\n.btn-lg > i {\n  font-size: 18px;\n}\n\n.btn-sm,\n.btn-xs {\n  padding: 4px 10px 5px 10px;\n  font-size: 13px;\n  line-height: 1.5;\n}\n.btn-sm > i,\n.btn-xs > i {\n  font-size: 13px;\n}\n\n.btn-xs {\n  padding: 1px 5px;\n}\n.btn-xs > i {\n  font-size: 12px;\n}\n\n/* Small button in button group */\n.btn-group .input-sm .btn-default {\n  padding-top: 3px;\n  padding-bottom: 3px;\n}\n\n/* Arrow link */\n.btn-arrow-link {\n  vertical-align: middle;\n  display: inline-block;\n  font-size: 13px;\n}\n.btn-arrow-link > i {\n  font-size: 14px;\n  line-height: 14px;\n  vertical-align: top;\n  margin: 2px 3px 2px 3px;\n  color: #999;\n}\n.btn-arrow-link.btn-arrow-link-lg {\n  font-size: 14px;\n}\n.btn-arrow-link.btn-arrow-link-lg > i {\n  font-size: 16px;\n  line-height: 16px;\n  margin: 2px 3px 1px 3px;\n}\n\n/* Circle Buttons */\n.btn-circle {\n  border-radius: 25px !important;\n}\n\n.btn-circle-right {\n  border-radius: 0 25px 25px 0 !important;\n}\n\n.btn-circle-left {\n  border-radius: 25px 0 0 25px !important;\n}\n\n.btn-circle-bottom {\n  border-radius: 0 0 25px 25px !important;\n}\n\n.btn-circle-top {\n  border-radius: 25px 25px 0 0 !important;\n}\n\n.btn-icon-only {\n  height: 34px;\n  width: 34px;\n  text-align: center;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-icon-only > [class^=\"icon-\"],\n.btn-icon-only > i {\n  text-align: center;\n  margin-top: 2px;\n}\n\n.btn-sm > [class^=\"glyphicon-\"],\n.btn-sm > [class*=\" glyphicon-\"],\n.btn-sm > i {\n  font-size: 13px;\n}\n\n.btn-xs > [class^=\"glyphicon-\"],\n.btn-xs > [class*=\" glyphicon-\"],\n.btn-xs > i {\n  font-size: 11px;\n}\n\n.btn-group.btn-group-circle > .btn:first-child {\n  border-radius: 25px 0 0 25px !important;\n}\n.btn-group.btn-group-circle > .btn:last-child {\n  border-radius: 0 25px 25px 0 !important;\n}\n\n.btn-group.btn-group-devided > .btn {\n  margin-right: 5px;\n}\n.btn-group.btn-group-devided > .btn:last-child {\n  margin-right: 0;\n}\n\n.btn-group-vertical.btn-group-vertical-circle > .btn:first-child {\n  border-radius: 25px 25px 0 0 !important;\n}\n.btn-group-vertical.btn-group-vertical-circle > .btn:last-child {\n  border-radius: 0 0 25px 25px !important;\n}\n\n/***\nImage Carousel\n***/\n.carousel.image-carousel .carousel-inner {\n  padding-top: 0;\n  padding-bottom: 0;\n}\n.carousel.image-carousel .carousel-control i {\n  position: absolute;\n  top: 40%;\n}\n.carousel.image-carousel.image-carousel-hoverable .carousel-control i {\n  display: none;\n}\n.carousel.image-carousel.image-carousel-hoverable:hover .carousel-control i {\n  display: inline-block;\n}\n.carousel.image-carousel .carousel-control.left i {\n  left: 10px;\n}\n.carousel.image-carousel .carousel-control.right i {\n  right: 10px;\n}\n.carousel.image-carousel .carousel-indicators {\n  margin-top: 10px;\n  bottom: -7px;\n}\n.carousel.image-carousel .carousel-indicators li {\n  background-color: #666;\n}\n.carousel.image-carousel .carousel-indicators li.active {\n  background-color: #666;\n}\n.carousel.image-carousel .carousel-caption {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 15px 15px 25px 15px;\n  background: #333333;\n  background: rgba(0, 0, 0, 0.75);\n}\n.carousel.image-carousel .carousel-caption h4,\n.carousel.image-carousel .carousel-caption h3,\n.carousel.image-carousel .carousel-caption h2,\n.carousel.image-carousel .carousel-caption p {\n  text-align: left;\n  line-height: 20px;\n  color: #ffffff;\n}\n.carousel.image-carousel .carousel-caption h4,\n.carousel.image-carousel .carousel-caption h3,\n.carousel.image-carousel .carousel-caption h2 {\n  margin: 0 0 5px;\n}\n.carousel.image-carousel .carousel-caption h4 a,\n.carousel.image-carousel .carousel-caption h3 a,\n.carousel.image-carousel .carousel-caption h2 a {\n  color: #aaa;\n}\n.carousel.image-carousel .carousel-caption p {\n  margin-bottom: 0;\n}\n.carousel.image-carousel .carousel-caption .item {\n  margin: 0;\n}\n\n/***\nCharts and statistics\n***/\n.chart,\n.pie,\n.bars {\n  overflow: hidden;\n  height: 300px;\n  width: 100%;\n  font-family: \"Open Sans\", sans-serif !important;\n  font-size: 14px;\n}\n\n/***\nStatistic lists\n***/\n.item-list.table .percent {\n  width: 30px;\n  float: right;\n  margin-right: 10px;\n  margin-top: 3px;\n}\n\n/***\nChart tooltips\n***/\n.chart-tooltip {\n  clear: both;\n  z-index: 100;\n  background-color: #736e6e !important;\n  padding: 5px !important;\n  color: #fff;\n}\n.chart-tooltip .label {\n  clear: both;\n  display: block;\n  margin-bottom: 2px;\n}\n\n/***\nMini chart containers\n***/\n.bar-chart,\n.line-chart {\n  display: none;\n}\n\n/***\nChats\n***/\n.chats {\n  margin: 0;\n  padding: 0;\n  margin-top: -15px;\n}\n.chats li {\n  list-style: none;\n  padding: 5px 0;\n  margin: 10px auto;\n  font-size: 12px;\n}\n.chats li .body {\n  display: block;\n}\n.chats li .avatar {\n  height: 45px;\n  width: 45px;\n  -webkit-border-radius: 50% !important;\n  -moz-border-radius: 50% !important;\n  border-radius: 50% !important;\n}\n.chats li.in .avatar {\n  float: left;\n  margin-right: 10px;\n}\n.chats li.out .avatar {\n  float: right;\n  margin-left: 10px;\n}\n.chats li .name {\n  color: #3590c1;\n  font-size: 13px;\n  font-weight: 400;\n}\n.chats li .datetime {\n  color: #333;\n  font-size: 13px;\n  font-weight: 400;\n}\n.chats li .message {\n  display: block;\n  padding: 5px;\n  position: relative;\n}\n.chats li.in .message {\n  text-align: left;\n  border-left: 2px solid #1BBC9B;\n  margin-left: 65px;\n  background: #fafafa;\n}\n.chats li.in .message .arrow {\n  display: block;\n  position: absolute;\n  top: 5px;\n  left: -8px;\n  width: 0;\n  height: 0;\n  border-top: 8px solid transparent;\n  border-bottom: 8px solid transparent;\n  border-right: 8px solid #1BBC9B;\n}\n.chats li.out .message {\n  border-right: 2px solid #F3565D;\n  margin-right: 65px;\n  background: #fafafa;\n  text-align: right;\n}\n.chats li.out .message .arrow {\n  display: block;\n  position: absolute;\n  top: 5px;\n  right: -8px;\n  border-top: 8px solid transparent;\n  border-bottom: 8px solid transparent;\n  border-left: 8px solid #F3565D;\n}\n.chats li.out .name,\n.chats li.out .datetime {\n  text-align: right;\n}\n\n.chat-form {\n  margin-top: 15px;\n  padding: 10px;\n  background-color: #e9eff3;\n  overflow: hidden;\n  clear: both;\n}\n.chat-form .input-cont {\n  margin-right: 40px;\n}\n.chat-form .input-cont .form-control {\n  border: 1px solid #ddd;\n  width: 100%  !important;\n  margin-top: 0;\n  background-color: #fff !important;\n}\n.chat-form .input-cont .form-control:focus {\n  border: 1px solid #4b8df9 !important;\n}\n.chat-form .btn-cont {\n  margin-top: -42px;\n  position: relative;\n  float: right;\n  width: 44px;\n}\n.chat-form .btn-cont .arrow {\n  position: absolute;\n  top: 17px;\n  right: 43px;\n  border-top: 8px solid transparent;\n  border-bottom: 8px solid transparent;\n  border-right: 8px solid #4d90fe;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.chat-form .btn-cont .btn {\n  margin-top: 8px;\n}\n.chat-form .btn-cont:hover .arrow {\n  border-right-color: #0362fd;\n}\n.chat-form .btn-cont:hover .btn {\n  background-color: #0362fd;\n}\n\n/***\nCustomized Bootstrap Close Icon \n***/\n.close {\n  display: inline-block;\n  margin-top: 0px;\n  margin-right: 0px;\n  width: 9px;\n  height: 9px;\n  background-repeat: no-repeat !important;\n  text-indent: -10000px;\n  outline: none;\n  background-image: url(\"../img/remove-icon-small.png\") !important;\n}\n\n/***\nCustomized Bootstrap Dropdowns\n***/\n/***\nDropdowns\n***/\n.dropup.open > .dropdown-toggle,\n.dropdown.open > .dropdown-toggle {\n  border-color: #ddd;\n}\n\n/***\nDropdown Menu\n***/\n.dropdown-menu {\n  min-width: 175px;\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  list-style: none;\n  text-shadow: none;\n  padding: 0px;\n  background-color: #ffffff;\n  margin: 10px  0px 0px 0px;\n  box-shadow: 5px 5px rgba(102, 102, 102, 0.1);\n  border: 1px solid #eee;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px;\n}\n.dropdown-menu li.divider {\n  background: #f1f3f6;\n}\n.dropdown-menu li.dropdown-header {\n  padding: 8px 14px 2px 14px;\n}\n.dropdown-menu li > a {\n  padding: 8px 14px;\n  color: #555;\n  text-decoration: none;\n  display: block;\n  clear: both;\n  font-weight: 300;\n  line-height: 18px;\n  white-space: nowrap;\n}\n.dropdown-menu li > a > [class^=\"fa-\"],\n.dropdown-menu li > a > [class*=\" fa-\"] {\n  color: #888;\n}\n.dropdown-menu li > a > [class^=\"icon-\"],\n.dropdown-menu li > a > [class*=\" icon-\"] {\n  color: #666;\n}\n.dropdown-menu li > a > [class^=\"glyphicon-\"],\n.dropdown-menu li > a > [class*=\" glyphicon-\"] {\n  color: #888;\n}\n.dropdown-menu li > a:hover,\n.dropdown-menu .active > a,\n.dropdown-menu .active > a:hover {\n  text-decoration: none;\n  background-image: none;\n  background-color: #f6f6f6;\n  color: #555;\n  filter: none;\n}\n.dropdown-menu.bottom-up {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n.dropdown-menu > li:first-child:hover > a {\n  border-radius: 4px 4px 0px 0px;\n}\n.dropdown-menu > li:last-child:hover > a {\n  border-radius: 0px 0px 4px 4px;\n}\n\n.dropdown > .dropdown-menu,\n.dropdown-toggle > .dropdown-menu,\n.btn-group > .dropdown-menu {\n  margin-top: 10px;\n}\n.dropdown > .dropdown-menu:before,\n.dropdown-toggle > .dropdown-menu:before,\n.btn-group > .dropdown-menu:before {\n  position: absolute;\n  top: -8px;\n  left: 9px;\n  right: auto;\n  display: inline-block !important;\n  border-right: 8px solid transparent;\n  border-bottom: 8px solid #e0e0e0;\n  border-left: 8px solid transparent;\n  content: '';\n}\n.dropdown > .dropdown-menu:after,\n.dropdown-toggle > .dropdown-menu:after,\n.btn-group > .dropdown-menu:after {\n  position: absolute;\n  top: -7px;\n  left: 10px;\n  right: auto;\n  display: inline-block !important;\n  border-right: 7px solid transparent;\n  border-bottom: 7px solid #fff;\n  border-left: 7px solid transparent;\n  content: '';\n}\n.dropdown > .dropdown-menu.pull-left:before,\n.dropdown-toggle > .dropdown-menu.pull-left:before,\n.btn-group > .dropdown-menu.pull-left:before {\n  left: auto;\n  right: 9px;\n}\n.dropdown > .dropdown-menu.pull-left:after,\n.dropdown-toggle > .dropdown-menu.pull-left:after,\n.btn-group > .dropdown-menu.pull-left:after {\n  left: auto;\n  right: 10px;\n}\n.dropdown > .dropdown-menu.pull-right:before,\n.dropdown-toggle > .dropdown-menu.pull-right:before,\n.btn-group > .dropdown-menu.pull-right:before {\n  left: auto;\n  right: 9px;\n}\n.dropdown > .dropdown-menu.pull-right:after,\n.dropdown-toggle > .dropdown-menu.pull-right:after,\n.btn-group > .dropdown-menu.pull-right:after {\n  left: auto;\n  right: 10px;\n}\n.dropdown.dropup > .dropdown-menu,\n.dropdown-toggle.dropup > .dropdown-menu,\n.btn-group.dropup > .dropdown-menu {\n  margin-top: 0px;\n  margin-bottom: 10px;\n}\n.dropdown.dropup > .dropdown-menu:after, .dropdown.dropup > .dropdown-menu:before,\n.dropdown-toggle.dropup > .dropdown-menu:after,\n.dropdown-toggle.dropup > .dropdown-menu:before,\n.btn-group.dropup > .dropdown-menu:after,\n.btn-group.dropup > .dropdown-menu:before {\n  display: none !important;\n}\n\n/* Dropdown submenu support for Bootsrap 3 */\n.dropdown-submenu {\n  position: relative;\n}\n.dropdown-submenu > .dropdown-menu {\n  top: 5px;\n  left: 100%;\n  margin-top: -6px;\n  margin-left: -1px;\n}\n.dropdown-submenu > a:after {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n  right: 7px;\n  top: 7px;\n  font-family: FontAwesome;\n  height: auto;\n  content: \"\\f105\";\n  font-weight: 300;\n}\n.dropdown-submenu:hover > .dropdown-menu {\n  display: block;\n}\n.dropdown-submenu:hover > a:after {\n  border-left-color: #ffffff;\n}\n.dropdown-submenu.pull-left {\n  float: none;\n}\n.dropdown-submenu.pull-left > .dropdown-menu {\n  left: -100%;\n  margin-left: 10px;\n}\n.dropup .dropdown-submenu > .dropdown-menu {\n  top: auto;\n  bottom: 0;\n  margin-top: 0;\n  margin-bottom: -2px;\n}\n\n.nav.pull-right > li > .dropdown-menu,\n.nav > li > .dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.nav.pull-right > li > .dropdown-menu:before,\n.nav > li > .dropdown-menu.pull-right:before {\n  right: 12px;\n  left: auto;\n}\n.nav.pull-right > li > .dropdown-menu:after,\n.nav > li > .dropdown-menu.pull-right:after {\n  right: 13px;\n  left: auto;\n}\n.nav.pull-right > li > .dropdown-menu .dropdown-menu,\n.nav > li > .dropdown-menu.pull-right .dropdown-menu {\n  right: 100%;\n  left: auto;\n  margin-right: -1px;\n  margin-left: 0;\n}\n\n@media (max-width: 767px) {\n  /* 767px */\n  .navbar-nav .open .dropdown-menu {\n    position: absolute;\n    float: left;\n    width: auto;\n    margin-top: 0;\n    background-color: #ffffff;\n    border: 1px solid #efefef;\n    box-shadow: 5px 5px rgba(102, 102, 102, 0.1);\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    padding: 6px 0 6px 13px;\n    color: #333;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:active {\n    background-color: #eee;\n  }\n}\n/***\nDropdown Checkboxes\n***/\n.dropdown-content {\n  padding: 5px;\n}\n.dropdown-content form {\n  margin: 0;\n}\n\n.dropdown.inline .dropdown-menu {\n  display: inline-block;\n  position: relative;\n}\n\n.dropdown-radiobuttons,\n.dropdown-checkboxes {\n  padding: 5px;\n}\n.dropdown-radiobuttons label,\n.dropdown-checkboxes label {\n  display: block;\n  font-weight: 300;\n  color: #333;\n  margin-bottom: 4px;\n  margin-top: 4px;\n}\n.dropdown-radiobuttons label .radio,\n.dropdown-checkboxes label .radio {\n  margin-right: 3px;\n}\n\n/***\nSystem feeds\n***/\n.feeds {\n  margin: 0px;\n  padding: 0px;\n  list-style: none;\n}\n.feeds li {\n  background-color: #fafafa;\n  color: #82949a;\n  margin-bottom: 7px;\n}\n.feeds li:before, .feeds li:after {\n  display: table;\n  line-height: 0;\n  content: \"\";\n}\n.feeds li:after {\n  clear: both;\n}\n.feeds li:last-child {\n  margin-bottom: 0px;\n}\n.feeds li .col1 {\n  float: left;\n  width: 100%;\n  clear: both;\n}\n.feeds li .col1 > .cont {\n  float: left;\n  margin-right: 75px;\n  overflow: hidden;\n}\n.feeds li .col1 > .cont > .cont-col1 {\n  float: left;\n  margin-right: -100%;\n}\n.feeds li .col1 > .cont > .cont-col1 > .label {\n  display: inline-block;\n  padding: 5px 4px 6px 5px;\n  vertical-align: middle;\n  text-align: center;\n}\n.feeds li .col1 > .cont > .cont-col1 > .label > i {\n  text-align: center;\n  font-size: 14px;\n}\n.feeds li .col1 > .cont > .cont-col2 {\n  float: left;\n  width: 100%;\n}\n.feeds li .col1 > .cont > .cont-col2 > .desc {\n  margin-left: 35px;\n  padding-top: 4px;\n  padding-bottom: 5px;\n  overflow: hidden;\n}\n.feeds li .col2 {\n  float: left;\n  width: 75px;\n  margin-left: -75px;\n}\n.feeds li .col2 > .date {\n  padding: 4px 9px 5px 4px;\n  text-align: right;\n  font-style: italic;\n  color: #c1cbd0;\n}\n\n/***\nForm Layouts\n****/\n/* Static info */\n.static-info {\n  margin-bottom: 10px;\n}\n.static-info .name {\n  font-size: 14px;\n}\n.static-info .value {\n  font-size: 14px;\n  font-weight: 600;\n}\n.static-info.align-reverse .name, .static-info.align-reverse .value {\n  text-align: right;\n}\n\n/* Help blocks */\n.help-block {\n  margin-top: 5px;\n  margin-bottom: 5px;\n}\n\n.help-inline {\n  font-size: 13px;\n  color: #737373;\n  display: inline-block;\n  padding: 5px;\n}\n\n.form-inline input {\n  margin-bottom: 0px !important;\n}\n\n/* Control Label */\n.control-label {\n  margin-top: 1px;\n}\n.control-label .required {\n  color: #e02222;\n  font-size: 12px;\n  padding-left: 2px;\n}\n\n.form {\n  padding: 0 !important;\n}\n.form .form-body {\n  padding: 10px;\n}\n.portlet.light .form .form-body {\n  padding-left: 0;\n  padding-right: 0;\n}\n.form .form-actions {\n  padding: 20px 10px;\n  margin: 0;\n  background-color: #f5f5f5;\n  border-top: 1px solid #e5e5e5;\n  *zoom: 1;\n}\n.portlet.light .form .form-actions {\n  background: none;\n  padding-left: 0;\n  padding-right: 0;\n}\n.form .form-actions.noborder {\n  border-top: 0;\n}\n.portlet .form .form-actions {\n  -webkit-border-radius: 0 0 4px 4px;\n  -moz-border-radius: 0 0 4px 4px;\n  -ms-border-radius: 0 0 4px 4px;\n  -o-border-radius: 0 0 4px 4px;\n  border-radius: 0 0 4px 4px;\n}\n.form .form-actions:before, .form .form-actions:after {\n  content: \" \";\n  display: table;\n}\n.form .form-actions:after {\n  clear: both;\n}\n.form .form-actions.right {\n  padding-left: 0;\n  padding-right: 10px;\n  text-align: right;\n}\n.portlet.light .form .form-actions.right {\n  padding-right: 0;\n}\n.form .form-actions.left {\n  padding-left: 10px;\n  padding-right: 0;\n  text-align: left;\n}\n.portlet.light .form .form-actions.left {\n  padding-left: 0;\n}\n.form .form-actions.nobg {\n  background-color: transparent;\n}\n.form .form-actions.top {\n  margin-top: 0;\n  margin-bottom: 20px;\n  border-top: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\n.portlet.light .form .form-actions.top {\n  background: none;\n}\n.form .form-actions .btn-set {\n  display: inline-block;\n}\n@media (max-width: 767px) {\n  .form .form-actions {\n    /* 767px */\n  }\n  .form .form-actions .btn-set {\n    margin-bottom: 3px;\n    margin-top: 3px;\n    float: left !important;\n  }\n}\n.form .form-section {\n  margin: 30px 0px 25px 0px;\n  padding-bottom: 5px;\n  border-bottom: 1px solid #eee;\n}\n.form .form-section:first-child {\n  margin-top: 5px;\n}\n\n/* Checkboxes */\n.checkbox,\n.form-horizontal .checkbox {\n  padding: 0;\n}\n.checkbox > label,\n.form-horizontal .checkbox > label {\n  padding-left: 0;\n}\n\n.checkbox-list > label {\n  display: block;\n}\n.checkbox-list > label.checkbox-inline {\n  display: inline-block;\n}\n.checkbox-list > label.checkbox-inline:first-child {\n  padding-left: 0;\n}\n\n/* Radio buttons */\n.radio-list > label {\n  display: block;\n}\n.radio-list > label.radio-inline {\n  display: inline-block;\n}\n.radio-list > label.radio-inline:first-child {\n  padding-left: 0;\n}\n\n/* Radio buttons in horizontal forms */\n.form-horizontal .radio-list .radio {\n  padding-top: 1px;\n}\n.form-horizontal .radio-list > label {\n  margin-bottom: 0;\n}\n.form-horizontal .radio > span {\n  margin-top: 2px;\n}\n\n/* Rows seperated form layout */\n.form .form-row-seperated .portlet-body {\n  padding: 0;\n}\n.form .form-row-seperated .form-group {\n  margin: 0;\n  border-bottom: 1px solid #efefef;\n  padding: 15px 0;\n}\n.form .form-row-seperated .form-group.last {\n  border-bottom: 0;\n  margin-bottom: 0;\n  padding-bottom: 13px;\n}\n.form .form-row-seperated .form-group .help-block {\n  margin-bottom: 0;\n}\n.form .form-row-seperated .form-body {\n  padding: 0;\n}\n.form .form-row-seperated .form-actions {\n  padding-left: 15px !important;\n  padding-right: 15px !important;\n}\n\n/* Form bordered */\n.form .form-bordered .form-group {\n  margin: 0;\n  border-bottom: 1px solid #efefef;\n}\n.form .form-bordered .form-group > div {\n  padding: 15px;\n  border-left: 1px solid #efefef;\n}\n@media (max-width: 991px) {\n  .form .form-bordered .form-group > div {\n    /* 991px */\n    border-left: 0;\n  }\n}\n.form .form-bordered .form-group.last {\n  border-bottom: 0;\n}\n.form .form-bordered .form-group .control-label {\n  padding-top: 20px;\n}\n@media (max-width: 991px) {\n  .form .form-bordered .form-group .control-label {\n    /* 991px */\n    padding-top: 10px;\n  }\n}\n.form .form-bordered .form-group .help-block {\n  margin-bottom: 0;\n}\n.form .form-bordered .form-group .form-control {\n  margin: 0;\n}\n.form .form-bordered .form-body {\n  margin: 0;\n  padding: 0;\n}\n.form .form-bordered .form-actions {\n  margin-top: 0;\n  padding-left: 16px !important;\n  padding-right: 16px !important;\n}\n@media (max-width: 991px) {\n  .form .form-bordered .form-actions {\n    /* 991px */\n    padding-left: 15px !important;\n    padding-right: 15px !important;\n  }\n}\n\n/* Horizontal bordered form */\n.form .form-horizontal.form-bordered.form-row-stripped .form-group:nth-child(even) {\n  background-color: #fcfcfc;\n}\n.form .form-horizontal.form-bordered.form-row-stripped .form-control {\n  background: #fff !important;\n}\n.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) {\n  background-color: #fcfcfc;\n}\n.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) > div {\n  background-color: #ffffff;\n}\n.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) {\n  background-color: #fcfcfc;\n}\n\n/***\nForms\n***/\n/* Input placeholder font color */\n.form-control::-moz-placeholder {\n  color: #b3b3b3;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #b3b3b3;\n}\n.form-control::-webkit-input-placeholder {\n  color: #b3b3b3;\n}\n\n/* Form inputs */\n.form-control {\n  font-size: 14px;\n  font-weight: normal;\n  color: #333;\n  background-color: #fff;\n  border: 1px solid #e5e5e5;\n  box-shadow: none;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px;\n}\n.form-control:focus {\n  border-color: #999;\n  outline: 0;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eeeeee;\n}\n.form-control.height-auto {\n  height: auto;\n}\n.form-control.form-control-solid {\n  background-color: #F1F3F8;\n  border-color: #F1F3F8;\n  color: #A6B2BA;\n}\n.form-control.form-control-solid:focus {\n  border-color: #e3e7f1;\n}\n.form-control.form-control-solid::-moz-placeholder {\n  color: #acb7be;\n  opacity: 1;\n}\n.form-control.form-control-solid:-ms-input-placeholder {\n  color: #acb7be;\n}\n.form-control.form-control-solid::-webkit-input-placeholder {\n  color: #acb7be;\n}\n\n/* Form uneditable input */\n.uneditable-input {\n  padding: 6px 12px;\n  min-width: 206px;\n  font-size: 14px;\n  font-weight: normal;\n  height: 34px;\n  color: #333;\n  background-color: #fff;\n  border: 1px solid #e5e5e5;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n\n/* Form input sizing */\n.input-mini {\n  width: 45px !important;\n}\n\n.input-xsmall {\n  width: 80px !important;\n}\n\n.input-small {\n  width: 145px !important;\n}\n\n.input-medium {\n  width: 240px !important;\n}\n\n.input-large {\n  width: 320px !important;\n}\n\n.input-xlarge {\n  width: 420px !important;\n}\n\n.input-inline {\n  display: inline-block;\n  width: auto;\n  vertical-align: middle;\n}\n\n.input-fixed {\n  overflow: hidden;\n}\n\n.form-group .input-inline {\n  margin-right: 5px;\n}\n\n.input-sm {\n  height: 28px;\n  padding: 5px 10px;\n  font-size: 13px;\n}\n\nselect.input-sm {\n  height: 28px;\n  line-height: 28px;\n  padding: 2px 10px;\n}\n\n@media (max-width: 768px) {\n  /* 768px */\n  .input-large {\n    width: 250px !important;\n  }\n\n  .input-xlarge {\n    width: 300px !important;\n  }\n}\n/* Input  groups */\n.input-group .btn-default {\n  border-color: #e5e5e5;\n}\n.input-group .input-group-addon {\n  border-color: #e5e5e5;\n  background: #e5e5e5;\n  min-width: 39px;\n}\n.input-group .input-group-addon > i {\n  color: #999;\n}\n\n/* Input spinner */\ninput[type=\"text\"].spinner,\ninput[type=\"password\"].spinner,\ninput[type=\"datetime\"].spinner,\ninput[type=\"datetime-local\"].spinner,\ninput[type=\"date\"].spinner,\ninput[type=\"month\"].spinner,\ninput[type=\"time\"].spinner,\ninput[type=\"week\"].spinner,\ninput[type=\"number\"].spinner,\ninput[type=\"email\"].spinner,\ninput[type=\"url\"].spinner,\ninput[type=\"search\"].spinner,\ninput[type=\"tel\"].spinner,\ninput[type=\"color\"].spinner {\n  background-image: url(\"../img/input-spinner.gif\") !important;\n  background-repeat: no-repeat;\n  background-position: right 8px;\n}\n\n/* Form labels */\nlabel {\n  font-weight: 400;\n  font-size: 14px;\n}\n\n/* Static form control */\n.form-control-static {\n  margin: 2px 0;\n  display: inline-block;\n}\n\n/* Feedback states */\n.has-success .help-block,\n.has-success .help-inline,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #d6e9c6;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.has-success .form-control:focus {\n  border-color: #bbdba1;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  border-color: #d6e9c6;\n  background-color: #dff0d8;\n}\n.has-success .input-group-addon > i {\n  color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n\n.has-warning .help-block,\n.has-warning .help-inline,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #faebcc;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.has-warning .form-control:focus {\n  border-color: #f5d89e;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  border-color: #faebcc;\n  background-color: #fcf8e3;\n}\n.has-warning .input-group-addon > i {\n  color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n\n.has-error .help-block,\n.has-error .help-inline,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #ebccd1;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.has-error .form-control:focus {\n  border-color: #dca7b0;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  border-color: #ebccd1;\n  background-color: #f2dede;\n}\n.has-error .input-group-addon > i {\n  color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n\n/* Circle Inputs */\n.input-circle {\n  border-radius: 25px !important;\n}\n\n.input-circle-right {\n  border-radius: 0 25px 25px 0 !important;\n}\n\n.input-circle-left {\n  border-radius: 25px 0 0 25px !important;\n}\n\n.input-circle-bottom {\n  border-radius: 0 0 25px 25px !important;\n}\n\n.input-circle-top {\n  border-radius: 25px 25px 0 0 !important;\n}\n\n/***\nCustom icon buttons\n***/\n.icon-btn {\n  height: 60px;\n  min-width: 80px;\n  margin: 5px 5px 0 0;\n  border: 1px solid #ddd;\n  padding: 12px 0px 0px 0px;\n  background-color: #fafafa;\n  background-image: none;\n  filter: none;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  display: inline-block;\n  color: #646464;\n  text-shadow: none;\n  text-align: center;\n  cursor: pointer;\n  position: relative;\n  -webkit-transition: all 0.3s ease;\n  -moz-transition: all 0.3s ease;\n  -ms-transition: all 0.3s ease;\n  -o-transition: all 0.3s ease;\n  transition: all 0.3s ease;\n}\n.icon-btn:hover {\n  text-decoration: none;\n  border-color: #999;\n  color: #444;\n  text-shadow: 0 1px 0px white;\n  -webkit-transition: all 0.3s ease;\n  -moz-transition: all 0.3s ease;\n  -ms-transition: all 0.3s ease;\n  -o-transition: all 0.3s ease;\n  transition: all 0.3s ease;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n.icon-btn:hover > .badge {\n  -webkit-transition: all 0.3s ease;\n  -moz-transition: all 0.3s ease;\n  -ms-transition: all 0.3s ease;\n  -o-transition: all 0.3s ease;\n  transition: all 0.3s ease;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n.icon-btn > div {\n  margin-top: 5px;\n  margin-bottom: 20px;\n  color: #000;\n  font-size: 12px;\n  font-weight: 300;\n}\n.icon-btn > .badge {\n  position: absolute;\n  font-size: 11px;\n  font-weight: 300;\n  top: -5px;\n  right: -5px;\n  padding: 3px 6px 3px 6px;\n  color: white;\n  text-shadow: none;\n  border-width: 0;\n  border-style: solid;\n  -webkit-border-radius: 12px;\n  -moz-border-radius: 12px;\n  border-radius: 12px;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n.icon-btn > i {\n  font-size: 18px;\n}\n.ie8 .icon-btn:hover {\n  filter: none;\n}\n\n/***\nInput icons\n***/\n.input-icon {\n  position: relative;\n}\n.input-icon > .form-control {\n  padding-left: 33px;\n}\n.input-group .input-icon > .form-control {\n  -webkit-border-radius: 4px 0 0 4px;\n  -moz-border-radius: 4px 0 0 4px;\n  -ms-border-radius: 4px 0 0 4px;\n  -o-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n}\n.input-icon > i {\n  color: #ccc;\n  display: block;\n  position: absolute;\n  margin: 11px 2px 4px 10px;\n  z-index: 3;\n  width: 16px;\n  font-size: 16px;\n  text-align: center;\n}\n.modal .input-icon > i {\n  z-index: 10055;\n}\n.has-success .input-icon > i {\n  color: #45B6AF;\n}\n.has-warning .input-icon > i {\n  color: #dfba49;\n}\n.has-info .input-icon > i {\n  color: #89C4F4;\n}\n.has-error .input-icon > i {\n  color: #F3565D;\n}\n.input-icon.right > .form-control {\n  padding-right: 33px;\n  padding-left: 12px;\n}\n.input-group .input-icon.right > .form-control {\n  -webkit-border-radius: 0 4px 4px 0;\n  -moz-border-radius: 0 4px 4px 0;\n  -ms-border-radius: 0 4px 4px 0;\n  -o-border-radius: 0 4px 4px 0;\n  border-radius: 0 4px 4px 0;\n}\n.input-icon.right > i {\n  right: 8px;\n  float: right;\n}\n.input-icon.input-icon-lg > i {\n  margin-top: 16px;\n}\n.input-icon.input-icon-sm > i {\n  margin-top: 8px;\n  font-size: 13px;\n}\n\n/***\nCustomized Bootstrap Labels\n***/\n.label {\n  text-shadow: none !important;\n  font-size: 13px;\n  font-weight: 300;\n  padding: 3px 6px 3px 6px;\n  color: #fff;\n  font-family: \"Open Sans\", sans-serif;\n}\n.label.label-sm {\n  font-size: 12px;\n  padding: 0px 4px 1px 4px;\n}\nh1 .label, h2 .label, h3 .label, h4 .label, h5 .label, h6 .label {\n  font-size: 75%;\n}\n\n/* Labels variants */\n.label-default {\n  background-color: #c6c6c6;\n}\n.label-default[href]:hover, .label-default[href]:focus {\n  background-color: #adadad;\n}\n\n.label-primary {\n  background-color: #428bca;\n}\n.label-primary[href]:hover, .label-primary[href]:focus {\n  background-color: #3071a9;\n}\n\n.label-success {\n  background-color: #45B6AF;\n}\n.label-success[href]:hover, .label-success[href]:focus {\n  background-color: #37918b;\n}\n\n.label-info {\n  background-color: #89C4F4;\n}\n.label-info[href]:hover, .label-info[href]:focus {\n  background-color: #5aadf0;\n}\n\n.label-warning {\n  background-color: #dfba49;\n}\n.label-warning[href]:hover, .label-warning[href]:focus {\n  background-color: #d0a625;\n}\n\n.label-danger {\n  background-color: #F3565D;\n}\n.label-danger[href]:hover, .label-danger[href]:focus {\n  background-color: #f0262f;\n}\n\n/***\nIconic labels\n***/\n.label.label-icon {\n  padding: 4px 0px 4px 4px;\n  margin-right: 2px;\n  text-align: center !important;\n}\n.label.label-icon > i {\n  font-size: 12px;\n  text-align: center !important;\n}\n.ie8 .label.label-icon, .ie9 .label.label-icon {\n  padding: 3px 0px 3px 3px;\n}\n\n/***\nText states\n***/\n.text-default {\n  color: #c6c6c6;\n}\n\n.text-primary {\n  color: #428bca;\n}\n\n.text-success {\n  color: #45B6AF;\n}\n\n.text-info {\n  color: #89C4F4;\n}\n\n.text-warning {\n  color: #dfba49;\n}\n\n.text-danger {\n  color: #F3565D;\n}\n\n/***\nCustomized List Group\n***/\n/* Contextual variants */\n.list-group > li:first-child {\n  border-radius-topleft: 4px;\n  border-radius-topright: 4px;\n}\n.list-group > li:last-child {\n  border-radius-bottomleft: 4px;\n  border-radius-bottomright: 4px;\n}\n\n.list-group .list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\n.list-group a.list-group-item-success {\n  color: #3c763d;\n}\n.list-group a.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\n.list-group a.list-group-item-success:hover, .list-group a.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\n.list-group a.list-group-item-success.active, .list-group a.list-group-item-success.active:hover, .list-group a.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n\n.list-group .list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\n.list-group a.list-group-item-info {\n  color: #31708f;\n}\n.list-group a.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\n.list-group a.list-group-item-info:hover, .list-group a.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\n.list-group a.list-group-item-info.active, .list-group a.list-group-item-info.active:hover, .list-group a.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n\n.list-group .list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\n.list-group a.list-group-item-warning {\n  color: #8a6d3b;\n}\n.list-group a.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\n.list-group a.list-group-item-warning:hover, .list-group a.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\n.list-group a.list-group-item-warning.active, .list-group a.list-group-item-warning.active:hover, .list-group a.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n\n.list-group .list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\n.list-group a.list-group-item-danger {\n  color: #a94442;\n}\n.list-group a.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\n.list-group a.list-group-item-danger:hover, .list-group a.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\n.list-group a.list-group-item-danger.active, .list-group a.list-group-item-danger.active:hover, .list-group a.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n\n/***\nUI Loading\n***/\n.loading-message {\n  display: inline-block;\n  min-width: 125px;\n  margin-left: -60px;\n  padding: 10px;\n  margin: 0 auto;\n  color: #000 !important;\n  font-size: 13px;\n  font-weight: 400;\n  text-align: center;\n  vertical-align: middle;\n}\n.loading-message.loading-message-boxed {\n  border: 1px solid #ddd;\n  background-color: #eee;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n  -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n}\n.loading-message > span {\n  line-height: 20px;\n  vertical-align: middle;\n}\n\n.page-loading {\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px;\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  min-width: 125px;\n  margin-left: -60px;\n  margin-top: -30px;\n  padding: 7px;\n  text-align: center;\n  color: #333;\n  font-size: 13px;\n  border: 1px solid #ddd;\n  background-color: #eee;\n  vertical-align: middle;\n  -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n  -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n}\n.page-loading > span {\n  line-height: 20px;\n  vertical-align: middle;\n}\n\n.page-spinner-bar {\n  position: fixed;\n  z-index: 10051;\n  width: 100px;\n  top: 40%;\n  left: 50%;\n  margin-left: -55px;\n  text-align: center;\n}\n.page-spinner-bar > div {\n  margin: 0 5px;\n  width: 18px;\n  height: 18px;\n  background: #eee;\n  border-radius: 100% !important;\n  display: inline-block;\n  -webkit-animation: bounceDelay 1.4s infinite ease-in-out;\n  animation: bounceDelay 1.4s infinite ease-in-out;\n  /* Prevent first frame from flickering when animation starts */\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n}\n.page-spinner-bar .bounce1 {\n  -webkit-animation-delay: -0.32s;\n  animation-delay: -0.32s;\n}\n.page-spinner-bar .bounce2 {\n  -webkit-animation-delay: -0.16s;\n  animation-delay: -0.16s;\n}\n\n.block-spinner-bar {\n  display: inline-block;\n  width: 80px;\n  text-align: center;\n}\n.block-spinner-bar > div {\n  margin: 0 2px;\n  width: 15px;\n  height: 15px;\n  background: #eee;\n  border-radius: 100% !important;\n  display: inline-block;\n  -webkit-animation: bounceDelay 1.4s infinite ease-in-out;\n  animation: bounceDelay 1.4s infinite ease-in-out;\n  /* Prevent first frame from flickering when animation starts */\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n}\n.block-spinner-bar .bounce1 {\n  -webkit-animation-delay: -0.32s;\n  animation-delay: -0.32s;\n}\n.block-spinner-bar .bounce2 {\n  -webkit-animation-delay: -0.16s;\n  animation-delay: -0.16s;\n}\n\n/***\nMetro icons\n***/\n[class^=\"m-icon-\"] {\n  display: inline-block;\n  width: 14px;\n  height: 14px;\n  margin-top: 3px;\n  line-height: 14px;\n  vertical-align: top;\n  background-image: url(../img/syncfusion-icons.png);\n  background-position: 0 0;\n  background-repeat: no-repeat;\n}\n\n[class^=\"m-icon-big-\"] {\n  display: inline-block;\n  width: 30px;\n  height: 30px;\n  margin: 6px;\n  vertical-align: middle;\n  background-image: url(../img/syncfusion-icons.png);\n  background-position: 0 0px;\n  background-repeat: no-repeat;\n}\n\n/* large icons */\n.btn.m-icon-big {\n  padding: 9px 16px 8px 16px;\n}\n\n.btn.m-icon-big.m-icon-only {\n  padding: 9px 8px 8px 0px;\n}\n\n.btn.m-icon-big [class^=\"m-icon-big-\"] {\n  margin: 0 0 0 10px;\n}\n\n.btn.m-icon-ony > i {\n  margin-left: 0px;\n}\n\n/* default icons */\n.btn.m-icon {\n  padding: 7px 14px 7px 14px;\n}\n\n.btn.m-icon [class^=\"m-icon-\"] {\n  margin: 4px 0 0 5px;\n}\n\n.btn.m-icon.m-icon-only {\n  padding: 7px 10px 7px 6px;\n}\n\n/* white icon */\n.m-icon-white {\n  background-image: url(../img/syncfusion-icons-white.png);\n}\n\n/*  Misc */\n.m-icon-swapright {\n  background-position: -27px -10px;\n}\n\n.m-icon-swapdown {\n  background-position: -68px -10px;\n}\n\n.m-icon-swapleft {\n  background-position: -8px -10px;\n}\n\n.m-icon-swapup {\n  background-position: -46px -10px;\n}\n\n.m-icon-big-swapright {\n  background-position: -42px -28px;\n}\n\n.m-icon-big-swapdown {\n  background-position: -115px -28px;\n}\n\n.m-icon-big-swapleft {\n  background-position: -6px -28px;\n}\n\n.m-icon-big-swapup {\n  background-position: -78px -28px;\n}\n\n/***\nCustomized Bootstrap Modal \n***/\n.modal {\n  z-index: 10050;\n  outline: none;\n  overflow-y: auto !important;\n  /* Fix content shifting to the right on modal open due to scrollbar closed */\n}\n.page-portlet-fullscreen .modal {\n  z-index: 10060;\n}\n.modal .modal-header {\n  border-bottom: 1px solid #EFEFEF;\n}\n.modal .modal-header h3 {\n  font-weight: 300;\n}\n.modal .modal-header .close {\n  margin-top: 0px !important;\n}\n.modal.draggable-modal .modal-header {\n  cursor: move;\n}\n.modal .modal-dialog {\n  z-index: 10051;\n}\n.modal > .loading {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin-top: -22px;\n  margin-left: -22px;\n}\n.modal.in .page-loading {\n  display: none;\n}\n\n.modal-open {\n  overflow-y: auto !important;\n}\n\n.modal-open-noscroll {\n  overflow-y: hidden !important;\n}\n\n.modal-backdrop {\n  border: 0;\n  outline: none;\n  z-index: 10049;\n}\n.page-portlet-fullscreen .modal-backdrop {\n  z-index: 10059;\n}\n.modal-backdrop, .modal-backdrop.fade.in {\n  background-color: #333 !important;\n}\n\n/* Full width modal */\n.modal-full.modal-dialog {\n  width: 99%;\n}\n\n@media (max-width: 768px) {\n  .modal-full.modal-dialog {\n    width: auto;\n  }\n}\n/***\nNotes\n***/\n.note {\n  margin: 0 0 20px 0;\n  padding: 15px 30px 15px 15px;\n  border-left: 5px solid #eee;\n  -webkit-border-radius: 0 4px 4px 0;\n  -moz-border-radius: 0 4px 4px 0;\n  -ms-border-radius: 0 4px 4px 0;\n  -o-border-radius: 0 4px 4px 0;\n  border-radius: 0 4px 4px 0;\n}\n.note h1,\n.note h2,\n.note h3,\n.note h4,\n.note h5,\n.note h6 {\n  margin-top: 0;\n}\n.note h1 .close,\n.note h2 .close,\n.note h3 .close,\n.note h4 .close,\n.note h5 .close,\n.note h6 .close {\n  margin-right: -10px;\n}\n.note p {\n  font-size: 13px;\n}\n.note p:last-child {\n  margin-bottom: 0;\n}\n.note code,\n.note .highlight {\n  background-color: #fff;\n}\n.note.note-default {\n  background-color: lightgray;\n  border-color: #adadad;\n  color: #333333;\n}\n.note.note-default.note-bordered {\n  background-color: #c3c3c3;\n  border-color: #a0a0a0;\n}\n.note.note-default.note-shadow {\n  background-color: #c6c6c6;\n  border-color: #a0a0a0;\n  box-shadow: 5px 5px rgba(162, 162, 162, 0.2);\n}\n.note.note-primary {\n  background-color: #5697d0;\n  border-color: #3085a9;\n  color: #D8E3F2;\n}\n.note.note-primary.note-bordered {\n  background-color: #3e89c9;\n  border-color: #2a7696;\n}\n.note.note-primary.note-shadow {\n  background-color: #428bca;\n  border-color: #2a7696;\n  box-shadow: 5px 5px rgba(43, 121, 154, 0.2);\n}\n.note.note-success {\n  background-color: #eef7ea;\n  border-color: #c9e2b3;\n  color: #3c763d;\n}\n.note.note-success.note-bordered {\n  background-color: #dcefd4;\n  border-color: #bbdba1;\n}\n.note.note-success.note-shadow {\n  background-color: #dff0d8;\n  border-color: #bbdba1;\n  box-shadow: 5px 5px rgba(190, 220, 164, 0.2);\n}\n.note.note-info {\n  background-color: #eef7fb;\n  border-color: #a6e1ec;\n  color: #31708f;\n}\n.note.note-info.note-bordered {\n  background-color: #d5ebf6;\n  border-color: #91d9e8;\n}\n.note.note-info.note-shadow {\n  background-color: #d9edf7;\n  border-color: #91d9e8;\n  box-shadow: 5px 5px rgba(150, 219, 233, 0.2);\n}\n.note.note-warning {\n  background-color: #fcf8e3;\n  border-color: #f5d89e;\n  color: #8a6d3b;\n}\n.note.note-warning.note-bordered {\n  background-color: #f9f1c7;\n  border-color: #f2cf87;\n}\n.note.note-warning.note-shadow {\n  background-color: #faf2cc;\n  border-color: #f2cf87;\n  box-shadow: 5px 5px rgba(243, 209, 139, 0.2);\n}\n.note.note-danger {\n  background-color: #f9f0f0;\n  border-color: #e4b9c0;\n  color: #a94442;\n}\n.note.note-danger.note-bordered {\n  background-color: #f1dada;\n  border-color: #dca7b0;\n}\n.note.note-danger.note-shadow {\n  background-color: #f2dede;\n  border-color: #dca7b0;\n  box-shadow: 5px 5px rgba(222, 171, 179, 0.2);\n}\n\n/***\nCustomized Bootstrap Pagination\n***/\n.pagination {\n  margin: 10px 0;\n}\n.pagination.pagination-circle > li:first-child > a {\n  border-radius: 25px 0 0 25px !important;\n}\n.pagination.pagination-circle > li:last-child > a {\n  border-radius: 0 25px 25px 0 !important;\n}\n.pagination .active > a,\n.pagination .active > a:hover {\n  background: #eee;\n  border-color: #dddddd;\n  color: #333;\n}\n\n/***\nCustomized Bootstrap Panels\n***/\n.panel {\n  -webkit-box-shadow: none !important;\n  -moz-box-shadow: none !important;\n  box-shadow: none !important;\n}\n.panel-group .panel {\n  overflow: visible;\n}\n.panel .panel-body {\n  font-size: 13px;\n}\n.panel .panel-title > a:hover {\n  text-decoration: none;\n}\n.accordion .panel .panel-heading {\n  padding: 0;\n}\n.accordion .panel .panel-title {\n  padding: 0;\n}\n.accordion .panel .panel-title .accordion-toggle {\n  display: block;\n  padding: 10px 15px;\n}\n.accordion .panel .panel-title .accordion-toggle.accordion-toggle-styled {\n  background: url(\"../img/accordion-plusminus.png\") no-repeat;\n  background-position: right -19px;\n  margin-right: 15px;\n}\n.accordion .panel .panel-title .accordion-toggle.accordion-toggle-styled.collapsed {\n  background-position: right 12px;\n}\n\n.panel-default {\n  border-color: #e0e0e0;\n}\n.panel-default > .panel-heading {\n  color: #333333;\n  background-color: #f9f9f9;\n  border-color: #e0e0e0;\n}\n.panel-default > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #e0e0e0;\n}\n.panel-default > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #e0e0e0;\n}\n\n.panel-primary {\n  border-color: #3595bd;\n}\n.panel-primary > .panel-heading {\n  color: #D8E3F2;\n  background-color: #428bca;\n  border-color: #3595bd;\n}\n.panel-primary > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #3595bd;\n}\n.panel-primary > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #3595bd;\n}\n\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #bce8f1;\n}\n\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #faebcc;\n}\n\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #ebccd1;\n}\n\n/***\nAccordions\n***/\n.accordion-heading {\n  background: #eee;\n}\n.accordion-heading a {\n  text-decoration: none;\n}\n.accordion-heading a:hover {\n  text-decoration: none;\n}\n\n/***\nCustomized Bootstrap Popover\n***/\n.popover {\n  box-shadow: 5px 5px rgba(102, 102, 102, 0.1);\n  padding: 0;\n}\n.popover .popover-title {\n  margin: 0 !important;\n}\n\n.popover.name .popover-title,\nname .popover .popover-content,\n.popover.name .popover-content {\n  color: #89C4F4;\n}\n\n.popover.name .popover-title,\nname .popover .popover-content,\n.popover.name .popover-content {\n  color: #428bca;\n}\n\n.popover.name .popover-title,\nname .popover .popover-content,\n.popover.name .popover-content {\n  color: #45B6AF;\n}\n\n.popover.name .popover-title,\nname .popover .popover-content,\n.popover.name .popover-content {\n  color: #dfba49;\n}\n\n.popover.name .popover-title,\nname .popover .popover-content,\n.popover.name .popover-content {\n  color: #F3565D;\n}\n\n/***\nPortlets\n***/\n/* Full Screen portlet mode */\n.page-portlet-fullscreen {\n  overflow: hidden;\n}\n\n/* Basic portlet */\n.portlet {\n  margin-top: 0px;\n  margin-bottom: 25px;\n  padding: 0px;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px;\n}\n.portlet.portlet-fullscreen {\n  z-index: 10060;\n  margin: 0;\n  position: fixed;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  width: 100%;\n  height: 100%;\n  background: #fff;\n}\n.portlet.portlet-fullscreen > .portlet-body {\n  overflow-y: auto;\n  overflow-x: hidden;\n  padding: 0 10px;\n}\n.portlet.portlet-fullscreen > .portlet-title {\n  padding: 0 10px;\n}\n.portlet > .portlet-title {\n  border-bottom: 1px solid #eee;\n  padding: 0;\n  margin-bottom: 10px;\n  min-height: 41px;\n  -webkit-border-radius: 4px 4px 0 0;\n  -moz-border-radius: 4px 4px 0 0;\n  -ms-border-radius: 4px 4px 0 0;\n  -o-border-radius: 4px 4px 0 0;\n  border-radius: 4px 4px 0 0;\n}\n.portlet > .portlet-title:before, .portlet > .portlet-title:after {\n  content: \" \";\n  display: table;\n}\n.portlet > .portlet-title:after {\n  clear: both;\n}\n.portlet > .portlet-title > .caption {\n  float: left;\n  display: inline-block;\n  font-size: 18px;\n  line-height: 18px;\n  padding: 10px 0;\n}\n.portlet > .portlet-title > .caption.bold {\n  font-weight: 400;\n}\n.portlet > .portlet-title > .caption > i {\n  float: left;\n  margin-top: 4px;\n  display: inline-block;\n  font-size: 13px;\n  margin-right: 5px;\n  color: #666;\n}\n.portlet > .portlet-title > .caption > i.glyphicon {\n  margin-top: 2px;\n}\n.portlet > .portlet-title > .caption > .caption-helper {\n  padding: 0;\n  margin: 0;\n  line-height: 13px;\n  color: #9eacb4;\n  font-size: 13px;\n  font-weight: 400;\n}\n.portlet > .portlet-title > .actions {\n  float: right;\n  display: inline-block;\n  padding: 6px 0;\n}\n.portlet > .portlet-title > .actions > .dropdown-menu i {\n  color: #555555;\n}\n.portlet > .portlet-title > .actions > .btn,\n.portlet > .portlet-title > .actions > .btn.btn-sm,\n.portlet > .portlet-title > .actions > .btn-group > .btn,\n.portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm {\n  padding: 4px 10px;\n  font-size: 13px;\n  line-height: 1.5;\n}\n.portlet > .portlet-title > .actions > .btn.btn-default,\n.portlet > .portlet-title > .actions > .btn.btn-sm.btn-default,\n.portlet > .portlet-title > .actions > .btn-group > .btn.btn-default,\n.portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm.btn-default {\n  padding: 3px 9px;\n}\n.portlet > .portlet-title > .actions > .btn > i,\n.portlet > .portlet-title > .actions > .btn.btn-sm > i,\n.portlet > .portlet-title > .actions > .btn-group > .btn > i,\n.portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm > i {\n  font-size: 13px;\n}\n.portlet > .portlet-title > .actions .btn-icon-only {\n  padding: 5px 7px 3px 7px;\n}\n.portlet > .portlet-title > .actions .btn-icon-only.btn-default {\n  padding: 4px 6px 2px 6px;\n}\n.portlet > .portlet-title > .actions .btn-icon-only.btn-default > i {\n  font-size: 14px;\n}\n.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen {\n  font-family: FontAwesome;\n  color: #a0a0a0;\n  padding-top: 3px;\n}\n.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen.btn-sm {\n  padding: 3px 3px !important;\n  height: 27px;\n  width: 27px;\n}\n.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen:before {\n  content: \"\\f065\";\n}\n.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen.on:before {\n  content: \"\\f066\";\n}\n.portlet > .portlet-title > .tools {\n  float: right;\n  display: inline-block;\n  padding: 12px 0 8px 0;\n}\n.portlet > .portlet-title > .tools > a {\n  display: inline-block;\n  height: 16px;\n  margin-left: 5px;\n  opacity: 1 ;\n  filter: alpha(opacity=100) ;\n}\n.portlet > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon.png);\n  background-repeat: no-repeat;\n  width: 11px;\n}\n.portlet > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon.png);\n  background-repeat: no-repeat;\n  width: 12px;\n}\n.portlet > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon.png);\n  width: 13px;\n}\n.portlet > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon.png);\n  width: 14px;\n  visibility: visible;\n}\n.portlet > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon.png);\n  width: 14px;\n  visibility: visible;\n}\n.portlet > .portlet-title > .tools > a.fullscreen {\n  display: inline-block;\n  top: -3px;\n  position: relative;\n  font-size: 13px;\n  font-family: FontAwesome;\n  color: #ACACAC;\n}\n.portlet > .portlet-title > .tools > a.fullscreen:before {\n  content: \"\\f065\";\n}\n.portlet > .portlet-title > .tools > a.fullscreen.on:before {\n  content: \"\\f066\";\n}\n.portlet > .portlet-title > .tools > a:hover {\n  text-decoration: none;\n  -webkit-transition: all 0.1s ease-in-out;\n  -moz-transition: all 0.1s ease-in-out;\n  -o-transition: all 0.1s ease-in-out;\n  -ms-transition: all 0.1s ease-in-out;\n  transition: all 0.1s ease-in-out;\n  opacity: 0.8 ;\n  filter: alpha(opacity=80) ;\n}\n.portlet > .portlet-title > .pagination {\n  float: right;\n  display: inline-block;\n  margin: 2px 0 0 0;\n  border: 0;\n  padding: 4px 0;\n}\n.portlet > .portlet-title > .nav-tabs {\n  background: none;\n  margin: 0;\n  float: right;\n  display: inline-block;\n  border: 0;\n}\n.portlet > .portlet-title > .nav-tabs > li {\n  background: none;\n  margin: 0;\n  border: 0;\n}\n.portlet > .portlet-title > .nav-tabs > li > a {\n  background: none;\n  margin: 5px 0 0 1px;\n  border: 0;\n  padding: 8px 10px;\n  color: #fff;\n}\n.portlet > .portlet-title > .nav-tabs > li.active > a, .portlet > .portlet-title > .nav-tabs > li:hover > a {\n  color: #333;\n  background: #fff;\n  border: 0;\n}\n.portlet > .portlet-body {\n  clear: both;\n  -webkit-border-radius: 0 0 4px 4px;\n  -moz-border-radius: 0 0 4px 4px;\n  -ms-border-radius: 0 0 4px 4px;\n  -o-border-radius: 0 0 4px 4px;\n  border-radius: 0 0 4px 4px;\n}\n.portlet > .portlet-empty {\n  min-height: 125px;\n}\n.portlet.full-height-content {\n  margin-bottom: 0;\n}\n\n/* Portlet background colors */\n/* Side bordered portlet */\n.portlet.bordered {\n  border-left: 2px solid #e6e9ec !important;\n}\n.portlet.bordered > .portlet-title {\n  border-bottom: 0;\n}\n\n/* Solid colored portlet */\n.portlet.solid {\n  padding: 0 10px 10px 10px;\n  border: 0px;\n}\n.portlet.solid > .portlet-title {\n  border-bottom: 0;\n  margin-bottom: 10px;\n}\n.portlet.solid > .portlet-title > .caption {\n  padding: 16px 0 2px 0;\n}\n.portlet.solid > .portlet-title > .actions {\n  padding: 12px 0 6px 0;\n}\n.portlet.solid > .portlet-title > .tools {\n  padding: 14px 0 6px 0;\n}\n\n/* Solid bordered portlet */\n.portlet.solid.bordered > .portlet-title {\n  margin-bottom: 10px;\n}\n\n/* Box portlet */\n.portlet.box {\n  padding: 0px !important;\n}\n.portlet.box > .portlet-title {\n  border-bottom: 0;\n  padding: 0 10px;\n  margin-bottom: 0;\n  color: #fff;\n}\n.portlet.box > .portlet-title > .caption {\n  padding: 11px 0 9px 0;\n}\n.portlet.box > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.box > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.box > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.box > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.box > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.box > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n.portlet.box > .portlet-title > .actions {\n  padding: 7px 0 5px 0;\n}\n.portlet.box > .portlet-body {\n  background-color: #fff;\n  padding: 10px;\n}\n.portlet.box.portlet-fullscreen > .portlet-body {\n  padding: 10px;\n}\n\n/* Light Portlet */\n.portlet.light {\n  padding: 12px 20px 15px 20px;\n  background-color: #fff;\n}\n.portlet.light.bordered {\n  border: 1px solid #e1e1e1 !important;\n}\n.portlet.light.bordered > .portlet-title {\n  border-bottom: 1px solid #eee;\n}\n.portlet.light.bg-inverse {\n  background: #F7F7F7;\n}\n.portlet.light > .portlet-title {\n  padding: 0;\n  min-height: 48px;\n}\n.portlet.light > .portlet-title > .caption {\n  color: #666;\n  padding: 10px 0;\n}\n.portlet.light > .portlet-title > .caption > .caption-subject {\n  font-size: 16px;\n}\n.portlet.light > .portlet-title > .caption > i {\n  color: #777;\n  font-size: 15px;\n  font-weight: 300;\n  margin-top: 3px;\n}\n.portlet.light > .portlet-title > .caption.caption-md > .caption-subject {\n  font-size: 15px;\n}\n.portlet.light > .portlet-title > .caption.caption-md > i {\n  font-size: 14px;\n}\n.portlet.light > .portlet-title > .actions {\n  padding: 6px 0 14px 0;\n}\n.portlet.light > .portlet-title > .actions .btn-default {\n  color: #666;\n}\n.portlet.light > .portlet-title > .actions .btn-icon-only {\n  height: 27px;\n  width: 27px;\n}\n.portlet.light > .portlet-title > .actions .dropdown-menu li > a {\n  color: #555;\n}\n.portlet.light > .portlet-title > .inputs {\n  float: right;\n  display: inline-block;\n  padding: 4px 0;\n}\n.portlet.light > .portlet-title > .inputs > .portlet-input .input-icon > i {\n  font-size: 14px;\n  margin-top: 9px;\n}\n.portlet.light > .portlet-title > .inputs > .portlet-input .input-icon > .form-control {\n  height: 30px;\n  padding: 2px 26px 3px 10px;\n  font-size: 13px;\n}\n.portlet.light > .portlet-title > .inputs > .portlet-input > .form-control {\n  height: 30px;\n  padding: 3px 10px;\n  font-size: 13px;\n}\n.portlet.light > .portlet-title > .pagination {\n  padding: 2px 0 13px 0;\n}\n.portlet.light > .portlet-title > .tools {\n  padding: 10px 0 13px 0;\n  margin-top: 2px;\n}\n.portlet.light > .portlet-title > .nav-tabs > li {\n  margin: 0;\n  padding: 0;\n}\n.portlet.light > .portlet-title > .nav-tabs > li > a {\n  margin: 0;\n  padding: 12px 13px 13px 13px;\n  font-size: 13px;\n  color: #666;\n}\n.portlet.light > .portlet-title > .nav-tabs > li.active > a, .portlet.light > .portlet-title > .nav-tabs > li:hover > a {\n  margin: 0;\n  background: none;\n  color: #333;\n}\n.portlet.light.form-fit {\n  padding: 0;\n}\n.portlet.light.form-fit > .portlet-title {\n  padding: 17px 20px 10px 20px;\n  margin-bottom: 0;\n}\n.portlet.light .portlet-body {\n  padding-top: 8px;\n}\n.portlet.light.portlet-fullscreen > .portlet-body {\n  padding: 8px 0;\n}\n\n.tab-pane > p:last-child {\n  margin-bottom: 0px;\n}\n\n/* Reverse aligned tabs */\n.tabs-reversed > li {\n  float: right;\n  margin-right: 0;\n}\n.tabs-reversed > li > a {\n  margin-right: 0;\n}\n\n/* jQuery UI Draggable Portlets */\n.portlet-sortable:not(.portlet-fullscreen) > .portlet-title {\n  cursor: move;\n}\n\n.portlet-sortable-placeholder {\n  border: 2px dashed #eee;\n  margin-bottom: 25px;\n}\n\n.portlet-sortable-empty {\n  box-shadow: none !important;\n  height: 45px;\n}\n\n/***\nCustomized Progress Bars\n***/\n.progress {\n  border: 0;\n  background-image: none;\n  filter: none;\n  box-shadow: none;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n.progress.progress-sm {\n  height: 12px;\n}\n\n.progress > .progress-bar-default {\n  background-color: #c6c6c6;\n}\n.progress-striped .progress > .progress-bar-default {\n  background-image: none;\n  background-image: none;\n}\n\n.progress > .progress-bar-success {\n  background-color: #45B6AF;\n}\n.progress-striped .progress > .progress-bar-success {\n  background-image: none;\n  background-image: none;\n}\n\n.progress > .progress-bar-info {\n  background-color: #89C4F4;\n}\n.progress-striped .progress > .progress-bar-info {\n  background-image: none;\n  background-image: none;\n}\n\n.progress > .progress-bar-danger {\n  background-color: #F3565D;\n}\n.progress-striped .progress > .progress-bar-danger {\n  background-image: none;\n  background-image: none;\n}\n\n.progress > .progress-bar-warning {\n  background-color: #dfba49;\n}\n.progress-striped .progress > .progress-bar-warning {\n  background-image: none;\n  background-image: none;\n}\n\n/***\nDashboard Stats\n***/\n.dashboard-stat {\n  display: block;\n  margin-bottom: 25px;\n  overflow: hidden;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px;\n}\n.dashboard-stat:before, .dashboard-stat:after {\n  content: \" \";\n  display: table;\n}\n.dashboard-stat:after {\n  clear: both;\n}\n.portlet .dashboard-stat:last-child {\n  margin-bottom: 0;\n}\n.dashboard-stat .visual {\n  width: 80px;\n  height: 80px;\n  display: block;\n  float: left;\n  padding-top: 10px;\n  padding-left: 15px;\n  margin-bottom: 15px;\n  font-size: 35px;\n  line-height: 35px;\n}\n.dashboard-stat .visual > i {\n  margin-left: -35px;\n  font-size: 110px;\n  line-height: 110px;\n}\n.dashboard-stat .details {\n  position: absolute;\n  right: 15px;\n  padding-right: 15px;\n}\n.dashboard-stat .details .number {\n  padding-top: 25px;\n  text-align: right;\n  font-size: 34px;\n  line-height: 36px;\n  letter-spacing: -1px;\n  margin-bottom: 0px;\n  font-weight: 300;\n}\n.dashboard-stat .details .desc {\n  text-align: right;\n  font-size: 16px;\n  letter-spacing: 0px;\n  font-weight: 300;\n}\n.dashboard-stat .more {\n  clear: both;\n  display: block;\n  padding: 6px 10px 6px 10px;\n  position: relative;\n  text-transform: uppercase;\n  font-weight: 300;\n  font-size: 11px;\n  opacity: 0.7;\n  filter: alpha(opacity=70);\n}\n.dashboard-stat .more:hover {\n  text-decoration: none;\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n.dashboard-stat .more > i {\n  display: inline-block;\n  margin-top: 1px;\n  float: right;\n}\n\n.dashboard-stat-light {\n  padding-bottom: 20px;\n  margin-bottom: 20px;\n}\n.dashboard-stat-light .details {\n  margin-bottom: 5px;\n}\n.dashboard-stat-light .details .number {\n  font-weight: 300;\n  margin-bottom: 0px;\n}\n\n/***\nDashboard Stats 2\n***/\n.dashboard-stat2 {\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px;\n  background: #fff;\n  padding: 15px 15px 30px 15px;\n  margin-bottom: 20px;\n}\n.dashboard-stat2 .display {\n  margin-bottom: 20px;\n}\n.dashboard-stat2 .display:before, .dashboard-stat2 .display:after {\n  content: \" \";\n  display: table;\n}\n.dashboard-stat2 .display:after {\n  clear: both;\n}\n.dashboard-stat2 .display .number {\n  float: left;\n  display: inline-block;\n}\n.dashboard-stat2 .display .number h3 {\n  margin: 0 0 2px 0;\n  padding: 0;\n  font-size: 30px;\n  font-weight: 400;\n}\n.dashboard-stat2 .display .number h3 > small {\n  font-size: 23px;\n}\n.dashboard-stat2 .display .number small {\n  font-size: 14px;\n  color: #AAB5BC;\n  font-weight: 600;\n  text-transform: uppercase;\n}\n.dashboard-stat2 .display .icon {\n  display: inline-block;\n  float: right;\n  padding: 7px 0 0 0;\n}\n.dashboard-stat2 .display .icon > i {\n  color: #cbd4e0;\n  font-size: 26px;\n}\n.dashboard-stat2 .progress-info {\n  clear: both;\n}\n.dashboard-stat2 .progress-info .progress {\n  margin: 0;\n  height: 4px;\n  clear: both;\n  display: block;\n}\n.dashboard-stat2 .progress-info .status {\n  margin-top: 5px;\n  font-size: 11px;\n  color: #AAB5BC;\n  font-weight: 600;\n  text-transform: uppercase;\n}\n.dashboard-stat2 .progress-info .status .status-title {\n  float: left;\n  display: inline-block;\n}\n.dashboard-stat2 .progress-info .status .status-number {\n  float: right;\n  display: inline-block;\n}\n\n/***\nText Stats\n***/\n.text-stat h3 {\n  margin-top: 5px;\n  margin-bottom: 0px;\n  font-size: 18px;\n}\n.text-stat span {\n  font-size: 13px !important;\n}\n\n@media (max-width: 767px) {\n  /* 767px */\n  .text-stat {\n    margin-top: 20px;\n  }\n}\n/***\nSocial Icons\n***/\n.social-icons {\n  padding: 0;\n  margin: 0;\n}\n.social-icons:before, .social-icons:after {\n  content: \" \";\n  display: table;\n}\n.social-icons:after {\n  clear: both;\n}\n.social-icons li {\n  float: left;\n  display: inline;\n  list-style: none;\n  margin-right: 5px;\n  margin-bottom: 5px;\n  text-indent: -9999px;\n}\n.social-icons li > a {\n  -webkit-border-radius: 2px;\n  -moz-border-radius: 2px;\n  -ms-border-radius: 2px;\n  -o-border-radius: 2px;\n  border-radius: 2px;\n  width: 28px;\n  height: 28px;\n  display: block;\n  background-position: 0 0;\n  background-repeat: no-repeat;\n  transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  -ms-transition: all 0.3s ease-in-out;\n  -moz-transition: all 0.3s ease-in-out;\n  -webkit-transition: all 0.3s ease-in-out;\n}\n.social-icons li:hover > a {\n  background-position: 0 -38px;\n}\n.social-icons li .amazon {\n  background: url(../img/social/amazon.png) no-repeat;\n}\n.social-icons li .behance {\n  background: url(../img/social/behance.png) no-repeat;\n}\n.social-icons li .blogger {\n  background: url(../img/social/blogger.png) no-repeat;\n}\n.social-icons li .deviantart {\n  background: url(../img/social/deviantart.png) no-repeat;\n}\n.social-icons li .dribbble {\n  background: url(../img/social/dribbble.png) no-repeat;\n}\n.social-icons li .dropbox {\n  background: url(../img/social/dropbox.png) no-repeat;\n}\n.social-icons li .evernote {\n  background: url(../img/social/evernote.png) no-repeat;\n}\n.social-icons li .facebook {\n  background: url(../img/social/facebook.png) no-repeat;\n}\n.social-icons li .forrst {\n  background: url(../img/social/forrst.png) no-repeat;\n}\n.social-icons li .github {\n  background: url(../img/social/github.png) no-repeat;\n}\n.social-icons li .googleplus {\n  background: url(../img/social/googleplus.png) no-repeat;\n}\n.social-icons li .jolicloud {\n  background: url(../img/social/jolicloud.png) no-repeat;\n}\n.social-icons li .last-fm {\n  background: url(../img/social/last-fm.png) no-repeat;\n}\n.social-icons li .linkedin {\n  background: url(../img/social/linkedin.png) no-repeat;\n}\n.social-icons li .picasa {\n  background: url(../img/social/picasa.png) no-repeat;\n}\n.social-icons li .pintrest {\n  background: url(../img/social/pintrest.png) no-repeat;\n}\n.social-icons li .rss {\n  background: url(../img/social/rss.png) no-repeat;\n}\n.social-icons li .skype {\n  background: url(../img/social/skype.png) no-repeat;\n}\n.social-icons li .spotify {\n  background: url(../img/social/spotify.png) no-repeat;\n}\n.social-icons li .stumbleupon {\n  background: url(../img/social/stumbleupon.png) no-repeat;\n}\n.social-icons li .tumblr {\n  background: url(../img/social/tumblr.png) no-repeat;\n}\n.social-icons li .twitter {\n  background: url(../img/social/twitter.png) no-repeat;\n}\n.social-icons li .vimeo {\n  background: url(../img/social/vimeo.png) no-repeat;\n}\n.social-icons li .wordpress {\n  background: url(../img/social/wordpress.png) no-repeat;\n}\n.social-icons li .xing {\n  background: url(../img/social/xing.png) no-repeat;\n}\n.social-icons li .yahoo {\n  background: url(../img/social/yahoo.png) no-repeat;\n}\n.social-icons li .youtube {\n  background: url(../img/social/youtube.png) no-repeat;\n}\n.social-icons li .vk {\n  background: url(../img/social/vk.png) no-repeat;\n}\n.social-icons li .instagram {\n  background: url(../img/social/instagram.png) no-repeat;\n}\n.social-icons li .reddit {\n  background: url(../img/social/reddit.png) no-repeat;\n}\n.social-icons li .aboutme {\n  background: url(../img/social/aboutme.png) no-repeat;\n}\n.social-icons li .flickr {\n  background: url(../img/social/flickr.png) no-repeat;\n}\n.social-icons li .foursquare {\n  background: url(../img/social/foursquare.png) no-repeat;\n}\n.social-icons li .gravatar {\n  background: url(../img/social/gravatar.png) no-repeat;\n}\n.social-icons li .klout {\n  background: url(../img/social/klout.png) no-repeat;\n}\n.social-icons li .myspace {\n  background: url(../img/social/myspace.png) no-repeat;\n}\n.social-icons li .quora {\n  background: url(../img/social/quora.png) no-repeat;\n}\n.social-icons.social-icons-color > li > a {\n  opacity: 0.7;\n  background-position: 0 -38px !important;\n}\n.social-icons.social-icons-color > li > a:hover {\n  opacity: 1;\n}\n.social-icons.social-icons-circle > li > a {\n  border-radius: 25px !important;\n}\n\n/***\nInline Social Icons\n***/\n.social-icon {\n  display: inline-block !important;\n  width: 28px;\n  height: 28px;\n  background-position: 0 0;\n  background-repeat: no-repeat;\n  -webkit-border-radius: 2px;\n  -moz-border-radius: 2px;\n  -ms-border-radius: 2px;\n  -o-border-radius: 2px;\n  border-radius: 2px;\n  transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  -ms-transition: all 0.3s ease-in-out;\n  -moz-transition: all 0.3s ease-in-out;\n  -webkit-transition: all 0.3s ease-in-out;\n}\n.social-icon.social-icon-circle {\n  border-radius: 25px !important;\n}\n\n.social-icon.amazon {\n  background: url(../img/social/amazon.png) no-repeat;\n}\n.social-icon.behance {\n  background: url(../img/social/behance.png) no-repeat;\n}\n.social-icon.blogger {\n  background: url(../img/social/blogger.png) no-repeat;\n}\n.social-icon.deviantart {\n  background: url(../img/social/deviantart.png) no-repeat;\n}\n.social-icon.dribbble {\n  background: url(../img/social/dribbble.png) no-repeat;\n}\n.social-icon.dropbox {\n  background: url(../img/social/dropbox.png) no-repeat;\n}\n.social-icon.evernote {\n  background: url(../img/social/evernote.png) no-repeat;\n}\n.social-icon.facebook {\n  background: url(../img/social/facebook.png) no-repeat;\n}\n.social-icon.forrst {\n  background: url(../img/social/forrst.png) no-repeat;\n}\n.social-icon.github {\n  background: url(../img/social/github.png) no-repeat;\n}\n.social-icon.googleplus {\n  background: url(../img/social/googleplus.png) no-repeat;\n}\n.social-icon.jolicloud {\n  background: url(../img/social/jolicloud.png) no-repeat;\n}\n.social-icon.last-fm {\n  background: url(../img/social/last-fm.png) no-repeat;\n}\n.social-icon.linkedin {\n  background: url(../img/social/linkedin.png) no-repeat;\n}\n.social-icon.picasa {\n  background: url(../img/social/picasa.png) no-repeat;\n}\n.social-icon.pintrest {\n  background: url(../img/social/pintrest.png) no-repeat;\n}\n.social-icon.rss {\n  background: url(../img/social/rss.png) no-repeat;\n}\n.social-icon.skype {\n  background: url(../img/social/skype.png) no-repeat;\n}\n.social-icon.spotify {\n  background: url(../img/social/spotify.png) no-repeat;\n}\n.social-icon.stumbleupon {\n  background: url(../img/social/stumbleupon.png) no-repeat;\n}\n.social-icon.tumblr {\n  background: url(../img/social/tumblr.png) no-repeat;\n}\n.social-icon.twitter {\n  background: url(../img/social/twitter.png) no-repeat;\n}\n.social-icon.vimeo {\n  background: url(../img/social/vimeo.png) no-repeat;\n}\n.social-icon.wordpress {\n  background: url(../img/social/wordpress.png) no-repeat;\n}\n.social-icon.xing {\n  background: url(../img/social/xing.png) no-repeat;\n}\n.social-icon.yahoo {\n  background: url(../img/social/yahoo.png) no-repeat;\n}\n.social-icon.youtube {\n  background: url(../img/social/youtube.png) no-repeat;\n}\n.social-icon.vk {\n  background: url(../img/social/vk.png) no-repeat;\n}\n.social-icon.instagram {\n  background: url(../img/social/instagram.png) no-repeat;\n}\n.social-icon.reddit {\n  background: url(../img/social/reddit.png) no-repeat;\n}\n.social-icon.aboutme {\n  background: url(../img/social/aboutme.png) no-repeat;\n}\n.social-icon.flickr {\n  background: url(../img/social/flickr.png) no-repeat;\n}\n.social-icon.foursquare {\n  background: url(../img/social/foursquare.png) no-repeat;\n}\n.social-icon.gravatar {\n  background: url(../img/social/gravatar.png) no-repeat;\n}\n.social-icon.klout {\n  background: url(../img/social/klout.png) no-repeat;\n}\n.social-icon.myspace {\n  background: url(../img/social/myspace.png) no-repeat;\n}\n.social-icon.quora {\n  background: url(../img/social/quora.png) no-repeat;\n}\n.social-icon:hover {\n  background-position: 0 -38px;\n}\n\n.social-icon-color {\n  opacity: 0.7;\n  background-position: 0 -38px !important;\n}\n.social-icon-color:hover {\n  opacity: 1;\n}\n\n/***\nCustomized Bootstrap Tables\n***/\n/***\nDefault table\n***/\n.table.table-bordered thead > tr > th {\n  border-bottom: 0;\n}\n.table tr.heading > th {\n  background-color: #eee !important;\n}\n.table td .img-responsive {\n  width: 100%;\n}\n\n/* Contextual table row variants */\n.table > thead > tr > td.active,\n.table > thead > tr > th.active, .table > thead > tr.active > td, .table > thead > tr.active > th,\n.table > tbody > tr > td.active,\n.table > tbody > tr > th.active,\n.table > tbody > tr.active > td,\n.table > tbody > tr.active > th,\n.table > tfoot > tr > td.active,\n.table > tfoot > tr > th.active,\n.table > tfoot > tr.active > td,\n.table > tfoot > tr.active > th {\n  background: #a6c8e6;\n  color: #132339;\n}\n\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr.active:hover > th {\n  background: #92bce0;\n}\n\n.table > thead > tr > td.success,\n.table > thead > tr > th.success, .table > thead > tr.success > td, .table > thead > tr.success > th,\n.table > tbody > tr > td.success,\n.table > tbody > tr > th.success,\n.table > tbody > tr.success > td,\n.table > tbody > tr.success > th,\n.table > tfoot > tr > td.success,\n.table > tfoot > tr > th.success,\n.table > tfoot > tr.success > td,\n.table > tfoot > tr.success > th {\n  background: #dff0d8;\n  color: #3c763d;\n}\n\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr.success:hover > th {\n  background: #d0e9c6;\n}\n\n.table > thead > tr > td.info,\n.table > thead > tr > th.info, .table > thead > tr.info > td, .table > thead > tr.info > th,\n.table > tbody > tr > td.info,\n.table > tbody > tr > th.info,\n.table > tbody > tr.info > td,\n.table > tbody > tr.info > th,\n.table > tfoot > tr > td.info,\n.table > tfoot > tr > th.info,\n.table > tfoot > tr.info > td,\n.table > tfoot > tr.info > th {\n  background: #d9edf7;\n  color: #31708f;\n}\n\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr.info:hover > th {\n  background: #c4e3f3;\n}\n\n.table > thead > tr > td.warning,\n.table > thead > tr > th.warning, .table > thead > tr.warning > td, .table > thead > tr.warning > th,\n.table > tbody > tr > td.warning,\n.table > tbody > tr > th.warning,\n.table > tbody > tr.warning > td,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr > td.warning,\n.table > tfoot > tr > th.warning,\n.table > tfoot > tr.warning > td,\n.table > tfoot > tr.warning > th {\n  background: #fcf8e3;\n  color: #8a6d3b;\n}\n\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr.warning:hover > th {\n  background: #faf2cc;\n}\n\n.table > thead > tr > td.danger,\n.table > thead > tr > th.danger, .table > thead > tr.danger > td, .table > thead > tr.danger > th,\n.table > tbody > tr > td.danger,\n.table > tbody > tr > th.danger,\n.table > tbody > tr.danger > td,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr > td.danger,\n.table > tfoot > tr > th.danger,\n.table > tfoot > tr.danger > td,\n.table > tfoot > tr.danger > th {\n  background: #f2dede;\n  color: #a94442;\n}\n\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr.danger:hover > th {\n  background: #ebcccc;\n}\n\n/***\nResponsive & Scrollable Tables\n***/\n.table-scrollable {\n  width: 100%;\n  overflow-x: auto;\n  overflow-y: hidden;\n  border: 1px solid #dddddd;\n  margin: 10px 0 !important;\n}\n.table-scrollable.table-scrollable-borderless {\n  border: 0;\n}\n.table-scrollable > .table {\n  width: 100% !important;\n  margin: 0 !important;\n  margin-bottom: 0;\n  background-color: #fff;\n}\n.table-scrollable > .table > thead > tr > th,\n.table-scrollable > .table > tbody > tr > th,\n.table-scrollable > .table > tfoot > tr > th,\n.table-scrollable > .table > tfoot > tr > th,\n.table-scrollable > .table > tfoot > tr > td {\n  white-space: nowrap;\n}\n.table-scrollable > .table-bordered {\n  border: 0;\n}\n.table-scrollable > .table-bordered > thead > tr > th:first-child,\n.table-scrollable > .table-bordered > tbody > tr > th:first-child,\n.table-scrollable > .table-bordered > tfoot > tr > th:first-child,\n.table-scrollable > .table-bordered > thead > tr > td:first-child,\n.table-scrollable > .table-bordered > tbody > tr > td:first-child,\n.table-scrollable > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.table-scrollable > .table-bordered > thead > tr > th:last-child,\n.table-scrollable > .table-bordered > tbody > tr > th:last-child,\n.table-scrollable > .table-bordered > tfoot > tr > th:last-child,\n.table-scrollable > .table-bordered > thead > tr > td:last-child,\n.table-scrollable > .table-bordered > tbody > tr > td:last-child,\n.table-scrollable > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.table-scrollable > .table-bordered > thead > tr:last-child > th,\n.table-scrollable > .table-bordered > tbody > tr:last-child > th,\n.table-scrollable > .table-bordered > tfoot > tr:last-child > th,\n.table-scrollable > .table-bordered > thead > tr:last-child > td,\n.table-scrollable > .table-bordered > tbody > tr:last-child > td,\n.table-scrollable > .table-bordered > tfoot > tr:last-child > td {\n  border-bottom: 0;\n}\n\n/***\nResponsive Flip Scroll Tables\n***/\n.flip-scroll table {\n  width: 100%;\n}\n\n@media only screen and (max-width: 768px) {\n  /* 768px */\n  .flip-scroll .flip-content:after {\n    visibility: hidden;\n    display: block;\n    font-size: 0;\n    content: \" \";\n    clear: both;\n    height: 0;\n  }\n\n  .flip-scroll * html .flip-content {\n    zoom: 1;\n  }\n\n  .flip-scroll *:first-child + html .flip-content {\n    zoom: 1;\n  }\n\n  .flip-scroll table {\n    width: 100%;\n    border-collapse: collapse;\n    border-spacing: 0;\n  }\n\n  .flip-scroll th,\n  .flip-scroll td {\n    margin: 0;\n    vertical-align: top;\n  }\n\n  .flip-scroll th {\n    text-align: left;\n    border: 0 !important;\n    border-bottom: 1px solid #ddd !important;\n    border-right: 1px solid #ddd !important;\n    font-size: 13px !important;\n    padding: 5px;\n    width: auto !important;\n  }\n\n  .flip-scroll table {\n    display: block;\n    position: relative;\n    width: 100%;\n  }\n\n  .flip-scroll thead {\n    display: block;\n    float: left;\n  }\n\n  .flip-scroll tbody {\n    display: block;\n    width: auto;\n    position: relative;\n    overflow-x: auto;\n    white-space: nowrap;\n  }\n\n  .flip-scroll thead tr {\n    display: block;\n  }\n\n  .flip-scroll th {\n    display: block;\n    text-align: right;\n  }\n\n  .flip-scroll tbody tr {\n    display: inline-block;\n    vertical-align: top;\n    margin-left: -5px;\n  }\n\n  .flip-scroll td {\n    display: block;\n    min-height: 1.25em;\n    text-align: left;\n    border-top: 0 !important;\n    border-left: 0 !important;\n    border-right: 0 !important;\n  }\n\n  /* sort out borders */\n  .flip-scroll th {\n    border-bottom: 0;\n    border-left: 0;\n  }\n\n  .flip-scroll td {\n    border-left: 0;\n    border-right: 0;\n    border-bottom: 0;\n  }\n\n  .flip-scroll tbody tr {\n    border-left: 1px solid #ddd;\n  }\n\n  .flip-scroll th:last-child,\n  .flip-scroll td:last-child {\n    border-bottom: 1px solid #ddd;\n  }\n}\n/***\nCustom tables\n***/\n.table-toolbar {\n  margin-bottom: 15px;\n}\n.table-toolbar:before, .table-toolbar:after {\n  content: \" \";\n  display: table;\n}\n.table-toolbar:after {\n  clear: both;\n}\n\n.table.table-full-width {\n  width: 100% !important;\n}\n\n.table .btn {\n  margin-top: 0px;\n  margin-left: 0px;\n  margin-right: 5px;\n}\n\n.table thead tr th {\n  font-size: 14px;\n  font-weight: 600;\n}\n\n.table-advance {\n  margin-bottom: 10px !important;\n}\n\n.table-advance thead {\n  color: #999;\n}\n\n.table-advance thead tr th {\n  background-color: #DDD;\n  font-size: 14px;\n  font-weight: 400;\n  color: #666;\n}\n\n.table-advance div.success,\n.table-advance div.info,\n.table-advance div.important,\n.table-advance div.warning,\n.table-advance div.danger {\n  position: absolute;\n  margin-top: -5px;\n  float: left;\n  width: 2px;\n  height: 30px;\n  margin-right: 20px !important;\n}\n\n.table-advance tr td {\n  border-left-width: 0px;\n}\n\n.table-advance tr td:first-child {\n  border-left-width: 1px !important;\n}\n\n.table-advance tr td.highlight:first-child a {\n  margin-left: 15px;\n}\n\n.table-advance td.highlight div.primary {\n  border-left: 2px solid #428bca;\n}\n\n.table-advance td.highlight div.success {\n  border-left: 2px solid #45B6AF;\n}\n\n.table-advance td.highlight div.info {\n  border-left: 2px solid #89C4F4;\n}\n\n.table-advance td.highlight div.warning {\n  border-left: 2px solid #dfba49;\n}\n\n.table-advance td.highlight div.danger {\n  border-left: 2px solid #F3565D;\n}\n\n@media (max-width: 767px) {\n  /* 767px */\n  .table-advance tr > td.highlight:first-child a {\n    margin-left: 8px;\n  }\n}\n/***\nLight Table\n***/\n.table.table-light {\n  border: 0 !important;\n}\n.table.table-light > thead > tr:hover > th {\n  background: none;\n}\n.table.table-light > thead > tr.uppercase {\n  text-transform: uppercase;\n}\n.table.table-light > thead > tr > th {\n  font-weight: 600;\n  font-size: 13px;\n  color: #93a2a9;\n  font-family: \"Open Sans\", sans-serif;\n  border: 0;\n  border-bottom: 1px solid #F2F5F8;\n}\n.table.table-light > tbody > tr:last-child > td {\n  border: 0;\n}\n.table.table-light > tbody > tr > td {\n  border: 0;\n  border-bottom: 1px solid #F2F5F8;\n  color: #8896a0;\n  vertical-align: middle;\n}\n.table.table-light > tbody > tr > td.fit {\n  width: 1px;\n  padding-right: 3px;\n}\n.table.table-light > tbody > tr > td .user-pic {\n  display: inline-block;\n  vertical-align: middle;\n  height: 30px;\n  -webkit-border-radius: 100%;\n  -moz-border-radius: 100%;\n  -ms-border-radius: 100%;\n  -o-border-radius: 100%;\n  border-radius: 100%;\n}\n.table.table-light.table-hover > tbody > tr > td:hover,\n.table.table-light.table-hover > tbody > tr > th:hover, .table.table-light.table-hover > tbody > tr:hover > td, .table.table-light.table-hover > tbody > tr:hover > th {\n  background: #f9fafb;\n}\n\n/***\nCustomized Bootstrap Tabs \n***/\n/* Tabs and pills */\n.nav-tabs,\n.nav-pills {\n  margin-bottom: 10px;\n}\n.nav-tabs > li > a,\n.nav-pills > li > a {\n  font-size: 14px;\n  -webkit-border-radius: 4px 4px 0 0;\n  -moz-border-radius: 4px 4px 0 0;\n  -ms-border-radius: 4px 4px 0 0;\n  -o-border-radius: 4px 4px 0 0;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a > .badge,\n.nav-pills > li > a > .badge {\n  margin-top: -6px;\n}\n.nav-tabs > li .dropdown-menu:before, .nav-tabs > li .dropdown-menu:after,\n.nav-pills > li .dropdown-menu:before,\n.nav-pills > li .dropdown-menu:after {\n  display: none;\n}\n.nav-tabs.nav-tabs-sm > li > a, .nav-tabs.nav-pills-sm > li > a,\n.nav-pills.nav-tabs-sm > li > a,\n.nav-pills.nav-pills-sm > li > a {\n  font-size: 13px;\n}\n.nav-tabs .dropdown.open > .dropdown-toggle,\n.nav-pills .dropdown.open > .dropdown-toggle {\n  background: #eee;\n  color: #0d638f;\n  border-color: transparent;\n}\n\n/* Left and right tabs */\n.tabs-right.nav-tabs,\n.tabs-left.nav-tabs {\n  border-bottom: 0;\n}\n.tabs-right.nav-tabs > li,\n.tabs-left.nav-tabs > li {\n  float: none;\n}\n.tabs-right.nav-tabs > li > a,\n.tabs-left.nav-tabs > li > a {\n  margin-right: 0;\n  margin-bottom: 3px;\n}\n\n/* Left tabs */\n.tabs-left.nav-tabs {\n  border-right: 1px solid #ddd;\n}\n.tabs-left.nav-tabs > li > a {\n  display: block;\n  margin-right: -1px;\n}\n.tabs-left.nav-tabs > li > a:hover, .tabs-left.nav-tabs > li > a:focus {\n  -webkit-border-radius: 4px 0 0 4px;\n  -moz-border-radius: 4px 0 0 4px;\n  -ms-border-radius: 4px 0 0 4px;\n  -o-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n  border-color: #eeeeee #dddddd #eeeeee #eeeeee;\n}\n.tabs-left.nav-tabs > li.active > a,\n.tabs-left.nav-tabs > li.active > a:hover\n> li.active > a:focus {\n  -webkit-border-radius: 4px 0 0 4px;\n  -moz-border-radius: 4px 0 0 4px;\n  -ms-border-radius: 4px 0 0 4px;\n  -o-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n  border-color: #ddd transparent #ddd #ddd;\n  *border-right-color: #ffffff;\n}\n\n/* Right tabs */\n.tabs-right.nav-tabs {\n  border-left: 1px solid #ddd;\n}\n.tabs-right.nav-tabs > li > a {\n  display: block;\n  margin-left: -1px;\n}\n.tabs-right.nav-tabs > li > a:hover, .tabs-right.nav-tabs > li > a:focus {\n  -webkit-border-radius: 0 4px 4px 0;\n  -moz-border-radius: 0 4px 4px 0;\n  -ms-border-radius: 0 4px 4px 0;\n  -o-border-radius: 0 4px 4px 0;\n  border-radius: 0 4px 4px 0;\n  border-color: #eeeeee #eeeeee #eeeeee #dddddd;\n}\n.tabs-right.nav-tabs > li.active > a,\n.tabs-right.nav-tabs > li.active > a:hover\n> li.active > a:focus {\n  -webkit-border-radius: 0 4px 4px 0;\n  -moz-border-radius: 0 4px 4px 0;\n  -ms-border-radius: 0 4px 4px 0;\n  -o-border-radius: 0 4px 4px 0;\n  border-radius: 0 4px 4px 0;\n  border-color: #ddd #ddd #ddd transparent;\n  *border-left-color: #ffffff;\n}\n\n/* Below tabs */\n.tabs-below > .nav-tabs,\n.tabs-below > .nav-pills {\n  border-bottom: 0;\n  margin-bottom: 0px;\n  margin-top: 10px;\n}\n\n.tabs-below > .nav-tabs {\n  border-top: 1px solid #ddd;\n  margin-bottom: 0;\n  margin-top: 10px;\n}\n.tabs-below > .nav-tabs > li > a {\n  margin-top: -1px;\n  margin-bottom: 0;\n}\n.tabs-below > .nav-tabs > li > a:hover, .tabs-below > .nav-tabs > li > a:focus {\n  border-top-color: #ddd;\n  border-bottom-color: transparent;\n}\n.tabs-below > .nav-tabs > li > a .dropdown-menu {\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px;\n}\n.tabs-below > .nav-tabs .active a,\n.tabs-below > .nav-tabs .active a:hover\n.active a:focus {\n  -webkit-border-radius: 0 0 4px 4px;\n  -moz-border-radius: 0 0 4px 4px;\n  -ms-border-radius: 0 0 4px 4px;\n  -o-border-radius: 0 0 4px 4px;\n  border-radius: 0 0 4px 4px;\n  border-color: transparent #ddd #ddd #ddd  !important;\n}\n\n/***\nCustom tabs\n***/\n/* In BS3.0.0 tabbable class was removed. We had to added it back */\n.tabbable:before, .tabbable:after {\n  content: \" \";\n  display: table;\n}\n.tabbable:after {\n  clear: both;\n}\n\n.tabbable-custom {\n  margin-bottom: 15px;\n  padding: 0px;\n  overflow: hidden;\n  /* justified tabs */\n  /* boxless tabs */\n  /* below justified tabs */\n  /* full width tabs */\n  /* below tabs */\n}\n.tabbable-custom > .nav-tabs {\n  border: none;\n  margin: 0px;\n}\n.tabbable-custom > .nav-tabs > li {\n  margin-right: 2px;\n  border-top: 2px solid transparent;\n}\n.tabbable-custom > .nav-tabs > li > a {\n  margin-right: 0;\n  -webkit-border-radius: 0;\n  -moz-border-radius: 0;\n  -ms-border-radius: 0;\n  -o-border-radius: 0;\n  border-radius: 0;\n}\n.tabbable-custom > .nav-tabs > li > a:hover {\n  background: none;\n  border-color: transparent;\n}\n.tabbable-custom > .nav-tabs > li.active {\n  border-top: 3px solid #F3565D;\n  margin-top: 0;\n  position: relative;\n}\n.tabbable-custom > .nav-tabs > li.active > a {\n  border-top: none !important;\n  font-weight: 400;\n  -webkit-border-radius: 0;\n  -moz-border-radius: 0;\n  -ms-border-radius: 0;\n  -o-border-radius: 0;\n  border-radius: 0;\n}\n.tabbable-custom > .nav-tabs > li.active > a:hover {\n  -webkit-border-radius: 0;\n  -moz-border-radius: 0;\n  -ms-border-radius: 0;\n  -o-border-radius: 0;\n  border-radius: 0;\n  border-top: none;\n  background: #fff;\n  border-color: #d4d4d4 #d4d4d4 transparent;\n}\n.tabbable-custom > .tab-content {\n  background-color: #fff;\n  border: 1px solid #ddd;\n  padding: 10px;\n  -webkit-border-radius: 0 0 4px 4px;\n  -moz-border-radius: 0 0 4px 4px;\n  -ms-border-radius: 0 0 4px 4px;\n  -o-border-radius: 0 0 4px 4px;\n  border-radius: 0 0 4px 4px;\n}\n.tabbable-custom.nav-justified > .tab-content {\n  margin-top: -1px;\n}\n.tabbable-custom.boxless > .tab-content {\n  padding: 15px 0;\n  border-left: none;\n  border-right: none;\n  border-bottom: none;\n}\n.tabbable-custom.tabs-below.nav-justified .tab-content {\n  margin-top: 0px;\n  margin-bottom: -2px;\n  -webkit-border-radius: 4px 4px 0 0;\n  -moz-border-radius: 4px 4px 0 0;\n  -ms-border-radius: 4px 4px 0 0;\n  -o-border-radius: 4px 4px 0 0;\n  border-radius: 4px 4px 0 0;\n}\n.tabbable-custom.tabbable-full-width > .nav-tabs > li > a {\n  color: #424242;\n  font-size: 15px;\n  padding: 9px 15px;\n}\n.tabbable-custom.tabbable-full-width > .tab-content {\n  padding: 15px 0;\n  border-left: none;\n  border-right: none;\n  border-bottom: none;\n}\n.tabbable-custom.tabs-below .nav-tabs > li > a {\n  border-top: none;\n  border-bottom: 2px solid transparent;\n  margin-top: -1px;\n}\n.tabbable-custom.tabs-below .nav-tabs > li.active {\n  border-top: none;\n  border-bottom: 3px solid #d12610;\n  margin-bottom: 0;\n  position: relative;\n}\n.tabbable-custom.tabs-below .nav-tabs > li.active > a {\n  border-bottom: none;\n}\n.tabbable-custom.tabs-below .nav-tabs > li.active > a:hover {\n  background: #fff;\n  border-color: #d4d4d4 #d4d4d4 transparent;\n}\n\n.tabbable-custom.tabbable-noborder > .nav-tabs > li > a {\n  border: 0;\n}\n.tabbable-custom.tabbable-noborder .tab-content {\n  border: 0;\n}\n\n.tabbable-line > .nav-tabs {\n  border: none;\n  margin: 0px;\n}\n.tabbable-line > .nav-tabs > li {\n  margin-right: 2px;\n}\n.tabbable-line > .nav-tabs > li > a {\n  border: 0;\n  margin-right: 0;\n  color: #737373;\n}\n.tabbable-line > .nav-tabs > li > a > i {\n  color: #a6a6a6;\n}\n.tabbable-line > .nav-tabs > li.open, .tabbable-line > .nav-tabs > li:hover {\n  border-bottom: 4px solid #fbcdcf;\n}\n.tabbable-line > .nav-tabs > li.open > a, .tabbable-line > .nav-tabs > li:hover > a {\n  border: 0;\n  background: none !important;\n  color: #333;\n}\n.tabbable-line > .nav-tabs > li.open > a > i, .tabbable-line > .nav-tabs > li:hover > a > i {\n  color: #a6a6a6;\n}\n.tabbable-line > .nav-tabs > li.open .dropdown-menu, .tabbable-line > .nav-tabs > li:hover .dropdown-menu {\n  margin-top: 0px;\n}\n.tabbable-line > .nav-tabs > li.active {\n  border-bottom: 4px solid #F3565D;\n  position: relative;\n}\n.tabbable-line > .nav-tabs > li.active > a {\n  border: 0;\n  color: #333;\n}\n.tabbable-line > .nav-tabs > li.active > a > i {\n  color: #404040;\n}\n.tabbable-line > .tab-content {\n  margin-top: -3px;\n  background-color: #fff;\n  border: 0;\n  border-top: 1px solid #eee;\n  padding: 15px 0;\n}\n.portlet .tabbable-line > .tab-content {\n  padding-bottom: 0;\n}\n\n.tabbable-line.tabs-below > .nav-tabs > li {\n  border-top: 4px solid transparent;\n}\n.tabbable-line.tabs-below > .nav-tabs > li > a {\n  margin-top: 0;\n}\n.tabbable-line.tabs-below > .nav-tabs > li:hover {\n  border-bottom: 0;\n  border-top: 4px solid #fbcdcf;\n}\n.tabbable-line.tabs-below > .nav-tabs > li.active {\n  margin-bottom: -2px;\n  border-bottom: 0;\n  border-top: 4px solid #F3565D;\n}\n.tabbable-line.tabs-below > .tab-content {\n  margin-top: -10px;\n  border-top: 0;\n  border-bottom: 1px solid #eee;\n  padding-bottom: 15px;\n}\n\n/***\nTiles(new in v1.1.1)\n***/\n.tiles {\n  margin-right: -10px;\n}\n.tiles:before, .tiles:after {\n  display: table;\n  content: \" \";\n}\n.tiles:after {\n  clear: both;\n}\n.tiles .tile {\n  display: block;\n  letter-spacing: 0.02em;\n  float: left;\n  height: 135px;\n  width: 135px !important;\n  cursor: pointer;\n  text-decoration: none;\n  color: #ffffff;\n  position: relative;\n  font-weight: 300;\n  font-size: 12px;\n  letter-spacing: 0.02em;\n  line-height: 20px;\n  overflow: hidden;\n  border: 4px solid transparent;\n  margin: 0 10px 10px 0;\n}\n.tiles .tile:after, .tiles .tile:before {\n  content: \"\";\n  float: left;\n}\n.tiles .tile.double {\n  width: 280px !important;\n}\n.tiles .tile.double-down {\n  height: 280px !important;\n}\n.tiles .tile.double-down i {\n  margin-top: 95px;\n}\n.tiles .tile:hover {\n  border-color: #aaa !important;\n}\n.tiles .tile:active, .tiles .tile.selected {\n  border-color: #ccc !important;\n}\n.tiles .tile.selected .corner:after {\n  content: \"\";\n  display: inline-block;\n  border-left: 40px solid transparent;\n  border-bottom: 40px solid transparent;\n  border-right: 40px solid #ccc;\n  position: absolute;\n  top: -3px;\n  right: -3px;\n}\n.tiles .tile.selected .check:after {\n  content: \"\";\n  font-family: FontAwesome;\n  font-size: 13px;\n  content: \"\\f00c\";\n  display: inline-block;\n  position: absolute;\n  top: 2px;\n  right: 2px;\n}\n.tiles .tile.icon {\n  padding: 0;\n}\n.tiles .tile.image .tile-body {\n  padding: 0 !important;\n}\n.tiles .tile.image .tile-body > img {\n  width: 100%;\n  height: auto;\n  min-height: 100%;\n  max-width: 100%;\n}\n.tiles .tile.image .tile-body h3 {\n  display: inline-block;\n}\n.tiles .tile .tile-body {\n  height: 100%;\n  vertical-align: top;\n  padding: 10px 10px;\n  overflow: hidden;\n  position: relative;\n  font-weight: 400;\n  font-size: 12px;\n  color: #000000;\n  color: #ffffff;\n  margin-bottom: 10px;\n}\n.tiles .tile .tile-body p {\n  font-weight: 400;\n  font-size: 13px;\n  color: #000000;\n  color: #ffffff;\n  line-height: 20px;\n  overflow: hidden;\n}\n.tiles .tile .tile-body p:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n.tiles .tile .tile-body p:active {\n  color: rgba(0, 0, 0, 0.4);\n}\n.tiles .tile .tile-body p:hover {\n  color: #ffffff;\n}\n.tiles .tile .tile-body img {\n  float: left;\n  margin-right: 10px;\n}\n.tiles .tile .tile-body img.pull-right {\n  float: right !important;\n  margin-left: 10px;\n  margin-right: 0px;\n}\n.tiles .tile .tile-body > .content {\n  display: inline-block;\n}\n.tiles .tile .tile-body > i {\n  margin-top: 17px;\n  display: block;\n  font-size: 56px;\n  line-height: 56px;\n  text-align: center;\n}\n.tiles .tile .tile-body h1,\n.tiles .tile .tile-body h2,\n.tiles .tile .tile-body h3,\n.tiles .tile .tile-body h4,\n.tiles .tile .tile-body h5,\n.tiles .tile .tile-body h6,\n.tiles .tile .tile-body p {\n  padding: 0;\n  margin: 0;\n  line-height: 14px;\n}\n.tiles .tile .tile-body h1:hover,\n.tiles .tile .tile-body h2:hover,\n.tiles .tile .tile-body h3:hover,\n.tiles .tile .tile-body h4:hover,\n.tiles .tile .tile-body h5:hover,\n.tiles .tile .tile-body h6:hover,\n.tiles .tile .tile-body p:hover {\n  color: #ffffff;\n}\n.tiles .tile .tile-body h3,\n.tiles .tile .tile-body h4 {\n  margin-bottom: 5px;\n}\n.tiles .tile .tile-object {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  min-height: 30px;\n  background-color: transparent;\n  *zoom: 1;\n}\n.tiles .tile .tile-object:before, .tiles .tile .tile-object:after {\n  display: table;\n  content: \"\";\n}\n.tiles .tile .tile-object:after {\n  clear: both;\n}\n.tiles .tile .tile-object > .name {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  margin-bottom: 5px;\n  margin-left: 10px;\n  margin-right: 15px;\n  font-weight: 400;\n  font-size: 13px;\n  color: #ffffff;\n}\n.tiles .tile .tile-object > .name > i {\n  vertical-align: middle;\n  display: block;\n  font-size: 24px;\n  height: 18px;\n  width: 24px;\n}\n.tiles .tile .tile-object > .number {\n  position: absolute;\n  bottom: 0;\n  right: 0;\n  margin-bottom: 0;\n  color: #ffffff;\n  text-align: center;\n  font-weight: 600;\n  font-size: 14px;\n  letter-spacing: 0.01em;\n  line-height: 14px;\n  margin-bottom: 8px;\n  margin-right: 10px;\n}\n\n/***\nCustimized Bootstrap Wells\n***/\n.well {\n  background-color: #eee;\n  border: 0;\n  -webkit-box-shadow: none !important;\n  -moz-box-shadow: none !important;\n  box-shadow: none !important;\n}\n\n/***\nAngularJS Basic Animations\n***/\n@-webkit-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(15px);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n  }\n}\n@-moz-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -moz-transform: translateY(15px);\n  }\n  100% {\n    opacity: 1;\n    -moz-transform: translateY(0);\n  }\n}\n@-o-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -o-transform: translateY(15px);\n  }\n  100% {\n    opacity: 1;\n    -o-transform: translateY(0);\n  }\n}\n@keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    transform: translateY(15px);\n  }\n  100% {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n.fade-in-up {\n  -webkit-animation: fadeInUp .5s;\n  animation: fadeInUp .5s;\n}\n\n@-webkit-keyframes bounceDelay {\n  0%, 80%, 100% {\n    -webkit-transform: scale(0);\n  }\n  40% {\n    -webkit-transform: scale(1);\n  }\n}\n@keyframes bounceDelay {\n  0%, 80%, 100% {\n    transform: scale(0);\n    -webkit-transform: scale(0);\n  }\n  40% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n  }\n}\n@keyframes input-focus {\n  0% {\n    left: 20%;\n    width: 20%;\n  }\n  99% {\n    width: 0;\n    left: 0;\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n/* Button */\n.btn.default {\n  color: #333333;\n  background-color: #E5E5E5;\n}\n.btn.default:hover, .btn.default:focus, .btn.default:active, .btn.default.active {\n  color: #333333;\n  background-color: lightgray;\n}\n.open .btn.default.dropdown-toggle {\n  color: #333333;\n  background-color: lightgray;\n}\n.btn.default:active, .btn.default.active {\n  background-image: none;\n  background-color: #c6c6c6;\n}\n.btn.default:active:hover, .btn.default.active:hover {\n  background-color: #cccccc;\n}\n.open .btn.default.dropdown-toggle {\n  background-image: none;\n}\n.btn.default.disabled, .btn.default.disabled:hover, .btn.default.disabled:focus, .btn.default.disabled:active, .btn.default.disabled.active, .btn.default[disabled], .btn.default[disabled]:hover, .btn.default[disabled]:focus, .btn.default[disabled]:active, .btn.default[disabled].active, fieldset[disabled] .btn.default, fieldset[disabled] .btn.default:hover, fieldset[disabled] .btn.default:focus, fieldset[disabled] .btn.default:active, fieldset[disabled] .btn.default.active {\n  background-color: #E5E5E5;\n}\n.btn.default .badge {\n  color: #E5E5E5;\n  background-color: #333333;\n}\n\n/**********\nBlue Colors\n***********/\n/***\nBlue Default\n***/\n/* Button */\n.blue.btn {\n  color: #FFFFFF;\n  background-color: #3598dc;\n}\n.blue.btn:hover, .blue.btn:focus, .blue.btn:active, .blue.btn.active {\n  color: #FFFFFF;\n  background-color: #2386ca;\n}\n.open .blue.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #2386ca;\n}\n.blue.btn:active, .blue.btn.active {\n  background-image: none;\n  background-color: #1f78b5;\n}\n.blue.btn:active:hover, .blue.btn.active:hover {\n  background-color: #217ebd;\n}\n.open .blue.btn.dropdown-toggle {\n  background-image: none;\n}\n.blue.btn.disabled, .blue.btn.disabled:hover, .blue.btn.disabled:focus, .blue.btn.disabled:active, .blue.btn.disabled.active, .blue.btn[disabled], .blue.btn[disabled]:hover, .blue.btn[disabled]:focus, .blue.btn[disabled]:active, .blue.btn[disabled].active, fieldset[disabled] .blue.btn, fieldset[disabled] .blue.btn:hover, fieldset[disabled] .blue.btn:focus, fieldset[disabled] .blue.btn:active, fieldset[disabled] .blue.btn.active {\n  background-color: #3598dc;\n}\n.blue.btn .badge {\n  color: #3598dc;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.blue-stripe {\n  border-left: 3px solid #3598dc;\n}\n\n/* Portlet */\n.portlet > .portlet-body.blue,\n.portlet.blue {\n  background-color: #3598dc;\n}\n\n.portlet.solid.blue > .portlet-title,\n.portlet.solid.blue > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.blue > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.blue > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.blue > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.blue > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.blue > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.blue > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.blue > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.blue > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.blue {\n  border: 1px solid #60aee4;\n  border-top: 0;\n}\n.portlet.box.blue > .portlet-title {\n  background-color: #3598dc;\n}\n.portlet.box.blue > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.blue > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.blue > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #95c9ed;\n  color: #aad4f0;\n}\n.portlet.box.blue > .portlet-title > .actions .btn-default > i {\n  color: #b7daf3;\n}\n.portlet.box.blue > .portlet-title > .actions .btn-default:hover, .portlet.box.blue > .portlet-title > .actions .btn-default:focus, .portlet.box.blue > .portlet-title > .actions .btn-default:active, .portlet.box.blue > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #c0dff4;\n  color: #d6eaf8;\n}\n\n/* Statistic Block */\n.dashboard-stat.blue {\n  background-color: #3598dc;\n}\n.dashboard-stat.blue.dashboard-stat-light:hover {\n  background-color: #258fd7;\n}\n.dashboard-stat.blue .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.blue .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.blue .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.blue .more {\n  color: #FFFFFF;\n  background-color: #258fd7;\n}\n\n/* General Element */\n.bg-blue {\n  border-color: #3598dc !important;\n  background-image: none !important;\n  background-color: #3598dc !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-blue {\n  color: #3598dc !important;\n}\n\n.progress-bar.blue {\n  background: #3598dc !important;\n  color: #FFFFFF !important;\n}\n\n/***\nBlue Madison\n***/\n/* Button */\n.blue-madison.btn {\n  color: #FFFFFF;\n  background-color: #578ebe;\n}\n.blue-madison.btn:hover, .blue-madison.btn:focus, .blue-madison.btn:active, .blue-madison.btn.active {\n  color: #FFFFFF;\n  background-color: #437cae;\n}\n.open .blue-madison.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #437cae;\n}\n.blue-madison.btn:active, .blue-madison.btn.active {\n  background-image: none;\n  background-color: #3c6f9c;\n}\n.blue-madison.btn:active:hover, .blue-madison.btn.active:hover {\n  background-color: #3f74a3;\n}\n.open .blue-madison.btn.dropdown-toggle {\n  background-image: none;\n}\n.blue-madison.btn.disabled, .blue-madison.btn.disabled:hover, .blue-madison.btn.disabled:focus, .blue-madison.btn.disabled:active, .blue-madison.btn.disabled.active, .blue-madison.btn[disabled], .blue-madison.btn[disabled]:hover, .blue-madison.btn[disabled]:focus, .blue-madison.btn[disabled]:active, .blue-madison.btn[disabled].active, fieldset[disabled] .blue-madison.btn, fieldset[disabled] .blue-madison.btn:hover, fieldset[disabled] .blue-madison.btn:focus, fieldset[disabled] .blue-madison.btn:active, fieldset[disabled] .blue-madison.btn.active {\n  background-color: #578ebe;\n}\n.blue-madison.btn .badge {\n  color: #578ebe;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.blue-madison-stripe {\n  border-left: 3px solid #578ebe;\n}\n\n/* Portlet */\n.portlet > .portlet-body.blue-madison,\n.portlet.blue-madison {\n  background-color: #578ebe;\n}\n\n.portlet.solid.blue-madison > .portlet-title,\n.portlet.solid.blue-madison > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.blue-madison > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.blue-madison > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.blue-madison > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.blue-madison > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.blue-madison > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.blue-madison > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.blue-madison > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.blue-madison > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.blue-madison {\n  border: 1px solid #7ca7cc;\n  border-top: 0;\n}\n.portlet.box.blue-madison > .portlet-title {\n  background-color: #578ebe;\n}\n.portlet.box.blue-madison > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.blue-madison > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.blue-madison > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #a8c4dd;\n  color: #bad1e4;\n}\n.portlet.box.blue-madison > .portlet-title > .actions .btn-default > i {\n  color: #c5d8e9;\n}\n.portlet.box.blue-madison > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-madison > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-madison > .portlet-title > .actions .btn-default:active, .portlet.box.blue-madison > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #cdddec;\n  color: #dfeaf3;\n}\n\n/* Statistic Block */\n.dashboard-stat.blue-madison {\n  background-color: #578ebe;\n}\n.dashboard-stat.blue-madison.dashboard-stat-light:hover {\n  background-color: #4884b8;\n}\n.dashboard-stat.blue-madison .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.blue-madison .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.blue-madison .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.blue-madison .more {\n  color: #FFFFFF;\n  background-color: #4884b8;\n}\n\n/* General Element */\n.bg-blue-madison {\n  border-color: #578ebe !important;\n  background-image: none !important;\n  background-color: #578ebe !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-blue-madison {\n  color: #578ebe !important;\n}\n\n.progress-bar.blue-madison {\n  background: #578ebe !important;\n  color: #FFFFFF !important;\n}\n\n/***\nBlue Chambray\n***/\n/* Button */\n.blue-chambray.btn {\n  color: #FFFFFF;\n  background-color: #2C3E50;\n}\n.blue-chambray.btn:hover, .blue-chambray.btn:focus, .blue-chambray.btn:active, .blue-chambray.btn.active {\n  color: #FFFFFF;\n  background-color: #1f2c39;\n}\n.open .blue-chambray.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #1f2c39;\n}\n.blue-chambray.btn:active, .blue-chambray.btn.active {\n  background-image: none;\n  background-color: #161f29;\n}\n.blue-chambray.btn:active:hover, .blue-chambray.btn.active:hover {\n  background-color: #1a242f;\n}\n.open .blue-chambray.btn.dropdown-toggle {\n  background-image: none;\n}\n.blue-chambray.btn.disabled, .blue-chambray.btn.disabled:hover, .blue-chambray.btn.disabled:focus, .blue-chambray.btn.disabled:active, .blue-chambray.btn.disabled.active, .blue-chambray.btn[disabled], .blue-chambray.btn[disabled]:hover, .blue-chambray.btn[disabled]:focus, .blue-chambray.btn[disabled]:active, .blue-chambray.btn[disabled].active, fieldset[disabled] .blue-chambray.btn, fieldset[disabled] .blue-chambray.btn:hover, fieldset[disabled] .blue-chambray.btn:focus, fieldset[disabled] .blue-chambray.btn:active, fieldset[disabled] .blue-chambray.btn.active {\n  background-color: #2C3E50;\n}\n.blue-chambray.btn .badge {\n  color: #2C3E50;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.blue-chambray-stripe {\n  border-left: 3px solid #2C3E50;\n}\n\n/* Portlet */\n.portlet > .portlet-body.blue-chambray,\n.portlet.blue-chambray {\n  background-color: #2C3E50;\n}\n\n.portlet.solid.blue-chambray > .portlet-title,\n.portlet.solid.blue-chambray > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.blue-chambray > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.blue-chambray > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.blue-chambray > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.blue-chambray > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.blue-chambray > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.blue-chambray > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.blue-chambray > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.blue-chambray > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.blue-chambray {\n  border: 1px solid #3e5771;\n  border-top: 0;\n}\n.portlet.box.blue-chambray > .portlet-title {\n  background-color: #2C3E50;\n}\n.portlet.box.blue-chambray > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.blue-chambray > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.blue-chambray > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #547698;\n  color: #5f83a7;\n}\n.portlet.box.blue-chambray > .portlet-title > .actions .btn-default > i {\n  color: #698aac;\n}\n.portlet.box.blue-chambray > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default:active, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #6f90b0;\n  color: #809cb9;\n}\n\n/* Statistic Block */\n.dashboard-stat.blue-chambray {\n  background-color: #2C3E50;\n}\n.dashboard-stat.blue-chambray.dashboard-stat-light:hover {\n  background-color: #253443;\n}\n.dashboard-stat.blue-chambray .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.blue-chambray .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.blue-chambray .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.blue-chambray .more {\n  color: #FFFFFF;\n  background-color: #253443;\n}\n\n/* General Element */\n.bg-blue-chambray {\n  border-color: #2C3E50 !important;\n  background-image: none !important;\n  background-color: #2C3E50 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-blue-chambray {\n  color: #2C3E50 !important;\n}\n\n.progress-bar.blue-chambray {\n  background: #2C3E50 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nBlue Ebonyclay\n***/\n/* Button */\n.blue-ebonyclay.btn {\n  color: #FFFFFF;\n  background-color: #22313F;\n}\n.blue-ebonyclay.btn:hover, .blue-ebonyclay.btn:focus, .blue-ebonyclay.btn:active, .blue-ebonyclay.btn.active {\n  color: #FFFFFF;\n  background-color: #151f28;\n}\n.open .blue-ebonyclay.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #151f28;\n}\n.blue-ebonyclay.btn:active, .blue-ebonyclay.btn.active {\n  background-image: none;\n  background-color: #0d1217;\n}\n.blue-ebonyclay.btn:active:hover, .blue-ebonyclay.btn.active:hover {\n  background-color: #10171e;\n}\n.open .blue-ebonyclay.btn.dropdown-toggle {\n  background-image: none;\n}\n.blue-ebonyclay.btn.disabled, .blue-ebonyclay.btn.disabled:hover, .blue-ebonyclay.btn.disabled:focus, .blue-ebonyclay.btn.disabled:active, .blue-ebonyclay.btn.disabled.active, .blue-ebonyclay.btn[disabled], .blue-ebonyclay.btn[disabled]:hover, .blue-ebonyclay.btn[disabled]:focus, .blue-ebonyclay.btn[disabled]:active, .blue-ebonyclay.btn[disabled].active, fieldset[disabled] .blue-ebonyclay.btn, fieldset[disabled] .blue-ebonyclay.btn:hover, fieldset[disabled] .blue-ebonyclay.btn:focus, fieldset[disabled] .blue-ebonyclay.btn:active, fieldset[disabled] .blue-ebonyclay.btn.active {\n  background-color: #22313F;\n}\n.blue-ebonyclay.btn .badge {\n  color: #22313F;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.blue-ebonyclay-stripe {\n  border-left: 3px solid #22313F;\n}\n\n/* Portlet */\n.portlet > .portlet-body.blue-ebonyclay,\n.portlet.blue-ebonyclay {\n  background-color: #22313F;\n}\n\n.portlet.solid.blue-ebonyclay > .portlet-title,\n.portlet.solid.blue-ebonyclay > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.blue-ebonyclay > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.blue-ebonyclay > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.blue-ebonyclay {\n  border: 1px solid #344b60;\n  border-top: 0;\n}\n.portlet.box.blue-ebonyclay > .portlet-title {\n  background-color: #22313F;\n}\n.portlet.box.blue-ebonyclay > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.blue-ebonyclay > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #496a88;\n  color: #527798;\n}\n.portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default > i {\n  color: #587ea2;\n}\n.portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:active, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #5d83a7;\n  color: #6d90b0;\n}\n\n/* Statistic Block */\n.dashboard-stat.blue-ebonyclay {\n  background-color: #22313F;\n}\n.dashboard-stat.blue-ebonyclay.dashboard-stat-light:hover {\n  background-color: #1b2732;\n}\n.dashboard-stat.blue-ebonyclay .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.blue-ebonyclay .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.blue-ebonyclay .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.blue-ebonyclay .more {\n  color: #FFFFFF;\n  background-color: #1b2732;\n}\n\n/* General Element */\n.bg-blue-ebonyclay {\n  border-color: #22313F !important;\n  background-image: none !important;\n  background-color: #22313F !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-blue-ebonyclay {\n  color: #22313F !important;\n}\n\n.progress-bar.blue-ebonyclay {\n  background: #22313F !important;\n  color: #FFFFFF !important;\n}\n\n/***\nBlue Hoki\n***/\n/* Button */\n.blue-hoki.btn {\n  color: #FFFFFF;\n  background-color: #67809F;\n}\n.blue-hoki.btn:hover, .blue-hoki.btn:focus, .blue-hoki.btn:active, .blue-hoki.btn.active {\n  color: #FFFFFF;\n  background-color: #586e8b;\n}\n.open .blue-hoki.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #586e8b;\n}\n.blue-hoki.btn:active, .blue-hoki.btn.active {\n  background-image: none;\n  background-color: #4e627b;\n}\n.blue-hoki.btn:active:hover, .blue-hoki.btn.active:hover {\n  background-color: #526781;\n}\n.open .blue-hoki.btn.dropdown-toggle {\n  background-image: none;\n}\n.blue-hoki.btn.disabled, .blue-hoki.btn.disabled:hover, .blue-hoki.btn.disabled:focus, .blue-hoki.btn.disabled:active, .blue-hoki.btn.disabled.active, .blue-hoki.btn[disabled], .blue-hoki.btn[disabled]:hover, .blue-hoki.btn[disabled]:focus, .blue-hoki.btn[disabled]:active, .blue-hoki.btn[disabled].active, fieldset[disabled] .blue-hoki.btn, fieldset[disabled] .blue-hoki.btn:hover, fieldset[disabled] .blue-hoki.btn:focus, fieldset[disabled] .blue-hoki.btn:active, fieldset[disabled] .blue-hoki.btn.active {\n  background-color: #67809F;\n}\n.blue-hoki.btn .badge {\n  color: #67809F;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.blue-hoki-stripe {\n  border-left: 3px solid #67809F;\n}\n\n/* Portlet */\n.portlet > .portlet-body.blue-hoki,\n.portlet.blue-hoki {\n  background-color: #67809F;\n}\n\n.portlet.solid.blue-hoki > .portlet-title,\n.portlet.solid.blue-hoki > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.blue-hoki > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.blue-hoki > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.blue-hoki > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.blue-hoki > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.blue-hoki > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.blue-hoki > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.blue-hoki > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.blue-hoki > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.blue-hoki {\n  border: 1px solid #869ab3;\n  border-top: 0;\n}\n.portlet.box.blue-hoki > .portlet-title {\n  background-color: #67809F;\n}\n.portlet.box.blue-hoki > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.blue-hoki > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.blue-hoki > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #acb9ca;\n  color: #bbc7d4;\n}\n.portlet.box.blue-hoki > .portlet-title > .actions .btn-default > i {\n  color: #c5ceda;\n}\n.portlet.box.blue-hoki > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default:active, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #cbd4de;\n  color: #dbe1e8;\n}\n\n/* Statistic Block */\n.dashboard-stat.blue-hoki {\n  background-color: #67809F;\n}\n.dashboard-stat.blue-hoki.dashboard-stat-light:hover {\n  background-color: #5e7694;\n}\n.dashboard-stat.blue-hoki .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.blue-hoki .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.blue-hoki .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.blue-hoki .more {\n  color: #FFFFFF;\n  background-color: #5e7694;\n}\n\n/* General Element */\n.bg-blue-hoki {\n  border-color: #67809F !important;\n  background-image: none !important;\n  background-color: #67809F !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-blue-hoki {\n  color: #67809F !important;\n}\n\n.progress-bar.blue-hoki {\n  background: #67809F !important;\n  color: #FFFFFF !important;\n}\n\n/***\nBlue Stell\n***/\n/* Button */\n.blue-steel.btn {\n  color: #FFFFFF;\n  background-color: #4B77BE;\n}\n.blue-steel.btn:hover, .blue-steel.btn:focus, .blue-steel.btn:active, .blue-steel.btn.active {\n  color: #FFFFFF;\n  background-color: #3d66a8;\n}\n.open .blue-steel.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #3d66a8;\n}\n.blue-steel.btn:active, .blue-steel.btn.active {\n  background-image: none;\n  background-color: #365b96;\n}\n.blue-steel.btn:active:hover, .blue-steel.btn.active:hover {\n  background-color: #395f9d;\n}\n.open .blue-steel.btn.dropdown-toggle {\n  background-image: none;\n}\n.blue-steel.btn.disabled, .blue-steel.btn.disabled:hover, .blue-steel.btn.disabled:focus, .blue-steel.btn.disabled:active, .blue-steel.btn.disabled.active, .blue-steel.btn[disabled], .blue-steel.btn[disabled]:hover, .blue-steel.btn[disabled]:focus, .blue-steel.btn[disabled]:active, .blue-steel.btn[disabled].active, fieldset[disabled] .blue-steel.btn, fieldset[disabled] .blue-steel.btn:hover, fieldset[disabled] .blue-steel.btn:focus, fieldset[disabled] .blue-steel.btn:active, fieldset[disabled] .blue-steel.btn.active {\n  background-color: #4B77BE;\n}\n.blue-steel.btn .badge {\n  color: #4B77BE;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.blue-steel-stripe {\n  border-left: 3px solid #4B77BE;\n}\n\n/* Portlet */\n.portlet > .portlet-body.blue-steel,\n.portlet.blue-steel {\n  background-color: #4B77BE;\n}\n\n.portlet.solid.blue-steel > .portlet-title,\n.portlet.solid.blue-steel > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.blue-steel > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.blue-steel > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.blue-steel > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.blue-steel > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.blue-steel > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.blue-steel > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.blue-steel > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.blue-steel > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.blue-steel {\n  border: 1px solid #7093cc;\n  border-top: 0;\n}\n.portlet.box.blue-steel > .portlet-title {\n  background-color: #4B77BE;\n}\n.portlet.box.blue-steel > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.blue-steel > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.blue-steel > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #9db5dc;\n  color: #b0c3e3;\n}\n.portlet.box.blue-steel > .portlet-title > .actions .btn-default > i {\n  color: #bbcce7;\n}\n.portlet.box.blue-steel > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-steel > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-steel > .portlet-title > .actions .btn-default:active, .portlet.box.blue-steel > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #c3d2e9;\n  color: #d6e0f0;\n}\n\n/* Statistic Block */\n.dashboard-stat.blue-steel {\n  background-color: #4B77BE;\n}\n.dashboard-stat.blue-steel.dashboard-stat-light:hover {\n  background-color: #416db4;\n}\n.dashboard-stat.blue-steel .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.blue-steel .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.blue-steel .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.blue-steel .more {\n  color: #FFFFFF;\n  background-color: #416db4;\n}\n\n/* General Element */\n.bg-blue-steel {\n  border-color: #4B77BE !important;\n  background-image: none !important;\n  background-color: #4B77BE !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-blue-steel {\n  color: #4B77BE !important;\n}\n\n.progress-bar.blue-steel {\n  background: #4B77BE !important;\n  color: #FFFFFF !important;\n}\n\n/***\nBlue Soft\n***/\n/* Button */\n.blue-soft.btn {\n  color: #FFFFFF;\n  background-color: #4c87b9;\n}\n.blue-soft.btn:hover, .blue-soft.btn:focus, .blue-soft.btn:active, .blue-soft.btn.active {\n  color: #FFFFFF;\n  background-color: #3f75a2;\n}\n.open .blue-soft.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #3f75a2;\n}\n.blue-soft.btn:active, .blue-soft.btn.active {\n  background-image: none;\n  background-color: #386890;\n}\n.blue-soft.btn:active:hover, .blue-soft.btn.active:hover {\n  background-color: #3b6d97;\n}\n.open .blue-soft.btn.dropdown-toggle {\n  background-image: none;\n}\n.blue-soft.btn.disabled, .blue-soft.btn.disabled:hover, .blue-soft.btn.disabled:focus, .blue-soft.btn.disabled:active, .blue-soft.btn.disabled.active, .blue-soft.btn[disabled], .blue-soft.btn[disabled]:hover, .blue-soft.btn[disabled]:focus, .blue-soft.btn[disabled]:active, .blue-soft.btn[disabled].active, fieldset[disabled] .blue-soft.btn, fieldset[disabled] .blue-soft.btn:hover, fieldset[disabled] .blue-soft.btn:focus, fieldset[disabled] .blue-soft.btn:active, fieldset[disabled] .blue-soft.btn.active {\n  background-color: #4c87b9;\n}\n.blue-soft.btn .badge {\n  color: #4c87b9;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.blue-soft-stripe {\n  border-left: 3px solid #4c87b9;\n}\n\n/* Portlet */\n.portlet > .portlet-body.blue-soft,\n.portlet.blue-soft {\n  background-color: #4c87b9;\n}\n\n.portlet.solid.blue-soft > .portlet-title,\n.portlet.solid.blue-soft > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.blue-soft > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.blue-soft > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.blue-soft > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.blue-soft > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.blue-soft > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.blue-soft > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.blue-soft > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.blue-soft > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.blue-soft {\n  border: 1px solid #71a0c7;\n  border-top: 0;\n}\n.portlet.box.blue-soft > .portlet-title {\n  background-color: #4c87b9;\n}\n.portlet.box.blue-soft > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.blue-soft > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.blue-soft > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #9dbdd9;\n  color: #afc9e0;\n}\n.portlet.box.blue-soft > .portlet-title > .actions .btn-default > i {\n  color: #bad1e4;\n}\n.portlet.box.blue-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-soft > .portlet-title > .actions .btn-default:active, .portlet.box.blue-soft > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #c1d6e7;\n  color: #d4e2ee;\n}\n\n/* Statistic Block */\n.dashboard-stat.blue-soft {\n  background-color: #4c87b9;\n}\n.dashboard-stat.blue-soft.dashboard-stat-light:hover {\n  background-color: #447dad;\n}\n.dashboard-stat.blue-soft .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.blue-soft .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.blue-soft .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.blue-soft .more {\n  color: #FFFFFF;\n  background-color: #447dad;\n}\n\n/* General Element */\n.bg-blue-soft {\n  border-color: #4c87b9 !important;\n  background-image: none !important;\n  background-color: #4c87b9 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-blue-soft {\n  color: #4c87b9 !important;\n}\n\n.progress-bar.blue-soft {\n  background: #4c87b9 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nBlue Dark\n***/\n/* Button */\n.blue-dark.btn {\n  color: #FFFFFF;\n  background-color: #5e738b;\n}\n.blue-dark.btn:hover, .blue-dark.btn:focus, .blue-dark.btn:active, .blue-dark.btn.active {\n  color: #FFFFFF;\n  background-color: #506176;\n}\n.open .blue-dark.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #506176;\n}\n.blue-dark.btn:active, .blue-dark.btn.active {\n  background-image: none;\n  background-color: #455566;\n}\n.blue-dark.btn:active:hover, .blue-dark.btn.active:hover {\n  background-color: #495a6d;\n}\n.open .blue-dark.btn.dropdown-toggle {\n  background-image: none;\n}\n.blue-dark.btn.disabled, .blue-dark.btn.disabled:hover, .blue-dark.btn.disabled:focus, .blue-dark.btn.disabled:active, .blue-dark.btn.disabled.active, .blue-dark.btn[disabled], .blue-dark.btn[disabled]:hover, .blue-dark.btn[disabled]:focus, .blue-dark.btn[disabled]:active, .blue-dark.btn[disabled].active, fieldset[disabled] .blue-dark.btn, fieldset[disabled] .blue-dark.btn:hover, fieldset[disabled] .blue-dark.btn:focus, fieldset[disabled] .blue-dark.btn:active, fieldset[disabled] .blue-dark.btn.active {\n  background-color: #5e738b;\n}\n.blue-dark.btn .badge {\n  color: #5e738b;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.blue-dark-stripe {\n  border-left: 3px solid #5e738b;\n}\n\n/* Portlet */\n.portlet > .portlet-body.blue-dark,\n.portlet.blue-dark {\n  background-color: #5e738b;\n}\n\n.portlet.solid.blue-dark > .portlet-title,\n.portlet.solid.blue-dark > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.blue-dark > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.blue-dark > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.blue-dark > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.blue-dark > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.blue-dark > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.blue-dark > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.blue-dark > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.blue-dark > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.blue-dark {\n  border: 1px solid #788da4;\n  border-top: 0;\n}\n.portlet.box.blue-dark > .portlet-title {\n  background-color: #5e738b;\n}\n.portlet.box.blue-dark > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.blue-dark > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.blue-dark > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #9dacbd;\n  color: #acb8c7;\n}\n.portlet.box.blue-dark > .portlet-title > .actions .btn-default > i {\n  color: #b5c0cd;\n}\n.portlet.box.blue-dark > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-dark > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-dark > .portlet-title > .actions .btn-default:active, .portlet.box.blue-dark > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #bbc5d1;\n  color: #cad2db;\n}\n\n/* Statistic Block */\n.dashboard-stat.blue-dark {\n  background-color: #5e738b;\n}\n.dashboard-stat.blue-dark.dashboard-stat-light:hover {\n  background-color: #56697f;\n}\n.dashboard-stat.blue-dark .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.blue-dark .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.blue-dark .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.blue-dark .more {\n  color: #FFFFFF;\n  background-color: #56697f;\n}\n\n/* General Element */\n.bg-blue-dark {\n  border-color: #5e738b !important;\n  background-image: none !important;\n  background-color: #5e738b !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-blue-dark {\n  color: #5e738b !important;\n}\n\n.progress-bar.blue-dark {\n  background: #5e738b !important;\n  color: #FFFFFF !important;\n}\n\n/***\nBlue Sharp\n***/\n/* Button */\n.blue-sharp.btn {\n  color: #FFFFFF;\n  background-color: #5C9BD1;\n}\n.blue-sharp.btn:hover, .blue-sharp.btn:focus, .blue-sharp.btn:active, .blue-sharp.btn.active {\n  color: #FFFFFF;\n  background-color: #408ac9;\n}\n.open .blue-sharp.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #408ac9;\n}\n.blue-sharp.btn:active, .blue-sharp.btn.active {\n  background-image: none;\n  background-color: #357dbb;\n}\n.blue-sharp.btn:active:hover, .blue-sharp.btn.active:hover {\n  background-color: #3782c3;\n}\n.open .blue-sharp.btn.dropdown-toggle {\n  background-image: none;\n}\n.blue-sharp.btn.disabled, .blue-sharp.btn.disabled:hover, .blue-sharp.btn.disabled:focus, .blue-sharp.btn.disabled:active, .blue-sharp.btn.disabled.active, .blue-sharp.btn[disabled], .blue-sharp.btn[disabled]:hover, .blue-sharp.btn[disabled]:focus, .blue-sharp.btn[disabled]:active, .blue-sharp.btn[disabled].active, fieldset[disabled] .blue-sharp.btn, fieldset[disabled] .blue-sharp.btn:hover, fieldset[disabled] .blue-sharp.btn:focus, fieldset[disabled] .blue-sharp.btn:active, fieldset[disabled] .blue-sharp.btn.active {\n  background-color: #5C9BD1;\n}\n.blue-sharp.btn .badge {\n  color: #5C9BD1;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.blue-sharp-stripe {\n  border-left: 3px solid #5C9BD1;\n}\n\n/* Portlet */\n.portlet > .portlet-body.blue-sharp,\n.portlet.blue-sharp {\n  background-color: #5C9BD1;\n}\n\n.portlet.solid.blue-sharp > .portlet-title,\n.portlet.solid.blue-sharp > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.blue-sharp > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.blue-sharp > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.blue-sharp > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.blue-sharp > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.blue-sharp > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.blue-sharp > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.blue-sharp > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.blue-sharp > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.blue-sharp {\n  border: 1px solid #84b3dc;\n  border-top: 0;\n}\n.portlet.box.blue-sharp > .portlet-title {\n  background-color: #5C9BD1;\n}\n.portlet.box.blue-sharp > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.blue-sharp > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.blue-sharp > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #b4d1ea;\n  color: #c7ddef;\n}\n.portlet.box.blue-sharp > .portlet-title > .actions .btn-default > i {\n  color: #d3e4f3;\n}\n.portlet.box.blue-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #dbe9f5;\n  color: #eff5fb;\n}\n\n/* Statistic Block */\n.dashboard-stat.blue-sharp {\n  background-color: #5C9BD1;\n}\n.dashboard-stat.blue-sharp.dashboard-stat-light:hover {\n  background-color: #4c91cd;\n}\n.dashboard-stat.blue-sharp .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.blue-sharp .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.blue-sharp .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.blue-sharp .more {\n  color: #FFFFFF;\n  background-color: #4c91cd;\n}\n\n/* General Element */\n.bg-blue-sharp {\n  border-color: #5C9BD1 !important;\n  background-image: none !important;\n  background-color: #5C9BD1 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-blue-sharp {\n  color: #5C9BD1 !important;\n}\n\n.progress-bar.blue-sharp {\n  background: #5C9BD1 !important;\n  color: #FFFFFF !important;\n}\n\n/***********\nGreen Colors\n************/\n/***\nGreen Default\n***/\n/* Button */\n.green.btn {\n  color: #FFFFFF;\n  background-color: #26a69a;\n}\n.green.btn:hover, .green.btn:focus, .green.btn:active, .green.btn.active {\n  color: #FFFFFF;\n  background-color: #1f897f;\n}\n.open .green.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #1f897f;\n}\n.green.btn:active, .green.btn.active {\n  background-image: none;\n  background-color: #1b746c;\n}\n.green.btn:active:hover, .green.btn.active:hover {\n  background-color: #1c7d74;\n}\n.open .green.btn.dropdown-toggle {\n  background-image: none;\n}\n.green.btn.disabled, .green.btn.disabled:hover, .green.btn.disabled:focus, .green.btn.disabled:active, .green.btn.disabled.active, .green.btn[disabled], .green.btn[disabled]:hover, .green.btn[disabled]:focus, .green.btn[disabled]:active, .green.btn[disabled].active, fieldset[disabled] .green.btn, fieldset[disabled] .green.btn:hover, fieldset[disabled] .green.btn:focus, fieldset[disabled] .green.btn:active, fieldset[disabled] .green.btn.active {\n  background-color: #26a69a;\n}\n.green.btn .badge {\n  color: #26a69a;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.green-stripe {\n  border-left: 3px solid #26a69a;\n}\n\n/* Portlet */\n.portlet > .portlet-body.green,\n.portlet.green {\n  background-color: #26a69a;\n}\n\n.portlet.solid.green > .portlet-title,\n.portlet.solid.green > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.green > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.green > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.green > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.green > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.green > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.green > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.green > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.green > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.green {\n  border: 1px solid #30d0c1;\n  border-top: 0;\n}\n.portlet.box.green > .portlet-title {\n  background-color: #26a69a;\n}\n.portlet.box.green > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.green > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.green > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #61dbd0;\n  color: #76e0d6;\n}\n.portlet.box.green > .portlet-title > .actions .btn-default > i {\n  color: #83e3da;\n}\n.portlet.box.green > .portlet-title > .actions .btn-default:hover, .portlet.box.green > .portlet-title > .actions .btn-default:focus, .portlet.box.green > .portlet-title > .actions .btn-default:active, .portlet.box.green > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #8be4dc;\n  color: #a0e9e2;\n}\n\n/* Statistic Block */\n.dashboard-stat.green {\n  background-color: #26a69a;\n}\n.dashboard-stat.green.dashboard-stat-light:hover {\n  background-color: #22958b;\n}\n.dashboard-stat.green .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.green .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.green .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.green .more {\n  color: #FFFFFF;\n  background-color: #22958b;\n}\n\n/* General Element */\n.bg-green {\n  border-color: #26a69a !important;\n  background-image: none !important;\n  background-color: #26a69a !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-green {\n  color: #26a69a !important;\n}\n\n.progress-bar.green {\n  background: #26a69a !important;\n  color: #FFFFFF !important;\n}\n\n/***\nGreen Meadow\n***/\n/* Button */\n.green-meadow.btn {\n  color: #FFFFFF;\n  background-color: #1BBC9B;\n}\n.green-meadow.btn:hover, .green-meadow.btn:focus, .green-meadow.btn:active, .green-meadow.btn.active {\n  color: #FFFFFF;\n  background-color: #179d81;\n}\n.open .green-meadow.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #179d81;\n}\n.green-meadow.btn:active, .green-meadow.btn.active {\n  background-image: none;\n  background-color: #13866f;\n}\n.green-meadow.btn:active:hover, .green-meadow.btn.active:hover {\n  background-color: #158f76;\n}\n.open .green-meadow.btn.dropdown-toggle {\n  background-image: none;\n}\n.green-meadow.btn.disabled, .green-meadow.btn.disabled:hover, .green-meadow.btn.disabled:focus, .green-meadow.btn.disabled:active, .green-meadow.btn.disabled.active, .green-meadow.btn[disabled], .green-meadow.btn[disabled]:hover, .green-meadow.btn[disabled]:focus, .green-meadow.btn[disabled]:active, .green-meadow.btn[disabled].active, fieldset[disabled] .green-meadow.btn, fieldset[disabled] .green-meadow.btn:hover, fieldset[disabled] .green-meadow.btn:focus, fieldset[disabled] .green-meadow.btn:active, fieldset[disabled] .green-meadow.btn.active {\n  background-color: #1BBC9B;\n}\n.green-meadow.btn .badge {\n  color: #1BBC9B;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.green-meadow-stripe {\n  border-left: 3px solid #1BBC9B;\n}\n\n/* Portlet */\n.portlet > .portlet-body.green-meadow,\n.portlet.green-meadow {\n  background-color: #1BBC9B;\n}\n\n.portlet.solid.green-meadow > .portlet-title,\n.portlet.solid.green-meadow > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.green-meadow > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.green-meadow > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.green-meadow > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.green-meadow > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.green-meadow > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.green-meadow > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.green-meadow > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.green-meadow > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.green-meadow {\n  border: 1px solid #2ae0bb;\n  border-top: 0;\n}\n.portlet.box.green-meadow > .portlet-title {\n  background-color: #1BBC9B;\n}\n.portlet.box.green-meadow > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.green-meadow > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.green-meadow > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #5fe8cc;\n  color: #75ebd3;\n}\n.portlet.box.green-meadow > .portlet-title > .actions .btn-default > i {\n  color: #83edd7;\n}\n.portlet.box.green-meadow > .portlet-title > .actions .btn-default:hover, .portlet.box.green-meadow > .portlet-title > .actions .btn-default:focus, .portlet.box.green-meadow > .portlet-title > .actions .btn-default:active, .portlet.box.green-meadow > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #8ceeda;\n  color: #a2f2e1;\n}\n\n/* Statistic Block */\n.dashboard-stat.green-meadow {\n  background-color: #1BBC9B;\n}\n.dashboard-stat.green-meadow.dashboard-stat-light:hover {\n  background-color: #18aa8c;\n}\n.dashboard-stat.green-meadow .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.green-meadow .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.green-meadow .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.green-meadow .more {\n  color: #FFFFFF;\n  background-color: #18aa8c;\n}\n\n/* General Element */\n.bg-green-meadow {\n  border-color: #1BBC9B !important;\n  background-image: none !important;\n  background-color: #1BBC9B !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-green-meadow {\n  color: #1BBC9B !important;\n}\n\n.progress-bar.green-meadow {\n  background: #1BBC9B !important;\n  color: #FFFFFF !important;\n}\n\n/***\nGreen Seagreen\n***/\n/* Button */\n.green-seagreen.btn {\n  color: #FFFFFF;\n  background-color: #1BA39C;\n}\n.green-seagreen.btn:hover, .green-seagreen.btn:focus, .green-seagreen.btn:active, .green-seagreen.btn.active {\n  color: #FFFFFF;\n  background-color: #16847f;\n}\n.open .green-seagreen.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #16847f;\n}\n.green-seagreen.btn:active, .green-seagreen.btn.active {\n  background-image: none;\n  background-color: #126e6a;\n}\n.green-seagreen.btn:active:hover, .green-seagreen.btn.active:hover {\n  background-color: #147772;\n}\n.open .green-seagreen.btn.dropdown-toggle {\n  background-image: none;\n}\n.green-seagreen.btn.disabled, .green-seagreen.btn.disabled:hover, .green-seagreen.btn.disabled:focus, .green-seagreen.btn.disabled:active, .green-seagreen.btn.disabled.active, .green-seagreen.btn[disabled], .green-seagreen.btn[disabled]:hover, .green-seagreen.btn[disabled]:focus, .green-seagreen.btn[disabled]:active, .green-seagreen.btn[disabled].active, fieldset[disabled] .green-seagreen.btn, fieldset[disabled] .green-seagreen.btn:hover, fieldset[disabled] .green-seagreen.btn:focus, fieldset[disabled] .green-seagreen.btn:active, fieldset[disabled] .green-seagreen.btn.active {\n  background-color: #1BA39C;\n}\n.green-seagreen.btn .badge {\n  color: #1BA39C;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.green-seagreen-stripe {\n  border-left: 3px solid #1BA39C;\n}\n\n/* Portlet */\n.portlet > .portlet-body.green-seagreen,\n.portlet.green-seagreen {\n  background-color: #1BA39C;\n}\n\n.portlet.solid.green-seagreen > .portlet-title,\n.portlet.solid.green-seagreen > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.green-seagreen > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.green-seagreen > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.green-seagreen > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.green-seagreen > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.green-seagreen > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.green-seagreen > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.green-seagreen > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.green-seagreen > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.green-seagreen {\n  border: 1px solid #22cfc6;\n  border-top: 0;\n}\n.portlet.box.green-seagreen > .portlet-title {\n  background-color: #1BA39C;\n}\n.portlet.box.green-seagreen > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.green-seagreen > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.green-seagreen > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #4de1da;\n  color: #63e5de;\n}\n.portlet.box.green-seagreen > .portlet-title > .actions .btn-default > i {\n  color: #70e7e1;\n}\n.portlet.box.green-seagreen > .portlet-title > .actions .btn-default:hover, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default:focus, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default:active, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #78e9e3;\n  color: #8eece8;\n}\n\n/* Statistic Block */\n.dashboard-stat.green-seagreen {\n  background-color: #1BA39C;\n}\n.dashboard-stat.green-seagreen.dashboard-stat-light:hover {\n  background-color: #18918b;\n}\n.dashboard-stat.green-seagreen .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.green-seagreen .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.green-seagreen .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.green-seagreen .more {\n  color: #FFFFFF;\n  background-color: #18918b;\n}\n\n/* General Element */\n.bg-green-seagreen {\n  border-color: #1BA39C !important;\n  background-image: none !important;\n  background-color: #1BA39C !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-green-seagreen {\n  color: #1BA39C !important;\n}\n\n.progress-bar.green-seagreen {\n  background: #1BA39C !important;\n  color: #FFFFFF !important;\n}\n\n/***\nGreen Turquoise\n***/\n/* Button */\n.green-turquoise.btn {\n  color: #FFFFFF;\n  background-color: #36D7B7;\n}\n.green-turquoise.btn:hover, .green-turquoise.btn:focus, .green-turquoise.btn:active, .green-turquoise.btn.active {\n  color: #FFFFFF;\n  background-color: #27c3a4;\n}\n.open .green-turquoise.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #27c3a4;\n}\n.green-turquoise.btn:active, .green-turquoise.btn.active {\n  background-image: none;\n  background-color: #22ad92;\n}\n.green-turquoise.btn:active:hover, .green-turquoise.btn.active:hover {\n  background-color: #24b699;\n}\n.open .green-turquoise.btn.dropdown-toggle {\n  background-image: none;\n}\n.green-turquoise.btn.disabled, .green-turquoise.btn.disabled:hover, .green-turquoise.btn.disabled:focus, .green-turquoise.btn.disabled:active, .green-turquoise.btn.disabled.active, .green-turquoise.btn[disabled], .green-turquoise.btn[disabled]:hover, .green-turquoise.btn[disabled]:focus, .green-turquoise.btn[disabled]:active, .green-turquoise.btn[disabled].active, fieldset[disabled] .green-turquoise.btn, fieldset[disabled] .green-turquoise.btn:hover, fieldset[disabled] .green-turquoise.btn:focus, fieldset[disabled] .green-turquoise.btn:active, fieldset[disabled] .green-turquoise.btn.active {\n  background-color: #36D7B7;\n}\n.green-turquoise.btn .badge {\n  color: #36D7B7;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.green-turquoise-stripe {\n  border-left: 3px solid #36D7B7;\n}\n\n/* Portlet */\n.portlet > .portlet-body.green-turquoise,\n.portlet.green-turquoise {\n  background-color: #36D7B7;\n}\n\n.portlet.solid.green-turquoise > .portlet-title,\n.portlet.solid.green-turquoise > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.green-turquoise > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.green-turquoise > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.green-turquoise > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.green-turquoise > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.green-turquoise > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.green-turquoise > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.green-turquoise > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.green-turquoise > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.green-turquoise {\n  border: 1px solid #61dfc6;\n  border-top: 0;\n}\n.portlet.box.green-turquoise > .portlet-title {\n  background-color: #36D7B7;\n}\n.portlet.box.green-turquoise > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.green-turquoise > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.green-turquoise > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #94ead9;\n  color: #a9eee0;\n}\n.portlet.box.green-turquoise > .portlet-title > .actions .btn-default > i {\n  color: #b6f0e5;\n}\n.portlet.box.green-turquoise > .portlet-title > .actions .btn-default:hover, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default:focus, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default:active, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #bef2e8;\n  color: #d3f6ef;\n}\n\n/* Statistic Block */\n.dashboard-stat.green-turquoise {\n  background-color: #36D7B7;\n}\n.dashboard-stat.green-turquoise.dashboard-stat-light:hover {\n  background-color: #29cfae;\n}\n.dashboard-stat.green-turquoise .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.green-turquoise .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.green-turquoise .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.green-turquoise .more {\n  color: #FFFFFF;\n  background-color: #29cfae;\n}\n\n/* General Element */\n.bg-green-turquoise {\n  border-color: #36D7B7 !important;\n  background-image: none !important;\n  background-color: #36D7B7 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-green-turquoise {\n  color: #36D7B7 !important;\n}\n\n.progress-bar.green-turquoise {\n  background: #36D7B7 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nGreen Haze\n***/\n/* Button */\n.green-haze.btn {\n  color: #FFFFFF;\n  background-color: #44b6ae;\n}\n.green-haze.btn:hover, .green-haze.btn:focus, .green-haze.btn:active, .green-haze.btn.active {\n  color: #FFFFFF;\n  background-color: #3a9c95;\n}\n.open .green-haze.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #3a9c95;\n}\n.green-haze.btn:active, .green-haze.btn.active {\n  background-image: none;\n  background-color: #338983;\n}\n.green-haze.btn:active:hover, .green-haze.btn.active:hover {\n  background-color: #36918b;\n}\n.open .green-haze.btn.dropdown-toggle {\n  background-image: none;\n}\n.green-haze.btn.disabled, .green-haze.btn.disabled:hover, .green-haze.btn.disabled:focus, .green-haze.btn.disabled:active, .green-haze.btn.disabled.active, .green-haze.btn[disabled], .green-haze.btn[disabled]:hover, .green-haze.btn[disabled]:focus, .green-haze.btn[disabled]:active, .green-haze.btn[disabled].active, fieldset[disabled] .green-haze.btn, fieldset[disabled] .green-haze.btn:hover, fieldset[disabled] .green-haze.btn:focus, fieldset[disabled] .green-haze.btn:active, fieldset[disabled] .green-haze.btn.active {\n  background-color: #44b6ae;\n}\n.green-haze.btn .badge {\n  color: #44b6ae;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.green-haze-stripe {\n  border-left: 3px solid #44b6ae;\n}\n\n/* Portlet */\n.portlet > .portlet-body.green-haze,\n.portlet.green-haze {\n  background-color: #44b6ae;\n}\n\n.portlet.solid.green-haze > .portlet-title,\n.portlet.solid.green-haze > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.green-haze > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.green-haze > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.green-haze > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.green-haze > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.green-haze > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.green-haze > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.green-haze > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.green-haze > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.green-haze {\n  border: 1px solid #67c6bf;\n  border-top: 0;\n}\n.portlet.box.green-haze > .portlet-title {\n  background-color: #44b6ae;\n}\n.portlet.box.green-haze > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.green-haze > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.green-haze > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #93d7d2;\n  color: #a6deda;\n}\n.portlet.box.green-haze > .portlet-title > .actions .btn-default > i {\n  color: #b1e2de;\n}\n.portlet.box.green-haze > .portlet-title > .actions .btn-default:hover, .portlet.box.green-haze > .portlet-title > .actions .btn-default:focus, .portlet.box.green-haze > .portlet-title > .actions .btn-default:active, .portlet.box.green-haze > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #b9e5e2;\n  color: #cbece9;\n}\n\n/* Statistic Block */\n.dashboard-stat.green-haze {\n  background-color: #44b6ae;\n}\n.dashboard-stat.green-haze.dashboard-stat-light:hover {\n  background-color: #3ea7a0;\n}\n.dashboard-stat.green-haze .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.green-haze .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.green-haze .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.green-haze .more {\n  color: #FFFFFF;\n  background-color: #3ea7a0;\n}\n\n/* General Element */\n.bg-green-haze {\n  border-color: #44b6ae !important;\n  background-image: none !important;\n  background-color: #44b6ae !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-green-haze {\n  color: #44b6ae !important;\n}\n\n.progress-bar.green-haze {\n  background: #44b6ae !important;\n  color: #FFFFFF !important;\n}\n\n/***\nGreen Jungle\n***/\n/* Button */\n.green-jungle.btn {\n  color: #FFFFFF;\n  background-color: #26C281;\n}\n.green-jungle.btn:hover, .green-jungle.btn:focus, .green-jungle.btn:active, .green-jungle.btn.active {\n  color: #FFFFFF;\n  background-color: #20a46d;\n}\n.open .green-jungle.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #20a46d;\n}\n.green-jungle.btn:active, .green-jungle.btn.active {\n  background-image: none;\n  background-color: #1c8f5f;\n}\n.green-jungle.btn:active:hover, .green-jungle.btn.active:hover {\n  background-color: #1e9765;\n}\n.open .green-jungle.btn.dropdown-toggle {\n  background-image: none;\n}\n.green-jungle.btn.disabled, .green-jungle.btn.disabled:hover, .green-jungle.btn.disabled:focus, .green-jungle.btn.disabled:active, .green-jungle.btn.disabled.active, .green-jungle.btn[disabled], .green-jungle.btn[disabled]:hover, .green-jungle.btn[disabled]:focus, .green-jungle.btn[disabled]:active, .green-jungle.btn[disabled].active, fieldset[disabled] .green-jungle.btn, fieldset[disabled] .green-jungle.btn:hover, fieldset[disabled] .green-jungle.btn:focus, fieldset[disabled] .green-jungle.btn:active, fieldset[disabled] .green-jungle.btn.active {\n  background-color: #26C281;\n}\n.green-jungle.btn .badge {\n  color: #26C281;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.green-jungle-stripe {\n  border-left: 3px solid #26C281;\n}\n\n/* Portlet */\n.portlet > .portlet-body.green-jungle,\n.portlet.green-jungle {\n  background-color: #26C281;\n}\n\n.portlet.solid.green-jungle > .portlet-title,\n.portlet.solid.green-jungle > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.green-jungle > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.green-jungle > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.green-jungle > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.green-jungle > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.green-jungle > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.green-jungle > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.green-jungle > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.green-jungle > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.green-jungle {\n  border: 1px solid #41da9a;\n  border-top: 0;\n}\n.portlet.box.green-jungle > .portlet-title {\n  background-color: #26C281;\n}\n.portlet.box.green-jungle > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.green-jungle > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.green-jungle > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #74e4b5;\n  color: #8ae8c1;\n}\n.portlet.box.green-jungle > .portlet-title > .actions .btn-default > i {\n  color: #96ebc8;\n}\n.portlet.box.green-jungle > .portlet-title > .actions .btn-default:hover, .portlet.box.green-jungle > .portlet-title > .actions .btn-default:focus, .portlet.box.green-jungle > .portlet-title > .actions .btn-default:active, .portlet.box.green-jungle > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #9feccc;\n  color: #b4f0d7;\n}\n\n/* Statistic Block */\n.dashboard-stat.green-jungle {\n  background-color: #26C281;\n}\n.dashboard-stat.green-jungle.dashboard-stat-light:hover {\n  background-color: #23b176;\n}\n.dashboard-stat.green-jungle .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.green-jungle .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.green-jungle .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.green-jungle .more {\n  color: #FFFFFF;\n  background-color: #23b176;\n}\n\n/* General Element */\n.bg-green-jungle {\n  border-color: #26C281 !important;\n  background-image: none !important;\n  background-color: #26C281 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-green-jungle {\n  color: #26C281 !important;\n}\n\n.progress-bar.green-jungle {\n  background: #26C281 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nGreen Sharp\n***/\n/* Button */\n.green-sharp.btn {\n  color: #FFFFFF;\n  background-color: #4DB3A2;\n}\n.green-sharp.btn:hover, .green-sharp.btn:focus, .green-sharp.btn:active, .green-sharp.btn.active {\n  color: #FFFFFF;\n  background-color: #429a8c;\n}\n.open .green-sharp.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #429a8c;\n}\n.green-sharp.btn:active, .green-sharp.btn.active {\n  background-image: none;\n  background-color: #3a897b;\n}\n.green-sharp.btn:active:hover, .green-sharp.btn.active:hover {\n  background-color: #3d9082;\n}\n.open .green-sharp.btn.dropdown-toggle {\n  background-image: none;\n}\n.green-sharp.btn.disabled, .green-sharp.btn.disabled:hover, .green-sharp.btn.disabled:focus, .green-sharp.btn.disabled:active, .green-sharp.btn.disabled.active, .green-sharp.btn[disabled], .green-sharp.btn[disabled]:hover, .green-sharp.btn[disabled]:focus, .green-sharp.btn[disabled]:active, .green-sharp.btn[disabled].active, fieldset[disabled] .green-sharp.btn, fieldset[disabled] .green-sharp.btn:hover, fieldset[disabled] .green-sharp.btn:focus, fieldset[disabled] .green-sharp.btn:active, fieldset[disabled] .green-sharp.btn.active {\n  background-color: #4DB3A2;\n}\n.green-sharp.btn .badge {\n  color: #4DB3A2;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.green-sharp-stripe {\n  border-left: 3px solid #4DB3A2;\n}\n\n/* Portlet */\n.portlet > .portlet-body.green-sharp,\n.portlet.green-sharp {\n  background-color: #4DB3A2;\n}\n\n.portlet.solid.green-sharp > .portlet-title,\n.portlet.solid.green-sharp > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.green-sharp > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.green-sharp > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.green-sharp > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.green-sharp > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.green-sharp > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.green-sharp > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.green-sharp > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.green-sharp > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.green-sharp {\n  border: 1px solid #71c2b5;\n  border-top: 0;\n}\n.portlet.box.green-sharp > .portlet-title {\n  background-color: #4DB3A2;\n}\n.portlet.box.green-sharp > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.green-sharp > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.green-sharp > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #9cd5cb;\n  color: #addcd4;\n}\n.portlet.box.green-sharp > .portlet-title > .actions .btn-default > i {\n  color: #b8e1da;\n}\n.portlet.box.green-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.green-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.green-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.green-sharp > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #bfe4de;\n  color: #d1ebe7;\n}\n\n/* Statistic Block */\n.dashboard-stat.green-sharp {\n  background-color: #4DB3A2;\n}\n.dashboard-stat.green-sharp.dashboard-stat-light:hover {\n  background-color: #46a595;\n}\n.dashboard-stat.green-sharp .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.green-sharp .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.green-sharp .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.green-sharp .more {\n  color: #FFFFFF;\n  background-color: #46a595;\n}\n\n/* General Element */\n.bg-green-sharp {\n  border-color: #4DB3A2 !important;\n  background-image: none !important;\n  background-color: #4DB3A2 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-green-sharp {\n  color: #4DB3A2 !important;\n}\n\n.progress-bar.green-sharp {\n  background: #4DB3A2 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nGreen Sharp\n***/\n/* Button */\n.green-soft.btn {\n  color: #FFFFFF;\n  background-color: #3faba4;\n}\n.green-soft.btn:hover, .green-soft.btn:focus, .green-soft.btn:active, .green-soft.btn.active {\n  color: #FFFFFF;\n  background-color: #35918b;\n}\n.open .green-soft.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #35918b;\n}\n.green-soft.btn:active, .green-soft.btn.active {\n  background-image: none;\n  background-color: #2f7e79;\n}\n.green-soft.btn:active:hover, .green-soft.btn.active:hover {\n  background-color: #318680;\n}\n.open .green-soft.btn.dropdown-toggle {\n  background-image: none;\n}\n.green-soft.btn.disabled, .green-soft.btn.disabled:hover, .green-soft.btn.disabled:focus, .green-soft.btn.disabled:active, .green-soft.btn.disabled.active, .green-soft.btn[disabled], .green-soft.btn[disabled]:hover, .green-soft.btn[disabled]:focus, .green-soft.btn[disabled]:active, .green-soft.btn[disabled].active, fieldset[disabled] .green-soft.btn, fieldset[disabled] .green-soft.btn:hover, fieldset[disabled] .green-soft.btn:focus, fieldset[disabled] .green-soft.btn:active, fieldset[disabled] .green-soft.btn.active {\n  background-color: #3faba4;\n}\n.green-soft.btn .badge {\n  color: #3faba4;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.green-soft-stripe {\n  border-left: 3px solid #3faba4;\n}\n\n/* Portlet */\n.portlet > .portlet-body.green-soft,\n.portlet.green-soft {\n  background-color: #3faba4;\n}\n\n.portlet.solid.green-soft > .portlet-title,\n.portlet.solid.green-soft > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.green-soft > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.green-soft > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.green-soft > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.green-soft > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.green-soft > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.green-soft > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.green-soft > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.green-soft > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.green-soft {\n  border: 1px solid #5bc2bc;\n  border-top: 0;\n}\n.portlet.box.green-soft > .portlet-title {\n  background-color: #3faba4;\n}\n.portlet.box.green-soft > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.green-soft > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.green-soft > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #87d3ce;\n  color: #9adad6;\n}\n.portlet.box.green-soft > .portlet-title > .actions .btn-default > i {\n  color: #a5deda;\n}\n.portlet.box.green-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.green-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.green-soft > .portlet-title > .actions .btn-default:active, .portlet.box.green-soft > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #ade1dd;\n  color: #bfe7e5;\n}\n\n/* Statistic Block */\n.dashboard-stat.green-soft {\n  background-color: #3faba4;\n}\n.dashboard-stat.green-soft.dashboard-stat-light:hover {\n  background-color: #3a9c96;\n}\n.dashboard-stat.green-soft .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.green-soft .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.green-soft .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.green-soft .more {\n  color: #FFFFFF;\n  background-color: #3a9c96;\n}\n\n/* General Element */\n.bg-green-soft {\n  border-color: #3faba4 !important;\n  background-image: none !important;\n  background-color: #3faba4 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-green-soft {\n  color: #3faba4 !important;\n}\n\n.progress-bar.green-soft {\n  background: #3faba4 !important;\n  color: #FFFFFF !important;\n}\n\n/***********\nGrey Colors\n************/\n/***\nGrey Default\n***/\n/* Button */\n.grey.btn {\n  color: #333333;\n  background-color: #E5E5E5;\n}\n.grey.btn:hover, .grey.btn:focus, .grey.btn:active, .grey.btn.active {\n  color: #333333;\n  background-color: lightgray;\n}\n.open .grey.btn.dropdown-toggle {\n  color: #333333;\n  background-color: lightgray;\n}\n.grey.btn:active, .grey.btn.active {\n  background-image: none;\n  background-color: #c6c6c6;\n}\n.grey.btn:active:hover, .grey.btn.active:hover {\n  background-color: #cccccc;\n}\n.open .grey.btn.dropdown-toggle {\n  background-image: none;\n}\n.grey.btn.disabled, .grey.btn.disabled:hover, .grey.btn.disabled:focus, .grey.btn.disabled:active, .grey.btn.disabled.active, .grey.btn[disabled], .grey.btn[disabled]:hover, .grey.btn[disabled]:focus, .grey.btn[disabled]:active, .grey.btn[disabled].active, fieldset[disabled] .grey.btn, fieldset[disabled] .grey.btn:hover, fieldset[disabled] .grey.btn:focus, fieldset[disabled] .grey.btn:active, fieldset[disabled] .grey.btn.active {\n  background-color: #E5E5E5;\n}\n.grey.btn .badge {\n  color: #E5E5E5;\n  background-color: #333333;\n}\n\n/* Button Strip */\n.btn.grey-stripe {\n  border-left: 3px solid #E5E5E5;\n}\n\n/* Portlet */\n.portlet > .portlet-body.grey,\n.portlet.grey {\n  background-color: #E5E5E5;\n}\n\n.portlet.solid.grey > .portlet-title,\n.portlet.solid.grey > .portlet-body {\n  border: 0;\n  color: #333333;\n}\n.portlet.solid.grey > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.grey > .portlet-title > .caption > i {\n  color: #333333;\n}\n.portlet.solid.grey > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.grey > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.grey > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.grey > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.grey > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.grey > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.grey {\n  border: 1px solid white;\n  border-top: 0;\n}\n.portlet.box.grey > .portlet-title {\n  background-color: #E5E5E5;\n}\n.portlet.box.grey > .portlet-title > .caption {\n  color: #333333;\n}\n.portlet.box.grey > .portlet-title > .caption > i {\n  color: #333333;\n}\n.portlet.box.grey > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid white;\n  color: white;\n}\n.portlet.box.grey > .portlet-title > .actions .btn-default > i {\n  color: white;\n}\n.portlet.box.grey > .portlet-title > .actions .btn-default:hover, .portlet.box.grey > .portlet-title > .actions .btn-default:focus, .portlet.box.grey > .portlet-title > .actions .btn-default:active, .portlet.box.grey > .portlet-title > .actions .btn-default.active {\n  border: 1px solid white;\n  color: white;\n}\n\n/* Statistic Block */\n.dashboard-stat.grey {\n  background-color: #E5E5E5;\n}\n.dashboard-stat.grey.dashboard-stat-light:hover {\n  background-color: #dbdbdb;\n}\n.dashboard-stat.grey .visual > i {\n  color: #333333;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.grey .details .number {\n  color: #333333;\n}\n.dashboard-stat.grey .details .desc {\n  color: #333333;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.grey .more {\n  color: #333333;\n  background-color: #dbdbdb;\n}\n\n/* General Element */\n.bg-grey {\n  border-color: #E5E5E5 !important;\n  background-image: none !important;\n  background-color: #E5E5E5 !important;\n  color: #333333 !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-grey {\n  color: #E5E5E5 !important;\n}\n\n.progress-bar.grey {\n  background: #E5E5E5 !important;\n  color: #333333 !important;\n}\n\n/***\nGrey Steel\n***/\n/* Button */\n.grey-steel.btn {\n  color: #80898e;\n  background-color: #e9edef;\n}\n.grey-steel.btn:hover, .grey-steel.btn:focus, .grey-steel.btn:active, .grey-steel.btn.active {\n  color: #80898e;\n  background-color: #d4dce0;\n}\n.open .grey-steel.btn.dropdown-toggle {\n  color: #80898e;\n  background-color: #d4dce0;\n}\n.grey-steel.btn:active, .grey-steel.btn.active {\n  background-image: none;\n  background-color: #c6d0d5;\n}\n.grey-steel.btn:active:hover, .grey-steel.btn.active:hover {\n  background-color: #cbd5da;\n}\n.open .grey-steel.btn.dropdown-toggle {\n  background-image: none;\n}\n.grey-steel.btn.disabled, .grey-steel.btn.disabled:hover, .grey-steel.btn.disabled:focus, .grey-steel.btn.disabled:active, .grey-steel.btn.disabled.active, .grey-steel.btn[disabled], .grey-steel.btn[disabled]:hover, .grey-steel.btn[disabled]:focus, .grey-steel.btn[disabled]:active, .grey-steel.btn[disabled].active, fieldset[disabled] .grey-steel.btn, fieldset[disabled] .grey-steel.btn:hover, fieldset[disabled] .grey-steel.btn:focus, fieldset[disabled] .grey-steel.btn:active, fieldset[disabled] .grey-steel.btn.active {\n  background-color: #e9edef;\n}\n.grey-steel.btn .badge {\n  color: #e9edef;\n  background-color: #80898e;\n}\n\n/* Button Strip */\n.btn.grey-steel-stripe {\n  border-left: 3px solid #e9edef;\n}\n\n/* Portlet */\n.portlet > .portlet-body.grey-steel,\n.portlet.grey-steel {\n  background-color: #e9edef;\n}\n\n.portlet.solid.grey-steel > .portlet-title,\n.portlet.solid.grey-steel > .portlet-body {\n  border: 0;\n  color: #80898e;\n}\n.portlet.solid.grey-steel > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.grey-steel > .portlet-title > .caption > i {\n  color: #80898e;\n}\n.portlet.solid.grey-steel > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.grey-steel > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.grey-steel > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.grey-steel > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.grey-steel > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.grey-steel > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.grey-steel {\n  border: 1px solid white;\n  border-top: 0;\n}\n.portlet.box.grey-steel > .portlet-title {\n  background-color: #e9edef;\n}\n.portlet.box.grey-steel > .portlet-title > .caption {\n  color: #80898e;\n}\n.portlet.box.grey-steel > .portlet-title > .caption > i {\n  color: #80898e;\n}\n.portlet.box.grey-steel > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid white;\n  color: white;\n}\n.portlet.box.grey-steel > .portlet-title > .actions .btn-default > i {\n  color: white;\n}\n.portlet.box.grey-steel > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-steel > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-steel > .portlet-title > .actions .btn-default:active, .portlet.box.grey-steel > .portlet-title > .actions .btn-default.active {\n  border: 1px solid white;\n  color: white;\n}\n\n/* Statistic Block */\n.dashboard-stat.grey-steel {\n  background-color: #e9edef;\n}\n.dashboard-stat.grey-steel.dashboard-stat-light:hover {\n  background-color: #dde3e6;\n}\n.dashboard-stat.grey-steel .visual > i {\n  color: #80898e;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.grey-steel .details .number {\n  color: #80898e;\n}\n.dashboard-stat.grey-steel .details .desc {\n  color: #80898e;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.grey-steel .more {\n  color: #80898e;\n  background-color: #dde3e6;\n}\n\n/* General Element */\n.bg-grey-steel {\n  border-color: #e9edef !important;\n  background-image: none !important;\n  background-color: #e9edef !important;\n  color: #80898e !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-grey-steel {\n  color: #e9edef !important;\n}\n\n.progress-bar.grey-steel {\n  background: #e9edef !important;\n  color: #80898e !important;\n}\n\n/***\nGrey Cararra\n***/\n/* Button */\n.grey-cararra.btn {\n  color: #333333;\n  background-color: #fafafa;\n}\n.grey-cararra.btn:hover, .grey-cararra.btn:focus, .grey-cararra.btn:active, .grey-cararra.btn.active {\n  color: #333333;\n  background-color: #e8e8e8;\n}\n.open .grey-cararra.btn.dropdown-toggle {\n  color: #333333;\n  background-color: #e8e8e8;\n}\n.grey-cararra.btn:active, .grey-cararra.btn.active {\n  background-image: none;\n  background-color: #dbdbdb;\n}\n.grey-cararra.btn:active:hover, .grey-cararra.btn.active:hover {\n  background-color: #e1e1e1;\n}\n.open .grey-cararra.btn.dropdown-toggle {\n  background-image: none;\n}\n.grey-cararra.btn.disabled, .grey-cararra.btn.disabled:hover, .grey-cararra.btn.disabled:focus, .grey-cararra.btn.disabled:active, .grey-cararra.btn.disabled.active, .grey-cararra.btn[disabled], .grey-cararra.btn[disabled]:hover, .grey-cararra.btn[disabled]:focus, .grey-cararra.btn[disabled]:active, .grey-cararra.btn[disabled].active, fieldset[disabled] .grey-cararra.btn, fieldset[disabled] .grey-cararra.btn:hover, fieldset[disabled] .grey-cararra.btn:focus, fieldset[disabled] .grey-cararra.btn:active, fieldset[disabled] .grey-cararra.btn.active {\n  background-color: #fafafa;\n}\n.grey-cararra.btn .badge {\n  color: #fafafa;\n  background-color: #333333;\n}\n\n/* Button Strip */\n.btn.grey-cararra-stripe {\n  border-left: 3px solid #fafafa;\n}\n\n/* Portlet */\n.portlet > .portlet-body.grey-cararra,\n.portlet.grey-cararra {\n  background-color: #fafafa;\n}\n\n.portlet.solid.grey-cararra > .portlet-title,\n.portlet.solid.grey-cararra > .portlet-body {\n  border: 0;\n  color: #333333;\n}\n.portlet.solid.grey-cararra > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.grey-cararra > .portlet-title > .caption > i {\n  color: #333333;\n}\n.portlet.solid.grey-cararra > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.grey-cararra > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.grey-cararra > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.grey-cararra > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.grey-cararra > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.grey-cararra > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.grey-cararra {\n  border: 1px solid white;\n  border-top: 0;\n}\n.portlet.box.grey-cararra > .portlet-title {\n  background-color: #fafafa;\n}\n.portlet.box.grey-cararra > .portlet-title > .caption {\n  color: #333333;\n}\n.portlet.box.grey-cararra > .portlet-title > .caption > i {\n  color: #333333;\n}\n.portlet.box.grey-cararra > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid white;\n  color: white;\n}\n.portlet.box.grey-cararra > .portlet-title > .actions .btn-default > i {\n  color: white;\n}\n.portlet.box.grey-cararra > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default:active, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default.active {\n  border: 1px solid white;\n  color: white;\n}\n\n/* Statistic Block */\n.dashboard-stat.grey-cararra {\n  background-color: #fafafa;\n}\n.dashboard-stat.grey-cararra.dashboard-stat-light:hover {\n  background-color: #f0f0f0;\n}\n.dashboard-stat.grey-cararra .visual > i {\n  color: #333333;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.grey-cararra .details .number {\n  color: #333333;\n}\n.dashboard-stat.grey-cararra .details .desc {\n  color: #333333;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.grey-cararra .more {\n  color: #333333;\n  background-color: #f0f0f0;\n}\n\n/* General Element */\n.bg-grey-cararra {\n  border-color: #fafafa !important;\n  background-image: none !important;\n  background-color: #fafafa !important;\n  color: #333333 !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-grey-cararra {\n  color: #fafafa !important;\n}\n\n.progress-bar.grey-cararra {\n  background: #fafafa !important;\n  color: #333333 !important;\n}\n\n/***\nGrey Gallery\n***/\n/* Button */\n.grey-gallery.btn {\n  color: #ffffff;\n  background-color: #555555;\n}\n.grey-gallery.btn:hover, .grey-gallery.btn:focus, .grey-gallery.btn:active, .grey-gallery.btn.active {\n  color: #ffffff;\n  background-color: #434343;\n}\n.open .grey-gallery.btn.dropdown-toggle {\n  color: #ffffff;\n  background-color: #434343;\n}\n.grey-gallery.btn:active, .grey-gallery.btn.active {\n  background-image: none;\n  background-color: #363636;\n}\n.grey-gallery.btn:active:hover, .grey-gallery.btn.active:hover {\n  background-color: #3b3b3b;\n}\n.open .grey-gallery.btn.dropdown-toggle {\n  background-image: none;\n}\n.grey-gallery.btn.disabled, .grey-gallery.btn.disabled:hover, .grey-gallery.btn.disabled:focus, .grey-gallery.btn.disabled:active, .grey-gallery.btn.disabled.active, .grey-gallery.btn[disabled], .grey-gallery.btn[disabled]:hover, .grey-gallery.btn[disabled]:focus, .grey-gallery.btn[disabled]:active, .grey-gallery.btn[disabled].active, fieldset[disabled] .grey-gallery.btn, fieldset[disabled] .grey-gallery.btn:hover, fieldset[disabled] .grey-gallery.btn:focus, fieldset[disabled] .grey-gallery.btn:active, fieldset[disabled] .grey-gallery.btn.active {\n  background-color: #555555;\n}\n.grey-gallery.btn .badge {\n  color: #555555;\n  background-color: #ffffff;\n}\n\n/* Button Strip */\n.btn.grey-gallery-stripe {\n  border-left: 3px solid #555555;\n}\n\n/* Portlet */\n.portlet > .portlet-body.grey-gallery,\n.portlet.grey-gallery {\n  background-color: #555555;\n}\n\n.portlet.solid.grey-gallery > .portlet-title,\n.portlet.solid.grey-gallery > .portlet-body {\n  border: 0;\n  color: #ffffff;\n}\n.portlet.solid.grey-gallery > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.grey-gallery > .portlet-title > .caption > i {\n  color: #ffffff;\n}\n.portlet.solid.grey-gallery > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.grey-gallery > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.grey-gallery > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.grey-gallery > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.grey-gallery > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.grey-gallery > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.grey-gallery {\n  border: 1px solid #6e6e6e;\n  border-top: 0;\n}\n.portlet.box.grey-gallery > .portlet-title {\n  background-color: #555555;\n}\n.portlet.box.grey-gallery > .portlet-title > .caption {\n  color: #ffffff;\n}\n.portlet.box.grey-gallery > .portlet-title > .caption > i {\n  color: #ffffff;\n}\n.portlet.box.grey-gallery > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #8d8d8d;\n  color: #9a9a9a;\n}\n.portlet.box.grey-gallery > .portlet-title > .actions .btn-default > i {\n  color: #a2a2a2;\n}\n.portlet.box.grey-gallery > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default:active, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #a7a7a7;\n  color: #b3b3b3;\n}\n\n/* Statistic Block */\n.dashboard-stat.grey-gallery {\n  background-color: #555555;\n}\n.dashboard-stat.grey-gallery.dashboard-stat-light:hover {\n  background-color: #4b4b4b;\n}\n.dashboard-stat.grey-gallery .visual > i {\n  color: #ffffff;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.grey-gallery .details .number {\n  color: #ffffff;\n}\n.dashboard-stat.grey-gallery .details .desc {\n  color: #ffffff;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.grey-gallery .more {\n  color: #ffffff;\n  background-color: #4b4b4b;\n}\n\n/* General Element */\n.bg-grey-gallery {\n  border-color: #555555 !important;\n  background-image: none !important;\n  background-color: #555555 !important;\n  color: #ffffff !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-grey-gallery {\n  color: #555555 !important;\n}\n\n.progress-bar.grey-gallery {\n  background: #555555 !important;\n  color: #ffffff !important;\n}\n\n/***\nGrey Cascade\n***/\n/* Button */\n.grey-cascade.btn {\n  color: #FFFFFF;\n  background-color: #95A5A6;\n}\n.grey-cascade.btn:hover, .grey-cascade.btn:focus, .grey-cascade.btn:active, .grey-cascade.btn.active {\n  color: #FFFFFF;\n  background-color: #829596;\n}\n.open .grey-cascade.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #829596;\n}\n.grey-cascade.btn:active, .grey-cascade.btn.active {\n  background-image: none;\n  background-color: #74898a;\n}\n.grey-cascade.btn:active:hover, .grey-cascade.btn.active:hover {\n  background-color: #798d8f;\n}\n.open .grey-cascade.btn.dropdown-toggle {\n  background-image: none;\n}\n.grey-cascade.btn.disabled, .grey-cascade.btn.disabled:hover, .grey-cascade.btn.disabled:focus, .grey-cascade.btn.disabled:active, .grey-cascade.btn.disabled.active, .grey-cascade.btn[disabled], .grey-cascade.btn[disabled]:hover, .grey-cascade.btn[disabled]:focus, .grey-cascade.btn[disabled]:active, .grey-cascade.btn[disabled].active, fieldset[disabled] .grey-cascade.btn, fieldset[disabled] .grey-cascade.btn:hover, fieldset[disabled] .grey-cascade.btn:focus, fieldset[disabled] .grey-cascade.btn:active, fieldset[disabled] .grey-cascade.btn.active {\n  background-color: #95A5A6;\n}\n.grey-cascade.btn .badge {\n  color: #95A5A6;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.grey-cascade-stripe {\n  border-left: 3px solid #95A5A6;\n}\n\n/* Portlet */\n.portlet > .portlet-body.grey-cascade,\n.portlet.grey-cascade {\n  background-color: #95A5A6;\n}\n\n.portlet.solid.grey-cascade > .portlet-title,\n.portlet.solid.grey-cascade > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.grey-cascade > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.grey-cascade > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.grey-cascade > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.grey-cascade > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.grey-cascade > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.grey-cascade > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.grey-cascade > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.grey-cascade > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.grey-cascade {\n  border: 1px solid #b1bdbd;\n  border-top: 0;\n}\n.portlet.box.grey-cascade > .portlet-title {\n  background-color: #95A5A6;\n}\n.portlet.box.grey-cascade > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.grey-cascade > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.grey-cascade > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #d2d9d9;\n  color: #e0e5e5;\n}\n.portlet.box.grey-cascade > .portlet-title > .actions .btn-default > i {\n  color: #e8ecec;\n}\n.portlet.box.grey-cascade > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default:active, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #eef0f0;\n  color: #fcfcfc;\n}\n\n/* Statistic Block */\n.dashboard-stat.grey-cascade {\n  background-color: #95A5A6;\n}\n.dashboard-stat.grey-cascade.dashboard-stat-light:hover {\n  background-color: #8a9c9d;\n}\n.dashboard-stat.grey-cascade .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.grey-cascade .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.grey-cascade .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.grey-cascade .more {\n  color: #FFFFFF;\n  background-color: #8a9c9d;\n}\n\n/* General Element */\n.bg-grey-cascade {\n  border-color: #95A5A6 !important;\n  background-image: none !important;\n  background-color: #95A5A6 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-grey-cascade {\n  color: #95A5A6 !important;\n}\n\n.progress-bar.grey-cascade {\n  background: #95A5A6 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nGrey Silver\n***/\n/* Button */\n.grey-silver.btn {\n  color: #FAFCFB;\n  background-color: #BFBFBF;\n}\n.grey-silver.btn:hover, .grey-silver.btn:focus, .grey-silver.btn:active, .grey-silver.btn.active {\n  color: #FAFCFB;\n  background-color: #adadad;\n}\n.open .grey-silver.btn.dropdown-toggle {\n  color: #FAFCFB;\n  background-color: #adadad;\n}\n.grey-silver.btn:active, .grey-silver.btn.active {\n  background-image: none;\n  background-color: #a0a0a0;\n}\n.grey-silver.btn:active:hover, .grey-silver.btn.active:hover {\n  background-color: #a6a6a6;\n}\n.open .grey-silver.btn.dropdown-toggle {\n  background-image: none;\n}\n.grey-silver.btn.disabled, .grey-silver.btn.disabled:hover, .grey-silver.btn.disabled:focus, .grey-silver.btn.disabled:active, .grey-silver.btn.disabled.active, .grey-silver.btn[disabled], .grey-silver.btn[disabled]:hover, .grey-silver.btn[disabled]:focus, .grey-silver.btn[disabled]:active, .grey-silver.btn[disabled].active, fieldset[disabled] .grey-silver.btn, fieldset[disabled] .grey-silver.btn:hover, fieldset[disabled] .grey-silver.btn:focus, fieldset[disabled] .grey-silver.btn:active, fieldset[disabled] .grey-silver.btn.active {\n  background-color: #BFBFBF;\n}\n.grey-silver.btn .badge {\n  color: #BFBFBF;\n  background-color: #FAFCFB;\n}\n\n/* Button Strip */\n.btn.grey-silver-stripe {\n  border-left: 3px solid #BFBFBF;\n}\n\n/* Portlet */\n.portlet > .portlet-body.grey-silver,\n.portlet.grey-silver {\n  background-color: #BFBFBF;\n}\n\n.portlet.solid.grey-silver > .portlet-title,\n.portlet.solid.grey-silver > .portlet-body {\n  border: 0;\n  color: #FAFCFB;\n}\n.portlet.solid.grey-silver > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.grey-silver > .portlet-title > .caption > i {\n  color: #FAFCFB;\n}\n.portlet.solid.grey-silver > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.grey-silver > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.grey-silver > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.grey-silver > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.grey-silver > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.grey-silver > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.grey-silver {\n  border: 1px solid #d9d9d9;\n  border-top: 0;\n}\n.portlet.box.grey-silver > .portlet-title {\n  background-color: #BFBFBF;\n}\n.portlet.box.grey-silver > .portlet-title > .caption {\n  color: #FAFCFB;\n}\n.portlet.box.grey-silver > .portlet-title > .caption > i {\n  color: #FAFCFB;\n}\n.portlet.box.grey-silver > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #f7f7f7;\n  color: white;\n}\n.portlet.box.grey-silver > .portlet-title > .actions .btn-default > i {\n  color: white;\n}\n.portlet.box.grey-silver > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-silver > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-silver > .portlet-title > .actions .btn-default:active, .portlet.box.grey-silver > .portlet-title > .actions .btn-default.active {\n  border: 1px solid white;\n  color: white;\n}\n\n/* Statistic Block */\n.dashboard-stat.grey-silver {\n  background-color: #BFBFBF;\n}\n.dashboard-stat.grey-silver.dashboard-stat-light:hover {\n  background-color: #b5b5b5;\n}\n.dashboard-stat.grey-silver .visual > i {\n  color: #FAFCFB;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.grey-silver .details .number {\n  color: #FAFCFB;\n}\n.dashboard-stat.grey-silver .details .desc {\n  color: #FAFCFB;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.grey-silver .more {\n  color: #FAFCFB;\n  background-color: #b5b5b5;\n}\n\n/* General Element */\n.bg-grey-silver {\n  border-color: #BFBFBF !important;\n  background-image: none !important;\n  background-color: #BFBFBF !important;\n  color: #FAFCFB !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-grey-silver {\n  color: #BFBFBF !important;\n}\n\n.progress-bar.grey-silver {\n  background: #BFBFBF !important;\n  color: #FAFCFB !important;\n}\n\n/***\nGrey Salsa\n***/\n/* Button */\n.grey-salsa.btn {\n  color: #FAFCFB;\n  background-color: #ACB5C3;\n}\n.grey-salsa.btn:hover, .grey-salsa.btn:focus, .grey-salsa.btn:active, .grey-salsa.btn.active {\n  color: #FAFCFB;\n  background-color: #97a3b4;\n}\n.open .grey-salsa.btn.dropdown-toggle {\n  color: #FAFCFB;\n  background-color: #97a3b4;\n}\n.grey-salsa.btn:active, .grey-salsa.btn.active {\n  background-image: none;\n  background-color: #8895a9;\n}\n.grey-salsa.btn:active:hover, .grey-salsa.btn.active:hover {\n  background-color: #8e9bae;\n}\n.open .grey-salsa.btn.dropdown-toggle {\n  background-image: none;\n}\n.grey-salsa.btn.disabled, .grey-salsa.btn.disabled:hover, .grey-salsa.btn.disabled:focus, .grey-salsa.btn.disabled:active, .grey-salsa.btn.disabled.active, .grey-salsa.btn[disabled], .grey-salsa.btn[disabled]:hover, .grey-salsa.btn[disabled]:focus, .grey-salsa.btn[disabled]:active, .grey-salsa.btn[disabled].active, fieldset[disabled] .grey-salsa.btn, fieldset[disabled] .grey-salsa.btn:hover, fieldset[disabled] .grey-salsa.btn:focus, fieldset[disabled] .grey-salsa.btn:active, fieldset[disabled] .grey-salsa.btn.active {\n  background-color: #ACB5C3;\n}\n.grey-salsa.btn .badge {\n  color: #ACB5C3;\n  background-color: #FAFCFB;\n}\n\n/* Button Strip */\n.btn.grey-salsa-stripe {\n  border-left: 3px solid #ACB5C3;\n}\n\n/* Portlet */\n.portlet > .portlet-body.grey-salsa,\n.portlet.grey-salsa {\n  background-color: #ACB5C3;\n}\n\n.portlet.solid.grey-salsa > .portlet-title,\n.portlet.solid.grey-salsa > .portlet-body {\n  border: 0;\n  color: #FAFCFB;\n}\n.portlet.solid.grey-salsa > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.grey-salsa > .portlet-title > .caption > i {\n  color: #FAFCFB;\n}\n.portlet.solid.grey-salsa > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.grey-salsa > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.grey-salsa > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.grey-salsa > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.grey-salsa > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.grey-salsa > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.grey-salsa {\n  border: 1px solid #cacfd8;\n  border-top: 0;\n}\n.portlet.box.grey-salsa > .portlet-title {\n  background-color: #ACB5C3;\n}\n.portlet.box.grey-salsa > .portlet-title > .caption {\n  color: #FAFCFB;\n}\n.portlet.box.grey-salsa > .portlet-title > .caption > i {\n  color: #FAFCFB;\n}\n.portlet.box.grey-salsa > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #edeff2;\n  color: #fcfcfd;\n}\n.portlet.box.grey-salsa > .portlet-title > .actions .btn-default > i {\n  color: white;\n}\n.portlet.box.grey-salsa > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default:active, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default.active {\n  border: 1px solid white;\n  color: white;\n}\n\n/* Statistic Block */\n.dashboard-stat.grey-salsa {\n  background-color: #ACB5C3;\n}\n.dashboard-stat.grey-salsa.dashboard-stat-light:hover {\n  background-color: #a0aaba;\n}\n.dashboard-stat.grey-salsa .visual > i {\n  color: #FAFCFB;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.grey-salsa .details .number {\n  color: #FAFCFB;\n}\n.dashboard-stat.grey-salsa .details .desc {\n  color: #FAFCFB;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.grey-salsa .more {\n  color: #FAFCFB;\n  background-color: #a0aaba;\n}\n\n/* General Element */\n.bg-grey-salsa {\n  border-color: #ACB5C3 !important;\n  background-image: none !important;\n  background-color: #ACB5C3 !important;\n  color: #FAFCFB !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-grey-salsa {\n  color: #ACB5C3 !important;\n}\n\n.progress-bar.grey-salsa {\n  background: #ACB5C3 !important;\n  color: #FAFCFB !important;\n}\n\n/***\nGrey Salt\n***/\n/* Button */\n.grey-salt.btn {\n  color: #FAFCFB;\n  background-color: #bfcad1;\n}\n.grey-salt.btn:hover, .grey-salt.btn:focus, .grey-salt.btn:active, .grey-salt.btn.active {\n  color: #FAFCFB;\n  background-color: #aab9c2;\n}\n.open .grey-salt.btn.dropdown-toggle {\n  color: #FAFCFB;\n  background-color: #aab9c2;\n}\n.grey-salt.btn:active, .grey-salt.btn.active {\n  background-image: none;\n  background-color: #9badb7;\n}\n.grey-salt.btn:active:hover, .grey-salt.btn.active:hover {\n  background-color: #a1b1bc;\n}\n.open .grey-salt.btn.dropdown-toggle {\n  background-image: none;\n}\n.grey-salt.btn.disabled, .grey-salt.btn.disabled:hover, .grey-salt.btn.disabled:focus, .grey-salt.btn.disabled:active, .grey-salt.btn.disabled.active, .grey-salt.btn[disabled], .grey-salt.btn[disabled]:hover, .grey-salt.btn[disabled]:focus, .grey-salt.btn[disabled]:active, .grey-salt.btn[disabled].active, fieldset[disabled] .grey-salt.btn, fieldset[disabled] .grey-salt.btn:hover, fieldset[disabled] .grey-salt.btn:focus, fieldset[disabled] .grey-salt.btn:active, fieldset[disabled] .grey-salt.btn.active {\n  background-color: #bfcad1;\n}\n.grey-salt.btn .badge {\n  color: #bfcad1;\n  background-color: #FAFCFB;\n}\n\n/* Button Strip */\n.btn.grey-salt-stripe {\n  border-left: 3px solid #bfcad1;\n}\n\n/* Portlet */\n.portlet > .portlet-body.grey-salt,\n.portlet.grey-salt {\n  background-color: #bfcad1;\n}\n\n.portlet.solid.grey-salt > .portlet-title,\n.portlet.solid.grey-salt > .portlet-body {\n  border: 0;\n  color: #FAFCFB;\n}\n.portlet.solid.grey-salt > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.grey-salt > .portlet-title > .caption > i {\n  color: #FAFCFB;\n}\n.portlet.solid.grey-salt > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.grey-salt > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.grey-salt > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.grey-salt > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.grey-salt > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.grey-salt > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.grey-salt {\n  border: 1px solid #dde3e6;\n  border-top: 0;\n}\n.portlet.box.grey-salt > .portlet-title {\n  background-color: #bfcad1;\n}\n.portlet.box.grey-salt > .portlet-title > .caption {\n  color: #FAFCFB;\n}\n.portlet.box.grey-salt > .portlet-title > .caption > i {\n  color: #FAFCFB;\n}\n.portlet.box.grey-salt > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid white;\n  color: white;\n}\n.portlet.box.grey-salt > .portlet-title > .actions .btn-default > i {\n  color: white;\n}\n.portlet.box.grey-salt > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-salt > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-salt > .portlet-title > .actions .btn-default:active, .portlet.box.grey-salt > .portlet-title > .actions .btn-default.active {\n  border: 1px solid white;\n  color: white;\n}\n\n/* Statistic Block */\n.dashboard-stat.grey-salt {\n  background-color: #bfcad1;\n}\n.dashboard-stat.grey-salt.dashboard-stat-light:hover {\n  background-color: #b3c0c8;\n}\n.dashboard-stat.grey-salt .visual > i {\n  color: #FAFCFB;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.grey-salt .details .number {\n  color: #FAFCFB;\n}\n.dashboard-stat.grey-salt .details .desc {\n  color: #FAFCFB;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.grey-salt .more {\n  color: #FAFCFB;\n  background-color: #b3c0c8;\n}\n\n/* General Element */\n.bg-grey-salt {\n  border-color: #bfcad1 !important;\n  background-image: none !important;\n  background-color: #bfcad1 !important;\n  color: #FAFCFB !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-grey-salt {\n  color: #bfcad1 !important;\n}\n\n.progress-bar.grey-salt {\n  background: #bfcad1 !important;\n  color: #FAFCFB !important;\n}\n\n/***\nGrey Mint\n***/\n/* Button */\n.grey-mint.btn {\n  color: #FAFCFB;\n  background-color: #9eacb4;\n}\n.grey-mint.btn:hover, .grey-mint.btn:focus, .grey-mint.btn:active, .grey-mint.btn.active {\n  color: #FAFCFB;\n  background-color: #8a9ba4;\n}\n.open .grey-mint.btn.dropdown-toggle {\n  color: #FAFCFB;\n  background-color: #8a9ba4;\n}\n.grey-mint.btn:active, .grey-mint.btn.active {\n  background-image: none;\n  background-color: #7b8e99;\n}\n.grey-mint.btn:active:hover, .grey-mint.btn.active:hover {\n  background-color: #81939e;\n}\n.open .grey-mint.btn.dropdown-toggle {\n  background-image: none;\n}\n.grey-mint.btn.disabled, .grey-mint.btn.disabled:hover, .grey-mint.btn.disabled:focus, .grey-mint.btn.disabled:active, .grey-mint.btn.disabled.active, .grey-mint.btn[disabled], .grey-mint.btn[disabled]:hover, .grey-mint.btn[disabled]:focus, .grey-mint.btn[disabled]:active, .grey-mint.btn[disabled].active, fieldset[disabled] .grey-mint.btn, fieldset[disabled] .grey-mint.btn:hover, fieldset[disabled] .grey-mint.btn:focus, fieldset[disabled] .grey-mint.btn:active, fieldset[disabled] .grey-mint.btn.active {\n  background-color: #9eacb4;\n}\n.grey-mint.btn .badge {\n  color: #9eacb4;\n  background-color: #FAFCFB;\n}\n\n/* Button Strip */\n.btn.grey-mint-stripe {\n  border-left: 3px solid #9eacb4;\n}\n\n/* Portlet */\n.portlet > .portlet-body.grey-mint,\n.portlet.grey-mint {\n  background-color: #9eacb4;\n}\n\n.portlet.solid.grey-mint > .portlet-title,\n.portlet.solid.grey-mint > .portlet-body {\n  border: 0;\n  color: #FAFCFB;\n}\n.portlet.solid.grey-mint > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.grey-mint > .portlet-title > .caption > i {\n  color: #FAFCFB;\n}\n.portlet.solid.grey-mint > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.grey-mint > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.grey-mint > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.grey-mint > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.grey-mint > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.grey-mint > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.grey-mint {\n  border: 1px solid #bbc5ca;\n  border-top: 0;\n}\n.portlet.box.grey-mint > .portlet-title {\n  background-color: #9eacb4;\n}\n.portlet.box.grey-mint > .portlet-title > .caption {\n  color: #FAFCFB;\n}\n.portlet.box.grey-mint > .portlet-title > .caption > i {\n  color: #FAFCFB;\n}\n.portlet.box.grey-mint > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #dde2e5;\n  color: #eceef0;\n}\n.portlet.box.grey-mint > .portlet-title > .actions .btn-default > i {\n  color: #f4f6f7;\n}\n.portlet.box.grey-mint > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-mint > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-mint > .portlet-title > .actions .btn-default:active, .portlet.box.grey-mint > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #fafbfb;\n  color: white;\n}\n\n/* Statistic Block */\n.dashboard-stat.grey-mint {\n  background-color: #9eacb4;\n}\n.dashboard-stat.grey-mint.dashboard-stat-light:hover {\n  background-color: #92a2ab;\n}\n.dashboard-stat.grey-mint .visual > i {\n  color: #FAFCFB;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.grey-mint .details .number {\n  color: #FAFCFB;\n}\n.dashboard-stat.grey-mint .details .desc {\n  color: #FAFCFB;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.grey-mint .more {\n  color: #FAFCFB;\n  background-color: #92a2ab;\n}\n\n/* General Element */\n.bg-grey-mint {\n  border-color: #9eacb4 !important;\n  background-image: none !important;\n  background-color: #9eacb4 !important;\n  color: #FAFCFB !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-grey-mint {\n  color: #9eacb4 !important;\n}\n\n.progress-bar.grey-mint {\n  background: #9eacb4 !important;\n  color: #FAFCFB !important;\n}\n\n/***********\nRed Colors\n************/\n/***\nRed Default\n***/\n/* Button */\n.red.btn {\n  color: #FFFFFF;\n  background-color: #cb5a5e;\n}\n.red.btn:hover, .red.btn:focus, .red.btn:active, .red.btn.active {\n  color: #FFFFFF;\n  background-color: #c23f44;\n}\n.open .red.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #c23f44;\n}\n.red.btn:active, .red.btn.active {\n  background-image: none;\n  background-color: #b0383c;\n}\n.red.btn:active:hover, .red.btn.active:hover {\n  background-color: #b83a3e;\n}\n.open .red.btn.dropdown-toggle {\n  background-image: none;\n}\n.red.btn.disabled, .red.btn.disabled:hover, .red.btn.disabled:focus, .red.btn.disabled:active, .red.btn.disabled.active, .red.btn[disabled], .red.btn[disabled]:hover, .red.btn[disabled]:focus, .red.btn[disabled]:active, .red.btn[disabled].active, fieldset[disabled] .red.btn, fieldset[disabled] .red.btn:hover, fieldset[disabled] .red.btn:focus, fieldset[disabled] .red.btn:active, fieldset[disabled] .red.btn.active {\n  background-color: #cb5a5e;\n}\n.red.btn .badge {\n  color: #cb5a5e;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.red-stripe {\n  border-left: 3px solid #cb5a5e;\n}\n\n/* Portlet */\n.portlet > .portlet-body.red,\n.portlet.red {\n  background-color: #cb5a5e;\n}\n\n.portlet.solid.red > .portlet-title,\n.portlet.solid.red > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.red > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.red > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.red > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.red > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.red > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.red > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.red > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.red > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.red {\n  border: 1px solid #d78184;\n  border-top: 0;\n}\n.portlet.box.red > .portlet-title {\n  background-color: #cb5a5e;\n}\n.portlet.box.red > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.red > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.red > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #e6afb1;\n  color: #ecc3c4;\n}\n.portlet.box.red > .portlet-title > .actions .btn-default > i {\n  color: #f0ced0;\n}\n.portlet.box.red > .portlet-title > .actions .btn-default:hover, .portlet.box.red > .portlet-title > .actions .btn-default:focus, .portlet.box.red > .portlet-title > .actions .btn-default:active, .portlet.box.red > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #f2d6d7;\n  color: #f8e9ea;\n}\n\n/* Statistic Block */\n.dashboard-stat.red {\n  background-color: #cb5a5e;\n}\n.dashboard-stat.red.dashboard-stat-light:hover {\n  background-color: #c64a4f;\n}\n.dashboard-stat.red .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.red .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.red .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.red .more {\n  color: #FFFFFF;\n  background-color: #c64a4f;\n}\n\n/* General Element */\n.bg-red {\n  border-color: #cb5a5e !important;\n  background-image: none !important;\n  background-color: #cb5a5e !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-red {\n  color: #cb5a5e !important;\n}\n\n.progress-bar.red {\n  background: #cb5a5e !important;\n  color: #FFFFFF !important;\n}\n\n/***\nRed Pink\n***/\n/* Button */\n.red-pink.btn {\n  color: #FFFFFF;\n  background-color: #E08283;\n}\n.red-pink.btn:hover, .red-pink.btn:focus, .red-pink.btn:active, .red-pink.btn.active {\n  color: #FFFFFF;\n  background-color: #d96567;\n}\n.open .red-pink.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #d96567;\n}\n.red-pink.btn:active, .red-pink.btn.active {\n  background-image: none;\n  background-color: #d45152;\n}\n.red-pink.btn:active:hover, .red-pink.btn.active:hover {\n  background-color: #d6595a;\n}\n.open .red-pink.btn.dropdown-toggle {\n  background-image: none;\n}\n.red-pink.btn.disabled, .red-pink.btn.disabled:hover, .red-pink.btn.disabled:focus, .red-pink.btn.disabled:active, .red-pink.btn.disabled.active, .red-pink.btn[disabled], .red-pink.btn[disabled]:hover, .red-pink.btn[disabled]:focus, .red-pink.btn[disabled]:active, .red-pink.btn[disabled].active, fieldset[disabled] .red-pink.btn, fieldset[disabled] .red-pink.btn:hover, fieldset[disabled] .red-pink.btn:focus, fieldset[disabled] .red-pink.btn:active, fieldset[disabled] .red-pink.btn.active {\n  background-color: #E08283;\n}\n.red-pink.btn .badge {\n  color: #E08283;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.red-pink-stripe {\n  border-left: 3px solid #E08283;\n}\n\n/* Portlet */\n.portlet > .portlet-body.red-pink,\n.portlet.red-pink {\n  background-color: #E08283;\n}\n\n.portlet.solid.red-pink > .portlet-title,\n.portlet.solid.red-pink > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.red-pink > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.red-pink > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.red-pink > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.red-pink > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.red-pink > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.red-pink > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.red-pink > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.red-pink > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.red-pink {\n  border: 1px solid #eaabac;\n  border-top: 0;\n}\n.portlet.box.red-pink > .portlet-title {\n  background-color: #E08283;\n}\n.portlet.box.red-pink > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.red-pink > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.red-pink > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #f6dcdc;\n  color: #fbf0f0;\n}\n.portlet.box.red-pink > .portlet-title > .actions .btn-default > i {\n  color: #fefdfd;\n}\n.portlet.box.red-pink > .portlet-title > .actions .btn-default:hover, .portlet.box.red-pink > .portlet-title > .actions .btn-default:focus, .portlet.box.red-pink > .portlet-title > .actions .btn-default:active, .portlet.box.red-pink > .portlet-title > .actions .btn-default.active {\n  border: 1px solid white;\n  color: white;\n}\n\n/* Statistic Block */\n.dashboard-stat.red-pink {\n  background-color: #E08283;\n}\n.dashboard-stat.red-pink.dashboard-stat-light:hover {\n  background-color: #dc7273;\n}\n.dashboard-stat.red-pink .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.red-pink .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.red-pink .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.red-pink .more {\n  color: #FFFFFF;\n  background-color: #dc7273;\n}\n\n/* General Element */\n.bg-red-pink {\n  border-color: #E08283 !important;\n  background-image: none !important;\n  background-color: #E08283 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-red-pink {\n  color: #E08283 !important;\n}\n\n.progress-bar.red-pink {\n  background: #E08283 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nRed Sunglo\n***/\n/* Button */\n.red-sunglo.btn {\n  color: #FFFFFF;\n  background-color: #E26A6A;\n}\n.red-sunglo.btn:hover, .red-sunglo.btn:focus, .red-sunglo.btn:active, .red-sunglo.btn.active {\n  color: #FFFFFF;\n  background-color: #dc4c4c;\n}\n.open .red-sunglo.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #dc4c4c;\n}\n.red-sunglo.btn:active, .red-sunglo.btn.active {\n  background-image: none;\n  background-color: #d83737;\n}\n.red-sunglo.btn:active:hover, .red-sunglo.btn.active:hover {\n  background-color: #da3f3f;\n}\n.open .red-sunglo.btn.dropdown-toggle {\n  background-image: none;\n}\n.red-sunglo.btn.disabled, .red-sunglo.btn.disabled:hover, .red-sunglo.btn.disabled:focus, .red-sunglo.btn.disabled:active, .red-sunglo.btn.disabled.active, .red-sunglo.btn[disabled], .red-sunglo.btn[disabled]:hover, .red-sunglo.btn[disabled]:focus, .red-sunglo.btn[disabled]:active, .red-sunglo.btn[disabled].active, fieldset[disabled] .red-sunglo.btn, fieldset[disabled] .red-sunglo.btn:hover, fieldset[disabled] .red-sunglo.btn:focus, fieldset[disabled] .red-sunglo.btn:active, fieldset[disabled] .red-sunglo.btn.active {\n  background-color: #E26A6A;\n}\n.red-sunglo.btn .badge {\n  color: #E26A6A;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.red-sunglo-stripe {\n  border-left: 3px solid #E26A6A;\n}\n\n/* Portlet */\n.portlet > .portlet-body.red-sunglo,\n.portlet.red-sunglo {\n  background-color: #E26A6A;\n}\n\n.portlet.solid.red-sunglo > .portlet-title,\n.portlet.solid.red-sunglo > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.red-sunglo > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.red-sunglo > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.red-sunglo > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.red-sunglo > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.red-sunglo > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.red-sunglo > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.red-sunglo > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.red-sunglo > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.red-sunglo {\n  border: 1px solid #ea9595;\n  border-top: 0;\n}\n.portlet.box.red-sunglo > .portlet-title {\n  background-color: #E26A6A;\n}\n.portlet.box.red-sunglo > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.red-sunglo > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.red-sunglo > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #f4c8c8;\n  color: #f8dddd;\n}\n.portlet.box.red-sunglo > .portlet-title > .actions .btn-default > i {\n  color: #fbeaea;\n}\n.portlet.box.red-sunglo > .portlet-title > .actions .btn-default:hover, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default:focus, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default:active, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #fdf3f3;\n  color: white;\n}\n\n/* Statistic Block */\n.dashboard-stat.red-sunglo {\n  background-color: #E26A6A;\n}\n.dashboard-stat.red-sunglo.dashboard-stat-light:hover {\n  background-color: #df5959;\n}\n.dashboard-stat.red-sunglo .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.red-sunglo .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.red-sunglo .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.red-sunglo .more {\n  color: #FFFFFF;\n  background-color: #df5959;\n}\n\n/* General Element */\n.bg-red-sunglo {\n  border-color: #E26A6A !important;\n  background-image: none !important;\n  background-color: #E26A6A !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-red-sunglo {\n  color: #E26A6A !important;\n}\n\n.progress-bar.red-sunglo {\n  background: #E26A6A !important;\n  color: #FFFFFF !important;\n}\n\n/***\nRed Intense\n***/\n/* Button */\n.red-intense.btn {\n  color: #FFFFFF;\n  background-color: #e35b5a;\n}\n.red-intense.btn:hover, .red-intense.btn:focus, .red-intense.btn:active, .red-intense.btn.active {\n  color: #FFFFFF;\n  background-color: #de3d3b;\n}\n.open .red-intense.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #de3d3b;\n}\n.red-intense.btn:active, .red-intense.btn.active {\n  background-image: none;\n  background-color: #da2726;\n}\n.red-intense.btn:active:hover, .red-intense.btn.active:hover {\n  background-color: #dc302e;\n}\n.open .red-intense.btn.dropdown-toggle {\n  background-image: none;\n}\n.red-intense.btn.disabled, .red-intense.btn.disabled:hover, .red-intense.btn.disabled:focus, .red-intense.btn.disabled:active, .red-intense.btn.disabled.active, .red-intense.btn[disabled], .red-intense.btn[disabled]:hover, .red-intense.btn[disabled]:focus, .red-intense.btn[disabled]:active, .red-intense.btn[disabled].active, fieldset[disabled] .red-intense.btn, fieldset[disabled] .red-intense.btn:hover, fieldset[disabled] .red-intense.btn:focus, fieldset[disabled] .red-intense.btn:active, fieldset[disabled] .red-intense.btn.active {\n  background-color: #e35b5a;\n}\n.red-intense.btn .badge {\n  color: #e35b5a;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.red-intense-stripe {\n  border-left: 3px solid #e35b5a;\n}\n\n/* Portlet */\n.portlet > .portlet-body.red-intense,\n.portlet.red-intense {\n  background-color: #e35b5a;\n}\n\n.portlet.solid.red-intense > .portlet-title,\n.portlet.solid.red-intense > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.red-intense > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.red-intense > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.red-intense > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.red-intense > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.red-intense > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.red-intense > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.red-intense > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.red-intense > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.red-intense {\n  border: 1px solid #ea8686;\n  border-top: 0;\n}\n.portlet.box.red-intense > .portlet-title {\n  background-color: #e35b5a;\n}\n.portlet.box.red-intense > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.red-intense > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.red-intense > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #f3baba;\n  color: #f7d0d0;\n}\n.portlet.box.red-intense > .portlet-title > .actions .btn-default > i {\n  color: #f9dddd;\n}\n.portlet.box.red-intense > .portlet-title > .actions .btn-default:hover, .portlet.box.red-intense > .portlet-title > .actions .btn-default:focus, .portlet.box.red-intense > .portlet-title > .actions .btn-default:active, .portlet.box.red-intense > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #fbe6e6;\n  color: #fefbfb;\n}\n\n/* Statistic Block */\n.dashboard-stat.red-intense {\n  background-color: #e35b5a;\n}\n.dashboard-stat.red-intense.dashboard-stat-light:hover {\n  background-color: #e04a49;\n}\n.dashboard-stat.red-intense .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.red-intense .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.red-intense .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.red-intense .more {\n  color: #FFFFFF;\n  background-color: #e04a49;\n}\n\n/* General Element */\n.bg-red-intense {\n  border-color: #e35b5a !important;\n  background-image: none !important;\n  background-color: #e35b5a !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-red-intense {\n  color: #e35b5a !important;\n}\n\n.progress-bar.red-intense {\n  background: #e35b5a !important;\n  color: #FFFFFF !important;\n}\n\n/***\nRed Thunderbird\n***/\n/* Button */\n.red-thunderbird.btn {\n  color: #FFFFFF;\n  background-color: #D91E18;\n}\n.red-thunderbird.btn:hover, .red-thunderbird.btn:focus, .red-thunderbird.btn:active, .red-thunderbird.btn.active {\n  color: #FFFFFF;\n  background-color: #b91a14;\n}\n.open .red-thunderbird.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #b91a14;\n}\n.red-thunderbird.btn:active, .red-thunderbird.btn.active {\n  background-image: none;\n  background-color: #a21612;\n}\n.red-thunderbird.btn:active:hover, .red-thunderbird.btn.active:hover {\n  background-color: #ab1813;\n}\n.open .red-thunderbird.btn.dropdown-toggle {\n  background-image: none;\n}\n.red-thunderbird.btn.disabled, .red-thunderbird.btn.disabled:hover, .red-thunderbird.btn.disabled:focus, .red-thunderbird.btn.disabled:active, .red-thunderbird.btn.disabled.active, .red-thunderbird.btn[disabled], .red-thunderbird.btn[disabled]:hover, .red-thunderbird.btn[disabled]:focus, .red-thunderbird.btn[disabled]:active, .red-thunderbird.btn[disabled].active, fieldset[disabled] .red-thunderbird.btn, fieldset[disabled] .red-thunderbird.btn:hover, fieldset[disabled] .red-thunderbird.btn:focus, fieldset[disabled] .red-thunderbird.btn:active, fieldset[disabled] .red-thunderbird.btn.active {\n  background-color: #D91E18;\n}\n.red-thunderbird.btn .badge {\n  color: #D91E18;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.red-thunderbird-stripe {\n  border-left: 3px solid #D91E18;\n}\n\n/* Portlet */\n.portlet > .portlet-body.red-thunderbird,\n.portlet.red-thunderbird {\n  background-color: #D91E18;\n}\n\n.portlet.solid.red-thunderbird > .portlet-title,\n.portlet.solid.red-thunderbird > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.red-thunderbird > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.red-thunderbird > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.red-thunderbird > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.red-thunderbird > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.red-thunderbird > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.red-thunderbird > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.red-thunderbird > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.red-thunderbird > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.red-thunderbird {\n  border: 1px solid #e9403b;\n  border-top: 0;\n}\n.portlet.box.red-thunderbird > .portlet-title {\n  background-color: #D91E18;\n}\n.portlet.box.red-thunderbird > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.red-thunderbird > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.red-thunderbird > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #ef7672;\n  color: #f28c89;\n}\n.portlet.box.red-thunderbird > .portlet-title > .actions .btn-default > i {\n  color: #f39997;\n}\n.portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:hover, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:focus, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:active, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #f4a2a0;\n  color: #f7b9b7;\n}\n\n/* Statistic Block */\n.dashboard-stat.red-thunderbird {\n  background-color: #D91E18;\n}\n.dashboard-stat.red-thunderbird.dashboard-stat-light:hover {\n  background-color: #c71b16;\n}\n.dashboard-stat.red-thunderbird .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.red-thunderbird .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.red-thunderbird .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.red-thunderbird .more {\n  color: #FFFFFF;\n  background-color: #c71b16;\n}\n\n/* General Element */\n.bg-red-thunderbird {\n  border-color: #D91E18 !important;\n  background-image: none !important;\n  background-color: #D91E18 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-red-thunderbird {\n  color: #D91E18 !important;\n}\n\n.progress-bar.red-thunderbird {\n  background: #D91E18 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nRed Flamingo\n***/\n/* Button */\n.red-flamingo.btn {\n  color: #FFFFFF;\n  background-color: #EF4836;\n}\n.red-flamingo.btn:hover, .red-flamingo.btn:focus, .red-flamingo.btn:active, .red-flamingo.btn.active {\n  color: #FFFFFF;\n  background-color: #ec2a15;\n}\n.open .red-flamingo.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #ec2a15;\n}\n.red-flamingo.btn:active, .red-flamingo.btn.active {\n  background-image: none;\n  background-color: #d72411;\n}\n.red-flamingo.btn:active:hover, .red-flamingo.btn.active:hover {\n  background-color: #e02612;\n}\n.open .red-flamingo.btn.dropdown-toggle {\n  background-image: none;\n}\n.red-flamingo.btn.disabled, .red-flamingo.btn.disabled:hover, .red-flamingo.btn.disabled:focus, .red-flamingo.btn.disabled:active, .red-flamingo.btn.disabled.active, .red-flamingo.btn[disabled], .red-flamingo.btn[disabled]:hover, .red-flamingo.btn[disabled]:focus, .red-flamingo.btn[disabled]:active, .red-flamingo.btn[disabled].active, fieldset[disabled] .red-flamingo.btn, fieldset[disabled] .red-flamingo.btn:hover, fieldset[disabled] .red-flamingo.btn:focus, fieldset[disabled] .red-flamingo.btn:active, fieldset[disabled] .red-flamingo.btn.active {\n  background-color: #EF4836;\n}\n.red-flamingo.btn .badge {\n  color: #EF4836;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.red-flamingo-stripe {\n  border-left: 3px solid #EF4836;\n}\n\n/* Portlet */\n.portlet > .portlet-body.red-flamingo,\n.portlet.red-flamingo {\n  background-color: #EF4836;\n}\n\n.portlet.solid.red-flamingo > .portlet-title,\n.portlet.solid.red-flamingo > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.red-flamingo > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.red-flamingo > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.red-flamingo > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.red-flamingo > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.red-flamingo > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.red-flamingo > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.red-flamingo > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.red-flamingo > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.red-flamingo {\n  border: 1px solid #f37365;\n  border-top: 0;\n}\n.portlet.box.red-flamingo > .portlet-title {\n  background-color: #EF4836;\n}\n.portlet.box.red-flamingo > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.red-flamingo > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.red-flamingo > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #f7a79e;\n  color: #f9bcb6;\n}\n.portlet.box.red-flamingo > .portlet-title > .actions .btn-default > i {\n  color: #fac9c4;\n}\n.portlet.box.red-flamingo > .portlet-title > .actions .btn-default:hover, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default:focus, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default:active, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #fbd2cd;\n  color: #fde7e5;\n}\n\n/* Statistic Block */\n.dashboard-stat.red-flamingo {\n  background-color: #EF4836;\n}\n.dashboard-stat.red-flamingo.dashboard-stat-light:hover {\n  background-color: #ed3723;\n}\n.dashboard-stat.red-flamingo .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.red-flamingo .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.red-flamingo .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.red-flamingo .more {\n  color: #FFFFFF;\n  background-color: #ed3723;\n}\n\n/* General Element */\n.bg-red-flamingo {\n  border-color: #EF4836 !important;\n  background-image: none !important;\n  background-color: #EF4836 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-red-flamingo {\n  color: #EF4836 !important;\n}\n\n.progress-bar.red-flamingo {\n  background: #EF4836 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nRed Flamingo\n***/\n/* Button */\n.red-soft.btn {\n  color: #FFFFFF;\n  background-color: #d05454;\n}\n.red-soft.btn:hover, .red-soft.btn:focus, .red-soft.btn:active, .red-soft.btn.active {\n  color: #FFFFFF;\n  background-color: #c83838;\n}\n.open .red-soft.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #c83838;\n}\n.red-soft.btn:active, .red-soft.btn.active {\n  background-image: none;\n  background-color: #b53232;\n}\n.red-soft.btn:active:hover, .red-soft.btn.active:hover {\n  background-color: #bd3434;\n}\n.open .red-soft.btn.dropdown-toggle {\n  background-image: none;\n}\n.red-soft.btn.disabled, .red-soft.btn.disabled:hover, .red-soft.btn.disabled:focus, .red-soft.btn.disabled:active, .red-soft.btn.disabled.active, .red-soft.btn[disabled], .red-soft.btn[disabled]:hover, .red-soft.btn[disabled]:focus, .red-soft.btn[disabled]:active, .red-soft.btn[disabled].active, fieldset[disabled] .red-soft.btn, fieldset[disabled] .red-soft.btn:hover, fieldset[disabled] .red-soft.btn:focus, fieldset[disabled] .red-soft.btn:active, fieldset[disabled] .red-soft.btn.active {\n  background-color: #d05454;\n}\n.red-soft.btn .badge {\n  color: #d05454;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.red-soft-stripe {\n  border-left: 3px solid #d05454;\n}\n\n/* Portlet */\n.portlet > .portlet-body.red-soft,\n.portlet.red-soft {\n  background-color: #d05454;\n}\n\n.portlet.solid.red-soft > .portlet-title,\n.portlet.solid.red-soft > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.red-soft > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.red-soft > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.red-soft > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.red-soft > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.red-soft > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.red-soft > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.red-soft > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.red-soft > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.red-soft {\n  border: 1px solid #db7c7c;\n  border-top: 0;\n}\n.portlet.box.red-soft > .portlet-title {\n  background-color: #d05454;\n}\n.portlet.box.red-soft > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.red-soft > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.red-soft > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #e8acac;\n  color: #eec0c0;\n}\n.portlet.box.red-soft > .portlet-title > .actions .btn-default > i {\n  color: #f1cccc;\n}\n.portlet.box.red-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.red-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.red-soft > .portlet-title > .actions .btn-default:active, .portlet.box.red-soft > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #f3d4d4;\n  color: #f9e8e8;\n}\n\n/* Statistic Block */\n.dashboard-stat.red-soft {\n  background-color: #d05454;\n}\n.dashboard-stat.red-soft.dashboard-stat-light:hover {\n  background-color: #cc4444;\n}\n.dashboard-stat.red-soft .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.red-soft .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.red-soft .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.red-soft .more {\n  color: #FFFFFF;\n  background-color: #cc4444;\n}\n\n/* General Element */\n.bg-red-soft {\n  border-color: #d05454 !important;\n  background-image: none !important;\n  background-color: #d05454 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-red-soft {\n  color: #d05454 !important;\n}\n\n.progress-bar.red-soft {\n  background: #d05454 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nRed Haze\n***/\n/* Button */\n.red-haze.btn {\n  color: #FFFFFF;\n  background-color: #f36a5a;\n}\n.red-haze.btn:hover, .red-haze.btn:focus, .red-haze.btn:active, .red-haze.btn.active {\n  color: #FFFFFF;\n  background-color: #f14c39;\n}\n.open .red-haze.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #f14c39;\n}\n.red-haze.btn:active, .red-haze.btn.active {\n  background-image: none;\n  background-color: #ef3621;\n}\n.red-haze.btn:active:hover, .red-haze.btn.active:hover {\n  background-color: #f03f2a;\n}\n.open .red-haze.btn.dropdown-toggle {\n  background-image: none;\n}\n.red-haze.btn.disabled, .red-haze.btn.disabled:hover, .red-haze.btn.disabled:focus, .red-haze.btn.disabled:active, .red-haze.btn.disabled.active, .red-haze.btn[disabled], .red-haze.btn[disabled]:hover, .red-haze.btn[disabled]:focus, .red-haze.btn[disabled]:active, .red-haze.btn[disabled].active, fieldset[disabled] .red-haze.btn, fieldset[disabled] .red-haze.btn:hover, fieldset[disabled] .red-haze.btn:focus, fieldset[disabled] .red-haze.btn:active, fieldset[disabled] .red-haze.btn.active {\n  background-color: #f36a5a;\n}\n.red-haze.btn .badge {\n  color: #f36a5a;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.red-haze-stripe {\n  border-left: 3px solid #f36a5a;\n}\n\n/* Portlet */\n.portlet > .portlet-body.red-haze,\n.portlet.red-haze {\n  background-color: #f36a5a;\n}\n\n.portlet.solid.red-haze > .portlet-title,\n.portlet.solid.red-haze > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.red-haze > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.red-haze > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.red-haze > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.red-haze > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.red-haze > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.red-haze > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.red-haze > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.red-haze > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.red-haze {\n  border: 1px solid #f6958a;\n  border-top: 0;\n}\n.portlet.box.red-haze > .portlet-title {\n  background-color: #f36a5a;\n}\n.portlet.box.red-haze > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.red-haze > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.red-haze > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #fbc8c3;\n  color: #fcdeda;\n}\n.portlet.box.red-haze > .portlet-title > .actions .btn-default > i {\n  color: #fdebe9;\n}\n.portlet.box.red-haze > .portlet-title > .actions .btn-default:hover, .portlet.box.red-haze > .portlet-title > .actions .btn-default:focus, .portlet.box.red-haze > .portlet-title > .actions .btn-default:active, .portlet.box.red-haze > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #fef3f2;\n  color: white;\n}\n\n/* Statistic Block */\n.dashboard-stat.red-haze {\n  background-color: #f36a5a;\n}\n.dashboard-stat.red-haze.dashboard-stat-light:hover {\n  background-color: #f25947;\n}\n.dashboard-stat.red-haze .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.red-haze .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.red-haze .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.red-haze .more {\n  color: #FFFFFF;\n  background-color: #f25947;\n}\n\n/* General Element */\n.bg-red-haze {\n  border-color: #f36a5a !important;\n  background-image: none !important;\n  background-color: #f36a5a !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-red-haze {\n  color: #f36a5a !important;\n}\n\n.progress-bar.red-haze {\n  background: #f36a5a !important;\n  color: #FFFFFF !important;\n}\n\n/***********\nYellow Colors\n************/\n/***\nYellow Default\n***/\n/* Button */\n.yellow.btn {\n  color: #FFFFFF;\n  background-color: #c49f47;\n}\n.yellow.btn:hover, .yellow.btn:focus, .yellow.btn:active, .yellow.btn.active {\n  color: #FFFFFF;\n  background-color: #af8c38;\n}\n.open .yellow.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #af8c38;\n}\n.yellow.btn:active, .yellow.btn.active {\n  background-image: none;\n  background-color: #9c7c32;\n}\n.yellow.btn:active:hover, .yellow.btn.active:hover {\n  background-color: #a48334;\n}\n.open .yellow.btn.dropdown-toggle {\n  background-image: none;\n}\n.yellow.btn.disabled, .yellow.btn.disabled:hover, .yellow.btn.disabled:focus, .yellow.btn.disabled:active, .yellow.btn.disabled.active, .yellow.btn[disabled], .yellow.btn[disabled]:hover, .yellow.btn[disabled]:focus, .yellow.btn[disabled]:active, .yellow.btn[disabled].active, fieldset[disabled] .yellow.btn, fieldset[disabled] .yellow.btn:hover, fieldset[disabled] .yellow.btn:focus, fieldset[disabled] .yellow.btn:active, fieldset[disabled] .yellow.btn.active {\n  background-color: #c49f47;\n}\n.yellow.btn .badge {\n  color: #c49f47;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.yellow-stripe {\n  border-left: 3px solid #c49f47;\n}\n\n/* Portlet */\n.portlet > .portlet-body.yellow,\n.portlet.yellow {\n  background-color: #c49f47;\n}\n\n.portlet.solid.yellow > .portlet-title,\n.portlet.solid.yellow > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.yellow > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.yellow > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.yellow > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.yellow > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.yellow > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.yellow > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.yellow > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.yellow > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.yellow {\n  border: 1px solid #d0b36e;\n  border-top: 0;\n}\n.portlet.box.yellow > .portlet-title {\n  background-color: #c49f47;\n}\n.portlet.box.yellow > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.yellow > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.yellow > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #dfcb9c;\n  color: #e5d5af;\n}\n.portlet.box.yellow > .portlet-title > .actions .btn-default > i {\n  color: #e9dbbb;\n}\n.portlet.box.yellow > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow > .portlet-title > .actions .btn-default:active, .portlet.box.yellow > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #ecdfc3;\n  color: #f2ead6;\n}\n\n/* Statistic Block */\n.dashboard-stat.yellow {\n  background-color: #c49f47;\n}\n.dashboard-stat.yellow.dashboard-stat-light:hover {\n  background-color: #bb953c;\n}\n.dashboard-stat.yellow .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.yellow .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.yellow .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.yellow .more {\n  color: #FFFFFF;\n  background-color: #bb953c;\n}\n\n/* General Element */\n.bg-yellow {\n  border-color: #c49f47 !important;\n  background-image: none !important;\n  background-color: #c49f47 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-yellow {\n  color: #c49f47 !important;\n}\n\n.progress-bar.yellow {\n  background: #c49f47 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nYellow Gold\n***/\n/* Button */\n.yellow-gold.btn {\n  color: #FFFFFF;\n  background-color: #E87E04;\n}\n.yellow-gold.btn:hover, .yellow-gold.btn:focus, .yellow-gold.btn:active, .yellow-gold.btn.active {\n  color: #FFFFFF;\n  background-color: #c56b03;\n}\n.open .yellow-gold.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #c56b03;\n}\n.yellow-gold.btn:active, .yellow-gold.btn.active {\n  background-image: none;\n  background-color: #ac5d03;\n}\n.yellow-gold.btn:active:hover, .yellow-gold.btn.active:hover {\n  background-color: #b66303;\n}\n.open .yellow-gold.btn.dropdown-toggle {\n  background-image: none;\n}\n.yellow-gold.btn.disabled, .yellow-gold.btn.disabled:hover, .yellow-gold.btn.disabled:focus, .yellow-gold.btn.disabled:active, .yellow-gold.btn.disabled.active, .yellow-gold.btn[disabled], .yellow-gold.btn[disabled]:hover, .yellow-gold.btn[disabled]:focus, .yellow-gold.btn[disabled]:active, .yellow-gold.btn[disabled].active, fieldset[disabled] .yellow-gold.btn, fieldset[disabled] .yellow-gold.btn:hover, fieldset[disabled] .yellow-gold.btn:focus, fieldset[disabled] .yellow-gold.btn:active, fieldset[disabled] .yellow-gold.btn.active {\n  background-color: #E87E04;\n}\n.yellow-gold.btn .badge {\n  color: #E87E04;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.yellow-gold-stripe {\n  border-left: 3px solid #E87E04;\n}\n\n/* Portlet */\n.portlet > .portlet-body.yellow-gold,\n.portlet.yellow-gold {\n  background-color: #E87E04;\n}\n\n.portlet.solid.yellow-gold > .portlet-title,\n.portlet.solid.yellow-gold > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.yellow-gold > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.yellow-gold > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.yellow-gold > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.yellow-gold > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.yellow-gold > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.yellow-gold > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.yellow-gold > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.yellow-gold > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.yellow-gold {\n  border: 1px solid #fb9724;\n  border-top: 0;\n}\n.portlet.box.yellow-gold > .portlet-title {\n  background-color: #E87E04;\n}\n.portlet.box.yellow-gold > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.yellow-gold > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.yellow-gold > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #fcb460;\n  color: #fdbf79;\n}\n.portlet.box.yellow-gold > .portlet-title > .actions .btn-default > i {\n  color: #fdc788;\n}\n.portlet.box.yellow-gold > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #fdcb92;\n  color: #fed7ab;\n}\n\n/* Statistic Block */\n.dashboard-stat.yellow-gold {\n  background-color: #E87E04;\n}\n.dashboard-stat.yellow-gold.dashboard-stat-light:hover {\n  background-color: #d47304;\n}\n.dashboard-stat.yellow-gold .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.yellow-gold .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.yellow-gold .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.yellow-gold .more {\n  color: #FFFFFF;\n  background-color: #d47304;\n}\n\n/* General Element */\n.bg-yellow-gold {\n  border-color: #E87E04 !important;\n  background-image: none !important;\n  background-color: #E87E04 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-yellow-gold {\n  color: #E87E04 !important;\n}\n\n.progress-bar.yellow-gold {\n  background: #E87E04 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nYellow Casablanca\n***/\n/* Button */\n.yellow-casablanca.btn {\n  color: #FFFFFF;\n  background-color: #f2784b;\n}\n.yellow-casablanca.btn:hover, .yellow-casablanca.btn:focus, .yellow-casablanca.btn:active, .yellow-casablanca.btn.active {\n  color: #FFFFFF;\n  background-color: #f05f2a;\n}\n.open .yellow-casablanca.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #f05f2a;\n}\n.yellow-casablanca.btn:active, .yellow-casablanca.btn.active {\n  background-image: none;\n  background-color: #ee4d12;\n}\n.yellow-casablanca.btn:active:hover, .yellow-casablanca.btn.active:hover {\n  background-color: #ef541b;\n}\n.open .yellow-casablanca.btn.dropdown-toggle {\n  background-image: none;\n}\n.yellow-casablanca.btn.disabled, .yellow-casablanca.btn.disabled:hover, .yellow-casablanca.btn.disabled:focus, .yellow-casablanca.btn.disabled:active, .yellow-casablanca.btn.disabled.active, .yellow-casablanca.btn[disabled], .yellow-casablanca.btn[disabled]:hover, .yellow-casablanca.btn[disabled]:focus, .yellow-casablanca.btn[disabled]:active, .yellow-casablanca.btn[disabled].active, fieldset[disabled] .yellow-casablanca.btn, fieldset[disabled] .yellow-casablanca.btn:hover, fieldset[disabled] .yellow-casablanca.btn:focus, fieldset[disabled] .yellow-casablanca.btn:active, fieldset[disabled] .yellow-casablanca.btn.active {\n  background-color: #f2784b;\n}\n.yellow-casablanca.btn .badge {\n  color: #f2784b;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.yellow-casablanca-stripe {\n  border-left: 3px solid #f2784b;\n}\n\n/* Portlet */\n.portlet > .portlet-body.yellow-casablanca,\n.portlet.yellow-casablanca {\n  background-color: #f2784b;\n}\n\n.portlet.solid.yellow-casablanca > .portlet-title,\n.portlet.solid.yellow-casablanca > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.yellow-casablanca > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.yellow-casablanca > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.yellow-casablanca {\n  border: 1px solid #f59c7b;\n  border-top: 0;\n}\n.portlet.box.yellow-casablanca > .portlet-title {\n  background-color: #f2784b;\n}\n.portlet.box.yellow-casablanca > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.yellow-casablanca > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #fac6b4;\n  color: #fbd8cb;\n}\n.portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default > i {\n  color: #fce3da;\n}\n.portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #fdeae3;\n  color: #fffcfb;\n}\n\n/* Statistic Block */\n.dashboard-stat.yellow-casablanca {\n  background-color: #f2784b;\n}\n.dashboard-stat.yellow-casablanca.dashboard-stat-light:hover {\n  background-color: #f16a38;\n}\n.dashboard-stat.yellow-casablanca .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.yellow-casablanca .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.yellow-casablanca .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.yellow-casablanca .more {\n  color: #FFFFFF;\n  background-color: #f16a38;\n}\n\n/* General Element */\n.bg-yellow-casablanca {\n  border-color: #f2784b !important;\n  background-image: none !important;\n  background-color: #f2784b !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-yellow-casablanca {\n  color: #f2784b !important;\n}\n\n.progress-bar.yellow-casablanca {\n  background: #f2784b !important;\n  color: #FFFFFF !important;\n}\n\n/***\nYellow Crusta\n***/\n/* Button */\n.yellow-crusta.btn {\n  color: #FFFFFF;\n  background-color: #f3c200;\n}\n.yellow-crusta.btn:hover, .yellow-crusta.btn:focus, .yellow-crusta.btn:active, .yellow-crusta.btn.active {\n  color: #FFFFFF;\n  background-color: #cfa500;\n}\n.open .yellow-crusta.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #cfa500;\n}\n.yellow-crusta.btn:active, .yellow-crusta.btn.active {\n  background-image: none;\n  background-color: #b69100;\n}\n.yellow-crusta.btn:active:hover, .yellow-crusta.btn.active:hover {\n  background-color: #c09900;\n}\n.open .yellow-crusta.btn.dropdown-toggle {\n  background-image: none;\n}\n.yellow-crusta.btn.disabled, .yellow-crusta.btn.disabled:hover, .yellow-crusta.btn.disabled:focus, .yellow-crusta.btn.disabled:active, .yellow-crusta.btn.disabled.active, .yellow-crusta.btn[disabled], .yellow-crusta.btn[disabled]:hover, .yellow-crusta.btn[disabled]:focus, .yellow-crusta.btn[disabled]:active, .yellow-crusta.btn[disabled].active, fieldset[disabled] .yellow-crusta.btn, fieldset[disabled] .yellow-crusta.btn:hover, fieldset[disabled] .yellow-crusta.btn:focus, fieldset[disabled] .yellow-crusta.btn:active, fieldset[disabled] .yellow-crusta.btn.active {\n  background-color: #f3c200;\n}\n.yellow-crusta.btn .badge {\n  color: #f3c200;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.yellow-crusta-stripe {\n  border-left: 3px solid #f3c200;\n}\n\n/* Portlet */\n.portlet > .portlet-body.yellow-crusta,\n.portlet.yellow-crusta {\n  background-color: #f3c200;\n}\n\n.portlet.solid.yellow-crusta > .portlet-title,\n.portlet.solid.yellow-crusta > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.yellow-crusta > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.yellow-crusta > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.yellow-crusta > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.yellow-crusta > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.yellow-crusta > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.yellow-crusta > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.yellow-crusta > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.yellow-crusta > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.yellow-crusta {\n  border: 1px solid #ffd327;\n  border-top: 0;\n}\n.portlet.box.yellow-crusta > .portlet-title {\n  background-color: #f3c200;\n}\n.portlet.box.yellow-crusta > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.yellow-crusta > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.yellow-crusta > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #ffe064;\n  color: #ffe57e;\n}\n.portlet.box.yellow-crusta > .portlet-title > .actions .btn-default > i {\n  color: #ffe88d;\n}\n.portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #ffea97;\n  color: #ffefb1;\n}\n\n/* Statistic Block */\n.dashboard-stat.yellow-crusta {\n  background-color: #f3c200;\n}\n.dashboard-stat.yellow-crusta.dashboard-stat-light:hover {\n  background-color: #dfb200;\n}\n.dashboard-stat.yellow-crusta .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.yellow-crusta .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.yellow-crusta .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.yellow-crusta .more {\n  color: #FFFFFF;\n  background-color: #dfb200;\n}\n\n/* General Element */\n.bg-yellow-crusta {\n  border-color: #f3c200 !important;\n  background-image: none !important;\n  background-color: #f3c200 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-yellow-crusta {\n  color: #f3c200 !important;\n}\n\n.progress-bar.yellow-crusta {\n  background: #f3c200 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nYellow Lemon\n***/\n/* Button */\n.yellow-lemon.btn {\n  color: #FFFFFF;\n  background-color: #F7CA18;\n}\n.yellow-lemon.btn:hover, .yellow-lemon.btn:focus, .yellow-lemon.btn:active, .yellow-lemon.btn.active {\n  color: #FFFFFF;\n  background-color: #e3b708;\n}\n.open .yellow-lemon.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #e3b708;\n}\n.yellow-lemon.btn:active, .yellow-lemon.btn.active {\n  background-image: none;\n  background-color: #cba307;\n}\n.yellow-lemon.btn:active:hover, .yellow-lemon.btn.active:hover {\n  background-color: #d5ab07;\n}\n.open .yellow-lemon.btn.dropdown-toggle {\n  background-image: none;\n}\n.yellow-lemon.btn.disabled, .yellow-lemon.btn.disabled:hover, .yellow-lemon.btn.disabled:focus, .yellow-lemon.btn.disabled:active, .yellow-lemon.btn.disabled.active, .yellow-lemon.btn[disabled], .yellow-lemon.btn[disabled]:hover, .yellow-lemon.btn[disabled]:focus, .yellow-lemon.btn[disabled]:active, .yellow-lemon.btn[disabled].active, fieldset[disabled] .yellow-lemon.btn, fieldset[disabled] .yellow-lemon.btn:hover, fieldset[disabled] .yellow-lemon.btn:focus, fieldset[disabled] .yellow-lemon.btn:active, fieldset[disabled] .yellow-lemon.btn.active {\n  background-color: #F7CA18;\n}\n.yellow-lemon.btn .badge {\n  color: #F7CA18;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.yellow-lemon-stripe {\n  border-left: 3px solid #F7CA18;\n}\n\n/* Portlet */\n.portlet > .portlet-body.yellow-lemon,\n.portlet.yellow-lemon {\n  background-color: #F7CA18;\n}\n\n.portlet.solid.yellow-lemon > .portlet-title,\n.portlet.solid.yellow-lemon > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.yellow-lemon > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.yellow-lemon > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.yellow-lemon > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.yellow-lemon > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.yellow-lemon > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.yellow-lemon > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.yellow-lemon > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.yellow-lemon > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.yellow-lemon {\n  border: 1px solid #f9d549;\n  border-top: 0;\n}\n.portlet.box.yellow-lemon > .portlet-title {\n  background-color: #F7CA18;\n}\n.portlet.box.yellow-lemon > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.yellow-lemon > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.yellow-lemon > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #fbe384;\n  color: #fce99d;\n}\n.portlet.box.yellow-lemon > .portlet-title > .actions .btn-default > i {\n  color: #fcecac;\n}\n.portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #fceeb6;\n  color: #fdf4ce;\n}\n\n/* Statistic Block */\n.dashboard-stat.yellow-lemon {\n  background-color: #F7CA18;\n}\n.dashboard-stat.yellow-lemon.dashboard-stat-light:hover {\n  background-color: #f2c308;\n}\n.dashboard-stat.yellow-lemon .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.yellow-lemon .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.yellow-lemon .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.yellow-lemon .more {\n  color: #FFFFFF;\n  background-color: #f2c308;\n}\n\n/* General Element */\n.bg-yellow-lemon {\n  border-color: #F7CA18 !important;\n  background-image: none !important;\n  background-color: #F7CA18 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-yellow-lemon {\n  color: #F7CA18 !important;\n}\n\n.progress-bar.yellow-lemon {\n  background: #F7CA18 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nYellow Saffron\n***/\n/* Button */\n.yellow-saffron.btn {\n  color: #FFFFFF;\n  background-color: #F4D03F;\n}\n.yellow-saffron.btn:hover, .yellow-saffron.btn:focus, .yellow-saffron.btn:active, .yellow-saffron.btn.active {\n  color: #FFFFFF;\n  background-color: #f2c81d;\n}\n.open .yellow-saffron.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #f2c81d;\n}\n.yellow-saffron.btn:active, .yellow-saffron.btn.active {\n  background-image: none;\n  background-color: #e8bd0d;\n}\n.yellow-saffron.btn:active:hover, .yellow-saffron.btn.active:hover {\n  background-color: #f1c40f;\n}\n.open .yellow-saffron.btn.dropdown-toggle {\n  background-image: none;\n}\n.yellow-saffron.btn.disabled, .yellow-saffron.btn.disabled:hover, .yellow-saffron.btn.disabled:focus, .yellow-saffron.btn.disabled:active, .yellow-saffron.btn.disabled.active, .yellow-saffron.btn[disabled], .yellow-saffron.btn[disabled]:hover, .yellow-saffron.btn[disabled]:focus, .yellow-saffron.btn[disabled]:active, .yellow-saffron.btn[disabled].active, fieldset[disabled] .yellow-saffron.btn, fieldset[disabled] .yellow-saffron.btn:hover, fieldset[disabled] .yellow-saffron.btn:focus, fieldset[disabled] .yellow-saffron.btn:active, fieldset[disabled] .yellow-saffron.btn.active {\n  background-color: #F4D03F;\n}\n.yellow-saffron.btn .badge {\n  color: #F4D03F;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.yellow-saffron-stripe {\n  border-left: 3px solid #F4D03F;\n}\n\n/* Portlet */\n.portlet > .portlet-body.yellow-saffron,\n.portlet.yellow-saffron {\n  background-color: #F4D03F;\n}\n\n.portlet.solid.yellow-saffron > .portlet-title,\n.portlet.solid.yellow-saffron > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.yellow-saffron > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.yellow-saffron > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.yellow-saffron > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.yellow-saffron > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.yellow-saffron > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.yellow-saffron > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.yellow-saffron > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.yellow-saffron > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.yellow-saffron {\n  border: 1px solid #f7dc6f;\n  border-top: 0;\n}\n.portlet.box.yellow-saffron > .portlet-title {\n  background-color: #F4D03F;\n}\n.portlet.box.yellow-saffron > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.yellow-saffron > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.yellow-saffron > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #faeaa9;\n  color: #fbf0c1;\n}\n.portlet.box.yellow-saffron > .portlet-title > .actions .btn-default > i {\n  color: #fcf3d0;\n}\n.portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #fdf6d9;\n  color: #fefcf1;\n}\n\n/* Statistic Block */\n.dashboard-stat.yellow-saffron {\n  background-color: #F4D03F;\n}\n.dashboard-stat.yellow-saffron.dashboard-stat-light:hover {\n  background-color: #f3cb2c;\n}\n.dashboard-stat.yellow-saffron .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.yellow-saffron .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.yellow-saffron .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.yellow-saffron .more {\n  color: #FFFFFF;\n  background-color: #f3cb2c;\n}\n\n/* General Element */\n.bg-yellow-saffron {\n  border-color: #F4D03F !important;\n  background-image: none !important;\n  background-color: #F4D03F !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-yellow-saffron {\n  color: #F4D03F !important;\n}\n\n.progress-bar.yellow-saffron {\n  background: #F4D03F !important;\n  color: #FFFFFF !important;\n}\n\n/***********\nPurple Colors\n************/\n/***\nPurple Default\n***/\n/* Button */\n.purple.btn {\n  color: #FFFFFF;\n  background-color: #8e5fa2;\n}\n.purple.btn:hover, .purple.btn:focus, .purple.btn:active, .purple.btn.active {\n  color: #FFFFFF;\n  background-color: #7a518c;\n}\n.open .purple.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #7a518c;\n}\n.purple.btn:active, .purple.btn.active {\n  background-image: none;\n  background-color: #6c487c;\n}\n.purple.btn:active:hover, .purple.btn.active:hover {\n  background-color: #724c82;\n}\n.open .purple.btn.dropdown-toggle {\n  background-image: none;\n}\n.purple.btn.disabled, .purple.btn.disabled:hover, .purple.btn.disabled:focus, .purple.btn.disabled:active, .purple.btn.disabled.active, .purple.btn[disabled], .purple.btn[disabled]:hover, .purple.btn[disabled]:focus, .purple.btn[disabled]:active, .purple.btn[disabled].active, fieldset[disabled] .purple.btn, fieldset[disabled] .purple.btn:hover, fieldset[disabled] .purple.btn:focus, fieldset[disabled] .purple.btn:active, fieldset[disabled] .purple.btn.active {\n  background-color: #8e5fa2;\n}\n.purple.btn .badge {\n  color: #8e5fa2;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.purple-stripe {\n  border-left: 3px solid #8e5fa2;\n}\n\n/* Portlet */\n.portlet > .portlet-body.purple,\n.portlet.purple {\n  background-color: #8e5fa2;\n}\n\n.portlet.solid.purple > .portlet-title,\n.portlet.solid.purple > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.purple > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.purple > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.purple > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.purple > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.purple > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.purple > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.purple > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.purple > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.purple {\n  border: 1px solid #a57fb5;\n  border-top: 0;\n}\n.portlet.box.purple > .portlet-title {\n  background-color: #8e5fa2;\n}\n.portlet.box.purple > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.purple > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.purple > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #c0a6cb;\n  color: #ccb6d5;\n}\n.portlet.box.purple > .portlet-title > .actions .btn-default > i {\n  color: #d2c0da;\n}\n.portlet.box.purple > .portlet-title > .actions .btn-default:hover, .portlet.box.purple > .portlet-title > .actions .btn-default:focus, .portlet.box.purple > .portlet-title > .actions .btn-default:active, .portlet.box.purple > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #d7c6de;\n  color: #e2d6e7;\n}\n\n/* Statistic Block */\n.dashboard-stat.purple {\n  background-color: #8e5fa2;\n}\n.dashboard-stat.purple.dashboard-stat-light:hover {\n  background-color: #835796;\n}\n.dashboard-stat.purple .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.purple .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.purple .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.purple .more {\n  color: #FFFFFF;\n  background-color: #835796;\n}\n\n/* General Element */\n.bg-purple {\n  border-color: #8e5fa2 !important;\n  background-image: none !important;\n  background-color: #8e5fa2 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-purple {\n  color: #8e5fa2 !important;\n}\n\n.progress-bar.purple {\n  background: #8e5fa2 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nPurple Plum\n***/\n/* Button */\n.purple-plum.btn {\n  color: #FFFFFF;\n  background-color: #8775a7;\n}\n.purple-plum.btn:hover, .purple-plum.btn:focus, .purple-plum.btn:active, .purple-plum.btn.active {\n  color: #FFFFFF;\n  background-color: #746198;\n}\n.open .purple-plum.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #746198;\n}\n.purple-plum.btn:active, .purple-plum.btn.active {\n  background-image: none;\n  background-color: #685788;\n}\n.purple-plum.btn:active:hover, .purple-plum.btn.active:hover {\n  background-color: #6d5b8e;\n}\n.open .purple-plum.btn.dropdown-toggle {\n  background-image: none;\n}\n.purple-plum.btn.disabled, .purple-plum.btn.disabled:hover, .purple-plum.btn.disabled:focus, .purple-plum.btn.disabled:active, .purple-plum.btn.disabled.active, .purple-plum.btn[disabled], .purple-plum.btn[disabled]:hover, .purple-plum.btn[disabled]:focus, .purple-plum.btn[disabled]:active, .purple-plum.btn[disabled].active, fieldset[disabled] .purple-plum.btn, fieldset[disabled] .purple-plum.btn:hover, fieldset[disabled] .purple-plum.btn:focus, fieldset[disabled] .purple-plum.btn:active, fieldset[disabled] .purple-plum.btn.active {\n  background-color: #8775a7;\n}\n.purple-plum.btn .badge {\n  color: #8775a7;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.purple-plum-stripe {\n  border-left: 3px solid #8775a7;\n}\n\n/* Portlet */\n.portlet > .portlet-body.purple-plum,\n.portlet.purple-plum {\n  background-color: #8775a7;\n}\n\n.portlet.solid.purple-plum > .portlet-title,\n.portlet.solid.purple-plum > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.purple-plum > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.purple-plum > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.purple-plum > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.purple-plum > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.purple-plum > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.purple-plum > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.purple-plum > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.purple-plum > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.purple-plum {\n  border: 1px solid #a294bb;\n  border-top: 0;\n}\n.portlet.box.purple-plum > .portlet-title {\n  background-color: #8775a7;\n}\n.portlet.box.purple-plum > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.purple-plum > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.purple-plum > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #c3bad3;\n  color: #d0c9dd;\n}\n.portlet.box.purple-plum > .portlet-title > .actions .btn-default > i {\n  color: #d8d2e3;\n}\n.portlet.box.purple-plum > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-plum > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-plum > .portlet-title > .actions .btn-default:active, .portlet.box.purple-plum > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #ded9e7;\n  color: #ebe8f0;\n}\n\n/* Statistic Block */\n.dashboard-stat.purple-plum {\n  background-color: #8775a7;\n}\n.dashboard-stat.purple-plum.dashboard-stat-light:hover {\n  background-color: #7c699f;\n}\n.dashboard-stat.purple-plum .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.purple-plum .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.purple-plum .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.purple-plum .more {\n  color: #FFFFFF;\n  background-color: #7c699f;\n}\n\n/* General Element */\n.bg-purple-plum {\n  border-color: #8775a7 !important;\n  background-image: none !important;\n  background-color: #8775a7 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-purple-plum {\n  color: #8775a7 !important;\n}\n\n.progress-bar.purple-plum {\n  background: #8775a7 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nPurple Medium\n***/\n/* Button */\n.purple-medium.btn {\n  color: #FFFFFF;\n  background-color: #BF55EC;\n}\n.purple-medium.btn:hover, .purple-medium.btn:focus, .purple-medium.btn:active, .purple-medium.btn.active {\n  color: #FFFFFF;\n  background-color: #b335e8;\n}\n.open .purple-medium.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #b335e8;\n}\n.purple-medium.btn:active, .purple-medium.btn.active {\n  background-image: none;\n  background-color: #aa1ee6;\n}\n.purple-medium.btn:active:hover, .purple-medium.btn.active:hover {\n  background-color: #ae27e7;\n}\n.open .purple-medium.btn.dropdown-toggle {\n  background-image: none;\n}\n.purple-medium.btn.disabled, .purple-medium.btn.disabled:hover, .purple-medium.btn.disabled:focus, .purple-medium.btn.disabled:active, .purple-medium.btn.disabled.active, .purple-medium.btn[disabled], .purple-medium.btn[disabled]:hover, .purple-medium.btn[disabled]:focus, .purple-medium.btn[disabled]:active, .purple-medium.btn[disabled].active, fieldset[disabled] .purple-medium.btn, fieldset[disabled] .purple-medium.btn:hover, fieldset[disabled] .purple-medium.btn:focus, fieldset[disabled] .purple-medium.btn:active, fieldset[disabled] .purple-medium.btn.active {\n  background-color: #BF55EC;\n}\n.purple-medium.btn .badge {\n  color: #BF55EC;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.purple-medium-stripe {\n  border-left: 3px solid #BF55EC;\n}\n\n/* Portlet */\n.portlet > .portlet-body.purple-medium,\n.portlet.purple-medium {\n  background-color: #BF55EC;\n}\n\n.portlet.solid.purple-medium > .portlet-title,\n.portlet.solid.purple-medium > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.purple-medium > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.purple-medium > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.purple-medium > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.purple-medium > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.purple-medium > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.purple-medium > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.purple-medium > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.purple-medium > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.purple-medium {\n  border: 1px solid #d083f1;\n  border-top: 0;\n}\n.portlet.box.purple-medium > .portlet-title {\n  background-color: #BF55EC;\n}\n.portlet.box.purple-medium > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.purple-medium > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.purple-medium > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #e5baf7;\n  color: #eed1fa;\n}\n.portlet.box.purple-medium > .portlet-title > .actions .btn-default > i {\n  color: #f3dffb;\n}\n.portlet.box.purple-medium > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-medium > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-medium > .portlet-title > .actions .btn-default:active, .portlet.box.purple-medium > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #f6e8fc;\n  color: white;\n}\n\n/* Statistic Block */\n.dashboard-stat.purple-medium {\n  background-color: #BF55EC;\n}\n.dashboard-stat.purple-medium.dashboard-stat-light:hover {\n  background-color: #b843ea;\n}\n.dashboard-stat.purple-medium .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.purple-medium .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.purple-medium .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.purple-medium .more {\n  color: #FFFFFF;\n  background-color: #b843ea;\n}\n\n/* General Element */\n.bg-purple-medium {\n  border-color: #BF55EC !important;\n  background-image: none !important;\n  background-color: #BF55EC !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-purple-medium {\n  color: #BF55EC !important;\n}\n\n.progress-bar.purple-medium {\n  background: #BF55EC !important;\n  color: #FFFFFF !important;\n}\n\n/***\nPurple Studio\n***/\n/* Button */\n.purple-studio.btn {\n  color: #FFFFFF;\n  background-color: #8E44AD;\n}\n.purple-studio.btn:hover, .purple-studio.btn:focus, .purple-studio.btn:active, .purple-studio.btn.active {\n  color: #FFFFFF;\n  background-color: #793a93;\n}\n.open .purple-studio.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #793a93;\n}\n.purple-studio.btn:active, .purple-studio.btn.active {\n  background-image: none;\n  background-color: #6a3381;\n}\n.purple-studio.btn:active:hover, .purple-studio.btn.active:hover {\n  background-color: #703688;\n}\n.open .purple-studio.btn.dropdown-toggle {\n  background-image: none;\n}\n.purple-studio.btn.disabled, .purple-studio.btn.disabled:hover, .purple-studio.btn.disabled:focus, .purple-studio.btn.disabled:active, .purple-studio.btn.disabled.active, .purple-studio.btn[disabled], .purple-studio.btn[disabled]:hover, .purple-studio.btn[disabled]:focus, .purple-studio.btn[disabled]:active, .purple-studio.btn[disabled].active, fieldset[disabled] .purple-studio.btn, fieldset[disabled] .purple-studio.btn:hover, fieldset[disabled] .purple-studio.btn:focus, fieldset[disabled] .purple-studio.btn:active, fieldset[disabled] .purple-studio.btn.active {\n  background-color: #8E44AD;\n}\n.purple-studio.btn .badge {\n  color: #8E44AD;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.purple-studio-stripe {\n  border-left: 3px solid #8E44AD;\n}\n\n/* Portlet */\n.portlet > .portlet-body.purple-studio,\n.portlet.purple-studio {\n  background-color: #8E44AD;\n}\n\n.portlet.solid.purple-studio > .portlet-title,\n.portlet.solid.purple-studio > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.purple-studio > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.purple-studio > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.purple-studio > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.purple-studio > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.purple-studio > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.purple-studio > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.purple-studio > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.purple-studio > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.purple-studio {\n  border: 1px solid #a563c1;\n  border-top: 0;\n}\n.portlet.box.purple-studio > .portlet-title {\n  background-color: #8E44AD;\n}\n.portlet.box.purple-studio > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.purple-studio > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.purple-studio > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #bf8ed3;\n  color: #c9a1da;\n}\n.portlet.box.purple-studio > .portlet-title > .actions .btn-default > i {\n  color: #cfacde;\n}\n.portlet.box.purple-studio > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-studio > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-studio > .portlet-title > .actions .btn-default:active, .portlet.box.purple-studio > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #d4b3e1;\n  color: #dec5e8;\n}\n\n/* Statistic Block */\n.dashboard-stat.purple-studio {\n  background-color: #8E44AD;\n}\n.dashboard-stat.purple-studio.dashboard-stat-light:hover {\n  background-color: #823e9e;\n}\n.dashboard-stat.purple-studio .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.purple-studio .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.purple-studio .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.purple-studio .more {\n  color: #FFFFFF;\n  background-color: #823e9e;\n}\n\n/* General Element */\n.bg-purple-studio {\n  border-color: #8E44AD !important;\n  background-image: none !important;\n  background-color: #8E44AD !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-purple-studio {\n  color: #8E44AD !important;\n}\n\n.progress-bar.purple-studio {\n  background: #8E44AD !important;\n  color: #FFFFFF !important;\n}\n\n/***\nPurple Wisteria\n***/\n/* Button */\n.purple-wisteria.btn {\n  color: #FFFFFF;\n  background-color: #9B59B6;\n}\n.purple-wisteria.btn:hover, .purple-wisteria.btn:focus, .purple-wisteria.btn:active, .purple-wisteria.btn.active {\n  color: #FFFFFF;\n  background-color: #8948a3;\n}\n.open .purple-wisteria.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #8948a3;\n}\n.purple-wisteria.btn:active, .purple-wisteria.btn.active {\n  background-image: none;\n  background-color: #7a4092;\n}\n.purple-wisteria.btn:active:hover, .purple-wisteria.btn.active:hover {\n  background-color: #804399;\n}\n.open .purple-wisteria.btn.dropdown-toggle {\n  background-image: none;\n}\n.purple-wisteria.btn.disabled, .purple-wisteria.btn.disabled:hover, .purple-wisteria.btn.disabled:focus, .purple-wisteria.btn.disabled:active, .purple-wisteria.btn.disabled.active, .purple-wisteria.btn[disabled], .purple-wisteria.btn[disabled]:hover, .purple-wisteria.btn[disabled]:focus, .purple-wisteria.btn[disabled]:active, .purple-wisteria.btn[disabled].active, fieldset[disabled] .purple-wisteria.btn, fieldset[disabled] .purple-wisteria.btn:hover, fieldset[disabled] .purple-wisteria.btn:focus, fieldset[disabled] .purple-wisteria.btn:active, fieldset[disabled] .purple-wisteria.btn.active {\n  background-color: #9B59B6;\n}\n.purple-wisteria.btn .badge {\n  color: #9B59B6;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.purple-wisteria-stripe {\n  border-left: 3px solid #9B59B6;\n}\n\n/* Portlet */\n.portlet > .portlet-body.purple-wisteria,\n.portlet.purple-wisteria {\n  background-color: #9B59B6;\n}\n\n.portlet.solid.purple-wisteria > .portlet-title,\n.portlet.solid.purple-wisteria > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.purple-wisteria > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.purple-wisteria > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.purple-wisteria > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.purple-wisteria > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.purple-wisteria > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.purple-wisteria > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.purple-wisteria > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.purple-wisteria > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.purple-wisteria {\n  border: 1px solid #b07cc6;\n  border-top: 0;\n}\n.portlet.box.purple-wisteria > .portlet-title {\n  background-color: #9B59B6;\n}\n.portlet.box.purple-wisteria > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.purple-wisteria > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.purple-wisteria > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #caa7d8;\n  color: #d5b9e0;\n}\n.portlet.box.purple-wisteria > .portlet-title > .actions .btn-default > i {\n  color: #dbc3e5;\n}\n.portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:active, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #dfcae8;\n  color: #eadcf0;\n}\n\n/* Statistic Block */\n.dashboard-stat.purple-wisteria {\n  background-color: #9B59B6;\n}\n.dashboard-stat.purple-wisteria.dashboard-stat-light:hover {\n  background-color: #924dae;\n}\n.dashboard-stat.purple-wisteria .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.purple-wisteria .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.purple-wisteria .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.purple-wisteria .more {\n  color: #FFFFFF;\n  background-color: #924dae;\n}\n\n/* General Element */\n.bg-purple-wisteria {\n  border-color: #9B59B6 !important;\n  background-image: none !important;\n  background-color: #9B59B6 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-purple-wisteria {\n  color: #9B59B6 !important;\n}\n\n.progress-bar.purple-wisteria {\n  background: #9B59B6 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nPurple Seance\n***/\n/* Button */\n.purple-seance.btn {\n  color: #FFFFFF;\n  background-color: #9A12B3;\n}\n.purple-seance.btn:hover, .purple-seance.btn:focus, .purple-seance.btn:active, .purple-seance.btn.active {\n  color: #FFFFFF;\n  background-color: #7e0f93;\n}\n.open .purple-seance.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #7e0f93;\n}\n.purple-seance.btn:active, .purple-seance.btn.active {\n  background-image: none;\n  background-color: #6a0c7b;\n}\n.purple-seance.btn:active:hover, .purple-seance.btn.active:hover {\n  background-color: #720d85;\n}\n.open .purple-seance.btn.dropdown-toggle {\n  background-image: none;\n}\n.purple-seance.btn.disabled, .purple-seance.btn.disabled:hover, .purple-seance.btn.disabled:focus, .purple-seance.btn.disabled:active, .purple-seance.btn.disabled.active, .purple-seance.btn[disabled], .purple-seance.btn[disabled]:hover, .purple-seance.btn[disabled]:focus, .purple-seance.btn[disabled]:active, .purple-seance.btn[disabled].active, fieldset[disabled] .purple-seance.btn, fieldset[disabled] .purple-seance.btn:hover, fieldset[disabled] .purple-seance.btn:focus, fieldset[disabled] .purple-seance.btn:active, fieldset[disabled] .purple-seance.btn.active {\n  background-color: #9A12B3;\n}\n.purple-seance.btn .badge {\n  color: #9A12B3;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.purple-seance-stripe {\n  border-left: 3px solid #9A12B3;\n}\n\n/* Portlet */\n.portlet > .portlet-body.purple-seance,\n.portlet.purple-seance {\n  background-color: #9A12B3;\n}\n\n.portlet.solid.purple-seance > .portlet-title,\n.portlet.solid.purple-seance > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.purple-seance > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.purple-seance > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.purple-seance > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.purple-seance > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.purple-seance > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.purple-seance > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.purple-seance > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.purple-seance > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.purple-seance {\n  border: 1px solid #c217e1;\n  border-top: 0;\n}\n.portlet.box.purple-seance > .portlet-title {\n  background-color: #9A12B3;\n}\n.portlet.box.purple-seance > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.purple-seance > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.purple-seance > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #d349ed;\n  color: #d960ef;\n}\n.portlet.box.purple-seance > .portlet-title > .actions .btn-default > i {\n  color: #dc6ef0;\n}\n.portlet.box.purple-seance > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-seance > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-seance > .portlet-title > .actions .btn-default:active, .portlet.box.purple-seance > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #de77f1;\n  color: #e48ef4;\n}\n\n/* Statistic Block */\n.dashboard-stat.purple-seance {\n  background-color: #9A12B3;\n}\n.dashboard-stat.purple-seance.dashboard-stat-light:hover {\n  background-color: #8a10a0;\n}\n.dashboard-stat.purple-seance .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.purple-seance .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.purple-seance .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.purple-seance .more {\n  color: #FFFFFF;\n  background-color: #8a10a0;\n}\n\n/* General Element */\n.bg-purple-seance {\n  border-color: #9A12B3 !important;\n  background-image: none !important;\n  background-color: #9A12B3 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-purple-seance {\n  color: #9A12B3 !important;\n}\n\n.progress-bar.purple-seance {\n  background: #9A12B3 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nPurple Intense\n***/\n/* Button */\n.purple-intense.btn {\n  color: #FFFFFF;\n  background-color: #8775a7;\n}\n.purple-intense.btn:hover, .purple-intense.btn:focus, .purple-intense.btn:active, .purple-intense.btn.active {\n  color: #FFFFFF;\n  background-color: #746198;\n}\n.open .purple-intense.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #746198;\n}\n.purple-intense.btn:active, .purple-intense.btn.active {\n  background-image: none;\n  background-color: #685788;\n}\n.purple-intense.btn:active:hover, .purple-intense.btn.active:hover {\n  background-color: #6d5b8e;\n}\n.open .purple-intense.btn.dropdown-toggle {\n  background-image: none;\n}\n.purple-intense.btn.disabled, .purple-intense.btn.disabled:hover, .purple-intense.btn.disabled:focus, .purple-intense.btn.disabled:active, .purple-intense.btn.disabled.active, .purple-intense.btn[disabled], .purple-intense.btn[disabled]:hover, .purple-intense.btn[disabled]:focus, .purple-intense.btn[disabled]:active, .purple-intense.btn[disabled].active, fieldset[disabled] .purple-intense.btn, fieldset[disabled] .purple-intense.btn:hover, fieldset[disabled] .purple-intense.btn:focus, fieldset[disabled] .purple-intense.btn:active, fieldset[disabled] .purple-intense.btn.active {\n  background-color: #8775a7;\n}\n.purple-intense.btn .badge {\n  color: #8775a7;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.purple-intense-stripe {\n  border-left: 3px solid #8775a7;\n}\n\n/* Portlet */\n.portlet > .portlet-body.purple-intense,\n.portlet.purple-intense {\n  background-color: #8775a7;\n}\n\n.portlet.solid.purple-intense > .portlet-title,\n.portlet.solid.purple-intense > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.purple-intense > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.purple-intense > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.purple-intense > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.purple-intense > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.purple-intense > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.purple-intense > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.purple-intense > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.purple-intense > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.purple-intense {\n  border: 1px solid #a294bb;\n  border-top: 0;\n}\n.portlet.box.purple-intense > .portlet-title {\n  background-color: #8775a7;\n}\n.portlet.box.purple-intense > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.purple-intense > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.purple-intense > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #c3bad3;\n  color: #d0c9dd;\n}\n.portlet.box.purple-intense > .portlet-title > .actions .btn-default > i {\n  color: #d8d2e3;\n}\n.portlet.box.purple-intense > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-intense > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-intense > .portlet-title > .actions .btn-default:active, .portlet.box.purple-intense > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #ded9e7;\n  color: #ebe8f0;\n}\n\n/* Statistic Block */\n.dashboard-stat.purple-intense {\n  background-color: #8775a7;\n}\n.dashboard-stat.purple-intense.dashboard-stat-light:hover {\n  background-color: #7c699f;\n}\n.dashboard-stat.purple-intense .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.purple-intense .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.purple-intense .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.purple-intense .more {\n  color: #FFFFFF;\n  background-color: #7c699f;\n}\n\n/* General Element */\n.bg-purple-intense {\n  border-color: #8775a7 !important;\n  background-image: none !important;\n  background-color: #8775a7 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-purple-intense {\n  color: #8775a7 !important;\n}\n\n.progress-bar.purple-intense {\n  background: #8775a7 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nPurple Sharp\n***/\n/* Button */\n.purple-sharp.btn {\n  color: #FFFFFF;\n  background-color: #796799;\n}\n.purple-sharp.btn:hover, .purple-sharp.btn:focus, .purple-sharp.btn:active, .purple-sharp.btn.active {\n  color: #FFFFFF;\n  background-color: #685884;\n}\n.open .purple-sharp.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #685884;\n}\n.purple-sharp.btn:active, .purple-sharp.btn.active {\n  background-image: none;\n  background-color: #5c4e75;\n}\n.purple-sharp.btn:active:hover, .purple-sharp.btn.active:hover {\n  background-color: #61527b;\n}\n.open .purple-sharp.btn.dropdown-toggle {\n  background-image: none;\n}\n.purple-sharp.btn.disabled, .purple-sharp.btn.disabled:hover, .purple-sharp.btn.disabled:focus, .purple-sharp.btn.disabled:active, .purple-sharp.btn.disabled.active, .purple-sharp.btn[disabled], .purple-sharp.btn[disabled]:hover, .purple-sharp.btn[disabled]:focus, .purple-sharp.btn[disabled]:active, .purple-sharp.btn[disabled].active, fieldset[disabled] .purple-sharp.btn, fieldset[disabled] .purple-sharp.btn:hover, fieldset[disabled] .purple-sharp.btn:focus, fieldset[disabled] .purple-sharp.btn:active, fieldset[disabled] .purple-sharp.btn.active {\n  background-color: #796799;\n}\n.purple-sharp.btn .badge {\n  color: #796799;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.purple-sharp-stripe {\n  border-left: 3px solid #796799;\n}\n\n/* Portlet */\n.portlet > .portlet-body.purple-sharp,\n.portlet.purple-sharp {\n  background-color: #796799;\n}\n\n.portlet.solid.purple-sharp > .portlet-title,\n.portlet.solid.purple-sharp > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.purple-sharp > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.purple-sharp > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.purple-sharp > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.purple-sharp > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.purple-sharp > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.purple-sharp > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.purple-sharp > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.purple-sharp > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.purple-sharp {\n  border: 1px solid #9486ad;\n  border-top: 0;\n}\n.portlet.box.purple-sharp > .portlet-title {\n  background-color: #796799;\n}\n.portlet.box.purple-sharp > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.purple-sharp > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.purple-sharp > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #b4aac6;\n  color: #c2b9d0;\n}\n.portlet.box.purple-sharp > .portlet-title > .actions .btn-default > i {\n  color: #cac3d6;\n}\n.portlet.box.purple-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #cfc9db;\n  color: #ddd8e5;\n}\n\n/* Statistic Block */\n.dashboard-stat.purple-sharp {\n  background-color: #796799;\n}\n.dashboard-stat.purple-sharp.dashboard-stat-light:hover {\n  background-color: #6f5f8d;\n}\n.dashboard-stat.purple-sharp .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.purple-sharp .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.purple-sharp .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.purple-sharp .more {\n  color: #FFFFFF;\n  background-color: #6f5f8d;\n}\n\n/* General Element */\n.bg-purple-sharp {\n  border-color: #796799 !important;\n  background-image: none !important;\n  background-color: #796799 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-purple-sharp {\n  color: #796799 !important;\n}\n\n.progress-bar.purple-sharp {\n  background: #796799 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nPurple Soft\n***/\n/* Button */\n.purple-soft.btn {\n  color: #FFFFFF;\n  background-color: #8877a9;\n}\n.purple-soft.btn:hover, .purple-soft.btn:focus, .purple-soft.btn:active, .purple-soft.btn.active {\n  color: #FFFFFF;\n  background-color: #75629b;\n}\n.open .purple-soft.btn.dropdown-toggle {\n  color: #FFFFFF;\n  background-color: #75629b;\n}\n.purple-soft.btn:active, .purple-soft.btn.active {\n  background-image: none;\n  background-color: #69588b;\n}\n.purple-soft.btn:active:hover, .purple-soft.btn.active:hover {\n  background-color: #6e5c91;\n}\n.open .purple-soft.btn.dropdown-toggle {\n  background-image: none;\n}\n.purple-soft.btn.disabled, .purple-soft.btn.disabled:hover, .purple-soft.btn.disabled:focus, .purple-soft.btn.disabled:active, .purple-soft.btn.disabled.active, .purple-soft.btn[disabled], .purple-soft.btn[disabled]:hover, .purple-soft.btn[disabled]:focus, .purple-soft.btn[disabled]:active, .purple-soft.btn[disabled].active, fieldset[disabled] .purple-soft.btn, fieldset[disabled] .purple-soft.btn:hover, fieldset[disabled] .purple-soft.btn:focus, fieldset[disabled] .purple-soft.btn:active, fieldset[disabled] .purple-soft.btn.active {\n  background-color: #8877a9;\n}\n.purple-soft.btn .badge {\n  color: #8877a9;\n  background-color: #FFFFFF;\n}\n\n/* Button Strip */\n.btn.purple-soft-stripe {\n  border-left: 3px solid #8877a9;\n}\n\n/* Portlet */\n.portlet > .portlet-body.purple-soft,\n.portlet.purple-soft {\n  background-color: #8877a9;\n}\n\n.portlet.solid.purple-soft > .portlet-title,\n.portlet.solid.purple-soft > .portlet-body {\n  border: 0;\n  color: #FFFFFF;\n}\n.portlet.solid.purple-soft > .portlet-title > .caption {\n  font-weight: 400;\n}\n.portlet.solid.purple-soft > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.solid.purple-soft > .portlet-title > .tools > a.remove {\n  background-image: url(../img/portlet-remove-icon-white.png);\n}\n.portlet.solid.purple-soft > .portlet-title > .tools > a.config {\n  background-image: url(../img/portlet-config-icon-white.png);\n}\n.portlet.solid.purple-soft > .portlet-title > .tools > a.reload {\n  background-image: url(../img/portlet-reload-icon-white.png);\n}\n.portlet.solid.purple-soft > .portlet-title > .tools > a.expand {\n  background-image: url(../img/portlet-expand-icon-white.png);\n}\n.portlet.solid.purple-soft > .portlet-title > .tools > a.collapse {\n  background-image: url(../img/portlet-collapse-icon-white.png);\n}\n.portlet.solid.purple-soft > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd;\n}\n\n.portlet.box.purple-soft {\n  border: 1px solid #a396bd;\n  border-top: 0;\n}\n.portlet.box.purple-soft > .portlet-title {\n  background-color: #8877a9;\n}\n.portlet.box.purple-soft > .portlet-title > .caption {\n  color: #FFFFFF;\n}\n.portlet.box.purple-soft > .portlet-title > .caption > i {\n  color: #FFFFFF;\n}\n.portlet.box.purple-soft > .portlet-title > .actions .btn-default {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: 1px solid #c4bcd4;\n  color: #d2cbde;\n}\n.portlet.box.purple-soft > .portlet-title > .actions .btn-default > i {\n  color: #dad5e4;\n}\n.portlet.box.purple-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-soft > .portlet-title > .actions .btn-default:active, .portlet.box.purple-soft > .portlet-title > .actions .btn-default.active {\n  border: 1px solid #dfdbe8;\n  color: #edebf2;\n}\n\n/* Statistic Block */\n.dashboard-stat.purple-soft {\n  background-color: #8877a9;\n}\n.dashboard-stat.purple-soft.dashboard-stat-light:hover {\n  background-color: #7d6ba1;\n}\n.dashboard-stat.purple-soft .visual > i {\n  color: #FFFFFF;\n  opacity: 0.1;\n  filter: alpha(opacity=10);\n}\n.dashboard-stat.purple-soft .details .number {\n  color: #FFFFFF;\n}\n.dashboard-stat.purple-soft .details .desc {\n  color: #FFFFFF;\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.dashboard-stat.purple-soft .more {\n  color: #FFFFFF;\n  background-color: #7d6ba1;\n}\n\n/* General Element */\n.bg-purple-soft {\n  border-color: #8877a9 !important;\n  background-image: none !important;\n  background-color: #8877a9 !important;\n  color: #FFFFFF !important;\n}\n\n/* General Text & Icon Font Colors */\n.font-purple-soft {\n  color: #8877a9 !important;\n}\n\n.progress-bar.purple-soft {\n  background: #8877a9 !important;\n  color: #FFFFFF !important;\n}\n\n/***\nTransparent Button\n***/\n.btn-transparent.btn {\n  background: transparent;\n  color: #888;\n}\n.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }\n.ui-timepicker-div dl { text-align: left; }\n.ui-timepicker-div dl dt { float: left; clear:left; padding: 0 0 0 5px; }\n.ui-timepicker-div dl dd { margin: 0 10px 10px 40%; }\n.ui-timepicker-div td { font-size: 90%; }\n.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }\n.ui-timepicker-div .ui_tpicker_unit_hide{ display: none; }\n\n.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input { background: none; color: inherit; border: none; outline: none; border-bottom: solid 1px #555; width: 95%; }\n.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input:focus { border-bottom-color: #aaa; }\n\n.ui-timepicker-rtl{ direction: rtl; }\n.ui-timepicker-rtl dl { text-align: right; padding: 0 5px 0 0; }\n.ui-timepicker-rtl dl dt{ float: right; clear: right; }\n.ui-timepicker-rtl dl dd { margin: 0 40% 10px 10px; }\n\n/* Shortened version style */\n.ui-timepicker-div.ui-timepicker-oneLine { padding-right: 2px; }\n.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time,\n.ui-timepicker-div.ui-timepicker-oneLine dt { display: none; }\n.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time_label { display: block; padding-top: 2px; }\n.ui-timepicker-div.ui-timepicker-oneLine dl { text-align: right; }\n.ui-timepicker-div.ui-timepicker-oneLine dl dd,\n.ui-timepicker-div.ui-timepicker-oneLine dl dd > div { display:inline-block; margin:0; }\n.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_minute:before,\n.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second:before { content:':'; display:inline-block; }\n.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec:before,\n.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec:before { content:'.'; display:inline-block; }\n.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide,\n.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide:before{ display: none; }"
  },
  {
    "path": "public/quickadmin/css/quickadmin-layout.css",
    "content": "@media print {\n    body {\n        background-color: #fff !important;\n    }\n\n    .page-bar {\n        display: none;\n    }\n\n    .page-sidebar-wrapper {\n        display: none;\n    }\n\n    .page-quick-sidebar-wrapper {\n        display: none;\n    }\n\n    .theme-panel {\n        display: none;\n    }\n\n    .hidden-print {\n        display: none;\n    }\n\n    .page-footer {\n        display: none;\n    }\n\n    .no-page-break {\n        page-break-after: avoid;\n    }\n\n    .page-container {\n        margin: 0px !important;\n        padding: 0px !important;\n    }\n\n    .page-content {\n        padding: 0 !important;\n        min-height: 300px !important;\n        padding: 0px 20px 20px !important;\n        margin: 0 !important;\n    }\n}\n\n/***\nPage Header\n***/\n.page-header.navbar {\n    width: 100%;\n    padding: 0 20px 0 20px;\n    margin: 0;\n    border: 0px;\n    padding: 0px;\n    box-shadow: none;\n    height: 46px;\n    min-height: 46px;\n    filter: none;\n    background-image: none;\n    /* Fixed header */\n    /* Header logo */\n    /* Search box */\n    /* Menu Toggler */\n    /* Top menu */\n}\n\n.page-header.navbar.navbar-fixed-top {\n    z-index: 9995;\n}\n\n.page-header.navbar.navbar-static-top {\n    z-index: 9995;\n}\n\n.page-header.navbar .page-logo {\n    float: left;\n    display: block;\n    width: 235px;\n    height: 46px;\n    padding-left: 20px;\n    padding-right: 20px;\n}\n\n.page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo {\n    padding: 0;\n}\n\n.page-header.navbar .page-logo > .logo-image,\n.page-header.navbar .page-logo > a {\n    display: inline-block;\n    float: left;\n}\n\n.page-header.navbar .page-logo .logo-default {\n    margin: 16px 0 0 0;\n}\n\n.page-header.navbar .page-logo .logo-mini {\n    display: none;\n    margin-left: 5px;\n}\n\n.page-header.navbar .page-logo .text-logo {\n    padding-left: 20px;\n    padding-top: 12px;\n}\n\n.page-header.navbar .search-form {\n    display: inline-block;\n    width: 46px;\n    position: relative;\n    float: left;\n    transition: all 0.6s;\n}\n\n.page-header.navbar .search-form .input-group .form-control {\n    height: 46px;\n    border: 0;\n    background: transparent !important;\n    font-size: 13px;\n    padding-left: 0;\n    margin-left: 12px;\n    text-indent: -150000px;\n}\n\n.page-header.navbar .search-form .input-group .form-control:hover {\n    cursor: pointer;\n}\n\n.page-header.navbar .search-form .input-group .input-group-btn {\n    height: 46px;\n}\n\n.page-header.navbar .search-form .input-group .input-group-btn .btn.submit {\n    margin-left: -24px;\n    padding: 0;\n    width: 46px;\n    background: none;\n    margin-top: 4px;\n    display: block;\n}\n\n.page-header.navbar .search-form .input-group .input-group-btn .btn.submit > i {\n    font-size: 15px;\n}\n\n.page-header.navbar .search-form.open {\n    transition: all 0.6s;\n    width: 300px !important;\n}\n\n.page-header.navbar .search-form.open .input-group .form-control {\n    text-indent: 0;\n}\n\n.page-header.navbar .search-form.open .input-group .form-control:hover {\n    cursor: text;\n}\n\n.page-header.navbar .search-form.open .input-group .input-group-btn .btn.submit {\n    margin-left: 0;\n}\n\n.page-header.navbar .menu-toggler {\n    display: block;\n    cursor: pointer;\n    opacity: 0.7;\n    filter: alpha(opacity=70);\n    width: 24px;\n    height: 24px;\n    background-repeat: no-repeat;\n    background-position: center center;\n}\n\n.page-header.navbar .menu-toggler:hover {\n    filter: alpha(opacity=100);\n    opacity: 1;\n}\n\n.page-header.navbar .menu-toggler.sidebar-toggler {\n    float: right;\n    margin: 11px 0 0 0;\n}\n\n.page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .menu-toggler.sidebar-toggler {\n    margin-right: 10.5px;\n}\n\n.page-header.navbar .menu-toggler.responsive-toggler {\n    display: none;\n    float: right;\n    margin: 11px 6px 0 6px;\n}\n\n.page-header.navbar .top-menu {\n    margin: 0;\n    padding: 0;\n    float: right;\n}\n\n.page-header.navbar .top-menu .navbar-nav {\n    padding: 0;\n    margin-right: 20px;\n    display: block;\n    /* Extended Dropdowns */\n    /* Notification */\n    /* Inbox */\n    /* Tasks */\n    /* User */\n    /* Language */\n    /* Dark version */\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown {\n    margin: 0px;\n    padding: 0px 4px;\n    height: 46px;\n    display: inline-block;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown:last-child {\n    padding-right: 0px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle {\n    margin: 0px;\n    padding: 17px 10px 9px 10px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle:last-child {\n    padding-right: 0;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle > i {\n    font-size: 17px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle > i.glyphicon {\n    font-size: 16px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle > .badge {\n    font-family: \"Open Sans\", sans-serif;\n    position: absolute;\n    top: 10px;\n    right: 20px;\n    font-weight: 300;\n    padding: 3px 6px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle:focus {\n    background: none;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu {\n    margin-top: 3px;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu:before {\n    position: absolute;\n    top: -7px;\n    right: 9px;\n    display: inline-block !important;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid #eee;\n    border-left: 7px solid transparent;\n    border-bottom-color: rgba(0, 0, 0, 0.2);\n    content: '';\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu:after {\n    position: absolute;\n    top: -6px;\n    right: 10px;\n    display: inline-block !important;\n    border-right: 6px solid transparent;\n    border-bottom: 6px solid #fff;\n    border-left: 6px solid transparent;\n    content: '';\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu > li > a {\n    color: #555;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu {\n    min-width: 160px;\n    max-width: 275px;\n    width: 275px;\n    z-index: 9995;\n    /* header notifications dropdowns */\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external {\n    display: block;\n    overflow: hidden;\n    padding: 15px 15px;\n    letter-spacing: 0.5px;\n    -webkit-border-radius: 4px 4px 0 0;\n    -moz-border-radius: 4px 4px 0 0;\n    -ms-border-radius: 4px 4px 0 0;\n    -o-border-radius: 4px 4px 0 0;\n    border-radius: 4px 4px 0 0;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > h3 {\n    margin: 0;\n    padding: 0;\n    float: left;\n    font-size: 13px;\n    display: inline-block;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a {\n    display: inline-block;\n    padding: 0;\n    background: none;\n    clear: inherit;\n    font-size: 13px;\n    font-weight: 300;\n    position: absolute;\n    right: 10px;\n    border: 0;\n    margin-top: -1px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a:hover {\n    text-decoration: underline;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list {\n    padding-right: 0 !important;\n    padding-left: 0;\n    list-style: none;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a {\n    display: block;\n    clear: both;\n    font-weight: 300;\n    line-height: 20px;\n    white-space: normal;\n    font-size: 13px;\n    padding: 16px 15px 18px;\n    text-shadow: none;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a:hover {\n    opacity: 1;\n    filter: alpha(opacity=100);\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li:first-child a {\n    border-top: none;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details {\n    overflow: hidden;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details .label-icon {\n    margin-right: 10px;\n    -webkit-border-radius: 50%;\n    -moz-border-radius: 50%;\n    -ms-border-radius: 50%;\n    -o-border-radius: 50%;\n    border-radius: 50%;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details .label-icon i {\n    margin-right: 2px;\n    margin-left: 1px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details .label-icon .badge {\n    right: 15px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .time {\n    float: right;\n    max-width: 75px;\n    font-size: 11px;\n    font-weight: 400;\n    opacity: 0.7;\n    filter: alpha(opacity=70);\n    text-align: right;\n    padding: 1px 5px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .photo {\n    float: left;\n    margin: 0 6px 6px 0;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .photo img {\n    height: 40px;\n    width: 40px;\n    -webkit-border-radius: 50% !important;\n    -moz-border-radius: 50% !important;\n    -ms-border-radius: 50% !important;\n    -o-border-radius: 50% !important;\n    border-radius: 50% !important;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .subject {\n    display: block;\n    margin-left: 46px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .subject .from {\n    font-size: 13px;\n    font-weight: 600;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .subject .time {\n    font-size: 12px;\n    font-weight: 400;\n    opacity: 0.5;\n    filter: alpha(opacity=50);\n    float: right;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .message {\n    display: block !important;\n    font-size: 12px;\n    line-height: 1.3;\n    margin-left: 46px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .task {\n    margin-bottom: 5px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .task .desc {\n    font-size: 13px;\n    font-weight: 300;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .task .percent {\n    float: right;\n    font-weight: 600;\n    display: inline-block;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .progress {\n    display: block;\n    height: 8px;\n    margin: 8px 0 2px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .progress .progress-bar {\n    box-shadow: none;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle {\n    padding: 14px 6px 12px 8px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle > .username {\n    display: inline-block;\n    font-size: 13px;\n    font-weight: 300;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle > img {\n    float: left;\n    margin-top: -5px;\n    margin-right: 5px;\n    height: 29px;\n    display: inline-block;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle > i {\n    display: inline-block;\n    margin-top: 5px;\n    margin: 0;\n    font-size: 13px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu {\n    width: 175px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu > li > a {\n    font-size: 14px;\n    font-weight: 300;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu > li > a i {\n    width: 15px;\n    display: inline-block;\n    margin-right: 9px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu > li > a .badge {\n    margin-right: 10px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-language {\n    padding-left: 0;\n    padding-right: 0;\n    margin: 0;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle {\n    padding: 14px 3px 12px 7px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle > img {\n    margin-bottom: 2px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle > i {\n    font-size: 14px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-menu > li > a {\n    font-size: 13px;\n}\n\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-menu > li > a > img {\n    margin-bottom: 2px;\n    margin-right: 5px;\n}\n\n.page-header.navbar .top-menu .navbar-nav li.dropdown-dark .dropdown-menu:before {\n    border-left: none;\n    border-right: none;\n}\n\n.page-header.navbar .top-menu .navbar-nav li.dropdown-dark .dropdown-menu .dropdown-menu-list > li.external a {\n    background: none !important;\n    border: none !important;\n}\n\n/* Allow expanded search for above 768px */\n@media (min-width: 768px) {\n    /* 768px */\n    .page-header.navbar {\n        /* Search box */\n    }\n\n    .page-header.navbar .search-form.search-form-expanded {\n        width: 200px;\n    }\n\n    .page-header.navbar .search-form.search-form-expanded .input-group .form-control {\n        text-indent: 0;\n    }\n\n    .page-header.navbar .search-form.search-form-expanded .input-group .form-control:hover {\n        cursor: text;\n    }\n\n    .page-header.navbar .search-form.search-form-expanded .input-group .input-group-btn .btn.submit {\n        margin-left: 0;\n    }\n}\n\n/***\nHorizontal Menu \n***/\n.page-header.navbar {\n    /* Header container */\n    /* Mega menu */\n}\n\n.page-header.navbar .container {\n    position: relative;\n}\n\n.page-header.navbar .hor-menu {\n    margin: 0 0 0 -17px;\n    margin: 0;\n    float: left;\n}\n\n.page-header.navbar .hor-menu .navbar-nav {\n    position: static;\n    /* Mega menu */\n    /* Mega Menu Dropdown */\n    /* Classic menu */\n}\n\n.page-header.navbar .hor-menu .navbar-nav.navbar-right .dropdown-menu {\n    left: auto;\n    right: 0;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown {\n    position: static;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu {\n    left: auto;\n    width: auto;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content {\n    font-family: \"Open Sans\", sans-serif;\n    padding: 15px;\n    margin: 0;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content.mega-menu-responsive-content {\n    padding: 10px 18px 10px 45px;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu {\n    padding: 0;\n    margin: 0;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu:last-child {\n    border-right: 0;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li {\n    padding: 1px !important;\n    margin: 0 !important;\n    list-style: none;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > h3 {\n    margin-top: 5px;\n    padding-left: 6px;\n    font-size: 15px;\n    font-weight: 400;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a {\n    white-space: normal;\n    font-family: \"Open Sans\", sans-serif;\n    padding: 7px;\n    margin: 0;\n    font-size: 14px;\n    font-weight: 300;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a.iconify {\n    padding: 7px 7px 7px 30px;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a.iconify > i {\n    position: absolute;\n    top: auto !important;\n    margin-left: -24px;\n    font-size: 15px;\n    margin-top: 3px !important;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a .badge,\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a .label {\n    margin-left: 5px;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown.mega-menu-full .dropdown-menu {\n    left: 20px;\n    right: 20px;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.menu-dropdown .dropdown-menu:after, .page-header.navbar .hor-menu .navbar-nav > li.menu-dropdown .dropdown-menu:before {\n    display: none !important;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li > a {\n    font-size: 14px;\n    font-weight: 400;\n    padding: 13px 13px;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li > a:focus {\n    background: none !important;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.current .selected, .page-header.navbar .hor-menu .navbar-nav > li.active .selected {\n    left: 50%;\n    bottom: 0;\n    position: absolute;\n    border-left: 6px solid transparent;\n    border-right: 6px solid transparent;\n    border-top: 6px solid transparent;\n    display: inline-block;\n    margin: 0;\n    width: 0;\n    height: 0px;\n    margin-left: -7px;\n    margin-bottom: -6px;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu {\n    margin-top: 0;\n    border: none;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a {\n    font-family: \"Open Sans\", sans-serif;\n    font-size: 14px;\n    font-weight: 300;\n    padding: 9px 10px;\n    white-space: normal;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a .label,\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a .badge {\n    font-weight: 300;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li.classic-menu-dropdown .dropdown-menu {\n    min-width: 195px;\n    max-width: 235px;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-submenu > .dropdown-menu {\n    top: 0;\n}\n\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-submenu > a:after {\n    top: 9px;\n    right: 10px;\n}\n\n/* Form medium devices upto large devices */\n@media (min-width: 992px) and (max-width: 1200px) {\n    /* 992px 1200px */\n    /* Boxed layout */\n    .page-boxed .page-header.navbar {\n        /* Top menu */\n    }\n\n    .page-boxed .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle .username.username-hide-on-mobile {\n        display: none;\n    }\n\n    .page-boxed .page-header.navbar .top-menu .navbar-nav > li.dropdown-language .dropdown-toggle .langname {\n        display: none;\n    }\n}\n\n@media (min-width: 992px) {\n    /* 992px */\n    /* Page header */\n    .page-header.navbar {\n        /* Header logo */\n    }\n\n    .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo {\n        padding: 0;\n    }\n\n    .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo {\n        width: 45px;\n    }\n\n    .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo .logo-default {\n        display: none;\n    }\n\n    /* Boxed Layout */\n    .page-boxed .page-header.navbar {\n        /* Page logo */\n        /* Top menu */\n    }\n\n    .page-boxed .page-header.navbar .page-logo {\n        width: 236px;\n    }\n\n    .page-boxed .page-header.navbar .top-menu .navbar-nav {\n        margin-right: 0px;\n    }\n\n    /* Sidebar closed & logo hidden */\n    .page-sidebar-closed.page-sidebar-closed-hide-logo.page-boxed .page-header.navbar {\n        /* Page logo */\n    }\n\n    .page-sidebar-closed.page-sidebar-closed-hide-logo.page-boxed .page-header.navbar .page-logo {\n        width: 46px;\n    }\n\n    /* Boxed layout & page sidebar fixed layout */\n    .page-boxed.page-sidebar-fixed .page-header.navbar {\n        /* Page logo */\n    }\n\n    .page-boxed.page-sidebar-fixed .page-header.navbar .page-logo {\n        width: 235px;\n    }\n}\n\n@media (max-width: 991px) {\n    /* 991px */\n    /* Page header */\n    .page-header.navbar {\n        padding: 0 20px 0 20px;\n        position: relative;\n        clear: both;\n        /* Page logo */\n        /* Menu Toggler */\n        /* Top Menu */\n    }\n\n    .page-header.navbar .page-logo {\n        width: auto;\n        padding: 0;\n        margin-right: 10px;\n        margin-left: 0px !important;\n        padding-left: 0px !important;\n    }\n\n    .page-header.navbar .page-logo img {\n        margin-left: 4px !important;\n    }\n\n    .page-header.navbar .menu-toggler.sidebar-toggler {\n        display: none !important;\n    }\n\n    .page-header.navbar .menu-toggler.responsive-toggler {\n        display: inline-block;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav {\n        display: inline-block;\n        margin: 0 10px 0 0;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav > li {\n        float: left;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav .nav li.dropdown i {\n        display: inline-block;\n        position: relative;\n        top: 1px;\n        right: 0px;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav .open .dropdown-menu {\n        position: absolute;\n    }\n\n    /* Fixed header for mobile */\n    .page-header-fixed.page-header-fixed-mobile .navbar-fixed-top {\n        position: fixed;\n    }\n\n    /* Boxed Layout */\n    .page-boxed .page-header.navbar > .container {\n        max-width: none !important;\n        margin: 0 !important;\n        padding: 0 !important;\n    }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n    /* 768px & 991px */\n    /* Boxed Layout */\n    .page-boxed .page-header.navbar {\n        margin: auto !important;\n        padding: 0;\n    }\n\n    .page-boxed .page-header.navbar > .container {\n        margin: auto !important;\n    }\n}\n\n@media (max-width: 767px) {\n    /* 767px */\n    /* Page header */\n    .page-header.navbar {\n        padding: 0 10px 0 10px;\n        /* Header logo */\n        /* Search box */\n        /* Top navigation menu*/\n    }\n\n    .page-header.navbar .page-logo {\n        width: auto;\n    }\n\n    .page-header.navbar .search-form.open {\n        z-index: 3;\n        left: 10px;\n        right: 10px;\n        position: absolute;\n        width: auto !important;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended > .dropdown-menu {\n        max-width: 255px;\n        width: 255px;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu {\n        margin-right: -190px;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu:after, .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu:before {\n        margin-right: 190px;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu {\n        margin-right: -150px;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu:after, .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu:before {\n        margin-right: 150px;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu {\n        margin-right: -110px;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu:after, .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu:before {\n        margin-right: 110px;\n    }\n}\n\n@media (max-width: 580px) {\n    /* Page header */\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle .username.username-hide-on-mobile {\n        display: none;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-language .dropdown-toggle .langname {\n        display: none;\n    }\n}\n\n@media (max-width: 480px) {\n    /* 480px */\n    /* Fixed header for mobile */\n    .page-header-fixed.page-header-fixed-mobile .page-header.navbar {\n        height: 92px;\n    }\n\n    .page-header.navbar {\n        /* Top menu */\n    }\n\n    .page-header.navbar .top-menu {\n        display: block;\n        clear: both;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav {\n        margin-right: 0;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle {\n        padding: 17px 6px 9px 6px;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-language .dropdown-toggle {\n        padding: 14px 4px 12px 2px;\n    }\n\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle {\n        padding: 14px 0px 12px 2px;\n    }\n}\n\n/***\nPace - Page Progress\n***/\n.pace .pace-progress {\n    z-index: 10000;\n    top: 44px;\n    height: 2px;\n}\n\n.pace .pace-progress-inner {\n    box-shadow: none;\n}\n\n.pace .pace-activity {\n    top: 48px;\n    right: 22px;\n    border-radius: 10px !important;\n}\n\n@media (max-width: 480px) {\n    /* 480px */\n    .page-header-fixed .pace .pace-progress {\n        top: 92px;\n    }\n\n    .page-header-fixed .pace .pace-activity {\n        top: 188px;\n        right: 15px;\n    }\n}\n\n/***\nPage container\n***/\n.page-container {\n    margin: 0px;\n    padding: 0px;\n    position: relative;\n    /* Fixed header */\n    /* Fixed footer for mobile */\n}\n\n.page-container:before, .page-container:after {\n    content: \" \";\n    display: table;\n}\n\n.page-container:after {\n    clear: both;\n}\n\n.page-header-fixed .page-container {\n    margin-top: 46px;\n}\n\n.page-footer-fixed.page-footer-fixed-mobile .page-container {\n    margin-bottom: 20px !important;\n}\n\n@media (min-width: 992px) {\n    /* Page container in fixed footer */\n    .page-footer-fixed .page-container {\n        margin-bottom: 20px !important;\n    }\n}\n\n@media (max-width: 991px) {\n    /* Page container */\n    .page-container {\n        margin: 0 !important;\n        padding: 0 !important;\n    }\n\n    .page-header-fixed.page-header-fixed-mobile .page-container {\n        margin-top: 46px !important;\n    }\n}\n\n@media (max-width: 480px) {\n    /* Page container */\n    .page-header-fixed.page-header-fixed-mobile .page-container {\n        margin-top: 92px !important;\n    }\n}\n\n/***\nPage sidebar\n***/\n/* IE8 fix */\n.ie8 .page-sidebar {\n    width: 235px;\n    float: left;\n    position: relative;\n    margin-right: -100%;\n}\n\n/* Page Sidebar */\n.page-sidebar,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover {\n    /* Default sidebar menu */\n    /* light sidebar menu */\n}\n\n.page-sidebar.navbar-collapse,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover.navbar-collapse {\n    padding: 0;\n    box-shadow: none;\n}\n\n.page-sidebar .page-sidebar-menu,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    /* 1st level links */\n    /* all links */\n}\n\n.page-sidebar .page-sidebar-menu > li,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li {\n    display: block;\n    margin: 0;\n    padding: 0;\n    border: 0px;\n}\n\n.page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper {\n    border: 0 !important;\n}\n\n.page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper:before, .page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper:after, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper:before, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper:after,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper:before,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper:after,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper:before,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper:after {\n    content: \" \";\n    display: table;\n}\n\n.page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper:after, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper:after,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper:after,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper:after {\n    clear: both;\n}\n\n.page-sidebar .page-sidebar-menu > li.start > a,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.start > a {\n    border-top-color: transparent !important;\n}\n\n.page-sidebar .page-sidebar-menu > li.last > a,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.last > a {\n    border-bottom-color: transparent !important;\n}\n\n.page-sidebar .page-sidebar-menu > li > a,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a {\n    display: block;\n    position: relative;\n    margin: 0;\n    border: 0px;\n    padding: 10px 15px;\n    text-decoration: none;\n    font-size: 14px;\n    font-weight: 300;\n}\n\n.page-sidebar .page-sidebar-menu > li > a > i,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i {\n    font-size: 16px;\n    margin-right: 5px;\n    text-shadow: none;\n}\n\n.page-sidebar .page-sidebar-menu > li > a > i.glyphicon,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i.glyphicon {\n    top: 3px;\n    margin-left: 1px;\n    margin-right: 4px;\n}\n\n.page-sidebar .page-sidebar-menu > li > a > [class^=\"icon-\"],\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > [class^=\"icon-\"] {\n    top: 2px;\n    margin-left: 1px;\n    margin-right: 4px;\n}\n\n.page-sidebar-fixed .page-sidebar .page-sidebar-menu > li > a, .page-sidebar-fixed\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a {\n    transition: all 0.2s ease;\n}\n\n.page-sidebar-reversed.page-sidebar-fixed .page-sidebar .page-sidebar-menu > li > a, .page-sidebar-reversed.page-sidebar-fixed\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a {\n    transition: none;\n}\n\n.page-sidebar .page-sidebar-menu > li.heading,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading {\n    padding: 15px 15px 15px 15px;\n}\n\n.page-sidebar .page-sidebar-menu > li.heading > h3,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading > h3 {\n    margin: 0;\n    padding: 0;\n    font-size: 14px;\n    font-weight: 300;\n}\n\n.page-sidebar .page-sidebar-menu > li.heading + li > a,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading + li > a {\n    border-top: 0;\n}\n\n.page-sidebar .page-sidebar-menu > li.open > a,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a {\n    font-size: 14px;\n}\n\n.page-sidebar .page-sidebar-menu > li.active > a,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a {\n    border: none;\n    text-shadow: none;\n    font-size: 14px;\n}\n\n.page-sidebar .page-sidebar-menu > li.active > a > .selected,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected {\n    display: block;\n    background-image: none;\n    /* will be set in a theme css file*/\n    float: right;\n    position: absolute;\n    right: 0px;\n    top: 8px;\n    background: none;\n    width: 0;\n    height: 0;\n    border-top: 12px solid transparent;\n    border-bottom: 12px solid transparent;\n    border-right: 12px solid #ffffff;\n}\n\n.page-sidebar-reversed .page-sidebar .page-sidebar-menu > li.active > a > .selected, .page-sidebar-reversed\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected {\n    right: auto;\n    left: 0;\n    border-right: 0;\n    border-left: 8px solid #ffffff;\n}\n\n.page-container-bg-solid .page-sidebar .page-sidebar-menu > li.active > a > .selected, .page-container-bg-solid\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected {\n    border-color: transparent #F1F3FA transparent transparent;\n}\n\n.page-container-bg-solid.page-sidebar-reversed .page-sidebar .page-sidebar-menu > li.active > a > .selected, .page-container-bg-solid.page-sidebar-reversed\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected {\n    border-color: transparent transparent transparent #F1F3FA;\n}\n\n.page-sidebar .page-sidebar-menu li > a > .arrow:before,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow:before {\n    float: right;\n    width: 10px;\n    text-align: center;\n    margin-top: -1px;\n    margin-right: 5px;\n    margin-left: 5px;\n    display: inline;\n    font-size: 16px;\n    font-family: FontAwesome;\n    height: auto;\n    content: \"\\f105\";\n    font-weight: 300;\n    text-shadow: none;\n}\n\n.page-sidebar .page-sidebar-menu li > a > .arrow.open:before,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow.open:before {\n    content: \"\\f107\";\n}\n\n.page-sidebar .page-sidebar-menu li > a > .badge,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .badge {\n    float: right;\n    margin-top: 1px;\n    margin-right: 0px;\n}\n\n.page-sidebar .page-sidebar-menu .sub-menu,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu {\n    list-style: none;\n    display: none;\n    padding: 0;\n    margin: 8px 0px 8px 0px;\n}\n\n.page-sidebar .page-sidebar-menu .sub-menu li,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li {\n    background: none;\n    margin: 0px;\n    padding: 0px;\n    margin-top: 1px !important;\n    /* 2nd level sub menu */\n}\n\n.page-sidebar .page-sidebar-menu .sub-menu li > a,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > a {\n    display: block;\n    margin: 0;\n    padding: 6px 15px 6px 43px;\n    text-decoration: none;\n    font-size: 14px;\n    font-weight: 300;\n    background: none;\n}\n\n.page-sidebar .page-sidebar-menu .sub-menu li > a > i,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > a > i {\n    font-size: 14px;\n}\n\n.page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu {\n    margin: 0;\n}\n\n.page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li {\n    /* 3rd level sub menu */\n}\n\n.page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li > a,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li > a {\n    padding-left: 60px;\n}\n\n.page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu {\n    margin: 0;\n}\n\n.page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu > li > a,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu > li > a {\n    padding-left: 80px;\n}\n\n.page-sidebar .page-sidebar-menu li.active > .sub-menu,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active > .sub-menu {\n    display: block;\n}\n\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li > a,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li > a {\n    border: 0;\n    margin: 0;\n    padding-left: 11px;\n    border-left: 4px solid transparent;\n}\n\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu {\n    margin: 0;\n    padding: 1px 0;\n}\n\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li > a,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li > a {\n    padding-top: 8px;\n    padding-bottom: 8px;\n}\n\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li:first-child,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li:first-child {\n    margin-top: 0 !important;\n}\n\n.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li > a, .page-sidebar-reversed\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li > a {\n    padding-left: 15px;\n    padding-right: 11px;\n    border-left: 0;\n    border-right: 4px solid transparent;\n}\n\n.page-sidebar .sidebar-toggler,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler {\n    display: block;\n    cursor: pointer;\n    opacity: 0.7;\n    filter: alpha(opacity=70);\n    width: 30px;\n    height: 27px;\n    margin-top: 15px;\n    margin-right: 19px;\n    float: right;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px;\n}\n\n.page-sidebar .sidebar-toggler:hover,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler:hover {\n    filter: alpha(opacity=100);\n    opacity: 1;\n}\n\n.page-sidebar .sidebar-search,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search {\n    padding: 0;\n    margin: 22px 18px 22px 18px;\n}\n\n.page-sidebar .sidebar-search .remove,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .remove {\n    display: none;\n}\n\n.page-sidebar .sidebar-search .remove > i,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .remove > i {\n    font-size: 16px;\n}\n\n.page-sidebar .sidebar-search .input-group,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group {\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px;\n}\n\n.page-sidebar .sidebar-search .input-group .form-control,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control {\n    border: 0;\n    font-size: 14px;\n    padding: 0;\n    height: auto;\n    line-height: auto;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px;\n}\n\n.page-sidebar .sidebar-search .input-group .input-group-btn .btn,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn {\n    padding: 2px 0 0 0;\n    background-color: transparent;\n    background-repeat: no-repeat;\n    background-position: 100% 3px;\n}\n\n.page-sidebar .sidebar-search .input-group .input-group-btn .btn > i,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn > i {\n    font-size: 15px;\n}\n\n.page-sidebar .sidebar-search.sidebar-search-bordered,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered {\n    margin: 25px 18px 25px 18px;\n}\n\n.page-sidebar .sidebar-search.sidebar-search-bordered .input-group .form-control,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group .form-control {\n    font-size: 13px;\n    padding: 6px 8px;\n}\n\n.page-sidebar .sidebar-search.sidebar-search-bordered .input-group .input-group-btn .btn,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group .input-group-btn .btn {\n    margin-right: 6px;\n}\n\n@media (min-width: 992px) {\n    /* 992px */\n    .page-sidebar {\n        width: 235px;\n        float: left;\n        position: relative;\n        margin-right: -100%;\n    }\n\n    .page-full-width .page-sidebar {\n        display: none !important;\n    }\n\n    .page-sidebar.navbar-collapse {\n        max-height: none !important;\n    }\n\n    .page-sidebar-reversed .page-sidebar {\n        float: right;\n        margin-right: 0;\n        margin-left: -100%;\n    }\n\n    .page-sidebar-reversed.page-sidebar-fixed .page-sidebar {\n        margin-left: -235px;\n    }\n\n    .page-sidebar-reversed.page-sidebar-fixed .page-sidebar-wrapper {\n        position: relative;\n        float: right;\n    }\n\n    .page-sidebar-fixed .page-sidebar {\n        position: fixed !important;\n        margin-left: 0;\n        top: 46px;\n    }\n\n    .page-sidebar-fixed .page-sidebar-menu > li.last {\n        margin-bottom: 15px !important;\n    }\n\n    .page-sidebar-fixed .page-sidebar-menu .sub-menu {\n        height: auto !important;\n    }\n\n    /* Sidebar Closed */\n    .page-sidebar-closed .page-sidebar {\n        width: 45px !important;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed {\n        /* sidebar */\n        width: 45px !important;\n        /* sidebar toggler */\n        /* sidebar search */\n        /* sidebar bordered search */\n        /* sidebar search expanded */\n        /* sidebar bordered search expanded */\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li {\n        /* hide opened sub menu */\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.open > .sub-menu,\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > .sub-menu {\n        display: none !important;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover {\n        width: 256px !important;\n        position: relative !important;\n        z-index: 10000;\n        display: block !important;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a {\n        -webkit-border-radius: 0 4px 0 0;\n        -moz-border-radius: 0 4px 0 0;\n        -ms-border-radius: 0 4px 0 0;\n        -o-border-radius: 0 4px 0 0;\n        border-radius: 0 4px 0 0;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > i {\n        margin-right: 10px;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .title {\n        display: inline !important;\n        padding-left: 15px;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .badge {\n        display: block !important;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .selected {\n        display: none;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover.heading {\n        width: 45px !important;\n        box-shadow: none;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu {\n        width: 210px;\n        position: absolute;\n        z-index: 2000;\n        left: 46px;\n        margin-top: 0;\n        top: 100%;\n        display: block !important;\n        -webkit-border-radius: 0 0 4px 4px;\n        -moz-border-radius: 0 0 4px 4px;\n        -ms-border-radius: 0 0 4px 4px;\n        -o-border-radius: 0 0 4px 4px;\n        border-radius: 0 0 4px 4px;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu > li > a {\n        padding-left: 15px !important;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu > li > .sub-menu > li > a {\n        padding-left: 30px !important;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu > li > .sub-menu > li > .sub-menu > li > a {\n        padding-left: 45px !important;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.heading > h3 {\n        display: none;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-toggler-wrapper .sidebar-toggler {\n        margin-right: 8px;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-toggler-wrapper:hover {\n        width: 45px !important;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-search-wrapper:hover {\n        width: 45px !important;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a {\n        padding-left: 11px;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a .selected {\n        right: -3px !important;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a > .badge,\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a > .title,\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a > .arrow {\n        display: none !important;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-toggler {\n        margin-left: 3px;\n        margin-right: 3px;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group {\n        border-color: transparent;\n        margin-left: -4px;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group .form-control {\n        display: none;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group .input-group-btn .btn {\n        display: block;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.sidebar-search-bordered .input-group {\n        padding: 5px 0 3px 0;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open {\n        height: 39px;\n        margin-top: 14px;\n        margin-bottom: 14px;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group {\n        width: 210px;\n        position: relative;\n        z-index: 1;\n        margin-left: 24px;\n        padding: 0;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .form-control {\n        background: none;\n        border: 0;\n        display: block;\n        padding: 8px 8px;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .input-group-btn .btn {\n        display: block;\n        margin-right: 8px;\n        margin-top: 1px;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .remove {\n        background-repeat: no-repeat;\n        width: 11px;\n        height: 11px;\n        margin: 9px -5px 9px -7px;\n        display: block;\n        float: left;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open.sidebar-search-bordered {\n        height: 36px;\n        margin-top: 23px;\n        margin-bottom: 23px;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open.sidebar-search-bordered .input-group {\n        padding: 0;\n    }\n\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed > li > a {\n        padding-right: 11px;\n        padding-left: 7px;\n    }\n\n    .page-sidebar-closed.page-sidebar-reversed .page-sidebar {\n        margin-left: -45px;\n        width: 45px;\n    }\n\n    .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed {\n        /* sidebar */\n        /* sidebar search */\n    }\n\n    .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > .sub-menu {\n        left: auto;\n        right: 46px;\n    }\n\n    .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover {\n        margin-left: -211px;\n    }\n\n    .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a {\n        -webkit-border-radius: 4px 0 0 0;\n        -moz-border-radius: 4px 0 0 0;\n        -ms-border-radius: 4px 0 0 0;\n        -o-border-radius: 4px 0 0 0;\n        border-radius: 4px 0 0 0;\n    }\n\n    .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .title {\n        padding-left: 0;\n        padding-right: 15px;\n    }\n\n    .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > i {\n        margin-right: 0;\n        margin-left: 2px;\n    }\n\n    .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-search-wrapper:hover, .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-toggler-wrapper:hover {\n        margin-left: 0;\n    }\n\n    .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group {\n        margin-left: -227px;\n    }\n\n    .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .input-group-btn .btn {\n        margin-right: 10px !important;\n    }\n\n    .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .remove {\n        margin: 9px 4px 12px -16px !important;\n        float: right !important;\n    }\n\n    .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed > li > a {\n        padding-right: 7px;\n        padding-left: 11px;\n    }\n\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover {\n        width: 235px !important;\n        display: block;\n        z-index: 10000;\n    }\n\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu {\n        width: 235px !important;\n    }\n\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .selected {\n        display: none !important;\n    }\n\n    .page-sidebar-closed.page-sidebar-fixed.page-sidebar-reversed .page-sidebar:hover {\n        width: 235px !important;\n        z-index: 10000;\n        margin-left: -235px !important;\n    }\n\n    .page-sidebar-closed.page-sidebar-fixed.page-sidebar-reversed .page-sidebar:hover .page-sidebar-menu {\n        width: 235px !important;\n    }\n\n    .page-sidebar-closed.page-sidebar-hide .page-sidebar {\n        display: none !important;\n    }\n\n    /* Sidebar Menu Wirh Hoverable Submenu */\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu li .sub-menu {\n        display: none;\n        width: 210px;\n        z-index: 2000;\n        position: absolute;\n        -webkit-border-radius: 4px;\n        -moz-border-radius: 4px;\n        -ms-border-radius: 4px;\n        -o-border-radius: 4px;\n        border-radius: 4px;\n    }\n\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu li .sub-menu > li > a {\n        margin: 3px;\n    }\n\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu li.active .sub-menu, .page-sidebar-menu.page-sidebar-menu-hover-submenu li.open .sub-menu {\n        display: none !important;\n    }\n\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu li a > .arrow {\n        display: none;\n    }\n\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow {\n        display: block;\n        float: right;\n        position: absolute;\n        right: 0;\n        margin-top: -20px;\n        background: none;\n        width: 0;\n        height: 0;\n        border-style: solid;\n        border-top: 12px double transparent;\n        border-bottom: 12px double transparent;\n        border-left: 0;\n    }\n\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow:after, .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow:before {\n        display: none;\n    }\n\n    .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow {\n        right: auto;\n        left: 0;\n        border-right: 0;\n    }\n\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > .sub-menu {\n        display: inline-block !important;\n    }\n\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > a > .arrow {\n        z-index: 1;\n        right: 0px;\n        margin-top: -23px;\n    }\n\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > a > .selected {\n        display: none;\n    }\n\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu {\n        margin-left: 235px;\n        margin-top: -40px;\n    }\n\n    .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu {\n        margin-left: -210px !important;\n    }\n\n    .page-sidebar-closed .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu {\n        margin-left: 0;\n    }\n\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li > a {\n        padding-left: 15px;\n    }\n\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li .sub-menu {\n        margin-left: 210px;\n        margin-top: -38px !important;\n    }\n\n    .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li .sub-menu {\n        margin-left: -210px !important;\n    }\n\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li .sub-menu > li > a {\n        padding-left: 10px;\n        padding-right: 10px;\n    }\n\n    .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-hover-submenu li:hover > .sub-menu {\n        margin-top: -41px;\n    }\n\n    .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-hover-submenu li:hover > .sub-menu > li > .sub-menu {\n        margin-top: -41px;\n    }\n}\n\n@media (max-width: 991px) {\n    /* 991px */\n    .page-sidebar {\n        border-top: 0 !important;\n        margin: 20px;\n    }\n\n    .page-sidebar .sidebar-toggler {\n        display: none;\n    }\n\n    .page-sidebar .selected {\n        display: none !important;\n    }\n\n    .page-sidebar.navbar-collapse {\n        max-height: none;\n        /* set some max height to have a scrollable menu on mobile devices */\n    }\n\n    .page-sidebar.navbar-collapse.collapse {\n        display: none !important;\n    }\n\n    .page-sidebar.navbar-collapse.in {\n        border-top: 0 !important;\n        margin: 20px;\n        position: relative;\n        overflow: hidden !important;\n        overflow-y: auto !important;\n        display: block !important;\n    }\n\n    .page-sidebar.navbar-collapse.navbar-no-scroll {\n        max-height: none !important;\n    }\n\n    .page-sidebar .mega-menu-responsive-content {\n        padding: 10px 18px 10px 45px;\n    }\n\n    .page-full-width .page-sidebar-menu {\n        display: block;\n    }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n    /* 768px & 991px */\n    .page-sidebar .btn-navbar.collapsed .arrow {\n        display: none;\n    }\n\n    .page-sidebar .btn-navbar .arrow {\n        position: absolute;\n        right: 25px;\n        width: 0;\n        height: 0;\n        top: 50px;\n        border-bottom: 15px solid #5f646b;\n        border-left: 15px solid transparent;\n        border-right: 15px solid transparent;\n    }\n}\n\n@media (max-width: 480px) {\n    /* 480px */\n    /* Page sidebar */\n    .page-sidebar,\n    .page-sidebar.in {\n        margin: 0 10px 10px 10px !important;\n    }\n\n    .page-header-fixed.page-header-fixed-mobile .page-sidebar, .page-header-fixed.page-header-fixed-mobile\n    .page-sidebar.in {\n        margin-top: 10px !important;\n    }\n}\n\n/******************\nPage Quick Sidebar\n******************/\n/***\nQuick Sidebar Layout\n***/\n/* Quick sidebar toggler */\n.page-header .top-menu .dropdown-quick-sidebar-toggler > .dropdown-toggle {\n    padding: 17px 10px 9px 10px !important;\n}\n\n.page-header .top-menu .dropdown-quick-sidebar-toggler > .dropdown-toggle i {\n    top: 0px;\n}\n\n.page-quick-sidebar-open .page-header .top-menu .dropdown-quick-sidebar-toggler > .dropdown-toggle i:before {\n    content: \"\\e066\";\n}\n\n/* Quick sidebar wrapper */\n.page-quick-sidebar-wrapper {\n    transition: right 0.3s;\n    z-index: 9994;\n    position: fixed;\n    top: 46px;\n    bottom: 0;\n    right: -270px;\n    width: 270px;\n}\n\n.page-footer-fixed .page-quick-sidebar-wrapper {\n    bottom: 33px;\n}\n\n.page-quick-sidebar-full-height .page-quick-sidebar-wrapper {\n    top: 0;\n    bottom: 0;\n}\n\n.page-quick-sidebar-open .page-quick-sidebar-wrapper {\n    transition: right 0.3s;\n    right: 0;\n}\n\n/*** \nQuick Sidebar Toggler \n***/\n.page-quick-sidebar-toggler {\n    overflow: hidden;\n    z-index: 9994;\n    display: none;\n    width: 28px;\n    height: 27px;\n    position: fixed;\n    top: 19px;\n    right: 15px;\n    text-align: center;\n    padding-top: 6px;\n}\n\n.page-quick-sidebar-open .page-quick-sidebar-toggler {\n    display: inline-block;\n}\n\n.page-quick-sidebar-toggler > i {\n    font-size: 17px;\n}\n\n/* quick sidebar top position fix for mobile view */\n@media (max-width: 480px) {\n    /* 480px */\n    .page-quick-sidebar-wrapper {\n        top: 92px;\n    }\n\n    .page-quick-sidebar-toggler {\n        top: 65px;\n    }\n}\n\n.page-header,\n.page-sidebar-wrapper,\n.page-content-wrapper,\n.page-footer {\n    transition: margin 0.3s;\n}\n\n/* Quick sidebar with push content */\n.page-quick-sidebar-open.page-quick-sidebar-push-content .page-sidebar-wrapper {\n    transition: margin-left 0.3s;\n    margin-left: -270px;\n}\n\n.page-quick-sidebar-open.page-quick-sidebar-push-content .page-content-wrapper {\n    transition: margin-left 0.3s;\n    margin-left: -270px;\n}\n\n.page-quick-sidebar-open.page-quick-sidebar-push-content .page-footer {\n    transition: margin-right 0.3s;\n    margin-right: 270px;\n    margin-left: -270px;\n}\n\n/* Page sidebar reversed */\n.page-sidebar-reversed.page-quick-sidebar-open.page-quick-sidebar-push-content .page-sidebar-wrapper {\n    transition: margin-right 0.3s;\n    margin-right: 270px;\n}\n\n/* Quick sidebar with full height content */\n.page-quick-sidebar-open.page-quick-sidebar-push-content.page-quick-sidebar-full-height .page-header {\n    transition: margin-left 0.3s;\n    margin-left: -270px;\n}\n\n.page-quick-sidebar-open.page-quick-sidebar-push-content.page-footer-fixed:not(.page-quick-sidebar-full-height) .page-footer {\n    margin-left: 0;\n    margin-right: 0;\n}\n\n/* Quick sidebar with transparent content */\n.page-quick-sidebar-open.page-quick-sidebar-over-content-transparent .page-quick-sidebar-wrapper {\n    opacity: 0.9;\n    filter: alpha(opacity=90);\n}\n\n/* Hide the responsive menu if its shown while the quick sidebar opened on mobile  */\n@media (max-width: 991px) {\n    /* 991px */\n    .page-quick-sidebar-open.page-quick-sidebar-push-content .page-sidebar-wrapper {\n        display: none;\n    }\n}\n\n/***\nQuick Sidebar Content\n***/\n.page-quick-sidebar-wrapper {\n    overflow: hidden;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar {\n    /* Quick sidebar tabs */\n    /* Quick sidebar tabs content */\n    /* Quick sidebar general list heading */\n    /* Quick sidebar general list-items */\n    /* Inner content */\n    /* Quick sidebar list */\n    /* Quick sidebar list item */\n    /* Quick sidebar list item shown */\n    /* Quick sidebar chat */\n    /* Quick sidebar alerts */\n    /* Quick sidebar settings */\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified {\n    margin: 0;\n    padding: 0;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li {\n    display: table-cell !important;\n    width: 1% !important;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li > a {\n    padding: 15px 15px;\n    border: 0;\n    height: 46px;\n    font-size: 13px;\n    text-transform: uppercase;\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    -ms-border-radius: 0;\n    -o-border-radius: 0;\n    border-radius: 0;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li > a > .badge {\n    position: absolute;\n    top: 12px;\n    right: 3px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li > a:hover {\n    border: 0;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu {\n    margin-top: 8px;\n    margin-right: 20px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu:before {\n    position: absolute;\n    top: -7px;\n    right: 19px;\n    display: inline-block !important;\n    border-right: 7px solid transparent;\n    border-left: 7px solid transparent;\n    border-bottom-color: rgba(0, 0, 0, 0.2);\n    content: '';\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu:after {\n    position: absolute;\n    top: -6px;\n    right: 20px;\n    display: inline-block !important;\n    border-right: 6px solid transparent;\n    border-bottom: 6px solid #fff;\n    border-left: 6px solid transparent;\n    content: '';\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > .tab-content {\n    margin: 0;\n    padding: 0;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .list-heading {\n    font-size: 16px;\n    margin: 10px 10px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .list-items {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .list-items > li {\n    margin: 0;\n    padding: 10px;\n    background: none;\n    border-bottom-width: 1px;\n    border-bottom-style: solid;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .list-items > li:last-child {\n    border-bottom: 0;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .list-items.borderless li {\n    border: 0;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .inner-content {\n    margin: 10px 10px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-list {\n    position: absolute !important;\n    width: 270px !important;\n    transition: margin 0.3s;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item {\n    position: absolute !important;\n    width: 270px !important;\n    transition: margin 0.3s;\n    margin-left: 270px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav {\n    padding: 15px 10px 0px 10px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list {\n    vertical-align: middle;\n    display: inline-block;\n    font-size: 14px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list > i {\n    font-size: 17px;\n    line-height: 17px;\n    vertical-align: top;\n    margin-right: 3px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list {\n    transition: margin 0.3s;\n    margin-left: -270px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list .slimScrollBar,\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list .slimScrollRail {\n    display: none !important;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-item {\n    transition: margin 0.3s;\n    margin-left: 0;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users {\n    padding: 10px 0;\n    position: relative;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media {\n    padding: 12px 10px 11px 10px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object {\n    border-radius: 50% !important;\n    width: 38.57143px;\n    opacity: 0.8;\n    filter: alpha(opacity=80);\n    float: left;\n    margin-right: 10px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:before, .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:after {\n    content: \" \";\n    display: table;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:after {\n    clear: both;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media:hover {\n    cursor: pointer;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media:hover .media-object {\n    opacity: 1;\n    filter: alpha(opacity=100);\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading {\n    margin: 5px 0 0 0;\n    font-size: 14px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-sub {\n    font-size: 11px;\n    text-transform: uppercase;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-small {\n    font-size: 10px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-status {\n    margin-top: 10px;\n    right: 10px;\n    position: absolute;\n    display: inline-block;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages {\n    padding: 0px 10px;\n    position: relative;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post {\n    transition: display 0.3s;\n    padding: 5px 0;\n    margin: 10px auto;\n    font-size: 12px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .body {\n    display: block;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .avatar {\n    width: 38.57143px;\n    border-radius: 50% !important;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .avatar {\n    float: left;\n    margin-right: 10px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .avatar {\n    float: right;\n    margin-left: 10px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .name {\n    font-size: 12px;\n    font-weight: 300;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .datetime {\n    font-size: 12px;\n    font-weight: 300;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .message {\n    display: block;\n    padding: 5px;\n    position: relative;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .message {\n    text-align: left;\n    margin-left: 55px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .message .arrow {\n    display: block;\n    position: absolute;\n    top: 9px;\n    left: -6px;\n    width: 0;\n    height: 0;\n    border-top: 6px solid transparent;\n    border-bottom: 6px solid transparent;\n    border-right-width: 6px;\n    border-right-style: solid;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .message {\n    margin-right: 55px;\n    text-align: right;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .message .arrow {\n    display: block;\n    position: absolute;\n    top: 9px;\n    right: -6px;\n    border-top: 6px solid transparent;\n    border-bottom: 6px solid transparent;\n    border-left-width: 6px;\n    border-left-style: solid;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .name,\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .datetime {\n    text-align: right;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-form {\n    padding: 20px 10px 15px 10px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-form .input-group .form-control {\n    font-size: 13px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list {\n    padding: 10px 0;\n    position: relative;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li .label {\n    margin-top: 5px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li .desc {\n    padding: 0;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list {\n    padding: 10px 0;\n    position: relative;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li .bootstrap-switch {\n    margin-top: -3px;\n    float: right;\n    border: 0;\n    min-width: 59px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li .form-control {\n    width: 75px !important;\n    padding: 4px 4px !important;\n    float: right;\n    border: 0;\n    margin-top: -4px;\n}\n\n.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li select.form-control {\n    padding: 4px 0px !important;\n}\n\n/***\nPage content\n***/\n/* Page title */\n.page-title {\n    padding: 0px;\n    font-size: 28px;\n    letter-spacing: -1px;\n    display: block;\n    color: #666;\n    margin: 0px 0px 15px 0px;\n    font-weight: 300;\n    /* subtitle */\n}\n\n.page-title small {\n    font-size: 14px;\n    letter-spacing: 0px;\n    font-weight: 300;\n    color: #888;\n}\n\n.page-container-bg-solid .page-title {\n    color: #666;\n    margin-bottom: 20px;\n    margin-top: 20px;\n}\n\n.page-container-bg-solid .page-title small {\n    color: #666;\n}\n\n/* Page breadcrumb */\n.page-bar {\n    padding: 0px;\n    background-color: #f7f7f7;\n    margin-bottom: 25px;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px;\n}\n\n.page-bar:before, .page-bar:after {\n    content: \" \";\n    display: table;\n}\n\n.page-bar:after {\n    clear: both;\n}\n\n.page-bar .page-breadcrumb {\n    display: inline-block;\n    float: left;\n    padding: 8px;\n    margin: 0;\n    list-style: none;\n}\n\n.page-bar .page-breadcrumb > li {\n    display: inline-block;\n}\n\n.ie8 .page-bar .page-breadcrumb > li {\n    margin-right: 1px;\n}\n\n.page-bar .page-breadcrumb > li > a,\n.page-bar .page-breadcrumb > li > span {\n    color: #888;\n    font-size: 14px;\n    text-shadow: none;\n}\n\n.page-bar .page-breadcrumb > li > i {\n    color: #aaa;\n    font-size: 14px;\n    text-shadow: none;\n}\n\n.page-bar .page-breadcrumb > li > i[class^=\"icon-\"],\n.page-bar .page-breadcrumb > li > i[class*=\"icon-\"] {\n    color: gray;\n}\n\n.page-bar .page-toolbar {\n    display: inline-block;\n    float: right;\n    padding: 0;\n}\n\n.page-bar .page-toolbar .btn-fit-height {\n    -webkit-border-radius: 0 4px 4px 0;\n    -moz-border-radius: 0 4px 4px 0;\n    -ms-border-radius: 0 4px 4px 0;\n    -o-border-radius: 0 4px 4px 0;\n    border-radius: 0 4px 4px 0;\n    padding-top: 8px;\n    padding-bottom: 8px;\n}\n\n.page-md .page-bar .page-toolbar .btn-fit-height {\n    padding-top: 9px;\n    padding-bottom: 9px;\n    box-shadow: none !important;\n}\n\n.page-container-bg-solid .page-bar {\n    position: relative;\n    padding: 0px 20px;\n    background-color: #ffffff;\n    margin: -25px -20px 0 -20px;\n}\n\n.page-container-bg-solid .page-bar .page-breadcrumb {\n    padding: 11px 0;\n}\n\n.page-container-bg-solid .page-bar .page-breadcrumb > li > a,\n.page-container-bg-solid .page-bar .page-breadcrumb > li > span {\n    color: #888;\n}\n\n.page-container-bg-solid .page-bar .page-breadcrumb > li > i {\n    color: #aaa;\n}\n\n.page-container-bg-solid .page-bar .page-breadcrumb > li > i[class^=\"icon-\"],\n.page-container-bg-solid .page-bar .page-breadcrumb > li > i[class*=\"icon-\"] {\n    color: #8c8c8c;\n}\n\n.page-container-bg-solid .page-bar .page-toolbar {\n    padding: 6px 0;\n}\n\n.page-container-bg-solid .page-bar .page-toolbar .btn {\n    margin-top: -2px;\n}\n\n.page-container-bg-solid .page-bar .page-toolbar .btn.btn-sm {\n    margin-top: 0px;\n}\n\n/* Page content */\n.page-content {\n    margin-top: 0px;\n    padding: 0px;\n    background-color: #fff;\n}\n\n.page-container-bg-solid .page-content {\n    background: #F1F3FA;\n}\n\n.page-container-bg-solid.page-md .page-content .page-bar {\n    border-radius: 0 !important;\n}\n\n.page-full-width .page-content {\n    margin-left: 0px !important;\n}\n\n@media (min-width: 992px) {\n    /* 992px */\n    /* Page content */\n    .page-content-wrapper {\n        float: left;\n        width: 100%;\n    }\n\n    .page-content-wrapper .page-content {\n        margin-left: 235px;\n        margin-top: 0px;\n        min-height: 600px;\n        padding: 25px 20px 10px 20px;\n    }\n\n    .page-content-wrapper .page-content.no-min-height {\n        min-height: auto;\n    }\n\n    .page-sidebar-fixed.page-sidebar-hover-on .page-content-wrapper .page-content {\n        margin-left: 45px;\n    }\n\n    .page-sidebar-reversed .page-content-wrapper .page-content {\n        margin-left: 0 !important;\n        margin-right: 235px !important;\n    }\n\n    .page-sidebar-reversed.page-sidebar-fixed.page-sidebar-hover-on .page-content-wrapper .page-content {\n        margin-left: 0;\n        margin-right: 45px;\n    }\n\n    .page-sidebar-reversed.page-sidebar-closed .page-content-wrapper .page-content {\n        margin-left: 0 !important;\n        margin-right: 45px !important;\n    }\n\n    .page-sidebar-closed .page-content-wrapper .page-content {\n        margin-left: 45px !important;\n    }\n\n    .page-sidebar-closed.page-sidebar-hide .page-content-wrapper .page-content {\n        margin-left: 0 !important;\n    }\n\n    .page-sidebar-closed.page-sidebar-reversed.page-sidebar-hide .page-content-wrapper .page-content {\n        margin-right: 0 !important;\n    }\n\n    .page-full-width .page-content-wrapper .page-content {\n        margin-left: 0px !important;\n    }\n}\n\n@media (max-width: 991px) {\n    /* 991px */\n    /* Bg solid content's breadcrumb */\n    .page-container-bg-solid .page-bar {\n        margin-top: -20px;\n    }\n\n    /* Boxed page container  */\n    .page-boxed > .container {\n        max-width: none !important;\n        margin: 0 !important;\n        padding: 0 !important;\n    }\n\n    /* Page content */\n    .page-content-wrapper .page-content {\n        margin: 0px !important;\n        padding: 20px 20px 20px 20px !important;\n        min-height: 280px;\n    }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n    /*  768px & 991px */\n    /* Boxed page container */\n    .page-boxed > .container {\n        margin: auto !important;\n    }\n}\n\n@media (max-width: 767px) {\n    /* 767px */\n    /* Page content */\n    .page-content-wrapper .page-content {\n        padding: 20px 10px 10px 10px !important;\n        overflow: hidden;\n        /* Page title */\n    }\n\n    .page-content-wrapper .page-content .page-title {\n        margin-bottom: 20px;\n        font-size: 18px;\n    }\n\n    .page-content-wrapper .page-content .page-title small {\n        font-size: 13px;\n        padding-top: 3px;\n    }\n}\n\n@media (max-width: 480px) {\n    /* 480px */\n    /* Dashboard date range panel */\n    .page-content-wrapper .page-content .page-title small {\n        display: block;\n        clear: both;\n    }\n}\n\n/***\nPage footer\n***/\n.page-footer {\n    padding: 8px 20px 5px 20px;\n    font-size: 12px;\n    height: 33px;\n}\n\n.page-footer:before, .page-footer:after {\n    content: \" \";\n    display: table;\n}\n\n.page-footer:after {\n    clear: both;\n}\n\n.page-footer .page-footer-inner {\n    float: left;\n    display: inline-block;\n}\n\n.page-footer-fixed.page-footer-fixed-mobile .page-footer {\n    position: fixed;\n    left: 0;\n    right: 0;\n    z-index: 10000;\n    bottom: 0;\n}\n\n.page-footer-fixed.page-footer-fixed-mobile.page-sidebar-fixed .page-footer {\n    margin-left: 0 !important;\n}\n\n@media (min-width: 992px) {\n    /* 992px */\n    /* Default footer */\n    .page-footer {\n        clear: left;\n    }\n\n    /* Fixed footer */\n    .page-footer-fixed .page-footer {\n        position: fixed;\n        left: 0;\n        right: 0;\n        z-index: 10000;\n        bottom: 0;\n    }\n\n    /* Footer with footer sidebar */\n    .page-sidebar-fixed.page-sidebar-closed .page-footer {\n        margin-left: 45px;\n    }\n\n    .page-sidebar-fixed.page-footer-fixed .page-footer {\n        margin-left: 0 !important;\n    }\n\n    /* Fixed Sidebar */\n    .page-sidebar-fixed .page-footer {\n        margin-left: 235px;\n        padding: 8px 20px 5px 20px;\n    }\n\n    /* Boxed page */\n    .page-boxed .page-footer {\n        padding: 8px 0 5px 0;\n    }\n\n    .page-boxed.page-sidebar-fixed .page-footer {\n        padding-right: 20px;\n        padding-left: 20px;\n    }\n\n    /* Page sidebar reversed */\n    .page-sidebar-reversed.page-sidebar-fixed .page-footer {\n        margin-left: 0;\n        margin-right: 235px;\n        padding: 8px 20px 5px 20px;\n    }\n\n    .page-sidebar-reversed.page-sidebar-fixed.page-footer-fixed .page-footer {\n        margin-left: 0;\n        margin-right: 0;\n    }\n\n    .page-sidebar-reversed.page-sidebar-fixed.page-sidebar-closed .page-footer {\n        margin-right: 45px;\n    }\n}\n\n@media (max-width: 991px) {\n    /* 991px */\n    /* Boxed Layout */\n    .page-boxed .page-footer {\n        padding-left: 0px;\n        padding-right: 0px;\n    }\n}\n\n@media (max-width: 767px) {\n    /* 767px */\n    /* Default footer & boxed footer */\n    .page-footer,\n    .page-boxed .page-footer {\n        padding-left: 10px;\n        padding-right: 10px;\n    }\n\n    /* Fixed footer */\n    .page-footer-fixed .page-footer .container {\n        padding-left: 0;\n        padding-right: 0;\n    }\n}\n\n/* Scroll Top Top */\n.scroll-to-top {\n    display: inline-block;\n    padding: 1px;\n    text-align: center;\n    position: fixed;\n    bottom: 10px;\n    z-index: 10001;\n    display: none;\n    right: 10px;\n}\n\n.scroll-to-top > i {\n    display: inline-block;\n    color: #687991;\n    font-size: 30px;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n\n.scroll-to-top:hover {\n    cursor: pointer;\n}\n\n.scroll-to-top:hover > i {\n    opacity: 1;\n    filter: alpha(opacity=100);\n}\n\n@media (min-width: 992px) {\n    /* 992px */\n    .scroll-to-top {\n        right: 20px;\n    }\n}\n\n@media (max-width: 991px) {\n    /* 991px */\n    .scroll-to-top {\n        bottom: 10px;\n        right: 10px;\n    }\n\n    .scroll-to-top > i {\n        font-size: 28px;\n    }\n}\n\n/***\nTheme Panel\n***/\n.theme-panel {\n    width: 420px;\n    margin-top: -13px;\n    margin-right: 0px;\n    z-index: 100;\n    float: right;\n    position: relative;\n    /* content solid bg color */\n}\n\n.theme-panel > .toggler {\n    top: 4px;\n    right: 0;\n    padding: 20px;\n    cursor: pointer;\n    position: absolute;\n    background: #d5dade url(../images/icon-color.png) center no-repeat;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px;\n}\n\n.theme-panel > .toggler:hover {\n    background-color: #3d3d3d !important;\n}\n\n.theme-panel > .toggler-close {\n    display: none;\n    top: 4px;\n    right: 0;\n    padding: 20px;\n    z-index: 101;\n    cursor: pointer;\n    position: absolute;\n    background: #3d3d3d url(../images/icon-color-close.png) center no-repeat !important;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px;\n}\n\n.theme-panel > .toggler-close:hover {\n    background-color: #222 !important;\n}\n\n.theme-panel > .theme-options {\n    top: 4px;\n    right: 0;\n    display: none;\n    position: absolute;\n    z-index: 100;\n    background: #3d3d3d;\n    box-shadow: 5px 5px rgba(61, 61, 61, 0.1);\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px;\n}\n\n.theme-panel > .theme-options > .theme-option {\n    color: #cfcfcf;\n    padding: 10px;\n    border-top: 1px solid #444;\n    margin-top: 0px;\n    margin-bottom: 0px;\n}\n\n.theme-panel > .theme-options > .theme-option > span {\n    text-transform: uppercase;\n    display: inline-block;\n    width: 145px;\n    font-size: 13px;\n    font-weight: 300;\n}\n\n.theme-panel > .theme-options > .theme-option > select.form-control {\n    display: inline;\n    width: 135px;\n    padding: 2px;\n    text-transform: lowercase;\n}\n\n.theme-panel > .theme-options > .theme-option.theme-colors {\n    border-top: 0;\n}\n\n.theme-panel > .theme-options > .theme-option.theme-colors > span {\n    display: block;\n    width: auto;\n}\n\n.theme-panel > .theme-options > .theme-option.theme-colors > ul {\n    list-style: none;\n    padding: 0;\n    display: block;\n    margin-bottom: 10px !important;\n    margin-top: 15px;\n}\n\n.theme-panel > .theme-options > .theme-option.theme-colors > ul > li {\n    width: 40px;\n    height: 40px;\n    margin: 0 4px;\n    cursor: pointer;\n    list-style: none;\n    float: left;\n    border: solid 1px #707070;\n    /* theme colors */\n}\n\n.theme-panel > .theme-options > .theme-option.theme-colors > ul > li:first-child {\n    margin-left: 0;\n}\n\n.theme-panel > .theme-options > .theme-option.theme-colors > ul > li:hover, .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.current {\n    border: solid 2px #d64635;\n}\n\n.theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-default {\n    background: #333438;\n}\n\n.theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-darkblue {\n    background: #2b3643;\n}\n\n.theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-blue {\n    background: #2D5F8B;\n}\n\n.theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-grey {\n    background: #697380;\n}\n\n.theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-light {\n    background: #F9FAFD;\n}\n\n.theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-light2 {\n    background: #F1F1F1;\n}\n\n.page-container-bg-solid .theme-panel {\n    position: absolute;\n    margin-top: 30px;\n    margin-right: 20px;\n    right: 0;\n}\n\n.page-container-bg-solid .theme-panel > .toggler {\n    background: #BFCAD1 url(../images/icon-color.png) center no-repeat;\n}\n\n.page-container-bg-solid.page-sidebar-reversed .theme-panel {\n    margin-right: 255px;\n}\n\n/***  \nPage Loading       \n***/\n.page-on-load {\n    background: #fefefe;\n}\n\n.page-on-load .page-header,\n.page-on-load .page-container,\n.page-on-load .page-footer,\n.page-on-load > .clearfix {\n    display: none;\n    transition: all 2s;\n}\n\n.navbar-brand {\n    color: #C5C5C5;\n}\n\n.navbar-brand:hover {\n    color: #C5C5C5;\n    text-decoration: none;\n}\n\nform {\n    margin-bottom: 0;\n}\n\ntable {\n    font-size: 13px;\n}\n\n#sortable > li {\n    display: block;\n}\n\n#sortable > li > span {\n    display: block;\n    width: 100%;\n    border: 1px solid #a5a5a5;\n    padding: 10px 5px;\n    margin-bottom: 5px;\n}\n\n#sortable > li > ul > li > span {\n    display: block;\n    width: 100%;\n    border: 1px solid #a5a5a5;\n    padding: 10px 5px;\n    margin-bottom: 5px;\n}\n\n.label-many {\n    line-height: 28px;\n    margin-right: 5px;\n}"
  },
  {
    "path": "public/quickadmin/css/quickadmin-theme-default.css",
    "content": "/*********** \nPage Header\n***********/\n/* Header search bar, toggler button & top menu */\n.page-header.navbar {\n  background-color: #1f1f1f;\n  /* Top notification menu/bar */\n  /* Header seaech box */\n  /* Toggler button for sidebar expand/collapse and responsive sidebar menu */\n}\n.page-header.navbar .top-menu .navbar-nav {\n  /* Extended Dropdowns */\n  /* Notification */\n  /* Inbox */\n  /* Tasks */\n  /* User */\n  /* Language */\n  /* Dark version */\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle > i {\n  color: #999999;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle .badge.badge-default {\n  background-color: #d64635;\n  color: #ffffff;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle:hover {\n  background-color: #393939;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle:hover > i {\n  color: #bfbfbf;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown.open .dropdown-toggle {\n  background-color: #393939;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown.open .dropdown-toggle > i {\n  color: #bfbfbf;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu {\n  border-color: #e7eaf0;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu:after {\n  border-bottom-color: #eaedf2;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external {\n  background: #eaedf2;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > h3 {\n  color: #62878f;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a {\n  color: #5b9bd1;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a:hover {\n  color: #3175af;\n  text-decoration: none;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a {\n  border-bottom: 1px solid #EFF2F6 !important;\n  color: #888888;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a:hover {\n  background: #f8f9fa;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li > a .time {\n  background: #f1f1f1;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li > a:hover .time {\n  background: #e4e4e4;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-toggle > .circle {\n  background-color: #d64635;\n  color: #ffffff;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-toggle > .corner {\n  border-color: transparent transparent transparent #d64635;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu .dropdown-menu-list .subject .from {\n  color: #5b9bd1;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list .progress {\n  background-color: #dfe2e9;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-user > .dropdown-toggle > .username {\n  color: #c5c5c5;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-user > .dropdown-toggle > i {\n  color: #c5c5c5;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-user > .dropdown-menu {\n  width: 195px;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle > .langname {\n  color: #c5c5c5;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu {\n  background: #393939;\n  border: 0;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu:after {\n  border-bottom-color: #393939;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu > li.external {\n  background: #242424;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu > li.external > h3 {\n  color: #a4a4a4;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu > li.external > a:hover {\n  color: #87b6dd;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a,\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu .dropdown-menu-list > li a {\n  color: #b0b0b0;\n  border-bottom: 1px solid #484848 !important;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a > i,\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu .dropdown-menu-list > li a > i {\n  color: #979797;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a:hover,\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu .dropdown-menu-list > li a:hover {\n  background: #434343;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a {\n  border-bottom: 0 !important;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li.divider {\n  background: #484848;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification.dropdown-dark .dropdown-menu .dropdown-menu-list > li > a .time {\n  background: #2c2c2c;\n}\n.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification.dropdown-dark .dropdown-menu .dropdown-menu-list > li > a:hover .time {\n  background: #1f1f1f;\n}\n.page-header.navbar .search-form {\n  background: #151515;\n}\n.page-header.navbar .search-form:hover {\n  background: #393939;\n}\n.page-header.navbar .search-form .input-group .form-control {\n  color: #999999;\n}\n.page-header.navbar .search-form .input-group .form-control::-moz-placeholder {\n  color: #969696;\n  opacity: 1;\n}\n.page-header.navbar .search-form .input-group .form-control:-ms-input-placeholder {\n  color: #969696;\n}\n.page-header.navbar .search-form .input-group .form-control::-webkit-input-placeholder {\n  color: #969696;\n}\n.page-header.navbar .search-form .input-group .input-group-btn .btn.submit > i {\n  color: #999999;\n}\n.page-header.navbar .search-form.open {\n  background: #393939;\n}\n.page-header.navbar .menu-toggler {\n  background-image: url(../images/sidebar_toggler_icon_default.png);\n}\n\n/* Default Horizontal Menu */\n.page-header.navbar {\n  /* Default Mega Menu */\n  /* Light Mega Menu */\n}\n.page-header.navbar .hor-menu .navbar-nav {\n  /* Mega menu content */\n  /* Classic menu */\n}\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu {\n  box-shadow: 5px 5px rgba(57, 57, 57, 0.2);\n}\n.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > h3 {\n  color: #c5c5c5;\n}\n.page-header.navbar .hor-menu .navbar-nav > li > a {\n  color: #c5c5c5;\n}\n.page-header.navbar .hor-menu .navbar-nav > li > a > i {\n  color: #787878;\n}\n.page-header.navbar .hor-menu .navbar-nav > li.open > a,\n.page-header.navbar .hor-menu .navbar-nav > li > a:hover {\n  color: #d2d2d2;\n  background: #393939 !important;\n}\n.page-header.navbar .hor-menu .navbar-nav > li.open > a > i,\n.page-header.navbar .hor-menu .navbar-nav > li > a:hover > i {\n  color: #858585;\n}\n.page-header.navbar .hor-menu .navbar-nav > li.active > a,\n.page-header.navbar .hor-menu .navbar-nav > li.active > a, .page-header.navbar .hor-menu .navbar-nav > li.current > a,\n.page-header.navbar .hor-menu .navbar-nav > li.current > a {\n  color: white;\n  background: #d64635 !important;\n}\n.page-header.navbar .hor-menu .navbar-nav > li.active > a > i,\n.page-header.navbar .hor-menu .navbar-nav > li.active > a > i, .page-header.navbar .hor-menu .navbar-nav > li.current > a > i,\n.page-header.navbar .hor-menu .navbar-nav > li.current > a > i {\n  color: #787878;\n}\n.page-header.navbar .hor-menu .navbar-nav > li.active .selected, .page-header.navbar .hor-menu .navbar-nav > li.current .selected {\n  border-top: 6px solid #d64635;\n}\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu {\n  box-shadow: 5px 5px rgba(57, 57, 57, 0.2);\n  background: #393939;\n}\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a {\n  color: #b8b8b8;\n}\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a > i {\n  color: #b8b8b8;\n}\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li:hover > a {\n  color: gainsboro;\n  background: #434343;\n}\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li:hover > a > i {\n  color: gainsboro;\n}\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a,\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a:hover, .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a,\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a:hover {\n  color: gainsboro;\n  background: #434343;\n}\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a > i,\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a:hover > i, .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a > i,\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a:hover > i {\n  color: gainsboro;\n}\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.divider {\n  background-color: #454545;\n}\n.page-header.navbar .hor-menu .navbar-nav > li .dropdown-submenu > a:after {\n  color: #b8b8b8;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav {\n  /* Mega menu content */\n  /* Classic menu */\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.mega-menu-dropdown > .dropdown-menu {\n  box-shadow: 5px 5px rgba(102, 102, 102, 0.1);\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > h3 {\n  color: #666;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a {\n  color: #c5c5c5;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a > i {\n  color: #787878;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a:hover {\n  color: #d2d2d2;\n  background: #393939;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a:hover > i {\n  color: #858585;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.open > a {\n  color: #333 !important;\n  background: white !important;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.open > a > i {\n  color: #333 !important;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a,\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a:hover, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a,\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a:hover {\n  color: white;\n  background: #d64635;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a > i,\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a:hover > i, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a > i,\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a:hover > i {\n  color: #787878;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu {\n  box-shadow: 5px 5px rgba(102, 102, 102, 0.1);\n  background: white;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li > a {\n  color: #000;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li > a > i {\n  color: #888;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li:hover > a {\n  color: #000;\n  background: #f2f2f7;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li:hover > a > i {\n  color: #666;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a,\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a:hover, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a,\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a:hover {\n  color: #000;\n  background: #f2f2f7;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a > i,\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a:hover > i, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a > i,\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a:hover > i {\n  color: #666;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.divider {\n  background-color: #f2f2f7;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu {\n  border: 1px solid #efeff5;\n}\n.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > .dropdown-menu {\n  border-top: 0;\n}\n\n/* Page sidebar */\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover,\n.page-sidebar {\n  background-color: #3d3d3d;\n  /* Default sidebar */\n  /* light sidebar */\n  /* Sidebar search */\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu,\n.page-sidebar .page-sidebar-menu {\n  /* 1st level links */\n  /* All links */\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a,\n.page-sidebar .page-sidebar-menu > li > a {\n  border-top: 1px solid #484848;\n  color: #d9d9d9;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i,\n.page-sidebar .page-sidebar-menu > li > a > i {\n  color: #888888;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i[class^=\"icon-\"],\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i[class*=\"icon-\"],\n.page-sidebar .page-sidebar-menu > li > a > i[class^=\"icon-\"],\n.page-sidebar .page-sidebar-menu > li > a > i[class*=\"icon-\"] {\n  color: #959595;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > .arrow.open:before,\n.page-sidebar .page-sidebar-menu > li > a > .arrow:before,\n.page-sidebar .page-sidebar-menu > li > a > .arrow.open:before {\n  color: #777777;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading > h3,\n.page-sidebar .page-sidebar-menu > li.heading > h3 {\n  color: #9e9e9e;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a,\n.page-sidebar .page-sidebar-menu > li:hover > a,\n.page-sidebar .page-sidebar-menu > li.open > a {\n  background: #303030;\n  color: #d9d9d9;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a > i,\n.page-sidebar .page-sidebar-menu > li:hover > a > i,\n.page-sidebar .page-sidebar-menu > li.open > a > i {\n  color: #888888;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a > .arrow.open:before,\n.page-sidebar .page-sidebar-menu > li:hover > a > .arrow:before,\n.page-sidebar .page-sidebar-menu > li:hover > a > .arrow.open:before,\n.page-sidebar .page-sidebar-menu > li.open > a > .arrow:before,\n.page-sidebar .page-sidebar-menu > li.open > a > .arrow.open:before {\n  color: #888888;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a,\n.page-sidebar .page-sidebar-menu > li.active > a,\n.page-sidebar .page-sidebar-menu > li.active.open > a {\n  background: #d64635;\n  border-top-color: transparent;\n  color: #ffffff;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a:hover, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a:hover,\n.page-sidebar .page-sidebar-menu > li.active > a:hover,\n.page-sidebar .page-sidebar-menu > li.active.open > a:hover {\n  background: #d64635;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a > i,\n.page-sidebar .page-sidebar-menu > li.active > a > i,\n.page-sidebar .page-sidebar-menu > li.active.open > a > i {\n  color: #ffffff;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a > .arrow.open:before,\n.page-sidebar .page-sidebar-menu > li.active > a > .arrow:before,\n.page-sidebar .page-sidebar-menu > li.active > a > .arrow.open:before,\n.page-sidebar .page-sidebar-menu > li.active.open > a > .arrow:before,\n.page-sidebar .page-sidebar-menu > li.active.open > a > .arrow.open:before {\n  color: #ffffff;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active + li > a,\n.page-sidebar .page-sidebar-menu > li.active + li > a {\n  border-top-color: transparent;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open + li > a,\n.page-sidebar .page-sidebar-menu > li.active.open + li > a {\n  border-top-color: #484848;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:last-child > a,\n.page-sidebar .page-sidebar-menu > li:last-child > a {\n  border-bottom: 1px solid transparent !important;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow.open:before,\n.page-sidebar .page-sidebar-menu li > a > .arrow:before,\n.page-sidebar .page-sidebar-menu li > a > .arrow.open:before {\n  color: #777777;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li:hover > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li:hover > a > .arrow.open:before,\n.page-sidebar .page-sidebar-menu li:hover > a > .arrow:before,\n.page-sidebar .page-sidebar-menu li:hover > a > .arrow.open:before {\n  color: #888888;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active > a > .arrow.open:before,\n.page-sidebar .page-sidebar-menu li.active > a > .arrow:before,\n.page-sidebar .page-sidebar-menu li.active > a > .arrow.open:before {\n  color: #ffffff;\n}\n.page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu:hover .sub-menu, .page-sidebar-closed\n.page-sidebar .page-sidebar-menu:hover .sub-menu {\n  background-color: #3d3d3d;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a,\n.page-sidebar .page-sidebar-menu .sub-menu > li > a {\n  color: #bdbdbd;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > i,\n.page-sidebar .page-sidebar-menu .sub-menu > li > a > i {\n  color: #777777;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > i[class^=\"icon-\"],\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > i[class*=\"icon-\"],\n.page-sidebar .page-sidebar-menu .sub-menu > li > a > i[class^=\"icon-\"],\n.page-sidebar .page-sidebar-menu .sub-menu > li > a > i[class*=\"icon-\"] {\n  color: #959595;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > .arrow.open:before,\n.page-sidebar .page-sidebar-menu .sub-menu > li > a > .arrow:before,\n.page-sidebar .page-sidebar-menu .sub-menu > li > a > .arrow.open:before {\n  color: #777777;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a,\n.page-sidebar .page-sidebar-menu .sub-menu > li:hover > a,\n.page-sidebar .page-sidebar-menu .sub-menu > li.open > a,\n.page-sidebar .page-sidebar-menu .sub-menu > li.active > a {\n  background: #474747 !important;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a > i,\n.page-sidebar .page-sidebar-menu .sub-menu > li:hover > a > i,\n.page-sidebar .page-sidebar-menu .sub-menu > li.open > a > i,\n.page-sidebar .page-sidebar-menu .sub-menu > li.active > a > i {\n  color: #888888;\n  color: #bbbbbb;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a > .arrow.open:before,\n.page-sidebar .page-sidebar-menu .sub-menu > li:hover > a > .arrow:before,\n.page-sidebar .page-sidebar-menu .sub-menu > li:hover > a > .arrow.open:before,\n.page-sidebar .page-sidebar-menu .sub-menu > li.open > a > .arrow:before,\n.page-sidebar .page-sidebar-menu .sub-menu > li.open > a > .arrow.open:before,\n.page-sidebar .page-sidebar-menu .sub-menu > li.active > a > .arrow:before,\n.page-sidebar .page-sidebar-menu .sub-menu > li.active > a > .arrow.open:before {\n  color: #888888;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light {\n  /* 1st level links */\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.open > a,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li:hover > a,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.open > a {\n  background: #424242;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a {\n  background: #474747;\n  border-left: 4px solid #d64635;\n  color: #f1f1f1;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover {\n  border-left: 4px solid #d64635;\n  background: #424242;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > i,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a > i,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > i {\n  color: #eeeeee;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow.open:before,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow:before,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow.open:before,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow:before,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow.open:before {\n  color: #eeeeee;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu {\n  background: #424242;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.open > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.active > a,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li:hover > a,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.open > a,\n.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.active > a {\n  background: #474747 !important;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler,\n.page-sidebar .sidebar-toggler {\n  background: url(../images/sidebar_inline_toggler_icon_default.jpg);\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group,\n.page-sidebar .sidebar-search .input-group {\n  border-bottom: 1px solid #484848;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control,\n.page-sidebar .sidebar-search .input-group .form-control {\n  background-color: #3d3d3d;\n  color: #5c5c5c;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control::-moz-placeholder,\n.page-sidebar .sidebar-search .input-group .form-control::-moz-placeholder {\n  color: #5c5c5c;\n  opacity: 1;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control:-ms-input-placeholder,\n.page-sidebar .sidebar-search .input-group .form-control:-ms-input-placeholder {\n  color: #5c5c5c;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control::-webkit-input-placeholder,\n.page-sidebar .sidebar-search .input-group .form-control::-webkit-input-placeholder {\n  color: #5c5c5c;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn > i,\n.page-sidebar .sidebar-search .input-group .input-group-btn .btn > i {\n  color: #5c5c5c;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group,\n.page-sidebar .sidebar-search.sidebar-search-bordered .input-group {\n  border: 1px solid #484848;\n}\n.page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.open .input-group, .page-sidebar-closed\n.page-sidebar .sidebar-search.open .input-group {\n  background-color: #3d3d3d;\n}\n.page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.open .remove > i, .page-sidebar-closed\n.page-sidebar .sidebar-search.open .remove > i {\n  color: #5c5c5c;\n}\n.page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group, .page-sidebar-closed\n.page-sidebar .sidebar-search.sidebar-search-solid .input-group {\n  background: none;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group,\n.page-sidebar .sidebar-search.sidebar-search-solid .input-group {\n  border: 1px solid #303030;\n  background: #303030;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group .form-control,\n.page-sidebar .sidebar-search.sidebar-search-solid .input-group .form-control {\n  background: #303030;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid.open .input-group,\n.page-sidebar .sidebar-search.sidebar-search-solid.open .input-group {\n  border: 1px solid #3d3d3d;\n  background: #3d3d3d;\n}\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid.open .input-group .form-control,\n.page-sidebar .sidebar-search.sidebar-search-solid.open .input-group .form-control {\n  background: #3d3d3d;\n}\n\n.page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light {\n  /* 1st level links */\n}\n.page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active > a, .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a {\n  border-left: 0;\n  border-right: 4px solid #d64635;\n}\n.page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover, .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover {\n  border-left: 0;\n  border-right: 4px solid #d64635;\n}\n\n/*************\nQuick Sidebar\n*************/\n/***\nQuick Sidebar Layout\n***/\n.page-quick-sidebar-wrapper {\n  background: #393939;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar {\n  background: #393939;\n}\n\n/*** \nQuick Sidebar Toggler \n***/\n.page-quick-sidebar-toggler {\n  background: #525252;\n}\n.page-quick-sidebar-toggler:hover {\n  background: #4a4a4a;\n}\n.page-quick-sidebar-toggler > i {\n  color: #a2a2a2;\n}\n\n/***\nQuick Sidebar Content\n***/\n.page-quick-sidebar-wrapper {\n  color: #a2a2a2;\n  /* Quick sidebar chat */\n  /* Quick sidebar alerts */\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar {\n  /* Quick sidebar tabs */\n  /* Quick sidebar general list heading */\n  /* Quick sidebar general list-items */\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li > a {\n  color: #9a9a9a;\n  background: #525252;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li > a:hover {\n  background: #454545;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li.open > a {\n  color: #9a9a9a;\n  background: #525252;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li.active > a {\n  border: 0;\n  background: #393939;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu {\n  border: 0;\n  background: #525252;\n  box-shadow: 5px 5px rgba(133, 133, 133, 0.1);\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu:before {\n  border-bottom: 7px solid #525252;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu:after {\n  border-bottom: 7px solid #525252;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu > li > a {\n  color: #a2a2a2;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu > li > a > i {\n  color: #9c9c9c;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu > li > a:hover {\n  background: #5a5a5a;\n  color: #a2a2a2;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu > li > a:hover > i {\n  color: #a4a4a4;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu > li.active > a {\n  background: #555555;\n  color: #a2a2a2;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu > li.divider {\n  background-color: #5a5a5a;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .list-heading {\n  color: #7b7b7b;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .list-items {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .list-items > li {\n  border-bottom-color: #404040;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar .list-items > li:hover {\n  background: #404040;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar-item {\n  /* back to list */\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list {\n  color: #9a9a9a;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-sub {\n  color: #747474;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-small {\n  color: dimgray;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .name {\n  color: #909090;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .datetime {\n  color: #909090;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .message {\n  color: #9a9a9a;\n  background: #525252;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .message .arrow {\n  border-right-color: #525252;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .message .arrow {\n  border-left-color: #525252;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li a {\n  color: #8b8b8b;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li a .desc {\n  text-decoration: underline;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li .desc {\n  color: #858585;\n}\n.page-quick-sidebar-wrapper .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li .date {\n  color: dimgray;\n}\n\n/******\nPage Footer \n******/\n.page-footer .page-footer-inner {\n  color: #a3a3a3;\n}\n.page-footer-fixed .page-footer {\n  background-color: #2b2b2b;\n}\n\n@media (min-width: 992px) {\n  /* 992px */\n  /* Sidebar menu closed */\n  .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu {\n    box-shadow: 5px 5px rgba(48, 48, 48, 0.2);\n  }\n  .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu.sidebar-toggler-wrapper, .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu.sidebar-search-wrapper {\n    box-shadow: none;\n  }\n\n  .page-sidebar-menu.page-sidebar-menu-closed > li:hover {\n    box-shadow: 5px 5px rgba(48, 48, 48, 0.2);\n  }\n  .page-sidebar-menu.page-sidebar-menu-closed > li:hover.sidebar-toggler-wrapper, .page-sidebar-menu.page-sidebar-menu-closed > li:hover.sidebar-search-wrapper {\n    box-shadow: none;\n  }\n  .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu {\n    box-shadow: 5px 5px rgba(48, 48, 48, 0.2);\n  }\n  .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu.sidebar-toggler-wrapper, .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu.sidebar-search-wrapper {\n    box-shadow: none;\n  }\n\n  /* Light sidebar menu */\n  .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed > li.heading {\n    padding: 0;\n    margin-top: 15px;\n    margin-bottom: 15px;\n    border-top: 1px solid #484848 !important;\n  }\n\n  /* Fixed Sidebar */\n  .page-sidebar-fixed:not(.page-footer-fixed) .page-content {\n    border-bottom: 0;\n  }\n  .page-sidebar-fixed:not(.page-footer-fixed) .page-footer {\n    background-color: #fff;\n  }\n  .page-sidebar-fixed:not(.page-footer-fixed) .page-footer .page-footer-inner {\n    color: #333;\n  }\n\n  /* Boxed Layout */\n  .page-boxed {\n    background-color: #353535 !important;\n    /* Page container */\n    /* Page sidebar */\n    /* Page footer */\n  }\n  .page-boxed .page-container {\n    background-color: #3d3d3d;\n    border-left: 1px solid #484848;\n    border-bottom: 1px solid #484848;\n  }\n  .page-boxed.page-sidebar-reversed .page-container {\n    border-left: 0;\n    border-right: 1px solid #484848;\n  }\n  .page-boxed.page-sidebar-fixed .page-container {\n    border-left: 0;\n    border-bottom: 0;\n  }\n  .page-boxed.page-sidebar-reversed.page-sidebar-fixed .page-container {\n    border-left: 0;\n    border-right: 0;\n    border-bottom: 0;\n  }\n  .page-boxed.page-sidebar-fixed .page-sidebar {\n    border-left: 1px solid #484848;\n  }\n  .page-boxed.page-sidebar-reversed.page-sidebar-fixed .page-sidebar {\n    border-right: 1px solid #484848;\n    border-left: 0;\n  }\n  .page-boxed.page-sidebar-fixed.page-footer-fixed .page-footer {\n    background-color: #353535 !important;\n  }\n  .page-boxed.page-sidebar-fixed.page-footer-fixed .page-footer .page-footer-inner {\n    color: #a3a3a3;\n  }\n\n  /* Sidebar Menu Wirh Hoverable Submenu */\n  .page-sidebar-menu-hover-submenu li:hover a > .arrow {\n    border-right: 8px solid #3a3a3a;\n  }\n  .page-sidebar-reversed .page-sidebar-menu-hover-submenu li:hover a > .arrow {\n    border-left: 8px solid #3a3a3a;\n  }\n  .page-sidebar-menu-hover-submenu li:hover > .sub-menu {\n    background: #3a3a3a !important;\n  }\n}\n@media (max-width: 991px) {\n  /* 991px */\n  /* Page sidebar */\n  .page-sidebar {\n    background-color: #2b2b2b;\n    /* light sidebar */\n  }\n  .page-sidebar .page-sidebar-menu > li > a {\n    border-top: 1px solid #3d3d3d;\n  }\n  .page-sidebar .page-sidebar-menu > li:hover > a, .page-sidebar .page-sidebar-menu > li.open > a {\n    background: #333333;\n  }\n  .page-sidebar .page-sidebar-menu > li:last-child > a {\n    border-bottom: 0 !important;\n  }\n  .page-sidebar .page-sidebar-menu > li .sub-menu {\n    background-color: #2b2b2b !important;\n  }\n  .page-sidebar .page-sidebar-menu .sidebar-search input {\n    background-color: #2b2b2b !important;\n  }\n  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light {\n    /* 1st level links */\n  }\n  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li:hover > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.open > a {\n    background: #333333;\n  }\n  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a {\n    background: #333333;\n  }\n  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover {\n    background: #333333;\n  }\n  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu {\n    background: #2b2b2b !important;\n  }\n  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li:hover > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.open > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.active > a {\n    background: #333333 !important;\n  }\n}\n@media (max-width: 480px) {\n  /* 480px */\n  .page-header.navbar {\n    /* Top menu */\n  }\n  .page-header.navbar .top-menu {\n    background-color: #3d3d3d;\n  }\n  .page-header-fixed-mobile .page-header.navbar .top-menu {\n    background-color: #1f1f1f;\n  }\n  .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle {\n    background-color: #3b3b3b;\n  }\n  .page-header-fixed-mobile .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle {\n    background: none;\n  }\n  .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle:hover {\n    background-color: #393939;\n  }\n}\n/****\nBoby\n****/\nbody {\n  background-color: #3d3d3d;\n}\n\n/****\n CSS3 Spinner Bar\n****/\n.page-spinner-bar > div,\n.block-spinner-bar > div {\n  background: #da594a;\n}\n"
  },
  {
    "path": "public/quickadmin/css/textext.core.css",
    "content": ".text-core {\n  position: relative;\n}\n.text-core .text-wrap {\n  background: #fff;\n  position: absolute;\n}\n.text-core .text-wrap textarea,\n.text-core .text-wrap input {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  -webkit-border-radius: 0px;\n  -moz-border-radius: 0px;\n  border-radius: 0px;\n  border: 1px solid #9daccc;\n  outline: none;\n  resize: none;\n  position: absolute;\n  z-index: 1;\n  background: none;\n  overflow: hidden;\n  margin: 0;\n  padding: 3px 5px 4px 5px;\n  white-space: nowrap;\n  font: 11px \"lucida grande\", tahoma, verdana, arial, sans-serif;\n  line-height: 13px;\n  height: auto;\n}\n"
  },
  {
    "path": "public/quickadmin/css/textext.plugin.tags.css",
    "content": ".text-core .text-wrap .text-tags {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  padding: 3px 35px 3px 3px;\n  cursor: text;\n}\n.text-core .text-wrap .text-tags.text-tags-on-top {\n  z-index: 2;\n}\n.text-core .text-wrap .text-tags .text-tag {\n  float: left;\n}\n.text-core .text-wrap .text-tags .text-tag .text-button {\n  -webkit-border-radius: 2px;\n  -moz-border-radius: 2px;\n  border-radius: 2px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  position: relative;\n  float: left;\n  border: 1px solid #9daccc;\n  background: #e2e6f0;\n  color: #000;\n  padding: 0px 17px 0px 3px;\n  margin: 0 2px 2px 0;\n  cursor: pointer;\n  height: 16px;\n  font: 11px \"lucida grande\", tahoma, verdana, arial, sans-serif;\n}\n.text-core .text-wrap .text-tags .text-tag .text-button a.text-remove {\n  position: absolute;\n  right: 3px;\n  top: 2px;\n  display: block;\n  width: 11px;\n  height: 11px;\n  background: url(\"close.png\") 0 0 no-repeat;\n}\n.text-core .text-wrap .text-tags .text-tag .text-button a.text-remove:hover {\n  background-position: 0 -11px;\n}\n.text-core .text-wrap .text-tags .text-tag .text-button a.text-remove:active {\n  background-position: 0 -22px;\n}\n"
  },
  {
    "path": "public/quickadmin/js/main.js",
    "content": "$(document).ready(function () {\n\n    var handleCheckboxes = function (html, rowIndex, colIndex, cellNode) {\n        var $cellNode = $(cellNode);\n        var $check = $cellNode.find(':checked');\n        return ($check.length) ? ($check.val() == 1 ? 'Yes' : 'No') : $cellNode.text();\n    };\n\n    var activeSub = $(document).find('.active-sub');\n    if (activeSub.length > 0) {\n        activeSub.parent().show();\n        activeSub.parent().parent().find('.arrow').addClass('open');\n        activeSub.parent().parent().addClass('open');\n    }\n    window.dtDefaultOptions = {\n        retrieve: true,\n        dom: 'lBfrtip<\"actions\">',\n        columnDefs: [],\n        \"iDisplayLength\": 100,\n        \"aaSorting\": [],\n        buttons: [\n            {\n                extend: 'copy',\n                text: window.copyButtonTrans,\n                exportOptions: {\n                    columns: ':visible'\n                }\n            },\n            {\n                extend: 'csv',\n                text: window.csvButtonTrans,\n                exportOptions: {\n                    columns: ':visible'\n                }\n            },\n            {\n                extend: 'excel',\n                text: window.excelButtonTrans,\n                exportOptions: {\n                    columns: ':visible'\n                }\n            },\n            {\n                extend: 'pdf',\n                text: window.pdfButtonTrans,\n                exportOptions: {\n                    columns: ':visible'\n                }\n            },\n            {\n                extend: 'print',\n                text: window.printButtonTrans,\n                exportOptions: {\n                    columns: ':visible'\n                }\n            },\n            {\n                extend: 'colvis',\n                text: window.colvisButtonTrans,\n                exportOptions: {\n                    columns: ':visible'\n                }\n            },\n        ]\n    };\n    $('.datatable').each(function () {\n        if ($(this).hasClass('dt-select')) {\n            window.dtDefaultOptions.select = {\n                style: 'multi',\n                selector: 'td:first-child'\n            };\n\n            window.dtDefaultOptions.columnDefs.push({\n                orderable: false,\n                className: 'select-checkbox',\n                targets: 0\n            });\n        }\n        $(this).dataTable(window.dtDefaultOptions);\n    });\n    $(document).on( 'init.dt', function ( e, settings ) {\n        if (typeof window.route_mass_crud_entries_destroy != 'undefined') {\n            $('.datatable, .ajaxTable').siblings('.actions').html('<a href=\"' + window.route_mass_crud_entries_destroy + '\" class=\"btn btn-xs btn-danger js-delete-selected\" style=\"margin-top:0.755em;margin-left: 20px;\">'+window.deleteButtonTrans+'</a>');\n        }\n    });\n\n    $(document).on('click', '.js-delete-selected', function () {\n        if (confirm('Are you sure')) {\n            var ids = [];\n\n            $(this).closest('.actions').siblings('.datatable, .ajaxTable').find('tbody tr.selected').each(function () {\n                console.log(\"selected\", $(this).data('entry-id'));\n                ids.push($(this).data('entry-id'));\n            });\n\n            $.ajax({\n                method: 'POST',\n                url: $(this).attr('href'),\n                data: {\n                    _token: _token,\n                    ids: ids\n                }\n            }).done(function () {\n                location.reload();\n            });\n        }\n\n        return false;\n    });\n\n    $(document).on('click', '#select-all', function () {\n        var selected = $(this).is(':checked');\n\n        $(this).closest('table.datatable, table.ajaxTable').find('td:first-child').each(function () {\n            if (selected != $(this).closest('tr').hasClass('selected')) {\n                $(this).click();\n            }\n        });\n    });\n\n    $('.mass').click(function () {\n        if ($(this).is(\":checked\")) {\n            $('.single').each(function () {\n                if ($(this).is(\":checked\") == false) {\n                    $(this).click();\n                }\n            });\n        } else {\n            $('.single').each(function () {\n                if ($(this).is(\":checked\") == true) {\n                    $(this).click();\n                }\n            });\n        }\n    });\n\n    $('.page-sidebar').on('click', 'li > a', function (e) {\n\n        if ($('body').hasClass('page-sidebar-closed') && $(this).parent('li').parent('.page-sidebar-menu').size() === 1) {\n            return;\n        }\n\n        var hasSubMenu = $(this).next().hasClass('sub-menu');\n\n        if ($(this).next().hasClass('sub-menu always-open')) {\n            return;\n        }\n\n        var parent = $(this).parent().parent();\n        var the = $(this);\n        var menu = $('.page-sidebar-menu');\n        var sub = $(this).next();\n\n        var autoScroll = menu.data(\"auto-scroll\");\n        var slideSpeed = parseInt(menu.data(\"slide-speed\"));\n        var keepExpand = menu.data(\"keep-expanded\");\n\n        if (keepExpand !== true) {\n            parent.children('li.open').children('a').children('.arrow').removeClass('open');\n            parent.children('li.open').children('.sub-menu:not(.always-open)').slideUp(slideSpeed);\n            parent.children('li.open').removeClass('open');\n        }\n\n        var slideOffeset = -200;\n\n        if (sub.is(\":visible\")) {\n            $('.arrow', $(this)).removeClass(\"open\");\n            $(this).parent().removeClass(\"open\");\n            sub.slideUp(slideSpeed, function () {\n                if (autoScroll === true && $('body').hasClass('page-sidebar-closed') === false) {\n                    if ($('body').hasClass('page-sidebar-fixed')) {\n                        menu.slimScroll({\n                            'scrollTo': (the.position()).top\n                        });\n                    }\n                }\n            });\n        } else if (hasSubMenu) {\n            $('.arrow', $(this)).addClass(\"open\");\n            $(this).parent().addClass(\"open\");\n            sub.slideDown(slideSpeed, function () {\n                if (autoScroll === true && $('body').hasClass('page-sidebar-closed') === false) {\n                    if ($('body').hasClass('page-sidebar-fixed')) {\n                        menu.slimScroll({\n                            'scrollTo': (the.position()).top\n                        });\n                    }\n                }\n            });\n        }\n        if (hasSubMenu == true || $(this).attr('href') == '#') {\n            e.preventDefault();\n        }\n    });\n\n    $('.select2').select2();\n\n});\n\nfunction processAjaxTables() {\n    $('.ajaxTable').each(function () {\n        window.dtDefaultOptions.processing = true;\n        window.dtDefaultOptions.serverSide = true;\n        if ($(this).hasClass('dt-select')) {\n            window.dtDefaultOptions.select = {\n                style: 'multi',\n                selector: 'td:first-child'\n            };\n\n            window.dtDefaultOptions.columnDefs.push({\n                orderable: false,\n                className: 'select-checkbox',\n                targets: 0\n            });\n        }\n        $(this).DataTable(window.dtDefaultOptions);\n        if (typeof window.route_mass_crud_entries_destroy != 'undefined') {\n            $(this).siblings('.actions').html('<a href=\"' + window.route_mass_crud_entries_destroy + '\" class=\"btn btn-xs btn-danger js-delete-selected\" style=\"margin-top:0.755em;margin-left: 20px;\">'+window.deleteButtonTrans+'</a>');\n        }\n    });\n\n}\n"
  },
  {
    "path": "public/quickadmin/js/textext.core.js",
    "content": "/**\n * jQuery TextExt Plugin\n * http://textextjs.com\n *\n * @version 1.3.1\n * @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.\n * @license MIT License\n */\n(function($, undefined)\n{\n\t/**\n\t * TextExt is the main core class which by itself doesn't provide any functionality\n\t * that is user facing, however it has the underlying mechanics to bring all the\n\t * plugins together under one roof and make them work with each other or on their\n\t * own.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt\n\t */\n\tfunction TextExt() {};\n\n\t/**\n\t * ItemManager is used to seamlessly convert between string that come from the user input to whatever \n\t * the format the item data is being passed around in. It's used by all plugins that in one way or \n\t * another operate with items, such as Tags, Filter, Autocomplete and Suggestions. Default implementation \n\t * works with `String` type. \n\t *\n\t * Each instance of `TextExt` creates a new instance of default implementation of `ItemManager`\n\t * unless `itemManager` option was set to another implementation.\n\t *\n\t * To satisfy requirements of managing items of type other than a `String`, different implementation\n\t * if `ItemManager` should be supplied.\n\t *\n\t * If you wish to bring your own implementation, you need to create a new class and implement all the \n\t * methods that `ItemManager` has. After, you need to supply your pass via the `itemManager` option during\n\t * initialization like so:\n\t *\n\t *     $('#input').textext({\n\t *         itemManager : CustomItemManager\n\t *     })\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id ItemManager\n\t */\n\tfunction ItemManager() {};\n\n\t/**\n\t * TextExtPlugin is a base class for all plugins. It provides common methods which are reused\n\t * by majority of plugins.\n\t *\n\t * All plugins must register themselves by calling the `$.fn.textext.addPlugin(name, constructor)`\n\t * function while providing plugin name and constructor. The plugin name is the same name that user\n\t * will identify the plugin in the `plugins` option when initializing TextExt component and constructor\n\t * function will create a new instance of the plugin. *Without registering, the core won't\n\t * be able to see the plugin.*\n\t *\n\t * <span class=\"new label version\">new in 1.2.0</span> You can get instance of each plugin from the core \n\t * via associated function with the same name as the plugin. For example:\n\t *\n\t *     $('#input').textext()[0].tags()\n\t *     $('#input').textext()[0].autocomplete()\n\t *     ...\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin\n\t */\n\tfunction TextExtPlugin() {};\n\n\tvar stringify = (JSON || {}).stringify,\n\t\tslice     = Array.prototype.slice,\n\t\tp,\n\t\tUNDEFINED = 'undefined',\n\n\t\t/**\n\t\t * TextExt provides a way to pass in the options to configure the core as well as\n\t\t * each plugin that is being currently used. The jQuery exposed plugin `$().textext()` \n\t\t * function takes a hash object with key/value set of options. For example:\n\t\t *\n\t\t *     $('textarea').textext({\n\t\t *         enabled: true\n\t\t *     })\n\t\t *\n\t\t * There are multiple ways of passing in the options:\n\t\t *\n\t\t * 1. Options could be nested multiple levels deep and accessed using all lowercased, dot\n\t\t * separated style, eg `foo.bar.world`. The manual is using this style for clarity and\n\t\t * consistency. For example:\n\t\t *\n\t\t *        {\n\t\t *            item: {\n\t\t *                manager: ...\n\t\t *            },\n\t\t *\n\t\t *            html: {\n\t\t *                wrap: ...\n\t\t *            },\n\t\t *\n\t\t *            autocomplete: {\n\t\t *                enabled: ...,\n\t\t *                dropdown: {\n\t\t *                   position: ...\n\t\t *                }\n\t\t *            }\n\t\t *        }\n\t\t *\n\t\t * 2. Options could be specified using camel cased names in a flat key/value fashion like so:\n\t\t *\n\t\t *        {\n\t\t *            itemManager: ...,\n\t\t *            htmlWrap: ...,\n\t\t *            autocompleteEnabled: ...,\n\t\t *            autocompleteDropdownPosition: ...\n\t\t *        }\n\t\t *\n\t\t * 3. Finally, options could be specified in mixed style. It's important to understand that\n\t\t * for each dot separated name, its alternative in camel case is also checked for, eg for \n\t\t * `foo.bar.world` it's alternatives could be `fooBarWorld`, `foo.barWorld` or `fooBar.world`, \n\t\t * which translates to `{ foo: { bar: { world: ... } } }`, `{ fooBarWorld: ... }`, \n\t\t * `{ foo : { barWorld : ... } }` or `{ fooBar: { world: ... } }` respectively. For example:\n\t\t *\n\t\t *        {\n\t\t *            itemManager : ...,\n\t\t *            htmlWrap: ...,\n\t\t *            autocomplete: {\n\t\t *                enabled: ...,\n\t\t *                dropdownPosition: ...\n\t\t *            }\n\t\t *        }\n\t\t *\n\t\t * Mixed case is used through out the code, wherever it seems appropriate. However in the code, all option\n\t\t * names are specified in the dot notation because it works both ways where as camel case is not\n\t\t * being converted to its alternative dot notation.\n\t\t *\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/17\n\t\t * @id TextExt.options\n\t\t */\n\n\t\t/**\n\t\t * Default instance of `ItemManager` which takes `String` type as default for tags.\n\t\t *\n\t\t * @name item.manager\n\t\t * @default ItemManager\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.options.item.manager\n\t\t */\n\t\tOPT_ITEM_MANAGER = 'item.manager',\n\t\t\n\t\t/**\n\t\t * List of plugins that should be used with the current instance of TextExt. The list could be\n\t\t * specified as array of strings or as comma or space separated string.\n\t\t *\n\t\t * @name plugins\n\t\t * @default []\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.options.plugins\n\t\t */\n\t\tOPT_PLUGINS = 'plugins',\n\t\t\n\t\t/**\n\t\t * TextExt allows for overriding of virtually any method that the core or any of its plugins\n\t\t * use. This could be accomplished through the use of the `ext` option.\n\t\t *\n\t\t * It's possible to specifically target the core or any plugin, as well as overwrite all the\n\t\t * desired methods everywhere.\n\t\t *\n\t\t * 1. Targeting the core:\n\t\t *\n\t\t *        ext: {\n\t\t *            core: {\n\t\t *                trigger: function()\n\t\t *                {\n\t\t *                    console.log('TextExt.trigger', arguments);\n\t\t *                    $.fn.textext.TextExt.prototype.trigger.apply(this, arguments);\n\t\t *                }\n\t\t *            }\n\t\t *        }\n\t\t *\n\t\t * 2. Targeting individual plugins:\n\t\t *\n\t\t *        ext: {\n\t\t *            tags: {\n\t\t *                addTags: function(tags)\n\t\t *                {\n\t\t *                    console.log('TextExtTags.addTags', tags);\n\t\t *                    $.fn.textext.TextExtTags.prototype.addTags.apply(this, arguments);\n\t\t *                }\n\t\t *            }\n\t\t *        }\n\t\t *\n\t\t * 3. Targeting `ItemManager` instance:\n\t\t *\n\t\t *        ext: {\n\t\t *            itemManager: {\n\t\t *                stringToItem: function(str)\n\t\t *                {\n\t\t *                    console.log('ItemManager.stringToItem', str);\n\t\t *                    return $.fn.textext.ItemManager.prototype.stringToItem.apply(this, arguments);\n\t\t *                }\n\t\t *            }\n\t\t *        }\n\t\t *\n\t\t * 4. And finally, in edge cases you can extend everything at once:\n\t\t *\n\t\t *        ext: {\n\t\t *            '*': {\n\t\t *                fooBar: function() {}\n\t\t *            }\n\t\t *        }\n\t\t *\n\t\t * @name ext\n\t\t * @default {}\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.options.ext\n\t\t */\n\t\tOPT_EXT = 'ext',\n\t\t\n\t\t/**\n\t\t * HTML source that is used to generate elements necessary for the core and all other\n\t\t * plugins to function.\n\t\t *\n\t\t * @name html.wrap\n\t\t * @default '<div class=\"text-core\"><div class=\"text-wrap\"/></div>'\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.options.html.wrap\n\t\t */\n\t\tOPT_HTML_WRAP = 'html.wrap',\n\n\t\t/**\n\t\t * HTML source that is used to generate hidden input value of which will be submitted \n\t\t * with the HTML form.\n\t\t *\n\t\t * @name html.hidden\n\t\t * @default '<input type=\"hidden\" />'\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/20\n\t\t * @id TextExt.options.html.hidden\n\t\t */\n\t\tOPT_HTML_HIDDEN = 'html.hidden',\n\t\t\n\t\t/**\n\t\t * Hash table of key codes and key names for which special events will be created\n\t\t * by the core. For each entry a `[name]KeyDown`, `[name]KeyUp` and `[name]KeyPress` events \n\t\t * will be triggered along side with `anyKeyUp` and `anyKeyDown` events for every \n\t\t * key stroke.\n\t\t *\n\t\t * Here's a list of default keys:\n\t\t *\n\t\t *     {\n\t\t *         8   : 'backspace',\n\t\t *         9   : 'tab',\n\t\t *         13  : 'enter!',\n\t\t *         27  : 'escape!',\n\t\t *         37  : 'left',\n\t\t *         38  : 'up!',\n\t\t *         39  : 'right',\n\t\t *         40  : 'down!',\n\t\t *         46  : 'delete',\n\t\t *         108 : 'numpadEnter'\n\t\t *     }\n\t\t *\n\t\t * Please note the `!` at the end of some keys. This tells the core that by default\n\t\t * this keypress will be trapped and not passed on to the text input.\n\t\t *\n\t\t * @name keys\n\t\t * @default { ... }\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.options.keys\n\t\t */\n\t\tOPT_KEYS = 'keys',\n\n\t\t/**\n\t\t * The core triggers or reacts to the following events.\n\t\t *\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/17\n\t\t * @id TextExt.events\n\t\t */\n\n\t\t/**\n\t\t * Core triggers `preInvalidate` event before the dimensions of padding on the text input\n\t\t * are set.\n\t\t *\n\t\t * @name preInvalidate\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.preInvalidate\n\t\t */\n\t\tEVENT_PRE_INVALIDATE = 'preInvalidate',\n\n\t\t/**\n\t\t * Core triggers `postInvalidate` event after the dimensions of padding on the text input\n\t\t * are set.\n\t\t *\n\t\t * @name postInvalidate\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.postInvalidate\n\t\t */\n\t\tEVENT_POST_INVALIDATE = 'postInvalidate',\n\t\t\n\t\t/**\n\t\t * Core triggers `getFormData` on every key press to collect data that will be populated\n\t\t * into the hidden input that will be submitted with the HTML form and data that will\n\t\t * be displayed in the input field that user is currently interacting with.\n\t\t *\n\t\t * All plugins that wish to affect how the data is presented or sent must react to \n\t\t * `getFormData` and populate the data in the following format:\n\t\t *\n\t\t *     {\n\t\t *         input : {String},\n\t\t *         form  : {Object}\n\t\t *     }\n\t\t *\n\t\t * The data key must be a numeric weight which will be used to determine which data\n\t\t * ends up being used. Data with the highest numerical weight gets the priority. This\n\t\t * allows plugins to set the final data regardless of their initialization order, which\n\t\t * otherwise would be impossible.\n\t\t *\n\t\t * For example, the Tags and Autocomplete plugins have to work side by side and Tags\n\t\t * plugin must get priority on setting the data. Therefore the Tags plugin sets data\n\t\t * with the weight 200 where as the Autocomplete plugin sets data with the weight 100.\n\t\t *\n\t\t * Here's an example of a typical `getFormData` handler:\n\t\t * \n\t\t *     TextExtPlugin.prototype.onGetFormData = function(e, data, keyCode)\n\t\t *     {\n\t\t *         data[100] = self.formDataObject('input value', 'form value');\n\t\t *     };\n\t\t *\n\t\t * Core also reacts to the `getFormData` and updates hidden input with data which will be\n\t\t * submitted with the HTML form.\n\t\t *\n\t\t * @name getFormData\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.getFormData\n\t\t */\n\t\tEVENT_GET_FORM_DATA = 'getFormData',\n\n\t\t/**\n\t\t * Core triggers and reacts to the `setFormData` event to update the actual value in the\n\t\t * hidden input that will be submitted with the HTML form. Second argument can be value\n\t\t * of any type and by default it will be JSON serialized with `TextExt.serializeData()`\n\t\t * function.\n\t\t *\n\t\t * @name setFormData\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/22\n\t\t * @id TextExt.events.setFormData\n\t\t */\n\t\tEVENT_SET_FORM_DATA = 'setFormData',\n\n\t\t/**\n\t\t * Core triggers and reacts to the `setInputData` event to update the actual value in the\n\t\t * text input that user is interacting with. Second argument must be of a `String` type\n\t\t * the value of which will be set into the text input.\n\t\t *\n\t\t * @name setInputData\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/22\n\t\t * @id TextExt.events.setInputData\n\t\t */\n\t\tEVENT_SET_INPUT_DATA = 'setInputData',\n\t\t\n\t\t/**\n\t\t * Core triggers `postInit` event to let plugins run code after all plugins have been \n\t\t * created and initialized. This is a good place to set some kind of global values before \n\t\t * somebody gets to use them. This is not the right place to expect all plugins to finish\n\t\t * their initialization.\n\t\t *\n\t\t * @name postInit\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.postInit\n\t\t */\n\t\tEVENT_POST_INIT = 'postInit',\n\n\t\t/**\n\t\t * Core triggers `ready` event after all global configuration and prepearation has been\n\t\t * done and the TextExt component is ready for use. Event handlers should expect all \n\t\t * values to be set and the plugins to be in the final state.\n\t\t *\n\t\t * @name ready\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.ready\n\t\t */\n\t\tEVENT_READY = 'ready',\n\n\t\t/**\n\t\t * Core triggers `anyKeyUp` event for every key up event triggered within the component.\n\t\t *\n\t\t * @name anyKeyUp\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.anyKeyUp\n\t\t */\n\n\t\t/**\n\t\t * Core triggers `anyKeyDown` event for every key down event triggered within the component.\n\t\t *\n\t\t * @name anyKeyDown\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.anyKeyDown\n\t\t */\n\n\t\t/**\n\t\t * Core triggers `[name]KeyUp` event for every key specifid in the `keys` option that is \n\t\t * triggered within the component.\n\t\t *\n\t\t * @name [name]KeyUp\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.[name]KeyUp\n\t\t */\n\n\t\t/**\n\t\t * Core triggers `[name]KeyDown` event for every key specified in the `keys` option that is \n\t\t * triggered within the component.\n\t\t *\n\t\t * @name [name]KeyDown\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.[name]KeyDown\n\t\t */\n\n\t\t/**\n\t\t * Core triggers `[name]KeyPress` event for every key specified in the `keys` option that is \n\t\t * triggered within the component.\n\t\t *\n\t\t * @name [name]KeyPress\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExt.events.[name]KeyPress\n\t\t */\n\n\t\tDEFAULT_OPTS = {\n\t\t\titemManager : ItemManager,\n\n\t\t\tplugins : [],\n\t\t\text : {},\n\n\t\t\thtml : {\n\t\t\t\twrap   : '<div class=\"text-core\"><div class=\"text-wrap\"/></div>',\n\t\t\t\thidden : '<input type=\"hidden\" />'\n\t\t\t},\n\n\t\t\tkeys : {\n\t\t\t\t8   : 'backspace',\n\t\t\t\t9   : 'tab',\n\t\t\t\t13  : 'enter!',\n\t\t\t\t27  : 'escape!',\n\t\t\t\t37  : 'left',\n\t\t\t\t38  : 'up!',\n\t\t\t\t39  : 'right',\n\t\t\t\t40  : 'down!',\n\t\t\t\t46  : 'delete',\n\t\t\t\t108 : 'numpadEnter'\n\t\t\t}\n\t\t}\n\t\t;\n\n\t// Freak out if there's no JSON.stringify function found\n\tif(!stringify)\n\t\tthrow new Error('JSON.stringify() not found');\n\n\t/**\n\t * Returns object property by name where name is dot-separated and object is multiple levels deep.\n\t * @param target Object Source object.\n\t * @param name String Dot separated property name, ie `foo.bar.world`\n\t * @id core.getProperty\n\t */\n\tfunction getProperty(source, name)\n\t{\n\t\tif(typeof(name) === 'string')\n\t\t\tname = name.split('.');\n\n\t\tvar fullCamelCaseName = name.join('.').replace(/\\.(\\w)/g, function(match, letter) { return letter.toUpperCase() }),\n\t\t\tnestedName        = name.shift(),\n\t\t\tresult\n\t\t\t;\n\n\t\tif(typeof(result = source[fullCamelCaseName]) != UNDEFINED)\n\t\t\tresult = result;\n\n\t\telse if(typeof(result = source[nestedName]) != UNDEFINED && name.length > 0)\n\t\t\tresult = getProperty(result, name);\n\n\t\t// name.length here should be zero\n\t\treturn result;\n\t};\n\n\t/**\n\t * Hooks up specified events in the scope of the current object.\n\t * @author agorbatchev\n\t * @date 2011/08/09\n\t */\n\tfunction hookupEvents()\n\t{\n\t\tvar args   = slice.apply(arguments),\n\t\t\tself   = this,\n\t\t\ttarget = args.length === 1 ? self : args.shift(),\n\t\t\tevent\n\t\t\t;\n\n\t\targs = args[0] || {};\n\n\t\tfunction bind(event, handler)\n\t\t{\n\t\t\ttarget.bind(event, function()\n\t\t\t{\n\t\t\t\t// apply handler to our PLUGIN object, not the target\n\t\t\t\treturn handler.apply(self, arguments);\n\t\t\t});\n\t\t}\n\n\t\tfor(event in args)\n\t\t\tbind(event, args[event]);\n\t};\n\n\tfunction formDataObject(input, form)\n\t{\n\t\treturn { 'input' : input, 'form' : form };\n\t};\n\n\t//--------------------------------------------------------------------------------\n\t// ItemManager core component\n\t\n\tp = ItemManager.prototype;\n\n\t/**\n\t * Initialization method called by the core during instantiation.\n\t *\n\t * @signature ItemManager.init(core)\n\t *\n\t * @param core {TextExt} Instance of the TextExt core class.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id ItemManager.init\n\t */\n\tp.init = function(core)\n\t{\n\t};\n\n\t/**\n\t * Filters out items from the list that don't match the query and returns remaining items. Default \n\t * implementation checks if the item starts with the query.\n\t *\n\t * @signature ItemManager.filter(list, query)\n\t *\n\t * @param list {Array} List of items. Default implementation works with strings.\n\t * @param query {String} Query string.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id ItemManager.filter\n\t */\n\tp.filter = function(list, query)\n\t{\n\t\tvar result = [],\n\t\t\ti, item\n\t\t\t;\n\n\t\tfor(i = 0; i < list.length; i++)\n\t\t{\n\t\t\titem = list[i];\n\t\t\tif(this.itemContains(item, query))\n\t\t\t\tresult.push(item);\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t/**\n\t * Returns `true` if specified item contains another string, `false` otherwise. In the default implementation \n\t * `String.indexOf()` is used to check if item string begins with the needle string.\n\t *\n\t * @signature ItemManager.itemContains(item, needle)\n\t *\n\t * @param item {Object} Item to check. Default implementation works with strings.\n\t * @param needle {String} Search string to be found within the item.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id ItemManager.itemContains\n\t */\n\tp.itemContains = function(item, needle)\n\t{\n\t\treturn this.itemToString(item).toLowerCase().indexOf(needle.toLowerCase()) == 0;\n\t};\n\n\t/**\n\t * Converts specified string to item. Because default implemenation works with string, input string\n\t * is simply returned back. To use custom objects, different implementation of this method could\n\t * return something like `{ name : {String} }`.\n\t *\n\t * @signature ItemManager.stringToItem(str)\n\t *\n\t * @param str {String} Input string.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id ItemManager.stringToItem\n\t */\n\tp.stringToItem = function(str)\n\t{\n\t\treturn str;\n\t};\n\n\t/**\n\t * Converts specified item to string. Because default implemenation works with string, input string\n\t * is simply returned back. To use custom objects, different implementation of this method could\n\t * for example return `name` field of `{ name : {String} }`.\n\t *\n\t * @signature ItemManager.itemToString(item)\n\t *\n\t * @param item {Object} Input item to be converted to string.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id ItemManager.itemToString\n\t */\n\tp.itemToString = function(item)\n\t{\n\t\treturn item;\n\t};\n\n\t/**\n\t * Returns `true` if both items are equal, `false` otherwise. Because default implemenation works with \n\t * string, input items are compared as strings. To use custom objects, different implementation of this \n\t * method could for example compare `name` fields of `{ name : {String} }` type object.\n\t *\n\t * @signature ItemManager.compareItems(item1, item2)\n\t *\n\t * @param item1 {Object} First item.\n\t * @param item2 {Object} Second item.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id ItemManager.compareItems\n\t */\n\tp.compareItems = function(item1, item2)\n\t{\n\t\treturn item1 == item2;\n\t};\n\n\t//--------------------------------------------------------------------------------\n\t// TextExt core component\n\n\tp = TextExt.prototype;\n\t\t\n\t/**\n\t * Initializes current component instance with work with the supplied text input and options.\n\t *\n\t * @signature TextExt.init(input, opts)\n\t *\n\t * @param input {HTMLElement} Text input.\n\t * @param opts {Object} Options.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.init\n\t */\n\tp.init = function(input, opts)\n\t{\n\t\tvar self = this,\n\t\t\thiddenInput,\n\t\t\titemManager,\n\t\t\tcontainer\n\t\t\t;\n\n\t\tself._defaults    = $.extend({}, DEFAULT_OPTS);\n\t\tself._opts        = opts || {};\n\t\tself._plugins     = {};\n\t\tself._itemManager = itemManager = new (self.opts(OPT_ITEM_MANAGER))();\n\t\tinput             = $(input);\n\t\tcontainer         = $(self.opts(OPT_HTML_WRAP));\n\t\thiddenInput       = $(self.opts(OPT_HTML_HIDDEN));\n\n\t\tinput\n\t\t\t.wrap(container)\n\t\t\t.keydown(function(e) { return self.onKeyDown(e) })\n\t\t\t.keyup(function(e) { return self.onKeyUp(e) })\n\t\t\t.data('textext', self)\n\t\t\t;\n\n\t\t// keep references to html elements using jQuery.data() to avoid circular references\n\t\t$(self).data({\n\t\t\t'hiddenInput'   : hiddenInput,\n\t\t\t'wrapElement' : input.parents('.text-wrap').first(),\n\t\t\t'input'         : input\n\t\t});\n\n\t\t// set the name of the hidden input to the text input's name\n\t\thiddenInput.attr('name', input.attr('name'));\n\t\t// remove name attribute from the text input\n\t\tinput.attr('name', null);\n\t\t// add hidden input to the DOM\n\t\thiddenInput.insertAfter(input);\n\n\t\t$.extend(true, itemManager, self.opts(OPT_EXT + '.item.manager'));\n\t\t$.extend(true, self, self.opts(OPT_EXT + '.*'), self.opts(OPT_EXT + '.core'));\n\t\t\n\t\tself.originalWidth = input.outerWidth();\n\n\t\tself.invalidateBounds();\n\n\t\titemManager.init(self);\n\n\t\tself.initPatches();\n\t\tself.initPlugins(self.opts(OPT_PLUGINS), $.fn.textext.plugins);\n\n\t\tself.on({\n\t\t\tsetFormData  : self.onSetFormData,\n\t\t\tgetFormData  : self.onGetFormData,\n\t\t\tsetInputData : self.onSetInputData,\n\t\t\tanyKeyUp     : self.onAnyKeyUp\n\t\t});\n\n\t\tself.trigger(EVENT_POST_INIT);\n\t\tself.trigger(EVENT_READY);\n\n\t\tself.getFormData(0);\n\t};\n\n\t/**\n\t * Initialized all installed patches against current instance. The patches are initialized based on their\n\t * initialization priority which is returned by each patch's `initPriority()` method. Priority\n\t * is a `Number` where patches with higher value gets their `init()` method called before patches\n\t * with lower priority value.\n\t *\n\t * This facilitates initializing of patches in certain order to insure proper dependencies\n\t * regardless of which order they are loaded.\n\t *\n\t * By default all patches have the same priority - zero, which means they will be initialized\n\t * in rorder they are loaded, that is unless `initPriority()` is overriden.\n\t *\n\t * @signature TextExt.initPatches()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/10/11\n\t * @id TextExt.initPatches\n\t */\n\tp.initPatches = function()\n\t{\n\t\tvar list   = [],\n\t\t\tsource = $.fn.textext.patches,\n\t\t\tname\n\t\t\t;\n\n\t\tfor(name in source)\n\t\t\tlist.push(name);\n\n\t\tthis.initPlugins(list, source);\n\t};\n\n\t/**\n\t * Creates and initializes all specified plugins. The plugins are initialized based on their\n\t * initialization priority which is returned by each plugin's `initPriority()` method. Priority\n\t * is a `Number` where plugins with higher value gets their `init()` method called before plugins\n\t * with lower priority value.\n\t *\n\t * This facilitates initializing of plugins in certain order to insure proper dependencies\n\t * regardless of which order user enters them in the `plugins` option field.\n\t *\n\t * By default all plugins have the same priority - zero, which means they will be initialized\n\t * in the same order as entered by the user.\n\t *\n\t * @signature TextExt.initPlugins(plugins)\n\t *\n\t * @param plugins {Array} List of plugin names to initialize.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.initPlugins\n\t */\n\tp.initPlugins = function(plugins, source)\n\t{\n\t\tvar self = this,\n\t\t\text, name, plugin, initList = [], i\n\t\t\t;\n\n\t\tif(typeof(plugins) == 'string')\n\t\t\tplugins = plugins.split(/\\s*,\\s*|\\s+/g);\n\n\t\tfor(i = 0; i < plugins.length; i++)\n\t\t{\n\t\t\tname   = plugins[i];\n\t\t\tplugin = source[name];\n\n\t\t\tif(plugin)\n\t\t\t{\n\t\t\t\tself._plugins[name] = plugin = new plugin();\n\t\t\t\tself[name] = (function(plugin) { \n\t\t\t\t  return function(){ return plugin; } \n\t\t\t\t})(plugin);\n\t\t\t\tinitList.push(plugin);\n\t\t\t\t$.extend(true, plugin, self.opts(OPT_EXT + '.*'), self.opts(OPT_EXT + '.' + name));\n\t\t\t}\n\t\t}\n\n\t\t// sort plugins based on their priority values\n\t\tinitList.sort(function(p1, p2)\n\t\t{\n\t\t\tp1 = p1.initPriority();\n\t\t\tp2 = p2.initPriority();\n\n\t\t\treturn p1 === p2\n\t\t\t\t? 0\n\t\t\t\t: p1 < p2 ? 1 : -1\n\t\t\t\t;\n\t\t});\n\n\t\tfor(i = 0; i < initList.length; i++)\n\t\t\tinitList[i].init(self);\n\t};\n\n\t/**\n\t * Returns true if specified plugin is was instantiated for the current instance of core.\n\t *\n\t * @signature TextExt.hasPlugin(name)\n\t *\n\t * @param name {String} Name of the plugin to check.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/12/28\n\t * @id TextExt.hasPlugin\n\t * @version 1.1\n\t */\n\tp.hasPlugin = function(name)\n\t{\n\t\treturn !!this._plugins[name];\n\t};\n\n\t/**\n\t * Allows to add multiple event handlers which will be execued in the scope of the current object.\n\t * \n\t * @signature TextExt.on([target], handlers)\n\t *\n\t * @param target {Object} **Optional**. Target object which has traditional `bind(event, handler)` method.\n\t *                        Handler function will still be executed in the current object's scope.\n\t * @param handlers {Object} Key/value pairs of event names and handlers, eg `{ event: handler }`.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.on\n\t */\n\tp.on = hookupEvents;\n\n\t/**\n\t * Binds an event handler to the input box that user interacts with.\n\t *\n\t * @signature TextExt.bind(event, handler)\n\t *\n\t * @param event {String} Event name.\n\t * @param handler {Function} Event handler.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.bind\n\t */\n\tp.bind = function(event, handler)\n\t{\n\t\tthis.input().bind(event, handler);\n\t};\n\n\t/**\n\t * Triggers an event on the input box that user interacts with. All core events are originated here.\n\t * \n\t * @signature TextExt.trigger(event, ...args)\n\t *\n\t * @param event {String} Name of the event to trigger.\n\t * @param ...args All remaining arguments will be passed to the event handler.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.trigger\n\t */\n\tp.trigger = function()\n\t{\n\t\tvar args = arguments;\n\t\tthis.input().trigger(args[0], slice.call(args, 1));\n\t};\n\n\t/**\n\t * Returns instance of `itemManager` that is used by the component.\n\t *\n\t * @signature TextExt.itemManager()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.itemManager\n\t */\n\tp.itemManager = function()\n\t{\n\t\treturn this._itemManager;\n\t};\n\n\t/**\n\t * Returns jQuery input element with which user is interacting with.\n\t *\n\t * @signature TextExt.input()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/10\n\t * @id TextExt.input\n\t */\n\tp.input = function()\n\t{\n\t\treturn $(this).data('input');\n\t};\n\n\t/**\n\t * Returns option value for the specified option by name. If the value isn't found in the user\n\t * provided options, it will try looking for default value.\n\t *\n\t * @signature TextExt.opts(name)\n\t *\n\t * @param name {String} Option name as described in the options.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.opts\n\t */\n\tp.opts = function(name)\n\t{\n\t\tvar result = getProperty(this._opts, name);\n\t\treturn typeof(result) == 'undefined' ? getProperty(this._defaults, name) : result;\n\t};\n\n\t/**\n\t * Returns HTML element that was created from the `html.wrap` option. This is the top level HTML\n\t * container for the text input with which user is interacting with.\n\t *\n\t * @signature TextExt.wrapElement()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.wrapElement\n\t */\n\tp.wrapElement = function()\n\t{\n\t\treturn $(this).data('wrapElement');\n\t};\n\n\t/**\n\t * Updates container to match dimensions of the text input. Triggers `preInvalidate` and `postInvalidate`\n\t * events.\n\t *\n\t * @signature TextExt.invalidateBounds()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.invalidateBounds\n\t */\n\tp.invalidateBounds = function()\n\t{\n\t\tvar self      = this,\n\t\t\tinput     = self.input(),\n\t\t\twrap      = self.wrapElement(),\n\t\t\tcontainer = wrap.parent(),\n\t\t\twidth     = self.originalWidth + 'px',\n\t\t\theight\n\t\t\t;\n\n\t\tself.trigger(EVENT_PRE_INVALIDATE);\n\n\t\theight = input.outerHeight() + 'px';\n\n\t\t// using css() method instead of width() and height() here because they don't seem to do the right thing in jQuery 1.8.x\n\t\t// https://github.com/alexgorbatchev/jquery-textext/issues/74\n\t\tinput.css({ 'width' : width });\n\t\twrap.css({ 'width' : width, 'height' : height });\n\t\tcontainer.css({ 'height' : height }); \n\n\t\tself.trigger(EVENT_POST_INVALIDATE);\n\t};\n\n\t/**\n\t * Focuses user input on the text box.\n\t *\n\t * @signature TextExt.focusInput()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.focusInput\n\t */\n\tp.focusInput = function()\n\t{\n\t\tthis.input()[0].focus();\n\t};\n\n\t/**\n\t * Serializes data for to be set into the hidden input field and which will be submitted \n\t * with the HTML form.\n\t *\n\t * By default simple JSON serialization is used. It's expected that `JSON.stringify`\n\t * method would be available either through built in class in most modern browsers\n\t * or through JSON2 library.\n\t *\n\t * @signature TextExt.serializeData(data)\n\t *\n\t * @param data {Object} Data to serialize.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/09\n\t * @id TextExt.serializeData\n\t */\n\tp.serializeData = stringify;\n\n\t/**\n\t * Returns the hidden input HTML element which will be submitted with the HTML form.\n\t *\n\t * @signature TextExt.hiddenInput()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/09\n\t * @id TextExt.hiddenInput\n\t */\n\tp.hiddenInput = function(value)\n\t{\n\t\treturn $(this).data('hiddenInput');\n\t};\n\n\t/**\n\t * Abstracted functionality to trigger an event and get the data with maximum weight set by all\n\t * the event handlers. This functionality is used for the `getFormData` event.\n\t *\n\t * @signature TextExt.getWeightedEventResponse(event, args)\n\t *\n\t * @param event {String} Event name.\n\t * @param args {Object} Argument to be passed with the event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExt.getWeightedEventResponse\n\t */\n\tp.getWeightedEventResponse = function(event, args)\n\t{\n\t\tvar self      = this,\n\t\t\tdata      = {},\n\t\t\tmaxWeight = 0\n\t\t\t;\n\n\t\tself.trigger(event, data, args);\n\n\t\tfor(var weight in data)\n\t\t\tmaxWeight = Math.max(maxWeight, weight);\n\n\t\treturn data[maxWeight];\n\t};\n\n\t/**\n\t * Triggers the `getFormData` event to get all the plugins to return their data.\n\t *\n\t * After the data is returned, triggers `setFormData` and `setInputData` to update appopriate values.\n\t *\n\t * @signature TextExt.getFormData(keyCode)\n\t *\n\t * @param keyCode {Number} Key code number which has triggered this update. It's impotant to pass\n\t * this value to the plugins because they might return different values based on the key that was \n\t * pressed. For example, the Tags plugin returns an empty string for the `input` value if the enter\n\t * key was pressed, otherwise it returns whatever is currently in the text input.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExt.getFormData\n\t */\n\tp.getFormData = function(keyCode)\n\t{\n\t\tvar self = this,\n\t\t\tdata = self.getWeightedEventResponse(EVENT_GET_FORM_DATA, keyCode || 0)\n\t\t\t;\n\n\t\tself.trigger(EVENT_SET_FORM_DATA  , data['form']);\n\t\tself.trigger(EVENT_SET_INPUT_DATA , data['input']);\n\t};\n\n\t//--------------------------------------------------------------------------------\n\t// Event handlers\n\n\t/**\n\t * Reacts to the `anyKeyUp` event and triggers the `getFormData` to change data that will be submitted\n\t * with the form. Default behaviour is that everything that is typed in will be JSON serialized, so\n\t * the end result will be a JSON string.\n\t *\n\t * @signature TextExt.onAnyKeyUp(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.onAnyKeyUp\n\t */\n\tp.onAnyKeyUp = function(e, keyCode)\n\t{\n\t\tthis.getFormData(keyCode);\n\t};\n\n\t/**\n\t * Reacts to the `setInputData` event and populates the input text field that user is currently\n\t * interacting with.\n\t *\n\t * @signature TextExt.onSetInputData(e, data)\n\t *\n\t * @param e {Event} jQuery event.\n\t * @param data {String} Value to be set.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExt.onSetInputData\n\t */\n\tp.onSetInputData = function(e, data)\n\t{\n\t\tthis.input().val(data);\n\t};\n\n\t/**\n\t * Reacts to the `setFormData` event and populates the hidden input with will be submitted with\n\t * the HTML form. The value will be serialized with `serializeData()` method.\n\t *\n\t * @signature TextExt.onSetFormData(e, data)\n\t *\n\t * @param e {Event} jQuery event.\n\t * @param data {Object} Data that will be set.\n\t * \n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExt.onSetFormData\n\t */\n\tp.onSetFormData = function(e, data)\n\t{\n\t\tvar self = this;\n\t\tself.hiddenInput().val(self.serializeData(data));\n\t};\n\n\t/**\n\t * Reacts to `getFormData` event triggered by the core. At the bare minimum the core will tell\n\t * itself to use the current value in the text input as the data to be submitted with the HTML\n\t * form.\n\t *\n\t * @signature TextExt.onGetFormData(e, data)\n\t *\n\t * @param e {Event} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/09\n\t * @id TextExt.onGetFormData\n\t */\n\tp.onGetFormData = function(e, data)\n\t{\n\t\tvar val = this.input().val();\n\t\tdata[0] = formDataObject(val, val);\n\t};\n\n\t//--------------------------------------------------------------------------------\n\t// User mouse/keyboard input\n\n\t/**\n\t * Triggers `[name]KeyUp` and `[name]KeyPress` for every keystroke as described in the events.\n\t *\n\t * @signature TextExt.onKeyUp(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.onKeyUp\n\t */\n\n\t/**\n\t * Triggers `[name]KeyDown` for every keystroke as described in the events.\n\t *\n\t * @signature TextExt.onKeyDown(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.onKeyDown\n\t */\n\t\n\t$(['Down', 'Up']).each(function()\n\t{\n\t\tvar type = this.toString();\n\n\t\tp['onKey' + type] = function(e)\n\t\t{\n\t\t\tvar self          = this,\n\t\t\t\tkeyName       = self.opts(OPT_KEYS)[e.keyCode],\n\t\t\t\tdefaultResult = true\n\t\t\t\t;\n\n\t\t\tif(keyName)\n\t\t\t{\n\t\t\t\tdefaultResult = keyName.substr(-1) != '!';\n\t\t\t\tkeyName       = keyName.replace('!', '');\n\n\t\t\t\tself.trigger(keyName + 'Key' + type);\n\n\t\t\t\t// manual *KeyPress event fimplementation for the function keys like Enter, Backspace, etc.\n\t\t\t\tif(type == 'Up' && self._lastKeyDown == e.keyCode)\n\t\t\t\t{\n\t\t\t\t\tself._lastKeyDown = null;\n\t\t\t\t\tself.trigger(keyName + 'KeyPress');\n\t\t\t\t}\n\n\t\t\t\tif(type == 'Down')\n\t\t\t\t\tself._lastKeyDown = e.keyCode;\n\t\t\t}\n\n\t\t\tself.trigger('anyKey' + type, e.keyCode);\n\n\t\t\treturn defaultResult;\n\t\t};\n\t});\n\n\t//--------------------------------------------------------------------------------\n\t// Plugin Base\n\t\n\tp = TextExtPlugin.prototype;\n\n\t/**\n\t * Allows to add multiple event handlers which will be execued in the scope of the current object.\n\t * \n\t * @signature TextExt.on([target], handlers)\n\t *\n\t * @param target {Object} **Optional**. Target object which has traditional `bind(event, handler)` method.\n\t *                        Handler function will still be executed in the current object's scope.\n\t * @param handlers {Object} Key/value pairs of event names and handlers, eg `{ event: handler }`.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.on\n\t */\n\tp.on = hookupEvents;\n\n\t/**\n\t * Returns the hash object that `getFormData` triggered by the core expects.\n\t *\n\t * @signature TextExtPlugin.formDataObject(input, form)\n\t *\n\t * @param input {String} Value that will go into the text input that user is interacting with.\n\t * @param form {Object} Value that will be serialized and put into the hidden that will be submitted\n\t * with the HTML form.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExtPlugin.formDataObject\n\t */\n\tp.formDataObject = formDataObject;\n\n\t/**\n\t * Initialization method called by the core during plugin instantiation. This method must be implemented\n\t * by each plugin individually.\n\t *\n\t * @signature TextExtPlugin.init(core)\n\t *\n\t * @param core {TextExt} Instance of the TextExt core class.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.init\n\t */\n\tp.init = function(core) { throw new Error('Not implemented') };\n\n\t/**\n\t * Initialization method wich should be called by the plugin during the `init()` call.\n\t *\n\t * @signature TextExtPlugin.baseInit(core, defaults)\n\t *\n\t * @param core {TextExt} Instance of the TextExt core class.\n\t * @param defaults {Object} Default plugin options. These will be checked if desired value wasn't\n\t * found in the options supplied by the user.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.baseInit\n\t */\n\tp.baseInit = function(core, defaults)\n\t{\n\t\tvar self = this;\n\n\t\tcore._defaults = $.extend(true, core._defaults, defaults);\n\t\tself._core     = core;\n\t\tself._timers   = {};\n\t};\n\n\t/**\n\t * Allows starting of multiple timeout calls. Each time this method is called with the same\n\t * timer name, the timer is reset. This functionality is useful in cases where an action needs\n\t * to occur only after a certain period of inactivity. For example, making an AJAX call after \n\t * user stoped typing for 1 second.\n\t *\n\t * @signature TextExtPlugin.startTimer(name, delay, callback)\n\t *\n\t * @param name {String} Timer name.\n\t * @param delay {Number} Delay in seconds.\n\t * @param callback {Function} Callback function.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/25\n\t * @id TextExtPlugin.startTimer\n\t */\n\tp.startTimer = function(name, delay, callback)\n\t{\n\t\tvar self = this;\n\n\t\tself.stopTimer(name);\n\n\t\tself._timers[name] = setTimeout(\n\t\t\tfunction()\n\t\t\t{\n\t\t\t\tdelete self._timers[name];\n\t\t\t\tcallback.apply(self);\n\t\t\t},\n\t\t\tdelay * 1000\n\t\t);\n\t};\n\n\t/**\n\t * Stops the timer by name without resetting it.\n\t *\n\t * @signature TextExtPlugin.stopTimer(name)\n\t *\n\t * @param name {String} Timer name.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/25\n\t * @id TextExtPlugin.stopTimer\n\t */\n\tp.stopTimer = function(name)\n\t{\n\t\tclearTimeout(this._timers[name]);\n\t};\n\n\t/**\n\t * Returns instance of the `TextExt` to which current instance of the plugin is attached to.\n\t *\n\t * @signature TextExtPlugin.core()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.core\n\t */\n\tp.core = function()\n\t{\n\t\treturn this._core;\n\t};\n\n\t/**\n\t * Shortcut to the core's `opts()` method. Returns option value.\n\t *\n\t * @signature TextExtPlugin.opts(name)\n\t * \n\t * @param name {String} Option name as described in the options.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.opts\n\t */\n\tp.opts = function(name)\n\t{\n\t\treturn this.core().opts(name);\n\t};\n\n\t/**\n\t * Shortcut to the core's `itemManager()` method. Returns instance of the `ItemManger` that is\n\t * currently in use.\n\t *\n\t * @signature TextExtPlugin.itemManager()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.itemManager\n\t */\n\tp.itemManager = function()\n\t{\n\t\treturn this.core().itemManager();\n\t};\n\n\t/**\n\t * Shortcut to the core's `input()` method. Returns instance of the HTML element that represents\n\t * current text input.\n\t *\n\t * @signature TextExtPlugin.input()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.input\n\t */\n\tp.input = function()\n\t{\n\t\treturn this.core().input();\n\t};\n\n\t/**\n\t * Shortcut to the commonly used `this.input().val()` call to get or set value of the text input.\n\t *\n\t * @signature TextExtPlugin.val(value)\n\t *\n\t * @param value {String} Optional value. If specified, the value will be set, otherwise it will be\n\t * returned.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/20\n\t * @id TextExtPlugin.val\n\t */\n\tp.val = function(value)\n\t{\n\t\tvar input = this.input();\n\n\t\tif(typeof(value) === UNDEFINED)\n\t\t\treturn input.val();\n\t\telse\n\t\t\tinput.val(value);\n\t};\n\n\t/**\n\t * Shortcut to the core's `trigger()` method. Triggers specified event with arguments on the\n\t * component core.\n\t *\n\t * @signature TextExtPlugin.trigger(event, ...args)\n\t *\n\t * @param event {String} Name of the event to trigger.\n\t * @param ...args All remaining arguments will be passed to the event handler.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtPlugin.trigger\n\t */\n\tp.trigger = function()\n\t{\n\t\tvar core = this.core();\n\t\tcore.trigger.apply(core, arguments);\n\t};\n\n\t/**\n\t * Shortcut to the core's `bind()` method. Binds specified handler to the event.\n\t *\n\t * @signature TextExtPlugin.bind(event, handler)\n\t *\n\t * @param event {String} Event name.\n\t * @param handler {Function} Event handler.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/20\n\t * @id TextExtPlugin.bind\n\t */\n\tp.bind = function(event, handler)\n\t{\n\t\tthis.core().bind(event, handler);\n\t};\n\n\t/**\n\t * Returns initialization priority for this plugin. If current plugin depends upon some other plugin\n\t * to be initialized before or after, priority needs to be adjusted accordingly. Plugins with higher\n\t * priority initialize before plugins with lower priority.\n\t *\n\t * Default initialization priority is `0`.\n\t *\n\t * @signature TextExtPlugin.initPriority()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExtPlugin.initPriority\n\t */\n\tp.initPriority = function()\n\t{\n\t\treturn 0;\n\t};\n\n\t//--------------------------------------------------------------------------------\n\t// jQuery Integration\n\t\n\t/**\n\t * TextExt integrates as a jQuery plugin available through the `$(selector).textext(opts)` call. If\n\t * `opts` argument is passed, then a new instance of `TextExt` will be created for all the inputs\n\t * that match the `selector`. If `opts` wasn't passed and TextExt was already intantiated for \n\t * inputs that match the `selector`, array of `TextExt` instances will be returned instead.\n\t *\n\t *     // will create a new instance of `TextExt` for all elements that match `.sample`\n\t *     $('.sample').textext({ ... });\n\t *\n\t *     // will return array of all `TextExt` instances\n\t *     var list = $('.sample').textext();\n\t *\n\t * The following properties are also exposed through the jQuery `$.fn.textext`:\n\t *\n\t * * `TextExt` -- `TextExt` class.\n\t * * `TextExtPlugin` -- `TextExtPlugin` class.\n\t * * `ItemManager` -- `ItemManager` class.\n\t * * `plugins` -- Key/value table of all registered plugins.\n\t * * `addPlugin(name, constructor)` -- All plugins should register themselves using this function.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExt.jquery\n\t */\n\n\tvar cssInjected = false;\n\n\tvar textext = $.fn.textext = function(opts)\n\t{\n\t\tvar css;\n\t\t\n\t\tif(!cssInjected && (css = $.fn.textext.css) != null)\n\t\t{\n\t\t\t$('head').append('<style>' + css + '</style>');\n\t\t\tcssInjected = true;\n\t\t}\n\n\t\treturn this.map(function()\n\t\t{\n\t\t\tvar self = $(this);\n\n\t\t\tif(opts == null)\n\t\t\t\treturn self.data('textext');\n\n\t\t\tvar instance = new TextExt();\n\n\t\t\tinstance.init(self, opts);\n\t\t\tself.data('textext', instance);\n\n\t\t\treturn instance.input()[0];\n\t\t});\n\t};\n\n\t/**\n\t * This static function registers a new plugin which makes it available through the `plugins` option\n\t * to the end user. The name specified here is the name the end user would put in the `plugins` option\n\t * to add this plugin to a new instance of TextExt.\n\t * \n\t * @signature $.fn.textext.addPlugin(name, constructor)\n\t *\n\t * @param name {String} Name of the plugin.\n\t * @param constructor {Function} Plugin constructor.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/10/11\n\t * @id TextExt.addPlugin\n\t */\n\ttextext.addPlugin = function(name, constructor)\n\t{\n\t\ttextext.plugins[name] = constructor;\n\t\tconstructor.prototype = new textext.TextExtPlugin();\n\t};\n\n\t/**\n\t * This static function registers a new patch which is added to each instance of TextExt. If you are\n\t * adding a new patch, make sure to call this method.\n\t * \n\t * @signature $.fn.textext.addPatch(name, constructor)\n\t *\n\t * @param name {String} Name of the patch.\n\t * @param constructor {Function} Patch constructor.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/10/11\n\t * @id TextExt.addPatch\n\t */\n\ttextext.addPatch = function(name, constructor)\n\t{\n\t\ttextext.patches[name] = constructor;\n\t\tconstructor.prototype = new textext.TextExtPlugin();\n\t};\n\n\ttextext.TextExt       = TextExt;\n\ttextext.TextExtPlugin = TextExtPlugin;\n\ttextext.ItemManager   = ItemManager;\n\ttextext.plugins       = {};\n\ttextext.patches       = {};\n})(jQuery);\n\n(function($)\n{\n\tfunction TextExtIE9Patches() {};\n\n\t$.fn.textext.TextExtIE9Patches = TextExtIE9Patches;\n\t$.fn.textext.addPatch('ie9',TextExtIE9Patches);\n\n\tvar p = TextExtIE9Patches.prototype;\n\n\tp.init = function(core)\n\t{\n\t\tif(navigator.userAgent.indexOf('MSIE 9') == -1)\n\t\t\treturn;\n\n\t\tvar self = this;\n\n\t\tcore.on({ postInvalidate : self.onPostInvalidate });\n\t};\n\n\tp.onPostInvalidate = function()\n\t{\n\t\tvar self  = this,\n\t\t\tinput = self.input(),\n\t\t\tval   = input.val()\n\t\t\t;\n\n\t\t// agorbatchev :: IE9 doesn't seem to update the padding if box-sizing is on until the\n\t\t// text box value changes, so forcing this change seems to do the trick of updating\n\t\t// IE's padding visually.\n\t\tinput.val(Math.random());\n\t\tinput.val(val);\n\t};\n})(jQuery);\n\n"
  },
  {
    "path": "public/quickadmin/js/textext.plugin.tags.js",
    "content": "/**\n * jQuery TextExt Plugin\n * http://textextjs.com\n *\n * @version 1.3.1\n * @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.\n * @license MIT License\n */\n(function($)\n{\n\t/**\n\t * Tags plugin brings in the traditional tag functionality where user can assemble and\n\t * edit list of tags. Tags plugin works especially well together with Autocomplete, Filter,\n\t * Suggestions and Ajax plugins to provide full spectrum of features. It can also work on\n\t * its own and just do one thing -- tags.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags\n\t */\n\tfunction TextExtTags() {};\n\n\t$.fn.textext.TextExtTags = TextExtTags;\n\t$.fn.textext.addPlugin('tags', TextExtTags);\n\n\tvar p = TextExtTags.prototype,\n\n\t\tCSS_DOT             = '.',\n\t\tCSS_TAGS_ON_TOP     = 'text-tags-on-top',\n\t\tCSS_DOT_TAGS_ON_TOP = CSS_DOT + CSS_TAGS_ON_TOP,\n\t\tCSS_TAG             = 'text-tag',\n\t\tCSS_DOT_TAG         = CSS_DOT + CSS_TAG,\n\t\tCSS_TAGS            = 'text-tags',\n\t\tCSS_DOT_TAGS        = CSS_DOT + CSS_TAGS,\n\t\tCSS_LABEL           = 'text-label',\n\t\tCSS_DOT_LABEL       = CSS_DOT + CSS_LABEL,\n\t\tCSS_REMOVE          = 'text-remove',\n\t\tCSS_DOT_REMOVE      = CSS_DOT + CSS_REMOVE,\n\n\t\t/**\n\t\t * Tags plugin options are grouped under `tags` when passed to the\n\t\t * `$().textext()` function. For example:\n\t\t *\n\t\t *     $('textarea').textext({\n\t\t *         plugins: 'tags',\n\t\t *         tags: {\n\t\t *             items: [ \"tag1\", \"tag2\" ]\n\t\t *         }\n\t\t *     })\n\t\t *\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExtTags.options\n\t\t */\n\n\t\t/**\n\t\t * This is a toggle switch to enable or disable the Tags plugin. The value is checked\n\t\t * each time at the top level which allows you to toggle this setting on the fly.\n\t\t *\n\t\t * @name tags.enabled\n\t\t * @default true\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExtTags.options.tags.enabled\n\t\t */\n\t\tOPT_ENABLED = 'tags.enabled',\n\n\t\t/**\n\t\t * Allows to specify tags which will be added to the input by default upon initialization.\n\t\t * Each item in the array must be of the type that current `ItemManager` can understand.\n\t\t * Default type is `String`.\n\t\t *\n\t\t * @name tags.items\n\t\t * @default null\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExtTags.options.tags.items\n\t\t */\n\t\tOPT_ITEMS = 'tags.items',\n\n\t\t/**\n\t\t * HTML source that is used to generate a single tag.\n\t\t *\n\t\t * @name html.tag\n\t\t * @default '<div class=\"text-tags\"/>'\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExtTags.options.html.tag\n\t\t */\n\t\tOPT_HTML_TAG  = 'html.tag',\n\n\t\t/**\n\t\t * HTML source that is used to generate container for the tags.\n\t\t *\n\t\t * @name html.tags\n\t\t * @default '<div class=\"text-tag\"><div class=\"text-button\"><span class=\"text-label\"/><a class=\"text-remove\"/></div></div>'\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExtTags.options.html.tags\n\t\t */\n\t\tOPT_HTML_TAGS = 'html.tags',\n\n\t\t/**\n\t\t * Tags plugin dispatches or reacts to the following events.\n\t\t *\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/17\n\t\t * @id TextExtTags.events\n\t\t */\n\n\t\t/**\n\t\t * Tags plugin triggers the `isTagAllowed` event before adding each tag to the tag list. Other plugins have\n\t\t * an opportunity to interrupt this by setting `result` of the second argument to `false`. For example:\n\t\t *\n\t\t *     $('textarea').textext({...}).bind('isTagAllowed', function(e, data)\n\t\t *     {\n\t\t *         if(data.tag === 'foo')\n\t\t *             data.result = false;\n\t\t *     })\n\t\t *\n\t\t * The second argument `data` has the following format: `{ tag : {Object}, result : {Boolean} }`. `tag`\n\t\t * property is in the format that the current `ItemManager` can understand.\n\t\t *\n\t\t * @name isTagAllowed\n\t\t * @author agorbatchev\n\t\t * @date 2011/08/19\n\t\t * @id TextExtTags.events.isTagAllowed\n\t\t */\n\t\tEVENT_IS_TAG_ALLOWED = 'isTagAllowed',\n\n\t\t/**\n\t\t * Tags plugin triggers the `tagClick` event when user clicks on one of the tags. This allows to process\n\t\t * the click and potentially change the value of the tag (for example in case of user feedback).\n\t\t *\n\t\t *     $('textarea').textext({...}).bind('tagClick', function(e, tag, value, callback)\n\t\t *     {\n\t\t *         var newValue = window.prompt('New value', value);\n\n\t\t *         if(newValue)\n\t\t *             callback(newValue, true);\n\t\t *     })\n\t\t *\n\t\t *  Callback argument has the following signature:\n\t\t *\n\t\t *     function(newValue, refocus)\n\t\t *     {\n\t\t *         ...\n\t\t *     }\n\t\t *\n\t\t * Please check out [example](/manual/examples/tags-changing.html).\n\t\t *\n\t\t * @name tagClick\n\t\t * @version 1.3.0\n\t\t * @author s.stok\n\t\t * @date 2011/01/23\n\t\t * @id TextExtTags.events.tagClick\n\t\t */\n\t\tEVENT_TAG_CLICK = 'tagClick',\n\n\t\tDEFAULT_OPTS = {\n\t\t\ttags : {\n\t\t\t\tenabled : true,\n\t\t\t\titems   : null\n\t\t\t},\n\n\t\t\thtml : {\n\t\t\t\ttags : '<div class=\"text-tags\"/>',\n\t\t\t\ttag  : '<div class=\"text-tag\"><div class=\"text-button\"><span class=\"text-label\"/><a class=\"text-remove\"/></div></div>'\n\t\t\t}\n\t\t}\n\t\t;\n\n\t/**\n\t * Initialization method called by the core during plugin instantiation.\n\t *\n\t * @signature TextExtTags.init(core)\n\t *\n\t * @param core {TextExt} Instance of the TextExt core class.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.init\n\t */\n\tp.init = function(core)\n\t{\n\t\tthis.baseInit(core, DEFAULT_OPTS);\n\t\tvar self  = this,\n\t\t\tinput = self.input(),\n\t\t\tcontainer\n\t\t\t;\n\n\t\tif(self.opts(OPT_ENABLED))\n\t\t{\n\t\t\tcontainer = $(self.opts(OPT_HTML_TAGS));\n\t\t\tinput.after(container);\n\n\t\t\t$(self).data('container', container);\n\n\t\t\tself.on({\n\t\t\t\tenterKeyPress    : self.onEnterKeyPress,\n\t\t\t\tbackspaceKeyDown : self.onBackspaceKeyDown,\n\t\t\t\tpreInvalidate    : self.onPreInvalidate,\n\t\t\t\tpostInit         : self.onPostInit,\n\t\t\t\tgetFormData      : self.onGetFormData\n\t\t\t});\n\n\t\t\tself.on(container, {\n\t\t\t\tclick     : self.onClick,\n\t\t\t\tmousemove : self.onContainerMouseMove\n\t\t\t});\n\n\t\t\tself.on(input, {\n\t\t\t\tmousemove : self.onInputMouseMove\n\t\t\t});\n\t\t}\n\n\t\tself._originalPadding = {\n\t\t\tleft : parseInt(input.css('paddingLeft') || 0),\n\t\t\ttop  : parseInt(input.css('paddingTop') || 0)\n\t\t};\n\n\t\tself._paddingBox = {\n\t\t\tleft : 0,\n\t\t\ttop  : 0\n\t\t};\n\n\t\tself.updateFormCache();\n\t};\n\n\t/**\n\t * Returns HTML element in which all tag HTML elements are residing.\n\t *\n\t * @signature TextExtTags.containerElement()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/15\n\t * @id TextExtTags.containerElement\n\t */\n\tp.containerElement = function()\n\t{\n\t\treturn $(this).data('container');\n\t};\n\n\t//--------------------------------------------------------------------------------\n\t// Event handlers\n\n\t/**\n\t * Reacts to the `postInit` event triggered by the core and sets default tags\n\t * if any were specified.\n\t *\n\t * @signature TextExtTags.onPostInit(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/09\n\t * @id TextExtTags.onPostInit\n\t */\n\tp.onPostInit = function(e)\n\t{\n\t\tvar self = this;\n\t\tself.addTags(self.opts(OPT_ITEMS));\n\t};\n\n\t/**\n\t * Reacts to the [`getFormData`][1] event triggered by the core. Returns data with the\n\t * weight of 200 to be *greater than the Autocomplete plugin* data weight. The weights\n\t * system is covered in greater detail in the [`getFormData`][1] event documentation.\n\t *\n\t * [1]: /manual/textext.html#getformdata\n\t *\n\t * @signature TextExtTags.onGetFormData(e, data, keyCode)\n\t *\n\t * @param e {Object} jQuery event.\n\t * @param data {Object} Data object to be populated.\n\t * @param keyCode {Number} Key code that triggered the original update request.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExtTags.onGetFormData\n\t */\n\tp.onGetFormData = function(e, data, keyCode)\n\t{\n\t\tvar self       = this,\n\t\t\tinputValue = keyCode === 13 ? '' : self.val(),\n\t\t\tformValue  = self._formData\n\t\t\t;\n\n\t\tdata[200] = self.formDataObject(inputValue, formValue);\n\t};\n\n\t/**\n\t * Returns initialization priority of the Tags plugin which is expected to be\n\t * *less than the Autocomplete plugin* because of the dependencies. The value is\n\t * 100.\n\t *\n\t * @signature TextExtTags.initPriority()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/22\n\t * @id TextExtTags.initPriority\n\t */\n\tp.initPriority = function()\n\t{\n\t\treturn 100;\n\t};\n\n\t/**\n\t * Reacts to user moving mouse over the text area when cursor is over the text\n\t * and not over the tags. Whenever mouse cursor is over the area covered by\n\t * tags, the tags container is flipped to be on top of the text area which\n\t * makes all tags functional with the mouse.\n\t *\n\t * @signature TextExtTags.onInputMouseMove(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/08\n\t * @id TextExtTags.onInputMouseMove\n\t */\n\tp.onInputMouseMove = function(e)\n\t{\n\t\tthis.toggleZIndex(e);\n\t};\n\n\t/**\n\t * Reacts to user moving mouse over the tags. Whenever the cursor moves out\n\t * of the tags and back into where the text input is happening visually,\n\t * the tags container is sent back under the text area which allows user\n\t * to interact with the text using mouse cursor as expected.\n\t *\n\t * @signature TextExtTags.onContainerMouseMove(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/08\n\t * @id TextExtTags.onContainerMouseMove\n\t */\n\tp.onContainerMouseMove = function(e)\n\t{\n\t\tthis.toggleZIndex(e);\n\t};\n\n\t/**\n\t * Reacts to the `backspaceKeyDown` event. When backspace key is pressed in an empty text field,\n\t * deletes last tag from the list.\n\t *\n\t * @signature TextExtTags.onBackspaceKeyDown(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/02\n\t * @id TextExtTags.onBackspaceKeyDown\n\t */\n\tp.onBackspaceKeyDown = function(e)\n\t{\n\t\tvar self    = this,\n\t\t\tlastTag = self.tagElements().last()\n\t\t\t;\n\n\t\tif(self.val().length == 0)\n\t\t\tself.removeTag(lastTag);\n\t};\n\n\t/**\n\t * Reacts to the `preInvalidate` event and updates the input box to look like the tags are\n\t * positioned inside it.\n\t *\n\t * @signature TextExtTags.onPreInvalidate(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.onPreInvalidate\n\t */\n\tp.onPreInvalidate = function(e)\n\t{\n\t\tvar self    = this,\n\t\t\tlastTag = self.tagElements().last(),\n\t\t\tpos     = lastTag.position()\n\t\t\t;\n\n\t\tif(lastTag.length > 0)\n\t\t\tpos.left += lastTag.innerWidth();\n\t\telse\n\t\t\tpos = self._originalPadding;\n\n\t\tself._paddingBox = pos;\n\n\t\tself.input().css({\n\t\t\tpaddingLeft : pos.left,\n\t\t\tpaddingTop  : pos.top\n\t\t});\n\t};\n\n\t/**\n\t * Reacts to the mouse `click` event.\n\t *\n\t * @signature TextExtTags.onClick(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.onClick\n\t */\n\tp.onClick = function(e)\n\t{\n\t\tvar self   = this,\n\t\t\tcore   = self.core(),\n\t\t\tsource = $(e.target),\n\t\t\tfocus  = 0,\n\t\t\ttag\n\t\t\t;\n\n\t\tif(source.is(CSS_DOT_TAGS))\n\t\t{\n\t\t\tfocus = 1;\n\t\t}\n\t\telse if(source.is(CSS_DOT_REMOVE))\n\t\t{\n\t\t\tself.removeTag(source.parents(CSS_DOT_TAG + ':first'));\n\t\t\tfocus = 1;\n\t\t}\n\t\telse if(source.is(CSS_DOT_LABEL))\n\t\t{\n\t\t\ttag = source.parents(CSS_DOT_TAG + ':first');\n\t\t\tself.trigger(EVENT_TAG_CLICK, tag, tag.data(CSS_TAG), tagClickCallback);\n\t\t}\n\n\t\tfunction tagClickCallback(newValue, refocus)\n\t\t{\n\t\t\ttag.data(CSS_TAG, newValue);\n\t\t\ttag.find(CSS_DOT_LABEL).text(self.itemManager().itemToString(newValue));\n\n\t\t\tself.updateFormCache();\n\t\t\tcore.getFormData();\n\t\t\tcore.invalidateBounds();\n\n\t\t\tif(refocus)\n\t\t\t\tcore.focusInput();\n\t\t}\n\n\t\tif(focus)\n\t\t\tcore.focusInput();\n\t};\n\n\t/**\n\t * Reacts to the `enterKeyPress` event and adds whatever is currently in the text input\n\t * as a new tag. Triggers `isTagAllowed` to check if the tag could be added first.\n\t *\n\t * @signature TextExtTags.onEnterKeyPress(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.onEnterKeyPress\n\t */\n\tp.onEnterKeyPress = function(e)\n\t{\n\t\tvar self = this,\n\t\t\tval  = self.val(),\n\t\t\ttag  = self.itemManager().stringToItem(val)\n\t\t\t;\n\n\t\tif(self.isTagAllowed(tag))\n\t\t{\n\t\t\tself.addTags([ tag ]);\n\t\t\t// refocus the textarea just in case it lost the focus\n\t\t\tself.core().focusInput();\n\t\t}\n\t};\n\n\t//--------------------------------------------------------------------------------\n\t// Core functionality\n\n\t/**\n\t * Creates a cache object with all the tags currently added which will be returned\n\t * in the `onGetFormData` handler.\n\t *\n\t * @signature TextExtTags.updateFormCache()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/09\n\t * @id TextExtTags.updateFormCache\n\t */\n\tp.updateFormCache = function()\n\t{\n\t\tvar self   = this,\n\t\t\tresult = []\n\t\t\t;\n\n\t\tself.tagElements().each(function()\n\t\t{\n\t\t\tresult.push($(this).data(CSS_TAG));\n\t\t});\n\n\t\t// cache the results to be used in the onGetFormData\n\t\tself._formData = result;\n\t};\n\n\t/**\n\t * Toggles tag container to be on top of the text area or under based on where\n\t * the mouse cursor is located. When cursor is above the text input and out of\n\t * any of the tags, the tags container is sent under the text area. If cursor\n\t * is over any of the tags, the tag container is brought to be over the text\n\t * area.\n\t *\n\t * @signature TextExtTags.toggleZIndex(e)\n\t *\n\t * @param e {Object} jQuery event.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/08\n\t * @id TextExtTags.toggleZIndex\n\t */\n\tp.toggleZIndex = function(e)\n\t{\n\t\tvar self            = this,\n\t\t\toffset          = self.input().offset(),\n\t\t\tmouseX          = e.clientX - offset.left,\n\t\t\tmouseY          = e.clientY - offset.top,\n\t\t\tbox             = self._paddingBox,\n\t\t\tcontainer       = self.containerElement(),\n\t\t\tisOnTop         = container.is(CSS_DOT_TAGS_ON_TOP),\n\t\t\tisMouseOverText = mouseX > box.left && mouseY > box.top\n\t\t\t;\n\n\t\tif(!isOnTop && !isMouseOverText || isOnTop && isMouseOverText)\n\t\t\tcontainer[(!isOnTop ? 'add' : 'remove') + 'Class'](CSS_TAGS_ON_TOP);\n\t};\n\n\t/**\n\t * Returns all tag HTML elements.\n\t *\n\t * @signature TextExtTags.tagElements()\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.tagElements\n\t */\n\tp.tagElements = function()\n\t{\n\t\treturn this.containerElement().find(CSS_DOT_TAG);\n\t};\n\n\t/**\n\t * Wrapper around the `isTagAllowed` event which triggers it and returns `true`\n\t * if `result` property of the second argument remains `true`.\n\t *\n\t * @signature TextExtTags.isTagAllowed(tag)\n\t *\n\t * @param tag {Object} Tag object that the current `ItemManager` can understand.\n\t * Default is `String`.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.isTagAllowed\n\t */\n\tp.isTagAllowed = function(tag)\n\t{\n\t\tvar opts = { tag : tag, result : true };\n\t\tthis.trigger(EVENT_IS_TAG_ALLOWED, opts);\n\t\treturn opts.result === true;\n\t};\n\n\t/**\n\t * Adds specified tags to the tag list. Triggers `isTagAllowed` event for each tag\n\t * to insure that it could be added. Calls `TextExt.getFormData()` to refresh the data.\n\t *\n\t * @signature TextExtTags.addTags(tags)\n\t *\n\t * @param tags {Array} List of tags that current `ItemManager` can understand. Default\n\t * is `String`.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.addTags\n\t */\n\tp.addTags = function(tags)\n\t{\n\t\tif(!tags || tags.length == 0)\n\t\t\treturn;\n\n\t\tvar self      = this,\n\t\t\tcore      = self.core(),\n\t\t\tcontainer = self.containerElement(),\n\t\t\ti, tag\n\t\t\t;\n\n\t\tfor(i = 0; i < tags.length; i++)\n\t\t{\n\t\t\ttag = tags[i];\n\n\t\t\tif(tag && self.isTagAllowed(tag))\n\t\t\t\tcontainer.append(self.renderTag(tag));\n\t\t}\n\n\t\tself.updateFormCache();\n\t\tcore.getFormData();\n\t\tcore.invalidateBounds();\n\t};\n\n\t/**\n\t * Returns HTML element for the specified tag.\n\t *\n\t * @signature TextExtTags.getTagElement(tag)\n\t *\n\t * @param tag {Object} Tag object in the format that current `ItemManager` can understand.\n\t * Default is `String`.\n\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.getTagElement\n\t */\n\tp.getTagElement = function(tag)\n\t{\n\t\tvar self = this,\n\t\t\tlist = self.tagElements(),\n\t\t\ti, item\n\t\t\t;\n\n\t\tfor(i = 0; i < list.length; i++) {\n\t\t\titem = $(list[i]);\n\t\t\tif(self.itemManager().compareItems(item.data(CSS_TAG), tag))\n\t\t\t\treturn item;\n\t\t}\n\t\t\n\t\treturn null;\n\t};\n\n\t/**\n\t * Removes specified tag from the list. Calls `TextExt.getFormData()` to refresh the data.\n\t *\n\t * @signature TextExtTags.removeTag(tag)\n\t *\n\t * @param tag {Object} Tag object in the format that current `ItemManager` can understand.\n\t * Default is `String`.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.removeTag\n\t */\n\tp.removeTag = function(tag)\n\t{\n\t\tvar self = this,\n\t\t\tcore = self.core(),\n\t\t\telement\n\t\t\t;\n\n\t\tif(tag instanceof $)\n\t\t{\n\t\t\telement = tag;\n\t\t\ttag = tag.data(CSS_TAG);\n\t\t}\n\t\telse\n\t\t{\n\t\t\telement = self.getTagElement(tag);\n\t\t\tif (element === null) {\n\t\t\t\t//Tag does not exist\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\telement.remove();\n\t\tself.updateFormCache();\n\t\tcore.getFormData();\n\t\tcore.invalidateBounds();\n\t};\n\n\t/**\n\t * Creates and returns new HTML element from the source code specified in the `html.tag` option.\n\t *\n\t * @signature TextExtTags.renderTag(tag)\n\t *\n\t * @param tag {Object} Tag object in the format that current `ItemManager` can understand.\n\t * Default is `String`.\n\t *\n\t * @author agorbatchev\n\t * @date 2011/08/19\n\t * @id TextExtTags.renderTag\n\t */\n\tp.renderTag = function(tag)\n\t{\n\t\tvar self = this,\n\t\t\tnode = $(self.opts(OPT_HTML_TAG))\n\t\t\t;\n\n\t\tnode.find('.text-label').text(self.itemManager().itemToString(tag));\n\t\tnode.data(CSS_TAG, tag);\n\t\treturn node;\n\t};\n})(jQuery);\n"
  },
  {
    "path": "public/quickadmin/js/timepicker.js",
    "content": "/*! jQuery Timepicker Addon - v1.6.1 - 2015-11-14\n * http://trentrichardson.com/examples/timepicker\n * Copyright (c) 2015 Trent Richardson; Licensed MIT */\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery', 'jquery-ui'], factory);\n    } else {\n        factory(jQuery);\n    }\n}(function ($) {\n\n    /*\n     * Lets not redefine timepicker, Prevent \"Uncaught RangeError: Maximum call stack size exceeded\"\n     */\n    $.ui.timepicker = $.ui.timepicker || {};\n    if ($.ui.timepicker.version) {\n        return;\n    }\n\n    /*\n     * Extend jQueryUI, get it started with our version number\n     */\n    $.extend($.ui, {\n        timepicker: {\n            version: \"1.6.1\"\n        }\n    });\n\n    /*\n     * Timepicker manager.\n     * Use the singleton instance of this class, $.timepicker, to interact with the time picker.\n     * Settings for (groups of) time pickers are maintained in an instance object,\n     * allowing multiple different settings on the same page.\n     */\n    var Timepicker = function () {\n        this.regional = []; // Available regional settings, indexed by language code\n        this.regional[''] = { // Default regional settings\n            currentText: 'Now',\n            closeText: 'Done',\n            amNames: ['AM', 'A'],\n            pmNames: ['PM', 'P'],\n            timeFormat: 'HH:mm',\n            timeSuffix: '',\n            timeOnlyTitle: 'Choose Time',\n            timeText: 'Time',\n            hourText: 'Hour',\n            minuteText: 'Minute',\n            secondText: 'Second',\n            millisecText: 'Millisecond',\n            microsecText: 'Microsecond',\n            timezoneText: 'Time Zone',\n            isRTL: false\n        };\n        this._defaults = { // Global defaults for all the datetime picker instances\n            showButtonPanel: true,\n            timeOnly: false,\n            timeOnlyShowDate: false,\n            showHour: null,\n            showMinute: null,\n            showSecond: null,\n            showMillisec: null,\n            showMicrosec: null,\n            showTimezone: null,\n            showTime: true,\n            stepHour: 1,\n            stepMinute: 1,\n            stepSecond: 1,\n            stepMillisec: 1,\n            stepMicrosec: 1,\n            hour: 0,\n            minute: 0,\n            second: 0,\n            millisec: 0,\n            microsec: 0,\n            timezone: null,\n            hourMin: 0,\n            minuteMin: 0,\n            secondMin: 0,\n            millisecMin: 0,\n            microsecMin: 0,\n            hourMax: 23,\n            minuteMax: 59,\n            secondMax: 59,\n            millisecMax: 999,\n            microsecMax: 999,\n            minDateTime: null,\n            maxDateTime: null,\n            maxTime: null,\n            minTime: null,\n            onSelect: null,\n            hourGrid: 0,\n            minuteGrid: 0,\n            secondGrid: 0,\n            millisecGrid: 0,\n            microsecGrid: 0,\n            alwaysSetTime: true,\n            separator: ' ',\n            altFieldTimeOnly: true,\n            altTimeFormat: null,\n            altSeparator: null,\n            altTimeSuffix: null,\n            altRedirectFocus: true,\n            pickerTimeFormat: null,\n            pickerTimeSuffix: null,\n            showTimepicker: true,\n            timezoneList: null,\n            addSliderAccess: false,\n            sliderAccessArgs: null,\n            controlType: 'slider',\n            oneLine: false,\n            defaultValue: null,\n            parse: 'strict',\n            afterInject: null\n        };\n        $.extend(this._defaults, this.regional['']);\n    };\n\n    $.extend(Timepicker.prototype, {\n        $input: null,\n        $altInput: null,\n        $timeObj: null,\n        inst: null,\n        hour_slider: null,\n        minute_slider: null,\n        second_slider: null,\n        millisec_slider: null,\n        microsec_slider: null,\n        timezone_select: null,\n        maxTime: null,\n        minTime: null,\n        hour: 0,\n        minute: 0,\n        second: 0,\n        millisec: 0,\n        microsec: 0,\n        timezone: null,\n        hourMinOriginal: null,\n        minuteMinOriginal: null,\n        secondMinOriginal: null,\n        millisecMinOriginal: null,\n        microsecMinOriginal: null,\n        hourMaxOriginal: null,\n        minuteMaxOriginal: null,\n        secondMaxOriginal: null,\n        millisecMaxOriginal: null,\n        microsecMaxOriginal: null,\n        ampm: '',\n        formattedDate: '',\n        formattedTime: '',\n        formattedDateTime: '',\n        timezoneList: null,\n        units: ['hour', 'minute', 'second', 'millisec', 'microsec'],\n        support: {},\n        control: null,\n\n        /*\n         * Override the default settings for all instances of the time picker.\n         * @param  {Object} settings  object - the new settings to use as defaults (anonymous object)\n         * @return {Object} the manager object\n         */\n        setDefaults: function (settings) {\n            extendRemove(this._defaults, settings || {});\n            return this;\n        },\n\n        /*\n         * Create a new Timepicker instance\n         */\n        _newInst: function ($input, opts) {\n            var tp_inst = new Timepicker(),\n                inlineSettings = {},\n                fns = {},\n                overrides, i;\n\n            for (var attrName in this._defaults) {\n                if (this._defaults.hasOwnProperty(attrName)) {\n                    var attrValue = $input.attr('time:' + attrName);\n                    if (attrValue) {\n                        try {\n                            inlineSettings[attrName] = eval(attrValue);\n                        } catch (err) {\n                            inlineSettings[attrName] = attrValue;\n                        }\n                    }\n                }\n            }\n\n            overrides = {\n                beforeShow: function (input, dp_inst) {\n                    if ($.isFunction(tp_inst._defaults.evnts.beforeShow)) {\n                        return tp_inst._defaults.evnts.beforeShow.call($input[0], input, dp_inst, tp_inst);\n                    }\n                },\n                onChangeMonthYear: function (year, month, dp_inst) {\n                    // Update the time as well : this prevents the time from disappearing from the $input field.\n                    // tp_inst._updateDateTime(dp_inst);\n                    if ($.isFunction(tp_inst._defaults.evnts.onChangeMonthYear)) {\n                        tp_inst._defaults.evnts.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst);\n                    }\n                },\n                onClose: function (dateText, dp_inst) {\n                    if (tp_inst.timeDefined === true && $input.val() !== '') {\n                        tp_inst._updateDateTime(dp_inst);\n                    }\n                    if ($.isFunction(tp_inst._defaults.evnts.onClose)) {\n                        tp_inst._defaults.evnts.onClose.call($input[0], dateText, dp_inst, tp_inst);\n                    }\n                }\n            };\n            for (i in overrides) {\n                if (overrides.hasOwnProperty(i)) {\n                    fns[i] = opts[i] || this._defaults[i] || null;\n                }\n            }\n\n            tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, opts, overrides, {\n                evnts: fns,\n                timepicker: tp_inst // add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');\n            });\n            tp_inst.amNames = $.map(tp_inst._defaults.amNames, function (val) {\n                return val.toUpperCase();\n            });\n            tp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function (val) {\n                return val.toUpperCase();\n            });\n\n            // detect which units are supported\n            tp_inst.support = detectSupport(\n                tp_inst._defaults.timeFormat +\n                (tp_inst._defaults.pickerTimeFormat ? tp_inst._defaults.pickerTimeFormat : '') +\n                (tp_inst._defaults.altTimeFormat ? tp_inst._defaults.altTimeFormat : ''));\n\n            // controlType is string - key to our this._controls\n            if (typeof(tp_inst._defaults.controlType) === 'string') {\n                if (tp_inst._defaults.controlType === 'slider' && typeof($.ui.slider) === 'undefined') {\n                    tp_inst._defaults.controlType = 'select';\n                }\n                tp_inst.control = tp_inst._controls[tp_inst._defaults.controlType];\n            }\n            // controlType is an object and must implement create, options, value methods\n            else {\n                tp_inst.control = tp_inst._defaults.controlType;\n            }\n\n            // prep the timezone options\n            var timezoneList = [-720, -660, -600, -570, -540, -480, -420, -360, -300, -270, -240, -210, -180, -120, -60,\n                0, 60, 120, 180, 210, 240, 270, 300, 330, 345, 360, 390, 420, 480, 525, 540, 570, 600, 630, 660, 690, 720, 765, 780, 840];\n            if (tp_inst._defaults.timezoneList !== null) {\n                timezoneList = tp_inst._defaults.timezoneList;\n            }\n            var tzl = timezoneList.length, tzi = 0, tzv = null;\n            if (tzl > 0 && typeof timezoneList[0] !== 'object') {\n                for (; tzi < tzl; tzi++) {\n                    tzv = timezoneList[tzi];\n                    timezoneList[tzi] = { value: tzv, label: $.timepicker.timezoneOffsetString(tzv, tp_inst.support.iso8601) };\n                }\n            }\n            tp_inst._defaults.timezoneList = timezoneList;\n\n            // set the default units\n            tp_inst.timezone = tp_inst._defaults.timezone !== null ? $.timepicker.timezoneOffsetNumber(tp_inst._defaults.timezone) :\n                ((new Date()).getTimezoneOffset() * -1);\n            tp_inst.hour = tp_inst._defaults.hour < tp_inst._defaults.hourMin ? tp_inst._defaults.hourMin :\n                tp_inst._defaults.hour > tp_inst._defaults.hourMax ? tp_inst._defaults.hourMax : tp_inst._defaults.hour;\n            tp_inst.minute = tp_inst._defaults.minute < tp_inst._defaults.minuteMin ? tp_inst._defaults.minuteMin :\n                tp_inst._defaults.minute > tp_inst._defaults.minuteMax ? tp_inst._defaults.minuteMax : tp_inst._defaults.minute;\n            tp_inst.second = tp_inst._defaults.second < tp_inst._defaults.secondMin ? tp_inst._defaults.secondMin :\n                tp_inst._defaults.second > tp_inst._defaults.secondMax ? tp_inst._defaults.secondMax : tp_inst._defaults.second;\n            tp_inst.millisec = tp_inst._defaults.millisec < tp_inst._defaults.millisecMin ? tp_inst._defaults.millisecMin :\n                tp_inst._defaults.millisec > tp_inst._defaults.millisecMax ? tp_inst._defaults.millisecMax : tp_inst._defaults.millisec;\n            tp_inst.microsec = tp_inst._defaults.microsec < tp_inst._defaults.microsecMin ? tp_inst._defaults.microsecMin :\n                tp_inst._defaults.microsec > tp_inst._defaults.microsecMax ? tp_inst._defaults.microsecMax : tp_inst._defaults.microsec;\n            tp_inst.ampm = '';\n            tp_inst.$input = $input;\n\n            if (tp_inst._defaults.altField) {\n                tp_inst.$altInput = $(tp_inst._defaults.altField);\n                if (tp_inst._defaults.altRedirectFocus === true) {\n                    tp_inst.$altInput.css({\n                        cursor: 'pointer'\n                    }).focus(function () {\n                        $input.trigger(\"focus\");\n                    });\n                }\n            }\n\n            if (tp_inst._defaults.minDate === 0 || tp_inst._defaults.minDateTime === 0) {\n                tp_inst._defaults.minDate = new Date();\n            }\n            if (tp_inst._defaults.maxDate === 0 || tp_inst._defaults.maxDateTime === 0) {\n                tp_inst._defaults.maxDate = new Date();\n            }\n\n            // datepicker needs minDate/maxDate, timepicker needs minDateTime/maxDateTime..\n            if (tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date) {\n                tp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime());\n            }\n            if (tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date) {\n                tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime());\n            }\n            if (tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date) {\n                tp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime());\n            }\n            if (tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date) {\n                tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime());\n            }\n            tp_inst.$input.bind('focus', function () {\n                tp_inst._onFocus();\n            });\n\n            return tp_inst;\n        },\n\n        /*\n         * add our sliders to the calendar\n         */\n        _addTimePicker: function (dp_inst) {\n            var currDT = $.trim((this.$altInput && this._defaults.altFieldTimeOnly) ? this.$input.val() + ' ' + this.$altInput.val() : this.$input.val());\n\n            this.timeDefined = this._parseTime(currDT);\n            this._limitMinMaxDateTime(dp_inst, false);\n            this._injectTimePicker();\n            this._afterInject();\n        },\n\n        /*\n         * parse the time string from input value or _setTime\n         */\n        _parseTime: function (timeString, withDate) {\n            if (!this.inst) {\n                this.inst = $.datepicker._getInst(this.$input[0]);\n            }\n\n            if (withDate || !this._defaults.timeOnly) {\n                var dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat');\n                try {\n                    var parseRes = parseDateTimeInternal(dp_dateFormat, this._defaults.timeFormat, timeString, $.datepicker._getFormatConfig(this.inst), this._defaults);\n                    if (!parseRes.timeObj) {\n                        return false;\n                    }\n                    $.extend(this, parseRes.timeObj);\n                } catch (err) {\n                    $.timepicker.log(\"Error parsing the date/time string: \" + err +\n                        \"\\ndate/time string = \" + timeString +\n                        \"\\ntimeFormat = \" + this._defaults.timeFormat +\n                        \"\\ndateFormat = \" + dp_dateFormat);\n                    return false;\n                }\n                return true;\n            } else {\n                var timeObj = $.datepicker.parseTime(this._defaults.timeFormat, timeString, this._defaults);\n                if (!timeObj) {\n                    return false;\n                }\n                $.extend(this, timeObj);\n                return true;\n            }\n        },\n\n        /*\n         * Handle callback option after injecting timepicker\n         */\n        _afterInject: function() {\n            var o = this.inst.settings;\n            if ($.isFunction(o.afterInject)) {\n                o.afterInject.call(this);\n            }\n        },\n\n        /*\n         * generate and inject html for timepicker into ui datepicker\n         */\n        _injectTimePicker: function () {\n            var $dp = this.inst.dpDiv,\n                o = this.inst.settings,\n                tp_inst = this,\n                litem = '',\n                uitem = '',\n                show = null,\n                max = {},\n                gridSize = {},\n                size = null,\n                i = 0,\n                l = 0;\n\n            // Prevent displaying twice\n            if ($dp.find(\"div.ui-timepicker-div\").length === 0 && o.showTimepicker) {\n                var noDisplay = ' ui_tpicker_unit_hide',\n                    html = '<div class=\"ui-timepicker-div' + (o.isRTL ? ' ui-timepicker-rtl' : '') + (o.oneLine && o.controlType === 'select' ? ' ui-timepicker-oneLine' : '') + '\"><dl>' + '<dt class=\"ui_tpicker_time_label' + ((o.showTime) ? '' : noDisplay) + '\">' + o.timeText + '</dt>' +\n                        '<dd class=\"ui_tpicker_time '+ ((o.showTime) ? '' : noDisplay) + '\"><input class=\"ui_tpicker_time_input\" ' + (o.timeInput ? '' : 'disabled') + '/></dd>';\n\n                // Create the markup\n                for (i = 0, l = this.units.length; i < l; i++) {\n                    litem = this.units[i];\n                    uitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);\n                    show = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];\n\n                    // Added by Peter Medeiros:\n                    // - Figure out what the hour/minute/second max should be based on the step values.\n                    // - Example: if stepMinute is 15, then minMax is 45.\n                    max[litem] = parseInt((o[litem + 'Max'] - ((o[litem + 'Max'] - o[litem + 'Min']) % o['step' + uitem])), 10);\n                    gridSize[litem] = 0;\n\n                    html += '<dt class=\"ui_tpicker_' + litem + '_label' + (show ? '' : noDisplay) + '\">' + o[litem + 'Text'] + '</dt>' +\n                        '<dd class=\"ui_tpicker_' + litem + (show ? '' : noDisplay) + '\"><div class=\"ui_tpicker_' + litem + '_slider' + (show ? '' : noDisplay) + '\"></div>';\n\n                    if (show && o[litem + 'Grid'] > 0) {\n                        html += '<div style=\"padding-left: 1px\"><table class=\"ui-tpicker-grid-label\"><tr>';\n\n                        if (litem === 'hour') {\n                            for (var h = o[litem + 'Min']; h <= max[litem]; h += parseInt(o[litem + 'Grid'], 10)) {\n                                gridSize[litem]++;\n                                var tmph = $.datepicker.formatTime(this.support.ampm ? 'hht' : 'HH', {hour: h}, o);\n                                html += '<td data-for=\"' + litem + '\">' + tmph + '</td>';\n                            }\n                        }\n                        else {\n                            for (var m = o[litem + 'Min']; m <= max[litem]; m += parseInt(o[litem + 'Grid'], 10)) {\n                                gridSize[litem]++;\n                                html += '<td data-for=\"' + litem + '\">' + ((m < 10) ? '0' : '') + m + '</td>';\n                            }\n                        }\n\n                        html += '</tr></table></div>';\n                    }\n                    html += '</dd>';\n                }\n\n                // Timezone\n                var showTz = o.showTimezone !== null ? o.showTimezone : this.support.timezone;\n                html += '<dt class=\"ui_tpicker_timezone_label' + (showTz ? '' : noDisplay) + '\">' + o.timezoneText + '</dt>';\n                html += '<dd class=\"ui_tpicker_timezone' + (showTz ? '' : noDisplay) + '\"></dd>';\n\n                // Create the elements from string\n                html += '</dl></div>';\n                var $tp = $(html);\n\n                // if we only want time picker...\n                if (o.timeOnly === true) {\n                    $tp.prepend('<div class=\"ui-widget-header ui-helper-clearfix ui-corner-all\">' + '<div class=\"ui-datepicker-title\">' + o.timeOnlyTitle + '</div>' + '</div>');\n                    $dp.find('.ui-datepicker-header, .ui-datepicker-calendar').hide();\n                }\n\n                // add sliders, adjust grids, add events\n                for (i = 0, l = tp_inst.units.length; i < l; i++) {\n                    litem = tp_inst.units[i];\n                    uitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);\n                    show = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];\n\n                    // add the slider\n                    tp_inst[litem + '_slider'] = tp_inst.control.create(tp_inst, $tp.find('.ui_tpicker_' + litem + '_slider'), litem, tp_inst[litem], o[litem + 'Min'], max[litem], o['step' + uitem]);\n\n                    // adjust the grid and add click event\n                    if (show && o[litem + 'Grid'] > 0) {\n                        size = 100 * gridSize[litem] * o[litem + 'Grid'] / (max[litem] - o[litem + 'Min']);\n                        $tp.find('.ui_tpicker_' + litem + ' table').css({\n                            width: size + \"%\",\n                            marginLeft: o.isRTL ? '0' : ((size / (-2 * gridSize[litem])) + \"%\"),\n                            marginRight: o.isRTL ? ((size / (-2 * gridSize[litem])) + \"%\") : '0',\n                            borderCollapse: 'collapse'\n                        }).find(\"td\").click(function (e) {\n                            var $t = $(this),\n                                h = $t.html(),\n                                n = parseInt(h.replace(/[^0-9]/g), 10),\n                                ap = h.replace(/[^apm]/ig),\n                                f = $t.data('for'); // loses scope, so we use data-for\n\n                            if (f === 'hour') {\n                                if (ap.indexOf('p') !== -1 && n < 12) {\n                                    n += 12;\n                                }\n                                else {\n                                    if (ap.indexOf('a') !== -1 && n === 12) {\n                                        n = 0;\n                                    }\n                                }\n                            }\n\n                            tp_inst.control.value(tp_inst, tp_inst[f + '_slider'], litem, n);\n\n                            tp_inst._onTimeChange();\n                            tp_inst._onSelectHandler();\n                        }).css({\n                            cursor: 'pointer',\n                            width: (100 / gridSize[litem]) + '%',\n                            textAlign: 'center',\n                            overflow: 'hidden'\n                        });\n                    } // end if grid > 0\n                } // end for loop\n\n                // Add timezone options\n                this.timezone_select = $tp.find('.ui_tpicker_timezone').append('<select></select>').find(\"select\");\n                $.fn.append.apply(this.timezone_select,\n                    $.map(o.timezoneList, function (val, idx) {\n                        return $(\"<option />\").val(typeof val === \"object\" ? val.value : val).text(typeof val === \"object\" ? val.label : val);\n                    }));\n                if (typeof(this.timezone) !== \"undefined\" && this.timezone !== null && this.timezone !== \"\") {\n                    var local_timezone = (new Date(this.inst.selectedYear, this.inst.selectedMonth, this.inst.selectedDay, 12)).getTimezoneOffset() * -1;\n                    if (local_timezone === this.timezone) {\n                        selectLocalTimezone(tp_inst);\n                    } else {\n                        this.timezone_select.val(this.timezone);\n                    }\n                } else {\n                    if (typeof(this.hour) !== \"undefined\" && this.hour !== null && this.hour !== \"\") {\n                        this.timezone_select.val(o.timezone);\n                    } else {\n                        selectLocalTimezone(tp_inst);\n                    }\n                }\n                this.timezone_select.change(function () {\n                    tp_inst._onTimeChange();\n                    tp_inst._onSelectHandler();\n                    tp_inst._afterInject();\n                });\n                // End timezone options\n\n                // inject timepicker into datepicker\n                var $buttonPanel = $dp.find('.ui-datepicker-buttonpane');\n                if ($buttonPanel.length) {\n                    $buttonPanel.before($tp);\n                } else {\n                    $dp.append($tp);\n                }\n\n                this.$timeObj = $tp.find('.ui_tpicker_time_input');\n                this.$timeObj.change(function () {\n                    var timeFormat = tp_inst.inst.settings.timeFormat;\n                    var parsedTime = $.datepicker.parseTime(timeFormat, this.value);\n                    var update = new Date();\n                    if (parsedTime) {\n                        update.setHours(parsedTime.hour);\n                        update.setMinutes(parsedTime.minute);\n                        update.setSeconds(parsedTime.second);\n                        $.datepicker._setTime(tp_inst.inst, update);\n                    } else {\n                        this.value = tp_inst.formattedTime;\n                        this.blur();\n                    }\n                });\n\n                if (this.inst !== null) {\n                    var timeDefined = this.timeDefined;\n                    this._onTimeChange();\n                    this.timeDefined = timeDefined;\n                }\n\n                // slideAccess integration: http://trentrichardson.com/2011/11/11/jquery-ui-sliders-and-touch-accessibility/\n                if (this._defaults.addSliderAccess) {\n                    var sliderAccessArgs = this._defaults.sliderAccessArgs,\n                        rtl = this._defaults.isRTL;\n                    sliderAccessArgs.isRTL = rtl;\n\n                    setTimeout(function () { // fix for inline mode\n                        if ($tp.find('.ui-slider-access').length === 0) {\n                            $tp.find('.ui-slider:visible').sliderAccess(sliderAccessArgs);\n\n                            // fix any grids since sliders are shorter\n                            var sliderAccessWidth = $tp.find('.ui-slider-access:eq(0)').outerWidth(true);\n                            if (sliderAccessWidth) {\n                                $tp.find('table:visible').each(function () {\n                                    var $g = $(this),\n                                        oldWidth = $g.outerWidth(),\n                                        oldMarginLeft = $g.css(rtl ? 'marginRight' : 'marginLeft').toString().replace('%', ''),\n                                        newWidth = oldWidth - sliderAccessWidth,\n                                        newMarginLeft = ((oldMarginLeft * newWidth) / oldWidth) + '%',\n                                        css = { width: newWidth, marginRight: 0, marginLeft: 0 };\n                                    css[rtl ? 'marginRight' : 'marginLeft'] = newMarginLeft;\n                                    $g.css(css);\n                                });\n                            }\n                        }\n                    }, 10);\n                }\n                // end slideAccess integration\n\n                tp_inst._limitMinMaxDateTime(this.inst, true);\n            }\n        },\n\n        /*\n         * This function tries to limit the ability to go outside the\n         * min/max date range\n         */\n        _limitMinMaxDateTime: function (dp_inst, adjustSliders) {\n            var o = this._defaults,\n                dp_date = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay);\n\n            if (!this._defaults.showTimepicker) {\n                return;\n            } // No time so nothing to check here\n\n            if ($.datepicker._get(dp_inst, 'minDateTime') !== null && $.datepicker._get(dp_inst, 'minDateTime') !== undefined && dp_date) {\n                var minDateTime = $.datepicker._get(dp_inst, 'minDateTime'),\n                    minDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);\n\n                if (this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null || this.microsecMinOriginal === null) {\n                    this.hourMinOriginal = o.hourMin;\n                    this.minuteMinOriginal = o.minuteMin;\n                    this.secondMinOriginal = o.secondMin;\n                    this.millisecMinOriginal = o.millisecMin;\n                    this.microsecMinOriginal = o.microsecMin;\n                }\n\n                if (dp_inst.settings.timeOnly || minDateTimeDate.getTime() === dp_date.getTime()) {\n                    this._defaults.hourMin = minDateTime.getHours();\n                    if (this.hour <= this._defaults.hourMin) {\n                        this.hour = this._defaults.hourMin;\n                        this._defaults.minuteMin = minDateTime.getMinutes();\n                        if (this.minute <= this._defaults.minuteMin) {\n                            this.minute = this._defaults.minuteMin;\n                            this._defaults.secondMin = minDateTime.getSeconds();\n                            if (this.second <= this._defaults.secondMin) {\n                                this.second = this._defaults.secondMin;\n                                this._defaults.millisecMin = minDateTime.getMilliseconds();\n                                if (this.millisec <= this._defaults.millisecMin) {\n                                    this.millisec = this._defaults.millisecMin;\n                                    this._defaults.microsecMin = minDateTime.getMicroseconds();\n                                } else {\n                                    if (this.microsec < this._defaults.microsecMin) {\n                                        this.microsec = this._defaults.microsecMin;\n                                    }\n                                    this._defaults.microsecMin = this.microsecMinOriginal;\n                                }\n                            } else {\n                                this._defaults.millisecMin = this.millisecMinOriginal;\n                                this._defaults.microsecMin = this.microsecMinOriginal;\n                            }\n                        } else {\n                            this._defaults.secondMin = this.secondMinOriginal;\n                            this._defaults.millisecMin = this.millisecMinOriginal;\n                            this._defaults.microsecMin = this.microsecMinOriginal;\n                        }\n                    } else {\n                        this._defaults.minuteMin = this.minuteMinOriginal;\n                        this._defaults.secondMin = this.secondMinOriginal;\n                        this._defaults.millisecMin = this.millisecMinOriginal;\n                        this._defaults.microsecMin = this.microsecMinOriginal;\n                    }\n                } else {\n                    this._defaults.hourMin = this.hourMinOriginal;\n                    this._defaults.minuteMin = this.minuteMinOriginal;\n                    this._defaults.secondMin = this.secondMinOriginal;\n                    this._defaults.millisecMin = this.millisecMinOriginal;\n                    this._defaults.microsecMin = this.microsecMinOriginal;\n                }\n            }\n\n            if ($.datepicker._get(dp_inst, 'maxDateTime') !== null && $.datepicker._get(dp_inst, 'maxDateTime') !== undefined && dp_date) {\n                var maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'),\n                    maxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);\n\n                if (this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null || this.millisecMaxOriginal === null) {\n                    this.hourMaxOriginal = o.hourMax;\n                    this.minuteMaxOriginal = o.minuteMax;\n                    this.secondMaxOriginal = o.secondMax;\n                    this.millisecMaxOriginal = o.millisecMax;\n                    this.microsecMaxOriginal = o.microsecMax;\n                }\n\n                if (dp_inst.settings.timeOnly || maxDateTimeDate.getTime() === dp_date.getTime()) {\n                    this._defaults.hourMax = maxDateTime.getHours();\n                    if (this.hour >= this._defaults.hourMax) {\n                        this.hour = this._defaults.hourMax;\n                        this._defaults.minuteMax = maxDateTime.getMinutes();\n                        if (this.minute >= this._defaults.minuteMax) {\n                            this.minute = this._defaults.minuteMax;\n                            this._defaults.secondMax = maxDateTime.getSeconds();\n                            if (this.second >= this._defaults.secondMax) {\n                                this.second = this._defaults.secondMax;\n                                this._defaults.millisecMax = maxDateTime.getMilliseconds();\n                                if (this.millisec >= this._defaults.millisecMax) {\n                                    this.millisec = this._defaults.millisecMax;\n                                    this._defaults.microsecMax = maxDateTime.getMicroseconds();\n                                } else {\n                                    if (this.microsec > this._defaults.microsecMax) {\n                                        this.microsec = this._defaults.microsecMax;\n                                    }\n                                    this._defaults.microsecMax = this.microsecMaxOriginal;\n                                }\n                            } else {\n                                this._defaults.millisecMax = this.millisecMaxOriginal;\n                                this._defaults.microsecMax = this.microsecMaxOriginal;\n                            }\n                        } else {\n                            this._defaults.secondMax = this.secondMaxOriginal;\n                            this._defaults.millisecMax = this.millisecMaxOriginal;\n                            this._defaults.microsecMax = this.microsecMaxOriginal;\n                        }\n                    } else {\n                        this._defaults.minuteMax = this.minuteMaxOriginal;\n                        this._defaults.secondMax = this.secondMaxOriginal;\n                        this._defaults.millisecMax = this.millisecMaxOriginal;\n                        this._defaults.microsecMax = this.microsecMaxOriginal;\n                    }\n                } else {\n                    this._defaults.hourMax = this.hourMaxOriginal;\n                    this._defaults.minuteMax = this.minuteMaxOriginal;\n                    this._defaults.secondMax = this.secondMaxOriginal;\n                    this._defaults.millisecMax = this.millisecMaxOriginal;\n                    this._defaults.microsecMax = this.microsecMaxOriginal;\n                }\n            }\n\n            if (dp_inst.settings.minTime!==null) {\n                var tempMinTime=new Date(\"01/01/1970 \" + dp_inst.settings.minTime);\n                if (this.hour<tempMinTime.getHours()) {\n                    this.hour=this._defaults.hourMin=tempMinTime.getHours();\n                    this.minute=this._defaults.minuteMin=tempMinTime.getMinutes();\n                } else if (this.hour===tempMinTime.getHours() && this.minute<tempMinTime.getMinutes()) {\n                    this.minute=this._defaults.minuteMin=tempMinTime.getMinutes();\n                } else {\n                    if (this._defaults.hourMin<tempMinTime.getHours()) {\n                        this._defaults.hourMin=tempMinTime.getHours();\n                        this._defaults.minuteMin=tempMinTime.getMinutes();\n                    } else if (this._defaults.hourMin===tempMinTime.getHours()===this.hour && this._defaults.minuteMin<tempMinTime.getMinutes()) {\n                        this._defaults.minuteMin=tempMinTime.getMinutes();\n                    } else {\n                        this._defaults.minuteMin=0;\n                    }\n                }\n            }\n\n            if (dp_inst.settings.maxTime!==null) {\n                var tempMaxTime=new Date(\"01/01/1970 \" + dp_inst.settings.maxTime);\n                if (this.hour>tempMaxTime.getHours()) {\n                    this.hour=this._defaults.hourMax=tempMaxTime.getHours();\n                    this.minute=this._defaults.minuteMax=tempMaxTime.getMinutes();\n                } else if (this.hour===tempMaxTime.getHours() && this.minute>tempMaxTime.getMinutes()) {\n                    this.minute=this._defaults.minuteMax=tempMaxTime.getMinutes();\n                } else {\n                    if (this._defaults.hourMax>tempMaxTime.getHours()) {\n                        this._defaults.hourMax=tempMaxTime.getHours();\n                        this._defaults.minuteMax=tempMaxTime.getMinutes();\n                    } else if (this._defaults.hourMax===tempMaxTime.getHours()===this.hour && this._defaults.minuteMax>tempMaxTime.getMinutes()) {\n                        this._defaults.minuteMax=tempMaxTime.getMinutes();\n                    } else {\n                        this._defaults.minuteMax=59;\n                    }\n                }\n            }\n\n            if (adjustSliders !== undefined && adjustSliders === true) {\n                var hourMax = parseInt((this._defaults.hourMax - ((this._defaults.hourMax - this._defaults.hourMin) % this._defaults.stepHour)), 10),\n                    minMax = parseInt((this._defaults.minuteMax - ((this._defaults.minuteMax - this._defaults.minuteMin) % this._defaults.stepMinute)), 10),\n                    secMax = parseInt((this._defaults.secondMax - ((this._defaults.secondMax - this._defaults.secondMin) % this._defaults.stepSecond)), 10),\n                    millisecMax = parseInt((this._defaults.millisecMax - ((this._defaults.millisecMax - this._defaults.millisecMin) % this._defaults.stepMillisec)), 10),\n                    microsecMax = parseInt((this._defaults.microsecMax - ((this._defaults.microsecMax - this._defaults.microsecMin) % this._defaults.stepMicrosec)), 10);\n\n                if (this.hour_slider) {\n                    this.control.options(this, this.hour_slider, 'hour', { min: this._defaults.hourMin, max: hourMax, step: this._defaults.stepHour });\n                    this.control.value(this, this.hour_slider, 'hour', this.hour - (this.hour % this._defaults.stepHour));\n                }\n                if (this.minute_slider) {\n                    this.control.options(this, this.minute_slider, 'minute', { min: this._defaults.minuteMin, max: minMax, step: this._defaults.stepMinute });\n                    this.control.value(this, this.minute_slider, 'minute', this.minute - (this.minute % this._defaults.stepMinute));\n                }\n                if (this.second_slider) {\n                    this.control.options(this, this.second_slider, 'second', { min: this._defaults.secondMin, max: secMax, step: this._defaults.stepSecond });\n                    this.control.value(this, this.second_slider, 'second', this.second - (this.second % this._defaults.stepSecond));\n                }\n                if (this.millisec_slider) {\n                    this.control.options(this, this.millisec_slider, 'millisec', { min: this._defaults.millisecMin, max: millisecMax, step: this._defaults.stepMillisec });\n                    this.control.value(this, this.millisec_slider, 'millisec', this.millisec - (this.millisec % this._defaults.stepMillisec));\n                }\n                if (this.microsec_slider) {\n                    this.control.options(this, this.microsec_slider, 'microsec', { min: this._defaults.microsecMin, max: microsecMax, step: this._defaults.stepMicrosec });\n                    this.control.value(this, this.microsec_slider, 'microsec', this.microsec - (this.microsec % this._defaults.stepMicrosec));\n                }\n            }\n\n        },\n\n        /*\n         * when a slider moves, set the internal time...\n         * on time change is also called when the time is updated in the text field\n         */\n        _onTimeChange: function () {\n            if (!this._defaults.showTimepicker) {\n                return;\n            }\n            var hour = (this.hour_slider) ? this.control.value(this, this.hour_slider, 'hour') : false,\n                minute = (this.minute_slider) ? this.control.value(this, this.minute_slider, 'minute') : false,\n                second = (this.second_slider) ? this.control.value(this, this.second_slider, 'second') : false,\n                millisec = (this.millisec_slider) ? this.control.value(this, this.millisec_slider, 'millisec') : false,\n                microsec = (this.microsec_slider) ? this.control.value(this, this.microsec_slider, 'microsec') : false,\n                timezone = (this.timezone_select) ? this.timezone_select.val() : false,\n                o = this._defaults,\n                pickerTimeFormat = o.pickerTimeFormat || o.timeFormat,\n                pickerTimeSuffix = o.pickerTimeSuffix || o.timeSuffix;\n\n            if (typeof(hour) === 'object') {\n                hour = false;\n            }\n            if (typeof(minute) === 'object') {\n                minute = false;\n            }\n            if (typeof(second) === 'object') {\n                second = false;\n            }\n            if (typeof(millisec) === 'object') {\n                millisec = false;\n            }\n            if (typeof(microsec) === 'object') {\n                microsec = false;\n            }\n            if (typeof(timezone) === 'object') {\n                timezone = false;\n            }\n\n            if (hour !== false) {\n                hour = parseInt(hour, 10);\n            }\n            if (minute !== false) {\n                minute = parseInt(minute, 10);\n            }\n            if (second !== false) {\n                second = parseInt(second, 10);\n            }\n            if (millisec !== false) {\n                millisec = parseInt(millisec, 10);\n            }\n            if (microsec !== false) {\n                microsec = parseInt(microsec, 10);\n            }\n            if (timezone !== false) {\n                timezone = timezone.toString();\n            }\n\n            var ampm = o[hour < 12 ? 'amNames' : 'pmNames'][0];\n\n            // If the update was done in the input field, the input field should not be updated.\n            // If the update was done using the sliders, update the input field.\n            var hasChanged = (\n                hour !== parseInt(this.hour,10) || // sliders should all be numeric\n                minute !== parseInt(this.minute,10) ||\n                second !== parseInt(this.second,10) ||\n                millisec !== parseInt(this.millisec,10) ||\n                microsec !== parseInt(this.microsec,10) ||\n                (this.ampm.length > 0 && (hour < 12) !== ($.inArray(this.ampm.toUpperCase(), this.amNames) !== -1)) ||\n                (this.timezone !== null && timezone !== this.timezone.toString()) // could be numeric or \"EST\" format, so use toString()\n            );\n\n            if (hasChanged) {\n\n                if (hour !== false) {\n                    this.hour = hour;\n                }\n                if (minute !== false) {\n                    this.minute = minute;\n                }\n                if (second !== false) {\n                    this.second = second;\n                }\n                if (millisec !== false) {\n                    this.millisec = millisec;\n                }\n                if (microsec !== false) {\n                    this.microsec = microsec;\n                }\n                if (timezone !== false) {\n                    this.timezone = timezone;\n                }\n\n                if (!this.inst) {\n                    this.inst = $.datepicker._getInst(this.$input[0]);\n                }\n\n                this._limitMinMaxDateTime(this.inst, true);\n            }\n            if (this.support.ampm) {\n                this.ampm = ampm;\n            }\n\n            // Updates the time within the timepicker\n            this.formattedTime = $.datepicker.formatTime(o.timeFormat, this, o);\n            if (this.$timeObj) {\n                var sPos = this.$timeObj[0].selectionStart;\n                var ePos = this.$timeObj[0].selectionEnd;\n                if (pickerTimeFormat === o.timeFormat) {\n                    this.$timeObj.val(this.formattedTime + pickerTimeSuffix);\n                }\n                else {\n                    this.$timeObj.val($.datepicker.formatTime(pickerTimeFormat, this, o) + pickerTimeSuffix);\n                }\n                this.$timeObj[0].setSelectionRange(sPos, ePos);\n            }\n\n            this.timeDefined = true;\n            if (hasChanged) {\n                this._updateDateTime();\n                //this.$input.focus(); // may automatically open the picker on setDate\n            }\n        },\n\n        /*\n         * call custom onSelect.\n         * bind to sliders slidestop, and grid click.\n         */\n        _onSelectHandler: function () {\n            var onSelect = this._defaults.onSelect || this.inst.settings.onSelect;\n            var inputEl = this.$input ? this.$input[0] : null;\n            if (onSelect && inputEl) {\n                onSelect.apply(inputEl, [this.formattedDateTime, this]);\n            }\n        },\n\n        /*\n         * update our input with the new date time..\n         */\n        _updateDateTime: function (dp_inst) {\n            dp_inst = this.inst || dp_inst;\n            var dtTmp = (dp_inst.currentYear > 0?\n                    new Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay) :\n                    new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),\n                dt = $.datepicker._daylightSavingAdjust(dtTmp),\n            //dt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),\n            //dt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay)),\n                dateFmt = $.datepicker._get(dp_inst, 'dateFormat'),\n                formatCfg = $.datepicker._getFormatConfig(dp_inst),\n                timeAvailable = dt !== null && this.timeDefined;\n            this.formattedDate = $.datepicker.formatDate(dateFmt, (dt === null ? new Date() : dt), formatCfg);\n            var formattedDateTime = this.formattedDate;\n\n            // if a slider was changed but datepicker doesn't have a value yet, set it\n            if (dp_inst.lastVal === \"\") {\n                dp_inst.currentYear = dp_inst.selectedYear;\n                dp_inst.currentMonth = dp_inst.selectedMonth;\n                dp_inst.currentDay = dp_inst.selectedDay;\n            }\n\n            /*\n             * remove following lines to force every changes in date picker to change the input value\n             * Bug descriptions: when an input field has a default value, and click on the field to pop up the date picker.\n             * If the user manually empty the value in the input field, the date picker will never change selected value.\n             */\n            //if (dp_inst.lastVal !== undefined && (dp_inst.lastVal.length > 0 && this.$input.val().length === 0)) {\n            //\treturn;\n            //}\n\n            if (this._defaults.timeOnly === true && this._defaults.timeOnlyShowDate === false) {\n                formattedDateTime = this.formattedTime;\n            } else if ((this._defaults.timeOnly !== true && (this._defaults.alwaysSetTime || timeAvailable)) || (this._defaults.timeOnly === true && this._defaults.timeOnlyShowDate === true)) {\n                formattedDateTime += this._defaults.separator + this.formattedTime + this._defaults.timeSuffix;\n            }\n\n            this.formattedDateTime = formattedDateTime;\n\n            if (!this._defaults.showTimepicker) {\n                this.$input.val(this.formattedDate);\n            } else if (this.$altInput && this._defaults.timeOnly === false && this._defaults.altFieldTimeOnly === true) {\n                this.$altInput.val(this.formattedTime);\n                this.$input.val(this.formattedDate);\n            } else if (this.$altInput) {\n                this.$input.val(formattedDateTime);\n                var altFormattedDateTime = '',\n                    altSeparator = this._defaults.altSeparator !== null ? this._defaults.altSeparator : this._defaults.separator,\n                    altTimeSuffix = this._defaults.altTimeSuffix !== null ? this._defaults.altTimeSuffix : this._defaults.timeSuffix;\n\n                if (!this._defaults.timeOnly) {\n                    if (this._defaults.altFormat) {\n                        altFormattedDateTime = $.datepicker.formatDate(this._defaults.altFormat, (dt === null ? new Date() : dt), formatCfg);\n                    }\n                    else {\n                        altFormattedDateTime = this.formattedDate;\n                    }\n\n                    if (altFormattedDateTime) {\n                        altFormattedDateTime += altSeparator;\n                    }\n                }\n\n                if (this._defaults.altTimeFormat !== null) {\n                    altFormattedDateTime += $.datepicker.formatTime(this._defaults.altTimeFormat, this, this._defaults) + altTimeSuffix;\n                }\n                else {\n                    altFormattedDateTime += this.formattedTime + altTimeSuffix;\n                }\n                this.$altInput.val(altFormattedDateTime);\n            } else {\n                this.$input.val(formattedDateTime);\n            }\n\n            this.$input.trigger(\"change\");\n        },\n\n        _onFocus: function () {\n            if (!this.$input.val() && this._defaults.defaultValue) {\n                this.$input.val(this._defaults.defaultValue);\n                var inst = $.datepicker._getInst(this.$input.get(0)),\n                    tp_inst = $.datepicker._get(inst, 'timepicker');\n                if (tp_inst) {\n                    if (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {\n                        try {\n                            $.datepicker._updateDatepicker(inst);\n                        } catch (err) {\n                            $.timepicker.log(err);\n                        }\n                    }\n                }\n            }\n        },\n\n        /*\n         * Small abstraction to control types\n         * We can add more, just be sure to follow the pattern: create, options, value\n         */\n        _controls: {\n            // slider methods\n            slider: {\n                create: function (tp_inst, obj, unit, val, min, max, step) {\n                    var rtl = tp_inst._defaults.isRTL; // if rtl go -60->0 instead of 0->60\n                    return obj.prop('slide', null).slider({\n                        orientation: \"horizontal\",\n                        value: rtl ? val * -1 : val,\n                        min: rtl ? max * -1 : min,\n                        max: rtl ? min * -1 : max,\n                        step: step,\n                        slide: function (event, ui) {\n                            tp_inst.control.value(tp_inst, $(this), unit, rtl ? ui.value * -1 : ui.value);\n                            tp_inst._onTimeChange();\n                        },\n                        stop: function (event, ui) {\n                            tp_inst._onSelectHandler();\n                        }\n                    });\n                },\n                options: function (tp_inst, obj, unit, opts, val) {\n                    if (tp_inst._defaults.isRTL) {\n                        if (typeof(opts) === 'string') {\n                            if (opts === 'min' || opts === 'max') {\n                                if (val !== undefined) {\n                                    return obj.slider(opts, val * -1);\n                                }\n                                return Math.abs(obj.slider(opts));\n                            }\n                            return obj.slider(opts);\n                        }\n                        var min = opts.min,\n                            max = opts.max;\n                        opts.min = opts.max = null;\n                        if (min !== undefined) {\n                            opts.max = min * -1;\n                        }\n                        if (max !== undefined) {\n                            opts.min = max * -1;\n                        }\n                        return obj.slider(opts);\n                    }\n                    if (typeof(opts) === 'string' && val !== undefined) {\n                        return obj.slider(opts, val);\n                    }\n                    return obj.slider(opts);\n                },\n                value: function (tp_inst, obj, unit, val) {\n                    if (tp_inst._defaults.isRTL) {\n                        if (val !== undefined) {\n                            return obj.slider('value', val * -1);\n                        }\n                        return Math.abs(obj.slider('value'));\n                    }\n                    if (val !== undefined) {\n                        return obj.slider('value', val);\n                    }\n                    return obj.slider('value');\n                }\n            },\n            // select methods\n            select: {\n                create: function (tp_inst, obj, unit, val, min, max, step) {\n                    var sel = '<select class=\"ui-timepicker-select ui-state-default ui-corner-all\" data-unit=\"' + unit + '\" data-min=\"' + min + '\" data-max=\"' + max + '\" data-step=\"' + step + '\">',\n                        format = tp_inst._defaults.pickerTimeFormat || tp_inst._defaults.timeFormat;\n\n                    for (var i = min; i <= max; i += step) {\n                        sel += '<option value=\"' + i + '\"' + (i === val ? ' selected' : '') + '>';\n                        if (unit === 'hour') {\n                            sel += $.datepicker.formatTime($.trim(format.replace(/[^ht ]/ig, '')), {hour: i}, tp_inst._defaults);\n                        }\n                        else if (unit === 'millisec' || unit === 'microsec' || i >= 10) { sel += i; }\n                        else {sel += '0' + i.toString(); }\n                        sel += '</option>';\n                    }\n                    sel += '</select>';\n\n                    obj.children('select').remove();\n\n                    $(sel).appendTo(obj).change(function (e) {\n                        tp_inst._onTimeChange();\n                        tp_inst._onSelectHandler();\n                        tp_inst._afterInject();\n                    });\n\n                    return obj;\n                },\n                options: function (tp_inst, obj, unit, opts, val) {\n                    var o = {},\n                        $t = obj.children('select');\n                    if (typeof(opts) === 'string') {\n                        if (val === undefined) {\n                            return $t.data(opts);\n                        }\n                        o[opts] = val;\n                    }\n                    else { o = opts; }\n                    return tp_inst.control.create(tp_inst, obj, $t.data('unit'), $t.val(), o.min>=0 ? o.min : $t.data('min'), o.max || $t.data('max'), o.step || $t.data('step'));\n                },\n                value: function (tp_inst, obj, unit, val) {\n                    var $t = obj.children('select');\n                    if (val !== undefined) {\n                        return $t.val(val);\n                    }\n                    return $t.val();\n                }\n            }\n        } // end _controls\n\n    });\n\n    $.fn.extend({\n        /*\n         * shorthand just to use timepicker.\n         */\n        timepicker: function (o) {\n            o = o || {};\n            var tmp_args = Array.prototype.slice.call(arguments);\n\n            if (typeof o === 'object') {\n                tmp_args[0] = $.extend(o, {\n                    timeOnly: true\n                });\n            }\n\n            return $(this).each(function () {\n                $.fn.datetimepicker.apply($(this), tmp_args);\n            });\n        },\n\n        /*\n         * extend timepicker to datepicker\n         */\n        datetimepicker: function (o) {\n            o = o || {};\n            var tmp_args = arguments;\n\n            if (typeof(o) === 'string') {\n                if (o === 'getDate'  || (o === 'option' && tmp_args.length === 2 && typeof (tmp_args[1]) === 'string')) {\n                    return $.fn.datepicker.apply($(this[0]), tmp_args);\n                } else {\n                    return this.each(function () {\n                        var $t = $(this);\n                        $t.datepicker.apply($t, tmp_args);\n                    });\n                }\n            } else {\n                return this.each(function () {\n                    var $t = $(this);\n                    $t.datepicker($.timepicker._newInst($t, o)._defaults);\n                });\n            }\n        }\n    });\n\n    /*\n     * Public Utility to parse date and time\n     */\n    $.datepicker.parseDateTime = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {\n        var parseRes = parseDateTimeInternal(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings);\n        if (parseRes.timeObj) {\n            var t = parseRes.timeObj;\n            parseRes.date.setHours(t.hour, t.minute, t.second, t.millisec);\n            parseRes.date.setMicroseconds(t.microsec);\n        }\n\n        return parseRes.date;\n    };\n\n    /*\n     * Public utility to parse time\n     */\n    $.datepicker.parseTime = function (timeFormat, timeString, options) {\n        var o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {}),\n            iso8601 = (timeFormat.replace(/\\'.*?\\'/g, '').indexOf('Z') !== -1);\n\n        // Strict parse requires the timeString to match the timeFormat exactly\n        var strictParse = function (f, s, o) {\n\n            // pattern for standard and localized AM/PM markers\n            var getPatternAmpm = function (amNames, pmNames) {\n                var markers = [];\n                if (amNames) {\n                    $.merge(markers, amNames);\n                }\n                if (pmNames) {\n                    $.merge(markers, pmNames);\n                }\n                markers = $.map(markers, function (val) {\n                    return val.replace(/[.*+?|()\\[\\]{}\\\\]/g, '\\\\$&');\n                });\n                return '(' + markers.join('|') + ')?';\n            };\n\n            // figure out position of time elements.. cause js cant do named captures\n            var getFormatPositions = function (timeFormat) {\n                var finds = timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|c{1}|t{1,2}|z|'.*?')/g),\n                    orders = {\n                        h: -1,\n                        m: -1,\n                        s: -1,\n                        l: -1,\n                        c: -1,\n                        t: -1,\n                        z: -1\n                    };\n\n                if (finds) {\n                    for (var i = 0; i < finds.length; i++) {\n                        if (orders[finds[i].toString().charAt(0)] === -1) {\n                            orders[finds[i].toString().charAt(0)] = i + 1;\n                        }\n                    }\n                }\n                return orders;\n            };\n\n            var regstr = '^' + f.toString()\n                    .replace(/([hH]{1,2}|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')/g, function (match) {\n                        var ml = match.length;\n                        switch (match.charAt(0).toLowerCase()) {\n                            case 'h':\n                                return ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\n                            case 'm':\n                                return ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\n                            case 's':\n                                return ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\n                            case 'l':\n                                return '(\\\\d?\\\\d?\\\\d)';\n                            case 'c':\n                                return '(\\\\d?\\\\d?\\\\d)';\n                            case 'z':\n                                return '(z|[-+]\\\\d\\\\d:?\\\\d\\\\d|\\\\S+)?';\n                            case 't':\n                                return getPatternAmpm(o.amNames, o.pmNames);\n                            default:    // literal escaped in quotes\n                                return '(' + match.replace(/\\'/g, \"\").replace(/(\\.|\\$|\\^|\\\\|\\/|\\(|\\)|\\[|\\]|\\?|\\+|\\*)/g, function (m) { return \"\\\\\" + m; }) + ')?';\n                        }\n                    })\n                    .replace(/\\s/g, '\\\\s?') +\n                    o.timeSuffix + '$',\n                order = getFormatPositions(f),\n                ampm = '',\n                treg;\n\n            treg = s.match(new RegExp(regstr, 'i'));\n\n            var resTime = {\n                hour: 0,\n                minute: 0,\n                second: 0,\n                millisec: 0,\n                microsec: 0\n            };\n\n            if (treg) {\n                if (order.t !== -1) {\n                    if (treg[order.t] === undefined || treg[order.t].length === 0) {\n                        ampm = '';\n                        resTime.ampm = '';\n                    } else {\n                        ampm = $.inArray(treg[order.t].toUpperCase(), $.map(o.amNames, function (x,i) { return x.toUpperCase(); })) !== -1 ? 'AM' : 'PM';\n                        resTime.ampm = o[ampm === 'AM' ? 'amNames' : 'pmNames'][0];\n                    }\n                }\n\n                if (order.h !== -1) {\n                    if (ampm === 'AM' && treg[order.h] === '12') {\n                        resTime.hour = 0; // 12am = 0 hour\n                    } else {\n                        if (ampm === 'PM' && treg[order.h] !== '12') {\n                            resTime.hour = parseInt(treg[order.h], 10) + 12; // 12pm = 12 hour, any other pm = hour + 12\n                        } else {\n                            resTime.hour = Number(treg[order.h]);\n                        }\n                    }\n                }\n\n                if (order.m !== -1) {\n                    resTime.minute = Number(treg[order.m]);\n                }\n                if (order.s !== -1) {\n                    resTime.second = Number(treg[order.s]);\n                }\n                if (order.l !== -1) {\n                    resTime.millisec = Number(treg[order.l]);\n                }\n                if (order.c !== -1) {\n                    resTime.microsec = Number(treg[order.c]);\n                }\n                if (order.z !== -1 && treg[order.z] !== undefined) {\n                    resTime.timezone = $.timepicker.timezoneOffsetNumber(treg[order.z]);\n                }\n\n\n                return resTime;\n            }\n            return false;\n        };// end strictParse\n\n        // First try JS Date, if that fails, use strictParse\n        var looseParse = function (f, s, o) {\n            try {\n                var d = new Date('2012-01-01 ' + s);\n                if (isNaN(d.getTime())) {\n                    d = new Date('2012-01-01T' + s);\n                    if (isNaN(d.getTime())) {\n                        d = new Date('01/01/2012 ' + s);\n                        if (isNaN(d.getTime())) {\n                            throw \"Unable to parse time with native Date: \" + s;\n                        }\n                    }\n                }\n\n                return {\n                    hour: d.getHours(),\n                    minute: d.getMinutes(),\n                    second: d.getSeconds(),\n                    millisec: d.getMilliseconds(),\n                    microsec: d.getMicroseconds(),\n                    timezone: d.getTimezoneOffset() * -1\n                };\n            }\n            catch (err) {\n                try {\n                    return strictParse(f, s, o);\n                }\n                catch (err2) {\n                    $.timepicker.log(\"Unable to parse \\ntimeString: \" + s + \"\\ntimeFormat: \" + f);\n                }\n            }\n            return false;\n        }; // end looseParse\n\n        if (typeof o.parse === \"function\") {\n            return o.parse(timeFormat, timeString, o);\n        }\n        if (o.parse === 'loose') {\n            return looseParse(timeFormat, timeString, o);\n        }\n        return strictParse(timeFormat, timeString, o);\n    };\n\n    /**\n     * Public utility to format the time\n     * @param {string} format format of the time\n     * @param {Object} time Object not a Date for timezones\n     * @param {Object} [options] essentially the regional[].. amNames, pmNames, ampm\n     * @returns {string} the formatted time\n     */\n    $.datepicker.formatTime = function (format, time, options) {\n        options = options || {};\n        options = $.extend({}, $.timepicker._defaults, options);\n        time = $.extend({\n            hour: 0,\n            minute: 0,\n            second: 0,\n            millisec: 0,\n            microsec: 0,\n            timezone: null\n        }, time);\n\n        var tmptime = format,\n            ampmName = options.amNames[0],\n            hour = parseInt(time.hour, 10);\n\n        if (hour > 11) {\n            ampmName = options.pmNames[0];\n        }\n\n        tmptime = tmptime.replace(/(?:HH?|hh?|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')/g, function (match) {\n            switch (match) {\n                case 'HH':\n                    return ('0' + hour).slice(-2);\n                case 'H':\n                    return hour;\n                case 'hh':\n                    return ('0' + convert24to12(hour)).slice(-2);\n                case 'h':\n                    return convert24to12(hour);\n                case 'mm':\n                    return ('0' + time.minute).slice(-2);\n                case 'm':\n                    return time.minute;\n                case 'ss':\n                    return ('0' + time.second).slice(-2);\n                case 's':\n                    return time.second;\n                case 'l':\n                    return ('00' + time.millisec).slice(-3);\n                case 'c':\n                    return ('00' + time.microsec).slice(-3);\n                case 'z':\n                    return $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, false);\n                case 'Z':\n                    return $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, true);\n                case 'T':\n                    return ampmName.charAt(0).toUpperCase();\n                case 'TT':\n                    return ampmName.toUpperCase();\n                case 't':\n                    return ampmName.charAt(0).toLowerCase();\n                case 'tt':\n                    return ampmName.toLowerCase();\n                default:\n                    return match.replace(/'/g, \"\");\n            }\n        });\n\n        return tmptime;\n    };\n\n    /*\n     * the bad hack :/ override datepicker so it doesn't close on select\n     // inspired: http://stackoverflow.com/questions/1252512/jquery-datepicker-prevent-closing-picker-when-clicking-a-date/1762378#1762378\n     */\n    $.datepicker._base_selectDate = $.datepicker._selectDate;\n    $.datepicker._selectDate = function (id, dateStr) {\n        var inst = this._getInst($(id)[0]),\n            tp_inst = this._get(inst, 'timepicker'),\n            was_inline;\n\n        if (tp_inst && inst.settings.showTimepicker) {\n            tp_inst._limitMinMaxDateTime(inst, true);\n            was_inline = inst.inline;\n            inst.inline = inst.stay_open = true;\n            //This way the onSelect handler called from calendarpicker get the full dateTime\n            this._base_selectDate(id, dateStr);\n            inst.inline = was_inline;\n            inst.stay_open = false;\n            this._notifyChange(inst);\n            this._updateDatepicker(inst);\n        } else {\n            this._base_selectDate(id, dateStr);\n        }\n    };\n\n    /*\n     * second bad hack :/ override datepicker so it triggers an event when changing the input field\n     * and does not redraw the datepicker on every selectDate event\n     */\n    $.datepicker._base_updateDatepicker = $.datepicker._updateDatepicker;\n    $.datepicker._updateDatepicker = function (inst) {\n\n        // don't popup the datepicker if there is another instance already opened\n        var input = inst.input[0];\n        if ($.datepicker._curInst && $.datepicker._curInst !== inst && $.datepicker._datepickerShowing && $.datepicker._lastInput !== input) {\n            return;\n        }\n\n        if (typeof(inst.stay_open) !== 'boolean' || inst.stay_open === false) {\n\n            this._base_updateDatepicker(inst);\n\n            // Reload the time control when changing something in the input text field.\n            var tp_inst = this._get(inst, 'timepicker');\n            if (tp_inst) {\n                tp_inst._addTimePicker(inst);\n            }\n        }\n    };\n\n    /*\n     * third bad hack :/ override datepicker so it allows spaces and colon in the input field\n     */\n    $.datepicker._base_doKeyPress = $.datepicker._doKeyPress;\n    $.datepicker._doKeyPress = function (event) {\n        var inst = $.datepicker._getInst(event.target),\n            tp_inst = $.datepicker._get(inst, 'timepicker');\n\n        if (tp_inst) {\n            if ($.datepicker._get(inst, 'constrainInput')) {\n                var ampm = tp_inst.support.ampm,\n                    tz = tp_inst._defaults.showTimezone !== null ? tp_inst._defaults.showTimezone : tp_inst.support.timezone,\n                    dateChars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')),\n                    datetimeChars = tp_inst._defaults.timeFormat.toString()\n                            .replace(/[hms]/g, '')\n                            .replace(/TT/g, ampm ? 'APM' : '')\n                            .replace(/Tt/g, ampm ? 'AaPpMm' : '')\n                            .replace(/tT/g, ampm ? 'AaPpMm' : '')\n                            .replace(/T/g, ampm ? 'AP' : '')\n                            .replace(/tt/g, ampm ? 'apm' : '')\n                            .replace(/t/g, ampm ? 'ap' : '') +\n                        \" \" + tp_inst._defaults.separator +\n                        tp_inst._defaults.timeSuffix +\n                        (tz ? tp_inst._defaults.timezoneList.join('') : '') +\n                        (tp_inst._defaults.amNames.join('')) + (tp_inst._defaults.pmNames.join('')) +\n                        dateChars,\n                    chr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);\n                return event.ctrlKey || (chr < ' ' || !dateChars || datetimeChars.indexOf(chr) > -1);\n            }\n        }\n\n        return $.datepicker._base_doKeyPress(event);\n    };\n\n    /*\n     * Fourth bad hack :/ override _updateAlternate function used in inline mode to init altField\n     * Update any alternate field to synchronise with the main field.\n     */\n    $.datepicker._base_updateAlternate = $.datepicker._updateAlternate;\n    $.datepicker._updateAlternate = function (inst) {\n        var tp_inst = this._get(inst, 'timepicker');\n        if (tp_inst) {\n            var altField = tp_inst._defaults.altField;\n            if (altField) { // update alternate field too\n                var altFormat = tp_inst._defaults.altFormat || tp_inst._defaults.dateFormat,\n                    date = this._getDate(inst),\n                    formatCfg = $.datepicker._getFormatConfig(inst),\n                    altFormattedDateTime = '',\n                    altSeparator = tp_inst._defaults.altSeparator ? tp_inst._defaults.altSeparator : tp_inst._defaults.separator,\n                    altTimeSuffix = tp_inst._defaults.altTimeSuffix ? tp_inst._defaults.altTimeSuffix : tp_inst._defaults.timeSuffix,\n                    altTimeFormat = tp_inst._defaults.altTimeFormat !== null ? tp_inst._defaults.altTimeFormat : tp_inst._defaults.timeFormat;\n\n                altFormattedDateTime += $.datepicker.formatTime(altTimeFormat, tp_inst, tp_inst._defaults) + altTimeSuffix;\n                if (!tp_inst._defaults.timeOnly && !tp_inst._defaults.altFieldTimeOnly && date !== null) {\n                    if (tp_inst._defaults.altFormat) {\n                        altFormattedDateTime = $.datepicker.formatDate(tp_inst._defaults.altFormat, date, formatCfg) + altSeparator + altFormattedDateTime;\n                    }\n                    else {\n                        altFormattedDateTime = tp_inst.formattedDate + altSeparator + altFormattedDateTime;\n                    }\n                }\n                $(altField).val( inst.input.val() ? altFormattedDateTime : \"\");\n            }\n        }\n        else {\n            $.datepicker._base_updateAlternate(inst);\n        }\n    };\n\n    /*\n     * Override key up event to sync manual input changes.\n     */\n    $.datepicker._base_doKeyUp = $.datepicker._doKeyUp;\n    $.datepicker._doKeyUp = function (event) {\n        var inst = $.datepicker._getInst(event.target),\n            tp_inst = $.datepicker._get(inst, 'timepicker');\n\n        if (tp_inst) {\n            if (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {\n                try {\n                    $.datepicker._updateDatepicker(inst);\n                } catch (err) {\n                    $.timepicker.log(err);\n                }\n            }\n        }\n\n        return $.datepicker._base_doKeyUp(event);\n    };\n\n    /*\n     * override \"Today\" button to also grab the time and set it to input field.\n     */\n    $.datepicker._base_gotoToday = $.datepicker._gotoToday;\n    $.datepicker._gotoToday = function (id) {\n        var inst = this._getInst($(id)[0]);\n        this._base_gotoToday(id);\n        var tp_inst = this._get(inst, 'timepicker');\n        var tzoffset = $.timepicker.timezoneOffsetNumber(tp_inst.timezone);\n        var now = new Date();\n        now.setMinutes(now.getMinutes() + now.getTimezoneOffset() + tzoffset);\n        this._setTime(inst, now);\n        this._setDate(inst, now);\n        tp_inst._onSelectHandler();\n    };\n\n    /*\n     * Disable & enable the Time in the datetimepicker\n     */\n    $.datepicker._disableTimepickerDatepicker = function (target) {\n        var inst = this._getInst(target);\n        if (!inst) {\n            return;\n        }\n\n        var tp_inst = this._get(inst, 'timepicker');\n        $(target).datepicker('getDate'); // Init selected[Year|Month|Day]\n        if (tp_inst) {\n            inst.settings.showTimepicker = false;\n            tp_inst._defaults.showTimepicker = false;\n            tp_inst._updateDateTime(inst);\n        }\n    };\n\n    $.datepicker._enableTimepickerDatepicker = function (target) {\n        var inst = this._getInst(target);\n        if (!inst) {\n            return;\n        }\n\n        var tp_inst = this._get(inst, 'timepicker');\n        $(target).datepicker('getDate'); // Init selected[Year|Month|Day]\n        if (tp_inst) {\n            inst.settings.showTimepicker = true;\n            tp_inst._defaults.showTimepicker = true;\n            tp_inst._addTimePicker(inst); // Could be disabled on page load\n            tp_inst._updateDateTime(inst);\n        }\n    };\n\n    /*\n     * Create our own set time function\n     */\n    $.datepicker._setTime = function (inst, date) {\n        var tp_inst = this._get(inst, 'timepicker');\n        if (tp_inst) {\n            var defaults = tp_inst._defaults;\n\n            // calling _setTime with no date sets time to defaults\n            tp_inst.hour = date ? date.getHours() : defaults.hour;\n            tp_inst.minute = date ? date.getMinutes() : defaults.minute;\n            tp_inst.second = date ? date.getSeconds() : defaults.second;\n            tp_inst.millisec = date ? date.getMilliseconds() : defaults.millisec;\n            tp_inst.microsec = date ? date.getMicroseconds() : defaults.microsec;\n\n            //check if within min/max times..\n            tp_inst._limitMinMaxDateTime(inst, true);\n\n            tp_inst._onTimeChange();\n            tp_inst._updateDateTime(inst);\n        }\n    };\n\n    /*\n     * Create new public method to set only time, callable as $().datepicker('setTime', date)\n     */\n    $.datepicker._setTimeDatepicker = function (target, date, withDate) {\n        var inst = this._getInst(target);\n        if (!inst) {\n            return;\n        }\n\n        var tp_inst = this._get(inst, 'timepicker');\n\n        if (tp_inst) {\n            this._setDateFromField(inst);\n            var tp_date;\n            if (date) {\n                if (typeof date === \"string\") {\n                    tp_inst._parseTime(date, withDate);\n                    tp_date = new Date();\n                    tp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);\n                    tp_date.setMicroseconds(tp_inst.microsec);\n                } else {\n                    tp_date = new Date(date.getTime());\n                    tp_date.setMicroseconds(date.getMicroseconds());\n                }\n                if (tp_date.toString() === 'Invalid Date') {\n                    tp_date = undefined;\n                }\n                this._setTime(inst, tp_date);\n            }\n        }\n\n    };\n\n    /*\n     * override setDate() to allow setting time too within Date object\n     */\n    $.datepicker._base_setDateDatepicker = $.datepicker._setDateDatepicker;\n    $.datepicker._setDateDatepicker = function (target, _date) {\n        var inst = this._getInst(target);\n        var date = _date;\n        if (!inst) {\n            return;\n        }\n\n        if (typeof(_date) === 'string') {\n            date = new Date(_date);\n            if (!date.getTime()) {\n                this._base_setDateDatepicker.apply(this, arguments);\n                date = $(target).datepicker('getDate');\n            }\n        }\n\n        var tp_inst = this._get(inst, 'timepicker');\n        var tp_date;\n        if (date instanceof Date) {\n            tp_date = new Date(date.getTime());\n            tp_date.setMicroseconds(date.getMicroseconds());\n        } else {\n            tp_date = date;\n        }\n\n        // This is important if you are using the timezone option, javascript's Date\n        // object will only return the timezone offset for the current locale, so we\n        // adjust it accordingly.  If not using timezone option this won't matter..\n        // If a timezone is different in tp, keep the timezone as is\n        if (tp_inst && tp_date) {\n            // look out for DST if tz wasn't specified\n            if (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {\n                tp_inst.timezone = tp_date.getTimezoneOffset() * -1;\n            }\n            date = $.timepicker.timezoneAdjust(date, tp_inst.timezone);\n            tp_date = $.timepicker.timezoneAdjust(tp_date, tp_inst.timezone);\n        }\n\n        this._updateDatepicker(inst);\n        this._base_setDateDatepicker.apply(this, arguments);\n        this._setTimeDatepicker(target, tp_date, true);\n    };\n\n    /*\n     * override getDate() to allow getting time too within Date object\n     */\n    $.datepicker._base_getDateDatepicker = $.datepicker._getDateDatepicker;\n    $.datepicker._getDateDatepicker = function (target, noDefault) {\n        var inst = this._getInst(target);\n        if (!inst) {\n            return;\n        }\n\n        var tp_inst = this._get(inst, 'timepicker');\n\n        if (tp_inst) {\n            // if it hasn't yet been defined, grab from field\n            if (inst.lastVal === undefined) {\n                this._setDateFromField(inst, noDefault);\n            }\n\n            var date = this._getDate(inst);\n            var currDT = $.trim((tp_inst.$altInput && tp_inst._defaults.altFieldTimeOnly) ? tp_inst.$input.val() + ' ' + tp_inst.$altInput.val() : tp_inst.$input.val());\n            if (date && tp_inst._parseTime(currDT, !inst.settings.timeOnly)) {\n                date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);\n                date.setMicroseconds(tp_inst.microsec);\n\n                // This is important if you are using the timezone option, javascript's Date\n                // object will only return the timezone offset for the current locale, so we\n                // adjust it accordingly.  If not using timezone option this won't matter..\n                if (tp_inst.timezone != null) {\n                    // look out for DST if tz wasn't specified\n                    if (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {\n                        tp_inst.timezone = date.getTimezoneOffset() * -1;\n                    }\n                    date = $.timepicker.timezoneAdjust(date, tp_inst.timezone);\n                }\n            }\n            return date;\n        }\n        return this._base_getDateDatepicker(target, noDefault);\n    };\n\n    /*\n     * override parseDate() because UI 1.8.14 throws an error about \"Extra characters\"\n     * An option in datapicker to ignore extra format characters would be nicer.\n     */\n    $.datepicker._base_parseDate = $.datepicker.parseDate;\n    $.datepicker.parseDate = function (format, value, settings) {\n        var date;\n        try {\n            date = this._base_parseDate(format, value, settings);\n        } catch (err) {\n            // Hack!  The error message ends with a colon, a space, and\n            // the \"extra\" characters.  We rely on that instead of\n            // attempting to perfectly reproduce the parsing algorithm.\n            if (err.indexOf(\":\") >= 0) {\n                date = this._base_parseDate(format, value.substring(0, value.length - (err.length - err.indexOf(':') - 2)), settings);\n                $.timepicker.log(\"Error parsing the date string: \" + err + \"\\ndate string = \" + value + \"\\ndate format = \" + format);\n            } else {\n                throw err;\n            }\n        }\n        return date;\n    };\n\n    /*\n     * override formatDate to set date with time to the input\n     */\n    $.datepicker._base_formatDate = $.datepicker._formatDate;\n    $.datepicker._formatDate = function (inst, day, month, year) {\n        var tp_inst = this._get(inst, 'timepicker');\n        if (tp_inst) {\n            tp_inst._updateDateTime(inst);\n            return tp_inst.$input.val();\n        }\n        return this._base_formatDate(inst);\n    };\n\n    /*\n     * override options setter to add time to maxDate(Time) and minDate(Time). MaxDate\n     */\n    $.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker;\n    $.datepicker._optionDatepicker = function (target, name, value) {\n        var inst = this._getInst(target),\n            name_clone;\n        if (!inst) {\n            return null;\n        }\n\n        var tp_inst = this._get(inst, 'timepicker');\n        if (tp_inst) {\n            var min = null,\n                max = null,\n                onselect = null,\n                overrides = tp_inst._defaults.evnts,\n                fns = {},\n                prop,\n                ret,\n                oldVal,\n                $target;\n            if (typeof name === 'string') { // if min/max was set with the string\n                if (name === 'minDate' || name === 'minDateTime') {\n                    min = value;\n                } else if (name === 'maxDate' || name === 'maxDateTime') {\n                    max = value;\n                } else if (name === 'onSelect') {\n                    onselect = value;\n                } else if (overrides.hasOwnProperty(name)) {\n                    if (typeof (value) === 'undefined') {\n                        return overrides[name];\n                    }\n                    fns[name] = value;\n                    name_clone = {}; //empty results in exiting function after overrides updated\n                }\n            } else if (typeof name === 'object') { //if min/max was set with the JSON\n                if (name.minDate) {\n                    min = name.minDate;\n                } else if (name.minDateTime) {\n                    min = name.minDateTime;\n                } else if (name.maxDate) {\n                    max = name.maxDate;\n                } else if (name.maxDateTime) {\n                    max = name.maxDateTime;\n                }\n                for (prop in overrides) {\n                    if (overrides.hasOwnProperty(prop) && name[prop]) {\n                        fns[prop] = name[prop];\n                    }\n                }\n            }\n            for (prop in fns) {\n                if (fns.hasOwnProperty(prop)) {\n                    overrides[prop] = fns[prop];\n                    if (!name_clone) { name_clone = $.extend({}, name); }\n                    delete name_clone[prop];\n                }\n            }\n            if (name_clone && isEmptyObject(name_clone)) { return; }\n            if (min) { //if min was set\n                if (min === 0) {\n                    min = new Date();\n                } else {\n                    min = new Date(min);\n                }\n                tp_inst._defaults.minDate = min;\n                tp_inst._defaults.minDateTime = min;\n            } else if (max) { //if max was set\n                if (max === 0) {\n                    max = new Date();\n                } else {\n                    max = new Date(max);\n                }\n                tp_inst._defaults.maxDate = max;\n                tp_inst._defaults.maxDateTime = max;\n            } else if (onselect) {\n                tp_inst._defaults.onSelect = onselect;\n            }\n\n            // Datepicker will override our date when we call _base_optionDatepicker when\n            // calling minDate/maxDate, so we will first grab the value, call\n            // _base_optionDatepicker, then set our value back.\n            if(min || max){\n                $target = $(target);\n                oldVal = $target.datetimepicker('getDate');\n                ret = this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);\n                $target.datetimepicker('setDate', oldVal);\n                return ret;\n            }\n        }\n        if (value === undefined) {\n            return this._base_optionDatepicker.call($.datepicker, target, name);\n        }\n        return this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);\n    };\n\n    /*\n     * jQuery isEmptyObject does not check hasOwnProperty - if someone has added to the object prototype,\n     * it will return false for all objects\n     */\n    var isEmptyObject = function (obj) {\n        var prop;\n        for (prop in obj) {\n            if (obj.hasOwnProperty(prop)) {\n                return false;\n            }\n        }\n        return true;\n    };\n\n    /*\n     * jQuery extend now ignores nulls!\n     */\n    var extendRemove = function (target, props) {\n        $.extend(target, props);\n        for (var name in props) {\n            if (props[name] === null || props[name] === undefined) {\n                target[name] = props[name];\n            }\n        }\n        return target;\n    };\n\n    /*\n     * Determine by the time format which units are supported\n     * Returns an object of booleans for each unit\n     */\n    var detectSupport = function (timeFormat) {\n        var tf = timeFormat.replace(/'.*?'/g, '').toLowerCase(), // removes literals\n            isIn = function (f, t) { // does the format contain the token?\n                return f.indexOf(t) !== -1 ? true : false;\n            };\n        return {\n            hour: isIn(tf, 'h'),\n            minute: isIn(tf, 'm'),\n            second: isIn(tf, 's'),\n            millisec: isIn(tf, 'l'),\n            microsec: isIn(tf, 'c'),\n            timezone: isIn(tf, 'z'),\n            ampm: isIn(tf, 't') && isIn(timeFormat, 'h'),\n            iso8601: isIn(timeFormat, 'Z')\n        };\n    };\n\n    /*\n     * Converts 24 hour format into 12 hour\n     * Returns 12 hour without leading 0\n     */\n    var convert24to12 = function (hour) {\n        hour %= 12;\n\n        if (hour === 0) {\n            hour = 12;\n        }\n\n        return String(hour);\n    };\n\n    var computeEffectiveSetting = function (settings, property) {\n        return settings && settings[property] ? settings[property] : $.timepicker._defaults[property];\n    };\n\n    /*\n     * Splits datetime string into date and time substrings.\n     * Throws exception when date can't be parsed\n     * Returns {dateString: dateString, timeString: timeString}\n     */\n    var splitDateTime = function (dateTimeString, timeSettings) {\n        // The idea is to get the number separator occurrences in datetime and the time format requested (since time has\n        // fewer unknowns, mostly numbers and am/pm). We will use the time pattern to split.\n        var separator = computeEffectiveSetting(timeSettings, 'separator'),\n            format = computeEffectiveSetting(timeSettings, 'timeFormat'),\n            timeParts = format.split(separator), // how many occurrences of separator may be in our format?\n            timePartsLen = timeParts.length,\n            allParts = dateTimeString.split(separator),\n            allPartsLen = allParts.length;\n\n        if (allPartsLen > 1) {\n            return {\n                dateString: allParts.splice(0, allPartsLen - timePartsLen).join(separator),\n                timeString: allParts.splice(0, timePartsLen).join(separator)\n            };\n        }\n\n        return {\n            dateString: dateTimeString,\n            timeString: ''\n        };\n    };\n\n    /*\n     * Internal function to parse datetime interval\n     * Returns: {date: Date, timeObj: Object}, where\n     *   date - parsed date without time (type Date)\n     *   timeObj = {hour: , minute: , second: , millisec: , microsec: } - parsed time. Optional\n     */\n    var parseDateTimeInternal = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {\n        var date,\n            parts,\n            parsedTime;\n\n        parts = splitDateTime(dateTimeString, timeSettings);\n        date = $.datepicker._base_parseDate(dateFormat, parts.dateString, dateSettings);\n\n        if (parts.timeString === '') {\n            return {\n                date: date\n            };\n        }\n\n        parsedTime = $.datepicker.parseTime(timeFormat, parts.timeString, timeSettings);\n\n        if (!parsedTime) {\n            throw 'Wrong time format';\n        }\n\n        return {\n            date: date,\n            timeObj: parsedTime\n        };\n    };\n\n    /*\n     * Internal function to set timezone_select to the local timezone\n     */\n    var selectLocalTimezone = function (tp_inst, date) {\n        if (tp_inst && tp_inst.timezone_select) {\n            var now = date || new Date();\n            tp_inst.timezone_select.val(-now.getTimezoneOffset());\n        }\n    };\n\n    /*\n     * Create a Singleton Instance\n     */\n    $.timepicker = new Timepicker();\n\n    /**\n     * Get the timezone offset as string from a date object (eg '+0530' for UTC+5.5)\n     * @param {number} tzMinutes if not a number, less than -720 (-1200), or greater than 840 (+1400) this value is returned\n     * @param {boolean} iso8601 if true formats in accordance to iso8601 \"+12:45\"\n     * @return {string}\n     */\n    $.timepicker.timezoneOffsetString = function (tzMinutes, iso8601) {\n        if (isNaN(tzMinutes) || tzMinutes > 840 || tzMinutes < -720) {\n            return tzMinutes;\n        }\n\n        var off = tzMinutes,\n            minutes = off % 60,\n            hours = (off - minutes) / 60,\n            iso = iso8601 ? ':' : '',\n            tz = (off >= 0 ? '+' : '-') + ('0' + Math.abs(hours)).slice(-2) + iso + ('0' + Math.abs(minutes)).slice(-2);\n\n        if (tz === '+00:00') {\n            return 'Z';\n        }\n        return tz;\n    };\n\n    /**\n     * Get the number in minutes that represents a timezone string\n     * @param  {string} tzString formatted like \"+0500\", \"-1245\", \"Z\"\n     * @return {number} the offset minutes or the original string if it doesn't match expectations\n     */\n    $.timepicker.timezoneOffsetNumber = function (tzString) {\n        var normalized = tzString.toString().replace(':', ''); // excuse any iso8601, end up with \"+1245\"\n\n        if (normalized.toUpperCase() === 'Z') { // if iso8601 with Z, its 0 minute offset\n            return 0;\n        }\n\n        if (!/^(\\-|\\+)\\d{4}$/.test(normalized)) { // possibly a user defined tz, so just give it back\n            return tzString;\n        }\n\n        return ((normalized.substr(0, 1) === '-' ? -1 : 1) * // plus or minus\n        ((parseInt(normalized.substr(1, 2), 10) * 60) + // hours (converted to minutes)\n        parseInt(normalized.substr(3, 2), 10))); // minutes\n    };\n\n    /**\n     * No way to set timezone in js Date, so we must adjust the minutes to compensate. (think setDate, getDate)\n     * @param  {Date} date\n     * @param  {string} toTimezone formatted like \"+0500\", \"-1245\"\n     * @return {Date}\n     */\n    $.timepicker.timezoneAdjust = function (date, toTimezone) {\n        var toTz = $.timepicker.timezoneOffsetNumber(toTimezone);\n        if (!isNaN(toTz)) {\n            date.setMinutes(date.getMinutes() + -date.getTimezoneOffset() - toTz);\n        }\n        return date;\n    };\n\n    /**\n     * Calls `timepicker()` on the `startTime` and `endTime` elements, and configures them to\n     * enforce date range limits.\n     * n.b. The input value must be correctly formatted (reformatting is not supported)\n     * @param  {Element} startTime\n     * @param  {Element} endTime\n     * @param  {Object} options Options for the timepicker() call\n     * @return {jQuery}\n     */\n    $.timepicker.timeRange = function (startTime, endTime, options) {\n        return $.timepicker.handleRange('timepicker', startTime, endTime, options);\n    };\n\n    /**\n     * Calls `datetimepicker` on the `startTime` and `endTime` elements, and configures them to\n     * enforce date range limits.\n     * @param  {Element} startTime\n     * @param  {Element} endTime\n     * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\n     *   a boolean value that can be used to reformat the input values to the `dateFormat`.\n     * @param  {string} method Can be used to specify the type of picker to be added\n     * @return {jQuery}\n     */\n    $.timepicker.datetimeRange = function (startTime, endTime, options) {\n        $.timepicker.handleRange('datetimepicker', startTime, endTime, options);\n    };\n\n    /**\n     * Calls `datepicker` on the `startTime` and `endTime` elements, and configures them to\n     * enforce date range limits.\n     * @param  {Element} startTime\n     * @param  {Element} endTime\n     * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\n     *   a boolean value that can be used to reformat the input values to the `dateFormat`.\n     * @return {jQuery}\n     */\n    $.timepicker.dateRange = function (startTime, endTime, options) {\n        $.timepicker.handleRange('datepicker', startTime, endTime, options);\n    };\n\n    /**\n     * Calls `method` on the `startTime` and `endTime` elements, and configures them to\n     * enforce date range limits.\n     * @param  {string} method Can be used to specify the type of picker to be added\n     * @param  {Element} startTime\n     * @param  {Element} endTime\n     * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\n     *   a boolean value that can be used to reformat the input values to the `dateFormat`.\n     * @return {jQuery}\n     */\n    $.timepicker.handleRange = function (method, startTime, endTime, options) {\n        options = $.extend({}, {\n            minInterval: 0, // min allowed interval in milliseconds\n            maxInterval: 0, // max allowed interval in milliseconds\n            start: {},      // options for start picker\n            end: {}         // options for end picker\n        }, options);\n\n        // for the mean time this fixes an issue with calling getDate with timepicker()\n        var timeOnly = false;\n        if(method === 'timepicker'){\n            timeOnly = true;\n            method = 'datetimepicker';\n        }\n\n        function checkDates(changed, other) {\n            var startdt = startTime[method]('getDate'),\n                enddt = endTime[method]('getDate'),\n                changeddt = changed[method]('getDate');\n\n            if (startdt !== null) {\n                var minDate = new Date(startdt.getTime()),\n                    maxDate = new Date(startdt.getTime());\n\n                minDate.setMilliseconds(minDate.getMilliseconds() + options.minInterval);\n                maxDate.setMilliseconds(maxDate.getMilliseconds() + options.maxInterval);\n\n                if (options.minInterval > 0 && minDate > enddt) { // minInterval check\n                    endTime[method]('setDate', minDate);\n                }\n                else if (options.maxInterval > 0 && maxDate < enddt) { // max interval check\n                    endTime[method]('setDate', maxDate);\n                }\n                else if (startdt > enddt) {\n                    other[method]('setDate', changeddt);\n                }\n            }\n        }\n\n        function selected(changed, other, option) {\n            if (!changed.val()) {\n                return;\n            }\n            var date = changed[method].call(changed, 'getDate');\n            if (date !== null && options.minInterval > 0) {\n                if (option === 'minDate') {\n                    date.setMilliseconds(date.getMilliseconds() + options.minInterval);\n                }\n                if (option === 'maxDate') {\n                    date.setMilliseconds(date.getMilliseconds() - options.minInterval);\n                }\n            }\n\n            if (date.getTime) {\n                other[method].call(other, 'option', option, date);\n            }\n        }\n\n        $.fn[method].call(startTime, $.extend({\n            timeOnly: timeOnly,\n            onClose: function (dateText, inst) {\n                checkDates($(this), endTime);\n            },\n            onSelect: function (selectedDateTime) {\n                selected($(this), endTime, 'minDate');\n            }\n        }, options, options.start));\n        $.fn[method].call(endTime, $.extend({\n            timeOnly: timeOnly,\n            onClose: function (dateText, inst) {\n                checkDates($(this), startTime);\n            },\n            onSelect: function (selectedDateTime) {\n                selected($(this), startTime, 'maxDate');\n            }\n        }, options, options.end));\n\n        checkDates(startTime, endTime);\n\n        selected(startTime, endTime, 'minDate');\n        selected(endTime, startTime, 'maxDate');\n\n        return $([startTime.get(0), endTime.get(0)]);\n    };\n\n    /**\n     * Log error or data to the console during error or debugging\n     * @param  {Object} err pass any type object to log to the console during error or debugging\n     * @return {void}\n     */\n    $.timepicker.log = function () {\n        if (window.console) {\n            window.console.log.apply(window.console, Array.prototype.slice.call(arguments));\n        }\n    };\n\n    /*\n     * Add util object to allow access to private methods for testability.\n     */\n    $.timepicker._util = {\n        _extendRemove: extendRemove,\n        _isEmptyObject: isEmptyObject,\n        _convert24to12: convert24to12,\n        _detectSupport: detectSupport,\n        _selectLocalTimezone: selectLocalTimezone,\n        _computeEffectiveSetting: computeEffectiveSetting,\n        _splitDateTime: splitDateTime,\n        _parseDateTimeInternal: parseDateTimeInternal\n    };\n\n    /*\n     * Microsecond support\n     */\n    if (!Date.prototype.getMicroseconds) {\n        Date.prototype.microseconds = 0;\n        Date.prototype.getMicroseconds = function () { return this.microseconds; };\n        Date.prototype.setMicroseconds = function (m) {\n            this.setMilliseconds(this.getMilliseconds() + Math.floor(m / 1000));\n            this.microseconds = m % 1000;\n            return this;\n        };\n    }\n\n    /*\n     * Keep up with the version\n     */\n    $.timepicker.version = \"1.6.1\";\n\n}));"
  },
  {
    "path": "public/quickadmin/js/vue.js",
    "content": "/*!\n * Vue.js v1.0.24\n * (c) 2016 Evan You\n * Released under the MIT License.\n */\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n        typeof define === 'function' && define.amd ? define(factory) :\n            (global.Vue = factory());\n}(this, function () { 'use strict';\n\n    function set(obj, key, val) {\n        if (hasOwn(obj, key)) {\n            obj[key] = val;\n            return;\n        }\n        if (obj._isVue) {\n            set(obj._data, key, val);\n            return;\n        }\n        var ob = obj.__ob__;\n        if (!ob) {\n            obj[key] = val;\n            return;\n        }\n        ob.convert(key, val);\n        ob.dep.notify();\n        if (ob.vms) {\n            var i = ob.vms.length;\n            while (i--) {\n                var vm = ob.vms[i];\n                vm._proxy(key);\n                vm._digest();\n            }\n        }\n        return val;\n    }\n\n    /**\n     * Delete a property and trigger change if necessary.\n     *\n     * @param {Object} obj\n     * @param {String} key\n     */\n\n    function del(obj, key) {\n        if (!hasOwn(obj, key)) {\n            return;\n        }\n        delete obj[key];\n        var ob = obj.__ob__;\n        if (!ob) {\n            if (obj._isVue) {\n                delete obj._data[key];\n                obj._digest();\n            }\n            return;\n        }\n        ob.dep.notify();\n        if (ob.vms) {\n            var i = ob.vms.length;\n            while (i--) {\n                var vm = ob.vms[i];\n                vm._unproxy(key);\n                vm._digest();\n            }\n        }\n    }\n\n    var hasOwnProperty = Object.prototype.hasOwnProperty;\n    /**\n     * Check whether the object has the property.\n     *\n     * @param {Object} obj\n     * @param {String} key\n     * @return {Boolean}\n     */\n\n    function hasOwn(obj, key) {\n        return hasOwnProperty.call(obj, key);\n    }\n\n    /**\n     * Check if an expression is a literal value.\n     *\n     * @param {String} exp\n     * @return {Boolean}\n     */\n\n    var literalValueRE = /^\\s?(true|false|-?[\\d\\.]+|'[^']*'|\"[^\"]*\")\\s?$/;\n\n    function isLiteral(exp) {\n        return literalValueRE.test(exp);\n    }\n\n    /**\n     * Check if a string starts with $ or _\n     *\n     * @param {String} str\n     * @return {Boolean}\n     */\n\n    function isReserved(str) {\n        var c = (str + '').charCodeAt(0);\n        return c === 0x24 || c === 0x5F;\n    }\n\n    /**\n     * Guard text output, make sure undefined outputs\n     * empty string\n     *\n     * @param {*} value\n     * @return {String}\n     */\n\n    function _toString(value) {\n        return value == null ? '' : value.toString();\n    }\n\n    /**\n     * Check and convert possible numeric strings to numbers\n     * before setting back to data\n     *\n     * @param {*} value\n     * @return {*|Number}\n     */\n\n    function toNumber(value) {\n        if (typeof value !== 'string') {\n            return value;\n        } else {\n            var parsed = Number(value);\n            return isNaN(parsed) ? value : parsed;\n        }\n    }\n\n    /**\n     * Convert string boolean literals into real booleans.\n     *\n     * @param {*} value\n     * @return {*|Boolean}\n     */\n\n    function toBoolean(value) {\n        return value === 'true' ? true : value === 'false' ? false : value;\n    }\n\n    /**\n     * Strip quotes from a string\n     *\n     * @param {String} str\n     * @return {String | false}\n     */\n\n    function stripQuotes(str) {\n        var a = str.charCodeAt(0);\n        var b = str.charCodeAt(str.length - 1);\n        return a === b && (a === 0x22 || a === 0x27) ? str.slice(1, -1) : str;\n    }\n\n    /**\n     * Camelize a hyphen-delmited string.\n     *\n     * @param {String} str\n     * @return {String}\n     */\n\n    var camelizeRE = /-(\\w)/g;\n\n    function camelize(str) {\n        return str.replace(camelizeRE, toUpper);\n    }\n\n    function toUpper(_, c) {\n        return c ? c.toUpperCase() : '';\n    }\n\n    /**\n     * Hyphenate a camelCase string.\n     *\n     * @param {String} str\n     * @return {String}\n     */\n\n    var hyphenateRE = /([a-z\\d])([A-Z])/g;\n\n    function hyphenate(str) {\n        return str.replace(hyphenateRE, '$1-$2').toLowerCase();\n    }\n\n    /**\n     * Converts hyphen/underscore/slash delimitered names into\n     * camelized classNames.\n     *\n     * e.g. my-component => MyComponent\n     *      some_else    => SomeElse\n     *      some/comp    => SomeComp\n     *\n     * @param {String} str\n     * @return {String}\n     */\n\n    var classifyRE = /(?:^|[-_\\/])(\\w)/g;\n\n    function classify(str) {\n        return str.replace(classifyRE, toUpper);\n    }\n\n    /**\n     * Simple bind, faster than native\n     *\n     * @param {Function} fn\n     * @param {Object} ctx\n     * @return {Function}\n     */\n\n    function bind(fn, ctx) {\n        return function (a) {\n            var l = arguments.length;\n            return l ? l > 1 ? fn.apply(ctx, arguments) : fn.call(ctx, a) : fn.call(ctx);\n        };\n    }\n\n    /**\n     * Convert an Array-like object to a real Array.\n     *\n     * @param {Array-like} list\n     * @param {Number} [start] - start index\n     * @return {Array}\n     */\n\n    function toArray(list, start) {\n        start = start || 0;\n        var i = list.length - start;\n        var ret = new Array(i);\n        while (i--) {\n            ret[i] = list[i + start];\n        }\n        return ret;\n    }\n\n    /**\n     * Mix properties into target object.\n     *\n     * @param {Object} to\n     * @param {Object} from\n     */\n\n    function extend(to, from) {\n        var keys = Object.keys(from);\n        var i = keys.length;\n        while (i--) {\n            to[keys[i]] = from[keys[i]];\n        }\n        return to;\n    }\n\n    /**\n     * Quick object check - this is primarily used to tell\n     * Objects from primitive values when we know the value\n     * is a JSON-compliant type.\n     *\n     * @param {*} obj\n     * @return {Boolean}\n     */\n\n    function isObject(obj) {\n        return obj !== null && typeof obj === 'object';\n    }\n\n    /**\n     * Strict object type check. Only returns true\n     * for plain JavaScript objects.\n     *\n     * @param {*} obj\n     * @return {Boolean}\n     */\n\n    var toString = Object.prototype.toString;\n    var OBJECT_STRING = '[object Object]';\n\n    function isPlainObject(obj) {\n        return toString.call(obj) === OBJECT_STRING;\n    }\n\n    /**\n     * Array type check.\n     *\n     * @param {*} obj\n     * @return {Boolean}\n     */\n\n    var isArray = Array.isArray;\n\n    /**\n     * Define a property.\n     *\n     * @param {Object} obj\n     * @param {String} key\n     * @param {*} val\n     * @param {Boolean} [enumerable]\n     */\n\n    function def(obj, key, val, enumerable) {\n        Object.defineProperty(obj, key, {\n            value: val,\n            enumerable: !!enumerable,\n            writable: true,\n            configurable: true\n        });\n    }\n\n    /**\n     * Debounce a function so it only gets called after the\n     * input stops arriving after the given wait period.\n     *\n     * @param {Function} func\n     * @param {Number} wait\n     * @return {Function} - the debounced function\n     */\n\n    function _debounce(func, wait) {\n        var timeout, args, context, timestamp, result;\n        var later = function later() {\n            var last = Date.now() - timestamp;\n            if (last < wait && last >= 0) {\n                timeout = setTimeout(later, wait - last);\n            } else {\n                timeout = null;\n                result = func.apply(context, args);\n                if (!timeout) context = args = null;\n            }\n        };\n        return function () {\n            context = this;\n            args = arguments;\n            timestamp = Date.now();\n            if (!timeout) {\n                timeout = setTimeout(later, wait);\n            }\n            return result;\n        };\n    }\n\n    /**\n     * Manual indexOf because it's slightly faster than\n     * native.\n     *\n     * @param {Array} arr\n     * @param {*} obj\n     */\n\n    function indexOf(arr, obj) {\n        var i = arr.length;\n        while (i--) {\n            if (arr[i] === obj) return i;\n        }\n        return -1;\n    }\n\n    /**\n     * Make a cancellable version of an async callback.\n     *\n     * @param {Function} fn\n     * @return {Function}\n     */\n\n    function cancellable(fn) {\n        var cb = function cb() {\n            if (!cb.cancelled) {\n                return fn.apply(this, arguments);\n            }\n        };\n        cb.cancel = function () {\n            cb.cancelled = true;\n        };\n        return cb;\n    }\n\n    /**\n     * Check if two values are loosely equal - that is,\n     * if they are plain objects, do they have the same shape?\n     *\n     * @param {*} a\n     * @param {*} b\n     * @return {Boolean}\n     */\n\n    function looseEqual(a, b) {\n        /* eslint-disable eqeqeq */\n        return a == b || (isObject(a) && isObject(b) ? JSON.stringify(a) === JSON.stringify(b) : false);\n        /* eslint-enable eqeqeq */\n    }\n\n    var hasProto = ('__proto__' in {});\n\n    // Browser environment sniffing\n    var inBrowser = typeof window !== 'undefined' && Object.prototype.toString.call(window) !== '[object Object]';\n\n    // detect devtools\n    var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n    // UA sniffing for working around browser-specific quirks\n    var UA = inBrowser && window.navigator.userAgent.toLowerCase();\n    var isIE9 = UA && UA.indexOf('msie 9.0') > 0;\n    var isAndroid = UA && UA.indexOf('android') > 0;\n    var isIos = UA && /(iphone|ipad|ipod|ios)/i.test(UA);\n    var isWechat = UA && UA.indexOf('micromessenger') > 0;\n\n    var transitionProp = undefined;\n    var transitionEndEvent = undefined;\n    var animationProp = undefined;\n    var animationEndEvent = undefined;\n\n    // Transition property/event sniffing\n    if (inBrowser && !isIE9) {\n        var isWebkitTrans = window.ontransitionend === undefined && window.onwebkittransitionend !== undefined;\n        var isWebkitAnim = window.onanimationend === undefined && window.onwebkitanimationend !== undefined;\n        transitionProp = isWebkitTrans ? 'WebkitTransition' : 'transition';\n        transitionEndEvent = isWebkitTrans ? 'webkitTransitionEnd' : 'transitionend';\n        animationProp = isWebkitAnim ? 'WebkitAnimation' : 'animation';\n        animationEndEvent = isWebkitAnim ? 'webkitAnimationEnd' : 'animationend';\n    }\n\n    /**\n     * Defer a task to execute it asynchronously. Ideally this\n     * should be executed as a microtask, so we leverage\n     * MutationObserver if it's available, and fallback to\n     * setTimeout(0).\n     *\n     * @param {Function} cb\n     * @param {Object} ctx\n     */\n\n    var nextTick = (function () {\n        var callbacks = [];\n        var pending = false;\n        var timerFunc;\n        function nextTickHandler() {\n            pending = false;\n            var copies = callbacks.slice(0);\n            callbacks = [];\n            for (var i = 0; i < copies.length; i++) {\n                copies[i]();\n            }\n        }\n\n        /* istanbul ignore if */\n        if (typeof MutationObserver !== 'undefined' && !(isWechat && isIos)) {\n            var counter = 1;\n            var observer = new MutationObserver(nextTickHandler);\n            var textNode = document.createTextNode(counter);\n            observer.observe(textNode, {\n                characterData: true\n            });\n            timerFunc = function () {\n                counter = (counter + 1) % 2;\n                textNode.data = counter;\n            };\n        } else {\n            // webpack attempts to inject a shim for setImmediate\n            // if it is used as a global, so we have to work around that to\n            // avoid bundling unnecessary code.\n            var context = inBrowser ? window : typeof global !== 'undefined' ? global : {};\n            timerFunc = context.setImmediate || setTimeout;\n        }\n        return function (cb, ctx) {\n            var func = ctx ? function () {\n                cb.call(ctx);\n            } : cb;\n            callbacks.push(func);\n            if (pending) return;\n            pending = true;\n            timerFunc(nextTickHandler, 0);\n        };\n    })();\n\n    var _Set = undefined;\n    /* istanbul ignore if */\n    if (typeof Set !== 'undefined' && Set.toString().match(/native code/)) {\n        // use native Set when available.\n        _Set = Set;\n    } else {\n        // a non-standard Set polyfill that only works with primitive keys.\n        _Set = function () {\n            this.set = Object.create(null);\n        };\n        _Set.prototype.has = function (key) {\n            return this.set[key] !== undefined;\n        };\n        _Set.prototype.add = function (key) {\n            this.set[key] = 1;\n        };\n        _Set.prototype.clear = function () {\n            this.set = Object.create(null);\n        };\n    }\n\n    function Cache(limit) {\n        this.size = 0;\n        this.limit = limit;\n        this.head = this.tail = undefined;\n        this._keymap = Object.create(null);\n    }\n\n    var p = Cache.prototype;\n\n    /**\n     * Put <value> into the cache associated with <key>.\n     * Returns the entry which was removed to make room for\n     * the new entry. Otherwise undefined is returned.\n     * (i.e. if there was enough room already).\n     *\n     * @param {String} key\n     * @param {*} value\n     * @return {Entry|undefined}\n     */\n\n    p.put = function (key, value) {\n        var removed;\n        if (this.size === this.limit) {\n            removed = this.shift();\n        }\n\n        var entry = this.get(key, true);\n        if (!entry) {\n            entry = {\n                key: key\n            };\n            this._keymap[key] = entry;\n            if (this.tail) {\n                this.tail.newer = entry;\n                entry.older = this.tail;\n            } else {\n                this.head = entry;\n            }\n            this.tail = entry;\n            this.size++;\n        }\n        entry.value = value;\n\n        return removed;\n    };\n\n    /**\n     * Purge the least recently used (oldest) entry from the\n     * cache. Returns the removed entry or undefined if the\n     * cache was empty.\n     */\n\n    p.shift = function () {\n        var entry = this.head;\n        if (entry) {\n            this.head = this.head.newer;\n            this.head.older = undefined;\n            entry.newer = entry.older = undefined;\n            this._keymap[entry.key] = undefined;\n            this.size--;\n        }\n        return entry;\n    };\n\n    /**\n     * Get and register recent use of <key>. Returns the value\n     * associated with <key> or undefined if not in cache.\n     *\n     * @param {String} key\n     * @param {Boolean} returnEntry\n     * @return {Entry|*}\n     */\n\n    p.get = function (key, returnEntry) {\n        var entry = this._keymap[key];\n        if (entry === undefined) return;\n        if (entry === this.tail) {\n            return returnEntry ? entry : entry.value;\n        }\n        // HEAD--------------TAIL\n        //   <.older   .newer>\n        //  <--- add direction --\n        //   A  B  C  <D>  E\n        if (entry.newer) {\n            if (entry === this.head) {\n                this.head = entry.newer;\n            }\n            entry.newer.older = entry.older; // C <-- E.\n        }\n        if (entry.older) {\n            entry.older.newer = entry.newer; // C. --> E\n        }\n        entry.newer = undefined; // D --x\n        entry.older = this.tail; // D. --> E\n        if (this.tail) {\n            this.tail.newer = entry; // E. <-- D\n        }\n        this.tail = entry;\n        return returnEntry ? entry : entry.value;\n    };\n\n    var cache$1 = new Cache(1000);\n    var filterTokenRE = /[^\\s'\"]+|'[^']*'|\"[^\"]*\"/g;\n    var reservedArgRE = /^in$|^-?\\d+/;\n\n    /**\n     * Parser state\n     */\n\n    var str;\n    var dir;\n    var c;\n    var prev;\n    var i;\n    var l;\n    var lastFilterIndex;\n    var inSingle;\n    var inDouble;\n    var curly;\n    var square;\n    var paren;\n    /**\n     * Push a filter to the current directive object\n     */\n\n    function pushFilter() {\n        var exp = str.slice(lastFilterIndex, i).trim();\n        var filter;\n        if (exp) {\n            filter = {};\n            var tokens = exp.match(filterTokenRE);\n            filter.name = tokens[0];\n            if (tokens.length > 1) {\n                filter.args = tokens.slice(1).map(processFilterArg);\n            }\n        }\n        if (filter) {\n            (dir.filters = dir.filters || []).push(filter);\n        }\n        lastFilterIndex = i + 1;\n    }\n\n    /**\n     * Check if an argument is dynamic and strip quotes.\n     *\n     * @param {String} arg\n     * @return {Object}\n     */\n\n    function processFilterArg(arg) {\n        if (reservedArgRE.test(arg)) {\n            return {\n                value: toNumber(arg),\n                dynamic: false\n            };\n        } else {\n            var stripped = stripQuotes(arg);\n            var dynamic = stripped === arg;\n            return {\n                value: dynamic ? arg : stripped,\n                dynamic: dynamic\n            };\n        }\n    }\n\n    /**\n     * Parse a directive value and extract the expression\n     * and its filters into a descriptor.\n     *\n     * Example:\n     *\n     * \"a + 1 | uppercase\" will yield:\n     * {\n   *   expression: 'a + 1',\n   *   filters: [\n   *     { name: 'uppercase', args: null }\n   *   ]\n   * }\n     *\n     * @param {String} s\n     * @return {Object}\n     */\n\n    function parseDirective(s) {\n        var hit = cache$1.get(s);\n        if (hit) {\n            return hit;\n        }\n\n        // reset parser state\n        str = s;\n        inSingle = inDouble = false;\n        curly = square = paren = 0;\n        lastFilterIndex = 0;\n        dir = {};\n\n        for (i = 0, l = str.length; i < l; i++) {\n            prev = c;\n            c = str.charCodeAt(i);\n            if (inSingle) {\n                // check single quote\n                if (c === 0x27 && prev !== 0x5C) inSingle = !inSingle;\n            } else if (inDouble) {\n                // check double quote\n                if (c === 0x22 && prev !== 0x5C) inDouble = !inDouble;\n            } else if (c === 0x7C && // pipe\n                str.charCodeAt(i + 1) !== 0x7C && str.charCodeAt(i - 1) !== 0x7C) {\n                if (dir.expression == null) {\n                    // first filter, end of expression\n                    lastFilterIndex = i + 1;\n                    dir.expression = str.slice(0, i).trim();\n                } else {\n                    // already has filter\n                    pushFilter();\n                }\n            } else {\n                switch (c) {\n                    case 0x22:\n                        inDouble = true;break; // \"\n                    case 0x27:\n                        inSingle = true;break; // '\n                    case 0x28:\n                        paren++;break; // (\n                    case 0x29:\n                        paren--;break; // )\n                    case 0x5B:\n                        square++;break; // [\n                    case 0x5D:\n                        square--;break; // ]\n                    case 0x7B:\n                        curly++;break; // {\n                    case 0x7D:\n                        curly--;break; // }\n                }\n            }\n        }\n\n        if (dir.expression == null) {\n            dir.expression = str.slice(0, i).trim();\n        } else if (lastFilterIndex !== 0) {\n            pushFilter();\n        }\n\n        cache$1.put(s, dir);\n        return dir;\n    }\n\n    var directive = Object.freeze({\n        parseDirective: parseDirective\n    });\n\n    var regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\n    var cache = undefined;\n    var tagRE = undefined;\n    var htmlRE = undefined;\n    /**\n     * Escape a string so it can be used in a RegExp\n     * constructor.\n     *\n     * @param {String} str\n     */\n\n    function escapeRegex(str) {\n        return str.replace(regexEscapeRE, '\\\\$&');\n    }\n\n    function compileRegex() {\n        var open = escapeRegex(config.delimiters[0]);\n        var close = escapeRegex(config.delimiters[1]);\n        var unsafeOpen = escapeRegex(config.unsafeDelimiters[0]);\n        var unsafeClose = escapeRegex(config.unsafeDelimiters[1]);\n        tagRE = new RegExp(unsafeOpen + '((?:.|\\\\n)+?)' + unsafeClose + '|' + open + '((?:.|\\\\n)+?)' + close, 'g');\n        htmlRE = new RegExp('^' + unsafeOpen + '.*' + unsafeClose + '$');\n        // reset cache\n        cache = new Cache(1000);\n    }\n\n    /**\n     * Parse a template text string into an array of tokens.\n     *\n     * @param {String} text\n     * @return {Array<Object> | null}\n     *               - {String} type\n     *               - {String} value\n     *               - {Boolean} [html]\n     *               - {Boolean} [oneTime]\n     */\n\n    function parseText(text) {\n        if (!cache) {\n            compileRegex();\n        }\n        var hit = cache.get(text);\n        if (hit) {\n            return hit;\n        }\n        if (!tagRE.test(text)) {\n            return null;\n        }\n        var tokens = [];\n        var lastIndex = tagRE.lastIndex = 0;\n        var match, index, html, value, first, oneTime;\n        /* eslint-disable no-cond-assign */\n        while (match = tagRE.exec(text)) {\n            /* eslint-enable no-cond-assign */\n            index = match.index;\n            // push text token\n            if (index > lastIndex) {\n                tokens.push({\n                    value: text.slice(lastIndex, index)\n                });\n            }\n            // tag token\n            html = htmlRE.test(match[0]);\n            value = html ? match[1] : match[2];\n            first = value.charCodeAt(0);\n            oneTime = first === 42; // *\n            value = oneTime ? value.slice(1) : value;\n            tokens.push({\n                tag: true,\n                value: value.trim(),\n                html: html,\n                oneTime: oneTime\n            });\n            lastIndex = index + match[0].length;\n        }\n        if (lastIndex < text.length) {\n            tokens.push({\n                value: text.slice(lastIndex)\n            });\n        }\n        cache.put(text, tokens);\n        return tokens;\n    }\n\n    /**\n     * Format a list of tokens into an expression.\n     * e.g. tokens parsed from 'a {{b}} c' can be serialized\n     * into one single expression as '\"a \" + b + \" c\"'.\n     *\n     * @param {Array} tokens\n     * @param {Vue} [vm]\n     * @return {String}\n     */\n\n    function tokensToExp(tokens, vm) {\n        if (tokens.length > 1) {\n            return tokens.map(function (token) {\n                return formatToken(token, vm);\n            }).join('+');\n        } else {\n            return formatToken(tokens[0], vm, true);\n        }\n    }\n\n    /**\n     * Format a single token.\n     *\n     * @param {Object} token\n     * @param {Vue} [vm]\n     * @param {Boolean} [single]\n     * @return {String}\n     */\n\n    function formatToken(token, vm, single) {\n        return token.tag ? token.oneTime && vm ? '\"' + vm.$eval(token.value) + '\"' : inlineFilters(token.value, single) : '\"' + token.value + '\"';\n    }\n\n    /**\n     * For an attribute with multiple interpolation tags,\n     * e.g. attr=\"some-{{thing | filter}}\", in order to combine\n     * the whole thing into a single watchable expression, we\n     * have to inline those filters. This function does exactly\n     * that. This is a bit hacky but it avoids heavy changes\n     * to directive parser and watcher mechanism.\n     *\n     * @param {String} exp\n     * @param {Boolean} single\n     * @return {String}\n     */\n\n    var filterRE = /[^|]\\|[^|]/;\n    function inlineFilters(exp, single) {\n        if (!filterRE.test(exp)) {\n            return single ? exp : '(' + exp + ')';\n        } else {\n            var dir = parseDirective(exp);\n            if (!dir.filters) {\n                return '(' + exp + ')';\n            } else {\n                return 'this._applyFilters(' + dir.expression + // value\n                    ',null,' + // oldValue (null for read)\n                    JSON.stringify(dir.filters) + // filter descriptors\n                    ',false)'; // write?\n            }\n        }\n    }\n\n    var text = Object.freeze({\n        compileRegex: compileRegex,\n        parseText: parseText,\n        tokensToExp: tokensToExp\n    });\n\n    var delimiters = ['{{', '}}'];\n    var unsafeDelimiters = ['{{{', '}}}'];\n\n    var config = Object.defineProperties({\n\n        /**\n         * Whether to print debug messages.\n         * Also enables stack trace for warnings.\n         *\n         * @type {Boolean}\n         */\n\n        debug: false,\n\n        /**\n         * Whether to suppress warnings.\n         *\n         * @type {Boolean}\n         */\n\n        silent: false,\n\n        /**\n         * Whether to use async rendering.\n         */\n\n        async: true,\n\n        /**\n         * Whether to warn against errors caught when evaluating\n         * expressions.\n         */\n\n        warnExpressionErrors: true,\n\n        /**\n         * Whether to allow devtools inspection.\n         * Disabled by default in production builds.\n         */\n\n        devtools: 'development' !== 'production',\n\n        /**\n         * Internal flag to indicate the delimiters have been\n         * changed.\n         *\n         * @type {Boolean}\n         */\n\n        _delimitersChanged: true,\n\n        /**\n         * List of asset types that a component can own.\n         *\n         * @type {Array}\n         */\n\n        _assetTypes: ['component', 'directive', 'elementDirective', 'filter', 'transition', 'partial'],\n\n        /**\n         * prop binding modes\n         */\n\n        _propBindingModes: {\n            ONE_WAY: 0,\n            TWO_WAY: 1,\n            ONE_TIME: 2\n        },\n\n        /**\n         * Max circular updates allowed in a batcher flush cycle.\n         */\n\n        _maxUpdateCount: 100\n\n    }, {\n        delimiters: { /**\n         * Interpolation delimiters. Changing these would trigger\n         * the text parser to re-compile the regular expressions.\n         *\n         * @type {Array<String>}\n         */\n\n        get: function get() {\n            return delimiters;\n        },\n            set: function set(val) {\n                delimiters = val;\n                compileRegex();\n            },\n            configurable: true,\n            enumerable: true\n        },\n        unsafeDelimiters: {\n            get: function get() {\n                return unsafeDelimiters;\n            },\n            set: function set(val) {\n                unsafeDelimiters = val;\n                compileRegex();\n            },\n            configurable: true,\n            enumerable: true\n        }\n    });\n\n    var warn = undefined;\n    var formatComponentName = undefined;\n\n    if ('development' !== 'production') {\n        (function () {\n            var hasConsole = typeof console !== 'undefined';\n\n            warn = function (msg, vm) {\n                if (hasConsole && !config.silent) {\n                    console.error('[Vue warn]: ' + msg + (vm ? formatComponentName(vm) : ''));\n                }\n            };\n\n            formatComponentName = function (vm) {\n                var name = vm._isVue ? vm.$options.name : vm.name;\n                return name ? ' (found in component: <' + hyphenate(name) + '>)' : '';\n            };\n        })();\n    }\n\n    /**\n     * Append with transition.\n     *\n     * @param {Element} el\n     * @param {Element} target\n     * @param {Vue} vm\n     * @param {Function} [cb]\n     */\n\n    function appendWithTransition(el, target, vm, cb) {\n        applyTransition(el, 1, function () {\n            target.appendChild(el);\n        }, vm, cb);\n    }\n\n    /**\n     * InsertBefore with transition.\n     *\n     * @param {Element} el\n     * @param {Element} target\n     * @param {Vue} vm\n     * @param {Function} [cb]\n     */\n\n    function beforeWithTransition(el, target, vm, cb) {\n        applyTransition(el, 1, function () {\n            before(el, target);\n        }, vm, cb);\n    }\n\n    /**\n     * Remove with transition.\n     *\n     * @param {Element} el\n     * @param {Vue} vm\n     * @param {Function} [cb]\n     */\n\n    function removeWithTransition(el, vm, cb) {\n        applyTransition(el, -1, function () {\n            remove(el);\n        }, vm, cb);\n    }\n\n    /**\n     * Apply transitions with an operation callback.\n     *\n     * @param {Element} el\n     * @param {Number} direction\n     *                  1: enter\n     *                 -1: leave\n     * @param {Function} op - the actual DOM operation\n     * @param {Vue} vm\n     * @param {Function} [cb]\n     */\n\n    function applyTransition(el, direction, op, vm, cb) {\n        var transition = el.__v_trans;\n        if (!transition ||\n            // skip if there are no js hooks and CSS transition is\n            // not supported\n            !transition.hooks && !transitionEndEvent ||\n            // skip transitions for initial compile\n            !vm._isCompiled ||\n            // if the vm is being manipulated by a parent directive\n            // during the parent's compilation phase, skip the\n            // animation.\n            vm.$parent && !vm.$parent._isCompiled) {\n            op();\n            if (cb) cb();\n            return;\n        }\n        var action = direction > 0 ? 'enter' : 'leave';\n        transition[action](op, cb);\n    }\n\n    var transition = Object.freeze({\n        appendWithTransition: appendWithTransition,\n        beforeWithTransition: beforeWithTransition,\n        removeWithTransition: removeWithTransition,\n        applyTransition: applyTransition\n    });\n\n    /**\n     * Query an element selector if it's not an element already.\n     *\n     * @param {String|Element} el\n     * @return {Element}\n     */\n\n    function query(el) {\n        if (typeof el === 'string') {\n            var selector = el;\n            el = document.querySelector(el);\n            if (!el) {\n                'development' !== 'production' && warn('Cannot find element: ' + selector);\n            }\n        }\n        return el;\n    }\n\n    /**\n     * Check if a node is in the document.\n     * Note: document.documentElement.contains should work here\n     * but always returns false for comment nodes in phantomjs,\n     * making unit tests difficult. This is fixed by doing the\n     * contains() check on the node's parentNode instead of\n     * the node itself.\n     *\n     * @param {Node} node\n     * @return {Boolean}\n     */\n\n    function inDoc(node) {\n        if (!node) return false;\n        var doc = node.ownerDocument.documentElement;\n        var parent = node.parentNode;\n        return doc === node || doc === parent || !!(parent && parent.nodeType === 1 && doc.contains(parent));\n    }\n\n    /**\n     * Get and remove an attribute from a node.\n     *\n     * @param {Node} node\n     * @param {String} _attr\n     */\n\n    function getAttr(node, _attr) {\n        var val = node.getAttribute(_attr);\n        if (val !== null) {\n            node.removeAttribute(_attr);\n        }\n        return val;\n    }\n\n    /**\n     * Get an attribute with colon or v-bind: prefix.\n     *\n     * @param {Node} node\n     * @param {String} name\n     * @return {String|null}\n     */\n\n    function getBindAttr(node, name) {\n        var val = getAttr(node, ':' + name);\n        if (val === null) {\n            val = getAttr(node, 'v-bind:' + name);\n        }\n        return val;\n    }\n\n    /**\n     * Check the presence of a bind attribute.\n     *\n     * @param {Node} node\n     * @param {String} name\n     * @return {Boolean}\n     */\n\n    function hasBindAttr(node, name) {\n        return node.hasAttribute(name) || node.hasAttribute(':' + name) || node.hasAttribute('v-bind:' + name);\n    }\n\n    /**\n     * Insert el before target\n     *\n     * @param {Element} el\n     * @param {Element} target\n     */\n\n    function before(el, target) {\n        target.parentNode.insertBefore(el, target);\n    }\n\n    /**\n     * Insert el after target\n     *\n     * @param {Element} el\n     * @param {Element} target\n     */\n\n    function after(el, target) {\n        if (target.nextSibling) {\n            before(el, target.nextSibling);\n        } else {\n            target.parentNode.appendChild(el);\n        }\n    }\n\n    /**\n     * Remove el from DOM\n     *\n     * @param {Element} el\n     */\n\n    function remove(el) {\n        el.parentNode.removeChild(el);\n    }\n\n    /**\n     * Prepend el to target\n     *\n     * @param {Element} el\n     * @param {Element} target\n     */\n\n    function prepend(el, target) {\n        if (target.firstChild) {\n            before(el, target.firstChild);\n        } else {\n            target.appendChild(el);\n        }\n    }\n\n    /**\n     * Replace target with el\n     *\n     * @param {Element} target\n     * @param {Element} el\n     */\n\n    function replace(target, el) {\n        var parent = target.parentNode;\n        if (parent) {\n            parent.replaceChild(el, target);\n        }\n    }\n\n    /**\n     * Add event listener shorthand.\n     *\n     * @param {Element} el\n     * @param {String} event\n     * @param {Function} cb\n     * @param {Boolean} [useCapture]\n     */\n\n    function on(el, event, cb, useCapture) {\n        el.addEventListener(event, cb, useCapture);\n    }\n\n    /**\n     * Remove event listener shorthand.\n     *\n     * @param {Element} el\n     * @param {String} event\n     * @param {Function} cb\n     */\n\n    function off(el, event, cb) {\n        el.removeEventListener(event, cb);\n    }\n\n    /**\n     * For IE9 compat: when both class and :class are present\n     * getAttribute('class') returns wrong value...\n     *\n     * @param {Element} el\n     * @return {String}\n     */\n\n    function getClass(el) {\n        var classname = el.className;\n        if (typeof classname === 'object') {\n            classname = classname.baseVal || '';\n        }\n        return classname;\n    }\n\n    /**\n     * In IE9, setAttribute('class') will result in empty class\n     * if the element also has the :class attribute; However in\n     * PhantomJS, setting `className` does not work on SVG elements...\n     * So we have to do a conditional check here.\n     *\n     * @param {Element} el\n     * @param {String} cls\n     */\n\n    function setClass(el, cls) {\n        /* istanbul ignore if */\n        if (isIE9 && !/svg$/.test(el.namespaceURI)) {\n            el.className = cls;\n        } else {\n            el.setAttribute('class', cls);\n        }\n    }\n\n    /**\n     * Add class with compatibility for IE & SVG\n     *\n     * @param {Element} el\n     * @param {String} cls\n     */\n\n    function addClass(el, cls) {\n        if (el.classList) {\n            el.classList.add(cls);\n        } else {\n            var cur = ' ' + getClass(el) + ' ';\n            if (cur.indexOf(' ' + cls + ' ') < 0) {\n                setClass(el, (cur + cls).trim());\n            }\n        }\n    }\n\n    /**\n     * Remove class with compatibility for IE & SVG\n     *\n     * @param {Element} el\n     * @param {String} cls\n     */\n\n    function removeClass(el, cls) {\n        if (el.classList) {\n            el.classList.remove(cls);\n        } else {\n            var cur = ' ' + getClass(el) + ' ';\n            var tar = ' ' + cls + ' ';\n            while (cur.indexOf(tar) >= 0) {\n                cur = cur.replace(tar, ' ');\n            }\n            setClass(el, cur.trim());\n        }\n        if (!el.className) {\n            el.removeAttribute('class');\n        }\n    }\n\n    /**\n     * Extract raw content inside an element into a temporary\n     * container div\n     *\n     * @param {Element} el\n     * @param {Boolean} asFragment\n     * @return {Element|DocumentFragment}\n     */\n\n    function extractContent(el, asFragment) {\n        var child;\n        var rawContent;\n        /* istanbul ignore if */\n        if (isTemplate(el) && isFragment(el.content)) {\n            el = el.content;\n        }\n        if (el.hasChildNodes()) {\n            trimNode(el);\n            rawContent = asFragment ? document.createDocumentFragment() : document.createElement('div');\n            /* eslint-disable no-cond-assign */\n            while (child = el.firstChild) {\n                /* eslint-enable no-cond-assign */\n                rawContent.appendChild(child);\n            }\n        }\n        return rawContent;\n    }\n\n    /**\n     * Trim possible empty head/tail text and comment\n     * nodes inside a parent.\n     *\n     * @param {Node} node\n     */\n\n    function trimNode(node) {\n        var child;\n        /* eslint-disable no-sequences */\n        while ((child = node.firstChild, isTrimmable(child))) {\n            node.removeChild(child);\n        }\n        while ((child = node.lastChild, isTrimmable(child))) {\n            node.removeChild(child);\n        }\n        /* eslint-enable no-sequences */\n    }\n\n    function isTrimmable(node) {\n        return node && (node.nodeType === 3 && !node.data.trim() || node.nodeType === 8);\n    }\n\n    /**\n     * Check if an element is a template tag.\n     * Note if the template appears inside an SVG its tagName\n     * will be in lowercase.\n     *\n     * @param {Element} el\n     */\n\n    function isTemplate(el) {\n        return el.tagName && el.tagName.toLowerCase() === 'template';\n    }\n\n    /**\n     * Create an \"anchor\" for performing dom insertion/removals.\n     * This is used in a number of scenarios:\n     * - fragment instance\n     * - v-html\n     * - v-if\n     * - v-for\n     * - component\n     *\n     * @param {String} content\n     * @param {Boolean} persist - IE trashes empty textNodes on\n     *                            cloneNode(true), so in certain\n     *                            cases the anchor needs to be\n     *                            non-empty to be persisted in\n     *                            templates.\n     * @return {Comment|Text}\n     */\n\n    function createAnchor(content, persist) {\n        var anchor = config.debug ? document.createComment(content) : document.createTextNode(persist ? ' ' : '');\n        anchor.__v_anchor = true;\n        return anchor;\n    }\n\n    /**\n     * Find a component ref attribute that starts with $.\n     *\n     * @param {Element} node\n     * @return {String|undefined}\n     */\n\n    var refRE = /^v-ref:/;\n\n    function findRef(node) {\n        if (node.hasAttributes()) {\n            var attrs = node.attributes;\n            for (var i = 0, l = attrs.length; i < l; i++) {\n                var name = attrs[i].name;\n                if (refRE.test(name)) {\n                    return camelize(name.replace(refRE, ''));\n                }\n            }\n        }\n    }\n\n    /**\n     * Map a function to a range of nodes .\n     *\n     * @param {Node} node\n     * @param {Node} end\n     * @param {Function} op\n     */\n\n    function mapNodeRange(node, end, op) {\n        var next;\n        while (node !== end) {\n            next = node.nextSibling;\n            op(node);\n            node = next;\n        }\n        op(end);\n    }\n\n    /**\n     * Remove a range of nodes with transition, store\n     * the nodes in a fragment with correct ordering,\n     * and call callback when done.\n     *\n     * @param {Node} start\n     * @param {Node} end\n     * @param {Vue} vm\n     * @param {DocumentFragment} frag\n     * @param {Function} cb\n     */\n\n    function removeNodeRange(start, end, vm, frag, cb) {\n        var done = false;\n        var removed = 0;\n        var nodes = [];\n        mapNodeRange(start, end, function (node) {\n            if (node === end) done = true;\n            nodes.push(node);\n            removeWithTransition(node, vm, onRemoved);\n        });\n        function onRemoved() {\n            removed++;\n            if (done && removed >= nodes.length) {\n                for (var i = 0; i < nodes.length; i++) {\n                    frag.appendChild(nodes[i]);\n                }\n                cb && cb();\n            }\n        }\n    }\n\n    /**\n     * Check if a node is a DocumentFragment.\n     *\n     * @param {Node} node\n     * @return {Boolean}\n     */\n\n    function isFragment(node) {\n        return node && node.nodeType === 11;\n    }\n\n    /**\n     * Get outerHTML of elements, taking care\n     * of SVG elements in IE as well.\n     *\n     * @param {Element} el\n     * @return {String}\n     */\n\n    function getOuterHTML(el) {\n        if (el.outerHTML) {\n            return el.outerHTML;\n        } else {\n            var container = document.createElement('div');\n            container.appendChild(el.cloneNode(true));\n            return container.innerHTML;\n        }\n    }\n\n    var commonTagRE = /^(div|p|span|img|a|b|i|br|ul|ol|li|h1|h2|h3|h4|h5|h6|code|pre|table|th|td|tr|form|label|input|select|option|nav|article|section|header|footer)$/i;\n    var reservedTagRE = /^(slot|partial|component)$/i;\n\n    var isUnknownElement = undefined;\n    if ('development' !== 'production') {\n        isUnknownElement = function (el, tag) {\n            if (tag.indexOf('-') > -1) {\n                // http://stackoverflow.com/a/28210364/1070244\n                return el.constructor === window.HTMLUnknownElement || el.constructor === window.HTMLElement;\n            } else {\n                return (/HTMLUnknownElement/.test(el.toString()) &&\n                    // Chrome returns unknown for several HTML5 elements.\n                    // https://code.google.com/p/chromium/issues/detail?id=540526\n                    !/^(data|time|rtc|rb)$/.test(tag)\n                );\n            }\n        };\n    }\n\n    /**\n     * Check if an element is a component, if yes return its\n     * component id.\n     *\n     * @param {Element} el\n     * @param {Object} options\n     * @return {Object|undefined}\n     */\n\n    function checkComponentAttr(el, options) {\n        var tag = el.tagName.toLowerCase();\n        var hasAttrs = el.hasAttributes();\n        if (!commonTagRE.test(tag) && !reservedTagRE.test(tag)) {\n            if (resolveAsset(options, 'components', tag)) {\n                return { id: tag };\n            } else {\n                var is = hasAttrs && getIsBinding(el, options);\n                if (is) {\n                    return is;\n                } else if ('development' !== 'production') {\n                    var expectedTag = options._componentNameMap && options._componentNameMap[tag];\n                    if (expectedTag) {\n                        warn('Unknown custom element: <' + tag + '> - ' + 'did you mean <' + expectedTag + '>? ' + 'HTML is case-insensitive, remember to use kebab-case in templates.');\n                    } else if (isUnknownElement(el, tag)) {\n                        warn('Unknown custom element: <' + tag + '> - did you ' + 'register the component correctly? For recursive components, ' + 'make sure to provide the \"name\" option.');\n                    }\n                }\n            }\n        } else if (hasAttrs) {\n            return getIsBinding(el, options);\n        }\n    }\n\n    /**\n     * Get \"is\" binding from an element.\n     *\n     * @param {Element} el\n     * @param {Object} options\n     * @return {Object|undefined}\n     */\n\n    function getIsBinding(el, options) {\n        // dynamic syntax\n        var exp = el.getAttribute('is');\n        if (exp != null) {\n            if (resolveAsset(options, 'components', exp)) {\n                el.removeAttribute('is');\n                return { id: exp };\n            }\n        } else {\n            exp = getBindAttr(el, 'is');\n            if (exp != null) {\n                return { id: exp, dynamic: true };\n            }\n        }\n    }\n\n    /**\n     * Option overwriting strategies are functions that handle\n     * how to merge a parent option value and a child option\n     * value into the final value.\n     *\n     * All strategy functions follow the same signature:\n     *\n     * @param {*} parentVal\n     * @param {*} childVal\n     * @param {Vue} [vm]\n     */\n\n    var strats = config.optionMergeStrategies = Object.create(null);\n\n    /**\n     * Helper that recursively merges two data objects together.\n     */\n\n    function mergeData(to, from) {\n        var key, toVal, fromVal;\n        for (key in from) {\n            toVal = to[key];\n            fromVal = from[key];\n            if (!hasOwn(to, key)) {\n                set(to, key, fromVal);\n            } else if (isObject(toVal) && isObject(fromVal)) {\n                mergeData(toVal, fromVal);\n            }\n        }\n        return to;\n    }\n\n    /**\n     * Data\n     */\n\n    strats.data = function (parentVal, childVal, vm) {\n        if (!vm) {\n            // in a Vue.extend merge, both should be functions\n            if (!childVal) {\n                return parentVal;\n            }\n            if (typeof childVal !== 'function') {\n                'development' !== 'production' && warn('The \"data\" option should be a function ' + 'that returns a per-instance value in component ' + 'definitions.', vm);\n                return parentVal;\n            }\n            if (!parentVal) {\n                return childVal;\n            }\n            // when parentVal & childVal are both present,\n            // we need to return a function that returns the\n            // merged result of both functions... no need to\n            // check if parentVal is a function here because\n            // it has to be a function to pass previous merges.\n            return function mergedDataFn() {\n                return mergeData(childVal.call(this), parentVal.call(this));\n            };\n        } else if (parentVal || childVal) {\n            return function mergedInstanceDataFn() {\n                // instance merge\n                var instanceData = typeof childVal === 'function' ? childVal.call(vm) : childVal;\n                var defaultData = typeof parentVal === 'function' ? parentVal.call(vm) : undefined;\n                if (instanceData) {\n                    return mergeData(instanceData, defaultData);\n                } else {\n                    return defaultData;\n                }\n            };\n        }\n    };\n\n    /**\n     * El\n     */\n\n    strats.el = function (parentVal, childVal, vm) {\n        if (!vm && childVal && typeof childVal !== 'function') {\n            'development' !== 'production' && warn('The \"el\" option should be a function ' + 'that returns a per-instance value in component ' + 'definitions.', vm);\n            return;\n        }\n        var ret = childVal || parentVal;\n        // invoke the element factory if this is instance merge\n        return vm && typeof ret === 'function' ? ret.call(vm) : ret;\n    };\n\n    /**\n     * Hooks and param attributes are merged as arrays.\n     */\n\n    strats.init = strats.created = strats.ready = strats.attached = strats.detached = strats.beforeCompile = strats.compiled = strats.beforeDestroy = strats.destroyed = strats.activate = function (parentVal, childVal) {\n        return childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [childVal] : parentVal;\n    };\n\n    /**\n     * Assets\n     *\n     * When a vm is present (instance creation), we need to do\n     * a three-way merge between constructor options, instance\n     * options and parent options.\n     */\n\n    function mergeAssets(parentVal, childVal) {\n        var res = Object.create(parentVal || null);\n        return childVal ? extend(res, guardArrayAssets(childVal)) : res;\n    }\n\n    config._assetTypes.forEach(function (type) {\n        strats[type + 's'] = mergeAssets;\n    });\n\n    /**\n     * Events & Watchers.\n     *\n     * Events & watchers hashes should not overwrite one\n     * another, so we merge them as arrays.\n     */\n\n    strats.watch = strats.events = function (parentVal, childVal) {\n        if (!childVal) return parentVal;\n        if (!parentVal) return childVal;\n        var ret = {};\n        extend(ret, parentVal);\n        for (var key in childVal) {\n            var parent = ret[key];\n            var child = childVal[key];\n            if (parent && !isArray(parent)) {\n                parent = [parent];\n            }\n            ret[key] = parent ? parent.concat(child) : [child];\n        }\n        return ret;\n    };\n\n    /**\n     * Other object hashes.\n     */\n\n    strats.props = strats.methods = strats.computed = function (parentVal, childVal) {\n        if (!childVal) return parentVal;\n        if (!parentVal) return childVal;\n        var ret = Object.create(null);\n        extend(ret, parentVal);\n        extend(ret, childVal);\n        return ret;\n    };\n\n    /**\n     * Default strategy.\n     */\n\n    var defaultStrat = function defaultStrat(parentVal, childVal) {\n        return childVal === undefined ? parentVal : childVal;\n    };\n\n    /**\n     * Make sure component options get converted to actual\n     * constructors.\n     *\n     * @param {Object} options\n     */\n\n    function guardComponents(options) {\n        if (options.components) {\n            var components = options.components = guardArrayAssets(options.components);\n            var ids = Object.keys(components);\n            var def;\n            if ('development' !== 'production') {\n                var map = options._componentNameMap = {};\n            }\n            for (var i = 0, l = ids.length; i < l; i++) {\n                var key = ids[i];\n                if (commonTagRE.test(key) || reservedTagRE.test(key)) {\n                    'development' !== 'production' && warn('Do not use built-in or reserved HTML elements as component ' + 'id: ' + key);\n                    continue;\n                }\n                // record a all lowercase <-> kebab-case mapping for\n                // possible custom element case error warning\n                if ('development' !== 'production') {\n                    map[key.replace(/-/g, '').toLowerCase()] = hyphenate(key);\n                }\n                def = components[key];\n                if (isPlainObject(def)) {\n                    components[key] = Vue.extend(def);\n                }\n            }\n        }\n    }\n\n    /**\n     * Ensure all props option syntax are normalized into the\n     * Object-based format.\n     *\n     * @param {Object} options\n     */\n\n    function guardProps(options) {\n        var props = options.props;\n        var i, val;\n        if (isArray(props)) {\n            options.props = {};\n            i = props.length;\n            while (i--) {\n                val = props[i];\n                if (typeof val === 'string') {\n                    options.props[val] = null;\n                } else if (val.name) {\n                    options.props[val.name] = val;\n                }\n            }\n        } else if (isPlainObject(props)) {\n            var keys = Object.keys(props);\n            i = keys.length;\n            while (i--) {\n                val = props[keys[i]];\n                if (typeof val === 'function') {\n                    props[keys[i]] = { type: val };\n                }\n            }\n        }\n    }\n\n    /**\n     * Guard an Array-format assets option and converted it\n     * into the key-value Object format.\n     *\n     * @param {Object|Array} assets\n     * @return {Object}\n     */\n\n    function guardArrayAssets(assets) {\n        if (isArray(assets)) {\n            var res = {};\n            var i = assets.length;\n            var asset;\n            while (i--) {\n                asset = assets[i];\n                var id = typeof asset === 'function' ? asset.options && asset.options.name || asset.id : asset.name || asset.id;\n                if (!id) {\n                    'development' !== 'production' && warn('Array-syntax assets must provide a \"name\" or \"id\" field.');\n                } else {\n                    res[id] = asset;\n                }\n            }\n            return res;\n        }\n        return assets;\n    }\n\n    /**\n     * Merge two option objects into a new one.\n     * Core utility used in both instantiation and inheritance.\n     *\n     * @param {Object} parent\n     * @param {Object} child\n     * @param {Vue} [vm] - if vm is present, indicates this is\n     *                     an instantiation merge.\n     */\n\n    function mergeOptions(parent, child, vm) {\n        guardComponents(child);\n        guardProps(child);\n        if ('development' !== 'production') {\n            if (child.propsData && !vm) {\n                warn('propsData can only be used as an instantiation option.');\n            }\n        }\n        var options = {};\n        var key;\n        if (child['extends']) {\n            parent = typeof child['extends'] === 'function' ? mergeOptions(parent, child['extends'].options, vm) : mergeOptions(parent, child['extends'], vm);\n        }\n        if (child.mixins) {\n            for (var i = 0, l = child.mixins.length; i < l; i++) {\n                parent = mergeOptions(parent, child.mixins[i], vm);\n            }\n        }\n        for (key in parent) {\n            mergeField(key);\n        }\n        for (key in child) {\n            if (!hasOwn(parent, key)) {\n                mergeField(key);\n            }\n        }\n        function mergeField(key) {\n            var strat = strats[key] || defaultStrat;\n            options[key] = strat(parent[key], child[key], vm, key);\n        }\n        return options;\n    }\n\n    /**\n     * Resolve an asset.\n     * This function is used because child instances need access\n     * to assets defined in its ancestor chain.\n     *\n     * @param {Object} options\n     * @param {String} type\n     * @param {String} id\n     * @param {Boolean} warnMissing\n     * @return {Object|Function}\n     */\n\n    function resolveAsset(options, type, id, warnMissing) {\n        /* istanbul ignore if */\n        if (typeof id !== 'string') {\n            return;\n        }\n        var assets = options[type];\n        var camelizedId;\n        var res = assets[id] ||\n            // camelCase ID\n            assets[camelizedId = camelize(id)] ||\n            // Pascal Case ID\n            assets[camelizedId.charAt(0).toUpperCase() + camelizedId.slice(1)];\n        if ('development' !== 'production' && warnMissing && !res) {\n            warn('Failed to resolve ' + type.slice(0, -1) + ': ' + id, options);\n        }\n        return res;\n    }\n\n    var uid$1 = 0;\n\n    /**\n     * A dep is an observable that can have multiple\n     * directives subscribing to it.\n     *\n     * @constructor\n     */\n    function Dep() {\n        this.id = uid$1++;\n        this.subs = [];\n    }\n\n    // the current target watcher being evaluated.\n    // this is globally unique because there could be only one\n    // watcher being evaluated at any time.\n    Dep.target = null;\n\n    /**\n     * Add a directive subscriber.\n     *\n     * @param {Directive} sub\n     */\n\n    Dep.prototype.addSub = function (sub) {\n        this.subs.push(sub);\n    };\n\n    /**\n     * Remove a directive subscriber.\n     *\n     * @param {Directive} sub\n     */\n\n    Dep.prototype.removeSub = function (sub) {\n        this.subs.$remove(sub);\n    };\n\n    /**\n     * Add self as a dependency to the target watcher.\n     */\n\n    Dep.prototype.depend = function () {\n        Dep.target.addDep(this);\n    };\n\n    /**\n     * Notify all subscribers of a new value.\n     */\n\n    Dep.prototype.notify = function () {\n        // stablize the subscriber list first\n        var subs = toArray(this.subs);\n        for (var i = 0, l = subs.length; i < l; i++) {\n            subs[i].update();\n        }\n    };\n\n    var arrayProto = Array.prototype;\n    var arrayMethods = Object.create(arrayProto)\n\n    /**\n     * Intercept mutating methods and emit events\n     */\n\n        ;['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'].forEach(function (method) {\n        // cache original method\n        var original = arrayProto[method];\n        def(arrayMethods, method, function mutator() {\n            // avoid leaking arguments:\n            // http://jsperf.com/closure-with-arguments\n            var i = arguments.length;\n            var args = new Array(i);\n            while (i--) {\n                args[i] = arguments[i];\n            }\n            var result = original.apply(this, args);\n            var ob = this.__ob__;\n            var inserted;\n            switch (method) {\n                case 'push':\n                    inserted = args;\n                    break;\n                case 'unshift':\n                    inserted = args;\n                    break;\n                case 'splice':\n                    inserted = args.slice(2);\n                    break;\n            }\n            if (inserted) ob.observeArray(inserted);\n            // notify change\n            ob.dep.notify();\n            return result;\n        });\n    });\n\n    /**\n     * Swap the element at the given index with a new value\n     * and emits corresponding event.\n     *\n     * @param {Number} index\n     * @param {*} val\n     * @return {*} - replaced element\n     */\n\n    def(arrayProto, '$set', function $set(index, val) {\n        if (index >= this.length) {\n            this.length = Number(index) + 1;\n        }\n        return this.splice(index, 1, val)[0];\n    });\n\n    /**\n     * Convenience method to remove the element at given index or target element reference.\n     *\n     * @param {*} item\n     */\n\n    def(arrayProto, '$remove', function $remove(item) {\n        /* istanbul ignore if */\n        if (!this.length) return;\n        var index = indexOf(this, item);\n        if (index > -1) {\n            return this.splice(index, 1);\n        }\n    });\n\n    var arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n    /**\n     * By default, when a reactive property is set, the new value is\n     * also converted to become reactive. However in certain cases, e.g.\n     * v-for scope alias and props, we don't want to force conversion\n     * because the value may be a nested value under a frozen data structure.\n     *\n     * So whenever we want to set a reactive property without forcing\n     * conversion on the new value, we wrap that call inside this function.\n     */\n\n    var shouldConvert = true;\n\n    function withoutConversion(fn) {\n        shouldConvert = false;\n        fn();\n        shouldConvert = true;\n    }\n\n    /**\n     * Observer class that are attached to each observed\n     * object. Once attached, the observer converts target\n     * object's property keys into getter/setters that\n     * collect dependencies and dispatches updates.\n     *\n     * @param {Array|Object} value\n     * @constructor\n     */\n\n    function Observer(value) {\n        this.value = value;\n        this.dep = new Dep();\n        def(value, '__ob__', this);\n        if (isArray(value)) {\n            var augment = hasProto ? protoAugment : copyAugment;\n            augment(value, arrayMethods, arrayKeys);\n            this.observeArray(value);\n        } else {\n            this.walk(value);\n        }\n    }\n\n    // Instance methods\n\n    /**\n     * Walk through each property and convert them into\n     * getter/setters. This method should only be called when\n     * value type is Object.\n     *\n     * @param {Object} obj\n     */\n\n    Observer.prototype.walk = function (obj) {\n        var keys = Object.keys(obj);\n        for (var i = 0, l = keys.length; i < l; i++) {\n            this.convert(keys[i], obj[keys[i]]);\n        }\n    };\n\n    /**\n     * Observe a list of Array items.\n     *\n     * @param {Array} items\n     */\n\n    Observer.prototype.observeArray = function (items) {\n        for (var i = 0, l = items.length; i < l; i++) {\n            observe(items[i]);\n        }\n    };\n\n    /**\n     * Convert a property into getter/setter so we can emit\n     * the events when the property is accessed/changed.\n     *\n     * @param {String} key\n     * @param {*} val\n     */\n\n    Observer.prototype.convert = function (key, val) {\n        defineReactive(this.value, key, val);\n    };\n\n    /**\n     * Add an owner vm, so that when $set/$delete mutations\n     * happen we can notify owner vms to proxy the keys and\n     * digest the watchers. This is only called when the object\n     * is observed as an instance's root $data.\n     *\n     * @param {Vue} vm\n     */\n\n    Observer.prototype.addVm = function (vm) {\n        (this.vms || (this.vms = [])).push(vm);\n    };\n\n    /**\n     * Remove an owner vm. This is called when the object is\n     * swapped out as an instance's $data object.\n     *\n     * @param {Vue} vm\n     */\n\n    Observer.prototype.removeVm = function (vm) {\n        this.vms.$remove(vm);\n    };\n\n    // helpers\n\n    /**\n     * Augment an target Object or Array by intercepting\n     * the prototype chain using __proto__\n     *\n     * @param {Object|Array} target\n     * @param {Object} src\n     */\n\n    function protoAugment(target, src) {\n        /* eslint-disable no-proto */\n        target.__proto__ = src;\n        /* eslint-enable no-proto */\n    }\n\n    /**\n     * Augment an target Object or Array by defining\n     * hidden properties.\n     *\n     * @param {Object|Array} target\n     * @param {Object} proto\n     */\n\n    function copyAugment(target, src, keys) {\n        for (var i = 0, l = keys.length; i < l; i++) {\n            var key = keys[i];\n            def(target, key, src[key]);\n        }\n    }\n\n    /**\n     * Attempt to create an observer instance for a value,\n     * returns the new observer if successfully observed,\n     * or the existing observer if the value already has one.\n     *\n     * @param {*} value\n     * @param {Vue} [vm]\n     * @return {Observer|undefined}\n     * @static\n     */\n\n    function observe(value, vm) {\n        if (!value || typeof value !== 'object') {\n            return;\n        }\n        var ob;\n        if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n            ob = value.__ob__;\n        } else if (shouldConvert && (isArray(value) || isPlainObject(value)) && Object.isExtensible(value) && !value._isVue) {\n            ob = new Observer(value);\n        }\n        if (ob && vm) {\n            ob.addVm(vm);\n        }\n        return ob;\n    }\n\n    /**\n     * Define a reactive property on an Object.\n     *\n     * @param {Object} obj\n     * @param {String} key\n     * @param {*} val\n     */\n\n    function defineReactive(obj, key, val) {\n        var dep = new Dep();\n\n        var property = Object.getOwnPropertyDescriptor(obj, key);\n        if (property && property.configurable === false) {\n            return;\n        }\n\n        // cater for pre-defined getter/setters\n        var getter = property && property.get;\n        var setter = property && property.set;\n\n        var childOb = observe(val);\n        Object.defineProperty(obj, key, {\n            enumerable: true,\n            configurable: true,\n            get: function reactiveGetter() {\n                var value = getter ? getter.call(obj) : val;\n                if (Dep.target) {\n                    dep.depend();\n                    if (childOb) {\n                        childOb.dep.depend();\n                    }\n                    if (isArray(value)) {\n                        for (var e, i = 0, l = value.length; i < l; i++) {\n                            e = value[i];\n                            e && e.__ob__ && e.__ob__.dep.depend();\n                        }\n                    }\n                }\n                return value;\n            },\n            set: function reactiveSetter(newVal) {\n                var value = getter ? getter.call(obj) : val;\n                if (newVal === value) {\n                    return;\n                }\n                if (setter) {\n                    setter.call(obj, newVal);\n                } else {\n                    val = newVal;\n                }\n                childOb = observe(newVal);\n                dep.notify();\n            }\n        });\n    }\n\n\n\n    var util = Object.freeze({\n        defineReactive: defineReactive,\n        set: set,\n        del: del,\n        hasOwn: hasOwn,\n        isLiteral: isLiteral,\n        isReserved: isReserved,\n        _toString: _toString,\n        toNumber: toNumber,\n        toBoolean: toBoolean,\n        stripQuotes: stripQuotes,\n        camelize: camelize,\n        hyphenate: hyphenate,\n        classify: classify,\n        bind: bind,\n        toArray: toArray,\n        extend: extend,\n        isObject: isObject,\n        isPlainObject: isPlainObject,\n        def: def,\n        debounce: _debounce,\n        indexOf: indexOf,\n        cancellable: cancellable,\n        looseEqual: looseEqual,\n        isArray: isArray,\n        hasProto: hasProto,\n        inBrowser: inBrowser,\n        devtools: devtools,\n        isIE9: isIE9,\n        isAndroid: isAndroid,\n        isIos: isIos,\n        isWechat: isWechat,\n        get transitionProp () { return transitionProp; },\n        get transitionEndEvent () { return transitionEndEvent; },\n        get animationProp () { return animationProp; },\n        get animationEndEvent () { return animationEndEvent; },\n        nextTick: nextTick,\n        get _Set () { return _Set; },\n        query: query,\n        inDoc: inDoc,\n        getAttr: getAttr,\n        getBindAttr: getBindAttr,\n        hasBindAttr: hasBindAttr,\n        before: before,\n        after: after,\n        remove: remove,\n        prepend: prepend,\n        replace: replace,\n        on: on,\n        off: off,\n        setClass: setClass,\n        addClass: addClass,\n        removeClass: removeClass,\n        extractContent: extractContent,\n        trimNode: trimNode,\n        isTemplate: isTemplate,\n        createAnchor: createAnchor,\n        findRef: findRef,\n        mapNodeRange: mapNodeRange,\n        removeNodeRange: removeNodeRange,\n        isFragment: isFragment,\n        getOuterHTML: getOuterHTML,\n        mergeOptions: mergeOptions,\n        resolveAsset: resolveAsset,\n        checkComponentAttr: checkComponentAttr,\n        commonTagRE: commonTagRE,\n        reservedTagRE: reservedTagRE,\n        get warn () { return warn; }\n    });\n\n    var uid = 0;\n\n    function initMixin (Vue) {\n        /**\n         * The main init sequence. This is called for every\n         * instance, including ones that are created from extended\n         * constructors.\n         *\n         * @param {Object} options - this options object should be\n         *                           the result of merging class\n         *                           options and the options passed\n         *                           in to the constructor.\n         */\n\n        Vue.prototype._init = function (options) {\n            options = options || {};\n\n            this.$el = null;\n            this.$parent = options.parent;\n            this.$root = this.$parent ? this.$parent.$root : this;\n            this.$children = [];\n            this.$refs = {}; // child vm references\n            this.$els = {}; // element references\n            this._watchers = []; // all watchers as an array\n            this._directives = []; // all directives\n\n            // a uid\n            this._uid = uid++;\n\n            // a flag to avoid this being observed\n            this._isVue = true;\n\n            // events bookkeeping\n            this._events = {}; // registered callbacks\n            this._eventsCount = {}; // for $broadcast optimization\n\n            // fragment instance properties\n            this._isFragment = false;\n            this._fragment = // @type {DocumentFragment}\n                this._fragmentStart = // @type {Text|Comment}\n                    this._fragmentEnd = null; // @type {Text|Comment}\n\n            // lifecycle state\n            this._isCompiled = this._isDestroyed = this._isReady = this._isAttached = this._isBeingDestroyed = this._vForRemoving = false;\n            this._unlinkFn = null;\n\n            // context:\n            // if this is a transcluded component, context\n            // will be the common parent vm of this instance\n            // and its host.\n            this._context = options._context || this.$parent;\n\n            // scope:\n            // if this is inside an inline v-for, the scope\n            // will be the intermediate scope created for this\n            // repeat fragment. this is used for linking props\n            // and container directives.\n            this._scope = options._scope;\n\n            // fragment:\n            // if this instance is compiled inside a Fragment, it\n            // needs to reigster itself as a child of that fragment\n            // for attach/detach to work properly.\n            this._frag = options._frag;\n            if (this._frag) {\n                this._frag.children.push(this);\n            }\n\n            // push self into parent / transclusion host\n            if (this.$parent) {\n                this.$parent.$children.push(this);\n            }\n\n            // merge options.\n            options = this.$options = mergeOptions(this.constructor.options, options, this);\n\n            // set ref\n            this._updateRef();\n\n            // initialize data as empty object.\n            // it will be filled up in _initData().\n            this._data = {};\n\n            // call init hook\n            this._callHook('init');\n\n            // initialize data observation and scope inheritance.\n            this._initState();\n\n            // setup event system and option events.\n            this._initEvents();\n\n            // call created hook\n            this._callHook('created');\n\n            // if `el` option is passed, start compilation.\n            if (options.el) {\n                this.$mount(options.el);\n            }\n        };\n    }\n\n    var pathCache = new Cache(1000);\n\n    // actions\n    var APPEND = 0;\n    var PUSH = 1;\n    var INC_SUB_PATH_DEPTH = 2;\n    var PUSH_SUB_PATH = 3;\n\n    // states\n    var BEFORE_PATH = 0;\n    var IN_PATH = 1;\n    var BEFORE_IDENT = 2;\n    var IN_IDENT = 3;\n    var IN_SUB_PATH = 4;\n    var IN_SINGLE_QUOTE = 5;\n    var IN_DOUBLE_QUOTE = 6;\n    var AFTER_PATH = 7;\n    var ERROR = 8;\n\n    var pathStateMachine = [];\n\n    pathStateMachine[BEFORE_PATH] = {\n        'ws': [BEFORE_PATH],\n        'ident': [IN_IDENT, APPEND],\n        '[': [IN_SUB_PATH],\n        'eof': [AFTER_PATH]\n    };\n\n    pathStateMachine[IN_PATH] = {\n        'ws': [IN_PATH],\n        '.': [BEFORE_IDENT],\n        '[': [IN_SUB_PATH],\n        'eof': [AFTER_PATH]\n    };\n\n    pathStateMachine[BEFORE_IDENT] = {\n        'ws': [BEFORE_IDENT],\n        'ident': [IN_IDENT, APPEND]\n    };\n\n    pathStateMachine[IN_IDENT] = {\n        'ident': [IN_IDENT, APPEND],\n        '0': [IN_IDENT, APPEND],\n        'number': [IN_IDENT, APPEND],\n        'ws': [IN_PATH, PUSH],\n        '.': [BEFORE_IDENT, PUSH],\n        '[': [IN_SUB_PATH, PUSH],\n        'eof': [AFTER_PATH, PUSH]\n    };\n\n    pathStateMachine[IN_SUB_PATH] = {\n        \"'\": [IN_SINGLE_QUOTE, APPEND],\n        '\"': [IN_DOUBLE_QUOTE, APPEND],\n        '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH],\n        ']': [IN_PATH, PUSH_SUB_PATH],\n        'eof': ERROR,\n        'else': [IN_SUB_PATH, APPEND]\n    };\n\n    pathStateMachine[IN_SINGLE_QUOTE] = {\n        \"'\": [IN_SUB_PATH, APPEND],\n        'eof': ERROR,\n        'else': [IN_SINGLE_QUOTE, APPEND]\n    };\n\n    pathStateMachine[IN_DOUBLE_QUOTE] = {\n        '\"': [IN_SUB_PATH, APPEND],\n        'eof': ERROR,\n        'else': [IN_DOUBLE_QUOTE, APPEND]\n    };\n\n    /**\n     * Determine the type of a character in a keypath.\n     *\n     * @param {Char} ch\n     * @return {String} type\n     */\n\n    function getPathCharType(ch) {\n        if (ch === undefined) {\n            return 'eof';\n        }\n\n        var code = ch.charCodeAt(0);\n\n        switch (code) {\n            case 0x5B: // [\n            case 0x5D: // ]\n            case 0x2E: // .\n            case 0x22: // \"\n            case 0x27: // '\n            case 0x30:\n                // 0\n                return ch;\n\n            case 0x5F: // _\n            case 0x24:\n                // $\n                return 'ident';\n\n            case 0x20: // Space\n            case 0x09: // Tab\n            case 0x0A: // Newline\n            case 0x0D: // Return\n            case 0xA0: // No-break space\n            case 0xFEFF: // Byte Order Mark\n            case 0x2028: // Line Separator\n            case 0x2029:\n                // Paragraph Separator\n                return 'ws';\n        }\n\n        // a-z, A-Z\n        if (code >= 0x61 && code <= 0x7A || code >= 0x41 && code <= 0x5A) {\n            return 'ident';\n        }\n\n        // 1-9\n        if (code >= 0x31 && code <= 0x39) {\n            return 'number';\n        }\n\n        return 'else';\n    }\n\n    /**\n     * Format a subPath, return its plain form if it is\n     * a literal string or number. Otherwise prepend the\n     * dynamic indicator (*).\n     *\n     * @param {String} path\n     * @return {String}\n     */\n\n    function formatSubPath(path) {\n        var trimmed = path.trim();\n        // invalid leading 0\n        if (path.charAt(0) === '0' && isNaN(path)) {\n            return false;\n        }\n        return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed;\n    }\n\n    /**\n     * Parse a string path into an array of segments\n     *\n     * @param {String} path\n     * @return {Array|undefined}\n     */\n\n    function parse(path) {\n        var keys = [];\n        var index = -1;\n        var mode = BEFORE_PATH;\n        var subPathDepth = 0;\n        var c, newChar, key, type, transition, action, typeMap;\n\n        var actions = [];\n\n        actions[PUSH] = function () {\n            if (key !== undefined) {\n                keys.push(key);\n                key = undefined;\n            }\n        };\n\n        actions[APPEND] = function () {\n            if (key === undefined) {\n                key = newChar;\n            } else {\n                key += newChar;\n            }\n        };\n\n        actions[INC_SUB_PATH_DEPTH] = function () {\n            actions[APPEND]();\n            subPathDepth++;\n        };\n\n        actions[PUSH_SUB_PATH] = function () {\n            if (subPathDepth > 0) {\n                subPathDepth--;\n                mode = IN_SUB_PATH;\n                actions[APPEND]();\n            } else {\n                subPathDepth = 0;\n                key = formatSubPath(key);\n                if (key === false) {\n                    return false;\n                } else {\n                    actions[PUSH]();\n                }\n            }\n        };\n\n        function maybeUnescapeQuote() {\n            var nextChar = path[index + 1];\n            if (mode === IN_SINGLE_QUOTE && nextChar === \"'\" || mode === IN_DOUBLE_QUOTE && nextChar === '\"') {\n                index++;\n                newChar = '\\\\' + nextChar;\n                actions[APPEND]();\n                return true;\n            }\n        }\n\n        while (mode != null) {\n            index++;\n            c = path[index];\n\n            if (c === '\\\\' && maybeUnescapeQuote()) {\n                continue;\n            }\n\n            type = getPathCharType(c);\n            typeMap = pathStateMachine[mode];\n            transition = typeMap[type] || typeMap['else'] || ERROR;\n\n            if (transition === ERROR) {\n                return; // parse error\n            }\n\n            mode = transition[0];\n            action = actions[transition[1]];\n            if (action) {\n                newChar = transition[2];\n                newChar = newChar === undefined ? c : newChar;\n                if (action() === false) {\n                    return;\n                }\n            }\n\n            if (mode === AFTER_PATH) {\n                keys.raw = path;\n                return keys;\n            }\n        }\n    }\n\n    /**\n     * External parse that check for a cache hit first\n     *\n     * @param {String} path\n     * @return {Array|undefined}\n     */\n\n    function parsePath(path) {\n        var hit = pathCache.get(path);\n        if (!hit) {\n            hit = parse(path);\n            if (hit) {\n                pathCache.put(path, hit);\n            }\n        }\n        return hit;\n    }\n\n    /**\n     * Get from an object from a path string\n     *\n     * @param {Object} obj\n     * @param {String} path\n     */\n\n    function getPath(obj, path) {\n        return parseExpression(path).get(obj);\n    }\n\n    /**\n     * Warn against setting non-existent root path on a vm.\n     */\n\n    var warnNonExistent;\n    if ('development' !== 'production') {\n        warnNonExistent = function (path, vm) {\n            warn('You are setting a non-existent path \"' + path.raw + '\" ' + 'on a vm instance. Consider pre-initializing the property ' + 'with the \"data\" option for more reliable reactivity ' + 'and better performance.', vm);\n        };\n    }\n\n    /**\n     * Set on an object from a path\n     *\n     * @param {Object} obj\n     * @param {String | Array} path\n     * @param {*} val\n     */\n\n    function setPath(obj, path, val) {\n        var original = obj;\n        if (typeof path === 'string') {\n            path = parse(path);\n        }\n        if (!path || !isObject(obj)) {\n            return false;\n        }\n        var last, key;\n        for (var i = 0, l = path.length; i < l; i++) {\n            last = obj;\n            key = path[i];\n            if (key.charAt(0) === '*') {\n                key = parseExpression(key.slice(1)).get.call(original, original);\n            }\n            if (i < l - 1) {\n                obj = obj[key];\n                if (!isObject(obj)) {\n                    obj = {};\n                    if ('development' !== 'production' && last._isVue) {\n                        warnNonExistent(path, last);\n                    }\n                    set(last, key, obj);\n                }\n            } else {\n                if (isArray(obj)) {\n                    obj.$set(key, val);\n                } else if (key in obj) {\n                    obj[key] = val;\n                } else {\n                    if ('development' !== 'production' && obj._isVue) {\n                        warnNonExistent(path, obj);\n                    }\n                    set(obj, key, val);\n                }\n            }\n        }\n        return true;\n    }\n\n    var path = Object.freeze({\n        parsePath: parsePath,\n        getPath: getPath,\n        setPath: setPath\n    });\n\n    var expressionCache = new Cache(1000);\n\n    var allowedKeywords = 'Math,Date,this,true,false,null,undefined,Infinity,NaN,' + 'isNaN,isFinite,decodeURI,decodeURIComponent,encodeURI,' + 'encodeURIComponent,parseInt,parseFloat';\n    var allowedKeywordsRE = new RegExp('^(' + allowedKeywords.replace(/,/g, '\\\\b|') + '\\\\b)');\n\n    // keywords that don't make sense inside expressions\n    var improperKeywords = 'break,case,class,catch,const,continue,debugger,default,' + 'delete,do,else,export,extends,finally,for,function,if,' + 'import,in,instanceof,let,return,super,switch,throw,try,' + 'var,while,with,yield,enum,await,implements,package,' + 'protected,static,interface,private,public';\n    var improperKeywordsRE = new RegExp('^(' + improperKeywords.replace(/,/g, '\\\\b|') + '\\\\b)');\n\n    var wsRE = /\\s/g;\n    var newlineRE = /\\n/g;\n    var saveRE = /[\\{,]\\s*[\\w\\$_]+\\s*:|('(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`)|new |typeof |void /g;\n    var restoreRE = /\"(\\d+)\"/g;\n    var pathTestRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['.*?'\\]|\\[\".*?\"\\]|\\[\\d+\\]|\\[[A-Za-z_$][\\w$]*\\])*$/;\n    var identRE = /[^\\w$\\.](?:[A-Za-z_$][\\w$]*)/g;\n    var booleanLiteralRE = /^(?:true|false)$/;\n\n    /**\n     * Save / Rewrite / Restore\n     *\n     * When rewriting paths found in an expression, it is\n     * possible for the same letter sequences to be found in\n     * strings and Object literal property keys. Therefore we\n     * remove and store these parts in a temporary array, and\n     * restore them after the path rewrite.\n     */\n\n    var saved = [];\n\n    /**\n     * Save replacer\n     *\n     * The save regex can match two possible cases:\n     * 1. An opening object literal\n     * 2. A string\n     * If matched as a plain string, we need to escape its\n     * newlines, since the string needs to be preserved when\n     * generating the function body.\n     *\n     * @param {String} str\n     * @param {String} isString - str if matched as a string\n     * @return {String} - placeholder with index\n     */\n\n    function save(str, isString) {\n        var i = saved.length;\n        saved[i] = isString ? str.replace(newlineRE, '\\\\n') : str;\n        return '\"' + i + '\"';\n    }\n\n    /**\n     * Path rewrite replacer\n     *\n     * @param {String} raw\n     * @return {String}\n     */\n\n    function rewrite(raw) {\n        var c = raw.charAt(0);\n        var path = raw.slice(1);\n        if (allowedKeywordsRE.test(path)) {\n            return raw;\n        } else {\n            path = path.indexOf('\"') > -1 ? path.replace(restoreRE, restore) : path;\n            return c + 'scope.' + path;\n        }\n    }\n\n    /**\n     * Restore replacer\n     *\n     * @param {String} str\n     * @param {String} i - matched save index\n     * @return {String}\n     */\n\n    function restore(str, i) {\n        return saved[i];\n    }\n\n    /**\n     * Rewrite an expression, prefixing all path accessors with\n     * `scope.` and generate getter/setter functions.\n     *\n     * @param {String} exp\n     * @return {Function}\n     */\n\n    function compileGetter(exp) {\n        if (improperKeywordsRE.test(exp)) {\n            'development' !== 'production' && warn('Avoid using reserved keywords in expression: ' + exp);\n        }\n        // reset state\n        saved.length = 0;\n        // save strings and object literal keys\n        var body = exp.replace(saveRE, save).replace(wsRE, '');\n        // rewrite all paths\n        // pad 1 space here becaue the regex matches 1 extra char\n        body = (' ' + body).replace(identRE, rewrite).replace(restoreRE, restore);\n        return makeGetterFn(body);\n    }\n\n    /**\n     * Build a getter function. Requires eval.\n     *\n     * We isolate the try/catch so it doesn't affect the\n     * optimization of the parse function when it is not called.\n     *\n     * @param {String} body\n     * @return {Function|undefined}\n     */\n\n    function makeGetterFn(body) {\n        try {\n            /* eslint-disable no-new-func */\n            return new Function('scope', 'return ' + body + ';');\n            /* eslint-enable no-new-func */\n        } catch (e) {\n            'development' !== 'production' && warn('Invalid expression. ' + 'Generated function body: ' + body);\n        }\n    }\n\n    /**\n     * Compile a setter function for the expression.\n     *\n     * @param {String} exp\n     * @return {Function|undefined}\n     */\n\n    function compileSetter(exp) {\n        var path = parsePath(exp);\n        if (path) {\n            return function (scope, val) {\n                setPath(scope, path, val);\n            };\n        } else {\n            'development' !== 'production' && warn('Invalid setter expression: ' + exp);\n        }\n    }\n\n    /**\n     * Parse an expression into re-written getter/setters.\n     *\n     * @param {String} exp\n     * @param {Boolean} needSet\n     * @return {Function}\n     */\n\n    function parseExpression(exp, needSet) {\n        exp = exp.trim();\n        // try cache\n        var hit = expressionCache.get(exp);\n        if (hit) {\n            if (needSet && !hit.set) {\n                hit.set = compileSetter(hit.exp);\n            }\n            return hit;\n        }\n        var res = { exp: exp };\n        res.get = isSimplePath(exp) && exp.indexOf('[') < 0\n            // optimized super simple getter\n            ? makeGetterFn('scope.' + exp)\n            // dynamic getter\n            : compileGetter(exp);\n        if (needSet) {\n            res.set = compileSetter(exp);\n        }\n        expressionCache.put(exp, res);\n        return res;\n    }\n\n    /**\n     * Check if an expression is a simple path.\n     *\n     * @param {String} exp\n     * @return {Boolean}\n     */\n\n    function isSimplePath(exp) {\n        return pathTestRE.test(exp) &&\n            // don't treat true/false as paths\n            !booleanLiteralRE.test(exp) &&\n            // Math constants e.g. Math.PI, Math.E etc.\n            exp.slice(0, 5) !== 'Math.';\n    }\n\n    var expression = Object.freeze({\n        parseExpression: parseExpression,\n        isSimplePath: isSimplePath\n    });\n\n    // we have two separate queues: one for directive updates\n    // and one for user watcher registered via $watch().\n    // we want to guarantee directive updates to be called\n    // before user watchers so that when user watchers are\n    // triggered, the DOM would have already been in updated\n    // state.\n\n    var queue = [];\n    var userQueue = [];\n    var has = {};\n    var circular = {};\n    var waiting = false;\n\n    /**\n     * Reset the batcher's state.\n     */\n\n    function resetBatcherState() {\n        queue.length = 0;\n        userQueue.length = 0;\n        has = {};\n        circular = {};\n        waiting = false;\n    }\n\n    /**\n     * Flush both queues and run the watchers.\n     */\n\n    function flushBatcherQueue() {\n        var _again = true;\n\n        _function: while (_again) {\n            _again = false;\n\n            runBatcherQueue(queue);\n            runBatcherQueue(userQueue);\n            // user watchers triggered more watchers,\n            // keep flushing until it depletes\n            if (queue.length) {\n                _again = true;\n                continue _function;\n            }\n            // dev tool hook\n            /* istanbul ignore if */\n            if (devtools && config.devtools) {\n                devtools.emit('flush');\n            }\n            resetBatcherState();\n        }\n    }\n\n    /**\n     * Run the watchers in a single queue.\n     *\n     * @param {Array} queue\n     */\n\n    function runBatcherQueue(queue) {\n        // do not cache length because more watchers might be pushed\n        // as we run existing watchers\n        for (var i = 0; i < queue.length; i++) {\n            var watcher = queue[i];\n            var id = watcher.id;\n            has[id] = null;\n            watcher.run();\n            // in dev build, check and stop circular updates.\n            if ('development' !== 'production' && has[id] != null) {\n                circular[id] = (circular[id] || 0) + 1;\n                if (circular[id] > config._maxUpdateCount) {\n                    warn('You may have an infinite update loop for watcher ' + 'with expression \"' + watcher.expression + '\"', watcher.vm);\n                    break;\n                }\n            }\n        }\n        queue.length = 0;\n    }\n\n    /**\n     * Push a watcher into the watcher queue.\n     * Jobs with duplicate IDs will be skipped unless it's\n     * pushed when the queue is being flushed.\n     *\n     * @param {Watcher} watcher\n     *   properties:\n     *   - {Number} id\n     *   - {Function} run\n     */\n\n    function pushWatcher(watcher) {\n        var id = watcher.id;\n        if (has[id] == null) {\n            // push watcher into appropriate queue\n            var q = watcher.user ? userQueue : queue;\n            has[id] = q.length;\n            q.push(watcher);\n            // queue the flush\n            if (!waiting) {\n                waiting = true;\n                nextTick(flushBatcherQueue);\n            }\n        }\n    }\n\n    var uid$2 = 0;\n\n    /**\n     * A watcher parses an expression, collects dependencies,\n     * and fires callback when the expression value changes.\n     * This is used for both the $watch() api and directives.\n     *\n     * @param {Vue} vm\n     * @param {String|Function} expOrFn\n     * @param {Function} cb\n     * @param {Object} options\n     *                 - {Array} filters\n     *                 - {Boolean} twoWay\n     *                 - {Boolean} deep\n     *                 - {Boolean} user\n     *                 - {Boolean} sync\n     *                 - {Boolean} lazy\n     *                 - {Function} [preProcess]\n     *                 - {Function} [postProcess]\n     * @constructor\n     */\n    function Watcher(vm, expOrFn, cb, options) {\n        // mix in options\n        if (options) {\n            extend(this, options);\n        }\n        var isFn = typeof expOrFn === 'function';\n        this.vm = vm;\n        vm._watchers.push(this);\n        this.expression = expOrFn;\n        this.cb = cb;\n        this.id = ++uid$2; // uid for batching\n        this.active = true;\n        this.dirty = this.lazy; // for lazy watchers\n        this.deps = [];\n        this.newDeps = [];\n        this.depIds = new _Set();\n        this.newDepIds = new _Set();\n        this.prevError = null; // for async error stacks\n        // parse expression for getter/setter\n        if (isFn) {\n            this.getter = expOrFn;\n            this.setter = undefined;\n        } else {\n            var res = parseExpression(expOrFn, this.twoWay);\n            this.getter = res.get;\n            this.setter = res.set;\n        }\n        this.value = this.lazy ? undefined : this.get();\n        // state for avoiding false triggers for deep and Array\n        // watchers during vm._digest()\n        this.queued = this.shallow = false;\n    }\n\n    /**\n     * Evaluate the getter, and re-collect dependencies.\n     */\n\n    Watcher.prototype.get = function () {\n        this.beforeGet();\n        var scope = this.scope || this.vm;\n        var value;\n        try {\n            value = this.getter.call(scope, scope);\n        } catch (e) {\n            if ('development' !== 'production' && config.warnExpressionErrors) {\n                warn('Error when evaluating expression ' + '\"' + this.expression + '\": ' + e.toString(), this.vm);\n            }\n        }\n        // \"touch\" every property so they are all tracked as\n        // dependencies for deep watching\n        if (this.deep) {\n            traverse(value);\n        }\n        if (this.preProcess) {\n            value = this.preProcess(value);\n        }\n        if (this.filters) {\n            value = scope._applyFilters(value, null, this.filters, false);\n        }\n        if (this.postProcess) {\n            value = this.postProcess(value);\n        }\n        this.afterGet();\n        return value;\n    };\n\n    /**\n     * Set the corresponding value with the setter.\n     *\n     * @param {*} value\n     */\n\n    Watcher.prototype.set = function (value) {\n        var scope = this.scope || this.vm;\n        if (this.filters) {\n            value = scope._applyFilters(value, this.value, this.filters, true);\n        }\n        try {\n            this.setter.call(scope, scope, value);\n        } catch (e) {\n            if ('development' !== 'production' && config.warnExpressionErrors) {\n                warn('Error when evaluating setter ' + '\"' + this.expression + '\": ' + e.toString(), this.vm);\n            }\n        }\n        // two-way sync for v-for alias\n        var forContext = scope.$forContext;\n        if (forContext && forContext.alias === this.expression) {\n            if (forContext.filters) {\n                'development' !== 'production' && warn('It seems you are using two-way binding on ' + 'a v-for alias (' + this.expression + '), and the ' + 'v-for has filters. This will not work properly. ' + 'Either remove the filters or use an array of ' + 'objects and bind to object properties instead.', this.vm);\n                return;\n            }\n            forContext._withLock(function () {\n                if (scope.$key) {\n                    // original is an object\n                    forContext.rawValue[scope.$key] = value;\n                } else {\n                    forContext.rawValue.$set(scope.$index, value);\n                }\n            });\n        }\n    };\n\n    /**\n     * Prepare for dependency collection.\n     */\n\n    Watcher.prototype.beforeGet = function () {\n        Dep.target = this;\n    };\n\n    /**\n     * Add a dependency to this directive.\n     *\n     * @param {Dep} dep\n     */\n\n    Watcher.prototype.addDep = function (dep) {\n        var id = dep.id;\n        if (!this.newDepIds.has(id)) {\n            this.newDepIds.add(id);\n            this.newDeps.push(dep);\n            if (!this.depIds.has(id)) {\n                dep.addSub(this);\n            }\n        }\n    };\n\n    /**\n     * Clean up for dependency collection.\n     */\n\n    Watcher.prototype.afterGet = function () {\n        Dep.target = null;\n        var i = this.deps.length;\n        while (i--) {\n            var dep = this.deps[i];\n            if (!this.newDepIds.has(dep.id)) {\n                dep.removeSub(this);\n            }\n        }\n        var tmp = this.depIds;\n        this.depIds = this.newDepIds;\n        this.newDepIds = tmp;\n        this.newDepIds.clear();\n        tmp = this.deps;\n        this.deps = this.newDeps;\n        this.newDeps = tmp;\n        this.newDeps.length = 0;\n    };\n\n    /**\n     * Subscriber interface.\n     * Will be called when a dependency changes.\n     *\n     * @param {Boolean} shallow\n     */\n\n    Watcher.prototype.update = function (shallow) {\n        if (this.lazy) {\n            this.dirty = true;\n        } else if (this.sync || !config.async) {\n            this.run();\n        } else {\n            // if queued, only overwrite shallow with non-shallow,\n            // but not the other way around.\n            this.shallow = this.queued ? shallow ? this.shallow : false : !!shallow;\n            this.queued = true;\n            // record before-push error stack in debug mode\n            /* istanbul ignore if */\n            if ('development' !== 'production' && config.debug) {\n                this.prevError = new Error('[vue] async stack trace');\n            }\n            pushWatcher(this);\n        }\n    };\n\n    /**\n     * Batcher job interface.\n     * Will be called by the batcher.\n     */\n\n    Watcher.prototype.run = function () {\n        if (this.active) {\n            var value = this.get();\n            if (value !== this.value ||\n                // Deep watchers and watchers on Object/Arrays should fire even\n                // when the value is the same, because the value may\n                // have mutated; but only do so if this is a\n                // non-shallow update (caused by a vm digest).\n                (isObject(value) || this.deep) && !this.shallow) {\n                // set new value\n                var oldValue = this.value;\n                this.value = value;\n                // in debug + async mode, when a watcher callbacks\n                // throws, we also throw the saved before-push error\n                // so the full cross-tick stack trace is available.\n                var prevError = this.prevError;\n                /* istanbul ignore if */\n                if ('development' !== 'production' && config.debug && prevError) {\n                    this.prevError = null;\n                    try {\n                        this.cb.call(this.vm, value, oldValue);\n                    } catch (e) {\n                        nextTick(function () {\n                            throw prevError;\n                        }, 0);\n                        throw e;\n                    }\n                } else {\n                    this.cb.call(this.vm, value, oldValue);\n                }\n            }\n            this.queued = this.shallow = false;\n        }\n    };\n\n    /**\n     * Evaluate the value of the watcher.\n     * This only gets called for lazy watchers.\n     */\n\n    Watcher.prototype.evaluate = function () {\n        // avoid overwriting another watcher that is being\n        // collected.\n        var current = Dep.target;\n        this.value = this.get();\n        this.dirty = false;\n        Dep.target = current;\n    };\n\n    /**\n     * Depend on all deps collected by this watcher.\n     */\n\n    Watcher.prototype.depend = function () {\n        var i = this.deps.length;\n        while (i--) {\n            this.deps[i].depend();\n        }\n    };\n\n    /**\n     * Remove self from all dependencies' subcriber list.\n     */\n\n    Watcher.prototype.teardown = function () {\n        if (this.active) {\n            // remove self from vm's watcher list\n            // this is a somewhat expensive operation so we skip it\n            // if the vm is being destroyed or is performing a v-for\n            // re-render (the watcher list is then filtered by v-for).\n            if (!this.vm._isBeingDestroyed && !this.vm._vForRemoving) {\n                this.vm._watchers.$remove(this);\n            }\n            var i = this.deps.length;\n            while (i--) {\n                this.deps[i].removeSub(this);\n            }\n            this.active = false;\n            this.vm = this.cb = this.value = null;\n        }\n    };\n\n    /**\n     * Recrusively traverse an object to evoke all converted\n     * getters, so that every nested property inside the object\n     * is collected as a \"deep\" dependency.\n     *\n     * @param {*} val\n     */\n\n    var seenObjects = new _Set();\n    function traverse(val, seen) {\n        var i = undefined,\n            keys = undefined;\n        if (!seen) {\n            seen = seenObjects;\n            seen.clear();\n        }\n        var isA = isArray(val);\n        var isO = isObject(val);\n        if (isA || isO) {\n            if (val.__ob__) {\n                var depId = val.__ob__.dep.id;\n                if (seen.has(depId)) {\n                    return;\n                } else {\n                    seen.add(depId);\n                }\n            }\n            if (isA) {\n                i = val.length;\n                while (i--) traverse(val[i], seen);\n            } else if (isO) {\n                keys = Object.keys(val);\n                i = keys.length;\n                while (i--) traverse(val[keys[i]], seen);\n            }\n        }\n    }\n\n    var text$1 = {\n\n        bind: function bind() {\n            this.attr = this.el.nodeType === 3 ? 'data' : 'textContent';\n        },\n\n        update: function update(value) {\n            this.el[this.attr] = _toString(value);\n        }\n    };\n\n    var templateCache = new Cache(1000);\n    var idSelectorCache = new Cache(1000);\n\n    var map = {\n        efault: [0, '', ''],\n        legend: [1, '<fieldset>', '</fieldset>'],\n        tr: [2, '<table><tbody>', '</tbody></table>'],\n        col: [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>']\n    };\n\n    map.td = map.th = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\n\n    map.option = map.optgroup = [1, '<select multiple=\"multiple\">', '</select>'];\n\n    map.thead = map.tbody = map.colgroup = map.caption = map.tfoot = [1, '<table>', '</table>'];\n\n    map.g = map.defs = map.symbol = map.use = map.image = map.text = map.circle = map.ellipse = map.line = map.path = map.polygon = map.polyline = map.rect = [1, '<svg ' + 'xmlns=\"http://www.w3.org/2000/svg\" ' + 'xmlns:xlink=\"http://www.w3.org/1999/xlink\" ' + 'xmlns:ev=\"http://www.w3.org/2001/xml-events\"' + 'version=\"1.1\">', '</svg>'];\n\n    /**\n     * Check if a node is a supported template node with a\n     * DocumentFragment content.\n     *\n     * @param {Node} node\n     * @return {Boolean}\n     */\n\n    function isRealTemplate(node) {\n        return isTemplate(node) && isFragment(node.content);\n    }\n\n    var tagRE$1 = /<([\\w:-]+)/;\n    var entityRE = /&#?\\w+?;/;\n\n    /**\n     * Convert a string template to a DocumentFragment.\n     * Determines correct wrapping by tag types. Wrapping\n     * strategy found in jQuery & component/domify.\n     *\n     * @param {String} templateString\n     * @param {Boolean} raw\n     * @return {DocumentFragment}\n     */\n\n    function stringToFragment(templateString, raw) {\n        // try a cache hit first\n        var cacheKey = raw ? templateString : templateString.trim();\n        var hit = templateCache.get(cacheKey);\n        if (hit) {\n            return hit;\n        }\n\n        var frag = document.createDocumentFragment();\n        var tagMatch = templateString.match(tagRE$1);\n        var entityMatch = entityRE.test(templateString);\n\n        if (!tagMatch && !entityMatch) {\n            // text only, return a single text node.\n            frag.appendChild(document.createTextNode(templateString));\n        } else {\n            var tag = tagMatch && tagMatch[1];\n            var wrap = map[tag] || map.efault;\n            var depth = wrap[0];\n            var prefix = wrap[1];\n            var suffix = wrap[2];\n            var node = document.createElement('div');\n\n            node.innerHTML = prefix + templateString + suffix;\n            while (depth--) {\n                node = node.lastChild;\n            }\n\n            var child;\n            /* eslint-disable no-cond-assign */\n            while (child = node.firstChild) {\n                /* eslint-enable no-cond-assign */\n                frag.appendChild(child);\n            }\n        }\n        if (!raw) {\n            trimNode(frag);\n        }\n        templateCache.put(cacheKey, frag);\n        return frag;\n    }\n\n    /**\n     * Convert a template node to a DocumentFragment.\n     *\n     * @param {Node} node\n     * @return {DocumentFragment}\n     */\n\n    function nodeToFragment(node) {\n        // if its a template tag and the browser supports it,\n        // its content is already a document fragment. However, iOS Safari has\n        // bug when using directly cloned template content with touch\n        // events and can cause crashes when the nodes are removed from DOM, so we\n        // have to treat template elements as string templates. (#2805)\n        /* istanbul ignore if */\n        if (isRealTemplate(node)) {\n            return stringToFragment(node.innerHTML);\n        }\n        // script template\n        if (node.tagName === 'SCRIPT') {\n            return stringToFragment(node.textContent);\n        }\n        // normal node, clone it to avoid mutating the original\n        var clonedNode = cloneNode(node);\n        var frag = document.createDocumentFragment();\n        var child;\n        /* eslint-disable no-cond-assign */\n        while (child = clonedNode.firstChild) {\n            /* eslint-enable no-cond-assign */\n            frag.appendChild(child);\n        }\n        trimNode(frag);\n        return frag;\n    }\n\n    // Test for the presence of the Safari template cloning bug\n    // https://bugs.webkit.org/showug.cgi?id=137755\n    var hasBrokenTemplate = (function () {\n        /* istanbul ignore else */\n        if (inBrowser) {\n            var a = document.createElement('div');\n            a.innerHTML = '<template>1</template>';\n            return !a.cloneNode(true).firstChild.innerHTML;\n        } else {\n            return false;\n        }\n    })();\n\n    // Test for IE10/11 textarea placeholder clone bug\n    var hasTextareaCloneBug = (function () {\n        /* istanbul ignore else */\n        if (inBrowser) {\n            var t = document.createElement('textarea');\n            t.placeholder = 't';\n            return t.cloneNode(true).value === 't';\n        } else {\n            return false;\n        }\n    })();\n\n    /**\n     * 1. Deal with Safari cloning nested <template> bug by\n     *    manually cloning all template instances.\n     * 2. Deal with IE10/11 textarea placeholder bug by setting\n     *    the correct value after cloning.\n     *\n     * @param {Element|DocumentFragment} node\n     * @return {Element|DocumentFragment}\n     */\n\n    function cloneNode(node) {\n        /* istanbul ignore if */\n        if (!node.querySelectorAll) {\n            return node.cloneNode();\n        }\n        var res = node.cloneNode(true);\n        var i, original, cloned;\n        /* istanbul ignore if */\n        if (hasBrokenTemplate) {\n            var tempClone = res;\n            if (isRealTemplate(node)) {\n                node = node.content;\n                tempClone = res.content;\n            }\n            original = node.querySelectorAll('template');\n            if (original.length) {\n                cloned = tempClone.querySelectorAll('template');\n                i = cloned.length;\n                while (i--) {\n                    cloned[i].parentNode.replaceChild(cloneNode(original[i]), cloned[i]);\n                }\n            }\n        }\n        /* istanbul ignore if */\n        if (hasTextareaCloneBug) {\n            if (node.tagName === 'TEXTAREA') {\n                res.value = node.value;\n            } else {\n                original = node.querySelectorAll('textarea');\n                if (original.length) {\n                    cloned = res.querySelectorAll('textarea');\n                    i = cloned.length;\n                    while (i--) {\n                        cloned[i].value = original[i].value;\n                    }\n                }\n            }\n        }\n        return res;\n    }\n\n    /**\n     * Process the template option and normalizes it into a\n     * a DocumentFragment that can be used as a partial or a\n     * instance template.\n     *\n     * @param {*} template\n     *        Possible values include:\n     *        - DocumentFragment object\n     *        - Node object of type Template\n     *        - id selector: '#some-template-id'\n     *        - template string: '<div><span>{{msg}}</span></div>'\n     * @param {Boolean} shouldClone\n     * @param {Boolean} raw\n     *        inline HTML interpolation. Do not check for id\n     *        selector and keep whitespace in the string.\n     * @return {DocumentFragment|undefined}\n     */\n\n    function parseTemplate(template, shouldClone, raw) {\n        var node, frag;\n\n        // if the template is already a document fragment,\n        // do nothing\n        if (isFragment(template)) {\n            trimNode(template);\n            return shouldClone ? cloneNode(template) : template;\n        }\n\n        if (typeof template === 'string') {\n            // id selector\n            if (!raw && template.charAt(0) === '#') {\n                // id selector can be cached too\n                frag = idSelectorCache.get(template);\n                if (!frag) {\n                    node = document.getElementById(template.slice(1));\n                    if (node) {\n                        frag = nodeToFragment(node);\n                        // save selector to cache\n                        idSelectorCache.put(template, frag);\n                    }\n                }\n            } else {\n                // normal string template\n                frag = stringToFragment(template, raw);\n            }\n        } else if (template.nodeType) {\n            // a direct node\n            frag = nodeToFragment(template);\n        }\n\n        return frag && shouldClone ? cloneNode(frag) : frag;\n    }\n\n    var template = Object.freeze({\n        cloneNode: cloneNode,\n        parseTemplate: parseTemplate\n    });\n\n    var html = {\n\n        bind: function bind() {\n            // a comment node means this is a binding for\n            // {{{ inline unescaped html }}}\n            if (this.el.nodeType === 8) {\n                // hold nodes\n                this.nodes = [];\n                // replace the placeholder with proper anchor\n                this.anchor = createAnchor('v-html');\n                replace(this.el, this.anchor);\n            }\n        },\n\n        update: function update(value) {\n            value = _toString(value);\n            if (this.nodes) {\n                this.swap(value);\n            } else {\n                this.el.innerHTML = value;\n            }\n        },\n\n        swap: function swap(value) {\n            // remove old nodes\n            var i = this.nodes.length;\n            while (i--) {\n                remove(this.nodes[i]);\n            }\n            // convert new value to a fragment\n            // do not attempt to retrieve from id selector\n            var frag = parseTemplate(value, true, true);\n            // save a reference to these nodes so we can remove later\n            this.nodes = toArray(frag.childNodes);\n            before(frag, this.anchor);\n        }\n    };\n\n    /**\n     * Abstraction for a partially-compiled fragment.\n     * Can optionally compile content with a child scope.\n     *\n     * @param {Function} linker\n     * @param {Vue} vm\n     * @param {DocumentFragment} frag\n     * @param {Vue} [host]\n     * @param {Object} [scope]\n     * @param {Fragment} [parentFrag]\n     */\n    function Fragment(linker, vm, frag, host, scope, parentFrag) {\n        this.children = [];\n        this.childFrags = [];\n        this.vm = vm;\n        this.scope = scope;\n        this.inserted = false;\n        this.parentFrag = parentFrag;\n        if (parentFrag) {\n            parentFrag.childFrags.push(this);\n        }\n        this.unlink = linker(vm, frag, host, scope, this);\n        var single = this.single = frag.childNodes.length === 1 &&\n            // do not go single mode if the only node is an anchor\n            !frag.childNodes[0].__v_anchor;\n        if (single) {\n            this.node = frag.childNodes[0];\n            this.before = singleBefore;\n            this.remove = singleRemove;\n        } else {\n            this.node = createAnchor('fragment-start');\n            this.end = createAnchor('fragment-end');\n            this.frag = frag;\n            prepend(this.node, frag);\n            frag.appendChild(this.end);\n            this.before = multiBefore;\n            this.remove = multiRemove;\n        }\n        this.node.__v_frag = this;\n    }\n\n    /**\n     * Call attach/detach for all components contained within\n     * this fragment. Also do so recursively for all child\n     * fragments.\n     *\n     * @param {Function} hook\n     */\n\n    Fragment.prototype.callHook = function (hook) {\n        var i, l;\n        for (i = 0, l = this.childFrags.length; i < l; i++) {\n            this.childFrags[i].callHook(hook);\n        }\n        for (i = 0, l = this.children.length; i < l; i++) {\n            hook(this.children[i]);\n        }\n    };\n\n    /**\n     * Insert fragment before target, single node version\n     *\n     * @param {Node} target\n     * @param {Boolean} withTransition\n     */\n\n    function singleBefore(target, withTransition) {\n        this.inserted = true;\n        var method = withTransition !== false ? beforeWithTransition : before;\n        method(this.node, target, this.vm);\n        if (inDoc(this.node)) {\n            this.callHook(attach);\n        }\n    }\n\n    /**\n     * Remove fragment, single node version\n     */\n\n    function singleRemove() {\n        this.inserted = false;\n        var shouldCallRemove = inDoc(this.node);\n        var self = this;\n        this.beforeRemove();\n        removeWithTransition(this.node, this.vm, function () {\n            if (shouldCallRemove) {\n                self.callHook(detach);\n            }\n            self.destroy();\n        });\n    }\n\n    /**\n     * Insert fragment before target, multi-nodes version\n     *\n     * @param {Node} target\n     * @param {Boolean} withTransition\n     */\n\n    function multiBefore(target, withTransition) {\n        this.inserted = true;\n        var vm = this.vm;\n        var method = withTransition !== false ? beforeWithTransition : before;\n        mapNodeRange(this.node, this.end, function (node) {\n            method(node, target, vm);\n        });\n        if (inDoc(this.node)) {\n            this.callHook(attach);\n        }\n    }\n\n    /**\n     * Remove fragment, multi-nodes version\n     */\n\n    function multiRemove() {\n        this.inserted = false;\n        var self = this;\n        var shouldCallRemove = inDoc(this.node);\n        this.beforeRemove();\n        removeNodeRange(this.node, this.end, this.vm, this.frag, function () {\n            if (shouldCallRemove) {\n                self.callHook(detach);\n            }\n            self.destroy();\n        });\n    }\n\n    /**\n     * Prepare the fragment for removal.\n     */\n\n    Fragment.prototype.beforeRemove = function () {\n        var i, l;\n        for (i = 0, l = this.childFrags.length; i < l; i++) {\n            // call the same method recursively on child\n            // fragments, depth-first\n            this.childFrags[i].beforeRemove(false);\n        }\n        for (i = 0, l = this.children.length; i < l; i++) {\n            // Call destroy for all contained instances,\n            // with remove:false and defer:true.\n            // Defer is necessary because we need to\n            // keep the children to call detach hooks\n            // on them.\n            this.children[i].$destroy(false, true);\n        }\n        var dirs = this.unlink.dirs;\n        for (i = 0, l = dirs.length; i < l; i++) {\n            // disable the watchers on all the directives\n            // so that the rendered content stays the same\n            // during removal.\n            dirs[i]._watcher && dirs[i]._watcher.teardown();\n        }\n    };\n\n    /**\n     * Destroy the fragment.\n     */\n\n    Fragment.prototype.destroy = function () {\n        if (this.parentFrag) {\n            this.parentFrag.childFrags.$remove(this);\n        }\n        this.node.__v_frag = null;\n        this.unlink();\n    };\n\n    /**\n     * Call attach hook for a Vue instance.\n     *\n     * @param {Vue} child\n     */\n\n    function attach(child) {\n        if (!child._isAttached && inDoc(child.$el)) {\n            child._callHook('attached');\n        }\n    }\n\n    /**\n     * Call detach hook for a Vue instance.\n     *\n     * @param {Vue} child\n     */\n\n    function detach(child) {\n        if (child._isAttached && !inDoc(child.$el)) {\n            child._callHook('detached');\n        }\n    }\n\n    var linkerCache = new Cache(5000);\n\n    /**\n     * A factory that can be used to create instances of a\n     * fragment. Caches the compiled linker if possible.\n     *\n     * @param {Vue} vm\n     * @param {Element|String} el\n     */\n    function FragmentFactory(vm, el) {\n        this.vm = vm;\n        var template;\n        var isString = typeof el === 'string';\n        if (isString || isTemplate(el) && !el.hasAttribute('v-if')) {\n            template = parseTemplate(el, true);\n        } else {\n            template = document.createDocumentFragment();\n            template.appendChild(el);\n        }\n        this.template = template;\n        // linker can be cached, but only for components\n        var linker;\n        var cid = vm.constructor.cid;\n        if (cid > 0) {\n            var cacheId = cid + (isString ? el : getOuterHTML(el));\n            linker = linkerCache.get(cacheId);\n            if (!linker) {\n                linker = compile(template, vm.$options, true);\n                linkerCache.put(cacheId, linker);\n            }\n        } else {\n            linker = compile(template, vm.$options, true);\n        }\n        this.linker = linker;\n    }\n\n    /**\n     * Create a fragment instance with given host and scope.\n     *\n     * @param {Vue} host\n     * @param {Object} scope\n     * @param {Fragment} parentFrag\n     */\n\n    FragmentFactory.prototype.create = function (host, scope, parentFrag) {\n        var frag = cloneNode(this.template);\n        return new Fragment(this.linker, this.vm, frag, host, scope, parentFrag);\n    };\n\n    var ON = 700;\n    var MODEL = 800;\n    var BIND = 850;\n    var TRANSITION = 1100;\n    var EL = 1500;\n    var COMPONENT = 1500;\n    var PARTIAL = 1750;\n    var IF = 2100;\n    var FOR = 2200;\n    var SLOT = 2300;\n\n    var uid$3 = 0;\n\n    var vFor = {\n\n        priority: FOR,\n        terminal: true,\n\n        params: ['track-by', 'stagger', 'enter-stagger', 'leave-stagger'],\n\n        bind: function bind() {\n            // support \"item in/of items\" syntax\n            var inMatch = this.expression.match(/(.*) (?:in|of) (.*)/);\n            if (inMatch) {\n                var itMatch = inMatch[1].match(/\\((.*),(.*)\\)/);\n                if (itMatch) {\n                    this.iterator = itMatch[1].trim();\n                    this.alias = itMatch[2].trim();\n                } else {\n                    this.alias = inMatch[1].trim();\n                }\n                this.expression = inMatch[2];\n            }\n\n            if (!this.alias) {\n                'development' !== 'production' && warn('Invalid v-for expression \"' + this.descriptor.raw + '\": ' + 'alias is required.', this.vm);\n                return;\n            }\n\n            // uid as a cache identifier\n            this.id = '__v-for__' + ++uid$3;\n\n            // check if this is an option list,\n            // so that we know if we need to update the <select>'s\n            // v-model when the option list has changed.\n            // because v-model has a lower priority than v-for,\n            // the v-model is not bound here yet, so we have to\n            // retrive it in the actual updateModel() function.\n            var tag = this.el.tagName;\n            this.isOption = (tag === 'OPTION' || tag === 'OPTGROUP') && this.el.parentNode.tagName === 'SELECT';\n\n            // setup anchor nodes\n            this.start = createAnchor('v-for-start');\n            this.end = createAnchor('v-for-end');\n            replace(this.el, this.end);\n            before(this.start, this.end);\n\n            // cache\n            this.cache = Object.create(null);\n\n            // fragment factory\n            this.factory = new FragmentFactory(this.vm, this.el);\n        },\n\n        update: function update(data) {\n            this.diff(data);\n            this.updateRef();\n            this.updateModel();\n        },\n\n        /**\n         * Diff, based on new data and old data, determine the\n         * minimum amount of DOM manipulations needed to make the\n         * DOM reflect the new data Array.\n         *\n         * The algorithm diffs the new data Array by storing a\n         * hidden reference to an owner vm instance on previously\n         * seen data. This allows us to achieve O(n) which is\n         * better than a levenshtein distance based algorithm,\n         * which is O(m * n).\n         *\n         * @param {Array} data\n         */\n\n        diff: function diff(data) {\n            // check if the Array was converted from an Object\n            var item = data[0];\n            var convertedFromObject = this.fromObject = isObject(item) && hasOwn(item, '$key') && hasOwn(item, '$value');\n\n            var trackByKey = this.params.trackBy;\n            var oldFrags = this.frags;\n            var frags = this.frags = new Array(data.length);\n            var alias = this.alias;\n            var iterator = this.iterator;\n            var start = this.start;\n            var end = this.end;\n            var inDocument = inDoc(start);\n            var init = !oldFrags;\n            var i, l, frag, key, value, primitive;\n\n            // First pass, go through the new Array and fill up\n            // the new frags array. If a piece of data has a cached\n            // instance for it, we reuse it. Otherwise build a new\n            // instance.\n            for (i = 0, l = data.length; i < l; i++) {\n                item = data[i];\n                key = convertedFromObject ? item.$key : null;\n                value = convertedFromObject ? item.$value : item;\n                primitive = !isObject(value);\n                frag = !init && this.getCachedFrag(value, i, key);\n                if (frag) {\n                    // reusable fragment\n                    frag.reused = true;\n                    // update $index\n                    frag.scope.$index = i;\n                    // update $key\n                    if (key) {\n                        frag.scope.$key = key;\n                    }\n                    // update iterator\n                    if (iterator) {\n                        frag.scope[iterator] = key !== null ? key : i;\n                    }\n                    // update data for track-by, object repeat &\n                    // primitive values.\n                    if (trackByKey || convertedFromObject || primitive) {\n                        withoutConversion(function () {\n                            frag.scope[alias] = value;\n                        });\n                    }\n                } else {\n                    // new isntance\n                    frag = this.create(value, alias, i, key);\n                    frag.fresh = !init;\n                }\n                frags[i] = frag;\n                if (init) {\n                    frag.before(end);\n                }\n            }\n\n            // we're done for the initial render.\n            if (init) {\n                return;\n            }\n\n            // Second pass, go through the old fragments and\n            // destroy those who are not reused (and remove them\n            // from cache)\n            var removalIndex = 0;\n            var totalRemoved = oldFrags.length - frags.length;\n            // when removing a large number of fragments, watcher removal\n            // turns out to be a perf bottleneck, so we batch the watcher\n            // removals into a single filter call!\n            this.vm._vForRemoving = true;\n            for (i = 0, l = oldFrags.length; i < l; i++) {\n                frag = oldFrags[i];\n                if (!frag.reused) {\n                    this.deleteCachedFrag(frag);\n                    this.remove(frag, removalIndex++, totalRemoved, inDocument);\n                }\n            }\n            this.vm._vForRemoving = false;\n            if (removalIndex) {\n                this.vm._watchers = this.vm._watchers.filter(function (w) {\n                    return w.active;\n                });\n            }\n\n            // Final pass, move/insert new fragments into the\n            // right place.\n            var targetPrev, prevEl, currentPrev;\n            var insertionIndex = 0;\n            for (i = 0, l = frags.length; i < l; i++) {\n                frag = frags[i];\n                // this is the frag that we should be after\n                targetPrev = frags[i - 1];\n                prevEl = targetPrev ? targetPrev.staggerCb ? targetPrev.staggerAnchor : targetPrev.end || targetPrev.node : start;\n                if (frag.reused && !frag.staggerCb) {\n                    currentPrev = findPrevFrag(frag, start, this.id);\n                    if (currentPrev !== targetPrev && (!currentPrev ||\n                        // optimization for moving a single item.\n                        // thanks to suggestions by @livoras in #1807\n                        findPrevFrag(currentPrev, start, this.id) !== targetPrev)) {\n                        this.move(frag, prevEl);\n                    }\n                } else {\n                    // new instance, or still in stagger.\n                    // insert with updated stagger index.\n                    this.insert(frag, insertionIndex++, prevEl, inDocument);\n                }\n                frag.reused = frag.fresh = false;\n            }\n        },\n\n        /**\n         * Create a new fragment instance.\n         *\n         * @param {*} value\n         * @param {String} alias\n         * @param {Number} index\n         * @param {String} [key]\n         * @return {Fragment}\n         */\n\n        create: function create(value, alias, index, key) {\n            var host = this._host;\n            // create iteration scope\n            var parentScope = this._scope || this.vm;\n            var scope = Object.create(parentScope);\n            // ref holder for the scope\n            scope.$refs = Object.create(parentScope.$refs);\n            scope.$els = Object.create(parentScope.$els);\n            // make sure point $parent to parent scope\n            scope.$parent = parentScope;\n            // for two-way binding on alias\n            scope.$forContext = this;\n            // define scope properties\n            // important: define the scope alias without forced conversion\n            // so that frozen data structures remain non-reactive.\n            withoutConversion(function () {\n                defineReactive(scope, alias, value);\n            });\n            defineReactive(scope, '$index', index);\n            if (key) {\n                defineReactive(scope, '$key', key);\n            } else if (scope.$key) {\n                // avoid accidental fallback\n                def(scope, '$key', null);\n            }\n            if (this.iterator) {\n                defineReactive(scope, this.iterator, key !== null ? key : index);\n            }\n            var frag = this.factory.create(host, scope, this._frag);\n            frag.forId = this.id;\n            this.cacheFrag(value, frag, index, key);\n            return frag;\n        },\n\n        /**\n         * Update the v-ref on owner vm.\n         */\n\n        updateRef: function updateRef() {\n            var ref = this.descriptor.ref;\n            if (!ref) return;\n            var hash = (this._scope || this.vm).$refs;\n            var refs;\n            if (!this.fromObject) {\n                refs = this.frags.map(findVmFromFrag);\n            } else {\n                refs = {};\n                this.frags.forEach(function (frag) {\n                    refs[frag.scope.$key] = findVmFromFrag(frag);\n                });\n            }\n            hash[ref] = refs;\n        },\n\n        /**\n         * For option lists, update the containing v-model on\n         * parent <select>.\n         */\n\n        updateModel: function updateModel() {\n            if (this.isOption) {\n                var parent = this.start.parentNode;\n                var model = parent && parent.__v_model;\n                if (model) {\n                    model.forceUpdate();\n                }\n            }\n        },\n\n        /**\n         * Insert a fragment. Handles staggering.\n         *\n         * @param {Fragment} frag\n         * @param {Number} index\n         * @param {Node} prevEl\n         * @param {Boolean} inDocument\n         */\n\n        insert: function insert(frag, index, prevEl, inDocument) {\n            if (frag.staggerCb) {\n                frag.staggerCb.cancel();\n                frag.staggerCb = null;\n            }\n            var staggerAmount = this.getStagger(frag, index, null, 'enter');\n            if (inDocument && staggerAmount) {\n                // create an anchor and insert it synchronously,\n                // so that we can resolve the correct order without\n                // worrying about some elements not inserted yet\n                var anchor = frag.staggerAnchor;\n                if (!anchor) {\n                    anchor = frag.staggerAnchor = createAnchor('stagger-anchor');\n                    anchor.__v_frag = frag;\n                }\n                after(anchor, prevEl);\n                var op = frag.staggerCb = cancellable(function () {\n                    frag.staggerCb = null;\n                    frag.before(anchor);\n                    remove(anchor);\n                });\n                setTimeout(op, staggerAmount);\n            } else {\n                var target = prevEl.nextSibling;\n                /* istanbul ignore if */\n                if (!target) {\n                    // reset end anchor position in case the position was messed up\n                    // by an external drag-n-drop library.\n                    after(this.end, prevEl);\n                    target = this.end;\n                }\n                frag.before(target);\n            }\n        },\n\n        /**\n         * Remove a fragment. Handles staggering.\n         *\n         * @param {Fragment} frag\n         * @param {Number} index\n         * @param {Number} total\n         * @param {Boolean} inDocument\n         */\n\n        remove: function remove(frag, index, total, inDocument) {\n            if (frag.staggerCb) {\n                frag.staggerCb.cancel();\n                frag.staggerCb = null;\n                // it's not possible for the same frag to be removed\n                // twice, so if we have a pending stagger callback,\n                // it means this frag is queued for enter but removed\n                // before its transition started. Since it is already\n                // destroyed, we can just leave it in detached state.\n                return;\n            }\n            var staggerAmount = this.getStagger(frag, index, total, 'leave');\n            if (inDocument && staggerAmount) {\n                var op = frag.staggerCb = cancellable(function () {\n                    frag.staggerCb = null;\n                    frag.remove();\n                });\n                setTimeout(op, staggerAmount);\n            } else {\n                frag.remove();\n            }\n        },\n\n        /**\n         * Move a fragment to a new position.\n         * Force no transition.\n         *\n         * @param {Fragment} frag\n         * @param {Node} prevEl\n         */\n\n        move: function move(frag, prevEl) {\n            // fix a common issue with Sortable:\n            // if prevEl doesn't have nextSibling, this means it's\n            // been dragged after the end anchor. Just re-position\n            // the end anchor to the end of the container.\n            /* istanbul ignore if */\n            if (!prevEl.nextSibling) {\n                this.end.parentNode.appendChild(this.end);\n            }\n            frag.before(prevEl.nextSibling, false);\n        },\n\n        /**\n         * Cache a fragment using track-by or the object key.\n         *\n         * @param {*} value\n         * @param {Fragment} frag\n         * @param {Number} index\n         * @param {String} [key]\n         */\n\n        cacheFrag: function cacheFrag(value, frag, index, key) {\n            var trackByKey = this.params.trackBy;\n            var cache = this.cache;\n            var primitive = !isObject(value);\n            var id;\n            if (key || trackByKey || primitive) {\n                id = getTrackByKey(index, key, value, trackByKey);\n                if (!cache[id]) {\n                    cache[id] = frag;\n                } else if (trackByKey !== '$index') {\n                    'development' !== 'production' && this.warnDuplicate(value);\n                }\n            } else {\n                id = this.id;\n                if (hasOwn(value, id)) {\n                    if (value[id] === null) {\n                        value[id] = frag;\n                    } else {\n                        'development' !== 'production' && this.warnDuplicate(value);\n                    }\n                } else if (Object.isExtensible(value)) {\n                    def(value, id, frag);\n                } else if ('development' !== 'production') {\n                    warn('Frozen v-for objects cannot be automatically tracked, make sure to ' + 'provide a track-by key.');\n                }\n            }\n            frag.raw = value;\n        },\n\n        /**\n         * Get a cached fragment from the value/index/key\n         *\n         * @param {*} value\n         * @param {Number} index\n         * @param {String} key\n         * @return {Fragment}\n         */\n\n        getCachedFrag: function getCachedFrag(value, index, key) {\n            var trackByKey = this.params.trackBy;\n            var primitive = !isObject(value);\n            var frag;\n            if (key || trackByKey || primitive) {\n                var id = getTrackByKey(index, key, value, trackByKey);\n                frag = this.cache[id];\n            } else {\n                frag = value[this.id];\n            }\n            if (frag && (frag.reused || frag.fresh)) {\n                'development' !== 'production' && this.warnDuplicate(value);\n            }\n            return frag;\n        },\n\n        /**\n         * Delete a fragment from cache.\n         *\n         * @param {Fragment} frag\n         */\n\n        deleteCachedFrag: function deleteCachedFrag(frag) {\n            var value = frag.raw;\n            var trackByKey = this.params.trackBy;\n            var scope = frag.scope;\n            var index = scope.$index;\n            // fix #948: avoid accidentally fall through to\n            // a parent repeater which happens to have $key.\n            var key = hasOwn(scope, '$key') && scope.$key;\n            var primitive = !isObject(value);\n            if (trackByKey || key || primitive) {\n                var id = getTrackByKey(index, key, value, trackByKey);\n                this.cache[id] = null;\n            } else {\n                value[this.id] = null;\n                frag.raw = null;\n            }\n        },\n\n        /**\n         * Get the stagger amount for an insertion/removal.\n         *\n         * @param {Fragment} frag\n         * @param {Number} index\n         * @param {Number} total\n         * @param {String} type\n         */\n\n        getStagger: function getStagger(frag, index, total, type) {\n            type = type + 'Stagger';\n            var trans = frag.node.__v_trans;\n            var hooks = trans && trans.hooks;\n            var hook = hooks && (hooks[type] || hooks.stagger);\n            return hook ? hook.call(frag, index, total) : index * parseInt(this.params[type] || this.params.stagger, 10);\n        },\n\n        /**\n         * Pre-process the value before piping it through the\n         * filters. This is passed to and called by the watcher.\n         */\n\n        _preProcess: function _preProcess(value) {\n            // regardless of type, store the un-filtered raw value.\n            this.rawValue = value;\n            return value;\n        },\n\n        /**\n         * Post-process the value after it has been piped through\n         * the filters. This is passed to and called by the watcher.\n         *\n         * It is necessary for this to be called during the\n         * wathcer's dependency collection phase because we want\n         * the v-for to update when the source Object is mutated.\n         */\n\n        _postProcess: function _postProcess(value) {\n            if (isArray(value)) {\n                return value;\n            } else if (isPlainObject(value)) {\n                // convert plain object to array.\n                var keys = Object.keys(value);\n                var i = keys.length;\n                var res = new Array(i);\n                var key;\n                while (i--) {\n                    key = keys[i];\n                    res[i] = {\n                        $key: key,\n                        $value: value[key]\n                    };\n                }\n                return res;\n            } else {\n                if (typeof value === 'number' && !isNaN(value)) {\n                    value = range(value);\n                }\n                return value || [];\n            }\n        },\n\n        unbind: function unbind() {\n            if (this.descriptor.ref) {\n                (this._scope || this.vm).$refs[this.descriptor.ref] = null;\n            }\n            if (this.frags) {\n                var i = this.frags.length;\n                var frag;\n                while (i--) {\n                    frag = this.frags[i];\n                    this.deleteCachedFrag(frag);\n                    frag.destroy();\n                }\n            }\n        }\n    };\n\n    /**\n     * Helper to find the previous element that is a fragment\n     * anchor. This is necessary because a destroyed frag's\n     * element could still be lingering in the DOM before its\n     * leaving transition finishes, but its inserted flag\n     * should have been set to false so we can skip them.\n     *\n     * If this is a block repeat, we want to make sure we only\n     * return frag that is bound to this v-for. (see #929)\n     *\n     * @param {Fragment} frag\n     * @param {Comment|Text} anchor\n     * @param {String} id\n     * @return {Fragment}\n     */\n\n    function findPrevFrag(frag, anchor, id) {\n        var el = frag.node.previousSibling;\n        /* istanbul ignore if */\n        if (!el) return;\n        frag = el.__v_frag;\n        while ((!frag || frag.forId !== id || !frag.inserted) && el !== anchor) {\n            el = el.previousSibling;\n            /* istanbul ignore if */\n            if (!el) return;\n            frag = el.__v_frag;\n        }\n        return frag;\n    }\n\n    /**\n     * Find a vm from a fragment.\n     *\n     * @param {Fragment} frag\n     * @return {Vue|undefined}\n     */\n\n    function findVmFromFrag(frag) {\n        var node = frag.node;\n        // handle multi-node frag\n        if (frag.end) {\n            while (!node.__vue__ && node !== frag.end && node.nextSibling) {\n                node = node.nextSibling;\n            }\n        }\n        return node.__vue__;\n    }\n\n    /**\n     * Create a range array from given number.\n     *\n     * @param {Number} n\n     * @return {Array}\n     */\n\n    function range(n) {\n        var i = -1;\n        var ret = new Array(Math.floor(n));\n        while (++i < n) {\n            ret[i] = i;\n        }\n        return ret;\n    }\n\n    /**\n     * Get the track by key for an item.\n     *\n     * @param {Number} index\n     * @param {String} key\n     * @param {*} value\n     * @param {String} [trackByKey]\n     */\n\n    function getTrackByKey(index, key, value, trackByKey) {\n        return trackByKey ? trackByKey === '$index' ? index : trackByKey.charAt(0).match(/\\w/) ? getPath(value, trackByKey) : value[trackByKey] : key || value;\n    }\n\n    if ('development' !== 'production') {\n        vFor.warnDuplicate = function (value) {\n            warn('Duplicate value found in v-for=\"' + this.descriptor.raw + '\": ' + JSON.stringify(value) + '. Use track-by=\"$index\" if ' + 'you are expecting duplicate values.', this.vm);\n        };\n    }\n\n    var vIf = {\n\n        priority: IF,\n        terminal: true,\n\n        bind: function bind() {\n            var el = this.el;\n            if (!el.__vue__) {\n                // check else block\n                var next = el.nextElementSibling;\n                if (next && getAttr(next, 'v-else') !== null) {\n                    remove(next);\n                    this.elseEl = next;\n                }\n                // check main block\n                this.anchor = createAnchor('v-if');\n                replace(el, this.anchor);\n            } else {\n                'development' !== 'production' && warn('v-if=\"' + this.expression + '\" cannot be ' + 'used on an instance root element.', this.vm);\n                this.invalid = true;\n            }\n        },\n\n        update: function update(value) {\n            if (this.invalid) return;\n            if (value) {\n                if (!this.frag) {\n                    this.insert();\n                }\n            } else {\n                this.remove();\n            }\n        },\n\n        insert: function insert() {\n            if (this.elseFrag) {\n                this.elseFrag.remove();\n                this.elseFrag = null;\n            }\n            // lazy init factory\n            if (!this.factory) {\n                this.factory = new FragmentFactory(this.vm, this.el);\n            }\n            this.frag = this.factory.create(this._host, this._scope, this._frag);\n            this.frag.before(this.anchor);\n        },\n\n        remove: function remove() {\n            if (this.frag) {\n                this.frag.remove();\n                this.frag = null;\n            }\n            if (this.elseEl && !this.elseFrag) {\n                if (!this.elseFactory) {\n                    this.elseFactory = new FragmentFactory(this.elseEl._context || this.vm, this.elseEl);\n                }\n                this.elseFrag = this.elseFactory.create(this._host, this._scope, this._frag);\n                this.elseFrag.before(this.anchor);\n            }\n        },\n\n        unbind: function unbind() {\n            if (this.frag) {\n                this.frag.destroy();\n            }\n            if (this.elseFrag) {\n                this.elseFrag.destroy();\n            }\n        }\n    };\n\n    var show = {\n\n        bind: function bind() {\n            // check else block\n            var next = this.el.nextElementSibling;\n            if (next && getAttr(next, 'v-else') !== null) {\n                this.elseEl = next;\n            }\n        },\n\n        update: function update(value) {\n            this.apply(this.el, value);\n            if (this.elseEl) {\n                this.apply(this.elseEl, !value);\n            }\n        },\n\n        apply: function apply(el, value) {\n            if (inDoc(el)) {\n                applyTransition(el, value ? 1 : -1, toggle, this.vm);\n            } else {\n                toggle();\n            }\n            function toggle() {\n                el.style.display = value ? '' : 'none';\n            }\n        }\n    };\n\n    var text$2 = {\n\n        bind: function bind() {\n            var self = this;\n            var el = this.el;\n            var isRange = el.type === 'range';\n            var lazy = this.params.lazy;\n            var number = this.params.number;\n            var debounce = this.params.debounce;\n\n            // handle composition events.\n            //   http://blog.evanyou.me/2014/01/03/composition-event/\n            // skip this for Android because it handles composition\n            // events quite differently. Android doesn't trigger\n            // composition events for language input methods e.g.\n            // Chinese, but instead triggers them for spelling\n            // suggestions... (see Discussion/#162)\n            var composing = false;\n            if (!isAndroid && !isRange) {\n                this.on('compositionstart', function () {\n                    composing = true;\n                });\n                this.on('compositionend', function () {\n                    composing = false;\n                    // in IE11 the \"compositionend\" event fires AFTER\n                    // the \"input\" event, so the input handler is blocked\n                    // at the end... have to call it here.\n                    //\n                    // #1327: in lazy mode this is unecessary.\n                    if (!lazy) {\n                        self.listener();\n                    }\n                });\n            }\n\n            // prevent messing with the input when user is typing,\n            // and force update on blur.\n            this.focused = false;\n            if (!isRange && !lazy) {\n                this.on('focus', function () {\n                    self.focused = true;\n                });\n                this.on('blur', function () {\n                    self.focused = false;\n                    // do not sync value after fragment removal (#2017)\n                    if (!self._frag || self._frag.inserted) {\n                        self.rawListener();\n                    }\n                });\n            }\n\n            // Now attach the main listener\n            this.listener = this.rawListener = function () {\n                if (composing || !self._bound) {\n                    return;\n                }\n                var val = number || isRange ? toNumber(el.value) : el.value;\n                self.set(val);\n                // force update on next tick to avoid lock & same value\n                // also only update when user is not typing\n                nextTick(function () {\n                    if (self._bound && !self.focused) {\n                        self.update(self._watcher.value);\n                    }\n                });\n            };\n\n            // apply debounce\n            if (debounce) {\n                this.listener = _debounce(this.listener, debounce);\n            }\n\n            // Support jQuery events, since jQuery.trigger() doesn't\n            // trigger native events in some cases and some plugins\n            // rely on $.trigger()\n            //\n            // We want to make sure if a listener is attached using\n            // jQuery, it is also removed with jQuery, that's why\n            // we do the check for each directive instance and\n            // store that check result on itself. This also allows\n            // easier test coverage control by unsetting the global\n            // jQuery variable in tests.\n            this.hasjQuery = typeof jQuery === 'function';\n            if (this.hasjQuery) {\n                var method = jQuery.fn.on ? 'on' : 'bind';\n                jQuery(el)[method]('change', this.rawListener);\n                if (!lazy) {\n                    jQuery(el)[method]('input', this.listener);\n                }\n            } else {\n                this.on('change', this.rawListener);\n                if (!lazy) {\n                    this.on('input', this.listener);\n                }\n            }\n\n            // IE9 doesn't fire input event on backspace/del/cut\n            if (!lazy && isIE9) {\n                this.on('cut', function () {\n                    nextTick(self.listener);\n                });\n                this.on('keyup', function (e) {\n                    if (e.keyCode === 46 || e.keyCode === 8) {\n                        self.listener();\n                    }\n                });\n            }\n\n            // set initial value if present\n            if (el.hasAttribute('value') || el.tagName === 'TEXTAREA' && el.value.trim()) {\n                this.afterBind = this.listener;\n            }\n        },\n\n        update: function update(value) {\n            this.el.value = _toString(value);\n        },\n\n        unbind: function unbind() {\n            var el = this.el;\n            if (this.hasjQuery) {\n                var method = jQuery.fn.off ? 'off' : 'unbind';\n                jQuery(el)[method]('change', this.listener);\n                jQuery(el)[method]('input', this.listener);\n            }\n        }\n    };\n\n    var radio = {\n\n        bind: function bind() {\n            var self = this;\n            var el = this.el;\n\n            this.getValue = function () {\n                // value overwrite via v-bind:value\n                if (el.hasOwnProperty('_value')) {\n                    return el._value;\n                }\n                var val = el.value;\n                if (self.params.number) {\n                    val = toNumber(val);\n                }\n                return val;\n            };\n\n            this.listener = function () {\n                self.set(self.getValue());\n            };\n            this.on('change', this.listener);\n\n            if (el.hasAttribute('checked')) {\n                this.afterBind = this.listener;\n            }\n        },\n\n        update: function update(value) {\n            this.el.checked = looseEqual(value, this.getValue());\n        }\n    };\n\n    var select = {\n\n        bind: function bind() {\n            var self = this;\n            var el = this.el;\n\n            // method to force update DOM using latest value.\n            this.forceUpdate = function () {\n                if (self._watcher) {\n                    self.update(self._watcher.get());\n                }\n            };\n\n            // check if this is a multiple select\n            var multiple = this.multiple = el.hasAttribute('multiple');\n\n            // attach listener\n            this.listener = function () {\n                var value = getValue(el, multiple);\n                value = self.params.number ? isArray(value) ? value.map(toNumber) : toNumber(value) : value;\n                self.set(value);\n            };\n            this.on('change', this.listener);\n\n            // if has initial value, set afterBind\n            var initValue = getValue(el, multiple, true);\n            if (multiple && initValue.length || !multiple && initValue !== null) {\n                this.afterBind = this.listener;\n            }\n\n            // All major browsers except Firefox resets\n            // selectedIndex with value -1 to 0 when the element\n            // is appended to a new parent, therefore we have to\n            // force a DOM update whenever that happens...\n            this.vm.$on('hook:attached', this.forceUpdate);\n        },\n\n        update: function update(value) {\n            var el = this.el;\n            el.selectedIndex = -1;\n            var multi = this.multiple && isArray(value);\n            var options = el.options;\n            var i = options.length;\n            var op, val;\n            while (i--) {\n                op = options[i];\n                val = op.hasOwnProperty('_value') ? op._value : op.value;\n                /* eslint-disable eqeqeq */\n                op.selected = multi ? indexOf$1(value, val) > -1 : looseEqual(value, val);\n                /* eslint-enable eqeqeq */\n            }\n        },\n\n        unbind: function unbind() {\n            /* istanbul ignore next */\n            this.vm.$off('hook:attached', this.forceUpdate);\n        }\n    };\n\n    /**\n     * Get select value\n     *\n     * @param {SelectElement} el\n     * @param {Boolean} multi\n     * @param {Boolean} init\n     * @return {Array|*}\n     */\n\n    function getValue(el, multi, init) {\n        var res = multi ? [] : null;\n        var op, val, selected;\n        for (var i = 0, l = el.options.length; i < l; i++) {\n            op = el.options[i];\n            selected = init ? op.hasAttribute('selected') : op.selected;\n            if (selected) {\n                val = op.hasOwnProperty('_value') ? op._value : op.value;\n                if (multi) {\n                    res.push(val);\n                } else {\n                    return val;\n                }\n            }\n        }\n        return res;\n    }\n\n    /**\n     * Native Array.indexOf uses strict equal, but in this\n     * case we need to match string/numbers with custom equal.\n     *\n     * @param {Array} arr\n     * @param {*} val\n     */\n\n    function indexOf$1(arr, val) {\n        var i = arr.length;\n        while (i--) {\n            if (looseEqual(arr[i], val)) {\n                return i;\n            }\n        }\n        return -1;\n    }\n\n    var checkbox = {\n\n        bind: function bind() {\n            var self = this;\n            var el = this.el;\n\n            this.getValue = function () {\n                return el.hasOwnProperty('_value') ? el._value : self.params.number ? toNumber(el.value) : el.value;\n            };\n\n            function getBooleanValue() {\n                var val = el.checked;\n                if (val && el.hasOwnProperty('_trueValue')) {\n                    return el._trueValue;\n                }\n                if (!val && el.hasOwnProperty('_falseValue')) {\n                    return el._falseValue;\n                }\n                return val;\n            }\n\n            this.listener = function () {\n                var model = self._watcher.value;\n                if (isArray(model)) {\n                    var val = self.getValue();\n                    if (el.checked) {\n                        if (indexOf(model, val) < 0) {\n                            model.push(val);\n                        }\n                    } else {\n                        model.$remove(val);\n                    }\n                } else {\n                    self.set(getBooleanValue());\n                }\n            };\n\n            this.on('change', this.listener);\n            if (el.hasAttribute('checked')) {\n                this.afterBind = this.listener;\n            }\n        },\n\n        update: function update(value) {\n            var el = this.el;\n            if (isArray(value)) {\n                el.checked = indexOf(value, this.getValue()) > -1;\n            } else {\n                if (el.hasOwnProperty('_trueValue')) {\n                    el.checked = looseEqual(value, el._trueValue);\n                } else {\n                    el.checked = !!value;\n                }\n            }\n        }\n    };\n\n    var handlers = {\n        text: text$2,\n        radio: radio,\n        select: select,\n        checkbox: checkbox\n    };\n\n    var model = {\n\n        priority: MODEL,\n        twoWay: true,\n        handlers: handlers,\n        params: ['lazy', 'number', 'debounce'],\n\n        /**\n         * Possible elements:\n         *   <select>\n         *   <textarea>\n         *   <input type=\"*\">\n         *     - text\n         *     - checkbox\n         *     - radio\n         *     - number\n         */\n\n        bind: function bind() {\n            // friendly warning...\n            this.checkFilters();\n            if (this.hasRead && !this.hasWrite) {\n                'development' !== 'production' && warn('It seems you are using a read-only filter with ' + 'v-model=\"' + this.descriptor.raw + '\". ' + 'You might want to use a two-way filter to ensure correct behavior.', this.vm);\n            }\n            var el = this.el;\n            var tag = el.tagName;\n            var handler;\n            if (tag === 'INPUT') {\n                handler = handlers[el.type] || handlers.text;\n            } else if (tag === 'SELECT') {\n                handler = handlers.select;\n            } else if (tag === 'TEXTAREA') {\n                handler = handlers.text;\n            } else {\n                'development' !== 'production' && warn('v-model does not support element type: ' + tag, this.vm);\n                return;\n            }\n            el.__v_model = this;\n            handler.bind.call(this);\n            this.update = handler.update;\n            this._unbind = handler.unbind;\n        },\n\n        /**\n         * Check read/write filter stats.\n         */\n\n        checkFilters: function checkFilters() {\n            var filters = this.filters;\n            if (!filters) return;\n            var i = filters.length;\n            while (i--) {\n                var filter = resolveAsset(this.vm.$options, 'filters', filters[i].name);\n                if (typeof filter === 'function' || filter.read) {\n                    this.hasRead = true;\n                }\n                if (filter.write) {\n                    this.hasWrite = true;\n                }\n            }\n        },\n\n        unbind: function unbind() {\n            this.el.__v_model = null;\n            this._unbind && this._unbind();\n        }\n    };\n\n    // keyCode aliases\n    var keyCodes = {\n        esc: 27,\n        tab: 9,\n        enter: 13,\n        space: 32,\n        'delete': [8, 46],\n        up: 38,\n        left: 37,\n        right: 39,\n        down: 40\n    };\n\n    function keyFilter(handler, keys) {\n        var codes = keys.map(function (key) {\n            var charCode = key.charCodeAt(0);\n            if (charCode > 47 && charCode < 58) {\n                return parseInt(key, 10);\n            }\n            if (key.length === 1) {\n                charCode = key.toUpperCase().charCodeAt(0);\n                if (charCode > 64 && charCode < 91) {\n                    return charCode;\n                }\n            }\n            return keyCodes[key];\n        });\n        codes = [].concat.apply([], codes);\n        return function keyHandler(e) {\n            if (codes.indexOf(e.keyCode) > -1) {\n                return handler.call(this, e);\n            }\n        };\n    }\n\n    function stopFilter(handler) {\n        return function stopHandler(e) {\n            e.stopPropagation();\n            return handler.call(this, e);\n        };\n    }\n\n    function preventFilter(handler) {\n        return function preventHandler(e) {\n            e.preventDefault();\n            return handler.call(this, e);\n        };\n    }\n\n    function selfFilter(handler) {\n        return function selfHandler(e) {\n            if (e.target === e.currentTarget) {\n                return handler.call(this, e);\n            }\n        };\n    }\n\n    var on$1 = {\n\n        priority: ON,\n        acceptStatement: true,\n        keyCodes: keyCodes,\n\n        bind: function bind() {\n            // deal with iframes\n            if (this.el.tagName === 'IFRAME' && this.arg !== 'load') {\n                var self = this;\n                this.iframeBind = function () {\n                    on(self.el.contentWindow, self.arg, self.handler, self.modifiers.capture);\n                };\n                this.on('load', this.iframeBind);\n            }\n        },\n\n        update: function update(handler) {\n            // stub a noop for v-on with no value,\n            // e.g. @mousedown.prevent\n            if (!this.descriptor.raw) {\n                handler = function () {};\n            }\n\n            if (typeof handler !== 'function') {\n                'development' !== 'production' && warn('v-on:' + this.arg + '=\"' + this.expression + '\" expects a function value, ' + 'got ' + handler, this.vm);\n                return;\n            }\n\n            // apply modifiers\n            if (this.modifiers.stop) {\n                handler = stopFilter(handler);\n            }\n            if (this.modifiers.prevent) {\n                handler = preventFilter(handler);\n            }\n            if (this.modifiers.self) {\n                handler = selfFilter(handler);\n            }\n            // key filter\n            var keys = Object.keys(this.modifiers).filter(function (key) {\n                return key !== 'stop' && key !== 'prevent' && key !== 'self' && key !== 'capture';\n            });\n            if (keys.length) {\n                handler = keyFilter(handler, keys);\n            }\n\n            this.reset();\n            this.handler = handler;\n\n            if (this.iframeBind) {\n                this.iframeBind();\n            } else {\n                on(this.el, this.arg, this.handler, this.modifiers.capture);\n            }\n        },\n\n        reset: function reset() {\n            var el = this.iframeBind ? this.el.contentWindow : this.el;\n            if (this.handler) {\n                off(el, this.arg, this.handler);\n            }\n        },\n\n        unbind: function unbind() {\n            this.reset();\n        }\n    };\n\n    var prefixes = ['-webkit-', '-moz-', '-ms-'];\n    var camelPrefixes = ['Webkit', 'Moz', 'ms'];\n    var importantRE = /!important;?$/;\n    var propCache = Object.create(null);\n\n    var testEl = null;\n\n    var style = {\n\n        deep: true,\n\n        update: function update(value) {\n            if (typeof value === 'string') {\n                this.el.style.cssText = value;\n            } else if (isArray(value)) {\n                this.handleObject(value.reduce(extend, {}));\n            } else {\n                this.handleObject(value || {});\n            }\n        },\n\n        handleObject: function handleObject(value) {\n            // cache object styles so that only changed props\n            // are actually updated.\n            var cache = this.cache || (this.cache = {});\n            var name, val;\n            for (name in cache) {\n                if (!(name in value)) {\n                    this.handleSingle(name, null);\n                    delete cache[name];\n                }\n            }\n            for (name in value) {\n                val = value[name];\n                if (val !== cache[name]) {\n                    cache[name] = val;\n                    this.handleSingle(name, val);\n                }\n            }\n        },\n\n        handleSingle: function handleSingle(prop, value) {\n            prop = normalize(prop);\n            if (!prop) return; // unsupported prop\n            // cast possible numbers/booleans into strings\n            if (value != null) value += '';\n            if (value) {\n                var isImportant = importantRE.test(value) ? 'important' : '';\n                if (isImportant) {\n                    /* istanbul ignore if */\n                    if ('development' !== 'production') {\n                        warn('It\\'s probably a bad idea to use !important with inline rules. ' + 'This feature will be deprecated in a future version of Vue.');\n                    }\n                    value = value.replace(importantRE, '').trim();\n                    this.el.style.setProperty(prop.kebab, value, isImportant);\n                } else {\n                    this.el.style[prop.camel] = value;\n                }\n            } else {\n                this.el.style[prop.camel] = '';\n            }\n        }\n\n    };\n\n    /**\n     * Normalize a CSS property name.\n     * - cache result\n     * - auto prefix\n     * - camelCase -> dash-case\n     *\n     * @param {String} prop\n     * @return {String}\n     */\n\n    function normalize(prop) {\n        if (propCache[prop]) {\n            return propCache[prop];\n        }\n        var res = prefix(prop);\n        propCache[prop] = propCache[res] = res;\n        return res;\n    }\n\n    /**\n     * Auto detect the appropriate prefix for a CSS property.\n     * https://gist.github.com/paulirish/523692\n     *\n     * @param {String} prop\n     * @return {String}\n     */\n\n    function prefix(prop) {\n        prop = hyphenate(prop);\n        var camel = camelize(prop);\n        var upper = camel.charAt(0).toUpperCase() + camel.slice(1);\n        if (!testEl) {\n            testEl = document.createElement('div');\n        }\n        var i = prefixes.length;\n        var prefixed;\n        if (camel !== 'filter' && camel in testEl.style) {\n            return {\n                kebab: prop,\n                camel: camel\n            };\n        }\n        while (i--) {\n            prefixed = camelPrefixes[i] + upper;\n            if (prefixed in testEl.style) {\n                return {\n                    kebab: prefixes[i] + prop,\n                    camel: prefixed\n                };\n            }\n        }\n    }\n\n    // xlink\n    var xlinkNS = 'http://www.w3.org/1999/xlink';\n    var xlinkRE = /^xlink:/;\n\n    // check for attributes that prohibit interpolations\n    var disallowedInterpAttrRE = /^v-|^:|^@|^(?:is|transition|transition-mode|debounce|track-by|stagger|enter-stagger|leave-stagger)$/;\n    // these attributes should also set their corresponding properties\n    // because they only affect the initial state of the element\n    var attrWithPropsRE = /^(?:value|checked|selected|muted)$/;\n    // these attributes expect enumrated values of \"true\" or \"false\"\n    // but are not boolean attributes\n    var enumeratedAttrRE = /^(?:draggable|contenteditable|spellcheck)$/;\n\n    // these attributes should set a hidden property for\n    // binding v-model to object values\n    var modelProps = {\n        value: '_value',\n        'true-value': '_trueValue',\n        'false-value': '_falseValue'\n    };\n\n    var bind$1 = {\n\n        priority: BIND,\n\n        bind: function bind() {\n            var attr = this.arg;\n            var tag = this.el.tagName;\n            // should be deep watch on object mode\n            if (!attr) {\n                this.deep = true;\n            }\n            // handle interpolation bindings\n            var descriptor = this.descriptor;\n            var tokens = descriptor.interp;\n            if (tokens) {\n                // handle interpolations with one-time tokens\n                if (descriptor.hasOneTime) {\n                    this.expression = tokensToExp(tokens, this._scope || this.vm);\n                }\n\n                // only allow binding on native attributes\n                if (disallowedInterpAttrRE.test(attr) || attr === 'name' && (tag === 'PARTIAL' || tag === 'SLOT')) {\n                    'development' !== 'production' && warn(attr + '=\"' + descriptor.raw + '\": ' + 'attribute interpolation is not allowed in Vue.js ' + 'directives and special attributes.', this.vm);\n                    this.el.removeAttribute(attr);\n                    this.invalid = true;\n                }\n\n                /* istanbul ignore if */\n                if ('development' !== 'production') {\n                    var raw = attr + '=\"' + descriptor.raw + '\": ';\n                    // warn src\n                    if (attr === 'src') {\n                        warn(raw + 'interpolation in \"src\" attribute will cause ' + 'a 404 request. Use v-bind:src instead.', this.vm);\n                    }\n\n                    // warn style\n                    if (attr === 'style') {\n                        warn(raw + 'interpolation in \"style\" attribute will cause ' + 'the attribute to be discarded in Internet Explorer. ' + 'Use v-bind:style instead.', this.vm);\n                    }\n                }\n            }\n        },\n\n        update: function update(value) {\n            if (this.invalid) {\n                return;\n            }\n            var attr = this.arg;\n            if (this.arg) {\n                this.handleSingle(attr, value);\n            } else {\n                this.handleObject(value || {});\n            }\n        },\n\n        // share object handler with v-bind:class\n        handleObject: style.handleObject,\n\n        handleSingle: function handleSingle(attr, value) {\n            var el = this.el;\n            var interp = this.descriptor.interp;\n            if (this.modifiers.camel) {\n                attr = camelize(attr);\n            }\n            if (!interp && attrWithPropsRE.test(attr) && attr in el) {\n                var attrValue = attr === 'value' ? value == null // IE9 will set input.value to \"null\" for null...\n                    ? '' : value : value;\n\n                if (el[attr] !== attrValue) {\n                    el[attr] = attrValue;\n                }\n            }\n            // set model props\n            var modelProp = modelProps[attr];\n            if (!interp && modelProp) {\n                el[modelProp] = value;\n                // update v-model if present\n                var model = el.__v_model;\n                if (model) {\n                    model.listener();\n                }\n            }\n            // do not set value attribute for textarea\n            if (attr === 'value' && el.tagName === 'TEXTAREA') {\n                el.removeAttribute(attr);\n                return;\n            }\n            // update attribute\n            if (enumeratedAttrRE.test(attr)) {\n                el.setAttribute(attr, value ? 'true' : 'false');\n            } else if (value != null && value !== false) {\n                if (attr === 'class') {\n                    // handle edge case #1960:\n                    // class interpolation should not overwrite Vue transition class\n                    if (el.__v_trans) {\n                        value += ' ' + el.__v_trans.id + '-transition';\n                    }\n                    setClass(el, value);\n                } else if (xlinkRE.test(attr)) {\n                    el.setAttributeNS(xlinkNS, attr, value === true ? '' : value);\n                } else {\n                    el.setAttribute(attr, value === true ? '' : value);\n                }\n            } else {\n                el.removeAttribute(attr);\n            }\n        }\n    };\n\n    var el = {\n\n        priority: EL,\n\n        bind: function bind() {\n            /* istanbul ignore if */\n            if (!this.arg) {\n                return;\n            }\n            var id = this.id = camelize(this.arg);\n            var refs = (this._scope || this.vm).$els;\n            if (hasOwn(refs, id)) {\n                refs[id] = this.el;\n            } else {\n                defineReactive(refs, id, this.el);\n            }\n        },\n\n        unbind: function unbind() {\n            var refs = (this._scope || this.vm).$els;\n            if (refs[this.id] === this.el) {\n                refs[this.id] = null;\n            }\n        }\n    };\n\n    var ref = {\n        bind: function bind() {\n            'development' !== 'production' && warn('v-ref:' + this.arg + ' must be used on a child ' + 'component. Found on <' + this.el.tagName.toLowerCase() + '>.', this.vm);\n        }\n    };\n\n    var cloak = {\n        bind: function bind() {\n            var el = this.el;\n            this.vm.$once('pre-hook:compiled', function () {\n                el.removeAttribute('v-cloak');\n            });\n        }\n    };\n\n    // must export plain object\n    var directives = {\n        text: text$1,\n        html: html,\n        'for': vFor,\n        'if': vIf,\n        show: show,\n        model: model,\n        on: on$1,\n        bind: bind$1,\n        el: el,\n        ref: ref,\n        cloak: cloak\n    };\n\n    var vClass = {\n\n        deep: true,\n\n        update: function update(value) {\n            if (!value) {\n                this.cleanup();\n            } else if (typeof value === 'string') {\n                this.setClass(value.trim().split(/\\s+/));\n            } else {\n                this.setClass(normalize$1(value));\n            }\n        },\n\n        setClass: function setClass(value) {\n            this.cleanup(value);\n            for (var i = 0, l = value.length; i < l; i++) {\n                var val = value[i];\n                if (val) {\n                    apply(this.el, val, addClass);\n                }\n            }\n            this.prevKeys = value;\n        },\n\n        cleanup: function cleanup(value) {\n            var prevKeys = this.prevKeys;\n            if (!prevKeys) return;\n            var i = prevKeys.length;\n            while (i--) {\n                var key = prevKeys[i];\n                if (!value || value.indexOf(key) < 0) {\n                    apply(this.el, key, removeClass);\n                }\n            }\n        }\n    };\n\n    /**\n     * Normalize objects and arrays (potentially containing objects)\n     * into array of strings.\n     *\n     * @param {Object|Array<String|Object>} value\n     * @return {Array<String>}\n     */\n\n    function normalize$1(value) {\n        var res = [];\n        if (isArray(value)) {\n            for (var i = 0, l = value.length; i < l; i++) {\n                var _key = value[i];\n                if (_key) {\n                    if (typeof _key === 'string') {\n                        res.push(_key);\n                    } else {\n                        for (var k in _key) {\n                            if (_key[k]) res.push(k);\n                        }\n                    }\n                }\n            }\n        } else if (isObject(value)) {\n            for (var key in value) {\n                if (value[key]) res.push(key);\n            }\n        }\n        return res;\n    }\n\n    /**\n     * Add or remove a class/classes on an element\n     *\n     * @param {Element} el\n     * @param {String} key The class name. This may or may not\n     *                     contain a space character, in such a\n     *                     case we'll deal with multiple class\n     *                     names at once.\n     * @param {Function} fn\n     */\n\n    function apply(el, key, fn) {\n        key = key.trim();\n        if (key.indexOf(' ') === -1) {\n            fn(el, key);\n            return;\n        }\n        // The key contains one or more space characters.\n        // Since a class name doesn't accept such characters, we\n        // treat it as multiple classes.\n        var keys = key.split(/\\s+/);\n        for (var i = 0, l = keys.length; i < l; i++) {\n            fn(el, keys[i]);\n        }\n    }\n\n    var component = {\n\n        priority: COMPONENT,\n\n        params: ['keep-alive', 'transition-mode', 'inline-template'],\n\n        /**\n         * Setup. Two possible usages:\n         *\n         * - static:\n         *   <comp> or <div v-component=\"comp\">\n         *\n         * - dynamic:\n         *   <component :is=\"view\">\n         */\n\n        bind: function bind() {\n            if (!this.el.__vue__) {\n                // keep-alive cache\n                this.keepAlive = this.params.keepAlive;\n                if (this.keepAlive) {\n                    this.cache = {};\n                }\n                // check inline-template\n                if (this.params.inlineTemplate) {\n                    // extract inline template as a DocumentFragment\n                    this.inlineTemplate = extractContent(this.el, true);\n                }\n                // component resolution related state\n                this.pendingComponentCb = this.Component = null;\n                // transition related state\n                this.pendingRemovals = 0;\n                this.pendingRemovalCb = null;\n                // create a ref anchor\n                this.anchor = createAnchor('v-component');\n                replace(this.el, this.anchor);\n                // remove is attribute.\n                // this is removed during compilation, but because compilation is\n                // cached, when the component is used elsewhere this attribute\n                // will remain at link time.\n                this.el.removeAttribute('is');\n                this.el.removeAttribute(':is');\n                // remove ref, same as above\n                if (this.descriptor.ref) {\n                    this.el.removeAttribute('v-ref:' + hyphenate(this.descriptor.ref));\n                }\n                // if static, build right now.\n                if (this.literal) {\n                    this.setComponent(this.expression);\n                }\n            } else {\n                'development' !== 'production' && warn('cannot mount component \"' + this.expression + '\" ' + 'on already mounted element: ' + this.el);\n            }\n        },\n\n        /**\n         * Public update, called by the watcher in the dynamic\n         * literal scenario, e.g. <component :is=\"view\">\n         */\n\n        update: function update(value) {\n            if (!this.literal) {\n                this.setComponent(value);\n            }\n        },\n\n        /**\n         * Switch dynamic components. May resolve the component\n         * asynchronously, and perform transition based on\n         * specified transition mode. Accepts a few additional\n         * arguments specifically for vue-router.\n         *\n         * The callback is called when the full transition is\n         * finished.\n         *\n         * @param {String} value\n         * @param {Function} [cb]\n         */\n\n        setComponent: function setComponent(value, cb) {\n            this.invalidatePending();\n            if (!value) {\n                // just remove current\n                this.unbuild(true);\n                this.remove(this.childVM, cb);\n                this.childVM = null;\n            } else {\n                var self = this;\n                this.resolveComponent(value, function () {\n                    self.mountComponent(cb);\n                });\n            }\n        },\n\n        /**\n         * Resolve the component constructor to use when creating\n         * the child vm.\n         *\n         * @param {String|Function} value\n         * @param {Function} cb\n         */\n\n        resolveComponent: function resolveComponent(value, cb) {\n            var self = this;\n            this.pendingComponentCb = cancellable(function (Component) {\n                self.ComponentName = Component.options.name || (typeof value === 'string' ? value : null);\n                self.Component = Component;\n                cb();\n            });\n            this.vm._resolveComponent(value, this.pendingComponentCb);\n        },\n\n        /**\n         * Create a new instance using the current constructor and\n         * replace the existing instance. This method doesn't care\n         * whether the new component and the old one are actually\n         * the same.\n         *\n         * @param {Function} [cb]\n         */\n\n        mountComponent: function mountComponent(cb) {\n            // actual mount\n            this.unbuild(true);\n            var self = this;\n            var activateHooks = this.Component.options.activate;\n            var cached = this.getCached();\n            var newComponent = this.build();\n            if (activateHooks && !cached) {\n                this.waitingFor = newComponent;\n                callActivateHooks(activateHooks, newComponent, function () {\n                    if (self.waitingFor !== newComponent) {\n                        return;\n                    }\n                    self.waitingFor = null;\n                    self.transition(newComponent, cb);\n                });\n            } else {\n                // update ref for kept-alive component\n                if (cached) {\n                    newComponent._updateRef();\n                }\n                this.transition(newComponent, cb);\n            }\n        },\n\n        /**\n         * When the component changes or unbinds before an async\n         * constructor is resolved, we need to invalidate its\n         * pending callback.\n         */\n\n        invalidatePending: function invalidatePending() {\n            if (this.pendingComponentCb) {\n                this.pendingComponentCb.cancel();\n                this.pendingComponentCb = null;\n            }\n        },\n\n        /**\n         * Instantiate/insert a new child vm.\n         * If keep alive and has cached instance, insert that\n         * instance; otherwise build a new one and cache it.\n         *\n         * @param {Object} [extraOptions]\n         * @return {Vue} - the created instance\n         */\n\n        build: function build(extraOptions) {\n            var cached = this.getCached();\n            if (cached) {\n                return cached;\n            }\n            if (this.Component) {\n                // default options\n                var options = {\n                    name: this.ComponentName,\n                    el: cloneNode(this.el),\n                    template: this.inlineTemplate,\n                    // make sure to add the child with correct parent\n                    // if this is a transcluded component, its parent\n                    // should be the transclusion host.\n                    parent: this._host || this.vm,\n                    // if no inline-template, then the compiled\n                    // linker can be cached for better performance.\n                    _linkerCachable: !this.inlineTemplate,\n                    _ref: this.descriptor.ref,\n                    _asComponent: true,\n                    _isRouterView: this._isRouterView,\n                    // if this is a transcluded component, context\n                    // will be the common parent vm of this instance\n                    // and its host.\n                    _context: this.vm,\n                    // if this is inside an inline v-for, the scope\n                    // will be the intermediate scope created for this\n                    // repeat fragment. this is used for linking props\n                    // and container directives.\n                    _scope: this._scope,\n                    // pass in the owner fragment of this component.\n                    // this is necessary so that the fragment can keep\n                    // track of its contained components in order to\n                    // call attach/detach hooks for them.\n                    _frag: this._frag\n                };\n                // extra options\n                // in 1.0.0 this is used by vue-router only\n                /* istanbul ignore if */\n                if (extraOptions) {\n                    extend(options, extraOptions);\n                }\n                var child = new this.Component(options);\n                if (this.keepAlive) {\n                    this.cache[this.Component.cid] = child;\n                }\n                /* istanbul ignore if */\n                if ('development' !== 'production' && this.el.hasAttribute('transition') && child._isFragment) {\n                    warn('Transitions will not work on a fragment instance. ' + 'Template: ' + child.$options.template, child);\n                }\n                return child;\n            }\n        },\n\n        /**\n         * Try to get a cached instance of the current component.\n         *\n         * @return {Vue|undefined}\n         */\n\n        getCached: function getCached() {\n            return this.keepAlive && this.cache[this.Component.cid];\n        },\n\n        /**\n         * Teardown the current child, but defers cleanup so\n         * that we can separate the destroy and removal steps.\n         *\n         * @param {Boolean} defer\n         */\n\n        unbuild: function unbuild(defer) {\n            if (this.waitingFor) {\n                if (!this.keepAlive) {\n                    this.waitingFor.$destroy();\n                }\n                this.waitingFor = null;\n            }\n            var child = this.childVM;\n            if (!child || this.keepAlive) {\n                if (child) {\n                    // remove ref\n                    child._inactive = true;\n                    child._updateRef(true);\n                }\n                return;\n            }\n            // the sole purpose of `deferCleanup` is so that we can\n            // \"deactivate\" the vm right now and perform DOM removal\n            // later.\n            child.$destroy(false, defer);\n        },\n\n        /**\n         * Remove current destroyed child and manually do\n         * the cleanup after removal.\n         *\n         * @param {Function} cb\n         */\n\n        remove: function remove(child, cb) {\n            var keepAlive = this.keepAlive;\n            if (child) {\n                // we may have a component switch when a previous\n                // component is still being transitioned out.\n                // we want to trigger only one lastest insertion cb\n                // when the existing transition finishes. (#1119)\n                this.pendingRemovals++;\n                this.pendingRemovalCb = cb;\n                var self = this;\n                child.$remove(function () {\n                    self.pendingRemovals--;\n                    if (!keepAlive) child._cleanup();\n                    if (!self.pendingRemovals && self.pendingRemovalCb) {\n                        self.pendingRemovalCb();\n                        self.pendingRemovalCb = null;\n                    }\n                });\n            } else if (cb) {\n                cb();\n            }\n        },\n\n        /**\n         * Actually swap the components, depending on the\n         * transition mode. Defaults to simultaneous.\n         *\n         * @param {Vue} target\n         * @param {Function} [cb]\n         */\n\n        transition: function transition(target, cb) {\n            var self = this;\n            var current = this.childVM;\n            // for devtool inspection\n            if (current) current._inactive = true;\n            target._inactive = false;\n            this.childVM = target;\n            switch (self.params.transitionMode) {\n                case 'in-out':\n                    target.$before(self.anchor, function () {\n                        self.remove(current, cb);\n                    });\n                    break;\n                case 'out-in':\n                    self.remove(current, function () {\n                        target.$before(self.anchor, cb);\n                    });\n                    break;\n                default:\n                    self.remove(current);\n                    target.$before(self.anchor, cb);\n            }\n        },\n\n        /**\n         * Unbind.\n         */\n\n        unbind: function unbind() {\n            this.invalidatePending();\n            // Do not defer cleanup when unbinding\n            this.unbuild();\n            // destroy all keep-alive cached instances\n            if (this.cache) {\n                for (var key in this.cache) {\n                    this.cache[key].$destroy();\n                }\n                this.cache = null;\n            }\n        }\n    };\n\n    /**\n     * Call activate hooks in order (asynchronous)\n     *\n     * @param {Array} hooks\n     * @param {Vue} vm\n     * @param {Function} cb\n     */\n\n    function callActivateHooks(hooks, vm, cb) {\n        var total = hooks.length;\n        var called = 0;\n        hooks[0].call(vm, next);\n        function next() {\n            if (++called >= total) {\n                cb();\n            } else {\n                hooks[called].call(vm, next);\n            }\n        }\n    }\n\n    var propBindingModes = config._propBindingModes;\n    var empty = {};\n\n    // regexes\n    var identRE$1 = /^[$_a-zA-Z]+[\\w$]*$/;\n    var settablePathRE = /^[A-Za-z_$][\\w$]*(\\.[A-Za-z_$][\\w$]*|\\[[^\\[\\]]+\\])*$/;\n\n    /**\n     * Compile props on a root element and return\n     * a props link function.\n     *\n     * @param {Element|DocumentFragment} el\n     * @param {Array} propOptions\n     * @param {Vue} vm\n     * @return {Function} propsLinkFn\n     */\n\n    function compileProps(el, propOptions, vm) {\n        var props = [];\n        var names = Object.keys(propOptions);\n        var i = names.length;\n        var options, name, attr, value, path, parsed, prop;\n        while (i--) {\n            name = names[i];\n            options = propOptions[name] || empty;\n\n            if ('development' !== 'production' && name === '$data') {\n                warn('Do not use $data as prop.', vm);\n                continue;\n            }\n\n            // props could contain dashes, which will be\n            // interpreted as minus calculations by the parser\n            // so we need to camelize the path here\n            path = camelize(name);\n            if (!identRE$1.test(path)) {\n                'development' !== 'production' && warn('Invalid prop key: \"' + name + '\". Prop keys ' + 'must be valid identifiers.', vm);\n                continue;\n            }\n\n            prop = {\n                name: name,\n                path: path,\n                options: options,\n                mode: propBindingModes.ONE_WAY,\n                raw: null\n            };\n\n            attr = hyphenate(name);\n            // first check dynamic version\n            if ((value = getBindAttr(el, attr)) === null) {\n                if ((value = getBindAttr(el, attr + '.sync')) !== null) {\n                    prop.mode = propBindingModes.TWO_WAY;\n                } else if ((value = getBindAttr(el, attr + '.once')) !== null) {\n                    prop.mode = propBindingModes.ONE_TIME;\n                }\n            }\n            if (value !== null) {\n                // has dynamic binding!\n                prop.raw = value;\n                parsed = parseDirective(value);\n                value = parsed.expression;\n                prop.filters = parsed.filters;\n                // check binding type\n                if (isLiteral(value) && !parsed.filters) {\n                    // for expressions containing literal numbers and\n                    // booleans, there's no need to setup a prop binding,\n                    // so we can optimize them as a one-time set.\n                    prop.optimizedLiteral = true;\n                } else {\n                    prop.dynamic = true;\n                    // check non-settable path for two-way bindings\n                    if ('development' !== 'production' && prop.mode === propBindingModes.TWO_WAY && !settablePathRE.test(value)) {\n                        prop.mode = propBindingModes.ONE_WAY;\n                        warn('Cannot bind two-way prop with non-settable ' + 'parent path: ' + value, vm);\n                    }\n                }\n                prop.parentPath = value;\n\n                // warn required two-way\n                if ('development' !== 'production' && options.twoWay && prop.mode !== propBindingModes.TWO_WAY) {\n                    warn('Prop \"' + name + '\" expects a two-way binding type.', vm);\n                }\n            } else if ((value = getAttr(el, attr)) !== null) {\n                // has literal binding!\n                prop.raw = value;\n            } else if ('development' !== 'production') {\n                // check possible camelCase prop usage\n                var lowerCaseName = path.toLowerCase();\n                value = /[A-Z\\-]/.test(name) && (el.getAttribute(lowerCaseName) || el.getAttribute(':' + lowerCaseName) || el.getAttribute('v-bind:' + lowerCaseName) || el.getAttribute(':' + lowerCaseName + '.once') || el.getAttribute('v-bind:' + lowerCaseName + '.once') || el.getAttribute(':' + lowerCaseName + '.sync') || el.getAttribute('v-bind:' + lowerCaseName + '.sync'));\n                if (value) {\n                    warn('Possible usage error for prop `' + lowerCaseName + '` - ' + 'did you mean `' + attr + '`? HTML is case-insensitive, remember to use ' + 'kebab-case for props in templates.', vm);\n                } else if (options.required) {\n                    // warn missing required\n                    warn('Missing required prop: ' + name, vm);\n                }\n            }\n            // push prop\n            props.push(prop);\n        }\n        return makePropsLinkFn(props);\n    }\n\n    /**\n     * Build a function that applies props to a vm.\n     *\n     * @param {Array} props\n     * @return {Function} propsLinkFn\n     */\n\n    function makePropsLinkFn(props) {\n        return function propsLinkFn(vm, scope) {\n            // store resolved props info\n            vm._props = {};\n            var inlineProps = vm.$options.propsData;\n            var i = props.length;\n            var prop, path, options, value, raw;\n            while (i--) {\n                prop = props[i];\n                raw = prop.raw;\n                path = prop.path;\n                options = prop.options;\n                vm._props[path] = prop;\n                if (inlineProps && hasOwn(inlineProps, path)) {\n                    initProp(vm, prop, inlineProps[path]);\n                }if (raw === null) {\n                    // initialize absent prop\n                    initProp(vm, prop, undefined);\n                } else if (prop.dynamic) {\n                    // dynamic prop\n                    if (prop.mode === propBindingModes.ONE_TIME) {\n                        // one time binding\n                        value = (scope || vm._context || vm).$get(prop.parentPath);\n                        initProp(vm, prop, value);\n                    } else {\n                        if (vm._context) {\n                            // dynamic binding\n                            vm._bindDir({\n                                name: 'prop',\n                                def: propDef,\n                                prop: prop\n                            }, null, null, scope); // el, host, scope\n                        } else {\n                            // root instance\n                            initProp(vm, prop, vm.$get(prop.parentPath));\n                        }\n                    }\n                } else if (prop.optimizedLiteral) {\n                    // optimized literal, cast it and just set once\n                    var stripped = stripQuotes(raw);\n                    value = stripped === raw ? toBoolean(toNumber(raw)) : stripped;\n                    initProp(vm, prop, value);\n                } else {\n                    // string literal, but we need to cater for\n                    // Boolean props with no value, or with same\n                    // literal value (e.g. disabled=\"disabled\")\n                    // see https://github.com/vuejs/vue-loader/issues/182\n                    value = options.type === Boolean && (raw === '' || raw === hyphenate(prop.name)) ? true : raw;\n                    initProp(vm, prop, value);\n                }\n            }\n        };\n    }\n\n    /**\n     * Process a prop with a rawValue, applying necessary coersions,\n     * default values & assertions and call the given callback with\n     * processed value.\n     *\n     * @param {Vue} vm\n     * @param {Object} prop\n     * @param {*} rawValue\n     * @param {Function} fn\n     */\n\n    function processPropValue(vm, prop, rawValue, fn) {\n        var isSimple = prop.dynamic && isSimplePath(prop.parentPath);\n        var value = rawValue;\n        if (value === undefined) {\n            value = getPropDefaultValue(vm, prop);\n        }\n        value = coerceProp(prop, value);\n        var coerced = value !== rawValue;\n        if (!assertProp(prop, value, vm)) {\n            value = undefined;\n        }\n        if (isSimple && !coerced) {\n            withoutConversion(function () {\n                fn(value);\n            });\n        } else {\n            fn(value);\n        }\n    }\n\n    /**\n     * Set a prop's initial value on a vm and its data object.\n     *\n     * @param {Vue} vm\n     * @param {Object} prop\n     * @param {*} value\n     */\n\n    function initProp(vm, prop, value) {\n        processPropValue(vm, prop, value, function (value) {\n            defineReactive(vm, prop.path, value);\n        });\n    }\n\n    /**\n     * Update a prop's value on a vm.\n     *\n     * @param {Vue} vm\n     * @param {Object} prop\n     * @param {*} value\n     */\n\n    function updateProp(vm, prop, value) {\n        processPropValue(vm, prop, value, function (value) {\n            vm[prop.path] = value;\n        });\n    }\n\n    /**\n     * Get the default value of a prop.\n     *\n     * @param {Vue} vm\n     * @param {Object} prop\n     * @return {*}\n     */\n\n    function getPropDefaultValue(vm, prop) {\n        // no default, return undefined\n        var options = prop.options;\n        if (!hasOwn(options, 'default')) {\n            // absent boolean value defaults to false\n            return options.type === Boolean ? false : undefined;\n        }\n        var def = options['default'];\n        // warn against non-factory defaults for Object & Array\n        if (isObject(def)) {\n            'development' !== 'production' && warn('Invalid default value for prop \"' + prop.name + '\": ' + 'Props with type Object/Array must use a factory function ' + 'to return the default value.', vm);\n        }\n        // call factory function for non-Function types\n        return typeof def === 'function' && options.type !== Function ? def.call(vm) : def;\n    }\n\n    /**\n     * Assert whether a prop is valid.\n     *\n     * @param {Object} prop\n     * @param {*} value\n     * @param {Vue} vm\n     */\n\n    function assertProp(prop, value, vm) {\n        if (!prop.options.required && ( // non-required\n            prop.raw === null || // abscent\n            value == null) // null or undefined\n        ) {\n            return true;\n        }\n        var options = prop.options;\n        var type = options.type;\n        var valid = !type;\n        var expectedTypes = [];\n        if (type) {\n            if (!isArray(type)) {\n                type = [type];\n            }\n            for (var i = 0; i < type.length && !valid; i++) {\n                var assertedType = assertType(value, type[i]);\n                expectedTypes.push(assertedType.expectedType);\n                valid = assertedType.valid;\n            }\n        }\n        if (!valid) {\n            if ('development' !== 'production') {\n                warn('Invalid prop: type check failed for prop \"' + prop.name + '\".' + ' Expected ' + expectedTypes.map(formatType).join(', ') + ', got ' + formatValue(value) + '.', vm);\n            }\n            return false;\n        }\n        var validator = options.validator;\n        if (validator) {\n            if (!validator(value)) {\n                'development' !== 'production' && warn('Invalid prop: custom validator check failed for prop \"' + prop.name + '\".', vm);\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Force parsing value with coerce option.\n     *\n     * @param {*} value\n     * @param {Object} options\n     * @return {*}\n     */\n\n    function coerceProp(prop, value) {\n        var coerce = prop.options.coerce;\n        if (!coerce) {\n            return value;\n        }\n        // coerce is a function\n        return coerce(value);\n    }\n\n    /**\n     * Assert the type of a value\n     *\n     * @param {*} value\n     * @param {Function} type\n     * @return {Object}\n     */\n\n    function assertType(value, type) {\n        var valid;\n        var expectedType;\n        if (type === String) {\n            expectedType = 'string';\n            valid = typeof value === expectedType;\n        } else if (type === Number) {\n            expectedType = 'number';\n            valid = typeof value === expectedType;\n        } else if (type === Boolean) {\n            expectedType = 'boolean';\n            valid = typeof value === expectedType;\n        } else if (type === Function) {\n            expectedType = 'function';\n            valid = typeof value === expectedType;\n        } else if (type === Object) {\n            expectedType = 'object';\n            valid = isPlainObject(value);\n        } else if (type === Array) {\n            expectedType = 'array';\n            valid = isArray(value);\n        } else {\n            valid = value instanceof type;\n        }\n        return {\n            valid: valid,\n            expectedType: expectedType\n        };\n    }\n\n    /**\n     * Format type for output\n     *\n     * @param {String} type\n     * @return {String}\n     */\n\n    function formatType(type) {\n        return type ? type.charAt(0).toUpperCase() + type.slice(1) : 'custom type';\n    }\n\n    /**\n     * Format value\n     *\n     * @param {*} value\n     * @return {String}\n     */\n\n    function formatValue(val) {\n        return Object.prototype.toString.call(val).slice(8, -1);\n    }\n\n    var bindingModes = config._propBindingModes;\n\n    var propDef = {\n\n        bind: function bind() {\n            var child = this.vm;\n            var parent = child._context;\n            // passed in from compiler directly\n            var prop = this.descriptor.prop;\n            var childKey = prop.path;\n            var parentKey = prop.parentPath;\n            var twoWay = prop.mode === bindingModes.TWO_WAY;\n\n            var parentWatcher = this.parentWatcher = new Watcher(parent, parentKey, function (val) {\n                updateProp(child, prop, val);\n            }, {\n                twoWay: twoWay,\n                filters: prop.filters,\n                // important: props need to be observed on the\n                // v-for scope if present\n                scope: this._scope\n            });\n\n            // set the child initial value.\n            initProp(child, prop, parentWatcher.value);\n\n            // setup two-way binding\n            if (twoWay) {\n                // important: defer the child watcher creation until\n                // the created hook (after data observation)\n                var self = this;\n                child.$once('pre-hook:created', function () {\n                    self.childWatcher = new Watcher(child, childKey, function (val) {\n                        parentWatcher.set(val);\n                    }, {\n                        // ensure sync upward before parent sync down.\n                        // this is necessary in cases e.g. the child\n                        // mutates a prop array, then replaces it. (#1683)\n                        sync: true\n                    });\n                });\n            }\n        },\n\n        unbind: function unbind() {\n            this.parentWatcher.teardown();\n            if (this.childWatcher) {\n                this.childWatcher.teardown();\n            }\n        }\n    };\n\n    var queue$1 = [];\n    var queued = false;\n\n    /**\n     * Push a job into the queue.\n     *\n     * @param {Function} job\n     */\n\n    function pushJob(job) {\n        queue$1.push(job);\n        if (!queued) {\n            queued = true;\n            nextTick(flush);\n        }\n    }\n\n    /**\n     * Flush the queue, and do one forced reflow before\n     * triggering transitions.\n     */\n\n    function flush() {\n        // Force layout\n        var f = document.documentElement.offsetHeight;\n        for (var i = 0; i < queue$1.length; i++) {\n            queue$1[i]();\n        }\n        queue$1 = [];\n        queued = false;\n        // dummy return, so js linters don't complain about\n        // unused variable f\n        return f;\n    }\n\n    var TYPE_TRANSITION = 'transition';\n    var TYPE_ANIMATION = 'animation';\n    var transDurationProp = transitionProp + 'Duration';\n    var animDurationProp = animationProp + 'Duration';\n\n    /**\n     * If a just-entered element is applied the\n     * leave class while its enter transition hasn't started yet,\n     * and the transitioned property has the same value for both\n     * enter/leave, then the leave transition will be skipped and\n     * the transitionend event never fires. This function ensures\n     * its callback to be called after a transition has started\n     * by waiting for double raf.\n     *\n     * It falls back to setTimeout on devices that support CSS\n     * transitions but not raf (e.g. Android 4.2 browser) - since\n     * these environments are usually slow, we are giving it a\n     * relatively large timeout.\n     */\n\n    var raf = inBrowser && window.requestAnimationFrame;\n    var waitForTransitionStart = raf\n        /* istanbul ignore next */\n        ? function (fn) {\n        raf(function () {\n            raf(fn);\n        });\n    } : function (fn) {\n        setTimeout(fn, 50);\n    };\n\n    /**\n     * A Transition object that encapsulates the state and logic\n     * of the transition.\n     *\n     * @param {Element} el\n     * @param {String} id\n     * @param {Object} hooks\n     * @param {Vue} vm\n     */\n    function Transition(el, id, hooks, vm) {\n        this.id = id;\n        this.el = el;\n        this.enterClass = hooks && hooks.enterClass || id + '-enter';\n        this.leaveClass = hooks && hooks.leaveClass || id + '-leave';\n        this.hooks = hooks;\n        this.vm = vm;\n        // async state\n        this.pendingCssEvent = this.pendingCssCb = this.cancel = this.pendingJsCb = this.op = this.cb = null;\n        this.justEntered = false;\n        this.entered = this.left = false;\n        this.typeCache = {};\n        // check css transition type\n        this.type = hooks && hooks.type;\n        /* istanbul ignore if */\n        if ('development' !== 'production') {\n            if (this.type && this.type !== TYPE_TRANSITION && this.type !== TYPE_ANIMATION) {\n                warn('invalid CSS transition type for transition=\"' + this.id + '\": ' + this.type, vm);\n            }\n        }\n        // bind\n        var self = this;['enterNextTick', 'enterDone', 'leaveNextTick', 'leaveDone'].forEach(function (m) {\n            self[m] = bind(self[m], self);\n        });\n    }\n\n    var p$1 = Transition.prototype;\n\n    /**\n     * Start an entering transition.\n     *\n     * 1. enter transition triggered\n     * 2. call beforeEnter hook\n     * 3. add enter class\n     * 4. insert/show element\n     * 5. call enter hook (with possible explicit js callback)\n     * 6. reflow\n     * 7. based on transition type:\n     *    - transition:\n     *        remove class now, wait for transitionend,\n     *        then done if there's no explicit js callback.\n     *    - animation:\n     *        wait for animationend, remove class,\n     *        then done if there's no explicit js callback.\n     *    - no css transition:\n     *        done now if there's no explicit js callback.\n     * 8. wait for either done or js callback, then call\n     *    afterEnter hook.\n     *\n     * @param {Function} op - insert/show the element\n     * @param {Function} [cb]\n     */\n\n    p$1.enter = function (op, cb) {\n        this.cancelPending();\n        this.callHook('beforeEnter');\n        this.cb = cb;\n        addClass(this.el, this.enterClass);\n        op();\n        this.entered = false;\n        this.callHookWithCb('enter');\n        if (this.entered) {\n            return; // user called done synchronously.\n        }\n        this.cancel = this.hooks && this.hooks.enterCancelled;\n        pushJob(this.enterNextTick);\n    };\n\n    /**\n     * The \"nextTick\" phase of an entering transition, which is\n     * to be pushed into a queue and executed after a reflow so\n     * that removing the class can trigger a CSS transition.\n     */\n\n    p$1.enterNextTick = function () {\n        var _this = this;\n\n        // prevent transition skipping\n        this.justEntered = true;\n        waitForTransitionStart(function () {\n            _this.justEntered = false;\n        });\n        var enterDone = this.enterDone;\n        var type = this.getCssTransitionType(this.enterClass);\n        if (!this.pendingJsCb) {\n            if (type === TYPE_TRANSITION) {\n                // trigger transition by removing enter class now\n                removeClass(this.el, this.enterClass);\n                this.setupCssCb(transitionEndEvent, enterDone);\n            } else if (type === TYPE_ANIMATION) {\n                this.setupCssCb(animationEndEvent, enterDone);\n            } else {\n                enterDone();\n            }\n        } else if (type === TYPE_TRANSITION) {\n            removeClass(this.el, this.enterClass);\n        }\n    };\n\n    /**\n     * The \"cleanup\" phase of an entering transition.\n     */\n\n    p$1.enterDone = function () {\n        this.entered = true;\n        this.cancel = this.pendingJsCb = null;\n        removeClass(this.el, this.enterClass);\n        this.callHook('afterEnter');\n        if (this.cb) this.cb();\n    };\n\n    /**\n     * Start a leaving transition.\n     *\n     * 1. leave transition triggered.\n     * 2. call beforeLeave hook\n     * 3. add leave class (trigger css transition)\n     * 4. call leave hook (with possible explicit js callback)\n     * 5. reflow if no explicit js callback is provided\n     * 6. based on transition type:\n     *    - transition or animation:\n     *        wait for end event, remove class, then done if\n     *        there's no explicit js callback.\n     *    - no css transition:\n     *        done if there's no explicit js callback.\n     * 7. wait for either done or js callback, then call\n     *    afterLeave hook.\n     *\n     * @param {Function} op - remove/hide the element\n     * @param {Function} [cb]\n     */\n\n    p$1.leave = function (op, cb) {\n        this.cancelPending();\n        this.callHook('beforeLeave');\n        this.op = op;\n        this.cb = cb;\n        addClass(this.el, this.leaveClass);\n        this.left = false;\n        this.callHookWithCb('leave');\n        if (this.left) {\n            return; // user called done synchronously.\n        }\n        this.cancel = this.hooks && this.hooks.leaveCancelled;\n        // only need to handle leaveDone if\n        // 1. the transition is already done (synchronously called\n        //    by the user, which causes this.op set to null)\n        // 2. there's no explicit js callback\n        if (this.op && !this.pendingJsCb) {\n            // if a CSS transition leaves immediately after enter,\n            // the transitionend event never fires. therefore we\n            // detect such cases and end the leave immediately.\n            if (this.justEntered) {\n                this.leaveDone();\n            } else {\n                pushJob(this.leaveNextTick);\n            }\n        }\n    };\n\n    /**\n     * The \"nextTick\" phase of a leaving transition.\n     */\n\n    p$1.leaveNextTick = function () {\n        var type = this.getCssTransitionType(this.leaveClass);\n        if (type) {\n            var event = type === TYPE_TRANSITION ? transitionEndEvent : animationEndEvent;\n            this.setupCssCb(event, this.leaveDone);\n        } else {\n            this.leaveDone();\n        }\n    };\n\n    /**\n     * The \"cleanup\" phase of a leaving transition.\n     */\n\n    p$1.leaveDone = function () {\n        this.left = true;\n        this.cancel = this.pendingJsCb = null;\n        this.op();\n        removeClass(this.el, this.leaveClass);\n        this.callHook('afterLeave');\n        if (this.cb) this.cb();\n        this.op = null;\n    };\n\n    /**\n     * Cancel any pending callbacks from a previously running\n     * but not finished transition.\n     */\n\n    p$1.cancelPending = function () {\n        this.op = this.cb = null;\n        var hasPending = false;\n        if (this.pendingCssCb) {\n            hasPending = true;\n            off(this.el, this.pendingCssEvent, this.pendingCssCb);\n            this.pendingCssEvent = this.pendingCssCb = null;\n        }\n        if (this.pendingJsCb) {\n            hasPending = true;\n            this.pendingJsCb.cancel();\n            this.pendingJsCb = null;\n        }\n        if (hasPending) {\n            removeClass(this.el, this.enterClass);\n            removeClass(this.el, this.leaveClass);\n        }\n        if (this.cancel) {\n            this.cancel.call(this.vm, this.el);\n            this.cancel = null;\n        }\n    };\n\n    /**\n     * Call a user-provided synchronous hook function.\n     *\n     * @param {String} type\n     */\n\n    p$1.callHook = function (type) {\n        if (this.hooks && this.hooks[type]) {\n            this.hooks[type].call(this.vm, this.el);\n        }\n    };\n\n    /**\n     * Call a user-provided, potentially-async hook function.\n     * We check for the length of arguments to see if the hook\n     * expects a `done` callback. If true, the transition's end\n     * will be determined by when the user calls that callback;\n     * otherwise, the end is determined by the CSS transition or\n     * animation.\n     *\n     * @param {String} type\n     */\n\n    p$1.callHookWithCb = function (type) {\n        var hook = this.hooks && this.hooks[type];\n        if (hook) {\n            if (hook.length > 1) {\n                this.pendingJsCb = cancellable(this[type + 'Done']);\n            }\n            hook.call(this.vm, this.el, this.pendingJsCb);\n        }\n    };\n\n    /**\n     * Get an element's transition type based on the\n     * calculated styles.\n     *\n     * @param {String} className\n     * @return {Number}\n     */\n\n    p$1.getCssTransitionType = function (className) {\n        /* istanbul ignore if */\n        if (!transitionEndEvent ||\n            // skip CSS transitions if page is not visible -\n            // this solves the issue of transitionend events not\n            // firing until the page is visible again.\n            // pageVisibility API is supported in IE10+, same as\n            // CSS transitions.\n            document.hidden ||\n            // explicit js-only transition\n            this.hooks && this.hooks.css === false ||\n            // element is hidden\n            isHidden(this.el)) {\n            return;\n        }\n        var type = this.type || this.typeCache[className];\n        if (type) return type;\n        var inlineStyles = this.el.style;\n        var computedStyles = window.getComputedStyle(this.el);\n        var transDuration = inlineStyles[transDurationProp] || computedStyles[transDurationProp];\n        if (transDuration && transDuration !== '0s') {\n            type = TYPE_TRANSITION;\n        } else {\n            var animDuration = inlineStyles[animDurationProp] || computedStyles[animDurationProp];\n            if (animDuration && animDuration !== '0s') {\n                type = TYPE_ANIMATION;\n            }\n        }\n        if (type) {\n            this.typeCache[className] = type;\n        }\n        return type;\n    };\n\n    /**\n     * Setup a CSS transitionend/animationend callback.\n     *\n     * @param {String} event\n     * @param {Function} cb\n     */\n\n    p$1.setupCssCb = function (event, cb) {\n        this.pendingCssEvent = event;\n        var self = this;\n        var el = this.el;\n        var onEnd = this.pendingCssCb = function (e) {\n            if (e.target === el) {\n                off(el, event, onEnd);\n                self.pendingCssEvent = self.pendingCssCb = null;\n                if (!self.pendingJsCb && cb) {\n                    cb();\n                }\n            }\n        };\n        on(el, event, onEnd);\n    };\n\n    /**\n     * Check if an element is hidden - in that case we can just\n     * skip the transition alltogether.\n     *\n     * @param {Element} el\n     * @return {Boolean}\n     */\n\n    function isHidden(el) {\n        if (/svg$/.test(el.namespaceURI)) {\n            // SVG elements do not have offset(Width|Height)\n            // so we need to check the client rect\n            var rect = el.getBoundingClientRect();\n            return !(rect.width || rect.height);\n        } else {\n            return !(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n        }\n    }\n\n    var transition$1 = {\n\n        priority: TRANSITION,\n\n        update: function update(id, oldId) {\n            var el = this.el;\n            // resolve on owner vm\n            var hooks = resolveAsset(this.vm.$options, 'transitions', id);\n            id = id || 'v';\n            el.__v_trans = new Transition(el, id, hooks, this.vm);\n            if (oldId) {\n                removeClass(el, oldId + '-transition');\n            }\n            addClass(el, id + '-transition');\n        }\n    };\n\n    var internalDirectives = {\n        style: style,\n        'class': vClass,\n        component: component,\n        prop: propDef,\n        transition: transition$1\n    };\n\n    // special binding prefixes\n    var bindRE = /^v-bind:|^:/;\n    var onRE = /^v-on:|^@/;\n    var dirAttrRE = /^v-([^:]+)(?:$|:(.*)$)/;\n    var modifierRE = /\\.[^\\.]+/g;\n    var transitionRE = /^(v-bind:|:)?transition$/;\n\n    // default directive priority\n    var DEFAULT_PRIORITY = 1000;\n    var DEFAULT_TERMINAL_PRIORITY = 2000;\n\n    /**\n     * Compile a template and return a reusable composite link\n     * function, which recursively contains more link functions\n     * inside. This top level compile function would normally\n     * be called on instance root nodes, but can also be used\n     * for partial compilation if the partial argument is true.\n     *\n     * The returned composite link function, when called, will\n     * return an unlink function that tearsdown all directives\n     * created during the linking phase.\n     *\n     * @param {Element|DocumentFragment} el\n     * @param {Object} options\n     * @param {Boolean} partial\n     * @return {Function}\n     */\n\n    function compile(el, options, partial) {\n        // link function for the node itself.\n        var nodeLinkFn = partial || !options._asComponent ? compileNode(el, options) : null;\n        // link function for the childNodes\n        var childLinkFn = !(nodeLinkFn && nodeLinkFn.terminal) && !isScript(el) && el.hasChildNodes() ? compileNodeList(el.childNodes, options) : null;\n\n        /**\n         * A composite linker function to be called on a already\n         * compiled piece of DOM, which instantiates all directive\n         * instances.\n         *\n         * @param {Vue} vm\n         * @param {Element|DocumentFragment} el\n         * @param {Vue} [host] - host vm of transcluded content\n         * @param {Object} [scope] - v-for scope\n         * @param {Fragment} [frag] - link context fragment\n         * @return {Function|undefined}\n         */\n\n        return function compositeLinkFn(vm, el, host, scope, frag) {\n            // cache childNodes before linking parent, fix #657\n            var childNodes = toArray(el.childNodes);\n            // link\n            var dirs = linkAndCapture(function compositeLinkCapturer() {\n                if (nodeLinkFn) nodeLinkFn(vm, el, host, scope, frag);\n                if (childLinkFn) childLinkFn(vm, childNodes, host, scope, frag);\n            }, vm);\n            return makeUnlinkFn(vm, dirs);\n        };\n    }\n\n    /**\n     * Apply a linker to a vm/element pair and capture the\n     * directives created during the process.\n     *\n     * @param {Function} linker\n     * @param {Vue} vm\n     */\n\n    function linkAndCapture(linker, vm) {\n        /* istanbul ignore if */\n        if ('development' === 'production') {}\n        var originalDirCount = vm._directives.length;\n        linker();\n        var dirs = vm._directives.slice(originalDirCount);\n        dirs.sort(directiveComparator);\n        for (var i = 0, l = dirs.length; i < l; i++) {\n            dirs[i]._bind();\n        }\n        return dirs;\n    }\n\n    /**\n     * Directive priority sort comparator\n     *\n     * @param {Object} a\n     * @param {Object} b\n     */\n\n    function directiveComparator(a, b) {\n        a = a.descriptor.def.priority || DEFAULT_PRIORITY;\n        b = b.descriptor.def.priority || DEFAULT_PRIORITY;\n        return a > b ? -1 : a === b ? 0 : 1;\n    }\n\n    /**\n     * Linker functions return an unlink function that\n     * tearsdown all directives instances generated during\n     * the process.\n     *\n     * We create unlink functions with only the necessary\n     * information to avoid retaining additional closures.\n     *\n     * @param {Vue} vm\n     * @param {Array} dirs\n     * @param {Vue} [context]\n     * @param {Array} [contextDirs]\n     * @return {Function}\n     */\n\n    function makeUnlinkFn(vm, dirs, context, contextDirs) {\n        function unlink(destroying) {\n            teardownDirs(vm, dirs, destroying);\n            if (context && contextDirs) {\n                teardownDirs(context, contextDirs);\n            }\n        }\n        // expose linked directives\n        unlink.dirs = dirs;\n        return unlink;\n    }\n\n    /**\n     * Teardown partial linked directives.\n     *\n     * @param {Vue} vm\n     * @param {Array} dirs\n     * @param {Boolean} destroying\n     */\n\n    function teardownDirs(vm, dirs, destroying) {\n        var i = dirs.length;\n        while (i--) {\n            dirs[i]._teardown();\n            if ('development' !== 'production' && !destroying) {\n                vm._directives.$remove(dirs[i]);\n            }\n        }\n    }\n\n    /**\n     * Compile link props on an instance.\n     *\n     * @param {Vue} vm\n     * @param {Element} el\n     * @param {Object} props\n     * @param {Object} [scope]\n     * @return {Function}\n     */\n\n    function compileAndLinkProps(vm, el, props, scope) {\n        var propsLinkFn = compileProps(el, props, vm);\n        var propDirs = linkAndCapture(function () {\n            propsLinkFn(vm, scope);\n        }, vm);\n        return makeUnlinkFn(vm, propDirs);\n    }\n\n    /**\n     * Compile the root element of an instance.\n     *\n     * 1. attrs on context container (context scope)\n     * 2. attrs on the component template root node, if\n     *    replace:true (child scope)\n     *\n     * If this is a fragment instance, we only need to compile 1.\n     *\n     * @param {Element} el\n     * @param {Object} options\n     * @param {Object} contextOptions\n     * @return {Function}\n     */\n\n    function compileRoot(el, options, contextOptions) {\n        var containerAttrs = options._containerAttrs;\n        var replacerAttrs = options._replacerAttrs;\n        var contextLinkFn, replacerLinkFn;\n\n        // only need to compile other attributes for\n        // non-fragment instances\n        if (el.nodeType !== 11) {\n            // for components, container and replacer need to be\n            // compiled separately and linked in different scopes.\n            if (options._asComponent) {\n                // 2. container attributes\n                if (containerAttrs && contextOptions) {\n                    contextLinkFn = compileDirectives(containerAttrs, contextOptions);\n                }\n                if (replacerAttrs) {\n                    // 3. replacer attributes\n                    replacerLinkFn = compileDirectives(replacerAttrs, options);\n                }\n            } else {\n                // non-component, just compile as a normal element.\n                replacerLinkFn = compileDirectives(el.attributes, options);\n            }\n        } else if ('development' !== 'production' && containerAttrs) {\n            // warn container directives for fragment instances\n            var names = containerAttrs.filter(function (attr) {\n                // allow vue-loader/vueify scoped css attributes\n                return attr.name.indexOf('_v-') < 0 &&\n                    // allow event listeners\n                    !onRE.test(attr.name) &&\n                    // allow slots\n                    attr.name !== 'slot';\n            }).map(function (attr) {\n                return '\"' + attr.name + '\"';\n            });\n            if (names.length) {\n                var plural = names.length > 1;\n                warn('Attribute' + (plural ? 's ' : ' ') + names.join(', ') + (plural ? ' are' : ' is') + ' ignored on component ' + '<' + options.el.tagName.toLowerCase() + '> because ' + 'the component is a fragment instance: ' + 'http://vuejs.org/guide/components.html#Fragment-Instance');\n            }\n        }\n\n        options._containerAttrs = options._replacerAttrs = null;\n        return function rootLinkFn(vm, el, scope) {\n            // link context scope dirs\n            var context = vm._context;\n            var contextDirs;\n            if (context && contextLinkFn) {\n                contextDirs = linkAndCapture(function () {\n                    contextLinkFn(context, el, null, scope);\n                }, context);\n            }\n\n            // link self\n            var selfDirs = linkAndCapture(function () {\n                if (replacerLinkFn) replacerLinkFn(vm, el);\n            }, vm);\n\n            // return the unlink function that tearsdown context\n            // container directives.\n            return makeUnlinkFn(vm, selfDirs, context, contextDirs);\n        };\n    }\n\n    /**\n     * Compile a node and return a nodeLinkFn based on the\n     * node type.\n     *\n     * @param {Node} node\n     * @param {Object} options\n     * @return {Function|null}\n     */\n\n    function compileNode(node, options) {\n        var type = node.nodeType;\n        if (type === 1 && !isScript(node)) {\n            return compileElement(node, options);\n        } else if (type === 3 && node.data.trim()) {\n            return compileTextNode(node, options);\n        } else {\n            return null;\n        }\n    }\n\n    /**\n     * Compile an element and return a nodeLinkFn.\n     *\n     * @param {Element} el\n     * @param {Object} options\n     * @return {Function|null}\n     */\n\n    function compileElement(el, options) {\n        // preprocess textareas.\n        // textarea treats its text content as the initial value.\n        // just bind it as an attr directive for value.\n        if (el.tagName === 'TEXTAREA') {\n            var tokens = parseText(el.value);\n            if (tokens) {\n                el.setAttribute(':value', tokensToExp(tokens));\n                el.value = '';\n            }\n        }\n        var linkFn;\n        var hasAttrs = el.hasAttributes();\n        var attrs = hasAttrs && toArray(el.attributes);\n        // check terminal directives (for & if)\n        if (hasAttrs) {\n            linkFn = checkTerminalDirectives(el, attrs, options);\n        }\n        // check element directives\n        if (!linkFn) {\n            linkFn = checkElementDirectives(el, options);\n        }\n        // check component\n        if (!linkFn) {\n            linkFn = checkComponent(el, options);\n        }\n        // normal directives\n        if (!linkFn && hasAttrs) {\n            linkFn = compileDirectives(attrs, options);\n        }\n        return linkFn;\n    }\n\n    /**\n     * Compile a textNode and return a nodeLinkFn.\n     *\n     * @param {TextNode} node\n     * @param {Object} options\n     * @return {Function|null} textNodeLinkFn\n     */\n\n    function compileTextNode(node, options) {\n        // skip marked text nodes\n        if (node._skip) {\n            return removeText;\n        }\n\n        var tokens = parseText(node.wholeText);\n        if (!tokens) {\n            return null;\n        }\n\n        // mark adjacent text nodes as skipped,\n        // because we are using node.wholeText to compile\n        // all adjacent text nodes together. This fixes\n        // issues in IE where sometimes it splits up a single\n        // text node into multiple ones.\n        var next = node.nextSibling;\n        while (next && next.nodeType === 3) {\n            next._skip = true;\n            next = next.nextSibling;\n        }\n\n        var frag = document.createDocumentFragment();\n        var el, token;\n        for (var i = 0, l = tokens.length; i < l; i++) {\n            token = tokens[i];\n            el = token.tag ? processTextToken(token, options) : document.createTextNode(token.value);\n            frag.appendChild(el);\n        }\n        return makeTextNodeLinkFn(tokens, frag, options);\n    }\n\n    /**\n     * Linker for an skipped text node.\n     *\n     * @param {Vue} vm\n     * @param {Text} node\n     */\n\n    function removeText(vm, node) {\n        remove(node);\n    }\n\n    /**\n     * Process a single text token.\n     *\n     * @param {Object} token\n     * @param {Object} options\n     * @return {Node}\n     */\n\n    function processTextToken(token, options) {\n        var el;\n        if (token.oneTime) {\n            el = document.createTextNode(token.value);\n        } else {\n            if (token.html) {\n                el = document.createComment('v-html');\n                setTokenType('html');\n            } else {\n                // IE will clean up empty textNodes during\n                // frag.cloneNode(true), so we have to give it\n                // something here...\n                el = document.createTextNode(' ');\n                setTokenType('text');\n            }\n        }\n        function setTokenType(type) {\n            if (token.descriptor) return;\n            var parsed = parseDirective(token.value);\n            token.descriptor = {\n                name: type,\n                def: directives[type],\n                expression: parsed.expression,\n                filters: parsed.filters\n            };\n        }\n        return el;\n    }\n\n    /**\n     * Build a function that processes a textNode.\n     *\n     * @param {Array<Object>} tokens\n     * @param {DocumentFragment} frag\n     */\n\n    function makeTextNodeLinkFn(tokens, frag) {\n        return function textNodeLinkFn(vm, el, host, scope) {\n            var fragClone = frag.cloneNode(true);\n            var childNodes = toArray(fragClone.childNodes);\n            var token, value, node;\n            for (var i = 0, l = tokens.length; i < l; i++) {\n                token = tokens[i];\n                value = token.value;\n                if (token.tag) {\n                    node = childNodes[i];\n                    if (token.oneTime) {\n                        value = (scope || vm).$eval(value);\n                        if (token.html) {\n                            replace(node, parseTemplate(value, true));\n                        } else {\n                            node.data = value;\n                        }\n                    } else {\n                        vm._bindDir(token.descriptor, node, host, scope);\n                    }\n                }\n            }\n            replace(el, fragClone);\n        };\n    }\n\n    /**\n     * Compile a node list and return a childLinkFn.\n     *\n     * @param {NodeList} nodeList\n     * @param {Object} options\n     * @return {Function|undefined}\n     */\n\n    function compileNodeList(nodeList, options) {\n        var linkFns = [];\n        var nodeLinkFn, childLinkFn, node;\n        for (var i = 0, l = nodeList.length; i < l; i++) {\n            node = nodeList[i];\n            nodeLinkFn = compileNode(node, options);\n            childLinkFn = !(nodeLinkFn && nodeLinkFn.terminal) && node.tagName !== 'SCRIPT' && node.hasChildNodes() ? compileNodeList(node.childNodes, options) : null;\n            linkFns.push(nodeLinkFn, childLinkFn);\n        }\n        return linkFns.length ? makeChildLinkFn(linkFns) : null;\n    }\n\n    /**\n     * Make a child link function for a node's childNodes.\n     *\n     * @param {Array<Function>} linkFns\n     * @return {Function} childLinkFn\n     */\n\n    function makeChildLinkFn(linkFns) {\n        return function childLinkFn(vm, nodes, host, scope, frag) {\n            var node, nodeLinkFn, childrenLinkFn;\n            for (var i = 0, n = 0, l = linkFns.length; i < l; n++) {\n                node = nodes[n];\n                nodeLinkFn = linkFns[i++];\n                childrenLinkFn = linkFns[i++];\n                // cache childNodes before linking parent, fix #657\n                var childNodes = toArray(node.childNodes);\n                if (nodeLinkFn) {\n                    nodeLinkFn(vm, node, host, scope, frag);\n                }\n                if (childrenLinkFn) {\n                    childrenLinkFn(vm, childNodes, host, scope, frag);\n                }\n            }\n        };\n    }\n\n    /**\n     * Check for element directives (custom elements that should\n     * be resovled as terminal directives).\n     *\n     * @param {Element} el\n     * @param {Object} options\n     */\n\n    function checkElementDirectives(el, options) {\n        var tag = el.tagName.toLowerCase();\n        if (commonTagRE.test(tag)) {\n            return;\n        }\n        var def = resolveAsset(options, 'elementDirectives', tag);\n        if (def) {\n            return makeTerminalNodeLinkFn(el, tag, '', options, def);\n        }\n    }\n\n    /**\n     * Check if an element is a component. If yes, return\n     * a component link function.\n     *\n     * @param {Element} el\n     * @param {Object} options\n     * @return {Function|undefined}\n     */\n\n    function checkComponent(el, options) {\n        var component = checkComponentAttr(el, options);\n        if (component) {\n            var ref = findRef(el);\n            var descriptor = {\n                name: 'component',\n                ref: ref,\n                expression: component.id,\n                def: internalDirectives.component,\n                modifiers: {\n                    literal: !component.dynamic\n                }\n            };\n            var componentLinkFn = function componentLinkFn(vm, el, host, scope, frag) {\n                if (ref) {\n                    defineReactive((scope || vm).$refs, ref, null);\n                }\n                vm._bindDir(descriptor, el, host, scope, frag);\n            };\n            componentLinkFn.terminal = true;\n            return componentLinkFn;\n        }\n    }\n\n    /**\n     * Check an element for terminal directives in fixed order.\n     * If it finds one, return a terminal link function.\n     *\n     * @param {Element} el\n     * @param {Array} attrs\n     * @param {Object} options\n     * @return {Function} terminalLinkFn\n     */\n\n    function checkTerminalDirectives(el, attrs, options) {\n        // skip v-pre\n        if (getAttr(el, 'v-pre') !== null) {\n            return skip;\n        }\n        // skip v-else block, but only if following v-if\n        if (el.hasAttribute('v-else')) {\n            var prev = el.previousElementSibling;\n            if (prev && prev.hasAttribute('v-if')) {\n                return skip;\n            }\n        }\n\n        var attr, name, value, modifiers, matched, dirName, rawName, arg, def, termDef;\n        for (var i = 0, j = attrs.length; i < j; i++) {\n            attr = attrs[i];\n            name = attr.name.replace(modifierRE, '');\n            if (matched = name.match(dirAttrRE)) {\n                def = resolveAsset(options, 'directives', matched[1]);\n                if (def && def.terminal) {\n                    if (!termDef || (def.priority || DEFAULT_TERMINAL_PRIORITY) > termDef.priority) {\n                        termDef = def;\n                        rawName = attr.name;\n                        modifiers = parseModifiers(attr.name);\n                        value = attr.value;\n                        dirName = matched[1];\n                        arg = matched[2];\n                    }\n                }\n            }\n        }\n\n        if (termDef) {\n            return makeTerminalNodeLinkFn(el, dirName, value, options, termDef, rawName, arg, modifiers);\n        }\n    }\n\n    function skip() {}\n    skip.terminal = true;\n\n    /**\n     * Build a node link function for a terminal directive.\n     * A terminal link function terminates the current\n     * compilation recursion and handles compilation of the\n     * subtree in the directive.\n     *\n     * @param {Element} el\n     * @param {String} dirName\n     * @param {String} value\n     * @param {Object} options\n     * @param {Object} def\n     * @param {String} [rawName]\n     * @param {String} [arg]\n     * @param {Object} [modifiers]\n     * @return {Function} terminalLinkFn\n     */\n\n    function makeTerminalNodeLinkFn(el, dirName, value, options, def, rawName, arg, modifiers) {\n        var parsed = parseDirective(value);\n        var descriptor = {\n            name: dirName,\n            arg: arg,\n            expression: parsed.expression,\n            filters: parsed.filters,\n            raw: value,\n            attr: rawName,\n            modifiers: modifiers,\n            def: def\n        };\n        // check ref for v-for and router-view\n        if (dirName === 'for' || dirName === 'router-view') {\n            descriptor.ref = findRef(el);\n        }\n        var fn = function terminalNodeLinkFn(vm, el, host, scope, frag) {\n            if (descriptor.ref) {\n                defineReactive((scope || vm).$refs, descriptor.ref, null);\n            }\n            vm._bindDir(descriptor, el, host, scope, frag);\n        };\n        fn.terminal = true;\n        return fn;\n    }\n\n    /**\n     * Compile the directives on an element and return a linker.\n     *\n     * @param {Array|NamedNodeMap} attrs\n     * @param {Object} options\n     * @return {Function}\n     */\n\n    function compileDirectives(attrs, options) {\n        var i = attrs.length;\n        var dirs = [];\n        var attr, name, value, rawName, rawValue, dirName, arg, modifiers, dirDef, tokens, matched;\n        while (i--) {\n            attr = attrs[i];\n            name = rawName = attr.name;\n            value = rawValue = attr.value;\n            tokens = parseText(value);\n            // reset arg\n            arg = null;\n            // check modifiers\n            modifiers = parseModifiers(name);\n            name = name.replace(modifierRE, '');\n\n            // attribute interpolations\n            if (tokens) {\n                value = tokensToExp(tokens);\n                arg = name;\n                pushDir('bind', directives.bind, tokens);\n                // warn against mixing mustaches with v-bind\n                if ('development' !== 'production') {\n                    if (name === 'class' && Array.prototype.some.call(attrs, function (attr) {\n                            return attr.name === ':class' || attr.name === 'v-bind:class';\n                        })) {\n                        warn('class=\"' + rawValue + '\": Do not mix mustache interpolation ' + 'and v-bind for \"class\" on the same element. Use one or the other.', options);\n                    }\n                }\n            } else\n\n            // special attribute: transition\n            if (transitionRE.test(name)) {\n                modifiers.literal = !bindRE.test(name);\n                pushDir('transition', internalDirectives.transition);\n            } else\n\n            // event handlers\n            if (onRE.test(name)) {\n                arg = name.replace(onRE, '');\n                pushDir('on', directives.on);\n            } else\n\n            // attribute bindings\n            if (bindRE.test(name)) {\n                dirName = name.replace(bindRE, '');\n                if (dirName === 'style' || dirName === 'class') {\n                    pushDir(dirName, internalDirectives[dirName]);\n                } else {\n                    arg = dirName;\n                    pushDir('bind', directives.bind);\n                }\n            } else\n\n            // normal directives\n            if (matched = name.match(dirAttrRE)) {\n                dirName = matched[1];\n                arg = matched[2];\n\n                // skip v-else (when used with v-show)\n                if (dirName === 'else') {\n                    continue;\n                }\n\n                dirDef = resolveAsset(options, 'directives', dirName, true);\n                if (dirDef) {\n                    pushDir(dirName, dirDef);\n                }\n            }\n        }\n\n        /**\n         * Push a directive.\n         *\n         * @param {String} dirName\n         * @param {Object|Function} def\n         * @param {Array} [interpTokens]\n         */\n\n        function pushDir(dirName, def, interpTokens) {\n            var hasOneTimeToken = interpTokens && hasOneTime(interpTokens);\n            var parsed = !hasOneTimeToken && parseDirective(value);\n            dirs.push({\n                name: dirName,\n                attr: rawName,\n                raw: rawValue,\n                def: def,\n                arg: arg,\n                modifiers: modifiers,\n                // conversion from interpolation strings with one-time token\n                // to expression is differed until directive bind time so that we\n                // have access to the actual vm context for one-time bindings.\n                expression: parsed && parsed.expression,\n                filters: parsed && parsed.filters,\n                interp: interpTokens,\n                hasOneTime: hasOneTimeToken\n            });\n        }\n\n        if (dirs.length) {\n            return makeNodeLinkFn(dirs);\n        }\n    }\n\n    /**\n     * Parse modifiers from directive attribute name.\n     *\n     * @param {String} name\n     * @return {Object}\n     */\n\n    function parseModifiers(name) {\n        var res = Object.create(null);\n        var match = name.match(modifierRE);\n        if (match) {\n            var i = match.length;\n            while (i--) {\n                res[match[i].slice(1)] = true;\n            }\n        }\n        return res;\n    }\n\n    /**\n     * Build a link function for all directives on a single node.\n     *\n     * @param {Array} directives\n     * @return {Function} directivesLinkFn\n     */\n\n    function makeNodeLinkFn(directives) {\n        return function nodeLinkFn(vm, el, host, scope, frag) {\n            // reverse apply because it's sorted low to high\n            var i = directives.length;\n            while (i--) {\n                vm._bindDir(directives[i], el, host, scope, frag);\n            }\n        };\n    }\n\n    /**\n     * Check if an interpolation string contains one-time tokens.\n     *\n     * @param {Array} tokens\n     * @return {Boolean}\n     */\n\n    function hasOneTime(tokens) {\n        var i = tokens.length;\n        while (i--) {\n            if (tokens[i].oneTime) return true;\n        }\n    }\n\n    function isScript(el) {\n        return el.tagName === 'SCRIPT' && (!el.hasAttribute('type') || el.getAttribute('type') === 'text/javascript');\n    }\n\n    var specialCharRE = /[^\\w\\-:\\.]/;\n\n    /**\n     * Process an element or a DocumentFragment based on a\n     * instance option object. This allows us to transclude\n     * a template node/fragment before the instance is created,\n     * so the processed fragment can then be cloned and reused\n     * in v-for.\n     *\n     * @param {Element} el\n     * @param {Object} options\n     * @return {Element|DocumentFragment}\n     */\n\n    function transclude(el, options) {\n        // extract container attributes to pass them down\n        // to compiler, because they need to be compiled in\n        // parent scope. we are mutating the options object here\n        // assuming the same object will be used for compile\n        // right after this.\n        if (options) {\n            options._containerAttrs = extractAttrs(el);\n        }\n        // for template tags, what we want is its content as\n        // a documentFragment (for fragment instances)\n        if (isTemplate(el)) {\n            el = parseTemplate(el);\n        }\n        if (options) {\n            if (options._asComponent && !options.template) {\n                options.template = '<slot></slot>';\n            }\n            if (options.template) {\n                options._content = extractContent(el);\n                el = transcludeTemplate(el, options);\n            }\n        }\n        if (isFragment(el)) {\n            // anchors for fragment instance\n            // passing in `persist: true` to avoid them being\n            // discarded by IE during template cloning\n            prepend(createAnchor('v-start', true), el);\n            el.appendChild(createAnchor('v-end', true));\n        }\n        return el;\n    }\n\n    /**\n     * Process the template option.\n     * If the replace option is true this will swap the $el.\n     *\n     * @param {Element} el\n     * @param {Object} options\n     * @return {Element|DocumentFragment}\n     */\n\n    function transcludeTemplate(el, options) {\n        var template = options.template;\n        var frag = parseTemplate(template, true);\n        if (frag) {\n            var replacer = frag.firstChild;\n            var tag = replacer.tagName && replacer.tagName.toLowerCase();\n            if (options.replace) {\n                /* istanbul ignore if */\n                if (el === document.body) {\n                    'development' !== 'production' && warn('You are mounting an instance with a template to ' + '<body>. This will replace <body> entirely. You ' + 'should probably use `replace: false` here.');\n                }\n                // there are many cases where the instance must\n                // become a fragment instance: basically anything that\n                // can create more than 1 root nodes.\n                if (\n                    // multi-children template\n                frag.childNodes.length > 1 ||\n                // non-element template\n                replacer.nodeType !== 1 ||\n                // single nested component\n                tag === 'component' || resolveAsset(options, 'components', tag) || hasBindAttr(replacer, 'is') ||\n                // element directive\n                resolveAsset(options, 'elementDirectives', tag) ||\n                // for block\n                replacer.hasAttribute('v-for') ||\n                // if block\n                replacer.hasAttribute('v-if')) {\n                    return frag;\n                } else {\n                    options._replacerAttrs = extractAttrs(replacer);\n                    mergeAttrs(el, replacer);\n                    return replacer;\n                }\n            } else {\n                el.appendChild(frag);\n                return el;\n            }\n        } else {\n            'development' !== 'production' && warn('Invalid template option: ' + template);\n        }\n    }\n\n    /**\n     * Helper to extract a component container's attributes\n     * into a plain object array.\n     *\n     * @param {Element} el\n     * @return {Array}\n     */\n\n    function extractAttrs(el) {\n        if (el.nodeType === 1 && el.hasAttributes()) {\n            return toArray(el.attributes);\n        }\n    }\n\n    /**\n     * Merge the attributes of two elements, and make sure\n     * the class names are merged properly.\n     *\n     * @param {Element} from\n     * @param {Element} to\n     */\n\n    function mergeAttrs(from, to) {\n        var attrs = from.attributes;\n        var i = attrs.length;\n        var name, value;\n        while (i--) {\n            name = attrs[i].name;\n            value = attrs[i].value;\n            if (!to.hasAttribute(name) && !specialCharRE.test(name)) {\n                to.setAttribute(name, value);\n            } else if (name === 'class' && !parseText(value) && (value = value.trim())) {\n                value.split(/\\s+/).forEach(function (cls) {\n                    addClass(to, cls);\n                });\n            }\n        }\n    }\n\n    /**\n     * Scan and determine slot content distribution.\n     * We do this during transclusion instead at compile time so that\n     * the distribution is decoupled from the compilation order of\n     * the slots.\n     *\n     * @param {Element|DocumentFragment} template\n     * @param {Element} content\n     * @param {Vue} vm\n     */\n\n    function resolveSlots(vm, content) {\n        if (!content) {\n            return;\n        }\n        var contents = vm._slotContents = Object.create(null);\n        var el, name;\n        for (var i = 0, l = content.children.length; i < l; i++) {\n            el = content.children[i];\n            /* eslint-disable no-cond-assign */\n            if (name = el.getAttribute('slot')) {\n                (contents[name] || (contents[name] = [])).push(el);\n            }\n            /* eslint-enable no-cond-assign */\n            if ('development' !== 'production' && getBindAttr(el, 'slot')) {\n                warn('The \"slot\" attribute must be static.', vm.$parent);\n            }\n        }\n        for (name in contents) {\n            contents[name] = extractFragment(contents[name], content);\n        }\n        if (content.hasChildNodes()) {\n            var nodes = content.childNodes;\n            if (nodes.length === 1 && nodes[0].nodeType === 3 && !nodes[0].data.trim()) {\n                return;\n            }\n            contents['default'] = extractFragment(content.childNodes, content);\n        }\n    }\n\n    /**\n     * Extract qualified content nodes from a node list.\n     *\n     * @param {NodeList} nodes\n     * @return {DocumentFragment}\n     */\n\n    function extractFragment(nodes, parent) {\n        var frag = document.createDocumentFragment();\n        nodes = toArray(nodes);\n        for (var i = 0, l = nodes.length; i < l; i++) {\n            var node = nodes[i];\n            if (isTemplate(node) && !node.hasAttribute('v-if') && !node.hasAttribute('v-for')) {\n                parent.removeChild(node);\n                node = parseTemplate(node, true);\n            }\n            frag.appendChild(node);\n        }\n        return frag;\n    }\n\n\n\n    var compiler = Object.freeze({\n        compile: compile,\n        compileAndLinkProps: compileAndLinkProps,\n        compileRoot: compileRoot,\n        transclude: transclude,\n        resolveSlots: resolveSlots\n    });\n\n    function stateMixin (Vue) {\n        /**\n         * Accessor for `$data` property, since setting $data\n         * requires observing the new object and updating\n         * proxied properties.\n         */\n\n        Object.defineProperty(Vue.prototype, '$data', {\n            get: function get() {\n                return this._data;\n            },\n            set: function set(newData) {\n                if (newData !== this._data) {\n                    this._setData(newData);\n                }\n            }\n        });\n\n        /**\n         * Setup the scope of an instance, which contains:\n         * - observed data\n         * - computed properties\n         * - user methods\n         * - meta properties\n         */\n\n        Vue.prototype._initState = function () {\n            this._initProps();\n            this._initMeta();\n            this._initMethods();\n            this._initData();\n            this._initComputed();\n        };\n\n        /**\n         * Initialize props.\n         */\n\n        Vue.prototype._initProps = function () {\n            var options = this.$options;\n            var el = options.el;\n            var props = options.props;\n            if (props && !el) {\n                'development' !== 'production' && warn('Props will not be compiled if no `el` option is ' + 'provided at instantiation.', this);\n            }\n            // make sure to convert string selectors into element now\n            el = options.el = query(el);\n            this._propsUnlinkFn = el && el.nodeType === 1 && props\n                // props must be linked in proper scope if inside v-for\n                ? compileAndLinkProps(this, el, props, this._scope) : null;\n        };\n\n        /**\n         * Initialize the data.\n         */\n\n        Vue.prototype._initData = function () {\n            var dataFn = this.$options.data;\n            var data = this._data = dataFn ? dataFn() : {};\n            if (!isPlainObject(data)) {\n                data = {};\n                'development' !== 'production' && warn('data functions should return an object.', this);\n            }\n            var props = this._props;\n            // proxy data on instance\n            var keys = Object.keys(data);\n            var i, key;\n            i = keys.length;\n            while (i--) {\n                key = keys[i];\n                // there are two scenarios where we can proxy a data key:\n                // 1. it's not already defined as a prop\n                // 2. it's provided via a instantiation option AND there are no\n                //    template prop present\n                if (!props || !hasOwn(props, key)) {\n                    this._proxy(key);\n                } else if ('development' !== 'production') {\n                    warn('Data field \"' + key + '\" is already defined ' + 'as a prop. To provide default value for a prop, use the \"default\" ' + 'prop option; if you want to pass prop values to an instantiation ' + 'call, use the \"propsData\" option.', this);\n                }\n            }\n            // observe data\n            observe(data, this);\n        };\n\n        /**\n         * Swap the instance's $data. Called in $data's setter.\n         *\n         * @param {Object} newData\n         */\n\n        Vue.prototype._setData = function (newData) {\n            newData = newData || {};\n            var oldData = this._data;\n            this._data = newData;\n            var keys, key, i;\n            // unproxy keys not present in new data\n            keys = Object.keys(oldData);\n            i = keys.length;\n            while (i--) {\n                key = keys[i];\n                if (!(key in newData)) {\n                    this._unproxy(key);\n                }\n            }\n            // proxy keys not already proxied,\n            // and trigger change for changed values\n            keys = Object.keys(newData);\n            i = keys.length;\n            while (i--) {\n                key = keys[i];\n                if (!hasOwn(this, key)) {\n                    // new property\n                    this._proxy(key);\n                }\n            }\n            oldData.__ob__.removeVm(this);\n            observe(newData, this);\n            this._digest();\n        };\n\n        /**\n         * Proxy a property, so that\n         * vm.prop === vm._data.prop\n         *\n         * @param {String} key\n         */\n\n        Vue.prototype._proxy = function (key) {\n            if (!isReserved(key)) {\n                // need to store ref to self here\n                // because these getter/setters might\n                // be called by child scopes via\n                // prototype inheritance.\n                var self = this;\n                Object.defineProperty(self, key, {\n                    configurable: true,\n                    enumerable: true,\n                    get: function proxyGetter() {\n                        return self._data[key];\n                    },\n                    set: function proxySetter(val) {\n                        self._data[key] = val;\n                    }\n                });\n            }\n        };\n\n        /**\n         * Unproxy a property.\n         *\n         * @param {String} key\n         */\n\n        Vue.prototype._unproxy = function (key) {\n            if (!isReserved(key)) {\n                delete this[key];\n            }\n        };\n\n        /**\n         * Force update on every watcher in scope.\n         */\n\n        Vue.prototype._digest = function () {\n            for (var i = 0, l = this._watchers.length; i < l; i++) {\n                this._watchers[i].update(true); // shallow updates\n            }\n        };\n\n        /**\n         * Setup computed properties. They are essentially\n         * special getter/setters\n         */\n\n        function noop() {}\n        Vue.prototype._initComputed = function () {\n            var computed = this.$options.computed;\n            if (computed) {\n                for (var key in computed) {\n                    var userDef = computed[key];\n                    var def = {\n                        enumerable: true,\n                        configurable: true\n                    };\n                    if (typeof userDef === 'function') {\n                        def.get = makeComputedGetter(userDef, this);\n                        def.set = noop;\n                    } else {\n                        def.get = userDef.get ? userDef.cache !== false ? makeComputedGetter(userDef.get, this) : bind(userDef.get, this) : noop;\n                        def.set = userDef.set ? bind(userDef.set, this) : noop;\n                    }\n                    Object.defineProperty(this, key, def);\n                }\n            }\n        };\n\n        function makeComputedGetter(getter, owner) {\n            var watcher = new Watcher(owner, getter, null, {\n                lazy: true\n            });\n            return function computedGetter() {\n                if (watcher.dirty) {\n                    watcher.evaluate();\n                }\n                if (Dep.target) {\n                    watcher.depend();\n                }\n                return watcher.value;\n            };\n        }\n\n        /**\n         * Setup instance methods. Methods must be bound to the\n         * instance since they might be passed down as a prop to\n         * child components.\n         */\n\n        Vue.prototype._initMethods = function () {\n            var methods = this.$options.methods;\n            if (methods) {\n                for (var key in methods) {\n                    this[key] = bind(methods[key], this);\n                }\n            }\n        };\n\n        /**\n         * Initialize meta information like $index, $key & $value.\n         */\n\n        Vue.prototype._initMeta = function () {\n            var metas = this.$options._meta;\n            if (metas) {\n                for (var key in metas) {\n                    defineReactive(this, key, metas[key]);\n                }\n            }\n        };\n    }\n\n    var eventRE = /^v-on:|^@/;\n\n    function eventsMixin (Vue) {\n        /**\n         * Setup the instance's option events & watchers.\n         * If the value is a string, we pull it from the\n         * instance's methods by name.\n         */\n\n        Vue.prototype._initEvents = function () {\n            var options = this.$options;\n            if (options._asComponent) {\n                registerComponentEvents(this, options.el);\n            }\n            registerCallbacks(this, '$on', options.events);\n            registerCallbacks(this, '$watch', options.watch);\n        };\n\n        /**\n         * Register v-on events on a child component\n         *\n         * @param {Vue} vm\n         * @param {Element} el\n         */\n\n        function registerComponentEvents(vm, el) {\n            var attrs = el.attributes;\n            var name, value, handler;\n            for (var i = 0, l = attrs.length; i < l; i++) {\n                name = attrs[i].name;\n                if (eventRE.test(name)) {\n                    name = name.replace(eventRE, '');\n                    // force the expression into a statement so that\n                    // it always dynamically resolves the method to call (#2670)\n                    // kinda ugly hack, but does the job.\n                    value = attrs[i].value;\n                    if (isSimplePath(value)) {\n                        value += '.apply(this, $arguments)';\n                    }\n                    handler = (vm._scope || vm._context).$eval(value, true);\n                    handler._fromParent = true;\n                    vm.$on(name.replace(eventRE), handler);\n                }\n            }\n        }\n\n        /**\n         * Register callbacks for option events and watchers.\n         *\n         * @param {Vue} vm\n         * @param {String} action\n         * @param {Object} hash\n         */\n\n        function registerCallbacks(vm, action, hash) {\n            if (!hash) return;\n            var handlers, key, i, j;\n            for (key in hash) {\n                handlers = hash[key];\n                if (isArray(handlers)) {\n                    for (i = 0, j = handlers.length; i < j; i++) {\n                        register(vm, action, key, handlers[i]);\n                    }\n                } else {\n                    register(vm, action, key, handlers);\n                }\n            }\n        }\n\n        /**\n         * Helper to register an event/watch callback.\n         *\n         * @param {Vue} vm\n         * @param {String} action\n         * @param {String} key\n         * @param {Function|String|Object} handler\n         * @param {Object} [options]\n         */\n\n        function register(vm, action, key, handler, options) {\n            var type = typeof handler;\n            if (type === 'function') {\n                vm[action](key, handler, options);\n            } else if (type === 'string') {\n                var methods = vm.$options.methods;\n                var method = methods && methods[handler];\n                if (method) {\n                    vm[action](key, method, options);\n                } else {\n                    'development' !== 'production' && warn('Unknown method: \"' + handler + '\" when ' + 'registering callback for ' + action + ': \"' + key + '\".', vm);\n                }\n            } else if (handler && type === 'object') {\n                register(vm, action, key, handler.handler, handler);\n            }\n        }\n\n        /**\n         * Setup recursive attached/detached calls\n         */\n\n        Vue.prototype._initDOMHooks = function () {\n            this.$on('hook:attached', onAttached);\n            this.$on('hook:detached', onDetached);\n        };\n\n        /**\n         * Callback to recursively call attached hook on children\n         */\n\n        function onAttached() {\n            if (!this._isAttached) {\n                this._isAttached = true;\n                this.$children.forEach(callAttach);\n            }\n        }\n\n        /**\n         * Iterator to call attached hook\n         *\n         * @param {Vue} child\n         */\n\n        function callAttach(child) {\n            if (!child._isAttached && inDoc(child.$el)) {\n                child._callHook('attached');\n            }\n        }\n\n        /**\n         * Callback to recursively call detached hook on children\n         */\n\n        function onDetached() {\n            if (this._isAttached) {\n                this._isAttached = false;\n                this.$children.forEach(callDetach);\n            }\n        }\n\n        /**\n         * Iterator to call detached hook\n         *\n         * @param {Vue} child\n         */\n\n        function callDetach(child) {\n            if (child._isAttached && !inDoc(child.$el)) {\n                child._callHook('detached');\n            }\n        }\n\n        /**\n         * Trigger all handlers for a hook\n         *\n         * @param {String} hook\n         */\n\n        Vue.prototype._callHook = function (hook) {\n            this.$emit('pre-hook:' + hook);\n            var handlers = this.$options[hook];\n            if (handlers) {\n                for (var i = 0, j = handlers.length; i < j; i++) {\n                    handlers[i].call(this);\n                }\n            }\n            this.$emit('hook:' + hook);\n        };\n    }\n\n    function noop() {}\n\n    /**\n     * A directive links a DOM element with a piece of data,\n     * which is the result of evaluating an expression.\n     * It registers a watcher with the expression and calls\n     * the DOM update function when a change is triggered.\n     *\n     * @param {Object} descriptor\n     *                 - {String} name\n     *                 - {Object} def\n     *                 - {String} expression\n     *                 - {Array<Object>} [filters]\n     *                 - {Object} [modifiers]\n     *                 - {Boolean} literal\n     *                 - {String} attr\n     *                 - {String} arg\n     *                 - {String} raw\n     *                 - {String} [ref]\n     *                 - {Array<Object>} [interp]\n     *                 - {Boolean} [hasOneTime]\n     * @param {Vue} vm\n     * @param {Node} el\n     * @param {Vue} [host] - transclusion host component\n     * @param {Object} [scope] - v-for scope\n     * @param {Fragment} [frag] - owner fragment\n     * @constructor\n     */\n    function Directive(descriptor, vm, el, host, scope, frag) {\n        this.vm = vm;\n        this.el = el;\n        // copy descriptor properties\n        this.descriptor = descriptor;\n        this.name = descriptor.name;\n        this.expression = descriptor.expression;\n        this.arg = descriptor.arg;\n        this.modifiers = descriptor.modifiers;\n        this.filters = descriptor.filters;\n        this.literal = this.modifiers && this.modifiers.literal;\n        // private\n        this._locked = false;\n        this._bound = false;\n        this._listeners = null;\n        // link context\n        this._host = host;\n        this._scope = scope;\n        this._frag = frag;\n        // store directives on node in dev mode\n        if ('development' !== 'production' && this.el) {\n            this.el._vue_directives = this.el._vue_directives || [];\n            this.el._vue_directives.push(this);\n        }\n    }\n\n    /**\n     * Initialize the directive, mixin definition properties,\n     * setup the watcher, call definition bind() and update()\n     * if present.\n     */\n\n    Directive.prototype._bind = function () {\n        var name = this.name;\n        var descriptor = this.descriptor;\n\n        // remove attribute\n        if ((name !== 'cloak' || this.vm._isCompiled) && this.el && this.el.removeAttribute) {\n            var attr = descriptor.attr || 'v-' + name;\n            this.el.removeAttribute(attr);\n        }\n\n        // copy def properties\n        var def = descriptor.def;\n        if (typeof def === 'function') {\n            this.update = def;\n        } else {\n            extend(this, def);\n        }\n\n        // setup directive params\n        this._setupParams();\n\n        // initial bind\n        if (this.bind) {\n            this.bind();\n        }\n        this._bound = true;\n\n        if (this.literal) {\n            this.update && this.update(descriptor.raw);\n        } else if ((this.expression || this.modifiers) && (this.update || this.twoWay) && !this._checkStatement()) {\n            // wrapped updater for context\n            var dir = this;\n            if (this.update) {\n                this._update = function (val, oldVal) {\n                    if (!dir._locked) {\n                        dir.update(val, oldVal);\n                    }\n                };\n            } else {\n                this._update = noop;\n            }\n            var preProcess = this._preProcess ? bind(this._preProcess, this) : null;\n            var postProcess = this._postProcess ? bind(this._postProcess, this) : null;\n            var watcher = this._watcher = new Watcher(this.vm, this.expression, this._update, // callback\n                {\n                    filters: this.filters,\n                    twoWay: this.twoWay,\n                    deep: this.deep,\n                    preProcess: preProcess,\n                    postProcess: postProcess,\n                    scope: this._scope\n                });\n            // v-model with inital inline value need to sync back to\n            // model instead of update to DOM on init. They would\n            // set the afterBind hook to indicate that.\n            if (this.afterBind) {\n                this.afterBind();\n            } else if (this.update) {\n                this.update(watcher.value);\n            }\n        }\n    };\n\n    /**\n     * Setup all param attributes, e.g. track-by,\n     * transition-mode, etc...\n     */\n\n    Directive.prototype._setupParams = function () {\n        if (!this.params) {\n            return;\n        }\n        var params = this.params;\n        // swap the params array with a fresh object.\n        this.params = Object.create(null);\n        var i = params.length;\n        var key, val, mappedKey;\n        while (i--) {\n            key = hyphenate(params[i]);\n            mappedKey = camelize(key);\n            val = getBindAttr(this.el, key);\n            if (val != null) {\n                // dynamic\n                this._setupParamWatcher(mappedKey, val);\n            } else {\n                // static\n                val = getAttr(this.el, key);\n                if (val != null) {\n                    this.params[mappedKey] = val === '' ? true : val;\n                }\n            }\n        }\n    };\n\n    /**\n     * Setup a watcher for a dynamic param.\n     *\n     * @param {String} key\n     * @param {String} expression\n     */\n\n    Directive.prototype._setupParamWatcher = function (key, expression) {\n        var self = this;\n        var called = false;\n        var unwatch = (this._scope || this.vm).$watch(expression, function (val, oldVal) {\n            self.params[key] = val;\n            // since we are in immediate mode,\n            // only call the param change callbacks if this is not the first update.\n            if (called) {\n                var cb = self.paramWatchers && self.paramWatchers[key];\n                if (cb) {\n                    cb.call(self, val, oldVal);\n                }\n            } else {\n                called = true;\n            }\n        }, {\n            immediate: true,\n            user: false\n        });(this._paramUnwatchFns || (this._paramUnwatchFns = [])).push(unwatch);\n    };\n\n    /**\n     * Check if the directive is a function caller\n     * and if the expression is a callable one. If both true,\n     * we wrap up the expression and use it as the event\n     * handler.\n     *\n     * e.g. on-click=\"a++\"\n     *\n     * @return {Boolean}\n     */\n\n    Directive.prototype._checkStatement = function () {\n        var expression = this.expression;\n        if (expression && this.acceptStatement && !isSimplePath(expression)) {\n            var fn = parseExpression(expression).get;\n            var scope = this._scope || this.vm;\n            var handler = function handler(e) {\n                scope.$event = e;\n                fn.call(scope, scope);\n                scope.$event = null;\n            };\n            if (this.filters) {\n                handler = scope._applyFilters(handler, null, this.filters);\n            }\n            this.update(handler);\n            return true;\n        }\n    };\n\n    /**\n     * Set the corresponding value with the setter.\n     * This should only be used in two-way directives\n     * e.g. v-model.\n     *\n     * @param {*} value\n     * @public\n     */\n\n    Directive.prototype.set = function (value) {\n        /* istanbul ignore else */\n        if (this.twoWay) {\n            this._withLock(function () {\n                this._watcher.set(value);\n            });\n        } else if ('development' !== 'production') {\n            warn('Directive.set() can only be used inside twoWay' + 'directives.');\n        }\n    };\n\n    /**\n     * Execute a function while preventing that function from\n     * triggering updates on this directive instance.\n     *\n     * @param {Function} fn\n     */\n\n    Directive.prototype._withLock = function (fn) {\n        var self = this;\n        self._locked = true;\n        fn.call(self);\n        nextTick(function () {\n            self._locked = false;\n        });\n    };\n\n    /**\n     * Convenience method that attaches a DOM event listener\n     * to the directive element and autometically tears it down\n     * during unbind.\n     *\n     * @param {String} event\n     * @param {Function} handler\n     * @param {Boolean} [useCapture]\n     */\n\n    Directive.prototype.on = function (event, handler, useCapture) {\n        on(this.el, event, handler, useCapture);(this._listeners || (this._listeners = [])).push([event, handler]);\n    };\n\n    /**\n     * Teardown the watcher and call unbind.\n     */\n\n    Directive.prototype._teardown = function () {\n        if (this._bound) {\n            this._bound = false;\n            if (this.unbind) {\n                this.unbind();\n            }\n            if (this._watcher) {\n                this._watcher.teardown();\n            }\n            var listeners = this._listeners;\n            var i;\n            if (listeners) {\n                i = listeners.length;\n                while (i--) {\n                    off(this.el, listeners[i][0], listeners[i][1]);\n                }\n            }\n            var unwatchFns = this._paramUnwatchFns;\n            if (unwatchFns) {\n                i = unwatchFns.length;\n                while (i--) {\n                    unwatchFns[i]();\n                }\n            }\n            if ('development' !== 'production' && this.el) {\n                this.el._vue_directives.$remove(this);\n            }\n            this.vm = this.el = this._watcher = this._listeners = null;\n        }\n    };\n\n    function lifecycleMixin (Vue) {\n        /**\n         * Update v-ref for component.\n         *\n         * @param {Boolean} remove\n         */\n\n        Vue.prototype._updateRef = function (remove) {\n            var ref = this.$options._ref;\n            if (ref) {\n                var refs = (this._scope || this._context).$refs;\n                if (remove) {\n                    if (refs[ref] === this) {\n                        refs[ref] = null;\n                    }\n                } else {\n                    refs[ref] = this;\n                }\n            }\n        };\n\n        /**\n         * Transclude, compile and link element.\n         *\n         * If a pre-compiled linker is available, that means the\n         * passed in element will be pre-transcluded and compiled\n         * as well - all we need to do is to call the linker.\n         *\n         * Otherwise we need to call transclude/compile/link here.\n         *\n         * @param {Element} el\n         */\n\n        Vue.prototype._compile = function (el) {\n            var options = this.$options;\n\n            // transclude and init element\n            // transclude can potentially replace original\n            // so we need to keep reference; this step also injects\n            // the template and caches the original attributes\n            // on the container node and replacer node.\n            var original = el;\n            el = transclude(el, options);\n            this._initElement(el);\n\n            // handle v-pre on root node (#2026)\n            if (el.nodeType === 1 && getAttr(el, 'v-pre') !== null) {\n                return;\n            }\n\n            // root is always compiled per-instance, because\n            // container attrs and props can be different every time.\n            var contextOptions = this._context && this._context.$options;\n            var rootLinker = compileRoot(el, options, contextOptions);\n\n            // resolve slot distribution\n            resolveSlots(this, options._content);\n\n            // compile and link the rest\n            var contentLinkFn;\n            var ctor = this.constructor;\n            // component compilation can be cached\n            // as long as it's not using inline-template\n            if (options._linkerCachable) {\n                contentLinkFn = ctor.linker;\n                if (!contentLinkFn) {\n                    contentLinkFn = ctor.linker = compile(el, options);\n                }\n            }\n\n            // link phase\n            // make sure to link root with prop scope!\n            var rootUnlinkFn = rootLinker(this, el, this._scope);\n            var contentUnlinkFn = contentLinkFn ? contentLinkFn(this, el) : compile(el, options)(this, el);\n\n            // register composite unlink function\n            // to be called during instance destruction\n            this._unlinkFn = function () {\n                rootUnlinkFn();\n                // passing destroying: true to avoid searching and\n                // splicing the directives\n                contentUnlinkFn(true);\n            };\n\n            // finally replace original\n            if (options.replace) {\n                replace(original, el);\n            }\n\n            this._isCompiled = true;\n            this._callHook('compiled');\n        };\n\n        /**\n         * Initialize instance element. Called in the public\n         * $mount() method.\n         *\n         * @param {Element} el\n         */\n\n        Vue.prototype._initElement = function (el) {\n            if (isFragment(el)) {\n                this._isFragment = true;\n                this.$el = this._fragmentStart = el.firstChild;\n                this._fragmentEnd = el.lastChild;\n                // set persisted text anchors to empty\n                if (this._fragmentStart.nodeType === 3) {\n                    this._fragmentStart.data = this._fragmentEnd.data = '';\n                }\n                this._fragment = el;\n            } else {\n                this.$el = el;\n            }\n            this.$el.__vue__ = this;\n            this._callHook('beforeCompile');\n        };\n\n        /**\n         * Create and bind a directive to an element.\n         *\n         * @param {Object} descriptor - parsed directive descriptor\n         * @param {Node} node   - target node\n         * @param {Vue} [host] - transclusion host component\n         * @param {Object} [scope] - v-for scope\n         * @param {Fragment} [frag] - owner fragment\n         */\n\n        Vue.prototype._bindDir = function (descriptor, node, host, scope, frag) {\n            this._directives.push(new Directive(descriptor, this, node, host, scope, frag));\n        };\n\n        /**\n         * Teardown an instance, unobserves the data, unbind all the\n         * directives, turn off all the event listeners, etc.\n         *\n         * @param {Boolean} remove - whether to remove the DOM node.\n         * @param {Boolean} deferCleanup - if true, defer cleanup to\n         *                                 be called later\n         */\n\n        Vue.prototype._destroy = function (remove, deferCleanup) {\n            if (this._isBeingDestroyed) {\n                if (!deferCleanup) {\n                    this._cleanup();\n                }\n                return;\n            }\n\n            var destroyReady;\n            var pendingRemoval;\n\n            var self = this;\n            // Cleanup should be called either synchronously or asynchronoysly as\n            // callback of this.$remove(), or if remove and deferCleanup are false.\n            // In any case it should be called after all other removing, unbinding and\n            // turning of is done\n            var cleanupIfPossible = function cleanupIfPossible() {\n                if (destroyReady && !pendingRemoval && !deferCleanup) {\n                    self._cleanup();\n                }\n            };\n\n            // remove DOM element\n            if (remove && this.$el) {\n                pendingRemoval = true;\n                this.$remove(function () {\n                    pendingRemoval = false;\n                    cleanupIfPossible();\n                });\n            }\n\n            this._callHook('beforeDestroy');\n            this._isBeingDestroyed = true;\n            var i;\n            // remove self from parent. only necessary\n            // if parent is not being destroyed as well.\n            var parent = this.$parent;\n            if (parent && !parent._isBeingDestroyed) {\n                parent.$children.$remove(this);\n                // unregister ref (remove: true)\n                this._updateRef(true);\n            }\n            // destroy all children.\n            i = this.$children.length;\n            while (i--) {\n                this.$children[i].$destroy();\n            }\n            // teardown props\n            if (this._propsUnlinkFn) {\n                this._propsUnlinkFn();\n            }\n            // teardown all directives. this also tearsdown all\n            // directive-owned watchers.\n            if (this._unlinkFn) {\n                this._unlinkFn();\n            }\n            i = this._watchers.length;\n            while (i--) {\n                this._watchers[i].teardown();\n            }\n            // remove reference to self on $el\n            if (this.$el) {\n                this.$el.__vue__ = null;\n            }\n\n            destroyReady = true;\n            cleanupIfPossible();\n        };\n\n        /**\n         * Clean up to ensure garbage collection.\n         * This is called after the leave transition if there\n         * is any.\n         */\n\n        Vue.prototype._cleanup = function () {\n            if (this._isDestroyed) {\n                return;\n            }\n            // remove self from owner fragment\n            // do it in cleanup so that we can call $destroy with\n            // defer right when a fragment is about to be removed.\n            if (this._frag) {\n                this._frag.children.$remove(this);\n            }\n            // remove reference from data ob\n            // frozen object may not have observer.\n            if (this._data && this._data.__ob__) {\n                this._data.__ob__.removeVm(this);\n            }\n            // Clean up references to private properties and other\n            // instances. preserve reference to _data so that proxy\n            // accessors still work. The only potential side effect\n            // here is that mutating the instance after it's destroyed\n            // may affect the state of other components that are still\n            // observing the same object, but that seems to be a\n            // reasonable responsibility for the user rather than\n            // always throwing an error on them.\n            this.$el = this.$parent = this.$root = this.$children = this._watchers = this._context = this._scope = this._directives = null;\n            // call the last hook...\n            this._isDestroyed = true;\n            this._callHook('destroyed');\n            // turn off all instance listeners.\n            this.$off();\n        };\n    }\n\n    function miscMixin (Vue) {\n        /**\n         * Apply a list of filter (descriptors) to a value.\n         * Using plain for loops here because this will be called in\n         * the getter of any watcher with filters so it is very\n         * performance sensitive.\n         *\n         * @param {*} value\n         * @param {*} [oldValue]\n         * @param {Array} filters\n         * @param {Boolean} write\n         * @return {*}\n         */\n\n        Vue.prototype._applyFilters = function (value, oldValue, filters, write) {\n            var filter, fn, args, arg, offset, i, l, j, k;\n            for (i = 0, l = filters.length; i < l; i++) {\n                filter = filters[write ? l - i - 1 : i];\n                fn = resolveAsset(this.$options, 'filters', filter.name, true);\n                if (!fn) continue;\n                fn = write ? fn.write : fn.read || fn;\n                if (typeof fn !== 'function') continue;\n                args = write ? [value, oldValue] : [value];\n                offset = write ? 2 : 1;\n                if (filter.args) {\n                    for (j = 0, k = filter.args.length; j < k; j++) {\n                        arg = filter.args[j];\n                        args[j + offset] = arg.dynamic ? this.$get(arg.value) : arg.value;\n                    }\n                }\n                value = fn.apply(this, args);\n            }\n            return value;\n        };\n\n        /**\n         * Resolve a component, depending on whether the component\n         * is defined normally or using an async factory function.\n         * Resolves synchronously if already resolved, otherwise\n         * resolves asynchronously and caches the resolved\n         * constructor on the factory.\n         *\n         * @param {String|Function} value\n         * @param {Function} cb\n         */\n\n        Vue.prototype._resolveComponent = function (value, cb) {\n            var factory;\n            if (typeof value === 'function') {\n                factory = value;\n            } else {\n                factory = resolveAsset(this.$options, 'components', value, true);\n            }\n            /* istanbul ignore if */\n            if (!factory) {\n                return;\n            }\n            // async component factory\n            if (!factory.options) {\n                if (factory.resolved) {\n                    // cached\n                    cb(factory.resolved);\n                } else if (factory.requested) {\n                    // pool callbacks\n                    factory.pendingCallbacks.push(cb);\n                } else {\n                    factory.requested = true;\n                    var cbs = factory.pendingCallbacks = [cb];\n                    factory.call(this, function resolve(res) {\n                        if (isPlainObject(res)) {\n                            res = Vue.extend(res);\n                        }\n                        // cache resolved\n                        factory.resolved = res;\n                        // invoke callbacks\n                        for (var i = 0, l = cbs.length; i < l; i++) {\n                            cbs[i](res);\n                        }\n                    }, function reject(reason) {\n                        'development' !== 'production' && warn('Failed to resolve async component' + (typeof value === 'string' ? ': ' + value : '') + '. ' + (reason ? '\\nReason: ' + reason : ''));\n                    });\n                }\n            } else {\n                // normal component\n                cb(factory);\n            }\n        };\n    }\n\n    var filterRE$1 = /[^|]\\|[^|]/;\n\n    function dataAPI (Vue) {\n        /**\n         * Get the value from an expression on this vm.\n         *\n         * @param {String} exp\n         * @param {Boolean} [asStatement]\n         * @return {*}\n         */\n\n        Vue.prototype.$get = function (exp, asStatement) {\n            var res = parseExpression(exp);\n            if (res) {\n                if (asStatement) {\n                    var self = this;\n                    return function statementHandler() {\n                        self.$arguments = toArray(arguments);\n                        var result = res.get.call(self, self);\n                        self.$arguments = null;\n                        return result;\n                    };\n                } else {\n                    try {\n                        return res.get.call(this, this);\n                    } catch (e) {}\n                }\n            }\n        };\n\n        /**\n         * Set the value from an expression on this vm.\n         * The expression must be a valid left-hand\n         * expression in an assignment.\n         *\n         * @param {String} exp\n         * @param {*} val\n         */\n\n        Vue.prototype.$set = function (exp, val) {\n            var res = parseExpression(exp, true);\n            if (res && res.set) {\n                res.set.call(this, this, val);\n            }\n        };\n\n        /**\n         * Delete a property on the VM\n         *\n         * @param {String} key\n         */\n\n        Vue.prototype.$delete = function (key) {\n            del(this._data, key);\n        };\n\n        /**\n         * Watch an expression, trigger callback when its\n         * value changes.\n         *\n         * @param {String|Function} expOrFn\n         * @param {Function} cb\n         * @param {Object} [options]\n         *                 - {Boolean} deep\n         *                 - {Boolean} immediate\n         * @return {Function} - unwatchFn\n         */\n\n        Vue.prototype.$watch = function (expOrFn, cb, options) {\n            var vm = this;\n            var parsed;\n            if (typeof expOrFn === 'string') {\n                parsed = parseDirective(expOrFn);\n                expOrFn = parsed.expression;\n            }\n            var watcher = new Watcher(vm, expOrFn, cb, {\n                deep: options && options.deep,\n                sync: options && options.sync,\n                filters: parsed && parsed.filters,\n                user: !options || options.user !== false\n            });\n            if (options && options.immediate) {\n                cb.call(vm, watcher.value);\n            }\n            return function unwatchFn() {\n                watcher.teardown();\n            };\n        };\n\n        /**\n         * Evaluate a text directive, including filters.\n         *\n         * @param {String} text\n         * @param {Boolean} [asStatement]\n         * @return {String}\n         */\n\n        Vue.prototype.$eval = function (text, asStatement) {\n            // check for filters.\n            if (filterRE$1.test(text)) {\n                var dir = parseDirective(text);\n                // the filter regex check might give false positive\n                // for pipes inside strings, so it's possible that\n                // we don't get any filters here\n                var val = this.$get(dir.expression, asStatement);\n                return dir.filters ? this._applyFilters(val, null, dir.filters) : val;\n            } else {\n                // no filter\n                return this.$get(text, asStatement);\n            }\n        };\n\n        /**\n         * Interpolate a piece of template text.\n         *\n         * @param {String} text\n         * @return {String}\n         */\n\n        Vue.prototype.$interpolate = function (text) {\n            var tokens = parseText(text);\n            var vm = this;\n            if (tokens) {\n                if (tokens.length === 1) {\n                    return vm.$eval(tokens[0].value) + '';\n                } else {\n                    return tokens.map(function (token) {\n                        return token.tag ? vm.$eval(token.value) : token.value;\n                    }).join('');\n                }\n            } else {\n                return text;\n            }\n        };\n\n        /**\n         * Log instance data as a plain JS object\n         * so that it is easier to inspect in console.\n         * This method assumes console is available.\n         *\n         * @param {String} [path]\n         */\n\n        Vue.prototype.$log = function (path) {\n            var data = path ? getPath(this._data, path) : this._data;\n            if (data) {\n                data = clean(data);\n            }\n            // include computed fields\n            if (!path) {\n                var key;\n                for (key in this.$options.computed) {\n                    data[key] = clean(this[key]);\n                }\n                if (this._props) {\n                    for (key in this._props) {\n                        data[key] = clean(this[key]);\n                    }\n                }\n            }\n            console.log(data);\n        };\n\n        /**\n         * \"clean\" a getter/setter converted object into a plain\n         * object copy.\n         *\n         * @param {Object} - obj\n         * @return {Object}\n         */\n\n        function clean(obj) {\n            return JSON.parse(JSON.stringify(obj));\n        }\n    }\n\n    function domAPI (Vue) {\n        /**\n         * Convenience on-instance nextTick. The callback is\n         * auto-bound to the instance, and this avoids component\n         * modules having to rely on the global Vue.\n         *\n         * @param {Function} fn\n         */\n\n        Vue.prototype.$nextTick = function (fn) {\n            nextTick(fn, this);\n        };\n\n        /**\n         * Append instance to target\n         *\n         * @param {Node} target\n         * @param {Function} [cb]\n         * @param {Boolean} [withTransition] - defaults to true\n         */\n\n        Vue.prototype.$appendTo = function (target, cb, withTransition) {\n            return insert(this, target, cb, withTransition, append, appendWithTransition);\n        };\n\n        /**\n         * Prepend instance to target\n         *\n         * @param {Node} target\n         * @param {Function} [cb]\n         * @param {Boolean} [withTransition] - defaults to true\n         */\n\n        Vue.prototype.$prependTo = function (target, cb, withTransition) {\n            target = query(target);\n            if (target.hasChildNodes()) {\n                this.$before(target.firstChild, cb, withTransition);\n            } else {\n                this.$appendTo(target, cb, withTransition);\n            }\n            return this;\n        };\n\n        /**\n         * Insert instance before target\n         *\n         * @param {Node} target\n         * @param {Function} [cb]\n         * @param {Boolean} [withTransition] - defaults to true\n         */\n\n        Vue.prototype.$before = function (target, cb, withTransition) {\n            return insert(this, target, cb, withTransition, beforeWithCb, beforeWithTransition);\n        };\n\n        /**\n         * Insert instance after target\n         *\n         * @param {Node} target\n         * @param {Function} [cb]\n         * @param {Boolean} [withTransition] - defaults to true\n         */\n\n        Vue.prototype.$after = function (target, cb, withTransition) {\n            target = query(target);\n            if (target.nextSibling) {\n                this.$before(target.nextSibling, cb, withTransition);\n            } else {\n                this.$appendTo(target.parentNode, cb, withTransition);\n            }\n            return this;\n        };\n\n        /**\n         * Remove instance from DOM\n         *\n         * @param {Function} [cb]\n         * @param {Boolean} [withTransition] - defaults to true\n         */\n\n        Vue.prototype.$remove = function (cb, withTransition) {\n            if (!this.$el.parentNode) {\n                return cb && cb();\n            }\n            var inDocument = this._isAttached && inDoc(this.$el);\n            // if we are not in document, no need to check\n            // for transitions\n            if (!inDocument) withTransition = false;\n            var self = this;\n            var realCb = function realCb() {\n                if (inDocument) self._callHook('detached');\n                if (cb) cb();\n            };\n            if (this._isFragment) {\n                removeNodeRange(this._fragmentStart, this._fragmentEnd, this, this._fragment, realCb);\n            } else {\n                var op = withTransition === false ? removeWithCb : removeWithTransition;\n                op(this.$el, this, realCb);\n            }\n            return this;\n        };\n\n        /**\n         * Shared DOM insertion function.\n         *\n         * @param {Vue} vm\n         * @param {Element} target\n         * @param {Function} [cb]\n         * @param {Boolean} [withTransition]\n         * @param {Function} op1 - op for non-transition insert\n         * @param {Function} op2 - op for transition insert\n         * @return vm\n         */\n\n        function insert(vm, target, cb, withTransition, op1, op2) {\n            target = query(target);\n            var targetIsDetached = !inDoc(target);\n            var op = withTransition === false || targetIsDetached ? op1 : op2;\n            var shouldCallHook = !targetIsDetached && !vm._isAttached && !inDoc(vm.$el);\n            if (vm._isFragment) {\n                mapNodeRange(vm._fragmentStart, vm._fragmentEnd, function (node) {\n                    op(node, target, vm);\n                });\n                cb && cb();\n            } else {\n                op(vm.$el, target, vm, cb);\n            }\n            if (shouldCallHook) {\n                vm._callHook('attached');\n            }\n            return vm;\n        }\n\n        /**\n         * Check for selectors\n         *\n         * @param {String|Element} el\n         */\n\n        function query(el) {\n            return typeof el === 'string' ? document.querySelector(el) : el;\n        }\n\n        /**\n         * Append operation that takes a callback.\n         *\n         * @param {Node} el\n         * @param {Node} target\n         * @param {Vue} vm - unused\n         * @param {Function} [cb]\n         */\n\n        function append(el, target, vm, cb) {\n            target.appendChild(el);\n            if (cb) cb();\n        }\n\n        /**\n         * InsertBefore operation that takes a callback.\n         *\n         * @param {Node} el\n         * @param {Node} target\n         * @param {Vue} vm - unused\n         * @param {Function} [cb]\n         */\n\n        function beforeWithCb(el, target, vm, cb) {\n            before(el, target);\n            if (cb) cb();\n        }\n\n        /**\n         * Remove operation that takes a callback.\n         *\n         * @param {Node} el\n         * @param {Vue} vm - unused\n         * @param {Function} [cb]\n         */\n\n        function removeWithCb(el, vm, cb) {\n            remove(el);\n            if (cb) cb();\n        }\n    }\n\n    function eventsAPI (Vue) {\n        /**\n         * Listen on the given `event` with `fn`.\n         *\n         * @param {String} event\n         * @param {Function} fn\n         */\n\n        Vue.prototype.$on = function (event, fn) {\n            (this._events[event] || (this._events[event] = [])).push(fn);\n            modifyListenerCount(this, event, 1);\n            return this;\n        };\n\n        /**\n         * Adds an `event` listener that will be invoked a single\n         * time then automatically removed.\n         *\n         * @param {String} event\n         * @param {Function} fn\n         */\n\n        Vue.prototype.$once = function (event, fn) {\n            var self = this;\n            function on() {\n                self.$off(event, on);\n                fn.apply(this, arguments);\n            }\n            on.fn = fn;\n            this.$on(event, on);\n            return this;\n        };\n\n        /**\n         * Remove the given callback for `event` or all\n         * registered callbacks.\n         *\n         * @param {String} event\n         * @param {Function} fn\n         */\n\n        Vue.prototype.$off = function (event, fn) {\n            var cbs;\n            // all\n            if (!arguments.length) {\n                if (this.$parent) {\n                    for (event in this._events) {\n                        cbs = this._events[event];\n                        if (cbs) {\n                            modifyListenerCount(this, event, -cbs.length);\n                        }\n                    }\n                }\n                this._events = {};\n                return this;\n            }\n            // specific event\n            cbs = this._events[event];\n            if (!cbs) {\n                return this;\n            }\n            if (arguments.length === 1) {\n                modifyListenerCount(this, event, -cbs.length);\n                this._events[event] = null;\n                return this;\n            }\n            // specific handler\n            var cb;\n            var i = cbs.length;\n            while (i--) {\n                cb = cbs[i];\n                if (cb === fn || cb.fn === fn) {\n                    modifyListenerCount(this, event, -1);\n                    cbs.splice(i, 1);\n                    break;\n                }\n            }\n            return this;\n        };\n\n        /**\n         * Trigger an event on self.\n         *\n         * @param {String|Object} event\n         * @return {Boolean} shouldPropagate\n         */\n\n        Vue.prototype.$emit = function (event) {\n            var isSource = typeof event === 'string';\n            event = isSource ? event : event.name;\n            var cbs = this._events[event];\n            var shouldPropagate = isSource || !cbs;\n            if (cbs) {\n                cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n                // this is a somewhat hacky solution to the question raised\n                // in #2102: for an inline component listener like <comp @test=\"doThis\">,\n                // the propagation handling is somewhat broken. Therefore we\n                // need to treat these inline callbacks differently.\n                var hasParentCbs = isSource && cbs.some(function (cb) {\n                        return cb._fromParent;\n                    });\n                if (hasParentCbs) {\n                    shouldPropagate = false;\n                }\n                var args = toArray(arguments, 1);\n                for (var i = 0, l = cbs.length; i < l; i++) {\n                    var cb = cbs[i];\n                    var res = cb.apply(this, args);\n                    if (res === true && (!hasParentCbs || cb._fromParent)) {\n                        shouldPropagate = true;\n                    }\n                }\n            }\n            return shouldPropagate;\n        };\n\n        /**\n         * Recursively broadcast an event to all children instances.\n         *\n         * @param {String|Object} event\n         * @param {...*} additional arguments\n         */\n\n        Vue.prototype.$broadcast = function (event) {\n            var isSource = typeof event === 'string';\n            event = isSource ? event : event.name;\n            // if no child has registered for this event,\n            // then there's no need to broadcast.\n            if (!this._eventsCount[event]) return;\n            var children = this.$children;\n            var args = toArray(arguments);\n            if (isSource) {\n                // use object event to indicate non-source emit\n                // on children\n                args[0] = { name: event, source: this };\n            }\n            for (var i = 0, l = children.length; i < l; i++) {\n                var child = children[i];\n                var shouldPropagate = child.$emit.apply(child, args);\n                if (shouldPropagate) {\n                    child.$broadcast.apply(child, args);\n                }\n            }\n            return this;\n        };\n\n        /**\n         * Recursively propagate an event up the parent chain.\n         *\n         * @param {String} event\n         * @param {...*} additional arguments\n         */\n\n        Vue.prototype.$dispatch = function (event) {\n            var shouldPropagate = this.$emit.apply(this, arguments);\n            if (!shouldPropagate) return;\n            var parent = this.$parent;\n            var args = toArray(arguments);\n            // use object event to indicate non-source emit\n            // on parents\n            args[0] = { name: event, source: this };\n            while (parent) {\n                shouldPropagate = parent.$emit.apply(parent, args);\n                parent = shouldPropagate ? parent.$parent : null;\n            }\n            return this;\n        };\n\n        /**\n         * Modify the listener counts on all parents.\n         * This bookkeeping allows $broadcast to return early when\n         * no child has listened to a certain event.\n         *\n         * @param {Vue} vm\n         * @param {String} event\n         * @param {Number} count\n         */\n\n        var hookRE = /^hook:/;\n        function modifyListenerCount(vm, event, count) {\n            var parent = vm.$parent;\n            // hooks do not get broadcasted so no need\n            // to do bookkeeping for them\n            if (!parent || !count || hookRE.test(event)) return;\n            while (parent) {\n                parent._eventsCount[event] = (parent._eventsCount[event] || 0) + count;\n                parent = parent.$parent;\n            }\n        }\n    }\n\n    function lifecycleAPI (Vue) {\n        /**\n         * Set instance target element and kick off the compilation\n         * process. The passed in `el` can be a selector string, an\n         * existing Element, or a DocumentFragment (for block\n         * instances).\n         *\n         * @param {Element|DocumentFragment|string} el\n         * @public\n         */\n\n        Vue.prototype.$mount = function (el) {\n            if (this._isCompiled) {\n                'development' !== 'production' && warn('$mount() should be called only once.', this);\n                return;\n            }\n            el = query(el);\n            if (!el) {\n                el = document.createElement('div');\n            }\n            this._compile(el);\n            this._initDOMHooks();\n            if (inDoc(this.$el)) {\n                this._callHook('attached');\n                ready.call(this);\n            } else {\n                this.$once('hook:attached', ready);\n            }\n            return this;\n        };\n\n        /**\n         * Mark an instance as ready.\n         */\n\n        function ready() {\n            this._isAttached = true;\n            this._isReady = true;\n            this._callHook('ready');\n        }\n\n        /**\n         * Teardown the instance, simply delegate to the internal\n         * _destroy.\n         *\n         * @param {Boolean} remove\n         * @param {Boolean} deferCleanup\n         */\n\n        Vue.prototype.$destroy = function (remove, deferCleanup) {\n            this._destroy(remove, deferCleanup);\n        };\n\n        /**\n         * Partially compile a piece of DOM and return a\n         * decompile function.\n         *\n         * @param {Element|DocumentFragment} el\n         * @param {Vue} [host]\n         * @param {Object} [scope]\n         * @param {Fragment} [frag]\n         * @return {Function}\n         */\n\n        Vue.prototype.$compile = function (el, host, scope, frag) {\n            return compile(el, this.$options, true)(this, el, host, scope, frag);\n        };\n    }\n\n    /**\n     * The exposed Vue constructor.\n     *\n     * API conventions:\n     * - public API methods/properties are prefixed with `$`\n     * - internal methods/properties are prefixed with `_`\n     * - non-prefixed properties are assumed to be proxied user\n     *   data.\n     *\n     * @constructor\n     * @param {Object} [options]\n     * @public\n     */\n\n    function Vue(options) {\n        this._init(options);\n    }\n\n    // install internals\n    initMixin(Vue);\n    stateMixin(Vue);\n    eventsMixin(Vue);\n    lifecycleMixin(Vue);\n    miscMixin(Vue);\n\n    // install instance APIs\n    dataAPI(Vue);\n    domAPI(Vue);\n    eventsAPI(Vue);\n    lifecycleAPI(Vue);\n\n    var slot = {\n\n        priority: SLOT,\n        params: ['name'],\n\n        bind: function bind() {\n            // this was resolved during component transclusion\n            var name = this.params.name || 'default';\n            var content = this.vm._slotContents && this.vm._slotContents[name];\n            if (!content || !content.hasChildNodes()) {\n                this.fallback();\n            } else {\n                this.compile(content.cloneNode(true), this.vm._context, this.vm);\n            }\n        },\n\n        compile: function compile(content, context, host) {\n            if (content && context) {\n                if (this.el.hasChildNodes() && content.childNodes.length === 1 && content.childNodes[0].nodeType === 1 && content.childNodes[0].hasAttribute('v-if')) {\n                    // if the inserted slot has v-if\n                    // inject fallback content as the v-else\n                    var elseBlock = document.createElement('template');\n                    elseBlock.setAttribute('v-else', '');\n                    elseBlock.innerHTML = this.el.innerHTML;\n                    // the else block should be compiled in child scope\n                    elseBlock._context = this.vm;\n                    content.appendChild(elseBlock);\n                }\n                var scope = host ? host._scope : this._scope;\n                this.unlink = context.$compile(content, host, scope, this._frag);\n            }\n            if (content) {\n                replace(this.el, content);\n            } else {\n                remove(this.el);\n            }\n        },\n\n        fallback: function fallback() {\n            this.compile(extractContent(this.el, true), this.vm);\n        },\n\n        unbind: function unbind() {\n            if (this.unlink) {\n                this.unlink();\n            }\n        }\n    };\n\n    var partial = {\n\n        priority: PARTIAL,\n\n        params: ['name'],\n\n        // watch changes to name for dynamic partials\n        paramWatchers: {\n            name: function name(value) {\n                vIf.remove.call(this);\n                if (value) {\n                    this.insert(value);\n                }\n            }\n        },\n\n        bind: function bind() {\n            this.anchor = createAnchor('v-partial');\n            replace(this.el, this.anchor);\n            this.insert(this.params.name);\n        },\n\n        insert: function insert(id) {\n            var partial = resolveAsset(this.vm.$options, 'partials', id, true);\n            if (partial) {\n                this.factory = new FragmentFactory(this.vm, partial);\n                vIf.insert.call(this);\n            }\n        },\n\n        unbind: function unbind() {\n            if (this.frag) {\n                this.frag.destroy();\n            }\n        }\n    };\n\n    var elementDirectives = {\n        slot: slot,\n        partial: partial\n    };\n\n    var convertArray = vFor._postProcess;\n\n    /**\n     * Limit filter for arrays\n     *\n     * @param {Number} n\n     * @param {Number} offset (Decimal expected)\n     */\n\n    function limitBy(arr, n, offset) {\n        offset = offset ? parseInt(offset, 10) : 0;\n        n = toNumber(n);\n        return typeof n === 'number' ? arr.slice(offset, offset + n) : arr;\n    }\n\n    /**\n     * Filter filter for arrays\n     *\n     * @param {String} search\n     * @param {String} [delimiter]\n     * @param {String} ...dataKeys\n     */\n\n    function filterBy(arr, search, delimiter) {\n        arr = convertArray(arr);\n        if (search == null) {\n            return arr;\n        }\n        if (typeof search === 'function') {\n            return arr.filter(search);\n        }\n        // cast to lowercase string\n        search = ('' + search).toLowerCase();\n        // allow optional `in` delimiter\n        // because why not\n        var n = delimiter === 'in' ? 3 : 2;\n        // extract and flatten keys\n        var keys = Array.prototype.concat.apply([], toArray(arguments, n));\n        var res = [];\n        var item, key, val, j;\n        for (var i = 0, l = arr.length; i < l; i++) {\n            item = arr[i];\n            val = item && item.$value || item;\n            j = keys.length;\n            if (j) {\n                while (j--) {\n                    key = keys[j];\n                    if (key === '$key' && contains(item.$key, search) || contains(getPath(val, key), search)) {\n                        res.push(item);\n                        break;\n                    }\n                }\n            } else if (contains(item, search)) {\n                res.push(item);\n            }\n        }\n        return res;\n    }\n\n    /**\n     * Filter filter for arrays\n     *\n     * @param {String|Array<String>|Function} ...sortKeys\n     * @param {Number} [order]\n     */\n\n    function orderBy(arr) {\n        var comparator = null;\n        var sortKeys = undefined;\n        arr = convertArray(arr);\n\n        // determine order (last argument)\n        var args = toArray(arguments, 1);\n        var order = args[args.length - 1];\n        if (typeof order === 'number') {\n            order = order < 0 ? -1 : 1;\n            args = args.length > 1 ? args.slice(0, -1) : args;\n        } else {\n            order = 1;\n        }\n\n        // determine sortKeys & comparator\n        var firstArg = args[0];\n        if (!firstArg) {\n            return arr;\n        } else if (typeof firstArg === 'function') {\n            // custom comparator\n            comparator = function (a, b) {\n                return firstArg(a, b) * order;\n            };\n        } else {\n            // string keys. flatten first\n            sortKeys = Array.prototype.concat.apply([], args);\n            comparator = function (a, b, i) {\n                i = i || 0;\n                return i >= sortKeys.length - 1 ? baseCompare(a, b, i) : baseCompare(a, b, i) || comparator(a, b, i + 1);\n            };\n        }\n\n        function baseCompare(a, b, sortKeyIndex) {\n            var sortKey = sortKeys[sortKeyIndex];\n            if (sortKey) {\n                if (sortKey !== '$key') {\n                    if (isObject(a) && '$value' in a) a = a.$value;\n                    if (isObject(b) && '$value' in b) b = b.$value;\n                }\n                a = isObject(a) ? getPath(a, sortKey) : a;\n                b = isObject(b) ? getPath(b, sortKey) : b;\n            }\n            return a === b ? 0 : a > b ? order : -order;\n        }\n\n        // sort on a copy to avoid mutating original array\n        return arr.slice().sort(comparator);\n    }\n\n    /**\n     * String contain helper\n     *\n     * @param {*} val\n     * @param {String} search\n     */\n\n    function contains(val, search) {\n        var i;\n        if (isPlainObject(val)) {\n            var keys = Object.keys(val);\n            i = keys.length;\n            while (i--) {\n                if (contains(val[keys[i]], search)) {\n                    return true;\n                }\n            }\n        } else if (isArray(val)) {\n            i = val.length;\n            while (i--) {\n                if (contains(val[i], search)) {\n                    return true;\n                }\n            }\n        } else if (val != null) {\n            return val.toString().toLowerCase().indexOf(search) > -1;\n        }\n    }\n\n    var digitsRE = /(\\d{3})(?=\\d)/g;\n\n    // asset collections must be a plain object.\n    var filters = {\n\n        orderBy: orderBy,\n        filterBy: filterBy,\n        limitBy: limitBy,\n\n        /**\n         * Stringify value.\n         *\n         * @param {Number} indent\n         */\n\n        json: {\n            read: function read(value, indent) {\n                return typeof value === 'string' ? value : JSON.stringify(value, null, Number(indent) || 2);\n            },\n            write: function write(value) {\n                try {\n                    return JSON.parse(value);\n                } catch (e) {\n                    return value;\n                }\n            }\n        },\n\n        /**\n         * 'abc' => 'Abc'\n         */\n\n        capitalize: function capitalize(value) {\n            if (!value && value !== 0) return '';\n            value = value.toString();\n            return value.charAt(0).toUpperCase() + value.slice(1);\n        },\n\n        /**\n         * 'abc' => 'ABC'\n         */\n\n        uppercase: function uppercase(value) {\n            return value || value === 0 ? value.toString().toUpperCase() : '';\n        },\n\n        /**\n         * 'AbC' => 'abc'\n         */\n\n        lowercase: function lowercase(value) {\n            return value || value === 0 ? value.toString().toLowerCase() : '';\n        },\n\n        /**\n         * 12345 => $12,345.00\n         *\n         * @param {String} sign\n         * @param {Number} decimals Decimal places\n         */\n\n        currency: function currency(value, _currency, decimals) {\n            value = parseFloat(value);\n            if (!isFinite(value) || !value && value !== 0) return '';\n            _currency = _currency != null ? _currency : '$';\n            decimals = decimals != null ? decimals : 2;\n            var stringified = Math.abs(value).toFixed(decimals);\n            var _int = decimals ? stringified.slice(0, -1 - decimals) : stringified;\n            var i = _int.length % 3;\n            var head = i > 0 ? _int.slice(0, i) + (_int.length > 3 ? ',' : '') : '';\n            var _float = decimals ? stringified.slice(-1 - decimals) : '';\n            var sign = value < 0 ? '-' : '';\n            return sign + _currency + head + _int.slice(i).replace(digitsRE, '$1,') + _float;\n        },\n\n        /**\n         * 'item' => 'items'\n         *\n         * @params\n         *  an array of strings corresponding to\n         *  the single, double, triple ... forms of the word to\n         *  be pluralized. When the number to be pluralized\n         *  exceeds the length of the args, it will use the last\n         *  entry in the array.\n         *\n         *  e.g. ['single', 'double', 'triple', 'multiple']\n         */\n\n        pluralize: function pluralize(value) {\n            var args = toArray(arguments, 1);\n            return args.length > 1 ? args[value % 10 - 1] || args[args.length - 1] : args[0] + (value === 1 ? '' : 's');\n        },\n\n        /**\n         * Debounce a handler function.\n         *\n         * @param {Function} handler\n         * @param {Number} delay = 300\n         * @return {Function}\n         */\n\n        debounce: function debounce(handler, delay) {\n            if (!handler) return;\n            if (!delay) {\n                delay = 300;\n            }\n            return _debounce(handler, delay);\n        }\n    };\n\n    function installGlobalAPI (Vue) {\n        /**\n         * Vue and every constructor that extends Vue has an\n         * associated options object, which can be accessed during\n         * compilation steps as `this.constructor.options`.\n         *\n         * These can be seen as the default options of every\n         * Vue instance.\n         */\n\n        Vue.options = {\n            directives: directives,\n            elementDirectives: elementDirectives,\n            filters: filters,\n            transitions: {},\n            components: {},\n            partials: {},\n            replace: true\n        };\n\n        /**\n         * Expose useful internals\n         */\n\n        Vue.util = util;\n        Vue.config = config;\n        Vue.set = set;\n        Vue['delete'] = del;\n        Vue.nextTick = nextTick;\n\n        /**\n         * The following are exposed for advanced usage / plugins\n         */\n\n        Vue.compiler = compiler;\n        Vue.FragmentFactory = FragmentFactory;\n        Vue.internalDirectives = internalDirectives;\n        Vue.parsers = {\n            path: path,\n            text: text,\n            template: template,\n            directive: directive,\n            expression: expression\n        };\n\n        /**\n         * Each instance constructor, including Vue, has a unique\n         * cid. This enables us to create wrapped \"child\n         * constructors\" for prototypal inheritance and cache them.\n         */\n\n        Vue.cid = 0;\n        var cid = 1;\n\n        /**\n         * Class inheritance\n         *\n         * @param {Object} extendOptions\n         */\n\n        Vue.extend = function (extendOptions) {\n            extendOptions = extendOptions || {};\n            var Super = this;\n            var isFirstExtend = Super.cid === 0;\n            if (isFirstExtend && extendOptions._Ctor) {\n                return extendOptions._Ctor;\n            }\n            var name = extendOptions.name || Super.options.name;\n            if ('development' !== 'production') {\n                if (!/^[a-zA-Z][\\w-]*$/.test(name)) {\n                    warn('Invalid component name: \"' + name + '\". Component names ' + 'can only contain alphanumeric characaters and the hyphen.');\n                    name = null;\n                }\n            }\n            var Sub = createClass(name || 'VueComponent');\n            Sub.prototype = Object.create(Super.prototype);\n            Sub.prototype.constructor = Sub;\n            Sub.cid = cid++;\n            Sub.options = mergeOptions(Super.options, extendOptions);\n            Sub['super'] = Super;\n            // allow further extension\n            Sub.extend = Super.extend;\n            // create asset registers, so extended classes\n            // can have their private assets too.\n            config._assetTypes.forEach(function (type) {\n                Sub[type] = Super[type];\n            });\n            // enable recursive self-lookup\n            if (name) {\n                Sub.options.components[name] = Sub;\n            }\n            // cache constructor\n            if (isFirstExtend) {\n                extendOptions._Ctor = Sub;\n            }\n            return Sub;\n        };\n\n        /**\n         * A function that returns a sub-class constructor with the\n         * given name. This gives us much nicer output when\n         * logging instances in the console.\n         *\n         * @param {String} name\n         * @return {Function}\n         */\n\n        function createClass(name) {\n            /* eslint-disable no-new-func */\n            return new Function('return function ' + classify(name) + ' (options) { this._init(options) }')();\n            /* eslint-enable no-new-func */\n        }\n\n        /**\n         * Plugin system\n         *\n         * @param {Object} plugin\n         */\n\n        Vue.use = function (plugin) {\n            /* istanbul ignore if */\n            if (plugin.installed) {\n                return;\n            }\n            // additional parameters\n            var args = toArray(arguments, 1);\n            args.unshift(this);\n            if (typeof plugin.install === 'function') {\n                plugin.install.apply(plugin, args);\n            } else {\n                plugin.apply(null, args);\n            }\n            plugin.installed = true;\n            return this;\n        };\n\n        /**\n         * Apply a global mixin by merging it into the default\n         * options.\n         */\n\n        Vue.mixin = function (mixin) {\n            Vue.options = mergeOptions(Vue.options, mixin);\n        };\n\n        /**\n         * Create asset registration methods with the following\n         * signature:\n         *\n         * @param {String} id\n         * @param {*} definition\n         */\n\n        config._assetTypes.forEach(function (type) {\n            Vue[type] = function (id, definition) {\n                if (!definition) {\n                    return this.options[type + 's'][id];\n                } else {\n                    /* istanbul ignore if */\n                    if ('development' !== 'production') {\n                        if (type === 'component' && (commonTagRE.test(id) || reservedTagRE.test(id))) {\n                            warn('Do not use built-in or reserved HTML elements as component ' + 'id: ' + id);\n                        }\n                    }\n                    if (type === 'component' && isPlainObject(definition)) {\n                        definition.name = id;\n                        definition = Vue.extend(definition);\n                    }\n                    this.options[type + 's'][id] = definition;\n                    return definition;\n                }\n            };\n        });\n\n        // expose internal transition API\n        extend(Vue.transition, transition);\n    }\n\n    installGlobalAPI(Vue);\n\n    Vue.version = '1.0.24';\n\n    // devtools global hook\n    /* istanbul ignore next */\n    setTimeout(function () {\n        if (config.devtools) {\n            if (devtools) {\n                devtools.emit('init', Vue);\n            } else if ('development' !== 'production' && inBrowser && /Chrome\\/\\d+/.test(window.navigator.userAgent)) {\n                console.log('Download the Vue Devtools for a better development experience:\\n' + 'https://github.com/vuejs/vue-devtools');\n            }\n        }\n    }, 0);\n\n    return Vue;\n\n}));"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/css/demo-ie8.css",
    "content": "@charset \"UTF-8\";\n/*\n * jQuery File Upload Demo CSS Fixes for IE<9\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n.navigation {\n  list-style: none;\n  padding: 0;\n  margin: 1em 0;\n}\n.navigation li {\n  display: inline;\n  margin-right: 10px;\n}\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/css/demo.css",
    "content": "@charset \"UTF-8\";\n/*\n * jQuery File Upload Demo CSS\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\nbody {\n  max-width: 750px;\n  margin: 0 auto;\n  padding: 1em;\n  font-family: \"Lucida Grande\", \"Lucida Sans Unicode\", Arial, sans-serif;\n  font-size: 1em;\n  line-height: 1.4em;\n  background: #222;\n  color: #fff;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\na {\n  color: orange;\n  text-decoration: none;\n}\nimg {\n  border: 0;\n  vertical-align: middle;\n}\nh1 {\n  line-height: 1em;\n}\nblockquote {\n  padding: 0 0 0 15px;\n  margin: 0 0 20px;\n  border-left: 5px solid #eee;\n}\ntable {\n  width: 100%;\n  margin: 10px 0;\n}\n\n.fileupload-progress {\n\tmargin: 10px 0;\n}\n.fileupload-progress .progress-extended {\n\tmargin-top: 5px;\n}\n.error {\n  color: red;\n}\n\n@media (min-width: 481px) {\n  .navigation {\n    list-style: none;\n    padding: 0;\n  }\n  .navigation li {\n    display: inline-block;\n  }\n  .navigation li:not(:first-child):before {\n    content: \"| \";\n  }\n}\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/css/jquery.fileupload-noscript.css",
    "content": "@charset \"UTF-8\";\n/*\n * jQuery File Upload Plugin NoScript CSS\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n.fileinput-button input {\n  position: static;\n  opacity: 1;\n  filter: none;\n  font-size: inherit !important;\n  direction: inherit;\n}\n.fileinput-button span {\n  display: none;\n}\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/css/jquery.fileupload-ui-noscript.css",
    "content": "@charset \"UTF-8\";\n/*\n * jQuery File Upload UI Plugin NoScript CSS\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2012, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n.fileinput-button i,\n.fileupload-buttonbar .delete,\n.fileupload-buttonbar .toggle {\n  display: none;\n}\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/css/jquery.fileupload-ui.css",
    "content": "@charset \"UTF-8\";\n/*\n * jQuery File Upload UI Plugin CSS\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2010, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n.fileupload-buttonbar .btn,\n.fileupload-buttonbar .toggle {\n  margin-bottom: 5px;\n}\n.progress-animated .progress-bar,\n.progress-animated .bar {\n  background: url(\"../img/progressbar.gif\") !important;\n  filter: none;\n}\n.fileupload-process {\n  float: right;\n  display: none;\n}\n.fileupload-processing .fileupload-process,\n.files .processing .preview {\n  display: block;\n  width: 32px;\n  height: 32px;\n  background: url(\"../img/loading.gif\") center no-repeat;\n  background-size: contain;\n}\n.files audio,\n.files video {\n  max-width: 300px;\n}\n\n@media (max-width: 767px) {\n  .fileupload-buttonbar .toggle,\n  .files .toggle,\n  .files .btn span {\n    display: none;\n  }\n  .files .name {\n    width: 80px;\n    word-wrap: break-word;\n  }\n  .files audio,\n  .files video {\n    max-width: 80px;\n  }\n  .files img,\n  .files canvas {\n    max-width: 100%;\n  }\n}\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/css/jquery.fileupload.css",
    "content": "@charset \"UTF-8\";\n/*\n * jQuery File Upload Plugin CSS\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n.fileinput-button {\n  position: relative;\n  overflow: hidden;\n  display: inline-block;\n}\n.fileinput-button input {\n  position: absolute;\n  top: 0;\n  right: 0;\n  margin: 0;\n  opacity: 0;\n  -ms-filter: 'alpha(opacity=0)';\n  font-size: 200px !important;\n  direction: ltr;\n  cursor: pointer;\n}\n\n/* Fixes for IE < 8 */\n@media screen\\9 {\n  .fileinput-button input {\n    filter: alpha(opacity=0);\n    font-size: 100%;\n    height: 100%;\n  }\n}\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/css/style.css",
    "content": "@charset \"UTF-8\";\n/*\n * jQuery File Upload Plugin CSS Example\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\nbody {\n  padding-top: 60px;\n}\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/app.js",
    "content": "/*\n * jQuery File Upload Plugin Angular JS Example\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global window, angular */\n\n;(function () {\n    'use strict';\n\n    var isOnGitHub = window.location.hostname === 'blueimp.github.io',\n        url = isOnGitHub ? '//jquery-file-upload.appspot.com/' : 'server/php/';\n\n    angular.module('demo', [\n        'blueimp.fileupload'\n    ])\n        .config([\n            '$httpProvider', 'fileUploadProvider',\n            function ($httpProvider, fileUploadProvider) {\n                delete $httpProvider.defaults.headers.common['X-Requested-With'];\n                fileUploadProvider.defaults.redirect = window.location.href.replace(\n                    /\\/[^\\/]*$/,\n                    '/cors/result.html?%s'\n                );\n                if (isOnGitHub) {\n                    // Demo settings:\n                    angular.extend(fileUploadProvider.defaults, {\n                        // Enable image resizing, except for Android and Opera,\n                        // which actually support image resizing, but fail to\n                        // send Blob objects via XHR requests:\n                        disableImageResize: /Android(?!.*Chrome)|Opera/\n                            .test(window.navigator.userAgent),\n                        maxFileSize: 999000,\n                        acceptFileTypes: /(\\.|\\/)(gif|jpe?g|png)$/i\n                    });\n                }\n            }\n        ])\n\n        .controller('DemoFileUploadController', [\n            '$scope', '$http', '$filter', '$window',\n            function ($scope, $http) {\n                $scope.options = {\n                    url: url\n                };\n                if (!isOnGitHub) {\n                    $scope.loadingFiles = true;\n                    $http.get(url)\n                        .then(\n                            function (response) {\n                                $scope.loadingFiles = false;\n                                $scope.queue = response.data.files || [];\n                            },\n                            function () {\n                                $scope.loadingFiles = false;\n                            }\n                        );\n                }\n            }\n        ])\n\n        .controller('FileDestroyController', [\n            '$scope', '$http',\n            function ($scope, $http) {\n                var file = $scope.file,\n                    state;\n                if (file.url) {\n                    file.$state = function () {\n                        return state;\n                    };\n                    file.$destroy = function () {\n                        state = 'pending';\n                        return $http({\n                            url: file.deleteUrl,\n                            method: file.deleteType\n                        }).then(\n                            function () {\n                                state = 'resolved';\n                                $scope.clear(file);\n                            },\n                            function () {\n                                state = 'rejected';\n                            }\n                        );\n                    };\n                } else if (!file.$cancel && !file._index) {\n                    file.$cancel = function () {\n                        $scope.clear(file);\n                    };\n                }\n            }\n        ]);\n\n}());\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/cors/jquery.postmessage-transport.js",
    "content": "/*\n * jQuery postMessage Transport Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* global define, require, window, document */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define(['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(require('jquery'));\n    } else {\n        // Browser globals:\n        factory(window.jQuery);\n    }\n}(function ($) {\n    'use strict';\n\n    var counter = 0,\n        names = [\n            'accepts',\n            'cache',\n            'contents',\n            'contentType',\n            'crossDomain',\n            'data',\n            'dataType',\n            'headers',\n            'ifModified',\n            'mimeType',\n            'password',\n            'processData',\n            'timeout',\n            'traditional',\n            'type',\n            'url',\n            'username'\n        ],\n        convert = function (p) {\n            return p;\n        };\n\n    $.ajaxSetup({\n        converters: {\n            'postmessage text': convert,\n            'postmessage json': convert,\n            'postmessage html': convert\n        }\n    });\n\n    $.ajaxTransport('postmessage', function (options) {\n        if (options.postMessage && window.postMessage) {\n            var iframe,\n                loc = $('<a>').prop('href', options.postMessage)[0],\n                target = loc.protocol + '//' + loc.host,\n                xhrUpload = options.xhr().upload;\n            // IE always includes the port for the host property of a link\n            // element, but not in the location.host or origin property for the\n            // default http port 80 and https port 443, so we strip it:\n            if (/^(http:\\/\\/.+:80)|(https:\\/\\/.+:443)$/.test(target)) {\n              target = target.replace(/:(80|443)$/, '');\n            }\n            return {\n                send: function (_, completeCallback) {\n                    counter += 1;\n                    var message = {\n                            id: 'postmessage-transport-' + counter\n                        },\n                        eventName = 'message.' + message.id;\n                    iframe = $(\n                        '<iframe style=\"display:none;\" src=\"' +\n                            options.postMessage + '\" name=\"' +\n                            message.id + '\"></iframe>'\n                    ).bind('load', function () {\n                        $.each(names, function (i, name) {\n                            message[name] = options[name];\n                        });\n                        message.dataType = message.dataType.replace('postmessage ', '');\n                        $(window).bind(eventName, function (e) {\n                            e = e.originalEvent;\n                            var data = e.data,\n                                ev;\n                            if (e.origin === target && data.id === message.id) {\n                                if (data.type === 'progress') {\n                                    ev = document.createEvent('Event');\n                                    ev.initEvent(data.type, false, true);\n                                    $.extend(ev, data);\n                                    xhrUpload.dispatchEvent(ev);\n                                } else {\n                                    completeCallback(\n                                        data.status,\n                                        data.statusText,\n                                        {postmessage: data.result},\n                                        data.headers\n                                    );\n                                    iframe.remove();\n                                    $(window).unbind(eventName);\n                                }\n                            }\n                        });\n                        iframe[0].contentWindow.postMessage(\n                            message,\n                            target\n                        );\n                    }).appendTo(document.body);\n                },\n                abort: function () {\n                    if (iframe) {\n                        iframe.remove();\n                    }\n                }\n            };\n        }\n    });\n\n}));\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/cors/jquery.xdr-transport.js",
    "content": "/*\n * jQuery XDomainRequest Transport Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on Julian Aubourg's ajaxHooks xdr.js:\n * https://github.com/jaubourg/ajaxHooks/\n */\n\n/* global define, require, window, XDomainRequest */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define(['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(require('jquery'));\n    } else {\n        // Browser globals:\n        factory(window.jQuery);\n    }\n}(function ($) {\n    'use strict';\n    if (window.XDomainRequest && !$.support.cors) {\n        $.ajaxTransport(function (s) {\n            if (s.crossDomain && s.async) {\n                if (s.timeout) {\n                    s.xdrTimeout = s.timeout;\n                    delete s.timeout;\n                }\n                var xdr;\n                return {\n                    send: function (headers, completeCallback) {\n                        var addParamChar = /\\?/.test(s.url) ? '&' : '?';\n                        function callback(status, statusText, responses, responseHeaders) {\n                            xdr.onload = xdr.onerror = xdr.ontimeout = $.noop;\n                            xdr = null;\n                            completeCallback(status, statusText, responses, responseHeaders);\n                        }\n                        xdr = new XDomainRequest();\n                        // XDomainRequest only supports GET and POST:\n                        if (s.type === 'DELETE') {\n                            s.url = s.url + addParamChar + '_method=DELETE';\n                            s.type = 'POST';\n                        } else if (s.type === 'PUT') {\n                            s.url = s.url + addParamChar + '_method=PUT';\n                            s.type = 'POST';\n                        } else if (s.type === 'PATCH') {\n                            s.url = s.url + addParamChar + '_method=PATCH';\n                            s.type = 'POST';\n                        }\n                        xdr.open(s.type, s.url);\n                        xdr.onload = function () {\n                            callback(\n                                200,\n                                'OK',\n                                {text: xdr.responseText},\n                                'Content-Type: ' + xdr.contentType\n                            );\n                        };\n                        xdr.onerror = function () {\n                            callback(404, 'Not Found');\n                        };\n                        if (s.xdrTimeout) {\n                            xdr.ontimeout = function () {\n                                callback(0, 'timeout');\n                            };\n                            xdr.timeout = s.xdrTimeout;\n                        }\n                        xdr.send((s.hasContent && s.data) || null);\n                    },\n                    abort: function () {\n                        if (xdr) {\n                            xdr.onerror = $.noop();\n                            xdr.abort();\n                        }\n                    }\n                };\n            }\n        });\n    }\n}));\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/jquery.fileupload-angular.js",
    "content": "/*\n * jQuery File Upload AngularJS Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, angular, require */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            'angular',\n            './jquery.fileupload-image',\n            './jquery.fileupload-audio',\n            './jquery.fileupload-video',\n            './jquery.fileupload-validate'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('angular'),\n            require('./jquery.fileupload-image'),\n            require('./jquery.fileupload-audio'),\n            require('./jquery.fileupload-video'),\n            require('./jquery.fileupload-validate')\n        );\n    } else {\n        factory();\n    }\n}(function () {\n    'use strict';\n\n    angular.module('blueimp.fileupload', [])\n\n        // The fileUpload service provides configuration options\n        // for the fileUpload directive and default handlers for\n        // File Upload events:\n        .provider('fileUpload', function () {\n            var scopeEvalAsync = function (expression) {\n                    var scope = angular.element(this)\n                            .fileupload('option', 'scope');\n                    // Schedule a new $digest cycle if not already inside of one\n                    // and evaluate the given expression:\n                    scope.$evalAsync(expression);\n                },\n                addFileMethods = function (scope, data) {\n                    var files = data.files,\n                        file = files[0];\n                    angular.forEach(files, function (file, index) {\n                        file._index = index;\n                        file.$state = function () {\n                            return data.state();\n                        };\n                        file.$processing = function () {\n                            return data.processing();\n                        };\n                        file.$progress = function () {\n                            return data.progress();\n                        };\n                        file.$response = function () {\n                            return data.response();\n                        };\n                    });\n                    file.$submit = function () {\n                        if (!file.error) {\n                            return data.submit();\n                        }\n                    };\n                    file.$cancel = function () {\n                        return data.abort();\n                    };\n                },\n                $config;\n            $config = this.defaults = {\n                handleResponse: function (e, data) {\n                    var files = data.result && data.result.files;\n                    if (files) {\n                        data.scope.replace(data.files, files);\n                    } else if (data.errorThrown ||\n                            data.textStatus === 'error') {\n                        data.files[0].error = data.errorThrown ||\n                            data.textStatus;\n                    }\n                },\n                add: function (e, data) {\n                    if (e.isDefaultPrevented()) {\n                        return false;\n                    }\n                    var scope = data.scope,\n                        filesCopy = [];\n                    angular.forEach(data.files, function (file) {\n                        filesCopy.push(file);\n                    });\n                    scope.$parent.$applyAsync(function () {\n                        addFileMethods(scope, data);\n                        var method = scope.option('prependFiles') ?\n                                'unshift' : 'push';\n                        Array.prototype[method].apply(scope.queue, data.files);\n                    });\n                    data.process(function () {\n                        return scope.process(data);\n                    }).always(function () {\n                        scope.$parent.$applyAsync(function () {\n                            addFileMethods(scope, data);\n                            scope.replace(filesCopy, data.files);\n                        });\n                    }).then(function () {\n                        if ((scope.option('autoUpload') ||\n                                data.autoUpload) &&\n                                data.autoUpload !== false) {\n                            data.submit();\n                        }\n                    });\n                },\n                done: function (e, data) {\n                    if (e.isDefaultPrevented()) {\n                        return false;\n                    }\n                    var that = this;\n                    data.scope.$apply(function () {\n                        data.handleResponse.call(that, e, data);\n                    });\n                },\n                fail: function (e, data) {\n                    if (e.isDefaultPrevented()) {\n                        return false;\n                    }\n                    var that = this,\n                        scope = data.scope;\n                    if (data.errorThrown === 'abort') {\n                        scope.clear(data.files);\n                        return;\n                    }\n                    scope.$apply(function () {\n                        data.handleResponse.call(that, e, data);\n                    });\n                },\n                stop: scopeEvalAsync,\n                processstart: scopeEvalAsync,\n                processstop: scopeEvalAsync,\n                getNumberOfFiles: function () {\n                    var scope = this.scope;\n                    return scope.queue.length - scope.processing();\n                },\n                dataType: 'json',\n                autoUpload: false\n            };\n            this.$get = [\n                function () {\n                    return {\n                        defaults: $config\n                    };\n                }\n            ];\n        })\n\n        // Format byte numbers to readable presentations:\n        .provider('formatFileSizeFilter', function () {\n            var $config = {\n                // Byte units following the IEC format\n                // http://en.wikipedia.org/wiki/Kilobyte\n                units: [\n                    {size: 1000000000, suffix: ' GB'},\n                    {size: 1000000, suffix: ' MB'},\n                    {size: 1000, suffix: ' KB'}\n                ]\n            };\n            this.defaults = $config;\n            this.$get = function () {\n                return function (bytes) {\n                    if (!angular.isNumber(bytes)) {\n                        return '';\n                    }\n                    var unit = true,\n                        i = 0,\n                        prefix,\n                        suffix;\n                    while (unit) {\n                        unit = $config.units[i];\n                        prefix = unit.prefix || '';\n                        suffix = unit.suffix || '';\n                        if (i === $config.units.length - 1 || bytes >= unit.size) {\n                            return prefix + (bytes / unit.size).toFixed(2) + suffix;\n                        }\n                        i += 1;\n                    }\n                };\n            };\n        })\n\n        // The FileUploadController initializes the fileupload widget and\n        // provides scope methods to control the File Upload functionality:\n        .controller('FileUploadController', [\n            '$scope', '$element', '$attrs', '$window', 'fileUpload','$q',\n            function ($scope, $element, $attrs, $window, fileUpload, $q) {\n                var uploadMethods = {\n                    progress: function () {\n                        return $element.fileupload('progress');\n                    },\n                    active: function () {\n                        return $element.fileupload('active');\n                    },\n                    option: function (option, data) {\n                        if (arguments.length === 1) {\n                            return $element.fileupload('option', option);\n                        }\n                        $element.fileupload('option', option, data);\n                    },\n                    add: function (data) {\n                        return $element.fileupload('add', data);\n                    },\n                    send: function (data) {\n                        return $element.fileupload('send', data);\n                    },\n                    process: function (data) {\n                        return $element.fileupload('process', data);\n                    },\n                    processing: function (data) {\n                        return $element.fileupload('processing', data);\n                    }\n                };\n                $scope.disabled = !$window.jQuery.support.fileInput;\n                $scope.queue = $scope.queue || [];\n                $scope.clear = function (files) {\n                    var queue = this.queue,\n                        i = queue.length,\n                        file = files,\n                        length = 1;\n                    if (angular.isArray(files)) {\n                        file = files[0];\n                        length = files.length;\n                    }\n                    while (i) {\n                        i -= 1;\n                        if (queue[i] === file) {\n                            return queue.splice(i, length);\n                        }\n                    }\n                };\n                $scope.replace = function (oldFiles, newFiles) {\n                    var queue = this.queue,\n                        file = oldFiles[0],\n                        i,\n                        j;\n                    for (i = 0; i < queue.length; i += 1) {\n                        if (queue[i] === file) {\n                            for (j = 0; j < newFiles.length; j += 1) {\n                                queue[i + j] = newFiles[j];\n                            }\n                            return;\n                        }\n                    }\n                };\n                $scope.applyOnQueue = function (method) {\n                    var list = this.queue.slice(0),\n                        i,\n                        file,\n                        promises = [];\n                    for (i = 0; i < list.length; i += 1) {\n                        file = list[i];\n                        if (file[method]) {\n                            promises.push(file[method]());\n                        }\n                    }\n                    return $q.all(promises);\n                };\n                $scope.submit = function () {\n                    return this.applyOnQueue('$submit');\n                };\n                $scope.cancel = function () {\n                    return this.applyOnQueue('$cancel');\n                };\n                // Add upload methods to the scope:\n                angular.extend($scope, uploadMethods);\n                // The fileupload widget will initialize with\n                // the options provided via \"data-\"-parameters,\n                // as well as those given via options object:\n                $element.fileupload(angular.extend(\n                    {scope: $scope},\n                    fileUpload.defaults\n                )).on('fileuploadadd', function (e, data) {\n                    data.scope = $scope;\n                }).on('fileuploadfail', function (e, data) {\n                    if (data.errorThrown === 'abort') {\n                        return;\n                    }\n                    if (data.dataType &&\n                            data.dataType.indexOf('json') === data.dataType.length - 4) {\n                        try {\n                            data.result = angular.fromJson(data.jqXHR.responseText);\n                        } catch (ignore) {}\n                    }\n                }).on([\n                    'fileuploadadd',\n                    'fileuploadsubmit',\n                    'fileuploadsend',\n                    'fileuploaddone',\n                    'fileuploadfail',\n                    'fileuploadalways',\n                    'fileuploadprogress',\n                    'fileuploadprogressall',\n                    'fileuploadstart',\n                    'fileuploadstop',\n                    'fileuploadchange',\n                    'fileuploadpaste',\n                    'fileuploaddrop',\n                    'fileuploaddragover',\n                    'fileuploadchunksend',\n                    'fileuploadchunkdone',\n                    'fileuploadchunkfail',\n                    'fileuploadchunkalways',\n                    'fileuploadprocessstart',\n                    'fileuploadprocess',\n                    'fileuploadprocessdone',\n                    'fileuploadprocessfail',\n                    'fileuploadprocessalways',\n                    'fileuploadprocessstop'\n                ].join(' '), function (e, data) {\n                    $scope.$parent.$applyAsync(function () {\n                        if ($scope.$emit(e.type, data).defaultPrevented) {\n                            e.preventDefault();\n                        }\n                    });\n                }).on('remove', function () {\n                    // Remove upload methods from the scope,\n                    // when the widget is removed:\n                    var method;\n                    for (method in uploadMethods) {\n                        if (uploadMethods.hasOwnProperty(method)) {\n                            delete $scope[method];\n                        }\n                    }\n                });\n                // Observe option changes:\n                $scope.$watch(\n                    $attrs.fileUpload,\n                    function (newOptions) {\n                        if (newOptions) {\n                            $element.fileupload('option', newOptions);\n                        }\n                    }\n                );\n            }\n        ])\n\n        // Provide File Upload progress feedback:\n        .controller('FileUploadProgressController', [\n            '$scope', '$attrs', '$parse',\n            function ($scope, $attrs, $parse) {\n                var fn = $parse($attrs.fileUploadProgress),\n                    update = function () {\n                        var progress = fn($scope);\n                        if (!progress || !progress.total) {\n                            return;\n                        }\n                        $scope.num = Math.floor(\n                            progress.loaded / progress.total * 100\n                        );\n                    };\n                update();\n                $scope.$watch(\n                    $attrs.fileUploadProgress + '.loaded',\n                    function (newValue, oldValue) {\n                        if (newValue !== oldValue) {\n                            update();\n                        }\n                    }\n                );\n            }\n        ])\n\n        // Display File Upload previews:\n        .controller('FileUploadPreviewController', [\n            '$scope', '$element', '$attrs',\n            function ($scope, $element, $attrs) {\n                $scope.$watch(\n                    $attrs.fileUploadPreview + '.preview',\n                    function (preview) {\n                        $element.empty();\n                        if (preview) {\n                            $element.append(preview);\n                        }\n                    }\n                );\n            }\n        ])\n\n        .directive('fileUpload', function () {\n            return {\n                controller: 'FileUploadController',\n                scope: true\n            };\n        })\n\n        .directive('fileUploadProgress', function () {\n            return {\n                controller: 'FileUploadProgressController',\n                scope: true\n            };\n        })\n\n        .directive('fileUploadPreview', function () {\n            return {\n                controller: 'FileUploadPreviewController'\n            };\n        })\n\n        // Enhance the HTML5 download attribute to\n        // allow drag&drop of files to the desktop:\n        .directive('download', function () {\n            return function (scope, elm) {\n                elm.on('dragstart', function (e) {\n                    try {\n                        e.originalEvent.dataTransfer.setData(\n                            'DownloadURL',\n                            [\n                                'application/octet-stream',\n                                elm.prop('download'),\n                                elm.prop('href')\n                            ].join(':')\n                        );\n                    } catch (ignore) {}\n                });\n            };\n        });\n\n}));\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/jquery.fileupload-audio.js",
    "content": "/*\n * jQuery File Upload Audio Preview Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window, document */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            'load-image',\n            './jquery.fileupload-process'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('blueimp-load-image/js/load-image'),\n            require('./jquery.fileupload-process')\n        );\n    } else {\n        // Browser globals:\n        factory(\n            window.jQuery,\n            window.loadImage\n        );\n    }\n}(function ($, loadImage) {\n    'use strict';\n\n    // Prepend to the default processQueue:\n    $.blueimp.fileupload.prototype.options.processQueue.unshift(\n        {\n            action: 'loadAudio',\n            // Use the action as prefix for the \"@\" options:\n            prefix: true,\n            fileTypes: '@',\n            maxFileSize: '@',\n            disabled: '@disableAudioPreview'\n        },\n        {\n            action: 'setAudio',\n            name: '@audioPreviewName',\n            disabled: '@disableAudioPreview'\n        }\n    );\n\n    // The File Upload Audio Preview plugin extends the fileupload widget\n    // with audio preview functionality:\n    $.widget('blueimp.fileupload', $.blueimp.fileupload, {\n\n        options: {\n            // The regular expression for the types of audio files to load,\n            // matched against the file type:\n            loadAudioFileTypes: /^audio\\/.*$/\n        },\n\n        _audioElement: document.createElement('audio'),\n\n        processActions: {\n\n            // Loads the audio file given via data.files and data.index\n            // as audio element if the browser supports playing it.\n            // Accepts the options fileTypes (regular expression)\n            // and maxFileSize (integer) to limit the files to load:\n            loadAudio: function (data, options) {\n                if (options.disabled) {\n                    return data;\n                }\n                var file = data.files[data.index],\n                    url,\n                    audio;\n                if (this._audioElement.canPlayType &&\n                        this._audioElement.canPlayType(file.type) &&\n                        ($.type(options.maxFileSize) !== 'number' ||\n                            file.size <= options.maxFileSize) &&\n                        (!options.fileTypes ||\n                            options.fileTypes.test(file.type))) {\n                    url = loadImage.createObjectURL(file);\n                    if (url) {\n                        audio = this._audioElement.cloneNode(false);\n                        audio.src = url;\n                        audio.controls = true;\n                        data.audio = audio;\n                        return data;\n                    }\n                }\n                return data;\n            },\n\n            // Sets the audio element as a property of the file object:\n            setAudio: function (data, options) {\n                if (data.audio && !options.disabled) {\n                    data.files[data.index][options.name || 'preview'] = data.audio;\n                }\n                return data;\n            }\n\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/jquery.fileupload-image.js",
    "content": "/*\n * jQuery File Upload Image Preview & Resize Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window, Blob */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            'load-image',\n            'load-image-meta',\n            'load-image-scale',\n            'load-image-exif',\n            'canvas-to-blob',\n            './jquery.fileupload-process'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('blueimp-load-image/js/load-image'),\n            require('blueimp-load-image/js/load-image-meta'),\n            require('blueimp-load-image/js/load-image-scale'),\n            require('blueimp-load-image/js/load-image-exif'),\n            require('blueimp-canvas-to-blob'),\n            require('./jquery.fileupload-process')\n        );\n    } else {\n        // Browser globals:\n        factory(\n            window.jQuery,\n            window.loadImage\n        );\n    }\n}(function ($, loadImage) {\n    'use strict';\n\n    // Prepend to the default processQueue:\n    $.blueimp.fileupload.prototype.options.processQueue.unshift(\n        {\n            action: 'loadImageMetaData',\n            disableImageHead: '@',\n            disableExif: '@',\n            disableExifThumbnail: '@',\n            disableExifSub: '@',\n            disableExifGps: '@',\n            disabled: '@disableImageMetaDataLoad'\n        },\n        {\n            action: 'loadImage',\n            // Use the action as prefix for the \"@\" options:\n            prefix: true,\n            fileTypes: '@',\n            maxFileSize: '@',\n            noRevoke: '@',\n            disabled: '@disableImageLoad'\n        },\n        {\n            action: 'resizeImage',\n            // Use \"image\" as prefix for the \"@\" options:\n            prefix: 'image',\n            maxWidth: '@',\n            maxHeight: '@',\n            minWidth: '@',\n            minHeight: '@',\n            crop: '@',\n            orientation: '@',\n            forceResize: '@',\n            disabled: '@disableImageResize'\n        },\n        {\n            action: 'saveImage',\n            quality: '@imageQuality',\n            type: '@imageType',\n            disabled: '@disableImageResize'\n        },\n        {\n            action: 'saveImageMetaData',\n            disabled: '@disableImageMetaDataSave'\n        },\n        {\n            action: 'resizeImage',\n            // Use \"preview\" as prefix for the \"@\" options:\n            prefix: 'preview',\n            maxWidth: '@',\n            maxHeight: '@',\n            minWidth: '@',\n            minHeight: '@',\n            crop: '@',\n            orientation: '@',\n            thumbnail: '@',\n            canvas: '@',\n            disabled: '@disableImagePreview'\n        },\n        {\n            action: 'setImage',\n            name: '@imagePreviewName',\n            disabled: '@disableImagePreview'\n        },\n        {\n            action: 'deleteImageReferences',\n            disabled: '@disableImageReferencesDeletion'\n        }\n    );\n\n    // The File Upload Resize plugin extends the fileupload widget\n    // with image resize functionality:\n    $.widget('blueimp.fileupload', $.blueimp.fileupload, {\n\n        options: {\n            // The regular expression for the types of images to load:\n            // matched against the file type:\n            loadImageFileTypes: /^image\\/(gif|jpeg|png|svg\\+xml)$/,\n            // The maximum file size of images to load:\n            loadImageMaxFileSize: 10000000, // 10MB\n            // The maximum width of resized images:\n            imageMaxWidth: 1920,\n            // The maximum height of resized images:\n            imageMaxHeight: 1080,\n            // Defines the image orientation (1-8) or takes the orientation\n            // value from Exif data if set to true:\n            imageOrientation: false,\n            // Define if resized images should be cropped or only scaled:\n            imageCrop: false,\n            // Disable the resize image functionality by default:\n            disableImageResize: true,\n            // The maximum width of the preview images:\n            previewMaxWidth: 80,\n            // The maximum height of the preview images:\n            previewMaxHeight: 80,\n            // Defines the preview orientation (1-8) or takes the orientation\n            // value from Exif data if set to true:\n            previewOrientation: true,\n            // Create the preview using the Exif data thumbnail:\n            previewThumbnail: true,\n            // Define if preview images should be cropped or only scaled:\n            previewCrop: false,\n            // Define if preview images should be resized as canvas elements:\n            previewCanvas: true\n        },\n\n        processActions: {\n\n            // Loads the image given via data.files and data.index\n            // as img element, if the browser supports the File API.\n            // Accepts the options fileTypes (regular expression)\n            // and maxFileSize (integer) to limit the files to load:\n            loadImage: function (data, options) {\n                if (options.disabled) {\n                    return data;\n                }\n                var that = this,\n                    file = data.files[data.index],\n                    dfd = $.Deferred();\n                if (($.type(options.maxFileSize) === 'number' &&\n                            file.size > options.maxFileSize) ||\n                        (options.fileTypes &&\n                            !options.fileTypes.test(file.type)) ||\n                        !loadImage(\n                            file,\n                            function (img) {\n                                if (img.src) {\n                                    data.img = img;\n                                }\n                                dfd.resolveWith(that, [data]);\n                            },\n                            options\n                        )) {\n                    return data;\n                }\n                return dfd.promise();\n            },\n\n            // Resizes the image given as data.canvas or data.img\n            // and updates data.canvas or data.img with the resized image.\n            // Also stores the resized image as preview property.\n            // Accepts the options maxWidth, maxHeight, minWidth,\n            // minHeight, canvas and crop:\n            resizeImage: function (data, options) {\n                if (options.disabled || !(data.canvas || data.img)) {\n                    return data;\n                }\n                options = $.extend({canvas: true}, options);\n                var that = this,\n                    dfd = $.Deferred(),\n                    img = (options.canvas && data.canvas) || data.img,\n                    resolve = function (newImg) {\n                        if (newImg && (newImg.width !== img.width ||\n                                newImg.height !== img.height ||\n                                options.forceResize)) {\n                            data[newImg.getContext ? 'canvas' : 'img'] = newImg;\n                        }\n                        data.preview = newImg;\n                        dfd.resolveWith(that, [data]);\n                    },\n                    thumbnail;\n                if (data.exif) {\n                    if (options.orientation === true) {\n                        options.orientation = data.exif.get('Orientation');\n                    }\n                    if (options.thumbnail) {\n                        thumbnail = data.exif.get('Thumbnail');\n                        if (thumbnail) {\n                            loadImage(thumbnail, resolve, options);\n                            return dfd.promise();\n                        }\n                    }\n                    // Prevent orienting the same image twice:\n                    if (data.orientation) {\n                        delete options.orientation;\n                    } else {\n                        data.orientation = options.orientation;\n                    }\n                }\n                if (img) {\n                    resolve(loadImage.scale(img, options));\n                    return dfd.promise();\n                }\n                return data;\n            },\n\n            // Saves the processed image given as data.canvas\n            // inplace at data.index of data.files:\n            saveImage: function (data, options) {\n                if (!data.canvas || options.disabled) {\n                    return data;\n                }\n                var that = this,\n                    file = data.files[data.index],\n                    dfd = $.Deferred();\n                if (data.canvas.toBlob) {\n                    data.canvas.toBlob(\n                        function (blob) {\n                            if (!blob.name) {\n                                if (file.type === blob.type) {\n                                    blob.name = file.name;\n                                } else if (file.name) {\n                                    blob.name = file.name.replace(\n                                        /\\.\\w+$/,\n                                        '.' + blob.type.substr(6)\n                                    );\n                                }\n                            }\n                            // Don't restore invalid meta data:\n                            if (file.type !== blob.type) {\n                                delete data.imageHead;\n                            }\n                            // Store the created blob at the position\n                            // of the original file in the files list:\n                            data.files[data.index] = blob;\n                            dfd.resolveWith(that, [data]);\n                        },\n                        options.type || file.type,\n                        options.quality\n                    );\n                } else {\n                    return data;\n                }\n                return dfd.promise();\n            },\n\n            loadImageMetaData: function (data, options) {\n                if (options.disabled) {\n                    return data;\n                }\n                var that = this,\n                    dfd = $.Deferred();\n                loadImage.parseMetaData(data.files[data.index], function (result) {\n                    $.extend(data, result);\n                    dfd.resolveWith(that, [data]);\n                }, options);\n                return dfd.promise();\n            },\n\n            saveImageMetaData: function (data, options) {\n                if (!(data.imageHead && data.canvas &&\n                        data.canvas.toBlob && !options.disabled)) {\n                    return data;\n                }\n                var file = data.files[data.index],\n                    blob = new Blob([\n                        data.imageHead,\n                        // Resized images always have a head size of 20 bytes,\n                        // including the JPEG marker and a minimal JFIF header:\n                        this._blobSlice.call(file, 20)\n                    ], {type: file.type});\n                blob.name = file.name;\n                data.files[data.index] = blob;\n                return data;\n            },\n\n            // Sets the resized version of the image as a property of the\n            // file object, must be called after \"saveImage\":\n            setImage: function (data, options) {\n                if (data.preview && !options.disabled) {\n                    data.files[data.index][options.name || 'preview'] = data.preview;\n                }\n                return data;\n            },\n\n            deleteImageReferences: function (data, options) {\n                if (!options.disabled) {\n                    delete data.img;\n                    delete data.canvas;\n                    delete data.preview;\n                    delete data.imageHead;\n                }\n                return data;\n            }\n\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/jquery.fileupload-jquery-ui.js",
    "content": "/*\n * jQuery File Upload jQuery UI Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            './jquery.fileupload-ui'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('./jquery.fileupload-ui')\n        );\n    } else {\n        // Browser globals:\n        factory(window.jQuery);\n    }\n}(function ($) {\n    'use strict';\n\n    $.widget('blueimp.fileupload', $.blueimp.fileupload, {\n\n        options: {\n            processdone: function (e, data) {\n                data.context.find('.start').button('enable');\n            },\n            progress: function (e, data) {\n                if (data.context) {\n                    data.context.find('.progress').progressbar(\n                        'option',\n                        'value',\n                        parseInt(data.loaded / data.total * 100, 10)\n                    );\n                }\n            },\n            progressall: function (e, data) {\n                var $this = $(this);\n                $this.find('.fileupload-progress')\n                    .find('.progress').progressbar(\n                        'option',\n                        'value',\n                        parseInt(data.loaded / data.total * 100, 10)\n                    ).end()\n                    .find('.progress-extended').each(function () {\n                        $(this).html(\n                            ($this.data('blueimp-fileupload') ||\n                                    $this.data('fileupload'))\n                                ._renderExtendedProgress(data)\n                        );\n                    });\n            }\n        },\n\n        _renderUpload: function (func, files) {\n            var node = this._super(func, files),\n                showIconText = $(window).width() > 480;\n            node.find('.progress').empty().progressbar();\n            node.find('.start').button({\n                icons: {primary: 'ui-icon-circle-arrow-e'},\n                text: showIconText\n            });\n            node.find('.cancel').button({\n                icons: {primary: 'ui-icon-cancel'},\n                text: showIconText\n            });\n            if (node.hasClass('fade')) {\n                node.hide();\n            }\n            return node;\n        },\n\n        _renderDownload: function (func, files) {\n            var node = this._super(func, files),\n                showIconText = $(window).width() > 480;\n            node.find('.delete').button({\n                icons: {primary: 'ui-icon-trash'},\n                text: showIconText\n            });\n            if (node.hasClass('fade')) {\n                node.hide();\n            }\n            return node;\n        },\n\n        _startHandler: function (e) {\n            $(e.currentTarget).button('disable');\n            this._super(e);\n        },\n\n        _transition: function (node) {\n            var deferred = $.Deferred();\n            if (node.hasClass('fade')) {\n                node.fadeToggle(\n                    this.options.transitionDuration,\n                    this.options.transitionEasing,\n                    function () {\n                        deferred.resolveWith(node);\n                    }\n                );\n            } else {\n                deferred.resolveWith(node);\n            }\n            return deferred;\n        },\n\n        _create: function () {\n            this._super();\n            this.element\n                .find('.fileupload-buttonbar')\n                .find('.fileinput-button').each(function () {\n                    var input = $(this).find('input:file').detach();\n                    $(this)\n                        .button({icons: {primary: 'ui-icon-plusthick'}})\n                        .append(input);\n                })\n                .end().find('.start')\n                .button({icons: {primary: 'ui-icon-circle-arrow-e'}})\n                .end().find('.cancel')\n                .button({icons: {primary: 'ui-icon-cancel'}})\n                .end().find('.delete')\n                .button({icons: {primary: 'ui-icon-trash'}})\n                .end().find('.progress').progressbar();\n        },\n\n        _destroy: function () {\n            this.element\n                .find('.fileupload-buttonbar')\n                .find('.fileinput-button').each(function () {\n                    var input = $(this).find('input:file').detach();\n                    $(this)\n                        .button('destroy')\n                        .append(input);\n                })\n                .end().find('.start')\n                .button('destroy')\n                .end().find('.cancel')\n                .button('destroy')\n                .end().find('.delete')\n                .button('destroy')\n                .end().find('.progress').progressbar('destroy');\n            this._super();\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/jquery.fileupload-process.js",
    "content": "/*\n * jQuery File Upload Processing Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2012, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            './jquery.fileupload'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('./jquery.fileupload')\n        );\n    } else {\n        // Browser globals:\n        factory(\n            window.jQuery\n        );\n    }\n}(function ($) {\n    'use strict';\n\n    var originalAdd = $.blueimp.fileupload.prototype.options.add;\n\n    // The File Upload Processing plugin extends the fileupload widget\n    // with file processing functionality:\n    $.widget('blueimp.fileupload', $.blueimp.fileupload, {\n\n        options: {\n            // The list of processing actions:\n            processQueue: [\n                /*\n                {\n                    action: 'log',\n                    type: 'debug'\n                }\n                */\n            ],\n            add: function (e, data) {\n                var $this = $(this);\n                data.process(function () {\n                    return $this.fileupload('process', data);\n                });\n                originalAdd.call(this, e, data);\n            }\n        },\n\n        processActions: {\n            /*\n            log: function (data, options) {\n                console[options.type](\n                    'Processing \"' + data.files[data.index].name + '\"'\n                );\n            }\n            */\n        },\n\n        _processFile: function (data, originalData) {\n            var that = this,\n                dfd = $.Deferred().resolveWith(that, [data]),\n                chain = dfd.promise();\n            this._trigger('process', null, data);\n            $.each(data.processQueue, function (i, settings) {\n                var func = function (data) {\n                    if (originalData.errorThrown) {\n                        return $.Deferred()\n                                .rejectWith(that, [originalData]).promise();\n                    }\n                    return that.processActions[settings.action].call(\n                        that,\n                        data,\n                        settings\n                    );\n                };\n                chain = chain.then(func, settings.always && func);\n            });\n            chain\n                .done(function () {\n                    that._trigger('processdone', null, data);\n                    that._trigger('processalways', null, data);\n                })\n                .fail(function () {\n                    that._trigger('processfail', null, data);\n                    that._trigger('processalways', null, data);\n                });\n            return chain;\n        },\n\n        // Replaces the settings of each processQueue item that\n        // are strings starting with an \"@\", using the remaining\n        // substring as key for the option map,\n        // e.g. \"@autoUpload\" is replaced with options.autoUpload:\n        _transformProcessQueue: function (options) {\n            var processQueue = [];\n            $.each(options.processQueue, function () {\n                var settings = {},\n                    action = this.action,\n                    prefix = this.prefix === true ? action : this.prefix;\n                $.each(this, function (key, value) {\n                    if ($.type(value) === 'string' &&\n                            value.charAt(0) === '@') {\n                        settings[key] = options[\n                            value.slice(1) || (prefix ? prefix +\n                                key.charAt(0).toUpperCase() + key.slice(1) : key)\n                        ];\n                    } else {\n                        settings[key] = value;\n                    }\n\n                });\n                processQueue.push(settings);\n            });\n            options.processQueue = processQueue;\n        },\n\n        // Returns the number of files currently in the processsing queue:\n        processing: function () {\n            return this._processing;\n        },\n\n        // Processes the files given as files property of the data parameter,\n        // returns a Promise object that allows to bind callbacks:\n        process: function (data) {\n            var that = this,\n                options = $.extend({}, this.options, data);\n            if (options.processQueue && options.processQueue.length) {\n                this._transformProcessQueue(options);\n                if (this._processing === 0) {\n                    this._trigger('processstart');\n                }\n                $.each(data.files, function (index) {\n                    var opts = index ? $.extend({}, options) : options,\n                        func = function () {\n                            if (data.errorThrown) {\n                                return $.Deferred()\n                                        .rejectWith(that, [data]).promise();\n                            }\n                            return that._processFile(opts, data);\n                        };\n                    opts.index = index;\n                    that._processing += 1;\n                    that._processingQueue = that._processingQueue.then(func, func)\n                        .always(function () {\n                            that._processing -= 1;\n                            if (that._processing === 0) {\n                                that._trigger('processstop');\n                            }\n                        });\n                });\n            }\n            return this._processingQueue;\n        },\n\n        _create: function () {\n            this._super();\n            this._processing = 0;\n            this._processingQueue = $.Deferred().resolveWith(this)\n                .promise();\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/jquery.fileupload-ui.js",
    "content": "/*\n * jQuery File Upload User Interface Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2010, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            'blueimp-tmpl',\n            './jquery.fileupload-image',\n            './jquery.fileupload-audio',\n            './jquery.fileupload-video',\n            './jquery.fileupload-validate'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('blueimp-tmpl'),\n            require('./jquery.fileupload-image'),\n            require('./jquery.fileupload-video'),\n            require('./jquery.fileupload-validate')\n        );\n    } else {\n        // Browser globals:\n        factory(\n            window.jQuery,\n            window.tmpl\n        );\n    }\n}(function ($, tmpl) {\n    'use strict';\n\n    $.blueimp.fileupload.prototype._specialOptions.push(\n        'filesContainer',\n        'uploadTemplateId',\n        'downloadTemplateId'\n    );\n\n    // The UI version extends the file upload widget\n    // and adds complete user interface interaction:\n    $.widget('blueimp.fileupload', $.blueimp.fileupload, {\n\n        options: {\n            // By default, files added to the widget are uploaded as soon\n            // as the user clicks on the start buttons. To enable automatic\n            // uploads, set the following option to true:\n            autoUpload: false,\n            // The ID of the upload template:\n            uploadTemplateId: 'template-upload',\n            // The ID of the download template:\n            downloadTemplateId: 'template-download',\n            // The container for the list of files. If undefined, it is set to\n            // an element with class \"files\" inside of the widget element:\n            filesContainer: undefined,\n            // By default, files are appended to the files container.\n            // Set the following option to true, to prepend files instead:\n            prependFiles: false,\n            // The expected data type of the upload response, sets the dataType\n            // option of the $.ajax upload requests:\n            dataType: 'json',\n\n            // Error and info messages:\n            messages: {\n                unknownError: 'Unknown error'\n            },\n\n            // Function returning the current number of files,\n            // used by the maxNumberOfFiles validation:\n            getNumberOfFiles: function () {\n                return this.filesContainer.children()\n                    .not('.processing').length;\n            },\n\n            // Callback to retrieve the list of files from the server response:\n            getFilesFromResponse: function (data) {\n                if (data.result && $.isArray(data.result.files)) {\n                    return data.result.files;\n                }\n                return [];\n            },\n\n            // The add callback is invoked as soon as files are added to the fileupload\n            // widget (via file input selection, drag & drop or add API call).\n            // See the basic file upload widget for more information:\n            add: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var $this = $(this),\n                    that = $this.data('blueimp-fileupload') ||\n                        $this.data('fileupload'),\n                    options = that.options;\n                data.context = that._renderUpload(data.files)\n                    .data('data', data)\n                    .addClass('processing');\n                options.filesContainer[\n                    options.prependFiles ? 'prepend' : 'append'\n                ](data.context);\n                that._forceReflow(data.context);\n                that._transition(data.context);\n                data.process(function () {\n                    return $this.fileupload('process', data);\n                }).always(function () {\n                    data.context.each(function (index) {\n                        $(this).find('.size').text(\n                            that._formatFileSize(data.files[index].size)\n                        );\n                    }).removeClass('processing');\n                    that._renderPreviews(data);\n                }).done(function () {\n                    data.context.find('.start').prop('disabled', false);\n                    if ((that._trigger('added', e, data) !== false) &&\n                            (options.autoUpload || data.autoUpload) &&\n                            data.autoUpload !== false) {\n                        data.submit();\n                    }\n                }).fail(function () {\n                    if (data.files.error) {\n                        data.context.each(function (index) {\n                            var error = data.files[index].error;\n                            if (error) {\n                                $(this).find('.error').text(error);\n                            }\n                        });\n                    }\n                });\n            },\n            // Callback for the start of each file upload request:\n            send: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var that = $(this).data('blueimp-fileupload') ||\n                        $(this).data('fileupload');\n                if (data.context && data.dataType &&\n                        data.dataType.substr(0, 6) === 'iframe') {\n                    // Iframe Transport does not support progress events.\n                    // In lack of an indeterminate progress bar, we set\n                    // the progress to 100%, showing the full animated bar:\n                    data.context\n                        .find('.progress').addClass(\n                            !$.support.transition && 'progress-animated'\n                        )\n                        .attr('aria-valuenow', 100)\n                        .children().first().css(\n                            'width',\n                            '100%'\n                        );\n                }\n                return that._trigger('sent', e, data);\n            },\n            // Callback for successful uploads:\n            done: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var that = $(this).data('blueimp-fileupload') ||\n                        $(this).data('fileupload'),\n                    getFilesFromResponse = data.getFilesFromResponse ||\n                        that.options.getFilesFromResponse,\n                    files = getFilesFromResponse(data),\n                    template,\n                    deferred;\n                if (data.context) {\n                    data.context.each(function (index) {\n                        var file = files[index] ||\n                                {error: 'Empty file upload result'};\n                        deferred = that._addFinishedDeferreds();\n                        that._transition($(this)).done(\n                            function () {\n                                var node = $(this);\n                                template = that._renderDownload([file])\n                                    .replaceAll(node);\n                                that._forceReflow(template);\n                                that._transition(template).done(\n                                    function () {\n                                        data.context = $(this);\n                                        that._trigger('completed', e, data);\n                                        that._trigger('finished', e, data);\n                                        deferred.resolve();\n                                    }\n                                );\n                            }\n                        );\n                    });\n                } else {\n                    template = that._renderDownload(files)[\n                        that.options.prependFiles ? 'prependTo' : 'appendTo'\n                    ](that.options.filesContainer);\n                    that._forceReflow(template);\n                    deferred = that._addFinishedDeferreds();\n                    that._transition(template).done(\n                        function () {\n                            data.context = $(this);\n                            that._trigger('completed', e, data);\n                            that._trigger('finished', e, data);\n                            deferred.resolve();\n                        }\n                    );\n                }\n            },\n            // Callback for failed (abort or error) uploads:\n            fail: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var that = $(this).data('blueimp-fileupload') ||\n                        $(this).data('fileupload'),\n                    template,\n                    deferred;\n                if (data.context) {\n                    data.context.each(function (index) {\n                        if (data.errorThrown !== 'abort') {\n                            var file = data.files[index];\n                            file.error = file.error || data.errorThrown ||\n                                data.i18n('unknownError');\n                            deferred = that._addFinishedDeferreds();\n                            that._transition($(this)).done(\n                                function () {\n                                    var node = $(this);\n                                    template = that._renderDownload([file])\n                                        .replaceAll(node);\n                                    that._forceReflow(template);\n                                    that._transition(template).done(\n                                        function () {\n                                            data.context = $(this);\n                                            that._trigger('failed', e, data);\n                                            that._trigger('finished', e, data);\n                                            deferred.resolve();\n                                        }\n                                    );\n                                }\n                            );\n                        } else {\n                            deferred = that._addFinishedDeferreds();\n                            that._transition($(this)).done(\n                                function () {\n                                    $(this).remove();\n                                    that._trigger('failed', e, data);\n                                    that._trigger('finished', e, data);\n                                    deferred.resolve();\n                                }\n                            );\n                        }\n                    });\n                } else if (data.errorThrown !== 'abort') {\n                    data.context = that._renderUpload(data.files)[\n                        that.options.prependFiles ? 'prependTo' : 'appendTo'\n                    ](that.options.filesContainer)\n                        .data('data', data);\n                    that._forceReflow(data.context);\n                    deferred = that._addFinishedDeferreds();\n                    that._transition(data.context).done(\n                        function () {\n                            data.context = $(this);\n                            that._trigger('failed', e, data);\n                            that._trigger('finished', e, data);\n                            deferred.resolve();\n                        }\n                    );\n                } else {\n                    that._trigger('failed', e, data);\n                    that._trigger('finished', e, data);\n                    that._addFinishedDeferreds().resolve();\n                }\n            },\n            // Callback for upload progress events:\n            progress: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var progress = Math.floor(data.loaded / data.total * 100);\n                if (data.context) {\n                    data.context.each(function () {\n                        $(this).find('.progress')\n                            .attr('aria-valuenow', progress)\n                            .children().first().css(\n                                'width',\n                                progress + '%'\n                            );\n                    });\n                }\n            },\n            // Callback for global upload progress events:\n            progressall: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var $this = $(this),\n                    progress = Math.floor(data.loaded / data.total * 100),\n                    globalProgressNode = $this.find('.fileupload-progress'),\n                    extendedProgressNode = globalProgressNode\n                        .find('.progress-extended');\n                if (extendedProgressNode.length) {\n                    extendedProgressNode.html(\n                        ($this.data('blueimp-fileupload') || $this.data('fileupload'))\n                            ._renderExtendedProgress(data)\n                    );\n                }\n                globalProgressNode\n                    .find('.progress')\n                    .attr('aria-valuenow', progress)\n                    .children().first().css(\n                        'width',\n                        progress + '%'\n                    );\n            },\n            // Callback for uploads start, equivalent to the global ajaxStart event:\n            start: function (e) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var that = $(this).data('blueimp-fileupload') ||\n                        $(this).data('fileupload');\n                that._resetFinishedDeferreds();\n                that._transition($(this).find('.fileupload-progress')).done(\n                    function () {\n                        that._trigger('started', e);\n                    }\n                );\n            },\n            // Callback for uploads stop, equivalent to the global ajaxStop event:\n            stop: function (e) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var that = $(this).data('blueimp-fileupload') ||\n                        $(this).data('fileupload'),\n                    deferred = that._addFinishedDeferreds();\n                $.when.apply($, that._getFinishedDeferreds())\n                    .done(function () {\n                        that._trigger('stopped', e);\n                    });\n                that._transition($(this).find('.fileupload-progress')).done(\n                    function () {\n                        $(this).find('.progress')\n                            .attr('aria-valuenow', '0')\n                            .children().first().css('width', '0%');\n                        $(this).find('.progress-extended').html('&nbsp;');\n                        deferred.resolve();\n                    }\n                );\n            },\n            processstart: function (e) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                $(this).addClass('fileupload-processing');\n            },\n            processstop: function (e) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                $(this).removeClass('fileupload-processing');\n            },\n            // Callback for file deletion:\n            destroy: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                var that = $(this).data('blueimp-fileupload') ||\n                        $(this).data('fileupload'),\n                    removeNode = function () {\n                        that._transition(data.context).done(\n                            function () {\n                                $(this).remove();\n                                that._trigger('destroyed', e, data);\n                            }\n                        );\n                    };\n                if (data.url) {\n                    data.dataType = data.dataType || that.options.dataType;\n                    $.ajax(data).done(removeNode).fail(function () {\n                        that._trigger('destroyfailed', e, data);\n                    });\n                } else {\n                    removeNode();\n                }\n            }\n        },\n\n        _resetFinishedDeferreds: function () {\n            this._finishedUploads = [];\n        },\n\n        _addFinishedDeferreds: function (deferred) {\n            if (!deferred) {\n                deferred = $.Deferred();\n            }\n            this._finishedUploads.push(deferred);\n            return deferred;\n        },\n\n        _getFinishedDeferreds: function () {\n            return this._finishedUploads;\n        },\n\n        // Link handler, that allows to download files\n        // by drag & drop of the links to the desktop:\n        _enableDragToDesktop: function () {\n            var link = $(this),\n                url = link.prop('href'),\n                name = link.prop('download'),\n                type = 'application/octet-stream';\n            link.bind('dragstart', function (e) {\n                try {\n                    e.originalEvent.dataTransfer.setData(\n                        'DownloadURL',\n                        [type, name, url].join(':')\n                    );\n                } catch (ignore) {}\n            });\n        },\n\n        _formatFileSize: function (bytes) {\n            if (typeof bytes !== 'number') {\n                return '';\n            }\n            if (bytes >= 1000000000) {\n                return (bytes / 1000000000).toFixed(2) + ' GB';\n            }\n            if (bytes >= 1000000) {\n                return (bytes / 1000000).toFixed(2) + ' MB';\n            }\n            return (bytes / 1000).toFixed(2) + ' KB';\n        },\n\n        _formatBitrate: function (bits) {\n            if (typeof bits !== 'number') {\n                return '';\n            }\n            if (bits >= 1000000000) {\n                return (bits / 1000000000).toFixed(2) + ' Gbit/s';\n            }\n            if (bits >= 1000000) {\n                return (bits / 1000000).toFixed(2) + ' Mbit/s';\n            }\n            if (bits >= 1000) {\n                return (bits / 1000).toFixed(2) + ' kbit/s';\n            }\n            return bits.toFixed(2) + ' bit/s';\n        },\n\n        _formatTime: function (seconds) {\n            var date = new Date(seconds * 1000),\n                days = Math.floor(seconds / 86400);\n            days = days ? days + 'd ' : '';\n            return days +\n                ('0' + date.getUTCHours()).slice(-2) + ':' +\n                ('0' + date.getUTCMinutes()).slice(-2) + ':' +\n                ('0' + date.getUTCSeconds()).slice(-2);\n        },\n\n        _formatPercentage: function (floatValue) {\n            return (floatValue * 100).toFixed(2) + ' %';\n        },\n\n        _renderExtendedProgress: function (data) {\n            return this._formatBitrate(data.bitrate) + ' | ' +\n                this._formatTime(\n                    (data.total - data.loaded) * 8 / data.bitrate\n                ) + ' | ' +\n                this._formatPercentage(\n                    data.loaded / data.total\n                ) + ' | ' +\n                this._formatFileSize(data.loaded) + ' / ' +\n                this._formatFileSize(data.total);\n        },\n\n        _renderTemplate: function (func, files) {\n            if (!func) {\n                return $();\n            }\n            var result = func({\n                files: files,\n                formatFileSize: this._formatFileSize,\n                options: this.options\n            });\n            if (result instanceof $) {\n                return result;\n            }\n            return $(this.options.templatesContainer).html(result).children();\n        },\n\n        _renderPreviews: function (data) {\n            data.context.find('.preview').each(function (index, elm) {\n                $(elm).append(data.files[index].preview);\n            });\n        },\n\n        _renderUpload: function (files) {\n            return this._renderTemplate(\n                this.options.uploadTemplate,\n                files\n            );\n        },\n\n        _renderDownload: function (files) {\n            return this._renderTemplate(\n                this.options.downloadTemplate,\n                files\n            ).find('a[download]').each(this._enableDragToDesktop).end();\n        },\n\n        _startHandler: function (e) {\n            e.preventDefault();\n            var button = $(e.currentTarget),\n                template = button.closest('.template-upload'),\n                data = template.data('data');\n            button.prop('disabled', true);\n            if (data && data.submit) {\n                data.submit();\n            }\n        },\n\n        _cancelHandler: function (e) {\n            e.preventDefault();\n            var template = $(e.currentTarget)\n                    .closest('.template-upload,.template-download'),\n                data = template.data('data') || {};\n            data.context = data.context || template;\n            if (data.abort) {\n                data.abort();\n            } else {\n                data.errorThrown = 'abort';\n                this._trigger('fail', e, data);\n            }\n        },\n\n        _deleteHandler: function (e) {\n            e.preventDefault();\n            var button = $(e.currentTarget);\n            this._trigger('destroy', e, $.extend({\n                context: button.closest('.template-download'),\n                type: 'DELETE'\n            }, button.data()));\n        },\n\n        _forceReflow: function (node) {\n            return $.support.transition && node.length &&\n                node[0].offsetWidth;\n        },\n\n        _transition: function (node) {\n            var dfd = $.Deferred();\n            if ($.support.transition && node.hasClass('fade') && node.is(':visible')) {\n                node.bind(\n                    $.support.transition.end,\n                    function (e) {\n                        // Make sure we don't respond to other transitions events\n                        // in the container element, e.g. from button elements:\n                        if (e.target === node[0]) {\n                            node.unbind($.support.transition.end);\n                            dfd.resolveWith(node);\n                        }\n                    }\n                ).toggleClass('in');\n            } else {\n                node.toggleClass('in');\n                dfd.resolveWith(node);\n            }\n            return dfd;\n        },\n\n        _initButtonBarEventHandlers: function () {\n            var fileUploadButtonBar = this.element.find('.fileupload-buttonbar'),\n                filesList = this.options.filesContainer;\n            this._on(fileUploadButtonBar.find('.start'), {\n                click: function (e) {\n                    e.preventDefault();\n                    filesList.find('.start').click();\n                }\n            });\n            this._on(fileUploadButtonBar.find('.cancel'), {\n                click: function (e) {\n                    e.preventDefault();\n                    filesList.find('.cancel').click();\n                }\n            });\n            this._on(fileUploadButtonBar.find('.delete'), {\n                click: function (e) {\n                    e.preventDefault();\n                    filesList.find('.toggle:checked')\n                        .closest('.template-download')\n                        .find('.delete').click();\n                    fileUploadButtonBar.find('.toggle')\n                        .prop('checked', false);\n                }\n            });\n            this._on(fileUploadButtonBar.find('.toggle'), {\n                change: function (e) {\n                    filesList.find('.toggle').prop(\n                        'checked',\n                        $(e.currentTarget).is(':checked')\n                    );\n                }\n            });\n        },\n\n        _destroyButtonBarEventHandlers: function () {\n            this._off(\n                this.element.find('.fileupload-buttonbar')\n                    .find('.start, .cancel, .delete'),\n                'click'\n            );\n            this._off(\n                this.element.find('.fileupload-buttonbar .toggle'),\n                'change.'\n            );\n        },\n\n        _initEventHandlers: function () {\n            this._super();\n            this._on(this.options.filesContainer, {\n                'click .start': this._startHandler,\n                'click .cancel': this._cancelHandler,\n                'click .delete': this._deleteHandler\n            });\n            this._initButtonBarEventHandlers();\n        },\n\n        _destroyEventHandlers: function () {\n            this._destroyButtonBarEventHandlers();\n            this._off(this.options.filesContainer, 'click');\n            this._super();\n        },\n\n        _enableFileInputButton: function () {\n            this.element.find('.fileinput-button input')\n                .prop('disabled', false)\n                .parent().removeClass('disabled');\n        },\n\n        _disableFileInputButton: function () {\n            this.element.find('.fileinput-button input')\n                .prop('disabled', true)\n                .parent().addClass('disabled');\n        },\n\n        _initTemplates: function () {\n            var options = this.options;\n            options.templatesContainer = this.document[0].createElement(\n                options.filesContainer.prop('nodeName')\n            );\n            if (tmpl) {\n                if (options.uploadTemplateId) {\n                    options.uploadTemplate = tmpl(options.uploadTemplateId);\n                }\n                if (options.downloadTemplateId) {\n                    options.downloadTemplate = tmpl(options.downloadTemplateId);\n                }\n            }\n        },\n\n        _initFilesContainer: function () {\n            var options = this.options;\n            if (options.filesContainer === undefined) {\n                options.filesContainer = this.element.find('.files');\n            } else if (!(options.filesContainer instanceof $)) {\n                options.filesContainer = $(options.filesContainer);\n            }\n        },\n\n        _initSpecialOptions: function () {\n            this._super();\n            this._initFilesContainer();\n            this._initTemplates();\n        },\n\n        _create: function () {\n            this._super();\n            this._resetFinishedDeferreds();\n            if (!$.support.fileInput) {\n                this._disableFileInputButton();\n            }\n        },\n\n        enable: function () {\n            var wasDisabled = false;\n            if (this.options.disabled) {\n                wasDisabled = true;\n            }\n            this._super();\n            if (wasDisabled) {\n                this.element.find('input, button').prop('disabled', false);\n                this._enableFileInputButton();\n            }\n        },\n\n        disable: function () {\n            if (!this.options.disabled) {\n                this.element.find('input, button').prop('disabled', true);\n                this._disableFileInputButton();\n            }\n            this._super();\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/jquery.fileupload-validate.js",
    "content": "/*\n * jQuery File Upload Validation Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* global define, require, window */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            './jquery.fileupload-process'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('./jquery.fileupload-process')\n        );\n    } else {\n        // Browser globals:\n        factory(\n            window.jQuery\n        );\n    }\n}(function ($) {\n    'use strict';\n\n    // Append to the default processQueue:\n    $.blueimp.fileupload.prototype.options.processQueue.push(\n        {\n            action: 'validate',\n            // Always trigger this action,\n            // even if the previous action was rejected:\n            always: true,\n            // Options taken from the global options map:\n            acceptFileTypes: '@',\n            maxFileSize: '@',\n            minFileSize: '@',\n            maxNumberOfFiles: '@',\n            disabled: '@disableValidation'\n        }\n    );\n\n    // The File Upload Validation plugin extends the fileupload widget\n    // with file validation functionality:\n    $.widget('blueimp.fileupload', $.blueimp.fileupload, {\n\n        options: {\n            /*\n            // The regular expression for allowed file types, matches\n            // against either file type or file name:\n            acceptFileTypes: /(\\.|\\/)(gif|jpe?g|png)$/i,\n            // The maximum allowed file size in bytes:\n            maxFileSize: 10000000, // 10 MB\n            // The minimum allowed file size in bytes:\n            minFileSize: undefined, // No minimal file size\n            // The limit of files to be uploaded:\n            maxNumberOfFiles: 10,\n            */\n\n            // Function returning the current number of files,\n            // has to be overriden for maxNumberOfFiles validation:\n            getNumberOfFiles: $.noop,\n\n            // Error and info messages:\n            messages: {\n                maxNumberOfFiles: 'Maximum number of files exceeded',\n                acceptFileTypes: 'File type not allowed',\n                maxFileSize: 'File is too large',\n                minFileSize: 'File is too small'\n            }\n        },\n\n        processActions: {\n\n            validate: function (data, options) {\n                if (options.disabled) {\n                    return data;\n                }\n                var dfd = $.Deferred(),\n                    settings = this.options,\n                    file = data.files[data.index],\n                    fileSize;\n                if (options.minFileSize || options.maxFileSize) {\n                    fileSize = file.size;\n                }\n                if ($.type(options.maxNumberOfFiles) === 'number' &&\n                        (settings.getNumberOfFiles() || 0) + data.files.length >\n                            options.maxNumberOfFiles) {\n                    file.error = settings.i18n('maxNumberOfFiles');\n                } else if (options.acceptFileTypes &&\n                        !(options.acceptFileTypes.test(file.type) ||\n                        options.acceptFileTypes.test(file.name))) {\n                    file.error = settings.i18n('acceptFileTypes');\n                } else if (fileSize > options.maxFileSize) {\n                    file.error = settings.i18n('maxFileSize');\n                } else if ($.type(fileSize) === 'number' &&\n                        fileSize < options.minFileSize) {\n                    file.error = settings.i18n('minFileSize');\n                } else {\n                    delete file.error;\n                }\n                if (file.error || data.files.error) {\n                    data.files.error = true;\n                    dfd.rejectWith(this, [data]);\n                } else {\n                    dfd.resolveWith(this, [data]);\n                }\n                return dfd.promise();\n            }\n\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/jquery.fileupload-video.js",
    "content": "/*\n * jQuery File Upload Video Preview Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2013, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window, document */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            'load-image',\n            './jquery.fileupload-process'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('blueimp-load-image/js/load-image'),\n            require('./jquery.fileupload-process')\n        );\n    } else {\n        // Browser globals:\n        factory(\n            window.jQuery,\n            window.loadImage\n        );\n    }\n}(function ($, loadImage) {\n    'use strict';\n\n    // Prepend to the default processQueue:\n    $.blueimp.fileupload.prototype.options.processQueue.unshift(\n        {\n            action: 'loadVideo',\n            // Use the action as prefix for the \"@\" options:\n            prefix: true,\n            fileTypes: '@',\n            maxFileSize: '@',\n            disabled: '@disableVideoPreview'\n        },\n        {\n            action: 'setVideo',\n            name: '@videoPreviewName',\n            disabled: '@disableVideoPreview'\n        }\n    );\n\n    // The File Upload Video Preview plugin extends the fileupload widget\n    // with video preview functionality:\n    $.widget('blueimp.fileupload', $.blueimp.fileupload, {\n\n        options: {\n            // The regular expression for the types of video files to load,\n            // matched against the file type:\n            loadVideoFileTypes: /^video\\/.*$/\n        },\n\n        _videoElement: document.createElement('video'),\n\n        processActions: {\n\n            // Loads the video file given via data.files and data.index\n            // as video element if the browser supports playing it.\n            // Accepts the options fileTypes (regular expression)\n            // and maxFileSize (integer) to limit the files to load:\n            loadVideo: function (data, options) {\n                if (options.disabled) {\n                    return data;\n                }\n                var file = data.files[data.index],\n                    url,\n                    video;\n                if (this._videoElement.canPlayType &&\n                        this._videoElement.canPlayType(file.type) &&\n                        ($.type(options.maxFileSize) !== 'number' ||\n                            file.size <= options.maxFileSize) &&\n                        (!options.fileTypes ||\n                            options.fileTypes.test(file.type))) {\n                    url = loadImage.createObjectURL(file);\n                    if (url) {\n                        video = this._videoElement.cloneNode(false);\n                        video.src = url;\n                        video.controls = true;\n                        data.video = video;\n                        return data;\n                    }\n                }\n                return data;\n            },\n\n            // Sets the video element as a property of the file object:\n            setVideo: function (data, options) {\n                if (data.video && !options.disabled) {\n                    data.files[data.index][options.name || 'preview'] = data.video;\n                }\n                return data;\n            }\n\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/jquery.fileupload.js",
    "content": "/*\n * jQuery File Upload Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2010, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window, document, location, Blob, FormData */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define([\n            'jquery',\n            'jquery-ui/ui/widget'\n        ], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(\n            require('jquery'),\n            require('./vendor/jquery.ui.widget')\n        );\n    } else {\n        // Browser globals:\n        factory(window.jQuery);\n    }\n}(function ($) {\n    'use strict';\n\n    // Detect file input support, based on\n    // http://viljamis.com/blog/2012/file-upload-support-on-mobile/\n    $.support.fileInput = !(new RegExp(\n        // Handle devices which give false positives for the feature detection:\n        '(Android (1\\\\.[0156]|2\\\\.[01]))' +\n            '|(Windows Phone (OS 7|8\\\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' +\n            '|(w(eb)?OSBrowser)|(webOS)' +\n            '|(Kindle/(1\\\\.0|2\\\\.[05]|3\\\\.0))'\n    ).test(window.navigator.userAgent) ||\n        // Feature detection for all other devices:\n        $('<input type=\"file\">').prop('disabled'));\n\n    // The FileReader API is not actually used, but works as feature detection,\n    // as some Safari versions (5?) support XHR file uploads via the FormData API,\n    // but not non-multipart XHR file uploads.\n    // window.XMLHttpRequestUpload is not available on IE10, so we check for\n    // window.ProgressEvent instead to detect XHR2 file upload capability:\n    $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader);\n    $.support.xhrFormDataFileUpload = !!window.FormData;\n\n    // Detect support for Blob slicing (required for chunked uploads):\n    $.support.blobSlice = window.Blob && (Blob.prototype.slice ||\n        Blob.prototype.webkitSlice || Blob.prototype.mozSlice);\n\n    // Helper function to create drag handlers for dragover/dragenter/dragleave:\n    function getDragHandler(type) {\n        var isDragOver = type === 'dragover';\n        return function (e) {\n            e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;\n            var dataTransfer = e.dataTransfer;\n            if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 &&\n                    this._trigger(\n                        type,\n                        $.Event(type, {delegatedEvent: e})\n                    ) !== false) {\n                e.preventDefault();\n                if (isDragOver) {\n                    dataTransfer.dropEffect = 'copy';\n                }\n            }\n        };\n    }\n\n    // The fileupload widget listens for change events on file input fields defined\n    // via fileInput setting and paste or drop events of the given dropZone.\n    // In addition to the default jQuery Widget methods, the fileupload widget\n    // exposes the \"add\" and \"send\" methods, to add or directly send files using\n    // the fileupload API.\n    // By default, files added via file input selection, paste, drag & drop or\n    // \"add\" method are uploaded immediately, but it is possible to override\n    // the \"add\" callback option to queue file uploads.\n    $.widget('blueimp.fileupload', {\n\n        options: {\n            // The drop target element(s), by the default the complete document.\n            // Set to null to disable drag & drop support:\n            dropZone: $(document),\n            // The paste target element(s), by the default undefined.\n            // Set to a DOM node or jQuery object to enable file pasting:\n            pasteZone: undefined,\n            // The file input field(s), that are listened to for change events.\n            // If undefined, it is set to the file input fields inside\n            // of the widget element on plugin initialization.\n            // Set to null to disable the change listener.\n            fileInput: undefined,\n            // By default, the file input field is replaced with a clone after\n            // each input field change event. This is required for iframe transport\n            // queues and allows change events to be fired for the same file\n            // selection, but can be disabled by setting the following option to false:\n            replaceFileInput: true,\n            // The parameter name for the file form data (the request argument name).\n            // If undefined or empty, the name property of the file input field is\n            // used, or \"files[]\" if the file input name property is also empty,\n            // can be a string or an array of strings:\n            paramName: undefined,\n            // By default, each file of a selection is uploaded using an individual\n            // request for XHR type uploads. Set to false to upload file\n            // selections in one request each:\n            singleFileUploads: true,\n            // To limit the number of files uploaded with one XHR request,\n            // set the following option to an integer greater than 0:\n            limitMultiFileUploads: undefined,\n            // The following option limits the number of files uploaded with one\n            // XHR request to keep the request size under or equal to the defined\n            // limit in bytes:\n            limitMultiFileUploadSize: undefined,\n            // Multipart file uploads add a number of bytes to each uploaded file,\n            // therefore the following option adds an overhead for each file used\n            // in the limitMultiFileUploadSize configuration:\n            limitMultiFileUploadSizeOverhead: 512,\n            // Set the following option to true to issue all file upload requests\n            // in a sequential order:\n            sequentialUploads: false,\n            // To limit the number of concurrent uploads,\n            // set the following option to an integer greater than 0:\n            limitConcurrentUploads: undefined,\n            // Set the following option to true to force iframe transport uploads:\n            forceIframeTransport: false,\n            // Set the following option to the location of a redirect url on the\n            // origin server, for cross-domain iframe transport uploads:\n            redirect: undefined,\n            // The parameter name for the redirect url, sent as part of the form\n            // data and set to 'redirect' if this option is empty:\n            redirectParamName: undefined,\n            // Set the following option to the location of a postMessage window,\n            // to enable postMessage transport uploads:\n            postMessage: undefined,\n            // By default, XHR file uploads are sent as multipart/form-data.\n            // The iframe transport is always using multipart/form-data.\n            // Set to false to enable non-multipart XHR uploads:\n            multipart: true,\n            // To upload large files in smaller chunks, set the following option\n            // to a preferred maximum chunk size. If set to 0, null or undefined,\n            // or the browser does not support the required Blob API, files will\n            // be uploaded as a whole.\n            maxChunkSize: undefined,\n            // When a non-multipart upload or a chunked multipart upload has been\n            // aborted, this option can be used to resume the upload by setting\n            // it to the size of the already uploaded bytes. This option is most\n            // useful when modifying the options object inside of the \"add\" or\n            // \"send\" callbacks, as the options are cloned for each file upload.\n            uploadedBytes: undefined,\n            // By default, failed (abort or error) file uploads are removed from the\n            // global progress calculation. Set the following option to false to\n            // prevent recalculating the global progress data:\n            recalculateProgress: true,\n            // Interval in milliseconds to calculate and trigger progress events:\n            progressInterval: 100,\n            // Interval in milliseconds to calculate progress bitrate:\n            bitrateInterval: 500,\n            // By default, uploads are started automatically when adding files:\n            autoUpload: true,\n\n            // Error and info messages:\n            messages: {\n                uploadedBytes: 'Uploaded bytes exceed file size'\n            },\n\n            // Translation function, gets the message key to be translated\n            // and an object with context specific data as arguments:\n            i18n: function (message, context) {\n                message = this.messages[message] || message.toString();\n                if (context) {\n                    $.each(context, function (key, value) {\n                        message = message.replace('{' + key + '}', value);\n                    });\n                }\n                return message;\n            },\n\n            // Additional form data to be sent along with the file uploads can be set\n            // using this option, which accepts an array of objects with name and\n            // value properties, a function returning such an array, a FormData\n            // object (for XHR file uploads), or a simple object.\n            // The form of the first fileInput is given as parameter to the function:\n            formData: function (form) {\n                return form.serializeArray();\n            },\n\n            // The add callback is invoked as soon as files are added to the fileupload\n            // widget (via file input selection, drag & drop, paste or add API call).\n            // If the singleFileUploads option is enabled, this callback will be\n            // called once for each file in the selection for XHR file uploads, else\n            // once for each file selection.\n            //\n            // The upload starts when the submit method is invoked on the data parameter.\n            // The data object contains a files property holding the added files\n            // and allows you to override plugin options as well as define ajax settings.\n            //\n            // Listeners for this callback can also be bound the following way:\n            // .bind('fileuploadadd', func);\n            //\n            // data.submit() returns a Promise object and allows to attach additional\n            // handlers using jQuery's Deferred callbacks:\n            // data.submit().done(func).fail(func).always(func);\n            add: function (e, data) {\n                if (e.isDefaultPrevented()) {\n                    return false;\n                }\n                if (data.autoUpload || (data.autoUpload !== false &&\n                        $(this).fileupload('option', 'autoUpload'))) {\n                    data.process().done(function () {\n                        data.submit();\n                    });\n                }\n            },\n\n            // Other callbacks:\n\n            // Callback for the submit event of each file upload:\n            // submit: function (e, data) {}, // .bind('fileuploadsubmit', func);\n\n            // Callback for the start of each file upload request:\n            // send: function (e, data) {}, // .bind('fileuploadsend', func);\n\n            // Callback for successful uploads:\n            // done: function (e, data) {}, // .bind('fileuploaddone', func);\n\n            // Callback for failed (abort or error) uploads:\n            // fail: function (e, data) {}, // .bind('fileuploadfail', func);\n\n            // Callback for completed (success, abort or error) requests:\n            // always: function (e, data) {}, // .bind('fileuploadalways', func);\n\n            // Callback for upload progress events:\n            // progress: function (e, data) {}, // .bind('fileuploadprogress', func);\n\n            // Callback for global upload progress events:\n            // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func);\n\n            // Callback for uploads start, equivalent to the global ajaxStart event:\n            // start: function (e) {}, // .bind('fileuploadstart', func);\n\n            // Callback for uploads stop, equivalent to the global ajaxStop event:\n            // stop: function (e) {}, // .bind('fileuploadstop', func);\n\n            // Callback for change events of the fileInput(s):\n            // change: function (e, data) {}, // .bind('fileuploadchange', func);\n\n            // Callback for paste events to the pasteZone(s):\n            // paste: function (e, data) {}, // .bind('fileuploadpaste', func);\n\n            // Callback for drop events of the dropZone(s):\n            // drop: function (e, data) {}, // .bind('fileuploaddrop', func);\n\n            // Callback for dragover events of the dropZone(s):\n            // dragover: function (e) {}, // .bind('fileuploaddragover', func);\n\n            // Callback for the start of each chunk upload request:\n            // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func);\n\n            // Callback for successful chunk uploads:\n            // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func);\n\n            // Callback for failed (abort or error) chunk uploads:\n            // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func);\n\n            // Callback for completed (success, abort or error) chunk upload requests:\n            // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func);\n\n            // The plugin options are used as settings object for the ajax calls.\n            // The following are jQuery ajax settings required for the file uploads:\n            processData: false,\n            contentType: false,\n            cache: false,\n            timeout: 0\n        },\n\n        // A list of options that require reinitializing event listeners and/or\n        // special initialization code:\n        _specialOptions: [\n            'fileInput',\n            'dropZone',\n            'pasteZone',\n            'multipart',\n            'forceIframeTransport'\n        ],\n\n        _blobSlice: $.support.blobSlice && function () {\n            var slice = this.slice || this.webkitSlice || this.mozSlice;\n            return slice.apply(this, arguments);\n        },\n\n        _BitrateTimer: function () {\n            this.timestamp = ((Date.now) ? Date.now() : (new Date()).getTime());\n            this.loaded = 0;\n            this.bitrate = 0;\n            this.getBitrate = function (now, loaded, interval) {\n                var timeDiff = now - this.timestamp;\n                if (!this.bitrate || !interval || timeDiff > interval) {\n                    this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;\n                    this.loaded = loaded;\n                    this.timestamp = now;\n                }\n                return this.bitrate;\n            };\n        },\n\n        _isXHRUpload: function (options) {\n            return !options.forceIframeTransport &&\n                ((!options.multipart && $.support.xhrFileUpload) ||\n                $.support.xhrFormDataFileUpload);\n        },\n\n        _getFormData: function (options) {\n            var formData;\n            if ($.type(options.formData) === 'function') {\n                return options.formData(options.form);\n            }\n            if ($.isArray(options.formData)) {\n                return options.formData;\n            }\n            if ($.type(options.formData) === 'object') {\n                formData = [];\n                $.each(options.formData, function (name, value) {\n                    formData.push({name: name, value: value});\n                });\n                return formData;\n            }\n            return [];\n        },\n\n        _getTotal: function (files) {\n            var total = 0;\n            $.each(files, function (index, file) {\n                total += file.size || 1;\n            });\n            return total;\n        },\n\n        _initProgressObject: function (obj) {\n            var progress = {\n                loaded: 0,\n                total: 0,\n                bitrate: 0\n            };\n            if (obj._progress) {\n                $.extend(obj._progress, progress);\n            } else {\n                obj._progress = progress;\n            }\n        },\n\n        _initResponseObject: function (obj) {\n            var prop;\n            if (obj._response) {\n                for (prop in obj._response) {\n                    if (obj._response.hasOwnProperty(prop)) {\n                        delete obj._response[prop];\n                    }\n                }\n            } else {\n                obj._response = {};\n            }\n        },\n\n        _onProgress: function (e, data) {\n            if (e.lengthComputable) {\n                var now = ((Date.now) ? Date.now() : (new Date()).getTime()),\n                    loaded;\n                if (data._time && data.progressInterval &&\n                        (now - data._time < data.progressInterval) &&\n                        e.loaded !== e.total) {\n                    return;\n                }\n                data._time = now;\n                loaded = Math.floor(\n                    e.loaded / e.total * (data.chunkSize || data._progress.total)\n                ) + (data.uploadedBytes || 0);\n                // Add the difference from the previously loaded state\n                // to the global loaded counter:\n                this._progress.loaded += (loaded - data._progress.loaded);\n                this._progress.bitrate = this._bitrateTimer.getBitrate(\n                    now,\n                    this._progress.loaded,\n                    data.bitrateInterval\n                );\n                data._progress.loaded = data.loaded = loaded;\n                data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate(\n                    now,\n                    loaded,\n                    data.bitrateInterval\n                );\n                // Trigger a custom progress event with a total data property set\n                // to the file size(s) of the current upload and a loaded data\n                // property calculated accordingly:\n                this._trigger(\n                    'progress',\n                    $.Event('progress', {delegatedEvent: e}),\n                    data\n                );\n                // Trigger a global progress event for all current file uploads,\n                // including ajax calls queued for sequential file uploads:\n                this._trigger(\n                    'progressall',\n                    $.Event('progressall', {delegatedEvent: e}),\n                    this._progress\n                );\n            }\n        },\n\n        _initProgressListener: function (options) {\n            var that = this,\n                xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr();\n            // Accesss to the native XHR object is required to add event listeners\n            // for the upload progress event:\n            if (xhr.upload) {\n                $(xhr.upload).bind('progress', function (e) {\n                    var oe = e.originalEvent;\n                    // Make sure the progress event properties get copied over:\n                    e.lengthComputable = oe.lengthComputable;\n                    e.loaded = oe.loaded;\n                    e.total = oe.total;\n                    that._onProgress(e, options);\n                });\n                options.xhr = function () {\n                    return xhr;\n                };\n            }\n        },\n\n        _isInstanceOf: function (type, obj) {\n            // Cross-frame instanceof check\n            return Object.prototype.toString.call(obj) === '[object ' + type + ']';\n        },\n\n        _initXHRData: function (options) {\n            var that = this,\n                formData,\n                file = options.files[0],\n                // Ignore non-multipart setting if not supported:\n                multipart = options.multipart || !$.support.xhrFileUpload,\n                paramName = $.type(options.paramName) === 'array' ?\n                    options.paramName[0] : options.paramName;\n            options.headers = $.extend({}, options.headers);\n            if (options.contentRange) {\n                options.headers['Content-Range'] = options.contentRange;\n            }\n            if (!multipart || options.blob || !this._isInstanceOf('File', file)) {\n                options.headers['Content-Disposition'] = 'attachment; filename=\"' +\n                    encodeURI(file.name) + '\"';\n            }\n            if (!multipart) {\n                options.contentType = file.type || 'application/octet-stream';\n                options.data = options.blob || file;\n            } else if ($.support.xhrFormDataFileUpload) {\n                if (options.postMessage) {\n                    // window.postMessage does not allow sending FormData\n                    // objects, so we just add the File/Blob objects to\n                    // the formData array and let the postMessage window\n                    // create the FormData object out of this array:\n                    formData = this._getFormData(options);\n                    if (options.blob) {\n                        formData.push({\n                            name: paramName,\n                            value: options.blob\n                        });\n                    } else {\n                        $.each(options.files, function (index, file) {\n                            formData.push({\n                                name: ($.type(options.paramName) === 'array' &&\n                                    options.paramName[index]) || paramName,\n                                value: file\n                            });\n                        });\n                    }\n                } else {\n                    if (that._isInstanceOf('FormData', options.formData)) {\n                        formData = options.formData;\n                    } else {\n                        formData = new FormData();\n                        $.each(this._getFormData(options), function (index, field) {\n                            formData.append(field.name, field.value);\n                        });\n                    }\n                    if (options.blob) {\n                        formData.append(paramName, options.blob, file.name);\n                    } else {\n                        $.each(options.files, function (index, file) {\n                            // This check allows the tests to run with\n                            // dummy objects:\n                            if (that._isInstanceOf('File', file) ||\n                                    that._isInstanceOf('Blob', file)) {\n                                formData.append(\n                                    ($.type(options.paramName) === 'array' &&\n                                        options.paramName[index]) || paramName,\n                                    file,\n                                    file.uploadName || file.name\n                                );\n                            }\n                        });\n                    }\n                }\n                options.data = formData;\n            }\n            // Blob reference is not needed anymore, free memory:\n            options.blob = null;\n        },\n\n        _initIframeSettings: function (options) {\n            var targetHost = $('<a></a>').prop('href', options.url).prop('host');\n            // Setting the dataType to iframe enables the iframe transport:\n            options.dataType = 'iframe ' + (options.dataType || '');\n            // The iframe transport accepts a serialized array as form data:\n            options.formData = this._getFormData(options);\n            // Add redirect url to form data on cross-domain uploads:\n            if (options.redirect && targetHost && targetHost !== location.host) {\n                options.formData.push({\n                    name: options.redirectParamName || 'redirect',\n                    value: options.redirect\n                });\n            }\n        },\n\n        _initDataSettings: function (options) {\n            if (this._isXHRUpload(options)) {\n                if (!this._chunkedUpload(options, true)) {\n                    if (!options.data) {\n                        this._initXHRData(options);\n                    }\n                    this._initProgressListener(options);\n                }\n                if (options.postMessage) {\n                    // Setting the dataType to postmessage enables the\n                    // postMessage transport:\n                    options.dataType = 'postmessage ' + (options.dataType || '');\n                }\n            } else {\n                this._initIframeSettings(options);\n            }\n        },\n\n        _getParamName: function (options) {\n            var fileInput = $(options.fileInput),\n                paramName = options.paramName;\n            if (!paramName) {\n                paramName = [];\n                fileInput.each(function () {\n                    var input = $(this),\n                        name = input.prop('name') || 'files[]',\n                        i = (input.prop('files') || [1]).length;\n                    while (i) {\n                        paramName.push(name);\n                        i -= 1;\n                    }\n                });\n                if (!paramName.length) {\n                    paramName = [fileInput.prop('name') || 'files[]'];\n                }\n            } else if (!$.isArray(paramName)) {\n                paramName = [paramName];\n            }\n            return paramName;\n        },\n\n        _initFormSettings: function (options) {\n            // Retrieve missing options from the input field and the\n            // associated form, if available:\n            if (!options.form || !options.form.length) {\n                options.form = $(options.fileInput.prop('form'));\n                // If the given file input doesn't have an associated form,\n                // use the default widget file input's form:\n                if (!options.form.length) {\n                    options.form = $(this.options.fileInput.prop('form'));\n                }\n            }\n            options.paramName = this._getParamName(options);\n            if (!options.url) {\n                options.url = options.form.prop('action') || location.href;\n            }\n            // The HTTP request method must be \"POST\" or \"PUT\":\n            options.type = (options.type ||\n                ($.type(options.form.prop('method')) === 'string' &&\n                    options.form.prop('method')) || ''\n                ).toUpperCase();\n            if (options.type !== 'POST' && options.type !== 'PUT' &&\n                    options.type !== 'PATCH') {\n                options.type = 'POST';\n            }\n            if (!options.formAcceptCharset) {\n                options.formAcceptCharset = options.form.attr('accept-charset');\n            }\n        },\n\n        _getAJAXSettings: function (data) {\n            var options = $.extend({}, this.options, data);\n            this._initFormSettings(options);\n            this._initDataSettings(options);\n            return options;\n        },\n\n        // jQuery 1.6 doesn't provide .state(),\n        // while jQuery 1.8+ removed .isRejected() and .isResolved():\n        _getDeferredState: function (deferred) {\n            if (deferred.state) {\n                return deferred.state();\n            }\n            if (deferred.isResolved()) {\n                return 'resolved';\n            }\n            if (deferred.isRejected()) {\n                return 'rejected';\n            }\n            return 'pending';\n        },\n\n        // Maps jqXHR callbacks to the equivalent\n        // methods of the given Promise object:\n        _enhancePromise: function (promise) {\n            promise.success = promise.done;\n            promise.error = promise.fail;\n            promise.complete = promise.always;\n            return promise;\n        },\n\n        // Creates and returns a Promise object enhanced with\n        // the jqXHR methods abort, success, error and complete:\n        _getXHRPromise: function (resolveOrReject, context, args) {\n            var dfd = $.Deferred(),\n                promise = dfd.promise();\n            context = context || this.options.context || promise;\n            if (resolveOrReject === true) {\n                dfd.resolveWith(context, args);\n            } else if (resolveOrReject === false) {\n                dfd.rejectWith(context, args);\n            }\n            promise.abort = dfd.promise;\n            return this._enhancePromise(promise);\n        },\n\n        // Adds convenience methods to the data callback argument:\n        _addConvenienceMethods: function (e, data) {\n            var that = this,\n                getPromise = function (args) {\n                    return $.Deferred().resolveWith(that, args).promise();\n                };\n            data.process = function (resolveFunc, rejectFunc) {\n                if (resolveFunc || rejectFunc) {\n                    data._processQueue = this._processQueue =\n                        (this._processQueue || getPromise([this])).then(\n                            function () {\n                                if (data.errorThrown) {\n                                    return $.Deferred()\n                                        .rejectWith(that, [data]).promise();\n                                }\n                                return getPromise(arguments);\n                            }\n                        ).then(resolveFunc, rejectFunc);\n                }\n                return this._processQueue || getPromise([this]);\n            };\n            data.submit = function () {\n                if (this.state() !== 'pending') {\n                    data.jqXHR = this.jqXHR =\n                        (that._trigger(\n                            'submit',\n                            $.Event('submit', {delegatedEvent: e}),\n                            this\n                        ) !== false) && that._onSend(e, this);\n                }\n                return this.jqXHR || that._getXHRPromise();\n            };\n            data.abort = function () {\n                if (this.jqXHR) {\n                    return this.jqXHR.abort();\n                }\n                this.errorThrown = 'abort';\n                that._trigger('fail', null, this);\n                return that._getXHRPromise(false);\n            };\n            data.state = function () {\n                if (this.jqXHR) {\n                    return that._getDeferredState(this.jqXHR);\n                }\n                if (this._processQueue) {\n                    return that._getDeferredState(this._processQueue);\n                }\n            };\n            data.processing = function () {\n                return !this.jqXHR && this._processQueue && that\n                    ._getDeferredState(this._processQueue) === 'pending';\n            };\n            data.progress = function () {\n                return this._progress;\n            };\n            data.response = function () {\n                return this._response;\n            };\n        },\n\n        // Parses the Range header from the server response\n        // and returns the uploaded bytes:\n        _getUploadedBytes: function (jqXHR) {\n            var range = jqXHR.getResponseHeader('Range'),\n                parts = range && range.split('-'),\n                upperBytesPos = parts && parts.length > 1 &&\n                    parseInt(parts[1], 10);\n            return upperBytesPos && upperBytesPos + 1;\n        },\n\n        // Uploads a file in multiple, sequential requests\n        // by splitting the file up in multiple blob chunks.\n        // If the second parameter is true, only tests if the file\n        // should be uploaded in chunks, but does not invoke any\n        // upload requests:\n        _chunkedUpload: function (options, testOnly) {\n            options.uploadedBytes = options.uploadedBytes || 0;\n            var that = this,\n                file = options.files[0],\n                fs = file.size,\n                ub = options.uploadedBytes,\n                mcs = options.maxChunkSize || fs,\n                slice = this._blobSlice,\n                dfd = $.Deferred(),\n                promise = dfd.promise(),\n                jqXHR,\n                upload;\n            if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) ||\n                    options.data) {\n                return false;\n            }\n            if (testOnly) {\n                return true;\n            }\n            if (ub >= fs) {\n                file.error = options.i18n('uploadedBytes');\n                return this._getXHRPromise(\n                    false,\n                    options.context,\n                    [null, 'error', file.error]\n                );\n            }\n            // The chunk upload method:\n            upload = function () {\n                // Clone the options object for each chunk upload:\n                var o = $.extend({}, options),\n                    currentLoaded = o._progress.loaded;\n                o.blob = slice.call(\n                    file,\n                    ub,\n                    ub + mcs,\n                    file.type\n                );\n                // Store the current chunk size, as the blob itself\n                // will be dereferenced after data processing:\n                o.chunkSize = o.blob.size;\n                // Expose the chunk bytes position range:\n                o.contentRange = 'bytes ' + ub + '-' +\n                    (ub + o.chunkSize - 1) + '/' + fs;\n                // Process the upload data (the blob and potential form data):\n                that._initXHRData(o);\n                // Add progress listeners for this chunk upload:\n                that._initProgressListener(o);\n                jqXHR = ((that._trigger('chunksend', null, o) !== false && $.ajax(o)) ||\n                        that._getXHRPromise(false, o.context))\n                    .done(function (result, textStatus, jqXHR) {\n                        ub = that._getUploadedBytes(jqXHR) ||\n                            (ub + o.chunkSize);\n                        // Create a progress event if no final progress event\n                        // with loaded equaling total has been triggered\n                        // for this chunk:\n                        if (currentLoaded + o.chunkSize - o._progress.loaded) {\n                            that._onProgress($.Event('progress', {\n                                lengthComputable: true,\n                                loaded: ub - o.uploadedBytes,\n                                total: ub - o.uploadedBytes\n                            }), o);\n                        }\n                        options.uploadedBytes = o.uploadedBytes = ub;\n                        o.result = result;\n                        o.textStatus = textStatus;\n                        o.jqXHR = jqXHR;\n                        that._trigger('chunkdone', null, o);\n                        that._trigger('chunkalways', null, o);\n                        if (ub < fs) {\n                            // File upload not yet complete,\n                            // continue with the next chunk:\n                            upload();\n                        } else {\n                            dfd.resolveWith(\n                                o.context,\n                                [result, textStatus, jqXHR]\n                            );\n                        }\n                    })\n                    .fail(function (jqXHR, textStatus, errorThrown) {\n                        o.jqXHR = jqXHR;\n                        o.textStatus = textStatus;\n                        o.errorThrown = errorThrown;\n                        that._trigger('chunkfail', null, o);\n                        that._trigger('chunkalways', null, o);\n                        dfd.rejectWith(\n                            o.context,\n                            [jqXHR, textStatus, errorThrown]\n                        );\n                    });\n            };\n            this._enhancePromise(promise);\n            promise.abort = function () {\n                return jqXHR.abort();\n            };\n            upload();\n            return promise;\n        },\n\n        _beforeSend: function (e, data) {\n            if (this._active === 0) {\n                // the start callback is triggered when an upload starts\n                // and no other uploads are currently running,\n                // equivalent to the global ajaxStart event:\n                this._trigger('start');\n                // Set timer for global bitrate progress calculation:\n                this._bitrateTimer = new this._BitrateTimer();\n                // Reset the global progress values:\n                this._progress.loaded = this._progress.total = 0;\n                this._progress.bitrate = 0;\n            }\n            // Make sure the container objects for the .response() and\n            // .progress() methods on the data object are available\n            // and reset to their initial state:\n            this._initResponseObject(data);\n            this._initProgressObject(data);\n            data._progress.loaded = data.loaded = data.uploadedBytes || 0;\n            data._progress.total = data.total = this._getTotal(data.files) || 1;\n            data._progress.bitrate = data.bitrate = 0;\n            this._active += 1;\n            // Initialize the global progress values:\n            this._progress.loaded += data.loaded;\n            this._progress.total += data.total;\n        },\n\n        _onDone: function (result, textStatus, jqXHR, options) {\n            var total = options._progress.total,\n                response = options._response;\n            if (options._progress.loaded < total) {\n                // Create a progress event if no final progress event\n                // with loaded equaling total has been triggered:\n                this._onProgress($.Event('progress', {\n                    lengthComputable: true,\n                    loaded: total,\n                    total: total\n                }), options);\n            }\n            response.result = options.result = result;\n            response.textStatus = options.textStatus = textStatus;\n            response.jqXHR = options.jqXHR = jqXHR;\n            this._trigger('done', null, options);\n        },\n\n        _onFail: function (jqXHR, textStatus, errorThrown, options) {\n            var response = options._response;\n            if (options.recalculateProgress) {\n                // Remove the failed (error or abort) file upload from\n                // the global progress calculation:\n                this._progress.loaded -= options._progress.loaded;\n                this._progress.total -= options._progress.total;\n            }\n            response.jqXHR = options.jqXHR = jqXHR;\n            response.textStatus = options.textStatus = textStatus;\n            response.errorThrown = options.errorThrown = errorThrown;\n            this._trigger('fail', null, options);\n        },\n\n        _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) {\n            // jqXHRorResult, textStatus and jqXHRorError are added to the\n            // options object via done and fail callbacks\n            this._trigger('always', null, options);\n        },\n\n        _onSend: function (e, data) {\n            if (!data.submit) {\n                this._addConvenienceMethods(e, data);\n            }\n            var that = this,\n                jqXHR,\n                aborted,\n                slot,\n                pipe,\n                options = that._getAJAXSettings(data),\n                send = function () {\n                    that._sending += 1;\n                    // Set timer for bitrate progress calculation:\n                    options._bitrateTimer = new that._BitrateTimer();\n                    jqXHR = jqXHR || (\n                        ((aborted || that._trigger(\n                            'send',\n                            $.Event('send', {delegatedEvent: e}),\n                            options\n                        ) === false) &&\n                        that._getXHRPromise(false, options.context, aborted)) ||\n                        that._chunkedUpload(options) || $.ajax(options)\n                    ).done(function (result, textStatus, jqXHR) {\n                        that._onDone(result, textStatus, jqXHR, options);\n                    }).fail(function (jqXHR, textStatus, errorThrown) {\n                        that._onFail(jqXHR, textStatus, errorThrown, options);\n                    }).always(function (jqXHRorResult, textStatus, jqXHRorError) {\n                        that._onAlways(\n                            jqXHRorResult,\n                            textStatus,\n                            jqXHRorError,\n                            options\n                        );\n                        that._sending -= 1;\n                        that._active -= 1;\n                        if (options.limitConcurrentUploads &&\n                                options.limitConcurrentUploads > that._sending) {\n                            // Start the next queued upload,\n                            // that has not been aborted:\n                            var nextSlot = that._slots.shift();\n                            while (nextSlot) {\n                                if (that._getDeferredState(nextSlot) === 'pending') {\n                                    nextSlot.resolve();\n                                    break;\n                                }\n                                nextSlot = that._slots.shift();\n                            }\n                        }\n                        if (that._active === 0) {\n                            // The stop callback is triggered when all uploads have\n                            // been completed, equivalent to the global ajaxStop event:\n                            that._trigger('stop');\n                        }\n                    });\n                    return jqXHR;\n                };\n            this._beforeSend(e, options);\n            if (this.options.sequentialUploads ||\n                    (this.options.limitConcurrentUploads &&\n                    this.options.limitConcurrentUploads <= this._sending)) {\n                if (this.options.limitConcurrentUploads > 1) {\n                    slot = $.Deferred();\n                    this._slots.push(slot);\n                    pipe = slot.then(send);\n                } else {\n                    this._sequence = this._sequence.then(send, send);\n                    pipe = this._sequence;\n                }\n                // Return the piped Promise object, enhanced with an abort method,\n                // which is delegated to the jqXHR object of the current upload,\n                // and jqXHR callbacks mapped to the equivalent Promise methods:\n                pipe.abort = function () {\n                    aborted = [undefined, 'abort', 'abort'];\n                    if (!jqXHR) {\n                        if (slot) {\n                            slot.rejectWith(options.context, aborted);\n                        }\n                        return send();\n                    }\n                    return jqXHR.abort();\n                };\n                return this._enhancePromise(pipe);\n            }\n            return send();\n        },\n\n        _onAdd: function (e, data) {\n            var that = this,\n                result = true,\n                options = $.extend({}, this.options, data),\n                files = data.files,\n                filesLength = files.length,\n                limit = options.limitMultiFileUploads,\n                limitSize = options.limitMultiFileUploadSize,\n                overhead = options.limitMultiFileUploadSizeOverhead,\n                batchSize = 0,\n                paramName = this._getParamName(options),\n                paramNameSet,\n                paramNameSlice,\n                fileSet,\n                i,\n                j = 0;\n            if (!filesLength) {\n                return false;\n            }\n            if (limitSize && files[0].size === undefined) {\n                limitSize = undefined;\n            }\n            if (!(options.singleFileUploads || limit || limitSize) ||\n                    !this._isXHRUpload(options)) {\n                fileSet = [files];\n                paramNameSet = [paramName];\n            } else if (!(options.singleFileUploads || limitSize) && limit) {\n                fileSet = [];\n                paramNameSet = [];\n                for (i = 0; i < filesLength; i += limit) {\n                    fileSet.push(files.slice(i, i + limit));\n                    paramNameSlice = paramName.slice(i, i + limit);\n                    if (!paramNameSlice.length) {\n                        paramNameSlice = paramName;\n                    }\n                    paramNameSet.push(paramNameSlice);\n                }\n            } else if (!options.singleFileUploads && limitSize) {\n                fileSet = [];\n                paramNameSet = [];\n                for (i = 0; i < filesLength; i = i + 1) {\n                    batchSize += files[i].size + overhead;\n                    if (i + 1 === filesLength ||\n                            ((batchSize + files[i + 1].size + overhead) > limitSize) ||\n                            (limit && i + 1 - j >= limit)) {\n                        fileSet.push(files.slice(j, i + 1));\n                        paramNameSlice = paramName.slice(j, i + 1);\n                        if (!paramNameSlice.length) {\n                            paramNameSlice = paramName;\n                        }\n                        paramNameSet.push(paramNameSlice);\n                        j = i + 1;\n                        batchSize = 0;\n                    }\n                }\n            } else {\n                paramNameSet = paramName;\n            }\n            data.originalFiles = files;\n            $.each(fileSet || files, function (index, element) {\n                var newData = $.extend({}, data);\n                newData.files = fileSet ? element : [element];\n                newData.paramName = paramNameSet[index];\n                that._initResponseObject(newData);\n                that._initProgressObject(newData);\n                that._addConvenienceMethods(e, newData);\n                result = that._trigger(\n                    'add',\n                    $.Event('add', {delegatedEvent: e}),\n                    newData\n                );\n                return result;\n            });\n            return result;\n        },\n\n        _replaceFileInput: function (data) {\n            var input = data.fileInput,\n                inputClone = input.clone(true),\n                restoreFocus = input.is(document.activeElement);\n            // Add a reference for the new cloned file input to the data argument:\n            data.fileInputClone = inputClone;\n            $('<form></form>').append(inputClone)[0].reset();\n            // Detaching allows to insert the fileInput on another form\n            // without loosing the file input value:\n            input.after(inputClone).detach();\n            // If the fileInput had focus before it was detached,\n            // restore focus to the inputClone.\n            if (restoreFocus) {\n                inputClone.focus();\n            }\n            // Avoid memory leaks with the detached file input:\n            $.cleanData(input.unbind('remove'));\n            // Replace the original file input element in the fileInput\n            // elements set with the clone, which has been copied including\n            // event handlers:\n            this.options.fileInput = this.options.fileInput.map(function (i, el) {\n                if (el === input[0]) {\n                    return inputClone[0];\n                }\n                return el;\n            });\n            // If the widget has been initialized on the file input itself,\n            // override this.element with the file input clone:\n            if (input[0] === this.element[0]) {\n                this.element = inputClone;\n            }\n        },\n\n        _handleFileTreeEntry: function (entry, path) {\n            var that = this,\n                dfd = $.Deferred(),\n                entries = [],\n                dirReader,\n                errorHandler = function (e) {\n                    if (e && !e.entry) {\n                        e.entry = entry;\n                    }\n                    // Since $.when returns immediately if one\n                    // Deferred is rejected, we use resolve instead.\n                    // This allows valid files and invalid items\n                    // to be returned together in one set:\n                    dfd.resolve([e]);\n                },\n                successHandler = function (entries) {\n                    that._handleFileTreeEntries(\n                        entries,\n                        path + entry.name + '/'\n                    ).done(function (files) {\n                        dfd.resolve(files);\n                    }).fail(errorHandler);\n                },\n                readEntries = function () {\n                    dirReader.readEntries(function (results) {\n                        if (!results.length) {\n                            successHandler(entries);\n                        } else {\n                            entries = entries.concat(results);\n                            readEntries();\n                        }\n                    }, errorHandler);\n                };\n            path = path || '';\n            if (entry.isFile) {\n                if (entry._file) {\n                    // Workaround for Chrome bug #149735\n                    entry._file.relativePath = path;\n                    dfd.resolve(entry._file);\n                } else {\n                    entry.file(function (file) {\n                        file.relativePath = path;\n                        dfd.resolve(file);\n                    }, errorHandler);\n                }\n            } else if (entry.isDirectory) {\n                dirReader = entry.createReader();\n                readEntries();\n            } else {\n                // Return an empy list for file system items\n                // other than files or directories:\n                dfd.resolve([]);\n            }\n            return dfd.promise();\n        },\n\n        _handleFileTreeEntries: function (entries, path) {\n            var that = this;\n            return $.when.apply(\n                $,\n                $.map(entries, function (entry) {\n                    return that._handleFileTreeEntry(entry, path);\n                })\n            ).then(function () {\n                return Array.prototype.concat.apply(\n                    [],\n                    arguments\n                );\n            });\n        },\n\n        _getDroppedFiles: function (dataTransfer) {\n            dataTransfer = dataTransfer || {};\n            var items = dataTransfer.items;\n            if (items && items.length && (items[0].webkitGetAsEntry ||\n                    items[0].getAsEntry)) {\n                return this._handleFileTreeEntries(\n                    $.map(items, function (item) {\n                        var entry;\n                        if (item.webkitGetAsEntry) {\n                            entry = item.webkitGetAsEntry();\n                            if (entry) {\n                                // Workaround for Chrome bug #149735:\n                                entry._file = item.getAsFile();\n                            }\n                            return entry;\n                        }\n                        return item.getAsEntry();\n                    })\n                );\n            }\n            return $.Deferred().resolve(\n                $.makeArray(dataTransfer.files)\n            ).promise();\n        },\n\n        _getSingleFileInputFiles: function (fileInput) {\n            fileInput = $(fileInput);\n            var entries = fileInput.prop('webkitEntries') ||\n                    fileInput.prop('entries'),\n                files,\n                value;\n            if (entries && entries.length) {\n                return this._handleFileTreeEntries(entries);\n            }\n            files = $.makeArray(fileInput.prop('files'));\n            if (!files.length) {\n                value = fileInput.prop('value');\n                if (!value) {\n                    return $.Deferred().resolve([]).promise();\n                }\n                // If the files property is not available, the browser does not\n                // support the File API and we add a pseudo File object with\n                // the input value as name with path information removed:\n                files = [{name: value.replace(/^.*\\\\/, '')}];\n            } else if (files[0].name === undefined && files[0].fileName) {\n                // File normalization for Safari 4 and Firefox 3:\n                $.each(files, function (index, file) {\n                    file.name = file.fileName;\n                    file.size = file.fileSize;\n                });\n            }\n            return $.Deferred().resolve(files).promise();\n        },\n\n        _getFileInputFiles: function (fileInput) {\n            if (!(fileInput instanceof $) || fileInput.length === 1) {\n                return this._getSingleFileInputFiles(fileInput);\n            }\n            return $.when.apply(\n                $,\n                $.map(fileInput, this._getSingleFileInputFiles)\n            ).then(function () {\n                return Array.prototype.concat.apply(\n                    [],\n                    arguments\n                );\n            });\n        },\n\n        _onChange: function (e) {\n            var that = this,\n                data = {\n                    fileInput: $(e.target),\n                    form: $(e.target.form)\n                };\n            this._getFileInputFiles(data.fileInput).always(function (files) {\n                data.files = files;\n                if (that.options.replaceFileInput) {\n                    that._replaceFileInput(data);\n                }\n                if (that._trigger(\n                        'change',\n                        $.Event('change', {delegatedEvent: e}),\n                        data\n                    ) !== false) {\n                    that._onAdd(e, data);\n                }\n            });\n        },\n\n        _onPaste: function (e) {\n            var items = e.originalEvent && e.originalEvent.clipboardData &&\n                    e.originalEvent.clipboardData.items,\n                data = {files: []};\n            if (items && items.length) {\n                $.each(items, function (index, item) {\n                    var file = item.getAsFile && item.getAsFile();\n                    if (file) {\n                        data.files.push(file);\n                    }\n                });\n                if (this._trigger(\n                        'paste',\n                        $.Event('paste', {delegatedEvent: e}),\n                        data\n                    ) !== false) {\n                    this._onAdd(e, data);\n                }\n            }\n        },\n\n        _onDrop: function (e) {\n            e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;\n            var that = this,\n                dataTransfer = e.dataTransfer,\n                data = {};\n            if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n                e.preventDefault();\n                this._getDroppedFiles(dataTransfer).always(function (files) {\n                    data.files = files;\n                    if (that._trigger(\n                            'drop',\n                            $.Event('drop', {delegatedEvent: e}),\n                            data\n                        ) !== false) {\n                        that._onAdd(e, data);\n                    }\n                });\n            }\n        },\n\n        _onDragOver: getDragHandler('dragover'),\n\n        _onDragEnter: getDragHandler('dragenter'),\n\n        _onDragLeave: getDragHandler('dragleave'),\n\n        _initEventHandlers: function () {\n            if (this._isXHRUpload(this.options)) {\n                this._on(this.options.dropZone, {\n                    dragover: this._onDragOver,\n                    drop: this._onDrop,\n                    // event.preventDefault() on dragenter is required for IE10+:\n                    dragenter: this._onDragEnter,\n                    // dragleave is not required, but added for completeness:\n                    dragleave: this._onDragLeave\n                });\n                this._on(this.options.pasteZone, {\n                    paste: this._onPaste\n                });\n            }\n            if ($.support.fileInput) {\n                this._on(this.options.fileInput, {\n                    change: this._onChange\n                });\n            }\n        },\n\n        _destroyEventHandlers: function () {\n            this._off(this.options.dropZone, 'dragenter dragleave dragover drop');\n            this._off(this.options.pasteZone, 'paste');\n            this._off(this.options.fileInput, 'change');\n        },\n\n        _destroy: function () {\n            this._destroyEventHandlers();\n        },\n\n        _setOption: function (key, value) {\n            var reinit = $.inArray(key, this._specialOptions) !== -1;\n            if (reinit) {\n                this._destroyEventHandlers();\n            }\n            this._super(key, value);\n            if (reinit) {\n                this._initSpecialOptions();\n                this._initEventHandlers();\n            }\n        },\n\n        _initSpecialOptions: function () {\n            var options = this.options;\n            if (options.fileInput === undefined) {\n                options.fileInput = this.element.is('input[type=\"file\"]') ?\n                        this.element : this.element.find('input[type=\"file\"]');\n            } else if (!(options.fileInput instanceof $)) {\n                options.fileInput = $(options.fileInput);\n            }\n            if (!(options.dropZone instanceof $)) {\n                options.dropZone = $(options.dropZone);\n            }\n            if (!(options.pasteZone instanceof $)) {\n                options.pasteZone = $(options.pasteZone);\n            }\n        },\n\n        _getRegExp: function (str) {\n            var parts = str.split('/'),\n                modifiers = parts.pop();\n            parts.shift();\n            return new RegExp(parts.join('/'), modifiers);\n        },\n\n        _isRegExpOption: function (key, value) {\n            return key !== 'url' && $.type(value) === 'string' &&\n                /^\\/.*\\/[igm]{0,3}$/.test(value);\n        },\n\n        _initDataAttributes: function () {\n            var that = this,\n                options = this.options,\n                data = this.element.data();\n            // Initialize options set via HTML5 data-attributes:\n            $.each(\n                this.element[0].attributes,\n                function (index, attr) {\n                    var key = attr.name.toLowerCase(),\n                        value;\n                    if (/^data-/.test(key)) {\n                        // Convert hyphen-ated key to camelCase:\n                        key = key.slice(5).replace(/-[a-z]/g, function (str) {\n                            return str.charAt(1).toUpperCase();\n                        });\n                        value = data[key];\n                        if (that._isRegExpOption(key, value)) {\n                            value = that._getRegExp(value);\n                        }\n                        options[key] = value;\n                    }\n                }\n            );\n        },\n\n        _create: function () {\n            this._initDataAttributes();\n            this._initSpecialOptions();\n            this._slots = [];\n            this._sequence = this._getXHRPromise(true);\n            this._sending = this._active = 0;\n            this._initProgressObject(this);\n            this._initEventHandlers();\n        },\n\n        // This method is exposed to the widget API and allows to query\n        // the number of active uploads:\n        active: function () {\n            return this._active;\n        },\n\n        // This method is exposed to the widget API and allows to query\n        // the widget upload progress.\n        // It returns an object with loaded, total and bitrate properties\n        // for the running uploads:\n        progress: function () {\n            return this._progress;\n        },\n\n        // This method is exposed to the widget API and allows adding files\n        // using the fileupload API. The data parameter accepts an object which\n        // must have a files property and can contain additional options:\n        // .fileupload('add', {files: filesList});\n        add: function (data) {\n            var that = this;\n            if (!data || this.options.disabled) {\n                return;\n            }\n            if (data.fileInput && !data.files) {\n                this._getFileInputFiles(data.fileInput).always(function (files) {\n                    data.files = files;\n                    that._onAdd(null, data);\n                });\n            } else {\n                data.files = $.makeArray(data.files);\n                this._onAdd(null, data);\n            }\n        },\n\n        // This method is exposed to the widget API and allows sending files\n        // using the fileupload API. The data parameter accepts an object which\n        // must have a files or fileInput property and can contain additional options:\n        // .fileupload('send', {files: filesList});\n        // The method returns a Promise object for the file upload call.\n        send: function (data) {\n            if (data && !this.options.disabled) {\n                if (data.fileInput && !data.files) {\n                    var that = this,\n                        dfd = $.Deferred(),\n                        promise = dfd.promise(),\n                        jqXHR,\n                        aborted;\n                    promise.abort = function () {\n                        aborted = true;\n                        if (jqXHR) {\n                            return jqXHR.abort();\n                        }\n                        dfd.reject(null, 'abort', 'abort');\n                        return promise;\n                    };\n                    this._getFileInputFiles(data.fileInput).always(\n                        function (files) {\n                            if (aborted) {\n                                return;\n                            }\n                            if (!files.length) {\n                                dfd.reject();\n                                return;\n                            }\n                            data.files = files;\n                            jqXHR = that._onSend(null, data);\n                            jqXHR.then(\n                                function (result, textStatus, jqXHR) {\n                                    dfd.resolve(result, textStatus, jqXHR);\n                                },\n                                function (jqXHR, textStatus, errorThrown) {\n                                    dfd.reject(jqXHR, textStatus, errorThrown);\n                                }\n                            );\n                        }\n                    );\n                    return this._enhancePromise(promise);\n                }\n                data.files = $.makeArray(data.files);\n                if (data.files.length) {\n                    return this._onSend(null, data);\n                }\n            }\n            return this._getXHRPromise(false, data && data.context);\n        }\n\n    });\n\n}));\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/jquery.iframe-transport.js",
    "content": "/*\n * jQuery Iframe Transport Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* global define, require, window, document, JSON */\n\n;(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // Register as an anonymous AMD module:\n        define(['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS:\n        factory(require('jquery'));\n    } else {\n        // Browser globals:\n        factory(window.jQuery);\n    }\n}(function ($) {\n    'use strict';\n\n    // Helper variable to create unique names for the transport iframes:\n    var counter = 0,\n        jsonAPI = $,\n        jsonParse = 'parseJSON';\n\n    if ('JSON' in window && 'parse' in JSON) {\n      jsonAPI = JSON;\n      jsonParse = 'parse';\n    }\n\n    // The iframe transport accepts four additional options:\n    // options.fileInput: a jQuery collection of file input fields\n    // options.paramName: the parameter name for the file form data,\n    //  overrides the name property of the file input field(s),\n    //  can be a string or an array of strings.\n    // options.formData: an array of objects with name and value properties,\n    //  equivalent to the return data of .serializeArray(), e.g.:\n    //  [{name: 'a', value: 1}, {name: 'b', value: 2}]\n    // options.initialIframeSrc: the URL of the initial iframe src,\n    //  by default set to \"javascript:false;\"\n    $.ajaxTransport('iframe', function (options) {\n        if (options.async) {\n            // javascript:false as initial iframe src\n            // prevents warning popups on HTTPS in IE6:\n            /*jshint scripturl: true */\n            var initialIframeSrc = options.initialIframeSrc || 'javascript:false;',\n            /*jshint scripturl: false */\n                form,\n                iframe,\n                addParamChar;\n            return {\n                send: function (_, completeCallback) {\n                    form = $('<form style=\"display:none;\"></form>');\n                    form.attr('accept-charset', options.formAcceptCharset);\n                    addParamChar = /\\?/.test(options.url) ? '&' : '?';\n                    // XDomainRequest only supports GET and POST:\n                    if (options.type === 'DELETE') {\n                        options.url = options.url + addParamChar + '_method=DELETE';\n                        options.type = 'POST';\n                    } else if (options.type === 'PUT') {\n                        options.url = options.url + addParamChar + '_method=PUT';\n                        options.type = 'POST';\n                    } else if (options.type === 'PATCH') {\n                        options.url = options.url + addParamChar + '_method=PATCH';\n                        options.type = 'POST';\n                    }\n                    // IE versions below IE8 cannot set the name property of\n                    // elements that have already been added to the DOM,\n                    // so we set the name along with the iframe HTML markup:\n                    counter += 1;\n                    iframe = $(\n                        '<iframe src=\"' + initialIframeSrc +\n                            '\" name=\"iframe-transport-' + counter + '\"></iframe>'\n                    ).bind('load', function () {\n                        var fileInputClones,\n                            paramNames = $.isArray(options.paramName) ?\n                                    options.paramName : [options.paramName];\n                        iframe\n                            .unbind('load')\n                            .bind('load', function () {\n                                var response;\n                                // Wrap in a try/catch block to catch exceptions thrown\n                                // when trying to access cross-domain iframe contents:\n                                try {\n                                    response = iframe.contents();\n                                    // Google Chrome and Firefox do not throw an\n                                    // exception when calling iframe.contents() on\n                                    // cross-domain requests, so we unify the response:\n                                    if (!response.length || !response[0].firstChild) {\n                                        throw new Error();\n                                    }\n                                } catch (e) {\n                                    response = undefined;\n                                }\n                                // The complete callback returns the\n                                // iframe content document as response object:\n                                completeCallback(\n                                    200,\n                                    'success',\n                                    {'iframe': response}\n                                );\n                                // Fix for IE endless progress bar activity bug\n                                // (happens on form submits to iframe targets):\n                                $('<iframe src=\"' + initialIframeSrc + '\"></iframe>')\n                                    .appendTo(form);\n                                window.setTimeout(function () {\n                                    // Removing the form in a setTimeout call\n                                    // allows Chrome's developer tools to display\n                                    // the response result\n                                    form.remove();\n                                }, 0);\n                            });\n                        form\n                            .prop('target', iframe.prop('name'))\n                            .prop('action', options.url)\n                            .prop('method', options.type);\n                        if (options.formData) {\n                            $.each(options.formData, function (index, field) {\n                                $('<input type=\"hidden\"/>')\n                                    .prop('name', field.name)\n                                    .val(field.value)\n                                    .appendTo(form);\n                            });\n                        }\n                        if (options.fileInput && options.fileInput.length &&\n                                options.type === 'POST') {\n                            fileInputClones = options.fileInput.clone();\n                            // Insert a clone for each file input field:\n                            options.fileInput.after(function (index) {\n                                return fileInputClones[index];\n                            });\n                            if (options.paramName) {\n                                options.fileInput.each(function (index) {\n                                    $(this).prop(\n                                        'name',\n                                        paramNames[index] || options.paramName\n                                    );\n                                });\n                            }\n                            // Appending the file input fields to the hidden form\n                            // removes them from their original location:\n                            form\n                                .append(options.fileInput)\n                                .prop('enctype', 'multipart/form-data')\n                                // enctype must be set as encoding for IE:\n                                .prop('encoding', 'multipart/form-data');\n                            // Remove the HTML5 form attribute from the input(s):\n                            options.fileInput.removeAttr('form');\n                        }\n                        form.submit();\n                        // Insert the file input fields at their original location\n                        // by replacing the clones with the originals:\n                        if (fileInputClones && fileInputClones.length) {\n                            options.fileInput.each(function (index, input) {\n                                var clone = $(fileInputClones[index]);\n                                // Restore the original name and form properties:\n                                $(input)\n                                    .prop('name', clone.prop('name'))\n                                    .attr('form', clone.attr('form'));\n                                clone.replaceWith(input);\n                            });\n                        }\n                    });\n                    form.append(iframe).appendTo(document.body);\n                },\n                abort: function () {\n                    if (iframe) {\n                        // javascript:false as iframe src aborts the request\n                        // and prevents warning popups on HTTPS in IE6.\n                        // concat is used to avoid the \"Script URL\" JSLint error:\n                        iframe\n                            .unbind('load')\n                            .prop('src', initialIframeSrc);\n                    }\n                    if (form) {\n                        form.remove();\n                    }\n                }\n            };\n        }\n    });\n\n    // The iframe transport returns the iframe content document as response.\n    // The following adds converters from iframe to text, json, html, xml\n    // and script.\n    // Please note that the Content-Type for JSON responses has to be text/plain\n    // or text/html, if the browser doesn't include application/json in the\n    // Accept header, else IE will show a download dialog.\n    // The Content-Type for XML responses on the other hand has to be always\n    // application/xml or text/xml, so IE properly parses the XML response.\n    // See also\n    // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation\n    $.ajaxSetup({\n        converters: {\n            'iframe text': function (iframe) {\n                return iframe && $(iframe[0].body).text();\n            },\n            'iframe json': function (iframe) {\n                return iframe && jsonAPI[jsonParse]($(iframe[0].body).text());\n            },\n            'iframe html': function (iframe) {\n                return iframe && $(iframe[0].body).html();\n            },\n            'iframe xml': function (iframe) {\n                var xmlDoc = iframe && iframe[0];\n                return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc :\n                        $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) ||\n                            $(xmlDoc.body).html());\n            },\n            'iframe script': function (iframe) {\n                return iframe && $.globalEval($(iframe[0].body).text());\n            }\n        }\n    });\n\n}));\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/main.js",
    "content": "/*\n * jQuery File Upload Plugin JS Example\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2010, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* global $, window */\n\n$(function () {\n    'use strict';\n\n    // Initialize the jQuery File Upload widget:\n    $('#fileupload').fileupload({\n        // Uncomment the following to send cross-domain cookies:\n        //xhrFields: {withCredentials: true},\n        url: 'server/php/'\n    });\n\n    // Enable iframe cross-domain access via redirect option:\n    $('#fileupload').fileupload(\n        'option',\n        'redirect',\n        window.location.href.replace(\n            /\\/[^\\/]*$/,\n            '/cors/result.html?%s'\n        )\n    );\n\n    if (window.location.hostname === 'blueimp.github.io') {\n        // Demo settings:\n        $('#fileupload').fileupload('option', {\n            url: '//jquery-file-upload.appspot.com/',\n            // Enable image resizing, except for Android and Opera,\n            // which actually support image resizing, but fail to\n            // send Blob objects via XHR requests:\n            disableImageResize: /Android(?!.*Chrome)|Opera/\n                .test(window.navigator.userAgent),\n            maxFileSize: 999000,\n            acceptFileTypes: /(\\.|\\/)(gif|jpe?g|png)$/i\n        });\n        // Upload server status check for browsers with CORS support:\n        if ($.support.cors) {\n            $.ajax({\n                url: '//jquery-file-upload.appspot.com/',\n                type: 'HEAD'\n            }).fail(function () {\n                $('<div class=\"alert alert-danger\"/>')\n                    .text('Upload server currently unavailable - ' +\n                            new Date())\n                    .appendTo('#fileupload');\n            });\n        }\n    } else {\n        // Load existing files:\n        $('#fileupload').addClass('fileupload-processing');\n        $.ajax({\n            // Uncomment the following to send cross-domain cookies:\n            //xhrFields: {withCredentials: true},\n            url: $('#fileupload').fileupload('option', 'url'),\n            dataType: 'json',\n            context: $('#fileupload')[0]\n        }).always(function () {\n            $(this).removeClass('fileupload-processing');\n        }).done(function (result) {\n            $(this).fileupload('option', 'done')\n                .call(this, $.Event('done'), {result: result});\n        });\n    }\n\n});\n"
  },
  {
    "path": "public/quickadmin/plugins/fileUpload/js/vendor/jquery.ui.widget.js",
    "content": "/*! jQuery UI - v1.11.4+CommonJS - 2015-08-28\n* http://jqueryui.com\n* Includes: widget.js\n* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */\n\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([ \"jquery\" ], factory );\n\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node/CommonJS\n\t\tfactory( require( \"jquery\" ) );\n\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n/*!\n * jQuery UI Widget 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/jQuery.widget/\n */\n\n\nvar widget_uuid = 0,\n\twidget_slice = Array.prototype.slice;\n\n$.cleanData = (function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; (elem = elems[i]) != null; i++ ) {\n\t\t\ttry {\n\n\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\tevents = $._data( elem, \"events\" );\n\t\t\t\tif ( events && events.remove ) {\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t\t}\n\n\t\t\t// http://bugs.jquery.com/ticket/8235\n\t\t\t} catch ( e ) {}\n\t\t}\n\t\torig( elems );\n\t};\n})( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar fullName, existingConstructor, constructor, basePrototype,\n\t\t// proxiedPrototype allows the provided prototype to remain unmodified\n\t\t// so that it can be used as a mixin for multiple widgets (#8876)\n\t\tproxiedPrototype = {},\n\t\tnamespace = name.split( \".\" )[ 0 ];\n\n\tname = name.split( \".\" )[ 1 ];\n\tfullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\t// create selector for plugin\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\t\t// allow instantiation without \"new\" keyword\n\t\tif ( !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\t// extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\t\t// copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\t\t// track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t});\n\n\tbasePrototype = new base();\n\t// we need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( !$.isFunction( value ) ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = (function() {\n\t\t\tvar _super = function() {\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t\t},\n\t\t\t\t_superApply = function( args ) {\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t\t};\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super,\n\t\t\t\t\t__superApply = this._superApply,\n\t\t\t\t\treturnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t})();\n\t});\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t});\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor, child._proto );\n\t\t});\n\t\t// remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widget_slice.call( arguments, 1 ),\n\t\tinputIndex = 0,\n\t\tinputLength = input.length,\n\t\tkey,\n\t\tvalue;\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\",\n\t\t\targs = widget_slice.call( arguments, 1 ),\n\t\t\treturnValue = this;\n\n\t\tif ( isMethodCall ) {\n\t\t\tthis.each(function() {\n\t\t\t\tvar methodValue,\n\t\t\t\t\tinstance = $.data( this, fullName );\n\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\treturnValue = instance;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif ( !instance ) {\n\t\t\t\t\treturn $.error( \"cannot call methods on \" + name + \" prior to initialization; \" +\n\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t}\n\t\t\t\tif ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name + \" widget instance\" );\n\t\t\t\t}\n\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\tmethodValue;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat(args) );\n\t\t\t}\n\n\t\t\tthis.each(function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\toptions: {\n\t\tdisabled: false,\n\n\t\t// callbacks\n\t\tcreate: null\n\t},\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widget_uuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.document = $( element.style ?\n\t\t\t\t// element within the document\n\t\t\t\telement.ownerDocument :\n\t\t\t\t// element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[0].defaultView || this.document[0].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\t_getCreateOptions: $.noop,\n\t_getCreateEventData: $.noop,\n\t_create: $.noop,\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tthis._destroy();\n\t\t// we can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.unbind( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName )\n\t\t\t// support: jquery <1.6.3\n\t\t\t// http://bugs.jquery.com/ticket/9413\n\t\t\t.removeData( $.camelCase( this.widgetFullName ) );\n\t\tthis.widget()\n\t\t\t.unbind( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" )\n\t\t\t.removeClass(\n\t\t\t\tthis.widgetFullName + \"-disabled \" +\n\t\t\t\t\"ui-state-disabled\" );\n\n\t\t// clean up events and states\n\t\tthis.bindings.unbind( this.eventNamespace );\n\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\n\t\tthis.focusable.removeClass( \"ui-state-focus\" );\n\t},\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key,\n\t\t\tparts,\n\t\t\tcurOption,\n\t\t\ti;\n\n\t\tif ( arguments.length === 0 ) {\n\t\t\t// don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\t\t\t// handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\t_setOption: function( key, value ) {\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.widget()\n\t\t\t\t.toggleClass( this.widgetFullName + \"-disabled\", !!value );\n\n\t\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\t\tif ( value ) {\n\t\t\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\n\t\t\t\tthis.focusable.removeClass( \"ui-state-focus\" );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions({ disabled: false });\n\t},\n\tdisable: function() {\n\t\treturn this._setOptions({ disabled: true });\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement,\n\t\t\tinstance = this;\n\n\t\t// no suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// no element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\t\t\t\t// allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ ),\n\t\t\t\teventName = match[1] + instance.eventNamespace,\n\t\t\t\tselector = match[2];\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.delegate( selector, eventName, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.bind( eventName, handlerProxy );\n\t\t\t}\n\t\t});\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = (eventName || \"\").split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.unbind( eventName ).undelegate( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-hover\" );\n\t\t\t}\n\t\t});\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-focus\" );\n\t\t\t}\n\t\t});\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig,\n\t\t\tcallback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\t\t// the original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( $.isFunction( callback ) &&\n\t\t\tcallback.apply( this.element[0], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\t\tvar hasOptions,\n\t\t\teffectName = !options ?\n\t\t\t\tmethod :\n\t\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\t\tdefaultEffect :\n\t\t\t\t\toptions.effect || defaultEffect;\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t}\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue(function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t});\n\t\t}\n\t};\n});\n\nvar widget = $.widget;\n\n\n\n}));\n"
  },
  {
    "path": "public/robots.txt",
    "content": "User-agent: *\nDisallow:\n"
  },
  {
    "path": "public/web.config",
    "content": "<configuration>\n  <system.webServer>\n    <rewrite>\n      <rules>\n        <rule name=\"Imported Rule 1\" stopProcessing=\"true\">\n          <match url=\"^(.*)/$\" ignoreCase=\"false\" />\n          <conditions>\n            <add input=\"{REQUEST_FILENAME}\" matchType=\"IsDirectory\" ignoreCase=\"false\" negate=\"true\" />\n          </conditions>\n          <action type=\"Redirect\" redirectType=\"Permanent\" url=\"/{R:1}\" />\n        </rule>\n        <rule name=\"Imported Rule 2\" stopProcessing=\"true\">\n          <match url=\"^\" ignoreCase=\"false\" />\n          <conditions>\n            <add input=\"{REQUEST_FILENAME}\" matchType=\"IsDirectory\" ignoreCase=\"false\" negate=\"true\" />\n            <add input=\"{REQUEST_FILENAME}\" matchType=\"IsFile\" ignoreCase=\"false\" negate=\"true\" />\n          </conditions>\n          <action type=\"Rewrite\" url=\"index.php\" />\n        </rule>\n      </rules>\n    </rewrite>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "readme.md",
    "content": "# Laravel 5.5 based system for hotel managers to manage room bookings\n\nIt is a demo project for demonstrating what can be generated with [QuickAdminPanel](https://quickadminpanel.com) tool.\nHotel Booking is all generated with __QuickAdmin__ except for some custom code for Room Search.\n\n![Hotel_Booking screenshot](https://laraveldaily.com/wp-content/uploads/2018/11/hotel-booking-demo.png)\n\n## How to use\n\n- Clone the repository with __git clone__\n- Copy __.env.example__ file to __.env__ and edit database credentials there\n- Run __composer install__\n- Run __php artisan key:generate__\n- Run __php artisan migrate --seed__ (it has some seeded data for your testing)\n- That's it: launch the main URL and login with default credentials __admin@admin.com__ - __password__\n\n## License\n\nBasically, feel free to use and re-use any way you want.\n\n---\n\n## More from our LaravelDaily Team\n\n- Check out our adminpanel generator [QuickAdminPanel](https://quickadminpanel.com)\n- Read our [Blog with Laravel Tutorials](https://laraveldaily.com)\n- FREE E-book: [50 Laravel Quick Tips (and counting)](https://laraveldaily.com/free-e-book-40-laravel-quick-tips-and-counting/)\n- Subscribe to our [YouTube channel Laravel Business](https://www.youtube.com/channel/UCTuplgOBi6tJIlesIboymGA)\n- Enroll in our [Laravel Online Courses](https://laraveldaily.teachable.com/)\n"
  },
  {
    "path": "resources/assets/js/app.js",
    "content": "\n/**\n * First we will load all of this project's JavaScript dependencies which\n * includes Vue and other libraries. It is a great starting point when\n * building robust, powerful web applications using Vue and Laravel.\n */\n\nrequire('./bootstrap');\n\nwindow.Vue = require('vue');\n\n/**\n * Next, we will create a fresh Vue application instance and attach it to\n * the page. Then, you may begin adding components to this application\n * or customize the JavaScript scaffolding to fit your unique needs.\n */\n\nVue.component('example', require('./components/Example.vue'));\n\nconst app = new Vue({\n    el: '#app'\n});\n"
  },
  {
    "path": "resources/assets/js/bootstrap.js",
    "content": "\nwindow._ = require('lodash');\n\n/**\n * We'll load jQuery and the Bootstrap jQuery plugin which provides support\n * for JavaScript based Bootstrap features such as modals and tabs. This\n * code may be modified to fit the specific needs of your application.\n */\n\ntry {\n    window.$ = window.jQuery = require('jquery');\n\n    require('bootstrap-sass');\n} catch (e) {}\n\n/**\n * We'll load the axios HTTP library which allows us to easily issue requests\n * to our Laravel back-end. This library automatically handles sending the\n * CSRF token as a header based on the value of the \"XSRF\" token cookie.\n */\n\nwindow.axios = require('axios');\n\nwindow.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\n\n/**\n * Next we will register the CSRF Token as a common header with Axios so that\n * all outgoing HTTP requests automatically have it attached. This is just\n * a simple convenience so we don't have to attach every token manually.\n */\n\nlet token = document.head.querySelector('meta[name=\"csrf-token\"]');\n\nif (token) {\n    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;\n} else {\n    console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');\n}\n\n/**\n * Echo exposes an expressive API for subscribing to channels and listening\n * for events that are broadcast by Laravel. Echo and event broadcasting\n * allows your team to easily build robust real-time web applications.\n */\n\n// import Echo from 'laravel-echo'\n\n// window.Pusher = require('pusher-js');\n\n// window.Echo = new Echo({\n//     broadcaster: 'pusher',\n//     key: 'your-pusher-key'\n// });\n"
  },
  {
    "path": "resources/assets/js/components/Example.vue",
    "content": "<template>\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"col-md-8 col-md-offset-2\">\n                <div class=\"panel panel-default\">\n                    <div class=\"panel-heading\">Example Component</div>\n\n                    <div class=\"panel-body\">\n                        I'm an example component!\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</template>\n\n<script>\n    export default {\n        mounted() {\n            console.log('Component mounted.')\n        }\n    }\n</script>\n"
  },
  {
    "path": "resources/assets/sass/_variables.scss",
    "content": "\n// Body\n$body-bg: #f5f8fa;\n\n// Borders\n$laravel-border-color: darken($body-bg, 10%);\n$list-group-border: $laravel-border-color;\n$navbar-default-border: $laravel-border-color;\n$panel-default-border: $laravel-border-color;\n$panel-inner-border: $laravel-border-color;\n\n// Brands\n$brand-primary: #3097D1;\n$brand-info: #8eb4cb;\n$brand-success: #2ab27b;\n$brand-warning: #cbb956;\n$brand-danger: #bf5329;\n\n// Typography\n$icon-font-path: \"~bootstrap-sass/assets/fonts/bootstrap/\";\n$font-family-sans-serif: \"Raleway\", sans-serif;\n$font-size-base: 14px;\n$line-height-base: 1.6;\n$text-color: #636b6f;\n\n// Navbar\n$navbar-default-bg: #fff;\n\n// Buttons\n$btn-default-color: $text-color;\n\n// Inputs\n$input-border: lighten($text-color, 40%);\n$input-border-focus: lighten($brand-primary, 25%);\n$input-color-placeholder: lighten($text-color, 30%);\n\n// Panels\n$panel-default-heading-bg: #fff;\n"
  },
  {
    "path": "resources/assets/sass/app.scss",
    "content": "\n// Fonts\n@import url(\"https://fonts.googleapis.com/css?family=Raleway:300,400,600\");\n\n// Variables\n@import \"variables\";\n\n// Bootstrap\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap\";\n"
  },
  {
    "path": "resources/lang/bg/auth.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/bg/pagination.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/bg/passwords.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/bg/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_create' => 'Създай',\n\t'qa_save' => 'Запази',\n\t'qa_edit' => 'Промени',\n\t'qa_view' => 'Покажи',\n\t'qa_update' => 'Обнови',\n\t'qa_list' => 'Списък',\n\t'qa_no_entries_in_table' => 'Няма записи в таблицата',\n\t'qa_custom_controller_index' => 'Персонализиран контролер.',\n\t'qa_logout' => 'Изход',\n\t'qa_add_new' => 'Добави нов',\n\t'qa_are_you_sure' => 'Сигурни ли сте?',\n\t'qa_back_to_list' => 'Обратно към списъка',\n\t'qa_dashboard' => 'Табло',\n\t'qa_delete' => 'Изтрий',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/bg/validation.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/by/auth.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/by/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => '« Мінулая',\n    'next' => 'Наступная »',\n\n];"
  },
  {
    "path": "resources/lang/by/passwords.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/by/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_create' => 'Стварыць',\n\t'qa_save' => 'Захаваць',\n\t'qa_edit' => 'Рэдагаваць',\n\t'qa_restore' => 'Аднавіць',\n\t'qa_permadel' => 'Выдаліць назаўсёды',\n\t'qa_all' => 'Усё',\n\t'qa_trash' => 'Смецце',\n\t'qa_list' => 'Спіс',\n\t'qa_logout' => 'Выйсці',\n\t'qa_add_new' => 'Дадаць новы',\n\t'qa_are_you_sure' => 'Вы ўпэўнены?',\n\t'qa_back_to_list' => 'Назад да спісу',\n\t'qa_delete' => 'Выдаліць',\n\t'qa_category' => 'Катэгорыя',\n\t'qa_categories' => 'Катэгорыі',\n\t'qa_sample_category' => 'Прыклад катэгорыі',\n\t'qa_questions' => 'Пытанні',\n\t'qa_question' => 'Пытанне',\n\t'qa_answer' => 'Адказ',\n\t'qa_sample_question' => 'Прыклад пытання',\n\t'qa_sample_answer' => 'Прыклад адказу',\n\t'qa_title' => 'Загаловак',\n\t'qa_roles' => 'Ролі',\n\t'qa_role' => 'Роля',\n\t'qa_users' => 'Карыстальнікі',\n\t'qa_user' => 'Карыстальнік',\n\t'qa_name' => 'Імя',\n\t'qa_email' => 'Імэйл',\n\t'qa_password' => 'Пароль',\n\t'qa_price' => 'Кошт',\n\t'qa_email_greet' => 'Вітаем',\n\t'qa_register' => 'Рэгістраваць',\n\t'qa_registration' => 'Рэгістрацыя',\n\t'qa_view' => 'Прагляд',\n\t'qa_update' => 'Абнавіць',\n\t'qa_no_entries_in_table' => 'Няма запісаў у табліцы',\n\t'qa_dashboard' => 'Панель',\n\t'qa_delete_selected' => 'Выдаліць абранае',\n\t'qa_user_management' => 'Кіраванне карыстальнікамі',\n\t'qa_address' => 'Адрэса',\n\t'qa_first_name' => 'Імя',\n\t'qa_last_name' => 'Прозвішча',\n\t'qa_phone' => 'Тэлефон',\n\t'qa_created_at' => 'Створана',\n\t'qa_updated_at' => 'Абноўлена',\n\t'qa_deleted_at' => 'Выдалена',\n\t'qa_please_select' => 'Калі ласка, абярыце',\n\t'qa_category_name' => 'Назва катэгорыі',\n\t'qa_product_management' => 'Кіраванне таварамі',\n\t'qa_products' => 'Тавары',\n\t'qa_product_name' => 'Назва тавара',\n\t'qa_content_management' => 'Кіраванне старонкамі',\n\t'qa_text' => 'Тэкст',\n\t'qa_dashboard_text' => 'Вы ўвайшлі ў сістэму!',\n\t'qa_forgot_password' => 'Забылі пароль?',\n\t'qa_remember_me' => 'Памятаць мяне',\n\t'qa_login' => 'Увайсці',\n\t'qa_change_password' => 'Змяніць пароль',\n\t'qa_print' => 'Раздрукаваць',\n\t'qa_description' => 'Апісаннне',\n\t'qa_phone1' => 'Тэлефон 1',\n\t'qa_phone2' => 'Тэлефон 2',\n\t'qa_photo1' => 'Фота1',\n\t'qa_photo2' => 'Фота2',\n\t'qa_photo3' => 'Фота3',\n\t'qa_calendar' => 'Каляндар',\n\t'qa_notes' => 'Зацемки',\n\t'qa_pages' => 'Старонки',\n\t'qa_show' => 'Паказаць',\n\t'qa_group_by' => 'Групаваць па',\n\t'qa_faq_management' => 'Кіраванне FAQ',\n\t'qa_administrator_can_create_other_users' => 'Адміністратар (можа ствараць карыстальнікаў)',\n\t'qa_simple_user' => 'Звычайны карыстальнік',\n\t'qa_remember_token' => 'Запомніць',\n\t'qa_permissions' => 'Дазволы',\n\t'qa_user_actions' => 'Дзеянні карыстальніка',\n\t'qa_action' => 'Дзеянне',\n\t'qa_time' => 'Час',\n\t'qa_campaign' => 'Кампанія',\n\t'qa_campaigns' => 'Кампаніі',\n\t'qa_valid_from' => 'Дата пачатку',\n\t'qa_valid_to' => 'Дата заканчэння',\n\t'qa_discount_amount' => 'Сума зніжкі',\n\t'qa_discount_percent' => 'Працэнт зніжкі',\n\t'qa_redeem_time' => 'Час выкупу',\n\t'qa_website' => 'Сайт',\n\t'qa_contact_management' => 'Кіраванне кантактамі',\n\t'qa_contacts' => 'Кантакты',\n\t'qa_company' => 'Кампанія',\n\t'qa_tags' => 'Цэтлікі',\n\t'qa_tag' => 'Цэтлік',\n\t'qa_statuses' => 'Статусы',\n\t'qa_status' => 'Статус',\n\t'qa_attachment' => 'Далучанае',\n\t'qa_assigned_to' => 'Прызначана',\n\t'qa_axis' => 'Вось',\n\t'qa_is_created' => 'створана',\n\t'qa_is_updated' => 'абноўлена',\n\t'qa_is_deleted' => 'выдалена',\n\t'qa_notifications' => 'Авесткі',\n\t'qa_notify_user' => 'Абвясціць карыстальніка',\n\t'qa_create_new_notification' => 'Стварыць абвестку',\n\t'qa_messages' => 'Паведамленні',\n\t'qa_you_have_no_messages' => 'Вы не маеце паведамленняў',\n\t'qa_all_messages' => 'Усе паведамленні',\n\t'qa_new_message' => 'Новае паведамленне',\n\t'qa_outbox' => 'Зыходныя',\n\t'qa_inbox' => 'Уваходныя',\n\t'qa_recipient' => 'Атрымальнік',\n\t'qa_subject' => 'Тэма',\n\t'qa_message' => 'Паведамленне',\n\t'qa_send' => 'Даслаць',\n\t'qa_reply' => 'Адказаць',\n\t'qa_calendar_sources' => 'Крыніцы каляндара',\n\t'qa_country' => 'Краіна',\n\t'qa_client_status' => 'Статус кліента',\n\t'qa_clients' => 'Кліенты',\n\t'qa_currencies' => 'Валюты',\n\t'qa_main_currency' => 'Галоўная валюта',\n\t'qa_documents' => 'Дакументы',\n\t'qa_file' => 'Файл',\n\t'qa_client' => 'Кліент',\n\t'qa_start_date' => 'Дата пачатку',\n\t'qa_currency' => 'Валюта',\n\t'qa_current_password' => 'Бягучы пароль',\n\t'qa_new_password' => 'Новы пароль',\n\t'qa_password_confirm' => 'Падцверджанне пароля',\n\t'qa_copy' => 'Капіяваць',\n\t'qa_colvis' => 'Бачнасць калонак',\n\t'qa_reset_password' => 'Скінуць пароль',\n\t'qa_email_regards' => 'З павагаю',\n\t'qa_confirm_password' => 'Падцвердзіце пароль',\n\t'qa_custom_controller_index' => 'Карыстацкі індэкс кантролера.',\n\t'qa_action_model' => 'Мадэль дзеяння',\n\t'qa_action_id' => 'Id дзеяння',\n\t'qa_coupons_amount' => 'Сума купонаў',\n\t'qa_coupons' => 'Купоны',\n\t'qa_code' => 'Код',\n\t'qa_coupon_management' => 'Кіраванне куупонамі',\n\t'qa_time_management' => 'Кіраванне часам',\n\t'qa_projects' => 'Праекты',\n\t'qa_reports' => 'Справаздачы',\n\t'qa_companies' => 'Кампаніі',\n\t'qa_company_name' => 'Назва кампаніі',\n\t'qa_skype' => 'Skype',\n\t'qa_photo' => 'Фота (макс 8мб)',\n\t'qa_task_management' => 'Кіраванне задачамі',\n\t'qa_tasks' => 'Задачы',\n\t'qa_due_date' => 'Тэрмін',\n\t'qa_slug' => 'Псеўданім',\n\t'qa_excerpt' => 'Вытрымка',\n\t'qa_featured_image' => 'Спадарожны малюнак',\n\t'qa_chart_type' => 'Тып дыяграмы',\n\t'qa_select_users_placeholder' => 'Калі ласка, абярыце аднаго карыстальніка',\n\t'qa_csv' => 'CSV',\n\t'qa_excel' => 'Excel',\n\t'qa_pdf' => 'PDF',\n\t'qa_if_you_are_having_trouble' => 'Калі ў вас узніклі праблемы, націснуўшы на',\n\t'qa_copy_paste_url_bellow' => 'кнопку, скапіруйце і ўстаўце URL ніжэй у ваш вэб-браўзэр:',\n\t'qa_not_approved_title' => 'Ваш акаўнт не падцверджаны',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/by/validation.php",
    "content": "<?php\nreturn [\n\n    'accepted' => 'Значэнне :attribute павінна быць прынята.',\n    'active_url' => 'Значэнне :attribute не ёсць спасылкай.',\n    'after' => 'Значэнне :attribute павінна быць датай пасля :date.',\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'адвольнае паведамленне',\n        ],\n    ],\n\n];"
  },
  {
    "path": "resources/lang/ca/auth.php",
    "content": "<?php\nreturn [\n\n    'failed' => 'Aquestes credencials no corresponen a cap dels nostres registres',\n    'throttle' => 'Massa intents per entrar. Prova-ho de nou en :secons segons',\n\n];"
  },
  {
    "path": "resources/lang/ca/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => '« Anterior',\n    'next' => 'Següent »',\n\n];"
  },
  {
    "path": "resources/lang/ca/passwords.php",
    "content": "<?php\nreturn [\n\n    'password' => 'La contrassenya ha de tenir almenys 6 caràcters i ha de ser confirmada',\n    'reset' => 'La teva contrassenya s\\'ha restablert!',\n    'sent' => 'Hem enviat per correu el teu link per restablir la contrassenya!',\n    'token' => 'Aquest token per restablir la contrasenya és invàlid',\n    'user' => 'No trobem un usuari amb aquesta adreça de correu',\n\n];"
  },
  {
    "path": "resources/lang/ca/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_create' => 'Crear',\n\t'qa_save' => 'Guardar',\n\t'qa_edit' => 'Editar',\n\t'qa_restore' => 'Restaurar',\n\t'qa_permadel' => 'Esborrar permanentment',\n\t'qa_all' => 'Tot',\n\t'qa_trash' => 'Paperera',\n\t'qa_view' => 'Veure',\n\t'qa_update' => 'Actualitzar',\n\t'qa_list' => 'Llista',\n\t'qa_no_entries_in_table' => 'No hi ha registres a la taula',\n\t'qa_logout' => 'Sortir',\n\t'qa_add_new' => 'Afegir nou',\n\t'qa_are_you_sure' => 'Estàs segur?',\n\t'qa_back_to_list' => 'Tornar a la Llista',\n\t'qa_dashboard' => 'Taulell de control',\n\t'qa_delete' => 'Esborrar',\n\t'qa_delete_selected' => 'Esborrar seleccionats',\n\t'qa_category' => 'Categoria',\n\t'qa_categories' => 'Categories',\n\t'qa_sample_category' => 'Categoria d\\'exemple',\n\t'qa_questions' => 'Qüestions',\n\t'qa_question' => 'Qüestió',\n\t'qa_answer' => 'Resposta',\n\t'qa_sample_question' => 'Qüestió d\\'exemple',\n\t'qa_sample_answer' => 'Resposta d\\'exemple',\n\t'qa_faq_management' => 'Gestió de preguntes freqüents',\n\t'qa_administrator_can_create_other_users' => 'Administrador (pot crear altres usuaris)',\n\t'qa_simple_user' => 'Usuari bàsic',\n\t'qa_title' => 'Títol',\n\t'qa_roles' => 'Rols',\n\t'qa_role' => 'Rol',\n\t'qa_user_management' => 'Gestió d\\'usuaris',\n\t'qa_users' => 'Usuaris',\n\t'qa_user' => 'Usuari',\n\t'qa_name' => 'Nom',\n\t'qa_email' => 'Correu-e',\n\t'qa_password' => 'Contrasenya',\n\t'qa_remember_token' => 'Recordar token',\n\t'qa_permissions' => 'Permissos',\n\t'qa_project' => 'Projecte',\n\t'qa_start_time' => 'Hora d\\'inici',\n\t'qa_end_time' => 'Hora de finalització',\n\t'qa_expense_category' => 'Categoria de la despesa',\n\t'qa_expense_categories' => 'Categories de despeses',\n\t'qa_expense_management' => 'Gestió de despeses',\n\t'qa_expenses' => 'Despeses',\n\t'qa_expense' => 'Despesa',\n\t'qa_entry_date' => 'Data d\\'entrada',\n\t'qa_amount' => 'Import',\n\t'qa_income_categories' => 'Categories d\\'ingressos',\n\t'qa_monthly_report' => 'Informe mensual',\n\t'qa_companies' => 'Empreses',\n\t'qa_company_name' => 'Empresa',\n\t'qa_address' => 'Adreça',\n\t'qa_website' => 'Lloc web',\n\t'qa_contact_management' => 'Gestió de contactes',\n\t'qa_contacts' => 'Contactes',\n\t'qa_company' => 'Empresa',\n\t'qa_first_name' => 'Nom',\n\t'qa_last_name' => 'Cognoms',\n\t'qa_phone' => 'Telèfon',\n\t'qa_phone1' => 'Telèfon 1',\n\t'qa_phone2' => 'Telèfon 2',\n\t'qa_skype' => 'Skype',\n\t'qa_photo' => 'Foto (max 8Mb)',\n\t'qa_category_name' => 'Categoria',\n\t'qa_product_management' => 'Gestió de productes',\n\t'qa_products' => 'Productes',\n\t'qa_product_name' => 'Producte',\n\t'qa_price' => 'Preu',\n\t'qa_tags' => 'Etiquetes',\n\t'qa_tag' => 'Etiqueta',\n\t'qa_photo1' => 'Foto 1',\n\t'qa_photo2' => 'Foto 2',\n\t'qa_photo3' => 'Foto 3',\n\t'qa_calendar' => 'Calendari',\n\t'qa_statuses' => 'Situacions',\n\t'qa_task_management' => 'Gestió de tasques',\n\t'qa_tasks' => 'Tasca',\n\t'qa_status' => 'Situació',\n\t'qa_attachment' => 'Adjunt',\n\t'qa_due_date' => 'Data límit',\n\t'qa_assigned_to' => 'Assignat a',\n\t'qa_assets' => 'Actius',\n\t'qa_asset' => 'Actiu',\n\t'qa_serial_number' => 'Número de sèrie',\n\t'qa_location' => 'Ubicació',\n\t'qa_locations' => 'Ubicacions',\n\t'qa_assigned_user' => 'Assignat (Usuari)',\n\t'qa_notes' => 'Notes',\n\t'qa_assets_history' => 'Històric d\\'actius',\n\t'qa_assets_management' => 'Gestió d\\'actius',\n\t'qa_text' => 'Text',\n\t'qa_featured_image' => 'Imatge destacada',\n\t'qa_pages' => 'Pàgines',\n\t'qa_axis' => 'Eixos',\n\t'qa_show' => 'Veure',\n\t'qa_group_by' => 'Agrupar per',\n\t'qa_chart_type' => 'Tipus de gràfic',\n\t'qa_create_new_report' => 'Crear nou informe',\n\t'qa_no_reports_yet' => 'Encara no hi ha informes',\n\t'qa_created_at' => 'Creat el',\n\t'qa_updated_at' => 'Actualitzat el',\n\t'qa_deleted_at' => 'Esborrat el',\n\t'qa_custom_controller_index' => 'index del controlador personalitzat',\n\t'qa_user_actions' => 'Accions de l\\'usuari',\n\t'qa_action' => 'Acció',\n\t'qa_action_model' => 'Model d\\'acció',\n\t'qa_action_id' => 'Id d\\'acció',\n\t'qa_time' => 'Temps',\n\t'qa_campaign' => 'Campanya',\n\t'qa_campaigns' => 'Campanyes',\n\t'qa_description' => 'Descripció',\n\t'qa_valid_from' => 'Vàlid des de',\n\t'qa_valid_to' => 'Vàlid fins a',\n\t'qa_discount_amount' => 'Import del descompte',\n\t'qa_discount_percent' => 'Percentatge de descompte',\n\t'qa_coupons_amount' => 'Import dels cupons',\n\t'qa_coupons' => 'Cupons',\n\t'qa_code' => 'Codi',\n\t'qa_redeem_time' => 'Validesa del cupó',\n\t'qa_coupon_management' => 'Gestió de cupons',\n\t'qa_time_management' => 'Gestió del temps',\n\t'qa_projects' => 'Projectes',\n\t'qa_reports' => 'Informes',\n\t'qa_work_type' => 'Tipus de feina',\n\t'qa_work_types' => 'Tipus de feines',\n\t'qa_slug' => 'Escletxa',\n\t'qa_content_management' => 'Gestió de continguts',\n\t'qa_excerpt' => 'Extracte',\n\t'qa_reports_x_axis_field' => 'Eix-X escull un dels camps data/hora',\n\t'qa_reports_y_axis_field' => 'Eix-Y escull un dels camps numèrics',\n\t'qa_select_crud_placeholder' => 'Si us plau, selecciona un dels teus CRUDs',\n\t'qa_select_dt_placeholder' => 'Si us plau, selecciona un dels camps data/hora',\n\t'qa_aggregate_function_use' => 'Funció agregada a utilitzar',\n\t'qa_x_axis_group_by' => 'Agrupar l\\'eix-X per',\n\t'qa_x_axis_field' => 'Camp de l\\'eix-X (data/hora)',\n\t'qa_y_axis_field' => 'Camp de l\\'eix-Y',\n\t'qa_integer_float_placeholder' => 'Si us plau, selecciona un dels camps enter/real',\n\t'qa_change_notifications_field_1_label' => 'Enviar notificació per correu-e a l\\'usuari',\n\t'qa_change_notifications_field_2_label' => 'Quan accedeixes al CRUD',\n\t'qa_select_users_placeholder' => 'Si us plau, selecciona un dels teus Usuaris',\n\t'qa_is_created' => 'està creat',\n\t'qa_is_updated' => 'està actualitzat',\n\t'qa_is_deleted' => 'està esborrat',\n\t'qa_notifications' => 'Notificacions',\n\t'qa_notify_user' => 'Notifica a l\\'usuari',\n\t'qa_when_crud' => 'Quan CRUD',\n\t'qa_create_new_notification' => 'Crear nova notificació',\n\t'qa_stripe_transactions' => 'Transaccions d\\'Stripe',\n\t'qa_upgrade_to_premium' => 'Actualitza a Premium',\n\t'qa_messages' => 'Missatges',\n\t'qa_you_have_no_messages' => 'No tens missatges',\n\t'qa_all_messages' => 'Tots els missatges',\n\t'qa_new_message' => 'Nou missatge',\n\t'qa_outbox' => 'Safata de sortida',\n\t'qa_inbox' => 'Safata d\\'entrada',\n\t'qa_recipient' => 'Destinatari',\n\t'qa_subject' => 'Assumpte',\n\t'qa_message' => 'Missatge',\n\t'qa_send' => 'Envia',\n\t'qa_reply' => 'Respon',\n\t'qa_calendar_sources' => 'Fonts del calendari',\n\t'qa_new_calendar_source' => 'Crear una nova font del calendari',\n\t'qa_crud_title' => 'Títol del Crud',\n\t'qa_crud_date_field' => 'Camp data del Crud',\n\t'qa_prefix' => 'Prefix',\n\t'qa_label_field' => 'Camp etiqueta',\n\t'qa_suffix' => 'Sufix',\n\t'qa_no_calendar_sources' => 'No hi ha fonts del calendari',\n\t'qa_crud_event_field' => 'Camp d\\'etiqueta d\\'event',\n\t'qa_create_new_calendar_source' => 'Crear una nova font del calendari',\n\t'qa_edit_calendar_source' => 'Editar la font del calendari',\n\t'qa_client_management' => 'Gestió de clients',\n\t'qa_client_management_settings' => 'Paràmetres de la gestió de clients',\n\t'qa_country' => 'País',\n\t'qa_client_status' => 'Estat del client',\n\t'qa_clients' => 'Clients',\n\t'qa_client_statuses' => 'Estats dels clients',\n\t'qa_currencies' => 'Monedes',\n\t'qa_main_currency' => 'Moneda principal',\n\t'qa_documents' => 'Documents',\n\t'qa_file' => 'Fitxer',\n\t'qa_income_source' => 'Font d\\'ingressos',\n\t'qa_income_sources' => 'Fonts d\\'ingressos',\n\t'qa_fee_percent' => 'Percentatge de comissió',\n\t'qa_note_text' => 'Nota de text',\n\t'qa_client' => 'Client',\n\t'qa_start_date' => 'Datat d\\'inici',\n\t'qa_budget' => 'Pressupost',\n\t'qa_project_status' => 'Estat del projecte',\n\t'qa_project_statuses' => 'Estats del projecte',\n\t'qa_transactions' => 'Transaccions',\n\t'qa_transaction_types' => 'Tipus de transacció',\n\t'qa_transaction_type' => 'Tipus de transacció',\n\t'qa_transaction_date' => 'Data de la transacció',\n\t'qa_currency' => 'Moneda',\n\t'qa_current_password' => 'Contrasenya actual',\n\t'qa_new_password' => 'Contrasenya nova',\n\t'qa_password_confirm' => 'Confirma contrassenya nova',\n\t'qa_dashboard_text' => 'T\\'has validat correctament!',\n\t'qa_forgot_password' => 'Has oblidat la contrassenya?',\n\t'qa_remember_me' => 'Recorda\\'m',\n\t'qa_login' => 'Entrar',\n\t'qa_change_password' => 'Canviar password',\n\t'qa_csv' => 'CSV',\n\t'qa_print' => 'Imprimir',\n\t'qa_excel' => 'Excel',\n\t'qa_copy' => 'Còpia',\n\t'qa_colvis' => 'Columnes visibles',\n\t'qa_pdf' => 'PDF',\n\t'qa_reset_password' => 'Restablir contrassenya',\n\t'qa_reset_password_woops' => 'strong>Vaja!</strong>Hi ha hagut problemes amb input:',\n\t'qa_email_line1' => 'Estàs rebent aquest correu perquè s\\'ha solicitat un restablimentd e contrasenya de la teva compte',\n\t'qa_email_line2' => 'Si no has demanat restablir la contrasenya, no cal que facis res',\n\t'qa_email_greet' => 'Hola',\n\t'qa_email_regards' => 'Salutacions',\n\t'qa_confirm_password' => 'Confirma la contrassenya',\n\t'qa_if_you_are_having_trouble' => 'Si tens problemes al fer click ',\n\t'qa_copy_paste_url_bellow' => 'botó, copia i enganxa aquesta adreça web al teu navegador.',\n\t'qa_please_select' => 'Si us plau, selecciona',\n\t'qa_register' => 'Registra',\n\t'qa_registration' => 'Registre',\n\t'qa_not_approved_title' => 'No has estat aprovat',\n\t'qa_not_approved_p' => 'La teva compte no ha estat aprovada per l\\'administrador. Si us plau torna a provar en una estona',\n\t'qa_there_were_problems_with_input' => 'Hi ha problemes amb input:',\n\t'qa_whoops' => 'Vaja!',\n\t'qa_file_contains_header_row' => 'El fitxer compté una fila de capçalera?',\n\t'qa_csvImport' => 'importar de CSV',\n\t'qa_csv_file_to_import' => 'Fitxer CSV a importar',\n\t'qa_parse_csv' => 'Analitza CSV',\n\t'qa_import_data' => 'Importar dades',\n\t'qa_imported_rows_to_table' => 'Importades :row files a la taula :taula',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/ca/validation.php",
    "content": "<?php\nreturn [\n\n    'accepted' => ':attribute ha de ser acceptat.',\n    'active_url' => ':attribute no és una adreça vàlida',\n    'after' => ':attribute ha de ser una data més recent que :date',\n    'alpha' => ':attribute només pot contenir lletres.',\n    'alpha_dash' => ':attribute només pot contenir lletres, números i guions',\n    'alpha_num' => ':attribute només pot contenir lletres i números',\n    'array' => ':attribute ha de ser una matriu',\n    'before' => ':attribute ha  de ser una data anterior a :date',\n    'between' => [\n        'numeric' => ':attribute ha de tenir un valor entre :min i :max',\n        'file' => ':attribute ha de tenir una mida entre :min i :max kilobytes',\n        'string' => ':attribute ha de tenir entre :min i :max caràcters',\n        'array' => ':attribute ha de tenir entre :min i :max elements',\n    ],\n    'boolean' => 'El camp :attribute ha de ser veritat o fals',\n    'confirmed' => 'la confirmació de :attribute no coincideix',\n    'date' => ':attribute no és una data vàlida',\n    'date_format' => ':attribute no coincideix amb el format :format',\n    'different' => ':attribute i :other han de ser diferents',\n    'digits' => ':attribute ha de tenir :digits digits',\n    'mimes' => ':attribute ha de ser un fitxer del tipus :values',\n    'min' => [\n        'numeric' => ':attribute ha de ser almenys :min',\n        'file' => ':attribute ha de tenir almenys :min kilobytes',\n        'string' => ':attribute ha de tenir almenys :min caràcters',\n        'array' => ':attribute ha de tenir almenys :min elements',\n    ],\n    'not_in' => 'El :attribute seleccionat és invàlid',\n    'numeric' => ':attribute ha de ser un número',\n    'present' => 'El camp :attribute ha d\\'estar present',\n    'regex' => 'El format de :attribute és invàlid',\n    'required' => 'El camp :attribute es requereix',\n    'required_if' => 'El camp :attribute es requereix quan :other és :value',\n    'required_unless' => 'El camp :attribute es rquereix a menys que :other estigui dins :values',\n    'required_with' => 'El camp :attribute es requereix quan :values existeixen',\n    'required_with_all' => 'El camp :attribute es requereix quan :values existeixen',\n    'required_without' => 'El camp :attribute es requereix quan no hi cap dels :values',\n    'required_without_all' => 'El camp :attribute es requereix quan cap dels :values està present',\n    'same' => ':attribute i :other han de coincidir',\n    'size' => [\n        'numeric' => ':attribute ha de ser :size',\n        'file' => ':attribute ha de ser de :size kilobytes',\n        'string' => ':attribute ha de tenir :size caràcters',\n        'array' => ':attribute ha de contenir :size elements',\n    ],\n    'string' => ':attribute ha de ser una cadena',\n    'timezone' => ':attribute ha de ser una zona vàlida',\n    'unique' => ':attribute ja ha estat agafat',\n    'url' => 'El format de :attribute és invàlid',\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'missatge-personalitzat',\n        ],\n    ],\n    'digits_between' => ':attribute ha de estar entre :min i :max digits',\n    'dimensions' => 'Les dimensions de la imatge :attribute són invàlides',\n    'distinct' => 'El valor del camp :attribute està duplicat',\n    'email' => ':attribute ha de ser una adreça de correu vàlida',\n    'exists' => 'El :attribute seleccionat és invàlid',\n    'file' => ':attribute ha de ser un fitxer',\n    'filled' => 'el camp :attribute es obligatori',\n    'image' => ':attribute ha de ser una imatge',\n    'in' => 'El :attribute seleccionat és invàlid',\n    'in_array' => 'El camp :attribute no existeix a :other',\n    'integer' => ':attribute ha de ser un enter',\n    'ip' => ':attribute ha de ser una IP vàlida',\n    'json' => ':attribute ha de ser un JSON vàlid',\n    'max' => [\n        'numeric' => ':attribute no pot ser més gran que :max',\n        'file' => ':attribute no pot ser més gran de :max kilobytes',\n        'string' => ':attribute no pot tenir més de :max caràcters',\n        'array' => ':attribute no pot tenir més de :max elements',\n    ],\n\n];"
  },
  {
    "path": "resources/lang/de/auth.php",
    "content": "<?php\nreturn [\n\n    'failed' => 'Diese Kontodaten sind uns nicht bekannt.',\n    'throttle' => 'Zu viele fehlerhafte Versuche. Bitte versuchen sie es in :seconds Sekunden erneut.',\n\n];"
  },
  {
    "path": "resources/lang/de/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => '« Vorherige',\n    'next' => 'Nächste »',\n\n];"
  },
  {
    "path": "resources/lang/de/passwords.php",
    "content": "<?php\nreturn [\n\n    'password' => 'Passwörter müssen mindestens 6 Zeichen lang und identisch sein.',\n    'reset' => 'Ihr Passwort wurde zurückgesetzt!',\n    'sent' => 'Wir haben ihnen einen Link gesendet!',\n    'token' => 'Das Token ist ungültig.',\n    'user' => 'Wir kennen diese E-Mail-Adresse nicht.',\n\n];"
  },
  {
    "path": "resources/lang/de/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_create' => 'Erstellen',\n\t'qa_save' => 'Speichern',\n\t'qa_edit' => 'Bearbeiten',\n\t'qa_view' => 'Betrachten',\n\t'qa_update' => 'Aktualisieren',\n\t'qa_list' => 'Liste',\n\t'qa_no_entries_in_table' => 'Keine Einträge in der Tabelle.',\n\t'qa_custom_controller_index' => 'Custom controller index.',\n\t'qa_logout' => 'Abmelden',\n\t'qa_add_new' => 'Hinzufügen',\n\t'qa_are_you_sure' => 'Sind Sie sicher?',\n\t'qa_back_to_list' => 'Zurück zur Liste',\n\t'qa_dashboard' => 'Dashboard',\n\t'qa_delete' => 'Löschen',\n\t'qa_restore' => 'Wiederherstellen',\n\t'qa_permadel' => 'Permant löschen',\n\t'qa_all' => 'Alle',\n\t'qa_trash' => 'Papierkorb',\n\t'qa_delete_selected' => 'Markierte löschen',\n\t'qa_category' => 'Kategorie',\n\t'qa_categories' => 'Kategorien',\n\t'qa_sample_category' => 'Beispielkategorie',\n\t'qa_questions' => 'Fragen',\n\t'qa_question' => 'Frage',\n\t'qa_answer' => 'Antwort',\n\t'qa_sample_question' => 'Beispielfrage',\n\t'qa_sample_answer' => 'Beispielantwort',\n\t'qa_faq_management' => 'FAQ Verwaltung',\n\t'qa_administrator_can_create_other_users' => 'Administrator (kann andere Benutzer erstellen)',\n\t'qa_simple_user' => 'Einfacher Benutzer',\n\t'qa_title' => 'Titel',\n\t'qa_roles' => 'Rollen',\n\t'qa_role' => 'Rolle',\n\t'qa_user_management' => 'Benutzerverwaltung',\n\t'qa_users' => 'Benutzer',\n\t'qa_user' => 'Benutzer',\n\t'qa_name' => 'Name',\n\t'qa_email' => 'E-Mail',\n\t'qa_password' => 'Passwort',\n\t'qa_remember_token' => 'Remember Token',\n\t'qa_permissions' => 'Zugriffsrechte',\n\t'qa_user_actions' => 'Prokoll',\n\t'qa_action' => 'Action',\n\t'qa_action_model' => 'Action Model',\n\t'qa_action_id' => 'Action ID',\n\t'qa_time' => 'Zeit',\n\t'qa_campaign' => 'Kampagne',\n\t'qa_campaigns' => 'Kampagnen',\n\t'qa_description' => 'Beschreibung',\n\t'qa_valid_from' => 'Gültig von',\n\t'qa_valid_to' => 'Gültig bis',\n\t'qa_discount_amount' => 'Rabattbetrag',\n\t'qa_discount_percent' => 'Rabatt in Prozent',\n\t'qa_coupons_amount' => 'Anzahl Gutscheine',\n\t'qa_coupons' => 'Gutscheine',\n\t'qa_code' => 'Code',\n\t'qa_redeem_time' => 'Eingelöst',\n\t'qa_coupon_management' => 'Gutscheinverwaltung',\n\t'qa_time_management' => 'Zeiterfassung',\n\t'qa_projects' => 'Projekte',\n\t'qa_reports' => 'Berichte',\n\t'qa_time_entries' => 'Zeiterfassungseinträge',\n\t'qa_work_type' => 'Art der Arbeit',\n\t'qa_work_types' => 'Arten der Arbeit',\n\t'qa_project' => 'Projekt',\n\t'qa_start_time' => 'Beginnt am',\n\t'qa_end_time' => 'Endet am',\n\t'qa_expense_category' => 'Asugabenkategorie',\n\t'qa_expense_categories' => 'Ausgabenkategorien',\n\t'qa_expense_management' => 'Ausgabenverwaltung',\n\t'qa_expenses' => 'Ausgaben',\n\t'qa_expense' => 'Ausgabe',\n\t'qa_entry_date' => 'Erfasst am',\n\t'qa_amount' => 'Betrag',\n\t'qa_income_categories' => 'Einnahmenkategorien',\n\t'qa_monthly_report' => 'Monatsbericht',\n\t'qa_companies' => 'Firmen',\n\t'qa_company_name' => 'Firmenname',\n\t'qa_address' => 'Adresse',\n\t'qa_website' => 'Webseite',\n\t'qa_contact_management' => 'Kontaktverwaltung',\n\t'qa_contacts' => 'Kontakte',\n\t'qa_company' => 'Firma',\n\t'qa_first_name' => 'Vorname',\n\t'qa_last_name' => 'Nachname',\n\t'qa_phone' => 'Telefon',\n\t'qa_phone1' => 'Telefon 1',\n\t'qa_phone2' => 'Telefon 2',\n\t'qa_skype' => 'Skype',\n\t'qa_photo' => 'Foto (max. 8 MB)',\n\t'qa_category_name' => 'Kategoriename',\n\t'qa_product_management' => 'Produktverwaltung',\n\t'qa_products' => 'Produkte',\n\t'qa_product_name' => 'Produktname',\n\t'qa_price' => 'Preis',\n\t'qa_tags' => 'Stichwörter',\n\t'qa_tag' => 'Stichwort',\n\t'qa_photo1' => 'Abbildung 1',\n\t'qa_photo2' => 'Abbildung 2',\n\t'qa_photo3' => 'Abbildung 3',\n\t'qa_calendar' => 'Kalender',\n\t'qa_statuses' => 'Stati',\n\t'qa_task_management' => 'Aufgabenplanung',\n\t'qa_tasks' => 'Aufgabe',\n\t'qa_status' => 'Status',\n\t'qa_attachment' => 'Anhang',\n\t'qa_due_date' => 'Frist',\n\t'qa_assigned_to' => 'Zugewiesen zu',\n\t'qa_assets' => 'Geräte',\n\t'qa_asset' => 'Gerät',\n\t'qa_serial_number' => 'Seriennummer',\n\t'qa_location' => 'Standort',\n\t'qa_locations' => 'Standorte',\n\t'qa_assigned_user' => 'Benutzer',\n\t'qa_notes' => 'Notizen',\n\t'qa_assets_history' => 'Verlauf',\n\t'qa_assets_management' => 'Geräteverwaltung',\n\t'qa_slug' => 'Slug',\n\t'qa_content_management' => 'Inhaltsverwaltung',\n\t'qa_text' => 'Text',\n\t'qa_excerpt' => 'Auszug',\n\t'qa_featured_image' => 'Hauptbild',\n\t'qa_pages' => 'Seiten',\n\t'qa_axis' => 'Achse',\n\t'qa_show' => 'Zeige',\n\t'qa_group_by' => 'Gruppiere nach',\n\t'qa_chart_type' => 'Diagrammtyp',\n\t'qa_create_new_report' => 'Erzeuge neuen Bericht',\n\t'qa_no_reports_yet' => 'Keine berichte',\n\t'qa_created_at' => 'Erstellt am',\n\t'qa_updated_at' => 'Aktualisiert am',\n\t'qa_deleted_at' => 'Gelöscht am',\n\t'qa_reports_x_axis_field' => 'X-Achse - bitte wählen sie ein Datums oder Zeitfeld',\n\t'qa_reports_y_axis_field' => 'Y-Achse - bitte wählen sie ein Zahlenfeld',\n\t'qa_select_crud_placeholder' => 'Bitte wählen sie einen CRUD',\n\t'qa_select_dt_placeholder' => 'Bitte wählen sie ein Datums oder Zeitfeld',\n\t'qa_aggregate_function_use' => 'Aggregate Funktion',\n\t'qa_x_axis_group_by' => 'X-Achse gruppieren nach',\n\t'qa_x_axis_field' => 'X-Achsen Feld (Datum/Zeit)',\n\t'qa_y_axis_field' => 'Y-Achsen Feld',\n\t'qa_integer_float_placeholder' => 'Bitte wählen Sie ein Zahlen Feld',\n\t'qa_change_notifications_field_1_label' => 'Sende Benachrichtigung an Benutzer',\n\t'qa_change_notifications_field_2_label' => 'Wenn Eintrag in CRUD',\n\t'qa_select_users_placeholder' => 'Bitte wählen sie einen Benutzer',\n\t'qa_is_created' => 'ist erstellt',\n\t'qa_is_updated' => 'ist aktualisiert',\n\t'qa_is_deleted' => 'ist gelöscht',\n\t'qa_notifications' => 'Benachrichtigungen',\n\t'qa_notify_user' => 'Benachrichtige Benutzer',\n\t'qa_when_crud' => 'Wenn CRUDD',\n\t'qa_create_new_notification' => 'Erstelle Benachrichtigung',\n\t'qa_stripe_transactions' => 'Stripe Transaktionen',\n\t'qa_upgrade_to_premium' => 'Zu Premium heraufstufen',\n\t'qa_messages' => 'Nachrichten',\n\t'qa_you_have_no_messages' => 'Sie haben keine Nachrichten.',\n\t'qa_all_messages' => 'Alle Nachrichten',\n\t'qa_new_message' => 'Neue Nachricht',\n\t'qa_outbox' => 'Gesendet',\n\t'qa_inbox' => 'Posteingang',\n\t'qa_recipient' => 'Empfänger',\n\t'qa_subject' => 'Betreff',\n\t'qa_message' => 'Nachricht',\n\t'qa_send' => 'Senden',\n\t'qa_reply' => 'Antworten',\n\t'qa_calendar_sources' => 'Kalenderquellen',\n\t'qa_new_calendar_source' => 'Erstelle eine neue Kalenderquelle',\n\t'qa_crud_title' => 'Crud Titel',\n\t'qa_crud_date_field' => 'Crud Datumsfeld',\n\t'qa_prefix' => 'Prefix',\n\t'qa_label_field' => 'Beschreibungsfeld',\n\t'qa_suffix' => 'Suffix',\n\t'qa_no_calendar_sources' => 'Keine Kalenderquellen',\n\t'qa_crud_event_field' => 'Ereignis-Beschreibungsfeld',\n\t'qa_create_new_calendar_source' => 'Erstelle neue Kalenderquelle',\n\t'qa_edit_calendar_source' => 'Kalenderquelle bearbeiten',\n\t'qa_client_management' => 'Kundenverwaltung',\n\t'qa_client_management_settings' => 'Kundenverwaltung-Einstellungen',\n\t'qa_country' => 'Land',\n\t'qa_client_status' => 'Kundenstatus',\n\t'qa_clients' => 'Kunden',\n\t'qa_client_statuses' => 'Kundenstati',\n\t'qa_currencies' => 'Währungen',\n\t'qa_main_currency' => 'Hauptwährung',\n\t'qa_documents' => 'Dokumente',\n\t'qa_file' => 'Datei',\n\t'qa_income_source' => 'Einnahmequelle',\n\t'qa_income_sources' => 'Einnahmequellen',\n\t'qa_fee_percent' => 'Gebühren in Prozent',\n\t'qa_note_text' => 'Text der Notiz',\n\t'qa_client' => 'Kunde',\n\t'qa_start_date' => 'Beginnt am',\n\t'qa_budget' => 'Budget',\n\t'qa_project_status' => 'Projektstatus',\n\t'qa_project_statuses' => 'Projektstati',\n\t'qa_transactions' => 'Transaktionen',\n\t'qa_transaction_types' => 'Transaktionstypen',\n\t'qa_transaction_type' => 'Transaktionstyp',\n\t'qa_transaction_date' => 'Transaktionsdatum',\n\t'qa_currency' => 'Währung',\n\t'qa_current_password' => 'Aktuelles Passwort',\n\t'qa_new_password' => 'Neues Passwort',\n\t'qa_password_confirm' => 'Passwort wiederholen',\n\t'qa_dashboard_text' => 'Sie sind angemeldet!',\n\t'qa_forgot_password' => 'Passwort vergessen?',\n\t'qa_remember_me' => 'Anmeldedaten merken',\n\t'qa_login' => 'Anmelden',\n\t'qa_change_password' => 'Passwört ändern',\n\t'qa_csv' => 'CSV',\n\t'qa_print' => 'Drucken',\n\t'qa_excel' => 'Excel',\n\t'qa_copy' => 'Kopieren',\n\t'qa_colvis' => 'Spaltensichtbarkeit',\n\t'qa_pdf' => 'PDF',\n\t'qa_reset_password' => 'Passwort zurücksetzen',\n\t'qa_reset_password_woops' => '<strong>Uuups!</strong> Fehlerhafte Eingabe:',\n\t'qa_email_line1' => 'Sie erhalten diese E-Mail weil wir eine Passwort zurücksetzen Anfrage erhalten haben.',\n\t'qa_email_line2' => 'Wenn sie keine Passwort zurücksetzen Anfrage gesendet haben, brauchen sie nichts unternehmen.',\n\t'qa_email_greet' => 'Hallo',\n\t'qa_email_regards' => 'Grüße',\n\t'qa_confirm_password' => 'Passwort bestätigen',\n\t'qa_if_you_are_having_trouble' => 'Wenn sie Probleme mit dem drücken des',\n\t'qa_copy_paste_url_bellow' => 'Buttons haben, kopieren sie den Link in ihren Browser:',\n\t'qa_please_select' => 'Bitte auswählen',\n\t'qa_register' => 'Registrieren',\n\t'qa_registration' => 'Registrierung',\n\t'qa_not_approved_title' => 'Sie sind nicht freigeschaltet',\n\t'qa_not_approved_p' => 'Ihr Konto wurde noch nicht von einem Administrator freigeschaltet. Bitte gedulden sie sich und versuchen sie es später noch einmal.',\n\t'qa_there_were_problems_with_input' => 'Es gab Probleme mit der Eingabe',\n\t'qa_whoops' => 'Uuups!',\n\t'qa_file_contains_header_row' => 'Datei enthält eine Kopfzeile?',\n\t'qa_csvImport' => 'CSV Importieren',\n\t'qa_csv_file_to_import' => 'Datei für den CSV Import',\n\t'qa_parse_csv' => 'Lese CSV',\n\t'qa_import_data' => 'Daten importieren',\n\t'qa_imported_rows_to_table' => ':rows Zeilen in Tabelle :table importiert',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/de/validation.php",
    "content": "<?php\nreturn [\n\n    'accepted' => ':attribute muss akzeptiert werden.',\n    'active_url' => ':attribute ist keine gültige URL.',\n    'after' => ':attribute muss ein Datum sein nach :date.',\n    'alpha' => ':attribute darf nur Buchstaben enthalten.',\n    'alpha_dash' => ':attribute darf nur Buchstaben, Ziffern und Striche enthalten.',\n    'alpha_num' => ':attribute darf Buchstaben und Ziffern enthalten.',\n    'array' => ':attribute muss ein Array sein',\n    'before' => ':attribute muss ein Datum sein vor :date.',\n    'between' => [\n        'numeric' => ':attribute muss zwischen :min und :max liegen.',\n        'file' => ':attribute muss zwischen :min und :max KB liegen.',\n        'string' => ':attribute muss zwischen :min und :max Buchstaben enthalten.',\n        'array' => ':attribute muss zwischen :min und :max  Elemente enthalten.',\n    ],\n    'boolean' => ':attribute muss True oder False sein.',\n    'confirmed' => 'Der Überprüfungswert für :attribute  stimmt nicht überein.',\n    'date' => ':attribute ist kein gültiges Datum.',\n    'date_format' => ':attribute entspricht nicht dem Format :format.',\n    'different' => ':attribute und :other müssen unterschiedlich sein.',\n    'digits' => ':attribute muss :digits Ziffern enthalten.',\n    'digits_between' => ':attribute muss zwischen :min und :max Ziffern liegen.',\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'Benutzerdefinierte Meldung',\n        ],\n    ],\n    'dimensions' => ':attribute hat die falschen Abmessungen.',\n    'distinct' => ':attribute Wert ist bereits vorhanden.',\n    'email' => ':attribute muss eine gültige E-Mail sein.',\n    'exists' => ':attribute ist ungültig.',\n    'file' => ':attribute muss eine Datei sein.',\n    'filled' => ':attribute ist ein Pflichtfeld.',\n    'image' => ':attribute muss ein Bild sein.',\n    'in' => ':attribute enthält eine ungültige Auswahl.',\n    'in_array' => ':attribute existiert nicht in :other.',\n    'integer' => ':attribute muss eine Zahl sein.',\n    'ip' => ':attribute muss eine IP Adresse sein.',\n    'json' => ':attribute muss ein JSON Wert sein.',\n    'max' => [\n        'numeric' => ':attribute darf nicht größer als :max sein',\n        'file' => ':attribute darf nicht größer als :max kilobyte sein.',\n        'string' => ':attribute darf nicht mehr als :max Zeichen lang sein.',\n        'array' => ':attribute darf nicht mehr als :max Einträge enthalten.',\n    ],\n    'mimes' => ':attribute muss vom Typ :values sein.',\n    'min' => [\n        'numeric' => ':attribute muss mindestens :min sein.',\n        'file' => ':attribute muss mindestens :min kilobytes sein.',\n        'string' => ':attribute muss mindestens :min Zeichen enthalten.',\n        'array' => ':attribute muss mindestens :min Einträge enthalten.',\n    ],\n    'not_in' => 'Die Auswahl :attribute ist ungültig.',\n    'numeric' => ':attribute muss eine Zahl sein.',\n    'present' => ':attribute ist ein Pflichtfeld.',\n    'regex' => ':attribute Format ist ungültig.',\n    'required' => ':attribute ist ein Pflichtfeld.',\n    'required_if' => ':attribute ist ein Pflichtfeld wenn :other ist :value.',\n    'required_unless' => ':attribute ist ein Pflichtfeld wenn :other ist nicht :value.',\n    'required_with' => ':attribute ist ein Pflichtfeld wenn :values ausgewählt.',\n    'required_with_all' => ':attribute ist ein Pflichtfeld wenn :values ausgewählt.',\n    'required_without' => ':attribute ist ein Pflichtfeld wenn :values nicht ausgewählt.',\n    'required_without_all' => ':attribute ist ein Pflichtfeld wenn keines von :values ausgewählt.',\n    'same' => ':attribute und :other müssen identisch sein.',\n    'size' => [\n        'numeric' => ':attribute muss :size sein.',\n        'file' => ':attribute muss :size kilobyte sein.',\n        'string' => ':attribute muss :size Zeichen enthalten.',\n        'array' => ':attribute muss :size Einträge enthalten.',\n    ],\n    'string' => ':attribute muss eine Zeichenfolge sein.',\n    'timezone' => ':attribute muss eine gültige Zone sein.',\n    'unique' => ':attribute ist bereits in Verwendung.',\n    'url' => ':attribute Format ist ungültig.',\n\n];"
  },
  {
    "path": "resources/lang/en/auth.php",
    "content": "<?php\nreturn [\n\n    'failed' => 'These credentials do not match our records.',\n    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',\n\n];"
  },
  {
    "path": "resources/lang/en/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => '&laquo; Previous',\n    'next' => 'Next &raquo;',\n\n];"
  },
  {
    "path": "resources/lang/en/passwords.php",
    "content": "<?php\nreturn [\n\n    'password' => 'Passwords must be at least six characters and match the confirmation.',\n    'reset' => 'Your password has been reset!',\n    'sent' => 'We have e-mailed your password reset link!',\n    'token' => 'This password reset token is invalid.',\n    'user' => 'We can\\'t find a user with that e-mail address.',\n\n];"
  },
  {
    "path": "resources/lang/en/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\n\t'user-management' => [\n\t\t'title' => 'User management',\n\t\t'fields' => [\n\t\t],\n\t],\n\t\n\t'roles' => [\n\t\t'title' => 'Roles',\n\t\t'fields' => [\n\t\t\t'title' => 'Title',\n\t\t],\n\t],\n\t\n\t'users' => [\n\t\t'title' => 'Users',\n\t\t'fields' => [\n\t\t\t'name' => 'Name',\n\t\t\t'email' => 'Email',\n\t\t\t'password' => 'Password',\n\t\t\t'role' => 'Role',\n\t\t\t'remember-token' => 'Remember token',\n\t\t],\n\t],\n\t\n\t'countries' => [\n\t\t'title' => 'Countries',\n\t\t'fields' => [\n\t\t\t'shortcode' => 'Shortcode',\n\t\t\t'title' => 'Title',\n\t\t\t'name' => 'Name',\n\t\t],\n\t],\n\t'categories' => [\n\t\t'title' => 'Categories',\n\t\t'fields' => [\n\t\t\t'title' => 'Title',\n\t\t\t'name' => 'Name',\n\t\t],\n\t],\n\t\n\t'customers' => [\n\t\t'title' => 'Customers',\n\t\t'fields' => [\n\t\t\t'first-name' => 'First name',\n\t\t\t'last-name' => 'Last name',\n\t\t\t'address' => 'Address',\n\t\t\t'phone' => 'Phone',\n\t\t\t'email' => 'Email',\n\t\t\t'country' => 'Country',\n\t\t],\n\t],\n\t\n\t'rooms' => [\n\t\t'title' => 'Rooms',\n\t\t'fields' => [\n\t\t\t'room-number' => 'Room number',\n\t\t\t'floor' => 'Floor',\n\t\t\t'category' => 'Category',\n\t\t\t'description' => 'Description',\n            'actions' => 'Actions',\n\t\t],\n\t],\n\t\n\t'bookings' => [\n\t\t'title' => 'Bookings',\n\t\t'fields' => [\n\t\t\t'customer' => 'Customer',\n\t\t\t'room' => 'Room',\n\t\t\t'time-from' => 'Time from',\n\t\t\t'time-to' => 'Time to',\n\t\t\t'additional-information' => 'Additional information',\n            'amount' => 'Amount'\n\t\t],\n\t],\n\t\n\t'find-room' => [\n\t\t'title' => 'Find room',\n\t\t'fields' => [\n\t\t],\n        'no_rooms_found' => 'No rooms were found for your chosen dates.',\n        'book_room' => 'Book room',\n    ],\n\t'qa_create' => 'Create',\n\t'qa_save' => 'Save',\n\t'qa_edit' => 'Edit',\n\t'qa_restore' => 'Restore',\n\t'qa_permadel' => 'Delete Permanently',\n\t'qa_all' => 'All',\n\t'qa_trash' => 'Trash',\n\t'qa_view' => 'View',\n\t'qa_update' => 'Update',\n\t'qa_list' => 'List',\n\t'qa_no_entries_in_table' => 'No entries in table',\n\t'qa_custom_controller_index' => 'Custom controller index.',\n\t'qa_logout' => 'Logout',\n\t'qa_add_new' => 'Add new',\n\t'qa_are_you_sure' => 'Are you sure?',\n\t'qa_back_to_list' => 'Back to list',\n\t'qa_dashboard' => 'Dashboard',\n\t'qa_delete' => 'Delete',\n\t'qa_delete_selected' => 'Delete selected',\n\t'qa_category' => 'Category',\n\t'qa_categories' => 'Categories',\n\t'qa_sample_category' => 'Sample category',\n\t'qa_questions' => 'Questions',\n\t'qa_question' => 'Question',\n\t'qa_answer' => 'Answer',\n\t'qa_sample_question' => 'Sample question',\n\t'qa_sample_answer' => 'Sample answer',\n\t'qa_faq_management' => 'FAQ Management',\n\t'qa_administrator_can_create_other_users' => 'Administrator (can create other users)',\n\t'qa_simple_user' => 'Simple user',\n\t'qa_title' => 'Title',\n\t'qa_roles' => 'Roles',\n\t'qa_role' => 'Role',\n\t'qa_user_management' => 'User management',\n\t'qa_users' => 'Users',\n\t'qa_user' => 'User',\n\t'qa_name' => 'Name',\n\t'qa_email' => 'Email',\n\t'qa_password' => 'Password',\n\t'qa_remember_token' => 'Remember token',\n\t'qa_permissions' => 'Permissions',\n\t'qa_user_actions' => 'User actions',\n\t'qa_action' => 'Action',\n\t'qa_action_model' => 'Action model',\n\t'qa_action_id' => 'Action id',\n\t'qa_time' => 'Time',\n\t'qa_campaign' => 'Campaign',\n\t'qa_campaigns' => 'Campaigns',\n\t'qa_description' => 'Description',\n\t'qa_valid_from' => 'Valid from',\n\t'qa_valid_to' => 'Valid to',\n\t'qa_discount_amount' => 'Discount amount',\n\t'qa_discount_percent' => 'Discount percent',\n\t'qa_coupons_amount' => 'Coupons amount',\n\t'qa_coupons' => 'Coupons',\n\t'qa_code' => 'Code',\n\t'qa_redeem_time' => 'Redeem time',\n\t'qa_coupon_management' => 'Coupon Management',\n\t'qa_time_management' => 'Time management',\n\t'qa_projects' => 'Projects',\n\t'qa_reports' => 'Reports',\n\t'qa_time_entries' => 'Time entries',\n\t'qa_work_type' => 'Work type',\n\t'qa_work_types' => 'Work types',\n\t'qa_project' => 'Project',\n\t'qa_start_time' => 'Start time',\n\t'qa_end_time' => 'End time',\n\t'qa_expense_category' => 'Expense Category',\n\t'qa_expense_categories' => 'Expense Categories',\n\t'qa_expense_management' => 'Expense Management',\n\t'qa_expenses' => 'Expenses',\n\t'qa_expense' => 'Expense',\n\t'qa_entry_date' => 'Entry date',\n\t'qa_amount' => 'Amount',\n\t'qa_income_categories' => 'Income categories',\n\t'qa_monthly_report' => 'Monthly report',\n\t'qa_companies' => 'Companies',\n\t'qa_company_name' => 'Company name',\n\t'qa_address' => 'Address',\n\t'qa_website' => 'Website',\n\t'qa_contact_management' => 'Contact management',\n\t'qa_contacts' => 'Contacts',\n\t'qa_company' => 'Company',\n\t'qa_first_name' => 'First name',\n\t'qa_last_name' => 'Last name',\n\t'qa_phone' => 'Phone',\n\t'qa_phone1' => 'Phone 1',\n\t'qa_phone2' => 'Phone 2',\n\t'qa_skype' => 'Skype',\n\t'qa_photo' => 'Photo (max 8mb)',\n\t'qa_category_name' => 'Category name',\n\t'qa_product_management' => 'Product management',\n\t'qa_products' => 'Products',\n\t'qa_product_name' => 'Product name',\n\t'qa_price' => 'Price',\n\t'qa_tags' => 'Tags',\n\t'qa_tag' => 'Tag',\n\t'qa_photo1' => 'Photo1',\n\t'qa_photo2' => 'Photo2',\n\t'qa_photo3' => 'Photo3',\n\t'qa_calendar' => 'Calendar',\n\t'qa_statuses' => 'Statuses',\n\t'qa_task_management' => 'Task management',\n\t'qa_tasks' => 'Tasks',\n\t'qa_status' => 'Status',\n\t'qa_attachment' => 'Attachment',\n\t'qa_due_date' => 'Due date',\n\t'qa_assigned_to' => 'Assigned to',\n\t'qa_assets' => 'Assets',\n\t'qa_asset' => 'Asset',\n\t'qa_serial_number' => 'Serial number',\n\t'qa_location' => 'Location',\n\t'qa_locations' => 'Locations',\n\t'qa_assigned_user' => 'Assigned (user)',\n\t'qa_notes' => 'Notes',\n\t'qa_assets_history' => 'Assets history',\n\t'qa_assets_management' => 'Assets management',\n\t'qa_slug' => 'Slug',\n\t'qa_content_management' => 'Content management',\n\t'qa_text' => 'Text',\n\t'qa_excerpt' => 'Excerpt',\n\t'qa_featured_image' => 'Featured image',\n\t'qa_pages' => 'Pages',\n\t'qa_axis' => 'Axis',\n\t'qa_show' => 'Show',\n\t'qa_group_by' => 'Group by',\n\t'qa_chart_type' => 'Chart type',\n\t'qa_create_new_report' => 'Create new report',\n\t'qa_no_reports_yet' => 'No reports yet.',\n\t'qa_created_at' => 'Created at',\n\t'qa_updated_at' => 'Updated at',\n\t'qa_deleted_at' => 'Deleted at',\n\t'qa_reports_x_axis_field' => 'X-axis - please choose one of date/time fields',\n\t'qa_reports_y_axis_field' => 'Y-axis - please choose one of number fields',\n\t'qa_select_crud_placeholder' => 'Please select one of your CRUDs',\n\t'qa_select_dt_placeholder' => 'Please select one of date/time fields',\n\t'qa_aggregate_function_use' => 'Aggregate function to use',\n\t'qa_x_axis_group_by' => 'X-axis group by',\n\t'qa_x_axis_field' => 'X-axis field (date/time)',\n\t'qa_y_axis_field' => 'Y-axis field',\n\t'qa_integer_float_placeholder' => 'Please select one of integer/float fields',\n\t'qa_change_notifications_field_1_label' => 'Send email notification to User',\n\t'qa_change_notifications_field_2_label' => 'When Entry on CRUD',\n\t'qa_select_users_placeholder' => 'Please select one of your Users',\n\t'qa_is_created' => 'is created',\n\t'qa_is_updated' => 'is updated',\n\t'qa_is_deleted' => 'is deleted',\n\t'qa_notifications' => 'Notifications',\n\t'qa_notify_user' => 'Notify User',\n\t'qa_when_crud' => 'When CRUD',\n\t'qa_create_new_notification' => 'Create new Notification',\n\t'qa_stripe_transactions' => 'Stripe Transactions',\n\t'qa_upgrade_to_premium' => 'Upgrade to Premium',\n\t'qa_messages' => 'Messages',\n\t'qa_you_have_no_messages' => 'You have no messages.',\n\t'qa_all_messages' => 'All Messages',\n\t'qa_new_message' => 'New message',\n\t'qa_outbox' => 'Outbox',\n\t'qa_inbox' => 'Inbox',\n\t'qa_recipient' => 'Recipient',\n\t'qa_subject' => 'Subject',\n\t'qa_message' => 'Message',\n\t'qa_send' => 'Send',\n\t'qa_reply' => 'Reply',\n\t'qa_calendar_sources' => 'Calendar sources',\n\t'qa_new_calendar_source' => 'Create new calendar source',\n\t'qa_crud_title' => 'Crud title',\n\t'qa_crud_date_field' => 'Crud date field',\n\t'qa_prefix' => 'Prefix',\n\t'qa_label_field' => 'Label field',\n\t'qa_suffix' => 'Sufix',\n\t'qa_no_calendar_sources' => 'No calendar sources yet.',\n\t'qa_crud_event_field' => 'Event label field',\n\t'qa_create_new_calendar_source' => 'Create new Calendar Source',\n\t'qa_edit_calendar_source' => 'Edit Calendar Source',\n\t'qa_client_management' => 'Client management',\n\t'qa_client_management_settings' => 'Client management settings',\n\t'qa_country' => 'Country',\n\t'qa_client_status' => 'Client status',\n\t'qa_clients' => 'Clients',\n\t'qa_client_statuses' => 'Client statuses',\n\t'qa_currencies' => 'Currencies',\n\t'qa_main_currency' => 'Main currency',\n\t'qa_documents' => 'Documents',\n\t'qa_file' => 'File',\n\t'qa_income_source' => 'Income source',\n\t'qa_income_sources' => 'Income sources',\n\t'qa_fee_percent' => 'Fee percent',\n\t'qa_note_text' => 'Note text',\n\t'qa_client' => 'Client',\n\t'qa_start_date' => 'Start date',\n\t'qa_budget' => 'Budget',\n\t'qa_project_status' => 'Project status',\n\t'qa_project_statuses' => 'Project statuses',\n\t'qa_transactions' => 'Transactions',\n\t'qa_transaction_types' => 'Transaction types',\n\t'qa_transaction_type' => 'Transaction type',\n\t'qa_transaction_date' => 'Transaction date',\n\t'qa_currency' => 'Currency',\n\t'qa_current_password' => 'Current password',\n\t'qa_new_password' => 'New password',\n\t'qa_password_confirm' => 'New password confirmation',\n\t'qa_dashboard_text' => 'You are logged in!',\n\t'qa_forgot_password' => 'Forgot your password?',\n\t'qa_remember_me' => 'Remember me',\n\t'qa_login' => 'Login',\n\t'qa_change_password' => 'Change password',\n\t'qa_csv' => 'CSV',\n\t'qa_print' => 'Print',\n\t'qa_excel' => 'Excel',\n\t'qa_copy' => 'Copy',\n\t'qa_colvis' => 'Column visibility',\n\t'qa_pdf' => 'PDF',\n\t'qa_reset_password' => 'Reset password',\n\t'qa_reset_password_woops' => '<strong>Whoops!</strong> There were problems with input:',\n\t'qa_email_line1' => 'You are receiving this email because we received a password reset request for your account.',\n\t'qa_email_line2' => 'If you did not request a password reset, no further action is required.',\n\t'qa_email_greet' => 'Hello',\n\t'qa_email_regards' => 'Regards',\n\t'qa_confirm_password' => 'Confirm password',\n\t'qa_if_you_are_having_trouble' => 'If you’re having trouble clicking the',\n\t'qa_copy_paste_url_bellow' => 'button, copy and paste the URL below into your web browser:',\n\t'qa_please_select' => 'Please select',\n\t'qa_register' => 'Register',\n\t'qa_registration' => 'Registration',\n\t'qa_not_approved_title' => 'You are not approved',\n\t'qa_not_approved_p' => 'Your account is still not approved by administrator. Please, be patient and try again later.',\n\t'qa_there_were_problems_with_input' => 'There were problems with input',\n\t'qa_whoops' => 'Whoops!',\n\t'qa_file_contains_header_row' => 'File contains header row?',\n\t'qa_csvImport' => 'CSV Import',\n\t'qa_csv_file_to_import' => 'CSV file to import',\n\t'qa_parse_csv' => 'Parse CSV',\n\t'qa_import_data' => 'Import data',\n\t'qa_imported_rows_to_table' => 'Imported :rows rows to :table table',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/en/validation.php",
    "content": "<?php\nreturn [\n\n    'accepted' => 'The :attribute must be accepted.',\n    'active_url' => 'The :attribute is not a valid URL.',\n    'after' => 'The :attribute must be a date after :date.',\n    'alpha' => 'The :attribute may only contain letters.',\n    'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',\n    'alpha_num' => 'The :attribute may only contain letters and numbers.',\n    'array' => 'The :attribute must be an array.',\n    'before' => 'The :attribute must be a date before :date.',\n    'between' => [\n        'numeric' => 'The :attribute must be between :min and :max.',\n        'file' => 'The :attribute must be between :min and :max kilobytes.',\n        'string' => 'The :attribute must be between :min and :max characters.',\n        'array' => 'The :attribute must have between :min and :max items.',\n    ],\n    'boolean' => 'The :attribute field must be true or false.',\n    'confirmed' => 'The :attribute confirmation does not match.',\n    'date' => 'The :attribute is not a valid date.',\n    'date_format' => 'The :attribute does not match the format :format.',\n    'different' => 'The :attribute and :other must be different.',\n    'digits' => 'The :attribute must be :digits digits.',\n    'digits_between' => 'The :attribute must be between :min and :max digits.',\n    'dimensions' => 'The :attribute has invalid image dimensions.',\n    'distinct' => 'The :attribute field has a duplicate value.',\n    'email' => 'The :attribute must be a valid email address.',\n    'exists' => 'The selected :attribute is invalid.',\n    'file' => 'The :attribute must be a file.',\n    'filled' => 'The :attribute field is required.',\n    'image' => 'The :attribute must be an image.',\n    'in' => 'The selected :attribute is invalid.',\n    'in_array' => 'The :attribute field does not exist in :other.',\n    'integer' => 'The :attribute must be an integer.',\n    'ip' => 'The :attribute must be a valid IP address.',\n    'json' => 'The :attribute must be a valid JSON string.',\n    'max' => [\n        'numeric' => 'The :attribute may not be greater than :max.',\n        'file' => 'The :attribute may not be greater than :max kilobytes.',\n        'string' => 'The :attribute may not be greater than :max characters.',\n        'array' => 'The :attribute may not have more than :max items.',\n    ],\n    'mimes' => 'The :attribute must be a file of type: :values.',\n    'min' => [\n        'numeric' => 'The :attribute must be at least :min.',\n        'file' => 'The :attribute must be at least :min kilobytes.',\n        'string' => 'The :attribute must be at least :min characters.',\n        'array' => 'The :attribute must have at least :min items.',\n    ],\n    'not_in' => 'The selected :attribute is invalid.',\n    'numeric' => 'The :attribute must be a number.',\n    'present' => 'The :attribute field must be present.',\n    'regex' => 'The :attribute format is invalid.',\n    'required' => 'The :attribute field is required.',\n    'required_if' => 'The :attribute field is required when :other is :value.',\n    'required_unless' => 'The :attribute field is required unless :other is in :values.',\n    'required_with' => 'The :attribute field is required when :values is present.',\n    'required_with_all' => 'The :attribute field is required when :values is present.',\n    'required_without' => 'The :attribute field is required when :values is not present.',\n    'required_without_all' => 'The :attribute field is required when none of :values are present.',\n    'same' => 'The :attribute and :other must match.',\n    'size' => [\n        'numeric' => 'The :attribute must be :size.',\n        'file' => 'The :attribute must be :size kilobytes.',\n        'string' => 'The :attribute must be :size characters.',\n        'array' => 'The :attribute must contain :size items.',\n    ],\n    'string' => 'The :attribute must be a string.',\n    'timezone' => 'The :attribute must be a valid zone.',\n    'unique' => 'The :attribute has already been taken.',\n    'url' => 'The :attribute format is invalid.',\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n];"
  },
  {
    "path": "resources/lang/es/auth.php",
    "content": "<?php\nreturn [\n\n    'throttle' => 'Muchos intentos para ingresar. Por favor intente de nuevo en :seconds segundos',\n    'failed' => 'Estas credenciales no coinciden con nuestros registros.',\n\n];"
  },
  {
    "path": "resources/lang/es/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => '« Anterior',\n    'next' => 'Siguiente »',\n\n];"
  },
  {
    "path": "resources/lang/es/passwords.php",
    "content": "<?php\nreturn [\n\n    'reset' => 'Su contraseña ha sido restablecida!',\n    'password' => 'Las contraseñas deben tener al menos seis caracteres y coincidir con la confirmación.',\n    'sent' => 'Hemos enviado por correo electrónico su enlace de restablecimiento de contraseña!',\n    'token' => 'El código de restauración de contraseña es incorrecto.',\n    'user' => 'No podemos encontrar un usuario con esa dirección de correo electrónico.',\n\n];"
  },
  {
    "path": "resources/lang/es/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\n\t'user-management' => [\n\t\t'title' => 'Administrar Usuarios',\n\t\t'fields' => [\n\t\t],\n\t],\n\t\n\t'roles' => [\n\t\t'title' => 'Roles',\n\t\t'fields' => [\n\t\t\t'title' => 'Titulo',\n\t\t],\n\t],\n\t\n\t'users' => [\n\t\t'title' => 'Usuarios',\n\t\t'fields' => [\n\t\t\t'name' => 'Nombre',\n\t\t\t'email' => 'Email',\n\t\t\t'password' => 'Password',\n\t\t\t'role' => 'Rol',\n\t\t\t'remember-token' => 'Recordar Token',\n\t\t],\n\t],\n\t\n\t'countries' => [\n\t\t'title' => 'Paises',\n\t\t'fields' => [\n\t\t\t'shortcode' => 'Codigo Corto',\n\t\t\t'title' => 'Titulo',\n\t\t\t'name' => 'Nombre',\n\t\t],\n\t],\n\t\n\t'customers' => [\n\t\t'title' => 'Cliente',\n\t\t'fields' => [\n\t\t\t'first-name' => 'Nombres',\n\t\t\t'last-name' => 'Apellidos',\n\t\t\t'address' => 'Direccion',\n\t\t\t'phone' => 'Telefono',\n\t\t\t'email' => 'Email',\n\t\t\t'country' => 'Pais',\n\t\t],\n\t],\n\t\n\t'rooms' => [\n\t\t'title' => 'Habitaciones',\n\t\t'fields' => [\n\t\t\t'room-number' => 'Numero Habitacion',\n\t\t\t'floor' => 'Piso',\n\t\t\t'description' => 'Descripcion',\n\t\t],\n\t],\n\t\n\t'bookings' => [\n\t\t'title' => 'Bookings',\n\t\t'fields' => [\n\t\t\t'customer' => 'Cliente',\n\t\t\t'room' => 'Habitacion',\n\t\t\t'time-from' => 'Desde',\n\t\t\t'time-to' => 'Hasta',\n\t\t\t'additional-information' => 'Informacion Adicional',\n            'amount' => 'Monto'\n\t\t],\n\t],\n\t\n\t'find-room' => [\n\t\t'title' => 'Buscar Habitacion',\n\t\t'fields' => [\n\t\t],\n\t],\n\t'qa_create' => 'Crear',\n\t'qa_save' => 'Guardar',\n\t'qa_edit' => 'Editar',\n\t'qa_view' => 'Ver',\n\t'qa_update' => 'Actualizar',\n\t'qa_list' => 'Listar',\n\t'qa_no_entries_in_table' => 'Sin valores en la tabla',\n\t'qa_custom_controller_index' => 'Índice del controlador personalizado (index).',\n\t'qa_logout' => 'Salir',\n\t'qa_add_new' => 'Agregar',\n\t'qa_are_you_sure' => 'Estás seguro?',\n\t'qa_back_to_list' => 'Regresar a la lista?',\n\t'qa_dashboard' => 'Panel de control',\n\t'qa_delete' => 'Eliminar',\n\t'qa_restore' => 'Restaurar',\n\t'qa_permadel' => 'Borrar permanentemente',\n\t'qa_all' => 'Todos',\n\t'qa_trash' => 'Papelera',\n\t'qa_delete_selected' => 'Eliminar seleccionado',\n\t'qa_category' => 'Categoría',\n\t'qa_categories' => 'Categorías',\n\t'qa_title' => 'Título',\n\t'qa_roles' => 'Roles',\n\t'qa_role' => 'Rol',\n\t'qa_user_management' => 'Administración de usuarios',\n\t'qa_users' => 'Usuarios',\n\t'qa_user' => 'Usuario',\n\t'qa_name' => 'Nombre',\n\t'qa_email' => 'Correo',\n\t'qa_password' => 'Contraseña',\n\t'qa_remember_token' => 'Recordar token',\n\t'qa_permissions' => 'Permisos',\n\t'qa_client' => 'Cliente',\n\t'qa_current_password' => 'Contraseña actual',\n\t'qa_new_password' => 'Contraseña nueva',\n\t'qa_password_confirm' => 'Confirmación de contraseña nueva',\n\t'qa_dashboard_text' => 'Ha iniciado sesión',\n\t'qa_forgot_password' => 'Olvidó su contraseña?',\n\t'qa_remember_me' => 'Recuérdame',\n\t'qa_login' => 'Iniciar sesión',\n\t'qa_copy' => 'Copiar',\n\t'qa_reset_password' => 'Restablecer contraseña',\n\t'qa_email_greet' => 'Hola',\n\t'qa_confirm_password' => 'Confirma la contraseña',\n\t'qa_please_select' => 'Por favor seleccione',\n\t'qa_questions' => 'Preguntas',\n\t'qa_question' => 'Pregunta',\n\t'qa_answer' => 'Respuesta',\n\t'qa_project' => 'Proyecto',\n\t'qa_expenses' => 'Gastos',\n\t'qa_expense' => 'Gasto',\n\t'qa_amount' => 'Cantidad',\n\t'qa_address' => 'Dirección',\n\t'qa_contacts' => 'Contactos',\n\t'qa_first_name' => 'Nombre',\n\t'qa_last_name' => 'Apellido',\n\t'qa_phone' => 'Teléfono',\n\t'qa_category_name' => 'Nombre de categoría',\n\t'qa_products' => 'Productos',\n\t'qa_product_name' => 'Nombre de producto',\n\t'qa_price' => 'Precio',\n\t'qa_tag' => 'Etiqueta',\n\t'qa_photo1' => 'Foto 1',\n\t'qa_photo2' => 'Foto 2',\n\t'qa_photo3' => 'Foto 3',\n\t'qa_calendar' => 'Calendario',\n\t'qa_tasks' => 'Tareas',\n\t'qa_status' => 'Estado',\n\t'qa_messages' => 'Mensajes',\n\t'qa_you_have_no_messages' => 'No tienes mensajes.',\n\t'qa_all_messages' => 'Todos los mensajes',\n\t'qa_new_message' => 'Nuevo mensaje',\n\t'qa_change_password' => 'Cambiar contraseña',\n\t'qa_csv' => 'CSV',\n\t'qa_print' => 'Imprimir',\n\t'qa_excel' => 'Excel',\n\t'qa_colvis' => 'Visibilidad de columnas',\n\t'qa_pdf' => 'PDF',\n\t'qa_register' => 'Registro',\n\t'qa_registration' => 'Registración',\n\t'qa_not_approved_p' => 'La cuenta no ha sido aprobada por el Administrador. Por favor, sea paciente e intentelo nuevamente.',\n\t'qa_whoops' => 'Whoops!',\n\t'qa_serial_number' => 'Número de serie',\n\t'qa_text' => 'Texto',\n\t'qa_show' => 'Mostrar',\n\t'qa_sample_category' => 'Categoria de ejemplo',\n\t'qa_sample_question' => 'Pregunta de ejemplo',\n\t'qa_sample_answer' => 'Respuesta de ejemplo',\n\t'qa_user_actions' => 'Acciones de Usuario (Traza)',\n\t'qa_action' => 'Acciones',\n\t'qa_description' => 'Descripcion',\n\t'qa_valid_from' => 'Valido Desde',\n\t'qa_valid_to' => 'Valido Hasta',\n\t'qa_discount_amount' => 'Cantidad Descuento',\n\t'qa_discount_percent' => 'Descuento Percentil',\n\t'qa_coupons_amount' => 'Cantidad de Cupones',\n\t'qa_coupons' => 'Cupones',\n\t'qa_code' => 'Codigo',\n\t'qa_redeem_time' => 'Tiempo Redencion',\n\t'qa_coupon_management' => 'Administracion de Cupones',\n\t'qa_time_management' => 'Administracion de Tiempo',\n\t'qa_projects' => 'Proyectos',\n\t'qa_reports' => 'Reportes',\n\t'qa_time_entries' => 'Registros de Tiempos',\n\t'qa_work_type' => 'Tipo de Trabajo',\n\t'qa_start_time' => 'Tiempo de Inicio',\n\t'qa_end_time' => 'Tiempo Finalizacion',\n\t'qa_expense_category' => 'Tipo de Gasto',\n\t'qa_expense_management' => 'Administracion de Gastos',\n\t'qa_entry_date' => 'Fecha de Ingreso',\n\t'qa_monthly_report' => 'Reporte Mensual',\n\t'qa_companies' => 'Compañías',\n\t'qa_company_name' => 'Nombre de la Compañía',\n\t'qa_website' => 'Sitio Web',\n\t'qa_contact_management' => 'Administracion de Contactos',\n\t'qa_company' => 'Compañía',\n\t'qa_photo' => 'Foto (max 8mb)',\n\t'qa_product_management' => 'Administracion de Producto',\n\t'qa_tags' => 'Etiquetas',\n\t'qa_statuses' => 'Estatus',\n\t'qa_task_management' => 'Administracion de Tareas',\n\t'qa_attachment' => 'Archivo Adjunto',\n\t'qa_due_date' => 'Fecha Vencimiento',\n\t'qa_assigned_to' => 'Asignado a',\n\t'qa_assets' => 'Activos',\n\t'qa_asset' => 'Activo',\n\t'qa_location' => 'Ubicacion',\n\t'qa_locations' => 'Lugar',\n\t'qa_assigned_user' => 'Asignado a (Usuario)',\n\t'qa_notes' => 'Notas',\n\t'qa_assets_history' => 'Movimientos de Inventario',\n\t'qa_assets_management' => 'Inventario Administracion',\n\t'qa_group_by' => 'Agrupar por',\n\t'qa_chart_type' => 'Tipo de Grafica',\n\t'qa_create_new_report' => 'Crear Nuevo Reporte',\n\t'qa_no_reports_yet' => 'Aun Sin reportes',\n\t'qa_created_at' => 'Creado el',\n\t'qa_updated_at' => 'Actualizado el',\n\t'qa_deleted_at' => 'Eliminado el',\n\t'qa_outbox' => 'Bandeja de salida',\n\t'qa_inbox' => 'Bandeja de entrada',\n\t'qa_recipient' => 'Destinatario',\n\t'qa_subject' => 'Asunto',\n\t'qa_message' => 'Mensaje',\n\t'qa_send' => 'Enviar',\n\t'qa_reply' => 'Responder',\n\t'qa_country' => 'País',\n\t'qa_file' => 'Archivo',\n\t'qa_income_source' => 'Fuente de Ingresos',\n\t'qa_income_sources' => 'Fuente de Egresos',\n\t'qa_budget' => 'Presupuesto',\n\t'qa_currency' => 'Moneda',\n\t'qa_email_regards' => 'Saludos',\n\t'qa_import_data' => 'Importar dato',\n\t'qa_faq_management' => 'Administración de Preguntas Frecuentes',\n\t'qa_administrator_can_create_other_users' => 'Administrador (puede crear otros usuarios)',\n\t'qa_simple_user' => 'Usuario Simple',\n\t'qa_action_model' => 'Modelo de Acción',\n\t'qa_action_id' => 'ID de Acción',\n\t'qa_time' => 'Hora',\n\t'qa_campaign' => 'Campaña',\n\t'qa_campaigns' => 'Campañas',\n\t'qa_work_types' => 'Tipos de Trabajo',\n\t'qa_expense_categories' => 'Tipos de Gasto',\n\t'qa_income_categories' => 'Tipo de Ingreso',\n\t'qa_phone1' => 'Teléfono 1',\n\t'qa_phone2' => 'Teléfono 2',\n\t'qa_content_management' => 'Administración de Contenido',\n\t'qa_excerpt' => 'Extracto',\n\t'qa_featured_image' => 'Imagen Destacada',\n\t'qa_pages' => 'Paginas',\n\t'qa_axis' => 'Eje',\n\t'qa_reports_x_axis_field' => 'eje-x por favor escoja uno de los campos de fecha/hora',\n\t'qa_reports_y_axis_field' => 'eje-y por favor escoja uno de los campos numéricos',\n\t'qa_select_crud_placeholder' => 'Por favor seleccione uno de sus CRUDs',\n\t'qa_select_dt_placeholder' => 'Por favor seleccione uno de los campos de fecha/hora',\n\t'qa_aggregate_function_use' => 'Agregue función a utilizar',\n\t'qa_x_axis_group_by' => 'eje-x agrupar por',\n\t'qa_x_axis_field' => 'eje-x campo (fecha/hora)',\n\t'qa_y_axis_field' => 'eje-y campo',\n\t'qa_integer_float_placeholder' => 'Por favor seleccione uno de los campos entero/flotante',\n\t'qa_change_notifications_field_1_label' => 'Enviar notificación al usuario por email',\n\t'qa_change_notifications_field_2_label' => 'Cuando se ingrese en CRUD',\n\t'qa_select_users_placeholder' => 'Por favor seleccione uno de sus Usuarios',\n\t'qa_is_created' => 'es creado',\n\t'qa_is_updated' => 'es actualizado',\n\t'qa_is_deleted' => 'es borrado',\n\t'qa_notifications' => 'Notificaciones',\n\t'qa_notify_user' => 'Notificar Usuario',\n\t'qa_when_crud' => 'Cuando CRUD',\n\t'qa_create_new_notification' => 'crear nueva Notificacion',\n\t'qa_upgrade_to_premium' => 'Actualizar a Premium',\n\t'qa_calendar_sources' => 'Fuentes de Calendario',\n\t'qa_new_calendar_source' => 'Crear una nueva fuente de calendario',\n\t'qa_crud_title' => 'Título del CRUD',\n\t'qa_crud_date_field' => 'Campo fecha del CRUD',\n\t'qa_prefix' => 'Prefijo',\n\t'qa_label_field' => 'Etiqueta del campo',\n\t'qa_suffix' => 'Sufijo',\n\t'qa_no_calendar_sources' => 'Sin fuentes de calendario aun.',\n\t'qa_crud_event_field' => 'Etiqueta de campo de evento',\n\t'qa_create_new_calendar_source' => 'Crear nueva fuente de Calendario',\n\t'qa_edit_calendar_source' => 'Editar fuente de Calendario',\n\t'qa_client_management' => 'Administración de clientes',\n\t'qa_client_management_settings' => 'Configuración de administración de clientes',\n\t'qa_client_status' => 'Estado del Cliente',\n\t'qa_clients' => 'Clientes',\n\t'qa_client_statuses' => 'Estados del Cliente',\n\t'qa_currencies' => 'Monedas',\n\t'qa_main_currency' => 'Moneda principal',\n\t'qa_documents' => 'Documents',\n\t'qa_not_approved_title' => 'No estas aprobado',\n\t'qa_there_were_problems_with_input' => 'Hubo problemas con esta entrada',\n\t'qa_csvImport' => 'Importación CSV',\n\t'qa_csv_file_to_import' => 'Archivo CSV a importar',\n\t'qa_parse_csv' => 'Rasterizar CSV',\n\t'qa_imported_rows_to_table' => 'Importación de :rows líneas a la tabla :table',\n\t'qa_if_you_are_having_trouble' => 'Si estás teniendo problemas dale click a ',\n\t'qa_skype' => 'Skype',\n\t'qa_start_date' => 'Fecha inicio',\n\t'qa_project_status' => 'Estado del proyecto',\n\t'qa_transactions' => 'Operaciones',\n\t'qa_fee_percent' => 'Porcentaje de tarifa',\n\t'qa_note_text' => 'Nota de texto',\n\t'qa_project_statuses' => 'Estados del proyecto',\n\t'qa_transaction_types' => 'Tipos de operación',\n\t'qa_transaction_type' => 'Tipo de operación',\n\t'qa_transaction_date' => 'Fecha de operación',\n\t'qa_reset_password_woops' => '<strong>¡Ups!</strong> Hubo problemas con la entrada:',\n\t'qa_copy_paste_url_bellow' => 'botón, copiar y pegar la siguiente URL en tu navegador',\n\t'qa_file_contains_header_row' => '¿El archivo contiene fila de encabezado?',\n\t'qa_stripe_transactions' => 'Transacciones con Stripe',\n\t'qa_email_line1' => 'Estás recibiendo este mensaje porque alguien solicitó restablecer la contraseña de esta cuenta.',\n\t'qa_email_line2' => 'Si no solicitado el restablecimiento de tu contraseña no es necesario que hagas nada.',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/es/validation.php",
    "content": "<?php\nreturn [\n\n    'accepted' => 'El  :attribute debe ser aceptado.',\n    'active_url' => 'El :attribute no es una URL válida.',\n    'after' => 'El :attribute debe ser una fecha posterior a ',\n    'alpha' => 'El :attribute solo puede contener letras.',\n    'alpha_dash' => 'El :attribute solamente puede contener letras, números y guiones.',\n    'alpha_num' => 'El :attribute solamente puede contener letras y números.',\n    'array' => 'El :attribute debe ser un arreglo.',\n    'before' => 'El :attribute debe ser una fecha antes de :date.',\n    'between' => [\n        'numeric' => 'El :attribute debe estar entre :min y :max.',\n        'file' => 'El :attribute debe estar entre :min y :max kilobytes.',\n        'string' => 'El :attribute debe estar entre :min y :max caracteres.',\n        'array' => 'El :attribute debe estar entre :min y :max items.',\n    ],\n    'boolean' => 'El campo :attribute debe ser verdadero o falso',\n    'confirmed' => 'La confirmación de :attribute no coincide.',\n    'date' => 'El :attribute no es una fecha valida.',\n    'date_format' => 'No coincide el formato :format de :attribute',\n    'different' => 'El :attribute y:otro debe ser diferente.',\n    'digits' => ':attribute deben ser digitos.',\n    'digits_between' => 'El :attribute debe estar entre  min y : max digitos.',\n    'dimensions' => 'la imagen :attribute tiene dimensiones incorrectas',\n    'distinct' => 'El :attribute el campo tiene un valor duplicado',\n    'email' => ':attribute debe ser una direccion de correo valida.',\n    'exists' => 'El : attribute seleccionado es invalido.',\n    'file' => 'El :attribute debe ser un archivo.',\n    'filled' => 'El campo :attribute es requerido.',\n    'image' => ' :attribute debe ser una imagen.',\n    'integer' => 'El :attribute debe ser un entero.',\n    'ip' => 'El :attribute debe ser una direccion ip valida.',\n    'in' => 'El :attribute seleccionado es invalido.',\n    'in_array' => 'El campo :attribute no existe en :other.',\n    'json' => 'El :attribute debe ser una cadena valida de JSON',\n    'max' => [\n        'numeric' => 'El :attribute no debe ser mas grande que :max.',\n        'file' => 'El :attribute no debe ser mas grande que :max kilobytes.',\n        'string' => 'El :attribute no debe ser mas grande que :max caracteres.',\n        'array' => 'El :attribute no debe tener más de :max elementos.',\n    ],\n    'min' => [\n        'numeric' => 'El :attribute debe ser al menos :min.',\n        'file' => 'El :attribute debe ser al menos :min kylobytes.',\n        'string' => 'El :attribute debe ser al menos :min caracteres.',\n        'array' => 'El :attribute debe ser al menos :min elementos.',\n    ],\n    'mimes' => 'El :attribute debe ser un fichero de tipo: :values',\n    'not_in' => 'El :attribute seleccionado no és valido.',\n    'numeric' => 'El :attribute debe ser un número.',\n    'regex' => 'El formato del :attribute no es válido.',\n    'required' => 'El campo :attribute es obligatorio.',\n    'size' => [\n        'numeric' => 'El :attribute debe ser :size.',\n        'file' => 'El :attribute debe ser :size kilobytes.',\n        'string' => 'El :attribute debe ser :size caracteres.',\n        'array' => 'El :attribute debe ser :size elementos',\n    ],\n    'string' => 'El :attribute debe ser una cadena.',\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'Mensaje personalizado',\n        ],\n    ],\n    'present' => 'El campo del atributo :attribute debe estar presente.',\n    'required_if' => 'El campo :attribute es requerido cuando :other tiene el valor :value.',\n    'required_unless' => 'El campo :attribute es requerido salvo que :other esta en los valores :values.',\n    'required_with' => 'El campo :attribute es requerido cuando :values esta presente.',\n    'required_with_all' => 'El campo :attribute es requerido cuando :values esta presente.',\n    'required_without' => 'El campo :attribute es requerido cuando :values no esta presente.',\n    'required_without_all' => 'El campo :attribute es requerido cuando ninguno de los :values estan presentes.',\n    'same' => 'El :attribute y :other deben coincidir.',\n    'timezone' => 'El :attribute debe ser una zona valida.',\n    'unique' => 'El atributo :attribute ya ha sido usado.',\n    'url' => 'El formato de :attribute es invalido.',\n\n];"
  },
  {
    "path": "resources/lang/fi/auth.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/fi/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => '« Edellinen',\n    'next' => 'Seuraava »',\n\n];"
  },
  {
    "path": "resources/lang/fi/passwords.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/fi/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_country' => 'Maa',\n\t'qa_client_status' => 'Asiakkaan tila',\n\t'qa_clients' => 'Asiakkaat',\n\t'qa_client_statuses' => 'Asiakkaan tilat',\n\t'qa_currencies' => 'Valuutat',\n\t'qa_main_currency' => 'Päävaluutta',\n\t'qa_documents' => 'Dokumentit',\n\t'qa_file' => 'Tiedosto',\n\t'qa_client' => 'Asiakas',\n\t'qa_start_date' => 'Aloitus pvm',\n\t'qa_budget' => 'Budjetti',\n\t'qa_project_status' => 'Projektin tila',\n\t'qa_project_statuses' => 'Projektien tila',\n\t'qa_currency' => 'Valuutta',\n\t'qa_current_password' => 'Nykyinen salasana',\n\t'qa_new_password' => 'Uusi salasana',\n\t'qa_forgot_password' => 'Unohditko salasanasi?',\n\t'qa_remember_me' => 'Muista minut',\n\t'qa_login' => 'Sisäänkirjaus',\n\t'qa_change_password' => 'Vaihda salasanaa',\n\t'qa_csv' => 'CSV',\n\t'qa_print' => 'Tulosta',\n\t'qa_excel' => 'Excel',\n\t'qa_copy' => 'Kopioi',\n\t'qa_colvis' => 'Sarakkeen näkyvyys',\n\t'qa_pdf' => 'PDF',\n\t'qa_email_greet' => 'Hei',\n\t'qa_email_regards' => 'Terveisin',\n\t'qa_confirm_password' => 'Vahvista salasana',\n\t'qa_transactions' => 'Tapahtumat',\n\t'qa_transaction_types' => 'Tapahtuman tyypit',\n\t'qa_transaction_type' => 'Tapahtuman tyyppi',\n\t'qa_transaction_date' => 'Tapahtuman pvm',\n\t'qa_serial_number' => 'Sarjanumero',\n\t'qa_show' => 'Näytä',\n\t'qa_created_at' => 'Luonti pvm',\n\t'qa_updated_at' => 'Päivitetty pvm',\n\t'qa_deleted_at' => 'Poistettu pvm',\n\t'qa_is_created' => 'on luotu',\n\t'qa_is_updated' => 'on pävitetty',\n\t'qa_is_deleted' => 'on poistettu',\n\t'qa_messages' => 'Viestit',\n\t'qa_you_have_no_messages' => 'Sinulle ei ole viestejä.',\n\t'qa_all_messages' => 'Kaikki Viestit',\n\t'qa_new_message' => 'Uusi viesti',\n\t'qa_outbox' => 'Outbox',\n\t'qa_inbox' => 'Inbox',\n\t'qa_create' => 'Luo uusi',\n\t'qa_save' => 'Tallenna',\n\t'qa_edit' => 'Muuta',\n\t'qa_restore' => 'Palauta',\n\t'qa_all' => 'Kaikki',\n\t'qa_view' => 'Näytä',\n\t'qa_update' => 'Päivitä',\n\t'qa_list' => 'Lista',\n\t'qa_no_entries_in_table' => 'Taulu on tyhjä',\n\t'qa_logout' => 'Uloskirjaus',\n\t'qa_add_new' => 'Lisää uusi',\n\t'qa_are_you_sure' => 'Oletko varma?',\n\t'qa_back_to_list' => 'Takaisin listaan',\n\t'qa_delete' => 'Poista',\n\t'qa_delete_selected' => 'Poista valittu',\n\t'qa_category' => 'Kategoria',\n\t'qa_categories' => 'Kategoriat',\n\t'qa_sample_category' => 'Esimerkki kategoria',\n\t'qa_questions' => 'Kysymykset',\n\t'qa_question' => 'Kysymys',\n\t'qa_answer' => 'Vastaus',\n\t'qa_sample_question' => 'Esimerkki kysymys',\n\t'qa_sample_answer' => 'Esimerkki vastaus',\n\t'qa_faq_management' => 'UKK hallinta',\n\t'qa_roles' => 'Roolit',\n\t'qa_role' => 'Rooli',\n\t'qa_users' => 'Käyttäjät',\n\t'qa_user' => 'Käyttäjä',\n\t'qa_name' => 'Nimi',\n\t'qa_email' => 'Sähköposti',\n\t'qa_password' => 'Salasana',\n\t'qa_permissions' => 'Oikeudet',\n\t'qa_time' => 'Aika',\n\t'qa_projects' => 'Projektit',\n\t'qa_reports' => 'Raportit',\n\t'qa_project' => 'Projekti',\n\t'qa_start_time' => 'Alku aika',\n\t'qa_end_time' => 'Loppu aika',\n\t'qa_expense_category' => 'Kulun Kategoria',\n\t'qa_expense_categories' => 'Kulujen Kategoriat',\n\t'qa_amount' => 'Summa',\n\t'qa_companies' => 'Yritykset',\n\t'qa_company_name' => 'Yrityksen nimi',\n\t'qa_address' => 'Osoite',\n\t'qa_phone' => 'Puhelin',\n\t'qa_phone1' => 'Puhelin 1',\n\t'qa_phone2' => 'Puhelin 2',\n\t'qa_skype' => 'Skype',\n\t'qa_photo' => 'Kuva (8 mt max)',\n\t'qa_products' => 'Tuotteet',\n\t'qa_product_name' => 'Tuotteen nimi',\n\t'qa_price' => 'Hinta',\n\t'qa_photo1' => 'Kuva 1',\n\t'qa_photo2' => 'Kuva 2',\n\t'qa_photo3' => 'Kuva 3',\n\t'qa_calendar' => 'Kalenteri',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/fi/validation.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/fr/auth.php",
    "content": "<?php\nreturn [\n\n    'failed' => 'Ces identifiants ne sont pas reconnus.',\n    'throttle' => 'Trop de tentatives de connexion échouées. Veuillez réessayer dans :seconds secondes.',\n\n];"
  },
  {
    "path": "resources/lang/fr/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => '« Précédent',\n    'next' => 'Suivant »',\n\n];"
  },
  {
    "path": "resources/lang/fr/passwords.php",
    "content": "<?php\nreturn [\n\n    'reset' => 'Votre mot de passe a été réinitialisé.',\n    'password' => 'Le mot de passe doit comporter au moins 6 caractères et correspondre à la confirmation.',\n    'sent' => 'Nous venons de vous envoyez un email avec un lien pour réinitialiser votre mot de passe.',\n    'token' => 'Le lien de réinitialisation du mot de passe n\\'est pas valide.',\n    'user' => 'Nous ne trouvons pas d\\'utilisateur correspondant à cette adresse email.',\n\n];"
  },
  {
    "path": "resources/lang/fr/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_create' => 'Créer',\n\t'qa_save' => 'Enregistrer',\n\t'qa_edit' => 'Modifier',\n\t'qa_restore' => 'Restaurer',\n\t'qa_permadel' => 'Supprimer définitivement',\n\t'qa_all' => 'Tous',\n\t'qa_trash' => 'Corbeille',\n\t'qa_view' => 'Afficher',\n\t'qa_update' => 'Mettre à jour',\n\t'qa_list' => 'Lister',\n\t'qa_logout' => 'Déconnexion',\n\t'qa_add_new' => 'Ajouter',\n\t'qa_are_you_sure' => 'Êtes-vous sûr ?',\n\t'qa_back_to_list' => 'Retour à la liste',\n\t'qa_dashboard' => 'Tableau de bord',\n\t'qa_delete' => 'Supprimer',\n\t'qa_delete_selected' => 'Supprimer les éléments sélectionnés',\n\t'qa_category' => 'Catégorie',\n\t'qa_categories' => 'Catégories',\n\t'qa_please_select' => 'Sélectionner',\n\t'qa_crud_event_field' => 'Champ de l\\'étiquette d\\'événement',\n\t'qa_create_new_calendar_source' => 'Créer une nouvelle source de calendrier',\n\t'qa_edit_calendar_source' => 'Modifier la source du calendrier',\n\t'qa_client_management' => 'Gestion des clients',\n\t'qa_client_management_settings' => 'Paramètres de gestion du client',\n\t'qa_country' => 'Pays',\n\t'qa_client_status' => 'Statut du client',\n\t'qa_clients' => 'Clients',\n\t'qa_client_statuses' => 'Statut des clients',\n\t'qa_currencies' => 'Devises',\n\t'qa_main_currency' => 'Devise principale',\n\t'qa_documents' => 'Documents',\n\t'qa_file' => 'Fichier',\n\t'qa_income_source' => 'Source de revenu',\n\t'qa_income_sources' => 'Sources de revenu',\n\t'qa_fee_percent' => 'Pourcentage de frais',\n\t'qa_note_text' => 'Note',\n\t'qa_client' => 'Client',\n\t'qa_start_date' => 'Date de début',\n\t'qa_budget' => 'Budget',\n\t'qa_project_status' => 'L\\'état du projet',\n\t'qa_project_statuses' => 'Statut du projet',\n\t'qa_transactions' => 'Transactions',\n\t'qa_transaction_types' => 'Types de transactions',\n\t'qa_transaction_type' => 'Type de transaction',\n\t'qa_transaction_date' => 'Date de la transaction',\n\t'qa_currency' => 'Devise',\n\t'qa_current_password' => 'Mot de passe actuel',\n\t'qa_new_password' => 'Nouveau mot de passe',\n\t'qa_password_confirm' => 'Confirmation du nouveau mot de passe',\n\t'qa_dashboard_text' => 'Vous êtes authentifié !',\n\t'qa_forgot_password' => 'Mot de passe oublié ?',\n\t'qa_remember_me' => 'Se souvenir de moi',\n\t'qa_login' => 'Connexion',\n\t'qa_change_password' => 'Changer le mot de passe',\n\t'qa_print' => 'Imprimer',\n\t'qa_copy' => 'Copier',\n\t'qa_colvis' => 'Visibilité de la colonne',\n\t'qa_reset_password' => 'Réinitialiser le mot de passe',\n\t'qa_reset_password_woops' => '<strong>Whoops!</strong> Il y a eu des problèmes d\\'entrée :',\n\t'qa_email_line1' => 'Vous recevez ce courrier électronique parce que nous avons reçu une demande de réinitialisation de mot de passe pour votre compte.',\n\t'qa_email_line2' => 'Si vous n\\'avez pas demandé de réinitialisation d\\'un mot de passe, aucune autre action n\\'est requise.',\n\t'qa_email_greet' => 'Bonjour',\n\t'qa_email_regards' => 'Cordialement',\n\t'qa_confirm_password' => 'Confirmez le mot de passe',\n\t'qa_if_you_are_having_trouble' => 'Si vous rencontrez des problèmes, cliquez sur',\n\t'qa_copy_paste_url_bellow' => 'bouton, copiez et collez l\\'URL ci-dessous dans votre navigateur Web:',\n\t'qa_register' => 'S\\'inscrire',\n\t'qa_registration' => 'Enregistrement',\n\t'qa_not_approved_title' => 'Vous n\\'êtes pas approuvé',\n\t'qa_not_approved_p' => 'Votre compte n\\'est toujours pas approuvé par l\\'administrateur. Veuillez patienter et réessayer plus tard.',\n\t'qa_questions' => 'Questions',\n\t'qa_question' => 'Question',\n\t'qa_answer' => 'Réponse',\n\t'qa_sample_question' => 'Exemple de question',\n\t'qa_sample_answer' => 'Exemple de réponse',\n\t'qa_password' => 'Mot de passe',\n\t'qa_remember_token' => 'Se souvenir du jeton',\n\t'qa_permissions' => 'Autorisations',\n\t'qa_user_actions' => 'Actions de l\\'utilisateur',\n\t'qa_action' => 'Action',\n\t'qa_time' => 'Heure',\n\t'qa_description' => 'Déscription',\n\t'qa_valid_from' => 'Validation à partir de ',\n\t'qa_discount_amount' => 'Montant de l\\'abonnement',\n\t'qa_discount_percent' => '% De réduction',\n\t'qa_coupons_amount' => 'Montant des coupons',\n\t'qa_coupons' => 'Coupons',\n\t'qa_redeem_time' => 'Échangez le temps',\n\t'qa_coupon_management' => 'Gestion des coupons',\n\t'qa_time_management' => 'Gestion du temps',\n\t'qa_projects' => 'Projet',\n\t'qa_reports' => 'Rapports',\n\t'qa_time_entries' => 'Entrées de l\\'heure',\n\t'qa_work_type' => 'Type de travail',\n\t'qa_work_types' => 'Types de travail',\n\t'qa_project' => 'Projet',\n\t'qa_start_time' => 'Heure de début',\n\t'qa_end_time' => 'Heure de fin',\n\t'qa_expense_category' => 'Catégorie de dépenses',\n\t'qa_expense_categories' => 'Catégories de dépenses',\n\t'qa_expense_management' => 'Gestion des dépenses',\n\t'qa_expenses' => 'Dépenses',\n\t'qa_expense' => 'Dépense',\n\t'qa_entry_date' => 'Date d\\'entrée',\n\t'qa_amount' => 'Montant',\n\t'qa_income_categories' => 'Catégories de revenu',\n\t'qa_monthly_report' => 'Rapport mensuel',\n\t'qa_companies' => 'Organisme',\n\t'qa_company_name' => 'Nom de l\\'organisme',\n\t'qa_address' => 'Addresse',\n\t'qa_website' => 'Site web',\n\t'qa_contact_management' => 'Gestion des contacts',\n\t'qa_contacts' => 'Contacts',\n\t'qa_company' => 'Organisme',\n\t'qa_first_name' => 'Prénom',\n\t'qa_last_name' => 'Nom',\n\t'qa_phone' => 'Téléphone',\n\t'qa_category_name' => 'Nom de la catégorie',\n\t'qa_product_management' => 'Gestion des produits',\n\t'qa_products' => 'Produits',\n\t'qa_product_name' => 'Désignation du produit',\n\t'qa_price' => 'Prix',\n\t'qa_calendar' => 'Calendrier',\n\t'qa_statuses' => 'Statut',\n\t'qa_task_management' => 'Gestion des tâches',\n\t'qa_tasks' => 'Tâches',\n\t'qa_status' => 'Statut',\n\t'qa_attachment' => 'Pièce jointe',\n\t'qa_due_date' => 'Date d\\'échéance',\n\t'qa_assigned_to' => 'Assigné à',\n\t'qa_assets' => 'Les atouts',\n\t'qa_asset' => 'Atout',\n\t'qa_serial_number' => 'Numéro de série',\n\t'qa_assigned_user' => 'Affecté (utilisateur)',\n\t'qa_assets_history' => 'Historique des actifs',\n\t'qa_assets_management' => 'Gestion d\\'actifs',\n\t'qa_slug' => 'Slug',\n\t'qa_content_management' => 'Gestion de contenu',\n\t'qa_text' => 'Texte',\n\t'qa_excerpt' => 'Extrait',\n\t'qa_featured_image' => 'Image à la une',\n\t'qa_axis' => 'Axe',\n\t'qa_show' => 'Afficher',\n\t'qa_group_by' => 'Grouper par',\n\t'qa_chart_type' => 'Type de graphique',\n\t'qa_create_new_report' => 'Créer un nouveau rapport',\n\t'qa_select_dt_placeholder' => 'Sélectionnez un des champs date / heure',\n\t'qa_aggregate_function_use' => 'Fonction agrégée à utiliser',\n\t'qa_change_notifications_field_1_label' => 'Envoyer une notification par courrier électronique à l\\'utilisateur',\n\t'qa_select_users_placeholder' => 'Sélectionnez un de vos Utilisateurs',\n\t'qa_is_created' => 'est créé',\n\t'qa_is_updated' => 'est mis à jour',\n\t'qa_is_deleted' => 'est supprimé',\n\t'qa_notifications' => 'Notifications',\n\t'qa_notify_user' => 'Notifier l\\'utilisateur',\n\t'qa_create_new_notification' => 'Créer une nouvelle notification',\n\t'qa_stripe_transactions' => 'Transactions de rayures',\n\t'qa_upgrade_to_premium' => 'Passer à la version premium',\n\t'qa_messages' => 'Messages',\n\t'qa_you_have_no_messages' => 'Vous n\\'avez pas de messages.',\n\t'qa_all_messages' => 'Tous les messages',\n\t'qa_new_message' => 'Nouveau message',\n\t'qa_outbox' => 'Boîte d\\'envoi',\n\t'qa_inbox' => 'Boîte de réception',\n\t'qa_recipient' => 'Destinataire',\n\t'qa_message' => 'Message',\n\t'qa_send' => 'Envoyer',\n\t'qa_reply' => 'Répondre',\n\t'qa_calendar_sources' => 'Sources de calendrier',\n\t'qa_new_calendar_source' => 'Créer une nouvelle source de calendrier',\n\t'qa_crud_title' => 'Titre de Crud',\n\t'qa_crud_date_field' => 'Champ de dates de Crud',\n\t'qa_prefix' => 'Préfixe',\n\t'qa_label_field' => 'Champ d\\'étiquette',\n\t'qa_suffix' => 'Suffixe',\n\t'qa_no_calendar_sources' => 'Il n\\'y a pas encore de sources de calendrier.',\n\t'qa_no_entries_in_table' => 'Aucun enregistrement',\n\t'qa_faq_management' => 'Gestion des questions',\n\t'qa_administrator_can_create_other_users' => 'Administrateur',\n\t'qa_simple_user' => 'Utilisateur',\n\t'qa_title' => 'Titre',\n\t'qa_roles' => 'Rôles',\n\t'qa_role' => 'Rôle',\n\t'qa_user_management' => 'Gestion des Utilisateurs',\n\t'qa_users' => 'Utilisateurs',\n\t'qa_user' => 'Utilisateur',\n\t'qa_name' => 'Nom',\n\t'qa_email' => 'eMail',\n\t'qa_valid_to' => 'Valide jusqu\\'à',\n\t'qa_phone1' => 'Téléphone 1',\n\t'qa_tags' => 'Tags',\n\t'qa_tag' => 'Tag',\n\t'qa_when_crud' => 'Sur modification',\n\t'qa_phone2' => 'Téléphone 2',\n\t'qa_location' => 'Localisation',\n\t'qa_locations' => 'Localisations',\n\t'qa_created_at' => 'Créer à',\n\t'qa_updated_at' => 'Modifier à ',\n\t'qa_deleted_at' => 'Supprimer à',\n\t'qa_subject' => 'Sujet',\n\t'qa_imported_rows_to_table' => ':rows lignes importées dans la table :table',\n\t'qa_pages' => 'Pages',\n\t'qa_csv' => 'CSV',\n\t'qa_excel' => 'Excel',\n\t'qa_pdf' => 'PDF',\n\t'qa_import_data' => 'Importer les données ',\n\t'qa_action_model' => 'Modèle de l\\'action',\n\t'qa_action_id' => 'ID de l\\'action',\n\t'qa_campaign' => 'Campagne',\n\t'qa_campaigns' => 'Campagnes',\n\t'qa_code' => 'Code',\n\t'qa_skype' => 'Skype',\n\t'qa_photo' => 'Photo (max 8Mo)',\n\t'qa_photo1' => 'Photo 1',\n\t'qa_photo2' => 'Photo 2',\n\t'qa_photo3' => 'Photo 3',\n\t'qa_notes' => 'Notes',\n\t'qa_no_reports_yet' => 'Il n\\'y a pas de rapport.',\n\t'qa_whoops' => 'Oups !',\n\t'qa_file_contains_header_row' => 'Le fichier contient t-il une ligne d\\'entêtes.',\n\t'qa_csvImport' => 'Importer CSV.',\n\t'qa_csv_file_to_import' => 'Fichier CSV à importer.',\n\t'qa_parse_csv' => 'Analyser CSV.',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/fr/validation.php",
    "content": "<?php\nreturn [\n\n    'active_url' => 'Le lien :attribute n\\'est pas une URL valide.',\n    'accepted' => 'Vous devez accepter :attribute.',\n    'after' => ':attribute doit être une date ultérieure à :date.',\n    'alpha' => ':attribute ne peut contenir que des lettres.',\n    'alpha_dash' => ':attributes ne peut contenir que des lettres, chiffres et tirets.',\n    'alpha_num' => ':attributes ne peut contenir que des lettres et  chiffres.',\n    'array' => ':attribute doit être un tableau.',\n    'before' => ':attribute doit être une date antérieure à :date.',\n    'between' => [\n        'numeric' => ':attribute doit être compris entre :min et :max.',\n        'file' => ':attribute doit être compris entre :min et :max kilo octets..',\n        'string' => ':attribute doit être compris en :min et :max caractères.',\n        'array' => ':attribute doit être compris en :min et :max éléments.',\n    ],\n    'boolean' => ':attribute doit être \"True\" ou \"False\".',\n    'date' => ':attribute n\\'est pas une date valide.',\n    'confirmed' => 'La confirmation de :attribute ne correspond pas.',\n    'date_format' => ':attribute n\\'est pas au format :format.',\n    'different' => ':attribute et :other doivent être différents.',\n    'digits' => ':attribute doit un nombre de type :digit.',\n    'digits_between' => 'La valeur du nombre :attribute doit être comprise entre :min et :max.',\n    'dimensions' => 'Les dimensions de l\\'image :attribute ne sont pas valides.',\n\n];"
  },
  {
    "path": "resources/lang/gr/auth.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/gr/pagination.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/gr/passwords.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/gr/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_create' => 'Δημιουργία',\n\t'qa_save' => 'Αποθήκευση',\n\t'qa_edit' => 'Επεξεργασία',\n\t'qa_view' => 'Εμφάνιση',\n\t'qa_update' => 'Ενημέρωησ',\n\t'qa_list' => 'Λίστα',\n\t'qa_no_entries_in_table' => 'Δεν υπάρχουν δεδομένα στην ταμπέλα',\n\t'qa_custom_controller_index' => 'index προσαρμοσμένου controller.',\n\t'qa_logout' => 'Αποσύνδεση',\n\t'qa_add_new' => 'Προσθήκη νέου',\n\t'qa_are_you_sure' => 'Είστε σίγουροι;',\n\t'qa_back_to_list' => 'Επιστροφή στην λίστα',\n\t'qa_dashboard' => 'Dashboard',\n\t'qa_delete' => 'Διαγραφή',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/gr/validation.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/hi/auth.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/hi/pagination.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/hi/passwords.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/hi/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_create' => 'बनाइए (क्रिएट)',\n\t'qa_save' => 'सुरक्षित करे ',\n\t'qa_edit' => 'संपादित करे (एडिट)',\n\t'qa_view' => 'देखें',\n\t'qa_update' => 'सुधारे ',\n\t'qa_list' => 'सूची',\n\t'qa_no_entries_in_table' => 'टेबल मे एक भी एंट्री नही है ',\n\t'qa_custom_controller_index' => 'विशेष(कस्टम) कंट्रोलर इंडेक्स ।',\n\t'qa_logout' => 'लोग आउट',\n\t'qa_add_new' => 'नया समाविष्ट करे',\n\t'qa_are_you_sure' => 'आप निस्चित है ?',\n\t'qa_back_to_list' => 'सूची पे वापस जाए',\n\t'qa_dashboard' => 'डॅशबोर्ड ',\n\t'qa_delete' => 'मिटाइए',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/hi/validation.php",
    "content": "<?php\nreturn [\n\n    'accepted' => 'gfhgf',\n    'active_url' => 'hgfhgfhgf',\n    'after' => 'hgfhgfh',\n\n];"
  },
  {
    "path": "resources/lang/hu/auth.php",
    "content": "<?php\nreturn [\n\n    'failed' => 'A megadott adatok nem egyeznek az általunk ismertekkel.',\n    'throttle' => 'Túl sok bejelentkezési kísérlet. Legközelebb :seconds másodperc múlva próbálja meg.',\n\n];"
  },
  {
    "path": "resources/lang/hu/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => '« Előző',\n    'next' => 'Következő »',\n\n];"
  },
  {
    "path": "resources/lang/hu/passwords.php",
    "content": "<?php\nreturn [\n\n    'password' => 'A jelszónak legalább 6 karakterből kell állnia.',\n    'reset' => 'A jelszót töröltük!',\n    'sent' => 'Elküldtük a jelszó törléséhez szükséges emailt!',\n    'token' => 'A jelszó törlés token érvénytelen.',\n    'user' => 'A megadott e-mail címmel nem található felhasználó.',\n\n];"
  },
  {
    "path": "resources/lang/hu/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_create' => 'Létrehozás',\n\t'qa_save' => 'Mentés',\n\t'qa_edit' => 'Szerkesztés',\n\t'qa_view' => 'Megtekintés',\n\t'qa_update' => 'Frissítés',\n\t'qa_list' => 'Lista',\n\t'qa_no_entries_in_table' => 'Nincs bejegyzés a táblában',\n\t'qa_logout' => 'Kijelentkezés',\n\t'qa_add_new' => 'Új hozzáadása',\n\t'qa_are_you_sure' => 'Biztosan így legyen?',\n\t'qa_back_to_list' => 'Vissza a listához',\n\t'qa_dashboard' => 'Vezérlőpult',\n\t'qa_delete' => 'Törlés',\n\t'qa_custom_controller_index' => 'Egyedi vezérlő index.',\n\t'qa_restore' => 'Visszaállítás',\n\t'qa_permadel' => 'Végleges törlés',\n\t'qa_all' => 'Összes',\n\t'qa_trash' => 'Törlés',\n\t'qa_delete_selected' => 'Kijelölt(ek) törlése',\n\t'qa_category' => 'Kategória',\n\t'qa_categories' => 'Kategóriák',\n\t'qa_sample_category' => 'Minta kategória',\n\t'qa_questions' => 'Kérdések',\n\t'qa_question' => 'Kérdés',\n\t'qa_answer' => 'Válasz',\n\t'qa_sample_question' => 'Minta kérdés',\n\t'qa_sample_answer' => 'Minta válasz',\n\t'qa_faq_management' => 'GYIK kezelése',\n\t'qa_administrator_can_create_other_users' => 'Admin (létrehozhat felhasználókat)',\n\t'qa_simple_user' => 'Felhasználó',\n\t'qa_title' => 'Cím',\n\t'qa_roles' => 'Szerepkörök',\n\t'qa_role' => 'Szerepkör',\n\t'qa_user_management' => 'Felhasználók kezelése',\n\t'qa_users' => 'Felhasználók',\n\t'qa_user' => 'Felhasználó',\n\t'qa_name' => 'Név',\n\t'qa_email' => 'Email',\n\t'qa_password' => 'Jelszó',\n\t'qa_permissions' => 'Jogosultságok',\n\t'qa_user_actions' => 'Tevékenységek',\n\t'qa_action' => 'Tevékenység',\n\t'qa_time' => 'Idő',\n\t'qa_description' => 'Leírás',\n\t'qa_coupons' => 'Kupon',\n\t'qa_code' => 'Kód',\n\t'qa_projects' => 'Projektek',\n\t'qa_reports' => 'Jelentések',\n\t'qa_project' => 'Projekt',\n\t'qa_start_time' => 'Kezdés ideje',\n\t'qa_end_time' => 'Befejezés ideje',\n\t'qa_companies' => 'Cégek',\n\t'qa_company_name' => 'Cég neve',\n\t'qa_address' => 'Cím',\n\t'qa_website' => 'Honlap',\n\t'qa_contacts' => 'Kapcsolatok',\n\t'qa_company' => 'Cég',\n\t'qa_first_name' => 'Vezetéknév',\n\t'qa_last_name' => 'Keresztnév',\n\t'qa_phone' => 'Telefonszám',\n\t'qa_phone1' => 'Telefonszám 1',\n\t'qa_phone2' => 'Telefonszám 2',\n\t'qa_skype' => 'Skype',\n\t'qa_photo' => 'Kép (max 8mb)',\n\t'qa_category_name' => 'Kategória neve',\n\t'qa_product_management' => 'Termékek kezelése',\n\t'qa_products' => 'Termékek',\n\t'qa_product_name' => 'Termék neve',\n\t'qa_price' => 'Ár',\n\t'qa_tags' => 'Címkék',\n\t'qa_tag' => 'Címke',\n\t'qa_photo1' => 'Kép1',\n\t'qa_photo2' => 'Kép2',\n\t'qa_photo3' => 'Kép3',\n\t'qa_calendar' => 'Naptár',\n\t'qa_statuses' => 'Állapotok',\n\t'qa_coupon_management' => 'Kuponok kezelése',\n\t'qa_time_management' => 'Idő kezelése',\n\t'qa_expense_category' => 'Kiadás kategória',\n\t'qa_expense_categories' => 'Kiadás kategóriák',\n\t'qa_expense_management' => 'Kiadások kezelése',\n\t'qa_expenses' => 'Kiadások',\n\t'qa_expense' => 'Kiadás',\n\t'qa_entry_date' => 'Bejegyzés kelte',\n\t'qa_amount' => 'Összeg',\n\t'qa_income_categories' => 'Bevétel kategória',\n\t'qa_monthly_report' => 'Havi jelentés',\n\t'qa_contact_management' => 'Kapcsolatok kezelése',\n\t'qa_task_management' => 'Feladatok kezelése',\n\t'qa_tasks' => 'Feladatok',\n\t'qa_status' => 'Állapot',\n\t'qa_attachment' => 'Csatolmány',\n\t'qa_due_date' => 'Határidő',\n\t'qa_assigned_to' => 'Felelős',\n\t'qa_currency' => 'Pénznem',\n\t'qa_current_password' => 'Jelenlegi jelszó',\n\t'qa_new_password' => 'Új jelszó',\n\t'qa_password_confirm' => 'Új jelszó újra',\n\t'qa_dashboard_text' => 'Sikeresen bejelentkezett!',\n\t'qa_forgot_password' => 'Elfelejtette a jelszavát?',\n\t'qa_remember_me' => 'Emlékezz rám',\n\t'qa_login' => 'Bejelentkezés',\n\t'qa_change_password' => 'Jelszó megváltoztatása',\n\t'qa_csv' => 'CSV',\n\t'qa_print' => 'Nyomtatás',\n\t'qa_excel' => 'Excel',\n\t'qa_copy' => 'Másolás',\n\t'qa_colvis' => 'Oszlop láthatósága',\n\t'qa_pdf' => 'PDF',\n\t'qa_reset_password' => 'Jelszó törlése',\n\t'qa_reset_password_woops' => '<strong>Hoppá!</strong> Hiba volt a bevitt adatokban:',\n\t'qa_email_line1' => 'Azért kapta ezt az emailt, mivel  egy kérést kaptunk a fiókja jelszavának a törlésére.',\n\t'qa_email_line2' => 'Ha nem Ön kezdeményezte, akkor kérjük, hagyja figyelmen kívül ezt az emailt.',\n\t'qa_email_greet' => 'Üdvözlöm!',\n\t'qa_email_regards' => 'Üdvözlettel',\n\t'qa_confirm_password' => 'Jelszó megerősítése',\n\t'qa_if_you_are_having_trouble' => 'Ha valamiért nem tudna rákattintani ',\n\t'qa_copy_paste_url_bellow' => 'a gombra, akkor másolja be a böngészőjébe az alábbi URL-t:',\n\t'qa_please_select' => 'Válasszon',\n\t'qa_register' => 'Regisztráció',\n\t'qa_registration' => 'Regisztráció',\n\t'qa_not_approved_title' => 'Nincs jóváhagyva',\n\t'qa_not_approved_p' => 'Az adminisztrátor még nem hagyta jóvá a fiókját. Kérjük, várjon türelemmel és próbálja meg később újra.',\n\t'qa_there_were_problems_with_input' => 'Hiba volt a bevitt adatokban',\n\t'qa_whoops' => 'Hoppá!',\n\t'qa_csvImport' => 'CSV importálás',\n\t'qa_csv_file_to_import' => 'Importálandó CSV fájl',\n\t'qa_parse_csv' => 'CSV elemzés',\n\t'qa_remember_token' => 'Emlékezzen a tokenre',\n\t'qa_action_id' => 'Tevékenység id',\n\t'qa_campaign' => 'Kampány',\n\t'qa_campaigns' => 'Kampányok',\n\t'qa_valid_from' => 'Érvényesség kezdete',\n\t'qa_valid_to' => 'Érvényesség vége',\n\t'qa_discount_amount' => 'Kedvezmény összege',\n\t'qa_discount_percent' => 'Kedvezmény százaléka',\n\t'qa_coupons_amount' => 'Kupon mennyisége',\n\t'qa_redeem_time' => 'Beváltás ideje',\n\t'qa_time_entries' => 'Időbejegyzések',\n\t'qa_work_type' => 'Munka típusa',\n\t'qa_work_types' => 'Munka típusok',\n\t'qa_assets' => 'Eszközök',\n\t'qa_asset' => 'Eszköz',\n\t'qa_serial_number' => 'Sorozatszám',\n\t'qa_location' => 'Helyszín',\n\t'qa_locations' => 'Helyszínek',\n\t'qa_assigned_user' => 'Felelős (felhasználó)',\n\t'qa_notes' => 'Megjegyzés',\n\t'qa_assets_history' => 'Előzmények',\n\t'qa_assets_management' => 'Eszközök kezelése',\n\t'qa_slug' => 'Link',\n\t'qa_content_management' => 'Tartalom kezelése',\n\t'qa_text' => 'Szöveg',\n\t'qa_excerpt' => 'Kivonat',\n\t'qa_featured_image' => 'Kiemelt kép',\n\t'qa_pages' => 'Oldalak',\n\t'qa_axis' => 'Tengely',\n\t'qa_show' => 'Mutat',\n\t'qa_group_by' => 'Csoportosítás',\n\t'qa_chart_type' => 'Grafikon típusa',\n\t'qa_create_new_report' => 'Új jelentés',\n\t'qa_no_reports_yet' => 'Nincsenek jelentések.',\n\t'qa_created_at' => 'Létrehozva',\n\t'qa_updated_at' => 'Frissítve',\n\t'qa_deleted_at' => 'Törölve',\n\t'qa_reports_x_axis_field' => 'X tengely - válasszon egy dátum/idő mezőt',\n\t'qa_reports_y_axis_field' => 'Y tengely - válasszon egy szám mezőt',\n\t'qa_select_crud_placeholder' => 'Válassza ki valamelyik CRUD-ot',\n\t'qa_select_dt_placeholder' => 'Válassza ki valamelyik dátum/idő mezőt',\n\t'qa_aggregate_function_use' => 'Összegző funkció használata',\n\t'qa_x_axis_group_by' => 'X tengely csoportosítás',\n\t'qa_x_axis_field' => 'X tengely mező (dátum/idő)',\n\t'qa_y_axis_field' => 'Y tengely mező',\n\t'qa_is_created' => 'létrehozva',\n\t'qa_is_updated' => 'frissítve',\n\t'qa_is_deleted' => 'törölve',\n\t'qa_notifications' => 'Megjegyzések',\n\t'qa_notify_user' => 'Felhasználó értesítése',\n\t'qa_create_new_notification' => 'Új értesítés',\n\t'qa_stripe_transactions' => 'Stripe tranzakciók',\n\t'qa_upgrade_to_premium' => 'Frissítés Prémiumra',\n\t'qa_messages' => 'Üzenetek',\n\t'qa_you_have_no_messages' => 'Nincsenek üzenetek.',\n\t'qa_all_messages' => 'Összes üzenet',\n\t'qa_new_message' => 'Új üzenet',\n\t'qa_outbox' => 'Kimenő',\n\t'qa_inbox' => 'Bejövő',\n\t'qa_recipient' => 'Címzett',\n\t'qa_subject' => 'Tárgy',\n\t'qa_message' => 'Üzenet',\n\t'qa_send' => 'Küldés',\n\t'qa_reply' => 'Válasz',\n\t'qa_calendar_sources' => 'Naptár forrása',\n\t'qa_new_calendar_source' => 'Naptár forrás létrehozása',\n\t'qa_crud_title' => 'Crud címe',\n\t'qa_crud_date_field' => 'Crud dátum mező',\n\t'qa_prefix' => 'Előtag',\n\t'qa_label_field' => 'Címke mező',\n\t'qa_suffix' => 'Utótag',\n\t'qa_no_calendar_sources' => 'Nincs naptár',\n\t'qa_crud_event_field' => 'Esemény címke mező',\n\t'qa_create_new_calendar_source' => 'Új naptár forrás létrehozása',\n\t'qa_edit_calendar_source' => 'Szerkesztés',\n\t'qa_client_management' => 'Ügyfelek kezelése',\n\t'qa_client_management_settings' => 'Ügyfelek kezelése beállítások',\n\t'qa_country' => 'Ország',\n\t'qa_client_status' => 'Ügyfél állapota',\n\t'qa_clients' => 'Ügyfelek',\n\t'qa_client_statuses' => 'Ügyfél állapotai',\n\t'qa_currencies' => 'Pénznemek',\n\t'qa_main_currency' => 'Elsődleges pénznem',\n\t'qa_documents' => 'Dokumentumok',\n\t'qa_file' => 'Fájl',\n\t'qa_income_source' => 'Bevételi forrás',\n\t'qa_income_sources' => 'Bevételi források',\n\t'qa_fee_percent' => 'Díj százalék',\n\t'qa_note_text' => 'Megjegyzés szöveg',\n\t'qa_client' => 'Ügyfél',\n\t'qa_start_date' => 'Kezdés dátuma',\n\t'qa_budget' => 'Költségvetés',\n\t'qa_project_status' => 'Projekt állapota',\n\t'qa_project_statuses' => 'Projekt állapotai',\n\t'qa_transactions' => 'Tranzakciók',\n\t'qa_transaction_types' => 'Tranzakció típusok',\n\t'qa_transaction_type' => 'Tranzakció típus',\n\t'qa_transaction_date' => 'Tranzakció dátum',\n\t'qa_file_contains_header_row' => 'Tartalmaz a fájl fejléc sort?',\n\t'qa_import_data' => 'Adatok importálása',\n\t'qa_imported_rows_to_table' => ':rows sor importálva a :table táblába',\n\t'qa_integer_float_placeholder' => 'Válasszon egy integer/float mezőt.',\n\t'qa_change_notifications_field_1_label' => 'Email értesítő küldése felhasználónak',\n\t'qa_change_notifications_field_2_label' => 'Amikor belép a CRUD',\n\t'qa_select_users_placeholder' => 'Válasszon ki egy felhasználót',\n\t'qa_when_crud' => 'Amikor CRUD',\n\t'qa_action_model' => 'Tevékenység model',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/hu/validation.php",
    "content": "<?php\nreturn [\n\n    'accepted' => 'A(z) :attribute kötelező elfogadni.',\n    'active_url' => 'A(z) :attribute nem érvényes URL.',\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'egyedi-uzenet',\n        ],\n    ],\n    'after' => 'A(z) :attribute dátumának később kell lennie, mint :date.',\n    'alpha' => 'A(z) :attribute csak betűket tartalmazhat.',\n    'alpha_dash' => 'A(z) :attribute csak betűket, számokat és  kötőjelet tartalmazhat.',\n    'alpha_num' => 'A(z) :attribute csak betűket és számokat tartalmazhat.',\n    'array' => 'A(z) :attribute -nak tömbnek kell lennie.',\n    'before' => 'A(z) :attribute dátumának korábban kell lennie, mint :date.',\n    'between' => [\n        'numeric' => 'A(z) :attribute -nak a kettő között kell lennie: :min és :max.',\n        'file' => 'A(z) :attribute -nak a kettő között kell lennie: :min és :max kilóbájt.',\n        'string' => 'A(z) :attribute -nak a kettő között kell lennie: :min és :max karakter.',\n        'array' => 'A(z) :attribute -nak a kettő között kell lennie: :min és :max darab.',\n    ],\n    'boolean' => 'A(z) :attribute mezőnek igaznak vagy hamisnak kell lennie.',\n    'confirmed' => 'A(z) :attribute megerősítése nem egyezik.',\n    'date' => 'A(z) :attribute nem érvényes dátum.',\n    'date_format' => 'A(z) :attribute formátuma nem egyezik ezzel: :format.',\n    'different' => 'A(z) :attribute -nak és a(z) :other -nak különböznie kell.',\n    'digits' => 'A(z) :attribute -nak :digits számjegyből kell állnia.',\n    'digits_between' => 'A(z) :attribute -nak a kettő között kell lennie: :min és :max számjegy.',\n    'dimensions' => 'A(z) :attribute -nak érvénytelen képméretei vannak.',\n    'distinct' => 'A(z) :attribute -nak duplikált értéke van.',\n    'email' => 'A(z) :attribute -nak érvényes email címnek kell lennie.',\n    'exists' => 'A kiválasztott :attribute érvénytelen.',\n    'file' => 'A(z) :attribute -nak fájlnak kell lennie.',\n    'filled' => 'A(z) :attribute mező kötelező.',\n    'image' => 'A(z) :attribute -nak képnek kell lennie.',\n    'in' => 'A kiválasztott :attribute érvénytelen.',\n    'in_array' => 'A(z) :attribute mező nem létezik az :other -ben.',\n    'integer' => 'A(z) :attribute -nak integernek kell lennie.',\n    'ip' => 'A(z) :attribute -nak IP címnek kell lennie.',\n    'json' => 'A(z) :attribute -nak JSON stringnek kell lennie.',\n    'max' => [\n        'numeric' => 'A(z) :attribute nem lehet nagyobb, mint :max.',\n        'file' => 'A(z) :attribute nem lehet nagyobb, mint :max kilóbájt.',\n        'string' => 'A(z) :attribute nem lehet nagyobb, mint :max karakter.',\n        'array' => 'A(z) :attribute nem lehet nagyobb, mint :max. elem.',\n    ],\n    'mimes' => 'A(z) :attribute -nak az alábbi fájltípusok jók: values.',\n    'min' => [\n        'numeric' => 'A(z) :attribute -nak legalább ennyinek kell lennie: min.',\n        'file' => 'A(z) :attribute -nak legalább ennyinek kell lennie: min kilóbájt.',\n        'string' => 'A(z) :attribute -nak legalább ennyinek kell lennie: min karakter.',\n        'array' => 'A(z) :attribute -nak legalább ennyinek kell lennie: min elem.',\n    ],\n    'not_in' => 'A kiválasztott :attribute érvénytelen.',\n    'numeric' => 'A(z) :attribute -nak számnak kell lennie.',\n    'present' => 'A(z) :attribute mezőre szükség van.',\n    'regex' => 'A(z) :attribute formátuma érvénytelen.',\n    'required' => 'A(z) :attribute mező kötelező.',\n    'required_if' => 'A(z) :attribute mező kötelező, amikor a(z) :other értéke :value.',\n    'required_unless' => 'A(z) :attribute -nak mező kötelező, kivéve ha a(z) :other értéke :values.',\n    'required_with' => 'A(z) :attribute -nak mező kötelező, amikor :values létezik.',\n    'required_with_all' => 'A(z) :attribute -nak mező kötelező, amikor :values létezik.',\n    'required_without' => 'A(z) :attribute -nak mező kötelező, amikor :values nem létezik.',\n    'required_without_all' => 'A(z) :attribute -nak mező kötelező, amikor egyik :values sem létezik.',\n    'same' => 'A(z) :attribute és a(z) :other egyezniük kell.',\n    'size' => [\n        'numeric' => 'A(z) :attribute -nak ekkorának kell lennie: :size.',\n        'file' => 'A(z) :attribute -nak :size kilóbájtnak kell lennie.',\n        'string' => 'A(z) :attribute -nak :size karakterből kell állnia.',\n        'array' => 'A(z) :attribute -nak :size eleme lehet.',\n    ],\n    'string' => 'A(z) :attribute -nak stringnek kell lennie.',\n    'timezone' => 'A(z) :attribute -nak érvényes zónának kell lennie.',\n    'unique' => 'A(z) :attribute már foglalt.',\n    'url' => 'A(z) :attribute formátuma érvénytelen.',\n\n];"
  },
  {
    "path": "resources/lang/id/auth.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/id/pagination.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/id/passwords.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/id/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_create' => 'Buat',\n\t'qa_save' => 'Simpan',\n\t'qa_edit' => 'Edit',\n\t'qa_view' => 'Lihat',\n\t'qa_update' => 'Update',\n\t'qa_list' => 'Daftar',\n\t'qa_no_entries_in_table' => 'Tidak ada data di tabel',\n\t'qa_custom_controller_index' => 'Controller index yang sesuai kebutuhan Anda.',\n\t'qa_logout' => 'Keluar',\n\t'qa_add_new' => 'Tambahkan yang baru',\n\t'qa_are_you_sure' => 'Anda yakin?',\n\t'qa_back_to_list' => 'Kembali ke daftar',\n\t'qa_dashboard' => 'Dashboard',\n\t'qa_delete' => 'Hapus',\n\t'qa_delete_selected' => 'Hapus terpilih',\n\t'qa_category' => 'Kategori',\n\t'qa_categories' => 'Kategori',\n\t'qa_sample_category' => 'Contoh Kategori',\n\t'qa_questions' => 'Pertanyaan',\n\t'qa_question' => 'Pertanyaan',\n\t'qa_answer' => 'Jawaban',\n\t'qa_sample_question' => 'Contoh Pertanyaan',\n\t'qa_sample_answer' => 'Contoh Jawaban',\n\t'qa_faq_management' => 'Manajemen  FAQ',\n\t'qa_administrator_can_create_other_users' => 'Administrator (bisa membuat account user lain)',\n\t'qa_simple_user' => 'Pengguna Biasa',\n\t'qa_title' => 'Judul',\n\t'qa_roles' => 'Peranan',\n\t'qa_role' => 'Peran',\n\t'qa_user_management' => 'Manajemen Pengguna',\n\t'qa_users' => 'Daftar Pengguna',\n\t'qa_user' => 'Pengguna',\n\t'qa_name' => 'Nama',\n\t'qa_email' => 'Email',\n\t'qa_password' => 'Kata Sandi',\n\t'qa_remember_token' => 'Token Pengingat',\n\t'qa_permissions' => 'Izin',\n\t'qa_user_actions' => 'Aksi Pengguna',\n\t'qa_action' => 'Aksi',\n\t'qa_action_model' => 'Model Aksi',\n\t'qa_action_id' => 'Id Aksi',\n\t'qa_time' => 'Waktu',\n\t'qa_campaign' => 'Kampanye',\n\t'qa_campaigns' => 'Daftar Kampanye',\n\t'qa_description' => 'Deskripsi',\n\t'qa_valid_from' => 'Berlaku dari',\n\t'qa_valid_to' => 'Berlaku sampai',\n\t'qa_discount_amount' => 'Jumlah Diskon',\n\t'qa_discount_percent' => 'Persentasi Diskon',\n\t'qa_coupons_amount' => 'Jumlah Kupon',\n\t'qa_coupons' => 'Jupon',\n\t'qa_code' => 'Kode',\n\t'qa_coupon_management' => 'manajemen Kupon',\n\t'qa_time_management' => 'Manajemen Waktu',\n\t'qa_projects' => 'Daftar Kegiatan',\n\t'qa_reports' => 'Laporan',\n\t'qa_time_entries' => 'Input Waktu',\n\t'qa_work_type' => 'Tipe Pekerjaan',\n\t'qa_work_types' => 'Tipe-tipe Pekerjaan',\n\t'qa_project' => 'Kegiatan',\n\t'qa_start_time' => 'Waktu Mulai',\n\t'qa_end_time' => 'Waktu Selesai',\n\t'qa_expense_category' => 'Kategori Pengeluaran',\n\t'qa_restore' => 'Mengembalikan',\n\t'qa_permadel' => 'Hapus Selamanya',\n\t'qa_all' => 'Semua',\n\t'qa_trash' => 'Sampah',\n\t'qa_redeem_time' => 'Tukarkan waktu',\n\t'qa_expense_categories' => 'Kategori Biaya',\n\t'qa_expense_management' => 'Manajemen biaya',\n\t'qa_expenses' => 'Beban',\n\t'qa_expense' => 'Biaya',\n\t'qa_entry_date' => 'Tanggal masuk',\n\t'qa_amount' => 'Jumlah',\n\t'qa_income_categories' => 'Kategori pendapatan',\n\t'qa_monthly_report' => 'Laporan bulanan',\n\t'qa_companies' => 'Perusahaan',\n\t'qa_company_name' => 'Nama Perusahaan',\n\t'qa_address' => 'Alamat',\n\t'qa_website' => 'Website',\n\t'qa_contact_management' => 'Manajemen kontak',\n\t'qa_contacts' => 'Kontak',\n\t'qa_company' => 'Perusahaan',\n\t'qa_first_name' => 'Nama Depan',\n\t'qa_last_name' => 'Nama Belakang',\n\t'qa_phone' => 'Telepon',\n\t'qa_phone1' => 'Telepon 1',\n\t'qa_phone2' => 'Telepon 2',\n\t'qa_skype' => 'Skype',\n\t'qa_photo' => 'Foto',\n\t'qa_category_name' => 'Nama kategori',\n\t'qa_product_management' => 'Manajemen Produk',\n\t'qa_products' => 'Produk',\n\t'qa_product_name' => 'Nama Produk',\n\t'qa_price' => 'Harga',\n\t'qa_tags' => 'Tag',\n\t'qa_tag' => 'Menandai',\n\t'qa_photo1' => 'Foto1',\n\t'qa_photo2' => 'Foto2',\n\t'qa_photo3' => 'Foto3',\n\t'qa_calendar' => 'Kalendar',\n\t'qa_statuses' => 'Status',\n\t'qa_task_management' => 'Manajemen Tugas',\n\t'qa_tasks' => 'Tugas',\n\t'qa_status' => 'Status',\n\t'qa_attachment' => 'Lampiran',\n\t'qa_due_date' => 'Batas Tanggal  Terahir',\n\t'qa_assigned_to' => 'Ditugaskan untuk',\n\t'qa_assets' => 'Aktiva',\n\t'qa_asset' => 'Aset',\n\t'qa_serial_number' => 'Nomor seri',\n\t'qa_location' => 'Lokasi',\n\t'qa_locations' => 'Lokasi',\n\t'qa_assigned_user' => 'Ditugaskan (pengguna)',\n\t'qa_notes' => 'Catatan',\n\t'qa_assets_history' => 'History aset',\n\t'qa_assets_management' => 'Pengelolaan aset',\n\t'qa_slug' => 'Slug',\n\t'qa_content_management' => 'Manajemen konten',\n\t'qa_text' => 'Teks',\n\t'qa_excerpt' => 'Kutipan',\n\t'qa_featured_image' => 'Gambar unggulan',\n\t'qa_pages' => 'Halaman',\n\t'qa_show' => 'Tampil',\n\t'qa_chart_type' => 'Jenis bagan',\n\t'qa_create_new_report' => 'Buat laporan baru',\n\t'qa_no_reports_yet' => 'Belum ada laporan.',\n\t'qa_created_at' => 'Dibuat pada',\n\t'qa_updated_at' => 'Diperbarui pada',\n\t'qa_deleted_at' => 'Dihapus pada',\n\t'qa_reports_x_axis_field' => 'Sumbu X - pilih salah satu bidang tanggal / waktu',\n\t'qa_reports_y_axis_field' => 'Sumbu Y - pilih salah satu bidang nomor',\n\t'qa_select_crud_placeholder' => 'Silakan pilih salah satu CRUDs Anda',\n\t'qa_select_dt_placeholder' => 'Pilih salah satu field tanggal / waktu',\n\t'qa_aggregate_function_use' => 'Fungsi agregat untuk digunakan',\n\t'qa_integer_float_placeholder' => 'Silahkan pilih salah satu field integer / float',\n\t'qa_change_notifications_field_1_label' => 'Kirim pemberitahuan email ke User',\n\t'qa_change_notifications_field_2_label' => 'Saat masuk di CRUD',\n\t'qa_select_users_placeholder' => 'Silahkan pilih salah satu User anda',\n\t'qa_is_created' => 'dibuat',\n\t'qa_is_updated' => 'diperbarui',\n\t'qa_is_deleted' => 'dihapus',\n\t'qa_notifications' => 'Pemberitahuan',\n\t'qa_notify_user' => 'Beritahu Pengguna',\n\t'qa_when_crud' => 'Saat CRUD',\n\t'qa_create_new_notification' => 'Buat Pemberitahuan baru',\n\t'qa_stripe_transactions' => 'Transaksi Stripe',\n\t'qa_upgrade_to_premium' => 'Tingkatkan ke Premium',\n\t'qa_messages' => 'Pesan',\n\t'qa_you_have_no_messages' => 'Anda tidak memiliki pesan',\n\t'qa_all_messages' => 'Semua pesan',\n\t'qa_new_message' => 'Pesan baru',\n\t'qa_outbox' => 'Kotak keluar',\n\t'qa_inbox' => 'Kotak masuk',\n\t'qa_recipient' => 'Penerima',\n\t'qa_subject' => 'Subjek',\n\t'qa_message' => 'Pesan',\n\t'qa_send' => 'Kirim',\n\t'qa_reply' => 'Balas',\n\t'qa_import_data' => 'Import Data',\n\t'qa_csv' => 'CSV',\n\t'qa_print' => 'Cetak',\n\t'qa_excel' => 'Excel',\n\t'qa_copy' => 'Copy',\n\t'qa_colvis' => 'Visibilitas Kolom',\n\t'qa_pdf' => 'PDF',\n\t'qa_reset_password' => 'Reset kata kunci',\n\t'qa_email_greet' => 'Hai',\n\t'qa_confirm_password' => 'konfirmasi kata kunci',\n\t'qa_please_select' => 'Silahkan pilih',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/id/validation.php",
    "content": "<?php\nreturn [\n\n    'active_url' => ' :attribute bukan URL yang berlaku.',\n    'alpha' => ':attribute Hanya Berisi Huruf',\n    'alpha_dash' => 'Hanya Berisi Huruf, Nomer dan symbol',\n    'array' => ':attribute  ini harus berupa \"array\"',\n    'accepted' => ':attribute harus diterima.',\n    'after' => ':attribute harus tanggal setelah :date.',\n    'alpha_num' => ':attribute hanya boleh berisi huruf dan angka.',\n    'before' => ':attribute harus tanggal sebelum :date.',\n    'between' => [\n        'numeric' => ':attribute harus diantara :min dan :max.',\n        'file' => ':attribute harus diantara :min dan :max kilobytes.',\n        'string' => ':attribute harus diantara :min dan :max characters.',\n        'array' => ':attribute harus diantara :min dan :max buah.',\n    ],\n    'boolean' => ':attribute field harus bernilai \"true\" atau \"false\".',\n    'confirmed' => ':konfirmasi atribut tidak cocok.',\n    'date' => ':atribut bukan tanggal yang valid',\n    'different' => ':atribut dan: lainnya harus berbeda.',\n\n];"
  },
  {
    "path": "resources/lang/lt/auth.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/lt/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => 'Ankstesnis',\n    'next' => 'Sekantis',\n\n];"
  },
  {
    "path": "resources/lang/lt/passwords.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/lt/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_save' => 'Išsaugoti',\n\t'qa_update' => 'Atnaujinti',\n\t'qa_list' => 'Sąrašas',\n\t'qa_no_entries_in_table' => 'Įrašų nėra.',\n\t'qa_create' => 'Sukurti',\n\t'qa_edit' => 'Redaguoti',\n\t'qa_view' => 'Peržiūrėti',\n\t'qa_custom_controller_index' => 'Papildomo Controller\\'io puslapis.',\n\t'qa_logout' => 'Atsijungti',\n\t'qa_add_new' => 'Pridėti naują',\n\t'qa_are_you_sure' => 'Ar esate tikri?',\n\t'qa_back_to_list' => 'Grįžti į sąrašą',\n\t'qa_dashboard' => 'Pagrindinis',\n\t'qa_delete' => 'Trinti',\n\t'qa_restore' => 'Atstatyti',\n\t'qa_permadel' => 'Ištrinti galutinai',\n\t'qa_all' => 'Rodyti viską',\n\t'qa_trash' => 'Rodyti ištrintus',\n\t'qa_delete_selected' => 'Trinti pažymėtus',\n\t'qa_category' => 'Kategorija',\n\t'qa_categories' => 'Kategorijos',\n\t'qa_sample_category' => 'Pavyzdinė kategorija',\n\t'qa_time' => 'Laikas',\n\t'qa_questions' => 'Klausimai',\n\t'qa_question' => 'Klausimas',\n\t'qa_answer' => 'Atsakymas',\n\t'qa_sample_question' => 'Pavyzdinis klausimas',\n\t'qa_sample_answer' => 'Pavyzdinis atsakymas',\n\t'qa_faq_management' => 'DUK valdymas',\n\t'qa_administrator_can_create_other_users' => 'Administratorius (gali kurti kitus vartotojus)',\n\t'qa_title' => 'Pavadinimas',\n\t'qa_roles' => 'Rolės',\n\t'qa_role' => 'Rolė',\n\t'qa_user_management' => 'Vartotojų valdymas',\n\t'qa_users' => 'Vartotojai',\n\t'qa_user' => 'Vartotojas',\n\t'qa_name' => 'Vardas',\n\t'qa_email' => 'El. Paštas',\n\t'qa_password' => 'Slaptažodis',\n\t'qa_user_actions' => 'Vartotojų veiksmai',\n\t'qa_campaign' => 'Kampanija',\n\t'qa_campaigns' => 'Kampanijos',\n\t'qa_description' => 'Aprašymas',\n\t'qa_valid_from' => 'Galioja nuo',\n\t'qa_valid_to' => 'Galioja iki',\n\t'qa_code' => 'Kodas',\n\t'qa_time_management' => 'Laiko valdymas',\n\t'qa_projects' => 'Projektai',\n\t'qa_time_entries' => 'Laiko įrašai',\n\t'qa_project' => 'Projektas',\n\t'qa_expenses' => 'Išlaidos',\n\t'qa_address' => 'Adresas',\n\t'qa_contact_management' => 'Kontaktų valdymas',\n\t'qa_contacts' => 'Kontaktai',\n\t'qa_first_name' => 'Vardas',\n\t'qa_last_name' => 'Pavardė',\n\t'qa_product_management' => 'Produktų valdymas',\n\t'qa_products' => 'Produktai',\n\t'qa_price' => 'Kaina',\n\t'qa_tags' => 'Žymos',\n\t'qa_tag' => 'Žyma',\n\t'qa_calendar' => 'Kalendorius',\n\t'qa_statuses' => 'Būsenos',\n\t'qa_task_management' => 'Užduočių valdymas',\n\t'qa_tasks' => 'Užduotys',\n\t'qa_status' => 'Būsena',\n\t'qa_text' => 'Tekstas',\n\t'qa_excerpt' => 'Ištrauka',\n\t'qa_pages' => 'Puslapiai',\n\t'qa_simple_user' => 'Paprastas vartotojas',\n\t'qa_permissions' => 'Leidimai',\n\t'qa_discount_amount' => 'Nuolaidos suma',\n\t'qa_discount_percent' => 'Nuolaida procentais',\n\t'qa_coupons_amount' => 'Kuponų kiekis',\n\t'qa_coupons' => 'Kuponai',\n\t'qa_coupon_management' => 'Kuponų valdymas',\n\t'qa_reports' => 'Ataskaitos',\n\t'qa_start_time' => 'Pradžios laikas',\n\t'qa_end_time' => 'Pabaigos laikas',\n\t'qa_expense_category' => 'Išlaidų kategorija',\n\t'qa_expense_categories' => 'Išlaidų kategorijos',\n\t'qa_expense_management' => 'Išlaidų valdymas',\n\t'qa_expense' => 'Išlaidos',\n\t'qa_companies' => 'Įmonės',\n\t'qa_company_name' => 'Įmonės pavadinimas',\n\t'qa_website' => 'Interneto svetainė',\n\t'qa_company' => 'Įmonė',\n\t'qa_phone' => 'Telefonas',\n\t'qa_photo' => 'Nuotrauka (maks. 8 MB)',\n\t'qa_category_name' => 'Kategorijos pavadinimas',\n\t'qa_product_name' => 'Produkto pavadinimas',\n\t'qa_remember_token' => 'Prisiminti',\n\t'qa_phone1' => 'Telefonas nr. 1',\n\t'qa_phone2' => 'Telefono nr. 2',\n\t'qa_slug' => 'Url',\n\t'qa_current_password' => 'Dabartinis slaptažodis',\n\t'qa_new_password' => 'Naujas slaptažodis',\n\t'qa_password_confirm' => 'Pakartoti naują slaptažodį',\n\t'qa_remember_me' => 'Prisiminti mane',\n\t'qa_login' => 'Prisijungti',\n\t'qa_print' => 'Spausdinti',\n\t'qa_copy' => 'Kopijuoti',\n\t'qa_register' => 'Registruotis',\n\t'qa_registration' => 'Registracija',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/lt/validation.php",
    "content": "<?php\nreturn [\n\n    'active_url' => ':attribute netinkamas URL.',\n    'after' => 'Laukas :attribute turi būti data po :date.',\n    'alpha' => 'Laukas :attribute gali būti sudarytas tik iš raidžių.',\n    'alpha_dash' => 'Laukas :attribute gali būti sudarytas tik iš raidžių, skaičių ir brūkšnių.',\n    'alpha_num' => 'Laukas :attribute gali būti sudarytas tik iš raidžių ir skaičių.',\n    'array' => 'Laukas :attribute turi būti masyvas.',\n    'before' => 'Laukas :attribute turi būti data prieš :date.',\n    'between' => [\n        'numeric' => 'Lauko :attribute reikšmė turi būti tarp :min ir :max.',\n    ],\n\n];"
  },
  {
    "path": "resources/lang/nl/auth.php",
    "content": "<?php\nreturn [\n\n    'failed' => 'Deze inloggegevens zijn ons onbekend.',\n    'throttle' => 'Te veel inlogpogingen. Probeer opnieuw in :seconds seconden.',\n\n];"
  },
  {
    "path": "resources/lang/nl/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => '« Vorige',\n    'next' => 'Volgende »',\n\n];"
  },
  {
    "path": "resources/lang/nl/passwords.php",
    "content": "<?php\nreturn [\n\n    'password' => 'Paswoorden moeten minstens 6 tekens lang zijn en overeen stemmen.',\n    'reset' => 'Je paswoord werd opnieuw ingesteld.',\n    'sent' => 'We hebben je een paswoord-reset link gemaild!',\n    'token' => 'Dit paswoord reset token is niet geldig.',\n    'user' => 'We vinden geen gebruiker met dat e-mailadres.',\n\n];"
  },
  {
    "path": "resources/lang/nl/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_create' => 'Toevoegen',\n\t'qa_save' => 'Opslaan',\n\t'qa_edit' => 'Bewerken',\n\t'qa_view' => 'Bekijken',\n\t'qa_update' => 'Bijwerken',\n\t'qa_list' => 'Lijst',\n\t'qa_no_entries_in_table' => 'Geen inhoud gevonden',\n\t'qa_custom_controller_index' => 'Custom controller index.',\n\t'qa_logout' => 'Logout',\n\t'qa_add_new' => 'Toevoegen',\n\t'qa_are_you_sure' => 'Ben je zeker?',\n\t'qa_back_to_list' => 'Terug naar lijst',\n\t'qa_dashboard' => 'Boordtabel',\n\t'qa_delete' => 'Verwijderen',\n\t'qa_restore' => 'Herstellen',\n\t'qa_permadel' => 'Definitief verwijderen',\n\t'qa_all' => 'Alle',\n\t'qa_trash' => 'Prullenbak',\n\t'qa_delete_selected' => 'Geselecteerde verwijderen',\n\t'qa_category' => 'Categorie',\n\t'qa_categories' => 'Categoriën',\n\t'qa_questions' => 'Vragen',\n\t'qa_question' => 'Vraag',\n\t'qa_answer' => 'Antwoord',\n\t'qa_sample_question' => 'Demo vraag',\n\t'qa_sample_answer' => 'Demo antwoord',\n\t'qa_faq_management' => 'FAQ beheer',\n\t'qa_administrator_can_create_other_users' => 'Beheerder (kan gebruikers toevoegen)',\n\t'qa_simple_user' => 'Gewone gebruiker',\n\t'qa_title' => 'Titel',\n\t'qa_roles' => 'Rollen',\n\t'qa_role' => 'Rol',\n\t'qa_user_management' => 'Gebruikersbeheer',\n\t'qa_users' => 'Gebruikers',\n\t'qa_user' => 'Gebruiker',\n\t'qa_name' => 'Naam',\n\t'qa_email' => 'E-mail',\n\t'qa_password' => 'Paswoord',\n\t'qa_remember_token' => 'Herinneringstoken',\n\t'qa_permissions' => 'Toelatingen',\n\t'qa_user_actions' => 'Gebruikeracties',\n\t'qa_action' => 'Actie',\n\t'qa_action_model' => 'Actie model',\n\t'qa_action_id' => 'Actie id',\n\t'qa_time' => 'Tijdstip',\n\t'qa_campaign' => 'Campagne',\n\t'qa_campaigns' => 'Campagnes',\n\t'qa_description' => 'Omschrijving',\n\t'qa_valid_from' => 'Geldig van',\n\t'qa_valid_to' => 'Geldig tot',\n\t'qa_discount_amount' => 'Bedrag korting',\n\t'qa_discount_percent' => 'Percentage korting',\n\t'qa_coupons_amount' => 'Bedrag coupon',\n\t'qa_coupons' => 'Coupons',\n\t'qa_code' => 'Code',\n\t'qa_redeem_time' => 'Inlevertijd',\n\t'qa_coupon_management' => 'Couponbeheer',\n\t'qa_time_management' => 'Tijdmanagement',\n\t'qa_projects' => 'Projecten',\n\t'qa_reports' => 'Rapporten',\n\t'qa_sample_category' => 'Demo categorie',\n\t'qa_work_type' => 'Soort werk',\n\t'qa_work_types' => 'Soorten werk',\n\t'qa_project' => 'Project',\n\t'qa_start_time' => 'Starttijd',\n\t'qa_end_time' => 'Eindtijd',\n\t'qa_expense_category' => 'Uitgave categorie',\n\t'qa_expense_categories' => 'Uitgave categoriën',\n\t'qa_expense_management' => 'Uitgavebeheer',\n\t'qa_expenses' => 'Uitgaven',\n\t'qa_expense' => 'Uitgave',\n\t'qa_amount' => 'Bedrag',\n\t'qa_income_categories' => 'Inkomst categorieën',\n\t'qa_monthly_report' => 'Maandelijks rapport',\n\t'qa_companies' => 'Bedrijven',\n\t'qa_company_name' => 'Naam bedrijf',\n\t'qa_address' => 'Adres',\n\t'qa_website' => 'Website',\n\t'qa_contact_management' => 'Contactbeheer',\n\t'qa_contacts' => 'Contacten',\n\t'qa_company' => 'Bedrijf',\n\t'qa_first_name' => 'Voornaam',\n\t'qa_last_name' => 'Familienaam',\n\t'qa_phone' => 'Telefoon',\n\t'qa_phone1' => 'Telefoon 1',\n\t'qa_phone2' => 'Teelefoon 2',\n\t'qa_skype' => 'Skype',\n\t'qa_photo' => 'Foto (max. 8mb)',\n\t'qa_category_name' => 'Categorienaam',\n\t'qa_product_management' => 'Productbeheer',\n\t'qa_products' => 'Producten',\n\t'qa_product_name' => 'Productnaam',\n\t'qa_price' => 'Prijs',\n\t'qa_tags' => 'Tags',\n\t'qa_tag' => 'Tag',\n\t'qa_photo1' => 'Foto1',\n\t'qa_photo2' => 'Foto2',\n\t'qa_photo3' => 'Foto3',\n\t'qa_calendar' => 'Kalender',\n\t'qa_statuses' => 'Statuten',\n\t'qa_task_management' => 'Takenbeheer',\n\t'qa_tasks' => 'Taken',\n\t'qa_status' => 'Statuut',\n\t'qa_attachment' => 'Bijlage',\n\t'qa_assigned_to' => 'Toegewezen aan',\n\t'qa_serial_number' => 'Serienummer',\n\t'qa_location' => 'Plaats',\n\t'qa_locations' => 'Plaatsen',\n\t'qa_assigned_user' => 'Toegewezen (gebruiker)',\n\t'qa_notes' => 'Notities',\n\t'qa_please_select' => 'Kies',\n\t'qa_register' => 'Registreer',\n\t'qa_registration' => 'Registratie',\n\t'qa_not_approved_title' => 'Je bent niet toegelaten.',\n\t'qa_not_approved_p' => 'Ja acccount is nog niet goedgekeurd door een administrator. Even geduld en probeer later opnieuw.',\n\t'qa_there_were_problems_with_input' => 'Er waren problemen met de input',\n\t'qa_whoops' => 'Whoops!',\n\t'qa_file_contains_header_row' => 'Bevat het bestand een titelrij ?',\n\t'qa_csvImport' => 'CSV import',\n\t'qa_csv_file_to_import' => 'te importeren CSV bestand',\n\t'qa_parse_csv' => 'CSV bestand parsen',\n\t'qa_import_data' => 'Gegevens importeren',\n\t'qa_imported_rows_to_table' => ':row rijen geïmporteerd in tabel :table',\n\t'qa_time_entries' => 'Tijdingaves',\n\t'qa_entry_date' => 'Ingavedatum',\n\t'qa_colvis' => 'Kolom zichtbaarheid',\n\t'qa_pdf' => 'PDF',\n\t'qa_create_new_calendar_source' => 'Nieuwe kalenderbron',\n\t'qa_edit_calendar_source' => 'Kalenderbronnen bewerken',\n\t'qa_client_management' => 'Klantbeheer',\n\t'qa_client_management_settings' => 'Klantbeheer settings',\n\t'qa_country' => 'Land',\n\t'qa_client_status' => 'Klant status',\n\t'qa_clients' => 'Klanten',\n\t'qa_client_statuses' => 'Klant statuses',\n\t'qa_currencies' => 'Munteenheden',\n\t'qa_main_currency' => 'Hoofdmunteenheid',\n\t'qa_documents' => 'Documenten',\n\t'qa_file' => 'Bestand',\n\t'qa_income_source' => 'Inkomstbron',\n\t'qa_income_sources' => 'Inkomstbronnen',\n\t'qa_fee_percent' => 'Fee percent',\n\t'qa_note_text' => 'Nota tekst',\n\t'qa_client' => 'Klant',\n\t'qa_start_date' => 'Startdatum',\n\t'qa_budget' => 'Budget',\n\t'qa_project_status' => 'Project status',\n\t'qa_project_statuses' => 'Project statuses',\n\t'qa_transactions' => 'Transacties',\n\t'qa_transaction_types' => 'Transactietypes',\n\t'qa_transaction_type' => 'Transactietype',\n\t'qa_transaction_date' => 'Transactiedatum',\n\t'qa_currency' => 'Munteenheid',\n\t'qa_current_password' => 'Huidig paswoord',\n\t'qa_new_password' => 'Nieuw paswoord',\n\t'qa_password_confirm' => 'Bevestiging nieuw paswoord',\n\t'qa_dashboard_text' => 'Je bent ingelogd !',\n\t'qa_forgot_password' => 'Paswoord vergeten ?',\n\t'qa_remember_me' => 'Herinner mij',\n\t'qa_login' => 'Login',\n\t'qa_change_password' => 'Paswoord wijzigen',\n\t'qa_csv' => 'CSV',\n\t'qa_print' => 'Afdrukken',\n\t'qa_excel' => 'Excel',\n\t'qa_copy' => 'Kopiëren',\n\t'qa_upgrade_to_premium' => 'Upgrade naar Premium.',\n\t'qa_messages' => 'Berichten',\n\t'qa_you_have_no_messages' => 'Je hebt geen berichten.',\n\t'qa_all_messages' => 'Alle berichten',\n\t'qa_new_message' => 'Nieuw bericht',\n\t'qa_outbox' => 'Outbox',\n\t'qa_inbox' => 'Inbox',\n\t'qa_recipient' => 'Bestemmeling',\n\t'qa_subject' => 'Onderwerp',\n\t'qa_message' => 'Bericht',\n\t'qa_send' => 'Verzend',\n\t'qa_reply' => 'Antwoord',\n\t'qa_calendar_sources' => 'Kalenderbronnen',\n\t'qa_new_calendar_source' => 'Een nieuwe kalenderbron maken',\n\t'qa_crud_title' => 'Crud titel',\n\t'qa_crud_date_field' => 'Crud datumveld',\n\t'qa_prefix' => 'Prefix',\n\t'qa_label_field' => 'Label veld',\n\t'qa_suffix' => 'Suffix',\n\t'qa_no_calendar_sources' => 'Geen kalenderbronnen beschikbaar',\n\t'qa_crud_event_field' => 'Event label veld',\n\t'qa_due_date' => 'Vervaldatum',\n\t'qa_assets' => 'Activa',\n\t'qa_asset' => 'Activa',\n\t'qa_assets_history' => 'Activa geschiedenis',\n\t'qa_assets_management' => 'Activabeheer',\n\t'qa_slug' => 'Slug',\n\t'qa_content_management' => 'Inhoudbeheer',\n\t'qa_text' => 'Tekst',\n\t'qa_excerpt' => 'Extract',\n\t'qa_featured_image' => 'Feature afbeelding',\n\t'qa_pages' => 'Pagina\\'s',\n\t'qa_axis' => 'As',\n\t'qa_show' => 'Toon',\n\t'qa_group_by' => 'Groepeer op',\n\t'qa_chart_type' => 'Grafiektype',\n\t'qa_create_new_report' => 'Maak nieuw rapport',\n\t'qa_no_reports_yet' => 'Nog geen rapporten',\n\t'qa_created_at' => 'Gemaakt op',\n\t'qa_updated_at' => 'Geüpdate op',\n\t'qa_deleted_at' => 'Verwijderd op',\n\t'qa_reports_x_axis_field' => 'X-as - kies één van de datum/tijd velden',\n\t'qa_reports_y_axis_field' => 'Y-as - kies één van de cijfervelden',\n\t'qa_select_crud_placeholder' => 'Kies één van je CRUD\\'s',\n\t'qa_select_dt_placeholder' => 'Kies één van de datum/tijd velden',\n\t'qa_aggregate_function_use' => 'Te gebruiken functie ',\n\t'qa_x_axis_group_by' => 'X-as groepeer op',\n\t'qa_x_axis_field' => 'Y-as veld (datum/tijd)',\n\t'qa_y_axis_field' => 'Y-as veld',\n\t'qa_integer_float_placeholder' => 'Kies één van de integer/float velden',\n\t'qa_change_notifications_field_1_label' => 'Zend een e-mail naar Gebruiker',\n\t'qa_change_notifications_field_2_label' => 'Bij een CRUD entry',\n\t'qa_select_users_placeholder' => 'Kies één van je Gebruikers',\n\t'qa_is_created' => 'werd aangemaakt',\n\t'qa_is_updated' => 'werd geüpdate',\n\t'qa_is_deleted' => 'werd verwijderd',\n\t'qa_notifications' => 'Verwittigingen',\n\t'qa_notify_user' => 'Verwittig Gebruiker',\n\t'qa_when_crud' => 'wanneer CRUD',\n\t'qa_create_new_notification' => 'Maak een nieuwe verwittiging aan',\n\t'qa_stripe_transactions' => 'Stripe transacties',\n\t'qa_reset_password' => 'Wachtwoord reset',\n\t'qa_confirm_password' => 'Bevestig wachtwoord',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/nl/validation.php",
    "content": "<?php\nreturn [\n\n    'accepted' => ':attribute moet aanvaard worden.',\n    'active_url' => ':attribute is geen geldige URL.',\n    'after' => ':attribute moet een datum zijn na :date',\n    'alpha' => ':attribute mag enkel letters bevatten.',\n    'alpha_dash' => ':attribute mag enkel letters, cijfers en koppeltekens bevatten.',\n    'alpha_num' => ':attribute mag enkel letters en cijfers bevatten.',\n    'array' => ':attribute moet een array zijn.',\n    'before' => ':attribute moet een datum voor :date zijn.',\n    'between' => [\n        'numeric' => ':attribute moet tussen :min en :max zijn.',\n        'file' => ':attribute moet tussen :min en :max kilobytes zijn.',\n        'string' => ':attribute moet tussen :min en :max tekens lang zijn.',\n        'array' => ':attribute moet tussen :min en :max voorwerpen bevatten',\n    ],\n    'boolean' => ':attribute moet true of false zijn.',\n    'confirmed' => ':attribute bevestiging stemt niet overeen.',\n    'date' => ':attribute is geen geldige datum',\n    'date_format' => ':attribute is geen :format formaat',\n    'different' => ':attribute en :other moeten verschillend zijn.',\n    'digits' => ':attribute moet :digits cijfers bevatten',\n    'digits_between' => ':attribute moet tussen :min en  :max cijfers lang zijn.',\n    'dimensions' => ':attribute heeft ongeldige afmetingen.',\n    'distinct' => ':attribute heeft een duplicaat waarde.',\n    'email' => ':attribute moet een geldig e-mailadres zijn.',\n    'exists' => 'De gekozen :attribute is ongeldig.',\n    'file' => ':attribute moet een bestand zijn.',\n    'filled' => ':attribute veld is vereist.',\n    'image' => ':attribute moet een afbeelding zijn.',\n    'in' => 'De gekozen :attribute is ongeldig.',\n    'in_array' => 'Het veld :attribute bestaat niet in :other',\n    'integer' => ':attribute moet een integer zijn.',\n    'ip' => ':attribute moet een geldig IP adres zijn',\n    'json' => ':attribute moet een geldige JSON string zijn.',\n    'max' => [\n        'numeric' => ':attribute mag niet groter zijn dan :max',\n        'file' => ':attribute mag niet groter zijn dan :max kilobytes.',\n        'string' => ':attribute mag niet meer dan :max tekens tellen.',\n        'array' => ':attribute mag niet meer dan :max items tellen',\n    ],\n    'mimes' => ':attribute moet een bestand zijn van het type: :values.',\n    'numeric' => ':attribute moet een cijfer zijn.',\n    'min' => [\n        'numeric' => ':attribute moet minstens :min zijn.',\n        'file' => ':attribute moet minstens :min kilobytes zijn.',\n        'string' => ':attribute moet minstens :min tekens bevatten.',\n        'array' => ':attribute moet minstens :min items bevatten.',\n    ],\n    'not_in' => 'Gekozen :attribute is ongeldig.',\n    'present' => 'Het :attribute veld moet aanwezig zijn.',\n    'regex' => 'Formaat van :attribute is ongeldig.',\n    'required' => ':attribute is vereist',\n    'required_if' => ':attribute is vereist wanneer :other gelijk is aan :value.',\n    'required_unless' => ':attribute is vereist tenzij :other behoort to :values.',\n    'required_with' => ':attribute is vereist wanneer :values aanwezig zijn.',\n    'required_with_all' => ':attribute is vereist wanneer :values aanwezig zijn.',\n    'required_without' => ':attribute is vereist wanneer :values niet aanwezig zijn.',\n    'required_without_all' => ':attribute is vereist wnneer geen enkel of :values aanwezig zijn.',\n    'same' => ':attribute en :other moeten overeenstemmen.',\n    'size' => [\n        'numeric' => ':attribute moet :size groot zijn.',\n        'file' => ':attribute moet :size kilobytes zwaar zijn',\n        'string' => ':attribute moet :size tekens lang zijn.',\n        'array' => ':attribute moet :size items bevatten.',\n    ],\n    'string' => ':attribute moet een sting zijn.',\n    'timezone' => ':attribute moet een geldige zone zijn.',\n    'unique' => ':attribute werd reeds genomen.',\n    'url' => 'Het formaat van :attribute is ongeldig.',\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'aangepast-bericht',\n        ],\n    ],\n\n];"
  },
  {
    "path": "resources/lang/no/auth.php",
    "content": "<?php\nreturn [\n\n    'failed' => 'Brukernavn eller passord stemmer ikke med våre data.',\n    'throttle' => 'For mange innloggingsforsøk. Prøv igjen om :seconds sekunder.',\n\n];"
  },
  {
    "path": "resources/lang/no/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => '« forrige',\n    'next' => 'Neste »',\n\n];"
  },
  {
    "path": "resources/lang/no/passwords.php",
    "content": "<?php\nreturn [\n\n    'password' => 'Passordet må være minst seks karakterer og samsvare med bekreftelsen',\n    'reset' => 'Ditt passord er nå satt!',\n    'sent' => 'Vi har sent deg en link til tilbakestilling av passord!',\n    'token' => 'Tilbakestill passord linken er ugyldig',\n    'user' => 'Vi kan ikke finne en bruker med den epostadressen',\n\n];"
  },
  {
    "path": "resources/lang/no/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_file_contains_header_row' => 'Inneholder fila overskrift rad?',\n\t'qa_csvImport' => 'CSV import',\n\t'qa_csv_file_to_import' => 'CSV fil til importering',\n\t'qa_parse_csv' => 'Analyser CSV',\n\t'qa_import_data' => 'Importer data',\n\t'qa_imported_rows_to_table' => 'Importerte :rows reader til :table tabellen',\n\t'qa_create' => 'Ny',\n\t'qa_save' => 'Lagre',\n\t'qa_edit' => 'Rediger',\n\t'qa_restore' => 'Hent tilbake',\n\t'qa_permadel' => 'Slett permanent',\n\t'qa_all' => 'Alle',\n\t'qa_trash' => 'Søppel',\n\t'qa_view' => 'Vis',\n\t'qa_update' => 'Oppdater',\n\t'qa_list' => 'Liste',\n\t'qa_no_entries_in_table' => 'Ingen elemeter i listen.',\n\t'qa_custom_controller_index' => 'Egendefinert kontroller index.',\n\t'qa_logout' => 'Logg ut',\n\t'qa_add_new' => 'Legg til ny',\n\t'qa_are_you_sure' => 'Er du sikker?',\n\t'qa_back_to_list' => 'Tilbake til listen',\n\t'qa_dashboard' => 'Dashbord',\n\t'qa_delete' => 'Slett',\n\t'qa_delete_selected' => 'Slett valgte',\n\t'qa_category' => 'Kategori',\n\t'qa_categories' => 'Kategorier',\n\t'qa_sample_category' => 'Eksempel kategori',\n\t'qa_questions' => 'Spørsmål',\n\t'qa_question' => 'Spørsmål',\n\t'qa_answer' => 'Svar',\n\t'qa_sample_question' => 'Eksempel spørsmål',\n\t'qa_sample_answer' => 'Eksempel svar',\n\t'qa_faq_management' => 'FAQ håndtering',\n\t'qa_administrator_can_create_other_users' => 'Administrator (kan opprette andre brukere)',\n\t'qa_simple_user' => 'Enkel bruker',\n\t'qa_title' => 'Tittel',\n\t'qa_roles' => 'Roller',\n\t'qa_role' => 'Rolle',\n\t'qa_user_management' => 'Bruker håndtering',\n\t'qa_users' => 'Brukere',\n\t'qa_user' => 'Bruker',\n\t'qa_name' => 'Navn',\n\t'qa_email' => 'Epost',\n\t'qa_password' => 'Passord',\n\t'qa_remember_token' => 'Husk-meg',\n\t'qa_permissions' => 'Rettigheter',\n\t'qa_user_actions' => 'Bruker aksjoner',\n\t'qa_action' => 'Aksjon',\n\t'qa_action_model' => 'Aksjons modell',\n\t'qa_action_id' => 'Aksjon id',\n\t'qa_time' => 'Tid',\n\t'qa_campaign' => 'Kampanje',\n\t'qa_campaigns' => 'Kampanjer',\n\t'qa_description' => 'Beskrivelse',\n\t'qa_valid_from' => 'Gyldig fra',\n\t'qa_valid_to' => 'Gyldig til',\n\t'qa_discount_amount' => 'Avslagsbeløp',\n\t'qa_discount_percent' => 'Avslag i prosent',\n\t'qa_coupons_amount' => 'Kupong beløp',\n\t'qa_coupons' => 'Kuponger',\n\t'qa_code' => 'Kode',\n\t'qa_redeem_time' => 'Innløsningstid',\n\t'qa_coupon_management' => 'Kuponghåndtering',\n\t'qa_time_management' => 'Tidshåndtering',\n\t'qa_projects' => 'Prosjekter',\n\t'qa_reports' => 'Rapporter',\n\t'qa_time_entries' => 'Tidsoppføringer',\n\t'qa_work_type' => 'Arbeidstype',\n\t'qa_work_types' => 'Arbeidstyper',\n\t'qa_project' => 'Prosjekt',\n\t'qa_start_time' => 'Start tid',\n\t'qa_end_time' => 'Slutt tid',\n\t'qa_expense_category' => 'Utgiftskategori',\n\t'qa_expense_categories' => 'Utgiftskategorier',\n\t'qa_expense_management' => 'Utgiftshåndtering',\n\t'qa_expenses' => 'Utgifter',\n\t'qa_expense' => 'Utgift',\n\t'qa_entry_date' => 'Loggføringsdato',\n\t'qa_amount' => 'Beløp',\n\t'qa_income_categories' => 'Inntektskategorier',\n\t'qa_monthly_report' => 'Månedsrapport',\n\t'qa_companies' => 'Firmaer',\n\t'qa_company_name' => 'Firma navn',\n\t'qa_address' => 'Adresse',\n\t'qa_website' => 'Webside',\n\t'qa_contact_management' => 'Kontakt håndering',\n\t'qa_contacts' => 'Kontakter',\n\t'qa_company' => 'Firma',\n\t'qa_first_name' => 'Fornavn',\n\t'qa_last_name' => 'Etternavn',\n\t'qa_phone' => 'Telefon',\n\t'qa_phone1' => 'Telefon 1',\n\t'qa_phone2' => 'Telefon 2',\n\t'qa_skype' => 'Skype',\n\t'qa_photo' => 'Bilde (max 8mb)',\n\t'qa_category_name' => 'Kategorinavn',\n\t'qa_product_management' => 'Produkt håndtering',\n\t'qa_products' => 'Produkter',\n\t'qa_product_name' => 'Produktnavn',\n\t'qa_price' => 'Pris',\n\t'qa_tags' => 'Stikkord',\n\t'qa_tag' => 'Stikkord',\n\t'qa_photo1' => 'Bilde 1',\n\t'qa_photo2' => 'Bilde 2',\n\t'qa_photo3' => 'Bilde 3',\n\t'qa_calendar' => 'Kalender',\n\t'qa_statuses' => 'Statuser',\n\t'qa_task_management' => 'Oppgave håndtering',\n\t'qa_tasks' => 'Oppgaver',\n\t'qa_status' => 'Status',\n\t'qa_attachment' => 'Vedlegg',\n\t'qa_due_date' => 'Tidsfrist',\n\t'qa_assigned_to' => 'Tildelt til',\n\t'qa_assets' => 'Ressurser',\n\t'qa_asset' => 'Ressurs',\n\t'qa_serial_number' => 'Serienummer',\n\t'qa_location' => 'Lokasjon',\n\t'qa_locations' => 'Lokasjoner',\n\t'qa_assigned_user' => 'Tildelt (bruker)',\n\t'qa_notes' => 'Notater',\n\t'qa_assets_history' => 'Ressurs historikk',\n\t'qa_assets_management' => 'Ressurs håndering',\n\t'qa_slug' => 'Slug',\n\t'qa_content_management' => 'Innholds håndtering',\n\t'qa_text' => 'Tekst',\n\t'qa_excerpt' => 'Utdrag',\n\t'qa_featured_image' => 'Hoved bilde',\n\t'qa_pages' => 'Sider',\n\t'qa_axis' => 'Akser',\n\t'qa_show' => 'Vis',\n\t'qa_group_by' => 'Gruppert på',\n\t'qa_chart_type' => 'Graftype',\n\t'qa_create_new_report' => 'Lag ny rapport',\n\t'qa_no_reports_yet' => 'Ingen rapporter sålangt.',\n\t'qa_created_at' => 'Laget den',\n\t'qa_updated_at' => 'Oppdatert den',\n\t'qa_deleted_at' => 'Slettet den',\n\t'qa_reports_x_axis_field' => 'X-akse - vennligst velg en av dato/tid feltene',\n\t'qa_reports_y_axis_field' => 'Y-akse - vennligst velg en av nummerfeltene',\n\t'qa_select_crud_placeholder' => 'Vennligst velg en av dine CRUDs',\n\t'qa_select_dt_placeholder' => 'Vennligst velg en av dato/tid feltene',\n\t'qa_aggregate_function_use' => 'Aggregeringsfunksjon som skal brukes',\n\t'qa_x_axis_group_by' => 'X-akse grupper etter',\n\t'qa_x_axis_field' => 'X-akse felt (dato/tid)',\n\t'qa_y_axis_field' => 'Y-akse felt',\n\t'qa_integer_float_placeholder' => 'Vennligst velt en av heltall/flyttall feltene',\n\t'qa_change_notifications_field_1_label' => 'Send en epost beskjed til bruker',\n\t'qa_change_notifications_field_2_label' => 'Når innlegging av CRUD',\n\t'qa_select_users_placeholder' => 'Vennligst velg en av dine brukere',\n\t'qa_is_created' => 'er laget',\n\t'qa_is_updated' => 'er oppdatert',\n\t'qa_is_deleted' => 'er slettet',\n\t'qa_notifications' => 'Varsler',\n\t'qa_notify_user' => 'Varsle bruker',\n\t'qa_when_crud' => 'Når CRUD',\n\t'qa_create_new_notification' => 'Lag ett nytt varsel',\n\t'qa_stripe_transactions' => 'Stripe transaksjon',\n\t'qa_upgrade_to_premium' => 'Oppgrader til Premium',\n\t'qa_messages' => 'Melding',\n\t'qa_you_have_no_messages' => 'Du har ingen meldinger.',\n\t'qa_all_messages' => 'Alle meldinger',\n\t'qa_new_message' => 'Ny melding',\n\t'qa_outbox' => 'Utboks',\n\t'qa_inbox' => 'Innboks',\n\t'qa_recipient' => 'Mottager',\n\t'qa_subject' => 'Emne',\n\t'qa_message' => 'Melding',\n\t'qa_send' => 'Send',\n\t'qa_reply' => 'Svar',\n\t'qa_calendar_sources' => 'Kalender kilder',\n\t'qa_new_calendar_source' => 'Lag en ny kalender kilde',\n\t'qa_crud_title' => 'Crud tittel',\n\t'qa_crud_date_field' => 'Crud dato felt',\n\t'qa_prefix' => 'Prefiks',\n\t'qa_label_field' => 'Etikettfelt',\n\t'qa_suffix' => 'Suffiks',\n\t'qa_no_calendar_sources' => 'Ingen kalender kilder enda.',\n\t'qa_crud_event_field' => 'Hendelse etikettfelt',\n\t'qa_create_new_calendar_source' => 'Lag en ny kalender kilde',\n\t'qa_edit_calendar_source' => 'Rediger kalender kilder',\n\t'qa_client_management' => 'Klient håndtering',\n\t'qa_client_management_settings' => 'Innstillinger klient håndtering',\n\t'qa_country' => 'Land',\n\t'qa_client_status' => 'Klient status',\n\t'qa_clients' => 'Klienter',\n\t'qa_client_statuses' => 'Klient statuser',\n\t'qa_currencies' => 'Valutaer',\n\t'qa_main_currency' => 'Hoved valuta',\n\t'qa_documents' => 'Dokumenter',\n\t'qa_file' => 'Fil',\n\t'qa_income_source' => 'Inntektskilde',\n\t'qa_income_sources' => 'Inntektskilder',\n\t'qa_fee_percent' => 'Avgift i prosent',\n\t'qa_note_text' => 'Notat tekst',\n\t'qa_client' => 'Klient',\n\t'qa_start_date' => 'Start dato',\n\t'qa_budget' => 'Budsjett',\n\t'qa_project_status' => 'Prosjekt status',\n\t'qa_project_statuses' => 'Prosjekt statuser',\n\t'qa_transactions' => 'Transaksjoner',\n\t'qa_transaction_types' => 'Transaksjonstyper',\n\t'qa_transaction_type' => 'Transaksjonstype',\n\t'qa_transaction_date' => 'Transaksjonsdato',\n\t'qa_currency' => 'Valuta',\n\t'qa_current_password' => 'Gjeldende passord',\n\t'qa_new_password' => 'Nytt passord',\n\t'qa_password_confirm' => 'Nytt passord bekreftelse',\n\t'qa_dashboard_text' => 'Du er nå logget inn!',\n\t'qa_forgot_password' => 'Glemt ditt passord?',\n\t'qa_remember_me' => 'Husk meg',\n\t'qa_login' => 'Logg inn',\n\t'qa_change_password' => 'Endre passord',\n\t'qa_csv' => 'CSV',\n\t'qa_print' => 'Skriv ut',\n\t'qa_excel' => 'Excel',\n\t'qa_copy' => 'Kopier',\n\t'qa_colvis' => 'Kolonne visning',\n\t'qa_pdf' => 'PDF',\n\t'qa_reset_password' => 'Tilbakestill passord',\n\t'qa_reset_password_woops' => '<strong>Oisann!</strong> Det ble problemer med inndata:',\n\t'qa_email_line1' => 'Du mottar denne eposten fordi vi har mottat ett ønske om å tilbakestille passordet på din konto.',\n\t'qa_email_line2' => 'Hvis du ikke forespurte om dette, så trenger du ikke gjøre noe.',\n\t'qa_email_greet' => 'Hallo',\n\t'qa_confirm_password' => 'Bekreft passordet',\n\t'qa_email_regards' => 'Hilsen',\n\t'qa_if_you_are_having_trouble' => 'Hvis du har problemer med å trykke på',\n\t'qa_copy_paste_url_bellow' => 'knapp, kopier og lim inn URLen under inn i din nettleser.',\n\t'qa_please_select' => 'Vennligst velg',\n\t'qa_register' => 'Registrer',\n\t'qa_registration' => 'Registrering',\n\t'qa_not_approved_title' => 'Du er ikke godkjent',\n\t'qa_not_approved_p' => 'Kontoen din er fortsatt ikke godkjent av administrator. Vennligst prøv igjen senere.',\n\t'qa_there_were_problems_with_input' => 'De oppsto problemer med inn-data',\n\t'qa_whoops' => 'Oups!',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/no/validation.php",
    "content": "<?php\nreturn [\n\n    'accepted' => ':attribute må være akseptert.',\n    'active_url' => ':attribute er ikke en gyldig URL.',\n    'after' => ':attribute må være en dato etter :date.',\n    'alpha' => ':attribute må bare inneholde bokstaver.',\n    'alpha_dash' => ':attribute kan kun inneholde bokstaver, tall og bindestreker.',\n    'alpha_num' => ':attribute kan kun inneholde bokstaver og tall.',\n    'array' => ':attribute må være en matrise (array).',\n    'before' => ':attribute må være en dato før :date.',\n    'between' => [\n        'numeric' => ':attribute må være mellom :min og :max.',\n        'file' => ':attribute må være mellom :min og :max kilobytes.',\n        'string' => ':attribute må være mellom :min og :max bokstaver.',\n        'array' => ':attribute må ha mellom :min og :max elementer.',\n    ],\n    'boolean' => ':attribute feltet må være sant eller usant',\n    'confirmed' => ':attribute bekreftelsesfeltet er ikke likt.',\n    'date' => ':attribute er ikke en gyldig dato.',\n    'date_format' => ':attribute er ikke av formatet :format.',\n    'different' => ':attribute og :other må være forskjellig.',\n    'digits' => ':attribute må være :digits siffer.',\n    'digits_between' => ':attribute må være mellom :min og :max siffer.',\n    'dimensions' => ':attribute har ugyldige bilde dimensjoner.',\n    'distinct' => ':attribute feltet har en duplikat verdi.',\n    'email' => ':attribute må være en gyldig epostadresse.',\n    'exists' => ':attribute feltet som er valgt er ugyldig.',\n    'file' => ':attribute må være en fil.',\n    'filled' => ':attribute feltet er påkrevd.',\n    'image' => ':attribute feltet må være ett bilde.',\n    'in' => 'Det valgte feltet :attribute er ugyldig.',\n    'in_array' => 'Feltet :attribute eksisterer ikke i :other',\n    'integer' => ':attribute må være ett heltall.',\n    'ip' => ':attribute må være en gyldig IP adresse.',\n    'json' => ':attribute må være en gyldig JSON tekst.',\n    'max' => [\n        'numeric' => ':attribute kan ikke være større enn :max.',\n        'file' => ':attribute kan ikke være større enn :max kilobytes.',\n        'string' => ':attribute kan ikke være større enn :max karakterer.',\n        'array' => ':attribute kan ikke ha mer enn :max elementer.',\n    ],\n    'mimes' => ':attribute må være en fil av typen :type :values.',\n    'min' => [\n        'numeric' => ':attribute må være minst :min',\n        'file' => ':attribute må være minst :min kilobytes.',\n        'string' => ':attribute må være minst :min karakterer.',\n        'array' => ':attribute må ha minst :min elementer.',\n    ],\n    'not_in' => 'Valgte :attribute er ikke gyldig.',\n    'numeric' => ':attribute må være ett nummer.',\n    'present' => ':attribute feltet må være utfyllt.',\n    'regex' => ':attribute formatet er ikke gyldig.',\n    'required' => ':attribute feltet er påkrevd.',\n    'required_if' => ':attribute feltet er påkrevd når :other er :value.',\n    'required_unless' => ':attribute feltet er påkrevd hvis ikke :other er i :values.',\n    'required_with' => ':attribute er påkrevd når :values er satt.',\n    'required_with_all' => ':attribute feltet er påkrevd når :values er satt.',\n    'required_without' => ':attribute feltet er påkrevd når :values ikke er satt.',\n    'required_without_all' => ':attribute feltet er påkrevd når ingen av :values er tilstede.',\n    'same' => ':attribute og :other må være lik.',\n    'size' => [\n        'numeric' => ':attribute må være :size.',\n        'file' => ':attribute må være :size kilobytes.',\n        'string' => ':attribute må være :size karakterer.',\n        'array' => ':attribute må inneholde :size elementer.',\n    ],\n    'string' => ':attribute må være tekst.',\n    'timezone' => ':attribute må være en gyldig sone.',\n    'unique' => ':attribute er allerede tatt.',\n    'url' => ':attribute formatet er ugyldig.',\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'egendefinert-melding',\n        ],\n    ],\n\n];"
  },
  {
    "path": "resources/lang/pt/auth.php",
    "content": "<?php\nreturn [\n\n    'failed' => 'Essas credenciais não correspondem aos nossos registros.',\n    'throttle' => 'Muitas tentativas de login. Tente novamente em :seconds segundos.',\n\n];"
  },
  {
    "path": "resources/lang/pt/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => '« Anterior',\n    'next' => 'Próximo »',\n\n];"
  },
  {
    "path": "resources/lang/pt/passwords.php",
    "content": "<?php\nreturn [\n\n    'password' => 'As senhas devem ter pelo menos seis caracteres e combinar a confirmação.',\n    'reset' => 'Password foi resetado!',\n    'sent' => 'Enviamos seu link de redefinição de senha por e-mail!',\n    'token' => 'Token de redefinição de senha é inválido.',\n    'user' => 'Não encontramos um usuário com esse endereço de e-mail.',\n\n];"
  },
  {
    "path": "resources/lang/pt/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_create' => 'Criar',\n\t'qa_save' => 'Salvar',\n\t'qa_edit' => 'Editar',\n\t'qa_view' => 'Visualizar',\n\t'qa_update' => 'Atualizar',\n\t'qa_list' => 'Listar',\n\t'qa_no_entries_in_table' => 'Sem entradas na tabela',\n\t'qa_custom_controller_index' => 'Índice de Controller personalizado.',\n\t'qa_logout' => 'Sair',\n\t'qa_add_new' => 'Novo',\n\t'qa_are_you_sure' => 'Tem certeza?',\n\t'qa_back_to_list' => 'Voltar',\n\t'qa_dashboard' => 'Painel',\n\t'qa_delete' => 'Excluir',\n\t'qa_restore' => 'Restaurar',\n\t'qa_permadel' => 'Excluir',\n\t'qa_all' => 'Todos',\n\t'qa_trash' => 'Lixo',\n\t'qa_delete_selected' => 'Excluir Selecionados',\n\t'qa_category' => 'Categoria',\n\t'qa_categories' => 'Categorias',\n\t'qa_sample_category' => 'Categoria Exemplo',\n\t'qa_questions' => 'Questões',\n\t'qa_question' => 'Questão',\n\t'qa_answer' => 'Resposta',\n\t'qa_administrator_can_create_other_users' => 'Administrador',\n\t'qa_simple_user' => 'Usuário simples',\n\t'qa_title' => 'Título',\n\t'qa_roles' => 'Funções',\n\t'qa_role' => 'Função',\n\t'qa_name' => 'Nome',\n\t'qa_password' => 'Senha',\n\t'qa_remember_token' => 'Lembrar Senha',\n\t'qa_permissions' => 'Permissões',\n\t'qa_action' => 'Ação',\n\t'qa_forgot_password' => 'Esqueceu sua senha?',\n\t'qa_remember_me' => 'Lembrar-me',\n\t'qa_change_password' => 'Alterar senha',\n\t'qa_print' => 'Imprimir',\n\t'qa_copy' => 'Copiar',\n\t'qa_colvis' => 'Colunas Visíveis',\n\t'qa_reset_password' => 'Redefinir senha',\n\t'qa_email_greet' => 'Olá',\n\t'qa_confirm_password' => 'Confirmação da senha',\n\t'qa_please_select' => 'Selecione por favor',\n\t'qa_sample_question' => 'Questão Exemplo',\n\t'qa_sample_answer' => 'Resposta Exemplo',\n\t'qa_faq_management' => 'Gerenciamento de FAQ',\n\t'qa_user_management' => 'Gerenciamento de usuários',\n\t'qa_users' => 'Usuários',\n\t'qa_user' => 'Usuário',\n\t'qa_email' => 'E-mail',\n\t'qa_user_actions' => 'Ações do usuário',\n\t'qa_action_model' => 'Modelo de ação',\n\t'qa_action_id' => 'ID de ação',\n\t'qa_time' => 'Tempo',\n\t'qa_campaign' => 'Campanha',\n\t'qa_campaigns' => 'Campanhas',\n\t'qa_description' => 'Descrição',\n\t'qa_valid_from' => 'Válido de',\n\t'qa_valid_to' => 'Válido até',\n\t'qa_discount_amount' => 'Quantia de desconto',\n\t'qa_discount_percent' => 'Percentual de desconto',\n\t'qa_coupons_amount' => 'Quantia de cupons',\n\t'qa_coupons' => 'Cupons',\n\t'qa_code' => 'Código',\n\t'qa_redeem_time' => 'Tempo de resgate',\n\t'qa_coupon_management' => 'Gerenciamento de cupons',\n\t'qa_time_management' => 'Gerenciamento de tempo',\n\t'qa_projects' => 'Projetos',\n\t'qa_reports' => 'Relatórios',\n\t'qa_time_entries' => 'Entradas de tempo',\n\t'qa_work_type' => 'Tipo de trabalho',\n\t'qa_work_types' => 'Tipos de trabalho',\n\t'qa_project' => 'Projeto',\n\t'qa_start_time' => 'Tempo de início',\n\t'qa_end_time' => 'Tempo de final',\n\t'qa_expense_category' => 'Categoria de Despesa',\n\t'qa_expense_categories' => 'Categorias de Despesa',\n\t'qa_expense_management' => 'Gerenciamento de Despesa',\n\t'qa_expenses' => 'Despesas',\n\t'qa_expense' => 'Despesa',\n\t'qa_entry_date' => 'Data de entrada',\n\t'qa_amount' => 'Quantidade',\n\t'qa_income_categories' => 'Categorias de entrada',\n\t'qa_monthly_report' => 'Relatório mensal',\n\t'qa_companies' => 'Empresas',\n\t'qa_company_name' => 'Nome da empresa',\n\t'qa_address' => 'Endereço',\n\t'qa_website' => 'Website',\n\t'qa_contact_management' => 'Gerenciamento de contato',\n\t'qa_contacts' => 'Contatos',\n\t'qa_company' => 'Empresa',\n\t'qa_first_name' => 'Primeiro nome',\n\t'qa_last_name' => 'Último nome',\n\t'qa_phone' => 'Telefone',\n\t'qa_phone1' => 'Telefone 1',\n\t'qa_phone2' => 'Telefone 2',\n\t'qa_skype' => 'Skype',\n\t'qa_photo' => 'Foto (máx. 8 MB)',\n\t'qa_category_name' => 'Nome da categoria',\n\t'qa_product_management' => 'Gerenciamento de produtos',\n\t'qa_products' => 'Produtos',\n\t'qa_product_name' => 'Nome do produto',\n\t'qa_price' => 'Preço',\n\t'qa_tags' => 'Tags',\n\t'qa_tag' => 'Tag',\n\t'qa_photo1' => 'Foto1',\n\t'qa_photo2' => 'Foto2',\n\t'qa_photo3' => 'Foto3',\n\t'qa_calendar' => 'Calendário',\n\t'qa_statuses' => 'Status',\n\t'qa_task_management' => 'Gerenciamento de tarefas',\n\t'qa_tasks' => 'Tarefas',\n\t'qa_status' => 'Status',\n\t'qa_attachment' => 'Anexo',\n\t'qa_due_date' => 'Data de vencimento',\n\t'qa_assigned_to' => 'Atribuído',\n\t'qa_assets' => 'Ativos',\n\t'qa_asset' => 'Ativo',\n\t'qa_serial_number' => 'Número de série',\n\t'qa_location' => 'Local',\n\t'qa_locations' => 'Locais',\n\t'qa_assigned_user' => 'Atribuído (usuário)',\n\t'qa_notes' => 'Notas',\n\t'qa_assets_history' => 'Histórico de ativos',\n\t'qa_assets_management' => 'Gerenciamento de ativos',\n\t'qa_content_management' => 'Gerenciamento de conteúdo',\n\t'qa_text' => 'Texto',\n\t'qa_pages' => 'Páginas',\n\t'qa_axis' => 'Eixo',\n\t'qa_show' => 'Exibir',\n\t'qa_group_by' => 'Agrupar por',\n\t'qa_chart_type' => 'Tipo de gráfico',\n\t'qa_create_new_report' => 'Criar novo relatório',\n\t'qa_no_reports_yet' => 'Nenhum relatório ainda.',\n\t'qa_created_at' => 'Criado em',\n\t'qa_updated_at' => 'Atualizado em',\n\t'qa_deleted_at' => 'Excluído em',\n\t'qa_reports_x_axis_field' => 'Eixo X - por favor escolha um dos campos de data/hora',\n\t'qa_reports_y_axis_field' => 'Eixo Y - por favor escolha um dos campos numéricos',\n\t'qa_select_crud_placeholder' => 'Por favor selecione um de seus CRUDs',\n\t'qa_select_dt_placeholder' => 'Por favor selecione um dos campos de data/hora',\n\t'qa_aggregate_function_use' => 'Agregar função a utilizar',\n\t'qa_x_axis_group_by' => 'Eixo X agrupar por',\n\t'qa_x_axis_field' => 'Campo do eixo X (data/hora)',\n\t'qa_y_axis_field' => 'Campo do eixo Y',\n\t'qa_integer_float_placeholder' => 'Por favor selecione um dos campos inteiros/float',\n\t'qa_change_notifications_field_1_label' => 'Enviar notificação por e-mail ao Usuário',\n\t'qa_select_users_placeholder' => 'Por favor selecione um de seus Usuários',\n\t'qa_is_created' => 'foi criado',\n\t'qa_is_updated' => 'foi atualizado',\n\t'qa_is_deleted' => 'foi excluído',\n\t'qa_notifications' => 'Notificações',\n\t'qa_notify_user' => 'Notificar Usuário',\n\t'qa_when_crud' => 'Quando CRUD',\n\t'qa_create_new_notification' => 'Criar nova Notificação',\n\t'qa_stripe_transactions' => 'Transações Stripe',\n\t'qa_upgrade_to_premium' => 'Atualizar para Premium',\n\t'qa_messages' => 'Mensagens',\n\t'qa_you_have_no_messages' => 'Você não possui nenhuma mensagem.',\n\t'qa_all_messages' => 'Todas as mensagens',\n\t'qa_new_message' => 'Nova mensagem',\n\t'qa_outbox' => 'Caixa de saída',\n\t'qa_inbox' => 'Caixa de entrada',\n\t'qa_recipient' => 'Destinatário',\n\t'qa_subject' => 'Assunto',\n\t'qa_message' => 'Mensagem',\n\t'qa_send' => 'Enviar',\n\t'qa_reply' => 'Responder',\n\t'qa_calendar_sources' => 'Fontes de calendário',\n\t'qa_new_calendar_source' => 'Criar nova fonte de calendário',\n\t'qa_crud_title' => 'Título do CRUD',\n\t'qa_crud_date_field' => 'Campo de data CRUD',\n\t'qa_prefix' => 'Prefixo',\n\t'qa_label_field' => 'Campo de rótulo',\n\t'qa_suffix' => 'Sufixo',\n\t'qa_no_calendar_sources' => 'Nenhuma fonte de calendário ainda.',\n\t'qa_crud_event_field' => 'Campo de rótulo do evento',\n\t'qa_create_new_calendar_source' => 'Criar nova Fonte de Calendário',\n\t'qa_edit_calendar_source' => 'Editar Fonte de Calendário',\n\t'qa_client_management' => 'Gerenciamento de clientes',\n\t'qa_client_management_settings' => 'Configurações de gerenciamento de clientes',\n\t'qa_country' => 'País',\n\t'qa_client_status' => 'Status do cliente',\n\t'qa_clients' => 'Clientes',\n\t'qa_client_statuses' => 'Status do cliente',\n\t'qa_currencies' => 'Moedas',\n\t'qa_main_currency' => 'Moeda principal',\n\t'qa_documents' => 'Documentos',\n\t'qa_file' => 'Arquivo',\n\t'qa_income_source' => 'Fonte de entrada',\n\t'qa_income_sources' => 'Fontes de entrada',\n\t'qa_fee_percent' => 'Percentual de taxa',\n\t'qa_note_text' => 'Texto da nota',\n\t'qa_client' => 'Cliente',\n\t'qa_start_date' => 'Data de início',\n\t'qa_budget' => 'Orçamento',\n\t'qa_project_status' => 'Status do projeto',\n\t'qa_project_statuses' => 'Status do projeto',\n\t'qa_transactions' => 'Transações',\n\t'qa_transaction_types' => 'Tipos de transação',\n\t'qa_transaction_type' => 'Tipo de transação',\n\t'qa_transaction_date' => 'Data da transação',\n\t'qa_currency' => 'Moeda',\n\t'qa_current_password' => 'Senha atual',\n\t'qa_new_password' => 'Nova senha',\n\t'qa_password_confirm' => 'Confirmação da nova senha',\n\t'qa_dashboard_text' => 'Você entrou!',\n\t'qa_login' => 'Entrar',\n\t'qa_reset_password_woops' => '<strong> Ops! </strong> Há problemas com a entrada:',\n\t'qa_email_line1' => 'Você está recebendo este e-mail porque nós recebemos uma solicitação de redefinição de senha para a sua conta.',\n\t'qa_email_line2' => 'Se você não solicitou redefinição de senha, nenhuma ação é necessária.',\n\t'qa_if_you_are_having_trouble' => 'Se você está tendo problemas para clicar no',\n\t'qa_copy_paste_url_bellow' => 'botão, copie e cole a URL abaixo no seu navegador web:',\n\t'qa_excerpt' => 'Resumo',\n\t'qa_featured_image' => 'Imagem em destaque',\n\t'qa_change_notifications_field_2_label' => 'Quando entrar no CRUD',\n\t'qa_email_regards' => 'Saudações',\n\t'qa_register' => 'Registrar',\n\t'qa_registration' => 'Registro',\n\t'qa_not_approved_title' => 'Você não está aprovado',\n\t'qa_not_approved_p' => 'Sua conta não foi liberada ainda pelo administrador, por favor, aguarde e tente mais tarde.',\n\t'qa_there_were_problems_with_input' => 'Há problemas com a entrada',\n\t'qa_whoops' => 'Ops!',\n\t'qa_slug' => 'Slug',\n\t'qa_csv' => 'CSV',\n\t'qa_excel' => 'Excel',\n\t'qa_pdf' => 'PDF',\n\t'qa_file_contains_header_row' => 'O arquivo contém cabeçalho?',\n\t'qa_csvImport' => 'Importação CSV',\n\t'qa_csv_file_to_import' => 'Arquivo CSV para importar',\n\t'qa_parse_csv' => 'Analisar CSV',\n\t'qa_import_data' => 'Importar data',\n\t'qa_imported_rows_to_table' => 'Importado :rows linhas para tabela :table',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/pt/validation.php",
    "content": "<?php\nreturn [\n\n    'accepted' => 'O :attribute deve ser aceito.',\n    'active_url' => 'O :attribute não é uma URL válida.',\n    'after' => 'O :attribute deve ser uma data após :date.',\n    'alpha' => 'O :attribute deve ter apenas letras.',\n    'alpha_dash' => 'O :attribute deve ter apenas letras, números e traços.',\n    'alpha_num' => 'O :attribute deve ter apenas letras e números.',\n    'array' => 'O :attribute deve ser um array.',\n    'before' => 'O :attribute deve ser uma data antes de :date.',\n    'between' => [\n        'numeric' => 'O :attribute deve estar entre :min e :max.',\n        'file' => 'O :attribute deve estar entre :min e :max kilobytes.',\n        'string' => 'O :attribute deve estar entre :min e :max caracteres.',\n        'array' => 'O :attribute deve ter entre :min e :max itens.',\n    ],\n    'boolean' => 'O campo :attribute deve ser verdadeiro ou falso.',\n    'confirmed' => 'A confirmação do campo :attribute não corresponde.',\n    'date' => 'A :attribute não é uma data válida.',\n    'date_format' => 'O :attribute não corresponde ao formato :format.',\n    'different' => 'O :attribute e :other devem ser diferentes.',\n    'digits' => 'O :attribute deve ter :digits dígitos.',\n    'digits_between' => 'O :attribute deve ter entre :min e :max dígitos.',\n    'dimensions' => 'O :attribute possui dimensões inválidas de imagem.',\n    'distinct' => 'O campo :attribute possui um valor duplicado.',\n    'email' => 'O :attribute deve ser um endereço de e-mail válido.',\n    'exists' => 'O :attribute selecionado é inválido.',\n    'file' => 'O :attribute deve ser um arquivo.',\n    'filled' => 'O campo :attribute é obrigatório.',\n    'image' => 'O :attribute deve ser uma imagem.',\n    'in' => 'O :attribute selecionado é inválido.',\n    'in_array' => 'O campo :attribute não existe em :other.',\n    'integer' => 'O :attribute deve ser um inteiro.',\n    'ip' => 'O :attribute deve ser um endereço de IP válido.',\n    'json' => 'O :attribute deve ser uma string JSON válida.',\n    'max' => [\n        'numeric' => 'O :attribute não deve ser maior que :max.',\n        'file' => 'O :attribute não deve ser maior que :max kilobytes.',\n        'string' => 'O :attribute não deve ser maior que :max caracteres.',\n        'array' => 'O :attribute não deve ter mais que :max itens.',\n    ],\n    'mimes' => 'O :attribute deve ser um arquivo do tipo :values.',\n    'min' => [\n        'numeric' => 'O :attribute deve ser no mínimo :min.',\n        'file' => 'O :attribute deve ter no mínimo :min kilobytes.',\n        'string' => 'O :attribute deve ter no mínimo :min caracteres.',\n        'array' => 'O :attribute deve ter no mínimo :min itens.',\n    ],\n    'not_in' => 'O :attribute selecionado é inválido.',\n    'numeric' => 'O :attribute deve ser um número.',\n    'present' => 'O campo :attribute deve estar presente.',\n    'regex' => 'O formato :attribute é inválido.',\n    'required' => 'O campo :attribute é obrigatório.',\n    'required_if' => 'O campo :attribute é obrigatório quando :other é :value.',\n    'required_unless' => 'O campo :attribute é obrigatório a não ser que :other está em :values.',\n    'required_with' => 'O campo :attribute é obrigatório quando :values está presente.',\n    'required_with_all' => 'O campo :attribute é obrigatório quando :values está presente.',\n    'required_without' => 'O campo :attribute é obrigatório quando :values não está presente.',\n    'required_without_all' => 'O campo :attribute é obrigatório quando nenhum de :values está presente.',\n    'same' => 'O :attribute e :other devem corresponder.',\n    'size' => [\n        'numeric' => 'O :attribute deve ser :size.',\n        'file' => 'O :attribute deve ter :size kilobytes.',\n        'string' => 'O :attribute deve ter :size caracteres.',\n        'array' => 'O :attribute deve conter :size itens.',\n    ],\n    'string' => 'O :attribute deve ser uma string.',\n    'timezone' => 'O :attribute deve ser uma zona válida.',\n    'unique' => 'O :attribute já foi definido.',\n    'url' => 'O formato :attribute é inválido.',\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'mensagem-personalizada',\n        ],\n    ],\n\n];"
  },
  {
    "path": "resources/lang/ru/auth.php",
    "content": "<?php\nreturn [\n\n    'failed' => 'Пользователь с такими данными не найден',\n    'throttle' => 'Слишком много попыток входа, попробуйте снова через :seconds секунд',\n\n];"
  },
  {
    "path": "resources/lang/ru/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => 'Предыдущая',\n    'next' => 'Следующая',\n\n];"
  },
  {
    "path": "resources/lang/ru/passwords.php",
    "content": "<?php\nreturn [\n\n    'reset' => 'Ваш пароль сброшен',\n    'password' => 'Пароль должен быть минимум 6 символов и совпадать с подтверждением',\n    'sent' => 'Мы отправили Вам на почти ссылку для сброса пароля',\n    'token' => 'Ключ для сброса пароля неверный',\n    'user' => 'Мы не можем найти пользователя с таким имейл адресом',\n\n];"
  },
  {
    "path": "resources/lang/ru/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_create' => 'Создать',\n\t'qa_save' => 'Сохранить',\n\t'qa_edit' => 'Редактировать',\n\t'qa_restore' => 'Восстановить',\n\t'qa_permadel' => 'Удалить безвозвратно',\n\t'qa_all' => 'Все',\n\t'qa_trash' => 'Удаленные',\n\t'qa_view' => 'Просмотр',\n\t'qa_update' => 'Обновить',\n\t'qa_list' => 'Список',\n\t'qa_no_entries_in_table' => 'Нет данных в таблице',\n\t'qa_logout' => 'Выйти',\n\t'qa_add_new' => 'Добавить новый',\n\t'qa_are_you_sure' => 'Вы уверенны?',\n\t'qa_back_to_list' => 'Вернутся к списку',\n\t'qa_dashboard' => 'Панель управления',\n\t'qa_delete' => 'Удалить',\n\t'qa_delete_selected' => 'Удалить выбранные',\n\t'qa_category' => 'Категория',\n\t'qa_categories' => 'Категории',\n\t'qa_sample_category' => 'Пример категории',\n\t'qa_questions' => 'Вопросы',\n\t'qa_question' => 'Вопрос',\n\t'qa_answer' => 'Ответ',\n\t'qa_sample_question' => 'Пример вопроса',\n\t'qa_sample_answer' => 'Пример ответа',\n\t'qa_faq_management' => 'Управление ЧАВО',\n\t'qa_administrator_can_create_other_users' => 'Администратор (может создавать других пользователей)',\n\t'qa_simple_user' => 'Обычный пользователь',\n\t'qa_title' => 'Заголовок',\n\t'qa_roles' => 'Роли',\n\t'qa_role' => 'Роль',\n\t'qa_user_management' => 'Управление пользователями',\n\t'qa_users' => 'Пользователи',\n\t'qa_user' => 'Пользователь',\n\t'qa_name' => 'Имя',\n\t'qa_email' => 'Электронная почта',\n\t'qa_password' => 'Пароль',\n\t'qa_remember_token' => 'Remember token',\n\t'qa_permissions' => 'Доступы',\n\t'qa_user_actions' => 'Активности пользователя',\n\t'qa_action' => 'Активности',\n\t'qa_action_model' => 'Модель/Сущность Активности',\n\t'qa_action_id' => 'ID Активности',\n\t'qa_time' => 'Время',\n\t'qa_campaign' => 'Кампания',\n\t'qa_campaigns' => 'Кампании',\n\t'qa_description' => 'Описание',\n\t'qa_valid_from' => 'Valid from',\n\t'qa_valid_to' => 'Valid to',\n\t'qa_discount_amount' => 'Сумма скидки',\n\t'qa_discount_percent' => 'Процент скидки',\n\t'qa_coupons_amount' => 'Сумма купонов',\n\t'qa_coupons' => 'Купоны',\n\t'qa_code' => 'Код',\n\t'qa_redeem_time' => 'Время выкупа',\n\t'qa_coupon_management' => 'Управление купонами',\n\t'qa_time_management' => 'Тайм менеджмент',\n\t'qa_projects' => 'Проекты',\n\t'qa_reports' => 'Отчеты',\n\t'qa_time_entries' => 'Записи времени',\n\t'qa_work_type' => 'Тип работы',\n\t'qa_work_types' => 'Тип работ',\n\t'qa_project' => 'Проект',\n\t'qa_start_time' => 'Время начала',\n\t'qa_end_time' => 'Время окончания',\n\t'qa_expense_category' => 'Категория расходов',\n\t'qa_expense_categories' => 'Категории расходов',\n\t'qa_expense_management' => 'Управление расходами',\n\t'qa_expenses' => 'Расходы',\n\t'qa_expense' => 'Расход',\n\t'qa_entry_date' => 'Дата ввода',\n\t'qa_amount' => 'Количество',\n\t'qa_income_categories' => 'Категории доходов',\n\t'qa_monthly_report' => 'Месячный отчет',\n\t'qa_companies' => 'Компании',\n\t'qa_company_name' => 'Имя компании',\n\t'qa_address' => 'Адресс',\n\t'qa_website' => 'Веб сайт',\n\t'qa_contact_management' => 'Управление контактами',\n\t'qa_contacts' => 'Контакты',\n\t'qa_company' => 'Компания',\n\t'qa_first_name' => 'Имя',\n\t'qa_last_name' => 'Фамилия',\n\t'qa_phone' => 'Телефон',\n\t'qa_phone1' => 'Телефон 1',\n\t'qa_phone2' => 'Телефон 2',\n\t'qa_skype' => 'Skype',\n\t'qa_photo' => 'Фото (макс. 8 Мб)',\n\t'qa_category_name' => 'Имя категории',\n\t'qa_product_management' => 'Управление продуктами',\n\t'qa_products' => 'Продукты',\n\t'qa_product_name' => 'Имя продукта',\n\t'qa_price' => 'Цена',\n\t'qa_tags' => 'Тэги',\n\t'qa_tag' => 'Тэг',\n\t'qa_photo1' => 'Фото1',\n\t'qa_photo2' => 'Фото2',\n\t'qa_photo3' => 'Фото3',\n\t'qa_calendar' => 'Календарь',\n\t'qa_statuses' => 'Статусы',\n\t'qa_task_management' => 'Управление задачами',\n\t'qa_tasks' => 'Задачи',\n\t'qa_status' => 'Статус',\n\t'qa_attachment' => 'Вложение',\n\t'qa_due_date' => 'Срок',\n\t'qa_assigned_to' => 'Принадлежит к',\n\t'qa_assets' => 'Активы',\n\t'qa_asset' => 'Актив',\n\t'qa_serial_number' => 'Серийный номер',\n\t'qa_location' => 'Местонахождение',\n\t'qa_locations' => 'Местонахождения',\n\t'qa_assigned_user' => 'Принадлежность пользователю',\n\t'qa_notes' => 'Записки',\n\t'qa_assets_history' => 'История активов',\n\t'qa_assets_management' => 'Управление активами',\n\t'qa_slug' => 'Slug (ЧПУ)',\n\t'qa_content_management' => 'Управление контентом',\n\t'qa_text' => 'Текст',\n\t'qa_excerpt' => 'Эксперт',\n\t'qa_featured_image' => 'Популярные изображения',\n\t'qa_pages' => 'Страницы',\n\t'qa_axis' => 'Оси',\n\t'qa_show' => 'Показать',\n\t'qa_group_by' => 'Сортировать по',\n\t'qa_chart_type' => 'Тип диаграммы',\n\t'qa_create_new_report' => 'Создать новый отчет',\n\t'qa_no_reports_yet' => 'Пока нет ни одного отчета',\n\t'qa_created_at' => 'Время создания',\n\t'qa_updated_at' => 'Время последнего обновления',\n\t'qa_deleted_at' => 'Время удаления',\n\t'qa_reports_x_axis_field' => 'Ось-Х - пожалуйста выберете одно из полей даты/времени',\n\t'qa_reports_y_axis_field' => 'Ось-У - пожалуйста выберете одно из полей даты/времени',\n\t'qa_select_crud_placeholder' => 'Пожалуйста, выберете один из своих CRUD',\n\t'qa_select_dt_placeholder' => 'Пожалуйста, выберете одно из полей даты/времени',\n\t'qa_aggregate_function_use' => 'Какую агрегатную функцию использовать?',\n\t'qa_x_axis_group_by' => 'Ось-Х группировать по',\n\t'qa_x_axis_field' => 'Поле Оси Х (дата/время)',\n\t'qa_y_axis_field' => 'Поле оси У',\n\t'qa_integer_float_placeholder' => 'Пожалуйста выберете одно из числовых полей',\n\t'qa_change_notifications_field_1_label' => 'Отправить уведомление пользователю по электронной почте',\n\t'qa_select_users_placeholder' => 'Пожалуйста выберете одного из своих пользователей',\n\t'qa_is_created' => 'создано',\n\t'qa_is_updated' => 'обновлено',\n\t'qa_is_deleted' => 'удалено',\n\t'qa_notifications' => 'Уведомления',\n\t'qa_notify_user' => 'Уведомить Пользователя',\n\t'qa_create_new_notification' => 'Создать новое уведомление',\n\t'qa_stripe_transactions' => 'Stripe Транзакции',\n\t'qa_upgrade_to_premium' => 'Обновить пакет услуг до Премиум',\n\t'qa_messages' => 'Сообщения',\n\t'qa_you_have_no_messages' => 'У вас нет сообщений',\n\t'qa_all_messages' => 'Все сообщения',\n\t'qa_new_message' => 'Новое сообщение',\n\t'qa_outbox' => 'Отправленные',\n\t'qa_inbox' => 'Входящие',\n\t'qa_recipient' => 'Получатель',\n\t'qa_subject' => 'Тема сообщения',\n\t'qa_message' => 'Сообщение',\n\t'qa_send' => 'Отправить',\n\t'qa_reply' => 'Ответить',\n\t'qa_crud_title' => 'Заголовок CRUD',\n\t'qa_crud_date_field' => 'Поле с типом \\\"дата\\\" выбранного CRUD',\n\t'qa_prefix' => 'Префикс',\n\t'qa_suffix' => 'Суффикс',\n\t'qa_client_management' => 'Управление клиентами',\n\t'qa_client_management_settings' => 'Управление клиентами,  настройки',\n\t'qa_country' => 'Страна',\n\t'qa_client_status' => 'Статус клиента',\n\t'qa_clients' => 'Клиенты',\n\t'qa_client_statuses' => 'Клиентские статусы',\n\t'qa_currencies' => 'Валюты',\n\t'qa_main_currency' => 'Основная валюта',\n\t'qa_documents' => 'Документы',\n\t'qa_file' => 'Файл',\n\t'qa_income_source' => 'Источник дохода',\n\t'qa_income_sources' => 'Источники дохода',\n\t'qa_fee_percent' => 'Коэффициент вознаграждения',\n\t'qa_note_text' => 'Текст примечания',\n\t'qa_client' => 'Клиент',\n\t'qa_start_date' => 'Дата начала',\n\t'qa_budget' => 'Бюджет',\n\t'qa_project_status' => 'Статус проекта',\n\t'qa_project_statuses' => 'Статусы проекта',\n\t'qa_transactions' => 'Транзакции',\n\t'qa_transaction_types' => 'Типа транзакций',\n\t'qa_transaction_type' => 'Тип транзакции',\n\t'qa_transaction_date' => 'Дата транзакции',\n\t'qa_currency' => 'Валюта',\n\t'qa_current_password' => 'Текущий пароль',\n\t'qa_new_password' => 'Новый пароль',\n\t'qa_password_confirm' => 'Новый пароль еще раз',\n\t'qa_dashboard_text' => 'Вы вошли в систему !',\n\t'qa_forgot_password' => 'Забыли пароль?',\n\t'qa_remember_me' => 'Запомнить меня',\n\t'qa_login' => 'Войти',\n\t'qa_change_password' => 'Сменить пароль',\n\t'qa_csv' => 'CSV',\n\t'qa_print' => 'Печать',\n\t'qa_excel' => 'Excel',\n\t'qa_copy' => 'Скопировать',\n\t'qa_colvis' => 'Видимость колонок',\n\t'qa_pdf' => 'PDF',\n\t'qa_reset_password' => 'Сброс пароля',\n\t'qa_reset_password_woops' => '<strong>Ой!</strong> Возникли проблемы со следующими подробностями:',\n\t'qa_email_line1' => 'Вы получили это письмо так как поступила заявка на смену пароля для вашего аккаунта',\n\t'qa_email_line2' => 'Если вы не запрашивали смену пароля, просто проигнорируйте это письмо. Ничего делать не нужно.',\n\t'qa_email_greet' => 'Здравствуйте!',\n\t'qa_email_regards' => 'С уважением',\n\t'qa_confirm_password' => 'Подтвердите пароль',\n\t'qa_if_you_are_having_trouble' => 'Если вы испытываете трудности, нажмите',\n\t'qa_copy_paste_url_bellow' => 'кнопку, скопируйте ссылку и вставьте а адресную строку браузера',\n\t'qa_please_select' => 'Пожалуйста, сделайте выбор',\n\t'qa_when_crud' => 'Когда CRUD',\n\t'qa_calendar_sources' => 'Источники календаря',\n\t'qa_new_calendar_source' => 'Создать новый источник календаря',\n\t'qa_label_field' => 'Поле для заголовка',\n\t'qa_no_calendar_sources' => 'Еще нет источников календаря',\n\t'qa_crud_event_field' => 'Поле заголовка мероприятия',\n\t'qa_create_new_calendar_source' => 'Создать новый источник календаря',\n\t'qa_edit_calendar_source' => 'Редактировать источник календаря',\n\t'qa_custom_controller_index' => 'Индивидуальный контроллер',\n\t'qa_registration' => 'Регистрация',\n\t'qa_not_approved_title' => 'Вы не подтвержены',\n\t'qa_not_approved_p' => 'Ваш аккаунт не подтвержден администратором. Пожалуйста, попробуйте войти позже.',\n\t'qa_whoops' => 'Упс!',\n\t'qa_register' => 'Регистрация',\n\t'qa_file_contains_header_row' => 'Файл содержит строку с заголовками столбцов?',\n\t'qa_csvImport' => 'Импорт CSV',\n\t'qa_csv_file_to_import' => 'CSV файл для импорта',\n\t'qa_parse_csv' => 'Спарсить CSV',\n\t'qa_import_data' => 'Импорт данных',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/ru/validation.php",
    "content": "<?php\nreturn [\n\n    'accepted' => 'Поле :attribute должно быть эквивалентно значениям \"yes\", \"on\", \"1\", или \"true\"',\n    'active_url' => 'Поле :attribute не является действительным URL',\n    'after' => 'Поле :attribute должно соответствовать дате идущей после даты :date.',\n    'alpha' => 'Поле :attribute может содержать только буквы',\n    'alpha_dash' => 'Поле :attribute может содержать только буквы, цифры и тире',\n    'alpha_num' => 'Поле :attribute может содержать только буквы и цифры',\n    'array' => 'Поле :attribute должно быть массивом',\n    'before' => 'Поле :attribute должно соответствовать дате идущей до даты :date.',\n    'between' => [\n        'numeric' => 'Значение поля :attribute должно находится в диапазоне от :min до :max',\n        'file' => 'размер загружаемого файла в поле :attribute должно находится в диапазоне от :min до :max килобайт',\n        'string' => 'Длина значение поля :attribute должна находится в диапазоне от :min до :max символов',\n        'array' => 'Поле :attribute должно содержать от :min до :max элементов',\n    ],\n    'boolean' => 'Поле :attribute должно иметь значение true или false',\n    'confirmed' => 'Поле :attribute и подтверждающее его поле не совпадают',\n    'date' => 'Значение поле :attribute не является датой в верном формате',\n    'date_format' => 'Значение поля :attribute не соответствует формату :format.',\n    'different' => 'Значения полей :attribute и :other должны отличатся',\n    'digits' => 'Значение поля :attribute должно соответствовать цифрам :digits',\n    'digits_between' => 'Значение поля :attribute должно находится в диапазоне от :min до :max цыфр',\n    'dimensions' => 'Изображение загруженное в поле :attribute имеет недопустимые размеры',\n    'distinct' => 'Массив в поле :attribute не должен содержать дублирующих значений',\n    'email' => 'Значение поля :attribute должно быть действительным адресом электронной почты',\n    'exists' => 'Значение поля :attribute недействительно',\n    'file' => 'Поле :attribute может принимать только файлы',\n    'filled' => 'Поле :attribute обязательно',\n    'image' => 'Поле :attribute должно быть изображением',\n    'in' => 'Значение поля :attribute недействительно',\n    'in_array' => 'Значение поля :attribute должно также присутствовать в поле :other',\n    'integer' => 'Значение поля :attribute должно быть целым числом',\n    'ip' => 'Значение поля :attribute должно быть действительным IP адресом',\n    'json' => 'Значение поля :attribute должно быть действительной JSON стокой',\n    'max' => [\n        'numeric' => 'Значение поля :attribute не должно превышать значение :max',\n        'file' => 'Значение поля :attribute не должно превышать значение :max килобайт',\n        'string' => 'Значение поля :attribute не должно быть длиннее :max символов',\n        'array' => 'Поле :attribute не должно содержать более чем :max элементов в массиве',\n    ],\n    'mimes' => 'Файл загружаемый в поле :attribute должен соответствовать форматам: :values. ',\n    'min' => [\n        'numeric' => 'Значение поля :attribute должно быть не меньше :min',\n        'file' => 'Файл загружаемый в поле :attribute должно быть размером не меньше :min килобайт',\n        'string' => 'Значение поля :attribute не должно быть короче :min символов',\n        'array' => 'Поле :attribute не должно содержать менее чем :min элементов в массиве',\n    ],\n    'not_in' => 'Значение поля :attribute недействительно',\n    'numeric' => 'Значение поля :attribute должно быть числом',\n    'present' => 'Поле :attribute должно обязательно присутствовать в запросе (но может быть пустым)',\n    'regex' => 'В поле :attribute переданы данные неверного формата',\n    'required' => 'Поле :attribute обязательно',\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'свой вариант сообщения',\n        ],\n    ],\n    'required_if' => 'Поле :attribute обязательно когда :other равно :value.',\n    'required_unless' => 'Поле :attribute обязательно когда :other равно одному из значений :values.',\n    'required_with' => 'Поле :attribute обязательно когда :values есть в запросе',\n    'required_with_all' => 'Поле :attribute обязательно когда :values есть в запросе',\n    'required_without' => 'Поле :attribute обязательно когда :values отсутствуют в запросе',\n    'required_without_all' => 'Поле :attribute обязательно когда ни одного из значений :values нет в запросе',\n    'same' => 'Поле :attribute и поле :other должны совпадать',\n    'size' => [\n        'numeric' => 'Поле :attribute должно быть размера :size.',\n        'file' => 'Поле :attribute должно быть размера :size килобайт',\n        'string' => 'Поле :attribute должно быть размера :size символов',\n        'array' => 'Поле :attribute должно иметь :size элементов',\n    ],\n    'string' => 'Поле :attribute должно быть строкой',\n    'timezone' => 'Поле :attribute должно быть действительной зоной',\n    'unique' => 'Поле :attribute уже занято',\n    'url' => 'Поле :attribute имеет неверный формат',\n\n];"
  },
  {
    "path": "resources/lang/tr/auth.php",
    "content": "<?php\nreturn [\n\n    'failed' => 'Bilgiler kayıtlarımızla uyuşmuyor',\n    'throttle' => 'Giriş yapmayı çok denediniz. Lütfen :seconds sonra tekrar deneyin',\n\n];"
  },
  {
    "path": "resources/lang/tr/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => '« Önce',\n    'next' => 'Sonra »',\n\n];"
  },
  {
    "path": "resources/lang/tr/passwords.php",
    "content": "<?php\nreturn [\n\n    'password' => 'Şifre en az 6 karakterli olmalı ve onay alanıyla aynı olmalı',\n    'reset' => 'Şifreniz yenilendi!',\n    'sent' => 'E-posta adresinize şifre yenileme postası gönderildi!',\n    'token' => 'Şifre yenileme işareti geçersiz.',\n    'user' => 'Bu e-posta adresiyle bir hesap bulamadık.',\n\n];"
  },
  {
    "path": "resources/lang/tr/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_create' => 'Oluştur',\n\t'qa_save' => 'Kaydet',\n\t'qa_edit' => 'Düzenle',\n\t'qa_view' => 'Görüntüle',\n\t'qa_update' => 'Güncelle',\n\t'qa_list' => 'Listele',\n\t'qa_no_entries_in_table' => 'Tabloda kayıt bulunamadı',\n\t'qa_custom_controller_index' => 'Özel denetçi dizini.',\n\t'qa_logout' => 'Çıkış yap',\n\t'qa_add_new' => 'Yeni ekle',\n\t'qa_are_you_sure' => 'Emin misiniz?',\n\t'qa_back_to_list' => 'Listeye dön',\n\t'qa_dashboard' => 'Kontrol Paneli',\n\t'qa_delete' => 'Sil',\n\t'qa_delete_selected' => 'Seçileni Sil',\n\t'qa_category' => 'Kategori',\n\t'qa_categories' => 'Kategoriler',\n\t'qa_sample_category' => 'Örnek Kategori',\n\t'qa_questions' => 'Sorular',\n\t'qa_question' => 'Soru',\n\t'qa_answer' => 'Cevap',\n\t'qa_sample_question' => 'Örnek Soru',\n\t'qa_sample_answer' => 'Örnek Cevap',\n\t'qa_faq_management' => 'SSS Yönetimi',\n\t'qa_administrator_can_create_other_users' => 'Yönetici (diğer kullanıcıları oluşturabilir)',\n\t'qa_simple_user' => 'Basit Kullanıcı',\n\t'qa_title' => 'Başlık',\n\t'qa_roles' => 'Roller',\n\t'qa_role' => 'Rol',\n\t'qa_user_management' => 'Kullanıcı Yönetimi',\n\t'qa_users' => 'Kullanıcılar',\n\t'qa_user' => 'Kullanıcı',\n\t'qa_name' => 'Ad',\n\t'qa_email' => 'E-posta',\n\t'qa_password' => 'Şifre',\n\t'qa_remember_token' => 'Beni Hatırla',\n\t'qa_subject' => 'Konu',\n\t'qa_message' => 'Mesaj',\n\t'qa_send' => 'Gönder',\n\t'qa_reply' => 'Cevapla',\n\t'qa_calendar_sources' => 'Takvim kaynağı',\n\t'qa_new_calendar_source' => 'Yeni takvim kaynağı oluştur',\n\t'qa_crud_title' => 'Crud başlığı',\n\t'qa_crud_date_field' => 'Crud tarih alanı',\n\t'qa_prefix' => 'Önek',\n\t'qa_label_field' => 'Etiket alanı',\n\t'qa_suffix' => 'Sonek',\n\t'qa_no_calendar_sources' => 'Henüz takvim kaynağı oluşturulmadı',\n\t'qa_crud_event_field' => 'Olay etiket alanı',\n\t'qa_create_new_calendar_source' => 'Takvim Kaynağı Oluştur',\n\t'qa_edit_calendar_source' => 'Takvim Kaynağını Düzenle',\n\t'qa_client_management' => 'Müşteri yönetimi',\n\t'qa_client_management_settings' => 'Müşteri yönetim ayarları',\n\t'qa_country' => 'Ülke',\n\t'qa_client_status' => 'Müşteri Durumu',\n\t'qa_clients' => 'Müşteriler',\n\t'qa_client_statuses' => 'Müşteri durumları',\n\t'qa_currencies' => 'Kurlar',\n\t'qa_main_currency' => 'Ana kur',\n\t'qa_documents' => 'Döküman',\n\t'qa_file' => 'Dosya',\n\t'qa_income_source' => 'Gelir kaynağı',\n\t'qa_income_sources' => 'Gelir kaynakları',\n\t'qa_fee_percent' => 'Ücret oranı',\n\t'qa_note_text' => 'Not yazısı',\n\t'qa_client' => 'Müşteri',\n\t'qa_start_date' => 'Başlangıç Tarihi',\n\t'qa_budget' => 'Bütçe',\n\t'qa_project_status' => 'Proje durumu',\n\t'qa_project_statuses' => 'Proje durumları',\n\t'qa_transactions' => 'İşlemler',\n\t'qa_transaction_types' => 'İşlem Türleri',\n\t'qa_transaction_type' => 'İşlem türü',\n\t'qa_transaction_date' => 'İşlem tarihi',\n\t'qa_currency' => 'Kur',\n\t'qa_current_password' => 'Geçerli şifreniz',\n\t'qa_new_password' => 'Yeni şifre',\n\t'qa_password_confirm' => 'Yeni şifreyi onayla',\n\t'qa_dashboard_text' => 'Giriş Yaptınız!',\n\t'qa_forgot_password' => 'Şifrenizi mi unuttunuz?',\n\t'qa_remember_me' => 'Beni Hatırla',\n\t'qa_login' => 'Giriş',\n\t'qa_change_password' => 'Şifreyi değiştir',\n\t'qa_csv' => 'CSV',\n\t'qa_print' => 'Yazdır',\n\t'qa_excel' => 'Excel',\n\t'qa_copy' => 'Kopyala',\n\t'qa_colvis' => 'Sütun görünürlüğü',\n\t'qa_pdf' => 'PDF',\n\t'qa_email_greet' => 'Merhaba',\n\t'qa_email_regards' => 'Saygılar',\n\t'qa_confirm_password' => 'Şifreyi onayla',\n\t'qa_if_you_are_having_trouble' => 'tıklamakta sorun yaşıyorsanız',\n\t'qa_please_select' => 'Lütfen seçiniz',\n\t'qa_register' => 'Kaydol',\n\t'qa_registration' => 'Kayıt',\n\t'qa_not_approved_title' => 'Onaylandmadınız',\n\t'qa_not_approved_p' => 'Hesabınız yönetici tarafından henüz onaylanmadı. Lütfen daha sonra tekrar deneyiniz.',\n\t'qa_restore' => 'Geri yükle',\n\t'qa_permadel' => 'Tamamen Sil',\n\t'qa_all' => 'Hepsi',\n\t'qa_trash' => 'Çöp',\n\t'qa_permissions' => 'İzinler',\n\t'qa_user_actions' => 'Kullanıcı hareketleri',\n\t'qa_action' => 'Hareket',\n\t'qa_action_model' => 'Hareket Modeli',\n\t'qa_action_id' => 'Hareket id',\n\t'qa_time' => 'Zaman',\n\t'qa_campaign' => 'Kampanya',\n\t'qa_campaigns' => 'Kampanyalar',\n\t'qa_description' => 'Açıklama',\n\t'qa_valid_from' => 'Zamanından itibaren',\n\t'qa_valid_to' => 'Zamanına kadar',\n\t'qa_discount_amount' => 'İndirim tutarı',\n\t'qa_discount_percent' => 'İndirim yüzdesi',\n\t'qa_coupons_amount' => 'Kupon tutarı',\n\t'qa_coupons' => 'Kuponlar',\n\t'qa_code' => 'Kod',\n\t'qa_redeem_time' => 'Ödeme zamanı',\n\t'qa_coupon_management' => 'Kupon yönetimi',\n\t'qa_time_management' => 'Tarih yönetimi',\n\t'qa_projects' => 'Projeler',\n\t'qa_reports' => 'Raporlar',\n\t'qa_time_entries' => 'Tarih girdileri',\n\t'qa_work_type' => 'Çalışma türü',\n\t'qa_work_types' => 'Çalışma türleri',\n\t'qa_project' => 'Proje',\n\t'qa_start_time' => 'Başlangıç zamanı',\n\t'qa_end_time' => 'Bitiş zamanı',\n\t'qa_expense_category' => 'Gider Kategorisi',\n\t'qa_expense_categories' => 'Gider Kategorileri',\n\t'qa_expense_management' => 'Gider Yönetimi',\n\t'qa_expenses' => 'Giderler',\n\t'qa_expense' => 'Gider',\n\t'qa_entry_date' => 'Giriş tarihi',\n\t'qa_amount' => 'Tutar',\n\t'qa_income_categories' => 'Gelir kategorileri',\n\t'qa_monthly_report' => 'Aylık rapor',\n\t'qa_companies' => 'Şirketler',\n\t'qa_company_name' => 'Şirket adı',\n\t'qa_address' => 'Adres',\n\t'qa_website' => 'Website',\n\t'qa_contact_management' => 'İletişim yönetimi',\n\t'qa_contacts' => 'İrtibatlar',\n\t'qa_company' => 'Şirket',\n\t'qa_first_name' => 'Ad',\n\t'qa_last_name' => 'Soyad',\n\t'qa_phone' => 'Telefon',\n\t'qa_phone1' => 'Telefon 1',\n\t'qa_phone2' => 'Telefon 2',\n\t'qa_skype' => 'Skype',\n\t'qa_photo' => 'Fotoğraf (max 8mb)',\n\t'qa_category_name' => 'Kategori adı',\n\t'qa_product_management' => 'Ürün yönetimi',\n\t'qa_products' => 'Ürünler',\n\t'qa_product_name' => 'Ürün adı',\n\t'qa_price' => 'Fiyat',\n\t'qa_tags' => 'Etiketler',\n\t'qa_tag' => 'Etiket',\n\t'qa_photo1' => 'Fotoğraf 1',\n\t'qa_photo2' => 'Fotoğraf 2',\n\t'qa_photo3' => 'Fotoğraf 3',\n\t'qa_calendar' => 'Takvim',\n\t'qa_statuses' => 'Durumlar',\n\t'qa_task_management' => 'Görev Yönetimi',\n\t'qa_tasks' => 'Görevler',\n\t'qa_status' => 'Durum',\n\t'qa_attachment' => 'Ek',\n\t'qa_due_date' => 'Vade tarihi',\n\t'qa_assigned_to' => 'Atanmış',\n\t'qa_assets' => 'Varlıklar',\n\t'qa_asset' => 'Varlık',\n\t'qa_serial_number' => 'Seri numarası',\n\t'qa_location' => 'Yer',\n\t'qa_locations' => 'Yerler',\n\t'qa_assigned_user' => 'Atanmış (kullanıcı)',\n\t'qa_notes' => 'Notlar',\n\t'qa_assets_history' => 'Varlık geçmişi',\n\t'qa_assets_management' => 'Varlık yönetimi',\n\t'qa_slug' => 'Kısa İsim',\n\t'qa_content_management' => 'İçerik Yönetimi',\n\t'qa_text' => 'Yazı',\n\t'qa_excerpt' => 'Alıntı',\n\t'qa_featured_image' => 'Öne çıkan fotoğraf',\n\t'qa_pages' => 'Sayfalar',\n\t'qa_axis' => 'Eksen',\n\t'qa_show' => 'Göster',\n\t'qa_group_by' => 'Grupla',\n\t'qa_chart_type' => 'Çizelge türü',\n\t'qa_create_new_report' => 'Yeni rapor oluştur',\n\t'qa_no_reports_yet' => 'Henüz rapor yok.',\n\t'qa_created_at' => 'tarihinde oluşturuldu',\n\t'qa_updated_at' => 'tarihinde güncellendi',\n\t'qa_deleted_at' => 'tarihinde silindi',\n\t'qa_reports_x_axis_field' => 'X-ekseni - lütfen tarih/zaman seçimi yapınız',\n\t'qa_reports_y_axis_field' => 'Y-ekseni - lütfen tarih/zaman seçimi yapınız',\n\t'qa_select_crud_placeholder' => 'Lütfen üretilecek rapor alanını seçiniz',\n\t'qa_select_dt_placeholder' => 'Lütfen tarih/zamandan birini seçiniz.',\n\t'qa_aggregate_function_use' => 'Kullanmak için fnoksiyonları toplayınız',\n\t'qa_x_axis_group_by' => 'X-eksenini grupla',\n\t'qa_x_axis_field' => 'X-eksen alanı (tarih/zaman)',\n\t'qa_y_axis_field' => 'Y-eksen alanı',\n\t'qa_integer_float_placeholder' => 'Lütfen alanlardan birini seçiniz',\n\t'qa_change_notifications_field_1_label' => 'Kullanıcılara uyarı mesajı gönder',\n\t'qa_select_users_placeholder' => 'Lütfen kullanıcılarınızdan birini seçiniz',\n\t'qa_is_created' => 'oluşturuldu',\n\t'qa_is_updated' => 'güncellendi',\n\t'qa_is_deleted' => 'silindi',\n\t'qa_notifications' => 'Bildiriler',\n\t'qa_notify_user' => 'Kullanıcıya Bildir',\n\t'qa_create_new_notification' => 'Yeni bildiri oluştur',\n\t'qa_messages' => 'Mesajlar',\n\t'qa_you_have_no_messages' => 'Mesajınız yok',\n\t'qa_all_messages' => 'Tüm mesajlar',\n\t'qa_new_message' => 'Yeni Mesaj',\n\t'qa_outbox' => 'Giden kutusu',\n\t'qa_inbox' => 'Gelen kutusu',\n\t'qa_recipient' => 'Alıcı',\n\t'qa_reset_password' => 'Şifreyi yenile',\n\t'qa_reset_password_woops' => '<strong>Tüh!</strong> input: ile ilgili sorunlar var',\n\t'qa_email_line1' => 'Hesabınızla ilgili şifre yenileme talebi aldık. ',\n\t'qa_email_line2' => 'Şifre yenileme talebinden bulunmadıysanız bu mesajı görmezden geliniz.',\n\t'qa_copy_paste_url_bellow' => 'lütfen üstteki URLyi yeni bir sayfada açınız.',\n\t'qa_stripe_transactions' => 'Stripe Alışverişleri',\n\t'qa_upgrade_to_premium' => 'Premiuma Geçin',\n\t'qa_there_were_problems_with_input' => 'Girdide sorunlar var',\n\t'qa_whoops' => 'Tüh!',\n\t'qa_csvImport' => 'CSV Yükleme',\n\t'qa_csv_file_to_import' => 'Yüklenecek CSV dosyası',\n\t'qa_change_notifications_field_2_label' => 'Kayıt Eklendiğinde',\n\t'qa_when_crud' => 'CRUD Oluşturulurken',\n\t'qa_file_contains_header_row' => 'Dosyada başlık sütunu mevcut mu?',\n\t'qa_parse_csv' => 'Yükle',\n\t'qa_import_data' => 'Veriyi İçeri Al',\n\t'qa_imported_rows_to_table' => ':rows sütunları :table tablosuna eklenmiştir',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/tr/validation.php",
    "content": "<?php\nreturn [\n\n    'accepted' => ':attribute kabul edilmeli.',\n    'active_url' => ':attribute geçerli bir URL değil.',\n    'after' => ':attribute :date\\'den sonraki bir tarih olmalı.',\n    'alpha' => ':attribute sadece harf içerebilir.',\n    'alpha_dash' => ':attribute sadece harf, sayı ve kesik çizgiler içerebilir.',\n    'alpha_num' => ':attribute sadece harf ve sayı içerebilir.',\n    'array' => ':attribute dizi olmalı.',\n    'before' => ':attribute :date\\'den önceki bir tarih olmalı.',\n    'between' => [\n        'numeric' => ':attribute :min ve :max aralığında olmalı.',\n        'file' => ':attribute :min ve :max kilobyte aralığında olmalı.',\n        'string' => ':attribute :min ve :max karakter aralığında olmalı.',\n        'array' => ':attribute :min ve :max madde aralığında olmalı.',\n    ],\n    'boolean' => ':attribute doğru yada yanlış olmalı.',\n    'confirmed' => ':attribute doğrulama eşleşmiyor.',\n    'date' => ':attribute geçerli bir tarih olmalı.',\n    'date_format' => ':attribute :format formatıyle uyuşmuyor.',\n    'different' => ':attribute ve :other farklı olmalı.',\n    'digits' => ':attribute :digits basamağında olmalı.',\n    'digits_between' => ':attribute basamakları :min ve :max aralığında olmalı.',\n    'dimensions' => ':attribute geçersiz ölçülerde.',\n    'distinct' => ':attribute daha önce kullanıldı.',\n    'email' => ':attribute geçerli e-posta adresi olmalı.',\n    'exists' => 'Seçilen :attribute geçersiz.',\n    'file' => ':attribute dosya olmalı.',\n    'filled' => ':attribute alanı gerekmekte.',\n    'image' => ':attribute fotoğraf olmalı.',\n    'in' => 'Seçilen :attribute geçersiz.',\n    'in_array' => ':attribute :other\\'da bulunmuyor.',\n    'integer' => ':attribute tam sayı olmalı.',\n    'ip' => ':attribute geçerli bir IP adresi olmalı.',\n    'json' => ':attribute geçerli bir JSON olmalı.',\n    'max' => [\n        'numeric' => ':attribute :max sayısından büyük olmalı.',\n        'file' => ':attribute :max kilobayttan büyük olmamalı',\n        'string' => ':attribute :max sayısından büyük olmamalı',\n        'array' => ':attribute :max parçadan büyük olmamalı',\n    ],\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'özel-mesaj',\n        ],\n    ],\n    'mimes' => ':attribute :values türünde bir dosya olmalı',\n    'min' => [\n        'numeric' => ':attribute en az :min olmalı',\n        'file' => ':attribute en az :min kiobayt olmalı',\n        'string' => ':attribute en az :min karakter olmalı',\n        'array' => ':attribute en az :min parça olmalı',\n    ],\n    'not_in' => 'Seçilen :attribute geçersiz',\n    'numeric' => ':atttribute numara olmalı',\n    'present' => ':attribute alanı şimdiki zamanda olmalı',\n    'regex' => ':attribute geçersiz formatta',\n    'required' => ':attribute gerekli',\n    'required_if' => ':attribute :other :values olduğunda gereklidir',\n    'required_unless' => ':attribute :other :values içinde olduğunda gereklidir',\n    'required_with' => ':attribute :other :values şimdiki zaman olduğunda gereklidir',\n    'required_with_all' => ':attribute :values şimdiki zaman olduğunda gereklidir',\n    'required_without' => ':attribute :values şimdiki zaman olmadığında gereklidir',\n    'required_without_all' => ':attribute hiçbir :values şimdiki zaman olmadığında gereklidir',\n    'same' => ':attribute ve :other eşleşmelidir',\n    'size' => [\n        'numeric' => ':attribute :size olmalı',\n        'file' => ':attribute :size kilobayt olmalı',\n        'string' => ':attribute :size karakter olmalı',\n        'array' => ':attribute :size parçayı içermeli',\n    ],\n    'string' => ':attribute karakterlerden oluşmalı',\n    'timezone' => ':attribute gerçeli bölgede olmadı',\n    'unique' => ':attribute halihazırda alındı',\n    'url' => ':attribute gerçersiz formatta',\n\n];"
  },
  {
    "path": "resources/lang/ua/auth.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/ua/pagination.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/ua/passwords.php",
    "content": "<?php\nreturn [\n\n\n];"
  },
  {
    "path": "resources/lang/ua/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_forgot_password' => 'Забули пароль?',\n\t'qa_login' => 'Увійти',\n\t'qa_change_password' => 'Змінити пароль',\n\t'qa_print' => 'Друк',\n\t'qa_copy' => 'Скопіювати',\n\t'qa_pdf' => 'PDF',\n\t'qa_email_greet' => 'Вітаємо',\n\t'qa_email_regards' => 'С повагою',\n\t'qa_confirm_password' => 'Підтвердіть пароль',\n\t'qa_please_select' => 'Будь-ласка, веберіть',\n\t'qa_create' => 'Створити',\n\t'qa_save' => 'Зберегти',\n\t'qa_edit' => 'Редагувати',\n\t'qa_all' => 'Усі',\n\t'qa_trash' => 'Кошик',\n\t'qa_view' => 'Перегляд',\n\t'qa_update' => 'Оновити',\n\t'qa_list' => 'Список',\n\t'qa_no_entries_in_table' => 'Немає даних',\n\t'qa_logout' => 'Вихід',\n\t'qa_add_new' => 'Додати',\n\t'qa_are_you_sure' => 'Ви впевнені?',\n\t'qa_back_to_list' => 'Назад до списку',\n\t'qa_dashboard' => 'Панель управління',\n\t'qa_delete' => 'Видалити',\n\t'qa_delete_selected' => 'Видалити помічені',\n\t'qa_category' => 'Категорія',\n\t'qa_categories' => 'Категорії',\n\t'qa_sample_category' => 'Приклад категорії',\n\t'qa_questions' => 'Запитання',\n\t'qa_question' => 'Запитання',\n\t'qa_answer' => 'Відповідь',\n\t'qa_sample_question' => 'Приклад запитання',\n\t'qa_sample_answer' => 'Приклад відповіді',\n\t'qa_faq_management' => 'Менеджер FAQ',\n\t'qa_users' => 'Користувачі',\n\t'qa_user' => 'Користувач',\n\t'qa_name' => 'Ім\\'я',\n\t'qa_email' => 'Email',\n\t'qa_password' => 'Пароль',\n\t'qa_remember_token' => 'Запамятати токен',\n\t'qa_permissions' => 'Дозволи',\n\t'qa_action' => 'Дії',\n\t'qa_time' => 'Час',\n\t'qa_coupons' => 'Купони',\n\t'qa_code' => 'Код',\n\t'qa_client' => 'Клі',\n\t'qa_start_date' => 'Дата початку',\n\t'qa_budget' => 'Бюджет',\n\t'qa_project_status' => 'Статус проекта',\n\t'qa_project_statuses' => 'Статуси проектів',\n\t'qa_transactions' => 'Транзакції',\n\t'qa_transaction_types' => 'Тип транзакцій',\n\t'qa_transaction_type' => 'Тип транзакції',\n\t'qa_transaction_date' => 'Дата транзакції',\n\t'qa_currency' => 'Валюта',\n\t'qa_current_password' => 'Діючий пароль',\n\t'qa_new_password' => 'Новий пароль',\n\t'qa_password_confirm' => 'Новий пароль підтвердження',\n\t'qa_dashboard_text' => 'Ви ввійшли в систему!',\n\t'qa_remember_me' => 'Запам\\'ятати мене',\n\t'qa_csv' => 'CSV',\n\t'qa_excel' => 'Excel',\n\t'qa_colvis' => 'Видимість колонок',\n\t'qa_reset_password' => 'Відновити пароль',\n\t'qa_if_you_are_having_trouble' => 'Якщо виникли труднощі, натисніть',\n\t'qa_copy_paste_url_bellow' => 'кнопку, скопіюйте посилання та вставте в адресний рядок браузера',\n\t'qa_register' => 'Реєстрація',\n\t'qa_registration' => 'Реєстрація',\n\t'qa_not_approved_title' => 'Ви не затверджені',\n\t'qa_not_approved_p' => 'Ваш обліковий запис все ще не схвалений адміністратором. Будь ласка, будьте терплячі та спробуйте зайти пізніше.',\n\t'qa_restore' => 'Відновити',\n\t'qa_permadel' => 'Видалити назавжди',\n\t'qa_administrator_can_create_other_users' => 'Адмін (може створювати користувачів)',\n\t'qa_simple_user' => 'Користувач',\n\t'qa_user_management' => 'Менеджер користувачів',\n\t'qa_projects' => 'Проекти',\n\t'qa_reports' => 'Звіти',\n\t'qa_project' => 'Проект',\n\t'qa_end_time' => 'Час закінчення',\n\t'qa_amount' => 'Ціна',\n\t'qa_monthly_report' => 'Місячний звіт',\n\t'qa_companies' => 'Компанії',\n\t'qa_company_name' => 'Назва компанії',\n\t'qa_address' => 'Адреса',\n\t'qa_website' => 'Веб-сайт',\n\t'qa_company' => 'Компанія',\n\t'qa_first_name' => 'Ім\\'я',\n\t'qa_last_name' => 'Прізвище',\n\t'qa_phone' => 'Телефон',\n\t'qa_phone1' => 'Телефон 1',\n\t'qa_phone2' => 'Телефон 2',\n\t'qa_skype' => 'Скайп',\n\t'qa_photo' => 'Фото (макс. 8мб)',\n\t'qa_category_name' => 'Назва категорії',\n\t'qa_products' => 'Товари',\n\t'qa_product_name' => 'Назва товару',\n\t'qa_price' => 'Ціна',\n\t'qa_tags' => 'Теги',\n\t'qa_tag' => 'Тег',\n\t'qa_photo1' => 'Фото 1',\n\t'qa_photo2' => 'Фото 2',\n\t'qa_photo3' => 'Фото 3',\n\t'qa_calendar' => 'Календар',\n\t'qa_statuses' => 'Стутус',\n\t'qa_task_management' => 'Менеджер завдань',\n\t'qa_tasks' => 'Завдання',\n\t'qa_status' => 'Статус',\n\t'qa_attachment' => 'Вкладення',\n\t'qa_text' => 'Текст',\n\t'qa_pages' => 'Сторінки',\n\t'qa_create_new_report' => 'Створити новий звіт',\n\t'qa_created_at' => 'Створено',\n\t'qa_updated_at' => 'Оновлено',\n\t'qa_deleted_at' => 'Видалено',\n\t'qa_upgrade_to_premium' => 'Оновити до Преміум',\n\t'qa_messages' => 'Повідомлення',\n\t'qa_you_have_no_messages' => 'У Вас немає повідомлень.',\n\t'qa_all_messages' => 'Всі повідомлення',\n\t'qa_new_message' => 'Нове повідомлення',\n\t'qa_outbox' => 'Відправлені',\n\t'qa_inbox' => 'Отримані',\n\t'qa_recipient' => 'Одержувач',\n\t'qa_subject' => 'Тема',\n\t'qa_message' => 'Повідомлення',\n\t'qa_send' => 'Відправити',\n\t'qa_reply' => 'Відповідь',\n\t'qa_client_management' => 'Управління клієнтами',\n\t'qa_client_management_settings' => 'Налаштування клієнта',\n\t'qa_country' => 'Країна',\n\t'qa_client_status' => 'Статус клієнта',\n\t'qa_clients' => 'Клієнти',\n\t'qa_client_statuses' => 'Статуси клієнтів',\n\t'qa_currencies' => 'Валюти',\n\t'qa_main_currency' => 'Основна валюта',\n\t'qa_documents' => 'Документи',\n\t'qa_file' => 'Файл',\n\t'qa_income_source' => 'Джерело доходу',\n\t'qa_income_sources' => 'Джерела доходів',\n\t'qa_fee_percent' => 'Комісійні відсотки',\n\t'qa_note_text' => 'Текст примітки',\n\t'qa_reset_password_woops' => '<strong>Оце ти видав!</strong> Є проблеми з введенням:',\n\t'qa_email_line1' => 'Ви отримуєте цей електронний лист, оскільки ми отримали запит на відновлення пароля для вашого облікового запису.',\n\t'qa_email_line2' => 'Якщо ви не надіслали запит на відновлення пароля, подальші Ваші дії не потрібні.',\n\t'qa_title' => 'Назва',\n\t'qa_roles' => 'Ролі',\n\t'qa_role' => 'Роль',\n\t'qa_user_actions' => 'Дії користувача',\n\t'qa_action_model' => 'Модель / Сутність Активності',\n\t'qa_action_id' => 'ID Активності',\n\t'qa_campaign' => 'Кампанія',\n\t'qa_campaigns' => 'Кампанії',\n\t'qa_description' => 'Опис',\n\t'qa_valid_from' => 'Діє з',\n\t'qa_valid_to' => 'Діє до',\n\t'qa_discount_amount' => 'Сума знижки',\n\t'qa_discount_percent' => 'Відсоток знижки',\n\t'qa_coupons_amount' => 'Суми купонів',\n\t'qa_redeem_time' => 'Час викупу',\n\t'qa_coupon_management' => 'Управління купонами',\n\t'qa_time_management' => 'Тайм менеджмент',\n\t'qa_time_entries' => 'Записи часу',\n\t'qa_work_type' => 'Тип роботи',\n\t'qa_work_types' => 'Види робіт',\n\t'qa_start_time' => 'Час початку',\n\t'qa_expense_category' => 'Категорія витрат',\n\t'qa_expense_categories' => 'Категорії витрат',\n\t'qa_expense_management' => 'Управління витратами',\n\t'qa_expenses' => 'Витрати',\n\t'qa_expense' => 'Витрата',\n\t'qa_entry_date' => 'Дата вводу',\n\t'qa_income_categories' => 'Категорії доходів',\n\t'qa_contact_management' => 'Управління контактами',\n\t'qa_contacts' => 'Контакты',\n\t'qa_product_management' => 'Управління товарами',\n\t'qa_due_date' => 'Термін сплати',\n\t'qa_assigned_to' => 'Присвоєно',\n\t'qa_assets' => 'Активи',\n\t'qa_asset' => 'Актив',\n\t'qa_serial_number' => 'Серійний номер',\n\t'qa_location' => 'Місцезнаходження',\n\t'qa_locations' => 'Місцезнаходження',\n\t'qa_assigned_user' => 'Призначено (користувач)',\n\t'qa_notes' => 'Примітки',\n\t'qa_assets_history' => 'Історія активів',\n\t'qa_assets_management' => 'Управління активами',\n\t'qa_slug' => 'URL (ЧПУ)',\n\t'qa_content_management' => 'Управління контентом',\n\t'qa_excerpt' => 'Експерт',\n\t'qa_featured_image' => 'Популярні зображення',\n\t'qa_axis' => 'Вісь',\n\t'qa_show' => 'Показати',\n\t'qa_group_by' => 'Групувати за',\n\t'qa_chart_type' => 'Тип діаграми',\n\t'qa_no_reports_yet' => 'Поки немає жодного звіту',\n\t'qa_integer_float_placeholder' => 'Будь ласка виберіть одне з числових полів',\n\t'qa_change_notifications_field_1_label' => 'Надсилати електронне сповіщення Користувачеві',\n\t'qa_change_notifications_field_2_label' => 'При вступі на CRUD',\n\t'qa_select_users_placeholder' => 'Будь ласка, виберіть одного з ваших користувачів',\n\t'qa_is_created' => 'створено',\n\t'qa_is_updated' => 'оновлено',\n\t'qa_is_deleted' => 'видалено',\n\t'qa_notifications' => 'Сповіщення',\n\t'qa_notify_user' => 'Сповістити користувача',\n\t'qa_when_crud' => 'Коли CRUD',\n\t'qa_create_new_notification' => 'Створити нове сповіщення',\n\t'qa_stripe_transactions' => 'Stripe Транзакції',\n\t'qa_calendar_sources' => 'Джерела календаря',\n\t'qa_new_calendar_source' => 'Створення нового джерела для календаря',\n\t'qa_crud_title' => 'Назва CRUD',\n\t'qa_crud_date_field' => 'Поле з типом \\\"дата\\\" CRUD',\n\t'qa_prefix' => 'Префікс',\n\t'qa_label_field' => 'Мітка поля',\n\t'qa_suffix' => 'Суфікс',\n\t'qa_no_calendar_sources' => 'Ще немає інформації для календаря.',\n\t'qa_crud_event_field' => 'Мітка поля події',\n\t'qa_create_new_calendar_source' => 'Створити нове джерело календаря',\n\t'qa_edit_calendar_source' => 'Редагувати джерело календаря',\n\t'qa_custom_controller_index' => 'Індивідуальний  контролер.',\n\t'qa_reports_x_axis_field' => 'Ось-Х - будь-ласка виберіть одне з полів дати/часу',\n\t'qa_reports_y_axis_field' => 'Ось-Y - будь-ласка виберіть одне з полів дати/часу',\n\t'qa_select_crud_placeholder' => 'Будь-ласка, виберіть один зі своїх CRUD',\n\t'qa_select_dt_placeholder' => 'Будь-ласка, виберіть одне з полів дати/часу',\n\t'qa_aggregate_function_use' => 'Яку агрегатну функцію використовувати?',\n\t'qa_x_axis_group_by' => 'Ось-Х групувати по',\n\t'qa_x_axis_field' => 'Поле Осі-Х (дата/час)',\n\t'qa_y_axis_field' => 'Поле осі-Y',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/ua/validation.php",
    "content": "<?php\nreturn [\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'свій варіант повідомлення',\n        ],\n    ],\n    'accepted' => 'Поле :attribute має бути еквівалентним значенням \"yes\", \"on\", \"1\", або \"true\"',\n    'active_url' => 'Поле :attribute не є дійсним URL',\n    'after' => 'Поле :attribute має відповідати даті яка йде після дати: date.',\n    'alpha' => 'Поле :attribute може містити тільки літери',\n    'alpha_dash' => 'Поле :attribute може містити тільки букви, цифри та тире',\n    'alpha_num' => 'Поле :attribute може містити тільки букви і цифри',\n    'array' => 'Поле :attribute має бути масивом',\n    'before' => 'Поле :attribute має відповідати даті яка йде до дати: date.',\n    'between' => [\n        'numeric' => 'Значення поля :attribute повинно знаходитися в діапазоні від: min до: max',\n        'file' => 'розмір файлу в полі :attribute має знаходитися в діапазоні від :min до :max кілобайт',\n        'string' => 'Довжина значення поля :attribute повинна знаходиться в діапазоні від :min до :max символів',\n        'array' => 'Поле :attribute повинно містити від :min до :max елементів',\n    ],\n    'boolean' => 'Поле :attribute повинно мати значення true або false',\n    'required_without' => 'Поле :attribute обов\\'язково коли :values відсутні в запиті',\n    'required_without_all' => 'Поле :attribute обов\\'язково коли жодного з значень :values немає в запиті',\n    'same' => 'Поле: attribute і поле :other повинні збігатися',\n    'size' => [\n        'numeric' => 'Поле :attribute має бути розміру :size.',\n        'file' => 'Поле :attribute має бути розміру :size кілобайт',\n        'string' => 'Поле :attribute має бути розміру :size символів',\n        'array' => 'Поле :attribute повинно мати :size елементів',\n    ],\n    'string' => 'Поле :attribute має бути рядком',\n    'timezone' => 'Поле :attribute має бути дійсною зоною',\n    'unique' => 'Поле :attribute вже зайнято',\n    'url' => 'Поле :attribute має невірний формат',\n    'numeric' => 'Значення поля :attribute має бути числом',\n    'present' => 'Поле :attribute має бути обов\\'язково присутня в запиті (але може бути порожнім)',\n    'regex' => 'В полі :attribute передані дані невірного формату',\n    'required' => 'Поле :attribute обов\\'язково',\n    'required_if' => 'Поле :attribute обов\\'язково коли :other одне :value.',\n    'required_unless' => 'Поле :attribute обов\\'язково коли :other дорівнює :value.',\n    'required_with' => 'Поле :attribute обов\\'язково коли :values є в запиті',\n    'required_with_all' => 'Поле :attribute обов\\'язково коли :values є в запиті',\n    'confirmed' => 'Поле :attribute і підтверджуюче його поле не збігаються',\n    'date' => 'Значення поле :attribute не є датою в правильному форматі',\n    'date_format' => 'Значення поля :attribute не відповідає формату :format.',\n    'different' => 'Значення полів :attribute і :other повинні відрізняться',\n    'digits' => 'Значення поля :attribute має відповідати цифрам :digits',\n    'digits_between' => 'Значення поля :attribute має знаходитися в діапазоні від :min до :max цифрах',\n    'dimensions' => 'Зображення завантажене в поле :attribute має неприпустимі розміри',\n    'distinct' => 'Масив в полі :attribute не повинен містити дублюючих значень',\n    'email' => 'Значення поля :attribute має бути дійсною адресою електронної пошти',\n    'exists' => 'Значення поля :attribute недійсне',\n    'file' => 'Поле :attribute може приймати тільки файли',\n    'filled' => 'Поле :attribute обов\\'язкове',\n    'image' => 'Поле :attribute має бути зображенням',\n    'in' => 'Значення поля :attribute недійсне',\n    'in_array' => 'Значення поля :attribute має також бути присутнім в поле :other',\n    'integer' => 'Значення поля :attribute має бути цілим числом',\n    'ip' => 'Значення поля :attribute має бути дійсною IP адресою',\n    'json' => 'Значення поля :attribute має бути дійсною JSON',\n    'max' => [\n        'numeric' => 'Значення поля :attribute не повинно перевищувати значення :max',\n        'file' => 'Значення поля :attribute не повинно перевищувати значення :max кілобайт',\n        'string' => 'Значення поля :attribute не повинно бути довшим :max символів',\n        'array' => 'Поле :attribute не повинно містити більше ніж :max елементів в масиві',\n    ],\n    'mimes' => 'Файл який завантажується в поле :attribute повинен відповідати форматам: :values.',\n    'min' => [\n        'numeric' => 'Значення поля :attribute має бути не менше :min',\n        'file' => 'Файл який завантажується в поле :attribute має бути розміром не менше :min кілобайт',\n        'string' => 'Значення поля :attribute не повинно бути коротше :min символів',\n        'array' => 'Поле :attribute не повинно містити менш ніж :min елементів в масиві',\n    ],\n    'not_in' => 'Значення поля :attribute недійсне',\n\n];"
  },
  {
    "path": "resources/lang/zh/auth.php",
    "content": "<?php\nreturn [\n\n    'failed' => '登入憑證與我們的記錄不符。',\n    'throttle' => '登入錯誤次數過多, 請:seconds秒後再試。',\n\n];"
  },
  {
    "path": "resources/lang/zh/pagination.php",
    "content": "<?php\nreturn [\n\n    'previous' => '« 上一頁',\n    'next' => '下一頁 »',\n\n];"
  },
  {
    "path": "resources/lang/zh/passwords.php",
    "content": "<?php\nreturn [\n\n    'password' => '密碼必須至少包含六個字符並與確保確認密碼相符。',\n    'reset' => '密碼重設成功',\n    'sent' => '我們已發送電子郵件去你的電子郵箱',\n    'token' => '重設密碼令牌無效',\n    'user' => '我們無法找到用戶',\n\n];"
  },
  {
    "path": "resources/lang/zh/quickadmin.php",
    "content": "<?php\n\nreturn [\n\t\r\t'user-management' => [\r\t\t'title' => 'User management',\r\t\t'fields' => [\r\t\t],\r\t],\n\t\r\t'roles' => [\r\t\t'title' => 'Roles',\r\t\t'fields' => [\r\t\t\t'title' => 'Title',\r\t\t],\r\t],\n\t\r\t'users' => [\r\t\t'title' => 'Users',\r\t\t'fields' => [\r\t\t\t'name' => 'Name',\r\t\t\t'email' => 'Email',\r\t\t\t'password' => 'Password',\r\t\t\t'role' => 'Role',\r\t\t\t'remember-token' => 'Remember token',\r\t\t],\r\t],\n\t\r\t'countries' => [\r\t\t'title' => 'Countries',\r\t\t'fields' => [\r\t\t\t'shortcode' => 'Shortcode',\r\t\t\t'title' => 'Title',\r\t\t\t'name' => 'Name',\r\t\t],\r\t],\n\t\r\t'customers' => [\r\t\t'title' => 'Customers',\r\t\t'fields' => [\r\t\t\t'first-name' => 'First name',\r\t\t\t'last-name' => 'Last name',\r\t\t\t'address' => 'Address',\r\t\t\t'phone' => 'Phone',\r\t\t\t'email' => 'Email',\r\t\t\t'country' => 'Country',\r\t\t],\r\t],\n\t\r\t'rooms' => [\r\t\t'title' => 'Rooms',\r\t\t'fields' => [\r\t\t\t'room-number' => 'Room number',\r\t\t\t'floor' => 'Floor',\r\t\t\t'description' => 'Description',\r\t\t],\r\t],\n\t\r\t'bookings' => [\r\t\t'title' => 'Bookings',\r\t\t'fields' => [\r\t\t\t'customer' => 'Customer',\r\t\t\t'room' => 'Room',\r\t\t\t'time-from' => 'Time from',\r\t\t\t'time-to' => 'Time to',\r\t\t\t'additional-information' => 'Additional information',\r\t\t],\r\t],\n\t\r\t'find-room' => [\r\t\t'title' => 'Find room',\r\t\t'fields' => [\r\t\t],\r\t],\n\t'qa_create' => '新增',\n\t'qa_save' => '儲存',\n\t'qa_edit' => '編輯',\n\t'qa_restore' => '還原',\n\t'qa_permadel' => '永久刪除',\n\t'qa_all' => '所有',\n\t'qa_trash' => '垃圾箱',\n\t'qa_view' => '檢視',\n\t'qa_update' => '更新',\n\t'qa_list' => '列表',\n\t'qa_no_entries_in_table' => '沒有紀錄',\n\t'qa_logout' => '登出',\n\t'qa_add_new' => '新增',\n\t'qa_are_you_sure' => '確定?',\n\t'qa_back_to_list' => '返回',\n\t'qa_dashboard' => '管理區',\n\t'qa_delete' => '刪除',\n\t'qa_delete_selected' => '刪除選擇',\n\t'qa_category' => '類別',\n\t'qa_categories' => '類別',\n\t'qa_sample_category' => '示範類別',\n\t'qa_questions' => '問題',\n\t'qa_question' => '問題',\n\t'qa_answer' => '答案',\n\t'qa_sample_question' => '示範問題',\n\t'qa_sample_answer' => '示範答案',\n\t'qa_faq_management' => '常見問題管理',\n\t'qa_administrator_can_create_other_users' => '系統管理員(可以新增其他用戶)',\n\t'qa_simple_user' => '普通用戶',\n\t'qa_roles' => '角式',\n\t'qa_role' => '角式',\n\t'qa_user_management' => '會友管理',\n\t'qa_users' => '會友',\n\t'qa_user' => '會友',\n\t'qa_name' => '名稱',\n\t'qa_email' => '電子郵件',\n\t'qa_password' => '密碼',\n\t'qa_permissions' => '權限',\n\t'qa_user_actions' => '用戶操作',\n\t'qa_action' => '操作',\n\t'qa_time' => '時間',\n\t'qa_campaign' => '運動',\n\t'qa_campaigns' => '運動',\n\t'qa_description' => '簡介',\n\t'qa_edit_calendar_source' => '編輯日曆來源',\n\t'qa_client_management' => '客戶管理',\n\t'qa_client_management_settings' => '客戶管理設定',\n\t'qa_country' => '國家',\n\t'qa_client_status' => '客戶狀態',\n\t'qa_clients' => '客戶',\n\t'qa_client_statuses' => '客戶狀態',\n\t'qa_currencies' => '貨幣',\n\t'qa_main_currency' => '主要貨幣',\n\t'qa_documents' => '文件',\n\t'qa_file' => '檔案',\n\t'qa_income_source' => '收入來源',\n\t'qa_income_sources' => '收入來源',\n\t'qa_fee_percent' => '費用百分比',\n\t'qa_note_text' => '注意文本',\n\t'qa_client' => '客戶',\n\t'qa_start_date' => '開始日期',\n\t'qa_budget' => '預算',\n\t'qa_project_status' => '項目狀態',\n\t'qa_project_statuses' => '項目狀態',\n\t'qa_transactions' => '交易',\n\t'qa_transaction_types' => '交易類別',\n\t'qa_transaction_type' => '交易類別',\n\t'qa_transaction_date' => '交易日期',\n\t'qa_currency' => '貨幣',\n\t'qa_current_password' => '現時密碼',\n\t'qa_new_password' => '新密碼',\n\t'qa_password_confirm' => '新確認密碼',\n\t'qa_dashboard_text' => '您已經登入!',\n\t'qa_forgot_password' => '忘記密碼?',\n\t'qa_remember_me' => '記住我',\n\t'qa_login' => '登入',\n\t'qa_change_password' => '更改密碼',\n\t'qa_csv' => 'CSV',\n\t'qa_print' => '列印',\n\t'qa_excel' => 'Excel',\n\t'qa_copy' => '複制',\n\t'qa_pdf' => 'PDF',\n\t'qa_reset_password' => '重設密碼',\n\t'qa_reset_password_woops' => '<strong>噢!</strong> 錯誤輸入...',\n\t'qa_email_line1' => '您收到此電子郵件是因為我們收到了您的帳戶的密碼重設請求。',\n\t'qa_email_line2' => '如果您沒有要求重設密碼，則不需要採取進一步的操作。',\n\t'qa_email_greet' => '您好',\n\t'qa_confirm_password' => '確認密碼',\n\t'qa_if_you_are_having_trouble' => '如果您在遇到問題, 請點擊',\n\t'qa_please_select' => '請選擇',\n\t'qa_register' => '註冊',\n\t'qa_registration' => '註冊',\n\t'qa_not_approved_title' => '您未獲授權',\n\t'qa_not_approved_p' => '您的帳戶尚未獲批。 請耐心等待，稍後再試。',\n\t'qa_there_were_problems_with_input' => '輸入錯誤',\n\t'qa_whoops' => '噢!',\n\t'qa_csvImport' => 'CSV匯入',\n\t'qa_csv_file_to_import' => 'CSV檔案匯入',\n\t'qa_parse_csv' => '貼上CSV',\n\t'qa_import_data' => '匯入數據',\n\t'qa_imported_rows_to_table' => '已匯入:rows數據',\n\t'quickadmin_title' => 'hotel-booking',\n];"
  },
  {
    "path": "resources/lang/zh/validation.php",
    "content": "<?php\nreturn [\n\n    'date' => ':attribute並不是正確的日期',\n    'date_format' => ':attribute並乎合:format的格式要求',\n    'filled' => ':attribute必須填寫',\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => '自定訊息',\n        ],\n    ],\n\n];"
  },
  {
    "path": "resources/views/actionsTemplate.blade.php",
    "content": "@can($gateKey.'view')\n    <a href=\"{{ route($routeKey.'.show', $row->id) }}\"\n       class=\"btn btn-xs btn-primary\">@lang('quickadmin.qa_view')</a>\n@endcan\n@can($gateKey.'edit')\n    <a href=\"{{ route($routeKey.'.edit', $row->id) }}\" class=\"btn btn-xs btn-info\">@lang('quickadmin.qa_edit')</a>\n@endcan\n@can($gateKey.'delete')\n    {!! Form::open(array(\n        'style' => 'display: inline-block;',\n        'method' => 'DELETE',\n        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n        'route' => [$routeKey.'.destroy', $row->id])) !!}\n    {!! Form::submit(trans('quickadmin.qa_delete'), array('class' => 'btn btn-xs btn-danger')) !!}\n    {!! Form::close() !!}\n@endcan"
  },
  {
    "path": "resources/views/admin/bookings/create.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.bookings.title')</h3>\n    {!! Form::open(['method' => 'POST', 'route' => ['admin.bookings.store']]) !!}\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_create')\n        </div>\n\n        <div class=\"panel-body\">\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('customer_id', trans('quickadmin.bookings.fields.customer').' *', ['class' => 'control-label']) !!}\n                    {!! Form::select('customer_id', $customers, old('customer_id'), ['class' => 'form-control select2']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('customer_id'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('customer_id') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('room_id', trans('quickadmin.bookings.fields.room').'', ['class' => 'control-label']) !!}\n                    {!! Form::select('room_id', $rooms, old('room_id'), ['class' => 'form-control select2']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('room_id'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('room_id') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('time_from', trans('quickadmin.bookings.fields.time-from').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('time_from', old('time_from'), ['class' => 'form-control datetimepicker', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('time_from'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('time_from') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('time_to', trans('quickadmin.bookings.fields.time-to').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('time_to', old('time_to'), ['class' => 'form-control datetimepicker', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('time_to'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('time_to') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('additional_information', trans('quickadmin.bookings.fields.additional-information').'*', ['class' => 'control-label']) !!}\n                    {!! Form::textarea('additional_information', old('additional_information'), ['class' => 'form-control ', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('additional_information'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('additional_information') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n\n\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('Precio',trans('quickadmin.bookings.fields.amount').'*') !!}\n                    {!! Form::text('amount', old('amount'), ['class' => 'form-control ', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('additional_information'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('additional_information') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n\n        </div>\n    </div>\n\n    {!! Form::submit(trans('quickadmin.qa_save'), ['class' => 'btn btn-danger']) !!}\n    {!! Form::close() !!}\n@stop\n\n@section('javascript')\n    @parent\n    <script src=\"https://cdn.datatables.net/select/1.2.0/js/dataTables.select.min.js\"></script>\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css\">\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js\"></script>\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js\"></script>\n    <script>\n        $('.datetimepicker').datetimepicker({\n            format: \"YYYY-MM-DD HH:mm\"\n        });\n    </script>\n@stop"
  },
  {
    "path": "resources/views/admin/bookings/edit.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.bookings.title')</h3>\n    \n    {!! Form::model($booking, ['method' => 'PUT', 'route' => ['admin.bookings.update', $booking->id]]) !!}\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_edit')\n        </div>\n\n        <div class=\"panel-body\">\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('customer_id', trans('quickadmin.bookings.fields.customer').'', ['class' => 'control-label']) !!}\n                    {!! Form::select('customer_id', $customers, old('customer_id'), ['class' => 'form-control select2']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('customer_id'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('customer_id') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('room_id', trans('quickadmin.bookings.fields.room').'', ['class' => 'control-label']) !!}\n                    {!! Form::select('room_id', $rooms, old('room_id'), ['class' => 'form-control select2']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('room_id'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('room_id') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('time_from', trans('quickadmin.bookings.fields.time-from').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('time_from', old('time_from'), ['class' => 'form-control datetimepicker', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('time_from'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('time_from') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('time_to', trans('quickadmin.bookings.fields.time-to').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('time_to', old('time_to'), ['class' => 'form-control datetimepicker', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('time_to'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('time_to') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('additional_information', trans('quickadmin.bookings.fields.additional-information').'*', ['class' => 'control-label']) !!}\n                    {!! Form::textarea('additional_information', old('additional_information'), ['class' => 'form-control ', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('additional_information'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('additional_information') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            \n        </div>\n    </div>\n\n    {!! Form::submit(trans('quickadmin.qa_update'), ['class' => 'btn btn-danger']) !!}\n    {!! Form::close() !!}\n@stop\n\n@section('javascript')\n    @parent\n    <script src=\"https://cdn.datatables.net/select/1.2.0/js/dataTables.select.min.js\"></script>\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css\">\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js\"></script>\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js\"></script>\n    <script>\n        $('.datetimepicker').datetimepicker({\n            format: \"YYYY-MM-DD HH:mm\"\n        });\n    </script>\n@stop"
  },
  {
    "path": "resources/views/admin/bookings/index.blade.php",
    "content": "@inject('request', 'Illuminate\\Http\\Request')\n@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.bookings.title')</h3>\n    @can('booking_create')\n    <p>\n        <a href=\"{{ route('admin.bookings.create') }}\" class=\"btn btn-success\">@lang('quickadmin.qa_add_new')</a>\n        \n    </p>\n    @endcan\n\n    @can('booking_delete')\n    <p>\n        <ul class=\"list-inline\">\n            <li><a href=\"{{ route('admin.bookings.index') }}\" style=\"{{ request('show_deleted') == 1 ? '' : 'font-weight: 700' }}\">@lang('quickadmin.qa_all')</a></li> |\n            <li><a href=\"{{ route('admin.bookings.index') }}?show_deleted=1\" style=\"{{ request('show_deleted') == 1 ? 'font-weight: 700' : '' }}\">@lang('quickadmin.qa_trash')</a></li>\n        </ul>\n    </p>\n    @endcan\n\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_list')\n        </div>\n\n        <div class=\"panel-body table-responsive\">\n            <table class=\"table table-bordered table-striped {{ count($bookings) > 0 ? 'datatable' : '' }} @can('booking_delete') @if ( request('show_deleted') != 1 ) dt-select @endif @endcan\">\n                <thead>\n                    <tr>\n                        @can('booking_delete')\n                            @if ( request('show_deleted') != 1 )<th style=\"text-align:center;\"><input type=\"checkbox\" id=\"select-all\" /></th>@endif\n                        @endcan\n\n                        <th>@lang('quickadmin.bookings.fields.customer')</th>\n                        <th>@lang('quickadmin.bookings.fields.room')</th>\n                        <th>@lang('quickadmin.bookings.fields.time-from')</th>\n                        <th>@lang('quickadmin.bookings.fields.time-to')</th>\n                        <th>@lang('quickadmin.bookings.fields.amount')</th>\n                        <th>@lang('quickadmin.bookings.fields.additional-information')</th>\n                        @if( request('show_deleted') == 1 )\n                        <th>&nbsp;</th>\n                        @else\n                        <th>&nbsp;</th>\n                        @endif\n                    </tr>\n                </thead>\n                \n                <tbody>\n                    @if (count($bookings) > 0)\n                        @foreach ($bookings as $booking)\n                            <tr data-entry-id=\"{{ $booking->id }}\">\n                                @can('booking_delete')\n                                    @if ( request('show_deleted') != 1 )<td></td>@endif\n                                @endcan\n\n                                <td field-key='customer'>{{ $booking->customer->full_name or '' }}</td>\n                                <td field-key='room'>{{ $booking->room->room_number or '' }}</td>\n                                <td field-key='time_from'>{{ $booking->time_from }}</td>\n                                <td field-key='time_to'>{{ $booking->time_to }}</td>\n                                <td field-key='amount'>{{ $booking->amount }}</td>\n                                <td field-key='additional_information'>{!! $booking->additional_information !!}</td>\n                                @if( request('show_deleted') == 1 )\n                                <td>\n                                    @can('booking_delete')\n                                                                        {!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'POST',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.bookings.restore', $booking->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_restore'), array('class' => 'btn btn-xs btn-success')) !!}\n                                    {!! Form::close() !!}\n                                @endcan\n                                    @can('booking_delete')\n                                                                        {!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.bookings.perma_del', $booking->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_permadel'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                @endcan\n                                </td>\n                                @else\n                                <td>\n                                    @can('booking_view')\n                                    <a href=\"{{ route('admin.bookings.show',[$booking->id]) }}\" class=\"btn btn-xs btn-primary\">@lang('quickadmin.qa_view')</a>\n                                    @endcan\n                                    @can('booking_edit')\n                                    <a href=\"{{ route('admin.bookings.edit',[$booking->id]) }}\" class=\"btn btn-xs btn-info\">@lang('quickadmin.qa_edit')</a>\n                                    @endcan\n                                    @can('booking_delete')\n{!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.bookings.destroy', $booking->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_delete'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                    @endcan\n                                </td>\n                                @endif\n                            </tr>\n                        @endforeach\n                    @else\n                        <tr>\n                            <td colspan=\"10\">@lang('quickadmin.qa_no_entries_in_table')</td>\n                        </tr>\n                    @endif\n                </tbody>\n            </table>\n        </div>\n    </div>\n@stop\n\n@section('javascript') \n    <script>\n        @can('booking_delete')\n            @if ( request('show_deleted') != 1 ) window.route_mass_crud_entries_destroy = '{{ route('admin.bookings.mass_destroy') }}'; @endif\n        @endcan\n\n    </script>\n@endsection"
  },
  {
    "path": "resources/views/admin/bookings/show.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.bookings.title')</h3>\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_view')\n        </div>\n\n        <div class=\"panel-body table-responsive\">\n            <div class=\"row\">\n                <div class=\"col-md-6\">\n                    <table class=\"table table-bordered table-striped\">\n                        <tr>\n                            <th>@lang('quickadmin.bookings.fields.customer')</th>\n                            <td field-key='customer'>{{ $booking->customer->first_name or '' }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.bookings.fields.room')</th>\n                            <td field-key='room'>{{ $booking->room->room_number or '' }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.bookings.fields.time-from')</th>\n                            <td field-key='time_from'>{{ $booking->time_from }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.bookings.fields.time-to')</th>\n                            <td field-key='time_to'>{{ $booking->time_to }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.bookings.fields.additional-information')</th>\n                            <td field-key='additional_information'>{!! $booking->additional_information !!}</td>\n                        </tr>\n                    </table>\n                </div>\n            </div>\n\n            <p>&nbsp;</p>\n\n            <a href=\"{{ route('admin.bookings.index') }}\" class=\"btn btn-default\">@lang('quickadmin.qa_back_to_list')</a>\n        </div>\n    </div>\n@stop\n"
  },
  {
    "path": "resources/views/admin/categories/create.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.categories.title')</h3>\n    {!! Form::open(['method' => 'POST', 'route' => ['admin.categories.store']]) !!}\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_create')\n        </div>\n        \n        <div class=\"panel-body\">\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('name', trans('quickadmin.categories.fields.name').'', ['class' => 'control-label']) !!}\n                    {!! Form::text('name', old('name'), ['class' => 'form-control', 'placeholder' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('name'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('name') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            \n        </div>\n    </div>\n\n    {!! Form::submit(trans('quickadmin.qa_save'), ['class' => 'btn btn-danger']) !!}\n    {!! Form::close() !!}\n@stop\n\n"
  },
  {
    "path": "resources/views/admin/categories/edit.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.categories.title')</h3>\n    \n    {!! Form::model($category, ['method' => 'PUT', 'route' => ['admin.categories.update', $category->id]]) !!}\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_edit')\n        </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('name', trans('quickadmin.countries.fields.name').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('name', old('name'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('name'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('name') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            \n        </div>\n    </div>\n\n    {!! Form::submit(trans('quickadmin.qa_update'), ['class' => 'btn btn-danger']) !!}\n    {!! Form::close() !!}\n@stop\n\n"
  },
  {
    "path": "resources/views/admin/categories/index.blade.php",
    "content": "@inject('request', 'Illuminate\\Http\\Request')\n@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.categories.title')</h3>\n    @can('country_create')\n    <p>\n        <a href=\"{{ route('admin.categories.create') }}\" class=\"btn btn-success\">@lang('quickadmin.qa_add_new')</a>\n        \n    </p>\n    @endcan\n\n    @can('country_delete')\n    <p>\n        <ul class=\"list-inline\">\n            <li><a href=\"{{ route('admin.categories.index') }}\" style=\"{{ request('show_deleted') == 1 ? '' : 'font-weight: 700' }}\">@lang('quickadmin.qa_all')</a></li> |\n            <li><a href=\"{{ route('admin.categories.index') }}?show_deleted=1\" style=\"{{ request('show_deleted') == 1 ? 'font-weight: 700' : '' }}\">@lang('quickadmin.qa_trash')</a></li>\n        </ul>\n    </p>\n    @endcan\n\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_list')\n        </div>\n\n        <div class=\"panel-body table-responsive\">\n            <table class=\"table table-bordered table-striped {{ count($categories) > 0 ? 'datatable' : '' }} @can('country_delete') @if ( request('show_deleted') != 1 ) dt-select @endif @endcan\">\n                <thead>\n                    <tr>\n                        @can('country_delete')\n                            @if ( request('show_deleted') != 1 )<th style=\"text-align:center;\"><input type=\"checkbox\" id=\"select-all\" /></th>@endif\n                        @endcan\n\n                        <th>@lang('quickadmin.categories.fields.name')</th>\n                        @if( request('show_deleted') == 1 )\n                        <th>&nbsp;</th>\n                        @else\n                        <th>&nbsp;</th>\n                        @endif\n                    </tr>\n                </thead>\n                \n                <tbody>\n                    @if (count($categories) > 0)\n                        @foreach ($categories as $country)\n                            <tr data-entry-id=\"{{ $country->id }}\">\n                                @can('country_delete')\n                                    @if ( request('show_deleted') != 1 )<td></td>@endif\n                                @endcan\n                                <td field-key='name'>{{ $country->name }}</td>\n                                @if( request('show_deleted') == 1 )\n                                <td>\n                                    @can('country_delete')\n                                                                        {!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'POST',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.categories.restore', $country->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_restore'), array('class' => 'btn btn-xs btn-success')) !!}\n                                    {!! Form::close() !!}\n                                @endcan\n                                    @can('country_delete')\n                                                                        {!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.categories.perma_del', $country->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_permadel'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                @endcan\n                                </td>\n                                @else\n                                <td>\n                                    @can('country_view')\n                                    <a href=\"{{ route('admin.categories.show',[$country->id]) }}\" class=\"btn btn-xs btn-primary\">@lang('quickadmin.qa_view')</a>\n                                    @endcan\n                                    @can('country_edit')\n                                    <a href=\"{{ route('admin.categories.edit',[$country->id]) }}\" class=\"btn btn-xs btn-info\">@lang('quickadmin.qa_edit')</a>\n                                    @endcan\n                                    @can('country_delete')\n{!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.categories.destroy', $country->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_delete'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                    @endcan\n                                </td>\n                                @endif\n                            </tr>\n                        @endforeach\n                    @else\n                        <tr>\n                            <td colspan=\"8\">@lang('quickadmin.qa_no_entries_in_table')</td>\n                        </tr>\n                    @endif\n                </tbody>\n            </table>\n        </div>\n    </div>\n@stop\n\n@section('javascript') \n    <script>\n        @can('country_delete')\n            @if ( request('show_deleted') != 1 ) window.route_mass_crud_entries_destroy = '{{ route('admin.categories.mass_destroy') }}'; @endif\n        @endcan\n\n    </script>\n@endsection"
  },
  {
    "path": "resources/views/admin/countries/create.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.countries.title')</h3>\n    {!! Form::open(['method' => 'POST', 'route' => ['admin.countries.store']]) !!}\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_create')\n        </div>\n        \n        <div class=\"panel-body\">\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('shortcode', trans('quickadmin.countries.fields.shortcode').'', ['class' => 'control-label']) !!}\n                    {!! Form::text('shortcode', old('shortcode'), ['class' => 'form-control', 'placeholder' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('shortcode'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('shortcode') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('title', trans('quickadmin.countries.fields.title').'', ['class' => 'control-label']) !!}\n                    {!! Form::text('title', old('title'), ['class' => 'form-control', 'placeholder' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('title'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('title') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('name', trans('quickadmin.countries.fields.name').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('name', old('name'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('name'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('name') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            \n        </div>\n    </div>\n\n    {!! Form::submit(trans('quickadmin.qa_save'), ['class' => 'btn btn-danger']) !!}\n    {!! Form::close() !!}\n@stop\n\n"
  },
  {
    "path": "resources/views/admin/countries/edit.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.countries.title')</h3>\n    \n    {!! Form::model($country, ['method' => 'PUT', 'route' => ['admin.countries.update', $country->id]]) !!}\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_edit')\n        </div>\n\n        <div class=\"panel-body\">\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('shortcode', trans('quickadmin.countries.fields.shortcode').'', ['class' => 'control-label']) !!}\n                    {!! Form::text('shortcode', old('shortcode'), ['class' => 'form-control', 'placeholder' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('shortcode'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('shortcode') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('title', trans('quickadmin.countries.fields.title').'', ['class' => 'control-label']) !!}\n                    {!! Form::text('title', old('title'), ['class' => 'form-control', 'placeholder' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('title'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('title') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('name', trans('quickadmin.countries.fields.name').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('name', old('name'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('name'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('name') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            \n        </div>\n    </div>\n\n    {!! Form::submit(trans('quickadmin.qa_update'), ['class' => 'btn btn-danger']) !!}\n    {!! Form::close() !!}\n@stop\n\n"
  },
  {
    "path": "resources/views/admin/countries/index.blade.php",
    "content": "@inject('request', 'Illuminate\\Http\\Request')\n@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.countries.title')</h3>\n    @can('country_create')\n    <p>\n        <a href=\"{{ route('admin.countries.create') }}\" class=\"btn btn-success\">@lang('quickadmin.qa_add_new')</a>\n        \n    </p>\n    @endcan\n\n    @can('country_delete')\n    <p>\n        <ul class=\"list-inline\">\n            <li><a href=\"{{ route('admin.countries.index') }}\" style=\"{{ request('show_deleted') == 1 ? '' : 'font-weight: 700' }}\">@lang('quickadmin.qa_all')</a></li> |\n            <li><a href=\"{{ route('admin.countries.index') }}?show_deleted=1\" style=\"{{ request('show_deleted') == 1 ? 'font-weight: 700' : '' }}\">@lang('quickadmin.qa_trash')</a></li>\n        </ul>\n    </p>\n    @endcan\n\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_list')\n        </div>\n\n        <div class=\"panel-body table-responsive\">\n            <table class=\"table table-bordered table-striped {{ count($countries) > 0 ? 'datatable' : '' }} @can('country_delete') @if ( request('show_deleted') != 1 ) dt-select @endif @endcan\">\n                <thead>\n                    <tr>\n                        @can('country_delete')\n                            @if ( request('show_deleted') != 1 )<th style=\"text-align:center;\"><input type=\"checkbox\" id=\"select-all\" /></th>@endif\n                        @endcan\n\n                        <th>@lang('quickadmin.countries.fields.shortcode')</th>\n                        <th>@lang('quickadmin.countries.fields.title')</th>\n                        <th>@lang('quickadmin.countries.fields.name')</th>\n                        @if( request('show_deleted') == 1 )\n                        <th>&nbsp;</th>\n                        @else\n                        <th>&nbsp;</th>\n                        @endif\n                    </tr>\n                </thead>\n                \n                <tbody>\n                    @if (count($countries) > 0)\n                        @foreach ($countries as $country)\n                            <tr data-entry-id=\"{{ $country->id }}\">\n                                @can('country_delete')\n                                    @if ( request('show_deleted') != 1 )<td></td>@endif\n                                @endcan\n\n                                <td field-key='shortcode'>{{ $country->shortcode }}</td>\n                                <td field-key='title'>{{ $country->title }}</td>\n                                <td field-key='name'>{{ $country->name }}</td>\n                                @if( request('show_deleted') == 1 )\n                                <td>\n                                    @can('country_delete')\n                                                                        {!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'POST',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.countries.restore', $country->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_restore'), array('class' => 'btn btn-xs btn-success')) !!}\n                                    {!! Form::close() !!}\n                                @endcan\n                                    @can('country_delete')\n                                                                        {!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.countries.perma_del', $country->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_permadel'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                @endcan\n                                </td>\n                                @else\n                                <td>\n                                    @can('country_view')\n                                    <a href=\"{{ route('admin.countries.show',[$country->id]) }}\" class=\"btn btn-xs btn-primary\">@lang('quickadmin.qa_view')</a>\n                                    @endcan\n                                    @can('country_edit')\n                                    <a href=\"{{ route('admin.countries.edit',[$country->id]) }}\" class=\"btn btn-xs btn-info\">@lang('quickadmin.qa_edit')</a>\n                                    @endcan\n                                    @can('country_delete')\n{!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.countries.destroy', $country->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_delete'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                    @endcan\n                                </td>\n                                @endif\n                            </tr>\n                        @endforeach\n                    @else\n                        <tr>\n                            <td colspan=\"8\">@lang('quickadmin.qa_no_entries_in_table')</td>\n                        </tr>\n                    @endif\n                </tbody>\n            </table>\n        </div>\n    </div>\n@stop\n\n@section('javascript') \n    <script>\n        @can('country_delete')\n            @if ( request('show_deleted') != 1 ) window.route_mass_crud_entries_destroy = '{{ route('admin.countries.mass_destroy') }}'; @endif\n        @endcan\n\n    </script>\n@endsection"
  },
  {
    "path": "resources/views/admin/countries/show.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.countries.title')</h3>\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_view')\n        </div>\n\n        <div class=\"panel-body table-responsive\">\n            <div class=\"row\">\n                <div class=\"col-md-6\">\n                    <table class=\"table table-bordered table-striped\">\n                        <tr>\n                            <th>@lang('quickadmin.countries.fields.shortcode')</th>\n                            <td field-key='shortcode'>{{ $country->shortcode }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.countries.fields.title')</th>\n                            <td field-key='title'>{{ $country->title }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.countries.fields.name')</th>\n                            <td field-key='name'>{{ $country->name }}</td>\n                        </tr>\n                    </table>\n                </div>\n            </div><!-- Nav tabs -->\n<ul class=\"nav nav-tabs\" role=\"tablist\">\n    \n<li role=\"presentation\" class=\"active\"><a href=\"#customers\" aria-controls=\"customers\" role=\"tab\" data-toggle=\"tab\">Customers</a></li>\n</ul>\n\n<!-- Tab panes -->\n<div class=\"tab-content\">\n    \n<div role=\"tabpanel\" class=\"tab-pane active\" id=\"customers\">\n<table class=\"table table-bordered table-striped {{ count($customers) > 0 ? 'datatable' : '' }}\">\n    <thead>\n        <tr>\n            <th>@lang('quickadmin.customers.fields.first-name')</th>\n                        <th>@lang('quickadmin.customers.fields.last-name')</th>\n                        <th>@lang('quickadmin.customers.fields.address')</th>\n                        <th>@lang('quickadmin.customers.fields.phone')</th>\n                        <th>@lang('quickadmin.customers.fields.email')</th>\n                        <th>@lang('quickadmin.customers.fields.country')</th>\n                        @if( request('show_deleted') == 1 )\n                        <th>&nbsp;</th>\n                        @else\n                        <th>&nbsp;</th>\n                        @endif\n        </tr>\n    </thead>\n\n    <tbody>\n        @if (count($customers) > 0)\n            @foreach ($customers as $customer)\n                <tr data-entry-id=\"{{ $customer->id }}\">\n                    <td field-key='first_name'>{{ $customer->first_name }}</td>\n                                <td field-key='last_name'>{{ $customer->last_name }}</td>\n                                <td field-key='address'>{{ $customer->address }}</td>\n                                <td field-key='phone'>{{ $customer->phone }}</td>\n                                <td field-key='email'>{{ $customer->email }}</td>\n                                <td field-key='country'>{{ $customer->country->shortcode or '' }}</td>\n                                @if( request('show_deleted') == 1 )\n                                <td>\n                                    @can('customer_delete')\n                                                                        {!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'POST',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.customers.restore', $customer->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_restore'), array('class' => 'btn btn-xs btn-success')) !!}\n                                    {!! Form::close() !!}\n                                @endcan\n                                    @can('customer_delete')\n                                                                        {!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.customers.perma_del', $customer->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_permadel'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                @endcan\n                                </td>\n                                @else\n                                <td>\n                                    @can('customer_view')\n                                    <a href=\"{{ route('admin.customers.show',[$customer->id]) }}\" class=\"btn btn-xs btn-primary\">@lang('quickadmin.qa_view')</a>\n                                    @endcan\n                                    @can('customer_edit')\n                                    <a href=\"{{ route('admin.customers.edit',[$customer->id]) }}\" class=\"btn btn-xs btn-info\">@lang('quickadmin.qa_edit')</a>\n                                    @endcan\n                                    @can('customer_delete')\n{!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.customers.destroy', $customer->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_delete'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                    @endcan\n                                </td>\n                                @endif\n                </tr>\n            @endforeach\n        @else\n            <tr>\n                <td colspan=\"11\">@lang('quickadmin.qa_no_entries_in_table')</td>\n            </tr>\n        @endif\n    </tbody>\n</table>\n</div>\n</div>\n\n            <p>&nbsp;</p>\n\n            <a href=\"{{ route('admin.countries.index') }}\" class=\"btn btn-default\">@lang('quickadmin.qa_back_to_list')</a>\n        </div>\n    </div>\n@stop\n"
  },
  {
    "path": "resources/views/admin/customers/create.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.customers.title')</h3>\n    {!! Form::open(['method' => 'POST', 'route' => ['admin.customers.store']]) !!}\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_create')\n        </div>\n        \n        <div class=\"panel-body\">\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('first_name', trans('quickadmin.customers.fields.first-name').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('first_name', old('first_name'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('first_name'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('first_name') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('last_name', trans('quickadmin.customers.fields.last-name').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('last_name', old('last_name'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('last_name'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('last_name') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('address', trans('quickadmin.customers.fields.address').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('address', old('address'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('address'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('address') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('phone', trans('quickadmin.customers.fields.phone').'', ['class' => 'control-label']) !!}\n                    {!! Form::text('phone', old('phone'), ['class' => 'form-control', 'placeholder' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('phone'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('phone') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('email', trans('quickadmin.customers.fields.email').'*', ['class' => 'control-label']) !!}\n                    {!! Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('email'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('email') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('country_id', trans('quickadmin.customers.fields.country').'', ['class' => 'control-label']) !!}\n                    {!! Form::select('country_id', $countries, old('country_id'), ['class' => 'form-control select2']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('country_id'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('country_id') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            \n        </div>\n    </div>\n\n    {!! Form::submit(trans('quickadmin.qa_save'), ['class' => 'btn btn-danger']) !!}\n    {!! Form::close() !!}\n@stop\n\n"
  },
  {
    "path": "resources/views/admin/customers/edit.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.customers.title')</h3>\n    \n    {!! Form::model($customer, ['method' => 'PUT', 'route' => ['admin.customers.update', $customer->id]]) !!}\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_edit')\n        </div>\n\n        <div class=\"panel-body\">\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('first_name', trans('quickadmin.customers.fields.first-name').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('first_name', old('first_name'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('first_name'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('first_name') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('last_name', trans('quickadmin.customers.fields.last-name').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('last_name', old('last_name'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('last_name'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('last_name') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('address', trans('quickadmin.customers.fields.address').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('address', old('address'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('address'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('address') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('phone', trans('quickadmin.customers.fields.phone').'', ['class' => 'control-label']) !!}\n                    {!! Form::text('phone', old('phone'), ['class' => 'form-control', 'placeholder' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('phone'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('phone') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('email', trans('quickadmin.customers.fields.email').'*', ['class' => 'control-label']) !!}\n                    {!! Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('email'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('email') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('country_id', trans('quickadmin.customers.fields.country').'', ['class' => 'control-label']) !!}\n                    {!! Form::select('country_id', $countries, old('country_id'), ['class' => 'form-control select2']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('country_id'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('country_id') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            \n        </div>\n    </div>\n\n    {!! Form::submit(trans('quickadmin.qa_update'), ['class' => 'btn btn-danger']) !!}\n    {!! Form::close() !!}\n@stop\n\n"
  },
  {
    "path": "resources/views/admin/customers/index.blade.php",
    "content": "@inject('request', 'Illuminate\\Http\\Request')\n@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.customers.title')</h3>\n    @can('customer_create')\n    <p>\n        <a href=\"{{ route('admin.customers.create') }}\" class=\"btn btn-success\">@lang('quickadmin.qa_add_new')</a>\n        \n    </p>\n    @endcan\n\n    @can('customer_delete')\n    <p>\n        <ul class=\"list-inline\">\n            <li><a href=\"{{ route('admin.customers.index') }}\" style=\"{{ request('show_deleted') == 1 ? '' : 'font-weight: 700' }}\">@lang('quickadmin.qa_all')</a></li> |\n            <li><a href=\"{{ route('admin.customers.index') }}?show_deleted=1\" style=\"{{ request('show_deleted') == 1 ? 'font-weight: 700' : '' }}\">@lang('quickadmin.qa_trash')</a></li>\n        </ul>\n    </p>\n    @endcan\n\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_list')\n        </div>\n\n        <div class=\"panel-body table-responsive\">\n            <table class=\"table table-bordered table-striped {{ count($customers) > 0 ? 'datatable' : '' }} @can('customer_delete') @if ( request('show_deleted') != 1 ) dt-select @endif @endcan\">\n                <thead>\n                    <tr>\n                        @can('customer_delete')\n                            @if ( request('show_deleted') != 1 )<th style=\"text-align:center;\"><input type=\"checkbox\" id=\"select-all\" /></th>@endif\n                        @endcan\n\n                        <th>@lang('quickadmin.customers.fields.first-name')</th>\n                        <th>@lang('quickadmin.customers.fields.last-name')</th>\n                        <th>@lang('quickadmin.customers.fields.address')</th>\n                        <th>@lang('quickadmin.customers.fields.phone')</th>\n                        <th>@lang('quickadmin.customers.fields.email')</th>\n                        <th>@lang('quickadmin.customers.fields.country')</th>\n                        @if( request('show_deleted') == 1 )\n                        <th>&nbsp;</th>\n                        @else\n                        <th>&nbsp;</th>\n                        @endif\n                    </tr>\n                </thead>\n                \n                <tbody>\n                    @if (count($customers) > 0)\n                        @foreach ($customers as $customer)\n                            <tr data-entry-id=\"{{ $customer->id }}\">\n                                @can('customer_delete')\n                                    @if ( request('show_deleted') != 1 )<td></td>@endif\n                                @endcan\n\n                                <td field-key='first_name'>{{ $customer->first_name }}</td>\n                                <td field-key='last_name'>{{ $customer->last_name }}</td>\n                                <td field-key='address'>{{ $customer->address }}</td>\n                                <td field-key='phone'>{{ $customer->phone }}</td>\n                                <td field-key='email'>{{ $customer->email }}</td>\n                                <td field-key='country'>{{ $customer->country->title or '' }}</td>\n                                @if( request('show_deleted') == 1 )\n                                <td>\n                                    @can('customer_delete')\n                                                                        {!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'POST',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.customers.restore', $customer->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_restore'), array('class' => 'btn btn-xs btn-success')) !!}\n                                    {!! Form::close() !!}\n                                @endcan\n                                    @can('customer_delete')\n                                                                        {!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.customers.perma_del', $customer->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_permadel'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                @endcan\n                                </td>\n                                @else\n                                <td>\n                                    @can('customer_view')\n                                    <a href=\"{{ route('admin.customers.show',[$customer->id]) }}\" class=\"btn btn-xs btn-primary\">@lang('quickadmin.qa_view')</a>\n                                    @endcan\n                                    @can('customer_edit')\n                                    <a href=\"{{ route('admin.customers.edit',[$customer->id]) }}\" class=\"btn btn-xs btn-info\">@lang('quickadmin.qa_edit')</a>\n                                    @endcan\n                                    @can('customer_delete')\n{!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.customers.destroy', $customer->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_delete'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                    @endcan\n                                </td>\n                                @endif\n                            </tr>\n                        @endforeach\n                    @else\n                        <tr>\n                            <td colspan=\"11\">@lang('quickadmin.qa_no_entries_in_table')</td>\n                        </tr>\n                    @endif\n                </tbody>\n            </table>\n        </div>\n    </div>\n@stop\n\n@section('javascript') \n    <script>\n        @can('customer_delete')\n            @if ( request('show_deleted') != 1 ) window.route_mass_crud_entries_destroy = '{{ route('admin.customers.mass_destroy') }}'; @endif\n        @endcan\n\n    </script>\n@endsection"
  },
  {
    "path": "resources/views/admin/customers/show.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.customers.title')</h3>\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_view')\n        </div>\n\n        <div class=\"panel-body table-responsive\">\n            <div class=\"row\">\n                <div class=\"col-md-6\">\n                    <table class=\"table table-bordered table-striped\">\n                        <tr>\n                            <th>@lang('quickadmin.customers.fields.first-name')</th>\n                            <td field-key='first_name'>{{ $customer->first_name }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.customers.fields.last-name')</th>\n                            <td field-key='last_name'>{{ $customer->last_name }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.customers.fields.address')</th>\n                            <td field-key='address'>{{ $customer->address }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.customers.fields.phone')</th>\n                            <td field-key='phone'>{{ $customer->phone }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.customers.fields.email')</th>\n                            <td field-key='email'>{{ $customer->email }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.customers.fields.country')</th>\n                            <td field-key='country'>{{ $customer->country->title or '' }}</td>\n                        </tr>\n                    </table>\n                </div>\n            </div><!-- Nav tabs -->\n<ul class=\"nav nav-tabs\" role=\"tablist\">\n    \n<li role=\"presentation\" class=\"active\"><a href=\"#bookings\" aria-controls=\"bookings\" role=\"tab\" data-toggle=\"tab\">Bookings</a></li>\n</ul>\n\n<!-- Tab panes -->\n<div class=\"tab-content\">\n    \n<div role=\"tabpanel\" class=\"tab-pane active\" id=\"bookings\">\n<table class=\"table table-bordered table-striped {{ count($bookings) > 0 ? 'datatable' : '' }}\">\n    <thead>\n        <tr>\n            <th>@lang('quickadmin.bookings.fields.customer')</th>\n                        <th>@lang('quickadmin.bookings.fields.room')</th>\n                        <th>@lang('quickadmin.bookings.fields.time-from')</th>\n                        <th>@lang('quickadmin.bookings.fields.time-to')</th>\n                        <th>@lang('quickadmin.bookings.fields.additional-information')</th>\n                        @if( request('show_deleted') == 1 )\n                        <th>&nbsp;</th>\n                        @else\n                        <th>&nbsp;</th>\n                        @endif\n        </tr>\n    </thead>\n\n    <tbody>\n        @if (count($bookings) > 0)\n            @foreach ($bookings as $booking)\n                <tr data-entry-id=\"{{ $booking->id }}\">\n                    <td field-key='customer'>{{ $booking->customer->first_name or '' }}</td>\n                                <td field-key='room'>{{ $booking->room->room_number or '' }}</td>\n                                <td field-key='time_from'>{{ $booking->time_from }}</td>\n                                <td field-key='time_to'>{{ $booking->time_to }}</td>\n                                <td field-key='additional_information'>{!! $booking->additional_information !!}</td>\n                                @if( request('show_deleted') == 1 )\n                                <td>\n                                    @can('booking_delete')\n                                                                        {!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'POST',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.bookings.restore', $booking->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_restore'), array('class' => 'btn btn-xs btn-success')) !!}\n                                    {!! Form::close() !!}\n                                @endcan\n                                    @can('booking_delete')\n                                                                        {!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.bookings.perma_del', $booking->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_permadel'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                @endcan\n                                </td>\n                                @else\n                                <td>\n                                    @can('booking_view')\n                                    <a href=\"{{ route('admin.bookings.show',[$booking->id]) }}\" class=\"btn btn-xs btn-primary\">@lang('quickadmin.qa_view')</a>\n                                    @endcan\n                                    @can('booking_edit')\n                                    <a href=\"{{ route('admin.bookings.edit',[$booking->id]) }}\" class=\"btn btn-xs btn-info\">@lang('quickadmin.qa_edit')</a>\n                                    @endcan\n                                    @can('booking_delete')\n{!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.bookings.destroy', $booking->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_delete'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                    @endcan\n                                </td>\n                                @endif\n                </tr>\n            @endforeach\n        @else\n            <tr>\n                <td colspan=\"10\">@lang('quickadmin.qa_no_entries_in_table')</td>\n            </tr>\n        @endif\n    </tbody>\n</table>\n</div>\n</div>\n\n            <p>&nbsp;</p>\n\n            <a href=\"{{ route('admin.customers.index') }}\" class=\"btn btn-default\">@lang('quickadmin.qa_back_to_list')</a>\n        </div>\n    </div>\n@stop\n"
  },
  {
    "path": "resources/views/admin/find_rooms/index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.find-room.title')</h3>\n    <div class=\"panel panel-default\">\n\n        {!! Form::open(['method' => 'post', 'route' => ['admin.find_rooms.index']]) !!}\n        <div class=\"row\" style=\"margin-top: 5px;\">\n            <div class=\"col-xs-9\">\n                <div class=\"col-xs-6 form-group\">\n                    {!! Form::label('time_from', trans('quickadmin.bookings.fields.time-from').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('time_from', old('time_from'), ['class' => 'form-control datetimepicker', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('time_from'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('time_from') }}\n                        </p>\n                    @endif\n                </div>\n                <div class=\"col-xs-6 form-group\">\n                    {!! Form::label('time_to', trans('quickadmin.bookings.fields.time-to').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('time_to', old('time_to'), ['class' => 'form-control datetimepicker', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('time_to'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('time_to') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"col-xs-2\">\n                <div class=\"form-group\" style=\"margin-top: 5px;\">\n                    <label class=\"control-label\"></label>\n                    {!! Form::submit('Search for rooms', ['class' => 'btn btn-danger btn-block']) !!}\n                    {!! Form::close() !!}\n                </div>\n            </div>\n        </div>\n        @if (isset($rooms) && is_null($rooms))\n            <div class=\"form-group\" style=\"text-align: center\">\n                <label>@lang('quickadmin.find-room.no_rooms_found')</label>\n            </div>\n        @endif\n        @if (!is_null($rooms))\n        <div class=\"panel-body table-responsive\">\n            <table class=\"table table-bordered table-striped\">\n                <thead>\n                <tr>\n                    <th/></th>\n                    <th>@lang('quickadmin.rooms.fields.room-number')</th>\n                    <th>@lang('quickadmin.rooms.fields.floor')</th>\n                    <th>@lang('quickadmin.rooms.fields.description')</th>\n                </tr>\n                </thead>\n                <tbody>\n                    @foreach ($rooms as $room)\n                        <tr data-entry-id=\"{{ $room->id }}\">\n                            <td></td>\n                            <td field-key='room_number'>{{ $room->room_number }}</td>\n                            <td field-key='floor'>{{ $room->floor }}</td>\n                            <td field-key='description'>{!! $room->description !!}</td>\n                            <td>\n                                @can('booking_create')\n                                    <button class=\"btn btn-danger\">\n                                        <a style=\"color: #ffffff;\" href=\"{{ route('admin.bookings.create',\n                                        ['room_id' => $room->id,'time_from' => $time_from, 'time_to' => $time_to]) }}\">\n                                            {!!trans('quickadmin.find-room.book_room')!!}</a>\n                                    </button>\n                                @endcan\n                            </td>\n                        </tr>\n                    @endforeach\n                @endif\n                </tbody>\n            </table>\n        </div>\n    </div>\n@stop\n@section('javascript')\n    @parent\n    <script src=\"https://cdn.datatables.net/select/1.2.0/js/dataTables.select.min.js\"></script>\n    <link rel=\"stylesheet\"\n          href=\"https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css\">\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js\"></script>\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js\"></script>\n    <script>\n        $('.datetimepicker').datetimepicker({\n            format: \"YYYY-MM-DD HH:mm\"\n        });\n    </script>\n@stop\n"
  },
  {
    "path": "resources/views/admin/roles/create.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.roles.title')</h3>\n    {!! Form::open(['method' => 'POST', 'route' => ['admin.roles.store']]) !!}\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_create')\n        </div>\n        \n        <div class=\"panel-body\">\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('title', trans('quickadmin.roles.fields.title').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('title', old('title'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('title'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('title') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            \n        </div>\n    </div>\n\n    {!! Form::submit(trans('quickadmin.qa_save'), ['class' => 'btn btn-danger']) !!}\n    {!! Form::close() !!}\n@stop\n\n"
  },
  {
    "path": "resources/views/admin/roles/edit.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.roles.title')</h3>\n    \n    {!! Form::model($role, ['method' => 'PUT', 'route' => ['admin.roles.update', $role->id]]) !!}\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_edit')\n        </div>\n\n        <div class=\"panel-body\">\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('title', trans('quickadmin.roles.fields.title').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('title', old('title'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('title'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('title') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            \n        </div>\n    </div>\n\n    {!! Form::submit(trans('quickadmin.qa_update'), ['class' => 'btn btn-danger']) !!}\n    {!! Form::close() !!}\n@stop\n\n"
  },
  {
    "path": "resources/views/admin/roles/index.blade.php",
    "content": "@inject('request', 'Illuminate\\Http\\Request')\n@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.roles.title')</h3>\n    @can('role_create')\n    <p>\n        <a href=\"{{ route('admin.roles.create') }}\" class=\"btn btn-success\">@lang('quickadmin.qa_add_new')</a>\n        \n    </p>\n    @endcan\n\n    \n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_list')\n        </div>\n\n        <div class=\"panel-body table-responsive\">\n            <table class=\"table table-bordered table-striped {{ count($roles) > 0 ? 'datatable' : '' }} @can('role_delete') dt-select @endcan\">\n                <thead>\n                    <tr>\n                        @can('role_delete')\n                            <th style=\"text-align:center;\"><input type=\"checkbox\" id=\"select-all\" /></th>\n                        @endcan\n\n                        <th>@lang('quickadmin.roles.fields.title')</th>\n                                                <th>&nbsp;</th>\n\n                    </tr>\n                </thead>\n                \n                <tbody>\n                    @if (count($roles) > 0)\n                        @foreach ($roles as $role)\n                            <tr data-entry-id=\"{{ $role->id }}\">\n                                @can('role_delete')\n                                    <td></td>\n                                @endcan\n\n                                <td field-key='title'>{{ $role->title }}</td>\n                                                                <td>\n                                    @can('role_view')\n                                    <a href=\"{{ route('admin.roles.show',[$role->id]) }}\" class=\"btn btn-xs btn-primary\">@lang('quickadmin.qa_view')</a>\n                                    @endcan\n                                    @can('role_edit')\n                                    <a href=\"{{ route('admin.roles.edit',[$role->id]) }}\" class=\"btn btn-xs btn-info\">@lang('quickadmin.qa_edit')</a>\n                                    @endcan\n                                    @can('role_delete')\n{!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.roles.destroy', $role->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_delete'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                    @endcan\n                                </td>\n\n                            </tr>\n                        @endforeach\n                    @else\n                        <tr>\n                            <td colspan=\"6\">@lang('quickadmin.qa_no_entries_in_table')</td>\n                        </tr>\n                    @endif\n                </tbody>\n            </table>\n        </div>\n    </div>\n@stop\n\n@section('javascript') \n    <script>\n        @can('role_delete')\n            window.route_mass_crud_entries_destroy = '{{ route('admin.roles.mass_destroy') }}';\n        @endcan\n\n    </script>\n@endsection"
  },
  {
    "path": "resources/views/admin/roles/show.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.roles.title')</h3>\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_view')\n        </div>\n\n        <div class=\"panel-body table-responsive\">\n            <div class=\"row\">\n                <div class=\"col-md-6\">\n                    <table class=\"table table-bordered table-striped\">\n                        <tr>\n                            <th>@lang('quickadmin.roles.fields.title')</th>\n                            <td field-key='title'>{{ $role->title }}</td>\n                        </tr>\n                    </table>\n                </div>\n            </div><!-- Nav tabs -->\n<ul class=\"nav nav-tabs\" role=\"tablist\">\n    \n<li role=\"presentation\" class=\"active\"><a href=\"#users\" aria-controls=\"users\" role=\"tab\" data-toggle=\"tab\">Users</a></li>\n</ul>\n\n<!-- Tab panes -->\n<div class=\"tab-content\">\n    \n<div role=\"tabpanel\" class=\"tab-pane active\" id=\"users\">\n<table class=\"table table-bordered table-striped {{ count($users) > 0 ? 'datatable' : '' }}\">\n    <thead>\n        <tr>\n            <th>@lang('quickadmin.users.fields.name')</th>\n                        <th>@lang('quickadmin.users.fields.email')</th>\n                        <th>@lang('quickadmin.users.fields.role')</th>\n                                                <th>&nbsp;</th>\n\n        </tr>\n    </thead>\n\n    <tbody>\n        @if (count($users) > 0)\n            @foreach ($users as $user)\n                <tr data-entry-id=\"{{ $user->id }}\">\n                    <td field-key='name'>{{ $user->name }}</td>\n                                <td field-key='email'>{{ $user->email }}</td>\n                                <td field-key='role'>{{ $user->role->title or '' }}</td>\n                                                                <td>\n                                    @can('user_view')\n                                    <a href=\"{{ route('admin.users.show',[$user->id]) }}\" class=\"btn btn-xs btn-primary\">@lang('quickadmin.qa_view')</a>\n                                    @endcan\n                                    @can('user_edit')\n                                    <a href=\"{{ route('admin.users.edit',[$user->id]) }}\" class=\"btn btn-xs btn-info\">@lang('quickadmin.qa_edit')</a>\n                                    @endcan\n                                    @can('user_delete')\n{!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.users.destroy', $user->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_delete'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                    @endcan\n                                </td>\n\n                </tr>\n            @endforeach\n        @else\n            <tr>\n                <td colspan=\"10\">@lang('quickadmin.qa_no_entries_in_table')</td>\n            </tr>\n        @endif\n    </tbody>\n</table>\n</div>\n</div>\n\n            <p>&nbsp;</p>\n\n            <a href=\"{{ route('admin.roles.index') }}\" class=\"btn btn-default\">@lang('quickadmin.qa_back_to_list')</a>\n        </div>\n    </div>\n@stop\n"
  },
  {
    "path": "resources/views/admin/rooms/create.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.rooms.title')</h3>\n    {!! Form::open(['method' => 'POST', 'route' => ['admin.rooms.store']]) !!}\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_create')\n        </div>\n        \n        <div class=\"panel-body\">\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('room_number', trans('quickadmin.rooms.fields.room-number').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('room_number', old('room_number'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('room_number'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('room_number') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('category_id', trans('quickadmin.rooms.fields.category').'', ['class' => 'control-label']) !!}\n                    {!! Form::select('category_id', $categories, old('category_id'), ['class' => 'form-control select2']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('category_id'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('category_id') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('floor', trans('quickadmin.rooms.fields.floor').'*', ['class' => 'control-label']) !!}\n                    {!! Form::number('floor', old('floor'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('floor'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('floor') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('description', trans('quickadmin.rooms.fields.description').'*', ['class' => 'control-label']) !!}\n                    {!! Form::textarea('description', old('description'), ['class' => 'form-control ', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('description'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('description') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            \n        </div>\n    </div>\n\n    {!! Form::submit(trans('quickadmin.qa_save'), ['class' => 'btn btn-danger']) !!}\n    {!! Form::close() !!}\n@stop\n\n"
  },
  {
    "path": "resources/views/admin/rooms/edit.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.rooms.title')</h3>\n    \n    {!! Form::model($room, ['method' => 'PUT', 'route' => ['admin.rooms.update', $room->id]]) !!}\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_edit')\n        </div>\n\n        <div class=\"panel-body\">\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('room_number', trans('quickadmin.rooms.fields.room-number').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('room_number', old('room_number'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('room_number'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('room_number') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('category_id', trans('quickadmin.rooms.fields.category').'', ['class' => 'control-label']) !!}\n                    {!! Form::select('category_id', $categories, old('category_id'), ['class' => 'form-control select2']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('category_id'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('category_id') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('floor', trans('quickadmin.rooms.fields.floor').'*', ['class' => 'control-label']) !!}\n                    {!! Form::number('floor', old('floor'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('floor'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('floor') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('description', trans('quickadmin.rooms.fields.description').'*', ['class' => 'control-label']) !!}\n                    {!! Form::textarea('description', old('description'), ['class' => 'form-control ', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('description'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('description') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            \n        </div>\n    </div>\n\n    {!! Form::submit(trans('quickadmin.qa_update'), ['class' => 'btn btn-danger']) !!}\n    {!! Form::close() !!}\n@stop\n\n"
  },
  {
    "path": "resources/views/admin/rooms/index.blade.php",
    "content": "@inject('request', 'Illuminate\\Http\\Request')\n@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.rooms.title')</h3>\n    @can('room_create')\n    <p>\n        <a href=\"{{ route('admin.rooms.create') }}\" class=\"btn btn-success\">@lang('quickadmin.qa_add_new')</a>\n        \n    </p>\n    @endcan\n\n    @can('room_delete')\n    <p>\n        <ul class=\"list-inline\">\n            <li><a href=\"{{ route('admin.rooms.index') }}\" style=\"{{ request('show_deleted') == 1 ? '' : 'font-weight: 700' }}\">@lang('quickadmin.qa_all')</a></li> |\n            <li><a href=\"{{ route('admin.rooms.index') }}?show_deleted=1\" style=\"{{ request('show_deleted') == 1 ? 'font-weight: 700' : '' }}\">@lang('quickadmin.qa_trash')</a></li>\n        </ul>\n    </p>\n    @endcan\n\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_list')\n        </div>\n\n        <div class=\"panel-body table-responsive\">\n            <table class=\"table table-bordered table-striped {{ count($rooms) > 0 ? 'datatable' : '' }} @can('room_delete') @if ( request('show_deleted') != 1 ) dt-select @endif @endcan\">\n                <thead>\n                    <tr>\n                        @can('room_delete')\n                            @if ( request('show_deleted') != 1 )<th style=\"text-align:center;\"><input type=\"checkbox\" id=\"select-all\" /></th>@endif\n                        @endcan\n\n                        <th>@lang('quickadmin.rooms.fields.room-number')</th>\n                        <th>@lang('quickadmin.rooms.fields.floor')</th>\n                        <th>@lang('quickadmin.rooms.fields.description')</th>\n                        @if( request('show_deleted') == 1 )\n                        <th>&nbsp;</th>\n                        @else\n                        <th>&nbsp;</th>\n                        @endif\n                    </tr>\n                </thead>\n                \n                <tbody>\n                    @if (count($rooms) > 0)\n                        @foreach ($rooms as $room)\n                            <tr data-entry-id=\"{{ $room->id }}\">\n                                @can('room_delete')\n                                    @if ( request('show_deleted') != 1 )<td></td>@endif\n                                @endcan\n\n                                <td field-key='room_number'>{{ $room->room_number }}</td>\n                                <td field-key='floor'>{{ $room->floor }}</td>\n                                <td field-key='description'>{!! $room->description !!}</td>\n                                @if( request('show_deleted') == 1 )\n                                <td>\n                                    @can('room_delete')\n                                                                        {!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'POST',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.rooms.restore', $room->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_restore'), array('class' => 'btn btn-xs btn-success')) !!}\n                                    {!! Form::close() !!}\n                                @endcan\n                                    @can('room_delete')\n                                                                        {!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.rooms.perma_del', $room->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_permadel'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                @endcan\n                                </td>\n                                @else\n                                <td>\n                                    @can('room_view')\n                                    <a href=\"{{ route('admin.rooms.show',[$room->id]) }}\" class=\"btn btn-xs btn-primary\">@lang('quickadmin.qa_view')</a>\n                                    @endcan\n                                    @can('room_edit')\n                                    <a href=\"{{ route('admin.rooms.edit',[$room->id]) }}\" class=\"btn btn-xs btn-info\">@lang('quickadmin.qa_edit')</a>\n                                    @endcan\n                                    @can('room_delete')\n{!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.rooms.destroy', $room->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_delete'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                    @endcan\n                                </td>\n                                @endif\n                            </tr>\n                        @endforeach\n                    @else\n                        <tr>\n                            <td colspan=\"8\">@lang('quickadmin.qa_no_entries_in_table')</td>\n                        </tr>\n                    @endif\n                </tbody>\n            </table>\n        </div>\n    </div>\n@stop\n\n@section('javascript') \n    <script>\n        @can('room_delete')\n            @if ( request('show_deleted') != 1 ) window.route_mass_crud_entries_destroy = '{{ route('admin.rooms.mass_destroy') }}'; @endif\n        @endcan\n\n    </script>\n@endsection"
  },
  {
    "path": "resources/views/admin/rooms/show.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.rooms.title')</h3>\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_view')\n        </div>\n\n        <div class=\"panel-body table-responsive\">\n            <div class=\"row\">\n                <div class=\"col-md-6\">\n                    <table class=\"table table-bordered table-striped\">\n                        <tr>\n                            <th>@lang('quickadmin.rooms.fields.room-number')</th>\n                            <td field-key='room_number'>{{ $room->room_number }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.rooms.fields.floor')</th>\n                            <td field-key='floor'>{{ $room->floor }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.rooms.fields.description')</th>\n                            <td field-key='description'>{!! $room->description !!}</td>\n                        </tr>\n                    </table>\n                </div>\n            </div><!-- Nav tabs -->\n            <ul class=\"nav nav-tabs\" role=\"tablist\">\n\n                <li role=\"presentation\" class=\"active\"><a href=\"#bookings\" aria-controls=\"bookings\" role=\"tab\"\n                                                          data-toggle=\"tab\">Bookings</a></li>\n            </ul>\n\n            <!-- Tab panes -->\n            <div class=\"tab-content\">\n\n                <div role=\"tabpanel\" class=\"tab-pane active\" id=\"bookings\">\n                    <table class=\"table table-bordered table-striped {{ count($bookings) > 0 ? 'datatable' : '' }}\">\n                        <thead>\n                        <tr>\n                            <th>@lang('quickadmin.bookings.fields.customer')</th>\n                            <th>@lang('quickadmin.bookings.fields.room')</th>\n                            <th>@lang('quickadmin.bookings.fields.time-from')</th>\n                            <th>@lang('quickadmin.bookings.fields.time-to')</th>\n                            <th>@lang('quickadmin.bookings.fields.additional-information')</th>\n                            @if( request('show_deleted') == 1 )\n                                <th>&nbsp;</th>\n                            @else\n                                <th>&nbsp;</th>\n                            @endif\n                        </tr>\n                        </thead>\n\n                        <tbody>\n                        @if (count($bookings) > 0)\n                            @foreach ($bookings as $booking)\n                                <tr data-entry-id=\"{{ $booking->id }}\">\n                                    <td field-key='customer'>{{ $booking->customer->first_name or '' }}</td>\n                                    <td field-key='room'>{{ $booking->room->room_number or '' }}</td>\n                                    <td field-key='time_from'>{{ $booking->time_from }}</td>\n                                    <td field-key='time_to'>{{ $booking->time_to }}</td>\n                                    <td field-key='additional_information'>{!! $booking->additional_information !!}</td>\n                                    @if( request('show_deleted') == 1 )\n                                        <td>\n                                            @can('booking_delete')\n                                                {!! Form::open(array(\n                'style' => 'display: inline-block;',\n                'method' => 'POST',\n                'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                'route' => ['admin.bookings.restore', $booking->id])) !!}\n                                                {!! Form::submit(trans('quickadmin.qa_restore'), array('class' => 'btn btn-xs btn-success')) !!}\n                                                {!! Form::close() !!}\n                                            @endcan\n                                            @can('booking_delete')\n                                                {!! Form::open(array(\n                'style' => 'display: inline-block;',\n                'method' => 'DELETE',\n                'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                'route' => ['admin.bookings.perma_del', $booking->id])) !!}\n                                                {!! Form::submit(trans('quickadmin.qa_permadel'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                                {!! Form::close() !!}\n                                            @endcan\n                                        </td>\n                                    @else\n                                        <td>\n                                            @can('booking_view')\n                                                <a href=\"{{ route('admin.bookings.show',[$booking->id]) }}\"\n                                                   class=\"btn btn-xs btn-primary\">@lang('quickadmin.qa_view')</a>\n                                            @endcan\n                                            @can('booking_edit')\n                                                <a href=\"{{ route('admin.bookings.edit',[$booking->id]) }}\"\n                                                   class=\"btn btn-xs btn-info\">@lang('quickadmin.qa_edit')</a>\n                                            @endcan\n                                            @can('booking_delete')\n                                                {!! Form::open(array(\n                                                                                        'style' => 'display: inline-block;',\n                                                                                        'method' => 'DELETE',\n                                                                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                                                                        'route' => ['admin.bookings.destroy', $booking->id])) !!}\n                                                {!! Form::submit(trans('quickadmin.qa_delete'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                                {!! Form::close() !!}\n                                            @endcan\n                                        </td>\n                                    @endif\n                                </tr>\n                            @endforeach\n                        @else\n                            <tr>\n                                <td colspan=\"10\">@lang('quickadmin.qa_no_entries_in_table')</td>\n                            </tr>\n                        @endif\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n\n            <p>&nbsp;</p>\n\n            <a href=\"{{ route('admin.rooms.index') }}\" class=\"btn btn-default\">@lang('quickadmin.qa_back_to_list')</a>\n        </div>\n    </div>\n@stop\n"
  },
  {
    "path": "resources/views/admin/users/create.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.users.title')</h3>\n    {!! Form::open(['method' => 'POST', 'route' => ['admin.users.store']]) !!}\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_create')\n        </div>\n        \n        <div class=\"panel-body\">\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('name', trans('quickadmin.users.fields.name').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('name', old('name'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('name'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('name') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('email', trans('quickadmin.users.fields.email').'*', ['class' => 'control-label']) !!}\n                    {!! Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('email'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('email') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('password', trans('quickadmin.users.fields.password').'*', ['class' => 'control-label']) !!}\n                    {!! Form::password('password', ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('password'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('password') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('role_id', trans('quickadmin.users.fields.role').'*', ['class' => 'control-label']) !!}\n                    {!! Form::select('role_id', $roles, old('role_id'), ['class' => 'form-control select2', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('role_id'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('role_id') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            \n        </div>\n    </div>\n\n    {!! Form::submit(trans('quickadmin.qa_save'), ['class' => 'btn btn-danger']) !!}\n    {!! Form::close() !!}\n@stop\n\n"
  },
  {
    "path": "resources/views/admin/users/edit.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.users.title')</h3>\n    \n    {!! Form::model($user, ['method' => 'PUT', 'route' => ['admin.users.update', $user->id]]) !!}\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_edit')\n        </div>\n\n        <div class=\"panel-body\">\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('name', trans('quickadmin.users.fields.name').'*', ['class' => 'control-label']) !!}\n                    {!! Form::text('name', old('name'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('name'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('name') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('email', trans('quickadmin.users.fields.email').'*', ['class' => 'control-label']) !!}\n                    {!! Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => '', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('email'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('email') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('password', trans('quickadmin.users.fields.password').'*', ['class' => 'control-label']) !!}\n                    {!! Form::password('password', ['class' => 'form-control', 'placeholder' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('password'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('password') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-xs-12 form-group\">\n                    {!! Form::label('role_id', trans('quickadmin.users.fields.role').'*', ['class' => 'control-label']) !!}\n                    {!! Form::select('role_id', $roles, old('role_id'), ['class' => 'form-control select2', 'required' => '']) !!}\n                    <p class=\"help-block\"></p>\n                    @if($errors->has('role_id'))\n                        <p class=\"help-block\">\n                            {{ $errors->first('role_id') }}\n                        </p>\n                    @endif\n                </div>\n            </div>\n            \n        </div>\n    </div>\n\n    {!! Form::submit(trans('quickadmin.qa_update'), ['class' => 'btn btn-danger']) !!}\n    {!! Form::close() !!}\n@stop\n\n"
  },
  {
    "path": "resources/views/admin/users/index.blade.php",
    "content": "@inject('request', 'Illuminate\\Http\\Request')\n@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.users.title')</h3>\n    @can('user_create')\n    <p>\n        <a href=\"{{ route('admin.users.create') }}\" class=\"btn btn-success\">@lang('quickadmin.qa_add_new')</a>\n        \n    </p>\n    @endcan\n\n    \n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_list')\n        </div>\n\n        <div class=\"panel-body table-responsive\">\n            <table class=\"table table-bordered table-striped {{ count($users) > 0 ? 'datatable' : '' }} @can('user_delete') dt-select @endcan\">\n                <thead>\n                    <tr>\n                        @can('user_delete')\n                            <th style=\"text-align:center;\"><input type=\"checkbox\" id=\"select-all\" /></th>\n                        @endcan\n\n                        <th>@lang('quickadmin.users.fields.name')</th>\n                        <th>@lang('quickadmin.users.fields.email')</th>\n                        <th>@lang('quickadmin.users.fields.role')</th>\n                                                <th>&nbsp;</th>\n\n                    </tr>\n                </thead>\n                \n                <tbody>\n                    @if (count($users) > 0)\n                        @foreach ($users as $user)\n                            <tr data-entry-id=\"{{ $user->id }}\">\n                                @can('user_delete')\n                                    <td></td>\n                                @endcan\n\n                                <td field-key='name'>{{ $user->name }}</td>\n                                <td field-key='email'>{{ $user->email }}</td>\n                                <td field-key='role'>{{ $user->role->title or '' }}</td>\n                                                                <td>\n                                    @can('user_view')\n                                    <a href=\"{{ route('admin.users.show',[$user->id]) }}\" class=\"btn btn-xs btn-primary\">@lang('quickadmin.qa_view')</a>\n                                    @endcan\n                                    @can('user_edit')\n                                    <a href=\"{{ route('admin.users.edit',[$user->id]) }}\" class=\"btn btn-xs btn-info\">@lang('quickadmin.qa_edit')</a>\n                                    @endcan\n                                    @can('user_delete')\n{!! Form::open(array(\n                                        'style' => 'display: inline-block;',\n                                        'method' => 'DELETE',\n                                        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n                                        'route' => ['admin.users.destroy', $user->id])) !!}\n                                    {!! Form::submit(trans('quickadmin.qa_delete'), array('class' => 'btn btn-xs btn-danger')) !!}\n                                    {!! Form::close() !!}\n                                    @endcan\n                                </td>\n\n                            </tr>\n                        @endforeach\n                    @else\n                        <tr>\n                            <td colspan=\"10\">@lang('quickadmin.qa_no_entries_in_table')</td>\n                        </tr>\n                    @endif\n                </tbody>\n            </table>\n        </div>\n    </div>\n@stop\n\n@section('javascript') \n    <script>\n        @can('user_delete')\n            window.route_mass_crud_entries_destroy = '{{ route('admin.users.mass_destroy') }}';\n        @endcan\n\n    </script>\n@endsection"
  },
  {
    "path": "resources/views/admin/users/show.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <h3 class=\"page-title\">@lang('quickadmin.users.title')</h3>\n\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            @lang('quickadmin.qa_view')\n        </div>\n\n        <div class=\"panel-body table-responsive\">\n            <div class=\"row\">\n                <div class=\"col-md-6\">\n                    <table class=\"table table-bordered table-striped\">\n                        <tr>\n                            <th>@lang('quickadmin.users.fields.name')</th>\n                            <td field-key='name'>{{ $user->name }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.users.fields.email')</th>\n                            <td field-key='email'>{{ $user->email }}</td>\n                        </tr>\n                        <tr>\n                            <th>@lang('quickadmin.users.fields.role')</th>\n                            <td field-key='role'>{{ $user->role->title or '' }}</td>\n                        </tr>\n                    </table>\n                </div>\n            </div>\n\n            <p>&nbsp;</p>\n\n            <a href=\"{{ route('admin.users.index') }}\" class=\"btn btn-default\">@lang('quickadmin.qa_back_to_list')</a>\n        </div>\n    </div>\n@stop\n"
  },
  {
    "path": "resources/views/auth/change_password.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n\t<h3 class=\"page-title\">@lang('quickadmin.qa_change_password')</h3>\n\n\t@if(session('success'))\n\t\t<!-- If password successfully show message -->\n\t\t<div class=\"row\">\n\t\t\t<div class=\"alert alert-success\">\n\t\t\t\t{{ session('success') }}\n\t\t\t</div>\n\t\t</div>\n\t@else\n\t\t{!! Form::open(['method' => 'PATCH', 'route' => ['auth.change_password']]) !!}\n\t\t<!-- If no success message in flash session show change password form  -->\n\t\t<div class=\"panel panel-default\">\n\t\t\t<div class=\"panel-heading\">\n\t\t\t\t@lang('quickadmin.qa_edit')\n\t\t\t</div>\n\n\t\t\t<div class=\"panel-body\">\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-xs-12 form-group\">\n\t\t\t\t\t\t{!! Form::label('current_password', trans('quickadmin.qa_current_password'), ['class' => 'control-label']) !!}\n\t\t\t\t\t\t{!! Form::password('current_password', ['class' => 'form-control', 'placeholder' => '']) !!}\n\t\t\t\t\t\t<p class=\"help-block\"></p>\n\t\t\t\t\t\t@if($errors->has('current_password'))\n\t\t\t\t\t\t\t<p class=\"help-block\">\n\t\t\t\t\t\t\t\t{{ $errors->first('current_password') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t@endif\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-xs-12 form-group\">\n\t\t\t\t\t\t{!! Form::label('new_password', trans('quickadmin.qa_new_password'), ['class' => 'control-label']) !!}\n\t\t\t\t\t\t{!! Form::password('new_password', ['class' => 'form-control', 'placeholder' => '']) !!}\n\t\t\t\t\t\t<p class=\"help-block\"></p>\n\t\t\t\t\t\t@if($errors->has('new_password'))\n\t\t\t\t\t\t\t<p class=\"help-block\">\n\t\t\t\t\t\t\t\t{{ $errors->first('new_password') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t@endif\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-xs-12 form-group\">\n\t\t\t\t\t\t{!! Form::label('new_password_confirmation', trans('quickadmin.qa_password_confirm'), ['class' => 'control-label']) !!}\n\t\t\t\t\t\t{!! Form::password('new_password_confirmation', ['class' => 'form-control', 'placeholder' => '']) !!}\n\t\t\t\t\t\t<p class=\"help-block\"></p>\n\t\t\t\t\t\t@if($errors->has('new_password_confirmation'))\n\t\t\t\t\t\t\t<p class=\"help-block\">\n\t\t\t\t\t\t\t\t{{ $errors->first('new_password_confirmation') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t@endif\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t{!! Form::submit(trans('quickadmin.qa_save'), ['class' => 'btn btn-danger']) !!}\n\t\t{!! Form::close() !!}\n\t@endif\n@stop\n\n"
  },
  {
    "path": "resources/views/auth/emails/password.blade.php",
    "content": "Click here to reset your password: <a href=\"{{ $link = url('password/reset', $token).'?email='.urlencode($user->getEmailForPasswordReset()) }}\"> {{ $link }} </a>\n"
  },
  {
    "path": "resources/views/auth/login.blade.php",
    "content": "@extends('layouts.auth')\n\n@section('content')\n    <div class=\"row\">\n        <div class=\"col-md-8 col-md-offset-2\">\n            <div class=\"panel panel-default\">\n                <div class=\"panel-heading\">{{ ucfirst(config('app.name')) }} @lang('quickadmin.qa_login')</div>\n                <div class=\"panel-body\">\n                    \n                    @if (count($errors) > 0)\n                        <div class=\"alert alert-danger\">\n                            <strong>@lang('quickadmin.qa_whoops')</strong> @lang('quickadmin.qa_there_were_problems_with_input'):\n                            <br><br>\n                            <ul>\n                                @foreach ($errors->all() as $error)\n                                    <li>{{ $error }}</li>\n                                @endforeach\n                            </ul>\n                        </div>\n                    @endif\n\n                    <form class=\"form-horizontal\"\n                          role=\"form\"\n                          method=\"POST\"\n                          action=\"{{ url('login') }}\">\n                        <input type=\"hidden\"\n                               name=\"_token\"\n                               value=\"{{ csrf_token() }}\">\n\n                        <div class=\"form-group\">\n                            <label class=\"col-md-4 control-label\">@lang('quickadmin.qa_email')</label>\n\n                            <div class=\"col-md-6\">\n                                <input type=\"email\"\n                                       class=\"form-control\"\n                                       name=\"email\"\n                                       value=\"{{ old('email') }}\">\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <label class=\"col-md-4 control-label\">@lang('quickadmin.qa_password')</label>\n\n                            <div class=\"col-md-6\">\n                                <input type=\"password\"\n                                       class=\"form-control\"\n                                       name=\"password\">\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div class=\"col-md-6 col-md-offset-4\">\n                                <a href=\"{{ route('auth.password.reset') }}\">@lang('quickadmin.qa_forgot_password')</a>\n                            </div>\n                        </div>\n\n\n                        <div class=\"form-group\">\n                            <div class=\"col-md-6 col-md-offset-4\">\n                                <label>\n                                    <input type=\"checkbox\"\n                                           name=\"remember\"> @lang('quickadmin.qa_remember_me')\n                                </label>\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div class=\"col-md-6 col-md-offset-4\">\n                                <button type=\"submit\"\n                                        class=\"btn btn-primary\"\n                                        style=\"margin-right: 15px;\">\n                                    @lang('quickadmin.qa_login')\n                                </button>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/auth/passwords/email.blade.php",
    "content": "@extends('layouts.auth')\n\n@section('content')\n    <div class=\"row\">\n        <div class=\"col-md-8 col-md-offset-2\">\n            <div class=\"panel panel-default\">\n                <div class=\"panel-heading\">Reset password</div>\n                <div class=\"panel-body\">\n\n                    @if (session('status'))\n                        <div class=\"alert alert-success\">\n                            {{ session('status') }}\n                        </div>\n                    @endif\n\n                    @if (count($errors) > 0)\n                        <div class=\"alert alert-danger\">\n                            <strong>Whoops!</strong> There were problems with input:\n                            <br><br>\n                            <ul>\n                                @foreach ($errors->all() as $error)\n                                    <li>{{ $error }}</li>\n                                @endforeach\n                            </ul>\n                        </div>\n                    @endif\n\n                    <form class=\"form-horizontal\"\n                          role=\"form\"\n                          method=\"POST\"\n                          action=\"{{ url('password/email') }}\">\n                        <input type=\"hidden\"\n                               name=\"_token\"\n                               value=\"{{ csrf_token() }}\">\n\n                        <div class=\"form-group\">\n                            <label class=\"col-md-4 control-label\">Email</label>\n\n                            <div class=\"col-md-6\">\n                                <input type=\"email\"\n                                       class=\"form-control\"\n                                       name=\"email\"\n                                       value=\"{{ old('email') }}\">\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div class=\"col-md-6 col-md-offset-4\">\n                                <button type=\"submit\"\n                                        class=\"btn btn-primary\"\n                                        style=\"margin-right: 15px;\">\n                                    Reset password\n                                </button>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/auth/passwords/reset.blade.php",
    "content": "@extends('layouts.auth')\n\n@section('content')\n    <div class=\"row\">\n        <div class=\"col-md-8 col-md-offset-2\">\n            <div class=\"panel panel-default\">\n                <div class=\"panel-heading\">@lang('quickadmin.qa_reset_password')</div>\n                <div class=\"panel-body\">\n                    @if (count($errors) > 0)\n                        <div class=\"alert alert-danger\">\n                            @lang('quickadmin.qa_reset_password_woops')\n                            <br><br>\n                            <ul>\n                                @foreach ($errors->all() as $error)\n                                    <li>{{ $error }}</li>\n                                @endforeach\n                            </ul>\n                        </div>\n                    @endif\n\n                    <form class=\"form-horizontal\"\n                          role=\"form\"\n                          method=\"POST\"\n                          action=\"{{ url('password/reset') }}\">\n                        <input type=\"hidden\"\n                               name=\"_token\"\n                               value=\"{{ csrf_token() }}\">\n                        <input type=\"hidden\" name=\"token\" value=\"{{ $token }}\">\n\n                        <div class=\"form-group\">\n                            <label class=\"col-md-4 control-label\">@lang('quickadmin.qa_email')</label>\n\n                            <div class=\"col-md-6\">\n                                <input type=\"email\"\n                                       class=\"form-control\"\n                                       name=\"email\"\n                                       value=\"{{ old('email') }}\">\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <label class=\"col-md-4 control-label\">@lang('quickadmin.qa_password')</label>\n\n                            <div class=\"col-md-6\">\n                                <input type=\"password\"\n                                       class=\"form-control\"\n                                       name=\"password\">\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <label class=\"col-md-4 control-label\">@lang('quickadmin.qa_confirm_password')</label>\n\n                            <div class=\"col-md-6\">\n                                <input type=\"password\"\n                                       class=\"form-control\"\n                                       name=\"password_confirmation\">\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div class=\"col-md-6 col-md-offset-4\">\n                                <button type=\"submit\"\n                                        class=\"btn btn-primary\"\n                                        style=\"margin-right: 15px;\">\n                                    @lang('quickadmin.qa_reset_password')\n                                </button>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/errors/503.blade.php",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n        <title>Be right back.</title>\n\n        <link href=\"https://fonts.googleapis.com/css?family=Lato:100\" rel=\"stylesheet\" type=\"text/css\">\n\n        <style>\n            html, body {\n                height: 100%;\n            }\n\n            body {\n                margin: 0;\n                padding: 0;\n                width: 100%;\n                color: #B0BEC5;\n                display: table;\n                font-weight: 100;\n                font-family: 'Lato';\n            }\n\n            .container {\n                text-align: center;\n                display: table-cell;\n                vertical-align: middle;\n            }\n\n            .content {\n                text-align: center;\n                display: inline-block;\n            }\n\n            .title {\n                font-size: 72px;\n                margin-bottom: 40px;\n            }\n        </style>\n    </head>\n    <body>\n        <div class=\"container\">\n            <div class=\"content\">\n                <div class=\"title\">Be right back.</div>\n            </div>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "resources/views/home.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <div class=\"row\">\n        <div class=\"col-md-10\">\n            <div class=\"panel panel-default\">\n                <div class=\"panel-heading\">@lang('quickadmin.qa_dashboard')</div>\n\n                <div class=\"panel-body\">\n                    @lang('quickadmin.qa_dashboard_text')\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/layouts/app.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    @include('partials.head')\n</head>\n\n\n<body class=\"hold-transition skin-blue sidebar-mini\">\n\n<div id=\"wrapper\">\n\n@include('partials.topbar')\n@include('partials.sidebar')\n\n<!-- Content Wrapper. Contains page content -->\n    <div class=\"content-wrapper\">\n        <!-- Main content -->\n        <section class=\"content\">\n            @if(isset($siteTitle))\n                <h3 class=\"page-title\">\n                    {{ $siteTitle }}\n                </h3>\n            @endif\n\n            <div class=\"row\">\n                <div class=\"col-md-12\">\n\n                    @if (Session::has('message'))\n                        <div class=\"alert alert-info\">\n                            <p>{{ Session::get('message') }}</p>\n                        </div>\n                    @endif\n                    @if ($errors->count() > 0)\n                        <div class=\"alert alert-danger\">\n                            <ul class=\"list-unstyled\">\n                                @foreach($errors->all() as $error)\n                                    <li>{{ $error }}</li>\n                                @endforeach\n                            </ul>\n                        </div>\n                    @endif\n\n                    @yield('content')\n\n                </div>\n            </div>\n        </section>\n    </div>\n</div>\n\n{!! Form::open(['route' => 'auth.logout', 'style' => 'display:none;', 'id' => 'logout']) !!}\n<button type=\"submit\">Logout</button>\n{!! Form::close() !!}\n\n@include('partials.javascripts')\n</body>\n</html>"
  },
  {
    "path": "resources/views/layouts/auth.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    @include('partials.head')\n</head>\n\n<body class=\"page-header-fixed\">\n\n    <div style=\"margin-top: 10%;\"></div>\n\n    <div class=\"container-fluid\">\n        @yield('content')\n    </div>\n\n    <div class=\"scroll-to-top\"\n         style=\"display: none;\">\n        <i class=\"fa fa-arrow-up\"></i>\n    </div>\n\n    @include('partials.javascripts')\n\n</body>\n</html>"
  },
  {
    "path": "resources/views/partials/head.blade.php",
    "content": "<meta charset=\"utf-8\">\n<title>\n    @lang('quickadmin.quickadmin_title')\n</title>\n\n<meta http-equiv=\"X-UA-Compatible\"\n      content=\"IE=edge\">\n<meta content=\"width=device-width, initial-scale=1.0\"\n      name=\"viewport\"/>\n<meta http-equiv=\"Content-type\"\n      content=\"text/html; charset=utf-8\">\n\n<!-- Tell the browser to be responsive to screen width -->\n<meta content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\" name=\"viewport\">\n<!-- Font Awesome -->\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css\">\n<!-- Ionicons -->\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css\">\n<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->\n<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n<!--[if lt IE 9]>\n<script src=\"https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js\"></script>\n<script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n<![endif]-->\n\n<link href=\"{{ url('adminlte/bootstrap/css/bootstrap.min.css') }}\" rel=\"stylesheet\">\n<link rel=\"stylesheet\"\n      href=\"{{ url('quickadmin/css') }}/select2.min.css\"/>\n<link href=\"{{ url('adminlte/css/AdminLTE.min.css') }}\" rel=\"stylesheet\">\n<link href=\"{{ url('adminlte/css/custom.css') }}\" rel=\"stylesheet\">\n<link href=\"{{ url('adminlte/css/skins/skin-blue.min.css') }}\" rel=\"stylesheet\">\n<link rel=\"stylesheet\"\n      href=\"https://code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css\">\n<link rel=\"stylesheet\"\n      href=\"//cdn.datatables.net/1.10.9/css/jquery.dataTables.min.css\"/>\n<link rel=\"stylesheet\"\n      href=\"https://cdn.datatables.net/select/1.2.0/css/select.dataTables.min.css\"/>\n<link rel=\"stylesheet\"\n      href=\"//cdn.datatables.net/buttons/1.2.4/css/buttons.dataTables.min.css\"/>\n<link rel=\"stylesheet\"\n      href=\"https://cdnjs.cloudflare.com/ajax/libs/jquery-ui-timepicker-addon/1.4.5/jquery-ui-timepicker-addon.min.css\"/>\n<link rel=\"stylesheet\"\n      href=\"https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.5.0/css/bootstrap-datepicker.standalone.min.css\"/>"
  },
  {
    "path": "resources/views/partials/header.blade.php",
    "content": "<div class=\"page-header-inner\">\n    <div class=\"page-header-inner\">\n        <div class=\"navbar-header\">\n            <a href=\"{{ url('/') }}\"\n               class=\"navbar-brand\">\n                @lang('quickadmin.quickadmin_title')\n            </a>\n        </div>\n        <a href=\"javascript:;\"\n           class=\"menu-toggler responsive-toggler\"\n           data-toggle=\"collapse\"\n           data-target=\".navbar-collapse\">\n        </a>\n\n        <div class=\"top-menu\">\n            <ul class=\"nav navbar-nav pull-right\">\n                \n            </ul>\n        </div>\n    </div>\n</div>\n\n"
  },
  {
    "path": "resources/views/partials/javascripts.blade.php",
    "content": "<script>\n    window.deleteButtonTrans = '{{ trans(\"quickadmin.qa_delete_selected\") }}';\n    window.copyButtonTrans = '{{ trans(\"quickadmin.qa_copy\") }}';\n    window.csvButtonTrans = '{{ trans(\"quickadmin.qa_csv\") }}';\n    window.excelButtonTrans = '{{ trans(\"quickadmin.qa_excel\") }}';\n    window.pdfButtonTrans = '{{ trans(\"quickadmin.qa_pdf\") }}';\n    window.printButtonTrans = '{{ trans(\"quickadmin.qa_print\") }}';\n    window.colvisButtonTrans = '{{ trans(\"quickadmin.qa_colvis\") }}';\n</script>\n<script src=\"//code.jquery.com/jquery-1.11.3.min.js\"></script>\n<script src=\"//cdn.datatables.net/1.10.9/js/jquery.dataTables.min.js\"></script>\n<script src=\"//cdn.datatables.net/buttons/1.2.4/js/dataTables.buttons.min.js\"></script>\n<script src=\"//cdn.datatables.net/buttons/1.2.4/js/buttons.flash.min.js\"></script>\n<script src=\"//cdnjs.cloudflare.com/ajax/libs/jszip/2.5.0/jszip.min.js\"></script>\n<script src=\"https://cdn.rawgit.com/bpampuch/pdfmake/0.1.18/build/pdfmake.min.js\"></script>\n<script src=\"https://cdn.rawgit.com/bpampuch/pdfmake/0.1.18/build/vfs_fonts.js\"></script>\n<script src=\"https://cdn.datatables.net/buttons/1.2.4/js/buttons.html5.min.js\"></script>\n<script src=\"https://cdn.datatables.net/buttons/1.2.4/js/buttons.print.min.js\"></script>\n<script src=\"https://cdn.datatables.net/buttons/1.2.4/js/buttons.colVis.min.js\"></script>\n<script src=\"https://cdn.datatables.net/select/1.2.0/js/dataTables.select.min.js\"></script>\n<script src=\"https://code.jquery.com/ui/1.11.3/jquery-ui.min.js\"></script>\n<script src=\"{{ url('adminlte/js') }}/bootstrap.min.js\"></script>\n<script src=\"{{ url('adminlte/js') }}/select2.full.min.js\"></script>\n<script src=\"{{ url('adminlte/js') }}/main.js\"></script>\n\n<script src=\"{{ url('adminlte/plugins/slimScroll/jquery.slimscroll.min.js') }}\"></script>\n<script src=\"{{ url('adminlte/plugins/fastclick/fastclick.js') }}\"></script>\n<script src=\"{{ url('adminlte/js/app.min.js') }}\"></script>\n<script>\n    window._token = '{{ csrf_token() }}';\n</script>\n<script>\n    $.extend(true, $.fn.dataTable.defaults, {\n        \"language\": {\n            \"url\": \"http://cdn.datatables.net/plug-ins/1.10.16/i18n/English.json\"\n        }\n    });\n\n     \n\n</script>\n\n \n\n\n\n@yield('javascript')"
  },
  {
    "path": "resources/views/partials/sidebar.blade.php",
    "content": "@inject('request', 'Illuminate\\Http\\Request')\n<!-- Left side column. contains the sidebar -->\n<aside class=\"main-sidebar\">\n    <!-- sidebar: style can be found in sidebar.less -->\n    <section class=\"sidebar\">\n        <ul class=\"sidebar-menu\">\n\n             \n\n            <li class=\"{{ $request->segment(1) == 'home' ? 'active' : '' }}\">\n                <a href=\"{{ url('/') }}\">\n                    <i class=\"fa fa-wrench\"></i>\n                    <span class=\"title\">@lang('quickadmin.qa_dashboard')</span>\n                </a>\n            </li>\n\n            \n            @can('user_management_access')\n            <li class=\"treeview\">\n                <a href=\"#\">\n                    <i class=\"fa fa-users\"></i>\n                    <span class=\"title\">@lang('quickadmin.user-management.title')</span>\n                    <span class=\"pull-right-container\">\n                        <i class=\"fa fa-angle-left pull-right\"></i>\n                    </span>\n                </a>\n                <ul class=\"treeview-menu\">\n                \n                @can('role_access')\n                <li class=\"{{ $request->segment(2) == 'roles' ? 'active active-sub' : '' }}\">\n                        <a href=\"{{ route('admin.roles.index') }}\">\n                            <i class=\"fa fa-briefcase\"></i>\n                            <span class=\"title\">\n                                @lang('quickadmin.roles.title')\n                            </span>\n                        </a>\n                    </li>\n                @endcan\n                @can('user_access')\n                <li class=\"{{ $request->segment(2) == 'users' ? 'active active-sub' : '' }}\">\n                        <a href=\"{{ route('admin.users.index') }}\">\n                            <i class=\"fa fa-user\"></i>\n                            <span class=\"title\">\n                                @lang('quickadmin.users.title')\n                            </span>\n                        </a>\n                    </li>\n                @endcan\n                </ul>\n            </li>\n            @endcan\n            @can('country_access')\n            <li class=\"{{ $request->segment(2) == 'countries' ? 'active' : '' }}\">\n                <a href=\"{{ route('admin.countries.index') }}\">\n                    <i class=\"fa fa-gears\"></i>\n                    <span class=\"title\">@lang('quickadmin.countries.title')</span>\n                </a>\n            </li>\n            @endcan\n            @can('category_create')\n                <li class=\"{{ $request->segment(2) == 'users' ? 'active active-sub' : '' }}\">\n                        <a href=\"{{ route('admin.categories.index') }}\">\n                            <i class=\"fa fa-user\"></i>\n                            <span class=\"title\">\n                                @lang('quickadmin.categories.title')\n                            </span>\n                        </a>\n                    </li>\n                @endcan\n\n            @can('customer_access')\n            <li class=\"{{ $request->segment(2) == 'customers' ? 'active' : '' }}\">\n                <a href=\"{{ route('admin.customers.index') }}\">\n                    <i class=\"fa fa-low-vision\"></i>\n                    <span class=\"title\">@lang('quickadmin.customers.title')</span>\n                </a>\n            </li>\n            @endcan\n            \n            @can('room_access')\n            <li class=\"{{ $request->segment(2) == 'rooms' ? 'active' : '' }}\">\n                <a href=\"{{ route('admin.rooms.index') }}\">\n                    <i class=\"fa fa-gears\"></i>\n                    <span class=\"title\">@lang('quickadmin.rooms.title')</span>\n                </a>\n            </li>\n            @endcan\n            \n            @can('booking_access')\n            <li class=\"{{ $request->segment(2) == 'bookings' ? 'active' : '' }}\">\n                <a href=\"{{ route('admin.bookings.index') }}\">\n                    <i class=\"fa fa-bell\"></i>\n                    <span class=\"title\">@lang('quickadmin.bookings.title')</span>\n                </a>\n            </li>\n            @endcan\n            \n            @can('find_room_access')\n            <li class=\"{{ $request->segment(2) == 'find_rooms' ? 'active' : '' }}\">\n                <a href=\"{{ route('admin.find_rooms.index') }}\">\n                    <i class=\"fa fa-arrows\"></i>\n                    <span class=\"title\">@lang('quickadmin.find-room.title')</span>\n                </a>\n            </li>\n            @endcan\n            \n\n            \n\n            \n\n\n\n            <li class=\"{{ $request->segment(1) == 'change_password' ? 'active' : '' }}\">\n                <a href=\"{{ route('auth.change_password') }}\">\n                    <i class=\"fa fa-key\"></i>\n                    <span class=\"title\">@lang('quickadmin.qa_change_password')</span>\n                </a>\n            </li>\n\n            <li>\n                <a href=\"#logout\" onclick=\"$('#logout').submit();\">\n                    <i class=\"fa fa-arrow-left\"></i>\n                    <span class=\"title\">@lang('quickadmin.qa_logout')</span>\n                </a>\n            </li>\n        </ul>\n    </section>\n</aside>\n\n"
  },
  {
    "path": "resources/views/partials/topbar.blade.php",
    "content": "<header class=\"main-header\">\n    <!-- Logo -->\n    <a href=\"{{ url('/admin/home') }}\" class=\"logo\"\n       style=\"font-size: 16px;\">\n        <!-- mini logo for sidebar mini 50x50 pixels -->\n        <span class=\"logo-mini\">\n           @lang('quickadmin.quickadmin_title')</span>\n        <!-- logo for regular state and mobile devices -->\n        <span class=\"logo-lg\">\n           @lang('quickadmin.quickadmin_title')</span>\n    </a>\n    <!-- Header Navbar: style can be found in header.less -->\n    <nav class=\"navbar navbar-static-top\">\n        <!-- Sidebar toggle button-->\n        <a href=\"#\" class=\"sidebar-toggle\" data-toggle=\"offcanvas\" role=\"button\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n        </a>\n\n        \n\n        \n\n    </nav>\n</header>\n\n\n\n"
  },
  {
    "path": "resources/views/restoreTemplate.blade.php",
    "content": "@can($gateKey.'delete')\n    {!! Form::open(array(\n        'style' => 'display: inline-block;',\n        'method' => 'POST',\n        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n        'route' => [$routeKey.'.restore', $row->id])) !!}\n    {!! Form::submit(trans('quickadmin.qa_restore'), array('class' => 'btn btn-xs btn-success')) !!}\n    {!! Form::close() !!}\n@endcan\n@can($gateKey.'delete')\n    {!! Form::open(array(\n        'style' => 'display: inline-block;',\n        'method' => 'DELETE',\n        'onsubmit' => \"return confirm('\".trans(\"quickadmin.qa_are_you_sure\").\"');\",\n        'route' => [$routeKey.'.perma_del', $row->id])) !!}\n    {!! Form::submit(trans('quickadmin.qa_permadel'), array('class' => 'btn btn-xs btn-danger')) !!}\n    {!! Form::close() !!}\n@endcan"
  },
  {
    "path": "resources/views/vendor/.gitkeep",
    "content": "\n"
  },
  {
    "path": "resources/views/welcome.blade.php",
    "content": "<!doctype html>\n<html lang=\"{{ app()->getLocale() }}\">\n    <head>\n        <meta charset=\"utf-8\">\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n        <title>Laravel</title>\n\n        <!-- Fonts -->\n        <link href=\"https://fonts.googleapis.com/css?family=Raleway:100,600\" rel=\"stylesheet\" type=\"text/css\">\n\n        <!-- Styles -->\n        <style>\n            html, body {\n                background-color: #fff;\n                color: #636b6f;\n                font-family: 'Raleway', sans-serif;\n                font-weight: 100;\n                height: 100vh;\n                margin: 0;\n            }\n\n            .full-height {\n                height: 100vh;\n            }\n\n            .flex-center {\n                align-items: center;\n                display: flex;\n                justify-content: center;\n            }\n\n            .position-ref {\n                position: relative;\n            }\n\n            .top-right {\n                position: absolute;\n                right: 10px;\n                top: 18px;\n            }\n\n            .content {\n                text-align: center;\n            }\n\n            .title {\n                font-size: 84px;\n            }\n\n            .links > a {\n                color: #636b6f;\n                padding: 0 25px;\n                font-size: 12px;\n                font-weight: 600;\n                letter-spacing: .1rem;\n                text-decoration: none;\n                text-transform: uppercase;\n            }\n\n            .m-b-md {\n                margin-bottom: 30px;\n            }\n        </style>\n    </head>\n    <body>\n        <div class=\"flex-center position-ref full-height\">\n            @if (Route::has('login'))\n                <div class=\"top-right links\">\n                    @auth\n                        <a href=\"{{ url('/home') }}\">Home</a>\n                    @else\n                        <a href=\"{{ route('login') }}\">Login</a>\n                        <a href=\"{{ route('register') }}\">Register</a>\n                    @endauth\n                </div>\n            @endif\n\n            <div class=\"content\">\n                <div class=\"title m-b-md\">\n                    Laravel\n                </div>\n\n                <div class=\"links\">\n                    <a href=\"https://laravel.com/docs\">Documentation</a>\n                    <a href=\"https://laracasts.com\">Laracasts</a>\n                    <a href=\"https://laravel-news.com\">News</a>\n                    <a href=\"https://forge.laravel.com\">Forge</a>\n                    <a href=\"https://github.com/laravel/laravel\">GitHub</a>\n                </div>\n            </div>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "routes/api.php",
    "content": "<?php\n\nRoute::group(['prefix' => '/v1', 'namespace' => 'Api\\V1', 'as' => 'api.'], function () {\n\n});\n"
  },
  {
    "path": "routes/channels.php",
    "content": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Broadcast Channels\n|--------------------------------------------------------------------------\n|\n| Here you may register all of the event broadcasting channels that your\n| application supports. The given channel authorization callbacks are\n| used to check if an authenticated user can listen to the channel.\n|\n*/\n\nBroadcast::channel('App.User.{id}', function ($user, $id) {\n    return (int) $user->id === (int) $id;\n});\n"
  },
  {
    "path": "routes/console.php",
    "content": "<?php\n\nuse Illuminate\\Foundation\\Inspiring;\n\n/*\n|--------------------------------------------------------------------------\n| Console Routes\n|--------------------------------------------------------------------------\n|\n| This file is where you may define all of your Closure based console\n| commands. Each Closure is bound to a command instance allowing a\n| simple approach to interacting with each command's IO methods.\n|\n*/\n\nArtisan::command('inspire', function () {\n    $this->comment(Inspiring::quote());\n})->describe('Display an inspiring quote');\n"
  },
  {
    "path": "routes/web.php",
    "content": "<?php\nRoute::get('/', function () {\n    return redirect('/admin/home');\n});\n\n// Authentication Routes...\n$this->get('login', 'Auth\\LoginController@showLoginForm')->name('auth.login');\n$this->post('login', 'Auth\\LoginController@login')->name('auth.login');\n$this->post('logout', 'Auth\\LoginController@logout')->name('auth.logout');\n\n// Change Password Routes...\n$this->get('change_password', 'Auth\\ChangePasswordController@showChangePasswordForm')->name('auth.change_password');\n$this->patch('change_password', 'Auth\\ChangePasswordController@changePassword')->name('auth.change_password');\n\n// Password Reset Routes...\n$this->get('password/reset', 'Auth\\ForgotPasswordController@showLinkRequestForm')->name('auth.password.reset');\n$this->post('password/email', 'Auth\\ForgotPasswordController@sendResetLinkEmail')->name('auth.password.reset');\n$this->get('password/reset/{token}', 'Auth\\ResetPasswordController@showResetForm')->name('password.reset');\n$this->post('password/reset', 'Auth\\ResetPasswordController@reset')->name('auth.password.reset');\n\nRoute::group(['middleware' => ['auth'], 'prefix' => 'admin', 'as' => 'admin.'], function () {\n    Route::get('/home', 'HomeController@index');\n\n    Route::resource('roles', 'Admin\\RolesController');\n    Route::post('roles_mass_destroy', ['uses' => 'Admin\\RolesController@massDestroy', 'as' => 'roles.mass_destroy']);\n    Route::resource('users', 'Admin\\UsersController');\n    Route::post('users_mass_destroy', ['uses' => 'Admin\\UsersController@massDestroy', 'as' => 'users.mass_destroy']);\n    \n    Route::resource('categories', 'Admin\\CategoryController');\n    Route::post('categories_mass_destroy', ['uses' => 'Admin\\CategoryController@massDestroy', 'as' => 'categories.mass_destroy']);\n    Route::post('categories_restore/{id}', ['uses' => 'Admin\\CategoryController@restore', 'as' => 'categories.restore']);\n    Route::delete('categories_perma_del/{id}', ['uses' => 'Admin\\CategoryController@perma_del', 'as' => 'categories.perma_del']);\n    \n    Route::resource('countries', 'Admin\\CountriesController');\n    Route::post('countries_mass_destroy', ['uses' => 'Admin\\CountriesController@massDestroy', 'as' => 'countries.mass_destroy']);\n    Route::post('countries_restore/{id}', ['uses' => 'Admin\\CountriesController@restore', 'as' => 'countries.restore']);\n    Route::delete('countries_perma_del/{id}', ['uses' => 'Admin\\CountriesController@perma_del', 'as' => 'countries.perma_del']);\n    Route::resource('customers', 'Admin\\CustomersController');\n    Route::post('customers_mass_destroy', ['uses' => 'Admin\\CustomersController@massDestroy', 'as' => 'customers.mass_destroy']);\n    Route::post('customers_restore/{id}', ['uses' => 'Admin\\CustomersController@restore', 'as' => 'customers.restore']);\n    Route::delete('customers_perma_del/{id}', ['uses' => 'Admin\\CustomersController@perma_del', 'as' => 'customers.perma_del']);\n    Route::resource('rooms', 'Admin\\RoomsController');\n    Route::post('rooms_mass_destroy', ['uses' => 'Admin\\RoomsController@massDestroy', 'as' => 'rooms.mass_destroy']);\n    Route::post('rooms_restore/{id}', ['uses' => 'Admin\\RoomsController@restore', 'as' => 'rooms.restore']);\n    Route::delete('rooms_perma_del/{id}', ['uses' => 'Admin\\RoomsController@perma_del', 'as' => 'rooms.perma_del']);\n    Route::resource('bookings', 'Admin\\BookingsController', ['except' => 'bookings.create']);\n     Route::get('bookings/create/', ['as' => 'bookings.create', 'uses' => 'Admin\\BookingsController@create']);\n    Route::post('bookings_mass_destroy', ['uses' => 'Admin\\BookingsController@massDestroy', 'as' => 'bookings.mass_destroy']);\n    Route::post('bookings_restore/{id}', ['uses' => 'Admin\\BookingsController@restore', 'as' => 'bookings.restore']);\n    Route::delete('bookings_perma_del/{id}', ['uses' => 'Admin\\BookingsController@perma_del', 'as' => 'bookings.perma_del']);\n    //Route::resource('/find_rooms', 'Admin\\FindRoomsController', ['except' => 'create']);\n    Route::get('/find_rooms', 'Admin\\FindRoomsController@index')->name('find_rooms.index');\n    Route::post('/find_rooms', 'Admin\\FindRoomsController@index');\n    /*Route::get('/bookings/create/', [\n        'as' => 'find_rooms.create',\n        'uses' => 'Admin\\BookingsController@create'\n    ]);*/\n});\n"
  },
  {
    "path": "server.php",
    "content": "<?php\n\n/**\n * Laravel - A PHP Framework For Web Artisans\n *\n * @package  Laravel\n * @author   Taylor Otwell <taylor@laravel.com>\n */\n\n$uri = urldecode(\n    parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)\n);\n\n// This file allows us to emulate Apache's \"mod_rewrite\" functionality from the\n// built-in PHP web server. This provides a convenient way to test a Laravel\n// application without having installed a \"real\" web server software here.\nif ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {\n    return false;\n}\n\nrequire_once __DIR__.'/public/index.php';\n"
  },
  {
    "path": "storage/app/.gitignore",
    "content": "*\n!public/\n!.gitignore\n"
  },
  {
    "path": "storage/framework/.gitignore",
    "content": "config.php\nroutes.php\nschedule-*\ncompiled.php\nservices.json\nevents.scanned.php\nroutes.scanned.php\ndown\n"
  },
  {
    "path": "storage/framework/cache/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/sessions/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/testing/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/views/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/logs/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "tests/CreatesApplication.php",
    "content": "<?php\n\nnamespace Tests;\n\nuse Illuminate\\Contracts\\Console\\Kernel;\n\ntrait CreatesApplication\n{\n    /**\n     * Creates the application.\n     *\n     * @return \\Illuminate\\Foundation\\Application\n     */\n    public function createApplication()\n    {\n        $app = require __DIR__.'/../bootstrap/app.php';\n\n        $app->make(Kernel::class)->bootstrap();\n\n        return $app;\n    }\n}\n"
  },
  {
    "path": "tests/Feature/ExampleTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature;\n\nuse Tests\\TestCase;\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\n\nclass ExampleTest extends TestCase\n{\n    /**\n     * A basic test example.\n     *\n     * @return void\n     */\n    public function testBasicTest()\n    {\n        $response = $this->get('/');\n\n        $response->assertStatus(200);\n    }\n}\n"
  },
  {
    "path": "tests/TestCase.php",
    "content": "<?php\n\nnamespace Tests;\n\nuse Illuminate\\Foundation\\Testing\\TestCase as BaseTestCase;\n\nabstract class TestCase extends BaseTestCase\n{\n    use CreatesApplication;\n}\n"
  },
  {
    "path": "tests/Unit/ExampleTest.php",
    "content": "<?php\n\nnamespace Tests\\Unit;\n\nuse Tests\\TestCase;\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\n\nclass ExampleTest extends TestCase\n{\n    /**\n     * A basic test example.\n     *\n     * @return void\n     */\n    public function testBasicTest()\n    {\n        $this->assertTrue(true);\n    }\n}\n"
  },
  {
    "path": "webpack.mix.js",
    "content": "let mix = require('laravel-mix');\n\n/*\n |--------------------------------------------------------------------------\n | Mix Asset Management\n |--------------------------------------------------------------------------\n |\n | Mix provides a clean, fluent API for defining some Webpack build steps\n | for your Laravel application. By default, we are compiling the Sass\n | file for the application as well as bundling up all the JS files.\n |\n */\n\nmix.js('resources/assets/js/app.js', 'public/js')\n   .sass('resources/assets/sass/app.scss', 'public/css');\n"
  }
]